Compare commits
129 Commits
Author | SHA1 | Date | |
---|---|---|---|
|
e968a225be | ||
|
c2294289d4 | ||
|
0b96831e33 | ||
|
5947ba300e | ||
|
fa6a859027 | ||
|
288981192a | ||
|
fd355cf0ef | ||
|
f5b3c0c3bc | ||
|
590ab43551 | ||
|
7c3f0265b9 | ||
|
1cca860271 | ||
|
2b0fb325d3 | ||
|
3500a94a3a | ||
|
f53303538c | ||
|
674c966f91 | ||
|
12340afd9a | ||
|
441932f6b0 | ||
|
1304907106 | ||
|
49a6087deb | ||
|
f4e278e6c1 | ||
|
1db184a51c | ||
|
75b70b7082 | ||
|
4a2f794567 | ||
|
1c6f4d8228 | ||
|
a8af5c4499 | ||
|
9ecce5911b | ||
|
8f6208e90a | ||
|
e536ba2f9b | ||
|
00df8b76e5 | ||
|
d02735041e | ||
|
d06427d469 | ||
|
86016f25a0 | ||
|
5230270424 | ||
|
e63c6ca01f | ||
|
d41ba2c6b2 | ||
|
823157f2ad | ||
|
cde3469190 | ||
|
883c32f2f1 | ||
|
5c728073aa | ||
|
e305a8c019 | ||
|
da0ecc86eb | ||
|
6bd839f361 | ||
|
2353f4dddf | ||
|
64e0e28b24 | ||
|
b2480837b0 | ||
|
4c100c0433 | ||
|
ab463f9321 | ||
|
c77fad4ece | ||
|
389a10840f | ||
|
5db54ba78c | ||
|
1026465f47 | ||
|
a7d28bc965 | ||
|
e7a4eb5337 | ||
|
c2c439013c | ||
|
0cffad5376 | ||
|
9295abcea7 | ||
|
d2d8bfa7bd | ||
|
a72820939f | ||
|
a4ce8474ff | ||
|
9ed6ff752e | ||
|
cc247bc050 | ||
|
3ad5937b37 | ||
|
7e9627c5dd | ||
|
21ded59c33 | ||
|
2ae74fe737 | ||
|
83bb7ef820 | ||
|
afbdc4ede1 | ||
|
36bbe88f21 | ||
|
55706d391d | ||
|
94f6f2766e | ||
|
7c2636d282 | ||
|
7268e49a30 | ||
|
20f693bc4a | ||
|
017fbe88bb | ||
|
5a3f7b33b4 | ||
|
f4703a3aa6 | ||
|
ad0824136e | ||
|
0684272823 | ||
|
43c92f25fa | ||
|
8d0dba79e5 | ||
|
dfa11d663d | ||
|
ba56b41dda | ||
|
b62af904bb | ||
|
72e585ceed | ||
|
e859de8c39 | ||
|
3e2e72729f | ||
|
41f5cdf526 | ||
|
a94d6d3cf8 | ||
|
9cecb1e836 | ||
|
ff4932e477 | ||
|
3576c8e6a7 | ||
|
8239d87e8c | ||
|
491e8e0332 | ||
|
5463f925ea | ||
|
77b39908bd | ||
|
f4d642d516 | ||
|
41d28c9332 | ||
|
973c6dd479 | ||
|
d513b22e37 | ||
|
b0a6cb7226 | ||
|
e740c592ab | ||
|
6114630e3b | ||
|
1d16f0d433 | ||
|
c197d028ec | ||
|
826ac88493 | ||
|
bba83bffcc | ||
|
4a75648658 | ||
|
145984eed9 | ||
|
808723b9fb | ||
|
1c1b5bdbc3 | ||
|
b854555a3d | ||
|
d7ace5b8b1 | ||
|
568997f10f | ||
|
113688d83d | ||
|
7db9bfc273 | ||
|
dce540bee5 | ||
|
be55bd4d52 | ||
|
ad1c3a2f6c | ||
|
7559df3050 | ||
|
45c62c32cb | ||
|
c6a3afa130 | ||
|
5ec5304f80 | ||
|
224321c230 | ||
|
76998cb5ed | ||
|
fbf6807fb8 | ||
|
e9caeaf30d | ||
|
75f2c45ec2 | ||
|
bcca4a2f11 | ||
|
45f05c9a84 |
@ -1,67 +0,0 @@
|
|||||||
# Top-most EditorConfig file
|
|
||||||
root = true
|
|
||||||
|
|
||||||
[*]
|
|
||||||
end_of_line = lf
|
|
||||||
insert_final_newline = true
|
|
||||||
indent_style = tab
|
|
||||||
charset = utf-8
|
|
||||||
|
|
||||||
[Dockerfile]
|
|
||||||
indent_style = space
|
|
||||||
indent_size = 4
|
|
||||||
|
|
||||||
[/patches/**]
|
|
||||||
indent_style = unset
|
|
||||||
indent_size = unset
|
|
||||||
|
|
||||||
[*.c]
|
|
||||||
|
|
||||||
[*.css]
|
|
||||||
|
|
||||||
[*.dia]
|
|
||||||
indent_style = space
|
|
||||||
indent_size = 2
|
|
||||||
|
|
||||||
[*.h]
|
|
||||||
|
|
||||||
[*.html]
|
|
||||||
|
|
||||||
[*.js]
|
|
||||||
|
|
||||||
[*{.json,.ecrc}]
|
|
||||||
indent_style = space
|
|
||||||
indent_size = 2
|
|
||||||
|
|
||||||
[*.lua]
|
|
||||||
|
|
||||||
[{Makefile,*.mk}]
|
|
||||||
indent_style = unset
|
|
||||||
|
|
||||||
[*.md]
|
|
||||||
indent_style = space
|
|
||||||
indent_size = 4
|
|
||||||
|
|
||||||
[*.pl]
|
|
||||||
|
|
||||||
[*.py]
|
|
||||||
indent_style = space
|
|
||||||
indent_size = 4
|
|
||||||
|
|
||||||
[*.rst]
|
|
||||||
indent_style = space
|
|
||||||
indent_size = 2
|
|
||||||
|
|
||||||
[*.sh]
|
|
||||||
|
|
||||||
[*.yml]
|
|
||||||
indent_style = space
|
|
||||||
indent_size = 2
|
|
||||||
|
|
||||||
[CMakeLists.txt]
|
|
||||||
indent_style = space
|
|
||||||
indent_size = 2
|
|
||||||
|
|
||||||
[{docs,contrib/ci}/*site*/**/*.conf]
|
|
||||||
indent_style = space
|
|
||||||
indent_size = 2
|
|
71
.github/ISSUE_TEMPLATE/bug_report.md
vendored
@ -1,71 +0,0 @@
|
|||||||
---
|
|
||||||
name: Bug report
|
|
||||||
about: Report a bug in a recent version of Gluon
|
|
||||||
label: bug
|
|
||||||
---
|
|
||||||
|
|
||||||
<!--
|
|
||||||
|
|
||||||
Please carefully fill out the questionnaire below to help improve the
|
|
||||||
timely triaging of issues. Walk through the questions below and use
|
|
||||||
them as an inspiration for what information you can provide.
|
|
||||||
|
|
||||||
Make use of codeblocks (three backticks before and after) where
|
|
||||||
appropriate (configuration excerpts, log output, etc.). Example:
|
|
||||||
|
|
||||||
```
|
|
||||||
your code goes here
|
|
||||||
```
|
|
||||||
|
|
||||||
You can use the "Preview" tab to check how your issue is going to look
|
|
||||||
before you actually send it in.
|
|
||||||
|
|
||||||
Thank you for taking the time to report a bug with the Gluon project.
|
|
||||||
|
|
||||||
-->
|
|
||||||
|
|
||||||
### Bug report
|
|
||||||
|
|
||||||
**What is the problem?**
|
|
||||||
<!--
|
|
||||||
- What is not working as expected?
|
|
||||||
- How is it misbehaving?
|
|
||||||
- When did the problem first start showing up?
|
|
||||||
- What were you doing when you first noticed the problem?
|
|
||||||
- On which devices (vendor, model and revision) is it misbehaving?
|
|
||||||
- Does the issue appear on multiple devices or targets?
|
|
||||||
-->
|
|
||||||
|
|
||||||
**What is the expected behaviour?**
|
|
||||||
<!--
|
|
||||||
- How do you think it should work instead?
|
|
||||||
- Did it work like that before?
|
|
||||||
-->
|
|
||||||
|
|
||||||
**Gluon Version:**
|
|
||||||
<!--
|
|
||||||
Please provide a usable Git reference before applying custom patches:
|
|
||||||
|
|
||||||
By using a Git reference:
|
|
||||||
$ git describe --always
|
|
||||||
v2018.2-17-g3abadc28
|
|
||||||
|
|
||||||
Or the URL to the relevant Gluon commit
|
|
||||||
https://github.com/freifunk-gluon/gluon/commit/<commit hash here>
|
|
||||||
-->
|
|
||||||
|
|
||||||
**Site Configuration:**
|
|
||||||
<!--
|
|
||||||
Please provide the URL to your site configuration repository and the
|
|
||||||
explicit commit used to build the firmware experiencing the problem.
|
|
||||||
|
|
||||||
Additionally excerpts of problem-related configuration parts are
|
|
||||||
often helpful.
|
|
||||||
-->
|
|
||||||
|
|
||||||
**Custom patches:**
|
|
||||||
<!--
|
|
||||||
Be upfront about any custom patches you have applied to your Gluon build, as they might
|
|
||||||
be part of your problem.
|
|
||||||
-->
|
|
||||||
|
|
12
.github/dependabot.yml
vendored
@ -1,12 +0,0 @@
|
|||||||
# Docs: <https://docs.github.com/en/code-security/dependabot/dependabot-version-updates/customizing-dependency-updates>
|
|
||||||
|
|
||||||
version: 2
|
|
||||||
|
|
||||||
updates:
|
|
||||||
- package-ecosystem: github-actions
|
|
||||||
directory: /
|
|
||||||
schedule: {interval: monthly}
|
|
||||||
|
|
||||||
- package-ecosystem: pip
|
|
||||||
directory: /docs/
|
|
||||||
schedule: {interval: monthly}
|
|
237
.github/filters.yml
vendored
@ -1,237 +0,0 @@
|
|||||||
{
|
|
||||||
"ath79-generic": [
|
|
||||||
"targets/ath79-generic",
|
|
||||||
"modules",
|
|
||||||
"Makefile",
|
|
||||||
"patches/**",
|
|
||||||
"scripts/**",
|
|
||||||
"targets/generic",
|
|
||||||
"targets/targets.mk"
|
|
||||||
],
|
|
||||||
"ath79-nand": [
|
|
||||||
"targets/ath79-nand",
|
|
||||||
"modules",
|
|
||||||
"Makefile",
|
|
||||||
"patches/**",
|
|
||||||
"scripts/**",
|
|
||||||
"targets/generic",
|
|
||||||
"targets/targets.mk"
|
|
||||||
],
|
|
||||||
"ath79-mikrotik": [
|
|
||||||
"targets/ath79-mikrotik",
|
|
||||||
"modules",
|
|
||||||
"Makefile",
|
|
||||||
"patches/**",
|
|
||||||
"scripts/**",
|
|
||||||
"targets/generic",
|
|
||||||
"targets/targets.mk",
|
|
||||||
"targets/mikrotik.inc"
|
|
||||||
],
|
|
||||||
"bcm27xx-bcm2708": [
|
|
||||||
"targets/bcm27xx-bcm2708",
|
|
||||||
"modules",
|
|
||||||
"Makefile",
|
|
||||||
"patches/**",
|
|
||||||
"scripts/**",
|
|
||||||
"targets/generic",
|
|
||||||
"targets/targets.mk",
|
|
||||||
"targets/bcm27xx.inc"
|
|
||||||
],
|
|
||||||
"bcm27xx-bcm2709": [
|
|
||||||
"targets/bcm27xx-bcm2709",
|
|
||||||
"modules",
|
|
||||||
"Makefile",
|
|
||||||
"patches/**",
|
|
||||||
"scripts/**",
|
|
||||||
"targets/generic",
|
|
||||||
"targets/targets.mk",
|
|
||||||
"targets/bcm27xx.inc"
|
|
||||||
],
|
|
||||||
"ipq40xx-generic": [
|
|
||||||
"targets/ipq40xx-generic",
|
|
||||||
"modules",
|
|
||||||
"Makefile",
|
|
||||||
"patches/**",
|
|
||||||
"scripts/**",
|
|
||||||
"targets/generic",
|
|
||||||
"targets/targets.mk"
|
|
||||||
],
|
|
||||||
"ipq40xx-mikrotik": [
|
|
||||||
"targets/ipq40xx-mikrotik",
|
|
||||||
"modules",
|
|
||||||
"Makefile",
|
|
||||||
"patches/**",
|
|
||||||
"scripts/**",
|
|
||||||
"targets/generic",
|
|
||||||
"targets/targets.mk",
|
|
||||||
"targets/mikrotik.inc"
|
|
||||||
],
|
|
||||||
"ipq806x-generic": [
|
|
||||||
"targets/ipq806x-generic",
|
|
||||||
"modules",
|
|
||||||
"Makefile",
|
|
||||||
"patches/**",
|
|
||||||
"scripts/**",
|
|
||||||
"targets/generic",
|
|
||||||
"targets/targets.mk"
|
|
||||||
],
|
|
||||||
"lantiq-xrx200": [
|
|
||||||
"targets/lantiq-xrx200",
|
|
||||||
"modules",
|
|
||||||
"Makefile",
|
|
||||||
"patches/**",
|
|
||||||
"scripts/**",
|
|
||||||
"targets/generic",
|
|
||||||
"targets/targets.mk"
|
|
||||||
],
|
|
||||||
"lantiq-xway": [
|
|
||||||
"targets/lantiq-xway",
|
|
||||||
"modules",
|
|
||||||
"Makefile",
|
|
||||||
"patches/**",
|
|
||||||
"scripts/**",
|
|
||||||
"targets/generic",
|
|
||||||
"targets/targets.mk"
|
|
||||||
],
|
|
||||||
"mediatek-mt7622": [
|
|
||||||
"targets/mediatek-mt7622",
|
|
||||||
"modules",
|
|
||||||
"Makefile",
|
|
||||||
"patches/**",
|
|
||||||
"scripts/**",
|
|
||||||
"targets/generic",
|
|
||||||
"targets/targets.mk"
|
|
||||||
],
|
|
||||||
"mpc85xx-p1010": [
|
|
||||||
"targets/mpc85xx-p1010",
|
|
||||||
"modules",
|
|
||||||
"Makefile",
|
|
||||||
"patches/**",
|
|
||||||
"scripts/**",
|
|
||||||
"targets/generic",
|
|
||||||
"targets/targets.mk"
|
|
||||||
],
|
|
||||||
"mpc85xx-p1020": [
|
|
||||||
"targets/mpc85xx-p1020",
|
|
||||||
"modules",
|
|
||||||
"Makefile",
|
|
||||||
"patches/**",
|
|
||||||
"scripts/**",
|
|
||||||
"targets/generic",
|
|
||||||
"targets/targets.mk"
|
|
||||||
],
|
|
||||||
"ramips-mt7620": [
|
|
||||||
"targets/ramips-mt7620",
|
|
||||||
"modules",
|
|
||||||
"Makefile",
|
|
||||||
"patches/**",
|
|
||||||
"scripts/**",
|
|
||||||
"targets/generic",
|
|
||||||
"targets/targets.mk"
|
|
||||||
],
|
|
||||||
"ramips-mt7621": [
|
|
||||||
"targets/ramips-mt7621",
|
|
||||||
"modules",
|
|
||||||
"Makefile",
|
|
||||||
"patches/**",
|
|
||||||
"scripts/**",
|
|
||||||
"targets/generic",
|
|
||||||
"targets/targets.mk"
|
|
||||||
],
|
|
||||||
"ramips-mt76x8": [
|
|
||||||
"targets/ramips-mt76x8",
|
|
||||||
"modules",
|
|
||||||
"Makefile",
|
|
||||||
"patches/**",
|
|
||||||
"scripts/**",
|
|
||||||
"targets/generic",
|
|
||||||
"targets/targets.mk"
|
|
||||||
],
|
|
||||||
"realtek-rtl838x": [
|
|
||||||
"targets/realtek-rtl838x",
|
|
||||||
"modules",
|
|
||||||
"Makefile",
|
|
||||||
"patches/**",
|
|
||||||
"scripts/**",
|
|
||||||
"targets/generic",
|
|
||||||
"targets/targets.mk"
|
|
||||||
],
|
|
||||||
"rockchip-armv8": [
|
|
||||||
"targets/rockchip-armv8",
|
|
||||||
"modules",
|
|
||||||
"Makefile",
|
|
||||||
"patches/**",
|
|
||||||
"scripts/**",
|
|
||||||
"targets/generic",
|
|
||||||
"targets/targets.mk"
|
|
||||||
],
|
|
||||||
"sunxi-cortexa7": [
|
|
||||||
"targets/sunxi-cortexa7",
|
|
||||||
"modules",
|
|
||||||
"Makefile",
|
|
||||||
"patches/**",
|
|
||||||
"scripts/**",
|
|
||||||
"targets/generic",
|
|
||||||
"targets/targets.mk"
|
|
||||||
],
|
|
||||||
"x86-generic": [
|
|
||||||
"targets/x86-generic",
|
|
||||||
"modules",
|
|
||||||
"Makefile",
|
|
||||||
"patches/**",
|
|
||||||
"scripts/**",
|
|
||||||
"targets/generic",
|
|
||||||
"targets/targets.mk",
|
|
||||||
"targets/x86.inc"
|
|
||||||
],
|
|
||||||
"x86-geode": [
|
|
||||||
"targets/x86-geode",
|
|
||||||
"modules",
|
|
||||||
"Makefile",
|
|
||||||
"patches/**",
|
|
||||||
"scripts/**",
|
|
||||||
"targets/generic",
|
|
||||||
"targets/targets.mk"
|
|
||||||
],
|
|
||||||
"x86-legacy": [
|
|
||||||
"targets/x86-legacy",
|
|
||||||
"modules",
|
|
||||||
"Makefile",
|
|
||||||
"patches/**",
|
|
||||||
"scripts/**",
|
|
||||||
"targets/generic",
|
|
||||||
"targets/targets.mk",
|
|
||||||
"targets/x86.inc"
|
|
||||||
],
|
|
||||||
"x86-64": [
|
|
||||||
"targets/x86-64",
|
|
||||||
"modules",
|
|
||||||
"Makefile",
|
|
||||||
"patches/**",
|
|
||||||
"scripts/**",
|
|
||||||
"targets/generic",
|
|
||||||
"targets/targets.mk",
|
|
||||||
"targets/x86.inc",
|
|
||||||
"contrib/ci/minimal-site/**",
|
|
||||||
"package/**"
|
|
||||||
],
|
|
||||||
"bcm27xx-bcm2710": [
|
|
||||||
"targets/bcm27xx-bcm2710",
|
|
||||||
"modules",
|
|
||||||
"Makefile",
|
|
||||||
"patches/**",
|
|
||||||
"scripts/**",
|
|
||||||
"targets/generic",
|
|
||||||
"targets/targets.mk",
|
|
||||||
"targets/bcm27xx.inc"
|
|
||||||
],
|
|
||||||
"mvebu-cortexa9": [
|
|
||||||
"targets/mvebu-cortexa9",
|
|
||||||
"modules",
|
|
||||||
"Makefile",
|
|
||||||
"patches/**",
|
|
||||||
"scripts/**",
|
|
||||||
"targets/generic",
|
|
||||||
"targets/targets.mk"
|
|
||||||
]
|
|
||||||
}
|
|
59
.github/labeler.yml
vendored
@ -1,59 +0,0 @@
|
|||||||
---
|
|
||||||
"3. topic: babel":
|
|
||||||
- package/gluon-l3roamd/**
|
|
||||||
- package/gluon-mesh-babel/**
|
|
||||||
- package/gluon-mmfd/**
|
|
||||||
"3. topic: batman-adv":
|
|
||||||
- docs/package/gluon-mesh-batman-adv*
|
|
||||||
- package/gluon-alfred/**
|
|
||||||
- package/gluon-cient-bridge/**
|
|
||||||
- package/gluon-mesh-batman-adv/**
|
|
||||||
- package/libbatadv/**
|
|
||||||
"3. topic: build":
|
|
||||||
- Makefile
|
|
||||||
- scripts/**
|
|
||||||
"3. topic: config-mode":
|
|
||||||
- docs/dev/web/config-mode.rst
|
|
||||||
- docs/package/gluon-config-mode-*
|
|
||||||
- packge/gluon-config-mode-*/**
|
|
||||||
- package/gluon-web*/**
|
|
||||||
"3. topic: continous integration":
|
|
||||||
- .github/workflows/*
|
|
||||||
- contrib/actions/**
|
|
||||||
- contrib/ci/**
|
|
||||||
"3. topic: docs":
|
|
||||||
- docs/**
|
|
||||||
"3. topic: fastd":
|
|
||||||
- docs/features/fastd*
|
|
||||||
- package/gluon-mesh-vpn-fastd/**
|
|
||||||
"3. topic: firewall":
|
|
||||||
- package/**/*-firewall
|
|
||||||
- package/gluon-ebtables-*/**
|
|
||||||
"3. topic: hardware":
|
|
||||||
- package/gluon-core/luasrc/lib/gluon/upgrade/010-primary-mac
|
|
||||||
- package/gluon-core/luasrc/usr/lib/lua/gluon/platform.lua
|
|
||||||
- targets/*
|
|
||||||
"3. topic: multidomain":
|
|
||||||
- docs/features/multidomain*
|
|
||||||
- docs/multidomain-site-example/**
|
|
||||||
- package/gluon-config-mode-domain-select/**
|
|
||||||
- package/gluon-scheduled-domain-switch/**
|
|
||||||
"3. topic: package":
|
|
||||||
- package/**
|
|
||||||
"3. topic: respondd":
|
|
||||||
- package/**/*respondd*
|
|
||||||
- package/gluon-respondd/**
|
|
||||||
"3. topic: status-page":
|
|
||||||
- package/gluon-status-page/**
|
|
||||||
"3. topic: tests":
|
|
||||||
- tests/**
|
|
||||||
"3. topic: tunneldigger":
|
|
||||||
- package/gluon-mesh-vpn-tunneldigger/**
|
|
||||||
"3. topic: wireguard":
|
|
||||||
- package/gluon-mesh-vpn-wireguard/**
|
|
||||||
"3. topic: wireless":
|
|
||||||
- package/gluon-mesh-wireless-sae/**
|
|
||||||
- package/gluon-private-wifi/**
|
|
||||||
- package/gluon-web-private-wifi/**
|
|
||||||
- package/gluon-web-wifi-config/**
|
|
||||||
- package/gluon-wireless-encryption/**
|
|
20
.github/workflows/backport.yml
vendored
@ -1,20 +0,0 @@
|
|||||||
name: Backport
|
|
||||||
on:
|
|
||||||
pull_request_target:
|
|
||||||
types: [closed, labeled]
|
|
||||||
permissions:
|
|
||||||
contents: write # so it can comment
|
|
||||||
pull-requests: write # so it can create pull requests
|
|
||||||
jobs:
|
|
||||||
backport:
|
|
||||||
name: Backport Pull Request
|
|
||||||
if: github.repository_owner == 'freifunk-gluon' && github.event.pull_request.merged == true && (github.event_name != 'labeled' || startsWith('backport', github.event.label.name))
|
|
||||||
runs-on: ubuntu-latest
|
|
||||||
steps:
|
|
||||||
- uses: actions/checkout@v3
|
|
||||||
- name: Create backport PRs
|
|
||||||
uses: korthout/backport-action@v1.2.0
|
|
||||||
with:
|
|
||||||
# Config README: https://github.com/korthout/backport-action#backport-action
|
|
||||||
pull_description: |-
|
|
||||||
Automatic backport to `${target_branch}`, triggered by a label in #${pull_number}.
|
|
29
.github/workflows/build-docs.yml
vendored
@ -1,29 +0,0 @@
|
|||||||
name: Build Documentation
|
|
||||||
on:
|
|
||||||
push:
|
|
||||||
paths:
|
|
||||||
- 'docs/**'
|
|
||||||
- '.github/workflows/build-docs.yml'
|
|
||||||
pull_request:
|
|
||||||
types: [opened, synchronize, reopened]
|
|
||||||
paths:
|
|
||||||
- 'docs**/'
|
|
||||||
- '.github/workflows/build-docs.yml'
|
|
||||||
permissions:
|
|
||||||
contents: read
|
|
||||||
|
|
||||||
jobs:
|
|
||||||
build-documentation:
|
|
||||||
name: docs
|
|
||||||
runs-on: ubuntu-latest
|
|
||||||
steps:
|
|
||||||
- uses: actions/checkout@v3
|
|
||||||
- name: Install Dependencies
|
|
||||||
run: sudo pip3 install sphinx-rtd-theme
|
|
||||||
- name: Build documentation
|
|
||||||
run: make -C docs html
|
|
||||||
- name: Archive build output
|
|
||||||
uses: actions/upload-artifact@v3
|
|
||||||
with:
|
|
||||||
name: docs_output
|
|
||||||
path: docs/_build/html
|
|
61
.github/workflows/build-gluon.yml
vendored
@ -1,61 +0,0 @@
|
|||||||
name: Build Gluon
|
|
||||||
on:
|
|
||||||
push:
|
|
||||||
branches:
|
|
||||||
- master
|
|
||||||
- next*
|
|
||||||
- v20*
|
|
||||||
pull_request:
|
|
||||||
types: [opened, synchronize, reopened]
|
|
||||||
|
|
||||||
permissions:
|
|
||||||
contents: read
|
|
||||||
|
|
||||||
jobs:
|
|
||||||
changed:
|
|
||||||
permissions:
|
|
||||||
contents: read # for dorny/paths-filter to fetch a list of changed files
|
|
||||||
pull-requests: read # for dorny/paths-filter to read pull requests
|
|
||||||
runs-on: ubuntu-latest
|
|
||||||
outputs:
|
|
||||||
targets: ${{ steps.filter.outputs.changes }}
|
|
||||||
steps:
|
|
||||||
- uses: actions/checkout@v3
|
|
||||||
|
|
||||||
# Filter targets based on changed files
|
|
||||||
- uses: dorny/paths-filter@v2
|
|
||||||
id: filter
|
|
||||||
with:
|
|
||||||
filters: .github/filters.yml
|
|
||||||
|
|
||||||
build_firmware:
|
|
||||||
needs: changed
|
|
||||||
if: ${{ needs.changed.outputs.targets != '[]' && needs.changed.outputs.targets != '' }}
|
|
||||||
strategy:
|
|
||||||
fail-fast: false
|
|
||||||
matrix:
|
|
||||||
# Read back changed targets to create build matrix
|
|
||||||
target: ${{ fromJSON(needs.changed.outputs.targets) }}
|
|
||||||
runs-on: ubuntu-latest
|
|
||||||
steps:
|
|
||||||
- uses: actions/checkout@v3
|
|
||||||
|
|
||||||
- name: Install Dependencies
|
|
||||||
run: sudo contrib/actions/install-dependencies.sh
|
|
||||||
|
|
||||||
- name: Build
|
|
||||||
run: contrib/actions/run-build.sh ${{ matrix.target }}
|
|
||||||
|
|
||||||
- name: Archive build logs
|
|
||||||
if: ${{ !cancelled() }}
|
|
||||||
uses: actions/upload-artifact@v3
|
|
||||||
with:
|
|
||||||
name: ${{ matrix.target }}_logs
|
|
||||||
path: openwrt/logs
|
|
||||||
|
|
||||||
- name: Archive build output
|
|
||||||
uses: actions/upload-artifact@v3
|
|
||||||
with:
|
|
||||||
name: ${{ matrix.target }}_output
|
|
||||||
path: output
|
|
||||||
|
|
30
.github/workflows/check-patches.yml
vendored
@ -1,30 +0,0 @@
|
|||||||
---
|
|
||||||
name: Check patches
|
|
||||||
on:
|
|
||||||
push:
|
|
||||||
paths:
|
|
||||||
- 'modules'
|
|
||||||
- 'patches/**'
|
|
||||||
- '.github/workflows/check-patches.yml'
|
|
||||||
pull_request:
|
|
||||||
types: [opened, synchronize, reopened]
|
|
||||||
paths:
|
|
||||||
- 'modules'
|
|
||||||
- 'patches/**'
|
|
||||||
- '.github/workflows/check-patches.yml'
|
|
||||||
permissions:
|
|
||||||
contents: read
|
|
||||||
|
|
||||||
jobs:
|
|
||||||
check-patches:
|
|
||||||
name: Check patches
|
|
||||||
runs-on: ubuntu-latest
|
|
||||||
steps:
|
|
||||||
- uses: actions/checkout@v3
|
|
||||||
- name: Refresh patches
|
|
||||||
run: make refresh-patches GLUON_SITEDIR="contrib/ci/minimal-site"
|
|
||||||
- name: Show diff
|
|
||||||
run: git status; git diff
|
|
||||||
- name: Patch status
|
|
||||||
run: git diff-files --quiet
|
|
||||||
|
|
21
.github/workflows/labels.yml
vendored
@ -1,21 +0,0 @@
|
|||||||
name: "Label PRs"
|
|
||||||
|
|
||||||
on:
|
|
||||||
# only execute base branch actions
|
|
||||||
pull_request_target:
|
|
||||||
|
|
||||||
permissions:
|
|
||||||
contents: read
|
|
||||||
|
|
||||||
jobs:
|
|
||||||
labels:
|
|
||||||
permissions:
|
|
||||||
contents: read # for actions/labeler to determine modified files
|
|
||||||
pull-requests: write # for actions/labeler to add labels to PRs
|
|
||||||
runs-on: ubuntu-latest
|
|
||||||
if: github.repository_owner == 'freifunk-gluon'
|
|
||||||
steps:
|
|
||||||
- uses: actions/labeler@v4
|
|
||||||
with:
|
|
||||||
repo-token: ${{ secrets.GITHUB_TOKEN }}
|
|
||||||
sync-labels: true
|
|
54
.github/workflows/lint.yml
vendored
@ -1,54 +0,0 @@
|
|||||||
name: Lint
|
|
||||||
on:
|
|
||||||
push:
|
|
||||||
pull_request:
|
|
||||||
types: [opened, synchronize, reopened]
|
|
||||||
permissions:
|
|
||||||
contents: read
|
|
||||||
|
|
||||||
jobs:
|
|
||||||
lua:
|
|
||||||
name: Lua
|
|
||||||
runs-on: ubuntu-latest
|
|
||||||
steps:
|
|
||||||
- uses: actions/checkout@v3
|
|
||||||
- name: Install Dependencies
|
|
||||||
run: sudo apt-get -y update && sudo apt-get -y install lua-check
|
|
||||||
- name: Install example site
|
|
||||||
run: ln -s ./docs/site-example ./site
|
|
||||||
- name: Lint Lua code
|
|
||||||
run: make lint-lua
|
|
||||||
|
|
||||||
sh:
|
|
||||||
name: Shell
|
|
||||||
runs-on: ubuntu-latest
|
|
||||||
steps:
|
|
||||||
- uses: actions/checkout@v3
|
|
||||||
- name: Install Dependencies
|
|
||||||
run: sudo apt-get -y update && sudo apt-get -y install shellcheck
|
|
||||||
- name: Install example site
|
|
||||||
run: ln -s ./docs/site-example ./site
|
|
||||||
- name: Lint shell code
|
|
||||||
run: make lint-sh
|
|
||||||
|
|
||||||
editorconfig:
|
|
||||||
name: Editorconfig
|
|
||||||
runs-on: ubuntu-latest
|
|
||||||
steps:
|
|
||||||
- uses: actions/checkout@v3
|
|
||||||
- name: Install Dependencies
|
|
||||||
run: sudo apt install curl tar
|
|
||||||
- name: Install editorconfig-checker
|
|
||||||
env:
|
|
||||||
VERSION: 2.7.0
|
|
||||||
OS: linux
|
|
||||||
ARCH: amd64
|
|
||||||
run: |
|
|
||||||
curl -O -L -C - https://github.com/editorconfig-checker/editorconfig-checker/releases/download/$VERSION/ec-$OS-$ARCH.tar.gz
|
|
||||||
tar xzf ec-$OS-$ARCH.tar.gz
|
|
||||||
sudo mv ./bin/ec-$OS-$ARCH /usr/bin/editorconfig-checker
|
|
||||||
sudo chmod +x /usr/bin/editorconfig-checker
|
|
||||||
- name: Install example site
|
|
||||||
run: ln -s ./docs/site-example ./site
|
|
||||||
- name: Lint editorconfig
|
|
||||||
run: make lint-editorconfig
|
|
6
.gitignore
vendored
@ -1,10 +1,6 @@
|
|||||||
*~
|
*~
|
||||||
/openwrt
|
/lede
|
||||||
/output
|
/output
|
||||||
/site
|
/site
|
||||||
/tmp
|
/tmp
|
||||||
/packages
|
/packages
|
||||||
.bash_history
|
|
||||||
.subversion
|
|
||||||
.wget-hsts
|
|
||||||
/.scmversion
|
|
||||||
|
119
.luacheckrc
@ -1,119 +0,0 @@
|
|||||||
codes = true
|
|
||||||
std = "min"
|
|
||||||
self = false
|
|
||||||
|
|
||||||
read_globals = {
|
|
||||||
"getfenv",
|
|
||||||
"setfenv",
|
|
||||||
"unpack",
|
|
||||||
}
|
|
||||||
|
|
||||||
include_files = {
|
|
||||||
"**/*.lua",
|
|
||||||
"package/**/luasrc/**/*",
|
|
||||||
"targets/*",
|
|
||||||
"package/features",
|
|
||||||
}
|
|
||||||
|
|
||||||
exclude_files = {
|
|
||||||
"**/*.mk",
|
|
||||||
}
|
|
||||||
|
|
||||||
files["package/**/check_site.lua"] = {
|
|
||||||
read_globals = {
|
|
||||||
"alternatives",
|
|
||||||
"extend",
|
|
||||||
"in_domain",
|
|
||||||
"in_site",
|
|
||||||
"value",
|
|
||||||
"need",
|
|
||||||
"need_alphanumeric_key",
|
|
||||||
"need_array",
|
|
||||||
"need_array_elements_exclusive",
|
|
||||||
"need_array_of",
|
|
||||||
"need_boolean",
|
|
||||||
"need_chanlist",
|
|
||||||
"need_domain_name",
|
|
||||||
"need_number",
|
|
||||||
"need_number_range",
|
|
||||||
"need_one_of",
|
|
||||||
"need_string",
|
|
||||||
"need_string_array",
|
|
||||||
"need_string_array_match",
|
|
||||||
"need_string_match",
|
|
||||||
"need_table",
|
|
||||||
"need_value",
|
|
||||||
"obsolete",
|
|
||||||
"table_keys",
|
|
||||||
"this_domain",
|
|
||||||
},
|
|
||||||
}
|
|
||||||
|
|
||||||
files["package/**/luasrc/lib/gluon/config-mode/*"] = {
|
|
||||||
globals = {
|
|
||||||
"MultiListValue",
|
|
||||||
"DynamicList",
|
|
||||||
"Flag",
|
|
||||||
"Form",
|
|
||||||
"i18n",
|
|
||||||
"ListValue",
|
|
||||||
"renderer.render",
|
|
||||||
"renderer.render_string",
|
|
||||||
"Section",
|
|
||||||
"TextValue",
|
|
||||||
"_translate",
|
|
||||||
"translate",
|
|
||||||
"translatef",
|
|
||||||
"Value",
|
|
||||||
"Element",
|
|
||||||
},
|
|
||||||
}
|
|
||||||
|
|
||||||
files["package/**/luasrc/lib/gluon/**/controller/*"] = {
|
|
||||||
read_globals = {
|
|
||||||
"_",
|
|
||||||
"alias",
|
|
||||||
"call",
|
|
||||||
"entry",
|
|
||||||
"model",
|
|
||||||
"node",
|
|
||||||
"template",
|
|
||||||
},
|
|
||||||
}
|
|
||||||
|
|
||||||
files["package/**/luasrc/lib/gluon/ebtables/*"] = {
|
|
||||||
read_globals = {
|
|
||||||
"chain",
|
|
||||||
"rule",
|
|
||||||
},
|
|
||||||
max_line_length = false,
|
|
||||||
}
|
|
||||||
|
|
||||||
files["targets/*"] = {
|
|
||||||
read_globals = {
|
|
||||||
"class",
|
|
||||||
"config",
|
|
||||||
"defaults",
|
|
||||||
"device",
|
|
||||||
"env",
|
|
||||||
"exec",
|
|
||||||
"exec_capture",
|
|
||||||
"exec_capture_raw",
|
|
||||||
"exec_raw",
|
|
||||||
"factory_image",
|
|
||||||
"include",
|
|
||||||
"istrue",
|
|
||||||
"no_opkg",
|
|
||||||
"packages",
|
|
||||||
"sysupgrade_image",
|
|
||||||
"try_config",
|
|
||||||
},
|
|
||||||
}
|
|
||||||
|
|
||||||
files["package/features"] = {
|
|
||||||
read_globals = {
|
|
||||||
"_",
|
|
||||||
"feature",
|
|
||||||
"when",
|
|
||||||
},
|
|
||||||
}
|
|
@ -1,20 +0,0 @@
|
|||||||
# .readthedocs.yaml
|
|
||||||
# Read the Docs configuration file
|
|
||||||
# See https://docs.readthedocs.io/en/stable/config-file/v2.html for details
|
|
||||||
|
|
||||||
# Required
|
|
||||||
version: 2
|
|
||||||
|
|
||||||
# Build documentation in the docs/ directory with Sphinx
|
|
||||||
sphinx:
|
|
||||||
configuration: docs/conf.py
|
|
||||||
|
|
||||||
# Optionally set the version of Python and requirements required to build your docs
|
|
||||||
python:
|
|
||||||
install:
|
|
||||||
- requirements: docs/requirements.txt
|
|
||||||
|
|
||||||
build:
|
|
||||||
os: ubuntu-22.04
|
|
||||||
tools:
|
|
||||||
python: "3.8"
|
|
@ -1,30 +0,0 @@
|
|||||||
workspace:
|
|
||||||
base: /build
|
|
||||||
|
|
||||||
#clone:
|
|
||||||
# git:
|
|
||||||
# image: woodpeckerci/plugin-git
|
|
||||||
# settings:
|
|
||||||
# recursive: true
|
|
||||||
|
|
||||||
pipeline:
|
|
||||||
build-${TARGET}:
|
|
||||||
image: "ubuntu:latest"
|
|
||||||
pull: true
|
|
||||||
environment:
|
|
||||||
- input_version=v2022.1.4
|
|
||||||
- GLUON_SITEDIR=../site
|
|
||||||
- FORCE_UNSAFE_CONFIGURE=1
|
|
||||||
- GLUON_TARGET=${TARGET}
|
|
||||||
- GLUON_DEPRECATED=1
|
|
||||||
commands:
|
|
||||||
- echo ${TARGET}
|
|
||||||
# - git config --global init.defaultBranch main
|
|
||||||
# - sed -i 's/install/install file/' contrib/actions/install-dependencies.sh
|
|
||||||
# - sh contrib/actions/install-dependencies.sh
|
|
||||||
# - sh contrib/actions/run-build.sh ${TARGET}
|
|
||||||
|
|
||||||
matrix:
|
|
||||||
TARGET:
|
|
||||||
- ath79-generic
|
|
||||||
- x86-64
|
|
@ -23,8 +23,8 @@ using other parts or why the proposed change breaks other parts of the system.
|
|||||||
They might even refuse the idea altogether - after all, they have to sleep well
|
They might even refuse the idea altogether - after all, they have to sleep well
|
||||||
after merging the changes, too.
|
after merging the changes, too.
|
||||||
|
|
||||||
The preferred way to discuss is in the IRC channel ([#gluon] on irc.hackint.org)
|
The preferred way to discuss in the IRC channel ([#gluon] on irc.hackint.org)
|
||||||
or on the [mailing list], however, you can also open a new issue on GitHub to
|
or on the [mailing list], however, you can also open a new issue on Github to
|
||||||
discuss there. We maintain a [list of rejected features] and we'd like to
|
discuss there. We maintain a [list of rejected features] and we'd like to
|
||||||
kindly ask you to review it first. In general, looking for duplicates may save
|
kindly ask you to review it first. In general, looking for duplicates may save
|
||||||
you some time.
|
you some time.
|
||||||
@ -47,7 +47,7 @@ triggered and what you did to fix it. If in question, have a glance at the
|
|||||||
existing commit messages to get the idea.
|
existing commit messages to get the idea.
|
||||||
|
|
||||||
|
|
||||||
[packages]: https://gluon.readthedocs.io/en/latest/user/site.html#packages
|
[packages]: http://gluon.readthedocs.org/en/latest/user/site.html#packages
|
||||||
[#gluon]: https://webirc.hackint.org/#gluon
|
[#gluon]: https://webirc.hackint.org/#gluon
|
||||||
[mailing list]: mailto:gluon@luebeck.freifunk.net
|
[mailing list]: mailto:gluon@luebeck.freifunk.net
|
||||||
[list of rejected features]: https://github.com/freifunk-gluon/gluon/issues?q=label%3A%222.+status%3A+rejected%22
|
[list of rejected features]: https://github.com/freifunk-gluon/gluon/issues?q=label%3Arejected
|
||||||
|
9
LICENSE
@ -1,7 +1,7 @@
|
|||||||
The code of Project Gluon may be distributed under the following terms, unless
|
The code of Project Gluon may be distributed under the following terms, unless
|
||||||
noted otherwise in individual files or subtrees.
|
noted otherwise in individual files or subtrees.
|
||||||
|
|
||||||
Copyright (c) Project Gluon
|
Copyright (c) 2013-2017, Project Gluon
|
||||||
All rights reserved.
|
All rights reserved.
|
||||||
|
|
||||||
Redistribution and use in source and binary forms, with or without
|
Redistribution and use in source and binary forms, with or without
|
||||||
@ -25,11 +25,10 @@ OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
|||||||
OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||||
|
|
||||||
|
|
||||||
OpenWrt is licensed under the terms of the GNU General Public License Version 2,
|
LEDE and OpenWrt are licensed under the terms of the GNU General Public License
|
||||||
which can be found at openwrt/LICENSE after the OpenWrt repository has been
|
Version 2, which can be found at lede/LICENSE after the lede repository has been
|
||||||
obtained. This applies to the following repositories:
|
obtained. This applies to the following repositories:
|
||||||
|
* lede
|
||||||
* openwrt
|
|
||||||
* packages/openwrt
|
* packages/openwrt
|
||||||
* packages/routing
|
* packages/routing
|
||||||
* packages/luci
|
* packages/luci
|
||||||
|
263
Makefile
@ -4,112 +4,45 @@ LC_ALL:=C
|
|||||||
LANG:=C
|
LANG:=C
|
||||||
export LC_ALL LANG
|
export LC_ALL LANG
|
||||||
|
|
||||||
.SHELLFLAGS = -ec
|
|
||||||
|
|
||||||
# check for spaces & resolve possibly relative paths
|
GLUON_SITEDIR ?= $(CURDIR)/site
|
||||||
define mkabspath
|
GLUON_TMPDIR ?= $(CURDIR)/tmp
|
||||||
ifneq (1,$(words [$($(1))]))
|
|
||||||
$$(error $(1) must not contain spaces)
|
|
||||||
endif
|
|
||||||
override $(1) := $(abspath $($(1)))
|
|
||||||
endef
|
|
||||||
|
|
||||||
escape = '$(subst ','\'',$(1))'
|
GLUON_OUTPUTDIR ?= $(CURDIR)/output
|
||||||
|
GLUON_IMAGEDIR ?= $(GLUON_OUTPUTDIR)/images
|
||||||
|
GLUON_PACKAGEDIR ?= $(GLUON_OUTPUTDIR)/packages
|
||||||
|
|
||||||
GLUON_SITEDIR ?= site
|
export GLUON_TMPDIR GLUON_IMAGEDIR GLUON_PACKAGEDIR DEVICES
|
||||||
$(eval $(call mkabspath,GLUON_SITEDIR))
|
|
||||||
|
|
||||||
ifeq ($(realpath $(GLUON_SITEDIR)/site.mk),)
|
|
||||||
$(error No site configuration was found. Please check out a site configuration to $(GLUON_SITEDIR))
|
$(GLUON_SITEDIR)/site.mk:
|
||||||
endif
|
$(error No site configuration was found. Please check out a site configuration to $(GLUON_SITEDIR))
|
||||||
|
|
||||||
include $(GLUON_SITEDIR)/site.mk
|
include $(GLUON_SITEDIR)/site.mk
|
||||||
|
|
||||||
|
|
||||||
GLUON_RELEASE ?= $(error GLUON_RELEASE not set. GLUON_RELEASE can be set in site.mk or on the command line)
|
GLUON_RELEASE ?= $(error GLUON_RELEASE not set. GLUON_RELEASE can be set in site.mk or on the command line)
|
||||||
|
|
||||||
GLUON_DEPRECATED ?= 0
|
|
||||||
|
|
||||||
ifneq ($(GLUON_BRANCH),)
|
export GLUON_RELEASE GLUON_ATH10K_MESH GLUON_REGION GLUON_DEBUG
|
||||||
$(warning *** Warning: GLUON_BRANCH has been deprecated, please set GLUON_AUTOUPDATER_BRANCH and GLUON_AUTOUPDATER_ENABLED instead.)
|
|
||||||
GLUON_AUTOUPDATER_BRANCH ?= $(GLUON_BRANCH)
|
|
||||||
GLUON_AUTOUPDATER_ENABLED ?= 1
|
|
||||||
endif
|
|
||||||
|
|
||||||
GLUON_AUTOUPDATER_ENABLED ?= 0
|
|
||||||
|
|
||||||
# initialize (possibly already user set) directory variables
|
|
||||||
GLUON_TMPDIR ?= tmp
|
|
||||||
GLUON_OUTPUTDIR ?= output
|
|
||||||
GLUON_IMAGEDIR ?= $(GLUON_OUTPUTDIR)/images
|
|
||||||
GLUON_PACKAGEDIR ?= $(GLUON_OUTPUTDIR)/packages
|
|
||||||
GLUON_DEBUGDIR ?= $(GLUON_OUTPUTDIR)/debug
|
|
||||||
GLUON_TARGETSDIR ?= targets
|
|
||||||
GLUON_PATCHESDIR ?= patches
|
|
||||||
|
|
||||||
$(eval $(call mkabspath,GLUON_TMPDIR))
|
|
||||||
$(eval $(call mkabspath,GLUON_OUTPUTDIR))
|
|
||||||
$(eval $(call mkabspath,GLUON_IMAGEDIR))
|
|
||||||
$(eval $(call mkabspath,GLUON_PACKAGEDIR))
|
|
||||||
$(eval $(call mkabspath,GLUON_TARGETSDIR))
|
|
||||||
$(eval $(call mkabspath,GLUON_PATCHESDIR))
|
|
||||||
|
|
||||||
GLUON_VERSION := $(shell scripts/getversion.sh '.')
|
|
||||||
GLUON_SITE_VERSION := $(shell scripts/getversion.sh '$(GLUON_SITEDIR)')
|
|
||||||
|
|
||||||
GLUON_MULTIDOMAIN ?= 0
|
|
||||||
GLUON_AUTOREMOVE ?= 0
|
|
||||||
GLUON_DEBUG ?= 0
|
|
||||||
GLUON_MINIFY ?= 1
|
|
||||||
|
|
||||||
# Can be overridden via environment/command line/... to use the Gluon
|
|
||||||
# build system for non-Gluon builds
|
|
||||||
define GLUON_BASE_FEEDS ?=
|
|
||||||
src-link gluon_base ../../package
|
|
||||||
endef
|
|
||||||
|
|
||||||
GLUON_VARS = \
|
|
||||||
GLUON_VERSION GLUON_SITE_VERSION \
|
|
||||||
GLUON_RELEASE GLUON_REGION GLUON_MULTIDOMAIN GLUON_AUTOREMOVE GLUON_DEBUG GLUON_MINIFY GLUON_DEPRECATED \
|
|
||||||
GLUON_DEVICES GLUON_TARGETSDIR GLUON_PATCHESDIR GLUON_TMPDIR GLUON_IMAGEDIR GLUON_PACKAGEDIR GLUON_DEBUGDIR \
|
|
||||||
GLUON_SITEDIR GLUON_AUTOUPDATER_BRANCH GLUON_AUTOUPDATER_ENABLED GLUON_LANGS GLUON_BASE_FEEDS \
|
|
||||||
GLUON_TARGET BOARD SUBTARGET
|
|
||||||
|
|
||||||
unexport $(GLUON_VARS)
|
|
||||||
GLUON_ENV = $(foreach var,$(GLUON_VARS),$(var)=$(call escape,$($(var))))
|
|
||||||
|
|
||||||
show-release:
|
show-release:
|
||||||
@echo '$(GLUON_RELEASE)'
|
@echo '$(GLUON_RELEASE)'
|
||||||
|
|
||||||
|
|
||||||
update: FORCE
|
update: FORCE
|
||||||
@
|
@GLUON_SITEDIR='$(GLUON_SITEDIR)' scripts/update.sh
|
||||||
export $(GLUON_ENV)
|
@GLUON_SITEDIR='$(GLUON_SITEDIR)' scripts/patch.sh
|
||||||
scripts/update.sh
|
@GLUON_SITEDIR='$(GLUON_SITEDIR)' scripts/feeds.sh
|
||||||
scripts/patch.sh
|
|
||||||
scripts/feeds.sh
|
|
||||||
|
|
||||||
update-patches: FORCE
|
update-patches: FORCE
|
||||||
@
|
@GLUON_SITEDIR='$(GLUON_SITEDIR)' scripts/update.sh
|
||||||
export $(GLUON_ENV)
|
@GLUON_SITEDIR='$(GLUON_SITEDIR)' scripts/update-patches.sh
|
||||||
scripts/update.sh
|
@GLUON_SITEDIR='$(GLUON_SITEDIR)' scripts/patch.sh
|
||||||
scripts/update-patches.sh
|
|
||||||
scripts/patch.sh
|
|
||||||
|
|
||||||
refresh-patches: FORCE
|
|
||||||
@
|
|
||||||
export $(GLUON_ENV)
|
|
||||||
scripts/update.sh
|
|
||||||
scripts/patch.sh
|
|
||||||
scripts/update-patches.sh
|
|
||||||
|
|
||||||
update-feeds: FORCE
|
update-feeds: FORCE
|
||||||
@$(GLUON_ENV) scripts/feeds.sh
|
@GLUON_SITEDIR='$(GLUON_SITEDIR)' scripts/feeds.sh
|
||||||
|
|
||||||
update-modules: FORCE
|
|
||||||
@scripts/update-modules.sh
|
|
||||||
|
|
||||||
update-ci: FORCE
|
|
||||||
@$(GLUON_ENV) scripts/update-ci.sh
|
|
||||||
|
|
||||||
GLUON_TARGETS :=
|
GLUON_TARGETS :=
|
||||||
|
|
||||||
@ -117,120 +50,112 @@ define GluonTarget
|
|||||||
gluon_target := $(1)$$(if $(2),-$(2))
|
gluon_target := $(1)$$(if $(2),-$(2))
|
||||||
GLUON_TARGETS += $$(gluon_target)
|
GLUON_TARGETS += $$(gluon_target)
|
||||||
GLUON_TARGET_$$(gluon_target)_BOARD := $(1)
|
GLUON_TARGET_$$(gluon_target)_BOARD := $(1)
|
||||||
GLUON_TARGET_$$(gluon_target)_SUBTARGET := $(2)
|
GLUON_TARGET_$$(gluon_target)_SUBTARGET := $(if $(3),$(3),$(2))
|
||||||
endef
|
endef
|
||||||
|
|
||||||
include $(GLUON_TARGETSDIR)/targets.mk
|
include targets/targets.mk
|
||||||
|
|
||||||
|
|
||||||
OPENWRTMAKE = $(MAKE) -C openwrt
|
LEDEMAKE = $(MAKE) -C lede
|
||||||
|
|
||||||
BOARD := $(GLUON_TARGET_$(GLUON_TARGET)_BOARD)
|
BOARD := $(GLUON_TARGET_$(GLUON_TARGET)_BOARD)
|
||||||
SUBTARGET := $(GLUON_TARGET_$(GLUON_TARGET)_SUBTARGET)
|
SUBTARGET := $(GLUON_TARGET_$(GLUON_TARGET)_SUBTARGET)
|
||||||
|
LEDE_TARGET := $(BOARD)$(if $(SUBTARGET),-$(SUBTARGET))
|
||||||
|
|
||||||
|
export LEDE_TARGET
|
||||||
|
|
||||||
|
|
||||||
define CheckTarget
|
CheckTarget := [ '$(LEDE_TARGET)' ] \
|
||||||
if [ -z '$(BOARD)' ]; then
|
|| (echo 'Please set GLUON_TARGET to a valid target. Gluon supports the following targets:'; $(foreach target,$(GLUON_TARGETS),echo ' * $(target)';) false)
|
||||||
echo 'Please set GLUON_TARGET to a valid target. Gluon supports the following targets:'
|
|
||||||
for target in $(GLUON_TARGETS); do
|
CheckExternal := test -d lede || (echo 'You don'"'"'t seem to have obtained the external repositories needed by Gluon; please call `make update` first!'; false)
|
||||||
echo " * $$target"
|
|
||||||
done
|
|
||||||
exit 1
|
|
||||||
fi
|
|
||||||
endef
|
|
||||||
|
|
||||||
define CheckSite
|
|
||||||
if ! GLUON_SITEDIR='$(GLUON_SITEDIR)' GLUON_SITE_CONFIG='$(1).conf' $(LUA) -e 'assert(dofile("scripts/site_config.lua")(os.getenv("GLUON_SITE_CONFIG")))'; then
|
|
||||||
echo 'Your site configuration ($(1).conf) did not pass validation'
|
|
||||||
exit 1
|
|
||||||
fi
|
|
||||||
endef
|
|
||||||
|
|
||||||
list-targets: FORCE
|
list-targets: FORCE
|
||||||
@for target in $(GLUON_TARGETS); do
|
@$(foreach target,$(GLUON_TARGETS),echo '$(target)';)
|
||||||
echo "$$target"
|
|
||||||
done
|
|
||||||
|
|
||||||
lint: lint-editorconfig lint-lua lint-sh
|
|
||||||
|
|
||||||
lint-editorconfig: FORCE
|
|
||||||
@scripts/lint-editorconfig.sh
|
|
||||||
|
|
||||||
lint-lua: FORCE
|
|
||||||
@scripts/lint-lua.sh
|
|
||||||
|
|
||||||
lint-sh: FORCE
|
|
||||||
@scripts/lint-sh.sh
|
|
||||||
|
|
||||||
|
|
||||||
LUA := openwrt/staging_dir/hostpkg/bin/lua
|
GLUON_DEFAULT_PACKAGES := -odhcpd -ppp -ppp-mod-pppoe -wpad-mini gluon-core ip6tables hostapd-mini
|
||||||
|
|
||||||
|
GLUON_PACKAGES :=
|
||||||
|
define merge_packages
|
||||||
|
$(foreach pkg,$(1),
|
||||||
|
GLUON_PACKAGES := $$(strip $$(filter-out -$$(patsubst -%,%,$(pkg)) $$(patsubst -%,%,$(pkg)),$$(GLUON_PACKAGES)) $(pkg))
|
||||||
|
)
|
||||||
|
endef
|
||||||
|
$(eval $(call merge_packages,$(GLUON_DEFAULT_PACKAGES) $(GLUON_SITE_PACKAGES)))
|
||||||
|
|
||||||
|
GLUON_PACKAGES_YES := $(filter-out -%,$(GLUON_PACKAGES))
|
||||||
|
GLUON_PACKAGES_NO := $(patsubst -%,%,$(filter -%,$(GLUON_PACKAGES)))
|
||||||
|
|
||||||
|
|
||||||
|
config: FORCE
|
||||||
|
@$(CheckExternal)
|
||||||
|
@$(CheckTarget)
|
||||||
|
|
||||||
|
@( \
|
||||||
|
echo 'CONFIG_TARGET_$(BOARD)=y' \
|
||||||
|
$(if $(SUBTARGET),&& echo 'CONFIG_TARGET_$(BOARD)_$(SUBTARGET)=y') \
|
||||||
|
$(foreach pkg,$(GLUON_PACKAGES_NO),&& echo '# CONFIG_PACKAGE_$(pkg) is not set') \
|
||||||
|
&& scripts/target_config.sh generic \
|
||||||
|
&& GLUON_SITEDIR='$(GLUON_SITEDIR)' scripts/target_config.sh '$(GLUON_TARGET)' \
|
||||||
|
$(foreach pkg,$(GLUON_PACKAGES_YES),&& echo 'CONFIG_PACKAGE_$(pkg)=y') \
|
||||||
|
$(foreach lang,$(GLUON_LANGS),&& echo 'CONFIG_GLUON_WEB_LANG_$(lang)=y') \
|
||||||
|
&& echo 'CONFIG_GLUON_RELEASE="$(GLUON_RELEASE)"' \
|
||||||
|
&& echo 'CONFIG_GLUON_SITEDIR="$(GLUON_SITEDIR)"' \
|
||||||
|
&& echo 'CONFIG_GLUON_BRANCH="$(GLUON_BRANCH)"' \
|
||||||
|
) > lede/.config
|
||||||
|
+@$(LEDEMAKE) defconfig
|
||||||
|
|
||||||
|
@GLUON_SITEDIR='$(GLUON_SITEDIR)' scripts/target_config_check.sh '$(GLUON_TARGET)' '$(GLUON_PACKAGES_YES)'
|
||||||
|
|
||||||
|
|
||||||
|
LUA := lede/staging_dir/hostpkg/bin/lua
|
||||||
|
|
||||||
$(LUA):
|
$(LUA):
|
||||||
+@
|
@$(CheckExternal)
|
||||||
|
|
||||||
scripts/module_check.sh
|
+@[ -e lede/.config ] || $(LEDEMAKE) defconfig
|
||||||
|
+@$(LEDEMAKE) tools/install
|
||||||
|
+@$(LEDEMAKE) package/lua/host/install
|
||||||
|
|
||||||
[ -e openwrt/.config ] || $(OPENWRTMAKE) defconfig
|
prepare-target: config $(LUA) ;
|
||||||
$(OPENWRTMAKE) tools/install
|
|
||||||
$(OPENWRTMAKE) package/lua/host/compile
|
|
||||||
|
|
||||||
|
all: prepare-target
|
||||||
|
@GLUON_SITEDIR='$(GLUON_SITEDIR)' $(LUA) scripts/site_config.lua \
|
||||||
|
|| (echo 'Your site configuration did not pass validation.'; false)
|
||||||
|
|
||||||
config: $(LUA) FORCE
|
@scripts/clean_output.sh
|
||||||
+@
|
+@$(LEDEMAKE)
|
||||||
|
@GLUON_SITEDIR='$(GLUON_SITEDIR)' scripts/copy_output.sh '$(GLUON_TARGET)'
|
||||||
scripts/module_check.sh
|
|
||||||
$(CheckTarget)
|
|
||||||
$(foreach conf,site $(patsubst $(GLUON_SITEDIR)/%.conf,%,$(wildcard $(GLUON_SITEDIR)/domains/*.conf)),\
|
|
||||||
$(call CheckSite,$(conf)); \
|
|
||||||
)
|
|
||||||
|
|
||||||
$(OPENWRTMAKE) prepare-tmpinfo
|
|
||||||
$(GLUON_ENV) $(LUA) scripts/target_config.lua > openwrt/.config
|
|
||||||
$(OPENWRTMAKE) defconfig
|
|
||||||
$(GLUON_ENV) $(LUA) scripts/target_config_check.lua
|
|
||||||
|
|
||||||
|
|
||||||
container: FORCE
|
|
||||||
@scripts/container.sh
|
|
||||||
|
|
||||||
|
|
||||||
all: config
|
|
||||||
+@
|
|
||||||
$(GLUON_ENV) $(LUA) scripts/clean_output.lua
|
|
||||||
$(OPENWRTMAKE)
|
|
||||||
$(GLUON_ENV) $(LUA) scripts/copy_output.lua
|
|
||||||
|
|
||||||
clean download: config
|
clean download: config
|
||||||
+@$(OPENWRTMAKE) $@
|
+@$(LEDEMAKE) $@
|
||||||
|
|
||||||
dirclean: FORCE
|
dirclean: FORCE
|
||||||
+@
|
+@[ -e lede/.config ] || $(LEDEMAKE) defconfig
|
||||||
[ -e openwrt/.config ] || $(OPENWRTMAKE) defconfig
|
+@$(LEDEMAKE) dirclean
|
||||||
$(OPENWRTMAKE) dirclean
|
@rm -rf $(GLUON_TMPDIR) $(GLUON_OUTPUTDIR)
|
||||||
rm -rf $(GLUON_TMPDIR) $(GLUON_OUTPUTDIR)
|
|
||||||
|
|
||||||
manifest: $(LUA) FORCE
|
manifest: $(LUA) FORCE
|
||||||
@
|
@[ '$(GLUON_BRANCH)' ] || (echo 'Please set GLUON_BRANCH to create a manifest.'; false)
|
||||||
[ '$(GLUON_AUTOUPDATER_BRANCH)' ] || (echo 'Please set GLUON_AUTOUPDATER_BRANCH to create a manifest.'; false)
|
@echo '$(GLUON_PRIORITY)' | grep -qE '^([0-9]*\.)?[0-9]+$$' || (echo 'Please specify a numeric value for GLUON_PRIORITY to create a manifest.'; false)
|
||||||
echo '$(GLUON_PRIORITY)' | grep -qE '^([0-9]*\.)?[0-9]+$$' || (echo 'Please specify a numeric value for GLUON_PRIORITY to create a manifest.'; false)
|
@$(CheckExternal)
|
||||||
scripts/module_check.sh
|
|
||||||
|
|
||||||
(
|
@( \
|
||||||
export $(GLUON_ENV)
|
echo 'BRANCH=$(GLUON_BRANCH)' && \
|
||||||
echo 'BRANCH=$(GLUON_AUTOUPDATER_BRANCH)'
|
echo "DATE=$$($(LUA) scripts/rfc3339date.lua)" && \
|
||||||
echo "DATE=$$($(LUA) scripts/rfc3339date.lua)"
|
echo 'PRIORITY=$(GLUON_PRIORITY)' && \
|
||||||
echo 'PRIORITY=$(GLUON_PRIORITY)'
|
echo && \
|
||||||
echo
|
$(foreach GLUON_TARGET,$(GLUON_TARGETS), \
|
||||||
for target in $(GLUON_TARGETS); do
|
GLUON_SITEDIR='$(GLUON_SITEDIR)' scripts/generate_manifest.sh '$(GLUON_TARGET)' && \
|
||||||
$(LUA) scripts/generate_manifest.lua "$$target"
|
) : \
|
||||||
done
|
) > 'tmp/$(GLUON_BRANCH).manifest.tmp'
|
||||||
) > 'tmp/$(GLUON_AUTOUPDATER_BRANCH).manifest.tmp'
|
|
||||||
|
|
||||||
mkdir -p '$(GLUON_IMAGEDIR)/sysupgrade'
|
@mkdir -p '$(GLUON_IMAGEDIR)/sysupgrade'
|
||||||
mv 'tmp/$(GLUON_AUTOUPDATER_BRANCH).manifest.tmp' '$(GLUON_IMAGEDIR)/sysupgrade/$(GLUON_AUTOUPDATER_BRANCH).manifest'
|
@mv 'tmp/$(GLUON_BRANCH).manifest.tmp' '$(GLUON_IMAGEDIR)/sysupgrade/$(GLUON_BRANCH).manifest'
|
||||||
|
|
||||||
FORCE: ;
|
FORCE: ;
|
||||||
|
|
||||||
.PHONY: FORCE
|
.PHONY: FORCE
|
||||||
.NOTPARALLEL:
|
.NOTPARALLEL:
|
||||||
.ONESHELL:
|
|
||||||
|
23
README.md
@ -1,21 +1,10 @@
|
|||||||
[![Build Gluon](https://github.com/freifunk-gluon/gluon/actions/workflows/build-gluon.yml/badge.svg?branch=master)](https://github.com/freifunk-gluon/gluon/actions/workflows/build-gluon.yml)
|
Documentation (incomplete at this time, contribute if you can!) may be found at
|
||||||
[![License](https://img.shields.io/badge/License-BSD%202--Clause-orange.svg)](https://opensource.org/license/bsd-2-clause/)
|
http://gluon.readthedocs.org/.
|
||||||
[![GitHub release (latest SemVer)](https://img.shields.io/github/v/release/freifunk-gluon/gluon?sort=semver)](https://github.com/freifunk-gluon/gluon/releases/latest)
|
|
||||||
|
|
||||||
# Gluon
|
|
||||||
|
|
||||||
Gluon is a firmware framework to build preconfigured OpenWrt images for public mesh networks.
|
|
||||||
|
|
||||||
## Getting started
|
|
||||||
|
|
||||||
We have a huge amount of documentation over at https://gluon.readthedocs.io/.
|
|
||||||
|
|
||||||
If you're new to Gluon and ready to get your feet wet, have a look at the
|
If you're new to Gluon and ready to get your feet wet, have a look at the
|
||||||
[Getting Started Guide](https://gluon.readthedocs.io/en/latest/user/getting_started.html).
|
[Getting Started Guide](http://gluon.readthedocs.org/en/latest/user/getting_started.html).
|
||||||
|
|
||||||
Gluon's developers frequent an IRC chatroom at [#gluon](ircs://irc.hackint.org/#gluon)
|
**Gluon IRC channel: `#gluon` in [hackint](http://hackint.org/)**
|
||||||
on [hackint](https://hackint.org/). There is also a [webchat](https://webirc.hackint.org/#irc://irc.hackint.org/#gluon)
|
|
||||||
that allows for uncomplicated access from within your browser. This channel is also available as a bridged Matrix Room at [#gluon:hackint.org](https://matrix.to/#/#gluon:hackint.org).
|
|
||||||
|
|
||||||
## Issues & Feature requests
|
## Issues & Feature requests
|
||||||
|
|
||||||
@ -30,10 +19,10 @@ the future development of Gluon.
|
|||||||
|
|
||||||
Please refrain from using the `master` branch for anything else but development purposes!
|
Please refrain from using the `master` branch for anything else but development purposes!
|
||||||
Use the most recent release instead. You can list all releases by running `git tag`
|
Use the most recent release instead. You can list all releases by running `git tag`
|
||||||
and switch to one by running `git checkout v2022.1 && make update`.
|
and switch to one by running `git checkout v2017.1.8 && make update`.
|
||||||
|
|
||||||
If you're using the autoupdater, do not autoupdate nodes with anything but releases.
|
If you're using the autoupdater, do not autoupdate nodes with anything but releases.
|
||||||
If you upgrade using random master commits the nodes *might break* eventually.
|
If you upgrade using random master commits the nodes *will break* eventually.
|
||||||
|
|
||||||
## Mailinglist
|
## Mailinglist
|
||||||
|
|
||||||
|
@ -1,53 +0,0 @@
|
|||||||
#!/usr/bin/env python3
|
|
||||||
|
|
||||||
# Update target filters using
|
|
||||||
# make update-ci
|
|
||||||
|
|
||||||
import re
|
|
||||||
import os
|
|
||||||
import sys
|
|
||||||
import json
|
|
||||||
|
|
||||||
# these changes trigger rebuilds on all targets
|
|
||||||
common = [
|
|
||||||
"modules",
|
|
||||||
"Makefile",
|
|
||||||
"patches/**",
|
|
||||||
"scripts/**",
|
|
||||||
"targets/generic",
|
|
||||||
"targets/targets.mk",
|
|
||||||
]
|
|
||||||
|
|
||||||
# these changes are only built on x86-64
|
|
||||||
extra = [
|
|
||||||
"contrib/ci/minimal-site/**",
|
|
||||||
"package/**"
|
|
||||||
]
|
|
||||||
|
|
||||||
_filter = dict()
|
|
||||||
|
|
||||||
# INCLUDE_PATTERN matches:
|
|
||||||
# include '...'
|
|
||||||
# include "..."
|
|
||||||
# include("...")
|
|
||||||
# include('...')
|
|
||||||
INCLUDE_PATTERN = "^\\s*include *\\(? *[\"']([^\"']+)[\"']"
|
|
||||||
|
|
||||||
# construct filters map from stdin
|
|
||||||
for target in sys.stdin:
|
|
||||||
target = target.strip()
|
|
||||||
|
|
||||||
_filter[target] = [
|
|
||||||
f"targets/{target}"
|
|
||||||
] + common
|
|
||||||
|
|
||||||
target_file = os.path.join(os.environ['GLUON_TARGETSDIR'], target)
|
|
||||||
with open(target_file) as f:
|
|
||||||
includes = re.findall(INCLUDE_PATTERN, f.read(), re.MULTILINE)
|
|
||||||
_filter[target].extend([f"targets/{i}" for i in includes])
|
|
||||||
|
|
||||||
if target == "x86-64":
|
|
||||||
_filter[target].extend(extra)
|
|
||||||
|
|
||||||
# print filters to stdout in json format, because json is stdlib and yaml compatible.
|
|
||||||
print(json.dumps(_filter, indent=2))
|
|
@ -1,8 +0,0 @@
|
|||||||
#!/bin/sh
|
|
||||||
|
|
||||||
set -e
|
|
||||||
|
|
||||||
apt-get -y update
|
|
||||||
apt-get -y install git build-essential python3 gawk unzip libncurses5-dev zlib1g-dev libssl-dev libelf-dev wget rsync time qemu-utils
|
|
||||||
apt-get -y clean
|
|
||||||
rm -rf /var/lib/apt/lists/*
|
|
@ -1,13 +0,0 @@
|
|||||||
#!/bin/sh
|
|
||||||
|
|
||||||
set -e
|
|
||||||
|
|
||||||
export BROKEN=1
|
|
||||||
export GLUON_AUTOREMOVE=1
|
|
||||||
export GLUON_DEPRECATED=1
|
|
||||||
export GLUON_SITEDIR="contrib/ci/minimal-site"
|
|
||||||
export GLUON_TARGET="$1"
|
|
||||||
export BUILD_LOG=1
|
|
||||||
|
|
||||||
make update
|
|
||||||
make -j2 V=s
|
|
@ -1 +0,0 @@
|
|||||||
../../../docs/site-example/i18n/
|
|
@ -1 +0,0 @@
|
|||||||
../../../docs/site-example/modules
|
|
@ -1,180 +0,0 @@
|
|||||||
-- This is an example site configuration for Gluon v2022.1
|
|
||||||
--
|
|
||||||
-- Take a look at the documentation located at
|
|
||||||
-- https://gluon.readthedocs.io/ for details.
|
|
||||||
--
|
|
||||||
-- This configuration will not work as is. You're required to make
|
|
||||||
-- community specific changes to it!
|
|
||||||
{
|
|
||||||
-- Used for generated hostnames, e.g. freifunk-abcdef123456. (optional)
|
|
||||||
-- hostname_prefix = 'freifunk-',
|
|
||||||
|
|
||||||
-- Name of the community.
|
|
||||||
site_name = 'Continuous Integration',
|
|
||||||
|
|
||||||
-- Shorthand of the community.
|
|
||||||
site_code = 'ci',
|
|
||||||
|
|
||||||
-- 32 bytes of random data, encoded in hexadecimal
|
|
||||||
-- This data must be unique among all sites and domains!
|
|
||||||
-- Can be generated using: echo $(hexdump -v -n 32 -e '1/1 "%02x"' </dev/urandom)
|
|
||||||
domain_seed = 'e9608c4ff338b920992d629190e9ff11049de1dfc3f299eac07792dfbcda341c',
|
|
||||||
|
|
||||||
-- Prefixes used within the mesh.
|
|
||||||
-- prefix6 is required, prefix4 can be omitted if next_node.ip4
|
|
||||||
-- is not set.
|
|
||||||
prefix4 = '10.0.0.0/20',
|
|
||||||
prefix6 = 'fd::/64',
|
|
||||||
|
|
||||||
-- Timezone of your community.
|
|
||||||
-- See https://openwrt.org/docs/guide-user/base-system/system_configuration#time_zones
|
|
||||||
timezone = 'CET-1CEST,M3.5.0,M10.5.0/3',
|
|
||||||
|
|
||||||
-- List of NTP servers in your community.
|
|
||||||
-- Must be reachable using IPv6!
|
|
||||||
-- ntp_servers = {'1.ntp.services.ffxx'},
|
|
||||||
|
|
||||||
-- Wireless regulatory domain of your community.
|
|
||||||
regdom = 'DE',
|
|
||||||
|
|
||||||
-- Wireless configuration for 2.4 GHz interfaces.
|
|
||||||
wifi24 = {
|
|
||||||
-- Wireless channel.
|
|
||||||
channel = 1,
|
|
||||||
|
|
||||||
-- ESSIDs used for client network.
|
|
||||||
ap = {
|
|
||||||
ssid = 'gluon-ci-ssid',
|
|
||||||
-- disabled = true, -- (optional)
|
|
||||||
|
|
||||||
-- Configuration for a backward compatible OWE network below.
|
|
||||||
owe_ssid = 'owe.gluon-ci-ssid', -- (optional - SSID for OWE client network)
|
|
||||||
owe_transition_mode = true, -- (optional - enables transition-mode - requires ssid as well as owe_ssid)
|
|
||||||
},
|
|
||||||
|
|
||||||
mesh = {
|
|
||||||
-- Adjust these values!
|
|
||||||
id = 'ueH3uXjdp', -- usually you don't want users to connect to this mesh-SSID, so use a cryptic id that no one will accidentally mistake for the client WiFi
|
|
||||||
mcast_rate = 12000,
|
|
||||||
-- disabled = true, -- (optional)
|
|
||||||
},
|
|
||||||
},
|
|
||||||
|
|
||||||
-- Wireless configuration for 5 GHz interfaces.
|
|
||||||
-- This should be equal to the 2.4 GHz variant, except
|
|
||||||
-- for channel.
|
|
||||||
wifi5 = {
|
|
||||||
channel = 44,
|
|
||||||
outdoor_chanlist = '100-140',
|
|
||||||
ap = {
|
|
||||||
ssid = 'gluon-ci-ssid',
|
|
||||||
},
|
|
||||||
mesh = {
|
|
||||||
-- Adjust these values!
|
|
||||||
id = 'ueH3uXjdp',
|
|
||||||
mcast_rate = 12000,
|
|
||||||
},
|
|
||||||
},
|
|
||||||
|
|
||||||
mesh = {
|
|
||||||
vxlan = true,
|
|
||||||
batman_adv = {
|
|
||||||
routing_algo = 'BATMAN_IV',
|
|
||||||
},
|
|
||||||
},
|
|
||||||
|
|
||||||
-- The next node feature allows clients to always reach the node it is
|
|
||||||
-- connected to using a known IP address.
|
|
||||||
next_node = {
|
|
||||||
-- anycast IPs of all nodes
|
|
||||||
-- name = { 'nextnode.location.community.example.org', 'nextnode', 'nn' },
|
|
||||||
ip4 = '10.0.0.1',
|
|
||||||
ip6 = 'fd::1',
|
|
||||||
},
|
|
||||||
|
|
||||||
-- Options specific to routing protocols (optional)
|
|
||||||
-- mesh = {
|
|
||||||
-- Options specific to the batman-adv routing protocol (optional)
|
|
||||||
-- batman_adv = {
|
|
||||||
-- Gateway selection class (optional)
|
|
||||||
-- The default class 20 is based on the link quality (TQ) only,
|
|
||||||
-- class 1 is calculated from both the TQ and the announced bandwidth
|
|
||||||
-- gw_sel_class = 1,
|
|
||||||
-- },
|
|
||||||
-- },
|
|
||||||
|
|
||||||
mesh_vpn = {
|
|
||||||
-- enabled = true,
|
|
||||||
|
|
||||||
fastd = {
|
|
||||||
-- Refer to https://fastd.readthedocs.io/en/latest/ to better understand
|
|
||||||
-- what these options do.
|
|
||||||
|
|
||||||
-- List of crypto-methods to use.
|
|
||||||
methods = {'salsa2012+umac'},
|
|
||||||
mtu = 1312,
|
|
||||||
-- configurable = true,
|
|
||||||
-- syslog_level = 'warn',
|
|
||||||
|
|
||||||
groups = {
|
|
||||||
backbone = {
|
|
||||||
-- Limit number of connected peers to reduce bandwidth.
|
|
||||||
limit = 1,
|
|
||||||
|
|
||||||
-- List of peers.
|
|
||||||
peers = {
|
|
||||||
},
|
|
||||||
|
|
||||||
-- Optional: nested peer groups
|
|
||||||
-- groups = {
|
|
||||||
-- backbone_sub = {
|
|
||||||
-- ...
|
|
||||||
-- },
|
|
||||||
-- ...
|
|
||||||
-- },
|
|
||||||
},
|
|
||||||
-- Optional: additional peer groups, possibly with other limits
|
|
||||||
-- backbone2 = {
|
|
||||||
-- ...
|
|
||||||
-- },
|
|
||||||
},
|
|
||||||
},
|
|
||||||
|
|
||||||
bandwidth_limit = {
|
|
||||||
-- The bandwidth limit can be enabled by default here.
|
|
||||||
enabled = false,
|
|
||||||
|
|
||||||
-- Default upload limit (kbit/s).
|
|
||||||
egress = 200,
|
|
||||||
|
|
||||||
-- Default download limit (kbit/s).
|
|
||||||
ingress = 3000,
|
|
||||||
},
|
|
||||||
},
|
|
||||||
|
|
||||||
autoupdater = {
|
|
||||||
-- Default branch (optional), can be overridden by setting GLUON_AUTOUPDATER_BRANCH when building.
|
|
||||||
-- Set GLUON_AUTOUPDATER_ENABLED to enable the autoupdater by default for newly installed nodes.
|
|
||||||
branch = 'stable',
|
|
||||||
|
|
||||||
-- List of branches. You may define multiple branches.
|
|
||||||
branches = {
|
|
||||||
stable = {
|
|
||||||
name = 'stable',
|
|
||||||
|
|
||||||
-- List of mirrors to fetch images from. IPv6 required!
|
|
||||||
mirrors = {'http://1.updates.services.ffhl/stable/sysupgrade'},
|
|
||||||
|
|
||||||
-- Number of good signatures required.
|
|
||||||
-- Have multiple maintainers sign your build and only
|
|
||||||
-- accept it when a sufficient number of them have
|
|
||||||
-- signed it.
|
|
||||||
good_signatures = 0,
|
|
||||||
|
|
||||||
-- List of public keys of maintainers.
|
|
||||||
pubkeys = {
|
|
||||||
},
|
|
||||||
},
|
|
||||||
},
|
|
||||||
},
|
|
||||||
}
|
|
@ -1 +0,0 @@
|
|||||||
../../../docs/site-example/site.mk
|
|
@ -1 +0,0 @@
|
|||||||
../minimal-site/i18n
|
|
@ -1 +0,0 @@
|
|||||||
../minimal-site/modules
|
|
@ -1,176 +0,0 @@
|
|||||||
-- This is an example site configuration for Gluon v2022.1
|
|
||||||
--
|
|
||||||
-- Take a look at the documentation located at
|
|
||||||
-- https://gluon.readthedocs.io/ for details.
|
|
||||||
--
|
|
||||||
-- This configuration will not work as is. You're required to make
|
|
||||||
-- community specific changes to it!
|
|
||||||
{
|
|
||||||
-- Used for generated hostnames, e.g. freifunk-abcdef123456. (optional)
|
|
||||||
-- hostname_prefix = 'freifunk-',
|
|
||||||
|
|
||||||
-- Name of the community.
|
|
||||||
site_name = 'Continuous Integration',
|
|
||||||
|
|
||||||
-- Shorthand of the community.
|
|
||||||
site_code = 'ci',
|
|
||||||
|
|
||||||
-- 32 bytes of random data, encoded in hexadecimal
|
|
||||||
-- This data must be unique among all sites and domains!
|
|
||||||
-- Can be generated using: echo $(hexdump -v -n 32 -e '1/1 "%02x"' </dev/urandom)
|
|
||||||
domain_seed = 'e9608c4ff338b920992d629190e9ff11049de1dfc3f299eac07792dfbcda341c',
|
|
||||||
|
|
||||||
-- Prefixes used by clients within the mesh.
|
|
||||||
-- prefix6 is required, prefix4 can be omitted if next_node.ip4
|
|
||||||
-- is not set.
|
|
||||||
prefix6 = 'fdff:cafe:cafe:cafe::/64',
|
|
||||||
|
|
||||||
-- Prefixes used by nodes within the mesh
|
|
||||||
node_prefix6 = 'fdff:cafe:cafe:cafe::/64',
|
|
||||||
|
|
||||||
-- Timezone of your community.
|
|
||||||
-- See https://openwrt.org/docs/guide-user/base-system/system_configuration#time_zones
|
|
||||||
timezone = 'CET-1CEST,M3.5.0,M10.5.0/3',
|
|
||||||
|
|
||||||
-- List of NTP servers in your community.
|
|
||||||
-- Must be reachable using IPv6!
|
|
||||||
-- ntp_servers = {'1.ntp.services.ffxx'},
|
|
||||||
|
|
||||||
-- Wireless regulatory domain of your community.
|
|
||||||
regdom = 'DE',
|
|
||||||
|
|
||||||
-- Wireless configuration for 2.4 GHz interfaces.
|
|
||||||
wifi24 = {
|
|
||||||
-- Wireless channel.
|
|
||||||
channel = 1,
|
|
||||||
|
|
||||||
-- ESSIDs used for client network.
|
|
||||||
ap = {
|
|
||||||
ssid = 'gluon-ci-ssid',
|
|
||||||
-- disabled = true, -- (optional)
|
|
||||||
|
|
||||||
-- Configuration for a backward compatible OWE network below.
|
|
||||||
owe_ssid = 'owe.gluon-ci-ssid', -- (optional - SSID for OWE client network)
|
|
||||||
owe_transition_mode = true, -- (optional - enables transition-mode - requires ssid as well as owe_ssid)
|
|
||||||
},
|
|
||||||
|
|
||||||
mesh = {
|
|
||||||
-- Adjust these values!
|
|
||||||
id = 'ueH3uXjdp', -- usually you don't want users to connect to this mesh-SSID, so use a cryptic id that no one will accidentally mistake for the client WiFi
|
|
||||||
mcast_rate = 12000,
|
|
||||||
-- disabled = true, -- (optional)
|
|
||||||
},
|
|
||||||
},
|
|
||||||
|
|
||||||
-- Wireless configuration for 5 GHz interfaces.
|
|
||||||
-- This should be equal to the 2.4 GHz variant, except
|
|
||||||
-- for channel.
|
|
||||||
wifi5 = {
|
|
||||||
channel = 44,
|
|
||||||
outdoor_chanlist = '100-140',
|
|
||||||
ap = {
|
|
||||||
ssid = 'gluon-ci-ssid',
|
|
||||||
-- disabled = true, -- (optional)
|
|
||||||
|
|
||||||
-- Configuration for a backward compatible OWE network below.
|
|
||||||
owe_ssid = 'owe.gluon-ci-ssid', -- (optional - SSID for OWE client network)
|
|
||||||
owe_transition_mode = true, -- (optional - enables transition-mode - requires ssid as well as owe_ssid)
|
|
||||||
},
|
|
||||||
mesh = {
|
|
||||||
-- Adjust these values!
|
|
||||||
id = 'ueH3uXjdp',
|
|
||||||
mcast_rate = 12000,
|
|
||||||
},
|
|
||||||
},
|
|
||||||
|
|
||||||
|
|
||||||
-- The next node feature allows clients to always reach the node it is
|
|
||||||
-- connected to using a known IP address.
|
|
||||||
next_node = {
|
|
||||||
-- anycast IPs of all nodes
|
|
||||||
name = { 'nextnode.location.community.example.org', 'nextnode', 'nn' },
|
|
||||||
ip4 = '10.0.0.1',
|
|
||||||
ip6 = 'fd::1',
|
|
||||||
},
|
|
||||||
|
|
||||||
-- Options specific to routing protocols (optional)
|
|
||||||
mesh = {
|
|
||||||
vxlan = true,
|
|
||||||
olsrd = {},
|
|
||||||
},
|
|
||||||
|
|
||||||
mesh_vpn = {
|
|
||||||
-- enabled = true,
|
|
||||||
|
|
||||||
fastd = {
|
|
||||||
-- Refer to https://fastd.readthedocs.io/en/latest/ to better understand
|
|
||||||
-- what these options do.
|
|
||||||
|
|
||||||
-- List of crypto-methods to use.
|
|
||||||
methods = {'salsa2012+umac'},
|
|
||||||
mtu = 1312,
|
|
||||||
-- configurable = true,
|
|
||||||
-- syslog_level = 'warn',
|
|
||||||
|
|
||||||
groups = {
|
|
||||||
backbone = {
|
|
||||||
-- Limit number of connected peers to reduce bandwidth.
|
|
||||||
limit = 1,
|
|
||||||
|
|
||||||
-- List of peers.
|
|
||||||
peers = {
|
|
||||||
},
|
|
||||||
|
|
||||||
-- Optional: nested peer groups
|
|
||||||
-- groups = {
|
|
||||||
-- backbone_sub = {
|
|
||||||
-- ...
|
|
||||||
-- },
|
|
||||||
-- ...
|
|
||||||
-- },
|
|
||||||
},
|
|
||||||
-- Optional: additional peer groups, possibly with other limits
|
|
||||||
-- backbone2 = {
|
|
||||||
-- ...
|
|
||||||
-- },
|
|
||||||
},
|
|
||||||
},
|
|
||||||
|
|
||||||
bandwidth_limit = {
|
|
||||||
-- The bandwidth limit can be enabled by default here.
|
|
||||||
enabled = false,
|
|
||||||
|
|
||||||
-- Default upload limit (kbit/s).
|
|
||||||
egress = 200,
|
|
||||||
|
|
||||||
-- Default download limit (kbit/s).
|
|
||||||
ingress = 3000,
|
|
||||||
},
|
|
||||||
},
|
|
||||||
|
|
||||||
autoupdater = {
|
|
||||||
-- Default branch (optional), can be overridden by setting GLUON_AUTOUPDATER_BRANCH when building.
|
|
||||||
-- Set GLUON_AUTOUPDATER_ENABLED to enable the autoupdater by default for newly installed nodes.
|
|
||||||
branch = 'stable',
|
|
||||||
|
|
||||||
-- List of branches. You may define multiple branches.
|
|
||||||
branches = {
|
|
||||||
stable = {
|
|
||||||
name = 'stable',
|
|
||||||
|
|
||||||
-- List of mirrors to fetch images from. IPv6 required!
|
|
||||||
mirrors = {'http://1.updates.services.ffhl/stable/sysupgrade'},
|
|
||||||
|
|
||||||
-- Number of good signatures required.
|
|
||||||
-- Have multiple maintainers sign your build and only
|
|
||||||
-- accept it when a sufficient number of them have
|
|
||||||
-- signed it.
|
|
||||||
good_signatures = 0,
|
|
||||||
|
|
||||||
-- List of public keys of maintainers.
|
|
||||||
pubkeys = {
|
|
||||||
},
|
|
||||||
},
|
|
||||||
},
|
|
||||||
},
|
|
||||||
}
|
|
@ -1,57 +0,0 @@
|
|||||||
## gluon site.mk makefile example
|
|
||||||
|
|
||||||
## GLUON_FEATURES
|
|
||||||
# Specify Gluon features/packages to enable;
|
|
||||||
# Gluon will automatically enable a set of packages
|
|
||||||
# depending on the combination of features listed
|
|
||||||
|
|
||||||
GLUON_FEATURES := \
|
|
||||||
autoupdater \
|
|
||||||
ebtables-filter-multicast \
|
|
||||||
ebtables-filter-ra-dhcp \
|
|
||||||
ebtables-limit-arp \
|
|
||||||
mesh-olsrd \
|
|
||||||
mesh-vpn-fastd \
|
|
||||||
respondd \
|
|
||||||
status-page \
|
|
||||||
web-advanced \
|
|
||||||
web-wizard
|
|
||||||
|
|
||||||
GLUON_FEATURES_standard := \
|
|
||||||
wireless-encryption-wpa3
|
|
||||||
|
|
||||||
## GLUON_SITE_PACKAGES
|
|
||||||
# Specify additional Gluon/OpenWrt packages to include here;
|
|
||||||
# A minus sign may be prepended to remove a packages from the
|
|
||||||
# selection that would be enabled by default or due to the
|
|
||||||
# chosen feature flags
|
|
||||||
|
|
||||||
GLUON_SITE_PACKAGES := iwinfo
|
|
||||||
|
|
||||||
## DEFAULT_GLUON_RELEASE
|
|
||||||
# version string to use for images
|
|
||||||
# gluon relies on
|
|
||||||
# opkg compare-versions "$1" '>>' "$2"
|
|
||||||
# to decide if a version is newer or not.
|
|
||||||
|
|
||||||
DEFAULT_GLUON_RELEASE := 0.6+exp$(shell date '+%Y%m%d')
|
|
||||||
|
|
||||||
# Variables set with ?= can be overwritten from the command line
|
|
||||||
|
|
||||||
## GLUON_RELEASE
|
|
||||||
# call make with custom GLUON_RELEASE flag, to use your own release version scheme.
|
|
||||||
# e.g.:
|
|
||||||
# $ make images GLUON_RELEASE=23.42+5
|
|
||||||
# would generate images named like this:
|
|
||||||
# gluon-ff%site_code%-23.42+5-%router_model%.bin
|
|
||||||
|
|
||||||
GLUON_RELEASE ?= $(DEFAULT_GLUON_RELEASE)
|
|
||||||
|
|
||||||
# Default priority for updates.
|
|
||||||
GLUON_PRIORITY ?= 0
|
|
||||||
|
|
||||||
# Region code required for some images; supported values: us eu
|
|
||||||
GLUON_REGION ?= eu
|
|
||||||
|
|
||||||
# Languages to include
|
|
||||||
GLUON_LANGS ?= en de
|
|
@ -5,7 +5,8 @@
|
|||||||
# * Works only if directory names and package names are the same (true for all Gluon packages)
|
# * Works only if directory names and package names are the same (true for all Gluon packages)
|
||||||
# * Doesn't show dependencies through virtual packages correctly
|
# * Doesn't show dependencies through virtual packages correctly
|
||||||
|
|
||||||
set -e
|
|
||||||
|
|
||||||
shopt -s nullglob
|
shopt -s nullglob
|
||||||
|
|
||||||
|
|
||||||
|
@ -1,36 +0,0 @@
|
|||||||
FROM debian:bullseye-slim
|
|
||||||
|
|
||||||
ARG DEBIAN_FRONTEND=noninteractive
|
|
||||||
RUN apt-get update && apt-get install -y --no-install-recommends \
|
|
||||||
ca-certificates \
|
|
||||||
file \
|
|
||||||
git \
|
|
||||||
python3 \
|
|
||||||
build-essential \
|
|
||||||
gawk \
|
|
||||||
unzip \
|
|
||||||
libncurses5-dev \
|
|
||||||
zlib1g-dev \
|
|
||||||
libssl-dev \
|
|
||||||
libelf-dev \
|
|
||||||
wget \
|
|
||||||
rsync \
|
|
||||||
time \
|
|
||||||
qemu-utils \
|
|
||||||
ecdsautils \
|
|
||||||
lua-check \
|
|
||||||
shellcheck \
|
|
||||||
&& apt-get clean \
|
|
||||||
&& rm -rf /var/lib/apt/lists/*
|
|
||||||
|
|
||||||
RUN mkdir /tmp/ec &&\
|
|
||||||
wget -O /tmp/ec/ec-linux-amd64.tar.gz https://github.com/editorconfig-checker/editorconfig-checker/releases/download/2.7.0/ec-linux-amd64.tar.gz &&\
|
|
||||||
tar -xvzf /tmp/ec/ec-linux-amd64.tar.gz &&\
|
|
||||||
mv bin/ec-linux-amd64 /usr/local/bin/editorconfig-checker &&\
|
|
||||||
rm -rf /tmp/ec
|
|
||||||
|
|
||||||
RUN useradd -d /gluon gluon
|
|
||||||
USER gluon
|
|
||||||
|
|
||||||
VOLUME /gluon
|
|
||||||
WORKDIR /gluon
|
|
@ -4,7 +4,7 @@ use strict;
|
|||||||
use warnings;
|
use warnings;
|
||||||
use Text::Balanced qw(extract_bracketed extract_delimited extract_tagged);
|
use Text::Balanced qw(extract_bracketed extract_delimited extract_tagged);
|
||||||
|
|
||||||
@ARGV >= 1 || die "Usage: $0 <source directory>\n";
|
@ARGV >= 1 || die "Usage: $0 <source direcory>\n";
|
||||||
|
|
||||||
|
|
||||||
my %stringtable;
|
my %stringtable;
|
||||||
@ -48,7 +48,7 @@ if( open F, "find @ARGV -type f '(' -name '*.html' -o -name '*.lua' ')' |" )
|
|||||||
|
|
||||||
my $text = $raw;
|
my $text = $raw;
|
||||||
|
|
||||||
while( $text =~ s/ ^ .*? (?:translate|translatef|_) [\n\s]* \( /(/sgx )
|
while( $text =~ s/ ^ .*? (?:translate|translatef|i18n|_) [\n\s]* \( /(/sgx )
|
||||||
{
|
{
|
||||||
( my $code, $text ) = extract_bracketed($text, q{('")});
|
( my $code, $text ) = extract_bracketed($text, q{('")});
|
||||||
|
|
||||||
@ -79,7 +79,7 @@ if( open F, "find @ARGV -type f '(' -name '*.html' -o -name '*.lua' ')' |" )
|
|||||||
{
|
{
|
||||||
my $stag = quotemeta $1;
|
my $stag = quotemeta $1;
|
||||||
my $etag = $stag;
|
my $etag = $stag;
|
||||||
$etag =~ s/\[/]/g;
|
$etag =~ s/\[/]/g;
|
||||||
|
|
||||||
( $res ) = extract_tagged($code, $stag, $etag);
|
( $res ) = extract_tagged($code, $stag, $etag);
|
||||||
|
|
||||||
|
@ -1,6 +1,5 @@
|
|||||||
#!/bin/bash
|
#!/bin/bash
|
||||||
|
|
||||||
set -e
|
|
||||||
# Script to list all upgrade scripts in a clear manner
|
# Script to list all upgrade scripts in a clear manner
|
||||||
# Limitations:
|
# Limitations:
|
||||||
# * Does only show scripts of packages whose `files'/`luasrc' directories represent the whole image filesystem (which are all Gluon packages)
|
# * Does only show scripts of packages whose `files'/`luasrc' directories represent the whole image filesystem (which are all Gluon packages)
|
||||||
@ -28,7 +27,7 @@ fi
|
|||||||
|
|
||||||
pushd "$(dirname "$0")/.." >/dev/null
|
pushd "$(dirname "$0")/.." >/dev/null
|
||||||
|
|
||||||
find ./package packages -name Makefile | grep -v '^packages/packages/' | while read -r makefile; do
|
find ./package packages -name Makefile | while read makefile; do
|
||||||
dir="$(dirname "$makefile")"
|
dir="$(dirname "$makefile")"
|
||||||
|
|
||||||
pushd "$dir" >/dev/null
|
pushd "$dir" >/dev/null
|
||||||
@ -37,12 +36,13 @@ find ./package packages -name Makefile | grep -v '^packages/packages/' | while r
|
|||||||
dirname="$(dirname "$dir" | cut -d/ -f 3-)"
|
dirname="$(dirname "$dir" | cut -d/ -f 3-)"
|
||||||
package="$(basename "$dir")"
|
package="$(basename "$dir")"
|
||||||
|
|
||||||
for file in "${SUFFIX1}"/* "${SUFFIX2}"/*; do
|
for file in "${SUFFIX1}"/*; do
|
||||||
basename="$(basename "${file}")"
|
echo "${GREEN}$(basename "${file}")${RESET}" "(${BLUE}${repo}${RESET}/${dirname}${dirname:+/}${RED}${package}${RESET}/${SUFFIX1})"
|
||||||
suffix="$(dirname "${file}")"
|
done
|
||||||
printf "%s\t%s\n" "${basename}" "${BLUE}${repo}${RESET}/${dirname}${dirname:+/}${RED}${package}${RESET}/${suffix}/${GREEN}${basename}${RESET}"
|
for file in "${SUFFIX2}"/*; do
|
||||||
|
echo "${GREEN}$(basename "${file}")${RESET}" "(${BLUE}${repo}${RESET}/${dirname}${dirname:+/}${RED}${package}${RESET}/${SUFFIX2})"
|
||||||
done
|
done
|
||||||
popd >/dev/null
|
popd >/dev/null
|
||||||
done | sort | cut -f2-
|
done | sort
|
||||||
|
|
||||||
popd >/dev/null
|
popd >/dev/null
|
||||||
|
@ -1,149 +0,0 @@
|
|||||||
#!/bin/sh
|
|
||||||
|
|
||||||
set -e
|
|
||||||
|
|
||||||
topdir="$(realpath "$(dirname "${0}")/../openwrt")"
|
|
||||||
|
|
||||||
# defaults to qemu run script
|
|
||||||
ssh_host=localhost
|
|
||||||
build_only=0
|
|
||||||
preserve_config=1
|
|
||||||
|
|
||||||
print_help() {
|
|
||||||
echo "$0 [OPTIONS] PACAKGE_DIR [PACKAGE_DIR] ..."
|
|
||||||
echo ""
|
|
||||||
echo " -h print this help"
|
|
||||||
echo " -r HOST use a remote machine as target machine. By default if this"
|
|
||||||
echo " option is not given, push_pkg.sh will use a locally"
|
|
||||||
echo " running qemu instance started by run_qemu.sh."
|
|
||||||
echo " -p PORT use PORT as ssh port (default is 22)"
|
|
||||||
echo " -b build only, do not push"
|
|
||||||
echo " -P do not preserve /etc/config. By default, if a package"
|
|
||||||
echo " defines a config file in /etc/config, this config file"
|
|
||||||
echo " will be preserved. If you specify this flag, the package"
|
|
||||||
echo " default will be installed instead."
|
|
||||||
echo ""
|
|
||||||
echo ' To change gluon variables, run e.g. "make config GLUON_MINIFY=0"'
|
|
||||||
echo ' because then the gluon logic will be triggered, and openwrt/.config'
|
|
||||||
echo ' will be regenerated. The variables from openwrt/.config are already'
|
|
||||||
echo ' automatically used for this script.'
|
|
||||||
echo
|
|
||||||
}
|
|
||||||
|
|
||||||
while getopts "p:r:hbP" opt
|
|
||||||
do
|
|
||||||
case $opt in
|
|
||||||
P) preserve_config=0;;
|
|
||||||
p) ssh_port="${OPTARG}";;
|
|
||||||
r) ssh_host="${OPTARG}"; [ -z "$ssh_port" ] && ssh_port=22;;
|
|
||||||
b) build_only=1;;
|
|
||||||
h) print_help; exit 0;;
|
|
||||||
*) ;;
|
|
||||||
esac
|
|
||||||
done
|
|
||||||
shift $(( OPTIND - 1 ))
|
|
||||||
|
|
||||||
[ -z "$ssh_port" ] && ssh_port=2223
|
|
||||||
|
|
||||||
if [ "$build_only" -eq 0 ]; then
|
|
||||||
remote_info=$(ssh -p "${ssh_port}" "root@${ssh_host}" '
|
|
||||||
source /etc/os-release
|
|
||||||
printf "%s\\t%s\\n" "$OPENWRT_BOARD" "$OPENWRT_ARCH"
|
|
||||||
')
|
|
||||||
REMOTE_OPENWRT_BOARD="$(echo "$remote_info" | cut -f 1)"
|
|
||||||
REMOTE_OPENWRT_ARCH="$(echo "$remote_info" | cut -f 2)"
|
|
||||||
|
|
||||||
# check target
|
|
||||||
if ! grep -q "CONFIG_TARGET_ARCH_PACKAGES=\"${REMOTE_OPENWRT_ARCH}\"" "${topdir}/.config"; then
|
|
||||||
echo "Configured OpenWrt Target is not matching with the target machine!" 1>&2
|
|
||||||
echo
|
|
||||||
printf "%s" " Configured architecture: " 1>&2
|
|
||||||
grep "CONFIG_TARGET_ARCH_PACKAGES" "${topdir}/.config" 1>&2
|
|
||||||
echo "Target machine architecture: ${REMOTE_OPENWRT_ARCH}" 1>&2
|
|
||||||
echo 1>&2
|
|
||||||
echo "To switch the local with the run with the corresponding GLUON_TARGET:" 1>&2
|
|
||||||
echo " make GLUON_TARGET=... config" 1>&2
|
|
||||||
exit 1
|
|
||||||
fi
|
|
||||||
fi
|
|
||||||
|
|
||||||
if [ $# -lt 1 ]; then
|
|
||||||
echo ERROR: Please specify a PACKAGE_DIR. For example:
|
|
||||||
echo
|
|
||||||
echo " \$ $0 package/gluon-core"
|
|
||||||
exit 1
|
|
||||||
fi
|
|
||||||
|
|
||||||
while [ $# -gt 0 ]; do
|
|
||||||
|
|
||||||
pkgdir="$1"; shift
|
|
||||||
echo "Package: ${pkgdir}"
|
|
||||||
|
|
||||||
if ! [ -f "${pkgdir}/Makefile" ]; then
|
|
||||||
echo "ERROR: ${pkgdir} does not contain a Makefile"
|
|
||||||
exit 1
|
|
||||||
fi
|
|
||||||
|
|
||||||
if ! grep -q BuildPackage "${pkgdir}/Makefile"; then
|
|
||||||
echo "ERROR: ${pkgdir}/Makefile does not contain a BuildPackage command"
|
|
||||||
exit 1
|
|
||||||
fi
|
|
||||||
|
|
||||||
opkg_packages="$(make TOPDIR="${topdir}" -C "${pkgdir}" DUMP=1 | awk '/^Package: / { print $2 }')"
|
|
||||||
|
|
||||||
search_package() {
|
|
||||||
find "$2" -name "$1_*.ipk" -printf '%f\n'
|
|
||||||
}
|
|
||||||
|
|
||||||
make TOPDIR="${topdir}" -C "${pkgdir}" clean
|
|
||||||
make TOPDIR="${topdir}" -C "${pkgdir}" compile
|
|
||||||
|
|
||||||
if [ "$build_only" -eq 1 ]; then
|
|
||||||
continue
|
|
||||||
fi
|
|
||||||
|
|
||||||
# IPv6 addresses need brackets around the ${ssh_host} for scp!
|
|
||||||
if echo "${ssh_host}" | grep -q :; then
|
|
||||||
BL=[
|
|
||||||
BR=]
|
|
||||||
fi
|
|
||||||
|
|
||||||
for pkg in ${opkg_packages}; do
|
|
||||||
|
|
||||||
for feed in "${topdir}/bin/packages/${REMOTE_OPENWRT_ARCH}/"*/ "${topdir}/bin/targets/${REMOTE_OPENWRT_BOARD}/packages/"; do
|
|
||||||
printf "%s" "searching ${pkg} in ${feed}: "
|
|
||||||
filename=$(search_package "${pkg}" "${feed}")
|
|
||||||
if [ -n "${filename}" ]; then
|
|
||||||
echo found!
|
|
||||||
break
|
|
||||||
else
|
|
||||||
echo not found
|
|
||||||
fi
|
|
||||||
done
|
|
||||||
|
|
||||||
if [ "$preserve_config" -eq 0 ]; then
|
|
||||||
opkg_flags=" --force-maintainer"
|
|
||||||
fi
|
|
||||||
|
|
||||||
# shellcheck disable=SC2029
|
|
||||||
if [ -n "$filename" ]; then
|
|
||||||
scp -O -P "${ssh_port}" "$feed/$filename" "root@${BL}${ssh_host}${BR}:/tmp/${filename}"
|
|
||||||
ssh -p "${ssh_port}" "root@${ssh_host}" "
|
|
||||||
set -e
|
|
||||||
echo Running opkg:
|
|
||||||
opkg install --force-reinstall ${opkg_flags} '/tmp/${filename}'
|
|
||||||
rm '/tmp/${filename}'
|
|
||||||
gluon-reconfigure
|
|
||||||
"
|
|
||||||
else
|
|
||||||
# Some packages (e.g. procd-seccomp) seem to contain BuildPackage commands
|
|
||||||
# which do not generate *.ipk files. Till this point, I am not aware why
|
|
||||||
# this is happening. However, dropping a warning if the corresponding
|
|
||||||
# *.ipk is not found (maybe due to other reasons as well), seems to
|
|
||||||
# be more reasonable than aborting. Before this commit, the command
|
|
||||||
# has failed.
|
|
||||||
echo "Warning: ${pkg}*.ipk not found! Ignoring." 1>&2
|
|
||||||
fi
|
|
||||||
|
|
||||||
done
|
|
||||||
done
|
|
@ -1,15 +0,0 @@
|
|||||||
#!/bin/sh
|
|
||||||
|
|
||||||
# Note: You can exit the qemu instance by first pressing "CTRL + a" then "c".
|
|
||||||
# Then you enter the command mode of qemu and can exit by typing "quit".
|
|
||||||
|
|
||||||
qemu-system-x86_64 \
|
|
||||||
-d 'cpu_reset' \
|
|
||||||
-enable-kvm \
|
|
||||||
-gdb tcp::1234 \
|
|
||||||
-nographic \
|
|
||||||
-netdev user,id=wan,hostfwd=tcp::2223-10.0.2.15:22 \
|
|
||||||
-device virtio-net-pci,netdev=wan,addr=0x06,id=nic1 \
|
|
||||||
-netdev user,id=lan,hostfwd=tcp::6080-192.168.1.1:80,hostfwd=tcp::2222-192.168.1.1:22,net=192.168.1.100/24 \
|
|
||||||
-device virtio-net-pci,netdev=lan,addr=0x05,id=nic2 \
|
|
||||||
"$@"
|
|
@ -2,7 +2,7 @@
|
|||||||
|
|
||||||
set -e
|
set -e
|
||||||
|
|
||||||
if [ $# -ne 2 ] || [ "-h" = "$1" ] || [ "--help" = "$1" ] || [ ! -r "$1" ] || [ ! -r "$2" ]; then
|
if [ $# -ne 2 -o "-h" = "$1" -o "--help" = "$1" -o ! -r "$1" -o ! -r "$2" ]; then
|
||||||
cat <<EOHELP
|
cat <<EOHELP
|
||||||
Usage: $0 <secret> <manifest>
|
Usage: $0 <secret> <manifest>
|
||||||
|
|
||||||
@ -15,7 +15,7 @@ The script may be performed multiple times to the same document
|
|||||||
to indicate an approval by multiple developers.
|
to indicate an approval by multiple developers.
|
||||||
|
|
||||||
See also
|
See also
|
||||||
* ecdsautils on https://github.com/freifunk-gluon/ecdsautils
|
* edcsautils on https://github.com/tcatm/ecdsautils
|
||||||
|
|
||||||
EOHELP
|
EOHELP
|
||||||
exit 1
|
exit 1
|
||||||
@ -29,22 +29,11 @@ lower="$(mktemp)"
|
|||||||
|
|
||||||
trap 'rm -f "$upper" "$lower"' EXIT
|
trap 'rm -f "$upper" "$lower"' EXIT
|
||||||
|
|
||||||
awk 'BEGIN {
|
awk 'BEGIN { sep=0 }
|
||||||
sep = 0
|
/^---$/ { sep=1; next }
|
||||||
}
|
{ if(sep==0) print > "'"$upper"'";
|
||||||
|
else print > "'"$lower"'"}' \
|
||||||
/^---$/ {
|
"$manifest"
|
||||||
sep = 1;
|
|
||||||
next
|
|
||||||
}
|
|
||||||
|
|
||||||
{
|
|
||||||
if(sep == 0) {
|
|
||||||
print > "'"$upper"'"
|
|
||||||
} else {
|
|
||||||
print > "'"$lower"'"
|
|
||||||
}
|
|
||||||
}' "$manifest"
|
|
||||||
|
|
||||||
ecdsasign "$upper" < "$SECRET" >> "$lower"
|
ecdsasign "$upper" < "$SECRET" >> "$lower"
|
||||||
|
|
||||||
|
@ -1,18 +1,18 @@
|
|||||||
#!/bin/sh
|
#!/bin/sh
|
||||||
|
|
||||||
if [ $# -eq 0 ] || [ "-h" = "$1" ] || [ "-help" = "$1" ] || [ "--help" = "$1" ]; then
|
if [ $# -eq 0 -o "-h" = "$1" -o "-help" = "$1" -o "--help" = "$1" ]; then
|
||||||
cat <<EOHELP
|
cat <<EOHELP
|
||||||
Usage: $0 <public> <signed manifest>
|
Usage: $0 <public> <signed manifest>
|
||||||
|
|
||||||
sigtest.sh checks if a manifest is signed by the public key <public>. There is
|
sigtest.sh checks if a manifest is signed by the public key <public>. There is
|
||||||
no output, success or failure is indicated via the return code.
|
no output, success or failure is indicated via the return code.
|
||||||
|
|
||||||
See also:
|
See also:
|
||||||
* ecdsautils in https://github.com/freifunk-gluon/ecdsautils
|
* ecdsautils in https://github.com/tcatm/ecdsautils
|
||||||
* https://gluon.readthedocs.io/en/latest/features/autoupdater.html
|
* http://gluon.readthedocs.org/en/latest/features/autoupdater.html
|
||||||
|
|
||||||
EOHELP
|
EOHELP
|
||||||
exit 1
|
exit 1
|
||||||
fi
|
fi
|
||||||
|
|
||||||
public="$1"
|
public="$1"
|
||||||
@ -21,29 +21,18 @@ upper="$(mktemp)"
|
|||||||
lower="$(mktemp)"
|
lower="$(mktemp)"
|
||||||
ret=1
|
ret=1
|
||||||
|
|
||||||
awk 'BEGIN {
|
awk "BEGIN { sep=0 }
|
||||||
sep = 0
|
/^---\$/ { sep=1; next }
|
||||||
}
|
{ if(sep==0) print > \"$upper\";
|
||||||
|
else print > \"$lower\"}" \
|
||||||
|
"$manifest"
|
||||||
|
|
||||||
/^---$/ {
|
while read line
|
||||||
sep = 1;
|
|
||||||
next
|
|
||||||
}
|
|
||||||
|
|
||||||
{
|
|
||||||
if(sep == 0) {
|
|
||||||
print > "'"$upper"'"
|
|
||||||
} else {
|
|
||||||
print > "'"$lower"'"
|
|
||||||
}
|
|
||||||
}' "$manifest"
|
|
||||||
|
|
||||||
while read -r line
|
|
||||||
do
|
do
|
||||||
if ecdsaverify -s "$line" -p "$public" "$upper"; then
|
if ecdsaverify -s "$line" -p "$public" "$upper"; then
|
||||||
ret=0
|
ret=0
|
||||||
break
|
break
|
||||||
fi
|
fi
|
||||||
done < "$lower"
|
done < "$lower"
|
||||||
|
|
||||||
rm -f "$upper" "$lower"
|
rm -f "$upper" "$lower"
|
||||||
|
178
docs/Makefile
@ -1,19 +1,177 @@
|
|||||||
# Minimal makefile for Sphinx documentation
|
# Makefile for Sphinx documentation
|
||||||
#
|
#
|
||||||
|
|
||||||
# You can set these variables from the command line.
|
# You can set these variables from the command line.
|
||||||
SPHINXOPTS = -W --keep-going
|
SPHINXOPTS =
|
||||||
SPHINXBUILD = sphinx-build
|
SPHINXBUILD = sphinx-build
|
||||||
SOURCEDIR = .
|
PAPER =
|
||||||
BUILDDIR = _build
|
BUILDDIR = _build
|
||||||
|
|
||||||
# Put it first so that "make" without argument is like "make help".
|
# User-friendly check for sphinx-build
|
||||||
|
ifeq ($(shell which $(SPHINXBUILD) >/dev/null 2>&1; echo $$?), 1)
|
||||||
|
$(error The '$(SPHINXBUILD)' command was not found. Make sure you have Sphinx installed, then set the SPHINXBUILD environment variable to point to the full path of the '$(SPHINXBUILD)' executable. Alternatively you can add the directory with the executable to your PATH. If you don't have Sphinx installed, grab it from http://sphinx-doc.org/)
|
||||||
|
endif
|
||||||
|
|
||||||
|
# Internal variables.
|
||||||
|
PAPEROPT_a4 = -D latex_paper_size=a4
|
||||||
|
PAPEROPT_letter = -D latex_paper_size=letter
|
||||||
|
ALLSPHINXOPTS = -d $(BUILDDIR)/doctrees $(PAPEROPT_$(PAPER)) $(SPHINXOPTS) .
|
||||||
|
# the i18n builder cannot share the environment and doctrees with the others
|
||||||
|
I18NSPHINXOPTS = $(PAPEROPT_$(PAPER)) $(SPHINXOPTS) .
|
||||||
|
|
||||||
|
.PHONY: help clean html dirhtml singlehtml pickle json htmlhelp qthelp devhelp epub latex latexpdf text man changes linkcheck doctest gettext
|
||||||
|
|
||||||
help:
|
help:
|
||||||
@$(SPHINXBUILD) -M help "$(SOURCEDIR)" "$(BUILDDIR)" $(SPHINXOPTS) $(O)
|
@echo "Please use \`make <target>' where <target> is one of"
|
||||||
|
@echo " html to make standalone HTML files"
|
||||||
|
@echo " dirhtml to make HTML files named index.html in directories"
|
||||||
|
@echo " singlehtml to make a single large HTML file"
|
||||||
|
@echo " pickle to make pickle files"
|
||||||
|
@echo " json to make JSON files"
|
||||||
|
@echo " htmlhelp to make HTML files and a HTML help project"
|
||||||
|
@echo " qthelp to make HTML files and a qthelp project"
|
||||||
|
@echo " devhelp to make HTML files and a Devhelp project"
|
||||||
|
@echo " epub to make an epub"
|
||||||
|
@echo " latex to make LaTeX files, you can set PAPER=a4 or PAPER=letter"
|
||||||
|
@echo " latexpdf to make LaTeX files and run them through pdflatex"
|
||||||
|
@echo " latexpdfja to make LaTeX files and run them through platex/dvipdfmx"
|
||||||
|
@echo " text to make text files"
|
||||||
|
@echo " man to make manual pages"
|
||||||
|
@echo " texinfo to make Texinfo files"
|
||||||
|
@echo " info to make Texinfo files and run them through makeinfo"
|
||||||
|
@echo " gettext to make PO message catalogs"
|
||||||
|
@echo " changes to make an overview of all changed/added/deprecated items"
|
||||||
|
@echo " xml to make Docutils-native XML files"
|
||||||
|
@echo " pseudoxml to make pseudoxml-XML files for display purposes"
|
||||||
|
@echo " linkcheck to check all external links for integrity"
|
||||||
|
@echo " doctest to run all doctests embedded in the documentation (if enabled)"
|
||||||
|
|
||||||
.PHONY: help Makefile
|
clean:
|
||||||
|
rm -rf $(BUILDDIR)/*
|
||||||
|
|
||||||
# Catch-all target: route all unknown targets to Sphinx using the new
|
html:
|
||||||
# "make mode" option. $(O) is meant as a shortcut for $(SPHINXOPTS).
|
$(SPHINXBUILD) -b html $(ALLSPHINXOPTS) $(BUILDDIR)/html
|
||||||
%: Makefile
|
@echo
|
||||||
@$(SPHINXBUILD) -M $@ "$(SOURCEDIR)" "$(BUILDDIR)" $(SPHINXOPTS) $(O)
|
@echo "Build finished. The HTML pages are in $(BUILDDIR)/html."
|
||||||
|
|
||||||
|
dirhtml:
|
||||||
|
$(SPHINXBUILD) -b dirhtml $(ALLSPHINXOPTS) $(BUILDDIR)/dirhtml
|
||||||
|
@echo
|
||||||
|
@echo "Build finished. The HTML pages are in $(BUILDDIR)/dirhtml."
|
||||||
|
|
||||||
|
singlehtml:
|
||||||
|
$(SPHINXBUILD) -b singlehtml $(ALLSPHINXOPTS) $(BUILDDIR)/singlehtml
|
||||||
|
@echo
|
||||||
|
@echo "Build finished. The HTML page is in $(BUILDDIR)/singlehtml."
|
||||||
|
|
||||||
|
pickle:
|
||||||
|
$(SPHINXBUILD) -b pickle $(ALLSPHINXOPTS) $(BUILDDIR)/pickle
|
||||||
|
@echo
|
||||||
|
@echo "Build finished; now you can process the pickle files."
|
||||||
|
|
||||||
|
json:
|
||||||
|
$(SPHINXBUILD) -b json $(ALLSPHINXOPTS) $(BUILDDIR)/json
|
||||||
|
@echo
|
||||||
|
@echo "Build finished; now you can process the JSON files."
|
||||||
|
|
||||||
|
htmlhelp:
|
||||||
|
$(SPHINXBUILD) -b htmlhelp $(ALLSPHINXOPTS) $(BUILDDIR)/htmlhelp
|
||||||
|
@echo
|
||||||
|
@echo "Build finished; now you can run HTML Help Workshop with the" \
|
||||||
|
".hhp project file in $(BUILDDIR)/htmlhelp."
|
||||||
|
|
||||||
|
qthelp:
|
||||||
|
$(SPHINXBUILD) -b qthelp $(ALLSPHINXOPTS) $(BUILDDIR)/qthelp
|
||||||
|
@echo
|
||||||
|
@echo "Build finished; now you can run "qcollectiongenerator" with the" \
|
||||||
|
".qhcp project file in $(BUILDDIR)/qthelp, like this:"
|
||||||
|
@echo "# qcollectiongenerator $(BUILDDIR)/qthelp/Gluon.qhcp"
|
||||||
|
@echo "To view the help file:"
|
||||||
|
@echo "# assistant -collectionFile $(BUILDDIR)/qthelp/Gluon.qhc"
|
||||||
|
|
||||||
|
devhelp:
|
||||||
|
$(SPHINXBUILD) -b devhelp $(ALLSPHINXOPTS) $(BUILDDIR)/devhelp
|
||||||
|
@echo
|
||||||
|
@echo "Build finished."
|
||||||
|
@echo "To view the help file:"
|
||||||
|
@echo "# mkdir -p $$HOME/.local/share/devhelp/Gluon"
|
||||||
|
@echo "# ln -s $(BUILDDIR)/devhelp $$HOME/.local/share/devhelp/Gluon"
|
||||||
|
@echo "# devhelp"
|
||||||
|
|
||||||
|
epub:
|
||||||
|
$(SPHINXBUILD) -b epub $(ALLSPHINXOPTS) $(BUILDDIR)/epub
|
||||||
|
@echo
|
||||||
|
@echo "Build finished. The epub file is in $(BUILDDIR)/epub."
|
||||||
|
|
||||||
|
latex:
|
||||||
|
$(SPHINXBUILD) -b latex $(ALLSPHINXOPTS) $(BUILDDIR)/latex
|
||||||
|
@echo
|
||||||
|
@echo "Build finished; the LaTeX files are in $(BUILDDIR)/latex."
|
||||||
|
@echo "Run \`make' in that directory to run these through (pdf)latex" \
|
||||||
|
"(use \`make latexpdf' here to do that automatically)."
|
||||||
|
|
||||||
|
latexpdf:
|
||||||
|
$(SPHINXBUILD) -b latex $(ALLSPHINXOPTS) $(BUILDDIR)/latex
|
||||||
|
@echo "Running LaTeX files through pdflatex..."
|
||||||
|
$(MAKE) -C $(BUILDDIR)/latex all-pdf
|
||||||
|
@echo "pdflatex finished; the PDF files are in $(BUILDDIR)/latex."
|
||||||
|
|
||||||
|
latexpdfja:
|
||||||
|
$(SPHINXBUILD) -b latex $(ALLSPHINXOPTS) $(BUILDDIR)/latex
|
||||||
|
@echo "Running LaTeX files through platex and dvipdfmx..."
|
||||||
|
$(MAKE) -C $(BUILDDIR)/latex all-pdf-ja
|
||||||
|
@echo "pdflatex finished; the PDF files are in $(BUILDDIR)/latex."
|
||||||
|
|
||||||
|
text:
|
||||||
|
$(SPHINXBUILD) -b text $(ALLSPHINXOPTS) $(BUILDDIR)/text
|
||||||
|
@echo
|
||||||
|
@echo "Build finished. The text files are in $(BUILDDIR)/text."
|
||||||
|
|
||||||
|
man:
|
||||||
|
$(SPHINXBUILD) -b man $(ALLSPHINXOPTS) $(BUILDDIR)/man
|
||||||
|
@echo
|
||||||
|
@echo "Build finished. The manual pages are in $(BUILDDIR)/man."
|
||||||
|
|
||||||
|
texinfo:
|
||||||
|
$(SPHINXBUILD) -b texinfo $(ALLSPHINXOPTS) $(BUILDDIR)/texinfo
|
||||||
|
@echo
|
||||||
|
@echo "Build finished. The Texinfo files are in $(BUILDDIR)/texinfo."
|
||||||
|
@echo "Run \`make' in that directory to run these through makeinfo" \
|
||||||
|
"(use \`make info' here to do that automatically)."
|
||||||
|
|
||||||
|
info:
|
||||||
|
$(SPHINXBUILD) -b texinfo $(ALLSPHINXOPTS) $(BUILDDIR)/texinfo
|
||||||
|
@echo "Running Texinfo files through makeinfo..."
|
||||||
|
make -C $(BUILDDIR)/texinfo info
|
||||||
|
@echo "makeinfo finished; the Info files are in $(BUILDDIR)/texinfo."
|
||||||
|
|
||||||
|
gettext:
|
||||||
|
$(SPHINXBUILD) -b gettext $(I18NSPHINXOPTS) $(BUILDDIR)/locale
|
||||||
|
@echo
|
||||||
|
@echo "Build finished. The message catalogs are in $(BUILDDIR)/locale."
|
||||||
|
|
||||||
|
changes:
|
||||||
|
$(SPHINXBUILD) -b changes $(ALLSPHINXOPTS) $(BUILDDIR)/changes
|
||||||
|
@echo
|
||||||
|
@echo "The overview file is in $(BUILDDIR)/changes."
|
||||||
|
|
||||||
|
linkcheck:
|
||||||
|
$(SPHINXBUILD) -b linkcheck $(ALLSPHINXOPTS) $(BUILDDIR)/linkcheck
|
||||||
|
@echo
|
||||||
|
@echo "Link check complete; look for any errors in the above output " \
|
||||||
|
"or in $(BUILDDIR)/linkcheck/output.txt."
|
||||||
|
|
||||||
|
doctest:
|
||||||
|
$(SPHINXBUILD) -b doctest $(ALLSPHINXOPTS) $(BUILDDIR)/doctest
|
||||||
|
@echo "Testing of doctests in the sources finished, look at the " \
|
||||||
|
"results in $(BUILDDIR)/doctest/output.txt."
|
||||||
|
|
||||||
|
xml:
|
||||||
|
$(SPHINXBUILD) -b xml $(ALLSPHINXOPTS) $(BUILDDIR)/xml
|
||||||
|
@echo
|
||||||
|
@echo "Build finished. The XML files are in $(BUILDDIR)/xml."
|
||||||
|
|
||||||
|
pseudoxml:
|
||||||
|
$(SPHINXBUILD) -b pseudoxml $(ALLSPHINXOPTS) $(BUILDDIR)/pseudoxml
|
||||||
|
@echo
|
||||||
|
@echo "Build finished. The pseudo-XML files are in $(BUILDDIR)/pseudoxml."
|
||||||
|
10
docs/_static/css/custom.css
vendored
@ -1,10 +0,0 @@
|
|||||||
/*
|
|
||||||
This fixes the vertical position of list markers when the first
|
|
||||||
element in the <li> is a <pre> block
|
|
||||||
|
|
||||||
Scrolling inside the <pre> block is still working as expected
|
|
||||||
*/
|
|
||||||
.rst-content pre.literal-block,
|
|
||||||
.rst-content div[class^='highlight'] pre {
|
|
||||||
overflow: visible;
|
|
||||||
}
|
|
275
docs/conf.py
@ -1,188 +1,261 @@
|
|||||||
|
#!/usr/bin/env python3
|
||||||
# -*- coding: utf-8 -*-
|
# -*- coding: utf-8 -*-
|
||||||
#
|
#
|
||||||
# Configuration file for the Sphinx documentation builder.
|
# Gluon documentation build configuration file, created by
|
||||||
|
# sphinx-quickstart on Wed Jan 29 00:45:53 2014.
|
||||||
#
|
#
|
||||||
# This file does only contain a selection of the most common options. For a
|
# This file is execfile()d with the current directory set to its
|
||||||
# full list see the documentation:
|
# containing dir.
|
||||||
# http://www.sphinx-doc.org/en/master/config
|
#
|
||||||
|
# Note that not all possible configuration values are present in this
|
||||||
|
# autogenerated file.
|
||||||
|
#
|
||||||
|
# All configuration values have a default; values that are commented out
|
||||||
|
# serve to show the default.
|
||||||
|
|
||||||
# -- Path setup --------------------------------------------------------------
|
import sys
|
||||||
|
import os
|
||||||
|
|
||||||
# If extensions (or modules to document with autodoc) are in another directory,
|
# If extensions (or modules to document with autodoc) are in another directory,
|
||||||
# add these directories to sys.path here. If the directory is relative to the
|
# add these directories to sys.path here. If the directory is relative to the
|
||||||
# documentation root, use os.path.abspath to make it absolute, like shown here.
|
# documentation root, use os.path.abspath to make it absolute, like shown here.
|
||||||
#
|
#sys.path.insert(0, os.path.abspath('.'))
|
||||||
# import os
|
|
||||||
# import sys
|
|
||||||
# sys.path.insert(0, os.path.abspath('.'))
|
|
||||||
|
|
||||||
|
# -- General configuration ------------------------------------------------
|
||||||
# -- Project information -----------------------------------------------------
|
|
||||||
|
|
||||||
project = 'Gluon'
|
|
||||||
copyright = 'Project Gluon'
|
|
||||||
author = 'Project Gluon'
|
|
||||||
|
|
||||||
# The short X.Y version
|
|
||||||
version = '2022.1'
|
|
||||||
# The full version, including alpha/beta/rc tags
|
|
||||||
release = version
|
|
||||||
|
|
||||||
|
|
||||||
# -- General configuration ---------------------------------------------------
|
|
||||||
|
|
||||||
# If your documentation needs a minimal Sphinx version, state it here.
|
# If your documentation needs a minimal Sphinx version, state it here.
|
||||||
#
|
#needs_sphinx = '1.0'
|
||||||
# needs_sphinx = '1.0'
|
|
||||||
|
|
||||||
# Add any Sphinx extension module names here, as strings. They can be
|
# Add any Sphinx extension module names here, as strings. They can be
|
||||||
# extensions coming with Sphinx (named 'sphinx.ext.*') or your custom
|
# extensions coming with Sphinx (named 'sphinx.ext.*') or your custom
|
||||||
# ones.
|
# ones.
|
||||||
extensions = [
|
extensions = [
|
||||||
|
'sphinx.ext.mathjax',
|
||||||
]
|
]
|
||||||
|
|
||||||
# Add any paths that contain templates here, relative to this directory.
|
# Add any paths that contain templates here, relative to this directory.
|
||||||
templates_path = ['_templates']
|
templates_path = ['_templates']
|
||||||
|
|
||||||
# The suffix(es) of source filenames.
|
# The suffix of source filenames.
|
||||||
# You can specify multiple suffix as a list of string:
|
|
||||||
#
|
|
||||||
# source_suffix = ['.rst', '.md']
|
|
||||||
source_suffix = '.rst'
|
source_suffix = '.rst'
|
||||||
|
|
||||||
|
# The encoding of source files.
|
||||||
|
#source_encoding = 'utf-8-sig'
|
||||||
|
|
||||||
# The master toctree document.
|
# The master toctree document.
|
||||||
master_doc = 'index'
|
master_doc = 'index'
|
||||||
|
|
||||||
|
# General information about the project.
|
||||||
|
project = 'Gluon'
|
||||||
|
copyright = '2015-2018, Project Gluon'
|
||||||
|
|
||||||
|
# The version info for the project you're documenting, acts as replacement for
|
||||||
|
# |version| and |release|, also used in various other places throughout the
|
||||||
|
# built documents.
|
||||||
|
#
|
||||||
|
# The short X.Y version.
|
||||||
|
version = '2017.1.8'
|
||||||
|
# The full version, including alpha/beta/rc tags.
|
||||||
|
release = '2017.1.8'
|
||||||
|
|
||||||
# The language for content autogenerated by Sphinx. Refer to documentation
|
# The language for content autogenerated by Sphinx. Refer to documentation
|
||||||
# for a list of supported languages.
|
# for a list of supported languages.
|
||||||
#
|
#language = None
|
||||||
# This is also used if you do content translation via gettext catalogs.
|
|
||||||
# Usually you set "language" from the command line for these cases.
|
# There are two options for replacing |today|: either, you set today to some
|
||||||
language = 'en'
|
# non-false value, then it is used:
|
||||||
|
#today = ''
|
||||||
|
# Else, today_fmt is used as the format for a strftime call.
|
||||||
|
#today_fmt = '%B %d, %Y'
|
||||||
|
|
||||||
# List of patterns, relative to source directory, that match files and
|
# List of patterns, relative to source directory, that match files and
|
||||||
# directories to ignore when looking for source files.
|
# directories to ignore when looking for source files.
|
||||||
# This pattern also affects html_static_path and html_extra_path.
|
exclude_patterns = ['_build']
|
||||||
exclude_patterns = ['_build', 'Thumbs.db', '.DS_Store']
|
|
||||||
|
# The reST default role (used for this markup: `text`) to use for all
|
||||||
|
# documents.
|
||||||
|
#default_role = None
|
||||||
|
|
||||||
|
# If true, '()' will be appended to :func: etc. cross-reference text.
|
||||||
|
#add_function_parentheses = True
|
||||||
|
|
||||||
|
# If true, the current module name will be prepended to all description
|
||||||
|
# unit titles (such as .. function::).
|
||||||
|
#add_module_names = True
|
||||||
|
|
||||||
|
# If true, sectionauthor and moduleauthor directives will be shown in the
|
||||||
|
# output. They are ignored by default.
|
||||||
|
#show_authors = False
|
||||||
|
|
||||||
# The name of the Pygments (syntax highlighting) style to use.
|
# The name of the Pygments (syntax highlighting) style to use.
|
||||||
pygments_style = None
|
pygments_style = 'sphinx'
|
||||||
|
|
||||||
# Don't highlight code blocks unless requested explicitly
|
# A list of ignored prefixes for module index sorting.
|
||||||
highlight_language = 'none'
|
#modindex_common_prefix = []
|
||||||
|
|
||||||
# Ignore links to the config mode, as well as anchors on on hackint, which are
|
# If true, keep warnings as "system message" paragraphs in the built documents.
|
||||||
# used to mark channel names and do not exist. Regular links are not effected.
|
#keep_warnings = False
|
||||||
linkcheck_ignore = [
|
|
||||||
'http://192.168.1.1',
|
|
||||||
'https://webirc.hackint.org/#'
|
|
||||||
]
|
|
||||||
|
|
||||||
|
|
||||||
# -- Options for HTML output -------------------------------------------------
|
# -- Options for HTML output ----------------------------------------------
|
||||||
|
|
||||||
# The theme to use for HTML and HTML Help pages. See the documentation for
|
# The theme to use for HTML and HTML Help pages. See the documentation for
|
||||||
# a list of builtin themes.
|
# a list of builtin themes.
|
||||||
#
|
#html_theme = 'default'
|
||||||
html_theme = 'sphinx_rtd_theme'
|
|
||||||
|
|
||||||
# Theme options are theme-specific and customize the look and feel of a theme
|
# Theme options are theme-specific and customize the look and feel of a theme
|
||||||
# further. For a list of options available for each theme, see the
|
# further. For a list of options available for each theme, see the
|
||||||
# documentation.
|
# documentation.
|
||||||
#
|
#html_theme_options = {}
|
||||||
# html_theme_options = {}
|
|
||||||
|
# Add any paths that contain custom themes here, relative to this directory.
|
||||||
|
#html_theme_path = []
|
||||||
|
|
||||||
|
# The name for this set of Sphinx documents. If None, it defaults to
|
||||||
|
# "<project> v<release> documentation".
|
||||||
|
#html_title = None
|
||||||
|
|
||||||
|
# A shorter title for the navigation bar. Default is the same as html_title.
|
||||||
|
#html_short_title = None
|
||||||
|
|
||||||
|
# The name of an image file (relative to this directory) to place at the top
|
||||||
|
# of the sidebar.
|
||||||
|
#html_logo = None
|
||||||
|
|
||||||
|
# The name of an image file (within the static path) to use as favicon of the
|
||||||
|
# docs. This file should be a Windows icon file (.ico) being 16x16 or 32x32
|
||||||
|
# pixels large.
|
||||||
|
#html_favicon = None
|
||||||
|
|
||||||
# Add any paths that contain custom static files (such as style sheets) here,
|
# Add any paths that contain custom static files (such as style sheets) here,
|
||||||
# relative to this directory. They are copied after the builtin static files,
|
# relative to this directory. They are copied after the builtin static files,
|
||||||
# so a file named "default.css" will overwrite the builtin "default.css".
|
# so a file named "default.css" will overwrite the builtin "default.css".
|
||||||
#
|
#html_static_path = ['_static']
|
||||||
html_static_path = ['_static']
|
|
||||||
|
|
||||||
# Custom sidebar templates, must be a dictionary that maps document names
|
# Add any extra paths that contain custom files (such as robots.txt or
|
||||||
# to template names.
|
# .htaccess) here, relative to this directory. These files are copied
|
||||||
#
|
# directly to the root of the documentation.
|
||||||
# The default sidebars (for documents that don't match any pattern) are
|
#html_extra_path = []
|
||||||
# defined by theme itself. Builtin themes are using these templates by
|
|
||||||
# default: ``['localtoc.html', 'relations.html', 'sourcelink.html',
|
|
||||||
# 'searchbox.html']``.
|
|
||||||
#
|
|
||||||
# html_sidebars = {}
|
|
||||||
|
|
||||||
# These paths are either relative to html_static_path
|
# If not '', a 'Last updated on:' timestamp is inserted at every page bottom,
|
||||||
# or fully qualified paths (eg. https://...)
|
# using the given strftime format.
|
||||||
html_css_files = ['css/custom.css']
|
#html_last_updated_fmt = '%b %d, %Y'
|
||||||
|
|
||||||
|
# If true, SmartyPants will be used to convert quotes and dashes to
|
||||||
|
# typographically correct entities.
|
||||||
|
#html_use_smartypants = True
|
||||||
|
|
||||||
# -- Options for HTMLHelp output ---------------------------------------------
|
# Custom sidebar templates, maps document names to template names.
|
||||||
|
#html_sidebars = {}
|
||||||
|
|
||||||
|
# Additional templates that should be rendered to pages, maps page names to
|
||||||
|
# template names.
|
||||||
|
#html_additional_pages = {}
|
||||||
|
|
||||||
|
# If false, no module index is generated.
|
||||||
|
#html_domain_indices = True
|
||||||
|
|
||||||
|
# If false, no index is generated.
|
||||||
|
#html_use_index = True
|
||||||
|
|
||||||
|
# If true, the index is split into individual pages for each letter.
|
||||||
|
#html_split_index = False
|
||||||
|
|
||||||
|
# If true, links to the reST sources are added to the pages.
|
||||||
|
#html_show_sourcelink = True
|
||||||
|
|
||||||
|
# If true, "Created using Sphinx" is shown in the HTML footer. Default is True.
|
||||||
|
#html_show_sphinx = True
|
||||||
|
|
||||||
|
# If true, "(C) Copyright ..." is shown in the HTML footer. Default is True.
|
||||||
|
#html_show_copyright = True
|
||||||
|
|
||||||
|
# If true, an OpenSearch description file will be output, and all pages will
|
||||||
|
# contain a <link> tag referring to it. The value of this option must be the
|
||||||
|
# base URL from which the finished HTML is served.
|
||||||
|
#html_use_opensearch = ''
|
||||||
|
|
||||||
|
# This is the file name suffix for HTML files (e.g. ".xhtml").
|
||||||
|
#html_file_suffix = None
|
||||||
|
|
||||||
# Output file base name for HTML help builder.
|
# Output file base name for HTML help builder.
|
||||||
htmlhelp_basename = 'Gluondoc'
|
htmlhelp_basename = 'Gluondoc'
|
||||||
|
|
||||||
|
|
||||||
# -- Options for LaTeX output ------------------------------------------------
|
# -- Options for LaTeX output ---------------------------------------------
|
||||||
|
|
||||||
latex_elements = {
|
latex_elements = {
|
||||||
# The paper size ('letterpaper' or 'a4paper').
|
# The paper size ('letterpaper' or 'a4paper').
|
||||||
#
|
#'papersize': 'letterpaper',
|
||||||
# 'papersize': 'letterpaper',
|
|
||||||
|
|
||||||
# The font size ('10pt', '11pt' or '12pt').
|
# The font size ('10pt', '11pt' or '12pt').
|
||||||
#
|
#'pointsize': '10pt',
|
||||||
# 'pointsize': '10pt',
|
|
||||||
|
|
||||||
# Additional stuff for the LaTeX preamble.
|
# Additional stuff for the LaTeX preamble.
|
||||||
#
|
#'preamble': '',
|
||||||
# 'preamble': '',
|
|
||||||
|
|
||||||
# Latex figure (float) alignment
|
|
||||||
#
|
|
||||||
# 'figure_align': 'htbp',
|
|
||||||
}
|
}
|
||||||
|
|
||||||
# Grouping the document tree into LaTeX files. List of tuples
|
# Grouping the document tree into LaTeX files. List of tuples
|
||||||
# (source start file, target name, title,
|
# (source start file, target name, title,
|
||||||
# author, documentclass [howto, manual, or own class]).
|
# author, documentclass [howto, manual, or own class]).
|
||||||
latex_documents = [
|
latex_documents = [
|
||||||
(master_doc, 'Gluon.tex', 'Gluon Documentation',
|
('index', 'Gluon.tex', 'Gluon Documentation',
|
||||||
'Project Gluon', 'manual'),
|
'Project Gluon', 'manual'),
|
||||||
]
|
]
|
||||||
|
|
||||||
|
# The name of an image file (relative to this directory) to place at the top of
|
||||||
|
# the title page.
|
||||||
|
#latex_logo = None
|
||||||
|
|
||||||
# -- Options for manual page output ------------------------------------------
|
# For "manual" documents, if this is true, then toplevel headings are parts,
|
||||||
|
# not chapters.
|
||||||
|
#latex_use_parts = False
|
||||||
|
|
||||||
|
# If true, show page references after internal links.
|
||||||
|
#latex_show_pagerefs = False
|
||||||
|
|
||||||
|
# If true, show URL addresses after external links.
|
||||||
|
#latex_show_urls = False
|
||||||
|
|
||||||
|
# Documents to append as an appendix to all manuals.
|
||||||
|
#latex_appendices = []
|
||||||
|
|
||||||
|
# If false, no module index is generated.
|
||||||
|
#latex_domain_indices = True
|
||||||
|
|
||||||
|
|
||||||
|
# -- Options for manual page output ---------------------------------------
|
||||||
|
|
||||||
# One entry per manual page. List of tuples
|
# One entry per manual page. List of tuples
|
||||||
# (source start file, name, description, authors, manual section).
|
# (source start file, name, description, authors, manual section).
|
||||||
man_pages = [
|
man_pages = [
|
||||||
(master_doc, 'gluon', 'Gluon Documentation',
|
('index', 'gluon', 'Gluon Documentation',
|
||||||
[author], 1)
|
['Project Gluon'], 1)
|
||||||
]
|
]
|
||||||
|
|
||||||
|
# If true, show URL addresses after external links.
|
||||||
|
#man_show_urls = False
|
||||||
|
|
||||||
# -- Options for Texinfo output ----------------------------------------------
|
|
||||||
|
# -- Options for Texinfo output -------------------------------------------
|
||||||
|
|
||||||
# Grouping the document tree into Texinfo files. List of tuples
|
# Grouping the document tree into Texinfo files. List of tuples
|
||||||
# (source start file, target name, title, author,
|
# (source start file, target name, title, author,
|
||||||
# dir menu entry, description, category)
|
# dir menu entry, description, category)
|
||||||
texinfo_documents = [
|
texinfo_documents = [
|
||||||
(master_doc, 'Gluon', 'Gluon Documentation',
|
('index', 'Gluon', 'Gluon Documentation',
|
||||||
author, 'Gluon', 'One line description of project.',
|
'Project Gluon', 'Gluon', 'One line description of project.',
|
||||||
'Miscellaneous'),
|
'Miscellaneous'),
|
||||||
]
|
]
|
||||||
|
|
||||||
|
# Documents to append as an appendix to all manuals.
|
||||||
|
#texinfo_appendices = []
|
||||||
|
|
||||||
# -- Options for Epub output -------------------------------------------------
|
# If false, no module index is generated.
|
||||||
|
#texinfo_domain_indices = True
|
||||||
|
|
||||||
# Bibliographic Dublin Core info.
|
# How to display URL addresses: 'footnote', 'no', or 'inline'.
|
||||||
epub_title = project
|
#texinfo_show_urls = 'footnote'
|
||||||
|
|
||||||
# The unique identifier of the text. This can be a ISBN number
|
# If true, do not generate a @detailmenu in the "Top" node's menu.
|
||||||
# or the project homepage.
|
#texinfo_no_detailmenu = False
|
||||||
#
|
|
||||||
# epub_identifier = ''
|
|
||||||
|
|
||||||
# A unique identification for the text.
|
|
||||||
#
|
|
||||||
# epub_uid = ''
|
|
||||||
|
|
||||||
# A list of files that should not be packed into the epub file.
|
|
||||||
epub_exclude_files = ['search.html']
|
|
||||||
|
@ -15,15 +15,10 @@ The `main repo`_ does have issues enabled.
|
|||||||
IRC
|
IRC
|
||||||
---
|
---
|
||||||
|
|
||||||
Gluon's developers frequent the IRC chatroom `#gluon`_ on `hackint`_.
|
Gluon's developers frequent `#gluon on hackint`_. You're welcome to join us!
|
||||||
There is a `webchat`_ that allows for easy access from within your
|
|
||||||
webbrowser. You're welcome to join us!
|
|
||||||
|
|
||||||
.. _#gluon: ircs://irc.hackint.org/#gluon
|
.. _#gluon on hackint: irc://irc.hackint.org/#gluon
|
||||||
.. _hackint: https://hackint.org/
|
|
||||||
.. _webchat: https://webirc.hackint.org/#irc://irc.hackint.org/#gluon
|
|
||||||
|
|
||||||
.. _working-with-repositories:
|
|
||||||
|
|
||||||
Working with repositories
|
Working with repositories
|
||||||
-------------------------
|
-------------------------
|
||||||
@ -33,19 +28,19 @@ rerun
|
|||||||
|
|
||||||
::
|
::
|
||||||
|
|
||||||
make update
|
make update
|
||||||
|
|
||||||
`make update` also applies the patches that can be found in the directories found in
|
`make update` also applies the patches that can be found in the directories found in
|
||||||
`patches`; the resulting branch will be called `patched`, while the commit specified in `modules`
|
`patches`; the resulting branch will be called `patched`, while the commit specified in `modules`
|
||||||
can be referred to by the branch `base`.
|
can be refered to by the branch `base`.
|
||||||
|
|
||||||
After new patches have been committed on top of the `patched` branch (or existing commits
|
After new patches have been commited on top of the `patched` branch (or existing commits
|
||||||
since the base commit have been edited or removed), the patch directories can be regenerated
|
since the base commit have been edited or removed), the patch directories can be regenerated
|
||||||
using
|
using
|
||||||
|
|
||||||
::
|
::
|
||||||
|
|
||||||
make update-patches
|
make update-patches
|
||||||
|
|
||||||
If applying a patch fails because you have changed the base commit, the repository will be reset to the old `patched` branch
|
If applying a patch fails because you have changed the base commit, the repository will be reset to the old `patched` branch
|
||||||
and you can try rebasing it onto the new `base` branch yourself and after that call `make update-patches` to fix the problem.
|
and you can try rebasing it onto the new `base` branch yourself and after that call `make update-patches` to fix the problem.
|
||||||
@ -53,33 +48,18 @@ and you can try rebasing it onto the new `base` branch yourself and after that c
|
|||||||
Always call `make update-patches` after making changes to a module repository as `make update` will overwrite your
|
Always call `make update-patches` after making changes to a module repository as `make update` will overwrite your
|
||||||
commits, making `git reflog` the only way to recover them!
|
commits, making `git reflog` the only way to recover them!
|
||||||
|
|
||||||
::
|
|
||||||
|
|
||||||
make refresh-patches
|
|
||||||
|
|
||||||
In order to refresh patches when updating feeds or the OpenWrt base, `make refresh-patches` applies and updates all of their patches without installing feed packages to the OpenWrt build system.
|
|
||||||
|
|
||||||
This command speeds up the maintenance of updating OpenWrt and feeds.
|
|
||||||
|
|
||||||
Development Guidelines
|
Development Guidelines
|
||||||
----------------------
|
----------------------
|
||||||
Lua should be used instead of sh whenever sensible. The following criteria
|
lua should be used instead of sh whenever sensible. The following criteria
|
||||||
should be considered:
|
should be considered:
|
||||||
|
|
||||||
- Is the script doing more than just executing external commands? if so, use Lua
|
- Is the script doing more than just executing external commands? if so, use lua
|
||||||
- Is the script parsing/editing json-data? If so, use Lua for speed
|
- Is the script parsing/editing json-data? If so, use lua for speed
|
||||||
- When using sh, use jsonfilter instead of json_* functions for speed
|
- When using sh, use jsonfilter instead of json_* functions for speed
|
||||||
|
|
||||||
Code formatting may sound like a topic for the pedantic, however it helps if
|
Code formatting may sound like a topic for the pedantic, however it helps if
|
||||||
the code in the project is formatted in the same way. The following basic rules
|
the code in the project is formatted in the same way. The following rules
|
||||||
apply:
|
apply:
|
||||||
|
|
||||||
- use tabs instead of spaces
|
- use tabs instead of spaces
|
||||||
- trailing whitespaces must be eliminated
|
- trailing whitespaces must be eliminated
|
||||||
- files need to end with a final newline
|
|
||||||
- newlines need to have Unix line endings (lf)
|
|
||||||
|
|
||||||
To that end we provide a ``.editorconfig`` configuration, which is supported by most
|
|
||||||
of the editors out there.
|
|
||||||
|
|
||||||
If you add Lua scripts to gluon, check formatting with ``luacheck``.
|
|
||||||
|
@ -1,104 +0,0 @@
|
|||||||
Build system
|
|
||||||
============
|
|
||||||
|
|
||||||
This page explains internals of the Gluon build system. It is currently very
|
|
||||||
incomplete; please contribute if you can!
|
|
||||||
|
|
||||||
Feed management
|
|
||||||
---------------
|
|
||||||
|
|
||||||
Rather that relying on the *feed.conf* mechanism of OpenWrt directly, Gluon
|
|
||||||
manages its feeds (*"modules"*) using a collection of scripts. This solution was
|
|
||||||
selected for multiple reasons:
|
|
||||||
|
|
||||||
- Feeds lists from Gluon base and the site repository are combined
|
|
||||||
- Patchsets are applied to downloaded feed repositories automatically
|
|
||||||
|
|
||||||
The following variables specifically affect the feed management:
|
|
||||||
|
|
||||||
GLUON_FEEDS
|
|
||||||
List of base feeds; defined in file *modules* in Gluon base
|
|
||||||
|
|
||||||
GLUON_SITE_FEED
|
|
||||||
List of site feeds; defined in file *modules* in site config
|
|
||||||
|
|
||||||
\*_REPO, \*_BRANCH, \*_COMMIT
|
|
||||||
Git repository URL, branch and
|
|
||||||
commit ID of the feeds to use. The branch name may be omitted; the default
|
|
||||||
branch will be used in this case.
|
|
||||||
|
|
||||||
GLUON_BASE_FEEDS
|
|
||||||
Additional feed definitions to be added to *feeds.conf*
|
|
||||||
verbatim. By default, this contains a reference to the Gluon base packages;
|
|
||||||
when using the Gluon build system to build a non-Gluon system, the variable
|
|
||||||
can be set to the empty string.
|
|
||||||
|
|
||||||
Helper scripts
|
|
||||||
--------------
|
|
||||||
|
|
||||||
Several tasks of the build process have been separated from the Makefile into
|
|
||||||
external scripts, which are stored in the *scripts* directory. This was done to
|
|
||||||
ease maintenance of these scripts and the Makefile, by avoiding a lot of escaping.
|
|
||||||
These scripts are either bash or Lua scripts that run on the build system.
|
|
||||||
|
|
||||||
default_feeds.sh
|
|
||||||
Defines the constant ``DEFAULT_FEEDS`` with the names of all feeds listed in
|
|
||||||
*openwrt/feeds.conf.default*. This script is only used as an include by other
|
|
||||||
scripts.
|
|
||||||
|
|
||||||
feeds.sh
|
|
||||||
Creates the *openwrt/feeds.conf* file from ``FEEDS`` and ``DEFAULT_FEEDS``. The
|
|
||||||
feeds from ``FEEDS`` are linked to the matching subfolder of *packages/* and not
|
|
||||||
explicitly defined feeds of ``DEFAULT_FEEDS`` are setup as dummy (src-dummy).
|
|
||||||
This *openwrt/feeds.conf* is used to reinstall all packages of all feeds with
|
|
||||||
the *openwrt/scripts/feeds* tool.
|
|
||||||
|
|
||||||
modules.sh
|
|
||||||
Defines the constants ``GLUON_MODULES`` and ``FEEDS`` by reading the *modules*
|
|
||||||
files of the Gluon repository root and the site configuration. The returned
|
|
||||||
variables look like:
|
|
||||||
|
|
||||||
- ``FEEDS``: "*feedA feedB ...*"
|
|
||||||
- ``GLUON_MODULES``: "*openwrt packages/feedA packages/feedB ...*"
|
|
||||||
|
|
||||||
This script is only used as an include by other scripts.
|
|
||||||
|
|
||||||
patch.sh
|
|
||||||
(Re-)applies the patches from the *patches* directory to all ``GLUON_MODULES``
|
|
||||||
and checks out the files to the filesystem.
|
|
||||||
This is done for each repo by:
|
|
||||||
|
|
||||||
- creating a temporary clone of the repo to patch
|
|
||||||
- only branch *base* is used
|
|
||||||
- applying all patches via *git am* on top of this temporary *base* branch
|
|
||||||
- this branch is named *patched*
|
|
||||||
- copying the temporary clone to the *openwrt* (for OpenWrt Base) or
|
|
||||||
*packages* (for feeds) folder
|
|
||||||
- *git fetch* is used with the temporary clone as source
|
|
||||||
- *git checkout* is called to update the filesystem
|
|
||||||
- updating all git submodules
|
|
||||||
|
|
||||||
This solution with a temporary clone ensures that the timestamps of checked
|
|
||||||
out files are not changed by any intermediate patch steps, but only when
|
|
||||||
updating the checkout with the final result. This avoids triggering unnecessary
|
|
||||||
rebuilds.
|
|
||||||
|
|
||||||
update.sh
|
|
||||||
Sets up a working clone of the ``GLUON_MODULES`` (external repos) from the external
|
|
||||||
source and installs it into *packages/* directory. It simply tries to set the *base*
|
|
||||||
branch of the cloned repo to the correct commit. If this fails it fetches the
|
|
||||||
upstream branch and tries again to set the local *base* branch.
|
|
||||||
|
|
||||||
getversion.sh
|
|
||||||
Used to determine the version numbers of the repositories of Gluon and the
|
|
||||||
site configuration, to be included in the built firmware images as
|
|
||||||
*/lib/gluon/gluon-version* and */lib/gluon/site-version*.
|
|
||||||
|
|
||||||
By default, this uses ``git describe`` to generate a version number based
|
|
||||||
on the last git tag. This can be overridden by putting a file called
|
|
||||||
*.scmversion* into the root of the respective repositories.
|
|
||||||
|
|
||||||
A command like ``rm -f .scmversion; echo "$(./scripts/getversion.sh .)" > .scmversion``
|
|
||||||
can be used before applying local patches to ensure that the reported
|
|
||||||
version numbers refer to an upstream commit ID rather than an arbitrary
|
|
||||||
local one after ``git am``.
|
|
@ -1,51 +0,0 @@
|
|||||||
Debugging
|
|
||||||
=========
|
|
||||||
|
|
||||||
|
|
||||||
.. _dev-debugging-kernel-oops:
|
|
||||||
|
|
||||||
Kernel Oops
|
|
||||||
-----------
|
|
||||||
|
|
||||||
Sometimes a running Linux kernel detects an error during runtime that can't
|
|
||||||
be corrected.
|
|
||||||
This usually generates a stack trace that points to the location in the code
|
|
||||||
that caused the oops.
|
|
||||||
|
|
||||||
Linux kernels in Gluon (and OpenWrt) are stripped.
|
|
||||||
That means they do not contain any debug symbols.
|
|
||||||
On one hand this leads to a smaller binary and faster loading times on the
|
|
||||||
target.
|
|
||||||
On the other hand this means that in a case of a stack trace the unwinder
|
|
||||||
can only print memory locations and no further debugging information.
|
|
||||||
|
|
||||||
Gluon stores a compressed kernel with debug symbols for every target
|
|
||||||
in the directory `output/debug/`.
|
|
||||||
These kernels should be kept along with the images as long as the images
|
|
||||||
are in use.
|
|
||||||
This allows the developer to analyse a stack trace later.
|
|
||||||
|
|
||||||
Decoding Stacktraces
|
|
||||||
....................
|
|
||||||
|
|
||||||
The tooling is contained in the kernel source tree in the file
|
|
||||||
`decode_stacktrace.sh <https://github.com/torvalds/linux/blob/master/scripts/decode_stacktrace.sh>`__.
|
|
||||||
This file and the needed source tree are available in the directory: ::
|
|
||||||
|
|
||||||
openwrt/build_dir/target-<architecture>/linux-<architecture>/linux-<version>/
|
|
||||||
|
|
||||||
.. note::
|
|
||||||
Make sure to use a kernel tree that matches the version and patches
|
|
||||||
that was used to build the kernel.
|
|
||||||
If in doubt just re-build the images for the target.
|
|
||||||
|
|
||||||
Some more information on how to use this tool can be found at
|
|
||||||
`LWN <https://lwn.net/Articles/592724/>`__.
|
|
||||||
|
|
||||||
Obtaining Stacktraces
|
|
||||||
.....................
|
|
||||||
|
|
||||||
On many targets stack traces can be read from the following
|
|
||||||
location after reboot: ::
|
|
||||||
|
|
||||||
/sys/kernel/debug/crashlog
|
|
@ -1,238 +1,142 @@
|
|||||||
Adding hardware support
|
Adding support for new hardware
|
||||||
=======================
|
===============================
|
||||||
This page will give a short overview on how to add support
|
This page will give a short overview on how to add support
|
||||||
for new hardware to Gluon.
|
for new hardware to Gluon.
|
||||||
|
|
||||||
Hardware requirements
|
Hardware requirements
|
||||||
---------------------
|
---------------------
|
||||||
Having an ath9k, ath10k or mt76 based WLAN adapter is highly recommended,
|
Having an ath9k (or ath10k) based WLAN adapter is highly recommended,
|
||||||
although other chipsets may also work. VAP (multiple SSID) support
|
although other chipsets may also work. VAP (multiple SSID) support
|
||||||
with simultaneous AP + Mesh Point (802.11s) operation is required.
|
is a requirement. At the moment, Gluon's scripts can't handle devices
|
||||||
|
without WLAN adapters (although such environments may also be interesting,
|
||||||
|
e.g. for automated testing in virtual machines).
|
||||||
|
|
||||||
Device checklist
|
|
||||||
----------------
|
|
||||||
The description of pull requests adding device support must include the
|
|
||||||
`device integration checklist
|
|
||||||
<https://github.com/freifunk-gluon/gluon/wiki/Device-Integration-checklist>`_.
|
|
||||||
The checklist ensures that core functionality of Gluon is well supported on the
|
|
||||||
device.
|
|
||||||
|
|
||||||
.. _device-class-definition:
|
.. _hardware-adding-profiles:
|
||||||
|
|
||||||
Device classes
|
Adding profiles
|
||||||
--------------
|
---------------
|
||||||
All supported hardware is categorized into "device classes". This allows to
|
The vast majority of devices with ath9k WLAN uses the ar71xx target of LEDE.
|
||||||
adjust the feature set of Gluon to the different hardware's capabilities via
|
If the hardware you want to add support for is also ar71xx, adding a new profile
|
||||||
``site.mk`` without having to list individual devices.
|
is enough.
|
||||||
|
|
||||||
There are currently two devices classes defined: "standard" and "tiny". The
|
Profiles are defined in ``targets/*`` in a shell-based DSL (so common shell
|
||||||
"tiny" class contains all devices that do not meet the following requirements:
|
commands syntax like ``if`` can be used.
|
||||||
|
|
||||||
- At least 7 MiB of usable firmware space
|
The ``device`` command is used to define an image build for a device. It takes
|
||||||
- At least 64 MiB of RAM (128MiB for devices with ath10k radio)
|
two or three parameters.
|
||||||
|
|
||||||
Target configuration
|
The first parameter defines the Gluon profile name, which is used to refer to the
|
||||||
--------------------
|
device and is part of the generated image name. The profile name must be same as
|
||||||
Gluon's hardware support is based on OpenWrt's. For each supported target,
|
the output of the following command (on the target device), so the autoupdater
|
||||||
a configuration file exists at ``targets/<target>-<subtarget>`` (or just
|
can work::
|
||||||
``target/<target>`` for targets without subtargets) that contains all
|
|
||||||
Gluon-specific settings for the target. The generic configuration
|
|
||||||
``targets/generic`` contains settings that affect all targets.
|
|
||||||
|
|
||||||
All targets must be listed in ``target/targets.mk``.
|
lua -e 'print(require("platform_info").get_image_name())'
|
||||||
|
|
||||||
The target configuration language is based on Lua, so Lua's syntax for variables
|
The second parameter defines the name of the image files generated by LEDE. Usually,
|
||||||
and control structures can be used.
|
it is also the LEDE profile name; for devices that still use the old image build
|
||||||
|
code, a third parameter with the LEDE profile name can be passed. The profile names
|
||||||
|
can be found in the image Makefiles in ``lede/target/linux/<target>/image/Makefile``.
|
||||||
|
|
||||||
Device definitions
|
Examples::
|
||||||
~~~~~~~~~~~~~~~~~~
|
|
||||||
To configure a device to be built for Gluon, the ``device`` function is used.
|
|
||||||
In the simplest case, only two arguments are passed, for example:
|
|
||||||
|
|
||||||
.. code-block:: lua
|
device tp-link-tl-wr1043n-nd-v1 tl-wr1043nd-v1
|
||||||
|
device alfa-network-hornet-ub hornet-ub HORNETUB
|
||||||
device('tp-link-tl-wdr3600-v1', 'tplink_tl-wdr3600-v1')
|
|
||||||
|
|
||||||
The first argument is the device name in Gluon, which is part of the output
|
|
||||||
image filename, and must correspond to the model string looked up by the
|
|
||||||
autoupdater. The second argument is the corresponding device profile name in
|
|
||||||
OpenWrt, as found in ``openwrt/target/linux/<target>/image/*``.
|
|
||||||
|
|
||||||
A table of additional settings can be passed as a third argument:
|
|
||||||
|
|
||||||
.. code-block:: lua
|
|
||||||
|
|
||||||
device('ubiquiti-edgerouter-x', 'ubnt_edgerouter-x', {
|
|
||||||
factory = false,
|
|
||||||
packages = {'-hostapd-mini'},
|
|
||||||
manifest_aliases = {
|
|
||||||
'ubnt-erx',
|
|
||||||
},
|
|
||||||
})
|
|
||||||
|
|
||||||
The supported additional settings are described in the following sections.
|
|
||||||
|
|
||||||
Suffixes and extensions
|
Suffixes and extensions
|
||||||
~~~~~~~~~~~~~~~~~~~~~~~
|
'''''''''''''''''''''''
|
||||||
For many targets, OpenWrt generates images with the suffixes
|
|
||||||
``-squashfs-factory.bin`` and ``-squashfs-sysupgrade.bin``. For devices with
|
|
||||||
different image names, is it possible to override the suffixes and extensions
|
|
||||||
using the settings ``factory``, ``factory_ext``, ``sysupgrade`` and
|
|
||||||
``sysupgrade_ext``, for example:
|
|
||||||
|
|
||||||
.. code-block:: lua
|
By default, image files are expected to have the extension ``.bin``. In addition,
|
||||||
|
the images generated by LEDE have a suffix before the extension that defaults to
|
||||||
|
``-squashfs-factory`` and ``-squashfs-sysupgrade``.
|
||||||
|
|
||||||
{
|
This can be changed using the ``factory`` and ``sysupgrade`` commands, either at
|
||||||
factory = '-squashfs-combined',
|
the top of the file to set the defaults for all images, or for a single image. There
|
||||||
factory_ext = '.img.gz',
|
are three forms with 0 to 2 arguments (all work with ``sysupgrade`` as well)::
|
||||||
sysupgrade = '-squashfs-combined',
|
|
||||||
sysupgrade_ext = '.img.gz',
|
|
||||||
}
|
|
||||||
|
|
||||||
Only settings that differ from the defaults need to be passed. ``factory`` and
|
factory SUFFIX .EXT
|
||||||
``sysupgrade`` can be set to ``false`` when no such images exist.
|
factory .EXT
|
||||||
|
factory
|
||||||
|
|
||||||
For some device types, there are multiple factory images with different
|
When only an extension is given, the default suffix is retained. When no arguments
|
||||||
extensions. ``factory_ext`` can be set to a table of strings to account for this
|
are given, this signals that no factory (or sysupgrade) image exists.
|
||||||
case:
|
|
||||||
|
|
||||||
.. code-block:: lua
|
Aliases
|
||||||
|
'''''''
|
||||||
|
|
||||||
{
|
Sometimes multiple models use the same LEDE images. In this case, the ``alias``
|
||||||
factory_ext = {'.img.gz', '.vmdk', '.vdi'},
|
command can be used to create symlinks and additional entries in the autoupdater
|
||||||
}
|
manifest for the alternative models.
|
||||||
|
|
||||||
TODO: Extra images
|
Standalone images
|
||||||
|
'''''''''''''''''
|
||||||
|
|
||||||
Aliases and manifest aliases
|
On targets without *per-device rootfs* support in LEDE, the commands described above
|
||||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
can't be used. Instead, ``factory_image`` and ``sysupgrade_image`` are used::
|
||||||
Sometimes multiple devices exist that use the same OpenWrt images. To make it
|
|
||||||
easier to find these images, the ``aliases`` setting can be used to define
|
|
||||||
additional device names. Gluon will create symlinks for these names in the
|
|
||||||
image output directory.
|
|
||||||
|
|
||||||
.. code-block:: lua
|
factory_image PROFILE IMAGE .EXT
|
||||||
|
sysupgrade_image PROFILE IMAGE .EXT
|
||||||
|
|
||||||
device('aruba-ap-303', 'aruba_ap-303', {
|
Again, the profile name must match the value printed by the aforementioned Lua
|
||||||
factory = false,
|
command. The image name must match the part between the target name and the extension
|
||||||
aliases = {'aruba-instant-on-ap11'},
|
as generated by LEDE and is to be omitted when no such part exists.
|
||||||
})
|
|
||||||
|
|
||||||
The aliased name will also be added to the autoupdate manifest, allowing upgrade
|
Packages
|
||||||
images to be found under the different name on targets that perform model name
|
''''''''
|
||||||
detection at runtime.
|
|
||||||
|
|
||||||
It is also possible to add alternative names to the autoupdater manifest without
|
The ``packages`` command takes an arbitrary number of arguments. Each argument
|
||||||
creating a symlink by using ``manifest_aliases`` instead of ``aliases``, which
|
defines an additional package to include in the images in addition to the default
|
||||||
should be done when the alternative name does not refer to a separate device.
|
package sets defined by LEDE. When a package name is prefixed by a minus sign, the
|
||||||
This is particularly useful to allow the autoupdater to work when the model name
|
packages are excluded instead.
|
||||||
changed between Gluon versions.
|
|
||||||
|
|
||||||
Package lists
|
The ``packages`` command may be used at the top of a target definition to modify
|
||||||
~~~~~~~~~~~~~
|
the default package list for all images, or just for a single device (when the
|
||||||
Gluon generates lists of packages that are installed in all images based on a
|
target supports *per-default rootfs*).
|
||||||
default list and the features and packages specified in the site configuration.
|
|
||||||
|
|
||||||
In addition, OpenWrt defines additional per-device package lists. These lists
|
|
||||||
may be modified in Gluon's device definitions, for example to include additional
|
|
||||||
drivers and firmware, or to remove unneeded software. Packages to remove are
|
|
||||||
prefixed with a ``-`` character.
|
|
||||||
|
|
||||||
For many ath10k-based devices, this is used to replace the "CT" variant of
|
Configuration
|
||||||
ath10k with the mainline-based version:
|
'''''''''''''
|
||||||
|
|
||||||
.. code-block:: lua
|
The ``config`` command allows to add arbitary target-specific LEDE configuration
|
||||||
|
to be emitted to ``.config``.
|
||||||
|
|
||||||
local ATH10K_PACKAGES_QCA9880 = {
|
Notes
|
||||||
'kmod-ath10k',
|
'''''
|
||||||
'-kmod-ath10k-ct',
|
|
||||||
'-kmod-ath10k-ct-smallbuffers',
|
|
||||||
'ath10k-firmware-qca988x',
|
|
||||||
'-ath10k-firmware-qca988x-ct',
|
|
||||||
}
|
|
||||||
device('openmesh-a40', 'openmesh_a40', {
|
|
||||||
packages = ATH10K_PACKAGES_QCA9880,
|
|
||||||
factory = false,
|
|
||||||
})
|
|
||||||
|
|
||||||
This example also shows how to define a local variable, allowing the package
|
On devices with multiple WLAN adapters, care must also be taken that the primary MAC address is
|
||||||
list to be reused for multiple devices.
|
configured correctly. ``/lib/gluon/core/sysconfig/primary_mac`` should contain the MAC address which
|
||||||
|
can be found on a label on most hardware; if it does not, ``/lib/gluon/upgrade/010-primary-mac``
|
||||||
|
in ``gluon-core`` might need a fix. (There have also been cases in which the address was incorrect
|
||||||
|
even on devices with only one WLAN adapter, in these cases a LEDE bug was the cause).
|
||||||
|
|
||||||
Device flags
|
|
||||||
~~~~~~~~~~~~
|
|
||||||
|
|
||||||
The settings ``class``, ``deprecated`` or ``broken`` should be set according to
|
Adding support for new hardware targets
|
||||||
the device support status. The default values are as follows:
|
---------------------------------------
|
||||||
|
|
||||||
.. code-block:: lua
|
Adding a new target is much more complex than adding a new profile. There are two basic steps
|
||||||
|
required for adding a new target:
|
||||||
|
|
||||||
{
|
Package adjustments
|
||||||
class = 'standard',
|
'''''''''''''''''''
|
||||||
deprecated = false,
|
|
||||||
broken = false,
|
|
||||||
}
|
|
||||||
|
|
||||||
- Device classes are described in :ref:`device-class-definition`
|
One package that may need adjustments for new targets is ``libplatforminfo`` (to be found in
|
||||||
- Broken devices are untested or do not meet our requirements as given by the
|
`packages/gluon/libs/libplatforminfo <https://github.com/freifunk-gluon/packages/tree/master/libs/libplatforminfo>`_).
|
||||||
device checklist
|
If the new platform works fine with the definitions found in ``default.c``, nothing needs to be done. Otherwise,
|
||||||
- Deprecated devices are slated for removal in a future Gluon version due to
|
create a definition for the added target or subtarget, either by symlinking one of the files in the ``templates``
|
||||||
hardware constraints
|
directory, or adding a new source file.
|
||||||
|
|
||||||
Global settings
|
On many targets, Gluon's network setup scripts (mainly in the package ``gluon-core``)
|
||||||
~~~~~~~~~~~~~~~
|
won't run correctly without some adjustments, so better double check that everything is fine there (and the files
|
||||||
There is a number of directives that can be used outside of a ``device()``
|
``primary_mac``, ``lan_ifname`` and ``wan_ifname`` in ``/lib/gluon/core/sysconfig/`` contain sensible values).
|
||||||
definition:
|
|
||||||
|
|
||||||
- ``include('filename')``: Include another file with global settings
|
Build system support
|
||||||
- ``config(key, value)``: Set a config symbol in OpenWrt's ``.config``. Value
|
''''''''''''''''''''
|
||||||
may be a string, number, boolean, or nil. Booleans and nil are used for
|
|
||||||
tristate symbols, where nil sets the symbol to ``m``.
|
|
||||||
- ``try_config(key, value)``: Like ``config()``, but do not fail if setting
|
|
||||||
the symbol is not possible (usually because its dependencies are not met)
|
|
||||||
- ``packages { 'package1', '-package2', ... }``: Define a list of packages to
|
|
||||||
add or remove for all devices of a target. Package lists passed to multiple
|
|
||||||
calls of ``packages`` will be aggregated.
|
|
||||||
- ``defaults { key = value, ... }``: Set default values for any of the
|
|
||||||
additional settings that can be passed to ``device()``.
|
|
||||||
|
|
||||||
Helper functions
|
A definition for the new target must be created under ``targets``, and it must be added
|
||||||
~~~~~~~~~~~~~~~~
|
to ``targets/targets.mk``. The ``GluonTarget`` macro takes one to three arguments:
|
||||||
The following helpers can be used in the target configuration:
|
the target name, the Gluon subtarget name (if the target has subtargets), and the
|
||||||
|
LEDE subtarget name (if it differs from the Gluon subtarget). The third argument
|
||||||
|
can be used to define multiple Gluon targets with different configuration for the
|
||||||
|
same LEDE target, like it is done for the ``ar71xx-tiny`` target.
|
||||||
|
|
||||||
- ``env.KEY`` allows to access environment variables
|
After this, is should be sufficient to call ``make GLUON_TARGET=<target>`` to build the images for the new target.
|
||||||
- ``istrue(value)`` returns true if the passed string is a positive number
|
|
||||||
(often used with ``env``, for example ``if istrue(env.GLUON_DEBUG) then ...``)
|
|
||||||
|
|
||||||
Hardware support in packages
|
|
||||||
----------------------------
|
|
||||||
In addition to the target configuration files, some device-specific changes may
|
|
||||||
be required in packages.
|
|
||||||
|
|
||||||
gluon-core
|
|
||||||
~~~~~~~~~~
|
|
||||||
- ``/lib/gluon/upgrade/010-primary-mac``: Override primary MAC address selection
|
|
||||||
|
|
||||||
Usually, the primary (label) MAC address is defined in OpenWrt's Device Trees.
|
|
||||||
For devices or targets where this is not the case, it is possible to specify
|
|
||||||
what interface to take the primary MAC address from in ``010-primary-mac``.
|
|
||||||
|
|
||||||
- ``/lib/gluon/upgrade/020-interfaces``: Override LAN/WAN interface assignment
|
|
||||||
|
|
||||||
On PoE-powered devices, the PoE input port should be "WAN".
|
|
||||||
|
|
||||||
- ``/usr/lib/lua/gluon/platform.lua``: Contains a list of outdoor devices
|
|
||||||
|
|
||||||
gluon-setup-mode
|
|
||||||
~~~~~~~~~~~~~~~~
|
|
||||||
- ``/lib/gluon/upgrade/320-setup-ifname``: Contains a list of devices that use
|
|
||||||
the WAN port for the config mode
|
|
||||||
|
|
||||||
On PoE-powered devices, the PoE input port should be used for the config
|
|
||||||
mode. This is handled correctly by default for outdoor devices listed in
|
|
||||||
``platform.lua``.
|
|
||||||
|
|
||||||
libplatforminfo
|
|
||||||
~~~~~~~~~~~~~~~
|
|
||||||
When adding support for a new target to Gluon, it may be necessary to adjust
|
|
||||||
libplatforminfo to define how autoupdater image names are derived from the
|
|
||||||
model name.
|
|
||||||
|
@ -10,9 +10,9 @@ Gluon tries to solve this issue by using a hash of the primary MAC address as a
|
|||||||
|
|
||||||
* 0: client0; WAN
|
* 0: client0; WAN
|
||||||
* 1: mesh0
|
* 1: mesh0
|
||||||
* 2: owe0
|
* 2: ibss0
|
||||||
* 3: wan_radio0 (private WLAN); batman-adv primary address
|
* 3: wan_radio0 (private WLAN); batman-adv primary address
|
||||||
* 4: client1; LAN
|
* 4: client1; LAN
|
||||||
* 5: mesh1
|
* 5: mesh1
|
||||||
* 6: owe1
|
* 6: ibss1
|
||||||
* 7: wan_radio1 (private WLAN); mesh VPN
|
* 7: wan_radio1 (private WLAN); mesh VPN
|
||||||
|
@ -1,214 +0,0 @@
|
|||||||
Package development
|
|
||||||
###################
|
|
||||||
|
|
||||||
Gluon packages are OpenWrt packages and follow the same rules described at https://openwrt.org/docs/guide-developer/packages.
|
|
||||||
|
|
||||||
Development workflow
|
|
||||||
====================
|
|
||||||
|
|
||||||
When you are developing packages, it often happens that you iteratively want to deploy
|
|
||||||
and verify the state your development. There are two ways to verify your changes:
|
|
||||||
|
|
||||||
1)
|
|
||||||
One way is to rebuild the complete firmware, flash it, configure it and verify your
|
|
||||||
development then. This usually takes at least a few minutes to get your changes
|
|
||||||
working so you can test them. Especially if you iterate a lot, this becomes tedious.
|
|
||||||
|
|
||||||
2)
|
|
||||||
Another way is to rebuild only the package you are currently working on and
|
|
||||||
to deploy this package to your test system. Here not even a reboot is required.
|
|
||||||
This makes iterating relatively fast. Your test system could be real hardware or
|
|
||||||
even a qemu in most cases.
|
|
||||||
|
|
||||||
Gluon provides scripts to enhance workflow 2). Here is an example illustrating
|
|
||||||
the workflow using these scripts:
|
|
||||||
|
|
||||||
.. code-block:: shell
|
|
||||||
|
|
||||||
# start a local qemu instance
|
|
||||||
contrib/run_qemu.sh output/images/factory/[...]-x86-64.img
|
|
||||||
|
|
||||||
# apply changes to the desired package
|
|
||||||
vi package/gluon-ebtables/files/etc/init.d/gluon-ebtables
|
|
||||||
|
|
||||||
# rebuild and push the package to the qemu instance
|
|
||||||
contrib/push_pkg.sh package/gluon-ebtables/
|
|
||||||
|
|
||||||
# test your changes
|
|
||||||
...
|
|
||||||
|
|
||||||
# do more changes
|
|
||||||
...
|
|
||||||
|
|
||||||
# rebuild and push the package to the qemu instance
|
|
||||||
contrib/push_pkg.sh package/gluon-ebtables/
|
|
||||||
|
|
||||||
# test your changes
|
|
||||||
...
|
|
||||||
|
|
||||||
(and so on...)
|
|
||||||
|
|
||||||
# see help of the script for more information
|
|
||||||
contrib/push_pkg.sh -h
|
|
||||||
...
|
|
||||||
|
|
||||||
Features of ``push_pkg.sh``:
|
|
||||||
|
|
||||||
* Works with compiled and non-compiled packages.
|
|
||||||
|
|
||||||
* This means it can be used in the development of C-code, Lua-Code and mostly any other code.
|
|
||||||
|
|
||||||
* Works with native OpenWrt and Gluon packages.
|
|
||||||
* Pushes to remote machines or local qemu instances.
|
|
||||||
* Pushes multiple packages in in one call if desired.
|
|
||||||
* Performs site.conf checks.
|
|
||||||
|
|
||||||
Implementation details of ``push_pkg.sh``:
|
|
||||||
|
|
||||||
* First, the script builds an opkg package using the OpenWrt build system.
|
|
||||||
* This package is pushed to a *target machine* using scp:
|
|
||||||
|
|
||||||
* By default the *target machine* is a locally running x86 qemu started using ``run_qemu.sh``.
|
|
||||||
* The *target machine* can also be remote machine. (See the cli switch ``-r``)
|
|
||||||
* Remote machines are not limited to a specific architecture. All architectures supported by gluon can be used as remote machines.
|
|
||||||
|
|
||||||
* Finally opkg is used to install/update the packages in the target machine.
|
|
||||||
|
|
||||||
* While doing this, it will not override ``/etc/config`` with package defaults by default. (See the cli switch ``-P``).
|
|
||||||
* While doing this, opkg calls the ``check_site.lua`` from the package as post_install script to validate the ``site.conf``. This means that the ``site.conf`` of the target machine is used for this validation.
|
|
||||||
|
|
||||||
Note that:
|
|
||||||
|
|
||||||
* ``push_pkg.sh`` does neither build nor push dependencies of the packages automatically. If you want to update dependencies, you must explicitly specify them to be pushed.
|
|
||||||
* If you add new packages, you must run ``make update config GLUON_TARGET=...``.
|
|
||||||
* You can change the gluon target of the target machine via ``make config GLUON_TARGET=...``.
|
|
||||||
* If you want to update the ``site.conf`` of the target machine, use ``push_pkg.sh package/gluon-site/``.
|
|
||||||
* Sometimes when things break, you can heal them by compiling a package with its dependencies: ``cd openwrt; make package/gluon-ebtables/clean; make package/gluon-ebtables/compile; cd ..``.
|
|
||||||
* You can exit qemu by pressing ``CTRL + a`` and ``c`` afterwards.
|
|
||||||
|
|
||||||
Gluon package makefiles
|
|
||||||
=======================
|
|
||||||
|
|
||||||
As many packages share the same or a similar structure, Gluon provides a ``package/gluon.mk`` that
|
|
||||||
can be included for common definitions. This file replaces OpenWrt's ``$(INCLUDE_DIR)/package.mk``;
|
|
||||||
it is usually included as ``include ../gluon.mk`` from Gluon core packages, or as
|
|
||||||
``include $(TOPDIR)/../package/gluon.mk`` from feeds.
|
|
||||||
|
|
||||||
Provided macros
|
|
||||||
***************
|
|
||||||
|
|
||||||
* *GluonBuildI18N* (arguments: *<source directory>*)
|
|
||||||
|
|
||||||
Converts the *.po* files for all enabled languages from the given source directory to
|
|
||||||
the binary *.lmo* format and stores them in ``$(PKG_BUILD_DIR)/i18n``.
|
|
||||||
|
|
||||||
* *GluonInstallI18N*
|
|
||||||
|
|
||||||
Install *.lmo* files from ``$(PKG_BUILD_DIR)/i18n`` to ``/lib/gluon/web/i18n`` in the
|
|
||||||
package install directory.
|
|
||||||
|
|
||||||
* *GluonSrcDiet* (arguments: *<source directory>*, *<destination directory>*)
|
|
||||||
|
|
||||||
Copies a directory tree, processing all files in it using *LuaSrcDiet*. The directory
|
|
||||||
tree should only contain Lua files.
|
|
||||||
|
|
||||||
* *GluonCheckSite* (arguments: *<source file>*)
|
|
||||||
|
|
||||||
Intended to be used in a package postinst script. It will use the passed Lua
|
|
||||||
snippet to verify package-specific site configuration.
|
|
||||||
|
|
||||||
* *BuildPackageGluon* (replaces *BuildPackage*)
|
|
||||||
|
|
||||||
Extends the *Package/<name>* definition with common defaults, sets the package
|
|
||||||
install script to the common *Gluon/Build/Install*, and automatically creates
|
|
||||||
a postinst script using *GluonCheckSite* if a ``check_site.lua`` is found in the
|
|
||||||
package directory.
|
|
||||||
|
|
||||||
Default build steps
|
|
||||||
*******************
|
|
||||||
|
|
||||||
These defaults greatly reduce the boilerplate in each package, but they can also
|
|
||||||
be confusing because of the many implicit behaviors depending on files in the
|
|
||||||
package directory. If any part of *Gluon/Build/Compile* or *Gluon/Build/Install*
|
|
||||||
does not work as intended for a package, the compile and install steps can
|
|
||||||
always be replaced or extended.
|
|
||||||
|
|
||||||
*Build/Compile* is set to *Gluon/Build/Compile* by default, which will
|
|
||||||
|
|
||||||
* run OpenWrt standard default commands (*Build/Compile/Default*) if a ``src/Makefile``
|
|
||||||
or ``src/CMakeLists.txt`` is found
|
|
||||||
* run *GluonSrcDiet* on all files in the ``luasrc`` directory
|
|
||||||
* run *GluonBuildI18N* if a ``i18n`` directory is found
|
|
||||||
|
|
||||||
*Package/<name>* defaults to *Gluon/Build/Install* for packages defined using
|
|
||||||
*BuildPackageGluon*, which will
|
|
||||||
|
|
||||||
* copy all files from ``$(PKG_INSTALL_DIR)`` into the package if ``$(PKG_INSTALL)`` is 1
|
|
||||||
* copy all files from ``files`` into the package
|
|
||||||
* copy all Lua files built from ``luasrc`` into the package
|
|
||||||
* installs ``$(PKG_BUILD_DIR)/respondd.so`` to ``/usr/lib/respondd/$(PKG_NAME).so`` if ``src/respondd.c`` exists
|
|
||||||
* installs compiled i18n *.lmo* files
|
|
||||||
|
|
||||||
Feature flags
|
|
||||||
=============
|
|
||||||
|
|
||||||
Feature flags provide a convenient way to define package selections without
|
|
||||||
making it necessary to list each package explicitly. The list of features to
|
|
||||||
enable for a Gluon build is set by the *GLUON_FEATURES* variable in *site.mk*.
|
|
||||||
|
|
||||||
The main feature flag definition file is ``package/features``, but each package
|
|
||||||
feed can provide additional definitions in a file called ``features`` at the root
|
|
||||||
of the feed repository.
|
|
||||||
|
|
||||||
Each flag *$flag* will include the package the name *gluon-$flag* by default.
|
|
||||||
The feature definition file can modify the package selection by adding or removing
|
|
||||||
packages when certain combinations of flags are set.
|
|
||||||
|
|
||||||
Feature definitions use Lua syntax. Two basic functions are defined:
|
|
||||||
|
|
||||||
* *feature(name, pkgs)*: Defines a new feature. *feature()* expects a feature
|
|
||||||
(flag) name and a list of packages to add or remove when the feature is
|
|
||||||
enabled.
|
|
||||||
|
|
||||||
* Defining a feature using *feature* replaces the default definition of
|
|
||||||
just including *gluon-$flag*.
|
|
||||||
* A package is removed when the package name is prefixed with a ``-`` (after
|
|
||||||
the opening quotation mark).
|
|
||||||
|
|
||||||
* *when(expr, pkgs)*: Adds or removes packages when a given logical expression
|
|
||||||
of feature flags is satisfied.
|
|
||||||
|
|
||||||
* *expr* is a logical expression composed of feature flag names (each prefixed
|
|
||||||
with an underscore before the opening quotation mark), logical operators
|
|
||||||
(*and*, *or*, *not*) and parentheses.
|
|
||||||
* Referencing a feature flag in *expr* has no effect on the default handling
|
|
||||||
of the flag. When no *feature()* entry for a flag exists, it will still
|
|
||||||
add *gluon-$flag* by default.
|
|
||||||
* *pkgs* is handled as for *feature()*.
|
|
||||||
|
|
||||||
Example::
|
|
||||||
|
|
||||||
feature('web-wizard', {
|
|
||||||
'gluon-config-mode-hostname',
|
|
||||||
'gluon-config-mode-geo-location',
|
|
||||||
'gluon-config-mode-contact-info',
|
|
||||||
'gluon-config-mode-outdoor',
|
|
||||||
})
|
|
||||||
|
|
||||||
when(_'web-wizard' and (_'mesh-vpn-fastd' or _'mesh-vpn-tunneldigger'), {
|
|
||||||
'gluon-config-mode-mesh-vpn',
|
|
||||||
})
|
|
||||||
|
|
||||||
feature('no-radvd', {
|
|
||||||
'-gluon-radvd',
|
|
||||||
})
|
|
||||||
|
|
||||||
|
|
||||||
This will
|
|
||||||
|
|
||||||
* disable the inclusion of the (non-existent) packages *gluon-web-wizard* and *gluon-no-radvd* when their
|
|
||||||
corresponding feature flags appear in *GLUON_FEATURES*
|
|
||||||
* enable four additional config mode packages when the *web-wizard* feature is enabled
|
|
||||||
* enable *gluon-config-mode-mesh-vpn* when both *web-wizard* and one
|
|
||||||
of *mesh-vpn-fastd* and *mesh-vpn-tunneldigger* are enabled
|
|
||||||
* disable the *gluon-radvd* package when *gluon-no-radvd* is enabled
|
|
@ -1,36 +0,0 @@
|
|||||||
gluon.site library
|
|
||||||
==================
|
|
||||||
|
|
||||||
The *gluon.site* library allows convenient access to the site configuration
|
|
||||||
from Lua scripts. Example:
|
|
||||||
|
|
||||||
.. code-block:: lua
|
|
||||||
|
|
||||||
local site = require 'gluon.site'
|
|
||||||
print(site.wifi24.ap.ssid())
|
|
||||||
|
|
||||||
The *site* object in this example does not directly represent the *site.conf* data structure;
|
|
||||||
instead, it is wrapped in a way that makes it more convenient to access deeply nested elements.
|
|
||||||
To access the underlying values, they must be unwrapped using the function call notation
|
|
||||||
(the ``()`` after ``site.wifi24.ap.ssid`` in the example).
|
|
||||||
|
|
||||||
The wrapper objects have two advantages over simple Lua tables:
|
|
||||||
|
|
||||||
* Accessing non-existing values is never an error: ``site.wifi24.ap.ssid()`` will simply
|
|
||||||
return *nil* if ``site.wifi24`` or ``site.wifi24.ap`` do not exist
|
|
||||||
* Default values: A default value can be passed to the unwrapping function call:
|
|
||||||
|
|
||||||
.. code-block:: lua
|
|
||||||
|
|
||||||
print(site.wifi24.ap.ssid('Default'))
|
|
||||||
|
|
||||||
will return *'Default'* instead of *nil* when the value is unset.
|
|
||||||
|
|
||||||
Note that *nil* values and unset values are equivalent in Lua.
|
|
||||||
|
|
||||||
A simple way to access the whole site configuration as a simple table
|
|
||||||
is to unwrap the top-level site object:
|
|
||||||
|
|
||||||
.. code-block:: lua
|
|
||||||
|
|
||||||
local site_table = site()
|
|
@ -23,7 +23,7 @@ Best practices
|
|||||||
This allows using the same code to create the initial configuration and upgrade configurations on upgrades.
|
This allows using the same code to create the initial configuration and upgrade configurations on upgrades.
|
||||||
|
|
||||||
* If it is unavoidable to run different code during the initial installation, the ``sysconfig.gluon_version`` variable
|
* If it is unavoidable to run different code during the initial installation, the ``sysconfig.gluon_version`` variable
|
||||||
can be checked. This variable is ``nil`` during the initial installation and contains the previously installed Gluon
|
can be checked. This variable is ``nil`` during the initial installation and contains the previously install Gluon
|
||||||
version otherwise.
|
version otherwise.
|
||||||
|
|
||||||
Script ordering
|
Script ordering
|
||||||
|
@ -1,22 +1,16 @@
|
|||||||
Uplink support
|
WAN support
|
||||||
==============
|
===========
|
||||||
|
|
||||||
As the WAN port of a node will be connected to a user's private network, it
|
As the WAN port of a node will be connected to a user's private network, it
|
||||||
is essential that the node only uses the WAN when it is absolutely necessary.
|
is essential that the node only uses the WAN when it is absolutely necessary.
|
||||||
There are two cases in which the WAN port is used:
|
There are two cases in which the WAN port is used:
|
||||||
|
|
||||||
* Mesh VPN (package ``gluon-mesh-vpn-fastd``)
|
* Mesh VPN (package ``gluon-mesh-vpn-fastd``
|
||||||
* DNS to resolve the VPN servers' addresses (package ``gluon-wan-dnsmasq``)
|
* DNS to resolve the VPN servers' addresses (package ``gluon-wan-dnsmasq``)
|
||||||
|
|
||||||
After the VPN connection has been established, the node should be able to reach
|
After the VPN connection has been established, the node should be able to reach
|
||||||
the mesh's DNS servers and use these for all other name resolution.
|
the mesh's DNS servers and use these for all other name resolution.
|
||||||
|
|
||||||
If a device has only a single Ethernet port (or group of ports), it will be
|
|
||||||
used as an uplink port even when it is not labelled as "WAN" by default. This
|
|
||||||
behavior can be controlled using the ``interfaces.single.default_roles``
|
|
||||||
site.conf option. It is also possible to alter the interface assignment after
|
|
||||||
installation by modifying ``/etc/config/gluon`` and running
|
|
||||||
``gluon-reconfigure``.
|
|
||||||
|
|
||||||
Routing tables
|
Routing tables
|
||||||
~~~~~~~~~~~~~~
|
~~~~~~~~~~~~~~
|
@ -2,7 +2,7 @@ Config Mode
|
|||||||
===========
|
===========
|
||||||
|
|
||||||
The `Config Mode` consists of several modules that provide a range of different
|
The `Config Mode` consists of several modules that provide a range of different
|
||||||
configuration options:
|
condiguration options:
|
||||||
|
|
||||||
gluon-config-mode-core
|
gluon-config-mode-core
|
||||||
This modules provides the core functionality for the config mode.
|
This modules provides the core functionality for the config mode.
|
||||||
|
@ -1,24 +1,18 @@
|
|||||||
Controllers
|
Controllers
|
||||||
===========
|
===========
|
||||||
|
|
||||||
Controllers live in the ``controller`` subdirectory of a gluon-web application
|
Controllers live in ``/lib/gluon/web/controller``. They define which pages ("routes")
|
||||||
(``/lib/gluon/config-mode/controller`` for the config mode,
|
exist under the ``/cgi-bin/gluon`` path, and what code is run when these pages are requested.
|
||||||
``/lib/gluon/status-page/controller`` for the status page). They define which pages ("routes")
|
|
||||||
exist under the application base URL, and what code is run when these pages are requested.
|
|
||||||
|
|
||||||
Controller scripts usually start with a *package* declaration, followed by calls
|
Controller scripts mostly consist of calls of the `entry` function, which each define
|
||||||
to the *entry* function, which each define one route:
|
one route:
|
||||||
|
|
||||||
.. code-block:: lua
|
.. code-block:: lua
|
||||||
|
|
||||||
package 'gluon-web-admin'
|
|
||||||
|
|
||||||
entry({"admin"}, alias("admin", "info"), _("Advanced settings"), 10)
|
entry({"admin"}, alias("admin", "info"), _("Advanced settings"), 10)
|
||||||
entry({"admin", "info"}, template("admin/info"), _("Information"), 1)
|
entry({"admin", "info"}, template("admin/info"), _("Information"), 1)
|
||||||
|
|
||||||
*package* defines the translation namespace for the titles of the defined
|
The entry function expects 4 arguments:
|
||||||
pages as well as the referenced views and models. The entry function expects 4
|
|
||||||
arguments:
|
|
||||||
|
|
||||||
- `path`: Components of the path to define a route for.
|
- `path`: Components of the path to define a route for.
|
||||||
|
|
||||||
@ -26,7 +20,6 @@ arguments:
|
|||||||
|
|
||||||
- `target`: Dispatcher for the route. See the following section for details.
|
- `target`: Dispatcher for the route. See the following section for details.
|
||||||
- `title`: Page title (also used in navigation). The underscore function is used
|
- `title`: Page title (also used in navigation). The underscore function is used
|
||||||
to mark the strings as translatable for ``i18n-scan.pl``.
|
|
||||||
|
|
||||||
- `order`: Sort index in navigation (defaults to 100)
|
- `order`: Sort index in navigation (defaults to 100)
|
||||||
|
|
||||||
@ -71,10 +64,11 @@ Useful functions:
|
|||||||
values for the given key.
|
values for the given key.
|
||||||
- *status* (*code*, *message*): Writes the HTTP status to the reply. Has no effect
|
- *status* (*code*, *message*): Writes the HTTP status to the reply. Has no effect
|
||||||
if a status has already been sent or non-header data has been written.
|
if a status has already been sent or non-header data has been written.
|
||||||
- *header* (*key*, *value*): Adds an HTTP header to the reply to be sent to
|
- *header* (*key*, *value*): Adds an HTTP header to the reply to be sent to to
|
||||||
the client. Has no effect when non-header data has already been written.
|
the client. Has no effect when non-header data has already been written.
|
||||||
- *prepare_content* (*mime*): Sets the *Content-Type* header to the given MIME
|
- *prepare_content* (*mime*): Sets the *Content-Type* header to the given MIME
|
||||||
type
|
type, potentially setting additional headers or modifying the MIME type to
|
||||||
|
accommodate browser quirks
|
||||||
- *write* (*data*, ...): Sends the given data to the client. If headers have not
|
- *write* (*data*, ...): Sends the given data to the client. If headers have not
|
||||||
been sent, it will be done before the data is written.
|
been sent, it will be done before the data is written.
|
||||||
|
|
||||||
@ -94,10 +88,9 @@ The template renderer
|
|||||||
The template renderer allows to render templates (views). The most useful functions
|
The template renderer allows to render templates (views). The most useful functions
|
||||||
are:
|
are:
|
||||||
|
|
||||||
- *render* (*view*, *scope*, *pkg*): Renders the given view, optionally passing a table
|
- *render* (*view*, *scope*): Renders the given view, optionally passing a table
|
||||||
with additional variables to make available in the template. The passed package
|
with additional variables to make available in the template.
|
||||||
defines the translation namespace.
|
- *render_string* (*str*, *scope*): Same as *render*, but the template is passed
|
||||||
- *render_string* (*str*, *scope*, *pkg*): Same as *render*, but the template is passed
|
|
||||||
directly instead of being loaded from the view directory.
|
directly instead of being loaded from the view directory.
|
||||||
|
|
||||||
The renderer functions are called in property syntax, for example:
|
The renderer functions are called in property syntax, for example:
|
||||||
|
@ -20,9 +20,8 @@ Internationalization support is available in all components (models, view and
|
|||||||
controllers) of *gluon-web*-based packages. Strings are translated using the *translate*,
|
controllers) of *gluon-web*-based packages. Strings are translated using the *translate*,
|
||||||
*_translate* and *translatef* functions (*translate* for static strings, *translatef*
|
*_translate* and *translatef* functions (*translate* for static strings, *translatef*
|
||||||
for printf-like formatted string; *_translate* works the same as *translate*, but
|
for printf-like formatted string; *_translate* works the same as *translate*, but
|
||||||
will return *nil* instead of the original string when no translation is available).
|
will return *nil* instead of the original string when no translation is available)
|
||||||
|
. In views, the special tags ``<%:...%>`` can be used to translate the contained string.
|
||||||
In views, the special tags ``<%:...%>`` can be used to translate the contained string.
|
|
||||||
|
|
||||||
Example from the *gluon-config-mode-geo-location* package:
|
Example from the *gluon-config-mode-geo-location* package:
|
||||||
|
|
||||||
@ -30,18 +29,6 @@ Example from the *gluon-config-mode-geo-location* package:
|
|||||||
|
|
||||||
local share_location = s:option(Flag, "location", translate("Show node on the map"))
|
local share_location = s:option(Flag, "location", translate("Show node on the map"))
|
||||||
|
|
||||||
Note that translations are *namespaced*: each package will only use its own
|
|
||||||
translation strings by default. For this purpose, the package name must by
|
|
||||||
specified in a package's controller. It is possible to access a different
|
|
||||||
translation package using the *i18n* function from models and view, which is
|
|
||||||
necessary when strings from the site configuration are used, or packages do not
|
|
||||||
have their own controller (which is the case for config mode wizard components).
|
|
||||||
|
|
||||||
.. code-block:: lua
|
|
||||||
|
|
||||||
local site_i18n = i18n 'gluon-site'
|
|
||||||
local msg = site_i18n._translate('gluon-config-mode:welcome')
|
|
||||||
|
|
||||||
Adding translation templates to Gluon packages
|
Adding translation templates to Gluon packages
|
||||||
----------------------------------------------
|
----------------------------------------------
|
||||||
|
|
||||||
@ -58,7 +45,7 @@ script in the ``contrib`` directory:
|
|||||||
|
|
||||||
The same command can be run again to update the template.
|
The same command can be run again to update the template.
|
||||||
|
|
||||||
In addition, the Makefile must be adjusted. Instead of OpenWrt's default *package.mk*,
|
In addition, some additions to the Makefile must be made. Instead of LEDE's default *package.mk*,
|
||||||
the Gluon version (``../gluon.mk`` for core packages) must be used. The i18n files must be installed
|
the Gluon version (``../gluon.mk`` for core packages) must be used. The i18n files must be installed
|
||||||
and PKG_CONFIG_DEPENDS must be added::
|
and PKG_CONFIG_DEPENDS must be added::
|
||||||
|
|
||||||
@ -105,5 +92,5 @@ Adding support for new languages
|
|||||||
--------------------------------
|
--------------------------------
|
||||||
|
|
||||||
A list of all languages supported by *gluon-web* can be found in ``package/gluon.mk``.
|
A list of all languages supported by *gluon-web* can be found in ``package/gluon.mk``.
|
||||||
New languages just need to be added to *GLUON_SUPPORTED_LANGS*, and a human-readable
|
New languages just need to be added to *GLUON_SUPPORTED_LANGS*, after a human-readable
|
||||||
language name must be defined.
|
language name has been defined in the same file.
|
||||||
|
@ -1,13 +1,8 @@
|
|||||||
Models
|
Models
|
||||||
======
|
======
|
||||||
|
|
||||||
Models are defined in the ``model`` subdirectory of a gluon-web application
|
Models are defined in ``/lib/gluon/web/model``. Each model defines one or more
|
||||||
(``/lib/gluon/config-mode/model`` for the config mode; the status
|
forms to display on a page, and how the submitted form data is handled.
|
||||||
page does not use any models). Model support is not part of the gluon-web core
|
|
||||||
anymore, but is provided by the *gluon-web-model* package.
|
|
||||||
|
|
||||||
Each model defines one or more forms to display on a page, and how the submitted
|
|
||||||
form data is handled.
|
|
||||||
|
|
||||||
Let's start with an example:
|
Let's start with an example:
|
||||||
|
|
||||||
@ -51,14 +46,14 @@ Classes and methods
|
|||||||
|
|
||||||
- *Form:write* ()
|
- *Form:write* ()
|
||||||
|
|
||||||
Is called after the form has been submitted (but only if the data is valid). It
|
Is called after the form has beed submitted (but only if the data is valid). It
|
||||||
is called last (after all options' *write* methods) and is usually used
|
is called last (after all options' *write* methods) and is usually used
|
||||||
to commit changed UCI packages.
|
to commit changed UCI packages.
|
||||||
|
|
||||||
The default implementation of *write* doesn't do anything, but it can be
|
The default implementation of *write* doesn't to anything, but it can be
|
||||||
overridden.
|
overridden.
|
||||||
|
|
||||||
- *Section* (usually instantiated through *Form:section*)
|
- *Section* (usually instanciated through *Form:section*)
|
||||||
|
|
||||||
- *Section:option* (*type*, *id*, *title*, *description*)
|
- *Section:option* (*type*, *id*, *title*, *description*)
|
||||||
|
|
||||||
|
@ -1,19 +1,14 @@
|
|||||||
Views
|
Views
|
||||||
=====
|
=====
|
||||||
|
|
||||||
The template parser reads views from the ``view`` subdirectory of a
|
The template parser reads views from ``/lib/gluon/web/view``. Writing own view
|
||||||
gluon-web application (``/lib/gluon/config-mode/view`` for the config mode,
|
should be avoided in favour of using :doc:`model` with their predefined views.
|
||||||
``lib/gluon/status-page/view`` for the status page).
|
|
||||||
Writing own views should usually be avoided in favour of using :doc:`model`
|
|
||||||
with their predefined views.
|
|
||||||
|
|
||||||
Views are partial HTML pages, with additional template tags that allow
|
Views are partial HTML pages, with additional template tags that allow
|
||||||
to embed Lua code and translation strings. The following tags are defined:
|
to embed Lua code and translation strings. The following tags are defined:
|
||||||
|
|
||||||
- ``<%`` ... ``%>`` evaluates the enclosed Lua expression.
|
- ``<%`` ... ``%>`` evaluates the enclosed Lua expression.
|
||||||
- ``<%|`` ... ``%>`` evaluates the enclosed Lua expression and prints its value.
|
- ``<%=`` ... ``%>`` evaluates the enclosed Lua expression and prints its value.
|
||||||
- ``<%=`` ... ``%>`` evaluates the enclosed Lua expression and prints its value
|
|
||||||
*without escaping HTML entities*. This is useful when the value contains HTML code.
|
|
||||||
- ``<%+`` ... ``%>`` includes another template.
|
- ``<%+`` ... ``%>`` includes another template.
|
||||||
- ``<%:`` ... ``%>`` translates the enclosed string using the loaded i18n catalog.
|
- ``<%:`` ... ``%>`` translates the enclosed string using the loaded i18n catalog.
|
||||||
- ``<%_`` ... ``%>`` translates the enclosed string *without escaping HTML entities*
|
- ``<%_`` ... ``%>`` translates the enclosed string *without escaping HTML entities*
|
||||||
@ -57,4 +52,4 @@ variables and functions should always be available for the embedded Lua code:
|
|||||||
Use ``node(unpack(request))`` to get the node for the current page.
|
Use ``node(unpack(request))`` to get the node for the current page.
|
||||||
- *pcdata* (*str*): Escapes HTML entities in the passed string.
|
- *pcdata* (*str*): Escapes HTML entities in the passed string.
|
||||||
- *urlencode* (*str*): Escapes the passed string for use in an URL.
|
- *urlencode* (*str*): Escapes the passed string for use in an URL.
|
||||||
- *translate*, *_translate*, *translatef* and *i18n*: see :doc:`i18n`
|
- *translate*, *_translate* and *translatef*: see :doc:`i18n`
|
||||||
|
@ -7,14 +7,11 @@ Building Images
|
|||||||
---------------
|
---------------
|
||||||
|
|
||||||
By default, the autoupdater is disabled (as it is usually not helpful to have unexpected updates
|
By default, the autoupdater is disabled (as it is usually not helpful to have unexpected updates
|
||||||
during development), but it can be enabled by setting the variable ``GLUON_AUTOUPDATER_ENABLED`` to ``1`` when building.
|
during development), but it can be enabled by setting the variable GLUON_BRANCH when building
|
||||||
It is also possible to override the default branch during build using the variable ``GLUON_AUTOUPDATER_BRANCH``.
|
to override the default branch set in the set in the site configuration.
|
||||||
|
|
||||||
If a default branch is set neither in *site.conf* nor via ``GLUON_AUTOUPDATER_BRANCH``, the default branch is
|
|
||||||
implementation-defined. Currently, the branch with the first name in alphabetical order is chosen.
|
|
||||||
|
|
||||||
A manifest file for the updater can be generated with `make manifest`. A signing script (using
|
A manifest file for the updater can be generated with `make manifest`. A signing script (using
|
||||||
``ecdsautils``) can be found in the `contrib` directory. When creating the manifest, the
|
``ecdsautils``) can by found in the `contrib` directory. When creating the manifest, the
|
||||||
``PRIORITY`` value may be defined by setting ``GLUON_PRIORITY`` on the command line or in ``site.mk``.
|
``PRIORITY`` value may be defined by setting ``GLUON_PRIORITY`` on the command line or in ``site.mk``.
|
||||||
|
|
||||||
``GLUON_PRIORITY`` defines the maximum number of days that may pass between releasing an update and installation
|
``GLUON_PRIORITY`` defines the maximum number of days that may pass between releasing an update and installation
|
||||||
@ -25,47 +22,20 @@ for updates hourly (at a random minute of the hour), but usually only updates du
|
|||||||
|
|
||||||
``GLUON_PRIORITY`` may be an integer or a decimal fraction.
|
``GLUON_PRIORITY`` may be an integer or a decimal fraction.
|
||||||
|
|
||||||
If ``GLUON_RELEASE`` is passed to ``make`` explicitly or it is generated dynamically
|
|
||||||
in ``site.mk``, care must be taken to pass the same ``GLUON_RELEASE`` to ``make manifest``,
|
|
||||||
as otherwise the generated manifest will be incomplete.
|
|
||||||
|
|
||||||
|
|
||||||
Manifest format
|
|
||||||
------------------------
|
|
||||||
|
|
||||||
The manifest starts with a short header, followed by the list of firmwares and signatures.
|
|
||||||
The header contains the following information:
|
|
||||||
|
|
||||||
.. code-block:: sh
|
|
||||||
|
|
||||||
BRANCH=stable
|
|
||||||
DATE=2020-10-07 00:00:00+02:00
|
|
||||||
PRIORITY=7
|
|
||||||
|
|
||||||
- ``BRANCH`` is the autoupdater branch name that needs to match the nodes configuration.
|
|
||||||
- ``DATE`` specifies when the time period for the update begins. Nodes will do their regular update during a random minute
|
|
||||||
between 4:00 and 4:59 am. Nodes might not always have a reliable NTP synchronization, which is why a fallback mechanism
|
|
||||||
exists, that checks for an update, and will execute if ``DATE`` is at least 24h in the past.
|
|
||||||
- ``PRIORITY`` can be configured as ``GLUON_PRIORITY`` when generating the manifest or in ``site.mk``, and defines
|
|
||||||
the number of days over which the update should be stretched out after ``DATE``. Nodes will calculate a probability
|
|
||||||
based on the time left to determine when to update.
|
|
||||||
|
|
||||||
|
|
||||||
Automated nightly builds
|
Automated nightly builds
|
||||||
------------------------
|
------------------------
|
||||||
|
|
||||||
A fully automated nightly build could use the following commands:
|
A fully automated nightly build could use the following commands:
|
||||||
|
|
||||||
.. code-block:: sh
|
::
|
||||||
|
|
||||||
git pull
|
git pull
|
||||||
# git -C site pull
|
(cd site && git pull)
|
||||||
make update
|
make update
|
||||||
make clean GLUON_TARGET=ath79-generic
|
make clean
|
||||||
NUM_CORES_PLUS_ONE=$(expr $(nproc) + 1)
|
NUM_CORES_PLUS_ONE=$(expr $(nproc) + 1)
|
||||||
make -j$NUM_CORES_PLUS_ONE GLUON_TARGET=ath79-generic GLUON_RELEASE=$GLUON_RELEASE \
|
make -j$NUM_CORES_PLUS_ONE GLUON_TARGET=ar71xx-generic GLUON_BRANCH=experimental
|
||||||
GLUON_AUTOUPDATER_BRANCH=experimental GLUON_AUTOUPDATER_ENABLED=1
|
make manifest GLUON_BRANCH=experimental
|
||||||
make manifest GLUON_RELEASE=$GLUON_RELEASE GLUON_AUTOUPDATER_BRANCH=experimental
|
|
||||||
contrib/sign.sh $SECRETKEY output/images/sysupgrade/experimental.manifest
|
contrib/sign.sh $SECRETKEY output/images/sysupgrade/experimental.manifest
|
||||||
|
|
||||||
rm -rf /where/to/put/this/experimental
|
rm -rf /where/to/put/this/experimental
|
||||||
@ -99,16 +69,16 @@ These commands can be used on a node:
|
|||||||
|
|
||||||
::
|
::
|
||||||
|
|
||||||
# Update with some probability
|
# Update with some probability
|
||||||
autoupdater
|
autoupdater
|
||||||
|
|
||||||
::
|
::
|
||||||
|
|
||||||
# Force update check, even when the updater is disabled
|
# Force update check, even when the updater is disabled
|
||||||
autoupdater -f
|
autoupdater -f
|
||||||
|
|
||||||
::
|
::
|
||||||
|
|
||||||
# If fallback is true the updater will perform an update only if the timespan
|
# If fallback is true the updater will perform an update only if the timespan
|
||||||
# PRIORITY days (as defined in the manifest) and another 24h have passed
|
# PRIORITY days (as defined in the manifest) and another 24h have passed
|
||||||
autoupdater --fallback
|
autoupdater --fallback
|
||||||
|
@ -14,13 +14,10 @@ Activating Config Mode
|
|||||||
----------------------
|
----------------------
|
||||||
|
|
||||||
Config Mode is automatically entered at the first boot. You can re-enter
|
Config Mode is automatically entered at the first boot. You can re-enter
|
||||||
Config Mode by pressing and holding the RESET/WPS/DECT button for about three
|
Config Mode by pressing and holding the RESET/WPS button for about three
|
||||||
seconds. The device should reboot (all LEDs will turn off briefly) and
|
seconds. The device should reboot (all LEDs will turn of briefly) and
|
||||||
Config Mode will be available.
|
Config Mode will be available.
|
||||||
|
|
||||||
If you have access to the console of the node, there is the
|
|
||||||
``gluon-enter-setup-mode`` command, which reboots a node into Config Mode.
|
|
||||||
|
|
||||||
|
|
||||||
Port Configuration
|
Port Configuration
|
||||||
------------------
|
------------------
|
||||||
|
@ -1,51 +0,0 @@
|
|||||||
DNS caching
|
|
||||||
===========
|
|
||||||
|
|
||||||
User experience may be greatly improved when dns is accelerated. Also, it
|
|
||||||
seems like a good idea to keep the number of packages being exchanged
|
|
||||||
between node and gateway as small as possible. In order to do this, a
|
|
||||||
DNS cache may be used on a node. The dnsmasq instance listening on port
|
|
||||||
53 on the node will be reconfigured to answer requests, use a list of
|
|
||||||
upstream servers and a specific cache size if the options listed below are
|
|
||||||
added to site.conf. Upstream servers are the DNS servers which are normally
|
|
||||||
used by the nodes to resolve hostnames (e.g. gateways/supernodes).
|
|
||||||
|
|
||||||
There are the following settings:
|
|
||||||
servers
|
|
||||||
cacheentries
|
|
||||||
|
|
||||||
To use the node's DNS server, both options should be set. The node will cache at
|
|
||||||
most 'cacheentries' many DNS records in RAM. The 'servers' list will be used to
|
|
||||||
resolve the received DNS queries if the request cannot be answered from
|
|
||||||
cache. Gateways should announce the "next node" address via DHCP and RDNSS (if
|
|
||||||
any). Note that not setting 'servers' here will lead to DNS not working: Once
|
|
||||||
the gateways all announce the "next node" address for DNS, there is no way for
|
|
||||||
nodes to automatically determine DNS servers. They have to be baked into the
|
|
||||||
firmware.
|
|
||||||
|
|
||||||
If these settings do not exist, the cache is not initialized and RAM usage will
|
|
||||||
not increase.
|
|
||||||
|
|
||||||
When next_node.name is set, an A record and an AAAA record for the
|
|
||||||
next-node IP address are placed in the dnsmasq configuration. This means that
|
|
||||||
the content of next_node.name may be resolved even without upstream connectivity.
|
|
||||||
It is suggested to use the same name as the DNS server provides:
|
|
||||||
e.g. nextnode.location.community.example.org (This way the name also works if a
|
|
||||||
client uses static DNS Servers). Hint: If next_node.name does not contain a dot
|
|
||||||
some browsers would open the searchpage instead.
|
|
||||||
|
|
||||||
::
|
|
||||||
|
|
||||||
dns = {
|
|
||||||
cacheentries = 5000,
|
|
||||||
servers = { '2001:db8::1', },
|
|
||||||
},
|
|
||||||
|
|
||||||
next_node = {
|
|
||||||
name = { 'nextnode.location.community.example.org', 'nextnode', 'nn' },
|
|
||||||
ip6 = '2001:db8:8::1',
|
|
||||||
ip4 = '198.51.100.1',
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
Each cache entry will occupy about 90 bytes of RAM.
|
|
26
docs/features/dns-forwarder.rst
Normal file
@ -0,0 +1,26 @@
|
|||||||
|
DNS forwarder
|
||||||
|
=============
|
||||||
|
|
||||||
|
A Gluon node can be configured to act as a DNS forwarder. Requests for the
|
||||||
|
next-node hostname can be answered locally, without querying the upstream
|
||||||
|
resolver.
|
||||||
|
|
||||||
|
**Note:** While this reduces answer time and allows to use the next-node
|
||||||
|
hostname without upstream connectivity, this feature should not be used for
|
||||||
|
next-node hostnames that are FQDN when the zone uses DNSSEC.
|
||||||
|
|
||||||
|
One or more upstream resolvers can be configured in the *dns.servers* setting.
|
||||||
|
When *next_node.name* is set, A and/or AAAA records for the next-node IP
|
||||||
|
addresses are placed in the dnsmasq configuration.
|
||||||
|
|
||||||
|
::
|
||||||
|
|
||||||
|
dns = {
|
||||||
|
servers = { '2001:db8::1', },
|
||||||
|
},
|
||||||
|
|
||||||
|
next_node = {
|
||||||
|
name = 'nextnode',
|
||||||
|
ip6 = '2001:db8:8::1',
|
||||||
|
ip4 = '198.51.100.1',
|
||||||
|
}
|
Before Width: | Height: | Size: 28 KiB |
@ -24,7 +24,7 @@ Information to be announced is currently split into three categories:
|
|||||||
interfaces. This data can be used to determine the network topology.
|
interfaces. This data can be used to determine the network topology.
|
||||||
|
|
||||||
All categories will have a ``node_id`` key. It should be used to
|
All categories will have a ``node_id`` key. It should be used to
|
||||||
relate data of different categories.
|
relate data of different catagories.
|
||||||
|
|
||||||
Accessing Node Information
|
Accessing Node Information
|
||||||
--------------------------
|
--------------------------
|
||||||
@ -33,7 +33,7 @@ There are two packages responsible for distribution of the information. For
|
|||||||
one, information is distributed across the mesh using alfred_. Information
|
one, information is distributed across the mesh using alfred_. Information
|
||||||
between neighbouring nodes is exchanged using `gluon-respondd`.
|
between neighbouring nodes is exchanged using `gluon-respondd`.
|
||||||
|
|
||||||
.. _alfred: https://www.open-mesh.org/projects/alfred
|
.. _alfred: http://www.open-mesh.org/projects/alfred
|
||||||
|
|
||||||
alfred (mesh bound)
|
alfred (mesh bound)
|
||||||
~~~~~~~~~~~~~~~~~~~
|
~~~~~~~~~~~~~~~~~~~
|
||||||
@ -47,7 +47,7 @@ installed. Please note that at least one alfred daemon is required to run as
|
|||||||
|
|
||||||
.. _alfred-json: https://github.com/ffnord/alfred-json
|
.. _alfred-json: https://github.com/ffnord/alfred-json
|
||||||
|
|
||||||
The following data types are used:
|
The following datatypes are used:
|
||||||
|
|
||||||
* `nodeinfo`: 158
|
* `nodeinfo`: 158
|
||||||
* `statistics`: 159
|
* `statistics`: 159
|
||||||
@ -97,15 +97,14 @@ In order to retrieve statistics data you could run:
|
|||||||
|
|
||||||
You can find more information about alfred in its README_.
|
You can find more information about alfred in its README_.
|
||||||
|
|
||||||
.. _README: https://git.open-mesh.org/alfred.git/blob_plain/refs/heads/master:/README.rst
|
.. _README: https://git.open-mesh.org/alfred.git/blob_plain/refs/heads/master:/README
|
||||||
|
|
||||||
gluon-respondd
|
gluon-respondd
|
||||||
~~~~~~~~~~~~~~
|
~~~~~~~~~~~~~~
|
||||||
|
|
||||||
`gluon-respondd` allows querying neighbouring nodes for their information.
|
`gluon-respondd` allows querying neighbouring nodes for their information.
|
||||||
It is a daemon listening on the multicast address ``ff02::2:1001`` on
|
It is a daemon listening on the multicast address ``ff02::2:1001`` on
|
||||||
UDP port 1001 on the mesh interface and on the multicast address
|
UDP port 1001 on both the bare mesh interfaces and `br-client`. Unicast
|
||||||
``ff05::2:1001`` on the `br-client` interface. Unicast
|
|
||||||
requests are supported as well.
|
requests are supported as well.
|
||||||
|
|
||||||
The supported requests are:
|
The supported requests are:
|
||||||
@ -118,13 +117,13 @@ The supported requests are:
|
|||||||
gluon-neighbour-info
|
gluon-neighbour-info
|
||||||
~~~~~~~~~~~~~~~~~~~~
|
~~~~~~~~~~~~~~~~~~~~
|
||||||
|
|
||||||
The program `gluon-neighbour-info` can be used to retrieve
|
The programm `gluon-neighbour-info` can be used to retrieve
|
||||||
information from other nodes.
|
information from other nodes.
|
||||||
|
|
||||||
::
|
::
|
||||||
|
|
||||||
gluon-neighbour-info -i bat0 \
|
gluon-neighbour-info -i wlan0 \
|
||||||
-p 1001 -d ff05:0:0:0:0:0:2:1001 \
|
-p 1001 -d ff02:0:0:0:0:0:2:1001 \
|
||||||
-r nodeinfo
|
-r nodeinfo
|
||||||
|
|
||||||
An optional timeout may be specified, e.g. `-t 5` (default: 3 seconds). See
|
An optional timeout may be specified, e.g. `-t 5` (default: 3 seconds). See
|
||||||
|
@ -1,274 +0,0 @@
|
|||||||
Multidomain Support
|
|
||||||
===================
|
|
||||||
|
|
||||||
Preamble
|
|
||||||
--------
|
|
||||||
|
|
||||||
There comes a time when a mesh network grows past sensible boundaries.
|
|
||||||
As broadcast traffic grows, mesh networks experience scaling issues and
|
|
||||||
using them becomes very unpleasant. An approach to solve this follows
|
|
||||||
the well-known “divide and conquer” paradigm and splits a large network
|
|
||||||
into multiple smaller networks. These smaller networks start with a
|
|
||||||
dedicated layer 2 network each, which are interconnected via their
|
|
||||||
gateways by layer 3 routing. Gluon is already field-tested handling a
|
|
||||||
single domain and the multidomain feature allows for the reconfiguration
|
|
||||||
of key parameters that decide which domain a node participates in,
|
|
||||||
without the need of a distinct set of firmware images for each mesh domain.
|
|
||||||
|
|
||||||
Overview
|
|
||||||
--------
|
|
||||||
|
|
||||||
Multidomain support allows to build a single firmware with multiple,
|
|
||||||
switchable domain configurations. The nomenclature is as follows:
|
|
||||||
|
|
||||||
- ``site``: an aggregate over multiple domains
|
|
||||||
- ``domain``: mesh network with connectivity parameters that prevent
|
|
||||||
accidental bridging with other domains
|
|
||||||
- ``domain code``: unique domain identifier
|
|
||||||
- ``domain name``: pretty name for a domain code
|
|
||||||
|
|
||||||
By default Gluon builds firmware with a single domain embedded into
|
|
||||||
``site.conf``. To use multiple domains, enable it in ``site.mk``:
|
|
||||||
|
|
||||||
::
|
|
||||||
|
|
||||||
GLUON_MULTIDOMAIN=1
|
|
||||||
|
|
||||||
In the site repository, create the ``domains/`` directory, which will
|
|
||||||
hold your domain configurations. Each domain configuration file is named
|
|
||||||
after its primary ``domain_code``, additional domain codes and names are
|
|
||||||
supported.
|
|
||||||
|
|
||||||
::
|
|
||||||
|
|
||||||
site/
|
|
||||||
|-- site.conf
|
|
||||||
|-- site.mk
|
|
||||||
|-- i18n/
|
|
||||||
|-- domains/
|
|
||||||
|-- alpha_centauri.conf
|
|
||||||
|-- beta_centauri.conf
|
|
||||||
|-- gamma_centauri.conf
|
|
||||||
|
|
||||||
The domain configuration ``alpha_centauri.conf`` could look like this.
|
|
||||||
|
|
||||||
::
|
|
||||||
|
|
||||||
{
|
|
||||||
domain_names = {
|
|
||||||
alpha_centauri = 'Alpha Centauri'
|
|
||||||
},
|
|
||||||
|
|
||||||
-- more domain specific config follows below
|
|
||||||
}
|
|
||||||
|
|
||||||
In this example “Alpha Centauri” is the user-visible ``domain_name`` for the
|
|
||||||
domain_code ``alpha_centauri``. Also note that the domain code
|
|
||||||
``alpha_centauri`` matches the filename ``alpha_centauri.conf``.
|
|
||||||
|
|
||||||
Additional domain codes/names can be added to ``domain_names``, which
|
|
||||||
are treated as aliases for the their domain configuration. Aliases can
|
|
||||||
be used to offer more fine-grained and well-recognizable domain choices
|
|
||||||
to users. Having multiple aliases on a single domain is a helpful
|
|
||||||
precursor to splitting the domain into even smaller blocks.
|
|
||||||
|
|
||||||
Furthermore you have to specify the ``default_domain`` in the ``site.conf``.
|
|
||||||
This domain is applied in following cases:
|
|
||||||
|
|
||||||
- When the config mode is skipped.
|
|
||||||
- When a domain is removed in a new firmware release, the default_domain
|
|
||||||
will be chosen then.
|
|
||||||
- When a user selects a wrong domain code via uci.
|
|
||||||
|
|
||||||
Please note, that this value is saved to uci, so changing the `default_domain`
|
|
||||||
value in the `site.conf` in a new firmware release only affects the actual
|
|
||||||
domain of a router, if and only if one of the above conditions matches.
|
|
||||||
|
|
||||||
|
|
||||||
Switching the domain
|
|
||||||
--------------------
|
|
||||||
|
|
||||||
Via commandline
|
|
||||||
^^^^^^^^^^^^^^^
|
|
||||||
|
|
||||||
::
|
|
||||||
|
|
||||||
gluon-switch-domain 'newdomaincode'
|
|
||||||
|
|
||||||
When the node is not in config mode, ``gluon-switch-domain`` will automatically
|
|
||||||
reboot the node by default. This can be suppressed by passing ``--no-reboot``::
|
|
||||||
|
|
||||||
gluon-switch-domain --no-reboot 'newdomaincode'
|
|
||||||
|
|
||||||
Switching the domain without reboot is currently **experimental**.
|
|
||||||
|
|
||||||
Via config mode
|
|
||||||
^^^^^^^^^^^^^^^
|
|
||||||
|
|
||||||
To allow switching the domain via config mode, add ``config-mode-domain-select``
|
|
||||||
to GLUON_FEATURES in site.mk.
|
|
||||||
|
|
||||||
|image0|
|
|
||||||
|
|
||||||
Allowed site variables
|
|
||||||
----------------------
|
|
||||||
|
|
||||||
Internally the site variables are merged from the ``site.conf`` and the
|
|
||||||
selected ``domain.conf``, so the most variables are also allowed in
|
|
||||||
``site.conf`` and in ``domain.conf``. But there are some exceptions,
|
|
||||||
which do not make sense in a domain or site specific way. The following
|
|
||||||
sections give an overview over variables that are only usable in either
|
|
||||||
site or domain context.
|
|
||||||
|
|
||||||
site.conf only variables
|
|
||||||
^^^^^^^^^^^^^^^^^^^^^^^^
|
|
||||||
|
|
||||||
- Used in as initial default values, when the firmware was just flashed
|
|
||||||
and/or the config mode is skipped, so they do not make sense in a
|
|
||||||
domain specific way:
|
|
||||||
|
|
||||||
- authorized_keys
|
|
||||||
- default_domain
|
|
||||||
- poe_passthrough
|
|
||||||
- interfaces.*.default_roles
|
|
||||||
- setup_mode.skip
|
|
||||||
- autoupdater.branch
|
|
||||||
- mesh_vpn.enabled
|
|
||||||
- mesh_vpn.pubkey_privacy
|
|
||||||
- mesh_vpn.bandwidth_limit
|
|
||||||
- mesh_vpn.bandwidth_limit.enabled
|
|
||||||
- mesh_vpn.bandwidth_limit.ingress
|
|
||||||
- mesh_vpn.bandwidth_limit.egress
|
|
||||||
|
|
||||||
- Variables that influence the appearance of the config mode,
|
|
||||||
domain-independent because they are relevant before a domain was selected.
|
|
||||||
|
|
||||||
- config_mode.geo_location.show_altitude
|
|
||||||
- config_mode.hostname.optional
|
|
||||||
- config_mode.remote_login
|
|
||||||
- config_mode.remote_login.show_password_form
|
|
||||||
- config_mode.remote_login.min_password_length
|
|
||||||
- hostname_prefix
|
|
||||||
- mesh_vpn.fastd.configurable
|
|
||||||
- roles.default
|
|
||||||
- roles.list
|
|
||||||
|
|
||||||
- Specific to a firmware build itself:
|
|
||||||
|
|
||||||
- site_code
|
|
||||||
- site_name
|
|
||||||
- autoupdater.branches.*.name
|
|
||||||
- autoupdater.branches.*.good_signatures
|
|
||||||
- autoupdater.branches.*.pubkeys
|
|
||||||
|
|
||||||
- We simply do not see any reason, why these variables could be helpful
|
|
||||||
in a domain specific way:
|
|
||||||
|
|
||||||
- mesh_vpn.fastd.syslog_level
|
|
||||||
- timezone
|
|
||||||
- regdom
|
|
||||||
|
|
||||||
domain.conf only variables
|
|
||||||
^^^^^^^^^^^^^^^^^^^^^^^^^^
|
|
||||||
|
|
||||||
- Obviously:
|
|
||||||
|
|
||||||
- domain_names
|
|
||||||
|
|
||||||
- a table of domain codes to domain names
|
|
||||||
``domain_names = { foo = 'Foo Domain', bar = 'Bar Domain', baz = 'Baz Domain' }``
|
|
||||||
|
|
||||||
- hide_domain
|
|
||||||
|
|
||||||
- prevents a domain name(s) from appearing in config mode, either
|
|
||||||
boolean or array of domain codes
|
|
||||||
|
|
||||||
- ``true``, ``false``
|
|
||||||
- ``{ 'foo', 'bar' }``
|
|
||||||
|
|
||||||
- Because each domain is considered a separate layer 2 network, these
|
|
||||||
values should be different in each domain:
|
|
||||||
|
|
||||||
- next_node.ip4
|
|
||||||
- next_node.ip6
|
|
||||||
- next_node.name
|
|
||||||
- prefix6
|
|
||||||
- prefix4
|
|
||||||
- extra_prefixes6
|
|
||||||
|
|
||||||
- To prevent accidental bridging of different domains, all meshing
|
|
||||||
technologies should be separated:
|
|
||||||
|
|
||||||
- domain_seed (wired mesh)
|
|
||||||
|
|
||||||
- must be a random value used to derive the vxlan id for wired meshing
|
|
||||||
|
|
||||||
- wifi*.mesh.id
|
|
||||||
- mesh_vpn.fastd.groups.*.peers.remotes
|
|
||||||
- mesh_vpn.fastd.groups.*.peers.key
|
|
||||||
- mesh_vpn.tunneldigger.brokers
|
|
||||||
|
|
||||||
- Clients consider WiFi networks sharing the same ESSID as if they were
|
|
||||||
the same L2 network and try to reconfirm and reuse previous
|
|
||||||
addressing. If multiple neighbouring domains shared the same ESSID,
|
|
||||||
the roaming experience of clients would degrade.
|
|
||||||
|
|
||||||
- wifi*.ap.ssid
|
|
||||||
|
|
||||||
- Some values should be only set in legacy domains and not in new domains.
|
|
||||||
|
|
||||||
- mesh.vxlan
|
|
||||||
|
|
||||||
- By default, this value is `true`. It should be only set to `false`
|
|
||||||
for one legacy domain, since vxlan prevents accidental wired
|
|
||||||
merges of domains. For old domains this value is still available
|
|
||||||
to keep compatibility between all nodes in one domain.
|
|
||||||
|
|
||||||
- next_node.mac
|
|
||||||
|
|
||||||
- For new domains, the default value should be used, since there is
|
|
||||||
no need for a special mac (or domain specific mac). For old domains
|
|
||||||
this value is still available to keep compatibility between all
|
|
||||||
nodes in one domain.
|
|
||||||
|
|
||||||
Example config
|
|
||||||
--------------
|
|
||||||
|
|
||||||
site.mk
|
|
||||||
^^^^^^^
|
|
||||||
|
|
||||||
.. literalinclude:: ../multidomain-site-example/site.mk
|
|
||||||
:language: makefile
|
|
||||||
|
|
||||||
site.conf
|
|
||||||
^^^^^^^^^
|
|
||||||
|
|
||||||
.. literalinclude:: ../multidomain-site-example/site.conf
|
|
||||||
:language: lua
|
|
||||||
|
|
||||||
domains/alpha_centauri.conf
|
|
||||||
^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
|
||||||
|
|
||||||
.. literalinclude:: ../multidomain-site-example/domains/alpha_centauri.conf
|
|
||||||
:language: lua
|
|
||||||
|
|
||||||
i18n/en.po
|
|
||||||
^^^^^^^^^^
|
|
||||||
|
|
||||||
.. literalinclude:: ../multidomain-site-example/i18n/en.po
|
|
||||||
:language: po
|
|
||||||
|
|
||||||
i18n/de.po
|
|
||||||
^^^^^^^^^^
|
|
||||||
|
|
||||||
.. literalinclude:: ../multidomain-site-example/i18n/de.po
|
|
||||||
:language: po
|
|
||||||
|
|
||||||
modules
|
|
||||||
^^^^^^^
|
|
||||||
|
|
||||||
.. literalinclude:: ../multidomain-site-example/modules
|
|
||||||
:language: makefile
|
|
||||||
|
|
||||||
|
|
||||||
.. |image0| image:: multidomain_configmode.gif
|
|
Before Width: | Height: | Size: 57 KiB |
@ -1,33 +1,20 @@
|
|||||||
Private WLAN
|
Private WLAN
|
||||||
============
|
============
|
||||||
|
|
||||||
It is possible to set up a private WLAN that bridges the uplink port and is separated from the mesh network.
|
It is possible to set up a private WLAN that bridges the WAN port and is seperated from the mesh network.
|
||||||
Please note that you should not enable Wired Mesh on the uplink port at the same time.
|
Please note that you should not enable ``mesh_on_wan`` simultaneously.
|
||||||
|
|
||||||
The private WLAN is encrypted using WPA2 by default. On devices with enough flash and a supported radio,
|
|
||||||
WPA3 or WPA2/WPA3 mixed-mode can be used instead of WPA2. For this to work, the ``wireless-encryption-wpa3``
|
|
||||||
feature has to be added to ``GLUON_FEATURES``.
|
|
||||||
|
|
||||||
It is recommended to enable IEEE 802.11w management frame protection for WPA2/WPA3 networks, however this
|
|
||||||
can lead to connectivity problems for older clients. In this case, management frame protection can be
|
|
||||||
made optional or completely disabled in the advanced settings tab.
|
|
||||||
|
|
||||||
The private WLAN can be enabled through the config mode if the package ``gluon-web-private-wifi`` is installed.
|
The private WLAN can be enabled through the config mode if the package ``gluon-web-private-wifi`` is installed.
|
||||||
You may also enable a private WLAN using the command line::
|
You may also enable a private WLAN using the command line::
|
||||||
|
|
||||||
RID=0
|
uci set wireless.wan_radio0=wifi-iface
|
||||||
SSID="privateWLANname"
|
uci set wireless.wan_radio0.device=radio0
|
||||||
KEY="yoursecret1337password"
|
uci set wireless.wan_radio0.network=wan
|
||||||
|
uci set wireless.wan_radio0.mode=ap
|
||||||
uci set wireless.wan_radio$RID=wifi-iface
|
uci set wireless.wan_radio0.encryption=psk2
|
||||||
uci set wireless.wan_radio$RID.device=radio$RID
|
uci set wireless.wan_radio0.ssid="$SSID"
|
||||||
uci set wireless.wan_radio$RID.network=wan
|
uci set wireless.wan_radio0.key="$KEY"
|
||||||
uci set wireless.wan_radio$RID.mode=ap
|
uci set wireless.wan_radio0.disabled=0
|
||||||
uci set wireless.wan_radio$RID.encryption=psk2
|
|
||||||
uci set wireless.wan_radio$RID.ssid="$SSID"
|
|
||||||
uci set wireless.wan_radio$RID.key="$KEY"
|
|
||||||
uci set wireless.wan_radio$RID.disabled=0
|
|
||||||
uci set wireless.wan_radio$RID.macaddr=$(lua -e "print(require('gluon.util').generate_mac(3+4*$RID))")
|
|
||||||
uci commit
|
uci commit
|
||||||
wifi
|
wifi
|
||||||
|
|
||||||
|
@ -2,8 +2,8 @@ Roles
|
|||||||
=====
|
=====
|
||||||
|
|
||||||
It is possible to define a set of roles you want to distinguish at backend side. One node can own one
|
It is possible to define a set of roles you want to distinguish at backend side. One node can own one
|
||||||
role which it will announce via respondd/announced inside the mesh. This will make it easier to differentiate
|
role which it will announce via alfred inside the mesh. This will make it easier to differentiate
|
||||||
nodes when parsing respondd data. E.g to count only **normal** nodes and not the gateways
|
nodes when parsing alfred data. E.g to count only **normal** nodes and not the gateways
|
||||||
or servers (nodemap). A lot of things are possible.
|
or servers (nodemap). A lot of things are possible.
|
||||||
|
|
||||||
For this the section ``roles`` in ``site.conf`` is needed::
|
For this the section ``roles`` in ``site.conf`` is needed::
|
||||||
@ -28,7 +28,7 @@ If you want node owners to change the defined roles via config-mode you can add
|
|||||||
|
|
||||||
The role is saved in ``gluon-node-info.system.role``. To change the role using command line do::
|
The role is saved in ``gluon-node-info.system.role``. To change the role using command line do::
|
||||||
|
|
||||||
uci set gluon-node-info.@system[0].role="$ROLE"
|
uci set gluon-node-info.system.role="$ROLE"
|
||||||
uci commit
|
uci commit
|
||||||
|
|
||||||
Please replace ``$ROLE`` by the role you want the node to own.
|
Please replace ``$ROLE`` by the role you want the node to own.
|
||||||
|
@ -1,212 +0,0 @@
|
|||||||
Mesh VPN
|
|
||||||
========
|
|
||||||
|
|
||||||
Gluon integrates several layer 2 tunneling protocols to
|
|
||||||
allow connections between local meshes through the internet.
|
|
||||||
|
|
||||||
Protocol handlers
|
|
||||||
^^^^^^^^^^^^^^^^^
|
|
||||||
|
|
||||||
There are currently three protocol handlers which can be selected
|
|
||||||
via ``GLUON_FEATURES`` in ``site.mk``:
|
|
||||||
|
|
||||||
mesh-vpn-fastd
|
|
||||||
""""""""""""""
|
|
||||||
|
|
||||||
fastd is a lightweight userspace tunneling daemon that
|
|
||||||
implements cipher suites that are specifically designed
|
|
||||||
to work well on embedded devices. It offers encryption
|
|
||||||
and authentication.
|
|
||||||
The primary drawback of fastd's encrypted connection modes
|
|
||||||
is the necessary context switches when forwarding packets.
|
|
||||||
A kernel-supported L2TPv3 offloading option is available to
|
|
||||||
work around the context-switching bottleneck, but it comes
|
|
||||||
at the cost of losing the ability to protect tunnel connections
|
|
||||||
against eavesdropping or manipulation.
|
|
||||||
|
|
||||||
mesh-vpn-tunneldigger
|
|
||||||
"""""""""""""""""""""
|
|
||||||
|
|
||||||
Tunneldigger always uses L2TPv3, generally achieving the same
|
|
||||||
performance as fastd with the ``null@l2tp`` method, but offering
|
|
||||||
no security.
|
|
||||||
Tunneldigger's primary drawback is the lack of IPv6 support.
|
|
||||||
It also provides less configurability than fastd.
|
|
||||||
|
|
||||||
mesh-vpn-wireguard
|
|
||||||
""""""""""""""""""
|
|
||||||
|
|
||||||
WireGuard is an encrypted in-kernel tunneling protocol that
|
|
||||||
provides encrypted transmission and at the same time offers
|
|
||||||
high throughput.
|
|
||||||
|
|
||||||
fastd
|
|
||||||
^^^^^
|
|
||||||
|
|
||||||
.. _VPN fastd methods:
|
|
||||||
|
|
||||||
Methods
|
|
||||||
"""""""
|
|
||||||
|
|
||||||
fastd offers various different connection "methods" with different
|
|
||||||
security properties that can be configured in the site configuration.
|
|
||||||
|
|
||||||
The following methods are currently recommended:
|
|
||||||
|
|
||||||
- ``salsa2012+umac``: Encrypted + authenticated
|
|
||||||
- ``null+salsa2012+umac``: Unencrypted, authenticated
|
|
||||||
- ``null@l2tp``: Unencrypted, unauthenticated
|
|
||||||
|
|
||||||
Multiple methods can be listed in ``site.conf``. The first listed method
|
|
||||||
supported by both the node and its peer will be used.
|
|
||||||
|
|
||||||
The use of the ``null@l2tp`` method with offloading enabled can provide a
|
|
||||||
considerable performance gain, especially on weaker embedded hardware.
|
|
||||||
For L2TP offloading, the ``mesh-vpn-fastd-l2tp`` feature needs to be enabled in
|
|
||||||
``site.mk``.
|
|
||||||
|
|
||||||
|
|
||||||
.. _vpn-gateway-configuration:
|
|
||||||
|
|
||||||
Gateway / Supernode Configuration
|
|
||||||
"""""""""""""""""""""""""""""""""
|
|
||||||
|
|
||||||
When only using the ``null`` or ``null@l2tp`` methods without offloading,
|
|
||||||
simply add these methods to the front of the method list. ``null@l2tp``
|
|
||||||
should always appear before ``null`` in the configuration when both are enabled.
|
|
||||||
fastd v22 or newer is needed for the ``null@l2tp`` method.
|
|
||||||
|
|
||||||
It is often not necessary to enable L2TP offloading on supernodes for
|
|
||||||
performance reasons. Nodes using offloading can communicate with supernodes that
|
|
||||||
don't use offloading as long as both use the ``null@l2tp`` method.
|
|
||||||
|
|
||||||
|
|
||||||
.. _vpn-gateway-configuration-offloading:
|
|
||||||
|
|
||||||
Offloading on Gateways / Supernodes
|
|
||||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
|
||||||
|
|
||||||
To enable L2TP offloading on the supornodes, it is recommended to study the
|
|
||||||
fastd documentation section pertaining to the `offload configuration option
|
|
||||||
<https://fastd.readthedocs.io/en/stable/manual/config.html#option-offload>`_.
|
|
||||||
|
|
||||||
However, the important changes to the fastd config on your Supernode are:
|
|
||||||
|
|
||||||
- | Set ``mode multitap;``
|
|
||||||
| Every peer gets their own interface.
|
|
||||||
|
|
||||||
- | Replace ``interface "foo":`` with ``interface "peer-%k";``
|
|
||||||
| ``%k`` is substituted for a portion of the peers public key.
|
|
||||||
|
|
||||||
- | Set ``offload l2tp yes;``
|
|
||||||
| This tells fastd to use the l2tp kernel module.
|
|
||||||
|
|
||||||
- | Set ``persist interface no;``
|
|
||||||
| This tells fastd to only keep interfaces around while the connection is active.
|
|
||||||
|
|
||||||
Note that in ``multitap`` mode, which is required when using L2TP offloading,
|
|
||||||
fastd will create one interface per peer on the supernode's. This allows
|
|
||||||
offloading the L2TP forwarding into the kernel space. But this also means added
|
|
||||||
complexity with regards to handling those interfaces.
|
|
||||||
|
|
||||||
There are two main options on how you can handle this:
|
|
||||||
|
|
||||||
- create ``on up`` and ``on down`` hooks
|
|
||||||
|
|
||||||
- to handle interface setup and destruction
|
|
||||||
- preferably using the async keyword, so hooks are not blocking fastd
|
|
||||||
|
|
||||||
- use a daemon like systemd-networkd
|
|
||||||
|
|
||||||
Examples for both options can be found in the
|
|
||||||
`Wiki <https://github.com/freifunk-gluon/gluon/wiki/fastd-l2tp-offloading-on-supernodes>`_.
|
|
||||||
|
|
||||||
Configurable Method
|
|
||||||
"""""""""""""""""""
|
|
||||||
|
|
||||||
From the site configuration, fastd can be allowed to offer
|
|
||||||
toggleable encryption in the config mode with the intent to
|
|
||||||
increase throughput.
|
|
||||||
|
|
||||||
There is also an older unprotected method ``null``. Use of the newer
|
|
||||||
``null@l2tp`` method is generally recommended over ``null``, as the
|
|
||||||
performance gains provided by the latter (compared to the encrypted
|
|
||||||
and authenticated methods) are very small.
|
|
||||||
|
|
||||||
Site configuration
|
|
||||||
~~~~~~~~~~~~~~~~~~
|
|
||||||
|
|
||||||
1)
|
|
||||||
Add the feature ``web-mesh-vpn-fastd`` in ``site.mk``
|
|
||||||
2)
|
|
||||||
Set ``mesh_vpn.fastd.configurable = true`` in ``site.conf``
|
|
||||||
3)
|
|
||||||
Optionally, add ``null@l2tp`` to the ``mesh_vpn.fastd.methods`` table if you want
|
|
||||||
"Performance mode" as default (not recommended)
|
|
||||||
|
|
||||||
Config Mode
|
|
||||||
~~~~~~~~~~~
|
|
||||||
|
|
||||||
The resulting firmware will allow users to choose between secure (encrypted) and fast (unencrypted) transport.
|
|
||||||
|
|
||||||
.. image:: fastd_mode.gif
|
|
||||||
|
|
||||||
To confirm whether the correct cipher is being used, the log output
|
|
||||||
of fastd can be checked using ``logread``.
|
|
||||||
|
|
||||||
WireGuard
|
|
||||||
^^^^^^^^^
|
|
||||||
|
|
||||||
In order to support WireGuard in Gluon, a few technologies are glued together.
|
|
||||||
|
|
||||||
**VXLAN:** As Gluon typically relies on batman-adv, the Mesh VPN has to provide
|
|
||||||
OSI Layer 2 transport. But WireGuard is an OSI Layer 3 tunneling protocol, so
|
|
||||||
additional technology is necessary here. For this, we use VXLAN. In short, VXLAN
|
|
||||||
is a well-known technology to encapsulate ethernet packages into IP packages.
|
|
||||||
You can think of it as kind of similar to VLAN, but on a different layer. Here,
|
|
||||||
we use VXLAN to transport batman-adv traffic over WireGuard.
|
|
||||||
|
|
||||||
**wgpeerselector**: To connect all gluon nodes to each other, it is common to
|
|
||||||
create a topology where each gluon node is connected to one of the available
|
|
||||||
gateways via Mesh VPN respectively. To achieve this, the gluon node should be
|
|
||||||
able to select a random gateway to connect to. But such "random selection of a
|
|
||||||
peer" is not implemented in WireGuard by default. WireGuard only knows static
|
|
||||||
peers. Therefore the *wgpeerselector* has been developed. It randomly selects a
|
|
||||||
gateway, tries to establish a connection, and if it fails, tries to connect
|
|
||||||
to the next gateway. This approach has several advantages, such as load
|
|
||||||
balancing VPN connection attempts and avoiding problems with offline gateways.
|
|
||||||
More information about the wgpeerselector and its algorithm can be found
|
|
||||||
`here <https://github.com/freifunk-gluon/packages/blob/master/net/wgpeerselector/README.md>`__.
|
|
||||||
|
|
||||||
On the gluon node both VXLAN and the wgpeerselector are well integrated and no
|
|
||||||
explicit configuration of those tools is necessary, once the general WireGuard
|
|
||||||
support has been configured.
|
|
||||||
|
|
||||||
Attention must by paid to time synchronization. As WireGuard
|
|
||||||
performs checks on timestamps in order to avoid replay attacks, time must
|
|
||||||
be synchronized before the Mesh VPN connection is established. This means that
|
|
||||||
the NTP servers specified in your site.conf must be publicly available (and not
|
|
||||||
only through the mesh). Be aware that if you fail this, you may not directly see
|
|
||||||
negative effects. Only when a previously connected node reboots the effect
|
|
||||||
comes into play, as the gateway still knows about the old timestamp of the gluon
|
|
||||||
node.
|
|
||||||
|
|
||||||
gluon-mesh-vpn-key-translate
|
|
||||||
""""""""""""""""""""""""""""
|
|
||||||
|
|
||||||
Many communities already possess a collection of active fastd-keys when they
|
|
||||||
plan migrating their community to WireGuard.
|
|
||||||
These public keys known on the server-side can be derived into their WireGuard
|
|
||||||
equivalent using `gluon-mesh-vpn-key-translate <https://github.com/AiyionPrime/gluon-mesh-vpn-key-translate>`__.
|
|
||||||
The routers do the necessary reencoding of the private key seamlessly
|
|
||||||
when updating firmware from fastd to the WireGuard variant.
|
|
||||||
|
|
||||||
Gateway / Supernode Configuration
|
|
||||||
"""""""""""""""""""""""""""""""""
|
|
||||||
|
|
||||||
On the gateway side, a software called *wireguard-vxlan-glue* is necessary. It
|
|
||||||
is a small daemon that dynamically adds and removes forwarding rules for VXLAN
|
|
||||||
interfaces, so traffic is sent correctly into the WireGuard interface. Thereby
|
|
||||||
the forwarding rules are only installed if a client is connected, so
|
|
||||||
unnecessary traffic in the kernel is avoided. The source can be found
|
|
||||||
`here <https://github.com/freifunkh/wireguard-vxlan-glue/>`__.
|
|
@ -1,5 +1,5 @@
|
|||||||
Wired mesh (Mesh-on-WAN/LAN)
|
Wired mesh (Mesh-on-WAN/LAN)
|
||||||
############################
|
============================
|
||||||
|
|
||||||
In addition to meshing over WLAN and VPN, it is also possible to
|
In addition to meshing over WLAN and VPN, it is also possible to
|
||||||
configure wired meshing over the LAN or WAN ports. This allows
|
configure wired meshing over the LAN or WAN ports. This allows
|
||||||
@ -11,123 +11,55 @@ Enabling Mesh-on-WAN should be avoided if the local network is also bridged with
|
|||||||
a WLAN access point, as meshing over batman-adv causes large amounts of
|
a WLAN access point, as meshing over batman-adv causes large amounts of
|
||||||
multicast traffic, which will take up a lot of airtime.
|
multicast traffic, which will take up a lot of airtime.
|
||||||
|
|
||||||
Enabling Mesh-on-LAN replaces the normal "client network" function
|
Enabling Mesh-on-LAN will replace the normal "client network" function
|
||||||
of the LAN ports, as client network ports may never be connected (so care must be taken to always
|
of the LAN ports, as client network ports may never be connected (so care must be taken to always
|
||||||
enable Mesh-on-LAN before connecting two nodes' LAN ports).
|
enable Mesh-on-LAN before connecting two nodes' LAN ports).
|
||||||
|
|
||||||
Wired mesh encapsulation
|
|
||||||
************************
|
|
||||||
|
|
||||||
Since version 2018.1, Gluon supports encapsulating wired mesh traffic in
|
|
||||||
`VXLAN <https://en.wikipedia.org/wiki/Virtual_Extensible_LAN>`_, a new standard with
|
|
||||||
use cases similar to VLANs, but a much greater ID space of 24bit; in addition, VXLAN
|
|
||||||
packets pass through VLAN-aware switches without any special configuration.
|
|
||||||
|
|
||||||
Encapsulating mesh traffic has two advantages:
|
|
||||||
|
|
||||||
* By using a different VXLAN ID for each site and mesh domain, accidental
|
|
||||||
wired mesh connections between nodes of different domains will be prevented.
|
|
||||||
This has special importance when nodes migrate between domains automatically,
|
|
||||||
as currently possible through different site-specific packages.
|
|
||||||
* While batman-adv traffic does not interact with non-mesh traffic in the same wired
|
|
||||||
network in any way (so Gluon nodes can mesh over existing wired networks), this is
|
|
||||||
not the case for layer 3 mesh protocols like Babel. Encapsulating the traffic allows
|
|
||||||
to distinguish mesh traffic from unrelated packets.
|
|
||||||
|
|
||||||
As enabling VXLAN encapsulation will prevent wired mesh communication with old nodes
|
|
||||||
that do not support VXLAN yet, VXLANs can be enabled per-domain using the site configuration
|
|
||||||
setting *mesh.vxlan*. VXLAN is enabled by default in multidomain setups; in single-domain
|
|
||||||
site configurations, the *mesh.vxlan* setting is mandatory. We recommend to enable
|
|
||||||
VXLAN encapsulation in all new sites and domains.
|
|
||||||
|
|
||||||
Non-encapsulated ("legacy") wired meshing will be removed in a future Gluon release.
|
|
||||||
We cannot give a concrete timeframe for the removal yet; a missing prerequisite is the
|
|
||||||
implementation of a robust migration path for existing deployments.
|
|
||||||
|
|
||||||
Configuration
|
Configuration
|
||||||
*************
|
~~~~~~~~~~~~~
|
||||||
|
|
||||||
Both Mesh-on-WAN and Mesh-on-LAN can be configured on the "Network" page
|
Both Mesh-on-WAN and Mesh-on-LAN can be configured on the "Network" page
|
||||||
of the *Advanced settings* (if the package ``gluon-web-network`` is installed).
|
of the *Advanced settings* (if the package ``gluon-web-network`` is installed).
|
||||||
|
|
||||||
It is also possible to enable Mesh-on-WAN and Mesh-on-LAN by default by adding
|
It is also possible to enable Mesh-on-WAN and Mesh-on-LAN by default by
|
||||||
the ``mesh`` role to the ``interfaces.*.default_roles`` options in your
|
adding ``mesh_on_wan = true`` and ``mesh_on_lan = true`` to ``site.conf``.
|
||||||
:ref:`site.conf<user-site-interfaces>`.
|
|
||||||
|
Commandline configuration
|
||||||
|
-------------------------
|
||||||
|
|
||||||
|
Mesh-on-WAN
|
||||||
|
...........
|
||||||
|
|
||||||
|
It's possible to enable Mesh-on-WAN like this::
|
||||||
|
|
||||||
|
uci set network.mesh_wan.auto=1
|
||||||
|
uci commit network
|
||||||
|
|
||||||
|
It may be disabled by running::
|
||||||
|
|
||||||
|
uci set network.mesh_wan.auto=0
|
||||||
|
uci commit network
|
||||||
|
|
||||||
|
|
||||||
.. _wired-mesh-commandline:
|
Mesh-on-LAN
|
||||||
|
...........
|
||||||
|
|
||||||
Commandline
|
Configuring Mesh-on-LAN is a bit more complicated::
|
||||||
===========
|
|
||||||
|
|
||||||
Starting with release 2022.1, the wired network configuration is rebuilt from ``/etc/config/gluon``
|
uci set network.mesh_lan.auto=1
|
||||||
upon each ``gluon-reconfigure``.
|
for ifname in $(cat /lib/gluon/core/sysconfig/lan_ifname); do
|
||||||
Therefore the network configuration is overwritten at least with every firmware upgrade.
|
uci del_list network.client.ifname=$ifname
|
||||||
|
done
|
||||||
|
uci commit network
|
||||||
|
|
||||||
Every interface has a list of roles assigned to it which can be ``client``, ``mesh`` or ``uplink``.
|
It may be disabled by running::
|
||||||
|
|
||||||
When the client role is assigned to an interface in combination with other roles
|
uci set network.mesh_lan.auto=0
|
||||||
(like 'client', 'mesh' in the Mesh-on-LAN example below), the other roles take
|
for ifname in $(cat /lib/gluon/core/sysconfig/lan_ifname); do
|
||||||
precedence, enabling mesh but not client in the previous example.
|
uci add_list network.client.ifname=$ifname
|
||||||
|
done
|
||||||
|
uci commit network
|
||||||
|
|
||||||
The setup/config-mode interface is every interface with the role ``client`` which makes removing
|
Please note that this configuration has changed in Gluon v2016.1. Using
|
||||||
it from interfaces not only unnecessary, but generally unrecommended.
|
the old commands on v2016.1 and later will break the corresponding options
|
||||||
|
|
||||||
In order to make persistent changes to the router's configuration it's necessary to:
|
|
||||||
|
|
||||||
* change the sections in ``/etc/config/gluon`` e.g. using uci (see examples below)
|
|
||||||
* call ``gluon-reconfigure`` to re-generate ``/etc/config/network``
|
|
||||||
* apply the networking changes, either through executing ``service network restart`` or by performing a ``reboot``
|
|
||||||
|
|
||||||
Enable Mesh-on-WAN::
|
|
||||||
|
|
||||||
uci add_list gluon.iface_wan.role='mesh'
|
|
||||||
uci commit gluon
|
|
||||||
|
|
||||||
Disable Mesh-on-WAN::
|
|
||||||
|
|
||||||
uci del_list gluon.iface_wan.role='mesh'
|
|
||||||
uci commit gluon
|
|
||||||
|
|
||||||
Enable Mesh-on-LAN::
|
|
||||||
|
|
||||||
uci add_list gluon.iface_lan.role='mesh'
|
|
||||||
uci commit gluon
|
|
||||||
|
|
||||||
Disable Mesh-on-LAN::
|
|
||||||
|
|
||||||
uci del_list gluon.iface_lan.role='mesh'
|
|
||||||
uci commit gluon
|
|
||||||
|
|
||||||
For devices with a single interface, instead of `iface_lan` and `iface_wan` configuration is
|
|
||||||
done with `iface_single`.
|
|
||||||
|
|
||||||
Enable Mesh-on-Single::
|
|
||||||
|
|
||||||
uci add_list gluon.iface_single.role='mesh'
|
|
||||||
uci commit gluon
|
|
||||||
|
|
||||||
Disable Mesh-on-Single::
|
|
||||||
|
|
||||||
uci del_list gluon.iface_single.role='mesh'
|
|
||||||
uci commit gluon
|
|
||||||
|
|
||||||
Furthermore it is possible to make use of 802.1Q VLAN.
|
|
||||||
The following statements would create a VLAN with id 8 on ``eth0`` and join the mesh network with it::
|
|
||||||
|
|
||||||
uci set gluon.iface_lan_vlan8=interface
|
|
||||||
uci set gluon.iface_lan_vlan8.name='eth0.8'
|
|
||||||
uci add_list gluon.iface_lan_vlan8.role='mesh'
|
|
||||||
uci commit gluon
|
|
||||||
|
|
||||||
Other VLAN-interfaces could be configured on the same parent interface in order to have
|
|
||||||
all three roles available on ``eth0`` without having them interfere with each other.
|
|
||||||
This feature comes in especially handy for the persistent configuration of virtual machines
|
|
||||||
as offloader for bigger installations.
|
|
||||||
|
|
||||||
A ``reboot`` is not sufficient to apply an altered configuration; calling ``gluon-reconfigure`` before is
|
|
||||||
mandatory in order for changes to take effect.
|
|
||||||
|
|
||||||
Please note that this configuration has changed in Gluon 2022.1. Using
|
|
||||||
the old commands on 2022.1 and later will break the corresponding options
|
|
||||||
in the *Advanced settings*.
|
in the *Advanced settings*.
|
||||||
|
@ -2,9 +2,10 @@ WLAN configuration
|
|||||||
==================
|
==================
|
||||||
|
|
||||||
Gluon allows to configure 2.4GHz and 5GHz radios independently. The configuration
|
Gluon allows to configure 2.4GHz and 5GHz radios independently. The configuration
|
||||||
may include one or both of the two networks "client" (AP mode) and "mesh" (802.11s
|
may include any or all of the three networks "client" (AP mode), "mesh" (802.11s
|
||||||
mode), which can be used simultaneously. See :doc:`../user/site` for details on the
|
mode) and "ibss" (adhoc mode), which can be used simultaneously (using "mesh" and
|
||||||
configuration.
|
"ibss" at same time should be avoided though as weaker hardware usually can't handle the additional
|
||||||
|
load). See :doc:`../user/site` for details on the configuration.
|
||||||
|
|
||||||
Upgrade behaviour
|
Upgrade behaviour
|
||||||
-----------------
|
-----------------
|
||||||
@ -15,12 +16,19 @@ on upgrades the existing setting is always retained (as this setting may have be
|
|||||||
by the user). This means that it is not possible to enable or disable an existing network
|
by the user). This means that it is not possible to enable or disable an existing network
|
||||||
configurations during upgrades.
|
configurations during upgrades.
|
||||||
|
|
||||||
|
For the "mesh" and "ibss" networks, the default setting only has an effect if none
|
||||||
|
of the two has existed before. If a new configuration has been added for "mesh" or "ibss",
|
||||||
|
while the other of the two has already existed before, the enabled/disabled state of the
|
||||||
|
existing configuration will also be set for the new configuration.
|
||||||
|
|
||||||
|
This allows upgrades to change from IBSS to 11s and vice-versa while retaining the
|
||||||
|
"wireless meshing is enabled/disabled" property configured by the user regardless
|
||||||
|
of the used mode.
|
||||||
|
|
||||||
During upgrades the wifi channel of the 2.4GHz and 5GHz radio will be restored to the channel
|
During upgrades the wifi channel of the 2.4GHz and 5GHz radio will be restored to the channel
|
||||||
configured in the site.conf. The channel width will be reset to Gluon's default. If you need to preserve
|
configured in the site.conf. If you need to preserve a user defined wifi channel during upgrades
|
||||||
these settings during upgrades you can configure this via the uci section ``gluon-core.wireless``::
|
you can configure this via the uci section ``gluon-core.wireless``::
|
||||||
|
|
||||||
uci set gluon.wireless.preserve_channels='1'
|
uci set gluon-core.@wireless[0].preserve_channels='1'
|
||||||
|
|
||||||
When channels should be preserved, toggling the outdoor mode will have no effect on the channel settings.
|
|
||||||
Therefore, the Outdoor mode settings won't be displayed in config mode.
|
|
||||||
Keep in mind that nodes running wifi interfaces on custom channels can't mesh with default nodes anymore!
|
Keep in mind that nodes running wifi interfaces on custom channels can't mesh with default nodes anymore!
|
||||||
|
341
docs/index.rst
@ -1,85 +1,305 @@
|
|||||||
Welcome to Gluon
|
Welcome to Gluon
|
||||||
================
|
================
|
||||||
|
|
||||||
Gluon is a modular framework for creating OpenWrt-based firmware images for wireless mesh nodes.
|
Gluon is a modular framework for creating OpenWrt-based firmwares for wireless mesh nodes.
|
||||||
Several Freifunk communities in Germany use Gluon as the foundation of their Freifunk firmware.
|
Several Freifunk communities in Germany use Gluon as the foundation of their Freifunk firmwares.
|
||||||
|
|
||||||
|
|
||||||
.. toctree::
|
.. toctree::
|
||||||
:caption: User Documentation
|
:caption: User Documentation
|
||||||
:maxdepth: 2
|
:maxdepth: 2
|
||||||
|
|
||||||
user/getting_started
|
user/getting_started
|
||||||
user/site
|
user/site
|
||||||
user/supported_devices
|
user/x86
|
||||||
user/x86
|
user/faq
|
||||||
user/faq
|
|
||||||
user/mtu
|
|
||||||
|
|
||||||
.. toctree::
|
.. toctree::
|
||||||
:caption: Features
|
:caption: Features
|
||||||
:maxdepth: 2
|
:maxdepth: 2
|
||||||
|
|
||||||
features/configmode
|
features/configmode
|
||||||
features/autoupdater
|
features/autoupdater
|
||||||
features/wlan-configuration
|
features/wlan-configuration
|
||||||
features/private-wlan
|
features/private-wlan
|
||||||
features/wired-mesh
|
features/wired-mesh
|
||||||
features/dns-cache
|
features/dns-forwarder
|
||||||
features/monitoring
|
features/monitoring
|
||||||
features/multidomain
|
features/authorized-keys
|
||||||
features/authorized-keys
|
features/roles
|
||||||
features/roles
|
|
||||||
features/vpn
|
|
||||||
|
|
||||||
.. toctree::
|
.. toctree::
|
||||||
:caption: Developer Documentation
|
:caption: Developer Documentation
|
||||||
:maxdepth: 2
|
:maxdepth: 2
|
||||||
|
|
||||||
dev/basics
|
dev/basics
|
||||||
dev/hardware
|
dev/hardware
|
||||||
dev/packages
|
dev/upgrade
|
||||||
dev/upgrade
|
dev/wan
|
||||||
dev/uplink
|
dev/mac_addresses
|
||||||
dev/mac_addresses
|
|
||||||
dev/site_library
|
|
||||||
dev/build
|
|
||||||
dev/debugging
|
|
||||||
|
|
||||||
.. toctree::
|
.. toctree::
|
||||||
:caption: gluon-web Reference
|
:caption: gluon-web Reference
|
||||||
:maxdepth: 1
|
:maxdepth: 1
|
||||||
|
|
||||||
dev/web/controller
|
dev/web/controller
|
||||||
dev/web/model
|
dev/web/model
|
||||||
dev/web/view
|
dev/web/view
|
||||||
dev/web/i18n
|
dev/web/i18n
|
||||||
dev/web/config-mode
|
dev/web/config-mode
|
||||||
|
|
||||||
.. toctree::
|
.. toctree::
|
||||||
:caption: Packages
|
:caption: Packages
|
||||||
:maxdepth: 1
|
:maxdepth: 1
|
||||||
|
|
||||||
package/gluon-client-bridge
|
package/gluon-client-bridge
|
||||||
package/gluon-config-mode-domain-select
|
package/gluon-config-mode-geo-location
|
||||||
package/gluon-ebtables-filter-multicast
|
package/gluon-ebtables-filter-multicast
|
||||||
package/gluon-ebtables-filter-ra-dhcp
|
package/gluon-ebtables-filter-ra-dhcp
|
||||||
package/gluon-ebtables-limit-arp
|
package/gluon-ebtables-segment-mld
|
||||||
package/gluon-ebtables-source-filter
|
package/gluon-ebtables-source-filter
|
||||||
package/gluon-hoodselector
|
|
||||||
package/gluon-logging
|
|
||||||
package/gluon-mesh-batman-adv
|
|
||||||
package/gluon-mesh-wireless-sae
|
|
||||||
package/gluon-radv-filterd
|
|
||||||
package/gluon-scheduled-domain-switch
|
|
||||||
package/gluon-web-admin
|
|
||||||
package/gluon-web-logging
|
|
||||||
|
|
||||||
.. toctree::
|
.. toctree::
|
||||||
:caption: Releases
|
:caption: Releases
|
||||||
:maxdepth: 1
|
:maxdepth: 1
|
||||||
|
|
||||||
releases/index
|
releases/v2017.1.8
|
||||||
|
releases/v2017.1.7
|
||||||
|
releases/v2017.1.6
|
||||||
|
releases/v2017.1.5
|
||||||
|
releases/v2017.1.4
|
||||||
|
releases/v2017.1.3
|
||||||
|
releases/v2017.1.2
|
||||||
|
releases/v2017.1.1
|
||||||
|
releases/v2017.1
|
||||||
|
releases/v2016.2.7
|
||||||
|
releases/v2016.2.6
|
||||||
|
releases/v2016.2.5
|
||||||
|
releases/v2016.2.4
|
||||||
|
releases/v2016.2.3
|
||||||
|
releases/v2016.2.2
|
||||||
|
releases/v2016.2.1
|
||||||
|
releases/v2016.2
|
||||||
|
releases/v2016.1.6
|
||||||
|
releases/v2016.1.5
|
||||||
|
releases/v2016.1.4
|
||||||
|
releases/v2016.1.3
|
||||||
|
releases/v2016.1.2
|
||||||
|
releases/v2016.1.1
|
||||||
|
releases/v2016.1
|
||||||
|
releases/v2015.1.2
|
||||||
|
releases/v2015.1.1
|
||||||
|
releases/v2015.1
|
||||||
|
releases/v2014.4
|
||||||
|
releases/v2014.3.1
|
||||||
|
releases/v2014.3
|
||||||
|
|
||||||
|
|
||||||
|
Supported Devices & Architectures
|
||||||
|
---------------------------------
|
||||||
|
|
||||||
|
ar71xx-generic
|
||||||
|
^^^^^^^^^^^^^^
|
||||||
|
|
||||||
|
* 8devices
|
||||||
|
|
||||||
|
- Carambola 2
|
||||||
|
|
||||||
|
* ALFA Network
|
||||||
|
|
||||||
|
- AP121
|
||||||
|
- AP121U
|
||||||
|
- Hornet-UB
|
||||||
|
- Tube2H
|
||||||
|
- N2
|
||||||
|
- N5
|
||||||
|
|
||||||
|
* Allnet
|
||||||
|
|
||||||
|
- ALL0315N
|
||||||
|
|
||||||
|
* Buffalo
|
||||||
|
|
||||||
|
- WZR-HP-AG300H / WZR-600DHP
|
||||||
|
- WZR-HP-G300NH
|
||||||
|
- WZR-HP-G300NH2
|
||||||
|
- WZR-HP-G450H
|
||||||
|
|
||||||
|
* D-Link
|
||||||
|
|
||||||
|
- DIR-505 (A1, A2)
|
||||||
|
- DIR-615 (C1)
|
||||||
|
- DIR-825 (B1)
|
||||||
|
|
||||||
|
* GL Innovations
|
||||||
|
|
||||||
|
- GL-AR150
|
||||||
|
- GL-AR300M
|
||||||
|
- GL-AR750 [#ath10k]_
|
||||||
|
- GL-iNet 6408A (v1)
|
||||||
|
- GL-iNet 6416A (v1)
|
||||||
|
|
||||||
|
* Linksys
|
||||||
|
|
||||||
|
- WRT160NL
|
||||||
|
|
||||||
|
* Netgear
|
||||||
|
|
||||||
|
- WNDR3700 (v1, v2)
|
||||||
|
- WNDR3800
|
||||||
|
- WNDRMAC (v2)
|
||||||
|
|
||||||
|
* Onion
|
||||||
|
|
||||||
|
- Omega
|
||||||
|
|
||||||
|
* OpenMesh
|
||||||
|
|
||||||
|
- MR600 (v1, v2)
|
||||||
|
- MR900 (v1, v2)
|
||||||
|
- MR1750 (v1, v2) [#ath10k]_
|
||||||
|
- OM2P (v1, v2)
|
||||||
|
- OM2P-HS (v1, v2, v3)
|
||||||
|
- OM2P-LC
|
||||||
|
- OM5P
|
||||||
|
- OM5P-AN
|
||||||
|
- OM5P-AC (v1, v2) [#ath10k]_
|
||||||
|
|
||||||
|
* TP-Link
|
||||||
|
|
||||||
|
- Archer C5 (v1) [#ath10k]_
|
||||||
|
- Archer C7 (v2, v4) [#ath10k]_
|
||||||
|
- CPE210 (v1.0, v1.1)
|
||||||
|
- CPE220 (v1.1)
|
||||||
|
- CPE510 (v1.0, v1.1)
|
||||||
|
- CPE520 (v1.1)
|
||||||
|
- RE450 [#ath10k]_
|
||||||
|
- TL-WDR3500 (v1)
|
||||||
|
- TL-WDR3600 (v1)
|
||||||
|
- TL-WDR4300 (v1)
|
||||||
|
- TL-WR710N (v1, v2.1)
|
||||||
|
- TL-WR842N/ND (v1, v2, v3)
|
||||||
|
- TL-WR1043N/ND (v1, v2, v3, v4, v5)
|
||||||
|
- TL-WR2543N/ND (v1)
|
||||||
|
- WBS210 (v1.20)
|
||||||
|
- WBS510 (v1.20)
|
||||||
|
|
||||||
|
* Ubiquiti
|
||||||
|
|
||||||
|
- Air Gateway
|
||||||
|
- Air Gateway LR
|
||||||
|
- Air Gateway PRO
|
||||||
|
- Air Router
|
||||||
|
- Bullet M2/M5
|
||||||
|
- Loco M2/M5
|
||||||
|
- Loco M2/M5 XW
|
||||||
|
- Nanostation M2/M5
|
||||||
|
- Nanostation M2/M5 XW
|
||||||
|
- Picostation M2/M5
|
||||||
|
- Rocket M2/M5
|
||||||
|
- Rocket M2/M5 Ti
|
||||||
|
- Rocket M2/M5 XW
|
||||||
|
- UniFi AC Mesh [#ath10k]_
|
||||||
|
- UniFi AP
|
||||||
|
- UniFi AP AC Lite [#ath10k]_
|
||||||
|
- UniFi AP AC Pro [#ath10k]_
|
||||||
|
- UniFi AP LR
|
||||||
|
- UniFi AP Pro
|
||||||
|
- UniFi AP Outdoor
|
||||||
|
- UniFi AP Outdoor+
|
||||||
|
|
||||||
|
* Western Digital
|
||||||
|
|
||||||
|
- My Net N600
|
||||||
|
- My Net N750
|
||||||
|
|
||||||
|
.. [#ath10k]
|
||||||
|
Device uses the ath10k WLAN driver; no image is built unless GLUON_ATH10K_MESH
|
||||||
|
is set as described in :ref:`getting-started-make-variables`
|
||||||
|
|
||||||
|
ar71xx-nand
|
||||||
|
^^^^^^^^^^^
|
||||||
|
|
||||||
|
* Netgear
|
||||||
|
|
||||||
|
- WNDR3700 (v4)
|
||||||
|
- WNDR4300 (v1)
|
||||||
|
|
||||||
|
ar71xx-tiny
|
||||||
|
^^^^^^^^^^^
|
||||||
|
|
||||||
|
* D-Link
|
||||||
|
|
||||||
|
- DIR-615 (C1)
|
||||||
|
|
||||||
|
* TP-Link
|
||||||
|
|
||||||
|
- TL-MR13U (v1)
|
||||||
|
- TL-MR3020 (v1)
|
||||||
|
- TL-MR3040 (v1, v2)
|
||||||
|
- TL-MR3220 (v1, v2)
|
||||||
|
- TL-MR3420 (v1, v2)
|
||||||
|
- TL-WA701N/ND (v1, v2)
|
||||||
|
- TL-WA730RE (v1)
|
||||||
|
- TL-WA750RE (v1)
|
||||||
|
- TL-WA801N/ND (v1, v2, v3)
|
||||||
|
- TL-WA830RE (v1, v2)
|
||||||
|
- TL-WA850RE (v1)
|
||||||
|
- TL-WA860RE (v1)
|
||||||
|
- TL-WA901N/ND (v1, v2, v3, v4)
|
||||||
|
- TL-WA7210N (v2)
|
||||||
|
- TL-WA7510N (v1)
|
||||||
|
- TL-WR703N (v1)
|
||||||
|
- TL-WR710N (v1, v2, v2.1)
|
||||||
|
- TL-WR740N (v1, v3, v4, v5)
|
||||||
|
- TL-WR741N/ND (v1, v2, v4, v5)
|
||||||
|
- TL-WR743N/ND (v1, v2)
|
||||||
|
- TL-WR841N/ND (v3, v5, v7, v8, v9, v10, v11, v12)
|
||||||
|
- TL-WR843N/ND (v1)
|
||||||
|
- TL-WR940N (v1, v2, v3, v4, v5, v6)
|
||||||
|
- TL-WR941ND (v2, v3, v4, v5, v6)
|
||||||
|
|
||||||
|
brcm2708-bcm2708
|
||||||
|
^^^^^^^^^^^^^^^^
|
||||||
|
|
||||||
|
* RaspberryPi 1
|
||||||
|
|
||||||
|
brcm2708-bcm2709
|
||||||
|
^^^^^^^^^^^^^^^^
|
||||||
|
|
||||||
|
* RaspberryPi 2
|
||||||
|
|
||||||
|
mpc85xx-generic
|
||||||
|
^^^^^^^^^^^^^^^
|
||||||
|
|
||||||
|
* TP-Link
|
||||||
|
|
||||||
|
- TL-WDR4900 (v1)
|
||||||
|
|
||||||
|
x86-generic
|
||||||
|
^^^^^^^^^^^
|
||||||
|
|
||||||
|
* x86-generic
|
||||||
|
* x86-virtualbox
|
||||||
|
* x86-vmware
|
||||||
|
|
||||||
|
See also: :doc:`user/x86`
|
||||||
|
|
||||||
|
x86-geode
|
||||||
|
^^^^^^^^^
|
||||||
|
|
||||||
|
* x86-geode
|
||||||
|
|
||||||
|
See also: :doc:`user/x86`
|
||||||
|
|
||||||
|
x86-64
|
||||||
|
^^^^^^
|
||||||
|
|
||||||
|
* x86-64-generic
|
||||||
|
* x86-64-virtualbox
|
||||||
|
* x86-64-vmware
|
||||||
|
|
||||||
|
See also: :doc:`user/x86`
|
||||||
|
|
||||||
License
|
License
|
||||||
-------
|
-------
|
||||||
@ -91,4 +311,5 @@ See LICENCE_
|
|||||||
Indices and tables
|
Indices and tables
|
||||||
==================
|
==================
|
||||||
|
|
||||||
|
* :ref:`genindex`
|
||||||
* :ref:`search`
|
* :ref:`search`
|
||||||
|
@ -1,68 +0,0 @@
|
|||||||
{
|
|
||||||
-- multiple codes/names can be defined, the first one is the primary name
|
|
||||||
-- additional aliases can be defined
|
|
||||||
domain_names = {
|
|
||||||
alpha_centauri = 'Alpha Centauri',
|
|
||||||
rigil_kentaurus = 'Rigil Kentaurus',
|
|
||||||
proxima_centauri = 'Proxima Centauri',
|
|
||||||
},
|
|
||||||
|
|
||||||
-- 32 byte random data in hexadecimal encoding
|
|
||||||
-- This data must be unique among all sites and domains!
|
|
||||||
-- Can be generated using: echo $(hexdump -v -n 32 -e '1/1 "%02x"' </dev/urandom)
|
|
||||||
domain_seed = 'xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx',
|
|
||||||
|
|
||||||
-- unique network prefixes per domain
|
|
||||||
prefix4 = '10.xxx.0.0/20',
|
|
||||||
prefix6 = 'fdxx:xxxx:xxxx:xxxx::/64',
|
|
||||||
|
|
||||||
next_node = {
|
|
||||||
ip4 = '10.xxx.yyy.zzz',
|
|
||||||
ip6 = 'fdxx:xxxx:xxxx:xxxx::xxxx',
|
|
||||||
},
|
|
||||||
|
|
||||||
wifi24 = {
|
|
||||||
ap = {
|
|
||||||
ssid = "alpha-centauri.example.org",
|
|
||||||
channel = 1,
|
|
||||||
},
|
|
||||||
mesh = {
|
|
||||||
id = 'ueH3uXjdp', -- usually you don't want users to connect to this mesh-SSID, so use a cryptic id that no one will accidentally mistake for the client WiFi
|
|
||||||
},
|
|
||||||
},
|
|
||||||
|
|
||||||
wifi5 = {
|
|
||||||
ap = {
|
|
||||||
ssid = "alpha-centauri.example.org",
|
|
||||||
channel = 44,
|
|
||||||
},
|
|
||||||
mesh = {
|
|
||||||
id = 'ueH3uXjdp',
|
|
||||||
},
|
|
||||||
},
|
|
||||||
|
|
||||||
mesh = {
|
|
||||||
batman_adv = {
|
|
||||||
routing_algo = 'BATMAN_IV',
|
|
||||||
},
|
|
||||||
},
|
|
||||||
|
|
||||||
mesh_vpn = {
|
|
||||||
fastd = {
|
|
||||||
groups = {
|
|
||||||
backbone = {
|
|
||||||
peers = {
|
|
||||||
peer1 = {
|
|
||||||
key = 'xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx',
|
|
||||||
remotes = {'"peer1.example.org" port xxxxx'},
|
|
||||||
},
|
|
||||||
peer2 = {
|
|
||||||
key = 'xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx',
|
|
||||||
remotes = {'"peer2.example.org" port xxxxx'},
|
|
||||||
},
|
|
||||||
},
|
|
||||||
},
|
|
||||||
},
|
|
||||||
},
|
|
||||||
},
|
|
||||||
}
|
|
@ -1 +0,0 @@
|
|||||||
../site-example/i18n/
|
|
@ -1 +0,0 @@
|
|||||||
../site-example/modules
|
|
@ -1,52 +0,0 @@
|
|||||||
{
|
|
||||||
site_name = 'Centauri Mesh',
|
|
||||||
site_code = 'centauri',
|
|
||||||
default_domain = 'alpha_centauri',
|
|
||||||
|
|
||||||
timezone = 'CET-1CEST,M3.5.0,M10.5.0/3',
|
|
||||||
ntp_server = {'ntp1.example.org', 'ntp2.example.org'},
|
|
||||||
regdom = 'DE',
|
|
||||||
|
|
||||||
wifi24 = {
|
|
||||||
mesh = {
|
|
||||||
mcast_rate = 12000,
|
|
||||||
},
|
|
||||||
},
|
|
||||||
|
|
||||||
wifi5 = {
|
|
||||||
mesh = {
|
|
||||||
mcast_rate = 12000,
|
|
||||||
},
|
|
||||||
},
|
|
||||||
|
|
||||||
mesh_vpn = {
|
|
||||||
|
|
||||||
fastd = {
|
|
||||||
methods = {'salsa2012+umac'},
|
|
||||||
mtu = 1312,
|
|
||||||
},
|
|
||||||
|
|
||||||
bandwidth_limit = {
|
|
||||||
enabled = false,
|
|
||||||
egress = 200, -- kbit/s
|
|
||||||
ingress = 3000, -- kbit/s
|
|
||||||
},
|
|
||||||
},
|
|
||||||
|
|
||||||
autoupdater = {
|
|
||||||
branch = 'stable',
|
|
||||||
|
|
||||||
branches = {
|
|
||||||
stable = {
|
|
||||||
name = 'stable',
|
|
||||||
mirrors = {'http://update.example.org/stable/sysupgrade'},
|
|
||||||
good_signatures = 2,
|
|
||||||
pubkeys = {
|
|
||||||
'xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx', -- Alice
|
|
||||||
'xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx', -- Bob
|
|
||||||
'xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx', -- Mary
|
|
||||||
},
|
|
||||||
},
|
|
||||||
},
|
|
||||||
},
|
|
||||||
}
|
|
@ -1,60 +0,0 @@
|
|||||||
## gluon site.mk makefile example
|
|
||||||
|
|
||||||
## GLUON_FEATURES
|
|
||||||
# Specify Gluon features/packages to enable;
|
|
||||||
# Gluon will automatically enable a set of packages
|
|
||||||
# depending on the combination of features listed
|
|
||||||
|
|
||||||
GLUON_FEATURES := \
|
|
||||||
autoupdater \
|
|
||||||
ebtables-filter-multicast \
|
|
||||||
ebtables-filter-ra-dhcp \
|
|
||||||
ebtables-limit-arp \
|
|
||||||
mesh-batman-adv-15 \
|
|
||||||
mesh-vpn-fastd \
|
|
||||||
respondd \
|
|
||||||
status-page \
|
|
||||||
web-advanced \
|
|
||||||
web-wizard
|
|
||||||
|
|
||||||
## GLUON_MULTIDOMAIN
|
|
||||||
# Build gluon with multidomain support.
|
|
||||||
|
|
||||||
GLUON_MULTIDOMAIN=1
|
|
||||||
|
|
||||||
## GLUON_SITE_PACKAGES
|
|
||||||
# Specify additional Gluon/LEDE packages to include here;
|
|
||||||
# A minus sign may be prepended to remove a packages from the
|
|
||||||
# selection that would be enabled by default or due to the
|
|
||||||
# chosen feature flags
|
|
||||||
|
|
||||||
|
|
||||||
GLUON_SITE_PACKAGES := iwinfo
|
|
||||||
|
|
||||||
## DEFAULT_GLUON_RELEASE
|
|
||||||
# version string to use for images
|
|
||||||
# gluon relies on
|
|
||||||
# opkg compare-versions "$1" '>>' "$2"
|
|
||||||
# to decide if a version is newer or not.
|
|
||||||
|
|
||||||
DEFAULT_GLUON_RELEASE := 0.6+exp$(shell date '+%Y%m%d')
|
|
||||||
|
|
||||||
# Variables set with ?= can be overwritten from the command line
|
|
||||||
|
|
||||||
## GLUON_RELEASE
|
|
||||||
# call make with custom GLUON_RELEASE flag, to use your own release version scheme.
|
|
||||||
# e.g.:
|
|
||||||
# $ make images GLUON_RELEASE=23.42+5
|
|
||||||
# would generate images named like this:
|
|
||||||
# gluon-ff%site_code%-23.42+5-%router_model%.bin
|
|
||||||
|
|
||||||
GLUON_RELEASE ?= $(DEFAULT_GLUON_RELEASE)
|
|
||||||
|
|
||||||
# Default priority for updates.
|
|
||||||
GLUON_PRIORITY ?= 0
|
|
||||||
|
|
||||||
# Region code required for some images; supported values: us eu
|
|
||||||
GLUON_REGION ?= eu
|
|
||||||
|
|
||||||
# Languages to include
|
|
||||||
GLUON_LANGS ?= en de
|
|
@ -1,19 +0,0 @@
|
|||||||
gluon-config-mode-domain-select
|
|
||||||
===============================
|
|
||||||
This package provides a drop-down list for the config mode to select the domain
|
|
||||||
the node will be placed in. If the selection has changed the upgrade scripts in
|
|
||||||
``/lib/gluon/upgrade/`` are triggered to update the nodes configuration.
|
|
||||||
|
|
||||||
Hiding domains could be useful for default or testing domains, which should not
|
|
||||||
be accidentally selected by a node operator.
|
|
||||||
|
|
||||||
domains/\*.conf
|
|
||||||
---------------
|
|
||||||
|
|
||||||
hide_domain \: optional (defaults to false)
|
|
||||||
- ``false`` shows this domain in drop-down list
|
|
||||||
- ``true`` hides this domain
|
|
||||||
|
|
||||||
Example::
|
|
||||||
|
|
||||||
hide_domain = true
|
|
14
docs/package/gluon-config-mode-geo-location.rst
Normal file
@ -0,0 +1,14 @@
|
|||||||
|
gluon-config-mode-geo-location
|
||||||
|
==============================
|
||||||
|
|
||||||
|
This package enables the user to set latitude, longitude and altitude of their
|
||||||
|
node within config mode. As the usage of the altitude is not well defined the
|
||||||
|
corresponding field can be disabled.
|
||||||
|
|
||||||
|
site.conf
|
||||||
|
---------
|
||||||
|
|
||||||
|
config_mode.geo_location.show_altitude : optional
|
||||||
|
- ``true`` enables the altitude field
|
||||||
|
- ``false`` disables the altitude field if altitude has not yet been set
|
||||||
|
- defaults to ``true``
|
@ -1,29 +0,0 @@
|
|||||||
gluon-ebtables-limit-arp
|
|
||||||
========================
|
|
||||||
|
|
||||||
The *gluon-ebtables-limit-arp* package adds filters to limit the
|
|
||||||
amount of ARP requests client devices are allowed to send into the
|
|
||||||
mesh.
|
|
||||||
|
|
||||||
The limits per client device, identified by its MAC address, are
|
|
||||||
6 packets per minute and 1 per second per node in total.
|
|
||||||
A burst of up to 50 ARP requests is allowed until the rate-limiting
|
|
||||||
takes effect (see ``--limit-burst`` in ``ebtables(8)``).
|
|
||||||
|
|
||||||
Furthermore, ARP requests for a target IP already present in the
|
|
||||||
batman-adv DAT cache are excluded from rate-limiting, in regard
|
|
||||||
to both counting and filtering, as batman-adv will be able
|
|
||||||
to respond locally without a burden for the mesh. Therefore, this
|
|
||||||
limiter should not affect popular target IP addresses, like those
|
|
||||||
of gateways or nameservers.
|
|
||||||
|
|
||||||
However it mitigates the impact on the mesh when a larger range of
|
|
||||||
its IPv4 subnet is being scanned, which would otherwise result in
|
|
||||||
a significant amount of ARP chatter, even for unused IP addresses.
|
|
||||||
|
|
||||||
This package is installed by default if the selected routing
|
|
||||||
feature is *mesh-batman-adv-15*.
|
|
||||||
It can be unselected via::
|
|
||||||
|
|
||||||
GLUON_SITE_PACKAGES := \
|
|
||||||
-gluon-ebtables-limit-arp
|
|
16
docs/package/gluon-ebtables-segment-mld.rst
Normal file
@ -0,0 +1,16 @@
|
|||||||
|
gluon-ebtables-segment-mld
|
||||||
|
==========================
|
||||||
|
|
||||||
|
These filters drop IGMP/MLD packets before they enter the mesh and
|
||||||
|
filter any IGMP/MLD packets coming from the mesh.
|
||||||
|
|
||||||
|
IGMP/MLD have the concept of a local, elected Querier. For more
|
||||||
|
decentralization and increased robustness, the idea of this package is
|
||||||
|
to split the IGMP/MLD domain a querier is responsible for, allowing to
|
||||||
|
have a querier per node. The split IGMP/MLD domain will also reduce
|
||||||
|
overhead for this packet type, increasing scalability.
|
||||||
|
|
||||||
|
Beware of the consequences of using this package though: You might need
|
||||||
|
to explicitly, manually mark ports on snooping switches leading towards
|
||||||
|
your mesh node as multicast router ports for now (Multicast Router
|
||||||
|
Discovery, MRD, not implemented yet).
|
@ -6,8 +6,8 @@ ruleset to prevent unreasonable traffic entering the network via the nodes.
|
|||||||
Unreasonable means traffic entering the mesh via a node which source IP does
|
Unreasonable means traffic entering the mesh via a node which source IP does
|
||||||
not belong to the configured IP space.
|
not belong to the configured IP space.
|
||||||
|
|
||||||
You may first check if there is a certain proportion of unreasonable traffic,
|
One may first check if there is a certain proportion of unreasonable traffic,
|
||||||
before adding this package to the firmware image. Furthermore, you should not
|
before adding this package to the firmware image. Additional one should not
|
||||||
use this package if some kind of gateway or upstream network is provided by
|
use this package if some kind of gateway or upstream network is provided by
|
||||||
a device connected to the client port.
|
a device connected to the client port.
|
||||||
|
|
||||||
@ -27,7 +27,4 @@ Example::
|
|||||||
|
|
||||||
prefix4 = '198.51.100.0/21',
|
prefix4 = '198.51.100.0/21',
|
||||||
prefix6 = '2001:db8:8::/64',
|
prefix6 = '2001:db8:8::/64',
|
||||||
extra_prefixes6 = {
|
extra_prefixes6 = { '2001:db8:9::/64', '2001:db8:100::/60' },
|
||||||
'2001:db8:9::/64',
|
|
||||||
'2001:db8:100::/60',
|
|
||||||
},
|
|
||||||
|
Before Width: | Height: | Size: 291 KiB |
@ -1,16 +0,0 @@
|
|||||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
|
||||||
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.0//EN" "http://www.w3.org/TR/2001/PR-SVG-20010719/DTD/svg10.dtd">
|
|
||||||
<svg width="13cm" height="9cm" viewBox="348 138 253 169" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
|
|
||||||
<g>
|
|
||||||
<rect style="fill: #ffffff" x="389" y="164" width="158" height="115"/>
|
|
||||||
<rect style="fill: none; fill-opacity:0; stroke-width: 1; stroke: #000000" x="389" y="164" width="158" height="115"/>
|
|
||||||
</g>
|
|
||||||
<text font-size="12.7998" style="fill: #000000;text-anchor:start;font-family:sans-serif;font-style:normal;font-weight:normal" x="348" y="150">
|
|
||||||
<tspan x="348" y="150">53.22,</tspan>
|
|
||||||
<tspan x="348" y="166">8.09 #</tspan>
|
|
||||||
</text>
|
|
||||||
<text font-size="12.7998" style="fill: #000000;text-anchor:start;font-family:sans-serif;font-style:normal;font-weight:normal" x="545" y="288">
|
|
||||||
<tspan x="545" y="288"># 53.36,</tspan>
|
|
||||||
<tspan x="545" y="304"> 8.32</tspan>
|
|
||||||
</text>
|
|
||||||
</svg>
|
|
Before Width: | Height: | Size: 996 B |
@ -1,133 +0,0 @@
|
|||||||
gluon-hoodselector
|
|
||||||
==================
|
|
||||||
|
|
||||||
This package provides an automated way to continuously select the correct
|
|
||||||
domain based on the geolocation of a node. The purpose of Hoodselector is to
|
|
||||||
automatically detect in which domain the node is located based on its
|
|
||||||
geolocation settings. Therefore domains are required to have bounding boxes,
|
|
||||||
defined as polygons or rectangles. Based on this information Hoodselector will
|
|
||||||
select a domain from the list of known domains and migrate towards it without
|
|
||||||
requiring a reboot. This package therefore provides a scalable and
|
|
||||||
decentralized approach to automatic domain selection.
|
|
||||||
|
|
||||||
Background information
|
|
||||||
----------------------
|
|
||||||
|
|
||||||
The main problem of the Nordwest Freifunk community was the quickly rising
|
|
||||||
number of nodes in the network. This indirectly affected the stability of the
|
|
||||||
network, because the noise inside the network, e.g. management traffic from
|
|
||||||
the batman-adv protocol, was rising, too. Inside the community there were some
|
|
||||||
ideas like building separate firmwares for each region. This solution would
|
|
||||||
cause issues with splitting regions again and nodes scattered among regions
|
|
||||||
which belong to a different region. Therefore we decided to develop a
|
|
||||||
dynamic and decentralized management of regions called domains.
|
|
||||||
The Hoodselector's task is to choose the "right" domains in an intelligent way
|
|
||||||
and to hold the network together and accessible.
|
|
||||||
|
|
||||||
A domain is defined by geostationary fixed shapes by using longitude & latitude
|
|
||||||
in combination with the domain configuration system. Below you can see a visual
|
|
||||||
example of a regional domain:
|
|
||||||
|
|
||||||
.. figure:: ./gluon-hoodselector-domainmap.jpeg
|
|
||||||
:alt: Regional domains visualized as shapes defined by latitude & longitude
|
|
||||||
|
|
||||||
© OpenStreetMap contributors
|
|
||||||
|
|
||||||
Behaviour
|
|
||||||
------------------
|
|
||||||
|
|
||||||
The following is an abstract state diagram which gives an overview
|
|
||||||
of the process:
|
|
||||||
|
|
||||||
.. image:: ./gluon-hoodselector.svg
|
|
||||||
|
|
||||||
The sequence of this diagram reflects the priority of its running modes.
|
|
||||||
Each mode will be explained separately below.
|
|
||||||
|
|
||||||
geolocation mode
|
|
||||||
^^^^^^^^^^^^^^^^
|
|
||||||
|
|
||||||
This mode will only be entered when a node has location coordinates set.
|
|
||||||
Nodes with a position will set their domain based on it.
|
|
||||||
The node will skip to the next mode when the node (a) has no position or
|
|
||||||
(b) its position is not within any of the defined bounding boxes.
|
|
||||||
|
|
||||||
default domain mode
|
|
||||||
^^^^^^^^^^^^^^^^^^^
|
|
||||||
|
|
||||||
This mode will be entered if no other mode before fits.
|
|
||||||
It provides a fallback to the default domain.
|
|
||||||
|
|
||||||
Domain shapes
|
|
||||||
-------------
|
|
||||||
|
|
||||||
There are two types of domains: the unique default one without a defined shape
|
|
||||||
and others which contain shapes.
|
|
||||||
|
|
||||||
* **default domain**
|
|
||||||
|
|
||||||
The default domain doesn't hold any shapes and represents the inverted area of
|
|
||||||
all other shapes held by other domains with geo coordinates. It will only be
|
|
||||||
entered if a node could not be matched to a geo domain. A suggested approach is
|
|
||||||
to define the "old" network as default domain and gradually migrate nodes from
|
|
||||||
there to geo domains.
|
|
||||||
|
|
||||||
* **geo domains**
|
|
||||||
|
|
||||||
A geo domain contains shapes, which are described by three dimensional arrays
|
|
||||||
and represents the geographical size of the domain. There are two possible
|
|
||||||
definitions of these shapes. The first one is using rectangles so that only
|
|
||||||
two coordinates per box are needed to define it (see below for an
|
|
||||||
example). The second one uses polygons which can have multiple edges.
|
|
||||||
Each domain can hold multiple shapes.
|
|
||||||
|
|
||||||
.. image:: ./gluon-hoodselector-rectangle-example.svg
|
|
||||||
|
|
||||||
site.conf
|
|
||||||
---------
|
|
||||||
|
|
||||||
The designer of the shapes must always ensure that no overlapping polygons
|
|
||||||
between domains will be created or else the order in the domain list will
|
|
||||||
become relevant. If for example domain A and B overlap, Hoodselector
|
|
||||||
would, for that overlapping area, only ever reach domain A, but never domain B.
|
|
||||||
Here is an example of a rectangular definition of a shape:
|
|
||||||
Example::
|
|
||||||
|
|
||||||
hoodselector = {
|
|
||||||
shapes = {
|
|
||||||
{
|
|
||||||
{
|
|
||||||
lat = 53.128,
|
|
||||||
lon = 8.187
|
|
||||||
},
|
|
||||||
{
|
|
||||||
lat = 53.163,
|
|
||||||
lon = 8.216
|
|
||||||
},
|
|
||||||
},
|
|
||||||
},
|
|
||||||
},
|
|
||||||
|
|
||||||
Here is an example of a shape defined by a triangle:
|
|
||||||
Example::
|
|
||||||
|
|
||||||
hoodselector = {
|
|
||||||
shapes = {
|
|
||||||
{
|
|
||||||
{
|
|
||||||
lat = 53.128,
|
|
||||||
lon = 8.187
|
|
||||||
},
|
|
||||||
{
|
|
||||||
lat = 53.163,
|
|
||||||
lon = 8.216
|
|
||||||
},
|
|
||||||
{
|
|
||||||
lat = 53.196,
|
|
||||||
lon = 8.194
|
|
||||||
},
|
|
||||||
},
|
|
||||||
},
|
|
||||||
},
|
|
||||||
|
|
||||||
This package is incompatible with :doc:`gluon-config-mode-domain-select`.
|
|
@ -1,291 +0,0 @@
|
|||||||
<?xml version="1.0" encoding="UTF-8"?>
|
|
||||||
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="863pt" height="411pt" viewBox="0 0 863 411" version="1.1">
|
|
||||||
<defs>
|
|
||||||
<g>
|
|
||||||
<symbol overflow="visible" id="glyph0-0">
|
|
||||||
<path style="stroke:none;" d="M 0.640625 2.265625 L 0.640625 -9.015625 L 7.03125 -9.015625 L 7.03125 2.265625 Z M 1.359375 1.546875 L 6.328125 1.546875 L 6.328125 -8.296875 L 1.359375 -8.296875 Z M 1.359375 1.546875 "/>
|
|
||||||
</symbol>
|
|
||||||
<symbol overflow="visible" id="glyph0-1">
|
|
||||||
<path style="stroke:none;" d="M 1.25 -9.328125 L 2.515625 -9.328125 L 2.515625 -1.0625 L 7.0625 -1.0625 L 7.0625 0 L 1.25 0 Z M 1.25 -9.328125 "/>
|
|
||||||
</symbol>
|
|
||||||
<symbol overflow="visible" id="glyph0-2">
|
|
||||||
<path style="stroke:none;" d="M 3.921875 -6.1875 C 3.304688 -6.1875 2.816406 -5.945312 2.453125 -5.46875 C 2.097656 -4.988281 1.921875 -4.332031 1.921875 -3.5 C 1.921875 -2.65625 2.097656 -1.992188 2.453125 -1.515625 C 2.804688 -1.035156 3.296875 -0.796875 3.921875 -0.796875 C 4.535156 -0.796875 5.019531 -1.035156 5.375 -1.515625 C 5.726562 -2.003906 5.90625 -2.664062 5.90625 -3.5 C 5.90625 -4.320312 5.726562 -4.972656 5.375 -5.453125 C 5.019531 -5.941406 4.535156 -6.1875 3.921875 -6.1875 Z M 3.921875 -7.171875 C 4.921875 -7.171875 5.703125 -6.84375 6.265625 -6.1875 C 6.835938 -5.539062 7.125 -4.644531 7.125 -3.5 C 7.125 -2.351562 6.835938 -1.453125 6.265625 -0.796875 C 5.703125 -0.140625 4.921875 0.1875 3.921875 0.1875 C 2.910156 0.1875 2.117188 -0.140625 1.546875 -0.796875 C 0.984375 -1.453125 0.703125 -2.351562 0.703125 -3.5 C 0.703125 -4.644531 0.984375 -5.539062 1.546875 -6.1875 C 2.117188 -6.84375 2.910156 -7.171875 3.921875 -7.171875 Z M 3.921875 -7.171875 "/>
|
|
||||||
</symbol>
|
|
||||||
<symbol overflow="visible" id="glyph0-3">
|
|
||||||
<path style="stroke:none;" d="M 4.390625 -3.515625 C 3.460938 -3.515625 2.816406 -3.40625 2.453125 -3.1875 C 2.097656 -2.976562 1.921875 -2.617188 1.921875 -2.109375 C 1.921875 -1.703125 2.050781 -1.378906 2.3125 -1.140625 C 2.582031 -0.898438 2.953125 -0.78125 3.421875 -0.78125 C 4.054688 -0.78125 4.566406 -1.003906 4.953125 -1.453125 C 5.335938 -1.910156 5.53125 -2.515625 5.53125 -3.265625 L 5.53125 -3.515625 Z M 6.671875 -4 L 6.671875 0 L 5.53125 0 L 5.53125 -1.0625 C 5.269531 -0.632812 4.941406 -0.316406 4.546875 -0.109375 C 4.160156 0.0859375 3.679688 0.1875 3.109375 0.1875 C 2.390625 0.1875 1.816406 -0.015625 1.390625 -0.421875 C 0.972656 -0.828125 0.765625 -1.363281 0.765625 -2.03125 C 0.765625 -2.820312 1.023438 -3.414062 1.546875 -3.8125 C 2.078125 -4.21875 2.867188 -4.421875 3.921875 -4.421875 L 5.53125 -4.421875 L 5.53125 -4.53125 C 5.53125 -5.0625 5.351562 -5.46875 5 -5.75 C 4.65625 -6.039062 4.171875 -6.1875 3.546875 -6.1875 C 3.140625 -6.1875 2.75 -6.140625 2.375 -6.046875 C 2 -5.953125 1.632812 -5.8125 1.28125 -5.625 L 1.28125 -6.671875 C 1.695312 -6.835938 2.101562 -6.960938 2.5 -7.046875 C 2.894531 -7.128906 3.28125 -7.171875 3.65625 -7.171875 C 4.675781 -7.171875 5.429688 -6.90625 5.921875 -6.375 C 6.421875 -5.851562 6.671875 -5.0625 6.671875 -4 Z M 6.671875 -4 "/>
|
|
||||||
</symbol>
|
|
||||||
<symbol overflow="visible" id="glyph0-4">
|
|
||||||
<path style="stroke:none;" d="M 5.8125 -5.9375 L 5.8125 -9.71875 L 6.953125 -9.71875 L 6.953125 0 L 5.8125 0 L 5.8125 -1.046875 C 5.570312 -0.628906 5.265625 -0.316406 4.890625 -0.109375 C 4.523438 0.0859375 4.082031 0.1875 3.5625 0.1875 C 2.71875 0.1875 2.03125 -0.148438 1.5 -0.828125 C 0.96875 -1.503906 0.703125 -2.394531 0.703125 -3.5 C 0.703125 -4.59375 0.96875 -5.476562 1.5 -6.15625 C 2.03125 -6.832031 2.71875 -7.171875 3.5625 -7.171875 C 4.082031 -7.171875 4.523438 -7.066406 4.890625 -6.859375 C 5.265625 -6.660156 5.570312 -6.351562 5.8125 -5.9375 Z M 1.890625 -3.5 C 1.890625 -2.644531 2.0625 -1.976562 2.40625 -1.5 C 2.757812 -1.019531 3.238281 -0.78125 3.84375 -0.78125 C 4.457031 -0.78125 4.9375 -1.019531 5.28125 -1.5 C 5.632812 -1.976562 5.8125 -2.644531 5.8125 -3.5 C 5.8125 -4.34375 5.632812 -5.003906 5.28125 -5.484375 C 4.9375 -5.960938 4.457031 -6.203125 3.84375 -6.203125 C 3.238281 -6.203125 2.757812 -5.960938 2.40625 -5.484375 C 2.0625 -5.003906 1.890625 -4.34375 1.890625 -3.5 Z M 1.890625 -3.5 "/>
|
|
||||||
</symbol>
|
|
||||||
<symbol overflow="visible" id="glyph0-5">
|
|
||||||
<path style="stroke:none;" d=""/>
|
|
||||||
</symbol>
|
|
||||||
<symbol overflow="visible" id="glyph0-6">
|
|
||||||
<path style="stroke:none;" d="M 6.65625 -5.65625 C 6.9375 -6.164062 7.273438 -6.546875 7.671875 -6.796875 C 8.078125 -7.046875 8.550781 -7.171875 9.09375 -7.171875 C 9.820312 -7.171875 10.382812 -6.914062 10.78125 -6.40625 C 11.175781 -5.894531 11.375 -5.164062 11.375 -4.21875 L 11.375 0 L 10.21875 0 L 10.21875 -4.1875 C 10.21875 -4.851562 10.097656 -5.347656 9.859375 -5.671875 C 9.628906 -6.003906 9.269531 -6.171875 8.78125 -6.171875 C 8.1875 -6.171875 7.710938 -5.972656 7.359375 -5.578125 C 7.015625 -5.179688 6.84375 -4.640625 6.84375 -3.953125 L 6.84375 0 L 5.6875 0 L 5.6875 -4.1875 C 5.6875 -4.863281 5.566406 -5.363281 5.328125 -5.6875 C 5.097656 -6.007812 4.734375 -6.171875 4.234375 -6.171875 C 3.648438 -6.171875 3.179688 -5.96875 2.828125 -5.5625 C 2.484375 -5.164062 2.3125 -4.628906 2.3125 -3.953125 L 2.3125 0 L 1.15625 0 L 1.15625 -7 L 2.3125 -7 L 2.3125 -5.90625 C 2.582031 -6.332031 2.898438 -6.648438 3.265625 -6.859375 C 3.628906 -7.066406 4.0625 -7.171875 4.5625 -7.171875 C 5.070312 -7.171875 5.503906 -7.039062 5.859375 -6.78125 C 6.222656 -6.519531 6.488281 -6.144531 6.65625 -5.65625 Z M 6.65625 -5.65625 "/>
|
|
||||||
</symbol>
|
|
||||||
<symbol overflow="visible" id="glyph0-7">
|
|
||||||
<path style="stroke:none;" d="M 1.203125 -7 L 2.359375 -7 L 2.359375 0 L 1.203125 0 Z M 1.203125 -9.71875 L 2.359375 -9.71875 L 2.359375 -8.265625 L 1.203125 -8.265625 Z M 1.203125 -9.71875 "/>
|
|
||||||
</symbol>
|
|
||||||
<symbol overflow="visible" id="glyph0-8">
|
|
||||||
<path style="stroke:none;" d="M 7.015625 -4.21875 L 7.015625 0 L 5.875 0 L 5.875 -4.1875 C 5.875 -4.851562 5.742188 -5.347656 5.484375 -5.671875 C 5.222656 -6.003906 4.835938 -6.171875 4.328125 -6.171875 C 3.703125 -6.171875 3.207031 -5.972656 2.84375 -5.578125 C 2.488281 -5.179688 2.3125 -4.640625 2.3125 -3.953125 L 2.3125 0 L 1.15625 0 L 1.15625 -7 L 2.3125 -7 L 2.3125 -5.90625 C 2.59375 -6.332031 2.914062 -6.648438 3.28125 -6.859375 C 3.65625 -7.066406 4.085938 -7.171875 4.578125 -7.171875 C 5.378906 -7.171875 5.984375 -6.921875 6.390625 -6.421875 C 6.804688 -5.921875 7.015625 -5.1875 7.015625 -4.21875 Z M 7.015625 -4.21875 "/>
|
|
||||||
</symbol>
|
|
||||||
<symbol overflow="visible" id="glyph0-9">
|
|
||||||
<path style="stroke:none;" d="M 5.671875 -6.796875 L 5.671875 -5.703125 C 5.347656 -5.867188 5.007812 -5.992188 4.65625 -6.078125 C 4.300781 -6.160156 3.9375 -6.203125 3.5625 -6.203125 C 3 -6.203125 2.570312 -6.113281 2.28125 -5.9375 C 2 -5.769531 1.859375 -5.507812 1.859375 -5.15625 C 1.859375 -4.882812 1.957031 -4.671875 2.15625 -4.515625 C 2.363281 -4.367188 2.773438 -4.226562 3.390625 -4.09375 L 3.78125 -4 C 4.601562 -3.832031 5.1875 -3.585938 5.53125 -3.265625 C 5.875 -2.941406 6.046875 -2.5 6.046875 -1.9375 C 6.046875 -1.28125 5.785156 -0.757812 5.265625 -0.375 C 4.753906 0 4.050781 0.1875 3.15625 0.1875 C 2.78125 0.1875 2.390625 0.148438 1.984375 0.078125 C 1.578125 0.00390625 1.144531 -0.101562 0.6875 -0.25 L 0.6875 -1.4375 C 1.113281 -1.21875 1.53125 -1.050781 1.9375 -0.9375 C 2.351562 -0.832031 2.765625 -0.78125 3.171875 -0.78125 C 3.710938 -0.78125 4.128906 -0.875 4.421875 -1.0625 C 4.710938 -1.25 4.859375 -1.507812 4.859375 -1.84375 C 4.859375 -2.15625 4.753906 -2.394531 4.546875 -2.5625 C 4.335938 -2.726562 3.875 -2.890625 3.15625 -3.046875 L 2.765625 -3.140625 C 2.046875 -3.285156 1.53125 -3.515625 1.21875 -3.828125 C 0.90625 -4.140625 0.75 -4.566406 0.75 -5.109375 C 0.75 -5.765625 0.976562 -6.269531 1.4375 -6.625 C 1.90625 -6.988281 2.570312 -7.171875 3.4375 -7.171875 C 3.851562 -7.171875 4.25 -7.140625 4.625 -7.078125 C 5 -7.015625 5.347656 -6.921875 5.671875 -6.796875 Z M 5.671875 -6.796875 "/>
|
|
||||||
</symbol>
|
|
||||||
<symbol overflow="visible" id="glyph0-10">
|
|
||||||
<path style="stroke:none;" d="M 2.34375 -8.984375 L 2.34375 -7 L 4.71875 -7 L 4.71875 -6.109375 L 2.34375 -6.109375 L 2.34375 -2.3125 C 2.34375 -1.738281 2.421875 -1.367188 2.578125 -1.203125 C 2.734375 -1.046875 3.050781 -0.96875 3.53125 -0.96875 L 4.71875 -0.96875 L 4.71875 0 L 3.53125 0 C 2.644531 0 2.03125 -0.164062 1.6875 -0.5 C 1.351562 -0.832031 1.1875 -1.4375 1.1875 -2.3125 L 1.1875 -6.109375 L 0.34375 -6.109375 L 0.34375 -7 L 1.1875 -7 L 1.1875 -8.984375 Z M 2.34375 -8.984375 "/>
|
|
||||||
</symbol>
|
|
||||||
<symbol overflow="visible" id="glyph0-11">
|
|
||||||
<path style="stroke:none;" d="M 1.203125 -9.71875 L 2.359375 -9.71875 L 2.359375 0 L 1.203125 0 Z M 1.203125 -9.71875 "/>
|
|
||||||
</symbol>
|
|
||||||
<symbol overflow="visible" id="glyph0-12">
|
|
||||||
<path style="stroke:none;" d="M 0.703125 -7 L 6.171875 -7 L 6.171875 -5.953125 L 1.84375 -0.921875 L 6.171875 -0.921875 L 6.171875 0 L 0.546875 0 L 0.546875 -1.046875 L 4.875 -6.078125 L 0.703125 -6.078125 Z M 0.703125 -7 "/>
|
|
||||||
</symbol>
|
|
||||||
<symbol overflow="visible" id="glyph0-13">
|
|
||||||
<path style="stroke:none;" d="M 5.8125 -3.578125 C 5.8125 -4.410156 5.640625 -5.054688 5.296875 -5.515625 C 4.953125 -5.972656 4.46875 -6.203125 3.84375 -6.203125 C 3.226562 -6.203125 2.75 -5.972656 2.40625 -5.515625 C 2.0625 -5.054688 1.890625 -4.410156 1.890625 -3.578125 C 1.890625 -2.753906 2.0625 -2.113281 2.40625 -1.65625 C 2.75 -1.195312 3.226562 -0.96875 3.84375 -0.96875 C 4.46875 -0.96875 4.953125 -1.195312 5.296875 -1.65625 C 5.640625 -2.113281 5.8125 -2.753906 5.8125 -3.578125 Z M 6.953125 -0.875 C 6.953125 0.320312 6.6875 1.207031 6.15625 1.78125 C 5.632812 2.363281 4.828125 2.65625 3.734375 2.65625 C 3.328125 2.65625 2.945312 2.625 2.59375 2.5625 C 2.238281 2.507812 1.890625 2.421875 1.546875 2.296875 L 1.546875 1.171875 C 1.890625 1.359375 2.222656 1.492188 2.546875 1.578125 C 2.878906 1.671875 3.21875 1.71875 3.5625 1.71875 C 4.3125 1.71875 4.875 1.519531 5.25 1.125 C 5.625 0.726562 5.8125 0.132812 5.8125 -0.65625 L 5.8125 -1.234375 C 5.570312 -0.816406 5.265625 -0.503906 4.890625 -0.296875 C 4.523438 -0.0976562 4.082031 0 3.5625 0 C 2.707031 0 2.015625 -0.328125 1.484375 -0.984375 C 0.960938 -1.640625 0.703125 -2.503906 0.703125 -3.578125 C 0.703125 -4.660156 0.960938 -5.53125 1.484375 -6.1875 C 2.015625 -6.84375 2.707031 -7.171875 3.5625 -7.171875 C 4.082031 -7.171875 4.523438 -7.066406 4.890625 -6.859375 C 5.265625 -6.648438 5.570312 -6.34375 5.8125 -5.9375 L 5.8125 -7 L 6.953125 -7 Z M 6.953125 -0.875 "/>
|
|
||||||
</symbol>
|
|
||||||
<symbol overflow="visible" id="glyph0-14">
|
|
||||||
<path style="stroke:none;" d="M 7.1875 -3.78125 L 7.1875 -3.21875 L 1.90625 -3.21875 C 1.957031 -2.425781 2.195312 -1.820312 2.625 -1.40625 C 3.050781 -1 3.644531 -0.796875 4.40625 -0.796875 C 4.84375 -0.796875 5.269531 -0.847656 5.6875 -0.953125 C 6.101562 -1.066406 6.515625 -1.226562 6.921875 -1.4375 L 6.921875 -0.359375 C 6.515625 -0.179688 6.09375 -0.046875 5.65625 0.046875 C 5.21875 0.140625 4.78125 0.1875 4.34375 0.1875 C 3.21875 0.1875 2.328125 -0.132812 1.671875 -0.78125 C 1.023438 -1.4375 0.703125 -2.320312 0.703125 -3.4375 C 0.703125 -4.582031 1.007812 -5.488281 1.625 -6.15625 C 2.25 -6.832031 3.085938 -7.171875 4.140625 -7.171875 C 5.078125 -7.171875 5.816406 -6.863281 6.359375 -6.25 C 6.910156 -5.644531 7.1875 -4.820312 7.1875 -3.78125 Z M 6.046875 -4.125 C 6.035156 -4.75 5.859375 -5.25 5.515625 -5.625 C 5.171875 -6 4.71875 -6.1875 4.15625 -6.1875 C 3.507812 -6.1875 2.992188 -6.003906 2.609375 -5.640625 C 2.222656 -5.285156 2 -4.78125 1.9375 -4.125 Z M 6.046875 -4.125 "/>
|
|
||||||
</symbol>
|
|
||||||
<symbol overflow="visible" id="glyph0-15">
|
|
||||||
<path style="stroke:none;" d="M 6.25 -6.734375 L 6.25 -5.65625 C 5.914062 -5.832031 5.585938 -5.960938 5.265625 -6.046875 C 4.941406 -6.140625 4.613281 -6.1875 4.28125 -6.1875 C 3.53125 -6.1875 2.945312 -5.953125 2.53125 -5.484375 C 2.125 -5.015625 1.921875 -4.351562 1.921875 -3.5 C 1.921875 -2.644531 2.125 -1.976562 2.53125 -1.5 C 2.945312 -1.03125 3.53125 -0.796875 4.28125 -0.796875 C 4.613281 -0.796875 4.941406 -0.835938 5.265625 -0.921875 C 5.585938 -1.015625 5.914062 -1.148438 6.25 -1.328125 L 6.25 -0.265625 C 5.925781 -0.117188 5.59375 -0.0078125 5.25 0.0625 C 4.90625 0.144531 4.539062 0.1875 4.15625 0.1875 C 3.09375 0.1875 2.25 -0.144531 1.625 -0.8125 C 1.007812 -1.476562 0.703125 -2.375 0.703125 -3.5 C 0.703125 -4.632812 1.015625 -5.53125 1.640625 -6.1875 C 2.273438 -6.84375 3.132812 -7.171875 4.21875 -7.171875 C 4.570312 -7.171875 4.914062 -7.132812 5.25 -7.0625 C 5.59375 -6.988281 5.925781 -6.878906 6.25 -6.734375 Z M 6.25 -6.734375 "/>
|
|
||||||
</symbol>
|
|
||||||
<symbol overflow="visible" id="glyph0-16">
|
|
||||||
<path style="stroke:none;" d="M 2.3125 -1.046875 L 2.3125 2.65625 L 1.15625 2.65625 L 1.15625 -7 L 2.3125 -7 L 2.3125 -5.9375 C 2.5625 -6.351562 2.867188 -6.660156 3.234375 -6.859375 C 3.597656 -7.066406 4.039062 -7.171875 4.5625 -7.171875 C 5.40625 -7.171875 6.09375 -6.832031 6.625 -6.15625 C 7.15625 -5.476562 7.421875 -4.59375 7.421875 -3.5 C 7.421875 -2.394531 7.15625 -1.503906 6.625 -0.828125 C 6.09375 -0.148438 5.40625 0.1875 4.5625 0.1875 C 4.039062 0.1875 3.597656 0.0859375 3.234375 -0.109375 C 2.867188 -0.316406 2.5625 -0.628906 2.3125 -1.046875 Z M 6.234375 -3.5 C 6.234375 -4.34375 6.054688 -5.003906 5.703125 -5.484375 C 5.359375 -5.960938 4.882812 -6.203125 4.28125 -6.203125 C 3.664062 -6.203125 3.179688 -5.960938 2.828125 -5.484375 C 2.484375 -5.003906 2.3125 -4.34375 2.3125 -3.5 C 2.3125 -2.644531 2.484375 -1.976562 2.828125 -1.5 C 3.179688 -1.019531 3.664062 -0.78125 4.28125 -0.78125 C 4.882812 -0.78125 5.359375 -1.019531 5.703125 -1.5 C 6.054688 -1.976562 6.234375 -2.644531 6.234375 -3.5 Z M 6.234375 -3.5 "/>
|
|
||||||
</symbol>
|
|
||||||
<symbol overflow="visible" id="glyph0-17">
|
|
||||||
<path style="stroke:none;" d="M 1.375 -1.59375 L 2.6875 -1.59375 L 2.6875 0 L 1.375 0 Z M 1.375 -1.59375 "/>
|
|
||||||
</symbol>
|
|
||||||
<symbol overflow="visible" id="glyph0-18">
|
|
||||||
<path style="stroke:none;" d="M 7.015625 -7 L 4.5 -3.59375 L 7.15625 0 L 5.796875 0 L 3.765625 -2.75 L 1.71875 0 L 0.375 0 L 3.09375 -3.65625 L 0.59375 -7 L 1.953125 -7 L 3.8125 -4.5 L 5.671875 -7 Z M 7.015625 -7 "/>
|
|
||||||
</symbol>
|
|
||||||
<symbol overflow="visible" id="glyph0-19">
|
|
||||||
<path style="stroke:none;" d="M 4.75 -9.71875 L 4.75 -8.765625 L 3.65625 -8.765625 C 3.238281 -8.765625 2.945312 -8.679688 2.78125 -8.515625 C 2.625 -8.347656 2.546875 -8.046875 2.546875 -7.609375 L 2.546875 -7 L 4.4375 -7 L 4.4375 -6.109375 L 2.546875 -6.109375 L 2.546875 0 L 1.390625 0 L 1.390625 -6.109375 L 0.296875 -6.109375 L 0.296875 -7 L 1.390625 -7 L 1.390625 -7.484375 C 1.390625 -8.265625 1.570312 -8.832031 1.9375 -9.1875 C 2.300781 -9.539062 2.875 -9.71875 3.65625 -9.71875 Z M 4.75 -9.71875 "/>
|
|
||||||
</symbol>
|
|
||||||
<symbol overflow="visible" id="glyph0-20">
|
|
||||||
<path style="stroke:none;" d="M 2.515625 -8.296875 L 2.515625 -1.03125 L 4.046875 -1.03125 C 5.328125 -1.03125 6.265625 -1.320312 6.859375 -1.90625 C 7.460938 -2.488281 7.765625 -3.410156 7.765625 -4.671875 C 7.765625 -5.921875 7.460938 -6.835938 6.859375 -7.421875 C 6.265625 -8.003906 5.328125 -8.296875 4.046875 -8.296875 Z M 1.25 -9.328125 L 3.84375 -9.328125 C 5.65625 -9.328125 6.984375 -8.953125 7.828125 -8.203125 C 8.671875 -7.453125 9.09375 -6.273438 9.09375 -4.671875 C 9.09375 -3.066406 8.664062 -1.882812 7.8125 -1.125 C 6.96875 -0.375 5.644531 0 3.84375 0 L 1.25 0 Z M 1.25 -9.328125 "/>
|
|
||||||
</symbol>
|
|
||||||
<symbol overflow="visible" id="glyph0-21">
|
|
||||||
<path style="stroke:none;" d="M 5.265625 -5.921875 C 5.128906 -5.992188 4.984375 -6.046875 4.828125 -6.078125 C 4.679688 -6.117188 4.519531 -6.140625 4.34375 -6.140625 C 3.6875 -6.140625 3.179688 -5.925781 2.828125 -5.5 C 2.484375 -5.082031 2.3125 -4.476562 2.3125 -3.6875 L 2.3125 0 L 1.15625 0 L 1.15625 -7 L 2.3125 -7 L 2.3125 -5.90625 C 2.5625 -6.332031 2.878906 -6.648438 3.265625 -6.859375 C 3.648438 -7.066406 4.117188 -7.171875 4.671875 -7.171875 C 4.753906 -7.171875 4.84375 -7.164062 4.9375 -7.15625 C 5.03125 -7.144531 5.132812 -7.128906 5.25 -7.109375 Z M 5.265625 -5.921875 "/>
|
|
||||||
</symbol>
|
|
||||||
<symbol overflow="visible" id="glyph0-22">
|
|
||||||
<path style="stroke:none;" d="M 1.09375 -2.765625 L 1.09375 -7 L 2.234375 -7 L 2.234375 -2.8125 C 2.234375 -2.144531 2.363281 -1.644531 2.625 -1.3125 C 2.882812 -0.976562 3.269531 -0.8125 3.78125 -0.8125 C 4.40625 -0.8125 4.894531 -1.007812 5.25 -1.40625 C 5.613281 -1.800781 5.796875 -2.34375 5.796875 -3.03125 L 5.796875 -7 L 6.953125 -7 L 6.953125 0 L 5.796875 0 L 5.796875 -1.078125 C 5.515625 -0.648438 5.191406 -0.332031 4.828125 -0.125 C 4.460938 0.0820312 4.035156 0.1875 3.546875 0.1875 C 2.742188 0.1875 2.132812 -0.0625 1.71875 -0.5625 C 1.300781 -1.0625 1.09375 -1.796875 1.09375 -2.765625 Z M 1.09375 -2.765625 "/>
|
|
||||||
</symbol>
|
|
||||||
<symbol overflow="visible" id="glyph0-23">
|
|
||||||
<path style="stroke:none;" d="M 1.25 -9.328125 L 7.15625 -9.328125 L 7.15625 -8.265625 L 2.515625 -8.265625 L 2.515625 -5.5 L 6.953125 -5.5 L 6.953125 -4.4375 L 2.515625 -4.4375 L 2.515625 -1.0625 L 7.265625 -1.0625 L 7.265625 0 L 1.25 0 Z M 1.25 -9.328125 "/>
|
|
||||||
</symbol>
|
|
||||||
<symbol overflow="visible" id="glyph0-24">
|
|
||||||
<path style="stroke:none;" d="M 6.84375 -9.015625 L 6.84375 -7.796875 C 6.363281 -8.023438 5.910156 -8.191406 5.484375 -8.296875 C 5.066406 -8.410156 4.660156 -8.46875 4.265625 -8.46875 C 3.578125 -8.46875 3.046875 -8.332031 2.671875 -8.0625 C 2.296875 -7.800781 2.109375 -7.425781 2.109375 -6.9375 C 2.109375 -6.519531 2.234375 -6.207031 2.484375 -6 C 2.734375 -5.789062 3.203125 -5.625 3.890625 -5.5 L 4.65625 -5.34375 C 5.59375 -5.15625 6.285156 -4.835938 6.734375 -4.390625 C 7.179688 -3.941406 7.40625 -3.335938 7.40625 -2.578125 C 7.40625 -1.671875 7.101562 -0.984375 6.5 -0.515625 C 5.894531 -0.046875 5.007812 0.1875 3.84375 0.1875 C 3.394531 0.1875 2.921875 0.132812 2.421875 0.03125 C 1.929688 -0.0703125 1.414062 -0.21875 0.875 -0.40625 L 0.875 -1.71875 C 1.394531 -1.425781 1.898438 -1.207031 2.390625 -1.0625 C 2.878906 -0.914062 3.363281 -0.84375 3.84375 -0.84375 C 4.5625 -0.84375 5.113281 -0.984375 5.5 -1.265625 C 5.894531 -1.546875 6.09375 -1.953125 6.09375 -2.484375 C 6.09375 -2.941406 5.953125 -3.296875 5.671875 -3.546875 C 5.390625 -3.804688 4.925781 -4.003906 4.28125 -4.140625 L 3.515625 -4.28125 C 2.578125 -4.46875 1.894531 -4.757812 1.46875 -5.15625 C 1.050781 -5.5625 0.84375 -6.117188 0.84375 -6.828125 C 0.84375 -7.660156 1.132812 -8.3125 1.71875 -8.78125 C 2.300781 -9.257812 3.101562 -9.5 4.125 -9.5 C 4.5625 -9.5 5.003906 -9.457031 5.453125 -9.375 C 5.910156 -9.300781 6.375 -9.179688 6.84375 -9.015625 Z M 6.84375 -9.015625 "/>
|
|
||||||
</symbol>
|
|
||||||
</g>
|
|
||||||
</defs>
|
|
||||||
<g id="surface2229">
|
|
||||||
<rect x="0" y="0" width="863" height="411" style="fill:rgb(100%,100%,100%);fill-opacity:1;stroke:none;"/>
|
|
||||||
<path style="fill:none;stroke-width:0.05;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(0%,0%,0%);stroke-opacity:1;stroke-miterlimit:10;" d="M 5.118086 6.441094 L 9.277656 6.466289 " transform="matrix(20,0,0,20,-36.1,-65.11875)"/>
|
|
||||||
<path style="fill-rule:evenodd;fill:rgb(0%,0%,0%);fill-opacity:1;stroke-width:0.05;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(0%,0%,0%);stroke-opacity:1;stroke-miterlimit:10;" d="M 9.276094 6.716289 L 9.777656 6.469219 L 9.279023 6.216289 Z M 9.276094 6.716289 " transform="matrix(20,0,0,20,-36.1,-65.11875)"/>
|
|
||||||
<path style="fill-rule:evenodd;fill:rgb(100%,100%,100%);fill-opacity:1;stroke-width:0.05;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(0%,0%,0%);stroke-opacity:1;stroke-miterlimit:10;" d="M 15.924336 6.487969 C 15.924336 7.765703 14.559492 8.801445 12.876094 8.801445 C 11.1925 8.801445 9.827656 7.765703 9.827656 6.487969 C 9.827656 5.210234 11.1925 4.174492 12.876094 4.174492 C 14.559492 4.174492 15.924336 5.210234 15.924336 6.487969 " transform="matrix(20,0,0,20,-36.1,-65.11875)"/>
|
|
||||||
<g style="fill:rgb(0%,0%,0%);fill-opacity:1;">
|
|
||||||
<use xlink:href="#glyph0-1" x="176.851562" y="68.529405"/>
|
|
||||||
<use xlink:href="#glyph0-2" x="183.796007" y="68.529405"/>
|
|
||||||
<use xlink:href="#glyph0-3" x="191.573785" y="68.529405"/>
|
|
||||||
<use xlink:href="#glyph0-4" x="199.351562" y="68.529405"/>
|
|
||||||
<use xlink:href="#glyph0-5" x="207.407118" y="68.529405"/>
|
|
||||||
<use xlink:href="#glyph0-4" x="211.573785" y="68.529405"/>
|
|
||||||
<use xlink:href="#glyph0-2" x="219.62934" y="68.529405"/>
|
|
||||||
<use xlink:href="#glyph0-6" x="227.407118" y="68.529405"/>
|
|
||||||
<use xlink:href="#glyph0-3" x="239.907118" y="68.529405"/>
|
|
||||||
<use xlink:href="#glyph0-7" x="247.684896" y="68.529405"/>
|
|
||||||
<use xlink:href="#glyph0-8" x="251.296007" y="68.529405"/>
|
|
||||||
<use xlink:href="#glyph0-9" x="259.351562" y="68.529405"/>
|
|
||||||
</g>
|
|
||||||
<path style="fill:none;stroke-width:0.05;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(0%,0%,0%);stroke-opacity:1;stroke-miterlimit:10;" d="M 15.949141 6.487969 L 17.296992 6.487969 " transform="matrix(20,0,0,20,-36.1,-65.11875)"/>
|
|
||||||
<path style="fill-rule:evenodd;fill:rgb(0%,0%,0%);fill-opacity:1;stroke-width:0.05;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(0%,0%,0%);stroke-opacity:1;stroke-miterlimit:10;" d="M 17.296992 6.737969 L 17.796992 6.487969 L 17.296992 6.237969 Z M 17.296992 6.737969 " transform="matrix(20,0,0,20,-36.1,-65.11875)"/>
|
|
||||||
<path style=" stroke:none;fill-rule:evenodd;fill:rgb(0%,100%,0%);fill-opacity:1;" d="M 69.898438 0 L 147.648438 0 L 147.648438 14.898438 L 69.898438 14.898438 Z M 69.898438 0 "/>
|
|
||||||
<g style="fill:rgb(0%,0%,0%);fill-opacity:1;">
|
|
||||||
<use xlink:href="#glyph0-7" x="69.898438" y="11.88878"/>
|
|
||||||
<use xlink:href="#glyph0-8" x="73.509549" y="11.88878"/>
|
|
||||||
<use xlink:href="#glyph0-7" x="81.565104" y="11.88878"/>
|
|
||||||
<use xlink:href="#glyph0-10" x="85.176215" y="11.88878"/>
|
|
||||||
<use xlink:href="#glyph0-7" x="90.176215" y="11.88878"/>
|
|
||||||
<use xlink:href="#glyph0-3" x="93.787326" y="11.88878"/>
|
|
||||||
<use xlink:href="#glyph0-11" x="101.565104" y="11.88878"/>
|
|
||||||
<use xlink:href="#glyph0-7" x="105.176215" y="11.88878"/>
|
|
||||||
<use xlink:href="#glyph0-12" x="108.787326" y="11.88878"/>
|
|
||||||
<use xlink:href="#glyph0-3" x="115.453993" y="11.88878"/>
|
|
||||||
<use xlink:href="#glyph0-10" x="123.231771" y="11.88878"/>
|
|
||||||
<use xlink:href="#glyph0-7" x="128.231771" y="11.88878"/>
|
|
||||||
<use xlink:href="#glyph0-2" x="131.842882" y="11.88878"/>
|
|
||||||
<use xlink:href="#glyph0-8" x="139.62066" y="11.88878"/>
|
|
||||||
</g>
|
|
||||||
<path style=" stroke:none;fill-rule:evenodd;fill:rgb(0%,100%,0%);fill-opacity:1;" d="M 324.351562 0 L 439.453125 0 L 439.453125 14.898438 L 324.351562 14.898438 Z M 324.351562 0 "/>
|
|
||||||
<g style="fill:rgb(0%,0%,0%);fill-opacity:1;">
|
|
||||||
<use xlink:href="#glyph0-13" x="324.691406" y="11.88878"/>
|
|
||||||
<use xlink:href="#glyph0-14" x="332.746962" y="11.88878"/>
|
|
||||||
<use xlink:href="#glyph0-2" x="340.52474" y="11.88878"/>
|
|
||||||
<use xlink:href="#glyph0-11" x="348.302517" y="11.88878"/>
|
|
||||||
<use xlink:href="#glyph0-2" x="351.913628" y="11.88878"/>
|
|
||||||
<use xlink:href="#glyph0-15" x="359.691406" y="11.88878"/>
|
|
||||||
<use xlink:href="#glyph0-3" x="366.635851" y="11.88878"/>
|
|
||||||
<use xlink:href="#glyph0-10" x="374.413628" y="11.88878"/>
|
|
||||||
<use xlink:href="#glyph0-7" x="379.413628" y="11.88878"/>
|
|
||||||
<use xlink:href="#glyph0-2" x="383.02474" y="11.88878"/>
|
|
||||||
<use xlink:href="#glyph0-8" x="390.802517" y="11.88878"/>
|
|
||||||
<use xlink:href="#glyph0-5" x="398.858073" y="11.88878"/>
|
|
||||||
<use xlink:href="#glyph0-6" x="403.02474" y="11.88878"/>
|
|
||||||
<use xlink:href="#glyph0-2" x="415.52474" y="11.88878"/>
|
|
||||||
<use xlink:href="#glyph0-4" x="423.302517" y="11.88878"/>
|
|
||||||
<use xlink:href="#glyph0-14" x="431.358073" y="11.88878"/>
|
|
||||||
</g>
|
|
||||||
<path style="fill-rule:evenodd;fill:rgb(100%,100%,100%);fill-opacity:1;stroke-width:0.05;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(0%,0%,0%);stroke-opacity:1;stroke-miterlimit:10;" d="M 24.205195 6.487969 C 24.205195 7.495391 22.781758 8.311992 21.026094 8.311992 C 19.270234 8.311992 17.846992 7.495391 17.846992 6.487969 C 17.846992 5.480742 19.270234 4.664141 21.026094 4.664141 C 22.781758 4.664141 24.205195 5.480742 24.205195 6.487969 " transform="matrix(20,0,0,20,-36.1,-65.11875)"/>
|
|
||||||
<g style="fill:rgb(0%,0%,0%);fill-opacity:1;">
|
|
||||||
<use xlink:href="#glyph0-13" x="339.851562" y="68.529405"/>
|
|
||||||
<use xlink:href="#glyph0-14" x="347.907118" y="68.529405"/>
|
|
||||||
<use xlink:href="#glyph0-2" x="355.684896" y="68.529405"/>
|
|
||||||
<use xlink:href="#glyph0-5" x="363.462674" y="68.529405"/>
|
|
||||||
<use xlink:href="#glyph0-16" x="367.62934" y="68.529405"/>
|
|
||||||
<use xlink:href="#glyph0-2" x="375.684896" y="68.529405"/>
|
|
||||||
<use xlink:href="#glyph0-9" x="383.462674" y="68.529405"/>
|
|
||||||
<use xlink:href="#glyph0-17" x="390.12934" y="68.529405"/>
|
|
||||||
<use xlink:href="#glyph0-5" x="394.296007" y="68.529405"/>
|
|
||||||
<use xlink:href="#glyph0-14" x="398.462674" y="68.529405"/>
|
|
||||||
<use xlink:href="#glyph0-18" x="406.240451" y="68.529405"/>
|
|
||||||
<use xlink:href="#glyph0-7" x="413.740451" y="68.529405"/>
|
|
||||||
<use xlink:href="#glyph0-9" x="417.351562" y="68.529405"/>
|
|
||||||
<use xlink:href="#glyph0-10" x="424.018229" y="68.529405"/>
|
|
||||||
</g>
|
|
||||||
<path style="fill:none;stroke-width:0.05;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(0%,0%,0%);stroke-opacity:1;stroke-miterlimit:10;" d="M 24.204609 6.467266 L 29.831758 6.430352 " transform="matrix(20,0,0,20,-36.1,-65.11875)"/>
|
|
||||||
<path style="fill-rule:evenodd;fill:rgb(0%,0%,0%);fill-opacity:1;stroke-width:0.05;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(0%,0%,0%);stroke-opacity:1;stroke-miterlimit:10;" d="M 29.83332 6.680352 L 30.331758 6.427031 L 29.830195 6.180352 Z M 29.83332 6.680352 " transform="matrix(20,0,0,20,-36.1,-65.11875)"/>
|
|
||||||
<g style="fill:rgb(0%,0%,0%);fill-opacity:1;">
|
|
||||||
<use xlink:href="#glyph0-19" x="484.898438" y="56.88878"/>
|
|
||||||
<use xlink:href="#glyph0-3" x="489.342882" y="56.88878"/>
|
|
||||||
<use xlink:href="#glyph0-11" x="497.12066" y="56.88878"/>
|
|
||||||
<use xlink:href="#glyph0-9" x="500.731771" y="56.88878"/>
|
|
||||||
<use xlink:href="#glyph0-14" x="507.398438" y="56.88878"/>
|
|
||||||
</g>
|
|
||||||
<path style="fill-rule:evenodd;fill:rgb(100%,100%,100%);fill-opacity:1;stroke-width:0.05;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(0%,0%,0%);stroke-opacity:1;stroke-miterlimit:10;" d="M 24.225312 13.150078 C 24.225312 14.040703 22.781172 14.762773 20.999922 14.762773 C 19.218672 14.762773 17.774531 14.040703 17.774531 13.150078 C 17.774531 12.259453 19.218672 11.537383 20.999922 11.537383 C 22.781172 11.537383 24.225312 12.259453 24.225312 13.150078 " transform="matrix(20,0,0,20,-36.1,-65.11875)"/>
|
|
||||||
<g style="fill:rgb(0%,0%,0%);fill-opacity:1;">
|
|
||||||
<use xlink:href="#glyph0-13" x="334.875" y="201.771593"/>
|
|
||||||
<use xlink:href="#glyph0-14" x="342.930556" y="201.771593"/>
|
|
||||||
<use xlink:href="#glyph0-10" x="350.708333" y="201.771593"/>
|
|
||||||
<use xlink:href="#glyph0-5" x="355.708333" y="201.771593"/>
|
|
||||||
<use xlink:href="#glyph0-13" x="359.875" y="201.771593"/>
|
|
||||||
<use xlink:href="#glyph0-14" x="367.930556" y="201.771593"/>
|
|
||||||
<use xlink:href="#glyph0-2" x="375.708333" y="201.771593"/>
|
|
||||||
<use xlink:href="#glyph0-20" x="383.486111" y="201.771593"/>
|
|
||||||
<use xlink:href="#glyph0-2" x="393.208333" y="201.771593"/>
|
|
||||||
<use xlink:href="#glyph0-6" x="400.986111" y="201.771593"/>
|
|
||||||
<use xlink:href="#glyph0-3" x="413.486111" y="201.771593"/>
|
|
||||||
<use xlink:href="#glyph0-7" x="421.263889" y="201.771593"/>
|
|
||||||
<use xlink:href="#glyph0-8" x="424.875" y="201.771593"/>
|
|
||||||
</g>
|
|
||||||
<path style="fill:none;stroke-width:0.05;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(0%,0%,0%);stroke-opacity:1;stroke-miterlimit:10;" d="M 21.018867 8.336602 L 21.00832 10.987969 " transform="matrix(20,0,0,20,-36.1,-65.11875)"/>
|
|
||||||
<path style="fill-rule:evenodd;fill:rgb(0%,0%,0%);fill-opacity:1;stroke-width:0.05;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(0%,0%,0%);stroke-opacity:1;stroke-miterlimit:10;" d="M 20.75832 10.986992 L 21.006367 11.487969 L 21.25832 10.988945 Z M 20.75832 10.986992 " transform="matrix(20,0,0,20,-36.1,-65.11875)"/>
|
|
||||||
<g style="fill:rgb(0%,0%,0%);fill-opacity:1;">
|
|
||||||
<use xlink:href="#glyph0-10" x="391.898438" y="129.88878"/>
|
|
||||||
<use xlink:href="#glyph0-21" x="396.898438" y="129.88878"/>
|
|
||||||
<use xlink:href="#glyph0-22" x="402.176215" y="129.88878"/>
|
|
||||||
<use xlink:href="#glyph0-14" x="410.231771" y="129.88878"/>
|
|
||||||
</g>
|
|
||||||
<path style="fill:none;stroke-width:0.05;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(0%,0%,0%);stroke-opacity:1;stroke-miterlimit:10;" d="M 20.999922 14.786797 L 20.999922 16.078789 " transform="matrix(20,0,0,20,-36.1,-65.11875)"/>
|
|
||||||
<path style="fill-rule:evenodd;fill:rgb(0%,0%,0%);fill-opacity:1;stroke-width:0.05;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(0%,0%,0%);stroke-opacity:1;stroke-miterlimit:10;" d="M 20.749922 16.078789 L 20.999922 16.578789 L 21.249922 16.078789 Z M 20.749922 16.078789 " transform="matrix(20,0,0,20,-36.1,-65.11875)"/>
|
|
||||||
<path style="fill:none;stroke-width:0.05;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(0%,0%,0%);stroke-opacity:1;stroke-miterlimit:10;" d="M 23.262812 11.97957 L 31.010469 7.972539 " transform="matrix(20,0,0,20,-36.1,-65.11875)"/>
|
|
||||||
<path style="fill-rule:evenodd;fill:rgb(0%,0%,0%);fill-opacity:1;stroke-width:0.05;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(0%,0%,0%);stroke-opacity:1;stroke-miterlimit:10;" d="M 31.125312 8.194609 L 31.454609 7.742852 L 30.895625 7.750469 Z M 31.125312 8.194609 " transform="matrix(20,0,0,20,-36.1,-65.11875)"/>
|
|
||||||
<path style="fill-rule:evenodd;fill:rgb(100%,100%,100%);fill-opacity:1;stroke-width:0.05;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(0%,0%,0%);stroke-opacity:1;stroke-miterlimit:10;" d="M 24.1925 18.224883 C 24.1925 19.106523 22.763203 19.821172 21.000117 19.821172 C 19.237031 19.821172 17.807734 19.106523 17.807734 18.224883 C 17.807734 17.343438 19.237031 16.628789 21.000117 16.628789 C 22.763203 16.628789 24.1925 17.343438 24.1925 18.224883 " transform="matrix(20,0,0,20,-36.1,-65.11875)"/>
|
|
||||||
<g style="fill:rgb(0%,0%,0%);fill-opacity:1;">
|
|
||||||
<use xlink:href="#glyph0-9" x="335.582031" y="303.267687"/>
|
|
||||||
<use xlink:href="#glyph0-14" x="342.248698" y="303.267687"/>
|
|
||||||
<use xlink:href="#glyph0-10" x="350.026476" y="303.267687"/>
|
|
||||||
<use xlink:href="#glyph0-5" x="355.026476" y="303.267687"/>
|
|
||||||
<use xlink:href="#glyph0-13" x="359.193142" y="303.267687"/>
|
|
||||||
<use xlink:href="#glyph0-14" x="367.248698" y="303.267687"/>
|
|
||||||
<use xlink:href="#glyph0-2" x="375.026476" y="303.267687"/>
|
|
||||||
<use xlink:href="#glyph0-20" x="382.804253" y="303.267687"/>
|
|
||||||
<use xlink:href="#glyph0-2" x="392.526476" y="303.267687"/>
|
|
||||||
<use xlink:href="#glyph0-6" x="400.304253" y="303.267687"/>
|
|
||||||
<use xlink:href="#glyph0-3" x="412.804253" y="303.267687"/>
|
|
||||||
<use xlink:href="#glyph0-7" x="420.582031" y="303.267687"/>
|
|
||||||
<use xlink:href="#glyph0-8" x="424.193142" y="303.267687"/>
|
|
||||||
</g>
|
|
||||||
<g style="fill:rgb(0%,0%,0%);fill-opacity:1;">
|
|
||||||
<use xlink:href="#glyph0-19" x="479.898438" y="130.13878"/>
|
|
||||||
<use xlink:href="#glyph0-3" x="484.342882" y="130.13878"/>
|
|
||||||
<use xlink:href="#glyph0-11" x="492.12066" y="130.13878"/>
|
|
||||||
<use xlink:href="#glyph0-9" x="495.731771" y="130.13878"/>
|
|
||||||
<use xlink:href="#glyph0-14" x="502.398438" y="130.13878"/>
|
|
||||||
</g>
|
|
||||||
<g style="fill:rgb(0%,0%,0%);fill-opacity:1;">
|
|
||||||
<use xlink:href="#glyph0-10" x="393.898438" y="248.13878"/>
|
|
||||||
<use xlink:href="#glyph0-21" x="398.898438" y="248.13878"/>
|
|
||||||
<use xlink:href="#glyph0-22" x="404.176215" y="248.13878"/>
|
|
||||||
<use xlink:href="#glyph0-14" x="412.231771" y="248.13878"/>
|
|
||||||
</g>
|
|
||||||
<path style="fill-rule:evenodd;fill:rgb(100%,100%,100%);fill-opacity:1;stroke-width:0.05;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(0%,0%,0%);stroke-opacity:1;stroke-miterlimit:10;" d="M 23.212227 22.674883 C 23.212227 23.28582 22.221797 23.780938 21.000117 23.780938 C 19.778242 23.780938 18.787812 23.28582 18.787812 22.674883 C 18.787812 22.064141 19.778242 21.568828 21.000117 21.568828 C 22.221797 21.568828 23.212227 22.064141 23.212227 22.674883 " transform="matrix(20,0,0,20,-36.1,-65.11875)"/>
|
|
||||||
<g style="fill:rgb(0%,0%,0%);fill-opacity:1;">
|
|
||||||
<use xlink:href="#glyph0-23" x="371.832031" y="392.267687"/>
|
|
||||||
<use xlink:href="#glyph0-18" x="379.887587" y="392.267687"/>
|
|
||||||
<use xlink:href="#glyph0-7" x="387.387587" y="392.267687"/>
|
|
||||||
<use xlink:href="#glyph0-10" x="390.998698" y="392.267687"/>
|
|
||||||
</g>
|
|
||||||
<path style="fill:none;stroke-width:0.05;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(0%,0%,0%);stroke-opacity:1;stroke-miterlimit:10;" d="M 21.000117 19.846367 L 21.000117 21.019023 " transform="matrix(20,0,0,20,-36.1,-65.11875)"/>
|
|
||||||
<path style="fill-rule:evenodd;fill:rgb(0%,0%,0%);fill-opacity:1;stroke-width:0.05;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(0%,0%,0%);stroke-opacity:1;stroke-miterlimit:10;" d="M 20.750117 21.019023 L 21.000117 21.519023 L 21.250117 21.019023 Z M 20.750117 21.019023 " transform="matrix(20,0,0,20,-36.1,-65.11875)"/>
|
|
||||||
<path style="fill-rule:evenodd;fill:rgb(100%,100%,100%);fill-opacity:1;stroke-width:0.05;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(0%,0%,0%);stroke-opacity:1;stroke-miterlimit:10;" d="M 5.094062 6.431133 C 5.094062 7.086211 4.363398 7.617266 3.462031 7.617266 C 2.560664 7.617266 1.83 7.086211 1.83 6.431133 C 1.83 5.776055 2.560664 5.245 3.462031 5.245 C 4.363398 5.245 5.094062 5.776055 5.094062 6.431133 " transform="matrix(20,0,0,20,-36.1,-65.11875)"/>
|
|
||||||
<g style="fill:rgb(0%,0%,0%);fill-opacity:1;">
|
|
||||||
<use xlink:href="#glyph0-24" x="17.59375" y="67.392687"/>
|
|
||||||
<use xlink:href="#glyph0-10" x="25.649306" y="67.392687"/>
|
|
||||||
<use xlink:href="#glyph0-3" x="30.649306" y="67.392687"/>
|
|
||||||
<use xlink:href="#glyph0-21" x="38.427083" y="67.392687"/>
|
|
||||||
<use xlink:href="#glyph0-10" x="43.704861" y="67.392687"/>
|
|
||||||
</g>
|
|
||||||
<path style=" stroke:none;fill-rule:evenodd;fill:rgb(0%,100%,0%);fill-opacity:1;" d="M 574.574219 0.300781 L 712.023438 0.300781 L 712.023438 15.199219 L 574.574219 15.199219 Z M 574.574219 0.300781 "/>
|
|
||||||
<g style="fill:rgb(0%,0%,0%);fill-opacity:1;">
|
|
||||||
<use xlink:href="#glyph0-4" x="574.84375" y="12.185655"/>
|
|
||||||
<use xlink:href="#glyph0-14" x="582.899306" y="12.185655"/>
|
|
||||||
<use xlink:href="#glyph0-19" x="590.677083" y="12.185655"/>
|
|
||||||
<use xlink:href="#glyph0-3" x="595.121528" y="12.185655"/>
|
|
||||||
<use xlink:href="#glyph0-22" x="602.899306" y="12.185655"/>
|
|
||||||
<use xlink:href="#glyph0-11" x="610.954861" y="12.185655"/>
|
|
||||||
<use xlink:href="#glyph0-10" x="614.565972" y="12.185655"/>
|
|
||||||
<use xlink:href="#glyph0-5" x="619.565972" y="12.185655"/>
|
|
||||||
<use xlink:href="#glyph0-4" x="623.732639" y="12.185655"/>
|
|
||||||
<use xlink:href="#glyph0-2" x="631.788194" y="12.185655"/>
|
|
||||||
<use xlink:href="#glyph0-6" x="639.565972" y="12.185655"/>
|
|
||||||
<use xlink:href="#glyph0-3" x="652.065972" y="12.185655"/>
|
|
||||||
<use xlink:href="#glyph0-7" x="659.84375" y="12.185655"/>
|
|
||||||
<use xlink:href="#glyph0-8" x="663.454861" y="12.185655"/>
|
|
||||||
<use xlink:href="#glyph0-5" x="671.510417" y="12.185655"/>
|
|
||||||
<use xlink:href="#glyph0-6" x="675.677083" y="12.185655"/>
|
|
||||||
<use xlink:href="#glyph0-2" x="688.177083" y="12.185655"/>
|
|
||||||
<use xlink:href="#glyph0-4" x="695.954861" y="12.185655"/>
|
|
||||||
<use xlink:href="#glyph0-14" x="704.010417" y="12.185655"/>
|
|
||||||
</g>
|
|
||||||
<path style="fill-rule:evenodd;fill:rgb(100%,100%,100%);fill-opacity:1;stroke-width:0.05;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(0%,0%,0%);stroke-opacity:1;stroke-miterlimit:10;" d="M 37.710859 6.402812 C 37.710859 7.414922 36.069844 8.23543 34.04543 8.23543 C 32.021016 8.23543 30.38 7.414922 30.38 6.402812 C 30.38 5.390508 32.021016 4.57 34.04543 4.57 C 36.069844 4.57 37.710859 5.390508 37.710859 6.402812 " transform="matrix(20,0,0,20,-36.1,-65.11875)"/>
|
|
||||||
<g style="fill:rgb(0%,0%,0%);fill-opacity:1;">
|
|
||||||
<use xlink:href="#glyph0-9" x="585.921875" y="66.822374"/>
|
|
||||||
<use xlink:href="#glyph0-14" x="592.588542" y="66.822374"/>
|
|
||||||
<use xlink:href="#glyph0-10" x="600.366319" y="66.822374"/>
|
|
||||||
<use xlink:href="#glyph0-5" x="605.366319" y="66.822374"/>
|
|
||||||
<use xlink:href="#glyph0-4" x="609.532986" y="66.822374"/>
|
|
||||||
<use xlink:href="#glyph0-14" x="617.588542" y="66.822374"/>
|
|
||||||
<use xlink:href="#glyph0-19" x="625.366319" y="66.822374"/>
|
|
||||||
<use xlink:href="#glyph0-3" x="629.810764" y="66.822374"/>
|
|
||||||
<use xlink:href="#glyph0-22" x="637.588542" y="66.822374"/>
|
|
||||||
<use xlink:href="#glyph0-11" x="645.644097" y="66.822374"/>
|
|
||||||
<use xlink:href="#glyph0-10" x="649.255208" y="66.822374"/>
|
|
||||||
<use xlink:href="#glyph0-20" x="654.255208" y="66.822374"/>
|
|
||||||
<use xlink:href="#glyph0-2" x="663.977431" y="66.822374"/>
|
|
||||||
<use xlink:href="#glyph0-6" x="671.755208" y="66.822374"/>
|
|
||||||
<use xlink:href="#glyph0-3" x="684.255208" y="66.822374"/>
|
|
||||||
<use xlink:href="#glyph0-7" x="692.032986" y="66.822374"/>
|
|
||||||
<use xlink:href="#glyph0-8" x="695.644097" y="66.822374"/>
|
|
||||||
</g>
|
|
||||||
<path style="fill-rule:evenodd;fill:rgb(100%,100%,100%);fill-opacity:1;stroke-width:0.05;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(0%,0%,0%);stroke-opacity:1;stroke-miterlimit:10;" d="M 44.962227 6.300078 C 44.962227 6.91082 43.971797 7.406133 42.750117 7.406133 C 41.528242 7.406133 40.537812 6.91082 40.537812 6.300078 C 40.537812 5.689141 41.528242 5.194023 42.750117 5.194023 C 43.971797 5.194023 44.962227 5.689141 44.962227 6.300078 " transform="matrix(20,0,0,20,-36.1,-65.11875)"/>
|
|
||||||
<g style="fill:rgb(0%,0%,0%);fill-opacity:1;">
|
|
||||||
<use xlink:href="#glyph0-23" x="806.832031" y="64.767687"/>
|
|
||||||
<use xlink:href="#glyph0-18" x="814.887587" y="64.767687"/>
|
|
||||||
<use xlink:href="#glyph0-7" x="822.387587" y="64.767687"/>
|
|
||||||
<use xlink:href="#glyph0-10" x="825.998698" y="64.767687"/>
|
|
||||||
</g>
|
|
||||||
<path style="fill:none;stroke-width:0.05;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(0%,0%,0%);stroke-opacity:1;stroke-miterlimit:10;" d="M 37.735273 6.359258 L 39.988984 6.3325 " transform="matrix(20,0,0,20,-36.1,-65.11875)"/>
|
|
||||||
<path style="fill-rule:evenodd;fill:rgb(0%,0%,0%);fill-opacity:1;stroke-width:0.05;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(0%,0%,0%);stroke-opacity:1;stroke-miterlimit:10;" d="M 39.991914 6.5825 L 40.488789 6.326641 L 39.985859 6.082695 Z M 39.991914 6.5825 " transform="matrix(20,0,0,20,-36.1,-65.11875)"/>
|
|
||||||
</g>
|
|
||||||
</svg>
|
|
Before Width: | Height: | Size: 36 KiB |
@ -1,37 +0,0 @@
|
|||||||
gluon-logging
|
|
||||||
=============
|
|
||||||
|
|
||||||
The *gluon-logging* package allows to configure a remote syslog server that
|
|
||||||
will receive the systems log output that is also visible when calling ``logread``
|
|
||||||
from a terminal.
|
|
||||||
|
|
||||||
It supports both IPv4 and IPv6 endpoints over UDP and TCP.
|
|
||||||
|
|
||||||
Note: The syslog mechanism is incapable of providing a complete log as network
|
|
||||||
access is required to send out log messages and ``logd`` does not buffer and resend
|
|
||||||
older log messages even though they might be available in ``logread``.
|
|
||||||
|
|
||||||
This package conflicts with ``gluon-web-logging`` as it will overwrite the
|
|
||||||
user-given syslog server on every upgrade.
|
|
||||||
|
|
||||||
site.conf
|
|
||||||
---------
|
|
||||||
|
|
||||||
syslog.ip : required
|
|
||||||
- Destination address of the remote syslog server
|
|
||||||
|
|
||||||
syslog.port : optional
|
|
||||||
- Destination port of the remote syslog server
|
|
||||||
- Defaults to 514
|
|
||||||
|
|
||||||
syslog.proto : optional
|
|
||||||
- Protocol to transport syslog frames in, can be either ``tcp`` or ``udp``
|
|
||||||
- Defaults to UDP
|
|
||||||
|
|
||||||
Example::
|
|
||||||
|
|
||||||
syslog = {
|
|
||||||
ip = "2001:db8::1",
|
|
||||||
port = 514,
|
|
||||||
proto = "udp",
|
|
||||||
},
|
|
@ -1,25 +0,0 @@
|
|||||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
|
||||||
<!-- Created with Inkscape (http://www.inkscape.org/) -->
|
|
||||||
<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" width="931.48547" height="370.93994" id="svg4059" inkscape:version="0.48.1 r9760" sodipodi:docname="bat_v2_black.svg" inkscape:export-filename="/mnt/pandem0nium/pub/incoming/bat_logo_v2/bat_v2_black.png" inkscape:export-xdpi="90" inkscape:export-ydpi="90" style="display:inline">
|
|
||||||
<sodipodi:namedview pagecolor="#000000" bordercolor="#666666" borderopacity="1" objecttolerance="10" gridtolerance="10" guidetolerance="10" inkscape:pageopacity="0" inkscape:pageshadow="2" inkscape:window-width="956" inkscape:window-height="1173" id="namedview9" showgrid="false" inkscape:zoom="0.88204281" inkscape:cx="466.24453" inkscape:cy="37.028713" inkscape:window-x="1920" inkscape:window-y="0" inkscape:window-maximized="0" inkscape:current-layer="layer2" fit-margin-top="0" fit-margin-left="0" fit-margin-right="0" fit-margin-bottom="0" inkscape:snap-nodes="true"/>
|
|
||||||
<defs id="defs4061"/>
|
|
||||||
<metadata id="metadata4064">
|
|
||||||
<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/>
|
|
||||||
</cc:Work>
|
|
||||||
</rdf:RDF>
|
|
||||||
</metadata>
|
|
||||||
<g inkscape:groupmode="layer" id="layer3" inkscape:label="outline" style="display:none" transform="translate(6.26672, 5.9375)">
|
|
||||||
<path style="color:#000000;fill:#ffffff;stroke:none;stroke-width:4.27199984;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" d="m 483.25,-3.21875 c -6.08901,48.631979 -35.33662,91.011416 -69.21578,124.91707 -21.83485,21.38244 -47.03966,39.44335 -75.34672,51.17668 5.57969,-19.28428 1.04687,-40.97874 -11.5,-56.59375 2.45626,-29.914047 0.68927,-59.992978 -2.5,-89.78125 -15.98198,19.265018 -27.7684,41.544355 -37.5,64.5 -12.24825,-3.17862 -25.72651,-2.402049 -37.71875,0.46875 C 239.88593,74.102096 226.47693,59.077996 210.625,47.0625 c -3.34092,23.469062 -2.56561,47.559048 0.25,70.875 -6.69043,8.82966 -11.26059,19.42531 -12.0625,30.53125 -1.92921,1.3424 -3.05608,3.45019 -4.6875,0.40625 -20.84238,-21.1131 -32.59851,-48.84198 -44.9375,-75.34375 -14.85679,72.96988 -54.000466,137.54014 -93.508574,199.57505 -20.539303,31.20908 -42.388201,61.40672 -64.085176,91.86245 8.08014534,2.26279 14.376322,-5.17296 21.382238,-7.84546 48.067949,-26.0431 95.020242,-57.97999 149.805262,-67.65454 7.73822,-1.18656 15.65228,-1.74501 23.53125,-1.625 -0.16141,-13.91977 12.35539,-25.87856 26.40625,-24.625 13.02151,-0.10475 25.24921,5.06339 36.71875,10.84375 3.0761,-8.90096 9.56834,-15.98034 17.8125,-20.25 15.98458,27.53202 46.28592,42.98776 75.65932,52.75163 10.28498,3.53684 21.92146,5.33208 32.02818,7.49837 -0.72852,8.29742 2.55832,18.64745 11.71875,20.5625 7.84288,-6.18411 13.7902,-15.27395 22.59202,-19.68372 10.89918,-0.79379 21.80373,-2.64611 32.18923,-5.97253 8.1863,6.12253 18.23881,13.28825 29.03125,9.78125 0.2397,-7.80979 -2.17974,-15.60208 -1.25,-23.34375 14.60652,-14.33722 28.49903,-29.6116 39.75,-46.65625 -31.89112,0.19103 -65.39001,-1.50716 -93.6875,-17.375 12.63668,-0.24322 25.04624,3.36048 36.09375,9.40625 26.41279,-12.24594 57.54458,-3.79641 80.97725,11.3725 5.86994,3.60205 11.37305,7.64719 16.46025,12.19 36.58823,-16.89113 78.56629,-15.82385 118.11934,-12.20623 88.66214,9.36494 173.26796,44.12384 247.50566,92.70623 3.41963,1.85442 7.16209,2.95892 10.78125,4.40625 -11.75164,-20.6658 -29.05422,-37.32743 -43.5,-56.125 C 818.67884,217.58496 746.42668,149.41496 664.49937,94.602513 607.29452,55.830775 546.38636,22.78003 483.5625,-5.9375 c -0.10417,0.90625 -0.20833,1.8125 -0.3125,2.71875 z" id="path3993-5" inkscape:connector-curvature="0"/>
|
|
||||||
</g>
|
|
||||||
<g inkscape:groupmode="layer" id="layer2" inkscape:label="batman-adv" style="display:inline" transform="translate(6.26672, 5.9375)">
|
|
||||||
<g style="display:inline" transform="translate(-51.5312, -495.768)" id="layer1">
|
|
||||||
<path d="m 538.40625,495.76769 c -8.05674,66.9338 -77.31603,151.94452 -154.9375,179.84375 3.27747,-7.40037 5.09375,-15.49392 5.09375,-24 0,-14.42887 -5.21809,-27.70021 -13.96875,-38.3125 1.97025,-21.96404 1.77421,-48.67721 -1.375,-80.59375 -13.0022,16.9579 -23.30307,37.7663 -32.15625,58.78125 -6.27289,-1.8029 -12.93745,-2.78125 -19.84375,-2.78125 -7.73405,0 -15.17627,1.22854 -22.09375,3.46875 -7.42014,-13.90647 -17.47037,-28.11748 -33.78125,-41.59375 -2.4998,23.48832 -1.59267,44.90394 1.6875,63.65625 -8.2866,10.45096 -13.63544,23.35979 -12.0986,32.68414 -4.42484,0.36051 -5.23536,4.01016 -5.31948,6.88419 -19.28312,-16.49687 -32.60091,-39.15698 -47.58192,-72.16208 -13.26705,58.98947 -53.37139,142.16702 -150.5,273.75 61.55905,-33.2251 123.79671,-75.61843 182.8125,-75.78125 4.05468,-25.33145 30.1327,-32.48291 64.65625,-15.15625 4.05331,-9.20658 11.84907,-15.85762 21.59375,-20.21875 12.89223,29.16757 60.06405,56.23506 110.53125,61.78125 -2.71475,10.31567 2.48339,19.28096 6.03125,19.90625 L 457.25,806.89269 c 12.40469,-0.59384 24.70147,-2.7024 36.40625,-6.5625 8.39362,6.41285 17.71829,12.37841 24.1875,10.96875 l -1.71875,-21.125 c 13.74684,-14.03964 23.51218,-23.14064 36.6879,-41.69749 -37.60849,-0.0334 -70.29254,-4.68998 -97.84415,-24.05251 14.31376,-2.87534 30.90137,-1.2243 48.09375,7.71875 48.64496,-20.64584 97.96875,23.25 97.96875,23.25 59.36547,-28.55091 217.47867,-17.57755 366.6875,81.8125 -81.50891,-100.35408 -186.3503,-229.51108 -429.3125,-341.4375 z" id="path3993" style="color:#000000;fill:#000000;stroke:none;stroke-width:4.27199984;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" inkscape:export-filename="/home/sven/dokumente/bat_logo_v2.png" inkscape:export-xdpi="90" inkscape:export-ydpi="90" inkscape:connector-curvature="0" sodipodi:nodetypes="ccscccscccccccccccccccccccccc"/>
|
|
||||||
<path d="m 287.37698,691.21665 6.32487,6.0769 42.42641,-3.28299 4.04061,-10.85914 -6.08375,5.31015 -38.85662,6.0495 z" id="path4001" style="color:#000000;fill:#ffffff;stroke:none;stroke-width:1.77165353;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" inkscape:connector-curvature="0" sodipodi:nodetypes="ccccccc"/>
|
|
||||||
<path d="m 304.03798,658.90775 c 3.73562,-7.35256 3.37257,-7.75354 27.47128,-14.84657 15.15993,-4.46206 30.11288,-9.25782 32.38025,-2.07348 l 18.53034,-4.86774 0.54842,3.1737 -18.32114,6.49226 c -3.7905,21.99567 -3.66551,19.92566 -20.7106,21.97074 -27.63928,3.31618 -30.32837,6.17704 -39.39348,-6.06083 l -7.32361,1.01015 c -3.77481,8.34177 -0.87651,8.42602 -25.47706,7.6321 -16.18663,-0.52238 -14.20261,-0.23719 -17.22819,-15.14996 -1.35304,-6.66902 -0.33802,-7.91117 21.30347,-5.15085 17.50983,2.23334 17.19396,1.76122 21.20894,8.92319 z" id="path4003" style="color:#000000;fill:#ffffff;stroke:none;stroke-width:1.77165353;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" inkscape:connector-curvature="0" sodipodi:nodetypes="csccccsccssscc"/>
|
|
||||||
</g>
|
|
||||||
</g>
|
|
||||||
</svg>
|
|
Before Width: | Height: | Size: 7.2 KiB |
@ -1,246 +0,0 @@
|
|||||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
|
||||||
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.0//EN" "http://www.w3.org/TR/2001/PR-SVG-20010719/DTD/svg10.dtd">
|
|
||||||
<svg width="28cm" height="12cm" viewBox="239 289 551 223" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
|
|
||||||
<g id="Background">
|
|
||||||
<g>
|
|
||||||
<path style="fill: #b6c7c9; fill-opacity: 1; stroke: none" fill-rule="evenodd" d="M 713.614 347.58 L 713.54,345.719 L 713.283,343.858 L 712.804,342.03 L 712.142,340.201 L 711.258,338.34 L 710.264,336.545 L 709.013,334.781 L 707.614,333.051 L 706.104,331.321 L 704.337,329.688 L 702.46,328.056 L 700.398,326.521 L 698.153,324.986 L 695.797,323.55 L 693.294,322.146 L 690.606,320.84 L 687.845,319.566 L 684.974,318.391 L 681.955,317.281 L 678.826,316.269 L 675.587,315.289 L 672.237,314.473 L 668.887,313.657 L 665.39,312.971 L 661.819,312.351 L 658.248,311.828 L 654.604,311.404 L 650.922,311.11 L 647.204,310.849 L 643.45,310.718 L 639.695,310.653 L 639.695,310.653 L 635.977,310.718 L 632.185,310.849 L 628.504,311.11 L 624.822,311.404 L 621.141,311.828 L 617.57,312.351 L 614,312.971 L 610.539,313.657 L 607.116,314.473 L 603.839,315.289 L 600.6,316.269 L 597.508,317.281 L 594.452,318.391 L 591.581,319.566 L 588.783,320.84 L 586.096,322.146 L 583.592,323.55 L 581.236,324.986 L 578.991,326.521 L 576.929,328.056 L 575.052,329.688 L 573.322,331.321 L 571.739,333.051 L 570.414,334.781 L 569.162,336.545 L 568.131,338.34 L 567.248,340.201 L 566.659,342.03 L 566.18,343.858 L 565.849,345.719 L 565.812,347.58 L 565.812,347.58 L 565.849,349.474 L 566.18,351.335 L 566.659,353.196 L 567.248,355.024 L 568.131,356.853 L 569.162,358.649 L 570.414,360.412 L 571.739,362.175 L 573.322,363.873 L 575.052,365.505 L 576.929,367.138 L 578.991,368.705 L 581.236,370.207 L 583.592,371.643 L 586.096,373.047 L 588.783,374.386 L 591.581,375.594 L 594.452,376.835 L 597.508,377.945 L 600.6,378.957 L 603.839,379.871 L 607.116,380.753 L 610.539,381.536 L 614,382.222 L 617.57,382.842 L 621.141,383.365 L 624.822,383.757 L 628.504,384.083 L 632.185,384.377 L 635.977,384.475 L 639.695,384.508 L 639.695,384.508 L 643.45,384.475 L 647.204,384.377 L 650.922,384.083 L 654.604,383.757 L 658.248,383.365 L 661.819,382.842 L 665.39,382.222 L 668.887,381.536 L 672.237,380.753 L 675.587,379.871 L 678.826,378.957 L 681.955,377.945 L 684.974,376.835 L 687.845,375.594 L 690.606,374.386 L 693.294,373.047 L 695.797,371.643 L 698.153,370.207 L 700.398,368.705 L 702.46,367.138 L 704.337,365.505 L 706.104,363.873 L 707.614,362.175 L 709.013,360.412 L 710.264,358.649 L 711.258,356.853 L 712.142,355.024 L 712.804,353.196 L 713.283,351.335 L 713.54,349.474 L 713.614,347.58z"/>
|
|
||||||
<path style="fill: #b6c7c9; fill-opacity: 1; stroke: none" fill-rule="evenodd" d="M 597.765 366.974 L 597.692,365.113 L 597.434,363.252 L 597.139,361.424 L 596.624,359.563 L 595.961,357.734 L 595.152,355.939 L 594.194,354.176 L 593.164,352.445 L 591.986,350.715 L 590.66,349.082 L 589.225,347.45 L 587.642,345.915 L 585.875,344.381 L 584.071,342.944 L 582.157,341.54 L 580.095,340.234 L 578.034,338.961 L 575.751,337.785 L 573.469,336.675 L 571.039,335.696 L 568.61,334.683 L 566.07,333.802 L 563.419,333.051 L 560.769,332.365 L 558.045,331.745 L 555.284,331.223 L 552.486,330.798 L 549.651,330.504 L 546.854,330.243 L 543.982,330.08 L 541.111,330.047 L 541.111,330.047 L 538.239,330.08 L 535.368,330.243 L 532.497,330.504 L 529.699,330.798 L 526.864,331.223 L 524.104,331.745 L 521.416,332.365 L 518.766,333.051 L 516.152,333.802 L 513.612,334.683 L 511.109,335.696 L 508.753,336.675 L 506.397,337.785 L 504.188,338.961 L 502.09,340.234 L 500.028,341.54 L 498.114,342.944 L 496.273,344.381 L 494.543,345.915 L 492.997,347.45 L 491.524,349.082 L 490.236,350.715 L 489.021,352.445 L 487.954,354.176 L 487.033,355.939 L 486.223,357.734 L 485.561,359.563 L 485.082,361.424 L 484.714,363.252 L 484.493,365.113 L 484.42,366.974 L 484.42,366.974 L 484.493,368.868 L 484.714,370.729 L 485.082,372.59 L 485.561,374.419 L 486.223,376.247 L 487.033,378.043 L 487.954,379.806 L 489.021,381.536 L 490.236,383.267 L 491.524,384.899 L 492.997,386.532 L 494.543,388.066 L 496.273,389.601 L 498.114,391.038 L 500.028,392.442 L 502.09,393.748 L 504.188,394.988 L 506.397,396.164 L 508.753,397.339 L 511.109,398.351 L 513.612,399.265 L 516.152,400.18 L 518.766,400.931 L 521.416,401.616 L 524.104,402.237 L 526.864,402.726 L 529.699,403.151 L 532.497,403.477 L 535.368,403.771 L 538.239,403.869 L 541.111,403.902 L 541.111,403.902 L 543.982,403.869 L 546.854,403.771 L 549.651,403.477 L 552.486,403.151 L 555.284,402.726 L 558.045,402.237 L 560.769,401.616 L 563.419,400.931 L 566.07,400.18 L 568.61,399.265 L 571.039,398.351 L 573.469,397.339 L 575.751,396.164 L 578.034,394.988 L 580.095,393.748 L 582.157,392.442 L 584.071,391.038 L 585.875,389.601 L 587.642,388.066 L 589.225,386.532 L 590.66,384.899 L 591.986,383.267 L 593.164,381.536 L 594.194,379.806 L 595.152,378.043 L 595.961,376.247 L 596.624,374.419 L 597.139,372.59 L 597.434,370.729 L 597.692,368.868 L 597.765,366.974z"/>
|
|
||||||
<path style="fill: #b6c7c9; fill-opacity: 1; stroke: none" fill-rule="evenodd" d="M 526.312 404.685 L 526.275,403.151 L 526.165,401.616 L 525.907,400.082 L 525.576,398.58 L 525.097,397.143 L 524.545,395.641 L 523.956,394.172 L 523.257,392.768 L 522.447,391.364 L 521.527,390.025 L 520.533,388.752 L 519.465,387.446 L 518.324,386.205 L 517.109,384.997 L 515.784,383.887 L 514.422,382.842 L 513.023,381.765 L 511.55,380.818 L 509.968,379.904 L 508.348,379.055 L 506.691,378.304 L 504.961,377.586 L 503.231,376.965 L 501.427,376.41 L 499.586,375.888 L 497.746,375.496 L 495.868,375.104 L 493.917,374.876 L 492.003,374.68 L 490.126,374.582 L 488.175,374.517 L 488.175,374.517 L 486.223,374.582 L 484.272,374.68 L 482.358,374.876 L 480.481,375.104 L 478.566,375.496 L 476.689,375.888 L 474.885,376.41 L 473.118,376.965 L 471.314,377.586 L 469.584,378.304 L 467.928,379.055 L 466.308,379.904 L 464.762,380.818 L 463.252,381.765 L 461.854,382.842 L 460.492,383.887 L 459.203,384.997 L 457.951,386.205 L 456.81,387.446 L 455.743,388.752 L 454.749,390.025 L 453.902,391.364 L 453.092,392.768 L 452.393,394.172 L 451.73,395.641 L 451.178,397.143 L 450.773,398.58 L 450.442,400.082 L 450.147,401.616 L 450,403.151 L 450,404.685 L 450,404.685 L 450,406.155 L 450.147,407.689 L 450.442,409.191 L 450.773,410.693 L 451.178,412.227 L 451.73,413.664 L 452.393,415.101 L 453.092,416.537 L 453.902,417.941 L 454.749,419.28 L 455.743,420.586 L 456.81,421.859 L 457.951,423.1 L 459.203,424.275 L 460.492,425.385 L 461.854,426.463 L 463.252,427.54 L 464.762,428.455 L 466.308,429.369 L 467.928,430.218 L 469.584,431.001 L 471.314,431.72 L 473.118,432.34 L 474.885,432.895 L 476.689,433.385 L 478.566,433.809 L 480.481,434.168 L 482.358,434.462 L 484.272,434.625 L 486.223,434.723 L 488.175,434.789 L 488.175,434.789 L 490.126,434.723 L 492.003,434.625 L 493.917,434.462 L 495.868,434.168 L 497.746,433.809 L 499.586,433.385 L 501.427,432.895 L 503.231,432.34 L 504.961,431.72 L 506.691,431.001 L 508.348,430.218 L 509.968,429.369 L 511.55,428.455 L 513.023,427.54 L 514.422,426.463 L 515.784,425.385 L 517.109,424.275 L 518.324,423.1 L 519.465,421.859 L 520.533,420.586 L 521.527,419.28 L 522.447,417.941 L 523.257,416.537 L 523.956,415.101 L 524.545,413.664 L 525.097,412.227 L 525.576,410.693 L 525.907,409.191 L 526.165,407.689 L 526.275,406.155 L 526.312,404.685z"/>
|
|
||||||
<path style="fill: #b6c7c9; fill-opacity: 1; stroke: none" fill-rule="evenodd" d="M 587.936 433.711 L 587.9,432.046 L 587.642,430.414 L 587.237,428.748 L 586.758,427.116 L 586.096,425.516 L 585.323,423.916 L 584.329,422.349 L 583.298,420.814 L 582.046,419.378 L 580.721,417.876 L 579.212,416.439 L 577.629,415.101 L 575.935,413.762 L 574.095,412.423 L 572.144,411.215 L 570.082,410.04 L 567.91,408.962 L 565.628,407.885 L 563.309,406.938 L 560.879,405.991 L 558.339,405.175 L 555.762,404.391 L 553.112,403.706 L 550.424,403.085 L 547.663,402.563 L 544.829,402.139 L 542.031,401.747 L 539.16,401.42 L 536.288,401.224 L 533.38,401.094 L 530.435,401.061 L 530.435,401.061 L 527.527,401.094 L 524.656,401.224 L 521.711,401.42 L 518.876,401.747 L 516.005,402.139 L 513.244,402.563 L 510.483,403.085 L 507.759,403.706 L 505.108,404.391 L 502.568,405.175 L 500.028,405.991 L 497.599,406.938 L 495.243,407.885 L 492.997,408.962 L 490.825,410.04 L 488.764,411.215 L 486.812,412.423 L 484.972,413.762 L 483.242,415.101 L 481.659,416.439 L 480.149,417.876 L 478.787,419.378 L 477.609,420.814 L 476.542,422.349 L 475.548,423.916 L 474.738,425.516 L 474.149,427.116 L 473.597,428.748 L 473.229,430.414 L 473.008,432.046 L 472.934,433.711 L 472.934,433.711 L 473.008,435.344 L 473.229,437.009 L 473.597,438.641 L 474.149,440.274 L 474.738,441.874 L 475.548,443.474 L 476.542,445.073 L 477.609,446.608 L 478.787,448.077 L 480.149,449.514 L 481.659,450.95 L 483.242,452.322 L 484.972,453.693 L 486.812,454.999 L 488.764,456.207 L 490.825,457.35 L 492.997,458.46 L 495.243,459.505 L 497.599,460.484 L 500.028,461.431 L 502.568,462.247 L 505.108,463.031 L 507.759,463.684 L 510.483,464.304 L 513.244,464.827 L 516.005,465.284 L 518.876,465.708 L 521.711,466.002 L 524.656,466.198 L 527.527,466.329 L 530.435,466.329 L 530.435,466.329 L 533.38,466.329 L 536.288,466.198 L 539.16,466.002 L 542.031,465.708 L 544.829,465.284 L 547.663,464.827 L 550.424,464.304 L 553.112,463.684 L 555.762,463.031 L 558.339,462.247 L 560.879,461.431 L 563.309,460.484 L 565.628,459.505 L 567.91,458.46 L 570.082,457.35 L 572.144,456.207 L 574.095,454.999 L 575.935,453.693 L 577.629,452.322 L 579.212,450.95 L 580.721,449.514 L 582.046,448.077 L 583.298,446.608 L 584.329,445.073 L 585.323,443.474 L 586.096,441.874 L 586.758,440.274 L 587.237,438.641 L 587.642,437.009 L 587.9,435.344 L 587.936,433.711z"/>
|
|
||||||
<path style="fill: #b6c7c9; fill-opacity: 1; stroke: none" fill-rule="evenodd" d="M 725.946 450.591 L 725.799,448.6 L 725.505,446.608 L 724.916,444.682 L 724.142,442.755 L 723.185,440.829 L 722.007,438.968 L 720.608,437.139 L 718.989,435.278 L 717.148,433.483 L 715.16,431.752 L 712.915,430.087 L 710.559,428.455 L 707.982,426.855 L 705.258,425.32 L 702.276,423.851 L 699.257,422.48 L 696.018,421.141 L 692.631,419.9 L 689.171,418.757 L 685.489,417.68 L 681.771,416.668 L 677.906,415.786 L 673.967,414.937 L 669.881,414.219 L 665.795,413.566 L 661.598,413.044 L 657.401,412.587 L 653.058,412.26 L 648.824,412.032 L 644.443,411.836 L 640.1,411.836 L 640.1,411.836 L 635.756,411.836 L 631.412,412.032 L 627.105,412.26 L 622.835,412.587 L 618.564,413.044 L 614.405,413.566 L 610.282,414.219 L 606.269,414.937 L 602.256,415.786 L 598.465,416.668 L 594.673,417.68 L 591.065,418.757 L 587.568,419.9 L 584.218,421.141 L 580.979,422.48 L 577.887,423.851 L 574.978,425.32 L 572.254,426.855 L 569.641,428.455 L 567.248,430.087 L 565.039,431.752 L 563.088,433.483 L 561.247,435.278 L 559.628,437.139 L 558.229,438.968 L 557.014,440.829 L 556.057,442.755 L 555.247,444.682 L 554.695,446.608 L 554.363,448.6 L 554.253,450.591 L 554.253,450.591 L 554.363,452.485 L 554.695,454.477 L 555.247,456.403 L 556.057,458.362 L 557.014,460.288 L 558.229,462.149 L 559.628,463.978 L 561.247,465.839 L 563.088,467.635 L 565.039,469.365 L 567.248,471.03 L 569.641,472.728 L 572.254,474.263 L 574.978,475.797 L 577.887,477.234 L 580.979,478.67 L 584.218,479.976 L 587.568,481.217 L 591.065,482.36 L 594.673,483.47 L 598.465,484.417 L 602.256,485.331 L 606.269,486.147 L 610.282,486.866 L 614.405,487.551 L 618.564,488.041 L 622.835,488.498 L 627.105,488.857 L 631.412,489.086 L 635.756,489.282 L 640.1,489.282 L 640.1,489.282 L 644.443,489.282 L 648.824,489.086 L 653.058,488.857 L 657.401,488.498 L 661.598,488.041 L 665.795,487.551 L 669.881,486.866 L 673.967,486.147 L 677.906,485.331 L 681.771,484.417 L 685.489,483.47 L 689.171,482.36 L 692.631,481.217 L 696.018,479.976 L 699.257,478.67 L 702.276,477.234 L 705.258,475.797 L 707.982,474.263 L 710.559,472.728 L 712.915,471.03 L 715.16,469.365 L 717.148,467.635 L 718.989,465.839 L 720.608,463.978 L 722.007,462.149 L 723.185,460.288 L 724.142,458.362 L 724.916,456.403 L 725.505,454.477 L 725.799,452.485 L 725.946,450.591z"/>
|
|
||||||
<path style="fill: #b6c7c9; fill-opacity: 1; stroke: none" fill-rule="evenodd" d="M 773.582 361.228 L 773.545,359.791 L 773.324,358.289 L 772.919,356.82 L 772.477,355.384 L 771.815,353.98 L 771.078,352.543 L 770.158,351.139 L 769.091,349.768 L 767.949,348.462 L 766.698,347.123 L 765.262,345.85 L 763.716,344.609 L 762.096,343.466 L 760.292,342.291 L 758.452,341.213 L 756.427,340.201 L 754.366,339.157 L 752.23,338.242 L 749.948,337.393 L 747.629,336.577 L 745.273,335.826 L 742.77,335.141 L 740.23,334.52 L 737.653,333.965 L 735.002,333.475 L 732.352,333.149 L 729.628,332.757 L 726.903,332.496 L 724.106,332.333 L 721.345,332.235 L 718.547,332.169 L 718.547,332.169 L 715.712,332.235 L 712.951,332.333 L 710.154,332.496 L 707.43,332.757 L 704.742,333.149 L 702.055,333.475 L 699.441,333.965 L 696.828,334.52 L 694.288,335.141 L 691.784,335.826 L 689.392,336.577 L 687.109,337.393 L 684.827,338.242 L 682.692,339.157 L 680.63,340.201 L 678.642,341.213 L 676.765,342.291 L 674.961,343.466 L 673.341,344.609 L 671.832,345.85 L 670.359,347.123 L 669.108,348.462 L 667.967,349.768 L 666.899,351.139 L 665.979,352.543 L 665.243,353.98 L 664.617,355.384 L 664.101,356.82 L 663.77,358.289 L 663.586,359.791 L 663.476,361.228 L 663.476,361.228 L 663.586,362.697 L 663.77,364.167 L 664.101,365.603 L 664.617,367.072 L 665.243,368.509 L 665.979,369.913 L 666.899,371.317 L 667.967,372.688 L 669.108,374.059 L 670.359,375.333 L 671.832,376.574 L 673.341,377.847 L 674.961,379.022 L 676.765,380.132 L 678.642,381.243 L 680.63,382.287 L 682.692,383.267 L 684.827,384.181 L 687.109,385.095 L 689.392,385.911 L 691.784,386.63 L 694.288,387.348 L 696.828,387.936 L 699.441,388.458 L 702.055,388.981 L 704.742,389.372 L 707.43,389.699 L 710.154,389.993 L 712.951,390.123 L 715.712,390.287 L 718.547,390.287 L 718.547,390.287 L 721.345,390.287 L 724.106,390.123 L 726.903,389.993 L 729.628,389.699 L 732.352,389.372 L 735.002,388.981 L 737.653,388.458 L 740.23,387.936 L 742.77,387.348 L 745.273,386.63 L 747.629,385.911 L 749.948,385.095 L 752.23,384.181 L 754.366,383.267 L 756.427,382.287 L 758.452,381.243 L 760.292,380.132 L 762.096,379.022 L 763.716,377.847 L 765.262,376.574 L 766.698,375.333 L 767.949,374.059 L 769.091,372.688 L 770.158,371.317 L 771.078,369.913 L 771.815,368.509 L 772.477,367.072 L 772.919,365.603 L 773.324,364.167 L 773.545,362.697 L 773.582,361.228z"/>
|
|
||||||
<path style="fill: #b6c7c9; fill-opacity: 1; stroke: none" fill-rule="evenodd" d="M 789.19 398.547 L 789.08,397.078 L 788.932,395.609 L 788.564,394.172 L 788.086,392.735 L 787.423,391.266 L 786.687,389.895 L 785.803,388.458 L 784.736,387.12 L 783.595,385.748 L 782.343,384.475 L 780.907,383.169 L 779.361,381.961 L 777.778,380.818 L 775.974,379.61 L 774.134,378.565 L 772.22,377.488 L 770.158,376.508 L 767.949,375.594 L 765.777,374.712 L 763.458,373.896 L 761.102,373.145 L 758.636,372.46 L 756.133,371.872 L 753.556,371.317 L 750.905,370.827 L 748.255,370.435 L 745.567,370.109 L 742.806,369.815 L 740.082,369.684 L 737.321,369.586 L 734.56,369.521 L 734.56,369.521 L 731.763,369.586 L 729.039,369.684 L 726.278,369.815 L 723.59,370.109 L 720.903,370.435 L 718.216,370.827 L 715.602,371.317 L 713.062,371.872 L 710.522,372.46 L 708.055,373.145 L 705.699,373.896 L 703.38,374.712 L 701.135,375.594 L 699.036,376.508 L 696.975,377.488 L 694.95,378.565 L 693.11,379.61 L 691.379,380.818 L 689.796,381.961 L 688.25,383.169 L 686.851,384.475 L 685.526,385.748 L 684.385,387.12 L 683.391,388.458 L 682.471,389.895 L 681.661,391.266 L 681.072,392.735 L 680.593,394.172 L 680.225,395.609 L 680.004,397.078 L 679.968,398.547 L 679.968,398.547 L 680.004,400.016 L 680.225,401.518 L 680.593,402.955 L 681.072,404.391 L 681.661,405.828 L 682.471,407.232 L 683.391,408.669 L 684.385,410.007 L 685.526,411.313 L 686.851,412.652 L 688.25,413.893 L 689.796,415.133 L 691.379,416.309 L 693.11,417.451 L 694.95,418.562 L 696.975,419.574 L 699.036,420.586 L 701.135,421.5 L 703.38,422.349 L 705.699,423.165 L 708.055,423.916 L 710.522,424.602 L 713.062,425.222 L 715.602,425.81 L 718.216,426.3 L 720.903,426.626 L 723.59,427.018 L 726.278,427.247 L 729.039,427.442 L 731.763,427.54 L 734.56,427.573 L 734.56,427.573 L 737.321,427.54 L 740.082,427.442 L 742.806,427.247 L 745.567,427.018 L 748.255,426.626 L 750.905,426.3 L 753.556,425.81 L 756.133,425.222 L 758.636,424.602 L 761.102,423.916 L 763.458,423.165 L 765.777,422.349 L 767.949,421.5 L 770.158,420.586 L 772.22,419.574 L 774.134,418.562 L 775.974,417.451 L 777.778,416.309 L 779.361,415.133 L 780.907,413.893 L 782.343,412.652 L 783.595,411.313 L 784.736,410.007 L 785.803,408.669 L 786.687,407.232 L 787.423,405.828 L 788.086,404.391 L 788.564,402.955 L 788.932,401.518 L 789.08,400.016 L 789.19,398.547z"/>
|
|
||||||
<path style="fill: #b6c7c9; fill-opacity: 1; stroke: none" fill-rule="evenodd" d="M 778.515 429.401 L 778.441,427.018 L 778.22,424.569 L 777.926,422.218 L 777.447,419.802 L 776.821,417.451 L 776.048,415.133 L 775.165,412.848 L 774.097,410.595 L 772.956,408.407 L 771.741,406.252 L 770.342,404.163 L 768.796,402.171 L 767.176,400.212 L 765.409,398.351 L 763.569,396.555 L 761.654,394.825 L 759.593,393.192 L 757.495,391.723 L 755.249,390.287 L 752.967,388.981 L 750.611,387.74 L 748.218,386.63 L 745.715,385.585 L 743.175,384.671 L 740.524,383.887 L 737.91,383.267 L 735.186,382.679 L 732.499,382.255 L 729.812,381.961 L 727.087,381.765 L 724.327,381.732 L 724.327,381.732 L 721.566,381.765 L 718.841,381.961 L 716.081,382.255 L 713.393,382.679 L 710.743,383.267 L 708.055,383.887 L 705.479,384.671 L 702.939,385.585 L 700.435,386.63 L 697.969,387.74 L 695.613,388.981 L 693.33,390.287 L 691.159,391.723 L 688.987,393.192 L 686.962,394.825 L 685.011,396.555 L 683.17,398.351 L 681.44,400.212 L 679.783,402.171 L 678.311,404.163 L 676.912,406.252 L 675.624,408.407 L 674.482,410.595 L 673.489,412.848 L 672.605,415.133 L 671.832,417.451 L 671.206,419.802 L 670.728,422.218 L 670.359,424.569 L 670.139,427.018 L 670.065,429.401 L 670.065,429.401 L 670.139,431.818 L 670.359,434.266 L 670.728,436.617 L 671.206,439.001 L 671.832,441.417 L 672.605,443.702 L 673.489,445.955 L 674.482,448.241 L 675.624,450.395 L 676.912,452.55 L 678.311,454.673 L 679.783,456.664 L 681.44,458.591 L 683.17,460.484 L 685.011,462.28 L 686.962,463.978 L 688.987,465.61 L 691.159,467.145 L 693.33,468.549 L 695.613,469.888 L 697.969,471.096 L 700.435,472.238 L 702.939,473.25 L 705.479,474.165 L 708.055,474.916 L 710.743,475.601 L 713.393,476.124 L 716.081,476.548 L 718.841,476.842 L 721.566,477.038 L 724.327,477.136 L 724.327,477.136 L 727.087,477.038 L 729.812,476.842 L 732.499,476.548 L 735.186,476.124 L 737.91,475.601 L 740.524,474.916 L 743.175,474.165 L 745.715,473.25 L 748.218,472.238 L 750.611,471.096 L 752.967,469.888 L 755.249,468.549 L 757.495,467.145 L 759.593,465.61 L 761.654,463.978 L 763.569,462.28 L 765.409,460.484 L 767.176,458.591 L 768.796,456.664 L 770.342,454.673 L 771.741,452.55 L 772.956,450.395 L 774.097,448.241 L 775.165,445.955 L 776.048,443.702 L 776.821,441.417 L 777.447,439.001 L 777.926,436.617 L 778.22,434.266 L 778.441,431.818 L 778.515,429.401z"/>
|
|
||||||
<path style="fill: #b6c7c9; fill-opacity: 1; stroke: none" fill-rule="evenodd" d="M 731.689 400.702 L 731.542,398.253 L 731.1,395.902 L 730.401,393.454 L 729.443,391.103 L 728.192,388.752 L 726.646,386.401 L 724.842,384.116 L 722.744,381.863 L 720.461,379.675 L 717.884,377.553 L 715.013,375.431 L 711.958,373.406 L 708.644,371.513 L 705.11,369.619 L 701.356,367.791 L 697.453,366.093 L 693.294,364.493 L 688.95,362.958 L 684.495,361.522 L 679.82,360.183 L 674.998,358.975 L 670.065,357.832 L 665.022,356.82 L 659.868,355.939 L 654.567,355.188 L 649.192,354.502 L 643.781,353.98 L 638.296,353.555 L 632.774,353.196 L 627.215,353.033 L 621.583,352.968 L 621.583,352.968 L 616.024,353.033 L 610.466,353.196 L 604.944,353.555 L 599.422,353.98 L 594.01,354.502 L 588.636,355.188 L 583.372,355.939 L 578.218,356.82 L 573.101,357.832 L 568.242,358.975 L 563.419,360.183 L 558.707,361.522 L 554.216,362.958 L 549.946,364.493 L 545.749,366.093 L 541.81,367.791 L 538.129,369.619 L 534.558,371.513 L 531.245,373.406 L 528.227,375.431 L 525.355,377.553 L 522.815,379.675 L 520.496,381.863 L 518.361,384.116 L 516.594,386.401 L 515.084,388.752 L 513.759,391.103 L 512.802,393.454 L 512.103,395.902 L 511.661,398.253 L 511.55,400.702 L 511.55,400.702 L 511.661,403.085 L 512.103,405.502 L 512.802,407.885 L 513.759,410.301 L 515.084,412.652 L 516.594,414.97 L 518.361,417.223 L 520.496,419.508 L 522.815,421.729 L 525.355,423.851 L 528.227,425.908 L 531.245,427.932 L 534.558,429.891 L 538.129,431.752 L 541.81,433.548 L 545.749,435.278 L 549.946,436.911 L 554.216,438.445 L 558.707,439.882 L 563.419,441.155 L 568.242,442.429 L 573.101,443.506 L 578.218,444.518 L 583.372,445.433 L 588.636,446.216 L 594.01,446.869 L 599.422,447.424 L 604.944,447.849 L 610.466,448.143 L 616.024,448.371 L 621.583,448.404 L 621.583,448.404 L 627.215,448.371 L 632.774,448.143 L 638.296,447.849 L 643.781,447.424 L 649.192,446.869 L 654.567,446.216 L 659.868,445.433 L 665.022,444.518 L 670.065,443.506 L 674.998,442.429 L 679.82,441.155 L 684.495,439.882 L 688.95,438.445 L 693.294,436.911 L 697.453,435.278 L 701.356,433.548 L 705.11,431.752 L 708.644,429.891 L 711.958,427.932 L 715.013,425.908 L 717.884,423.851 L 720.461,421.729 L 722.744,419.508 L 724.842,417.223 L 726.646,414.97 L 728.192,412.652 L 729.443,410.301 L 730.401,407.885 L 731.1,405.502 L 731.542,403.085 L 731.689,400.702z"/>
|
|
||||||
<path style="fill: #b6c7c9; fill-opacity: 1; stroke: none" fill-rule="evenodd" d="M 640.541 347.254 L 713.393,339.026 L 712.473,337.23 L 711.332,335.402 L 710.08,333.606 L 708.571,331.876 L 706.951,330.21 L 705.11,328.513 L 703.196,326.913 L 700.987,325.378 L 698.742,323.876 L 696.312,322.44 L 693.699,321.068 L 690.974,319.795 L 688.103,318.554 L 685.121,317.346 L 682.029,316.269 L 678.826,315.289 L 675.587,314.31 L 672.163,313.494 L 668.703,312.743 L 665.206,312.057 L 661.561,311.469 L 657.917,311.012 L 654.236,310.588 L 650.518,310.294 L 646.763,310.098 L 642.971,310 L 639.216,310 L 635.424,310.098 L 631.633,310.229 L 627.951,310.49 L 624.233,310.914 L 620.552,311.339 L 616.908,311.926 L 613.337,312.547 L 609.877,313.265 L 606.49,314.081 L 603.14,314.995 L 599.9,315.942 L 596.845,317.02 L 593.826,318.163 L 590.918,319.371 L 588.157,320.644 L 585.544,322.015 L 583.077,323.452 L 580.721,324.921 L 578.512,326.456 L 576.451,328.056 L 574.573,329.688 L 572.954,331.418 L 571.371,333.084 L 570.009,334.879 L 568.867,336.642 L 567.91,338.471 L 567.1,340.299 L 640.541,347.254z"/>
|
|
||||||
<path style="fill: none; stroke-opacity: 1; stroke-width: 0.02; stroke: #6c8f93" d="M 713.393 338.961 L 712.436,337.132 L 711.332,335.336 L 710.043,333.541 L 708.571,331.843 L 706.877,330.145 L 705.074,328.48 L 703.123,326.88 L 700.914,325.346 L 698.631,323.876 L 696.275,322.44 L 693.625,321.003 L 690.974,319.73 L 688.066,318.489 L 685.084,317.346 L 682.029,316.204 L 678.826,315.224 L 675.55,314.31 L 672.126,313.461 L 668.666,312.743 L 665.206,312.057 L 661.561,311.469 L 657.88,311.012 L 654.199,310.588 L 650.481,310.294 L 646.763,310.098 L 642.934,310 L 639.179,310 L 635.424,310.098 L 631.67,310.229 L 627.915,310.49 L 624.233,310.914 L 620.552,311.306 L 616.945,311.861 L 613.411,312.547 L 609.877,313.265 L 606.527,314.081 L 603.177,314.995 L 599.974,315.942 L 596.845,316.987 L 593.863,318.163 L 590.955,319.371 L 588.194,320.611 L 585.58,321.983 L 583.077,323.387 L 580.721,324.888 L 578.512,326.423 L 576.524,327.99 L 574.61,329.688 L 572.954,331.321 L 571.408,333.051 L 570.082,334.781 L 568.867,336.577 L 567.91,338.406 L 567.137,340.234"/>
|
|
||||||
<path style="fill: #b6c7c9; fill-opacity: 1; stroke: none" fill-rule="evenodd" d="M 541.479 366.615 L 578.218,338.046 L 575.935,336.871 L 573.543,335.761 L 571.113,334.781 L 568.61,333.802 L 566.07,332.953 L 563.419,332.169 L 560.695,331.516 L 558.008,330.896 L 555.173,330.406 L 552.375,329.982 L 549.504,329.688 L 546.633,329.459 L 543.761,329.329 L 540.89,329.329 L 537.982,329.394 L 535.11,329.59 L 532.239,329.819 L 529.405,330.178 L 526.607,330.635 L 523.846,331.157 L 521.085,331.778 L 518.434,332.496 L 515.784,333.312 L 513.244,334.194 L 510.777,335.173 L 508.421,336.251 L 506.065,337.393 L 503.857,338.569 L 501.758,339.875 L 499.697,341.213 L 497.783,342.65 L 496.016,344.087 L 494.322,345.654 L 492.776,347.221 L 491.304,348.854 L 490.015,350.551 L 488.8,352.282 L 487.77,354.012 L 486.849,355.808 L 486.113,357.636 L 485.524,359.465 L 485.009,361.359 L 484.641,363.252 L 484.493,365.113 L 484.42,366.974 L 484.53,368.868 L 484.751,370.794 L 485.193,372.623 L 541.479,366.615z"/>
|
|
||||||
<path style="fill: none; stroke-opacity: 1; stroke-width: 0.02; stroke: #6c8f93" d="M 578.034 337.948 L 575.751,336.773 L 573.432,335.696 L 571.003,334.683 L 568.463,333.769 L 565.849,332.888 L 563.235,332.137 L 560.548,331.451 L 557.787,330.863 L 555.026,330.406 L 552.155,329.982 L 549.32,329.688 L 546.485,329.459 L 543.614,329.329 L 540.669,329.329 L 537.871,329.394 L 535,329.59 L 532.055,329.819 L 529.257,330.21 L 526.496,330.635 L 523.662,331.223 L 520.974,331.81 L 518.324,332.561 L 515.71,333.377 L 513.133,334.259 L 510.667,335.239 L 508.311,336.316 L 506.029,337.426 L 503.82,338.667 L 501.648,339.907 L 499.697,341.311 L 497.746,342.683 L 495.942,344.185 L 494.285,345.687 L 492.702,347.254 L 491.304,348.919 L 490.015,350.617 L 488.8,352.347 L 487.733,354.078 L 486.849,355.906 L 486.113,357.669 L 485.45,359.53 L 485.009,361.424 L 484.641,363.285 L 484.493,365.146 L 484.42,367.04 L 484.604,368.901 L 484.825,370.794 L 485.193,372.688"/>
|
|
||||||
<path style="fill: #b6c7c9; fill-opacity: 1; stroke: none" fill-rule="evenodd" d="M 531.245 433.352 L 472.124,432.34 L 472.124,434.07 L 472.235,435.703 L 472.529,437.433 L 473.008,439.066 L 473.56,440.731 L 474.259,442.429 L 475.18,443.996 L 476.137,445.596 L 477.352,447.163 L 478.64,448.665 L 480.002,450.2 L 481.622,451.636 L 483.242,453.04 L 485.082,454.379 L 486.96,455.685 L 488.984,456.925 L 491.156,458.068 L 493.365,459.178 L 495.684,460.288 L 498.114,461.235 L 500.617,462.149 L 503.231,463.031 L 505.881,463.749 L 508.532,464.468 L 511.33,465.088 L 514.164,465.61 L 517.036,466.035 L 519.944,466.427 L 522.852,466.72 L 525.797,466.916 L 528.779,467.014 L 531.797,467.014 L 534.706,466.949 L 537.687,466.818 L 540.632,466.623 L 543.54,466.329 L 546.485,465.904 L 549.283,465.414 L 552.155,464.892 L 554.842,464.206 L 557.566,463.553 L 560.217,462.737 L 562.72,461.856 L 565.26,460.909 L 567.579,459.897 L 569.898,458.852 L 531.245,433.352z"/>
|
|
||||||
<path style="fill: none; stroke-opacity: 1; stroke-width: 0.02; stroke: #6c8f93" d="M 472.198 432.34 L 472.087,434.005 L 472.308,435.703 L 472.529,437.368 L 473.008,439.066 L 473.56,440.698 L 474.296,442.364 L 475.18,443.996 L 476.21,445.596 L 477.352,447.13 L 478.566,448.665 L 480.002,450.134 L 481.511,451.603 L 483.242,452.975 L 485.009,454.379 L 486.923,455.619 L 488.911,456.86 L 491.046,458.068 L 493.255,459.178 L 495.574,460.223 L 498.003,461.203 L 500.507,462.117 L 503.047,462.966 L 505.697,463.749 L 508.458,464.468 L 511.182,465.023 L 513.98,465.545 L 516.851,466.035 L 519.796,466.361 L 522.705,466.72 L 525.613,466.851 L 528.595,467.014 L 531.576,467.014 L 534.521,467.014 L 537.466,466.851 L 540.411,466.623 L 543.32,466.329 L 546.265,465.937 L 549.062,465.48 L 551.934,464.925 L 554.658,464.272 L 557.308,463.553 L 559.959,462.77 L 562.499,461.921 L 565.039,461.007 L 567.432,459.995 L 569.677,458.95"/>
|
|
||||||
<path style="fill: #b6c7c9; fill-opacity: 1; stroke: none" fill-rule="evenodd" d="M 719.357 360.542 L 771.373,369.978 L 772.256,368.574 L 772.919,367.17 L 773.545,365.734 L 773.913,364.264 L 774.281,362.795 L 774.355,361.326 L 774.355,359.824 L 774.281,358.387 L 773.987,356.918 L 773.582,355.449 L 772.993,354.012 L 772.293,352.576 L 771.483,351.204 L 770.526,349.8 L 769.422,348.462 L 768.17,347.123 L 766.771,345.817 L 765.336,344.576 L 763.753,343.368 L 762.059,342.226 L 760.256,341.05 L 758.268,340.005 L 756.28,338.993 L 754.108,338.046 L 751.936,337.132 L 749.654,336.316 L 747.298,335.5 L 744.831,334.781 L 742.328,334.128 L 739.751,333.541 L 737.1,333.051 L 734.487,332.627 L 731.726,332.235 L 729.002,331.941 L 726.241,331.712 L 723.443,331.614 L 720.682,331.516 L 717.921,331.516 L 715.123,331.614 L 712.326,331.745 L 709.602,331.974 L 706.841,332.267 L 704.117,332.627 L 701.429,333.084 L 719.357,360.542z"/>
|
|
||||||
<path style="fill: none; stroke-opacity: 1; stroke-width: 0.02; stroke: #6c8f93" d="M 766.587 375.3 L 771.336,370.044 L 772.22,368.672 L 772.919,367.236 L 773.471,365.799 L 773.913,364.33 L 774.207,362.861 L 774.318,361.424 L 774.355,359.889 L 774.244,358.453 L 773.987,356.983 L 773.582,355.514 L 772.993,354.078 L 772.293,352.641 L 771.52,351.237 L 770.563,349.898 L 769.422,348.494 L 768.17,347.156 L 766.882,345.85 L 765.372,344.609 L 763.79,343.401 L 762.096,342.226 L 760.292,341.116 L 758.378,340.071 L 756.353,339.026 L 754.255,338.046 L 752.01,337.165 L 749.727,336.316 L 747.371,335.532 L 744.905,334.879 L 742.401,334.194 L 739.861,333.573 L 737.248,333.051 L 734.56,332.627 L 731.91,332.235 L 729.186,331.941 L 726.425,331.745 L 723.627,331.614 L 720.829,331.516 L 717.995,331.516 L 715.234,331.614 L 712.436,331.745 L 709.675,331.941 L 706.951,332.235 L 704.264,332.594 L 701.576,333.051"/>
|
|
||||||
<path style="fill: #b6c7c9; fill-opacity: 1; stroke: none" fill-rule="evenodd" d="M 726.756 398.906 L 785.325,410.856 L 786.503,409.289 L 787.46,407.754 L 788.343,406.122 L 789.043,404.489 L 789.521,402.857 L 789.853,401.224 L 789.963,399.527 L 789.963,397.861 L 789.742,396.196 L 789.411,394.564 L 788.822,392.899 L 788.123,391.299 L 787.202,389.699 L 786.208,388.099 L 784.957,386.564 L 783.558,385.095 L 782.049,383.593 L 780.318,382.124 L 778.478,380.753 L 726.756,398.906z"/>
|
|
||||||
<path style="fill: none; stroke-opacity: 1; stroke-width: 0.02; stroke: #6c8f93" d="M 777.889 416.276 L 785.251,410.921 L 786.356,409.387 L 787.46,407.754 L 788.307,406.155 L 789.006,404.489 L 789.485,402.857 L 789.853,401.224 L 790,399.527 L 789.963,397.861 L 789.742,396.164 L 789.337,394.531 L 788.822,392.899 L 788.123,391.266 L 787.202,389.634 L 786.172,388.034 L 784.883,386.467 L 783.521,384.997 L 781.901,383.495 L 780.245,382.059 L 778.367,380.687 L 766.587,375.3"/>
|
|
||||||
<path style="fill: #b6c7c9; fill-opacity: 1; stroke: none" fill-rule="evenodd" d="M 724.29 430.446 L 705.81,475.797 L 708.534,476.516 L 711.295,477.169 L 714.056,477.658 L 716.927,478.05 L 719.725,478.344 L 722.523,478.475 L 725.431,478.475 L 728.265,478.344 L 731.063,478.148 L 733.898,477.756 L 736.659,477.266 L 739.42,476.711 L 742.144,475.993 L 744.831,475.112 L 747.408,474.165 L 749.985,473.087 L 752.488,471.912 L 754.918,470.606 L 757.274,469.267 L 759.519,467.733 L 761.654,466.133 L 763.716,464.468 L 765.704,462.672 L 767.581,460.811 L 769.275,458.884 L 770.894,456.86 L 772.44,454.803 L 773.803,452.648 L 775.017,450.493 L 776.159,448.241 L 777.116,445.922 L 777.999,443.572 L 778.699,441.221 L 779.288,438.805 L 779.656,436.421 L 779.987,433.972 L 780.061,431.524 L 780.061,429.075 L 779.913,426.626 L 779.619,424.177 L 779.177,421.761 L 778.625,419.378 L 777.889,417.027 L 724.29,430.446z"/>
|
|
||||||
<path style="fill: none; stroke-opacity: 1; stroke-width: 0.02; stroke: #6c8f93" d="M 705.957 475.83 L 708.718,476.613 L 711.442,477.234 L 714.24,477.756 L 717.038,478.083 L 719.909,478.344 L 722.707,478.475 L 725.541,478.54 L 728.376,478.344 L 731.247,478.148 L 734.045,477.756 L 736.806,477.266 L 739.567,476.646 L 742.291,475.928 L 744.942,475.079 L 747.592,474.099 L 750.132,473.055 L 752.599,471.912 L 754.991,470.606 L 757.347,469.169 L 759.593,467.667 L 761.728,466.035 L 763.79,464.37 L 765.777,462.639 L 767.618,460.746 L 769.385,458.787 L 770.931,456.827 L 772.477,454.705 L 773.839,452.55 L 775.054,450.395 L 776.159,448.143 L 777.152,445.792 L 778.036,443.474 L 778.699,441.09 L 779.288,438.707 L 779.729,436.323 L 779.987,433.874 L 780.061,431.426 L 780.061,428.977 L 779.877,426.528 L 779.619,424.079 L 779.14,421.663 L 778.515,419.28 L 777.889,416.929"/>
|
|
||||||
<path style="fill: #b6c7c9; fill-opacity: 1; stroke: none" fill-rule="evenodd" d="M 490.162 404.685 L 487.365,373.896 L 485.303,374.059 L 483.352,374.255 L 481.291,374.582 L 479.303,374.974 L 477.352,375.431 L 475.437,376.019 L 473.56,376.574 L 471.719,377.325 L 469.879,378.043 L 468.149,378.859 L 466.455,379.773 L 464.835,380.72 L 463.252,381.732 L 461.817,382.842 L 460.381,383.952 L 459.056,385.128 L 457.804,386.369 L 456.663,387.675 L 455.522,388.981 L 454.528,390.385 L 453.681,391.821 L 452.871,393.258 L 452.098,394.694 L 451.509,396.196 L 451.031,397.731 L 450.589,399.265 L 450.258,400.833 L 450.11,402.432 L 450,403.967 L 450,405.534 L 450.11,407.069 L 450.331,408.669 L 450.663,410.203 L 451.031,411.738 L 451.583,413.272 L 452.172,414.774 L 452.908,416.243 L 453.718,417.68 L 454.638,419.084 L 455.632,420.488 L 456.773,421.761 L 457.915,423.067 L 459.203,424.308 L 460.565,425.483 L 461.964,426.626 L 463.473,427.671 L 465.056,428.683 L 466.676,429.663 L 468.406,430.544 L 470.1,431.36 L 471.94,432.111 L 490.162,404.685z"/>
|
|
||||||
<path style="fill: none; stroke-opacity: 1; stroke-width: 0.02; stroke: #6c8f93" d="M 487.365 373.896 L 485.414,374.059 L 483.389,374.255 L 481.401,374.582 L 479.487,374.941 L 477.536,375.398 L 475.621,375.888 L 473.781,376.508 L 471.977,377.161 L 470.173,377.88 L 468.517,378.696 L 466.786,379.577 L 465.204,380.492 L 463.657,381.471 L 462.185,382.549 L 460.712,383.659 L 459.424,384.769 L 458.136,386.009 L 456.994,387.25 L 455.89,388.556 L 454.933,389.895 L 454.013,391.266 L 453.129,392.637 L 452.393,394.074 L 451.73,395.543 L 451.178,397.045 L 450.773,398.547 L 450.368,400.082 L 450.147,401.616 L 450,403.151 L 450,404.685 L 450,406.22 L 450.221,407.754 L 450.442,409.289 L 450.773,410.824 L 451.252,412.325 L 451.73,413.795 L 452.393,415.231 L 453.203,416.733 L 454.013,418.137 L 454.933,419.476 L 455.964,420.814 L 457.031,422.12 L 458.172,423.361 L 459.424,424.569 L 460.786,425.712 L 462.222,426.822 L 463.694,427.867 L 465.277,428.846 L 466.823,429.793 L 468.517,430.642 L 470.247,431.426 L 472.014,432.177"/>
|
|
||||||
<path style="fill: #b6c7c9; fill-opacity: 1; stroke: none" fill-rule="evenodd" d="M 639.29 454.118 L 555.505,457.676 L 556.057,459.472 L 556.756,461.301 L 557.713,463.064 L 558.928,464.794 L 560.217,466.459 L 561.799,468.157 L 563.53,469.79 L 565.481,471.422 L 567.653,472.957 L 569.972,474.491 L 572.401,475.928 L 575.089,477.332 L 577.887,478.67 L 580.868,479.976 L 583.997,481.152 L 587.237,482.327 L 590.697,483.372 L 594.158,484.417 L 597.802,485.331 L 601.52,486.213 L 605.422,486.931 L 609.324,487.649 L 613.263,488.237 L 617.386,488.759 L 621.509,489.184 L 625.669,489.51 L 629.792,489.771 L 634.026,489.902 L 638.296,490 L 642.492,490 L 646.763,489.869 L 650.959,489.673 L 655.119,489.38 L 659.242,488.955 L 663.365,488.498 L 667.341,487.943 L 671.317,487.257 L 675.182,486.604 L 679.01,485.788 L 682.692,484.874 L 686.226,483.894 L 689.686,482.85 L 693.036,481.707 L 696.239,480.531 L 699.294,479.291 L 702.129,477.985 L 704.89,476.613 L 707.43,475.177 L 709.859,473.675 L 712.105,472.14 L 714.093,470.606 L 715.933,468.973 L 717.627,467.276 L 719.062,465.61 L 639.29,454.118z"/>
|
|
||||||
<path style="fill: none; stroke-opacity: 1; stroke-width: 0.02; stroke: #6c8f93" d="M 555.578 457.742 L 556.057,459.505 L 556.793,461.301 L 557.713,463.064 L 558.928,464.794 L 560.29,466.525 L 561.799,468.157 L 563.566,469.79 L 565.481,471.422 L 567.653,472.957 L 569.972,474.491 L 572.401,475.928 L 575.089,477.332 L 577.96,478.67 L 580.868,479.976 L 583.997,481.152 L 587.237,482.327 L 590.697,483.372 L 594.158,484.384 L 597.802,485.331 L 601.52,486.213 L 605.349,486.931 L 609.251,487.649 L 613.227,488.237 L 617.35,488.759 L 621.436,489.184 L 625.595,489.478 L 629.755,489.771 L 633.952,489.902 L 638.185,490 L 642.419,489.967 L 646.615,489.869 L 650.812,489.608 L 655.045,489.38 L 659.168,488.955 L 663.218,488.465 L 667.267,487.943 L 671.206,487.323 L 675.071,486.604 L 678.863,485.788 L 682.508,484.874 L 686.115,483.894 L 689.576,482.882 L 692.889,481.805 L 696.091,480.597 L 699.11,479.356 L 702.055,478.05 L 704.779,476.613 L 707.356,475.21 L 709.786,473.708 L 711.958,472.238 L 714.019,470.606 L 715.86,469.006 L 717.479,467.341 L 718.989,465.643"/>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<path style="fill: none; stroke-opacity: 1; stroke-width: 0.8; stroke: #00aed9" d="M 472.883 378.401 L 472.883,360.469"/>
|
|
||||||
<path style="fill: none; stroke-opacity: 1; stroke-width: 4; stroke: #00aed9" d="M 472.883 378.111 L 472.883,365.811"/>
|
|
||||||
<path style="fill: #000000; fill-opacity: 1; stroke: none" fill-rule="evenodd" d="M 473.404 362.192 L 472.308,362.192 L 472.308,360 L 473.404,360 L 473.404,362.192z"/>
|
|
||||||
<path style="fill: none; stroke-opacity: 1; stroke-width: 2; stroke: #00aed9" d="M 473.404 362.192 L 472.308,362.192 L 472.308,360 L 473.404,360 L 473.404,362.192"/>
|
|
||||||
<path style="fill: none; stroke-opacity: 1; stroke-width: 0.8; stroke: #00aed9" d="M 446.304 378.401 L 446.304,360.469"/>
|
|
||||||
<path style="fill: none; stroke-opacity: 1; stroke-width: 4; stroke: #00aed9" d="M 446.304 378.111 L 446.304,365.811"/>
|
|
||||||
<path style="fill: #000000; fill-opacity: 1; stroke: none" fill-rule="evenodd" d="M 446.824 362.192 L 445.728,362.192 L 445.728,360 L 446.824,360 L 446.824,362.192z"/>
|
|
||||||
<path style="fill: none; stroke-opacity: 1; stroke-width: 2; stroke: #00aed9" d="M 446.824 362.192 L 445.728,362.192 L 445.728,360 L 446.824,360 L 446.824,362.192"/>
|
|
||||||
<path style="fill: #00aed9; fill-opacity: 1; stroke: none" fill-rule="evenodd" d="M 480.318 380.677 C 480.318,385.007 471.293,388.516 460.159,388.516 C 449.025,388.516 440,385.007 440,380.677 L 440,392.16 C 440,396.49 449.025,400 460.159,400 C 471.293,400 480.318,396.49 480.318,392.16 L 480.318,380.677z"/>
|
|
||||||
<path style="fill: none; stroke-opacity: 1; stroke-width: 0.8; stroke: #ffffff" d="M 480.318 380.677 C 480.318,385.007 471.293,388.516 460.159,388.516 C 449.025,388.516 440,385.007 440,380.677 L 440,392.16 C 440,396.49 449.025,400 460.159,400 C 471.293,400 480.318,396.49 480.318,392.16 L 480.318,380.677"/>
|
|
||||||
<path style="fill: #00aed9; fill-opacity: 1; stroke: none" fill-rule="evenodd" d="M 460.159 388.516 C 471.293,388.516 480.318,385.007 480.318,380.677 C 480.318,376.347 471.293,372.837 460.159,372.837 C 449.025,372.837 440,376.347 440,380.677 C 440,385.007 449.025,388.516 460.159,388.516z"/>
|
|
||||||
<path style="fill: none; stroke-opacity: 1; stroke-width: 0.8; stroke: #ffffff" d="M 460.159 388.516 C 471.293,388.516 480.318,385.007 480.318,380.677 C 480.318,376.347 471.293,372.837 460.159,372.837 C 449.025,372.837 440,376.347 440,380.677 C 440,385.007 449.025,388.516 460.159,388.516"/>
|
|
||||||
<path style="fill: #ffffff; fill-opacity: 1; stroke: none" fill-rule="evenodd" d="M 455.555 377.612 L 457.22,380.109 L 450.927,381.563 L 452.301,380.419 L 442.574,378.756 L 445.015,376.927 L 454.4,378.516 L 455.555,377.612z"/>
|
|
||||||
<path style="fill: #ffffff; fill-opacity: 1; stroke: none" fill-rule="evenodd" d="M 464.413 383.666 L 463.276,381.093 L 468.953,379.958 L 467.968,380.84 L 477.431,382.456 L 475.162,384.272 L 465.754,382.507 L 464.413,383.666z"/>
|
|
||||||
<path style="fill: #ffffff; fill-opacity: 1; stroke: none" fill-rule="evenodd" d="M 461.308 376.248 L 467.667,374.508 L 467.742,377.234 L 466.153,376.93 L 463.048,379.503 L 460.088,379.072 L 463.29,376.554 L 461.308,376.248z"/>
|
|
||||||
<path style="fill: #ffffff; fill-opacity: 1; stroke: none" fill-rule="evenodd" d="M 458.583 386.014 L 452.528,387.149 L 452.301,384.349 L 454.041,384.726 L 457.374,381.88 L 460.324,382.38 L 456.767,385.484 L 458.583,386.014z"/>
|
|
||||||
</g>
|
|
||||||
<text font-size="21.4489" style="fill: #000000; fill-opacity: 1; stroke: none;text-anchor:start;font-family:sans-serif;font-style:italic;font-weight:normal" x="620" y="390">
|
|
||||||
<tspan x="620" y="390">Mesh</tspan>
|
|
||||||
</text>
|
|
||||||
<g>
|
|
||||||
<path style="fill: #c9c9b6; fill-opacity: 1; stroke: none" fill-rule="evenodd" d="M 294.294 324.172 L 328.289,324.172 L 313.995,338.514 L 280,338.514 L 294.294,324.172z"/>
|
|
||||||
<path style="fill: none; stroke-opacity: 1; stroke-width: 0.02; stroke: #494936" d="M 294.294 324.172 L 328.289,324.172 L 313.995,338.514 L 280,338.514 L 294.294,324.172"/>
|
|
||||||
<path style="fill: none; stroke-opacity: 1; stroke-width: 0.02; stroke: #dbdbce" d="M 295.599 336.092 L 295.599,336.168 L 295.613,336.23 L 295.633,336.314 L 295.661,336.397 L 295.703,336.46 L 295.751,336.536 L 295.814,336.605 L 295.876,336.668 L 295.939,336.744 L 296.022,336.821 L 296.106,336.883 L 296.196,336.939 L 296.3,336.994 L 296.397,337.057 L 296.522,337.105 L 296.633,337.168 L 296.758,337.216 L 296.897,337.265 L 297.036,337.306 L 297.168,337.348 L 297.313,337.39 L 297.459,337.431 L 297.612,337.452 L 297.779,337.48 L 297.938,337.494 L 298.105,337.522 L 298.258,337.543 L 298.431,337.563 L 298.605,337.57 L 298.771,337.577 L 298.938,337.577"/>
|
|
||||||
<path style="fill: none; stroke-opacity: 1; stroke-width: 0.02; stroke: #dbdbce" d="M 298.57 337.577 L 298.737,337.577 L 298.896,337.57 L 299.056,337.556 L 299.222,337.536 L 299.389,337.522 L 299.542,337.494 L 299.695,337.48 L 299.854,337.445 L 300,337.411 L 300.153,337.369 L 300.285,337.327 L 300.423,337.286 L 300.555,337.237 L 300.68,337.188 L 300.791,337.14 L 300.909,337.084 L 301.02,337.022 L 301.118,336.966 L 301.215,336.897 L 301.298,336.827 L 301.375,336.758 L 301.437,336.696 L 301.506,336.619 L 301.562,336.543 L 301.604,336.48 L 301.652,336.404 L 301.673,336.314 L 301.694,336.237 L 301.715,336.168 L 301.722,336.092"/>
|
|
||||||
<path style="fill: none; stroke-opacity: 1; stroke-width: 0.02; stroke: #dbdbce" d="M 299.306 333.308 L 299.132,333.308 L 298.966,333.315 L 298.792,333.315 L 298.639,333.329 L 298.473,333.35 L 298.306,333.363 L 298.146,333.377 L 297.98,333.412 L 297.834,333.44 L 297.688,333.461 L 297.543,333.495 L 297.397,333.537 L 297.265,333.572 L 297.14,333.613 L 297.015,333.669 L 296.876,333.711 L 296.779,333.759 L 296.668,333.801 L 296.564,333.856 L 296.48,333.919 L 296.39,333.974 L 296.314,334.023 L 296.237,334.085 L 296.182,334.148 L 296.126,334.217 L 296.071,334.28 L 296.043,334.335 L 296.008,334.405 L 295.988,334.46 L 295.981,334.537 L 295.974,334.592"/>
|
|
||||||
<path style="fill: none; stroke-opacity: 1; stroke-width: 0.02; stroke: #dbdbce" d="M 302.083 334.592 L 302.083,334.53 L 302.076,334.46 L 302.048,334.398 L 302.02,334.321 L 301.985,334.266 L 301.93,334.19 L 301.874,334.134 L 301.819,334.065 L 301.736,334.016 L 301.673,333.947 L 301.59,333.891 L 301.479,333.842 L 301.388,333.773 L 301.284,333.738 L 301.173,333.683 L 301.048,333.627 L 300.916,333.586 L 300.784,333.544 L 300.653,333.509 L 300.514,333.481 L 300.368,333.447 L 300.215,333.412 L 300.069,333.391 L 299.917,333.363 L 299.764,333.35 L 299.604,333.329 L 299.438,333.315 L 299.264,333.315 L 299.098,333.308 L 298.938,333.308"/>
|
|
||||||
<path style="fill: #a5a585; fill-opacity: 1; stroke: none" fill-rule="evenodd" d="M 280 340 L 313.995,340 L 313.995,338.514 L 280,338.514 L 280,340z"/>
|
|
||||||
<path style="fill: none; stroke-opacity: 1; stroke-width: 0.02; stroke: #494936" d="M 280 340 L 313.995,340 L 313.995,338.514 L 280,338.514 L 280,340"/>
|
|
||||||
<path style="fill: #a5a585; fill-opacity: 1; stroke: none" fill-rule="evenodd" d="M 294.294 324.172 L 328.289,324.172 L 328.289,300.916 L 294.294,300.916 L 294.294,324.172z"/>
|
|
||||||
<path style="fill: none; stroke-opacity: 1; stroke-width: 0.02; stroke: #494936" d="M 294.294 324.172 L 328.289,324.172 L 328.289,300.916 L 294.294,300.916 L 294.294,324.172"/>
|
|
||||||
<path style="fill: #7a7a5a; fill-opacity: 1; stroke: none" fill-rule="evenodd" d="M 329.219 323.256 L 329.219,300 L 328.289,300.916 L 328.289,324.172 L 329.219,323.256z"/>
|
|
||||||
<path style="fill: none; stroke-opacity: 1; stroke-width: 0.02; stroke: #494936" d="M 329.219 323.256 L 329.219,300 L 328.289,300.916 L 328.289,324.172 L 329.219,323.256"/>
|
|
||||||
<path style="fill: #ffffff; fill-opacity: 1; stroke: none" fill-rule="evenodd" d="M 295.974 322.694 L 326.623,322.694 L 326.623,302.784 L 295.974,302.784 L 295.974,322.694z"/>
|
|
||||||
<path style="fill: none; stroke-opacity: 1; stroke-width: 0.02; stroke: #494936" d="M 295.974 322.694 L 326.623,322.694 L 326.623,302.784 L 295.974,302.784 L 295.974,322.694"/>
|
|
||||||
<path style="fill: #93936c; fill-opacity: 1; stroke: none" fill-rule="evenodd" d="M 295.974 325.297 L 324.568,325.297 L 317.14,332.746 L 288.546,332.746 L 295.974,325.297z"/>
|
|
||||||
<path style="fill: none; stroke-opacity: 1; stroke-width: 0.02; stroke: #494936" d="M 295.974 325.297 L 324.568,325.297 L 317.14,332.746 L 288.546,332.746 L 295.974,325.297"/>
|
|
||||||
<path style="fill: #7a7a5a; fill-opacity: 1; stroke: none" fill-rule="evenodd" d="M 300.423 335.62 L 300.423,335.578 L 300.417,335.536 L 300.41,335.495 L 300.389,335.446 L 300.382,335.404 L 300.354,335.37 L 300.34,335.328 L 300.305,335.3 L 300.271,335.259 L 300.25,335.217 L 300.215,335.182 L 300.174,335.148 L 300.132,335.106 L 300.083,335.071 L 300.042,335.05 L 299.993,335.016 L 299.938,334.988 L 299.875,334.967 L 299.826,334.932 L 299.764,334.918 L 299.701,334.891 L 299.646,334.877 L 299.577,334.856 L 299.514,334.842 L 299.438,334.828 L 299.375,334.807 L 299.306,334.8 L 299.243,334.8 L 299.174,334.793 L 299.091,334.793 L 299.035,334.793 L 299.035,334.793 L 298.959,334.793 L 298.882,334.793 L 298.82,334.8 L 298.75,334.8 L 298.688,334.807 L 298.612,334.828 L 298.549,334.842 L 298.48,334.856 L 298.417,334.877 L 298.355,334.891 L 298.299,334.918 L 298.23,334.932 L 298.181,334.967 L 298.126,334.988 L 298.07,335.016 L 298.022,335.05 L 297.98,335.071 L 297.931,335.106 L 297.89,335.148 L 297.855,335.182 L 297.806,335.217 L 297.785,335.259 L 297.744,335.3 L 297.723,335.328 L 297.702,335.37 L 297.681,335.404 L 297.667,335.446 L 297.661,335.495 L 297.647,335.536 L 297.633,335.578 L 297.633,335.62 L 297.633,335.62 L 297.633,335.668 L 297.647,335.71 L 297.661,335.751 L 297.667,335.793 L 297.681,335.835 L 297.702,335.869 L 297.723,335.918 L 297.744,335.953 L 297.785,335.994 L 297.806,336.022 L 297.855,336.064 L 297.89,336.099 L 297.931,336.14 L 297.98,336.168 L 298.022,336.196 L 298.07,336.23 L 298.126,336.258 L 298.181,336.279 L 298.23,336.314 L 298.299,336.328 L 298.355,336.355 L 298.417,336.369 L 298.48,336.39 L 298.549,336.404 L 298.612,336.418 L 298.688,336.432 L 298.75,336.446 L 298.82,336.446 L 298.882,336.446 L 298.959,336.453 L 299.035,336.453 L 299.035,336.453 L 299.091,336.453 L 299.174,336.446 L 299.243,336.446 L 299.306,336.446 L 299.375,336.432 L 299.438,336.418 L 299.514,336.404 L 299.577,336.39 L 299.646,336.369 L 299.701,336.355 L 299.764,336.328 L 299.826,336.314 L 299.875,336.279 L 299.938,336.258 L 299.993,336.23 L 300.042,336.196 L 300.083,336.168 L 300.132,336.14 L 300.174,336.099 L 300.215,336.064 L 300.25,336.022 L 300.271,335.994 L 300.305,335.953 L 300.34,335.918 L 300.354,335.869 L 300.382,335.835 L 300.389,335.793 L 300.41,335.751 L 300.417,335.71 L 300.423,335.668 L 300.423,335.62z"/>
|
|
||||||
<path style="fill: none; stroke-opacity: 1; stroke-width: 0.02; stroke: #dbdbce" d="M 300.243 335.536 L 300.243,335.495 L 300.236,335.453 L 300.236,335.418 L 300.215,335.39 L 300.201,335.335 L 300.194,335.314 L 300.16,335.272 L 300.132,335.231 L 300.111,335.203 L 300.083,335.175 L 300.042,335.148 L 300.007,335.099 L 299.965,335.071 L 299.924,335.05 L 299.889,335.016 L 299.833,334.988 L 299.792,334.974 L 299.743,334.939 L 299.695,334.925 L 299.632,334.898 L 299.577,334.884 L 299.514,334.87 L 299.459,334.849 L 299.396,334.835 L 299.334,334.828 L 299.264,334.807 L 299.209,334.8 L 299.132,334.793 L 299.077,334.793 L 299.007,334.793 L 298.945,334.793 L 298.945,334.793 L 298.875,334.793 L 298.813,334.793 L 298.743,334.793 L 298.688,334.8 L 298.619,334.807 L 298.563,334.828 L 298.487,334.835 L 298.431,334.849 L 298.383,334.87 L 298.313,334.884 L 298.258,334.898 L 298.188,334.925 L 298.153,334.939 L 298.091,334.974 L 298.049,334.988 L 298.001,335.016 L 297.959,335.05 L 297.917,335.071 L 297.876,335.099 L 297.841,335.148 L 297.806,335.175 L 297.779,335.203 L 297.744,335.231 L 297.73,335.272 L 297.702,335.314 L 297.688,335.335 L 297.674,335.39 L 297.661,335.418 L 297.654,335.453 L 297.647,335.495 L 297.647,335.536 L 297.647,335.536 L 297.647,335.571 L 297.654,335.613 L 297.661,335.654 L 297.674,335.675 L 297.688,335.717 L 297.702,335.758 L 297.73,335.793 L 297.744,335.828 L 297.779,335.869 L 297.806,335.89 L 297.841,335.925 L 297.876,335.96 L 297.917,335.994 L 297.959,336.015 L 298.001,336.05 L 298.049,336.071 L 298.091,336.099 L 298.153,336.126 L 298.188,336.14 L 298.258,336.168 L 298.313,336.189 L 298.383,336.196 L 298.431,336.217 L 298.487,336.23 L 298.563,336.237 L 298.619,336.258 L 298.688,336.272 L 298.743,336.272 L 298.813,336.272 L 298.875,336.272 L 298.945,336.272 L 298.945,336.272 L 299.007,336.272 L 299.077,336.272 L 299.132,336.272 L 299.209,336.272 L 299.264,336.258 L 299.334,336.237 L 299.396,336.23 L 299.459,336.217 L 299.514,336.196 L 299.577,336.189 L 299.632,336.168 L 299.695,336.14 L 299.743,336.126 L 299.792,336.099 L 299.833,336.071 L 299.889,336.05 L 299.924,336.015 L 299.965,335.994 L 300.007,335.96 L 300.042,335.925 L 300.083,335.89 L 300.111,335.869 L 300.132,335.828 L 300.16,335.793 L 300.194,335.758 L 300.201,335.717 L 300.215,335.675 L 300.236,335.654 L 300.236,335.613 L 300.243,335.571 L 300.243,335.536"/>
|
|
||||||
<path style="fill: none; stroke-opacity: 1; stroke-width: 0.02; stroke: #626248" d="M 295.793 336.272 L 295.793,336.355 L 295.807,336.418 L 295.835,336.494 L 295.856,336.578 L 295.897,336.647 L 295.939,336.709 L 296.001,336.786 L 296.064,336.862 L 296.133,336.925 L 296.203,336.994 L 296.293,337.057 L 296.376,337.126 L 296.487,337.182 L 296.591,337.237 L 296.703,337.286 L 296.821,337.348 L 296.952,337.397 L 297.07,337.445 L 297.223,337.487 L 297.362,337.529 L 297.508,337.577 L 297.654,337.612 L 297.806,337.633 L 297.959,337.661 L 298.126,337.688 L 298.285,337.702 L 298.445,337.73 L 298.612,337.744 L 298.785,337.751 L 298.952,337.751 L 299.118,337.751"/>
|
|
||||||
<path style="fill: none; stroke-opacity: 1; stroke-width: 0.02; stroke: #626248" d="M 298.743 337.751 L 298.917,337.751 L 299.077,337.751 L 299.25,337.737 L 299.403,337.716 L 299.563,337.702 L 299.729,337.688 L 299.875,337.661 L 300.035,337.626 L 300.174,337.591 L 300.326,337.563 L 300.472,337.522 L 300.604,337.48 L 300.736,337.431 L 300.861,337.369 L 300.986,337.32 L 301.09,337.265 L 301.201,337.209 L 301.298,337.14 L 301.388,337.084 L 301.479,337.008 L 301.555,336.952 L 301.631,336.883 L 301.694,336.8 L 301.736,336.723 L 301.798,336.661 L 301.826,336.578 L 301.86,336.501 L 301.888,336.418 L 301.888,336.355 L 301.902,336.272"/>
|
|
||||||
<path style="fill: none; stroke-opacity: 1; stroke-width: 0.02; stroke: #626248" d="M 299.486 333.488 L 299.327,333.488 L 299.16,333.495 L 298.993,333.495 L 298.827,333.509 L 298.653,333.53 L 298.487,333.537 L 298.341,333.565 L 298.174,333.586 L 298.022,333.627 L 297.876,333.641 L 297.73,333.683 L 297.591,333.711 L 297.452,333.759 L 297.327,333.801 L 297.202,333.842 L 297.07,333.884 L 296.966,333.933 L 296.855,333.981 L 296.758,334.044 L 296.668,334.099 L 296.585,334.148 L 296.501,334.217 L 296.418,334.266 L 296.369,334.321 L 296.314,334.398 L 296.265,334.453 L 296.224,334.523 L 296.196,334.578 L 296.175,334.641 L 296.168,334.717 L 296.161,334.787"/>
|
|
||||||
<path style="fill: none; stroke-opacity: 1; stroke-width: 0.02; stroke: #626248" d="M 302.277 334.787 L 302.263,334.71 L 302.256,334.641 L 302.242,334.578 L 302.208,334.509 L 302.166,334.446 L 302.117,334.377 L 302.062,334.321 L 301.999,334.259 L 301.93,334.19 L 301.847,334.134 L 301.763,334.072 L 301.673,334.016 L 301.562,333.967 L 301.465,333.919 L 301.347,333.87 L 301.236,333.815 L 301.111,333.773 L 300.979,333.738 L 300.833,333.697 L 300.694,333.669 L 300.555,333.627 L 300.41,333.599 L 300.257,333.572 L 300.09,333.544 L 299.944,333.53 L 299.785,333.509 L 299.618,333.495 L 299.445,333.495 L 299.292,333.488 L 299.118,333.488"/>
|
|
||||||
<path style="fill: #7a7a5a; fill-opacity: 1; stroke: none" fill-rule="evenodd" d="M 328.289 325.477 L 313.995,339.82 L 313.995,338.514 L 328.289,324.172 L 328.289,325.477z"/>
|
|
||||||
<path style="fill: none; stroke-opacity: 1; stroke-width: 0.02; stroke: #494936" d="M 328.289 325.477 L 313.995,339.82 L 313.995,338.514 L 328.289,324.172 L 328.289,325.477"/>
|
|
||||||
<path style="fill: #7a7a5a; fill-opacity: 1; stroke: none" fill-rule="evenodd" d="M 323.464 323.075 L 323.464,323.429 L 326.248,323.429 L 326.248,323.075 L 323.464,323.075z"/>
|
|
||||||
<path style="fill: none; stroke-opacity: 1; stroke-width: 0.02; stroke: #494936" d="M 323.464 323.075 L 323.464,323.429 L 326.248,323.429 L 326.248,323.075 L 323.464,323.075"/>
|
|
||||||
<path style="fill: none; stroke-opacity: 1; stroke-width: 0.02; stroke: #000000" d="M 322.7 327.157 L 294.294,327.157"/>
|
|
||||||
<path style="fill: none; stroke-opacity: 1; stroke-width: 0.02; stroke: #000000" d="M 320.854 329.025 L 292.447,329.025"/>
|
|
||||||
<path style="fill: none; stroke-opacity: 1; stroke-width: 0.02; stroke: #000000" d="M 319 330.885 L 290.587,330.885"/>
|
|
||||||
<path style="fill: #c9c9b6; fill-opacity: 1; stroke: none" fill-rule="evenodd" d="M 295.224 300 L 329.219,300 L 328.289,300.916 L 294.294,300.916 L 295.224,300z"/>
|
|
||||||
<path style="fill: none; stroke-opacity: 1; stroke-width: 0.02; stroke: #494936" d="M 295.224 300 L 329.219,300 L 328.289,300.916 L 294.294,300.916 L 295.224,300"/>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<path style="fill: #7a7a5a; fill-opacity: 1; stroke: none" fill-rule="evenodd" d="M 260.594 397.19 C 260.943,395.941 262.38,389.684 262.447,388.811 C 262.514,387.938 262.192,386.851 261.722,386.623 C 261.749,386.314 261.749,386.139 261.749,386.139 C 261.641,386.099 261.521,386.059 261.413,386.005 L 261.453,386.018 C 261.453,386.018 261.776,384.622 261.977,383.655 C 262.34,381.802 262.38,380.862 262.38,380.862 C 262.367,380.607 262.299,380.379 262.071,380.312 L 260.984,380.016 C 260.755,379.949 260.594,380.097 260.446,380.325 C 260.446,380.325 260.017,381.184 259.426,382.957 C 259.104,383.883 258.808,385.065 258.808,385.065 L 258.822,385.065 C 258.177,384.85 257.519,384.662 256.861,384.474 C 255.169,384.004 253.491,383.655 251.799,383.4 C 251.799,383.4 251.719,383.548 251.571,383.83 C 251.061,383.776 250.228,384.555 249.839,385.334 C 249.449,386.112 247.476,392.222 247.126,393.471 C 246.777,394.719 246.119,397.915 245.824,399.499 C 245.529,401.084 245.26,403.85 244.24,407.529 C 243.635,409.704 242.669,412.954 242.158,414.296 C 242.024,414.659 240.963,416.445 242.507,417.062 C 244.025,417.667 246.294,418.311 247.435,418.633 C 248.577,418.942 250.846,419.546 252.457,419.815 C 254.095,420.084 254.109,417.989 254.176,417.613 C 254.431,416.203 255.263,412.913 255.854,410.738 C 256.875,407.046 258.07,404.548 258.634,403.031 C 259.184,401.514 260.245,398.439 260.594,397.19z"/>
|
|
||||||
<path style="fill: none; stroke-opacity: 1; stroke-width: 0.8; stroke: #000000" d="M 260.594 397.19 C 260.943,395.941 262.38,389.684 262.447,388.811 C 262.514,387.938 262.192,386.851 261.722,386.623 C 261.749,386.314 261.749,386.139 261.749,386.139 C 261.641,386.099 261.521,386.059 261.413,386.005 L 261.453,386.018 C 261.453,386.018 261.776,384.622 261.977,383.655 C 262.34,381.802 262.38,380.862 262.38,380.862 C 262.367,380.607 262.299,380.379 262.071,380.312 L 260.984,380.016 C 260.755,379.949 260.594,380.097 260.446,380.325 C 260.446,380.325 260.017,381.184 259.426,382.957 C 259.104,383.883 258.808,385.065 258.808,385.065 L 258.822,385.065 C 258.177,384.85 257.519,384.662 256.861,384.474 C 255.169,384.004 253.491,383.655 251.799,383.4 C 251.799,383.4 251.719,383.548 251.571,383.83 L 251.571,383.83 C 251.061,383.776 250.228,384.555 249.839,385.334 C 249.449,386.112 247.476,392.222 247.126,393.471 C 246.777,394.719 246.119,397.915 245.824,399.499 C 245.529,401.084 245.26,403.85 244.24,407.529 C 243.635,409.704 242.669,412.954 242.158,414.296 C 242.024,414.659 240.963,416.445 242.507,417.062 C 244.025,417.667 246.294,418.311 247.435,418.633 C 248.577,418.942 250.846,419.546 252.457,419.815 C 254.095,420.084 254.109,417.989 254.176,417.613 C 254.431,416.203 255.263,412.913 255.854,410.738 C 256.875,407.046 258.07,404.548 258.634,403.031 C 259.184,401.514 260.245,398.439 260.594,397.19"/>
|
|
||||||
<path style="fill: #b7b79d; fill-opacity: 1; stroke: none" fill-rule="evenodd" d="M 258.916 397.351 C 259.265,396.102 260.702,389.845 260.769,388.986 C 260.836,388.113 260.514,387.012 260.044,386.797 C 260.07,386.488 260.07,386.314 260.07,386.314 C 259.963,386.26 259.842,386.22 259.735,386.179 L 259.762,386.193 C 259.762,386.193 260.097,384.796 260.299,383.83 C 260.661,381.963 260.688,381.023 260.688,381.023 C 260.688,380.768 260.621,380.553 260.393,380.486 L 259.305,380.191 C 259.077,380.124 258.916,380.271 258.768,380.5 C 258.768,380.5 258.338,381.359 257.748,383.118 C 257.425,384.058 257.13,385.226 257.13,385.226 L 257.143,385.24 C 256.499,385.025 255.841,384.823 255.183,384.649 C 253.491,384.179 251.799,383.816 250.121,383.561 C 250.121,383.561 250.04,383.722 249.893,383.991 C 249.382,383.951 248.55,384.716 248.16,385.495 C 247.771,386.273 245.797,392.383 245.448,393.645 C 245.099,394.894 244.441,398.076 244.146,399.661 C 243.85,401.245 243.582,404.011 242.561,407.704 C 241.957,409.879 240.99,413.115 240.48,414.471 C 240.346,414.82 239.285,416.619 240.829,417.237 C 242.346,417.828 244.616,418.486 245.757,418.795 C 246.898,419.117 249.167,419.708 250.779,419.976 C 252.417,420.245 252.43,418.163 252.497,417.788 C 252.753,416.364 253.585,413.088 254.176,410.913 C 255.196,407.22 256.391,404.709 256.955,403.192 C 257.506,401.688 258.567,398.613 258.916,397.351z"/>
|
|
||||||
<path style="fill: none; stroke-opacity: 1; stroke-width: 0.8; stroke: #000000" d="M 258.916 397.351 C 259.265,396.102 260.702,389.845 260.769,388.986 C 260.836,388.113 260.514,387.012 260.044,386.797 C 260.07,386.488 260.07,386.314 260.07,386.314 C 259.963,386.26 259.842,386.22 259.735,386.179 L 259.762,386.193 C 259.762,386.193 260.097,384.796 260.299,383.83 C 260.661,381.963 260.688,381.023 260.688,381.023 C 260.688,380.768 260.621,380.553 260.393,380.486 L 259.305,380.191 C 259.077,380.124 258.916,380.271 258.768,380.5 C 258.768,380.5 258.338,381.359 257.748,383.118 C 257.425,384.058 257.13,385.226 257.13,385.226 L 257.143,385.24 C 256.499,385.025 255.841,384.823 255.183,384.649 C 253.491,384.179 251.799,383.816 250.121,383.561 C 250.121,383.561 250.04,383.722 249.893,383.991 L 249.893,383.991 C 249.382,383.951 248.55,384.716 248.16,385.495 C 247.771,386.273 245.797,392.383 245.448,393.645 C 245.099,394.894 244.441,398.076 244.146,399.661 C 243.85,401.245 243.582,404.011 242.561,407.704 C 241.957,409.879 240.99,413.115 240.48,414.471 C 240.346,414.82 239.285,416.619 240.829,417.237 C 242.346,417.828 244.616,418.486 245.757,418.795 C 246.898,419.117 249.167,419.708 250.779,419.976 C 252.417,420.245 252.43,418.163 252.497,417.788 C 252.753,416.364 253.585,413.088 254.176,410.913 C 255.196,407.22 256.391,404.709 256.955,403.192 C 257.506,401.688 258.567,398.613 258.916,397.351"/>
|
|
||||||
<path style="fill: #c9c9b6; fill-opacity: 1; stroke-opacity: 1; stroke-width: 0.8; stroke: #ecece7" fill-rule="evenodd" d="M 250.336 383.601 C 250.336,383.601 248.12,388.126 246.845,392.719 C 245.341,398.184 245.126,399.996 245.354,402.534 C 245.394,403.058 245.918,403.702 246.495,403.863 C 246.724,403.917 246.992,403.998 247.1,404.024 C 247.22,404.065 247.65,404.159 247.999,404.441 C 248.362,404.723 248.442,404.79 248.657,404.897 C 248.859,405.018 248.899,405.099 249.49,405.26 C 250.08,405.421 250.148,405.381 250.389,405.381 C 250.631,405.394 250.738,405.381 251.195,405.327 C 251.638,405.26 252.054,405.394 252.175,405.421 C 252.283,405.461 252.551,405.528 252.779,405.595 C 253.357,405.757 254.136,405.475 254.444,405.045 C 255.935,402.991 256.687,401.312 258.191,395.847 C 259.453,391.255 259.869,386.233 259.869,386.233 L 250.336,383.601z"/>
|
|
||||||
<path style="fill: #000000; fill-opacity: 1; stroke: none" fill-rule="evenodd" d="M 253.021 402.561 C 252.632,403.998 251.141,404.83 249.718,404.441 C 248.281,404.051 247.449,402.561 247.838,401.138 C 248.241,399.701 249.718,398.868 251.141,399.258 C 252.578,399.661 253.41,401.138 253.021,402.561z"/>
|
|
||||||
<path style="fill: #000000; fill-opacity: 1; stroke: none" fill-rule="evenodd" d="M 248.066 398.157 C 248.429,398.264 248.711,398.412 248.845,398.492 C 248.979,398.586 249.02,398.707 248.899,398.788 C 248.778,398.868 248.563,399.029 248.442,399.137 C 248.295,399.258 248.201,399.285 247.999,399.164 C 247.637,398.962 246.871,398.412 246.683,398.157 C 246.576,398.022 246.67,397.969 246.871,397.955 C 247.14,397.942 247.677,398.049 248.066,398.157z"/>
|
|
||||||
<path style="fill: #ff0000; fill-opacity: 1; stroke: none" fill-rule="evenodd" d="M 246.16 400.99 C 246.361,401.057 246.845,401.299 246.979,401.406 C 247.126,401.5 247.341,401.728 247.328,401.997 C 247.301,402.306 247.328,402.964 247.462,403.179 C 247.637,403.46 247.61,403.581 247.355,403.541 C 247.153,403.501 246.63,403.313 246.482,403.232 C 246.334,403.165 246.119,403.031 246.052,402.829 C 245.918,402.413 245.878,401.554 245.958,401.124 C 245.985,400.95 246.066,400.95 246.16,400.99z"/>
|
|
||||||
<path style="fill: none; stroke-opacity: 1; stroke-width: 0.8; stroke: #ffffff" d="M 253.021 402.561 C 252.632,403.998 251.141,404.83 249.718,404.441 C 248.281,404.051 247.449,402.561 247.838,401.138 C 248.241,399.701 249.718,398.868 251.141,399.258 C 252.578,399.661 253.41,401.138 253.021,402.561"/>
|
|
||||||
<path style="fill: none; stroke-opacity: 1; stroke-width: 0.8; stroke: #ffffff" d="M 248.066 398.157 C 248.429,398.264 248.711,398.412 248.845,398.492 C 248.979,398.586 249.02,398.707 248.899,398.788 C 248.778,398.868 248.563,399.029 248.442,399.137 C 248.295,399.258 248.201,399.285 247.999,399.164 C 247.637,398.962 246.871,398.412 246.683,398.157 C 246.576,398.022 246.67,397.969 246.871,397.955 C 247.14,397.942 247.677,398.049 248.066,398.157"/>
|
|
||||||
<path style="fill: none; stroke-opacity: 1; stroke-width: 0.8; stroke: #ffffff" d="M 246.16 400.99 C 246.361,401.057 246.845,401.299 246.979,401.406 C 247.126,401.5 247.341,401.728 247.328,401.997 C 247.301,402.306 247.328,402.964 247.462,403.179 C 247.637,403.46 247.61,403.581 247.355,403.541 C 247.153,403.501 246.63,403.313 246.482,403.232 C 246.334,403.165 246.119,403.031 246.052,402.829 C 245.918,402.413 245.878,401.554 245.958,401.124 C 245.985,400.95 246.066,400.95 246.16,400.99"/>
|
|
||||||
<path style="fill: #000000; fill-opacity: 1; stroke: none" fill-rule="evenodd" d="M 254.35 399.889 C 253.988,399.795 253.679,399.781 253.518,399.781 C 253.357,399.795 253.263,399.875 253.316,399.996 C 253.384,400.13 253.491,400.386 253.531,400.533 C 253.598,400.708 253.666,400.788 253.894,400.802 C 254.31,400.802 255.25,400.721 255.545,400.6 C 255.693,400.533 255.639,400.439 255.478,400.332 C 255.25,400.184 254.74,399.996 254.35,399.889z"/>
|
|
||||||
<path style="fill: #00ff00; fill-opacity: 1; stroke: none" fill-rule="evenodd" d="M 254.538 403.299 C 254.337,403.246 253.786,403.219 253.612,403.232 C 253.451,403.246 253.142,403.326 253.021,403.568 C 252.887,403.85 252.524,404.4 252.296,404.521 C 252.001,404.669 251.96,404.79 252.202,404.87 C 252.39,404.951 252.941,405.058 253.102,405.072 C 253.276,405.085 253.518,405.085 253.679,404.938 C 254.028,404.656 254.485,403.93 254.646,403.528 C 254.713,403.366 254.646,403.326 254.538,403.299z"/>
|
|
||||||
<path style="fill: none; stroke-opacity: 1; stroke-width: 0.8; stroke: #ffffff" d="M 254.35 399.889 C 253.988,399.795 253.679,399.781 253.518,399.781 C 253.357,399.795 253.263,399.875 253.316,399.996 C 253.384,400.13 253.491,400.386 253.531,400.533 C 253.598,400.708 253.666,400.788 253.894,400.802 C 254.31,400.802 255.25,400.721 255.545,400.6 C 255.693,400.533 255.639,400.439 255.478,400.332 C 255.25,400.184 254.74,399.996 254.35,399.889"/>
|
|
||||||
<path style="fill: none; stroke-opacity: 1; stroke-width: 0.8; stroke: #ffffff" d="M 254.538 403.299 C 254.337,403.246 253.786,403.219 253.612,403.232 C 253.451,403.246 253.142,403.326 253.021,403.568 C 252.887,403.85 252.524,404.4 252.296,404.521 C 252.001,404.669 251.96,404.79 252.202,404.87 C 252.39,404.951 252.941,405.058 253.102,405.072 C 253.276,405.085 253.518,405.085 253.679,404.938 C 254.028,404.656 254.485,403.93 254.646,403.528 C 254.713,403.366 254.646,403.326 254.538,403.299"/>
|
|
||||||
<path style="fill: none; stroke-opacity: 1; stroke-width: 0.8; stroke: #ffffff" d="M 254.095 387.791 L 254.981,384.582"/>
|
|
||||||
<path style="fill: none; stroke-opacity: 1; stroke-width: 0.8; stroke: #ffffff" d="M 254.391 387.871 L 255.277,384.662"/>
|
|
||||||
<path style="fill: none; stroke-opacity: 1; stroke-width: 0.8; stroke: #000000" d="M 260.688 380.889 C 260.688,380.889 260.178,380.741 259.748,380.634 C 259.372,380.527 258.835,380.379 258.835,380.379"/>
|
|
||||||
<path style="fill: none; stroke-opacity: 1; stroke-width: 0.8; stroke: #000000" d="M 258.916 397.351 C 259.265,396.102 260.702,389.845 260.769,388.986 C 260.836,388.113 260.514,387.012 260.044,386.797 C 260.07,386.488 260.07,386.314 260.07,386.314 C 259.963,386.26 259.842,386.22 259.735,386.179 L 259.762,386.193 C 259.762,386.193 260.097,384.796 260.299,383.83 C 260.661,381.963 260.688,381.023 260.688,381.023 C 260.688,380.768 260.621,380.553 260.393,380.486 L 259.305,380.191 C 259.077,380.124 258.916,380.271 258.768,380.5 C 258.768,380.5 258.338,381.359 257.748,383.118 C 257.425,384.058 257.13,385.226 257.13,385.226 L 257.143,385.24 C 256.499,385.025 255.841,384.823 255.183,384.649 C 253.491,384.179 251.799,383.816 250.121,383.561 C 250.121,383.561 250.04,383.722 249.893,383.991 L 249.893,383.991 C 249.382,383.951 248.55,384.716 248.16,385.495 C 247.771,386.273 245.797,392.383 245.448,393.645 C 245.099,394.894 244.441,398.076 244.146,399.661 C 243.85,401.245 243.582,404.011 242.561,407.704 C 241.957,409.879 240.99,413.115 240.48,414.471 C 240.346,414.82 239.285,416.619 240.829,417.237 C 242.346,417.828 244.616,418.486 245.757,418.795 C 246.898,419.117 249.167,419.708 250.779,419.976 C 252.417,420.245 252.43,418.163 252.497,417.788 C 252.753,416.364 253.585,413.088 254.176,410.913 C 255.196,407.22 256.391,404.709 256.955,403.192 C 257.506,401.688 258.567,398.613 258.916,397.351"/>
|
|
||||||
<path style="fill: #000000; fill-opacity: 1; stroke-opacity: 1; stroke-width: 0.02; stroke: #ffffff" fill-rule="evenodd" d="M 247.1 406.133 C 246.925,406.764 246.267,407.14 245.623,406.965 C 244.978,406.79 244.602,406.133 244.777,405.488 C 244.965,404.844 245.623,404.468 246.267,404.642 C 246.912,404.817 247.288,405.488 247.1,406.133z"/>
|
|
||||||
<path style="fill: #000000; fill-opacity: 1; stroke-opacity: 1; stroke-width: 0.02; stroke: #ffffff" fill-rule="evenodd" d="M 250.148 407.408 C 249.973,408.053 249.302,408.429 248.657,408.254 C 248.026,408.08 247.65,407.408 247.825,406.777 C 247.999,406.133 248.657,405.757 249.302,405.931 C 249.946,406.106 250.322,406.777 250.148,407.408z"/>
|
|
||||||
<path style="fill: #000000; fill-opacity: 1; stroke-opacity: 1; stroke-width: 0.02; stroke: #ffffff" fill-rule="evenodd" d="M 253.424 407.878 C 253.249,408.509 252.578,408.885 251.933,408.711 C 251.302,408.536 250.926,407.878 251.101,407.234 C 251.276,406.589 251.933,406.213 252.578,406.388 C 253.223,406.562 253.598,407.234 253.424,407.878z"/>
|
|
||||||
<path style="fill: #000000; fill-opacity: 1; stroke-opacity: 1; stroke-width: 0.02; stroke: #ffffff" fill-rule="evenodd" d="M 246.375 408.778 C 246.2,409.422 245.529,409.798 244.898,409.61 C 244.253,409.436 243.877,408.778 244.052,408.133 C 244.226,407.489 244.898,407.113 245.529,407.287 C 246.173,407.475 246.549,408.133 246.375,408.778z"/>
|
|
||||||
<path style="fill: #000000; fill-opacity: 1; stroke-opacity: 1; stroke-width: 0.02; stroke: #ffffff" fill-rule="evenodd" d="M 249.409 410.067 C 249.235,410.711 248.577,411.087 247.932,410.899 C 247.288,410.725 246.912,410.067 247.086,409.422 C 247.274,408.778 247.932,408.402 248.577,408.576 C 249.208,408.764 249.597,409.422 249.409,410.067z"/>
|
|
||||||
<path style="fill: #000000; fill-opacity: 1; stroke-opacity: 1; stroke-width: 0.02; stroke: #ffffff" fill-rule="evenodd" d="M 252.699 410.523 C 252.511,411.154 251.853,411.544 251.208,411.356 C 250.564,411.181 250.188,410.523 250.362,409.879 C 250.55,409.234 251.208,408.858 251.853,409.033 C 252.497,409.221 252.873,409.879 252.699,410.523z"/>
|
|
||||||
<path style="fill: #000000; fill-opacity: 1; stroke-opacity: 1; stroke-width: 0.02; stroke: #ffffff" fill-rule="evenodd" d="M 245.649 411.423 C 245.475,412.067 244.804,412.443 244.159,412.269 C 243.528,412.094 243.139,411.423 243.327,410.778 C 243.501,410.147 244.159,409.758 244.804,409.946 C 245.448,410.12 245.824,410.778 245.649,411.423z"/>
|
|
||||||
<path style="fill: #000000; fill-opacity: 1; stroke-opacity: 1; stroke-width: 0.02; stroke: #ffffff" fill-rule="evenodd" d="M 248.684 412.712 C 248.509,413.356 247.838,413.732 247.207,413.558 C 246.563,413.383 246.187,412.712 246.361,412.067 C 246.536,411.423 247.207,411.06 247.838,411.235 C 248.483,411.409 248.859,412.067 248.684,412.712z"/>
|
|
||||||
<path style="fill: #000000; fill-opacity: 1; stroke-opacity: 1; stroke-width: 0.02; stroke: #ffffff" fill-rule="evenodd" d="M 251.96 413.168 C 251.786,413.813 251.114,414.189 250.483,414.001 C 249.839,413.826 249.463,413.168 249.637,412.524 C 249.812,411.879 250.483,411.503 251.114,411.691 C 251.759,411.866 252.135,412.524 251.96,413.168z"/>
|
|
||||||
<path style="fill: #000000; fill-opacity: 1; stroke-opacity: 1; stroke-width: 0.02; stroke: #ffffff" fill-rule="evenodd" d="M 244.911 414.068 C 244.736,414.713 244.065,415.089 243.434,414.914 C 242.789,414.739 242.413,414.082 242.588,413.437 C 242.763,412.793 243.434,412.417 244.065,412.591 C 244.71,412.766 245.086,413.437 244.911,414.082 L 244.911,414.068z"/>
|
|
||||||
<path style="fill: #000000; fill-opacity: 1; stroke-opacity: 1; stroke-width: 0.02; stroke: #ffffff" fill-rule="evenodd" d="M 247.959 415.357 C 247.771,416.002 247.113,416.378 246.469,416.203 C 245.824,416.029 245.448,415.357 245.636,414.726 C 245.811,414.082 246.469,413.706 247.113,413.88 C 247.758,414.055 248.134,414.726 247.959,415.357z"/>
|
|
||||||
<path style="fill: #000000; fill-opacity: 1; stroke-opacity: 1; stroke-width: 0.02; stroke: #ffffff" fill-rule="evenodd" d="M 251.235 415.814 C 251.047,416.458 250.389,416.834 249.745,416.66 C 249.1,416.485 248.724,415.814 248.912,415.169 C 249.087,414.538 249.745,414.162 250.389,414.337 C 251.034,414.511 251.41,415.169 251.235,415.814z"/>
|
|
||||||
<path style="fill: none; stroke-opacity: 1; stroke-width: 0.8; stroke: #ffffff" d="M 246.428 417.156 C 246.415,417.21 246.307,417.237 246.187,417.21 C 246.079,417.17 245.999,417.103 246.025,417.036 C 246.039,416.982 246.146,416.955 246.254,416.982 C 246.361,417.009 246.442,417.089 246.428,417.143"/>
|
|
||||||
<path style="fill: none; stroke-opacity: 1; stroke-width: 0.8; stroke: #ffffff" d="M 246.025 417.036 L 245.636,418.419"/>
|
|
||||||
<path style="fill: none; stroke-opacity: 1; stroke-width: 0.8; stroke: #ffffff" d="M 246.079 417.156 L 245.73,418.445"/>
|
|
||||||
<path style="fill: none; stroke-opacity: 1; stroke-width: 0.8; stroke: #ffffff" d="M 246.428 417.156 L 246.039,418.526"/>
|
|
||||||
<path style="fill: none; stroke-opacity: 1; stroke-width: 0.8; stroke: #ffffff" d="M 246.307 417.21 L 245.958,418.499"/>
|
|
||||||
<path style="fill: none; stroke-opacity: 1; stroke-width: 0.8; stroke: #ffffff" d="M 248.751 397.19 L 248.483,398.143"/>
|
|
||||||
<path style="fill: none; stroke-opacity: 1; stroke-width: 0.8; stroke: #ffffff" d="M 248.859 397.217 L 248.59,398.184"/>
|
|
||||||
<path style="fill: none; stroke-opacity: 1; stroke-width: 0.8; stroke: #ffffff" d="M 254.27 398.707 L 254.001,399.674"/>
|
|
||||||
<path style="fill: none; stroke-opacity: 1; stroke-width: 0.8; stroke: #ffffff" d="M 254.162 398.68 L 253.894,399.647"/>
|
|
||||||
<path style="fill: none; stroke-opacity: 1; stroke-width: 0.8; stroke: #000000" d="M 259.762 386.193 C 259.762,386.193 260.097,384.796 260.299,383.83 C 260.661,381.963 260.688,381.023 260.688,381.023 C 260.688,380.768 260.621,380.553 260.393,380.486 L 259.305,380.191 C 259.077,380.124 258.916,380.271 258.768,380.5 C 258.768,380.5 258.338,381.359 257.748,383.118 C 257.425,384.058 257.13,385.226 257.13,385.226"/>
|
|
||||||
<path style="fill: none; stroke-opacity: 1; stroke-width: 0.8; stroke: #000000" d="M 259.896 385.683 C 259.023,385.347 258.15,385.038 257.251,384.756"/>
|
|
||||||
<path style="fill: none; stroke-opacity: 1; stroke-width: 0.8; stroke: #ffffff" d="M 249.033 385.871 C 250.819,386.126 252.739,386.529 254.525,387.025 C 256.311,387.522 258.164,388.153 259.829,388.852"/>
|
|
||||||
<path style="fill: #b7b79d; fill-opacity: 1; stroke-opacity: 1; stroke-width: 0.8; stroke: #ffffff" fill-rule="evenodd" d="M 256.7 398.922 C 256.633,399.164 256.391,399.298 256.15,399.231 L 246.858,396.666 C 246.616,396.599 246.482,396.357 246.549,396.129 L 248.174,390.248 C 248.241,390.006 248.483,389.872 248.711,389.939 L 258.016,392.504 C 258.258,392.571 258.392,392.813 258.325,393.054 L 256.7,398.935 L 256.7,398.922z"/>
|
|
||||||
<path style="fill: none; stroke-opacity: 1; stroke-width: 0.8; stroke: #ffffff" d="M 254.095 387.791 L 254.981,384.582"/>
|
|
||||||
<path style="fill: none; stroke-opacity: 1; stroke-width: 0.8; stroke: #ffffff" d="M 254.391 387.871 L 255.277,384.662"/>
|
|
||||||
</g>
|
|
||||||
<line style="fill: none; stroke-opacity: 1; stroke-width: 2; stroke-dasharray: 4; stroke: #000000" x1="327.424" y1="326.359" x2="444.266" y2="375.437"/>
|
|
||||||
<line style="fill: none; stroke-opacity: 1; stroke-width: 2; stroke-dasharray: 4; stroke: #000000" x1="259.522" y1="401.737" x2="439.089" y2="384.112"/>
|
|
||||||
<g>
|
|
||||||
<path style="fill: #7a7a5a; fill-opacity: 1; stroke: none" fill-rule="evenodd" d="M 290.594 477.19 C 290.943,475.941 292.38,469.684 292.447,468.811 C 292.514,467.938 292.192,466.851 291.722,466.623 C 291.749,466.314 291.749,466.139 291.749,466.139 C 291.641,466.099 291.521,466.059 291.413,466.005 L 291.453,466.018 C 291.453,466.018 291.776,464.622 291.977,463.655 C 292.34,461.802 292.38,460.862 292.38,460.862 C 292.367,460.607 292.299,460.379 292.071,460.312 L 290.984,460.016 C 290.755,459.949 290.594,460.097 290.446,460.325 C 290.446,460.325 290.017,461.184 289.426,462.957 C 289.104,463.883 288.808,465.065 288.808,465.065 L 288.822,465.065 C 288.177,464.85 287.519,464.662 286.861,464.474 C 285.169,464.004 283.491,463.655 281.799,463.4 C 281.799,463.4 281.719,463.548 281.571,463.83 C 281.061,463.776 280.228,464.555 279.839,465.334 C 279.449,466.112 277.476,472.222 277.126,473.471 C 276.777,474.719 276.119,477.915 275.824,479.499 C 275.529,481.084 275.26,483.85 274.24,487.529 C 273.635,489.704 272.669,492.954 272.158,494.296 C 272.024,494.659 270.963,496.445 272.507,497.062 C 274.025,497.667 276.294,498.311 277.435,498.633 C 278.577,498.942 280.846,499.546 282.457,499.815 C 284.095,500.084 284.109,497.989 284.176,497.613 C 284.431,496.203 285.263,492.913 285.854,490.738 C 286.875,487.046 288.07,484.548 288.634,483.031 C 289.184,481.514 290.245,478.439 290.594,477.19z"/>
|
|
||||||
<path style="fill: none; stroke-opacity: 1; stroke-width: 0.8; stroke: #000000" d="M 290.594 477.19 C 290.943,475.941 292.38,469.684 292.447,468.811 C 292.514,467.938 292.192,466.851 291.722,466.623 C 291.749,466.314 291.749,466.139 291.749,466.139 C 291.641,466.099 291.521,466.059 291.413,466.005 L 291.453,466.018 C 291.453,466.018 291.776,464.622 291.977,463.655 C 292.34,461.802 292.38,460.862 292.38,460.862 C 292.367,460.607 292.299,460.379 292.071,460.312 L 290.984,460.016 C 290.755,459.949 290.594,460.097 290.446,460.325 C 290.446,460.325 290.017,461.184 289.426,462.957 C 289.104,463.883 288.808,465.065 288.808,465.065 L 288.822,465.065 C 288.177,464.85 287.519,464.662 286.861,464.474 C 285.169,464.004 283.491,463.655 281.799,463.4 C 281.799,463.4 281.719,463.548 281.571,463.83 L 281.571,463.83 C 281.061,463.776 280.228,464.555 279.839,465.334 C 279.449,466.112 277.476,472.222 277.126,473.471 C 276.777,474.719 276.119,477.915 275.824,479.499 C 275.529,481.084 275.26,483.85 274.24,487.529 C 273.635,489.704 272.669,492.954 272.158,494.296 C 272.024,494.659 270.963,496.445 272.507,497.062 C 274.025,497.667 276.294,498.311 277.435,498.633 C 278.577,498.942 280.846,499.546 282.457,499.815 C 284.095,500.084 284.109,497.989 284.176,497.613 C 284.431,496.203 285.263,492.913 285.854,490.738 C 286.875,487.046 288.07,484.548 288.634,483.031 C 289.184,481.514 290.245,478.439 290.594,477.19"/>
|
|
||||||
<path style="fill: #b7b79d; fill-opacity: 1; stroke: none" fill-rule="evenodd" d="M 288.916 477.351 C 289.265,476.102 290.702,469.845 290.769,468.986 C 290.836,468.113 290.514,467.012 290.044,466.797 C 290.07,466.488 290.07,466.314 290.07,466.314 C 289.963,466.26 289.842,466.22 289.735,466.179 L 289.762,466.193 C 289.762,466.193 290.097,464.796 290.299,463.83 C 290.661,461.963 290.688,461.023 290.688,461.023 C 290.688,460.768 290.621,460.553 290.393,460.486 L 289.305,460.191 C 289.077,460.124 288.916,460.271 288.768,460.5 C 288.768,460.5 288.338,461.359 287.748,463.118 C 287.425,464.058 287.13,465.226 287.13,465.226 L 287.143,465.24 C 286.499,465.025 285.841,464.823 285.183,464.649 C 283.491,464.179 281.799,463.816 280.121,463.561 C 280.121,463.561 280.04,463.722 279.893,463.991 C 279.382,463.951 278.55,464.716 278.16,465.495 C 277.771,466.273 275.797,472.383 275.448,473.645 C 275.099,474.894 274.441,478.076 274.146,479.661 C 273.85,481.245 273.582,484.011 272.561,487.704 C 271.957,489.879 270.99,493.115 270.48,494.471 C 270.346,494.82 269.285,496.619 270.829,497.237 C 272.346,497.828 274.616,498.486 275.757,498.795 C 276.898,499.117 279.167,499.708 280.779,499.976 C 282.417,500.245 282.43,498.163 282.497,497.788 C 282.753,496.364 283.585,493.088 284.176,490.913 C 285.196,487.22 286.391,484.709 286.955,483.192 C 287.506,481.688 288.567,478.613 288.916,477.351z"/>
|
|
||||||
<path style="fill: none; stroke-opacity: 1; stroke-width: 0.8; stroke: #000000" d="M 288.916 477.351 C 289.265,476.102 290.702,469.845 290.769,468.986 C 290.836,468.113 290.514,467.012 290.044,466.797 C 290.07,466.488 290.07,466.314 290.07,466.314 C 289.963,466.26 289.842,466.22 289.735,466.179 L 289.762,466.193 C 289.762,466.193 290.097,464.796 290.299,463.83 C 290.661,461.963 290.688,461.023 290.688,461.023 C 290.688,460.768 290.621,460.553 290.393,460.486 L 289.305,460.191 C 289.077,460.124 288.916,460.271 288.768,460.5 C 288.768,460.5 288.338,461.359 287.748,463.118 C 287.425,464.058 287.13,465.226 287.13,465.226 L 287.143,465.24 C 286.499,465.025 285.841,464.823 285.183,464.649 C 283.491,464.179 281.799,463.816 280.121,463.561 C 280.121,463.561 280.04,463.722 279.893,463.991 L 279.893,463.991 C 279.382,463.951 278.55,464.716 278.16,465.495 C 277.771,466.273 275.797,472.383 275.448,473.645 C 275.099,474.894 274.441,478.076 274.146,479.661 C 273.85,481.245 273.582,484.011 272.561,487.704 C 271.957,489.879 270.99,493.115 270.48,494.471 C 270.346,494.82 269.285,496.619 270.829,497.237 C 272.346,497.828 274.616,498.486 275.757,498.795 C 276.898,499.117 279.167,499.708 280.779,499.976 C 282.417,500.245 282.43,498.163 282.497,497.788 C 282.753,496.364 283.585,493.088 284.176,490.913 C 285.196,487.22 286.391,484.709 286.955,483.192 C 287.506,481.688 288.567,478.613 288.916,477.351"/>
|
|
||||||
<path style="fill: #c9c9b6; fill-opacity: 1; stroke-opacity: 1; stroke-width: 0.8; stroke: #ecece7" fill-rule="evenodd" d="M 280.336 463.601 C 280.336,463.601 278.12,468.126 276.845,472.719 C 275.341,478.184 275.126,479.996 275.354,482.534 C 275.394,483.058 275.918,483.702 276.495,483.863 C 276.724,483.917 276.992,483.998 277.1,484.024 C 277.22,484.065 277.65,484.159 277.999,484.441 C 278.362,484.723 278.442,484.79 278.657,484.897 C 278.859,485.018 278.899,485.099 279.49,485.26 C 280.08,485.421 280.148,485.381 280.389,485.381 C 280.631,485.394 280.738,485.381 281.195,485.327 C 281.638,485.26 282.054,485.394 282.175,485.421 C 282.283,485.461 282.551,485.528 282.779,485.595 C 283.357,485.757 284.136,485.475 284.444,485.045 C 285.935,482.991 286.687,481.312 288.191,475.847 C 289.453,471.255 289.869,466.233 289.869,466.233 L 280.336,463.601z"/>
|
|
||||||
<path style="fill: #000000; fill-opacity: 1; stroke: none" fill-rule="evenodd" d="M 283.021 482.561 C 282.632,483.998 281.141,484.83 279.718,484.441 C 278.281,484.051 277.449,482.561 277.838,481.138 C 278.241,479.701 279.718,478.868 281.141,479.258 C 282.578,479.661 283.41,481.138 283.021,482.561z"/>
|
|
||||||
<path style="fill: #000000; fill-opacity: 1; stroke: none" fill-rule="evenodd" d="M 278.066 478.157 C 278.429,478.264 278.711,478.412 278.845,478.492 C 278.979,478.586 279.02,478.707 278.899,478.788 C 278.778,478.868 278.563,479.029 278.442,479.137 C 278.295,479.258 278.201,479.285 277.999,479.164 C 277.637,478.962 276.871,478.412 276.683,478.157 C 276.576,478.022 276.67,477.969 276.871,477.955 C 277.14,477.942 277.677,478.049 278.066,478.157z"/>
|
|
||||||
<path style="fill: #ff0000; fill-opacity: 1; stroke: none" fill-rule="evenodd" d="M 276.16 480.99 C 276.361,481.057 276.845,481.299 276.979,481.406 C 277.126,481.5 277.341,481.728 277.328,481.997 C 277.301,482.306 277.328,482.964 277.462,483.179 C 277.637,483.46 277.61,483.581 277.355,483.541 C 277.153,483.501 276.63,483.313 276.482,483.232 C 276.334,483.165 276.119,483.031 276.052,482.829 C 275.918,482.413 275.878,481.554 275.958,481.124 C 275.985,480.95 276.066,480.95 276.16,480.99z"/>
|
|
||||||
<path style="fill: none; stroke-opacity: 1; stroke-width: 0.8; stroke: #ffffff" d="M 283.021 482.561 C 282.632,483.998 281.141,484.83 279.718,484.441 C 278.281,484.051 277.449,482.561 277.838,481.138 C 278.241,479.701 279.718,478.868 281.141,479.258 C 282.578,479.661 283.41,481.138 283.021,482.561"/>
|
|
||||||
<path style="fill: none; stroke-opacity: 1; stroke-width: 0.8; stroke: #ffffff" d="M 278.066 478.157 C 278.429,478.264 278.711,478.412 278.845,478.492 C 278.979,478.586 279.02,478.707 278.899,478.788 C 278.778,478.868 278.563,479.029 278.442,479.137 C 278.295,479.258 278.201,479.285 277.999,479.164 C 277.637,478.962 276.871,478.412 276.683,478.157 C 276.576,478.022 276.67,477.969 276.871,477.955 C 277.14,477.942 277.677,478.049 278.066,478.157"/>
|
|
||||||
<path style="fill: none; stroke-opacity: 1; stroke-width: 0.8; stroke: #ffffff" d="M 276.16 480.99 C 276.361,481.057 276.845,481.299 276.979,481.406 C 277.126,481.5 277.341,481.728 277.328,481.997 C 277.301,482.306 277.328,482.964 277.462,483.179 C 277.637,483.46 277.61,483.581 277.355,483.541 C 277.153,483.501 276.63,483.313 276.482,483.232 C 276.334,483.165 276.119,483.031 276.052,482.829 C 275.918,482.413 275.878,481.554 275.958,481.124 C 275.985,480.95 276.066,480.95 276.16,480.99"/>
|
|
||||||
<path style="fill: #000000; fill-opacity: 1; stroke: none" fill-rule="evenodd" d="M 284.35 479.889 C 283.988,479.795 283.679,479.781 283.518,479.781 C 283.357,479.795 283.263,479.875 283.316,479.996 C 283.384,480.13 283.491,480.386 283.531,480.533 C 283.598,480.708 283.666,480.788 283.894,480.802 C 284.31,480.802 285.25,480.721 285.545,480.6 C 285.693,480.533 285.639,480.439 285.478,480.332 C 285.25,480.184 284.74,479.996 284.35,479.889z"/>
|
|
||||||
<path style="fill: #00ff00; fill-opacity: 1; stroke: none" fill-rule="evenodd" d="M 284.538 483.299 C 284.337,483.246 283.786,483.219 283.612,483.232 C 283.451,483.246 283.142,483.326 283.021,483.568 C 282.887,483.85 282.524,484.4 282.296,484.521 C 282.001,484.669 281.96,484.79 282.202,484.87 C 282.39,484.951 282.941,485.058 283.102,485.072 C 283.276,485.085 283.518,485.085 283.679,484.938 C 284.028,484.656 284.485,483.93 284.646,483.528 C 284.713,483.366 284.646,483.326 284.538,483.299z"/>
|
|
||||||
<path style="fill: none; stroke-opacity: 1; stroke-width: 0.8; stroke: #ffffff" d="M 284.35 479.889 C 283.988,479.795 283.679,479.781 283.518,479.781 C 283.357,479.795 283.263,479.875 283.316,479.996 C 283.384,480.13 283.491,480.386 283.531,480.533 C 283.598,480.708 283.666,480.788 283.894,480.802 C 284.31,480.802 285.25,480.721 285.545,480.6 C 285.693,480.533 285.639,480.439 285.478,480.332 C 285.25,480.184 284.74,479.996 284.35,479.889"/>
|
|
||||||
<path style="fill: none; stroke-opacity: 1; stroke-width: 0.8; stroke: #ffffff" d="M 284.538 483.299 C 284.337,483.246 283.786,483.219 283.612,483.232 C 283.451,483.246 283.142,483.326 283.021,483.568 C 282.887,483.85 282.524,484.4 282.296,484.521 C 282.001,484.669 281.96,484.79 282.202,484.87 C 282.39,484.951 282.941,485.058 283.102,485.072 C 283.276,485.085 283.518,485.085 283.679,484.938 C 284.028,484.656 284.485,483.93 284.646,483.528 C 284.713,483.366 284.646,483.326 284.538,483.299"/>
|
|
||||||
<path style="fill: none; stroke-opacity: 1; stroke-width: 0.8; stroke: #ffffff" d="M 284.095 467.791 L 284.981,464.582"/>
|
|
||||||
<path style="fill: none; stroke-opacity: 1; stroke-width: 0.8; stroke: #ffffff" d="M 284.391 467.871 L 285.277,464.662"/>
|
|
||||||
<path style="fill: none; stroke-opacity: 1; stroke-width: 0.8; stroke: #000000" d="M 290.688 460.889 C 290.688,460.889 290.178,460.741 289.748,460.634 C 289.372,460.527 288.835,460.379 288.835,460.379"/>
|
|
||||||
<path style="fill: none; stroke-opacity: 1; stroke-width: 0.8; stroke: #000000" d="M 288.916 477.351 C 289.265,476.102 290.702,469.845 290.769,468.986 C 290.836,468.113 290.514,467.012 290.044,466.797 C 290.07,466.488 290.07,466.314 290.07,466.314 C 289.963,466.26 289.842,466.22 289.735,466.179 L 289.762,466.193 C 289.762,466.193 290.097,464.796 290.299,463.83 C 290.661,461.963 290.688,461.023 290.688,461.023 C 290.688,460.768 290.621,460.553 290.393,460.486 L 289.305,460.191 C 289.077,460.124 288.916,460.271 288.768,460.5 C 288.768,460.5 288.338,461.359 287.748,463.118 C 287.425,464.058 287.13,465.226 287.13,465.226 L 287.143,465.24 C 286.499,465.025 285.841,464.823 285.183,464.649 C 283.491,464.179 281.799,463.816 280.121,463.561 C 280.121,463.561 280.04,463.722 279.893,463.991 L 279.893,463.991 C 279.382,463.951 278.55,464.716 278.16,465.495 C 277.771,466.273 275.797,472.383 275.448,473.645 C 275.099,474.894 274.441,478.076 274.146,479.661 C 273.85,481.245 273.582,484.011 272.561,487.704 C 271.957,489.879 270.99,493.115 270.48,494.471 C 270.346,494.82 269.285,496.619 270.829,497.237 C 272.346,497.828 274.616,498.486 275.757,498.795 C 276.898,499.117 279.167,499.708 280.779,499.976 C 282.417,500.245 282.43,498.163 282.497,497.788 C 282.753,496.364 283.585,493.088 284.176,490.913 C 285.196,487.22 286.391,484.709 286.955,483.192 C 287.506,481.688 288.567,478.613 288.916,477.351"/>
|
|
||||||
<path style="fill: #000000; fill-opacity: 1; stroke-opacity: 1; stroke-width: 0.02; stroke: #ffffff" fill-rule="evenodd" d="M 277.1 486.133 C 276.925,486.764 276.267,487.14 275.623,486.965 C 274.978,486.79 274.602,486.133 274.777,485.488 C 274.965,484.844 275.623,484.468 276.267,484.642 C 276.912,484.817 277.288,485.488 277.1,486.133z"/>
|
|
||||||
<path style="fill: #000000; fill-opacity: 1; stroke-opacity: 1; stroke-width: 0.02; stroke: #ffffff" fill-rule="evenodd" d="M 280.148 487.408 C 279.973,488.053 279.302,488.429 278.657,488.254 C 278.026,488.08 277.65,487.408 277.825,486.777 C 277.999,486.133 278.657,485.757 279.302,485.931 C 279.946,486.106 280.322,486.777 280.148,487.408z"/>
|
|
||||||
<path style="fill: #000000; fill-opacity: 1; stroke-opacity: 1; stroke-width: 0.02; stroke: #ffffff" fill-rule="evenodd" d="M 283.424 487.878 C 283.249,488.509 282.578,488.885 281.933,488.711 C 281.302,488.536 280.926,487.878 281.101,487.234 C 281.276,486.589 281.933,486.213 282.578,486.388 C 283.223,486.562 283.598,487.234 283.424,487.878z"/>
|
|
||||||
<path style="fill: #000000; fill-opacity: 1; stroke-opacity: 1; stroke-width: 0.02; stroke: #ffffff" fill-rule="evenodd" d="M 276.375 488.778 C 276.2,489.422 275.529,489.798 274.898,489.61 C 274.253,489.436 273.877,488.778 274.052,488.133 C 274.226,487.489 274.898,487.113 275.529,487.287 C 276.173,487.475 276.549,488.133 276.375,488.778z"/>
|
|
||||||
<path style="fill: #000000; fill-opacity: 1; stroke-opacity: 1; stroke-width: 0.02; stroke: #ffffff" fill-rule="evenodd" d="M 279.409 490.067 C 279.235,490.711 278.577,491.087 277.932,490.899 C 277.288,490.725 276.912,490.067 277.086,489.422 C 277.274,488.778 277.932,488.402 278.577,488.576 C 279.208,488.764 279.597,489.422 279.409,490.067z"/>
|
|
||||||
<path style="fill: #000000; fill-opacity: 1; stroke-opacity: 1; stroke-width: 0.02; stroke: #ffffff" fill-rule="evenodd" d="M 282.699 490.523 C 282.511,491.154 281.853,491.544 281.208,491.356 C 280.564,491.181 280.188,490.523 280.362,489.879 C 280.55,489.234 281.208,488.858 281.853,489.033 C 282.497,489.221 282.873,489.879 282.699,490.523z"/>
|
|
||||||
<path style="fill: #000000; fill-opacity: 1; stroke-opacity: 1; stroke-width: 0.02; stroke: #ffffff" fill-rule="evenodd" d="M 275.649 491.423 C 275.475,492.067 274.804,492.443 274.159,492.269 C 273.528,492.094 273.139,491.423 273.327,490.778 C 273.501,490.147 274.159,489.758 274.804,489.946 C 275.448,490.12 275.824,490.778 275.649,491.423z"/>
|
|
||||||
<path style="fill: #000000; fill-opacity: 1; stroke-opacity: 1; stroke-width: 0.02; stroke: #ffffff" fill-rule="evenodd" d="M 278.684 492.712 C 278.509,493.356 277.838,493.732 277.207,493.558 C 276.563,493.383 276.187,492.712 276.361,492.067 C 276.536,491.423 277.207,491.06 277.838,491.235 C 278.483,491.409 278.859,492.067 278.684,492.712z"/>
|
|
||||||
<path style="fill: #000000; fill-opacity: 1; stroke-opacity: 1; stroke-width: 0.02; stroke: #ffffff" fill-rule="evenodd" d="M 281.96 493.168 C 281.786,493.813 281.114,494.189 280.483,494.001 C 279.839,493.826 279.463,493.168 279.637,492.524 C 279.812,491.879 280.483,491.503 281.114,491.691 C 281.759,491.866 282.135,492.524 281.96,493.168z"/>
|
|
||||||
<path style="fill: #000000; fill-opacity: 1; stroke-opacity: 1; stroke-width: 0.02; stroke: #ffffff" fill-rule="evenodd" d="M 274.911 494.068 C 274.736,494.713 274.065,495.089 273.434,494.914 C 272.789,494.739 272.413,494.082 272.588,493.437 C 272.763,492.793 273.434,492.417 274.065,492.591 C 274.71,492.766 275.086,493.437 274.911,494.082 L 274.911,494.068z"/>
|
|
||||||
<path style="fill: #000000; fill-opacity: 1; stroke-opacity: 1; stroke-width: 0.02; stroke: #ffffff" fill-rule="evenodd" d="M 277.959 495.357 C 277.771,496.002 277.113,496.378 276.469,496.203 C 275.824,496.029 275.448,495.357 275.636,494.726 C 275.811,494.082 276.469,493.706 277.113,493.88 C 277.758,494.055 278.134,494.726 277.959,495.357z"/>
|
|
||||||
<path style="fill: #000000; fill-opacity: 1; stroke-opacity: 1; stroke-width: 0.02; stroke: #ffffff" fill-rule="evenodd" d="M 281.235 495.814 C 281.047,496.458 280.389,496.834 279.745,496.66 C 279.1,496.485 278.724,495.814 278.912,495.169 C 279.087,494.538 279.745,494.162 280.389,494.337 C 281.034,494.511 281.41,495.169 281.235,495.814z"/>
|
|
||||||
<path style="fill: none; stroke-opacity: 1; stroke-width: 0.8; stroke: #ffffff" d="M 276.428 497.156 C 276.415,497.21 276.307,497.237 276.187,497.21 C 276.079,497.17 275.999,497.103 276.025,497.036 C 276.039,496.982 276.146,496.955 276.254,496.982 C 276.361,497.009 276.442,497.089 276.428,497.143"/>
|
|
||||||
<path style="fill: none; stroke-opacity: 1; stroke-width: 0.8; stroke: #ffffff" d="M 276.025 497.036 L 275.636,498.419"/>
|
|
||||||
<path style="fill: none; stroke-opacity: 1; stroke-width: 0.8; stroke: #ffffff" d="M 276.079 497.156 L 275.73,498.445"/>
|
|
||||||
<path style="fill: none; stroke-opacity: 1; stroke-width: 0.8; stroke: #ffffff" d="M 276.428 497.156 L 276.039,498.526"/>
|
|
||||||
<path style="fill: none; stroke-opacity: 1; stroke-width: 0.8; stroke: #ffffff" d="M 276.307 497.21 L 275.958,498.499"/>
|
|
||||||
<path style="fill: none; stroke-opacity: 1; stroke-width: 0.8; stroke: #ffffff" d="M 278.751 477.19 L 278.483,478.143"/>
|
|
||||||
<path style="fill: none; stroke-opacity: 1; stroke-width: 0.8; stroke: #ffffff" d="M 278.859 477.217 L 278.59,478.184"/>
|
|
||||||
<path style="fill: none; stroke-opacity: 1; stroke-width: 0.8; stroke: #ffffff" d="M 284.27 478.707 L 284.001,479.674"/>
|
|
||||||
<path style="fill: none; stroke-opacity: 1; stroke-width: 0.8; stroke: #ffffff" d="M 284.162 478.68 L 283.894,479.647"/>
|
|
||||||
<path style="fill: none; stroke-opacity: 1; stroke-width: 0.8; stroke: #000000" d="M 289.762 466.193 C 289.762,466.193 290.097,464.796 290.299,463.83 C 290.661,461.963 290.688,461.023 290.688,461.023 C 290.688,460.768 290.621,460.553 290.393,460.486 L 289.305,460.191 C 289.077,460.124 288.916,460.271 288.768,460.5 C 288.768,460.5 288.338,461.359 287.748,463.118 C 287.425,464.058 287.13,465.226 287.13,465.226"/>
|
|
||||||
<path style="fill: none; stroke-opacity: 1; stroke-width: 0.8; stroke: #000000" d="M 289.896 465.683 C 289.023,465.347 288.15,465.038 287.251,464.756"/>
|
|
||||||
<path style="fill: none; stroke-opacity: 1; stroke-width: 0.8; stroke: #ffffff" d="M 279.033 465.871 C 280.819,466.126 282.739,466.529 284.525,467.025 C 286.311,467.522 288.164,468.153 289.829,468.852"/>
|
|
||||||
<path style="fill: #b7b79d; fill-opacity: 1; stroke-opacity: 1; stroke-width: 0.8; stroke: #ffffff" fill-rule="evenodd" d="M 286.7 478.922 C 286.633,479.164 286.391,479.298 286.15,479.231 L 276.858,476.666 C 276.616,476.599 276.482,476.357 276.549,476.129 L 278.174,470.248 C 278.241,470.006 278.483,469.872 278.711,469.939 L 288.016,472.504 C 288.258,472.571 288.392,472.813 288.325,473.054 L 286.7,478.935 L 286.7,478.922z"/>
|
|
||||||
<path style="fill: none; stroke-opacity: 1; stroke-width: 0.8; stroke: #ffffff" d="M 284.095 467.791 L 284.981,464.582"/>
|
|
||||||
<path style="fill: none; stroke-opacity: 1; stroke-width: 0.8; stroke: #ffffff" d="M 284.391 467.871 L 285.277,464.662"/>
|
|
||||||
</g>
|
|
||||||
<line style="fill: none; stroke-opacity: 1; stroke-width: 2; stroke-dasharray: 4; stroke: #000000" x1="290.438" y1="479.005" x2="440.053" y2="393.475"/>
|
|
||||||
<g>
|
|
||||||
<path style="fill: none; stroke-opacity: 1; stroke-width: 0.8; stroke: #00aed9" d="M 714.565 323.746 L 714.565,310.35"/>
|
|
||||||
<path style="fill: none; stroke-opacity: 1; stroke-width: 4; stroke: #00aed9" d="M 714.565 323.53 L 714.565,314.341"/>
|
|
||||||
<path style="fill: #000000; fill-opacity: 1; stroke: none" fill-rule="evenodd" d="M 714.954 311.638 L 714.135,311.638 L 714.135,310 L 714.954,310 L 714.954,311.638z"/>
|
|
||||||
<path style="fill: none; stroke-opacity: 1; stroke-width: 2; stroke: #00aed9" d="M 714.954 311.638 L 714.135,311.638 L 714.135,310 L 714.954,310 L 714.954,311.638"/>
|
|
||||||
<path style="fill: none; stroke-opacity: 1; stroke-width: 0.8; stroke: #00aed9" d="M 694.709 323.746 L 694.709,310.35"/>
|
|
||||||
<path style="fill: none; stroke-opacity: 1; stroke-width: 4; stroke: #00aed9" d="M 694.709 323.53 L 694.709,314.341"/>
|
|
||||||
<path style="fill: #000000; fill-opacity: 1; stroke: none" fill-rule="evenodd" d="M 695.098 311.638 L 694.279,311.638 L 694.279,310 L 695.098,310 L 695.098,311.638z"/>
|
|
||||||
<path style="fill: none; stroke-opacity: 1; stroke-width: 2; stroke: #00aed9" d="M 695.098 311.638 L 694.279,311.638 L 694.279,310 L 695.098,310 L 695.098,311.638"/>
|
|
||||||
<path style="fill: #00aed9; fill-opacity: 1; stroke: none" fill-rule="evenodd" d="M 720.119 325.447 C 720.119,328.681 713.377,331.303 705.06,331.303 C 696.742,331.303 690,328.681 690,325.447 L 690,334.025 C 690,337.26 696.742,339.882 705.06,339.882 C 713.377,339.882 720.119,337.26 720.119,334.025 L 720.119,325.447z"/>
|
|
||||||
<path style="fill: none; stroke-opacity: 1; stroke-width: 0.8; stroke: #ffffff" d="M 720.119 325.447 C 720.119,328.681 713.377,331.303 705.06,331.303 C 696.742,331.303 690,328.681 690,325.447 L 690,334.025 C 690,337.26 696.742,339.882 705.06,339.882 C 713.377,339.882 720.119,337.26 720.119,334.025 L 720.119,325.447"/>
|
|
||||||
<path style="fill: #00aed9; fill-opacity: 1; stroke: none" fill-rule="evenodd" d="M 705.06 331.303 C 713.377,331.303 720.119,328.681 720.119,325.447 C 720.119,322.212 713.377,319.59 705.06,319.59 C 696.742,319.59 690,322.212 690,325.447 C 690,328.681 696.742,331.303 705.06,331.303z"/>
|
|
||||||
<path style="fill: none; stroke-opacity: 1; stroke-width: 0.8; stroke: #ffffff" d="M 705.06 331.303 C 713.377,331.303 720.119,328.681 720.119,325.447 C 720.119,322.212 713.377,319.59 705.06,319.59 C 696.742,319.59 690,322.212 690,325.447 C 690,328.681 696.742,331.303 705.06,331.303"/>
|
|
||||||
<path style="fill: #ffffff; fill-opacity: 1; stroke: none" fill-rule="evenodd" d="M 701.621 323.157 L 702.864,325.022 L 698.163,326.108 L 699.19,325.254 L 691.923,324.012 L 693.746,322.645 L 700.758,323.832 L 701.621,323.157z"/>
|
|
||||||
<path style="fill: #ffffff; fill-opacity: 1; stroke: none" fill-rule="evenodd" d="M 708.237 327.68 L 707.388,325.757 L 711.629,324.91 L 710.894,325.568 L 717.962,326.776 L 716.268,328.133 L 709.24,326.813 L 708.237,327.68z"/>
|
|
||||||
<path style="fill: #ffffff; fill-opacity: 1; stroke: none" fill-rule="evenodd" d="M 705.918 322.138 L 710.668,320.838 L 710.724,322.874 L 709.538,322.647 L 707.218,324.57 L 705.006,324.247 L 707.399,322.367 L 705.918,322.138z"/>
|
|
||||||
<path style="fill: #ffffff; fill-opacity: 1; stroke: none" fill-rule="evenodd" d="M 703.882 329.434 L 699.359,330.281 L 699.19,328.19 L 700.489,328.472 L 702.979,326.345 L 705.183,326.719 L 702.525,329.037 L 703.882,329.434z"/>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<path style="fill: none; stroke-opacity: 1; stroke-width: 0.8; stroke: #00aed9" d="M 774.565 453.746 L 774.565,440.35"/>
|
|
||||||
<path style="fill: none; stroke-opacity: 1; stroke-width: 4; stroke: #00aed9" d="M 774.565 453.53 L 774.565,444.341"/>
|
|
||||||
<path style="fill: #000000; fill-opacity: 1; stroke: none" fill-rule="evenodd" d="M 774.954 441.638 L 774.135,441.638 L 774.135,440 L 774.954,440 L 774.954,441.638z"/>
|
|
||||||
<path style="fill: none; stroke-opacity: 1; stroke-width: 2; stroke: #00aed9" d="M 774.954 441.638 L 774.135,441.638 L 774.135,440 L 774.954,440 L 774.954,441.638"/>
|
|
||||||
<path style="fill: none; stroke-opacity: 1; stroke-width: 0.8; stroke: #00aed9" d="M 754.709 453.746 L 754.709,440.35"/>
|
|
||||||
<path style="fill: none; stroke-opacity: 1; stroke-width: 4; stroke: #00aed9" d="M 754.709 453.53 L 754.709,444.341"/>
|
|
||||||
<path style="fill: #000000; fill-opacity: 1; stroke: none" fill-rule="evenodd" d="M 755.098 441.638 L 754.279,441.638 L 754.279,440 L 755.098,440 L 755.098,441.638z"/>
|
|
||||||
<path style="fill: none; stroke-opacity: 1; stroke-width: 2; stroke: #00aed9" d="M 755.098 441.638 L 754.279,441.638 L 754.279,440 L 755.098,440 L 755.098,441.638"/>
|
|
||||||
<path style="fill: #00aed9; fill-opacity: 1; stroke: none" fill-rule="evenodd" d="M 780.119 455.447 C 780.119,458.681 773.377,461.303 765.06,461.303 C 756.742,461.303 750,458.681 750,455.447 L 750,464.025 C 750,467.26 756.742,469.882 765.06,469.882 C 773.377,469.882 780.119,467.26 780.119,464.025 L 780.119,455.447z"/>
|
|
||||||
<path style="fill: none; stroke-opacity: 1; stroke-width: 0.8; stroke: #ffffff" d="M 780.119 455.447 C 780.119,458.681 773.377,461.303 765.06,461.303 C 756.742,461.303 750,458.681 750,455.447 L 750,464.025 C 750,467.26 756.742,469.882 765.06,469.882 C 773.377,469.882 780.119,467.26 780.119,464.025 L 780.119,455.447"/>
|
|
||||||
<path style="fill: #00aed9; fill-opacity: 1; stroke: none" fill-rule="evenodd" d="M 765.06 461.303 C 773.377,461.303 780.119,458.681 780.119,455.447 C 780.119,452.212 773.377,449.59 765.06,449.59 C 756.742,449.59 750,452.212 750,455.447 C 750,458.681 756.742,461.303 765.06,461.303z"/>
|
|
||||||
<path style="fill: none; stroke-opacity: 1; stroke-width: 0.8; stroke: #ffffff" d="M 765.06 461.303 C 773.377,461.303 780.119,458.681 780.119,455.447 C 780.119,452.212 773.377,449.59 765.06,449.59 C 756.742,449.59 750,452.212 750,455.447 C 750,458.681 756.742,461.303 765.06,461.303"/>
|
|
||||||
<path style="fill: #ffffff; fill-opacity: 1; stroke: none" fill-rule="evenodd" d="M 761.621 453.157 L 762.864,455.022 L 758.163,456.108 L 759.19,455.254 L 751.923,454.012 L 753.746,452.645 L 760.758,453.832 L 761.621,453.157z"/>
|
|
||||||
<path style="fill: #ffffff; fill-opacity: 1; stroke: none" fill-rule="evenodd" d="M 768.237 457.68 L 767.388,455.757 L 771.629,454.91 L 770.894,455.568 L 777.962,456.776 L 776.268,458.133 L 769.24,456.813 L 768.237,457.68z"/>
|
|
||||||
<path style="fill: #ffffff; fill-opacity: 1; stroke: none" fill-rule="evenodd" d="M 765.918 452.138 L 770.668,450.838 L 770.724,452.874 L 769.538,452.647 L 767.218,454.57 L 765.006,454.247 L 767.399,452.367 L 765.918,452.138z"/>
|
|
||||||
<path style="fill: #ffffff; fill-opacity: 1; stroke: none" fill-rule="evenodd" d="M 763.882 459.434 L 759.359,460.281 L 759.19,458.19 L 760.489,458.472 L 762.979,456.345 L 765.183,456.719 L 762.525,459.037 L 763.882,459.434z"/>
|
|
||||||
</g>
|
|
||||||
<text font-size="21.4489" style="fill: #000000; fill-opacity: 1; stroke: none;text-anchor:start;font-family:sans-serif;font-style:italic;font-weight:normal" x="270" y="430">
|
|
||||||
<tspan x="270" y="430">Clients</tspan>
|
|
||||||
</text>
|
|
||||||
</g>
|
|
||||||
<g id="IGMP/MLD segmentation">
|
|
||||||
<line style="fill: none; stroke-opacity: 1; stroke-width: 2; stroke: #ff0000" x1="490" y1="290" x2="490" y2="510"/>
|
|
||||||
<text font-size="18.0622" style="fill: #ff0000; fill-opacity: 1; stroke: none;text-anchor:start;font-family:sans-serif;font-style:italic;font-weight:normal" x="500" y="420">
|
|
||||||
<tspan x="500" y="420">IGMP + MLD</tspan>
|
|
||||||
<tspan x="500" y="442.578">Firewall</tspan>
|
|
||||||
</text>
|
|
||||||
<text font-size="12.7998" style="fill: #000000; fill-opacity: 1; stroke: none;text-anchor:start;font-family:sans-serif;font-style:normal;font-weight:normal" x="440" y="420">
|
|
||||||
<tspan x="440" y="420">Query</tspan>
|
|
||||||
</text>
|
|
||||||
<text font-size="12.7998" style="fill: #000000; fill-opacity: 1; stroke: none;text-anchor:start;font-family:sans-serif;font-style:normal;font-weight:normal" x="310" y="490">
|
|
||||||
<tspan x="310" y="490">Report</tspan>
|
|
||||||
</text>
|
|
||||||
<g>
|
|
||||||
<line style="fill: none; stroke-opacity: 1; stroke-width: 3; stroke: #800080" x1="435" y1="415" x2="386.5" y2="415"/>
|
|
||||||
<polygon style="fill: #800080; fill-opacity: 1; stroke-opacity: 1; stroke-width: 3; stroke: #800080" fill-rule="evenodd" points="386.5,410 376.5,415 386.5,420 "/>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<line style="fill: none; stroke-opacity: 1; stroke-width: 3; stroke: #800080" x1="357" y1="485.5" x2="405.5" y2="485.5"/>
|
|
||||||
<polygon style="fill: #800080; fill-opacity: 1; stroke-opacity: 1; stroke-width: 3; stroke: #800080" fill-rule="evenodd" points="405.5,490.5 415.5,485.5 405.5,480.5 "/>
|
|
||||||
</g>
|
|
||||||
</g>
|
|
||||||
</svg>
|
|
Before Width: | Height: | Size: 100 KiB |
@ -1,232 +0,0 @@
|
|||||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
|
||||||
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.0//EN" "http://www.w3.org/TR/2001/PR-SVG-20010719/DTD/svg10.dtd">
|
|
||||||
<svg width="29cm" height="12cm" viewBox="219 289 572 223" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
|
|
||||||
<g id="Background">
|
|
||||||
<g>
|
|
||||||
<path style="fill: #b6c7c9; fill-opacity: 1; stroke: none" fill-rule="evenodd" d="M 713.614 347.58 L 713.54,345.719 L 713.283,343.858 L 712.804,342.03 L 712.142,340.201 L 711.258,338.34 L 710.264,336.545 L 709.013,334.781 L 707.614,333.051 L 706.104,331.321 L 704.337,329.688 L 702.46,328.056 L 700.398,326.521 L 698.153,324.986 L 695.797,323.55 L 693.294,322.146 L 690.606,320.84 L 687.845,319.566 L 684.974,318.391 L 681.955,317.281 L 678.826,316.269 L 675.587,315.289 L 672.237,314.473 L 668.887,313.657 L 665.39,312.971 L 661.819,312.351 L 658.248,311.828 L 654.604,311.404 L 650.922,311.11 L 647.204,310.849 L 643.45,310.718 L 639.695,310.653 L 639.695,310.653 L 635.977,310.718 L 632.185,310.849 L 628.504,311.11 L 624.822,311.404 L 621.141,311.828 L 617.57,312.351 L 614,312.971 L 610.539,313.657 L 607.116,314.473 L 603.839,315.289 L 600.6,316.269 L 597.508,317.281 L 594.452,318.391 L 591.581,319.566 L 588.783,320.84 L 586.096,322.146 L 583.592,323.55 L 581.236,324.986 L 578.991,326.521 L 576.929,328.056 L 575.052,329.688 L 573.322,331.321 L 571.739,333.051 L 570.414,334.781 L 569.162,336.545 L 568.131,338.34 L 567.248,340.201 L 566.659,342.03 L 566.18,343.858 L 565.849,345.719 L 565.812,347.58 L 565.812,347.58 L 565.849,349.474 L 566.18,351.335 L 566.659,353.196 L 567.248,355.024 L 568.131,356.853 L 569.162,358.649 L 570.414,360.412 L 571.739,362.175 L 573.322,363.873 L 575.052,365.505 L 576.929,367.138 L 578.991,368.705 L 581.236,370.207 L 583.592,371.643 L 586.096,373.047 L 588.783,374.386 L 591.581,375.594 L 594.452,376.835 L 597.508,377.945 L 600.6,378.957 L 603.839,379.871 L 607.116,380.753 L 610.539,381.536 L 614,382.222 L 617.57,382.842 L 621.141,383.365 L 624.822,383.757 L 628.504,384.083 L 632.185,384.377 L 635.977,384.475 L 639.695,384.508 L 639.695,384.508 L 643.45,384.475 L 647.204,384.377 L 650.922,384.083 L 654.604,383.757 L 658.248,383.365 L 661.819,382.842 L 665.39,382.222 L 668.887,381.536 L 672.237,380.753 L 675.587,379.871 L 678.826,378.957 L 681.955,377.945 L 684.974,376.835 L 687.845,375.594 L 690.606,374.386 L 693.294,373.047 L 695.797,371.643 L 698.153,370.207 L 700.398,368.705 L 702.46,367.138 L 704.337,365.505 L 706.104,363.873 L 707.614,362.175 L 709.013,360.412 L 710.264,358.649 L 711.258,356.853 L 712.142,355.024 L 712.804,353.196 L 713.283,351.335 L 713.54,349.474 L 713.614,347.58z"/>
|
|
||||||
<path style="fill: #b6c7c9; fill-opacity: 1; stroke: none" fill-rule="evenodd" d="M 597.765 366.974 L 597.692,365.113 L 597.434,363.252 L 597.139,361.424 L 596.624,359.563 L 595.961,357.734 L 595.152,355.939 L 594.194,354.176 L 593.164,352.445 L 591.986,350.715 L 590.66,349.082 L 589.225,347.45 L 587.642,345.915 L 585.875,344.381 L 584.071,342.944 L 582.157,341.54 L 580.095,340.234 L 578.034,338.961 L 575.751,337.785 L 573.469,336.675 L 571.039,335.696 L 568.61,334.683 L 566.07,333.802 L 563.419,333.051 L 560.769,332.365 L 558.045,331.745 L 555.284,331.223 L 552.486,330.798 L 549.651,330.504 L 546.854,330.243 L 543.982,330.08 L 541.111,330.047 L 541.111,330.047 L 538.239,330.08 L 535.368,330.243 L 532.497,330.504 L 529.699,330.798 L 526.864,331.223 L 524.104,331.745 L 521.416,332.365 L 518.766,333.051 L 516.152,333.802 L 513.612,334.683 L 511.109,335.696 L 508.753,336.675 L 506.397,337.785 L 504.188,338.961 L 502.09,340.234 L 500.028,341.54 L 498.114,342.944 L 496.273,344.381 L 494.543,345.915 L 492.997,347.45 L 491.524,349.082 L 490.236,350.715 L 489.021,352.445 L 487.954,354.176 L 487.033,355.939 L 486.223,357.734 L 485.561,359.563 L 485.082,361.424 L 484.714,363.252 L 484.493,365.113 L 484.42,366.974 L 484.42,366.974 L 484.493,368.868 L 484.714,370.729 L 485.082,372.59 L 485.561,374.419 L 486.223,376.247 L 487.033,378.043 L 487.954,379.806 L 489.021,381.536 L 490.236,383.267 L 491.524,384.899 L 492.997,386.532 L 494.543,388.066 L 496.273,389.601 L 498.114,391.038 L 500.028,392.442 L 502.09,393.748 L 504.188,394.988 L 506.397,396.164 L 508.753,397.339 L 511.109,398.351 L 513.612,399.265 L 516.152,400.18 L 518.766,400.931 L 521.416,401.616 L 524.104,402.237 L 526.864,402.726 L 529.699,403.151 L 532.497,403.477 L 535.368,403.771 L 538.239,403.869 L 541.111,403.902 L 541.111,403.902 L 543.982,403.869 L 546.854,403.771 L 549.651,403.477 L 552.486,403.151 L 555.284,402.726 L 558.045,402.237 L 560.769,401.616 L 563.419,400.931 L 566.07,400.18 L 568.61,399.265 L 571.039,398.351 L 573.469,397.339 L 575.751,396.164 L 578.034,394.988 L 580.095,393.748 L 582.157,392.442 L 584.071,391.038 L 585.875,389.601 L 587.642,388.066 L 589.225,386.532 L 590.66,384.899 L 591.986,383.267 L 593.164,381.536 L 594.194,379.806 L 595.152,378.043 L 595.961,376.247 L 596.624,374.419 L 597.139,372.59 L 597.434,370.729 L 597.692,368.868 L 597.765,366.974z"/>
|
|
||||||
<path style="fill: #b6c7c9; fill-opacity: 1; stroke: none" fill-rule="evenodd" d="M 526.312 404.685 L 526.275,403.151 L 526.165,401.616 L 525.907,400.082 L 525.576,398.58 L 525.097,397.143 L 524.545,395.641 L 523.956,394.172 L 523.257,392.768 L 522.447,391.364 L 521.527,390.025 L 520.533,388.752 L 519.465,387.446 L 518.324,386.205 L 517.109,384.997 L 515.784,383.887 L 514.422,382.842 L 513.023,381.765 L 511.55,380.818 L 509.968,379.904 L 508.348,379.055 L 506.691,378.304 L 504.961,377.586 L 503.231,376.965 L 501.427,376.41 L 499.586,375.888 L 497.746,375.496 L 495.868,375.104 L 493.917,374.876 L 492.003,374.68 L 490.126,374.582 L 488.175,374.517 L 488.175,374.517 L 486.223,374.582 L 484.272,374.68 L 482.358,374.876 L 480.481,375.104 L 478.566,375.496 L 476.689,375.888 L 474.885,376.41 L 473.118,376.965 L 471.314,377.586 L 469.584,378.304 L 467.928,379.055 L 466.308,379.904 L 464.762,380.818 L 463.252,381.765 L 461.854,382.842 L 460.492,383.887 L 459.203,384.997 L 457.951,386.205 L 456.81,387.446 L 455.743,388.752 L 454.749,390.025 L 453.902,391.364 L 453.092,392.768 L 452.393,394.172 L 451.73,395.641 L 451.178,397.143 L 450.773,398.58 L 450.442,400.082 L 450.147,401.616 L 450,403.151 L 450,404.685 L 450,404.685 L 450,406.155 L 450.147,407.689 L 450.442,409.191 L 450.773,410.693 L 451.178,412.227 L 451.73,413.664 L 452.393,415.101 L 453.092,416.537 L 453.902,417.941 L 454.749,419.28 L 455.743,420.586 L 456.81,421.859 L 457.951,423.1 L 459.203,424.275 L 460.492,425.385 L 461.854,426.463 L 463.252,427.54 L 464.762,428.455 L 466.308,429.369 L 467.928,430.218 L 469.584,431.001 L 471.314,431.72 L 473.118,432.34 L 474.885,432.895 L 476.689,433.385 L 478.566,433.809 L 480.481,434.168 L 482.358,434.462 L 484.272,434.625 L 486.223,434.723 L 488.175,434.789 L 488.175,434.789 L 490.126,434.723 L 492.003,434.625 L 493.917,434.462 L 495.868,434.168 L 497.746,433.809 L 499.586,433.385 L 501.427,432.895 L 503.231,432.34 L 504.961,431.72 L 506.691,431.001 L 508.348,430.218 L 509.968,429.369 L 511.55,428.455 L 513.023,427.54 L 514.422,426.463 L 515.784,425.385 L 517.109,424.275 L 518.324,423.1 L 519.465,421.859 L 520.533,420.586 L 521.527,419.28 L 522.447,417.941 L 523.257,416.537 L 523.956,415.101 L 524.545,413.664 L 525.097,412.227 L 525.576,410.693 L 525.907,409.191 L 526.165,407.689 L 526.275,406.155 L 526.312,404.685z"/>
|
|
||||||
<path style="fill: #b6c7c9; fill-opacity: 1; stroke: none" fill-rule="evenodd" d="M 587.936 433.711 L 587.9,432.046 L 587.642,430.414 L 587.237,428.748 L 586.758,427.116 L 586.096,425.516 L 585.323,423.916 L 584.329,422.349 L 583.298,420.814 L 582.046,419.378 L 580.721,417.876 L 579.212,416.439 L 577.629,415.101 L 575.935,413.762 L 574.095,412.423 L 572.144,411.215 L 570.082,410.04 L 567.91,408.962 L 565.628,407.885 L 563.309,406.938 L 560.879,405.991 L 558.339,405.175 L 555.762,404.391 L 553.112,403.706 L 550.424,403.085 L 547.663,402.563 L 544.829,402.139 L 542.031,401.747 L 539.16,401.42 L 536.288,401.224 L 533.38,401.094 L 530.435,401.061 L 530.435,401.061 L 527.527,401.094 L 524.656,401.224 L 521.711,401.42 L 518.876,401.747 L 516.005,402.139 L 513.244,402.563 L 510.483,403.085 L 507.759,403.706 L 505.108,404.391 L 502.568,405.175 L 500.028,405.991 L 497.599,406.938 L 495.243,407.885 L 492.997,408.962 L 490.825,410.04 L 488.764,411.215 L 486.812,412.423 L 484.972,413.762 L 483.242,415.101 L 481.659,416.439 L 480.149,417.876 L 478.787,419.378 L 477.609,420.814 L 476.542,422.349 L 475.548,423.916 L 474.738,425.516 L 474.149,427.116 L 473.597,428.748 L 473.229,430.414 L 473.008,432.046 L 472.934,433.711 L 472.934,433.711 L 473.008,435.344 L 473.229,437.009 L 473.597,438.641 L 474.149,440.274 L 474.738,441.874 L 475.548,443.474 L 476.542,445.073 L 477.609,446.608 L 478.787,448.077 L 480.149,449.514 L 481.659,450.95 L 483.242,452.322 L 484.972,453.693 L 486.812,454.999 L 488.764,456.207 L 490.825,457.35 L 492.997,458.46 L 495.243,459.505 L 497.599,460.484 L 500.028,461.431 L 502.568,462.247 L 505.108,463.031 L 507.759,463.684 L 510.483,464.304 L 513.244,464.827 L 516.005,465.284 L 518.876,465.708 L 521.711,466.002 L 524.656,466.198 L 527.527,466.329 L 530.435,466.329 L 530.435,466.329 L 533.38,466.329 L 536.288,466.198 L 539.16,466.002 L 542.031,465.708 L 544.829,465.284 L 547.663,464.827 L 550.424,464.304 L 553.112,463.684 L 555.762,463.031 L 558.339,462.247 L 560.879,461.431 L 563.309,460.484 L 565.628,459.505 L 567.91,458.46 L 570.082,457.35 L 572.144,456.207 L 574.095,454.999 L 575.935,453.693 L 577.629,452.322 L 579.212,450.95 L 580.721,449.514 L 582.046,448.077 L 583.298,446.608 L 584.329,445.073 L 585.323,443.474 L 586.096,441.874 L 586.758,440.274 L 587.237,438.641 L 587.642,437.009 L 587.9,435.344 L 587.936,433.711z"/>
|
|
||||||
<path style="fill: #b6c7c9; fill-opacity: 1; stroke: none" fill-rule="evenodd" d="M 725.946 450.591 L 725.799,448.6 L 725.505,446.608 L 724.916,444.682 L 724.142,442.755 L 723.185,440.829 L 722.007,438.968 L 720.608,437.139 L 718.989,435.278 L 717.148,433.483 L 715.16,431.752 L 712.915,430.087 L 710.559,428.455 L 707.982,426.855 L 705.258,425.32 L 702.276,423.851 L 699.257,422.48 L 696.018,421.141 L 692.631,419.9 L 689.171,418.757 L 685.489,417.68 L 681.771,416.668 L 677.906,415.786 L 673.967,414.937 L 669.881,414.219 L 665.795,413.566 L 661.598,413.044 L 657.401,412.587 L 653.058,412.26 L 648.824,412.032 L 644.443,411.836 L 640.1,411.836 L 640.1,411.836 L 635.756,411.836 L 631.412,412.032 L 627.105,412.26 L 622.835,412.587 L 618.564,413.044 L 614.405,413.566 L 610.282,414.219 L 606.269,414.937 L 602.256,415.786 L 598.465,416.668 L 594.673,417.68 L 591.065,418.757 L 587.568,419.9 L 584.218,421.141 L 580.979,422.48 L 577.887,423.851 L 574.978,425.32 L 572.254,426.855 L 569.641,428.455 L 567.248,430.087 L 565.039,431.752 L 563.088,433.483 L 561.247,435.278 L 559.628,437.139 L 558.229,438.968 L 557.014,440.829 L 556.057,442.755 L 555.247,444.682 L 554.695,446.608 L 554.363,448.6 L 554.253,450.591 L 554.253,450.591 L 554.363,452.485 L 554.695,454.477 L 555.247,456.403 L 556.057,458.362 L 557.014,460.288 L 558.229,462.149 L 559.628,463.978 L 561.247,465.839 L 563.088,467.635 L 565.039,469.365 L 567.248,471.03 L 569.641,472.728 L 572.254,474.263 L 574.978,475.797 L 577.887,477.234 L 580.979,478.67 L 584.218,479.976 L 587.568,481.217 L 591.065,482.36 L 594.673,483.47 L 598.465,484.417 L 602.256,485.331 L 606.269,486.147 L 610.282,486.866 L 614.405,487.551 L 618.564,488.041 L 622.835,488.498 L 627.105,488.857 L 631.412,489.086 L 635.756,489.282 L 640.1,489.282 L 640.1,489.282 L 644.443,489.282 L 648.824,489.086 L 653.058,488.857 L 657.401,488.498 L 661.598,488.041 L 665.795,487.551 L 669.881,486.866 L 673.967,486.147 L 677.906,485.331 L 681.771,484.417 L 685.489,483.47 L 689.171,482.36 L 692.631,481.217 L 696.018,479.976 L 699.257,478.67 L 702.276,477.234 L 705.258,475.797 L 707.982,474.263 L 710.559,472.728 L 712.915,471.03 L 715.16,469.365 L 717.148,467.635 L 718.989,465.839 L 720.608,463.978 L 722.007,462.149 L 723.185,460.288 L 724.142,458.362 L 724.916,456.403 L 725.505,454.477 L 725.799,452.485 L 725.946,450.591z"/>
|
|
||||||
<path style="fill: #b6c7c9; fill-opacity: 1; stroke: none" fill-rule="evenodd" d="M 773.582 361.228 L 773.545,359.791 L 773.324,358.289 L 772.919,356.82 L 772.477,355.384 L 771.815,353.98 L 771.078,352.543 L 770.158,351.139 L 769.091,349.768 L 767.949,348.462 L 766.698,347.123 L 765.262,345.85 L 763.716,344.609 L 762.096,343.466 L 760.292,342.291 L 758.452,341.213 L 756.427,340.201 L 754.366,339.157 L 752.23,338.242 L 749.948,337.393 L 747.629,336.577 L 745.273,335.826 L 742.77,335.141 L 740.23,334.52 L 737.653,333.965 L 735.002,333.475 L 732.352,333.149 L 729.628,332.757 L 726.903,332.496 L 724.106,332.333 L 721.345,332.235 L 718.547,332.169 L 718.547,332.169 L 715.712,332.235 L 712.951,332.333 L 710.154,332.496 L 707.43,332.757 L 704.742,333.149 L 702.055,333.475 L 699.441,333.965 L 696.828,334.52 L 694.288,335.141 L 691.784,335.826 L 689.392,336.577 L 687.109,337.393 L 684.827,338.242 L 682.692,339.157 L 680.63,340.201 L 678.642,341.213 L 676.765,342.291 L 674.961,343.466 L 673.341,344.609 L 671.832,345.85 L 670.359,347.123 L 669.108,348.462 L 667.967,349.768 L 666.899,351.139 L 665.979,352.543 L 665.243,353.98 L 664.617,355.384 L 664.101,356.82 L 663.77,358.289 L 663.586,359.791 L 663.476,361.228 L 663.476,361.228 L 663.586,362.697 L 663.77,364.167 L 664.101,365.603 L 664.617,367.072 L 665.243,368.509 L 665.979,369.913 L 666.899,371.317 L 667.967,372.688 L 669.108,374.059 L 670.359,375.333 L 671.832,376.574 L 673.341,377.847 L 674.961,379.022 L 676.765,380.132 L 678.642,381.243 L 680.63,382.287 L 682.692,383.267 L 684.827,384.181 L 687.109,385.095 L 689.392,385.911 L 691.784,386.63 L 694.288,387.348 L 696.828,387.936 L 699.441,388.458 L 702.055,388.981 L 704.742,389.372 L 707.43,389.699 L 710.154,389.993 L 712.951,390.123 L 715.712,390.287 L 718.547,390.287 L 718.547,390.287 L 721.345,390.287 L 724.106,390.123 L 726.903,389.993 L 729.628,389.699 L 732.352,389.372 L 735.002,388.981 L 737.653,388.458 L 740.23,387.936 L 742.77,387.348 L 745.273,386.63 L 747.629,385.911 L 749.948,385.095 L 752.23,384.181 L 754.366,383.267 L 756.427,382.287 L 758.452,381.243 L 760.292,380.132 L 762.096,379.022 L 763.716,377.847 L 765.262,376.574 L 766.698,375.333 L 767.949,374.059 L 769.091,372.688 L 770.158,371.317 L 771.078,369.913 L 771.815,368.509 L 772.477,367.072 L 772.919,365.603 L 773.324,364.167 L 773.545,362.697 L 773.582,361.228z"/>
|
|
||||||
<path style="fill: #b6c7c9; fill-opacity: 1; stroke: none" fill-rule="evenodd" d="M 789.19 398.547 L 789.08,397.078 L 788.932,395.609 L 788.564,394.172 L 788.086,392.735 L 787.423,391.266 L 786.687,389.895 L 785.803,388.458 L 784.736,387.12 L 783.595,385.748 L 782.343,384.475 L 780.907,383.169 L 779.361,381.961 L 777.778,380.818 L 775.974,379.61 L 774.134,378.565 L 772.22,377.488 L 770.158,376.508 L 767.949,375.594 L 765.777,374.712 L 763.458,373.896 L 761.102,373.145 L 758.636,372.46 L 756.133,371.872 L 753.556,371.317 L 750.905,370.827 L 748.255,370.435 L 745.567,370.109 L 742.806,369.815 L 740.082,369.684 L 737.321,369.586 L 734.56,369.521 L 734.56,369.521 L 731.763,369.586 L 729.039,369.684 L 726.278,369.815 L 723.59,370.109 L 720.903,370.435 L 718.216,370.827 L 715.602,371.317 L 713.062,371.872 L 710.522,372.46 L 708.055,373.145 L 705.699,373.896 L 703.38,374.712 L 701.135,375.594 L 699.036,376.508 L 696.975,377.488 L 694.95,378.565 L 693.11,379.61 L 691.379,380.818 L 689.796,381.961 L 688.25,383.169 L 686.851,384.475 L 685.526,385.748 L 684.385,387.12 L 683.391,388.458 L 682.471,389.895 L 681.661,391.266 L 681.072,392.735 L 680.593,394.172 L 680.225,395.609 L 680.004,397.078 L 679.968,398.547 L 679.968,398.547 L 680.004,400.016 L 680.225,401.518 L 680.593,402.955 L 681.072,404.391 L 681.661,405.828 L 682.471,407.232 L 683.391,408.669 L 684.385,410.007 L 685.526,411.313 L 686.851,412.652 L 688.25,413.893 L 689.796,415.133 L 691.379,416.309 L 693.11,417.451 L 694.95,418.562 L 696.975,419.574 L 699.036,420.586 L 701.135,421.5 L 703.38,422.349 L 705.699,423.165 L 708.055,423.916 L 710.522,424.602 L 713.062,425.222 L 715.602,425.81 L 718.216,426.3 L 720.903,426.626 L 723.59,427.018 L 726.278,427.247 L 729.039,427.442 L 731.763,427.54 L 734.56,427.573 L 734.56,427.573 L 737.321,427.54 L 740.082,427.442 L 742.806,427.247 L 745.567,427.018 L 748.255,426.626 L 750.905,426.3 L 753.556,425.81 L 756.133,425.222 L 758.636,424.602 L 761.102,423.916 L 763.458,423.165 L 765.777,422.349 L 767.949,421.5 L 770.158,420.586 L 772.22,419.574 L 774.134,418.562 L 775.974,417.451 L 777.778,416.309 L 779.361,415.133 L 780.907,413.893 L 782.343,412.652 L 783.595,411.313 L 784.736,410.007 L 785.803,408.669 L 786.687,407.232 L 787.423,405.828 L 788.086,404.391 L 788.564,402.955 L 788.932,401.518 L 789.08,400.016 L 789.19,398.547z"/>
|
|
||||||
<path style="fill: #b6c7c9; fill-opacity: 1; stroke: none" fill-rule="evenodd" d="M 778.515 429.401 L 778.441,427.018 L 778.22,424.569 L 777.926,422.218 L 777.447,419.802 L 776.821,417.451 L 776.048,415.133 L 775.165,412.848 L 774.097,410.595 L 772.956,408.407 L 771.741,406.252 L 770.342,404.163 L 768.796,402.171 L 767.176,400.212 L 765.409,398.351 L 763.569,396.555 L 761.654,394.825 L 759.593,393.192 L 757.495,391.723 L 755.249,390.287 L 752.967,388.981 L 750.611,387.74 L 748.218,386.63 L 745.715,385.585 L 743.175,384.671 L 740.524,383.887 L 737.91,383.267 L 735.186,382.679 L 732.499,382.255 L 729.812,381.961 L 727.087,381.765 L 724.327,381.732 L 724.327,381.732 L 721.566,381.765 L 718.841,381.961 L 716.081,382.255 L 713.393,382.679 L 710.743,383.267 L 708.055,383.887 L 705.479,384.671 L 702.939,385.585 L 700.435,386.63 L 697.969,387.74 L 695.613,388.981 L 693.33,390.287 L 691.159,391.723 L 688.987,393.192 L 686.962,394.825 L 685.011,396.555 L 683.17,398.351 L 681.44,400.212 L 679.783,402.171 L 678.311,404.163 L 676.912,406.252 L 675.624,408.407 L 674.482,410.595 L 673.489,412.848 L 672.605,415.133 L 671.832,417.451 L 671.206,419.802 L 670.728,422.218 L 670.359,424.569 L 670.139,427.018 L 670.065,429.401 L 670.065,429.401 L 670.139,431.818 L 670.359,434.266 L 670.728,436.617 L 671.206,439.001 L 671.832,441.417 L 672.605,443.702 L 673.489,445.955 L 674.482,448.241 L 675.624,450.395 L 676.912,452.55 L 678.311,454.673 L 679.783,456.664 L 681.44,458.591 L 683.17,460.484 L 685.011,462.28 L 686.962,463.978 L 688.987,465.61 L 691.159,467.145 L 693.33,468.549 L 695.613,469.888 L 697.969,471.096 L 700.435,472.238 L 702.939,473.25 L 705.479,474.165 L 708.055,474.916 L 710.743,475.601 L 713.393,476.124 L 716.081,476.548 L 718.841,476.842 L 721.566,477.038 L 724.327,477.136 L 724.327,477.136 L 727.087,477.038 L 729.812,476.842 L 732.499,476.548 L 735.186,476.124 L 737.91,475.601 L 740.524,474.916 L 743.175,474.165 L 745.715,473.25 L 748.218,472.238 L 750.611,471.096 L 752.967,469.888 L 755.249,468.549 L 757.495,467.145 L 759.593,465.61 L 761.654,463.978 L 763.569,462.28 L 765.409,460.484 L 767.176,458.591 L 768.796,456.664 L 770.342,454.673 L 771.741,452.55 L 772.956,450.395 L 774.097,448.241 L 775.165,445.955 L 776.048,443.702 L 776.821,441.417 L 777.447,439.001 L 777.926,436.617 L 778.22,434.266 L 778.441,431.818 L 778.515,429.401z"/>
|
|
||||||
<path style="fill: #b6c7c9; fill-opacity: 1; stroke: none" fill-rule="evenodd" d="M 731.689 400.702 L 731.542,398.253 L 731.1,395.902 L 730.401,393.454 L 729.443,391.103 L 728.192,388.752 L 726.646,386.401 L 724.842,384.116 L 722.744,381.863 L 720.461,379.675 L 717.884,377.553 L 715.013,375.431 L 711.958,373.406 L 708.644,371.513 L 705.11,369.619 L 701.356,367.791 L 697.453,366.093 L 693.294,364.493 L 688.95,362.958 L 684.495,361.522 L 679.82,360.183 L 674.998,358.975 L 670.065,357.832 L 665.022,356.82 L 659.868,355.939 L 654.567,355.188 L 649.192,354.502 L 643.781,353.98 L 638.296,353.555 L 632.774,353.196 L 627.215,353.033 L 621.583,352.968 L 621.583,352.968 L 616.024,353.033 L 610.466,353.196 L 604.944,353.555 L 599.422,353.98 L 594.01,354.502 L 588.636,355.188 L 583.372,355.939 L 578.218,356.82 L 573.101,357.832 L 568.242,358.975 L 563.419,360.183 L 558.707,361.522 L 554.216,362.958 L 549.946,364.493 L 545.749,366.093 L 541.81,367.791 L 538.129,369.619 L 534.558,371.513 L 531.245,373.406 L 528.227,375.431 L 525.355,377.553 L 522.815,379.675 L 520.496,381.863 L 518.361,384.116 L 516.594,386.401 L 515.084,388.752 L 513.759,391.103 L 512.802,393.454 L 512.103,395.902 L 511.661,398.253 L 511.55,400.702 L 511.55,400.702 L 511.661,403.085 L 512.103,405.502 L 512.802,407.885 L 513.759,410.301 L 515.084,412.652 L 516.594,414.97 L 518.361,417.223 L 520.496,419.508 L 522.815,421.729 L 525.355,423.851 L 528.227,425.908 L 531.245,427.932 L 534.558,429.891 L 538.129,431.752 L 541.81,433.548 L 545.749,435.278 L 549.946,436.911 L 554.216,438.445 L 558.707,439.882 L 563.419,441.155 L 568.242,442.429 L 573.101,443.506 L 578.218,444.518 L 583.372,445.433 L 588.636,446.216 L 594.01,446.869 L 599.422,447.424 L 604.944,447.849 L 610.466,448.143 L 616.024,448.371 L 621.583,448.404 L 621.583,448.404 L 627.215,448.371 L 632.774,448.143 L 638.296,447.849 L 643.781,447.424 L 649.192,446.869 L 654.567,446.216 L 659.868,445.433 L 665.022,444.518 L 670.065,443.506 L 674.998,442.429 L 679.82,441.155 L 684.495,439.882 L 688.95,438.445 L 693.294,436.911 L 697.453,435.278 L 701.356,433.548 L 705.11,431.752 L 708.644,429.891 L 711.958,427.932 L 715.013,425.908 L 717.884,423.851 L 720.461,421.729 L 722.744,419.508 L 724.842,417.223 L 726.646,414.97 L 728.192,412.652 L 729.443,410.301 L 730.401,407.885 L 731.1,405.502 L 731.542,403.085 L 731.689,400.702z"/>
|
|
||||||
<path style="fill: #b6c7c9; fill-opacity: 1; stroke: none" fill-rule="evenodd" d="M 640.541 347.254 L 713.393,339.026 L 712.473,337.23 L 711.332,335.402 L 710.08,333.606 L 708.571,331.876 L 706.951,330.21 L 705.11,328.513 L 703.196,326.913 L 700.987,325.378 L 698.742,323.876 L 696.312,322.44 L 693.699,321.068 L 690.974,319.795 L 688.103,318.554 L 685.121,317.346 L 682.029,316.269 L 678.826,315.289 L 675.587,314.31 L 672.163,313.494 L 668.703,312.743 L 665.206,312.057 L 661.561,311.469 L 657.917,311.012 L 654.236,310.588 L 650.518,310.294 L 646.763,310.098 L 642.971,310 L 639.216,310 L 635.424,310.098 L 631.633,310.229 L 627.951,310.49 L 624.233,310.914 L 620.552,311.339 L 616.908,311.926 L 613.337,312.547 L 609.877,313.265 L 606.49,314.081 L 603.14,314.995 L 599.9,315.942 L 596.845,317.02 L 593.826,318.163 L 590.918,319.371 L 588.157,320.644 L 585.544,322.015 L 583.077,323.452 L 580.721,324.921 L 578.512,326.456 L 576.451,328.056 L 574.573,329.688 L 572.954,331.418 L 571.371,333.084 L 570.009,334.879 L 568.867,336.642 L 567.91,338.471 L 567.1,340.299 L 640.541,347.254z"/>
|
|
||||||
<path style="fill: none; stroke-opacity: 1; stroke-width: 0.02; stroke: #6c8f93" d="M 713.393 338.961 L 712.436,337.132 L 711.332,335.336 L 710.043,333.541 L 708.571,331.843 L 706.877,330.145 L 705.074,328.48 L 703.123,326.88 L 700.914,325.346 L 698.631,323.876 L 696.275,322.44 L 693.625,321.003 L 690.974,319.73 L 688.066,318.489 L 685.084,317.346 L 682.029,316.204 L 678.826,315.224 L 675.55,314.31 L 672.126,313.461 L 668.666,312.743 L 665.206,312.057 L 661.561,311.469 L 657.88,311.012 L 654.199,310.588 L 650.481,310.294 L 646.763,310.098 L 642.934,310 L 639.179,310 L 635.424,310.098 L 631.67,310.229 L 627.915,310.49 L 624.233,310.914 L 620.552,311.306 L 616.945,311.861 L 613.411,312.547 L 609.877,313.265 L 606.527,314.081 L 603.177,314.995 L 599.974,315.942 L 596.845,316.987 L 593.863,318.163 L 590.955,319.371 L 588.194,320.611 L 585.58,321.983 L 583.077,323.387 L 580.721,324.888 L 578.512,326.423 L 576.524,327.99 L 574.61,329.688 L 572.954,331.321 L 571.408,333.051 L 570.082,334.781 L 568.867,336.577 L 567.91,338.406 L 567.137,340.234"/>
|
|
||||||
<path style="fill: #b6c7c9; fill-opacity: 1; stroke: none" fill-rule="evenodd" d="M 541.479 366.615 L 578.218,338.046 L 575.935,336.871 L 573.543,335.761 L 571.113,334.781 L 568.61,333.802 L 566.07,332.953 L 563.419,332.169 L 560.695,331.516 L 558.008,330.896 L 555.173,330.406 L 552.375,329.982 L 549.504,329.688 L 546.633,329.459 L 543.761,329.329 L 540.89,329.329 L 537.982,329.394 L 535.11,329.59 L 532.239,329.819 L 529.405,330.178 L 526.607,330.635 L 523.846,331.157 L 521.085,331.778 L 518.434,332.496 L 515.784,333.312 L 513.244,334.194 L 510.777,335.173 L 508.421,336.251 L 506.065,337.393 L 503.857,338.569 L 501.758,339.875 L 499.697,341.213 L 497.783,342.65 L 496.016,344.087 L 494.322,345.654 L 492.776,347.221 L 491.304,348.854 L 490.015,350.551 L 488.8,352.282 L 487.77,354.012 L 486.849,355.808 L 486.113,357.636 L 485.524,359.465 L 485.009,361.359 L 484.641,363.252 L 484.493,365.113 L 484.42,366.974 L 484.53,368.868 L 484.751,370.794 L 485.193,372.623 L 541.479,366.615z"/>
|
|
||||||
<path style="fill: none; stroke-opacity: 1; stroke-width: 0.02; stroke: #6c8f93" d="M 578.034 337.948 L 575.751,336.773 L 573.432,335.696 L 571.003,334.683 L 568.463,333.769 L 565.849,332.888 L 563.235,332.137 L 560.548,331.451 L 557.787,330.863 L 555.026,330.406 L 552.155,329.982 L 549.32,329.688 L 546.485,329.459 L 543.614,329.329 L 540.669,329.329 L 537.871,329.394 L 535,329.59 L 532.055,329.819 L 529.257,330.21 L 526.496,330.635 L 523.662,331.223 L 520.974,331.81 L 518.324,332.561 L 515.71,333.377 L 513.133,334.259 L 510.667,335.239 L 508.311,336.316 L 506.029,337.426 L 503.82,338.667 L 501.648,339.907 L 499.697,341.311 L 497.746,342.683 L 495.942,344.185 L 494.285,345.687 L 492.702,347.254 L 491.304,348.919 L 490.015,350.617 L 488.8,352.347 L 487.733,354.078 L 486.849,355.906 L 486.113,357.669 L 485.45,359.53 L 485.009,361.424 L 484.641,363.285 L 484.493,365.146 L 484.42,367.04 L 484.604,368.901 L 484.825,370.794 L 485.193,372.688"/>
|
|
||||||
<path style="fill: #b6c7c9; fill-opacity: 1; stroke: none" fill-rule="evenodd" d="M 531.245 433.352 L 472.124,432.34 L 472.124,434.07 L 472.235,435.703 L 472.529,437.433 L 473.008,439.066 L 473.56,440.731 L 474.259,442.429 L 475.18,443.996 L 476.137,445.596 L 477.352,447.163 L 478.64,448.665 L 480.002,450.2 L 481.622,451.636 L 483.242,453.04 L 485.082,454.379 L 486.96,455.685 L 488.984,456.925 L 491.156,458.068 L 493.365,459.178 L 495.684,460.288 L 498.114,461.235 L 500.617,462.149 L 503.231,463.031 L 505.881,463.749 L 508.532,464.468 L 511.33,465.088 L 514.164,465.61 L 517.036,466.035 L 519.944,466.427 L 522.852,466.72 L 525.797,466.916 L 528.779,467.014 L 531.797,467.014 L 534.706,466.949 L 537.687,466.818 L 540.632,466.623 L 543.54,466.329 L 546.485,465.904 L 549.283,465.414 L 552.155,464.892 L 554.842,464.206 L 557.566,463.553 L 560.217,462.737 L 562.72,461.856 L 565.26,460.909 L 567.579,459.897 L 569.898,458.852 L 531.245,433.352z"/>
|
|
||||||
<path style="fill: none; stroke-opacity: 1; stroke-width: 0.02; stroke: #6c8f93" d="M 472.198 432.34 L 472.087,434.005 L 472.308,435.703 L 472.529,437.368 L 473.008,439.066 L 473.56,440.698 L 474.296,442.364 L 475.18,443.996 L 476.21,445.596 L 477.352,447.13 L 478.566,448.665 L 480.002,450.134 L 481.511,451.603 L 483.242,452.975 L 485.009,454.379 L 486.923,455.619 L 488.911,456.86 L 491.046,458.068 L 493.255,459.178 L 495.574,460.223 L 498.003,461.203 L 500.507,462.117 L 503.047,462.966 L 505.697,463.749 L 508.458,464.468 L 511.182,465.023 L 513.98,465.545 L 516.851,466.035 L 519.796,466.361 L 522.705,466.72 L 525.613,466.851 L 528.595,467.014 L 531.576,467.014 L 534.521,467.014 L 537.466,466.851 L 540.411,466.623 L 543.32,466.329 L 546.265,465.937 L 549.062,465.48 L 551.934,464.925 L 554.658,464.272 L 557.308,463.553 L 559.959,462.77 L 562.499,461.921 L 565.039,461.007 L 567.432,459.995 L 569.677,458.95"/>
|
|
||||||
<path style="fill: #b6c7c9; fill-opacity: 1; stroke: none" fill-rule="evenodd" d="M 719.357 360.542 L 771.373,369.978 L 772.256,368.574 L 772.919,367.17 L 773.545,365.734 L 773.913,364.264 L 774.281,362.795 L 774.355,361.326 L 774.355,359.824 L 774.281,358.387 L 773.987,356.918 L 773.582,355.449 L 772.993,354.012 L 772.293,352.576 L 771.483,351.204 L 770.526,349.8 L 769.422,348.462 L 768.17,347.123 L 766.771,345.817 L 765.336,344.576 L 763.753,343.368 L 762.059,342.226 L 760.256,341.05 L 758.268,340.005 L 756.28,338.993 L 754.108,338.046 L 751.936,337.132 L 749.654,336.316 L 747.298,335.5 L 744.831,334.781 L 742.328,334.128 L 739.751,333.541 L 737.1,333.051 L 734.487,332.627 L 731.726,332.235 L 729.002,331.941 L 726.241,331.712 L 723.443,331.614 L 720.682,331.516 L 717.921,331.516 L 715.123,331.614 L 712.326,331.745 L 709.602,331.974 L 706.841,332.267 L 704.117,332.627 L 701.429,333.084 L 719.357,360.542z"/>
|
|
||||||
<path style="fill: none; stroke-opacity: 1; stroke-width: 0.02; stroke: #6c8f93" d="M 766.587 375.3 L 771.336,370.044 L 772.22,368.672 L 772.919,367.236 L 773.471,365.799 L 773.913,364.33 L 774.207,362.861 L 774.318,361.424 L 774.355,359.889 L 774.244,358.453 L 773.987,356.983 L 773.582,355.514 L 772.993,354.078 L 772.293,352.641 L 771.52,351.237 L 770.563,349.898 L 769.422,348.494 L 768.17,347.156 L 766.882,345.85 L 765.372,344.609 L 763.79,343.401 L 762.096,342.226 L 760.292,341.116 L 758.378,340.071 L 756.353,339.026 L 754.255,338.046 L 752.01,337.165 L 749.727,336.316 L 747.371,335.532 L 744.905,334.879 L 742.401,334.194 L 739.861,333.573 L 737.248,333.051 L 734.56,332.627 L 731.91,332.235 L 729.186,331.941 L 726.425,331.745 L 723.627,331.614 L 720.829,331.516 L 717.995,331.516 L 715.234,331.614 L 712.436,331.745 L 709.675,331.941 L 706.951,332.235 L 704.264,332.594 L 701.576,333.051"/>
|
|
||||||
<path style="fill: #b6c7c9; fill-opacity: 1; stroke: none" fill-rule="evenodd" d="M 726.756 398.906 L 785.325,410.856 L 786.503,409.289 L 787.46,407.754 L 788.343,406.122 L 789.043,404.489 L 789.521,402.857 L 789.853,401.224 L 789.963,399.527 L 789.963,397.861 L 789.742,396.196 L 789.411,394.564 L 788.822,392.899 L 788.123,391.299 L 787.202,389.699 L 786.208,388.099 L 784.957,386.564 L 783.558,385.095 L 782.049,383.593 L 780.318,382.124 L 778.478,380.753 L 726.756,398.906z"/>
|
|
||||||
<path style="fill: none; stroke-opacity: 1; stroke-width: 0.02; stroke: #6c8f93" d="M 777.889 416.276 L 785.251,410.921 L 786.356,409.387 L 787.46,407.754 L 788.307,406.155 L 789.006,404.489 L 789.485,402.857 L 789.853,401.224 L 790,399.527 L 789.963,397.861 L 789.742,396.164 L 789.337,394.531 L 788.822,392.899 L 788.123,391.266 L 787.202,389.634 L 786.172,388.034 L 784.883,386.467 L 783.521,384.997 L 781.901,383.495 L 780.245,382.059 L 778.367,380.687 L 766.587,375.3"/>
|
|
||||||
<path style="fill: #b6c7c9; fill-opacity: 1; stroke: none" fill-rule="evenodd" d="M 724.29 430.446 L 705.81,475.797 L 708.534,476.516 L 711.295,477.169 L 714.056,477.658 L 716.927,478.05 L 719.725,478.344 L 722.523,478.475 L 725.431,478.475 L 728.265,478.344 L 731.063,478.148 L 733.898,477.756 L 736.659,477.266 L 739.42,476.711 L 742.144,475.993 L 744.831,475.112 L 747.408,474.165 L 749.985,473.087 L 752.488,471.912 L 754.918,470.606 L 757.274,469.267 L 759.519,467.733 L 761.654,466.133 L 763.716,464.468 L 765.704,462.672 L 767.581,460.811 L 769.275,458.884 L 770.894,456.86 L 772.44,454.803 L 773.803,452.648 L 775.017,450.493 L 776.159,448.241 L 777.116,445.922 L 777.999,443.572 L 778.699,441.221 L 779.288,438.805 L 779.656,436.421 L 779.987,433.972 L 780.061,431.524 L 780.061,429.075 L 779.913,426.626 L 779.619,424.177 L 779.177,421.761 L 778.625,419.378 L 777.889,417.027 L 724.29,430.446z"/>
|
|
||||||
<path style="fill: none; stroke-opacity: 1; stroke-width: 0.02; stroke: #6c8f93" d="M 705.957 475.83 L 708.718,476.613 L 711.442,477.234 L 714.24,477.756 L 717.038,478.083 L 719.909,478.344 L 722.707,478.475 L 725.541,478.54 L 728.376,478.344 L 731.247,478.148 L 734.045,477.756 L 736.806,477.266 L 739.567,476.646 L 742.291,475.928 L 744.942,475.079 L 747.592,474.099 L 750.132,473.055 L 752.599,471.912 L 754.991,470.606 L 757.347,469.169 L 759.593,467.667 L 761.728,466.035 L 763.79,464.37 L 765.777,462.639 L 767.618,460.746 L 769.385,458.787 L 770.931,456.827 L 772.477,454.705 L 773.839,452.55 L 775.054,450.395 L 776.159,448.143 L 777.152,445.792 L 778.036,443.474 L 778.699,441.09 L 779.288,438.707 L 779.729,436.323 L 779.987,433.874 L 780.061,431.426 L 780.061,428.977 L 779.877,426.528 L 779.619,424.079 L 779.14,421.663 L 778.515,419.28 L 777.889,416.929"/>
|
|
||||||
<path style="fill: #b6c7c9; fill-opacity: 1; stroke: none" fill-rule="evenodd" d="M 490.162 404.685 L 487.365,373.896 L 485.303,374.059 L 483.352,374.255 L 481.291,374.582 L 479.303,374.974 L 477.352,375.431 L 475.437,376.019 L 473.56,376.574 L 471.719,377.325 L 469.879,378.043 L 468.149,378.859 L 466.455,379.773 L 464.835,380.72 L 463.252,381.732 L 461.817,382.842 L 460.381,383.952 L 459.056,385.128 L 457.804,386.369 L 456.663,387.675 L 455.522,388.981 L 454.528,390.385 L 453.681,391.821 L 452.871,393.258 L 452.098,394.694 L 451.509,396.196 L 451.031,397.731 L 450.589,399.265 L 450.258,400.833 L 450.11,402.432 L 450,403.967 L 450,405.534 L 450.11,407.069 L 450.331,408.669 L 450.663,410.203 L 451.031,411.738 L 451.583,413.272 L 452.172,414.774 L 452.908,416.243 L 453.718,417.68 L 454.638,419.084 L 455.632,420.488 L 456.773,421.761 L 457.915,423.067 L 459.203,424.308 L 460.565,425.483 L 461.964,426.626 L 463.473,427.671 L 465.056,428.683 L 466.676,429.663 L 468.406,430.544 L 470.1,431.36 L 471.94,432.111 L 490.162,404.685z"/>
|
|
||||||
<path style="fill: none; stroke-opacity: 1; stroke-width: 0.02; stroke: #6c8f93" d="M 487.365 373.896 L 485.414,374.059 L 483.389,374.255 L 481.401,374.582 L 479.487,374.941 L 477.536,375.398 L 475.621,375.888 L 473.781,376.508 L 471.977,377.161 L 470.173,377.88 L 468.517,378.696 L 466.786,379.577 L 465.204,380.492 L 463.657,381.471 L 462.185,382.549 L 460.712,383.659 L 459.424,384.769 L 458.136,386.009 L 456.994,387.25 L 455.89,388.556 L 454.933,389.895 L 454.013,391.266 L 453.129,392.637 L 452.393,394.074 L 451.73,395.543 L 451.178,397.045 L 450.773,398.547 L 450.368,400.082 L 450.147,401.616 L 450,403.151 L 450,404.685 L 450,406.22 L 450.221,407.754 L 450.442,409.289 L 450.773,410.824 L 451.252,412.325 L 451.73,413.795 L 452.393,415.231 L 453.203,416.733 L 454.013,418.137 L 454.933,419.476 L 455.964,420.814 L 457.031,422.12 L 458.172,423.361 L 459.424,424.569 L 460.786,425.712 L 462.222,426.822 L 463.694,427.867 L 465.277,428.846 L 466.823,429.793 L 468.517,430.642 L 470.247,431.426 L 472.014,432.177"/>
|
|
||||||
<path style="fill: #b6c7c9; fill-opacity: 1; stroke: none" fill-rule="evenodd" d="M 639.29 454.118 L 555.505,457.676 L 556.057,459.472 L 556.756,461.301 L 557.713,463.064 L 558.928,464.794 L 560.217,466.459 L 561.799,468.157 L 563.53,469.79 L 565.481,471.422 L 567.653,472.957 L 569.972,474.491 L 572.401,475.928 L 575.089,477.332 L 577.887,478.67 L 580.868,479.976 L 583.997,481.152 L 587.237,482.327 L 590.697,483.372 L 594.158,484.417 L 597.802,485.331 L 601.52,486.213 L 605.422,486.931 L 609.324,487.649 L 613.263,488.237 L 617.386,488.759 L 621.509,489.184 L 625.669,489.51 L 629.792,489.771 L 634.026,489.902 L 638.296,490 L 642.492,490 L 646.763,489.869 L 650.959,489.673 L 655.119,489.38 L 659.242,488.955 L 663.365,488.498 L 667.341,487.943 L 671.317,487.257 L 675.182,486.604 L 679.01,485.788 L 682.692,484.874 L 686.226,483.894 L 689.686,482.85 L 693.036,481.707 L 696.239,480.531 L 699.294,479.291 L 702.129,477.985 L 704.89,476.613 L 707.43,475.177 L 709.859,473.675 L 712.105,472.14 L 714.093,470.606 L 715.933,468.973 L 717.627,467.276 L 719.062,465.61 L 639.29,454.118z"/>
|
|
||||||
<path style="fill: none; stroke-opacity: 1; stroke-width: 0.02; stroke: #6c8f93" d="M 555.578 457.742 L 556.057,459.505 L 556.793,461.301 L 557.713,463.064 L 558.928,464.794 L 560.29,466.525 L 561.799,468.157 L 563.566,469.79 L 565.481,471.422 L 567.653,472.957 L 569.972,474.491 L 572.401,475.928 L 575.089,477.332 L 577.96,478.67 L 580.868,479.976 L 583.997,481.152 L 587.237,482.327 L 590.697,483.372 L 594.158,484.384 L 597.802,485.331 L 601.52,486.213 L 605.349,486.931 L 609.251,487.649 L 613.227,488.237 L 617.35,488.759 L 621.436,489.184 L 625.595,489.478 L 629.755,489.771 L 633.952,489.902 L 638.185,490 L 642.419,489.967 L 646.615,489.869 L 650.812,489.608 L 655.045,489.38 L 659.168,488.955 L 663.218,488.465 L 667.267,487.943 L 671.206,487.323 L 675.071,486.604 L 678.863,485.788 L 682.508,484.874 L 686.115,483.894 L 689.576,482.882 L 692.889,481.805 L 696.091,480.597 L 699.11,479.356 L 702.055,478.05 L 704.779,476.613 L 707.356,475.21 L 709.786,473.708 L 711.958,472.238 L 714.019,470.606 L 715.86,469.006 L 717.479,467.341 L 718.989,465.643"/>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<path style="fill: none; stroke-opacity: 1; stroke-width: 0.8; stroke: #00aed9" d="M 472.883 378.401 L 472.883,360.469"/>
|
|
||||||
<path style="fill: none; stroke-opacity: 1; stroke-width: 4; stroke: #00aed9" d="M 472.883 378.111 L 472.883,365.811"/>
|
|
||||||
<path style="fill: #000000; fill-opacity: 1; stroke: none" fill-rule="evenodd" d="M 473.404 362.192 L 472.308,362.192 L 472.308,360 L 473.404,360 L 473.404,362.192z"/>
|
|
||||||
<path style="fill: none; stroke-opacity: 1; stroke-width: 2; stroke: #00aed9" d="M 473.404 362.192 L 472.308,362.192 L 472.308,360 L 473.404,360 L 473.404,362.192"/>
|
|
||||||
<path style="fill: none; stroke-opacity: 1; stroke-width: 0.8; stroke: #00aed9" d="M 446.304 378.401 L 446.304,360.469"/>
|
|
||||||
<path style="fill: none; stroke-opacity: 1; stroke-width: 4; stroke: #00aed9" d="M 446.304 378.111 L 446.304,365.811"/>
|
|
||||||
<path style="fill: #000000; fill-opacity: 1; stroke: none" fill-rule="evenodd" d="M 446.824 362.192 L 445.728,362.192 L 445.728,360 L 446.824,360 L 446.824,362.192z"/>
|
|
||||||
<path style="fill: none; stroke-opacity: 1; stroke-width: 2; stroke: #00aed9" d="M 446.824 362.192 L 445.728,362.192 L 445.728,360 L 446.824,360 L 446.824,362.192"/>
|
|
||||||
<path style="fill: #00aed9; fill-opacity: 1; stroke: none" fill-rule="evenodd" d="M 480.318 380.677 C 480.318,385.007 471.293,388.516 460.159,388.516 C 449.025,388.516 440,385.007 440,380.677 L 440,392.16 C 440,396.49 449.025,400 460.159,400 C 471.293,400 480.318,396.49 480.318,392.16 L 480.318,380.677z"/>
|
|
||||||
<path style="fill: none; stroke-opacity: 1; stroke-width: 0.8; stroke: #ffffff" d="M 480.318 380.677 C 480.318,385.007 471.293,388.516 460.159,388.516 C 449.025,388.516 440,385.007 440,380.677 L 440,392.16 C 440,396.49 449.025,400 460.159,400 C 471.293,400 480.318,396.49 480.318,392.16 L 480.318,380.677"/>
|
|
||||||
<path style="fill: #00aed9; fill-opacity: 1; stroke: none" fill-rule="evenodd" d="M 460.159 388.516 C 471.293,388.516 480.318,385.007 480.318,380.677 C 480.318,376.347 471.293,372.837 460.159,372.837 C 449.025,372.837 440,376.347 440,380.677 C 440,385.007 449.025,388.516 460.159,388.516z"/>
|
|
||||||
<path style="fill: none; stroke-opacity: 1; stroke-width: 0.8; stroke: #ffffff" d="M 460.159 388.516 C 471.293,388.516 480.318,385.007 480.318,380.677 C 480.318,376.347 471.293,372.837 460.159,372.837 C 449.025,372.837 440,376.347 440,380.677 C 440,385.007 449.025,388.516 460.159,388.516"/>
|
|
||||||
<path style="fill: #ffffff; fill-opacity: 1; stroke: none" fill-rule="evenodd" d="M 455.555 377.612 L 457.22,380.109 L 450.927,381.563 L 452.301,380.419 L 442.574,378.756 L 445.015,376.927 L 454.4,378.516 L 455.555,377.612z"/>
|
|
||||||
<path style="fill: #ffffff; fill-opacity: 1; stroke: none" fill-rule="evenodd" d="M 464.413 383.666 L 463.276,381.093 L 468.953,379.958 L 467.968,380.84 L 477.431,382.456 L 475.162,384.272 L 465.754,382.507 L 464.413,383.666z"/>
|
|
||||||
<path style="fill: #ffffff; fill-opacity: 1; stroke: none" fill-rule="evenodd" d="M 461.308 376.248 L 467.667,374.508 L 467.742,377.234 L 466.153,376.93 L 463.048,379.503 L 460.088,379.072 L 463.29,376.554 L 461.308,376.248z"/>
|
|
||||||
<path style="fill: #ffffff; fill-opacity: 1; stroke: none" fill-rule="evenodd" d="M 458.583 386.014 L 452.528,387.149 L 452.301,384.349 L 454.041,384.726 L 457.374,381.88 L 460.324,382.38 L 456.767,385.484 L 458.583,386.014z"/>
|
|
||||||
</g>
|
|
||||||
<text font-size="21.4489" style="fill: #000000; fill-opacity: 1; stroke: none;text-anchor:start;font-family:sans-serif;font-style:italic;font-weight:normal" x="620" y="390">
|
|
||||||
<tspan x="620" y="390">Mesh</tspan>
|
|
||||||
</text>
|
|
||||||
<g>
|
|
||||||
<path style="fill: #c9c9b6; fill-opacity: 1; stroke: none" fill-rule="evenodd" d="M 294.294 324.172 L 328.289,324.172 L 313.995,338.514 L 280,338.514 L 294.294,324.172z"/>
|
|
||||||
<path style="fill: none; stroke-opacity: 1; stroke-width: 0.02; stroke: #494936" d="M 294.294 324.172 L 328.289,324.172 L 313.995,338.514 L 280,338.514 L 294.294,324.172"/>
|
|
||||||
<path style="fill: none; stroke-opacity: 1; stroke-width: 0.02; stroke: #dbdbce" d="M 295.599 336.092 L 295.599,336.168 L 295.613,336.23 L 295.633,336.314 L 295.661,336.397 L 295.703,336.46 L 295.751,336.536 L 295.814,336.605 L 295.876,336.668 L 295.939,336.744 L 296.022,336.821 L 296.106,336.883 L 296.196,336.939 L 296.3,336.994 L 296.397,337.057 L 296.522,337.105 L 296.633,337.168 L 296.758,337.216 L 296.897,337.265 L 297.036,337.306 L 297.168,337.348 L 297.313,337.39 L 297.459,337.431 L 297.612,337.452 L 297.779,337.48 L 297.938,337.494 L 298.105,337.522 L 298.258,337.543 L 298.431,337.563 L 298.605,337.57 L 298.771,337.577 L 298.938,337.577"/>
|
|
||||||
<path style="fill: none; stroke-opacity: 1; stroke-width: 0.02; stroke: #dbdbce" d="M 298.57 337.577 L 298.737,337.577 L 298.896,337.57 L 299.056,337.556 L 299.222,337.536 L 299.389,337.522 L 299.542,337.494 L 299.695,337.48 L 299.854,337.445 L 300,337.411 L 300.153,337.369 L 300.285,337.327 L 300.423,337.286 L 300.555,337.237 L 300.68,337.188 L 300.791,337.14 L 300.909,337.084 L 301.02,337.022 L 301.118,336.966 L 301.215,336.897 L 301.298,336.827 L 301.375,336.758 L 301.437,336.696 L 301.506,336.619 L 301.562,336.543 L 301.604,336.48 L 301.652,336.404 L 301.673,336.314 L 301.694,336.237 L 301.715,336.168 L 301.722,336.092"/>
|
|
||||||
<path style="fill: none; stroke-opacity: 1; stroke-width: 0.02; stroke: #dbdbce" d="M 299.306 333.308 L 299.132,333.308 L 298.966,333.315 L 298.792,333.315 L 298.639,333.329 L 298.473,333.35 L 298.306,333.363 L 298.146,333.377 L 297.98,333.412 L 297.834,333.44 L 297.688,333.461 L 297.543,333.495 L 297.397,333.537 L 297.265,333.572 L 297.14,333.613 L 297.015,333.669 L 296.876,333.711 L 296.779,333.759 L 296.668,333.801 L 296.564,333.856 L 296.48,333.919 L 296.39,333.974 L 296.314,334.023 L 296.237,334.085 L 296.182,334.148 L 296.126,334.217 L 296.071,334.28 L 296.043,334.335 L 296.008,334.405 L 295.988,334.46 L 295.981,334.537 L 295.974,334.592"/>
|
|
||||||
<path style="fill: none; stroke-opacity: 1; stroke-width: 0.02; stroke: #dbdbce" d="M 302.083 334.592 L 302.083,334.53 L 302.076,334.46 L 302.048,334.398 L 302.02,334.321 L 301.985,334.266 L 301.93,334.19 L 301.874,334.134 L 301.819,334.065 L 301.736,334.016 L 301.673,333.947 L 301.59,333.891 L 301.479,333.842 L 301.388,333.773 L 301.284,333.738 L 301.173,333.683 L 301.048,333.627 L 300.916,333.586 L 300.784,333.544 L 300.653,333.509 L 300.514,333.481 L 300.368,333.447 L 300.215,333.412 L 300.069,333.391 L 299.917,333.363 L 299.764,333.35 L 299.604,333.329 L 299.438,333.315 L 299.264,333.315 L 299.098,333.308 L 298.938,333.308"/>
|
|
||||||
<path style="fill: #a5a585; fill-opacity: 1; stroke: none" fill-rule="evenodd" d="M 280 340 L 313.995,340 L 313.995,338.514 L 280,338.514 L 280,340z"/>
|
|
||||||
<path style="fill: none; stroke-opacity: 1; stroke-width: 0.02; stroke: #494936" d="M 280 340 L 313.995,340 L 313.995,338.514 L 280,338.514 L 280,340"/>
|
|
||||||
<path style="fill: #a5a585; fill-opacity: 1; stroke: none" fill-rule="evenodd" d="M 294.294 324.172 L 328.289,324.172 L 328.289,300.916 L 294.294,300.916 L 294.294,324.172z"/>
|
|
||||||
<path style="fill: none; stroke-opacity: 1; stroke-width: 0.02; stroke: #494936" d="M 294.294 324.172 L 328.289,324.172 L 328.289,300.916 L 294.294,300.916 L 294.294,324.172"/>
|
|
||||||
<path style="fill: #7a7a5a; fill-opacity: 1; stroke: none" fill-rule="evenodd" d="M 329.219 323.256 L 329.219,300 L 328.289,300.916 L 328.289,324.172 L 329.219,323.256z"/>
|
|
||||||
<path style="fill: none; stroke-opacity: 1; stroke-width: 0.02; stroke: #494936" d="M 329.219 323.256 L 329.219,300 L 328.289,300.916 L 328.289,324.172 L 329.219,323.256"/>
|
|
||||||
<path style="fill: #ffffff; fill-opacity: 1; stroke: none" fill-rule="evenodd" d="M 295.974 322.694 L 326.623,322.694 L 326.623,302.784 L 295.974,302.784 L 295.974,322.694z"/>
|
|
||||||
<path style="fill: none; stroke-opacity: 1; stroke-width: 0.02; stroke: #494936" d="M 295.974 322.694 L 326.623,322.694 L 326.623,302.784 L 295.974,302.784 L 295.974,322.694"/>
|
|
||||||
<path style="fill: #93936c; fill-opacity: 1; stroke: none" fill-rule="evenodd" d="M 295.974 325.297 L 324.568,325.297 L 317.14,332.746 L 288.546,332.746 L 295.974,325.297z"/>
|
|
||||||
<path style="fill: none; stroke-opacity: 1; stroke-width: 0.02; stroke: #494936" d="M 295.974 325.297 L 324.568,325.297 L 317.14,332.746 L 288.546,332.746 L 295.974,325.297"/>
|
|
||||||
<path style="fill: #7a7a5a; fill-opacity: 1; stroke: none" fill-rule="evenodd" d="M 300.423 335.62 L 300.423,335.578 L 300.417,335.536 L 300.41,335.495 L 300.389,335.446 L 300.382,335.404 L 300.354,335.37 L 300.34,335.328 L 300.305,335.3 L 300.271,335.259 L 300.25,335.217 L 300.215,335.182 L 300.174,335.148 L 300.132,335.106 L 300.083,335.071 L 300.042,335.05 L 299.993,335.016 L 299.938,334.988 L 299.875,334.967 L 299.826,334.932 L 299.764,334.918 L 299.701,334.891 L 299.646,334.877 L 299.577,334.856 L 299.514,334.842 L 299.438,334.828 L 299.375,334.807 L 299.306,334.8 L 299.243,334.8 L 299.174,334.793 L 299.091,334.793 L 299.035,334.793 L 299.035,334.793 L 298.959,334.793 L 298.882,334.793 L 298.82,334.8 L 298.75,334.8 L 298.688,334.807 L 298.612,334.828 L 298.549,334.842 L 298.48,334.856 L 298.417,334.877 L 298.355,334.891 L 298.299,334.918 L 298.23,334.932 L 298.181,334.967 L 298.126,334.988 L 298.07,335.016 L 298.022,335.05 L 297.98,335.071 L 297.931,335.106 L 297.89,335.148 L 297.855,335.182 L 297.806,335.217 L 297.785,335.259 L 297.744,335.3 L 297.723,335.328 L 297.702,335.37 L 297.681,335.404 L 297.667,335.446 L 297.661,335.495 L 297.647,335.536 L 297.633,335.578 L 297.633,335.62 L 297.633,335.62 L 297.633,335.668 L 297.647,335.71 L 297.661,335.751 L 297.667,335.793 L 297.681,335.835 L 297.702,335.869 L 297.723,335.918 L 297.744,335.953 L 297.785,335.994 L 297.806,336.022 L 297.855,336.064 L 297.89,336.099 L 297.931,336.14 L 297.98,336.168 L 298.022,336.196 L 298.07,336.23 L 298.126,336.258 L 298.181,336.279 L 298.23,336.314 L 298.299,336.328 L 298.355,336.355 L 298.417,336.369 L 298.48,336.39 L 298.549,336.404 L 298.612,336.418 L 298.688,336.432 L 298.75,336.446 L 298.82,336.446 L 298.882,336.446 L 298.959,336.453 L 299.035,336.453 L 299.035,336.453 L 299.091,336.453 L 299.174,336.446 L 299.243,336.446 L 299.306,336.446 L 299.375,336.432 L 299.438,336.418 L 299.514,336.404 L 299.577,336.39 L 299.646,336.369 L 299.701,336.355 L 299.764,336.328 L 299.826,336.314 L 299.875,336.279 L 299.938,336.258 L 299.993,336.23 L 300.042,336.196 L 300.083,336.168 L 300.132,336.14 L 300.174,336.099 L 300.215,336.064 L 300.25,336.022 L 300.271,335.994 L 300.305,335.953 L 300.34,335.918 L 300.354,335.869 L 300.382,335.835 L 300.389,335.793 L 300.41,335.751 L 300.417,335.71 L 300.423,335.668 L 300.423,335.62z"/>
|
|
||||||
<path style="fill: none; stroke-opacity: 1; stroke-width: 0.02; stroke: #dbdbce" d="M 300.243 335.536 L 300.243,335.495 L 300.236,335.453 L 300.236,335.418 L 300.215,335.39 L 300.201,335.335 L 300.194,335.314 L 300.16,335.272 L 300.132,335.231 L 300.111,335.203 L 300.083,335.175 L 300.042,335.148 L 300.007,335.099 L 299.965,335.071 L 299.924,335.05 L 299.889,335.016 L 299.833,334.988 L 299.792,334.974 L 299.743,334.939 L 299.695,334.925 L 299.632,334.898 L 299.577,334.884 L 299.514,334.87 L 299.459,334.849 L 299.396,334.835 L 299.334,334.828 L 299.264,334.807 L 299.209,334.8 L 299.132,334.793 L 299.077,334.793 L 299.007,334.793 L 298.945,334.793 L 298.945,334.793 L 298.875,334.793 L 298.813,334.793 L 298.743,334.793 L 298.688,334.8 L 298.619,334.807 L 298.563,334.828 L 298.487,334.835 L 298.431,334.849 L 298.383,334.87 L 298.313,334.884 L 298.258,334.898 L 298.188,334.925 L 298.153,334.939 L 298.091,334.974 L 298.049,334.988 L 298.001,335.016 L 297.959,335.05 L 297.917,335.071 L 297.876,335.099 L 297.841,335.148 L 297.806,335.175 L 297.779,335.203 L 297.744,335.231 L 297.73,335.272 L 297.702,335.314 L 297.688,335.335 L 297.674,335.39 L 297.661,335.418 L 297.654,335.453 L 297.647,335.495 L 297.647,335.536 L 297.647,335.536 L 297.647,335.571 L 297.654,335.613 L 297.661,335.654 L 297.674,335.675 L 297.688,335.717 L 297.702,335.758 L 297.73,335.793 L 297.744,335.828 L 297.779,335.869 L 297.806,335.89 L 297.841,335.925 L 297.876,335.96 L 297.917,335.994 L 297.959,336.015 L 298.001,336.05 L 298.049,336.071 L 298.091,336.099 L 298.153,336.126 L 298.188,336.14 L 298.258,336.168 L 298.313,336.189 L 298.383,336.196 L 298.431,336.217 L 298.487,336.23 L 298.563,336.237 L 298.619,336.258 L 298.688,336.272 L 298.743,336.272 L 298.813,336.272 L 298.875,336.272 L 298.945,336.272 L 298.945,336.272 L 299.007,336.272 L 299.077,336.272 L 299.132,336.272 L 299.209,336.272 L 299.264,336.258 L 299.334,336.237 L 299.396,336.23 L 299.459,336.217 L 299.514,336.196 L 299.577,336.189 L 299.632,336.168 L 299.695,336.14 L 299.743,336.126 L 299.792,336.099 L 299.833,336.071 L 299.889,336.05 L 299.924,336.015 L 299.965,335.994 L 300.007,335.96 L 300.042,335.925 L 300.083,335.89 L 300.111,335.869 L 300.132,335.828 L 300.16,335.793 L 300.194,335.758 L 300.201,335.717 L 300.215,335.675 L 300.236,335.654 L 300.236,335.613 L 300.243,335.571 L 300.243,335.536"/>
|
|
||||||
<path style="fill: none; stroke-opacity: 1; stroke-width: 0.02; stroke: #626248" d="M 295.793 336.272 L 295.793,336.355 L 295.807,336.418 L 295.835,336.494 L 295.856,336.578 L 295.897,336.647 L 295.939,336.709 L 296.001,336.786 L 296.064,336.862 L 296.133,336.925 L 296.203,336.994 L 296.293,337.057 L 296.376,337.126 L 296.487,337.182 L 296.591,337.237 L 296.703,337.286 L 296.821,337.348 L 296.952,337.397 L 297.07,337.445 L 297.223,337.487 L 297.362,337.529 L 297.508,337.577 L 297.654,337.612 L 297.806,337.633 L 297.959,337.661 L 298.126,337.688 L 298.285,337.702 L 298.445,337.73 L 298.612,337.744 L 298.785,337.751 L 298.952,337.751 L 299.118,337.751"/>
|
|
||||||
<path style="fill: none; stroke-opacity: 1; stroke-width: 0.02; stroke: #626248" d="M 298.743 337.751 L 298.917,337.751 L 299.077,337.751 L 299.25,337.737 L 299.403,337.716 L 299.563,337.702 L 299.729,337.688 L 299.875,337.661 L 300.035,337.626 L 300.174,337.591 L 300.326,337.563 L 300.472,337.522 L 300.604,337.48 L 300.736,337.431 L 300.861,337.369 L 300.986,337.32 L 301.09,337.265 L 301.201,337.209 L 301.298,337.14 L 301.388,337.084 L 301.479,337.008 L 301.555,336.952 L 301.631,336.883 L 301.694,336.8 L 301.736,336.723 L 301.798,336.661 L 301.826,336.578 L 301.86,336.501 L 301.888,336.418 L 301.888,336.355 L 301.902,336.272"/>
|
|
||||||
<path style="fill: none; stroke-opacity: 1; stroke-width: 0.02; stroke: #626248" d="M 299.486 333.488 L 299.327,333.488 L 299.16,333.495 L 298.993,333.495 L 298.827,333.509 L 298.653,333.53 L 298.487,333.537 L 298.341,333.565 L 298.174,333.586 L 298.022,333.627 L 297.876,333.641 L 297.73,333.683 L 297.591,333.711 L 297.452,333.759 L 297.327,333.801 L 297.202,333.842 L 297.07,333.884 L 296.966,333.933 L 296.855,333.981 L 296.758,334.044 L 296.668,334.099 L 296.585,334.148 L 296.501,334.217 L 296.418,334.266 L 296.369,334.321 L 296.314,334.398 L 296.265,334.453 L 296.224,334.523 L 296.196,334.578 L 296.175,334.641 L 296.168,334.717 L 296.161,334.787"/>
|
|
||||||
<path style="fill: none; stroke-opacity: 1; stroke-width: 0.02; stroke: #626248" d="M 302.277 334.787 L 302.263,334.71 L 302.256,334.641 L 302.242,334.578 L 302.208,334.509 L 302.166,334.446 L 302.117,334.377 L 302.062,334.321 L 301.999,334.259 L 301.93,334.19 L 301.847,334.134 L 301.763,334.072 L 301.673,334.016 L 301.562,333.967 L 301.465,333.919 L 301.347,333.87 L 301.236,333.815 L 301.111,333.773 L 300.979,333.738 L 300.833,333.697 L 300.694,333.669 L 300.555,333.627 L 300.41,333.599 L 300.257,333.572 L 300.09,333.544 L 299.944,333.53 L 299.785,333.509 L 299.618,333.495 L 299.445,333.495 L 299.292,333.488 L 299.118,333.488"/>
|
|
||||||
<path style="fill: #7a7a5a; fill-opacity: 1; stroke: none" fill-rule="evenodd" d="M 328.289 325.477 L 313.995,339.82 L 313.995,338.514 L 328.289,324.172 L 328.289,325.477z"/>
|
|
||||||
<path style="fill: none; stroke-opacity: 1; stroke-width: 0.02; stroke: #494936" d="M 328.289 325.477 L 313.995,339.82 L 313.995,338.514 L 328.289,324.172 L 328.289,325.477"/>
|
|
||||||
<path style="fill: #7a7a5a; fill-opacity: 1; stroke: none" fill-rule="evenodd" d="M 323.464 323.075 L 323.464,323.429 L 326.248,323.429 L 326.248,323.075 L 323.464,323.075z"/>
|
|
||||||
<path style="fill: none; stroke-opacity: 1; stroke-width: 0.02; stroke: #494936" d="M 323.464 323.075 L 323.464,323.429 L 326.248,323.429 L 326.248,323.075 L 323.464,323.075"/>
|
|
||||||
<path style="fill: none; stroke-opacity: 1; stroke-width: 0.02; stroke: #000000" d="M 322.7 327.157 L 294.294,327.157"/>
|
|
||||||
<path style="fill: none; stroke-opacity: 1; stroke-width: 0.02; stroke: #000000" d="M 320.854 329.025 L 292.447,329.025"/>
|
|
||||||
<path style="fill: none; stroke-opacity: 1; stroke-width: 0.02; stroke: #000000" d="M 319 330.885 L 290.587,330.885"/>
|
|
||||||
<path style="fill: #c9c9b6; fill-opacity: 1; stroke: none" fill-rule="evenodd" d="M 295.224 300 L 329.219,300 L 328.289,300.916 L 294.294,300.916 L 295.224,300z"/>
|
|
||||||
<path style="fill: none; stroke-opacity: 1; stroke-width: 0.02; stroke: #494936" d="M 295.224 300 L 329.219,300 L 328.289,300.916 L 294.294,300.916 L 295.224,300"/>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<path style="fill: #7a7a5a; fill-opacity: 1; stroke: none" fill-rule="evenodd" d="M 260.594 397.19 C 260.943,395.941 262.38,389.684 262.447,388.811 C 262.514,387.938 262.192,386.851 261.722,386.623 C 261.749,386.314 261.749,386.139 261.749,386.139 C 261.641,386.099 261.521,386.059 261.413,386.005 L 261.453,386.018 C 261.453,386.018 261.776,384.622 261.977,383.655 C 262.34,381.802 262.38,380.862 262.38,380.862 C 262.367,380.607 262.299,380.379 262.071,380.312 L 260.984,380.016 C 260.755,379.949 260.594,380.097 260.446,380.325 C 260.446,380.325 260.017,381.184 259.426,382.957 C 259.104,383.883 258.808,385.065 258.808,385.065 L 258.822,385.065 C 258.177,384.85 257.519,384.662 256.861,384.474 C 255.169,384.004 253.491,383.655 251.799,383.4 C 251.799,383.4 251.719,383.548 251.571,383.83 C 251.061,383.776 250.228,384.555 249.839,385.334 C 249.449,386.112 247.476,392.222 247.126,393.471 C 246.777,394.719 246.119,397.915 245.824,399.499 C 245.529,401.084 245.26,403.85 244.24,407.529 C 243.635,409.704 242.669,412.954 242.158,414.296 C 242.024,414.659 240.963,416.445 242.507,417.062 C 244.025,417.667 246.294,418.311 247.435,418.633 C 248.577,418.942 250.846,419.546 252.457,419.815 C 254.095,420.084 254.109,417.989 254.176,417.613 C 254.431,416.203 255.263,412.913 255.854,410.738 C 256.875,407.046 258.07,404.548 258.634,403.031 C 259.184,401.514 260.245,398.439 260.594,397.19z"/>
|
|
||||||
<path style="fill: none; stroke-opacity: 1; stroke-width: 0.8; stroke: #000000" d="M 260.594 397.19 C 260.943,395.941 262.38,389.684 262.447,388.811 C 262.514,387.938 262.192,386.851 261.722,386.623 C 261.749,386.314 261.749,386.139 261.749,386.139 C 261.641,386.099 261.521,386.059 261.413,386.005 L 261.453,386.018 C 261.453,386.018 261.776,384.622 261.977,383.655 C 262.34,381.802 262.38,380.862 262.38,380.862 C 262.367,380.607 262.299,380.379 262.071,380.312 L 260.984,380.016 C 260.755,379.949 260.594,380.097 260.446,380.325 C 260.446,380.325 260.017,381.184 259.426,382.957 C 259.104,383.883 258.808,385.065 258.808,385.065 L 258.822,385.065 C 258.177,384.85 257.519,384.662 256.861,384.474 C 255.169,384.004 253.491,383.655 251.799,383.4 C 251.799,383.4 251.719,383.548 251.571,383.83 L 251.571,383.83 C 251.061,383.776 250.228,384.555 249.839,385.334 C 249.449,386.112 247.476,392.222 247.126,393.471 C 246.777,394.719 246.119,397.915 245.824,399.499 C 245.529,401.084 245.26,403.85 244.24,407.529 C 243.635,409.704 242.669,412.954 242.158,414.296 C 242.024,414.659 240.963,416.445 242.507,417.062 C 244.025,417.667 246.294,418.311 247.435,418.633 C 248.577,418.942 250.846,419.546 252.457,419.815 C 254.095,420.084 254.109,417.989 254.176,417.613 C 254.431,416.203 255.263,412.913 255.854,410.738 C 256.875,407.046 258.07,404.548 258.634,403.031 C 259.184,401.514 260.245,398.439 260.594,397.19"/>
|
|
||||||
<path style="fill: #b7b79d; fill-opacity: 1; stroke: none" fill-rule="evenodd" d="M 258.916 397.351 C 259.265,396.102 260.702,389.845 260.769,388.986 C 260.836,388.113 260.514,387.012 260.044,386.797 C 260.07,386.488 260.07,386.314 260.07,386.314 C 259.963,386.26 259.842,386.22 259.735,386.179 L 259.762,386.193 C 259.762,386.193 260.097,384.796 260.299,383.83 C 260.661,381.963 260.688,381.023 260.688,381.023 C 260.688,380.768 260.621,380.553 260.393,380.486 L 259.305,380.191 C 259.077,380.124 258.916,380.271 258.768,380.5 C 258.768,380.5 258.338,381.359 257.748,383.118 C 257.425,384.058 257.13,385.226 257.13,385.226 L 257.143,385.24 C 256.499,385.025 255.841,384.823 255.183,384.649 C 253.491,384.179 251.799,383.816 250.121,383.561 C 250.121,383.561 250.04,383.722 249.893,383.991 C 249.382,383.951 248.55,384.716 248.16,385.495 C 247.771,386.273 245.797,392.383 245.448,393.645 C 245.099,394.894 244.441,398.076 244.146,399.661 C 243.85,401.245 243.582,404.011 242.561,407.704 C 241.957,409.879 240.99,413.115 240.48,414.471 C 240.346,414.82 239.285,416.619 240.829,417.237 C 242.346,417.828 244.616,418.486 245.757,418.795 C 246.898,419.117 249.167,419.708 250.779,419.976 C 252.417,420.245 252.43,418.163 252.497,417.788 C 252.753,416.364 253.585,413.088 254.176,410.913 C 255.196,407.22 256.391,404.709 256.955,403.192 C 257.506,401.688 258.567,398.613 258.916,397.351z"/>
|
|
||||||
<path style="fill: none; stroke-opacity: 1; stroke-width: 0.8; stroke: #000000" d="M 258.916 397.351 C 259.265,396.102 260.702,389.845 260.769,388.986 C 260.836,388.113 260.514,387.012 260.044,386.797 C 260.07,386.488 260.07,386.314 260.07,386.314 C 259.963,386.26 259.842,386.22 259.735,386.179 L 259.762,386.193 C 259.762,386.193 260.097,384.796 260.299,383.83 C 260.661,381.963 260.688,381.023 260.688,381.023 C 260.688,380.768 260.621,380.553 260.393,380.486 L 259.305,380.191 C 259.077,380.124 258.916,380.271 258.768,380.5 C 258.768,380.5 258.338,381.359 257.748,383.118 C 257.425,384.058 257.13,385.226 257.13,385.226 L 257.143,385.24 C 256.499,385.025 255.841,384.823 255.183,384.649 C 253.491,384.179 251.799,383.816 250.121,383.561 C 250.121,383.561 250.04,383.722 249.893,383.991 L 249.893,383.991 C 249.382,383.951 248.55,384.716 248.16,385.495 C 247.771,386.273 245.797,392.383 245.448,393.645 C 245.099,394.894 244.441,398.076 244.146,399.661 C 243.85,401.245 243.582,404.011 242.561,407.704 C 241.957,409.879 240.99,413.115 240.48,414.471 C 240.346,414.82 239.285,416.619 240.829,417.237 C 242.346,417.828 244.616,418.486 245.757,418.795 C 246.898,419.117 249.167,419.708 250.779,419.976 C 252.417,420.245 252.43,418.163 252.497,417.788 C 252.753,416.364 253.585,413.088 254.176,410.913 C 255.196,407.22 256.391,404.709 256.955,403.192 C 257.506,401.688 258.567,398.613 258.916,397.351"/>
|
|
||||||
<path style="fill: #c9c9b6; fill-opacity: 1; stroke-opacity: 1; stroke-width: 0.8; stroke: #ecece7" fill-rule="evenodd" d="M 250.336 383.601 C 250.336,383.601 248.12,388.126 246.845,392.719 C 245.341,398.184 245.126,399.996 245.354,402.534 C 245.394,403.058 245.918,403.702 246.495,403.863 C 246.724,403.917 246.992,403.998 247.1,404.024 C 247.22,404.065 247.65,404.159 247.999,404.441 C 248.362,404.723 248.442,404.79 248.657,404.897 C 248.859,405.018 248.899,405.099 249.49,405.26 C 250.08,405.421 250.148,405.381 250.389,405.381 C 250.631,405.394 250.738,405.381 251.195,405.327 C 251.638,405.26 252.054,405.394 252.175,405.421 C 252.283,405.461 252.551,405.528 252.779,405.595 C 253.357,405.757 254.136,405.475 254.444,405.045 C 255.935,402.991 256.687,401.312 258.191,395.847 C 259.453,391.255 259.869,386.233 259.869,386.233 L 250.336,383.601z"/>
|
|
||||||
<path style="fill: #000000; fill-opacity: 1; stroke: none" fill-rule="evenodd" d="M 253.021 402.561 C 252.632,403.998 251.141,404.83 249.718,404.441 C 248.281,404.051 247.449,402.561 247.838,401.138 C 248.241,399.701 249.718,398.868 251.141,399.258 C 252.578,399.661 253.41,401.138 253.021,402.561z"/>
|
|
||||||
<path style="fill: #000000; fill-opacity: 1; stroke: none" fill-rule="evenodd" d="M 248.066 398.157 C 248.429,398.264 248.711,398.412 248.845,398.492 C 248.979,398.586 249.02,398.707 248.899,398.788 C 248.778,398.868 248.563,399.029 248.442,399.137 C 248.295,399.258 248.201,399.285 247.999,399.164 C 247.637,398.962 246.871,398.412 246.683,398.157 C 246.576,398.022 246.67,397.969 246.871,397.955 C 247.14,397.942 247.677,398.049 248.066,398.157z"/>
|
|
||||||
<path style="fill: #ff0000; fill-opacity: 1; stroke: none" fill-rule="evenodd" d="M 246.16 400.99 C 246.361,401.057 246.845,401.299 246.979,401.406 C 247.126,401.5 247.341,401.728 247.328,401.997 C 247.301,402.306 247.328,402.964 247.462,403.179 C 247.637,403.46 247.61,403.581 247.355,403.541 C 247.153,403.501 246.63,403.313 246.482,403.232 C 246.334,403.165 246.119,403.031 246.052,402.829 C 245.918,402.413 245.878,401.554 245.958,401.124 C 245.985,400.95 246.066,400.95 246.16,400.99z"/>
|
|
||||||
<path style="fill: none; stroke-opacity: 1; stroke-width: 0.8; stroke: #ffffff" d="M 253.021 402.561 C 252.632,403.998 251.141,404.83 249.718,404.441 C 248.281,404.051 247.449,402.561 247.838,401.138 C 248.241,399.701 249.718,398.868 251.141,399.258 C 252.578,399.661 253.41,401.138 253.021,402.561"/>
|
|
||||||
<path style="fill: none; stroke-opacity: 1; stroke-width: 0.8; stroke: #ffffff" d="M 248.066 398.157 C 248.429,398.264 248.711,398.412 248.845,398.492 C 248.979,398.586 249.02,398.707 248.899,398.788 C 248.778,398.868 248.563,399.029 248.442,399.137 C 248.295,399.258 248.201,399.285 247.999,399.164 C 247.637,398.962 246.871,398.412 246.683,398.157 C 246.576,398.022 246.67,397.969 246.871,397.955 C 247.14,397.942 247.677,398.049 248.066,398.157"/>
|
|
||||||
<path style="fill: none; stroke-opacity: 1; stroke-width: 0.8; stroke: #ffffff" d="M 246.16 400.99 C 246.361,401.057 246.845,401.299 246.979,401.406 C 247.126,401.5 247.341,401.728 247.328,401.997 C 247.301,402.306 247.328,402.964 247.462,403.179 C 247.637,403.46 247.61,403.581 247.355,403.541 C 247.153,403.501 246.63,403.313 246.482,403.232 C 246.334,403.165 246.119,403.031 246.052,402.829 C 245.918,402.413 245.878,401.554 245.958,401.124 C 245.985,400.95 246.066,400.95 246.16,400.99"/>
|
|
||||||
<path style="fill: #000000; fill-opacity: 1; stroke: none" fill-rule="evenodd" d="M 254.35 399.889 C 253.988,399.795 253.679,399.781 253.518,399.781 C 253.357,399.795 253.263,399.875 253.316,399.996 C 253.384,400.13 253.491,400.386 253.531,400.533 C 253.598,400.708 253.666,400.788 253.894,400.802 C 254.31,400.802 255.25,400.721 255.545,400.6 C 255.693,400.533 255.639,400.439 255.478,400.332 C 255.25,400.184 254.74,399.996 254.35,399.889z"/>
|
|
||||||
<path style="fill: #00ff00; fill-opacity: 1; stroke: none" fill-rule="evenodd" d="M 254.538 403.299 C 254.337,403.246 253.786,403.219 253.612,403.232 C 253.451,403.246 253.142,403.326 253.021,403.568 C 252.887,403.85 252.524,404.4 252.296,404.521 C 252.001,404.669 251.96,404.79 252.202,404.87 C 252.39,404.951 252.941,405.058 253.102,405.072 C 253.276,405.085 253.518,405.085 253.679,404.938 C 254.028,404.656 254.485,403.93 254.646,403.528 C 254.713,403.366 254.646,403.326 254.538,403.299z"/>
|
|
||||||
<path style="fill: none; stroke-opacity: 1; stroke-width: 0.8; stroke: #ffffff" d="M 254.35 399.889 C 253.988,399.795 253.679,399.781 253.518,399.781 C 253.357,399.795 253.263,399.875 253.316,399.996 C 253.384,400.13 253.491,400.386 253.531,400.533 C 253.598,400.708 253.666,400.788 253.894,400.802 C 254.31,400.802 255.25,400.721 255.545,400.6 C 255.693,400.533 255.639,400.439 255.478,400.332 C 255.25,400.184 254.74,399.996 254.35,399.889"/>
|
|
||||||
<path style="fill: none; stroke-opacity: 1; stroke-width: 0.8; stroke: #ffffff" d="M 254.538 403.299 C 254.337,403.246 253.786,403.219 253.612,403.232 C 253.451,403.246 253.142,403.326 253.021,403.568 C 252.887,403.85 252.524,404.4 252.296,404.521 C 252.001,404.669 251.96,404.79 252.202,404.87 C 252.39,404.951 252.941,405.058 253.102,405.072 C 253.276,405.085 253.518,405.085 253.679,404.938 C 254.028,404.656 254.485,403.93 254.646,403.528 C 254.713,403.366 254.646,403.326 254.538,403.299"/>
|
|
||||||
<path style="fill: none; stroke-opacity: 1; stroke-width: 0.8; stroke: #ffffff" d="M 254.095 387.791 L 254.981,384.582"/>
|
|
||||||
<path style="fill: none; stroke-opacity: 1; stroke-width: 0.8; stroke: #ffffff" d="M 254.391 387.871 L 255.277,384.662"/>
|
|
||||||
<path style="fill: none; stroke-opacity: 1; stroke-width: 0.8; stroke: #000000" d="M 260.688 380.889 C 260.688,380.889 260.178,380.741 259.748,380.634 C 259.372,380.527 258.835,380.379 258.835,380.379"/>
|
|
||||||
<path style="fill: none; stroke-opacity: 1; stroke-width: 0.8; stroke: #000000" d="M 258.916 397.351 C 259.265,396.102 260.702,389.845 260.769,388.986 C 260.836,388.113 260.514,387.012 260.044,386.797 C 260.07,386.488 260.07,386.314 260.07,386.314 C 259.963,386.26 259.842,386.22 259.735,386.179 L 259.762,386.193 C 259.762,386.193 260.097,384.796 260.299,383.83 C 260.661,381.963 260.688,381.023 260.688,381.023 C 260.688,380.768 260.621,380.553 260.393,380.486 L 259.305,380.191 C 259.077,380.124 258.916,380.271 258.768,380.5 C 258.768,380.5 258.338,381.359 257.748,383.118 C 257.425,384.058 257.13,385.226 257.13,385.226 L 257.143,385.24 C 256.499,385.025 255.841,384.823 255.183,384.649 C 253.491,384.179 251.799,383.816 250.121,383.561 C 250.121,383.561 250.04,383.722 249.893,383.991 L 249.893,383.991 C 249.382,383.951 248.55,384.716 248.16,385.495 C 247.771,386.273 245.797,392.383 245.448,393.645 C 245.099,394.894 244.441,398.076 244.146,399.661 C 243.85,401.245 243.582,404.011 242.561,407.704 C 241.957,409.879 240.99,413.115 240.48,414.471 C 240.346,414.82 239.285,416.619 240.829,417.237 C 242.346,417.828 244.616,418.486 245.757,418.795 C 246.898,419.117 249.167,419.708 250.779,419.976 C 252.417,420.245 252.43,418.163 252.497,417.788 C 252.753,416.364 253.585,413.088 254.176,410.913 C 255.196,407.22 256.391,404.709 256.955,403.192 C 257.506,401.688 258.567,398.613 258.916,397.351"/>
|
|
||||||
<path style="fill: #000000; fill-opacity: 1; stroke-opacity: 1; stroke-width: 0.02; stroke: #ffffff" fill-rule="evenodd" d="M 247.1 406.133 C 246.925,406.764 246.267,407.14 245.623,406.965 C 244.978,406.79 244.602,406.133 244.777,405.488 C 244.965,404.844 245.623,404.468 246.267,404.642 C 246.912,404.817 247.288,405.488 247.1,406.133z"/>
|
|
||||||
<path style="fill: #000000; fill-opacity: 1; stroke-opacity: 1; stroke-width: 0.02; stroke: #ffffff" fill-rule="evenodd" d="M 250.148 407.408 C 249.973,408.053 249.302,408.429 248.657,408.254 C 248.026,408.08 247.65,407.408 247.825,406.777 C 247.999,406.133 248.657,405.757 249.302,405.931 C 249.946,406.106 250.322,406.777 250.148,407.408z"/>
|
|
||||||
<path style="fill: #000000; fill-opacity: 1; stroke-opacity: 1; stroke-width: 0.02; stroke: #ffffff" fill-rule="evenodd" d="M 253.424 407.878 C 253.249,408.509 252.578,408.885 251.933,408.711 C 251.302,408.536 250.926,407.878 251.101,407.234 C 251.276,406.589 251.933,406.213 252.578,406.388 C 253.223,406.562 253.598,407.234 253.424,407.878z"/>
|
|
||||||
<path style="fill: #000000; fill-opacity: 1; stroke-opacity: 1; stroke-width: 0.02; stroke: #ffffff" fill-rule="evenodd" d="M 246.375 408.778 C 246.2,409.422 245.529,409.798 244.898,409.61 C 244.253,409.436 243.877,408.778 244.052,408.133 C 244.226,407.489 244.898,407.113 245.529,407.287 C 246.173,407.475 246.549,408.133 246.375,408.778z"/>
|
|
||||||
<path style="fill: #000000; fill-opacity: 1; stroke-opacity: 1; stroke-width: 0.02; stroke: #ffffff" fill-rule="evenodd" d="M 249.409 410.067 C 249.235,410.711 248.577,411.087 247.932,410.899 C 247.288,410.725 246.912,410.067 247.086,409.422 C 247.274,408.778 247.932,408.402 248.577,408.576 C 249.208,408.764 249.597,409.422 249.409,410.067z"/>
|
|
||||||
<path style="fill: #000000; fill-opacity: 1; stroke-opacity: 1; stroke-width: 0.02; stroke: #ffffff" fill-rule="evenodd" d="M 252.699 410.523 C 252.511,411.154 251.853,411.544 251.208,411.356 C 250.564,411.181 250.188,410.523 250.362,409.879 C 250.55,409.234 251.208,408.858 251.853,409.033 C 252.497,409.221 252.873,409.879 252.699,410.523z"/>
|
|
||||||
<path style="fill: #000000; fill-opacity: 1; stroke-opacity: 1; stroke-width: 0.02; stroke: #ffffff" fill-rule="evenodd" d="M 245.649 411.423 C 245.475,412.067 244.804,412.443 244.159,412.269 C 243.528,412.094 243.139,411.423 243.327,410.778 C 243.501,410.147 244.159,409.758 244.804,409.946 C 245.448,410.12 245.824,410.778 245.649,411.423z"/>
|
|
||||||
<path style="fill: #000000; fill-opacity: 1; stroke-opacity: 1; stroke-width: 0.02; stroke: #ffffff" fill-rule="evenodd" d="M 248.684 412.712 C 248.509,413.356 247.838,413.732 247.207,413.558 C 246.563,413.383 246.187,412.712 246.361,412.067 C 246.536,411.423 247.207,411.06 247.838,411.235 C 248.483,411.409 248.859,412.067 248.684,412.712z"/>
|
|
||||||
<path style="fill: #000000; fill-opacity: 1; stroke-opacity: 1; stroke-width: 0.02; stroke: #ffffff" fill-rule="evenodd" d="M 251.96 413.168 C 251.786,413.813 251.114,414.189 250.483,414.001 C 249.839,413.826 249.463,413.168 249.637,412.524 C 249.812,411.879 250.483,411.503 251.114,411.691 C 251.759,411.866 252.135,412.524 251.96,413.168z"/>
|
|
||||||
<path style="fill: #000000; fill-opacity: 1; stroke-opacity: 1; stroke-width: 0.02; stroke: #ffffff" fill-rule="evenodd" d="M 244.911 414.068 C 244.736,414.713 244.065,415.089 243.434,414.914 C 242.789,414.739 242.413,414.082 242.588,413.437 C 242.763,412.793 243.434,412.417 244.065,412.591 C 244.71,412.766 245.086,413.437 244.911,414.082 L 244.911,414.068z"/>
|
|
||||||
<path style="fill: #000000; fill-opacity: 1; stroke-opacity: 1; stroke-width: 0.02; stroke: #ffffff" fill-rule="evenodd" d="M 247.959 415.357 C 247.771,416.002 247.113,416.378 246.469,416.203 C 245.824,416.029 245.448,415.357 245.636,414.726 C 245.811,414.082 246.469,413.706 247.113,413.88 C 247.758,414.055 248.134,414.726 247.959,415.357z"/>
|
|
||||||
<path style="fill: #000000; fill-opacity: 1; stroke-opacity: 1; stroke-width: 0.02; stroke: #ffffff" fill-rule="evenodd" d="M 251.235 415.814 C 251.047,416.458 250.389,416.834 249.745,416.66 C 249.1,416.485 248.724,415.814 248.912,415.169 C 249.087,414.538 249.745,414.162 250.389,414.337 C 251.034,414.511 251.41,415.169 251.235,415.814z"/>
|
|
||||||
<path style="fill: none; stroke-opacity: 1; stroke-width: 0.8; stroke: #ffffff" d="M 246.428 417.156 C 246.415,417.21 246.307,417.237 246.187,417.21 C 246.079,417.17 245.999,417.103 246.025,417.036 C 246.039,416.982 246.146,416.955 246.254,416.982 C 246.361,417.009 246.442,417.089 246.428,417.143"/>
|
|
||||||
<path style="fill: none; stroke-opacity: 1; stroke-width: 0.8; stroke: #ffffff" d="M 246.025 417.036 L 245.636,418.419"/>
|
|
||||||
<path style="fill: none; stroke-opacity: 1; stroke-width: 0.8; stroke: #ffffff" d="M 246.079 417.156 L 245.73,418.445"/>
|
|
||||||
<path style="fill: none; stroke-opacity: 1; stroke-width: 0.8; stroke: #ffffff" d="M 246.428 417.156 L 246.039,418.526"/>
|
|
||||||
<path style="fill: none; stroke-opacity: 1; stroke-width: 0.8; stroke: #ffffff" d="M 246.307 417.21 L 245.958,418.499"/>
|
|
||||||
<path style="fill: none; stroke-opacity: 1; stroke-width: 0.8; stroke: #ffffff" d="M 248.751 397.19 L 248.483,398.143"/>
|
|
||||||
<path style="fill: none; stroke-opacity: 1; stroke-width: 0.8; stroke: #ffffff" d="M 248.859 397.217 L 248.59,398.184"/>
|
|
||||||
<path style="fill: none; stroke-opacity: 1; stroke-width: 0.8; stroke: #ffffff" d="M 254.27 398.707 L 254.001,399.674"/>
|
|
||||||
<path style="fill: none; stroke-opacity: 1; stroke-width: 0.8; stroke: #ffffff" d="M 254.162 398.68 L 253.894,399.647"/>
|
|
||||||
<path style="fill: none; stroke-opacity: 1; stroke-width: 0.8; stroke: #000000" d="M 259.762 386.193 C 259.762,386.193 260.097,384.796 260.299,383.83 C 260.661,381.963 260.688,381.023 260.688,381.023 C 260.688,380.768 260.621,380.553 260.393,380.486 L 259.305,380.191 C 259.077,380.124 258.916,380.271 258.768,380.5 C 258.768,380.5 258.338,381.359 257.748,383.118 C 257.425,384.058 257.13,385.226 257.13,385.226"/>
|
|
||||||
<path style="fill: none; stroke-opacity: 1; stroke-width: 0.8; stroke: #000000" d="M 259.896 385.683 C 259.023,385.347 258.15,385.038 257.251,384.756"/>
|
|
||||||
<path style="fill: none; stroke-opacity: 1; stroke-width: 0.8; stroke: #ffffff" d="M 249.033 385.871 C 250.819,386.126 252.739,386.529 254.525,387.025 C 256.311,387.522 258.164,388.153 259.829,388.852"/>
|
|
||||||
<path style="fill: #b7b79d; fill-opacity: 1; stroke-opacity: 1; stroke-width: 0.8; stroke: #ffffff" fill-rule="evenodd" d="M 256.7 398.922 C 256.633,399.164 256.391,399.298 256.15,399.231 L 246.858,396.666 C 246.616,396.599 246.482,396.357 246.549,396.129 L 248.174,390.248 C 248.241,390.006 248.483,389.872 248.711,389.939 L 258.016,392.504 C 258.258,392.571 258.392,392.813 258.325,393.054 L 256.7,398.935 L 256.7,398.922z"/>
|
|
||||||
<path style="fill: none; stroke-opacity: 1; stroke-width: 0.8; stroke: #ffffff" d="M 254.095 387.791 L 254.981,384.582"/>
|
|
||||||
<path style="fill: none; stroke-opacity: 1; stroke-width: 0.8; stroke: #ffffff" d="M 254.391 387.871 L 255.277,384.662"/>
|
|
||||||
</g>
|
|
||||||
<line style="fill: none; stroke-opacity: 1; stroke-width: 2; stroke-dasharray: 4; stroke: #000000" x1="327.424" y1="326.359" x2="444.266" y2="375.437"/>
|
|
||||||
<line style="fill: none; stroke-opacity: 1; stroke-width: 2; stroke-dasharray: 4; stroke: #000000" x1="259.522" y1="401.737" x2="439.089" y2="384.112"/>
|
|
||||||
<g>
|
|
||||||
<path style="fill: #7a7a5a; fill-opacity: 1; stroke: none" fill-rule="evenodd" d="M 290.594 477.19 C 290.943,475.941 292.38,469.684 292.447,468.811 C 292.514,467.938 292.192,466.851 291.722,466.623 C 291.749,466.314 291.749,466.139 291.749,466.139 C 291.641,466.099 291.521,466.059 291.413,466.005 L 291.453,466.018 C 291.453,466.018 291.776,464.622 291.977,463.655 C 292.34,461.802 292.38,460.862 292.38,460.862 C 292.367,460.607 292.299,460.379 292.071,460.312 L 290.984,460.016 C 290.755,459.949 290.594,460.097 290.446,460.325 C 290.446,460.325 290.017,461.184 289.426,462.957 C 289.104,463.883 288.808,465.065 288.808,465.065 L 288.822,465.065 C 288.177,464.85 287.519,464.662 286.861,464.474 C 285.169,464.004 283.491,463.655 281.799,463.4 C 281.799,463.4 281.719,463.548 281.571,463.83 C 281.061,463.776 280.228,464.555 279.839,465.334 C 279.449,466.112 277.476,472.222 277.126,473.471 C 276.777,474.719 276.119,477.915 275.824,479.499 C 275.529,481.084 275.26,483.85 274.24,487.529 C 273.635,489.704 272.669,492.954 272.158,494.296 C 272.024,494.659 270.963,496.445 272.507,497.062 C 274.025,497.667 276.294,498.311 277.435,498.633 C 278.577,498.942 280.846,499.546 282.457,499.815 C 284.095,500.084 284.109,497.989 284.176,497.613 C 284.431,496.203 285.263,492.913 285.854,490.738 C 286.875,487.046 288.07,484.548 288.634,483.031 C 289.184,481.514 290.245,478.439 290.594,477.19z"/>
|
|
||||||
<path style="fill: none; stroke-opacity: 1; stroke-width: 0.8; stroke: #000000" d="M 290.594 477.19 C 290.943,475.941 292.38,469.684 292.447,468.811 C 292.514,467.938 292.192,466.851 291.722,466.623 C 291.749,466.314 291.749,466.139 291.749,466.139 C 291.641,466.099 291.521,466.059 291.413,466.005 L 291.453,466.018 C 291.453,466.018 291.776,464.622 291.977,463.655 C 292.34,461.802 292.38,460.862 292.38,460.862 C 292.367,460.607 292.299,460.379 292.071,460.312 L 290.984,460.016 C 290.755,459.949 290.594,460.097 290.446,460.325 C 290.446,460.325 290.017,461.184 289.426,462.957 C 289.104,463.883 288.808,465.065 288.808,465.065 L 288.822,465.065 C 288.177,464.85 287.519,464.662 286.861,464.474 C 285.169,464.004 283.491,463.655 281.799,463.4 C 281.799,463.4 281.719,463.548 281.571,463.83 L 281.571,463.83 C 281.061,463.776 280.228,464.555 279.839,465.334 C 279.449,466.112 277.476,472.222 277.126,473.471 C 276.777,474.719 276.119,477.915 275.824,479.499 C 275.529,481.084 275.26,483.85 274.24,487.529 C 273.635,489.704 272.669,492.954 272.158,494.296 C 272.024,494.659 270.963,496.445 272.507,497.062 C 274.025,497.667 276.294,498.311 277.435,498.633 C 278.577,498.942 280.846,499.546 282.457,499.815 C 284.095,500.084 284.109,497.989 284.176,497.613 C 284.431,496.203 285.263,492.913 285.854,490.738 C 286.875,487.046 288.07,484.548 288.634,483.031 C 289.184,481.514 290.245,478.439 290.594,477.19"/>
|
|
||||||
<path style="fill: #b7b79d; fill-opacity: 1; stroke: none" fill-rule="evenodd" d="M 288.916 477.351 C 289.265,476.102 290.702,469.845 290.769,468.986 C 290.836,468.113 290.514,467.012 290.044,466.797 C 290.07,466.488 290.07,466.314 290.07,466.314 C 289.963,466.26 289.842,466.22 289.735,466.179 L 289.762,466.193 C 289.762,466.193 290.097,464.796 290.299,463.83 C 290.661,461.963 290.688,461.023 290.688,461.023 C 290.688,460.768 290.621,460.553 290.393,460.486 L 289.305,460.191 C 289.077,460.124 288.916,460.271 288.768,460.5 C 288.768,460.5 288.338,461.359 287.748,463.118 C 287.425,464.058 287.13,465.226 287.13,465.226 L 287.143,465.24 C 286.499,465.025 285.841,464.823 285.183,464.649 C 283.491,464.179 281.799,463.816 280.121,463.561 C 280.121,463.561 280.04,463.722 279.893,463.991 C 279.382,463.951 278.55,464.716 278.16,465.495 C 277.771,466.273 275.797,472.383 275.448,473.645 C 275.099,474.894 274.441,478.076 274.146,479.661 C 273.85,481.245 273.582,484.011 272.561,487.704 C 271.957,489.879 270.99,493.115 270.48,494.471 C 270.346,494.82 269.285,496.619 270.829,497.237 C 272.346,497.828 274.616,498.486 275.757,498.795 C 276.898,499.117 279.167,499.708 280.779,499.976 C 282.417,500.245 282.43,498.163 282.497,497.788 C 282.753,496.364 283.585,493.088 284.176,490.913 C 285.196,487.22 286.391,484.709 286.955,483.192 C 287.506,481.688 288.567,478.613 288.916,477.351z"/>
|
|
||||||
<path style="fill: none; stroke-opacity: 1; stroke-width: 0.8; stroke: #000000" d="M 288.916 477.351 C 289.265,476.102 290.702,469.845 290.769,468.986 C 290.836,468.113 290.514,467.012 290.044,466.797 C 290.07,466.488 290.07,466.314 290.07,466.314 C 289.963,466.26 289.842,466.22 289.735,466.179 L 289.762,466.193 C 289.762,466.193 290.097,464.796 290.299,463.83 C 290.661,461.963 290.688,461.023 290.688,461.023 C 290.688,460.768 290.621,460.553 290.393,460.486 L 289.305,460.191 C 289.077,460.124 288.916,460.271 288.768,460.5 C 288.768,460.5 288.338,461.359 287.748,463.118 C 287.425,464.058 287.13,465.226 287.13,465.226 L 287.143,465.24 C 286.499,465.025 285.841,464.823 285.183,464.649 C 283.491,464.179 281.799,463.816 280.121,463.561 C 280.121,463.561 280.04,463.722 279.893,463.991 L 279.893,463.991 C 279.382,463.951 278.55,464.716 278.16,465.495 C 277.771,466.273 275.797,472.383 275.448,473.645 C 275.099,474.894 274.441,478.076 274.146,479.661 C 273.85,481.245 273.582,484.011 272.561,487.704 C 271.957,489.879 270.99,493.115 270.48,494.471 C 270.346,494.82 269.285,496.619 270.829,497.237 C 272.346,497.828 274.616,498.486 275.757,498.795 C 276.898,499.117 279.167,499.708 280.779,499.976 C 282.417,500.245 282.43,498.163 282.497,497.788 C 282.753,496.364 283.585,493.088 284.176,490.913 C 285.196,487.22 286.391,484.709 286.955,483.192 C 287.506,481.688 288.567,478.613 288.916,477.351"/>
|
|
||||||
<path style="fill: #c9c9b6; fill-opacity: 1; stroke-opacity: 1; stroke-width: 0.8; stroke: #ecece7" fill-rule="evenodd" d="M 280.336 463.601 C 280.336,463.601 278.12,468.126 276.845,472.719 C 275.341,478.184 275.126,479.996 275.354,482.534 C 275.394,483.058 275.918,483.702 276.495,483.863 C 276.724,483.917 276.992,483.998 277.1,484.024 C 277.22,484.065 277.65,484.159 277.999,484.441 C 278.362,484.723 278.442,484.79 278.657,484.897 C 278.859,485.018 278.899,485.099 279.49,485.26 C 280.08,485.421 280.148,485.381 280.389,485.381 C 280.631,485.394 280.738,485.381 281.195,485.327 C 281.638,485.26 282.054,485.394 282.175,485.421 C 282.283,485.461 282.551,485.528 282.779,485.595 C 283.357,485.757 284.136,485.475 284.444,485.045 C 285.935,482.991 286.687,481.312 288.191,475.847 C 289.453,471.255 289.869,466.233 289.869,466.233 L 280.336,463.601z"/>
|
|
||||||
<path style="fill: #000000; fill-opacity: 1; stroke: none" fill-rule="evenodd" d="M 283.021 482.561 C 282.632,483.998 281.141,484.83 279.718,484.441 C 278.281,484.051 277.449,482.561 277.838,481.138 C 278.241,479.701 279.718,478.868 281.141,479.258 C 282.578,479.661 283.41,481.138 283.021,482.561z"/>
|
|
||||||
<path style="fill: #000000; fill-opacity: 1; stroke: none" fill-rule="evenodd" d="M 278.066 478.157 C 278.429,478.264 278.711,478.412 278.845,478.492 C 278.979,478.586 279.02,478.707 278.899,478.788 C 278.778,478.868 278.563,479.029 278.442,479.137 C 278.295,479.258 278.201,479.285 277.999,479.164 C 277.637,478.962 276.871,478.412 276.683,478.157 C 276.576,478.022 276.67,477.969 276.871,477.955 C 277.14,477.942 277.677,478.049 278.066,478.157z"/>
|
|
||||||
<path style="fill: #ff0000; fill-opacity: 1; stroke: none" fill-rule="evenodd" d="M 276.16 480.99 C 276.361,481.057 276.845,481.299 276.979,481.406 C 277.126,481.5 277.341,481.728 277.328,481.997 C 277.301,482.306 277.328,482.964 277.462,483.179 C 277.637,483.46 277.61,483.581 277.355,483.541 C 277.153,483.501 276.63,483.313 276.482,483.232 C 276.334,483.165 276.119,483.031 276.052,482.829 C 275.918,482.413 275.878,481.554 275.958,481.124 C 275.985,480.95 276.066,480.95 276.16,480.99z"/>
|
|
||||||
<path style="fill: none; stroke-opacity: 1; stroke-width: 0.8; stroke: #ffffff" d="M 283.021 482.561 C 282.632,483.998 281.141,484.83 279.718,484.441 C 278.281,484.051 277.449,482.561 277.838,481.138 C 278.241,479.701 279.718,478.868 281.141,479.258 C 282.578,479.661 283.41,481.138 283.021,482.561"/>
|
|
||||||
<path style="fill: none; stroke-opacity: 1; stroke-width: 0.8; stroke: #ffffff" d="M 278.066 478.157 C 278.429,478.264 278.711,478.412 278.845,478.492 C 278.979,478.586 279.02,478.707 278.899,478.788 C 278.778,478.868 278.563,479.029 278.442,479.137 C 278.295,479.258 278.201,479.285 277.999,479.164 C 277.637,478.962 276.871,478.412 276.683,478.157 C 276.576,478.022 276.67,477.969 276.871,477.955 C 277.14,477.942 277.677,478.049 278.066,478.157"/>
|
|
||||||
<path style="fill: none; stroke-opacity: 1; stroke-width: 0.8; stroke: #ffffff" d="M 276.16 480.99 C 276.361,481.057 276.845,481.299 276.979,481.406 C 277.126,481.5 277.341,481.728 277.328,481.997 C 277.301,482.306 277.328,482.964 277.462,483.179 C 277.637,483.46 277.61,483.581 277.355,483.541 C 277.153,483.501 276.63,483.313 276.482,483.232 C 276.334,483.165 276.119,483.031 276.052,482.829 C 275.918,482.413 275.878,481.554 275.958,481.124 C 275.985,480.95 276.066,480.95 276.16,480.99"/>
|
|
||||||
<path style="fill: #000000; fill-opacity: 1; stroke: none" fill-rule="evenodd" d="M 284.35 479.889 C 283.988,479.795 283.679,479.781 283.518,479.781 C 283.357,479.795 283.263,479.875 283.316,479.996 C 283.384,480.13 283.491,480.386 283.531,480.533 C 283.598,480.708 283.666,480.788 283.894,480.802 C 284.31,480.802 285.25,480.721 285.545,480.6 C 285.693,480.533 285.639,480.439 285.478,480.332 C 285.25,480.184 284.74,479.996 284.35,479.889z"/>
|
|
||||||
<path style="fill: #00ff00; fill-opacity: 1; stroke: none" fill-rule="evenodd" d="M 284.538 483.299 C 284.337,483.246 283.786,483.219 283.612,483.232 C 283.451,483.246 283.142,483.326 283.021,483.568 C 282.887,483.85 282.524,484.4 282.296,484.521 C 282.001,484.669 281.96,484.79 282.202,484.87 C 282.39,484.951 282.941,485.058 283.102,485.072 C 283.276,485.085 283.518,485.085 283.679,484.938 C 284.028,484.656 284.485,483.93 284.646,483.528 C 284.713,483.366 284.646,483.326 284.538,483.299z"/>
|
|
||||||
<path style="fill: none; stroke-opacity: 1; stroke-width: 0.8; stroke: #ffffff" d="M 284.35 479.889 C 283.988,479.795 283.679,479.781 283.518,479.781 C 283.357,479.795 283.263,479.875 283.316,479.996 C 283.384,480.13 283.491,480.386 283.531,480.533 C 283.598,480.708 283.666,480.788 283.894,480.802 C 284.31,480.802 285.25,480.721 285.545,480.6 C 285.693,480.533 285.639,480.439 285.478,480.332 C 285.25,480.184 284.74,479.996 284.35,479.889"/>
|
|
||||||
<path style="fill: none; stroke-opacity: 1; stroke-width: 0.8; stroke: #ffffff" d="M 284.538 483.299 C 284.337,483.246 283.786,483.219 283.612,483.232 C 283.451,483.246 283.142,483.326 283.021,483.568 C 282.887,483.85 282.524,484.4 282.296,484.521 C 282.001,484.669 281.96,484.79 282.202,484.87 C 282.39,484.951 282.941,485.058 283.102,485.072 C 283.276,485.085 283.518,485.085 283.679,484.938 C 284.028,484.656 284.485,483.93 284.646,483.528 C 284.713,483.366 284.646,483.326 284.538,483.299"/>
|
|
||||||
<path style="fill: none; stroke-opacity: 1; stroke-width: 0.8; stroke: #ffffff" d="M 284.095 467.791 L 284.981,464.582"/>
|
|
||||||
<path style="fill: none; stroke-opacity: 1; stroke-width: 0.8; stroke: #ffffff" d="M 284.391 467.871 L 285.277,464.662"/>
|
|
||||||
<path style="fill: none; stroke-opacity: 1; stroke-width: 0.8; stroke: #000000" d="M 290.688 460.889 C 290.688,460.889 290.178,460.741 289.748,460.634 C 289.372,460.527 288.835,460.379 288.835,460.379"/>
|
|
||||||
<path style="fill: none; stroke-opacity: 1; stroke-width: 0.8; stroke: #000000" d="M 288.916 477.351 C 289.265,476.102 290.702,469.845 290.769,468.986 C 290.836,468.113 290.514,467.012 290.044,466.797 C 290.07,466.488 290.07,466.314 290.07,466.314 C 289.963,466.26 289.842,466.22 289.735,466.179 L 289.762,466.193 C 289.762,466.193 290.097,464.796 290.299,463.83 C 290.661,461.963 290.688,461.023 290.688,461.023 C 290.688,460.768 290.621,460.553 290.393,460.486 L 289.305,460.191 C 289.077,460.124 288.916,460.271 288.768,460.5 C 288.768,460.5 288.338,461.359 287.748,463.118 C 287.425,464.058 287.13,465.226 287.13,465.226 L 287.143,465.24 C 286.499,465.025 285.841,464.823 285.183,464.649 C 283.491,464.179 281.799,463.816 280.121,463.561 C 280.121,463.561 280.04,463.722 279.893,463.991 L 279.893,463.991 C 279.382,463.951 278.55,464.716 278.16,465.495 C 277.771,466.273 275.797,472.383 275.448,473.645 C 275.099,474.894 274.441,478.076 274.146,479.661 C 273.85,481.245 273.582,484.011 272.561,487.704 C 271.957,489.879 270.99,493.115 270.48,494.471 C 270.346,494.82 269.285,496.619 270.829,497.237 C 272.346,497.828 274.616,498.486 275.757,498.795 C 276.898,499.117 279.167,499.708 280.779,499.976 C 282.417,500.245 282.43,498.163 282.497,497.788 C 282.753,496.364 283.585,493.088 284.176,490.913 C 285.196,487.22 286.391,484.709 286.955,483.192 C 287.506,481.688 288.567,478.613 288.916,477.351"/>
|
|
||||||
<path style="fill: #000000; fill-opacity: 1; stroke-opacity: 1; stroke-width: 0.02; stroke: #ffffff" fill-rule="evenodd" d="M 277.1 486.133 C 276.925,486.764 276.267,487.14 275.623,486.965 C 274.978,486.79 274.602,486.133 274.777,485.488 C 274.965,484.844 275.623,484.468 276.267,484.642 C 276.912,484.817 277.288,485.488 277.1,486.133z"/>
|
|
||||||
<path style="fill: #000000; fill-opacity: 1; stroke-opacity: 1; stroke-width: 0.02; stroke: #ffffff" fill-rule="evenodd" d="M 280.148 487.408 C 279.973,488.053 279.302,488.429 278.657,488.254 C 278.026,488.08 277.65,487.408 277.825,486.777 C 277.999,486.133 278.657,485.757 279.302,485.931 C 279.946,486.106 280.322,486.777 280.148,487.408z"/>
|
|
||||||
<path style="fill: #000000; fill-opacity: 1; stroke-opacity: 1; stroke-width: 0.02; stroke: #ffffff" fill-rule="evenodd" d="M 283.424 487.878 C 283.249,488.509 282.578,488.885 281.933,488.711 C 281.302,488.536 280.926,487.878 281.101,487.234 C 281.276,486.589 281.933,486.213 282.578,486.388 C 283.223,486.562 283.598,487.234 283.424,487.878z"/>
|
|
||||||
<path style="fill: #000000; fill-opacity: 1; stroke-opacity: 1; stroke-width: 0.02; stroke: #ffffff" fill-rule="evenodd" d="M 276.375 488.778 C 276.2,489.422 275.529,489.798 274.898,489.61 C 274.253,489.436 273.877,488.778 274.052,488.133 C 274.226,487.489 274.898,487.113 275.529,487.287 C 276.173,487.475 276.549,488.133 276.375,488.778z"/>
|
|
||||||
<path style="fill: #000000; fill-opacity: 1; stroke-opacity: 1; stroke-width: 0.02; stroke: #ffffff" fill-rule="evenodd" d="M 279.409 490.067 C 279.235,490.711 278.577,491.087 277.932,490.899 C 277.288,490.725 276.912,490.067 277.086,489.422 C 277.274,488.778 277.932,488.402 278.577,488.576 C 279.208,488.764 279.597,489.422 279.409,490.067z"/>
|
|
||||||
<path style="fill: #000000; fill-opacity: 1; stroke-opacity: 1; stroke-width: 0.02; stroke: #ffffff" fill-rule="evenodd" d="M 282.699 490.523 C 282.511,491.154 281.853,491.544 281.208,491.356 C 280.564,491.181 280.188,490.523 280.362,489.879 C 280.55,489.234 281.208,488.858 281.853,489.033 C 282.497,489.221 282.873,489.879 282.699,490.523z"/>
|
|
||||||
<path style="fill: #000000; fill-opacity: 1; stroke-opacity: 1; stroke-width: 0.02; stroke: #ffffff" fill-rule="evenodd" d="M 275.649 491.423 C 275.475,492.067 274.804,492.443 274.159,492.269 C 273.528,492.094 273.139,491.423 273.327,490.778 C 273.501,490.147 274.159,489.758 274.804,489.946 C 275.448,490.12 275.824,490.778 275.649,491.423z"/>
|
|
||||||
<path style="fill: #000000; fill-opacity: 1; stroke-opacity: 1; stroke-width: 0.02; stroke: #ffffff" fill-rule="evenodd" d="M 278.684 492.712 C 278.509,493.356 277.838,493.732 277.207,493.558 C 276.563,493.383 276.187,492.712 276.361,492.067 C 276.536,491.423 277.207,491.06 277.838,491.235 C 278.483,491.409 278.859,492.067 278.684,492.712z"/>
|
|
||||||
<path style="fill: #000000; fill-opacity: 1; stroke-opacity: 1; stroke-width: 0.02; stroke: #ffffff" fill-rule="evenodd" d="M 281.96 493.168 C 281.786,493.813 281.114,494.189 280.483,494.001 C 279.839,493.826 279.463,493.168 279.637,492.524 C 279.812,491.879 280.483,491.503 281.114,491.691 C 281.759,491.866 282.135,492.524 281.96,493.168z"/>
|
|
||||||
<path style="fill: #000000; fill-opacity: 1; stroke-opacity: 1; stroke-width: 0.02; stroke: #ffffff" fill-rule="evenodd" d="M 274.911 494.068 C 274.736,494.713 274.065,495.089 273.434,494.914 C 272.789,494.739 272.413,494.082 272.588,493.437 C 272.763,492.793 273.434,492.417 274.065,492.591 C 274.71,492.766 275.086,493.437 274.911,494.082 L 274.911,494.068z"/>
|
|
||||||
<path style="fill: #000000; fill-opacity: 1; stroke-opacity: 1; stroke-width: 0.02; stroke: #ffffff" fill-rule="evenodd" d="M 277.959 495.357 C 277.771,496.002 277.113,496.378 276.469,496.203 C 275.824,496.029 275.448,495.357 275.636,494.726 C 275.811,494.082 276.469,493.706 277.113,493.88 C 277.758,494.055 278.134,494.726 277.959,495.357z"/>
|
|
||||||
<path style="fill: #000000; fill-opacity: 1; stroke-opacity: 1; stroke-width: 0.02; stroke: #ffffff" fill-rule="evenodd" d="M 281.235 495.814 C 281.047,496.458 280.389,496.834 279.745,496.66 C 279.1,496.485 278.724,495.814 278.912,495.169 C 279.087,494.538 279.745,494.162 280.389,494.337 C 281.034,494.511 281.41,495.169 281.235,495.814z"/>
|
|
||||||
<path style="fill: none; stroke-opacity: 1; stroke-width: 0.8; stroke: #ffffff" d="M 276.428 497.156 C 276.415,497.21 276.307,497.237 276.187,497.21 C 276.079,497.17 275.999,497.103 276.025,497.036 C 276.039,496.982 276.146,496.955 276.254,496.982 C 276.361,497.009 276.442,497.089 276.428,497.143"/>
|
|
||||||
<path style="fill: none; stroke-opacity: 1; stroke-width: 0.8; stroke: #ffffff" d="M 276.025 497.036 L 275.636,498.419"/>
|
|
||||||
<path style="fill: none; stroke-opacity: 1; stroke-width: 0.8; stroke: #ffffff" d="M 276.079 497.156 L 275.73,498.445"/>
|
|
||||||
<path style="fill: none; stroke-opacity: 1; stroke-width: 0.8; stroke: #ffffff" d="M 276.428 497.156 L 276.039,498.526"/>
|
|
||||||
<path style="fill: none; stroke-opacity: 1; stroke-width: 0.8; stroke: #ffffff" d="M 276.307 497.21 L 275.958,498.499"/>
|
|
||||||
<path style="fill: none; stroke-opacity: 1; stroke-width: 0.8; stroke: #ffffff" d="M 278.751 477.19 L 278.483,478.143"/>
|
|
||||||
<path style="fill: none; stroke-opacity: 1; stroke-width: 0.8; stroke: #ffffff" d="M 278.859 477.217 L 278.59,478.184"/>
|
|
||||||
<path style="fill: none; stroke-opacity: 1; stroke-width: 0.8; stroke: #ffffff" d="M 284.27 478.707 L 284.001,479.674"/>
|
|
||||||
<path style="fill: none; stroke-opacity: 1; stroke-width: 0.8; stroke: #ffffff" d="M 284.162 478.68 L 283.894,479.647"/>
|
|
||||||
<path style="fill: none; stroke-opacity: 1; stroke-width: 0.8; stroke: #000000" d="M 289.762 466.193 C 289.762,466.193 290.097,464.796 290.299,463.83 C 290.661,461.963 290.688,461.023 290.688,461.023 C 290.688,460.768 290.621,460.553 290.393,460.486 L 289.305,460.191 C 289.077,460.124 288.916,460.271 288.768,460.5 C 288.768,460.5 288.338,461.359 287.748,463.118 C 287.425,464.058 287.13,465.226 287.13,465.226"/>
|
|
||||||
<path style="fill: none; stroke-opacity: 1; stroke-width: 0.8; stroke: #000000" d="M 289.896 465.683 C 289.023,465.347 288.15,465.038 287.251,464.756"/>
|
|
||||||
<path style="fill: none; stroke-opacity: 1; stroke-width: 0.8; stroke: #ffffff" d="M 279.033 465.871 C 280.819,466.126 282.739,466.529 284.525,467.025 C 286.311,467.522 288.164,468.153 289.829,468.852"/>
|
|
||||||
<path style="fill: #b7b79d; fill-opacity: 1; stroke-opacity: 1; stroke-width: 0.8; stroke: #ffffff" fill-rule="evenodd" d="M 286.7 478.922 C 286.633,479.164 286.391,479.298 286.15,479.231 L 276.858,476.666 C 276.616,476.599 276.482,476.357 276.549,476.129 L 278.174,470.248 C 278.241,470.006 278.483,469.872 278.711,469.939 L 288.016,472.504 C 288.258,472.571 288.392,472.813 288.325,473.054 L 286.7,478.935 L 286.7,478.922z"/>
|
|
||||||
<path style="fill: none; stroke-opacity: 1; stroke-width: 0.8; stroke: #ffffff" d="M 284.095 467.791 L 284.981,464.582"/>
|
|
||||||
<path style="fill: none; stroke-opacity: 1; stroke-width: 0.8; stroke: #ffffff" d="M 284.391 467.871 L 285.277,464.662"/>
|
|
||||||
</g>
|
|
||||||
<line style="fill: none; stroke-opacity: 1; stroke-width: 2; stroke-dasharray: 4; stroke: #000000" x1="290.438" y1="479.005" x2="440.053" y2="393.475"/>
|
|
||||||
<g>
|
|
||||||
<path style="fill: none; stroke-opacity: 1; stroke-width: 0.8; stroke: #00aed9" d="M 714.565 323.746 L 714.565,310.35"/>
|
|
||||||
<path style="fill: none; stroke-opacity: 1; stroke-width: 4; stroke: #00aed9" d="M 714.565 323.53 L 714.565,314.341"/>
|
|
||||||
<path style="fill: #000000; fill-opacity: 1; stroke: none" fill-rule="evenodd" d="M 714.954 311.638 L 714.135,311.638 L 714.135,310 L 714.954,310 L 714.954,311.638z"/>
|
|
||||||
<path style="fill: none; stroke-opacity: 1; stroke-width: 2; stroke: #00aed9" d="M 714.954 311.638 L 714.135,311.638 L 714.135,310 L 714.954,310 L 714.954,311.638"/>
|
|
||||||
<path style="fill: none; stroke-opacity: 1; stroke-width: 0.8; stroke: #00aed9" d="M 694.709 323.746 L 694.709,310.35"/>
|
|
||||||
<path style="fill: none; stroke-opacity: 1; stroke-width: 4; stroke: #00aed9" d="M 694.709 323.53 L 694.709,314.341"/>
|
|
||||||
<path style="fill: #000000; fill-opacity: 1; stroke: none" fill-rule="evenodd" d="M 695.098 311.638 L 694.279,311.638 L 694.279,310 L 695.098,310 L 695.098,311.638z"/>
|
|
||||||
<path style="fill: none; stroke-opacity: 1; stroke-width: 2; stroke: #00aed9" d="M 695.098 311.638 L 694.279,311.638 L 694.279,310 L 695.098,310 L 695.098,311.638"/>
|
|
||||||
<path style="fill: #00aed9; fill-opacity: 1; stroke: none" fill-rule="evenodd" d="M 720.119 325.447 C 720.119,328.681 713.377,331.303 705.06,331.303 C 696.742,331.303 690,328.681 690,325.447 L 690,334.025 C 690,337.26 696.742,339.882 705.06,339.882 C 713.377,339.882 720.119,337.26 720.119,334.025 L 720.119,325.447z"/>
|
|
||||||
<path style="fill: none; stroke-opacity: 1; stroke-width: 0.8; stroke: #ffffff" d="M 720.119 325.447 C 720.119,328.681 713.377,331.303 705.06,331.303 C 696.742,331.303 690,328.681 690,325.447 L 690,334.025 C 690,337.26 696.742,339.882 705.06,339.882 C 713.377,339.882 720.119,337.26 720.119,334.025 L 720.119,325.447"/>
|
|
||||||
<path style="fill: #00aed9; fill-opacity: 1; stroke: none" fill-rule="evenodd" d="M 705.06 331.303 C 713.377,331.303 720.119,328.681 720.119,325.447 C 720.119,322.212 713.377,319.59 705.06,319.59 C 696.742,319.59 690,322.212 690,325.447 C 690,328.681 696.742,331.303 705.06,331.303z"/>
|
|
||||||
<path style="fill: none; stroke-opacity: 1; stroke-width: 0.8; stroke: #ffffff" d="M 705.06 331.303 C 713.377,331.303 720.119,328.681 720.119,325.447 C 720.119,322.212 713.377,319.59 705.06,319.59 C 696.742,319.59 690,322.212 690,325.447 C 690,328.681 696.742,331.303 705.06,331.303"/>
|
|
||||||
<path style="fill: #ffffff; fill-opacity: 1; stroke: none" fill-rule="evenodd" d="M 701.621 323.157 L 702.864,325.022 L 698.163,326.108 L 699.19,325.254 L 691.923,324.012 L 693.746,322.645 L 700.758,323.832 L 701.621,323.157z"/>
|
|
||||||
<path style="fill: #ffffff; fill-opacity: 1; stroke: none" fill-rule="evenodd" d="M 708.237 327.68 L 707.388,325.757 L 711.629,324.91 L 710.894,325.568 L 717.962,326.776 L 716.268,328.133 L 709.24,326.813 L 708.237,327.68z"/>
|
|
||||||
<path style="fill: #ffffff; fill-opacity: 1; stroke: none" fill-rule="evenodd" d="M 705.918 322.138 L 710.668,320.838 L 710.724,322.874 L 709.538,322.647 L 707.218,324.57 L 705.006,324.247 L 707.399,322.367 L 705.918,322.138z"/>
|
|
||||||
<path style="fill: #ffffff; fill-opacity: 1; stroke: none" fill-rule="evenodd" d="M 703.882 329.434 L 699.359,330.281 L 699.19,328.19 L 700.489,328.472 L 702.979,326.345 L 705.183,326.719 L 702.525,329.037 L 703.882,329.434z"/>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<path style="fill: none; stroke-opacity: 1; stroke-width: 0.8; stroke: #00aed9" d="M 774.565 453.746 L 774.565,440.35"/>
|
|
||||||
<path style="fill: none; stroke-opacity: 1; stroke-width: 4; stroke: #00aed9" d="M 774.565 453.53 L 774.565,444.341"/>
|
|
||||||
<path style="fill: #000000; fill-opacity: 1; stroke: none" fill-rule="evenodd" d="M 774.954 441.638 L 774.135,441.638 L 774.135,440 L 774.954,440 L 774.954,441.638z"/>
|
|
||||||
<path style="fill: none; stroke-opacity: 1; stroke-width: 2; stroke: #00aed9" d="M 774.954 441.638 L 774.135,441.638 L 774.135,440 L 774.954,440 L 774.954,441.638"/>
|
|
||||||
<path style="fill: none; stroke-opacity: 1; stroke-width: 0.8; stroke: #00aed9" d="M 754.709 453.746 L 754.709,440.35"/>
|
|
||||||
<path style="fill: none; stroke-opacity: 1; stroke-width: 4; stroke: #00aed9" d="M 754.709 453.53 L 754.709,444.341"/>
|
|
||||||
<path style="fill: #000000; fill-opacity: 1; stroke: none" fill-rule="evenodd" d="M 755.098 441.638 L 754.279,441.638 L 754.279,440 L 755.098,440 L 755.098,441.638z"/>
|
|
||||||
<path style="fill: none; stroke-opacity: 1; stroke-width: 2; stroke: #00aed9" d="M 755.098 441.638 L 754.279,441.638 L 754.279,440 L 755.098,440 L 755.098,441.638"/>
|
|
||||||
<path style="fill: #00aed9; fill-opacity: 1; stroke: none" fill-rule="evenodd" d="M 780.119 455.447 C 780.119,458.681 773.377,461.303 765.06,461.303 C 756.742,461.303 750,458.681 750,455.447 L 750,464.025 C 750,467.26 756.742,469.882 765.06,469.882 C 773.377,469.882 780.119,467.26 780.119,464.025 L 780.119,455.447z"/>
|
|
||||||
<path style="fill: none; stroke-opacity: 1; stroke-width: 0.8; stroke: #ffffff" d="M 780.119 455.447 C 780.119,458.681 773.377,461.303 765.06,461.303 C 756.742,461.303 750,458.681 750,455.447 L 750,464.025 C 750,467.26 756.742,469.882 765.06,469.882 C 773.377,469.882 780.119,467.26 780.119,464.025 L 780.119,455.447"/>
|
|
||||||
<path style="fill: #00aed9; fill-opacity: 1; stroke: none" fill-rule="evenodd" d="M 765.06 461.303 C 773.377,461.303 780.119,458.681 780.119,455.447 C 780.119,452.212 773.377,449.59 765.06,449.59 C 756.742,449.59 750,452.212 750,455.447 C 750,458.681 756.742,461.303 765.06,461.303z"/>
|
|
||||||
<path style="fill: none; stroke-opacity: 1; stroke-width: 0.8; stroke: #ffffff" d="M 765.06 461.303 C 773.377,461.303 780.119,458.681 780.119,455.447 C 780.119,452.212 773.377,449.59 765.06,449.59 C 756.742,449.59 750,452.212 750,455.447 C 750,458.681 756.742,461.303 765.06,461.303"/>
|
|
||||||
<path style="fill: #ffffff; fill-opacity: 1; stroke: none" fill-rule="evenodd" d="M 761.621 453.157 L 762.864,455.022 L 758.163,456.108 L 759.19,455.254 L 751.923,454.012 L 753.746,452.645 L 760.758,453.832 L 761.621,453.157z"/>
|
|
||||||
<path style="fill: #ffffff; fill-opacity: 1; stroke: none" fill-rule="evenodd" d="M 768.237 457.68 L 767.388,455.757 L 771.629,454.91 L 770.894,455.568 L 777.962,456.776 L 776.268,458.133 L 769.24,456.813 L 768.237,457.68z"/>
|
|
||||||
<path style="fill: #ffffff; fill-opacity: 1; stroke: none" fill-rule="evenodd" d="M 765.918 452.138 L 770.668,450.838 L 770.724,452.874 L 769.538,452.647 L 767.218,454.57 L 765.006,454.247 L 767.399,452.367 L 765.918,452.138z"/>
|
|
||||||
<path style="fill: #ffffff; fill-opacity: 1; stroke: none" fill-rule="evenodd" d="M 763.882 459.434 L 759.359,460.281 L 759.19,458.19 L 760.489,458.472 L 762.979,456.345 L 765.183,456.719 L 762.525,459.037 L 763.882,459.434z"/>
|
|
||||||
</g>
|
|
||||||
<text font-size="21.4489" style="fill: #000000; fill-opacity: 1; stroke: none;text-anchor:start;font-family:sans-serif;font-style:italic;font-weight:normal" x="270" y="430">
|
|
||||||
<tspan x="270" y="430">Clients</tspan>
|
|
||||||
</text>
|
|
||||||
</g>
|
|
||||||
<g id="to-clients">
|
|
||||||
<g>
|
|
||||||
<line style="fill: none; stroke-opacity: 1; stroke-width: 4; stroke: #800080" x1="440" y1="380" x2="352" y2="380"/>
|
|
||||||
<polygon style="fill: #800080; fill-opacity: 1; stroke-opacity: 1; stroke-width: 4; stroke: #800080" fill-rule="evenodd" points="352,375 342,380 352,385 "/>
|
|
||||||
</g>
|
|
||||||
<rect style="fill: none; stroke-opacity: 1; stroke-width: 2; stroke-dasharray: 20; stroke: #000000" x="220" y="290" width="270" height="220" rx="0" ry="0"/>
|
|
||||||
</g>
|
|
||||||
</svg>
|
|
Before Width: | Height: | Size: 99 KiB |
@ -1,232 +0,0 @@
|
|||||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
|
||||||
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.0//EN" "http://www.w3.org/TR/2001/PR-SVG-20010719/DTD/svg10.dtd">
|
|
||||||
<svg width="29cm" height="12cm" viewBox="239 289 572 223" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
|
|
||||||
<g id="Background">
|
|
||||||
<g>
|
|
||||||
<path style="fill: #b6c7c9; fill-opacity: 1; stroke: none" fill-rule="evenodd" d="M 713.614 347.58 L 713.54,345.719 L 713.283,343.858 L 712.804,342.03 L 712.142,340.201 L 711.258,338.34 L 710.264,336.545 L 709.013,334.781 L 707.614,333.051 L 706.104,331.321 L 704.337,329.688 L 702.46,328.056 L 700.398,326.521 L 698.153,324.986 L 695.797,323.55 L 693.294,322.146 L 690.606,320.84 L 687.845,319.566 L 684.974,318.391 L 681.955,317.281 L 678.826,316.269 L 675.587,315.289 L 672.237,314.473 L 668.887,313.657 L 665.39,312.971 L 661.819,312.351 L 658.248,311.828 L 654.604,311.404 L 650.922,311.11 L 647.204,310.849 L 643.45,310.718 L 639.695,310.653 L 639.695,310.653 L 635.977,310.718 L 632.185,310.849 L 628.504,311.11 L 624.822,311.404 L 621.141,311.828 L 617.57,312.351 L 614,312.971 L 610.539,313.657 L 607.116,314.473 L 603.839,315.289 L 600.6,316.269 L 597.508,317.281 L 594.452,318.391 L 591.581,319.566 L 588.783,320.84 L 586.096,322.146 L 583.592,323.55 L 581.236,324.986 L 578.991,326.521 L 576.929,328.056 L 575.052,329.688 L 573.322,331.321 L 571.739,333.051 L 570.414,334.781 L 569.162,336.545 L 568.131,338.34 L 567.248,340.201 L 566.659,342.03 L 566.18,343.858 L 565.849,345.719 L 565.812,347.58 L 565.812,347.58 L 565.849,349.474 L 566.18,351.335 L 566.659,353.196 L 567.248,355.024 L 568.131,356.853 L 569.162,358.649 L 570.414,360.412 L 571.739,362.175 L 573.322,363.873 L 575.052,365.505 L 576.929,367.138 L 578.991,368.705 L 581.236,370.207 L 583.592,371.643 L 586.096,373.047 L 588.783,374.386 L 591.581,375.594 L 594.452,376.835 L 597.508,377.945 L 600.6,378.957 L 603.839,379.871 L 607.116,380.753 L 610.539,381.536 L 614,382.222 L 617.57,382.842 L 621.141,383.365 L 624.822,383.757 L 628.504,384.083 L 632.185,384.377 L 635.977,384.475 L 639.695,384.508 L 639.695,384.508 L 643.45,384.475 L 647.204,384.377 L 650.922,384.083 L 654.604,383.757 L 658.248,383.365 L 661.819,382.842 L 665.39,382.222 L 668.887,381.536 L 672.237,380.753 L 675.587,379.871 L 678.826,378.957 L 681.955,377.945 L 684.974,376.835 L 687.845,375.594 L 690.606,374.386 L 693.294,373.047 L 695.797,371.643 L 698.153,370.207 L 700.398,368.705 L 702.46,367.138 L 704.337,365.505 L 706.104,363.873 L 707.614,362.175 L 709.013,360.412 L 710.264,358.649 L 711.258,356.853 L 712.142,355.024 L 712.804,353.196 L 713.283,351.335 L 713.54,349.474 L 713.614,347.58z"/>
|
|
||||||
<path style="fill: #b6c7c9; fill-opacity: 1; stroke: none" fill-rule="evenodd" d="M 597.765 366.974 L 597.692,365.113 L 597.434,363.252 L 597.139,361.424 L 596.624,359.563 L 595.961,357.734 L 595.152,355.939 L 594.194,354.176 L 593.164,352.445 L 591.986,350.715 L 590.66,349.082 L 589.225,347.45 L 587.642,345.915 L 585.875,344.381 L 584.071,342.944 L 582.157,341.54 L 580.095,340.234 L 578.034,338.961 L 575.751,337.785 L 573.469,336.675 L 571.039,335.696 L 568.61,334.683 L 566.07,333.802 L 563.419,333.051 L 560.769,332.365 L 558.045,331.745 L 555.284,331.223 L 552.486,330.798 L 549.651,330.504 L 546.854,330.243 L 543.982,330.08 L 541.111,330.047 L 541.111,330.047 L 538.239,330.08 L 535.368,330.243 L 532.497,330.504 L 529.699,330.798 L 526.864,331.223 L 524.104,331.745 L 521.416,332.365 L 518.766,333.051 L 516.152,333.802 L 513.612,334.683 L 511.109,335.696 L 508.753,336.675 L 506.397,337.785 L 504.188,338.961 L 502.09,340.234 L 500.028,341.54 L 498.114,342.944 L 496.273,344.381 L 494.543,345.915 L 492.997,347.45 L 491.524,349.082 L 490.236,350.715 L 489.021,352.445 L 487.954,354.176 L 487.033,355.939 L 486.223,357.734 L 485.561,359.563 L 485.082,361.424 L 484.714,363.252 L 484.493,365.113 L 484.42,366.974 L 484.42,366.974 L 484.493,368.868 L 484.714,370.729 L 485.082,372.59 L 485.561,374.419 L 486.223,376.247 L 487.033,378.043 L 487.954,379.806 L 489.021,381.536 L 490.236,383.267 L 491.524,384.899 L 492.997,386.532 L 494.543,388.066 L 496.273,389.601 L 498.114,391.038 L 500.028,392.442 L 502.09,393.748 L 504.188,394.988 L 506.397,396.164 L 508.753,397.339 L 511.109,398.351 L 513.612,399.265 L 516.152,400.18 L 518.766,400.931 L 521.416,401.616 L 524.104,402.237 L 526.864,402.726 L 529.699,403.151 L 532.497,403.477 L 535.368,403.771 L 538.239,403.869 L 541.111,403.902 L 541.111,403.902 L 543.982,403.869 L 546.854,403.771 L 549.651,403.477 L 552.486,403.151 L 555.284,402.726 L 558.045,402.237 L 560.769,401.616 L 563.419,400.931 L 566.07,400.18 L 568.61,399.265 L 571.039,398.351 L 573.469,397.339 L 575.751,396.164 L 578.034,394.988 L 580.095,393.748 L 582.157,392.442 L 584.071,391.038 L 585.875,389.601 L 587.642,388.066 L 589.225,386.532 L 590.66,384.899 L 591.986,383.267 L 593.164,381.536 L 594.194,379.806 L 595.152,378.043 L 595.961,376.247 L 596.624,374.419 L 597.139,372.59 L 597.434,370.729 L 597.692,368.868 L 597.765,366.974z"/>
|
|
||||||
<path style="fill: #b6c7c9; fill-opacity: 1; stroke: none" fill-rule="evenodd" d="M 526.312 404.685 L 526.275,403.151 L 526.165,401.616 L 525.907,400.082 L 525.576,398.58 L 525.097,397.143 L 524.545,395.641 L 523.956,394.172 L 523.257,392.768 L 522.447,391.364 L 521.527,390.025 L 520.533,388.752 L 519.465,387.446 L 518.324,386.205 L 517.109,384.997 L 515.784,383.887 L 514.422,382.842 L 513.023,381.765 L 511.55,380.818 L 509.968,379.904 L 508.348,379.055 L 506.691,378.304 L 504.961,377.586 L 503.231,376.965 L 501.427,376.41 L 499.586,375.888 L 497.746,375.496 L 495.868,375.104 L 493.917,374.876 L 492.003,374.68 L 490.126,374.582 L 488.175,374.517 L 488.175,374.517 L 486.223,374.582 L 484.272,374.68 L 482.358,374.876 L 480.481,375.104 L 478.566,375.496 L 476.689,375.888 L 474.885,376.41 L 473.118,376.965 L 471.314,377.586 L 469.584,378.304 L 467.928,379.055 L 466.308,379.904 L 464.762,380.818 L 463.252,381.765 L 461.854,382.842 L 460.492,383.887 L 459.203,384.997 L 457.951,386.205 L 456.81,387.446 L 455.743,388.752 L 454.749,390.025 L 453.902,391.364 L 453.092,392.768 L 452.393,394.172 L 451.73,395.641 L 451.178,397.143 L 450.773,398.58 L 450.442,400.082 L 450.147,401.616 L 450,403.151 L 450,404.685 L 450,404.685 L 450,406.155 L 450.147,407.689 L 450.442,409.191 L 450.773,410.693 L 451.178,412.227 L 451.73,413.664 L 452.393,415.101 L 453.092,416.537 L 453.902,417.941 L 454.749,419.28 L 455.743,420.586 L 456.81,421.859 L 457.951,423.1 L 459.203,424.275 L 460.492,425.385 L 461.854,426.463 L 463.252,427.54 L 464.762,428.455 L 466.308,429.369 L 467.928,430.218 L 469.584,431.001 L 471.314,431.72 L 473.118,432.34 L 474.885,432.895 L 476.689,433.385 L 478.566,433.809 L 480.481,434.168 L 482.358,434.462 L 484.272,434.625 L 486.223,434.723 L 488.175,434.789 L 488.175,434.789 L 490.126,434.723 L 492.003,434.625 L 493.917,434.462 L 495.868,434.168 L 497.746,433.809 L 499.586,433.385 L 501.427,432.895 L 503.231,432.34 L 504.961,431.72 L 506.691,431.001 L 508.348,430.218 L 509.968,429.369 L 511.55,428.455 L 513.023,427.54 L 514.422,426.463 L 515.784,425.385 L 517.109,424.275 L 518.324,423.1 L 519.465,421.859 L 520.533,420.586 L 521.527,419.28 L 522.447,417.941 L 523.257,416.537 L 523.956,415.101 L 524.545,413.664 L 525.097,412.227 L 525.576,410.693 L 525.907,409.191 L 526.165,407.689 L 526.275,406.155 L 526.312,404.685z"/>
|
|
||||||
<path style="fill: #b6c7c9; fill-opacity: 1; stroke: none" fill-rule="evenodd" d="M 587.936 433.711 L 587.9,432.046 L 587.642,430.414 L 587.237,428.748 L 586.758,427.116 L 586.096,425.516 L 585.323,423.916 L 584.329,422.349 L 583.298,420.814 L 582.046,419.378 L 580.721,417.876 L 579.212,416.439 L 577.629,415.101 L 575.935,413.762 L 574.095,412.423 L 572.144,411.215 L 570.082,410.04 L 567.91,408.962 L 565.628,407.885 L 563.309,406.938 L 560.879,405.991 L 558.339,405.175 L 555.762,404.391 L 553.112,403.706 L 550.424,403.085 L 547.663,402.563 L 544.829,402.139 L 542.031,401.747 L 539.16,401.42 L 536.288,401.224 L 533.38,401.094 L 530.435,401.061 L 530.435,401.061 L 527.527,401.094 L 524.656,401.224 L 521.711,401.42 L 518.876,401.747 L 516.005,402.139 L 513.244,402.563 L 510.483,403.085 L 507.759,403.706 L 505.108,404.391 L 502.568,405.175 L 500.028,405.991 L 497.599,406.938 L 495.243,407.885 L 492.997,408.962 L 490.825,410.04 L 488.764,411.215 L 486.812,412.423 L 484.972,413.762 L 483.242,415.101 L 481.659,416.439 L 480.149,417.876 L 478.787,419.378 L 477.609,420.814 L 476.542,422.349 L 475.548,423.916 L 474.738,425.516 L 474.149,427.116 L 473.597,428.748 L 473.229,430.414 L 473.008,432.046 L 472.934,433.711 L 472.934,433.711 L 473.008,435.344 L 473.229,437.009 L 473.597,438.641 L 474.149,440.274 L 474.738,441.874 L 475.548,443.474 L 476.542,445.073 L 477.609,446.608 L 478.787,448.077 L 480.149,449.514 L 481.659,450.95 L 483.242,452.322 L 484.972,453.693 L 486.812,454.999 L 488.764,456.207 L 490.825,457.35 L 492.997,458.46 L 495.243,459.505 L 497.599,460.484 L 500.028,461.431 L 502.568,462.247 L 505.108,463.031 L 507.759,463.684 L 510.483,464.304 L 513.244,464.827 L 516.005,465.284 L 518.876,465.708 L 521.711,466.002 L 524.656,466.198 L 527.527,466.329 L 530.435,466.329 L 530.435,466.329 L 533.38,466.329 L 536.288,466.198 L 539.16,466.002 L 542.031,465.708 L 544.829,465.284 L 547.663,464.827 L 550.424,464.304 L 553.112,463.684 L 555.762,463.031 L 558.339,462.247 L 560.879,461.431 L 563.309,460.484 L 565.628,459.505 L 567.91,458.46 L 570.082,457.35 L 572.144,456.207 L 574.095,454.999 L 575.935,453.693 L 577.629,452.322 L 579.212,450.95 L 580.721,449.514 L 582.046,448.077 L 583.298,446.608 L 584.329,445.073 L 585.323,443.474 L 586.096,441.874 L 586.758,440.274 L 587.237,438.641 L 587.642,437.009 L 587.9,435.344 L 587.936,433.711z"/>
|
|
||||||
<path style="fill: #b6c7c9; fill-opacity: 1; stroke: none" fill-rule="evenodd" d="M 725.946 450.591 L 725.799,448.6 L 725.505,446.608 L 724.916,444.682 L 724.142,442.755 L 723.185,440.829 L 722.007,438.968 L 720.608,437.139 L 718.989,435.278 L 717.148,433.483 L 715.16,431.752 L 712.915,430.087 L 710.559,428.455 L 707.982,426.855 L 705.258,425.32 L 702.276,423.851 L 699.257,422.48 L 696.018,421.141 L 692.631,419.9 L 689.171,418.757 L 685.489,417.68 L 681.771,416.668 L 677.906,415.786 L 673.967,414.937 L 669.881,414.219 L 665.795,413.566 L 661.598,413.044 L 657.401,412.587 L 653.058,412.26 L 648.824,412.032 L 644.443,411.836 L 640.1,411.836 L 640.1,411.836 L 635.756,411.836 L 631.412,412.032 L 627.105,412.26 L 622.835,412.587 L 618.564,413.044 L 614.405,413.566 L 610.282,414.219 L 606.269,414.937 L 602.256,415.786 L 598.465,416.668 L 594.673,417.68 L 591.065,418.757 L 587.568,419.9 L 584.218,421.141 L 580.979,422.48 L 577.887,423.851 L 574.978,425.32 L 572.254,426.855 L 569.641,428.455 L 567.248,430.087 L 565.039,431.752 L 563.088,433.483 L 561.247,435.278 L 559.628,437.139 L 558.229,438.968 L 557.014,440.829 L 556.057,442.755 L 555.247,444.682 L 554.695,446.608 L 554.363,448.6 L 554.253,450.591 L 554.253,450.591 L 554.363,452.485 L 554.695,454.477 L 555.247,456.403 L 556.057,458.362 L 557.014,460.288 L 558.229,462.149 L 559.628,463.978 L 561.247,465.839 L 563.088,467.635 L 565.039,469.365 L 567.248,471.03 L 569.641,472.728 L 572.254,474.263 L 574.978,475.797 L 577.887,477.234 L 580.979,478.67 L 584.218,479.976 L 587.568,481.217 L 591.065,482.36 L 594.673,483.47 L 598.465,484.417 L 602.256,485.331 L 606.269,486.147 L 610.282,486.866 L 614.405,487.551 L 618.564,488.041 L 622.835,488.498 L 627.105,488.857 L 631.412,489.086 L 635.756,489.282 L 640.1,489.282 L 640.1,489.282 L 644.443,489.282 L 648.824,489.086 L 653.058,488.857 L 657.401,488.498 L 661.598,488.041 L 665.795,487.551 L 669.881,486.866 L 673.967,486.147 L 677.906,485.331 L 681.771,484.417 L 685.489,483.47 L 689.171,482.36 L 692.631,481.217 L 696.018,479.976 L 699.257,478.67 L 702.276,477.234 L 705.258,475.797 L 707.982,474.263 L 710.559,472.728 L 712.915,471.03 L 715.16,469.365 L 717.148,467.635 L 718.989,465.839 L 720.608,463.978 L 722.007,462.149 L 723.185,460.288 L 724.142,458.362 L 724.916,456.403 L 725.505,454.477 L 725.799,452.485 L 725.946,450.591z"/>
|
|
||||||
<path style="fill: #b6c7c9; fill-opacity: 1; stroke: none" fill-rule="evenodd" d="M 773.582 361.228 L 773.545,359.791 L 773.324,358.289 L 772.919,356.82 L 772.477,355.384 L 771.815,353.98 L 771.078,352.543 L 770.158,351.139 L 769.091,349.768 L 767.949,348.462 L 766.698,347.123 L 765.262,345.85 L 763.716,344.609 L 762.096,343.466 L 760.292,342.291 L 758.452,341.213 L 756.427,340.201 L 754.366,339.157 L 752.23,338.242 L 749.948,337.393 L 747.629,336.577 L 745.273,335.826 L 742.77,335.141 L 740.23,334.52 L 737.653,333.965 L 735.002,333.475 L 732.352,333.149 L 729.628,332.757 L 726.903,332.496 L 724.106,332.333 L 721.345,332.235 L 718.547,332.169 L 718.547,332.169 L 715.712,332.235 L 712.951,332.333 L 710.154,332.496 L 707.43,332.757 L 704.742,333.149 L 702.055,333.475 L 699.441,333.965 L 696.828,334.52 L 694.288,335.141 L 691.784,335.826 L 689.392,336.577 L 687.109,337.393 L 684.827,338.242 L 682.692,339.157 L 680.63,340.201 L 678.642,341.213 L 676.765,342.291 L 674.961,343.466 L 673.341,344.609 L 671.832,345.85 L 670.359,347.123 L 669.108,348.462 L 667.967,349.768 L 666.899,351.139 L 665.979,352.543 L 665.243,353.98 L 664.617,355.384 L 664.101,356.82 L 663.77,358.289 L 663.586,359.791 L 663.476,361.228 L 663.476,361.228 L 663.586,362.697 L 663.77,364.167 L 664.101,365.603 L 664.617,367.072 L 665.243,368.509 L 665.979,369.913 L 666.899,371.317 L 667.967,372.688 L 669.108,374.059 L 670.359,375.333 L 671.832,376.574 L 673.341,377.847 L 674.961,379.022 L 676.765,380.132 L 678.642,381.243 L 680.63,382.287 L 682.692,383.267 L 684.827,384.181 L 687.109,385.095 L 689.392,385.911 L 691.784,386.63 L 694.288,387.348 L 696.828,387.936 L 699.441,388.458 L 702.055,388.981 L 704.742,389.372 L 707.43,389.699 L 710.154,389.993 L 712.951,390.123 L 715.712,390.287 L 718.547,390.287 L 718.547,390.287 L 721.345,390.287 L 724.106,390.123 L 726.903,389.993 L 729.628,389.699 L 732.352,389.372 L 735.002,388.981 L 737.653,388.458 L 740.23,387.936 L 742.77,387.348 L 745.273,386.63 L 747.629,385.911 L 749.948,385.095 L 752.23,384.181 L 754.366,383.267 L 756.427,382.287 L 758.452,381.243 L 760.292,380.132 L 762.096,379.022 L 763.716,377.847 L 765.262,376.574 L 766.698,375.333 L 767.949,374.059 L 769.091,372.688 L 770.158,371.317 L 771.078,369.913 L 771.815,368.509 L 772.477,367.072 L 772.919,365.603 L 773.324,364.167 L 773.545,362.697 L 773.582,361.228z"/>
|
|
||||||
<path style="fill: #b6c7c9; fill-opacity: 1; stroke: none" fill-rule="evenodd" d="M 789.19 398.547 L 789.08,397.078 L 788.932,395.609 L 788.564,394.172 L 788.086,392.735 L 787.423,391.266 L 786.687,389.895 L 785.803,388.458 L 784.736,387.12 L 783.595,385.748 L 782.343,384.475 L 780.907,383.169 L 779.361,381.961 L 777.778,380.818 L 775.974,379.61 L 774.134,378.565 L 772.22,377.488 L 770.158,376.508 L 767.949,375.594 L 765.777,374.712 L 763.458,373.896 L 761.102,373.145 L 758.636,372.46 L 756.133,371.872 L 753.556,371.317 L 750.905,370.827 L 748.255,370.435 L 745.567,370.109 L 742.806,369.815 L 740.082,369.684 L 737.321,369.586 L 734.56,369.521 L 734.56,369.521 L 731.763,369.586 L 729.039,369.684 L 726.278,369.815 L 723.59,370.109 L 720.903,370.435 L 718.216,370.827 L 715.602,371.317 L 713.062,371.872 L 710.522,372.46 L 708.055,373.145 L 705.699,373.896 L 703.38,374.712 L 701.135,375.594 L 699.036,376.508 L 696.975,377.488 L 694.95,378.565 L 693.11,379.61 L 691.379,380.818 L 689.796,381.961 L 688.25,383.169 L 686.851,384.475 L 685.526,385.748 L 684.385,387.12 L 683.391,388.458 L 682.471,389.895 L 681.661,391.266 L 681.072,392.735 L 680.593,394.172 L 680.225,395.609 L 680.004,397.078 L 679.968,398.547 L 679.968,398.547 L 680.004,400.016 L 680.225,401.518 L 680.593,402.955 L 681.072,404.391 L 681.661,405.828 L 682.471,407.232 L 683.391,408.669 L 684.385,410.007 L 685.526,411.313 L 686.851,412.652 L 688.25,413.893 L 689.796,415.133 L 691.379,416.309 L 693.11,417.451 L 694.95,418.562 L 696.975,419.574 L 699.036,420.586 L 701.135,421.5 L 703.38,422.349 L 705.699,423.165 L 708.055,423.916 L 710.522,424.602 L 713.062,425.222 L 715.602,425.81 L 718.216,426.3 L 720.903,426.626 L 723.59,427.018 L 726.278,427.247 L 729.039,427.442 L 731.763,427.54 L 734.56,427.573 L 734.56,427.573 L 737.321,427.54 L 740.082,427.442 L 742.806,427.247 L 745.567,427.018 L 748.255,426.626 L 750.905,426.3 L 753.556,425.81 L 756.133,425.222 L 758.636,424.602 L 761.102,423.916 L 763.458,423.165 L 765.777,422.349 L 767.949,421.5 L 770.158,420.586 L 772.22,419.574 L 774.134,418.562 L 775.974,417.451 L 777.778,416.309 L 779.361,415.133 L 780.907,413.893 L 782.343,412.652 L 783.595,411.313 L 784.736,410.007 L 785.803,408.669 L 786.687,407.232 L 787.423,405.828 L 788.086,404.391 L 788.564,402.955 L 788.932,401.518 L 789.08,400.016 L 789.19,398.547z"/>
|
|
||||||
<path style="fill: #b6c7c9; fill-opacity: 1; stroke: none" fill-rule="evenodd" d="M 778.515 429.401 L 778.441,427.018 L 778.22,424.569 L 777.926,422.218 L 777.447,419.802 L 776.821,417.451 L 776.048,415.133 L 775.165,412.848 L 774.097,410.595 L 772.956,408.407 L 771.741,406.252 L 770.342,404.163 L 768.796,402.171 L 767.176,400.212 L 765.409,398.351 L 763.569,396.555 L 761.654,394.825 L 759.593,393.192 L 757.495,391.723 L 755.249,390.287 L 752.967,388.981 L 750.611,387.74 L 748.218,386.63 L 745.715,385.585 L 743.175,384.671 L 740.524,383.887 L 737.91,383.267 L 735.186,382.679 L 732.499,382.255 L 729.812,381.961 L 727.087,381.765 L 724.327,381.732 L 724.327,381.732 L 721.566,381.765 L 718.841,381.961 L 716.081,382.255 L 713.393,382.679 L 710.743,383.267 L 708.055,383.887 L 705.479,384.671 L 702.939,385.585 L 700.435,386.63 L 697.969,387.74 L 695.613,388.981 L 693.33,390.287 L 691.159,391.723 L 688.987,393.192 L 686.962,394.825 L 685.011,396.555 L 683.17,398.351 L 681.44,400.212 L 679.783,402.171 L 678.311,404.163 L 676.912,406.252 L 675.624,408.407 L 674.482,410.595 L 673.489,412.848 L 672.605,415.133 L 671.832,417.451 L 671.206,419.802 L 670.728,422.218 L 670.359,424.569 L 670.139,427.018 L 670.065,429.401 L 670.065,429.401 L 670.139,431.818 L 670.359,434.266 L 670.728,436.617 L 671.206,439.001 L 671.832,441.417 L 672.605,443.702 L 673.489,445.955 L 674.482,448.241 L 675.624,450.395 L 676.912,452.55 L 678.311,454.673 L 679.783,456.664 L 681.44,458.591 L 683.17,460.484 L 685.011,462.28 L 686.962,463.978 L 688.987,465.61 L 691.159,467.145 L 693.33,468.549 L 695.613,469.888 L 697.969,471.096 L 700.435,472.238 L 702.939,473.25 L 705.479,474.165 L 708.055,474.916 L 710.743,475.601 L 713.393,476.124 L 716.081,476.548 L 718.841,476.842 L 721.566,477.038 L 724.327,477.136 L 724.327,477.136 L 727.087,477.038 L 729.812,476.842 L 732.499,476.548 L 735.186,476.124 L 737.91,475.601 L 740.524,474.916 L 743.175,474.165 L 745.715,473.25 L 748.218,472.238 L 750.611,471.096 L 752.967,469.888 L 755.249,468.549 L 757.495,467.145 L 759.593,465.61 L 761.654,463.978 L 763.569,462.28 L 765.409,460.484 L 767.176,458.591 L 768.796,456.664 L 770.342,454.673 L 771.741,452.55 L 772.956,450.395 L 774.097,448.241 L 775.165,445.955 L 776.048,443.702 L 776.821,441.417 L 777.447,439.001 L 777.926,436.617 L 778.22,434.266 L 778.441,431.818 L 778.515,429.401z"/>
|
|
||||||
<path style="fill: #b6c7c9; fill-opacity: 1; stroke: none" fill-rule="evenodd" d="M 731.689 400.702 L 731.542,398.253 L 731.1,395.902 L 730.401,393.454 L 729.443,391.103 L 728.192,388.752 L 726.646,386.401 L 724.842,384.116 L 722.744,381.863 L 720.461,379.675 L 717.884,377.553 L 715.013,375.431 L 711.958,373.406 L 708.644,371.513 L 705.11,369.619 L 701.356,367.791 L 697.453,366.093 L 693.294,364.493 L 688.95,362.958 L 684.495,361.522 L 679.82,360.183 L 674.998,358.975 L 670.065,357.832 L 665.022,356.82 L 659.868,355.939 L 654.567,355.188 L 649.192,354.502 L 643.781,353.98 L 638.296,353.555 L 632.774,353.196 L 627.215,353.033 L 621.583,352.968 L 621.583,352.968 L 616.024,353.033 L 610.466,353.196 L 604.944,353.555 L 599.422,353.98 L 594.01,354.502 L 588.636,355.188 L 583.372,355.939 L 578.218,356.82 L 573.101,357.832 L 568.242,358.975 L 563.419,360.183 L 558.707,361.522 L 554.216,362.958 L 549.946,364.493 L 545.749,366.093 L 541.81,367.791 L 538.129,369.619 L 534.558,371.513 L 531.245,373.406 L 528.227,375.431 L 525.355,377.553 L 522.815,379.675 L 520.496,381.863 L 518.361,384.116 L 516.594,386.401 L 515.084,388.752 L 513.759,391.103 L 512.802,393.454 L 512.103,395.902 L 511.661,398.253 L 511.55,400.702 L 511.55,400.702 L 511.661,403.085 L 512.103,405.502 L 512.802,407.885 L 513.759,410.301 L 515.084,412.652 L 516.594,414.97 L 518.361,417.223 L 520.496,419.508 L 522.815,421.729 L 525.355,423.851 L 528.227,425.908 L 531.245,427.932 L 534.558,429.891 L 538.129,431.752 L 541.81,433.548 L 545.749,435.278 L 549.946,436.911 L 554.216,438.445 L 558.707,439.882 L 563.419,441.155 L 568.242,442.429 L 573.101,443.506 L 578.218,444.518 L 583.372,445.433 L 588.636,446.216 L 594.01,446.869 L 599.422,447.424 L 604.944,447.849 L 610.466,448.143 L 616.024,448.371 L 621.583,448.404 L 621.583,448.404 L 627.215,448.371 L 632.774,448.143 L 638.296,447.849 L 643.781,447.424 L 649.192,446.869 L 654.567,446.216 L 659.868,445.433 L 665.022,444.518 L 670.065,443.506 L 674.998,442.429 L 679.82,441.155 L 684.495,439.882 L 688.95,438.445 L 693.294,436.911 L 697.453,435.278 L 701.356,433.548 L 705.11,431.752 L 708.644,429.891 L 711.958,427.932 L 715.013,425.908 L 717.884,423.851 L 720.461,421.729 L 722.744,419.508 L 724.842,417.223 L 726.646,414.97 L 728.192,412.652 L 729.443,410.301 L 730.401,407.885 L 731.1,405.502 L 731.542,403.085 L 731.689,400.702z"/>
|
|
||||||
<path style="fill: #b6c7c9; fill-opacity: 1; stroke: none" fill-rule="evenodd" d="M 640.541 347.254 L 713.393,339.026 L 712.473,337.23 L 711.332,335.402 L 710.08,333.606 L 708.571,331.876 L 706.951,330.21 L 705.11,328.513 L 703.196,326.913 L 700.987,325.378 L 698.742,323.876 L 696.312,322.44 L 693.699,321.068 L 690.974,319.795 L 688.103,318.554 L 685.121,317.346 L 682.029,316.269 L 678.826,315.289 L 675.587,314.31 L 672.163,313.494 L 668.703,312.743 L 665.206,312.057 L 661.561,311.469 L 657.917,311.012 L 654.236,310.588 L 650.518,310.294 L 646.763,310.098 L 642.971,310 L 639.216,310 L 635.424,310.098 L 631.633,310.229 L 627.951,310.49 L 624.233,310.914 L 620.552,311.339 L 616.908,311.926 L 613.337,312.547 L 609.877,313.265 L 606.49,314.081 L 603.14,314.995 L 599.9,315.942 L 596.845,317.02 L 593.826,318.163 L 590.918,319.371 L 588.157,320.644 L 585.544,322.015 L 583.077,323.452 L 580.721,324.921 L 578.512,326.456 L 576.451,328.056 L 574.573,329.688 L 572.954,331.418 L 571.371,333.084 L 570.009,334.879 L 568.867,336.642 L 567.91,338.471 L 567.1,340.299 L 640.541,347.254z"/>
|
|
||||||
<path style="fill: none; stroke-opacity: 1; stroke-width: 0.02; stroke: #6c8f93" d="M 713.393 338.961 L 712.436,337.132 L 711.332,335.336 L 710.043,333.541 L 708.571,331.843 L 706.877,330.145 L 705.074,328.48 L 703.123,326.88 L 700.914,325.346 L 698.631,323.876 L 696.275,322.44 L 693.625,321.003 L 690.974,319.73 L 688.066,318.489 L 685.084,317.346 L 682.029,316.204 L 678.826,315.224 L 675.55,314.31 L 672.126,313.461 L 668.666,312.743 L 665.206,312.057 L 661.561,311.469 L 657.88,311.012 L 654.199,310.588 L 650.481,310.294 L 646.763,310.098 L 642.934,310 L 639.179,310 L 635.424,310.098 L 631.67,310.229 L 627.915,310.49 L 624.233,310.914 L 620.552,311.306 L 616.945,311.861 L 613.411,312.547 L 609.877,313.265 L 606.527,314.081 L 603.177,314.995 L 599.974,315.942 L 596.845,316.987 L 593.863,318.163 L 590.955,319.371 L 588.194,320.611 L 585.58,321.983 L 583.077,323.387 L 580.721,324.888 L 578.512,326.423 L 576.524,327.99 L 574.61,329.688 L 572.954,331.321 L 571.408,333.051 L 570.082,334.781 L 568.867,336.577 L 567.91,338.406 L 567.137,340.234"/>
|
|
||||||
<path style="fill: #b6c7c9; fill-opacity: 1; stroke: none" fill-rule="evenodd" d="M 541.479 366.615 L 578.218,338.046 L 575.935,336.871 L 573.543,335.761 L 571.113,334.781 L 568.61,333.802 L 566.07,332.953 L 563.419,332.169 L 560.695,331.516 L 558.008,330.896 L 555.173,330.406 L 552.375,329.982 L 549.504,329.688 L 546.633,329.459 L 543.761,329.329 L 540.89,329.329 L 537.982,329.394 L 535.11,329.59 L 532.239,329.819 L 529.405,330.178 L 526.607,330.635 L 523.846,331.157 L 521.085,331.778 L 518.434,332.496 L 515.784,333.312 L 513.244,334.194 L 510.777,335.173 L 508.421,336.251 L 506.065,337.393 L 503.857,338.569 L 501.758,339.875 L 499.697,341.213 L 497.783,342.65 L 496.016,344.087 L 494.322,345.654 L 492.776,347.221 L 491.304,348.854 L 490.015,350.551 L 488.8,352.282 L 487.77,354.012 L 486.849,355.808 L 486.113,357.636 L 485.524,359.465 L 485.009,361.359 L 484.641,363.252 L 484.493,365.113 L 484.42,366.974 L 484.53,368.868 L 484.751,370.794 L 485.193,372.623 L 541.479,366.615z"/>
|
|
||||||
<path style="fill: none; stroke-opacity: 1; stroke-width: 0.02; stroke: #6c8f93" d="M 578.034 337.948 L 575.751,336.773 L 573.432,335.696 L 571.003,334.683 L 568.463,333.769 L 565.849,332.888 L 563.235,332.137 L 560.548,331.451 L 557.787,330.863 L 555.026,330.406 L 552.155,329.982 L 549.32,329.688 L 546.485,329.459 L 543.614,329.329 L 540.669,329.329 L 537.871,329.394 L 535,329.59 L 532.055,329.819 L 529.257,330.21 L 526.496,330.635 L 523.662,331.223 L 520.974,331.81 L 518.324,332.561 L 515.71,333.377 L 513.133,334.259 L 510.667,335.239 L 508.311,336.316 L 506.029,337.426 L 503.82,338.667 L 501.648,339.907 L 499.697,341.311 L 497.746,342.683 L 495.942,344.185 L 494.285,345.687 L 492.702,347.254 L 491.304,348.919 L 490.015,350.617 L 488.8,352.347 L 487.733,354.078 L 486.849,355.906 L 486.113,357.669 L 485.45,359.53 L 485.009,361.424 L 484.641,363.285 L 484.493,365.146 L 484.42,367.04 L 484.604,368.901 L 484.825,370.794 L 485.193,372.688"/>
|
|
||||||
<path style="fill: #b6c7c9; fill-opacity: 1; stroke: none" fill-rule="evenodd" d="M 531.245 433.352 L 472.124,432.34 L 472.124,434.07 L 472.235,435.703 L 472.529,437.433 L 473.008,439.066 L 473.56,440.731 L 474.259,442.429 L 475.18,443.996 L 476.137,445.596 L 477.352,447.163 L 478.64,448.665 L 480.002,450.2 L 481.622,451.636 L 483.242,453.04 L 485.082,454.379 L 486.96,455.685 L 488.984,456.925 L 491.156,458.068 L 493.365,459.178 L 495.684,460.288 L 498.114,461.235 L 500.617,462.149 L 503.231,463.031 L 505.881,463.749 L 508.532,464.468 L 511.33,465.088 L 514.164,465.61 L 517.036,466.035 L 519.944,466.427 L 522.852,466.72 L 525.797,466.916 L 528.779,467.014 L 531.797,467.014 L 534.706,466.949 L 537.687,466.818 L 540.632,466.623 L 543.54,466.329 L 546.485,465.904 L 549.283,465.414 L 552.155,464.892 L 554.842,464.206 L 557.566,463.553 L 560.217,462.737 L 562.72,461.856 L 565.26,460.909 L 567.579,459.897 L 569.898,458.852 L 531.245,433.352z"/>
|
|
||||||
<path style="fill: none; stroke-opacity: 1; stroke-width: 0.02; stroke: #6c8f93" d="M 472.198 432.34 L 472.087,434.005 L 472.308,435.703 L 472.529,437.368 L 473.008,439.066 L 473.56,440.698 L 474.296,442.364 L 475.18,443.996 L 476.21,445.596 L 477.352,447.13 L 478.566,448.665 L 480.002,450.134 L 481.511,451.603 L 483.242,452.975 L 485.009,454.379 L 486.923,455.619 L 488.911,456.86 L 491.046,458.068 L 493.255,459.178 L 495.574,460.223 L 498.003,461.203 L 500.507,462.117 L 503.047,462.966 L 505.697,463.749 L 508.458,464.468 L 511.182,465.023 L 513.98,465.545 L 516.851,466.035 L 519.796,466.361 L 522.705,466.72 L 525.613,466.851 L 528.595,467.014 L 531.576,467.014 L 534.521,467.014 L 537.466,466.851 L 540.411,466.623 L 543.32,466.329 L 546.265,465.937 L 549.062,465.48 L 551.934,464.925 L 554.658,464.272 L 557.308,463.553 L 559.959,462.77 L 562.499,461.921 L 565.039,461.007 L 567.432,459.995 L 569.677,458.95"/>
|
|
||||||
<path style="fill: #b6c7c9; fill-opacity: 1; stroke: none" fill-rule="evenodd" d="M 719.357 360.542 L 771.373,369.978 L 772.256,368.574 L 772.919,367.17 L 773.545,365.734 L 773.913,364.264 L 774.281,362.795 L 774.355,361.326 L 774.355,359.824 L 774.281,358.387 L 773.987,356.918 L 773.582,355.449 L 772.993,354.012 L 772.293,352.576 L 771.483,351.204 L 770.526,349.8 L 769.422,348.462 L 768.17,347.123 L 766.771,345.817 L 765.336,344.576 L 763.753,343.368 L 762.059,342.226 L 760.256,341.05 L 758.268,340.005 L 756.28,338.993 L 754.108,338.046 L 751.936,337.132 L 749.654,336.316 L 747.298,335.5 L 744.831,334.781 L 742.328,334.128 L 739.751,333.541 L 737.1,333.051 L 734.487,332.627 L 731.726,332.235 L 729.002,331.941 L 726.241,331.712 L 723.443,331.614 L 720.682,331.516 L 717.921,331.516 L 715.123,331.614 L 712.326,331.745 L 709.602,331.974 L 706.841,332.267 L 704.117,332.627 L 701.429,333.084 L 719.357,360.542z"/>
|
|
||||||
<path style="fill: none; stroke-opacity: 1; stroke-width: 0.02; stroke: #6c8f93" d="M 766.587 375.3 L 771.336,370.044 L 772.22,368.672 L 772.919,367.236 L 773.471,365.799 L 773.913,364.33 L 774.207,362.861 L 774.318,361.424 L 774.355,359.889 L 774.244,358.453 L 773.987,356.983 L 773.582,355.514 L 772.993,354.078 L 772.293,352.641 L 771.52,351.237 L 770.563,349.898 L 769.422,348.494 L 768.17,347.156 L 766.882,345.85 L 765.372,344.609 L 763.79,343.401 L 762.096,342.226 L 760.292,341.116 L 758.378,340.071 L 756.353,339.026 L 754.255,338.046 L 752.01,337.165 L 749.727,336.316 L 747.371,335.532 L 744.905,334.879 L 742.401,334.194 L 739.861,333.573 L 737.248,333.051 L 734.56,332.627 L 731.91,332.235 L 729.186,331.941 L 726.425,331.745 L 723.627,331.614 L 720.829,331.516 L 717.995,331.516 L 715.234,331.614 L 712.436,331.745 L 709.675,331.941 L 706.951,332.235 L 704.264,332.594 L 701.576,333.051"/>
|
|
||||||
<path style="fill: #b6c7c9; fill-opacity: 1; stroke: none" fill-rule="evenodd" d="M 726.756 398.906 L 785.325,410.856 L 786.503,409.289 L 787.46,407.754 L 788.343,406.122 L 789.043,404.489 L 789.521,402.857 L 789.853,401.224 L 789.963,399.527 L 789.963,397.861 L 789.742,396.196 L 789.411,394.564 L 788.822,392.899 L 788.123,391.299 L 787.202,389.699 L 786.208,388.099 L 784.957,386.564 L 783.558,385.095 L 782.049,383.593 L 780.318,382.124 L 778.478,380.753 L 726.756,398.906z"/>
|
|
||||||
<path style="fill: none; stroke-opacity: 1; stroke-width: 0.02; stroke: #6c8f93" d="M 777.889 416.276 L 785.251,410.921 L 786.356,409.387 L 787.46,407.754 L 788.307,406.155 L 789.006,404.489 L 789.485,402.857 L 789.853,401.224 L 790,399.527 L 789.963,397.861 L 789.742,396.164 L 789.337,394.531 L 788.822,392.899 L 788.123,391.266 L 787.202,389.634 L 786.172,388.034 L 784.883,386.467 L 783.521,384.997 L 781.901,383.495 L 780.245,382.059 L 778.367,380.687 L 766.587,375.3"/>
|
|
||||||
<path style="fill: #b6c7c9; fill-opacity: 1; stroke: none" fill-rule="evenodd" d="M 724.29 430.446 L 705.81,475.797 L 708.534,476.516 L 711.295,477.169 L 714.056,477.658 L 716.927,478.05 L 719.725,478.344 L 722.523,478.475 L 725.431,478.475 L 728.265,478.344 L 731.063,478.148 L 733.898,477.756 L 736.659,477.266 L 739.42,476.711 L 742.144,475.993 L 744.831,475.112 L 747.408,474.165 L 749.985,473.087 L 752.488,471.912 L 754.918,470.606 L 757.274,469.267 L 759.519,467.733 L 761.654,466.133 L 763.716,464.468 L 765.704,462.672 L 767.581,460.811 L 769.275,458.884 L 770.894,456.86 L 772.44,454.803 L 773.803,452.648 L 775.017,450.493 L 776.159,448.241 L 777.116,445.922 L 777.999,443.572 L 778.699,441.221 L 779.288,438.805 L 779.656,436.421 L 779.987,433.972 L 780.061,431.524 L 780.061,429.075 L 779.913,426.626 L 779.619,424.177 L 779.177,421.761 L 778.625,419.378 L 777.889,417.027 L 724.29,430.446z"/>
|
|
||||||
<path style="fill: none; stroke-opacity: 1; stroke-width: 0.02; stroke: #6c8f93" d="M 705.957 475.83 L 708.718,476.613 L 711.442,477.234 L 714.24,477.756 L 717.038,478.083 L 719.909,478.344 L 722.707,478.475 L 725.541,478.54 L 728.376,478.344 L 731.247,478.148 L 734.045,477.756 L 736.806,477.266 L 739.567,476.646 L 742.291,475.928 L 744.942,475.079 L 747.592,474.099 L 750.132,473.055 L 752.599,471.912 L 754.991,470.606 L 757.347,469.169 L 759.593,467.667 L 761.728,466.035 L 763.79,464.37 L 765.777,462.639 L 767.618,460.746 L 769.385,458.787 L 770.931,456.827 L 772.477,454.705 L 773.839,452.55 L 775.054,450.395 L 776.159,448.143 L 777.152,445.792 L 778.036,443.474 L 778.699,441.09 L 779.288,438.707 L 779.729,436.323 L 779.987,433.874 L 780.061,431.426 L 780.061,428.977 L 779.877,426.528 L 779.619,424.079 L 779.14,421.663 L 778.515,419.28 L 777.889,416.929"/>
|
|
||||||
<path style="fill: #b6c7c9; fill-opacity: 1; stroke: none" fill-rule="evenodd" d="M 490.162 404.685 L 487.365,373.896 L 485.303,374.059 L 483.352,374.255 L 481.291,374.582 L 479.303,374.974 L 477.352,375.431 L 475.437,376.019 L 473.56,376.574 L 471.719,377.325 L 469.879,378.043 L 468.149,378.859 L 466.455,379.773 L 464.835,380.72 L 463.252,381.732 L 461.817,382.842 L 460.381,383.952 L 459.056,385.128 L 457.804,386.369 L 456.663,387.675 L 455.522,388.981 L 454.528,390.385 L 453.681,391.821 L 452.871,393.258 L 452.098,394.694 L 451.509,396.196 L 451.031,397.731 L 450.589,399.265 L 450.258,400.833 L 450.11,402.432 L 450,403.967 L 450,405.534 L 450.11,407.069 L 450.331,408.669 L 450.663,410.203 L 451.031,411.738 L 451.583,413.272 L 452.172,414.774 L 452.908,416.243 L 453.718,417.68 L 454.638,419.084 L 455.632,420.488 L 456.773,421.761 L 457.915,423.067 L 459.203,424.308 L 460.565,425.483 L 461.964,426.626 L 463.473,427.671 L 465.056,428.683 L 466.676,429.663 L 468.406,430.544 L 470.1,431.36 L 471.94,432.111 L 490.162,404.685z"/>
|
|
||||||
<path style="fill: none; stroke-opacity: 1; stroke-width: 0.02; stroke: #6c8f93" d="M 487.365 373.896 L 485.414,374.059 L 483.389,374.255 L 481.401,374.582 L 479.487,374.941 L 477.536,375.398 L 475.621,375.888 L 473.781,376.508 L 471.977,377.161 L 470.173,377.88 L 468.517,378.696 L 466.786,379.577 L 465.204,380.492 L 463.657,381.471 L 462.185,382.549 L 460.712,383.659 L 459.424,384.769 L 458.136,386.009 L 456.994,387.25 L 455.89,388.556 L 454.933,389.895 L 454.013,391.266 L 453.129,392.637 L 452.393,394.074 L 451.73,395.543 L 451.178,397.045 L 450.773,398.547 L 450.368,400.082 L 450.147,401.616 L 450,403.151 L 450,404.685 L 450,406.22 L 450.221,407.754 L 450.442,409.289 L 450.773,410.824 L 451.252,412.325 L 451.73,413.795 L 452.393,415.231 L 453.203,416.733 L 454.013,418.137 L 454.933,419.476 L 455.964,420.814 L 457.031,422.12 L 458.172,423.361 L 459.424,424.569 L 460.786,425.712 L 462.222,426.822 L 463.694,427.867 L 465.277,428.846 L 466.823,429.793 L 468.517,430.642 L 470.247,431.426 L 472.014,432.177"/>
|
|
||||||
<path style="fill: #b6c7c9; fill-opacity: 1; stroke: none" fill-rule="evenodd" d="M 639.29 454.118 L 555.505,457.676 L 556.057,459.472 L 556.756,461.301 L 557.713,463.064 L 558.928,464.794 L 560.217,466.459 L 561.799,468.157 L 563.53,469.79 L 565.481,471.422 L 567.653,472.957 L 569.972,474.491 L 572.401,475.928 L 575.089,477.332 L 577.887,478.67 L 580.868,479.976 L 583.997,481.152 L 587.237,482.327 L 590.697,483.372 L 594.158,484.417 L 597.802,485.331 L 601.52,486.213 L 605.422,486.931 L 609.324,487.649 L 613.263,488.237 L 617.386,488.759 L 621.509,489.184 L 625.669,489.51 L 629.792,489.771 L 634.026,489.902 L 638.296,490 L 642.492,490 L 646.763,489.869 L 650.959,489.673 L 655.119,489.38 L 659.242,488.955 L 663.365,488.498 L 667.341,487.943 L 671.317,487.257 L 675.182,486.604 L 679.01,485.788 L 682.692,484.874 L 686.226,483.894 L 689.686,482.85 L 693.036,481.707 L 696.239,480.531 L 699.294,479.291 L 702.129,477.985 L 704.89,476.613 L 707.43,475.177 L 709.859,473.675 L 712.105,472.14 L 714.093,470.606 L 715.933,468.973 L 717.627,467.276 L 719.062,465.61 L 639.29,454.118z"/>
|
|
||||||
<path style="fill: none; stroke-opacity: 1; stroke-width: 0.02; stroke: #6c8f93" d="M 555.578 457.742 L 556.057,459.505 L 556.793,461.301 L 557.713,463.064 L 558.928,464.794 L 560.29,466.525 L 561.799,468.157 L 563.566,469.79 L 565.481,471.422 L 567.653,472.957 L 569.972,474.491 L 572.401,475.928 L 575.089,477.332 L 577.96,478.67 L 580.868,479.976 L 583.997,481.152 L 587.237,482.327 L 590.697,483.372 L 594.158,484.384 L 597.802,485.331 L 601.52,486.213 L 605.349,486.931 L 609.251,487.649 L 613.227,488.237 L 617.35,488.759 L 621.436,489.184 L 625.595,489.478 L 629.755,489.771 L 633.952,489.902 L 638.185,490 L 642.419,489.967 L 646.615,489.869 L 650.812,489.608 L 655.045,489.38 L 659.168,488.955 L 663.218,488.465 L 667.267,487.943 L 671.206,487.323 L 675.071,486.604 L 678.863,485.788 L 682.508,484.874 L 686.115,483.894 L 689.576,482.882 L 692.889,481.805 L 696.091,480.597 L 699.11,479.356 L 702.055,478.05 L 704.779,476.613 L 707.356,475.21 L 709.786,473.708 L 711.958,472.238 L 714.019,470.606 L 715.86,469.006 L 717.479,467.341 L 718.989,465.643"/>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<path style="fill: none; stroke-opacity: 1; stroke-width: 0.8; stroke: #00aed9" d="M 472.883 378.401 L 472.883,360.469"/>
|
|
||||||
<path style="fill: none; stroke-opacity: 1; stroke-width: 4; stroke: #00aed9" d="M 472.883 378.111 L 472.883,365.811"/>
|
|
||||||
<path style="fill: #000000; fill-opacity: 1; stroke: none" fill-rule="evenodd" d="M 473.404 362.192 L 472.308,362.192 L 472.308,360 L 473.404,360 L 473.404,362.192z"/>
|
|
||||||
<path style="fill: none; stroke-opacity: 1; stroke-width: 2; stroke: #00aed9" d="M 473.404 362.192 L 472.308,362.192 L 472.308,360 L 473.404,360 L 473.404,362.192"/>
|
|
||||||
<path style="fill: none; stroke-opacity: 1; stroke-width: 0.8; stroke: #00aed9" d="M 446.304 378.401 L 446.304,360.469"/>
|
|
||||||
<path style="fill: none; stroke-opacity: 1; stroke-width: 4; stroke: #00aed9" d="M 446.304 378.111 L 446.304,365.811"/>
|
|
||||||
<path style="fill: #000000; fill-opacity: 1; stroke: none" fill-rule="evenodd" d="M 446.824 362.192 L 445.728,362.192 L 445.728,360 L 446.824,360 L 446.824,362.192z"/>
|
|
||||||
<path style="fill: none; stroke-opacity: 1; stroke-width: 2; stroke: #00aed9" d="M 446.824 362.192 L 445.728,362.192 L 445.728,360 L 446.824,360 L 446.824,362.192"/>
|
|
||||||
<path style="fill: #00aed9; fill-opacity: 1; stroke: none" fill-rule="evenodd" d="M 480.318 380.677 C 480.318,385.007 471.293,388.516 460.159,388.516 C 449.025,388.516 440,385.007 440,380.677 L 440,392.16 C 440,396.49 449.025,400 460.159,400 C 471.293,400 480.318,396.49 480.318,392.16 L 480.318,380.677z"/>
|
|
||||||
<path style="fill: none; stroke-opacity: 1; stroke-width: 0.8; stroke: #ffffff" d="M 480.318 380.677 C 480.318,385.007 471.293,388.516 460.159,388.516 C 449.025,388.516 440,385.007 440,380.677 L 440,392.16 C 440,396.49 449.025,400 460.159,400 C 471.293,400 480.318,396.49 480.318,392.16 L 480.318,380.677"/>
|
|
||||||
<path style="fill: #00aed9; fill-opacity: 1; stroke: none" fill-rule="evenodd" d="M 460.159 388.516 C 471.293,388.516 480.318,385.007 480.318,380.677 C 480.318,376.347 471.293,372.837 460.159,372.837 C 449.025,372.837 440,376.347 440,380.677 C 440,385.007 449.025,388.516 460.159,388.516z"/>
|
|
||||||
<path style="fill: none; stroke-opacity: 1; stroke-width: 0.8; stroke: #ffffff" d="M 460.159 388.516 C 471.293,388.516 480.318,385.007 480.318,380.677 C 480.318,376.347 471.293,372.837 460.159,372.837 C 449.025,372.837 440,376.347 440,380.677 C 440,385.007 449.025,388.516 460.159,388.516"/>
|
|
||||||
<path style="fill: #ffffff; fill-opacity: 1; stroke: none" fill-rule="evenodd" d="M 455.555 377.612 L 457.22,380.109 L 450.927,381.563 L 452.301,380.419 L 442.574,378.756 L 445.015,376.927 L 454.4,378.516 L 455.555,377.612z"/>
|
|
||||||
<path style="fill: #ffffff; fill-opacity: 1; stroke: none" fill-rule="evenodd" d="M 464.413 383.666 L 463.276,381.093 L 468.953,379.958 L 467.968,380.84 L 477.431,382.456 L 475.162,384.272 L 465.754,382.507 L 464.413,383.666z"/>
|
|
||||||
<path style="fill: #ffffff; fill-opacity: 1; stroke: none" fill-rule="evenodd" d="M 461.308 376.248 L 467.667,374.508 L 467.742,377.234 L 466.153,376.93 L 463.048,379.503 L 460.088,379.072 L 463.29,376.554 L 461.308,376.248z"/>
|
|
||||||
<path style="fill: #ffffff; fill-opacity: 1; stroke: none" fill-rule="evenodd" d="M 458.583 386.014 L 452.528,387.149 L 452.301,384.349 L 454.041,384.726 L 457.374,381.88 L 460.324,382.38 L 456.767,385.484 L 458.583,386.014z"/>
|
|
||||||
</g>
|
|
||||||
<text font-size="21.4489" style="fill: #000000; fill-opacity: 1; stroke: none;text-anchor:start;font-family:sans-serif;font-style:italic;font-weight:normal" x="620" y="390">
|
|
||||||
<tspan x="620" y="390">Mesh</tspan>
|
|
||||||
</text>
|
|
||||||
<g>
|
|
||||||
<path style="fill: #c9c9b6; fill-opacity: 1; stroke: none" fill-rule="evenodd" d="M 294.294 324.172 L 328.289,324.172 L 313.995,338.514 L 280,338.514 L 294.294,324.172z"/>
|
|
||||||
<path style="fill: none; stroke-opacity: 1; stroke-width: 0.02; stroke: #494936" d="M 294.294 324.172 L 328.289,324.172 L 313.995,338.514 L 280,338.514 L 294.294,324.172"/>
|
|
||||||
<path style="fill: none; stroke-opacity: 1; stroke-width: 0.02; stroke: #dbdbce" d="M 295.599 336.092 L 295.599,336.168 L 295.613,336.23 L 295.633,336.314 L 295.661,336.397 L 295.703,336.46 L 295.751,336.536 L 295.814,336.605 L 295.876,336.668 L 295.939,336.744 L 296.022,336.821 L 296.106,336.883 L 296.196,336.939 L 296.3,336.994 L 296.397,337.057 L 296.522,337.105 L 296.633,337.168 L 296.758,337.216 L 296.897,337.265 L 297.036,337.306 L 297.168,337.348 L 297.313,337.39 L 297.459,337.431 L 297.612,337.452 L 297.779,337.48 L 297.938,337.494 L 298.105,337.522 L 298.258,337.543 L 298.431,337.563 L 298.605,337.57 L 298.771,337.577 L 298.938,337.577"/>
|
|
||||||
<path style="fill: none; stroke-opacity: 1; stroke-width: 0.02; stroke: #dbdbce" d="M 298.57 337.577 L 298.737,337.577 L 298.896,337.57 L 299.056,337.556 L 299.222,337.536 L 299.389,337.522 L 299.542,337.494 L 299.695,337.48 L 299.854,337.445 L 300,337.411 L 300.153,337.369 L 300.285,337.327 L 300.423,337.286 L 300.555,337.237 L 300.68,337.188 L 300.791,337.14 L 300.909,337.084 L 301.02,337.022 L 301.118,336.966 L 301.215,336.897 L 301.298,336.827 L 301.375,336.758 L 301.437,336.696 L 301.506,336.619 L 301.562,336.543 L 301.604,336.48 L 301.652,336.404 L 301.673,336.314 L 301.694,336.237 L 301.715,336.168 L 301.722,336.092"/>
|
|
||||||
<path style="fill: none; stroke-opacity: 1; stroke-width: 0.02; stroke: #dbdbce" d="M 299.306 333.308 L 299.132,333.308 L 298.966,333.315 L 298.792,333.315 L 298.639,333.329 L 298.473,333.35 L 298.306,333.363 L 298.146,333.377 L 297.98,333.412 L 297.834,333.44 L 297.688,333.461 L 297.543,333.495 L 297.397,333.537 L 297.265,333.572 L 297.14,333.613 L 297.015,333.669 L 296.876,333.711 L 296.779,333.759 L 296.668,333.801 L 296.564,333.856 L 296.48,333.919 L 296.39,333.974 L 296.314,334.023 L 296.237,334.085 L 296.182,334.148 L 296.126,334.217 L 296.071,334.28 L 296.043,334.335 L 296.008,334.405 L 295.988,334.46 L 295.981,334.537 L 295.974,334.592"/>
|
|
||||||
<path style="fill: none; stroke-opacity: 1; stroke-width: 0.02; stroke: #dbdbce" d="M 302.083 334.592 L 302.083,334.53 L 302.076,334.46 L 302.048,334.398 L 302.02,334.321 L 301.985,334.266 L 301.93,334.19 L 301.874,334.134 L 301.819,334.065 L 301.736,334.016 L 301.673,333.947 L 301.59,333.891 L 301.479,333.842 L 301.388,333.773 L 301.284,333.738 L 301.173,333.683 L 301.048,333.627 L 300.916,333.586 L 300.784,333.544 L 300.653,333.509 L 300.514,333.481 L 300.368,333.447 L 300.215,333.412 L 300.069,333.391 L 299.917,333.363 L 299.764,333.35 L 299.604,333.329 L 299.438,333.315 L 299.264,333.315 L 299.098,333.308 L 298.938,333.308"/>
|
|
||||||
<path style="fill: #a5a585; fill-opacity: 1; stroke: none" fill-rule="evenodd" d="M 280 340 L 313.995,340 L 313.995,338.514 L 280,338.514 L 280,340z"/>
|
|
||||||
<path style="fill: none; stroke-opacity: 1; stroke-width: 0.02; stroke: #494936" d="M 280 340 L 313.995,340 L 313.995,338.514 L 280,338.514 L 280,340"/>
|
|
||||||
<path style="fill: #a5a585; fill-opacity: 1; stroke: none" fill-rule="evenodd" d="M 294.294 324.172 L 328.289,324.172 L 328.289,300.916 L 294.294,300.916 L 294.294,324.172z"/>
|
|
||||||
<path style="fill: none; stroke-opacity: 1; stroke-width: 0.02; stroke: #494936" d="M 294.294 324.172 L 328.289,324.172 L 328.289,300.916 L 294.294,300.916 L 294.294,324.172"/>
|
|
||||||
<path style="fill: #7a7a5a; fill-opacity: 1; stroke: none" fill-rule="evenodd" d="M 329.219 323.256 L 329.219,300 L 328.289,300.916 L 328.289,324.172 L 329.219,323.256z"/>
|
|
||||||
<path style="fill: none; stroke-opacity: 1; stroke-width: 0.02; stroke: #494936" d="M 329.219 323.256 L 329.219,300 L 328.289,300.916 L 328.289,324.172 L 329.219,323.256"/>
|
|
||||||
<path style="fill: #ffffff; fill-opacity: 1; stroke: none" fill-rule="evenodd" d="M 295.974 322.694 L 326.623,322.694 L 326.623,302.784 L 295.974,302.784 L 295.974,322.694z"/>
|
|
||||||
<path style="fill: none; stroke-opacity: 1; stroke-width: 0.02; stroke: #494936" d="M 295.974 322.694 L 326.623,322.694 L 326.623,302.784 L 295.974,302.784 L 295.974,322.694"/>
|
|
||||||
<path style="fill: #93936c; fill-opacity: 1; stroke: none" fill-rule="evenodd" d="M 295.974 325.297 L 324.568,325.297 L 317.14,332.746 L 288.546,332.746 L 295.974,325.297z"/>
|
|
||||||
<path style="fill: none; stroke-opacity: 1; stroke-width: 0.02; stroke: #494936" d="M 295.974 325.297 L 324.568,325.297 L 317.14,332.746 L 288.546,332.746 L 295.974,325.297"/>
|
|
||||||
<path style="fill: #7a7a5a; fill-opacity: 1; stroke: none" fill-rule="evenodd" d="M 300.423 335.62 L 300.423,335.578 L 300.417,335.536 L 300.41,335.495 L 300.389,335.446 L 300.382,335.404 L 300.354,335.37 L 300.34,335.328 L 300.305,335.3 L 300.271,335.259 L 300.25,335.217 L 300.215,335.182 L 300.174,335.148 L 300.132,335.106 L 300.083,335.071 L 300.042,335.05 L 299.993,335.016 L 299.938,334.988 L 299.875,334.967 L 299.826,334.932 L 299.764,334.918 L 299.701,334.891 L 299.646,334.877 L 299.577,334.856 L 299.514,334.842 L 299.438,334.828 L 299.375,334.807 L 299.306,334.8 L 299.243,334.8 L 299.174,334.793 L 299.091,334.793 L 299.035,334.793 L 299.035,334.793 L 298.959,334.793 L 298.882,334.793 L 298.82,334.8 L 298.75,334.8 L 298.688,334.807 L 298.612,334.828 L 298.549,334.842 L 298.48,334.856 L 298.417,334.877 L 298.355,334.891 L 298.299,334.918 L 298.23,334.932 L 298.181,334.967 L 298.126,334.988 L 298.07,335.016 L 298.022,335.05 L 297.98,335.071 L 297.931,335.106 L 297.89,335.148 L 297.855,335.182 L 297.806,335.217 L 297.785,335.259 L 297.744,335.3 L 297.723,335.328 L 297.702,335.37 L 297.681,335.404 L 297.667,335.446 L 297.661,335.495 L 297.647,335.536 L 297.633,335.578 L 297.633,335.62 L 297.633,335.62 L 297.633,335.668 L 297.647,335.71 L 297.661,335.751 L 297.667,335.793 L 297.681,335.835 L 297.702,335.869 L 297.723,335.918 L 297.744,335.953 L 297.785,335.994 L 297.806,336.022 L 297.855,336.064 L 297.89,336.099 L 297.931,336.14 L 297.98,336.168 L 298.022,336.196 L 298.07,336.23 L 298.126,336.258 L 298.181,336.279 L 298.23,336.314 L 298.299,336.328 L 298.355,336.355 L 298.417,336.369 L 298.48,336.39 L 298.549,336.404 L 298.612,336.418 L 298.688,336.432 L 298.75,336.446 L 298.82,336.446 L 298.882,336.446 L 298.959,336.453 L 299.035,336.453 L 299.035,336.453 L 299.091,336.453 L 299.174,336.446 L 299.243,336.446 L 299.306,336.446 L 299.375,336.432 L 299.438,336.418 L 299.514,336.404 L 299.577,336.39 L 299.646,336.369 L 299.701,336.355 L 299.764,336.328 L 299.826,336.314 L 299.875,336.279 L 299.938,336.258 L 299.993,336.23 L 300.042,336.196 L 300.083,336.168 L 300.132,336.14 L 300.174,336.099 L 300.215,336.064 L 300.25,336.022 L 300.271,335.994 L 300.305,335.953 L 300.34,335.918 L 300.354,335.869 L 300.382,335.835 L 300.389,335.793 L 300.41,335.751 L 300.417,335.71 L 300.423,335.668 L 300.423,335.62z"/>
|
|
||||||
<path style="fill: none; stroke-opacity: 1; stroke-width: 0.02; stroke: #dbdbce" d="M 300.243 335.536 L 300.243,335.495 L 300.236,335.453 L 300.236,335.418 L 300.215,335.39 L 300.201,335.335 L 300.194,335.314 L 300.16,335.272 L 300.132,335.231 L 300.111,335.203 L 300.083,335.175 L 300.042,335.148 L 300.007,335.099 L 299.965,335.071 L 299.924,335.05 L 299.889,335.016 L 299.833,334.988 L 299.792,334.974 L 299.743,334.939 L 299.695,334.925 L 299.632,334.898 L 299.577,334.884 L 299.514,334.87 L 299.459,334.849 L 299.396,334.835 L 299.334,334.828 L 299.264,334.807 L 299.209,334.8 L 299.132,334.793 L 299.077,334.793 L 299.007,334.793 L 298.945,334.793 L 298.945,334.793 L 298.875,334.793 L 298.813,334.793 L 298.743,334.793 L 298.688,334.8 L 298.619,334.807 L 298.563,334.828 L 298.487,334.835 L 298.431,334.849 L 298.383,334.87 L 298.313,334.884 L 298.258,334.898 L 298.188,334.925 L 298.153,334.939 L 298.091,334.974 L 298.049,334.988 L 298.001,335.016 L 297.959,335.05 L 297.917,335.071 L 297.876,335.099 L 297.841,335.148 L 297.806,335.175 L 297.779,335.203 L 297.744,335.231 L 297.73,335.272 L 297.702,335.314 L 297.688,335.335 L 297.674,335.39 L 297.661,335.418 L 297.654,335.453 L 297.647,335.495 L 297.647,335.536 L 297.647,335.536 L 297.647,335.571 L 297.654,335.613 L 297.661,335.654 L 297.674,335.675 L 297.688,335.717 L 297.702,335.758 L 297.73,335.793 L 297.744,335.828 L 297.779,335.869 L 297.806,335.89 L 297.841,335.925 L 297.876,335.96 L 297.917,335.994 L 297.959,336.015 L 298.001,336.05 L 298.049,336.071 L 298.091,336.099 L 298.153,336.126 L 298.188,336.14 L 298.258,336.168 L 298.313,336.189 L 298.383,336.196 L 298.431,336.217 L 298.487,336.23 L 298.563,336.237 L 298.619,336.258 L 298.688,336.272 L 298.743,336.272 L 298.813,336.272 L 298.875,336.272 L 298.945,336.272 L 298.945,336.272 L 299.007,336.272 L 299.077,336.272 L 299.132,336.272 L 299.209,336.272 L 299.264,336.258 L 299.334,336.237 L 299.396,336.23 L 299.459,336.217 L 299.514,336.196 L 299.577,336.189 L 299.632,336.168 L 299.695,336.14 L 299.743,336.126 L 299.792,336.099 L 299.833,336.071 L 299.889,336.05 L 299.924,336.015 L 299.965,335.994 L 300.007,335.96 L 300.042,335.925 L 300.083,335.89 L 300.111,335.869 L 300.132,335.828 L 300.16,335.793 L 300.194,335.758 L 300.201,335.717 L 300.215,335.675 L 300.236,335.654 L 300.236,335.613 L 300.243,335.571 L 300.243,335.536"/>
|
|
||||||
<path style="fill: none; stroke-opacity: 1; stroke-width: 0.02; stroke: #626248" d="M 295.793 336.272 L 295.793,336.355 L 295.807,336.418 L 295.835,336.494 L 295.856,336.578 L 295.897,336.647 L 295.939,336.709 L 296.001,336.786 L 296.064,336.862 L 296.133,336.925 L 296.203,336.994 L 296.293,337.057 L 296.376,337.126 L 296.487,337.182 L 296.591,337.237 L 296.703,337.286 L 296.821,337.348 L 296.952,337.397 L 297.07,337.445 L 297.223,337.487 L 297.362,337.529 L 297.508,337.577 L 297.654,337.612 L 297.806,337.633 L 297.959,337.661 L 298.126,337.688 L 298.285,337.702 L 298.445,337.73 L 298.612,337.744 L 298.785,337.751 L 298.952,337.751 L 299.118,337.751"/>
|
|
||||||
<path style="fill: none; stroke-opacity: 1; stroke-width: 0.02; stroke: #626248" d="M 298.743 337.751 L 298.917,337.751 L 299.077,337.751 L 299.25,337.737 L 299.403,337.716 L 299.563,337.702 L 299.729,337.688 L 299.875,337.661 L 300.035,337.626 L 300.174,337.591 L 300.326,337.563 L 300.472,337.522 L 300.604,337.48 L 300.736,337.431 L 300.861,337.369 L 300.986,337.32 L 301.09,337.265 L 301.201,337.209 L 301.298,337.14 L 301.388,337.084 L 301.479,337.008 L 301.555,336.952 L 301.631,336.883 L 301.694,336.8 L 301.736,336.723 L 301.798,336.661 L 301.826,336.578 L 301.86,336.501 L 301.888,336.418 L 301.888,336.355 L 301.902,336.272"/>
|
|
||||||
<path style="fill: none; stroke-opacity: 1; stroke-width: 0.02; stroke: #626248" d="M 299.486 333.488 L 299.327,333.488 L 299.16,333.495 L 298.993,333.495 L 298.827,333.509 L 298.653,333.53 L 298.487,333.537 L 298.341,333.565 L 298.174,333.586 L 298.022,333.627 L 297.876,333.641 L 297.73,333.683 L 297.591,333.711 L 297.452,333.759 L 297.327,333.801 L 297.202,333.842 L 297.07,333.884 L 296.966,333.933 L 296.855,333.981 L 296.758,334.044 L 296.668,334.099 L 296.585,334.148 L 296.501,334.217 L 296.418,334.266 L 296.369,334.321 L 296.314,334.398 L 296.265,334.453 L 296.224,334.523 L 296.196,334.578 L 296.175,334.641 L 296.168,334.717 L 296.161,334.787"/>
|
|
||||||
<path style="fill: none; stroke-opacity: 1; stroke-width: 0.02; stroke: #626248" d="M 302.277 334.787 L 302.263,334.71 L 302.256,334.641 L 302.242,334.578 L 302.208,334.509 L 302.166,334.446 L 302.117,334.377 L 302.062,334.321 L 301.999,334.259 L 301.93,334.19 L 301.847,334.134 L 301.763,334.072 L 301.673,334.016 L 301.562,333.967 L 301.465,333.919 L 301.347,333.87 L 301.236,333.815 L 301.111,333.773 L 300.979,333.738 L 300.833,333.697 L 300.694,333.669 L 300.555,333.627 L 300.41,333.599 L 300.257,333.572 L 300.09,333.544 L 299.944,333.53 L 299.785,333.509 L 299.618,333.495 L 299.445,333.495 L 299.292,333.488 L 299.118,333.488"/>
|
|
||||||
<path style="fill: #7a7a5a; fill-opacity: 1; stroke: none" fill-rule="evenodd" d="M 328.289 325.477 L 313.995,339.82 L 313.995,338.514 L 328.289,324.172 L 328.289,325.477z"/>
|
|
||||||
<path style="fill: none; stroke-opacity: 1; stroke-width: 0.02; stroke: #494936" d="M 328.289 325.477 L 313.995,339.82 L 313.995,338.514 L 328.289,324.172 L 328.289,325.477"/>
|
|
||||||
<path style="fill: #7a7a5a; fill-opacity: 1; stroke: none" fill-rule="evenodd" d="M 323.464 323.075 L 323.464,323.429 L 326.248,323.429 L 326.248,323.075 L 323.464,323.075z"/>
|
|
||||||
<path style="fill: none; stroke-opacity: 1; stroke-width: 0.02; stroke: #494936" d="M 323.464 323.075 L 323.464,323.429 L 326.248,323.429 L 326.248,323.075 L 323.464,323.075"/>
|
|
||||||
<path style="fill: none; stroke-opacity: 1; stroke-width: 0.02; stroke: #000000" d="M 322.7 327.157 L 294.294,327.157"/>
|
|
||||||
<path style="fill: none; stroke-opacity: 1; stroke-width: 0.02; stroke: #000000" d="M 320.854 329.025 L 292.447,329.025"/>
|
|
||||||
<path style="fill: none; stroke-opacity: 1; stroke-width: 0.02; stroke: #000000" d="M 319 330.885 L 290.587,330.885"/>
|
|
||||||
<path style="fill: #c9c9b6; fill-opacity: 1; stroke: none" fill-rule="evenodd" d="M 295.224 300 L 329.219,300 L 328.289,300.916 L 294.294,300.916 L 295.224,300z"/>
|
|
||||||
<path style="fill: none; stroke-opacity: 1; stroke-width: 0.02; stroke: #494936" d="M 295.224 300 L 329.219,300 L 328.289,300.916 L 294.294,300.916 L 295.224,300"/>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<path style="fill: #7a7a5a; fill-opacity: 1; stroke: none" fill-rule="evenodd" d="M 260.594 397.19 C 260.943,395.941 262.38,389.684 262.447,388.811 C 262.514,387.938 262.192,386.851 261.722,386.623 C 261.749,386.314 261.749,386.139 261.749,386.139 C 261.641,386.099 261.521,386.059 261.413,386.005 L 261.453,386.018 C 261.453,386.018 261.776,384.622 261.977,383.655 C 262.34,381.802 262.38,380.862 262.38,380.862 C 262.367,380.607 262.299,380.379 262.071,380.312 L 260.984,380.016 C 260.755,379.949 260.594,380.097 260.446,380.325 C 260.446,380.325 260.017,381.184 259.426,382.957 C 259.104,383.883 258.808,385.065 258.808,385.065 L 258.822,385.065 C 258.177,384.85 257.519,384.662 256.861,384.474 C 255.169,384.004 253.491,383.655 251.799,383.4 C 251.799,383.4 251.719,383.548 251.571,383.83 C 251.061,383.776 250.228,384.555 249.839,385.334 C 249.449,386.112 247.476,392.222 247.126,393.471 C 246.777,394.719 246.119,397.915 245.824,399.499 C 245.529,401.084 245.26,403.85 244.24,407.529 C 243.635,409.704 242.669,412.954 242.158,414.296 C 242.024,414.659 240.963,416.445 242.507,417.062 C 244.025,417.667 246.294,418.311 247.435,418.633 C 248.577,418.942 250.846,419.546 252.457,419.815 C 254.095,420.084 254.109,417.989 254.176,417.613 C 254.431,416.203 255.263,412.913 255.854,410.738 C 256.875,407.046 258.07,404.548 258.634,403.031 C 259.184,401.514 260.245,398.439 260.594,397.19z"/>
|
|
||||||
<path style="fill: none; stroke-opacity: 1; stroke-width: 0.8; stroke: #000000" d="M 260.594 397.19 C 260.943,395.941 262.38,389.684 262.447,388.811 C 262.514,387.938 262.192,386.851 261.722,386.623 C 261.749,386.314 261.749,386.139 261.749,386.139 C 261.641,386.099 261.521,386.059 261.413,386.005 L 261.453,386.018 C 261.453,386.018 261.776,384.622 261.977,383.655 C 262.34,381.802 262.38,380.862 262.38,380.862 C 262.367,380.607 262.299,380.379 262.071,380.312 L 260.984,380.016 C 260.755,379.949 260.594,380.097 260.446,380.325 C 260.446,380.325 260.017,381.184 259.426,382.957 C 259.104,383.883 258.808,385.065 258.808,385.065 L 258.822,385.065 C 258.177,384.85 257.519,384.662 256.861,384.474 C 255.169,384.004 253.491,383.655 251.799,383.4 C 251.799,383.4 251.719,383.548 251.571,383.83 L 251.571,383.83 C 251.061,383.776 250.228,384.555 249.839,385.334 C 249.449,386.112 247.476,392.222 247.126,393.471 C 246.777,394.719 246.119,397.915 245.824,399.499 C 245.529,401.084 245.26,403.85 244.24,407.529 C 243.635,409.704 242.669,412.954 242.158,414.296 C 242.024,414.659 240.963,416.445 242.507,417.062 C 244.025,417.667 246.294,418.311 247.435,418.633 C 248.577,418.942 250.846,419.546 252.457,419.815 C 254.095,420.084 254.109,417.989 254.176,417.613 C 254.431,416.203 255.263,412.913 255.854,410.738 C 256.875,407.046 258.07,404.548 258.634,403.031 C 259.184,401.514 260.245,398.439 260.594,397.19"/>
|
|
||||||
<path style="fill: #b7b79d; fill-opacity: 1; stroke: none" fill-rule="evenodd" d="M 258.916 397.351 C 259.265,396.102 260.702,389.845 260.769,388.986 C 260.836,388.113 260.514,387.012 260.044,386.797 C 260.07,386.488 260.07,386.314 260.07,386.314 C 259.963,386.26 259.842,386.22 259.735,386.179 L 259.762,386.193 C 259.762,386.193 260.097,384.796 260.299,383.83 C 260.661,381.963 260.688,381.023 260.688,381.023 C 260.688,380.768 260.621,380.553 260.393,380.486 L 259.305,380.191 C 259.077,380.124 258.916,380.271 258.768,380.5 C 258.768,380.5 258.338,381.359 257.748,383.118 C 257.425,384.058 257.13,385.226 257.13,385.226 L 257.143,385.24 C 256.499,385.025 255.841,384.823 255.183,384.649 C 253.491,384.179 251.799,383.816 250.121,383.561 C 250.121,383.561 250.04,383.722 249.893,383.991 C 249.382,383.951 248.55,384.716 248.16,385.495 C 247.771,386.273 245.797,392.383 245.448,393.645 C 245.099,394.894 244.441,398.076 244.146,399.661 C 243.85,401.245 243.582,404.011 242.561,407.704 C 241.957,409.879 240.99,413.115 240.48,414.471 C 240.346,414.82 239.285,416.619 240.829,417.237 C 242.346,417.828 244.616,418.486 245.757,418.795 C 246.898,419.117 249.167,419.708 250.779,419.976 C 252.417,420.245 252.43,418.163 252.497,417.788 C 252.753,416.364 253.585,413.088 254.176,410.913 C 255.196,407.22 256.391,404.709 256.955,403.192 C 257.506,401.688 258.567,398.613 258.916,397.351z"/>
|
|
||||||
<path style="fill: none; stroke-opacity: 1; stroke-width: 0.8; stroke: #000000" d="M 258.916 397.351 C 259.265,396.102 260.702,389.845 260.769,388.986 C 260.836,388.113 260.514,387.012 260.044,386.797 C 260.07,386.488 260.07,386.314 260.07,386.314 C 259.963,386.26 259.842,386.22 259.735,386.179 L 259.762,386.193 C 259.762,386.193 260.097,384.796 260.299,383.83 C 260.661,381.963 260.688,381.023 260.688,381.023 C 260.688,380.768 260.621,380.553 260.393,380.486 L 259.305,380.191 C 259.077,380.124 258.916,380.271 258.768,380.5 C 258.768,380.5 258.338,381.359 257.748,383.118 C 257.425,384.058 257.13,385.226 257.13,385.226 L 257.143,385.24 C 256.499,385.025 255.841,384.823 255.183,384.649 C 253.491,384.179 251.799,383.816 250.121,383.561 C 250.121,383.561 250.04,383.722 249.893,383.991 L 249.893,383.991 C 249.382,383.951 248.55,384.716 248.16,385.495 C 247.771,386.273 245.797,392.383 245.448,393.645 C 245.099,394.894 244.441,398.076 244.146,399.661 C 243.85,401.245 243.582,404.011 242.561,407.704 C 241.957,409.879 240.99,413.115 240.48,414.471 C 240.346,414.82 239.285,416.619 240.829,417.237 C 242.346,417.828 244.616,418.486 245.757,418.795 C 246.898,419.117 249.167,419.708 250.779,419.976 C 252.417,420.245 252.43,418.163 252.497,417.788 C 252.753,416.364 253.585,413.088 254.176,410.913 C 255.196,407.22 256.391,404.709 256.955,403.192 C 257.506,401.688 258.567,398.613 258.916,397.351"/>
|
|
||||||
<path style="fill: #c9c9b6; fill-opacity: 1; stroke-opacity: 1; stroke-width: 0.8; stroke: #ecece7" fill-rule="evenodd" d="M 250.336 383.601 C 250.336,383.601 248.12,388.126 246.845,392.719 C 245.341,398.184 245.126,399.996 245.354,402.534 C 245.394,403.058 245.918,403.702 246.495,403.863 C 246.724,403.917 246.992,403.998 247.1,404.024 C 247.22,404.065 247.65,404.159 247.999,404.441 C 248.362,404.723 248.442,404.79 248.657,404.897 C 248.859,405.018 248.899,405.099 249.49,405.26 C 250.08,405.421 250.148,405.381 250.389,405.381 C 250.631,405.394 250.738,405.381 251.195,405.327 C 251.638,405.26 252.054,405.394 252.175,405.421 C 252.283,405.461 252.551,405.528 252.779,405.595 C 253.357,405.757 254.136,405.475 254.444,405.045 C 255.935,402.991 256.687,401.312 258.191,395.847 C 259.453,391.255 259.869,386.233 259.869,386.233 L 250.336,383.601z"/>
|
|
||||||
<path style="fill: #000000; fill-opacity: 1; stroke: none" fill-rule="evenodd" d="M 253.021 402.561 C 252.632,403.998 251.141,404.83 249.718,404.441 C 248.281,404.051 247.449,402.561 247.838,401.138 C 248.241,399.701 249.718,398.868 251.141,399.258 C 252.578,399.661 253.41,401.138 253.021,402.561z"/>
|
|
||||||
<path style="fill: #000000; fill-opacity: 1; stroke: none" fill-rule="evenodd" d="M 248.066 398.157 C 248.429,398.264 248.711,398.412 248.845,398.492 C 248.979,398.586 249.02,398.707 248.899,398.788 C 248.778,398.868 248.563,399.029 248.442,399.137 C 248.295,399.258 248.201,399.285 247.999,399.164 C 247.637,398.962 246.871,398.412 246.683,398.157 C 246.576,398.022 246.67,397.969 246.871,397.955 C 247.14,397.942 247.677,398.049 248.066,398.157z"/>
|
|
||||||
<path style="fill: #ff0000; fill-opacity: 1; stroke: none" fill-rule="evenodd" d="M 246.16 400.99 C 246.361,401.057 246.845,401.299 246.979,401.406 C 247.126,401.5 247.341,401.728 247.328,401.997 C 247.301,402.306 247.328,402.964 247.462,403.179 C 247.637,403.46 247.61,403.581 247.355,403.541 C 247.153,403.501 246.63,403.313 246.482,403.232 C 246.334,403.165 246.119,403.031 246.052,402.829 C 245.918,402.413 245.878,401.554 245.958,401.124 C 245.985,400.95 246.066,400.95 246.16,400.99z"/>
|
|
||||||
<path style="fill: none; stroke-opacity: 1; stroke-width: 0.8; stroke: #ffffff" d="M 253.021 402.561 C 252.632,403.998 251.141,404.83 249.718,404.441 C 248.281,404.051 247.449,402.561 247.838,401.138 C 248.241,399.701 249.718,398.868 251.141,399.258 C 252.578,399.661 253.41,401.138 253.021,402.561"/>
|
|
||||||
<path style="fill: none; stroke-opacity: 1; stroke-width: 0.8; stroke: #ffffff" d="M 248.066 398.157 C 248.429,398.264 248.711,398.412 248.845,398.492 C 248.979,398.586 249.02,398.707 248.899,398.788 C 248.778,398.868 248.563,399.029 248.442,399.137 C 248.295,399.258 248.201,399.285 247.999,399.164 C 247.637,398.962 246.871,398.412 246.683,398.157 C 246.576,398.022 246.67,397.969 246.871,397.955 C 247.14,397.942 247.677,398.049 248.066,398.157"/>
|
|
||||||
<path style="fill: none; stroke-opacity: 1; stroke-width: 0.8; stroke: #ffffff" d="M 246.16 400.99 C 246.361,401.057 246.845,401.299 246.979,401.406 C 247.126,401.5 247.341,401.728 247.328,401.997 C 247.301,402.306 247.328,402.964 247.462,403.179 C 247.637,403.46 247.61,403.581 247.355,403.541 C 247.153,403.501 246.63,403.313 246.482,403.232 C 246.334,403.165 246.119,403.031 246.052,402.829 C 245.918,402.413 245.878,401.554 245.958,401.124 C 245.985,400.95 246.066,400.95 246.16,400.99"/>
|
|
||||||
<path style="fill: #000000; fill-opacity: 1; stroke: none" fill-rule="evenodd" d="M 254.35 399.889 C 253.988,399.795 253.679,399.781 253.518,399.781 C 253.357,399.795 253.263,399.875 253.316,399.996 C 253.384,400.13 253.491,400.386 253.531,400.533 C 253.598,400.708 253.666,400.788 253.894,400.802 C 254.31,400.802 255.25,400.721 255.545,400.6 C 255.693,400.533 255.639,400.439 255.478,400.332 C 255.25,400.184 254.74,399.996 254.35,399.889z"/>
|
|
||||||
<path style="fill: #00ff00; fill-opacity: 1; stroke: none" fill-rule="evenodd" d="M 254.538 403.299 C 254.337,403.246 253.786,403.219 253.612,403.232 C 253.451,403.246 253.142,403.326 253.021,403.568 C 252.887,403.85 252.524,404.4 252.296,404.521 C 252.001,404.669 251.96,404.79 252.202,404.87 C 252.39,404.951 252.941,405.058 253.102,405.072 C 253.276,405.085 253.518,405.085 253.679,404.938 C 254.028,404.656 254.485,403.93 254.646,403.528 C 254.713,403.366 254.646,403.326 254.538,403.299z"/>
|
|
||||||
<path style="fill: none; stroke-opacity: 1; stroke-width: 0.8; stroke: #ffffff" d="M 254.35 399.889 C 253.988,399.795 253.679,399.781 253.518,399.781 C 253.357,399.795 253.263,399.875 253.316,399.996 C 253.384,400.13 253.491,400.386 253.531,400.533 C 253.598,400.708 253.666,400.788 253.894,400.802 C 254.31,400.802 255.25,400.721 255.545,400.6 C 255.693,400.533 255.639,400.439 255.478,400.332 C 255.25,400.184 254.74,399.996 254.35,399.889"/>
|
|
||||||
<path style="fill: none; stroke-opacity: 1; stroke-width: 0.8; stroke: #ffffff" d="M 254.538 403.299 C 254.337,403.246 253.786,403.219 253.612,403.232 C 253.451,403.246 253.142,403.326 253.021,403.568 C 252.887,403.85 252.524,404.4 252.296,404.521 C 252.001,404.669 251.96,404.79 252.202,404.87 C 252.39,404.951 252.941,405.058 253.102,405.072 C 253.276,405.085 253.518,405.085 253.679,404.938 C 254.028,404.656 254.485,403.93 254.646,403.528 C 254.713,403.366 254.646,403.326 254.538,403.299"/>
|
|
||||||
<path style="fill: none; stroke-opacity: 1; stroke-width: 0.8; stroke: #ffffff" d="M 254.095 387.791 L 254.981,384.582"/>
|
|
||||||
<path style="fill: none; stroke-opacity: 1; stroke-width: 0.8; stroke: #ffffff" d="M 254.391 387.871 L 255.277,384.662"/>
|
|
||||||
<path style="fill: none; stroke-opacity: 1; stroke-width: 0.8; stroke: #000000" d="M 260.688 380.889 C 260.688,380.889 260.178,380.741 259.748,380.634 C 259.372,380.527 258.835,380.379 258.835,380.379"/>
|
|
||||||
<path style="fill: none; stroke-opacity: 1; stroke-width: 0.8; stroke: #000000" d="M 258.916 397.351 C 259.265,396.102 260.702,389.845 260.769,388.986 C 260.836,388.113 260.514,387.012 260.044,386.797 C 260.07,386.488 260.07,386.314 260.07,386.314 C 259.963,386.26 259.842,386.22 259.735,386.179 L 259.762,386.193 C 259.762,386.193 260.097,384.796 260.299,383.83 C 260.661,381.963 260.688,381.023 260.688,381.023 C 260.688,380.768 260.621,380.553 260.393,380.486 L 259.305,380.191 C 259.077,380.124 258.916,380.271 258.768,380.5 C 258.768,380.5 258.338,381.359 257.748,383.118 C 257.425,384.058 257.13,385.226 257.13,385.226 L 257.143,385.24 C 256.499,385.025 255.841,384.823 255.183,384.649 C 253.491,384.179 251.799,383.816 250.121,383.561 C 250.121,383.561 250.04,383.722 249.893,383.991 L 249.893,383.991 C 249.382,383.951 248.55,384.716 248.16,385.495 C 247.771,386.273 245.797,392.383 245.448,393.645 C 245.099,394.894 244.441,398.076 244.146,399.661 C 243.85,401.245 243.582,404.011 242.561,407.704 C 241.957,409.879 240.99,413.115 240.48,414.471 C 240.346,414.82 239.285,416.619 240.829,417.237 C 242.346,417.828 244.616,418.486 245.757,418.795 C 246.898,419.117 249.167,419.708 250.779,419.976 C 252.417,420.245 252.43,418.163 252.497,417.788 C 252.753,416.364 253.585,413.088 254.176,410.913 C 255.196,407.22 256.391,404.709 256.955,403.192 C 257.506,401.688 258.567,398.613 258.916,397.351"/>
|
|
||||||
<path style="fill: #000000; fill-opacity: 1; stroke-opacity: 1; stroke-width: 0.02; stroke: #ffffff" fill-rule="evenodd" d="M 247.1 406.133 C 246.925,406.764 246.267,407.14 245.623,406.965 C 244.978,406.79 244.602,406.133 244.777,405.488 C 244.965,404.844 245.623,404.468 246.267,404.642 C 246.912,404.817 247.288,405.488 247.1,406.133z"/>
|
|
||||||
<path style="fill: #000000; fill-opacity: 1; stroke-opacity: 1; stroke-width: 0.02; stroke: #ffffff" fill-rule="evenodd" d="M 250.148 407.408 C 249.973,408.053 249.302,408.429 248.657,408.254 C 248.026,408.08 247.65,407.408 247.825,406.777 C 247.999,406.133 248.657,405.757 249.302,405.931 C 249.946,406.106 250.322,406.777 250.148,407.408z"/>
|
|
||||||
<path style="fill: #000000; fill-opacity: 1; stroke-opacity: 1; stroke-width: 0.02; stroke: #ffffff" fill-rule="evenodd" d="M 253.424 407.878 C 253.249,408.509 252.578,408.885 251.933,408.711 C 251.302,408.536 250.926,407.878 251.101,407.234 C 251.276,406.589 251.933,406.213 252.578,406.388 C 253.223,406.562 253.598,407.234 253.424,407.878z"/>
|
|
||||||
<path style="fill: #000000; fill-opacity: 1; stroke-opacity: 1; stroke-width: 0.02; stroke: #ffffff" fill-rule="evenodd" d="M 246.375 408.778 C 246.2,409.422 245.529,409.798 244.898,409.61 C 244.253,409.436 243.877,408.778 244.052,408.133 C 244.226,407.489 244.898,407.113 245.529,407.287 C 246.173,407.475 246.549,408.133 246.375,408.778z"/>
|
|
||||||
<path style="fill: #000000; fill-opacity: 1; stroke-opacity: 1; stroke-width: 0.02; stroke: #ffffff" fill-rule="evenodd" d="M 249.409 410.067 C 249.235,410.711 248.577,411.087 247.932,410.899 C 247.288,410.725 246.912,410.067 247.086,409.422 C 247.274,408.778 247.932,408.402 248.577,408.576 C 249.208,408.764 249.597,409.422 249.409,410.067z"/>
|
|
||||||
<path style="fill: #000000; fill-opacity: 1; stroke-opacity: 1; stroke-width: 0.02; stroke: #ffffff" fill-rule="evenodd" d="M 252.699 410.523 C 252.511,411.154 251.853,411.544 251.208,411.356 C 250.564,411.181 250.188,410.523 250.362,409.879 C 250.55,409.234 251.208,408.858 251.853,409.033 C 252.497,409.221 252.873,409.879 252.699,410.523z"/>
|
|
||||||
<path style="fill: #000000; fill-opacity: 1; stroke-opacity: 1; stroke-width: 0.02; stroke: #ffffff" fill-rule="evenodd" d="M 245.649 411.423 C 245.475,412.067 244.804,412.443 244.159,412.269 C 243.528,412.094 243.139,411.423 243.327,410.778 C 243.501,410.147 244.159,409.758 244.804,409.946 C 245.448,410.12 245.824,410.778 245.649,411.423z"/>
|
|
||||||
<path style="fill: #000000; fill-opacity: 1; stroke-opacity: 1; stroke-width: 0.02; stroke: #ffffff" fill-rule="evenodd" d="M 248.684 412.712 C 248.509,413.356 247.838,413.732 247.207,413.558 C 246.563,413.383 246.187,412.712 246.361,412.067 C 246.536,411.423 247.207,411.06 247.838,411.235 C 248.483,411.409 248.859,412.067 248.684,412.712z"/>
|
|
||||||
<path style="fill: #000000; fill-opacity: 1; stroke-opacity: 1; stroke-width: 0.02; stroke: #ffffff" fill-rule="evenodd" d="M 251.96 413.168 C 251.786,413.813 251.114,414.189 250.483,414.001 C 249.839,413.826 249.463,413.168 249.637,412.524 C 249.812,411.879 250.483,411.503 251.114,411.691 C 251.759,411.866 252.135,412.524 251.96,413.168z"/>
|
|
||||||
<path style="fill: #000000; fill-opacity: 1; stroke-opacity: 1; stroke-width: 0.02; stroke: #ffffff" fill-rule="evenodd" d="M 244.911 414.068 C 244.736,414.713 244.065,415.089 243.434,414.914 C 242.789,414.739 242.413,414.082 242.588,413.437 C 242.763,412.793 243.434,412.417 244.065,412.591 C 244.71,412.766 245.086,413.437 244.911,414.082 L 244.911,414.068z"/>
|
|
||||||
<path style="fill: #000000; fill-opacity: 1; stroke-opacity: 1; stroke-width: 0.02; stroke: #ffffff" fill-rule="evenodd" d="M 247.959 415.357 C 247.771,416.002 247.113,416.378 246.469,416.203 C 245.824,416.029 245.448,415.357 245.636,414.726 C 245.811,414.082 246.469,413.706 247.113,413.88 C 247.758,414.055 248.134,414.726 247.959,415.357z"/>
|
|
||||||
<path style="fill: #000000; fill-opacity: 1; stroke-opacity: 1; stroke-width: 0.02; stroke: #ffffff" fill-rule="evenodd" d="M 251.235 415.814 C 251.047,416.458 250.389,416.834 249.745,416.66 C 249.1,416.485 248.724,415.814 248.912,415.169 C 249.087,414.538 249.745,414.162 250.389,414.337 C 251.034,414.511 251.41,415.169 251.235,415.814z"/>
|
|
||||||
<path style="fill: none; stroke-opacity: 1; stroke-width: 0.8; stroke: #ffffff" d="M 246.428 417.156 C 246.415,417.21 246.307,417.237 246.187,417.21 C 246.079,417.17 245.999,417.103 246.025,417.036 C 246.039,416.982 246.146,416.955 246.254,416.982 C 246.361,417.009 246.442,417.089 246.428,417.143"/>
|
|
||||||
<path style="fill: none; stroke-opacity: 1; stroke-width: 0.8; stroke: #ffffff" d="M 246.025 417.036 L 245.636,418.419"/>
|
|
||||||
<path style="fill: none; stroke-opacity: 1; stroke-width: 0.8; stroke: #ffffff" d="M 246.079 417.156 L 245.73,418.445"/>
|
|
||||||
<path style="fill: none; stroke-opacity: 1; stroke-width: 0.8; stroke: #ffffff" d="M 246.428 417.156 L 246.039,418.526"/>
|
|
||||||
<path style="fill: none; stroke-opacity: 1; stroke-width: 0.8; stroke: #ffffff" d="M 246.307 417.21 L 245.958,418.499"/>
|
|
||||||
<path style="fill: none; stroke-opacity: 1; stroke-width: 0.8; stroke: #ffffff" d="M 248.751 397.19 L 248.483,398.143"/>
|
|
||||||
<path style="fill: none; stroke-opacity: 1; stroke-width: 0.8; stroke: #ffffff" d="M 248.859 397.217 L 248.59,398.184"/>
|
|
||||||
<path style="fill: none; stroke-opacity: 1; stroke-width: 0.8; stroke: #ffffff" d="M 254.27 398.707 L 254.001,399.674"/>
|
|
||||||
<path style="fill: none; stroke-opacity: 1; stroke-width: 0.8; stroke: #ffffff" d="M 254.162 398.68 L 253.894,399.647"/>
|
|
||||||
<path style="fill: none; stroke-opacity: 1; stroke-width: 0.8; stroke: #000000" d="M 259.762 386.193 C 259.762,386.193 260.097,384.796 260.299,383.83 C 260.661,381.963 260.688,381.023 260.688,381.023 C 260.688,380.768 260.621,380.553 260.393,380.486 L 259.305,380.191 C 259.077,380.124 258.916,380.271 258.768,380.5 C 258.768,380.5 258.338,381.359 257.748,383.118 C 257.425,384.058 257.13,385.226 257.13,385.226"/>
|
|
||||||
<path style="fill: none; stroke-opacity: 1; stroke-width: 0.8; stroke: #000000" d="M 259.896 385.683 C 259.023,385.347 258.15,385.038 257.251,384.756"/>
|
|
||||||
<path style="fill: none; stroke-opacity: 1; stroke-width: 0.8; stroke: #ffffff" d="M 249.033 385.871 C 250.819,386.126 252.739,386.529 254.525,387.025 C 256.311,387.522 258.164,388.153 259.829,388.852"/>
|
|
||||||
<path style="fill: #b7b79d; fill-opacity: 1; stroke-opacity: 1; stroke-width: 0.8; stroke: #ffffff" fill-rule="evenodd" d="M 256.7 398.922 C 256.633,399.164 256.391,399.298 256.15,399.231 L 246.858,396.666 C 246.616,396.599 246.482,396.357 246.549,396.129 L 248.174,390.248 C 248.241,390.006 248.483,389.872 248.711,389.939 L 258.016,392.504 C 258.258,392.571 258.392,392.813 258.325,393.054 L 256.7,398.935 L 256.7,398.922z"/>
|
|
||||||
<path style="fill: none; stroke-opacity: 1; stroke-width: 0.8; stroke: #ffffff" d="M 254.095 387.791 L 254.981,384.582"/>
|
|
||||||
<path style="fill: none; stroke-opacity: 1; stroke-width: 0.8; stroke: #ffffff" d="M 254.391 387.871 L 255.277,384.662"/>
|
|
||||||
</g>
|
|
||||||
<line style="fill: none; stroke-opacity: 1; stroke-width: 2; stroke-dasharray: 4; stroke: #000000" x1="327.424" y1="326.359" x2="444.266" y2="375.437"/>
|
|
||||||
<line style="fill: none; stroke-opacity: 1; stroke-width: 2; stroke-dasharray: 4; stroke: #000000" x1="259.522" y1="401.737" x2="439.089" y2="384.112"/>
|
|
||||||
<g>
|
|
||||||
<path style="fill: #7a7a5a; fill-opacity: 1; stroke: none" fill-rule="evenodd" d="M 290.594 477.19 C 290.943,475.941 292.38,469.684 292.447,468.811 C 292.514,467.938 292.192,466.851 291.722,466.623 C 291.749,466.314 291.749,466.139 291.749,466.139 C 291.641,466.099 291.521,466.059 291.413,466.005 L 291.453,466.018 C 291.453,466.018 291.776,464.622 291.977,463.655 C 292.34,461.802 292.38,460.862 292.38,460.862 C 292.367,460.607 292.299,460.379 292.071,460.312 L 290.984,460.016 C 290.755,459.949 290.594,460.097 290.446,460.325 C 290.446,460.325 290.017,461.184 289.426,462.957 C 289.104,463.883 288.808,465.065 288.808,465.065 L 288.822,465.065 C 288.177,464.85 287.519,464.662 286.861,464.474 C 285.169,464.004 283.491,463.655 281.799,463.4 C 281.799,463.4 281.719,463.548 281.571,463.83 C 281.061,463.776 280.228,464.555 279.839,465.334 C 279.449,466.112 277.476,472.222 277.126,473.471 C 276.777,474.719 276.119,477.915 275.824,479.499 C 275.529,481.084 275.26,483.85 274.24,487.529 C 273.635,489.704 272.669,492.954 272.158,494.296 C 272.024,494.659 270.963,496.445 272.507,497.062 C 274.025,497.667 276.294,498.311 277.435,498.633 C 278.577,498.942 280.846,499.546 282.457,499.815 C 284.095,500.084 284.109,497.989 284.176,497.613 C 284.431,496.203 285.263,492.913 285.854,490.738 C 286.875,487.046 288.07,484.548 288.634,483.031 C 289.184,481.514 290.245,478.439 290.594,477.19z"/>
|
|
||||||
<path style="fill: none; stroke-opacity: 1; stroke-width: 0.8; stroke: #000000" d="M 290.594 477.19 C 290.943,475.941 292.38,469.684 292.447,468.811 C 292.514,467.938 292.192,466.851 291.722,466.623 C 291.749,466.314 291.749,466.139 291.749,466.139 C 291.641,466.099 291.521,466.059 291.413,466.005 L 291.453,466.018 C 291.453,466.018 291.776,464.622 291.977,463.655 C 292.34,461.802 292.38,460.862 292.38,460.862 C 292.367,460.607 292.299,460.379 292.071,460.312 L 290.984,460.016 C 290.755,459.949 290.594,460.097 290.446,460.325 C 290.446,460.325 290.017,461.184 289.426,462.957 C 289.104,463.883 288.808,465.065 288.808,465.065 L 288.822,465.065 C 288.177,464.85 287.519,464.662 286.861,464.474 C 285.169,464.004 283.491,463.655 281.799,463.4 C 281.799,463.4 281.719,463.548 281.571,463.83 L 281.571,463.83 C 281.061,463.776 280.228,464.555 279.839,465.334 C 279.449,466.112 277.476,472.222 277.126,473.471 C 276.777,474.719 276.119,477.915 275.824,479.499 C 275.529,481.084 275.26,483.85 274.24,487.529 C 273.635,489.704 272.669,492.954 272.158,494.296 C 272.024,494.659 270.963,496.445 272.507,497.062 C 274.025,497.667 276.294,498.311 277.435,498.633 C 278.577,498.942 280.846,499.546 282.457,499.815 C 284.095,500.084 284.109,497.989 284.176,497.613 C 284.431,496.203 285.263,492.913 285.854,490.738 C 286.875,487.046 288.07,484.548 288.634,483.031 C 289.184,481.514 290.245,478.439 290.594,477.19"/>
|
|
||||||
<path style="fill: #b7b79d; fill-opacity: 1; stroke: none" fill-rule="evenodd" d="M 288.916 477.351 C 289.265,476.102 290.702,469.845 290.769,468.986 C 290.836,468.113 290.514,467.012 290.044,466.797 C 290.07,466.488 290.07,466.314 290.07,466.314 C 289.963,466.26 289.842,466.22 289.735,466.179 L 289.762,466.193 C 289.762,466.193 290.097,464.796 290.299,463.83 C 290.661,461.963 290.688,461.023 290.688,461.023 C 290.688,460.768 290.621,460.553 290.393,460.486 L 289.305,460.191 C 289.077,460.124 288.916,460.271 288.768,460.5 C 288.768,460.5 288.338,461.359 287.748,463.118 C 287.425,464.058 287.13,465.226 287.13,465.226 L 287.143,465.24 C 286.499,465.025 285.841,464.823 285.183,464.649 C 283.491,464.179 281.799,463.816 280.121,463.561 C 280.121,463.561 280.04,463.722 279.893,463.991 C 279.382,463.951 278.55,464.716 278.16,465.495 C 277.771,466.273 275.797,472.383 275.448,473.645 C 275.099,474.894 274.441,478.076 274.146,479.661 C 273.85,481.245 273.582,484.011 272.561,487.704 C 271.957,489.879 270.99,493.115 270.48,494.471 C 270.346,494.82 269.285,496.619 270.829,497.237 C 272.346,497.828 274.616,498.486 275.757,498.795 C 276.898,499.117 279.167,499.708 280.779,499.976 C 282.417,500.245 282.43,498.163 282.497,497.788 C 282.753,496.364 283.585,493.088 284.176,490.913 C 285.196,487.22 286.391,484.709 286.955,483.192 C 287.506,481.688 288.567,478.613 288.916,477.351z"/>
|
|
||||||
<path style="fill: none; stroke-opacity: 1; stroke-width: 0.8; stroke: #000000" d="M 288.916 477.351 C 289.265,476.102 290.702,469.845 290.769,468.986 C 290.836,468.113 290.514,467.012 290.044,466.797 C 290.07,466.488 290.07,466.314 290.07,466.314 C 289.963,466.26 289.842,466.22 289.735,466.179 L 289.762,466.193 C 289.762,466.193 290.097,464.796 290.299,463.83 C 290.661,461.963 290.688,461.023 290.688,461.023 C 290.688,460.768 290.621,460.553 290.393,460.486 L 289.305,460.191 C 289.077,460.124 288.916,460.271 288.768,460.5 C 288.768,460.5 288.338,461.359 287.748,463.118 C 287.425,464.058 287.13,465.226 287.13,465.226 L 287.143,465.24 C 286.499,465.025 285.841,464.823 285.183,464.649 C 283.491,464.179 281.799,463.816 280.121,463.561 C 280.121,463.561 280.04,463.722 279.893,463.991 L 279.893,463.991 C 279.382,463.951 278.55,464.716 278.16,465.495 C 277.771,466.273 275.797,472.383 275.448,473.645 C 275.099,474.894 274.441,478.076 274.146,479.661 C 273.85,481.245 273.582,484.011 272.561,487.704 C 271.957,489.879 270.99,493.115 270.48,494.471 C 270.346,494.82 269.285,496.619 270.829,497.237 C 272.346,497.828 274.616,498.486 275.757,498.795 C 276.898,499.117 279.167,499.708 280.779,499.976 C 282.417,500.245 282.43,498.163 282.497,497.788 C 282.753,496.364 283.585,493.088 284.176,490.913 C 285.196,487.22 286.391,484.709 286.955,483.192 C 287.506,481.688 288.567,478.613 288.916,477.351"/>
|
|
||||||
<path style="fill: #c9c9b6; fill-opacity: 1; stroke-opacity: 1; stroke-width: 0.8; stroke: #ecece7" fill-rule="evenodd" d="M 280.336 463.601 C 280.336,463.601 278.12,468.126 276.845,472.719 C 275.341,478.184 275.126,479.996 275.354,482.534 C 275.394,483.058 275.918,483.702 276.495,483.863 C 276.724,483.917 276.992,483.998 277.1,484.024 C 277.22,484.065 277.65,484.159 277.999,484.441 C 278.362,484.723 278.442,484.79 278.657,484.897 C 278.859,485.018 278.899,485.099 279.49,485.26 C 280.08,485.421 280.148,485.381 280.389,485.381 C 280.631,485.394 280.738,485.381 281.195,485.327 C 281.638,485.26 282.054,485.394 282.175,485.421 C 282.283,485.461 282.551,485.528 282.779,485.595 C 283.357,485.757 284.136,485.475 284.444,485.045 C 285.935,482.991 286.687,481.312 288.191,475.847 C 289.453,471.255 289.869,466.233 289.869,466.233 L 280.336,463.601z"/>
|
|
||||||
<path style="fill: #000000; fill-opacity: 1; stroke: none" fill-rule="evenodd" d="M 283.021 482.561 C 282.632,483.998 281.141,484.83 279.718,484.441 C 278.281,484.051 277.449,482.561 277.838,481.138 C 278.241,479.701 279.718,478.868 281.141,479.258 C 282.578,479.661 283.41,481.138 283.021,482.561z"/>
|
|
||||||
<path style="fill: #000000; fill-opacity: 1; stroke: none" fill-rule="evenodd" d="M 278.066 478.157 C 278.429,478.264 278.711,478.412 278.845,478.492 C 278.979,478.586 279.02,478.707 278.899,478.788 C 278.778,478.868 278.563,479.029 278.442,479.137 C 278.295,479.258 278.201,479.285 277.999,479.164 C 277.637,478.962 276.871,478.412 276.683,478.157 C 276.576,478.022 276.67,477.969 276.871,477.955 C 277.14,477.942 277.677,478.049 278.066,478.157z"/>
|
|
||||||
<path style="fill: #ff0000; fill-opacity: 1; stroke: none" fill-rule="evenodd" d="M 276.16 480.99 C 276.361,481.057 276.845,481.299 276.979,481.406 C 277.126,481.5 277.341,481.728 277.328,481.997 C 277.301,482.306 277.328,482.964 277.462,483.179 C 277.637,483.46 277.61,483.581 277.355,483.541 C 277.153,483.501 276.63,483.313 276.482,483.232 C 276.334,483.165 276.119,483.031 276.052,482.829 C 275.918,482.413 275.878,481.554 275.958,481.124 C 275.985,480.95 276.066,480.95 276.16,480.99z"/>
|
|
||||||
<path style="fill: none; stroke-opacity: 1; stroke-width: 0.8; stroke: #ffffff" d="M 283.021 482.561 C 282.632,483.998 281.141,484.83 279.718,484.441 C 278.281,484.051 277.449,482.561 277.838,481.138 C 278.241,479.701 279.718,478.868 281.141,479.258 C 282.578,479.661 283.41,481.138 283.021,482.561"/>
|
|
||||||
<path style="fill: none; stroke-opacity: 1; stroke-width: 0.8; stroke: #ffffff" d="M 278.066 478.157 C 278.429,478.264 278.711,478.412 278.845,478.492 C 278.979,478.586 279.02,478.707 278.899,478.788 C 278.778,478.868 278.563,479.029 278.442,479.137 C 278.295,479.258 278.201,479.285 277.999,479.164 C 277.637,478.962 276.871,478.412 276.683,478.157 C 276.576,478.022 276.67,477.969 276.871,477.955 C 277.14,477.942 277.677,478.049 278.066,478.157"/>
|
|
||||||
<path style="fill: none; stroke-opacity: 1; stroke-width: 0.8; stroke: #ffffff" d="M 276.16 480.99 C 276.361,481.057 276.845,481.299 276.979,481.406 C 277.126,481.5 277.341,481.728 277.328,481.997 C 277.301,482.306 277.328,482.964 277.462,483.179 C 277.637,483.46 277.61,483.581 277.355,483.541 C 277.153,483.501 276.63,483.313 276.482,483.232 C 276.334,483.165 276.119,483.031 276.052,482.829 C 275.918,482.413 275.878,481.554 275.958,481.124 C 275.985,480.95 276.066,480.95 276.16,480.99"/>
|
|
||||||
<path style="fill: #000000; fill-opacity: 1; stroke: none" fill-rule="evenodd" d="M 284.35 479.889 C 283.988,479.795 283.679,479.781 283.518,479.781 C 283.357,479.795 283.263,479.875 283.316,479.996 C 283.384,480.13 283.491,480.386 283.531,480.533 C 283.598,480.708 283.666,480.788 283.894,480.802 C 284.31,480.802 285.25,480.721 285.545,480.6 C 285.693,480.533 285.639,480.439 285.478,480.332 C 285.25,480.184 284.74,479.996 284.35,479.889z"/>
|
|
||||||
<path style="fill: #00ff00; fill-opacity: 1; stroke: none" fill-rule="evenodd" d="M 284.538 483.299 C 284.337,483.246 283.786,483.219 283.612,483.232 C 283.451,483.246 283.142,483.326 283.021,483.568 C 282.887,483.85 282.524,484.4 282.296,484.521 C 282.001,484.669 281.96,484.79 282.202,484.87 C 282.39,484.951 282.941,485.058 283.102,485.072 C 283.276,485.085 283.518,485.085 283.679,484.938 C 284.028,484.656 284.485,483.93 284.646,483.528 C 284.713,483.366 284.646,483.326 284.538,483.299z"/>
|
|
||||||
<path style="fill: none; stroke-opacity: 1; stroke-width: 0.8; stroke: #ffffff" d="M 284.35 479.889 C 283.988,479.795 283.679,479.781 283.518,479.781 C 283.357,479.795 283.263,479.875 283.316,479.996 C 283.384,480.13 283.491,480.386 283.531,480.533 C 283.598,480.708 283.666,480.788 283.894,480.802 C 284.31,480.802 285.25,480.721 285.545,480.6 C 285.693,480.533 285.639,480.439 285.478,480.332 C 285.25,480.184 284.74,479.996 284.35,479.889"/>
|
|
||||||
<path style="fill: none; stroke-opacity: 1; stroke-width: 0.8; stroke: #ffffff" d="M 284.538 483.299 C 284.337,483.246 283.786,483.219 283.612,483.232 C 283.451,483.246 283.142,483.326 283.021,483.568 C 282.887,483.85 282.524,484.4 282.296,484.521 C 282.001,484.669 281.96,484.79 282.202,484.87 C 282.39,484.951 282.941,485.058 283.102,485.072 C 283.276,485.085 283.518,485.085 283.679,484.938 C 284.028,484.656 284.485,483.93 284.646,483.528 C 284.713,483.366 284.646,483.326 284.538,483.299"/>
|
|
||||||
<path style="fill: none; stroke-opacity: 1; stroke-width: 0.8; stroke: #ffffff" d="M 284.095 467.791 L 284.981,464.582"/>
|
|
||||||
<path style="fill: none; stroke-opacity: 1; stroke-width: 0.8; stroke: #ffffff" d="M 284.391 467.871 L 285.277,464.662"/>
|
|
||||||
<path style="fill: none; stroke-opacity: 1; stroke-width: 0.8; stroke: #000000" d="M 290.688 460.889 C 290.688,460.889 290.178,460.741 289.748,460.634 C 289.372,460.527 288.835,460.379 288.835,460.379"/>
|
|
||||||
<path style="fill: none; stroke-opacity: 1; stroke-width: 0.8; stroke: #000000" d="M 288.916 477.351 C 289.265,476.102 290.702,469.845 290.769,468.986 C 290.836,468.113 290.514,467.012 290.044,466.797 C 290.07,466.488 290.07,466.314 290.07,466.314 C 289.963,466.26 289.842,466.22 289.735,466.179 L 289.762,466.193 C 289.762,466.193 290.097,464.796 290.299,463.83 C 290.661,461.963 290.688,461.023 290.688,461.023 C 290.688,460.768 290.621,460.553 290.393,460.486 L 289.305,460.191 C 289.077,460.124 288.916,460.271 288.768,460.5 C 288.768,460.5 288.338,461.359 287.748,463.118 C 287.425,464.058 287.13,465.226 287.13,465.226 L 287.143,465.24 C 286.499,465.025 285.841,464.823 285.183,464.649 C 283.491,464.179 281.799,463.816 280.121,463.561 C 280.121,463.561 280.04,463.722 279.893,463.991 L 279.893,463.991 C 279.382,463.951 278.55,464.716 278.16,465.495 C 277.771,466.273 275.797,472.383 275.448,473.645 C 275.099,474.894 274.441,478.076 274.146,479.661 C 273.85,481.245 273.582,484.011 272.561,487.704 C 271.957,489.879 270.99,493.115 270.48,494.471 C 270.346,494.82 269.285,496.619 270.829,497.237 C 272.346,497.828 274.616,498.486 275.757,498.795 C 276.898,499.117 279.167,499.708 280.779,499.976 C 282.417,500.245 282.43,498.163 282.497,497.788 C 282.753,496.364 283.585,493.088 284.176,490.913 C 285.196,487.22 286.391,484.709 286.955,483.192 C 287.506,481.688 288.567,478.613 288.916,477.351"/>
|
|
||||||
<path style="fill: #000000; fill-opacity: 1; stroke-opacity: 1; stroke-width: 0.02; stroke: #ffffff" fill-rule="evenodd" d="M 277.1 486.133 C 276.925,486.764 276.267,487.14 275.623,486.965 C 274.978,486.79 274.602,486.133 274.777,485.488 C 274.965,484.844 275.623,484.468 276.267,484.642 C 276.912,484.817 277.288,485.488 277.1,486.133z"/>
|
|
||||||
<path style="fill: #000000; fill-opacity: 1; stroke-opacity: 1; stroke-width: 0.02; stroke: #ffffff" fill-rule="evenodd" d="M 280.148 487.408 C 279.973,488.053 279.302,488.429 278.657,488.254 C 278.026,488.08 277.65,487.408 277.825,486.777 C 277.999,486.133 278.657,485.757 279.302,485.931 C 279.946,486.106 280.322,486.777 280.148,487.408z"/>
|
|
||||||
<path style="fill: #000000; fill-opacity: 1; stroke-opacity: 1; stroke-width: 0.02; stroke: #ffffff" fill-rule="evenodd" d="M 283.424 487.878 C 283.249,488.509 282.578,488.885 281.933,488.711 C 281.302,488.536 280.926,487.878 281.101,487.234 C 281.276,486.589 281.933,486.213 282.578,486.388 C 283.223,486.562 283.598,487.234 283.424,487.878z"/>
|
|
||||||
<path style="fill: #000000; fill-opacity: 1; stroke-opacity: 1; stroke-width: 0.02; stroke: #ffffff" fill-rule="evenodd" d="M 276.375 488.778 C 276.2,489.422 275.529,489.798 274.898,489.61 C 274.253,489.436 273.877,488.778 274.052,488.133 C 274.226,487.489 274.898,487.113 275.529,487.287 C 276.173,487.475 276.549,488.133 276.375,488.778z"/>
|
|
||||||
<path style="fill: #000000; fill-opacity: 1; stroke-opacity: 1; stroke-width: 0.02; stroke: #ffffff" fill-rule="evenodd" d="M 279.409 490.067 C 279.235,490.711 278.577,491.087 277.932,490.899 C 277.288,490.725 276.912,490.067 277.086,489.422 C 277.274,488.778 277.932,488.402 278.577,488.576 C 279.208,488.764 279.597,489.422 279.409,490.067z"/>
|
|
||||||
<path style="fill: #000000; fill-opacity: 1; stroke-opacity: 1; stroke-width: 0.02; stroke: #ffffff" fill-rule="evenodd" d="M 282.699 490.523 C 282.511,491.154 281.853,491.544 281.208,491.356 C 280.564,491.181 280.188,490.523 280.362,489.879 C 280.55,489.234 281.208,488.858 281.853,489.033 C 282.497,489.221 282.873,489.879 282.699,490.523z"/>
|
|
||||||
<path style="fill: #000000; fill-opacity: 1; stroke-opacity: 1; stroke-width: 0.02; stroke: #ffffff" fill-rule="evenodd" d="M 275.649 491.423 C 275.475,492.067 274.804,492.443 274.159,492.269 C 273.528,492.094 273.139,491.423 273.327,490.778 C 273.501,490.147 274.159,489.758 274.804,489.946 C 275.448,490.12 275.824,490.778 275.649,491.423z"/>
|
|
||||||
<path style="fill: #000000; fill-opacity: 1; stroke-opacity: 1; stroke-width: 0.02; stroke: #ffffff" fill-rule="evenodd" d="M 278.684 492.712 C 278.509,493.356 277.838,493.732 277.207,493.558 C 276.563,493.383 276.187,492.712 276.361,492.067 C 276.536,491.423 277.207,491.06 277.838,491.235 C 278.483,491.409 278.859,492.067 278.684,492.712z"/>
|
|
||||||
<path style="fill: #000000; fill-opacity: 1; stroke-opacity: 1; stroke-width: 0.02; stroke: #ffffff" fill-rule="evenodd" d="M 281.96 493.168 C 281.786,493.813 281.114,494.189 280.483,494.001 C 279.839,493.826 279.463,493.168 279.637,492.524 C 279.812,491.879 280.483,491.503 281.114,491.691 C 281.759,491.866 282.135,492.524 281.96,493.168z"/>
|
|
||||||
<path style="fill: #000000; fill-opacity: 1; stroke-opacity: 1; stroke-width: 0.02; stroke: #ffffff" fill-rule="evenodd" d="M 274.911 494.068 C 274.736,494.713 274.065,495.089 273.434,494.914 C 272.789,494.739 272.413,494.082 272.588,493.437 C 272.763,492.793 273.434,492.417 274.065,492.591 C 274.71,492.766 275.086,493.437 274.911,494.082 L 274.911,494.068z"/>
|
|
||||||
<path style="fill: #000000; fill-opacity: 1; stroke-opacity: 1; stroke-width: 0.02; stroke: #ffffff" fill-rule="evenodd" d="M 277.959 495.357 C 277.771,496.002 277.113,496.378 276.469,496.203 C 275.824,496.029 275.448,495.357 275.636,494.726 C 275.811,494.082 276.469,493.706 277.113,493.88 C 277.758,494.055 278.134,494.726 277.959,495.357z"/>
|
|
||||||
<path style="fill: #000000; fill-opacity: 1; stroke-opacity: 1; stroke-width: 0.02; stroke: #ffffff" fill-rule="evenodd" d="M 281.235 495.814 C 281.047,496.458 280.389,496.834 279.745,496.66 C 279.1,496.485 278.724,495.814 278.912,495.169 C 279.087,494.538 279.745,494.162 280.389,494.337 C 281.034,494.511 281.41,495.169 281.235,495.814z"/>
|
|
||||||
<path style="fill: none; stroke-opacity: 1; stroke-width: 0.8; stroke: #ffffff" d="M 276.428 497.156 C 276.415,497.21 276.307,497.237 276.187,497.21 C 276.079,497.17 275.999,497.103 276.025,497.036 C 276.039,496.982 276.146,496.955 276.254,496.982 C 276.361,497.009 276.442,497.089 276.428,497.143"/>
|
|
||||||
<path style="fill: none; stroke-opacity: 1; stroke-width: 0.8; stroke: #ffffff" d="M 276.025 497.036 L 275.636,498.419"/>
|
|
||||||
<path style="fill: none; stroke-opacity: 1; stroke-width: 0.8; stroke: #ffffff" d="M 276.079 497.156 L 275.73,498.445"/>
|
|
||||||
<path style="fill: none; stroke-opacity: 1; stroke-width: 0.8; stroke: #ffffff" d="M 276.428 497.156 L 276.039,498.526"/>
|
|
||||||
<path style="fill: none; stroke-opacity: 1; stroke-width: 0.8; stroke: #ffffff" d="M 276.307 497.21 L 275.958,498.499"/>
|
|
||||||
<path style="fill: none; stroke-opacity: 1; stroke-width: 0.8; stroke: #ffffff" d="M 278.751 477.19 L 278.483,478.143"/>
|
|
||||||
<path style="fill: none; stroke-opacity: 1; stroke-width: 0.8; stroke: #ffffff" d="M 278.859 477.217 L 278.59,478.184"/>
|
|
||||||
<path style="fill: none; stroke-opacity: 1; stroke-width: 0.8; stroke: #ffffff" d="M 284.27 478.707 L 284.001,479.674"/>
|
|
||||||
<path style="fill: none; stroke-opacity: 1; stroke-width: 0.8; stroke: #ffffff" d="M 284.162 478.68 L 283.894,479.647"/>
|
|
||||||
<path style="fill: none; stroke-opacity: 1; stroke-width: 0.8; stroke: #000000" d="M 289.762 466.193 C 289.762,466.193 290.097,464.796 290.299,463.83 C 290.661,461.963 290.688,461.023 290.688,461.023 C 290.688,460.768 290.621,460.553 290.393,460.486 L 289.305,460.191 C 289.077,460.124 288.916,460.271 288.768,460.5 C 288.768,460.5 288.338,461.359 287.748,463.118 C 287.425,464.058 287.13,465.226 287.13,465.226"/>
|
|
||||||
<path style="fill: none; stroke-opacity: 1; stroke-width: 0.8; stroke: #000000" d="M 289.896 465.683 C 289.023,465.347 288.15,465.038 287.251,464.756"/>
|
|
||||||
<path style="fill: none; stroke-opacity: 1; stroke-width: 0.8; stroke: #ffffff" d="M 279.033 465.871 C 280.819,466.126 282.739,466.529 284.525,467.025 C 286.311,467.522 288.164,468.153 289.829,468.852"/>
|
|
||||||
<path style="fill: #b7b79d; fill-opacity: 1; stroke-opacity: 1; stroke-width: 0.8; stroke: #ffffff" fill-rule="evenodd" d="M 286.7 478.922 C 286.633,479.164 286.391,479.298 286.15,479.231 L 276.858,476.666 C 276.616,476.599 276.482,476.357 276.549,476.129 L 278.174,470.248 C 278.241,470.006 278.483,469.872 278.711,469.939 L 288.016,472.504 C 288.258,472.571 288.392,472.813 288.325,473.054 L 286.7,478.935 L 286.7,478.922z"/>
|
|
||||||
<path style="fill: none; stroke-opacity: 1; stroke-width: 0.8; stroke: #ffffff" d="M 284.095 467.791 L 284.981,464.582"/>
|
|
||||||
<path style="fill: none; stroke-opacity: 1; stroke-width: 0.8; stroke: #ffffff" d="M 284.391 467.871 L 285.277,464.662"/>
|
|
||||||
</g>
|
|
||||||
<line style="fill: none; stroke-opacity: 1; stroke-width: 2; stroke-dasharray: 4; stroke: #000000" x1="290.438" y1="479.005" x2="440.053" y2="393.475"/>
|
|
||||||
<g>
|
|
||||||
<path style="fill: none; stroke-opacity: 1; stroke-width: 0.8; stroke: #00aed9" d="M 714.565 323.746 L 714.565,310.35"/>
|
|
||||||
<path style="fill: none; stroke-opacity: 1; stroke-width: 4; stroke: #00aed9" d="M 714.565 323.53 L 714.565,314.341"/>
|
|
||||||
<path style="fill: #000000; fill-opacity: 1; stroke: none" fill-rule="evenodd" d="M 714.954 311.638 L 714.135,311.638 L 714.135,310 L 714.954,310 L 714.954,311.638z"/>
|
|
||||||
<path style="fill: none; stroke-opacity: 1; stroke-width: 2; stroke: #00aed9" d="M 714.954 311.638 L 714.135,311.638 L 714.135,310 L 714.954,310 L 714.954,311.638"/>
|
|
||||||
<path style="fill: none; stroke-opacity: 1; stroke-width: 0.8; stroke: #00aed9" d="M 694.709 323.746 L 694.709,310.35"/>
|
|
||||||
<path style="fill: none; stroke-opacity: 1; stroke-width: 4; stroke: #00aed9" d="M 694.709 323.53 L 694.709,314.341"/>
|
|
||||||
<path style="fill: #000000; fill-opacity: 1; stroke: none" fill-rule="evenodd" d="M 695.098 311.638 L 694.279,311.638 L 694.279,310 L 695.098,310 L 695.098,311.638z"/>
|
|
||||||
<path style="fill: none; stroke-opacity: 1; stroke-width: 2; stroke: #00aed9" d="M 695.098 311.638 L 694.279,311.638 L 694.279,310 L 695.098,310 L 695.098,311.638"/>
|
|
||||||
<path style="fill: #00aed9; fill-opacity: 1; stroke: none" fill-rule="evenodd" d="M 720.119 325.447 C 720.119,328.681 713.377,331.303 705.06,331.303 C 696.742,331.303 690,328.681 690,325.447 L 690,334.025 C 690,337.26 696.742,339.882 705.06,339.882 C 713.377,339.882 720.119,337.26 720.119,334.025 L 720.119,325.447z"/>
|
|
||||||
<path style="fill: none; stroke-opacity: 1; stroke-width: 0.8; stroke: #ffffff" d="M 720.119 325.447 C 720.119,328.681 713.377,331.303 705.06,331.303 C 696.742,331.303 690,328.681 690,325.447 L 690,334.025 C 690,337.26 696.742,339.882 705.06,339.882 C 713.377,339.882 720.119,337.26 720.119,334.025 L 720.119,325.447"/>
|
|
||||||
<path style="fill: #00aed9; fill-opacity: 1; stroke: none" fill-rule="evenodd" d="M 705.06 331.303 C 713.377,331.303 720.119,328.681 720.119,325.447 C 720.119,322.212 713.377,319.59 705.06,319.59 C 696.742,319.59 690,322.212 690,325.447 C 690,328.681 696.742,331.303 705.06,331.303z"/>
|
|
||||||
<path style="fill: none; stroke-opacity: 1; stroke-width: 0.8; stroke: #ffffff" d="M 705.06 331.303 C 713.377,331.303 720.119,328.681 720.119,325.447 C 720.119,322.212 713.377,319.59 705.06,319.59 C 696.742,319.59 690,322.212 690,325.447 C 690,328.681 696.742,331.303 705.06,331.303"/>
|
|
||||||
<path style="fill: #ffffff; fill-opacity: 1; stroke: none" fill-rule="evenodd" d="M 701.621 323.157 L 702.864,325.022 L 698.163,326.108 L 699.19,325.254 L 691.923,324.012 L 693.746,322.645 L 700.758,323.832 L 701.621,323.157z"/>
|
|
||||||
<path style="fill: #ffffff; fill-opacity: 1; stroke: none" fill-rule="evenodd" d="M 708.237 327.68 L 707.388,325.757 L 711.629,324.91 L 710.894,325.568 L 717.962,326.776 L 716.268,328.133 L 709.24,326.813 L 708.237,327.68z"/>
|
|
||||||
<path style="fill: #ffffff; fill-opacity: 1; stroke: none" fill-rule="evenodd" d="M 705.918 322.138 L 710.668,320.838 L 710.724,322.874 L 709.538,322.647 L 707.218,324.57 L 705.006,324.247 L 707.399,322.367 L 705.918,322.138z"/>
|
|
||||||
<path style="fill: #ffffff; fill-opacity: 1; stroke: none" fill-rule="evenodd" d="M 703.882 329.434 L 699.359,330.281 L 699.19,328.19 L 700.489,328.472 L 702.979,326.345 L 705.183,326.719 L 702.525,329.037 L 703.882,329.434z"/>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<path style="fill: none; stroke-opacity: 1; stroke-width: 0.8; stroke: #00aed9" d="M 774.565 453.746 L 774.565,440.35"/>
|
|
||||||
<path style="fill: none; stroke-opacity: 1; stroke-width: 4; stroke: #00aed9" d="M 774.565 453.53 L 774.565,444.341"/>
|
|
||||||
<path style="fill: #000000; fill-opacity: 1; stroke: none" fill-rule="evenodd" d="M 774.954 441.638 L 774.135,441.638 L 774.135,440 L 774.954,440 L 774.954,441.638z"/>
|
|
||||||
<path style="fill: none; stroke-opacity: 1; stroke-width: 2; stroke: #00aed9" d="M 774.954 441.638 L 774.135,441.638 L 774.135,440 L 774.954,440 L 774.954,441.638"/>
|
|
||||||
<path style="fill: none; stroke-opacity: 1; stroke-width: 0.8; stroke: #00aed9" d="M 754.709 453.746 L 754.709,440.35"/>
|
|
||||||
<path style="fill: none; stroke-opacity: 1; stroke-width: 4; stroke: #00aed9" d="M 754.709 453.53 L 754.709,444.341"/>
|
|
||||||
<path style="fill: #000000; fill-opacity: 1; stroke: none" fill-rule="evenodd" d="M 755.098 441.638 L 754.279,441.638 L 754.279,440 L 755.098,440 L 755.098,441.638z"/>
|
|
||||||
<path style="fill: none; stroke-opacity: 1; stroke-width: 2; stroke: #00aed9" d="M 755.098 441.638 L 754.279,441.638 L 754.279,440 L 755.098,440 L 755.098,441.638"/>
|
|
||||||
<path style="fill: #00aed9; fill-opacity: 1; stroke: none" fill-rule="evenodd" d="M 780.119 455.447 C 780.119,458.681 773.377,461.303 765.06,461.303 C 756.742,461.303 750,458.681 750,455.447 L 750,464.025 C 750,467.26 756.742,469.882 765.06,469.882 C 773.377,469.882 780.119,467.26 780.119,464.025 L 780.119,455.447z"/>
|
|
||||||
<path style="fill: none; stroke-opacity: 1; stroke-width: 0.8; stroke: #ffffff" d="M 780.119 455.447 C 780.119,458.681 773.377,461.303 765.06,461.303 C 756.742,461.303 750,458.681 750,455.447 L 750,464.025 C 750,467.26 756.742,469.882 765.06,469.882 C 773.377,469.882 780.119,467.26 780.119,464.025 L 780.119,455.447"/>
|
|
||||||
<path style="fill: #00aed9; fill-opacity: 1; stroke: none" fill-rule="evenodd" d="M 765.06 461.303 C 773.377,461.303 780.119,458.681 780.119,455.447 C 780.119,452.212 773.377,449.59 765.06,449.59 C 756.742,449.59 750,452.212 750,455.447 C 750,458.681 756.742,461.303 765.06,461.303z"/>
|
|
||||||
<path style="fill: none; stroke-opacity: 1; stroke-width: 0.8; stroke: #ffffff" d="M 765.06 461.303 C 773.377,461.303 780.119,458.681 780.119,455.447 C 780.119,452.212 773.377,449.59 765.06,449.59 C 756.742,449.59 750,452.212 750,455.447 C 750,458.681 756.742,461.303 765.06,461.303"/>
|
|
||||||
<path style="fill: #ffffff; fill-opacity: 1; stroke: none" fill-rule="evenodd" d="M 761.621 453.157 L 762.864,455.022 L 758.163,456.108 L 759.19,455.254 L 751.923,454.012 L 753.746,452.645 L 760.758,453.832 L 761.621,453.157z"/>
|
|
||||||
<path style="fill: #ffffff; fill-opacity: 1; stroke: none" fill-rule="evenodd" d="M 768.237 457.68 L 767.388,455.757 L 771.629,454.91 L 770.894,455.568 L 777.962,456.776 L 776.268,458.133 L 769.24,456.813 L 768.237,457.68z"/>
|
|
||||||
<path style="fill: #ffffff; fill-opacity: 1; stroke: none" fill-rule="evenodd" d="M 765.918 452.138 L 770.668,450.838 L 770.724,452.874 L 769.538,452.647 L 767.218,454.57 L 765.006,454.247 L 767.399,452.367 L 765.918,452.138z"/>
|
|
||||||
<path style="fill: #ffffff; fill-opacity: 1; stroke: none" fill-rule="evenodd" d="M 763.882 459.434 L 759.359,460.281 L 759.19,458.19 L 760.489,458.472 L 762.979,456.345 L 765.183,456.719 L 762.525,459.037 L 763.882,459.434z"/>
|
|
||||||
</g>
|
|
||||||
<text font-size="21.4489" style="fill: #000000; fill-opacity: 1; stroke: none;text-anchor:start;font-family:sans-serif;font-style:italic;font-weight:normal" x="270" y="430">
|
|
||||||
<tspan x="270" y="430">Clients</tspan>
|
|
||||||
</text>
|
|
||||||
</g>
|
|
||||||
<g id="to-mesh">
|
|
||||||
<g>
|
|
||||||
<line style="fill: none; stroke-opacity: 1; stroke-width: 4; stroke: #800080" x1="480" y1="380" x2="568" y2="380"/>
|
|
||||||
<polygon style="fill: #800080; fill-opacity: 1; stroke-opacity: 1; stroke-width: 4; stroke: #800080" fill-rule="evenodd" points="568,385 578,380 568,375 "/>
|
|
||||||
</g>
|
|
||||||
<rect style="fill: none; stroke-opacity: 1; stroke-width: 2; stroke-dasharray: 20; stroke: #000000" x="430" y="290" width="380" height="220" rx="0" ry="0"/>
|
|
||||||
</g>
|
|
||||||
</svg>
|
|
Before Width: | Height: | Size: 99 KiB |
@ -1,44 +0,0 @@
|
|||||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
|
||||||
<!-- Created with Inkscape (http://www.inkscape.org/) -->
|
|
||||||
<svg xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:cc="http://web.resource.org/cc/" 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://inkscape.sourceforge.net/DTD/sodipodi-0.dtd" xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" version="1.0" width="900pt" height="600pt" id="svg2" sodipodi:version="0.32" inkscape:version="0.43" sodipodi:docname="multicast.svg" sodipodi:docbase="/home/cyberix/Desktop">
|
|
||||||
<metadata id="metadata5027">
|
|
||||||
<rdf:RDF>
|
|
||||||
<cc:Work rdf:about="">
|
|
||||||
<dc:format>image/svg+xml</dc:format>
|
|
||||||
<dc:type rdf:resource="http://purl.org/dc/dcmitype/StillImage"/>
|
|
||||||
</cc:Work>
|
|
||||||
</rdf:RDF>
|
|
||||||
</metadata>
|
|
||||||
<sodipodi:namedview inkscape:window-height="555" inkscape:window-width="822" inkscape:pageshadow="2" inkscape:pageopacity="0.0" borderopacity="1.0" bordercolor="#666666" pagecolor="#ffffff" id="base" inkscape:zoom="1" inkscape:cx="381.10844" inkscape:cy="421.95237" inkscape:window-x="83" inkscape:window-y="46" inkscape:current-layer="svg2"/>
|
|
||||||
<defs id="defs4">
|
|
||||||
<marker refX="0" refY="0" orient="auto" style="overflow:visible" id="Arrow2Lend">
|
|
||||||
<path d="M 8.7185878,4.0337352 L -2.2072895,0.016013256 L 8.7185884,-4.0017078 C 6.97309,-1.6296469 6.9831476,1.6157441 8.7185878,4.0337352 z " transform="matrix(-1.1,0,0,-1.1,5.5,0)" style="font-size:12px;fill-rule:evenodd;stroke-width:0.625;stroke-linejoin:round" id="path3334"/>
|
|
||||||
</marker>
|
|
||||||
<marker refX="0" refY="0" orient="auto" style="overflow:visible" id="Arrow1Mstart">
|
|
||||||
<path d="M 0,0 L 5,-5 L -12.5,0 L 5,5 L 0,0 z " transform="scale(0.4,0.4)" style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;marker-start:none" id="path3349"/>
|
|
||||||
</marker>
|
|
||||||
<marker refX="0" refY="0" orient="auto" style="overflow:visible" id="Arrow1Lstart">
|
|
||||||
<path d="M 0,0 L 5,-5 L -12.5,0 L 5,5 L 0,0 z " transform="scale(0.8,0.8)" style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;marker-start:none" id="path3355"/>
|
|
||||||
</marker>
|
|
||||||
<marker refX="0" refY="0" orient="auto" style="overflow:visible" id="Arrow2Mend">
|
|
||||||
<path d="M 8.7185878,4.0337352 L -2.2072895,0.016013256 L 8.7185884,-4.0017078 C 6.97309,-1.6296469 6.9831476,1.6157441 8.7185878,4.0337352 z " transform="matrix(-0.6,0,0,-0.6,3,0)" style="font-size:12px;fill-rule:evenodd;stroke-width:0.625;stroke-linejoin:round" id="path3328"/>
|
|
||||||
</marker>
|
|
||||||
<marker refX="0" refY="0" orient="auto" style="overflow:visible" id="Arrow1Mend">
|
|
||||||
<path d="M 0,0 L 5,-5 L -12.5,0 L 5,5 L 0,0 z " transform="scale(-0.4,-0.4)" style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;marker-start:none" id="path3346"/>
|
|
||||||
</marker>
|
|
||||||
<marker refX="0" refY="0" orient="auto" style="overflow:visible" id="Arrow1Lend">
|
|
||||||
<path d="M 0,0 L 5,-5 L -12.5,0 L 5,5 L 0,0 z " transform="scale(-0.8,-0.8)" style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;marker-start:none" id="path3352"/>
|
|
||||||
</marker>
|
|
||||||
</defs>
|
|
||||||
<path id="path4261" style="fill:#ff5555;fill-opacity:1;stroke:#000000;stroke-width:7.57058573;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" d="M 223.53106,327.10441 C 223.53106,352.62811 202.95773,373.31911 177.57924,373.31911 C 152.20074,373.31911 131.62741,352.62811 131.62741,327.10441 C 131.62741,301.58081 152.20074,280.88981 177.57924,280.88981 C 202.95773,280.88981 223.53106,301.58081 223.53106,327.10441 z "/>
|
|
||||||
<path id="path4263" style="fill:#ffff33;fill-opacity:1;stroke:#000000;stroke-width:7.57058573;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" d="M 1037.931,293.05631 C 1037.931,318.58001 1017.3577,339.27101 991.97924,339.27101 C 966.60074,339.27101 946.02741,318.58001 946.02741,293.05631 C 946.02741,267.53271 966.60074,246.84171 991.97924,246.84171 C 1017.3577,246.84171 1037.931,267.53271 1037.931,293.05631 z "/>
|
|
||||||
<path id="path4265" style="fill:#ffff33;fill-opacity:1;stroke:#000000;stroke-width:7.57058573;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" d="M 632.21606,104.97986 C 632.21606,130.50353 611.64273,151.19455 586.26424,151.19455 C 560.88574,151.19455 540.31241,130.50353 540.31241,104.97986 C 540.31241,79.456184 560.88574,58.765174 586.26424,58.765174 C 611.64273,58.765174 632.21606,79.456184 632.21606,104.97986 z "/>
|
|
||||||
<path id="path4267" style="fill:#55ff55;fill-opacity:1;stroke:#000000;stroke-width:7.57058573;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" d="M 603.64506,607.83681 C 603.64506,633.36051 583.07173,654.05151 557.69324,654.05151 C 532.31474,654.05151 511.74141,633.36051 511.74141,607.83681 C 511.74141,582.31321 532.31474,561.62221 557.69324,561.62221 C 583.07173,561.62221 603.64506,582.31321 603.64506,607.83681 z "/>
|
|
||||||
<path id="path4269" style="fill:#55ff55;fill-opacity:1;stroke:#000000;stroke-width:7.57058573;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" d="M 903.64506,147.83696 C 903.64506,173.36063 883.07173,194.05161 857.69324,194.05161 C 832.31474,194.05161 811.74141,173.36063 811.74141,147.83696 C 811.74141,122.31328 832.31474,101.62227 857.69324,101.62227 C 883.07173,101.62227 903.64506,122.31328 903.64506,147.83696 z "/>
|
|
||||||
<path id="path4271" style="fill:#ffff33;fill-opacity:1;stroke:#000000;stroke-width:7.57058573;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" d="M 817.93106,413.55121 C 817.93106,439.07491 797.35773,459.76591 771.97924,459.76591 C 746.60074,459.76591 726.02741,439.07491 726.02741,413.55121 C 726.02741,388.02761 746.60074,367.33661 771.97924,367.33661 C 797.35773,367.33661 817.93106,388.02761 817.93106,413.55121 z "/>
|
|
||||||
<path id="path4273" style="fill:#55ff55;fill-opacity:1;stroke:#000000;stroke-width:7.57058573;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" d="M 915.07406,584.97981 C 915.07406,610.50351 894.50073,631.19451 869.12224,631.19451 C 843.74374,631.19451 823.17041,610.50351 823.17041,584.97981 C 823.17041,559.45621 843.74374,538.76521 869.12224,538.76521 C 894.50073,538.76521 915.07406,559.45621 915.07406,584.97981 z "/>
|
|
||||||
<path id="path4277" style="fill:none;fill-opacity:0.75;fill-rule:evenodd;stroke:#000000;stroke-width:4.69999981;stroke-linecap:butt;stroke-linejoin:miter;marker-start:none;marker-end:url(#Arrow2Lend);stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" d="M 369.68244,325.81177 L 812.01072,165.86573" sodipodi:nodetypes="cc"/>
|
|
||||||
<path id="path4281" style="fill:none;fill-opacity:0.75;fill-rule:evenodd;stroke:#000000;stroke-width:4.69999981;stroke-linecap:butt;stroke-linejoin:miter;marker-start:none;marker-end:url(#Arrow2Lend);stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" d="M 366.80669,324.95185 L 520.83602,583.62361" sodipodi:nodetypes="cc"/>
|
|
||||||
<path id="path4287" style="fill:none;fill-opacity:0.75;fill-rule:evenodd;stroke:#000000;stroke-width:4.69999981;stroke-linecap:butt;stroke-linejoin:miter;marker-start:none;marker-end:url(#Arrow2Lend);stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" d="M 368.22207,325.49587 L 828.71412,568.06311" sodipodi:nodetypes="cc"/>
|
|
||||||
<path style="fill:none;fill-opacity:0.75;fill-rule:evenodd;stroke:#000000;stroke-width:4.69999981;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" d="M 226.9654,327.86162 L 369.65596,325.86694" id="path1410" sodipodi:nodetypes="cc"/>
|
|
||||||
</svg>
|
|
Before Width: | Height: | Size: 7.3 KiB |
@ -1,170 +0,0 @@
|
|||||||
gluon-mesh-batman-adv
|
|
||||||
=====================
|
|
||||||
|
|
||||||
.. image:: gluon-mesh-batman-adv-logo.svg
|
|
||||||
:width: 300 px
|
|
||||||
|
|
||||||
B.A.T.M.A.N. Advanced (often referenced as batman-adv) is an implementation of
|
|
||||||
the B.A.T.M.A.N. routing protocol in form of a linux kernel module operating on layer 2.
|
|
||||||
|
|
||||||
Layer 2 means that all client devices will operate in the same, virtual broadcast
|
|
||||||
domain and will see each other "as if they were connected to one giant switch".
|
|
||||||
|
|
||||||
This comes with a set of advantages (like quick and economical client device roaming,
|
|
||||||
layer 3 protocol agnosticism, broadcast/multicast). But also impediments, especially
|
|
||||||
layer 2 multicast overhead - which Gluon tries to mitigate to achieve a certain degree
|
|
||||||
of scalability. See :doc:`gluon-ebtables-filter-multicast` and
|
|
||||||
:ref:`batman-adv-multicast-architecture` for details.
|
|
||||||
|
|
||||||
B.A.T.M.A.N. Advanced project homepage:
|
|
||||||
|
|
||||||
* https://www.open-mesh.org/projects/batman-adv/wiki/Wiki
|
|
||||||
|
|
||||||
B.A.T.M.A.N. Routing Algorithms
|
|
||||||
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
|
||||||
|
|
||||||
Two routing algorithms are selectable via
|
|
||||||
:ref:`site.conf mesh section <user-site-mesh>`: BATMAN_IV and BATMAN_V.
|
|
||||||
|
|
||||||
BATMAN_IV - stable
|
|
||||||
""""""""""""""""""
|
|
||||||
|
|
||||||
This is the recommended algorithm to use with `gluon-mesh-batman-adv-15`.
|
|
||||||
|
|
||||||
BATMAN_V - experimental
|
|
||||||
"""""""""""""""""""""""
|
|
||||||
|
|
||||||
This is the experimental B.A.T.M.A.N. routing algorithm. It is packet format /
|
|
||||||
compatibility stable but is still in development.
|
|
||||||
|
|
||||||
For more details, see:
|
|
||||||
|
|
||||||
* https://www.open-mesh.org/projects/batman-adv/wiki/BATMAN_V
|
|
||||||
|
|
||||||
.. _batman-adv-multicast-architecture:
|
|
||||||
|
|
||||||
Multicast Architecture
|
|
||||||
----------------------
|
|
||||||
|
|
||||||
.. image:: gluon-mesh-batman-adv-multicast.svg
|
|
||||||
:width: 300 px
|
|
||||||
|
|
||||||
While generally broadcast capability is a nice feature of a layer 2
|
|
||||||
mesh protocol, it quickly reaches its limit.
|
|
||||||
|
|
||||||
For meshes with about **50 nodes / 100 clients, or more** it is therefore highly
|
|
||||||
recommended to add the :doc:`gluon-ebtables-filter-multicast`
|
|
||||||
package. Also, with the *mesh-batman-adv-15* feature,
|
|
||||||
:doc:`gluon-ebtables-limit-arp` is selected by default.
|
|
||||||
|
|
||||||
Furthermore, by default IGMP and MLD messages are filtered. See
|
|
||||||
:ref:`site.conf mesh section <user-site-mesh>` and
|
|
||||||
:ref:`igmp-mld-domain-segmentation` for details.
|
|
||||||
|
|
||||||
To achieve some level of scalability for multicast, multicast group
|
|
||||||
awareness is implemented and utilized in the following ways:
|
|
||||||
|
|
||||||
Node-Local Multicast Handling
|
|
||||||
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
|
||||||
|
|
||||||
.. image:: gluon-mesh-batman-adv-multicast-architecture-to-clients.svg
|
|
||||||
|
|
||||||
A Gluon node sends IGMP/MLD Queries with the following parameters on its
|
|
||||||
local segment:
|
|
||||||
|
|
||||||
* Interval: 20 seconds
|
|
||||||
* Robustness: 9
|
|
||||||
* Query Response Interval: 5 seconds
|
|
||||||
|
|
||||||
This way, through the returning IGMP/MLD reports, the node learns which
|
|
||||||
multicast groups its clients are interested in.
|
|
||||||
|
|
||||||
This is then used to deliver multicast packets to its own Wifi clients
|
|
||||||
via individual Wifi unicast transmissions instead of a broadcast transmission.
|
|
||||||
|
|
||||||
The advantages of this are:
|
|
||||||
|
|
||||||
* Usually higher bitrates: Mostly lower airtime usage
|
|
||||||
* Acknowledged, retried transmissions (ARQ): Higher reliability
|
|
||||||
* If no local client is interested: Avoiding the transmission, no airtime usage
|
|
||||||
|
|
||||||
Notably multicast for IPv6 Neighbor Discovery usually has only a single
|
|
||||||
multicast listener in the case of address resolution and usually no
|
|
||||||
multicast listener for duplicate address detection. Which are the ideal
|
|
||||||
cases for multicast snooping / multicast to unicast.
|
|
||||||
|
|
||||||
The unicast delivery is achieved through utilizing the multicast-to-unicast
|
|
||||||
feature in OpenWrt/netifd. Which in turn utilizes the multicast-to-unicast
|
|
||||||
conversion and hairpin features of the Linux bridge, plus the hostapd client
|
|
||||||
isolation feature, to hand over full delivery control to the bridge.
|
|
||||||
|
|
||||||
Mesh-wide Multicast Handling
|
|
||||||
^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
|
||||||
|
|
||||||
.. image:: gluon-mesh-batman-adv-multicast-architecture-to-mesh.svg
|
|
||||||
|
|
||||||
To be able to avoid transmissions not only on the "last mile", the AP interface
|
|
||||||
to the local clients, but also from the "last mile" into the mesh in the future
|
|
||||||
multicast listener state is propagated through the mesh:
|
|
||||||
|
|
||||||
batman-adv (compat 15) taps into the Linux bridge and inherits the multicast
|
|
||||||
groups into its translation table. Which then takes care of efficiently
|
|
||||||
distributing this knowledge to other nodes.
|
|
||||||
|
|
||||||
While by that the receiver side is ready to go, the sender part in batman-adv
|
|
||||||
is disabled for now in Gluon. It will be enabled in a future release.
|
|
||||||
|
|
||||||
.. _igmp-mld-domain-segmentation:
|
|
||||||
|
|
||||||
IGMP/MLD Domain Segmentation
|
|
||||||
^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
|
||||||
|
|
||||||
.. image:: gluon-mesh-batman-adv-multicast-architecture-segmentation.svg
|
|
||||||
|
|
||||||
Internet Group Membership Protocol and Multicast Listener Discovery Protocol
|
|
||||||
are the standardized network protocols to query, report and learn multicast
|
|
||||||
group memberships on the local link for IPv4 (IGMP) and IPv6 (MLD).
|
|
||||||
|
|
||||||
By default Gluon filters IGMP and MLD queries and reports towards the mesh
|
|
||||||
and runs an IGMP/MLD querier on each node for its own local clients.
|
|
||||||
Furthermore Gluon tags the mesh side bridge port (bat0) as a multicast
|
|
||||||
router port.
|
|
||||||
|
|
||||||
That way, even though the Linux client bridge in Gluon is unable to learn
|
|
||||||
about multicast memberships behind other nodes, the multicast router port
|
|
||||||
flag will force it to unconditionally hand over all multicast packets to
|
|
||||||
batman-adv. Which even with IGMP/MLD filtered, will have full multicast
|
|
||||||
membership knowledge through its own propagation through the batman-adv
|
|
||||||
translation table.
|
|
||||||
|
|
||||||
Advantages are:
|
|
||||||
|
|
||||||
* Reduced overhead through reactive batman-adv multicast TT vs.
|
|
||||||
periodic IGMP/MLD messages in the mesh
|
|
||||||
* Increased IGMP/MLD snooping robustness via local, per node
|
|
||||||
IGMP/MLD queriers
|
|
||||||
* DDoS vector mitigation
|
|
||||||
|
|
||||||
**Note:** For nodes running an operating system other than Gluon, but a bridge
|
|
||||||
interface on top of the batman-adv interface, you will need to set the
|
|
||||||
multicast router flag there manually:
|
|
||||||
|
|
||||||
``debian$ echo 2 > /sys/class/net/bat0/brport/multicast_router``
|
|
||||||
|
|
||||||
"2" for this parameter means to always assume a multicast router behind
|
|
||||||
this bridge port and to therefore forward all multicast packets to this
|
|
||||||
port. Versus the default of "1" which means to learn about multicast
|
|
||||||
routers via IGMP/MLD Queries, PIM and MRD messages; or "0" to always
|
|
||||||
assume that there is no multicast router behind this port, meaning
|
|
||||||
to only forward multicast to this port if an according multicast
|
|
||||||
listener on this link was detected.
|
|
||||||
|
|
||||||
Further limitations: IGMP/MLD snooping switches (e.g. "enterprise switches")
|
|
||||||
behind the client network of a node (LAN ports) are unsupported. It is
|
|
||||||
advised to disable IGMP/MLD snooping on those enterprise switches for now
|
|
||||||
or to at least manually mark the port to the Gluon router as a
|
|
||||||
"multicast router port".
|
|
||||||
|
|
||||||
Alternatively, the filtering of IGMP/MLD reports can be disabled via
|
|
||||||
the site.conf (which is not recommended in large meshes though).
|
|
||||||
See :ref:`site.conf mesh section <user-site-mesh>` for details.
|
|
@ -1,49 +0,0 @@
|
|||||||
gluon-mesh-wireless-sae
|
|
||||||
=======================
|
|
||||||
|
|
||||||
This package adds support for SAE on 802.11s mesh connections.
|
|
||||||
|
|
||||||
Enabling this package will require all 802.11s mesh connections
|
|
||||||
to be encrypted using the SAE key agreement scheme. The security
|
|
||||||
of SAE relies upon the authentication through a shared secret.
|
|
||||||
|
|
||||||
In the context of public mesh networks a shared secret is an
|
|
||||||
obvious oxymoron. Still, this functionality may provide an improvement
|
|
||||||
over unencrypted mesh connections in that it protects against a
|
|
||||||
passive attacker who did not observe the key agreement. In addition
|
|
||||||
Management Frame Protection (802.11w) gets automatically enabled on
|
|
||||||
wireless mesh interfaces to prevent protocol-level deauthentication attacks.
|
|
||||||
|
|
||||||
If `wifi.mesh.sae` is enabled, a shared secret will automatically be
|
|
||||||
derived from the `prefix6` variable. This is as secure as it gets
|
|
||||||
for a public mesh network.
|
|
||||||
|
|
||||||
For *private* mesh networks `wifi.mesh.sae_passphrase` should be
|
|
||||||
set to your shared secret.
|
|
||||||
|
|
||||||
site.conf
|
|
||||||
---------
|
|
||||||
These settings apply to all 802.11s mesh interfaces on all radios.
|
|
||||||
|
|
||||||
wifi.mesh.sae \: optional
|
|
||||||
- ``true`` enables SAE on 802.11s mesh connections
|
|
||||||
- ``false`` disables SAE on 802.11s mesh connections
|
|
||||||
- defaults to ``false``
|
|
||||||
|
|
||||||
wifi.mesh.sae_passphrase \: optional
|
|
||||||
- sets a shared secret used to authenticate any two mesh nodes,
|
|
||||||
crucial for private mesh networks
|
|
||||||
- should not be set, if the shared secret is shared with untrusted
|
|
||||||
third parties, like in a publish mesh network
|
|
||||||
- defaults to an autogenerated value derived from ``prefix6``
|
|
||||||
|
|
||||||
|
|
||||||
Example::
|
|
||||||
|
|
||||||
wifi = {
|
|
||||||
mesh = {
|
|
||||||
sae = true,
|
|
||||||
-- sae_passphrase = "<shared secret>",
|
|
||||||
},
|
|
||||||
},
|
|
||||||
|
|
@ -1,64 +0,0 @@
|
|||||||
gluon-radv-filterd
|
|
||||||
==================
|
|
||||||
|
|
||||||
This package drops all incoming router advertisements except for the
|
|
||||||
default router with the best metric according to B.A.T.M.A.N. advanced.
|
|
||||||
|
|
||||||
Note that advertisements originating from the node itself (for example
|
|
||||||
via gluon-radvd) are not affected and considered at all.
|
|
||||||
|
|
||||||
Selected router
|
|
||||||
---------------
|
|
||||||
|
|
||||||
The router selection mechanism is independent from the batman-adv gateway mode.
|
|
||||||
In contrast, the device originating the router advertisement could be any router
|
|
||||||
or client connected to the mesh, as radv-filterd captures all router
|
|
||||||
advertisements originating from it. All nodes announcing router advertisement
|
|
||||||
**with** a default lifetime greater than 0 are being considered as candidates.
|
|
||||||
|
|
||||||
In case a router is not a batman-adv originator itself, its TQ is defined by
|
|
||||||
the originator it is connected to. This lookup uses the batman-adv global
|
|
||||||
translation table.
|
|
||||||
|
|
||||||
Initially the router is selected by choosing the candidate with the strongest
|
|
||||||
TQ. When another candidate can provide a better TQ metric, that outperforms the
|
|
||||||
currently selected router by X metric units, it will be picked as the new
|
|
||||||
selected router. The hysteresis threshold is configurable and prevents excessive
|
|
||||||
flapping of the gateway.
|
|
||||||
|
|
||||||
Local routers
|
|
||||||
-------------
|
|
||||||
|
|
||||||
Local routers (i.e. local internet gateways connected to some nodes) that are
|
|
||||||
connected to the client interface via cable or WLAN instead of via the mesh
|
|
||||||
(technically: appearing in the transtable_local) are taken into account with a
|
|
||||||
fake TQ of 512, so that they are always preferred.
|
|
||||||
|
|
||||||
Be aware of problems if you plan to use local routers together with the
|
|
||||||
:doc:`gluon-ebtables-filter-ra-dhcp` package. These router advertisements are
|
|
||||||
filtered anyway and reach neither the node nor any other client. Therefore the
|
|
||||||
use of local routers is not possible as long as the package
|
|
||||||
``gluon-radv-filterd`` is used.
|
|
||||||
|
|
||||||
respondd module
|
|
||||||
---------------
|
|
||||||
|
|
||||||
This package also contains a module for respondd that announces the currently
|
|
||||||
selected router via the ``statistics.gateway6`` property using its interface MAC
|
|
||||||
address. Note that this is different from the ``statistics.gateway`` property,
|
|
||||||
which contains the MAC address of the main B.A.T.M.A.N. adv slave interface of
|
|
||||||
the selected IPv4 gateway.
|
|
||||||
|
|
||||||
site.conf
|
|
||||||
---------
|
|
||||||
|
|
||||||
radv_filterd.threshold : optional
|
|
||||||
- minimal difference in TQ value that another gateway has to be better than
|
|
||||||
the currently chosen gateway to become the new chosen gateway
|
|
||||||
- defaults to ``20``
|
|
||||||
|
|
||||||
Example::
|
|
||||||
|
|
||||||
radv_filterd = {
|
|
||||||
threshold = 20,
|
|
||||||
}
|
|
@ -1,38 +0,0 @@
|
|||||||
gluon-scheduled-domain-switch
|
|
||||||
=============================
|
|
||||||
|
|
||||||
This package allows to switch a routers domain at a given point
|
|
||||||
in time. This is needed for switching between incompatible transport
|
|
||||||
protocols (e.g. wired meshing with and without VXLAN).
|
|
||||||
|
|
||||||
Nodes will switch when the defined *switch-time* has passed. In case the node was
|
|
||||||
powered off while this was supposed to happen, it might not be able to acquire the
|
|
||||||
correct time. In this case, the node will switch after it has not seen any gateway
|
|
||||||
for a given period of time.
|
|
||||||
|
|
||||||
site.conf
|
|
||||||
---------
|
|
||||||
All those settings have to be defined exclusively in the domain, not the site.
|
|
||||||
|
|
||||||
domain_switch : optional (needed for domains to switch)
|
|
||||||
target_domain :
|
|
||||||
- target domain to switch to
|
|
||||||
switch_after_offline_mins :
|
|
||||||
- amount of time without reachable gateway to switch unconditionally
|
|
||||||
switch_time :
|
|
||||||
- UNIX epoch after which domain will be switched
|
|
||||||
connection_check_targets :
|
|
||||||
- array of IPv6 addresses which are probed to determine if the node is
|
|
||||||
connected to the mesh
|
|
||||||
|
|
||||||
Example::
|
|
||||||
|
|
||||||
domain_switch = {
|
|
||||||
target_domain = 'new_domain',
|
|
||||||
switch_after_offline_mins = 120,
|
|
||||||
switch_time = 1546344000, -- 01.01.2019 - 12:00 UTC
|
|
||||||
connection_check_targets = {
|
|
||||||
'2001:4860:4860::8888',
|
|
||||||
'2001:4860:4860::8844',
|
|
||||||
},
|
|
||||||
},
|
|
@ -1,29 +0,0 @@
|
|||||||
gluon-web-admin
|
|
||||||
===============
|
|
||||||
|
|
||||||
This package allows the user to set options like the password for ssh access
|
|
||||||
within config mode. You can define in your ``site.conf`` whether it should be
|
|
||||||
possible to access the nodes via ssh with a password or not and what the minimum
|
|
||||||
password length must be.
|
|
||||||
|
|
||||||
site.conf
|
|
||||||
---------
|
|
||||||
|
|
||||||
config_mode.remote_login.show_password_form \: optional
|
|
||||||
- ``true`` the password section in config mode is shown
|
|
||||||
- ``false`` the password section in config mode is hidden
|
|
||||||
- defaults to ``false``
|
|
||||||
|
|
||||||
config_mode.remote_login.min_password_length \: optional
|
|
||||||
- sets the minimum allowed password length. Set this to ``1`` to disable the
|
|
||||||
length check.
|
|
||||||
- defaults to ``12``
|
|
||||||
|
|
||||||
Example::
|
|
||||||
|
|
||||||
config_mode = {
|
|
||||||
remote_login = {
|
|
||||||
show_password_form = true, -- default false
|
|
||||||
min_password_length = 12
|
|
||||||
}
|
|
||||||
}
|
|
@ -1,5 +0,0 @@
|
|||||||
gluon-web-logging
|
|
||||||
=================
|
|
||||||
|
|
||||||
The *gluon-web-logging* package adds a new section to advanced settings
|
|
||||||
to allow GUI-based configuration of a remote syslog server.
|
|
@ -1,129 +0,0 @@
|
|||||||
Release Notes
|
|
||||||
=============
|
|
||||||
|
|
||||||
.. toctree::
|
|
||||||
:caption: Gluon 2022.1
|
|
||||||
:maxdepth: 2
|
|
||||||
|
|
||||||
v2022.1.4
|
|
||||||
v2022.1.3
|
|
||||||
v2022.1.2
|
|
||||||
v2022.1.1
|
|
||||||
v2022.1
|
|
||||||
|
|
||||||
.. toctree::
|
|
||||||
:caption: Gluon 2021.1
|
|
||||||
:maxdepth: 2
|
|
||||||
|
|
||||||
v2021.1.2
|
|
||||||
v2021.1.1
|
|
||||||
v2021.1
|
|
||||||
|
|
||||||
.. toctree::
|
|
||||||
:caption: Gluon 2020.2
|
|
||||||
:maxdepth: 2
|
|
||||||
|
|
||||||
v2020.2.3
|
|
||||||
v2020.2.2
|
|
||||||
v2020.2.1
|
|
||||||
v2020.2
|
|
||||||
|
|
||||||
.. toctree::
|
|
||||||
:caption: Gluon 2020.1
|
|
||||||
:maxdepth: 2
|
|
||||||
|
|
||||||
v2020.1.4
|
|
||||||
v2020.1.3
|
|
||||||
v2020.1.2
|
|
||||||
v2020.1.1
|
|
||||||
v2020.1
|
|
||||||
|
|
||||||
.. toctree::
|
|
||||||
:caption: Gluon 2019.1
|
|
||||||
:maxdepth: 2
|
|
||||||
|
|
||||||
v2019.1.3
|
|
||||||
v2019.1.2
|
|
||||||
v2019.1.1
|
|
||||||
v2019.1
|
|
||||||
|
|
||||||
.. toctree::
|
|
||||||
:caption: Gluon 2018.2
|
|
||||||
:maxdepth: 2
|
|
||||||
|
|
||||||
v2018.2.4
|
|
||||||
v2018.2.3
|
|
||||||
v2018.2.2
|
|
||||||
v2018.2.1
|
|
||||||
v2018.2
|
|
||||||
|
|
||||||
.. toctree::
|
|
||||||
:caption: Gluon 2018.1
|
|
||||||
:maxdepth: 2
|
|
||||||
|
|
||||||
v2018.1.4
|
|
||||||
v2018.1.3
|
|
||||||
v2018.1.2
|
|
||||||
v2018.1.1
|
|
||||||
v2018.1
|
|
||||||
|
|
||||||
.. toctree::
|
|
||||||
:caption: Gluon 2017.1
|
|
||||||
:maxdepth: 2
|
|
||||||
|
|
||||||
v2017.1.8
|
|
||||||
v2017.1.7
|
|
||||||
v2017.1.6
|
|
||||||
v2017.1.5
|
|
||||||
v2017.1.4
|
|
||||||
v2017.1.3
|
|
||||||
v2017.1.2
|
|
||||||
v2017.1.1
|
|
||||||
v2017.1
|
|
||||||
|
|
||||||
.. toctree::
|
|
||||||
:caption: Gluon 2016.2
|
|
||||||
:maxdepth: 2
|
|
||||||
|
|
||||||
v2016.2.7
|
|
||||||
v2016.2.6
|
|
||||||
v2016.2.5
|
|
||||||
v2016.2.4
|
|
||||||
v2016.2.3
|
|
||||||
v2016.2.2
|
|
||||||
v2016.2.1
|
|
||||||
v2016.2
|
|
||||||
|
|
||||||
.. toctree::
|
|
||||||
:caption: Gluon 2016.1
|
|
||||||
:maxdepth: 2
|
|
||||||
|
|
||||||
v2016.1.6
|
|
||||||
v2016.1.5
|
|
||||||
v2016.1.4
|
|
||||||
v2016.1.3
|
|
||||||
v2016.1.2
|
|
||||||
v2016.1.1
|
|
||||||
v2016.1
|
|
||||||
|
|
||||||
.. toctree::
|
|
||||||
:caption: Gluon 2015.1
|
|
||||||
:maxdepth: 2
|
|
||||||
|
|
||||||
v2015.1.2
|
|
||||||
v2015.1.1
|
|
||||||
v2015.1
|
|
||||||
|
|
||||||
.. toctree::
|
|
||||||
:caption: Gluon 2014.4
|
|
||||||
:maxdepth: 2
|
|
||||||
|
|
||||||
v2014.4
|
|
||||||
|
|
||||||
.. toctree::
|
|
||||||
:caption: Gluon 2014.3
|
|
||||||
:maxdepth: 2
|
|
||||||
|
|
||||||
v2014.3.1
|
|
||||||
v2014.3
|
|
||||||
|
|
@ -31,7 +31,7 @@ and slowly increase to 1 until ``PRIORITY`` days have passed. From then, the pro
|
|||||||
be configured in ``site.conf``. If the autoupdater is unable to determine the correct time, it will fall back to
|
be configured in ``site.conf``. If the autoupdater is unable to determine the correct time, it will fall back to
|
||||||
a behavior similar to the old implementation (i.e. hourly update attempts).
|
a behavior similar to the old implementation (i.e. hourly update attempts).
|
||||||
|
|
||||||
Separation of announced data
|
Seperation of announced data
|
||||||
----------------------------
|
----------------------------
|
||||||
The data announced by alfred has been split into two data types:
|
The data announced by alfred has been split into two data types:
|
||||||
|
|
||||||
@ -73,7 +73,7 @@ which allows simple configuration of batman-adv on the WAN interface.
|
|||||||
|
|
||||||
Site validators
|
Site validators
|
||||||
---------------
|
---------------
|
||||||
The content of the ``site.conf`` is now validated when the images are built to make it less likely to accidentally
|
The content of the ``site.conf`` is now validated when the images are built to make it less likely to accidentially
|
||||||
build broken images.
|
build broken images.
|
||||||
|
|
||||||
gluon-firewall
|
gluon-firewall
|
||||||
|