What changed, and why it matters
This commit is purely a documentation update for the Trezor firmware repository. It reorganizes existing documentation, adds new documentation for the Trezor-Host Protocol (THP), and moves Bitcoin signing and protocol v1 docs to new locations. No executable code, firmware logic, or security-sensitive behavior was changed.
No security action required. This is a documentation reorganization and addition. Reviewers may optionally verify that the new THP documentation accurately reflects implemented behavior, but the commit itself introduces no vulnerability.
Security signals we found
No strong security signals were identified.
Evidence from the diff
The commit b12a0109131b23498a76464476355815b9e451cd in trezor/trezor-firmware is a documentation-only change. It adds new markdown files under docs/common/thp/ describing the Trezor-Host Protocol, moves docs/common/communication/* to docs/common/protocol_v1/, and updates docs/SUMMARY.md and docs/common/index.md accordingly. The diff shows only markdown/SVG additions, deletions, and renames; no source code, protobuf definitions, build scripts, or firmware behavior is modified. The commit message explicitly states ‘docs: add thp documentation’ and ‘[no changelog]’.
Changed components
docs/common/thp/index.mddocs/common/thp/specification.mddocs/common/thp/sessions.mddocs/common/protocol_v1/index.mddocs/common/protocol_v1/sessions.mddocs/common/protocol_v1/passphrase.mddocs/common/protocol_v1/passphrase-redesign-migration.mddocs/common/bitcoin-signing.mddocs/SUMMARY.mddocs/common/index.mdcommon/protob/protocol.mdInspect captured patch +3508 / −874
diff --git a/common/protob/protocol.md b/common/protob/protocol.md
index 14158fa8..ff5ba651 100644
--- a/common/protob/protocol.md
+++ b/common/protob/protocol.md
@@ -1,6 +1,6 @@
# Trezor Protocol
-## version 1
+## Version 1 (Codec v1)
Messages are sent in packets of 64 bytes.
diff --git a/docs/SUMMARY.md b/docs/SUMMARY.md
index 05b6149b..5890cb66 100644
--- a/docs/SUMMARY.md
+++ b/docs/SUMMARY.md
@@ -31,11 +31,14 @@
- [Python](python/index.md)
- [trezorlib](python/trezorlib.md)
- [Common](common/index.md)
- - [Communication](common/communication/index.md)
- - [Sessions](common/communication/sessions.md)
- - [Passphrase](common/communication/passphrase.md)
- - [Migration](common/communication/passphrase-redesign-migration.md)
- - [Bitcoin signing](common/communication/bitcoin-signing.md)
+ - [Protocol V1](common/protocol_v1/index.md)
+ - [Sessions](common/protocol_v1/sessions.md)
+ - [Passphrase](common/protocol_v1/passphrase.md)
+ - [Migration](common/protocol_v1/passphrase-redesign-migration.md)
+ - [Trezor-Host protocol](common/thp/index.md)
+ - [Specification](common/thp/specification.md)
+ - [Sessions](common/thp/sessions.md)
+ - [Bitcoin signing](common/bitcoin-signing.md)
- [Reproducible builds](common/reproducible-build.md)
- [Message Workflows](common/message-workflows.md)
- [External definitions](common/external-definitions.md)
diff --git a/docs/common/bitcoin-signing.md b/docs/common/bitcoin-signing.md
new file mode 100644
index 00000000..cebbd45e
--- /dev/null
+++ b/docs/common/bitcoin-signing.md
@@ -0,0 +1,509 @@
+# Bitcoin signing flow
+
+The Bitcoin signing process is one of the most complicated workflows in the Trezor
+codebase. This is because Trezor cannot store arbitrarily large transactions in memory,
+so both the input data and the results must be sent in chunks. The Protobuf messages
+cannot fully encode the data pertaining to a single transaction; instead, the data
+is spread out over multiple messages.
+
+## Overview
+
+The signing flow is initiated by a `SignTx` command. The message contains the name of
+the coin, number of inputs and outputs, and transaction metadata: version, lock time,
+and others that are required for some coins.
+
+In response, Trezor will send a number of `TxRequest` messages, asking for additional
+data from the host. The host is supposed to respond with a `TxAck` providing the
+requested data.
+
+Trezor can request the following kinds of items:
+
+* input of the transaction being signed
+* output of the transaction being signed
+* metadata of a _previous transaction_, i.e., the transaction whose UTXO is being spent
+* metadata of an _original transaction_, i.e., a transaction that is being replaced by
+ the current transaction
+* input of a previous or original transaction
+* output of a previous or original transaction
+* additional trailing data of a previous transaction
+
+As part of each `TxRequest` message, Trezor can also send a chunk of the resulting
+serialized transaction, and/or a signature of one of the inputs.
+
+The flow ends when Trezor sends a `TxRequest` with `request_type` of `TXFINISHED`.
+
+## Signing phases
+
+The following content is for reference only, and details might change in the future.
+Host code should make no assumptions about the order of the phases.
+
+The list of phases here also does not necessarily correspond to internal phase
+numbering.
+
+### Gathering info about current transaction
+
+Trezor will request all inputs and outputs of the transaction to be signed, and set up
+data structures that allow it to verify that the same data is sent in the following
+phases.
+
+In this phase, Trezor will also ask the user to confirm destination addresses,
+the transaction fee, metadata, and the total being sent. If the user confirms, we continue
+to the next phase.
+
+### Validation of input data
+
+Trezor must verify that the host does not lie about input amounts, i.e., that the
+transaction total in the first phase was calculated correctly.
+
+For this reason, Trezor will ask the host to send each input again. It will then request
+data about the referenced previous transaction: metadata, all inputs, all outputs, and
+possible trailing data. This allows Trezor to reconstruct the previous transaction and
+calculate its hash. If this hash matches the provided one, and the amount on selected
+UTXO matches the input amount, the given input is considered valid.
+
+If all internal inputs are taproot, then the verification of the previous transactions
+is skipped. This is possible because if the host provides invalid information about the
+UTXOs being spent, then the resulting taproot signatures will also be invalid.
+
+Trezor T also supports pre-signed inputs for multi-party signing. If an input has script
+type `EXTERNAL` and provides a signature, Trezor will validate the signature against the
+previous transaction in this step.
+
+### Serialization and signing
+
+Trezor will ask once again about every input and begin outputting a serialization of the
+transaction. For every legacy (non-segwit) input, it is necessary to stream the full set
+of inputs and outputs again, so that Trezor can compute the transaction digest which it
+then signs. For segwit inputs this is not necessary.
+
+When all inputs are serialized, Trezor will ask for every output, so that it can
+serialize it, fill out change addresses, and return the full transaction.
+
+Finally Trezor asks again about segwit inputs to sign them and to serialize the
+witnesses.
+
+## Old versus new data structures
+
+Originally, the `TxAck` message contained one field of type `TransactionType`. This, in
+turn, contained all the possible fields that Trezor could request:
+
+* `TransactionType` itself contains fields for all necessary metadata, plus a field
+ `extra_data` for trailing data.
+* `TransactionType.inputs` is an array of `TxInputType` objects, each of which can
+ describe either the current input, or an input of a previous transaction.
+* `TransactionType.outputs` is an array of `TxOutputType` objects, each of which can
+ describe an output of the _current_ transaction.
+* `TransactionType.bin_outputs` is an array of `TxOutputBinType` objects, each of which
+ can describe an output of a _previous_ transaction.
+
+This organization makes it practical to use the `TransactionType` for host-side storage:
+a transaction can be fully stored in one object, and in order to send a `TxAck`
+response, you only need to extract the appropriate data.
+
+The cost of this is that this organization makes it extremely unclear _which data_
+should be extracted at which points.
+
+To make the constraints more visible, a new set of data types was designed. There is a
+`TxAck<Kind>` message for every `Kind` of data. These only define the fields that are
+appropriate for that kind of request.
+
+It is possible to use both representations, as they are wire-compatible. However, we
+recommend using the new definitions for new applications.
+
+## Request types
+
+The `TxRequest` message always contains a `request_type` field, indicating which kind of
+data it wants. In addition, `request_details` specify the particular piece of data
+requested.
+
+If `request_details.tx_hash` is set, Trezor is requesting data about a specified
+previous transaction. If it is unset, Trezor wants data about current transaction.
+
+### Transaction input
+
+Trezor sets `request_type` to `TXINPUT`, and `request_details.tx_hash` is unset.
+
+`request_details.request_index` is the index of the input in the transaction: 0 is the
+first input, 1 is second, etc.
+
+**Old style:** Host must respond with a `TxAck` message. The field `tx.inputs` must be
+set to an array of one element, which describes the requested input. All other fields
+should be left unset.
+
+**New style:** Host must respond with a `TxAckInput` message. All relevant data must be
+set on `tx.input`.
+
+#### Normal (internal) inputs
+
+Usually, the user owns, and wants to sign, all inputs of the transaction. For that, the
+host must specify a derivation path for the key, and script type `SPENDADDRESS` (legacy),
+`SPENDP2SHWITNESS` (P2SH segwit), `SPENDWITNESS` (native segwit) or `SPENDTAPROOT`.
+
+#### Multisig inputs
+
+For multisig inputs, the XPUBs of all signers (including the current user) must be
+provided in the `multisig` structure. Legacy multisig uses type `SPENDMULTISIG`, P2SH
+segwit and native segwit multisig use the same type as non-multisig inputs, i.e.
+`SPENDP2SHWITNESS` or `SPENDWITNESS`.
+
+Full documentation for multisig is TBD.
+
+#### External inputs
+
+Trezor can include inputs that it will not sign, typically because they are
+owned by another party. Such inputs are of type `EXTERNAL` and the host does
+not specify a derivation path for the key, but sets the `script_pubkey` field
+to the scriptPubKey of the previous output that is being spent by the external
+input. An external input can either be *verified* or *unverified*. The amounts
+supplied to the transaction by verified external inputs are subtracted from the
+transaction total that the user is asked to confirm, whereas unverified
+external inputs are not subtracted.
+
+Verified external inputs are only supported on the Trezor T. They must either
+already have a valid signature or they must come with an ownership proof. If
+the input already has a valid signature, then the host provides the
+`script_sig` and/or `witness` fields. If the other signing party hasn't signed
+their input yet (i.e., with two Trezors, one must sign first so that the other
+can include a pre-signed input), they can instead provide a
+[SLIP-19](https://github.com/satoshilabs/slips/blob/master/slip-0019.md)
+ownership proof in the `ownership_proof` field, with optional commitment data
+in `commitment_data`.
+
+Unverified external inputs are accepted by Trezor only if
+[safety checks](https://wiki.trezor.io/Using_trezorctl_commands_with_Trezor#Safety-checks)
+are disabled on the device.
+
+### Transaction output
+
+Trezor sets `request_type` to `OUTPUT`, and `request_details.tx_hash` is unset.
+
+`request_details.request_index` is the index of the output in the transaction: 0 is the
+first input, 1 is second, etc.
+
+**Old style:** Host must respond with a `TxAck` message. The field `tx.outputs` must be
+set to an array of one element, which describes the requested output. All other fields
+should be left unset.
+
+**New style:** Host must respond with a `TxAckOutput` message. All relevant data must be
+set on `tx.output`.
+
+#### External outputs
+
+Outputs that send coins to a particular address are always of type `PAYTOADDRESS`. The
+address is sent as a string in the field `address`.
+
+#### Change outputs
+
+Outputs that send coins back to the same owner must specify a derivation path and the
+appropriate script type. If the derivation path has the same prefix as _all_ inputs, and
+a matching script type (legacy, p2sh segwit, native segwit), it is considered to be a
+change output, and its amount is subtracted from the total.
+
+`address` must not be specified in this case. It is instead derived internally from the
+provided derivation path.
+
+#### OP_RETURN outputs
+
+Outputs of type `PAYTOOPRETURN` must not specify `address` nor `address_n`, and the
+`amount` must be zero. The OP_RETURN data is sent as `op_return_data` field.
+
+### Previous transaction metadata
+
+Trezor sets `request_type` to `TXMETA`. `request_details.tx_hash` is a transaction hash,
+matching one of the current transaction inputs.
+
+**Old style:** Host must respond with a `TxAck` message. The structure `tx` must be
+filled out with relevant data, in particular, `inputs_cnt` and `outputs_cnt` must be set
+to the number of transaction inputs and outputs. Arrays `inputs`, `outputs`,
+`bin_outputs` and `extra_data` should be empty.
+
+**New style:** Host must respond with a `TxAckPrevMeta` message. All relevant data must
+be set on `tx`.
+
+#### Extra data
+
+Some coins (e.g., Zcash) contain data at the end of transaction serialization that
+Trezor does not understand. The host must indicate the length of this extra data in the
+field `extra_data_len`.
+
+To figure out which is the extra data, the host must parse the serialized previous
+transaction up to the last field understood by Trezor. In case of Zcash, that is:
+
+* version + version group ID
+* number of inputs, and every input
+* number of outputs, and every output
+* lock time
+* expiry
+
+All data after the `expiry` field is considered "extra data".
+
+### Previous transaction input
+
+Trezor sets `request_type` to `TXINPUT`. `request_details.tx_hash` is a transaction
+hash, matching one of the current transaction inputs.
+
+**Old style:** Host must respond with a `TxAck` message. The field `tx.inputs` must be
+set to an array of one element, which describes the requested input of the specified
+previous transaction. All other fields should be left unset.
+
+**New style:** Host must respond with a `TxAckPrevInput` message. All relevant data must
+be set on `tx.input`.
+
+### Previous transaction output
+
+Trezor sets `request_type` to `TXOUTPUT`. `request_details.tx_hash` is a transaction
+hash, matching one of the current transaction inputs.
+
+**Old style:** Host must respond with a `TxAck` message. The field `tx.bin_outputs` must
+be set to an array of one element, which describes the requested output of the specified
+previous transaction. All other fields should be left unset.
+
+**New style:** Host must respond with a `TxAckPrevOutput` message. All relevant data
+must be set on `tx.output`.
+
+### Previous transaction trailing data
+
+On some coins, such as Zcash, the transaction serialization can contain data not
+understood by Trezor. This data is not relevant for validation, but it must be included
+so that Trezor can correctly compute the previous transaction hash.
+
+Trezor sets `request_type` to `TXEXTRADATA`. `request_details.tx_hash` is a transaction
+hash, matching one of the current transaction inputs.
+
+`request_details.extra_data_offset` specifies the offset of the requested data from the
+_start_ of the extra data. `request_details.extra_data_length` specifies the length of
+the requested chunk.
+
+**Old style:** Host must respond with a `TxAck` message. The field `tx.extra_data` must
+contain the specified chunk, starting at the given offset and of exactly the given
+length. All other fields should be unset.
+
+**New style:** Host must respond with a `TxAckPrevExtraData` message. The chunk must be
+set to `tx.extra_data_chunk`.
+
+### Original transaction input
+
+Trezor sets `request_type` to `TXORIGINPUT`. `request_details.tx_hash` is the
+transaction hash of the original transaction.
+
+The host must respond with a `TxAckInput` message. All relevant data must be set in
+`tx.input`. The derivation path and `script_type` are mandatory for all original
+internal inputs. All original internal inputs must also be accompanied with full
+transaction signature data in the `script_sig` and/or `witness` fields.
+
+### Original transaction output
+
+Trezor sets `request_type` to `TXORIGOUTPUT`. `request_details.tx_hash` is the
+transaction hash of the original transaction.
+
+Host must respond with a `TxAckOutput` message. All relevant data must be set in
+`tx.output`. The derivation path and script type are mandatory for all original
+change-outputs.
+
+### Payment request
+
+Trezor sets `request_type` to `TXPAYMENTREQ`, and `request_details.tx_hash` is unset.
+`request_details.request_index` is the index of the payment request in the transaction:
+0 is the first payment request, 1 is second, etc.
+
+The host must respond with a `PaymentRequest` message.
+
+## Replacement transactions
+
+A replacement transaction is a transaction that uses the same inputs as one or more
+transactions which have already been signed (the original transactions). Replacement
+transactions can be used to securely bump the fee of an already signed transaction
+([BIP-125](https://github.com/bitcoin/bips/blob/master/bip-0125.mediawiki)) or to
+participate as a sender in PayJoin
+([BIP-78](https://github.com/bitcoin/bips/blob/master/bip-0078.mediawiki)). Trezor only
+supports signing of replacement transaction which do not increase the amount that the
+user is spending on external outputs. Thus when signing a replacement transaction the
+user only needs to confirm the fee modification and the original TXIDs without being
+shown any outputs, since the original external outputs must have already been confirmed
+by the user and any new external outputs can only be paid for by new external inputs.
+
+The host signals that a transaction is a replacement transaction by setting the
+`orig_hash` and `orig_index` fields for at least one `TxInput`. Trezor will then
+automatically request metadata about the original transaction and verify the original
+signatures.
+
+A replacement transaction in Trezor must satisfy the following requirements:
+
+* All inputs of the original transactions must be inputs of the replacement transaction.
+* All _external_ outputs of the original transactions must be outputs of the replacement
+ transaction.
+* The value of an external output may be decreased only if there are no new external
+ inputs. This should only be used to bump the fee if the original transaction transfers
+ the entire account balance and there is no other source available to bump the fee.
+* The replacement transaction must not increase the amount that the user is spending
+ on external outputs.
+* Original transactions must have the same effective `nLockTime` as the replacement
+ transaction.
+* The inputs and outputs of the original transactions must not be permuted in the
+ replacement transaction, but they can be interleaved with new inputs or with inputs
+ from another original transaction.
+* New `OP_RETURN` outputs cannot be added in the replacement transaction.
+
+So the replacement transaction is, for example, allowed to:
+
+* Increase the user's contribution to the mining fee by adding new inputs or decreasing
+ or removing change outputs.
+* Decrease the user's contribution to the mining fee by increasing or adding
+ change-outputs.
+* Add external inputs (PayJoin) and use them to introduce new outputs, increase the
+ original external outputs or even to increase the user's change outputs so as to
+ decrease the amount that the user is spending.
+
+## Payment requests
+
+In Trezor T a set of transaction outputs can be accompanied by a payment request.
+Multiple payment requests per transaction are also possible. A payment request is a
+message signed by a trusted party requesting payment of certain amounts to a set of
+outputs as specified in [SLIP-24](https://github.com/satoshilabs/slips/blob/master/slip-0024.md).
+The user then does not have to verify the output addresses, but only confirms the
+payment of the requested amount to the recipient.
+
+The host signals that an output belongs to a payment request by setting the
+`payment_req_index` field in the `TxOutput` message. When Trezor encounters the first
+output that has this field set to a particular index, it will ask for the payment request
+that has the given index.
+
+All outputs belonging to one payment request must be consecutive in the transaction.
+
+## Implementation notes
+
+### Pseudo-code
+
+The following is a rough outline of host-side implementation. See above for detailed
+info.
+
+```python
+transaction_bytes = ""
+signatures = [""] * len(INPUTS)
+
+def sign_tx():
+ # send initial message
+ send_message(
+ SignTx(
+ coin_name,
+ inputs_count=len(INPUTS),
+ outputs_count=len(OUTPUTS),
+ # ...fill individual metadata fields
+ )
+ )
+
+ # wait for TxAck forever, until Trezor indicates we are finished
+ while True:
+ msg = receive_message()
+
+ # extract data first
+ extract_streamed_data(msg.serialized)
+
+ if msg.request_type == TXFINISHED:
+ # we are done
+ break
+
+ if msg.details.tx_hash is not None:
+ # Trezor requires data about some previous transaction
+ send_response_prev(msg.request_type, msg.details)
+ else:
+ # Trezor requires data about this transaction
+ send_response_current(msg.request_type, msg.details)
+
+def extract_streamed_data(ser: TxRequestSerializedType):
+ global transaction_bytes, signatures
+ # append serialized data to what we got so far
+ transaction_bytes += ser.serialized_tx
+ if ser.signature_index is not None:
+ # read the signature
+ signatures[ser.signature_index] = ser.signature
+
+def send_response_prev(request_type: RequestType, details: TxRequestDetailsType):
+ prev_tx = get_prev_tx(details.tx_hash)
+ if request_type == TXINPUT:
+ send_prev_input(prev_tx.inputs[details.request_index])
+ elif request_type == TXOUTPUT:
+ send_prev_output(prev_tx.outputs[details.request_index])
+ elif request_type == TXMETA:
+ send_prev_metadata(prev_tx)
+ elif request_type == TXEXTRADATA:
+ offset = details.extra_data_offset
+ length = details.extra_data_length
+ extra_data_chunk = prev_tx.extra_data[offset : offset + length]
+ send_prev_extra_data(extra_data_chunk)
+
+def send_response_current(request_type: RequestType, details: TxRequestDetailsType):
+ if request_type == TXINPUT:
+ send_input(INPUTS[details.request_index])
+ elif request_type == TXOUTPUT:
+ send_output(OUTPUTS[details.request_index])
+```
+
+### Wire compatibility
+
+The new definitions are structured so that the Protobuf binary encoded form can be
+decoded into both representations. This means that the host can encode data in the old
+representation, and Trezor will successfully and correctly decode it into the new one.
+
+This is done by reusing field IDs as appropriate, and taking advantage of the fact that
+Protobuf encodes arrays as a sequence of the same field repeated a number of times.
+
+For example, here is a part of the `TxAck` definition:
+
+```protobuf
+message TxAck {
+ optional TransactionType tx = 1;
+
+ message TransactionType {
+ // ... some fields omitted ...
+ repeated TxInputType inputs = 2;
+ // ... some fields omitted ...
+
+ message TxInputType {
+ repeated uint32 address_n = 1;
+ // ... some fields omitted ...
+ optional uint64 amount = 8;
+ // ... some fields omitted ...
+ }
+ }
+}
+```
+
+A message carrying these fields would look like this:
+
+```
+FIELD 1 (type NESTED):
+ FIELD 2 (type NESTED):
+ FIELD 1 (type int): 0x8000002c
+ FIELD 1 (type int): 0x80000000
+ FIELD 1 (type int): 0x80000000
+ FIELD 1 (type int): 0
+ FIELD 1 (type int): 0
+ FIELD 8 (type int): 1234567
+```
+
+We can see that this is identical as if the type definition looked as follows; indeed,
+we only renamed the types, removed some fields, and set some `optional` or `repeated`
+to `required` instead.
+
+```protobuf
+message TxAckInput {
+ required TxAckInputWrapper tx = 1;
+
+ message TxAckInputWrapper {
+ required TxInput input = 2; // the field is now required instead of repeated
+
+ message TxInput {
+ repeated uint32 address_n = 1;
+ required uint64 amount = 8;
+ }
+ }
+}
+```
+
+A caveat of this approach is that this introduces invisible dependencies: `TxInput` and
+`PrevInput` fold into the same old-style `TxInputType`, so adding new fields must be
+done carefully.
+
+We expect to gradually deprecate the `TransactionType`. At that point, the new-style
+types will be fully independent.
diff --git a/docs/common/communication/bitcoin-signing.md b/docs/common/communication/bitcoin-signing.md
deleted file mode 100644
index cebbd45e..00000000
--- a/docs/common/communication/bitcoin-signing.md
+++ /dev/null
@@ -1,509 +0,0 @@
-# Bitcoin signing flow
-
-The Bitcoin signing process is one of the most complicated workflows in the Trezor
-codebase. This is because Trezor cannot store arbitrarily large transactions in memory,
-so both the input data and the results must be sent in chunks. The Protobuf messages
-cannot fully encode the data pertaining to a single transaction; instead, the data
-is spread out over multiple messages.
-
-## Overview
-
-The signing flow is initiated by a `SignTx` command. The message contains the name of
-the coin, number of inputs and outputs, and transaction metadata: version, lock time,
-and others that are required for some coins.
-
-In response, Trezor will send a number of `TxRequest` messages, asking for additional
-data from the host. The host is supposed to respond with a `TxAck` providing the
-requested data.
-
-Trezor can request the following kinds of items:
-
-* input of the transaction being signed
-* output of the transaction being signed
-* metadata of a _previous transaction_, i.e., the transaction whose UTXO is being spent
-* metadata of an _original transaction_, i.e., a transaction that is being replaced by
- the current transaction
-* input of a previous or original transaction
-* output of a previous or original transaction
-* additional trailing data of a previous transaction
-
-As part of each `TxRequest` message, Trezor can also send a chunk of the resulting
-serialized transaction, and/or a signature of one of the inputs.
-
-The flow ends when Trezor sends a `TxRequest` with `request_type` of `TXFINISHED`.
-
-## Signing phases
-
-The following content is for reference only, and details might change in the future.
-Host code should make no assumptions about the order of the phases.
-
-The list of phases here also does not necessarily correspond to internal phase
-numbering.
-
-### Gathering info about current transaction
-
-Trezor will request all inputs and outputs of the transaction to be signed, and set up
-data structures that allow it to verify that the same data is sent in the following
-phases.
-
-In this phase, Trezor will also ask the user to confirm destination addresses,
-the transaction fee, metadata, and the total being sent. If the user confirms, we continue
-to the next phase.
-
-### Validation of input data
-
-Trezor must verify that the host does not lie about input amounts, i.e., that the
-transaction total in the first phase was calculated correctly.
-
-For this reason, Trezor will ask the host to send each input again. It will then request
-data about the referenced previous transaction: metadata, all inputs, all outputs, and
-possible trailing data. This allows Trezor to reconstruct the previous transaction and
-calculate its hash. If this hash matches the provided one, and the amount on selected
-UTXO matches the input amount, the given input is considered valid.
-
-If all internal inputs are taproot, then the verification of the previous transactions
-is skipped. This is possible because if the host provides invalid information about the
-UTXOs being spent, then the resulting taproot signatures will also be invalid.
-
-Trezor T also supports pre-signed inputs for multi-party signing. If an input has script
-type `EXTERNAL` and provides a signature, Trezor will validate the signature against the
-previous transaction in this step.
-
-### Serialization and signing
-
-Trezor will ask once again about every input and begin outputting a serialization of the
-transaction. For every legacy (non-segwit) input, it is necessary to stream the full set
-of inputs and outputs again, so that Trezor can compute the transaction digest which it
-then signs. For segwit inputs this is not necessary.
-
-When all inputs are serialized, Trezor will ask for every output, so that it can
-serialize it, fill out change addresses, and return the full transaction.
-
-Finally Trezor asks again about segwit inputs to sign them and to serialize the
-witnesses.
-
-## Old versus new data structures
-
-Originally, the `TxAck` message contained one field of type `TransactionType`. This, in
-turn, contained all the possible fields that Trezor could request:
-
-* `TransactionType` itself contains fields for all necessary metadata, plus a field
- `extra_data` for trailing data.
-* `TransactionType.inputs` is an array of `TxInputType` objects, each of which can
- describe either the current input, or an input of a previous transaction.
-* `TransactionType.outputs` is an array of `TxOutputType` objects, each of which can
- describe an output of the _current_ transaction.
-* `TransactionType.bin_outputs` is an array of `TxOutputBinType` objects, each of which
- can describe an output of a _previous_ transaction.
-
-This organization makes it practical to use the `TransactionType` for host-side storage:
-a transaction can be fully stored in one object, and in order to send a `TxAck`
-response, you only need to extract the appropriate data.
-
-The cost of this is that this organization makes it extremely unclear _which data_
-should be extracted at which points.
-
-To make the constraints more visible, a new set of data types was designed. There is a
-`TxAck<Kind>` message for every `Kind` of data. These only define the fields that are
-appropriate for that kind of request.
-
-It is possible to use both representations, as they are wire-compatible. However, we
-recommend using the new definitions for new applications.
-
-## Request types
-
-The `TxRequest` message always contains a `request_type` field, indicating which kind of
-data it wants. In addition, `request_details` specify the particular piece of data
-requested.
-
-If `request_details.tx_hash` is set, Trezor is requesting data about a specified
-previous transaction. If it is unset, Trezor wants data about current transaction.
-
-### Transaction input
-
-Trezor sets `request_type` to `TXINPUT`, and `request_details.tx_hash` is unset.
-
-`request_details.request_index` is the index of the input in the transaction: 0 is the
-first input, 1 is second, etc.
-
-**Old style:** Host must respond with a `TxAck` message. The field `tx.inputs` must be
-set to an array of one element, which describes the requested input. All other fields
-should be left unset.
-
-**New style:** Host must respond with a `TxAckInput` message. All relevant data must be
-set on `tx.input`.
-
-#### Normal (internal) inputs
-
-Usually, the user owns, and wants to sign, all inputs of the transaction. For that, the
-host must specify a derivation path for the key, and script type `SPENDADDRESS` (legacy),
-`SPENDP2SHWITNESS` (P2SH segwit), `SPENDWITNESS` (native segwit) or `SPENDTAPROOT`.
-
-#### Multisig inputs
-
-For multisig inputs, the XPUBs of all signers (including the current user) must be
-provided in the `multisig` structure. Legacy multisig uses type `SPENDMULTISIG`, P2SH
-segwit and native segwit multisig use the same type as non-multisig inputs, i.e.
-`SPENDP2SHWITNESS` or `SPENDWITNESS`.
-
-Full documentation for multisig is TBD.
-
-#### External inputs
-
-Trezor can include inputs that it will not sign, typically because they are
-owned by another party. Such inputs are of type `EXTERNAL` and the host does
-not specify a derivation path for the key, but sets the `script_pubkey` field
-to the scriptPubKey of the previous output that is being spent by the external
-input. An external input can either be *verified* or *unverified*. The amounts
-supplied to the transaction by verified external inputs are subtracted from the
-transaction total that the user is asked to confirm, whereas unverified
-external inputs are not subtracted.
-
-Verified external inputs are only supported on the Trezor T. They must either
-already have a valid signature or they must come with an ownership proof. If
-the input already has a valid signature, then the host provides the
-`script_sig` and/or `witness` fields. If the other signing party hasn't signed
-their input yet (i.e., with two Trezors, one must sign first so that the other
-can include a pre-signed input), they can instead provide a
-[SLIP-19](https://github.com/satoshilabs/slips/blob/master/slip-0019.md)
-ownership proof in the `ownership_proof` field, with optional commitment data
-in `commitment_data`.
-
-Unverified external inputs are accepted by Trezor only if
-[safety checks](https://wiki.trezor.io/Using_trezorctl_commands_with_Trezor#Safety-checks)
-are disabled on the device.
-
-### Transaction output
-
-Trezor sets `request_type` to `OUTPUT`, and `request_details.tx_hash` is unset.
-
-`request_details.request_index` is the index of the output in the transaction: 0 is the
-first input, 1 is second, etc.
-
-**Old style:** Host must respond with a `TxAck` message. The field `tx.outputs` must be
-set to an array of one element, which describes the requested output. All other fields
-should be left unset.
-
-**New style:** Host must respond with a `TxAckOutput` message. All relevant data must be
-set on `tx.output`.
-
-#### External outputs
-
-Outputs that send coins to a particular address are always of type `PAYTOADDRESS`. The
-address is sent as a string in the field `address`.
-
-#### Change outputs
-
-Outputs that send coins back to the same owner must specify a derivation path and the
-appropriate script type. If the derivation path has the same prefix as _all_ inputs, and
-a matching script type (legacy, p2sh segwit, native segwit), it is considered to be a
-change output, and its amount is subtracted from the total.
-
-`address` must not be specified in this case. It is instead derived internally from the
-provided derivation path.
-
-#### OP_RETURN outputs
-
-Outputs of type `PAYTOOPRETURN` must not specify `address` nor `address_n`, and the
-`amount` must be zero. The OP_RETURN data is sent as `op_return_data` field.
-
-### Previous transaction metadata
-
-Trezor sets `request_type` to `TXMETA`. `request_details.tx_hash` is a transaction hash,
-matching one of the current transaction inputs.
-
-**Old style:** Host must respond with a `TxAck` message. The structure `tx` must be
-filled out with relevant data, in particular, `inputs_cnt` and `outputs_cnt` must be set
-to the number of transaction inputs and outputs. Arrays `inputs`, `outputs`,
-`bin_outputs` and `extra_data` should be empty.
-
-**New style:** Host must respond with a `TxAckPrevMeta` message. All relevant data must
-be set on `tx`.
-
-#### Extra data
-
-Some coins (e.g., Zcash) contain data at the end of transaction serialization that
-Trezor does not understand. The host must indicate the length of this extra data in the
-field `extra_data_len`.
-
-To figure out which is the extra data, the host must parse the serialized previous
-transaction up to the last field understood by Trezor. In case of Zcash, that is:
-
-* version + version group ID
-* number of inputs, and every input
-* number of outputs, and every output
-* lock time
-* expiry
-
-All data after the `expiry` field is considered "extra data".
-
-### Previous transaction input
-
-Trezor sets `request_type` to `TXINPUT`. `request_details.tx_hash` is a transaction
-hash, matching one of the current transaction inputs.
-
-**Old style:** Host must respond with a `TxAck` message. The field `tx.inputs` must be
-set to an array of one element, which describes the requested input of the specified
-previous transaction. All other fields should be left unset.
-
-**New style:** Host must respond with a `TxAckPrevInput` message. All relevant data must
-be set on `tx.input`.
-
-### Previous transaction output
-
-Trezor sets `request_type` to `TXOUTPUT`. `request_details.tx_hash` is a transaction
-hash, matching one of the current transaction inputs.
-
-**Old style:** Host must respond with a `TxAck` message. The field `tx.bin_outputs` must
-be set to an array of one element, which describes the requested output of the specified
-previous transaction. All other fields should be left unset.
-
-**New style:** Host must respond with a `TxAckPrevOutput` message. All relevant data
-must be set on `tx.output`.
-
-### Previous transaction trailing data
-
-On some coins, such as Zcash, the transaction serialization can contain data not
-understood by Trezor. This data is not relevant for validation, but it must be included
-so that Trezor can correctly compute the previous transaction hash.
-
-Trezor sets `request_type` to `TXEXTRADATA`. `request_details.tx_hash` is a transaction
-hash, matching one of the current transaction inputs.
-
-`request_details.extra_data_offset` specifies the offset of the requested data from the
-_start_ of the extra data. `request_details.extra_data_length` specifies the length of
-the requested chunk.
-
-**Old style:** Host must respond with a `TxAck` message. The field `tx.extra_data` must
-contain the specified chunk, starting at the given offset and of exactly the given
-length. All other fields should be unset.
-
-**New style:** Host must respond with a `TxAckPrevExtraData` message. The chunk must be
-set to `tx.extra_data_chunk`.
-
-### Original transaction input
-
-Trezor sets `request_type` to `TXORIGINPUT`. `request_details.tx_hash` is the
-transaction hash of the original transaction.
-
-The host must respond with a `TxAckInput` message. All relevant data must be set in
-`tx.input`. The derivation path and `script_type` are mandatory for all original
-internal inputs. All original internal inputs must also be accompanied with full
-transaction signature data in the `script_sig` and/or `witness` fields.
-
-### Original transaction output
-
-Trezor sets `request_type` to `TXORIGOUTPUT`. `request_details.tx_hash` is the
-transaction hash of the original transaction.
-
-Host must respond with a `TxAckOutput` message. All relevant data must be set in
-`tx.output`. The derivation path and script type are mandatory for all original
-change-outputs.
-
-### Payment request
-
-Trezor sets `request_type` to `TXPAYMENTREQ`, and `request_details.tx_hash` is unset.
-`request_details.request_index` is the index of the payment request in the transaction:
-0 is the first payment request, 1 is second, etc.
-
-The host must respond with a `PaymentRequest` message.
-
-## Replacement transactions
-
-A replacement transaction is a transaction that uses the same inputs as one or more
-transactions which have already been signed (the original transactions). Replacement
-transactions can be used to securely bump the fee of an already signed transaction
-([BIP-125](https://github.com/bitcoin/bips/blob/master/bip-0125.mediawiki)) or to
-participate as a sender in PayJoin
-([BIP-78](https://github.com/bitcoin/bips/blob/master/bip-0078.mediawiki)). Trezor only
-supports signing of replacement transaction which do not increase the amount that the
-user is spending on external outputs. Thus when signing a replacement transaction the
-user only needs to confirm the fee modification and the original TXIDs without being
-shown any outputs, since the original external outputs must have already been confirmed
-by the user and any new external outputs can only be paid for by new external inputs.
-
-The host signals that a transaction is a replacement transaction by setting the
-`orig_hash` and `orig_index` fields for at least one `TxInput`. Trezor will then
-automatically request metadata about the original transaction and verify the original
-signatures.
-
-A replacement transaction in Trezor must satisfy the following requirements:
-
-* All inputs of the original transactions must be inputs of the replacement transaction.
-* All _external_ outputs of the original transactions must be outputs of the replacement
- transaction.
-* The value of an external output may be decreased only if there are no new external
- inputs. This should only be used to bump the fee if the original transaction transfers
- the entire account balance and there is no other source available to bump the fee.
-* The replacement transaction must not increase the amount that the user is spending
- on external outputs.
-* Original transactions must have the same effective `nLockTime` as the replacement
- transaction.
-* The inputs and outputs of the original transactions must not be permuted in the
- replacement transaction, but they can be interleaved with new inputs or with inputs
- from another original transaction.
-* New `OP_RETURN` outputs cannot be added in the replacement transaction.
-
-So the replacement transaction is, for example, allowed to:
-
-* Increase the user's contribution to the mining fee by adding new inputs or decreasing
- or removing change outputs.
-* Decrease the user's contribution to the mining fee by increasing or adding
- change-outputs.
-* Add external inputs (PayJoin) and use them to introduce new outputs, increase the
- original external outputs or even to increase the user's change outputs so as to
- decrease the amount that the user is spending.
-
-## Payment requests
-
-In Trezor T a set of transaction outputs can be accompanied by a payment request.
-Multiple payment requests per transaction are also possible. A payment request is a
-message signed by a trusted party requesting payment of certain amounts to a set of
-outputs as specified in [SLIP-24](https://github.com/satoshilabs/slips/blob/master/slip-0024.md).
-The user then does not have to verify the output addresses, but only confirms the
-payment of the requested amount to the recipient.
-
-The host signals that an output belongs to a payment request by setting the
-`payment_req_index` field in the `TxOutput` message. When Trezor encounters the first
-output that has this field set to a particular index, it will ask for the payment request
-that has the given index.
-
-All outputs belonging to one payment request must be consecutive in the transaction.
-
-## Implementation notes
-
-### Pseudo-code
-
-The following is a rough outline of host-side implementation. See above for detailed
-info.
-
-```python
-transaction_bytes = ""
-signatures = [""] * len(INPUTS)
-
-def sign_tx():
- # send initial message
- send_message(
- SignTx(
- coin_name,
- inputs_count=len(INPUTS),
- outputs_count=len(OUTPUTS),
- # ...fill individual metadata fields
- )
- )
-
- # wait for TxAck forever, until Trezor indicates we are finished
- while True:
- msg = receive_message()
-
- # extract data first
- extract_streamed_data(msg.serialized)
-
- if msg.request_type == TXFINISHED:
- # we are done
- break
-
- if msg.details.tx_hash is not None:
- # Trezor requires data about some previous transaction
- send_response_prev(msg.request_type, msg.details)
- else:
- # Trezor requires data about this transaction
- send_response_current(msg.request_type, msg.details)
-
-def extract_streamed_data(ser: TxRequestSerializedType):
- global transaction_bytes, signatures
- # append serialized data to what we got so far
- transaction_bytes += ser.serialized_tx
- if ser.signature_index is not None:
- # read the signature
- signatures[ser.signature_index] = ser.signature
-
-def send_response_prev(request_type: RequestType, details: TxRequestDetailsType):
- prev_tx = get_prev_tx(details.tx_hash)
- if request_type == TXINPUT:
- send_prev_input(prev_tx.inputs[details.request_index])
- elif request_type == TXOUTPUT:
- send_prev_output(prev_tx.outputs[details.request_index])
- elif request_type == TXMETA:
- send_prev_metadata(prev_tx)
- elif request_type == TXEXTRADATA:
- offset = details.extra_data_offset
- length = details.extra_data_length
- extra_data_chunk = prev_tx.extra_data[offset : offset + length]
- send_prev_extra_data(extra_data_chunk)
-
-def send_response_current(request_type: RequestType, details: TxRequestDetailsType):
- if request_type == TXINPUT:
- send_input(INPUTS[details.request_index])
- elif request_type == TXOUTPUT:
- send_output(OUTPUTS[details.request_index])
-```
-
-### Wire compatibility
-
-The new definitions are structured so that the Protobuf binary encoded form can be
-decoded into both representations. This means that the host can encode data in the old
-representation, and Trezor will successfully and correctly decode it into the new one.
-
-This is done by reusing field IDs as appropriate, and taking advantage of the fact that
-Protobuf encodes arrays as a sequence of the same field repeated a number of times.
-
-For example, here is a part of the `TxAck` definition:
-
-```protobuf
-message TxAck {
- optional TransactionType tx = 1;
-
- message TransactionType {
- // ... some fields omitted ...
- repeated TxInputType inputs = 2;
- // ... some fields omitted ...
-
- message TxInputType {
- repeated uint32 address_n = 1;
- // ... some fields omitted ...
- optional uint64 amount = 8;
- // ... some fields omitted ...
- }
- }
-}
-```
-
-A message carrying these fields would look like this:
-
-```
-FIELD 1 (type NESTED):
- FIELD 2 (type NESTED):
- FIELD 1 (type int): 0x8000002c
- FIELD 1 (type int): 0x80000000
- FIELD 1 (type int): 0x80000000
- FIELD 1 (type int): 0
- FIELD 1 (type int): 0
- FIELD 8 (type int): 1234567
-```
-
-We can see that this is identical as if the type definition looked as follows; indeed,
-we only renamed the types, removed some fields, and set some `optional` or `repeated`
-to `required` instead.
-
-```protobuf
-message TxAckInput {
- required TxAckInputWrapper tx = 1;
-
- message TxAckInputWrapper {
- required TxInput input = 2; // the field is now required instead of repeated
-
- message TxInput {
- repeated uint32 address_n = 1;
- required uint64 amount = 8;
- }
- }
-}
-```
-
-A caveat of this approach is that this introduces invisible dependencies: `TxInput` and
-`PrevInput` fold into the same old-style `TxInputType`, so adding new fields must be
-done carefully.
-
-We expect to gradually deprecate the `TransactionType`. At that point, the new-style
-types will be fully independent.
diff --git a/docs/common/communication/index.md b/docs/common/communication/index.md
deleted file mode 100644
index 197fedd8..00000000
--- a/docs/common/communication/index.md
+++ /dev/null
@@ -1,16 +0,0 @@
-# Communication
-
-_Note: In this section we describe the internal functioning of the communication protocol. If you wish to implement Trezor support you should use [Connect](https://github.com/trezor/connect/) or [python-trezor](https://pypi.org/project/trezor/), which will do all this hard work for you._
-
-We use [Protobuf v2](https://developers.google.com/protocol-buffers/) for host-device communication. The communication cycle is very simple, Trezor receives a message (request), acts on it and responds with another one (response). Trezor on its own is incapable of initiating the communication.
-
-## Definitions
-
-Protobuf messages are defined in the [Common](https://github.com/trezor/trezor-firmware/tree/master/common) project, which is part of this monorepo. This repository is also exported to [trezor/trezor-common](https://github.com/trezor/trezor-common) to be used by third parties, which prefer not to include the whole monorepo. That copy is read-only mirror and all changes are happening in this monorepo.
-
-## Notable topics
-
-- [Sessions](sessions.md)
-- [Passphrase](passphrase.md)
-- [Bitcoin transaction signing](bitcoin-signing.md)
-
diff --git a/docs/common/communication/passphrase-redesign-migration.md b/docs/common/communication/passphrase-redesign-migration.md
deleted file mode 100644
index 6c7edfde..00000000
--- a/docs/common/communication/passphrase-redesign-migration.md
+++ /dev/null
@@ -1,149 +0,0 @@
-# Passphrase Redesign In 1.9.0 / 2.3.0
-
-On the T1, passphrase must be entered on the host PC and sent to Trezor. On the TT, the
-user can choose whether to enter the passphrase on host or on Trezor's touch screen.
-
-In versions 1.9.0 and 2.3.0 we have redesigned how the passphrase is
-communicated between the Host and the Device. The new design is documented
-thoroughly in [passphrase.md](passphrase.md) and this document should help
-with the transition from the old design.
-
-## New features
-
-* Passphrase flow is now identical for T1 and TT.
-* By keeping track of _sessions_, it is possible to avoid having to send passphrase repeatedly.
-* The choice between entering on Host or Device for TT has been moved from Device to Host.
-* Multiple passphrases are cached simultaneously.
-
-## Backwards compatibility
-
-T1 1.9.0 is fully backwards-compatible and works with existing Host code.
-
-TT 2.3.0 communicating with old Host software degrades to T1-level features: entering
-passphrase on device will not be available, and on-device passphrase caching via the
-`state` field will not be available.
-
-As a workaround, it is possible to use the "passphrase always on device" feature on the
-new TT firmware. When enabled, the passphrase flow is completely hidden from the Host
-software, and the Device itself prompts the user to enter the passphrase.
-
-## Implementation guide
-
-### Protobuf changes
-
-Protobuf has built-in backwards compatibility mechanisms, so a conforming implementation
-should continue to work with old protobuf definitions.
-
-To restore support for TT on-device passphrase entry, and to make use of the new
-features, you will need to update to newer protobuf definitions from `trezor-common`
-(TODO: link to commit in trezor-common).
-
-The gist of the changes is:
-
-- `PassphraseRequest.on_device` was deprecated, and renamed to `_on_device`. New Devices
- will never send this field.
-- Corresponding field `PassphraseAck.on_device` was added.
-- `PassphraseAck.state` was deprecated, and renamed to `_state`. It is retained for
- code compatibility, but the field should never be set.
-- `PassphraseStateRequest`/`PassphraseStateAck` messages were deprecated, and renamed
- with a `Deprecated_` prefix. New Devices will not send or accept these messages.
-- `Initialize.state` was renamed to `Initialize.session_id`.
-- Corresponding field `Features.session_id` was added. New Devices will always send this
- field in response to `Initialize` call.
-- A new value `Capability_PassphraseEntry` was added to the `Features.Capability`
- enum. This capability will be sent from a Device that supports on-device passphrase
- entry (currently only TT).
-
-### Restoring on-device entry for TT
-
-The Host software reacts to a `PassphraseRequest` message by prompting the user for a
-passphrase and sending it in the `PassphraseAck.passphrase` field.
-
-A new UI element should be added: when the passphrase prompt is displayed on Host, there
-should be an option to "enter passphrase on device". When the user selects this option,
-the Host must send a `PassphraseAck(passphrase=null, on_device=true)`.
-
-The "enter passphrase on device" option should be displayed when `Features.capabilities`
-contain the `Capability_PassphraseEntry` value, regardless of reported Trezor version or
-model. Firmwares older than 2.3.0 or 1.9.0 never set this value, so this ensures
-forwards and backwards compatibility.
-
-### Cross-version compatibility for TT
-
-TT version \< 2.3.0 will send `PassphraseRequest(_on_device=true)` if the user selected
-on-device entry. Neither T1 nor TT >= 2.3.0 will ever set this field to true.
-
-If the Host receives `PassphraseRequest(_on_device=true)`, it should immediately respond
-with `PassphraseAck()` with no fields set.
-
-TT version \< 2.3.0 will send `Deprecated_PassphraseStateRequest(state=[bytes])` after
-receiving `PassphraseAck`. The Host should immediately respond with
-`Deprecated_PassphraseStateAck()` with no fields set. If the Host does session
-management, it should store the value of `state` as the session ID.
-
-### Triggering passphrase prompt
-
-Use `GetAddress(coin_name="Testnet", address_n=[44'/1'/0'/0/0])` (the first address of
-the first account of Testnet) to ensure that the Device asks for a passphrase if
-needed, and caches it for future use.
-
-### Validating passphrases
-
-You can store the result of the above call, and in the future, compare it to a newly
-received address. This is a good way to check if the user is using the same passphrase
-as last time.
-
-Do not store user-entered passphrases for the purpose of validation, even in hashed,
-encrypted, or otherwise obfuscated format.
-
-### Session support
-
-A call to `Initialize` can include a `session_id` field. When starting a new user
-session, this field should be left empty.
-
-The response `Features` message will always include a `session_id` field. The value of
-this field should be stored. When calling `Initialize` again, the stored value should
-be sent as `session_id`. If the received `Features.session_id` is the same, it means
-that session was resumed successfully and the user will not be prompted for passphrase.
-
-```
---> Initialize()
-<-- Features(session_id=0xABCDEF, ...)
-
---> Initialize(session_id=0xABCDEF)
-<-- Features(session_id=0xABCDEF)
-# (session resumed successfully)
-
---> Initialize(session_id=0xABCDEF)
-<-- Features(session_id=0x123456)
-# (session was not resumed, user will be prompted for passphrase again)
-```
-
-Session support is identical on T1 and TT, and both models support multiple sessions,
-i.e., it is possible to seamlessly switch between using multiple passphrases.
-
-### Cross-version compatible algorithm summary
-
-The following algorithm will ensure that your Host application works properly with
-both T1 and TT with both older and newer firmwares.
-
-1. If you have a session ID stored, call `Initialize(session_id=stored_session_id)`
-2. Check the value of `Features.session_id`. If it is identical to `stored_session_id`,
- the session was resumed and user will not need to be prompted for a passphrase.
- 1. If `Features.session_id` is not set, you are communicating with an older Device.
- Do not store the null value as session ID.
- 2. Otherwise store the value as `stored_session_id`.
-3. When you receive a `PassphraseRequest(_on_device=true)`, respond with
- `PassphraseAck()` with no fields set.
-4. When you receive a `PassphraseRequest`, prompt the user for passphrase.
- 1. If `Features.capabilities` contains value `Capability_PassphraseEntry`, display a
- UI element that allows the user to enter passphrase on-device.
- 2. If the user chooses this option, send `PassphraseAck(passphrase=null, on_device=true)`
- 3. If the user enters the passphrase in your application, send
- `PassphraseAck(passphrase="user entered passphrase", on_device=false)`
-5. When you receive a `Deprecated_PassphraseStateRequest(state=...)`, store the value
- of `state` as `stored_session_id`, and respond with `Deprecated_PassphraseStateAck`
- with no fields set.
-
-Note: up to 64 bytes may be required to store the session ID. Firmwares < 2.3.0 use a
-64-byte value, newer firmwares use a 32-byte value.
diff --git a/docs/common/communication/passphrase.md b/docs/common/communication/passphrase.md
deleted file mode 100644
index 7c51da4f..00000000
--- a/docs/common/communication/passphrase.md
+++ /dev/null
@@ -1,64 +0,0 @@
-# Passphrase
-
-As of 1.9.0 / 2.3.0 we have changed how [passphrase](https://wiki.trezor.io/Passphrase) is communicated between the host and the device. For migration information for existing Hosts communicating with Trezor please see this [document](passphrase-redesign-migration.md).
-
-Passphrase is very tightly coupled with _sessions_. The reader is encouraged to read on that topic first in the [sessions.md](sessions.md) section.
-
-## Scheme
-
-As soon as Trezor needs the passphrase to do BIP-39/SLIP-39 derivations it prompts the user for passphrase.
-
-```
-GetAddress(...)
----------> PassphraseRequest()
- <---------
-PassphraseAck
-(str passphrase, bool on_device)
----------> Address(...)
- <---------
-```
-
-In the default Trezor setting, the passphrase is obtained from the Host. Trezor sends a PassphraseRequest message and awaits PassphraseAck as a response. This message contains field `passphrase` to transmit it or it has `on_device` boolean flag to indicate that the user wishes to enter the passphrase on Trezor instead. Setting both `passphrase` and `on_device` to true is forbidden.
-
-Note that this has changed as of 2.3.0. In previous firmware versions the `on_device` flag was in the PassphraseRequest message, since this decision has been made on Trezor. We also had two additional messages PassphraseStateRequest and PassphraseStateAck which were removed.
-
-## Example
-
-On an initialized device with passphrase enabled a common communication starts like this:
-
-```
-Initialize()
----------> Features(..., session_id)
- <---------
-GetAddress(...)
----------> PassphraseRequest()
- <---------
-PassphraseAck(...)
----------> Address(...)
- <---------
-```
-
-The device requested the passphrase since the BIP-39/SLIP-39 seed is not yet cached. After this workflow the seed is cached and the passphrase will therefore never be requested again unless the session is cleared*.
-
-Since we do not have sessions, the Host can not be sure that someone else has not used the device and applied another session id (e.g. changed the Passphrase). To work around this we send the session id again on every subsequent message. See more on that in [session.md]().
-
-```
-Initialize(session_id)
----------> Features(..., session_id)
- <---------
-GetPublicKey(...)
----------> PublicKey(...)
- <---------
-```
-
-As long as the session_id in `Initialize` is the same as the one Trezor stores internally, Trezor guarantees the same passphrase is being used.
-
-----
-
-\* There is one exception and that is Cardano. Because Cardano has a different BIP-39/SLIP-39 derivation scheme for passphrase we can not use the cached seed. As a workaround we prompt for the passphrase again in such case and cache the cardano seed in the cardano app directly.
-
-## Passphrase always on device
-
-User might want to enforce the passphrase entry on the device every time without the hassle of instructing the Host to do so.
-
-For such cases the user may apply the *Passphrase always on device* setting. As the name suggests, with this setting the passphrase is prompted on the device right away and no PassphraseRequest/PassphraseAck messages are exchanged. Note that the passphrase is prompted only once for given session id. If the user wishes to enter another passphrase they need to either send Initialize(session_id=None) or replug the device.
diff --git a/docs/common/communication/sessions.md b/docs/common/communication/sessions.md
deleted file mode 100644
index caa4163d..00000000
--- a/docs/common/communication/sessions.md
+++ /dev/null
@@ -1,129 +0,0 @@
-# Sessions
-
-Trezor has limited support for logical sessions. The main purpose is to enable seamless
-operation with multiple passphrases.
-
-**Warning: Session isolation does not exist.** Host software is responsible for
-maintaining isolation. Running multiple host-side applications at the same time is not
-recommended.
-
-See "Caveats" section below for details.
-
-Support for isolated sessions is in the works, see
-[#79](https://github.com/trezor/trezor-firmware/issues/79).
-
-## Session lifecycle
-
-After Trezor starts up, no session exists. Any attempt to use session data (i.e., the
-seed) will be rejected with `InvalidSession` error code.
-
-New session is started by calling `Initialize` with no arguments. The response is a
-`Features` message, which contains a 32-byte `session_id`. All subsequent commands
-happen within the given session.
-
-To resume a previous session (after creating a new one), call `Initialize` with a stored
-`session_id` as an argument.
-
-Attempt to resume an unknown session ID will transparently allocate a new session ID.
-
-Since firmwares 1.9.4 / 2.3.4, it is possible to destroy the current session via the
-`EndSession` call. The session and all its associated data is wiped from Trezor memory,
-and it is impossible to resume the session. Trezor returns to the initial state and
-all requests will return `InvalidSession`.
-
-There is no explicit way to leave a session and keep its data for later resumption.
-Instead, you can switch to a new session via `Initialize` with no arguments.
-
-At the moment, both T1 and TT allow for 10 sessions to exist at the same time. When a
-new session needs to be allocated and there is no space in the cache, the least recently
-used session is evicted.
-
-Sessions only exist in RAM and are lost when Trezor is disconnected.
-
-All commands are performed in the context of the current session, until one of the
-following happens:
-
-* Host calls `EndSession`. The current session is destroyed and Trezor returns to the
- initial state.
-* Host calls `Initialize` with no arguments, or with an unknown `session_id`. A new
- session is allocated and its id returned in the `Features` message.
-* Host calls `Initialize` with a known `session_id`. The specified session is resumed
- and its `session_id` is returned in the `Features` message.
-* Trezor is disconnected.
-
-## Caveats
-
-* Sessions only exist on the protobuf message level. **There is no proper isolation.**
- Multiple host applications can insert commands into each other's sessions.
-
- It is recommended to send `Initialize` to resume a session immediately before each
- flow. However, even this does not guarantee that another application doesn't insert
- its own `Initialize` in the time it takes you to send the next command.
-
- The reverse is also true: session management does not prevent other applications from
- inserting commands under the currently active session (and therefore passphrase),
- without knowledge of the session ID or the passphrase.
-
-* It is impossible to run complex flows concurrently. If an application is in the middle
- of Bitcoin signing, sending `Initialize` will cancel the signing flow. Resuming the
- appropriate session later will _not_ continue where it left off.
-
-## Examples
-
-Allocate a new session, perform a command, and end the session:
-```
-Initialize()
----------> Features(..., session_id=AAAA)
- <---------
- ---<now in session AAAA>---
-Request
----------> Response
- <---------
-EndSession()
----------> Success()
- <---------
- ---<now in no session>---
-```
-
-Allocate two new sessions, resume the first one later:
-```
-Initialize()
----------> Features(..., session_id=AAAA)
- <---------
- ---<now in session AAAA>---
-Request
----------> Response
- <---------
-
-Initialize()
----------> Features(..., session_id=BBBB)
- <---------
- ---<now in session BBBB>---
-Request
----------> Response
- <---------
-
-Initialize(session_id=AAAA)
----------> Features(..., session_id=AAAA)
- <---------
- ---<now in session AAAA>---
-Request
----------> Response
- <---------
-```
-
-Attempt to resume session that is not in the cache:
-```
-Initialize()
----------> Features(..., session_id=AAAA)
- <---------
- ---<now in session AAAA>---
-EndSession()
----------> Success()
- <---------
- ---<now in no session>---
-Initialize(session_id=AAAA)
----------> Features(..., session_id=BBBB)
- <---------
- ---<now in session BBBB>---
-```
diff --git a/docs/common/index.md b/docs/common/index.md
index b236bffb..d348bff1 100644
--- a/docs/common/index.md
+++ b/docs/common/index.md
@@ -10,12 +10,18 @@ JSON coin definitions and support tables.
Description of external definitions for the Ethereum and Solana tokens and the process of their generation. See [External definitions](external-definitions.md).
+## Communication
+
+We use [Protobuf v2](https://developers.google.com/protocol-buffers/) for host-device communication. The communication cycle is simple. Trezor receives a message (request), acts on it, and responds with another one (response). Trezor on its own is incapable of initiating the communication.
+
## Protobuf Definitions
-Common Protobuf definitions for the Trezor protocol. Also see [Communication](communication/index.md).
+Protobuf messages are defined in the [Common](https://github.com/trezor/trezor-firmware/tree/main/common) project, which is part of this monorepo. This repository is also exported to [trezor/trezor-common](https://github.com/trezor/trezor-common) to be used by third parties, which prefer not to include the whole monorepo. That copy is a read-only mirror and all changes are happening in this monorepo.
## Tools
Tools for managing coin definitions and related data.
## Message Workflows
+
+- [Bitcoin transaction signing](bitcoin-signing.md)
diff --git a/docs/common/protocol_v1/index.md b/docs/common/protocol_v1/index.md
new file mode 100644
index 00000000..2961b170
--- /dev/null
+++ b/docs/common/protocol_v1/index.md
@@ -0,0 +1,9 @@
+# Protocol V1
+
+_Note: In this section we describe the internal functioning of the old communication protocol. Newer Trezor devices (since 2025) use the Trezor-Host protocol, see [Trezor-Host protocol](../thp/index.md). If you wish to implement Trezor support you should use [Connect](https://github.com/trezor/connect/) or [python-trezor](https://pypi.org/project/trezor/), which will do all this hard work for you._
+
+
+## Notable topics
+
+- [Sessions](sessions.md)
+- [Passphrase](passphrase.md)
diff --git a/docs/common/protocol_v1/passphrase-redesign-migration.md b/docs/common/protocol_v1/passphrase-redesign-migration.md
new file mode 100644
index 00000000..6c7edfde
--- /dev/null
+++ b/docs/common/protocol_v1/passphrase-redesign-migration.md
@@ -0,0 +1,149 @@
+# Passphrase Redesign In 1.9.0 / 2.3.0
+
+On the T1, passphrase must be entered on the host PC and sent to Trezor. On the TT, the
+user can choose whether to enter the passphrase on host or on Trezor's touch screen.
+
+In versions 1.9.0 and 2.3.0 we have redesigned how the passphrase is
+communicated between the Host and the Device. The new design is documented
+thoroughly in [passphrase.md](passphrase.md) and this document should help
+with the transition from the old design.
+
+## New features
+
+* Passphrase flow is now identical for T1 and TT.
+* By keeping track of _sessions_, it is possible to avoid having to send passphrase repeatedly.
+* The choice between entering on Host or Device for TT has been moved from Device to Host.
+* Multiple passphrases are cached simultaneously.
+
+## Backwards compatibility
+
+T1 1.9.0 is fully backwards-compatible and works with existing Host code.
+
+TT 2.3.0 communicating with old Host software degrades to T1-level features: entering
+passphrase on device will not be available, and on-device passphrase caching via the
+`state` field will not be available.
+
+As a workaround, it is possible to use the "passphrase always on device" feature on the
+new TT firmware. When enabled, the passphrase flow is completely hidden from the Host
+software, and the Device itself prompts the user to enter the passphrase.
+
+## Implementation guide
+
+### Protobuf changes
+
+Protobuf has built-in backwards compatibility mechanisms, so a conforming implementation
+should continue to work with old protobuf definitions.
+
+To restore support for TT on-device passphrase entry, and to make use of the new
+features, you will need to update to newer protobuf definitions from `trezor-common`
+(TODO: link to commit in trezor-common).
+
+The gist of the changes is:
+
+- `PassphraseRequest.on_device` was deprecated, and renamed to `_on_device`. New Devices
+ will never send this field.
+- Corresponding field `PassphraseAck.on_device` was added.
+- `PassphraseAck.state` was deprecated, and renamed to `_state`. It is retained for
+ code compatibility, but the field should never be set.
+- `PassphraseStateRequest`/`PassphraseStateAck` messages were deprecated, and renamed
+ with a `Deprecated_` prefix. New Devices will not send or accept these messages.
+- `Initialize.state` was renamed to `Initialize.session_id`.
+- Corresponding field `Features.session_id` was added. New Devices will always send this
+ field in response to `Initialize` call.
+- A new value `Capability_PassphraseEntry` was added to the `Features.Capability`
+ enum. This capability will be sent from a Device that supports on-device passphrase
+ entry (currently only TT).
+
+### Restoring on-device entry for TT
+
+The Host software reacts to a `PassphraseRequest` message by prompting the user for a
+passphrase and sending it in the `PassphraseAck.passphrase` field.
+
+A new UI element should be added: when the passphrase prompt is displayed on Host, there
+should be an option to "enter passphrase on device". When the user selects this option,
+the Host must send a `PassphraseAck(passphrase=null, on_device=true)`.
+
+The "enter passphrase on device" option should be displayed when `Features.capabilities`
+contain the `Capability_PassphraseEntry` value, regardless of reported Trezor version or
+model. Firmwares older than 2.3.0 or 1.9.0 never set this value, so this ensures
+forwards and backwards compatibility.
+
+### Cross-version compatibility for TT
+
+TT version \< 2.3.0 will send `PassphraseRequest(_on_device=true)` if the user selected
+on-device entry. Neither T1 nor TT >= 2.3.0 will ever set this field to true.
+
+If the Host receives `PassphraseRequest(_on_device=true)`, it should immediately respond
+with `PassphraseAck()` with no fields set.
+
+TT version \< 2.3.0 will send `Deprecated_PassphraseStateRequest(state=[bytes])` after
+receiving `PassphraseAck`. The Host should immediately respond with
+`Deprecated_PassphraseStateAck()` with no fields set. If the Host does session
+management, it should store the value of `state` as the session ID.
+
+### Triggering passphrase prompt
+
+Use `GetAddress(coin_name="Testnet", address_n=[44'/1'/0'/0/0])` (the first address of
+the first account of Testnet) to ensure that the Device asks for a passphrase if
+needed, and caches it for future use.
+
+### Validating passphrases
+
+You can store the result of the above call, and in the future, compare it to a newly
+received address. This is a good way to check if the user is using the same passphrase
+as last time.
+
+Do not store user-entered passphrases for the purpose of validation, even in hashed,
+encrypted, or otherwise obfuscated format.
+
+### Session support
+
+A call to `Initialize` can include a `session_id` field. When starting a new user
+session, this field should be left empty.
+
+The response `Features` message will always include a `session_id` field. The value of
+this field should be stored. When calling `Initialize` again, the stored value should
+be sent as `session_id`. If the received `Features.session_id` is the same, it means
+that session was resumed successfully and the user will not be prompted for passphrase.
+
+```
+--> Initialize()
+<-- Features(session_id=0xABCDEF, ...)
+
+--> Initialize(session_id=0xABCDEF)
+<-- Features(session_id=0xABCDEF)
+# (session resumed successfully)
+
+--> Initialize(session_id=0xABCDEF)
+<-- Features(session_id=0x123456)
+# (session was not resumed, user will be prompted for passphrase again)
+```
+
+Session support is identical on T1 and TT, and both models support multiple sessions,
+i.e., it is possible to seamlessly switch between using multiple passphrases.
+
+### Cross-version compatible algorithm summary
+
+The following algorithm will ensure that your Host application works properly with
+both T1 and TT with both older and newer firmwares.
+
+1. If you have a session ID stored, call `Initialize(session_id=stored_session_id)`
+2. Check the value of `Features.session_id`. If it is identical to `stored_session_id`,
+ the session was resumed and user will not need to be prompted for a passphrase.
+ 1. If `Features.session_id` is not set, you are communicating with an older Device.
+ Do not store the null value as session ID.
+ 2. Otherwise store the value as `stored_session_id`.
+3. When you receive a `PassphraseRequest(_on_device=true)`, respond with
+ `PassphraseAck()` with no fields set.
+4. When you receive a `PassphraseRequest`, prompt the user for passphrase.
+ 1. If `Features.capabilities` contains value `Capability_PassphraseEntry`, display a
+ UI element that allows the user to enter passphrase on-device.
+ 2. If the user chooses this option, send `PassphraseAck(passphrase=null, on_device=true)`
+ 3. If the user enters the passphrase in your application, send
+ `PassphraseAck(passphrase="user entered passphrase", on_device=false)`
+5. When you receive a `Deprecated_PassphraseStateRequest(state=...)`, store the value
+ of `state` as `stored_session_id`, and respond with `Deprecated_PassphraseStateAck`
+ with no fields set.
+
+Note: up to 64 bytes may be required to store the session ID. Firmwares < 2.3.0 use a
+64-byte value, newer firmwares use a 32-byte value.
diff --git a/docs/common/protocol_v1/passphrase.md b/docs/common/protocol_v1/passphrase.md
new file mode 100644
index 00000000..7c51da4f
--- /dev/null
+++ b/docs/common/protocol_v1/passphrase.md
@@ -0,0 +1,64 @@
+# Passphrase
+
+As of 1.9.0 / 2.3.0 we have changed how [passphrase](https://wiki.trezor.io/Passphrase) is communicated between the host and the device. For migration information for existing Hosts communicating with Trezor please see this [document](passphrase-redesign-migration.md).
+
+Passphrase is very tightly coupled with _sessions_. The reader is encouraged to read on that topic first in the [sessions.md](sessions.md) section.
+
+## Scheme
+
+As soon as Trezor needs the passphrase to do BIP-39/SLIP-39 derivations it prompts the user for passphrase.
+
+```
+GetAddress(...)
+---------> PassphraseRequest()
+ <---------
+PassphraseAck
+(str passphrase, bool on_device)
+---------> Address(...)
+ <---------
+```
+
+In the default Trezor setting, the passphrase is obtained from the Host. Trezor sends a PassphraseRequest message and awaits PassphraseAck as a response. This message contains field `passphrase` to transmit it or it has `on_device` boolean flag to indicate that the user wishes to enter the passphrase on Trezor instead. Setting both `passphrase` and `on_device` to true is forbidden.
+
+Note that this has changed as of 2.3.0. In previous firmware versions the `on_device` flag was in the PassphraseRequest message, since this decision has been made on Trezor. We also had two additional messages PassphraseStateRequest and PassphraseStateAck which were removed.
+
+## Example
+
+On an initialized device with passphrase enabled a common communication starts like this:
+
+```
+Initialize()
+---------> Features(..., session_id)
+ <---------
+GetAddress(...)
+---------> PassphraseRequest()
+ <---------
+PassphraseAck(...)
+---------> Address(...)
+ <---------
+```
+
+The device requested the passphrase since the BIP-39/SLIP-39 seed is not yet cached. After this workflow the seed is cached and the passphrase will therefore never be requested again unless the session is cleared*.
+
+Since we do not have sessions, the Host can not be sure that someone else has not used the device and applied another session id (e.g. changed the Passphrase). To work around this we send the session id again on every subsequent message. See more on that in [session.md]().
+
+```
+Initialize(session_id)
+---------> Features(..., session_id)
+ <---------
+GetPublicKey(...)
+---------> PublicKey(...)
+ <---------
+```
+
+As long as the session_id in `Initialize` is the same as the one Trezor stores internally, Trezor guarantees the same passphrase is being used.
+
+----
+
+\* There is one exception and that is Cardano. Because Cardano has a different BIP-39/SLIP-39 derivation scheme for passphrase we can not use the cached seed. As a workaround we prompt for the passphrase again in such case and cache the cardano seed in the cardano app directly.
+
+## Passphrase always on device
+
+User might want to enforce the passphrase entry on the device every time without the hassle of instructing the Host to do so.
+
+For such cases the user may apply the *Passphrase always on device* setting. As the name suggests, with this setting the passphrase is prompted on the device right away and no PassphraseRequest/PassphraseAck messages are exchanged. Note that the passphrase is prompted only once for given session id. If the user wishes to enter another passphrase they need to either send Initialize(session_id=None) or replug the device.
diff --git a/docs/common/protocol_v1/sessions.md b/docs/common/protocol_v1/sessions.md
new file mode 100644
index 00000000..caa4163d
--- /dev/null
+++ b/docs/common/protocol_v1/sessions.md
@@ -0,0 +1,129 @@
+# Sessions
+
+Trezor has limited support for logical sessions. The main purpose is to enable seamless
+operation with multiple passphrases.
+
+**Warning: Session isolation does not exist.** Host software is responsible for
+maintaining isolation. Running multiple host-side applications at the same time is not
+recommended.
+
+See "Caveats" section below for details.
+
+Support for isolated sessions is in the works, see
+[#79](https://github.com/trezor/trezor-firmware/issues/79).
+
+## Session lifecycle
+
+After Trezor starts up, no session exists. Any attempt to use session data (i.e., the
+seed) will be rejected with `InvalidSession` error code.
+
+New session is started by calling `Initialize` with no arguments. The response is a
+`Features` message, which contains a 32-byte `session_id`. All subsequent commands
+happen within the given session.
+
+To resume a previous session (after creating a new one), call `Initialize` with a stored
+`session_id` as an argument.
+
+Attempt to resume an unknown session ID will transparently allocate a new session ID.
+
+Since firmwares 1.9.4 / 2.3.4, it is possible to destroy the current session via the
+`EndSession` call. The session and all its associated data is wiped from Trezor memory,
+and it is impossible to resume the session. Trezor returns to the initial state and
+all requests will return `InvalidSession`.
+
+There is no explicit way to leave a session and keep its data for later resumption.
+Instead, you can switch to a new session via `Initialize` with no arguments.
+
+At the moment, both T1 and TT allow for 10 sessions to exist at the same time. When a
+new session needs to be allocated and there is no space in the cache, the least recently
+used session is evicted.
+
+Sessions only exist in RAM and are lost when Trezor is disconnected.
+
+All commands are performed in the context of the current session, until one of the
+following happens:
+
+* Host calls `EndSession`. The current session is destroyed and Trezor returns to the
+ initial state.
+* Host calls `Initialize` with no arguments, or with an unknown `session_id`. A new
+ session is allocated and its id returned in the `Features` message.
+* Host calls `Initialize` with a known `session_id`. The specified session is resumed
+ and its `session_id` is returned in the `Features` message.
+* Trezor is disconnected.
+
+## Caveats
+
+* Sessions only exist on the protobuf message level. **There is no proper isolation.**
+ Multiple host applications can insert commands into each other's sessions.
+
+ It is recommended to send `Initialize` to resume a session immediately before each
+ flow. However, even this does not guarantee that another application doesn't insert
+ its own `Initialize` in the time it takes you to send the next command.
+
+ The reverse is also true: session management does not prevent other applications from
+ inserting commands under the currently active session (and therefore passphrase),
+ without knowledge of the session ID or the passphrase.
+
+* It is impossible to run complex flows concurrently. If an application is in the middle
+ of Bitcoin signing, sending `Initialize` will cancel the signing flow. Resuming the
+ appropriate session later will _not_ continue where it left off.
+
+## Examples
+
+Allocate a new session, perform a command, and end the session:
+```
+Initialize()
+---------> Features(..., session_id=AAAA)
+ <---------
+ ---<now in session AAAA>---
+Request
+---------> Response
+ <---------
+EndSession()
+---------> Success()
+ <---------
+ ---<now in no session>---
+```
+
+Allocate two new sessions, resume the first one later:
+```
+Initialize()
+---------> Features(..., session_id=AAAA)
+ <---------
+ ---<now in session AAAA>---
+Request
+---------> Response
+ <---------
+
+Initialize()
+---------> Features(..., session_id=BBBB)
+ <---------
+ ---<now in session BBBB>---
+Request
+---------> Response
+ <---------
+
+Initialize(session_id=AAAA)
+---------> Features(..., session_id=AAAA)
+ <---------
+ ---<now in session AAAA>---
+Request
+---------> Response
+ <---------
+```
+
+Attempt to resume session that is not in the cache:
+```
+Initialize()
+---------> Features(..., session_id=AAAA)
+ <---------
+ ---<now in session AAAA>---
+EndSession()
+---------> Success()
+ <---------
+ ---<now in no session>---
+Initialize(session_id=AAAA)
+---------> Features(..., session_id=BBBB)
+ <---------
+ ---<now in session BBBB>---
+```
diff --git a/docs/common/thp/images/layersTHP-v24.svg b/docs/common/thp/images/layersTHP-v24.svg
new file mode 100644
index 00000000..25e0884a
--- /dev/null
+++ b/docs/common/thp/images/layersTHP-v24.svg
@@ -0,0 +1,472 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="1233pt" height="313pt" viewBox="0 0 1233 313" version="1.1">
+<defs>
+<g>
+<symbol overflow="visible" id="glyph0-0">
+<path style="stroke:none;" d="M 0.640625 2.265625 L 0.640625 -9.015625 L 7.03125 -9.015625 L 7.03125 2.265625 Z M 1.359375 1.546875 L 6.328125 1.546875 L 6.328125 -8.296875 L 1.359375 -8.296875 Z M 1.359375 1.546875 "/>
+</symbol>
+<symbol overflow="visible" id="glyph0-1">
+<path style="stroke:none;" d="M 1.25 -9.328125 L 2.515625 -9.328125 L 2.515625 -1.0625 L 7.0625 -1.0625 L 7.0625 0 L 1.25 0 Z M 1.25 -9.328125 "/>
+</symbol>
+<symbol overflow="visible" id="glyph0-2">
+<path style="stroke:none;" d="M 4.84375 -8.234375 L 1.65625 -3.25 L 4.84375 -3.25 Z M 4.5 -9.328125 L 6.09375 -9.328125 L 6.09375 -3.25 L 7.421875 -3.25 L 7.421875 -2.203125 L 6.09375 -2.203125 L 6.09375 0 L 4.84375 0 L 4.84375 -2.203125 L 0.625 -2.203125 L 0.625 -3.421875 Z M 4.5 -9.328125 "/>
+</symbol>
+<symbol overflow="visible" id="glyph0-3">
+<path style="stroke:none;" d="M 5.1875 -5.03125 C 5.789062 -4.90625 6.257812 -4.632812 6.59375 -4.21875 C 6.9375 -3.8125 7.109375 -3.3125 7.109375 -2.71875 C 7.109375 -1.789062 6.789062 -1.070312 6.15625 -0.5625 C 5.53125 -0.0625 4.632812 0.1875 3.46875 0.1875 C 3.070312 0.1875 2.664062 0.144531 2.25 0.0625 C 1.84375 -0.0078125 1.414062 -0.125 0.96875 -0.28125 L 0.96875 -1.5 C 1.320312 -1.289062 1.707031 -1.132812 2.125 -1.03125 C 2.539062 -0.925781 2.976562 -0.875 3.4375 -0.875 C 4.226562 -0.875 4.828125 -1.03125 5.234375 -1.34375 C 5.648438 -1.65625 5.859375 -2.113281 5.859375 -2.71875 C 5.859375 -3.257812 5.664062 -3.6875 5.28125 -4 C 4.894531 -4.3125 4.359375 -4.46875 3.671875 -4.46875 L 2.59375 -4.46875 L 2.59375 -5.5 L 3.71875 -5.5 C 4.34375 -5.5 4.816406 -5.625 5.140625 -5.875 C 5.472656 -6.125 5.640625 -6.484375 5.640625 -6.953125 C 5.640625 -7.429688 5.46875 -7.796875 5.125 -8.046875 C 4.789062 -8.304688 4.304688 -8.4375 3.671875 -8.4375 C 3.328125 -8.4375 2.957031 -8.394531 2.5625 -8.3125 C 2.164062 -8.238281 1.726562 -8.125 1.25 -7.96875 L 1.25 -9.09375 C 1.726562 -9.226562 2.175781 -9.328125 2.59375 -9.390625 C 3.019531 -9.460938 3.414062 -9.5 3.78125 -9.5 C 4.738281 -9.5 5.492188 -9.28125 6.046875 -8.84375 C 6.609375 -8.40625 6.890625 -7.816406 6.890625 -7.078125 C 6.890625 -6.566406 6.742188 -6.128906 6.453125 -5.765625 C 6.160156 -5.410156 5.738281 -5.164062 5.1875 -5.03125 Z M 5.1875 -5.03125 "/>
+</symbol>
+<symbol overflow="visible" id="glyph0-4">
+<path style="stroke:none;" d="M 2.453125 -1.0625 L 6.859375 -1.0625 L 6.859375 0 L 0.9375 0 L 0.9375 -1.0625 C 1.414062 -1.5625 2.066406 -2.226562 2.890625 -3.0625 C 3.722656 -3.894531 4.242188 -4.429688 4.453125 -4.671875 C 4.859375 -5.128906 5.140625 -5.515625 5.296875 -5.828125 C 5.460938 -6.140625 5.546875 -6.445312 5.546875 -6.75 C 5.546875 -7.25 5.367188 -7.65625 5.015625 -7.96875 C 4.671875 -8.28125 4.21875 -8.4375 3.65625 -8.4375 C 3.257812 -8.4375 2.84375 -8.363281 2.40625 -8.21875 C 1.96875 -8.082031 1.5 -7.878906 1 -7.609375 L 1 -8.875 C 1.507812 -9.082031 1.984375 -9.238281 2.421875 -9.34375 C 2.867188 -9.445312 3.273438 -9.5 3.640625 -9.5 C 4.609375 -9.5 5.378906 -9.253906 5.953125 -8.765625 C 6.523438 -8.285156 6.8125 -7.640625 6.8125 -6.828125 C 6.8125 -6.453125 6.738281 -6.09375 6.59375 -5.75 C 6.445312 -5.40625 6.1875 -5 5.8125 -4.53125 C 5.707031 -4.40625 5.375 -4.054688 4.8125 -3.484375 C 4.257812 -2.910156 3.472656 -2.101562 2.453125 -1.0625 Z M 2.453125 -1.0625 "/>
+</symbol>
+<symbol overflow="visible" id="glyph0-5">
+<path style="stroke:none;" d="M 1.59375 -1.0625 L 3.65625 -1.0625 L 3.65625 -8.171875 L 1.40625 -7.734375 L 1.40625 -8.875 L 3.640625 -9.328125 L 4.90625 -9.328125 L 4.90625 -1.0625 L 6.953125 -1.0625 L 6.953125 0 L 1.59375 0 Z M 1.59375 -1.0625 "/>
+</symbol>
+<symbol overflow="visible" id="glyph0-6">
+<path style="stroke:none;" d="M 4.375 -8.078125 L 2.65625 -3.4375 L 6.09375 -3.4375 Z M 3.65625 -9.328125 L 5.09375 -9.328125 L 8.640625 0 L 7.328125 0 L 6.484375 -2.390625 L 2.28125 -2.390625 L 1.4375 0 L 0.09375 0 Z M 3.65625 -9.328125 "/>
+</symbol>
+<symbol overflow="visible" id="glyph0-7">
+<path style="stroke:none;" d="M 2.3125 -1.046875 L 2.3125 2.65625 L 1.15625 2.65625 L 1.15625 -7 L 2.3125 -7 L 2.3125 -5.9375 C 2.5625 -6.351562 2.867188 -6.660156 3.234375 -6.859375 C 3.597656 -7.066406 4.039062 -7.171875 4.5625 -7.171875 C 5.40625 -7.171875 6.09375 -6.832031 6.625 -6.15625 C 7.15625 -5.476562 7.421875 -4.59375 7.421875 -3.5 C 7.421875 -2.394531 7.15625 -1.503906 6.625 -0.828125 C 6.09375 -0.148438 5.40625 0.1875 4.5625 0.1875 C 4.039062 0.1875 3.597656 0.0859375 3.234375 -0.109375 C 2.867188 -0.316406 2.5625 -0.628906 2.3125 -1.046875 Z M 6.234375 -3.5 C 6.234375 -4.34375 6.054688 -5.003906 5.703125 -5.484375 C 5.359375 -5.960938 4.882812 -6.203125 4.28125 -6.203125 C 3.664062 -6.203125 3.179688 -5.960938 2.828125 -5.484375 C 2.484375 -5.003906 2.3125 -4.34375 2.3125 -3.5 C 2.3125 -2.644531 2.484375 -1.976562 2.828125 -1.5 C 3.179688 -1.019531 3.664062 -0.78125 4.28125 -0.78125 C 4.882812 -0.78125 5.359375 -1.019531 5.703125 -1.5 C 6.054688 -1.976562 6.234375 -2.644531 6.234375 -3.5 Z M 6.234375 -3.5 "/>
+</symbol>
+<symbol overflow="visible" id="glyph0-8">
+<path style="stroke:none;" d="M 1.203125 -9.71875 L 2.359375 -9.71875 L 2.359375 0 L 1.203125 0 Z M 1.203125 -9.71875 "/>
+</symbol>
+<symbol overflow="visible" id="glyph0-9">
+<path style="stroke:none;" d="M 1.203125 -7 L 2.359375 -7 L 2.359375 0 L 1.203125 0 Z M 1.203125 -9.71875 L 2.359375 -9.71875 L 2.359375 -8.265625 L 1.203125 -8.265625 Z M 1.203125 -9.71875 "/>
+</symbol>
+<symbol overflow="visible" id="glyph0-10">
+<path style="stroke:none;" d="M 6.25 -6.734375 L 6.25 -5.65625 C 5.914062 -5.832031 5.585938 -5.960938 5.265625 -6.046875 C 4.941406 -6.140625 4.613281 -6.1875 4.28125 -6.1875 C 3.53125 -6.1875 2.945312 -5.953125 2.53125 -5.484375 C 2.125 -5.015625 1.921875 -4.351562 1.921875 -3.5 C 1.921875 -2.644531 2.125 -1.976562 2.53125 -1.5 C 2.945312 -1.03125 3.53125 -0.796875 4.28125 -0.796875 C 4.613281 -0.796875 4.941406 -0.835938 5.265625 -0.921875 C 5.585938 -1.015625 5.914062 -1.148438 6.25 -1.328125 L 6.25 -0.265625 C 5.925781 -0.117188 5.59375 -0.0078125 5.25 0.0625 C 4.90625 0.144531 4.539062 0.1875 4.15625 0.1875 C 3.09375 0.1875 2.25 -0.144531 1.625 -0.8125 C 1.007812 -1.476562 0.703125 -2.375 0.703125 -3.5 C 0.703125 -4.632812 1.015625 -5.53125 1.640625 -6.1875 C 2.273438 -6.84375 3.132812 -7.171875 4.21875 -7.171875 C 4.570312 -7.171875 4.914062 -7.132812 5.25 -7.0625 C 5.59375 -6.988281 5.925781 -6.878906 6.25 -6.734375 Z M 6.25 -6.734375 "/>
+</symbol>
+<symbol overflow="visible" id="glyph0-11">
+<path style="stroke:none;" d="M 4.390625 -3.515625 C 3.460938 -3.515625 2.816406 -3.40625 2.453125 -3.1875 C 2.097656 -2.976562 1.921875 -2.617188 1.921875 -2.109375 C 1.921875 -1.703125 2.050781 -1.378906 2.3125 -1.140625 C 2.582031 -0.898438 2.953125 -0.78125 3.421875 -0.78125 C 4.054688 -0.78125 4.566406 -1.003906 4.953125 -1.453125 C 5.335938 -1.910156 5.53125 -2.515625 5.53125 -3.265625 L 5.53125 -3.515625 Z M 6.671875 -4 L 6.671875 0 L 5.53125 0 L 5.53125 -1.0625 C 5.269531 -0.632812 4.941406 -0.316406 4.546875 -0.109375 C 4.160156 0.0859375 3.679688 0.1875 3.109375 0.1875 C 2.390625 0.1875 1.816406 -0.015625 1.390625 -0.421875 C 0.972656 -0.828125 0.765625 -1.363281 0.765625 -2.03125 C 0.765625 -2.820312 1.023438 -3.414062 1.546875 -3.8125 C 2.078125 -4.21875 2.867188 -4.421875 3.921875 -4.421875 L 5.53125 -4.421875 L 5.53125 -4.53125 C 5.53125 -5.0625 5.351562 -5.46875 5 -5.75 C 4.65625 -6.039062 4.171875 -6.1875 3.546875 -6.1875 C 3.140625 -6.1875 2.75 -6.140625 2.375 -6.046875 C 2 -5.953125 1.632812 -5.8125 1.28125 -5.625 L 1.28125 -6.671875 C 1.695312 -6.835938 2.101562 -6.960938 2.5 -7.046875 C 2.894531 -7.128906 3.28125 -7.171875 3.65625 -7.171875 C 4.675781 -7.171875 5.429688 -6.90625 5.921875 -6.375 C 6.421875 -5.851562 6.671875 -5.0625 6.671875 -4 Z M 6.671875 -4 "/>
+</symbol>
+<symbol overflow="visible" id="glyph0-12">
+<path style="stroke:none;" d="M 2.34375 -8.984375 L 2.34375 -7 L 4.71875 -7 L 4.71875 -6.109375 L 2.34375 -6.109375 L 2.34375 -2.3125 C 2.34375 -1.738281 2.421875 -1.367188 2.578125 -1.203125 C 2.734375 -1.046875 3.050781 -0.96875 3.53125 -0.96875 L 4.71875 -0.96875 L 4.71875 0 L 3.53125 0 C 2.644531 0 2.03125 -0.164062 1.6875 -0.5 C 1.351562 -0.832031 1.1875 -1.4375 1.1875 -2.3125 L 1.1875 -6.109375 L 0.34375 -6.109375 L 0.34375 -7 L 1.1875 -7 L 1.1875 -8.984375 Z M 2.34375 -8.984375 "/>
+</symbol>
+<symbol overflow="visible" id="glyph0-13">
+<path style="stroke:none;" d="M 3.921875 -6.1875 C 3.304688 -6.1875 2.816406 -5.945312 2.453125 -5.46875 C 2.097656 -4.988281 1.921875 -4.332031 1.921875 -3.5 C 1.921875 -2.65625 2.097656 -1.992188 2.453125 -1.515625 C 2.804688 -1.035156 3.296875 -0.796875 3.921875 -0.796875 C 4.535156 -0.796875 5.019531 -1.035156 5.375 -1.515625 C 5.726562 -2.003906 5.90625 -2.664062 5.90625 -3.5 C 5.90625 -4.320312 5.726562 -4.972656 5.375 -5.453125 C 5.019531 -5.941406 4.535156 -6.1875 3.921875 -6.1875 Z M 3.921875 -7.171875 C 4.921875 -7.171875 5.703125 -6.84375 6.265625 -6.1875 C 6.835938 -5.539062 7.125 -4.644531 7.125 -3.5 C 7.125 -2.351562 6.835938 -1.453125 6.265625 -0.796875 C 5.703125 -0.140625 4.921875 0.1875 3.921875 0.1875 C 2.910156 0.1875 2.117188 -0.140625 1.546875 -0.796875 C 0.984375 -1.453125 0.703125 -2.351562 0.703125 -3.5 C 0.703125 -4.644531 0.984375 -5.539062 1.546875 -6.1875 C 2.117188 -6.84375 2.910156 -7.171875 3.921875 -7.171875 Z M 3.921875 -7.171875 "/>
+</symbol>
+<symbol overflow="visible" id="glyph0-14">
+<path style="stroke:none;" d="M 7.015625 -4.21875 L 7.015625 0 L 5.875 0 L 5.875 -4.1875 C 5.875 -4.851562 5.742188 -5.347656 5.484375 -5.671875 C 5.222656 -6.003906 4.835938 -6.171875 4.328125 -6.171875 C 3.703125 -6.171875 3.207031 -5.972656 2.84375 -5.578125 C 2.488281 -5.179688 2.3125 -4.640625 2.3125 -3.953125 L 2.3125 0 L 1.15625 0 L 1.15625 -7 L 2.3125 -7 L 2.3125 -5.90625 C 2.59375 -6.332031 2.914062 -6.648438 3.28125 -6.859375 C 3.65625 -7.066406 4.085938 -7.171875 4.578125 -7.171875 C 5.378906 -7.171875 5.984375 -6.921875 6.390625 -6.421875 C 6.804688 -5.921875 7.015625 -5.1875 7.015625 -4.21875 Z M 7.015625 -4.21875 "/>
+</symbol>
+<symbol overflow="visible" id="glyph0-15">
+<path style="stroke:none;" d="M 6.84375 -9.015625 L 6.84375 -7.796875 C 6.363281 -8.023438 5.910156 -8.191406 5.484375 -8.296875 C 5.066406 -8.410156 4.660156 -8.46875 4.265625 -8.46875 C 3.578125 -8.46875 3.046875 -8.332031 2.671875 -8.0625 C 2.296875 -7.800781 2.109375 -7.425781 2.109375 -6.9375 C 2.109375 -6.519531 2.234375 -6.207031 2.484375 -6 C 2.734375 -5.789062 3.203125 -5.625 3.890625 -5.5 L 4.65625 -5.34375 C 5.59375 -5.15625 6.285156 -4.835938 6.734375 -4.390625 C 7.179688 -3.941406 7.40625 -3.335938 7.40625 -2.578125 C 7.40625 -1.671875 7.101562 -0.984375 6.5 -0.515625 C 5.894531 -0.046875 5.007812 0.1875 3.84375 0.1875 C 3.394531 0.1875 2.921875 0.132812 2.421875 0.03125 C 1.929688 -0.0703125 1.414062 -0.21875 0.875 -0.40625 L 0.875 -1.71875 C 1.394531 -1.425781 1.898438 -1.207031 2.390625 -1.0625 C 2.878906 -0.914062 3.363281 -0.84375 3.84375 -0.84375 C 4.5625 -0.84375 5.113281 -0.984375 5.5 -1.265625 C 5.894531 -1.546875 6.09375 -1.953125 6.09375 -2.484375 C 6.09375 -2.941406 5.953125 -3.296875 5.671875 -3.546875 C 5.390625 -3.804688 4.925781 -4.003906 4.28125 -4.140625 L 3.515625 -4.28125 C 2.578125 -4.46875 1.894531 -4.757812 1.46875 -5.15625 C 1.050781 -5.5625 0.84375 -6.117188 0.84375 -6.828125 C 0.84375 -7.660156 1.132812 -8.3125 1.71875 -8.78125 C 2.300781 -9.257812 3.101562 -9.5 4.125 -9.5 C 4.5625 -9.5 5.003906 -9.457031 5.453125 -9.375 C 5.910156 -9.300781 6.375 -9.179688 6.84375 -9.015625 Z M 6.84375 -9.015625 "/>
+</symbol>
+<symbol overflow="visible" id="glyph0-16">
+<path style="stroke:none;" d="M 7.1875 -3.78125 L 7.1875 -3.21875 L 1.90625 -3.21875 C 1.957031 -2.425781 2.195312 -1.820312 2.625 -1.40625 C 3.050781 -1 3.644531 -0.796875 4.40625 -0.796875 C 4.84375 -0.796875 5.269531 -0.847656 5.6875 -0.953125 C 6.101562 -1.066406 6.515625 -1.226562 6.921875 -1.4375 L 6.921875 -0.359375 C 6.515625 -0.179688 6.09375 -0.046875 5.65625 0.046875 C 5.21875 0.140625 4.78125 0.1875 4.34375 0.1875 C 3.21875 0.1875 2.328125 -0.132812 1.671875 -0.78125 C 1.023438 -1.4375 0.703125 -2.320312 0.703125 -3.4375 C 0.703125 -4.582031 1.007812 -5.488281 1.625 -6.15625 C 2.25 -6.832031 3.085938 -7.171875 4.140625 -7.171875 C 5.078125 -7.171875 5.816406 -6.863281 6.359375 -6.25 C 6.910156 -5.644531 7.1875 -4.820312 7.1875 -3.78125 Z M 6.046875 -4.125 C 6.035156 -4.75 5.859375 -5.25 5.515625 -5.625 C 5.171875 -6 4.71875 -6.1875 4.15625 -6.1875 C 3.507812 -6.1875 2.992188 -6.003906 2.609375 -5.640625 C 2.222656 -5.285156 2 -4.78125 1.9375 -4.125 Z M 6.046875 -4.125 "/>
+</symbol>
+<symbol overflow="visible" id="glyph0-17">
+<path style="stroke:none;" d="M 1.09375 -2.765625 L 1.09375 -7 L 2.234375 -7 L 2.234375 -2.8125 C 2.234375 -2.144531 2.363281 -1.644531 2.625 -1.3125 C 2.882812 -0.976562 3.269531 -0.8125 3.78125 -0.8125 C 4.40625 -0.8125 4.894531 -1.007812 5.25 -1.40625 C 5.613281 -1.800781 5.796875 -2.34375 5.796875 -3.03125 L 5.796875 -7 L 6.953125 -7 L 6.953125 0 L 5.796875 0 L 5.796875 -1.078125 C 5.515625 -0.648438 5.191406 -0.332031 4.828125 -0.125 C 4.460938 0.0820312 4.035156 0.1875 3.546875 0.1875 C 2.742188 0.1875 2.132812 -0.0625 1.71875 -0.5625 C 1.300781 -1.0625 1.09375 -1.796875 1.09375 -2.765625 Z M 3.984375 -7.171875 Z M 3.984375 -7.171875 "/>
+</symbol>
+<symbol overflow="visible" id="glyph0-18">
+<path style="stroke:none;" d="M 5.265625 -5.921875 C 5.128906 -5.992188 4.984375 -6.046875 4.828125 -6.078125 C 4.679688 -6.117188 4.519531 -6.140625 4.34375 -6.140625 C 3.6875 -6.140625 3.179688 -5.925781 2.828125 -5.5 C 2.484375 -5.082031 2.3125 -4.476562 2.3125 -3.6875 L 2.3125 0 L 1.15625 0 L 1.15625 -7 L 2.3125 -7 L 2.3125 -5.90625 C 2.5625 -6.332031 2.878906 -6.648438 3.265625 -6.859375 C 3.648438 -7.066406 4.117188 -7.171875 4.671875 -7.171875 C 4.753906 -7.171875 4.84375 -7.164062 4.9375 -7.15625 C 5.03125 -7.144531 5.132812 -7.128906 5.25 -7.109375 Z M 5.265625 -5.921875 "/>
+</symbol>
+<symbol overflow="visible" id="glyph0-19">
+<path style="stroke:none;" d=""/>
+</symbol>
+<symbol overflow="visible" id="glyph0-20">
+<path style="stroke:none;" d="M 7.015625 -4.21875 L 7.015625 0 L 5.875 0 L 5.875 -4.1875 C 5.875 -4.851562 5.742188 -5.347656 5.484375 -5.671875 C 5.222656 -6.003906 4.835938 -6.171875 4.328125 -6.171875 C 3.703125 -6.171875 3.207031 -5.972656 2.84375 -5.578125 C 2.488281 -5.179688 2.3125 -4.640625 2.3125 -3.953125 L 2.3125 0 L 1.15625 0 L 1.15625 -9.71875 L 2.3125 -9.71875 L 2.3125 -5.90625 C 2.59375 -6.332031 2.914062 -6.648438 3.28125 -6.859375 C 3.65625 -7.066406 4.085938 -7.171875 4.578125 -7.171875 C 5.378906 -7.171875 5.984375 -6.921875 6.390625 -6.421875 C 6.804688 -5.921875 7.015625 -5.1875 7.015625 -4.21875 Z M 7.015625 -4.21875 "/>
+</symbol>
+<symbol overflow="visible" id="glyph0-21">
+<path style="stroke:none;" d="M -0.03125 -9.328125 L 7.859375 -9.328125 L 7.859375 -8.265625 L 4.546875 -8.265625 L 4.546875 0 L 3.28125 0 L 3.28125 -8.265625 L -0.03125 -8.265625 Z M -0.03125 -9.328125 "/>
+</symbol>
+<symbol overflow="visible" id="glyph0-22">
+<path style="stroke:none;" d="M 5.671875 -6.796875 L 5.671875 -5.703125 C 5.347656 -5.867188 5.007812 -5.992188 4.65625 -6.078125 C 4.300781 -6.160156 3.9375 -6.203125 3.5625 -6.203125 C 3 -6.203125 2.570312 -6.113281 2.28125 -5.9375 C 2 -5.769531 1.859375 -5.507812 1.859375 -5.15625 C 1.859375 -4.882812 1.957031 -4.671875 2.15625 -4.515625 C 2.363281 -4.367188 2.773438 -4.226562 3.390625 -4.09375 L 3.78125 -4 C 4.601562 -3.832031 5.1875 -3.585938 5.53125 -3.265625 C 5.875 -2.941406 6.046875 -2.5 6.046875 -1.9375 C 6.046875 -1.28125 5.785156 -0.757812 5.265625 -0.375 C 4.753906 0 4.050781 0.1875 3.15625 0.1875 C 2.78125 0.1875 2.390625 0.148438 1.984375 0.078125 C 1.578125 0.00390625 1.144531 -0.101562 0.6875 -0.25 L 0.6875 -1.4375 C 1.113281 -1.21875 1.53125 -1.050781 1.9375 -0.9375 C 2.351562 -0.832031 2.765625 -0.78125 3.171875 -0.78125 C 3.710938 -0.78125 4.128906 -0.875 4.421875 -1.0625 C 4.710938 -1.25 4.859375 -1.507812 4.859375 -1.84375 C 4.859375 -2.15625 4.753906 -2.394531 4.546875 -2.5625 C 4.335938 -2.726562 3.875 -2.890625 3.15625 -3.046875 L 2.765625 -3.140625 C 2.046875 -3.285156 1.53125 -3.515625 1.21875 -3.828125 C 0.90625 -4.140625 0.75 -4.566406 0.75 -5.109375 C 0.75 -5.765625 0.976562 -6.269531 1.4375 -6.625 C 1.90625 -6.988281 2.570312 -7.171875 3.4375 -7.171875 C 3.851562 -7.171875 4.25 -7.140625 4.625 -7.078125 C 5 -7.015625 5.347656 -6.921875 5.671875 -6.796875 Z M 5.671875 -6.796875 "/>
+</symbol>
+<symbol overflow="visible" id="glyph0-23">
+<path style="stroke:none;" d="M 2.515625 -8.296875 L 2.515625 -1.03125 L 4.046875 -1.03125 C 5.328125 -1.03125 6.265625 -1.320312 6.859375 -1.90625 C 7.460938 -2.488281 7.765625 -3.410156 7.765625 -4.671875 C 7.765625 -5.921875 7.460938 -6.835938 6.859375 -7.421875 C 6.265625 -8.003906 5.328125 -8.296875 4.046875 -8.296875 Z M 1.25 -9.328125 L 3.84375 -9.328125 C 5.65625 -9.328125 6.984375 -8.953125 7.828125 -8.203125 C 8.671875 -7.453125 9.09375 -6.273438 9.09375 -4.671875 C 9.09375 -3.066406 8.664062 -1.882812 7.8125 -1.125 C 6.96875 -0.375 5.644531 0 3.84375 0 L 1.25 0 Z M 1.25 -9.328125 "/>
+</symbol>
+<symbol overflow="visible" id="glyph0-24">
+<path style="stroke:none;" d="M 4.75 -9.71875 L 4.75 -8.765625 L 3.65625 -8.765625 C 3.238281 -8.765625 2.945312 -8.679688 2.78125 -8.515625 C 2.625 -8.347656 2.546875 -8.046875 2.546875 -7.609375 L 2.546875 -7 L 4.4375 -7 L 4.4375 -6.109375 L 2.546875 -6.109375 L 2.546875 0 L 1.390625 0 L 1.390625 -6.109375 L 0.296875 -6.109375 L 0.296875 -7 L 1.390625 -7 L 1.390625 -7.484375 C 1.390625 -8.265625 1.570312 -8.832031 1.9375 -9.1875 C 2.300781 -9.539062 2.875 -9.71875 3.65625 -9.71875 Z M 4.75 -9.71875 "/>
+</symbol>
+<symbol overflow="visible" id="glyph0-25">
+<path style="stroke:none;" d="M 4.125 0.65625 C 3.789062 1.488281 3.46875 2.03125 3.15625 2.28125 C 2.851562 2.53125 2.445312 2.65625 1.9375 2.65625 L 1.015625 2.65625 L 1.015625 1.703125 L 1.6875 1.703125 C 2 1.703125 2.242188 1.625 2.421875 1.46875 C 2.597656 1.320312 2.789062 0.96875 3 0.40625 L 3.21875 -0.109375 L 0.375 -7 L 1.59375 -7 L 3.78125 -1.53125 L 5.96875 -7 L 7.1875 -7 Z M 4.125 0.65625 "/>
+</symbol>
+<symbol overflow="visible" id="glyph1-0">
+<path style="stroke:none;" d="M 0.5 1.796875 L 0.5 -7.15625 L 5.578125 -7.15625 L 5.578125 1.796875 Z M 1.078125 1.234375 L 5.015625 1.234375 L 5.015625 -6.59375 L 1.078125 -6.59375 Z M 1.078125 1.234375 "/>
+</symbol>
+<symbol overflow="visible" id="glyph1-1">
+<path style="stroke:none;" d="M 3.46875 -6.421875 L 2.109375 -2.734375 L 4.828125 -2.734375 Z M 2.90625 -7.40625 L 4.046875 -7.40625 L 6.859375 0 L 5.828125 0 L 5.140625 -1.90625 L 1.8125 -1.90625 L 1.140625 0 L 0.078125 0 Z M 2.90625 -7.40625 "/>
+</symbol>
+<symbol overflow="visible" id="glyph1-2">
+<path style="stroke:none;" d="M 1 -7.40625 L 5.671875 -7.40625 L 5.671875 -6.5625 L 2 -6.5625 L 2 -4.375 L 5.53125 -4.375 L 5.53125 -3.53125 L 2 -3.53125 L 2 -0.84375 L 5.765625 -0.84375 L 5.765625 0 L 1 0 Z M 1 -7.40625 "/>
+</symbol>
+<symbol overflow="visible" id="glyph1-3">
+<path style="stroke:none;" d="M 2 -6.578125 L 2 -0.828125 L 3.203125 -0.828125 C 4.222656 -0.828125 4.972656 -1.054688 5.453125 -1.515625 C 5.929688 -1.984375 6.171875 -2.710938 6.171875 -3.703125 C 6.171875 -4.703125 5.929688 -5.429688 5.453125 -5.890625 C 4.972656 -6.347656 4.222656 -6.578125 3.203125 -6.578125 Z M 1 -7.40625 L 3.0625 -7.40625 C 4.488281 -7.40625 5.535156 -7.101562 6.203125 -6.5 C 6.878906 -5.90625 7.21875 -4.972656 7.21875 -3.703125 C 7.21875 -2.429688 6.878906 -1.492188 6.203125 -0.890625 C 5.535156 -0.296875 4.488281 0 3.0625 0 L 1 0 Z M 1 -7.40625 "/>
+</symbol>
+<symbol overflow="visible" id="glyph1-4">
+<path style="stroke:none;" d="M 5.171875 1.6875 L 5.171875 2.390625 L -0.09375 2.390625 L -0.09375 1.6875 Z M 5.171875 1.6875 "/>
+</symbol>
+<symbol overflow="visible" id="glyph1-5">
+<path style="stroke:none;" d="M -0.03125 -7.40625 L 6.234375 -7.40625 L 6.234375 -6.5625 L 3.609375 -6.5625 L 3.609375 0 L 2.59375 0 L 2.59375 -6.5625 L -0.03125 -6.5625 Z M -0.03125 -7.40625 "/>
+</symbol>
+<symbol overflow="visible" id="glyph1-6">
+<path style="stroke:none;" d="M 6.046875 -1.0625 L 6.046875 -3.046875 L 4.40625 -3.046875 L 4.40625 -3.875 L 7.03125 -3.875 L 7.03125 -0.6875 C 6.644531 -0.414062 6.21875 -0.207031 5.75 -0.0625 C 5.289062 0.0703125 4.796875 0.140625 4.265625 0.140625 C 3.109375 0.140625 2.203125 -0.195312 1.546875 -0.875 C 0.890625 -1.550781 0.5625 -2.488281 0.5625 -3.6875 C 0.5625 -4.90625 0.890625 -5.847656 1.546875 -6.515625 C 2.203125 -7.191406 3.109375 -7.53125 4.265625 -7.53125 C 4.742188 -7.53125 5.203125 -7.472656 5.640625 -7.359375 C 6.078125 -7.242188 6.476562 -7.066406 6.84375 -6.828125 L 6.84375 -5.765625 C 6.46875 -6.078125 6.070312 -6.3125 5.65625 -6.46875 C 5.238281 -6.632812 4.800781 -6.71875 4.34375 -6.71875 C 3.4375 -6.71875 2.753906 -6.460938 2.296875 -5.953125 C 1.847656 -5.453125 1.625 -4.695312 1.625 -3.6875 C 1.625 -2.695312 1.847656 -1.945312 2.296875 -1.4375 C 2.753906 -0.925781 3.4375 -0.671875 4.34375 -0.671875 C 4.695312 -0.671875 5.015625 -0.703125 5.296875 -0.765625 C 5.578125 -0.828125 5.828125 -0.925781 6.046875 -1.0625 Z M 6.046875 -1.0625 "/>
+</symbol>
+<symbol overflow="visible" id="glyph1-7">
+<path style="stroke:none;" d="M 1 -7.40625 L 2.34375 -7.40625 L 5.625 -1.203125 L 5.625 -7.40625 L 6.59375 -7.40625 L 6.59375 0 L 5.25 0 L 1.96875 -6.1875 L 1.96875 0 L 1 0 Z M 1 -7.40625 "/>
+</symbol>
+<symbol overflow="visible" id="glyph1-8">
+<path style="stroke:none;" d="M 6.546875 -6.828125 L 6.546875 -5.78125 C 6.203125 -6.09375 5.835938 -6.328125 5.453125 -6.484375 C 5.078125 -6.640625 4.675781 -6.71875 4.25 -6.71875 C 3.394531 -6.71875 2.742188 -6.457031 2.296875 -5.9375 C 1.847656 -5.414062 1.625 -4.664062 1.625 -3.6875 C 1.625 -2.71875 1.847656 -1.972656 2.296875 -1.453125 C 2.742188 -0.929688 3.394531 -0.671875 4.25 -0.671875 C 4.675781 -0.671875 5.078125 -0.75 5.453125 -0.90625 C 5.835938 -1.0625 6.203125 -1.296875 6.546875 -1.609375 L 6.546875 -0.5625 C 6.191406 -0.332031 5.816406 -0.15625 5.421875 -0.03125 C 5.035156 0.0820312 4.625 0.140625 4.1875 0.140625 C 3.0625 0.140625 2.175781 -0.203125 1.53125 -0.890625 C 0.882812 -1.578125 0.5625 -2.507812 0.5625 -3.6875 C 0.5625 -4.882812 0.882812 -5.820312 1.53125 -6.5 C 2.175781 -7.1875 3.0625 -7.53125 4.1875 -7.53125 C 4.625 -7.53125 5.039062 -7.472656 5.4375 -7.359375 C 5.832031 -7.242188 6.203125 -7.066406 6.546875 -6.828125 Z M 6.546875 -6.828125 "/>
+</symbol>
+<symbol overflow="visible" id="glyph1-9">
+<path style="stroke:none;" d="M 4.515625 -3.46875 C 4.722656 -3.394531 4.925781 -3.238281 5.125 -3 C 5.332031 -2.757812 5.539062 -2.429688 5.75 -2.015625 L 6.765625 0 L 5.6875 0 L 4.734375 -1.90625 C 4.492188 -2.394531 4.257812 -2.71875 4.03125 -2.875 C 3.800781 -3.039062 3.488281 -3.125 3.09375 -3.125 L 2 -3.125 L 2 0 L 1 0 L 1 -7.40625 L 3.265625 -7.40625 C 4.109375 -7.40625 4.738281 -7.226562 5.15625 -6.875 C 5.570312 -6.519531 5.78125 -5.984375 5.78125 -5.265625 C 5.78125 -4.804688 5.671875 -4.421875 5.453125 -4.109375 C 5.234375 -3.804688 4.921875 -3.59375 4.515625 -3.46875 Z M 2 -6.578125 L 2 -3.953125 L 3.265625 -3.953125 C 3.742188 -3.953125 4.101562 -4.0625 4.34375 -4.28125 C 4.59375 -4.507812 4.71875 -4.835938 4.71875 -5.265625 C 4.71875 -5.703125 4.59375 -6.03125 4.34375 -6.25 C 4.101562 -6.46875 3.742188 -6.578125 3.265625 -6.578125 Z M 2 -6.578125 "/>
+</symbol>
+<symbol overflow="visible" id="glyph1-10">
+<path style="stroke:none;" d="M -0.015625 -7.40625 L 1.0625 -7.40625 L 3.109375 -4.359375 L 5.140625 -7.40625 L 6.21875 -7.40625 L 3.609375 -3.53125 L 3.609375 0 L 2.59375 0 L 2.59375 -3.53125 Z M -0.015625 -7.40625 "/>
+</symbol>
+<symbol overflow="visible" id="glyph1-11">
+<path style="stroke:none;" d="M 2 -6.578125 L 2 -3.796875 L 3.265625 -3.796875 C 3.722656 -3.796875 4.078125 -3.914062 4.328125 -4.15625 C 4.585938 -4.394531 4.71875 -4.738281 4.71875 -5.1875 C 4.71875 -5.632812 4.585938 -5.976562 4.328125 -6.21875 C 4.078125 -6.457031 3.722656 -6.578125 3.265625 -6.578125 Z M 1 -7.40625 L 3.265625 -7.40625 C 4.085938 -7.40625 4.710938 -7.21875 5.140625 -6.84375 C 5.566406 -6.46875 5.78125 -5.914062 5.78125 -5.1875 C 5.78125 -4.457031 5.566406 -3.90625 5.140625 -3.53125 C 4.710938 -3.15625 4.085938 -2.96875 3.265625 -2.96875 L 2 -2.96875 L 2 0 L 1 0 Z M 1 -7.40625 "/>
+</symbol>
+<symbol overflow="visible" id="glyph1-12">
+<path style="stroke:none;" d="M 1 -7.40625 L 2.484375 -7.40625 L 4.375 -2.359375 L 6.28125 -7.40625 L 7.765625 -7.40625 L 7.765625 0 L 6.796875 0 L 6.796875 -6.5 L 4.890625 -1.421875 L 3.875 -1.421875 L 1.96875 -6.5 L 1.96875 0 L 1 0 Z M 1 -7.40625 "/>
+</symbol>
+<symbol overflow="visible" id="glyph1-13">
+<path style="stroke:none;" d="M 5.4375 -7.15625 L 5.4375 -6.1875 C 5.050781 -6.363281 4.691406 -6.492188 4.359375 -6.578125 C 4.023438 -6.671875 3.695312 -6.71875 3.375 -6.71875 C 2.832031 -6.71875 2.410156 -6.613281 2.109375 -6.40625 C 1.816406 -6.195312 1.671875 -5.894531 1.671875 -5.5 C 1.671875 -5.175781 1.769531 -4.929688 1.96875 -4.765625 C 2.164062 -4.597656 2.539062 -4.460938 3.09375 -4.359375 L 3.6875 -4.234375 C 4.4375 -4.085938 4.988281 -3.835938 5.34375 -3.484375 C 5.695312 -3.128906 5.875 -2.648438 5.875 -2.046875 C 5.875 -1.328125 5.632812 -0.78125 5.15625 -0.40625 C 4.675781 -0.0390625 3.972656 0.140625 3.046875 0.140625 C 2.691406 0.140625 2.316406 0.0976562 1.921875 0.015625 C 1.523438 -0.0546875 1.117188 -0.171875 0.703125 -0.328125 L 0.703125 -1.359375 C 1.109375 -1.128906 1.503906 -0.957031 1.890625 -0.84375 C 2.285156 -0.726562 2.671875 -0.671875 3.046875 -0.671875 C 3.617188 -0.671875 4.054688 -0.78125 4.359375 -1 C 4.671875 -1.226562 4.828125 -1.550781 4.828125 -1.96875 C 4.828125 -2.332031 4.71875 -2.613281 4.5 -2.8125 C 4.28125 -3.019531 3.914062 -3.175781 3.40625 -3.28125 L 2.796875 -3.40625 C 2.046875 -3.550781 1.503906 -3.78125 1.171875 -4.09375 C 0.835938 -4.414062 0.671875 -4.859375 0.671875 -5.421875 C 0.671875 -6.078125 0.898438 -6.59375 1.359375 -6.96875 C 1.816406 -7.34375 2.453125 -7.53125 3.265625 -7.53125 C 3.609375 -7.53125 3.960938 -7.5 4.328125 -7.4375 C 4.691406 -7.375 5.0625 -7.28125 5.4375 -7.15625 Z M 5.4375 -7.15625 "/>
+</symbol>
+<symbol overflow="visible" id="glyph1-14">
+<path style="stroke:none;" d="M 4 -6.71875 C 3.269531 -6.71875 2.691406 -6.445312 2.265625 -5.90625 C 1.835938 -5.363281 1.625 -4.625 1.625 -3.6875 C 1.625 -2.757812 1.835938 -2.023438 2.265625 -1.484375 C 2.691406 -0.941406 3.269531 -0.671875 4 -0.671875 C 4.726562 -0.671875 5.304688 -0.941406 5.734375 -1.484375 C 6.160156 -2.023438 6.375 -2.757812 6.375 -3.6875 C 6.375 -4.625 6.160156 -5.363281 5.734375 -5.90625 C 5.304688 -6.445312 4.726562 -6.71875 4 -6.71875 Z M 4 -7.53125 C 5.039062 -7.53125 5.867188 -7.179688 6.484375 -6.484375 C 7.109375 -5.796875 7.421875 -4.863281 7.421875 -3.6875 C 7.421875 -2.519531 7.109375 -1.585938 6.484375 -0.890625 C 5.867188 -0.203125 5.039062 0.140625 4 0.140625 C 2.957031 0.140625 2.125 -0.203125 1.5 -0.890625 C 0.875 -1.585938 0.5625 -2.519531 0.5625 -3.6875 C 0.5625 -4.863281 0.875 -5.796875 1.5 -6.484375 C 2.125 -7.179688 2.957031 -7.53125 4 -7.53125 Z M 4 -7.53125 "/>
+</symbol>
+<symbol overflow="visible" id="glyph1-15">
+<path style="stroke:none;" d="M 2 -3.53125 L 2 -0.828125 L 3.609375 -0.828125 C 4.140625 -0.828125 4.535156 -0.9375 4.796875 -1.15625 C 5.054688 -1.382812 5.1875 -1.726562 5.1875 -2.1875 C 5.1875 -2.644531 5.054688 -2.984375 4.796875 -3.203125 C 4.535156 -3.421875 4.140625 -3.53125 3.609375 -3.53125 Z M 2 -6.578125 L 2 -4.34375 L 3.484375 -4.34375 C 3.972656 -4.34375 4.335938 -4.4375 4.578125 -4.625 C 4.816406 -4.8125 4.9375 -5.09375 4.9375 -5.46875 C 4.9375 -5.84375 4.816406 -6.117188 4.578125 -6.296875 C 4.335938 -6.484375 3.972656 -6.578125 3.484375 -6.578125 Z M 1 -7.40625 L 3.5625 -7.40625 C 4.320312 -7.40625 4.90625 -7.242188 5.3125 -6.921875 C 5.726562 -6.609375 5.9375 -6.160156 5.9375 -5.578125 C 5.9375 -5.117188 5.832031 -4.753906 5.625 -4.484375 C 5.414062 -4.222656 5.101562 -4.054688 4.6875 -3.984375 C 5.1875 -3.878906 5.570312 -3.660156 5.84375 -3.328125 C 6.113281 -2.992188 6.25 -2.578125 6.25 -2.078125 C 6.25 -1.410156 6.023438 -0.894531 5.578125 -0.53125 C 5.128906 -0.175781 4.488281 0 3.65625 0 L 1 0 Z M 1 -7.40625 "/>
+</symbol>
+<symbol overflow="visible" id="glyph1-16">
+<path style="stroke:none;" d="M 0.875 -7.40625 L 1.890625 -7.40625 L 1.890625 -2.90625 C 1.890625 -2.113281 2.03125 -1.539062 2.3125 -1.1875 C 2.601562 -0.84375 3.070312 -0.671875 3.71875 -0.671875 C 4.363281 -0.671875 4.828125 -0.84375 5.109375 -1.1875 C 5.398438 -1.539062 5.546875 -2.113281 5.546875 -2.90625 L 5.546875 -7.40625 L 6.546875 -7.40625 L 6.546875 -2.78125 C 6.546875 -1.8125 6.304688 -1.082031 5.828125 -0.59375 C 5.359375 -0.101562 4.65625 0.140625 3.71875 0.140625 C 2.78125 0.140625 2.070312 -0.101562 1.59375 -0.59375 C 1.113281 -1.082031 0.875 -1.8125 0.875 -2.78125 Z M 0.875 -7.40625 "/>
+</symbol>
+<symbol overflow="visible" id="glyph1-17">
+<path style="stroke:none;" d="M 1 -7.40625 L 5.25 -7.40625 L 5.25 -6.5625 L 2 -6.5625 L 2 -4.375 L 4.9375 -4.375 L 4.9375 -3.53125 L 2 -3.53125 L 2 0 L 1 0 Z M 1 -7.40625 "/>
+</symbol>
+<symbol overflow="visible" id="glyph1-18">
+<path style="stroke:none;" d="M 1 -7.40625 L 2 -7.40625 L 2 -4.28125 L 5.328125 -7.40625 L 6.609375 -7.40625 L 2.9375 -3.953125 L 6.875 0 L 5.546875 0 L 2 -3.5625 L 2 0 L 1 0 Z M 1 -7.40625 "/>
+</symbol>
+<symbol overflow="visible" id="glyph1-19">
+<path style="stroke:none;" d="M 1 -7.40625 L 2 -7.40625 L 2 -0.84375 L 5.609375 -0.84375 L 5.609375 0 L 1 0 Z M 1 -7.40625 "/>
+</symbol>
+<symbol overflow="visible" id="glyph1-20">
+<path style="stroke:none;" d="M 1 -7.40625 L 2 -7.40625 L 2 0 L 1 0 Z M 1 -7.40625 "/>
+</symbol>
+<symbol overflow="visible" id="glyph1-21">
+<path style="stroke:none;" d="M 1.265625 -0.84375 L 2.890625 -0.84375 L 2.890625 -6.484375 L 1.109375 -6.140625 L 1.109375 -7.046875 L 2.890625 -7.40625 L 3.890625 -7.40625 L 3.890625 -0.84375 L 5.53125 -0.84375 L 5.53125 0 L 1.265625 0 Z M 1.265625 -0.84375 "/>
+</symbol>
+<symbol overflow="visible" id="glyph1-22">
+<path style="stroke:none;" d=""/>
+</symbol>
+<symbol overflow="visible" id="glyph1-23">
+<path style="stroke:none;" d="M 1.953125 -0.84375 L 5.4375 -0.84375 L 5.4375 0 L 0.75 0 L 0.75 -0.84375 C 1.125 -1.238281 1.640625 -1.765625 2.296875 -2.421875 C 2.953125 -3.085938 3.363281 -3.515625 3.53125 -3.703125 C 3.851562 -4.066406 4.078125 -4.375 4.203125 -4.625 C 4.335938 -4.875 4.40625 -5.117188 4.40625 -5.359375 C 4.40625 -5.753906 4.265625 -6.070312 3.984375 -6.3125 C 3.710938 -6.5625 3.351562 -6.6875 2.90625 -6.6875 C 2.59375 -6.6875 2.257812 -6.632812 1.90625 -6.53125 C 1.5625 -6.425781 1.191406 -6.257812 0.796875 -6.03125 L 0.796875 -7.046875 C 1.203125 -7.210938 1.578125 -7.332031 1.921875 -7.40625 C 2.273438 -7.488281 2.597656 -7.53125 2.890625 -7.53125 C 3.648438 -7.53125 4.257812 -7.335938 4.71875 -6.953125 C 5.175781 -6.578125 5.40625 -6.066406 5.40625 -5.421875 C 5.40625 -5.117188 5.347656 -4.832031 5.234375 -4.5625 C 5.117188 -4.289062 4.910156 -3.96875 4.609375 -3.59375 C 4.523438 -3.5 4.257812 -3.222656 3.8125 -2.765625 C 3.375 -2.304688 2.753906 -1.664062 1.953125 -0.84375 Z M 1.953125 -0.84375 "/>
+</symbol>
+<symbol overflow="visible" id="glyph1-24">
+<path style="stroke:none;" d="M 3.359375 -4.09375 C 2.898438 -4.09375 2.539062 -3.9375 2.28125 -3.625 C 2.019531 -3.320312 1.890625 -2.90625 1.890625 -2.375 C 1.890625 -1.84375 2.019531 -1.421875 2.28125 -1.109375 C 2.539062 -0.804688 2.898438 -0.65625 3.359375 -0.65625 C 3.804688 -0.65625 4.160156 -0.804688 4.421875 -1.109375 C 4.679688 -1.421875 4.8125 -1.84375 4.8125 -2.375 C 4.8125 -2.90625 4.679688 -3.320312 4.421875 -3.625 C 4.160156 -3.9375 3.804688 -4.09375 3.359375 -4.09375 Z M 5.34375 -7.234375 L 5.34375 -6.328125 C 5.09375 -6.441406 4.835938 -6.53125 4.578125 -6.59375 C 4.328125 -6.65625 4.070312 -6.6875 3.8125 -6.6875 C 3.15625 -6.6875 2.648438 -6.460938 2.296875 -6.015625 C 1.953125 -5.578125 1.753906 -4.90625 1.703125 -4 C 1.898438 -4.289062 2.144531 -4.507812 2.4375 -4.65625 C 2.726562 -4.8125 3.050781 -4.890625 3.40625 -4.890625 C 4.15625 -4.890625 4.742188 -4.664062 5.171875 -4.21875 C 5.609375 -3.769531 5.828125 -3.15625 5.828125 -2.375 C 5.828125 -1.613281 5.597656 -1.003906 5.140625 -0.546875 C 4.691406 -0.0859375 4.097656 0.140625 3.359375 0.140625 C 2.492188 0.140625 1.832031 -0.1875 1.375 -0.84375 C 0.925781 -1.5 0.703125 -2.445312 0.703125 -3.6875 C 0.703125 -4.863281 0.976562 -5.796875 1.53125 -6.484375 C 2.09375 -7.179688 2.84375 -7.53125 3.78125 -7.53125 C 4.03125 -7.53125 4.28125 -7.503906 4.53125 -7.453125 C 4.789062 -7.410156 5.0625 -7.335938 5.34375 -7.234375 Z M 5.34375 -7.234375 "/>
+</symbol>
+</g>
+</defs>
+<g id="surface37191">
+<rect x="0" y="0" width="1233" height="313" style="fill:rgb(100%,100%,100%);fill-opacity:1;stroke:none;"/>
+<path style="fill-rule:evenodd;fill:rgb(100%,100%,100%);fill-opacity:1;stroke-width:0.1;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(0%,0%,0%);stroke-opacity:1;stroke-miterlimit:10;" d="M 12.5 1.5 L 34.5 1.5 L 34.5 2.5 L 12.5 2.5 Z M 12.5 1.5 " transform="matrix(20,0,0,20,12,172)"/>
+<g style="fill:rgb(0%,0%,0%);fill-opacity:1;">
+ <use xlink:href="#glyph0-1" x="32" y="102.005968"/>
+ <use xlink:href="#glyph0-2" x="39.222222" y="102.005968"/>
+</g>
+<g style="fill:rgb(0%,0%,0%);fill-opacity:1;">
+ <use xlink:href="#glyph0-1" x="32" y="152.005968"/>
+ <use xlink:href="#glyph0-3" x="39.222222" y="152.005968"/>
+</g>
+<g style="fill:rgb(0%,0%,0%);fill-opacity:1;">
+ <use xlink:href="#glyph0-1" x="32" y="202.005968"/>
+ <use xlink:href="#glyph0-4" x="39.222222" y="202.005968"/>
+</g>
+<g style="fill:rgb(0%,0%,0%);fill-opacity:1;">
+ <use xlink:href="#glyph0-1" x="32" y="252.005968"/>
+ <use xlink:href="#glyph0-5" x="39.222222" y="252.005968"/>
+</g>
+<g style="fill:rgb(0%,0%,0%);fill-opacity:1;">
+ <use xlink:href="#glyph0-6" x="82" y="102.005968"/>
+ <use xlink:href="#glyph0-7" x="90.888889" y="102.005968"/>
+ <use xlink:href="#glyph0-7" x="98.944444" y="102.005968"/>
+ <use xlink:href="#glyph0-8" x="107" y="102.005968"/>
+ <use xlink:href="#glyph0-9" x="110.611111" y="102.005968"/>
+ <use xlink:href="#glyph0-10" x="114.222222" y="102.005968"/>
+ <use xlink:href="#glyph0-11" x="121.166667" y="102.005968"/>
+ <use xlink:href="#glyph0-12" x="128.944444" y="102.005968"/>
+ <use xlink:href="#glyph0-9" x="133.944444" y="102.005968"/>
+ <use xlink:href="#glyph0-13" x="137.555556" y="102.005968"/>
+ <use xlink:href="#glyph0-14" x="145.333333" y="102.005968"/>
+</g>
+<g style="fill:rgb(0%,0%,0%);fill-opacity:1;">
+ <use xlink:href="#glyph0-15" x="82" y="152.005968"/>
+ <use xlink:href="#glyph0-16" x="90.055556" y="152.005968"/>
+ <use xlink:href="#glyph0-10" x="97.833333" y="152.005968"/>
+ <use xlink:href="#glyph0-17" x="104.777778" y="152.005968"/>
+ <use xlink:href="#glyph0-18" x="112.833333" y="152.005968"/>
+ <use xlink:href="#glyph0-16" x="117.833333" y="152.005968"/>
+ <use xlink:href="#glyph0-19" x="125.611111" y="152.005968"/>
+ <use xlink:href="#glyph0-10" x="129.777778" y="152.005968"/>
+ <use xlink:href="#glyph0-20" x="136.722222" y="152.005968"/>
+ <use xlink:href="#glyph0-11" x="144.777778" y="152.005968"/>
+ <use xlink:href="#glyph0-14" x="152.555556" y="152.005968"/>
+ <use xlink:href="#glyph0-14" x="160.611111" y="152.005968"/>
+ <use xlink:href="#glyph0-16" x="168.666667" y="152.005968"/>
+ <use xlink:href="#glyph0-8" x="176.444444" y="152.005968"/>
+</g>
+<g style="fill:rgb(0%,0%,0%);fill-opacity:1;">
+ <use xlink:href="#glyph0-21" x="82" y="202.005968"/>
+ <use xlink:href="#glyph0-18" x="87.833333" y="202.005968"/>
+ <use xlink:href="#glyph0-11" x="93.111111" y="202.005968"/>
+ <use xlink:href="#glyph0-14" x="100.888889" y="202.005968"/>
+ <use xlink:href="#glyph0-22" x="108.944444" y="202.005968"/>
+ <use xlink:href="#glyph0-7" x="115.611111" y="202.005968"/>
+ <use xlink:href="#glyph0-13" x="123.666667" y="202.005968"/>
+ <use xlink:href="#glyph0-18" x="131.444444" y="202.005968"/>
+ <use xlink:href="#glyph0-12" x="136.722222" y="202.005968"/>
+</g>
+<g style="fill:rgb(0%,0%,0%);fill-opacity:1;">
+ <use xlink:href="#glyph0-23" x="82" y="252.005968"/>
+ <use xlink:href="#glyph0-11" x="91.722222" y="252.005968"/>
+ <use xlink:href="#glyph0-12" x="99.5" y="252.005968"/>
+ <use xlink:href="#glyph0-11" x="104.5" y="252.005968"/>
+ <use xlink:href="#glyph0-19" x="112.277778" y="252.005968"/>
+ <use xlink:href="#glyph0-12" x="116.444444" y="252.005968"/>
+ <use xlink:href="#glyph0-18" x="121.444444" y="252.005968"/>
+ <use xlink:href="#glyph0-11" x="126.722222" y="252.005968"/>
+ <use xlink:href="#glyph0-14" x="134.5" y="252.005968"/>
+ <use xlink:href="#glyph0-22" x="142.555556" y="252.005968"/>
+ <use xlink:href="#glyph0-24" x="149.222222" y="252.005968"/>
+ <use xlink:href="#glyph0-16" x="153.666667" y="252.005968"/>
+ <use xlink:href="#glyph0-18" x="161.444444" y="252.005968"/>
+</g>
+<path style="fill:none;stroke-width:0.1;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(0%,0%,0%);stroke-opacity:1;stroke-dasharray:0.1,0.1;stroke-miterlimit:10;" d="M 0 -8 L 11 -8 L 11 6.5 L 0 6.5 L 0 -8 " transform="matrix(20,0,0,20,12,172)"/>
+<g style="fill:rgb(0%,0%,0%);fill-opacity:1;">
+ <use xlink:href="#glyph0-1" x="82" y="52.005968"/>
+ <use xlink:href="#glyph0-11" x="89.222222" y="52.005968"/>
+ <use xlink:href="#glyph0-25" x="97" y="52.005968"/>
+ <use xlink:href="#glyph0-16" x="104.5" y="52.005968"/>
+ <use xlink:href="#glyph0-18" x="112.277778" y="52.005968"/>
+ <use xlink:href="#glyph0-22" x="117.555556" y="52.005968"/>
+</g>
+<path style="fill-rule:evenodd;fill:rgb(100%,100%,100%);fill-opacity:1;stroke-width:0.1;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(0%,0%,0%);stroke-opacity:1;stroke-miterlimit:10;" d="M 20.5 -1 L 50.5 -1 L 50.5 -0.000000000000001776 L 20.5 -0.000000000000001776 Z M 20.5 -1 " transform="matrix(20,0,0,20,12,172)"/>
+<g style="fill:rgb(0%,0%,0%);fill-opacity:1;">
+ <use xlink:href="#glyph1-1" x="945.476563" y="165.532444"/>
+ <use xlink:href="#glyph1-2" x="952.421007" y="165.532444"/>
+ <use xlink:href="#glyph1-1" x="958.809896" y="165.532444"/>
+ <use xlink:href="#glyph1-3" x="965.75434" y="165.532444"/>
+ <use xlink:href="#glyph1-4" x="973.532118" y="165.532444"/>
+ <use xlink:href="#glyph1-5" x="978.532118" y="165.532444"/>
+ <use xlink:href="#glyph1-1" x="984.087674" y="165.532444"/>
+ <use xlink:href="#glyph1-6" x="990.75434" y="165.532444"/>
+</g>
+<path style="fill:none;stroke-width:0.1;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(0%,0%,0%);stroke-opacity:1;stroke-miterlimit:10;" d="M 45.5 -1 L 45.5 -0.000000000000001776 " transform="matrix(20,0,0,20,12,172)"/>
+<g style="fill:rgb(0%,0%,0%);fill-opacity:1;">
+ <use xlink:href="#glyph1-2" x="626.316406" y="165.532444"/>
+ <use xlink:href="#glyph1-7" x="632.705295" y="165.532444"/>
+ <use xlink:href="#glyph1-8" x="640.205295" y="165.532444"/>
+ <use xlink:href="#glyph1-9" x="647.427517" y="165.532444"/>
+ <use xlink:href="#glyph1-10" x="653.816406" y="165.532444"/>
+ <use xlink:href="#glyph1-11" x="659.927517" y="165.532444"/>
+ <use xlink:href="#glyph1-5" x="666.038628" y="165.532444"/>
+ <use xlink:href="#glyph1-2" x="672.14974" y="165.532444"/>
+ <use xlink:href="#glyph1-3" x="678.538628" y="165.532444"/>
+ <use xlink:href="#glyph1-4" x="686.316406" y="165.532444"/>
+ <use xlink:href="#glyph1-3" x="691.316406" y="165.532444"/>
+ <use xlink:href="#glyph1-1" x="699.094184" y="165.532444"/>
+ <use xlink:href="#glyph1-5" x="705.205295" y="165.532444"/>
+ <use xlink:href="#glyph1-1" x="710.760851" y="165.532444"/>
+</g>
+<path style="fill-rule:evenodd;fill:rgb(100%,100%,100%);fill-opacity:1;stroke-width:0.1;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(0%,0%,0%);stroke-opacity:1;stroke-miterlimit:10;" d="M 20.5 -3.5 L 45.5 -3.5 L 45.5 -2.5 L 20.5 -2.5 Z M 20.5 -3.5 " transform="matrix(20,0,0,20,12,172)"/>
+<g style="fill:rgb(0%,0%,0%);fill-opacity:1;">
+ <use xlink:href="#glyph1-12" x="475.613281" y="115.532444"/>
+ <use xlink:href="#glyph1-13" x="484.50217" y="115.532444"/>
+ <use xlink:href="#glyph1-6" x="490.891059" y="115.532444"/>
+ <use xlink:href="#glyph1-4" x="498.668837" y="115.532444"/>
+ <use xlink:href="#glyph1-5" x="503.668837" y="115.532444"/>
+ <use xlink:href="#glyph1-10" x="509.779948" y="115.532444"/>
+ <use xlink:href="#glyph1-11" x="515.891059" y="115.532444"/>
+ <use xlink:href="#glyph1-2" x="522.00217" y="115.532444"/>
+</g>
+<path style="fill:none;stroke-width:0.1;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(0%,0%,0%);stroke-opacity:1;stroke-miterlimit:10;" d="M 26.5 -3.5 L 26.5 -2.5 " transform="matrix(20,0,0,20,12,172)"/>
+<g style="fill:rgb(0%,0%,0%);fill-opacity:1;">
+ <use xlink:href="#glyph1-11" x="649.089844" y="115.532444"/>
+ <use xlink:href="#glyph1-9" x="655.200955" y="115.532444"/>
+ <use xlink:href="#glyph1-14" x="662.145399" y="115.532444"/>
+ <use xlink:href="#glyph1-5" x="670.200955" y="115.532444"/>
+ <use xlink:href="#glyph1-14" x="676.312066" y="115.532444"/>
+ <use xlink:href="#glyph1-15" x="684.367622" y="115.532444"/>
+ <use xlink:href="#glyph1-16" x="691.312066" y="115.532444"/>
+ <use xlink:href="#glyph1-17" x="698.812066" y="115.532444"/>
+ <use xlink:href="#glyph1-4" x="704.645399" y="115.532444"/>
+ <use xlink:href="#glyph1-2" x="709.645399" y="115.532444"/>
+ <use xlink:href="#glyph1-7" x="716.034288" y="115.532444"/>
+ <use xlink:href="#glyph1-8" x="723.534288" y="115.532444"/>
+ <use xlink:href="#glyph1-14" x="730.75651" y="115.532444"/>
+ <use xlink:href="#glyph1-3" x="738.812066" y="115.532444"/>
+ <use xlink:href="#glyph1-2" x="746.589844" y="115.532444"/>
+ <use xlink:href="#glyph1-3" x="752.978733" y="115.532444"/>
+ <use xlink:href="#glyph1-4" x="760.75651" y="115.532444"/>
+ <use xlink:href="#glyph1-12" x="765.75651" y="115.532444"/>
+ <use xlink:href="#glyph1-2" x="774.645399" y="115.532444"/>
+ <use xlink:href="#glyph1-13" x="781.034288" y="115.532444"/>
+ <use xlink:href="#glyph1-13" x="787.423177" y="115.532444"/>
+ <use xlink:href="#glyph1-1" x="794.089844" y="115.532444"/>
+ <use xlink:href="#glyph1-6" x="800.75651" y="115.532444"/>
+ <use xlink:href="#glyph1-2" x="808.534288" y="115.532444"/>
+</g>
+<path style="fill:none;stroke-width:0.05;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(0%,0%,0%);stroke-opacity:1;stroke-dasharray:0.05,0.05;stroke-miterlimit:10;" d="M 34.5 4 L 34.5 2.5 " transform="matrix(20,0,0,20,12,172)"/>
+<path style="fill:none;stroke-width:0.05;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(0%,0%,0%);stroke-opacity:1;stroke-dasharray:0.05,0.05;stroke-miterlimit:10;" d="M 12.5 4 L 12.5 2.5 " transform="matrix(20,0,0,20,12,172)"/>
+<path style="fill:none;stroke-width:0.05;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(0%,0%,0%);stroke-opacity:1;stroke-dasharray:0.05,0.05;stroke-miterlimit:10;" d="M 45.5 -1 L 45.5 -2.5 " transform="matrix(20,0,0,20,12,172)"/>
+<path style="fill:none;stroke-width:0.1;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(0%,0%,0%);stroke-opacity:1;stroke-dasharray:0.2,0.2;stroke-miterlimit:10;" d="M 0 5 L 60.5 5 " transform="matrix(20,0,0,20,12,172)"/>
+<path style="fill:none;stroke-width:0.1;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(0%,0%,0%);stroke-opacity:1;stroke-dasharray:0.2,0.2;stroke-miterlimit:10;" d="M 0 -0.000000000000001776 L 60.5 -0.000000000000001776 " transform="matrix(20,0,0,20,12,172)"/>
+<path style="fill:none;stroke-width:0.1;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(0%,0%,0%);stroke-opacity:1;stroke-dasharray:0.2,0.2;stroke-miterlimit:10;" d="M 0 -2.5 L 60.5 -2.5 " transform="matrix(20,0,0,20,12,172)"/>
+<path style="fill:none;stroke-width:0.1;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(0%,0%,0%);stroke-opacity:1;stroke-dasharray:0.2,0.2;stroke-miterlimit:10;" d="M 0 -5 L 60.5 -5 " transform="matrix(20,0,0,20,12,172)"/>
+<path style="fill-rule:evenodd;fill:rgb(100%,100%,100%);fill-opacity:1;stroke-width:0.1;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(0%,0%,0%);stroke-opacity:1;stroke-miterlimit:10;" d="M 12.5 4 L 34.5 4 L 34.5 5 L 12.5 5 Z M 12.5 4 " transform="matrix(20,0,0,20,12,172)"/>
+<g style="fill:rgb(0%,0%,0%);fill-opacity:1;">
+ <use xlink:href="#glyph1-11" x="462.703125" y="265.387912"/>
+ <use xlink:href="#glyph1-1" x="468.258681" y="265.387912"/>
+ <use xlink:href="#glyph1-8" x="474.925347" y="265.387912"/>
+ <use xlink:href="#glyph1-18" x="482.147569" y="265.387912"/>
+ <use xlink:href="#glyph1-2" x="488.814236" y="265.387912"/>
+ <use xlink:href="#glyph1-5" x="495.203125" y="265.387912"/>
+</g>
+<path style="fill:none;stroke-width:0.1;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(0%,0%,0%);stroke-opacity:1;stroke-dasharray:0.2,0.2;stroke-miterlimit:10;" d="M 0 2.5 L 60.5 2.5 " transform="matrix(20,0,0,20,12,172)"/>
+<path style="fill:none;stroke-width:0.1;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(0%,0%,0%);stroke-opacity:1;stroke-miterlimit:10;" d="M 20.5 1.5 L 20.5 2.5 " transform="matrix(20,0,0,20,12,172)"/>
+<g style="fill:rgb(0%,0%,0%);fill-opacity:1;">
+ <use xlink:href="#glyph1-19" x="392.292969" y="215.532444"/>
+ <use xlink:href="#glyph1-2" x="397.848524" y="215.532444"/>
+ <use xlink:href="#glyph1-7" x="404.237413" y="215.532444"/>
+</g>
+<g style="fill:rgb(0%,0%,0%);fill-opacity:1;">
+ <use xlink:href="#glyph1-11" x="517.429688" y="215.532444"/>
+ <use xlink:href="#glyph1-1" x="522.985243" y="215.532444"/>
+ <use xlink:href="#glyph1-8" x="529.65191" y="215.532444"/>
+ <use xlink:href="#glyph1-18" x="536.874132" y="215.532444"/>
+ <use xlink:href="#glyph1-2" x="543.540799" y="215.532444"/>
+ <use xlink:href="#glyph1-5" x="549.929688" y="215.532444"/>
+ <use xlink:href="#glyph1-4" x="556.040799" y="215.532444"/>
+ <use xlink:href="#glyph1-11" x="561.040799" y="215.532444"/>
+ <use xlink:href="#glyph1-1" x="566.596354" y="215.532444"/>
+ <use xlink:href="#glyph1-10" x="572.707465" y="215.532444"/>
+ <use xlink:href="#glyph1-19" x="578.818576" y="215.532444"/>
+ <use xlink:href="#glyph1-14" x="584.096354" y="215.532444"/>
+ <use xlink:href="#glyph1-1" x="591.874132" y="215.532444"/>
+ <use xlink:href="#glyph1-3" x="598.818576" y="215.532444"/>
+</g>
+<path style="fill:none;stroke-width:0.1;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(0%,0%,0%);stroke-opacity:1;stroke-miterlimit:10;" d="M 18.5 1.5 L 18.5 2.5 " transform="matrix(20,0,0,20,12,172)"/>
+<path style="fill:none;stroke-width:0.1;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(0%,0%,0%);stroke-opacity:1;stroke-miterlimit:10;" d="M 16.5 1.5 L 16.5 2.5 " transform="matrix(20,0,0,20,12,172)"/>
+<g style="fill:rgb(0%,0%,0%);fill-opacity:1;">
+ <use xlink:href="#glyph1-8" x="352.976562" y="215.532444"/>
+ <use xlink:href="#glyph1-20" x="360.198785" y="215.532444"/>
+ <use xlink:href="#glyph1-3" x="363.25434" y="215.532444"/>
+</g>
+<path style="fill:none;stroke-width:0.05;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(0%,0%,0%);stroke-opacity:1;stroke-dasharray:0.05,0.05;stroke-miterlimit:10;" d="M 36.5 4 L 36.5 2.5 " transform="matrix(20,0,0,20,12,172)"/>
+<path style="fill:none;stroke-width:0.05;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(0%,0%,0%);stroke-opacity:1;stroke-dasharray:0.05,0.05;stroke-miterlimit:10;" d="M 58.5 4 L 58.5 2.5 " transform="matrix(20,0,0,20,12,172)"/>
+<path style="fill:none;stroke-width:0.05;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(0%,0%,0%);stroke-opacity:1;stroke-dasharray:0.05,0.05;stroke-miterlimit:10;" d="M 20.5 1.5 L 20.5 -0.000000000000001776 " transform="matrix(20,0,0,20,12,172)"/>
+<path style="fill:none;stroke-width:0.05;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(0%,0%,0%);stroke-opacity:1;stroke-dasharray:0.05,0.05;stroke-miterlimit:10;" d="M 34.5 1.5 L 34.5 -0.000000000000001776 " transform="matrix(20,0,0,20,12,172)"/>
+<path style="fill-rule:evenodd;fill:rgb(100%,100%,100%);fill-opacity:1;stroke-width:0.1;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(0%,0%,0%);stroke-opacity:1;stroke-miterlimit:10;" d="M 36.5 1.5 L 58.5 1.5 L 58.5 2.5 L 36.5 2.5 Z M 36.5 1.5 " transform="matrix(20,0,0,20,12,172)"/>
+<path style="fill:none;stroke-width:0.1;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(0%,0%,0%);stroke-opacity:1;stroke-miterlimit:10;" d="M 42.5 1.5 L 42.5 2.5 " transform="matrix(20,0,0,20,12,172)"/>
+<g style="fill:rgb(0%,0%,0%);fill-opacity:1;">
+ <use xlink:href="#glyph1-8" x="832.976563" y="215.532444"/>
+ <use xlink:href="#glyph1-20" x="840.198785" y="215.532444"/>
+ <use xlink:href="#glyph1-3" x="843.25434" y="215.532444"/>
+</g>
+<path style="fill:none;stroke-width:0.1;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(0%,0%,0%);stroke-opacity:1;stroke-miterlimit:10;" d="M 40.5 1.5 L 40.5 2.5 " transform="matrix(20,0,0,20,12,172)"/>
+<g style="fill:rgb(0%,0%,0%);fill-opacity:1;">
+ <use xlink:href="#glyph1-11" x="977.429688" y="215.532444"/>
+ <use xlink:href="#glyph1-1" x="982.985243" y="215.532444"/>
+ <use xlink:href="#glyph1-8" x="989.65191" y="215.532444"/>
+ <use xlink:href="#glyph1-18" x="996.874132" y="215.532444"/>
+ <use xlink:href="#glyph1-2" x="1003.540799" y="215.532444"/>
+ <use xlink:href="#glyph1-5" x="1009.929688" y="215.532444"/>
+ <use xlink:href="#glyph1-4" x="1016.040799" y="215.532444"/>
+ <use xlink:href="#glyph1-11" x="1021.040799" y="215.532444"/>
+ <use xlink:href="#glyph1-1" x="1026.596354" y="215.532444"/>
+ <use xlink:href="#glyph1-10" x="1032.707465" y="215.532444"/>
+ <use xlink:href="#glyph1-19" x="1038.818576" y="215.532444"/>
+ <use xlink:href="#glyph1-14" x="1044.096354" y="215.532444"/>
+ <use xlink:href="#glyph1-1" x="1051.874132" y="215.532444"/>
+ <use xlink:href="#glyph1-3" x="1058.818576" y="215.532444"/>
+</g>
+<path style="fill:none;stroke-width:0.05;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(0%,0%,0%);stroke-opacity:1;stroke-dasharray:0.05,0.05;stroke-miterlimit:10;" d="M 42.5 1.5 L 34.5 -0.000000000000001776 " transform="matrix(20,0,0,20,12,172)"/>
+<path style="fill:none;stroke-width:0.1;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(100%,100%,100%);stroke-opacity:1;stroke-dasharray:0.1,0.1;stroke-miterlimit:10;" d="M -0.5 -8.5 L 61 -8.5 L 61 7 L -0.5 7 L -0.5 -8.5 " transform="matrix(20,0,0,20,12,172)"/>
+<g style="fill:rgb(0%,0%,0%);fill-opacity:1;">
+ <use xlink:href="#glyph1-8" x="274.089844" y="215.532444"/>
+ <use xlink:href="#glyph1-5" x="281.312066" y="215.532444"/>
+ <use xlink:href="#glyph1-9" x="287.423177" y="215.532444"/>
+ <use xlink:href="#glyph1-19" x="294.367622" y="215.532444"/>
+ <use xlink:href="#glyph1-4" x="299.923177" y="215.532444"/>
+ <use xlink:href="#glyph1-15" x="304.923177" y="215.532444"/>
+ <use xlink:href="#glyph1-10" x="311.312066" y="215.532444"/>
+ <use xlink:href="#glyph1-5" x="317.423177" y="215.532444"/>
+ <use xlink:href="#glyph1-2" x="323.534288" y="215.532444"/>
+</g>
+<g style="fill:rgb(0%,0%,0%);fill-opacity:1;">
+ <use xlink:href="#glyph1-8" x="754.089844" y="215.532444"/>
+ <use xlink:href="#glyph1-5" x="761.312066" y="215.532444"/>
+ <use xlink:href="#glyph1-9" x="767.423177" y="215.532444"/>
+ <use xlink:href="#glyph1-19" x="774.367622" y="215.532444"/>
+ <use xlink:href="#glyph1-4" x="779.923177" y="215.532444"/>
+ <use xlink:href="#glyph1-15" x="784.923177" y="215.532444"/>
+ <use xlink:href="#glyph1-10" x="791.312066" y="215.532444"/>
+ <use xlink:href="#glyph1-5" x="797.423177" y="215.532444"/>
+ <use xlink:href="#glyph1-2" x="803.534288" y="215.532444"/>
+</g>
+<path style="fill:none;stroke-width:0.05;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(0%,0%,0%);stroke-opacity:1;stroke-dasharray:0.05,0.05;stroke-miterlimit:10;" d="M 58.5 1.5 L 50.5 -0.000000000000001776 " transform="matrix(20,0,0,20,12,172)"/>
+<path style="fill-rule:evenodd;fill:rgb(100%,100%,100%);fill-opacity:1;stroke-width:0.1;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(0%,0%,0%);stroke-opacity:1;stroke-miterlimit:10;" d="M 36.5 4 L 58.5 4 L 58.5 5 L 36.5 5 Z M 36.5 4 " transform="matrix(20,0,0,20,12,172)"/>
+<g style="fill:rgb(0%,0%,0%);fill-opacity:1;">
+ <use xlink:href="#glyph1-11" x="942.703125" y="265.387912"/>
+ <use xlink:href="#glyph1-1" x="948.258681" y="265.387912"/>
+ <use xlink:href="#glyph1-8" x="954.925347" y="265.387912"/>
+ <use xlink:href="#glyph1-18" x="962.147569" y="265.387912"/>
+ <use xlink:href="#glyph1-2" x="968.814236" y="265.387912"/>
+ <use xlink:href="#glyph1-5" x="975.203125" y="265.387912"/>
+</g>
+<g style="fill:rgb(0%,0%,0%);fill-opacity:1;">
+ <use xlink:href="#glyph1-21" x="293.679688" y="195.532444"/>
+ <use xlink:href="#glyph1-22" x="300.068576" y="195.532444"/>
+ <use xlink:href="#glyph1-15" x="303.40191" y="195.532444"/>
+</g>
+<g style="fill:rgb(0%,0%,0%);fill-opacity:1;">
+ <use xlink:href="#glyph1-23" x="353.679688" y="195.532444"/>
+ <use xlink:href="#glyph1-22" x="360.068576" y="195.532444"/>
+ <use xlink:href="#glyph1-15" x="363.40191" y="195.532444"/>
+</g>
+<g style="fill:rgb(0%,0%,0%);fill-opacity:1;">
+ <use xlink:href="#glyph1-23" x="393.679688" y="195.532444"/>
+ <use xlink:href="#glyph1-22" x="400.068576" y="195.532444"/>
+ <use xlink:href="#glyph1-15" x="403.40191" y="195.532444"/>
+</g>
+<g style="fill:rgb(0%,0%,0%);fill-opacity:1;">
+ <use xlink:href="#glyph1-23" x="493.679688" y="95.532444"/>
+ <use xlink:href="#glyph1-22" x="500.068576" y="95.532444"/>
+ <use xlink:href="#glyph1-15" x="503.40191" y="95.532444"/>
+</g>
+<g style="fill:rgb(0%,0%,0%);fill-opacity:1;">
+ <use xlink:href="#glyph1-21" x="960.476563" y="145.532444"/>
+ <use xlink:href="#glyph1-24" x="966.865451" y="145.532444"/>
+ <use xlink:href="#glyph1-22" x="973.25434" y="145.532444"/>
+ <use xlink:href="#glyph1-15" x="976.587674" y="145.532444"/>
+</g>
+<path style=" stroke:none;fill-rule:evenodd;fill:rgb(100%,100%,100%);fill-opacity:1;" d="M 830.425781 186.085938 L 853.574219 186.085938 L 853.574219 197.914062 L 830.425781 197.914062 Z M 830.425781 186.085938 "/>
+<g style="fill:rgb(0%,0%,0%);fill-opacity:1;">
+ <use xlink:href="#glyph1-22" x="830.339844" y="195.532444"/>
+ <use xlink:href="#glyph1-23" x="833.673177" y="195.532444"/>
+ <use xlink:href="#glyph1-22" x="840.062066" y="195.532444"/>
+ <use xlink:href="#glyph1-15" x="843.395399" y="195.532444"/>
+ <use xlink:href="#glyph1-22" x="850.339844" y="195.532444"/>
+</g>
+<path style=" stroke:none;fill-rule:evenodd;fill:rgb(100%,100%,100%);fill-opacity:1;" d="M 770.425781 186.085938 L 793.574219 186.085938 L 793.574219 197.914062 L 770.425781 197.914062 Z M 770.425781 186.085938 "/>
+<g style="fill:rgb(0%,0%,0%);fill-opacity:1;">
+ <use xlink:href="#glyph1-22" x="770.339844" y="195.532444"/>
+ <use xlink:href="#glyph1-21" x="773.673177" y="195.532444"/>
+ <use xlink:href="#glyph1-22" x="780.062066" y="195.532444"/>
+ <use xlink:href="#glyph1-15" x="783.395399" y="195.532444"/>
+ <use xlink:href="#glyph1-22" x="790.339844" y="195.532444"/>
+</g>
+<g style="fill:rgb(0%,0%,0%);fill-opacity:1;">
+ <use xlink:href="#glyph1-13" x="433.40625" y="115.387912"/>
+ <use xlink:href="#glyph1-20" x="439.795139" y="115.387912"/>
+ <use xlink:href="#glyph1-3" x="442.850694" y="115.387912"/>
+</g>
+<path style="fill:none;stroke-width:0.1;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(0%,0%,0%);stroke-opacity:1;stroke-miterlimit:10;" d="M 22.5 -3.5 L 22.5 -2.5 " transform="matrix(20,0,0,20,12,172)"/>
+<g style="fill:rgb(0%,0%,0%);fill-opacity:1;">
+ <use xlink:href="#glyph1-21" x="433.679688" y="95.532444"/>
+ <use xlink:href="#glyph1-22" x="440.068576" y="95.532444"/>
+ <use xlink:href="#glyph1-15" x="443.40191" y="95.532444"/>
+</g>
+<path style="fill:none;stroke-width:0.05;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(0%,0%,0%);stroke-opacity:1;stroke-dasharray:0.05,0.05;stroke-miterlimit:10;" d="M 20.5 -1 L 20.5 -2.5 " transform="matrix(20,0,0,20,12,172)"/>
+</g>
+</svg>
diff --git a/docs/common/thp/images/layersTHP-v42.svg b/docs/common/thp/images/layersTHP-v42.svg
new file mode 100644
index 00000000..18ba9d0b
--- /dev/null
+++ b/docs/common/thp/images/layersTHP-v42.svg
@@ -0,0 +1,808 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="1603pt" height="513pt" viewBox="0 0 1603 513" version="1.1">
+<defs>
+<g>
+<symbol overflow="visible" id="glyph0-0">
+<path style="stroke:none;" d="M 0.640625 2.265625 L 0.640625 -9.015625 L 7.03125 -9.015625 L 7.03125 2.265625 Z M 1.359375 1.546875 L 6.328125 1.546875 L 6.328125 -8.296875 L 1.359375 -8.296875 Z M 1.359375 1.546875 "/>
+</symbol>
+<symbol overflow="visible" id="glyph0-1">
+<path style="stroke:none;" d="M 1.25 -9.328125 L 2.515625 -9.328125 L 2.515625 -1.0625 L 7.0625 -1.0625 L 7.0625 0 L 1.25 0 Z M 1.25 -9.328125 "/>
+</symbol>
+<symbol overflow="visible" id="glyph0-2">
+<path style="stroke:none;" d="M 4.84375 -8.234375 L 1.65625 -3.25 L 4.84375 -3.25 Z M 4.5 -9.328125 L 6.09375 -9.328125 L 6.09375 -3.25 L 7.421875 -3.25 L 7.421875 -2.203125 L 6.09375 -2.203125 L 6.09375 0 L 4.84375 0 L 4.84375 -2.203125 L 0.625 -2.203125 L 0.625 -3.421875 Z M 4.5 -9.328125 "/>
+</symbol>
+<symbol overflow="visible" id="glyph0-3">
+<path style="stroke:none;" d="M 5.1875 -5.03125 C 5.789062 -4.90625 6.257812 -4.632812 6.59375 -4.21875 C 6.9375 -3.8125 7.109375 -3.3125 7.109375 -2.71875 C 7.109375 -1.789062 6.789062 -1.070312 6.15625 -0.5625 C 5.53125 -0.0625 4.632812 0.1875 3.46875 0.1875 C 3.070312 0.1875 2.664062 0.144531 2.25 0.0625 C 1.84375 -0.0078125 1.414062 -0.125 0.96875 -0.28125 L 0.96875 -1.5 C 1.320312 -1.289062 1.707031 -1.132812 2.125 -1.03125 C 2.539062 -0.925781 2.976562 -0.875 3.4375 -0.875 C 4.226562 -0.875 4.828125 -1.03125 5.234375 -1.34375 C 5.648438 -1.65625 5.859375 -2.113281 5.859375 -2.71875 C 5.859375 -3.257812 5.664062 -3.6875 5.28125 -4 C 4.894531 -4.3125 4.359375 -4.46875 3.671875 -4.46875 L 2.59375 -4.46875 L 2.59375 -5.5 L 3.71875 -5.5 C 4.34375 -5.5 4.816406 -5.625 5.140625 -5.875 C 5.472656 -6.125 5.640625 -6.484375 5.640625 -6.953125 C 5.640625 -7.429688 5.46875 -7.796875 5.125 -8.046875 C 4.789062 -8.304688 4.304688 -8.4375 3.671875 -8.4375 C 3.328125 -8.4375 2.957031 -8.394531 2.5625 -8.3125 C 2.164062 -8.238281 1.726562 -8.125 1.25 -7.96875 L 1.25 -9.09375 C 1.726562 -9.226562 2.175781 -9.328125 2.59375 -9.390625 C 3.019531 -9.460938 3.414062 -9.5 3.78125 -9.5 C 4.738281 -9.5 5.492188 -9.28125 6.046875 -8.84375 C 6.609375 -8.40625 6.890625 -7.816406 6.890625 -7.078125 C 6.890625 -6.566406 6.742188 -6.128906 6.453125 -5.765625 C 6.160156 -5.410156 5.738281 -5.164062 5.1875 -5.03125 Z M 5.1875 -5.03125 "/>
+</symbol>
+<symbol overflow="visible" id="glyph0-4">
+<path style="stroke:none;" d="M 2.453125 -1.0625 L 6.859375 -1.0625 L 6.859375 0 L 0.9375 0 L 0.9375 -1.0625 C 1.414062 -1.5625 2.066406 -2.226562 2.890625 -3.0625 C 3.722656 -3.894531 4.242188 -4.429688 4.453125 -4.671875 C 4.859375 -5.128906 5.140625 -5.515625 5.296875 -5.828125 C 5.460938 -6.140625 5.546875 -6.445312 5.546875 -6.75 C 5.546875 -7.25 5.367188 -7.65625 5.015625 -7.96875 C 4.671875 -8.28125 4.21875 -8.4375 3.65625 -8.4375 C 3.257812 -8.4375 2.84375 -8.363281 2.40625 -8.21875 C 1.96875 -8.082031 1.5 -7.878906 1 -7.609375 L 1 -8.875 C 1.507812 -9.082031 1.984375 -9.238281 2.421875 -9.34375 C 2.867188 -9.445312 3.273438 -9.5 3.640625 -9.5 C 4.609375 -9.5 5.378906 -9.253906 5.953125 -8.765625 C 6.523438 -8.285156 6.8125 -7.640625 6.8125 -6.828125 C 6.8125 -6.453125 6.738281 -6.09375 6.59375 -5.75 C 6.445312 -5.40625 6.1875 -5 5.8125 -4.53125 C 5.707031 -4.40625 5.375 -4.054688 4.8125 -3.484375 C 4.257812 -2.910156 3.472656 -2.101562 2.453125 -1.0625 Z M 2.453125 -1.0625 "/>
+</symbol>
+<symbol overflow="visible" id="glyph0-5">
+<path style="stroke:none;" d="M 1.375 -1.59375 L 2.6875 -1.59375 L 2.6875 0 L 1.375 0 Z M 1.375 -1.59375 "/>
+</symbol>
+<symbol overflow="visible" id="glyph0-6">
+<path style="stroke:none;" d="M 1.59375 -1.0625 L 3.65625 -1.0625 L 3.65625 -8.171875 L 1.40625 -7.734375 L 1.40625 -8.875 L 3.640625 -9.328125 L 4.90625 -9.328125 L 4.90625 -1.0625 L 6.953125 -1.0625 L 6.953125 0 L 1.59375 0 Z M 1.59375 -1.0625 "/>
+</symbol>
+<symbol overflow="visible" id="glyph0-7">
+<path style="stroke:none;" d="M 4.375 -8.078125 L 2.65625 -3.4375 L 6.09375 -3.4375 Z M 3.65625 -9.328125 L 5.09375 -9.328125 L 8.640625 0 L 7.328125 0 L 6.484375 -2.390625 L 2.28125 -2.390625 L 1.4375 0 L 0.09375 0 Z M 3.65625 -9.328125 "/>
+</symbol>
+<symbol overflow="visible" id="glyph0-8">
+<path style="stroke:none;" d="M 2.3125 -1.046875 L 2.3125 2.65625 L 1.15625 2.65625 L 1.15625 -7 L 2.3125 -7 L 2.3125 -5.9375 C 2.5625 -6.351562 2.867188 -6.660156 3.234375 -6.859375 C 3.597656 -7.066406 4.039062 -7.171875 4.5625 -7.171875 C 5.40625 -7.171875 6.09375 -6.832031 6.625 -6.15625 C 7.15625 -5.476562 7.421875 -4.59375 7.421875 -3.5 C 7.421875 -2.394531 7.15625 -1.503906 6.625 -0.828125 C 6.09375 -0.148438 5.40625 0.1875 4.5625 0.1875 C 4.039062 0.1875 3.597656 0.0859375 3.234375 -0.109375 C 2.867188 -0.316406 2.5625 -0.628906 2.3125 -1.046875 Z M 6.234375 -3.5 C 6.234375 -4.34375 6.054688 -5.003906 5.703125 -5.484375 C 5.359375 -5.960938 4.882812 -6.203125 4.28125 -6.203125 C 3.664062 -6.203125 3.179688 -5.960938 2.828125 -5.484375 C 2.484375 -5.003906 2.3125 -4.34375 2.3125 -3.5 C 2.3125 -2.644531 2.484375 -1.976562 2.828125 -1.5 C 3.179688 -1.019531 3.664062 -0.78125 4.28125 -0.78125 C 4.882812 -0.78125 5.359375 -1.019531 5.703125 -1.5 C 6.054688 -1.976562 6.234375 -2.644531 6.234375 -3.5 Z M 6.234375 -3.5 "/>
+</symbol>
+<symbol overflow="visible" id="glyph0-9">
+<path style="stroke:none;" d="M 1.203125 -9.71875 L 2.359375 -9.71875 L 2.359375 0 L 1.203125 0 Z M 1.203125 -9.71875 "/>
+</symbol>
+<symbol overflow="visible" id="glyph0-10">
+<path style="stroke:none;" d="M 1.203125 -7 L 2.359375 -7 L 2.359375 0 L 1.203125 0 Z M 1.203125 -9.71875 L 2.359375 -9.71875 L 2.359375 -8.265625 L 1.203125 -8.265625 Z M 1.203125 -9.71875 "/>
+</symbol>
+<symbol overflow="visible" id="glyph0-11">
+<path style="stroke:none;" d="M 6.25 -6.734375 L 6.25 -5.65625 C 5.914062 -5.832031 5.585938 -5.960938 5.265625 -6.046875 C 4.941406 -6.140625 4.613281 -6.1875 4.28125 -6.1875 C 3.53125 -6.1875 2.945312 -5.953125 2.53125 -5.484375 C 2.125 -5.015625 1.921875 -4.351562 1.921875 -3.5 C 1.921875 -2.644531 2.125 -1.976562 2.53125 -1.5 C 2.945312 -1.03125 3.53125 -0.796875 4.28125 -0.796875 C 4.613281 -0.796875 4.941406 -0.835938 5.265625 -0.921875 C 5.585938 -1.015625 5.914062 -1.148438 6.25 -1.328125 L 6.25 -0.265625 C 5.925781 -0.117188 5.59375 -0.0078125 5.25 0.0625 C 4.90625 0.144531 4.539062 0.1875 4.15625 0.1875 C 3.09375 0.1875 2.25 -0.144531 1.625 -0.8125 C 1.007812 -1.476562 0.703125 -2.375 0.703125 -3.5 C 0.703125 -4.632812 1.015625 -5.53125 1.640625 -6.1875 C 2.273438 -6.84375 3.132812 -7.171875 4.21875 -7.171875 C 4.570312 -7.171875 4.914062 -7.132812 5.25 -7.0625 C 5.59375 -6.988281 5.925781 -6.878906 6.25 -6.734375 Z M 6.25 -6.734375 "/>
+</symbol>
+<symbol overflow="visible" id="glyph0-12">
+<path style="stroke:none;" d="M 4.390625 -3.515625 C 3.460938 -3.515625 2.816406 -3.40625 2.453125 -3.1875 C 2.097656 -2.976562 1.921875 -2.617188 1.921875 -2.109375 C 1.921875 -1.703125 2.050781 -1.378906 2.3125 -1.140625 C 2.582031 -0.898438 2.953125 -0.78125 3.421875 -0.78125 C 4.054688 -0.78125 4.566406 -1.003906 4.953125 -1.453125 C 5.335938 -1.910156 5.53125 -2.515625 5.53125 -3.265625 L 5.53125 -3.515625 Z M 6.671875 -4 L 6.671875 0 L 5.53125 0 L 5.53125 -1.0625 C 5.269531 -0.632812 4.941406 -0.316406 4.546875 -0.109375 C 4.160156 0.0859375 3.679688 0.1875 3.109375 0.1875 C 2.390625 0.1875 1.816406 -0.015625 1.390625 -0.421875 C 0.972656 -0.828125 0.765625 -1.363281 0.765625 -2.03125 C 0.765625 -2.820312 1.023438 -3.414062 1.546875 -3.8125 C 2.078125 -4.21875 2.867188 -4.421875 3.921875 -4.421875 L 5.53125 -4.421875 L 5.53125 -4.53125 C 5.53125 -5.0625 5.351562 -5.46875 5 -5.75 C 4.65625 -6.039062 4.171875 -6.1875 3.546875 -6.1875 C 3.140625 -6.1875 2.75 -6.140625 2.375 -6.046875 C 2 -5.953125 1.632812 -5.8125 1.28125 -5.625 L 1.28125 -6.671875 C 1.695312 -6.835938 2.101562 -6.960938 2.5 -7.046875 C 2.894531 -7.128906 3.28125 -7.171875 3.65625 -7.171875 C 4.675781 -7.171875 5.429688 -6.90625 5.921875 -6.375 C 6.421875 -5.851562 6.671875 -5.0625 6.671875 -4 Z M 6.671875 -4 "/>
+</symbol>
+<symbol overflow="visible" id="glyph0-13">
+<path style="stroke:none;" d="M 2.34375 -8.984375 L 2.34375 -7 L 4.71875 -7 L 4.71875 -6.109375 L 2.34375 -6.109375 L 2.34375 -2.3125 C 2.34375 -1.738281 2.421875 -1.367188 2.578125 -1.203125 C 2.734375 -1.046875 3.050781 -0.96875 3.53125 -0.96875 L 4.71875 -0.96875 L 4.71875 0 L 3.53125 0 C 2.644531 0 2.03125 -0.164062 1.6875 -0.5 C 1.351562 -0.832031 1.1875 -1.4375 1.1875 -2.3125 L 1.1875 -6.109375 L 0.34375 -6.109375 L 0.34375 -7 L 1.1875 -7 L 1.1875 -8.984375 Z M 2.34375 -8.984375 "/>
+</symbol>
+<symbol overflow="visible" id="glyph0-14">
+<path style="stroke:none;" d="M 3.921875 -6.1875 C 3.304688 -6.1875 2.816406 -5.945312 2.453125 -5.46875 C 2.097656 -4.988281 1.921875 -4.332031 1.921875 -3.5 C 1.921875 -2.65625 2.097656 -1.992188 2.453125 -1.515625 C 2.804688 -1.035156 3.296875 -0.796875 3.921875 -0.796875 C 4.535156 -0.796875 5.019531 -1.035156 5.375 -1.515625 C 5.726562 -2.003906 5.90625 -2.664062 5.90625 -3.5 C 5.90625 -4.320312 5.726562 -4.972656 5.375 -5.453125 C 5.019531 -5.941406 4.535156 -6.1875 3.921875 -6.1875 Z M 3.921875 -7.171875 C 4.921875 -7.171875 5.703125 -6.84375 6.265625 -6.1875 C 6.835938 -5.539062 7.125 -4.644531 7.125 -3.5 C 7.125 -2.351562 6.835938 -1.453125 6.265625 -0.796875 C 5.703125 -0.140625 4.921875 0.1875 3.921875 0.1875 C 2.910156 0.1875 2.117188 -0.140625 1.546875 -0.796875 C 0.984375 -1.453125 0.703125 -2.351562 0.703125 -3.5 C 0.703125 -4.644531 0.984375 -5.539062 1.546875 -6.1875 C 2.117188 -6.84375 2.910156 -7.171875 3.921875 -7.171875 Z M 3.921875 -7.171875 "/>
+</symbol>
+<symbol overflow="visible" id="glyph0-15">
+<path style="stroke:none;" d="M 7.015625 -4.21875 L 7.015625 0 L 5.875 0 L 5.875 -4.1875 C 5.875 -4.851562 5.742188 -5.347656 5.484375 -5.671875 C 5.222656 -6.003906 4.835938 -6.171875 4.328125 -6.171875 C 3.703125 -6.171875 3.207031 -5.972656 2.84375 -5.578125 C 2.488281 -5.179688 2.3125 -4.640625 2.3125 -3.953125 L 2.3125 0 L 1.15625 0 L 1.15625 -7 L 2.3125 -7 L 2.3125 -5.90625 C 2.59375 -6.332031 2.914062 -6.648438 3.28125 -6.859375 C 3.65625 -7.066406 4.085938 -7.171875 4.578125 -7.171875 C 5.378906 -7.171875 5.984375 -6.921875 6.390625 -6.421875 C 6.804688 -5.921875 7.015625 -5.1875 7.015625 -4.21875 Z M 7.015625 -4.21875 "/>
+</symbol>
+<symbol overflow="visible" id="glyph0-16">
+<path style="stroke:none;" d="M 6.84375 -9.015625 L 6.84375 -7.796875 C 6.363281 -8.023438 5.910156 -8.191406 5.484375 -8.296875 C 5.066406 -8.410156 4.660156 -8.46875 4.265625 -8.46875 C 3.578125 -8.46875 3.046875 -8.332031 2.671875 -8.0625 C 2.296875 -7.800781 2.109375 -7.425781 2.109375 -6.9375 C 2.109375 -6.519531 2.234375 -6.207031 2.484375 -6 C 2.734375 -5.789062 3.203125 -5.625 3.890625 -5.5 L 4.65625 -5.34375 C 5.59375 -5.15625 6.285156 -4.835938 6.734375 -4.390625 C 7.179688 -3.941406 7.40625 -3.335938 7.40625 -2.578125 C 7.40625 -1.671875 7.101562 -0.984375 6.5 -0.515625 C 5.894531 -0.046875 5.007812 0.1875 3.84375 0.1875 C 3.394531 0.1875 2.921875 0.132812 2.421875 0.03125 C 1.929688 -0.0703125 1.414062 -0.21875 0.875 -0.40625 L 0.875 -1.71875 C 1.394531 -1.425781 1.898438 -1.207031 2.390625 -1.0625 C 2.878906 -0.914062 3.363281 -0.84375 3.84375 -0.84375 C 4.5625 -0.84375 5.113281 -0.984375 5.5 -1.265625 C 5.894531 -1.546875 6.09375 -1.953125 6.09375 -2.484375 C 6.09375 -2.941406 5.953125 -3.296875 5.671875 -3.546875 C 5.390625 -3.804688 4.925781 -4.003906 4.28125 -4.140625 L 3.515625 -4.28125 C 2.578125 -4.46875 1.894531 -4.757812 1.46875 -5.15625 C 1.050781 -5.5625 0.84375 -6.117188 0.84375 -6.828125 C 0.84375 -7.660156 1.132812 -8.3125 1.71875 -8.78125 C 2.300781 -9.257812 3.101562 -9.5 4.125 -9.5 C 4.5625 -9.5 5.003906 -9.457031 5.453125 -9.375 C 5.910156 -9.300781 6.375 -9.179688 6.84375 -9.015625 Z M 6.84375 -9.015625 "/>
+</symbol>
+<symbol overflow="visible" id="glyph0-17">
+<path style="stroke:none;" d="M 7.1875 -3.78125 L 7.1875 -3.21875 L 1.90625 -3.21875 C 1.957031 -2.425781 2.195312 -1.820312 2.625 -1.40625 C 3.050781 -1 3.644531 -0.796875 4.40625 -0.796875 C 4.84375 -0.796875 5.269531 -0.847656 5.6875 -0.953125 C 6.101562 -1.066406 6.515625 -1.226562 6.921875 -1.4375 L 6.921875 -0.359375 C 6.515625 -0.179688 6.09375 -0.046875 5.65625 0.046875 C 5.21875 0.140625 4.78125 0.1875 4.34375 0.1875 C 3.21875 0.1875 2.328125 -0.132812 1.671875 -0.78125 C 1.023438 -1.4375 0.703125 -2.320312 0.703125 -3.4375 C 0.703125 -4.582031 1.007812 -5.488281 1.625 -6.15625 C 2.25 -6.832031 3.085938 -7.171875 4.140625 -7.171875 C 5.078125 -7.171875 5.816406 -6.863281 6.359375 -6.25 C 6.910156 -5.644531 7.1875 -4.820312 7.1875 -3.78125 Z M 6.046875 -4.125 C 6.035156 -4.75 5.859375 -5.25 5.515625 -5.625 C 5.171875 -6 4.71875 -6.1875 4.15625 -6.1875 C 3.507812 -6.1875 2.992188 -6.003906 2.609375 -5.640625 C 2.222656 -5.285156 2 -4.78125 1.9375 -4.125 Z M 6.046875 -4.125 "/>
+</symbol>
+<symbol overflow="visible" id="glyph0-18">
+<path style="stroke:none;" d="M 1.09375 -2.765625 L 1.09375 -7 L 2.234375 -7 L 2.234375 -2.8125 C 2.234375 -2.144531 2.363281 -1.644531 2.625 -1.3125 C 2.882812 -0.976562 3.269531 -0.8125 3.78125 -0.8125 C 4.40625 -0.8125 4.894531 -1.007812 5.25 -1.40625 C 5.613281 -1.800781 5.796875 -2.34375 5.796875 -3.03125 L 5.796875 -7 L 6.953125 -7 L 6.953125 0 L 5.796875 0 L 5.796875 -1.078125 C 5.515625 -0.648438 5.191406 -0.332031 4.828125 -0.125 C 4.460938 0.0820312 4.035156 0.1875 3.546875 0.1875 C 2.742188 0.1875 2.132812 -0.0625 1.71875 -0.5625 C 1.300781 -1.0625 1.09375 -1.796875 1.09375 -2.765625 Z M 3.984375 -7.171875 Z M 3.984375 -7.171875 "/>
+</symbol>
+<symbol overflow="visible" id="glyph0-19">
+<path style="stroke:none;" d="M 5.265625 -5.921875 C 5.128906 -5.992188 4.984375 -6.046875 4.828125 -6.078125 C 4.679688 -6.117188 4.519531 -6.140625 4.34375 -6.140625 C 3.6875 -6.140625 3.179688 -5.925781 2.828125 -5.5 C 2.484375 -5.082031 2.3125 -4.476562 2.3125 -3.6875 L 2.3125 0 L 1.15625 0 L 1.15625 -7 L 2.3125 -7 L 2.3125 -5.90625 C 2.5625 -6.332031 2.878906 -6.648438 3.265625 -6.859375 C 3.648438 -7.066406 4.117188 -7.171875 4.671875 -7.171875 C 4.753906 -7.171875 4.84375 -7.164062 4.9375 -7.15625 C 5.03125 -7.144531 5.132812 -7.128906 5.25 -7.109375 Z M 5.265625 -5.921875 "/>
+</symbol>
+<symbol overflow="visible" id="glyph0-20">
+<path style="stroke:none;" d=""/>
+</symbol>
+<symbol overflow="visible" id="glyph0-21">
+<path style="stroke:none;" d="M 7.015625 -4.21875 L 7.015625 0 L 5.875 0 L 5.875 -4.1875 C 5.875 -4.851562 5.742188 -5.347656 5.484375 -5.671875 C 5.222656 -6.003906 4.835938 -6.171875 4.328125 -6.171875 C 3.703125 -6.171875 3.207031 -5.972656 2.84375 -5.578125 C 2.488281 -5.179688 2.3125 -4.640625 2.3125 -3.953125 L 2.3125 0 L 1.15625 0 L 1.15625 -9.71875 L 2.3125 -9.71875 L 2.3125 -5.90625 C 2.59375 -6.332031 2.914062 -6.648438 3.28125 -6.859375 C 3.65625 -7.066406 4.085938 -7.171875 4.578125 -7.171875 C 5.378906 -7.171875 5.984375 -6.921875 6.390625 -6.421875 C 6.804688 -5.921875 7.015625 -5.1875 7.015625 -4.21875 Z M 7.015625 -4.21875 "/>
+</symbol>
+<symbol overflow="visible" id="glyph0-22">
+<path style="stroke:none;" d="M 8.234375 -8.609375 L 8.234375 -7.28125 C 7.816406 -7.675781 7.363281 -7.96875 6.875 -8.15625 C 6.394531 -8.351562 5.882812 -8.453125 5.34375 -8.453125 C 4.28125 -8.453125 3.460938 -8.125 2.890625 -7.46875 C 2.328125 -6.820312 2.046875 -5.882812 2.046875 -4.65625 C 2.046875 -3.425781 2.328125 -2.484375 2.890625 -1.828125 C 3.460938 -1.179688 4.28125 -0.859375 5.34375 -0.859375 C 5.882812 -0.859375 6.394531 -0.953125 6.875 -1.140625 C 7.363281 -1.335938 7.816406 -1.632812 8.234375 -2.03125 L 8.234375 -0.71875 C 7.796875 -0.414062 7.328125 -0.1875 6.828125 -0.03125 C 6.335938 0.113281 5.820312 0.1875 5.28125 0.1875 C 3.863281 0.1875 2.75 -0.242188 1.9375 -1.109375 C 1.125 -1.972656 0.71875 -3.15625 0.71875 -4.65625 C 0.71875 -6.15625 1.125 -7.335938 1.9375 -8.203125 C 2.75 -9.066406 3.863281 -9.5 5.28125 -9.5 C 5.832031 -9.5 6.351562 -9.421875 6.84375 -9.265625 C 7.34375 -9.117188 7.804688 -8.898438 8.234375 -8.609375 Z M 8.234375 -8.609375 "/>
+</symbol>
+<symbol overflow="visible" id="glyph0-23">
+<path style="stroke:none;" d="M 6.65625 -5.65625 C 6.9375 -6.164062 7.273438 -6.546875 7.671875 -6.796875 C 8.078125 -7.046875 8.550781 -7.171875 9.09375 -7.171875 C 9.820312 -7.171875 10.382812 -6.914062 10.78125 -6.40625 C 11.175781 -5.894531 11.375 -5.164062 11.375 -4.21875 L 11.375 0 L 10.21875 0 L 10.21875 -4.1875 C 10.21875 -4.851562 10.097656 -5.347656 9.859375 -5.671875 C 9.628906 -6.003906 9.269531 -6.171875 8.78125 -6.171875 C 8.1875 -6.171875 7.710938 -5.972656 7.359375 -5.578125 C 7.015625 -5.179688 6.84375 -4.640625 6.84375 -3.953125 L 6.84375 0 L 5.6875 0 L 5.6875 -4.1875 C 5.6875 -4.863281 5.566406 -5.363281 5.328125 -5.6875 C 5.097656 -6.007812 4.734375 -6.171875 4.234375 -6.171875 C 3.648438 -6.171875 3.179688 -5.96875 2.828125 -5.5625 C 2.484375 -5.164062 2.3125 -4.628906 2.3125 -3.953125 L 2.3125 0 L 1.15625 0 L 1.15625 -7 L 2.3125 -7 L 2.3125 -5.90625 C 2.582031 -6.332031 2.898438 -6.648438 3.265625 -6.859375 C 3.628906 -7.066406 4.0625 -7.171875 4.5625 -7.171875 C 5.070312 -7.171875 5.503906 -7.039062 5.859375 -6.78125 C 6.222656 -6.519531 6.488281 -6.144531 6.65625 -5.65625 Z M 6.65625 -5.65625 "/>
+</symbol>
+<symbol overflow="visible" id="glyph0-24">
+<path style="stroke:none;" d="M 7.015625 -7 L 4.5 -3.59375 L 7.15625 0 L 5.796875 0 L 3.765625 -2.75 L 1.71875 0 L 0.375 0 L 3.09375 -3.65625 L 0.59375 -7 L 1.953125 -7 L 3.8125 -4.5 L 5.671875 -7 Z M 7.015625 -7 "/>
+</symbol>
+<symbol overflow="visible" id="glyph0-25">
+<path style="stroke:none;" d="M 5.8125 -3.578125 C 5.8125 -4.410156 5.640625 -5.054688 5.296875 -5.515625 C 4.953125 -5.972656 4.46875 -6.203125 3.84375 -6.203125 C 3.226562 -6.203125 2.75 -5.972656 2.40625 -5.515625 C 2.0625 -5.054688 1.890625 -4.410156 1.890625 -3.578125 C 1.890625 -2.753906 2.0625 -2.113281 2.40625 -1.65625 C 2.75 -1.195312 3.226562 -0.96875 3.84375 -0.96875 C 4.46875 -0.96875 4.953125 -1.195312 5.296875 -1.65625 C 5.640625 -2.113281 5.8125 -2.753906 5.8125 -3.578125 Z M 6.953125 -0.875 C 6.953125 0.320312 6.6875 1.207031 6.15625 1.78125 C 5.632812 2.363281 4.828125 2.65625 3.734375 2.65625 C 3.328125 2.65625 2.945312 2.625 2.59375 2.5625 C 2.238281 2.507812 1.890625 2.421875 1.546875 2.296875 L 1.546875 1.171875 C 1.890625 1.359375 2.222656 1.492188 2.546875 1.578125 C 2.878906 1.671875 3.21875 1.71875 3.5625 1.71875 C 4.3125 1.71875 4.875 1.519531 5.25 1.125 C 5.625 0.726562 5.8125 0.132812 5.8125 -0.65625 L 5.8125 -1.234375 C 5.570312 -0.816406 5.265625 -0.503906 4.890625 -0.296875 C 4.523438 -0.0976562 4.082031 0 3.5625 0 C 2.707031 0 2.015625 -0.328125 1.484375 -0.984375 C 0.960938 -1.640625 0.703125 -2.503906 0.703125 -3.578125 C 0.703125 -4.660156 0.960938 -5.53125 1.484375 -6.1875 C 2.015625 -6.84375 2.707031 -7.171875 3.5625 -7.171875 C 4.082031 -7.171875 4.523438 -7.066406 4.890625 -6.859375 C 5.265625 -6.648438 5.570312 -6.34375 5.8125 -5.9375 L 5.8125 -7 L 6.953125 -7 Z M 6.953125 -0.875 "/>
+</symbol>
+<symbol overflow="visible" id="glyph0-26">
+<path style="stroke:none;" d="M 2.515625 -8.296875 L 2.515625 -1.03125 L 4.046875 -1.03125 C 5.328125 -1.03125 6.265625 -1.320312 6.859375 -1.90625 C 7.460938 -2.488281 7.765625 -3.410156 7.765625 -4.671875 C 7.765625 -5.921875 7.460938 -6.835938 6.859375 -7.421875 C 6.265625 -8.003906 5.328125 -8.296875 4.046875 -8.296875 Z M 1.25 -9.328125 L 3.84375 -9.328125 C 5.65625 -9.328125 6.984375 -8.953125 7.828125 -8.203125 C 8.671875 -7.453125 9.09375 -6.273438 9.09375 -4.671875 C 9.09375 -3.066406 8.664062 -1.882812 7.8125 -1.125 C 6.96875 -0.375 5.644531 0 3.84375 0 L 1.25 0 Z M 1.25 -9.328125 "/>
+</symbol>
+<symbol overflow="visible" id="glyph0-27">
+<path style="stroke:none;" d="M 5.671875 -6.796875 L 5.671875 -5.703125 C 5.347656 -5.867188 5.007812 -5.992188 4.65625 -6.078125 C 4.300781 -6.160156 3.9375 -6.203125 3.5625 -6.203125 C 3 -6.203125 2.570312 -6.113281 2.28125 -5.9375 C 2 -5.769531 1.859375 -5.507812 1.859375 -5.15625 C 1.859375 -4.882812 1.957031 -4.671875 2.15625 -4.515625 C 2.363281 -4.367188 2.773438 -4.226562 3.390625 -4.09375 L 3.78125 -4 C 4.601562 -3.832031 5.1875 -3.585938 5.53125 -3.265625 C 5.875 -2.941406 6.046875 -2.5 6.046875 -1.9375 C 6.046875 -1.28125 5.785156 -0.757812 5.265625 -0.375 C 4.753906 0 4.050781 0.1875 3.15625 0.1875 C 2.78125 0.1875 2.390625 0.148438 1.984375 0.078125 C 1.578125 0.00390625 1.144531 -0.101562 0.6875 -0.25 L 0.6875 -1.4375 C 1.113281 -1.21875 1.53125 -1.050781 1.9375 -0.9375 C 2.351562 -0.832031 2.765625 -0.78125 3.171875 -0.78125 C 3.710938 -0.78125 4.128906 -0.875 4.421875 -1.0625 C 4.710938 -1.25 4.859375 -1.507812 4.859375 -1.84375 C 4.859375 -2.15625 4.753906 -2.394531 4.546875 -2.5625 C 4.335938 -2.726562 3.875 -2.890625 3.15625 -3.046875 L 2.765625 -3.140625 C 2.046875 -3.285156 1.53125 -3.515625 1.21875 -3.828125 C 0.90625 -4.140625 0.75 -4.566406 0.75 -5.109375 C 0.75 -5.765625 0.976562 -6.269531 1.4375 -6.625 C 1.90625 -6.988281 2.570312 -7.171875 3.4375 -7.171875 C 3.851562 -7.171875 4.25 -7.140625 4.625 -7.078125 C 5 -7.015625 5.347656 -6.921875 5.671875 -6.796875 Z M 5.671875 -6.796875 "/>
+</symbol>
+<symbol overflow="visible" id="glyph0-28">
+<path style="stroke:none;" d="M 4.75 -9.71875 L 4.75 -8.765625 L 3.65625 -8.765625 C 3.238281 -8.765625 2.945312 -8.679688 2.78125 -8.515625 C 2.625 -8.347656 2.546875 -8.046875 2.546875 -7.609375 L 2.546875 -7 L 4.4375 -7 L 4.4375 -6.109375 L 2.546875 -6.109375 L 2.546875 0 L 1.390625 0 L 1.390625 -6.109375 L 0.296875 -6.109375 L 0.296875 -7 L 1.390625 -7 L 1.390625 -7.484375 C 1.390625 -8.265625 1.570312 -8.832031 1.9375 -9.1875 C 2.300781 -9.539062 2.875 -9.71875 3.65625 -9.71875 Z M 4.75 -9.71875 "/>
+</symbol>
+<symbol overflow="visible" id="glyph0-29">
+<path style="stroke:none;" d="M 4.125 0.65625 C 3.789062 1.488281 3.46875 2.03125 3.15625 2.28125 C 2.851562 2.53125 2.445312 2.65625 1.9375 2.65625 L 1.015625 2.65625 L 1.015625 1.703125 L 1.6875 1.703125 C 2 1.703125 2.242188 1.625 2.421875 1.46875 C 2.597656 1.320312 2.789062 0.96875 3 0.40625 L 3.21875 -0.109375 L 0.375 -7 L 1.59375 -7 L 3.78125 -1.53125 L 5.96875 -7 L 7.1875 -7 Z M 4.125 0.65625 "/>
+</symbol>
+<symbol overflow="visible" id="glyph0-30">
+<path style="stroke:none;" d="M 1.25 -9.328125 L 7.15625 -9.328125 L 7.15625 -8.265625 L 2.515625 -8.265625 L 2.515625 -5.5 L 6.953125 -5.5 L 6.953125 -4.4375 L 2.515625 -4.4375 L 2.515625 -1.0625 L 7.265625 -1.0625 L 7.265625 0 L 1.25 0 Z M 1.25 -9.328125 "/>
+</symbol>
+<symbol overflow="visible" id="glyph0-31">
+<path style="stroke:none;" d="M 5.8125 -5.9375 L 5.8125 -9.71875 L 6.953125 -9.71875 L 6.953125 0 L 5.8125 0 L 5.8125 -1.046875 C 5.570312 -0.628906 5.265625 -0.316406 4.890625 -0.109375 C 4.523438 0.0859375 4.082031 0.1875 3.5625 0.1875 C 2.71875 0.1875 2.03125 -0.148438 1.5 -0.828125 C 0.96875 -1.503906 0.703125 -2.394531 0.703125 -3.5 C 0.703125 -4.59375 0.96875 -5.476562 1.5 -6.15625 C 2.03125 -6.832031 2.71875 -7.171875 3.5625 -7.171875 C 4.082031 -7.171875 4.523438 -7.066406 4.890625 -6.859375 C 5.265625 -6.660156 5.570312 -6.351562 5.8125 -5.9375 Z M 1.890625 -3.5 C 1.890625 -2.644531 2.0625 -1.976562 2.40625 -1.5 C 2.757812 -1.019531 3.238281 -0.78125 3.84375 -0.78125 C 4.457031 -0.78125 4.9375 -1.019531 5.28125 -1.5 C 5.632812 -1.976562 5.8125 -2.644531 5.8125 -3.5 C 5.8125 -4.34375 5.632812 -5.003906 5.28125 -5.484375 C 4.9375 -5.960938 4.457031 -6.203125 3.84375 -6.203125 C 3.238281 -6.203125 2.757812 -5.960938 2.40625 -5.484375 C 2.0625 -5.003906 1.890625 -4.34375 1.890625 -3.5 Z M 1.890625 -3.5 "/>
+</symbol>
+<symbol overflow="visible" id="glyph0-32">
+<path style="stroke:none;" d="M 0.703125 -7 L 6.171875 -7 L 6.171875 -5.953125 L 1.84375 -0.921875 L 6.171875 -0.921875 L 6.171875 0 L 0.546875 0 L 0.546875 -1.046875 L 4.875 -6.078125 L 0.703125 -6.078125 Z M 0.703125 -7 "/>
+</symbol>
+<symbol overflow="visible" id="glyph0-33">
+<path style="stroke:none;" d="M 1.375 -9.328125 L 6.34375 -9.328125 L 6.34375 -8.265625 L 2.53125 -8.265625 L 2.53125 -5.984375 C 2.71875 -6.046875 2.898438 -6.09375 3.078125 -6.125 C 3.265625 -6.15625 3.453125 -6.171875 3.640625 -6.171875 C 4.679688 -6.171875 5.503906 -5.882812 6.109375 -5.3125 C 6.710938 -4.738281 7.015625 -3.96875 7.015625 -3 C 7.015625 -1.988281 6.703125 -1.203125 6.078125 -0.640625 C 5.460938 -0.0859375 4.582031 0.1875 3.4375 0.1875 C 3.050781 0.1875 2.65625 0.148438 2.25 0.078125 C 1.84375 0.015625 1.421875 -0.0820312 0.984375 -0.21875 L 0.984375 -1.484375 C 1.359375 -1.285156 1.742188 -1.132812 2.140625 -1.03125 C 2.546875 -0.925781 2.972656 -0.875 3.421875 -0.875 C 4.140625 -0.875 4.707031 -1.0625 5.125 -1.4375 C 5.550781 -1.820312 5.765625 -2.34375 5.765625 -3 C 5.765625 -3.644531 5.550781 -4.15625 5.125 -4.53125 C 4.707031 -4.914062 4.140625 -5.109375 3.421875 -5.109375 C 3.078125 -5.109375 2.738281 -5.066406 2.40625 -4.984375 C 2.070312 -4.910156 1.726562 -4.796875 1.375 -4.640625 Z M 1.375 -9.328125 "/>
+</symbol>
+<symbol overflow="visible" id="glyph1-0">
+<path style="stroke:none;" d="M 0.5 1.796875 L 0.5 -7.15625 L 5.578125 -7.15625 L 5.578125 1.796875 Z M 1.078125 1.234375 L 5.015625 1.234375 L 5.015625 -6.59375 L 1.078125 -6.59375 Z M 1.078125 1.234375 "/>
+</symbol>
+<symbol overflow="visible" id="glyph1-1">
+<path style="stroke:none;" d="M 3.46875 -6.421875 L 2.109375 -2.734375 L 4.828125 -2.734375 Z M 2.90625 -7.40625 L 4.046875 -7.40625 L 6.859375 0 L 5.828125 0 L 5.140625 -1.90625 L 1.8125 -1.90625 L 1.140625 0 L 0.078125 0 Z M 2.90625 -7.40625 "/>
+</symbol>
+<symbol overflow="visible" id="glyph1-2">
+<path style="stroke:none;" d="M 1 -7.40625 L 5.671875 -7.40625 L 5.671875 -6.5625 L 2 -6.5625 L 2 -4.375 L 5.53125 -4.375 L 5.53125 -3.53125 L 2 -3.53125 L 2 -0.84375 L 5.765625 -0.84375 L 5.765625 0 L 1 0 Z M 1 -7.40625 "/>
+</symbol>
+<symbol overflow="visible" id="glyph1-3">
+<path style="stroke:none;" d="M 2 -6.578125 L 2 -0.828125 L 3.203125 -0.828125 C 4.222656 -0.828125 4.972656 -1.054688 5.453125 -1.515625 C 5.929688 -1.984375 6.171875 -2.710938 6.171875 -3.703125 C 6.171875 -4.703125 5.929688 -5.429688 5.453125 -5.890625 C 4.972656 -6.347656 4.222656 -6.578125 3.203125 -6.578125 Z M 1 -7.40625 L 3.0625 -7.40625 C 4.488281 -7.40625 5.535156 -7.101562 6.203125 -6.5 C 6.878906 -5.90625 7.21875 -4.972656 7.21875 -3.703125 C 7.21875 -2.429688 6.878906 -1.492188 6.203125 -0.890625 C 5.535156 -0.296875 4.488281 0 3.0625 0 L 1 0 Z M 1 -7.40625 "/>
+</symbol>
+<symbol overflow="visible" id="glyph1-4">
+<path style="stroke:none;" d="M 5.171875 1.6875 L 5.171875 2.390625 L -0.09375 2.390625 L -0.09375 1.6875 Z M 5.171875 1.6875 "/>
+</symbol>
+<symbol overflow="visible" id="glyph1-5">
+<path style="stroke:none;" d="M -0.03125 -7.40625 L 6.234375 -7.40625 L 6.234375 -6.5625 L 3.609375 -6.5625 L 3.609375 0 L 2.59375 0 L 2.59375 -6.5625 L -0.03125 -6.5625 Z M -0.03125 -7.40625 "/>
+</symbol>
+<symbol overflow="visible" id="glyph1-6">
+<path style="stroke:none;" d="M 6.046875 -1.0625 L 6.046875 -3.046875 L 4.40625 -3.046875 L 4.40625 -3.875 L 7.03125 -3.875 L 7.03125 -0.6875 C 6.644531 -0.414062 6.21875 -0.207031 5.75 -0.0625 C 5.289062 0.0703125 4.796875 0.140625 4.265625 0.140625 C 3.109375 0.140625 2.203125 -0.195312 1.546875 -0.875 C 0.890625 -1.550781 0.5625 -2.488281 0.5625 -3.6875 C 0.5625 -4.90625 0.890625 -5.847656 1.546875 -6.515625 C 2.203125 -7.191406 3.109375 -7.53125 4.265625 -7.53125 C 4.742188 -7.53125 5.203125 -7.472656 5.640625 -7.359375 C 6.078125 -7.242188 6.476562 -7.066406 6.84375 -6.828125 L 6.84375 -5.765625 C 6.46875 -6.078125 6.070312 -6.3125 5.65625 -6.46875 C 5.238281 -6.632812 4.800781 -6.71875 4.34375 -6.71875 C 3.4375 -6.71875 2.753906 -6.460938 2.296875 -5.953125 C 1.847656 -5.453125 1.625 -4.695312 1.625 -3.6875 C 1.625 -2.695312 1.847656 -1.945312 2.296875 -1.4375 C 2.753906 -0.925781 3.4375 -0.671875 4.34375 -0.671875 C 4.695312 -0.671875 5.015625 -0.703125 5.296875 -0.765625 C 5.578125 -0.828125 5.828125 -0.925781 6.046875 -1.0625 Z M 6.046875 -1.0625 "/>
+</symbol>
+<symbol overflow="visible" id="glyph1-7">
+<path style="stroke:none;" d="M 1 -7.40625 L 2.34375 -7.40625 L 5.625 -1.203125 L 5.625 -7.40625 L 6.59375 -7.40625 L 6.59375 0 L 5.25 0 L 1.96875 -6.1875 L 1.96875 0 L 1 0 Z M 1 -7.40625 "/>
+</symbol>
+<symbol overflow="visible" id="glyph1-8">
+<path style="stroke:none;" d="M 6.546875 -6.828125 L 6.546875 -5.78125 C 6.203125 -6.09375 5.835938 -6.328125 5.453125 -6.484375 C 5.078125 -6.640625 4.675781 -6.71875 4.25 -6.71875 C 3.394531 -6.71875 2.742188 -6.457031 2.296875 -5.9375 C 1.847656 -5.414062 1.625 -4.664062 1.625 -3.6875 C 1.625 -2.71875 1.847656 -1.972656 2.296875 -1.453125 C 2.742188 -0.929688 3.394531 -0.671875 4.25 -0.671875 C 4.675781 -0.671875 5.078125 -0.75 5.453125 -0.90625 C 5.835938 -1.0625 6.203125 -1.296875 6.546875 -1.609375 L 6.546875 -0.5625 C 6.191406 -0.332031 5.816406 -0.15625 5.421875 -0.03125 C 5.035156 0.0820312 4.625 0.140625 4.1875 0.140625 C 3.0625 0.140625 2.175781 -0.203125 1.53125 -0.890625 C 0.882812 -1.578125 0.5625 -2.507812 0.5625 -3.6875 C 0.5625 -4.882812 0.882812 -5.820312 1.53125 -6.5 C 2.175781 -7.1875 3.0625 -7.53125 4.1875 -7.53125 C 4.625 -7.53125 5.039062 -7.472656 5.4375 -7.359375 C 5.832031 -7.242188 6.203125 -7.066406 6.546875 -6.828125 Z M 6.546875 -6.828125 "/>
+</symbol>
+<symbol overflow="visible" id="glyph1-9">
+<path style="stroke:none;" d="M 4.515625 -3.46875 C 4.722656 -3.394531 4.925781 -3.238281 5.125 -3 C 5.332031 -2.757812 5.539062 -2.429688 5.75 -2.015625 L 6.765625 0 L 5.6875 0 L 4.734375 -1.90625 C 4.492188 -2.394531 4.257812 -2.71875 4.03125 -2.875 C 3.800781 -3.039062 3.488281 -3.125 3.09375 -3.125 L 2 -3.125 L 2 0 L 1 0 L 1 -7.40625 L 3.265625 -7.40625 C 4.109375 -7.40625 4.738281 -7.226562 5.15625 -6.875 C 5.570312 -6.519531 5.78125 -5.984375 5.78125 -5.265625 C 5.78125 -4.804688 5.671875 -4.421875 5.453125 -4.109375 C 5.234375 -3.804688 4.921875 -3.59375 4.515625 -3.46875 Z M 2 -6.578125 L 2 -3.953125 L 3.265625 -3.953125 C 3.742188 -3.953125 4.101562 -4.0625 4.34375 -4.28125 C 4.59375 -4.507812 4.71875 -4.835938 4.71875 -5.265625 C 4.71875 -5.703125 4.59375 -6.03125 4.34375 -6.25 C 4.101562 -6.46875 3.742188 -6.578125 3.265625 -6.578125 Z M 2 -6.578125 "/>
+</symbol>
+<symbol overflow="visible" id="glyph1-10">
+<path style="stroke:none;" d="M -0.015625 -7.40625 L 1.0625 -7.40625 L 3.109375 -4.359375 L 5.140625 -7.40625 L 6.21875 -7.40625 L 3.609375 -3.53125 L 3.609375 0 L 2.59375 0 L 2.59375 -3.53125 Z M -0.015625 -7.40625 "/>
+</symbol>
+<symbol overflow="visible" id="glyph1-11">
+<path style="stroke:none;" d="M 2 -6.578125 L 2 -3.796875 L 3.265625 -3.796875 C 3.722656 -3.796875 4.078125 -3.914062 4.328125 -4.15625 C 4.585938 -4.394531 4.71875 -4.738281 4.71875 -5.1875 C 4.71875 -5.632812 4.585938 -5.976562 4.328125 -6.21875 C 4.078125 -6.457031 3.722656 -6.578125 3.265625 -6.578125 Z M 1 -7.40625 L 3.265625 -7.40625 C 4.085938 -7.40625 4.710938 -7.21875 5.140625 -6.84375 C 5.566406 -6.46875 5.78125 -5.914062 5.78125 -5.1875 C 5.78125 -4.457031 5.566406 -3.90625 5.140625 -3.53125 C 4.710938 -3.15625 4.085938 -2.96875 3.265625 -2.96875 L 2 -2.96875 L 2 0 L 1 0 Z M 1 -7.40625 "/>
+</symbol>
+<symbol overflow="visible" id="glyph1-12">
+<path style="stroke:none;" d="M 1 -7.40625 L 2.484375 -7.40625 L 4.375 -2.359375 L 6.28125 -7.40625 L 7.765625 -7.40625 L 7.765625 0 L 6.796875 0 L 6.796875 -6.5 L 4.890625 -1.421875 L 3.875 -1.421875 L 1.96875 -6.5 L 1.96875 0 L 1 0 Z M 1 -7.40625 "/>
+</symbol>
+<symbol overflow="visible" id="glyph1-13">
+<path style="stroke:none;" d="M 5.4375 -7.15625 L 5.4375 -6.1875 C 5.050781 -6.363281 4.691406 -6.492188 4.359375 -6.578125 C 4.023438 -6.671875 3.695312 -6.71875 3.375 -6.71875 C 2.832031 -6.71875 2.410156 -6.613281 2.109375 -6.40625 C 1.816406 -6.195312 1.671875 -5.894531 1.671875 -5.5 C 1.671875 -5.175781 1.769531 -4.929688 1.96875 -4.765625 C 2.164062 -4.597656 2.539062 -4.460938 3.09375 -4.359375 L 3.6875 -4.234375 C 4.4375 -4.085938 4.988281 -3.835938 5.34375 -3.484375 C 5.695312 -3.128906 5.875 -2.648438 5.875 -2.046875 C 5.875 -1.328125 5.632812 -0.78125 5.15625 -0.40625 C 4.675781 -0.0390625 3.972656 0.140625 3.046875 0.140625 C 2.691406 0.140625 2.316406 0.0976562 1.921875 0.015625 C 1.523438 -0.0546875 1.117188 -0.171875 0.703125 -0.328125 L 0.703125 -1.359375 C 1.109375 -1.128906 1.503906 -0.957031 1.890625 -0.84375 C 2.285156 -0.726562 2.671875 -0.671875 3.046875 -0.671875 C 3.617188 -0.671875 4.054688 -0.78125 4.359375 -1 C 4.671875 -1.226562 4.828125 -1.550781 4.828125 -1.96875 C 4.828125 -2.332031 4.71875 -2.613281 4.5 -2.8125 C 4.28125 -3.019531 3.914062 -3.175781 3.40625 -3.28125 L 2.796875 -3.40625 C 2.046875 -3.550781 1.503906 -3.78125 1.171875 -4.09375 C 0.835938 -4.414062 0.671875 -4.859375 0.671875 -5.421875 C 0.671875 -6.078125 0.898438 -6.59375 1.359375 -6.96875 C 1.816406 -7.34375 2.453125 -7.53125 3.265625 -7.53125 C 3.609375 -7.53125 3.960938 -7.5 4.328125 -7.4375 C 4.691406 -7.375 5.0625 -7.28125 5.4375 -7.15625 Z M 5.4375 -7.15625 "/>
+</symbol>
+<symbol overflow="visible" id="glyph1-14">
+<path style="stroke:none;" d="M 4 -6.71875 C 3.269531 -6.71875 2.691406 -6.445312 2.265625 -5.90625 C 1.835938 -5.363281 1.625 -4.625 1.625 -3.6875 C 1.625 -2.757812 1.835938 -2.023438 2.265625 -1.484375 C 2.691406 -0.941406 3.269531 -0.671875 4 -0.671875 C 4.726562 -0.671875 5.304688 -0.941406 5.734375 -1.484375 C 6.160156 -2.023438 6.375 -2.757812 6.375 -3.6875 C 6.375 -4.625 6.160156 -5.363281 5.734375 -5.90625 C 5.304688 -6.445312 4.726562 -6.71875 4 -6.71875 Z M 4 -7.53125 C 5.039062 -7.53125 5.867188 -7.179688 6.484375 -6.484375 C 7.109375 -5.796875 7.421875 -4.863281 7.421875 -3.6875 C 7.421875 -2.519531 7.109375 -1.585938 6.484375 -0.890625 C 5.867188 -0.203125 5.039062 0.140625 4 0.140625 C 2.957031 0.140625 2.125 -0.203125 1.5 -0.890625 C 0.875 -1.585938 0.5625 -2.519531 0.5625 -3.6875 C 0.5625 -4.863281 0.875 -5.796875 1.5 -6.484375 C 2.125 -7.179688 2.957031 -7.53125 4 -7.53125 Z M 4 -7.53125 "/>
+</symbol>
+<symbol overflow="visible" id="glyph1-15">
+<path style="stroke:none;" d="M 2 -3.53125 L 2 -0.828125 L 3.609375 -0.828125 C 4.140625 -0.828125 4.535156 -0.9375 4.796875 -1.15625 C 5.054688 -1.382812 5.1875 -1.726562 5.1875 -2.1875 C 5.1875 -2.644531 5.054688 -2.984375 4.796875 -3.203125 C 4.535156 -3.421875 4.140625 -3.53125 3.609375 -3.53125 Z M 2 -6.578125 L 2 -4.34375 L 3.484375 -4.34375 C 3.972656 -4.34375 4.335938 -4.4375 4.578125 -4.625 C 4.816406 -4.8125 4.9375 -5.09375 4.9375 -5.46875 C 4.9375 -5.84375 4.816406 -6.117188 4.578125 -6.296875 C 4.335938 -6.484375 3.972656 -6.578125 3.484375 -6.578125 Z M 1 -7.40625 L 3.5625 -7.40625 C 4.320312 -7.40625 4.90625 -7.242188 5.3125 -6.921875 C 5.726562 -6.609375 5.9375 -6.160156 5.9375 -5.578125 C 5.9375 -5.117188 5.832031 -4.753906 5.625 -4.484375 C 5.414062 -4.222656 5.101562 -4.054688 4.6875 -3.984375 C 5.1875 -3.878906 5.570312 -3.660156 5.84375 -3.328125 C 6.113281 -2.992188 6.25 -2.578125 6.25 -2.078125 C 6.25 -1.410156 6.023438 -0.894531 5.578125 -0.53125 C 5.128906 -0.175781 4.488281 0 3.65625 0 L 1 0 Z M 1 -7.40625 "/>
+</symbol>
+<symbol overflow="visible" id="glyph1-16">
+<path style="stroke:none;" d="M 0.875 -7.40625 L 1.890625 -7.40625 L 1.890625 -2.90625 C 1.890625 -2.113281 2.03125 -1.539062 2.3125 -1.1875 C 2.601562 -0.84375 3.070312 -0.671875 3.71875 -0.671875 C 4.363281 -0.671875 4.828125 -0.84375 5.109375 -1.1875 C 5.398438 -1.539062 5.546875 -2.113281 5.546875 -2.90625 L 5.546875 -7.40625 L 6.546875 -7.40625 L 6.546875 -2.78125 C 6.546875 -1.8125 6.304688 -1.082031 5.828125 -0.59375 C 5.359375 -0.101562 4.65625 0.140625 3.71875 0.140625 C 2.78125 0.140625 2.070312 -0.101562 1.59375 -0.59375 C 1.113281 -1.082031 0.875 -1.8125 0.875 -2.78125 Z M 0.875 -7.40625 "/>
+</symbol>
+<symbol overflow="visible" id="glyph1-17">
+<path style="stroke:none;" d="M 1 -7.40625 L 5.25 -7.40625 L 5.25 -6.5625 L 2 -6.5625 L 2 -4.375 L 4.9375 -4.375 L 4.9375 -3.53125 L 2 -3.53125 L 2 0 L 1 0 Z M 1 -7.40625 "/>
+</symbol>
+<symbol overflow="visible" id="glyph1-18">
+<path style="stroke:none;" d="M 1 -7.40625 L 2 -7.40625 L 2 -4.28125 L 5.328125 -7.40625 L 6.609375 -7.40625 L 2.9375 -3.953125 L 6.875 0 L 5.546875 0 L 2 -3.5625 L 2 0 L 1 0 Z M 1 -7.40625 "/>
+</symbol>
+<symbol overflow="visible" id="glyph1-19">
+<path style="stroke:none;" d="M 1 -7.40625 L 2 -7.40625 L 2 -0.84375 L 5.609375 -0.84375 L 5.609375 0 L 1 0 Z M 1 -7.40625 "/>
+</symbol>
+<symbol overflow="visible" id="glyph1-20">
+<path style="stroke:none;" d="M 1 -7.40625 L 2 -7.40625 L 2 0 L 1 0 Z M 1 -7.40625 "/>
+</symbol>
+<symbol overflow="visible" id="glyph1-21">
+<path style="stroke:none;" d="M 1.953125 -0.84375 L 5.4375 -0.84375 L 5.4375 0 L 0.75 0 L 0.75 -0.84375 C 1.125 -1.238281 1.640625 -1.765625 2.296875 -2.421875 C 2.953125 -3.085938 3.363281 -3.515625 3.53125 -3.703125 C 3.851562 -4.066406 4.078125 -4.375 4.203125 -4.625 C 4.335938 -4.875 4.40625 -5.117188 4.40625 -5.359375 C 4.40625 -5.753906 4.265625 -6.070312 3.984375 -6.3125 C 3.710938 -6.5625 3.351562 -6.6875 2.90625 -6.6875 C 2.59375 -6.6875 2.257812 -6.632812 1.90625 -6.53125 C 1.5625 -6.425781 1.191406 -6.257812 0.796875 -6.03125 L 0.796875 -7.046875 C 1.203125 -7.210938 1.578125 -7.332031 1.921875 -7.40625 C 2.273438 -7.488281 2.597656 -7.53125 2.890625 -7.53125 C 3.648438 -7.53125 4.257812 -7.335938 4.71875 -6.953125 C 5.175781 -6.578125 5.40625 -6.066406 5.40625 -5.421875 C 5.40625 -5.117188 5.347656 -4.832031 5.234375 -4.5625 C 5.117188 -4.289062 4.910156 -3.96875 4.609375 -3.59375 C 4.523438 -3.5 4.257812 -3.222656 3.8125 -2.765625 C 3.375 -2.304688 2.753906 -1.664062 1.953125 -0.84375 Z M 1.953125 -0.84375 "/>
+</symbol>
+<symbol overflow="visible" id="glyph1-22">
+<path style="stroke:none;" d=""/>
+</symbol>
+<symbol overflow="visible" id="glyph1-23">
+<path style="stroke:none;" d="M 4.9375 -2.765625 C 4.9375 -3.441406 4.796875 -3.96875 4.515625 -4.34375 C 4.242188 -4.726562 3.867188 -4.921875 3.390625 -4.921875 C 2.910156 -4.921875 2.53125 -4.726562 2.25 -4.34375 C 1.976562 -3.96875 1.84375 -3.441406 1.84375 -2.765625 C 1.84375 -2.097656 1.976562 -1.570312 2.25 -1.1875 C 2.53125 -0.8125 2.910156 -0.625 3.390625 -0.625 C 3.867188 -0.625 4.242188 -0.8125 4.515625 -1.1875 C 4.796875 -1.570312 4.9375 -2.097656 4.9375 -2.765625 Z M 1.84375 -4.71875 C 2.03125 -5.039062 2.269531 -5.28125 2.5625 -5.4375 C 2.851562 -5.601562 3.203125 -5.6875 3.609375 -5.6875 C 4.285156 -5.6875 4.832031 -5.414062 5.25 -4.875 C 5.675781 -4.34375 5.890625 -3.640625 5.890625 -2.765625 C 5.890625 -1.898438 5.675781 -1.195312 5.25 -0.65625 C 4.832031 -0.125 4.285156 0.140625 3.609375 0.140625 C 3.203125 0.140625 2.851562 0.0625 2.5625 -0.09375 C 2.269531 -0.257812 2.03125 -0.503906 1.84375 -0.828125 L 1.84375 0 L 0.921875 0 L 0.921875 -7.71875 L 1.84375 -7.71875 Z M 1.84375 -4.71875 "/>
+</symbol>
+<symbol overflow="visible" id="glyph1-24">
+<path style="stroke:none;" d="M 3.265625 0.515625 C 3.003906 1.171875 2.75 1.597656 2.5 1.796875 C 2.257812 2.003906 1.9375 2.109375 1.53125 2.109375 L 0.796875 2.109375 L 0.796875 1.34375 L 1.34375 1.34375 C 1.59375 1.34375 1.785156 1.28125 1.921875 1.15625 C 2.054688 1.039062 2.210938 0.765625 2.390625 0.328125 L 2.546875 -0.09375 L 0.296875 -5.546875 L 1.265625 -5.546875 L 3 -1.203125 L 4.734375 -5.546875 L 5.703125 -5.546875 Z M 3.265625 0.515625 "/>
+</symbol>
+<symbol overflow="visible" id="glyph1-25">
+<path style="stroke:none;" d="M 1.859375 -7.125 L 1.859375 -5.546875 L 3.734375 -5.546875 L 3.734375 -4.84375 L 1.859375 -4.84375 L 1.859375 -1.828125 C 1.859375 -1.378906 1.921875 -1.085938 2.046875 -0.953125 C 2.171875 -0.828125 2.421875 -0.765625 2.796875 -0.765625 L 3.734375 -0.765625 L 3.734375 0 L 2.796875 0 C 2.097656 0 1.613281 -0.128906 1.34375 -0.390625 C 1.070312 -0.648438 0.9375 -1.128906 0.9375 -1.828125 L 0.9375 -4.84375 L 0.265625 -4.84375 L 0.265625 -5.546875 L 0.9375 -5.546875 L 0.9375 -7.125 Z M 1.859375 -7.125 "/>
+</symbol>
+<symbol overflow="visible" id="glyph1-26">
+<path style="stroke:none;" d="M 5.703125 -3 L 5.703125 -2.5625 L 1.515625 -2.5625 C 1.554688 -1.925781 1.742188 -1.441406 2.078125 -1.109375 C 2.421875 -0.785156 2.894531 -0.625 3.5 -0.625 C 3.84375 -0.625 4.179688 -0.664062 4.515625 -0.75 C 4.847656 -0.84375 5.175781 -0.972656 5.5 -1.140625 L 5.5 -0.28125 C 5.164062 -0.144531 4.828125 -0.0390625 4.484375 0.03125 C 4.140625 0.101562 3.789062 0.140625 3.4375 0.140625 C 2.550781 0.140625 1.847656 -0.113281 1.328125 -0.625 C 0.816406 -1.144531 0.5625 -1.84375 0.5625 -2.71875 C 0.5625 -3.632812 0.804688 -4.359375 1.296875 -4.890625 C 1.785156 -5.421875 2.445312 -5.6875 3.28125 -5.6875 C 4.03125 -5.6875 4.617188 -5.445312 5.046875 -4.96875 C 5.484375 -4.488281 5.703125 -3.832031 5.703125 -3 Z M 4.796875 -3.265625 C 4.785156 -3.765625 4.644531 -4.164062 4.375 -4.46875 C 4.101562 -4.769531 3.742188 -4.921875 3.296875 -4.921875 C 2.785156 -4.921875 2.375 -4.773438 2.0625 -4.484375 C 1.757812 -4.191406 1.585938 -3.785156 1.546875 -3.265625 Z M 4.796875 -3.265625 "/>
+</symbol>
+<symbol overflow="visible" id="glyph1-27">
+<path style="stroke:none;" d="M 4.5 -5.390625 L 4.5 -4.53125 C 4.238281 -4.65625 3.96875 -4.75 3.6875 -4.8125 C 3.414062 -4.882812 3.128906 -4.921875 2.828125 -4.921875 C 2.378906 -4.921875 2.039062 -4.851562 1.8125 -4.71875 C 1.582031 -4.582031 1.46875 -4.375 1.46875 -4.09375 C 1.46875 -3.882812 1.546875 -3.71875 1.703125 -3.59375 C 1.867188 -3.46875 2.195312 -3.351562 2.6875 -3.25 L 3 -3.171875 C 3.65625 -3.035156 4.117188 -2.84375 4.390625 -2.59375 C 4.660156 -2.34375 4.796875 -1.988281 4.796875 -1.53125 C 4.796875 -1.019531 4.59375 -0.613281 4.1875 -0.3125 C 3.78125 -0.0078125 3.21875 0.140625 2.5 0.140625 C 2.195312 0.140625 1.882812 0.109375 1.5625 0.046875 C 1.25 -0.00390625 0.910156 -0.0859375 0.546875 -0.203125 L 0.546875 -1.140625 C 0.890625 -0.960938 1.222656 -0.832031 1.546875 -0.75 C 1.867188 -0.664062 2.191406 -0.625 2.515625 -0.625 C 2.941406 -0.625 3.269531 -0.695312 3.5 -0.84375 C 3.738281 -0.988281 3.859375 -1.195312 3.859375 -1.46875 C 3.859375 -1.707031 3.773438 -1.894531 3.609375 -2.03125 C 3.441406 -2.164062 3.078125 -2.296875 2.515625 -2.421875 L 2.1875 -2.484375 C 1.625 -2.609375 1.21875 -2.789062 0.96875 -3.03125 C 0.71875 -3.28125 0.59375 -3.617188 0.59375 -4.046875 C 0.59375 -4.566406 0.773438 -4.96875 1.140625 -5.25 C 1.515625 -5.539062 2.039062 -5.6875 2.71875 -5.6875 C 3.0625 -5.6875 3.378906 -5.660156 3.671875 -5.609375 C 3.972656 -5.566406 4.25 -5.492188 4.5 -5.390625 Z M 4.5 -5.390625 "/>
+</symbol>
+<symbol overflow="visible" id="glyph1-28">
+<path style="stroke:none;" d="M 1.265625 -0.84375 L 2.890625 -0.84375 L 2.890625 -6.484375 L 1.109375 -6.140625 L 1.109375 -7.046875 L 2.890625 -7.40625 L 3.890625 -7.40625 L 3.890625 -0.84375 L 5.53125 -0.84375 L 5.53125 0 L 1.265625 0 Z M 1.265625 -0.84375 "/>
+</symbol>
+<symbol overflow="visible" id="glyph1-29">
+<path style="stroke:none;" d="M 0.953125 -5.546875 L 1.875 -5.546875 L 1.875 0 L 0.953125 0 Z M 0.953125 -7.71875 L 1.875 -7.71875 L 1.875 -6.5625 L 0.953125 -6.5625 Z M 0.953125 -7.71875 "/>
+</symbol>
+<symbol overflow="visible" id="glyph1-30">
+<path style="stroke:none;" d="M 3.359375 -4.09375 C 2.898438 -4.09375 2.539062 -3.9375 2.28125 -3.625 C 2.019531 -3.320312 1.890625 -2.90625 1.890625 -2.375 C 1.890625 -1.84375 2.019531 -1.421875 2.28125 -1.109375 C 2.539062 -0.804688 2.898438 -0.65625 3.359375 -0.65625 C 3.804688 -0.65625 4.160156 -0.804688 4.421875 -1.109375 C 4.679688 -1.421875 4.8125 -1.84375 4.8125 -2.375 C 4.8125 -2.90625 4.679688 -3.320312 4.421875 -3.625 C 4.160156 -3.9375 3.804688 -4.09375 3.359375 -4.09375 Z M 5.34375 -7.234375 L 5.34375 -6.328125 C 5.09375 -6.441406 4.835938 -6.53125 4.578125 -6.59375 C 4.328125 -6.65625 4.070312 -6.6875 3.8125 -6.6875 C 3.15625 -6.6875 2.648438 -6.460938 2.296875 -6.015625 C 1.953125 -5.578125 1.753906 -4.90625 1.703125 -4 C 1.898438 -4.289062 2.144531 -4.507812 2.4375 -4.65625 C 2.726562 -4.8125 3.050781 -4.890625 3.40625 -4.890625 C 4.15625 -4.890625 4.742188 -4.664062 5.171875 -4.21875 C 5.609375 -3.769531 5.828125 -3.15625 5.828125 -2.375 C 5.828125 -1.613281 5.597656 -1.003906 5.140625 -0.546875 C 4.691406 -0.0859375 4.097656 0.140625 3.359375 0.140625 C 2.492188 0.140625 1.832031 -0.1875 1.375 -0.84375 C 0.925781 -1.5 0.703125 -2.445312 0.703125 -3.6875 C 0.703125 -4.863281 0.976562 -5.796875 1.53125 -6.484375 C 2.09375 -7.179688 2.84375 -7.53125 3.78125 -7.53125 C 4.03125 -7.53125 4.28125 -7.503906 4.53125 -7.453125 C 4.789062 -7.410156 5.0625 -7.335938 5.34375 -7.234375 Z M 5.34375 -7.234375 "/>
+</symbol>
+<symbol overflow="visible" id="glyph1-31">
+<path style="stroke:none;" d="M 3.84375 -6.53125 L 1.3125 -2.578125 L 3.84375 -2.578125 Z M 3.578125 -7.40625 L 4.828125 -7.40625 L 4.828125 -2.578125 L 5.890625 -2.578125 L 5.890625 -1.75 L 4.828125 -1.75 L 4.828125 0 L 3.84375 0 L 3.84375 -1.75 L 0.5 -1.75 L 0.5 -2.71875 Z M 3.578125 -7.40625 "/>
+</symbol>
+<symbol overflow="visible" id="glyph1-32">
+<path style="stroke:none;" d="M 0.828125 -7.40625 L 5.59375 -7.40625 L 5.59375 -6.984375 L 2.90625 0 L 1.859375 0 L 4.390625 -6.5625 L 0.828125 -6.5625 Z M 0.828125 -7.40625 "/>
+</symbol>
+</g>
+</defs>
+<g id="surface27564">
+<rect x="0" y="0" width="1603" height="513" style="fill:rgb(100%,100%,100%);fill-opacity:1;stroke:none;"/>
+<path style="fill-rule:evenodd;fill:rgb(100%,100%,100%);fill-opacity:1;stroke-width:0.1;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(0%,0%,0%);stroke-opacity:1;stroke-miterlimit:10;" d="M 13.5 6.5 L 22.5 6.5 L 22.5 7.5 L 13.5 7.5 Z M 13.5 6.5 " transform="matrix(20,0,0,20,12,172)"/>
+<path style="fill-rule:evenodd;fill:rgb(100%,100%,100%);fill-opacity:1;stroke-width:0.1;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(0%,0%,0%);stroke-opacity:1;stroke-miterlimit:10;" d="M 13.5 1.5 L 18.5 1.5 L 18.5 2.5 L 13.5 2.5 Z M 13.5 1.5 " transform="matrix(20,0,0,20,12,172)"/>
+<path style="fill-rule:evenodd;fill:rgb(100%,100%,100%);fill-opacity:1;stroke-width:0.1;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(0%,0%,0%);stroke-opacity:1;stroke-miterlimit:10;" d="M 22.5 6.5 L 64.5 6.5 L 64.5 7.5 L 22.5 7.5 Z M 22.5 6.5 " transform="matrix(20,0,0,20,12,172)"/>
+<g style="fill:rgb(0%,0%,0%);fill-opacity:1;">
+ <use xlink:href="#glyph0-1" x="32" y="102.005968"/>
+ <use xlink:href="#glyph0-2" x="39.222222" y="102.005968"/>
+</g>
+<g style="fill:rgb(0%,0%,0%);fill-opacity:1;">
+ <use xlink:href="#glyph0-1" x="32" y="152.005968"/>
+ <use xlink:href="#glyph0-3" x="39.222222" y="152.005968"/>
+</g>
+<g style="fill:rgb(0%,0%,0%);fill-opacity:1;">
+ <use xlink:href="#glyph0-1" x="32" y="402.005968"/>
+ <use xlink:href="#glyph0-4" x="39.222222" y="402.005968"/>
+ <use xlink:href="#glyph0-5" x="47.277778" y="402.005968"/>
+ <use xlink:href="#glyph0-6" x="51.444444" y="402.005968"/>
+</g>
+<g style="fill:rgb(0%,0%,0%);fill-opacity:1;">
+ <use xlink:href="#glyph0-1" x="32" y="452.005968"/>
+ <use xlink:href="#glyph0-6" x="39.222222" y="452.005968"/>
+</g>
+<g style="fill:rgb(0%,0%,0%);fill-opacity:1;">
+ <use xlink:href="#glyph0-7" x="82" y="102.005968"/>
+ <use xlink:href="#glyph0-8" x="90.888889" y="102.005968"/>
+ <use xlink:href="#glyph0-8" x="98.944444" y="102.005968"/>
+ <use xlink:href="#glyph0-9" x="107" y="102.005968"/>
+ <use xlink:href="#glyph0-10" x="110.611111" y="102.005968"/>
+ <use xlink:href="#glyph0-11" x="114.222222" y="102.005968"/>
+ <use xlink:href="#glyph0-12" x="121.166667" y="102.005968"/>
+ <use xlink:href="#glyph0-13" x="128.944444" y="102.005968"/>
+ <use xlink:href="#glyph0-10" x="133.944444" y="102.005968"/>
+ <use xlink:href="#glyph0-14" x="137.555556" y="102.005968"/>
+ <use xlink:href="#glyph0-15" x="145.333333" y="102.005968"/>
+</g>
+<g style="fill:rgb(0%,0%,0%);fill-opacity:1;">
+ <use xlink:href="#glyph0-16" x="82" y="152.005968"/>
+ <use xlink:href="#glyph0-17" x="90.055556" y="152.005968"/>
+ <use xlink:href="#glyph0-11" x="97.833333" y="152.005968"/>
+ <use xlink:href="#glyph0-18" x="104.777778" y="152.005968"/>
+ <use xlink:href="#glyph0-19" x="112.833333" y="152.005968"/>
+ <use xlink:href="#glyph0-17" x="117.833333" y="152.005968"/>
+ <use xlink:href="#glyph0-20" x="125.611111" y="152.005968"/>
+ <use xlink:href="#glyph0-11" x="129.777778" y="152.005968"/>
+ <use xlink:href="#glyph0-21" x="136.722222" y="152.005968"/>
+ <use xlink:href="#glyph0-12" x="144.777778" y="152.005968"/>
+ <use xlink:href="#glyph0-15" x="152.555556" y="152.005968"/>
+ <use xlink:href="#glyph0-15" x="160.611111" y="152.005968"/>
+ <use xlink:href="#glyph0-17" x="168.666667" y="152.005968"/>
+ <use xlink:href="#glyph0-9" x="176.444444" y="152.005968"/>
+</g>
+<g style="fill:rgb(0%,0%,0%);fill-opacity:1;">
+ <use xlink:href="#glyph0-22" x="82" y="402.005968"/>
+ <use xlink:href="#glyph0-21" x="90.888889" y="402.005968"/>
+ <use xlink:href="#glyph0-12" x="98.944444" y="402.005968"/>
+ <use xlink:href="#glyph0-15" x="106.722222" y="402.005968"/>
+ <use xlink:href="#glyph0-15" x="114.777778" y="402.005968"/>
+ <use xlink:href="#glyph0-17" x="122.833333" y="402.005968"/>
+ <use xlink:href="#glyph0-9" x="130.611111" y="402.005968"/>
+ <use xlink:href="#glyph0-20" x="134.222222" y="402.005968"/>
+ <use xlink:href="#glyph0-23" x="138.388889" y="402.005968"/>
+ <use xlink:href="#glyph0-18" x="150.888889" y="402.005968"/>
+ <use xlink:href="#glyph0-9" x="158.944444" y="402.005968"/>
+ <use xlink:href="#glyph0-13" x="162.555556" y="402.005968"/>
+ <use xlink:href="#glyph0-10" x="167.555556" y="402.005968"/>
+ <use xlink:href="#glyph0-8" x="171.166667" y="402.005968"/>
+ <use xlink:href="#glyph0-9" x="179.222222" y="402.005968"/>
+ <use xlink:href="#glyph0-17" x="182.833333" y="402.005968"/>
+ <use xlink:href="#glyph0-24" x="190.611111" y="402.005968"/>
+ <use xlink:href="#glyph0-10" x="198.111111" y="402.005968"/>
+ <use xlink:href="#glyph0-15" x="201.722222" y="402.005968"/>
+ <use xlink:href="#glyph0-25" x="209.777778" y="402.005968"/>
+</g>
+<g style="fill:rgb(0%,0%,0%);fill-opacity:1;">
+ <use xlink:href="#glyph0-26" x="82" y="452.005968"/>
+ <use xlink:href="#glyph0-12" x="91.722222" y="452.005968"/>
+ <use xlink:href="#glyph0-13" x="99.5" y="452.005968"/>
+ <use xlink:href="#glyph0-12" x="104.5" y="452.005968"/>
+ <use xlink:href="#glyph0-20" x="112.277778" y="452.005968"/>
+ <use xlink:href="#glyph0-13" x="116.444444" y="452.005968"/>
+ <use xlink:href="#glyph0-19" x="121.444444" y="452.005968"/>
+ <use xlink:href="#glyph0-12" x="126.722222" y="452.005968"/>
+ <use xlink:href="#glyph0-15" x="134.5" y="452.005968"/>
+ <use xlink:href="#glyph0-27" x="142.555556" y="452.005968"/>
+ <use xlink:href="#glyph0-28" x="149.222222" y="452.005968"/>
+ <use xlink:href="#glyph0-17" x="153.666667" y="452.005968"/>
+ <use xlink:href="#glyph0-19" x="161.444444" y="452.005968"/>
+</g>
+<path style="fill:none;stroke-width:0.1;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(0%,0%,0%);stroke-opacity:1;stroke-dasharray:0.1,0.1;stroke-miterlimit:10;" d="M 0 -8 L 11 -8 L 11 16.5 L 0 16.5 L 0 -8 " transform="matrix(20,0,0,20,12,172)"/>
+<g style="fill:rgb(0%,0%,0%);fill-opacity:1;">
+ <use xlink:href="#glyph0-1" x="82" y="52.005968"/>
+ <use xlink:href="#glyph0-12" x="89.222222" y="52.005968"/>
+ <use xlink:href="#glyph0-29" x="97" y="52.005968"/>
+ <use xlink:href="#glyph0-17" x="104.5" y="52.005968"/>
+ <use xlink:href="#glyph0-19" x="112.277778" y="52.005968"/>
+ <use xlink:href="#glyph0-27" x="117.555556" y="52.005968"/>
+</g>
+<path style="fill-rule:evenodd;fill:rgb(100%,100%,100%);fill-opacity:1;stroke-width:0.1;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(0%,0%,0%);stroke-opacity:1;stroke-miterlimit:10;" d="M 22.5 -1 L 60.5 -1 L 60.5 -0.000000000000001776 L 22.5 -0.000000000000001776 Z M 22.5 -1 " transform="matrix(20,0,0,20,12,172)"/>
+<g style="fill:rgb(0%,0%,0%);fill-opacity:1;">
+ <use xlink:href="#glyph1-1" x="1145.476562" y="165.532444"/>
+ <use xlink:href="#glyph1-2" x="1152.421007" y="165.532444"/>
+ <use xlink:href="#glyph1-1" x="1158.809896" y="165.532444"/>
+ <use xlink:href="#glyph1-3" x="1165.75434" y="165.532444"/>
+ <use xlink:href="#glyph1-4" x="1173.532118" y="165.532444"/>
+ <use xlink:href="#glyph1-5" x="1178.532118" y="165.532444"/>
+ <use xlink:href="#glyph1-1" x="1184.087674" y="165.532444"/>
+ <use xlink:href="#glyph1-6" x="1190.75434" y="165.532444"/>
+</g>
+<path style="fill:none;stroke-width:0.1;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(0%,0%,0%);stroke-opacity:1;stroke-miterlimit:10;" d="M 55.5 -1 L 55.5 -0.000000000000001776 " transform="matrix(20,0,0,20,12,172)"/>
+<g style="fill:rgb(0%,0%,0%);fill-opacity:1;">
+ <use xlink:href="#glyph1-2" x="746.316406" y="165.532444"/>
+ <use xlink:href="#glyph1-7" x="752.705295" y="165.532444"/>
+ <use xlink:href="#glyph1-8" x="760.205295" y="165.532444"/>
+ <use xlink:href="#glyph1-9" x="767.427517" y="165.532444"/>
+ <use xlink:href="#glyph1-10" x="773.816406" y="165.532444"/>
+ <use xlink:href="#glyph1-11" x="779.927517" y="165.532444"/>
+ <use xlink:href="#glyph1-5" x="786.038628" y="165.532444"/>
+ <use xlink:href="#glyph1-2" x="792.14974" y="165.532444"/>
+ <use xlink:href="#glyph1-3" x="798.538628" y="165.532444"/>
+ <use xlink:href="#glyph1-4" x="806.316406" y="165.532444"/>
+ <use xlink:href="#glyph1-3" x="811.316406" y="165.532444"/>
+ <use xlink:href="#glyph1-1" x="819.094184" y="165.532444"/>
+ <use xlink:href="#glyph1-5" x="825.205295" y="165.532444"/>
+ <use xlink:href="#glyph1-1" x="830.760851" y="165.532444"/>
+</g>
+<path style="fill-rule:evenodd;fill:rgb(100%,100%,100%);fill-opacity:1;stroke-width:0.1;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(0%,0%,0%);stroke-opacity:1;stroke-miterlimit:10;" d="M 22.5 -3.5 L 55.5 -3.5 L 55.5 -2.5 L 22.5 -2.5 Z M 22.5 -3.5 " transform="matrix(20,0,0,20,12,172)"/>
+<g style="fill:rgb(0%,0%,0%);fill-opacity:1;">
+ <use xlink:href="#glyph1-12" x="515.613281" y="115.532444"/>
+ <use xlink:href="#glyph1-13" x="524.50217" y="115.532444"/>
+ <use xlink:href="#glyph1-6" x="530.891059" y="115.532444"/>
+ <use xlink:href="#glyph1-4" x="538.668837" y="115.532444"/>
+ <use xlink:href="#glyph1-5" x="543.668837" y="115.532444"/>
+ <use xlink:href="#glyph1-10" x="549.779948" y="115.532444"/>
+ <use xlink:href="#glyph1-11" x="555.891059" y="115.532444"/>
+ <use xlink:href="#glyph1-2" x="562.00217" y="115.532444"/>
+</g>
+<path style="fill:none;stroke-width:0.1;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(0%,0%,0%);stroke-opacity:1;stroke-miterlimit:10;" d="M 28.5 -3.5 L 28.5 -2.5 " transform="matrix(20,0,0,20,12,172)"/>
+<g style="fill:rgb(0%,0%,0%);fill-opacity:1;">
+ <use xlink:href="#glyph1-11" x="769.089844" y="115.532444"/>
+ <use xlink:href="#glyph1-9" x="775.200955" y="115.532444"/>
+ <use xlink:href="#glyph1-14" x="782.145399" y="115.532444"/>
+ <use xlink:href="#glyph1-5" x="790.200955" y="115.532444"/>
+ <use xlink:href="#glyph1-14" x="796.312066" y="115.532444"/>
+ <use xlink:href="#glyph1-15" x="804.367622" y="115.532444"/>
+ <use xlink:href="#glyph1-16" x="811.312066" y="115.532444"/>
+ <use xlink:href="#glyph1-17" x="818.812066" y="115.532444"/>
+ <use xlink:href="#glyph1-4" x="824.645399" y="115.532444"/>
+ <use xlink:href="#glyph1-2" x="829.645399" y="115.532444"/>
+ <use xlink:href="#glyph1-7" x="836.034288" y="115.532444"/>
+ <use xlink:href="#glyph1-8" x="843.534288" y="115.532444"/>
+ <use xlink:href="#glyph1-14" x="850.75651" y="115.532444"/>
+ <use xlink:href="#glyph1-3" x="858.812066" y="115.532444"/>
+ <use xlink:href="#glyph1-2" x="866.589844" y="115.532444"/>
+ <use xlink:href="#glyph1-3" x="872.978733" y="115.532444"/>
+ <use xlink:href="#glyph1-4" x="880.75651" y="115.532444"/>
+ <use xlink:href="#glyph1-12" x="885.75651" y="115.532444"/>
+ <use xlink:href="#glyph1-2" x="894.645399" y="115.532444"/>
+ <use xlink:href="#glyph1-13" x="901.034288" y="115.532444"/>
+ <use xlink:href="#glyph1-13" x="907.423177" y="115.532444"/>
+ <use xlink:href="#glyph1-1" x="914.089844" y="115.532444"/>
+ <use xlink:href="#glyph1-6" x="920.75651" y="115.532444"/>
+ <use xlink:href="#glyph1-2" x="928.534288" y="115.532444"/>
+</g>
+<path style="fill:none;stroke-width:0.05;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(0%,0%,0%);stroke-opacity:1;stroke-dasharray:0.05,0.05;stroke-miterlimit:10;" d="M 42.5 14 L 42.5 12.5 " transform="matrix(20,0,0,20,12,172)"/>
+<path style="fill:none;stroke-width:0.05;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(0%,0%,0%);stroke-opacity:1;stroke-dasharray:0.05,0.05;stroke-miterlimit:10;" d="M 13.5 14 L 13.5 12.5 " transform="matrix(20,0,0,20,12,172)"/>
+<path style="fill:none;stroke-width:0.05;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(0%,0%,0%);stroke-opacity:1;stroke-dasharray:0.05,0.05;stroke-miterlimit:10;" d="M 55.5 -1 L 55.5 -2.5 " transform="matrix(20,0,0,20,12,172)"/>
+<path style="fill:none;stroke-width:0.1;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(0%,0%,0%);stroke-opacity:1;stroke-dasharray:0.2,0.2;stroke-miterlimit:10;" d="M 0 15 L 77 15 " transform="matrix(20,0,0,20,12,172)"/>
+<path style="fill:none;stroke-width:0.1;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(0%,0%,0%);stroke-opacity:1;stroke-dasharray:0.2,0.2;stroke-miterlimit:10;" d="M 0 -0.000000000000001776 L 77 -0.000000000000001776 " transform="matrix(20,0,0,20,12,172)"/>
+<path style="fill:none;stroke-width:0.1;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(0%,0%,0%);stroke-opacity:1;stroke-dasharray:0.2,0.2;stroke-miterlimit:10;" d="M 0 -2.5 L 77 -2.5 " transform="matrix(20,0,0,20,12,172)"/>
+<path style="fill:none;stroke-width:0.1;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(0%,0%,0%);stroke-opacity:1;stroke-dasharray:0.2,0.2;stroke-miterlimit:10;" d="M 0 -5 L 77 -5 " transform="matrix(20,0,0,20,12,172)"/>
+<path style="fill-rule:evenodd;fill:rgb(100%,100%,100%);fill-opacity:1;stroke-width:0.1;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(0%,0%,0%);stroke-opacity:1;stroke-miterlimit:10;" d="M 13.5 14 L 42.5 14 L 42.5 15 L 13.5 15 Z M 13.5 14 " transform="matrix(20,0,0,20,12,172)"/>
+<g style="fill:rgb(0%,0%,0%);fill-opacity:1;">
+ <use xlink:href="#glyph1-11" x="552.703125" y="465.387912"/>
+ <use xlink:href="#glyph1-1" x="558.258681" y="465.387912"/>
+ <use xlink:href="#glyph1-8" x="564.925347" y="465.387912"/>
+ <use xlink:href="#glyph1-18" x="572.147569" y="465.387912"/>
+ <use xlink:href="#glyph1-2" x="578.814236" y="465.387912"/>
+ <use xlink:href="#glyph1-5" x="585.203125" y="465.387912"/>
+</g>
+<path style="fill:none;stroke-width:0.1;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(0%,0%,0%);stroke-opacity:1;stroke-dasharray:0.2,0.2;stroke-miterlimit:10;" d="M 0 12.5 L 77 12.5 " transform="matrix(20,0,0,20,12,172)"/>
+<g style="fill:rgb(0%,0%,0%);fill-opacity:1;">
+ <use xlink:href="#glyph0-1" x="32" y="302.005968"/>
+ <use xlink:href="#glyph0-4" x="39.222222" y="302.005968"/>
+ <use xlink:href="#glyph0-5" x="47.277778" y="302.005968"/>
+ <use xlink:href="#glyph0-3" x="51.444444" y="302.005968"/>
+</g>
+<g style="fill:rgb(0%,0%,0%);fill-opacity:1;">
+ <use xlink:href="#glyph0-1" x="32" y="352.005968"/>
+ <use xlink:href="#glyph0-4" x="39.222222" y="352.005968"/>
+ <use xlink:href="#glyph0-5" x="47.277778" y="352.005968"/>
+ <use xlink:href="#glyph0-4" x="51.444444" y="352.005968"/>
+</g>
+<g style="fill:rgb(0%,0%,0%);fill-opacity:1;">
+ <use xlink:href="#glyph0-30" x="82" y="302.005968"/>
+ <use xlink:href="#glyph0-19" x="90.055556" y="302.005968"/>
+ <use xlink:href="#glyph0-19" x="95.055556" y="302.005968"/>
+ <use xlink:href="#glyph0-14" x="100.055556" y="302.005968"/>
+ <use xlink:href="#glyph0-19" x="107.833333" y="302.005968"/>
+ <use xlink:href="#glyph0-20" x="113.111111" y="302.005968"/>
+ <use xlink:href="#glyph0-31" x="117.277778" y="302.005968"/>
+ <use xlink:href="#glyph0-17" x="125.333333" y="302.005968"/>
+ <use xlink:href="#glyph0-13" x="133.111111" y="302.005968"/>
+ <use xlink:href="#glyph0-17" x="138.111111" y="302.005968"/>
+ <use xlink:href="#glyph0-11" x="145.888889" y="302.005968"/>
+ <use xlink:href="#glyph0-13" x="152.833333" y="302.005968"/>
+ <use xlink:href="#glyph0-10" x="157.833333" y="302.005968"/>
+ <use xlink:href="#glyph0-14" x="161.444444" y="302.005968"/>
+ <use xlink:href="#glyph0-15" x="169.222222" y="302.005968"/>
+</g>
+<g style="fill:rgb(0%,0%,0%);fill-opacity:1;">
+ <use xlink:href="#glyph0-16" x="82" y="352.005968"/>
+ <use xlink:href="#glyph0-17" x="90.055556" y="352.005968"/>
+ <use xlink:href="#glyph0-25" x="97.833333" y="352.005968"/>
+ <use xlink:href="#glyph0-23" x="105.888889" y="352.005968"/>
+ <use xlink:href="#glyph0-17" x="118.388889" y="352.005968"/>
+ <use xlink:href="#glyph0-15" x="126.166667" y="352.005968"/>
+ <use xlink:href="#glyph0-13" x="134.222222" y="352.005968"/>
+ <use xlink:href="#glyph0-10" x="139.222222" y="352.005968"/>
+ <use xlink:href="#glyph0-15" x="142.833333" y="352.005968"/>
+ <use xlink:href="#glyph0-25" x="150.888889" y="352.005968"/>
+</g>
+<path style="fill:none;stroke-width:0.1;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(0%,0%,0%);stroke-opacity:1;stroke-dasharray:0.2,0.2;stroke-miterlimit:10;" d="M 0 7.5 L 77 7.5 " transform="matrix(20,0,0,20,12,172)"/>
+<g style="fill:rgb(0%,0%,0%);fill-opacity:1;">
+ <use xlink:href="#glyph0-7" x="82" y="252.005968"/>
+ <use xlink:href="#glyph0-9" x="90.888889" y="252.005968"/>
+ <use xlink:href="#glyph0-9" x="94.5" y="252.005968"/>
+ <use xlink:href="#glyph0-14" x="98.111111" y="252.005968"/>
+ <use xlink:href="#glyph0-11" x="105.888889" y="252.005968"/>
+ <use xlink:href="#glyph0-12" x="112.833333" y="252.005968"/>
+ <use xlink:href="#glyph0-13" x="120.611111" y="252.005968"/>
+ <use xlink:href="#glyph0-10" x="125.611111" y="252.005968"/>
+ <use xlink:href="#glyph0-14" x="129.222222" y="252.005968"/>
+ <use xlink:href="#glyph0-15" x="137" y="252.005968"/>
+</g>
+<g style="fill:rgb(0%,0%,0%);fill-opacity:1;">
+ <use xlink:href="#glyph0-1" x="32" y="252.005968"/>
+ <use xlink:href="#glyph0-4" x="39.222222" y="252.005968"/>
+ <use xlink:href="#glyph0-5" x="47.277778" y="252.005968"/>
+ <use xlink:href="#glyph0-2" x="51.444444" y="252.005968"/>
+</g>
+<g style="fill:rgb(0%,0%,0%);fill-opacity:1;">
+ <use xlink:href="#glyph0-16" x="82" y="202.005968"/>
+ <use xlink:href="#glyph0-29" x="90.055556" y="202.005968"/>
+ <use xlink:href="#glyph0-15" x="97.555556" y="202.005968"/>
+ <use xlink:href="#glyph0-11" x="105.611111" y="202.005968"/>
+ <use xlink:href="#glyph0-21" x="112.555556" y="202.005968"/>
+ <use xlink:href="#glyph0-19" x="120.611111" y="202.005968"/>
+ <use xlink:href="#glyph0-14" x="125.611111" y="202.005968"/>
+ <use xlink:href="#glyph0-15" x="133.388889" y="202.005968"/>
+ <use xlink:href="#glyph0-10" x="141.444444" y="202.005968"/>
+ <use xlink:href="#glyph0-32" x="145.055556" y="202.005968"/>
+ <use xlink:href="#glyph0-12" x="151.722222" y="202.005968"/>
+ <use xlink:href="#glyph0-13" x="159.5" y="202.005968"/>
+ <use xlink:href="#glyph0-10" x="164.5" y="202.005968"/>
+ <use xlink:href="#glyph0-14" x="168.111111" y="202.005968"/>
+ <use xlink:href="#glyph0-15" x="175.888889" y="202.005968"/>
+</g>
+<path style="fill:none;stroke-width:0.1;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(0%,0%,0%);stroke-opacity:1;stroke-dasharray:0.2,0.2;stroke-miterlimit:10;" d="M 0 2.5 L 77 2.5 " transform="matrix(20,0,0,20,12,172)"/>
+<g style="fill:rgb(0%,0%,0%);fill-opacity:1;">
+ <use xlink:href="#glyph0-1" x="32" y="202.005968"/>
+ <use xlink:href="#glyph0-4" x="39.222222" y="202.005968"/>
+ <use xlink:href="#glyph0-5" x="47.277778" y="202.005968"/>
+ <use xlink:href="#glyph0-33" x="51.444444" y="202.005968"/>
+</g>
+<path style="fill-rule:evenodd;fill:rgb(100%,100%,100%);fill-opacity:1;stroke-width:0.1;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(0%,0%,0%);stroke-opacity:1;stroke-miterlimit:10;" d="M 20.5 9 L 42.5 9 L 42.5 10 L 20.5 10 Z M 20.5 9 " transform="matrix(20,0,0,20,12,172)"/>
+<path style="fill:none;stroke-width:0.1;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(0%,0%,0%);stroke-opacity:1;stroke-miterlimit:10;" d="M 22.5 9 L 22.5 10 " transform="matrix(20,0,0,20,12,172)"/>
+<g style="fill:rgb(0%,0%,0%);fill-opacity:1;">
+ <use xlink:href="#glyph1-19" x="432.292969" y="365.532444"/>
+ <use xlink:href="#glyph1-2" x="437.848524" y="365.532444"/>
+ <use xlink:href="#glyph1-7" x="444.237413" y="365.532444"/>
+</g>
+<g style="fill:rgb(0%,0%,0%);fill-opacity:1;">
+ <use xlink:href="#glyph1-11" x="597.429688" y="365.532444"/>
+ <use xlink:href="#glyph1-1" x="602.985243" y="365.532444"/>
+ <use xlink:href="#glyph1-8" x="609.65191" y="365.532444"/>
+ <use xlink:href="#glyph1-18" x="616.874132" y="365.532444"/>
+ <use xlink:href="#glyph1-2" x="623.540799" y="365.532444"/>
+ <use xlink:href="#glyph1-5" x="629.929688" y="365.532444"/>
+ <use xlink:href="#glyph1-4" x="636.040799" y="365.532444"/>
+ <use xlink:href="#glyph1-11" x="641.040799" y="365.532444"/>
+ <use xlink:href="#glyph1-1" x="646.596354" y="365.532444"/>
+ <use xlink:href="#glyph1-10" x="652.707465" y="365.532444"/>
+ <use xlink:href="#glyph1-19" x="658.818576" y="365.532444"/>
+ <use xlink:href="#glyph1-14" x="664.096354" y="365.532444"/>
+ <use xlink:href="#glyph1-1" x="671.874132" y="365.532444"/>
+ <use xlink:href="#glyph1-3" x="678.818576" y="365.532444"/>
+</g>
+<path style="fill:none;stroke-width:0.05;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(0%,0%,0%);stroke-opacity:1;stroke-dasharray:0.05,0.05;stroke-miterlimit:10;" d="M 22.5 6.5 L 22.5 5 " transform="matrix(20,0,0,20,12,172)"/>
+<path style="fill:none;stroke-width:0.05;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(0%,0%,0%);stroke-opacity:1;stroke-dasharray:0.05,0.05;stroke-miterlimit:10;" d="M 22.5 4 L 22.5 2.5 " transform="matrix(20,0,0,20,12,172)"/>
+<path style="fill:none;stroke-width:0.05;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(0%,0%,0%);stroke-opacity:1;stroke-dasharray:0.05,0.05;stroke-miterlimit:10;" d="M 22.5 1.5 L 22.5 -0.000000000000001776 " transform="matrix(20,0,0,20,12,172)"/>
+<path style="fill-rule:evenodd;fill:rgb(100%,100%,100%);fill-opacity:1;stroke-width:0.1;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(0%,0%,0%);stroke-opacity:1;stroke-miterlimit:10;" d="M 13.5 11.5 L 42.5 11.5 L 42.5 12.5 L 13.5 12.5 Z M 13.5 11.5 " transform="matrix(20,0,0,20,12,172)"/>
+<path style="fill:none;stroke-width:0.1;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(0%,0%,0%);stroke-opacity:1;stroke-miterlimit:10;" d="M 20.5 11.5 L 20.5 12.5 " transform="matrix(20,0,0,20,12,172)"/>
+<path style="fill:none;stroke-width:0.1;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(0%,0%,0%);stroke-opacity:1;stroke-miterlimit:10;" d="M 18.5 11.5 L 18.5 12.5 " transform="matrix(20,0,0,20,12,172)"/>
+<g style="fill:rgb(0%,0%,0%);fill-opacity:1;">
+ <use xlink:href="#glyph1-8" x="392.976562" y="415.532444"/>
+ <use xlink:href="#glyph1-20" x="400.198785" y="415.532444"/>
+ <use xlink:href="#glyph1-3" x="403.25434" y="415.532444"/>
+</g>
+<g style="fill:rgb(0%,0%,0%);fill-opacity:1;">
+ <use xlink:href="#glyph1-8" x="392.976562" y="315.532444"/>
+ <use xlink:href="#glyph1-20" x="400.198785" y="315.532444"/>
+ <use xlink:href="#glyph1-3" x="403.25434" y="315.532444"/>
+</g>
+<path style="fill-rule:evenodd;fill:rgb(100%,100%,100%);fill-opacity:1;stroke-width:0.1;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(0%,0%,0%);stroke-opacity:1;stroke-miterlimit:10;" d="M 13.5 9 L 20.5 9 L 20.5 10 L 13.5 10 Z M 13.5 9 " transform="matrix(20,0,0,20,12,172)"/>
+<g style="fill:rgb(0%,0%,0%);fill-opacity:1;">
+ <use xlink:href="#glyph1-5" x="289.65625" y="365.532444"/>
+ <use xlink:href="#glyph1-10" x="295.767361" y="365.532444"/>
+ <use xlink:href="#glyph1-11" x="301.878472" y="365.532444"/>
+ <use xlink:href="#glyph1-2" x="307.989583" y="365.532444"/>
+</g>
+<g style="fill:rgb(0%,0%,0%);fill-opacity:1;">
+ <use xlink:href="#glyph1-5" x="786.589844" y="315.532444"/>
+ <use xlink:href="#glyph1-9" x="792.700955" y="315.532444"/>
+ <use xlink:href="#glyph1-1" x="799.367622" y="315.532444"/>
+ <use xlink:href="#glyph1-7" x="806.312066" y="315.532444"/>
+ <use xlink:href="#glyph1-13" x="813.812066" y="315.532444"/>
+ <use xlink:href="#glyph1-11" x="820.200955" y="315.532444"/>
+ <use xlink:href="#glyph1-14" x="826.312066" y="315.532444"/>
+ <use xlink:href="#glyph1-9" x="834.367622" y="315.532444"/>
+ <use xlink:href="#glyph1-5" x="840.75651" y="315.532444"/>
+ <use xlink:href="#glyph1-4" x="846.867622" y="315.532444"/>
+ <use xlink:href="#glyph1-11" x="851.867622" y="315.532444"/>
+ <use xlink:href="#glyph1-1" x="857.423177" y="315.532444"/>
+ <use xlink:href="#glyph1-10" x="863.534288" y="315.532444"/>
+ <use xlink:href="#glyph1-19" x="869.645399" y="315.532444"/>
+ <use xlink:href="#glyph1-14" x="874.923177" y="315.532444"/>
+ <use xlink:href="#glyph1-1" x="882.700955" y="315.532444"/>
+ <use xlink:href="#glyph1-3" x="889.645399" y="315.532444"/>
+</g>
+<path style="fill:none;stroke-width:0.1;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(0%,0%,0%);stroke-opacity:1;stroke-miterlimit:10;" d="M 22.5 4 L 22.5 5 " transform="matrix(20,0,0,20,12,172)"/>
+<path style="fill:none;stroke-width:0.1;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(0%,0%,0%);stroke-opacity:1;stroke-miterlimit:10;" d="M 60.5 6.5 L 60.5 7.5 " transform="matrix(20,0,0,20,12,172)"/>
+<g style="fill:rgb(0%,0%,0%);fill-opacity:1;">
+ <use xlink:href="#glyph1-8" x="1251.453125" y="315.532444"/>
+ <use xlink:href="#glyph1-9" x="1258.675347" y="315.532444"/>
+ <use xlink:href="#glyph1-8" x="1265.342014" y="315.532444"/>
+</g>
+<path style="fill:none;stroke-width:0.05;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(0%,0%,0%);stroke-opacity:1;stroke-dasharray:0.05,0.05;stroke-miterlimit:10;" d="M 42.5 9 L 42.5 7.5 " transform="matrix(20,0,0,20,12,172)"/>
+<path style="fill:none;stroke-width:0.05;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(0%,0%,0%);stroke-opacity:1;stroke-dasharray:0.05,0.05;stroke-miterlimit:10;" d="M 44.5 14 L 44.5 12.5 " transform="matrix(20,0,0,20,12,172)"/>
+<path style="fill:none;stroke-width:0.05;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(0%,0%,0%);stroke-opacity:1;stroke-dasharray:0.05,0.05;stroke-miterlimit:10;" d="M 73.5 14 L 73.5 12.5 " transform="matrix(20,0,0,20,12,172)"/>
+<path style="fill:none;stroke-width:0.05;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(0%,0%,0%);stroke-opacity:1;stroke-dasharray:0.05,0.05;stroke-miterlimit:10;" d="M 13.5 11.5 L 13.5 10 " transform="matrix(20,0,0,20,12,172)"/>
+<path style="fill:none;stroke-width:0.05;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(0%,0%,0%);stroke-opacity:1;stroke-dasharray:0.05,0.05;stroke-miterlimit:10;" d="M 42.5 11.5 L 42.5 10 " transform="matrix(20,0,0,20,12,172)"/>
+<path style="fill-rule:evenodd;fill:rgb(100%,100%,100%);fill-opacity:1;stroke-width:0.1;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(0%,0%,0%);stroke-opacity:1;stroke-miterlimit:10;" d="M 44.5 11.5 L 73.5 11.5 L 73.5 12.5 L 44.5 12.5 Z M 44.5 11.5 " transform="matrix(20,0,0,20,12,172)"/>
+<path style="fill:none;stroke-width:0.1;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(0%,0%,0%);stroke-opacity:1;stroke-miterlimit:10;" d="M 51.5 11.5 L 51.5 12.5 " transform="matrix(20,0,0,20,12,172)"/>
+<g style="fill:rgb(0%,0%,0%);fill-opacity:1;">
+ <use xlink:href="#glyph1-8" x="1012.976563" y="415.532444"/>
+ <use xlink:href="#glyph1-20" x="1020.198785" y="415.532444"/>
+ <use xlink:href="#glyph1-3" x="1023.25434" y="415.532444"/>
+</g>
+<path style="fill:none;stroke-width:0.1;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(0%,0%,0%);stroke-opacity:1;stroke-miterlimit:10;" d="M 49.5 11.5 L 49.5 12.5 " transform="matrix(20,0,0,20,12,172)"/>
+<path style="fill-rule:evenodd;fill:rgb(100%,100%,100%);fill-opacity:1;stroke-width:0.1;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(0%,0%,0%);stroke-opacity:1;stroke-miterlimit:10;" d="M 44.5 9 L 71.5 9 L 71.5 10 L 44.5 10 Z M 44.5 9 " transform="matrix(20,0,0,20,12,172)"/>
+<g style="fill:rgb(0%,0%,0%);fill-opacity:1;">
+ <use xlink:href="#glyph1-5" x="909.65625" y="365.532444"/>
+ <use xlink:href="#glyph1-10" x="915.767361" y="365.532444"/>
+ <use xlink:href="#glyph1-11" x="921.878472" y="365.532444"/>
+ <use xlink:href="#glyph1-2" x="927.989583" y="365.532444"/>
+</g>
+<g style="fill:rgb(0%,0%,0%);fill-opacity:1;">
+ <use xlink:href="#glyph1-11" x="1177.429688" y="365.532444"/>
+ <use xlink:href="#glyph1-1" x="1182.985243" y="365.532444"/>
+ <use xlink:href="#glyph1-8" x="1189.65191" y="365.532444"/>
+ <use xlink:href="#glyph1-18" x="1196.874132" y="365.532444"/>
+ <use xlink:href="#glyph1-2" x="1203.540799" y="365.532444"/>
+ <use xlink:href="#glyph1-5" x="1209.929688" y="365.532444"/>
+ <use xlink:href="#glyph1-4" x="1216.040799" y="365.532444"/>
+ <use xlink:href="#glyph1-11" x="1221.040799" y="365.532444"/>
+ <use xlink:href="#glyph1-1" x="1226.596354" y="365.532444"/>
+ <use xlink:href="#glyph1-10" x="1232.707465" y="365.532444"/>
+ <use xlink:href="#glyph1-19" x="1238.818576" y="365.532444"/>
+ <use xlink:href="#glyph1-14" x="1244.096354" y="365.532444"/>
+ <use xlink:href="#glyph1-1" x="1251.874132" y="365.532444"/>
+ <use xlink:href="#glyph1-3" x="1258.818576" y="365.532444"/>
+</g>
+<path style="fill:none;stroke-width:0.1;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(0%,0%,0%);stroke-opacity:1;stroke-miterlimit:10;" d="M 46.5 9 L 46.5 10 " transform="matrix(20,0,0,20,12,172)"/>
+<g style="fill:rgb(0%,0%,0%);fill-opacity:1;">
+ <use xlink:href="#glyph1-9" x="961.863281" y="365.532444"/>
+ <use xlink:href="#glyph1-17" x="968.807726" y="365.532444"/>
+ <use xlink:href="#glyph1-16" x="974.641059" y="365.532444"/>
+</g>
+<path style="fill:none;stroke-width:0.05;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(0%,0%,0%);stroke-opacity:1;stroke-dasharray:0.05,0.05;stroke-miterlimit:10;" d="M 44.5 11.5 L 44.5 10 " transform="matrix(20,0,0,20,12,172)"/>
+<path style="fill:none;stroke-width:0.05;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(0%,0%,0%);stroke-opacity:1;stroke-dasharray:0.05,0.05;stroke-miterlimit:10;" d="M 49.5 11.5 L 49.5 10 " transform="matrix(20,0,0,20,12,172)"/>
+<path style="fill:none;stroke-width:0.05;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(0%,0%,0%);stroke-opacity:1;stroke-dasharray:0.05,0.05;stroke-miterlimit:10;" d="M 51.5 11.5 L 49.5 10 " transform="matrix(20,0,0,20,12,172)"/>
+<path style="fill:none;stroke-width:0.05;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(0%,0%,0%);stroke-opacity:1;stroke-dasharray:0.05,0.05;stroke-miterlimit:10;" d="M 73.5 11.5 L 71.5 10 " transform="matrix(20,0,0,20,12,172)"/>
+<path style="fill:none;stroke-width:0.1;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(0%,0%,0%);stroke-opacity:1;stroke-miterlimit:10;" d="M 15.5 9 L 15.5 10 " transform="matrix(20,0,0,20,12,172)"/>
+<path style="fill:none;stroke-width:0.1;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(0%,0%,0%);stroke-opacity:1;stroke-dasharray:0.2,0.2;stroke-miterlimit:10;" d="M 0 10 L 77 10 " transform="matrix(20,0,0,20,12,172)"/>
+<path style="fill:none;stroke-width:0.05;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(0%,0%,0%);stroke-opacity:1;stroke-dasharray:0.05,0.05;stroke-miterlimit:10;" d="M 49.5 9 L 42.5 7.5 " transform="matrix(20,0,0,20,12,172)"/>
+<path style="fill-rule:evenodd;fill:rgb(100%,100%,100%);fill-opacity:1;stroke-width:0.1;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(0%,0%,0%);stroke-opacity:1;stroke-miterlimit:10;" d="M 22.5 4 L 60.5 4 L 60.5 5 L 22.5 5 Z M 22.5 4 " transform="matrix(20,0,0,20,12,172)"/>
+<g style="fill:rgb(0%,0%,0%);fill-opacity:1;">
+ <use xlink:href="#glyph1-5" x="786.589844" y="265.532444"/>
+ <use xlink:href="#glyph1-9" x="792.700955" y="265.532444"/>
+ <use xlink:href="#glyph1-1" x="799.367622" y="265.532444"/>
+ <use xlink:href="#glyph1-7" x="806.312066" y="265.532444"/>
+ <use xlink:href="#glyph1-13" x="813.812066" y="265.532444"/>
+ <use xlink:href="#glyph1-11" x="820.200955" y="265.532444"/>
+ <use xlink:href="#glyph1-14" x="826.312066" y="265.532444"/>
+ <use xlink:href="#glyph1-9" x="834.367622" y="265.532444"/>
+ <use xlink:href="#glyph1-5" x="840.75651" y="265.532444"/>
+ <use xlink:href="#glyph1-4" x="846.867622" y="265.532444"/>
+ <use xlink:href="#glyph1-11" x="851.867622" y="265.532444"/>
+ <use xlink:href="#glyph1-1" x="857.423177" y="265.532444"/>
+ <use xlink:href="#glyph1-10" x="863.534288" y="265.532444"/>
+ <use xlink:href="#glyph1-19" x="869.645399" y="265.532444"/>
+ <use xlink:href="#glyph1-14" x="874.923177" y="265.532444"/>
+ <use xlink:href="#glyph1-1" x="882.700955" y="265.532444"/>
+ <use xlink:href="#glyph1-3" x="889.645399" y="265.532444"/>
+</g>
+<path style="fill:none;stroke-width:0.05;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(0%,0%,0%);stroke-opacity:1;stroke-dasharray:0.05,0.05;stroke-miterlimit:10;" d="M 60.5 6.5 L 60.5 5 " transform="matrix(20,0,0,20,12,172)"/>
+<path style="fill:none;stroke-width:0.05;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(0%,0%,0%);stroke-opacity:1;stroke-dasharray:0.05,0.05;stroke-miterlimit:10;" d="M 18.5 4 L 18.5 2.5 " transform="matrix(20,0,0,20,12,172)"/>
+<path style="fill-rule:evenodd;fill:rgb(100%,100%,100%);fill-opacity:1;stroke-width:0.1;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(0%,0%,0%);stroke-opacity:1;stroke-miterlimit:10;" d="M 22.5 1.5 L 60.5 1.5 L 60.5 2.5 L 22.5 2.5 Z M 22.5 1.5 " transform="matrix(20,0,0,20,12,172)"/>
+<g style="fill:rgb(0%,0%,0%);fill-opacity:1;">
+ <use xlink:href="#glyph1-5" x="786.589844" y="215.532444"/>
+ <use xlink:href="#glyph1-9" x="792.700955" y="215.532444"/>
+ <use xlink:href="#glyph1-1" x="799.367622" y="215.532444"/>
+ <use xlink:href="#glyph1-7" x="806.312066" y="215.532444"/>
+ <use xlink:href="#glyph1-13" x="813.812066" y="215.532444"/>
+ <use xlink:href="#glyph1-11" x="820.200955" y="215.532444"/>
+ <use xlink:href="#glyph1-14" x="826.312066" y="215.532444"/>
+ <use xlink:href="#glyph1-9" x="834.367622" y="215.532444"/>
+ <use xlink:href="#glyph1-5" x="840.75651" y="215.532444"/>
+ <use xlink:href="#glyph1-4" x="846.867622" y="215.532444"/>
+ <use xlink:href="#glyph1-11" x="851.867622" y="215.532444"/>
+ <use xlink:href="#glyph1-1" x="857.423177" y="215.532444"/>
+ <use xlink:href="#glyph1-10" x="863.534288" y="215.532444"/>
+ <use xlink:href="#glyph1-19" x="869.645399" y="215.532444"/>
+ <use xlink:href="#glyph1-14" x="874.923177" y="215.532444"/>
+ <use xlink:href="#glyph1-1" x="882.700955" y="215.532444"/>
+ <use xlink:href="#glyph1-3" x="889.645399" y="215.532444"/>
+</g>
+<path style="fill:none;stroke-width:0.05;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(0%,0%,0%);stroke-opacity:1;stroke-dasharray:0.05,0.05;stroke-miterlimit:10;" d="M 60.5 1.5 L 60.5 -0.000000000000001776 " transform="matrix(20,0,0,20,12,172)"/>
+<path style="fill:none;stroke-width:0.1;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(100%,100%,100%);stroke-opacity:1;stroke-dasharray:0.1,0.1;stroke-miterlimit:10;" d="M -0.5 -8.5 L 79.5 -8.5 L 79.5 17 L -0.5 17 L -0.5 -8.5 " transform="matrix(20,0,0,20,12,172)"/>
+<path style="fill:none;stroke-width:0.05;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(0%,0%,0%);stroke-opacity:1;stroke-dasharray:0.05,0.05;stroke-miterlimit:10;" d="M 60.5 4 L 60.5 2.5 " transform="matrix(20,0,0,20,12,172)"/>
+<path style="fill:none;stroke-width:0.05;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(0%,0%,0%);stroke-opacity:1;stroke-dasharray:0.05,0.05;stroke-miterlimit:10;" d="M 13.5 9 L 13.5 7.5 " transform="matrix(20,0,0,20,12,172)"/>
+<g style="fill:rgb(0%,0%,0%);fill-opacity:1;">
+ <use xlink:href="#glyph1-8" x="292.292969" y="315.532444"/>
+ <use xlink:href="#glyph1-14" x="299.515191" y="315.532444"/>
+ <use xlink:href="#glyph1-7" x="307.570747" y="315.532444"/>
+ <use xlink:href="#glyph1-5" x="315.070747" y="315.532444"/>
+ <use xlink:href="#glyph1-9" x="321.181858" y="315.532444"/>
+ <use xlink:href="#glyph1-14" x="328.126302" y="315.532444"/>
+ <use xlink:href="#glyph1-19" x="336.181858" y="315.532444"/>
+ <use xlink:href="#glyph1-4" x="341.737413" y="315.532444"/>
+ <use xlink:href="#glyph1-15" x="346.737413" y="315.532444"/>
+ <use xlink:href="#glyph1-10" x="353.126302" y="315.532444"/>
+ <use xlink:href="#glyph1-5" x="359.237413" y="315.532444"/>
+ <use xlink:href="#glyph1-2" x="365.348524" y="315.532444"/>
+</g>
+<path style="fill:none;stroke-width:0.1;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(0%,0%,0%);stroke-opacity:1;stroke-dasharray:0.2,0.2;stroke-miterlimit:10;" d="M 0 5 L 77 5 " transform="matrix(20,0,0,20,12,172)"/>
+<path style="fill:none;stroke-width:0.05;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(0%,0%,0%);stroke-opacity:1;stroke-dasharray:0.05,0.05;stroke-miterlimit:10;" d="M 20.5 6.5 L 20.5 5 " transform="matrix(20,0,0,20,12,172)"/>
+<g style="fill:rgb(0%,0%,0%);fill-opacity:1;">
+ <use xlink:href="#glyph1-19" x="432.292969" y="315.532444"/>
+ <use xlink:href="#glyph1-2" x="437.848524" y="315.532444"/>
+ <use xlink:href="#glyph1-7" x="444.237413" y="315.532444"/>
+</g>
+<path style="fill:none;stroke-width:0.1;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(0%,0%,0%);stroke-opacity:1;stroke-miterlimit:10;" d="M 18.5 6.5 L 18.5 7.5 " transform="matrix(20,0,0,20,12,172)"/>
+<path style="fill:none;stroke-width:0.1;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(0%,0%,0%);stroke-opacity:1;stroke-miterlimit:10;" d="M 20.5 6.5 L 20.5 7.5 " transform="matrix(20,0,0,20,12,172)"/>
+<path style="fill-rule:evenodd;fill:rgb(100%,100%,100%);fill-opacity:1;stroke-width:0.1;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(0%,0%,0%);stroke-opacity:1;stroke-miterlimit:10;" d="M 13.5 4 L 20.5 4 L 20.5 5 L 13.5 5 Z M 13.5 4 " transform="matrix(20,0,0,20,12,172)"/>
+<g style="fill:rgb(0%,0%,0%);fill-opacity:1;">
+ <use xlink:href="#glyph1-8" x="392.976562" y="265.532444"/>
+ <use xlink:href="#glyph1-20" x="400.198785" y="265.532444"/>
+ <use xlink:href="#glyph1-3" x="403.25434" y="265.532444"/>
+</g>
+<path style="fill:none;stroke-width:0.1;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(0%,0%,0%);stroke-opacity:1;stroke-miterlimit:10;" d="M 18.5 4 L 18.5 5 " transform="matrix(20,0,0,20,12,172)"/>
+<g style="fill:rgb(0%,0%,0%);fill-opacity:1;">
+ <use xlink:href="#glyph1-21" x="383.113281" y="395.532444"/>
+ <use xlink:href="#glyph1-22" x="389.50217" y="395.532444"/>
+ <use xlink:href="#glyph1-23" x="392.835503" y="395.532444"/>
+ <use xlink:href="#glyph1-24" x="399.224392" y="395.532444"/>
+ <use xlink:href="#glyph1-25" x="405.335503" y="395.532444"/>
+ <use xlink:href="#glyph1-26" x="409.224392" y="395.532444"/>
+ <use xlink:href="#glyph1-27" x="415.613281" y="395.532444"/>
+</g>
+<g style="fill:rgb(0%,0%,0%);fill-opacity:1;">
+ <use xlink:href="#glyph1-28" x="290.613281" y="345.532444"/>
+ <use xlink:href="#glyph1-22" x="297.00217" y="345.532444"/>
+ <use xlink:href="#glyph1-23" x="300.335503" y="345.532444"/>
+ <use xlink:href="#glyph1-29" x="306.724392" y="345.532444"/>
+ <use xlink:href="#glyph1-25" x="309.50217" y="345.532444"/>
+</g>
+<g style="fill:rgb(0%,0%,0%);fill-opacity:1;">
+ <use xlink:href="#glyph1-28" x="315.75" y="295.532444"/>
+ <use xlink:href="#glyph1-22" x="322.138889" y="295.532444"/>
+ <use xlink:href="#glyph1-23" x="325.472222" y="295.532444"/>
+ <use xlink:href="#glyph1-24" x="331.861111" y="295.532444"/>
+ <use xlink:href="#glyph1-25" x="337.972222" y="295.532444"/>
+ <use xlink:href="#glyph1-26" x="341.861111" y="295.532444"/>
+</g>
+<g style="fill:rgb(0%,0%,0%);fill-opacity:1;">
+ <use xlink:href="#glyph1-21" x="423.113281" y="345.532444"/>
+ <use xlink:href="#glyph1-22" x="429.50217" y="345.532444"/>
+ <use xlink:href="#glyph1-23" x="432.835503" y="345.532444"/>
+ <use xlink:href="#glyph1-24" x="439.224392" y="345.532444"/>
+ <use xlink:href="#glyph1-25" x="445.335503" y="345.532444"/>
+ <use xlink:href="#glyph1-26" x="449.224392" y="345.532444"/>
+ <use xlink:href="#glyph1-27" x="455.613281" y="345.532444"/>
+</g>
+<g style="fill:rgb(0%,0%,0%);fill-opacity:1;">
+ <use xlink:href="#glyph1-21" x="523.113281" y="95.532444"/>
+ <use xlink:href="#glyph1-22" x="529.50217" y="95.532444"/>
+ <use xlink:href="#glyph1-23" x="532.835503" y="95.532444"/>
+ <use xlink:href="#glyph1-24" x="539.224392" y="95.532444"/>
+ <use xlink:href="#glyph1-25" x="545.335503" y="95.532444"/>
+ <use xlink:href="#glyph1-26" x="549.224392" y="95.532444"/>
+ <use xlink:href="#glyph1-27" x="555.613281" y="95.532444"/>
+</g>
+<g style="fill:rgb(0%,0%,0%);fill-opacity:1;">
+ <use xlink:href="#glyph1-28" x="1149.929688" y="145.532444"/>
+ <use xlink:href="#glyph1-30" x="1156.318576" y="145.532444"/>
+ <use xlink:href="#glyph1-22" x="1162.707465" y="145.532444"/>
+ <use xlink:href="#glyph1-23" x="1166.040799" y="145.532444"/>
+ <use xlink:href="#glyph1-24" x="1172.429688" y="145.532444"/>
+ <use xlink:href="#glyph1-25" x="1178.540799" y="145.532444"/>
+ <use xlink:href="#glyph1-26" x="1182.429688" y="145.532444"/>
+ <use xlink:href="#glyph1-27" x="1188.818576" y="145.532444"/>
+</g>
+<g style="fill:rgb(0%,0%,0%);fill-opacity:1;">
+ <use xlink:href="#glyph1-31" x="1243.113281" y="295.532444"/>
+ <use xlink:href="#glyph1-22" x="1249.50217" y="295.532444"/>
+ <use xlink:href="#glyph1-23" x="1252.835503" y="295.532444"/>
+ <use xlink:href="#glyph1-24" x="1259.224392" y="295.532444"/>
+ <use xlink:href="#glyph1-25" x="1265.335503" y="295.532444"/>
+ <use xlink:href="#glyph1-26" x="1269.224392" y="295.532444"/>
+ <use xlink:href="#glyph1-27" x="1275.613281" y="295.532444"/>
+</g>
+<path style=" stroke:none;fill-rule:evenodd;fill:rgb(100%,100%,100%);fill-opacity:1;" d="M 910.523438 336.085938 L 933.472656 336.085938 L 933.472656 347.914062 L 910.523438 347.914062 Z M 910.523438 336.085938 "/>
+<g style="fill:rgb(0%,0%,0%);fill-opacity:1;">
+ <use xlink:href="#glyph1-28" x="910.613281" y="345.532444"/>
+ <use xlink:href="#glyph1-22" x="917.00217" y="345.532444"/>
+ <use xlink:href="#glyph1-23" x="920.335503" y="345.532444"/>
+ <use xlink:href="#glyph1-29" x="926.724392" y="345.532444"/>
+ <use xlink:href="#glyph1-25" x="929.50217" y="345.532444"/>
+</g>
+<path style=" stroke:none;fill-rule:evenodd;fill:rgb(100%,100%,100%);fill-opacity:1;" d="M 954.625 336.085938 L 989.375 336.085938 L 989.375 347.914062 L 954.625 347.914062 Z M 954.625 336.085938 "/>
+<g style="fill:rgb(0%,0%,0%);fill-opacity:1;">
+ <use xlink:href="#glyph1-22" x="954.65625" y="345.532444"/>
+ <use xlink:href="#glyph1-32" x="957.989583" y="345.532444"/>
+ <use xlink:href="#glyph1-22" x="964.378472" y="345.532444"/>
+ <use xlink:href="#glyph1-23" x="967.711806" y="345.532444"/>
+ <use xlink:href="#glyph1-29" x="974.100694" y="345.532444"/>
+ <use xlink:href="#glyph1-25" x="976.878472" y="345.532444"/>
+ <use xlink:href="#glyph1-27" x="980.767361" y="345.532444"/>
+ <use xlink:href="#glyph1-22" x="986.045139" y="345.532444"/>
+</g>
+<path style="fill:none;stroke-width:0.1;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(0%,0%,0%);stroke-opacity:1;stroke-miterlimit:10;" d="M 18.5 9 L 18.5 10 " transform="matrix(20,0,0,20,12,172)"/>
+<path style="fill:none;stroke-width:0.1;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(0%,0%,0%);stroke-opacity:1;stroke-miterlimit:10;" d="M 49.5 9 L 49.5 10 " transform="matrix(20,0,0,20,12,172)"/>
+<path style="fill-rule:evenodd;fill:rgb(100%,100%,100%);fill-opacity:1;stroke-width:0.1;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(0%,0%,0%);stroke-opacity:1;stroke-miterlimit:10;" d="M 44.5 14 L 73.5 14 L 73.5 15 L 44.5 15 Z M 44.5 14 " transform="matrix(20,0,0,20,12,172)"/>
+<g style="fill:rgb(0%,0%,0%);fill-opacity:1;">
+ <use xlink:href="#glyph1-11" x="1172.703125" y="465.387912"/>
+ <use xlink:href="#glyph1-1" x="1178.258681" y="465.387912"/>
+ <use xlink:href="#glyph1-8" x="1184.925347" y="465.387912"/>
+ <use xlink:href="#glyph1-18" x="1192.147569" y="465.387912"/>
+ <use xlink:href="#glyph1-2" x="1198.814236" y="465.387912"/>
+ <use xlink:href="#glyph1-5" x="1205.203125" y="465.387912"/>
+</g>
+<path style="fill:none;stroke-width:0.05;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(0%,0%,0%);stroke-opacity:1;stroke-dasharray:0.05,0.05;stroke-miterlimit:10;" d="M 71.5 9 L 64.5 7.5 " transform="matrix(20,0,0,20,12,172)"/>
+<g style="fill:rgb(0%,0%,0%);fill-opacity:1;">
+ <use xlink:href="#glyph1-13" x="473.40625" y="115.532444"/>
+ <use xlink:href="#glyph1-20" x="479.795139" y="115.532444"/>
+ <use xlink:href="#glyph1-3" x="482.850694" y="115.532444"/>
+</g>
+<path style="fill:none;stroke-width:0.1;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(0%,0%,0%);stroke-opacity:1;stroke-miterlimit:10;" d="M 24.5 -3.5 L 24.5 -2.5 " transform="matrix(20,0,0,20,12,172)"/>
+<g style="fill:rgb(0%,0%,0%);fill-opacity:1;">
+ <use xlink:href="#glyph1-28" x="465.75" y="95.532444"/>
+ <use xlink:href="#glyph1-22" x="472.138889" y="95.532444"/>
+ <use xlink:href="#glyph1-23" x="475.472222" y="95.532444"/>
+ <use xlink:href="#glyph1-24" x="481.861111" y="95.532444"/>
+ <use xlink:href="#glyph1-25" x="487.972222" y="95.532444"/>
+ <use xlink:href="#glyph1-26" x="491.861111" y="95.532444"/>
+</g>
+<path style="fill:none;stroke-width:0.05;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(0%,0%,0%);stroke-opacity:1;stroke-dasharray:0.05,0.05;stroke-miterlimit:10;" d="M 22.5 -1 L 22.5 -2.5 " transform="matrix(20,0,0,20,12,172)"/>
+<path style="fill:none;stroke-width:0.05;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(0%,0%,0%);stroke-opacity:1;stroke-dasharray:0.05,0.05;stroke-miterlimit:10;" d="M 13.5 4 L 13.5 2.5 " transform="matrix(20,0,0,20,12,172)"/>
+<path style="fill:none;stroke-width:0.05;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(0%,0%,0%);stroke-opacity:1;stroke-dasharray:0.05,0.05;stroke-miterlimit:10;" d="M 13.5 6.5 L 13.5 5 " transform="matrix(20,0,0,20,12,172)"/>
+<g style="fill:rgb(0%,0%,0%);fill-opacity:1;">
+ <use xlink:href="#glyph1-8" x="292.292969" y="265.532444"/>
+ <use xlink:href="#glyph1-14" x="299.515191" y="265.532444"/>
+ <use xlink:href="#glyph1-7" x="307.570747" y="265.532444"/>
+ <use xlink:href="#glyph1-5" x="315.070747" y="265.532444"/>
+ <use xlink:href="#glyph1-9" x="321.181858" y="265.532444"/>
+ <use xlink:href="#glyph1-14" x="328.126302" y="265.532444"/>
+ <use xlink:href="#glyph1-19" x="336.181858" y="265.532444"/>
+ <use xlink:href="#glyph1-4" x="341.737413" y="265.532444"/>
+ <use xlink:href="#glyph1-15" x="346.737413" y="265.532444"/>
+ <use xlink:href="#glyph1-10" x="353.126302" y="265.532444"/>
+ <use xlink:href="#glyph1-5" x="359.237413" y="265.532444"/>
+ <use xlink:href="#glyph1-2" x="365.348524" y="265.532444"/>
+</g>
+<g style="fill:rgb(0%,0%,0%);fill-opacity:1;">
+ <use xlink:href="#glyph1-8" x="292.292969" y="215.532444"/>
+ <use xlink:href="#glyph1-14" x="299.515191" y="215.532444"/>
+ <use xlink:href="#glyph1-7" x="307.570747" y="215.532444"/>
+ <use xlink:href="#glyph1-5" x="315.070747" y="215.532444"/>
+ <use xlink:href="#glyph1-9" x="321.181858" y="215.532444"/>
+ <use xlink:href="#glyph1-14" x="328.126302" y="215.532444"/>
+ <use xlink:href="#glyph1-19" x="336.181858" y="215.532444"/>
+ <use xlink:href="#glyph1-4" x="341.737413" y="215.532444"/>
+ <use xlink:href="#glyph1-15" x="346.737413" y="215.532444"/>
+ <use xlink:href="#glyph1-10" x="353.126302" y="215.532444"/>
+ <use xlink:href="#glyph1-5" x="359.237413" y="215.532444"/>
+ <use xlink:href="#glyph1-2" x="365.348524" y="215.532444"/>
+</g>
+</g>
+</svg>
diff --git a/docs/common/thp/index.md b/docs/common/thp/index.md
new file mode 100644
index 00000000..e15d9425
--- /dev/null
+++ b/docs/common/thp/index.md
@@ -0,0 +1,8 @@
+# Trezor–Host Protocol
+
+This section specifies a secure protocol for encrypted and authenticated communication between a host application, such as *Trezor Suite*, and new *Trezor* models (since 2025). This protocol replaces the unencrypted Codec v1 protocol used in earlier Trezor models (see [protocol.md](../../../common/protob/protocol.md)).
+
+## Notable topics
+
+- [Trezor Host Protocol Specification](specification.md)
+- [Sessions](sessions.md)
diff --git a/docs/common/thp/sessions.md b/docs/common/thp/sessions.md
new file mode 100644
index 00000000..12ce5e9c
--- /dev/null
+++ b/docs/common/thp/sessions.md
@@ -0,0 +1,27 @@
+# Introduction
+
+This document specifies the application layer of the Trezor-Host protocol (THP). For general information about the protocol, and lower protocol layers, see [specification.md](./specification.md).
+
+# Application layer
+
+The THP application layer has the following structure:
+
+| **Offset** | **Size** | **Field name** | **Description** |
+|:----------:|:--------:|:---------------------------|:--------------------------------------------------|
+| 0 | 1 | *session_id* | A single byte identifying the session. |
+| 1 | 2 | *message_type* | Big-endian encoded protobuf-message's type. |
+| 3 | var | *protobuf_encoded_message* | Message encoded using protocol buffers v2. |
+
+
+# Session vs. channel
+
+THP Channel represents a single encrypted connection ("encrypted channel"). Each channel can contain multiple sessions. A (standard) session represents a single passphrase-wallet. Each session can have arbitrary passphrase (or none), there can be multiple sessions with the same passphrase.
+
+## Session
+
+A new session is created by sending a `ThpCreateNewSession` with desired parameters to the Trezor.
+
+## Seedless sessions
+
+Seedless sessions are a special kind of sessions. These sessions can be used for operations that do not require the seed to be derived - for instance management tasks. Only seedless sessions can be used on uninitialized devices.
+
diff --git a/docs/common/thp/specification.md b/docs/common/thp/specification.md
new file mode 100644
index 00000000..1f849747
--- /dev/null
+++ b/docs/common/thp/specification.md
@@ -0,0 +1,1317 @@
+# Trezor–Host Protocol
+
+This document specifies a secure protocol for encrypted and authenticated communication between a host application, such as *Trezor Suite*, and new *Trezor* models. This protocol replaces the unencrypted Codec v1 protocol used in earlier Trezor models (see [protocol.md](../../../common/protob/protocol.md)).
+
+# Intended audience
+
+This document defines the format and internal workings of the communication protocol. It is intended for system integrators and security analysts. Those who wish to integrate Trezor in their application should use [Trezor Connect](https://github.com/trezor/connect/) or [python-trezor](https://pypi.org/project/trezor/), both of which implement this specification.
+
+# Table of contents
+
+- [Introduction](#introduction)
+ - [Connection process diagram](#connection-process-diagram)
+- [Data transfer layer](#data-transfer-layer)
+ - [USB](#usb)
+ - [Bluetooth](#bluetooth)
+- [Transport layer](#transport-layer)
+ - [Channel identifier](#channel-identifier)
+ - [Transport packet structure](#transport-packet-structure)
+ - [Transport layer structure](#transport-layer-structure)
+ - [Channel multiplexing layer](#channel-multiplexing-layer)
+ - [Segmenting layer](#segmenting-layer)
+ - [Error detection layer](#error-detection-layer)
+ - [Allocation layer](#allocation-layer)
+ - [Synchronization layer](#synchronization-layer)
+ - [Alternating Bit Protocol](#alternating-bit-protocol)
+ - [ACK Message structure](#ack-message-structure)
+ - [ACK Piggybacking](#ack-piggybacking)
+ - [Protocol parameters](#protocol-parameters)
+- [Secure channel layer](#secure-channel-layer)
+ - [Connection process](#connection-process)
+ - [Handshake phase](#handshake-phase)
+ - [Messages](#messages)
+ - [Common definitions](#common-definitions)
+ - [Notation](#notation)
+ - [Trezor's state machine](#trezors-state-machine)
+ - [Host's state machine](#hosts-state-machine)
+ - [Pairing phase](#pairing-phase)
+ - [Messages](#messages-1)
+ - [Trezor's state machine](#trezors-state-machine-1)
+ - [Host's state machine](#hosts-state-machine-1)
+ - [Notes](#notes)
+ - [NFC pairing sequence](#nfc-pairing-sequence)
+ - [QR Code pairing sequence](#qr-code-pairing-sequence)
+ - [Code Entry pairing sequence](#code-entry-pairing-sequence)
+ - [Credential phase](#credential-phase)
+ - [Messages](#messages-2)
+ - [Credential validation](#credential-validation)
+ - [Credential issuance](#credential-issuance)
+ - [Autoconnect credential issuance](#autoconnect-credential-issuance)
+ - [Trezor’s state machine](#trezors-state-machine-2)
+ - [Host's state machine](#hosts-state-machine-2)
+- [Other features](#other-features)
+ - [Channel replacement](#channel-replacement)
+- [References](#references)
+
+# Introduction
+
+The purpose of this protocol is to establish a secure communication channel between a host application, such as Trezor Suite, and a Trezor device. When a given host establishes a secure channel with a Trezor for the first time, the two engage in a pairing procedure, which requires the user to complete one of the pairing methods listed in Section [Pairing phase](#pairing-phase). After a successful pairing, the host may request that the Trezor issue a pairing credential. The credential allows reestablishment of the secure channel without user interaction in the future.
+
+This protocol is designed to be compatible with various means of data transfer, such as USB or Bluetooth. It is split into the following layers:
+
+- **L1 Data transfer** represents either USB or Bluetooth data transfer.
+- **L2 Transport** is responsible for multiplexing transport connections onto the data transfer layer, segmenting of transport payloads, error detection and synchronization. It is divided into five sub-layers, which are described in the Transport layer section ([Transport layer](#transport-layer)).
+- **L3 Secure channel** is responsible for the encryption and the decryption of messages (see [Secure channel layer](#secure-channel-layer)).
+- **L4 Application** handles sessions and the encoding of application messages in Protocol Buffers wire format. It is described in [sessions.md](sessions.md)
+
+
+
+## Connection process diagram
+
+```mermaid
+sequenceDiagram
+ participant host
+ participant Trezor
+ rect rgb(35, 35, 35)
+ Note right of host: Transport layer
+ rect rgb(25,25,25)
+
+ host ->> Trezor: ChannelAllocationRequest(nonce)
+ Trezor ->> host: ChannelAllocationResponse(nonce, cid, device_properties)
+ end
+ end
+ rect rgb(35, 35, 35)
+ Note right of host: Secure channel layer
+ rect rgb(25,25,25)
+ host ->> Trezor: HandshakeInitiationRequest(host_ephemeral_pubkey)
+ Trezor ->> host: HandshakeInitiationResponse(trezor_ephemeral_pubkey, encrypted_trezor_static_pubkey)
+ host ->> Trezor: HandshakeCompletionRequest(encrypted_host_static_pubkey, encrypted_payload)
+ Trezor ->> host: HandshakeCompletionResponse(encrypted_trezor_state)
+ Note over host,Trezor: Pairing [conditional]
+ Note over host,Trezor: Credential issuance [optional]
+ host ->> Trezor: ThpEndRequest()
+ Trezor ->> host: ThpEndResponse()
+ end
+ end
+ Note over host,Trezor: Application layer - Encrypted transport
+```
+
+# Data transfer layer
+
+This protocol is designed to be compatible with various data transfer services, such as USB or Bluetooth, which transmit *packets* of a fixed maximum size. The data transfer service must preserve the order of packets transferred, but does not need to guarantee their delivery or integrity.
+
+## USB
+
+All Trezor models support USB communication. To allow web applications to connect to Trezor, [WebUSB](https://wicg.github.io/webusb/) is used for data transfer:
+
+### USB packet size
+
+Trezor utilizes packets with a size of 64 bytes.
+
+## Bluetooth
+
+Some Trezor models support Bluetooth. This section briefly describes the technology used and highlights important features.
+
+### Supported Bluetooth technology
+
+The Bluetooth technology used is Bluetooth Low-Energy (BLE). The minimum supported version is 5.0. Trezor does not support BLE versions 4.x and below due to a lack of features and security concerns.
+
+### BLE Pairing methods
+
+Trezor devices use *Secure Simple Pairing* with the *Numeric Comparison* association model. Legacy Pairing methods are not allowed or supported.
+
+### Privacy feature
+
+Trezor devices use the *LE Privacy* feature by default. ([LE Privacy](https://www.bluetooth.com/blog/bluetooth-technology-protecting-your-privacy/))
+
+> Bluetooth LE supports a feature that reduces the ability to track a LE device over a period of time by changing the Bluetooth Device Address on a frequent basis.
+>
+> — Bluetooth Core_v5.3 specification, section 5.4.5, page 275
+>
+
+### BLE packet size
+
+Trezor utilizes packets of 244 bytes in size.
+
+# Transport layer
+
+The transport layer performs the segmentation of transport payloads into multiple packets that are transmitted over the data transfer layer. It is possible for several applications to communicate with Trezor using distinct transport connections, which are referred to as *channels*. The transport layer is responsible for the establishment and release of channels, multiplexing channels onto the data transfer layer, and channel synchronization.
+
+## Channel identifier
+
+Channels are identified by a 16-bit *channel identifier* (CID). The CID `0xFFFF` is reserved for the broadcast channel, which is used for channel allocation requests and responses. CIDs from `0xFFF0` to `0xFFFE`, and `0x0000`, are reserved for future use. Trezor allocates the remaining CIDs to individual host applications.
+
+## Transport packet structure
+
+Each transport packet starts with a *control byte* that determines how the packet is processed by the receiver. Certain packet properties are identified using only a subset of the bits in the control byte; the remaining bits may take arbitrary values and MUST be ignored for the purpose of property identification. The recognized control byte patterns are listed in the table below. Bits denoted by X may have arbitrary values and are not considered when matching a packet to a property. For ease of implementation, each entry specifies a mask and the corresponding masked value. A control byte matches a given property if: `control_byte & mask == masked_value`. If a control byte does not match any pattern except `initiation_packet` (e.g. `00000111`), it should be treated as an error (invalid control byte).
+
+| **Name** | **Control byte (binary)** | **Mask (&)** | **Masked value** | **Description** | Handled by layer |
+|:------------------------------|:----------:|:----:|:----:|:-----------------------------------------------------------|:----------------------------------|
+| initiation_packet | `0XXXXXXX` | 0x80 | 0x00 | Identifies an initiation packet. | L 2.2 - Segmenting |
+| continuation_packet | `1XXXXXXX` | 0x80 | 0x80 | Identifies a continuation packet. | L 2.2 - Segmenting |
+| channel_allocation_request | `01000000` | 0xFF | 0x40 | Request for a new channel identifier. | L 2.4 - Allocation |
+| channel_allocation_response | `01000001` | 0xFF | 0x41 | Response with a new channel identifier. | L 2.4 - Allocation |
+| transport_error | `01000010` | 0xFF | 0x42 | Transport layer errors (e.g. UNALLOCATED_CHANNEL). | L 2.4 - Allocation |
+| ping | `01000011` | 0xFF | 0x43 | Transport level ping-pong messages | L 2 |
+| pong | `01000100` | 0xFF | 0x44 | Transport level ping-pong messages | L 2 |
+| codec_v1 | `00111111` | 0xFF | 0x3F | Codec v1 message legacy protocol. | L 2 |
+| ack | `0010X000` | 0xF7 | 0x20 | Acknowledgement message. | L 2.5 - Synchronization |
+| handshake_init_request | `000XX000` | 0xE7 | 0x00 | First message in the handshake process | L 3 - [Handshake phase](#handshake-phase) |
+| handshake_init_response | `000XX001` | 0xE7 | 0x01 | Second message in the handshake process | L 3 - [Handshake phase](#handshake-phase) |
+| handshake_completion_request | `000XX010` | 0xE7 | 0x02 | Third message in the handshake process | L 3 - [Handshake phase](#handshake-phase) |
+| handshake_completion_response | `000XX011` | 0xE7 | 0x03 | Fourth message in the handshake process | L 3 - [Handshake phase](#handshake-phase) |
+| encrypted_transport | `000XX100` | 0xE7 | 0x04 | Noise message, i.e. encrypted application message. | L 3 |
+
+The transport layer distinguishes two basic types of transport packets: *initiation packets* and *continuation packets*. The highest bit of the control byte specifies whether the packet is an *initiation packet* or a *continuation packet.*
+
+- *type* = 0 *→ initiation packet*
+- *type* = 1 *→ continuation packet*
+
+Let *n* be the packet size in bytes supported by the data transfer layer.
+
+### **Initiation Packet**
+
+An initiation packet is the first packet to be sent when transmitting a transport payload. It has the following structure:
+
+| **Offset** | **Size** | **Field name** | **Description** |
+|:----------:|:--------:|:-----------------|:-------------------------------------------------------------------------------------------------------------------------------------|
+| 0 | 1 | *control_byte* | Control byte is used on multiple layers. For recognized values, see table [Transport packet structure](#transport-packet-structure) |
+| 1 | 2 | *cid* | Channel identifier as a 16-bit integer in big-endian byte order. |
+| 3 | 2 | *length* | Total size of the *transport payload with CRC* in bytes. Encoded as a 16-bit integer in big-endian byte order. |
+| 5 | *n*−5 | *packet_payload* | First part of the *transport payload with CRC*. Padded with null bytes if no continuation packets follow. |
+
+### **Continuation Packet**
+
+Continuation packets are sent after the initiation packet in cases where the transport payload does not fit in the initiation packet. Each continuation packet contains the following information:
+
+| **Offset** | **Size** | **Field name** | **Description** |
+|:----------:|:--------:|:-----------------|:---------------------------------------------------------------------------------------------------------------|
+| 0 | 1 | *control_byte* | The control byte set to 0x80. |
+| 1 | 2 | *cid* | Channel identifier as a 16-bit integer in big-endian byte order. |
+| 3 | *n*−3 | *packet_payload* | Continuation part of the *transport payload with CRC*. Padded with null bytes in the last continuation packet. |
+
+The seven least significant bits of the control byte in a continuation packet are reserved for future use. The reserved bits should be set to zero when transmitting a continuation packet, and ignored when receiving a continuation packet.
+
+## Transport layer structure
+
+The transport layer is further divided into five sub-layers.
+
+
+### Channel multiplexing layer
+
+Multiplexing enables one data transfer connection to support more than one channel. This layer manages the identification of the channel for each packet transferred over the data transfer connection, in order to ensure that packet payloads from the various multiplexed channels are not mixed. The receiver groups the packets based on their *channel identifier* (CID) field. The channel multiplexing layer does not provide any packet filtering or error handling. (TODO add relevant part of session locking)
+
+### Segmenting layer
+
+The segmenting layer is responsible for mapping one *transport payload with CRC* onto an initiation packet and zero or more continuation packets.
+
+The sender segments the *transport payload with CRC* into one or more packet payloads, starting with an initiation packet, followed by the least possible number of continuation packets. The last packet payload is padded with null bytes.
+
+The receiver reassembles the *transport payload with CRC* by concatenating the packet payloads, starting with an initiation packet and awaiting continuation packets on the same channel until the expected length of the *transport payload with CRC* has been received. Any padding in the last packed payload is discarded.
+
+If a new initiation packeWhy this scored 15/100
Community notes
Notes can correct, qualify, or add evidence to the AI analysis. Every note shown here has been validated by a human moderator.
The AI analysis stands alone for now. Submit a note if you can add evidence or important context.