mirror of
https://github.com/arcan1s/ahriman.git
synced 2026-07-14 23:01:09 +00:00
reorder tests
This commit is contained in:
@@ -0,0 +1,13 @@
|
||||
[Unit]
|
||||
Description=ArcH linux ReposItory MANager web server
|
||||
After=network.target
|
||||
|
||||
[Service]
|
||||
Type=simple
|
||||
ExecStart=/usr/bin/ahriman web
|
||||
ExecReload=/usr/bin/ahriman web-reload
|
||||
User=ahriman
|
||||
Group=ahriman
|
||||
|
||||
[Install]
|
||||
WantedBy=multi-user.target
|
||||
@@ -0,0 +1 @@
|
||||
ahriman-web.service
|
||||
@@ -0,0 +1,66 @@
|
||||
[auth]
|
||||
; Authentication provider, must be one of disabled, configuration, pam, oauth.
|
||||
target = disabled
|
||||
; Allow read-only endpoint to be called without authentication.
|
||||
allow_read_only = yes
|
||||
; OAuth2 application client ID and secret. Required if oauth is used.
|
||||
;client_id =
|
||||
;client_secret =
|
||||
; Cookie secret key to be used for cookies encryption. Must be valid 32 bytes URL-safe base64-encoded string.
|
||||
; If not set, it will be generated automatically.
|
||||
;cookie_secret_key =
|
||||
; Name of the secondary group to be used as admin group in the service. Required if pam is used.
|
||||
;full_access_group = wheel
|
||||
; Authentication cookie expiration in seconds.
|
||||
;max_age = 604800
|
||||
; OAuth2 provider class name, one of provided by aioauth-client. Required if oauth is used.
|
||||
;oauth_provider = GoogleClient
|
||||
; Scopes list for OAuth2 provider. Required if oauth is used.
|
||||
;oauth_scopes = https://www.googleapis.com/auth/userinfo.email
|
||||
; Allow login as root user (only applicable if PAM is used).
|
||||
;permit_root_login = no
|
||||
; Optional password salt.
|
||||
;salt =
|
||||
|
||||
[web]
|
||||
; External address of the web service. Will be used for some features like OAuth. If none set will be generated as
|
||||
; address = http://${web:host}:${web:port}
|
||||
;address = http://${web:host}:${web:port}
|
||||
; Enable page auto refresh. Intervals are given in seconds. Default interval is always the first element of the list.
|
||||
; If no intervals set, auto refresh will be disabled. 0 can only be the first element and will disable auto refresh
|
||||
; by default.
|
||||
autorefresh_intervals = 5 1 10 30 60
|
||||
; Allowed CORS headers. By default everything is allowed.
|
||||
;cors_allow_headers =
|
||||
; Allowed CORS methods. By default everything is allowed.
|
||||
;cors_allow_methods =
|
||||
; Allowed CORS origins.
|
||||
;cors_allow_origins = *
|
||||
; Exposed CORS headers. By default everything is exposed.
|
||||
;cors_expose_headers =
|
||||
; Enable file upload endpoint used by some triggers.
|
||||
;enable_archive_upload = no
|
||||
; Address to bind the server.
|
||||
host = 127.0.0.1
|
||||
; Full URL to the repository index page used by templates.
|
||||
;index_url =
|
||||
; Max file size in bytes which can be uploaded to the server. Requires ${web:enable_archive_upload} to be enabled.
|
||||
;max_body_size =
|
||||
; Max event queue size used for server sent event endpoints (0 is infinite)
|
||||
;max_queue_size = 0
|
||||
; Port to listen. Must be set, if the web service is enabled.
|
||||
;port =
|
||||
; Disable status (e.g. package status, logs, etc) endpoints. Useful for build only modes.
|
||||
;service_only = no
|
||||
; Path to directory with static files.
|
||||
static_path = ${templates}/static
|
||||
; Jinja2 template name for the index page.
|
||||
;template = build-status.jinja2
|
||||
; List of directories with templates.
|
||||
templates[] = ${prefix}/share/ahriman/templates
|
||||
; Path to unix socket. If none set, unix socket will be disabled.
|
||||
;unix_socket =
|
||||
; Allow unix socket to be world readable.
|
||||
;unix_socket_unsafe = yes
|
||||
; Maximum amount of time in seconds to be waited before lock will be free, used by spawned processes (0 is infinite).
|
||||
;wait_timeout =
|
||||
@@ -0,0 +1,22 @@
|
||||
<!DOCTYPE html>
|
||||
<html lang="en">
|
||||
<head>
|
||||
<meta charset="UTF-8">
|
||||
<title>ahriman API</title>
|
||||
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
|
||||
<!-- Embed elements Elements via Web Component -->
|
||||
<script src="https://cdn.jsdelivr.net/npm/@stoplight/elements@7.13.7/web-components.min.js" crossorigin="anonymous" type="application/javascript"></script>
|
||||
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/@stoplight/elements@7.13.7/styles.min.css" crossorigin="anonymous" type="text/css">
|
||||
</head>
|
||||
<body>
|
||||
|
||||
<elements-api
|
||||
apiDescriptionUrl="/api-docs/swagger.json"
|
||||
router="hash"
|
||||
layout="sidebar"
|
||||
logo="/static/logo.svg"
|
||||
/>
|
||||
|
||||
</body>
|
||||
</html>
|
||||
@@ -0,0 +1,191 @@
|
||||
<!doctype html>
|
||||
<html lang="en">
|
||||
<head>
|
||||
<title>ahriman</title>
|
||||
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1">
|
||||
|
||||
{% include "utils/style.jinja2" %}
|
||||
{% include "user-style.jinja2" ignore missing %}
|
||||
</head>
|
||||
|
||||
<body>
|
||||
|
||||
{% include "utils/bootstrap-scripts.jinja2" %}
|
||||
|
||||
<div class="container">
|
||||
<nav class="navbar navbar-expand-lg">
|
||||
<div class="navbar-brand"><a href="https://github.com/arcan1s/ahriman" title="logo"><img src="/static/logo.svg" width="30" height="30" alt=""></a></div>
|
||||
<button class="navbar-toggler" type="button" data-bs-toggle="collapse" data-bs-target="#repositories-navbar" aria-controls="repositories-navbar" aria-expanded="false" aria-label="Toggle navigation">
|
||||
<span class="navbar-toggler-icon"></span>
|
||||
</button>
|
||||
|
||||
<div id="repositories-navbar" class="collapse navbar-collapse">
|
||||
<ul id="repositories" class="nav nav-tabs">
|
||||
{% for repository in repositories %}
|
||||
<li class="nav-item">
|
||||
<a id="{{ repository.id }}-link" class="nav-link" href="#{{ repository.id }}" data-repository="{{ repository.repository }}" data-architecture="{{ repository.architecture }}">{{ repository.repository }} ({{ repository.architecture }})</a>
|
||||
</li>
|
||||
{% endfor %}
|
||||
</ul>
|
||||
</div>
|
||||
</nav>
|
||||
</div>
|
||||
|
||||
<div id="alert-placeholder" class="toast-container p3 top-0 start-50 translate-middle-x"></div>
|
||||
|
||||
<div class="container">
|
||||
<div id="toolbar" class="dropdown">
|
||||
<button id="dashboard-button" type="button" class="btn btn-outline-secondary" data-bs-toggle="modal" data-bs-target="#dashboard-modal">
|
||||
<i class="bi bi-info-circle"></i>
|
||||
</button>
|
||||
|
||||
{% if not auth.enabled or auth.username is not none %}
|
||||
<button type="button" class="btn btn-primary dropdown-toggle" data-bs-toggle="dropdown" aria-expanded="false">
|
||||
<i class="bi bi-box"></i><span class="d-none d-sm-inline"> packages</span>
|
||||
</button>
|
||||
<ul class="dropdown-menu">
|
||||
<li>
|
||||
<button id="package-add-button" class="btn dropdown-item" data-bs-toggle="modal" data-bs-target="#package-add-modal">
|
||||
<i class="bi bi-plus"></i> add
|
||||
</button>
|
||||
</li>
|
||||
<li>
|
||||
<button id="package-update-button" class="btn dropdown-item" onclick="packagesUpdate()">
|
||||
<i class="bi bi-play"></i> update
|
||||
</button>
|
||||
</li>
|
||||
<li>
|
||||
<button id="update-repositories-button" class="btn dropdown-item" onclick="refreshDatabases()">
|
||||
<i class="bi bi-arrow-down-circle"></i> update pacman databases
|
||||
</button>
|
||||
</li>
|
||||
<li>
|
||||
<button id="package-rebuild-button" class="btn dropdown-item" data-bs-toggle="modal" data-bs-target="#package-rebuild-modal">
|
||||
<i class="bi bi-arrow-clockwise"></i> rebuild
|
||||
</button>
|
||||
</li>
|
||||
<li>
|
||||
<button id="package-remove-button" class="btn dropdown-item" onclick="packagesRemove()" disabled>
|
||||
<i class="bi bi-trash"></i> remove
|
||||
</button>
|
||||
</li>
|
||||
</ul>
|
||||
|
||||
<button id="key-import-button" type="button" class="btn btn-info" data-bs-toggle="modal" data-bs-target="#key-import-modal">
|
||||
<i class="bi bi-key"></i><span class="d-none d-sm-inline"> import key</span>
|
||||
</button>
|
||||
{% endif %}
|
||||
|
||||
<button type="button" class="btn btn-secondary" onclick="reload()">
|
||||
<i class="bi bi-arrow-clockwise"></i><span class="d-none d-sm-inline"> reload</span>
|
||||
</button>
|
||||
|
||||
{% if autorefresh_intervals %}
|
||||
<div class="btn-group">
|
||||
<input id="table-autoreload-button" type="checkbox" class="btn-check" autocomplete="off" onclick="toggleTableAutoReload()" checked>
|
||||
<label for="table-autoreload-button" class="btn btn-outline-secondary" title="toggle auto reload"><i class="bi bi-clock"></i></label>
|
||||
<button type="button" class="btn btn-outline-secondary dropdown-toggle dropdown-toggle-split" data-bs-toggle="dropdown" aria-expanded="false">
|
||||
<span class="visually-hidden">select interval</span>
|
||||
</button>
|
||||
<ul id="table-autoreload-input" class="dropdown-menu">
|
||||
{% for interval in autorefresh_intervals %}
|
||||
<li><a class="dropdown-item {{ "active" if interval.is_active }}" onclick="toggleTableAutoReload({{ interval.interval }})" data-interval="{{ interval.interval }}">{{ interval.text }}</a></li>
|
||||
{% endfor %}
|
||||
</ul>
|
||||
</div>
|
||||
{% endif %}
|
||||
</div>
|
||||
|
||||
<table id="packages"
|
||||
data-classes="table table-hover"
|
||||
data-cookie="true"
|
||||
data-cookie-id-table="ahriman-packages"
|
||||
data-cookie-storage="localStorage"
|
||||
data-export-options='{"fileName": "packages"}'
|
||||
data-filter-control="true"
|
||||
data-filter-control-visible="false"
|
||||
data-page-list="[10, 25, 50, 100, all]"
|
||||
data-page-size="10"
|
||||
data-pagination="true"
|
||||
data-resizable="true"
|
||||
data-search="true"
|
||||
data-show-columns="true"
|
||||
data-show-columns-search="true"
|
||||
data-show-columns-toggle-all="true"
|
||||
data-show-export="true"
|
||||
data-show-filter-control-switch="true"
|
||||
data-show-fullscreen="true"
|
||||
data-show-search-clear-button="true"
|
||||
data-sortable="true"
|
||||
data-sort-name="base"
|
||||
data-sort-order="asc"
|
||||
data-toolbar="#toolbar"
|
||||
data-unique-id="id">
|
||||
<thead class="table-primary">
|
||||
<tr>
|
||||
<th data-checkbox="true"></th>
|
||||
<th data-sortable="true" data-switchable="false" data-field="base" data-filter-control="input" data-filter-control-placeholder="(any base)">package base</th>
|
||||
<th data-sortable="true" data-align="right" data-field="version" data-filter-control="input" data-filter-control-placeholder="(any version)">version</th>
|
||||
<th data-sortable="true" data-field="packages" data-filter-control="input" data-filter-control-placeholder="(any package)">packages</th>
|
||||
<th data-sortable="true" data-visible="false" data-field="groups" data-filter-control="select" data-filter-data="func:filterListGroups" data-filter-custom-search="filterList" data-filter-control-placeholder="(any group)">groups</th>
|
||||
<th data-sortable="true" data-visible="false" data-field="licenses" data-filter-control="select" data-filter-data="func:filterListLicenses" data-filter-custom-search="filterList" data-filter-control-placeholder="(any license)">licenses</th>
|
||||
<th data-sortable="true" data-visible="false" data-field="packager" data-filter-control="select" data-filter-custom-search="filterContains" data-filter-control-placeholder="(any packager)">packager</th>
|
||||
<th data-sortable="true" data-align="right" data-field="timestamp" data-filter-control="input" data-filter-custom-search="filterDateRange" data-filter-control-placeholder="(any date)">last update</th>
|
||||
<th data-sortable="true" data-align="center" data-cell-style="statusFormat" data-field="status" data-filter-control="select" data-filter-control-placeholder="(any status)">status</th>
|
||||
</tr>
|
||||
</thead>
|
||||
</table>
|
||||
</div>
|
||||
|
||||
<div class="container">
|
||||
<footer class="d-flex flex-wrap justify-content-between align-items-center border-top">
|
||||
<ul class="nav">
|
||||
<li><a id="badge-version" class="nav-link" href="https://github.com/arcan1s/ahriman" title="sources"><i class="bi bi-github"></i> ahriman</a></li>
|
||||
<li><a class="nav-link" href="https://github.com/arcan1s/ahriman/releases" title="releases list">releases</a></li>
|
||||
<li><a class="nav-link" href="https://github.com/arcan1s/ahriman/issues" title="issues tracker">report a bug</a></li>
|
||||
{% if docs_enabled %}
|
||||
<li><a class="nav-link" href="/api-docs" title="API documentation">api</a></li>
|
||||
{% endif %}
|
||||
</ul>
|
||||
|
||||
{% if index_url is not none %}
|
||||
<ul class="nav">
|
||||
<li><a class="nav-link" href="{{ index_url }}" title="repo index"><i class="bi bi-house"></i> repo index</a></li>
|
||||
</ul>
|
||||
{% endif %}
|
||||
|
||||
{% if auth.enabled %}
|
||||
<ul class="nav">
|
||||
{% if auth.username is none %}
|
||||
<li>{{ auth.control | safe }}</li>
|
||||
{% else %}
|
||||
<li>
|
||||
<form action="/api/v1/logout" method="post">
|
||||
<button class="btn btn-link" style="text-decoration: none"><i class="bi bi-box-arrow-right"></i> logout ({{ auth.username }})</button>
|
||||
</form>
|
||||
</li>
|
||||
{% endif %}
|
||||
</ul>
|
||||
{% endif %}
|
||||
</footer>
|
||||
</div>
|
||||
|
||||
{% if auth.enabled %}
|
||||
{% include "build-status/login-modal.jinja2" %}
|
||||
{% endif %}
|
||||
|
||||
{% include "build-status/alerts.jinja2" %}
|
||||
|
||||
{% include "build-status/dashboard.jinja2" %}
|
||||
{% include "build-status/package-add-modal.jinja2" %}
|
||||
{% include "build-status/package-rebuild-modal.jinja2" %}
|
||||
{% include "build-status/key-import-modal.jinja2" %}
|
||||
|
||||
{% include "build-status/package-info-modal.jinja2" %}
|
||||
|
||||
{% include "build-status/table.jinja2" %}
|
||||
|
||||
</body>
|
||||
|
||||
</html>
|
||||
@@ -0,0 +1,16 @@
|
||||
<!DOCTYPE html>
|
||||
<html lang="en">
|
||||
<head>
|
||||
<meta charset="UTF-8" />
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
|
||||
<title>ahriman</title>
|
||||
|
||||
<link rel="icon" href="/static/favicon.ico" />
|
||||
<script type="module" crossorigin src="/static/index.js"></script>
|
||||
</head>
|
||||
<body>
|
||||
|
||||
<div id="root"></div>
|
||||
|
||||
</body>
|
||||
</html>
|
||||
@@ -0,0 +1,51 @@
|
||||
<script>
|
||||
const alertPlaceholder = document.getElementById("alert-placeholder");
|
||||
|
||||
function createAlert(title, message, clz, action, id) {
|
||||
id ??= md5(title + message); // MD5 id from the content
|
||||
if (alertPlaceholder.querySelector(`#alert-${id}`)) {
|
||||
return; // check if there are duplicates
|
||||
}
|
||||
|
||||
const wrapper = document.createElement("div");
|
||||
wrapper.id = `alert-${id}`;
|
||||
wrapper.classList.add("toast", clz);
|
||||
wrapper.role = "alert";
|
||||
wrapper.ariaLive = "assertive";
|
||||
wrapper.ariaAtomic = "true";
|
||||
wrapper.style.width = "500px"; // 500px is default modal size
|
||||
|
||||
const header = document.createElement("div");
|
||||
header.classList.add("toast-header");
|
||||
header.innerHTML = `<strong class="me-auto">${safe(title)}</strong> <button type="button" class="btn-close" data-bs-dismiss="toast" aria-label="close"></button>`;
|
||||
wrapper.appendChild(header);
|
||||
|
||||
const body = document.createElement("div");
|
||||
body.classList.add("toast-body", "text-bg-light");
|
||||
body.innerText = message;
|
||||
wrapper.appendChild(body);
|
||||
|
||||
alertPlaceholder.appendChild(wrapper);
|
||||
const toast = new bootstrap.Toast(wrapper);
|
||||
wrapper.addEventListener("hidden.bs.toast", _ => {
|
||||
wrapper.remove(); // bootstrap doesn't remove elements
|
||||
(action || reload)();
|
||||
});
|
||||
toast.show();
|
||||
}
|
||||
|
||||
function showFailure(title, description, error) {
|
||||
let details;
|
||||
try {
|
||||
details = JSON.parse(error.text).error; // execution handler json error response
|
||||
} catch (_) {
|
||||
details = error.text ?? error.message ?? error;
|
||||
}
|
||||
createAlert(title, description(details), "text-bg-danger");
|
||||
}
|
||||
|
||||
function showSuccess(title, description, action) {
|
||||
createAlert(title, description, "text-bg-success", action);
|
||||
}
|
||||
|
||||
</script>
|
||||
@@ -0,0 +1,157 @@
|
||||
<div id="dashboard-modal" tabindex="-1" role="dialog" class="modal fade">
|
||||
<div class="modal-dialog modal-xl" role="document">
|
||||
<div class="modal-content">
|
||||
<div id="dashboard-modal-header" class="modal-header">
|
||||
<h4 class="modal-title">System health</h4>
|
||||
<button type="button" class="btn-close" data-bs-dismiss="modal" aria-label="close"></button>
|
||||
</div>
|
||||
<div class="modal-body">
|
||||
<div class="form-group row mt-2">
|
||||
<div class="col-4 col-lg-2" style="text-align: right">Repository name</div>
|
||||
<div id="dashboard-name" class="col-8 col-lg-3"></div>
|
||||
<div class="col-4 col-lg-2" style="text-align: right">Repository architecture</div>
|
||||
<div id="dashboard-architecture" class="col-8 col-lg-3"></div>
|
||||
</div>
|
||||
|
||||
<div class="form-group row mt-2">
|
||||
<div class="col-4 col-lg-2" style="text-align: right">Current status</div>
|
||||
<div id="dashboard-status" class="col-8 col-lg-3"></div>
|
||||
<div class="col-4 col-lg-2" style="text-align: right">Updated at</div>
|
||||
<div id="dashboard-status-timestamp" class="col-8 col-lg-3"></div>
|
||||
</div>
|
||||
|
||||
<div id="dashboard-canvas" class="form-group row mt-2">
|
||||
<div class="col-8 col-lg-6">
|
||||
<canvas id="dashboard-packages-count-chart"></canvas>
|
||||
</div>
|
||||
<div class="col-8 col-lg-6">
|
||||
<canvas id="dashboard-packages-statuses-chart"></canvas>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="modal-footer">
|
||||
<button type="button" class="btn btn-primary" data-bs-dismiss="modal"><i class="bi bi-x"></i><span class="d-none d-sm-inline"> close</span></button>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<script>
|
||||
const dashboardModal = document.getElementById("dashboard-modal");
|
||||
const dashboardModalHeader = document.getElementById("dashboard-modal-header");
|
||||
|
||||
const dashboardName = document.getElementById("dashboard-name");
|
||||
const dashboardArchitecture = document.getElementById("dashboard-architecture");
|
||||
const dashboardStatus = document.getElementById("dashboard-status");
|
||||
const dashboardStatusTimestamp = document.getElementById("dashboard-status-timestamp");
|
||||
|
||||
const dashboardCanvas = document.getElementById("dashboard-canvas");
|
||||
const dashboardPackagesStatusesChartCanvas = document.getElementById("dashboard-packages-statuses-chart");
|
||||
let dashboardPackagesStatusesChart = null;
|
||||
const dashboardPackagesCountChartCanvas = document.getElementById("dashboard-packages-count-chart");
|
||||
let dashboardPackagesCountChart = null;
|
||||
|
||||
function statusLoad() {
|
||||
const badgeClass = status => {
|
||||
if (status === "pending") return "btn-outline-warning";
|
||||
if (status === "building") return "btn-outline-warning";
|
||||
if (status === "failed") return "btn-outline-danger";
|
||||
if (status === "success") return "btn-outline-success";
|
||||
return "btn-outline-secondary";
|
||||
};
|
||||
|
||||
makeRequest(
|
||||
"/api/v1/status",
|
||||
{
|
||||
query: {
|
||||
architecture: repository.architecture,
|
||||
repository: repository.repository,
|
||||
},
|
||||
convert: response => response.json(),
|
||||
},
|
||||
data => {
|
||||
versionBadge.innerHTML = `<i class="bi bi-github"></i> ahriman ${safe(data.version)}`;
|
||||
|
||||
dashboardButton.classList.remove(...dashboardButton.classList);
|
||||
dashboardButton.classList.add("btn");
|
||||
dashboardButton.classList.add(badgeClass(data.status.status));
|
||||
|
||||
dashboardModalHeader.classList.remove(...dashboardModalHeader.classList);
|
||||
dashboardModalHeader.classList.add("modal-header");
|
||||
headerClass(data.status.status).forEach(clz => dashboardModalHeader.classList.add(clz));
|
||||
|
||||
dashboardName.textContent = data.repository;
|
||||
dashboardArchitecture.textContent = data.architecture;
|
||||
dashboardStatus.textContent = data.status.status;
|
||||
dashboardStatusTimestamp.textContent = new Date(1000 * data.status.timestamp).toISOStringShort();
|
||||
|
||||
if (dashboardPackagesStatusesChart) {
|
||||
const labels = [
|
||||
"unknown",
|
||||
"pending",
|
||||
"building",
|
||||
"failed",
|
||||
"success",
|
||||
];
|
||||
dashboardPackagesStatusesChart.config.data = {
|
||||
labels: labels,
|
||||
datasets: [{
|
||||
label: "packages in status",
|
||||
data: labels.map(label => data.packages[label]),
|
||||
backgroundColor: [
|
||||
"rgb(55, 58, 60)",
|
||||
"rgb(255, 117, 24)",
|
||||
"rgb(255, 117, 24)",
|
||||
"rgb(255, 0, 57)",
|
||||
"rgb(63, 182, 24)", // copy-paste from current style
|
||||
],
|
||||
}],
|
||||
};
|
||||
dashboardPackagesStatusesChart.update();
|
||||
}
|
||||
|
||||
if (dashboardPackagesCountChart) {
|
||||
dashboardPackagesCountChart.config.data = {
|
||||
labels: ["packages"],
|
||||
datasets: [
|
||||
{
|
||||
label: "archives",
|
||||
data: [data.stats.packages],
|
||||
},
|
||||
{
|
||||
label: "bases",
|
||||
data: [data.stats.bases],
|
||||
},
|
||||
],
|
||||
};
|
||||
dashboardPackagesCountChart.update();
|
||||
}
|
||||
|
||||
dashboardCanvas.hidden = data.status.total > 0;
|
||||
},
|
||||
);
|
||||
}
|
||||
|
||||
ready(_ => {
|
||||
dashboardPackagesStatusesChart = new Chart(dashboardPackagesStatusesChartCanvas, {
|
||||
type: "pie",
|
||||
data: {},
|
||||
options: {
|
||||
responsive: true,
|
||||
},
|
||||
});
|
||||
dashboardPackagesCountChart = new Chart(dashboardPackagesCountChartCanvas, {
|
||||
type: "bar",
|
||||
data: {},
|
||||
options: {
|
||||
maintainAspectRatio: false,
|
||||
responsive: true,
|
||||
scales: {
|
||||
x: {
|
||||
stacked: true,
|
||||
},
|
||||
},
|
||||
},
|
||||
});
|
||||
});
|
||||
</script>
|
||||
@@ -0,0 +1,104 @@
|
||||
<div id="key-import-modal" tabindex="-1" role="dialog" class="modal fade">
|
||||
<div class="modal-dialog modal-xl" role="document">
|
||||
<div class="modal-content">
|
||||
<form id="key-import-form" onsubmit="return false">
|
||||
<div class="modal-header">
|
||||
<h4 class="modal-title">Import key from PGP server</h4>
|
||||
<button type="button" class="btn-close" data-bs-dismiss="modal" aria-label="close"></button>
|
||||
</div>
|
||||
<div class="modal-body">
|
||||
<div class="form-group row">
|
||||
<label for="key-import-fingerprint-input" class="col-2 col-form-label">fingerprint</label>
|
||||
<div class="col-10">
|
||||
<input id="key-import-fingerprint-input" type="text" class="form-control" placeholder="PGP key fingerprint" name="key" required>
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group row">
|
||||
<label for="key-import-server-input" class="col-2 col-form-label">key server</label>
|
||||
<div class="col-10">
|
||||
<input id="key-import-server-input" type="text" class="form-control" placeholder="PGP key server" name="server" value="keyserver.ubuntu.com" required>
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group row">
|
||||
<div class="col-2"></div>
|
||||
<div class="col-10">
|
||||
<pre class="language-less"><samp id="key-import-body-input" class="pre-scrollable language-less"></samp><button id="key-import-copy-button" type="button" class="btn language-less" onclick="copyPgpKey()"><i class="bi bi-clipboard"></i> copy</button></pre>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="modal-footer">
|
||||
<button type="submit" class="btn btn-primary" onclick="importPgpKey()"><i class="bi bi-play"></i> import</button>
|
||||
<button type="submit" class="btn btn-success" onclick="fetchPgpKey()"><i class="bi bi-arrow-clockwise"></i> fetch</button>
|
||||
</div>
|
||||
</form>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<script>
|
||||
const keyImportModal = document.getElementById("key-import-modal");
|
||||
const keyImportForm = document.getElementById("key-import-form");
|
||||
|
||||
const keyImportBodyInput = document.getElementById("key-import-body-input");
|
||||
const keyImportCopyButton = document.getElementById("key-import-copy-button");
|
||||
|
||||
const keyImportFingerprintInput = document.getElementById("key-import-fingerprint-input");
|
||||
const keyImportServerInput = document.getElementById("key-import-server-input");
|
||||
|
||||
async function copyPgpKey() {
|
||||
const key = keyImportBodyInput.textContent;
|
||||
await copyToClipboard(key, keyImportCopyButton);
|
||||
}
|
||||
|
||||
function fetchPgpKey() {
|
||||
const key = keyImportFingerprintInput.value;
|
||||
const server = keyImportServerInput.value;
|
||||
|
||||
if (key && server) {
|
||||
makeRequest(
|
||||
"/api/v1/service/pgp",
|
||||
{
|
||||
query: {
|
||||
key: key,
|
||||
server: server,
|
||||
},
|
||||
convert: response => response.json(),
|
||||
},
|
||||
data => { keyImportBodyInput.textContent = data.key; },
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
function importPgpKey() {
|
||||
const key = keyImportFingerprintInput.value;
|
||||
const server = keyImportServerInput.value;
|
||||
|
||||
if (key && server) {
|
||||
makeRequest(
|
||||
"/api/v1/service/pgp",
|
||||
{
|
||||
method: "POST",
|
||||
json: {
|
||||
key: key,
|
||||
server: server,
|
||||
},
|
||||
},
|
||||
_ => {
|
||||
bootstrap.Modal.getOrCreateInstance(keyImportModal).hide();
|
||||
showSuccess("Success", `Key ${key} has been imported`);
|
||||
},
|
||||
error => {
|
||||
const message = _ => `Could not import key ${key} from ${server}`;
|
||||
showFailure("Action failed", message, error);
|
||||
},
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
ready(_ => {
|
||||
keyImportModal.addEventListener("hidden.bs.modal", _ => {
|
||||
keyImportBodyInput.textContent = "";
|
||||
keyImportForm.reset();
|
||||
});
|
||||
});
|
||||
</script>
|
||||
@@ -0,0 +1,90 @@
|
||||
<div id="login-modal" tabindex="-1" role="dialog" class="modal fade">
|
||||
<div class="modal-dialog" role="document">
|
||||
<div class="modal-content">
|
||||
<form id="login-form" onsubmit="return false">
|
||||
<div class="modal-header">
|
||||
<h4 class="modal-title">Login</h4>
|
||||
<button type="button" class="btn-close" data-bs-dismiss="modal" aria-label="close"></button>
|
||||
</div>
|
||||
<div class="modal-body">
|
||||
<div class="form-group row">
|
||||
<label for="login-username" class="col-4 col-form-label">username</label>
|
||||
<div class="col-8">
|
||||
<input id="login-username" type="text" class="form-control" placeholder="enter username" name="username" required>
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group row">
|
||||
<label for="login-password" class="col-4 col-form-label">password</label>
|
||||
<div class="col-8">
|
||||
<div class="input-group">
|
||||
<input id="login-password" type="password" class="form-control" placeholder="enter password" name="password" required>
|
||||
<div class="input-group-append">
|
||||
<button class="btn btn-outline-secondary" type="button" onclick="showPassword()"><i id="login-show-hide-password-button" class="bi bi-eye"></i></button>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="modal-footer">
|
||||
<button type="submit" class="btn btn-primary" onclick="login()"><i class="bi bi-person"></i> login</button>
|
||||
</div>
|
||||
</form>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<script>
|
||||
const loginModal = document.getElementById("login-modal");
|
||||
const loginForm = document.getElementById("login-form");
|
||||
|
||||
const loginPasswordInput = document.getElementById("login-password");
|
||||
const loginUsernameInput = document.getElementById("login-username");
|
||||
const showHidePasswordButton = document.getElementById("login-show-hide-password-button");
|
||||
|
||||
function login() {
|
||||
const password = loginPasswordInput.value;
|
||||
const username = loginUsernameInput.value;
|
||||
|
||||
if (username && password) {
|
||||
makeRequest(
|
||||
"/api/v1/login",
|
||||
{
|
||||
method: "POST",
|
||||
json: {
|
||||
username: username,
|
||||
password: password,
|
||||
},
|
||||
},
|
||||
_ => {
|
||||
bootstrap.Modal.getOrCreateInstance(loginModal).hide();
|
||||
showSuccess("Logged in", `Successfully logged in as ${username}`, _ => location.href = "/");
|
||||
},
|
||||
error => {
|
||||
const message = _ =>
|
||||
username === "admin" && password === "admin"
|
||||
? "You've entered a password for user \"root\", did you make a typo in username?"
|
||||
: `Could not login as ${username}`;
|
||||
showFailure("Login error", message, error);
|
||||
},
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
function showPassword() {
|
||||
if (loginPasswordInput.getAttribute("type") === "password") {
|
||||
loginPasswordInput.setAttribute("type", "text");
|
||||
showHidePasswordButton.classList.remove("bi-eye");
|
||||
showHidePasswordButton.classList.add("bi-eye-slash");
|
||||
} else {
|
||||
loginPasswordInput.setAttribute("type", "password");
|
||||
showHidePasswordButton.classList.remove("bi-eye-slash");
|
||||
showHidePasswordButton.classList.add("bi-eye");
|
||||
}
|
||||
}
|
||||
|
||||
ready(_ => {
|
||||
loginModal.addEventListener("hidden.bs.modal", _ => {
|
||||
loginForm.reset();
|
||||
});
|
||||
});
|
||||
</script>
|
||||
@@ -0,0 +1,188 @@
|
||||
<div id="package-add-modal" tabindex="-1" role="dialog" class="modal fade">
|
||||
<div class="modal-dialog modal-lg" role="document">
|
||||
<div class="modal-content">
|
||||
<form id="package-add-form" onsubmit="return false">
|
||||
<div class="modal-header">
|
||||
<h4 class="modal-title">Add new packages</h4>
|
||||
<button type="button" class="btn-close" data-bs-dismiss="modal" aria-label="close"></button>
|
||||
</div>
|
||||
<div class="modal-body">
|
||||
<div class="form-group row">
|
||||
<label for="package-add-repository-input" class="col-3 col-form-label">repository</label>
|
||||
<div class="col-9">
|
||||
<select id="package-add-repository-input" class="form-control" required>
|
||||
{% for repository in repositories %}
|
||||
<option value="{{ repository.id }}" data-repository="{{ repository.repository }}" data-architecture="{{ repository.architecture }}">{{ repository.repository }} ({{ repository.architecture }})</option>
|
||||
{% endfor %}
|
||||
</select>
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group row">
|
||||
<label for="package-add-input" class="col-3 col-form-label">package</label>
|
||||
<div class="col-9">
|
||||
<input id="package-add-input" type="text" list="package-add-known-packages-dlist" autocomplete="off" class="form-control" placeholder="AUR package" required>
|
||||
<datalist id="package-add-known-packages-dlist"></datalist>
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group row">
|
||||
<label class="col-3 col-form-label"></label>
|
||||
<div class="col-9">
|
||||
<input id="package-add-refresh-input" type="checkbox" class="form-check-input" value="" checked>
|
||||
<label for="package-add-refresh-input" class="form-check-label">update pacman databases</label>
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group row">
|
||||
<div class="col-12">
|
||||
<button id="package-add-variable-button" type="button" class="form-control btn btn-light rounded" onclick="packageAddVariableInputCreate()"><i class="bi bi-plus"></i> add environment variable </button>
|
||||
</div>
|
||||
</div>
|
||||
<div id="package-add-variables-div" class="form-group row"></div>
|
||||
</div>
|
||||
<div class="modal-footer">
|
||||
<button type="submit" class="btn btn-primary" onclick="packagesAdd()"><i class="bi bi-play"></i> add</button>
|
||||
<button type="submit" class="btn btn-success" onclick="packagesRequest()"><i class="bi bi-plus"></i> request</button>
|
||||
</div>
|
||||
</form>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<script>
|
||||
const packageAddModal = document.getElementById("package-add-modal");
|
||||
const packageAddForm = document.getElementById("package-add-form");
|
||||
|
||||
const packageAddInput = document.getElementById("package-add-input");
|
||||
const packageAddRepositoryInput = document.getElementById("package-add-repository-input");
|
||||
const packageAddKnownPackagesList = document.getElementById("package-add-known-packages-dlist");
|
||||
|
||||
const packageAddVariablesDiv = document.getElementById("package-add-variables-div");
|
||||
|
||||
const packageAddRefreshInput = document.getElementById("package-add-refresh-input");
|
||||
|
||||
function packageAddVariableInputCreate() {
|
||||
const variableInput = document.createElement("div");
|
||||
variableInput.classList.add("input-group");
|
||||
variableInput.classList.add("package-add-variable");
|
||||
|
||||
const variableNameInput = document.createElement("input");
|
||||
variableNameInput.type = "text";
|
||||
variableNameInput.classList.add("form-control");
|
||||
variableNameInput.classList.add("package-add-variable-name");
|
||||
variableNameInput.placeholder = "name";
|
||||
variableNameInput.ariaLabel = "variable name";
|
||||
|
||||
const variableSeparator = document.createElement("span");
|
||||
variableSeparator.classList.add("input-group-text")
|
||||
variableSeparator.textContent = "=";
|
||||
|
||||
const variableValueInput = document.createElement("input");
|
||||
variableValueInput.type = "text";
|
||||
variableValueInput.classList.add("form-control");
|
||||
variableValueInput.classList.add("package-add-variable-value");
|
||||
variableValueInput.placeholder = "value";
|
||||
variableValueInput.ariaLabel = "variable value";
|
||||
|
||||
const variableButtonRemove = document.createElement("button");
|
||||
variableButtonRemove.type = "button";
|
||||
variableButtonRemove.classList.add("btn");
|
||||
variableButtonRemove.classList.add("btn-outline-danger");
|
||||
variableButtonRemove.innerHTML = "<i class=\"bi bi-trash\"></i>";
|
||||
variableButtonRemove.onclick = _ => { variableInput.remove(); };
|
||||
|
||||
// bring them together
|
||||
variableInput.appendChild(variableNameInput);
|
||||
variableInput.appendChild(variableSeparator);
|
||||
variableInput.appendChild(variableValueInput);
|
||||
variableInput.appendChild(variableButtonRemove);
|
||||
|
||||
packageAddVariablesDiv.appendChild(variableInput);
|
||||
}
|
||||
|
||||
function patchesParse() {
|
||||
const patches = Array.from(packageAddVariablesDiv.getElementsByClassName("package-add-variable")).map(element => {
|
||||
return {
|
||||
key: element.querySelector(".package-add-variable-name").value,
|
||||
value: element.querySelector(".package-add-variable-value").value,
|
||||
};
|
||||
}).filter(patch => patch.key);
|
||||
return {patches: patches};
|
||||
}
|
||||
|
||||
function packagesAdd(packages, patches, repository, data) {
|
||||
packages = packages ?? packageAddInput.value;
|
||||
patches = patches ?? patchesParse();
|
||||
repository = repository ?? getRepositorySelector(packageAddRepositoryInput);
|
||||
data = data ?? {refresh: packageAddRefreshInput.checked};
|
||||
|
||||
if (packages) {
|
||||
bootstrap.Modal.getOrCreateInstance(packageAddModal).hide();
|
||||
const onSuccess = update => `Packages ${update} have been added`;
|
||||
const onFailure = error => `Package addition failed: ${error}`;
|
||||
const parameters = Object.assign({}, data, patches);
|
||||
doPackageAction("/api/v1/service/add", [packages], repository, onSuccess, onFailure, parameters);
|
||||
}
|
||||
}
|
||||
|
||||
function packagesRequest(packages, patches) {
|
||||
packages = packages ?? packageAddInput.value;
|
||||
patches = patches ?? patchesParse();
|
||||
const repository = getRepositorySelector(packageAddRepositoryInput);
|
||||
|
||||
if (packages) {
|
||||
bootstrap.Modal.getOrCreateInstance(packageAddModal).hide();
|
||||
const onSuccess = update => `Packages ${update} have been requested`;
|
||||
const onFailure = error => `Package request failed: ${error}`;
|
||||
doPackageAction("/api/v1/service/request", [packages], repository, onSuccess, onFailure, patches);
|
||||
}
|
||||
}
|
||||
|
||||
ready(_ => {
|
||||
packageAddModal.addEventListener("shown.bs.modal", _ => {
|
||||
const option = packageAddRepositoryInput.querySelector(`option[value="${repository.architecture}-${repository.repository}"]`);
|
||||
option.selected = "selected";
|
||||
});
|
||||
packageAddModal.addEventListener("hidden.bs.modal", _ => {
|
||||
packageAddVariablesDiv.replaceChildren();
|
||||
packageAddForm.reset();
|
||||
});
|
||||
|
||||
packageAddInput.addEventListener("keyup", _ => {
|
||||
clearTimeout(packageAddInput.requestTimeout);
|
||||
|
||||
// do not update datalist if search string didn't change yet
|
||||
const value = packageAddInput.value;
|
||||
const previousValue = packageAddInput.dataset.previousValue;
|
||||
if (value === previousValue) {
|
||||
return;
|
||||
}
|
||||
|
||||
// store current search string in attributes
|
||||
packageAddInput.dataset.previousValue = value;
|
||||
|
||||
// perform data list update
|
||||
packageAddInput.requestTimeout = setTimeout(_ => {
|
||||
|
||||
if (value.length >= 3) {
|
||||
makeRequest(
|
||||
"/api/v1/service/search",
|
||||
{
|
||||
query: {
|
||||
for: value,
|
||||
},
|
||||
convert: response => response.json(),
|
||||
},
|
||||
data => {
|
||||
const options = data.map(pkg => {
|
||||
const option = document.createElement("option");
|
||||
option.value = pkg.package;
|
||||
option.innerText = `${pkg.package} (${pkg.description})`;
|
||||
return option;
|
||||
});
|
||||
packageAddKnownPackagesList.replaceChildren(...options);
|
||||
},
|
||||
);
|
||||
}
|
||||
}, 500);
|
||||
});
|
||||
});
|
||||
</script>
|
||||
@@ -0,0 +1,586 @@
|
||||
<div id="package-info-modal" tabindex="-1" role="dialog" class="modal fade">
|
||||
<div class="modal-dialog modal-xl" role="document">
|
||||
<div class="modal-content">
|
||||
<div id="package-info-modal-header" class="modal-header">
|
||||
<h4 id="package-info" class="modal-title"></h4>
|
||||
<button type="button" class="btn-close" data-bs-dismiss="modal" aria-label="close"></button>
|
||||
</div>
|
||||
<div class="modal-body">
|
||||
<div class="form-group row mt-2">
|
||||
<div class="col-4 col-lg-1" style="text-align: right">packages</div>
|
||||
<div id="package-info-packages" class="col-8 col-lg-5"></div>
|
||||
<div class="col-4 col-lg-1" style="text-align: right">version</div>
|
||||
<div id="package-info-version" class="col-8 col-lg-5"></div>
|
||||
</div>
|
||||
|
||||
<div class="form-group row mt-2">
|
||||
<div class="col-4 col-lg-1" style="text-align: right">packager</div>
|
||||
<div id="package-info-packager" class="col-8 col-lg-5"></div>
|
||||
<div class="col-4 col-lg-1" style="text-align: right"></div>
|
||||
<div id="package-info---placeholder" class="col-8 col-lg-5"></div>
|
||||
</div>
|
||||
|
||||
<div class="form-group row mt-2">
|
||||
<div class="col-4 col-lg-1" style="text-align: right">groups</div>
|
||||
<div id="package-info-groups" class="col-8 col-lg-5"></div>
|
||||
<div class="col-4 col-lg-1" style="text-align: right">licenses</div>
|
||||
<div id="package-info-licenses" class="col-8 col-lg-5"></div>
|
||||
</div>
|
||||
|
||||
<div class="form-group row mt-2">
|
||||
<div class="col-4 col-lg-1" style="text-align: right">upstream</div>
|
||||
<div id="package-info-upstream-url" class="col-8 col-lg-5"></div>
|
||||
<div class="col-4 col-lg-1" style="text-align: right">AUR</div>
|
||||
<div id="package-info-aur-url" class="col-8 col-lg-5"></div>
|
||||
</div>
|
||||
|
||||
<div class="form-group row mt-2">
|
||||
<div class="col-4 col-lg-1" style="text-align: right">depends</div>
|
||||
<div id="package-info-depends" class="col-8 col-lg-5"></div>
|
||||
<div class="col-4 col-lg-1" style="text-align: right">implicitly depends</div>
|
||||
<div id="package-info-implicitly-depends" class="col-8 col-lg-5"></div>
|
||||
</div>
|
||||
|
||||
<hr class="col-12">
|
||||
|
||||
<div id="package-info-variables-block" hidden>
|
||||
<h3>Environment variables</h3>
|
||||
<div id="package-info-variables-div" class="form-group row"></div>
|
||||
|
||||
<hr class="col-12">
|
||||
</div>
|
||||
|
||||
<nav>
|
||||
<div class="nav nav-tabs" role="tablist">
|
||||
<button id="package-info-logs-button" class="nav-link active" data-bs-toggle="tab" data-bs-target="#package-info-logs" type="button" role="tab" aria-controls="package-info-logs" aria-selected="true">Build logs</button>
|
||||
<button id="package-info-changes-button" class="nav-link" data-bs-toggle="tab" data-bs-target="#package-info-changes" type="button" role="tab" aria-controls="package-info-changes" aria-selected="false">Changes</button>
|
||||
<button id="package-info-events-button" class="nav-link" data-bs-toggle="tab" data-bs-target="#package-info-events" type="button" role="tab" aria-controls="package-info-events" aria-selected="false">Events</button>
|
||||
</div>
|
||||
</nav>
|
||||
<div class="tab-content" id="nav-tabContent">
|
||||
<div id="package-info-logs" class="tab-pane fade show active" role="tabpanel" aria-labelledby="package-info-logs-button" tabindex="0">
|
||||
<div class="row">
|
||||
<div class="col-1 dropend">
|
||||
<button id="package-info-logs-dropdown" class="btn dropdown-toggle" type="button" data-bs-toggle="dropdown" aria-expanded="false">
|
||||
<i class="bi bi-list"></i>
|
||||
</button>
|
||||
<nav id="package-info-logs-versions" class="dropdown-menu" aria-labelledby="package-info-logs-dropdown"></nav>
|
||||
</div>
|
||||
<div class="col-11">
|
||||
<pre class="language-console"><code id="package-info-logs-input" class="pre-scrollable language-console"></code><button id="package-info-logs-copy-button" type="button" class="btn language-console" onclick="copyLogs()"><i class="bi bi-clipboard"></i> copy</button></pre>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div id="package-info-changes" class="tab-pane fade" role="tabpanel" aria-labelledby="package-info-changes-button" tabindex="0">
|
||||
<pre class="language-diff"><code id="package-info-changes-input" class="pre-scrollable language-diff"></code><button id="package-info-changes-copy-button" type="button" class="btn language-diff" onclick="copyChanges()"><i class="bi bi-clipboard"></i> copy</button></pre>
|
||||
</div>
|
||||
<div id="package-info-events" class="tab-pane fade" role="tabpanel" aria-labelledby="package-info-events-button" tabindex="0">
|
||||
<canvas id="package-info-events-update-chart" hidden></canvas>
|
||||
<table id="package-info-events-table"
|
||||
data-classes="table table-hover"
|
||||
data-sortable="true"
|
||||
data-sort-name="timestamp"
|
||||
data-sort-order="desc">
|
||||
<thead class="table-primary">
|
||||
<tr>
|
||||
<th data-align="right" data-field="timestamp">date</th>
|
||||
<th data-field="event">event</th>
|
||||
<th data-field="message">description</th>
|
||||
</tr>
|
||||
</thead>
|
||||
</table>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="modal-footer">
|
||||
{% if not auth.enabled or auth.username is not none %}
|
||||
<input id="package-info-refresh-input" type="checkbox" class="form-check-input" value="" checked>
|
||||
<label for="package-info-refresh-input" class="form-check-label">update pacman databases</label>
|
||||
|
||||
<button id="package-info-update-button" type="submit" class="btn btn-success" onclick="packageInfoUpdate()"><i class="bi bi-play"></i><span class="d-none d-sm-inline"> update</span></button>
|
||||
<button id="package-info-remove-button" type="submit" class="btn btn-danger" onclick="packageInfoRemove()" data-bs-dismiss="modal"><i class="bi bi-trash"></i><span class="d-none d-sm-inline"> remove</span></button>
|
||||
{% endif %}
|
||||
{% if autorefresh_intervals %}
|
||||
<button type="button" class="btn btn-secondary" onclick="showPackageInfo()"><i class="bi bi-arrow-clockwise"></i><span class="d-none d-sm-inline"> reload</span></button>
|
||||
<div class="btn-group dropup">
|
||||
<input id="package-info-autoreload-button" type="checkbox" class="btn-check" autocomplete="off" onclick="togglePackageInfoAutoReload()" checked>
|
||||
<label for="package-info-autoreload-button" class="btn btn-outline-secondary" title="toggle auto reload"><i class="bi bi-clock"></i></label>
|
||||
<button type="button" class="btn btn-outline-secondary dropdown-toggle dropdown-toggle-split" data-bs-toggle="dropdown" aria-expanded="false">
|
||||
<span class="visually-hidden">select interval</span>
|
||||
</button>
|
||||
<ul id="package-info-autoreload-input" class="dropdown-menu">
|
||||
{% for interval in autorefresh_intervals %}
|
||||
<li><a class="dropdown-item {{ "active" if interval.is_active }}" onclick="togglePackageInfoAutoReload({{ interval.interval }})" data-interval="{{ interval.interval }}">{{ interval.text }}</a></li>
|
||||
{% endfor %}
|
||||
</ul>
|
||||
</div>
|
||||
{% endif %}
|
||||
<button type="button" class="btn btn-primary" data-bs-dismiss="modal"><i class="bi bi-x"></i><span class="d-none d-sm-inline"> close</span></button>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<script>
|
||||
const packageInfoModal = document.getElementById("package-info-modal");
|
||||
const packageInfoModalHeader = document.getElementById("package-info-modal-header");
|
||||
const packageInfo = document.getElementById("package-info");
|
||||
|
||||
const packageInfoLogsVersions = document.getElementById("package-info-logs-versions");
|
||||
const packageInfoLogsInput = document.getElementById("package-info-logs-input");
|
||||
const packageInfoLogsCopyButton = document.getElementById("package-info-logs-copy-button");
|
||||
|
||||
const packageInfoChangesInput = document.getElementById("package-info-changes-input");
|
||||
const packageInfoChangesCopyButton = document.getElementById("package-info-changes-copy-button");
|
||||
|
||||
// so far bootstrap-table only operates with jquery elements
|
||||
const packageInfoEventsTable = $(document.getElementById("package-info-events-table"));
|
||||
const packageInfoEventsUpdateChartCanvas = document.getElementById("package-info-events-update-chart");
|
||||
let packageInfoEventsUpdateChart = null;
|
||||
|
||||
const packageInfoAurUrl = document.getElementById("package-info-aur-url");
|
||||
const packageInfoDepends = document.getElementById("package-info-depends");
|
||||
const packageInfoGroups = document.getElementById("package-info-groups");
|
||||
const packageInfoImplicitlyDepends = document.getElementById("package-info-implicitly-depends");
|
||||
const packageInfoLicenses = document.getElementById("package-info-licenses");
|
||||
const packageInfoPackager = document.getElementById("package-info-packager");
|
||||
const packageInfoPackages = document.getElementById("package-info-packages");
|
||||
const packageInfoUpstreamUrl = document.getElementById("package-info-upstream-url");
|
||||
const packageInfoVersion = document.getElementById("package-info-version");
|
||||
|
||||
const packageInfoVariablesBlock = document.getElementById("package-info-variables-block");
|
||||
const packageInfoVariablesDiv = document.getElementById("package-info-variables-div");
|
||||
|
||||
const packageInfoRefreshInput = document.getElementById("package-info-refresh-input");
|
||||
|
||||
const packageInfoAutoReloadButton = document.getElementById("package-info-autoreload-button");
|
||||
const packageInfoAutoReloadInput = document.getElementById("package-info-autoreload-input");
|
||||
let packageInfoAutoReloadTask = null;
|
||||
|
||||
function clearChart() {
|
||||
packageInfoEventsUpdateChartCanvas.hidden = true;
|
||||
if (packageInfoEventsUpdateChart) {
|
||||
packageInfoEventsUpdateChart.data = {};
|
||||
packageInfoEventsUpdateChart.update();
|
||||
}
|
||||
}
|
||||
|
||||
function convertLogs(data, filter) {
|
||||
return data
|
||||
.filter((filter || Boolean))
|
||||
.map(log_record => `[${new Date(1000 * log_record.created).toISOString()}] ${log_record.message}`)
|
||||
.join("\n");
|
||||
}
|
||||
|
||||
async function copyChanges() {
|
||||
const changes = packageInfoChangesInput.textContent;
|
||||
await copyToClipboard(changes, packageInfoChangesCopyButton);
|
||||
}
|
||||
|
||||
async function copyLogs() {
|
||||
const logs = packageInfoLogsInput.textContent;
|
||||
await copyToClipboard(logs, packageInfoLogsCopyButton);
|
||||
}
|
||||
|
||||
function highlight(element) {
|
||||
delete element.dataset.highlighted;
|
||||
hljs.highlightElement(element);
|
||||
}
|
||||
|
||||
function insertVariable(packageBase, variable) {
|
||||
const variableInput = document.createElement("div");
|
||||
variableInput.classList.add("input-group");
|
||||
|
||||
const variableNameInput = document.createElement("input");
|
||||
variableNameInput.classList.add("form-control");
|
||||
variableNameInput.readOnly = true;
|
||||
variableNameInput.value = variable.key;
|
||||
|
||||
const variableSeparator = document.createElement("span");
|
||||
variableSeparator.classList.add("input-group-text")
|
||||
variableSeparator.textContent = "=";
|
||||
|
||||
const variableValueInput = document.createElement("input");
|
||||
variableValueInput.classList.add("form-control");
|
||||
variableValueInput.readOnly = true;
|
||||
variableValueInput.value = JSON.stringify(variable.value);
|
||||
|
||||
const variableButtonRemove = document.createElement("button");
|
||||
variableButtonRemove.type = "button";
|
||||
variableButtonRemove.classList.add("btn");
|
||||
variableButtonRemove.classList.add("btn-outline-danger");
|
||||
variableButtonRemove.innerHTML = "<i class=\"bi bi-trash\"></i>";
|
||||
variableButtonRemove.onclick = _ => {
|
||||
makeRequest(
|
||||
`/api/v1/packages/${packageBase}/patches/${variable.key}`,
|
||||
{
|
||||
method: "DELETE",
|
||||
},
|
||||
_ => variableInput.remove(),
|
||||
);
|
||||
};
|
||||
|
||||
// bring them together
|
||||
variableInput.appendChild(variableNameInput);
|
||||
variableInput.appendChild(variableSeparator);
|
||||
variableInput.appendChild(variableValueInput);
|
||||
variableInput.appendChild(variableButtonRemove);
|
||||
|
||||
packageInfoVariablesDiv.appendChild(variableInput);
|
||||
}
|
||||
|
||||
function loadChanges(packageBase, onFailure) {
|
||||
makeRequest(
|
||||
`/api/v1/packages/${packageBase}/changes`,
|
||||
{
|
||||
query: {
|
||||
architecture: repository.architecture,
|
||||
repository: repository.repository,
|
||||
},
|
||||
convert: response => response.json(),
|
||||
},
|
||||
data => {
|
||||
const changes = data.changes;
|
||||
packageInfoChangesInput.textContent = changes ?? "";
|
||||
highlight(packageInfoChangesInput);
|
||||
},
|
||||
onFailure,
|
||||
);
|
||||
}
|
||||
|
||||
function loadDependencies(packageBase, onFailure) {
|
||||
makeRequest(
|
||||
`/api/v1/packages/${packageBase}/dependencies`,
|
||||
{
|
||||
query: {
|
||||
architecture: repository.architecture,
|
||||
repository: repository.repository,
|
||||
},
|
||||
convert: response => response.json(),
|
||||
},
|
||||
data => {
|
||||
packageInfoImplicitlyDepends.innerHTML = listToTable(
|
||||
Object.values(data.paths)
|
||||
.reduce((accumulator, currentValue) => accumulator.concat(currentValue), [])
|
||||
);
|
||||
},
|
||||
onFailure,
|
||||
);
|
||||
}
|
||||
|
||||
function loadEvents(packageBase, onFailure) {
|
||||
packageInfoEventsTable.bootstrapTable("showLoading");
|
||||
clearChart();
|
||||
|
||||
makeRequest(
|
||||
"/api/v1/events",
|
||||
{
|
||||
query: {
|
||||
architecture: repository.architecture,
|
||||
repository: repository.repository,
|
||||
object_id: packageBase,
|
||||
limit: 30,
|
||||
},
|
||||
convert: response => response.json(),
|
||||
},
|
||||
data => {
|
||||
const events = data.map(event => {
|
||||
return {
|
||||
timestamp: new Date(1000 * event.created).toISOStringShort(),
|
||||
event: event.event,
|
||||
message: event.message || "",
|
||||
};
|
||||
});
|
||||
const chart = data.filter(event => event.event === "package-updated");
|
||||
|
||||
packageInfoEventsTable.bootstrapTable("load", events);
|
||||
packageInfoEventsTable.bootstrapTable("hideLoading");
|
||||
|
||||
if (packageInfoEventsUpdateChart) {
|
||||
packageInfoEventsUpdateChart.config.data = {
|
||||
labels: chart.map(event => new Date(1000 * event.created).toISOStringShort()),
|
||||
datasets: [{
|
||||
label: "update duration, s",
|
||||
data: chart.map(event => event.data.took),
|
||||
cubicInterpolationMode: "monotone",
|
||||
tension: 0.4,
|
||||
}],
|
||||
};
|
||||
packageInfoEventsUpdateChart.update();
|
||||
}
|
||||
packageInfoEventsUpdateChartCanvas.hidden = !chart.length;
|
||||
},
|
||||
onFailure,
|
||||
);
|
||||
}
|
||||
|
||||
function loadLogs(packageBase, onFailure) {
|
||||
const sortFn = (left, right) => left.process_id.localeCompare(right.process_id) || left.version.localeCompare(right.version);
|
||||
const compareFn = (left, right) => left.process_id === right.process_id && left.version === right.version;
|
||||
|
||||
makeRequest(
|
||||
`/api/v2/packages/${packageBase}/logs`,
|
||||
{
|
||||
query: {
|
||||
architecture: repository.architecture,
|
||||
head: true,
|
||||
repository: repository.repository,
|
||||
},
|
||||
convert: response => response.json(),
|
||||
},
|
||||
data => {
|
||||
const currentVersions = Array.from(packageInfoLogsVersions.children)
|
||||
.map(el => {
|
||||
return {
|
||||
process_id: el.dataset.processId,
|
||||
version: el.dataset.version,
|
||||
};
|
||||
})
|
||||
.sort(sortFn);
|
||||
const newVersions = data
|
||||
.map(el => {
|
||||
return {
|
||||
process_id: el.process_id,
|
||||
version: el.version,
|
||||
};
|
||||
})
|
||||
.sort(sortFn);
|
||||
|
||||
if (currentVersions.equals(newVersions, compareFn))
|
||||
loadLogsActive(packageBase);
|
||||
else
|
||||
loadLogsAll(packageBase, onFailure);
|
||||
},
|
||||
)
|
||||
}
|
||||
|
||||
function loadLogsActive(packageBase) {
|
||||
const activeLogSelector = packageInfoLogsVersions.querySelector(".active");
|
||||
|
||||
if (activeLogSelector) {
|
||||
makeRequest(
|
||||
`/api/v2/packages/${packageBase}/logs`,
|
||||
{
|
||||
query: {
|
||||
architecture: repository.architecture,
|
||||
repository: repository.repository,
|
||||
version: activeLogSelector.dataset.version,
|
||||
process_id: activeLogSelector.dataset.processId,
|
||||
},
|
||||
convert: response => response.json(),
|
||||
},
|
||||
data => {
|
||||
activeLogSelector.dataset.logs = convertLogs(data);
|
||||
activeLogSelector.click();
|
||||
},
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
function loadLogsAll(packageBase, onFailure) {
|
||||
makeRequest(
|
||||
`/api/v2/packages/${packageBase}/logs`,
|
||||
{
|
||||
query: {
|
||||
architecture: repository.architecture,
|
||||
repository: repository.repository,
|
||||
},
|
||||
convert: response => response.json(),
|
||||
},
|
||||
data => {
|
||||
const selectors = Object
|
||||
.values(
|
||||
data.reduce((acc, log_record) => {
|
||||
const id = `${log_record.version}-${log_record.process_id}`;
|
||||
if (acc[id])
|
||||
acc[id].created = Math.min(log_record.created, acc[id].created);
|
||||
else
|
||||
acc[id] = log_record;
|
||||
return acc;
|
||||
}, {})
|
||||
)
|
||||
.sort(({created: left}, {created: right}) =>
|
||||
right - left
|
||||
)
|
||||
.map(version => {
|
||||
const link = document.createElement("a");
|
||||
link.classList.add("dropdown-item");
|
||||
|
||||
link.dataset.version = version.version;
|
||||
link.dataset.processId = version.process_id;
|
||||
link.dataset.logs = convertLogs(data, log_record => log_record.version === version.version && log_record.process_id === version.process_id);
|
||||
|
||||
link.textContent = new Date(1000 * version.created).toISOStringShort();
|
||||
link.href = "#";
|
||||
link.onclick = _ => {
|
||||
// check if we are at the bottom of the code block
|
||||
const isScrolledToBottom = packageInfoLogsInput.scrollTop + packageInfoLogsInput.clientHeight >= packageInfoLogsInput.scrollHeight;
|
||||
packageInfoLogsInput.textContent = link.dataset.logs;
|
||||
highlight(packageInfoLogsInput);
|
||||
if (isScrolledToBottom)
|
||||
packageInfoLogsInput.scrollTop = packageInfoLogsInput.scrollHeight; // scroll to the new end
|
||||
|
||||
Array.from(packageInfoLogsVersions.children).forEach(el => el.classList.remove("active"));
|
||||
link.classList.add("active");
|
||||
|
||||
return false;
|
||||
};
|
||||
|
||||
return link;
|
||||
});
|
||||
|
||||
packageInfoLogsVersions.replaceChildren(...selectors);
|
||||
selectors.find(Boolean)?.click();
|
||||
},
|
||||
onFailure,
|
||||
);
|
||||
}
|
||||
|
||||
function loadPackage(packageBase, onFailure) {
|
||||
makeRequest(
|
||||
`/api/v1/packages/${packageBase}`,
|
||||
{
|
||||
query: {
|
||||
architecture: repository.architecture,
|
||||
repository: repository.repository,
|
||||
},
|
||||
convert: response => response.json(),
|
||||
},
|
||||
data => {
|
||||
const description = data.find(Boolean);
|
||||
const packages = description.package.packages;
|
||||
const aurUrl = description.package.remote.web_url;
|
||||
const upstreamUrls = Array.from(new Set(Object.values(packages).map(single => single.url))).sort();
|
||||
|
||||
packageInfo.textContent = `${description.package.base} ${description.status.status} at ${new Date(1000 * description.status.timestamp).toISOStringShort()}`;
|
||||
|
||||
packageInfoModalHeader.classList.remove(...packageInfoModalHeader.classList);
|
||||
packageInfoModalHeader.classList.add("modal-header");
|
||||
headerClass(description.status.status).forEach(clz => packageInfoModalHeader.classList.add(clz));
|
||||
|
||||
packageInfoAurUrl.innerHTML = aurUrl ? safeLink(aurUrl, aurUrl, "AUR link").outerHTML : "";
|
||||
packageInfoDepends.innerHTML = listToTable(
|
||||
Object.values(packages)
|
||||
.reduce((accumulator, currentValue) => {
|
||||
return accumulator.concat(currentValue.depends.filter(v => !packages.hasOwnProperty(v)))
|
||||
.concat(currentValue.make_depends.filter(v => !packages.hasOwnProperty(v)).map(v => `${v} (make)`))
|
||||
.concat(currentValue.opt_depends.filter(v => !packages.hasOwnProperty(v)).map(v => `${v} (optional)`));
|
||||
}, [])
|
||||
);
|
||||
packageInfoGroups.innerHTML = listToTable(extractListProperties(description.package, "groups"));
|
||||
packageInfoLicenses.innerHTML = listToTable(extractListProperties(description.package, "licenses"));
|
||||
packageInfoPackager.textContent = description.package.packager;
|
||||
packageInfoPackages.innerHTML = listToTable(Object.entries(packages).map(([key, value]) => `${key} (${value.description})`));
|
||||
packageInfoUpstreamUrl.innerHTML = upstreamUrls.map(url => safeLink(url, url, "upstream link").outerHTML).join("<br>");
|
||||
packageInfoVersion.textContent = description.package.version;
|
||||
},
|
||||
onFailure,
|
||||
);
|
||||
}
|
||||
|
||||
function loadPatches(packageBase, onFailure) {
|
||||
makeRequest(
|
||||
`/api/v1/packages/${packageBase}/patches`,
|
||||
{
|
||||
convert: response => response.json(),
|
||||
},
|
||||
data => {
|
||||
packageInfoVariablesDiv.replaceChildren();
|
||||
data.map(patch => insertVariable(packageBase, patch));
|
||||
packageInfoVariablesBlock.hidden = !data.length;
|
||||
},
|
||||
onFailure,
|
||||
);
|
||||
}
|
||||
|
||||
function packageInfoRemove() {
|
||||
const packageBase = packageInfoModal.dataset.package;
|
||||
packagesRemove([packageBase]);
|
||||
}
|
||||
|
||||
function packageInfoUpdate() {
|
||||
const packageBase = packageInfoModal.dataset.package;
|
||||
packagesAdd(packageBase, [], repository, {refresh: packageInfoRefreshInput.checked});
|
||||
}
|
||||
|
||||
function showPackageInfo(packageBase) {
|
||||
const isPackageBaseSet = packageBase !== undefined;
|
||||
if (isPackageBaseSet) {
|
||||
// set package base as currently used
|
||||
packageInfoModal.dataset.package = packageBase;
|
||||
} else {
|
||||
// read package base from the current window attribute
|
||||
packageBase = packageInfoModal.dataset.package;
|
||||
}
|
||||
|
||||
const onFailure = error => {
|
||||
if (isPackageBaseSet) {
|
||||
const message = details => `Could not load package ${packageBase} info: ${details}`;
|
||||
showFailure("Load failure", message, error);
|
||||
}
|
||||
};
|
||||
|
||||
loadPackage(packageBase, onFailure);
|
||||
loadDependencies(packageBase, onFailure);
|
||||
loadPatches(packageBase, onFailure);
|
||||
loadLogs(packageBase, onFailure);
|
||||
loadChanges(packageBase, onFailure);
|
||||
loadEvents(packageBase, onFailure);
|
||||
|
||||
if (isPackageBaseSet) {
|
||||
bootstrap.Modal.getOrCreateInstance(packageInfoModal).show();
|
||||
{% if autorefresh_intervals %}
|
||||
togglePackageInfoAutoReload();
|
||||
{% endif %}
|
||||
}
|
||||
}
|
||||
|
||||
function togglePackageInfoAutoReload(interval) {
|
||||
clearInterval(packageInfoAutoReloadTask);
|
||||
packageInfoAutoReloadTask = toggleAutoReload(packageInfoAutoReloadButton, interval, packageInfoAutoReloadInput, _ => {
|
||||
if (!hasActiveSelection()) {
|
||||
const packageBase = packageInfoModal.dataset.package;
|
||||
// we only poll status and logs here
|
||||
loadPackage(packageBase);
|
||||
loadLogs(packageBase);
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
ready(_ => {
|
||||
packageInfoEventsTable.bootstrapTable({});
|
||||
|
||||
packageInfoEventsUpdateChart = new Chart(packageInfoEventsUpdateChartCanvas, {
|
||||
type: "line",
|
||||
data: {},
|
||||
options: {
|
||||
responsive: true,
|
||||
},
|
||||
});
|
||||
|
||||
packageInfoModal.addEventListener("hidden.bs.modal", _ => {
|
||||
packageInfoAurUrl.textContent = "";
|
||||
packageInfoDepends.textContent = "";
|
||||
packageInfoGroups.textContent = "";
|
||||
packageInfoImplicitlyDepends.textContent = "";
|
||||
packageInfoLicenses.textContent = "";
|
||||
packageInfoPackager.textContent = "";
|
||||
packageInfoPackages.textContent = "";
|
||||
packageInfoUpstreamUrl.textContent = "";
|
||||
packageInfoVersion.textContent = "";
|
||||
|
||||
packageInfoVariablesBlock.hidden = true;
|
||||
packageInfoVariablesDiv.replaceChildren();
|
||||
|
||||
packageInfoLogsInput.textContent = "";
|
||||
packageInfoChangesInput.textContent = "";
|
||||
packageInfoEventsTable.bootstrapTable("load", []);
|
||||
clearChart();
|
||||
|
||||
clearInterval(packageInfoAutoReloadTask);
|
||||
packageInfoAutoReloadTask = null; // not really required (?) but lets clear everything
|
||||
});
|
||||
|
||||
restoreAutoReloadSettings(packageInfoAutoReloadButton, packageInfoAutoReloadInput);
|
||||
});
|
||||
</script>
|
||||
@@ -0,0 +1,63 @@
|
||||
<div id="package-rebuild-modal" tabindex="-1" role="dialog" class="modal fade">
|
||||
<div class="modal-dialog modal-lg" role="document">
|
||||
<div class="modal-content">
|
||||
<form id="package-rebuild-form" onsubmit="return false">
|
||||
<div class="modal-header">
|
||||
<h4 class="modal-title">Rebuild depending packages</h4>
|
||||
<button type="button" class="btn-close" data-bs-dismiss="modal" aria-label="close"></button>
|
||||
</div>
|
||||
<div class="modal-body">
|
||||
<div class="form-group row">
|
||||
<label for="package-rebuild-repository-input" class="col-3 col-form-label">repository</label>
|
||||
<div class="col-9">
|
||||
<select id="package-rebuild-repository-input" class="form-control" name="repository" required>
|
||||
{% for repository in repositories %}
|
||||
<option value="{{ repository.id }}" data-repository="{{ repository.repository }}" data-architecture="{{ repository.architecture }}">{{ repository.repository }} ({{ repository.architecture }})</option>
|
||||
{% endfor %}
|
||||
</select>
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group row">
|
||||
<label for="package-rebuild-dependency-input" class="col-3 col-form-label">dependency</label>
|
||||
<div class="col-9">
|
||||
<input id="package-rebuild-dependency-input" type="text" class="form-control" placeholder="packages dependency" name="package" required>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="modal-footer">
|
||||
<button type="submit" class="btn btn-primary" onclick="packagesRebuild()"><i class="bi bi-play"></i> rebuild</button>
|
||||
</div>
|
||||
</form>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<script>
|
||||
const packageRebuildModal = document.getElementById("package-rebuild-modal");
|
||||
const packageRebuildForm = document.getElementById("package-rebuild-form");
|
||||
|
||||
const packageRebuildDependencyInput = document.getElementById("package-rebuild-dependency-input");
|
||||
const packageRebuildRepositoryInput = document.getElementById("package-rebuild-repository-input");
|
||||
|
||||
function packagesRebuild() {
|
||||
const packages = packageRebuildDependencyInput.value;
|
||||
const repository = getRepositorySelector(packageRebuildRepositoryInput);
|
||||
if (packages) {
|
||||
bootstrap.Modal.getOrCreateInstance(packageRebuildModal).hide();
|
||||
const onSuccess = update => `Repository rebuild has been run for packages which depend on ${update}`;
|
||||
const onFailure = error => `Repository rebuild failed: ${error}`;
|
||||
doPackageAction("/api/v1/service/rebuild", [packages], repository, onSuccess, onFailure);
|
||||
}
|
||||
}
|
||||
|
||||
ready(_ => {
|
||||
packageRebuildModal.addEventListener("shown.bs.modal", _ => {
|
||||
const option = packageRebuildRepositoryInput.querySelector(`option[value="${repository.architecture}-${repository.repository}"]`);
|
||||
option.selected = "selected";
|
||||
|
||||
});
|
||||
packageRebuildModal.addEventListener("hidden.bs.modal", _ => {
|
||||
packageRebuildForm.reset();
|
||||
});
|
||||
});
|
||||
</script>
|
||||
@@ -0,0 +1,247 @@
|
||||
<script>
|
||||
const packageRemoveButton = document.getElementById("package-remove-button");
|
||||
const packageUpdateButton = document.getElementById("package-update-button");
|
||||
|
||||
let repository = null;
|
||||
|
||||
// so far bootstrap-table only operates with jquery elements
|
||||
const table = $(document.getElementById("packages"));
|
||||
|
||||
const dashboardButton = document.getElementById("dashboard-button");
|
||||
const versionBadge = document.getElementById("badge-version");
|
||||
|
||||
const tableAutoReloadButton = document.getElementById("table-autoreload-button");
|
||||
const tableAutoReloadInput = document.getElementById("table-autoreload-input");
|
||||
let tableAutoReloadTask = null;
|
||||
|
||||
function doPackageAction(uri, packages, repository, successText, failureText, data) {
|
||||
makeRequest(
|
||||
uri,
|
||||
{
|
||||
method: "POST",
|
||||
query: {
|
||||
architecture: repository.architecture,
|
||||
repository: repository.repository,
|
||||
},
|
||||
json: Object.assign({}, {packages: packages}, data || {}),
|
||||
},
|
||||
_ => {
|
||||
const message = successText(packages.join(", "));
|
||||
showSuccess("Success", message);
|
||||
},
|
||||
error => {
|
||||
showFailure("Action failed", failureText, error);
|
||||
},
|
||||
);
|
||||
}
|
||||
|
||||
function filterListGroups() {
|
||||
return extractDataList(table.bootstrapTable("getData"), "groups");
|
||||
}
|
||||
|
||||
function filterListLicenses() {
|
||||
return extractDataList(table.bootstrapTable("getData"), "licenses");
|
||||
}
|
||||
|
||||
function filterListPackagers() {
|
||||
return extractDataList(table.bootstrapTable("getData"), "packager");
|
||||
}
|
||||
|
||||
function getRepositorySelector(selector) {
|
||||
const selected = selector.options[selector.selectedIndex];
|
||||
return {
|
||||
architecture: selected.getAttribute("data-architecture"),
|
||||
repository: selected.getAttribute("data-repository"),
|
||||
};
|
||||
}
|
||||
|
||||
function getSelection() {
|
||||
return table.bootstrapTable("getSelections").map(row => row.id);
|
||||
}
|
||||
|
||||
function packagesLoad(onFailure) {
|
||||
makeRequest(
|
||||
"/api/v1/packages",
|
||||
{
|
||||
query: {
|
||||
architecture: repository.architecture,
|
||||
repository: repository.repository,
|
||||
},
|
||||
convert: response => response.json(),
|
||||
},
|
||||
data => {
|
||||
const payload = data
|
||||
.map(description => {
|
||||
const package_base = description.package.base;
|
||||
const web_url = description.package.remote.web_url;
|
||||
return {
|
||||
id: package_base,
|
||||
base: web_url ? safeLink(web_url, package_base, package_base).outerHTML : safe(package_base),
|
||||
version: safe(description.package.version),
|
||||
packager: description.package.packager ? safe(description.package.packager) : "",
|
||||
packages: listToTable(Object.keys(description.package.packages)),
|
||||
groups: listToTable(extractListProperties(description.package, "groups")),
|
||||
licenses: listToTable(extractListProperties(description.package, "licenses")),
|
||||
timestamp: new Date(1000 * description.status.timestamp).toISOStringShort(),
|
||||
status: description.status.status,
|
||||
};
|
||||
});
|
||||
|
||||
updateTable(table, payload, row => row.timestamp);
|
||||
table.bootstrapTable("hideLoading");
|
||||
},
|
||||
onFailure,
|
||||
);
|
||||
}
|
||||
|
||||
function packagesRemove(packages) {
|
||||
packages = packages ?? getSelection();
|
||||
const onSuccess = update => `Packages ${update} have been removed`;
|
||||
const onFailure = error => `Could not remove packages: ${error}`;
|
||||
|
||||
doPackageAction("/api/v1/service/remove", packages, repository, onSuccess, onFailure);
|
||||
}
|
||||
|
||||
function packagesUpdate() {
|
||||
const currentSelection = getSelection();
|
||||
const [url, onSuccess] = currentSelection.length === 0
|
||||
? ["/api/v1/service/update", _ => `Repository update has been run`]
|
||||
: ["/api/v1/service/add", update => `Run update for packages ${update}`];
|
||||
const onFailure = error => `Packages update failed: ${error}`;
|
||||
|
||||
doPackageAction(url, currentSelection, repository, onSuccess, onFailure);
|
||||
}
|
||||
|
||||
function refreshDatabases() {
|
||||
const onSuccess = _ => "Pacman database update has been requested";
|
||||
const onFailure = error => `Could not update pacman databases: ${error}`;
|
||||
const parameters = {
|
||||
refresh: true,
|
||||
aur: false,
|
||||
local: false,
|
||||
manual: false,
|
||||
};
|
||||
|
||||
doPackageAction("/api/v1/service/update", [], repository, onSuccess, onFailure, parameters);
|
||||
}
|
||||
|
||||
function reload() {
|
||||
table.bootstrapTable("showLoading");
|
||||
const onFailure = error => {
|
||||
if ((error.status === 401) || (error.status === 403)) {
|
||||
// authorization error
|
||||
const text = "In order to see statuses you must login first.";
|
||||
table.find("tr.unauthorized").remove();
|
||||
table.find("tbody").append(`<tr class="unauthorized"><td colspan="100%">${safe(text)}</td></tr>`);
|
||||
table.bootstrapTable("hideLoading");
|
||||
} else {
|
||||
// other errors
|
||||
const message = details => `Could not load list of packages: ${details}`;
|
||||
showFailure("Load failure", message, error);
|
||||
}
|
||||
};
|
||||
|
||||
packagesLoad(onFailure);
|
||||
statusLoad();
|
||||
}
|
||||
|
||||
function selectRepository() {
|
||||
const fragment = window.location.hash.replace("#", "") || "{{ repositories[0].id }}";
|
||||
document.getElementById(`${fragment}-link`).click();
|
||||
}
|
||||
|
||||
function statusFormat(value) {
|
||||
const cellClass = status => {
|
||||
if (status === "pending") return "table-warning";
|
||||
if (status === "building") return "table-warning";
|
||||
if (status === "failed") return "table-danger";
|
||||
if (status === "success") return "table-success";
|
||||
return "table-secondary";
|
||||
};
|
||||
return {classes: cellClass(value)};
|
||||
}
|
||||
|
||||
function toggleTableAutoReload(interval) {
|
||||
clearInterval(tableAutoReloadTask);
|
||||
tableAutoReloadTask = toggleAutoReload(tableAutoReloadButton, interval, tableAutoReloadInput, _ => {
|
||||
if (!hasActiveModal() &&
|
||||
!hasActiveDropdown()) {
|
||||
packagesLoad();
|
||||
statusLoad();
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
ready(_ => {
|
||||
const onCheckFunction = function () {
|
||||
if (packageRemoveButton) {
|
||||
packageRemoveButton.disabled = !getSelection().length;
|
||||
}
|
||||
};
|
||||
|
||||
document.querySelectorAll("#repositories a").forEach(element => {
|
||||
element.onclick = _ => {
|
||||
repository = {
|
||||
architecture: element.dataset.architecture,
|
||||
repository: element.dataset.repository,
|
||||
};
|
||||
if (packageUpdateButton) {
|
||||
packageUpdateButton.innerHTML = `<i class="bi bi-play"></i> update<span class="d-none d-sm-inline"> ${safe(repository.repository)} (${safe(repository.architecture)})</span>`;
|
||||
}
|
||||
bootstrap.Tab.getOrCreateInstance(document.getElementById(element.id)).show();
|
||||
reload();
|
||||
};
|
||||
});
|
||||
|
||||
table.bootstrapTable({
|
||||
onCheck: onCheckFunction,
|
||||
onCheckAll: onCheckFunction,
|
||||
onClickRow: (data, row, cell) => {
|
||||
if (0 === cell || "base" === cell) {
|
||||
const method = data[0] === true ? "uncheckBy" : "checkBy"; // fck javascript
|
||||
table.bootstrapTable(method, {field: "id", values: [data.id]});
|
||||
} else showPackageInfo(data.id);
|
||||
},
|
||||
onCreatedControls: _ => {
|
||||
new easepick.create({
|
||||
element: document.querySelector(".bootstrap-table-filter-control-timestamp"),
|
||||
css: [
|
||||
"https://cdn.jsdelivr.net/npm/@easepick/bundle@1.2.1/dist/index.css",
|
||||
],
|
||||
grid: 2,
|
||||
calendars: 2,
|
||||
autoApply: false,
|
||||
locale: {
|
||||
cancel: "Clear",
|
||||
},
|
||||
RangePlugin: {
|
||||
tooltip: false,
|
||||
},
|
||||
plugins: [
|
||||
"RangePlugin",
|
||||
],
|
||||
setup: picker => {
|
||||
picker.on("select", _ => { table.bootstrapTable("triggerSearch"); });
|
||||
// replace "Cancel" behaviour to "Clear"
|
||||
picker.onClickCancelButton = element => {
|
||||
if (picker.isCancelButton(element)) {
|
||||
picker.clear();
|
||||
picker.hide();
|
||||
table.bootstrapTable("triggerSearch");
|
||||
}
|
||||
};
|
||||
},
|
||||
});
|
||||
},
|
||||
onUncheck: onCheckFunction,
|
||||
onUncheckAll: onCheckFunction,
|
||||
});
|
||||
|
||||
restoreAutoReloadSettings(tableAutoReloadButton, tableAutoReloadInput);
|
||||
|
||||
selectRepository();
|
||||
{% if autorefresh_intervals %}
|
||||
toggleTableAutoReload();
|
||||
{% endif %}
|
||||
});
|
||||
</script>
|
||||
@@ -0,0 +1,30 @@
|
||||
<!doctype html>
|
||||
<html lang="en">
|
||||
<head>
|
||||
<title>Error</title>
|
||||
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1">
|
||||
|
||||
{% include "utils/style.jinja2" %}
|
||||
{% include "user-style.jinja2" ignore missing %}
|
||||
</head>
|
||||
|
||||
<body>
|
||||
|
||||
{% include "utils/bootstrap-scripts.jinja2" %}
|
||||
|
||||
<div class="d-flex flex-row align-items-center">
|
||||
<div class="container">
|
||||
<div class="row justify-content-center">
|
||||
<div class="col-md-12 text-center">
|
||||
<span class="display-1 d-block">{{ code }}</span>
|
||||
<div class="mb-4 lead">{{ reason }}</div>
|
||||
<a class="btn btn-link" style="text-decoration: none" href="/" title="home"><i class="bi bi-house"></i> home</a>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
</body>
|
||||
|
||||
</html>
|
||||
Binary file not shown.
|
After Width: | Height: | Size: 181 KiB |
@@ -0,0 +1,721 @@
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<svg
|
||||
width="800"
|
||||
height="800"
|
||||
version="1.1"
|
||||
id="svg106"
|
||||
sodipodi:docname="logo.svg"
|
||||
inkscape:version="1.3.2 (091e20ef0f, 2023-11-25, custom)"
|
||||
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
||||
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
xmlns:svg="http://www.w3.org/2000/svg">
|
||||
<sodipodi:namedview
|
||||
id="namedview106"
|
||||
pagecolor="#ffffff"
|
||||
bordercolor="#000000"
|
||||
borderopacity="0.25"
|
||||
inkscape:showpageshadow="2"
|
||||
inkscape:pageopacity="0.0"
|
||||
inkscape:pagecheckerboard="0"
|
||||
inkscape:deskcolor="#d1d1d1"
|
||||
inkscape:zoom="1.8720703"
|
||||
inkscape:cx="511.73292"
|
||||
inkscape:cy="499.71414"
|
||||
inkscape:window-width="3840"
|
||||
inkscape:window-height="2160"
|
||||
inkscape:window-x="0"
|
||||
inkscape:window-y="0"
|
||||
inkscape:window-maximized="1"
|
||||
inkscape:current-layer="svg106" />
|
||||
<path
|
||||
fill="#132b6d"
|
||||
d="m 387.66175,2.9352426 c 109.978,-0.5206001 203.504,31.4880054 285.824,108.1504174 159.376,148.42203 165.076,403.05807 17.164,561.4021 -72.884,78.02402 -172.364,120.98802 -278.558,124.58202 -105.508,0.092 -196.612,-29.306 -277.44,-100.25401 C -17.844855,562.95974 -40.874855,327.5097 78.894545,164.89367 155.84375,60.416853 261.60375,10.958044 387.66175,2.9352426 Z"
|
||||
id="path1"
|
||||
style="stroke-width:2" />
|
||||
<defs
|
||||
id="defs2">
|
||||
<linearGradient
|
||||
id="gradient_0"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
x1="361.42581"
|
||||
y1="223.77209"
|
||||
x2="195.62669"
|
||||
y2="358.78311"
|
||||
gradientTransform="matrix(2,0,0,2.0000004,-111.74825,-110.67438)">
|
||||
<stop
|
||||
offset="0"
|
||||
stop-color="#C29024"
|
||||
id="stop1" />
|
||||
<stop
|
||||
offset="1"
|
||||
stop-color="#DCBB57"
|
||||
id="stop2" />
|
||||
</linearGradient>
|
||||
</defs>
|
||||
<path
|
||||
fill="url(#gradient_0)"
|
||||
d="M 351.39175,758.48578 C 168.77575,730.12777 41.748945,587.64375 38.358945,403.44571 34.725145,206.00568 197.09775,42.52665 394.25175,39.316449 c 199.908,-3.255 364.866,156.319231 367.572,354.681261 1.264,13.294 -0.766,28.52001 -2.266,41.84201 -22.772,202.34804 -192.312,343.02406 -397.788,324.19806 -2.656,-0.244 -8.104,-0.266 -10.378,-1.552 z"
|
||||
id="path2"
|
||||
style="fill:url(#gradient_0);stroke-width:2" />
|
||||
<path
|
||||
fill="#fade6b"
|
||||
d="m 322.01375,466.26772 c -11.018,-19.004 -31.84,-33.106 -51.826,-41.634 -1.678,-0.714 -7.54,-2.124 -8.182,-3.564 l 0.732,-0.666 c 4,0.842 8.334,3.966 12.02,5.806 6.386,3.184 15.572,2.11 22.174,5.236 4.75,2.248 4.01,8.946 6.388,12.528 4.924,7.418 31.496,22.526 25.196,30.44801 -1.88,2.366 3.59,25.088 -6.502,27.406 9.19,-11.64 6.228,-23.022 0,-35.56001 z"
|
||||
id="path3"
|
||||
style="stroke-width:2" />
|
||||
<path
|
||||
fill="#f1ead8"
|
||||
d="m 607.74175,596.82375 c 1.336,0.334 2.464,0.632 3.666,1.342 -20.054,9.052 -64.106,28.032 -86.62,22.686 4.1,-6.492 9.65,-12.676 16.658,-16.064 19.842,0.438 47.962,-0.334 66.296,-7.964 z"
|
||||
id="path4"
|
||||
style="stroke-width:2" />
|
||||
<path
|
||||
fill="#fade6b"
|
||||
d="m 501.15175,566.49574 c 6.586,7.622 13.706,16.72001 22.154,22.30601 4.128,2.764 8.214,4.434 12.892,6.05 9.566,1.388 23.592,3.746 32.986,1.972 14.562,-1.188 28.228,-3.904 42.224,-8.022 l -1.062,3.132 c -0.626,1.91 -1.408,3.284 -2.604,4.89 -18.334,7.63 -46.454,8.402 -66.296,7.964 -7.008,3.388 -12.558,9.572 -16.658,16.064 -9.11,-5.624 -25.204,-20.256 -33.116,-27.858 -0.438,-2.818 -1.834,-5.878 -2.786,-8.594 3.066,-7.94801 11.252,-13.00801 12.266,-17.90401 z"
|
||||
id="path5"
|
||||
style="stroke-width:2" />
|
||||
<path
|
||||
fill="#f1ead8"
|
||||
d="m 279.36575,419.47772 c 17.368,-2.17 52.85,13.874 66.39,23.914 16.654,12.346 42.944,41.42201 46.084,62.86401 l -0.632,0.818 c -7.4,-0.814 -14.928,-3.078 -22.004,0 -15.638,-34.97 -32.316,-54.81001 -66.512,-75.00601 -7.612,-4.496 -15.806,-7.926 -23.326,-12.59 z"
|
||||
id="path6"
|
||||
style="stroke-width:2" />
|
||||
<path
|
||||
fill="#f2e8a9"
|
||||
d="m 358.50775,559.66374 c 12.018,13.204 20.532,31.28401 42.394,32.76001 26.828,1.808 75.452,-16.66001 100.25,-25.92801 -1.014,4.896 -9.2,9.956 -12.266,17.90401 0.952,2.716 2.348,5.776 2.786,8.594 -23.926,3.644 -42.772,14.97 -73.036,18.024 -31.48,3.176 -57.178,-20.208 -60.128,-51.35401 z"
|
||||
id="path7"
|
||||
style="stroke-width:2" />
|
||||
<defs
|
||||
id="defs8">
|
||||
<linearGradient
|
||||
id="gradient_1"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
x1="251.38866"
|
||||
y1="364.7413"
|
||||
x2="250.98038"
|
||||
y2="386.04666"
|
||||
gradientTransform="matrix(2,0,0,2.0000004,-111.74825,-110.67438)">
|
||||
<stop
|
||||
offset="0"
|
||||
stop-color="#8B5E10"
|
||||
id="stop7" />
|
||||
<stop
|
||||
offset="1"
|
||||
stop-color="#CF9A22"
|
||||
id="stop8" />
|
||||
</linearGradient>
|
||||
</defs>
|
||||
<path
|
||||
fill="url(#gradient_1)"
|
||||
d="m 310.19775,643.62576 c 2.576,-42.33201 43.824,-23.71801 68.946,-13.31801 29.856,12.36001 44.646,14.27401 76.866,17.40001 6.062,0.588 19.738,0.234 24.164,5.272 -4.906,4.506 -30.934,9.33 -37.886,8.6 -14.06,-1.944 -28.422,0.378 -42.516,0.02 -15.588,-0.394 -24.788,-3.174 -41.264,-0.02 -10.692,-0.35 -39.162,-6.928 -48.31,-12.01 l -0.164,-0.692 c -4.454,-4.498 -8.004,-10.198 -11.632,-15.38 h 1.106 c 3.348,3.464 6.672,7.448 10.69,10.128 z"
|
||||
id="path8"
|
||||
style="fill:url(#gradient_1);stroke-width:2" />
|
||||
<path
|
||||
fill="#e4c267"
|
||||
d="m 533.18975,212.81168 3.008,1.8 c 104.752,81.45401 120.284,223.88804 39.258,327.17806 -4.874,6.214 -10.864,11.518 -15.55,17.874 -13.234,7.248 -22.01,22.26601 -36.562,27.66201 -3.272,-0.346 -14.796,-14.16001 -18.132,-17.28801 9.246,-9.45 22.016,-16.352 32.638,-26.984 75.99,-76.05602 84.014,-197.54404 14.068,-280.22005 -6.722,-7.946 -14.4,-14.688 -21.786,-21.97401 2.61,-8.98 1.014,-18.91 3.058,-28.048 z"
|
||||
id="path9"
|
||||
style="stroke-width:2" />
|
||||
<defs
|
||||
id="defs10">
|
||||
<linearGradient
|
||||
id="gradient_2"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
x1="383.45288"
|
||||
y1="318.2124"
|
||||
x2="295.73892"
|
||||
y2="203.79875"
|
||||
gradientTransform="matrix(2,0,0,2.0000004,-111.74825,-110.67438)">
|
||||
<stop
|
||||
offset="0"
|
||||
stop-color="#BF9029"
|
||||
id="stop9" />
|
||||
<stop
|
||||
offset="1"
|
||||
stop-color="#F5D354"
|
||||
id="stop10" />
|
||||
</linearGradient>
|
||||
</defs>
|
||||
<path
|
||||
fill="url(#gradient_2)"
|
||||
d="m 434.37375,137.51566 c 2.598,-0.164 5.328,-0.374 7.914,0 44.516,7.77801 92.47,33.43601 126.896,61.38602 7.438,7.668 16.4,14.876 22.864,23.372 2.62,2.794 5.176,5.692 8.21,8.044 5.566,3.826 22.78,23.15001 28.692,29.00401 l 0.008,0.522 c 0.052,5.284 2.926,14.418 2.624,16.914 1.07,8.98 6.816,17.276 9.974,25.644 32.534,86.22402 17.178,181.23004 -38.442,254.80205 -9.59,12.686 -20.71,25.49601 -33.178,35.41401 -3.856,3.068 -7.42,3.966 -0.752,4.206 -9.394,1.774 -23.42,-0.584 -32.986,-1.972 -4.678,-1.616 -8.764,-3.286 -12.892,-6.05 12.516,-9.682 25.068,-17.99401 36.6,-29.13801 4.686,-6.356 10.676,-11.66 15.55,-17.874 81.026,-103.29002 65.494,-245.72405 -39.258,-327.17806 l -3.008,-1.8 c -2.044,9.138 -0.448,19.068 -3.058,28.048 -20.19,-16.736 -57.964,-41.348 -84.916,-44.78 -4.862,6.39 -8.658,12.616 -14.43,18.532 -7.806,8.378 -15.312,17.27 -22.424,26.248 v -3.898 c -1.506,1.596 -4.512,4.54 -4.34,6.828 l 0.516,0.474 c -0.566,1.138 -1.052,2.3 -1.93,3.238 l -1.24,0.028 0.2,1.06001 c -4.05,-8.60801 1.232,-15.75801 3.436,-23.75601 26.818,-41.54401 24.194,-53.60601 -19.526,-73.22601 16.782,-3.452 30.824,-15.02601 48.896,-14.09201 z"
|
||||
id="path10"
|
||||
style="fill:url(#gradient_2);stroke-width:2" />
|
||||
<path
|
||||
fill="#e7aa1f"
|
||||
d="m 592.04775,222.27368 c 2.62,2.794 5.176,5.692 8.21,8.044 8.066,13.52 19.78,29.05401 28.692,42.98401 -6.366,-3.072 -23.312,-30.26801 -30.038,-38.90201 -2.778,-3.566 -7.95,-7.296 -6.864,-12.126 z"
|
||||
id="path11"
|
||||
style="stroke-width:2" />
|
||||
<path
|
||||
fill="#051053"
|
||||
d="m 600.25775,230.31768 c 5.566,3.826 22.78,23.15001 28.692,29.00401 l 0.008,0.522 c 0.052,5.284 2.926,14.418 2.624,16.914 -0.81,-1.204 -1.734,-2.318 -2.632,-3.456 -8.912,-13.93 -20.626,-29.46401 -28.692,-42.98401 z"
|
||||
id="path12"
|
||||
style="stroke-width:2" />
|
||||
<path
|
||||
fill="#bf8a24"
|
||||
d="m 536.19775,214.61168 c -9.436,-16.308 -80.554,-44.98201 -95.5,-43.60601 -2.88,-2.338 -5.638,-6.154 -7.546,-9.334 13.846,-0.878 61.092,18.238 74.408,25.094 7.224,3.72 43.202,27.84801 43.214,27.84601 3.21,2.37 5.956,5.258 9.132,7.662 4.042,5.416 9.626,9.648 14.302,14.496 93.102,96.54202 79.466,249.74005 -15.778,339.83206 -3.328,3.14801 -18.614,17.85401 -22.232,18.25001 -4.678,-1.616 -8.764,-3.286 -12.892,-6.05 12.516,-9.682 25.068,-17.99401 36.6,-29.13801 4.686,-6.356 10.676,-11.66 15.55,-17.874 81.026,-103.29002 65.494,-245.72405 -39.258,-327.17806 z"
|
||||
id="path13"
|
||||
style="stroke-width:2" />
|
||||
<path
|
||||
fill="#fade6b"
|
||||
d="m 434.37375,137.51566 c 2.598,-0.164 5.328,-0.374 7.914,0 44.516,7.77801 92.47,33.43601 126.896,61.38602 2.568,7.928 14.072,10.708 15.774,18.372 l -0.474,0.94 -2.092,0.246 c -0.048,0.186 -10.608,12.996 -11.95,12.526 -3.166,-1.106 -7.656,-9.138 -10.536,-8.712 -3.176,-2.404 -5.922,-5.292 -9.132,-7.662 -0.012,0.002 -35.99,-24.12601 -43.214,-27.84601 -13.316,-6.856 -60.562,-25.972 -74.408,-25.094 1.908,3.18 4.666,6.996 7.546,9.334 14.946,-1.376 86.064,27.29801 95.5,43.60601 l -3.008,-1.8 c -2.044,9.138 -0.448,19.068 -3.058,28.048 -20.19,-16.736 -57.964,-41.348 -84.916,-44.78 -4.862,6.39 -8.658,12.616 -14.43,18.532 -7.806,8.378 -15.312,17.27 -22.424,26.248 v -3.898 c -1.506,1.596 -4.512,4.54 -4.34,6.828 l 0.516,0.474 c -0.566,1.138 -1.052,2.3 -1.93,3.238 l -1.24,0.028 0.2,1.06001 c -4.05,-8.60801 1.232,-15.75801 3.436,-23.75601 26.818,-41.54401 24.194,-53.60601 -19.526,-73.22601 16.782,-3.452 30.824,-15.02601 48.896,-14.09201 z"
|
||||
id="path14"
|
||||
style="stroke-width:2" />
|
||||
<path
|
||||
fill="#e7aa1f"
|
||||
d="m 412.09175,152.87167 c 12.74,-3.468 25.54,-4.784 38.71,-3.946 -6.848,2.32 -14.484,5.572 -20.016,10.326 8.062,3.682 21.354,5.528 30.612,8.39 19.908,6.152 75.712,30.48001 89.376,46.97001 -0.012,0.002 -35.99,-24.12601 -43.214,-27.84601 -13.316,-6.856 -60.562,-25.972 -74.408,-25.094 1.908,3.18 4.666,6.996 7.546,9.334 14.946,-1.376 86.064,27.29801 95.5,43.60601 l -3.008,-1.8 c -17.866,-18.572 -65.548,-36.19801 -90.902,-40.93001 3.608,7.782 6.348,15.752 2.928,24.19801 -4.862,6.39 -8.658,12.616 -14.43,18.532 -7.806,8.378 -15.312,17.27 -22.424,26.248 v -3.898 c 22.078,-32.98 57.308,-46.31801 3.73,-84.09001 z"
|
||||
id="path15"
|
||||
style="stroke-width:2" />
|
||||
<path
|
||||
fill="#f1ead8"
|
||||
d="m 442.28775,171.88167 c 25.354,4.732 73.036,22.35801 90.902,40.93001 -2.044,9.138 -0.448,19.068 -3.058,28.048 -20.19,-16.736 -57.964,-41.348 -84.916,-44.78 3.42,-8.44601 0.68,-16.41601 -2.928,-24.19801 z"
|
||||
id="path16"
|
||||
style="stroke-width:2" />
|
||||
<defs
|
||||
id="defs17">
|
||||
<linearGradient
|
||||
id="gradient_3"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
x1="259.85068"
|
||||
y1="248.27858"
|
||||
x2="350.85385"
|
||||
y2="408.95212"
|
||||
gradientTransform="matrix(2,0,0,2.0000004,-111.74825,-110.67438)">
|
||||
<stop
|
||||
offset="0"
|
||||
stop-color="#061757"
|
||||
id="stop16" />
|
||||
<stop
|
||||
offset="1"
|
||||
stop-color="#1C4897"
|
||||
id="stop17" />
|
||||
</linearGradient>
|
||||
</defs>
|
||||
<path
|
||||
fill="url(#gradient_3)"
|
||||
d="m 628.94975,259.32169 c 35.888,36.25 71.52,72.79001 107.964,108.48002 6.736,6.598 18.816,21.616 24.91,26.196 1.264,13.294 -0.766,28.52001 -2.266,41.84201 -22.772,202.34804 -192.312,343.02406 -397.788,324.19806 -2.656,-0.244 -8.104,-0.266 -10.378,-1.552 -4.572,-6.652 -23.912,-22.76601 -31.626,-30.48801 l -117.162,-117.50802 c -11.006,-10.966 -46.288,-42.43401 -53.304,-54.48401 -4.57,-5.32 -10.27,-9.648 -14.854,-15.058 4.872,0.144 18.938,7.52 23.586,10.336 6.858,1.708 20.052,4.126 26.25,6.798 0.434,-1.258 0.146,-2.694 0,-3.998 0.138,-1.692 0.09,-3.306 0,-5 3.348,0.634 6.652,2.408 10.05,2.2 13.202,5.656 24.534,12.708 34.05,23.62 3.788,3.09 7.482,6.23801 11.126,9.49601 4.716,4.008 9.52,7.936 13.794,12.424 1.884,0.704 5.45,2.046 6.762,3.614 1.584,0.97 3.154,2.014 4.78,2.904 7.256,3.166 14.768,8.762 21.092,13.49 1.516,2.334 3.288,4.486 5.016,6.664 l 7.45,10.00201 c 3.628,5.182 7.178,10.882 11.632,15.38 l 0.164,0.692 c 9.148,5.082 37.618,11.66 48.31,12.01 16.476,-3.154 25.676,-0.374 41.264,0.02 14.094,0.358 28.456,-1.964 42.516,-0.02 6.952,0.73 32.98,-4.094 37.886,-8.6 7.398,7.31 18.44,8.658 28.374,7.392 40.55,-5.168 97.53,-34.27201 123.034,-67.37801 -2.714,-0.424 9.054,-10.22 9.25,-12.97 -7.204,1.354 -10.72,9.924 -18.264,10.996 -3.768,2.22 -7.816,4.312 -11.16,7.146 -1.202,-0.71 -2.33,-1.008 -3.666,-1.342 1.196,-1.606 1.978,-2.98 2.604,-4.89 l 1.062,-3.132 c -13.996,4.118 -27.662,6.834 -42.224,8.022 -6.668,-0.24 -3.104,-1.138 0.752,-4.206 12.468,-9.918 23.588,-22.72801 33.178,-35.41401 55.62,-73.57201 70.976,-168.57803 38.442,-254.80205 -3.158,-8.368 -8.904,-16.664 -9.974,-25.644 0.302,-2.496 -2.572,-11.63 -2.624,-16.914 z"
|
||||
id="path17"
|
||||
style="fill:url(#gradient_3);stroke-width:2" />
|
||||
<path
|
||||
fill="#fade6b"
|
||||
d="m 637.21175,576.96974 c 4.14,-2.36 8.288,-4.69 12.494,-6.932 -5.274,7.16 -11.4,17.29401 -18.124,22.95601 -2.714,-0.424 9.054,-10.22 9.25,-12.97 -7.204,1.354 -10.72,9.924 -18.264,10.996 3.782,-3.136 14.3,-8.644 15.882,-12.846 z"
|
||||
id="path18"
|
||||
style="stroke-width:2" />
|
||||
<path
|
||||
fill="#f2e8a9"
|
||||
d="m 637.21175,576.96974 1.238,1.20401 c -1.582,4.202 -12.1,9.71 -15.882,12.846 -3.768,2.22 -7.816,4.312 -11.16,7.146 -1.202,-0.71 -2.33,-1.008 -3.666,-1.342 1.196,-1.606 1.978,-2.98 2.604,-4.89 l 1.062,-3.132 c 9.172,-3.09 17.482,-6.914 25.804,-11.83201 z"
|
||||
id="path19"
|
||||
style="stroke-width:2" />
|
||||
<path
|
||||
fill="#e7aa1f"
|
||||
d="m 358.50775,661.57976 c 16.476,-3.154 25.676,-0.374 41.264,0.02 14.094,0.358 28.456,-1.964 42.516,-0.02 -25.31,6.146 -58.224,4.784 -83.78,0 z"
|
||||
id="path20"
|
||||
style="stroke-width:2" />
|
||||
<defs
|
||||
id="defs21">
|
||||
<linearGradient
|
||||
id="gradient_4"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
x1="178.9133"
|
||||
y1="342.13019"
|
||||
x2="155.9601"
|
||||
y2="362.37878"
|
||||
gradientTransform="matrix(2,0,0,2.0000004,-111.74825,-110.67438)">
|
||||
<stop
|
||||
offset="0"
|
||||
stop-color="#CC991E"
|
||||
id="stop20" />
|
||||
<stop
|
||||
offset="1"
|
||||
stop-color="#F2B831"
|
||||
id="stop21" />
|
||||
</linearGradient>
|
||||
</defs>
|
||||
<path
|
||||
fill="url(#gradient_4)"
|
||||
d="m 134.44575,540.94774 c 4.872,0.144 18.938,7.52 23.586,10.336 6.858,1.708 20.052,4.126 26.25,6.798 0.434,-1.258 0.146,-2.694 0,-3.998 0.138,-1.692 0.09,-3.306 0,-5 3.348,0.634 6.652,2.408 10.05,2.2 13.202,5.656 24.534,12.708 34.05,23.62 3.788,3.09 7.482,6.23801 11.126,9.49601 4.716,4.008 9.52,7.936 13.794,12.424 1.884,0.704 5.45,2.046 6.762,3.614 1.584,0.97 3.154,2.014 4.78,2.904 7.256,3.166 14.768,8.762 21.092,13.49 1.516,2.334 3.288,4.486 5.016,6.664 l 7.45,10.00201 c 3.628,5.182 7.178,10.882 11.632,15.38 l 0.164,0.692 c -22.282,-4.896 -55.696,-23.88201 -74.236,-37.44601 -6.744,-4.934 -12.552,-11.388 -19.652,-15.766 -6.676,-4.12 -15.06,-5.966 -22.186,-9.388 -16.632,-7.988 -30.922,-18.98801 -44.824,-30.96401 -4.57,-5.32 -10.27,-9.648 -14.854,-15.058 z"
|
||||
id="path21"
|
||||
style="fill:url(#gradient_4);stroke-width:2" />
|
||||
<path
|
||||
fill="#d6991c"
|
||||
d="m 158.03175,551.28374 c 6.858,1.708 20.052,4.126 26.25,6.798 1.448,0.596 2.168,1.102 2.948,2.48 l -0.558,0.666 c -3.77,-0.136 -27.166,-8.046 -28.64,-9.944 z"
|
||||
id="path22"
|
||||
style="stroke-width:2" />
|
||||
<path
|
||||
fill="#bf8a24"
|
||||
d="m 242.85175,607.32775 c 7.25,0.168 31.11,8.666 40.444,11.75 -14.638,0.038 -27.2,-6.238 -40.444,-11.75 z"
|
||||
id="path23"
|
||||
style="stroke-width:2" />
|
||||
<path
|
||||
fill="#e4c267"
|
||||
d="m 232.69375,596.82375 c 6.662,0.62 22.044,5.462 27.37,3.614 1.584,0.97 3.154,2.014 4.78,2.904 -4.194,1.55 -18.89,-0.318 -26.814,1.446 z"
|
||||
id="path24"
|
||||
style="stroke-width:2" />
|
||||
<path
|
||||
fill="#e4c267"
|
||||
d="m 209.78375,574.90374 c -2.394,-0.948 -7.676,-3.032 -7.456,-6.196 5.142,-1.48 19.682,5.378 26.054,6.196 3.788,3.09 7.482,6.23801 11.126,9.49601 l -0.16,0.142 c -3.374,0.606 -25.568,-7.70801 -29.564,-9.63801 z"
|
||||
id="path25"
|
||||
style="stroke-width:2" />
|
||||
<path
|
||||
fill="#d6991c"
|
||||
d="m 209.78375,574.90374 c 3.996,1.93 26.19,10.24401 29.564,9.63801 l 0.16,-0.142 c 4.716,4.008 9.52,7.936 13.794,12.424 1.884,0.704 5.45,2.046 6.762,3.614 -5.326,1.848 -20.708,-2.994 -27.37,-3.614 -10.77,-1.75 -16.314,-4.876 -19.558,-16.004 -1.528,-1.78 -2.85,-3.59801 -3.352,-5.91601 z"
|
||||
id="path26"
|
||||
style="stroke-width:2" />
|
||||
<path
|
||||
fill="#bf8a24"
|
||||
d="m 209.78375,574.90374 c 3.996,1.93 26.19,10.24401 29.564,9.63801 l 0.16,-0.142 c 4.716,4.008 9.52,7.936 13.794,12.424 v 0 c -11.244,-0.884 -22.286,-6.858 -31.866,-12.424 -2.804,-0.374 -5.434,-2.774 -8.3,-3.58 -1.528,-1.78 -2.85,-3.59801 -3.352,-5.91601 z"
|
||||
id="path27"
|
||||
style="stroke-width:2" />
|
||||
<path
|
||||
fill="#ad7214"
|
||||
d="m 221.43575,584.39975 c 6.578,-0.56 30.096,8.298 31.866,12.424 -11.244,-0.884 -22.286,-6.858 -31.866,-12.424 z"
|
||||
id="path28"
|
||||
style="stroke-width:2" />
|
||||
<path
|
||||
fill="#132b6d"
|
||||
d="m 266.41175,531.65974 c -4.998,-0.03 -11.098,-9.27801 -14.01,-12.81601 -78.2,-95.08401 -44.296,-239.09604 68.622,-289.88605 14.626,-6.58 87.39,-28.004 83.98,-12.018 0.29,5.32 -5.89,12.826 -5.742,19.654 l 0.8,-0.356 0.256,-0.984 c 0.838,-3.116 3.132,-7.658 4.686,-10.42 v 0 c -2.204,7.998 -7.486,15.148 -3.436,23.75601 l -0.2,-1.06001 1.24,-0.028 c 0.878,-0.938 1.364,-2.1 1.93,-3.238 l -0.516,-0.474 c -0.172,-2.288 2.834,-5.232 4.34,-6.828 v 3.898 c 7.112,-8.978 14.618,-17.87 22.424,-26.248 l 0.5,0.152 c 8.212,2.444 16.47,3.944 24.602,6.854 58.574,20.972 106.85,72.05001 120.456,133.45202 1.73,7.81001 2.632,15.79601 4.472,23.57201 0.174,4.016 1.316,11.12 -0.142,14.692 l -1.322,0.664 1.154,0.176 c 1.286,3.432 0.364,9.786 0.31,13.526 0.428,4.816 0.606,10.62001 0,15.40801 -1.662,4.574 -2.66,9.378 -3.582,14.148 -0.862,5.382 -1.694,10.842 -3.742,15.924 -1.502,3.656 -3.308,7.462 -4.308,11.294 -0.442,4.27201 -3.664,10.89601 -6.116,14.42401 -2.28,4.28 -4.82,10.524 -8.172,14.028 -2.766,4.198 -5.424,8.452 -8.062,12.73 l -10.636,13.256 c -0.812,1.354 -10.158,11.70601 -11.41,12.74801 -4.732,2.976 -7.86,5.02 -11.552,9.288 -4.794,2.344 -9.02,6.04 -13.816,8.136 -4.916,2.576 -9.95,5.226 -14.068,8.998 -5.336,1.804 -10.23,3.636 -15.1,6.486 -3,0.812 -11.478,3.87 -14.124,3.644 -5.37,1.882 -11.066,2.43 -16.396,4.486 l -14.888,2.206 c -3.228,-0.058 -14.524,1.172 -16.482,0 -2.668,0.884 -14.2,-1.2 -17.154,-2.206 -4.388,-1.97 -13.234,-3.4 -15.17,-4.486 -15.284,-4 -26.706,-61.61201 4.84,-58.55001 5.12,0.178 10.212,1.104 15.266,1.896 -0.322,-4.59 -1.47,-8.966 -2.758,-13.362 -31.792,-69.38401 -101.182,-95.30202 -174.692,-84.31001 28.904,2.816 52.742,14.29 77.006,28.634 14.684,13.388 42.828,39.46001 22.146,59.30801 -4.42,-5.66 -9.796,-10.928 -13.456,-17.124 l -1.134,0.23 0.924,-0.544 0.246,0.612 -1.168,-0.966 c -0.378,1.04 0.1,2.79 0.238,3.908 -0.494,8.656 -0.63,17.812 -1.922,26.378 -0.986,1.08 -1.914,2.264 -3.172,3.032 -4.348,3.636 -8.422,7.43801 -12.466,11.40401 -1.992,-3.07 -5.034,-6.59401 -6.57,-9.84601 -2.598,-1.562 -2.622,-4.334 -3.65,-6.816 l -0.892,0.308 c -0.248,2.022 1.28,3.668 1.268,5.77 l -0.744,0.738 c 2.36,3.862 7.746,10.52601 7.948,15.01601 -5.642,-0.656 -11.25,-1.548 -16.884,-2.268 z"
|
||||
id="path29"
|
||||
style="stroke-width:2" />
|
||||
<path
|
||||
fill="#f1be39"
|
||||
d="m 271.23775,505.65573 4.11,2.688 c 0.612,3.864 2.48,7.024 4.018,10.568 -2.598,-1.562 -2.622,-4.334 -3.65,-6.816 l -0.892,0.308 c -0.248,2.022 1.28,3.668 1.268,5.77 l -0.744,0.738 c -1.114,-4.514 -3.114,-8.68 -4.11,-13.256 z"
|
||||
id="path30"
|
||||
style="stroke-width:2" />
|
||||
<path
|
||||
fill="#051053"
|
||||
d="m 397.67375,507.07373 c 2.356,4.01 4.79,7.942 7.33,11.838 -3.3,-1.106 -7.652,-4.4 -10.786,-4.59 l 1.848,-0.566 c 1.032,-1.614 0.804,-4.254 1.44,-6.188 z"
|
||||
id="path31"
|
||||
style="stroke-width:2" />
|
||||
<path
|
||||
fill="#0f0e1a"
|
||||
d="m 393.38575,498.19573 c 3.194,2.542 2.828,5.462 4.288,8.878 l -0.168,0.494 c -0.636,1.934 -0.408,4.574 -1.44,6.188 l -1.848,0.566 c -4.74,-0.682 -9.642,-1.346 -13.34,-4.66 5.12,0.178 10.212,1.104 15.266,1.896 -0.322,-4.59 -1.47,-8.966 -2.758,-13.362 z"
|
||||
id="path32"
|
||||
style="stroke-width:2" />
|
||||
<path
|
||||
fill="#f1be39"
|
||||
d="m 405.00375,216.93968 c 0.29,5.32 -5.89,12.826 -5.742,19.654 l 0.8,-0.356 0.256,-0.984 c 0.838,-3.116 3.132,-7.658 4.686,-10.42 v 0 c -2.204,7.998 -7.486,15.148 -3.436,23.75601 l -0.2,-1.06001 1.24,-0.028 c 0.878,-0.938 1.364,-2.1 1.93,-3.238 l -0.516,-0.474 c -0.172,-2.288 2.834,-5.232 4.34,-6.828 v 3.898 c -5.74,7.47601 -10.278,15.97801 -14.976,24.13401 2.614,-16.47 4.536,-32.74201 11.618,-48.05401 z"
|
||||
id="path33"
|
||||
style="stroke-width:2" />
|
||||
<path
|
||||
fill="#fade6b"
|
||||
d="m 376.03775,568.21174 c 3.14,-7.134 6.892,-14.264 9.44,-21.616 2.51,8.576 3.87,17.374 5.73,26.102 -4.388,-1.97 -13.234,-3.4 -15.17,-4.486 z"
|
||||
id="path34"
|
||||
style="stroke-width:2" />
|
||||
<path
|
||||
fill="#e4c267"
|
||||
d="m 275.34775,508.34373 c 7.554,3.424 15.174,6.414 23.054,9.01 -4.348,3.636 -8.422,7.43801 -12.466,11.40401 -1.992,-3.07 -5.034,-6.59401 -6.57,-9.84601 -1.538,-3.544 -3.406,-6.704 -4.018,-10.568 z"
|
||||
id="path35"
|
||||
style="stroke-width:2" />
|
||||
<path
|
||||
fill="#e4c267"
|
||||
d="m 580.81575,378.64171 c 0.174,4.016 1.316,11.12 -0.142,14.692 l -1.322,0.664 c -8.51,-1.606 -16.614,-3.178 -25.25,-4.102 8.398,-6.016 16.886,-8.52 26.714,-11.254 z"
|
||||
id="path36"
|
||||
style="stroke-width:2" />
|
||||
<path
|
||||
fill="#e4c267"
|
||||
d="m 554.10175,411.69971 c 8.586,-2.24 17.924,-2.716 26.714,-4 0.428,4.816 0.606,10.62001 0,15.40801 -8.872,-2.66 -19.79,-5.044 -26.714,-11.40801 z"
|
||||
id="path37"
|
||||
style="stroke-width:2" />
|
||||
<path
|
||||
fill="#e4c267"
|
||||
d="m 413.80575,549.08374 c 5.198,7.878 7.314,17.22 11.038,25.82 -3.228,-0.058 -14.524,1.172 -16.482,0 1.018,-8.646 2.216,-17.686 5.444,-25.82 z"
|
||||
id="path38"
|
||||
style="stroke-width:2" />
|
||||
<path
|
||||
fill="#fade6b"
|
||||
d="m 526.91575,484.43773 c 9.316,1.67 19.154,5.096 27.98,8.488 -2.766,4.198 -5.424,8.452 -8.062,12.73 -7.26,-6.506 -15.232,-12.516 -19.918,-21.218 z"
|
||||
id="path39"
|
||||
style="stroke-width:2" />
|
||||
<path
|
||||
fill="#fade6b"
|
||||
d="m 549.10575,437.25572 c 9.318,-0.64 18.79,-0.084 28.128,0 -0.862,5.382 -1.694,10.842 -3.742,15.924 -8.43,-5.086 -16.78,-9.56 -24.386,-15.924 z"
|
||||
id="path40"
|
||||
style="stroke-width:2" />
|
||||
<path
|
||||
fill="#e4c267"
|
||||
d="m 439.73175,543.29174 1.36,1.452 c 6.326,6.73 9.89,15.802 15.036,23.468 -5.37,1.882 -11.066,2.43 -16.396,4.486 z"
|
||||
id="path41"
|
||||
style="stroke-width:2" />
|
||||
<path
|
||||
fill="#fade6b"
|
||||
d="m 539.67175,462.21972 c 9.972,-0.004 19.626,1.052 29.512,2.254 -0.442,4.27201 -3.664,10.89601 -6.116,14.42401 -8.166,-3.222 -17.172,-10.556 -23.396,-16.67801 z"
|
||||
id="path42"
|
||||
style="stroke-width:2" />
|
||||
<path
|
||||
fill="#e4c267"
|
||||
d="m 488.88575,521.69573 c 7.732,3.84201 19.168,12.47201 24.35,19.25201 -4.794,2.344 -9.02,6.04 -13.816,8.136 -4.688,-8.85 -7.936,-17.748 -10.534,-27.38801 z"
|
||||
id="path43"
|
||||
style="stroke-width:2" />
|
||||
<path
|
||||
fill="#fade6b"
|
||||
d="m 509.94175,505.65573 c 5.494,1.07 8.69,2.82 13.364,5.902 5.104,1.702 8.644,4.112 12.892,7.354 -0.812,1.354 -10.158,11.70601 -11.41,12.74801 -2.844,-4.58 -6.188,-9.33401 -8.274,-14.30601 -2.536,-3.532 -4.474,-7.872 -6.572,-11.698 z"
|
||||
id="path44"
|
||||
style="stroke-width:2" />
|
||||
<path
|
||||
fill="#e4c267"
|
||||
d="m 465.35375,533.92774 c 7.502,6.24 15.294,15.644 19.998,24.154 -5.336,1.804 -10.23,3.636 -15.1,6.486 -3.214,-9.588 -4.238,-20.568 -4.898,-30.64 z"
|
||||
id="path45"
|
||||
style="stroke-width:2" />
|
||||
<path
|
||||
fill="#2356ae"
|
||||
d="M 351.39175,758.48578 C 168.77575,730.12777 41.748945,587.64375 38.358945,403.44571 34.725145,206.00568 197.09775,42.52665 394.25175,39.316449 c 199.908,-3.255 364.866,156.319231 367.572,354.681261 -6.094,-4.58 -18.174,-19.598 -24.91,-26.196 -36.444,-35.69001 -72.076,-72.23002 -107.964,-108.48002 -5.912,-5.854 -23.126,-25.17801 -28.692,-29.00401 -3.034,-2.352 -5.59,-5.25 -8.21,-8.044 -6.464,-8.496 -15.426,-15.704 -22.864,-23.372 -34.426,-27.95001 -82.38,-53.60801 -126.896,-61.38602 -2.586,-0.374 -5.316,-0.164 -7.914,0 -18.072,-0.934 -32.114,10.64001 -48.896,14.09201 43.72,19.62 46.344,31.682 19.526,73.22601 v 0 c -1.554,2.762 -3.848,7.304 -4.686,10.42 l -0.256,0.984 -0.8,0.356 c -0.148,-6.828 6.032,-14.334 5.742,-19.654 3.41,-15.986 -69.354,5.438 -83.98,12.018 -112.918,50.79001 -146.822,194.80204 -68.622,289.88605 2.912,3.538 9.012,12.78601 14.01,12.81601 5.634,0.72 11.242,1.612 16.884,2.268 -0.202,-4.49 -5.588,-11.15401 -7.948,-15.01601 l 0.744,-0.738 c 0.012,-2.102 -1.516,-3.748 -1.268,-5.77 l 0.892,-0.308 c 1.028,2.482 1.052,5.254 3.65,6.816 1.536,3.252 4.578,6.77601 6.57,9.84601 4.044,-3.966 8.118,-7.76801 12.466,-11.40401 1.258,-0.768 2.186,-1.952 3.172,-3.032 1.292,-8.566 1.428,-17.722 1.922,-26.378 -0.138,-1.118 -0.616,-2.868 -0.238,-3.908 l 1.168,0.966 -0.246,-0.612 -0.924,0.544 1.134,-0.23 c 3.66,6.196 9.036,11.464 13.456,17.124 20.682,-19.848 -7.462,-45.92001 -22.146,-59.30801 8.322,2.714 22.978,21.546 26.672,29.42201 2.368,5.048 2.81,14.832 4.236,17.488 3.938,-9.238 -6.242,-21.60201 -4.594,-23.16201 6.228,12.53801 9.19,23.92001 0,35.56001 -11.034,9.136 -29.284,21.156 -36.122,33.99601 -15.95,29.946 -3.004,58.48801 7.948,85.92401 1.766,3.338 5.028,8.098 5.668,11.75001 h -1.106 l -7.45,-10.00201 c -1.728,-2.178 -3.5,-4.33 -5.016,-6.664 -6.324,-4.728 -13.836,-10.324 -21.092,-13.49 -1.626,-0.89 -3.196,-1.934 -4.78,-2.904 -1.312,-1.568 -4.878,-2.91 -6.762,-3.614 -4.274,-4.488 -9.078,-8.416 -13.794,-12.424 -3.644,-3.258 -7.338,-6.40601 -11.126,-9.49601 -9.516,-10.912 -20.848,-17.964 -34.05,-23.62 -3.398,0.208 -6.702,-1.566 -10.05,-2.2 0.09,1.694 0.138,3.308 0,5 0.146,1.304 0.434,2.74 0,3.998 -6.198,-2.672 -19.392,-5.09 -26.25,-6.798 -4.648,-2.816 -18.714,-10.192 -23.586,-10.336 4.584,5.41 10.284,9.738 14.854,15.058 7.016,12.05 42.298,43.51801 53.304,54.48401 l 117.162,117.50802 c 7.714,7.722 27.054,23.83601 31.626,30.48801 z"
|
||||
id="path46"
|
||||
style="stroke-width:2" />
|
||||
<path
|
||||
fill="#132b6d"
|
||||
d="m 179.65375,204.78568 0.312,-1.174 0.54,0.326 c 1.66,8.908 0.01,23.462 3.776,31.23 -0.946,2.464 -0.94,5.09 -2.088,7.614 -0.896,-7.214 -1.61,-14.446 -2.54,-21.656 -0.13,-5.46 -0.212,-10.878 0,-16.34 z"
|
||||
id="path47"
|
||||
style="stroke-width:2" />
|
||||
<path
|
||||
fill="#fade6b"
|
||||
d="m 125.81775,276.75769 c 2.17,11.74 9.116,22.444 12.934,33.79201 l -0.57,0.518 c -1.16,-3.654 -7.662,-20.46601 -9.84,-22.36001 l -0.976,0.068 c -1.38,1.692 -2.846,2.256 -4.866,3.024 -2.616,6.924 -1.898,24.47801 -3.168,33.15201 -0.472,-15.43 -0.356,-34.15801 6.486,-48.19401 z"
|
||||
id="path48"
|
||||
style="stroke-width:2" />
|
||||
<path
|
||||
fill="#132b6d"
|
||||
d="m 274.23575,141.76967 c -2.074,7.182 -3.328,13.142 -2.998,20.634 -4.176,2.324 -7.592,4.762 -11.174,7.91 v -2.354 c 1.878,-6.262 2.766,-12.768 4.78,-19.034 3.524,-1.72 6.27,-4.824 9.392,-7.156 z"
|
||||
id="path49"
|
||||
style="stroke-width:2" />
|
||||
<path
|
||||
fill="#132b6d"
|
||||
d="m 371.74975,108.36966 c -3.86,7.4 -7.354,14.524 -9.404,22.688 v 0 c -3.648,0.82 -7.228,1.122 -10.954,1.38 4.392,-6.38 5.642,-13.5 10.954,-19.87 l 1.312,1.376 c 2.71,-0.242 5.8,-4.024 8.092,-5.574 z"
|
||||
id="path50"
|
||||
style="stroke-width:2" />
|
||||
<path
|
||||
fill="#fade6b"
|
||||
d="m 268.33575,131.05766 c -1.042,5.972 -2.31,11.92001 -3.492,17.86801 -2.014,6.266 -2.902,12.772 -4.78,19.034 -1.326,-4.864 3.318,-9.734 1.244,-14.208 -22.57,-10.084 -17.62,14.712 -26.708,18.13 6.172,-15.816 20.434,-30.548 33.736,-40.82401 z"
|
||||
id="path51"
|
||||
style="stroke-width:2" />
|
||||
<path
|
||||
fill="#fade6b"
|
||||
d="m 179.65375,196.07968 c -0.244,2.936 -0.14,5.77 0,8.706 -0.212,5.462 -0.13,10.88 0,16.34 -2.87,1.676 -3.574,6.084 -4.174,9.192 -1.636,3.874 -3.642,7.834 -4.67,11.914 l -0.244,0.106 0.41,-0.728 -0.192,-0.106 c 2.75,-11.394 5.076,-8.03 -4.17,-11.186 -1.178,2.228 -4.1,9.672 -5.944,10.542 4.934,-15.602 12.448,-29.868 18.984,-44.78 z"
|
||||
id="path52"
|
||||
style="stroke-width:2" />
|
||||
<path
|
||||
fill="#132b6d"
|
||||
d="m 456.12775,109.52166 c 3.564,1.658 10.414,-0.138 14.124,-1.152 -9.878,8.046 -21.92,17.846 -27.964,29.146 -2.586,-0.374 -5.316,-0.164 -7.914,0 l -6.334,-3.096 c 7.916,-6.85 14.976,-14.806 22.762,-21.852 1.752,-1.066 3.52,-2.074 5.326,-3.046 z"
|
||||
id="path53"
|
||||
style="stroke-width:2" />
|
||||
<path
|
||||
fill="#fade6b"
|
||||
d="m 100.50375,364.60771 c 8.122,7.8 22.772,25.956 30.762,31.252 0.936,5.038 2.374,10.71 2.462,15.774 -12.286,-9.396 -17.796,-19.394 -28.126,-27.642 0.096,1.026 0.082,1.858 -0.212,2.84 -2.522,-7.432 -3.886,-14.462 -4.886,-22.224 z"
|
||||
id="path54"
|
||||
style="stroke-width:2" />
|
||||
<path
|
||||
fill="#fade6b"
|
||||
d="m 96.515745,442.51972 c 8.566005,4.34 36.750005,23.486 42.236005,30.46001 l 0.276,0.808 c 6.398,2.844 8.096,8.69 8.058,15.766 l -0.588,-0.544 c -1.434,-1.32 -10.678,-7.62 -12.052,-7.594 -5.946,-3.566 -23.722,-21.69601 -29.056,-20.70801 -3.03,-6.03 -5.978005,-12.092 -8.874005,-18.188 z"
|
||||
id="path55"
|
||||
style="stroke-width:2" />
|
||||
<path
|
||||
fill="#fade6b"
|
||||
d="m 121.77975,525.87374 c 19.42,6.36 38.498,14.12 57.874,20.722 l 0.548,0.758 1.826,-0.056 c 1.258,1.488 1.388,4.868 2.254,6.786 0.146,1.304 0.434,2.74 0,3.998 -6.198,-2.672 -19.392,-5.09 -26.25,-6.798 -4.648,-2.816 -18.714,-10.192 -23.586,-10.336 -4.45,-4.812 -8.812,-9.764 -12.666,-15.074 z"
|
||||
id="path56"
|
||||
style="stroke-width:2" />
|
||||
<path
|
||||
fill="#fade6b"
|
||||
d="m 271.23775,162.40367 c 7.99,-6.254 18.884,-10.416 28.25,-14.234 16.76,-6.832 13.44,-7.376 25.658,-19.48401 10.768,-10.672 29.362,-23.208 44.058,-28.062 -2.508,3.886 -5.042,7.672 -6.858,11.944 -5.312,6.37 -6.562,13.49 -10.954,19.87 -0.974,1.678 -1.832,2.932 -3.262,4.254 l -0.532,-0.056 c 0.956,-3.102 4.54,-2.84 3.518,-6.662 l -2.128,-2.174 c -8.514,3.742 -77.504,34.61201 -77.75,34.60401 z"
|
||||
id="path57"
|
||||
style="stroke-width:2" />
|
||||
<defs
|
||||
id="defs58">
|
||||
<linearGradient
|
||||
id="gradient_5"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
x1="145.13785"
|
||||
y1="328.17804"
|
||||
x2="117.22018"
|
||||
y2="280.89636"
|
||||
gradientTransform="matrix(2,0,0,2.0000004,-111.74825,-110.67438)">
|
||||
<stop
|
||||
offset="0"
|
||||
stop-color="#D79A18"
|
||||
id="stop57" />
|
||||
<stop
|
||||
offset="1"
|
||||
stop-color="#F6C842"
|
||||
id="stop58" />
|
||||
</linearGradient>
|
||||
</defs>
|
||||
<path
|
||||
fill="url(#gradient_5)"
|
||||
d="m 105.38975,460.70772 c 5.334,-0.988 23.11,17.14201 29.056,20.70801 4.286,3.456 9.396,6.13 13.392,9.86 0.278,-2.39 0.424,-4.632 1.462,-6.838 l 0.504,-0.106 c 0.058,-0.954 -0.086,-7.128 0.79,-5.038 1.712,4.084 3.956,1.936 4.492,8.664 l 0.486,-0.014 c 2.38,7.206 8.172,8.99 13.068,13.884 l -0.348,0.398 c 2.612,0.138 4.874,0.24 7.188,1.558 0.816,0.698 1.66,1.344 2.532,1.97 l 0.462,1.048 c -1.04,0.308 -0.606,0.28 -1.274,0.272 3.704,0.932 3.808,4.058 4.994,7.248 v 0 c 2.772,3.696 5.17,7.268 6.946,11.55201 -1.732,-0.248 -24.262,-10.67601 -16.892,-1.472 2.482,3.098 5.226,7.084 8.34,9.526 2.636,1.906 4.292,5.756 7.29,7.02 h 1.262 l -1.262,2.344 c 0.818,1.872 1.938,2.472 3.716,3.304 l -0.66,0.048 c -2.968,0.184 -9.982,-2.572 -6.652,2.44 0.09,1.694 0.138,3.308 0,5 -0.866,-1.918 -0.996,-5.298 -2.254,-6.786 l -1.826,0.056 -0.548,-0.758 c -0.52,-3.778 -6.05,-8.072 -8.808,-10.5 -24.584,-13.75401 -54.27,-50.32801 -65.456,-75.38802 z"
|
||||
id="path58"
|
||||
style="fill:url(#gradient_5);stroke-width:2" />
|
||||
<path
|
||||
fill="#f1be39"
|
||||
d="m 170.84575,536.09574 c 0.178,0.002 16.806,6.982 17.032,7.196 0.818,1.872 1.938,2.472 3.716,3.304 l -0.66,0.048 c -2.968,0.184 -9.982,-2.572 -6.652,2.44 0.09,1.694 0.138,3.308 0,5 -0.866,-1.918 -0.996,-5.298 -2.254,-6.786 l -1.826,0.056 -0.548,-0.758 c -0.52,-3.778 -6.05,-8.072 -8.808,-10.5 z"
|
||||
id="path59"
|
||||
style="stroke-width:2" />
|
||||
<path
|
||||
fill="#bf8a24"
|
||||
d="m 182.19375,514.32173 c -5.22,-0.312 -16.074,-7.81 -20,-10.892 -0.398,-0.312 -4.628,-3.938 -2.568,-3.994 4.124,-0.114 11.04,6.52 14.26,8.908 0.87,-0.988 2.086,-1.036 3.314,-1.27 3.704,0.932 3.808,4.058 4.994,7.248 z"
|
||||
id="path60"
|
||||
style="stroke-width:2" />
|
||||
<path
|
||||
fill="#d6991c"
|
||||
d="m 177.19975,507.07373 c 3.704,0.932 3.808,4.058 4.994,7.248 -2.664,-2.118 -5.5,-4.052 -8.308,-5.978 0.87,-0.988 2.086,-1.036 3.314,-1.27 z"
|
||||
id="path61"
|
||||
style="stroke-width:2" />
|
||||
<defs
|
||||
id="defs62">
|
||||
<linearGradient
|
||||
id="gradient_6"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
x1="238.76126"
|
||||
y1="143.77654"
|
||||
x2="270.52316"
|
||||
y2="95.432106"
|
||||
gradientTransform="matrix(2,0,0,2.0000004,-111.74825,-110.67438)">
|
||||
<stop
|
||||
offset="0"
|
||||
stop-color="#FAD84F"
|
||||
id="stop61" />
|
||||
<stop
|
||||
offset="1"
|
||||
stop-color="#FFF5A9"
|
||||
id="stop62" />
|
||||
</linearGradient>
|
||||
</defs>
|
||||
<path
|
||||
fill="url(#gradient_6)"
|
||||
d="m 362.34575,131.05766 c 26.81,-3.184 19.722,-1.768 42.234,-13.04 19.684,-9.856 41.194,-16.094 63.324,-15.652 -4.056,2.182 -8.086,4.39 -11.776,7.156 -1.806,0.972 -3.574,1.98 -5.326,3.046 -7.786,7.046 -14.846,15.002 -22.762,21.852 l 6.334,3.096 c -18.072,-0.934 -32.114,10.64001 -48.896,14.09201 -3.1,0.442 -6.45,0.35 -9.44,1.264 -3.958,1.83 -9.35,-0.016 -13.526,1.328 l -0.166,0.49 c 4.412,1.276 9.87,1.98 13.692,4.562 -11.014,0.822 -21.384,-2.856 -32.396,-2.412 -0.74,-0.772 -5.22,0.294 -7.562,-0.282 l 0.286,-0.044 c -8.446,-2.598 -0.096,-4.918 2.406,-7.588 6.796,-3.554 22.95,-8.952 23.574,-17.86801 z"
|
||||
id="path62"
|
||||
style="fill:url(#gradient_6);stroke-width:2" />
|
||||
<path
|
||||
fill="#e4c267"
|
||||
d="m 341.76375,151.60767 c 11.034,-5.176 26.9,-6.422 39.114,-7.498 -2.7,3.496 -6.968,3.658 -4.84,8.762 -3.958,1.83 -9.35,-0.016 -13.526,1.328 l -0.166,0.49 c -4.888,-1.222 -8.504,-1.066 -13.358,0 -2.746,0.4 -8.482,-0.994 -10.622,-2.552 l 0.184,-0.502 -0.088,0.422 0.506,-0.548 z"
|
||||
id="path63"
|
||||
style="stroke-width:2" />
|
||||
<path
|
||||
fill="#f1be39"
|
||||
d="m 424.84375,132.43766 c 9.142,-6.23 14.826,-16.674 25.958,-19.87 -7.786,7.046 -14.846,15.002 -22.762,21.852 l 6.334,3.096 c -18.072,-0.934 -32.114,10.64001 -48.896,14.09201 -3.1,0.442 -6.45,0.35 -9.44,1.264 -2.128,-5.104 2.14,-5.266 4.84,-8.762 8.736,-2.842 14.512,-8.95201 24.126,-9.69001 2.98,-2.124 16.504,-3.504 19.84,-1.982 z"
|
||||
id="path64"
|
||||
style="stroke-width:2" />
|
||||
<path
|
||||
fill="#fade6b"
|
||||
d="m 405.00375,134.41966 c 2.98,-2.124 16.504,-3.504 19.84,-1.982 -3.412,3.298 -15.364,2.648 -19.84,1.982 z"
|
||||
id="path65"
|
||||
style="stroke-width:2" />
|
||||
<path
|
||||
fill="#f1be39"
|
||||
d="m 348.98775,127.79966 2.128,2.174 c 1.022,3.822 -2.562,3.56 -3.518,6.662 l 0.532,0.056 c 1.43,-1.322 2.288,-2.576 3.262,-4.254 3.726,-0.258 7.306,-0.56 10.954,-1.38 -0.624,8.91601 -16.778,14.31401 -23.574,17.86801 -7.41,2.68 -9.978,8.094 -16.164,11.038 -3.652,1.74 -27.878,3.596 -21.164,11.206 l -1.672,0.284 6.764,0.428 c -13.404,2.41 -17.64,4.718 -29.284,7.922 6.38,1.602 10.798,-2.57 18.448,0.768 h 2.702 l -0.042,1.276 c -7.05,4.88 -18.516,5.498 -27.53,13.56001 -1.344,1.2 -2.83,2.678 -4.418,3.494 -4.23,1.326 -8.724,2.754 -13.11,3.378 -1.89,1.25 -12.68,4.234 -15.272,4.588 v 0 -2.082 l -2.28,-3.718 c -4.61,0.068 -7.042,12.34 -7.368,15.872 -8.018,0.742 -11.65,9.846 -16.818,14.858 -3.88,-1.22 -4.476,2.806 -6.472,5.164 -1.86,1.146 -4.982,3.384 -5.056,5.82 1.124,1.468 1.626,2.97 2.234,4.704 v 0 c -0.316,5.61801 1.456,4.99401 6.442,4.89801 -1.14,1.822 -2.366,3.564 -3.62,5.31 -1.95,2.246 -3.464,4.796 -5.056,7.3 -3.182,5.058 -6.5,9.462 -10.092,14.184 l -0.804,0.272 c -2.854,3.482 -4.438,8.244 -6.946,12.09 0.062,-2.884 0.094,-5.748 0,-8.632 -0.152,-5.29 -0.606,-10.77 0,-16.034 -4.278,6.658 -7.876,14.308 -9.904,21.966 l -0.172,-0.658 c -0.69,-2.716 -0.326,-5.508 -1.658,-8.056 -2.812,3.078 -0.546,7.956 -1.82,11.414 -2.326,1.824 -3.704,3.838 -4.96,6.498 0.362,13.11001 -0.04,26.34401 -0.64,39.44401 -2.058,-8.594 -3.944,-31.802 -5.008,-35.10001 -1.466,3.81001 -4.786,9.06401 -5.378,12.93801 -1.004,6.558 0.336,12.898 -1.634,19.682 l -0.152,-2.372 c -1.242,0.97 -0.692,3.5 -1.568,4.852 -0.888,5.956 -6.352,24.62201 -2.024,29.02001 l 1.026,-0.056 c 0.982,-1.328 1.022,-2.274 0.998,-3.888 2.54,11.112 6.984,15.086 6.272,27.338 -4.292,-5.588 -5.538,-12.7 -9.37,-18.494 -3.122,10.1 -3.688,19.896 -1.048,30.034 0.382,1.46 5.496,9.346 2.684,9.412 -1.922,-1.014 -3.814,-2.066 -5.696,-3.148 v 6.18601 l 5.696,5.592 -0.786,0.856 c 0.296,2.89 2.728,6.41 -0.85,8.024 -1.37,-0.752 -2.74,-1.49 -4.06,-2.326 1.508,3.706 4.194,6.776 5.696,10.326 -5.51,8.998 8.018,9.652 6.644,16.822 -2.168,-1.12 -4.022,-2.238 -6.51,-2.394 l -0.58,0.476 c 1.212,3.574 5.104,5.87 8.18,7.788 l 0.106,0.944 c 2.112,1.702 5.154,3.652 6.672,5.856 l -0.092,0.576 c -1.6,-0.072 -10.62,-4.306 -6.686,-0.158 3.098,4.66401 7.5,8.32001 11.042,12.63001 1.028,1.378 2.036,2.636 2.66,4.248 l -0.342,0.572 c -2.3,-0.9 -3.438,-2.91 -5.976,-3.28 2.058,3.032 5.576,4.756 7.89,7.506 -6.846,-3.492 -13.43,-7.156 -19.826,-11.44 1.408,2.746 2.824,5.372 4.552,7.934 -0.206,1.33 -0.332,2.17 0,3.506 l -0.486,0.014 c -0.536,-6.728 -2.78,-4.58 -4.492,-8.664 -0.876,-2.09 -0.732,4.084 -0.79,5.038 l -0.504,0.106 c -1.038,2.206 -1.184,4.448 -1.462,6.838 -3.996,-3.73 -9.106,-6.404 -13.392,-9.86 1.374,-0.026 10.618,6.274 12.052,7.594 l 0.588,0.544 c 0.038,-7.076 -1.66,-12.922 -8.058,-15.766 l -0.276,-0.808 c 1.184,0.176 3.7,2.69 4.754,3.524 -1.57,-16.19201 -6.668,-17.95401 -15.372,-31.30601 -8.38,-12.854 -23.376,-43.43601 -22.744,-58.36601 0.294,-0.982 0.308,-1.814 0.212,-2.84 10.33,8.248 15.84,18.246 28.126,27.642 -0.088,-5.064 -1.526,-10.736 -2.462,-15.774 0.614,-23.334 -11.684,-42.03401 -11.934,-70.90801 1.27,-8.674 0.552,-26.22801 3.168,-33.15201 2.02,-0.768 3.486,-1.332 4.866,-3.024 l 0.976,-0.068 c 2.178,1.894 8.68,18.70601 9.84,22.36001 l 0.57,-0.518 c 1.386,0.9 2.382,2.54 3.39,3.858 1.862,-13.02001 6.618,-19.94201 9.452,-31.46801 3.608,-14.66 3.426,-26.278 9.076,-42.08001 1.844,-0.87 4.766,-8.314 5.944,-10.542 9.246,3.156 6.92,-0.208 4.17,11.186 l 0.192,0.106 -0.41,0.728 0.244,-0.106 c 1.028,-4.08 3.034,-8.04 4.67,-11.914 0.6,-3.108 1.304,-7.516 4.174,-9.192 0.93,7.21 1.644,14.442 2.54,21.656 1.148,-2.524 1.142,-5.15 2.088,-7.614 8.798,-9.326 16.32,-19.906 24.89,-29.486 4.756,-5.318 10.938,-9.912 15.132,-15.63401 4.15,-5.656 5.632,-12.712 10.296,-18.166 9.088,-3.418 4.138,-28.214 26.708,-18.13 2.074,4.474 -2.57,9.344 -1.244,14.208 v 2.354 c 3.582,-3.148 6.998,-5.586 11.174,-7.91 v 0 c 0.246,0.008 69.236,-30.86201 77.75,-34.60401 z"
|
||||
id="path66"
|
||||
style="stroke-width:2" />
|
||||
<path
|
||||
fill="#e4c267"
|
||||
d="m 182.19375,266.87369 c 0.564,-0.782 2.61,-7.412 3.094,-3.452 0.322,2.642 1.102,21.51 -3.094,19.486 -0.152,-5.29 -0.606,-10.77 0,-16.034 z"
|
||||
id="path67"
|
||||
style="stroke-width:2" />
|
||||
<path
|
||||
fill="#e7aa1f"
|
||||
d="m 125.81775,310.5497 c 2.45,2.318 5.498,11.792 7.544,15.398 2.698,4.748 6.998,5.738 5.39,11.534 l -0.768,0.906 -0.92,-0.342 c -4.658,-6.078 -8.65,-19.842 -11.246,-27.496 z"
|
||||
id="path68"
|
||||
style="stroke-width:2" />
|
||||
<path
|
||||
fill="#e7aa1f"
|
||||
d="m 238.02975,204.78568 c 5.564,-5.62 15.092,-21.80401 23.426,-22.17401 -1.03,1.272 -5.95,6.208 -5.208,7.716 -1.792,1.966 -4.054,3.62801 -5.628,5.75201 -3.67,1.584 -4.516,5.316 -6.108,8.706 2.69,-0.91 5.97,-2.338 8.79,-2.506 -1.89,1.25 -12.68,4.234 -15.272,4.588 v 0 z"
|
||||
id="path69"
|
||||
style="stroke-width:2" />
|
||||
<path
|
||||
fill="#fade6b"
|
||||
d="m 295.69975,180.57167 h 2.702 c -8.5,7.116 -21.784,5.136 -31.99,7.612 -3.338,1.062 -6.97,1.058 -10.164,2.144 -0.742,-1.508 4.178,-6.444 5.208,-7.716 1.96,-1.942 7.53,-0.964 9.782,0 8.094,-2.064 16.232,-1.644 24.462,-2.04 z"
|
||||
id="path70"
|
||||
style="stroke-width:2" />
|
||||
<path
|
||||
fill="#e4c267"
|
||||
d="m 261.45575,182.61167 c 1.96,-1.942 7.53,-0.964 9.782,0 -9.012,0.558 -6.586,5.252 -4.826,5.572 -3.338,1.062 -6.97,1.058 -10.164,2.144 -0.742,-1.508 4.178,-6.444 5.208,-7.716 z"
|
||||
id="path71"
|
||||
style="stroke-width:2" />
|
||||
<path
|
||||
fill="#bf8a24"
|
||||
d="m 200.03575,242.78168 c 1.124,1.468 1.626,2.97 2.234,4.704 v 0 c -0.316,5.61801 1.456,4.99401 6.442,4.89801 -1.14,1.822 -2.366,3.564 -3.62,5.31 -1.95,2.246 -3.464,4.796 -5.056,7.3 -3.182,5.058 -6.5,9.462 -10.092,14.184 l -0.804,0.272 c 0.992,-2.136 -0.112,-2.814 -0.734,-4.852 -1.902,-6.224 8.246,-26.224 11.63,-31.81601 z"
|
||||
id="path72"
|
||||
style="stroke-width:2" />
|
||||
<path
|
||||
fill="#f1be39"
|
||||
d="m 202.26975,247.48568 v 0 c -0.316,5.61801 1.456,4.99401 6.442,4.89801 -1.14,1.822 -2.366,3.564 -3.62,5.31 -1.95,2.246 -3.464,4.796 -5.056,7.3 -0.992,-6.32 1.244,-11.428 2.234,-17.50801 z"
|
||||
id="path73"
|
||||
style="stroke-width:2" />
|
||||
<path
|
||||
fill="#d6991c"
|
||||
d="m 298.40175,180.57167 -0.042,1.276 c -7.05,4.88 -18.516,5.498 -27.53,13.56001 -1.344,1.2 -2.83,2.678 -4.418,3.494 -4.23,1.326 -8.724,2.754 -13.11,3.378 -2.82,0.168 -6.1,1.596 -8.79,2.506 1.592,-3.39 2.438,-7.122 6.108,-8.706 1.574,-2.124 3.836,-3.78601 5.628,-5.75201 3.194,-1.086 6.826,-1.082 10.164,-2.144 10.206,-2.476 23.49,-0.496 31.99,-7.612 z"
|
||||
id="path74"
|
||||
style="stroke-width:2" />
|
||||
<path
|
||||
fill="#e4c267"
|
||||
d="m 271.23775,193.48968 c -1.194,1.158 -4.558,3.824 -4.826,5.412 -4.23,1.326 -8.724,2.754 -13.11,3.378 -2.82,0.168 -6.1,1.596 -8.79,2.506 1.592,-3.39 2.438,-7.122 6.108,-8.706 6.902,-0.504 13.82,-1.276 20.618,-2.59 z"
|
||||
id="path75"
|
||||
style="stroke-width:2" />
|
||||
<path
|
||||
fill="#d6991c"
|
||||
d="m 149.29975,466.26772 c -9.304,-9.342 -10.01,-43.218 -10.518,-57.68401 -0.538,-15.364 -1.234,-63.88401 4.522,-71.25001 l 0.256,0.428 -0.55,-0.498 c 0.858,0.034 1.536,1.384 3.084,1.57 -0.638,1.076 -2.192,1.04 -2.766,2.208 -3.374,6.87 -7.36,60.42401 -3.304,71.67401 l 1.144,0.50401 0.542,-0.48001 c -0.028,-1.786 0.016,-3.3 0.432,-5.04 v 6.18601 l 5.696,5.592 -0.786,0.856 c 0.296,2.89 2.728,6.41 -0.85,8.024 -1.37,-0.752 -2.74,-1.49 -4.06,-2.326 1.508,3.706 4.194,6.776 5.696,10.326 -5.51,8.998 8.018,9.652 6.644,16.822 -2.168,-1.12 -4.022,-2.238 -6.51,-2.394 l -0.58,0.476 c 1.212,3.574 5.104,5.87 8.18,7.788 l 0.106,0.944 c 2.112,1.702 5.154,3.652 6.672,5.856 l -0.092,0.576 c -1.6,-0.072 -10.62,-4.306 -6.686,-0.158 3.098,4.66401 7.5,8.32001 11.042,12.63001 1.028,1.378 2.036,2.636 2.66,4.248 l -0.342,0.572 c -2.3,-0.9 -3.438,-2.91 -5.976,-3.28 2.058,3.032 5.576,4.756 7.89,7.506 -6.846,-3.492 -13.43,-7.156 -19.826,-11.44 1.408,2.746 2.824,5.372 4.552,7.934 -0.206,1.33 -0.332,2.17 0,3.506 l -0.486,0.014 c -0.536,-6.728 -2.78,-4.58 -4.492,-8.664 -0.876,-2.09 -0.732,4.084 -0.79,5.038 l -0.504,0.106 c 0.334,-4.398 -0.07,-7.204 1.72,-11.458 -1.008,-2.202 -1.76,-4.234 -1.72,-6.71201 z"
|
||||
id="path76"
|
||||
style="stroke-width:2" />
|
||||
<path
|
||||
fill="#e4c267"
|
||||
d="m 149.29975,466.26772 c 2.55,1.562 4.34,4.17401 5.39,6.94401 l -0.242,0.898 c -1.33,0.158 -2.298,-0.53 -3.428,-1.13 -1.008,-2.202 -1.76,-4.234 -1.72,-6.71201 z"
|
||||
id="path77"
|
||||
style="stroke-width:2" />
|
||||
<path
|
||||
fill="#e4c267"
|
||||
d="m 234.59975,171.88167 c 9.088,-3.418 4.138,-28.214 26.708,-18.13 2.074,4.474 -2.57,9.344 -1.244,14.208 v 2.354 c -1.148,1.816 -5.864,3.458 -7.922,4.874 -14.14,9.736 -15.23,14.912 -24.894,26.40001 -6.982,8.3 -15.26,15.5 -22.134,23.932 -11.878,14.576 -27.774,39.38201 -41.434,51.23801 0.79,-11.36 12.096,-43.94801 11.8,-46.44001 0.6,-3.108 1.304,-7.516 4.174,-9.192 0.93,7.21 1.644,14.442 2.54,21.656 1.148,-2.524 1.142,-5.15 2.088,-7.614 8.798,-9.326 16.32,-19.906 24.89,-29.486 4.756,-5.318 10.938,-9.912 15.132,-15.63401 4.15,-5.656 5.632,-12.712 10.296,-18.166 z"
|
||||
id="path78"
|
||||
style="stroke-width:2" />
|
||||
<path
|
||||
fill="#bf8a24"
|
||||
d="m 306.53575,171.88167 -6.764,-0.428 1.672,-0.284 c -6.714,-7.61 17.512,-9.466 21.164,-11.206 6.186,-2.944 8.754,-8.358 16.164,-11.038 -2.502,2.67 -10.852,4.99 -2.406,7.588 l -0.286,0.044 c 2.342,0.576 6.822,-0.49 7.562,0.282 11.012,-0.444 21.382,3.234 32.396,2.412 -3.822,-2.582 -9.28,-3.286 -13.692,-4.562 l 0.166,-0.49 c 4.176,-1.344 9.568,0.502 13.526,-1.328 2.99,-0.914 6.34,-0.822 9.44,-1.264 43.72,19.62 46.344,31.682 19.526,73.22601 v 0 c -1.554,2.762 -3.848,7.304 -4.686,10.42 l -0.256,0.984 -0.8,0.356 c -0.148,-6.828 6.032,-14.334 5.742,-19.654 3.41,-15.986 -69.354,5.438 -83.98,12.018 -112.918,50.79001 -146.822,194.80204 -68.622,289.88605 2.912,3.538 9.012,12.78601 14.01,12.81601 5.634,0.72 11.242,1.612 16.884,2.268 -0.202,-4.49 -5.588,-11.15401 -7.948,-15.01601 l 0.744,-0.738 c 0.012,-2.102 -1.516,-3.748 -1.268,-5.77 l 0.892,-0.308 c 1.028,2.482 1.052,5.254 3.65,6.816 1.536,3.252 4.578,6.77601 6.57,9.84601 4.044,-3.966 8.118,-7.76801 12.466,-11.40401 1.258,-0.768 2.186,-1.952 3.172,-3.032 1.292,-8.566 1.428,-17.722 1.922,-26.378 -0.138,-1.118 -0.616,-2.868 -0.238,-3.908 l 1.168,0.966 -0.246,-0.612 -0.924,0.544 1.134,-0.23 c 3.66,6.196 9.036,11.464 13.456,17.124 20.682,-19.848 -7.462,-45.92001 -22.146,-59.30801 8.322,2.714 22.978,21.546 26.672,29.42201 2.368,5.048 2.81,14.832 4.236,17.488 3.938,-9.238 -6.242,-21.60201 -4.594,-23.16201 6.228,12.53801 9.19,23.92001 0,35.56001 -11.034,9.136 -29.284,21.156 -36.122,33.99601 -15.95,29.946 -3.004,58.48801 7.948,85.92401 1.766,3.338 5.028,8.098 5.668,11.75001 h -1.106 l -7.45,-10.00201 c -1.728,-2.178 -3.5,-4.33 -5.016,-6.664 -6.324,-4.728 -13.836,-10.324 -21.092,-13.49 -1.626,-0.89 -3.196,-1.934 -4.78,-2.904 -1.312,-1.568 -4.878,-2.91 -6.762,-3.614 -4.274,-4.488 -9.078,-8.416 -13.794,-12.424 -3.644,-3.258 -7.338,-6.40601 -11.126,-9.49601 -9.516,-10.912 -20.848,-17.964 -34.05,-23.62 -3.398,0.208 -6.702,-1.566 -10.05,-2.2 -3.33,-5.012 3.684,-2.256 6.652,-2.44 l 0.66,-0.048 c -1.778,-0.832 -2.898,-1.432 -3.716,-3.304 l 1.262,-2.344 h -1.262 c -2.998,-1.264 -4.654,-5.114 -7.29,-7.02 -3.114,-2.442 -5.858,-6.428 -8.34,-9.526 -7.37,-9.20401 15.16,1.224 16.892,1.472 -1.776,-4.28401 -4.174,-7.85601 -6.946,-11.55201 v 0 c -1.186,-3.19 -1.29,-6.316 -4.994,-7.248 0.668,0.008 0.234,0.036 1.274,-0.272 l -0.462,-1.048 c -0.872,-0.626 -1.716,-1.272 -2.532,-1.97 -2.314,-1.318 -4.576,-1.42 -7.188,-1.558 l 0.348,-0.398 c -4.896,-4.894 -10.688,-6.678 -13.068,-13.884 -0.332,-1.336 -0.206,-2.176 0,-3.506 -1.728,-2.562 -3.144,-5.188 -4.552,-7.934 6.396,4.284 12.98,7.948 19.826,11.44 -2.314,-2.75 -5.832,-4.474 -7.89,-7.506 2.538,0.37 3.676,2.38 5.976,3.28 l 0.342,-0.572 c -0.624,-1.612 -1.632,-2.87 -2.66,-4.248 -3.542,-4.31 -7.944,-7.966 -11.042,-12.63001 -3.934,-4.148 5.086,0.086 6.686,0.158 l 0.092,-0.576 c -1.518,-2.204 -4.56,-4.154 -6.672,-5.856 l -0.106,-0.944 c -3.076,-1.918 -6.968,-4.214 -8.18,-7.788 l 0.58,-0.476 c 2.488,0.156 4.342,1.274 6.51,2.394 1.374,-7.17 -12.154,-7.824 -6.644,-16.822 -1.502,-3.55 -4.188,-6.62 -5.696,-10.326 1.32,0.836 2.69,1.574 4.06,2.326 3.578,-1.614 1.146,-5.134 0.85,-8.024 l 0.786,-0.856 -5.696,-5.592 v -6.18601 c 1.882,1.082 3.774,2.134 5.696,3.148 2.812,-0.066 -2.302,-7.952 -2.684,-9.412 -2.64,-10.138 -2.074,-19.934 1.048,-30.034 3.832,5.794 5.078,12.906 9.37,18.494 0.712,-12.252 -3.732,-16.226 -6.272,-27.338 0.024,1.614 -0.016,2.56 -0.998,3.888 l -1.026,0.056 c -4.328,-4.398 1.136,-23.06401 2.024,-29.02001 0.876,-1.352 0.326,-3.882 1.568,-4.852 l 0.152,2.372 c 1.97,-6.784 0.63,-13.124 1.634,-19.682 0.592,-3.874 3.912,-9.128 5.378,-12.93801 1.064,3.29801 2.95,26.50601 5.008,35.10001 0.6,-13.1 1.002,-26.334 0.64,-39.44401 1.256,-2.66 2.634,-4.674 4.96,-6.498 1.274,-3.458 -0.992,-8.336 1.82,-11.414 1.332,2.548 0.968,5.34 1.658,8.056 l 0.172,0.658 c 2.028,-7.658 5.626,-15.308 9.904,-21.966 -0.606,5.264 -0.152,10.744 0,16.034 0.094,2.884 0.062,5.748 0,8.632 2.508,-3.846 4.092,-8.608 6.946,-12.09 l 0.804,-0.272 c 3.592,-4.722 6.91,-9.126 10.092,-14.184 1.592,-2.504 3.106,-5.054 5.056,-7.3 1.254,-1.746 2.48,-3.488 3.62,-5.31 -4.986,0.096 -6.758,0.72 -6.442,-4.89801 v 0 c -0.608,-1.734 -1.11,-3.236 -2.234,-4.704 0.074,-2.436 3.196,-4.674 5.056,-5.82 1.996,-2.358 2.592,-6.384 6.472,-5.164 5.168,-5.012 8.8,-14.116 16.818,-14.858 0.326,-3.532 2.758,-15.804 7.368,-15.872 l 2.28,3.718 v 2.082 0 c 2.592,-0.354 13.382,-3.338 15.272,-4.588 4.386,-0.624 8.88,-2.052 13.11,-3.378 1.588,-0.816 3.074,-2.294 4.418,-3.494 9.014,-8.06201 20.48,-8.68001 27.53,-13.56001 l 0.042,-1.276 h -2.702 c -7.65,-3.338 -12.068,0.834 -18.448,-0.768 11.644,-3.204 15.88,-5.512 29.284,-7.922 z"
|
||||
id="path79"
|
||||
style="stroke-width:2" />
|
||||
<path
|
||||
fill="#e4c267"
|
||||
d="m 154.48175,356.6817 c 1.552,0.2 3.084,0.076 4.642,0 -0.404,2.63801 -0.692,5.29001 -1.092,7.92601 -1.188,-2.608 -2.544,-5.248 -3.55,-7.92601 z"
|
||||
id="path80"
|
||||
style="stroke-width:2" />
|
||||
<path
|
||||
fill="#e7aa1f"
|
||||
d="m 159.12375,442.51972 c 0.384,2.614 0.992,5.194 1.546,7.778 -3.03,-2.766 -6.444,-5.21 -9.65,-7.778 l 0.538,0.054 c 2.192,0.234 4.934,1.556 6.996,1.18 z"
|
||||
id="path81"
|
||||
style="stroke-width:2" />
|
||||
<path
|
||||
fill="#e7aa1f"
|
||||
d="m 175.47975,498.19573 c 0.814,1.764 4.086,6.738 0,5.588 -2.314,-1.318 -4.576,-1.42 -7.188,-1.558 l 0.348,-0.398 c 2.21,-2.024 4.874,-1.53 6.84,-3.632 z"
|
||||
id="path82"
|
||||
style="stroke-width:2" />
|
||||
<path
|
||||
fill="#ad7214"
|
||||
d="m 155.57175,466.26772 c 9.084,-1.716 12.038,4.78201 11.562,12.49601 l -0.52,0.134 c -3.542,-4.31 -7.944,-7.966 -11.042,-12.63001 z"
|
||||
id="path83"
|
||||
style="stroke-width:2" />
|
||||
<path
|
||||
fill="#e4c267"
|
||||
d="m 155.57175,459.04972 c -3.076,-1.918 -6.968,-4.214 -8.18,-7.788 l 0.58,-0.476 c 2.488,0.156 4.342,1.274 6.51,2.394 2.566,1.4 4.326,3.672 6.188,5.87 1.02,1.764 1.71,3.5 2.37,5.424 -2.364,-1.688 -4.912,-4.152 -7.468,-5.424 z"
|
||||
id="path84"
|
||||
style="stroke-width:2" />
|
||||
<path
|
||||
fill="#d6991c"
|
||||
d="m 180.58775,533.92774 c -3.114,-2.442 -5.858,-6.428 -8.34,-9.526 -7.37,-9.20401 15.16,1.224 16.892,1.472 6.636,13.13 -9.994,0.33 -16.85,-2.24 3.11,3.16 6.322,6.268 8.298,10.294 z"
|
||||
id="path85"
|
||||
style="stroke-width:2" />
|
||||
<path
|
||||
fill="#e4c267"
|
||||
d="m 266.41175,531.65974 c 5.634,0.72 11.242,1.612 16.884,2.268 -0.584,3.624 -3.86,8.832 -5.208,12.668 -3.562,-5.308 -7.8,-9.892 -11.676,-14.936 z"
|
||||
id="path86"
|
||||
style="stroke-width:2" />
|
||||
<path
|
||||
fill="#e4c267"
|
||||
d="m 142.14175,426.03172 c 1.32,0.836 2.69,1.574 4.06,2.326 4.29,3.432 12.174,7.82 12.862,13.616 l 0.06,0.546 -0.57,1.234 c -2.062,0.376 -4.804,-0.946 -6.996,-1.18 l -0.538,-0.054 c -1,-2.096 -2.014,-4.15 -3.182,-6.162 -1.502,-3.55 -4.188,-6.62 -5.696,-10.326 z"
|
||||
id="path87"
|
||||
style="stroke-width:2" />
|
||||
<path
|
||||
fill="#e4c267"
|
||||
d="m 142.14175,407.69971 c 1.882,1.082 3.774,2.134 5.696,3.148 3.018,1.372 5.362,4.13001 7.734,6.39601 0.206,2.976 0.198,5.812 0,8.788 -2.638,-2.122 -5.196,-4.312 -7.734,-6.554 l -5.696,-5.592 z"
|
||||
id="path88"
|
||||
style="stroke-width:2" />
|
||||
<path
|
||||
fill="#f1be39"
|
||||
d="m 155.57175,484.43773 c 2.938,2.218 18.9,12.614 19.908,13.758 -1.966,2.102 -4.63,1.608 -6.84,3.632 -4.896,-4.894 -10.688,-6.678 -13.068,-13.884 -0.332,-1.336 -0.206,-2.176 0,-3.506 z"
|
||||
id="path89"
|
||||
style="stroke-width:2" />
|
||||
<path
|
||||
fill="#e4c267"
|
||||
d="m 303.49575,487.94373 c -0.138,-1.118 -0.616,-2.868 -0.238,-3.908 l 1.168,0.966 -0.246,-0.612 -0.924,0.544 1.134,-0.23 c 3.66,6.196 9.036,11.464 13.456,17.124 -2.234,2.422 -5.066,4.484 -7.648,6.516 -1.722,-5.352 -6.16,-14.438 -4.026,-19.786 l -0.84,-0.608 c -0.8,1.028 -0.922,2.05 -1.224,3.294 z"
|
||||
id="path90"
|
||||
style="stroke-width:2" />
|
||||
<path
|
||||
fill="#f1be39"
|
||||
d="m 343.64175,156.83967 c 11.012,-0.444 21.382,3.234 32.396,2.412 v 0 c 2.758,1.782 6.394,1.874 9.44,3.152 -10.682,1.228 -39.754,-2.68 -41.606,-1.904 0.806,1.616 2.88,2.336 4.224,3.502 l -1.41,0.542 0.34,0.15 -1.298,-0.124 c -4.908,-6.008 -9.214,-5.39 -10.248,-6.48 2.774,-0.232 5.512,-0.324 8.162,-1.25 z"
|
||||
id="path91"
|
||||
style="stroke-width:2" />
|
||||
<path
|
||||
fill="#e7aa1f"
|
||||
d="m 376.03775,152.87167 c 2.99,-0.914 6.34,-0.822 9.44,-1.264 43.72,19.62 46.344,31.682 19.526,73.22601 v 0 c 5.832,-22.874 34.842,-43.05801 -2.732,-64.07601 -11.18,-6.254 -18.164,-10.16 -31.452,-6.352 l -0.424,1.2 -0.404,-0.834 c 3.842,4.244 26.77,7.59 30.22,14.342 -1.308,0.37 -18.904,-9.996 -23.724,-10.5 l -0.45,0.638 v 0 c -3.822,-2.582 -9.28,-3.286 -13.692,-4.562 l 0.166,-0.49 c 4.176,-1.344 9.568,0.502 13.526,-1.328 z"
|
||||
id="path92"
|
||||
style="stroke-width:2" />
|
||||
<path
|
||||
fill="#e4c267"
|
||||
d="m 168.63975,291.53969 c 1.274,-3.458 -0.992,-8.336 1.82,-11.414 1.332,2.548 0.968,5.34 1.658,8.056 l 0.172,0.658 c 2.774,10.994 2.712,19.95201 -1.444,30.43201 -1.604,-9.654 -3.796,-17.92201 -2.206,-27.73201 z"
|
||||
id="path93"
|
||||
style="stroke-width:2" />
|
||||
<path
|
||||
fill="#fade6b"
|
||||
d="m 149.29975,337.4817 c 0.876,-1.352 0.326,-3.882 1.568,-4.852 l 0.152,2.372 c 1.894,5.472 9.814,16.574 8.104,21.68 -1.558,0.076 -3.09,0.2 -4.642,0 -1.126,-2.77 -2.134,-5.716 -3.462,-8.39 -1.878,5.094 -2.658,8.81 -1.72,14.26601 0.024,1.614 -0.016,2.56 -0.998,3.888 l -1.026,0.056 c -4.328,-4.398 1.136,-23.06401 2.024,-29.02001 z"
|
||||
id="path94"
|
||||
style="stroke-width:2" />
|
||||
<path
|
||||
fill="#e4c267"
|
||||
d="m 306.53575,171.88167 -6.764,-0.428 1.672,-0.284 c -6.714,-7.61 17.512,-9.466 21.164,-11.206 6.186,-2.944 8.754,-8.358 16.164,-11.038 -2.502,2.67 -10.852,4.99 -2.406,7.588 l -0.286,0.044 c 2.342,0.576 6.822,-0.49 7.562,0.282 -2.65,0.926 -5.388,1.018 -8.162,1.25 1.034,1.09 5.34,0.472 10.248,6.48 -3.348,-0.918 -27.976,0.078 -32.714,1.348 4.33,2.232 9.916,1.048 14.594,3.258 l 0.012,0.634 c -3.474,2.758 -16.412,2.3 -21.084,2.072 z"
|
||||
id="path95"
|
||||
style="stroke-width:2" />
|
||||
<path
|
||||
fill="#ad7214"
|
||||
d="m 187.87775,540.94774 c 14.452,-1.578 18.17,9.438 25.354,17.744 17.95,20.75601 34.99,32.52001 57.314,46.64401 2.982,1.888 11.55,9.15 14.164,9.758 -0.954,-3.75 -7.964,-27.508 -9.222,-29.136 -2.72,-3.514 -11.288,-7.96801 -15.268,-11.09401 -12.18,-9.558 -46.938,-41.988 -52.316,-57.27201 l 0.808,-0.238 c 9.448,21.46801 48.068,54.83801 66.636,67.04602 1.412,2.178 10.994,29.386 10.588,32.432 -6.324,-4.728 -13.836,-10.324 -21.092,-13.49 -1.626,-0.89 -3.196,-1.934 -4.78,-2.904 -1.312,-1.568 -4.878,-2.91 -6.762,-3.614 -4.274,-4.488 -9.078,-8.416 -13.794,-12.424 -3.644,-3.258 -7.338,-6.40601 -11.126,-9.49601 -9.516,-10.912 -20.848,-17.964 -34.05,-23.62 -3.398,0.208 -6.702,-1.566 -10.05,-2.2 -3.33,-5.012 3.684,-2.256 6.652,-2.44 l 0.66,-0.048 c -1.778,-0.832 -2.898,-1.432 -3.716,-3.304 l 1.262,-2.344 z"
|
||||
id="path96"
|
||||
style="stroke-width:2" />
|
||||
<path
|
||||
fill="#e4c267"
|
||||
d="m 189.13975,540.94774 c 5.534,2.624 11.97,2.904 15.952,8.136 -3.688,-0.196 -7.236,-1.452 -10.76,-2.488 h -2.738 c -1.778,-0.832 -2.898,-1.432 -3.716,-3.304 z"
|
||||
id="path97"
|
||||
style="stroke-width:2" />
|
||||
<path
|
||||
fill="#d6991c"
|
||||
d="m 184.28175,549.08374 c -3.33,-5.012 3.684,-2.256 6.652,-2.44 l 0.66,-0.048 h 2.738 c 3.524,1.036 7.072,2.292 10.76,2.488 1.886,2.01 3.24,4.586 4.692,6.922 -3.318,-1.236 -12.546,-5.238 -15.452,-4.722 v 0 c -3.398,0.208 -6.702,-1.566 -10.05,-2.2 z"
|
||||
id="path98"
|
||||
style="stroke-width:2" />
|
||||
<path
|
||||
fill="#e7aa1f"
|
||||
d="m 184.28175,549.08374 c -3.33,-5.012 3.684,-2.256 6.652,-2.44 l 0.66,-0.048 h 2.738 c -4.344,0.788 -4.744,0.478 -1.17,2.97 l -0.606,-0.004 c -4.844,0.006 -0.282,1.608 1.776,1.722 v 0 c -3.398,0.208 -6.702,-1.566 -10.05,-2.2 z"
|
||||
id="path99"
|
||||
style="stroke-width:2" />
|
||||
<path
|
||||
fill="#d6991c"
|
||||
d="m 228.38175,216.93968 c 0.326,-3.532 2.758,-15.804 7.368,-15.872 l 2.28,3.718 v 2.082 0 c -6.518,12.316 13.27,-2.088 15.158,-2.352 -0.618,2.432 -27.42,25.384 -31.64,31.524 -3.73,5.426 -11.42,18.06801 -16.456,21.65401 1.254,-1.746 2.48,-3.488 3.62,-5.31 -4.986,0.096 -6.758,0.72 -6.442,-4.89801 v 0 c -0.608,-1.734 -1.11,-3.236 -2.234,-4.704 0.074,-2.436 3.196,-4.674 5.056,-5.82 1.996,-2.358 2.592,-6.384 6.472,-5.164 5.168,-5.012 8.8,-14.116 16.818,-14.858 z"
|
||||
id="path100"
|
||||
style="stroke-width:2" />
|
||||
<path
|
||||
fill="#e4c267"
|
||||
d="m 232.69375,222.27368 v 0 c -2.516,5.136 -7.8,8.384 -11.258,12.894 0.908,-3.178 1.606,-7.628 3.46,-10.334 2.71,0.164 5.344,-1.512 7.798,-2.56 z"
|
||||
id="path101"
|
||||
style="stroke-width:2" />
|
||||
<path
|
||||
fill="#e4c267"
|
||||
d="m 205.09175,236.96168 c 1.996,-2.358 2.592,-6.384 6.472,-5.164 -1.882,3.976 -3.154,7.958 -2.26,12.41 l 0.746,0.966 c 1.808,0.074 2.558,-0.808 4.2,-1.294 -0.568,2.526 -3.898,6.34801 -5.538,8.50401 -4.986,0.096 -6.758,0.72 -6.442,-4.89801 v 0 c -0.608,-1.734 -1.11,-3.236 -2.234,-4.704 0.074,-2.436 3.196,-4.674 5.056,-5.82 z"
|
||||
id="path102"
|
||||
style="stroke-width:2" />
|
||||
<path
|
||||
fill="#d6991c"
|
||||
d="m 200.03575,242.78168 c 0.074,-2.436 3.196,-4.674 5.056,-5.82 -1.032,3.436 -2.298,6.974 -2.822,10.524 v 0 c -0.608,-1.734 -1.11,-3.236 -2.234,-4.704 z"
|
||||
id="path103"
|
||||
style="stroke-width:2" />
|
||||
<path
|
||||
fill="#fade6b"
|
||||
d="m 228.38175,216.93968 c 0.326,-3.532 2.758,-15.804 7.368,-15.872 l 2.28,3.718 v 2.082 c -1.486,1.796 -3.142,3.526 -3.43,5.944 4.566,-0.902 8.72,-2.206 13.04,-3.914 -4.882,4.584 -9.786,9.102 -14.946,13.376 v 0 c -2.454,1.048 -5.088,2.724 -7.798,2.56 0.764,-2.614 2.36,-5.384 3.486,-7.894 z"
|
||||
id="path104"
|
||||
style="stroke-width:2" />
|
||||
<path
|
||||
fill="#fade6b"
|
||||
d="m 358.50775,173.44367 c 18.416,-4.38 53.464,-10.342 55.298,16.884 -24.86,0.57 -35.762,0.938 -60.484,4.82201 l -0.202,-0.514 c 1.278,-0.93 3.428,-0.886 4.184,-1.712 6.046,-6.58801 1.738,-6.33201 2.402,-12.86401 0.52,-5.102 6.456,-5.5 -0.302,-6.478 z"
|
||||
id="path105"
|
||||
style="stroke-width:2" />
|
||||
<defs
|
||||
id="defs106">
|
||||
<linearGradient
|
||||
id="gradient_7"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
x1="141.16791"
|
||||
y1="268.56354"
|
||||
x2="265.50784"
|
||||
y2="226.48077"
|
||||
gradientTransform="matrix(2,0,0,2.0000004,-111.74825,-110.67438)">
|
||||
<stop
|
||||
offset="0"
|
||||
stop-color="#E1AF37"
|
||||
id="stop105" />
|
||||
<stop
|
||||
offset="1"
|
||||
stop-color="#FCDE74"
|
||||
id="stop106" />
|
||||
</linearGradient>
|
||||
</defs>
|
||||
<path
|
||||
fill="url(#gradient_7)"
|
||||
d="m 208.71175,517.35373 c -86.018,-118.12402 -12.156,-301.82605 129.714,-339.49006 6.44,-1.71 13.438,-3.836 20.082,-4.42 l 0.896,0.138 c 6.758,0.978 0.822,1.376 0.302,6.478 -0.664,6.532 3.644,6.276 -2.402,12.86401 -0.756,0.826 -2.906,0.782 -4.184,1.712 l 0.202,0.514 c -12.89,3.57 -25.456,7.312 -37.754,12.642 -137.6,59.63401 -168.028,233.46204 -63.62,337.58006 7.44,7.418 16.184,13.6 23.4,21.124 0.094,5.944 0.338,11.96801 0,17.90401 -18.568,-12.20801 -57.188,-45.57801 -66.636,-67.04602 z"
|
||||
id="path106"
|
||||
style="fill:url(#gradient_7);stroke-width:2" />
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 57 KiB |
Reference in New Issue
Block a user