Skip to content
Snippets Groups Projects
Commit de3b9881 authored by Romain Deville's avatar Romain Deville
Browse files

:green_heart: Fixing & Simplify CI & :bento: Adding assets

Huge rework of the `docs/.gitlab-ci.yml` to :

- Simplify the file describing the CI process.
- Use `rules` instead of `only/except` to be more flexible in case of future update.
- Update script `docs/_data/plugins.py` to better support external subrepo.
- Adding logo in PNG and SVG format.

See merge request rdeville.private/my_programs/mkdocs_template!2
parent d902f268
No related branches found
No related tags found
No related merge requests found
......@@ -15,12 +15,9 @@ workflow:
rules:
# Do not run CI when commit title have
# WIP, NO-CI or 🚧 (gitmoji for "work in progress", aka :construction:)
- if: |
$CI_COMMIT_TITLE =~ /.*WIP.*/ ||
$CI_COMMIT_TITLE =~ /.*NO-CI.*/ ||
$CI_COMMIT_TITLE =~ /.*🚧.*/
- if: $CI_COMMIT_TITLE =~ /.*(WIP|NO-CI|🚧|:construction:).*/
when: never
# Run the CI otherwise (depending on `only/except` key per jobs)
# Run the CI otherwise (depending on `rules` key per jobs)
- when: always
# Stages jobs will pass through with anchors to avoid updating stage in multiple
......@@ -107,6 +104,10 @@ variables:
then
export RSYNC_DEST="${RSYNC_DEST_DEV}"
fi
if [[ -n "${RSYNC_BASE_PATH_DEV}" ]];
then
export RSYNC_BASE_PATH="${RSYNC_BASE_PATH_DEV}"
fi
;;
"PRE_PROD")
if [[ -n "${SSH_KNOWN_HOSTS_PRE_PROD}" ]];
......@@ -125,6 +126,10 @@ variables:
then
export RSYNC_DEST="${RSYNC_DEST_PRE_PROD}"
fi
if [[ -n "${RSYNC_BASE_PATH_PRE_PROD}" ]];
then
export RSYNC_BASE_PATH="${RSYNC_BASE_PATH_PRE_PROD}"
fi
;;
"PROD")
if [[ -n "${SSH_KNOWN_HOSTS_PROD}" ]];
......@@ -143,6 +148,10 @@ variables:
then
export RSYNC_DEST="${RSYNC_DEST_PROD}"
fi
if [[ -n "${RSYNC_BASE_PATH_PROD}" ]];
then
export RSYNC_BASE_PATH="${RSYNC_BASE_PATH_PROD}"
fi
;;
*)
echo -e "\e[31mERROR - Variable \`CI_DEPLOY_TYPE\` is not defined !"
......@@ -150,59 +159,31 @@ variables:
;;
esac
# Only anchors
# Rules anchors
# -----------------------------------------------------------------------------
# https://docs.gitlab.com/ee/ci/yaml/README.html#only
# List all names of refs that can be used with key (only|except):refs using
# anchors to avoid having to modify multiple times. Refs are:
# - Branches names based on git flow: https://danielkummer.github.io/git-flow-cheatsheet/
# - merge_requests (https://docs.gitlab.com/ee/ci/yaml/README.html#onlyexcept-basic)
# - tags (https://docs.gitlab.com/ee/ci/yaml/README.html#onlyexcept-basic)
.refs_names:
- &ref_release /release-*/
- &ref_feature /feature-*/
- &ref_hotfix /hotfix-*/
- &ref_bugfix /bugfix-*/
- &ref_develop develop
- &ref_master master
- &ref_merge_requests merge_requests
- &ref_tags tags
# Specify on which branch, tags or on merge_requests CI should be done.
# Jobs under only_dev anchor will be run if branch name are compliant with git
# flow branch which are not `develop` neither `master` and will be run on
# merge_request
.only_dev: &only_dev
only:
refs:
- *ref_release
- *ref_feature
- *ref_hotfix
- *ref_bugfix
- *ref_merge_requests
# Jobs under only_pre_prod anchor will be run on `develop` (i.e. pre-release)
# and `master` (release) branch.
.only_pre_prod: &only_pre_prod
only:
refs:
- *ref_develop
- *ref_master
# https://docs.gitlab.com/ee/ci/yaml/README.html#rules
# Defining bash regexp test
.rules_regexp:
- &rules_regexp_dev $CI_COMMIT_BRANCH =~ /^((release|feature|hotfix|bugfix)-|merge_request_)*/
- &rules_regexp_pre_prod $CI_COMMIT_BRANCH =~ /(develop|master)/
- &rules_regexp_prod $CI_COMMIT_TAG
# Defining rules that now replace only to run jobs under specific condition
# and define variables
.rules_dev: &rules_dev
if: *rules_regexp_dev
variables:
CI_DEPLOY_TYPE: "DEV"
# Jobs under only_prod anchor will be run on tagged commit.
.only_prod: &only_prod
only:
refs:
- *ref_tags
.rules_pre_prod: &rules_pre_prod
if: *rules_regexp_pre_prod
variables:
CI_DEPLOY_TYPE: "PRE_PROD"
# Jobs under only_trigger anchor will be run on `develop` (i.e. pre-release)
# `master` (release) branch and tagged commit.
.only_trigger: &only_trigger
only:
refs:
- *ref_develop
- *ref_master
- *ref_tags
.rules_prod: &rules_prod
if: *rules_regexp_prod
variables:
CI_DEPLOY_TYPE: "PROD"
# Tag anchors
# -----------------------------------------------------------------------------
......@@ -244,7 +225,7 @@ variables:
cache:
# Cache dependencies shared within the same branche
# https://docs.gitlab.com/ee/ci/yaml/README.html#cachekey
key: "$CI_COMMIT_REF_NAME"
key: "$CI_COMMIT_BRANCH"
# Let us cache python dependencies
# https://docs.gitlab.com/ee/ci/caching/#caching-python-dependencies
paths:
......@@ -258,7 +239,7 @@ variables:
cache:
# Cache dependencies shared across all branches but separated by jobs
# https://docs.gitlab.com/ee/ci/yaml/README.html#cachekey
key: "$CI_COMMIT_REF_NAME"
key: "$CI_COMMIT_BRANCH"
# Let us cache python dependencies
# https://docs.gitlab.com/ee/ci/caching/#caching-python-dependencies
paths:
......@@ -275,7 +256,7 @@ variables:
# Jobs in pre_test stage
# -----------------------------------------------------------------------------
# Template jobs script to ensure required variables are sets.
.script_pre_test_ensure_variable: &script_pre_test_ensure_variable
script_pre_test_ensure_variable: &script_pre_test_ensure_variable
<<: *tag_docker
<<: *image_docker
<<: *stage_pre_test
......@@ -313,27 +294,10 @@ variables:
echo -e "\e[31mERROR - At least one required variable is not defined !"
return 1
fi
# Set variables for the dev branches CI.
pre_test_dev:
<<: *script_pre_test_ensure_variable
<<: *only_dev
variables:
CI_DEPLOY_TYPE: "DEV"
# Set variables for the pre-prod branches CI (master and develop).
pre_test_pre_prod:
<<: *script_pre_test_ensure_variable
<<: *only_pre_prod
variables:
CI_DEPLOY_TYPE: "PRE_PROD"
# Set variables for the prod CI, i.e. CI on tags.
pre_test_prod:
<<: *script_pre_test_ensure_variable
<<: *only_prod
variables:
CI_DEPLOY_TYPE: "PROD"
rules:
- *rules_dev
- *rules_pre_prod
- *rules_prod
# Jobs in test stage
# -----------------------------------------------------------------------------
......@@ -391,7 +355,7 @@ build_html:
# Jobs in deploy stage
# -----------------------------------------------------------------------------
# Template jobs script deploy previously built html documentation.
.script_deploy_html: &script_deploy_html
script_deploy_html: &script_deploy_html
<<: *tag_docker
<<: *image_docker
<<: *stage_deploy
......@@ -405,15 +369,40 @@ build_html:
- export LAST_TAG="$(git describe --tags `git rev-list --tags --max-count=1`)"
- export LAST_TAG="${LAST_TAG/v/}"
- export LAST_TAG="${LAST_TAG%.*}"
- export RSYNC_PATH="/${PROJECT_PATH}${LAST_TAG}"
- export ONLINE_PATH="${ONLINE_DEST}${PROJECT_PATH}${LAST_TAG}"
- mkdir -p "tmp/${RSYNC_PATH}"
- |
if [[ -f "site/versions.json" ]]
then
cp site/versions.json versions.json
fi
case "${CI_DEPLOY_TYPE}" in
"DEV")
if [[ -n "${RSYNC_BASE_PATH}" ]];
then
export PROJECT_PATH="/${CI_COMMIT_BRANCH}/${RSYNC_BASE_PATH}/";
else
export PROJECT_PATH="/${CI_COMMIT_BRANCH}/"
fi
;;
"PRE_PROD")
if [[ -n "${RSYNC_BASE_PATH}" ]];
then
export PROJECT_PATH="/${CI_COMMIT_BRANCH}/${RSYNC_BASE_PATH}/";
else
export PROJECT_PATH="/${CI_COMMIT_BRANCH}/"
fi
;;
"PROD")
if [[ -n "${RSYNC_BASE_PATH}" ]];
then
export PROJECT_PATH="/${RSYNC_BASE_PATH}/";
else
export PROJECT_PATH="/"
fi
;;
esac
- export RSYNC_PATH="${PROJECT_PATH}${LAST_TAG}"
- export ONLINE_PATH="${ONLINE_DEST}${PROJECT_PATH}latest"
- echo "$PROJECT_PATH"
- mkdir -p "tmp/${RSYNC_PATH}"
- mv site/* "tmp/${RSYNC_PATH}/"
- ln -s "${LAST_TAG}" "latest"
- mv "latest" "tmp/${PROJECT_PATH}"
- rsync -avz "tmp/" "${RSYNC_DEST}"
- echo -e "
<!DOCTYPE html>\n
......@@ -433,54 +422,38 @@ build_html:
</body>\n
</html>" > index.html
- rsync -avz index.html "${RSYNC_DEST}${PROJECT_PATH}/"
- rsync -avz versions.json "${RSYNC_DEST}${PROJECT_PATH}/"
deploy_html_dev:
<<: *script_deploy_html
<<: *only_dev
variables:
CI_DEPLOY_TYPE: "DEV"
PROJECT_PATH: ${CI_COMMIT_REF_NAME%-*}/$CI_PROJECT_PATH/
deploy_html_pre_prod:
<<: *script_deploy_html
<<: *only_pre_prod
variables:
CI_DEPLOY_TYPE: "PRE_PROD"
PROJECT_PATH: ${CI_COMMIT_REF_NAME%-*}/$CI_PROJECT_PATH/
deploy_html_prod:
<<: *script_deploy_html
<<: *only_prod
variables:
CI_DEPLOY_TYPE: "PROD"
PROJECT_PATH: ${CI_COMMIT_REF_NAME%-*}/$CI_PROJECT_PATH/
- |
if [[ -f "site/versions.json" ]]
then
cp site/versions.json versions.json
rsync -avz versions.json "${RSYNC_DEST}${PROJECT_PATH}/"
fi
rules:
- *rules_dev
- *rules_pre_prod
- *rules_prod
# Jobs in post_deploy stage
# -----------------------------------------------------------------------------
trigger_main_repo:
<<: *stage_post_deploy
<<: *only_trigger
only:
variables:
- $MAIN_PROJECT && $MAIN_PROJECT != $CI_PROJECT_PATH
trigger:
include:
- project: $MAIN_PROJECT
ref: $CI_COMMIT_REF_NAME
ref: $CI_COMMIT_BRANCH
file: $MAIN_PROJECT_CI_PATH/.gitlab-ci.yml
strategy: depend
variables:
MAIN_PROJECT_CI_PATH: ${MAIN_PROJECT_CI_PATH:-"."}
rules:
- *rules_pre_prod
- *rules_prod
- if: $MAIN_PROJECT && $MAIN_PROJECT != $CI_PROJECT_PATH
inform_triggers_variables:
<<: *tag_docker
<<: *image_docker
<<: *stage_post_deploy
<<: *only_trigger
except:
variables:
- $MAIN_PROJECT
script:
- |
if [[ -z "${MAIN_PROJECT}" ]]
......@@ -494,6 +467,10 @@ inform_triggers_variables:
INFO - the path to the file \`gitlab-ci.yaml\` to be run in \n
INFO - the \`MAIN_PROJECT\`."
fi
rules:
- *rules_pre_prod
- *rules_prod
- if: ! $MAIN_PROJECT
# *****************************************************************************
# VIM MODELINE
......
......@@ -295,9 +295,7 @@ def set_copyright(env, git_repo):
first_year = time.strftime("%Y", time.localtime())
curr_year = time.strftime("%Y", time.localtime())
env.conf["copyright"] = "Copyright &copy; {} - {} {}".format(
first_year, curr_year, env.variables["copyright"]
)
env.conf["copyright"] = f"Copyright &copy; {first_year} - {curr_year} {env.variables['copyright']}"
def set_repo_name(env, repo_slug):
......@@ -337,10 +335,7 @@ def set_repo_url(env, repo_slug):
if "repo_url" in env.variables:
env.conf["repo_url"] = env.variables["repo_url"]
elif "repo_url" in env.conf:
env.conf["repo_url"] = "{}{}".format(
env.variables["git_platform"]["url"],
env.variables[repo_slug]["git_slug_with_namespace"],
)
env.conf["repo_url"] = f"{env.variables['git_platform']['url']}{env.variables[repo_slug]['git_slug_with_namespace']}"
def update_theme(env, repo_slug):
......@@ -447,48 +442,25 @@ def load_yaml_file(path: str, filename: str) -> None:
return schema.source, data_type
def update_subrepo_logo_src(
env: dict,
curr_repo: dict,
repo_name: str,
subrepo_dict: dict,
path: str,
external: bool,
latest: str
) -> None:
"""
@rdeville: TODO
"""
def update_subrepo_logo_src(env:dict,curr_repo:dict,repo_name:str,subrepo_dict:dict, path:str,external:bool) -> None:
logo_subpath = ""
src_subpath = ""
if external:
logo_subpath = os.path.join(subrepo_dict["online_url"])
if latest:
logo_subpath = os.path.join(logo_subpath,latest)
src_subpath = os.path.join(
path.replace(f"{env.project_dir}/", ""), repo_name
)
src_subpath = os.path.join(path.replace(f"{env.project_dir}/",""),repo_name)
if "logo" not in curr_repo:
curr_repo["logo"] = os.path.join(
logo_subpath, "assets", "img", "meta", f"{repo_name}_logo.png"
)
curr_repo["logo"] = os.path.join(logo_subpath, "assets", "img", "meta",f"{repo_name}_logo.png")
if "src_path" in curr_repo:
for i_src in curr_repo["src_path"]:
i_src = os.path.join(src_subpath, i_src)
env.conf["plugins"]["mkdocstrings"].config.data["handlers"][
"python"
]["setup_commands"].append(f"sys.path.append('{i_src}')")
print(yaml.dump(curr_repo))
def update_subrepo_info(
env: dict, subrepo_list: dict, path: str, external: bool = False
) -> dict:
def update_subrepo_info(env: dict, subrepo_list: dict, path: str, external:bool = False) -> dict:
"""
@rdeville TODO
"""
......@@ -506,24 +478,7 @@ def update_subrepo_info(
print(
f"{INFO_CLR}INFO [macros] - Cloning repo {i_repo['name']}{RESET_CLR}"
)
git_subrepo = git.Repo.clone_from(i_repo["git_url"], subrepo_root)
latest = ""
if git_subrepo.tags:
last_major = 0
last_minor = 0
for i_tag in git_subrepo.tags:
i_tag = yaml.dump(i_tag.path)
i_tag = re.sub(".*v", "", i_tag).split(".")
major = int(i_tag[0])
minor = int(i_tag[1])
if major > last_major:
last_major = major
last_minor = 0
if minor > last_minor:
last_minor = minor
last_patch = 0
latest = f"{last_major}.{last_minor}"
git.Repo.clone_from(i_repo["git_url"], subrepo_root)
if "subpath" in i_repo:
data_dir = os.path.join(
......@@ -536,16 +491,12 @@ def update_subrepo_info(
data, _ = load_yaml_file(data_dir, data_file)
for i_repo_info in data:
curr_repo = data[i_repo_info]
update_subrepo_logo_src(
env, curr_repo, i_repo_info, i_repo, path, external, latest
)
update_subrepo_logo_src(env,curr_repo,i_repo_info,i_repo,path,external)
return_dict.update(data)
return return_dict
def update_subrepo(
env: dict, subrepo_dict: dict, path: str, external: bool
) -> dict:
def update_subrepo(env: dict, subrepo_dict: dict, path: str, external:bool) -> dict:
"""
@rdeville TODO
"""
......@@ -557,31 +508,24 @@ def update_subrepo(
elif i_key == "internal":
env.variables["internal_subdoc"] = True
return_dict.update(
update_subrepo_info(env, subrepo_dict[i_key], path, external)
update_subrepo_info(env, subrepo_dict[i_key], path,external)
)
elif i_key not in ["nav_entry"]:
return_dict.update(
update_subrepo(
env,
subrepo_dict[i_key],
os.path.join(path, i_key),
external,
env, subrepo_dict[i_key], os.path.join(path, i_key),external
)
)
return return_dict
def update_logo_src_repo(
env: dict, curr_repo: dict, repo_name: str, path: str = None
) -> None:
def update_logo_src_repo(env:dict,curr_repo:dict,repo_name:str,path:str=None) -> None:
subpath = ""
if path:
subpath = os.path.join(path.replace(env.project_dir, ""), repo_name)
subpath = os.path.join(path.replace(env.project_dir,""),repo_name)
if "logo" not in curr_repo:
curr_repo["logo"] = os.path.join(
subpath, "assets", "img", "meta", f"{repo_name}_logo.png"
)
curr_repo["logo"] = os.path.join(subpath, "assets", "img", "meta",f"{repo_name}_logo.png")
if "src_path" in curr_repo:
for i_src in curr_repo["src_path"]:
i_src = os.path.join(subpath, i_src)
......@@ -590,6 +534,7 @@ def update_logo_src_repo(
]["setup_commands"].append(f"sys.path.append('{i_src}')")
def load_var_file(env: dict) -> None:
"""Load variables files in docs/_data/ and variable of subrepo
......@@ -606,7 +551,7 @@ def load_var_file(env: dict) -> None:
data, data_type = load_yaml_file(var_dir, i_file)
for i_key in data:
if data_type == "repo":
update_logo_src_repo(env, data[i_key], i_key)
update_logo_src_repo(env,data[i_key],i_key)
env.variables[i_key] = data[i_key]
......@@ -636,10 +581,8 @@ def update_version(env: dict) -> None:
if major > last_major:
mike_version.append(
{
"version": "{}.{}".format(last_major, last_minor),
"title": "{}.{}.{}".format(
last_major, last_minor, last_patch
),
"version": f"{last_major}.{last_minor}",
"title": f"{last_major}.{last_minro}.{last_patch}",
"aliases": [],
}
)
......@@ -648,10 +591,8 @@ def update_version(env: dict) -> None:
if minor > last_minor:
mike_version.append(
{
"version": "{}.{}".format(last_major, last_minor),
"title": "{}.{}.{}".format(
last_major, last_minor, last_patch
),
"version": f"{last_major}.{last_minor}",
"title": f"{last_major}.{last_minor}.{last_patch}",
"aliases": [],
}
)
......@@ -661,8 +602,8 @@ def update_version(env: dict) -> None:
last_patch = patch
mike_version.append(
{
"version": "{}.{}".format(last_major, last_minor),
"title": "{}.{}.{}".format(last_major, last_minor, last_patch),
"version": f"{last_major}.{last_minor}",
"title": f"{last_major}.{last_minor}.{last_patch}",
"aliases": ["latest"],
}
)
......@@ -694,9 +635,7 @@ def define_env(env: dict) -> None:
if "subrepo" in env.variables:
env.variables["internal_subdoc"] = False
env.variables.update(
update_subrepo(
env, env.variables["subrepo"], env.project_dir, False
)
update_subrepo(env, env.variables["subrepo"], env.project_dir, False)
)
set_config(env)
......
docs/assets/img/meta/mkdocs_template_logo.png

62.7 KiB

<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<svg
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:cc="http://creativecommons.org/ns#"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns="http://www.w3.org/2000/svg"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
version="1.1"
viewBox="0 0 1250 967.88873"
id="svg4760"
sodipodi:docname="mkdocs_template_logo.svg"
width="1250"
height="967.88873"
inkscape:version="0.92.5 (2060ec1f9f, 2020-04-08)">
<metadata
id="metadata4766">
<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>
<defs
id="defs4764" />
<sodipodi:namedview
pagecolor="#ffffff"
bordercolor="#666666"
borderopacity="1"
objecttolerance="10"
gridtolerance="10"
guidetolerance="10"
inkscape:pageopacity="0"
inkscape:pageshadow="2"
inkscape:window-width="2030"
inkscape:window-height="648"
id="namedview4762"
showgrid="false"
inkscape:zoom="0.29344931"
inkscape:cx="-549.79311"
inkscape:cy="527.58136"
inkscape:window-x="6"
inkscape:window-y="688"
inkscape:window-maximized="0"
inkscape:current-layer="svg4760" />
<g
id="g4988"
transform="matrix(0.87409674,0,0,0.87409674,-396.65517,-470.11304)">
<rect
style="fill:#004455;fill-rule:evenodd;stroke:#004455;stroke-width:16.41740227;stroke-linecap:round"
id="rect4672"
ry="1.4669591"
height="728.01666"
width="223.46336"
y="546.03595"
x="935.35498" />
<rect
style="fill:#80e5ff;fill-rule:evenodd;stroke:#00aa88;stroke-width:16.41740227;stroke-linecap:round"
id="rect4674"
ry="1.3148954"
height="504.80328"
width="130.64072"
y="598.1051"
x="977.04626" />
<ellipse
ry="46.183907"
rx="46.235619"
style="fill:#00aa88;fill-rule:evenodd;stroke:#004455;stroke-width:16.41740227;stroke-linecap:round"
id="circle4676"
cy="1194.0358"
cx="1047.0867" />
<rect
x="1004.5499"
y="655.48639"
width="75.633553"
height="20.604357"
ry="1.4669591"
id="rect4678"
style="fill:#004455;fill-rule:evenodd;stroke:#00aa88;stroke-width:16.41740227;stroke-linecap:round" />
<rect
x="1004.5499"
y="708.26801"
width="75.633553"
height="20.604357"
ry="1.4669591"
id="rect4680"
style="fill:#004455;fill-rule:evenodd;stroke:#00aa88;stroke-width:16.41740227;stroke-linecap:round" />
<rect
x="1004.5499"
y="761.04962"
width="75.633553"
height="20.604357"
ry="1.4669591"
id="rect4682"
style="fill:#004455;fill-rule:evenodd;stroke:#00aa88;stroke-width:16.41740227;stroke-linecap:round" />
<rect
x="1004.5499"
y="813.83124"
width="75.633553"
height="20.604357"
ry="1.4669591"
id="rect4684"
style="fill:#004455;fill-rule:evenodd;stroke:#00aa88;stroke-width:16.41740227;stroke-linecap:round" />
<rect
x="1004.5499"
y="866.61279"
width="75.633553"
height="20.604357"
ry="1.4669591"
id="rect4686"
style="fill:#004455;fill-rule:evenodd;stroke:#00aa88;stroke-width:16.41740227;stroke-linecap:round" />
<rect
x="1004.5499"
y="972.17603"
width="75.633553"
height="20.604357"
ry="1.4669591"
id="rect4688"
style="fill:#004455;fill-rule:evenodd;stroke:#00aa88;stroke-width:16.41740227;stroke-linecap:round" />
<rect
x="1004.5499"
y="919.39441"
width="75.633553"
height="20.604357"
ry="1.4669591"
id="rect4690"
style="fill:#004455;fill-rule:evenodd;stroke:#00aa88;stroke-width:16.41740227;stroke-linecap:round" />
<rect
x="1004.5499"
y="1024.9576"
width="75.633553"
height="20.604357"
ry="1.4669591"
id="rect4692"
style="fill:#004455;fill-rule:evenodd;stroke:#00aa88;stroke-width:16.41740227;stroke-linecap:round" />
<rect
style="fill:#00aa88;fill-rule:evenodd;stroke:#004455;stroke-width:16.41740227;stroke-linecap:round"
id="rect4698"
ry="1.4669591"
height="728.01666"
width="223.46336"
y="546.04388"
x="1228.2319" />
<rect
style="fill:#80e5ff;fill-rule:evenodd;stroke:#004455;stroke-width:16.41740227;stroke-linecap:round"
id="rect4700"
ry="1.3148954"
height="504.80328"
width="130.64072"
y="598.11292"
x="1269.8969" />
<ellipse
ry="46.183907"
rx="46.235619"
style="fill:#00aa88;fill-rule:evenodd;stroke:#004455;stroke-width:16.41740227;stroke-linecap:round"
id="circle4702"
cy="1194.0436"
cx="1339.9636" />
<rect
style="fill:#004455;fill-rule:evenodd;stroke:#00aa88;stroke-width:16.41740227;stroke-linecap:round"
id="rect4704"
ry="1.4669591"
height="20.604357"
width="75.633553"
y="655.48645"
x="1297.4004" />
<rect
style="fill:#004455;fill-rule:evenodd;stroke:#00aa88;stroke-width:16.41740227;stroke-linecap:round"
id="rect4706"
ry="1.4669591"
height="20.604357"
width="75.633553"
y="708.26807"
x="1297.4004" />
<rect
style="fill:#004455;fill-rule:evenodd;stroke:#00aa88;stroke-width:16.41740227;stroke-linecap:round"
id="rect4708"
ry="1.4669591"
height="20.604357"
width="75.633553"
y="761.04968"
x="1297.4004" />
<rect
style="fill:#004455;fill-rule:evenodd;stroke:#00aa88;stroke-width:16.41740227;stroke-linecap:round"
id="rect4710"
ry="1.4669591"
height="20.604357"
width="75.633553"
y="813.8313"
x="1297.4004" />
<rect
style="fill:#004455;fill-rule:evenodd;stroke:#00aa88;stroke-width:16.41740227;stroke-linecap:round"
id="rect4712"
ry="1.4669591"
height="20.604357"
width="75.633553"
y="866.61292"
x="1297.4004" />
<rect
style="fill:#004455;fill-rule:evenodd;stroke:#00aa88;stroke-width:16.41740227;stroke-linecap:round"
id="rect4714"
ry="1.4669591"
height="20.604357"
width="75.633553"
y="972.17609"
x="1297.4004" />
<rect
style="fill:#004455;fill-rule:evenodd;stroke:#00aa88;stroke-width:16.41740227;stroke-linecap:round"
id="rect4716"
ry="1.4669591"
height="20.604357"
width="75.633553"
y="919.39453"
x="1297.4004" />
<rect
style="fill:#004455;fill-rule:evenodd;stroke:#00aa88;stroke-width:16.41740227;stroke-linecap:round"
id="rect4718"
ry="1.4669591"
height="20.604357"
width="75.633553"
y="1024.9578"
x="1297.4004" />
<rect
x="642.48505"
y="546.04388"
width="223.46336"
height="728.01666"
ry="1.4669591"
id="rect4722"
style="fill:#80e5ff;fill-rule:evenodd;stroke:#004455;stroke-width:16.41740227;stroke-linecap:round" />
<rect
x="688.90558"
y="676.52002"
width="130.64072"
height="467.03806"
ry="1.2165104"
id="rect4724"
style="fill:#004455;fill-rule:evenodd;stroke:#00aa88;stroke-width:16.41740227;stroke-linecap:round" />
<ellipse
ry="39.586205"
rx="39.630531"
cx="754.21674"
cy="607.85126"
id="circle4726"
style="fill:#00aa88;fill-rule:evenodd;stroke:#004455;stroke-width:16.41740227;stroke-linecap:round" />
<ellipse
ry="39.586205"
rx="39.630531"
cx="754.21674"
cy="1212.2533"
id="circle4728"
style="fill:#00aa88;fill-rule:evenodd;stroke:#004455;stroke-width:16.41740227;stroke-linecap:round" />
<rect
x="716.40955"
y="712.17401"
width="75.633553"
height="20.604357"
ry="1.4669591"
id="rect4732"
style="fill:#55ddff;fill-rule:evenodd;stroke:#00aa88;stroke-width:16.41740227;stroke-linecap:round" />
<rect
x="716.40955"
y="764.95563"
width="75.633553"
height="20.604357"
ry="1.4669591"
id="rect4734"
style="fill:#55ddff;fill-rule:evenodd;stroke:#00aa88;stroke-width:16.41740227;stroke-linecap:round" />
<rect
x="716.40955"
y="817.73724"
width="75.633553"
height="20.604357"
ry="1.4669591"
id="rect4736"
style="fill:#55ddff;fill-rule:evenodd;stroke:#00aa88;stroke-width:16.41740227;stroke-linecap:round" />
<rect
x="716.40955"
y="870.51886"
width="75.633553"
height="20.604357"
ry="1.4669591"
id="rect4738"
style="fill:#55ddff;fill-rule:evenodd;stroke:#00aa88;stroke-width:16.41740227;stroke-linecap:round" />
<rect
x="716.40955"
y="923.30048"
width="75.633553"
height="20.604357"
ry="1.4669591"
id="rect4740"
style="fill:#55ddff;fill-rule:evenodd;stroke:#00aa88;stroke-width:16.41740227;stroke-linecap:round" />
<rect
x="716.40955"
y="976.08203"
width="75.633553"
height="20.604357"
ry="1.4669591"
id="rect4742"
style="fill:#55ddff;fill-rule:evenodd;stroke:#00aa88;stroke-width:16.41740227;stroke-linecap:round" />
<rect
x="716.40955"
y="1028.8636"
width="75.633553"
height="20.604357"
ry="1.4669591"
id="rect4744"
style="fill:#55ddff;fill-rule:evenodd;stroke:#00aa88;stroke-width:16.41740227;stroke-linecap:round" />
<rect
x="716.40955"
y="1081.6453"
width="75.633553"
height="20.604357"
ry="1.4669591"
id="rect4746"
style="fill:#55ddff;fill-rule:evenodd;stroke:#00aa88;stroke-width:16.41740227;stroke-linecap:round" />
<rect
x="461.99734"
y="1285.6647"
width="1127.6207"
height="65.245979"
ry="32.624313"
id="rect4752"
style="fill:#00aa88;fill-rule:evenodd;stroke:#004455;stroke-width:16.41740227;stroke-linecap:round" />
</g>
<g
id="g2161"
transform="matrix(1.4455056,0,0,1.4455056,638.61638,-441.93303)">
<path
sodipodi:nodetypes="ccccc"
id="path4-3"
d="m 156.93915,76.592584 c 22.84704,2.62334 39.24036,23.2709 36.61834,46.116866 -2.62335,22.84704 -23.2709,39.24036 -46.11688,36.61834 -22.84703,-2.62335 -39.24035,-23.2709 -36.61833,-46.11688 2.62334,-22.847026 23.2709,-39.240346 46.11687,-36.618326 z"
inkscape:connector-curvature="0"
style="fill:#0d47a1;fill-opacity:1;stroke-width:0.26458332"
transform="matrix(3.7795276,0,0,3.7795276,-325.20043,356.53121)" />
<path
id="path4"
d="M 269.73,630.56 C 174.844,619.665 89.09,687.754 78.2,782.64 67.305,877.526 135.394,963.28 230.28,974.17 325.166,985.06 410.92,916.976 421.81,822.09 432.705,727.204 364.616,641.45 269.73,630.56 Z m -1.7746,15.455 c 86.351,9.915 148.31,87.953 138.4,174.3 -9.915,86.351 -87.953,148.31 -174.3,138.4 -86.351,-9.915 -148.31,-87.953 -138.4,-174.3 9.915,-86.351 87.953,-148.31 174.3,-138.4 z"
inkscape:connector-curvature="0"
style="fill:#4caf50;fill-opacity:1" />
<path
id="path6"
d="m 345.92,701 a 2.462,2.462 0 0 0 -1.7766,0.71991 2.462,2.462 0 0 0 -0.45258,2.8523 l -4.4437,4.4437 c -7.4842,2.4304 -44.035,14.754 -61.222,29.083 -18.152,15.133 -42.419,44.599 -61.231,59.113 l -24.549,7.2286 c 5.5805,-9.6894 8.2454,-20.185 8.2454,-20.185 0,0 -12.886,3.1428 -23.239,10.001 -9.119,6.0407 -28.758,25.3 -33.535,30.026 l -1.4946,-1.4946 -3.869,3.869 2.6923,2.6923 c -0.61622,0.99132 -7.0276,11.315 -10.02,17.076 -2.2672,4.3652 -4.3616,11.658 -4.3616,11.658 0,0 7.2924,-2.0944 11.658,-4.3616 5.7611,-2.9923 16.085,-9.4037 17.076,-10.02 l 2.6923,2.6923 3.869,-3.869 -1.503,-1.503 c 0.94052,-0.95587 1.5333,-1.5478 3.688,-3.7743 l 12.498,2.3724 c 16.957,3.2194 5.0444,21.217 8.4559,24.629 3.4114,3.4114 21.411,-8.5009 24.631,8.4559 l 2.3702,12.479 c -2.2274,2.1636 -2.8208,2.7595 -3.7764,3.7027 l -1.4504,-1.4504 -3.8711,3.8711 2.6923,2.6923 c -0.6171,0.99272 -7.0258,11.315 -10.018,17.076 -2.2672,4.3652 -4.3616,11.656 -4.3616,11.656 0,0 7.2903,-2.0944 11.656,-4.3616 5.7608,-2.9921 16.085,-9.4008 17.078,-10.018 l 2.6902,2.6902 3.869,-3.869 -1.5451,-1.5451 c 4.7182,-4.7879 23.94,-24.464 29.961,-33.602 6.8353,-10.376 10.068,-23.17 10.068,-23.17 0,0 -10.489,2.5697 -20.145,8.1085 l 7.1887,-24.412 c 14.514,-18.812 43.98,-43.078 59.113,-61.231 14.329,-17.187 26.653,-53.738 29.083,-61.222 l 4.4437,-4.4437 a 2.462,2.462 0 0 0 2.8523,-0.45257 2.462,2.462 0 0 0 0,-3.4817 2.462,2.462 0 0 0 -1.7051,-0.71991 z m -55.872,46.521 a 11.951,11.951 0 0 1 8.277,3.5007 11.951,11.951 0 0 1 0,16.901 11.951,11.951 0 0 1 -16.903,0 11.951,11.951 0 0 1 0,-16.901 11.951,11.951 0 0 1 8.6264,-3.5007 z m -146.42,84.409 9.1905,9.1905 c -1.406,0.8014 -6.2265,3.5409 -9.6831,5.3362 -2.8977,1.505 -8.6558,3.8122 -8.6558,3.8122 0,0 2.3093,-5.7582 3.8143,-8.6559 1.7953,-3.4566 4.533,-8.2771 5.3341,-9.6831 z m 64.649,64.652 9.1884,9.1863 c -1.4072,0.80206 -6.2251,3.5412 -9.681,5.3362 -2.8977,1.505 -8.6558,3.8122 -8.6559,3.8122 0,0 2.3072,-5.756 3.8122,-8.6537 1.7947,-3.4554 4.5335,-8.2726 5.3362,-9.681 z"
inkscape:connector-curvature="0"
style="fill:#4caf50;fill-opacity:1;fill-rule:evenodd" />
</g>
</svg>
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment