Add initial documentation #255
20 changed files with 3898 additions and 941 deletions
10
CHANGELOG.md
10
CHANGELOG.md
|
|
@ -44,16 +44,6 @@
|
|||
tags that are defined in the server-configuration (the default is False).
|
||||
|
||||
|
||||
# 6.3.0 (2026-06-29)
|
||||
|
||||
## Changes
|
||||
|
||||
- Automated annotation adding in write-record-endpoints has been removed.
|
||||
The new query parameter `add_submission_tag` is added to write-record-endpoints.
|
||||
If set to True, the server will add an automated annotation with the annotation
|
||||
tags that are defined in the server-configuration (the default is False).
|
||||
|
||||
|
||||
# 6.2.2 (2026-06-26)
|
||||
|
||||
## Bugfixes
|
||||
|
|
|
|||
944
README.md
944
README.md
|
|
@ -2,7 +2,25 @@
|
|||
|
||||
[](https://pypi.python.org/pypi/dump-things-service/)
|
||||
|
||||
This is an implementation of a service that allows to store and retrieve data that is structured according to given schemata.
|
||||
This is an implementation of a *Dump Things Service* (DTS). The Dump Things Service
|
||||
is a central component of a self-hostable research information infrastructure, which
|
||||
contains tools to collect, organize, validate, visualize, and serve structured research (meta)data.
|
||||
|
||||
It provides a REST API for storing and retrieving records that are structured
|
||||
according to a schema (defined in LinkML). The service supports multiple storage
|
||||
backends, flexible authentication sources, and a curation workflow for distributed
|
||||
data acquisition.
|
||||
|
||||
It is complemented by a client library and command line tool, which provide convenient
|
||||
access to the service from Python code and the shell
|
||||
[dump-things-pyclient](https://pypi.org/project/dump-things-pyclient/).
|
||||
|
||||
Dump Things Service serves as backend for [shacl-vue](https://www.psychoinformatics.de/instruments/shacl-vue),
|
||||
a generic graphical metadata acquisition tool.
|
||||
|
||||
For more information on the service, see the [documentation](https://dump-things-service.readthedocs.io/).
|
||||
|
||||
### Overview of the service architecture
|
||||
|
||||
Data is stored in **collections**.
|
||||
Each collection has a name and an associated schema.
|
||||
|
|
@ -13,932 +31,10 @@ The service supports schemas that are based on Datalad's *Thing* schema, i.e. on
|
|||
It assumes that the classes of stored records are subclasses of `Thing`, and inherit the properties `pid` and `schema_type` from the `Thing`-baseclass.
|
||||
|
||||
The general workflow in the service is as follows.
|
||||
We distinguish between two areas of a collection, an **incoming** area and a **curated** area.
|
||||
We distinguish between two areas of a collection, an **incoming** area (aka inbox) and a **curated** area.
|
||||
Data written to a collection is stored in a collection-specific **incoming** area.
|
||||
A curation process, which is outside the scope of the service, moves data from the incoming area of a collection to the **curated** area of the collection.
|
||||
|
||||
To submit a record to a collection, a token is required.
|
||||
The token defines read- and write- permissions for the incoming areas of collections and read-permissions for the curated area of a collection.
|
||||
A token can carry permissions for multiple collections.
|
||||
In addition, the token carries a submitter ID.
|
||||
It also defines a token specific **zone** in the incoming area.
|
||||
So any read- and write-operations on an incoming area are actually restricted to the token-specific zone in the incoming area.
|
||||
Multiple tokens can share the same zone.
|
||||
That allows multiple submitters to work together when storing records in the service.
|
||||
|
||||
The service provides an HTTP-based API to store and retrieve data objects, and to verify token capabilities.
|
||||
|
||||
### Installing the service
|
||||
|
||||
The service is available via `pypi`, and can be installed by `pip`.
|
||||
Execute the command `pip install dump-things-service` to install the service.
|
||||
|
||||
|
||||
### Running the service
|
||||
|
||||
After installation the service can be started via the command `dump-things-service`.
|
||||
The basic service configuration is done via command line parameters and configuration files.
|
||||
|
||||
The following command line parameters are supported:
|
||||
|
||||
- `<storage root>`: (mandatory) the path of a directory that serves as anchor for all relative paths given in the configuration files. Unless `-c/--config` is provided, the service will search the configuration file in `<storage root>/.dumpthings.yaml`.
|
||||
|
||||
- `--host <IP-address>`: The IP-address on which the service should accept connections (default: `0.0.0.0`).
|
||||
|
||||
- `--port <port>`: The port on which the service should accept connections (default: `8000`).
|
||||
|
||||
- `-c/--config <config-file>`: provide a path to a configuration file (configuration file version 1).
|
||||
If no dynamically managed configuration is found in the data store, the dynamically managed configuration and the service state will be initialized with the content of the configuration file.
|
||||
This allows an easy transition from dump-things-servers of version 5 and lower to version 6.
|
||||
|
||||
- `--origins <origin>`: add a CORS origin hosts (repeat to add multiple CORS origin URLs).`
|
||||
|
||||
- `--root-path <path>`: Set the ASGI 'root_path' for applications submounted below a given URL path.
|
||||
|
||||
- `--log-level`: set the log level for the service, allowed values are `ERROR`, `WARNING`, `INFO`, `DEBUG`. The default-level is `WARNING`.
|
||||
|
||||
- `--admin-token-hash <shs256 hash as 64-digit hexnumber>`: set an administrator token hash.
|
||||
The plaintext token can be used to create and delete collections, tokens, and admin tokens.
|
||||
This is useful to configure the service if no admin token was yet created.
|
||||
**NOTE**: an admin token in plaintext is read from the environment variable `DTS_ADMIN_TOKEN` if it is set and this option is not provided.
|
||||
|
||||
|
||||
```bash
|
||||
dump-things-service /data-storage/store --host 127.0.0.1 --port 8000
|
||||
```
|
||||
|
||||
The above command runs the service on the network location `127.0.0.1:8000` and provides access to the store under `/data-storage/store`.
|
||||
|
||||
### Configuration file
|
||||
|
||||
The service provides the tool `dump-things-upload-config` which can load configurations from a file and manifest those configurations on a running service via the administration endpoints.
|
||||
|
||||
A configuration defines collections, paths for incoming and curated data for each collection, as well as token properties.
|
||||
Token properties include a submitter identification and for each collection an incoming zone specifier, permissions for reading and writing of the incoming zone and permission for reading the curated data of the collection.
|
||||
|
||||
A "formal" definition of the configuration file is provided by the class `Configuration` in the file `dumpthings-server/abstract_config.py`.
|
||||
|
||||
Configurations are read in YAML format. The following is an example configuration file (version 6 and higher) that illustrates all options:
|
||||
|
||||
```yaml
|
||||
type: collections # has to be "collections"
|
||||
version: 2 # has to be 2
|
||||
|
||||
# All collections are listed in "collections"
|
||||
collections:
|
||||
|
||||
# The following entry defines the collection "personal_records"
|
||||
personal_records:
|
||||
# The token, as defined below, that is used if no token is provided by a client.
|
||||
# All tokens that are provided by the client will be OR-ed with the default token.
|
||||
# That means all permissions in the default token will be added to the client provided
|
||||
# token. In this way the default token will always be less or equally powerful as the
|
||||
# client provided token.
|
||||
default_token: no_access
|
||||
|
||||
# The schema that is used by the collection
|
||||
schema: https://concepts.inm7.de/s/flat-data/unreleased.yaml
|
||||
|
||||
# The path to the curated data of the collection. This path should contain the
|
||||
# ".dumpthings.yaml"-configuration for collections that is described
|
||||
# here: <https://concepts.datalad.org/dump-things-storage-v0/>.
|
||||
# A relative path is interpreted relative to the storage root, which is provided on
|
||||
# service start. An absolute path is interpreted as an absolute path.
|
||||
curated: curated/personal_records
|
||||
|
||||
# The path to the incoming data of the collection.
|
||||
# Different collections should have different curated- and incoming-paths
|
||||
incoming: /tmp/personal_records/incoming
|
||||
|
||||
# Optionally a list of classes that should receive store- or validate-endpoints,
|
||||
# if this list is present, all other classes defined in the schema will be ignored,
|
||||
# i.e., they will not receive store- and validation-endpoints. The classes listed
|
||||
# here must be in the schema.
|
||||
use_classes:
|
||||
- Organization
|
||||
- Person
|
||||
- Project
|
||||
- Agent
|
||||
|
||||
# Optionally a list of classes that will be ignored when store- or validate-endpoints
|
||||
# are created. If `use_classes` is present, the entries of this list will further reduce
|
||||
# the classes that will receive endpoints. If `use_classes` is not present, the entries
|
||||
# of this list will reduce the classes from the schema that will receive endpoints.
|
||||
# The classes listed here must be listed in `use_classes` if that is defined. If
|
||||
# `use_classes` is not defined, they must be listed in the schema.
|
||||
ignore_classes:
|
||||
- Person
|
||||
- Project
|
||||
|
||||
# The following entry defines the collection "rooms_and_buildings"
|
||||
rooms_and_buildings:
|
||||
default_token: basic_access
|
||||
curated: curated/rooms_and_buildings
|
||||
incoming: incoming/rooms_and_buildings
|
||||
|
||||
# The following entry defines the collection "fixed_data", which does not
|
||||
# support data uploading, because there is no token that allows uploads to
|
||||
# "fixed_data".
|
||||
fixed_data:
|
||||
default_token: basic_access
|
||||
# If not upload is supported, the "incoming"-entry is not necessary.
|
||||
curated: curated/fixed_data_curated
|
||||
|
||||
# All tokens are listed in "tokens"
|
||||
tokens:
|
||||
|
||||
# The following entry defines the token "basic_access".
|
||||
basic_access:
|
||||
|
||||
# The representation of the token, this is the value that the user has to
|
||||
# provide in the `x-dumpthings-token`-header to authenticate with this token.
|
||||
representation: anonymous
|
||||
|
||||
# If hashed is `True`, the representation must be a 40-hexdigit number,
|
||||
# representing the hash of the plain token. Setting `hashed` to `True` ensures
|
||||
# that the plain-text token is not stored in the configuration store of the
|
||||
# running server.
|
||||
#
|
||||
# The tool `dump-things-hash-token` can be used to calculate the correct hash.
|
||||
hashed: False
|
||||
|
||||
# The value of "user_id" will be added as an annotation to each record that is
|
||||
# uploaded with this token.
|
||||
user_id: anonymous_user
|
||||
|
||||
# The collections for which the token holds rights are defined in "collections"
|
||||
collections:
|
||||
|
||||
# The rights that "basic_access" carries for the collection "rooms_and_buildings"
|
||||
# are defined here.
|
||||
rooms_and_buildings:
|
||||
# Access modes are defined here:
|
||||
# <https://github.com/christian-monch/dump-things-server/issues/67#issuecomment-2834900042>
|
||||
mode: READ_CURATED
|
||||
|
||||
# A token and collection-specific label, that defines "zones" in which incoming
|
||||
# records are stored. Multiple tokens can share the same zone, for example if
|
||||
# many clients with individual tokens work together to build a collection.
|
||||
# (Since this token does not allow write access, "incoming_label" is ignored. It
|
||||
# is set to an empty string here in order to document it, but it could as well
|
||||
# be omitted)
|
||||
incoming_label: ''
|
||||
|
||||
# The rights that "basic_access" carries for the collection "fixed_data"
|
||||
# are defined here.
|
||||
fixed_data:
|
||||
mode: READ_CURATED
|
||||
incoming_label: ''
|
||||
|
||||
# The following entry defines the token "no_access". This token does not allow
|
||||
# any access and is used as a default token for the collection "personal_records".
|
||||
no_access:
|
||||
|
||||
representation: no_access
|
||||
|
||||
user_id: nobody
|
||||
|
||||
collections:
|
||||
personal_records:
|
||||
mode: NOTHING
|
||||
incoming_label: ''
|
||||
|
||||
# The following entry defines a token with the name "admin_token" and the plain
|
||||
# representation: "admin". It gives full access rights to the collection "personal_records".
|
||||
admin_token:
|
||||
representation: admin
|
||||
user_id: Admin
|
||||
collections:
|
||||
personal_records:
|
||||
mode: WRITE_COLLECTION
|
||||
incoming_label: 'admin_posted_records'
|
||||
|
||||
# The following entry defines the token "contributor_bob". It gives full access
|
||||
# to "rooms_and_buildings" for a user with the id "Bob".
|
||||
contributor_bob:
|
||||
representation: bob
|
||||
user_id: Bob
|
||||
collections:
|
||||
rooms_and_buildings:
|
||||
mode: WRITE_COLLECTION
|
||||
incoming_label: new_rooms_and_buildings
|
||||
|
||||
# The following entry defines the token "contributor_alice". It gives full access
|
||||
# to "rooms_and_buildings" for a user with the id "Alice". Bob and Alice share the
|
||||
# same incoming-zone, i.e. "new_rooms_and_buildings". That means they can read
|
||||
# incoming records that the other one posted.
|
||||
contributor_alice:
|
||||
representation: alice
|
||||
user_id: Alice
|
||||
collections:
|
||||
rooms_and_buildings:
|
||||
mode: WRITE_COLLECTION
|
||||
incoming_label: new_rooms_and_buildings
|
||||
|
||||
# The following entry defines a hashed token because the key `hashed` is set
|
||||
# to `True`. A hashed token representation is the hex-digit representation of
|
||||
# the sha-256 checksum of the plain token.
|
||||
# In this example, if the client presents the token `hello`, he will be
|
||||
# granted access because `dump-things-hash-token 'hello'` yields
|
||||
# `90b1b286043f1b7612e423c74608f5ea2f676340507f0b67219b20d09fc4777b`, i.e.
|
||||
# sha256('hello') == 90b1b286043f1b7612e423c74608f5ea2f676340507f0b67219b20d09fc4777b
|
||||
# is true.
|
||||
hashed_token_1:
|
||||
representation: 90b1b286043f1b7612e423c74608f5ea2f676340507f0b67219b20d09fc4777b
|
||||
hashed: True
|
||||
user_id: Walter
|
||||
collections:
|
||||
rooms_and_buildings:
|
||||
mode: WRITE_COLLECTION
|
||||
incoming_label: bob
|
||||
|
||||
#
|
||||
```
|
||||
|
||||
#### Backends
|
||||
|
||||
The service currently supports the following backends for storing records:
|
||||
- `record_dir`: this backend stores records as YAML-files in a directory structure that is defined [here](https://concepts.datalad.org/dump-things-storage-v0/). It reads the backend configuration from a "record collection configuration file" as described [here](https://concepts.datalad.org/dump-things-storage-v0/).
|
||||
|
||||
- `sqlite`: this backend stores records in a SQLite database. There is an individual database file, named `__sqlite-records.db`, for each curated area and incoming area.
|
||||
|
||||
- `record_dir+stl`: here `stl` stands for "schema-type-layer".
|
||||
This backend stores records in the same format as `record_dir`, but adds special treatment for the `schema_type` attribute in records.
|
||||
It removes `schema_type`-attributes from the top-level mapping of a record before storing it as YAML-file. When records are read from this backend, a `schema_type` attribute is added back into the record, using a schema to determine the correct class-URI.
|
||||
In other words, all records stored with this backend will have no `schema_type`-attribute in the top-level, and all records read with this backend will have a `schema_type` attribute in the top-level.
|
||||
|
||||
- `sqlite+stl`: This backend stores records in the same format as `sqlite`, but adds the same special treatment for the `schema_type` attribute as `record_dir+stl`.
|
||||
|
||||
Backends can be defined per collection in the configuration file.
|
||||
The backend will be used for the curated area and for the incoming areas of the collection.
|
||||
If no backend is defined for a collection, the `record_dir+stl`-backend is used by default.
|
||||
The `+stl`-backends can be useful if an endpoint returns records of multiple classes, because it allows clients to determine the class of each result record.
|
||||
|
||||
The service guarantees that backends of all types can co-exist independently in the same directory, i.e., there are no name collisions in files that are used for different backends (as long as no class name starts with `.` or `_`).
|
||||
|
||||
The following configuration snippet shows how to define a backend for a collection:
|
||||
|
||||
```yaml
|
||||
...
|
||||
collections:
|
||||
collection_with_default_record_dir+stl_backend:
|
||||
# This is a collection with the default backend, i.e. `record_dir+stl` and
|
||||
# the default authentication, i.e. config-based authentication.
|
||||
schema: https://concepts.inm7.de/s/flat-data/unreleased.yaml
|
||||
default_token: anon_read
|
||||
curated: collection_1/curated
|
||||
|
||||
collection_with_forgejo_authentication_source:
|
||||
# This is a collection with the default backend, i.e. `record_dir+stl` and
|
||||
# a forgejo-based authentication source. That means it will use a forgejo
|
||||
# instance to determine the permissions of a token for this collection.
|
||||
# The instance is also used to determine the user-id and the incoming label.
|
||||
# In the case of forgejo, the user-id and the incoming label are the
|
||||
# forgejo login associated with the token.
|
||||
|
||||
# We still need the name of a default token. If the token is defined in this
|
||||
# config file, its properties will be determined by the
|
||||
# config file. If the token is not defined in the config file, its
|
||||
# properties will be determined by the authentication sources. In this
|
||||
# example by the forgejo-instance at `https://forgejo.example.com`.
|
||||
# If there is more than one authentication source, they will be tried
|
||||
# in the order they are defined in the config file.
|
||||
schema: https://concepts.inm7.de/s/flat-data/unreleased.yaml
|
||||
default_token: anon_read # We still need a default token
|
||||
curated: collection_2/curated
|
||||
|
||||
# Token permissions, user-ids (for record annotations), and incoming
|
||||
# label can be determined by multiple authentication sources.
|
||||
# If no source is defined, `config` will be used, which reads token
|
||||
# information from the config file.
|
||||
# This example explicitly defines `config` and a second authentication
|
||||
# source, a `forgejo` authentication source.
|
||||
auth_sources:
|
||||
- type: forgejo # requires `user`-read and `organization`-read permissions on token
|
||||
# The API-URL of the forgejo instance that should be used
|
||||
url: https://forgejo.example.com/api/v1
|
||||
# An organization
|
||||
organization: data_handling
|
||||
# A team in the organization. The authorization of the team
|
||||
# determines the permissions of the token
|
||||
team: data_entry_personal
|
||||
# `label_type` determines how an incoming label is created for
|
||||
# a Forgejo token. If `label_type` is `team`, the incoming label
|
||||
# will be `forgejo-team-<organization>-<team>`. If `label_type`
|
||||
# is `user`, the incoming label will be
|
||||
# `forgejo-user-<user-login>`
|
||||
label_type: team
|
||||
# An optional instance id. This is used to disambiguate identical
|
||||
# user IDs on different Forgejo instances. If not set, a hash of
|
||||
# `url` will be used instead.
|
||||
instance_id: forgejo-server-1
|
||||
# An optional repository. The token will only be authorized
|
||||
# if the team has access to the repository. Note: if `repository`
|
||||
# is set, the token must have at least repository read
|
||||
# permissions.
|
||||
repository: reference-repository
|
||||
|
||||
# Fallback to the config file.
|
||||
- type: config # check tokens from the configuration file
|
||||
|
||||
# Multiple authorization sources are allowed. They will be tried in the
|
||||
# order defined in the config file. If an authorization source returns
|
||||
# permissions for a token, those permissions will be used and no other
|
||||
# authorization sources will be queried.
|
||||
# The default authorization source is `config`, which reads the token
|
||||
# permissions, user-id, and incoming from the config file.
|
||||
|
||||
collection_with_explicit_record_dir+stl_backend:
|
||||
schema: https://concepts.inm7.de/s/flat-data/unreleased.yaml
|
||||
default_token: anon_read
|
||||
curated: collection_3/curated
|
||||
backend:
|
||||
# The record_dir+stl backend is identified by the
|
||||
# type: "record_dir+stl". No more attributes are
|
||||
# defined for this backend.
|
||||
type: record_dir+stl
|
||||
|
||||
collection_with_sqlite_backend:
|
||||
schema: https://concepts.inm7.de/s/flat-data/unreleased.yaml
|
||||
default_token: anon_read
|
||||
curated: collection_4/curated
|
||||
backend:
|
||||
# The sqlite-backend is identified by the
|
||||
# type: "sqlite". It requires a schema attribute
|
||||
# that holds the URL of the schema that should
|
||||
# be used in this backend.
|
||||
type: sqlite
|
||||
```
|
||||
|
||||
#### Reserved names
|
||||
|
||||
The following collection names are reserved and must not be used:
|
||||
|
||||
- collections
|
||||
- tokens
|
||||
- admin_tokens
|
||||
- __dump_things__
|
||||
|
||||
|
||||
#### Authentication and authorization
|
||||
|
||||
To authenticate and authorize a user based on tokens, dumpthing-service uses
|
||||
authentication sources. There are currently two authentication sources: the
|
||||
configuration file and a Forgejo-based authentication source. Authentication
|
||||
sources can be configured per collection. If no authentication source is
|
||||
configured, the collection uses the configuration file.
|
||||
|
||||
If authentication sources are configured, they will be tried in order until
|
||||
a token is authenticated. If an authentication source is listed twice, the
|
||||
second instance will be ignored.
|
||||
|
||||
Authentication sources can be defined individually for each collection.
|
||||
The collection-level key `auth_sources` should contain a list of authentication source configurations.
|
||||
Authentication sources are tried in order until a token is successfully authenticated.
|
||||
If no authentication source authenticates the token, the token will be rejected.
|
||||
|
||||
If no authentication source is defined, the configuration file will be used to authenticate tokens.
|
||||
If an identical authentication source is defined multiple times, the first instance will be queried, all other instances will be ignored.
|
||||
Authentication sources are identical if the content of their keys match.
|
||||
If an identical authentication source is listed multiple time in the configuration, the service will issue a warning about `Ignoring duplicate authentication provider...`.
|
||||
|
||||
These authentication sources are available:
|
||||
|
||||
- config: use the configuration file to authenticate tokens
|
||||
- forgejo: use a Forgejo-instance to authenticate tokens
|
||||
|
||||
All authentication source configurations contain the key `type`.
|
||||
Additional keys are authentication source type-specific.
|
||||
|
||||
The following configuration snippet contains an example for authentication
|
||||
source configuration:
|
||||
|
||||
```yaml
|
||||
collections:
|
||||
collection_with_config_and_forgejo_auth_sources:
|
||||
# Token permissions, user-ids (for record annotations), and incoming
|
||||
# label can be determined by multiple authentication sources.
|
||||
# If no source is defined, `config` will be used, which reads token
|
||||
# information from the config file.
|
||||
# This example explicitly defines `config` and a second authentication
|
||||
# source, a `forgejo` authentication source.
|
||||
auth_sources:
|
||||
- type: forgejo # requires `user`-read and `organization`-read permissions on token
|
||||
# The API-URL of the forgejo instance that should be used
|
||||
url: https://forgejo.example.com/api/v1
|
||||
# An organization
|
||||
organization: data_handling
|
||||
# A team in the organization. The authorization of the team
|
||||
# determines the permissions of the token
|
||||
team: data_entry_personal
|
||||
# `label_type` determines how an incoming label is created for
|
||||
# a Forgejo token. If `label_type` is `team`, the incoming label
|
||||
# will be `forgejo-team-<organization>-<team>`. If `label_type`
|
||||
# is `user`, the incoming label will be
|
||||
# `forgejo-user-<user-login>`
|
||||
label_type: team
|
||||
# An optional repository. The token will only be authorized
|
||||
# if the team has access to the repository. Note: if `repository`
|
||||
# is set, the token must have at least repository read
|
||||
# permissions.
|
||||
repository: reference-repository
|
||||
|
||||
# Fallback to the config file.
|
||||
- type: config # check tokens from the configuration file
|
||||
|
||||
# Multiple authorization sources are allowed. They will be tried in the
|
||||
# order defined in `auth_sources`. If an authorization source returns
|
||||
# permissions for a token, those permissions will be used and no other
|
||||
# authorization sources will be queried.
|
||||
# The default authorization source is `config`, which reads the token
|
||||
# permissions, user-id, and incoming from the config file.
|
||||
|
||||
...
|
||||
|
||||
```
|
||||
|
||||
|
||||
##### Config-based authentication
|
||||
|
||||
```yaml
|
||||
collections:
|
||||
collection_with_config_authentication:
|
||||
default_token: anon_read
|
||||
curated: collection_5/curated
|
||||
auth_sources:
|
||||
- type: <must be 'config'> # check tokens from the configuration file
|
||||
|
||||
...
|
||||
```
|
||||
The configuration file will be used to authenticate tokens
|
||||
|
||||
|
||||
##### Forgejo-based authentication
|
||||
|
||||
```yaml
|
||||
collections:
|
||||
collection_with_forgejo_authentication:
|
||||
default_token: anon_read
|
||||
curated: collection_5/curated
|
||||
auth_sources:
|
||||
- type: <must be 'forgejo'>
|
||||
url: <Forgejo API-URL>
|
||||
organization: <organization name>
|
||||
team: <team_name>
|
||||
label_type: <'team' or 'user'>
|
||||
repository: <repository name> # Optional
|
||||
...
|
||||
```
|
||||
|
||||
The defined Forgejo-instance will be used to authenticate a token
|
||||
|
||||
The user ID is the email of the user.
|
||||
|
||||
If `label_type` is set to `team`, the incoming label is `forgejo-team-<organization-name>-<team-name>`.
|
||||
If `label_type` is set to `user`, the incoming label is `forgejo-user-<user-login>`
|
||||
|
||||
The permissions will be fetched from the units `repo.code` and `repo.actions` of the team definition.
|
||||
The following mapping is used:
|
||||
|
||||
| `repo.code` | curated_read | incoming_read | incoming_write | curated_right | zones_access |
|
||||
|-------------|--------------|---------------|----------------|---------------|--------------|
|
||||
| `none` | `False` | `False` | `False` | `False` | `False` |
|
||||
| `read` | `True` | `True` | `False` | `False` | `False` |
|
||||
| `write` | `True` | `True` | `True` | `False` | `False` |
|
||||
|
||||
|
||||
| `repo.actions` | curated_read | incoming_read | incoming_write | curated_right | zones_access |
|
||||
|----------------|--------------|---------------|----------------|---------------|--------------|
|
||||
| `none` | `False` | `False` | `False` | `False` | `False` |
|
||||
| `read` | `False` | `False` | `False` | `False` | `False` |
|
||||
| `write` | `True` | `True` | `True` | `True` | `True` |
|
||||
|
||||
A Forgejo authentication source can authenticate Forgejo-tokens that have at least the following `Read`-permissions:
|
||||
|
||||
- User: this is required to determine user-related information, i.e. user-email and user login name.
|
||||
- Organization: this is required to determine the membership of a user to a team in an organization.
|
||||
- (Only if `repository` is set in the configuration) Repository : required to determine a team's access to the repository.
|
||||
|
||||
|
||||
#### Submission annotation tag
|
||||
|
||||
The service annotates submitted records with a submitter id and a timestamp.
|
||||
Annotations consist of an annotation tag, defining the class of the annotation, and an annotation value.
|
||||
By default the service will use the class `http://purl.obolibrary.org/obo/NCIT_C54269` for the submitter id and the class `http://semanticscience.org/resource/SIO_001083` for submission time.
|
||||
(Both tags will be converted into CURIEs if the schema of the collection defines an appropriate prefix.)
|
||||
|
||||
The default annotation tag classes can be overridden in the configuration on a per collection basis.
|
||||
To override the defaults tags, add a `submission_tags`-attribute to a collection definition.
|
||||
The `submission_tags`-attribute should contain a mapping that maps either `submitter_id_tag`, or `submitter_time_tag` or both to an IRI or a CURIE.
|
||||
If the schema defines a matching prefix, IRIs are automatically converted to CURIEs before storing the record.
|
||||
If a tag is given as a CURIE, the service validates that the prefix of the CURIE is defined in the schema of the collection.
|
||||
|
||||
```yaml
|
||||
type: collections
|
||||
version: 1
|
||||
collections:
|
||||
collection_1:
|
||||
default_token: basic_access
|
||||
curated: curated
|
||||
incoming: contributions
|
||||
submission_tags:
|
||||
submitter_id_tag: schema:user_id
|
||||
submission_time_tag: schema:time
|
||||
|
||||
...
|
||||
|
||||
```
|
||||
|
||||
#### Audit Backends
|
||||
|
||||
The service supports audit-logs of changes that are made via the curation interface.
|
||||
Audit logs are configured per collection via the key `audit-backends`.
|
||||
The key expects a list of audit-backend configurations.
|
||||
Currently the only supported audit-backend type is `gitaudit`:
|
||||
|
||||
```yaml
|
||||
type: collections
|
||||
version: 1
|
||||
collections:
|
||||
collection_1:
|
||||
|
||||
...
|
||||
|
||||
audit_backends:
|
||||
- type: gitaudit
|
||||
path: <path to directory>
|
||||
auto_flush_timeout: <seconds>
|
||||
...
|
||||
```
|
||||
Here `<path to directory>` must be a path to a directory.
|
||||
If the directory does not exist, it will be created.
|
||||
If the directory exists, it should contain a bare git repository.
|
||||
|
||||
If `auto_flush_timeout` seconds have passed without adding new audit log entries, the current changeset is persisted, resulting in a commit.
|
||||
The default value for `auto_flush_timeout` is 60 seconds. The value must not be lower than `1`.
|
||||
|
||||
The command `dump-things-gitaudit-report <path to directory> <PID-pattern>` can be used to show the audit-log for all PIDs that match the given `PID`-pattern (pattern are in python `re`-module syntax, i.e. use `'.*'` to report changes for all PIDs).
|
||||
Each log entry contains the timestamp of the change, the ID of the curator that posted the change, a diff of the change, and the resulting record.
|
||||
|
||||
The command `dump-things-gitaudit-rebuild-index <path to directory>` can be used to rebuild an index for a git-audit backend.
|
||||
Executing this command should not be necessary in normal operations because the backend will rebuild an index if it is instantiated on a directory that has no index.
|
||||
The command mainly exists for maintenance purposes.
|
||||
|
||||
Note: currently the user ID of the curator will be stored as author in the audit-log entries.
|
||||
The "original" author of a change is usually identified in the `annotations`-field of the record.
|
||||
|
||||
|
||||
### Endpoints
|
||||
|
||||
Most endpoints require a *collection*. These correspond to the names of the "data record collection"-directories (for example `myschema-v3-fmta` in [Dump Things Service](https://concepts.datalad.org/dump-things-storage-v0/)) in the stores.
|
||||
|
||||
The service provides the following user endpoints (In addition to user endpoints, there exist endpoints for curators. To view them, check the `/docs`-path in an installed service):
|
||||
|
||||
- `POST /maintenance`: this endpoint allows to set a collection into maintenance mode.
|
||||
In maintenance mode, only tokens with curator-privileges can access the collection.
|
||||
The posted data is a JSON that contains the name of the collection and whether the maintenance state should be active or not, for example:
|
||||
```json
|
||||
{
|
||||
"collection": "collection_1",
|
||||
"active": true
|
||||
}
|
||||
```
|
||||
|
||||
|
||||
- `POST /<collection>/record/<class>`: an object of type `<class>` (defined by the schema associated with `<collection>`) can be posted to this endpoint.
|
||||
It will be stored in the incoming area for this collection and the user defined by the provided token.
|
||||
In order to `POST` an object to the service, you MUST provide a valid token in the HTTP-header `X-DumpThings-Token` with write permissions.
|
||||
The endpoint supports the query parameter `format`, to select the format of the posted data.
|
||||
It can be set to `json` (the default) or to `ttl` (Terse RDF Triple Language, a.k.a. Turtle).
|
||||
If the `json`-format is selected, the content-type should be `application/json`.
|
||||
If the `ttl`-format is selected, the content-type should be `text/turtle`.
|
||||
The service supports extraction of inlined records as described in [Dump Things Service](https://concepts.datalad.org/dump-things-storage-v0/).
|
||||
On success, the endpoint will return a list of all stored records.
|
||||
The list may contain more than one record if the posted object contains inlined records.
|
||||
|
||||
- `POST /<collection>/validate/record/<class>`: an object of type `<class>` (defined by the schema associated with `<collection>`) can be posted to this endpoint.
|
||||
It will validate the posted data.
|
||||
In order to `POST` an object to the service, you MUST provide a valid token in the HTTP-header `X-DumpThings-Token` with write permissions.
|
||||
The endpoint supports the query parameter `format`, to select the format of the posted data.
|
||||
It can be set to `json` (the default) or to `ttl` (Terse RDF Triple Language, a.k.a. Turtle).
|
||||
If the `json`-format is selected, the content-type should be `application/json`.
|
||||
If the `ttl`-format is selected, the content-type should be `text/turtle`.
|
||||
The service supports extraction of inlined records as described in [Dump Things Service](https://concepts.datalad.org/dump-things-storage-v0/).
|
||||
On success, the endpoint will return a list of all stored records.
|
||||
The list may contain more than one record if the posted object contains inlined records.
|
||||
|
||||
- `GET /<collection>/records/<class>`: retrieve all readable objects from collection `<collection>` that are of type `<class>` or any of its subclasses.
|
||||
Objects are readable if the default token or the token provided has the permission to read the objects in the collection.
|
||||
Objects from incoming spaces will take precedence over objects from curated spaces, i.e. if there are two objects with identical `pid` in the curated space and in the incoming space, the object from the incoming space will be returned.
|
||||
The endpoint supports the query parameter `format`, which determines the format of the query result.
|
||||
It can be set to `json` (the default) or to `ttl`,
|
||||
The endpoint supports the query parameter `matching`, which is interpreted by `sqlite`-backends and ignored by `record_dir`-backends.
|
||||
If given, the endpoint will only return records for which the JSON-string representation matches the `matching` parameter.
|
||||
Matching supports the wildcard character `%` which matches any characters.
|
||||
For example, to search for `Alice` anywhere in the JSON-string representation of the record the matching parameter should be set to `%Alice%` or `%alice%` (matching is not case-sentitive).
|
||||
The result is a list of JSON-records or ttl-strings, depending on the selected format.
|
||||
|
||||
- `GET /<collection>/records/p/<class>`: this endpoint (ending on `.../p/<class>`) provides the same functionality as the endpoint `GET /<collection>/records/<class>` (without `.../p/...`) but supports result pagination. In addition to the query parameters `format` and `matching`, it supports the query parameters `page` and `size`.
|
||||
The `page`-parameter defines the page number to retrieve, starting with 1.
|
||||
The `size`-parameter defines how many records should be returned per page.
|
||||
If no `size`-parameter is given, the default value of 50 is used.
|
||||
Each response will also contain the total number of records and the total number of pages in the result.
|
||||
The response is a JSON object with the following structure:
|
||||
```json
|
||||
{
|
||||
"items": [ <JSON-record or ttl-string> ],
|
||||
"total": <total number of records in the result>,
|
||||
"page": <current page number>,
|
||||
"size": <number of records per page>,
|
||||
"pages": <number of pages in the result>
|
||||
}
|
||||
```
|
||||
|
||||
- `GET /<collection>/record?pid=<pid>`: retrieve an object with the pid `<pid>` from the collection `<collection>` if the provided token allows reading. If the provided token allows reading of incoming and curated spaces, objects from incoming spaces will take precedence.
|
||||
The endpoint supports the query parameter `format`, which determines the format of the query result.
|
||||
It can be set to `json` (the default) or to `ttl`,
|
||||
|
||||
|
||||
- `GET /server`: this endpoint provides information about the server.
|
||||
The response is a JSON object with the following structure:
|
||||
```json
|
||||
{
|
||||
"version": "<version of the server>",
|
||||
"collections": [
|
||||
{
|
||||
"name": "collection_1",
|
||||
"schema": "https://example.org/schema_1.yaml",
|
||||
"classes": [
|
||||
"Thing",
|
||||
"Agent",
|
||||
"InstantaneousEvent",
|
||||
"Person"
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "collection_2",
|
||||
"schema": "https://example.org/schema_2.yaml"
|
||||
"classes": [
|
||||
"Thing",
|
||||
"AnnotationTag",
|
||||
"Organization",
|
||||
"Person"
|
||||
]
|
||||
}
|
||||
]
|
||||
}
|
||||
```
|
||||
|
||||
|
||||
- `GET /<collection>/records/`: retrieve all readable objects from collection `<collection>`.
|
||||
Objects are readable if the default token or the token provided has the permission to read the objects in the collection.
|
||||
Objects from incoming spaces will take precedence over objects from curated spaces, i.e. if there are two objects with identical `pid` in the curated space and in the incoming space, the object from the incoming space will be returned.
|
||||
The endpoint supports the query parameter `format`, which determines the format of the query result.
|
||||
It can be set to `json` (the default) or to `ttl`,
|
||||
The endpoint supports the query parameter `matching`, which is interpreted by `sqlite`-backends and ignored by `record_dir`-backends.
|
||||
If given, the endpoint will only return records for which the JSON-string representation matches the `matching` parameter.
|
||||
The result is a list of JSON-records or ttl-strings, depending on the selected format.
|
||||
|
||||
|
||||
- `GET /<collection>/records/p/`: this endpoint (ending on `.../p/`) provides the same functionality as the endpoint `GET /<collection>/records/` (without `.../p/`) but supports result pagination. In addition to the query parameters `format` and `matching`, it supports the query parameters `page` and `size`.
|
||||
The `page`-parameter defines the page number to retrieve, starting with 1.
|
||||
The `size`-parameter defines how many records should be returned per page.
|
||||
If no `size`-parameter is given, the default value of 50 is used.
|
||||
Each response will also contain the total number of records and the total number of pages in the result.
|
||||
The response is a JSON object with the following structure:
|
||||
```json
|
||||
{
|
||||
"items": [ <JSON-record or ttl-string> ],
|
||||
"total": <total number of records in the result>,
|
||||
"page": <current page number>,
|
||||
"size": <number of records per page>,
|
||||
"pages": <number of pages in the result>
|
||||
}
|
||||
```
|
||||
|
||||
|
||||
- `DELETE /<collection>/record?pid=<pid>`: delete an object with the pid `<pid>` from the incoming area of the collection `<collection>` if the provided token allows writing to the incoming area.
|
||||
The result is either `True` if the object was deleted or `False` if the object did not exists or was not deleted.
|
||||
|
||||
|
||||
- `GET /docs`: provides information about the service's API, i.e. about all endpoints.
|
||||
|
||||
#### Curation endpoints
|
||||
|
||||
The service supports a set of curation endpoints that allows direct access to the curated area as well as the incoming areas.
|
||||
A `CURATOR`-token required to access these endpoints.
|
||||
Details about the curation endpoints can be found in [this issue](https://codeberg.org/datalink/dump-things-server/issues/118).
|
||||
|
||||
|
||||
#### Administration endpoints
|
||||
|
||||
Operations on the endpoints described in this section require an administrator token.
|
||||
If desired, use `dump-things-upload-config` to read the configuration from a file and
|
||||
generate respective POST-requests. `dump-things-upload-config` can also be used to
|
||||
generate a configuration from an old, i.e. dump-things version < 6, configuration file.
|
||||
|
||||
##### Collections
|
||||
|
||||
- `POST /collections`: create a new collection from the posted configuration object.
|
||||
For a specification of the configuration object see the object `CollectionRequest` in the file `dump_things_service/collection_endpoints.py`
|
||||
(Use `dump-things-upload-config` to read the configuration from a file and generate respective POST-requests)
|
||||
|
||||
- `GET /collections`: get information about the currently existing collections.
|
||||
|
||||
- `GET /collections/<collection-name>`: get information about the collection with name `<collection-name>`.
|
||||
|
||||
- `DELETE /collections/<collection-name>`: delete the collection with the given name.
|
||||
Note: deleting a collection does not delete any records or any storage dir, it just removes the
|
||||
collection from the internal state of the service. Recreating it (via `POST /collections`) will make
|
||||
all data reachable again through the Web-API.
|
||||
|
||||
|
||||
##### Tokens
|
||||
|
||||
- `POST /tokens`: create a new token from the posted configuration object.
|
||||
For a specification of the configuration object see the object `TokenRequest` in the file `dump_things_service/token_endpoints.py`
|
||||
NOTE: Before a token for configuration can be generated, the collection must exist.
|
||||
|
||||
- `GET /tokens`: get information about the currently existing tokens.
|
||||
|
||||
- `GET /tokens/<token-name>`: get information about the token with name `<token-name>`.
|
||||
|
||||
- `DELETE /tokens/<token-name>`: delete the token with the given name.
|
||||
|
||||
- this endpoint (ending on `.../p/`) provides the same functionality as the endpoint `GET /<collection>/records/` (without `.../p/`) but supports result pagination. In addition to the query parameters `format` and `matching`, it supports the query parameters `page` and `size`.
|
||||
|
||||
|
||||
##### Admin Tokens
|
||||
|
||||
- `POST /admin_tokens`: create a new admin token from the posted configuration object.
|
||||
For a specification of the configuration object see the object `AdminTokenRequest` in the file `dump_things_service/token_endpoints.py`
|
||||
Note that admin token are always stored as hashed values.
|
||||
Therefore the representation in the request should be `sha256(<plain-admin-token>)`
|
||||
|
||||
- `GET /admin_tokens`: get information about the currently existing admin tokens.
|
||||
|
||||
- `GET /admin_tokens/<token-name>`: get information about the admin token with name `<token-name>`.
|
||||
|
||||
- `DELETE /admin_tokens/<token-name>`: delete the admin token with the given name.
|
||||
|
||||
|
||||
|
||||
### Tips & Tricks
|
||||
|
||||
|
||||
#### Using the same backend for incoming and curated areas
|
||||
|
||||
The service can be configured in such a way that incoming records are immediately available in the curated area.
|
||||
To achieve this, the final path of the incoming zone must be the same as the curated area, for example:
|
||||
|
||||
```yaml
|
||||
type: collections
|
||||
version: 1
|
||||
|
||||
collections:
|
||||
datamgt:
|
||||
default_token: anon_read
|
||||
curated: datamgt/curated
|
||||
incoming: datamgt
|
||||
|
||||
tokens:
|
||||
anon_read: # The name of the token (serves also as representation if no representation is defines)
|
||||
user_id: anonymous
|
||||
collections:
|
||||
datamgt: # per collection token configuration; contains:
|
||||
mode: READ_CURATED # - token mode
|
||||
incoming_label: "" # - the label for the incoming area for this token and this collection, i.e., collection: "datamgt".
|
||||
|
||||
trusted-submitter-token:
|
||||
user_id: trusted_submitter
|
||||
representation: 00112233445566778899aabbccdd # The representation that the client has to send in an `x-dumpthings-token`-header (if not given, the token name will be the representation)
|
||||
collections:
|
||||
datamgt:
|
||||
mode: WRITE_COLLECTION
|
||||
incoming_label: "curated"
|
||||
```
|
||||
In this example the curated area is `datamgt/curated` and the incoming area for the token `trusted-submitter-token` is `datamgt` plus the incoming zone `curated`, i.e., `datamgt/curated` which is exactly the curated area defined for `collection_1`.
|
||||
|
||||
#### Migrating from `record_dir` (or `record_dir+stl`) to `sqlite`
|
||||
|
||||
The command `dump-things-copy-store` can be used to copy a collection from a `record_dir` (or `record_dir+stl`) store to a `sqlite` store.
|
||||
The command expects a source and a destination store. Both are given in the format `<backend>:<directory-path>`, where `<backend>` is one of `record_dir`, `record_dir+stl`, `sqlite`, or `sqlite+stl`, and `<path>` is the path to the directory of the store.
|
||||
|
||||
For example, to migrate a collection from a `record_dir`-backend at the directory `<path-to-data>/penguis/curated` to a `sqlite` backend in the same directory, the following command can be used:
|
||||
```bash
|
||||
> dump-things-copy-store \
|
||||
record_dir:<path-to-data>/penguis/curated \
|
||||
sqlite:<path-to-data>/penguis/curated
|
||||
```
|
||||
|
||||
For example, to migrate from a `record_dir+stl` backend, the command is similar, but a schema has to be supplied via the `-s/--schema` command line parameter. For example:
|
||||
```bash
|
||||
> dump-things-copy-store \
|
||||
--schema https://concepts.inm7.de/s/flat-data/unreleased.yaml \
|
||||
record_dir+stl:<path-to-data>/penguis/curated \
|
||||
sqlite:<path-to-data>/penguis/curated
|
||||
```
|
||||
(Note: a `record_dir:<path>` can be used to copy without the schema type layer from a `record_dir+stl` backend. But in this case the copied records will not have a `schema_type` attribute, because the `record_dir` backend does not "put it back in", unlike a `record_dir+stl` backend.)
|
||||
|
||||
If the source backend is a `record_dir` or `record_dir+stl` backend, and the store was manually modified outside the service (for example, by adding or removing files), it is recommended to run the command `dump-things-rebuild-index` on the source store before copying. This ensures that the index is up to date and all records will be copied.
|
||||
|
||||
If any backend is a `record_dir+stl` backend, a schema has to be supplied via the `-s/--schema` command line parameter. The schema is used to determine the `schema_type` attribute of the records that are copied.
|
||||
|
||||
|
||||
### Maintenance commands
|
||||
|
||||
- `dump-things-rebuild-index`: this command rebuilds the persistent index of a `record_dir`store. This should be done after the `record_dir` store was modified outside the service, for example, by manually adding or removing files in the directory structure of the store.
|
||||
|
||||
- `dump-things-copy-store`: this command copies a collection that is stored in a source store to a destination store. For example, to copy a collection from a `record_dir` store at the directory `<path-to-data>/penguis/curated` to a `sqlite` store in the same directory, the following command can be used:
|
||||
```bash
|
||||
> dump-things-copy-store \
|
||||
record_dir:<path-to-data>/penguis/curated \
|
||||
sqlite:<path-to-data>/penguis/curated
|
||||
```
|
||||
The copy command will add the copied records to any existing records in the destination store.
|
||||
Note: when records are copied from a `record-dir` store, the index is used to locate the records in the source store. If the index is not up-to-date, some records may not be copied. To ensure all records are copied, it is recommended to run `dump-things-rebuild-index` on the source store before copying.
|
||||
|
||||
- `dump-things-pid-check`: this command checks the pids in all collections of a store to verify that they can be resolved (if they are in CURIE form).
|
||||
This is useful to validate the proper definition of prefixes after schema-changes.
|
||||
|
||||
- `dump-things-create-merged-schema`: this command creates a new schema that statically contains all schemas that the original schema imports.
|
||||
The new schema is fully self-contained and does not reference any other schemas.
|
||||
|
||||
- `dump-things-hash-token`: this command will generate a hash from a plain-text token that can be used with the `--admin-token-hash` option.
|
||||
(one could also use the shell command `sha256sum` to generate the hash, but using `dump-things-hash-token` will ensure that the right hash algorithm is used)
|
||||
|
||||
|
||||
### Migrate to version 6
|
||||
|
||||
Migration to version 6 is simple. It involves the following steps:
|
||||
|
||||
1. Stop the old server
|
||||
2. Upgrade the server to version 6
|
||||
3. Set an admin token. This can be done in one of two ways:
|
||||
- provide an administrator token in hashed format on the command line
|
||||
with the additional option `--admin-token-hash`. `dump-things-hash-token` can
|
||||
be used to generate the hash from a plain-text token.
|
||||
- Set the environment variable `DTS_ADMIN_TOKEN` to a plain-text token.
|
||||
**Note**: if the command line option is provided, it takes precedence over
|
||||
the environment variable.
|
||||
4. Start the new server with the same path to the store as before.
|
||||
|
||||
At this point the service should be running and be configured exactly as
|
||||
before. The configuration is persisted in the configuration database and will
|
||||
be established next time the service starts. If desired, the `--config`-option
|
||||
can be removed from the command line, because the configuration is now
|
||||
persisted in the configuration database and will be loaded from there on startup.
|
||||
|
||||
NOTE: if the server should not be initialized from an existing default
|
||||
configuration file, i.e., the file `<store-root>/.dumpthings.yaml`, use the
|
||||
option `--ignore-default-config-file`. If this option is provided and no
|
||||
`-c/--config`-option is provided the server will start with an "empty"
|
||||
configuration, i.e., without any collections or non-admin tokens.
|
||||
|
||||
|
||||
### If things go wrong
|
||||
|
||||
#### Delete a record manually
|
||||
|
||||
If a schema is changed, for example a prefix-definition changed, the service may not be able to delete a record anymore.
|
||||
In this case, the record can be deleted manually if you have access to the storage root.
|
||||
|
||||
To delete the record, open a shell and navigate (`cd`) to the directory where the store is located.
|
||||
The location can be determined from the configuration file.
|
||||
Depending on the storage backend, the subsequent steps are different.
|
||||
|
||||
##### `record-dir` backend
|
||||
|
||||
Delete the record from disk by removing it, e.g. `rm -f <path-to-record>`
|
||||
|
||||
Run the command `dump-things-rebuild-index`
|
||||
|
||||
##### `sqlite` backend
|
||||
|
||||
Run the command:
|
||||
|
||||
```bash
|
||||
> sqlite3 __sqlite-records.db
|
||||
```
|
||||
|
||||
If you know the pid of the record you want to delete, enter the following on the prompt to delete the record with pid `some-pid`:
|
||||
|
||||
```sql
|
||||
> delete from thing where json_extract(thing.object, '$.pid') = 'some-pid';
|
||||
```
|
||||
|
||||
If you know the IRI of the record you want to delete, enter the following on the prompt to delete the record with IRI `some-iri`:
|
||||
|
||||
```sql
|
||||
> delete from thing where iri = 'some-iri';
|
||||
```
|
||||
|
||||
|
||||
|
||||
### Requirements
|
||||
|
||||
The service requires sqlite3.
|
||||
|
||||
|
||||
## Acknowledgements
|
||||
|
||||
|
|
|
|||
|
|
@ -3,8 +3,8 @@
|
|||
|
||||
# You can set these variables from the command line, and also
|
||||
# from the environment for the first two.
|
||||
SPHINXOPTS ?= --fail-on-warning
|
||||
SPHINXBUILD ?= sphinx-build
|
||||
SPHINXOPTS ?=
|
||||
SPHINXBUILD ?= /home/cristian/Develop/dump-things-service/.venv/bin/sphinx-build
|
||||
SOURCEDIR = .
|
||||
BUILDDIR = _build
|
||||
|
||||
|
|
|
|||
165
docs/authentication.rst
Normal file
165
docs/authentication.rst
Normal file
|
|
@ -0,0 +1,165 @@
|
|||
Authentication & Authorization
|
||||
================================
|
||||
|
||||
The service uses *authentication sources* to authenticate and authorize clients.
|
||||
Each collection can have its own list of authentication sources.
|
||||
|
||||
Authentication Sources
|
||||
-----------------------
|
||||
|
||||
Authentication sources are tried in the order they are listed for a collection.
|
||||
If an authentication source authenticates the token successfully, no further
|
||||
sources are queried. If no source is defined for a collection, the
|
||||
``config``-source is used, i.e., tokens are read directly from the configuration.
|
||||
|
||||
If the same authentication source is listed more than once, the duplicate entries
|
||||
are ignored and a warning ``Ignoring duplicate authentication provider...`` is
|
||||
logged.
|
||||
|
||||
Available Sources
|
||||
^^^^^^^^^^^^^^^^^
|
||||
|
||||
The following authentication source types are available:
|
||||
|
||||
``config``
|
||||
Reads token information directly from the persisted configuration.
|
||||
This is the default source.
|
||||
|
||||
``forgejo``
|
||||
Uses a `Forgejo <https://forgejo.org/>`_ instance to authenticate tokens
|
||||
and to determine the user ID and the incoming label.
|
||||
|
||||
|
||||
Configuring Authentication Sources
|
||||
------------------------------------
|
||||
|
||||
Authentication sources are configured per collection via the ``auth_sources``
|
||||
key:
|
||||
|
||||
.. code-block:: yaml
|
||||
|
||||
collections:
|
||||
my_collection:
|
||||
default_token: anon_read
|
||||
curated: my_collection/curated
|
||||
auth_sources:
|
||||
- type: forgejo
|
||||
url: https://forgejo.example.com/api/v1
|
||||
organization: data_handling
|
||||
team: data_entry_personal
|
||||
label_type: team
|
||||
repository: reference-repository # optional
|
||||
- type: config
|
||||
|
||||
|
||||
Config-based Authentication
|
||||
^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
|
||||
No extra keys are required beyond ``type: config``.
|
||||
|
||||
.. code-block:: yaml
|
||||
|
||||
auth_sources:
|
||||
- type: config
|
||||
|
||||
|
||||
Forgejo-based Authentication
|
||||
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
|
||||
The Forgejo source uses the Forgejo REST API to validate tokens and determine
|
||||
permissions. This allows clients to use Forgejo personal access tokens to
|
||||
authenticate with the service.
|
||||
|
||||
This is an example configuration for a Forgejo source:
|
||||
|
||||
.. code-block:: yaml
|
||||
|
||||
collections:
|
||||
my_collection:
|
||||
auth_sources:
|
||||
- type: forgejo
|
||||
url: https://forgejo.example.com/api/v1
|
||||
organization: data_handling
|
||||
team: data_entry_personal
|
||||
label_type: team
|
||||
repository: reference-repository # optional
|
||||
instance_id: example_com
|
||||
|
||||
The keys are:
|
||||
|
||||
``type``
|
||||
Must be ``forgejo``.
|
||||
|
||||
``url``
|
||||
The API URL of the Forgejo instance, e.g. ``https://forge.example.com/api/v1``.
|
||||
|
||||
``organization``
|
||||
The name of the Forgejo organization that is used to determine the permissions of the token.
|
||||
|
||||
``team``
|
||||
The name of the team inside the organization that is used to determine the permissions of the token.
|
||||
|
||||
``label_type``
|
||||
Either ``team`` or ``user``. Determines the incoming label format.
|
||||
|
||||
If `label_type` is set to `team`, the incoming label is `forgejo-team-<organization-name>-<team-name>`.
|
||||
|
||||
If `label_type` is set to `user`, the incoming label is `forgejo-user-<user-login>`
|
||||
|
||||
|
||||
``repository`` (optional)
|
||||
If set, the token is only authorized if the team has access to this
|
||||
repository.
|
||||
|
||||
``instance_id`` (optional)
|
||||
Optional identifier to disambiguate users on different Forgejo instances.
|
||||
Defaults to a hash of ``url``.
|
||||
|
||||
|
||||
When a Forgejo source authenticates a token, the user ID is set to the email of the Forgejo user.
|
||||
|
||||
The permissions will be fetched from the units `repo.code` and `repo.actions` of the team definition.
|
||||
The following mapping is used:
|
||||
|
||||
============ ============ ============= ============== ============= ============
|
||||
`repo.code`: curated_read incoming_read incoming_write curated_write zones_access
|
||||
============ ============ ============= ============== ============= ============
|
||||
`none` `False` `False` `False` `False` `False`
|
||||
`read` `True` `True` `False` `False` `False`
|
||||
`write` `True` `True` `True` `False` `False`
|
||||
============ ============ ============= ============== ============= ============
|
||||
|
||||
|
||||
=============== ============ ============= ============== ============= ============
|
||||
`repo.actions`: curated_read incoming_read incoming_write curated_write zones_access
|
||||
=============== ============ ============= ============== ============= ============
|
||||
`none` `False` `False` `False` `False` `False`
|
||||
`read` `False` `False` `False` `False` `False`
|
||||
`write` `True` `True` `True` `True` `True`
|
||||
=============== ============ ============= ============== ============= ============
|
||||
|
||||
|
||||
|
||||
A Forgejo authentication source can authenticate Forgejo-tokens that have at
|
||||
least the following `Read`-permissions:
|
||||
|
||||
- **User**: this is required to determine user-related information, i.e. user-email and user login name.
|
||||
- **Organization**: this is required to determine the membership of a user to a team in an organization.
|
||||
- **Repository** (Only if `repository` is set in the configuration): required to determine a team's access to the repository.
|
||||
|
||||
|
||||
Incoming Label Generation
|
||||
''''''''''''''''''''''''''
|
||||
|
||||
The ``label_type`` key controls how the incoming label is derived:
|
||||
|
||||
- ``team`` → ``forgejo-<instance_id or URL-hash>-team-<organization>-<team>``
|
||||
- ``user`` → ``forgejo-<instance_id or URL-hash>-user-<user-login>``
|
||||
|
||||
|
||||
|
||||
|
||||
Administrator Tokens
|
||||
---------------------
|
||||
|
||||
Administrator tokens are always authenticated using the persisted configuration.
|
||||
71
docs/backends.rst
Normal file
71
docs/backends.rst
Normal file
|
|
@ -0,0 +1,71 @@
|
|||
Storage Backends
|
||||
================
|
||||
|
||||
The service supports multiple storage backends. A backend can be configured
|
||||
per collection in the configuration file. If no backend is defined for a
|
||||
collection, ``record_dir+stl`` is used by default.
|
||||
|
||||
Available Backends
|
||||
------------------
|
||||
|
||||
``record_dir``
|
||||
Stores records as YAML files in a directory structure defined by
|
||||
`Dump Things Storage v0 <https://concepts.datalad.org/dump-things-storage-v0/>`_.
|
||||
Reads the backend configuration from a *record collection configuration file*
|
||||
as described in the same specification.
|
||||
|
||||
``record_dir+stl`` *(default)*
|
||||
Same as ``record_dir``, but adds a **schema-type layer** (STL):
|
||||
|
||||
- ``schema_type`` attributes are stripped from the top-level mapping of a
|
||||
record before it is stored.
|
||||
- When a record is read back, a ``schema_type`` attribute is re-inserted
|
||||
using the schema to determine the correct class URI.
|
||||
|
||||
This is useful when endpoints return records of multiple classes, because
|
||||
clients can determine the class of each record from the ``schema_type``
|
||||
attribute.
|
||||
|
||||
``sqlite``
|
||||
Stores records in a SQLite database. One database file named
|
||||
``__sqlite-records.db`` is created per curated/incoming area.
|
||||
``sqlite``-backends have the advantage that they support search patterns
|
||||
to limit the size of a result on the server.
|
||||
|
||||
``sqlite+stl``
|
||||
Same as ``sqlite``, but with the same schema-type layer as
|
||||
``record_dir+stl``.
|
||||
|
||||
.. note::
|
||||
|
||||
``record_dir`` and ``sqlite`` backends can co-exist independently in the same
|
||||
directory. There are no file-name collisions between backends, as long as no
|
||||
class name starts with ``.`` or ``__``.
|
||||
|
||||
|
||||
Configuring a Backend
|
||||
---------------------
|
||||
|
||||
Specify the backend in the collection configuration with the ``backend`` key:
|
||||
|
||||
.. code-block:: yaml
|
||||
|
||||
collections:
|
||||
my_collection:
|
||||
schema: https://example.org/schema.yaml
|
||||
default_token: anon_read
|
||||
curated: my_collection/curated
|
||||
|
||||
backend:
|
||||
type: record_dir+stl # explicit default
|
||||
|
||||
.. code-block:: yaml
|
||||
|
||||
collections:
|
||||
another_collection:
|
||||
schema: https://example.org/schema.yaml
|
||||
default_token: anon_read
|
||||
curated: another_collection/curated
|
||||
|
||||
backend:
|
||||
type: sqlite
|
||||
5
docs/changelog.rst
Normal file
5
docs/changelog.rst
Normal file
|
|
@ -0,0 +1,5 @@
|
|||
Changelog
|
||||
=========
|
||||
|
||||
.. include:: ../CHANGELOG.md
|
||||
:parser: myst_parser.sphinx_
|
||||
198
docs/commands.rst
Normal file
198
docs/commands.rst
Normal file
|
|
@ -0,0 +1,198 @@
|
|||
Command-Line Tools
|
||||
==================
|
||||
|
||||
The package installs the following command-line tools.
|
||||
|
||||
Service Commands
|
||||
----------------
|
||||
|
||||
dump-things-service
|
||||
^^^^^^^^^^^^^^^^^^^
|
||||
|
||||
Start the Dump Things Service.
|
||||
|
||||
.. code-block:: text
|
||||
|
||||
dump-things-service [OPTIONS] <storage-root>
|
||||
|
||||
**Arguments**
|
||||
|
||||
``<storage-root>``
|
||||
(Mandatory) Path to the directory used as anchor for all relative paths in
|
||||
the configuration.
|
||||
|
||||
**Options**
|
||||
|
||||
.. option:: --host <IP-address>
|
||||
|
||||
IP address on which the service should accept connections.
|
||||
Default: ``0.0.0.0``.
|
||||
|
||||
.. option:: --port <port>
|
||||
|
||||
Port on which the service should accept connections. Default: ``8000``.
|
||||
|
||||
.. option:: -c, --config <config-file>
|
||||
|
||||
Path to a configuration file. If no persisted configuration is found in the
|
||||
data store, the service is initialized with the content of this file.
|
||||
Useful for migrating from service version <= 5 to version 6.
|
||||
|
||||
.. option:: --origins <origin>
|
||||
|
||||
Add a CORS origin host. Repeat to add multiple CORS origin URLs.
|
||||
|
||||
.. option:: --root-path <path>
|
||||
|
||||
Set the ASGI ``root_path`` for applications mounted below a given URL path.
|
||||
|
||||
.. option:: --log-level <LEVEL>
|
||||
|
||||
Log level. Allowed values: ``ERROR``, ``WARNING``, ``INFO``, ``DEBUG``.
|
||||
Default: ``WARNING``.
|
||||
|
||||
.. option:: --admin-token-hash <sha256-hex>
|
||||
|
||||
Set an administrator token hash (64-digit hexadecimal SHA-256 hash of the
|
||||
plain-text token). If not provided, a plain-text token is read from the
|
||||
environment variable ``DTS_ADMIN_TOKEN``, if it is set.
|
||||
|
||||
.. option:: --ignore-default-config-file
|
||||
|
||||
If set, the service will not try to initialize itself from the default
|
||||
configuration file ``<storage-root>/.dumpthings.yaml``. Otherwise, if no
|
||||
persisted configuration is found in the data store (and ``-c/--config`` is
|
||||
not provided), the service will read its initial configuration from
|
||||
``<storage-root>/.dumpthings.yaml`` if it exists.
|
||||
|
||||
|
||||
**Example**
|
||||
|
||||
.. code-block:: bash
|
||||
|
||||
dump-things-service /data/store --host 127.0.0.1 --port 8000
|
||||
|
||||
|
||||
Configuration Tools
|
||||
-------------------
|
||||
|
||||
dump-things-upload-config
|
||||
^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
|
||||
Read a configuration from a dump-things configuration-file and
|
||||
instantiate its elements on a running server via the administration
|
||||
endpoints. Objects that already exist on the server are left unchanged.
|
||||
|
||||
An admin token has to be provided in the environment variable
|
||||
``DTS_ADMIN_TOKEN``.
|
||||
|
||||
.. code-block:: text
|
||||
|
||||
dump-things-upload-config [OPTIONS] <config-file (json or YAML)>
|
||||
|
||||
**Options**
|
||||
|
||||
.. option:: --server <URL>
|
||||
|
||||
Base URL of the running service (e.g. ``http://127.0.0.1:8000``).
|
||||
|
||||
.. option:: --format [{json,yaml}], -f [{json,yaml}]
|
||||
|
||||
Specify the format of the input file. Possible values are `json` and `yaml`. If this option is given, the suffix of the configuration file is ignored.
|
||||
|
||||
.. option:: --send-to SEND_TO
|
||||
|
||||
The base URL of the server API. If this option is provided, the configuration will be sent to the server API, otherwise it will just be written to stdout.
|
||||
|
||||
.. option:: --old-format
|
||||
|
||||
If provided, assume that the configuration is in version 1 format and convert it to the new format internally (in version 1: tokens had no `hashed`-attribute and no `representation`-attribute, the token representation was the key of the token configuration, collections had no `schema`-attribute, and `sqlite`-backends had a `schema`-attribute).
|
||||
|
||||
.. option:: --store STORE
|
||||
|
||||
If --old-format is provided, this option can be used to specify a store directory. The store directory will be used to load `RecordDir` configurations, if a collection defines are `RecordDir`-backend. (This option has no effect if no collection in the old configuration uses a `RecordDir`-backend.)
|
||||
|
||||
|
||||
dump-things-download-config
|
||||
^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
|
||||
Read the current configuration from a running service and write it to a file.
|
||||
|
||||
An admin token has to be provided in the environment variable
|
||||
``DTS_ADMIN_TOKEN``.
|
||||
|
||||
.. code-block:: text
|
||||
|
||||
dump-things-download-config [OPTIONS] <server API URL>
|
||||
|
||||
**Options**
|
||||
|
||||
.. option:: --entities {admin_tokens,collections,tokens}, -e {admin_tokens,collections,tokens}
|
||||
|
||||
Specify for which entities the configuration should be downloaded. Possible values are `admin_tokens`, `collections`, or `tokens` (repeat to download configuration for more than one entity). If this option is not provided, configurations for all entities will be downloaded.
|
||||
|
||||
.. option:: --format [{json,yaml}], -f [{json,yaml}]
|
||||
|
||||
Specify the format of the output. Possible values are `json` and `yaml` (the default is `yaml`).
|
||||
|
||||
|
||||
dump-things-hash-token
|
||||
^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
|
||||
Compute the SHA-256 hash of a plain-text token for use with ``--admin-token-hash`` or as ``representation``-value in a configuration object (file)
|
||||
|
||||
.. code-block:: bash
|
||||
|
||||
dump-things-hash-token <plain-text-token>
|
||||
|
||||
|
||||
|
||||
|
||||
Maintenance Tools
|
||||
-----------------
|
||||
|
||||
dump-things-pid-check
|
||||
^^^^^^^^^^^^^^^^^^^^^^
|
||||
|
||||
Check all PIDs in a store to verify they can be resolved (useful after
|
||||
schema changes that affect prefix definitions).
|
||||
|
||||
.. code-block:: bash
|
||||
|
||||
dump-things-pid-check <path-to-store>
|
||||
|
||||
|
||||
|
||||
Audit Tools
|
||||
-----------
|
||||
|
||||
dump-things-gitaudit-report
|
||||
^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
|
||||
Report the audit information that was stored for all PIDs matching a pattern.
|
||||
For every change to a record the tool will report: time stamp, user ID, diff, and the resulting record.
|
||||
|
||||
.. code-block:: bash
|
||||
|
||||
dump-things-gitaudit-report <path-to-audit-dir> <pid-pattern>
|
||||
|
||||
``<pid-pattern>`` is a Python ``re``-module pattern that identifies PIDs of the record for
|
||||
which audit information should be reported. Use ``'.*'`` to report changes for all PIDs.
|
||||
|
||||
Each log entry contains:
|
||||
|
||||
- Timestamp of the change.
|
||||
- Curator ID.
|
||||
- Diff of the change.
|
||||
- The resulting record.
|
||||
|
||||
|
||||
dump-things-gitaudit-rebuild-index
|
||||
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
|
||||
Rebuild the index for a ``gitaudit`` backend. Normally not required in
|
||||
regular operations; useful for maintenance.
|
||||
|
||||
.. code-block:: bash
|
||||
|
||||
dump-things-gitaudit-rebuild-index <path-to-audit-dir>
|
||||
42
docs/conf.py
42
docs/conf.py
|
|
@ -3,14 +3,22 @@
|
|||
# For the full list of built-in configuration values, see the documentation:
|
||||
# https://www.sphinx-doc.org/en/master/usage/configuration.html
|
||||
|
||||
from __future__ import annotations
|
||||
|
||||
import os
|
||||
import sys
|
||||
|
||||
sys.path.insert(0, os.path.abspath('.'))
|
||||
sys.path.insert(0, os.path.abspath('..'))
|
||||
|
||||
# -- Project information -----------------------------------------------------
|
||||
# https://www.sphinx-doc.org/en/master/usage/configuration.html#project-information
|
||||
|
||||
import dump_things_service
|
||||
|
||||
project = 'dump-things-server'
|
||||
project = 'dump-things-service'
|
||||
copyright = '2025-2026, Christian Mönch'
|
||||
author = 'Christian Mönch'
|
||||
author = 'Christian Mönch and'
|
||||
release = dump_things_service.__version__
|
||||
|
||||
# -- General configuration ---------------------------------------------------
|
||||
|
|
@ -21,6 +29,9 @@ extensions = [
|
|||
'sphinx.ext.autodoc',
|
||||
'sphinx_autodoc_typehints',
|
||||
'sphinx.ext.viewcode',
|
||||
'sphinx.ext.intersphinx',
|
||||
'sphinx.ext.napoleon',
|
||||
'myst_parser',
|
||||
]
|
||||
|
||||
templates_path = ['_templates']
|
||||
|
|
@ -29,9 +40,30 @@ exclude_patterns = ['_build', 'Thumbs.db', '.DS_Store']
|
|||
primary_domain = 'py'
|
||||
autoclass_content = "both"
|
||||
|
||||
# autodoc settings
|
||||
autodoc_default_options = {
|
||||
'members': True,
|
||||
'undoc-members': True,
|
||||
'show-inheritance': True,
|
||||
}
|
||||
autosummary_generate = True
|
||||
|
||||
typehints_use_signature = True
|
||||
typehints_use_signature_return = True
|
||||
|
||||
# Napoleon settings (Google/NumPy style docstrings)
|
||||
napoleon_google_docstring = True
|
||||
napoleon_numpy_docstring = True
|
||||
|
||||
# MyST settings (Markdown support)
|
||||
myst_enable_extensions = ['colon_fence']
|
||||
|
||||
# Intersphinx mapping
|
||||
intersphinx_mapping = {
|
||||
'python': ('https://docs.python.org/3', None),
|
||||
'pydantic': ('https://docs.pydantic.dev/latest/', None),
|
||||
}
|
||||
|
||||
# we build some docstrings from loguru. define some no-op substitutions
|
||||
# to avoid errors
|
||||
rst_prolog = """
|
||||
|
|
@ -46,3 +78,9 @@ rst_prolog = """
|
|||
|
||||
html_theme = 'sphinx_rtd_theme'
|
||||
html_static_path = ['_static']
|
||||
|
||||
# RTD theme options
|
||||
html_theme_options = {
|
||||
'navigation_depth': 4,
|
||||
'titles_only': False,
|
||||
}
|
||||
|
|
|
|||
399
docs/configuration.rst
Normal file
399
docs/configuration.rst
Normal file
|
|
@ -0,0 +1,399 @@
|
|||
Configuration
|
||||
=============
|
||||
|
||||
|
||||
General Concepts
|
||||
----------------
|
||||
|
||||
Each Dump Things Service instance maintains a persistent configuration. The
|
||||
configuration is stored in a private area of the *storage root* and will be
|
||||
loaded when a Dump Things Service instance is started.
|
||||
|
||||
|
||||
Providing an initial configuration
|
||||
..................................
|
||||
If the persistent configuration is empty, for example, because the service is
|
||||
started on an empty ``<storage root>``, an initial configuration can be
|
||||
provided by configuration files:
|
||||
|
||||
1. via a configuration file in ``<storage root>/.dumpthings.yaml``, or
|
||||
|
||||
2. a configuration file can be passed to the command line with the ``-c/--config``
|
||||
option.
|
||||
|
||||
|
||||
|
||||
Performing dynamic configuration changes
|
||||
........................................
|
||||
|
||||
Every Dump Things Service instance (since version 6) supports dynamic
|
||||
reconfiguration via administration API endpoints. That means, a server can be
|
||||
started with an empty configuration and the configuration can be modified at
|
||||
runtime.
|
||||
|
||||
If a Dump Things Service instance is started with an empty configuration,
|
||||
the command line option ``--admin-token-hash`` has to be provided.
|
||||
This option will establish a "bootstrap" administrator token in the
|
||||
Dump Things Server instance that can be used to access the
|
||||
administration endpoints.
|
||||
|
||||
Note: the bootstrap administrator token does not become part of the persisted
|
||||
configuration. That means, it will not be represented in a configuration dump,
|
||||
i.e., in the result of ``GET /admin_tokens``.
|
||||
|
||||
|
||||
|
||||
Elements of the configuration
|
||||
-----------------------------
|
||||
|
||||
Dump Things Service instances have three main configuration elements:
|
||||
|
||||
- Collections
|
||||
- Tokens
|
||||
- Administrator Tokens
|
||||
|
||||
|
||||
A Dump Things Service instance has administration endpoints for all three
|
||||
configuration elements, which allow to create, modify, and delete
|
||||
these elements. Any change to the configuration is persisted immediately and
|
||||
will be effective for all subsequent requests to the service.
|
||||
|
||||
All configuration changes are audited (see :doc:`audit` for details). The
|
||||
audit log is stored in the storage root at the path
|
||||
``<storage root>/__dumpthings__/config_audit``.
|
||||
|
||||
|
||||
|
||||
Configuration modification model
|
||||
--------------------------------
|
||||
|
||||
A Dump Things Service instance maintains an internal representation of the
|
||||
current configuration. The persistent configuration is kept up-to-date with
|
||||
the internal configuration.
|
||||
|
||||
If, for example, a collection is added via the administration
|
||||
interface, the service will add the collection to its internal configuration
|
||||
representation. It will then persist the new configuration and updated its
|
||||
internal state to "activate" the new configuration.
|
||||
|
||||
In other words if the administrator interface is used to add a collection, a
|
||||
token, or an administrator-token, the element will be added to the already
|
||||
existing configuration elements. If an element is removed via the administration
|
||||
interface, this element will be removed from the internal configuration, while
|
||||
all other configuration elements remain unchanged.
|
||||
|
||||
To determine the current configuration of the service, the administrator API
|
||||
provides endpoints to read collection configurations, token configurations, and
|
||||
admin token configurations.
|
||||
|
||||
To modify an existing configuration element, the administrator can fetch its
|
||||
current state, modify it, and ``PUT`` it back to the service.
|
||||
|
||||
The tool ``dump-things-download-config`` (see :doc:`commands`) can be used to
|
||||
fetch the current configuration of a running Dump Things Service instance and
|
||||
write it to a configuration file (see :ref:`config_file:`). This file can be
|
||||
used, for example, to create a Dump Things Service with an identical
|
||||
configuration at another location.
|
||||
|
||||
|
||||
For a detailed description of the configuration endpoints see :doc:`endpoints`.
|
||||
|
||||
|
||||
.. _config_file:
|
||||
Configuration File Structure
|
||||
-----------------------------
|
||||
|
||||
A configuration file (version 2) has the following top-level structure:
|
||||
|
||||
.. code-block:: yaml
|
||||
|
||||
type: collections # must be "collections"
|
||||
version: 2 # must be 2
|
||||
|
||||
collections:
|
||||
<collection-name>:
|
||||
...
|
||||
|
||||
tokens:
|
||||
<token-name>:
|
||||
...
|
||||
|
||||
admin_tokens:
|
||||
<admin-token-name>:
|
||||
...
|
||||
|
||||
|
||||
|
||||
Collections
|
||||
-----------
|
||||
|
||||
Each entry under ``<collection-name>`` defines a collection. The following keys
|
||||
are supported:
|
||||
|
||||
``schema`` (required)
|
||||
URL of the `LinkML <https://linkml.io>`_ schema for this collection.
|
||||
|
||||
``default_token`` (required)
|
||||
Name of the token to use when no token is provided by a client. All
|
||||
permissions in the default token are OR-ed with any client-provided token.
|
||||
|
||||
Note: a token of the given name must be defined in the ``tokens`` section
|
||||
of the configuration file. At least the default token must be created before
|
||||
a collection can be created. Although tokens reference collections, tokens
|
||||
can always be created because their creation does check whether referenced
|
||||
collections exist yet.
|
||||
|
||||
``curated`` (required)
|
||||
Path to the curated area of the collection. This should be a relative path,
|
||||
which will be interpreted relative to the storage root.
|
||||
|
||||
``incoming`` (required if tokens with write access exist for the collection)
|
||||
Path to the incoming area. Required if the collection has any tokens with
|
||||
write access associated to it.
|
||||
This should be a relative path, which will be interpreted relative to the
|
||||
storage root.
|
||||
|
||||
``backend`` (optional)
|
||||
Storage backend configuration. If omitted, ``record_dir+stl`` is used.
|
||||
See :doc:`backends` for details.
|
||||
|
||||
``use_classes`` (optional)
|
||||
List of LinkML class names that should receive store/validate endpoints
|
||||
(the classes must be subclasses of ``Thing``). All other classes defined
|
||||
in the schema are ignored.
|
||||
|
||||
``ignore_classes`` (optional)
|
||||
List of LinkML class names to exclude from store/validate endpoints
|
||||
(the classes must be subclasses of ``Thing``).
|
||||
|
||||
``auth_sources`` (optional)
|
||||
List of authentication source configurations. See :doc:`authentication`.
|
||||
|
||||
``submission_tags`` (optional)
|
||||
Tags for an optional automated annotation of submitted records (see
|
||||
`Submission Annotation Tags`_ below).
|
||||
|
||||
``audit_backends`` (optional)
|
||||
List of audit-backend configurations. See `Audit Backends`_ below.
|
||||
|
||||
|
||||
Example
|
||||
^^^^^^^
|
||||
|
||||
.. code-block:: yaml
|
||||
|
||||
collections:
|
||||
personal_records:
|
||||
default_token: no_access
|
||||
schema: https://concepts.datalad.org/s/demo-research-information/unreleased.yaml
|
||||
curated: curated
|
||||
incoming: incoming
|
||||
use_classes:
|
||||
- Organization
|
||||
- Person
|
||||
- Project
|
||||
|
||||
|
||||
Authentication Sources
|
||||
^^^^^^^^^^^^^^^^^^^^^^
|
||||
|
||||
Authentication configuration is described in :doc:`authentication`. If no
|
||||
authentication sources are defined for a collection, a ``config`` source is
|
||||
used by default, that means, the service will use the tokens that are
|
||||
configured in the configuration file.
|
||||
|
||||
|
||||
|
||||
Submission Annotation Tags
|
||||
^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
|
||||
The service might annotate uploaded records with a submitter ID and a
|
||||
submission time (version below 6 will always annotate submitted records,
|
||||
version 6 and higher will only annotate submitted records, if the query
|
||||
parameter ``add_submission_tag`` is set to ``true``.
|
||||
|
||||
By default, the following tags are used for submission annotation:
|
||||
|
||||
- Submitter ID: ``http://purl.obolibrary.org/obo/NCIT_C54269``
|
||||
- Submission time: ``http://semanticscience.org/resource/SIO_001083``
|
||||
|
||||
Override these defaults per collection with ``submission_tags``:
|
||||
|
||||
.. code-block:: yaml
|
||||
|
||||
collections:
|
||||
collection_1:
|
||||
...
|
||||
submission_tags:
|
||||
submitter_id_tag: schema:user_id
|
||||
submission_time_tag: schema:time
|
||||
|
||||
|
||||
Audit Backends
|
||||
^^^^^^^^^^^^^^
|
||||
|
||||
The service supports audit logs of changes made via the curation interface.
|
||||
Configure them per collection with ``audit_backends``:
|
||||
|
||||
.. code-block:: yaml
|
||||
|
||||
collections:
|
||||
collection_1:
|
||||
...
|
||||
audit_backends:
|
||||
- type: gitaudit
|
||||
path: /path/to/audit-log-dir
|
||||
auto_flush_timeout: 60 # seconds (default: 60, minimum: 1)
|
||||
|
||||
Currently the only supported audit backend type is ``gitaudit``. A ``gitaudit``
|
||||
backend stores changes in a bare Git repository at ``path``.
|
||||
After ``auto_flush_timeout`` seconds without new entries the current changeset
|
||||
is committed.
|
||||
|
||||
|
||||
Use ``dump-things-gitaudit-report`` to display the audit log and
|
||||
``dump-things-gitaudit-rebuild-index`` to rebuild its index (see :doc:`commands`).
|
||||
|
||||
|
||||
|
||||
Collection-and-Token: a Chicken-and-Egg Problem
|
||||
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
|
||||
In configuration files, collections reference tokens and tokens reference collections.
|
||||
This can create a chicken-and-egg problem when creating new collection and
|
||||
new tokens dynamically. This is resolved by allowing tokens to refer to
|
||||
collections that are not created. In other words:
|
||||
|
||||
Create tokens first, then create collections.
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
Reserved Collection Names
|
||||
^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
|
||||
The following collection names are reserved and must **not** be used:
|
||||
|
||||
- ``api``
|
||||
- ``collections``
|
||||
- ``tokens``
|
||||
- ``admin_tokens``
|
||||
- ``__dump_things__``
|
||||
|
||||
|
||||
|
||||
Tokens
|
||||
------
|
||||
|
||||
Each entry under ``tokens`` defines a token. The following keys are supported:
|
||||
|
||||
``representation`` (required)
|
||||
The plain-text value the client must supply in the ``X-DumpThings-Token``
|
||||
HTTP header. If ``hashed`` is ``True`` this must be the SHA-256 hex digest
|
||||
of the plain-text token.
|
||||
|
||||
``hashed`` (optional, default: ``False``)
|
||||
If ``True``, the representation is treated as a SHA-256 hash.
|
||||
Use the command ``dump-things-hash-token`` (see :doc:commands) to compute the correct hash.
|
||||
|
||||
``user_id`` (required)
|
||||
An identifier that is added as an annotation to each uploaded record.
|
||||
|
||||
``collections`` (required)
|
||||
Mapping from collection name to per-collection rights.
|
||||
|
||||
|
||||
Per-collection rights
|
||||
^^^^^^^^^^^^^^^^^^^^^
|
||||
|
||||
Each collection entry inside a token has:
|
||||
|
||||
``mode``
|
||||
Access mode. Available modes (in the following list "own incoming area"
|
||||
refers to the incoming area that is associated with the token and the
|
||||
collection):
|
||||
|
||||
- ``NOTHING`` – no access.
|
||||
- ``READ_CURATED`` – read the curated area only.
|
||||
- ``READ_COLLECTION`` – read curated data and own incoming area.
|
||||
- ``WRITE_COLLECTION`` – read curated data, read own incoming area, write to own incoming area.
|
||||
- ``READ_SUBMISSIONS`` - read own incoming area.
|
||||
- ``WRITE_SUBMISSIONS`` – read and write own incoming area.
|
||||
- ``SUBMIT`` - read curated area only, write to own incoming area.
|
||||
- ``SUBMIT_ONLY`` - write to own incoming area.
|
||||
- ``CURATOR`` - curator-level access: read & write to curated area, read & write to all incoming areas.
|
||||
|
||||
|
||||
``incoming_label``
|
||||
Label that defines the subdirectory (aka zone) in the incoming area for this token and collection.
|
||||
Multiple tokens can share the same label, which means they share a zone.
|
||||
|
||||
Example
|
||||
^^^^^^^
|
||||
|
||||
.. code-block:: yaml
|
||||
|
||||
tokens:
|
||||
basic_access:
|
||||
representation: anonymous
|
||||
hashed: False
|
||||
user_id: anonymous_user
|
||||
collections:
|
||||
rooms_and_buildings:
|
||||
mode: READ_CURATED
|
||||
incoming_label: ''
|
||||
|
||||
contributor_bob:
|
||||
representation: bob
|
||||
user_id: Bob
|
||||
collections:
|
||||
rooms_and_buildings:
|
||||
mode: WRITE_COLLECTION
|
||||
incoming_label: new_rooms_and_buildings
|
||||
|
||||
|
||||
Tips & Tricks
|
||||
-------------
|
||||
|
||||
Same Backend for Incoming and Curated Areas
|
||||
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
|
||||
You can configure the service so that incoming records are immediately visible
|
||||
in the curated area by setting the final incoming path to equal the curated
|
||||
path:
|
||||
|
||||
.. code-block:: yaml
|
||||
|
||||
collections:
|
||||
datamgt:
|
||||
default_token: anon_read
|
||||
curated: datamgt/curated
|
||||
incoming: datamgt
|
||||
|
||||
tokens:
|
||||
trusted-submitter-token:
|
||||
user_id: trusted_submitter
|
||||
collections:
|
||||
datamgt:
|
||||
mode: WRITE_COLLECTION
|
||||
incoming_label: curated # datamgt/curated == curated path
|
||||
|
||||
|
||||
Migrating to Version 6 from Version <=5
|
||||
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
|
||||
Start the version 6 server on the same storage root as the version 5 server.
|
||||
The version 6 server will automatically migrate the configuration from
|
||||
``<storage root>/.dumpthings.yaml`` from the version 5 format to the new
|
||||
format and persist it. Use the ``-c/--config`` option on first start to
|
||||
initialise the persisted configuration from a different file than
|
||||
``<storage root>/.dumpthings.yaml``.
|
||||
|
||||
Once started, the configuration is stored in the internal database and the
|
||||
file ``<storage_root>/.dumpthings.yaml`` or the ``-c`` option can be omitted
|
||||
on subsequent starts:
|
||||
|
||||
.. code-block:: bash
|
||||
|
||||
dump-things-service /path/to/storage -c /path/to/old-config.yaml
|
||||
317
docs/endpoints.rst
Normal file
317
docs/endpoints.rst
Normal file
|
|
@ -0,0 +1,317 @@
|
|||
HTTP Endpoints
|
||||
==============
|
||||
|
||||
All endpoints are accessible via the interactive Swagger UI at ``/docs`` after
|
||||
starting the service.
|
||||
|
||||
Most endpoints that operate on records require a *collection name* and a valid
|
||||
token supplied in the ``X-DumpThings-Token`` HTTP header.
|
||||
|
||||
.. contents:: Endpoint overview
|
||||
:local:
|
||||
:depth: 1
|
||||
|
||||
|
||||
Note: The package `dump-things-pyclient`_ provides client support for
|
||||
the service. A Python API makes the endpoints available to Python code. The
|
||||
command line tool ``dtc`` makes the endpoints available in the shell.
|
||||
|
||||
|
||||
.. _dump-things-pyclient: https://pypi.org/project/dump-things-pyclient/
|
||||
|
||||
User Endpoints
|
||||
--------------
|
||||
|
||||
Store a Record
|
||||
^^^^^^^^^^^^^^
|
||||
|
||||
``POST /<collection>/record/<class>``
|
||||
|
||||
Stores an object of type ``<class>`` (defined in the collection schema) in the
|
||||
incoming area for the authenticated token's zone.
|
||||
|
||||
- **Requires**: write permission (``WRITE_INCOMING`` or higher).
|
||||
- **Query parameters**:
|
||||
|
||||
- ``format``: ``json`` (default) or ``ttl`` (Turtle RDF).
|
||||
- ``add_submission_tag``: if ``true`` the server adds automated submitter-ID
|
||||
and submission-time annotations. Default: ``false``.
|
||||
|
||||
- **Content-Type**: ``application/json`` for JSON; ``text/turtle`` for Turtle.
|
||||
- **Returns**: list of all stored records (may contain more than one entry when
|
||||
the posted object contains inlined records).
|
||||
|
||||
Validate a Record
|
||||
^^^^^^^^^^^^^^^^^
|
||||
|
||||
``POST /<collection>/validate/record/<class>``
|
||||
|
||||
Validates a record without storing it. Supports the same parameters as
|
||||
``POST /<collection>/record/<class>``.
|
||||
|
||||
Retrieve All Records of a Class
|
||||
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
|
||||
``GET /<collection>/records/<class>``
|
||||
|
||||
Returns all readable records of type ``<class>`` (and its subclasses).
|
||||
Records from the incoming zone take precedence over identical PIDs in the
|
||||
curated area.
|
||||
|
||||
- **Requires**: read permission.
|
||||
- **Query parameters**:
|
||||
|
||||
- ``format``: ``json`` (default) or ``ttl``.
|
||||
- ``matching``: wildcard pattern for ``sqlite`` backends; ``%`` matches any
|
||||
characters (case-insensitive). Ignored by ``record_dir`` backends.
|
||||
|
||||
Retrieve All Records of a Class (Paginated)
|
||||
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
|
||||
``GET /<collection>/records/p/<class>``
|
||||
|
||||
Same as above but with pagination support.
|
||||
|
||||
- **Additional query parameters**:
|
||||
|
||||
- ``page``: page number (starting at 1).
|
||||
- ``size``: records per page (default: 50).
|
||||
|
||||
- **Response structure**:
|
||||
|
||||
.. code-block:: json
|
||||
|
||||
{
|
||||
"items": ["<record or ttl-string>"],
|
||||
"total": 123,
|
||||
"page": 1,
|
||||
"size": 50,
|
||||
"pages": 3
|
||||
}
|
||||
|
||||
Retrieve All Records
|
||||
^^^^^^^^^^^^^^^^^^^^^
|
||||
|
||||
``GET /<collection>/records/``
|
||||
|
||||
Returns all readable records of a collection regardless of class.
|
||||
Supports the same ``format`` and ``matching`` parameters.
|
||||
|
||||
Retrieve All Records (Paginated)
|
||||
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
|
||||
``GET /<collection>/records/p/``
|
||||
|
||||
Paginated version of the endpoint above; supports the same ``page`` and
|
||||
``size`` parameters.
|
||||
|
||||
Retrieve a Single Record by PID
|
||||
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
|
||||
``GET /<collection>/record?pid=<pid>``
|
||||
|
||||
Retrieves the record with the given PID. If both the incoming zone and the
|
||||
curated area contain a record with the same PID, the incoming record is
|
||||
returned.
|
||||
|
||||
- **Query parameters**:
|
||||
|
||||
- ``format``: ``json`` (default) or ``ttl``.
|
||||
|
||||
Delete a Record
|
||||
^^^^^^^^^^^^^^^
|
||||
|
||||
``DELETE /<collection>/record?pid=<pid>``
|
||||
|
||||
Deletes the record with PID ``<pid>`` from the **incoming** area.
|
||||
|
||||
- **Requires**: write permission.
|
||||
- **Returns**: ``true`` if the record was deleted, ``false`` otherwise.
|
||||
|
||||
Server Information
|
||||
^^^^^^^^^^^^^^^^^^
|
||||
|
||||
``GET /server``
|
||||
|
||||
Returns information about the running service:
|
||||
|
||||
.. code-block:: json
|
||||
|
||||
{
|
||||
"version": "<service version>",
|
||||
"collections": [
|
||||
{
|
||||
"name": "collection_1",
|
||||
"schema": "https://example.org/schema.yaml",
|
||||
"classes": ["Thing", "Agent", "Person"]
|
||||
}
|
||||
]
|
||||
}
|
||||
|
||||
Maintenance Mode
|
||||
^^^^^^^^^^^^^^^^
|
||||
|
||||
``POST /maintenance``
|
||||
|
||||
Puts a collection into maintenance mode. In maintenance mode only tokens with
|
||||
curator privileges can access the collection.
|
||||
|
||||
Request body:
|
||||
|
||||
.. code-block:: json
|
||||
|
||||
{
|
||||
"collection": "collection_1",
|
||||
"active": true
|
||||
}
|
||||
|
||||
Curation Endpoints
|
||||
-------------------
|
||||
|
||||
Curation endpoints allow direct read/write access to the curated area and all
|
||||
incoming zones (aka: inboxes). A ``CURATOR`` token is required.
|
||||
|
||||
Refer to the interactive API documentation at ``/docs`` on a running service
|
||||
for the full list of curation endpoints.
|
||||
|
||||
|
||||
Administration Endpoints
|
||||
--------------------------
|
||||
|
||||
A Dump Things Service instance can be reconfigured at runtime via the
|
||||
administration endpoints. These endpoints allow to create, update, and delete
|
||||
collections, tokens, and admin tokens.
|
||||
|
||||
The service keeps an internal model of the configuration which can be modified
|
||||
by adding or removing elements via the administration endpoints (see
|
||||
:doc:`configuration` for a more detailed description of the configuration model).
|
||||
|
||||
Note: all administration endpoints require an **administrator token**.
|
||||
|
||||
|
||||
Currently the smallest units for updates are also *collections*, *tokens*, and
|
||||
*admin tokens*. That means, to update, for example, the authentication sources
|
||||
of an existing collection, a complete collection configuration with updated
|
||||
authentication sources has to be sent. The current collection configuration
|
||||
can be read via the ``GET /collections/<name>`` endpoint. Modifying an
|
||||
existing collection can therefore be implemented by reading the current
|
||||
collection configuration, modifying it, and sending it to the server via the
|
||||
``PUT /collections/<name>`` endpoint. The same holds for tokens and admin tokens.
|
||||
|
||||
|
||||
The commands ``dump-things-download-config`` and ``dump-things-upload-config``
|
||||
support this workflow. ``dump-things-download-config`` downloads the
|
||||
current configuration from a server and stores it as configuration file.
|
||||
``dump-things-upload-config`` reads a configuration file and
|
||||
invokes the API requests that are necessary to create the elements from
|
||||
the configuration file on a server (see :doc:`commands`).
|
||||
|
||||
|
||||
Collections
|
||||
^^^^^^^^^^^
|
||||
|
||||
.. list-table::
|
||||
:header-rows: 1
|
||||
:widths: 10 30 60
|
||||
|
||||
* - Method
|
||||
- Path
|
||||
- Description
|
||||
* - POST
|
||||
- ``/collections``
|
||||
- Create a new collection ( .
|
||||
* - GET
|
||||
- ``/collections``
|
||||
- List all collections.
|
||||
* - GET
|
||||
- ``/collections/<name>``
|
||||
- Get information about a specific collection.
|
||||
* - PUT
|
||||
- ``/collections/<name>``
|
||||
- Update an existing collection.
|
||||
* - DELETE
|
||||
- ``/collections/<name>``
|
||||
- Remove a collection from the service state (data is not deleted).
|
||||
|
||||
|
||||
The payload for ``POST /collections`` and ``PUT /collections``
|
||||
is a JSON objects that corresponds to the collection configuration object
|
||||
(see :ref:`config_file`), but has an additional ``name`` attribute that
|
||||
specifies the name of the collection that should be created or updated.
|
||||
|
||||
|
||||
Tokens
|
||||
^^^^^^
|
||||
|
||||
.. list-table::
|
||||
:header-rows: 1
|
||||
:widths: 10 30 60
|
||||
|
||||
* - Method
|
||||
- Path
|
||||
- Description
|
||||
* - POST
|
||||
- ``/tokens``
|
||||
- Create a new token.
|
||||
* - GET
|
||||
- ``/tokens``
|
||||
- List all tokens (including representations).
|
||||
* - GET
|
||||
- ``/tokens/<name>``
|
||||
- Get information about a specific token.
|
||||
* - PUT
|
||||
- ``/tokens``
|
||||
- Update an existing token.
|
||||
* - DELETE
|
||||
- ``/tokens/<name>``
|
||||
- Delete a token.
|
||||
|
||||
The payload for ``POST /tokens`` and ``PUT /tokens`` is a JSON objects that
|
||||
corresponds to the token configuration object
|
||||
(see :ref:`config_file`), but has an additional ``name`` attribute that
|
||||
specifies the name of the token that should be created or updated.
|
||||
|
||||
If no representation is provided in the payload, the server generates a random
|
||||
token representation and returns it in the ``representation`` attribute of
|
||||
the response. If a representation is
|
||||
provided and ``hashed`` is ``True``, the representation must be a valid
|
||||
token-hash, i.e, a sha256 hash of the plaintext-token in hexdigit format.
|
||||
The command ``dump-things-hash-token`` can be used to generate a
|
||||
valid token hash
|
||||
|
||||
|
||||
Admin Tokens
|
||||
^^^^^^^^^^^^
|
||||
|
||||
.. list-table::
|
||||
:header-rows: 1
|
||||
:widths: 10 30 60
|
||||
|
||||
* - Method
|
||||
- Path
|
||||
- Description
|
||||
* - POST
|
||||
- ``/admin_tokens``
|
||||
- Create a new admin token (representation must be a SHA-256 hash).
|
||||
* - GET
|
||||
- ``/admin_tokens``
|
||||
- List all admin tokens.
|
||||
* - GET
|
||||
- ``/admin_tokens/<name>``
|
||||
- Get information about a specific admin token.
|
||||
* - PUT
|
||||
- ``/admin_tokens``
|
||||
- Update an existing admin token.
|
||||
* - DELETE
|
||||
- ``/admin_tokens/<name>``
|
||||
- Delete an admin token.
|
||||
|
||||
|
||||
The payload for ``POST /admin_tokens`` and ``PUT /admin_tokens`` is a JSON
|
||||
objects that corresponds to the *admin token* configuration object
|
||||
(see :ref:`config_file`), but has an additional ``name`` attribute that
|
||||
specifies the name of the admin token that should be created or updated.
|
||||
|
||||
The ``representation`` attribute must be a valid token-hash, i.e, a sha256 hash
|
||||
of the plaintext-token in hexdigit format.
|
||||
The command ``dump-things-hash-token`` can be used to generate a valid token hash
|
||||
484
docs/images/dts-author-write.svg
Normal file
484
docs/images/dts-author-write.svg
Normal file
|
|
@ -0,0 +1,484 @@
|
|||
<?xml version="1.0" standalone="no"?>
|
||||
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 20010904//EN"
|
||||
"http://www.w3.org/TR/2001/REC-SVG-20010904/DTD/svg10.dtd">
|
||||
<svg version="1.0" xmlns="http://www.w3.org/2000/svg"
|
||||
width="1339.000000pt" height="1232.000000pt" viewBox="0 0 1339.000000 1232.000000"
|
||||
preserveAspectRatio="xMidYMid meet">
|
||||
<metadata>
|
||||
Created by potrace 1.16, written by Peter Selinger 2001-2019
|
||||
</metadata>
|
||||
<g transform="translate(0.000000,1232.000000) scale(0.100000,-0.100000)"
|
||||
fill="#000000" stroke="none">
|
||||
<path d="M11905 12308 c-22 -5 -64 -7 -93 -4 -43 5 -54 3 -59 -10 -11 -29 19
|
||||
-35 139 -29 90 4 132 2 179 -10 64 -17 135 -13 165 10 31 22 7 35 -54 29 -38
|
||||
-4 -78 -1 -118 10 -69 18 -100 19 -159 4z"/>
|
||||
<path d="M9948 12290 c-87 -14 -248 -80 -248 -102 0 -26 21 -23 124 19 78 31
|
||||
103 36 175 37 47 1 86 5 87 11 12 35 -45 49 -138 35z"/>
|
||||
<path d="M11593 12243 l-38 -58 -95 -5 c-75 -4 -95 -8 -95 -20 0 -27 151 -41
|
||||
200 -18 27 12 105 120 105 144 0 8 -9 14 -19 14 -13 0 -33 -21 -58 -57z"/>
|
||||
<path d="M10343 12273 c-23 -9 -14 -33 18 -52 44 -27 137 -41 262 -39 93 2
|
||||
107 4 107 19 0 23 -29 29 -156 29 -110 0 -164 10 -195 36 -17 15 -17 15 -36 7z"/>
|
||||
<path d="M12565 12219 c-4 -6 2 -20 13 -32 32 -35 44 -131 41 -342 -3 -170 -1
|
||||
-190 14 -193 26 -5 32 37 32 238 0 199 -13 288 -46 321 -21 21 -44 25 -54 8z"/>
|
||||
<path d="M12364 12172 c-22 -20 -50 -51 -62 -68 -20 -29 -20 -33 -6 -45 13
|
||||
-11 23 -4 69 48 46 51 58 60 80 55 24 -4 26 -2 23 19 -5 41 -55 36 -104 -9z"/>
|
||||
<path d="M8309 12114 c-15 -18 -18 -15 61 -58 132 -73 171 -89 241 -94 86 -6
|
||||
119 2 119 29 0 19 -4 20 -52 14 -75 -9 -140 8 -238 64 -106 60 -116 63 -131
|
||||
45z"/>
|
||||
<path d="M9105 12070 c-10 -17 3 -27 43 -34 22 -3 45 -13 52 -21 16 -19 36
|
||||
-19 44 0 6 17 -17 43 -51 56 -32 12 -80 12 -88 -1z"/>
|
||||
<path d="M7280 12040 c-26 -16 -1 -35 68 -53 38 -10 108 -40 156 -68 84 -48
|
||||
106 -53 106 -25 0 25 -163 115 -245 135 -27 7 -55 14 -61 16 -6 2 -17 0 -24
|
||||
-5z"/>
|
||||
<path d="M6267 11983 c-23 -23 -1 -30 110 -36 124 -7 156 1 119 29 -14 10 -49
|
||||
14 -121 14 -56 0 -105 -3 -108 -7z"/>
|
||||
<path d="M6855 11969 c-4 -5 5 -21 19 -34 14 -13 39 -46 56 -73 33 -53 57 -71
|
||||
66 -47 6 15 -21 66 -69 128 -28 36 -59 48 -72 26z"/>
|
||||
<path d="M7964 11948 c-7 -10 37 -55 77 -78 22 -13 59 15 59 44 0 31 -30 44
|
||||
-37 16 -5 -19 -6 -19 -35 5 -32 27 -53 31 -64 13z"/>
|
||||
<path d="M5810 11895 c-7 -8 -42 -24 -79 -35 -74 -22 -141 -63 -141 -86 0 -26
|
||||
29 -27 60 0 17 14 50 31 73 37 78 20 137 50 137 69 0 10 -7 21 -16 24 -21 8
|
||||
-20 8 -34 -9z"/>
|
||||
<path d="M5603 11552 c-5 -4 -10 -42 -12 -85 -1 -63 1 -78 14 -83 9 -4 18 -5
|
||||
20 -2 2 2 7 40 11 84 5 66 4 82 -8 87 -8 3 -19 2 -25 -1z"/>
|
||||
<path d="M12595 11503 c-4 -32 -16 -94 -27 -138 -45 -177 -49 -199 -46 -249 2
|
||||
-37 7 -51 18 -51 11 0 17 22 26 86 6 47 21 114 32 150 23 68 42 172 42 227 0
|
||||
25 -4 32 -19 32 -16 0 -21 -10 -26 -57z"/>
|
||||
<path d="M9076 11388 c-20 -76 7 -317 60 -536 51 -211 59 -270 38 -293 -39
|
||||
-43 27 -175 112 -225 113 -66 271 -27 290 71 9 52 -21 175 -58 230 -59 89
|
||||
-170 133 -260 104 l-45 -15 -37 155 c-44 190 -58 293 -55 414 1 52 -1 99 -5
|
||||
105 -12 19 -33 14 -40 -10z m317 -701 c43 -19 103 -87 117 -134 6 -21 14 -64
|
||||
17 -96 5 -46 2 -61 -11 -76 -22 -24 -100 -44 -140 -35 -38 8 -107 45 -101 54
|
||||
2 4 -1 35 -7 69 -11 56 -10 62 7 75 22 16 14 46 -14 46 -31 0 -42 67 -15 94
|
||||
19 20 102 21 147 3z"/>
|
||||
<path d="M8377 11223 c-18 -18 -6 -277 23 -478 16 -115 32 -245 35 -290 11
|
||||
-155 16 -185 30 -185 39 0 37 47 -16 445 -29 210 -46 404 -33 378 7 -15 30
|
||||
-17 39 -3 3 5 -5 39 -17 75 -22 61 -40 79 -61 58z"/>
|
||||
<path d="M5715 11041 c-3 -6 -3 -17 2 -23 4 -7 7 -26 8 -43 0 -20 6 -31 17
|
||||
-33 22 -4 35 40 22 77 -10 27 -38 40 -49 22z"/>
|
||||
<path d="M11070 10940 c-59 -11 -150 -45 -192 -73 -40 -27 -51 -82 -21 -109
|
||||
27 -24 235 -159 292 -190 28 -16 51 -35 51 -43 0 -26 -59 -82 -111 -105 -50
|
||||
-21 -54 -21 -140 -6 -95 16 -129 12 -201 -25 -40 -21 -45 -28 -27 -46 8 -8 26
|
||||
-4 66 14 41 19 64 24 96 19 143 -19 172 -19 225 4 29 13 69 41 92 67 35 37 41
|
||||
49 38 81 -3 40 1 36 -175 145 -43 27 -91 59 -108 70 -16 12 -41 30 -54 39
|
||||
l-25 18 24 25 c34 36 169 77 240 73 53 -3 55 -2 55 22 0 22 -4 25 -40 27 -22
|
||||
0 -60 -3 -85 -7z"/>
|
||||
<path d="M12496 10852 c-3 -6 1 -29 10 -53 9 -24 17 -74 17 -111 1 -55 -3 -73
|
||||
-21 -97 -24 -34 -27 -47 -11 -56 14 -9 49 24 65 62 19 44 17 136 -4 203 -17
|
||||
52 -42 75 -56 52z"/>
|
||||
<path d="M10402 10828 c-7 -7 -12 -19 -12 -28 0 -19 -67 -120 -92 -138 -10 -7
|
||||
-18 -20 -18 -28 0 -16 -47 -114 -55 -114 -15 0 -155 103 -155 114 0 28 -36 46
|
||||
-92 46 -46 0 -64 -6 -104 -32 -64 -44 -89 -88 -88 -158 0 -95 43 -148 110
|
||||
-136 50 10 89 48 130 131 21 41 41 75 46 75 9 0 70 -39 105 -67 l23 -18 -40
|
||||
-65 c-45 -73 -53 -120 -20 -120 12 0 20 7 20 18 0 9 16 43 36 74 l36 57 32
|
||||
-24 c17 -13 40 -38 51 -55 11 -16 28 -30 38 -30 33 0 18 41 -37 98 l-54 57 25
|
||||
48 c20 41 28 48 46 43 12 -3 50 -6 84 -6 49 0 61 -3 57 -14 -9 -24 15 -91 42
|
||||
-117 38 -36 105 -33 169 6 56 35 75 59 58 76 -8 8 -25 1 -63 -25 -91 -63 -160
|
||||
-43 -160 45 0 36 3 39 54 62 69 32 200 120 220 149 14 19 14 24 2 36 -34 34
|
||||
-230 -59 -278 -132 -19 -28 -30 -35 -68 -40 -26 -3 -61 -3 -79 0 l-33 7 32 13
|
||||
c27 12 31 18 26 39 -4 17 3 41 25 80 30 54 33 85 6 85 -7 0 -18 -5 -25 -12z
|
||||
m269 -117 c-35 -27 -81 -53 -81 -46 0 6 90 65 99 65 4 0 -5 -9 -18 -19z m-681
|
||||
-140 c0 -52 -20 -83 -58 -93 -40 -11 -42 -44 -2 -42 l23 1 -22 -19 c-34 -27
|
||||
-75 -24 -89 7 -18 40 -14 104 8 140 25 41 48 52 43 22 -5 -29 11 -51 31 -44
|
||||
10 4 16 18 16 35 0 35 6 41 31 35 14 -4 19 -14 19 -42z"/>
|
||||
<path d="M8595 10694 c-8 -20 -18 -54 -21 -76 -6 -34 -4 -38 14 -38 16 0 23 8
|
||||
28 38 l7 37 14 -34 c8 -19 35 -111 59 -204 25 -93 49 -178 55 -188 9 -19 38
|
||||
-27 40 -11 0 4 2 18 5 32 2 14 16 95 30 180 14 85 29 160 33 168 5 10 31 -30
|
||||
80 -126 39 -77 80 -147 90 -156 21 -19 48 -12 56 15 8 24 -1 39 -25 39 -15 0
|
||||
-36 32 -86 130 -112 222 -151 212 -190 -47 -10 -62 -19 -112 -20 -110 -1 1
|
||||
-18 61 -38 132 -59 218 -71 250 -94 253 -16 3 -25 -5 -37 -34z"/>
|
||||
<path d="M5746 10631 c-20 -22 -14 -41 14 -41 21 0 40 28 33 48 -7 18 -27 15
|
||||
-47 -7z"/>
|
||||
<path d="M5783 10314 c-3 -9 -2 -19 4 -23 5 -3 9 -21 9 -40 -1 -41 20 -52 33
|
||||
-18 5 13 17 27 25 30 25 10 19 35 -14 52 -37 19 -49 19 -57 -1z"/>
|
||||
<path d="M12600 10065 c0 -8 -13 -36 -29 -62 -29 -46 -31 -73 -6 -73 7 0 28
|
||||
25 48 56 29 45 35 60 27 75 -13 23 -40 25 -40 4z"/>
|
||||
<path d="M5758 9902 c-24 -5 -23 -29 2 -42 18 -10 20 -23 22 -183 l3 -172 24
|
||||
-3 23 -4 -7 184 c-3 100 -9 190 -11 199 -5 18 -29 27 -56 21z"/>
|
||||
<path d="M12536 9522 c-2 -4 8 -52 24 -107 44 -158 46 -193 16 -235 -43 -59
|
||||
-51 -79 -37 -93 9 -9 19 -3 47 28 43 50 54 75 54 126 0 38 -38 207 -60 263 -9
|
||||
25 -33 35 -44 18z"/>
|
||||
<path d="M4475 9496 c-41 -19 -101 -83 -121 -131 -9 -22 -19 -78 -21 -125 -5
|
||||
-76 -3 -88 17 -112 12 -16 30 -28 40 -28 28 0 45 -26 28 -43 -8 -8 -26 -43
|
||||
-41 -78 -31 -72 -76 -113 -115 -103 -20 6 -22 13 -22 68 0 64 -11 86 -41 86
|
||||
-22 0 -33 -29 -14 -36 11 -5 15 -22 15 -61 l0 -54 -42 3 c-39 3 -42 5 -52 43
|
||||
-9 29 -17 40 -31 40 -17 0 -20 -6 -18 -44 2 -35 -2 -48 -17 -58 -27 -19 -25
|
||||
-48 5 -70 22 -15 30 -37 50 -135 52 -251 82 -333 120 -333 21 0 23 6 56 150
|
||||
l23 100 8 -85 c5 -47 10 -116 12 -155 1 -38 6 -78 10 -87 11 -25 1 -35 -45
|
||||
-42 -52 -8 -112 -64 -129 -121 -6 -22 -14 -89 -17 -150 -4 -89 -1 -130 16
|
||||
-214 20 -94 20 -104 6 -115 -21 -15 -10 -45 21 -56 19 -8 30 -30 59 -122 19
|
||||
-62 44 -165 54 -229 11 -63 25 -128 31 -143 8 -21 5 -54 -12 -142 -17 -91 -18
|
||||
-117 -9 -127 19 -19 39 17 47 84 10 92 20 69 19 -45 0 -88 3 -107 18 -123 10
|
||||
-10 27 -33 38 -51 11 -19 25 -32 32 -29 7 2 15 28 19 58 3 30 10 67 14 83 4
|
||||
16 1 73 -6 127 -12 89 -12 99 4 114 16 16 15 45 -4 70 -4 6 -10 44 -14 85 -6
|
||||
69 -4 83 27 171 39 110 63 209 72 293 3 37 11 64 22 71 12 9 14 21 9 51 -19
|
||||
124 -19 125 -4 119 30 -12 36 17 23 108 -9 67 -17 93 -35 112 l-23 25 17 137
|
||||
c21 164 39 247 67 313 19 45 27 52 90 81 65 30 86 50 73 70 -3 5 -14 9 -24 9
|
||||
-19 0 -19 2 2 45 31 64 19 80 -55 79 -52 -1 -56 0 -54 20 2 17 -4 22 -31 24
|
||||
-22 2 -34 -2 -38 -12 -3 -9 -15 -16 -25 -16 -14 0 -19 7 -19 30 0 19 -7 34
|
||||
-20 42 -11 7 -20 20 -20 29 0 9 -6 34 -14 56 -13 38 -13 40 18 69 33 32 63
|
||||
110 73 193 5 43 3 51 -16 63 -11 7 -21 22 -21 34 0 12 -7 27 -15 34 -13 11
|
||||
-23 8 -58 -16 -59 -42 -98 -117 -99 -192 0 -49 -2 -53 -9 -27 -22 74 14 197
|
||||
72 249 49 45 94 48 129 11 20 -21 22 -28 12 -49 -9 -20 -8 -27 5 -37 13 -11
|
||||
18 -10 35 10 10 14 16 31 13 38 -3 8 -5 21 -5 28 0 8 -16 30 -35 50 -39 39
|
||||
-77 45 -130 21z m60 -293 c-9 -32 -24 -66 -32 -76 -15 -16 -17 -16 -29 1 -18
|
||||
26 21 129 51 134 11 2 22 3 23 2 2 -2 -4 -29 -13 -61z m-90 17 c-4 -12 -9 -19
|
||||
-12 -17 -3 3 -2 15 2 27 4 12 9 19 12 17 3 -3 2 -15 -2 -27z m75 -325 c0 -17
|
||||
-16 -35 -31 -35 -13 0 -19 7 -19 24 0 19 4 22 25 18 14 -2 25 -6 25 -7z m-320
|
||||
-70 c0 -10 -11 -15 -35 -15 -24 0 -35 5 -35 15 0 10 11 15 35 15 24 0 35 -5
|
||||
35 -15z m60 -4 c0 -6 -4 -13 -10 -16 -5 -3 -10 1 -10 9 0 9 5 16 10 16 6 0 10
|
||||
-4 10 -9z m484 -36 c-4 -8 -7 -15 -9 -15 -2 0 -5 7 -9 15 -3 9 0 15 9 15 9 0
|
||||
12 -6 9 -15z m-114 -15 c0 -6 -7 -27 -16 -48 -13 -32 -16 -35 -25 -19 -16 27
|
||||
-1 77 22 77 10 0 19 -5 19 -10z m-430 -23 c0 -8 -11 -19 -25 -25 -28 -13 -24
|
||||
-42 5 -42 12 0 20 -10 24 -31 10 -51 7 -134 -6 -147 -9 -9 -9 -18 0 -37 12
|
||||
-26 17 -73 7 -63 -7 7 -31 101 -59 230 -16 75 -20 110 -13 117 16 16 67 14 67
|
||||
-2z m55 3 c3 -5 1 -10 -4 -10 -6 0 -11 5 -11 10 0 6 2 10 4 10 3 0 8 -4 11
|
||||
-10z m438 -3 c2 -7 -8 -27 -23 -46 l-28 -33 16 46 c17 47 26 56 35 33z m-181
|
||||
-101 c-7 -36 -21 -84 -31 -108 l-18 -43 -12 75 c-7 41 -18 94 -26 117 l-13 41
|
||||
36 9 c30 7 41 5 56 -9 18 -16 19 -23 8 -82z m-241 -8 l-19 -43 -1 47 c-1 37 3
|
||||
47 17 50 25 5 26 -6 3 -54z m308 -118 c-11 -35 -26 -106 -35 -159 -14 -85 -24
|
||||
-125 -24 -93 0 7 -9 12 -20 12 -11 0 -20 -4 -20 -10 0 -5 -4 -10 -10 -10 -5 0
|
||||
-10 9 -10 21 0 14 5 19 14 16 27 -11 34 16 20 72 -13 47 -13 59 0 85 8 17 22
|
||||
50 31 73 10 25 22 40 29 37 7 -3 19 2 26 11 21 25 21 13 -1 -55z m-198 -93
|
||||
c-8 -8 -11 5 -10 54 l2 64 10 -53 c7 -39 7 -56 -2 -65z m19 -112 c0 -25 -4
|
||||
-45 -10 -45 -11 0 -13 33 -4 68 10 34 14 27 14 -23z m-80 -200 c0 -31 -4 -45
|
||||
-12 -44 -30 4 -36 -4 -42 -55 -5 -33 -13 -57 -22 -60 -10 -4 -14 -23 -14 -68
|
||||
0 -55 -1 -60 -14 -43 -12 16 -16 17 -30 6 -14 -12 -16 -8 -16 41 0 61 15 159
|
||||
32 201 14 37 54 67 89 67 28 0 29 -2 29 -45z m-34 -477 c-3 -13 -6 -59 -7
|
||||
-103 l-1 -80 -14 45 c-11 34 -12 54 -4 81 5 20 10 46 10 58 0 11 5 21 11 21 7
|
||||
0 9 -9 5 -22z m213 -108 c5 -3 2 -23 -4 -45 -13 -39 -13 -38 -12 40 0 44 2 64
|
||||
4 45 3 -19 8 -37 12 -40z m-123 3 c-3 -16 -8 -70 -12 -122 -7 -96 -16 -103
|
||||
-27 -18 -4 31 -3 47 4 47 7 0 9 19 4 60 -7 57 -6 60 15 60 18 0 21 -4 16 -27z
|
||||
m-29 -380 c-3 -10 -5 -2 -5 17 0 19 2 27 5 18 2 -10 2 -26 0 -35z m73 -105 c0
|
||||
-25 -3 -29 -10 -18 -13 20 -13 50 0 50 6 0 10 -15 10 -32z"/>
|
||||
<path d="M10904 9366 c-11 -7 -30 -16 -44 -19 -14 -3 -56 -12 -94 -21 -38 -8
|
||||
-83 -24 -102 -35 -72 -43 -278 -53 -424 -20 -118 26 -262 22 -515 -16 -269
|
||||
-39 -472 -34 -807 21 -123 20 -161 23 -178 14 -35 -19 -17 -35 46 -41 32 -4
|
||||
137 -19 231 -33 256 -39 503 -39 748 -2 217 34 380 38 471 13 43 -12 100 -17
|
||||
189 -17 134 0 198 10 256 40 19 11 60 23 90 28 30 5 62 13 73 17 17 7 18 5 12
|
||||
-31 -16 -103 -17 -296 -2 -454 8 -91 20 -248 26 -350 11 -180 18 -253 40 -433
|
||||
7 -48 9 -124 5 -170 -4 -45 -7 -121 -7 -169 0 -49 -1 -88 -1 -88 -1 0 -83 -7
|
||||
-182 -15 -99 -8 -313 -17 -475 -20 -162 -3 -349 -10 -415 -15 -66 -5 -172 -12
|
||||
-235 -16 -102 -5 -250 -27 -269 -38 -16 -10 -212 -46 -248 -46 -22 0 -73 11
|
||||
-113 25 -87 29 -185 33 -231 9 -17 -8 -32 -14 -33 -12 -1 2 1 44 5 93 10 129
|
||||
10 309 -2 390 -16 111 -29 876 -19 1098 5 109 7 204 3 212 -6 18 -29 19 -40 3
|
||||
-4 -7 -8 -53 -8 -103 0 -49 -1 -233 -3 -407 l-2 -318 -26 10 c-17 7 -47 6 -97
|
||||
-4 -137 -27 -153 -28 -219 -10 -35 10 -82 26 -105 35 l-43 18 0 56 c0 63 -17
|
||||
80 -50 50 -19 -18 -21 -17 -57 8 -43 31 -53 27 -53 -17 0 -36 12 -54 53 -79
|
||||
23 -15 27 -24 27 -65 0 -26 -4 -53 -8 -60 -6 -9 -60 -13 -198 -17 -104 -2
|
||||
-236 -11 -294 -20 -89 -14 -153 -16 -420 -10 -173 4 -342 10 -375 14 -72 9
|
||||
-173 1 -360 -28 -94 -15 -204 -24 -338 -27 -210 -5 -269 -16 -332 -66 -23 -18
|
||||
-39 -20 -118 -19 -51 1 -116 9 -145 17 -39 12 -74 14 -135 9 -70 -6 -85 -4
|
||||
-96 9 -8 9 -29 16 -48 16 -30 0 -34 -3 -31 -22 5 -38 83 -59 189 -51 64 4 98
|
||||
2 135 -10 30 -10 78 -15 124 -14 79 2 134 -8 126 -22 -3 -5 1 -14 8 -20 11
|
||||
-10 19 -7 35 10 18 19 27 21 76 16 44 -4 57 -2 62 9 10 26 -17 44 -64 44 -30
|
||||
0 -43 4 -41 12 9 27 75 36 262 37 182 1 240 7 472 47 81 14 121 15 385 2 350
|
||||
-16 521 -16 647 0 258 33 322 37 419 26 l51 -7 -5 -36 c-4 -20 -14 -42 -24
|
||||
-49 -24 -17 -13 -42 17 -42 64 0 421 147 449 184 6 8 37 19 70 25 32 6 63 17
|
||||
67 24 5 6 7 -113 5 -268 -4 -282 -13 -355 -42 -355 -22 0 -29 -20 -12 -37 22
|
||||
-22 53 -8 71 35 16 35 16 30 12 -143 -2 -99 -7 -188 -11 -197 -4 -10 -15 -18
|
||||
-25 -18 -23 0 -44 -26 -36 -45 7 -19 43 -19 76 0 128 74 165 79 293 35 49 -16
|
||||
99 -30 111 -30 26 0 185 32 301 60 49 12 147 24 253 30 96 5 178 12 183 15 5
|
||||
4 188 10 406 15 219 5 465 14 547 21 104 9 151 10 153 2 2 -5 10 -19 18 -29
|
||||
11 -15 18 -17 32 -8 26 16 28 49 5 87 -29 48 -38 139 -16 172 15 22 16 42 10
|
||||
143 -4 64 -13 158 -21 207 -8 50 -19 176 -25 280 -6 105 -20 294 -31 420 -21
|
||||
231 -21 312 3 442 8 46 16 63 30 66 21 6 24 42 4 50 -7 3 -22 0 -32 -7z
|
||||
m-2700 -945 l50 -19 -53 -11 c-28 -6 -53 -11 -55 -11 -1 0 -1 14 2 30 2 17 5
|
||||
30 6 30 0 0 23 -8 50 -19z m56 -84 c-36 -18 -82 -43 -102 -56 -39 -24 -44 -23
|
||||
-29 7 5 9 12 24 15 33 3 11 21 19 53 24 27 3 55 10 63 16 8 5 26 9 40 8 19 0
|
||||
9 -8 -40 -32z"/>
|
||||
<path d="M5750 9340 c0 -13 12 -26 35 -37 40 -19 40 -18 21 -69 -18 -52 -27
|
||||
-215 -18 -339 6 -90 9 -100 26 -100 19 0 20 10 20 200 1 185 3 203 23 244 12
|
||||
24 19 49 16 57 -6 15 -89 64 -109 64 -8 0 -14 -9 -14 -20z"/>
|
||||
<path d="M9767 8913 c-15 -14 -7 -55 12 -60 11 -3 23 -21 31 -46 7 -23 34 -98
|
||||
62 -166 27 -68 48 -133 46 -145 -3 -19 -14 -22 -116 -35 -61 -8 -115 -12 -118
|
||||
-8 -9 9 17 161 30 169 6 4 11 22 12 41 1 18 4 49 8 68 8 46 -11 74 -43 64 -21
|
||||
-6 -23 -11 -17 -54 4 -32 1 -55 -9 -75 -9 -16 -14 -34 -12 -40 3 -6 -2 -47 -9
|
||||
-91 -7 -44 -13 -85 -13 -92 -1 -6 -33 -22 -72 -34 -95 -30 -208 -88 -231 -119
|
||||
-25 -35 -28 -73 -6 -78 12 -2 21 5 27 21 15 38 64 73 148 105 134 51 127 51
|
||||
119 1 -11 -74 -40 -154 -55 -154 -19 0 -33 -51 -26 -92 7 -38 22 -50 40 -32
|
||||
15 16 70 184 80 244 16 102 7 92 98 104 45 6 106 13 134 17 60 7 50 21 109
|
||||
-141 20 -55 47 -122 59 -150 13 -27 25 -59 27 -70 5 -27 34 -31 48 -5 9 16 8
|
||||
28 -5 53 -9 18 -41 97 -70 177 -37 101 -52 154 -48 173 4 22 1 29 -14 33 -15
|
||||
4 -34 40 -73 142 -30 75 -62 164 -72 196 -10 33 -24 66 -30 73 -11 14 -40 17
|
||||
-51 6z"/>
|
||||
<path d="M5780 8535 c0 -9 7 -23 15 -31 18 -19 19 -51 2 -124 -18 -79 -16
|
||||
-105 8 -105 17 0 22 13 37 104 17 100 17 106 0 135 -20 34 -62 48 -62 21z"/>
|
||||
<path d="M12568 8318 c-39 -63 -43 -98 -13 -98 16 0 68 97 59 111 -9 16 -31
|
||||
10 -46 -13z"/>
|
||||
<path d="M2506 8308 c-2 -7 -7 -53 -10 -103 -3 -49 -15 -166 -26 -260 -11 -93
|
||||
-23 -224 -26 -290 l-7 -120 -50 -50 -49 -50 6 216 c6 227 17 339 43 454 27
|
||||
124 28 135 5 135 -20 0 -28 -13 -37 -62 -3 -13 -12 -57 -20 -98 -23 -113 -35
|
||||
-284 -35 -491 l0 -186 -57 -26 c-68 -29 -105 -61 -97 -82 8 -20 17 -19 55 4
|
||||
41 25 60 16 88 -42 16 -34 21 -64 22 -133 1 -109 16 -169 44 -169 26 0 30 47
|
||||
15 163 -6 48 -16 127 -20 175 l-9 88 41 37 c22 20 44 39 49 40 5 2 9 -52 9
|
||||
-121 0 -143 15 -311 33 -365 16 -50 43 -54 62 -10 16 41 69 256 85 348 22 130
|
||||
32 172 40 164 4 -5 25 -52 45 -104 66 -168 118 -246 140 -210 4 7 13 6 27 -1
|
||||
53 -28 142 20 182 99 62 122 88 307 50 360 -32 46 -122 19 -207 -62 -48 -45
|
||||
-88 -144 -90 -225 -1 -38 -5 -67 -9 -63 -4 4 -28 58 -53 121 -50 126 -59 141
|
||||
-85 141 -40 0 -54 -34 -80 -190 -12 -71 -58 -276 -67 -300 -11 -25 -21 76 -29
|
||||
274 l-7 189 39 73 c32 60 37 75 26 86 -11 11 -17 9 -33 -11 l-19 -23 0 48 c0
|
||||
50 42 436 59 533 4 30 5 66 2 80 -8 28 -38 41 -45 19z m568 -724 c16 -40 -7
|
||||
-124 -33 -124 -24 0 -42 -22 -32 -38 5 -9 17 -11 34 -7 l27 7 -19 -54 c-10
|
||||
-30 -28 -73 -40 -96 -34 -67 -114 -95 -145 -50 -19 26 -21 123 -6 180 16 58
|
||||
71 130 125 165 55 36 80 41 89 17z m-774 -244 c0 -5 -2 -10 -4 -10 -3 0 -8 5
|
||||
-11 10 -3 6 -1 10 4 10 6 0 11 -4 11 -10z"/>
|
||||
<path d="M1347 8143 c-9 -18 13 -290 33 -408 26 -157 94 -369 151 -472 34 -61
|
||||
38 -75 23 -69 -95 37 -283 53 -388 32 l-38 -7 6 48 c11 77 54 258 93 390 34
|
||||
114 38 122 59 117 12 -3 25 -1 28 5 7 10 -41 111 -53 111 -17 -1 -31 -19 -29
|
||||
-41 0 -13 -15 -76 -35 -139 -39 -124 -91 -335 -103 -415 -10 -71 -16 -79 -90
|
||||
-114 -68 -32 -79 -53 -31 -59 14 -2 40 4 57 13 18 9 33 15 35 13 3 -3 -20
|
||||
-142 -48 -300 -11 -58 -11 -80 -3 -87 29 -24 39 10 83 292 14 89 20 110 37
|
||||
120 13 7 73 12 161 12 173 0 260 -22 322 -83 34 -32 41 -46 52 -110 14 -80 45
|
||||
-130 74 -119 24 9 57 66 190 330 l122 240 12 -114 c14 -128 48 -298 62 -312
|
||||
17 -17 44 1 37 26 -31 118 -48 224 -54 344 -11 209 -29 215 -117 36 -141 -287
|
||||
-259 -504 -267 -489 -4 8 -12 42 -16 75 -7 48 -6 66 6 82 13 19 13 25 -3 51
|
||||
-15 26 -17 52 -14 201 4 156 2 172 -13 175 -12 2 -24 -12 -42 -49 -26 -53 -26
|
||||
-69 0 -69 15 0 17 -66 5 -190 l-6 -65 -48 90 c-125 232 -181 445 -197 745 -5
|
||||
91 -9 166 -9 168 -2 6 -40 1 -44 -5z"/>
|
||||
<path d="M5706 8058 c-23 -73 -36 -240 -36 -478 -1 -374 -3 -340 20 -340 23 0
|
||||
21 -25 24 395 1 136 7 257 15 296 7 36 11 81 9 99 -3 34 -25 53 -32 28z"/>
|
||||
<path d="M3133 7863 c-14 -34 -7 -247 11 -338 9 -49 44 -172 77 -273 55 -167
|
||||
62 -183 82 -180 20 3 23 11 30 86 21 234 79 356 199 416 67 34 84 33 83 -1 0
|
||||
-14 6 -28 12 -30 18 -6 37 41 29 71 -6 23 -11 26 -54 26 -86 0 -192 -81 -247
|
||||
-187 -14 -28 -35 -93 -45 -143 -10 -51 -21 -94 -23 -96 -9 -9 -88 255 -102
|
||||
340 -18 107 -19 219 -3 246 9 13 9 27 2 47 -11 33 -41 42 -51 16z"/>
|
||||
<path d="M12581 7704 c-44 -56 -11 -75 40 -24 17 16 28 34 24 40 -11 18 -43
|
||||
10 -64 -16z"/>
|
||||
<path d="M12644 7186 c-3 -9 2 -47 11 -86 11 -43 16 -96 14 -137 -3 -55 -1
|
||||
-68 11 -68 18 0 39 57 39 105 -1 49 -41 193 -56 198 -7 2 -16 -3 -19 -12z"/>
|
||||
<path d="M5676 6982 c-3 -6 1 -29 10 -53 9 -25 16 -81 17 -129 2 -68 5 -85 17
|
||||
-85 11 0 17 19 23 80 7 66 5 90 -10 135 -17 52 -43 75 -57 52z"/>
|
||||
<path d="M2224 6596 c-4 -9 -2 -22 4 -29 5 -6 28 -75 51 -152 23 -77 60 -180
|
||||
82 -230 22 -49 43 -95 46 -102 3 -7 -11 -16 -34 -23 -44 -12 -253 -43 -259
|
||||
-38 -1 2 15 57 37 122 55 162 85 295 80 354 -2 20 -32 13 -57 -14 -27 -28 -31
|
||||
-54 -9 -54 22 0 19 -25 -20 -157 -46 -159 -81 -245 -107 -265 -17 -12 -20 -19
|
||||
-11 -30 9 -11 3 -38 -27 -120 -22 -59 -37 -114 -34 -123 14 -34 38 -8 64 70
|
||||
43 125 52 149 61 161 5 6 48 14 96 18 47 3 122 16 166 27 43 11 80 19 82 17 1
|
||||
-2 35 -61 76 -131 89 -155 119 -193 143 -184 14 6 16 14 10 39 -11 54 -36 98
|
||||
-56 98 -11 0 -36 32 -74 96 -31 52 -54 97 -52 98 1 1 22 12 45 24 l42 21 6
|
||||
-32 c4 -18 5 -50 3 -72 -2 -30 1 -40 14 -43 25 -5 40 59 27 116 -19 85 -37 99
|
||||
-88 63 -15 -11 -39 -23 -52 -26 -24 -6 -28 -1 -67 84 -39 86 -96 255 -125 371
|
||||
-11 43 -19 56 -36 58 -12 2 -24 -3 -27 -12z"/>
|
||||
<path d="M12765 6340 c-3 -6 -3 -20 0 -31 5 -14 0 -28 -15 -44 -22 -23 -22
|
||||
-55 -1 -55 14 0 70 61 77 84 4 13 -1 25 -17 37 -28 21 -35 23 -44 9z"/>
|
||||
<path d="M5740 6322 c0 -9 9 -23 20 -30 19 -11 19 -14 5 -41 -8 -16 -17 -47
|
||||
-21 -68 -5 -32 -3 -41 10 -46 17 -7 18 -5 46 73 24 68 24 80 0 106 -27 28 -60
|
||||
32 -60 6z"/>
|
||||
<path d="M5757 5693 c-3 -4 2 -53 9 -108 8 -55 13 -120 12 -145 -3 -39 0 -45
|
||||
17 -45 18 0 20 8 23 75 3 101 -18 224 -40 228 -9 2 -18 -1 -21 -5z"/>
|
||||
<path d="M12796 5488 c5 -24 7 -102 5 -175 -3 -149 3 -193 27 -193 15 0 17 19
|
||||
19 168 3 187 -6 242 -38 242 -19 0 -20 -4 -13 -42z"/>
|
||||
<path d="M5800 5261 c0 -10 11 -49 25 -85 31 -83 33 -142 5 -151 -25 -8 -27
|
||||
-45 -2 -45 31 0 61 29 68 66 10 52 -50 234 -77 234 -12 0 -19 -7 -19 -19z"/>
|
||||
<path d="M12870 4760 c0 -12 9 -38 20 -60 24 -47 25 -97 5 -164 -20 -67 -19
|
||||
-86 5 -86 13 0 22 9 26 28 3 15 12 49 20 76 20 71 18 93 -16 164 -29 62 -60
|
||||
83 -60 42z"/>
|
||||
<path d="M5798 4748 c-3 -7 -1 -58 4 -113 4 -55 4 -128 0 -163 -7 -49 -6 -65
|
||||
5 -74 28 -23 38 9 41 130 4 143 -7 226 -29 230 -9 2 -19 -3 -21 -10z"/>
|
||||
<path d="M5834 4165 c-4 -9 -4 -41 0 -71 5 -44 3 -54 -9 -54 -19 0 -20 -36 -1
|
||||
-43 7 -3 23 1 35 9 17 12 21 25 20 67 -1 63 -10 99 -27 105 -6 2 -15 -4 -18
|
||||
-13z"/>
|
||||
<path d="M12906 4022 c-3 -4 -4 -32 -4 -60 1 -38 -6 -66 -25 -104 -34 -70 -39
|
||||
-113 -12 -113 12 0 21 8 23 20 2 11 17 48 33 82 25 51 29 72 27 120 -2 44 -7
|
||||
59 -20 61 -9 2 -19 -1 -22 -6z"/>
|
||||
<path d="M4515 3916 c-42 -19 -101 -83 -121 -131 -9 -22 -19 -74 -22 -117 -6
|
||||
-95 8 -136 49 -145 41 -8 56 -29 36 -51 -8 -9 -27 -44 -41 -77 -30 -68 -76
|
||||
-108 -114 -99 -20 6 -22 13 -22 68 0 64 -11 86 -41 86 -26 0 -35 -21 -16 -35
|
||||
12 -9 17 -27 17 -64 l0 -52 -42 3 c-39 3 -42 5 -52 43 -9 29 -17 40 -31 40
|
||||
-17 0 -20 -6 -18 -44 2 -35 -2 -48 -17 -58 -27 -19 -25 -48 5 -70 22 -15 30
|
||||
-37 50 -135 52 -251 82 -333 120 -333 21 0 23 6 56 150 l23 100 8 -85 c5 -47
|
||||
10 -116 12 -155 1 -38 6 -78 10 -87 11 -25 1 -35 -45 -42 -52 -8 -112 -64
|
||||
-129 -121 -6 -22 -14 -92 -17 -155 -4 -94 -1 -132 16 -210 19 -87 20 -96 5
|
||||
-107 -21 -16 -9 -51 21 -63 20 -8 30 -29 60 -122 19 -62 44 -165 54 -229 11
|
||||
-63 25 -128 31 -143 8 -21 5 -54 -11 -143 -17 -89 -19 -117 -10 -126 19 -18
|
||||
39 16 47 79 11 89 20 70 19 -41 0 -93 2 -106 21 -123 11 -11 26 -34 34 -51 20
|
||||
-50 44 -37 52 29 3 30 10 68 14 84 4 16 1 73 -6 127 -12 88 -11 99 3 114 21
|
||||
20 20 17 2 61 -8 20 -16 73 -17 118 -2 68 2 92 25 151 35 91 63 204 72 287 4
|
||||
46 11 68 22 72 13 5 14 16 9 54 -19 121 -19 122 -5 117 34 -12 39 8 24 104
|
||||
-10 70 -20 100 -36 117 l-22 24 17 137 c21 164 39 247 67 313 19 44 27 52 95
|
||||
85 53 27 74 42 72 54 -2 9 -13 17 -25 19 l-22 3 22 45 c30 63 18 79 -56 78
|
||||
-52 -1 -56 0 -54 20 2 17 -4 22 -31 24 -22 2 -34 -2 -38 -12 -3 -9 -15 -16
|
||||
-25 -16 -14 0 -19 7 -19 30 0 19 -7 34 -20 42 -11 7 -20 22 -21 33 0 11 -6 36
|
||||
-13 55 -12 32 -11 36 18 65 33 33 63 113 73 194 5 43 3 51 -16 63 -11 7 -21
|
||||
22 -21 34 0 35 -24 48 -57 31 -66 -35 -114 -121 -115 -206 -1 -49 -2 -52 -8
|
||||
-23 -10 44 3 150 24 189 8 17 32 45 53 62 47 39 90 41 123 6 20 -21 22 -28 12
|
||||
-49 -9 -20 -8 -27 5 -37 13 -11 18 -10 33 8 39 49 -14 141 -85 149 -23 2 -53
|
||||
-2 -70 -10z m60 -293 c-9 -32 -24 -66 -32 -76 -15 -16 -17 -16 -29 1 -18 26
|
||||
21 129 51 134 11 2 22 3 23 2 2 -2 -4 -29 -13 -61z m-90 17 c-4 -12 -9 -19
|
||||
-12 -17 -3 3 -2 15 2 27 4 12 9 19 12 17 3 -3 2 -15 -2 -27z m73 -339 c-2 -9
|
||||
-13 -17 -26 -19 -18 -3 -22 1 -22 21 0 21 4 23 25 19 17 -3 25 -10 23 -21z
|
||||
m-318 -56 c0 -10 -11 -15 -35 -15 -24 0 -35 5 -35 15 0 10 11 15 35 15 24 0
|
||||
35 -5 35 -15z m60 -4 c0 -6 -4 -13 -10 -16 -5 -3 -10 1 -10 9 0 9 5 16 10 16
|
||||
6 0 10 -4 10 -9z m484 -36 c-4 -8 -7 -15 -9 -15 -2 0 -5 7 -9 15 -3 9 0 15 9
|
||||
15 9 0 12 -6 9 -15z m-118 -21 c-3 -9 -9 -27 -12 -40 -12 -47 -37 -24 -28 25
|
||||
5 22 12 31 26 31 14 0 18 -5 14 -16z m-426 -18 c0 -8 -9 -18 -20 -21 -26 -8
|
||||
-27 -45 -1 -45 13 0 20 -10 25 -31 10 -51 7 -134 -6 -147 -9 -9 -9 -18 0 -37
|
||||
12 -26 17 -73 6 -63 -3 3 -22 79 -44 169 -27 116 -35 168 -28 176 15 18 68 17
|
||||
68 -1z m55 4 c3 -5 1 -10 -4 -10 -6 0 -11 5 -11 10 0 6 2 10 4 10 3 0 8 -4 11
|
||||
-10z m438 -3 c2 -7 -8 -27 -23 -46 l-28 -33 16 46 c17 47 26 56 35 33z m-183
|
||||
-22 c16 -19 1 -118 -29 -187 l-18 -43 -12 75 c-7 41 -18 94 -26 117 -12 38
|
||||
-12 42 3 46 37 10 70 6 82 -8z m-239 -87 l-19 -43 -1 47 c-1 37 3 47 17 50 25
|
||||
5 26 -6 3 -54z m308 -118 c-11 -35 -26 -106 -35 -159 -14 -85 -24 -125 -24
|
||||
-93 0 7 -9 12 -20 12 -11 0 -20 -4 -20 -10 0 -5 -4 -10 -10 -10 -5 0 -10 9
|
||||
-10 21 0 14 5 19 14 16 27 -11 34 16 20 72 -13 47 -13 59 0 85 8 17 21 48 30
|
||||
69 8 20 21 37 29 37 8 0 20 7 27 15 21 25 20 13 -1 -55z m-198 -93 c-8 -8 -11
|
||||
5 -10 54 l2 64 10 -53 c7 -39 7 -56 -2 -65z m10 -150 c-13 -13 -15 24 -3 63 6
|
||||
22 7 21 10 -14 2 -21 -1 -43 -7 -49z m-71 -163 c0 -34 -3 -45 -13 -41 -24 9
|
||||
-36 -8 -41 -57 -2 -31 -9 -52 -20 -58 -12 -7 -16 -24 -16 -71 0 -40 -3 -57 -9
|
||||
-48 -5 8 -18 12 -30 8 -19 -5 -21 -1 -21 47 0 60 16 158 32 199 14 37 54 67
|
||||
89 67 28 0 29 -2 29 -46z m-34 -476 c-3 -13 -6 -59 -7 -103 l0 -80 -15 49
|
||||
c-12 36 -13 55 -5 79 6 16 11 41 11 53 0 13 5 24 11 24 7 0 9 -9 5 -22z m213
|
||||
-108 c5 -3 2 -23 -4 -45 -13 -39 -13 -37 -12 45 0 47 2 67 4 45 3 -22 8 -42
|
||||
12 -45z m-122 -2 c-3 -18 -9 -73 -13 -122 -7 -91 -18 -97 -26 -13 -4 28 -2 47
|
||||
5 47 6 0 7 19 3 50 -7 55 -3 70 21 70 12 0 14 -7 10 -32z m-30 -375 c-3 -10
|
||||
-5 -2 -5 17 0 19 2 27 5 18 2 -10 2 -26 0 -35z m73 -105 c0 -25 -3 -29 -10
|
||||
-18 -13 20 -13 50 0 50 6 0 10 -15 10 -32z"/>
|
||||
<path d="M2029 3878 c-23 -43 -10 -225 27 -372 15 -57 15 -59 -7 -82 -18 -19
|
||||
-25 -21 -30 -11 -8 13 -61 268 -74 355 -7 43 -28 63 -46 45 -8 -8 51 -335 77
|
||||
-431 6 -19 -1 -25 -55 -50 -37 -16 -60 -33 -61 -43 0 -17 100 -118 138 -138
|
||||
39 -21 52 -8 52 51 -1 29 -5 73 -10 98 -7 39 -6 48 13 68 11 12 24 22 28 22 4
|
||||
0 19 -49 33 -108 15 -59 31 -114 36 -121 14 -23 39 -4 45 36 20 112 54 201 74
|
||||
189 4 -3 20 -36 35 -74 32 -83 58 -111 81 -92 9 7 14 19 11 25 -2 7 11 19 29
|
||||
28 19 9 42 29 52 44 9 15 28 38 40 50 40 38 26 143 -19 143 -44 0 -141 -85
|
||||
-154 -135 -6 -25 -7 -24 -26 15 -22 45 -58 61 -85 39 -20 -17 -63 -107 -63
|
||||
-133 0 -33 -11 -11 -29 62 -18 67 -18 70 0 93 10 13 19 32 19 43 0 15 -5 17
|
||||
-29 13 -28 -6 -28 -5 -45 70 -20 93 -32 234 -18 214 14 -19 42 -6 42 19 0 11
|
||||
-7 36 -14 55 -17 41 -49 47 -67 13z m471 -439 c0 -26 -85 -129 -106 -129 -36
|
||||
0 -4 83 48 124 40 31 58 33 58 5z m-506 -146 c3 -10 8 -35 12 -57 6 -35 5 -37
|
||||
-12 -28 -11 6 -32 24 -48 40 l-28 30 28 16 c37 20 42 20 48 -1z"/>
|
||||
<path d="M5786 3891 c-3 -5 8 -38 24 -75 32 -69 37 -100 19 -111 -17 -11 -28
|
||||
-49 -17 -62 11 -13 38 -6 38 10 0 6 7 19 17 29 23 26 18 77 -16 153 -27 60
|
||||
-51 80 -65 56z"/>
|
||||
<path d="M10718 3754 c-8 -17 -27 -32 -48 -39 -37 -12 -52 -42 -29 -56 28 -17
|
||||
-5 -22 -129 -20 -109 2 -136 -1 -181 -18 -64 -26 -148 -27 -222 -4 -44 14 -85
|
||||
16 -224 13 -199 -4 -404 -3 -675 1 -229 4 -268 -4 -283 -61 -6 -24 -5 -35 5
|
||||
-41 22 -14 42 -5 48 21 12 50 137 61 390 34 131 -14 177 -15 305 -5 222 17
|
||||
346 14 435 -9 99 -26 146 -25 224 4 61 23 74 24 191 19 122 -6 126 -5 150 17
|
||||
14 13 25 35 25 49 l0 25 21 -23 c19 -21 21 -33 20 -139 -1 -64 3 -180 8 -257
|
||||
6 -77 16 -227 21 -334 11 -202 25 -325 60 -525 12 -69 17 -123 11 -130 -4 -6
|
||||
-11 -42 -14 -79 -4 -37 -9 -72 -11 -76 -3 -5 -45 -11 -93 -15 -105 -8 -274
|
||||
-38 -398 -71 -160 -42 -246 -54 -450 -64 -140 -7 -221 -16 -270 -29 -249 -68
|
||||
-259 -70 -405 -76 l-145 -5 3 114 c2 72 -4 182 -18 300 -17 150 -18 195 -9
|
||||
223 14 42 7 206 -16 372 -9 66 -18 219 -21 360 -2 135 -6 251 -9 258 -2 6 -14
|
||||
12 -25 12 -18 0 -20 -7 -21 -62 -1 -35 -4 -74 -8 -88 -5 -15 -3 -35 5 -51 7
|
||||
-15 13 -66 13 -125 1 -54 5 -146 11 -204 13 -144 12 -160 -4 -160 -8 0 -16 6
|
||||
-19 14 -4 11 -14 12 -44 5 -57 -13 -83 -11 -83 6 0 21 -27 19 -65 -5 -29 -18
|
||||
-39 -19 -86 -9 -98 19 -144 38 -154 62 -12 26 -77 45 -170 49 -55 3 -60 1 -63
|
||||
-19 -3 -23 24 -36 108 -48 71 -11 80 -19 80 -73 0 -26 -9 -65 -19 -87 -16 -35
|
||||
-24 -42 -67 -53 -27 -7 -75 -23 -107 -37 l-58 -23 -102 24 c-155 38 -225 42
|
||||
-288 14 -49 -20 -57 -21 -132 -10 -84 12 -133 6 -225 -27 -47 -17 -146 -12
|
||||
-436 23 -107 13 -148 14 -242 4 -87 -9 -132 -9 -195 1 -54 8 -150 10 -274 7
|
||||
-151 -4 -206 -2 -270 11 -77 15 -80 17 -83 46 -3 35 -22 85 -31 85 -19 0 -28
|
||||
-25 -24 -64 l5 -43 -78 -6 c-44 -3 -102 -15 -130 -26 -36 -14 -88 -22 -180
|
||||
-27 -143 -7 -176 0 -167 36 8 30 -23 37 -47 10 -24 -28 -17 -45 34 -75 41 -24
|
||||
43 -24 181 -14 90 6 160 16 195 29 30 10 86 22 123 26 l68 7 -7 -40 c-4 -28
|
||||
-2 -43 6 -48 16 -10 40 21 40 52 0 27 -4 27 90 7 59 -12 106 -14 223 -8 98 4
|
||||
195 2 285 -6 99 -9 167 -10 247 -3 81 7 134 6 200 -3 127 -18 340 -36 404 -34
|
||||
30 1 71 8 90 17 28 13 69 17 181 17 97 1 152 5 167 14 35 20 144 14 249 -13
|
||||
117 -30 129 -31 189 -4 40 18 51 19 71 9 12 -7 30 -10 39 -6 15 5 16 1 9 -31
|
||||
-4 -21 -8 -50 -9 -65 -1 -16 -9 -36 -17 -45 -39 -45 -42 -83 -7 -83 32 0 177
|
||||
57 237 94 31 19 120 87 197 150 77 64 141 113 142 109 2 -5 16 -107 33 -228
|
||||
30 -217 50 -468 47 -595 l-2 -65 80 4 c44 2 123 4 175 6 73 2 124 11 220 38
|
||||
191 55 201 57 415 67 150 7 231 16 319 35 65 14 122 27 126 30 19 12 259 55
|
||||
361 66 99 9 113 9 129 -6 17 -15 19 -15 34 7 18 25 22 68 6 68 -16 0 -12 70 5
|
||||
86 8 9 13 25 11 37 -3 12 -8 49 -11 82 -3 33 -12 94 -20 135 -41 219 -66 569
|
||||
-71 1030 l-4 275 -29 3 c-24 3 -32 -2 -43 -24z m-2073 -993 c-12 -12 -16 -11
|
||||
-30 3 -18 17 -22 16 -73 -21 l-33 -25 7 29 c14 64 7 61 79 43 55 -13 62 -17
|
||||
50 -29z m138 -16 c-23 -32 -36 -32 -21 0 6 14 17 25 25 25 11 0 10 -6 -4 -25z
|
||||
m-81 -17 c-7 -7 -12 -8 -12 -2 0 14 12 26 19 19 2 -3 -1 -11 -7 -17z m285 -20
|
||||
c-3 -7 -5 -2 -5 12 0 14 2 19 5 13 2 -7 2 -19 0 -25z m-177 -41 c-8 -7 -44
|
||||
-38 -80 -67 -43 -36 -55 -43 -35 -21 17 19 50 49 75 67 46 34 66 45 40 21z
|
||||
m-115 -15 c-16 -11 -208 -137 -223 -146 -21 -13 -3 43 30 91 22 33 36 44 66
|
||||
48 20 4 42 8 47 10 20 7 90 4 80 -3z m-35 -106 c0 -2 -8 -10 -17 -17 -16 -13
|
||||
-17 -12 -4 4 13 16 21 21 21 13z m-150 -89 c0 -11 -29 -26 -90 -44 -8 -3 5 9
|
||||
30 26 50 34 60 37 60 18z"/>
|
||||
<path d="M1307 3764 c-3 -4 -4 -26 0 -50 3 -23 2 -51 -2 -61 -4 -10 -9 -27
|
||||
-11 -38 -2 -11 -19 -74 -39 -140 -20 -66 -38 -132 -40 -146 -5 -38 -43 -147
|
||||
-72 -207 -26 -55 -25 -86 3 -80 16 3 70 124 99 223 l15 54 58 6 c31 3 67 8 79
|
||||
10 19 4 25 -5 52 -76 17 -45 34 -92 37 -105 7 -28 29 -48 44 -39 13 8 11 126
|
||||
-3 190 -10 43 -17 53 -48 68 -32 15 -40 27 -67 100 -41 110 -43 120 -57 212
|
||||
-8 57 -15 81 -26 83 -8 1 -18 0 -22 -4z m59 -297 l31 -82 -36 -7 c-62 -12 -81
|
||||
-10 -81 10 0 24 42 162 49 162 3 0 20 -37 37 -83z"/>
|
||||
<path d="M2574 3645 c-4 -9 5 -68 19 -133 15 -64 29 -137 33 -162 4 -25 11
|
||||
-51 17 -58 17 -21 37 7 37 52 0 66 42 140 94 165 50 25 85 27 100 5 14 -19 46
|
||||
-9 46 15 0 29 -22 41 -75 41 -69 -1 -128 -29 -161 -80 -33 -49 -34 -47 -54 70
|
||||
-13 74 -24 100 -42 100 -5 0 -11 -7 -14 -15z"/>
|
||||
<path d="M1568 3513 c-33 -38 11 -300 60 -355 31 -36 51 -22 87 57 19 42 38
|
||||
87 41 100 3 14 9 25 13 25 3 0 19 -34 35 -75 29 -77 47 -102 66 -90 18 11 11
|
||||
69 -10 87 -10 9 -31 56 -46 103 -14 47 -31 88 -36 91 -16 10 -34 -18 -51 -81
|
||||
-18 -68 -65 -180 -73 -173 -2 3 -14 32 -26 64 -16 44 -21 84 -22 158 -1 103
|
||||
-9 122 -38 89z"/>
|
||||
<path d="M9870 3293 c-93 -17 -287 -149 -355 -241 -43 -58 -77 -145 -73 -186
|
||||
5 -50 29 -37 45 24 26 101 83 175 207 267 32 23 61 43 65 43 3 0 6 -102 7
|
||||
-228 1 -185 5 -253 23 -367 30 -184 36 -254 23 -267 -7 -7 -35 7 -92 48 -45
|
||||
33 -88 63 -96 69 -9 6 -17 6 -25 -2 -10 -10 -8 -17 6 -33 39 -43 192 -144 247
|
||||
-163 56 -19 57 -19 90 0 33 19 94 119 188 307 39 77 39 79 23 107 -9 16 -52
|
||||
63 -94 105 l-76 76 29 77 c16 42 33 108 37 147 21 180 -32 244 -179 217z m127
|
||||
-74 c28 -53 11 -182 -38 -302 -15 -38 -25 -75 -23 -82 3 -6 32 -36 65 -65 32
|
||||
-29 73 -70 90 -91 l31 -39 -83 -153 c-90 -167 -112 -197 -143 -197 -38 0 -47
|
||||
13 -34 47 9 24 7 56 -11 164 -31 189 -40 275 -48 424 -5 111 -3 135 11 163 17
|
||||
34 14 70 -10 109 -13 21 -11 22 34 37 92 29 139 25 159 -15z"/>
|
||||
<path d="M5883 3273 c-4 -9 -2 -18 5 -21 8 -2 9 -38 5 -121 -7 -142 1 -211 25
|
||||
-211 15 0 17 17 17 173 0 94 -4 178 -8 185 -12 17 -37 15 -44 -5z"/>
|
||||
<path d="M12924 3148 c-6 -7 -10 -49 -9 -93 1 -61 5 -80 15 -80 26 0 41 46 34
|
||||
105 -7 61 -24 90 -40 68z"/>
|
||||
<path d="M1894 2590 c-97 -20 -167 -70 -199 -140 -21 -46 -13 -75 21 -75 14 0
|
||||
18 6 16 24 -3 31 32 85 71 110 102 62 342 56 377 -10 25 -46 -1 -138 -49 -177
|
||||
-23 -18 -108 -62 -121 -62 -5 0 -10 15 -10 34 0 37 -15 49 -42 35 -14 -7 -15
|
||||
-15 -6 -45 8 -32 7 -38 -12 -51 -11 -8 -19 -20 -17 -26 2 -7 -3 -17 -11 -23
|
||||
-9 -7 -13 -18 -9 -28 5 -13 14 -16 41 -11 30 6 34 4 41 -22 5 -15 9 -73 10
|
||||
-128 2 -90 4 -100 21 -100 15 0 20 10 26 50 7 48 -4 162 -18 200 -7 17 -2 18
|
||||
77 12 100 -7 171 -31 216 -73 55 -52 41 -124 -42 -213 -61 -65 -113 -85 -200
|
||||
-79 -82 7 -145 37 -270 130 -60 44 -101 68 -111 64 -26 -10 -11 -28 82 -98
|
||||
104 -79 191 -124 266 -139 139 -28 285 59 339 202 23 61 24 79 2 124 -34 71
|
||||
-132 115 -278 124 l-100 6 60 28 c85 40 119 70 149 129 32 64 33 114 4 158
|
||||
-36 53 -86 72 -191 76 -51 2 -110 -1 -133 -6z"/>
|
||||
<path d="M13047 2308 c15 -78 10 -125 -17 -153 -17 -18 -21 -28 -13 -36 18
|
||||
-18 45 -6 65 31 16 28 18 48 14 100 -6 81 -13 100 -38 100 -18 0 -19 -4 -11
|
||||
-42z"/>
|
||||
<path d="M5932 1898 c-14 -17 7 -108 26 -115 24 -10 31 10 21 59 -12 53 -30
|
||||
75 -47 56z"/>
|
||||
<path d="M13006 1742 c-3 -5 6 -43 20 -83 21 -61 25 -88 22 -153 -3 -87 8
|
||||
-106 38 -61 14 21 16 40 11 99 -11 124 -64 241 -91 198z"/>
|
||||
<path d="M5995 1360 c-10 -16 14 -118 33 -136 14 -15 17 -15 28 1 10 13 10 23
|
||||
3 37 -6 10 -13 38 -17 61 -7 41 -32 61 -47 37z"/>
|
||||
<path d="M13062 1237 c-12 -17 1 -62 18 -62 21 0 26 61 6 68 -8 3 -19 0 -24
|
||||
-6z"/>
|
||||
<path d="M5842 797 c-8 -10 -1 -54 29 -178 23 -90 45 -207 50 -259 4 -52 8
|
||||
-96 9 -97 0 -2 10 -3 21 -3 21 0 22 3 16 86 -3 47 -23 156 -43 242 -20 86 -40
|
||||
170 -43 186 -7 34 -23 43 -39 23z"/>
|
||||
<path d="M12818 743 c-9 -19 -39 -42 -98 -73 -47 -25 -107 -60 -133 -78 -27
|
||||
-18 -66 -41 -88 -52 -37 -20 -50 -42 -29 -55 11 -7 66 20 146 73 32 21 96 58
|
||||
142 82 85 44 106 65 100 102 -5 32 -25 33 -40 1z"/>
|
||||
<path d="M11192 453 c3 -19 51 -31 125 -32 46 -1 61 12 43 34 -9 11 -35 15
|
||||
-92 15 -70 0 -79 -2 -76 -17z"/>
|
||||
<path d="M10620 431 c0 -21 40 -31 132 -31 60 0 78 11 58 35 -9 11 -36 15
|
||||
-101 15 -80 0 -89 -2 -89 -19z"/>
|
||||
<path d="M11781 420 c-25 -16 -43 -20 -65 -15 -90 18 -98 18 -94 0 4 -24 94
|
||||
-58 134 -50 18 3 37 12 44 20 21 25 125 19 195 -11 146 -64 160 -66 227 -48
|
||||
60 17 80 36 60 56 -7 7 -24 5 -56 -7 -55 -21 -82 -17 -196 32 -109 47 -198 55
|
||||
-249 23z"/>
|
||||
<path d="M9637 423 c-27 -27 39 -69 125 -79 42 -5 56 -3 67 9 20 25 5 36 -48
|
||||
35 -30 0 -64 8 -89 21 -46 24 -46 24 -55 14z"/>
|
||||
<path d="M8340 391 c0 -20 -115 -53 -195 -56 -70 -3 -80 -5 -80 -22 0 -40 198
|
||||
-22 280 25 37 22 47 62 16 62 -12 0 -21 -4 -21 -9z"/>
|
||||
<path d="M9123 384 c-4 -11 1 -22 13 -30 30 -21 42 -33 52 -50 11 -19 42 -13
|
||||
42 9 0 19 -52 75 -78 82 -16 5 -24 1 -29 -11z"/>
|
||||
<path d="M7300 333 c-62 -16 -90 -37 -73 -54 7 -7 29 -5 74 7 87 24 226 24
|
||||
309 1 74 -21 125 -20 125 3 0 8 -11 16 -25 18 -14 2 -58 12 -99 23 -90 23
|
||||
-230 24 -311 2z"/>
|
||||
<path d="M8728 333 c-68 -3 -78 -6 -78 -23 0 -14 10 -20 40 -25 52 -9 136 3
|
||||
150 20 15 18 4 36 -18 33 -9 -1 -52 -4 -94 -5z"/>
|
||||
<path d="M10150 324 c0 -8 14 -27 30 -41 18 -15 30 -34 30 -49 0 -29 25 -32
|
||||
40 -4 19 36 -36 110 -82 110 -10 0 -18 -7 -18 -16z"/>
|
||||
<path d="M6194 265 c-20 -52 121 -88 219 -56 44 15 49 48 7 43 -135 -15 -141
|
||||
-15 -170 7 -34 25 -49 26 -56 6z"/>
|
||||
<path d="M6120 251 c0 -26 17 -36 35 -21 18 15 8 40 -16 40 -12 0 -19 -7 -19
|
||||
-19z"/>
|
||||
<path d="M7073 263 c-54 -3 -63 -7 -63 -23 0 -35 121 -40 150 -5 13 16 5 36
|
||||
-13 33 -7 -1 -40 -3 -74 -5z"/>
|
||||
<path d="M6705 189 c-12 -19 12 -32 69 -37 46 -4 57 -1 62 12 4 9 4 19 1 22
|
||||
-11 11 -126 14 -132 3z"/>
|
||||
</g>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 32 KiB |
625
docs/images/dts-authors-reading.svg
Normal file
625
docs/images/dts-authors-reading.svg
Normal file
|
|
@ -0,0 +1,625 @@
|
|||
<?xml version="1.0" standalone="no"?>
|
||||
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 20010904//EN"
|
||||
"http://www.w3.org/TR/2001/REC-SVG-20010904/DTD/svg10.dtd">
|
||||
<svg version="1.0" xmlns="http://www.w3.org/2000/svg"
|
||||
width="2106.000000pt" height="1066.000000pt" viewBox="0 0 2106.000000 1066.000000"
|
||||
preserveAspectRatio="xMidYMid meet">
|
||||
<metadata>
|
||||
Created by potrace 1.16, written by Peter Selinger 2001-2019
|
||||
</metadata>
|
||||
<g transform="translate(0.000000,1066.000000) scale(0.100000,-0.100000)"
|
||||
fill="#000000" stroke="none">
|
||||
<path d="M18774 10618 c-26 -51 -92 -107 -171 -145 -51 -23 -73 -39 -73 -52 0
|
||||
-14 -17 -23 -72 -39 -148 -42 -296 -71 -401 -78 -91 -6 -107 -9 -105 -23 3
|
||||
-14 20 -16 118 -14 181 2 475 79 592 155 67 42 158 162 158 207 0 32 -27 25
|
||||
-46 -11z"/>
|
||||
<path d="M17828 10595 c-14 -13 -49 -57 -77 -97 -27 -40 -65 -82 -83 -92 -26
|
||||
-16 -30 -16 -20 -4 26 32 -15 53 -144 78 -66 12 -180 40 -254 61 -135 39 -233
|
||||
49 -300 30 -31 -9 -36 -48 -5 -43 86 14 185 5 280 -25 55 -18 159 -44 230 -58
|
||||
126 -25 175 -41 175 -55 0 -4 -18 -14 -41 -23 -30 -12 -40 -21 -37 -34 5 -24
|
||||
28 -20 108 20 43 21 74 46 95 73 16 23 46 63 65 89 19 27 44 53 55 59 40 22
|
||||
41 46 2 46 -12 0 -34 -11 -49 -25z"/>
|
||||
<path d="M16109 10519 c-14 -21 -15 -21 -122 -5 -189 28 -219 22 -320 -69 -37
|
||||
-33 -84 -64 -117 -76 -63 -24 -117 -23 -470 7 -271 22 -331 18 -665 -55 -104
|
||||
-23 -120 -29 -120 -46 0 -25 -8 -25 205 18 320 66 305 65 775 22 230 -22 313
|
||||
-4 414 89 47 43 91 76 102 76 3 0 5 -10 5 -22 -1 -22 2 -23 129 -29 101 -5
|
||||
140 -4 174 8 32 11 80 14 180 12 117 -3 136 -1 139 13 4 23 -20 29 -150 35
|
||||
-106 5 -118 8 -118 25 0 24 -24 23 -41 -3z"/>
|
||||
<path d="M19094 10485 c-8 -20 5 -38 23 -31 16 6 15 5 -29 -61 -44 -64 -60
|
||||
-109 -45 -121 16 -14 29 -4 45 31 7 16 33 60 58 98 25 39 43 77 40 85 -7 19
|
||||
-85 19 -92 -1z"/>
|
||||
<path d="M6973 10454 c-24 -6 -38 -30 -21 -40 5 -4 52 -6 104 -5 101 2 116 -1
|
||||
389 -88 233 -75 310 -87 469 -72 72 7 138 13 146 14 24 3 17 31 -10 37 -13 3
|
||||
-58 2 -100 -3 -41 -5 -120 -6 -175 -4 -103 5 -136 14 -470 118 -127 39 -267
|
||||
57 -332 43z"/>
|
||||
<path d="M10220 10413 c-87 -39 -204 -63 -305 -63 -101 0 -129 -8 -118 -36 10
|
||||
-26 195 -18 299 11 134 39 194 65 194 87 0 22 -23 23 -70 1z"/>
|
||||
<path d="M8753 10390 c-41 -18 -55 -42 -33 -55 5 -3 23 1 39 9 43 23 158 31
|
||||
221 16 33 -8 85 -35 141 -73 79 -53 97 -61 147 -65 64 -5 110 10 167 54 46 35
|
||||
59 58 41 73 -11 9 -24 3 -60 -28 -54 -46 -109 -66 -159 -57 -19 4 -68 30 -108
|
||||
58 -103 72 -150 88 -262 88 -69 0 -103 -5 -134 -20z"/>
|
||||
<path d="M10614 10379 c-11 -19 13 -32 134 -75 64 -23 137 -49 162 -59 67 -25
|
||||
162 -17 224 19 66 38 48 52 -35 26 -76 -24 -120 -25 -174 -4 -67 26 -290 104
|
||||
-297 104 -4 0 -10 -5 -14 -11z"/>
|
||||
<path d="M6700 10334 c-88 -29 -219 -53 -311 -60 -79 -5 -109 -3 -189 17 -84
|
||||
21 -118 24 -305 24 -222 0 -280 -9 -273 -44 4 -17 9 -17 108 -1 83 15 332 6
|
||||
425 -15 148 -33 165 -35 260 -25 94 10 285 50 338 72 17 6 27 17 25 27 -4 21
|
||||
-24 22 -78 5z"/>
|
||||
<path d="M2349 10324 c-48 -14 -119 -80 -119 -109 0 -21 -57 -101 -112 -155
|
||||
-49 -49 -50 -50 -26 -127 9 -32 31 -43 43 -23 3 5 1 26 -4 47 -10 34 -8 39 24
|
||||
70 19 19 42 47 50 64 15 28 16 29 40 13 44 -29 51 -9 30 77 -5 20 0 33 27 61
|
||||
64 68 215 73 345 12 70 -33 196 -128 251 -188 42 -46 72 -55 72 -22 0 23 -117
|
||||
131 -208 192 -108 74 -194 104 -292 103 -41 0 -96 -7 -121 -15z"/>
|
||||
<path d="M3196 10299 c-47 -37 -20 -70 28 -34 33 25 100 17 326 -34 212 -49
|
||||
393 -81 462 -81 53 0 198 28 213 42 6 5 3 14 -7 24 -13 14 -22 14 -50 5 -117
|
||||
-39 -221 -32 -520 35 -270 60 -290 63 -359 64 -52 0 -72 -4 -93 -21z"/>
|
||||
<path d="M3970 10307 c0 -9 4 -19 10 -22 5 -3 90 -10 187 -15 179 -9 275 -28
|
||||
272 -54 -4 -34 1 -36 94 -36 52 0 144 -9 205 -20 193 -35 493 -63 508 -47 4 3
|
||||
4 12 1 19 -3 10 -58 19 -189 31 -101 10 -234 27 -294 38 -60 11 -150 22 -201
|
||||
26 -51 3 -90 10 -87 14 7 12 -34 35 -96 54 -37 11 -112 18 -232 22 -159 5
|
||||
-178 4 -178 -10z"/>
|
||||
<path d="M13515 10304 c-16 -3 -91 -13 -165 -24 -74 -11 -162 -21 -195 -23
|
||||
-54 -2 -60 -4 -63 -24 -3 -22 0 -23 57 -23 33 0 129 11 213 25 84 13 188 27
|
||||
231 31 65 5 78 9 75 22 -3 13 -16 17 -63 18 -33 1 -73 0 -90 -2z"/>
|
||||
<path d="M12355 10273 c-49 -9 -157 -15 -280 -17 -171 -2 -200 -5 -203 -18 -4
|
||||
-23 27 -28 200 -28 108 0 200 6 295 21 88 13 172 19 233 17 89 -3 95 -2 95 17
|
||||
0 19 -7 20 -130 22 -79 1 -161 -5 -210 -14z"/>
|
||||
<path d="M6770 10261 c0 -17 11 -20 108 -26 59 -3 139 -13 179 -21 40 -8 102
|
||||
-14 138 -14 57 0 65 2 65 19 0 16 -11 19 -81 26 -45 3 -111 13 -148 21 -36 7
|
||||
-110 14 -163 14 -90 0 -98 -2 -98 -19z"/>
|
||||
<path d="M5905 10170 c-11 -5 -41 -9 -66 -9 -32 -1 -49 -6 -52 -16 -7 -16 -3
|
||||
-20 36 -29 17 -4 51 0 83 9 42 12 54 20 54 35 0 21 -20 25 -55 10z"/>
|
||||
<path d="M3115 9750 c-120 -13 -319 -83 -357 -127 -10 -10 -19 -34 -20 -53 -3
|
||||
-31 0 -35 22 -35 21 0 25 5 25 30 0 26 7 33 55 57 30 15 93 40 140 55 85 28
|
||||
85 28 416 31 l331 3 17 -45 c13 -33 23 -46 37 -46 24 0 24 23 -1 78 -12 26
|
||||
-29 46 -45 52 -30 11 -513 11 -620 0z"/>
|
||||
<path d="M9821 9653 c-33 -72 -40 -434 -15 -719 11 -136 12 -184 4 -205 -15
|
||||
-36 9 -123 45 -161 20 -22 35 -28 68 -28 54 1 122 31 169 77 l36 35 16 -30 c8
|
||||
-16 32 -41 53 -54 51 -31 150 -32 209 -1 45 24 134 116 134 139 0 8 4 14 9 14
|
||||
5 0 15 16 22 35 7 19 18 35 24 35 23 0 116 -31 113 -38 -65 -126 -79 -163 -68
|
||||
-176 14 -18 40 -10 40 11 0 8 16 46 36 84 43 81 47 82 147 39 87 -37 155 -91
|
||||
159 -128 4 -35 41 -39 46 -4 8 52 -80 129 -199 177 l-80 32 94 104 c52 57 99
|
||||
114 106 127 13 24 8 42 -13 42 -13 0 -76 -61 -76 -74 0 -4 -35 -47 -77 -94
|
||||
-85 -95 -84 -95 -179 -67 -52 15 -54 17 -54 50 0 48 -19 84 -47 92 -14 3 -57
|
||||
3 -96 1 -80 -5 -151 -32 -209 -78 l-36 -29 -7 62 c-19 159 -71 188 -224 121
|
||||
-31 -14 -70 -39 -87 -56 l-32 -30 -7 34 c-10 43 -10 475 0 557 4 37 10 58 15
|
||||
51 13 -22 40 -3 40 28 0 56 -57 73 -79 25z m319 -671 c25 -92 5 -219 -46 -293
|
||||
-32 -47 -104 -96 -152 -105 -31 -6 -39 -3 -59 20 -27 32 -29 51 -8 73 13 13
|
||||
15 33 9 124 -8 123 -2 140 61 179 53 33 146 60 167 49 9 -5 22 -26 28 -47z
|
||||
m374 -62 c19 -7 26 -17 26 -35 0 -30 -4 -30 -66 -6 -27 11 -58 23 -69 26 -19
|
||||
7 -18 8 5 15 36 11 75 11 104 0z m-184 -54 c0 -32 20 -44 36 -21 14 19 27 18
|
||||
112 -12 48 -16 52 -20 46 -43 -3 -14 -14 -33 -25 -43 -11 -10 -17 -22 -14 -28
|
||||
10 -15 -35 -69 -83 -100 -37 -24 -57 -29 -105 -29 -54 0 -62 3 -94 35 -33 33
|
||||
-35 39 -30 80 6 56 44 116 99 155 50 36 58 37 58 6z"/>
|
||||
<path d="M9135 9552 c-15 -11 -13 -850 3 -1062 20 -269 23 -284 49 -288 19 -3
|
||||
23 3 28 42 5 29 3 51 -4 60 -25 29 -42 389 -40 816 2 229 -1 421 -5 428 -8 14
|
||||
-17 15 -31 4z"/>
|
||||
<path d="M2184 9515 c-9 -14 -25 -58 -35 -97 -14 -52 -26 -79 -45 -94 -22 -18
|
||||
-25 -26 -19 -55 4 -19 13 -43 20 -55 7 -11 20 -44 29 -73 8 -29 26 -65 40 -81
|
||||
25 -30 48 -87 62 -155 6 -25 15 -40 24 -40 38 0 16 114 -39 206 -21 35 -44 81
|
||||
-51 102 -7 22 -18 51 -26 65 -18 36 -18 44 5 64 11 9 25 36 31 60 6 24 20 68
|
||||
30 99 24 67 24 65 5 73 -9 3 -21 -4 -31 -19z"/>
|
||||
<path d="M19169 9258 c-1 -7 0 -27 1 -45 1 -26 -7 -41 -44 -78 -51 -52 -87
|
||||
-120 -90 -168 -2 -52 26 -40 48 21 11 31 40 76 72 112 59 66 71 95 57 137 -10
|
||||
29 -42 45 -44 21z"/>
|
||||
<path d="M11840 9102 c-107 -40 -273 -156 -316 -222 -24 -36 -26 -43 -14 -65
|
||||
20 -37 55 -45 205 -48 123 -2 146 -5 187 -25 93 -46 173 -162 199 -290 18 -87
|
||||
1 -139 -56 -166 -37 -19 -43 -19 -116 -4 -83 17 -295 101 -453 180 -92 45
|
||||
-126 53 -126 29 0 -18 99 -71 270 -144 214 -91 295 -117 370 -117 128 0 186
|
||||
100 149 260 -26 114 -126 247 -219 292 -38 19 -68 23 -197 28 -106 4 -157 10
|
||||
-165 19 -26 26 184 192 290 229 38 13 39 9 11 -37 -22 -36 -14 -59 16 -47 20
|
||||
7 67 110 59 131 -8 19 -37 18 -94 -3z"/>
|
||||
<path d="M11222 9048 c-102 -38 -172 -135 -160 -219 4 -24 1 -26 -20 -23 -35
|
||||
7 -62 -5 -62 -26 0 -14 11 -19 54 -24 48 -6 56 -11 66 -37 20 -48 111 -118
|
||||
181 -140 63 -20 174 -25 198 -10 8 5 11 16 8 24 -4 11 -29 16 -99 19 -62 3
|
||||
-106 10 -131 22 -46 23 -130 102 -122 116 3 6 22 10 40 10 19 0 78 14 131 31
|
||||
125 40 162 72 179 155 14 68 8 87 -35 109 -43 22 -162 19 -228 -7z m197 -29
|
||||
c17 -6 31 -18 31 -26 0 -38 -26 -96 -50 -113 -38 -27 -167 -70 -232 -77 l-58
|
||||
-6 0 49 c0 30 7 61 19 80 46 76 198 125 290 93z"/>
|
||||
<path d="M9333 8964 c-11 -30 6 -279 26 -369 11 -49 27 -124 36 -165 19 -89
|
||||
37 -120 63 -113 27 7 33 31 87 333 18 100 53 197 66 183 4 -4 16 -51 28 -103
|
||||
42 -196 87 -340 114 -368 12 -11 16 -11 25 1 9 10 7 26 -9 68 -29 75 -63 195
|
||||
-90 318 -37 168 -79 192 -131 74 -26 -58 -42 -125 -75 -320 -17 -103 -27 -119
|
||||
-36 -61 -3 18 -17 87 -31 153 -20 95 -26 148 -26 253 0 126 -1 132 -20 132
|
||||
-11 0 -23 -7 -27 -16z"/>
|
||||
<path d="M2229 8738 c-1 -2 -4 -43 -6 -93 -2 -49 -5 -103 -6 -120 -1 -21 3
|
||||
-30 13 -30 24 0 41 71 38 159 -3 68 -6 81 -20 84 -10 2 -19 2 -19 0z"/>
|
||||
<path d="M19064 8380 c-7 -7 0 -32 22 -78 46 -96 84 -257 84 -356 0 -89 -9
|
||||
-125 -71 -299 -32 -90 -39 -121 -30 -130 17 -17 35 8 64 93 14 41 37 108 51
|
||||
148 46 132 44 246 -9 428 -25 89 -74 196 -90 201 -6 2 -15 -1 -21 -7z"/>
|
||||
<path d="M2305 8279 c-4 -5 -1 -23 5 -40 17 -40 -1 -80 -51 -113 -42 -28 -46
|
||||
-35 -28 -53 9 -9 23 -5 55 18 49 34 74 73 74 118 0 57 -36 103 -55 70z"/>
|
||||
<path d="M16740 8250 c-36 -4 -128 -22 -205 -39 -275 -60 -408 -77 -719 -91
|
||||
-131 -6 -332 -24 -464 -40 -128 -17 -248 -30 -268 -30 -35 0 -56 -22 -38 -40
|
||||
10 -9 205 9 389 35 61 8 198 20 305 25 401 21 554 40 820 102 122 29 150 32
|
||||
300 32 133 0 185 -4 270 -22 157 -33 340 -61 443 -67 150 -10 141 -4 133 -88
|
||||
-4 -40 -12 -92 -19 -117 -6 -27 -12 -152 -12 -310 -2 -195 -7 -294 -19 -375
|
||||
-47 -301 -49 -386 -10 -570 15 -67 18 -148 19 -511 1 -237 5 -436 9 -442 16
|
||||
-27 8 -319 -14 -467 -20 -133 -22 -174 -16 -360 3 -115 10 -235 15 -265 53
|
||||
-313 54 -324 58 -608 4 -225 1 -313 -12 -435 -16 -138 -16 -179 -5 -439 13
|
||||
-286 11 -389 -11 -512 l-11 -64 -26 13 c-30 15 -95 32 -162 45 -25 4 -70 15
|
||||
-100 25 -117 37 -269 67 -366 72 -131 7 -309 -23 -488 -82 -181 -59 -205 -63
|
||||
-511 -75 -148 -6 -317 -17 -375 -26 -58 -8 -161 -17 -230 -21 -135 -6 -191 4
|
||||
-376 63 -213 69 -304 64 -481 -22 -107 -51 -113 -56 -113 -84 0 -23 4 -30 20
|
||||
-30 11 0 20 7 20 15 0 9 37 33 95 61 73 35 115 49 176 57 93 12 116 8 314 -53
|
||||
165 -51 279 -65 417 -50 57 6 110 13 118 15 39 11 250 26 476 34 263 10 318
|
||||
20 515 90 100 36 335 74 420 68 75 -5 248 -42 364 -77 33 -10 83 -23 110 -29
|
||||
136 -30 149 -36 156 -71 13 -61 53 -62 63 -2 37 218 39 243 31 547 -10 360 -9
|
||||
424 7 535 7 50 12 204 12 370 1 286 -1 315 -44 580 -45 273 -50 481 -19 681
|
||||
24 149 24 177 16 884 -5 401 -7 463 -27 570 -35 199 -36 276 -5 465 23 141 29
|
||||
210 35 470 4 168 13 323 18 345 6 22 12 78 14 125 l3 85 -107 7 c-126 7 -277
|
||||
29 -483 68 -166 31 -326 43 -425 30z"/>
|
||||
<path d="M10470 8105 c-16 -20 -4 -35 28 -35 15 0 41 -9 57 -20 l30 -20 -40 0
|
||||
c-59 0 -288 28 -383 46 -84 17 -122 16 -262 -6 -41 -7 -105 -9 -141 -6 -56 5
|
||||
-71 3 -90 -12 -31 -26 -16 -42 38 -42 l46 0 -7 -32 c-29 -145 -32 -365 -8
|
||||
-662 6 -76 14 -208 17 -294 3 -86 10 -161 15 -166 5 -5 31 14 67 51 32 33 73
|
||||
65 92 72 54 18 319 14 372 -5 29 -11 73 -16 130 -15 l87 2 7 -33 c3 -18 9
|
||||
-173 12 -345 4 -275 3 -315 -11 -335 -9 -12 -16 -30 -16 -39 0 -15 -5 -16 -36
|
||||
-6 -19 6 -40 19 -45 29 -19 36 -44 21 -40 -24 1 -9 -5 -27 -13 -40 -17 -26
|
||||
-11 -42 21 -52 15 -5 33 -29 52 -69 44 -94 47 -107 22 -114 -12 -3 -21 -13
|
||||
-21 -24 0 -29 -16 -31 -34 -4 -9 14 -25 25 -36 25 -25 0 -25 -7 -1 -47 l20
|
||||
-32 -227 0 c-249 1 -221 5 -448 -75 -159 -57 -370 -71 -704 -49 -150 9 -172
|
||||
13 -235 41 -94 41 -136 51 -228 53 -43 1 -101 6 -130 11 -29 5 -142 10 -252
|
||||
13 -110 2 -218 8 -240 14 -22 6 -102 11 -178 11 -119 0 -158 4 -270 31 -149
|
||||
34 -153 35 -297 43 -58 4 -118 9 -134 12 l-28 6 6 60 c5 39 3 64 -4 73 -14 17
|
||||
-5 69 16 86 18 15 18 48 0 55 -11 4 -13 21 -9 77 5 60 3 75 -11 86 -24 20 -34
|
||||
7 -65 -86 l-26 -78 -94 -2 c-51 0 -98 -6 -103 -11 -22 -22 5 -32 88 -32 46 0
|
||||
84 -2 84 -5 0 -3 -11 -27 -24 -53 -21 -40 -88 -102 -111 -102 -3 0 -5 24 -3
|
||||
53 3 46 1 52 -17 52 -16 0 -21 -9 -26 -42 -3 -24 -7 -44 -10 -46 -2 -2 -38 -1
|
||||
-79 3 -60 6 -77 12 -88 29 -22 32 -52 28 -52 -9 0 -35 30 -54 112 -71 29 -6
|
||||
59 -15 67 -19 22 -12 -38 -39 -133 -61 -45 -11 -90 -24 -101 -29 -11 -5 -32
|
||||
-14 -47 -20 -27 -9 -37 -33 -19 -44 5 -3 56 -1 114 6 100 11 107 10 146 -10
|
||||
22 -12 87 -33 143 -48 57 -14 147 -38 201 -54 55 -17 136 -32 188 -36 l91 -7
|
||||
-4 24 c-2 19 -11 25 -47 31 -35 6 -67 23 -120 65 -2 1 4 12 14 23 18 20 18 21
|
||||
-14 52 -17 17 -29 33 -27 36 12 12 292 -23 401 -51 103 -26 142 -30 275 -33
|
||||
85 -1 184 -7 220 -13 36 -6 133 -11 215 -11 83 0 177 -5 210 -10 33 -6 99 -10
|
||||
146 -11 92 0 129 -9 253 -59 74 -30 89 -32 269 -41 104 -5 197 -11 206 -14 23
|
||||
-7 281 20 376 40 80 17 103 24 205 65 70 28 299 50 380 37 30 -5 87 -6 127 -2
|
||||
68 5 73 5 96 -21 28 -30 47 -25 47 12 0 33 16 30 35 -6 9 -16 19 -30 24 -30 5
|
||||
0 12 -27 16 -61 6 -48 10 -59 24 -57 12 3 16 15 16 53 0 28 -3 65 -8 84 -6 28
|
||||
-5 32 7 21 8 -6 16 -28 18 -48 4 -52 35 -51 53 1 7 21 15 40 17 41 6 5 191
|
||||
-13 253 -24 33 -6 253 -12 495 -15 320 -3 456 -8 515 -18 115 -21 262 -44 395
|
||||
-62 118 -16 539 -36 573 -27 17 4 18 1 13 -24 -6 -27 -21 -113 -32 -179 -2
|
||||
-16 -12 -154 -20 -305 -9 -151 -20 -327 -24 -390 -14 -194 -11 -476 5 -565 8
|
||||
-44 24 -138 35 -210 12 -71 32 -161 45 -200 59 -176 100 -447 85 -557 -11 -72
|
||||
-18 -98 -30 -98 -15 0 -22 -46 -29 -197 -4 -84 -10 -156 -14 -160 -8 -7 -72 1
|
||||
-242 32 -107 19 -288 22 -330 5 -33 -13 -299 -33 -440 -33 -49 0 -113 5 -141
|
||||
12 -28 7 -181 19 -340 27 -354 18 -494 32 -494 51 0 9 -17 13 -64 13 -35 0
|
||||
-79 3 -97 6 -33 6 -33 6 -14 -10 19 -16 15 -16 -60 -10 -44 3 -83 8 -87 11 -4
|
||||
2 2 22 14 44 16 32 19 50 14 89 -4 28 -2 51 3 54 5 4 15 31 22 61 9 42 26 73
|
||||
76 135 37 46 63 88 61 98 -4 23 -75 28 -100 5 -10 -8 -29 -17 -42 -18 -14 -2
|
||||
-29 -6 -35 -9 -19 -12 -24 48 -11 119 20 108 23 196 11 286 -8 61 -8 92 1 120
|
||||
l11 38 78 -1 c64 0 85 3 116 22 23 14 67 26 112 32 85 10 114 22 109 46 -3 14
|
||||
-16 16 -92 15 -64 -2 -91 -6 -100 -17 -34 -44 -124 -66 -205 -50 -28 6 -31 10
|
||||
-31 41 0 27 -4 34 -17 31 -12 -2 -19 -14 -21 -33 l-3 -30 -72 -2 c-40 -1 -105
|
||||
-5 -145 -8 -51 -5 -102 -1 -168 10 -94 17 -280 17 -373 -1 -30 -6 -33 -4 -28
|
||||
10 4 10 0 27 -8 39 -12 18 -15 69 -15 303 0 155 -5 340 -11 412 -12 144 -9
|
||||
185 9 140 6 -16 15 -28 20 -28 14 0 32 23 32 40 0 15 6 15 66 3 36 -7 102 -28
|
||||
147 -45 75 -29 84 -30 128 -19 26 7 108 16 181 21 73 5 171 16 218 25 69 14
|
||||
120 15 270 10 120 -4 212 -2 259 6 40 6 77 7 82 2 4 -4 4 -37 -1 -73 -39 -261
|
||||
-82 -764 -69 -798 6 -15 16 -22 27 -20 15 3 17 16 17 98 1 95 17 299 35 440 5
|
||||
41 17 135 26 208 15 117 19 135 40 151 43 34 31 48 -45 56 -56 6 -74 4 -93 -9
|
||||
-19 -14 -59 -16 -264 -16 -175 0 -264 -4 -321 -15 -43 -8 -118 -18 -168 -21
|
||||
-49 -2 -125 -10 -168 -16 -75 -10 -80 -9 -160 20 -45 17 -109 36 -142 42 -33
|
||||
5 -87 24 -120 40 -33 17 -68 30 -78 30 -29 0 -19 -33 20 -67 27 -23 33 -32 21
|
||||
-33 -11 0 -20 -10 -23 -27 -3 -16 -9 -46 -14 -68 -8 -33 -7 -43 9 -57 15 -14
|
||||
19 -41 25 -165 4 -81 5 -231 2 -334 -4 -135 -2 -200 8 -242 8 -33 9 -59 4 -63
|
||||
-12 -7 -11 -17 5 -39 10 -14 17 -17 27 -9 38 29 270 51 359 35 164 -31 208
|
||||
-34 272 -21 66 13 154 17 164 7 3 -3 -2 -41 -12 -84 -19 -81 -22 -223 -9 -353
|
||||
9 -82 -9 -170 -33 -170 -25 1 -53 19 -112 73 -50 46 -70 52 -70 21 0 -22 54
|
||||
-125 93 -176 19 -25 40 -60 45 -79 33 -101 33 -95 3 -161 -16 -35 -31 -70 -34
|
||||
-79 -6 -18 -39 -17 -197 6 -96 14 -315 28 -445 29 -63 0 -147 -8 -436 -45
|
||||
-142 -17 -1031 -19 -1174 -2 -66 8 -121 16 -123 18 -2 2 -6 71 -9 154 -3 84
|
||||
-10 154 -15 157 -16 10 -28 -10 -30 -47 -1 -32 -6 -38 -57 -65 -30 -16 -60
|
||||
-29 -66 -29 -5 0 -20 -6 -33 -13 -12 -7 -26 -11 -31 -8 -5 3 -21 -1 -37 -8
|
||||
-16 -8 -58 -17 -94 -21 -161 -17 -260 -51 -260 -88 0 -16 5 -18 39 -12 42 7
|
||||
98 -12 123 -43 11 -13 10 -15 -7 -9 -70 21 -67 21 -63 -3 4 -30 74 -77 122
|
||||
-83 25 -3 51 -17 75 -38 100 -92 141 -134 141 -146 0 -13 12 -17 37 -14 7 1
|
||||
26 -5 42 -14 45 -23 51 -19 51 33 1 32 7 55 21 71 19 23 20 23 39 6 19 -17 50
|
||||
-15 50 3 0 5 -14 23 -30 41 -27 28 -30 36 -24 74 4 23 8 44 10 46 2 2 57 -2
|
||||
121 -9 65 -8 136 -13 158 -12 22 0 247 3 500 6 398 3 487 7 660 27 270 32 580
|
||||
29 779 -7 43 -8 92 -14 110 -14 30 0 31 -1 31 -42 0 -37 3 -43 23 -46 16 -3
|
||||
27 5 40 27 9 17 20 31 25 31 4 0 7 -25 7 -55 0 -48 2 -55 20 -55 11 0 20 7 20
|
||||
15 0 8 9 15 19 15 33 0 54 29 48 67 -6 37 -9 37 82 23 40 -5 68 -15 73 -24 11
|
||||
-20 32 -20 48 -1 18 21 41 19 47 -5 7 -26 43 -26 50 0 5 17 12 19 72 14 36 -3
|
||||
107 -11 156 -19 50 -8 185 -16 301 -19 121 -3 257 -13 319 -22 96 -15 132 -16
|
||||
318 -5 116 6 242 19 281 28 85 19 213 13 366 -17 87 -16 205 -34 234 -35 5 0
|
||||
9 77 10 170 1 145 4 175 20 205 29 55 46 129 46 203 0 122 -43 356 -92 502
|
||||
-20 61 -67 315 -88 485 -15 111 -8 389 15 635 8 88 19 246 24 350 8 171 28
|
||||
332 45 376 9 22 253 33 664 30 273 -2 311 -4 369 -22 92 -29 270 -29 368 -2
|
||||
75 22 86 34 59 64 -20 22 -18 23 24 8 17 -6 33 -17 36 -25 7 -19 35 -18 42 1
|
||||
4 8 12 15 19 15 20 0 30 -173 29 -505 0 -314 1 -305 -69 -565 -35 -130 -43
|
||||
-270 -22 -386 45 -242 58 -374 64 -616 6 -241 -12 -718 -27 -718 -12 0 -62
|
||||
-120 -56 -135 11 -29 34 -15 52 31 9 25 25 55 34 67 11 14 20 51 24 97 13 141
|
||||
22 625 15 782 -7 143 -37 382 -59 483 -5 22 -10 92 -10 155 0 105 4 131 47
|
||||
295 l47 180 4 320 c3 263 1 348 -14 475 -26 221 -25 499 1 605 37 151 21 471
|
||||
-35 725 -32 144 -60 386 -60 517 0 123 -8 163 -34 163 -10 0 -12 -33 -9 -157
|
||||
4 -182 24 -355 58 -531 60 -300 71 -541 34 -718 -18 -87 -20 -126 -17 -315 l3
|
||||
-215 -44 8 c-24 4 -49 12 -56 18 -6 5 -24 6 -41 1 -22 -5 -30 -15 -34 -37 -8
|
||||
-45 -46 -58 -180 -62 -98 -3 -124 0 -175 18 -53 19 -89 22 -300 27 -141 4
|
||||
-341 1 -484 -7 -259 -13 -277 -11 -247 31 15 22 7 49 -15 49 -18 0 -39 -33
|
||||
-39 -61 l0 -30 -246 6 c-150 3 -276 11 -323 20 -42 8 -95 15 -118 15 -23 0
|
||||
-75 7 -115 16 -240 51 -294 55 -723 56 -309 0 -427 4 -478 14 -38 8 -98 14
|
||||
-135 15 -93 1 -117 9 -116 40 3 83 60 336 93 413 29 70 31 96 5 96 -13 0 -50
|
||||
-59 -66 -105 -6 -16 -7 -14 -6 10 1 50 -1 55 -20 55 -19 0 -45 -43 -68 -110
|
||||
l-12 -35 -1 35 c-1 24 -8 39 -23 49 -21 13 -21 15 -14 230 4 134 2 257 -5 324
|
||||
-6 60 -9 109 -7 110 8 4 729 -12 781 -17 47 -5 59 -4 63 9 4 9 -1 21 -11 29
|
||||
-16 12 -17 27 -6 237 7 123 16 242 21 264 5 22 14 94 20 160 6 66 15 147 20
|
||||
180 16 103 23 262 12 269 -5 3 -71 -3 -146 -14 -169 -25 -245 -25 -266 1 -13
|
||||
16 -20 17 -54 8 -21 -6 -113 -11 -205 -12 l-166 -2 -56 33 c-61 35 -90 40
|
||||
-109 17z m-355 -65 c156 -38 333 -50 760 -52 93 0 444 22 485 31 78 17 83 16
|
||||
76 -21 -4 -18 -11 -73 -16 -123 -5 -49 -14 -144 -20 -210 -6 -66 -17 -147 -25
|
||||
-180 -7 -33 -16 -162 -20 -289 l-8 -228 -36 8 c-20 4 -180 8 -357 9 -176 1
|
||||
-336 5 -356 9 -37 7 -57 34 -73 99 -9 34 -23 43 -41 26 -11 -12 -11 -20 1 -54
|
||||
8 -22 14 -45 15 -50 0 -17 -133 -18 -173 -2 -22 10 -90 18 -183 22 -128 6
|
||||
-160 4 -229 -13 -62 -15 -81 -23 -83 -38 -8 -40 -20 -34 -26 13 -4 26 -11 134
|
||||
-16 238 -5 105 -14 208 -19 229 -12 49 -6 357 9 451 17 110 13 105 83 106 34
|
||||
0 82 6 107 13 57 17 94 18 145 6z m-3145 -1865 c-7 -9 -15 -13 -17 -11 -7 7 7
|
||||
26 19 26 6 0 6 -6 -2 -15z m3576 -46 c3 -5 10 -7 15 -4 5 4 9 -18 9 -51 0 -32
|
||||
-2 -55 -4 -53 -1 2 -19 29 -39 60 l-35 57 24 0 c13 0 27 -5 30 -9z m99 -76
|
||||
c-13 -114 -20 -122 -55 -73 -15 22 -17 28 -6 24 18 -7 56 49 56 84 0 12 3 22
|
||||
6 22 4 0 3 -26 -1 -57z m-3687 -68 c-2 -1 -22 0 -45 3 l-42 4 19 38 c11 21 30
|
||||
46 42 55 l23 16 3 -57 c2 -31 2 -57 0 -59z m3586 -20 l17 -30 -20 24 c-12 13
|
||||
-21 28 -21 34 0 12 0 11 24 -28z m-3774 -36 c0 -5 -13 -9 -30 -9 -34 0 -38 7
|
||||
-13 26 18 12 43 3 43 -17z m170 5 l25 -15 -25 7 c-14 3 -29 10 -34 15 -16 14
|
||||
6 10 34 -7z m-10 -75 c0 -15 65 -69 78 -64 8 3 30 -8 48 -25 19 -16 29 -30 23
|
||||
-30 -7 0 -55 13 -108 30 -53 16 -137 39 -188 50 -50 12 -97 28 -104 36 -10 12
|
||||
8 13 120 11 72 -1 131 -5 131 -8z m3687 -2266 c-2 -21 -4 -4 -4 37 0 41 2 58
|
||||
4 38 2 -21 2 -55 0 -75z m126 -316 c-20 -23 -29 -29 -32 -18 -2 8 7 22 20 32
|
||||
38 29 44 22 12 -14z m-196 -79 l3 -43 -14 30 c-7 17 -23 39 -35 49 -31 28 -26
|
||||
37 12 21 28 -12 32 -18 34 -57z m52 -52 c-9 -8 -10 -7 -5 7 3 10 7 31 8 45 1
|
||||
22 2 21 5 -7 3 -19 -1 -38 -8 -45z m-2549 -166 c0 -47 -4 -80 -10 -80 -6 0
|
||||
-10 33 -10 80 0 47 4 80 10 80 6 0 10 -33 10 -80z m2575 -48 c-13 -31 -23 20
|
||||
-11 53 l11 30 3 -33 c2 -19 0 -41 -3 -50z m-2845 -67 c0 -31 -7 -31 -45 0
|
||||
l-30 24 38 1 c33 0 37 -3 37 -25z m96 -7 c-3 -13 -6 -31 -6 -40 0 -10 -7 -18
|
||||
-15 -18 -17 0 -18 4 -9 49 4 18 13 31 21 31 11 0 14 -7 9 -22z m174 -29 c0
|
||||
-11 -4 -17 -10 -14 -5 3 -10 13 -10 21 0 8 5 14 10 14 6 0 10 -9 10 -21z m-84
|
||||
-87 c-23 -24 -26 -12 -7 33 16 40 16 40 19 11 2 -17 -3 -35 -12 -44z m24 -115
|
||||
c0 -16 -2 -16 -30 -2 -33 17 -41 51 -12 57 18 4 41 -25 42 -55z"/>
|
||||
<path d="M10417 7823 c-4 -3 -7 -19 -7 -34 0 -17 -20 -59 -49 -104 -49 -75
|
||||
-80 -145 -104 -232 -9 -36 -17 -45 -39 -50 -15 -3 -33 -11 -39 -19 -16 -20 -1
|
||||
-37 28 -29 19 4 24 2 21 -7 -48 -130 -58 -193 -29 -193 10 0 26 36 48 106 l33
|
||||
107 87 11 c49 7 98 14 110 17 20 4 25 -3 43 -65 25 -82 41 -107 64 -98 12 5
|
||||
16 19 16 58 0 42 -3 52 -20 56 -31 8 -36 43 -9 64 27 20 19 35 -20 41 -19 2
|
||||
-27 15 -47 78 -14 41 -31 103 -40 138 -14 61 -14 64 6 80 20 16 20 18 5 50
|
||||
-15 30 -42 42 -58 25z m39 -292 c14 -45 24 -84 22 -85 -4 -3 -188 -33 -188
|
||||
-31 0 1 11 33 24 71 26 77 48 124 79 168 l21 30 8 -35 c5 -19 20 -72 34 -118z"/>
|
||||
<path d="M15790 8029 c-106 -26 -452 -59 -625 -59 -158 0 -352 -26 -405 -54
|
||||
-175 -92 -169 -90 -248 -91 -60 0 -77 -3 -86 -18 -17 -27 3 -33 97 -27 70 5
|
||||
96 12 148 39 35 18 84 44 109 57 55 28 174 41 479 54 262 11 396 24 520 52
|
||||
111 24 151 21 301 -22 123 -35 170 -39 170 -12 0 13 -14 20 -57 29 -32 7 -98
|
||||
24 -148 38 -93 26 -187 31 -255 14z"/>
|
||||
<path d="M5964 7930 c-4 -32 -16 -63 -30 -80 -43 -51 -59 -131 -30 -154 12 -9
|
||||
11 -26 -10 -116 -13 -58 -24 -113 -24 -124 0 -17 -5 -18 -51 -12 -29 4 -70 13
|
||||
-92 21 -29 10 -45 11 -53 4 -31 -25 13 -48 126 -67 42 -7 45 -10 44 -37 -1
|
||||
-48 -42 -268 -58 -316 -26 -73 -16 -153 15 -122 9 9 50 185 68 298 6 39 16 91
|
||||
22 116 l10 46 52 -4 c29 -2 76 -6 104 -9 l53 -5 39 -127 c22 -70 46 -147 53
|
||||
-172 10 -34 18 -46 36 -48 27 -4 30 24 6 89 -12 35 -14 67 -8 154 7 125 3 133
|
||||
-63 144 -35 6 -38 9 -65 84 -41 114 -76 259 -90 377 -11 84 -17 105 -30 108
|
||||
-14 3 -19 -7 -24 -48z m95 -434 c12 -33 21 -64 21 -69 0 -9 -157 -3 -167 6 -3
|
||||
4 16 98 57 286 l12 54 28 -109 c16 -60 38 -136 49 -168z m129 -138 c14 -14 16
|
||||
-64 3 -72 -7 -4 -31 56 -31 78 0 10 15 7 28 -6z"/>
|
||||
<path d="M16912 7527 c-6 -7 -22 -77 -37 -157 -21 -110 -28 -180 -30 -290 -3
|
||||
-266 -3 -260 -24 -260 -51 0 -103 -78 -121 -181 -14 -81 3 -139 43 -153 58
|
||||
-21 107 42 130 170 l12 67 39 -156 c27 -110 36 -166 32 -191 -7 -37 2 -50 28
|
||||
-40 32 12 29 54 -17 243 -75 303 -79 344 -57 561 6 63 15 160 20 215 5 55 12
|
||||
116 16 136 5 27 2 37 -9 42 -9 3 -20 0 -25 -6z m-79 -809 c-6 -79 -22 -138
|
||||
-45 -171 -20 -28 -22 -29 -35 -11 -28 39 -10 152 33 204 39 46 52 39 47 -22z"/>
|
||||
<path d="M2447 7504 c-4 -4 -7 -31 -7 -60 0 -57 -14 -80 -56 -90 -15 -4 -24
|
||||
-13 -24 -25 0 -15 7 -19 31 -19 40 0 85 45 95 94 10 58 -15 124 -39 100z"/>
|
||||
<path d="M5283 7496 c-4 -8 -62 -28 -128 -45 -130 -34 -268 -97 -273 -126 -6
|
||||
-28 14 -38 90 -44 l73 -6 2 -40 c5 -65 24 -238 30 -262 4 -20 1 -23 -23 -23
|
||||
-43 0 -175 -47 -209 -74 -24 -19 -27 -27 -18 -37 10 -10 21 -10 54 0 22 7 43
|
||||
10 46 8 8 -8 -33 -93 -56 -116 -21 -21 -27 -51 -13 -65 4 -4 6 -49 4 -99 -4
|
||||
-102 7 -147 37 -147 21 0 30 17 32 58 1 21 3 19 10 -13 5 -22 11 -55 12 -74 3
|
||||
-39 24 -52 42 -27 10 13 13 -27 18 -192 6 -236 25 -461 40 -480 6 -7 16 -11
|
||||
24 -8 10 4 13 -17 15 -102 2 -142 1 -157 -22 -227 -29 -87 -80 -367 -80 -435
|
||||
0 -41 5 -64 16 -75 39 -39 81 38 104 192 7 45 18 82 27 88 12 9 15 46 14 221
|
||||
0 138 4 228 13 264 7 30 15 48 18 40 3 -8 11 -99 17 -202 11 -190 21 -243 44
|
||||
-235 16 5 15 114 -2 312 -13 151 -9 301 8 318 6 6 6 19 -1 36 -19 48 6 432 42
|
||||
654 34 206 60 305 82 311 27 7 19 39 -12 48 -14 3 -45 12 -70 19 l-45 12 33
|
||||
13 c34 15 42 41 16 51 -9 3 -24 1 -34 -5 -26 -16 -126 -26 -135 -13 -3 6 -9
|
||||
36 -12 67 l-6 55 28 -3 c24 -3 29 2 37 27 4 17 9 69 11 117 1 48 5 88 10 88 4
|
||||
0 7 -7 7 -15 0 -8 9 -15 19 -15 14 0 21 8 23 27 2 14 9 29 17 31 17 6 16 4
|
||||
-34 -133 -58 -158 -62 -175 -45 -185 8 -5 17 -7 21 -4 25 15 122 254 113 278
|
||||
-3 7 4 34 16 59 12 25 19 51 15 57 -7 12 -35 14 -35 1 0 -4 -28 -18 -62 -29
|
||||
-35 -12 -90 -31 -122 -42 -56 -19 -60 -19 -72 -2 -7 9 -10 20 -6 24 10 10 241
|
||||
70 277 72 21 1 31 8 34 21 6 35 -59 62 -76 31z m-289 -161 c4 -11 -2 -15 -21
|
||||
-15 -26 0 -26 1 -7 15 10 8 20 15 20 15 1 0 4 -7 8 -15z m137 -142 c-10 -17
|
||||
-10 -17 -11 2 0 11 4 31 8 45 l7 25 3 -27 c2 -15 -1 -35 -7 -45z m-81 -400 c0
|
||||
-60 3 -138 6 -175 6 -63 6 -67 -13 -62 -18 5 -21 17 -27 107 -3 56 -12 130
|
||||
-19 164 l-13 62 25 4 c14 2 29 5 34 6 4 0 7 -47 7 -106z m131 97 c29 -6 62
|
||||
-19 74 -30 12 -11 27 -20 33 -20 16 0 16 -6 -17 -169 -17 -79 -37 -214 -46
|
||||
-300 -23 -223 -32 -261 -34 -141 -1 52 -8 158 -17 235 -9 77 -17 181 -18 231
|
||||
-2 77 -6 98 -29 139 -41 72 -40 73 54 55z m-206 -265 c3 -64 1 -89 -4 -70 -5
|
||||
17 -9 44 -10 61 -1 34 -21 50 -40 31 -21 -21 -12 46 11 90 l23 43 7 -28 c5
|
||||
-15 10 -72 13 -127z m159 -220 l5 -90 -14 110 c-8 61 -16 144 -19 185 -5 74
|
||||
-5 74 9 -20 7 -52 16 -135 19 -185z m-48 -45 c10 -89 12 -136 5 -148 -8 -13
|
||||
-10 -9 -11 22 0 22 -7 47 -16 57 -14 16 -15 33 -9 114 4 53 9 94 12 91 3 -2
|
||||
12 -64 19 -136z m61 -127 c-2 -16 -4 -5 -4 22 0 28 2 40 4 28 2 -13 2 -35 0
|
||||
-50z m24 -286 c2 -38 -1 -51 -14 -58 -15 -9 -17 -3 -17 54 0 98 25 101 31 4z
|
||||
m-75 7 c-3 -9 -6 -41 -6 -71 0 -74 -13 -59 -20 23 -5 58 -4 64 13 64 13 0 17
|
||||
-5 13 -16z m-25 -865 c-12 -99 -39 -213 -40 -170 -1 31 41 273 46 267 2 -2 -1
|
||||
-46 -6 -97z"/>
|
||||
<path d="M16220 7475 c-11 -13 -11 -20 0 -39 6 -13 9 -33 6 -44 -9 -28 -10
|
||||
-398 -1 -444 6 -31 4 -38 -8 -38 -27 0 -30 -20 -9 -68 11 -26 35 -121 53 -211
|
||||
33 -158 46 -188 70 -164 7 7 2 54 -15 142 -31 157 -31 159 -8 138 24 -22 100
|
||||
-49 135 -49 25 1 27 -3 27 -36 1 -55 32 -116 73 -141 72 -44 137 -49 137 -10
|
||||
0 15 -7 19 -34 19 -43 0 -96 36 -119 80 -24 46 -17 104 16 139 36 38 67 93 67
|
||||
118 0 57 -51 25 -102 -64 -16 -29 -38 -55 -49 -58 -31 -10 -112 22 -147 58
|
||||
-30 31 -32 38 -42 147 -11 132 -12 325 -2 421 4 36 5 76 2 90 -7 29 -32 36
|
||||
-50 14z"/>
|
||||
<path d="M15233 7035 c-47 -67 -66 -86 -76 -76 -19 19 -84 12 -122 -11 -147
|
||||
-92 -179 -131 -197 -242 -31 -185 76 -302 217 -237 44 20 83 54 110 94 14 22
|
||||
15 30 5 42 -10 12 -20 6 -64 -39 -65 -69 -118 -88 -167 -60 -39 23 -57 68 -58
|
||||
144 -1 77 15 125 57 171 53 60 123 93 199 94 48 1 66 5 76 19 11 15 12 4 4
|
||||
-71 -13 -129 -4 -339 16 -385 20 -46 47 -50 75 -10 10 15 43 99 72 187 l54
|
||||
160 21 -105 c24 -120 43 -182 58 -192 29 -18 132 21 143 54 7 23 -24 68 -47
|
||||
68 -21 0 -26 -29 -8 -47 8 -8 8 -13 -1 -18 -20 -12 -23 2 -24 93 -2 146 33
|
||||
181 185 190 l89 5 0 -26 c0 -15 -9 -44 -21 -66 -63 -122 -64 -286 -1 -320 29
|
||||
-16 37 -14 71 15 24 20 37 47 61 127 17 56 33 109 36 117 3 9 13 -6 24 -37 23
|
||||
-65 28 -73 45 -73 25 0 27 20 6 65 -12 25 -21 50 -21 55 0 26 -32 70 -50 70
|
||||
-25 0 -32 -14 -70 -145 -34 -117 -52 -155 -75 -155 -19 0 -27 31 -26 98 1 113
|
||||
53 215 131 260 41 23 43 24 23 3 -26 -25 -29 -39 -9 -47 19 -7 76 35 87 63 22
|
||||
57 -25 69 -109 27 -47 -23 -53 -24 -68 -10 -23 23 -58 29 -128 23 -87 -9 -132
|
||||
-24 -170 -57 -40 -35 -56 -85 -57 -176 -1 -101 -15 -51 -55 194 -3 23 -10 32
|
||||
-24 32 -27 0 -57 -62 -114 -235 -54 -162 -61 -177 -69 -143 -16 66 -18 148 -6
|
||||
288 16 200 17 242 2 247 -6 2 -20 -8 -30 -22z"/>
|
||||
<path d="M19036 6892 c-3 -5 1 -40 9 -78 34 -156 56 -382 61 -624 3 -135 7
|
||||
-251 9 -257 3 -7 11 -10 21 -6 15 5 16 32 11 282 -5 274 -17 412 -55 601 -13
|
||||
62 -21 86 -34 88 -9 2 -19 -1 -22 -6z"/>
|
||||
<path d="M20453 6295 c-38 -16 -48 -46 -40 -115 13 -105 78 -179 167 -188 32
|
||||
-3 55 0 65 8 24 20 2 35 -50 38 -60 2 -99 30 -121 87 -43 115 -18 150 101 141
|
||||
75 -6 226 -42 235 -56 3 -5 23 -10 45 -12 34 -2 40 0 40 16 0 22 -32 35 -174
|
||||
72 -106 27 -218 31 -268 9z"/>
|
||||
<path d="M20895 6021 c-6 -5 -70 -16 -144 -25 -74 -9 -168 -24 -210 -32 -42
|
||||
-9 -102 -16 -134 -16 -62 0 -81 -13 -52 -35 26 -18 90 -16 193 6 105 24 261
|
||||
41 397 44 91 2 100 4 100 21 0 15 -12 22 -55 32 -67 16 -83 17 -95 5z"/>
|
||||
<path d="M1397 6003 c-26 -30 -38 -70 -23 -82 7 -6 15 -9 18 -6 3 3 8 -90 11
|
||||
-207 l6 -213 -117 -111 c-78 -74 -119 -107 -124 -99 -13 22 -28 264 -28 447 0
|
||||
155 -2 179 -16 185 -9 3 -20 0 -25 -8 -15 -25 -22 -90 -10 -102 7 -7 11 -72
|
||||
11 -186 0 -97 7 -225 15 -286 l15 -110 -37 -37 c-35 -36 -62 -51 -115 -62 -19
|
||||
-4 -28 -13 -28 -26 0 -15 7 -20 28 -20 63 0 187 -102 227 -187 17 -34 42 -43
|
||||
51 -19 3 8 1 23 -5 34 -6 11 -24 83 -40 159 l-30 138 117 117 c64 65 119 114
|
||||
122 110 4 -4 12 -43 19 -87 24 -150 90 -468 100 -478 15 -15 38 9 44 46 9 61
|
||||
52 237 57 237 8 0 33 -72 65 -183 41 -142 79 -203 110 -177 9 7 14 15 11 17
|
||||
-2 3 0 18 5 35 12 43 -6 66 -32 42 -17 -15 -19 -12 -39 57 -61 209 -102 309
|
||||
-125 309 -23 0 -31 -23 -56 -144 -27 -139 -24 -145 -73 124 -51 271 -58 333
|
||||
-65 569 -4 138 -10 216 -17 218 -6 2 -18 -5 -27 -14z m-234 -926 l15 -68 -38
|
||||
35 c-21 19 -48 40 -60 46 -21 11 -21 12 17 40 21 16 41 26 44 22 4 -4 14 -38
|
||||
22 -75z"/>
|
||||
<path d="M10273 5924 c-7 -19 2 -28 22 -21 19 8 19 23 0 31 -9 3 -18 -1 -22
|
||||
-10z"/>
|
||||
<path d="M363 5733 c-29 -93 -73 -251 -98 -353 -25 -102 -49 -192 -55 -200
|
||||
-40 -61 -50 -90 -38 -110 10 -16 9 -33 -6 -91 -36 -140 -98 -334 -111 -349
|
||||
-15 -18 -45 -113 -45 -146 0 -29 18 -41 35 -23 17 19 97 260 146 442 22 84 44
|
||||
163 48 177 17 59 186 106 223 63 9 -11 25 -79 38 -163 13 -80 30 -152 37 -160
|
||||
23 -26 36 5 41 104 5 107 -8 172 -43 215 -15 17 -28 56 -39 116 -24 137 -46
|
||||
340 -46 435 0 84 0 85 31 103 36 20 33 43 -5 40 -23 -2 -26 1 -23 30 1 25 -2
|
||||
33 -18 35 -18 2 -26 -18 -72 -165z m72 -378 c9 -60 18 -119 21 -131 5 -19 1
|
||||
-20 -58 -20 -40 0 -75 -7 -96 -18 -19 -10 -35 -16 -37 -14 -5 5 71 318 108
|
||||
442 l32 109 7 -129 c3 -71 14 -178 23 -239z"/>
|
||||
<path d="M20654 5788 c-4 -6 6 -22 23 -37 50 -42 47 -53 -23 -76 -71 -24 -127
|
||||
-63 -155 -109 -23 -38 -26 -140 -5 -210 32 -107 127 -178 200 -150 51 20 90
|
||||
173 84 334 -2 64 1 110 6 110 26 0 95 -53 110 -84 28 -60 19 -92 -29 -98 -18
|
||||
-2 -30 -9 -30 -18 0 -23 72 -26 96 -4 25 22 25 96 1 144 -20 42 -103 100 -142
|
||||
100 -23 0 -29 6 -39 40 -16 56 -76 92 -97 58z m80 -216 c10 -119 -15 -275 -50
|
||||
-313 -22 -25 -32 -24 -75 5 -46 31 -78 99 -85 179 -7 76 4 107 51 143 30 23
|
||||
121 62 146 64 3 0 9 -35 13 -78z"/>
|
||||
<path d="M16837 5577 c-51 -77 -102 -243 -113 -364 -8 -82 -17 -104 -36 -85
|
||||
-19 19 -58 14 -118 -16 -45 -23 -65 -42 -117 -116 -34 -49 -75 -120 -90 -158
|
||||
-26 -69 -27 -69 -40 -44 -8 14 -20 26 -28 26 -7 0 -20 7 -29 15 -48 49 -152
|
||||
58 -231 22 -84 -40 -128 -148 -90 -221 9 -16 13 -31 10 -35 -3 -3 -34 -7 -68
|
||||
-9 -78 -4 -124 18 -150 69 -15 32 -16 41 -5 75 12 35 22 43 88 76 41 21 96 41
|
||||
123 44 36 5 47 11 47 25 0 27 -13 30 -70 17 -73 -17 -191 -78 -215 -111 -28
|
||||
-40 -28 -125 1 -164 33 -44 81 -71 141 -79 91 -11 115 0 280 131 41 33 91 71
|
||||
111 84 34 23 36 23 49 5 7 -10 18 -36 24 -57 9 -35 32 -57 45 -44 3 3 11 31
|
||||
19 64 7 32 24 81 36 108 l22 50 7 -37 c9 -50 26 -68 66 -68 45 0 94 44 144
|
||||
131 22 37 45 71 50 74 6 3 11 18 11 33 1 15 5 -13 10 -63 10 -113 29 -169 57
|
||||
-173 29 -5 43 45 18 64 -20 14 -35 108 -36 219 0 54 6 82 25 122 70 152 123
|
||||
413 83 413 -9 0 -22 -10 -31 -23z m-30 -199 c-3 -8 -6 -5 -6 6 -1 11 2 17 5
|
||||
13 3 -3 4 -12 1 -19z m-147 -317 c0 -16 -18 -66 -41 -110 -53 -105 -116 -160
|
||||
-133 -115 -28 74 36 212 114 243 46 18 60 14 60 -18z m-457 -240 c11 -11 -29
|
||||
-53 -122 -128 -60 -48 -95 -55 -105 -21 -8 32 13 93 40 118 46 44 156 62 187
|
||||
31z"/>
|
||||
<path d="M2224 5535 c-18 -15 -18 -16 9 -36 44 -33 65 -87 98 -250 27 -135 30
|
||||
-164 23 -251 -8 -114 4 -161 40 -156 20 3 21 8 21 143 0 135 1 142 28 188 49
|
||||
84 173 167 315 211 100 31 106 32 92 7 -40 -75 41 -162 195 -211 99 -31 176
|
||||
-99 195 -171 13 -48 8 -76 -20 -111 -40 -52 -140 -76 -174 -43 -8 9 -23 41
|
||||
-32 73 -21 67 -33 85 -53 73 -11 -7 -10 -18 4 -67 25 -86 42 -114 82 -130 84
|
||||
-36 197 20 237 117 13 32 14 44 2 88 -26 100 -90 161 -219 209 -85 32 -129 56
|
||||
-160 90 -27 28 -28 32 -15 58 18 37 56 63 103 71 41 6 75 32 75 56 0 15 -55
|
||||
31 -71 21 -5 -3 -23 3 -39 13 -27 16 -32 16 -40 3 -14 -21 -12 -30 5 -36 27
|
||||
-11 16 -21 -27 -28 -210 -33 -457 -171 -496 -277 -7 -17 -14 3 -32 96 -25 125
|
||||
-68 228 -106 252 -17 11 -23 11 -40 -2z"/>
|
||||
<path d="M621 5443 c-33 -40 -41 -83 -16 -83 7 0 19 8 25 18 9 13 10 6 5 -33
|
||||
-14 -129 -17 -310 -6 -375 16 -88 65 -174 102 -178 23 -3 28 3 43 43 10 25 31
|
||||
92 46 148 16 56 29 95 29 87 1 -9 16 -47 35 -85 52 -109 153 -190 164 -132 2
|
||||
11 -5 20 -21 26 -57 22 -121 134 -138 243 -28 177 -40 169 -98 -64 -26 -103
|
||||
-52 -193 -58 -199 -18 -18 -51 58 -65 145 -9 61 -8 109 6 265 10 104 15 194
|
||||
11 200 -12 20 -33 11 -64 -26z"/>
|
||||
<path d="M14981 5263 c-13 -3 -47 -28 -75 -56 -44 -44 -55 -64 -74 -127 -28
|
||||
-97 -49 -287 -34 -302 24 -24 39 10 46 105 3 51 15 126 27 167 34 122 84 170
|
||||
181 172 45 1 54 -2 79 -29 74 -84 57 -277 -37 -400 -21 -27 -29 -31 -54 -27
|
||||
-48 10 -80 -3 -80 -31 0 -36 42 -62 76 -46 24 10 29 7 78 -44 28 -30 61 -55
|
||||
71 -55 11 0 35 -9 53 -20 43 -27 82 -27 82 0 0 12 -7 20 -17 20 -10 0 -27 7
|
||||
-38 16 -11 8 -36 19 -56 24 -25 7 -49 25 -74 55 l-37 45 27 32 c40 47 68 58
|
||||
156 58 l78 0 -6 -48 c-13 -114 85 -175 232 -143 21 4 30 12 30 26 0 15 -6 19
|
||||
-25 17 -14 -2 -51 -4 -82 -5 -48 -1 -61 2 -82 22 -34 32 -40 54 -26 95 9 29
|
||||
16 34 53 40 116 18 227 75 227 117 0 62 -146 37 -251 -43 -44 -34 -48 -35
|
||||
-144 -37 -88 -2 -97 -1 -91 15 20 52 28 114 24 184 -10 167 -85 231 -237 203z
|
||||
m639 -337 c0 -5 -86 -38 -130 -51 l-25 -7 24 17 c33 25 131 55 131 41z"/>
|
||||
<path d="M1982 5245 c-98 -23 -146 -94 -146 -220 -1 -97 19 -138 84 -172 110
|
||||
-58 214 -8 309 150 23 38 23 67 -1 67 -7 0 -26 -23 -42 -51 -61 -109 -147
|
||||
-163 -220 -139 -66 22 -99 90 -86 177 18 112 58 148 163 148 60 0 71 -3 88
|
||||
-24 24 -29 24 -43 0 -72 -17 -21 -28 -24 -87 -24 -45 0 -69 -4 -71 -12 -7 -20
|
||||
47 -35 106 -30 46 3 59 9 83 36 38 42 38 90 1 131 -35 39 -104 52 -181 35z"/>
|
||||
<path d="M20116 5139 c-7 -35 -1 -49 20 -49 21 0 38 49 23 66 -19 23 -36 16
|
||||
-43 -17z"/>
|
||||
<path d="M6322 5128 c-7 -7 -12 -17 -12 -24 0 -6 -7 -15 -16 -18 -12 -4 -14
|
||||
-13 -10 -31 6 -23 2 -28 -31 -41 -73 -28 -93 -51 -54 -61 24 -6 24 -4 11 -39
|
||||
l-11 -27 -38 37 c-49 48 -58 37 -63 -74 -3 -75 -1 -85 15 -88 10 -2 36 8 57
|
||||
22 22 14 41 26 42 26 2 0 1 -29 0 -65 -3 -53 -1 -65 12 -65 8 0 20 8 26 18 8
|
||||
13 9 11 4 -13 -9 -42 -12 -45 -42 -45 -31 0 -46 -9 -54 -30 -9 -24 -162 -84
|
||||
-185 -72 -23 12 -83 -10 -100 -37 -9 -15 -9 -23 2 -37 11 -16 18 -17 54 -8 39
|
||||
11 40 10 43 -15 2 -20 9 -26 28 -27 58 -3 60 -4 60 -30 0 -14 -10 -34 -22 -43
|
||||
-27 -22 -16 -41 24 -41 31 0 31 0 25 -44 -4 -25 -9 -107 -12 -183 -3 -76 -8
|
||||
-191 -10 -255 -5 -112 -5 -118 14 -118 25 0 28 25 35 265 7 224 23 386 40 403
|
||||
11 11 12 -7 9 -105 -4 -87 0 -143 13 -213 10 -53 19 -160 21 -244 4 -128 2
|
||||
-154 -14 -185 -15 -31 -18 -63 -18 -213 0 -106 -3 -170 -9 -160 -46 89 -78
|
||||
103 -103 45 -13 -32 -13 -54 -3 -168 6 -71 16 -134 20 -139 18 -19 40 3 41 41
|
||||
1 35 2 34 15 -20 18 -74 30 -97 52 -97 14 0 22 -19 40 -97 24 -103 39 -144 59
|
||||
-150 24 -8 34 40 43 204 6 93 17 224 24 293 15 127 28 302 46 650 6 107 15
|
||||
238 20 290 5 52 10 127 10 165 0 82 8 115 25 115 12 0 47 -163 80 -374 18
|
||||
-111 16 -147 -5 -103 -14 29 -37 36 -46 13 -9 -23 24 -75 51 -82 55 -14 66 32
|
||||
45 181 -10 71 -57 316 -66 346 -4 14 8 18 78 23 159 13 219 33 198 65 -6 11
|
||||
-31 13 -109 9 -56 -3 -101 -1 -101 3 0 16 -41 32 -53 20 -20 -20 -27 -12 -27
|
||||
29 0 28 -5 43 -16 47 -23 8 -45 -24 -38 -54 5 -19 2 -23 -15 -23 -25 0 -26 11
|
||||
-10 130 10 69 16 87 37 105 20 17 24 26 15 36 -6 8 -13 35 -17 60 -5 35 -3 49
|
||||
9 59 25 21 19 58 -14 74 -25 13 -30 24 -40 81 -7 36 -16 77 -21 90 -10 27 -38
|
||||
33 -58 13z m47 -269 c-19 -12 -21 -5 -7 27 11 29 12 29 16 5 2 -13 -2 -27 -9
|
||||
-32z m-205 -5 c8 -21 8 -21 -9 -28 -11 -4 -15 1 -15 19 0 28 15 33 24 9z m239
|
||||
-54 c3 -11 1 -20 -4 -20 -5 0 -9 2 -9 4 0 2 -3 11 -6 20 -3 9 -2 16 4 16 5 0
|
||||
12 -9 15 -20z m-94 -23 c8 -10 7 -17 -1 -25 -15 -15 -39 3 -31 24 7 18 17 18
|
||||
32 1z m51 -68 c-41 -26 -44 -24 -19 11 18 23 25 27 36 18 11 -9 8 -14 -17 -29z
|
||||
m5 -120 c-8 -66 -11 -65 -41 6 -14 34 -13 35 13 49 16 8 30 13 32 11 2 -2 0
|
||||
-32 -4 -66z m-156 -51 c0 -31 -3 -37 -8 -24 -7 18 -3 66 5 66 2 0 4 -19 3 -42z
|
||||
m96 -4 c20 -47 19 -54 -5 -54 -17 0 -20 7 -20 45 0 25 2 45 5 45 3 0 12 -16
|
||||
20 -36z m-225 -29 c-7 -8 -22 -15 -34 -14 -18 0 -16 3 9 14 39 18 40 18 25 0z
|
||||
m33 -45 c-5 -19 -23 -29 -23 -12 0 7 20 32 26 32 1 0 0 -9 -3 -20z m66 -2 c12
|
||||
-15 11 -18 -3 -18 -10 0 -16 8 -16 22 0 12 1 19 3 17 1 -2 9 -12 16 -21z m197
|
||||
-110 c-12 -69 -26 -273 -36 -538 -11 -300 -16 -360 -31 -360 -11 0 -12 52 -1
|
||||
65 4 6 5 57 2 115 -3 58 -1 211 3 340 4 129 7 274 5 323 l-3 87 34 0 c32 0 33
|
||||
-1 27 -32z m-119 -205 c-3 -10 -5 -2 -5 17 0 19 2 27 5 18 2 -10 2 -26 0 -35z
|
||||
m36 -850 c-3 -21 -11 -47 -16 -58 -10 -18 -12 -15 -20 23 -7 37 -6 46 10 58
|
||||
28 21 32 17 26 -23z m-30 -135 c24 4 22 -38 -3 -85 -11 -21 -20 -45 -21 -53
|
||||
-3 -43 -17 45 -18 110 -1 67 1 72 12 50 8 -15 20 -24 30 -22z m-116 -10 c-3
|
||||
-8 -6 -5 -6 6 -1 11 2 17 5 13 3 -3 4 -12 1 -19z m23 -102 c-7 -7 -10 -4 -10
|
||||
10 0 10 -3 30 -6 44 -4 18 0 15 11 -9 10 -24 12 -38 5 -45z"/>
|
||||
<path d="M16929 5076 c-34 -32 -48 -54 -52 -83 -13 -82 22 -142 107 -185 34
|
||||
-17 64 -35 68 -41 16 -25 -21 -73 -77 -98 -76 -35 -149 -18 -210 48 -19 21
|
||||
-35 41 -35 46 0 4 -9 7 -20 7 -13 0 -20 -7 -20 -18 0 -27 66 -100 111 -122 86
|
||||
-44 232 -11 277 63 42 67 24 109 -61 150 -69 32 -97 67 -97 119 0 39 17 62 84
|
||||
116 21 17 16 36 -10 40 -11 1 -37 -15 -65 -42z"/>
|
||||
<path d="M20314 5066 c-72 -32 -51 -65 24 -41 45 15 66 16 174 5 68 -6 147
|
||||
-20 176 -29 42 -15 54 -16 63 -5 16 19 4 31 -49 48 -108 35 -330 47 -388 22z"/>
|
||||
<path d="M20107 4933 c-26 -37 -41 -91 -52 -186 l-6 -48 -102 6 c-162 10 -307
|
||||
24 -524 51 -231 29 -268 29 -268 -1 0 -17 7 -20 50 -21 28 -1 142 -13 255 -28
|
||||
222 -28 429 -46 521 -46 l58 0 3 -57 c2 -43 7 -58 18 -58 10 0 17 16 23 53 l9
|
||||
52 51 0 c91 -1 252 -18 359 -39 133 -26 166 -38 164 -59 -1 -21 39 -27 78 -12
|
||||
46 17 29 41 -49 68 -102 34 -299 71 -417 77 -57 3 -121 8 -144 11 l-40 5 8 70
|
||||
c8 68 24 115 49 150 13 17 6 49 -9 49 -5 0 -21 -17 -35 -37z"/>
|
||||
<path d="M14864 4925 c-4 -9 3 -87 14 -173 12 -86 24 -196 28 -245 6 -76 4
|
||||
-90 -11 -107 -13 -15 -15 -24 -8 -31 16 -16 51 -2 59 24 11 33 5 168 -13 287
|
||||
-8 58 -18 139 -22 180 -5 60 -9 75 -24 78 -9 2 -20 -4 -23 -13z"/>
|
||||
<path d="M19066 4802 c-15 -25 68 -609 124 -867 38 -175 61 -332 67 -462 l6
|
||||
-133 -32 -11 c-20 -7 -31 -18 -31 -30 0 -24 32 -25 71 -2 22 13 30 27 35 60
|
||||
10 65 -21 334 -60 528 -62 309 -95 508 -116 700 -12 105 -23 198 -26 208 -5
|
||||
17 -29 23 -38 9z"/>
|
||||
<path d="M10349 4671 c-82 -25 -139 -110 -105 -157 12 -16 16 -16 31 -4 10 8
|
||||
14 22 11 36 -13 51 92 101 187 88 73 -9 81 -13 121 -49 l39 -35 -49 -48 c-63
|
||||
-62 -96 -82 -133 -82 l-30 0 -3 88 c-3 79 -5 87 -23 87 -19 0 -20 -6 -17 -87
|
||||
l4 -88 -47 0 c-42 0 -46 -2 -43 -22 2 -19 10 -24 46 -26 29 -2 42 -8 42 -18 0
|
||||
-36 -33 -156 -47 -169 -10 -11 -14 -29 -11 -55 2 -22 0 -40 -4 -40 -5 0 -38
|
||||
14 -75 30 -77 35 -89 36 -103 11 -15 -28 -13 -88 4 -94 18 -7 36 12 36 39 0
|
||||
22 0 22 69 -7 66 -28 73 -29 138 -19 37 6 113 15 168 21 56 6 115 18 135 28
|
||||
83 42 108 185 44 252 -38 40 -95 69 -136 69 l-33 0 52 51 c29 27 57 57 61 66
|
||||
11 19 4 53 -10 53 -5 0 -28 16 -51 35 -22 19 -57 40 -76 45 -42 11 -154 12
|
||||
-192 1z m311 -316 c58 -30 82 -101 54 -161 -24 -52 -39 -62 -104 -69 -67 -7
|
||||
-184 -24 -226 -31 l-31 -6 29 87 c16 47 32 108 35 135 6 48 7 50 47 59 51 12
|
||||
160 5 196 -14z"/>
|
||||
<path d="M20596 4271 c-21 -23 -12 -45 15 -38 18 5 19 -2 19 -115 0 -77 -6
|
||||
-142 -16 -182 -16 -62 -38 -106 -53 -106 -23 0 -98 94 -134 168 -35 72 -40 93
|
||||
-43 165 -2 45 -3 85 -4 90 0 11 -48 8 -56 -4 -3 -6 -1 -16 5 -22 6 -6 11 -34
|
||||
11 -61 1 -105 50 -228 124 -310 57 -63 91 -79 127 -61 54 29 96 204 86 362 -9
|
||||
125 -36 164 -81 114z"/>
|
||||
<path d="M2594 4095 c-10 -24 3 -123 27 -215 23 -91 20 -133 -12 -174 -12 -15
|
||||
-18 -34 -15 -42 19 -50 86 47 86 126 0 25 -7 71 -16 101 -9 30 -19 90 -23 134
|
||||
-5 65 -9 80 -24 83 -9 2 -20 -4 -23 -13z"/>
|
||||
<path d="M20440 3714 c-55 -31 -110 -97 -152 -182 -29 -58 -32 -73 -32 -160
|
||||
-1 -118 16 -177 55 -198 36 -18 83 -18 124 2 37 17 124 112 180 196 20 32 45
|
||||
60 55 63 22 7 45 58 36 81 -12 32 -43 6 -109 -91 -74 -110 -167 -210 -203
|
||||
-219 -70 -18 -98 38 -92 178 3 77 8 99 33 145 30 56 124 161 144 161 6 0 9
|
||||
-12 6 -27 -37 -218 -45 -281 -40 -301 8 -31 39 -25 43 8 2 14 11 29 19 34 12
|
||||
7 14 20 9 67 -4 33 -2 94 5 137 14 89 7 132 -19 132 -9 0 -37 -12 -62 -26z"/>
|
||||
<path d="M2567 3322 c-3 -4 -7 -68 -8 -142 -3 -119 -1 -135 13 -138 32 -6 50
|
||||
140 32 251 -6 33 -25 49 -37 29z"/>
|
||||
<path d="M6789 3070 c-107 -17 -229 -91 -229 -139 0 -18 6 -21 39 -21 22 0 62
|
||||
5 90 12 40 9 51 16 51 31 0 18 -5 19 -50 14 -27 -3 -50 -4 -50 -1 0 17 122 55
|
||||
203 64 120 12 193 -5 272 -66 75 -57 98 -149 61 -239 -31 -73 -47 -83 -129
|
||||
-77 -46 3 -75 10 -80 18 -4 8 -15 14 -22 14 -8 0 -16 1 -16 3 -1 1 -6 63 -13
|
||||
137 -10 128 -12 135 -33 138 -22 3 -29 -7 -23 -33 1 -5 8 -76 15 -158 12 -138
|
||||
12 -150 -6 -183 l-18 -36 25 -34 c21 -28 27 -48 31 -116 l5 -83 -87 93 c-86
|
||||
91 -110 106 -122 77 -3 -11 8 -28 35 -51 22 -19 69 -69 104 -112 60 -72 64
|
||||
-79 56 -112 -4 -19 -5 -41 -3 -47 8 -23 36 -14 47 15 l11 28 46 -22 c87 -41
|
||||
214 -48 278 -15 88 44 143 135 143 236 0 100 -45 149 -180 196 -36 12 -66 23
|
||||
-68 25 -2 1 8 18 22 39 71 104 61 224 -26 308 -93 91 -218 122 -379 97z m228
|
||||
-497 c18 -3 52 0 76 6 38 11 50 10 117 -14 41 -15 90 -36 108 -47 65 -40 79
|
||||
-116 38 -203 -41 -89 -115 -132 -211 -122 -76 8 -130 26 -164 56 l-29 26 -6
|
||||
159 -5 158 22 -6 c12 -4 37 -9 54 -13z"/>
|
||||
<path d="M19975 3039 c-164 -13 -259 -32 -263 -51 -5 -25 27 -29 108 -12 102
|
||||
20 537 31 640 15 121 -19 150 -29 160 -57 10 -26 29 -31 48 -12 36 36 -16 75
|
||||
-135 102 -89 20 -403 28 -558 15z"/>
|
||||
<path d="M19125 2850 c-4 -6 3 -38 14 -73 28 -86 58 -228 67 -315 5 -60 3 -80
|
||||
-12 -113 -15 -34 -15 -42 -4 -49 20 -12 30 -3 51 44 16 38 17 49 4 151 -28
|
||||
230 -88 407 -120 355z"/>
|
||||
<path d="M19794 2795 c-9 -22 5 -36 29 -30 12 3 110 -19 217 -49 261 -73 351
|
||||
-90 492 -90 121 -1 157 9 130 36 -9 9 -45 12 -120 9 -127 -3 -270 23 -511 94
|
||||
-162 47 -228 56 -237 30z"/>
|
||||
<path d="M2602 2707 c-7 -8 -10 -16 -7 -19 3 -2 10 -85 16 -182 8 -133 8 -190
|
||||
-1 -224 -14 -59 1 -79 32 -42 20 24 20 33 14 215 -7 197 -14 256 -32 262 -6 2
|
||||
-16 -3 -22 -10z"/>
|
||||
<path d="M20377 2346 c-93 -34 -133 -127 -101 -235 20 -67 51 -93 119 -99 53
|
||||
-4 57 -3 90 32 38 41 59 102 52 155 -2 20 2 45 9 56 39 63 -77 125 -169 91z
|
||||
m114 -47 c20 -10 20 -10 1 -37 -18 -24 -18 -28 -5 -49 13 -20 14 -30 3 -68
|
||||
-40 -144 -180 -117 -180 35 0 51 22 95 58 114 32 18 95 20 123 5z"/>
|
||||
<path d="M19972 1833 c6 -139 31 -238 105 -408 102 -234 257 -404 347 -381 76
|
||||
19 129 228 156 616 7 91 15 183 19 205 9 50 5 65 -19 65 -22 0 -23 -5 -45
|
||||
-280 -30 -377 -74 -560 -133 -560 -24 0 -87 46 -133 97 -100 111 -222 391
|
||||
-248 570 -15 98 -14 133 3 133 19 0 36 23 28 37 -8 12 -55 33 -74 33 -7 0 -9
|
||||
-41 -6 -127z"/>
|
||||
<path d="M19074 1616 c-3 -8 14 -117 37 -242 29 -163 57 -278 96 -398 36 -114
|
||||
54 -187 54 -223 1 -49 3 -54 23 -51 37 5 26 97 -32 278 -54 167 -67 225 -107
|
||||
455 -14 83 -30 160 -35 173 -11 25 -28 29 -36 8z"/>
|
||||
<path d="M2585 1600 c-3 -5 -1 -44 4 -86 6 -41 11 -102 11 -135 0 -56 -1 -59
|
||||
-25 -59 -18 0 -25 -5 -25 -20 0 -16 7 -20 34 -20 55 0 60 14 53 163 -3 73 -8
|
||||
140 -12 150 -8 19 -30 23 -40 7z"/>
|
||||
<path d="M2728 738 c-3 -7 4 -39 14 -72 10 -33 21 -92 25 -132 5 -69 5 -73
|
||||
-20 -95 -21 -17 -24 -25 -16 -36 16 -18 36 -16 59 7 17 17 20 33 19 103 0 98
|
||||
-34 230 -60 235 -10 2 -19 -3 -21 -10z"/>
|
||||
<path d="M11020 411 c0 -16 11 -19 73 -25 39 -4 158 -21 262 -37 227 -35 315
|
||||
-38 315 -11 0 15 -19 20 -147 35 -82 9 -206 26 -278 37 -170 26 -225 26 -225
|
||||
1z"/>
|
||||
<path d="M12360 415 c-69 -8 -126 -14 -127 -14 -2 -1 -3 -10 -3 -21 0 -20 4
|
||||
-20 93 -14 178 12 202 17 202 39 0 25 -10 26 -165 10z"/>
|
||||
<path d="M15882 383 c-18 -7 -86 -22 -150 -33 -64 -11 -156 -29 -203 -40 -47
|
||||
-11 -151 -23 -232 -28 -147 -8 -174 -15 -158 -41 7 -11 36 -12 177 -2 93 6
|
||||
194 18 224 26 30 8 96 22 145 30 197 33 245 48 245 76 0 25 -10 28 -48 12z"/>
|
||||
<path d="M13950 327 c-125 -55 -150 -69 -150 -82 0 -28 23 -25 111 16 91 41
|
||||
92 42 181 37 72 -5 91 -3 95 9 10 25 -10 32 -97 38 -75 5 -91 3 -140 -18z"/>
|
||||
<path d="M8870 319 c-14 -6 -95 -29 -180 -51 l-155 -40 -315 -8 c-331 -7 -337
|
||||
-8 -465 -61 -38 -16 -55 -28 -55 -41 0 -24 18 -23 92 7 122 48 176 55 383 49
|
||||
242 -8 342 3 563 61 174 46 211 62 198 84 -9 13 -32 13 -66 0z"/>
|
||||
<path d="M9773 310 c-6 -7 -9 -19 -6 -26 4 -11 28 -14 95 -14 49 0 142 -5 206
|
||||
-11 138 -13 217 -4 217 25 0 16 -12 18 -135 21 -74 1 -187 5 -250 10 -86 5
|
||||
-118 4 -127 -5z"/>
|
||||
<path d="M6644 279 c-5 -9 -61 -11 -231 -6 -198 6 -224 5 -230 -9 -3 -8 -2
|
||||
-19 3 -24 5 -5 102 -12 215 -16 229 -8 283 0 277 39 -4 24 -23 33 -34 16z"/>
|
||||
<path d="M18537 266 c-3 -8 -40 -22 -83 -32 -75 -18 -164 -63 -164 -84 0 -21
|
||||
30 -22 62 -2 18 11 70 30 115 42 83 22 120 47 110 75 -8 19 -33 20 -40 1z"/>
|
||||
<path d="M17633 250 c-44 -20 -54 -36 -28 -46 20 -8 120 31 120 47 0 21 -46
|
||||
21 -92 -1z"/>
|
||||
<path d="M4423 235 c-24 -8 -100 -21 -170 -29 -129 -16 -157 -26 -135 -48 9
|
||||
-9 42 -8 150 5 159 19 217 36 217 62 0 24 -11 26 -62 10z"/>
|
||||
<path d="M3185 220 c-4 -7 -3 -16 3 -22 14 -14 45 -2 40 15 -6 16 -34 21 -43
|
||||
7z"/>
|
||||
<path d="M5353 223 c-31 -4 -51 -27 -33 -38 5 -3 54 -7 110 -8 74 -2 104 1
|
||||
112 11 7 8 7 16 2 22 -11 10 -146 20 -191 13z"/>
|
||||
<path d="M19166 201 c-4 -5 9 -38 28 -73 25 -45 33 -71 29 -90 -5 -25 -2 -28
|
||||
20 -28 42 0 42 35 0 120 -35 70 -63 95 -77 71z"/>
|
||||
<path d="M3363 184 c-10 -26 42 -66 81 -62 43 4 44 40 1 48 -16 4 -40 12 -53
|
||||
19 -19 10 -23 9 -29 -5z"/>
|
||||
<path d="M16986 171 c-12 -18 1 -28 46 -35 24 -4 72 -16 106 -27 47 -16 67
|
||||
-18 75 -10 8 8 7 15 -3 25 -36 34 -210 71 -224 47z"/>
|
||||
</g>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 42 KiB |
658
docs/images/dts-curate.svg
Normal file
658
docs/images/dts-curate.svg
Normal file
|
|
@ -0,0 +1,658 @@
|
|||
<?xml version="1.0" standalone="no"?>
|
||||
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 20010904//EN"
|
||||
"http://www.w3.org/TR/2001/REC-SVG-20010904/DTD/svg10.dtd">
|
||||
<svg version="1.0" xmlns="http://www.w3.org/2000/svg"
|
||||
width="1696.000000pt" height="1382.000000pt" viewBox="0 0 1696.000000 1382.000000"
|
||||
preserveAspectRatio="xMidYMid meet">
|
||||
<metadata>
|
||||
Created by potrace 1.16, written by Peter Selinger 2001-2019
|
||||
</metadata>
|
||||
<g transform="translate(0.000000,1382.000000) scale(0.100000,-0.100000)"
|
||||
fill="#000000" stroke="none">
|
||||
<path d="M5560 13432 c0 -21 30 -38 87 -48 21 -3 55 -16 76 -27 30 -17 40 -18
|
||||
50 -8 9 10 6 17 -16 37 -15 13 -40 27 -55 30 -15 3 -47 12 -71 20 -59 18 -71
|
||||
18 -71 -4z"/>
|
||||
<path d="M8923 13380 c-23 -9 -75 -89 -67 -102 12 -19 41 -5 58 27 11 19 25
|
||||
35 33 35 22 0 135 -48 175 -75 45 -30 58 -31 58 -5 0 24 -52 60 -135 93 -83
|
||||
34 -97 37 -122 27z"/>
|
||||
<path d="M3745 13369 c-16 -5 -50 -19 -75 -33 -25 -13 -58 -26 -73 -30 -20 -5
|
||||
-27 -12 -25 -24 6 -29 37 -25 115 13 94 46 154 51 198 17 25 -20 30 -21 43 -8
|
||||
12 12 13 18 3 30 -33 40 -117 56 -186 35z"/>
|
||||
<path d="M4903 13363 c-7 -18 33 -57 48 -47 14 8 11 31 -7 48 -20 20 -33 20
|
||||
-41 -1z"/>
|
||||
<path d="M6125 13320 c-22 -11 -44 -20 -50 -20 -18 0 -34 -21 -28 -36 8 -21
|
||||
50 -17 83 7 23 18 37 21 74 16 54 -8 70 8 36 35 -29 23 -66 23 -115 -2z"/>
|
||||
<path d="M4318 13312 c-23 -10 -61 -60 -53 -72 10 -16 25 -12 57 15 16 14 38
|
||||
25 49 25 12 0 19 7 19 20 0 15 -6 20 -27 19 -16 0 -36 -3 -45 -7z"/>
|
||||
<path d="M8770 13304 c-25 -8 -51 -12 -58 -9 -18 7 -52 -12 -52 -29 0 -21 68
|
||||
-25 120 -8 52 17 75 35 66 51 -9 14 -19 13 -76 -5z"/>
|
||||
<path d="M7283 13295 c-28 -20 -45 -50 -53 -95 -5 -35 -6 -35 -55 -35 -43 0
|
||||
-50 -3 -50 -20 0 -16 10 -22 54 -29 50 -9 56 -8 73 13 10 13 18 31 18 41 0 38
|
||||
23 81 52 96 16 8 28 21 25 27 -6 18 -40 19 -64 2z"/>
|
||||
<path d="M8285 13295 c-226 -59 -267 -79 -244 -116 7 -11 12 -12 29 -1 33 20
|
||||
179 65 268 82 50 10 62 16 62 31 0 23 -39 24 -115 4z"/>
|
||||
<path d="M2915 13290 c-22 -5 -82 -9 -132 -9 -84 -1 -93 -3 -93 -20 0 -26 87
|
||||
-34 223 -19 l108 12 23 -29 c13 -16 28 -25 34 -21 18 11 14 32 -10 61 -26 29
|
||||
-88 39 -153 25z"/>
|
||||
<path d="M6408 13279 c-37 -21 -48 -42 -28 -54 15 -9 122 44 117 58 -6 20 -49
|
||||
17 -89 -4z"/>
|
||||
<path d="M6856 13241 c-36 -37 -41 -39 -60 -25 -28 19 -56 18 -56 -4 0 -10 18
|
||||
-27 44 -42 l45 -24 43 49 c42 48 53 75 33 82 -6 2 -28 -15 -49 -36z"/>
|
||||
<path d="M2195 13245 c-95 -24 -129 -45 -107 -67 6 -6 33 -2 78 12 73 23 236
|
||||
30 242 10 2 -6 12 -10 23 -10 27 0 25 35 -3 54 -28 20 -159 20 -233 1z"/>
|
||||
<path d="M7497 13213 c-20 -3 -27 -9 -25 -21 3 -14 14 -17 62 -15 60 2 84 13
|
||||
72 32 -7 11 -53 12 -109 4z"/>
|
||||
<path d="M1311 13111 c-8 -5 -11 -15 -8 -23 4 -11 35 -16 129 -21 139 -7 168
|
||||
-3 168 24 0 18 -9 19 -124 19 -68 0 -130 2 -138 5 -7 3 -19 1 -27 -4z"/>
|
||||
<path d="M9472 13104 c2 -15 16 -21 58 -26 56 -7 80 -25 80 -60 0 -11 7 -18
|
||||
20 -18 29 0 27 51 -4 86 -20 24 -32 28 -91 32 -61 4 -67 3 -63 -14z"/>
|
||||
<path d="M850 13090 c-12 -12 -18 -25 -15 -30 8 -13 42 -13 50 1 5 7 25 8 56
|
||||
4 44 -6 49 -5 49 13 0 37 -106 46 -140 12z"/>
|
||||
<path d="M3846 12813 c-28 -140 -32 -294 -10 -483 8 -74 17 -174 21 -222 6
|
||||
-86 9 -93 41 -89 8 1 21 -4 30 -12 33 -29 82 -47 126 -47 36 0 52 6 78 29 31
|
||||
28 33 33 33 98 0 60 -4 74 -27 105 -50 66 -157 97 -220 64 -27 -14 -27 -14
|
||||
-35 22 -4 20 -8 137 -8 260 0 175 3 225 13 231 22 13 11 65 -15 69 -16 2 -22
|
||||
-3 -27 -25z m189 -597 c60 -26 85 -61 85 -122 0 -59 -22 -94 -60 -94 -30 0
|
||||
-84 25 -125 57 -35 27 -36 30 -30 77 8 65 19 84 52 89 16 2 32 5 36 6 4 0 23
|
||||
-6 42 -13z"/>
|
||||
<path d="M540 12767 c0 -8 -9 -22 -20 -32 -12 -10 -30 -34 -42 -53 -18 -30
|
||||
-19 -35 -6 -49 14 -13 18 -12 34 12 11 15 34 45 53 66 28 32 31 42 21 54 -15
|
||||
19 -40 20 -40 2z"/>
|
||||
<path d="M3110 12681 c0 -11 5 -21 10 -23 7 -2 5 -75 -6 -213 -18 -232 -15
|
||||
-557 6 -612 17 -48 44 -43 80 13 16 26 27 51 24 55 -9 16 -32 10 -47 -12 l-15
|
||||
-21 -8 24 c-12 37 -6 449 9 618 13 138 13 157 -1 173 -21 23 -52 22 -52 -2z"/>
|
||||
<path d="M9706 12668 c-10 -30 -15 -178 -6 -183 4 -3 16 2 25 11 12 13 15 33
|
||||
13 97 -2 53 -7 82 -15 85 -7 2 -15 -2 -17 -10z"/>
|
||||
<path d="M5755 12416 c-106 -34 -184 -88 -172 -120 3 -7 45 -32 94 -56 93 -44
|
||||
225 -136 243 -170 9 -16 6 -22 -22 -37 -27 -14 -63 -18 -185 -21 -139 -3 -153
|
||||
-5 -153 -22 0 -24 27 -30 145 -30 134 0 253 33 269 75 17 45 -97 153 -236 224
|
||||
-45 23 -86 45 -91 48 -19 12 103 68 181 83 30 5 51 4 64 -3 14 -9 21 -8 34 5
|
||||
14 14 15 20 4 32 -18 23 -92 19 -175 -8z"/>
|
||||
<path d="M474 12393 c15 -67 16 -143 3 -210 -14 -74 -10 -100 16 -90 18 7 48
|
||||
165 42 216 -10 76 -25 111 -47 111 -17 0 -19 -4 -14 -27z"/>
|
||||
<path d="M5176 12397 c-52 -16 -78 -53 -80 -112 l-1 -47 -73 4 c-58 4 -75 2
|
||||
-79 -9 -10 -25 14 -35 90 -38 73 -3 77 -4 108 -40 42 -48 122 -87 245 -120 54
|
||||
-15 106 -29 115 -32 22 -6 34 14 20 31 -7 8 -58 26 -114 41 -116 32 -196 67
|
||||
-228 101 -17 18 -19 24 -8 28 8 2 46 14 86 25 130 38 196 129 115 159 -44 17
|
||||
-154 21 -196 9z m181 -50 c15 -16 -46 -56 -116 -77 -94 -28 -101 -27 -101 13
|
||||
0 35 15 61 40 71 22 8 167 2 177 -7z"/>
|
||||
<path d="M4902 12369 c-27 -10 -26 -45 1 -43 15 2 15 -1 -3 -26 -28 -39 -111
|
||||
-130 -118 -130 -4 0 -31 14 -60 31 -44 25 -51 33 -42 44 15 18 6 45 -14 45 -9
|
||||
0 -20 -9 -26 -20 -15 -28 -32 -25 -51 8 -30 54 -191 70 -241 25 -72 -64 -79
|
||||
-256 -12 -314 38 -33 57 -31 129 17 91 59 102 70 124 118 30 69 44 75 104 41
|
||||
29 -15 54 -29 56 -31 2 -2 -21 -34 -52 -72 -61 -74 -87 -117 -87 -144 0 -29
|
||||
37 -22 48 10 13 37 133 184 146 178 94 -42 142 -57 179 -54 34 2 42 7 42 22 0
|
||||
16 -8 20 -47 22 -42 3 -148 39 -148 51 0 3 24 32 54 65 83 91 112 169 64 167
|
||||
-13 0 -33 -4 -46 -10z m-391 -91 c42 -14 49 -23 49 -70 0 -29 -9 -47 -43 -87
|
||||
-38 -44 -112 -111 -124 -111 -56 0 -80 139 -40 227 21 46 91 64 158 41z"/>
|
||||
<path d="M9741 12371 c-11 -7 -7 -25 20 -97 18 -49 33 -107 33 -128 1 -42 17
|
||||
-56 42 -36 18 16 12 49 -26 161 -31 90 -47 113 -69 100z"/>
|
||||
<path d="M3384 12235 c-4 -9 -5 -76 -2 -149 4 -109 9 -139 27 -174 26 -51 63
|
||||
-70 95 -48 29 18 82 119 100 187 14 54 14 54 25 26 6 -16 11 -34 11 -41 0 -28
|
||||
71 -202 86 -213 21 -15 50 -1 59 28 9 28 -9 46 -29 30 -12 -10 -18 -1 -36 51
|
||||
-12 35 -34 108 -49 163 -25 90 -30 100 -51 100 -21 0 -27 -10 -52 -100 -31
|
||||
-106 -73 -195 -94 -195 -28 0 -47 86 -48 218 -1 112 -3 127 -19 130 -9 2 -20
|
||||
-4 -23 -13z"/>
|
||||
<path d="M545 11771 c-3 -6 -2 -37 3 -68 6 -32 9 -74 8 -93 -1 -29 3 -35 19
|
||||
-35 17 0 20 8 23 60 4 87 -29 173 -53 136z"/>
|
||||
<path d="M9826 11628 c3 -67 10 -127 15 -132 4 -5 15 -6 23 -3 19 8 20 56 3
|
||||
172 -10 64 -16 81 -30 83 -17 4 -18 -4 -11 -120z"/>
|
||||
<path d="M8430 11424 c-30 -8 -103 -28 -161 -44 -88 -25 -125 -30 -220 -30
|
||||
-130 -1 -236 -20 -259 -47 -21 -26 -70 -47 -102 -44 -16 1 -28 -2 -28 -8 0 -6
|
||||
-20 -11 -47 -11 -27 0 -91 -7 -143 -16 -52 -8 -113 -16 -135 -17 -33 -2 -41
|
||||
-6 -43 -24 -3 -18 2 -23 17 -23 20 0 21 -5 21 -133 0 -146 15 -371 31 -457 16
|
||||
-89 38 -272 54 -459 8 -95 18 -177 21 -182 12 -19 32 -7 38 22 9 47 7 139 -3
|
||||
139 -5 0 -12 35 -16 78 -11 120 -34 308 -50 407 -8 50 -17 169 -20 265 -3 96
|
||||
-7 209 -9 251 l-4 76 87 11 c47 6 140 16 206 22 166 15 230 30 230 55 0 12 -9
|
||||
21 -25 25 -22 6 -20 7 15 13 22 4 90 7 150 7 75 1 132 7 180 20 327 89 350 92
|
||||
456 42 69 -32 65 -11 48 -262 -9 -121 -9 -212 -1 -340 11 -187 60 -523 91
|
||||
-630 30 -102 33 -126 19 -137 -19 -16 -190 -33 -320 -33 -192 0 -522 -31 -643
|
||||
-60 -22 -5 -56 -10 -76 -10 -19 0 -75 -16 -124 -36 -48 -19 -97 -33 -107 -31
|
||||
-20 6 -51 -19 -45 -37 8 -23 58 -16 158 23 60 24 120 41 143 41 23 0 68 7 101
|
||||
14 33 8 92 17 130 21 39 3 85 8 103 11 29 4 32 2 32 -19 0 -46 -28 -91 -72
|
||||
-119 -60 -37 -83 -64 -106 -123 -12 -31 -27 -51 -38 -54 -45 -8 -53 -47 -11
|
||||
-53 13 -2 23 -13 27 -28 7 -30 34 -37 56 -16 16 16 79 21 120 10 21 -5 22 -13
|
||||
26 -157 3 -84 2 -156 -1 -162 -8 -14 -2 -220 10 -325 12 -111 11 -180 -1 -180
|
||||
-18 0 -11 -39 9 -50 14 -7 23 -6 33 3 7 8 63 22 124 31 61 9 150 31 200 47 89
|
||||
30 143 38 399 59 72 5 186 17 255 26 95 12 173 14 325 10 198 -6 368 6 465 34
|
||||
58 17 67 14 62 -19 -5 -35 14 -49 36 -27 14 14 14 20 4 36 -15 25 -16 25 102
|
||||
45 49 8 139 15 201 15 106 0 113 -1 108 -19 -8 -31 16 -34 55 -8 42 28 107 41
|
||||
158 31 33 -6 34 -8 28 -40 -4 -21 -2 -34 4 -34 6 0 12 -21 14 -47 4 -64 26
|
||||
-68 76 -15 51 55 122 89 358 171 131 46 150 62 97 82 -15 5 -46 28 -70 50 -24
|
||||
22 -55 45 -71 51 -15 6 -100 13 -190 16 -161 4 -164 5 -172 28 -6 15 -18 24
|
||||
-30 24 -20 0 -21 -4 -18 -105 l3 -104 -55 -7 c-30 -4 -72 -13 -94 -20 -26 -10
|
||||
-90 -14 -203 -14 -164 0 -240 -10 -453 -57 -60 -14 -135 -17 -370 -19 -234 -1
|
||||
-329 -6 -460 -22 -91 -12 -232 -26 -315 -31 -126 -8 -165 -15 -245 -42 -52
|
||||
-17 -143 -39 -202 -48 l-106 -17 -6 29 c-11 54 -7 104 10 118 14 11 16 30 11
|
||||
119 -3 65 -10 116 -20 135 -12 23 -16 75 -19 224 l-3 194 56 21 c31 12 63 27
|
||||
72 34 16 14 18 12 80 -77 28 -41 67 -56 67 -27 0 8 -13 34 -29 58 -16 24 -62
|
||||
108 -102 187 -40 79 -86 156 -102 172 l-28 28 23 6 c13 2 131 9 263 15 132 6
|
||||
257 13 277 16 34 6 37 4 40 -22 2 -21 8 -29 23 -29 17 0 21 8 23 45 4 48 -11
|
||||
140 -33 205 -8 22 -25 112 -39 200 -15 88 -32 187 -39 220 -17 84 -17 650 1
|
||||
724 11 48 11 56 -5 74 -10 11 -34 26 -53 34 -19 8 -43 22 -52 30 -24 22 -168
|
||||
26 -238 7z m-140 -1667 c47 -85 51 -103 18 -86 -13 6 -35 23 -50 37 -24 22
|
||||
-28 34 -28 79 0 34 4 52 10 48 5 -3 28 -39 50 -78z m-110 -61 c0 -8 -14 -29
|
||||
-31 -47 l-31 -33 23 47 c23 46 39 60 39 33z m-94 -40 c-20 -43 -51 -60 -34
|
||||
-18 14 32 39 64 46 57 3 -2 -3 -20 -12 -39z m214 -38 c16 -10 24 -10 43 1 20
|
||||
12 21 12 7 -3 -12 -13 -26 -15 -64 -10 -31 5 -43 10 -34 15 18 12 25 11 48 -3z
|
||||
m2849 -560 c13 -5 22 -10 20 -13 -3 -2 -68 1 -146 7 -113 9 -145 9 -158 -2
|
||||
-23 -19 -18 -36 18 -64 l32 -26 -56 0 c-55 0 -57 1 -63 31 -3 17 -6 45 -6 61
|
||||
l0 29 168 -7 c92 -4 178 -11 191 -16z m-159 -63 c-18 -10 -28 -10 -42 -1 -28
|
||||
17 -22 22 24 18 40 -4 41 -5 18 -17z m156 -43 c-3 -3 -23 -13 -45 -23 -42 -18
|
||||
-40 -19 -50 26 -3 15 41 23 72 12 15 -5 26 -12 23 -15z m-238 -46 c-22 -16
|
||||
-23 -32 -3 -43 12 -7 5 -14 -30 -31 -25 -12 -45 -26 -45 -32 0 -5 -3 -10 -8
|
||||
-10 -4 0 -8 27 -10 59 l-3 60 38 4 c80 8 80 8 61 -7z m71 -20 c-2 -2 -15 -9
|
||||
-29 -15 -24 -11 -24 -11 -6 3 16 13 49 24 35 12z"/>
|
||||
<path d="M5510 11253 c-8 -3 -112 -43 -230 -88 -344 -133 -352 -134 -720 -155
|
||||
-102 -6 -200 -13 -217 -16 l-33 -6 0 45 c0 25 -5 49 -10 52 -21 13 -40 -17
|
||||
-40 -61 l0 -44 -39 0 c-43 0 -64 -18 -59 -51 4 -29 21 -34 42 -14 9 9 25 15
|
||||
37 13 20 -3 22 -10 26 -133 2 -71 10 -212 19 -312 8 -107 14 -290 14 -440 l-1
|
||||
-258 22 0 c12 0 28 10 36 21 12 19 12 24 -3 39 -15 15 -16 36 -11 213 5 142 3
|
||||
243 -8 362 -8 91 -18 244 -22 341 l-6 177 29 6 c86 17 170 26 259 26 251 1
|
||||
374 25 615 121 220 87 349 131 364 126 8 -3 16 -21 20 -41 7 -39 50 -96 71
|
||||
-96 22 0 24 23 4 45 -10 11 -26 45 -36 75 l-18 55 -45 2 c-25 1 -52 -1 -60 -4z"/>
|
||||
<path d="M5745 11238 c-2 -7 -6 -33 -8 -58 -3 -25 -13 -97 -22 -160 -21 -142
|
||||
-15 -375 14 -560 19 -123 75 -361 125 -531 14 -48 24 -99 23 -115 -2 -23 2
|
||||
-29 18 -29 17 0 20 8 23 47 2 26 -2 56 -7 67 -6 11 -36 118 -66 238 -54 214
|
||||
-88 405 -100 573 -7 95 8 297 30 415 21 106 20 125 -5 125 -11 0 -22 -6 -25
|
||||
-12z"/>
|
||||
<path d="M585 11160 c-4 -6 1 -23 10 -37 10 -14 20 -49 24 -77 5 -42 9 -51 26
|
||||
-51 17 0 20 6 19 46 0 74 -56 157 -79 119z"/>
|
||||
<path d="M9926 11048 c-3 -7 -6 -54 -8 -105 -3 -67 -1 -94 8 -97 33 -13 55 87
|
||||
37 168 -9 40 -29 59 -37 34z"/>
|
||||
<path d="M3253 10956 c-4 -8 -48 -26 -98 -41 -197 -58 -277 -98 -379 -187 -28
|
||||
-24 -38 -39 -33 -51 9 -25 17 -22 82 34 33 27 92 66 130 84 86 42 297 107 309
|
||||
95 5 -5 12 -86 17 -182 10 -217 12 -232 59 -523 42 -266 66 -439 75 -560 l7
|
||||
-80 -174 -2 c-235 -3 -381 -17 -658 -64 -157 -27 -281 -42 -372 -46 -153 -7
|
||||
-147 -10 -127 61 9 33 8 42 -5 51 -11 9 -21 68 -41 251 -34 306 -42 537 -25
|
||||
706 9 96 10 132 1 141 -58 58 -73 -364 -28 -793 14 -135 28 -284 32 -332 7
|
||||
-85 6 -86 -17 -90 -31 -4 -36 -34 -6 -43 13 -4 26 -13 30 -18 5 -8 14 -7 30 1
|
||||
13 7 93 16 178 22 85 5 218 21 295 35 191 34 316 52 468 64 147 13 416 15 418
|
||||
4 7 -33 5 -263 -2 -263 -5 0 -9 -9 -9 -21 0 -16 5 -20 28 -17 l27 3 3 146 3
|
||||
147 35 -8 c36 -8 57 -20 36 -20 -14 0 -16 -26 -3 -34 5 -3 32 0 60 7 92 21 58
|
||||
62 -75 89 -62 12 -60 7 -69 143 -7 117 -28 266 -77 555 -36 209 -41 259 -45
|
||||
450 -4 166 -8 219 -19 231 -8 9 -12 24 -8 34 11 29 -37 49 -53 21z"/>
|
||||
<path d="M2983 10936 c-10 -17 -84 -40 -188 -59 -110 -21 -183 -27 -371 -32
|
||||
-182 -5 -316 -29 -401 -71 -28 -15 -58 -24 -66 -21 -18 7 -37 -11 -30 -29 8
|
||||
-21 80 -18 111 5 60 41 221 71 388 71 320 0 707 88 623 141 -21 13 -57 11 -66
|
||||
-5z"/>
|
||||
<path d="M8217 10903 c-17 -17 -5 -54 26 -77 56 -42 132 -83 198 -107 35 -12
|
||||
65 -24 67 -25 9 -7 -29 -55 -115 -147 -98 -106 -130 -154 -120 -181 10 -25 25
|
||||
-19 42 15 9 17 48 65 87 107 40 43 91 102 115 132 29 37 50 55 65 55 37 0 36
|
||||
40 -2 58 -17 9 -37 14 -44 11 -40 -15 -270 100 -287 144 -9 22 -20 28 -32 15z"/>
|
||||
<path d="M5070 10803 c-19 -2 -44 -8 -55 -13 -11 -5 -38 -14 -60 -21 -151 -44
|
||||
-332 -196 -350 -293 -12 -61 29 -115 91 -119 44 -3 39 32 -6 47 -37 12 -47 35
|
||||
-36 82 19 75 226 227 341 249 l30 6 2 -118 c1 -83 11 -167 32 -283 48 -257 42
|
||||
-288 -47 -255 -26 10 -74 33 -108 52 -66 36 -89 41 -97 19 -11 -27 193 -125
|
||||
300 -146 82 -16 218 -9 261 14 114 59 87 346 -40 424 -18 11 -45 24 -60 27
|
||||
-16 4 -26 11 -23 15 16 26 23 115 14 167 -24 140 -51 161 -189 146z m124 -72
|
||||
c18 -33 31 -148 22 -184 -6 -27 -56 -61 -103 -71 -29 -7 -31 -5 -37 31 -3 21
|
||||
-6 86 -6 146 l0 107 55 0 c50 0 56 -2 69 -29z m109 -322 c56 -36 80 -95 85
|
||||
-205 4 -84 2 -92 -19 -118 -26 -30 -78 -45 -149 -46 -79 0 -91 7 -84 49 3 20
|
||||
-3 91 -15 158 -12 67 -21 130 -21 140 0 55 130 69 203 22z"/>
|
||||
<path d="M7702 10771 c-10 -6 -12 -21 -7 -50 6 -39 1 -52 -51 -143 -31 -55
|
||||
-65 -109 -76 -120 -29 -29 -19 -53 22 -54 19 0 61 -13 94 -28 110 -51 253 -73
|
||||
283 -44 26 27 6 38 -66 38 -75 0 -125 12 -217 54 l-62 28 45 76 c65 108 103
|
||||
192 103 225 0 23 -4 27 -27 27 -16 0 -34 -4 -41 -9z"/>
|
||||
<path d="M7864 10767 c-5 -15 20 -86 83 -232 30 -69 44 -90 58 -90 17 0 21 12
|
||||
31 85 12 89 36 160 53 160 18 0 59 -72 72 -125 6 -27 13 -56 15 -63 2 -8 12
|
||||
-12 21 -10 57 12 -41 248 -102 248 -13 0 -33 -10 -44 -21 -21 -23 -51 -100
|
||||
-51 -130 0 -47 -22 -19 -61 81 -40 103 -62 130 -75 97z"/>
|
||||
<path d="M684 10569 c-3 -6 2 -26 12 -45 l18 -33 -33 -69 c-33 -67 -34 -96 -5
|
||||
-90 8 2 31 38 51 81 l37 78 -22 44 c-21 43 -44 57 -58 34z"/>
|
||||
<path d="M6840 10510 c-56 -56 15 -132 111 -118 29 4 47 60 29 94 -25 45 -105
|
||||
59 -140 24z m85 -34 c25 -18 14 -46 -17 -39 -37 9 -50 23 -37 39 14 18 30 18
|
||||
54 0z"/>
|
||||
<path d="M9926 10502 c-3 -5 -8 -28 -12 -50 -5 -34 -4 -42 8 -42 23 0 37 22
|
||||
40 60 2 25 -1 35 -14 38 -9 2 -19 -1 -22 -6z"/>
|
||||
<path d="M6215 10455 c-48 -48 -26 -145 33 -145 33 0 52 27 52 75 0 92 -35
|
||||
121 -85 70z m45 -64 c0 -17 -4 -33 -10 -36 -11 -7 -25 39 -15 54 12 21 25 11
|
||||
25 -18z"/>
|
||||
<path d="M6583 10464 c-17 -9 -34 -23 -38 -31 -7 -19 20 -63 40 -63 18 0 45
|
||||
27 45 46 0 8 6 14 14 14 22 0 38 24 24 38 -16 16 -47 15 -85 -4z"/>
|
||||
<path d="M2834 10426 c-3 -8 -3 -19 0 -24 3 -5 -6 -20 -21 -33 -17 -16 -27
|
||||
-20 -30 -12 -3 7 -13 23 -22 35 -23 28 -56 18 -47 -15 22 -73 20 -86 -21 -145
|
||||
-88 -127 -233 -394 -233 -430 0 -35 62 -8 65 28 1 11 18 56 39 98 l38 78 71
|
||||
-3 c93 -4 214 -21 250 -35 18 -7 37 -28 53 -60 27 -54 50 -59 48 -11 -2 33 -9
|
||||
48 -68 144 -21 35 -63 109 -93 163 l-54 99 46 47 c53 54 57 83 12 88 -17 2
|
||||
-29 -2 -33 -12z m10 -280 c37 -66 66 -120 66 -121 0 -1 -24 1 -52 6 -29 4 -92
|
||||
10 -140 14 l-86 7 31 53 c34 57 110 165 114 162 1 -2 31 -56 67 -121z"/>
|
||||
<path d="M9965 10159 c-4 -5 1 -27 11 -47 21 -44 33 -202 15 -202 -6 0 -11 -9
|
||||
-11 -21 0 -31 42 -21 58 14 18 37 1 193 -25 237 -18 31 -37 38 -48 19z"/>
|
||||
<path d="M656 9931 c-4 -6 1 -22 10 -37 17 -25 17 -28 -1 -60 -14 -26 -16 -37
|
||||
-7 -46 14 -14 37 3 58 44 14 26 13 33 -3 66 -18 37 -45 52 -57 33z"/>
|
||||
<path d="M4371 9781 c-107 -40 -199 -123 -161 -146 12 -7 116 51 133 74 46 65
|
||||
299 65 616 -1 125 -26 151 -34 137 -43 -9 -7 -16 -22 -16 -35 0 -12 -22 -62
|
||||
-49 -110 -63 -110 -101 -237 -108 -355 -5 -76 -3 -93 11 -104 11 -9 20 -10 29
|
||||
-3 9 8 158 34 163 28 1 0 -5 -41 -12 -91 -8 -49 -11 -101 -7 -115 4 -14 7
|
||||
-151 8 -305 1 -155 7 -309 13 -345 6 -36 16 -119 22 -185 14 -159 19 -195 26
|
||||
-206 8 -14 156 -11 231 6 37 8 95 24 128 36 57 20 73 21 315 16 180 -4 274
|
||||
-10 320 -21 66 -15 187 -28 450 -45 110 -8 166 -17 230 -37 112 -36 282 -38
|
||||
440 -6 89 17 152 21 405 25 430 7 686 38 1090 133 39 9 120 20 180 24 121 9
|
||||
535 77 660 109 109 28 352 70 452 78 88 6 82 9 98 -42 4 -13 9 -14 25 -5 15 8
|
||||
19 17 15 31 -6 18 0 19 146 19 115 0 165 4 206 17 51 16 54 16 67 -2 11 -15
|
||||
21 -17 66 -11 l53 7 -7 -109 c-5 -91 -4 -111 9 -122 12 -10 22 -6 55 28 22 22
|
||||
51 43 63 46 13 3 68 31 123 62 146 83 251 134 274 134 27 0 38 29 17 45 -9 6
|
||||
-42 17 -74 24 -32 7 -85 21 -118 32 -33 11 -113 25 -177 31 l-117 12 -6 61
|
||||
c-8 73 -16 88 -41 83 -15 -2 -20 -13 -22 -50 -2 -36 -7 -47 -23 -51 -25 -7
|
||||
-24 -29 1 -52 12 -11 20 -31 20 -51 0 -32 -2 -33 -57 -44 -32 -6 -87 -20 -123
|
||||
-31 -54 -17 -88 -20 -207 -17 -162 3 -142 -8 -178 106 -10 31 -22 52 -31 52
|
||||
-24 0 -25 -21 -5 -85 10 -33 18 -61 17 -62 -1 -1 -43 -7 -93 -13 -120 -13
|
||||
-417 -68 -472 -86 -24 -8 -78 -19 -120 -25 -42 -6 -164 -26 -271 -45 -107 -19
|
||||
-221 -34 -253 -34 -51 0 -348 -53 -522 -94 -33 -8 -141 -21 -240 -30 -99 -9
|
||||
-221 -21 -272 -26 -50 -6 -195 -10 -320 -10 -195 0 -243 -3 -323 -21 -129 -28
|
||||
-307 -22 -425 14 -94 29 -136 34 -385 47 -102 6 -203 15 -225 20 -22 5 -96 17
|
||||
-165 26 -168 21 -480 11 -553 -17 -83 -33 -279 -59 -292 -40 -2 4 -8 63 -15
|
||||
131 -6 69 -17 166 -25 215 -9 60 -15 200 -16 425 -3 355 3 448 29 458 9 3 57
|
||||
30 106 59 96 57 134 65 185 38 25 -13 31 -13 41 0 14 17 -17 63 -116 165 -66
|
||||
69 -103 132 -128 218 -14 50 -14 53 2 48 59 -18 270 -49 337 -50 155 -1 292
|
||||
55 283 116 -4 29 -41 32 -47 3 -5 -29 -28 -42 -103 -60 -108 -24 -235 -16
|
||||
-440 31 -61 14 -67 18 -70 42 -4 33 -40 42 -69 16 -22 -20 -32 -19 -239 26
|
||||
-124 27 -171 32 -325 36 -162 4 -185 3 -234 -15z m830 -133 c9 -7 23 -40 33
|
||||
-73 29 -95 70 -166 131 -225 62 -60 86 -94 60 -84 -8 3 -29 1 -47 -5 -26 -9
|
||||
-34 -9 -40 4 -5 8 -17 15 -27 15 -9 0 -41 12 -70 26 l-53 27 7 82 c6 79 6 83
|
||||
-15 90 -12 4 -27 1 -36 -6 -13 -10 -17 -10 -25 2 -12 19 -11 39 3 80 24 72 48
|
||||
92 79 67z m-142 -315 c-7 -32 -12 -73 -12 -91 0 -28 -5 -34 -29 -39 -36 -7
|
||||
-45 -21 -26 -40 13 -13 20 -13 52 1 21 9 50 25 67 36 16 12 29 17 29 12 0 -9
|
||||
-149 -92 -164 -92 -3 0 -6 22 -6 49 0 37 11 71 45 143 25 53 46 102 46 109 1
|
||||
8 4 4 6 -8 2 -12 -1 -48 -8 -80z m63 -58 c-17 -37 -33 -32 -21 7 5 18 9 35 9
|
||||
37 0 3 5 0 12 -7 9 -9 9 -18 0 -37z m93 -7 c24 -11 34 -28 16 -28 -5 0 -16 -3
|
||||
-24 -6 -10 -3 -16 3 -19 20 -6 30 -7 30 27 14z m35 -72 c0 -2 -16 -13 -35 -25
|
||||
-19 -11 -35 -16 -35 -11 0 5 12 16 28 24 27 15 42 19 42 12z m5570 -900 c0 -3
|
||||
-4 -8 -10 -11 -5 -3 -10 -1 -10 4 0 6 5 11 10 11 6 0 10 -2 10 -4z m90 -26 c0
|
||||
-5 -4 -10 -9 -10 -6 0 -13 5 -16 10 -3 6 1 10 9 10 9 0 16 -4 16 -10z m159
|
||||
-50 c12 0 21 -4 21 -10 0 -5 8 -10 18 -10 14 0 15 -2 2 -10 -23 -15 -32 -12
|
||||
-70 22 -20 17 -25 25 -13 19 12 -6 31 -11 42 -11z m-130 -20 c-12 -16 -26 -27
|
||||
-31 -24 -15 9 -8 42 10 47 39 10 42 7 21 -23z m-62 -67 c21 -46 46 -42 78 13
|
||||
l27 46 24 -23 24 -22 -76 -44 c-42 -23 -82 -43 -89 -43 -7 0 -24 -9 -38 -20
|
||||
-33 -26 -37 -25 -37 9 0 19 6 30 18 33 11 3 23 24 32 58 8 29 16 46 18 39 3
|
||||
-8 11 -29 19 -46z"/>
|
||||
<path d="M12214 9656 c-3 -7 -4 -17 -3 -22 1 -5 1 -21 0 -36 -1 -25 -5 -28
|
||||
-38 -28 -40 0 -103 -40 -103 -66 0 -18 58 -44 99 -44 24 0 28 -3 24 -20 -3
|
||||
-10 -11 -25 -19 -31 -8 -6 -14 -20 -14 -30 0 -18 -2 -18 -36 -4 -19 8 -90 31
|
||||
-157 51 -102 31 -138 37 -217 38 -83 1 -95 -1 -95 -16 0 -9 -4 -20 -8 -24 -15
|
||||
-15 -7 -63 12 -74 18 -9 37 -61 33 -87 -4 -18 68 -133 82 -133 17 0 27 25 19
|
||||
46 -10 28 35 54 95 54 28 0 52 -2 52 -4 0 -2 -7 -23 -15 -46 -29 -83 1 -170
|
||||
60 -170 22 0 19 37 -5 50 -25 13 -27 72 -4 130 24 59 37 50 28 -17 -8 -67 -9
|
||||
-57 4 -151 6 -39 8 -81 5 -93 -4 -15 0 -22 16 -26 14 -3 21 -13 21 -28 0 -39
|
||||
24 -55 65 -44 22 6 58 7 94 2 70 -11 105 -2 141 34 37 38 42 59 32 131 l-9 62
|
||||
26 -17 c84 -55 121 -74 130 -68 18 11 12 34 -11 46 -23 11 -244 164 -262 180
|
||||
-18 16 109 -23 135 -42 15 -10 38 -18 51 -17 12 1 71 -19 130 -45 59 -26 113
|
||||
-47 120 -47 8 0 24 -7 36 -16 33 -23 52 -11 52 31 0 30 -5 37 -32 49 -134 57
|
||||
-182 76 -194 76 -8 0 -14 9 -14 20 0 14 -10 22 -32 28 -32 8 -33 10 -30 58 4
|
||||
69 -29 125 -82 138 -44 12 -68 1 -76 -35 -6 -22 -7 -21 -13 10 -12 59 -8 89
|
||||
12 96 10 3 26 14 35 24 24 27 8 54 -44 75 -25 10 -44 25 -50 41 -10 27 -37 34
|
||||
-46 11z m96 -100 c0 -2 -7 -9 -15 -16 -12 -10 -15 -10 -15 4 0 9 7 16 15 16 8
|
||||
0 15 -2 15 -4z m-100 -35 c0 -11 -40 -22 -54 -14 -5 4 -1 10 10 14 27 11 44
|
||||
11 44 0z m53 -117 c8 -40 -19 -69 -52 -56 l-22 8 20 25 c11 14 23 38 27 54 8
|
||||
31 17 20 27 -31z m-328 -15 c73 -24 63 -40 -11 -20 -30 8 -41 7 -54 -4 -22
|
||||
-20 -33 -19 -72 5 -18 11 -47 20 -64 20 -20 0 -34 6 -38 16 -6 15 3 16 81 11
|
||||
49 -3 120 -16 158 -28z m495 -75 c0 -23 -5 -34 -14 -34 -10 0 -15 16 -18 56
|
||||
-3 54 -3 55 15 33 9 -11 17 -36 17 -55z m-172 -34 c13 -8 11 -9 -13 -4 -100
|
||||
20 -182 47 -192 63 -9 15 5 12 88 -15 55 -18 107 -38 117 -44z m-498 48 c0
|
||||
-16 31 -48 47 -48 7 0 13 7 13 16 0 8 5 12 11 8 15 -9 -8 -31 -42 -39 -23 -6
|
||||
-27 -2 -41 34 -14 35 -14 41 -2 41 8 0 14 -5 14 -12z m205 -38 c4 -6 -9 -10
|
||||
-32 -10 -28 0 -34 3 -23 10 20 13 47 13 55 0z m170 -73 c12 -10 14 -16 7 -21
|
||||
-31 -19 -1 -105 32 -93 16 6 18 2 20 -48 1 -13 8 -20 21 -20 18 0 20 6 19 52
|
||||
-2 46 0 51 15 44 43 -24 91 -101 91 -148 0 -39 -44 -57 -137 -55 -58 1 -74 -2
|
||||
-82 -15 -7 -14 -12 -8 -22 28 -7 24 -21 53 -32 63 -17 17 -19 28 -13 94 11
|
||||
117 15 132 40 132 12 0 30 -6 41 -13z m108 -344 c-7 -2 -19 -2 -25 0 -7 3 -2
|
||||
5 12 5 14 0 19 -2 13 -5z"/>
|
||||
<path d="M9945 9650 c-4 -6 -1 -26 5 -45 6 -19 10 -49 8 -67 -2 -27 0 -33 17
|
||||
-33 16 0 21 8 23 40 6 74 -29 144 -53 105z"/>
|
||||
<path d="M15212 9537 c-13 -18 -41 -211 -48 -329 -3 -56 -2 -147 3 -200 l9
|
||||
-98 -33 0 c-44 0 -83 -19 -83 -42 0 -20 11 -22 58 -9 51 15 59 6 72 -72 7 -40
|
||||
27 -137 45 -217 18 -80 36 -164 40 -188 8 -52 31 -78 51 -61 22 18 16 354 -6
|
||||
354 -12 0 -16 -18 -18 -90 l-4 -90 -28 125 c-16 69 -32 149 -36 177 l-6 53 46
|
||||
-17 c30 -11 46 -23 46 -34 0 -21 19 -29 43 -17 21 11 22 41 2 58 -8 7 -43 23
|
||||
-78 35 l-62 23 -8 53 c-13 82 -1 403 17 474 8 33 15 72 16 86 0 29 -23 45 -38
|
||||
26z"/>
|
||||
<path d="M2477 9352 c-13 -26 -43 -108 -66 -180 -48 -147 -41 -141 -130 -106
|
||||
-37 16 -51 11 -51 -15 0 -19 65 -84 91 -93 11 -4 11 -8 -3 -22 -36 -35 6 -61
|
||||
50 -31 17 13 29 14 61 5 21 -5 42 -17 45 -26 20 -52 48 -205 71 -388 9 -71 25
|
||||
-142 45 -196 l32 -85 6 -305 c9 -418 8 -805 -2 -990 l-9 -155 27 -24 26 -24
|
||||
107 31 c60 17 142 36 183 42 41 7 118 25 170 42 l95 30 195 -6 c182 -5 199 -4
|
||||
260 16 58 20 89 22 294 25 250 3 277 7 422 68 138 58 209 65 615 55 195 -5
|
||||
426 -14 514 -20 154 -12 166 -11 325 14 91 15 226 33 300 41 74 8 163 19 197
|
||||
25 148 25 210 29 279 18 38 -5 184 -10 324 -9 254 1 330 8 490 46 63 14 190
|
||||
35 335 55 39 5 93 14 120 20 28 7 140 15 250 19 191 8 204 9 285 40 199 75
|
||||
356 115 488 125 40 3 90 10 110 15 23 6 217 9 497 7 400 -2 466 -5 504 -19 24
|
||||
-10 67 -17 96 -17 61 0 65 -5 65 -84 0 -72 26 -276 51 -398 12 -57 24 -157 28
|
||||
-223 5 -94 9 -120 20 -120 35 0 36 152 2 317 -25 120 -48 289 -56 404 l-6 91
|
||||
138 6 c90 4 164 13 212 27 94 25 159 26 177 3 20 -27 17 -49 -12 -67 -26 -18
|
||||
-31 -64 -6 -58 6 1 12 -2 12 -8 0 -5 8 -10 19 -10 14 0 20 -10 25 -40 5 -31
|
||||
11 -40 26 -40 18 0 20 7 20 66 0 61 2 67 32 92 17 15 50 39 74 53 23 15 43 31
|
||||
45 36 2 5 26 23 53 41 33 21 56 30 72 26 16 -4 24 -1 29 15 7 24 35 29 35 7 0
|
||||
-23 20 -30 38 -13 14 14 13 18 -2 41 -16 26 -16 27 19 57 34 31 45 62 25 74
|
||||
-6 4 -34 -1 -63 -11 -59 -20 -219 -23 -242 -4 -7 6 -25 8 -39 4 -16 -4 -41 1
|
||||
-68 14 -57 26 -85 32 -119 25 -22 -4 -29 -11 -29 -29 0 -13 4 -24 10 -24 15 0
|
||||
40 -55 40 -88 0 -16 -3 -43 -6 -60 -6 -29 -9 -31 -63 -37 -31 -3 -80 -13 -110
|
||||
-21 -69 -20 -206 -33 -287 -26 l-63 5 -3 51 c-3 43 -6 51 -23 51 -18 0 -20 -6
|
||||
-17 -54 l4 -53 -54 7 c-29 3 -78 13 -108 22 -47 13 -125 15 -520 14 -256 -1
|
||||
-478 -5 -495 -10 -16 -5 -68 -12 -115 -16 -47 -4 -121 -15 -165 -26 -73 -17
|
||||
-116 -30 -335 -106 -66 -22 -99 -26 -275 -33 -110 -4 -234 -15 -275 -23 -41
|
||||
-8 -118 -20 -170 -27 -52 -6 -156 -24 -230 -40 -74 -16 -164 -33 -200 -39 -90
|
||||
-14 -484 -14 -603 1 -87 11 -112 10 -245 -10 -81 -11 -178 -24 -217 -27 -38
|
||||
-4 -142 -18 -230 -33 -190 -31 -273 -32 -875 -14 -496 16 -548 12 -696 -54
|
||||
-125 -55 -134 -57 -379 -59 -205 -1 -238 -4 -302 -23 -65 -20 -96 -22 -287
|
||||
-22 -210 0 -216 -1 -300 -29 -46 -16 -113 -32 -148 -36 -35 -4 -110 -20 -168
|
||||
-36 -58 -16 -111 -27 -119 -24 -15 6 -14 20 10 315 9 112 9 237 0 550 -7 223
|
||||
-9 434 -6 470 6 60 3 75 -34 180 -28 77 -45 143 -51 200 -10 99 -36 266 -49
|
||||
319 -21 84 -22 91 -8 91 7 0 23 -23 35 -51 16 -38 26 -50 39 -47 14 2 19 14
|
||||
21 50 3 45 4 46 35 44 27 -1 33 3 35 23 2 13 19 39 38 56 22 21 34 42 34 59 0
|
||||
31 -14 33 -68 11 -34 -15 -38 -15 -49 1 -29 40 -95 231 -98 282 -3 59 -2 57
|
||||
-32 66 -19 6 -26 0 -46 -42z m58 -142 c3 -5 1 -10 -4 -10 -6 0 -11 5 -11 10 0
|
||||
6 2 10 4 10 3 0 8 -4 11 -10z m-20 -203 c8 -47 -18 -26 -30 24 -8 31 -8 54 -1
|
||||
79 l11 35 7 -55 c4 -30 10 -68 13 -83z m65 -9 c0 -5 -4 -8 -10 -8 -5 0 -10 10
|
||||
-10 23 0 18 2 19 10 7 5 -8 10 -18 10 -22z m-135 -46 c-3 -3 -11 0 -18 7 -9
|
||||
10 -8 11 6 5 10 -3 15 -9 12 -12z m8388 -1318 c18 -9 33 -18 35 -19 5 -5 -52
|
||||
-84 -60 -85 -5 0 -8 10 -8 23 -1 12 -7 39 -14 60 -16 43 -6 48 47 21z m210
|
||||
-50 c-3 -9 -21 -14 -49 -14 -35 0 -44 3 -44 18 0 14 8 16 49 14 38 -3 48 -7
|
||||
44 -18z m-128 -80 c6 -7 19 -14 30 -16 17 -3 15 -7 -14 -22 -31 -16 -35 -17
|
||||
-43 -2 -5 9 -18 16 -29 16 -16 0 -18 3 -9 19 11 22 49 24 65 5z m-72 -96 c-10
|
||||
-12 -19 -15 -21 -8 -7 20 7 40 23 34 14 -6 14 -9 -2 -26z"/>
|
||||
<path d="M664 9166 c-3 -8 -1 -23 5 -34 6 -11 8 -34 5 -51 -6 -26 -3 -31 13
|
||||
-31 19 0 53 28 53 43 0 15 -51 87 -60 87 -6 0 -13 -6 -16 -14z"/>
|
||||
<path d="M15980 9140 c-11 -7 -10 -30 8 -137 12 -70 31 -184 42 -253 11 -69
|
||||
30 -174 43 -235 20 -94 26 -110 43 -110 18 0 19 7 16 155 -4 145 -3 157 17
|
||||
182 28 35 102 62 242 88 63 11 134 25 159 30 25 5 58 12 74 14 35 6 40 11 32
|
||||
32 -7 19 -6 19 -236 -24 -225 -44 -295 -74 -324 -142 -13 -32 -13 -31 -29 61
|
||||
-9 52 -21 132 -28 179 -14 101 -27 157 -37 164 -4 3 -14 1 -22 -4z"/>
|
||||
<path d="M15645 8942 c-141 -67 -211 -218 -203 -437 2 -64 6 -80 19 -83 17 -3
|
||||
122 100 184 181 33 43 36 51 23 63 -13 13 -25 2 -98 -82 -46 -54 -86 -92 -88
|
||||
-85 -10 31 20 208 45 264 56 125 220 198 294 131 24 -22 26 -118 4 -171 -20
|
||||
-47 -19 -63 4 -63 27 0 61 93 61 166 0 48 -4 59 -34 91 -32 35 -38 37 -102 40
|
||||
-52 3 -79 -1 -109 -15z"/>
|
||||
<path d="M13735 8834 c-38 -8 -89 -12 -140 -8 -84 5 -112 -3 -102 -30 5 -13
|
||||
15 -16 44 -11 37 7 37 6 -25 -34 -141 -92 -195 -179 -226 -365 -22 -127 0
|
||||
-245 53 -284 84 -62 222 -53 376 24 87 44 104 59 87 76 -10 10 -28 5 -85 -25
|
||||
-108 -54 -152 -67 -231 -67 -117 0 -153 33 -163 146 -7 85 16 211 54 290 32
|
||||
69 123 153 207 194 58 27 69 29 108 20 78 -18 154 -12 208 15 27 14 57 25 65
|
||||
25 11 0 15 7 13 23 -3 21 -8 22 -93 24 -49 1 -117 -5 -150 -13z m110 -34 c-11
|
||||
-5 -33 -8 -50 -8 -29 1 -29 1 5 8 49 10 69 10 45 0z"/>
|
||||
<path d="M11910 8749 c-19 -5 -46 -11 -59 -13 -13 -3 -27 -9 -30 -14 -11 -17
|
||||
-70 -42 -85 -36 -26 10 -63 -21 -69 -58 -7 -50 29 -173 77 -263 24 -44 50 -93
|
||||
59 -110 9 -16 26 -64 39 -105 21 -67 26 -75 48 -75 17 0 26 6 28 20 3 11 10
|
||||
24 18 28 15 9 19 47 5 47 -5 0 -14 14 -20 30 -5 17 -21 34 -34 39 -22 9 -56
|
||||
71 -39 71 9 0 133 -108 149 -129 8 -12 8 -22 -3 -43 -8 -15 -14 -40 -14 -56 0
|
||||
-25 -5 -30 -30 -35 -19 -4 -40 -21 -60 -48 -25 -34 -30 -52 -30 -96 0 -30 5
|
||||
-64 12 -76 8 -15 11 -65 9 -157 -3 -139 6 -190 34 -190 22 0 35 40 21 65 -12
|
||||
22 -11 228 2 285 6 24 10 -22 14 -150 9 -270 52 -551 126 -830 55 -207 58
|
||||
-234 31 -261 l-23 -23 -14 22 c-22 33 -42 28 -42 -12 0 -40 21 -60 52 -53 21
|
||||
6 23 3 23 -31 0 -34 2 -37 27 -35 19 1 29 -4 33 -18 7 -22 60 -53 75 -44 17
|
||||
11 11 32 -15 49 -23 15 -25 21 -19 66 6 46 5 49 -18 55 -23 6 -25 10 -20 54 3
|
||||
35 -7 95 -36 212 -28 116 -40 190 -42 254 -4 121 -4 117 3 220 5 70 3 97 -8
|
||||
119 -21 40 -21 271 -1 283 8 5 19 19 24 33 11 29 9 -77 -3 -129 -6 -27 -4 -33
|
||||
12 -37 18 -5 20 -22 32 -202 6 -108 14 -253 17 -322 6 -146 7 -150 34 -150 23
|
||||
0 23 14 -1 360 -5 74 -9 218 -9 319 l0 183 23 -6 c12 -3 31 -6 42 -6 15 0 20
|
||||
-7 21 -27 0 -16 2 -46 4 -68 2 -22 -5 -73 -14 -114 -9 -40 -21 -141 -28 -224
|
||||
-10 -132 -10 -151 4 -161 8 -6 18 -21 22 -34 4 -12 13 -22 20 -22 17 0 24 -73
|
||||
32 -361 6 -201 5 -229 -10 -250 -22 -32 -23 -147 0 -156 53 -20 65 94 51 470
|
||||
-8 213 -8 283 1 298 7 10 12 53 12 95 0 78 -37 518 -45 543 -4 9 1 12 15 8 30
|
||||
-8 48 27 52 103 3 59 1 65 -18 68 -14 2 -24 -5 -32 -23 -6 -14 -16 -25 -22
|
||||
-25 -17 0 -11 36 8 53 22 20 43 22 60 5 9 -10 15 -9 27 3 15 15 11 49 -5 49
|
||||
-10 0 7 92 19 99 5 4 9 31 9 61 1 50 36 248 47 258 2 2 8 -11 13 -29 12 -49
|
||||
37 -45 37 6 0 22 4 45 8 51 4 7 0 17 -8 24 -8 7 -17 28 -21 48 -5 24 -23 52
|
||||
-61 89 -72 72 -170 118 -283 133 -47 7 -88 17 -92 24 -8 14 -118 18 -168 5z
|
||||
m303 -79 c74 -15 154 -59 203 -114 42 -46 55 -76 34 -76 -15 0 -56 -80 -74
|
||||
-142 -13 -45 -34 -197 -36 -260 0 -5 7 -8 16 -8 14 0 15 -7 11 -37 -8 -44 -19
|
||||
-53 -74 -53 -23 0 -53 -4 -67 -10 -26 -10 -88 8 -101 30 -4 7 -19 8 -36 5 -22
|
||||
-5 -29 -3 -29 9 0 9 -9 21 -20 28 -25 16 -25 38 0 89 l21 39 -25 33 c-18 24
|
||||
-194 178 -207 182 -1 0 -4 44 -8 98 -5 87 -4 97 11 97 24 0 31 16 16 39 -17
|
||||
27 -4 39 53 50 61 12 251 12 312 1z m-437 -46 c-3 -9 -6 -50 -7 -92 0 -66 -2
|
||||
-74 -12 -52 -6 14 -15 27 -19 30 -10 8 -28 58 -28 81 0 10 6 19 14 19 7 0 19
|
||||
7 26 15 16 20 34 19 26 -1z m339 -700 c9 -14 21 -24 28 -22 26 5 107 -14 107
|
||||
-25 0 -7 8 -17 19 -24 10 -6 20 -23 23 -36 4 -21 2 -23 -16 -19 -12 3 -31 12
|
||||
-44 20 -15 10 -26 11 -35 4 -6 -5 -33 -11 -59 -13 -44 -4 -48 -2 -48 19 0 12
|
||||
-6 25 -14 28 -20 8 -28 48 -16 78 11 30 31 26 55 -10z m152 -6 c-3 -8 -6 -5
|
||||
-6 6 -1 11 2 17 5 13 3 -3 4 -12 1 -19z m-238 -179 c-4 -41 -9 -130 -10 -199
|
||||
-2 -113 -2 -119 -9 -60 -7 58 -14 344 -10 395 1 14 7 8 20 -21 15 -35 17 -53
|
||||
9 -115z m268 -321 c-3 -7 -5 -2 -5 12 0 14 2 19 5 13 2 -7 2 -19 0 -25z"/>
|
||||
<path d="M14284 8695 c-20 -50 21 -271 79 -435 27 -75 38 -95 53 -95 18 0 19
|
||||
8 15 141 l-4 142 29 18 c21 14 48 19 108 20 56 1 81 5 84 14 14 40 -104 54
|
||||
-180 21 -63 -27 -86 -57 -90 -116 l-3 -50 -19 75 c-10 41 -22 120 -25 175 -5
|
||||
84 -9 100 -24 103 -9 2 -20 -4 -23 -13z"/>
|
||||
<path d="M14903 8670 c-59 -12 -94 -33 -135 -78 -48 -53 -62 -100 -62 -202 0
|
||||
-68 5 -94 23 -133 26 -52 64 -79 96 -67 51 19 124 126 146 214 6 25 16 46 21
|
||||
46 16 0 51 -21 98 -60 62 -51 78 -55 107 -29 12 13 23 29 23 36 0 22 -30 27
|
||||
-44 8 -12 -17 -17 -15 -71 28 -31 26 -61 47 -67 47 -7 0 -6 5 1 14 16 19 19
|
||||
152 4 167 -15 15 -88 20 -140 9z m105 -107 c-3 -68 -3 -68 -32 -68 -28 0 -30
|
||||
-4 -46 -65 -19 -77 -36 -111 -83 -165 -34 -39 -35 -40 -55 -22 -30 27 -45 97
|
||||
-40 183 4 62 10 82 34 117 38 55 102 87 172 87 l53 0 -3 -67z"/>
|
||||
<path d="M13887 8623 c-3 -4 -8 -58 -12 -118 -11 -165 25 -284 97 -321 27 -14
|
||||
31 -14 46 0 10 8 37 63 62 120 25 58 48 106 51 106 3 0 11 -19 18 -42 18 -59
|
||||
62 -100 103 -96 43 4 43 29 1 40 -42 11 -69 68 -85 177 -7 54 -16 85 -26 88
|
||||
-17 7 -32 -14 -32 -45 0 -51 -100 -302 -120 -302 -13 0 -38 34 -55 75 -16 37
|
||||
-20 130 -12 285 2 25 -3 35 -15 38 -9 2 -18 -1 -21 -5z"/>
|
||||
<path d="M627 8473 c-3 -21 -8 -46 -12 -55 -5 -12 -1 -20 10 -25 26 -9 45 23
|
||||
45 74 0 35 -3 43 -19 43 -14 0 -20 -9 -24 -37z"/>
|
||||
<path d="M615 7658 c0 -164 4 -188 31 -188 8 0 14 6 14 13 0 6 2 73 5 147 5
|
||||
139 -3 182 -35 188 -13 2 -15 -22 -15 -160z"/>
|
||||
<path d="M650 7408 c0 -7 7 -31 15 -53 27 -76 14 -296 -23 -357 -12 -21 -13
|
||||
-31 -5 -39 9 -9 16 -9 29 2 29 24 43 73 54 194 11 118 3 204 -24 247 -12 20
|
||||
-46 24 -46 6z"/>
|
||||
<path d="M10870 6865 c-6 -7 -20 -11 -31 -8 -27 8 -40 -14 -26 -44 8 -18 8
|
||||
-33 -1 -57 -24 -65 -10 -123 22 -97 16 14 26 -5 26 -49 0 -27 -5 -31 -62 -48
|
||||
-35 -11 -130 -33 -213 -50 -122 -25 -183 -31 -325 -35 -175 -5 -175 -5 -300
|
||||
-48 l-125 -43 -257 -2 c-314 -2 -359 -6 -475 -49 -100 -38 -209 -50 -284 -34
|
||||
-57 13 -72 -2 -37 -38 32 -34 52 -79 89 -203 44 -147 76 -273 105 -420 15 -74
|
||||
42 -196 61 -270 61 -238 64 -260 72 -640 7 -317 10 -365 30 -450 49 -203 70
|
||||
-308 76 -370 4 -36 15 -99 25 -140 9 -41 23 -106 30 -145 7 -38 15 -75 17 -81
|
||||
3 -8 -53 -14 -194 -19 -163 -6 -210 -4 -265 9 -140 33 -267 21 -528 -48 -74
|
||||
-20 -163 -39 -198 -42 -55 -6 -62 -5 -56 9 3 9 14 19 24 22 46 15 92 85 56 85
|
||||
-9 0 -12 7 -9 20 3 11 -4 32 -16 49 -21 29 -21 31 -5 56 16 24 16 27 1 43 -16
|
||||
15 -20 15 -64 -1 -27 -9 -69 -17 -94 -17 -48 0 -124 -33 -166 -73 -13 -11 -26
|
||||
-17 -30 -14 -10 10 -53 -33 -53 -53 0 -10 -20 -28 -47 -43 -27 -14 -58 -35
|
||||
-70 -47 -27 -24 -30 -58 -7 -67 14 -5 12 -8 -7 -19 -13 -7 -27 -13 -30 -14 -3
|
||||
0 -4 53 -1 118 4 113 3 121 -29 212 l-33 95 -8 330 c-6 236 -13 344 -23 380
|
||||
-16 55 -26 117 -50 305 -9 69 -26 181 -37 250 -15 94 -18 146 -13 210 8 96 36
|
||||
243 59 309 17 47 32 149 47 331 9 116 5 185 -13 208 -17 20 -44 14 -56 -12 -6
|
||||
-15 -26 -29 -49 -36 -21 -7 -83 -36 -138 -65 -112 -59 -292 -119 -405 -135
|
||||
-41 -6 -201 -11 -355 -11 -155 0 -354 -4 -443 -8 -178 -8 -268 0 -352 31 -158
|
||||
58 -267 91 -380 114 -139 29 -182 28 -300 -6 -51 -14 -129 -24 -245 -32 -98
|
||||
-6 -197 -18 -235 -28 -36 -10 -108 -30 -160 -45 -143 -40 -241 -55 -365 -54
|
||||
-66 0 -137 -6 -171 -14 -149 -37 -220 -49 -369 -61 -139 -11 -168 -16 -225
|
||||
-42 -59 -26 -75 -29 -175 -29 -60 0 -184 6 -275 14 -91 7 -212 10 -270 7 -103
|
||||
-5 -104 -5 -70 11 27 13 84 18 255 24 247 8 258 10 481 93 45 17 65 36 62 59
|
||||
-4 26 -22 32 -40 14 -23 -24 -87 -53 -176 -81 -93 -29 -245 -46 -419 -46 -103
|
||||
0 -121 -3 -219 -36 l-106 -37 -54 17 c-30 9 -59 14 -64 11 -15 -9 -12 -35 5
|
||||
-41 8 -4 15 -14 15 -24 0 -24 17 -29 60 -19 66 16 548 10 682 -7 158 -21 224
|
||||
-15 317 26 66 29 90 33 240 45 91 7 186 18 211 24 25 6 74 18 110 27 36 9 142
|
||||
20 235 25 94 5 188 12 210 17 76 17 170 43 244 68 57 19 103 25 205 30 136 5
|
||||
266 24 350 49 92 28 195 17 406 -41 52 -15 126 -40 163 -56 114 -49 208 -62
|
||||
387 -52 85 4 274 6 420 5 286 -3 427 8 536 40 38 11 92 27 119 34 28 8 104 41
|
||||
170 73 178 88 196 96 206 80 5 -7 6 -26 4 -43 -3 -16 -10 -79 -16 -140 -15
|
||||
-160 -26 -235 -43 -283 -51 -144 -68 -366 -41 -522 17 -94 31 -200 45 -331 5
|
||||
-48 19 -125 30 -173 21 -92 32 -268 29 -502 -1 -152 13 -262 47 -355 21 -59
|
||||
24 -84 24 -212 0 -80 -4 -148 -8 -151 -5 -3 -8 -94 -8 -203 1 -192 2 -201 29
|
||||
-278 26 -70 30 -100 38 -260 10 -201 32 -372 60 -485 11 -41 28 -140 39 -218
|
||||
13 -99 27 -161 44 -198 l25 -54 -157 0 c-86 0 -186 5 -222 10 -36 5 -119 13
|
||||
-185 16 -105 6 -130 4 -196 -15 -92 -26 -189 -27 -342 -5 -97 15 -128 15 -232
|
||||
5 -174 -18 -288 -37 -390 -66 -49 -14 -140 -32 -201 -40 -61 -8 -131 -22 -155
|
||||
-30 -38 -14 -76 -14 -323 -3 -321 15 -481 14 -675 -1 -75 -6 -266 -16 -425
|
||||
-21 -160 -6 -391 -20 -515 -31 -192 -18 -249 -27 -381 -62 l-155 -41 -345 -1
|
||||
c-334 0 -347 -1 -410 -23 -36 -13 -82 -35 -104 -49 l-39 -25 7 28 c4 16 11
|
||||
110 16 209 8 190 12 218 37 329 14 59 15 115 9 390 -12 585 -23 789 -49 951
|
||||
-30 180 -52 533 -52 815 0 182 3 216 24 305 22 87 25 130 29 335 2 158 -1 303
|
||||
-12 440 -11 143 -14 258 -9 380 5 156 4 177 -11 189 -14 12 -19 11 -38 -5 -24
|
||||
-22 -51 -81 -43 -94 11 -18 35 -10 44 13 5 13 8 -67 8 -193 -1 -118 3 -352 8
|
||||
-520 11 -332 6 -436 -27 -574 -19 -85 -20 -109 -15 -366 7 -310 29 -635 52
|
||||
-755 9 -46 20 -185 25 -330 5 -137 11 -297 14 -355 3 -58 7 -208 8 -335 3
|
||||
-195 0 -242 -16 -310 -12 -52 -21 -147 -26 -270 -6 -142 -13 -210 -29 -269
|
||||
-26 -100 -27 -116 -1 -116 11 0 20 7 20 15 0 20 95 89 156 113 78 31 127 35
|
||||
474 37 261 1 336 5 380 17 158 45 213 58 295 67 174 21 462 40 685 45 124 4
|
||||
281 11 350 16 358 28 389 29 476 20 49 -6 187 -14 307 -19 201 -9 223 -8 285
|
||||
10 37 10 108 24 157 30 50 6 128 21 174 35 172 49 463 87 566 74 271 -36 300
|
||||
-36 431 1 77 21 67 21 449 -12 72 -6 162 -9 200 -6 62 4 76 2 125 -23 30 -15
|
||||
61 -25 68 -23 19 7 14 31 -12 48 -12 8 -39 50 -59 93 -29 63 -39 100 -52 205
|
||||
-9 70 -25 162 -36 204 -30 118 -49 262 -60 453 -11 195 -22 271 -50 342 -16
|
||||
41 -19 75 -19 207 l0 158 58 6 c31 3 62 6 67 7 6 1 65 2 133 1 96 -1 122 -4
|
||||
122 -15 0 -39 55 -40 94 -1 15 16 20 15 78 -4 34 -12 67 -21 74 -21 22 0 25
|
||||
32 4 52 -11 10 -20 28 -20 38 0 17 -7 20 -50 20 -48 0 -67 14 -35 26 8 4 15
|
||||
12 15 20 0 10 14 14 48 14 26 0 110 16 187 36 296 76 395 87 508 58 48 -12
|
||||
105 -15 284 -12 l223 3 23 -29 c25 -31 47 -29 47 3 0 10 -11 43 -24 72 -14 30
|
||||
-30 83 -36 119 -6 36 -18 92 -26 124 -8 33 -18 89 -21 125 -2 36 -18 125 -34
|
||||
196 -71 311 -67 279 -74 625 -7 368 -11 409 -71 645 -24 94 -57 240 -74 325
|
||||
-30 158 -92 385 -134 496 l-23 61 86 6 c68 4 106 13 181 42 l95 37 320 8 320
|
||||
7 107 36 c115 39 244 57 412 57 91 0 308 39 433 78 l62 20 5 -27 c3 -14 8 -45
|
||||
11 -69 4 -23 13 -48 20 -56 8 -7 15 -31 17 -52 2 -26 8 -39 18 -39 14 0 24 27
|
||||
35 97 8 49 79 144 105 140 14 -2 21 4 26 22 4 18 13 26 29 26 33 0 52 26 37
|
||||
51 -10 16 -9 23 5 38 10 10 27 20 38 23 26 4 34 55 9 65 -9 3 -25 1 -35 -5
|
||||
-26 -17 -101 -15 -125 3 -10 8 -27 15 -36 15 -10 0 -40 12 -68 28 -35 19 -50
|
||||
33 -50 48 0 26 -24 38 -40 19z m120 -153 c0 -15 -2 -15 -10 -2 -13 20 -13 33
|
||||
0 25 6 -3 10 -14 10 -23z m-143 -14 c-3 -8 -6 -5 -6 6 -1 11 2 17 5 13 3 -3 4
|
||||
-12 1 -19z m112 -45 c7 -24 6 -33 -5 -37 -9 -4 -14 2 -14 17 0 12 -3 33 -6 47
|
||||
-10 37 14 12 25 -27z m160 38 c7 -5 9 -11 4 -14 -5 -3 -15 -2 -23 3 -7 4 -19
|
||||
6 -27 3 -7 -3 -13 0 -13 6 0 13 39 14 59 2z m-127 -143 c-3 -18 -13 -44 -23
|
||||
-57 l-19 -24 0 51 c0 48 7 59 36 61 6 1 9 -12 6 -31z m-2975 -2965 c-3 -10 -5
|
||||
-4 -5 12 0 17 2 24 5 18 2 -7 2 -21 0 -30z m-97 -51 c0 -5 -23 -15 -51 -24
|
||||
-44 -15 -49 -15 -37 -1 21 26 88 45 88 25z m-150 -36 c0 -3 -4 -8 -10 -11 -5
|
||||
-3 -10 -1 -10 4 0 6 5 11 10 11 6 0 10 -2 10 -4z m5 -82 c-17 -17 -16 -19 3
|
||||
-35 20 -16 20 -16 -16 -27 -68 -20 -119 -25 -127 -12 -10 16 15 31 37 24 22
|
||||
-7 55 11 62 34 5 15 45 42 55 35 2 -1 -4 -10 -14 -19z m175 -74 c0 -5 -5 -10
|
||||
-11 -10 -5 0 -7 5 -4 10 3 6 8 10 11 10 2 0 4 -4 4 -10z"/>
|
||||
<path d="M597 6813 c-3 -5 2 -33 10 -63 8 -30 18 -108 20 -172 5 -105 7 -118
|
||||
24 -118 26 0 32 32 24 134 -9 119 -35 220 -57 224 -9 2 -18 -1 -21 -5z"/>
|
||||
<path d="M647 6177 c-8 -20 28 -61 47 -54 21 8 21 53 0 61 -25 10 -41 7 -47
|
||||
-7z"/>
|
||||
<path d="M10295 5908 c-2 -7 -6 -67 -9 -133 -3 -66 -9 -132 -12 -147 -5 -21
|
||||
-3 -28 9 -28 31 0 41 31 47 163 7 126 3 157 -22 157 -5 0 -10 -6 -13 -12z"/>
|
||||
<path d="M752 5565 c-7 -14 -12 -34 -12 -44 0 -23 25 -35 37 -18 21 29 35 66
|
||||
29 76 -13 20 -43 12 -54 -14z"/>
|
||||
<path d="M6265 5191 c-3 -5 -5 -115 -4 -243 l1 -234 -37 -135 -37 -134 -51 4
|
||||
c-146 10 -231 -73 -265 -262 -17 -89 -19 -93 -52 -109 -43 -22 -118 -23 -148
|
||||
-2 -20 14 -22 24 -22 102 l0 86 100 96 c124 117 133 161 25 111 -59 -27 -103
|
||||
-68 -130 -122 -16 -30 -41 -59 -70 -79 -51 -35 -112 -63 -127 -58 -6 2 -21 40
|
||||
-34 83 -18 62 -23 105 -24 192 l0 112 48 3 c39 3 47 6 47 23 0 17 -8 20 -49
|
||||
23 l-48 3 7 92 c14 196 28 304 47 361 21 63 18 89 -8 84 -33 -6 -68 -188 -80
|
||||
-409 -4 -71 -10 -129 -13 -129 -3 0 -69 -7 -146 -15 -77 -8 -159 -15 -183 -15
|
||||
-29 0 -44 -5 -49 -16 -13 -35 11 -38 186 -19 93 10 175 15 183 13 11 -5 14
|
||||
-42 15 -185 1 -129 5 -192 16 -224 8 -24 22 -96 32 -159 10 -63 22 -119 26
|
||||
-124 5 -5 14 -4 23 3 16 13 16 51 1 214 -4 44 -2 47 19 47 30 0 83 22 116 48
|
||||
l25 20 -3 -70 c-5 -90 20 -131 87 -148 53 -13 137 1 174 31 23 17 28 18 61 4
|
||||
90 -38 170 2 225 112 17 35 78 238 98 331 11 49 20 16 27 -100 10 -192 55
|
||||
-424 83 -435 22 -9 41 17 49 64 5 35 3 44 -11 49 -9 4 -20 2 -24 -5 -11 -17
|
||||
-41 165 -53 319 -6 81 -7 203 -2 305 13 283 11 469 -5 488 -15 19 -37 22 -46
|
||||
8z m-110 -798 c-4 -10 -8 -43 -9 -73 -1 -66 -55 -183 -99 -214 -30 -22 -89
|
||||
-25 -111 -7 -21 17 -26 60 -14 116 27 128 94 190 212 194 23 1 27 -2 21 -16z"/>
|
||||
<path d="M10339 5138 c-1 -1 -2 -85 -3 -185 -2 -167 -1 -183 15 -183 9 0 20 7
|
||||
23 16 8 21 6 293 -3 323 -5 21 -28 41 -32 29z"/>
|
||||
<path d="M818 4913 c-1 -5 -2 -44 -3 -88 -1 -44 -7 -97 -14 -118 -15 -43 -9
|
||||
-69 14 -61 32 13 61 202 39 258 -6 16 -33 22 -36 9z"/>
|
||||
<path d="M4060 4442 c-143 -12 -277 -114 -403 -304 -95 -144 -167 -313 -167
|
||||
-393 0 -103 99 -139 260 -94 84 23 266 108 311 146 54 46 26 74 -32 32 -105
|
||||
-75 -295 -149 -384 -151 -68 -2 -92 8 -104 42 -34 100 165 464 323 590 63 51
|
||||
117 74 198 85 74 10 72 54 -2 47z"/>
|
||||
<path d="M10366 4428 c-3 -7 -6 -71 -9 -141 -3 -106 -1 -130 11 -134 26 -10
|
||||
32 21 30 151 -2 93 -7 131 -15 134 -7 2 -15 -2 -17 -10z"/>
|
||||
<path d="M4496 4375 c-3 -9 -6 -27 -6 -39 0 -64 -132 -394 -190 -476 -18 -25
|
||||
-24 -28 -42 -19 -44 24 -62 147 -39 280 6 30 11 83 13 119 3 59 1 65 -17 65
|
||||
-22 0 -23 -7 -45 -223 -15 -151 -3 -212 52 -264 21 -21 43 -38 48 -38 40 0
|
||||
132 153 204 341 l25 64 1 -45 c1 -100 40 -200 77 -200 21 0 27 30 9 43 -26 19
|
||||
-38 87 -45 252 -5 127 -8 150 -22 153 -9 2 -19 -4 -23 -13z"/>
|
||||
<path d="M4655 4373 c-4 -10 -9 -88 -12 -173 -6 -163 6 -283 33 -317 13 -17
|
||||
15 -17 28 -1 7 10 16 51 19 90 7 86 48 230 75 267 25 34 55 38 80 11 11 -12
|
||||
26 -19 32 -15 6 4 2 -11 -8 -32 -52 -100 -68 -255 -32 -288 18 -16 23 -17 47
|
||||
-4 45 24 80 65 155 185 39 62 75 114 78 114 4 0 10 -32 13 -71 9 -105 59 -169
|
||||
133 -169 27 0 74 40 74 64 0 28 -22 29 -46 2 -31 -33 -37 -32 -74 2 -26 22
|
||||
-33 39 -42 97 -6 39 -8 104 -5 147 5 77 -3 101 -29 91 -8 -3 -14 -11 -14 -19
|
||||
0 -10 -10 -12 -43 -8 -54 8 -125 -21 -168 -67 -19 -21 -29 -26 -29 -16 0 22
|
||||
-39 47 -73 47 -71 0 -103 -43 -147 -200 l-20 -75 5 145 c3 80 8 160 11 178 5
|
||||
27 3 32 -14 32 -11 0 -23 -8 -27 -17z m462 -115 c-79 -139 -137 -227 -177
|
||||
-267 l-44 -46 -4 30 c-5 39 25 159 54 216 13 26 40 61 61 78 31 25 47 31 86
|
||||
31 l49 0 -25 -42z"/>
|
||||
<path d="M827 4353 c-2 -5 -3 -35 -2 -68 2 -52 5 -60 21 -60 16 0 20 9 22 47
|
||||
2 26 -2 56 -8 68 -11 20 -25 26 -33 13z"/>
|
||||
<path d="M806 4001 c-3 -5 4 -35 16 -66 19 -50 20 -61 9 -92 -10 -27 -10 -38
|
||||
-1 -46 19 -20 50 28 49 77 -1 76 -51 163 -73 127z"/>
|
||||
<path d="M5695 3587 c-21 -52 -35 -144 -37 -263 l-2 -111 -53 0 c-63 0 -119
|
||||
-32 -147 -85 -19 -34 -19 -35 -62 -25 -91 21 -168 -36 -215 -160 -13 -35 -27
|
||||
-63 -30 -63 -3 0 -15 24 -27 53 -13 30 -38 70 -56 90 -28 31 -40 37 -74 37
|
||||
-99 0 -167 -62 -192 -175 -12 -55 1 -109 30 -125 22 -12 90 -13 106 -2 18 12
|
||||
64 83 64 100 0 9 7 23 15 32 8 9 18 34 23 56 l9 39 27 -56 c15 -32 34 -92 43
|
||||
-135 17 -81 33 -112 52 -100 6 4 11 28 11 54 0 106 67 270 122 298 16 9 48 14
|
||||
71 12 l42 -3 3 -45 c4 -79 12 -109 38 -140 26 -30 61 -38 99 -24 24 10 70 82
|
||||
95 152 l23 64 29 -103 c31 -110 60 -169 84 -169 22 0 28 27 11 45 -17 16 -62
|
||||
154 -72 220 -5 31 -3 44 9 54 21 17 21 57 -1 69 -15 9 -15 14 1 78 20 80 46
|
||||
242 46 291 0 35 -29 73 -56 73 -8 0 -21 -15 -29 -33z m24 -176 c-7 -48 -15
|
||||
-75 -17 -61 -2 14 2 63 9 110 7 47 15 74 17 61 2 -13 -2 -62 -9 -110z m-70
|
||||
-250 c13 -9 12 -17 -8 -51 -4 -8 -19 -47 -31 -87 -23 -73 -70 -143 -95 -143
|
||||
-23 0 -46 44 -48 91 l-2 44 33 -3 c28 -3 33 -1 30 15 -2 10 -13 22 -26 28 -26
|
||||
12 -27 18 -5 56 28 47 112 75 152 50z m-689 -223 c0 -108 -40 -165 -96 -140
|
||||
-19 9 -24 19 -24 49 1 49 30 114 65 141 47 37 55 30 55 -50z"/>
|
||||
<path d="M10293 3564 c-8 -20 9 -49 28 -49 18 0 24 32 9 50 -16 20 -29 19 -37
|
||||
-1z"/>
|
||||
<path d="M895 3267 c-10 -30 -9 -90 2 -94 19 -7 45 41 38 70 -7 28 -33 44 -40
|
||||
24z"/>
|
||||
<path d="M5931 3242 c-47 -23 -57 -43 -42 -79 22 -53 105 -91 199 -92 35 -1
|
||||
72 -6 83 -11 43 -24 10 -103 -94 -223 -56 -66 -53 -67 -93 36 -19 50 -30 67
|
||||
-45 67 -25 0 -24 -12 9 -98 28 -72 53 -112 72 -112 16 0 77 59 130 125 65 82
|
||||
94 146 86 191 -9 47 -39 64 -111 64 -97 0 -195 38 -195 75 0 26 131 48 145 25
|
||||
10 -16 35 -12 42 6 10 27 -25 44 -91 44 -38 0 -74 -7 -95 -18z"/>
|
||||
<path d="M10435 3060 c-7 -12 14 -108 28 -127 4 -6 15 -9 24 -6 18 7 14 48
|
||||
-11 106 -15 37 -29 46 -41 27z"/>
|
||||
<path d="M4104 3022 c-37 -24 -65 -68 -89 -141 l-17 -53 -37 6 c-20 3 -41 6
|
||||
-48 6 -8 0 -8 9 0 35 12 41 9 45 -35 54 -27 6 -34 13 -44 46 -10 38 -13 40
|
||||
-54 42 -39 3 -47 -1 -83 -39 -44 -46 -91 -137 -82 -159 8 -19 77 -51 88 -40
|
||||
14 14 3 45 -21 57 l-22 11 40 61 c22 35 47 62 56 62 15 0 16 -10 10 -92 -24
|
||||
-342 -19 -418 24 -418 33 0 45 55 45 215 l0 150 35 -17 c19 -10 56 -18 82 -18
|
||||
l48 0 0 -42 c1 -68 27 -101 120 -148 37 -19 71 -25 193 -34 112 -7 150 -7 159
|
||||
2 26 26 -11 37 -145 43 -107 5 -142 10 -185 29 -65 28 -102 70 -102 115 0 38
|
||||
-13 33 140 55 105 16 150 29 151 43 3 33 -5 65 -23 95 -48 78 -142 112 -204
|
||||
74z m95 -36 c33 -17 91 -81 91 -100 0 -8 -34 -18 -102 -29 -140 -23 -140 -23
|
||||
-132 11 11 45 47 103 74 118 32 17 35 17 69 0z"/>
|
||||
<path d="M4629 3000 c-126 -21 -249 -137 -249 -235 0 -42 27 -93 57 -108 62
|
||||
-32 160 -30 271 4 31 10 42 32 22 44 -5 3 -36 -1 -69 -10 -101 -26 -199 -18
|
||||
-223 19 -13 18 -9 85 6 114 39 74 132 126 231 128 97 2 95 2 95 23 0 14 -10
|
||||
20 -37 25 -42 7 -41 7 -104 -4z"/>
|
||||
<path d="M930 2552 c0 -10 6 -24 13 -31 10 -10 8 -14 -6 -23 -34 -19 -57 -87
|
||||
-57 -169 0 -42 -5 -100 -10 -130 -11 -57 -2 -81 23 -61 19 16 39 142 31 192
|
||||
-7 45 19 131 39 129 41 -5 47 17 23 76 -16 38 -56 50 -56 17z"/>
|
||||
<path d="M10527 2443 c-3 -5 14 -58 38 -118 55 -135 64 -181 39 -199 -20 -15
|
||||
-11 -36 16 -36 33 0 48 34 39 90 -11 72 -91 264 -111 268 -9 2 -18 -1 -21 -5z"/>
|
||||
<path d="M944 1675 c-8 -20 2 -30 36 -38 36 -9 58 7 44 30 -15 24 -72 30 -80
|
||||
8z"/>
|
||||
<path d="M10649 1383 c-1 -4 0 -38 1 -74 2 -92 -24 -184 -62 -212 -47 -35 -29
|
||||
-67 23 -41 32 16 54 61 75 152 19 85 10 175 -19 180 -9 2 -17 0 -18 -5z"/>
|
||||
<path d="M1047 1074 c-14 -14 -7 -25 28 -41 28 -13 38 -14 47 -5 19 19 -3 46
|
||||
-38 50 -17 2 -33 0 -37 -4z"/>
|
||||
<path d="M8390 992 c0 -26 62 -54 135 -62 33 -4 102 -13 152 -20 75 -10 96
|
||||
-10 108 0 26 22 0 37 -78 44 -183 17 -224 23 -254 39 -41 22 -63 22 -63 -1z"/>
|
||||
<path d="M9089 971 c-12 -16 -34 -32 -50 -35 -21 -4 -29 -11 -29 -26 0 -23 33
|
||||
-27 73 -9 29 13 61 64 53 85 -8 22 -23 17 -47 -15z"/>
|
||||
<path d="M10409 971 c-13 -10 -40 -21 -60 -25 -31 -5 -38 -11 -43 -38 l-6 -31
|
||||
-113 8 c-195 13 -252 12 -252 -5 0 -17 43 -24 235 -38 126 -10 155 -5 171 32
|
||||
7 13 23 27 38 31 39 10 91 53 85 70 -8 20 -26 19 -55 -4z"/>
|
||||
<path d="M7983 948 c-34 -7 -43 -14 -43 -30 0 -19 4 -20 52 -15 57 7 74 18 65
|
||||
41 -7 18 -13 18 -74 4z"/>
|
||||
<path d="M9504 946 c-9 -24 5 -36 39 -36 18 0 65 -14 106 -30 76 -31 101 -32
|
||||
101 -6 0 16 -131 69 -198 80 -33 5 -44 3 -48 -8z"/>
|
||||
<path d="M7636 894 c-72 -16 -114 -33 -155 -65 -12 -10 -39 -21 -58 -25 -35
|
||||
-7 -53 -28 -37 -44 14 -14 80 5 131 39 48 32 96 49 173 60 36 5 45 10 45 26 0
|
||||
25 -15 27 -99 9z"/>
|
||||
<path d="M6995 854 c-5 -2 -50 -10 -100 -17 -79 -11 -90 -15 -90 -32 0 -17 6
|
||||
-20 45 -17 25 2 69 7 99 13 30 5 76 9 103 9 40 0 48 3 48 19 0 25 -67 41 -105
|
||||
25z"/>
|
||||
<path d="M1134 795 c-3 -8 -2 -20 3 -27 4 -7 8 -22 8 -33 0 -14 8 -21 28 -23
|
||||
23 -3 27 0 27 21 0 25 -34 77 -51 77 -5 0 -12 -7 -15 -15z"/>
|
||||
<path d="M6311 787 c-6 -6 -11 -17 -11 -24 0 -19 -14 -16 -35 7 -23 25 -45 26
|
||||
-45 2 0 -25 51 -72 79 -72 16 0 26 10 37 35 7 19 14 39 14 44 0 15 -27 20 -39
|
||||
8z"/>
|
||||
<path d="M3700 737 c-24 -8 -35 -18 -35 -32 0 -22 2 -22 82 -3 48 11 58 10
|
||||
130 -16 395 -142 373 -136 373 -108 0 21 -16 28 -210 97 -41 14 -104 37 -140
|
||||
50 -71 27 -144 31 -200 12z"/>
|
||||
<path d="M3428 613 c-59 -4 -83 -19 -69 -42 7 -11 23 -12 77 -5 58 8 69 12 69
|
||||
28 0 23 -2 23 -77 19z"/>
|
||||
<path d="M1234 569 c-8 -14 53 -68 116 -102 61 -33 101 -41 124 -24 24 17 13
|
||||
37 -20 37 -35 0 -84 22 -138 64 -50 38 -70 44 -82 25z"/>
|
||||
<path d="M2681 524 c-52 -34 -57 -36 -129 -32 -52 2 -76 -1 -79 -9 -7 -20 40
|
||||
-37 107 -37 60 -1 70 2 125 39 58 39 76 67 45 72 -8 1 -39 -14 -69 -33z"/>
|
||||
<path d="M5607 543 c-14 -14 -35 -18 -92 -18 -48 0 -76 -4 -79 -12 -9 -21 24
|
||||
-36 82 -37 70 -1 135 27 140 62 4 27 -25 30 -51 5z"/>
|
||||
<path d="M4647 533 c-24 -23 7 -49 70 -58 21 -3 55 -13 76 -22 30 -13 40 -14
|
||||
50 -4 23 24 -63 71 -130 71 -12 0 -25 5 -28 10 -7 11 -28 13 -38 3z"/>
|
||||
<path d="M1981 452 c-5 -9 -17 -43 -26 -75 -15 -52 -19 -57 -38 -51 -30 9 -67
|
||||
34 -67 45 0 5 -9 9 -20 9 -32 0 -24 -36 14 -65 49 -37 95 -49 117 -29 16 15
|
||||
59 131 59 160 0 20 -29 25 -39 6z"/>
|
||||
</g>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 45 KiB |
411
docs/images/dts-reader.svg
Normal file
411
docs/images/dts-reader.svg
Normal file
|
|
@ -0,0 +1,411 @@
|
|||
<?xml version="1.0" standalone="no"?>
|
||||
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 20010904//EN"
|
||||
"http://www.w3.org/TR/2001/REC-SVG-20010904/DTD/svg10.dtd">
|
||||
<svg version="1.0" xmlns="http://www.w3.org/2000/svg"
|
||||
width="1875.000000pt" height="748.000000pt" viewBox="0 0 1875.000000 748.000000"
|
||||
preserveAspectRatio="xMidYMid meet">
|
||||
<metadata>
|
||||
Created by potrace 1.16, written by Peter Selinger 2001-2019
|
||||
</metadata>
|
||||
<g transform="translate(0.000000,748.000000) scale(0.100000,-0.100000)"
|
||||
fill="#000000" stroke="none">
|
||||
<path d="M18115 7470 c-178 -20 -255 -44 -228 -71 9 -9 30 -8 95 6 109 23 431
|
||||
33 453 15 9 -7 28 -35 43 -61 27 -48 62 -67 62 -33 0 22 -67 131 -84 137 -27
|
||||
11 -264 15 -341 7z"/>
|
||||
<path d="M9863 7449 c-6 -6 -9 -18 -6 -25 4 -11 38 -14 164 -14 136 0 159 2
|
||||
159 15 0 9 -12 20 -26 25 -36 14 -277 13 -291 -1z"/>
|
||||
<path d="M17282 7289 c-69 -38 -85 -60 -49 -67 26 -5 149 68 145 86 -5 26 -20
|
||||
23 -96 -19z"/>
|
||||
<path d="M2575 7293 c-61 -13 -215 -102 -215 -124 0 -24 35 -19 84 14 126 84
|
||||
186 88 363 28 145 -49 427 -101 445 -83 22 22 -7 33 -143 57 -174 30 -204 37
|
||||
-327 80 -96 32 -152 40 -207 28z"/>
|
||||
<path d="M8460 7229 c-82 -22 -127 -28 -207 -29 -96 0 -103 -1 -103 -20 0 -19
|
||||
7 -20 113 -20 92 0 131 5 220 29 60 16 111 32 114 35 9 9 -6 36 -19 35 -7 -1
|
||||
-60 -14 -118 -30z"/>
|
||||
<path d="M1990 7150 c-217 -47 -273 -86 -340 -234 -22 -50 -26 -67 -16 -75 18
|
||||
-15 30 -2 65 71 60 127 135 169 369 205 94 15 112 21 112 35 0 15 -9 18 -52
|
||||
17 -29 0 -91 -9 -138 -19z"/>
|
||||
<path d="M6515 7151 c-23 -10 -62 -21 -88 -25 -37 -6 -47 -11 -47 -27 0 -16 7
|
||||
-19 41 -19 22 0 62 10 89 21 49 21 60 21 148 3 28 -5 32 -4 32 14 0 15 -12 24
|
||||
-47 36 -59 20 -79 20 -128 -3z"/>
|
||||
<path d="M5720 7142 c-40 -17 -133 -73 -168 -103 -16 -13 -7 -29 17 -29 10 0
|
||||
50 21 91 47 90 57 142 65 240 34 64 -20 88 -17 77 12 -6 15 -97 44 -167 52
|
||||
-31 4 -59 -1 -90 -13z"/>
|
||||
<path d="M13773 7135 c-3 -9 -2 -20 3 -25 18 -16 172 -42 287 -47 112 -6 117
|
||||
-5 117 14 0 18 -9 21 -103 26 -89 6 -173 19 -275 42 -15 4 -24 0 -29 -10z"/>
|
||||
<path d="M14800 7131 c0 -22 28 -32 318 -107 17 -5 22 -2 22 13 0 25 -49 48
|
||||
-145 67 -38 8 -90 22 -114 30 -59 21 -81 20 -81 -3z"/>
|
||||
<path d="M11637 7086 c-11 -28 17 -36 128 -36 61 0 208 -9 325 -20 143 -13
|
||||
217 -17 224 -10 28 28 -31 40 -332 65 -235 19 -338 20 -345 1z"/>
|
||||
<path d="M18587 7093 c-15 -14 -5 -29 39 -57 25 -16 50 -39 55 -52 11 -31 27
|
||||
-30 39 2 6 14 10 27 10 29 0 7 -118 85 -128 85 -5 0 -12 -3 -15 -7z"/>
|
||||
<path d="M4108 6992 c-78 -21 -98 -29 -98 -44 0 -24 14 -23 152 9 95 23 118
|
||||
31 118 46 0 24 -52 21 -172 -11z"/>
|
||||
<path d="M16153 6993 c-7 -3 -13 -13 -13 -24 0 -14 7 -19 28 -19 15 0 72 -5
|
||||
127 -10 115 -12 158 -6 153 18 -3 14 -22 18 -113 24 -61 4 -123 9 -140 11 -16
|
||||
2 -36 2 -42 0z"/>
|
||||
<path d="M1499 6878 c0 -2 -2 -79 -4 -171 -2 -149 -1 -168 13 -165 24 5 33 67
|
||||
30 207 -3 111 -5 126 -20 129 -10 2 -18 2 -19 0z"/>
|
||||
<path d="M6859 6868 c-1 -8 -8 -97 -14 -198 -4 -78 -2 -166 9 -275 9 -88 16
|
||||
-206 16 -263 0 -92 2 -103 17 -100 32 6 35 71 17 298 -12 154 -15 261 -10 378
|
||||
6 158 6 162 -14 162 -11 0 -20 -1 -21 -2z"/>
|
||||
<path d="M7828 6848 c-31 -25 -53 -117 -53 -228 0 -58 4 -126 8 -152 l8 -48
|
||||
-29 0 c-58 0 -92 -12 -92 -31 0 -17 8 -19 68 -19 l67 0 35 -112 c56 -182 104
|
||||
-265 123 -214 3 8 -12 80 -34 161 -21 80 -39 154 -39 164 0 10 13 22 34 29 72
|
||||
26 87 82 22 82 -25 0 -45 -9 -70 -30 -40 -36 -40 -35 -56 80 -13 97 -1 203 31
|
||||
264 17 33 18 41 7 53 -11 11 -17 11 -30 1z"/>
|
||||
<path d="M6963 6793 c-4 -9 -7 -150 -7 -313 0 -224 4 -322 17 -409 9 -63 21
|
||||
-119 26 -124 14 -14 43 12 36 32 -10 24 -34 238 -35 298 0 52 0 52 26 43 14
|
||||
-6 37 -10 51 -10 20 0 24 -3 18 -17 -40 -91 -25 -175 40 -240 36 -37 48 -43
|
||||
84 -43 25 0 62 10 91 25 56 28 62 35 50 55 -8 12 -18 10 -63 -13 -65 -33 -86
|
||||
-34 -122 -5 -52 40 -72 137 -40 197 12 24 22 29 70 35 99 11 175 56 175 102 0
|
||||
13 -10 35 -23 49 -46 54 -123 29 -199 -65 -25 -32 -38 -40 -65 -40 -27 0 -33
|
||||
4 -33 21 0 19 -4 20 -36 14 l-36 -6 8 148 c14 232 12 277 -9 281 -9 2 -20 -4
|
||||
-24 -15z m366 -372 c12 -22 2 -33 -52 -56 -41 -17 -87 -20 -87 -6 0 18 84 81
|
||||
106 81 13 0 28 -9 33 -19z"/>
|
||||
<path d="M6458 6735 c-51 -19 -117 -66 -209 -147 -124 -109 -147 -187 -86
|
||||
-288 58 -97 153 -151 224 -127 42 14 63 41 46 58 -8 8 -17 7 -34 -5 -13 -9
|
||||
-35 -16 -50 -16 -55 0 -158 96 -174 162 -4 15 -2 42 4 61 19 57 197 219 278
|
||||
253 18 8 54 14 82 14 41 0 50 -3 54 -21 5 -18 11 -20 34 -15 36 9 45 19 38 38
|
||||
-15 38 -141 59 -207 33z"/>
|
||||
<path d="M18703 6718 c-6 -7 -19 -56 -29 -108 -30 -150 -24 -417 14 -670 5
|
||||
-31 12 -46 25 -48 22 -4 22 28 2 209 -8 74 -16 169 -17 211 -3 70 -2 77 16 80
|
||||
28 4 32 28 6 35 -22 6 -22 9 -16 76 3 38 14 98 22 133 16 62 14 94 -4 94 -5 0
|
||||
-14 -6 -19 -12z"/>
|
||||
<path d="M7944 6699 c-4 -7 2 -19 13 -28 11 -9 23 -24 27 -34 10 -30 41 -16
|
||||
44 21 3 27 -1 34 -23 42 -34 13 -52 13 -61 -1z"/>
|
||||
<path d="M8690 6630 c-10 -6 -13 -29 -12 -77 2 -104 19 -197 58 -320 34 -105
|
||||
55 -136 76 -115 4 4 23 62 42 129 18 67 44 142 57 167 29 59 110 142 120 123
|
||||
5 -7 12 -66 18 -131 8 -96 16 -130 39 -180 38 -79 62 -109 81 -97 12 8 8 22
|
||||
-23 84 -30 58 -40 93 -47 158 -24 207 -35 238 -80 224 -35 -11 -120 -104 -149
|
||||
-161 -13 -27 -36 -91 -50 -143 l-26 -93 -28 88 c-23 72 -30 113 -34 216 -4
|
||||
128 -11 147 -42 128z"/>
|
||||
<path d="M8330 6567 c-94 -50 -135 -149 -91 -220 29 -47 114 -125 156 -143
|
||||
110 -46 234 19 211 110 -8 32 -41 32 -42 1 -2 -75 -66 -105 -150 -70 -45 19
|
||||
-139 113 -148 148 -9 39 17 90 65 123 68 47 119 32 159 -46 42 -84 33 -134
|
||||
-29 -160 -32 -13 -41 -37 -17 -46 22 -8 91 32 104 61 30 64 -4 173 -72 233
|
||||
-45 39 -85 42 -146 9z"/>
|
||||
<path d="M1481 6511 c-10 -7 -7 -22 18 -74 17 -36 31 -73 31 -83 0 -40 13 -64
|
||||
33 -64 18 0 19 5 14 48 -6 53 -45 150 -68 169 -9 7 -20 8 -28 4z"/>
|
||||
<path d="M8092 6478 c-17 -17 -15 -27 7 -46 22 -19 93 -263 89 -302 -2 -19 2
|
||||
-25 17 -25 27 0 32 57 10 133 -58 202 -76 252 -93 252 -10 0 -23 -5 -30 -12z"/>
|
||||
<path d="M7572 6471 c-7 -4 -21 -22 -30 -39 -9 -17 -30 -52 -46 -77 -42 -68
|
||||
-58 -122 -51 -167 9 -49 60 -118 105 -140 66 -33 190 -18 242 29 22 19 23 56
|
||||
3 73 -19 16 -38 3 -32 -22 4 -15 -3 -24 -36 -39 -82 -37 -167 -18 -211 47 -48
|
||||
70 -27 151 69 268 25 31 45 60 45 66 0 12 -40 13 -58 1z"/>
|
||||
<path d="M6597 6429 c-41 -22 -90 -83 -107 -134 -16 -47 2 -103 45 -148 49
|
||||
-50 91 -51 134 -2 50 58 99 169 80 181 -6 3 -3 11 7 18 41 31 -24 106 -91 106
|
||||
-16 -1 -47 -10 -68 -21z m101 -35 c22 -15 22 -17 5 -29 -15 -12 -16 -17 -5
|
||||
-35 11 -17 9 -28 -8 -67 -26 -58 -67 -113 -84 -113 -25 0 -76 69 -76 101 0 45
|
||||
36 102 83 132 48 31 55 32 85 11z"/>
|
||||
<path d="M1536 6062 c-3 -5 4 -37 15 -73 11 -35 23 -100 27 -144 6 -71 9 -80
|
||||
27 -80 18 0 20 6 18 70 -3 88 -41 228 -65 233 -9 2 -19 -1 -22 -6z"/>
|
||||
<path d="M18590 5781 c0 -11 5 -23 11 -27 20 -12 79 -148 79 -181 0 -25 -9
|
||||
-39 -45 -69 -41 -33 -60 -74 -35 -74 20 0 99 65 113 93 10 20 12 42 6 76 -7
|
||||
45 -52 145 -82 184 -19 23 -47 22 -47 -2z"/>
|
||||
<path d="M1625 5551 c-3 -6 10 -50 29 -99 60 -150 84 -300 55 -354 -8 -16 -8
|
||||
-24 4 -35 13 -14 17 -12 34 13 39 60 13 240 -60 419 -24 57 -47 79 -62 56z"/>
|
||||
<path d="M10924 5445 c-8 -19 5 -38 21 -31 7 2 52 -5 101 -16 82 -18 111 -20
|
||||
352 -14 210 5 277 3 335 -9 70 -14 346 -59 417 -68 19 -2 78 2 131 9 347 49
|
||||
445 52 839 28 319 -19 702 -15 889 11 115 16 132 16 230 1 58 -9 117 -17 131
|
||||
-18 18 -2 24 -8 23 -23 -16 -153 -28 -234 -38 -250 -7 -11 -15 -51 -18 -90 -4
|
||||
-38 -11 -120 -18 -182 -14 -142 -3 -278 56 -708 122 -881 131 -973 116 -1125
|
||||
-6 -63 -13 -128 -14 -145 -8 -89 -20 -166 -27 -170 -10 -6 -21 136 -13 190 5
|
||||
41 4 45 -16 45 -12 0 -24 -8 -27 -17 -3 -10 -12 -32 -19 -50 -12 -27 -12 -34
|
||||
-1 -40 8 -5 16 -36 20 -78 4 -50 3 -63 -4 -47 -6 15 -17 22 -27 20 -14 -3 -17
|
||||
-12 -15 -38 2 -19 8 -42 12 -51 6 -10 0 -44 -16 -93 -13 -42 -24 -97 -24 -122
|
||||
0 -95 44 -530 67 -654 6 -32 5 -34 -11 -21 -22 18 -41 1 -31 -28 9 -30 54 -39
|
||||
72 -16 16 22 16 59 3 140 -6 33 -14 107 -20 165 -5 58 -15 155 -21 215 -6 61
|
||||
-11 143 -10 184 0 78 27 179 42 164 22 -22 41 -286 42 -607 2 -268 5 -330 16
|
||||
-334 25 -8 31 22 32 158 l1 135 15 -70 c8 -38 27 -131 43 -206 17 -75 33 -181
|
||||
36 -236 l7 -99 -269 -17 c-148 -10 -354 -22 -459 -27 -104 -5 -217 -16 -250
|
||||
-25 -78 -19 -519 -44 -750 -43 -155 2 -201 -2 -330 -25 -82 -15 -212 -31 -288
|
||||
-37 -75 -6 -161 -15 -190 -22 -36 -7 -91 -8 -177 -2 -69 4 -258 8 -420 9 -162
|
||||
0 -308 3 -325 7 -35 9 -60 -3 -52 -25 9 -23 107 -30 392 -28 143 1 312 -3 375
|
||||
-8 75 -7 136 -7 175 -1 33 5 137 16 230 25 94 9 220 25 280 37 86 17 154 22
|
||||
315 24 358 4 666 22 765 44 64 14 157 23 320 30 127 5 293 14 370 20 77 5 173
|
||||
10 213 10 l73 0 -3 -57 c-2 -46 0 -58 13 -61 19 -4 27 12 44 93 11 51 11 62
|
||||
-1 76 -9 10 -14 41 -14 95 0 46 -11 129 -26 199 -71 339 -109 599 -121 836 -6
|
||||
110 -5 119 20 170 14 30 30 87 36 129 13 103 14 1005 0 1160 -5 69 -30 258
|
||||
-55 420 -60 391 -73 499 -80 660 l-6 135 48 36 c27 20 57 39 68 43 29 10 18
|
||||
103 -17 150 -15 19 -27 38 -27 43 0 4 -5 24 -10 45 -12 41 -35 55 -59 35 -27
|
||||
-23 -56 -26 -138 -11 -99 17 -157 17 -318 -1 -175 -20 -600 -19 -936 1 -283
|
||||
17 -398 12 -724 -32 -142 -19 -174 -16 -497 46 -95 19 -142 21 -400 20 -240
|
||||
-2 -304 1 -353 14 -74 20 -114 20 -121 1z m3553 -236 c5 -40 2 -46 -27 -68
|
||||
l-32 -23 7 73 c4 41 10 78 12 82 11 18 35 -22 40 -64z m-89 -516 c6 -65 32
|
||||
-248 57 -408 54 -346 63 -436 70 -705 l5 -205 -30 215 c-17 118 -48 341 -70
|
||||
495 -21 154 -44 324 -50 377 -12 115 -13 348 -2 348 4 0 13 -53 20 -117z"/>
|
||||
<path d="M11058 5323 c-9 -2 -23 -19 -29 -38 -10 -27 -16 -32 -29 -25 -24 13
|
||||
-99 -26 -112 -59 -6 -14 -12 -39 -13 -56 -2 -16 -12 -61 -23 -98 -36 -118 -45
|
||||
-249 -44 -632 1 -332 13 -594 42 -895 5 -52 10 -102 10 -110 0 -12 -18 -19
|
||||
-70 -28 -93 -16 -100 -15 -100 8 0 21 -34 45 -50 35 -15 -9 -12 -31 7 -46 18
|
||||
-16 3 -19 -182 -39 -204 -22 -282 -31 -350 -42 -42 -7 -161 -10 -300 -8 -474
|
||||
7 -689 5 -790 -10 -67 -9 -171 -13 -315 -11 -528 6 -938 3 -1095 -9 -93 -7
|
||||
-223 -12 -287 -11 -90 1 -126 -2 -155 -15 -28 -12 -63 -16 -135 -15 -53 1
|
||||
-150 -3 -215 -8 -71 -6 -166 -7 -238 -3 -121 8 -151 7 -465 -28 -96 -10 -238
|
||||
-21 -315 -25 -238 -10 -399 -23 -428 -34 -16 -6 -50 -11 -76 -11 l-47 0 -21
|
||||
147 -21 146 31 46 c52 75 72 128 57 146 -18 22 -34 19 -71 -12 -18 -16 -30
|
||||
-22 -25 -15 10 16 -11 42 -29 36 -7 -3 -16 -21 -19 -40 -6 -30 -11 -34 -36
|
||||
-34 -23 0 -30 -5 -30 -19 0 -11 -5 -23 -12 -27 -8 -5 -9 11 -4 65 3 39 7 77 9
|
||||
84 1 7 -7 12 -18 12 -25 0 -49 -68 -60 -166 l-7 -66 -109 -104 c-123 -116
|
||||
-247 -209 -314 -235 -42 -16 -57 -36 -36 -48 5 -3 34 -1 65 6 43 8 60 8 69 -1
|
||||
6 -6 21 -11 33 -11 13 0 60 -29 107 -64 110 -85 237 -152 314 -166 58 -12 61
|
||||
-14 66 -44 2 -17 3 -32 2 -34 -1 -1 -24 11 -51 27 -66 41 -148 61 -276 68 -91
|
||||
5 -106 8 -96 20 8 10 8 17 -1 26 -9 9 -18 8 -39 -5 -37 -23 -49 -43 -34 -61 8
|
||||
-10 46 -16 129 -21 147 -8 230 -28 310 -75 67 -39 69 -42 96 -181 11 -53 16
|
||||
-65 32 -65 29 0 30 34 6 129 -33 131 -37 166 -17 166 9 0 19 6 22 14 7 19 -13
|
||||
56 -31 56 -15 0 -32 26 -45 69 -4 14 -11 33 -15 42 -4 11 0 18 15 22 28 7 23
|
||||
41 -7 45 -15 2 -22 12 -25 33 -4 26 -2 29 23 29 24 0 27 -4 34 -47 8 -58 21
|
||||
-83 40 -83 16 0 19 47 6 105 l-6 30 65 13 c87 17 244 30 480 42 107 5 224 14
|
||||
260 19 139 22 350 33 700 36 316 3 370 6 405 21 33 14 82 17 289 20 173 3 268
|
||||
9 313 19 82 19 560 20 744 1 137 -14 382 -7 544 15 92 13 587 13 790 0 104 -6
|
||||
304 9 365 28 19 6 66 11 105 11 38 0 115 7 170 15 55 9 136 20 180 25 44 5
|
||||
104 15 133 21 30 6 55 9 57 7 6 -6 54 -423 61 -528 l6 -105 -71 -236 c-39
|
||||
-129 -71 -241 -71 -247 0 -7 9 -12 19 -12 20 0 37 44 102 268 18 61 33 111 35
|
||||
110 1 -2 9 -79 18 -173 9 -93 21 -200 26 -236 20 -137 41 -400 47 -589 6 -208
|
||||
-4 -322 -34 -384 -13 -29 -14 -39 -4 -49 9 -9 19 -3 48 31 l36 43 -2 242 c-2
|
||||
240 -18 484 -46 707 -8 63 -24 208 -35 322 l-20 207 21 86 c65 277 84 860 53
|
||||
1647 -15 371 -14 687 2 776 4 17 12 32 20 32 15 0 29 43 19 59 -6 11 -9 12
|
||||
-37 4z m-104 -170 c-12 -71 -9 -318 6 -583 8 -157 11 -338 7 -545 -7 -319 -11
|
||||
-373 -43 -510 l-18 -80 -7 50 c-27 187 -44 544 -44 940 0 443 6 525 46 633 12
|
||||
31 22 73 24 92 3 49 3 50 21 50 13 0 14 -8 8 -47z m43 -295 c-1 -51 -3 -12 -3
|
||||
87 0 99 2 141 3 93 2 -48 2 -129 0 -180z m22 -1308 c-7 -297 -30 -635 -44
|
||||
-649 -8 -7 -13 21 -34 209 -25 219 -25 236 -6 243 8 4 14 18 13 34 -1 15 10
|
||||
82 25 148 15 70 29 173 33 248 4 70 10 124 14 120 5 -4 4 -163 -1 -353z
|
||||
m-5796 -50 c-18 -32 -33 -39 -33 -16 0 7 10 21 23 29 30 22 31 21 10 -13z
|
||||
m-118 -138 c-15 -16 -16 -15 -4 12 7 15 15 23 17 16 3 -7 -3 -19 -13 -28z
|
||||
m-120 -100 c-4 -12 -8 -13 -17 -4 -21 21 -37 13 -56 -30 -23 -51 -116 -143
|
||||
-154 -152 -14 -3 -36 -2 -48 2 -20 7 -16 12 37 49 32 23 99 79 148 126 90 84
|
||||
90 84 93 55 2 -17 1 -37 -3 -46z m220 -139 c4 -19 1 -23 -20 -23 -24 0 -25 2
|
||||
-25 68 0 37 3 78 7 92 5 20 9 10 20 -45 7 -38 15 -80 18 -92z m-139 87 l-14
|
||||
-55 -1 46 c-1 25 4 50 11 57 18 18 18 12 4 -48z m-76 -50 l0 -40 -40 0 c-22 0
|
||||
-40 2 -40 5 0 9 62 75 71 75 5 0 9 -18 9 -40z m107 -42 c-3 -8 -6 -5 -6 6 -1
|
||||
11 2 17 5 13 3 -3 4 -12 1 -19z m-114 -48 c2 -3 7 -20 11 -39 l6 -33 -48 7
|
||||
c-45 6 -122 25 -131 32 -2 1 4 12 15 24 16 18 28 20 81 17 34 -2 64 -6 66 -8z
|
||||
m110 -42 c-7 -40 -8 -41 -25 -36 -20 4 -3 68 17 68 11 0 13 -8 8 -32z m-110
|
||||
-74 c15 -3 35 -18 45 -32 9 -15 21 -30 27 -34 16 -12 60 -9 73 4 15 15 20 9
|
||||
32 -31 l9 -33 -42 7 c-42 7 -190 80 -237 117 l-25 20 45 -6 c25 -4 58 -9 73
|
||||
-12z m119 -26 c-6 -6 -16 -7 -22 -3 -9 6 -9 9 1 16 17 10 34 0 21 -13z"/>
|
||||
<path d="M12734 4948 c-4 -6 -11 -70 -15 -142 -4 -72 -8 -134 -8 -137 -2 -20
|
||||
-153 -61 -415 -112 -56 -11 -82 -31 -57 -47 14 -8 20 -7 241 40 85 17 170 38
|
||||
189 46 18 8 35 14 36 14 5 0 20 -232 18 -265 -1 -16 5 -61 13 -100 8 -38 21
|
||||
-113 30 -164 8 -52 17 -105 20 -118 8 -30 26 -44 43 -33 12 7 11 25 -7 114
|
||||
-12 58 -22 112 -22 120 0 9 16 15 48 18 27 3 62 12 79 20 l31 16 7 -47 c17
|
||||
-119 70 -171 173 -173 32 0 69 5 82 12 17 9 25 10 28 2 18 -54 91 -74 133 -36
|
||||
38 34 138 261 155 351 6 33 8 35 15 15 5 -12 13 -22 18 -22 5 0 13 -15 16 -32
|
||||
13 -61 77 -187 97 -194 35 -11 41 10 15 49 -33 49 -62 124 -92 241 -27 105
|
||||
-30 148 -15 211 14 59 42 334 35 345 -14 23 -34 6 -59 -49 -33 -74 -50 -193
|
||||
-41 -293 4 -42 4 -94 0 -115 -5 -35 -10 -40 -53 -55 -82 -30 -155 -80 -189
|
||||
-130 -30 -45 -37 -77 -48 -202 -4 -51 -105 -75 -165 -39 -38 22 -51 54 -58
|
||||
135 l-5 67 57 63 c61 66 126 159 126 178 0 6 -6 13 -14 16 -21 8 -158 -131
|
||||
-189 -191 -28 -54 -52 -75 -106 -93 -69 -24 -77 -19 -89 56 -6 37 -16 90 -22
|
||||
119 -6 29 -9 92 -8 140 l3 88 40 10 c47 11 65 26 65 54 0 26 -15 26 -65 1
|
||||
l-40 -20 -3 53 c-2 30 4 87 12 127 12 54 13 77 5 87 -14 16 -35 17 -45 1z
|
||||
m756 -620 c-24 -84 -74 -212 -108 -273 -19 -35 -34 -51 -51 -53 -35 -5 -41 12
|
||||
-41 117 0 142 24 183 146 245 71 37 74 35 54 -36z"/>
|
||||
<path d="M11775 4739 c-27 -10 -72 -18 -98 -19 -44 0 -48 -2 -45 -22 2 -18
|
||||
-13 -33 -85 -81 -115 -77 -222 -184 -256 -256 -34 -74 -37 -197 -6 -251 46
|
||||
-79 184 -97 358 -46 107 32 111 32 125 2 20 -44 93 -43 130 3 22 28 83 164 94
|
||||
213 6 26 14 45 18 43 4 -3 11 -29 15 -60 9 -72 62 -179 92 -183 15 -2 26 5 36
|
||||
24 l14 27 7 -27 c7 -28 33 -35 43 -11 3 9 -2 42 -11 74 -19 69 -10 171 21 224
|
||||
25 43 111 74 155 56 56 -23 55 -43 -6 -111 -80 -88 -100 -145 -93 -273 5 -109
|
||||
17 -146 52 -165 78 -42 142 15 186 165 10 33 18 51 18 40 1 -28 58 -95 95
|
||||
-110 60 -25 79 13 21 41 -44 21 -66 52 -89 129 -10 33 -21 66 -23 73 -4 8 5
|
||||
12 25 12 16 0 35 7 42 15 19 22 17 108 -2 138 -18 26 -65 41 -105 31 -18 -5
|
||||
-31 0 -51 19 -36 33 -65 47 -100 47 -48 0 -120 -30 -147 -61 -32 -39 -55 -118
|
||||
-55 -191 0 -32 -4 -58 -9 -58 -5 0 -13 -12 -18 -27 -9 -26 -9 -25 -30 23 -11
|
||||
27 -29 110 -40 184 -17 120 -21 135 -38 135 -17 0 -23 -17 -46 -125 -42 -194
|
||||
-117 -336 -156 -297 -20 19 -27 195 -14 302 18 132 18 129 -1 133 -32 6 -41
|
||||
-37 -46 -214 l-5 -172 -31 -5 c-17 -2 -67 -14 -110 -26 -86 -23 -170 -27 -228
|
||||
-10 -51 13 -68 49 -68 136 0 96 28 150 122 239 134 127 272 206 436 250 8 2
|
||||
12 12 10 21 -4 24 -42 25 -103 2z m799 -365 c3 -9 6 -31 6 -49 0 -33 -2 -34
|
||||
-42 -37 l-43 -3 -2 -74 c-3 -137 -49 -265 -99 -277 -38 -10 -54 13 -65 92 -10
|
||||
74 -5 139 17 192 18 44 80 119 123 148 41 28 96 32 105 8z"/>
|
||||
<path d="M18484 4747 c-2 -7 7 -67 21 -133 15 -65 34 -175 43 -244 13 -97 20
|
||||
-125 32 -125 22 0 17 167 -8 270 -11 44 -25 112 -32 150 -7 39 -14 76 -16 83
|
||||
-5 16 -33 16 -40 -1z"/>
|
||||
<path d="M1827 4693 c-3 -5 -2 -27 3 -49 13 -55 13 -58 -12 -69 -36 -16 -29
|
||||
-40 13 -43 55 -5 63 13 47 95 -9 48 -18 69 -30 71 -9 2 -19 -1 -21 -5z"/>
|
||||
<path d="M1652 4141 c-8 -5 -20 -74 -32 -185 -11 -98 -33 -235 -50 -306 -16
|
||||
-70 -30 -130 -30 -134 0 -3 -19 -15 -42 -27 -68 -34 -127 -87 -152 -137 l-23
|
||||
-46 -16 25 c-9 13 -22 43 -29 67 -9 29 -18 42 -31 42 -10 0 -16 4 -12 9 8 14
|
||||
-24 41 -48 41 -31 -1 -102 -34 -146 -69 -82 -65 -122 -205 -75 -267 57 -78
|
||||
173 -26 250 112 l36 65 24 -35 c23 -33 24 -40 14 -99 -14 -92 9 -161 51 -150
|
||||
37 10 109 92 143 162 18 39 44 111 57 160 14 56 29 91 37 91 17 0 27 27 15 43
|
||||
-6 7 -5 31 2 62 l12 50 6 -85 c4 -47 9 -128 13 -181 l6 -97 37 -16 c20 -9 46
|
||||
-22 59 -30 26 -15 83 -4 115 22 15 13 19 13 35 -1 38 -35 91 -48 161 -41 55 5
|
||||
69 3 80 -10 18 -21 48 -20 55 2 3 9 12 58 20 107 19 109 43 205 56 221 6 6 22
|
||||
9 36 6 22 -4 25 -2 22 19 -4 34 -58 39 -87 8 -25 -27 -34 -57 -62 -204 l-21
|
||||
-110 -98 5 c-81 4 -104 9 -127 27 -15 11 -27 25 -25 30 1 4 13 40 27 78 26 74
|
||||
32 162 15 196 -13 23 -48 25 -79 3 -54 -38 -79 -171 -46 -250 18 -44 12 -60
|
||||
-27 -68 -22 -4 -37 0 -55 14 -14 11 -31 20 -38 20 -30 0 -39 427 -11 543 20
|
||||
86 23 299 3 315 -7 6 -18 7 -25 3z m244 -665 c-7 -60 -34 -146 -46 -146 -14 0
|
||||
-22 59 -16 104 8 50 42 110 57 100 7 -4 9 -25 5 -58z m-403 -112 c-13 -48 -36
|
||||
-110 -50 -138 -24 -49 -88 -126 -105 -126 -11 0 -10 78 3 123 5 20 14 37 19
|
||||
37 6 0 10 12 10 28 0 32 46 92 103 133 22 16 41 29 42 29 2 0 -8 -39 -22 -86z
|
||||
m-339 61 c-9 -22 23 -30 50 -12 l24 16 -9 -41 c-32 -141 -179 -282 -219 -209
|
||||
-37 70 26 192 125 244 37 20 35 20 29 2z"/>
|
||||
<path d="M3767 4114 c-4 -4 -7 -34 -7 -66 0 -55 -2 -59 -32 -79 -26 -15 -43
|
||||
-18 -77 -14 -56 8 -72 15 -70 29 3 28 -3 36 -26 36 -22 0 -24 3 -18 31 5 28 4
|
||||
30 -18 27 -22 -3 -24 -8 -27 -70 -2 -52 2 -79 19 -118 18 -43 21 -63 16 -129
|
||||
-5 -76 -4 -80 22 -104 14 -14 45 -30 69 -37 l43 -11 -38 -26 c-67 -46 -219
|
||||
-171 -299 -248 -72 -68 -78 -76 -63 -91 15 -14 21 -13 79 16 35 17 66 28 71
|
||||
23 5 -5 16 -45 24 -90 20 -104 38 -155 70 -197 14 -18 25 -40 25 -49 0 -27 40
|
||||
-124 56 -138 29 -24 35 4 17 73 l-17 65 47 45 47 45 0 -98 c0 -74 3 -100 14
|
||||
-106 8 -4 17 -33 21 -65 7 -53 6 -56 -13 -51 -14 3 -22 -1 -27 -15 -3 -12 -21
|
||||
-26 -43 -33 -117 -38 -181 -121 -81 -105 l39 6 0 -207 c0 -214 11 -297 44
|
||||
-347 13 -20 16 -52 16 -155 0 -76 -4 -132 -10 -136 -13 -8 -13 -132 0 -140 15
|
||||
-10 12 -28 -4 -22 -28 11 -32 -19 -25 -168 7 -146 18 -205 38 -205 23 0 33 50
|
||||
41 213 6 115 14 185 25 209 12 30 15 85 15 296 0 212 3 262 14 271 27 22 39
|
||||
143 31 311 -7 154 -7 157 14 163 18 4 21 13 22 59 0 29 9 71 19 93 l18 40 8
|
||||
-30 c12 -41 9 -317 -4 -445 -7 -58 -16 -180 -22 -271 -12 -196 -33 -329 -55
|
||||
-345 -16 -12 -20 -49 -6 -58 51 -32 91 123 107 419 7 111 9 123 15 80 4 -27 8
|
||||
-113 8 -189 1 -120 -1 -140 -16 -151 -15 -11 -15 -15 -4 -29 10 -12 12 -33 8
|
||||
-72 -6 -62 -1 -84 19 -84 10 0 12 -12 8 -47 -8 -76 -19 -308 -16 -327 2 -10
|
||||
11 -16 20 -14 14 3 18 22 25 113 13 193 17 215 34 215 12 0 14 8 9 43 -9 64
|
||||
-24 384 -25 539 -1 115 -4 138 -17 146 -24 14 -17 248 8 266 24 17 46 159 58
|
||||
375 15 261 -7 409 -63 427 -12 4 -32 17 -44 30 -15 16 -33 24 -56 24 -31 0
|
||||
-37 5 -72 65 -21 36 -43 69 -49 73 -6 4 7 9 29 12 34 4 40 9 39 28 0 12 5 22
|
||||
13 22 26 0 35 52 30 160 l-5 105 39 60 c38 58 47 100 21 100 -7 0 -26 -22 -42
|
||||
-50 -32 -55 -38 -51 -42 30 -2 36 -7 51 -18 53 -9 1 -19 0 -23 -4z m-27 -212
|
||||
c0 -7 -19 -22 -42 -32 -71 -32 -118 -25 -118 19 l0 27 80 -1 c59 0 80 -3 80
|
||||
-13z m-5 -93 c-6 -33 -15 -36 -15 -6 0 15 4 27 9 27 6 0 8 -10 6 -21z m-65
|
||||
-23 c0 -23 -45 -56 -74 -56 -12 0 -16 10 -16 40 l0 40 45 -2 c39 -1 45 -4 45
|
||||
-22z m93 -90 c9 1 17 -5 17 -13 0 -10 -6 -13 -16 -9 -9 3 -22 6 -30 6 -9 0
|
||||
-14 11 -14 28 0 40 14 50 20 15 4 -19 11 -28 23 -27z m-83 4 c0 -5 -10 -10
|
||||
-22 -10 -19 0 -20 2 -8 10 19 13 30 13 30 0z m-2 -222 c-3 -82 -3 -83 -28 -80
|
||||
-50 5 -100 1 -145 -12 -28 -9 -47 -10 -51 -4 -3 5 -4 10 -3 12 2 1 36 27 74
|
||||
57 112 88 139 109 148 109 4 0 7 -37 5 -82z m82 -19 c0 -4 -7 -9 -15 -13 -11
|
||||
-4 -15 2 -15 27 1 30 1 31 15 13 8 -11 15 -23 15 -27z m-220 -119 c-34 -11
|
||||
-60 -11 -35 0 11 5 29 8 40 8 16 0 15 -2 -5 -8z m426 -309 c-3 -112 -6 -205
|
||||
-8 -206 -2 -1 -15 -5 -29 -8 -24 -6 -27 -3 -45 49 -10 31 -25 59 -31 61 -10 4
|
||||
-13 49 -13 179 l0 174 23 0 c12 0 38 8 57 19 l35 19 8 -42 c5 -22 6 -133 3
|
||||
-245z m-179 202 c-2 -16 -4 -5 -4 22 0 28 2 40 4 28 2 -13 2 -35 0 -50z m-102
|
||||
-15 c-6 -69 -26 -123 -67 -180 -11 -16 -23 -28 -27 -28 -12 0 -18 106 -11 185
|
||||
5 52 9 64 15 47 11 -34 39 -24 43 16 3 27 7 32 29 32 l26 0 -8 -72z m-150 4
|
||||
l-8 -27 -9 34 c-7 25 -6 36 4 42 16 11 22 -13 13 -49z m243 -279 c-4 -62 -28
|
||||
-71 -28 -10 0 24 3 47 7 50 16 17 24 3 21 -40z m-11 -150 c-3 -10 -5 -2 -5 17
|
||||
0 19 2 27 5 18 2 -10 2 -26 0 -35z m-107 -167 c0 -2 -7 -7 -16 -10 -8 -3 -12
|
||||
-2 -9 4 6 10 25 14 25 6z m-13 -263 c-2 -38 -3 -7 -3 67 0 74 1 105 3 68 2
|
||||
-38 2 -98 0 -135z"/>
|
||||
<path d="M185 3990 c-48 -24 -105 -95 -133 -165 -41 -104 -56 -310 -22 -310
|
||||
11 0 17 25 26 110 22 202 87 319 191 340 49 10 77 -24 98 -120 28 -124 12
|
||||
-290 -40 -409 -9 -21 -18 -36 -21 -33 -7 7 15 127 27 149 14 26 -6 58 -36 58
|
||||
-24 0 -35 -23 -16 -34 4 -3 2 -29 -5 -58 -8 -29 -14 -69 -14 -90 0 -21 -2 -38
|
||||
-5 -38 -2 0 -22 19 -43 42 -28 30 -44 39 -57 34 -14 -5 -17 -14 -12 -47 7 -52
|
||||
23 -71 41 -48 10 15 14 12 33 -21 15 -28 17 -42 10 -49 -17 -17 -35 -13 -42 9
|
||||
-7 23 -33 27 -41 6 -3 -8 2 -28 11 -45 12 -24 22 -31 45 -31 16 0 32 5 35 10
|
||||
15 24 23 5 29 -73 4 -46 18 -130 32 -188 14 -57 28 -121 31 -141 6 -43 28 -56
|
||||
44 -27 8 15 6 36 -10 87 -30 100 -53 226 -49 272 l3 40 48 -34 c55 -39 130
|
||||
-73 172 -78 24 -2 30 1 30 16 0 13 -12 22 -40 31 -65 19 -125 54 -176 102
|
||||
l-49 46 21 31 c99 150 131 401 73 578 -30 91 -103 121 -189 78z"/>
|
||||
<path d="M815 3526 c-42 -18 -90 -61 -115 -100 -11 -19 -28 -36 -38 -38 -9 -3
|
||||
-82 -1 -161 4 -161 10 -181 5 -141 -37 23 -25 75 -35 82 -15 2 6 41 7 103 3
|
||||
l100 -6 0 -56 c1 -102 64 -181 145 -181 67 0 120 64 120 145 0 55 -30 43 -46
|
||||
-18 -20 -78 -48 -98 -107 -74 -44 19 -69 71 -65 134 l3 46 84 17 c93 18 114
|
||||
34 126 96 5 29 2 43 -13 63 -23 31 -38 35 -77 17z m45 -63 c0 -16 -4 -33 -8
|
||||
-39 -7 -12 -75 -34 -105 -34 -17 0 -17 2 2 27 26 32 80 73 98 73 8 0 13 -11
|
||||
13 -27z"/>
|
||||
<path d="M18496 3531 c-4 -6 0 -83 9 -173 8 -90 16 -212 18 -273 2 -103 3
|
||||
-110 22 -110 18 0 20 7 22 85 2 47 -5 173 -15 280 -15 164 -20 195 -34 198 -9
|
||||
2 -19 -1 -22 -7z"/>
|
||||
<path d="M13355 3088 c-2 -7 -6 -85 -9 -173 -5 -159 -17 -235 -38 -235 -6 0
|
||||
-36 12 -68 26 -69 31 -92 24 -111 -33 -27 -82 11 -295 63 -350 36 -38 56 -30
|
||||
64 25 7 49 61 192 72 192 12 0 31 54 30 85 0 17 4 41 9 54 8 19 12 -5 22 -105
|
||||
19 -212 47 -314 87 -314 22 0 29 28 11 48 -9 10 -21 40 -27 67 -22 105 -53
|
||||
406 -57 550 -3 83 -9 155 -15 162 -13 16 -28 17 -33 1z m-107 -433 c28 -11 52
|
||||
-26 52 -33 0 -8 -18 -59 -40 -113 -22 -55 -40 -106 -40 -114 0 -36 -19 -10
|
||||
-35 47 -27 96 -25 249 3 236 4 -2 31 -12 60 -23z"/>
|
||||
<path d="M11535 2970 c-3 -6 -4 -19 0 -29 4 -15 -1 -20 -30 -25 -79 -15 -168
|
||||
-147 -169 -251 -1 -55 16 -88 40 -78 11 4 12 17 8 59 -6 48 -3 62 25 119 18
|
||||
35 43 73 57 84 28 22 105 41 169 41 36 0 48 -5 69 -30 31 -38 40 -81 34 -173
|
||||
-6 -80 -38 -170 -79 -219 l-26 -32 -49 38 -49 38 0 66 c0 60 -2 67 -20 70 -17
|
||||
2 -24 -7 -38 -45 -27 -77 -36 -174 -38 -413 -1 -213 0 -225 17 -225 18 0 19
|
||||
14 24 232 3 127 8 235 13 239 4 4 7 2 7 -4 0 -7 9 -12 20 -12 11 0 20 -5 20
|
||||
-11 0 -5 8 -9 18 -8 9 1 22 1 29 0 7 0 44 -47 82 -103 75 -109 173 -218 197
|
||||
-218 10 0 14 13 14 49 0 54 -12 70 -37 50 -13 -12 -20 -8 -49 25 -43 50 -134
|
||||
181 -134 194 0 18 33 24 42 7 11 -19 37 -20 44 0 13 32 19 12 16 -50 -3 -61
|
||||
-2 -67 26 -95 26 -25 38 -30 81 -30 29 0 91 13 146 30 77 25 95 35 95 50 0 26
|
||||
-18 25 -99 -4 -163 -58 -227 -37 -207 68 6 33 7 33 69 38 78 7 145 35 192 83
|
||||
55 54 85 145 53 158 -22 8 -111 -4 -148 -19 -69 -29 -129 -76 -160 -125 -24
|
||||
-36 -38 -49 -55 -49 -13 0 -26 4 -29 9 -3 5 8 40 25 77 28 60 32 81 33 164 1
|
||||
81 -2 102 -22 142 -30 61 -63 82 -129 82 -32 0 -49 4 -44 9 5 5 7 16 4 23 -6
|
||||
16 -49 19 -58 4z m545 -375 c0 -24 -72 -97 -115 -116 -22 -10 -62 -19 -89 -19
|
||||
l-49 0 25 33 c29 38 108 93 152 106 49 14 76 13 76 -4z"/>
|
||||
<path d="M13685 2696 c-60 -19 -93 -44 -120 -91 -33 -55 -32 -73 9 -153 39
|
||||
-77 57 -96 135 -137 79 -42 81 -67 9 -100 -63 -29 -278 -60 -346 -51 -33 4
|
||||
-44 2 -49 -10 -9 -25 16 -34 92 -34 163 1 327 40 382 92 42 40 23 95 -46 130
|
||||
-83 41 -101 59 -137 129 -32 65 -34 71 -20 98 19 37 72 81 96 81 32 0 71 23
|
||||
68 39 -4 21 -24 23 -73 7z"/>
|
||||
<path d="M12362 2629 c-104 -40 -201 -164 -231 -296 -16 -68 2 -107 57 -122
|
||||
52 -15 78 -13 152 12 l65 23 22 -26 c19 -22 29 -25 80 -24 82 2 165 37 224 93
|
||||
51 49 68 98 31 89 -15 -4 -17 0 -14 29 4 28 -2 39 -35 73 l-40 39 21 20 c54
|
||||
48 135 71 172 46 37 -24 46 -57 54 -195 9 -137 28 -204 58 -198 14 3 17 15 17
|
||||
63 -1 77 -26 265 -36 265 -4 0 -10 14 -14 30 -4 17 -20 44 -37 60 -24 25 -38
|
||||
30 -76 30 -57 0 -125 -30 -172 -74 -26 -25 -47 -35 -84 -40 -105 -13 -177 -85
|
||||
-186 -185 l-5 -54 -50 -18 c-86 -30 -165 -23 -165 15 0 43 32 131 67 183 38
|
||||
58 113 120 123 102 12 -18 63 -40 72 -31 5 5 10 31 11 58 2 58 -6 62 -81 33z
|
||||
m306 -165 c51 -35 50 -81 -1 -86 -40 -4 -42 -29 -4 -42 20 -8 34 -7 50 3 20
|
||||
13 20 12 -2 -13 -14 -14 -49 -38 -77 -52 -61 -30 -167 -44 -179 -24 -5 8 -1
|
||||
16 9 22 23 13 20 49 -4 55 -32 9 -26 60 11 100 l32 32 28 -30 c26 -28 59 -32
|
||||
59 -6 0 11 39 57 50 57 3 0 16 -7 28 -16z"/>
|
||||
<path d="M1726 2451 c-4 -5 -6 -56 -5 -113 1 -57 -2 -128 -6 -159 -4 -32 -3
|
||||
-59 2 -62 22 -14 36 15 46 95 16 131 -8 286 -37 239z"/>
|
||||
<path d="M18546 2211 c-3 -5 1 -25 9 -45 l15 -36 -39 6 c-26 4 -41 2 -46 -6
|
||||
-13 -22 25 -40 82 -40 62 0 66 9 33 84 -18 43 -41 58 -54 37z"/>
|
||||
<path d="M1704 1970 c-10 -10 5 -205 25 -315 6 -33 12 -78 14 -100 2 -33 6
|
||||
-40 22 -40 18 0 20 6 18 50 -1 28 -9 97 -17 155 -9 58 -19 138 -23 179 -8 72
|
||||
-18 92 -39 71z"/>
|
||||
<path d="M18475 1718 c-3 -8 3 -34 14 -59 25 -53 26 -79 6 -105 -35 -46 8 -64
|
||||
44 -18 28 35 26 68 -7 134 -28 56 -48 72 -57 48z"/>
|
||||
<path d="M18373 1474 c4 -22 -2 -30 -41 -55 -25 -16 -65 -36 -89 -45 -29 -12
|
||||
-43 -23 -43 -35 0 -26 25 -24 96 10 70 33 134 86 134 110 0 23 -19 41 -43 41
|
||||
-15 0 -18 -5 -14 -26z"/>
|
||||
<path d="M17155 1225 c-16 -8 -55 -17 -85 -20 -30 -4 -91 -13 -135 -21 -119
|
||||
-22 -321 -44 -397 -44 -68 0 -91 -12 -67 -34 27 -25 390 11 656 65 57 11 100
|
||||
39 89 57 -9 15 -23 14 -61 -3z"/>
|
||||
<path d="M1818 968 c-3 -7 6 -87 19 -178 13 -91 25 -219 26 -285 2 -113 3
|
||||
-120 22 -120 19 0 20 6 18 145 -3 184 -40 443 -64 448 -9 2 -19 -3 -21 -10z"/>
|
||||
<path d="M15957 958 c-2 -7 7 -26 21 -41 l26 -28 -49 6 c-117 12 -380 25 -414
|
||||
20 -78 -13 -211 -48 -228 -60 -13 -10 -15 -17 -7 -25 9 -9 39 -5 120 16 103
|
||||
25 117 26 259 20 83 -3 204 -10 270 -15 88 -7 123 -6 132 2 15 15 10 22 -54
|
||||
75 -54 44 -68 50 -76 30z"/>
|
||||
<path d="M14225 636 c-50 -16 -105 -44 -105 -54 0 -5 5 -13 11 -19 8 -8 26 -4
|
||||
66 14 42 19 63 24 96 19 81 -12 92 -12 92 4 0 18 -60 49 -95 49 -14 0 -43 -6
|
||||
-65 -13z"/>
|
||||
<path d="M12913 550 c-25 -10 -31 -36 -10 -43 6 -2 27 0 45 4 50 11 137 -5
|
||||
227 -41 90 -37 190 -47 190 -20 0 10 -18 18 -55 26 -31 6 -94 26 -140 44 -91
|
||||
34 -214 49 -257 30z"/>
|
||||
<path d="M13688 477 c-32 -18 -58 -38 -58 -45 0 -25 30 -24 74 2 54 31 65 32
|
||||
117 6 41 -21 59 -20 59 5 0 16 -89 65 -117 65 -10 -1 -44 -15 -75 -33z"/>
|
||||
<path d="M4455 444 c-173 -59 -243 -69 -489 -68 -120 1 -326 7 -459 15 -276
|
||||
15 -325 8 -418 -56 -68 -47 -115 -58 -205 -50 -65 6 -74 5 -74 -9 0 -23 41
|
||||
-36 113 -36 80 0 124 13 184 53 94 65 131 69 433 50 302 -19 671 -13 770 11
|
||||
36 9 116 33 178 54 83 27 112 40 110 52 -5 24 -37 21 -143 -16z"/>
|
||||
<path d="M4884 466 c-8 -21 3 -36 26 -36 26 0 187 -57 327 -115 187 -77 305
|
||||
-72 439 20 59 40 143 75 181 75 7 0 13 9 13 20 0 16 -7 20 -32 20 -44 -1 -135
|
||||
-39 -195 -82 -62 -46 -112 -61 -198 -62 -61 0 -84 6 -185 48 -130 54 -289 111
|
||||
-338 121 -24 5 -33 3 -38 -9z"/>
|
||||
<path d="M1985 460 c-11 -18 5 -30 40 -30 29 0 39 -6 59 -37 14 -21 34 -67 46
|
||||
-103 25 -75 35 -89 52 -72 15 15 0 78 -39 160 -36 77 -54 92 -107 92 -25 0
|
||||
-48 -4 -51 -10z"/>
|
||||
<path d="M12580 459 c-30 -5 -89 -11 -130 -15 -86 -6 -106 -14 -96 -39 5 -13
|
||||
14 -16 39 -11 17 3 83 10 146 16 63 5 119 14 124 19 13 13 1 41 -15 40 -7 -1
|
||||
-38 -6 -68 -10z"/>
|
||||
<path d="M9438 362 c-23 -27 -22 -27 352 -63 120 -12 180 -4 180 22 0 17 -8
|
||||
19 -80 19 -45 0 -140 7 -213 15 -195 21 -227 22 -239 7z"/>
|
||||
<path d="M11600 348 c-70 -15 -117 -18 -270 -16 -179 3 -185 2 -185 -17 0 -19
|
||||
9 -20 155 -28 136 -7 171 -6 285 13 126 21 165 36 151 59 -9 14 -33 12 -136
|
||||
-11z"/>
|
||||
<path d="M10525 333 c-172 -3 -187 -7 -183 -36 3 -20 7 -22 63 -18 33 2 112 6
|
||||
175 10 109 6 115 7 118 29 3 16 -1 21 -15 20 -10 -1 -81 -4 -158 -5z"/>
|
||||
<path d="M6771 294 c-30 -8 -81 -26 -112 -40 -59 -27 -114 -29 -217 -8 -30 6
|
||||
-34 4 -30 -12 2 -12 21 -25 53 -37 64 -22 142 -16 216 17 95 44 182 59 297 52
|
||||
141 -8 328 -32 507 -64 135 -24 174 -27 385 -27 194 0 246 4 300 18 120 33
|
||||
130 37 130 58 0 24 -9 24 -92 0 -179 -51 -416 -52 -723 -2 -369 61 -602 75
|
||||
-714 45z"/>
|
||||
<path d="M2563 280 c-12 -5 -24 -17 -27 -28 -8 -25 -44 -32 -163 -32 -77 0
|
||||
-95 -3 -100 -16 -3 -9 0 -20 8 -25 18 -11 104 -11 194 1 57 7 74 13 90 34 12
|
||||
14 29 26 38 26 23 0 34 29 16 41 -17 11 -27 10 -56 -1z"/>
|
||||
</g>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 28 KiB |
|
|
@ -1,10 +1,37 @@
|
|||
The `dump-thing-server` documentation
|
||||
=====================================
|
||||
Dump Things Service Documentation
|
||||
===================================
|
||||
|
||||
HERE BE CONTENT...
|
||||
.. image:: https://badge.fury.io/py/dump-things-service.svg
|
||||
:target: https://pypi.python.org/pypi/dump-things-service/
|
||||
:alt: PyPI version
|
||||
|
||||
*Dump Things Service* is a FastAPI-based HTTP service for storing and retrieving
|
||||
schema-conform linked-data records. It supports multiple storage backends,
|
||||
flexible authentication sources, and a curation workflow for distributed data
|
||||
acquisition.
|
||||
|
||||
.. toctree::
|
||||
:maxdepth: 2
|
||||
:caption: User Guide
|
||||
|
||||
introduction
|
||||
installation
|
||||
quickstart
|
||||
configuration
|
||||
backends
|
||||
authentication
|
||||
endpoints
|
||||
commands
|
||||
|
||||
.. toctree::
|
||||
:maxdepth: 1
|
||||
:caption: Developer Reference
|
||||
|
||||
changelog
|
||||
|
||||
Indices and tables
|
||||
==================
|
||||
|
||||
* :ref:`genindex`
|
||||
* :ref:`modindex`
|
||||
* :ref:`search`
|
||||
|
|
|
|||
49
docs/installation.rst
Normal file
49
docs/installation.rst
Normal file
|
|
@ -0,0 +1,49 @@
|
|||
Installation
|
||||
============
|
||||
|
||||
Requirements
|
||||
------------
|
||||
|
||||
- Python 3.11 or later
|
||||
- ``sqlite3`` (if sqlite-backends are used)
|
||||
|
||||
Installing from PyPI
|
||||
---------------------
|
||||
|
||||
The service is available on PyPI and can be installed with ``pip``:
|
||||
|
||||
.. code-block:: bash
|
||||
|
||||
pip install dump-things-service
|
||||
|
||||
Installing for Development
|
||||
---------------------------
|
||||
|
||||
Clone the repository and install the package with all development dependencies
|
||||
using `hatch <https://hatch.pypa.io/>`_:
|
||||
|
||||
.. code-block:: bash
|
||||
|
||||
git clone https://codeberg.org/datalink/dump-things-server.git
|
||||
cd dump-things-server
|
||||
pip install hatch
|
||||
hatch env create
|
||||
|
||||
Building the Documentation
|
||||
---------------------------
|
||||
|
||||
The documentation dependencies are declared in the ``docs`` optional-dependency
|
||||
group. To install them and build the HTML documentation:
|
||||
|
||||
.. code-block:: bash
|
||||
|
||||
pip install "dump-things-service[docs]"
|
||||
make -C docs html
|
||||
|
||||
Alternatively, if you are using ``hatch`` execute the following command from the project root:
|
||||
|
||||
.. code-block:: bash
|
||||
|
||||
hatch run docs:build
|
||||
|
||||
The generated HTML will be placed in ``docs/_build/html/``.
|
||||
277
docs/introduction.rst
Normal file
277
docs/introduction.rst
Normal file
|
|
@ -0,0 +1,277 @@
|
|||
Introduction
|
||||
============
|
||||
|
||||
What is Dump Things Service?
|
||||
-----------------------------
|
||||
|
||||
*Dump Things Service* is a central component of a system that allows cooperative
|
||||
authoring of linked data (*linked data* refers to data that
|
||||
is structured according to a schema which is defined in
|
||||
`LinkML <https://linkml.io>`_). It supports a workflow where authors submit records
|
||||
into inboxes and curators move records from inboxes to a curated area.
|
||||
The curated area holds the "official", high-quality, content.
|
||||
|
||||
A curation workflow moves proposed changes from the inboxes into the
|
||||
curated area. Curators inspect proposed changes, accept, modify, or reject them.
|
||||
Curation can be performed manually or by automated agents. The service provides
|
||||
tools and APIs to support both (all functionality is exposed via an HTTP API).
|
||||
|
||||
|
||||
The main elements
|
||||
-----------------
|
||||
|
||||
A Dump Things Service instance (usually a process that runs on a server)
|
||||
supports multiple *Collections*. Each collection has a name and an associated
|
||||
schema. All records that are stored in the collection must conform to a
|
||||
schema that is associated with the collection. Every records has at least a
|
||||
persistent identifier (PID) that is a globally unique identifier (more about
|
||||
schemas below).
|
||||
|
||||
|
||||
Clients that work with records on a Dump Things Service usually have one or
|
||||
more of the following roles:
|
||||
|
||||
- Readers: users that read data from the curated area of a collection.
|
||||
- Authors: users that can submit new records for inclusion into the curated
|
||||
area of a collection. Their submissions are stored in author-specific inboxes.
|
||||
Authors can usually also read data from the collection.
|
||||
- Curators: users that can curate the collection. Curators have read and write
|
||||
access to the curated area of a collection. They also have read and write
|
||||
access to all inboxes. Curators usually move records from inboxes to the
|
||||
curated area, probably with editorial changes.
|
||||
|
||||
|
||||
Besides an API that allows access to records, there is another API that
|
||||
allows access to the configuration of a Dump Things Service and permits
|
||||
dynamic configuration of an Dump Things Service instance at runtime.
|
||||
Entities with an *Admin* role can use this API to change the configuration
|
||||
of a Dump Things Service at runtime.
|
||||
|
||||
|
||||
Interaction with Dump Things Service
|
||||
------------------------------------
|
||||
|
||||
Depending on the role of a user, there are different interaction patterns with
|
||||
a Dump Things Service. Those are: *Reading*, *Writing*, and *Curating*.
|
||||
|
||||
|
||||
Reading
|
||||
.......
|
||||
|
||||
The most elementary interaction is to read records from
|
||||
a collection. Depending on the role of a user, reading will either return only
|
||||
records from the curated area or records from the curated area and from the
|
||||
user's inbox.
|
||||
|
||||
A user with read-access for a collection will be able to retrieve any record
|
||||
that is stored in the curated area of a collection.
|
||||
|
||||
.. image:: images/dts-reader.svg
|
||||
:alt: Reader access to curated area
|
||||
:align: center
|
||||
|
||||
A user with read- and write-access for a collection, i.e., an author, will be
|
||||
able to retrieve any record that is stored in the curated area of a collection
|
||||
or in the inbox of the user. If records from the curated area and the inbox
|
||||
have identical PIDs, the record from the inbox will be returned.
|
||||
|
||||
.. image:: images/dts-authors-reading.svg
|
||||
:alt: Reading access of authors to curated area and inbox
|
||||
:align: center
|
||||
|
||||
|
||||
Writing
|
||||
.......
|
||||
|
||||
A user with write-access for a collection, i.e., an author, can submit new
|
||||
records to the collection. If the records confirm the schema of the collection,
|
||||
they will be stored in the inbox of the user. Note: write-access does not allow
|
||||
to move records from the inbox to the curated area.
|
||||
|
||||
.. image:: images/dts-author-write.svg
|
||||
:alt: Authors write to their "personal" inboxes
|
||||
:align: center
|
||||
|
||||
|
||||
|
||||
Curating
|
||||
.........
|
||||
|
||||
The purpose of curating is to moves proposed changes from the inboxes of a
|
||||
collection to the curated area of the collection.
|
||||
|
||||
Curator-rights allow a user to read, write,
|
||||
and delete records from the curated area directly. The user can also read,
|
||||
write, and delete records from any inbox of the collection.
|
||||
|
||||
.. image:: images/dts-curate.svg
|
||||
:alt: Curator access to curated area and inboxes
|
||||
:align: center
|
||||
|
||||
|
||||
Curators use the API to inspect proposed changes, accept, modify, or reject
|
||||
them. The client library `dump-things-pyclient` (see :ref:`dump-things-pyclient`)
|
||||
provides tools that support curation processes.
|
||||
|
||||
|
||||
Administration
|
||||
..............
|
||||
|
||||
Administrators do not operate on records. Administrators can inspect and modify
|
||||
the configuration of a Dump Things Service instance at runtime. An administrator
|
||||
can modify three configuration elements:
|
||||
|
||||
1. Collections: add, remove, or modify collections.
|
||||
2. Tokens: add, remove, or modify tokens.
|
||||
3. Administrator token: add. remove, or modify administrator tokens.
|
||||
|
||||
|
||||
|
||||
Records and Schemas
|
||||
-------------------
|
||||
|
||||
Records that are stored in a collection are instances of the classes that are
|
||||
defined in the schema of the collection. The schema can be freely defined,
|
||||
but all record-classes, i.e., classes whose instances are can be stored in a
|
||||
collection, must be a subclass of the class ``Thing``, which is
|
||||
defined in the schema `things-schema`_. The crucial property of the class
|
||||
``Thing`` is the persistent identifier (PID). The PID is an **IRI**
|
||||
(Internationalized Resource Identifier), a globally unique
|
||||
identifier that identifies the record.
|
||||
|
||||
|
||||
.. _things-schema: https://concepts.datalad.org/s/things/v2
|
||||
|
||||
|
||||
|
||||
.. _dump-things-pyclient:
|
||||
The dump-things ecosystem
|
||||
-------------------------
|
||||
|
||||
Dump Things Service is part of a larger ecosystem of tools and services that
|
||||
support the shared authoring and curation of linked data. Currently there are
|
||||
two other components that are built to work with it:
|
||||
|
||||
- shacl-vue: a web application that allows users to view and edit linked data
|
||||
records stored in a Dump Things Service instance.
|
||||
|
||||
- dump-things-pyclient: a Python client library that simplifies authoring of
|
||||
Dump Things clients in Python. It also provides a CLI-command to interact
|
||||
with a Dump Things Service from a shell.
|
||||
|
||||
|
||||
|
||||
Dump Things Structure
|
||||
---------------------
|
||||
|
||||
Workflow
|
||||
........
|
||||
|
||||
Dump Things Service was built to support cooperative authoring of linked data.
|
||||
It supports a workflow where authors submit records into inboxes and curators
|
||||
move records from inboxes to a curated area.
|
||||
|
||||
|
||||
Dump Things Service supports distributed data acquisition while still
|
||||
controlling the quality of collection data. This is done by distinguishing
|
||||
between two areas for records:
|
||||
|
||||
- **Curated area**: represents the "official", high-quality, collection content.
|
||||
- **Incoming area** (user-specific inboxes): where users propose new records or
|
||||
changes to existing records.
|
||||
|
||||
A curation workflow moves proposed changes from the incoming area into the
|
||||
curated area. Curators — entities with specific privileges — can inspect
|
||||
proposed changes, accept, modify, or reject them. Curation can be performed by
|
||||
persons or by automated agents. The service provides tools and APIs to support
|
||||
both options.
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
Collections
|
||||
...........
|
||||
|
||||
Dump Things Service supports on the highest level multiple *collections*. Each
|
||||
collection has a name and an associated schema. Collections have inboxes for
|
||||
all authors and a curated area.
|
||||
|
||||
|
||||
|
||||
|
||||
User groups
|
||||
...........
|
||||
|
||||
|
||||
We distinguish he following user groups:
|
||||
|
||||
- Readers: user that read data from a collection.
|
||||
- Authors: users that can submit new records to a collection. Authors can
|
||||
usually also read data from the collection.
|
||||
- Curators: users that can curate the collection. Curators have read and write
|
||||
access to the curated area of a collection. They also have read and write
|
||||
access to all inboxes. Curators usually move records from inboxes to the
|
||||
curated area, probably with editorial changes.
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
*Dump Things Service* is an implementation of a service that allows storing
|
||||
and retrieving linked data. It builds the backend for linked-data applications.
|
||||
Linked-data applications can retrieve data as JSON records or as
|
||||
`TTL <https://www.w3.org/TR/turtle/>`_ (Turtle) documents from a Dump Things
|
||||
Service instance. Multiple *Dump Things Service* instances currently serve as
|
||||
backends for `shacl-vue <https://shacl-vue.psychoinformatics.de/>`_.
|
||||
|
||||
All data items stored on a *Dump Things Service* must be structured according to
|
||||
a defined schema. Schemata are defined in `LinkML <https://linkml.io>`_.
|
||||
The service supports multiple *collections*. Each data item is stored in a
|
||||
collection. Each collection has a name and an associated schema. The service
|
||||
dynamically reads the respective schemata and creates validation code for data
|
||||
items. This ensures that only items that adhere to the schema can be stored in
|
||||
the respective collection.
|
||||
|
||||
Curated Area and Incoming Area
|
||||
--------------------------------
|
||||
|
||||
The *Dump Things Service* supports distributed data acquisition while still
|
||||
controlling the quality of collection data. This is done by distinguishing
|
||||
between two areas:
|
||||
|
||||
- **Curated area**: represents the "official", high-quality, collection content.
|
||||
- **Incoming area** (user-specific inboxes): where users propose new records or
|
||||
changes to existing records.
|
||||
|
||||
A curation workflow moves proposed changes from the incoming area into the
|
||||
curated area. Curators — entities with specific privileges — can inspect
|
||||
proposed changes, accept, modify, or reject them. Curation can be performed by
|
||||
persons or by automated agents. The service provides tools and APIs to support
|
||||
both options.
|
||||
|
||||
Tokens and Permissions
|
||||
-----------------------
|
||||
|
||||
To submit a record to a collection, a **token** is required. Tokens carry:
|
||||
|
||||
- Read and write permissions for the incoming areas of collections.
|
||||
- Read permissions for the curated area of a collection.
|
||||
- A submitter ID that is annotated to each submitted record.
|
||||
- A token-specific **zone** in the incoming area.
|
||||
|
||||
Multiple tokens can share the same zone, allowing multiple submitters to work
|
||||
together on the same incoming area.
|
||||
|
||||
Key Features
|
||||
-------------
|
||||
|
||||
- **Multiple storage backends**: ``record_dir``, ``record_dir+stl``,
|
||||
``sqlite``, and ``sqlite+stl``.
|
||||
- **Flexible authentication**: config-file-based tokens and
|
||||
`Forgejo <https://forgejo.org/>`_-based authentication.
|
||||
- **Audit logs**: track time, content, author, and curator for every change.
|
||||
- **LinkML-based validation**: ensure data conforms to a defined schema.
|
||||
99
docs/quickstart.rst
Normal file
99
docs/quickstart.rst
Normal file
|
|
@ -0,0 +1,99 @@
|
|||
Quick Start
|
||||
===========
|
||||
|
||||
This guide walks you through starting the service with or without an initial
|
||||
configuration.
|
||||
|
||||
The service is started with the command ``dump-things-service <storage root>``.
|
||||
``<storage root>`` is a directory that will be used to store records for all
|
||||
collections as well as the persisted configuration of the service.
|
||||
|
||||
|
||||
1. Start the Service
|
||||
---------------------
|
||||
|
||||
On an empty storage root
|
||||
........................
|
||||
|
||||
If the directory ``<storage root>`` does not contain a persisted configuration,
|
||||
for example, because it is empty, the service will start with an empty configuration.
|
||||
In this case a *bootstrap* administrator token has to be provided via the option
|
||||
``--admin-token-hash`` (otherwise it
|
||||
would not be possible to modify the configuration are runtime because no
|
||||
administrator token has been configured).
|
||||
|
||||
The following command starts the server on ``https://127.0.0.1:8000/`` with the
|
||||
bootstrap administrator token ``mysecret``:
|
||||
|
||||
.. code-block:: bash
|
||||
|
||||
dump-things-service /path/to/storage --host 127.0.0.1 --port 8000 --admin-token-hash 652c7dc687d98c9889304ed2e408c74b611e86a40caa51c4b43f1dd5913c5cd0
|
||||
|
||||
|
||||
**Note**: an administrator token hash can be created via the command
|
||||
``dump-things-hash-token <plain-text token>``.
|
||||
|
||||
**Note**: do not use the administrator token hash from the example above in your
|
||||
installations, as it is publicly visible.
|
||||
|
||||
|
||||
Alternatively to setting ``--admin-token-hash``, set the environment variable
|
||||
``DTS_ADMIN_TOKEN`` to the plain-text bootstrap administrator token, before starting the service:
|
||||
|
||||
.. code-block:: bash
|
||||
|
||||
export DTS_ADMIN_TOKEN=mysecret
|
||||
dump-things-service /path/to/storage
|
||||
|
||||
|
||||
**Note**: do not use ``mysecret`` in your installations as it is publicly visible.
|
||||
Use a strong secret instead.
|
||||
|
||||
|
||||
On an empty storage root, initially configured via config-file
|
||||
..............................................................
|
||||
|
||||
If the storage root does not contain a persisted configuration, the service will
|
||||
look for a configuration file at ``<storage root>/.dumpthings.yaml``, unless
|
||||
``--ignore-default-config-file`` or
|
||||
``-c/--config <config file>`` is provided.
|
||||
|
||||
If ``--ignore-default-config`` is
|
||||
provided, the server will ignore a configuration file at
|
||||
``<storage root>/.dumpthings.yaml``.
|
||||
|
||||
If ``-c/--config <config file>`` is passed
|
||||
on the command line, the server will
|
||||
try to read the configuration from ``<config file>``. Once the configuration is
|
||||
read, it will be persisted in the storage root.
|
||||
|
||||
See :doc:`configuration` for details on the configuration file format.
|
||||
|
||||
**Note**: on subsequent restarts, the service will ignore the configuration files
|
||||
and use the persisted configuration.
|
||||
|
||||
|
||||
2. Explore the API
|
||||
------------------
|
||||
|
||||
Once the service is running, open your browser at
|
||||
``http://127.0.0.1:8000/docs`` to explore the interactive Swagger UI for all
|
||||
available endpoints.
|
||||
|
||||
For a full description of all endpoints see :doc:`endpoints`.
|
||||
|
||||
|
||||
3. Configure the service
|
||||
------------------------
|
||||
|
||||
The service configuration can be modified at runtime via the administration
|
||||
endpoints. See :doc:`endpoints` for details.
|
||||
|
||||
An easy way to configure a running service is to use the command
|
||||
``dump-things-upload-configuration`` to upload the content of a
|
||||
configuration file via the administration endpoints (see :doc:`configuration`).
|
||||
|
||||
In combination with the command ``dump-things-download-config`` this command
|
||||
can be used to "clone" an identically configured service instance (the cloned
|
||||
service instance will have no records initially, but those can be cloned
|
||||
from the original service instance as well).
|
||||
46
docs/roman_numerals.py
Normal file
46
docs/roman_numerals.py
Normal file
|
|
@ -0,0 +1,46 @@
|
|||
"""Compatibility shim for Sphinx's LaTeX writer.
|
||||
|
||||
Some environments provide a broken or incomplete ``roman-numerals`` package
|
||||
that does not expose the ``roman_numerals`` module expected by Sphinx. The
|
||||
LaTeX writer only needs a small subset of the functionality: a ``RomanNumeral``
|
||||
class with ``to_lowercase()``.
|
||||
"""
|
||||
|
||||
from __future__ import annotations
|
||||
|
||||
|
||||
class RomanNumeral:
|
||||
def __init__(self, value: int) -> None:
|
||||
if not isinstance(value, int):
|
||||
raise TypeError('RomanNumeral expects an integer')
|
||||
if value < 1:
|
||||
raise ValueError('RomanNumeral expects a positive integer')
|
||||
self.value = value
|
||||
|
||||
def to_lowercase(self) -> str:
|
||||
return _to_roman(self.value).lower()
|
||||
|
||||
|
||||
def _to_roman(value: int) -> str:
|
||||
numerals = [
|
||||
(1000, 'M'),
|
||||
(900, 'CM'),
|
||||
(500, 'D'),
|
||||
(400, 'CD'),
|
||||
(100, 'C'),
|
||||
(90, 'XC'),
|
||||
(50, 'L'),
|
||||
(40, 'XL'),
|
||||
(10, 'X'),
|
||||
(9, 'IX'),
|
||||
(5, 'V'),
|
||||
(4, 'IV'),
|
||||
(1, 'I'),
|
||||
]
|
||||
result = []
|
||||
remaining = value
|
||||
for arabic, roman in numerals:
|
||||
while remaining >= arabic:
|
||||
result.append(roman)
|
||||
remaining -= arabic
|
||||
return ''.join(result)
|
||||
|
|
@ -56,6 +56,7 @@ docs = [
|
|||
"sphinx",
|
||||
"sphinx_rtd_theme",
|
||||
"sphinx_autodoc_typehints",
|
||||
"myst-parser",
|
||||
]
|
||||
|
||||
[project.scripts]
|
||||
|
|
@ -108,6 +109,7 @@ extra-dependencies = [
|
|||
"sphinx",
|
||||
"sphinx_rtd_theme",
|
||||
"sphinx-autodoc-typehints",
|
||||
"myst-parser",
|
||||
]
|
||||
[tool.hatch.envs.docs.scripts]
|
||||
build = [
|
||||
|
|
|
|||
Loading…
Reference in a new issue