@@ -1,674 +0,0 @@ | |||||
GNU GENERAL PUBLIC LICENSE | |||||
Version 3, 29 June 2007 | |||||
Copyright (C) 2007 Free Software Foundation, Inc. <http://fsf.org/> | |||||
Everyone is permitted to copy and distribute verbatim copies | |||||
of this license document, but changing it is not allowed. | |||||
Preamble | |||||
The GNU General Public License is a free, copyleft license for | |||||
software and other kinds of works. | |||||
The licenses for most software and other practical works are designed | |||||
to take away your freedom to share and change the works. By contrast, | |||||
the GNU General Public License is intended to guarantee your freedom to | |||||
share and change all versions of a program--to make sure it remains free | |||||
software for all its users. We, the Free Software Foundation, use the | |||||
GNU General Public License for most of our software; it applies also to | |||||
any other work released this way by its authors. You can apply it to | |||||
your programs, too. | |||||
When we speak of free software, we are referring to freedom, not | |||||
price. Our General Public Licenses are designed to make sure that you | |||||
have the freedom to distribute copies of free software (and charge for | |||||
them if you wish), that you receive source code or can get it if you | |||||
want it, that you can change the software or use pieces of it in new | |||||
free programs, and that you know you can do these things. | |||||
To protect your rights, we need to prevent others from denying you | |||||
these rights or asking you to surrender the rights. Therefore, you have | |||||
certain responsibilities if you distribute copies of the software, or if | |||||
you modify it: responsibilities to respect the freedom of others. | |||||
For example, if you distribute copies of such a program, whether | |||||
gratis or for a fee, you must pass on to the recipients the same | |||||
freedoms that you received. You must make sure that they, too, receive | |||||
or can get the source code. And you must show them these terms so they | |||||
know their rights. | |||||
Developers that use the GNU GPL protect your rights with two steps: | |||||
(1) assert copyright on the software, and (2) offer you this License | |||||
giving you legal permission to copy, distribute and/or modify it. | |||||
For the developers' and authors' protection, the GPL clearly explains | |||||
that there is no warranty for this free software. For both users' and | |||||
authors' sake, the GPL requires that modified versions be marked as | |||||
changed, so that their problems will not be attributed erroneously to | |||||
authors of previous versions. | |||||
Some devices are designed to deny users access to install or run | |||||
modified versions of the software inside them, although the manufacturer | |||||
can do so. This is fundamentally incompatible with the aim of | |||||
protecting users' freedom to change the software. The systematic | |||||
pattern of such abuse occurs in the area of products for individuals to | |||||
use, which is precisely where it is most unacceptable. Therefore, we | |||||
have designed this version of the GPL to prohibit the practice for those | |||||
products. If such problems arise substantially in other domains, we | |||||
stand ready to extend this provision to those domains in future versions | |||||
of the GPL, as needed to protect the freedom of users. | |||||
Finally, every program is threatened constantly by software patents. | |||||
States should not allow patents to restrict development and use of | |||||
software on general-purpose computers, but in those that do, we wish to | |||||
avoid the special danger that patents applied to a free program could | |||||
make it effectively proprietary. To prevent this, the GPL assures that | |||||
patents cannot be used to render the program non-free. | |||||
The precise terms and conditions for copying, distribution and | |||||
modification follow. | |||||
TERMS AND CONDITIONS | |||||
0. Definitions. | |||||
"This License" refers to version 3 of the GNU General Public License. | |||||
"Copyright" also means copyright-like laws that apply to other kinds of | |||||
works, such as semiconductor masks. | |||||
"The Program" refers to any copyrightable work licensed under this | |||||
License. Each licensee is addressed as "you". "Licensees" and | |||||
"recipients" may be individuals or organizations. | |||||
To "modify" a work means to copy from or adapt all or part of the work | |||||
in a fashion requiring copyright permission, other than the making of an | |||||
exact copy. The resulting work is called a "modified version" of the | |||||
earlier work or a work "based on" the earlier work. | |||||
A "covered work" means either the unmodified Program or a work based | |||||
on the Program. | |||||
To "propagate" a work means to do anything with it that, without | |||||
permission, would make you directly or secondarily liable for | |||||
infringement under applicable copyright law, except executing it on a | |||||
computer or modifying a private copy. Propagation includes copying, | |||||
distribution (with or without modification), making available to the | |||||
public, and in some countries other activities as well. | |||||
To "convey" a work means any kind of propagation that enables other | |||||
parties to make or receive copies. Mere interaction with a user through | |||||
a computer network, with no transfer of a copy, is not conveying. | |||||
An interactive user interface displays "Appropriate Legal Notices" | |||||
to the extent that it includes a convenient and prominently visible | |||||
feature that (1) displays an appropriate copyright notice, and (2) | |||||
tells the user that there is no warranty for the work (except to the | |||||
extent that warranties are provided), that licensees may convey the | |||||
work under this License, and how to view a copy of this License. If | |||||
the interface presents a list of user commands or options, such as a | |||||
menu, a prominent item in the list meets this criterion. | |||||
1. Source Code. | |||||
The "source code" for a work means the preferred form of the work | |||||
for making modifications to it. "Object code" means any non-source | |||||
form of a work. | |||||
A "Standard Interface" means an interface that either is an official | |||||
standard defined by a recognized standards body, or, in the case of | |||||
interfaces specified for a particular programming language, one that | |||||
is widely used among developers working in that language. | |||||
The "System Libraries" of an executable work include anything, other | |||||
than the work as a whole, that (a) is included in the normal form of | |||||
packaging a Major Component, but which is not part of that Major | |||||
Component, and (b) serves only to enable use of the work with that | |||||
Major Component, or to implement a Standard Interface for which an | |||||
implementation is available to the public in source code form. A | |||||
"Major Component", in this context, means a major essential component | |||||
(kernel, window system, and so on) of the specific operating system | |||||
(if any) on which the executable work runs, or a compiler used to | |||||
produce the work, or an object code interpreter used to run it. | |||||
The "Corresponding Source" for a work in object code form means all | |||||
the source code needed to generate, install, and (for an executable | |||||
work) run the object code and to modify the work, including scripts to | |||||
control those activities. However, it does not include the work's | |||||
System Libraries, or general-purpose tools or generally available free | |||||
programs which are used unmodified in performing those activities but | |||||
which are not part of the work. For example, Corresponding Source | |||||
includes interface definition files associated with source files for | |||||
the work, and the source code for shared libraries and dynamically | |||||
linked subprograms that the work is specifically designed to require, | |||||
such as by intimate data communication or control flow between those | |||||
subprograms and other parts of the work. | |||||
The Corresponding Source need not include anything that users | |||||
can regenerate automatically from other parts of the Corresponding | |||||
Source. | |||||
The Corresponding Source for a work in source code form is that | |||||
same work. | |||||
2. Basic Permissions. | |||||
All rights granted under this License are granted for the term of | |||||
copyright on the Program, and are irrevocable provided the stated | |||||
conditions are met. This License explicitly affirms your unlimited | |||||
permission to run the unmodified Program. The output from running a | |||||
covered work is covered by this License only if the output, given its | |||||
content, constitutes a covered work. This License acknowledges your | |||||
rights of fair use or other equivalent, as provided by copyright law. | |||||
You may make, run and propagate covered works that you do not | |||||
convey, without conditions so long as your license otherwise remains | |||||
in force. You may convey covered works to others for the sole purpose | |||||
of having them make modifications exclusively for you, or provide you | |||||
with facilities for running those works, provided that you comply with | |||||
the terms of this License in conveying all material for which you do | |||||
not control copyright. Those thus making or running the covered works | |||||
for you must do so exclusively on your behalf, under your direction | |||||
and control, on terms that prohibit them from making any copies of | |||||
your copyrighted material outside their relationship with you. | |||||
Conveying under any other circumstances is permitted solely under | |||||
the conditions stated below. Sublicensing is not allowed; section 10 | |||||
makes it unnecessary. | |||||
3. Protecting Users' Legal Rights From Anti-Circumvention Law. | |||||
No covered work shall be deemed part of an effective technological | |||||
measure under any applicable law fulfilling obligations under article | |||||
11 of the WIPO copyright treaty adopted on 20 December 1996, or | |||||
similar laws prohibiting or restricting circumvention of such | |||||
measures. | |||||
When you convey a covered work, you waive any legal power to forbid | |||||
circumvention of technological measures to the extent such circumvention | |||||
is effected by exercising rights under this License with respect to | |||||
the covered work, and you disclaim any intention to limit operation or | |||||
modification of the work as a means of enforcing, against the work's | |||||
users, your or third parties' legal rights to forbid circumvention of | |||||
technological measures. | |||||
4. Conveying Verbatim Copies. | |||||
You may convey verbatim copies of the Program's source code as you | |||||
receive it, in any medium, provided that you conspicuously and | |||||
appropriately publish on each copy an appropriate copyright notice; | |||||
keep intact all notices stating that this License and any | |||||
non-permissive terms added in accord with section 7 apply to the code; | |||||
keep intact all notices of the absence of any warranty; and give all | |||||
recipients a copy of this License along with the Program. | |||||
You may charge any price or no price for each copy that you convey, | |||||
and you may offer support or warranty protection for a fee. | |||||
5. Conveying Modified Source Versions. | |||||
You may convey a work based on the Program, or the modifications to | |||||
produce it from the Program, in the form of source code under the | |||||
terms of section 4, provided that you also meet all of these conditions: | |||||
a) The work must carry prominent notices stating that you modified | |||||
it, and giving a relevant date. | |||||
b) The work must carry prominent notices stating that it is | |||||
released under this License and any conditions added under section | |||||
7. This requirement modifies the requirement in section 4 to | |||||
"keep intact all notices". | |||||
c) You must license the entire work, as a whole, under this | |||||
License to anyone who comes into possession of a copy. This | |||||
License will therefore apply, along with any applicable section 7 | |||||
additional terms, to the whole of the work, and all its parts, | |||||
regardless of how they are packaged. This License gives no | |||||
permission to license the work in any other way, but it does not | |||||
invalidate such permission if you have separately received it. | |||||
d) If the work has interactive user interfaces, each must display | |||||
Appropriate Legal Notices; however, if the Program has interactive | |||||
interfaces that do not display Appropriate Legal Notices, your | |||||
work need not make them do so. | |||||
A compilation of a covered work with other separate and independent | |||||
works, which are not by their nature extensions of the covered work, | |||||
and which are not combined with it such as to form a larger program, | |||||
in or on a volume of a storage or distribution medium, is called an | |||||
"aggregate" if the compilation and its resulting copyright are not | |||||
used to limit the access or legal rights of the compilation's users | |||||
beyond what the individual works permit. Inclusion of a covered work | |||||
in an aggregate does not cause this License to apply to the other | |||||
parts of the aggregate. | |||||
6. Conveying Non-Source Forms. | |||||
You may convey a covered work in object code form under the terms | |||||
of sections 4 and 5, provided that you also convey the | |||||
machine-readable Corresponding Source under the terms of this License, | |||||
in one of these ways: | |||||
a) Convey the object code in, or embodied in, a physical product | |||||
(including a physical distribution medium), accompanied by the | |||||
Corresponding Source fixed on a durable physical medium | |||||
customarily used for software interchange. | |||||
b) Convey the object code in, or embodied in, a physical product | |||||
(including a physical distribution medium), accompanied by a | |||||
written offer, valid for at least three years and valid for as | |||||
long as you offer spare parts or customer support for that product | |||||
model, to give anyone who possesses the object code either (1) a | |||||
copy of the Corresponding Source for all the software in the | |||||
product that is covered by this License, on a durable physical | |||||
medium customarily used for software interchange, for a price no | |||||
more than your reasonable cost of physically performing this | |||||
conveying of source, or (2) access to copy the | |||||
Corresponding Source from a network server at no charge. | |||||
c) Convey individual copies of the object code with a copy of the | |||||
written offer to provide the Corresponding Source. This | |||||
alternative is allowed only occasionally and noncommercially, and | |||||
only if you received the object code with such an offer, in accord | |||||
with subsection 6b. | |||||
d) Convey the object code by offering access from a designated | |||||
place (gratis or for a charge), and offer equivalent access to the | |||||
Corresponding Source in the same way through the same place at no | |||||
further charge. You need not require recipients to copy the | |||||
Corresponding Source along with the object code. If the place to | |||||
copy the object code is a network server, the Corresponding Source | |||||
may be on a different server (operated by you or a third party) | |||||
that supports equivalent copying facilities, provided you maintain | |||||
clear directions next to the object code saying where to find the | |||||
Corresponding Source. Regardless of what server hosts the | |||||
Corresponding Source, you remain obligated to ensure that it is | |||||
available for as long as needed to satisfy these requirements. | |||||
e) Convey the object code using peer-to-peer transmission, provided | |||||
you inform other peers where the object code and Corresponding | |||||
Source of the work are being offered to the general public at no | |||||
charge under subsection 6d. | |||||
A separable portion of the object code, whose source code is excluded | |||||
from the Corresponding Source as a System Library, need not be | |||||
included in conveying the object code work. | |||||
A "User Product" is either (1) a "consumer product", which means any | |||||
tangible personal property which is normally used for personal, family, | |||||
or household purposes, or (2) anything designed or sold for incorporation | |||||
into a dwelling. In determining whether a product is a consumer product, | |||||
doubtful cases shall be resolved in favor of coverage. For a particular | |||||
product received by a particular user, "normally used" refers to a | |||||
typical or common use of that class of product, regardless of the status | |||||
of the particular user or of the way in which the particular user | |||||
actually uses, or expects or is expected to use, the product. A product | |||||
is a consumer product regardless of whether the product has substantial | |||||
commercial, industrial or non-consumer uses, unless such uses represent | |||||
the only significant mode of use of the product. | |||||
"Installation Information" for a User Product means any methods, | |||||
procedures, authorization keys, or other information required to install | |||||
and execute modified versions of a covered work in that User Product from | |||||
a modified version of its Corresponding Source. The information must | |||||
suffice to ensure that the continued functioning of the modified object | |||||
code is in no case prevented or interfered with solely because | |||||
modification has been made. | |||||
If you convey an object code work under this section in, or with, or | |||||
specifically for use in, a User Product, and the conveying occurs as | |||||
part of a transaction in which the right of possession and use of the | |||||
User Product is transferred to the recipient in perpetuity or for a | |||||
fixed term (regardless of how the transaction is characterized), the | |||||
Corresponding Source conveyed under this section must be accompanied | |||||
by the Installation Information. But this requirement does not apply | |||||
if neither you nor any third party retains the ability to install | |||||
modified object code on the User Product (for example, the work has | |||||
been installed in ROM). | |||||
The requirement to provide Installation Information does not include a | |||||
requirement to continue to provide support service, warranty, or updates | |||||
for a work that has been modified or installed by the recipient, or for | |||||
the User Product in which it has been modified or installed. Access to a | |||||
network may be denied when the modification itself materially and | |||||
adversely affects the operation of the network or violates the rules and | |||||
protocols for communication across the network. | |||||
Corresponding Source conveyed, and Installation Information provided, | |||||
in accord with this section must be in a format that is publicly | |||||
documented (and with an implementation available to the public in | |||||
source code form), and must require no special password or key for | |||||
unpacking, reading or copying. | |||||
7. Additional Terms. | |||||
"Additional permissions" are terms that supplement the terms of this | |||||
License by making exceptions from one or more of its conditions. | |||||
Additional permissions that are applicable to the entire Program shall | |||||
be treated as though they were included in this License, to the extent | |||||
that they are valid under applicable law. If additional permissions | |||||
apply only to part of the Program, that part may be used separately | |||||
under those permissions, but the entire Program remains governed by | |||||
this License without regard to the additional permissions. | |||||
When you convey a copy of a covered work, you may at your option | |||||
remove any additional permissions from that copy, or from any part of | |||||
it. (Additional permissions may be written to require their own | |||||
removal in certain cases when you modify the work.) You may place | |||||
additional permissions on material, added by you to a covered work, | |||||
for which you have or can give appropriate copyright permission. | |||||
Notwithstanding any other provision of this License, for material you | |||||
add to a covered work, you may (if authorized by the copyright holders of | |||||
that material) supplement the terms of this License with terms: | |||||
a) Disclaiming warranty or limiting liability differently from the | |||||
terms of sections 15 and 16 of this License; or | |||||
b) Requiring preservation of specified reasonable legal notices or | |||||
author attributions in that material or in the Appropriate Legal | |||||
Notices displayed by works containing it; or | |||||
c) Prohibiting misrepresentation of the origin of that material, or | |||||
requiring that modified versions of such material be marked in | |||||
reasonable ways as different from the original version; or | |||||
d) Limiting the use for publicity purposes of names of licensors or | |||||
authors of the material; or | |||||
e) Declining to grant rights under trademark law for use of some | |||||
trade names, trademarks, or service marks; or | |||||
f) Requiring indemnification of licensors and authors of that | |||||
material by anyone who conveys the material (or modified versions of | |||||
it) with contractual assumptions of liability to the recipient, for | |||||
any liability that these contractual assumptions directly impose on | |||||
those licensors and authors. | |||||
All other non-permissive additional terms are considered "further | |||||
restrictions" within the meaning of section 10. If the Program as you | |||||
received it, or any part of it, contains a notice stating that it is | |||||
governed by this License along with a term that is a further | |||||
restriction, you may remove that term. If a license document contains | |||||
a further restriction but permits relicensing or conveying under this | |||||
License, you may add to a covered work material governed by the terms | |||||
of that license document, provided that the further restriction does | |||||
not survive such relicensing or conveying. | |||||
If you add terms to a covered work in accord with this section, you | |||||
must place, in the relevant source files, a statement of the | |||||
additional terms that apply to those files, or a notice indicating | |||||
where to find the applicable terms. | |||||
Additional terms, permissive or non-permissive, may be stated in the | |||||
form of a separately written license, or stated as exceptions; | |||||
the above requirements apply either way. | |||||
8. Termination. | |||||
You may not propagate or modify a covered work except as expressly | |||||
provided under this License. Any attempt otherwise to propagate or | |||||
modify it is void, and will automatically terminate your rights under | |||||
this License (including any patent licenses granted under the third | |||||
paragraph of section 11). | |||||
However, if you cease all violation of this License, then your | |||||
license from a particular copyright holder is reinstated (a) | |||||
provisionally, unless and until the copyright holder explicitly and | |||||
finally terminates your license, and (b) permanently, if the copyright | |||||
holder fails to notify you of the violation by some reasonable means | |||||
prior to 60 days after the cessation. | |||||
Moreover, your license from a particular copyright holder is | |||||
reinstated permanently if the copyright holder notifies you of the | |||||
violation by some reasonable means, this is the first time you have | |||||
received notice of violation of this License (for any work) from that | |||||
copyright holder, and you cure the violation prior to 30 days after | |||||
your receipt of the notice. | |||||
Termination of your rights under this section does not terminate the | |||||
licenses of parties who have received copies or rights from you under | |||||
this License. If your rights have been terminated and not permanently | |||||
reinstated, you do not qualify to receive new licenses for the same | |||||
material under section 10. | |||||
9. Acceptance Not Required for Having Copies. | |||||
You are not required to accept this License in order to receive or | |||||
run a copy of the Program. Ancillary propagation of a covered work | |||||
occurring solely as a consequence of using peer-to-peer transmission | |||||
to receive a copy likewise does not require acceptance. However, | |||||
nothing other than this License grants you permission to propagate or | |||||
modify any covered work. These actions infringe copyright if you do | |||||
not accept this License. Therefore, by modifying or propagating a | |||||
covered work, you indicate your acceptance of this License to do so. | |||||
10. Automatic Licensing of Downstream Recipients. | |||||
Each time you convey a covered work, the recipient automatically | |||||
receives a license from the original licensors, to run, modify and | |||||
propagate that work, subject to this License. You are not responsible | |||||
for enforcing compliance by third parties with this License. | |||||
An "entity transaction" is a transaction transferring control of an | |||||
organization, or substantially all assets of one, or subdividing an | |||||
organization, or merging organizations. If propagation of a covered | |||||
work results from an entity transaction, each party to that | |||||
transaction who receives a copy of the work also receives whatever | |||||
licenses to the work the party's predecessor in interest had or could | |||||
give under the previous paragraph, plus a right to possession of the | |||||
Corresponding Source of the work from the predecessor in interest, if | |||||
the predecessor has it or can get it with reasonable efforts. | |||||
You may not impose any further restrictions on the exercise of the | |||||
rights granted or affirmed under this License. For example, you may | |||||
not impose a license fee, royalty, or other charge for exercise of | |||||
rights granted under this License, and you may not initiate litigation | |||||
(including a cross-claim or counterclaim in a lawsuit) alleging that | |||||
any patent claim is infringed by making, using, selling, offering for | |||||
sale, or importing the Program or any portion of it. | |||||
11. Patents. | |||||
A "contributor" is a copyright holder who authorizes use under this | |||||
License of the Program or a work on which the Program is based. The | |||||
work thus licensed is called the contributor's "contributor version". | |||||
A contributor's "essential patent claims" are all patent claims | |||||
owned or controlled by the contributor, whether already acquired or | |||||
hereafter acquired, that would be infringed by some manner, permitted | |||||
by this License, of making, using, or selling its contributor version, | |||||
but do not include claims that would be infringed only as a | |||||
consequence of further modification of the contributor version. For | |||||
purposes of this definition, "control" includes the right to grant | |||||
patent sublicenses in a manner consistent with the requirements of | |||||
this License. | |||||
Each contributor grants you a non-exclusive, worldwide, royalty-free | |||||
patent license under the contributor's essential patent claims, to | |||||
make, use, sell, offer for sale, import and otherwise run, modify and | |||||
propagate the contents of its contributor version. | |||||
In the following three paragraphs, a "patent license" is any express | |||||
agreement or commitment, however denominated, not to enforce a patent | |||||
(such as an express permission to practice a patent or covenant not to | |||||
sue for patent infringement). To "grant" such a patent license to a | |||||
party means to make such an agreement or commitment not to enforce a | |||||
patent against the party. | |||||
If you convey a covered work, knowingly relying on a patent license, | |||||
and the Corresponding Source of the work is not available for anyone | |||||
to copy, free of charge and under the terms of this License, through a | |||||
publicly available network server or other readily accessible means, | |||||
then you must either (1) cause the Corresponding Source to be so | |||||
available, or (2) arrange to deprive yourself of the benefit of the | |||||
patent license for this particular work, or (3) arrange, in a manner | |||||
consistent with the requirements of this License, to extend the patent | |||||
license to downstream recipients. "Knowingly relying" means you have | |||||
actual knowledge that, but for the patent license, your conveying the | |||||
covered work in a country, or your recipient's use of the covered work | |||||
in a country, would infringe one or more identifiable patents in that | |||||
country that you have reason to believe are valid. | |||||
If, pursuant to or in connection with a single transaction or | |||||
arrangement, you convey, or propagate by procuring conveyance of, a | |||||
covered work, and grant a patent license to some of the parties | |||||
receiving the covered work authorizing them to use, propagate, modify | |||||
or convey a specific copy of the covered work, then the patent license | |||||
you grant is automatically extended to all recipients of the covered | |||||
work and works based on it. | |||||
A patent license is "discriminatory" if it does not include within | |||||
the scope of its coverage, prohibits the exercise of, or is | |||||
conditioned on the non-exercise of one or more of the rights that are | |||||
specifically granted under this License. You may not convey a covered | |||||
work if you are a party to an arrangement with a third party that is | |||||
in the business of distributing software, under which you make payment | |||||
to the third party based on the extent of your activity of conveying | |||||
the work, and under which the third party grants, to any of the | |||||
parties who would receive the covered work from you, a discriminatory | |||||
patent license (a) in connection with copies of the covered work | |||||
conveyed by you (or copies made from those copies), or (b) primarily | |||||
for and in connection with specific products or compilations that | |||||
contain the covered work, unless you entered into that arrangement, | |||||
or that patent license was granted, prior to 28 March 2007. | |||||
Nothing in this License shall be construed as excluding or limiting | |||||
any implied license or other defenses to infringement that may | |||||
otherwise be available to you under applicable patent law. | |||||
12. No Surrender of Others' Freedom. | |||||
If conditions are imposed on you (whether by court order, agreement or | |||||
otherwise) that contradict the conditions of this License, they do not | |||||
excuse you from the conditions of this License. If you cannot convey a | |||||
covered work so as to satisfy simultaneously your obligations under this | |||||
License and any other pertinent obligations, then as a consequence you may | |||||
not convey it at all. For example, if you agree to terms that obligate you | |||||
to collect a royalty for further conveying from those to whom you convey | |||||
the Program, the only way you could satisfy both those terms and this | |||||
License would be to refrain entirely from conveying the Program. | |||||
13. Use with the GNU Affero General Public License. | |||||
Notwithstanding any other provision of this License, you have | |||||
permission to link or combine any covered work with a work licensed | |||||
under version 3 of the GNU Affero General Public License into a single | |||||
combined work, and to convey the resulting work. The terms of this | |||||
License will continue to apply to the part which is the covered work, | |||||
but the special requirements of the GNU Affero General Public License, | |||||
section 13, concerning interaction through a network will apply to the | |||||
combination as such. | |||||
14. Revised Versions of this License. | |||||
The Free Software Foundation may publish revised and/or new versions of | |||||
the GNU General Public License from time to time. Such new versions will | |||||
be similar in spirit to the present version, but may differ in detail to | |||||
address new problems or concerns. | |||||
Each version is given a distinguishing version number. If the | |||||
Program specifies that a certain numbered version of the GNU General | |||||
Public License "or any later version" applies to it, you have the | |||||
option of following the terms and conditions either of that numbered | |||||
version or of any later version published by the Free Software | |||||
Foundation. If the Program does not specify a version number of the | |||||
GNU General Public License, you may choose any version ever published | |||||
by the Free Software Foundation. | |||||
If the Program specifies that a proxy can decide which future | |||||
versions of the GNU General Public License can be used, that proxy's | |||||
public statement of acceptance of a version permanently authorizes you | |||||
to choose that version for the Program. | |||||
Later license versions may give you additional or different | |||||
permissions. However, no additional obligations are imposed on any | |||||
author or copyright holder as a result of your choosing to follow a | |||||
later version. | |||||
15. Disclaimer of Warranty. | |||||
THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY | |||||
APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT | |||||
HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY | |||||
OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, | |||||
THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR | |||||
PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM | |||||
IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF | |||||
ALL NECESSARY SERVICING, REPAIR OR CORRECTION. | |||||
16. Limitation of Liability. | |||||
IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING | |||||
WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS | |||||
THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY | |||||
GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE | |||||
USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF | |||||
DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD | |||||
PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), | |||||
EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF | |||||
SUCH DAMAGES. | |||||
17. Interpretation of Sections 15 and 16. | |||||
If the disclaimer of warranty and limitation of liability provided | |||||
above cannot be given local legal effect according to their terms, | |||||
reviewing courts shall apply local law that most closely approximates | |||||
an absolute waiver of all civil liability in connection with the | |||||
Program, unless a warranty or assumption of liability accompanies a | |||||
copy of the Program in return for a fee. | |||||
END OF TERMS AND CONDITIONS | |||||
How to Apply These Terms to Your New Programs | |||||
If you develop a new program, and you want it to be of the greatest | |||||
possible use to the public, the best way to achieve this is to make it | |||||
free software which everyone can redistribute and change under these terms. | |||||
To do so, attach the following notices to the program. It is safest | |||||
to attach them to the start of each source file to most effectively | |||||
state the exclusion of warranty; and each file should have at least | |||||
the "copyright" line and a pointer to where the full notice is found. | |||||
<one line to give the program's name and a brief idea of what it does.> | |||||
Copyright (C) <year> <name of author> | |||||
This program is free software: you can redistribute it and/or modify | |||||
it under the terms of the GNU General Public License as published by | |||||
the Free Software Foundation, either version 3 of the License, or | |||||
(at your option) any later version. | |||||
This program is distributed in the hope that it will be useful, | |||||
but WITHOUT ANY WARRANTY; without even the implied warranty of | |||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | |||||
GNU General Public License for more details. | |||||
You should have received a copy of the GNU General Public License | |||||
along with this program. If not, see <http://www.gnu.org/licenses/>. | |||||
Also add information on how to contact you by electronic and paper mail. | |||||
If the program does terminal interaction, make it output a short | |||||
notice like this when it starts in an interactive mode: | |||||
<program> Copyright (C) <year> <name of author> | |||||
This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'. | |||||
This is free software, and you are welcome to redistribute it | |||||
under certain conditions; type `show c' for details. | |||||
The hypothetical commands `show w' and `show c' should show the appropriate | |||||
parts of the General Public License. Of course, your program's commands | |||||
might be different; for a GUI interface, you would use an "about box". | |||||
You should also get your employer (if you work as a programmer) or school, | |||||
if any, to sign a "copyright disclaimer" for the program, if necessary. | |||||
For more information on this, and how to apply and follow the GNU GPL, see | |||||
<http://www.gnu.org/licenses/>. | |||||
The GNU General Public License does not permit incorporating your program | |||||
into proprietary programs. If your program is a subroutine library, you | |||||
may consider it more useful to permit linking proprietary applications with | |||||
the library. If this is what you want to do, use the GNU Lesser General | |||||
Public License instead of this License. But first, please read | |||||
<http://www.gnu.org/philosophy/why-not-lgpl.html>. |
@@ -1,13 +0,0 @@ | |||||
SLUG = "Aepelzens Modules" | |||||
VERSION = 0.6.0dev | |||||
#FLAGS += -D v_050_dev | |||||
LDFLAGS += -lsamplerate | |||||
SOURCES += $(wildcard src/*.cpp) | |||||
DISTRIBUTABLES += $(wildcard LICENSE*) res | |||||
RACK_DIR ?= ../.. | |||||
include $(RACK_DIR)/plugin.mk |
@@ -1,78 +0,0 @@ | |||||
# VCV Rack plugins | |||||
 | |||||
## GateSeq | |||||
A Gate Sequencer with pattern support intended for polyrhythms. Every channel has it's own clock input and length. There is also a global clock input and an internal clock. Furthermore each channel has a probability setting that sets the probability that an active beat will be sent out. | |||||
To set the length for a channel hit the length button. It will turn red to indicate that you are now in length-mode. In this mode every channel has a red step button (or a yellow one if that step is also active) which indicates the last step in the sequence. Just press another step to change the length. To leave length-mode push the length button again. The length settings are tied to the pattern and will get copied if you copy a pattern. | |||||
To copy a pattern, select the pattern you want to copy first. Push the copy button to enable copy-mode, switch to the target pattern and hit the copy button again to paste your pattern. This will overwrite the target pattern. | |||||
The switch over the pattern input determines wheater all channel positions should be reset when switching patterns (i. e. start the pattern from the beginning). This might be useful to realign the channels when switching from a pattern that uses different lengths per channel. When inactive the pattern will just keep running. | |||||
### Pattern Merging (work in progress) | |||||
You can create new patterns out of existing ones by merging them. The workflow is similar to copying. Select the base-pattern first and push the merge button. Now select another pattern and this new pattern will get merged with the base-pattern according to the merge-mode (selected with the knob below the merge button). The base pattern defines the channel lengths (this might change in future versions). Currently the following merge modes are available: | |||||
* OR | |||||
* AND | |||||
* XOR | |||||
* NOR | |||||
* Random (choose one of the two patterns randomly for each step and channel) | |||||
## QuadSeq | |||||
A four channel sequencer (The knobs are made by bogaudio). Like GateSeq each channel has it's own clock input (the 4 inputs on the bottom left) and length. The mode parameter sets one of the following playback modes: | |||||
* Forward | |||||
* Backwad | |||||
* Alternating | |||||
* Random Neighbour | |||||
* Random | |||||
## New Module: Dice | |||||
Another sequencer. This one is built around probabilities and comes with all the usual goodies (per | |||||
channel clock, length and playback modes). All unconnected clock inputs are normalised to the first | |||||
clock input. The knobs set the probability for a step to be active. Unfortunately there is not | |||||
enough space for labels but this should be simple enough to work without. The upper knob in the gray | |||||
area sets the channel length, the lower one the playback mode (these work like in QuadSeq). The | |||||
button in the upper left corner resets the playback positions. | |||||
## Burst | |||||
A Burst generator. For every received trigger a number of triggers and an accompanying CV signal is sent out. | |||||
Repetitions and time set the number of triggers and the time between them. Acceleration shortens the time between subsequent triggers, jitter shifts them randomly. The switch at the bootom controls the output mode (trigger or gate). | |||||
The last trigger also triggers the EOC (end of cycle) output. You can connect this to the trigger input and turn up jitter and/or acceleration to get an irregular clock or chain multiple burst generators together. | |||||
The mode button selects the mode for the CV output, that can be used to modulate pitch or filter cutoff for delay style effects etc. Currently the following modes are supported: | |||||
* Up: cv increases in even steps | |||||
* Down: cv decreases in even steps | |||||
* Alternating1: output alternates between positive and negative values. The magnitude is only increased after 2 pulses (so you get 0, 1, -1, 2, -2 ...) | |||||
* Alternating2: output alternates between positive and negative values. The magnitude is increased after every pulse (so you get 0, 1, -2, 3, -4 ...) | |||||
* Randomp: positive random values | |||||
* Randomn: negative random values | |||||
* Random | |||||
If you have ideas for additional CV-Modes or any other suggestions please let me know. | |||||
## Manifold | |||||
A wavefolder. Works best with simple input signals like sine or triangle waves. The fold and symmetry inputs work well with CV and audio signals. The output becomes pretty noisy for high frequency modulators but produces very interesting sounds at low/mid frequency ranges. There is an alternative folding algorithm that can be switched via context menu. That one does all the folding in a single pass and therefore the stages button does nothing if this mode is selected. It also responds different to the symmetry parameter, especially with a high number of folds. | |||||
Note: this module shifts the phase of the input-signal (because of the upsampling) | |||||
## Walker | |||||
A CV generator that simulates a random walk. At every step the CV output changes by either plus or minus stepsize. The decision is affected by the Symmetry parameter. At 12 o'clock both directions are equally likely, fully ccw all steps move downward, full cw all steps move upward. The Switch controls the behaviour at the range boundaries. There are 3 possible modes: | |||||
* Clip the signal at the boundary and just wait for it to eventually get back into the allowed range (depending on the symmetry parameter this might not happen or take a long time) | |||||
* Reset to zero | |||||
* Reset to random value within ± range/2 (this is also affected by the Symmetry parameter) | |||||
## Erwin | |||||
A 4-channel scale-quantiser with user-definable scales. All inputs/outputs use the same scale, however you can transpose every channel seperately by ±4 octaves (the 4 small trimpots). You can also transpose all outputs by 4 octaves and/or 12 semitonses via CV inputs. | |||||
# Building | |||||
The wavefolder uses libsamplerate for the upsampling. That shouldn't be a problem because Rack depends on libsamplerate anyway but you might have to install the header-files if you don't build Rack yourself. |
@@ -1,546 +0,0 @@ | |||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?> | |||||
<svg | |||||
xmlns:dc="http://purl.org/dc/elements/1.1/" | |||||
xmlns:cc="http://creativecommons.org/ns#" | |||||
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" | |||||
xmlns:svg="http://www.w3.org/2000/svg" | |||||
xmlns="http://www.w3.org/2000/svg" | |||||
xmlns:xlink="http://www.w3.org/1999/xlink" | |||||
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" | |||||
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" | |||||
id="svg8" | |||||
width="89.99999" | |||||
height="380.00004" | |||||
viewBox="0 0 89.99999 380.00004" | |||||
version="1.1" | |||||
sodipodi:docname="Burst.svg" | |||||
inkscape:version="0.92.2 5c3e80d, 2017-08-06"> | |||||
<metadata | |||||
id="metadata29"> | |||||
<rdf:RDF> | |||||
<cc:Work | |||||
rdf:about=""> | |||||
<dc:format>image/svg+xml</dc:format> | |||||
<dc:type | |||||
rdf:resource="http://purl.org/dc/dcmitype/StillImage" /> | |||||
<dc:title>BlankPanel1</dc:title> | |||||
</cc:Work> | |||||
</rdf:RDF> | |||||
</metadata> | |||||
<defs | |||||
id="defs27"> | |||||
<clipPath | |||||
id="clipPath837" | |||||
clipPathUnits="userSpaceOnUse"> | |||||
<path | |||||
inkscape:connector-curvature="0" | |||||
id="path835" | |||||
d="M 0,842 H 595 V 0 H 0 Z" /> | |||||
</clipPath> | |||||
<clipPath | |||||
id="clipPath13703" | |||||
clipPathUnits="userSpaceOnUse"> | |||||
<path | |||||
inkscape:connector-curvature="0" | |||||
id="path13701" | |||||
d="M 0,1020.448 H 935.433 V 0 H 0 Z" /> | |||||
</clipPath> | |||||
</defs> | |||||
<sodipodi:namedview | |||||
pagecolor="#ffffff" | |||||
bordercolor="#666666" | |||||
borderopacity="1" | |||||
objecttolerance="10" | |||||
gridtolerance="10" | |||||
guidetolerance="10" | |||||
inkscape:pageopacity="0" | |||||
inkscape:pageshadow="2" | |||||
inkscape:window-width="1898" | |||||
inkscape:window-height="1026" | |||||
id="namedview25" | |||||
showgrid="false" | |||||
inkscape:zoom="2.1091365" | |||||
inkscape:cx="-57.712678" | |||||
inkscape:cy="227.91815" | |||||
inkscape:window-x="10" | |||||
inkscape:window-y="42" | |||||
inkscape:window-maximized="0" | |||||
inkscape:current-layer="svg8" | |||||
showguides="true" | |||||
inkscape:guide-bbox="true" /> | |||||
<title | |||||
id="title2">BlankPanel1</title> | |||||
<g | |||||
transform="matrix(1.3333333,0,0,-1.3333333,-826.22953,717.78288)" | |||||
inkscape:label="1" | |||||
id="g827" | |||||
style="opacity:1"> | |||||
<g | |||||
id="g831"> | |||||
<g | |||||
transform="translate(619.08227,-482.18084)" | |||||
inkscape:label="02" | |||||
id="g13693"> | |||||
<path | |||||
inkscape:connector-curvature="0" | |||||
id="path13695" | |||||
style="fill:#091942;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.22436777" | |||||
d="M 0,735.3352 H 68.666843 V 1020.448 H 0 Z" /> | |||||
<path | |||||
style="opacity:1;fill:#e6e6e6;fill-opacity:1;stroke:#000000;stroke-width:0.47412768;stroke-linecap:square;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:0.98999999" | |||||
d="M -0.45300759,190.33385 V 0.445719 H 45.063249 90.579506 V 190.33385 380.22199 H 45.063249 -0.45300759 Z" | |||||
id="path26" | |||||
inkscape:connector-curvature="0" | |||||
transform="matrix(0.75000002,0,0,-0.75000002,0.58989299,1020.518)" /> | |||||
</g> | |||||
</g> | |||||
<g | |||||
inkscape:groupmode="layer" | |||||
id="layer2" | |||||
inkscape:label="Layer 1" | |||||
style="opacity:0"> | |||||
<image | |||||
sodipodi:absref="/tmp/seq.png" | |||||
y="-538.26715" | |||||
x="619.08228" | |||||
id="image80" | |||||
xlink:href="file:///tmp/seq.png" | |||||
preserveAspectRatio="none" | |||||
height="290.25" | |||||
width="67.5" | |||||
transform="scale(1,-1)" /> | |||||
</g> | |||||
<g | |||||
aria-label="Burst!" | |||||
transform="scale(1,-1)" | |||||
style="font-style:normal;font-weight:normal;font-size:9px;line-height:125%;font-family:Sans;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.75px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" | |||||
id="text85"> | |||||
<path | |||||
d="m 639.28046,-524.65674 v -8.53125 h 2.98828 q 1.55273,0 2.35547,0.59766 0.80273,0.59179 0.80273,1.74023 0,0.62696 -0.32226,1.10742 -0.32227,0.47461 -0.89649,0.69727 0.65625,0.16406 1.03125,0.66211 0.38086,0.49805 0.38086,1.21875 0,1.23047 -0.78516,1.86328 -0.78515,0.63281 -2.23828,0.64453 z m 1.75781,-3.71484 v 2.30273 h 1.50586 q 0.62109,0 0.9668,-0.29297 0.35156,-0.29882 0.35156,-0.82031 0,-1.17187 -1.21289,-1.18945 z m 0,-1.24219 h 1.30078 q 1.33008,-0.0234 1.33008,-1.06055 0,-0.58007 -0.33985,-0.83203 -0.33398,-0.25781 -1.06054,-0.25781 h -1.23047 z" | |||||
style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:12px;font-family:Roboto;-inkscape-font-specification:'Roboto, Bold';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.75px" | |||||
id="path1101" | |||||
inkscape:connector-curvature="0" /> | |||||
<path | |||||
d="m 650.63007,-525.30127 q -0.62696,0.76172 -1.73438,0.76172 -1.01953,0 -1.55859,-0.58594 -0.53321,-0.58594 -0.54492,-1.7168 v -4.15429 h 1.69335 v 4.0957 q 0,0.99024 0.90235,0.99024 0.86133,0 1.18359,-0.59766 v -4.48828 h 1.69922 v 6.33984 h -1.59375 z" | |||||
style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:12px;font-family:Roboto;-inkscape-font-specification:'Roboto, Bold';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.75px" | |||||
id="path1103" | |||||
inkscape:connector-curvature="0" /> | |||||
<path | |||||
d="m 657.12225,-529.40869 q -0.3457,-0.0469 -0.60937,-0.0469 -0.96094,0 -1.25977,0.65039 v 4.14844 h -1.69336 v -6.33984 h 1.59961 l 0.0469,0.75586 q 0.50976,-0.87305 1.41211,-0.87305 0.28125,0 0.52734,0.0762 z" | |||||
style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:12px;font-family:Roboto;-inkscape-font-specification:'Roboto, Bold';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.75px" | |||||
id="path1105" | |||||
inkscape:connector-curvature="0" /> | |||||
<path | |||||
d="m 661.37616,-526.40869 q 0,-0.31055 -0.31055,-0.48633 -0.30468,-0.18164 -0.98437,-0.32227 -2.26172,-0.4746 -2.26172,-1.92187 0,-0.84375 0.69726,-1.40625 0.70313,-0.56836 1.83399,-0.56836 1.20703,0 1.92773,0.56836 0.72657,0.56836 0.72657,1.47656 h -1.69336 q 0,-0.36328 -0.23438,-0.59765 -0.23437,-0.24024 -0.73242,-0.24024 -0.42773,0 -0.66211,0.19336 -0.23437,0.19336 -0.23437,0.49219 0,0.28125 0.26367,0.45703 0.26953,0.16992 0.90234,0.29883 0.63281,0.12304 1.06641,0.28125 1.34179,0.49219 1.34179,1.70508 0,0.86718 -0.74414,1.40625 -0.74414,0.5332 -1.92187,0.5332 -0.79688,0 -1.41797,-0.28125 -0.61523,-0.28711 -0.9668,-0.7793 -0.35156,-0.49804 -0.35156,-1.07226 h 1.60547 q 0.0234,0.45117 0.33398,0.6914 0.31055,0.24024 0.83203,0.24024 0.48633,0 0.73243,-0.18164 0.25195,-0.1875 0.25195,-0.48633 z" | |||||
style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:12px;font-family:Roboto;-inkscape-font-specification:'Roboto, Bold';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.75px" | |||||
id="path1107" | |||||
inkscape:connector-curvature="0" /> | |||||
<path | |||||
d="m 666.13397,-532.55518 v 1.5586 h 1.08399 v 1.24219 h -1.08399 v 3.16406 q 0,0.35156 0.13477,0.5039 0.13476,0.15235 0.51562,0.15235 0.28125,0 0.49805,-0.041 v 1.28321 q -0.49805,0.15234 -1.02539,0.15234 -1.78125,0 -1.81641,-1.79883 v -3.41601 h -0.92578 v -1.24219 h 0.92578 v -1.5586 z" | |||||
style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:12px;font-family:Roboto;-inkscape-font-specification:'Roboto, Bold';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.75px" | |||||
id="path1109" | |||||
inkscape:connector-curvature="0" /> | |||||
<path | |||||
d="m 669.88397,-527.27588 h -1.40625 l -0.19922,-5.91211 h 1.80469 z m -0.70312,0.92578 q 0.42773,0 0.68554,0.25196 0.26368,0.25195 0.26368,0.64453 0,0.38672 -0.26368,0.63867 -0.25781,0.25195 -0.68554,0.25195 -0.42188,0 -0.68555,-0.25195 -0.25781,-0.25195 -0.25781,-0.63867 0,-0.38672 0.25781,-0.63868 0.26367,-0.25781 0.68555,-0.25781 z" | |||||
style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:12px;font-family:Roboto;-inkscape-font-specification:'Roboto, Bold';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.75px" | |||||
id="path1111" | |||||
inkscape:connector-curvature="0" /> | |||||
</g> | |||||
<g | |||||
aria-label="Repetitions" | |||||
transform="scale(1,-1)" | |||||
inkscape:transform-center-x="18.016852" | |||||
inkscape:transform-center-y="-3.7930216" | |||||
style="font-style:normal;font-weight:normal;font-size:9px;line-height:125%;font-family:Sans;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.75px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" | |||||
id="text105"> | |||||
<path | |||||
d="m 639.49921,-466.92981 h -1.16895 v 2.01318 h -0.65967 v -4.97656 h 1.64746 q 0.84082,0 1.292,0.38281 0.45459,0.38282 0.45459,1.11426 0,0.46485 -0.25293,0.81006 -0.24952,0.34522 -0.69727,0.51611 l 1.16895,2.11231 v 0.041 h -0.70411 z m -1.16895,-0.53662 h 1.0083 q 0.48877,0 0.77588,-0.25293 0.29053,-0.25293 0.29053,-0.67676 0,-0.46142 -0.27686,-0.70752 -0.27343,-0.24609 -0.79297,-0.24951 h -1.00488 z" | |||||
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:7px;font-family:Roboto;-inkscape-font-specification:'Roboto, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.75px" | |||||
id="path1078" | |||||
inkscape:connector-curvature="0" /> | |||||
<path | |||||
d="m 643.4162,-464.84827 q -0.75195,0 -1.22363,-0.49218 -0.47168,-0.49561 -0.47168,-1.32276 v -0.11621 q 0,-0.55029 0.20849,-0.98096 0.21192,-0.43408 0.58789,-0.67675 0.3794,-0.2461 0.82032,-0.2461 0.72119,0 1.12109,0.4751 0.3999,0.4751 0.3999,1.36035 v 0.26319 h -2.50537 q 0.0137,0.54687 0.31787,0.88525 0.30762,0.33496 0.7793,0.33496 0.33496,0 0.56738,-0.13672 0.23242,-0.13672 0.40674,-0.3623 l 0.38623,0.30078 q -0.46484,0.71435 -1.39453,0.71435 z m -0.0786,-3.31543 q -0.38282,0 -0.64258,0.28028 -0.25977,0.27685 -0.32129,0.77929 h 1.85254 v -0.0478 q -0.0274,-0.48193 -0.25977,-0.74511 -0.23242,-0.26661 -0.6289,-0.26661 z" | |||||
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:7px;font-family:Roboto;-inkscape-font-specification:'Roboto, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.75px" | |||||
id="path1080" | |||||
inkscape:connector-curvature="0" /> | |||||
<path | |||||
d="m 648.71063,-466.72473 q 0,0.84424 -0.38623,1.36035 -0.38623,0.51611 -1.0459,0.51611 -0.67334,0 -1.05957,-0.42724 v 1.78076 h -0.63232 v -5.12012 h 0.57764 l 0.0308,0.41016 q 0.38623,-0.47852 1.07324,-0.47852 0.6665,0 1.05273,0.50244 0.38965,0.50245 0.38965,1.39795 z m -0.63232,-0.0718 q 0,-0.62549 -0.2666,-0.98779 -0.26661,-0.36231 -0.73145,-0.36231 -0.57422,0 -0.86133,0.50928 v 1.76709 q 0.28369,0.50586 0.86817,0.50586 0.45459,0 0.72119,-0.35889 0.27002,-0.3623 0.27002,-1.07324 z" | |||||
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:7px;font-family:Roboto;-inkscape-font-specification:'Roboto, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.75px" | |||||
id="path1082" | |||||
inkscape:connector-curvature="0" /> | |||||
<path | |||||
d="m 651.0451,-464.84827 q -0.75195,0 -1.22363,-0.49218 -0.47168,-0.49561 -0.47168,-1.32276 v -0.11621 q 0,-0.55029 0.2085,-0.98096 0.21191,-0.43408 0.58789,-0.67675 0.37939,-0.2461 0.82031,-0.2461 0.72119,0 1.1211,0.4751 0.3999,0.4751 0.3999,1.36035 v 0.26319 h -2.50537 q 0.0137,0.54687 0.31787,0.88525 0.30761,0.33496 0.77929,0.33496 0.33497,0 0.56739,-0.13672 0.23242,-0.13672 0.40674,-0.3623 l 0.38623,0.30078 q -0.46485,0.71435 -1.39454,0.71435 z m -0.0786,-3.31543 q -0.38281,0 -0.64258,0.28028 -0.25976,0.27685 -0.32129,0.77929 h 1.85254 v -0.0478 q -0.0273,-0.48193 -0.25976,-0.74511 -0.23242,-0.26661 -0.62891,-0.26661 z" | |||||
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:7px;font-family:Roboto;-inkscape-font-specification:'Roboto, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.75px" | |||||
id="path1084" | |||||
inkscape:connector-curvature="0" /> | |||||
<path | |||||
d="m 654.07343,-469.51038 v 0.89551 h 0.69042 v 0.48877 h -0.69042 v 2.29346 q 0,0.22217 0.0923,0.33496 0.0923,0.10937 0.31445,0.10937 0.10938,0 0.30078,-0.041 v 0.51269 q -0.24951,0.0684 -0.48535,0.0684 -0.42382,0 -0.63916,-0.25634 -0.21533,-0.25635 -0.21533,-0.72803 v -2.29346 h -0.67334 v -0.48877 h 0.67334 v -0.89551 z" | |||||
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:7px;font-family:Roboto;-inkscape-font-specification:'Roboto, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.75px" | |||||
id="path1086" | |||||
inkscape:connector-curvature="0" /> | |||||
<path | |||||
d="m 656.18573,-464.91663 h -0.63232 v -3.69824 h 0.63232 z m -0.68359,-4.6792 q 0,-0.1538 0.0923,-0.25976 0.0957,-0.10596 0.28027,-0.10596 0.18458,0 0.28028,0.10596 0.0957,0.10596 0.0957,0.25976 0,0.15381 -0.0957,0.25635 -0.0957,0.10254 -0.28028,0.10254 -0.18457,0 -0.28027,-0.10254 -0.0923,-0.10254 -0.0923,-0.25635 z" | |||||
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:7px;font-family:Roboto;-inkscape-font-specification:'Roboto, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.75px" | |||||
id="path1088" | |||||
inkscape:connector-curvature="0" /> | |||||
<path | |||||
d="m 658.05194,-469.51038 v 0.89551 h 0.69043 v 0.48877 h -0.69043 v 2.29346 q 0,0.22217 0.0923,0.33496 0.0923,0.10937 0.31445,0.10937 0.10937,0 0.30078,-0.041 v 0.51269 q -0.24951,0.0684 -0.48535,0.0684 -0.42383,0 -0.63916,-0.25634 -0.21533,-0.25635 -0.21533,-0.72803 v -2.29346 h -0.67334 v -0.48877 h 0.67334 v -0.89551 z" | |||||
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:7px;font-family:Roboto;-inkscape-font-specification:'Roboto, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.75px" | |||||
id="path1090" | |||||
inkscape:connector-curvature="0" /> | |||||
<path | |||||
d="m 660.16425,-464.91663 h -0.63233 v -3.69824 h 0.63233 z m -0.6836,-4.6792 q 0,-0.1538 0.0923,-0.25976 0.0957,-0.10596 0.28027,-0.10596 0.18457,0 0.28027,0.10596 0.0957,0.10596 0.0957,0.25976 0,0.15381 -0.0957,0.25635 -0.0957,0.10254 -0.28027,0.10254 -0.18457,0 -0.28027,-0.10254 -0.0923,-0.10254 -0.0923,-0.25635 z" | |||||
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:7px;font-family:Roboto;-inkscape-font-specification:'Roboto, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.75px" | |||||
id="path1092" | |||||
inkscape:connector-curvature="0" /> | |||||
<path | |||||
d="m 661.00507,-466.79993 q 0,-0.54345 0.21191,-0.97754 0.21533,-0.43408 0.59473,-0.66992 0.38281,-0.23584 0.87158,-0.23584 0.75537,0 1.22021,0.52295 0.46827,0.52295 0.46827,1.39111 v 0.0444 q 0,0.54004 -0.2085,0.9707 -0.20508,0.42725 -0.59131,0.66651 -0.38281,0.23925 -0.88184,0.23925 -0.75195,0 -1.22021,-0.52295 -0.46484,-0.52295 -0.46484,-1.38427 z m 0.63574,0.0752 q 0,0.61523 0.28369,0.98779 0.28711,0.37256 0.76562,0.37256 0.48194,0 0.76563,-0.37598 0.28369,-0.37939 0.28369,-1.05957 0,-0.6084 -0.29053,-0.98437 -0.28711,-0.3794 -0.76562,-0.3794 -0.46826,0 -0.75537,0.37256 -0.28711,0.37256 -0.28711,1.06641 z" | |||||
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:7px;font-family:Roboto;-inkscape-font-specification:'Roboto, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.75px" | |||||
id="path1094" | |||||
inkscape:connector-curvature="0" /> | |||||
<path | |||||
d="m 665.76288,-468.61487 0.0205,0.46485 q 0.42382,-0.53321 1.10742,-0.53321 1.17236,0 1.18262,1.32276 v 2.44384 h -0.63233 v -2.44726 q -0.003,-0.3999 -0.18457,-0.59131 -0.17773,-0.19141 -0.55713,-0.19141 -0.30762,0 -0.54004,0.16407 -0.23242,0.16406 -0.3623,0.43066 v 2.63525 h -0.63233 v -3.69824 z" | |||||
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:7px;font-family:Roboto;-inkscape-font-specification:'Roboto, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.75px" | |||||
id="path1096" | |||||
inkscape:connector-curvature="0" /> | |||||
<path | |||||
d="m 671.18719,-465.89758 q 0,-0.25635 -0.19482,-0.39649 -0.19141,-0.14355 -0.67334,-0.24609 -0.47851,-0.10254 -0.76221,-0.24609 -0.28027,-0.14356 -0.41699,-0.3418 -0.1333,-0.19824 -0.1333,-0.47168 0,-0.45459 0.38281,-0.76904 0.38623,-0.31446 0.98438,-0.31446 0.6289,0 1.01855,0.32471 0.39307,0.32471 0.39307,0.83057 h -0.63574 q 0,-0.25977 -0.22217,-0.44776 -0.21875,-0.18799 -0.55371,-0.18799 -0.34522,0 -0.54004,0.15039 -0.19483,0.15039 -0.19483,0.39307 0,0.229 0.18116,0.34522 0.18115,0.11621 0.65283,0.22216 0.4751,0.10596 0.76904,0.25293 0.29395,0.14698 0.43408,0.35547 0.14356,0.20508 0.14356,0.50244 0,0.49561 -0.39649,0.79639 -0.39648,0.29736 -1.0288,0.29736 -0.44434,0 -0.78614,-0.15722 -0.34179,-0.15723 -0.53662,-0.4375 -0.1914,-0.28369 -0.1914,-0.61182 h 0.63232 q 0.0171,0.31787 0.25293,0.50586 0.23926,0.18457 0.62891,0.18457 0.35888,0 0.57421,-0.14355 0.21875,-0.14698 0.21875,-0.38965 z" | |||||
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:7px;font-family:Roboto;-inkscape-font-specification:'Roboto, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.75px" | |||||
id="path1098" | |||||
inkscape:connector-curvature="0" /> | |||||
</g> | |||||
<g | |||||
aria-label="Time" | |||||
transform="scale(1,-1)" | |||||
inkscape:transform-center-x="18.016852" | |||||
inkscape:transform-center-y="-3.7930216" | |||||
style="font-style:normal;font-weight:normal;font-size:9px;line-height:125%;font-family:Sans;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.75px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" | |||||
id="text105-5"> | |||||
<path | |||||
d="m 633.42047,-434.11563 h -1.59961 v 4.43652 h -0.65283 v -4.43652 h -1.59619 v -0.54004 h 3.84863 z" | |||||
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:7px;font-family:Roboto;-inkscape-font-specification:'Roboto, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.75px" | |||||
id="path1069" | |||||
inkscape:connector-curvature="0" /> | |||||
<path | |||||
d="m 634.75348,-429.67911 h -0.63233 v -3.69824 h 0.63233 z m -0.68359,-4.6792 q 0,-0.15381 0.0923,-0.25976 0.0957,-0.10596 0.28027,-0.10596 0.18457,0 0.28028,0.10596 0.0957,0.10595 0.0957,0.25976 0,0.15381 -0.0957,0.25635 -0.0957,0.10254 -0.28028,0.10254 -0.18457,0 -0.28027,-0.10254 -0.0923,-0.10254 -0.0923,-0.25635 z" | |||||
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:7px;font-family:Roboto;-inkscape-font-specification:'Roboto, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.75px" | |||||
id="path1071" | |||||
inkscape:connector-curvature="0" /> | |||||
<path | |||||
d="m 636.35651,-433.37735 0.0171,0.41016 q 0.40673,-0.47852 1.09716,-0.47852 0.77588,0 1.05616,0.59473 0.18457,-0.2666 0.47851,-0.43067 0.29737,-0.16406 0.70069,-0.16406 1.21679,0 1.2373,1.28857 v 2.47803 h -0.63232 v -2.44043 q 0,-0.39648 -0.18116,-0.59131 -0.18115,-0.19824 -0.60839,-0.19824 -0.35206,0 -0.58448,0.21192 -0.23242,0.20849 -0.27002,0.56396 v 2.4541 h -0.63574 v -2.42334 q 0,-0.80664 -0.78955,-0.80664 -0.62207,0 -0.85107,0.52979 v 2.70019 h -0.63233 v -3.69824 z" | |||||
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:7px;font-family:Roboto;-inkscape-font-specification:'Roboto, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.75px" | |||||
id="path1073" | |||||
inkscape:connector-curvature="0" /> | |||||
<path | |||||
d="m 643.43512,-429.61075 q -0.75195,0 -1.22363,-0.49219 -0.47168,-0.4956 -0.47168,-1.32275 v -0.11621 q 0,-0.55029 0.20849,-0.98096 0.21192,-0.43408 0.58789,-0.67676 0.3794,-0.24609 0.82032,-0.24609 0.72119,0 1.12109,0.4751 0.3999,0.4751 0.3999,1.36035 v 0.26318 h -2.50537 q 0.0137,0.54688 0.31787,0.88526 0.30762,0.33496 0.7793,0.33496 0.33496,0 0.56738,-0.13672 0.23242,-0.13672 0.40674,-0.36231 l 0.38623,0.30079 q -0.46484,0.71435 -1.39453,0.71435 z m -0.0786,-3.31543 q -0.38282,0 -0.64258,0.28028 -0.25977,0.27685 -0.32129,0.77929 h 1.85254 v -0.0479 q -0.0273,-0.48193 -0.25977,-0.74512 -0.23242,-0.2666 -0.6289,-0.2666 z" | |||||
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:7px;font-family:Roboto;-inkscape-font-specification:'Roboto, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.75px" | |||||
id="path1075" | |||||
inkscape:connector-curvature="0" /> | |||||
</g> | |||||
<g | |||||
aria-label="Accel" | |||||
transform="scale(1,-1)" | |||||
inkscape:transform-center-x="18.016852" | |||||
inkscape:transform-center-y="-3.7930216" | |||||
style="font-style:normal;font-weight:normal;font-size:9px;line-height:125%;font-family:Sans;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.75px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" | |||||
id="text137"> | |||||
<path | |||||
d="m 664.02246,-430.97794 h -2.08496 l -0.46826,1.29883 h -0.67676 l 1.90039,-4.97656 h 0.57422 l 1.90381,4.97656 h -0.67334 z m -1.88672,-0.54003 h 1.6919 l -0.84766,-2.32764 z" | |||||
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:7px;font-family:Roboto;-inkscape-font-specification:'Roboto, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.75px" | |||||
id="path1058" | |||||
inkscape:connector-curvature="0" /> | |||||
<path | |||||
d="m 667.2251,-430.12686 q 0.33838,0 0.59131,-0.20508 0.25293,-0.20508 0.28027,-0.5127 h 0.59814 q -0.0171,0.31788 -0.21875,0.60499 -0.20166,0.2871 -0.54003,0.458 -0.33497,0.1709 -0.71094,0.1709 -0.75537,0 -1.20313,-0.50244 -0.44433,-0.50586 -0.44433,-1.38086 v -0.10596 q 0,-0.54004 0.19824,-0.96045 0.19824,-0.42041 0.56738,-0.65283 0.37256,-0.23242 0.87842,-0.23242 0.62207,0 1.03223,0.37256 0.41357,0.37256 0.44091,0.96728 h -0.59814 q -0.0273,-0.35888 -0.27344,-0.58789 -0.24267,-0.23242 -0.60156,-0.23242 -0.48193,0 -0.74854,0.34863 -0.26318,0.34522 -0.26318,1.00147 v 0.11963 q 0,0.63916 0.26318,0.98437 0.26319,0.34522 0.75196,0.34522 z" | |||||
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:7px;font-family:Roboto;-inkscape-font-specification:'Roboto, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.75px" | |||||
id="path1060" | |||||
inkscape:connector-curvature="0" /> | |||||
<path | |||||
d="m 670.88916,-430.12686 q 0.33838,0 0.59131,-0.20508 0.25293,-0.20508 0.28027,-0.5127 h 0.59815 q -0.0171,0.31788 -0.21875,0.60499 -0.20166,0.2871 -0.54004,0.458 -0.33496,0.1709 -0.71094,0.1709 -0.75537,0 -1.20312,-0.50244 -0.44434,-0.50586 -0.44434,-1.38086 v -0.10596 q 0,-0.54004 0.19824,-0.96045 0.19824,-0.42041 0.56738,-0.65283 0.37256,-0.23242 0.87842,-0.23242 0.62207,0 1.03223,0.37256 0.41357,0.37256 0.44092,0.96728 h -0.59815 q -0.0273,-0.35888 -0.27344,-0.58789 -0.24267,-0.23242 -0.60156,-0.23242 -0.48193,0 -0.74853,0.34863 -0.26319,0.34522 -0.26319,1.00147 v 0.11963 q 0,0.63916 0.26319,0.98437 0.26318,0.34522 0.75195,0.34522 z" | |||||
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:7px;font-family:Roboto;-inkscape-font-specification:'Roboto, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.75px" | |||||
id="path1062" | |||||
inkscape:connector-curvature="0" /> | |||||
<path | |||||
d="m 674.60449,-429.61075 q -0.75195,0 -1.22363,-0.49219 -0.47168,-0.4956 -0.47168,-1.32275 v -0.11621 q 0,-0.55029 0.2085,-0.98096 0.21191,-0.43408 0.58789,-0.67676 0.37939,-0.24609 0.82031,-0.24609 0.72119,0 1.12109,0.4751 0.3999,0.4751 0.3999,1.36035 v 0.26318 h -2.50537 q 0.0137,0.54688 0.31787,0.88526 0.30762,0.33496 0.7793,0.33496 0.33496,0 0.56738,-0.13672 0.23243,-0.13672 0.40674,-0.36231 l 0.38623,0.30079 q -0.46484,0.71435 -1.39453,0.71435 z m -0.0786,-3.31543 q -0.38281,0 -0.64258,0.28028 -0.25976,0.27685 -0.32129,0.77929 h 1.85254 v -0.0479 q -0.0273,-0.48193 -0.25976,-0.74512 -0.23243,-0.2666 -0.62891,-0.2666 z" | |||||
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:7px;font-family:Roboto;-inkscape-font-specification:'Roboto, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.75px" | |||||
id="path1064" | |||||
inkscape:connector-curvature="0" /> | |||||
<path | |||||
d="m 677.46191,-429.67911 h -0.63232 v -5.25 h 0.63232 z" | |||||
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:7px;font-family:Roboto;-inkscape-font-specification:'Roboto, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.75px" | |||||
id="path1066" | |||||
inkscape:connector-curvature="0" /> | |||||
</g> | |||||
<g | |||||
aria-label="Jitter" | |||||
transform="scale(1,-1)" | |||||
inkscape:transform-center-x="18.016852" | |||||
inkscape:transform-center-y="-3.7930216" | |||||
style="font-style:normal;font-weight:normal;font-size:9px;line-height:125%;font-family:Sans;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.75px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" | |||||
id="text141"> | |||||
<path | |||||
d="m 632.06696,-400.15567 h 0.65966 v 3.52393 q 0,0.71435 -0.43066,1.11767 -0.42725,0.40332 -1.1416,0.40332 -0.7417,0 -1.15528,-0.37939 -0.41357,-0.3794 -0.41357,-1.06299 h 0.65625 q 0,0.42724 0.23242,0.6665 0.23584,0.23926 0.68018,0.23926 0.40674,0 0.65625,-0.25635 0.25293,-0.25634 0.25635,-0.71777 z" | |||||
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:7px;font-family:Roboto;-inkscape-font-specification:'Roboto, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.75px" | |||||
id="path1045" | |||||
inkscape:connector-curvature="0" /> | |||||
<path | |||||
d="m 634.43903,-395.17911 h -0.63233 v -3.69824 h 0.63233 z m -0.6836,-4.6792 q 0,-0.15381 0.0923,-0.25976 0.0957,-0.10596 0.28027,-0.10596 0.18457,0 0.28027,0.10596 0.0957,0.10595 0.0957,0.25976 0,0.15381 -0.0957,0.25635 -0.0957,0.10254 -0.28027,0.10254 -0.18457,0 -0.28027,-0.10254 -0.0923,-0.10254 -0.0923,-0.25635 z" | |||||
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:7px;font-family:Roboto;-inkscape-font-specification:'Roboto, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.75px" | |||||
id="path1047" | |||||
inkscape:connector-curvature="0" /> | |||||
<path | |||||
d="m 636.30524,-399.77286 v 0.89551 h 0.69043 v 0.48877 h -0.69043 v 2.29346 q 0,0.22216 0.0923,0.33496 0.0923,0.10937 0.31446,0.10937 0.10937,0 0.30078,-0.041 v 0.51269 q -0.24952,0.0684 -0.48536,0.0684 -0.42382,0 -0.63916,-0.25635 -0.21533,-0.25634 -0.21533,-0.72802 v -2.29346 h -0.67334 v -0.48877 h 0.67334 v -0.89551 z" | |||||
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:7px;font-family:Roboto;-inkscape-font-specification:'Roboto, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.75px" | |||||
id="path1049" | |||||
inkscape:connector-curvature="0" /> | |||||
<path | |||||
d="m 638.58844,-399.77286 v 0.89551 h 0.69043 v 0.48877 h -0.69043 v 2.29346 q 0,0.22216 0.0923,0.33496 0.0923,0.10937 0.31445,0.10937 0.10937,0 0.30078,-0.041 v 0.51269 q -0.24951,0.0684 -0.48535,0.0684 -0.42383,0 -0.63916,-0.25635 -0.21533,-0.25634 -0.21533,-0.72802 v -2.29346 h -0.67334 v -0.48877 h 0.67334 v -0.89551 z" | |||||
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:7px;font-family:Roboto;-inkscape-font-specification:'Roboto, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.75px" | |||||
id="path1051" | |||||
inkscape:connector-curvature="0" /> | |||||
<path | |||||
d="m 641.5484,-395.11075 q -0.75195,0 -1.22363,-0.49219 -0.47168,-0.4956 -0.47168,-1.32275 v -0.11621 q 0,-0.55029 0.20849,-0.98096 0.21192,-0.43408 0.5879,-0.67676 0.37939,-0.24609 0.82031,-0.24609 0.72119,0 1.12109,0.4751 0.3999,0.4751 0.3999,1.36035 v 0.26318 h -2.50537 q 0.0137,0.54688 0.31787,0.88526 0.30762,0.33496 0.7793,0.33496 0.33496,0 0.56738,-0.13672 0.23243,-0.13672 0.40674,-0.36231 l 0.38623,0.30079 q -0.46484,0.71435 -1.39453,0.71435 z m -0.0786,-3.31543 q -0.38281,0 -0.64258,0.28028 -0.25977,0.27685 -0.32129,0.77929 h 1.85254 v -0.0479 q -0.0273,-0.48193 -0.25977,-0.74512 -0.23242,-0.2666 -0.6289,-0.2666 z" | |||||
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:7px;font-family:Roboto;-inkscape-font-specification:'Roboto, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.75px" | |||||
id="path1053" | |||||
inkscape:connector-curvature="0" /> | |||||
<path | |||||
d="m 645.50641,-398.30997 q -0.14356,-0.0239 -0.31104,-0.0239 -0.62207,0 -0.84423,0.52978 v 2.625 h -0.63233 v -3.69824 h 0.61524 l 0.0102,0.42725 q 0.31103,-0.49561 0.88184,-0.49561 0.18457,0 0.28027,0.0479 z" | |||||
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:7px;font-family:Roboto;-inkscape-font-specification:'Roboto, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.75px" | |||||
id="path1055" | |||||
inkscape:connector-curvature="0" /> | |||||
</g> | |||||
<g | |||||
aria-label="Mode" | |||||
transform="scale(1,-1)" | |||||
inkscape:transform-center-x="18.016852" | |||||
inkscape:transform-center-y="-3.7930216" | |||||
style="font-style:normal;font-weight:normal;font-size:9px;line-height:125%;font-family:Sans;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.75px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" | |||||
id="text145"> | |||||
<path | |||||
d="m 660.97766,-400.15567 1.62695,4.06055 1.62696,-4.06055 h 0.85107 v 4.97656 h -0.65625 v -1.93799 l 0.0615,-2.09179 -1.63379,4.02978 h -0.50245 l -1.63037,-4.01953 0.0649,2.08154 v 1.93799 H 660.13 v -4.97656 z" | |||||
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:7px;font-family:Roboto;-inkscape-font-specification:'Roboto, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.75px" | |||||
id="path1036" | |||||
inkscape:connector-curvature="0" /> | |||||
<path | |||||
d="m 665.97473,-397.06241 q 0,-0.54346 0.21192,-0.97754 0.21533,-0.43408 0.59472,-0.66992 0.38281,-0.23584 0.87158,-0.23584 0.75538,0 1.22022,0.52295 0.46826,0.52295 0.46826,1.39111 v 0.0444 q 0,0.54004 -0.2085,0.9707 -0.20507,0.42725 -0.5913,0.6665 -0.38282,0.23926 -0.88184,0.23926 -0.75195,0 -1.22021,-0.52295 -0.46485,-0.52295 -0.46485,-1.38427 z m 0.63574,0.0752 q 0,0.61523 0.2837,0.98779 0.2871,0.37256 0.76562,0.37256 0.48193,0 0.76563,-0.37598 0.28369,-0.37939 0.28369,-1.05957 0,-0.6084 -0.29053,-0.98437 -0.28711,-0.3794 -0.76563,-0.3794 -0.46826,0 -0.75537,0.37256 -0.28711,0.37256 -0.28711,1.06641 z" | |||||
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:7px;font-family:Roboto;-inkscape-font-specification:'Roboto, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.75px" | |||||
id="path1038" | |||||
inkscape:connector-curvature="0" /> | |||||
<path | |||||
d="m 669.98059,-397.05899 q 0,-0.85107 0.40332,-1.36719 0.40332,-0.51953 1.05615,-0.51953 0.64942,0 1.02881,0.44434 v -1.92774 h 0.63233 v 5.25 h -0.58106 l -0.0308,-0.39648 q -0.37939,0.46484 -1.05615,0.46484 -0.64258,0 -1.04932,-0.52637 -0.40332,-0.52636 -0.40332,-1.37402 z m 0.63233,0.0718 q 0,0.6289 0.25976,0.98437 0.25977,0.35547 0.71777,0.35547 0.60157,0 0.87842,-0.54004 v -1.69873 q -0.28369,-0.52295 -0.87158,-0.52295 -0.46484,0 -0.72461,0.35889 -0.25976,0.35889 -0.25976,1.06299 z" | |||||
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:7px;font-family:Roboto;-inkscape-font-specification:'Roboto, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.75px" | |||||
id="path1040" | |||||
inkscape:connector-curvature="0" /> | |||||
<path | |||||
d="m 675.62024,-395.11075 q -0.75195,0 -1.22363,-0.49219 -0.47168,-0.4956 -0.47168,-1.32275 v -0.11621 q 0,-0.55029 0.20849,-0.98096 0.21192,-0.43408 0.58789,-0.67676 0.3794,-0.24609 0.82032,-0.24609 0.72119,0 1.12109,0.4751 0.3999,0.4751 0.3999,1.36035 v 0.26318 h -2.50537 q 0.0137,0.54688 0.31787,0.88526 0.30762,0.33496 0.7793,0.33496 0.33496,0 0.56738,-0.13672 0.23242,-0.13672 0.40674,-0.36231 l 0.38623,0.30079 q -0.46484,0.71435 -1.39453,0.71435 z m -0.0786,-3.31543 q -0.38282,0 -0.64258,0.28028 -0.25977,0.27685 -0.32129,0.77929 h 1.85254 v -0.0479 q -0.0273,-0.48193 -0.25977,-0.74512 -0.23242,-0.2666 -0.6289,-0.2666 z" | |||||
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:7px;font-family:Roboto;-inkscape-font-specification:'Roboto, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.75px" | |||||
id="path1042" | |||||
inkscape:connector-curvature="0" /> | |||||
</g> | |||||
<g | |||||
aria-label="R mod" | |||||
transform="scale(1,-1)" | |||||
inkscape:transform-center-x="18.016852" | |||||
inkscape:transform-center-y="-3.7930216" | |||||
style="font-style:normal;font-weight:normal;font-size:9px;line-height:125%;font-family:Sans;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.75px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" | |||||
id="text149"> | |||||
<path | |||||
d="m 631.46393,-363.90469 h -1.00195 v 1.72558 h -0.56543 v -4.26562 h 1.4121 q 0.72071,0 1.10743,0.32812 0.38965,0.32813 0.38965,0.95508 0,0.39844 -0.2168,0.69434 -0.21387,0.29589 -0.59766,0.44238 l 1.00196,1.81055 v 0.0352 h -0.60352 z m -1.00195,-0.45996 h 0.86425 q 0.41895,0 0.66504,-0.2168 0.24903,-0.2168 0.24903,-0.58008 0,-0.39551 -0.23731,-0.60644 -0.23437,-0.21094 -0.67969,-0.21387 h -0.86132 z" | |||||
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:6px;font-family:Roboto;-inkscape-font-specification:'Roboto, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.75px" | |||||
id="path1027" | |||||
inkscape:connector-curvature="0" /> | |||||
<path | |||||
d="m 635.50397,-365.34903 0.0147,0.35156 q 0.34863,-0.41015 0.94043,-0.41015 0.66503,0 0.90527,0.50976 0.1582,-0.22851 0.41016,-0.36914 0.25488,-0.14062 0.60058,-0.14062 1.04297,0 1.06055,1.10449 v 2.12402 h -0.54199 v -2.09179 q 0,-0.33985 -0.15528,-0.50684 -0.15527,-0.16992 -0.52148,-0.16992 -0.30176,0 -0.50098,0.18164 -0.19922,0.17871 -0.23144,0.4834 v 2.10351 h -0.54493 v -2.07715 q 0,-0.6914 -0.67675,-0.6914 -0.53321,0 -0.7295,0.4541 v 2.31445 h -0.54199 v -3.16992 z" | |||||
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:6px;font-family:Roboto;-inkscape-font-specification:'Roboto, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.75px" | |||||
id="path1029" | |||||
inkscape:connector-curvature="0" /> | |||||
<path | |||||
d="m 640.11237,-363.79337 q 0,-0.46582 0.18164,-0.83789 0.18457,-0.37207 0.50976,-0.57421 0.32813,-0.20215 0.74707,-0.20215 0.64746,0 1.0459,0.44824 0.40137,0.44824 0.40137,1.19238 v 0.0381 q 0,0.46289 -0.17871,0.83203 -0.17578,0.36621 -0.50684,0.57129 -0.32812,0.20508 -0.75586,0.20508 -0.64453,0 -1.0459,-0.44825 -0.39843,-0.44824 -0.39843,-1.18652 z m 0.54492,0.0645 q 0,0.52734 0.24316,0.84668 0.2461,0.31933 0.65625,0.31933 0.41309,0 0.65625,-0.32226 0.24317,-0.3252 0.24317,-0.90821 0,-0.52148 -0.24903,-0.84375 -0.24609,-0.32519 -0.65625,-0.32519 -0.40136,0 -0.64746,0.31934 -0.24609,0.31933 -0.24609,0.91406 z" | |||||
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:6px;font-family:Roboto;-inkscape-font-specification:'Roboto, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.75px" | |||||
id="path1031" | |||||
inkscape:connector-curvature="0" /> | |||||
<path | |||||
d="m 643.54596,-363.79044 q 0,-0.72949 0.3457,-1.17187 0.34571,-0.44531 0.90528,-0.44531 0.55664,0 0.88183,0.38086 v -1.65235 h 0.54199 v 4.5 h -0.49804 l -0.0264,-0.33984 q -0.3252,0.39844 -0.90527,0.39844 -0.55078,0 -0.89942,-0.45118 -0.3457,-0.45117 -0.3457,-1.17773 z m 0.54199,0.0615 q 0,0.53906 0.22266,0.84375 0.22265,0.30469 0.61523,0.30469 0.51563,0 0.75293,-0.4629 v -1.45605 q -0.24316,-0.44824 -0.74707,-0.44824 -0.39844,0 -0.62109,0.30761 -0.22266,0.30762 -0.22266,0.91114 z" | |||||
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:6px;font-family:Roboto;-inkscape-font-specification:'Roboto, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.75px" | |||||
id="path1033" | |||||
inkscape:connector-curvature="0" /> | |||||
</g> | |||||
<g | |||||
aria-label="T mod" | |||||
transform="scale(1,-1)" | |||||
inkscape:transform-center-x="18.016852" | |||||
inkscape:transform-center-y="-3.7930216" | |||||
style="font-style:normal;font-weight:normal;font-size:9px;line-height:125%;font-family:Sans;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.75px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" | |||||
id="text153"> | |||||
<path | |||||
d="m 664.49475,-365.98184 h -1.37109 v 3.80273 h -0.55957 v -3.80273 h -1.36817 v -0.46289 h 3.29883 z" | |||||
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:6px;font-family:Roboto;-inkscape-font-specification:'Roboto, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.75px" | |||||
id="path1018" | |||||
inkscape:connector-curvature="0" /> | |||||
<path | |||||
d="m 666.92932,-365.34903 0.0147,0.35156 q 0.34863,-0.41015 0.94043,-0.41015 0.66504,0 0.90527,0.50976 0.15821,-0.22851 0.41016,-0.36914 0.25488,-0.14062 0.60059,-0.14062 1.04296,0 1.06054,1.10449 v 2.12402 h -0.54199 v -2.09179 q 0,-0.33985 -0.15527,-0.50684 -0.15528,-0.16992 -0.52149,-0.16992 -0.30176,0 -0.50097,0.18164 -0.19922,0.17871 -0.23145,0.4834 v 2.10351 h -0.54492 v -2.07715 q 0,-0.6914 -0.67676,-0.6914 -0.5332,0 -0.72949,0.4541 v 2.31445 h -0.54199 v -3.16992 z" | |||||
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:6px;font-family:Roboto;-inkscape-font-specification:'Roboto, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.75px" | |||||
id="path1020" | |||||
inkscape:connector-curvature="0" /> | |||||
<path | |||||
d="m 671.53772,-363.79337 q 0,-0.46582 0.18164,-0.83789 0.18457,-0.37207 0.50977,-0.57421 0.32812,-0.20215 0.74707,-0.20215 0.64746,0 1.04589,0.44824 0.40137,0.44824 0.40137,1.19238 v 0.0381 q 0,0.46289 -0.17871,0.83203 -0.17578,0.36621 -0.50683,0.57129 -0.32813,0.20508 -0.75586,0.20508 -0.64454,0 -1.0459,-0.44825 -0.39844,-0.44824 -0.39844,-1.18652 z m 0.54492,0.0645 q 0,0.52734 0.24317,0.84668 0.24609,0.31933 0.65625,0.31933 0.41308,0 0.65625,-0.32226 0.24316,-0.3252 0.24316,-0.90821 0,-0.52148 -0.24902,-0.84375 -0.2461,-0.32519 -0.65625,-0.32519 -0.40137,0 -0.64746,0.31934 -0.2461,0.31933 -0.2461,0.91406 z" | |||||
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:6px;font-family:Roboto;-inkscape-font-specification:'Roboto, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.75px" | |||||
id="path1022" | |||||
inkscape:connector-curvature="0" /> | |||||
<path | |||||
d="m 674.97131,-363.79044 q 0,-0.72949 0.34571,-1.17187 0.3457,-0.44531 0.90527,-0.44531 0.55664,0 0.88184,0.38086 v -1.65235 h 0.54199 v 4.5 h -0.49805 l -0.0264,-0.33984 q -0.32519,0.39844 -0.90527,0.39844 -0.55078,0 -0.89941,-0.45118 -0.34571,-0.45117 -0.34571,-1.17773 z m 0.542,0.0615 q 0,0.53906 0.22265,0.84375 0.22266,0.30469 0.61524,0.30469 0.51562,0 0.75293,-0.4629 v -1.45605 q -0.24317,-0.44824 -0.74707,-0.44824 -0.39844,0 -0.6211,0.30761 -0.22265,0.30762 -0.22265,0.91114 z" | |||||
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:6px;font-family:Roboto;-inkscape-font-specification:'Roboto, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.75px" | |||||
id="path1024" | |||||
inkscape:connector-curvature="0" /> | |||||
</g> | |||||
<rect | |||||
style="opacity:1;fill:#000000;fill-opacity:1;stroke:#000000;stroke-width:0.81017965;stroke-linecap:square;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:0.98999999" | |||||
id="rect211" | |||||
width="64.625" | |||||
height="28.257458" | |||||
x="621.49683" | |||||
y="-288.61642" | |||||
transform="scale(1,-1)" | |||||
ry="5.8876987" /> | |||||
<g | |||||
aria-label="CV" | |||||
transform="matrix(1,0,0,-1,0,-4.5)" | |||||
inkscape:transform-center-x="18.016852" | |||||
inkscape:transform-center-y="-3.7930216" | |||||
style="font-style:normal;font-weight:normal;font-size:9px;line-height:125%;font-family:Sans;letter-spacing:0px;word-spacing:0px;fill:#e6e6e6;fill-opacity:1;stroke:none;stroke-width:0.75px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" | |||||
id="text141-0"> | |||||
<path | |||||
d="m 631.4151,-268.56247 q -0.0923,0.78955 -0.58447,1.22022 -0.48877,0.42724 -1.30225,0.42724 -0.88183,0 -1.41504,-0.63232 -0.52978,-0.63233 -0.52978,-1.6919 v -0.47851 q 0,-0.69385 0.24609,-1.22022 0.24951,-0.52636 0.7041,-0.80664 0.45459,-0.28369 1.05274,-0.28369 0.79297,0 1.27148,0.44434 0.47852,0.44091 0.55713,1.22363 h -0.65967 q -0.0855,-0.59473 -0.37256,-0.86133 -0.28369,-0.2666 -0.79638,-0.2666 -0.62891,0 -0.9878,0.46484 -0.35546,0.46485 -0.35546,1.32276 v 0.48193 q 0,0.81006 0.33837,1.28857 0.33838,0.47852 0.94678,0.47852 0.54688,0 0.8374,-0.24609 0.29395,-0.24952 0.38965,-0.86475 z" | |||||
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:7px;font-family:Roboto;-inkscape-font-specification:'Roboto, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#e6e6e6;stroke-width:0.75px" | |||||
id="path1130" | |||||
inkscape:connector-curvature="0" /> | |||||
<path | |||||
d="m 633.95465,-267.85495 1.42188,-4.10498 h 0.71777 l -1.8457,4.97656 h -0.58106 l -1.84228,-4.97656 h 0.71435 z" | |||||
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:7px;font-family:Roboto;-inkscape-font-specification:'Roboto, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#e6e6e6;stroke-width:0.75px" | |||||
id="path1132" | |||||
inkscape:connector-curvature="0" /> | |||||
</g> | |||||
<g | |||||
aria-label="EOC" | |||||
transform="matrix(1,0,0,-1,0,-4.5)" | |||||
inkscape:transform-center-x="18.016852" | |||||
inkscape:transform-center-y="-3.7930216" | |||||
style="font-style:normal;font-weight:normal;font-size:9px;line-height:125%;font-family:Sans;letter-spacing:0px;word-spacing:0px;fill:#e6e6e6;fill-opacity:1;stroke:none;stroke-width:0.75px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" | |||||
id="text205"> | |||||
<path | |||||
d="m 650.06744,-269.28366 h -2.15673 v 1.76367 h 2.50537 v 0.53662 h -3.16162 v -4.97656 h 3.12744 v 0.54004 h -2.47119 v 1.59961 h 2.15673 z" | |||||
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:7px;font-family:Roboto;-inkscape-font-specification:'Roboto, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#e6e6e6;stroke-width:0.75px" | |||||
id="path1123" | |||||
inkscape:connector-curvature="0" /> | |||||
<path | |||||
d="m 655.0611,-269.311 q 0,0.73144 -0.2461,1.27832 -0.24609,0.54345 -0.69726,0.83056 -0.45118,0.28711 -1.05274,0.28711 -0.58789,0 -1.04248,-0.28711 -0.45459,-0.29053 -0.70752,-0.82373 -0.24951,-0.53662 -0.25635,-1.24072 v -0.35889 q 0,-0.71777 0.24952,-1.26806 0.24951,-0.5503 0.7041,-0.84082 0.45801,-0.29395 1.0459,-0.29395 0.59814,0 1.05273,0.29053 0.45801,0.28711 0.7041,0.8374 0.2461,0.54687 0.2461,1.2749 z m -0.65284,-0.32129 q 0,-0.88526 -0.35546,-1.35694 -0.35547,-0.47509 -0.99463,-0.47509 -0.62207,0 -0.98096,0.47509 -0.35547,0.47168 -0.36572,1.3125 v 0.36573 q 0,0.85791 0.35888,1.35009 0.36231,0.48877 0.99463,0.48877 0.63574,0 0.98438,-0.46142 0.34863,-0.46485 0.35888,-1.32959 z" | |||||
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:7px;font-family:Roboto;-inkscape-font-specification:'Roboto, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#e6e6e6;stroke-width:0.75px" | |||||
id="path1125" | |||||
inkscape:connector-curvature="0" /> | |||||
<path | |||||
d="m 659.70612,-268.56247 q -0.0923,0.78955 -0.58448,1.22022 -0.48877,0.42724 -1.30224,0.42724 -0.88184,0 -1.41504,-0.63232 -0.52979,-0.63233 -0.52979,-1.6919 v -0.47851 q 0,-0.69385 0.2461,-1.22022 0.24951,-0.52636 0.7041,-0.80664 0.45459,-0.28369 1.05273,-0.28369 0.79297,0 1.27149,0.44434 0.47851,0.44091 0.55713,1.22363 h -0.65967 q -0.0855,-0.59473 -0.37256,-0.86133 -0.28369,-0.2666 -0.79639,-0.2666 -0.6289,0 -0.98779,0.46484 -0.35547,0.46485 -0.35547,1.32276 v 0.48193 q 0,0.81006 0.33838,1.28857 0.33838,0.47852 0.94678,0.47852 0.54687,0 0.8374,-0.24609 0.29394,-0.24952 0.38965,-0.86475 z" | |||||
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:7px;font-family:Roboto;-inkscape-font-specification:'Roboto, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#e6e6e6;stroke-width:0.75px" | |||||
id="path1127" | |||||
inkscape:connector-curvature="0" /> | |||||
</g> | |||||
<g | |||||
aria-label="Gate" | |||||
transform="matrix(1,0,0,-1,0,-4.5)" | |||||
inkscape:transform-center-x="18.016852" | |||||
inkscape:transform-center-y="-3.7930216" | |||||
style="font-style:normal;font-weight:normal;font-size:9px;line-height:125%;font-family:Sans;letter-spacing:0px;word-spacing:0px;fill:#e6e6e6;fill-opacity:1;stroke:none;stroke-width:0.75px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" | |||||
id="text209"> | |||||
<path | |||||
d="m 670.42877,-267.6362 q -0.25293,0.3623 -0.70752,0.54346 -0.45117,0.17773 -1.05273,0.17773 -0.6084,0 -1.08008,-0.28369 -0.47168,-0.28711 -0.73145,-0.81348 -0.25634,-0.52636 -0.26318,-1.22021 v -0.43408 q 0,-1.12452 0.52295,-1.74317 0.52637,-0.61865 1.47656,-0.61865 0.7793,0 1.2544,0.3999 0.47509,0.39649 0.58105,1.12793 h -0.65625 q -0.18457,-0.98779 -1.17578,-0.98779 -0.65967,0 -1.00146,0.46484 -0.33838,0.46143 -0.3418,1.33985 v 0.40674 q 0,0.8374 0.38281,1.333 0.38281,0.49219 1.03565,0.49219 0.36914,0 0.64599,-0.082 0.27686,-0.082 0.45801,-0.27686 v -1.11767 h -1.15186 v -0.53321 h 1.80469 z" | |||||
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:7px;font-family:Roboto;-inkscape-font-specification:'Roboto, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#e6e6e6;stroke-width:0.75px" | |||||
id="path1114" | |||||
inkscape:connector-curvature="0" /> | |||||
<path | |||||
d="m 673.71002,-266.98337 q -0.0547,-0.10937 -0.0889,-0.38965 -0.44091,0.45801 -1.05273,0.45801 -0.54687,0 -0.89893,-0.30762 -0.34863,-0.31103 -0.34863,-0.78613 0,-0.57764 0.4375,-0.89551 0.44092,-0.32129 1.23731,-0.32129 h 0.61523 v -0.29052 q 0,-0.33155 -0.19824,-0.52637 -0.19824,-0.19824 -0.58447,-0.19824 -0.33838,0 -0.56739,0.1709 -0.229,0.17089 -0.229,0.41357 h -0.63574 q 0,-0.27685 0.19482,-0.5332 0.19824,-0.25977 0.5332,-0.41016 0.33838,-0.15039 0.7417,-0.15039 0.63916,0 1.00147,0.32129 0.3623,0.31787 0.37598,0.87842 v 1.70215 q 0,0.50927 0.12988,0.81005 v 0.0547 z m -1.04931,-0.48193 q 0.29736,0 0.56396,-0.15381 0.2666,-0.15381 0.38623,-0.3999 v -0.75879 h -0.4956 q -1.16211,0 -1.16211,0.68017 0,0.29737 0.19824,0.46485 0.19824,0.16748 0.50928,0.16748 z" | |||||
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:7px;font-family:Roboto;-inkscape-font-specification:'Roboto, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#e6e6e6;stroke-width:0.75px" | |||||
id="path1116" | |||||
inkscape:connector-curvature="0" /> | |||||
<path | |||||
d="m 676.09918,-271.57712 v 0.89551 h 0.69043 v 0.48877 h -0.69043 v 2.29346 q 0,0.22216 0.0923,0.33496 0.0923,0.10937 0.31445,0.10937 0.10938,0 0.30078,-0.041 v 0.51269 q -0.24951,0.0684 -0.48535,0.0684 -0.42383,0 -0.63916,-0.25635 -0.21533,-0.25634 -0.21533,-0.72802 v -2.29346 h -0.67334 v -0.48877 h 0.67334 v -0.89551 z" | |||||
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:7px;font-family:Roboto;-inkscape-font-specification:'Roboto, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#e6e6e6;stroke-width:0.75px" | |||||
id="path1118" | |||||
inkscape:connector-curvature="0" /> | |||||
<path | |||||
d="m 679.05914,-266.91501 q -0.75195,0 -1.22363,-0.49219 -0.47168,-0.4956 -0.47168,-1.32275 v -0.11621 q 0,-0.55029 0.2085,-0.98096 0.21191,-0.43408 0.58789,-0.67676 0.37939,-0.24609 0.82031,-0.24609 0.72119,0 1.12109,0.4751 0.39991,0.4751 0.39991,1.36035 v 0.26318 h -2.50538 q 0.0137,0.54688 0.31788,0.88526 0.30761,0.33496 0.77929,0.33496 0.33496,0 0.56739,-0.13672 0.23242,-0.13672 0.40673,-0.36231 l 0.38623,0.30079 q -0.46484,0.71435 -1.39453,0.71435 z m -0.0786,-3.31543 q -0.38281,0 -0.64258,0.28028 -0.25976,0.27685 -0.32129,0.77929 h 1.85254 v -0.0479 q -0.0273,-0.48193 -0.25976,-0.74512 -0.23243,-0.2666 -0.62891,-0.2666 z" | |||||
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:7px;font-family:Roboto;-inkscape-font-specification:'Roboto, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#e6e6e6;stroke-width:0.75px" | |||||
id="path1120" | |||||
inkscape:connector-curvature="0" /> | |||||
</g> | |||||
<g | |||||
aria-label="Trigger" | |||||
transform="scale(1,-1)" | |||||
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:7px;line-height:125%;font-family:Roboto;-inkscape-font-specification:'Roboto, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.75px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" | |||||
id="text1137"> | |||||
<path | |||||
d="m 624.96283,-317.64337 h -1.59961 v 4.43652 h -0.65283 v -4.43652 h -1.59619 v -0.54004 h 3.84863 z" | |||||
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:7px;font-family:Roboto;-inkscape-font-specification:'Roboto, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.75px" | |||||
id="path1154" | |||||
inkscape:connector-curvature="0" /> | |||||
<path | |||||
d="m 627.13666,-316.33771 q -0.14356,-0.0239 -0.31104,-0.0239 -0.62207,0 -0.84424,0.52978 v 2.625 h -0.63232 v -3.69824 h 0.61523 l 0.0103,0.42725 q 0.31103,-0.49561 0.88183,-0.49561 0.18457,0 0.28028,0.0479 z" | |||||
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:7px;font-family:Roboto;-inkscape-font-specification:'Roboto, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.75px" | |||||
id="path1156" | |||||
inkscape:connector-curvature="0" /> | |||||
<path | |||||
d="m 628.40131,-313.20685 h -0.63233 v -3.69824 h 0.63233 z m -0.6836,-4.6792 q 0,-0.15381 0.0923,-0.25976 0.0957,-0.10596 0.28027,-0.10596 0.18457,0 0.28027,0.10596 0.0957,0.10595 0.0957,0.25976 0,0.15381 -0.0957,0.25635 -0.0957,0.10254 -0.28027,0.10254 -0.18457,0 -0.28027,-0.10254 -0.0923,-0.10254 -0.0923,-0.25635 z" | |||||
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:7px;font-family:Roboto;-inkscape-font-specification:'Roboto, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.75px" | |||||
id="path1158" | |||||
inkscape:connector-curvature="0" /> | |||||
<path | |||||
d="m 629.25922,-315.08673 q 0,-0.86475 0.3999,-1.37402 0.3999,-0.5127 1.05957,-0.5127 0.67676,0 1.05615,0.47852 l 0.0308,-0.41016 h 0.57764 v 3.60937 q 0,0.71778 -0.42725,1.13135 -0.42382,0.41358 -1.1416,0.41358 -0.3999,0 -0.78271,-0.1709 -0.38282,-0.1709 -0.58448,-0.46826 l 0.32813,-0.3794 q 0.40674,0.50244 0.99463,0.50244 0.46142,0 0.71777,-0.25976 0.25977,-0.25977 0.25977,-0.73145 v -0.31787 q -0.3794,0.4375 -1.03565,0.4375 -0.64941,0 -1.05273,-0.52295 -0.3999,-0.52295 -0.3999,-1.42529 z m 0.63574,0.0718 q 0,0.62548 0.25635,0.98437 0.25634,0.35547 0.71777,0.35547 0.59814,0 0.87842,-0.54346 v -1.68847 q -0.29053,-0.52979 -0.87158,-0.52979 -0.46143,0 -0.7212,0.35889 -0.25976,0.35888 -0.25976,1.06299 z" | |||||
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:7px;font-family:Roboto;-inkscape-font-specification:'Roboto, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.75px" | |||||
id="path1160" | |||||
inkscape:connector-curvature="0" /> | |||||
<path | |||||
d="m 633.18304,-315.08673 q 0,-0.86475 0.39991,-1.37402 0.3999,-0.5127 1.05957,-0.5127 0.67675,0 1.05615,0.47852 l 0.0308,-0.41016 h 0.57764 v 3.60937 q 0,0.71778 -0.42725,1.13135 -0.42383,0.41358 -1.1416,0.41358 -0.3999,0 -0.78271,-0.1709 -0.38282,-0.1709 -0.58448,-0.46826 l 0.32813,-0.3794 q 0.40674,0.50244 0.99463,0.50244 0.46142,0 0.71777,-0.25976 0.25977,-0.25977 0.25977,-0.73145 v -0.31787 q -0.3794,0.4375 -1.03565,0.4375 -0.64941,0 -1.05273,-0.52295 -0.39991,-0.52295 -0.39991,-1.42529 z m 0.63575,0.0718 q 0,0.62548 0.25634,0.98437 0.25635,0.35547 0.71778,0.35547 0.59814,0 0.87842,-0.54346 v -1.68847 q -0.29053,-0.52979 -0.87159,-0.52979 -0.46142,0 -0.72119,0.35889 -0.25976,0.35888 -0.25976,1.06299 z" | |||||
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:7px;font-family:Roboto;-inkscape-font-specification:'Roboto, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.75px" | |||||
id="path1162" | |||||
inkscape:connector-curvature="0" /> | |||||
<path | |||||
d="m 638.79193,-313.13849 q -0.75195,0 -1.22363,-0.49219 -0.47168,-0.4956 -0.47168,-1.32275 v -0.11621 q 0,-0.55029 0.20849,-0.98096 0.21192,-0.43408 0.5879,-0.67676 0.37939,-0.24609 0.82031,-0.24609 0.72119,0 1.12109,0.4751 0.3999,0.4751 0.3999,1.36035 v 0.26318 h -2.50537 q 0.0137,0.54688 0.31787,0.88526 0.30762,0.33496 0.7793,0.33496 0.33496,0 0.56738,-0.13672 0.23243,-0.13672 0.40674,-0.36231 l 0.38623,0.30079 q -0.46484,0.71435 -1.39453,0.71435 z m -0.0786,-3.31543 q -0.38281,0 -0.64258,0.28027 -0.25977,0.27686 -0.32129,0.7793 h 1.85254 v -0.0479 q -0.0273,-0.48193 -0.25977,-0.74512 -0.23242,-0.2666 -0.6289,-0.2666 z" | |||||
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:7px;font-family:Roboto;-inkscape-font-specification:'Roboto, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.75px" | |||||
id="path1164" | |||||
inkscape:connector-curvature="0" /> | |||||
<path | |||||
d="m 642.74994,-316.33771 q -0.14356,-0.0239 -0.31104,-0.0239 -0.62207,0 -0.84423,0.52978 v 2.625 h -0.63233 v -3.69824 h 0.61524 l 0.0103,0.42725 q 0.31103,-0.49561 0.88184,-0.49561 0.18457,0 0.28027,0.0479 z" | |||||
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:7px;font-family:Roboto;-inkscape-font-specification:'Roboto, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.75px" | |||||
id="path1166" | |||||
inkscape:connector-curvature="0" /> | |||||
</g> | |||||
<g | |||||
aria-label="Clock" | |||||
transform="scale(1,-1)" | |||||
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:7px;line-height:125%;font-family:Roboto;-inkscape-font-specification:'Roboto, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.75px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" | |||||
id="text1141"> | |||||
<path | |||||
d="m 668.685,-314.78595 q -0.0923,0.78955 -0.58448,1.22022 -0.48876,0.42724 -1.30224,0.42724 -0.88184,0 -1.41504,-0.63232 -0.52979,-0.63233 -0.52979,-1.6919 v -0.47851 q 0,-0.69385 0.2461,-1.22022 0.24951,-0.52637 0.7041,-0.80664 0.45459,-0.28369 1.05273,-0.28369 0.79297,0 1.27149,0.44434 0.47851,0.44091 0.55713,1.22363 h -0.65967 q -0.0855,-0.59473 -0.37256,-0.86133 -0.28369,-0.2666 -0.79639,-0.2666 -0.6289,0 -0.98779,0.46484 -0.35547,0.46485 -0.35547,1.32276 v 0.48193 q 0,0.81006 0.33838,1.28857 0.33838,0.47852 0.94678,0.47852 0.54687,0 0.8374,-0.24609 0.29395,-0.24952 0.38965,-0.86475 z" | |||||
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:7px;font-family:Roboto;-inkscape-font-specification:'Roboto, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.75px" | |||||
id="path1143" | |||||
inkscape:connector-curvature="0" /> | |||||
<path | |||||
d="m 670.16498,-313.20685 h -0.63233 v -5.25 h 0.63233 z" | |||||
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:7px;font-family:Roboto;-inkscape-font-specification:'Roboto, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.75px" | |||||
id="path1145" | |||||
inkscape:connector-curvature="0" /> | |||||
<path | |||||
d="m 671.0058,-315.09015 q 0,-0.54346 0.21191,-0.97754 0.21533,-0.43408 0.59473,-0.66992 0.38281,-0.23584 0.87158,-0.23584 0.75537,0 1.22022,0.52295 0.46826,0.52295 0.46826,1.39111 v 0.0444 q 0,0.54004 -0.2085,0.9707 -0.20508,0.42725 -0.59131,0.6665 -0.38281,0.23926 -0.88183,0.23926 -0.75196,0 -1.22022,-0.52295 -0.46484,-0.52295 -0.46484,-1.38428 z m 0.63574,0.0752 q 0,0.61523 0.28369,0.98779 0.28711,0.37256 0.76563,0.37256 0.48193,0 0.76562,-0.37598 0.28369,-0.37939 0.28369,-1.05957 0,-0.6084 -0.29052,-0.98437 -0.28711,-0.3794 -0.76563,-0.3794 -0.46826,0 -0.75537,0.37256 -0.28711,0.37256 -0.28711,1.06641 z" | |||||
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:7px;font-family:Roboto;-inkscape-font-specification:'Roboto, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.75px" | |||||
id="path1147" | |||||
inkscape:connector-curvature="0" /> | |||||
<path | |||||
d="m 676.64886,-313.6546 q 0.33838,0 0.59131,-0.20508 0.25293,-0.20508 0.28028,-0.5127 h 0.59814 q -0.0171,0.31788 -0.21875,0.60498 -0.20166,0.28711 -0.54004,0.45801 -0.33496,0.1709 -0.71094,0.1709 -0.75537,0 -1.20312,-0.50244 -0.44434,-0.50586 -0.44434,-1.38086 v -0.10596 q 0,-0.54004 0.19825,-0.96045 0.19824,-0.42041 0.56738,-0.65283 0.37256,-0.23242 0.87842,-0.23242 0.62207,0 1.03222,0.37256 0.41358,0.37256 0.44092,0.96728 h -0.59814 q -0.0273,-0.35888 -0.27344,-0.58789 -0.24268,-0.23242 -0.60156,-0.23242 -0.48194,0 -0.74854,0.34863 -0.26318,0.34522 -0.26318,1.00147 v 0.11963 q 0,0.63916 0.26318,0.98437 0.26319,0.34522 0.75195,0.34522 z" | |||||
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:7px;font-family:Roboto;-inkscape-font-specification:'Roboto, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.75px" | |||||
id="path1149" | |||||
inkscape:connector-curvature="0" /> | |||||
<path | |||||
d="m 679.86176,-314.91925 -0.39649,0.41357 v 1.29883 h -0.63232 v -5.25 h 0.63232 v 3.17529 l 0.33838,-0.40673 1.15186,-1.2168 h 0.76904 l -1.43897,1.54492 1.60645,2.15332 h -0.7417 z" | |||||
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:7px;font-family:Roboto;-inkscape-font-specification:'Roboto, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.75px" | |||||
id="path1151" | |||||
inkscape:connector-curvature="0" /> | |||||
</g> | |||||
</g> | |||||
</svg> |
@@ -1,154 +0,0 @@ | |||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?> | |||||
<svg | |||||
xmlns:dc="http://purl.org/dc/elements/1.1/" | |||||
xmlns:cc="http://creativecommons.org/ns#" | |||||
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" | |||||
xmlns:svg="http://www.w3.org/2000/svg" | |||||
xmlns="http://www.w3.org/2000/svg" | |||||
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" | |||||
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" | |||||
id="svg8" | |||||
width="120" | |||||
height="380" | |||||
viewBox="0 0 120 380.00001" | |||||
version="1.1" | |||||
sodipodi:docname="Dice.svg" | |||||
inkscape:version="0.92.2 5c3e80d, 2017-08-06"> | |||||
<metadata | |||||
id="metadata29"> | |||||
<rdf:RDF> | |||||
<cc:Work | |||||
rdf:about=""> | |||||
<dc:format>image/svg+xml</dc:format> | |||||
<dc:type | |||||
rdf:resource="http://purl.org/dc/dcmitype/StillImage" /> | |||||
<dc:title>BlankPanel1</dc:title> | |||||
</cc:Work> | |||||
</rdf:RDF> | |||||
</metadata> | |||||
<defs | |||||
id="defs27"> | |||||
<clipPath | |||||
id="clipPath837" | |||||
clipPathUnits="userSpaceOnUse"> | |||||
<path | |||||
inkscape:connector-curvature="0" | |||||
id="path835" | |||||
d="M 0,842 H 595 V 0 H 0 Z" /> | |||||
</clipPath> | |||||
<clipPath | |||||
id="clipPath13703" | |||||
clipPathUnits="userSpaceOnUse"> | |||||
<path | |||||
inkscape:connector-curvature="0" | |||||
id="path13701" | |||||
d="M 0,1020.448 H 935.433 V 0 H 0 Z" /> | |||||
</clipPath> | |||||
</defs> | |||||
<sodipodi:namedview | |||||
pagecolor="#ffffff" | |||||
bordercolor="#666666" | |||||
borderopacity="1" | |||||
objecttolerance="10" | |||||
gridtolerance="10" | |||||
guidetolerance="10" | |||||
inkscape:pageopacity="0" | |||||
inkscape:pageshadow="2" | |||||
inkscape:window-width="1898" | |||||
inkscape:window-height="1026" | |||||
id="namedview25" | |||||
showgrid="false" | |||||
inkscape:zoom="2.1091365" | |||||
inkscape:cx="-55.855674" | |||||
inkscape:cy="205.69915" | |||||
inkscape:window-x="10" | |||||
inkscape:window-y="42" | |||||
inkscape:window-maximized="0" | |||||
inkscape:current-layer="g827" | |||||
showguides="true" | |||||
inkscape:guide-bbox="true" | |||||
inkscape:measure-start="44.8906,373.832" | |||||
inkscape:measure-end="44.8906,362.457" /> | |||||
<title | |||||
id="title2">BlankPanel1</title> | |||||
<g | |||||
transform="matrix(1.3333333,0,0,-1.3333333,-826.22953,717.78285)" | |||||
inkscape:label="1" | |||||
id="g827" | |||||
style="opacity:1"> | |||||
<g | |||||
id="g831" | |||||
transform="matrix(1.3100849,0,0,0.99991813,-191.38111,0.0440701)"> | |||||
<g | |||||
transform="translate(619.08227,-482.18084)" | |||||
inkscape:label="02" | |||||
id="g13693"> | |||||
<path | |||||
inkscape:connector-curvature="0" | |||||
id="path13695" | |||||
style="fill:#091942;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.22436777" | |||||
d="M 0,735.3352 H 68.666843 V 1020.448 H 0 Z" /> | |||||
<path | |||||
style="opacity:1;fill:#e6e6e6;fill-opacity:1;stroke:#000000;stroke-width:0.47412768;stroke-linecap:square;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:0.98999999" | |||||
d="M -0.45300759,190.33385 V 0.445719 H 45.063249 90.579506 V 190.33385 380.22199 H 45.063249 -0.45300759 Z" | |||||
id="path26" | |||||
inkscape:connector-curvature="0" | |||||
transform="matrix(0.75000002,0,0,-0.75000002,0.58989299,1020.518)" /> | |||||
</g> | |||||
</g> | |||||
<g | |||||
inkscape:groupmode="layer" | |||||
id="layer2" | |||||
inkscape:label="Layer 1" | |||||
style="opacity:0" /> | |||||
<g | |||||
aria-label="Burst!" | |||||
transform="scale(1,-1)" | |||||
style="font-style:normal;font-weight:normal;font-size:9px;line-height:125%;font-family:Sans;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.75px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" | |||||
id="text85" /> | |||||
<rect | |||||
style="opacity:1;fill:#000000;fill-opacity:1;stroke:#000000;stroke-width:0.88699555;stroke-linecap:square;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:0.98999999" | |||||
id="rect211" | |||||
width="86.192909" | |||||
height="25.394657" | |||||
x="621.57568" | |||||
y="-282.81534" | |||||
transform="scale(1,-1)" | |||||
ry="5.2912083" /> | |||||
<g | |||||
aria-label="Dice" | |||||
transform="matrix(1,0,0,-1,0,-3.5258394)" | |||||
style="font-style:normal;font-weight:normal;font-size:9px;line-height:125%;font-family:Sans;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.75px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" | |||||
id="text826"> | |||||
<path | |||||
d="m 653.34015,-528.18018 v -8.53125 h 2.625 q 1.125,0 2.00976,0.50977 0.89063,0.50391 1.38868,1.44141 0.49804,0.93164 0.49804,2.12109 v 0.39258 q 0,1.18945 -0.49218,2.11523 -0.48633,0.92578 -1.37696,1.43555 -0.89062,0.50976 -2.00976,0.51562 z m 1.75781,-7.10742 v 5.69531 h 0.84961 q 1.03125,0 1.57617,-0.67382 0.54492,-0.67383 0.55664,-1.92774 v -0.45117 q 0,-1.30078 -0.53906,-1.96875 -0.53906,-0.67383 -1.57617,-0.67383 z" | |||||
style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:12px;font-family:Roboto;-inkscape-font-specification:'Roboto, Bold';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.75px" | |||||
id="path828" | |||||
inkscape:connector-curvature="0" /> | |||||
<path | |||||
d="m 662.82062,-528.18018 h -1.69922 v -6.33984 h 1.69922 z m -1.79883,-7.98046 q 0,-0.38086 0.25195,-0.62696 0.25782,-0.24609 0.69727,-0.24609 0.43359,0 0.6914,0.24609 0.25782,0.2461 0.25782,0.62696 0,0.38671 -0.26367,0.63281 -0.25782,0.24609 -0.68555,0.24609 -0.42774,0 -0.69141,-0.24609 -0.25781,-0.2461 -0.25781,-0.63281 z" | |||||
style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:12px;font-family:Roboto;-inkscape-font-specification:'Roboto, Bold';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.75px" | |||||
id="path830" | |||||
inkscape:connector-curvature="0" /> | |||||
<path | |||||
d="m 666.85773,-529.42822 q 0.46875,0 0.76172,-0.25782 0.29296,-0.25781 0.30468,-0.68554 h 1.58789 q -0.006,0.64453 -0.35156,1.18359 -0.3457,0.5332 -0.94922,0.83203 -0.59765,0.29297 -1.32422,0.29297 -1.35937,0 -2.14453,-0.86133 -0.78515,-0.86718 -0.78515,-2.39062 v -0.11133 q 0,-1.46484 0.77929,-2.33789 0.7793,-0.87305 2.13868,-0.87305 1.18945,0 1.90429,0.67969 0.72071,0.67383 0.73242,1.79883 h -1.58789 q -0.0117,-0.49219 -0.30468,-0.79688 -0.29297,-0.31054 -0.77344,-0.31054 -0.5918,0 -0.89649,0.43359 -0.29882,0.42773 -0.29882,1.39453 v 0.17578 q 0,0.97852 0.29882,1.40625 0.29883,0.42774 0.90821,0.42774 z" | |||||
style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:12px;font-family:Roboto;-inkscape-font-specification:'Roboto, Bold';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.75px" | |||||
id="path832" | |||||
inkscape:connector-curvature="0" /> | |||||
<path | |||||
d="m 673.39679,-528.06299 q -1.39453,0 -2.27344,-0.85547 -0.87304,-0.85547 -0.87304,-2.27929 v -0.16407 q 0,-0.95507 0.36914,-1.70507 0.36914,-0.75586 1.04296,-1.16016 0.67969,-0.41016 1.54688,-0.41016 1.30078,0 2.04492,0.82032 0.75,0.82031 0.75,2.32617 v 0.6914 h -4.03711 q 0.082,0.6211 0.49219,0.9961 0.41602,0.375 1.04883,0.375 0.97851,0 1.52929,-0.70899 l 0.83204,0.93164 q -0.38086,0.53907 -1.03125,0.84375 -0.65039,0.29883 -1.44141,0.29883 z m -0.19336,-5.20312 q -0.50391,0 -0.82031,0.33984 -0.31055,0.33984 -0.39844,0.97266 h 2.35547 v -0.13477 q -0.0117,-0.5625 -0.30469,-0.86719 -0.29297,-0.31054 -0.83203,-0.31054 z" | |||||
style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:12px;font-family:Roboto;-inkscape-font-specification:'Roboto, Bold';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.75px" | |||||
id="path834" | |||||
inkscape:connector-curvature="0" /> | |||||
</g> | |||||
<rect | |||||
ry="5.059772" | |||||
transform="scale(1,-1)" | |||||
y="-342.57288" | |||||
x="621.77124" | |||||
height="56.456612" | |||||
width="85.801796" | |||||
id="rect837" | |||||
style="opacity:1;fill:#808080;fill-opacity:1;stroke:#000000;stroke-width:1.31953263;stroke-linecap:square;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:0.98999999" /> | |||||
</g> | |||||
</svg> |
@@ -1,233 +0,0 @@ | |||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?> | |||||
<!-- Created with Inkscape (http://www.inkscape.org/) --> | |||||
<svg | |||||
xmlns:dc="http://purl.org/dc/elements/1.1/" | |||||
xmlns:cc="http://creativecommons.org/ns#" | |||||
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" | |||||
xmlns:svg="http://www.w3.org/2000/svg" | |||||
xmlns="http://www.w3.org/2000/svg" | |||||
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" | |||||
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" | |||||
width="120" | |||||
height="380" | |||||
viewBox="0 0 31.75 100.54167" | |||||
version="1.1" | |||||
id="svg8" | |||||
inkscape:version="0.92.2 5c3e80d, 2017-08-06" | |||||
sodipodi:docname="Erwin.svg" | |||||
inkscape:export-filename="E:\Users\Martin\Documents\Rack_Source\rack\plugins\ML_modules\res\Quantum.png" | |||||
inkscape:export-xdpi="96" | |||||
inkscape:export-ydpi="96"> | |||||
<defs | |||||
id="defs2"> | |||||
<inkscape:perspective | |||||
sodipodi:type="inkscape:persp3d" | |||||
inkscape:vp_x="0 : 50.270835 : 1" | |||||
inkscape:vp_y="0 : 1000 : 0" | |||||
inkscape:vp_z="31.75 : 50.270835 : 1" | |||||
inkscape:persp3d-origin="15.875 : 33.51389 : 1" | |||||
id="perspective4742" /> | |||||
</defs> | |||||
<sodipodi:namedview | |||||
id="base" | |||||
pagecolor="#ffffff" | |||||
bordercolor="#666666" | |||||
borderopacity="1.0" | |||||
inkscape:pageopacity="0.0" | |||||
inkscape:pageshadow="2" | |||||
inkscape:zoom="4" | |||||
inkscape:cx="88.570139" | |||||
inkscape:cy="278.72416" | |||||
inkscape:document-units="px" | |||||
inkscape:current-layer="layer1" | |||||
showgrid="true" | |||||
units="px" | |||||
fit-margin-top="0" | |||||
fit-margin-left="0" | |||||
fit-margin-right="0" | |||||
fit-margin-bottom="0" | |||||
showguides="true" | |||||
inkscape:snap-to-guides="false" | |||||
objecttolerance="20" | |||||
inkscape:window-width="1898" | |||||
inkscape:window-height="1026" | |||||
inkscape:window-x="10" | |||||
inkscape:window-y="42" | |||||
inkscape:window-maximized="0" | |||||
gridtolerance="17" | |||||
inkscape:snap-perpendicular="false" | |||||
inkscape:pagecheckerboard="true" | |||||
inkscape:snap-page="false" | |||||
inkscape:snap-text-baseline="true" | |||||
inkscape:object-nodes="false" | |||||
inkscape:snap-global="true"> | |||||
<inkscape:grid | |||||
type="xygrid" | |||||
id="grid43" | |||||
originx="-7.3436628e-018" | |||||
originy="100.54167" | |||||
spacingx="0.52916668" | |||||
spacingy="0.52916668" | |||||
dotted="false" | |||||
empspacing="20" /> | |||||
</sodipodi:namedview> | |||||
<metadata | |||||
id="metadata5"> | |||||
<rdf:RDF> | |||||
<cc:Work | |||||
rdf:about=""> | |||||
<dc:format>image/svg+xml</dc:format> | |||||
<dc:type | |||||
rdf:resource="http://purl.org/dc/dcmitype/StillImage" /> | |||||
<dc:title /> | |||||
</cc:Work> | |||||
</rdf:RDF> | |||||
</metadata> | |||||
<g | |||||
inkscape:label="Layer 1" | |||||
inkscape:groupmode="layer" | |||||
id="layer1" | |||||
transform="translate(0,-196.45832)" | |||||
style="display:inline"> | |||||
<rect | |||||
style="opacity:1;fill:#e6e6e6;fill-opacity:1;stroke:#000000;stroke-width:0.26458335;stroke-linecap:square;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:0.98999999" | |||||
id="rect973" | |||||
width="31.75" | |||||
height="100.40938" | |||||
x="-7.3436632e-18" | |||||
y="196.45831" | |||||
ry="0" /> | |||||
<rect | |||||
style="fill:#808080;fill-opacity:1;stroke:none;stroke-width:0.77891225;stroke-opacity:1" | |||||
id="rect4778" | |||||
width="10.583334" | |||||
height="34.395832" | |||||
x="17.864887" | |||||
y="219.74165" | |||||
ry="1.9254887" /> | |||||
<rect | |||||
ry="1.9254887" | |||||
y="255.19583" | |||||
x="17.864887" | |||||
height="34.395832" | |||||
width="10.583334" | |||||
id="rect101" | |||||
style="fill:#3c3c3c;fill-opacity:1;stroke:none;stroke-width:0.77891225;stroke-opacity:1" /> | |||||
<rect | |||||
id="rect26-7-3-4-6-26" | |||||
width="12.699998" | |||||
height="27.25215" | |||||
x="3.1749961" | |||||
y="206.77701" | |||||
style="fill:#808080;fill-opacity:1;stroke-width:0.83702594" | |||||
ry="0.94338781" /> | |||||
<rect | |||||
id="rect26-7-3-4-6-26-7" | |||||
width="10.583334" | |||||
height="11.641665" | |||||
x="17.991661" | |||||
y="206.77701" | |||||
style="fill:#808080;fill-opacity:1;stroke-width:0.49940801" | |||||
ry="0.97013831" /> | |||||
<g | |||||
aria-label="Octave" | |||||
style="font-style:normal;font-weight:normal;font-size:3.17500019px;line-height:125%;font-family:Sans;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458335px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" | |||||
id="text977" | |||||
transform="translate(1.1485025,-0.23386084)"> | |||||
<path | |||||
d="m 5.4379111,216.70148 q 0,0.33177 -0.111621,0.57981 -0.1116211,0.2465 -0.3162598,0.37672 -0.2046387,0.13023 -0.4774902,0.13023 -0.2666504,0 -0.4728394,-0.13023 -0.2061889,-0.13177 -0.3209106,-0.37362 -0.1131714,-0.24339 -0.116272,-0.56275 v -0.16278 q 0,-0.32557 0.1131714,-0.57516 0.1131714,-0.2496 0.3193603,-0.38137 0.2077393,-0.13333 0.4743897,-0.13333 0.2713012,0 0.4774902,0.13178 0.2077393,0.13022 0.3193604,0.37982 0.111621,0.24804 0.111621,0.57826 z m -0.2961059,-0.14572 q 0,-0.40153 -0.1612305,-0.61547 -0.1612304,-0.21549 -0.4511352,-0.21549 -0.2821533,0 -0.4449341,0.21549 -0.1612305,0.21394 -0.1658813,0.59531 v 0.16588 q 0,0.38913 0.1627807,0.61237 0.1643311,0.22169 0.4511353,0.22169 0.2883545,0 0.4464843,-0.20929 0.1581299,-0.21084 0.1627808,-0.60306 z" | |||||
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:3.17499995px;font-family:Roboto;-inkscape-font-specification:'Roboto, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.26458335px" | |||||
id="path992" | |||||
inkscape:connector-curvature="0" /> | |||||
<path | |||||
d="m 6.5122641,217.55414 q 0.153479,0 0.2682007,-0.093 0.1147217,-0.093 0.127124,-0.23255 h 0.2713013 q -0.00775,0.14418 -0.099219,0.2744 -0.091467,0.13023 -0.2449463,0.20774 -0.1519287,0.0775 -0.322461,0.0775 -0.3426147,0 -0.5457031,-0.22789 -0.2015381,-0.22945 -0.2015381,-0.62632 v -0.0481 q 0,-0.24495 0.089917,-0.43563 0.089917,-0.19069 0.2573487,-0.29611 0.1689819,-0.10542 0.3984253,-0.10542 0.2821533,0 0.4681884,0.16898 0.1875855,0.16898 0.1999878,0.43873 h -0.271301 q -0.012402,-0.16278 -0.1240234,-0.26665 -0.1100708,-0.10542 -0.2728515,-0.10542 -0.2185914,0 -0.3395142,0.15813 -0.1193726,0.15658 -0.1193726,0.45424 v 0.0543 q 0,0.28991 0.1193726,0.44648 0.1193726,0.15658 0.3410644,0.15658 z" | |||||
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:3.17499995px;font-family:Roboto;-inkscape-font-specification:'Roboto, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.26458335px" | |||||
id="path994" | |||||
inkscape:connector-curvature="0" /> | |||||
<path | |||||
d="m 7.8904746,215.67364 v 0.40618 h 0.3131592 v 0.22169 H 7.8904746 v 1.04024 q 0,0.10077 0.041858,0.15193 0.041858,0.0496 0.1426269,0.0496 0.049609,0 0.1364258,-0.0186 v 0.23254 q -0.1131714,0.031 -0.2201416,0.031 -0.1922363,0 -0.2899048,-0.11627 -0.097668,-0.11628 -0.097668,-0.33022 v -1.04024 H 7.2982627 v -0.22169 h 0.3054077 v -0.40618 z" | |||||
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:3.17499995px;font-family:Roboto;-inkscape-font-specification:'Roboto, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.26458335px" | |||||
id="path996" | |||||
inkscape:connector-curvature="0" /> | |||||
<path | |||||
d="m 9.5725422,217.75723 q -0.024805,-0.0496 -0.040308,-0.17673 -0.1999878,0.20774 -0.4774902,0.20774 -0.2480469,0 -0.4077271,-0.13953 -0.1581298,-0.14107 -0.1581298,-0.35657 0,-0.26199 0.1984374,-0.40617 0.1999878,-0.14573 0.5612061,-0.14573 h 0.2790527 v -0.13177 q 0,-0.15038 -0.089917,-0.23875 -0.089917,-0.0899 -0.2651001,-0.0899 -0.153479,0 -0.2573486,0.0775 -0.1038696,0.0775 -0.1038696,0.18758 H 8.5229939 q 0,-0.12557 0.088367,-0.24184 0.089917,-0.11782 0.2418457,-0.18604 0.153479,-0.0682 0.3364136,-0.0682 0.2899047,0 0.4542358,0.14573 0.164331,0.14417 0.1705322,0.39842 v 0.77205 q 0,0.23099 0.058911,0.36742 v 0.0248 z m -0.4759399,-0.21859 q 0.1348755,0 0.2557983,-0.0698 0.1209229,-0.0698 0.1751831,-0.18139 v -0.34416 H 9.3027912 q -0.5270996,0 -0.5270996,0.30851 0,0.13487 0.089917,0.21084 0.089917,0.076 0.2309937,0.076 z" | |||||
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:3.17499995px;font-family:Roboto;-inkscape-font-specification:'Roboto, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.26458335px" | |||||
id="path998" | |||||
inkscape:connector-curvature="0" /> | |||||
<path | |||||
d="m 10.795723,217.36811 0.415479,-1.28829 h 0.293005 l -0.601513,1.67741 h -0.218592 l -0.607715,-1.67741 h 0.293006 z" | |||||
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:3.17499995px;font-family:Roboto;-inkscape-font-specification:'Roboto, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.26458335px" | |||||
id="path1000" | |||||
inkscape:connector-curvature="0" /> | |||||
<path | |||||
d="m 12.476241,217.78824 q -0.341064,0 -0.555005,-0.22324 -0.21394,-0.2248 -0.21394,-0.59997 v -0.0527 q 0,-0.24959 0.09457,-0.44493 0.09612,-0.19689 0.26665,-0.30696 0.172083,-0.11162 0.372071,-0.11162 0.327111,0 0.508496,0.21549 0.181384,0.21549 0.181384,0.61702 v 0.11937 H 11.9941 q 0.0062,0.24805 0.144177,0.40153 0.139527,0.15192 0.353467,0.15192 0.151929,0 0.257349,-0.062 0.10542,-0.062 0.184485,-0.16433 l 0.175183,0.13643 q -0.21084,0.32401 -0.63252,0.32401 z m -0.03566,-1.50379 q -0.173633,0 -0.291456,0.12713 -0.117822,0.12557 -0.145727,0.35347 h 0.840259 v -0.0217 q -0.0124,-0.21859 -0.117823,-0.33796 -0.10542,-0.12093 -0.285253,-0.12093 z" | |||||
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:3.17499995px;font-family:Roboto;-inkscape-font-specification:'Roboto, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.26458335px" | |||||
id="path1002" | |||||
inkscape:connector-curvature="0" /> | |||||
</g> | |||||
<g | |||||
aria-label="Semi" | |||||
style="font-style:normal;font-weight:normal;font-size:3.17500019px;line-height:125%;font-family:Sans;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458335px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" | |||||
id="text981" | |||||
transform="translate(-4.4436646e-6,-0.23386084)"> | |||||
<path | |||||
d="m 20.694339,216.75109 q -0.382923,-0.11007 -0.558106,-0.26975 -0.173633,-0.16123 -0.173633,-0.39687 0,-0.26665 0.21239,-0.44029 0.213941,-0.17518 0.555005,-0.17518 0.232544,0 0.413929,0.0899 0.182934,0.0899 0.282153,0.24804 0.100769,0.15813 0.100769,0.34572 h -0.299207 q 0,-0.20464 -0.130224,-0.32091 -0.130225,-0.11782 -0.36742,-0.11782 -0.220141,0 -0.344165,0.0977 -0.122473,0.0961 -0.122473,0.2682 0,0.13797 0.116272,0.23409 0.117822,0.0946 0.398425,0.17363 0.282154,0.0791 0.440284,0.17519 0.15968,0.0946 0.235644,0.22169 0.07752,0.12712 0.07752,0.2992 0,0.27441 -0.213941,0.44029 -0.21394,0.16433 -0.572058,0.16433 -0.232544,0 -0.434082,-0.0884 -0.201538,-0.0899 -0.311609,-0.24494 -0.10852,-0.15503 -0.10852,-0.35192 h 0.299206 q 0,0.20464 0.150379,0.32401 0.151929,0.11782 0.404626,0.11782 0.235645,0 0.361219,-0.0961 0.125573,-0.0961 0.125573,-0.262 0,-0.16588 -0.116272,-0.25579 -0.116272,-0.0915 -0.421679,-0.17984 z" | |||||
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:3.17499995px;font-family:Roboto;-inkscape-font-specification:'Roboto, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.26458335px" | |||||
id="path983" | |||||
inkscape:connector-curvature="0" /> | |||||
<path | |||||
d="m 22.565542,217.78824 q -0.341064,0 -0.555005,-0.22324 -0.21394,-0.2248 -0.21394,-0.59997 v -0.0527 q 0,-0.24959 0.09457,-0.44493 0.09612,-0.19689 0.26665,-0.30696 0.172083,-0.11162 0.37207,-0.11162 0.327112,0 0.508497,0.21549 0.181384,0.21549 0.181384,0.61702 v 0.11937 h -1.136365 q 0.0062,0.24805 0.144177,0.40153 0.139527,0.15192 0.353467,0.15192 0.151929,0 0.257349,-0.062 0.10542,-0.062 0.184485,-0.16433 l 0.175183,0.13643 q -0.21084,0.32401 -0.63252,0.32401 z m -0.03566,-1.50379 q -0.173632,0 -0.291455,0.12713 -0.117822,0.12557 -0.145727,0.35347 h 0.840259 v -0.0217 q -0.0124,-0.21859 -0.117823,-0.33796 -0.10542,-0.12093 -0.285254,-0.12093 z" | |||||
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:3.17499995px;font-family:Roboto;-inkscape-font-specification:'Roboto, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.26458335px" | |||||
id="path985" | |||||
inkscape:connector-curvature="0" /> | |||||
<path | |||||
d="m 23.819729,216.07982 0.0078,0.18603 q 0.184485,-0.21704 0.497644,-0.21704 0.351916,0 0.47904,0.26975 0.08372,-0.12092 0.217041,-0.19534 0.134876,-0.0744 0.31781,-0.0744 0.551905,0 0.561206,0.58446 v 1.12396 h -0.286804 v -1.10691 q 0,-0.17983 -0.08216,-0.2682 -0.08217,-0.0899 -0.275953,-0.0899 -0.15968,0 -0.2651,0.0961 -0.10542,0.0946 -0.122473,0.2558 v 1.11311 h -0.288354 v -1.09916 q 0,-0.36586 -0.358118,-0.36586 -0.282153,0 -0.386023,0.24029 v 1.22473 h -0.286804 v -1.67741 z" | |||||
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:3.17499995px;font-family:Roboto;-inkscape-font-specification:'Roboto, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.26458335px" | |||||
id="path987" | |||||
inkscape:connector-curvature="0" /> | |||||
<path | |||||
d="m 26.645913,217.75723 h -0.286804 v -1.67741 h 0.286804 z m -0.310058,-2.12235 q 0,-0.0698 0.04186,-0.11782 0.04341,-0.0481 0.127124,-0.0481 0.08372,0 0.127124,0.0481 0.04341,0.0481 0.04341,0.11782 0,0.0698 -0.04341,0.11627 -0.04341,0.0465 -0.127124,0.0465 -0.08372,0 -0.127124,-0.0465 -0.04186,-0.0465 -0.04186,-0.11627 z" | |||||
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:3.17499995px;font-family:Roboto;-inkscape-font-specification:'Roboto, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.26458335px" | |||||
id="path989" | |||||
inkscape:connector-curvature="0" /> | |||||
</g> | |||||
<g | |||||
aria-label="In" | |||||
style="font-style:normal;font-weight:normal;font-size:3.17500019px;line-height:125%;font-family:Sans;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458335px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" | |||||
id="text840" | |||||
transform="translate(0,0.39400043)"> | |||||
<path | |||||
d="m 22.396912,222.25806 h -0.297657 v -2.25723 h 0.297657 z" | |||||
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:3.17499995px;font-family:Roboto;-inkscape-font-specification:'Roboto, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.26458335px" | |||||
id="path853" | |||||
inkscape:connector-curvature="0" /> | |||||
<path | |||||
d="m 23.165857,220.58064 0.0093,0.21084 q 0.192236,-0.24185 0.502295,-0.24185 0.53175,0 0.536401,0.59997 v 1.10846 h -0.286804 v -1.11001 q -0.0016,-0.18139 -0.08372,-0.2682 -0.08061,-0.0868 -0.252698,-0.0868 -0.139526,0 -0.244946,0.0744 -0.10542,0.0744 -0.164331,0.19534 v 1.19528 H 22.89455 v -1.67742 z" | |||||
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:3.17499995px;font-family:Roboto;-inkscape-font-specification:'Roboto, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.26458335px" | |||||
id="path855" | |||||
inkscape:connector-curvature="0" /> | |||||
</g> | |||||
<g | |||||
aria-label="Out" | |||||
style="font-style:normal;font-weight:normal;font-size:3.17500019px;line-height:125%;font-family:Sans;letter-spacing:0px;word-spacing:0px;fill:#f2f2f2;fill-opacity:1;stroke:none;stroke-width:0.26458335px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" | |||||
id="text844" | |||||
transform="translate(-1.2778931e-6,0.43562234)"> | |||||
<path | |||||
d="m 22.634106,256.65604 q 0,0.33177 -0.111621,0.57981 -0.111621,0.2465 -0.31626,0.37672 -0.204638,0.13023 -0.47749,0.13023 -0.26665,0 -0.472839,-0.13023 -0.206189,-0.13177 -0.320911,-0.37362 -0.113171,-0.24339 -0.116272,-0.56275 v -0.16278 q 0,-0.32557 0.113171,-0.57516 0.113172,-0.2496 0.319361,-0.38138 0.207739,-0.13332 0.474389,-0.13332 0.271302,0 0.477491,0.13177 0.207739,0.13023 0.31936,0.37983 0.111621,0.24804 0.111621,0.57826 z M 22.338,256.51031 q 0,-0.40152 -0.16123,-0.61546 -0.161231,-0.21549 -0.451136,-0.21549 -0.282153,0 -0.444934,0.21549 -0.16123,0.21394 -0.165881,0.59531 v 0.16588 q 0,0.38913 0.162781,0.61237 0.164331,0.22169 0.451135,0.22169 0.288354,0 0.446484,-0.20929 0.15813,-0.21084 0.162781,-0.60306 z" | |||||
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:3.17499995px;font-family:Roboto;-inkscape-font-specification:'Roboto, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#f2f2f2;stroke-width:0.26458335px" | |||||
id="path846" | |||||
inkscape:connector-curvature="0" /> | |||||
<path | |||||
d="m 24.071228,257.54591 q -0.167432,0.19689 -0.491443,0.19689 -0.268201,0 -0.409278,-0.15503 -0.139526,-0.15658 -0.141076,-0.46199 v -1.0914 h 0.286804 v 1.08365 q 0,0.38137 0.310059,0.38137 0.328662,0 0.437182,-0.24494 v -1.22008 h 0.286804 v 1.67741 h -0.272851 z" | |||||
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:3.17499995px;font-family:Roboto;-inkscape-font-specification:'Roboto, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#f2f2f2;stroke-width:0.26458335px" | |||||
id="path848" | |||||
inkscape:connector-curvature="0" /> | |||||
<path | |||||
d="m 25.173486,255.6282 v 0.40618 h 0.313159 v 0.22169 h -0.313159 v 1.04024 q 0,0.10077 0.04186,0.15193 0.04186,0.0496 0.142627,0.0496 0.04961,0 0.136425,-0.0186 v 0.23254 q -0.113171,0.031 -0.220141,0.031 -0.192236,0 -0.289905,-0.11627 -0.09767,-0.11628 -0.09767,-0.33022 v -1.04024 h -0.305408 v -0.22169 h 0.305408 v -0.40618 z" | |||||
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:3.17499995px;font-family:Roboto;-inkscape-font-specification:'Roboto, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#f2f2f2;stroke-width:0.26458335px" | |||||
id="path850" | |||||
inkscape:connector-curvature="0" /> | |||||
</g> | |||||
</g> | |||||
</svg> |
@@ -1,370 +0,0 @@ | |||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?> | |||||
<svg | |||||
xmlns:dc="http://purl.org/dc/elements/1.1/" | |||||
xmlns:cc="http://creativecommons.org/ns#" | |||||
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" | |||||
xmlns:svg="http://www.w3.org/2000/svg" | |||||
xmlns="http://www.w3.org/2000/svg" | |||||
xmlns:xlink="http://www.w3.org/1999/xlink" | |||||
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" | |||||
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" | |||||
id="svg8" | |||||
width="60" | |||||
height="380.00003" | |||||
viewBox="0 0 59.999998 380.00004" | |||||
version="1.1" | |||||
sodipodi:docname="Folder.svg" | |||||
inkscape:version="0.92.2 5c3e80d, 2017-08-06"> | |||||
<metadata | |||||
id="metadata29"> | |||||
<rdf:RDF> | |||||
<cc:Work | |||||
rdf:about=""> | |||||
<dc:format>image/svg+xml</dc:format> | |||||
<dc:type | |||||
rdf:resource="http://purl.org/dc/dcmitype/StillImage" /> | |||||
<dc:title>BlankPanel1</dc:title> | |||||
</cc:Work> | |||||
</rdf:RDF> | |||||
</metadata> | |||||
<defs | |||||
id="defs27"> | |||||
<clipPath | |||||
id="clipPath837" | |||||
clipPathUnits="userSpaceOnUse"> | |||||
<path | |||||
inkscape:connector-curvature="0" | |||||
id="path835" | |||||
d="M 0,842 H 595 V 0 H 0 Z" /> | |||||
</clipPath> | |||||
<clipPath | |||||
id="clipPath13703" | |||||
clipPathUnits="userSpaceOnUse"> | |||||
<path | |||||
inkscape:connector-curvature="0" | |||||
id="path13701" | |||||
d="M 0,1020.448 H 935.433 V 0 H 0 Z" /> | |||||
</clipPath> | |||||
</defs> | |||||
<sodipodi:namedview | |||||
pagecolor="#ffffff" | |||||
bordercolor="#666666" | |||||
borderopacity="1" | |||||
objecttolerance="10" | |||||
gridtolerance="10" | |||||
guidetolerance="10" | |||||
inkscape:pageopacity="0" | |||||
inkscape:pageshadow="2" | |||||
inkscape:window-width="1898" | |||||
inkscape:window-height="1026" | |||||
id="namedview25" | |||||
showgrid="true" | |||||
inkscape:zoom="2.1091365" | |||||
inkscape:cx="-102.60295" | |||||
inkscape:cy="189.57526" | |||||
inkscape:window-x="10" | |||||
inkscape:window-y="42" | |||||
inkscape:window-maximized="0" | |||||
inkscape:current-layer="g827" | |||||
showguides="true" | |||||
inkscape:guide-bbox="true"> | |||||
<sodipodi:guide | |||||
position="30,360" | |||||
orientation="1,0" | |||||
id="guide101" | |||||
inkscape:locked="false" /> | |||||
<inkscape:grid | |||||
type="xygrid" | |||||
id="grid826" /> | |||||
<sodipodi:guide | |||||
position="-269.99999,60.000001" | |||||
orientation="0,1" | |||||
id="guide1007" | |||||
inkscape:locked="false" /> | |||||
</sodipodi:namedview> | |||||
<title | |||||
id="title2">BlankPanel1</title> | |||||
<g | |||||
transform="matrix(1.3333333,0,0,-1.3333333,-826.22953,717.78288)" | |||||
inkscape:label="1" | |||||
id="g827" | |||||
style="opacity:1"> | |||||
<g | |||||
id="g831" | |||||
transform="matrix(0.65492365,0,0,1.0001085,214.22316,-0.05847256)"> | |||||
<g | |||||
transform="translate(619.08227,-482.18084)" | |||||
inkscape:label="02" | |||||
id="g13693"> | |||||
<path | |||||
inkscape:connector-curvature="0" | |||||
id="path13695" | |||||
style="fill:#091942;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.22436777" | |||||
d="M 0,735.3352 H 68.666843 V 1020.448 H 0 Z" /> | |||||
<path | |||||
style="opacity:1;fill:#e6e6e6;fill-opacity:1;stroke:#000000;stroke-width:0.47412768;stroke-linecap:square;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:0.98999999" | |||||
d="M -0.45300759,190.33385 V 0.445719 H 45.063249 90.579506 V 190.33385 380.22199 H 45.063249 -0.45300759 Z" | |||||
id="path26" | |||||
inkscape:connector-curvature="0" | |||||
transform="matrix(0.75000002,0,0,-0.75000002,0.58989299,1020.518)" /> | |||||
</g> | |||||
</g> | |||||
<g | |||||
inkscape:groupmode="layer" | |||||
id="layer2" | |||||
inkscape:label="Layer 1" | |||||
style="opacity:0"> | |||||
<image | |||||
sodipodi:absref="/tmp/seq.png" | |||||
y="-538.26715" | |||||
x="619.08228" | |||||
id="image80" | |||||
xlink:href="file:///tmp/seq.png" | |||||
preserveAspectRatio="none" | |||||
height="290.25" | |||||
width="45" | |||||
transform="scale(1,-1)" /> | |||||
</g> | |||||
<flowRoot | |||||
xml:space="preserve" | |||||
id="flowRoot826" | |||||
style="font-style:normal;font-weight:normal;font-size:12px;line-height:125%;font-family:Sans;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" | |||||
transform="matrix(0.75000002,0,0,-0.75000002,619.67216,538.33717)"><flowRegion | |||||
id="flowRegion828"><rect | |||||
id="rect830" | |||||
width="50" | |||||
height="20" | |||||
x="5" | |||||
y="10.000031" /></flowRegion><flowPara | |||||
id="flowPara834">MANIFOLDM</flowPara></flowRoot> <g | |||||
aria-label="MANI | |||||
FOLD" | |||||
transform="scale(1,-1)" | |||||
style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:12px;line-height:125%;font-family:Roboto;-inkscape-font-specification:'Roboto, Bold';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.75px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" | |||||
id="text852"> | |||||
<path | |||||
d="m 629.98761,-532.86841 2.19141,6.1875 2.17968,-6.1875 h 2.3086 v 8.53125 h -1.76367 v -2.33203 l 0.17578,-4.02539 -2.30274,6.35742 h -1.20703 l -2.29687,-6.35156 0.17578,4.01953 v 2.33203 h -1.75782 v -8.53125 z" | |||||
style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:12px;line-height:125%;font-family:Roboto;-inkscape-font-specification:'Roboto, Bold';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;stroke-width:0.75px" | |||||
id="path919" /> | |||||
<path | |||||
d="m 643.03058,-526.09497 h -3.08203 l -0.58594,1.75781 h -1.86914 l 3.17578,-8.53125 h 1.62891 l 3.19336,8.53125 h -1.86914 z m -2.60742,-1.42383 h 2.13281 l -1.07227,-3.19336 z" | |||||
style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:12px;line-height:125%;font-family:Roboto;-inkscape-font-specification:'Roboto, Bold';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;stroke-width:0.75px" | |||||
id="path921" /> | |||||
<path | |||||
d="m 653.23761,-524.33716 h -1.75781 l -3.42188,-5.61328 v 5.61328 h -1.75781 v -8.53125 h 1.75781 l 3.42774,5.625 v -5.625 h 1.75195 z" | |||||
style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:12px;line-height:125%;font-family:Roboto;-inkscape-font-specification:'Roboto, Bold';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;stroke-width:0.75px" | |||||
id="path923" /> | |||||
<path | |||||
d="m 656.65363,-524.33716 h -1.75782 v -8.53125 h 1.75782 z" | |||||
style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:12px;line-height:125%;font-family:Roboto;-inkscape-font-specification:'Roboto, Bold';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;stroke-width:0.75px" | |||||
id="path925" /> | |||||
<path | |||||
d="m 633.52667,-516.32349 h -3.375 v 3.48633 h -1.75781 v -8.53125 h 5.55469 v 1.42383 h -3.79688 v 2.20312 h 3.375 z" | |||||
style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:12px;line-height:125%;font-family:Roboto;-inkscape-font-specification:'Roboto, Bold';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;stroke-width:0.75px" | |||||
id="path927" /> | |||||
<path | |||||
d="m 641.98761,-516.90942 q 0,1.25976 -0.44531,2.20898 -0.44532,0.94922 -1.27735,1.46484 -0.82617,0.51563 -1.89843,0.51563 -1.06055,0 -1.89258,-0.50977 -0.83203,-0.50976 -1.28906,-1.45312 -0.45704,-0.94922 -0.4629,-2.17969 v -0.42187 q 0,-1.25977 0.45118,-2.21485 0.45703,-0.96094 1.2832,-1.4707 0.83203,-0.51563 1.89844,-0.51563 1.0664,0 1.89258,0.51563 0.83203,0.50976 1.2832,1.4707 0.45703,0.95508 0.45703,2.20899 z m -1.78125,-0.38672 q 0,-1.3418 -0.48047,-2.03907 -0.48047,-0.69726 -1.37109,-0.69726 -0.88477,0 -1.36524,0.69141 -0.48047,0.68554 -0.48633,2.01562 v 0.41602 q 0,1.30664 0.48047,2.02734 0.48047,0.7207 1.38282,0.7207 0.88476,0 1.35937,-0.6914 0.47461,-0.69727 0.48047,-2.02735 z" | |||||
style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:12px;line-height:125%;font-family:Roboto;-inkscape-font-specification:'Roboto, Bold';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;stroke-width:0.75px" | |||||
id="path929" /> | |||||
<path | |||||
d="m 645.03448,-514.24927 h 3.73243 v 1.41211 h -5.49024 v -8.53125 h 1.75781 z" | |||||
style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:12px;line-height:125%;font-family:Roboto;-inkscape-font-specification:'Roboto, Bold';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;stroke-width:0.75px" | |||||
id="path931" /> | |||||
<path | |||||
d="m 649.76886,-512.83716 v -8.53125 h 2.625 q 1.125,0 2.00977,0.50977 0.89062,0.5039 1.38867,1.4414 0.49804,0.93164 0.49804,2.1211 v 0.39258 q 0,1.18945 -0.49218,2.11523 -0.48633,0.92578 -1.37696,1.43555 -0.89062,0.50976 -2.00976,0.51562 z m 1.75781,-7.10742 v 5.69531 h 0.84961 q 1.03125,0 1.57617,-0.67383 0.54493,-0.67382 0.55664,-1.92773 v -0.45117 q 0,-1.30078 -0.53906,-1.96875 -0.53906,-0.67383 -1.57617,-0.67383 z" | |||||
style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:12px;line-height:125%;font-family:Roboto;-inkscape-font-specification:'Roboto, Bold';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;stroke-width:0.75px" | |||||
id="path933" /> | |||||
</g> | |||||
<g | |||||
aria-label="Stages" | |||||
transform="scale(1,-1)" | |||||
style="font-style:normal;font-weight:normal;font-size:9px;line-height:125%;font-family:Sans;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.75px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" | |||||
id="text862"> | |||||
<path | |||||
d="m 632.26788,-474.12231 q -0.96484,-0.27735 -1.40625,-0.67969 -0.4375,-0.40625 -0.4375,-1 0,-0.67188 0.53516,-1.10938 0.53906,-0.4414 1.39844,-0.4414 0.58593,0 1.04297,0.22656 0.46093,0.22656 0.71093,0.625 0.25391,0.39844 0.25391,0.87109 h -0.75391 q 0,-0.51562 -0.32812,-0.80859 -0.32813,-0.29688 -0.92578,-0.29688 -0.55469,0 -0.86719,0.2461 -0.30859,0.24219 -0.30859,0.67578 0,0.34766 0.29296,0.58984 0.29688,0.23828 1.00391,0.4375 0.71094,0.19922 1.10938,0.44141 0.40234,0.23828 0.59375,0.55859 0.19531,0.32032 0.19531,0.75391 0,0.69141 -0.53906,1.10937 -0.53907,0.41407 -1.44141,0.41407 -0.58594,0 -1.09375,-0.22266 -0.50781,-0.22656 -0.78516,-0.61719 -0.27343,-0.39062 -0.27343,-0.88672 h 0.7539 q 0,0.51563 0.37891,0.81641 0.38281,0.29688 1.01953,0.29688 0.59375,0 0.91016,-0.24219 0.3164,-0.24219 0.3164,-0.66016 0,-0.41797 -0.29297,-0.64453 -0.29297,-0.23047 -1.0625,-0.45312 z" | |||||
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:8px;font-family:Roboto;-inkscape-font-specification:'Roboto, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.75px" | |||||
id="path964" /> | |||||
<path | |||||
d="m 636.20929,-476.83716 v 1.02344 h 0.78906 v 0.55859 h -0.78906 v 2.6211 q 0,0.2539 0.10547,0.38281 0.10547,0.125 0.35937,0.125 0.125,0 0.34375,-0.0469 v 0.58594 q -0.28515,0.0781 -0.55468,0.0781 -0.48438,0 -0.73047,-0.29297 -0.2461,-0.29297 -0.2461,-0.83203 v -2.6211 h -0.76953 v -0.55859 h 0.76953 v -1.02344 z" | |||||
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:8px;font-family:Roboto;-inkscape-font-specification:'Roboto, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.75px" | |||||
id="path966" /> | |||||
<path | |||||
d="m 640.44757,-471.58716 q -0.0625,-0.125 -0.10156,-0.44531 -0.50391,0.52344 -1.20313,0.52344 -0.625,0 -1.02734,-0.35157 -0.39844,-0.35546 -0.39844,-0.89843 0,-0.66016 0.5,-1.02344 0.50391,-0.36719 1.41406,-0.36719 h 0.70313 v -0.33203 q 0,-0.37891 -0.22656,-0.60156 -0.22657,-0.22656 -0.66797,-0.22656 -0.38672,0 -0.64844,0.19531 -0.26172,0.19531 -0.26172,0.47265 h -0.72656 q 0,-0.3164 0.22266,-0.60937 0.22656,-0.29688 0.60937,-0.46875 0.38672,-0.17188 0.84766,-0.17188 0.73047,0 1.14453,0.36719 0.41406,0.36328 0.42969,1.00391 v 1.94531 q 0,0.58203 0.14843,0.92578 v 0.0625 z m -1.19922,-0.55078 q 0.33985,0 0.64453,-0.17578 0.30469,-0.17578 0.44141,-0.45703 v -0.86719 h -0.56641 q -1.32812,0 -1.32812,0.77734 0,0.33985 0.22656,0.53125 0.22656,0.19141 0.58203,0.19141 z" | |||||
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:8px;font-family:Roboto;-inkscape-font-specification:'Roboto, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.75px" | |||||
id="path968" /> | |||||
<path | |||||
d="m 642.0257,-473.7356 q 0,-0.98828 0.45703,-1.57031 0.45703,-0.58594 1.21093,-0.58594 0.77344,0 1.20704,0.54688 l 0.0351,-0.46875 h 0.66016 v 4.125 q 0,0.82031 -0.48828,1.29297 -0.48438,0.47265 -1.30469,0.47265 -0.45703,0 -0.89453,-0.19531 -0.4375,-0.19531 -0.66797,-0.53515 l 0.375,-0.4336 q 0.46484,0.57422 1.13672,0.57422 0.52734,0 0.82031,-0.29687 0.29688,-0.29688 0.29688,-0.83594 v -0.36328 q -0.4336,0.5 -1.1836,0.5 -0.74219,0 -1.20312,-0.59766 -0.45703,-0.59766 -0.45703,-1.62891 z m 0.72656,0.082 q 0,0.71484 0.29297,1.125 0.29297,0.40625 0.82031,0.40625 0.68359,0 1.00391,-0.6211 v -1.92969 q -0.33204,-0.60546 -0.9961,-0.60546 -0.52734,0 -0.82422,0.41015 -0.29687,0.41016 -0.29687,1.21485 z" | |||||
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:8px;font-family:Roboto;-inkscape-font-specification:'Roboto, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.75px" | |||||
id="path970" /> | |||||
<path | |||||
d="m 648.43585,-471.50903 q -0.85937,0 -1.39844,-0.5625 -0.53906,-0.56641 -0.53906,-1.51172 v -0.13281 q 0,-0.62891 0.23828,-1.1211 0.24219,-0.49609 0.67188,-0.77344 0.43359,-0.28125 0.9375,-0.28125 0.82422,0 1.28125,0.54297 0.45703,0.54297 0.45703,1.55469 v 0.30078 h -2.86328 q 0.0156,0.625 0.36328,1.01172 0.35156,0.38281 0.89062,0.38281 0.38282,0 0.64844,-0.15625 0.26563,-0.15625 0.46485,-0.41406 l 0.4414,0.34375 q -0.53125,0.81641 -1.59375,0.81641 z m -0.0898,-3.78907 q -0.4375,0 -0.73438,0.32032 -0.29687,0.3164 -0.36718,0.89062 h 2.11718 v -0.0547 q -0.0312,-0.55078 -0.29687,-0.85156 -0.26563,-0.30469 -0.71875,-0.30469 z" | |||||
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:8px;font-family:Roboto;-inkscape-font-specification:'Roboto, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.75px" | |||||
id="path972" /> | |||||
<path | |||||
d="m 653.37726,-472.70825 q 0,-0.29297 -0.22266,-0.45313 -0.21875,-0.16406 -0.76953,-0.28125 -0.54687,-0.11718 -0.87109,-0.28125 -0.32032,-0.16406 -0.47657,-0.39062 -0.15234,-0.22656 -0.15234,-0.53906 0,-0.51954 0.4375,-0.87891 0.44141,-0.35938 1.125,-0.35938 0.71875,0 1.16406,0.3711 0.44922,0.37109 0.44922,0.94922 h -0.72656 q 0,-0.29688 -0.25391,-0.51172 -0.25,-0.21485 -0.63281,-0.21485 -0.39453,0 -0.61719,0.17188 -0.22265,0.17187 -0.22265,0.44922 0,0.26172 0.20703,0.39453 0.20703,0.13281 0.74609,0.25391 0.54297,0.12109 0.87891,0.28906 0.33594,0.16797 0.49609,0.40625 0.16406,0.23437 0.16406,0.57422 0,0.5664 -0.45312,0.91015 -0.45313,0.33985 -1.17578,0.33985 -0.50781,0 -0.89844,-0.17969 -0.39062,-0.17969 -0.61328,-0.5 -0.21875,-0.32422 -0.21875,-0.69922 h 0.72266 q 0.0195,0.36328 0.28906,0.57813 0.27344,0.21093 0.71875,0.21093 0.41015,0 0.65625,-0.16406 0.25,-0.16797 0.25,-0.44531 z" | |||||
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:8px;font-family:Roboto;-inkscape-font-specification:'Roboto, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.75px" | |||||
id="path974" /> | |||||
</g> | |||||
<g | |||||
aria-label="Folds" | |||||
transform="scale(1,-1)" | |||||
style="font-style:normal;font-weight:normal;font-size:9px;line-height:125%;font-family:Sans;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.75px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" | |||||
id="text874"> | |||||
<path | |||||
d="m 636.09406,-435.09888 h -2.38672 v 2.51172 h -0.75 v -5.6875 h 3.52343 v 0.61719 h -2.77343 v 1.94531 h 2.38672 z" | |||||
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:8px;font-family:Roboto;-inkscape-font-specification:'Roboto, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.75px" | |||||
id="path953" /> | |||||
<path | |||||
d="m 636.9964,-434.7395 q 0,-0.6211 0.24219,-1.11719 0.24609,-0.49609 0.67968,-0.76562 0.4375,-0.26954 0.9961,-0.26954 0.86328,0 1.39453,0.59766 0.53516,0.59766 0.53516,1.58984 v 0.0508 q 0,0.61718 -0.23829,1.10937 -0.23437,0.48828 -0.67578,0.76172 -0.4375,0.27344 -1.00781,0.27344 -0.85937,0 -1.39453,-0.59766 -0.53125,-0.59766 -0.53125,-1.58203 z m 0.72656,0.0859 q 0,0.70312 0.32422,1.1289 0.32813,0.42578 0.875,0.42578 0.55078,0 0.875,-0.42968 0.32422,-0.4336 0.32422,-1.21094 0,-0.69531 -0.33203,-1.125 -0.32813,-0.4336 -0.875,-0.4336 -0.53516,0 -0.86328,0.42579 -0.32813,0.42578 -0.32813,1.21875 z" | |||||
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:8px;font-family:Roboto;-inkscape-font-specification:'Roboto, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.75px" | |||||
id="path955" /> | |||||
<path | |||||
d="m 642.53546,-432.58716 h -0.72265 v -6 h 0.72265 z" | |||||
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:8px;font-family:Roboto;-inkscape-font-specification:'Roboto, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.75px" | |||||
id="path957" /> | |||||
<path | |||||
d="m 643.51202,-434.7356 q 0,-0.97265 0.46094,-1.5625 0.46094,-0.59375 1.20703,-0.59375 0.74219,0 1.17578,0.50782 v -2.20313 h 0.72266 v 6 h -0.66406 l -0.0352,-0.45312 q -0.43359,0.53125 -1.20703,0.53125 -0.73437,0 -1.19922,-0.60157 -0.46094,-0.60156 -0.46094,-1.57031 z m 0.72266,0.082 q 0,0.71875 0.29688,1.125 0.29687,0.40625 0.82031,0.40625 0.6875,0 1.0039,-0.61719 v -1.94141 q -0.32421,-0.59765 -0.99609,-0.59765 -0.53125,0 -0.82812,0.41015 -0.29688,0.41016 -0.29688,1.21485 z" | |||||
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:8px;font-family:Roboto;-inkscape-font-specification:'Roboto, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.75px" | |||||
id="path959" /> | |||||
<path | |||||
d="m 650.66437,-433.70825 q 0,-0.29297 -0.22266,-0.45313 -0.21875,-0.16406 -0.76953,-0.28125 -0.54687,-0.11718 -0.87109,-0.28125 -0.32032,-0.16406 -0.47657,-0.39062 -0.15234,-0.22656 -0.15234,-0.53906 0,-0.51954 0.4375,-0.87891 0.44141,-0.35938 1.125,-0.35938 0.71875,0 1.16406,0.3711 0.44922,0.37109 0.44922,0.94922 h -0.72656 q 0,-0.29688 -0.25391,-0.51172 -0.25,-0.21485 -0.63281,-0.21485 -0.39453,0 -0.61719,0.17188 -0.22265,0.17187 -0.22265,0.44922 0,0.26172 0.20703,0.39453 0.20703,0.13281 0.74609,0.25391 0.54297,0.12109 0.87891,0.28906 0.33594,0.16797 0.49609,0.40625 0.16406,0.23437 0.16406,0.57422 0,0.5664 -0.45312,0.91015 -0.45313,0.33985 -1.17578,0.33985 -0.50781,0 -0.89844,-0.17969 -0.39062,-0.17969 -0.61328,-0.5 -0.21875,-0.32422 -0.21875,-0.69922 h 0.72266 q 0.0195,0.36328 0.28906,0.57813 0.27344,0.21093 0.71875,0.21093 0.41015,0 0.65625,-0.16406 0.25,-0.16797 0.25,-0.44531 z" | |||||
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:8px;font-family:Roboto;-inkscape-font-specification:'Roboto, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.75px" | |||||
id="path961" /> | |||||
</g> | |||||
<g | |||||
aria-label="Symmetry" | |||||
transform="scale(1,-1)" | |||||
style="font-style:normal;font-weight:normal;font-size:9px;line-height:125%;font-family:Sans;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.75px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" | |||||
id="text878"> | |||||
<path | |||||
d="m 626.45343,-373.62231 q -0.96484,-0.27735 -1.40625,-0.67969 -0.4375,-0.40625 -0.4375,-1 0,-0.67188 0.53516,-1.10938 0.53906,-0.4414 1.39843,-0.4414 0.58594,0 1.04297,0.22656 0.46094,0.22656 0.71094,0.625 0.25391,0.39844 0.25391,0.87109 h -0.75391 q 0,-0.51562 -0.32812,-0.80859 -0.32813,-0.29688 -0.92579,-0.29688 -0.55468,0 -0.86718,0.2461 -0.3086,0.24219 -0.3086,0.67578 0,0.34766 0.29297,0.58984 0.29688,0.23828 1.00391,0.4375 0.71094,0.19922 1.10937,0.44141 0.40235,0.23828 0.59375,0.55859 0.19532,0.32032 0.19532,0.75391 0,0.69141 -0.53907,1.10937 -0.53906,0.41407 -1.4414,0.41407 -0.58594,0 -1.09375,-0.22266 -0.50782,-0.22656 -0.78516,-0.61719 -0.27344,-0.39062 -0.27344,-0.88672 h 0.75391 q 0,0.51563 0.37891,0.81641 0.38281,0.29688 1.01953,0.29688 0.59375,0 0.91015,-0.24219 0.31641,-0.24219 0.31641,-0.66016 0,-0.41797 -0.29297,-0.64453 -0.29297,-0.23047 -1.0625,-0.45312 z" | |||||
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:8px;font-family:Roboto;-inkscape-font-specification:'Roboto, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.75px" | |||||
id="path936" | |||||
inkscape:connector-curvature="0" /> | |||||
<path | |||||
d="m 630.79718,-372.14575 0.98438,-3.16797 h 0.77343 l -1.69922,4.87891 q -0.39453,1.05468 -1.2539,1.05468 l -0.13672,-0.0117 -0.26953,-0.0508 v -0.58593 l 0.19531,0.0156 q 0.36719,0 0.57031,-0.14844 0.20703,-0.14843 0.33985,-0.54297 l 0.16015,-0.42968 -1.50781,-4.17969 h 0.78906 z" | |||||
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:8px;font-family:Roboto;-inkscape-font-specification:'Roboto, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.75px" | |||||
id="path938" | |||||
inkscape:connector-curvature="0" /> | |||||
<path | |||||
d="m 633.87531,-375.31372 0.0195,0.46875 q 0.46484,-0.54688 1.2539,-0.54688 0.88672,0 1.20703,0.67969 0.21094,-0.30469 0.54688,-0.49219 0.33984,-0.1875 0.80078,-0.1875 1.39063,0 1.41406,1.47266 v 2.83203 h -0.72265 v -2.78906 q 0,-0.45313 -0.20703,-0.67578 -0.20704,-0.22656 -0.69532,-0.22656 -0.40234,0 -0.66797,0.24218 -0.26562,0.23828 -0.30859,0.64453 v 2.80469 h -0.72656 v -2.76953 q 0,-0.92187 -0.90235,-0.92187 -0.71093,0 -0.97265,0.60546 v 3.08594 h -0.72266 v -4.22656 z" | |||||
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:8px;font-family:Roboto;-inkscape-font-specification:'Roboto, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.75px" | |||||
id="path940" | |||||
inkscape:connector-curvature="0" /> | |||||
<path | |||||
d="m 640.89093,-375.31372 0.0195,0.46875 q 0.46485,-0.54688 1.25391,-0.54688 0.88672,0 1.20703,0.67969 0.21094,-0.30469 0.54687,-0.49219 0.33985,-0.1875 0.80079,-0.1875 1.39062,0 1.41406,1.47266 v 2.83203 h -0.72266 v -2.78906 q 0,-0.45313 -0.20703,-0.67578 -0.20703,-0.22656 -0.69531,-0.22656 -0.40235,0 -0.66797,0.24218 -0.26563,0.23828 -0.30859,0.64453 v 2.80469 h -0.72657 v -2.76953 q 0,-0.92187 -0.90234,-0.92187 -0.71094,0 -0.97266,0.60546 v 3.08594 h -0.72265 v -4.22656 z" | |||||
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:8px;font-family:Roboto;-inkscape-font-specification:'Roboto, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.75px" | |||||
id="path942" | |||||
inkscape:connector-curvature="0" /> | |||||
<path | |||||
d="m 648.98077,-371.00903 q -0.85937,0 -1.39843,-0.5625 -0.53907,-0.56641 -0.53907,-1.51172 v -0.13281 q 0,-0.62891 0.23829,-1.1211 0.24218,-0.49609 0.67187,-0.77344 0.43359,-0.28125 0.9375,-0.28125 0.82422,0 1.28125,0.54297 0.45703,0.54297 0.45703,1.55469 v 0.30078 h -2.86328 q 0.0156,0.625 0.36328,1.01172 0.35156,0.38281 0.89063,0.38281 0.38281,0 0.64843,-0.15625 0.26563,-0.15625 0.46485,-0.41406 l 0.4414,0.34375 q -0.53125,0.81641 -1.59375,0.81641 z m -0.0898,-3.78907 q -0.4375,0 -0.73437,0.32032 -0.29688,0.3164 -0.36719,0.89062 h 2.11719 v -0.0547 q -0.0312,-0.55078 -0.29688,-0.85156 -0.26562,-0.30469 -0.71875,-0.30469 z" | |||||
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:8px;font-family:Roboto;-inkscape-font-specification:'Roboto, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.75px" | |||||
id="path944" | |||||
inkscape:connector-curvature="0" /> | |||||
<path | |||||
d="m 652.44171,-376.33716 v 1.02344 h 0.78906 v 0.55859 h -0.78906 v 2.6211 q 0,0.2539 0.10547,0.38281 0.10547,0.125 0.35938,0.125 0.125,0 0.34375,-0.0469 v 0.58594 q -0.28516,0.0781 -0.55469,0.0781 -0.48438,0 -0.73047,-0.29297 -0.24609,-0.29297 -0.24609,-0.83203 v -2.6211 h -0.76954 v -0.55859 h 0.76954 v -1.02344 z" | |||||
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:8px;font-family:Roboto;-inkscape-font-specification:'Roboto, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.75px" | |||||
id="path946" | |||||
inkscape:connector-curvature="0" /> | |||||
<path | |||||
d="m 656.11359,-374.66528 q -0.16407,-0.0274 -0.35547,-0.0274 -0.71094,0 -0.96485,0.60547 v 3 h -0.72265 v -4.22656 h 0.70312 l 0.0117,0.48828 q 0.35547,-0.56641 1.00781,-0.56641 0.21094,0 0.32032,0.0547 z" | |||||
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:8px;font-family:Roboto;-inkscape-font-specification:'Roboto, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.75px" | |||||
id="path948" | |||||
inkscape:connector-curvature="0" /> | |||||
<path | |||||
d="m 658.15656,-372.14575 0.98437,-3.16797 h 0.77344 l -1.69922,4.87891 q -0.39453,1.05468 -1.25391,1.05468 l -0.13672,-0.0117 -0.26953,-0.0508 v -0.58593 l 0.19532,0.0156 q 0.36718,0 0.57031,-0.14844 0.20703,-0.14843 0.33984,-0.54297 l 0.16016,-0.42968 -1.50781,-4.17969 h 0.78906 z" | |||||
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:8px;font-family:Roboto;-inkscape-font-specification:'Roboto, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.75px" | |||||
id="path950" | |||||
inkscape:connector-curvature="0" /> | |||||
</g> | |||||
<g | |||||
aria-label="In" | |||||
transform="matrix(1,0,0,-1,-22.5,43.5)" | |||||
style="font-style:normal;font-weight:normal;font-size:9px;line-height:125%;font-family:Sans;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.75px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" | |||||
id="text886"> | |||||
<path | |||||
d="m 652.25812,-257.43188 h -0.75 v -5.6875 h 0.75 z" | |||||
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:8px;font-family:Roboto;-inkscape-font-specification:'Roboto, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.75px" | |||||
id="path1002" | |||||
inkscape:connector-curvature="0" /> | |||||
<path | |||||
d="m 654.19562,-261.65845 0.0234,0.53125 q 0.48437,-0.60937 1.26562,-0.60937 1.33984,0 1.35156,1.51172 v 2.79297 h -0.72265 v -2.79688 q -0.004,-0.45703 -0.21094,-0.67578 -0.20313,-0.21875 -0.63672,-0.21875 -0.35156,0 -0.61719,0.1875 -0.26562,0.1875 -0.41406,0.49219 v 3.01172 h -0.72266 v -4.22657 z" | |||||
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:8px;font-family:Roboto;-inkscape-font-specification:'Roboto, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.75px" | |||||
id="path1004" | |||||
inkscape:connector-curvature="0" /> | |||||
</g> | |||||
<g | |||||
aria-label="Out" | |||||
transform="matrix(1,0,0,-1,19.5,43.5)" | |||||
style="font-style:normal;font-weight:normal;font-size:9px;line-height:125%;font-family:Sans;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.75px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" | |||||
id="text890"> | |||||
<path | |||||
d="m 630.35577,-260.09204 q 0,0.83594 -0.28125,1.46094 -0.28125,0.62109 -0.79687,0.94922 -0.51563,0.32812 -1.20313,0.32812 -0.67187,0 -1.1914,-0.32812 -0.51953,-0.33204 -0.8086,-0.94141 -0.28515,-0.61328 -0.29296,-1.41797 v -0.41016 q 0,-0.82031 0.28515,-1.44921 0.28516,-0.62891 0.80469,-0.96094 0.52344,-0.33594 1.19531,-0.33594 0.6836,0 1.20313,0.33203 0.52343,0.32813 0.80468,0.95703 0.28125,0.625 0.28125,1.45703 z m -0.74609,-0.36719 q 0,-1.01172 -0.40625,-1.55078 -0.40625,-0.54297 -1.13672,-0.54297 -0.71094,0 -1.12109,0.54297 -0.40625,0.53906 -0.41797,1.5 v 0.41797 q 0,0.98047 0.41016,1.54297 0.41406,0.55859 1.13671,0.55859 0.72657,0 1.125,-0.52734 0.39844,-0.53125 0.41016,-1.51953 z" | |||||
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:8px;font-family:Roboto;-inkscape-font-specification:'Roboto, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#000000;stroke-width:0.75px" | |||||
id="path995" | |||||
inkscape:connector-curvature="0" /> | |||||
<path | |||||
d="m 633.97687,-257.84985 q -0.42188,0.49609 -1.23828,0.49609 -0.67578,0 -1.03125,-0.39062 -0.35157,-0.39454 -0.35547,-1.16407 v -2.75 h 0.72265 v 2.73047 q 0,0.96094 0.78125,0.96094 0.82813,0 1.10157,-0.61719 v -3.07422 h 0.72265 v 4.22657 h -0.6875 z" | |||||
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:8px;font-family:Roboto;-inkscape-font-specification:'Roboto, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#000000;stroke-width:0.75px" | |||||
id="path997" | |||||
inkscape:connector-curvature="0" /> | |||||
<path | |||||
d="m 636.75421,-262.68188 v 1.02343 h 0.78906 v 0.5586 h -0.78906 v 2.62109 q 0,0.25391 0.10547,0.38281 0.10547,0.125 0.35938,0.125 0.125,0 0.34375,-0.0469 v 0.58594 q -0.28516,0.0781 -0.55469,0.0781 -0.48438,0 -0.73047,-0.29297 -0.24609,-0.29297 -0.24609,-0.83203 v -2.62109 h -0.76954 v -0.5586 h 0.76954 v -1.02343 z" | |||||
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:8px;font-family:Roboto;-inkscape-font-specification:'Roboto, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#000000;stroke-width:0.75px" | |||||
id="path999" | |||||
inkscape:connector-curvature="0" /> | |||||
</g> | |||||
<g | |||||
aria-label="Folds" | |||||
transform="matrix(1,0,0,-1,0,51.802745)" | |||||
style="font-style:normal;font-weight:normal;font-size:9px;line-height:125%;font-family:Sans;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.75px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" | |||||
id="text894"> | |||||
<path | |||||
d="m 624.61749,-286.9436 h -2.38672 v 2.51172 h -0.75 v -5.6875 h 3.52344 v 0.61718 h -2.77344 v 1.94532 h 2.38672 z" | |||||
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:8px;font-family:Roboto;-inkscape-font-specification:'Roboto, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.75px" | |||||
id="path984" | |||||
inkscape:connector-curvature="0" /> | |||||
<path | |||||
d="m 625.51984,-286.58423 q 0,-0.62109 0.24218,-1.11719 0.2461,-0.49609 0.67969,-0.76562 0.4375,-0.26953 0.9961,-0.26953 0.86328,0 1.39453,0.59765 0.53515,0.59766 0.53515,1.58985 v 0.0508 q 0,0.61719 -0.23828,1.10937 -0.23437,0.48829 -0.67578,0.76172 -0.4375,0.27344 -1.00781,0.27344 -0.85938,0 -1.39453,-0.59766 -0.53125,-0.59765 -0.53125,-1.58203 z m 0.72656,0.0859 q 0,0.70312 0.32422,1.12891 0.32812,0.42578 0.875,0.42578 0.55078,0 0.875,-0.42969 0.32422,-0.43359 0.32422,-1.21094 0,-0.69531 -0.33203,-1.125 -0.32813,-0.43359 -0.875,-0.43359 -0.53516,0 -0.86329,0.42578 -0.32812,0.42578 -0.32812,1.21875 z" | |||||
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:8px;font-family:Roboto;-inkscape-font-specification:'Roboto, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.75px" | |||||
id="path986" | |||||
inkscape:connector-curvature="0" /> | |||||
<path | |||||
d="m 631.0589,-284.43188 h -0.72266 v -6 h 0.72266 z" | |||||
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:8px;font-family:Roboto;-inkscape-font-specification:'Roboto, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.75px" | |||||
id="path988" | |||||
inkscape:connector-curvature="0" /> | |||||
<path | |||||
d="m 632.03546,-286.58032 q 0,-0.97266 0.46094,-1.5625 0.46094,-0.59375 1.20703,-0.59375 0.74219,0 1.17578,0.50781 v -2.20312 h 0.72266 v 6 h -0.66406 l -0.0352,-0.45313 q -0.43359,0.53125 -1.20703,0.53125 -0.73438,0 -1.19922,-0.60156 -0.46094,-0.60156 -0.46094,-1.57031 z m 0.72266,0.082 q 0,0.71875 0.29687,1.125 0.29688,0.40625 0.82032,0.40625 0.6875,0 1.0039,-0.61719 v -1.9414 q -0.32422,-0.59766 -0.99609,-0.59766 -0.53125,0 -0.82813,0.41016 -0.29687,0.41015 -0.29687,1.21484 z" | |||||
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:8px;font-family:Roboto;-inkscape-font-specification:'Roboto, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.75px" | |||||
id="path990" | |||||
inkscape:connector-curvature="0" /> | |||||
<path | |||||
d="m 639.18781,-285.55298 q 0,-0.29297 -0.22266,-0.45312 -0.21875,-0.16407 -0.76953,-0.28125 -0.54688,-0.11719 -0.8711,-0.28125 -0.32031,-0.16407 -0.47656,-0.39063 -0.15234,-0.22656 -0.15234,-0.53906 0,-0.51953 0.4375,-0.87891 0.4414,-0.35937 1.125,-0.35937 0.71875,0 1.16406,0.37109 0.44922,0.3711 0.44922,0.94922 h -0.72656 q 0,-0.29687 -0.25391,-0.51172 -0.25,-0.21484 -0.63281,-0.21484 -0.39453,0 -0.61719,0.17187 -0.22266,0.17188 -0.22266,0.44922 0,0.26172 0.20704,0.39453 0.20703,0.13282 0.74609,0.25391 0.54297,0.12109 0.87891,0.28906 0.33593,0.16797 0.49609,0.40625 0.16406,0.23438 0.16406,0.57422 0,0.56641 -0.45312,0.91016 -0.45313,0.33984 -1.17578,0.33984 -0.50782,0 -0.89844,-0.17969 -0.39063,-0.17968 -0.61328,-0.5 -0.21875,-0.32422 -0.21875,-0.69922 h 0.72265 q 0.0195,0.36329 0.28907,0.57813 0.27343,0.21094 0.71875,0.21094 0.41015,0 0.65625,-0.16407 0.25,-0.16796 0.25,-0.44531 z" | |||||
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:8px;font-family:Roboto;-inkscape-font-specification:'Roboto, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.75px" | |||||
id="path992" | |||||
inkscape:connector-curvature="0" /> | |||||
</g> | |||||
<g | |||||
aria-label="Sym" | |||||
transform="matrix(1,0,0,-1,-1.5,51)" | |||||
style="font-style:normal;font-weight:normal;font-size:9px;line-height:125%;font-family:Sans;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.75px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" | |||||
id="text898"> | |||||
<path | |||||
d="m 648.65656,-287.20142 q -0.96485,-0.27734 -1.40625,-0.67968 -0.4375,-0.40625 -0.4375,-1 0,-0.67188 0.53515,-1.10938 0.53906,-0.4414 1.39844,-0.4414 0.58594,0 1.04297,0.22656 0.46094,0.22656 0.71094,0.625 0.2539,0.39844 0.2539,0.87109 h -0.7539 q 0,-0.51562 -0.32813,-0.80859 -0.32812,-0.29688 -0.92578,-0.29688 -0.55469,0 -0.86719,0.2461 -0.30859,0.24218 -0.30859,0.67578 0,0.34765 0.29297,0.58984 0.29687,0.23828 1.0039,0.4375 0.71094,0.19922 1.10938,0.44141 0.40234,0.23828 0.59375,0.55859 0.19531,0.32031 0.19531,0.75391 0,0.6914 -0.53906,1.10937 -0.53906,0.41407 -1.44141,0.41407 -0.58594,0 -1.09375,-0.22266 -0.50781,-0.22656 -0.78515,-0.61719 -0.27344,-0.39062 -0.27344,-0.88672 h 0.7539 q 0,0.51563 0.37891,0.81641 0.38281,0.29687 1.01953,0.29687 0.59375,0 0.91016,-0.24218 0.3164,-0.24219 0.3164,-0.66016 0,-0.41797 -0.29296,-0.64453 -0.29297,-0.23047 -1.0625,-0.45313 z" | |||||
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:8px;font-family:Roboto;-inkscape-font-specification:'Roboto, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.75px" | |||||
id="path977" | |||||
inkscape:connector-curvature="0" /> | |||||
<path | |||||
d="m 653.00031,-285.72485 0.98437,-3.16797 h 0.77344 l -1.69922,4.8789 q -0.39453,1.05469 -1.25391,1.05469 l -0.13672,-0.0117 -0.26953,-0.0508 v -0.58594 l 0.19532,0.0156 q 0.36718,0 0.57031,-0.14844 0.20703,-0.14844 0.33984,-0.54297 l 0.16016,-0.42968 -1.50781,-4.17969 h 0.78906 z" | |||||
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:8px;font-family:Roboto;-inkscape-font-specification:'Roboto, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.75px" | |||||
id="path979" | |||||
inkscape:connector-curvature="0" /> | |||||
<path | |||||
d="m 656.07843,-288.89282 0.0195,0.46875 q 0.46485,-0.54688 1.25391,-0.54688 0.88672,0 1.20703,0.67969 0.21094,-0.30469 0.54687,-0.49219 0.33985,-0.1875 0.80079,-0.1875 1.39062,0 1.41406,1.47266 v 2.83203 h -0.72266 v -2.78906 q 0,-0.45313 -0.20703,-0.67578 -0.20703,-0.22657 -0.69531,-0.22657 -0.40235,0 -0.66797,0.24219 -0.26563,0.23828 -0.30859,0.64453 v 2.80469 h -0.72657 v -2.76953 q 0,-0.92188 -0.90234,-0.92188 -0.71094,0 -0.97266,0.60547 v 3.08594 h -0.72265 v -4.22656 z" | |||||
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:8px;font-family:Roboto;-inkscape-font-specification:'Roboto, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.75px" | |||||
id="path981" | |||||
inkscape:connector-curvature="0" /> | |||||
</g> | |||||
</g> | |||||
</svg> |
@@ -1,862 +0,0 @@ | |||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?> | |||||
<!-- Created with Inkscape (http://www.inkscape.org/) --> | |||||
<svg | |||||
xmlns:dc="http://purl.org/dc/elements/1.1/" | |||||
xmlns:cc="http://creativecommons.org/ns#" | |||||
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" | |||||
xmlns:svg="http://www.w3.org/2000/svg" | |||||
xmlns="http://www.w3.org/2000/svg" | |||||
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" | |||||
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" | |||||
width="525" | |||||
height="380" | |||||
viewBox="0 0 138.90627 100.54169" | |||||
version="1.1" | |||||
id="svg4541" | |||||
sodipodi:docname="GateSeq.svg" | |||||
inkscape:version="0.92.2 5c3e80d, 2017-08-06"> | |||||
<defs | |||||
id="defs4535" /> | |||||
<sodipodi:namedview | |||||
id="base" | |||||
pagecolor="#ffffff" | |||||
bordercolor="#666666" | |||||
borderopacity="1.0" | |||||
inkscape:pageopacity="0.0" | |||||
inkscape:pageshadow="2" | |||||
inkscape:zoom="3.6527116" | |||||
inkscape:cx="262.5" | |||||
inkscape:cy="227.07608" | |||||
inkscape:document-units="mm" | |||||
inkscape:current-layer="layer1" | |||||
showgrid="true" | |||||
fit-margin-top="0" | |||||
fit-margin-left="0" | |||||
fit-margin-right="0" | |||||
fit-margin-bottom="0" | |||||
inkscape:window-width="1898" | |||||
inkscape:window-height="1026" | |||||
inkscape:window-x="10" | |||||
inkscape:window-y="42" | |||||
inkscape:window-maximized="0" | |||||
units="px" | |||||
inkscape:snap-to-guides="true" | |||||
showguides="false"> | |||||
<inkscape:grid | |||||
type="xygrid" | |||||
id="grid911" /> | |||||
</sodipodi:namedview> | |||||
<metadata | |||||
id="metadata4538"> | |||||
<rdf:RDF> | |||||
<cc:Work | |||||
rdf:about=""> | |||||
<dc:format>image/svg+xml</dc:format> | |||||
<dc:type | |||||
rdf:resource="http://purl.org/dc/dcmitype/StillImage" /> | |||||
<dc:title /> | |||||
</cc:Work> | |||||
</rdf:RDF> | |||||
</metadata> | |||||
<g | |||||
inkscape:label="Layer 1" | |||||
inkscape:groupmode="layer" | |||||
id="layer1" | |||||
transform="translate(36.687896,-107.67835)" | |||||
style="display:inline"> | |||||
<path | |||||
inkscape:connector-curvature="0" | |||||
id="path25077" | |||||
d="M -36.687897,107.67835 H 102.21835 V 208.22002 H -36.687897 Z m 0,0" | |||||
style="fill:#e6e6e6;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.25907877" /> | |||||
<path | |||||
inkscape:connector-curvature="0" | |||||
id="path27449" | |||||
d="M -28.709064,142.96089 H 92.916604" | |||||
style="fill:none;stroke:#000000;stroke-width:0.16576989;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;stroke-opacity:1" /> | |||||
<text | |||||
xml:space="preserve" | |||||
style="font-style:normal;font-weight:normal;font-size:10.58333302px;line-height:125%;font-family:Sans;letter-spacing:0px;word-spacing:0px;display:none;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458335px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" | |||||
x="1.3741193" | |||||
y="115.03571" | |||||
id="text4737"><tspan | |||||
sodipodi:role="line" | |||||
id="tspan4735" | |||||
x="1.3741193" | |||||
y="115.03571" | |||||
style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:3.52777767px;font-family:Helvetica;-inkscape-font-specification:'Helvetica Bold';stroke-width:0.26458335px">GateSEQ-8</tspan></text> | |||||
<g | |||||
transform="matrix(0.27602379,0,0,0.27602379,-14.524476,109.33096)" | |||||
id="text4368" | |||||
style="font-style:normal;font-weight:normal;font-size:38.34210587px;line-height:125%;font-family:Sans;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.95855266px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" | |||||
aria-label="GateSEQ-8"> | |||||
<g | |||||
id="text904" | |||||
style="font-style:normal;font-weight:normal;font-size:11.50263214px;line-height:125%;font-family:Sans;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.95855266px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" | |||||
aria-label="Gate Sequencer"> | |||||
<path | |||||
inkscape:connector-curvature="0" | |||||
id="path906" | |||||
style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:15.33684254px;font-family:Roboto;-inkscape-font-specification:'Roboto, Bold';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.95855266px" | |||||
d="m 125.77477,12.901417 q -0.60659,0.726404 -1.71491,1.130793 -1.10833,0.396901 -2.45629,0.396901 -1.41537,0 -2.48625,-0.614073 -1.0634,-0.621562 -1.64751,-1.797286 -0.57663,-1.175725 -0.59161,-2.7633278 V 8.5130436 q 0,-1.632535 0.54667,-2.8232371 0.55417,-1.1981909 1.58761,-1.827241 1.04093,-0.6365389 2.43382,-0.6365389 1.93957,0 3.03292,0.9285979 1.09335,0.9211092 1.29555,2.6884406 h -2.1867 q -0.14978,-0.9360865 -0.66649,-1.3704307 -0.50924,-0.4343442 -1.40788,-0.4343442 -1.14577,0 -1.74486,0.8611997 -0.5991,0.8611996 -0.60659,2.5611328 v 0.6964485 q 0,1.7149108 0.65152,2.5910878 0.65151,0.876177 1.90961,0.876177 1.26559,0 1.80478,-0.539186 v -1.879662 h -2.04441 V 8.5504871 h 4.29102 z" /> | |||||
<path | |||||
inkscape:connector-curvature="0" | |||||
id="path908" | |||||
style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:15.33684254px;font-family:Roboto;-inkscape-font-specification:'Roboto, Bold';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.95855266px" | |||||
d="m 132.15513,14.279337 q -0.14977,-0.292059 -0.21717,-0.726403 -0.78631,0.876177 -2.04441,0.876177 -1.1907,0 -1.97702,-0.68896 -0.77882,-0.68896 -0.77882,-1.737377 0,-1.288055 0.95106,-1.977014 0.95856,-0.6889602 2.76333,-0.6964489 h 0.996 v -0.464299 q 0,-0.5616519 -0.29206,-0.8986431 -0.28457,-0.3369911 -0.90613,-0.3369911 -0.54668,0 -0.8612,0.2621042 -0.30704,0.2621042 -0.30704,0.7189145 h -2.16423 q 0,-0.7039371 0.43434,-1.3030325 0.43435,-0.5990954 1.22815,-0.9360866 0.7938,-0.3444799 1.78231,-0.3444799 1.49773,0 2.37391,0.756358 0.88367,0.7488693 0.88367,2.1118113 v 3.5121971 q 0.007,1.153258 0.32201,1.744865 v 0.127308 z m -1.78979,-1.505227 q 0.47927,0 0.88366,-0.209684 0.40439,-0.217172 0.5991,-0.576629 V 10.5949 h -0.80878 q -1.62505,0 -1.72989,1.123304 l -0.007,0.127308 q 0,0.404389 0.28457,0.666493 0.28457,0.262105 0.77883,0.262105 z" /> | |||||
<path | |||||
inkscape:connector-curvature="0" | |||||
id="path910" | |||||
style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:15.33684254px;font-family:Roboto;-inkscape-font-specification:'Roboto, Bold';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.95855266px" | |||||
d="m 138.28837,4.1845792 v 1.9919923 h 1.38541 v 1.5876028 h -1.38541 v 4.0438937 q 0,0.449322 0.17224,0.644028 0.17224,0.194706 0.65901,0.194706 0.35945,0 0.63654,-0.05242 v 1.640024 q -0.63654,0.194706 -1.31053,0.194706 -2.27656,0 -2.32149,-2.299029 V 7.7641743 h -1.18321 V 6.1765715 h 1.18321 V 4.1845792 Z" /> | |||||
<path | |||||
inkscape:connector-curvature="0" | |||||
id="path912" | |||||
style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:15.33684254px;font-family:Roboto;-inkscape-font-specification:'Roboto, Bold';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.95855266px" | |||||
d="m 144.60883,14.429111 q -1.78231,0 -2.90561,-1.093349 -1.11582,-1.093349 -1.11582,-2.913102 v -0.209683 q 0,-1.2206571 0.47179,-2.1792097 0.47179,-0.9660414 1.33299,-1.4827612 0.86869,-0.5242085 1.97701,-0.5242085 1.66249,0 2.61356,1.048417 0.95855,1.048417 0.95855,2.9730114 v 0.883665 h -5.15971 q 0.10484,0.793802 0.62905,1.273078 0.5317,0.479276 1.34047,0.479276 1.25062,0 1.95455,-0.906131 l 1.0634,1.190702 q -0.48677,0.688959 -1.31801,1.078371 -0.83125,0.381924 -1.84222,0.381924 z M 144.3617,7.7791517 q -0.64402,0 -1.04841,0.4343442 -0.3969,0.4343442 -0.50924,1.243123 h 3.01046 v -0.17224 q -0.015,-0.7189145 -0.38941,-1.1083265 -0.37444,-0.3969007 -1.0634,-0.3969007 z" /> | |||||
<path | |||||
inkscape:connector-curvature="0" | |||||
id="path914" | |||||
style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:15.33684254px;font-family:Roboto;-inkscape-font-specification:'Roboto, Bold';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.95855266px" | |||||
d="m 158.80739,11.418656 q 0,-0.636539 -0.44932,-0.97353 -0.44932,-0.34448 -1.61756,-0.7189142 -1.16823,-0.3819233 -1.84971,-0.7488693 -1.85719,-1.0034848 -1.85719,-2.703418 0,-0.8836657 0.49425,-1.5726255 0.50174,-0.6964484 1.43034,-1.0858604 0.93609,-0.389412 2.09684,-0.389412 1.16823,0 2.08185,0.4268555 0.91362,0.4193668 1.41537,1.1907021 0.50923,0.7713353 0.50923,1.7523541 h -2.24661 q 0,-0.7488693 -0.47179,-1.1607474 -0.47179,-0.4193668 -1.3255,-0.4193668 -0.82375,0 -1.28056,0.3519686 -0.45681,0.3444798 -0.45681,0.9136205 0,0.5316972 0.53169,0.8911544 0.53919,0.3594573 1.58012,0.6739823 1.9171,0.5766294 2.79328,1.4303403 0.87618,0.8537108 0.87618,2.1267888 0,1.415363 -1.07089,2.224142 -1.07088,0.80129 -2.88314,0.80129 -1.2581,0 -2.29154,-0.45681 -1.03344,-0.464299 -1.58012,-1.26559 -0.53918,-0.80129 -0.53918,-1.857195 h 2.25409 q 0,1.804775 2.15675,1.804775 0.80129,0 1.25061,-0.322014 0.44932,-0.329503 0.44932,-0.913621 z" /> | |||||
<path | |||||
inkscape:connector-curvature="0" | |||||
id="path916" | |||||
style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:15.33684254px;font-family:Roboto;-inkscape-font-specification:'Roboto, Bold';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.95855266px" | |||||
d="m 166.17626,14.429111 q -1.7823,0 -2.90561,-1.093349 -1.11581,-1.093349 -1.11581,-2.913102 v -0.209683 q 0,-1.2206571 0.47178,-2.1792097 0.47179,-0.9660414 1.33299,-1.4827612 0.86869,-0.5242085 1.97702,-0.5242085 1.66249,0 2.61355,1.048417 0.95855,1.048417 0.95855,2.9730114 v 0.883665 h -5.15971 q 0.10484,0.793802 0.62905,1.273078 0.5317,0.479276 1.34048,0.479276 1.25061,0 1.95455,-0.906131 l 1.06339,1.190702 q -0.48676,0.688959 -1.31801,1.078371 -0.83124,0.381924 -1.84222,0.381924 z m -0.24712,-6.6499593 q -0.64403,0 -1.04842,0.4343442 -0.3969,0.4343442 -0.50923,1.243123 h 3.01045 v -0.17224 q -0.015,-0.7189145 -0.38941,-1.1083265 -0.37443,-0.3969007 -1.06339,-0.3969007 z" /> | |||||
<path | |||||
inkscape:connector-curvature="0" | |||||
id="path918" | |||||
style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:15.33684254px;font-family:Roboto;-inkscape-font-specification:'Roboto, Bold';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.95855266px" | |||||
d="m 170.40737,10.153067 q 0,-1.9096163 0.84623,-3.0179429 0.85371,-1.1083265 2.33647,-1.1083265 1.30303,0 2.07437,0.9959962 l 0.14228,-0.8462223 h 1.90213 V 17.394633 h -2.17172 v -3.811744 q -0.74887,0.846222 -1.96204,0.846222 -1.44532,0 -2.30652,-1.123304 -0.8612,-1.123304 -0.8612,-3.15274 z m 2.16424,0.157263 q 0,1.160747 0.40439,1.767331 0.41187,0.606584 1.15325,0.606584 0.996,0 1.40788,-0.793801 V 8.5429984 q -0.40439,-0.7638467 -1.3929,-0.7638467 -0.74887,0 -1.16075,0.6065841 -0.41187,0.6065841 -0.41187,1.9245942 z" /> | |||||
<path | |||||
inkscape:connector-curvature="0" | |||||
id="path920" | |||||
style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:15.33684254px;font-family:Roboto;-inkscape-font-specification:'Roboto, Bold';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.95855266px" | |||||
d="m 184.25397,13.455581 q -0.80129,0.97353 -2.21666,0.97353 -1.30303,0 -1.99199,-0.748869 -0.68147,-0.74887 -0.69645,-2.194187 V 6.1765715 h 2.16424 v 5.2345965 q 0,1.265589 1.15325,1.265589 1.10084,0 1.51272,-0.763847 V 6.1765715 h 2.17172 v 8.1027655 h -2.03692 z" /> | |||||
<path | |||||
inkscape:connector-curvature="0" | |||||
id="path922" | |||||
style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:15.33684254px;font-family:Roboto;-inkscape-font-specification:'Roboto, Bold';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.95855266px" | |||||
d="m 191.72768,14.429111 q -1.78231,0 -2.90561,-1.093349 -1.11582,-1.093349 -1.11582,-2.913102 v -0.209683 q 0,-1.2206571 0.47179,-2.1792097 0.47179,-0.9660414 1.33299,-1.4827612 0.86869,-0.5242085 1.97701,-0.5242085 1.66249,0 2.61356,1.048417 0.95855,1.048417 0.95855,2.9730114 v 0.883665 h -5.15971 q 0.10484,0.793802 0.62905,1.273078 0.5317,0.479276 1.34048,0.479276 1.25061,0 1.95455,-0.906131 l 1.06339,1.190702 q -0.48676,0.688959 -1.31801,1.078371 -0.83124,0.381924 -1.84222,0.381924 z m -0.24712,-6.6499593 q -0.64403,0 -1.04842,0.4343442 -0.3969,0.4343442 -0.50923,1.243123 h 3.01045 v -0.17224 q -0.015,-0.7189145 -0.38941,-1.1083265 -0.37443,-0.3969007 -1.06339,-0.3969007 z" /> | |||||
<path | |||||
inkscape:connector-curvature="0" | |||||
id="path924" | |||||
style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:15.33684254px;font-family:Roboto;-inkscape-font-specification:'Roboto, Bold';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.95855266px" | |||||
d="m 198.28778,6.1765715 0.0674,0.9360866 q 0.86869,-1.0858605 2.32899,-1.0858605 1.28805,0 1.9171,0.756358 0.62905,0.7563579 0.64403,2.2615852 v 5.2345962 h -2.16423 V 9.0971616 q 0,-0.6889597 -0.29955,-0.9959961 -0.29955,-0.3145251 -0.996,-0.3145251 -0.91362,0 -1.37043,0.778824 v 5.7138726 h -2.16423 V 6.1765715 Z" /> | |||||
<path | |||||
inkscape:connector-curvature="0" | |||||
id="path926" | |||||
style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:15.33684254px;font-family:Roboto;-inkscape-font-specification:'Roboto, Bold';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.95855266px" | |||||
d="m 208.26272,12.684245 q 0.59909,0 0.97353,-0.329502 0.37443,-0.329503 0.38941,-0.876177 h 2.02944 q -0.007,0.823756 -0.44933,1.512716 -0.44183,0.681471 -1.21316,1.063394 -0.76385,0.374435 -1.69245,0.374435 -1.73738,0 -2.74086,-1.100838 -1.00348,-1.108327 -1.00348,-3.055387 v -0.142285 q 0,-1.872173 0.99599,-2.9879882 0.996,-1.1158152 2.73337,-1.1158152 1.52021,0 2.43383,0.8686884 0.92111,0.8611996 0.93609,2.2990286 h -2.02944 q -0.015,-0.6290502 -0.38941,-1.0184622 -0.37444,-0.3969007 -0.98851,-0.3969007 -0.75636,0 -1.14577,0.5541633 -0.38192,0.5466745 -0.38192,1.782309 v 0.224661 q 0,1.250611 0.38192,1.797286 0.38192,0.546674 1.16075,0.546674 z" /> | |||||
<path | |||||
inkscape:connector-curvature="0" | |||||
id="path928" | |||||
style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:15.33684254px;font-family:Roboto;-inkscape-font-specification:'Roboto, Bold';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.95855266px" | |||||
d="m 216.6201,14.429111 q -1.78231,0 -2.90561,-1.093349 -1.11582,-1.093349 -1.11582,-2.913102 v -0.209683 q 0,-1.2206571 0.47179,-2.1792097 0.47179,-0.9660414 1.33299,-1.4827612 0.86869,-0.5242085 1.97701,-0.5242085 1.66249,0 2.61356,1.048417 0.95855,1.048417 0.95855,2.9730114 v 0.883665 h -5.15971 q 0.10484,0.793802 0.62905,1.273078 0.5317,0.479276 1.34048,0.479276 1.25061,0 1.95454,-0.906131 l 1.0634,1.190702 q -0.48677,0.688959 -1.31801,1.078371 -0.83125,0.381924 -1.84222,0.381924 z m -0.24713,-6.6499593 q -0.64402,0 -1.04841,0.4343442 -0.3969,0.4343442 -0.50923,1.243123 h 3.01045 v -0.17224 q -0.015,-0.7189145 -0.38941,-1.1083265 -0.37444,-0.3969007 -1.0634,-0.3969007 z" /> | |||||
<path | |||||
inkscape:connector-curvature="0" | |||||
id="path930" | |||||
style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:15.33684254px;font-family:Roboto;-inkscape-font-specification:'Roboto, Bold';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.95855266px" | |||||
d="m 225.74133,8.2060072 q -0.44184,-0.059909 -0.77883,-0.059909 -1.22814,0 -1.61007,0.8312448 v 5.301994 H 221.1882 V 6.1765715 h 2.04441 l 0.0599,0.9660413 q 0.65152,-1.1158152 1.80478,-1.1158152 0.35946,0 0.67398,0.097353 z" /> | |||||
</g> | |||||
</g> | |||||
<text | |||||
xml:space="preserve" | |||||
style="font-style:normal;font-weight:normal;font-size:10.58333302px;line-height:125%;font-family:Sans;letter-spacing:0px;word-spacing:0px;display:none;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458335px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" | |||||
x="-29.493109" | |||||
y="147.16351" | |||||
id="text4698"><tspan | |||||
sodipodi:role="line" | |||||
id="tspan4696" | |||||
x="-29.493109" | |||||
y="147.16351" | |||||
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:2.64583325px;font-family:Helvetica;-inkscape-font-specification:Helvetica;letter-spacing:0px;word-spacing:2.01083326px;stroke-width:0.26458335px" | |||||
dx="0 0.18898809 0 -0.37797618 0 0.18898809 -0.56696427 0 0 -0.56696427 0 0 0 0 0 -0.75595236 0 0 -4.1151242e-11 0 0 -0.75595236 0 0 0.18898809 0 1.3229166 0 0 0.94494051 0 0 0.94494051">1 2 3 4 5 6 7 8 9 10 11 12</tspan></text> | |||||
<path | |||||
inkscape:connector-curvature="0" | |||||
id="path27449-8" | |||||
d="M 32.362809,201.79707 V 146.65984" | |||||
style="display:inline;fill:none;stroke:#000000;stroke-width:0.11161314;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;stroke-opacity:1" /> | |||||
<g | |||||
id="text914" | |||||
style="font-style:normal;font-weight:normal;font-size:11.50263214px;line-height:125%;font-family:Sans;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.95855266px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" | |||||
aria-label="V/Pat" | |||||
transform="matrix(0.27602379,0,0,0.27602379,-36.687896,107.67836)"> | |||||
<path | |||||
inkscape:connector-curvature="0" | |||||
id="path940" | |||||
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:8.94649124px;font-family:Roboto;-inkscape-font-specification:'Roboto, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.95855266px" | |||||
d="m 131.528,86.828226 1.81726,-5.246453 h 0.91737 l -2.35894,6.360396 h -0.74263 l -2.35457,-6.360396 h 0.913 z" /> | |||||
<path | |||||
inkscape:connector-curvature="0" | |||||
id="path942" | |||||
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:8.94649124px;font-family:Roboto;-inkscape-font-specification:'Roboto, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.95855266px" | |||||
d="m 135.15378,88.48822 h -0.69458 l 2.65599,-6.906447 h 0.69021 z" /> | |||||
<path | |||||
inkscape:connector-curvature="0" | |||||
id="path944" | |||||
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:8.94649124px;font-family:Roboto;-inkscape-font-specification:'Roboto, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.95855266px" | |||||
d="m 139.6445,85.452179 v 2.48999 h -0.83873 v -6.360396 h 2.34583 q 1.04405,0 1.63378,0.532945 0.5941,0.532946 0.5941,1.410995 0,0.926101 -0.58099,1.428468 -0.57663,0.497998 -1.65563,0.497998 z m 0,-0.685839 h 1.5071 q 0.67273,0 1.03094,-0.314526 0.35821,-0.318893 0.35821,-0.917364 0,-0.567893 -0.35821,-0.908628 -0.35821,-0.340736 -0.98289,-0.353841 h -1.55515 z" /> | |||||
<path | |||||
inkscape:connector-curvature="0" | |||||
id="path946" | |||||
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:8.94649124px;font-family:Roboto;-inkscape-font-specification:'Roboto, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.95855266px" | |||||
d="m 147.18873,87.942169 q -0.0699,-0.139789 -0.11358,-0.497998 -0.56352,0.585366 -1.34546,0.585366 -0.69895,0 -1.14889,-0.393156 -0.44558,-0.397525 -0.44558,-1.004733 0,-0.73826 0.55915,-1.144522 0.56353,-0.41063 1.58137,-0.41063 h 0.78631 v -0.371314 q 0,-0.423735 -0.25337,-0.672734 -0.25337,-0.253368 -0.747,-0.253368 -0.43247,0 -0.72515,0.21842 -0.29268,0.218421 -0.29268,0.528577 h -0.81253 q 0,-0.35384 0.249,-0.681471 0.25337,-0.331998 0.68147,-0.524208 0.43248,-0.19221 0.94795,-0.19221 0.81689,0 1.27994,0.41063 0.46305,0.406262 0.48052,1.12268 v 2.175465 q 0,0.650892 0.166,1.035312 v 0.06989 z m -1.3411,-0.615945 q 0.38005,0 0.72079,-0.196578 0.34073,-0.196578 0.49363,-0.511103 v -0.969786 h -0.63342 q -1.48526,0 -1.48526,0.869313 0,0.380051 0.25337,0.594102 0.25337,0.214052 0.65089,0.214052 z" /> | |||||
<path | |||||
inkscape:connector-curvature="0" | |||||
id="path948" | |||||
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:8.94649124px;font-family:Roboto;-inkscape-font-specification:'Roboto, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.95855266px" | |||||
d="m 150.24225,82.071034 v 1.144522 h 0.88241 v 0.624682 h -0.88241 v 2.931199 q 0,0.283946 0.11794,0.428104 0.11795,0.139788 0.4019,0.139788 0.13979,0 0.38442,-0.05242 v 0.65526 q -0.3189,0.08737 -0.62032,0.08737 -0.54168,0 -0.81689,-0.32763 -0.27521,-0.32763 -0.27521,-0.93047 V 83.84024 h -0.86057 v -0.624682 h 0.86057 v -1.144522 z" /> | |||||
</g> | |||||
<g | |||||
transform="matrix(0.27602379,0,0,0.27602379,-40.392063,111.38253)" | |||||
id="text953" | |||||
style="font-style:normal;font-weight:normal;font-size:11.50263214px;line-height:125%;font-family:Sans;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.95855266px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" | |||||
aria-label="Bank"> | |||||
<path | |||||
inkscape:connector-curvature="0" | |||||
id="path955" | |||||
style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:11.50263214px;font-family:Roboto;-inkscape-font-specification:'Roboto, Bold';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.95855266px" | |||||
d="m 332.38939,33.549305 v -8.177653 h 2.86442 q 1.48838,0 2.25784,0.572885 0.76947,0.567269 0.76947,1.668107 0,0.600967 -0.30891,1.061522 -0.30891,0.454938 -0.85933,0.668366 0.62905,0.157262 0.98851,0.634666 0.36507,0.477405 0.36507,1.168237 0,1.179469 -0.75261,1.786053 -0.75261,0.606584 -2.14551,0.617817 z m 1.68495,-3.560873 v 2.207292 h 1.44345 q 0.59535,0 0.92673,-0.280826 0.33699,-0.286443 0.33699,-0.786313 0,-1.123304 -1.16262,-1.140153 z m 0,-1.190703 h 1.24687 q 1.27495,-0.02247 1.27495,-1.01659 0,-0.556035 -0.32576,-0.797545 -0.32014,-0.247127 -1.01659,-0.247127 h -1.17947 z" /> | |||||
<path | |||||
inkscape:connector-curvature="0" | |||||
id="path957" | |||||
style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:11.50263214px;font-family:Roboto;-inkscape-font-specification:'Roboto, Bold';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.95855266px" | |||||
d="m 343.15064,33.549305 q -0.11233,-0.219044 -0.16288,-0.544802 -0.58973,0.657132 -1.53331,0.657132 -0.89303,0 -1.48276,-0.516719 -0.58412,-0.51672 -0.58412,-1.303033 0,-0.966041 0.7133,-1.482761 0.71891,-0.51672 2.0725,-0.522336 h 0.74699 v -0.348225 q 0,-0.421239 -0.21904,-0.673982 -0.21343,-0.252743 -0.6796,-0.252743 -0.41001,0 -0.6459,0.196578 -0.23028,0.196578 -0.23028,0.539186 h -1.62317 q 0,-0.527953 0.32576,-0.977275 0.32575,-0.449321 0.92111,-0.702065 0.59535,-0.25836 1.33673,-0.25836 1.1233,0 1.78043,0.567269 0.66275,0.561652 0.66275,1.583858 v 2.634148 q 0.006,0.864944 0.24151,1.308649 v 0.09548 z m -1.34235,-1.12892 q 0.35946,0 0.66275,-0.157263 0.30329,-0.162879 0.44932,-0.432472 v -1.044673 h -0.60658 q -1.21879,0 -1.29742,0.842478 l -0.006,0.09548 q 0,0.303292 0.21342,0.49987 0.21343,0.196579 0.58412,0.196579 z" /> | |||||
<path | |||||
inkscape:connector-curvature="0" | |||||
id="path959" | |||||
style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:11.50263214px;font-family:Roboto;-inkscape-font-specification:'Roboto, Bold';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.95855266px" | |||||
d="m 347.30125,27.472231 0.0506,0.702065 q 0.65151,-0.814396 1.74673,-0.814396 0.96605,0 1.43783,0.567269 0.47179,0.567268 0.48302,1.696189 v 3.925947 h -1.62317 v -3.886632 q 0,-0.516719 -0.22466,-0.746997 -0.22466,-0.235894 -0.747,-0.235894 -0.68521,0 -1.02782,0.584119 v 4.285404 h -1.62318 v -6.077074 z" /> | |||||
<path | |||||
inkscape:connector-curvature="0" | |||||
id="path961" | |||||
style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:11.50263214px;font-family:Roboto;-inkscape-font-specification:'Roboto, Bold';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.95855266px" | |||||
d="m 354.46231,31.111735 -0.58412,0.584118 v 1.853452 h -1.62317 v -8.626974 h 1.62317 v 4.779658 l 0.31453,-0.404389 1.55577,-1.825369 h 1.94894 l -2.19606,2.53305 2.38702,3.544024 h -1.86469 z" /> | |||||
</g> | |||||
<g | |||||
transform="matrix(0.27602379,0,0,0.27602379,-39.045104,109.26586)" | |||||
id="text966" | |||||
style="font-style:normal;font-weight:normal;font-size:11.50263214px;line-height:125%;font-family:Sans;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.95855266px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" | |||||
aria-label="Pattern"> | |||||
<path | |||||
inkscape:connector-curvature="0" | |||||
id="path968" | |||||
style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:11.50263214px;font-family:Roboto;-inkscape-font-specification:'Roboto, Bold';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.95855266px" | |||||
d="m 323.53025,78.595662 v 2.881274 h -1.68496 v -8.177652 h 3.19018 q 0.92111,0 1.61756,0.336991 0.70207,0.336991 1.07837,0.960425 0.37631,0.617817 0.37631,1.409746 0,1.201935 -0.82563,1.898384 -0.82001,0.690832 -2.27469,0.690832 z m 0,-1.364814 h 1.50522 q 0.66837,0 1.01659,-0.314526 0.35384,-0.314525 0.35384,-0.898643 0,-0.600967 -0.35384,-0.971658 -0.35384,-0.37069 -0.97727,-0.381923 h -1.54454 z" /> | |||||
<path | |||||
inkscape:connector-curvature="0" | |||||
id="path970" | |||||
style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:11.50263214px;font-family:Roboto;-inkscape-font-specification:'Roboto, Bold';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.95855266px" | |||||
d="m 332.60654,81.476936 q -0.11233,-0.219044 -0.16288,-0.544802 -0.58973,0.657133 -1.53331,0.657133 -0.89302,0 -1.48276,-0.51672 -0.58412,-0.51672 -0.58412,-1.303033 0,-0.966041 0.7133,-1.482761 0.71892,-0.51672 2.0725,-0.522336 h 0.74699 v -0.348224 q 0,-0.421239 -0.21904,-0.673983 -0.21343,-0.252743 -0.6796,-0.252743 -0.41,0 -0.6459,0.196578 -0.23028,0.196578 -0.23028,0.539186 h -1.62317 q 0,-0.527953 0.32576,-0.977274 0.32576,-0.449322 0.92111,-0.702065 0.59535,-0.25836 1.33673,-0.25836 1.1233,0 1.78044,0.567268 0.66275,0.561652 0.66275,1.583859 v 2.634147 q 0.006,0.864944 0.24151,1.30865 v 0.09548 z m -1.34235,-1.12892 q 0.35946,0 0.66275,-0.157263 0.30329,-0.162879 0.44932,-0.432472 v -1.044672 h -0.60658 q -1.21878,0 -1.29742,0.842478 l -0.006,0.09548 q 0,0.303293 0.21343,0.499871 0.21342,0.196578 0.58411,0.196578 z" /> | |||||
<path | |||||
inkscape:connector-curvature="0" | |||||
id="path972" | |||||
style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:11.50263214px;font-family:Roboto;-inkscape-font-specification:'Roboto, Bold';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.95855266px" | |||||
d="m 337.20647,73.905868 v 1.493994 h 1.03906 v 1.190702 h -1.03906 v 3.032921 q 0,0.336991 0.12918,0.483021 0.12918,0.146029 0.49426,0.146029 0.26959,0 0.4774,-0.03932 v 1.230018 q -0.4774,0.14603 -0.98289,0.14603 -1.70742,0 -1.74112,-1.724272 V 76.59056 h -0.88741 v -1.190702 h 0.88741 v -1.493994 z" /> | |||||
<path | |||||
inkscape:connector-curvature="0" | |||||
id="path974" | |||||
style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:11.50263214px;font-family:Roboto;-inkscape-font-specification:'Roboto, Bold';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.95855266px" | |||||
d="m 341.0931,73.905868 v 1.493994 h 1.03906 v 1.190702 h -1.03906 v 3.032921 q 0,0.336991 0.12918,0.483021 0.12918,0.146029 0.49426,0.146029 0.26959,0 0.4774,-0.03932 v 1.230018 q -0.4774,0.14603 -0.98289,0.14603 -1.70742,0 -1.74112,-1.724272 V 76.59056 h -0.88741 v -1.190702 h 0.88741 v -1.493994 z" /> | |||||
<path | |||||
inkscape:connector-curvature="0" | |||||
id="path976" | |||||
style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:11.50263214px;font-family:Roboto;-inkscape-font-specification:'Roboto, Bold';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.95855266px" | |||||
d="m 345.83345,81.589267 q -1.33674,0 -2.17921,-0.820012 -0.83687,-0.820012 -0.83687,-2.184826 v -0.157263 q 0,-0.915492 0.35384,-1.634407 0.35385,-0.724531 0.99975,-1.112071 0.65151,-0.393156 1.48276,-0.393156 1.24686,0 1.96016,0.786312 0.71892,0.786313 0.71892,2.229759 v 0.662749 h -3.86979 q 0.0786,0.595351 0.47179,0.954808 0.39878,0.359458 1.00536,0.359458 0.93796,0 1.46591,-0.679599 l 0.79755,0.893026 q -0.36508,0.51672 -0.98851,0.808779 -0.62343,0.286443 -1.38166,0.286443 z m -0.18535,-4.98747 q -0.48302,0 -0.78631,0.325758 -0.29768,0.325759 -0.38193,0.932343 h 2.25784 v -0.12918 q -0.0112,-0.539186 -0.29205,-0.831245 -0.28083,-0.297676 -0.79755,-0.297676 z" /> | |||||
<path | |||||
inkscape:connector-curvature="0" | |||||
id="path978" | |||||
style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:11.50263214px;font-family:Roboto;-inkscape-font-specification:'Roboto, Bold';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.95855266px" | |||||
d="m 352.67437,76.921939 q -0.33138,-0.04493 -0.58412,-0.04493 -0.92111,0 -1.20755,0.623433 v 3.976496 h -1.62318 v -6.077074 h 1.53331 l 0.0449,0.724531 q 0.48863,-0.836861 1.35358,-0.836861 0.26959,0 0.50548,0.07301 z" /> | |||||
<path | |||||
inkscape:connector-curvature="0" | |||||
id="path980" | |||||
style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:11.50263214px;font-family:Roboto;-inkscape-font-specification:'Roboto, Bold';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.95855266px" | |||||
d="m 354.95467,75.399862 0.0505,0.702065 q 0.65152,-0.814395 1.74674,-0.814395 0.96604,0 1.43783,0.567268 0.47179,0.567269 0.48302,1.696189 v 3.925947 h -1.62317 v -3.886631 q 0,-0.51672 -0.22467,-0.746997 -0.22466,-0.235894 -0.74699,-0.235894 -0.68522,0 -1.02783,0.584118 v 4.285404 h -1.62317 v -6.077074 z" /> | |||||
</g> | |||||
<g | |||||
transform="matrix(0.27602379,0,0,0.27602379,-40.70564,107.44479)" | |||||
id="text985" | |||||
style="font-style:normal;font-weight:normal;font-size:11.50263214px;line-height:125%;font-family:Sans;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.95855266px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" | |||||
aria-label="Copy"> | |||||
<g | |||||
id="g1354"> | |||||
<path | |||||
d="m 187.54182,45.909391 q -0.11795,1.009101 -0.747,1.55952 -0.62468,0.54605 -1.66436,0.54605 -1.12705,0 -1.80852,-0.808154 -0.6771,-0.808155 -0.6771,-2.16236 V 44.43287 q 0,-0.886786 0.31453,-1.55952 0.31889,-0.672734 0.89989,-1.030943 0.58099,-0.362578 1.34546,-0.362578 1.01347,0 1.62505,0.567893 0.61158,0.563524 0.71205,1.563888 h -0.8431 q -0.10921,-0.760102 -0.47616,-1.100838 -0.36257,-0.340735 -1.01784,-0.340735 -0.80378,0 -1.26246,0.594103 -0.45432,0.594103 -0.45432,1.690572 v 0.615945 q 0,1.035312 0.43247,1.646888 0.43248,0.611577 1.21005,0.611577 0.69895,0 1.07026,-0.314525 0.37568,-0.318894 0.498,-1.105206 z" | |||||
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:8.94649124px;font-family:Roboto;-inkscape-font-specification:'Roboto, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.95855266px" | |||||
id="path1019" | |||||
inkscape:connector-curvature="0" /> | |||||
<path | |||||
d="m 188.34124,45.520603 q 0,-0.694577 0.27084,-1.249364 0.27521,-0.554787 0.7601,-0.856207 0.48926,-0.30142 1.11395,-0.30142 0.96541,0 1.55952,0.668366 0.59847,0.668366 0.59847,1.77794 v 0.05679 q 0,0.690207 -0.26648,1.240626 -0.2621,0.546051 -0.75573,0.851839 -0.48926,0.305788 -1.12705,0.305788 -0.96105,0 -1.55952,-0.668365 -0.5941,-0.668366 -0.5941,-1.769204 z m 0.81252,0.09611 q 0,0.786312 0.36258,1.262468 0.36695,0.476156 0.97852,0.476156 0.61595,0 0.97852,-0.480524 0.36258,-0.484893 0.36258,-1.354205 0,-0.777576 -0.37131,-1.258101 -0.36695,-0.484892 -0.97852,-0.484892 -0.59848,0 -0.96542,0.476156 -0.36695,0.476156 -0.36695,1.362942 z" | |||||
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:8.94649124px;font-family:Roboto;-inkscape-font-specification:'Roboto, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.95855266px" | |||||
id="path1021" | |||||
inkscape:connector-curvature="0" /> | |||||
<path | |||||
d="m 197.65031,45.616708 q 0,1.078995 -0.49363,1.738624 -0.49363,0.659629 -1.33673,0.659629 -0.86058,0 -1.35421,-0.54605 v 2.275938 h -0.80815 V 43.20098 h 0.73826 l 0.0393,0.524209 q 0.49363,-0.611577 1.37168,-0.611577 0.85184,0 1.34547,0.642155 0.498,0.642156 0.498,1.786678 z m -0.80816,-0.09174 q 0,-0.799418 -0.34073,-1.262469 -0.34074,-0.46305 -0.93484,-0.46305 -0.73389,0 -1.10084,0.650892 v 2.258465 q 0.36258,0.646523 1.10958,0.646523 0.58099,0 0.92173,-0.458682 0.3451,-0.463051 0.3451,-1.371679 z" | |||||
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:8.94649124px;font-family:Roboto;-inkscape-font-specification:'Roboto, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.95855266px" | |||||
id="path1023" | |||||
inkscape:connector-curvature="0" /> | |||||
<path | |||||
d="m 200.21893,46.743756 1.10084,-3.542776 h 0.86494 l -1.90025,5.456137 q -0.44121,1.179469 -1.40226,1.179469 l -0.1529,-0.0131 -0.30142,-0.05679 v -0.65526 l 0.21842,0.01747 q 0.41063,0 0.63779,-0.165999 0.23153,-0.165999 0.38005,-0.607208 l 0.17911,-0.480525 -1.68621,-4.674192 h 0.88242 z" | |||||
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:8.94649124px;font-family:Roboto;-inkscape-font-specification:'Roboto, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.95855266px" | |||||
id="path1025" | |||||
inkscape:connector-curvature="0" /> | |||||
</g> | |||||
</g> | |||||
<g | |||||
transform="matrix(0.27602379,0,0,0.27602379,-40.765326,108.76562)" | |||||
id="text989" | |||||
style="font-style:normal;font-weight:normal;font-size:11.50263214px;line-height:125%;font-family:Sans;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.95855266px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" | |||||
aria-label="Clear"> | |||||
<path | |||||
inkscape:connector-curvature="0" | |||||
id="path1008" | |||||
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:8.94649124px;font-family:Roboto;-inkscape-font-specification:'Roboto, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.95855266px" | |||||
d="m 187.54182,82.334413 q -0.11795,1.009101 -0.747,1.55952 -0.62468,0.54605 -1.66436,0.54605 -1.12705,0 -1.80852,-0.808154 -0.6771,-0.808155 -0.6771,-2.16236 v -0.611577 q 0,-0.886786 0.31453,-1.55952 0.31889,-0.672734 0.89989,-1.030943 0.58099,-0.362578 1.34546,-0.362578 1.01347,0 1.62505,0.567893 0.61158,0.563524 0.71205,1.563888 h -0.8431 q -0.10921,-0.760102 -0.47616,-1.100838 -0.36257,-0.340735 -1.01784,-0.340735 -0.80378,0 -1.26246,0.594103 -0.45432,0.594103 -0.45432,1.690572 v 0.615945 q 0,1.035312 0.43247,1.646888 0.43248,0.611577 1.21005,0.611577 0.69895,0 1.07026,-0.314525 0.37568,-0.318894 0.498,-1.105206 z" /> | |||||
<path | |||||
inkscape:connector-curvature="0" | |||||
id="path1010" | |||||
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:8.94649124px;font-family:Roboto;-inkscape-font-specification:'Roboto, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.95855266px" | |||||
d="m 189.43334,84.352615 h -0.80815 v -6.709868 h 0.80815 z" /> | |||||
<path | |||||
inkscape:connector-curvature="0" | |||||
id="path1012" | |||||
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:8.94649124px;font-family:Roboto;-inkscape-font-specification:'Roboto, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.95855266px" | |||||
d="m 192.68343,84.439983 q -0.96105,0 -1.56389,-0.62905 -0.60284,-0.633418 -0.60284,-1.690572 v -0.148526 q 0,-0.703313 0.26648,-1.253732 0.27084,-0.554787 0.75136,-0.864944 0.48489,-0.314525 1.04842,-0.314525 0.92173,0 1.43284,0.607208 0.5111,0.607209 0.5111,1.738625 v 0.336367 h -3.20204 q 0.0175,0.698945 0.40626,1.131417 0.39316,0.428103 0.996,0.428103 0.4281,0 0.72515,-0.174736 0.29705,-0.174736 0.51984,-0.463051 l 0.49363,0.38442 q -0.5941,0.912996 -1.78231,0.912996 z m -0.10047,-4.237351 q -0.48926,0 -0.82126,0.358209 -0.332,0.35384 -0.41063,0.995996 h 2.36767 v -0.06116 q -0.0349,-0.615945 -0.33199,-0.952312 -0.29706,-0.340735 -0.80379,-0.340735 z" /> | |||||
<path | |||||
inkscape:connector-curvature="0" | |||||
id="path1014" | |||||
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:8.94649124px;font-family:Roboto;-inkscape-font-specification:'Roboto, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.95855266px" | |||||
d="m 198.37546,84.352615 q -0.0699,-0.139789 -0.11358,-0.497998 -0.56352,0.585366 -1.34546,0.585366 -0.69895,0 -1.14889,-0.393156 -0.44558,-0.397525 -0.44558,-1.004733 0,-0.73826 0.55915,-1.144522 0.56353,-0.41063 1.58137,-0.41063 h 0.78631 v -0.371314 q 0,-0.423735 -0.25337,-0.672734 -0.25337,-0.253368 -0.747,-0.253368 -0.43247,0 -0.72515,0.218421 -0.29268,0.21842 -0.29268,0.528576 h -0.81253 q 0,-0.35384 0.249,-0.681471 0.25337,-0.331998 0.68147,-0.524208 0.43247,-0.19221 0.94795,-0.19221 0.81689,0 1.27994,0.41063 0.46305,0.406262 0.48052,1.12268 v 2.175465 q 0,0.650892 0.166,1.035312 v 0.06989 z m -1.3411,-0.615945 q 0.38005,0 0.72079,-0.196578 0.34073,-0.196578 0.49363,-0.511103 v -0.969786 h -0.63342 q -1.48526,0 -1.48526,0.869313 0,0.380051 0.25337,0.594103 0.25337,0.214051 0.65089,0.214051 z" /> | |||||
<path | |||||
inkscape:connector-curvature="0" | |||||
id="path1016" | |||||
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:8.94649124px;font-family:Roboto;-inkscape-font-specification:'Roboto, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.95855266px" | |||||
d="m 202.61718,80.351157 q -0.18347,-0.03058 -0.39752,-0.03058 -0.79505,0 -1.079,0.677102 v 3.354934 h -0.80815 V 79.626 h 0.78631 l 0.0131,0.546051 q 0.39753,-0.633419 1.12705,-0.633419 0.2359,0 0.35821,0.06116 z" /> | |||||
</g> | |||||
<g | |||||
transform="matrix(0.27602379,0,0,0.27602379,-42.387634,108.76562)" | |||||
id="text993" | |||||
style="font-style:normal;font-weight:normal;font-size:11.50263214px;line-height:125%;font-family:Sans;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.95855266px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" | |||||
aria-label="Length"> | |||||
<path | |||||
inkscape:connector-curvature="0" | |||||
id="path995" | |||||
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:8.94649124px;font-family:Roboto;-inkscape-font-specification:'Roboto, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.95855266px" | |||||
d="m 216.29705,83.666776 h 3.01419 v 0.685839 h -3.8573 v -6.360396 h 0.84311 z" /> | |||||
<path | |||||
inkscape:connector-curvature="0" | |||||
id="path997" | |||||
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:8.94649124px;font-family:Roboto;-inkscape-font-specification:'Roboto, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.95855266px" | |||||
d="m 222.11139,84.439983 q -0.96105,0 -1.56389,-0.62905 -0.60284,-0.633418 -0.60284,-1.690572 v -0.148526 q 0,-0.703313 0.26648,-1.253732 0.27084,-0.554787 0.75136,-0.864944 0.48489,-0.314525 1.04842,-0.314525 0.92173,0 1.43283,0.607208 0.51111,0.607209 0.51111,1.738625 v 0.336367 h -3.20204 q 0.0175,0.698945 0.40626,1.131417 0.39316,0.428103 0.996,0.428103 0.4281,0 0.72515,-0.174736 0.29705,-0.174736 0.51984,-0.463051 l 0.49363,0.38442 q -0.5941,0.912996 -1.78231,0.912996 z m -0.10047,-4.237351 q -0.48926,0 -0.82126,0.358209 -0.332,0.35384 -0.41063,0.995996 h 2.36767 v -0.06116 q -0.0349,-0.615945 -0.332,-0.952312 -0.29705,-0.340735 -0.80378,-0.340735 z" /> | |||||
<path | |||||
inkscape:connector-curvature="0" | |||||
id="path999" | |||||
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:8.94649124px;font-family:Roboto;-inkscape-font-specification:'Roboto, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.95855266px" | |||||
d="m 225.6498,79.626002 0.0262,0.594103 q 0.54168,-0.681471 1.41536,-0.681471 1.49836,0 1.51147,1.690573 v 3.123408 h -0.80816 v -3.127777 q -0.004,-0.511103 -0.23589,-0.755734 -0.22716,-0.24463 -0.71205,-0.24463 -0.39316,0 -0.69021,0.209683 -0.29705,0.209683 -0.46305,0.550419 v 3.368039 h -0.80815 v -4.726613 z" /> | |||||
<path | |||||
inkscape:connector-curvature="0" | |||||
id="path1001" | |||||
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:8.94649124px;font-family:Roboto;-inkscape-font-specification:'Roboto, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.95855266px" | |||||
d="m 229.63815,81.949993 q 0,-1.105206 0.5111,-1.756098 0.51111,-0.655261 1.35421,-0.655261 0.86494,0 1.34984,0.611577 l 0.0393,-0.524209 h 0.73826 v 4.613035 q 0,0.917365 -0.54605,1.445942 -0.54168,0.528576 -1.45905,0.528576 -0.5111,0 -1.00036,-0.21842 -0.48926,-0.21842 -0.747,-0.598471 l 0.41937,-0.484893 q 0.51984,0.642155 1.27121,0.642155 0.58973,0 0.91736,-0.331998 0.332,-0.331999 0.332,-0.934839 v -0.406261 q -0.48489,0.559155 -1.32363,0.559155 -0.82999,0 -1.34547,-0.668365 -0.5111,-0.668366 -0.5111,-1.821625 z m 0.81252,0.09174 q 0,0.799418 0.32763,1.2581 0.32763,0.454314 0.91737,0.454314 0.76447,0 1.12268,-0.694576 v -2.157992 q -0.37132,-0.677102 -1.11394,-0.677102 -0.58974,0 -0.92174,0.458682 -0.332,0.458682 -0.332,1.358574 z" /> | |||||
<path | |||||
inkscape:connector-curvature="0" | |||||
id="path1003" | |||||
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:8.94649124px;font-family:Roboto;-inkscape-font-specification:'Roboto, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.95855266px" | |||||
d="m 235.94176,78.48148 v 1.144522 h 0.88241 v 0.624682 h -0.88241 v 2.931199 q 0,0.283946 0.11794,0.428104 0.11795,0.139789 0.4019,0.139789 0.13979,0 0.38442,-0.05242 v 0.65526 q -0.3189,0.08737 -0.62032,0.08737 -0.54168,0 -0.81689,-0.32763 -0.27521,-0.32763 -0.27521,-0.93047 v -2.931199 h -0.86057 v -0.624682 h 0.86057 V 78.48148 Z" /> | |||||
<path | |||||
inkscape:connector-curvature="0" | |||||
id="path1005" | |||||
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:8.94649124px;font-family:Roboto;-inkscape-font-specification:'Roboto, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.95855266px" | |||||
d="m 238.57154,80.198263 q 0.53731,-0.659629 1.39789,-0.659629 1.49836,0 1.51146,1.690573 v 3.123408 h -0.80815 v -3.127777 q -0.004,-0.511103 -0.23589,-0.755734 -0.22716,-0.24463 -0.71205,-0.24463 -0.39316,0 -0.69021,0.209683 -0.29705,0.209683 -0.46305,0.550419 v 3.368039 h -0.80816 v -6.709868 h 0.80816 z" /> | |||||
</g> | |||||
<g | |||||
transform="matrix(0.27602379,0,0,0.27602379,-35.100396,107.93106)" | |||||
id="text943" | |||||
style="font-style:normal;font-weight:normal;font-size:11.50263214px;line-height:125%;font-family:Sans;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.95855266px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" | |||||
aria-label="Merge"> | |||||
<path | |||||
inkscape:connector-curvature="0" | |||||
id="path945" | |||||
style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:11.50263214px;font-family:Roboto;-inkscape-font-specification:'Roboto, Bold';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.95855266px" | |||||
d="m 436.19757,37.426576 2.10058,5.931045 2.08934,-5.931045 h 2.21291 v 8.177653 h -1.69057 v -2.235375 l 0.1685,-3.858549 -2.2073,6.093924 h -1.157 l -2.20168,-6.088307 0.1685,3.852932 v 2.235375 h -1.68496 v -8.177653 z" /> | |||||
<path | |||||
inkscape:connector-curvature="0" | |||||
id="path947" | |||||
style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:11.50263214px;font-family:Roboto;-inkscape-font-specification:'Roboto, Bold';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.95855266px" | |||||
d="m 446.77348,45.716559 q -1.33674,0 -2.17921,-0.820011 -0.83686,-0.820012 -0.83686,-2.184827 v -0.157262 q 0,-0.915493 0.35384,-1.634407 0.35384,-0.724531 0.99974,-1.112071 0.65151,-0.393157 1.48276,-0.393157 1.24687,0 1.96016,0.786313 0.71892,0.786313 0.71892,2.229758 v 0.66275 h -3.86978 q 0.0786,0.595351 0.47178,0.954808 0.39878,0.359457 1.00536,0.359457 0.93796,0 1.46591,-0.679599 l 0.79755,0.893027 q -0.36508,0.51672 -0.98851,0.808779 -0.62343,0.286442 -1.38166,0.286442 z m -0.18535,-4.987469 q -0.48302,0 -0.78631,0.325758 -0.29768,0.325758 -0.38192,0.932342 h 2.25784 v -0.12918 q -0.0112,-0.539185 -0.29206,-0.831245 -0.28083,-0.297675 -0.79755,-0.297675 z" /> | |||||
<path | |||||
inkscape:connector-curvature="0" | |||||
id="path949" | |||||
style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:11.50263214px;font-family:Roboto;-inkscape-font-specification:'Roboto, Bold';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.95855266px" | |||||
d="m 453.6144,41.049232 q -0.33138,-0.04493 -0.58412,-0.04493 -0.92111,0 -1.20755,0.623434 v 3.976496 h -1.62318 v -6.077074 h 1.53331 l 0.0449,0.724531 q 0.48864,-0.836862 1.35359,-0.836862 0.26959,0 0.50548,0.07301 z" /> | |||||
<path | |||||
inkscape:connector-curvature="0" | |||||
id="path951" | |||||
style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:11.50263214px;font-family:Roboto;-inkscape-font-specification:'Roboto, Bold';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.95855266px" | |||||
d="m 454.16481,42.52076 q 0,-1.398514 0.66275,-2.252225 0.66837,-0.853711 1.79729,-0.853711 0.99974,0 1.55578,0.685216 l 0.0674,-0.572885 h 1.47153 v 5.874879 q 0,0.797546 -0.36507,1.387281 -0.35946,0.589734 -1.01659,0.898643 -0.65713,0.308908 -1.53893,0.308908 -0.66836,0 -1.30303,-0.269593 -0.63467,-0.263976 -0.96042,-0.685215 l 0.71891,-0.988507 q 0.60658,0.679598 1.47153,0.679598 0.6459,0 1.00535,-0.348224 0.35946,-0.342607 0.35946,-0.977274 v -0.325758 q -0.56165,0.634666 -1.47714,0.634666 -1.09522,0 -1.77482,-0.853711 -0.67399,-0.859327 -0.67399,-2.27469 z m 1.62318,0.117947 q 0,0.825628 0.33137,1.297416 0.33138,0.466171 0.90988,0.466171 0.74138,0 1.06152,-0.556036 v -2.555516 q -0.32576,-0.556036 -1.05029,-0.556036 -0.58412,0 -0.92111,0.477405 -0.33137,0.477404 -0.33137,1.426596 z" /> | |||||
<path | |||||
inkscape:connector-curvature="0" | |||||
id="path953" | |||||
style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:11.50263214px;font-family:Roboto;-inkscape-font-specification:'Roboto, Bold';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.95855266px" | |||||
d="m 463.75783,45.716559 q -1.33673,0 -2.17921,-0.820011 -0.83686,-0.820012 -0.83686,-2.184827 v -0.157262 q 0,-0.915493 0.35384,-1.634407 0.35384,-0.724531 0.99974,-1.112071 0.65152,-0.393157 1.48276,-0.393157 1.24687,0 1.96017,0.786313 0.71891,0.786313 0.71891,2.229758 v 0.66275 h -3.86978 q 0.0786,0.595351 0.47179,0.954808 0.39877,0.359457 1.00536,0.359457 0.93795,0 1.46591,-0.679599 l 0.79754,0.893027 q -0.36507,0.51672 -0.9885,0.808779 -0.62344,0.286442 -1.38167,0.286442 z m -0.18534,-4.987469 q -0.48302,0 -0.78632,0.325758 -0.29767,0.325758 -0.38192,0.932342 h 2.25784 v -0.12918 q -0.0112,-0.539185 -0.29206,-0.831245 -0.28082,-0.297675 -0.79754,-0.297675 z" /> | |||||
</g> | |||||
<g | |||||
transform="matrix(0.27602379,0,0,0.27602379,-29.279563,107.06778)" | |||||
id="text949" | |||||
style="font-style:normal;font-weight:normal;font-size:11.50263214px;line-height:125%;font-family:Sans;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.95855266px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" | |||||
aria-label="Run"> | |||||
<path | |||||
inkscape:connector-curvature="0" | |||||
id="path967" | |||||
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:8.94649124px;font-family:Roboto;-inkscape-font-specification:Roboto;stroke-width:0.95855266px" | |||||
d="m 41.487446,46.633076 h -1.493994 v 2.57299 H 39.15035 V 42.84567 h 2.105571 q 1.074627,0 1.651256,0.489261 0.580998,0.489261 0.580998,1.4241 0,0.594103 -0.323262,1.035312 -0.318893,0.441208 -0.891154,0.659629 l 1.493994,2.699673 v 0.05242 h -0.899891 z m -1.493994,-0.685839 h 1.288679 q 0.624682,0 0.991628,-0.323262 0.371314,-0.323262 0.371314,-0.864944 0,-0.589735 -0.353841,-0.90426 -0.349472,-0.314525 -1.013469,-0.318893 h -1.284311 z" /> | |||||
<path | |||||
inkscape:connector-curvature="0" | |||||
id="path969" | |||||
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:8.94649124px;font-family:Roboto;-inkscape-font-specification:Roboto;stroke-width:0.95855266px" | |||||
d="m 47.450318,48.738647 q -0.471788,0.554787 -1.384785,0.554787 -0.755733,0 -1.153258,-0.43684 -0.393157,-0.441209 -0.397525,-1.301785 v -3.075356 h 0.808155 v 3.053514 q 0,1.074628 0.873681,1.074628 0.926101,0 1.231889,-0.690208 v -3.437934 h 0.808155 v 4.726613 h -0.768839 z" /> | |||||
<path | |||||
inkscape:connector-curvature="0" | |||||
id="path971" | |||||
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:8.94649124px;font-family:Roboto;-inkscape-font-specification:Roboto;stroke-width:0.95855266px" | |||||
d="m 50.224255,44.479453 0.02621,0.594103 q 0.541682,-0.681471 1.415363,-0.681471 1.498363,0 1.511468,1.690572 v 3.123409 h -0.808155 v -3.127777 q -0.0044,-0.511103 -0.235894,-0.755734 -0.227157,-0.244631 -0.71205,-0.244631 -0.393156,0 -0.690207,0.209684 -0.297052,0.209683 -0.463051,0.550419 v 3.368039 h -0.808155 v -4.726613 z" /> | |||||
</g> | |||||
<g | |||||
transform="matrix(0.27602379,0,0,0.27602379,-28.750397,107.06778)" | |||||
id="text954" | |||||
style="font-style:normal;font-weight:normal;font-size:11.50263214px;line-height:125%;font-family:Sans;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.95855266px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" | |||||
aria-label="Reset"> | |||||
<path | |||||
inkscape:connector-curvature="0" | |||||
id="path956" | |||||
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:8.94649124px;font-family:Roboto;-inkscape-font-specification:Roboto;stroke-width:0.95855266px" | |||||
d="m 66.409832,46.633076 h -1.493994 v 2.57299 H 64.072736 V 42.84567 h 2.105571 q 1.074627,0 1.651257,0.489261 0.580997,0.489261 0.580997,1.4241 0,0.594103 -0.323262,1.035312 -0.318893,0.441208 -0.891154,0.659629 l 1.493994,2.699673 v 0.05242 h -0.899891 z m -1.493994,-0.685839 h 1.288679 q 0.624682,0 0.991628,-0.323262 0.371314,-0.323262 0.371314,-0.864944 0,-0.589735 -0.35384,-0.90426 -0.349473,-0.314525 -1.01347,-0.318893 h -1.284311 z" /> | |||||
<path | |||||
inkscape:connector-curvature="0" | |||||
id="path958" | |||||
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:8.94649124px;font-family:Roboto;-inkscape-font-specification:Roboto;stroke-width:0.95855266px" | |||||
d="m 71.416023,49.293434 q -0.961049,0 -1.563888,-0.62905 -0.60284,-0.633419 -0.60284,-1.690572 v -0.148526 q 0,-0.703313 0.266473,-1.253732 0.270841,-0.554787 0.751365,-0.864944 0.484893,-0.314525 1.048417,-0.314525 0.921733,0 1.432836,0.607208 0.511104,0.607208 0.511104,1.738625 v 0.336367 h -3.20204 q 0.01747,0.698945 0.406261,1.131417 0.393157,0.428103 0.995996,0.428103 0.428104,0 0.725155,-0.174736 0.297052,-0.174736 0.51984,-0.463051 l 0.49363,0.38442 q -0.594103,0.912996 -1.782309,0.912996 z M 71.31555,45.056082 q -0.489261,0 -0.82126,0.35821 -0.331999,0.35384 -0.41063,0.995996 h 2.367675 v -0.06116 Q 72.416385,45.733183 72.119336,45.396816 71.822285,45.05608 71.31555,45.05608 Z" /> | |||||
<path | |||||
inkscape:connector-curvature="0" | |||||
id="path960" | |||||
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:8.94649124px;font-family:Roboto;-inkscape-font-specification:Roboto;stroke-width:0.95855266px" | |||||
d="m 76.942054,47.952334 q 0,-0.32763 -0.249,-0.506735 -0.24463,-0.183473 -0.860575,-0.314525 -0.611577,-0.131052 -0.974154,-0.314525 -0.358209,-0.183473 -0.532945,-0.43684 -0.170368,-0.253368 -0.170368,-0.60284 0,-0.580998 0.489261,-0.982891 0.49363,-0.401893 1.2581,-0.401893 0.803787,0 1.301785,0.414998 0.502366,0.414999 0.502366,1.061523 h -0.812523 q 0,-0.331999 -0.283946,-0.572261 -0.279578,-0.240263 -0.707682,-0.240263 -0.441208,0 -0.690207,0.19221 -0.248999,0.19221 -0.248999,0.502367 0,0.292683 0.231525,0.441208 0.231525,0.148526 0.834365,0.283947 0.607208,0.13542 0.982891,0.323262 0.375683,0.187841 0.554787,0.454314 0.183473,0.262104 0.183473,0.642155 0,0.633419 -0.506735,1.017838 -0.506734,0.380051 -1.314889,0.380051 -0.567893,0 -1.004733,-0.200946 -0.43684,-0.200947 -0.68584,-0.559156 -0.24463,-0.362578 -0.24463,-0.781944 h 0.808155 q 0.02184,0.406261 0.323261,0.646523 0.305789,0.235894 0.803787,0.235894 0.458682,0 0.733892,-0.183473 0.279578,-0.187841 0.279578,-0.497998 z" /> | |||||
<path | |||||
inkscape:connector-curvature="0" | |||||
id="path962" | |||||
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:8.94649124px;font-family:Roboto;-inkscape-font-specification:Roboto;stroke-width:0.95855266px" | |||||
d="m 80.764408,49.293434 q -0.961049,0 -1.563889,-0.62905 -0.60284,-0.633419 -0.60284,-1.690572 v -0.148526 q 0,-0.703313 0.266473,-1.253732 0.270841,-0.554787 0.751365,-0.864944 0.484893,-0.314525 1.048417,-0.314525 0.921734,0 1.432837,0.607208 0.511103,0.607208 0.511103,1.738625 v 0.336367 h -3.20204 q 0.01747,0.698945 0.406262,1.131417 0.393156,0.428103 0.995996,0.428103 0.428103,0 0.725155,-0.174736 0.297051,-0.174736 0.51984,-0.463051 l 0.493629,0.38442 q -0.594103,0.912996 -1.782308,0.912996 z m -0.100474,-4.237352 q -0.489261,0 -0.82126,0.35821 -0.331998,0.35384 -0.41063,0.995996 h 2.367675 v -0.06116 Q 81.764769,45.733183 81.467721,45.396816 81.170669,45.05608 80.663934,45.05608 Z" /> | |||||
<path | |||||
inkscape:connector-curvature="0" | |||||
id="path964" | |||||
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:8.94649124px;font-family:Roboto;-inkscape-font-specification:Roboto;stroke-width:0.95855266px" | |||||
d="m 84.634813,43.334931 v 1.144522 h 0.882418 v 0.624682 h -0.882418 v 2.931199 q 0,0.283946 0.117947,0.428103 0.117947,0.139789 0.401893,0.139789 0.139789,0 0.38442,-0.05242 v 0.65526 q -0.318894,0.08737 -0.620313,0.08737 -0.541683,0 -0.816892,-0.32763 -0.275209,-0.32763 -0.275209,-0.93047 v -2.931199 h -0.860576 v -0.624682 h 0.860576 v -1.144522 z" /> | |||||
</g> | |||||
<g | |||||
aria-label="Clock out" | |||||
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:8.94649124px;line-height:85.00000238%;font-family:Roboto;-inkscape-font-specification:'Roboto, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.95855266px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" | |||||
id="text995" | |||||
transform="matrix(0.27602379,0,0,0.27602379,49.608985,100.10535)"> | |||||
<path | |||||
d="m -245.41901,109.77049 q -0.11794,1.0091 -0.74699,1.55952 -0.62469,0.54605 -1.66437,0.54605 -1.12704,0 -1.80852,-0.80815 -0.6771,-0.80816 -0.6771,-2.16236 v -0.61158 q 0,-0.88678 0.31453,-1.55952 0.31889,-0.67273 0.89989,-1.03094 0.581,-0.36258 1.34547,-0.36258 1.01347,0 1.62504,0.56789 0.61158,0.56353 0.71205,1.56389 h -0.8431 q -0.10921,-0.7601 -0.47616,-1.10083 -0.36257,-0.34074 -1.01783,-0.34074 -0.80379,0 -1.26247,0.5941 -0.45432,0.59411 -0.45432,1.69058 v 0.61594 q 0,1.03531 0.43248,1.64689 0.43247,0.61157 1.21004,0.61157 0.69895,0 1.07026,-0.31452 0.37569,-0.31889 0.498,-1.10521 z" | |||||
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:8.94649124px;line-height:85.00000238%;font-family:Roboto;-inkscape-font-specification:'Roboto, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;stroke-width:0.95855266px" | |||||
id="path1026" | |||||
inkscape:connector-curvature="0" /> | |||||
<path | |||||
d="m -243.52749,111.7887 h -0.80815 v -6.70987 h 0.80815 z" | |||||
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:8.94649124px;line-height:85.00000238%;font-family:Roboto;-inkscape-font-specification:'Roboto, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;stroke-width:0.95855266px" | |||||
id="path1028" | |||||
inkscape:connector-curvature="0" /> | |||||
<path | |||||
d="m -242.45286,109.38171 q 0,-0.69458 0.27084,-1.24937 0.27521,-0.55479 0.7601,-0.8562 0.48926,-0.30142 1.11395,-0.30142 0.96541,0 1.55952,0.66836 0.59847,0.66837 0.59847,1.77794 v 0.0568 q 0,0.69021 -0.26648,1.24063 -0.2621,0.54605 -0.75573,0.85184 -0.48926,0.30578 -1.12705,0.30578 -0.96105,0 -1.55952,-0.66836 -0.5941,-0.66837 -0.5941,-1.76921 z m 0.81252,0.0961 q 0,0.78631 0.36258,1.26247 0.36695,0.47616 0.97852,0.47616 0.61595,0 0.97852,-0.48053 0.36258,-0.48489 0.36258,-1.3542 0,-0.77758 -0.37131,-1.2581 -0.36695,-0.4849 -0.97852,-0.4849 -0.59848,0 -0.96542,0.47616 -0.36695,0.47615 -0.36695,1.36294 z" | |||||
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:8.94649124px;line-height:85.00000238%;font-family:Roboto;-inkscape-font-specification:'Roboto, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;stroke-width:0.95855266px" | |||||
id="path1030" | |||||
inkscape:connector-curvature="0" /> | |||||
<path | |||||
d="m -235.24063,111.21644 q 0.43248,0 0.75574,-0.26211 0.32326,-0.2621 0.35821,-0.65526 h 0.76447 q -0.0218,0.40626 -0.27958,0.77321 -0.25774,0.36694 -0.69021,0.58536 -0.4281,0.21842 -0.90863,0.21842 -0.96541,0 -1.53767,-0.64215 -0.5679,-0.64652 -0.5679,-1.76484 v -0.13542 q 0,-0.6902 0.25337,-1.22752 0.25337,-0.53731 0.72516,-0.83436 0.47615,-0.29705 1.12268,-0.29705 0.79504,0 1.31925,0.47615 0.52858,0.47616 0.56353,1.23626 h -0.76447 q -0.035,-0.45868 -0.34948,-0.75137 -0.31015,-0.29705 -0.76883,-0.29705 -0.61595,0 -0.95669,0.44558 -0.33636,0.44121 -0.33636,1.27994 v 0.1529 q 0,0.81689 0.33636,1.2581 0.33637,0.44121 0.96105,0.44121 z" | |||||
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:8.94649124px;line-height:85.00000238%;font-family:Roboto;-inkscape-font-specification:'Roboto, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;stroke-width:0.95855266px" | |||||
id="path1032" | |||||
inkscape:connector-curvature="0" /> | |||||
<path | |||||
d="m -231.13433,109.60013 -0.50673,0.52857 v 1.66 h -0.80816 v -6.70987 h 0.80816 v 4.05825 l 0.43247,-0.51984 1.47215,-1.55516 h 0.98289 l -1.83909,1.97452 2.05315,2.7521 h -0.94795 z" | |||||
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:8.94649124px;line-height:85.00000238%;font-family:Roboto;-inkscape-font-specification:'Roboto, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;stroke-width:0.95855266px" | |||||
id="path1034" | |||||
inkscape:connector-curvature="0" /> | |||||
<path | |||||
d="m -245.75537,116.98622 q 0,-0.69457 0.27084,-1.24936 0.27521,-0.55479 0.7601,-0.85621 0.48926,-0.30142 1.11394,-0.30142 0.96542,0 1.55952,0.66837 0.59847,0.66836 0.59847,1.77794 v 0.0568 q 0,0.69021 -0.26647,1.24063 -0.2621,0.54605 -0.75573,0.85183 -0.48926,0.30579 -1.12705,0.30579 -0.96105,0 -1.55952,-0.66836 -0.5941,-0.66837 -0.5941,-1.76921 z m 0.81252,0.0961 q 0,0.78631 0.36258,1.26247 0.36694,0.47615 0.97852,0.47615 0.61594,0 0.97852,-0.48052 0.36258,-0.48489 0.36258,-1.35421 0,-0.77757 -0.37132,-1.2581 -0.36694,-0.48489 -0.97852,-0.48489 -0.59847,0 -0.96542,0.47616 -0.36694,0.47615 -0.36694,1.36294 z" | |||||
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:8.94649124px;line-height:85.00000238%;font-family:Roboto;-inkscape-font-specification:'Roboto, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;stroke-width:0.95855266px" | |||||
id="path1036" | |||||
inkscape:connector-curvature="0" /> | |||||
<path | |||||
d="m -237.52093,118.92579 q -0.47179,0.55479 -1.38479,0.55479 -0.75573,0 -1.15326,-0.43684 -0.39315,-0.44121 -0.39752,-1.30178 v -3.07536 h 0.80815 v 3.05352 q 0,1.07462 0.87369,1.07462 0.9261,0 1.23189,-0.69021 v -3.43793 h 0.80815 v 4.72661 h -0.76884 z" | |||||
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:8.94649124px;line-height:85.00000238%;font-family:Roboto;-inkscape-font-specification:'Roboto, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;stroke-width:0.95855266px" | |||||
id="path1038" | |||||
inkscape:connector-curvature="0" /> | |||||
<path | |||||
d="m -234.415,113.52208 v 1.14452 h 0.88242 v 0.62468 h -0.88242 v 2.9312 q 0,0.28395 0.11795,0.42811 0.11795,0.13978 0.40189,0.13978 0.13979,0 0.38442,-0.0524 v 0.65526 q -0.31889,0.0874 -0.62031,0.0874 -0.54168,0 -0.81689,-0.32763 -0.27521,-0.32763 -0.27521,-0.93047 v -2.9312 h -0.86058 v -0.62468 h 0.86058 v -1.14452 z" | |||||
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:8.94649124px;line-height:85.00000238%;font-family:Roboto;-inkscape-font-specification:'Roboto, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;stroke-width:0.95855266px" | |||||
id="path1040" | |||||
inkscape:connector-curvature="0" /> | |||||
</g> | |||||
<g | |||||
aria-label="Clock" | |||||
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:8.94649124px;line-height:85.00000238%;font-family:Roboto;-inkscape-font-specification:'Roboto, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.95855266px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" | |||||
id="text1022" | |||||
transform="matrix(0.27602379,0,0,0.27602379,49.079818,100.66345)"> | |||||
<path | |||||
d="m -302.64093,111.6876 q -0.11795,1.0091 -0.747,1.55952 -0.62468,0.54605 -1.66436,0.54605 -1.12705,0 -1.80852,-0.80815 -0.6771,-0.80816 -0.6771,-2.16236 v -0.61158 q 0,-0.88679 0.31452,-1.55952 0.3189,-0.67273 0.89989,-1.03094 0.581,-0.36258 1.34547,-0.36258 1.01347,0 1.62505,0.56789 0.61158,0.56353 0.71205,1.56389 h -0.8431 q -0.10921,-0.7601 -0.47616,-1.10084 -0.36258,-0.34073 -1.01784,-0.34073 -0.80378,0 -1.26247,0.5941 -0.45431,0.5941 -0.45431,1.69057 v 0.61595 q 0,1.03531 0.43247,1.64689 0.43247,0.61157 1.21005,0.61157 0.69894,0 1.07026,-0.31452 0.37568,-0.3189 0.498,-1.10521 z" | |||||
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:8.94649124px;line-height:85.00000238%;font-family:Roboto;-inkscape-font-specification:'Roboto, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;stroke-width:0.95855266px" | |||||
id="path1043" | |||||
inkscape:connector-curvature="0" /> | |||||
<path | |||||
d="m -300.74941,113.7058 h -0.80816 v -6.70987 h 0.80816 z" | |||||
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:8.94649124px;line-height:85.00000238%;font-family:Roboto;-inkscape-font-specification:'Roboto, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;stroke-width:0.95855266px" | |||||
id="path1045" | |||||
inkscape:connector-curvature="0" /> | |||||
<path | |||||
d="m -299.67479,111.29881 q 0,-0.69457 0.27085,-1.24936 0.27521,-0.55479 0.7601,-0.85621 0.48926,-0.30142 1.11394,-0.30142 0.96542,0 1.55952,0.66837 0.59847,0.66836 0.59847,1.77794 v 0.0568 q 0,0.69021 -0.26647,1.24062 -0.2621,0.54605 -0.75573,0.85184 -0.48926,0.30579 -1.12705,0.30579 -0.96105,0 -1.55952,-0.66836 -0.59411,-0.66837 -0.59411,-1.76921 z m 0.81253,0.0961 q 0,0.78631 0.36258,1.26247 0.36694,0.47615 0.97852,0.47615 0.61594,0 0.97852,-0.48052 0.36258,-0.4849 0.36258,-1.35421 0,-0.77757 -0.37132,-1.2581 -0.36694,-0.48489 -0.97852,-0.48489 -0.59847,0 -0.96542,0.47616 -0.36694,0.47615 -0.36694,1.36294 z" | |||||
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:8.94649124px;line-height:85.00000238%;font-family:Roboto;-inkscape-font-specification:'Roboto, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;stroke-width:0.95855266px" | |||||
id="path1047" | |||||
inkscape:connector-curvature="0" /> | |||||
<path | |||||
d="m -292.46255,113.13354 q 0.43247,0 0.75573,-0.2621 0.32327,-0.26211 0.35821,-0.65526 h 0.76447 q -0.0218,0.40626 -0.27957,0.7732 -0.25774,0.36695 -0.69021,0.58537 -0.42811,0.21842 -0.90863,0.21842 -0.96542,0 -1.53768,-0.64215 -0.56789,-0.64653 -0.56789,-1.76484 v -0.13542 q 0,-0.69021 0.25337,-1.22752 0.25336,-0.53732 0.72515,-0.83437 0.47616,-0.29705 1.12268,-0.29705 0.79505,0 1.31926,0.47616 0.52858,0.47615 0.56352,1.23626 h -0.76447 q -0.0349,-0.45869 -0.34947,-0.75137 -0.31016,-0.29705 -0.76884,-0.29705 -0.61594,0 -0.95668,0.44558 -0.33637,0.44121 -0.33637,1.27994 v 0.15289 q 0,0.81689 0.33637,1.2581 0.33637,0.44121 0.96105,0.44121 z" | |||||
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:8.94649124px;line-height:85.00000238%;font-family:Roboto;-inkscape-font-specification:'Roboto, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;stroke-width:0.95855266px" | |||||
id="path1049" | |||||
inkscape:connector-curvature="0" /> | |||||
<path | |||||
d="m -288.35625,111.51723 -0.50673,0.52858 v 1.65999 h -0.80816 v -6.70987 h 0.80816 v 4.05825 l 0.43247,-0.51984 1.47215,-1.55515 h 0.98289 l -1.8391,1.97452 2.05315,2.75209 h -0.94794 z" | |||||
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:8.94649124px;line-height:85.00000238%;font-family:Roboto;-inkscape-font-specification:'Roboto, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;stroke-width:0.95855266px" | |||||
id="path1051" | |||||
inkscape:connector-curvature="0" /> | |||||
</g> | |||||
<g | |||||
aria-label="Tempo" | |||||
style="font-style:normal;font-weight:normal;font-size:11.50263214px;line-height:125%;font-family:Sans;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.95855266px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" | |||||
id="text1056" | |||||
transform="matrix(0.27602379,0,0,0.27602379,49.608985,98.998384)"> | |||||
<path | |||||
d="m -278.75345,113.71845 h -2.04441 v 5.67019 h -0.83437 v -5.67019 h -2.04004 v -0.6902 h 4.91882 z" | |||||
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:8.94649124px;font-family:Roboto;-inkscape-font-specification:'Roboto, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.95855266px" | |||||
id="path1058" | |||||
inkscape:connector-curvature="0" /> | |||||
<path | |||||
d="m -275.96641,119.47601 q -0.96104,0 -1.56388,-0.62905 -0.60284,-0.63342 -0.60284,-1.69057 v -0.14853 q 0,-0.70331 0.26647,-1.25373 0.27084,-0.55479 0.75136,-0.86494 0.4849,-0.31453 1.04842,-0.31453 0.92173,0 1.43284,0.60721 0.5111,0.60721 0.5111,1.73862 v 0.33637 h -3.20204 q 0.0175,0.69894 0.40626,1.13142 0.39316,0.4281 0.996,0.4281 0.4281,0 0.72515,-0.17474 0.29705,-0.17473 0.51984,-0.46305 l 0.49363,0.38442 q -0.5941,0.913 -1.78231,0.913 z m -0.10047,-4.23735 q -0.48926,0 -0.82126,0.35821 -0.332,0.35384 -0.41063,0.99599 h 2.36768 v -0.0611 q -0.035,-0.61595 -0.332,-0.95232 -0.29705,-0.34073 -0.80379,-0.34073 z" | |||||
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:8.94649124px;font-family:Roboto;-inkscape-font-specification:'Roboto, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.95855266px" | |||||
id="path1060" | |||||
inkscape:connector-curvature="0" /> | |||||
<path | |||||
d="m -272.43237,114.66203 0.0218,0.52421 q 0.51984,-0.61158 1.40226,-0.61158 0.99163,0 1.34984,0.7601 0.23589,-0.34073 0.61158,-0.55042 0.38005,-0.20968 0.89552,-0.20968 1.55515,0 1.58136,1.64689 v 3.16709 h -0.80815 v -3.11904 q 0,-0.50673 -0.23153,-0.75573 -0.23153,-0.25337 -0.77758,-0.25337 -0.44994,0 -0.74699,0.27084 -0.29705,0.26647 -0.34511,0.72079 v 3.13651 h -0.81252 v -3.0972 q 0,-1.03094 -1.0091,-1.03094 -0.79505,0 -1.08773,0.6771 v 3.45104 h -0.80816 v -4.72661 z" | |||||
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:8.94649124px;font-family:Roboto;-inkscape-font-specification:'Roboto, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.95855266px" | |||||
id="path1062" | |||||
inkscape:connector-curvature="0" /> | |||||
<path | |||||
d="m -261.3541,117.07776 q 0,1.07899 -0.49363,1.73862 -0.49362,0.65963 -1.33673,0.65963 -0.86057,0 -1.3542,-0.54605 v 2.27594 h -0.80816 v -6.54387 h 0.73826 l 0.0393,0.52421 q 0.49363,-0.61158 1.37168,-0.61158 0.85184,0 1.34547,0.64216 0.49799,0.64215 0.49799,1.78667 z m -0.80815,-0.0917 q 0,-0.79942 -0.34074,-1.26247 -0.34073,-0.46305 -0.93483,-0.46305 -0.7339,0 -1.10084,0.65089 v 2.25847 q 0.36258,0.64652 1.10957,0.64652 0.581,0 0.92174,-0.45868 0.3451,-0.46305 0.3451,-1.37168 z" | |||||
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:8.94649124px;font-family:Roboto;-inkscape-font-specification:'Roboto, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.95855266px" | |||||
id="path1064" | |||||
inkscape:connector-curvature="0" /> | |||||
<path | |||||
d="m -260.54594,116.98165 q 0,-0.69458 0.27084,-1.24936 0.27521,-0.55479 0.7601,-0.85621 0.48927,-0.30142 1.11395,-0.30142 0.96541,0 1.55952,0.66837 0.59847,0.66836 0.59847,1.77794 v 0.0568 q 0,0.6902 -0.26647,1.24062 -0.26211,0.54605 -0.75574,0.85184 -0.48926,0.30579 -1.12705,0.30579 -0.96105,0 -1.55952,-0.66837 -0.5941,-0.66836 -0.5941,-1.7692 z m 0.81252,0.0961 q 0,0.78631 0.36258,1.26246 0.36695,0.47616 0.97852,0.47616 0.61595,0 0.97853,-0.48052 0.36257,-0.4849 0.36257,-1.35421 0,-0.77758 -0.37131,-1.2581 -0.36695,-0.48489 -0.97852,-0.48489 -0.59847,0 -0.96542,0.47615 -0.36695,0.47616 -0.36695,1.36295 z" | |||||
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:8.94649124px;font-family:Roboto;-inkscape-font-specification:'Roboto, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.95855266px" | |||||
id="path1066" | |||||
inkscape:connector-curvature="0" /> | |||||
</g> | |||||
<g | |||||
transform="matrix(0.27602379,0,0,0.27602379,49.608985,115.26221)" | |||||
id="g1079" | |||||
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:8.94649124px;line-height:85.00000238%;font-family:Roboto;-inkscape-font-specification:'Roboto, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.95855266px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" | |||||
aria-label="Clock"> | |||||
<path | |||||
inkscape:connector-curvature="0" | |||||
id="path1069" | |||||
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:8.94649124px;line-height:85.00000238%;font-family:Roboto;-inkscape-font-specification:'Roboto, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;stroke-width:0.95855266px" | |||||
d="m -302.64093,111.6876 q -0.11795,1.0091 -0.747,1.55952 -0.62468,0.54605 -1.66436,0.54605 -1.12705,0 -1.80852,-0.80815 -0.6771,-0.80816 -0.6771,-2.16236 v -0.61158 q 0,-0.88679 0.31452,-1.55952 0.3189,-0.67273 0.89989,-1.03094 0.581,-0.36258 1.34547,-0.36258 1.01347,0 1.62505,0.56789 0.61158,0.56353 0.71205,1.56389 h -0.8431 q -0.10921,-0.7601 -0.47616,-1.10084 -0.36258,-0.34073 -1.01784,-0.34073 -0.80378,0 -1.26247,0.5941 -0.45431,0.5941 -0.45431,1.69057 v 0.61595 q 0,1.03531 0.43247,1.64689 0.43247,0.61157 1.21005,0.61157 0.69894,0 1.07026,-0.31452 0.37568,-0.3189 0.498,-1.10521 z" /> | |||||
<path | |||||
inkscape:connector-curvature="0" | |||||
id="path1071" | |||||
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:8.94649124px;line-height:85.00000238%;font-family:Roboto;-inkscape-font-specification:'Roboto, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;stroke-width:0.95855266px" | |||||
d="m -300.74941,113.7058 h -0.80816 v -6.70987 h 0.80816 z" /> | |||||
<path | |||||
inkscape:connector-curvature="0" | |||||
id="path1073" | |||||
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:8.94649124px;line-height:85.00000238%;font-family:Roboto;-inkscape-font-specification:'Roboto, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;stroke-width:0.95855266px" | |||||
d="m -299.67479,111.29881 q 0,-0.69457 0.27085,-1.24936 0.27521,-0.55479 0.7601,-0.85621 0.48926,-0.30142 1.11394,-0.30142 0.96542,0 1.55952,0.66837 0.59847,0.66836 0.59847,1.77794 v 0.0568 q 0,0.69021 -0.26647,1.24062 -0.2621,0.54605 -0.75573,0.85184 -0.48926,0.30579 -1.12705,0.30579 -0.96105,0 -1.55952,-0.66836 -0.59411,-0.66837 -0.59411,-1.76921 z m 0.81253,0.0961 q 0,0.78631 0.36258,1.26247 0.36694,0.47615 0.97852,0.47615 0.61594,0 0.97852,-0.48052 0.36258,-0.4849 0.36258,-1.35421 0,-0.77757 -0.37132,-1.2581 -0.36694,-0.48489 -0.97852,-0.48489 -0.59847,0 -0.96542,0.47616 -0.36694,0.47615 -0.36694,1.36294 z" /> | |||||
<path | |||||
inkscape:connector-curvature="0" | |||||
id="path1075" | |||||
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:8.94649124px;line-height:85.00000238%;font-family:Roboto;-inkscape-font-specification:'Roboto, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;stroke-width:0.95855266px" | |||||
d="m -292.46255,113.13354 q 0.43247,0 0.75573,-0.2621 0.32327,-0.26211 0.35821,-0.65526 h 0.76447 q -0.0218,0.40626 -0.27957,0.7732 -0.25774,0.36695 -0.69021,0.58537 -0.42811,0.21842 -0.90863,0.21842 -0.96542,0 -1.53768,-0.64215 -0.56789,-0.64653 -0.56789,-1.76484 v -0.13542 q 0,-0.69021 0.25337,-1.22752 0.25336,-0.53732 0.72515,-0.83437 0.47616,-0.29705 1.12268,-0.29705 0.79505,0 1.31926,0.47616 0.52858,0.47615 0.56352,1.23626 h -0.76447 q -0.0349,-0.45869 -0.34947,-0.75137 -0.31016,-0.29705 -0.76884,-0.29705 -0.61594,0 -0.95668,0.44558 -0.33637,0.44121 -0.33637,1.27994 v 0.15289 q 0,0.81689 0.33637,1.2581 0.33637,0.44121 0.96105,0.44121 z" /> | |||||
<path | |||||
inkscape:connector-curvature="0" | |||||
id="path1077" | |||||
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:8.94649124px;line-height:85.00000238%;font-family:Roboto;-inkscape-font-specification:'Roboto, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;stroke-width:0.95855266px" | |||||
d="m -288.35625,111.51723 -0.50673,0.52858 v 1.65999 h -0.80816 v -6.70987 h 0.80816 v 4.05825 l 0.43247,-0.51984 1.47215,-1.55515 h 0.98289 l -1.8391,1.97452 2.05315,2.75209 h -0.94794 z" /> | |||||
</g> | |||||
<g | |||||
id="text99" | |||||
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:7.66842079px;line-height:125%;font-family:Roboto;-inkscape-font-specification:'Roboto, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.93716365px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" | |||||
transform="matrix(0.28055665,0,0,0.28232354,115.2989,103.882)" | |||||
aria-label="1"> | |||||
<path | |||||
inkscape:connector-curvature="0" | |||||
id="path220" | |||||
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:7.66842079px;font-family:Roboto;-inkscape-font-specification:'Roboto, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.93716365px" | |||||
d="m -472.43837,151.22795 h -0.69645 v -4.61678 l -1.39664,0.51298 v -0.62905 l 1.9845,-0.74513 h 0.10859 z" /> | |||||
</g> | |||||
<g | |||||
id="text103" | |||||
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:7.66842079px;line-height:125%;font-family:Roboto;-inkscape-font-specification:'Roboto, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.93716365px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" | |||||
transform="matrix(0.28055665,0,0,0.28232354,114.80172,103.882)" | |||||
aria-label="2"> | |||||
<path | |||||
inkscape:connector-curvature="0" | |||||
id="path217" | |||||
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:7.66842079px;font-family:Roboto;-inkscape-font-specification:'Roboto, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.93716365px" | |||||
d="m -446.27424,151.22795 h -3.5721 v -0.498 l 1.88715,-2.09683 q 0.41937,-0.47553 0.57663,-0.77134 0.161,-0.29954 0.161,-0.61781 0,-0.42686 -0.25836,-0.7002 -0.25836,-0.27333 -0.68896,-0.27333 -0.51671,0 -0.80503,0.2958 -0.28457,0.29206 -0.28457,0.81627 h -0.6927 q 0,-0.75262 0.48302,-1.21691 0.48676,-0.4643 1.29928,-0.4643 0.76011,0 1.20194,0.40064 0.44183,0.3969 0.44183,1.05965 0,0.80504 -1.02595,1.91711 l -1.46029,1.58385 h 2.73711 z" /> | |||||
</g> | |||||
<g | |||||
id="text107" | |||||
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:7.66842079px;line-height:125%;font-family:Roboto;-inkscape-font-specification:'Roboto, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.93716365px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" | |||||
transform="matrix(0.28055665,0,0,0.28232354,114.60054,103.882)" | |||||
aria-label="3"> | |||||
<path | |||||
inkscape:connector-curvature="0" | |||||
id="path214" | |||||
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:7.66842079px;font-family:Roboto;-inkscape-font-specification:'Roboto, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.93716365px" | |||||
d="m -424.41528,148.00584 h 0.52046 q 0.49051,-0.007 0.77133,-0.25836 0.28083,-0.25088 0.28083,-0.67773 0,-0.95855 -0.95481,-0.95855 -0.44932,0 -0.71891,0.25836 -0.26585,0.25461 -0.26585,0.67772 h -0.6927 q 0,-0.64777 0.47178,-1.07462 0.47553,-0.4306 1.20568,-0.4306 0.77134,0 1.20943,0.40813 0.43808,0.40813 0.43808,1.13454 0,0.35571 -0.23214,0.68896 -0.22841,0.33324 -0.62531,0.49799 0.44932,0.14229 0.6927,0.47179 0.24713,0.3295 0.24713,0.80504 0,0.73389 -0.47928,1.16449 -0.47927,0.4306 -1.24686,0.4306 -0.76759,0 -1.25062,-0.41563 -0.47927,-0.41562 -0.47927,-1.09709 h 0.69645 q 0,0.4306 0.28082,0.68896 0.28083,0.25836 0.75262,0.25836 0.50174,0 0.76759,-0.2621 0.26585,-0.26211 0.26585,-0.75262 0,-0.47553 -0.29206,-0.73014 -0.29206,-0.25462 -0.84248,-0.26211 h -0.52046 z" /> | |||||
</g> | |||||
<g | |||||
id="text111" | |||||
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:7.66842079px;line-height:125%;font-family:Roboto;-inkscape-font-specification:'Roboto, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.93716365px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" | |||||
transform="matrix(0.28055665,0,0,0.28232354,114.24974,103.882)" | |||||
aria-label="4"> | |||||
<path | |||||
inkscape:connector-curvature="0" | |||||
id="path211" | |||||
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:7.66842079px;font-family:Roboto;-inkscape-font-specification:'Roboto, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.93716365px" | |||||
d="m -397.73387,149.39697 h 0.75636 v 0.56539 h -0.75636 v 1.26559 h -0.69645 v -1.26559 h -2.4825 v -0.40813 l 2.44132,-3.77805 h 0.73763 z m -2.39263,0 h 1.69618 v -2.67347 l -0.0824,0.14978 z" /> | |||||
</g> | |||||
<g | |||||
id="text115" | |||||
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:7.66842079px;line-height:125%;font-family:Roboto;-inkscape-font-specification:'Roboto, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.93716365px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" | |||||
transform="matrix(0.28055665,0,0,0.28232354,114.06408,103.882)" | |||||
aria-label="5"> | |||||
<path | |||||
inkscape:connector-curvature="0" | |||||
id="path208" | |||||
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:7.66842079px;font-family:Roboto;-inkscape-font-specification:'Roboto, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.93716365px" | |||||
d="m -376.20166,148.33534 0.27708,-2.7184 h 2.79329 v 0.64029 h -2.20542 l -0.16475,1.4865 q 0.40064,-0.23589 0.90987,-0.23589 0.74513,0 1.18322,0.49425 0.43808,0.49051 0.43808,1.32924 0,0.84248 -0.45681,1.32925 -0.45306,0.48302 -1.26933,0.48302 -0.72266,0 -1.17947,-0.40065 -0.45681,-0.40064 -0.52046,-1.10832 h 0.65526 q 0.0636,0.46804 0.33324,0.70768 0.2696,0.23589 0.71143,0.23589 0.48302,0 0.75636,-0.3295 0.27708,-0.3295 0.27708,-0.90988 0,-0.54667 -0.29955,-0.87617 -0.2958,-0.33325 -0.79005,-0.33325 -0.45307,0 -0.71143,0.19845 l -0.18347,0.14977 z" /> | |||||
</g> | |||||
<g | |||||
id="text119" | |||||
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:7.66842079px;line-height:125%;font-family:Roboto;-inkscape-font-specification:'Roboto, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.93716365px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" | |||||
transform="matrix(0.28055665,0,0,0.28232354,113.8211,103.882)" | |||||
aria-label="6"> | |||||
<path | |||||
inkscape:connector-curvature="0" | |||||
id="path205" | |||||
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:7.66842079px;font-family:Roboto;-inkscape-font-specification:'Roboto, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.93716365px" | |||||
d="m -349.26241,145.6132 v 0.58786 h -0.12731 q -0.80877,0.015 -1.28805,0.47928 -0.47928,0.4643 -0.55416,1.30677 0.4306,-0.49425 1.17572,-0.49425 0.71143,0 1.13454,0.50174 0.42685,0.50174 0.42685,1.29555 0,0.84247 -0.46055,1.34796 -0.45681,0.50549 -1.22815,0.50549 -0.78256,0 -1.26933,-0.5991 -0.48676,-0.60284 -0.48676,-1.55016 v -0.26585 q 0,-1.50522 0.64028,-2.29902 0.64403,-0.79755 1.91336,-0.81627 z m -0.90987,2.45629 q -0.35572,0 -0.65526,0.21343 -0.29955,0.21342 -0.41563,0.53544 v 0.25461 q 0,0.67399 0.3033,1.08586 0.30329,0.41188 0.75635,0.41188 0.46805,0 0.7339,-0.34448 0.26959,-0.34448 0.26959,-0.90238 0,-0.56166 -0.27334,-0.90614 -0.26959,-0.34822 -0.71891,-0.34822 z" /> | |||||
</g> | |||||
<g | |||||
id="text123" | |||||
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:7.66842079px;line-height:125%;font-family:Roboto;-inkscape-font-specification:'Roboto, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.93716365px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" | |||||
transform="matrix(0.28055665,0,0,0.28232354,113.64341,103.882)" | |||||
aria-label="7"> | |||||
<path | |||||
inkscape:connector-curvature="0" | |||||
id="path202" | |||||
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:7.66842079px;font-family:Roboto;-inkscape-font-specification:'Roboto, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.93716365px" | |||||
d="m -324.1416,146.1656 -2.25784,5.06235 h -0.7264 l 2.25035,-4.88263 h -2.95054 v -0.56914 h 3.68443 z" /> | |||||
</g> | |||||
<g | |||||
id="text127" | |||||
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:7.66842079px;line-height:125%;font-family:Roboto;-inkscape-font-specification:'Roboto, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.93716365px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" | |||||
transform="matrix(0.28055665,0,0,0.28232354,113.35208,103.882)" | |||||
aria-label="8"> | |||||
<path | |||||
inkscape:connector-curvature="0" | |||||
id="path199" | |||||
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:7.66842079px;font-family:Roboto;-inkscape-font-specification:'Roboto, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.93716365px" | |||||
d="m -299.73903,147.03979 q 0,0.40814 -0.21717,0.72641 -0.21343,0.31827 -0.58037,0.498 0.42685,0.18347 0.67398,0.53544 0.25087,0.35197 0.25087,0.79754 0,0.70768 -0.47928,1.12705 -0.47553,0.41937 -1.25435,0.41937 -0.78632,0 -1.26185,-0.41937 -0.47179,-0.42311 -0.47179,-1.12705 0,-0.44183 0.23964,-0.79754 0.24339,-0.35572 0.67024,-0.53919 -0.3632,-0.17973 -0.57288,-0.498 -0.20969,-0.31827 -0.20969,-0.72266 0,-0.68896 0.44184,-1.09335 0.44183,-0.40438 1.16449,-0.40438 0.71891,0 1.16074,0.40438 0.44558,0.40439 0.44558,1.09335 z m -0.56539,2.54241 q 0,-0.45681 -0.29206,-0.74512 -0.28832,-0.28831 -0.75636,-0.28831 -0.46805,0 -0.75262,0.28457 -0.28082,0.28457 -0.28082,0.74886 0,0.4643 0.27334,0.73015 0.27708,0.26585 0.76759,0.26585 0.48676,0 0.76384,-0.26585 0.27709,-0.26959 0.27709,-0.73015 z m -1.04093,-3.471 q -0.40814,0 -0.66275,0.25461 -0.25087,0.25087 -0.25087,0.68522 0,0.41562 0.24712,0.67398 0.25087,0.25461 0.6665,0.25461 0.41562,0 0.66275,-0.25461 0.25087,-0.25836 0.25087,-0.67398 0,-0.41563 -0.25836,-0.67773 -0.25836,-0.2621 -0.65526,-0.2621 z" /> | |||||
</g> | |||||
<g | |||||
id="text131" | |||||
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:7.66842079px;line-height:125%;font-family:Roboto;-inkscape-font-specification:'Roboto, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.93716365px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" | |||||
transform="matrix(0.28055665,0,0,0.28232354,113.11417,103.882)" | |||||
aria-label="9"> | |||||
<path | |||||
inkscape:connector-curvature="0" | |||||
id="path196" | |||||
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:7.66842079px;font-family:Roboto;-inkscape-font-specification:'Roboto, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.93716365px" | |||||
d="m -275.87883,148.67233 q -0.21717,0.25836 -0.52046,0.41562 -0.29955,0.15726 -0.65901,0.15726 -0.47178,0 -0.82375,-0.23215 -0.34823,-0.23215 -0.53919,-0.65151 -0.19096,-0.42311 -0.19096,-0.93234 0,-0.54668 0.20594,-0.98477 0.20968,-0.43809 0.59161,-0.67024 0.38192,-0.23214 0.89115,-0.23214 0.80878,0 1.27308,0.60658 0.46804,0.60284 0.46804,1.64751 v 0.2022 q 0,1.59134 -0.62905,2.32524 -0.62905,0.73014 -1.89838,0.74886 h -0.1348 v -0.58411 h 0.14603 q 0.85746,-0.015 1.31801,-0.44558 0.46056,-0.43434 0.50174,-1.37043 z m -1.06713,0 q 0.34822,0 0.64028,-0.21343 0.2958,-0.21343 0.4306,-0.52795 v -0.27708 q 0,-0.68147 -0.29581,-1.10833 -0.2958,-0.42686 -0.74886,-0.42686 -0.45681,0 -0.7339,0.35197 -0.27708,0.34823 -0.27708,0.92111 0,0.55791 0.26585,0.92111 0.26959,0.35946 0.71892,0.35946 z" /> | |||||
</g> | |||||
<g | |||||
id="text135" | |||||
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:7.66842079px;line-height:125%;font-family:Roboto;-inkscape-font-specification:'Roboto, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.93716365px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" | |||||
transform="matrix(0.28055665,0,0,0.28232354,112.3704,103.882)" | |||||
aria-label="10"> | |||||
<path | |||||
inkscape:connector-curvature="0" | |||||
id="path191" | |||||
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:7.66842079px;font-family:Roboto;-inkscape-font-specification:'Roboto, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.93716365px" | |||||
d="m -252.32741,151.06871 h -0.69645 v -4.61678 l -1.39664,0.51298 v -0.62905 l 1.9845,-0.74513 h 0.10859 z" /> | |||||
<path | |||||
inkscape:connector-curvature="0" | |||||
id="path193" | |||||
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:7.66842079px;font-family:Roboto;-inkscape-font-specification:'Roboto, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.93716365px" | |||||
d="m -246.8719,148.74347 q 0,1.21691 -0.41562,1.80852 -0.41562,0.59161 -1.29929,0.59161 -0.87243,0 -1.2918,-0.57663 -0.41936,-0.58038 -0.43434,-1.72989 v -0.92485 q 0,-1.20194 0.41562,-1.78606 0.41562,-0.58411 1.30303,-0.58411 0.87993,0 1.29555,0.56539 0.41562,0.56165 0.42685,1.73738 z m -0.6927,-0.94732 q 0,-0.87992 -0.24713,-1.28056 -0.24712,-0.40439 -0.78257,-0.40439 -0.53169,0 -0.77508,0.40064 -0.24338,0.40065 -0.25087,1.23189 v 1.10833 q 0,0.88366 0.25462,1.30677 0.25836,0.41937 0.77882,0.41937 0.51298,0 0.7601,-0.3969 0.25088,-0.3969 0.26211,-1.25061 z" /> | |||||
</g> | |||||
<g | |||||
id="text139" | |||||
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:7.66842079px;line-height:125%;font-family:Roboto;-inkscape-font-specification:'Roboto, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.93716365px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" | |||||
transform="matrix(0.28055665,0,0,0.28232354,112.29025,103.882)" | |||||
aria-label="11"> | |||||
<path | |||||
inkscape:connector-curvature="0" | |||||
id="path186" | |||||
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:7.66842079px;font-family:Roboto;-inkscape-font-specification:'Roboto, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.93716365px" | |||||
d="m -227.87064,151.22795 h -0.69645 v -4.61678 l -1.39664,0.51298 v -0.62905 l 1.98451,-0.74513 h 0.10858 z" /> | |||||
<path | |||||
inkscape:connector-curvature="0" | |||||
id="path188" | |||||
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:7.66842079px;font-family:Roboto;-inkscape-font-specification:'Roboto, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.93716365px" | |||||
d="m -223.55715,151.22795 h -0.69645 v -4.61678 l -1.39664,0.51298 v -0.62905 l 1.9845,-0.74513 h 0.10859 z" /> | |||||
</g> | |||||
<g | |||||
id="text143" | |||||
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:7.66842079px;line-height:125%;font-family:Roboto;-inkscape-font-specification:'Roboto, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.93716365px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" | |||||
transform="matrix(0.28055665,0,0,0.28232354,111.86815,103.882)" | |||||
aria-label="12"> | |||||
<path | |||||
inkscape:connector-curvature="0" | |||||
id="path181" | |||||
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:7.66842079px;font-family:Roboto;-inkscape-font-specification:'Roboto, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.93716365px" | |||||
d="m -203.41387,151.22795 h -0.69644 v -4.61678 l -1.39664,0.51298 v -0.62905 l 1.9845,-0.74513 h 0.10858 z" /> | |||||
<path | |||||
inkscape:connector-curvature="0" | |||||
id="path183" | |||||
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:7.66842079px;font-family:Roboto;-inkscape-font-specification:'Roboto, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.93716365px" | |||||
d="m -197.80484,151.22795 h -3.5721 v -0.498 l 1.88715,-2.09683 q 0.41937,-0.47553 0.57663,-0.77134 0.16101,-0.29954 0.16101,-0.61781 0,-0.42686 -0.25836,-0.7002 -0.25836,-0.27333 -0.68896,-0.27333 -0.51672,0 -0.80504,0.2958 -0.28457,0.29206 -0.28457,0.81627 h -0.6927 q 0,-0.75262 0.48302,-1.21691 0.48676,-0.4643 1.29929,-0.4643 0.7601,0 1.20193,0.40064 0.44183,0.3969 0.44183,1.05965 0,0.80504 -1.02595,1.91711 l -1.46029,1.58385 h 2.73711 z" /> | |||||
</g> | |||||
<g | |||||
id="text147" | |||||
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:7.66842079px;line-height:125%;font-family:Roboto;-inkscape-font-specification:'Roboto, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.93716365px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" | |||||
transform="matrix(0.28055665,0,0,0.28232354,111.65827,103.882)" | |||||
aria-label="13"> | |||||
<path | |||||
inkscape:connector-curvature="0" | |||||
id="path176" | |||||
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:7.66842079px;font-family:Roboto;-inkscape-font-specification:'Roboto, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.93716365px" | |||||
d="m -178.95709,151.06871 h -0.69645 v -4.61678 l -1.39664,0.51298 v -0.62905 l 1.9845,-0.74513 h 0.10859 z" /> | |||||
<path | |||||
inkscape:connector-curvature="0" | |||||
id="path178" | |||||
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:7.66842079px;font-family:Roboto;-inkscape-font-specification:'Roboto, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.93716365px" | |||||
d="m -175.91294,148.00584 h 0.52046 q 0.49051,-0.007 0.77134,-0.25836 0.28083,-0.25088 0.28083,-0.67773 0,-0.95855 -0.95481,-0.95855 -0.44932,0 -0.71892,0.25836 -0.26585,0.25461 -0.26585,0.67772 h -0.6927 q 0,-0.64777 0.47179,-1.07462 0.47553,-0.4306 1.20568,-0.4306 0.77133,0 1.20942,0.40813 0.43809,0.40813 0.43809,1.13454 0,0.35571 -0.23215,0.68896 -0.22841,0.33324 -0.62531,0.49799 0.44933,0.14229 0.69271,0.47179 0.24712,0.3295 0.24712,0.80504 0,0.73389 -0.47927,1.16449 -0.47928,0.4306 -1.24687,0.4306 -0.76759,0 -1.25061,-0.41563 -0.47928,-0.41562 -0.47928,-1.09709 h 0.69645 q 0,0.4306 0.28083,0.68896 0.28082,0.25836 0.75261,0.25836 0.50174,0 0.76759,-0.2621 0.26585,-0.26211 0.26585,-0.75262 0,-0.47553 -0.29206,-0.73014 -0.29206,-0.25462 -0.84248,-0.26211 h -0.52046 z" /> | |||||
</g> | |||||
<g | |||||
id="text151" | |||||
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:7.66842079px;line-height:125%;font-family:Roboto;-inkscape-font-specification:'Roboto, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.93716365px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" | |||||
transform="matrix(0.28055665,0,0,0.28232354,111.37222,103.882)" | |||||
aria-label="14"> | |||||
<path | |||||
inkscape:connector-curvature="0" | |||||
id="path171" | |||||
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:7.66842079px;font-family:Roboto;-inkscape-font-specification:'Roboto, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.93716365px" | |||||
d="m -154.50032,151.22795 h -0.69645 v -4.61678 l -1.39664,0.51298 v -0.62905 l 1.9845,-0.74513 h 0.10859 z" /> | |||||
<path | |||||
inkscape:connector-curvature="0" | |||||
id="path173" | |||||
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:7.66842079px;font-family:Roboto;-inkscape-font-specification:'Roboto, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.93716365px" | |||||
d="m -149.53906,149.39697 h 0.75635 v 0.56539 h -0.75635 v 1.26559 h -0.69645 v -1.26559 h -2.4825 v -0.40813 l 2.44131,-3.77805 h 0.73764 z m -2.39264,0 h 1.69619 v -2.67347 l -0.0824,0.14978 z" /> | |||||
</g> | |||||
<g | |||||
id="text155" | |||||
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:7.66842079px;line-height:125%;font-family:Roboto;-inkscape-font-specification:'Roboto, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.93716365px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" | |||||
transform="matrix(0.28055665,0,0,0.28232354,111.15023,103.882)" | |||||
aria-label="15"> | |||||
<path | |||||
inkscape:connector-curvature="0" | |||||
id="path166" | |||||
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:7.66842079px;font-family:Roboto;-inkscape-font-specification:'Roboto, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.93716365px" | |||||
d="m -130.04353,151.06871 h -0.69645 v -4.61678 l -1.39664,0.51298 v -0.62905 l 1.9845,-0.74513 h 0.10859 z" /> | |||||
<path | |||||
inkscape:connector-curvature="0" | |||||
id="path168" | |||||
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:7.66842079px;font-family:Roboto;-inkscape-font-specification:'Roboto, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.93716365px" | |||||
d="m -127.68834,148.33534 0.27708,-2.7184 h 2.79328 v 0.64029 h -2.20542 l -0.16475,1.4865 q 0.40065,-0.23589 0.90988,-0.23589 0.74512,0 1.18321,0.49425 0.43809,0.49051 0.43809,1.32924 0,0.84248 -0.45681,1.32925 -0.45307,0.48302 -1.26933,0.48302 -0.72266,0 -1.17947,-0.40065 -0.45681,-0.40064 -0.52047,-1.10832 h 0.65526 q 0.0637,0.46804 0.33325,0.70768 0.26959,0.23589 0.71143,0.23589 0.48302,0 0.75635,-0.3295 0.27709,-0.3295 0.27709,-0.90988 0,-0.54667 -0.29955,-0.87617 -0.29581,-0.33325 -0.79006,-0.33325 -0.45306,0 -0.71142,0.19845 l -0.18348,0.14977 z" /> | |||||
</g> | |||||
<g | |||||
id="text159" | |||||
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:7.66842079px;line-height:125%;font-family:Roboto;-inkscape-font-specification:'Roboto, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.93716365px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" | |||||
transform="matrix(0.28055665,0,0,0.28232354,110.91881,103.882)" | |||||
aria-label="16"> | |||||
<path | |||||
inkscape:connector-curvature="0" | |||||
id="path161" | |||||
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:7.66842079px;font-family:Roboto;-inkscape-font-specification:'Roboto, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.93716365px" | |||||
d="m -105.58677,151.06871 h -0.69645 v -4.61678 l -1.39664,0.51298 v -0.62905 l 1.9845,-0.74513 h 0.10859 z" /> | |||||
<path | |||||
inkscape:connector-curvature="0" | |||||
id="path163" | |||||
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:7.66842079px;font-family:Roboto;-inkscape-font-specification:'Roboto, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.93716365px" | |||||
d="m -100.83145,145.6132 v 0.58786 h -0.12731 q -0.80878,0.015 -1.28805,0.47928 -0.47928,0.4643 -0.55417,1.30677 0.4306,-0.49425 1.17573,-0.49425 0.71142,0 1.13453,0.50174 0.42686,0.50174 0.42686,1.29555 0,0.84247 -0.46055,1.34796 -0.45681,0.50549 -1.22815,0.50549 -0.78257,0 -1.26933,-0.5991 -0.48677,-0.60284 -0.48677,-1.55016 v -0.26585 q 0,-1.50522 0.64028,-2.29902 0.64403,-0.79755 1.91337,-0.81627 z m -0.90988,2.45629 q -0.35571,0 -0.65526,0.21343 -0.29955,0.21342 -0.41562,0.53544 v 0.25461 q 0,0.67399 0.30329,1.08586 0.30329,0.41188 0.75636,0.41188 0.46804,0 0.73389,-0.34448 0.26959,-0.34448 0.26959,-0.90238 0,-0.56166 -0.27333,-0.90614 -0.2696,-0.34822 -0.71892,-0.34822 z" /> | |||||
</g> | |||||
<g | |||||
aria-label="Prob" | |||||
style="font-style:normal;font-weight:normal;font-size:3.17499995px;line-height:125%;font-family:Sans;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" | |||||
id="text1083" | |||||
transform="translate(0.71815477,-0.37798736)"> | |||||
<path | |||||
d="m -27.842636,146.40857 v 0.6873 h -0.23151 v -1.75562 h 0.647506 q 0.288182,0 0.450963,0.14711 0.163986,0.1471 0.163986,0.38946 0,0.25563 -0.160369,0.3943 -0.159164,0.13745 -0.456992,0.13745 z m 0,-0.1893 h 0.415996 q 0.18569,0 0.284564,-0.0868 0.09887,-0.088 0.09887,-0.25321 0,-0.15676 -0.09887,-0.25081 -0.09887,-0.0941 -0.271301,-0.0977 h -0.429259 z" | |||||
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:2.46944451px;font-family:Roboto;-inkscape-font-specification:'Roboto, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.26458332px" | |||||
id="path1085" | |||||
inkscape:connector-curvature="0" /> | |||||
<path | |||||
d="m -25.920617,145.99137 q -0.05064,-0.008 -0.109726,-0.008 -0.219453,0 -0.297829,0.1869 v 0.92604 h -0.22307 v -1.30466 h 0.217041 l 0.0036,0.15073 q 0.109726,-0.17484 0.311092,-0.17484 0.06511,0 0.09887,0.0169 z" | |||||
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:2.46944451px;font-family:Roboto;-inkscape-font-specification:'Roboto, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.26458332px" | |||||
id="path1087" | |||||
inkscape:connector-curvature="0" /> | |||||
<path | |||||
d="m -25.800039,146.43148 q 0,-0.19172 0.07476,-0.34485 0.07596,-0.15313 0.209806,-0.23633 0.135048,-0.0832 0.307475,-0.0832 0.266478,0 0.430465,0.18448 0.165192,0.18449 0.165192,0.49076 v 0.0157 q 0,0.19052 -0.07355,0.34244 -0.07235,0.15073 -0.2086,0.23513 -0.135048,0.0844 -0.311092,0.0844 -0.265273,0 -0.430465,-0.18449 -0.163987,-0.18448 -0.163987,-0.48834 z m 0.224276,0.0265 q 0,0.21704 0.10008,0.34847 0.101286,0.13143 0.270096,0.13143 0.170015,0 0.270095,-0.13263 0.10008,-0.13384 0.10008,-0.3738 0,-0.21463 -0.102492,-0.34726 -0.101285,-0.13384 -0.270095,-0.13384 -0.165192,0 -0.266478,0.13143 -0.101286,0.13143 -0.101286,0.3762 z" | |||||
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:2.46944451px;font-family:Roboto;-inkscape-font-specification:'Roboto, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.26458332px" | |||||
id="path1089" | |||||
inkscape:connector-curvature="0" /> | |||||
<path | |||||
d="m -23.228102,146.45801 q 0,0.29904 -0.13746,0.48111 -0.137459,0.18087 -0.368969,0.18087 -0.247186,0 -0.382234,-0.17484 l -0.01085,0.15072 H -24.3326 v -1.85208 h 0.22307 v 0.69091 q 0.135048,-0.1676 0.372587,-0.1676 0.237539,0 0.372587,0.17966 0.136254,0.17966 0.136254,0.49196 z m -0.22307,-0.0253 q 0,-0.22789 -0.08802,-0.35209 -0.08802,-0.12419 -0.253214,-0.12419 -0.220658,0 -0.317121,0.20498 v 0.56431 q 0.102491,0.20498 0.319532,0.20498 0.16037,0 0.249598,-0.1242 0.08923,-0.12419 0.08923,-0.37379 z" | |||||
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:2.46944451px;font-family:Roboto;-inkscape-font-specification:'Roboto, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.26458332px" | |||||
id="path1091" | |||||
inkscape:connector-curvature="0" /> | |||||
</g> | |||||
<g | |||||
id="g1102" | |||||
style="font-style:normal;font-weight:normal;font-size:3.17499995px;line-height:125%;font-family:Sans;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" | |||||
aria-label="Prob" | |||||
transform="translate(122.38891,-0.3779762)"> | |||||
<path | |||||
id="path1094" | |||||
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:2.46944451px;font-family:Roboto;-inkscape-font-specification:'Roboto, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.26458332px" | |||||
d="m -27.842636,146.40857 v 0.6873 h -0.23151 v -1.75562 h 0.647506 q 0.288182,0 0.450963,0.14711 0.163986,0.1471 0.163986,0.38946 0,0.25563 -0.160369,0.3943 -0.159164,0.13745 -0.456992,0.13745 z m 0,-0.1893 h 0.415996 q 0.18569,0 0.284564,-0.0868 0.09887,-0.088 0.09887,-0.25321 0,-0.15676 -0.09887,-0.25081 -0.09887,-0.0941 -0.271301,-0.0977 h -0.429259 z" | |||||
inkscape:connector-curvature="0" /> | |||||
<path | |||||
id="path1096" | |||||
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:2.46944451px;font-family:Roboto;-inkscape-font-specification:'Roboto, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.26458332px" | |||||
d="m -25.920617,145.99137 q -0.05064,-0.008 -0.109726,-0.008 -0.219453,0 -0.297829,0.1869 v 0.92604 h -0.22307 v -1.30466 h 0.217041 l 0.0036,0.15073 q 0.109726,-0.17484 0.311092,-0.17484 0.06511,0 0.09887,0.0169 z" | |||||
inkscape:connector-curvature="0" /> | |||||
<path | |||||
id="path1098" | |||||
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:2.46944451px;font-family:Roboto;-inkscape-font-specification:'Roboto, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.26458332px" | |||||
d="m -25.800039,146.43148 q 0,-0.19172 0.07476,-0.34485 0.07596,-0.15313 0.209806,-0.23633 0.135048,-0.0832 0.307475,-0.0832 0.266478,0 0.430465,0.18448 0.165192,0.18449 0.165192,0.49076 v 0.0157 q 0,0.19052 -0.07355,0.34244 -0.07235,0.15073 -0.2086,0.23513 -0.135048,0.0844 -0.311092,0.0844 -0.265273,0 -0.430465,-0.18449 -0.163987,-0.18448 -0.163987,-0.48834 z m 0.224276,0.0265 q 0,0.21704 0.10008,0.34847 0.101286,0.13143 0.270096,0.13143 0.170015,0 0.270095,-0.13263 0.10008,-0.13384 0.10008,-0.3738 0,-0.21463 -0.102492,-0.34726 -0.101285,-0.13384 -0.270095,-0.13384 -0.165192,0 -0.266478,0.13143 -0.101286,0.13143 -0.101286,0.3762 z" | |||||
inkscape:connector-curvature="0" /> | |||||
<path | |||||
id="path1100" | |||||
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:2.46944451px;font-family:Roboto;-inkscape-font-specification:'Roboto, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.26458332px" | |||||
d="m -23.228102,146.45801 q 0,0.29904 -0.13746,0.48111 -0.137459,0.18087 -0.368969,0.18087 -0.247186,0 -0.382234,-0.17484 l -0.01085,0.15072 H -24.3326 v -1.85208 h 0.22307 v 0.69091 q 0.135048,-0.1676 0.372587,-0.1676 0.237539,0 0.372587,0.17966 0.136254,0.17966 0.136254,0.49196 z m -0.22307,-0.0253 q 0,-0.22789 -0.08802,-0.35209 -0.08802,-0.12419 -0.253214,-0.12419 -0.220658,0 -0.317121,0.20498 v 0.56431 q 0.102491,0.20498 0.319532,0.20498 0.16037,0 0.249598,-0.1242 0.08923,-0.12419 0.08923,-0.37379 z" | |||||
inkscape:connector-curvature="0" /> | |||||
</g> | |||||
</g> | |||||
</svg> |
@@ -1,685 +0,0 @@ | |||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?> | |||||
<!-- Created with Inkscape (http://www.inkscape.org/) --> | |||||
<svg | |||||
xmlns:dc="http://purl.org/dc/elements/1.1/" | |||||
xmlns:cc="http://creativecommons.org/ns#" | |||||
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" | |||||
xmlns:svg="http://www.w3.org/2000/svg" | |||||
xmlns="http://www.w3.org/2000/svg" | |||||
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" | |||||
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" | |||||
width="330.49908" | |||||
height="380" | |||||
viewBox="0 0 87.444549 100.54166" | |||||
version="1.1" | |||||
id="svg12553" | |||||
inkscape:version="0.92.2 5c3e80d, 2017-08-06" | |||||
sodipodi:docname="QuadSeq.svg"> | |||||
<defs | |||||
id="defs12547" /> | |||||
<sodipodi:namedview | |||||
id="base" | |||||
pagecolor="#ffffff" | |||||
bordercolor="#666666" | |||||
borderopacity="1.0" | |||||
inkscape:pageopacity="0.0" | |||||
inkscape:pageshadow="2" | |||||
inkscape:zoom="1.979899" | |||||
inkscape:cx="47.874682" | |||||
inkscape:cy="190.99895" | |||||
inkscape:document-units="mm" | |||||
inkscape:current-layer="layer1" | |||||
showgrid="true" | |||||
fit-margin-top="0" | |||||
fit-margin-left="0" | |||||
fit-margin-right="0" | |||||
fit-margin-bottom="0" | |||||
units="px" | |||||
inkscape:window-width="1898" | |||||
inkscape:window-height="1026" | |||||
inkscape:window-x="10" | |||||
inkscape:window-y="42" | |||||
inkscape:window-maximized="0" | |||||
inkscape:snap-grids="true" | |||||
showguides="true" | |||||
inkscape:guide-bbox="true"> | |||||
<inkscape:grid | |||||
type="xygrid" | |||||
id="grid12870" | |||||
originx="-20.372917" | |||||
originy="84.666661" /> | |||||
</sodipodi:namedview> | |||||
<metadata | |||||
id="metadata12550"> | |||||
<rdf:RDF> | |||||
<cc:Work | |||||
rdf:about=""> | |||||
<dc:format>image/svg+xml</dc:format> | |||||
<dc:type | |||||
rdf:resource="http://purl.org/dc/dcmitype/StillImage" /> | |||||
<dc:title></dc:title> | |||||
</cc:Work> | |||||
</rdf:RDF> | |||||
</metadata> | |||||
<g | |||||
inkscape:label="Layer 1" | |||||
inkscape:groupmode="layer" | |||||
id="layer1" | |||||
transform="translate(-26.543497,-161.30655)" | |||||
style="display:inline;opacity:1"> | |||||
<path | |||||
inkscape:connector-curvature="0" | |||||
id="path33453" | |||||
d="m 26.616839,161.37987 h 87.297891 v 100.3961 H 26.616839 Z m 0,0" | |||||
style="fill:#e6e6e6;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.27602378" /> | |||||
<path | |||||
inkscape:connector-curvature="0" | |||||
id="path35483" | |||||
d="M 31.535655,201.88078 H 108.99592" | |||||
style="fill:none;stroke:#000000;stroke-width:0.18383184;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;stroke-opacity:1" /> | |||||
<path | |||||
inkscape:connector-curvature="0" | |||||
id="path35723" | |||||
d="m 53.890107,251.42663 h 32.75133" | |||||
style="fill:none;stroke:#000000;stroke-width:0.18574786;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;stroke-opacity:1" /> | |||||
<path | |||||
inkscape:connector-curvature="0" | |||||
id="path35809" | |||||
d="m 49.914977,173.21281 v 23.8614" | |||||
style="fill:none;stroke:#000000;stroke-width:0.27337801;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;stroke-opacity:1" /> | |||||
<path | |||||
style="fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.27602378" | |||||
d="m 34.621094,205.12747 c 0,0.0776 0.06038,0.13802 0.133694,0.13802 0.07763,0 0.138007,-0.0604 0.138007,-0.13802 v -1.3068 c 0,-0.0733 -0.06038,-0.1337 -0.138007,-0.1337 h -0.0042 c -0.03881,0 -0.07763,0.009 -0.129382,0.0259 l -0.237225,0.0733 c -0.05175,0.0173 -0.09057,0.0604 -0.09057,0.11645 0,0.0647 0.05606,0.11644 0.120756,0.11644 0.01296,0 0.0345,-0.004 0.04744,-0.009 l 0.159596,-0.0474 z m 0,0" | |||||
id="path7275" | |||||
inkscape:connector-curvature="0" /> | |||||
<path | |||||
style="fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.27602378" | |||||
d="m 44.255949,205.12316 c 0,0.0819 0.06038,0.12939 0.146632,0.12939 h 0.875533 c 0.06469,0 0.120756,-0.0518 0.120756,-0.12077 0,-0.0647 -0.05607,-0.11644 -0.120756,-0.11644 h -0.625369 l 0.314827,-0.2674 c 0.27604,-0.21996 0.405421,-0.35365 0.405421,-0.59518 v -0.009 c 0,-0.27603 -0.211349,-0.46148 -0.513238,-0.46148 -0.241512,0 -0.383858,0.0949 -0.508926,0.25015 -0.0217,0.0259 -0.0345,0.0561 -0.0345,0.0862 0,0.069 0.05607,0.12076 0.125068,0.12076 0.04313,0 0.07334,-0.0173 0.09491,-0.0388 0.09488,-0.11645 0.181134,-0.17252 0.306203,-0.17252 0.138006,0 0.250137,0.0863 0.250137,0.24152 0,0.13801 -0.07763,0.23721 -0.293264,0.41404 l -0.474425,0.40541 c -0.04313,0.0388 -0.069,0.0819 -0.069,0.1337 z m 0,0" | |||||
id="path7271" | |||||
inkscape:connector-curvature="0" /> | |||||
<path | |||||
style="fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.27602378" | |||||
d="m 55.013325,205.27842 c 0.323453,0 0.543428,-0.2027 0.543428,-0.49167 v -0.004 c 0,-0.28465 -0.224287,-0.40109 -0.457174,-0.43129 l 0.366607,-0.37521 c 0.04313,-0.0474 0.07763,-0.0863 0.07763,-0.15095 0,-0.0733 -0.06038,-0.11645 -0.138007,-0.11645 h -0.789278 c -0.06469,0 -0.120756,0.0517 -0.120756,0.11645 0,0.0647 0.05606,0.11644 0.120756,0.11644 h 0.560678 l -0.362267,0.38816 c -0.04313,0.0431 -0.05607,0.0733 -0.05607,0.11214 0,0.0604 0.05175,0.11644 0.116444,0.11644 h 0.05607 c 0.215635,0 0.353642,0.0863 0.353642,0.23721 v 0.004 c 0,0.14233 -0.112131,0.2329 -0.267388,0.2329 -0.142319,0 -0.25445,-0.0474 -0.349356,-0.14664 -0.0217,-0.0216 -0.05175,-0.0345 -0.09057,-0.0345 -0.07332,0 -0.129381,0.0604 -0.129381,0.12938 0,0.0388 0.0172,0.0776 0.04313,0.0992 0.125069,0.12076 0.293291,0.19839 0.521864,0.19839 z m 0,0" | |||||
id="path7267" | |||||
inkscape:connector-curvature="0" /> | |||||
<path | |||||
style="fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.27602378" | |||||
d="m 65.337817,205.1361 c 0,0.0733 0.05606,0.12939 0.129381,0.12939 0.07334,0 0.129408,-0.0561 0.129408,-0.12939 v -0.22859 h 0.120755 c 0.06469,0 0.112131,-0.0517 0.112131,-0.11213 0,-0.0604 -0.04744,-0.11213 -0.112131,-0.11213 h -0.120755 v -0.86689 c 0,-0.0733 -0.05607,-0.1337 -0.129408,-0.1337 -0.08194,0 -0.116443,0.0345 -0.168196,0.0906 l -0.724561,0.86257 c -0.03881,0.0431 -0.06038,0.0906 -0.06038,0.14233 0,0.0733 0.06038,0.12938 0.133694,0.12938 h 0.69006 z m -0.5089,-0.45285 0.5089,-0.61243 v 0.61243 z m 0,0" | |||||
id="path7263" | |||||
inkscape:connector-curvature="0" /> | |||||
<path | |||||
style="fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.27602378" | |||||
d="m 75.346422,205.27842 c 0.327766,0 0.564991,-0.20702 0.564991,-0.52186 v -0.004 c 0,-0.32778 -0.237225,-0.48735 -0.539115,-0.48735 -0.103505,0 -0.172508,0.0173 -0.245824,0.0431 l 0.02593,-0.36228 h 0.57793 c 0.069,0 0.120755,-0.0517 0.120755,-0.11644 0,-0.069 -0.05175,-0.12076 -0.120755,-0.12076 h -0.698687 c -0.06472,0 -0.120782,0.0474 -0.125095,0.12076 l -0.03019,0.55636 c -0.0042,0.0517 0.01297,0.0906 0.05175,0.11644 0.05175,0.0388 0.08625,0.0561 0.129408,0.0561 0.03881,0 0.11213,-0.0561 0.263075,-0.0561 0.189759,0 0.31914,0.0992 0.31914,0.25878 v 0.004 c 0,0.16389 -0.125068,0.2674 -0.297577,0.2674 -0.120756,0 -0.232886,-0.0431 -0.336417,-0.12939 -0.0217,-0.0216 -0.04744,-0.0302 -0.08194,-0.0302 -0.069,0 -0.129381,0.0604 -0.129381,0.1337 0,0.0431 0.0217,0.0776 0.05606,0.10351 0.125069,0.0992 0.284665,0.1682 0.495988,0.1682 z m 0,0" | |||||
id="path7259" | |||||
inkscape:connector-curvature="0" /> | |||||
<path | |||||
style="fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.27602378" | |||||
d="m 85.546692,205.27842 c 0.323479,0 0.573616,-0.21996 0.573616,-0.52617 v -0.004 c 0,-0.30622 -0.241511,-0.48304 -0.539115,-0.48304 -0.185446,0 -0.288951,0.0733 -0.370893,0.15095 0.01296,-0.28034 0.138007,-0.48736 0.370893,-0.48736 0.103505,0 0.181134,0.0302 0.263076,0.0863 0.0217,0.009 0.04315,0.0172 0.06903,0.0172 0.069,0 0.129382,-0.0517 0.129382,-0.12507 0,-0.0561 -0.02593,-0.0906 -0.069,-0.11645 -0.09919,-0.069 -0.224287,-0.11214 -0.383857,-0.11214 -0.439923,0 -0.664184,0.37091 -0.664184,0.84533 v 0.004 c 0,0.31053 0.07332,0.4701 0.189759,0.58655 0.103532,0.10351 0.241539,0.16389 0.431298,0.16389 z m -0.0087,-0.23721 c -0.194071,0 -0.31914,-0.11644 -0.31914,-0.27602 v -0.004 c 0,-0.14664 0.120756,-0.27171 0.310515,-0.27171 0.194072,0 0.31914,0.11644 0.31914,0.27171 v 0.004 c 0,0.15958 -0.116443,0.27602 -0.310515,0.27602 z m 0,0" | |||||
id="path7255" | |||||
inkscape:connector-curvature="0" /> | |||||
<path | |||||
style="fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.27602378" | |||||
d="m 95.326406,205.14041 c 0,0.0776 0.06903,0.12508 0.138033,0.12508 0.05607,0 0.09919,-0.0302 0.133694,-0.0906 l 0.638307,-1.21624 c 0.0217,-0.0431 0.03881,-0.0906 0.03881,-0.12938 0,-0.0776 -0.04744,-0.12076 -0.125069,-0.12076 h -0.866907 c -0.06469,0 -0.120756,0.0517 -0.120756,0.11645 0,0.069 0.05606,0.12076 0.120756,0.12076 h 0.668496 l -0.599493,1.11272 c -0.01296,0.0259 -0.02593,0.0604 -0.02593,0.0819 z m 0,0" | |||||
id="path7251" | |||||
inkscape:connector-curvature="0" /> | |||||
<path | |||||
style="fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.27602378" | |||||
d="m 105.8677,205.27411 c 0.3407,0 0.59086,-0.17252 0.59086,-0.44854 v -0.004 c 0,-0.18114 -0.10781,-0.29328 -0.28035,-0.37091 0.13372,-0.069 0.2286,-0.17251 0.2286,-0.34503 v -0.004 c 0,-0.23721 -0.2286,-0.41835 -0.53911,-0.41835 -0.30621,0 -0.53481,0.18114 -0.53481,0.41835 v 0.004 c 0,0.17252 0.0949,0.27603 0.22429,0.34503 -0.17253,0.0733 -0.27604,0.18977 -0.27604,0.37522 v 0.004 c 0,0.2674 0.25017,0.44423 0.58656,0.44423 z m 0,-0.91433 c -0.15957,0 -0.27602,-0.0949 -0.27602,-0.22858 v -0.004 c 0,-0.11645 0.11213,-0.21565 0.27602,-0.21565 0.16819,0 0.27601,0.0992 0.27601,0.21565 v 0.004 c 0,0.1337 -0.11644,0.22858 -0.27601,0.22858 z m 0,0.68575 c -0.2027,0 -0.31914,-0.10351 -0.31914,-0.22859 v -0.004 c 0,-0.14232 0.138,-0.2372 0.31914,-0.2372 0.18544,0 0.32776,0.0949 0.32776,0.2372 v 0.004 c 0,0.12508 -0.12507,0.22859 -0.32776,0.22859 z m 0,0" | |||||
id="path7247" | |||||
inkscape:connector-curvature="0" /> | |||||
<text | |||||
xml:space="preserve" | |||||
style="font-style:normal;font-weight:normal;font-size:3.17499995px;line-height:125%;font-family:Sans;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" | |||||
x="150.3685" | |||||
y="173.2128" | |||||
id="text92"><tspan | |||||
sodipodi:role="line" | |||||
id="tspan90" | |||||
x="150.3685" | |||||
y="176.02193" | |||||
style="stroke-width:0.26458332px" /></text> | |||||
<g | |||||
aria-label="Steps" | |||||
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:2.82222223px;line-height:125%;font-family:Roboto;-inkscape-font-specification:'Roboto, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" | |||||
id="text144" | |||||
transform="translate(-8.9958338,12.700002)"> | |||||
<path | |||||
d="m 64.144646,171.78929 q -0.340375,-0.0978 -0.496093,-0.23978 -0.154341,-0.14331 -0.154341,-0.35277 0,-0.23703 0.188792,-0.39137 0.190169,-0.15571 0.493337,-0.15571 0.206706,0 0.367936,0.0799 0.162609,0.0799 0.250803,0.22049 0.08957,0.14056 0.08957,0.3073 h -0.265961 q 0,-0.1819 -0.115756,-0.28525 -0.115755,-0.10473 -0.326595,-0.10473 -0.195681,0 -0.305924,0.0868 -0.108865,0.0854 -0.108865,0.2384 0,0.12265 0.103353,0.20809 0.104731,0.0841 0.354155,0.15434 0.250803,0.0703 0.391363,0.15571 0.141938,0.0841 0.209462,0.19706 0.0689,0.113 0.0689,0.26597 0,0.24391 -0.190169,0.39136 -0.19017,0.14607 -0.508496,0.14607 -0.206706,0 -0.385851,-0.0785 -0.179145,-0.0799 -0.276986,-0.21773 -0.09646,-0.1378 -0.09646,-0.31281 h 0.265961 q 0,0.1819 0.13367,0.28801 0.135047,0.10473 0.359668,0.10473 0.209461,0 0.321083,-0.0854 0.111621,-0.0854 0.111621,-0.23289 0,-0.14745 -0.103353,-0.22737 -0.103353,-0.0813 -0.374827,-0.15986 z" | |||||
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:2.82222223px;font-family:Roboto;-inkscape-font-specification:'Roboto, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.26458332px" | |||||
id="path195" | |||||
inkscape:connector-curvature="0" /> | |||||
<path | |||||
d="m 65.535087,170.83156 v 0.36104 h 0.278364 v 0.19706 h -0.278364 v 0.92467 q 0,0.0896 0.03721,0.13504 0.03721,0.0441 0.126779,0.0441 0.0441,0 0.121268,-0.0165 v 0.20671 q -0.100597,0.0276 -0.195682,0.0276 -0.170876,0 -0.257693,-0.10335 -0.08682,-0.10336 -0.08682,-0.29352 v -0.92467 h -0.271474 v -0.19706 h 0.271474 v -0.36104 z" | |||||
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:2.82222223px;font-family:Roboto;-inkscape-font-specification:'Roboto, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.26458332px" | |||||
id="path197" | |||||
inkscape:connector-curvature="0" /> | |||||
<path | |||||
d="m 66.728468,172.7112 q -0.303168,0 -0.493338,-0.19844 -0.190169,-0.19981 -0.190169,-0.5333 v -0.0468 q 0,-0.22187 0.08406,-0.3955 0.08544,-0.17501 0.237023,-0.27285 0.152962,-0.0992 0.330729,-0.0992 0.290766,0 0.451997,0.19155 0.16123,0.19155 0.16123,0.54846 v 0.10611 h -1.010102 q 0.0055,0.22048 0.128158,0.35691 0.124023,0.13505 0.314192,0.13505 0.135048,0 0.228755,-0.0551 0.09371,-0.0551 0.163986,-0.14607 l 0.155719,0.12127 q -0.187414,0.28801 -0.56224,0.28801 z m -0.0317,-1.3367 q -0.15434,0 -0.259071,0.113 -0.104731,0.11162 -0.129536,0.3142 h 0.746897 v -0.0193 q -0.01102,-0.1943 -0.104731,-0.30041 -0.09371,-0.10749 -0.253559,-0.10749 z" | |||||
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:2.82222223px;font-family:Roboto;-inkscape-font-specification:'Roboto, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.26458332px" | |||||
id="path199" | |||||
inkscape:connector-curvature="0" /> | |||||
<path | |||||
d="m 68.863049,171.95466 q 0,0.34037 -0.155718,0.54846 -0.155719,0.20808 -0.42168,0.20808 -0.271473,0 -0.427192,-0.17225 v 0.71795 h -0.254937 v -2.0643 h 0.232889 l 0.0124,0.16537 q 0.155718,-0.19293 0.432704,-0.19293 0.268717,0 0.424436,0.20257 0.157096,0.20257 0.157096,0.56362 z m -0.254937,-0.0289 q 0,-0.25218 -0.107487,-0.39825 -0.107487,-0.14608 -0.2949,-0.14608 -0.231511,0 -0.347266,0.20533 v 0.71245 q 0.114377,0.20395 0.350022,0.20395 0.183279,0 0.290766,-0.1447 0.108865,-0.14607 0.108865,-0.4327 z" | |||||
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:2.82222223px;font-family:Roboto;-inkscape-font-specification:'Roboto, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.26458332px" | |||||
id="path201" | |||||
inkscape:connector-curvature="0" /> | |||||
<path | |||||
d="m 70.053674,172.28814 q 0,-0.10335 -0.07855,-0.15985 -0.07717,-0.0579 -0.271474,-0.0992 -0.192925,-0.0413 -0.307302,-0.0992 -0.112999,-0.0579 -0.168121,-0.1378 -0.05374,-0.0799 -0.05374,-0.19017 0,-0.18328 0.15434,-0.31006 0.155718,-0.12678 0.396875,-0.12678 0.253559,0 0.410655,0.13092 0.158475,0.13091 0.158475,0.33486 h -0.256315 q 0,-0.10473 -0.08957,-0.18052 -0.08819,-0.0758 -0.223242,-0.0758 -0.139182,0 -0.21773,0.0606 -0.07855,0.0606 -0.07855,0.15847 0,0.0923 0.07304,0.13918 0.07304,0.0469 0.263205,0.0896 0.191547,0.0427 0.310059,0.10197 0.118511,0.0593 0.175011,0.14332 0.05788,0.0827 0.05788,0.20257 0,0.19981 -0.159852,0.32108 -0.159853,0.11989 -0.41479,0.11989 -0.179145,0 -0.316949,-0.0634 -0.137803,-0.0634 -0.216352,-0.17639 -0.07717,-0.11438 -0.07717,-0.24667 h 0.254937 q 0.0069,0.12816 0.101975,0.20395 0.09646,0.0744 0.253559,0.0744 0.144694,0 0.231511,-0.0579 0.08819,-0.0593 0.08819,-0.1571 z" | |||||
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:2.82222223px;font-family:Roboto;-inkscape-font-specification:'Roboto, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.26458332px" | |||||
id="path203" | |||||
inkscape:connector-curvature="0" /> | |||||
</g> | |||||
<rect | |||||
style="opacity:1;fill:#000000;fill-opacity:1;stroke:#000000;stroke-width:0.28466856;stroke-linecap:square;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:0.98999999" | |||||
id="rect73" | |||||
width="38.366405" | |||||
height="7.6566005" | |||||
x="70.9935" | |||||
y="253.52576" | |||||
ry="1.531322" /> | |||||
<g | |||||
aria-label="Range" | |||||
style="font-style:normal;font-weight:normal;font-size:3.17499995px;line-height:125%;font-family:Sans;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" | |||||
id="text133" | |||||
transform="translate(-7.9375004,10.583334)"> | |||||
<path | |||||
d="m 60.694874,185.58914 h -0.353466 v 0.60875 h -0.199472 v -1.50482 h 0.498161 q 0.254248,0 0.390674,0.11576 0.137459,0.11575 0.137459,0.33693 0,0.14056 -0.07648,0.24495 -0.07545,0.10438 -0.21084,0.15606 l 0.353467,0.63872 v 0.0124 H 61.02147 Z m -0.353466,-0.16226 h 0.30489 q 0.147795,0 0.234611,-0.0765 0.08785,-0.0765 0.08785,-0.20464 0,-0.13953 -0.08371,-0.21394 -0.08268,-0.0744 -0.239779,-0.0754 h -0.303857 z" | |||||
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:2.11666656px;font-family:Roboto;-inkscape-font-specification:'Roboto, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.26458332px" | |||||
id="path153" | |||||
inkscape:connector-curvature="0" /> | |||||
<path | |||||
d="m 62.105641,186.19789 q -0.01654,-0.0331 -0.02687,-0.11782 -0.133325,0.13849 -0.318327,0.13849 -0.165364,0 -0.271818,-0.093 -0.10542,-0.0941 -0.10542,-0.23771 0,-0.17466 0.132292,-0.27078 0.133325,-0.0971 0.374137,-0.0971 h 0.186035 v -0.0879 q 0,-0.10026 -0.05994,-0.15917 -0.05994,-0.0599 -0.176734,-0.0599 -0.102319,0 -0.171565,0.0517 -0.06925,0.0517 -0.06925,0.12506 h -0.192236 q 0,-0.0837 0.05891,-0.16123 0.05994,-0.0786 0.16123,-0.12402 0.10232,-0.0455 0.224276,-0.0455 0.19327,0 0.302824,0.0971 0.109554,0.0961 0.113688,0.26562 v 0.5147 q 0,0.15399 0.03927,0.24494 v 0.0165 z m -0.317294,-0.14573 q 0.08992,0 0.170533,-0.0465 0.08062,-0.0465 0.116788,-0.12092 v -0.22944 h -0.149861 q -0.3514,0 -0.3514,0.20567 0,0.0899 0.05994,0.14056 0.05994,0.0506 0.153995,0.0506 z" | |||||
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:2.11666656px;font-family:Roboto;-inkscape-font-specification:'Roboto, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.26458332px" | |||||
id="path155" | |||||
inkscape:connector-curvature="0" /> | |||||
<path | |||||
d="m 62.749529,185.07961 0.0062,0.14056 q 0.128158,-0.16123 0.334864,-0.16123 0.3545,0 0.3576,0.39998 v 0.73897 h -0.191202 v -0.74001 q -10e-4,-0.12092 -0.05581,-0.1788 -0.05374,-0.0579 -0.168465,-0.0579 -0.09302,0 -0.163298,0.0496 -0.07028,0.0496 -0.109554,0.13022 v 0.79685 h -0.191202 v -1.11828 z" | |||||
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:2.11666656px;font-family:Roboto;-inkscape-font-specification:'Roboto, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.26458332px" | |||||
id="path157" | |||||
inkscape:connector-curvature="0" /> | |||||
<path | |||||
d="m 63.693141,185.62945 q 0,-0.26148 0.120923,-0.41548 0.120923,-0.15503 0.320394,-0.15503 0.204638,0 0.31936,0.1447 l 0.0093,-0.12403 h 0.174666 v 1.09141 q 0,0.21704 -0.129191,0.3421 -0.128158,0.12505 -0.345199,0.12505 -0.120922,0 -0.236678,-0.0517 -0.115755,-0.0517 -0.176733,-0.1416 l 0.09922,-0.11472 q 0.12299,0.15193 0.300757,0.15193 0.139526,0 0.217041,-0.0786 0.07855,-0.0785 0.07855,-0.22117 v -0.0961 q -0.114722,0.13229 -0.313159,0.13229 -0.196371,0 -0.318327,-0.15813 -0.120923,-0.15813 -0.120923,-0.43098 z m 0.192236,0.0217 q 0,0.18914 0.07751,0.29766 0.07751,0.10749 0.217041,0.10749 0.180867,0 0.265617,-0.16433 v -0.51057 q -0.08785,-0.16019 -0.26355,-0.16019 -0.139526,0 -0.218075,0.10852 -0.07855,0.10852 -0.07855,0.32142 z" | |||||
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:2.11666656px;font-family:Roboto;-inkscape-font-specification:'Roboto, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.26458332px" | |||||
id="path159" | |||||
inkscape:connector-curvature="0" /> | |||||
<path | |||||
d="m 65.389161,186.21856 q -0.227376,0 -0.370003,-0.14883 -0.142627,-0.14986 -0.142627,-0.39997 v -0.0351 q 0,-0.1664 0.06305,-0.29662 0.06408,-0.13126 0.177767,-0.20464 0.114722,-0.0744 0.248047,-0.0744 0.218074,0 0.338997,0.14366 0.120923,0.14366 0.120923,0.41135 v 0.0796 h -0.757576 q 0.0041,0.16536 0.09612,0.26768 0.09302,0.10129 0.235644,0.10129 0.101286,0 0.171566,-0.0413 0.07028,-0.0413 0.12299,-0.10956 l 0.116789,0.091 q -0.14056,0.21601 -0.42168,0.21601 z m -0.02377,-1.00252 q -0.115755,0 -0.194304,0.0848 -0.07855,0.0837 -0.09715,0.23564 h 0.560172 v -0.0145 q -0.0083,-0.14572 -0.07855,-0.22531 -0.07028,-0.0806 -0.190169,-0.0806 z" | |||||
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:2.11666656px;font-family:Roboto;-inkscape-font-specification:'Roboto, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.26458332px" | |||||
id="path161" | |||||
inkscape:connector-curvature="0" /> | |||||
</g> | |||||
<g | |||||
aria-label="Mode" | |||||
style="font-style:normal;font-weight:normal;font-size:3.17499995px;line-height:125%;font-family:Sans;letter-spacing:0px;word-spacing:0px;display:inline;opacity:1;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" | |||||
id="text133-9" | |||||
transform="translate(-7.4083337,10.583334)"> | |||||
<path | |||||
d="m 66.150136,186.5317 0.491959,1.22783 0.49196,-1.22783 h 0.257349 v 1.50481 h -0.198438 v -0.58601 l 0.0186,-0.63252 -0.494027,1.21853 H 66.56561 l -0.492993,-1.21543 0.01964,0.62942 v 0.58601 H 65.89382 v -1.50481 z" | |||||
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:2.11666656px;font-family:Roboto;-inkscape-font-specification:'Roboto, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.26458332px" | |||||
id="path164" | |||||
inkscape:connector-curvature="0" /> | |||||
<path | |||||
d="m 67.661155,187.46704 q 0,-0.16433 0.06408,-0.29559 0.06511,-0.13126 0.179834,-0.20257 0.115756,-0.0713 0.26355,-0.0713 0.22841,0 0.36897,0.15813 0.141593,0.15813 0.141593,0.42064 v 0.0134 q 0,0.1633 -0.06305,0.29352 -0.06201,0.12919 -0.1788,0.20154 -0.115756,0.0723 -0.266651,0.0723 -0.227376,0 -0.36897,-0.15813 -0.140559,-0.15812 -0.140559,-0.41857 z m 0.192236,0.0227 q 0,0.18603 0.08578,0.29869 0.08682,0.11265 0.23151,0.11265 0.145728,0 0.231511,-0.11369 0.08578,-0.11472 0.08578,-0.32039 0,-0.18397 -0.08785,-0.29766 -0.08682,-0.11472 -0.231511,-0.11472 -0.141593,0 -0.22841,0.11266 -0.08682,0.11265 -0.08682,0.32246 z" | |||||
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:2.11666656px;font-family:Roboto;-inkscape-font-specification:'Roboto, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.26458332px" | |||||
id="path166" | |||||
inkscape:connector-curvature="0" /> | |||||
<path | |||||
d="m 68.87245,187.46807 q 0,-0.25735 0.121956,-0.41341 0.121957,-0.15709 0.319361,-0.15709 0.19637,0 0.311092,0.13435 v -0.58291 h 0.191203 v 1.5875 h -0.1757 l -0.0093,-0.11989 q -0.114722,0.14056 -0.31936,0.14056 -0.194304,0 -0.317294,-0.15916 -0.121956,-0.15916 -0.121956,-0.41548 z m 0.191203,0.0217 q 0,0.19017 0.07855,0.29765 0.07855,0.10749 0.217041,0.10749 0.181901,0 0.265617,-0.1633 v -0.51366 q -0.08578,-0.15813 -0.26355,-0.15813 -0.14056,0 -0.219108,0.10852 -0.07855,0.10852 -0.07855,0.32143 z" | |||||
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:2.11666656px;font-family:Roboto;-inkscape-font-specification:'Roboto, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.26458332px" | |||||
id="path168" | |||||
inkscape:connector-curvature="0" /> | |||||
<path | |||||
d="m 70.577772,188.05718 q -0.227376,0 -0.370003,-0.14882 -0.142627,-0.14986 -0.142627,-0.39998 v -0.0351 q 0,-0.1664 0.06305,-0.29662 0.06408,-0.13126 0.177767,-0.20464 0.114722,-0.0744 0.248047,-0.0744 0.218074,0 0.338997,0.14366 0.120923,0.14366 0.120923,0.41134 v 0.0796 H 70.25635 q 0.0041,0.16537 0.09612,0.26769 0.09302,0.10128 0.235644,0.10128 0.101286,0 0.171566,-0.0413 0.07028,-0.0413 0.12299,-0.10955 l 0.116789,0.091 q -0.14056,0.216 -0.42168,0.216 z m -0.02377,-1.00252 q -0.115755,0 -0.194303,0.0847 -0.07855,0.0837 -0.09715,0.23565 h 0.560172 v -0.0145 q -0.0083,-0.14573 -0.07855,-0.22531 -0.07028,-0.0806 -0.190169,-0.0806 z" | |||||
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:2.11666656px;font-family:Roboto;-inkscape-font-specification:'Roboto, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.26458332px" | |||||
id="path170" | |||||
inkscape:connector-curvature="0" /> | |||||
</g> | |||||
<g | |||||
aria-label="Steps" | |||||
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:2.82222223px;line-height:125%;font-family:Roboto;-inkscape-font-specification:'Roboto, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;display:inline;opacity:1;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" | |||||
id="text144-8" | |||||
transform="translate(5.7869344,12.700002)"> | |||||
<path | |||||
d="m 64.144646,171.78929 q -0.340375,-0.0978 -0.496093,-0.23978 -0.154341,-0.14331 -0.154341,-0.35277 0,-0.23703 0.188792,-0.39137 0.190169,-0.15571 0.493337,-0.15571 0.206706,0 0.367936,0.0799 0.162609,0.0799 0.250803,0.22049 0.08957,0.14056 0.08957,0.3073 h -0.265961 q 0,-0.1819 -0.115756,-0.28525 -0.115755,-0.10473 -0.326595,-0.10473 -0.195681,0 -0.305924,0.0868 -0.108865,0.0854 -0.108865,0.2384 0,0.12265 0.103353,0.20809 0.104731,0.0841 0.354155,0.15434 0.250803,0.0703 0.391363,0.15571 0.141938,0.0841 0.209462,0.19706 0.0689,0.113 0.0689,0.26597 0,0.24391 -0.190169,0.39136 -0.19017,0.14607 -0.508496,0.14607 -0.206706,0 -0.385851,-0.0785 -0.179145,-0.0799 -0.276986,-0.21773 -0.09646,-0.1378 -0.09646,-0.31281 h 0.265961 q 0,0.1819 0.13367,0.28801 0.135047,0.10473 0.359668,0.10473 0.209461,0 0.321083,-0.0854 0.111621,-0.0854 0.111621,-0.23289 0,-0.14745 -0.103353,-0.22737 -0.103353,-0.0813 -0.374827,-0.15986 z" | |||||
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:2.82222223px;font-family:Roboto;-inkscape-font-specification:'Roboto, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.26458332px" | |||||
id="path195-5" | |||||
inkscape:connector-curvature="0" /> | |||||
<path | |||||
d="m 65.535087,170.83156 v 0.36104 h 0.278364 v 0.19706 h -0.278364 v 0.92467 q 0,0.0896 0.03721,0.13504 0.03721,0.0441 0.126779,0.0441 0.0441,0 0.121268,-0.0165 v 0.20671 q -0.100597,0.0276 -0.195682,0.0276 -0.170876,0 -0.257693,-0.10335 -0.08682,-0.10336 -0.08682,-0.29352 v -0.92467 h -0.271474 v -0.19706 h 0.271474 v -0.36104 z" | |||||
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:2.82222223px;font-family:Roboto;-inkscape-font-specification:'Roboto, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.26458332px" | |||||
id="path197-1" | |||||
inkscape:connector-curvature="0" /> | |||||
<path | |||||
d="m 66.728468,172.7112 q -0.303168,0 -0.493338,-0.19844 -0.190169,-0.19981 -0.190169,-0.5333 v -0.0468 q 0,-0.22187 0.08406,-0.3955 0.08544,-0.17501 0.237023,-0.27285 0.152962,-0.0992 0.330729,-0.0992 0.290766,0 0.451997,0.19155 0.16123,0.19155 0.16123,0.54846 v 0.10611 h -1.010102 q 0.0055,0.22048 0.128158,0.35691 0.124023,0.13505 0.314192,0.13505 0.135048,0 0.228755,-0.0551 0.09371,-0.0551 0.163986,-0.14607 l 0.155719,0.12127 q -0.187414,0.28801 -0.56224,0.28801 z m -0.0317,-1.3367 q -0.15434,0 -0.259071,0.113 -0.104731,0.11162 -0.129536,0.3142 h 0.746897 v -0.0193 q -0.01102,-0.1943 -0.104731,-0.30041 -0.09371,-0.10749 -0.253559,-0.10749 z" | |||||
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:2.82222223px;font-family:Roboto;-inkscape-font-specification:'Roboto, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.26458332px" | |||||
id="path199-6" | |||||
inkscape:connector-curvature="0" /> | |||||
<path | |||||
d="m 68.863049,171.95466 q 0,0.34037 -0.155718,0.54846 -0.155719,0.20808 -0.42168,0.20808 -0.271473,0 -0.427192,-0.17225 v 0.71795 h -0.254937 v -2.0643 h 0.232889 l 0.0124,0.16537 q 0.155718,-0.19293 0.432704,-0.19293 0.268717,0 0.424436,0.20257 0.157096,0.20257 0.157096,0.56362 z m -0.254937,-0.0289 q 0,-0.25218 -0.107487,-0.39825 -0.107487,-0.14608 -0.2949,-0.14608 -0.231511,0 -0.347266,0.20533 v 0.71245 q 0.114377,0.20395 0.350022,0.20395 0.183279,0 0.290766,-0.1447 0.108865,-0.14607 0.108865,-0.4327 z" | |||||
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:2.82222223px;font-family:Roboto;-inkscape-font-specification:'Roboto, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.26458332px" | |||||
id="path201-6" | |||||
inkscape:connector-curvature="0" /> | |||||
<path | |||||
d="m 70.053674,172.28814 q 0,-0.10335 -0.07855,-0.15985 -0.07717,-0.0579 -0.271474,-0.0992 -0.192925,-0.0413 -0.307302,-0.0992 -0.112999,-0.0579 -0.168121,-0.1378 -0.05374,-0.0799 -0.05374,-0.19017 0,-0.18328 0.15434,-0.31006 0.155718,-0.12678 0.396875,-0.12678 0.253559,0 0.410655,0.13092 0.158475,0.13091 0.158475,0.33486 h -0.256315 q 0,-0.10473 -0.08957,-0.18052 -0.08819,-0.0758 -0.223242,-0.0758 -0.139182,0 -0.21773,0.0606 -0.07855,0.0606 -0.07855,0.15847 0,0.0923 0.07304,0.13918 0.07304,0.0469 0.263205,0.0896 0.191547,0.0427 0.310059,0.10197 0.118511,0.0593 0.175011,0.14332 0.05788,0.0827 0.05788,0.20257 0,0.19981 -0.159852,0.32108 -0.159853,0.11989 -0.41479,0.11989 -0.179145,0 -0.316949,-0.0634 -0.137803,-0.0634 -0.216352,-0.17639 -0.07717,-0.11438 -0.07717,-0.24667 h 0.254937 q 0.0069,0.12816 0.101975,0.20395 0.09646,0.0744 0.253559,0.0744 0.144694,0 0.231511,-0.0579 0.08819,-0.0593 0.08819,-0.1571 z" | |||||
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:2.82222223px;font-family:Roboto;-inkscape-font-specification:'Roboto, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.26458332px" | |||||
id="path203-2" | |||||
inkscape:connector-curvature="0" /> | |||||
</g> | |||||
<g | |||||
transform="translate(6.8452678,10.583334)" | |||||
aria-label="Range" | |||||
style="font-style:normal;font-weight:normal;font-size:3.17499995px;line-height:125%;font-family:Sans;letter-spacing:0px;word-spacing:0px;display:inline;opacity:1;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" | |||||
id="text133-1"> | |||||
<path | |||||
inkscape:connector-curvature="0" | |||||
d="m 60.694874,185.58914 h -0.353466 v 0.60875 h -0.199472 v -1.50482 h 0.498161 q 0.254248,0 0.390674,0.11576 0.137459,0.11575 0.137459,0.33693 0,0.14056 -0.07648,0.24495 -0.07545,0.10438 -0.21084,0.15606 l 0.353467,0.63872 v 0.0124 H 61.02147 Z m -0.353466,-0.16226 h 0.30489 q 0.147795,0 0.234611,-0.0765 0.08785,-0.0765 0.08785,-0.20464 0,-0.13953 -0.08371,-0.21394 -0.08268,-0.0744 -0.239779,-0.0754 h -0.303857 z" | |||||
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:2.11666656px;font-family:Roboto;-inkscape-font-specification:'Roboto, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.26458332px" | |||||
id="path153-9" /> | |||||
<path | |||||
inkscape:connector-curvature="0" | |||||
d="m 62.105641,186.19789 q -0.01654,-0.0331 -0.02687,-0.11782 -0.133325,0.13849 -0.318327,0.13849 -0.165364,0 -0.271818,-0.093 -0.10542,-0.0941 -0.10542,-0.23771 0,-0.17466 0.132292,-0.27078 0.133325,-0.0971 0.374137,-0.0971 h 0.186035 v -0.0879 q 0,-0.10026 -0.05994,-0.15917 -0.05994,-0.0599 -0.176734,-0.0599 -0.102319,0 -0.171565,0.0517 -0.06925,0.0517 -0.06925,0.12506 h -0.192236 q 0,-0.0837 0.05891,-0.16123 0.05994,-0.0786 0.16123,-0.12402 0.10232,-0.0455 0.224276,-0.0455 0.19327,0 0.302824,0.0971 0.109554,0.0961 0.113688,0.26562 v 0.5147 q 0,0.15399 0.03927,0.24494 v 0.0165 z m -0.317294,-0.14573 q 0.08992,0 0.170533,-0.0465 0.08062,-0.0465 0.116788,-0.12092 v -0.22944 h -0.149861 q -0.3514,0 -0.3514,0.20567 0,0.0899 0.05994,0.14056 0.05994,0.0506 0.153995,0.0506 z" | |||||
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:2.11666656px;font-family:Roboto;-inkscape-font-specification:'Roboto, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.26458332px" | |||||
id="path155-6" /> | |||||
<path | |||||
inkscape:connector-curvature="0" | |||||
d="m 62.749529,185.07961 0.0062,0.14056 q 0.128158,-0.16123 0.334864,-0.16123 0.3545,0 0.3576,0.39998 v 0.73897 h -0.191202 v -0.74001 q -10e-4,-0.12092 -0.05581,-0.1788 -0.05374,-0.0579 -0.168465,-0.0579 -0.09302,0 -0.163298,0.0496 -0.07028,0.0496 -0.109554,0.13022 v 0.79685 h -0.191202 v -1.11828 z" | |||||
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:2.11666656px;font-family:Roboto;-inkscape-font-specification:'Roboto, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.26458332px" | |||||
id="path157-4" /> | |||||
<path | |||||
inkscape:connector-curvature="0" | |||||
d="m 63.693141,185.62945 q 0,-0.26148 0.120923,-0.41548 0.120923,-0.15503 0.320394,-0.15503 0.204638,0 0.31936,0.1447 l 0.0093,-0.12403 h 0.174666 v 1.09141 q 0,0.21704 -0.129191,0.3421 -0.128158,0.12505 -0.345199,0.12505 -0.120922,0 -0.236678,-0.0517 -0.115755,-0.0517 -0.176733,-0.1416 l 0.09922,-0.11472 q 0.12299,0.15193 0.300757,0.15193 0.139526,0 0.217041,-0.0786 0.07855,-0.0785 0.07855,-0.22117 v -0.0961 q -0.114722,0.13229 -0.313159,0.13229 -0.196371,0 -0.318327,-0.15813 -0.120923,-0.15813 -0.120923,-0.43098 z m 0.192236,0.0217 q 0,0.18914 0.07751,0.29766 0.07751,0.10749 0.217041,0.10749 0.180867,0 0.265617,-0.16433 v -0.51057 q -0.08785,-0.16019 -0.26355,-0.16019 -0.139526,0 -0.218075,0.10852 -0.07855,0.10852 -0.07855,0.32142 z" | |||||
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:2.11666656px;font-family:Roboto;-inkscape-font-specification:'Roboto, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.26458332px" | |||||
id="path159-8" /> | |||||
<path | |||||
inkscape:connector-curvature="0" | |||||
d="m 65.389161,186.21856 q -0.227376,0 -0.370003,-0.14883 -0.142627,-0.14986 -0.142627,-0.39997 v -0.0351 q 0,-0.1664 0.06305,-0.29662 0.06408,-0.13126 0.177767,-0.20464 0.114722,-0.0744 0.248047,-0.0744 0.218074,0 0.338997,0.14366 0.120923,0.14366 0.120923,0.41135 v 0.0796 h -0.757576 q 0.0041,0.16536 0.09612,0.26768 0.09302,0.10129 0.235644,0.10129 0.101286,0 0.171566,-0.0413 0.07028,-0.0413 0.12299,-0.10956 l 0.116789,0.091 q -0.14056,0.21601 -0.42168,0.21601 z m -0.02377,-1.00252 q -0.115755,0 -0.194304,0.0848 -0.07855,0.0837 -0.09715,0.23564 h 0.560172 v -0.0145 q -0.0083,-0.14572 -0.07855,-0.22531 -0.07028,-0.0806 -0.190169,-0.0806 z" | |||||
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:2.11666656px;font-family:Roboto;-inkscape-font-specification:'Roboto, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.26458332px" | |||||
id="path161-0" /> | |||||
</g> | |||||
<g | |||||
transform="translate(6.8452678,10.583334)" | |||||
aria-label="Mode" | |||||
style="font-style:normal;font-weight:normal;font-size:3.17499995px;line-height:125%;font-family:Sans;letter-spacing:0px;word-spacing:0px;display:inline;opacity:1;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" | |||||
id="text133-9-8"> | |||||
<path | |||||
inkscape:connector-curvature="0" | |||||
d="m 66.150136,186.5317 0.491959,1.22783 0.49196,-1.22783 h 0.257349 v 1.50481 h -0.198438 v -0.58601 l 0.0186,-0.63252 -0.494027,1.21853 H 66.56561 l -0.492993,-1.21543 0.01964,0.62942 v 0.58601 H 65.89382 v -1.50481 z" | |||||
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:2.11666656px;font-family:Roboto;-inkscape-font-specification:'Roboto, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.26458332px" | |||||
id="path164-1" /> | |||||
<path | |||||
inkscape:connector-curvature="0" | |||||
d="m 67.661155,187.46704 q 0,-0.16433 0.06408,-0.29559 0.06511,-0.13126 0.179834,-0.20257 0.115756,-0.0713 0.26355,-0.0713 0.22841,0 0.36897,0.15813 0.141593,0.15813 0.141593,0.42064 v 0.0134 q 0,0.1633 -0.06305,0.29352 -0.06201,0.12919 -0.1788,0.20154 -0.115756,0.0723 -0.266651,0.0723 -0.227376,0 -0.36897,-0.15813 -0.140559,-0.15812 -0.140559,-0.41857 z m 0.192236,0.0227 q 0,0.18603 0.08578,0.29869 0.08682,0.11265 0.23151,0.11265 0.145728,0 0.231511,-0.11369 0.08578,-0.11472 0.08578,-0.32039 0,-0.18397 -0.08785,-0.29766 -0.08682,-0.11472 -0.231511,-0.11472 -0.141593,0 -0.22841,0.11266 -0.08682,0.11265 -0.08682,0.32246 z" | |||||
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:2.11666656px;font-family:Roboto;-inkscape-font-specification:'Roboto, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.26458332px" | |||||
id="path166-0" /> | |||||
<path | |||||
inkscape:connector-curvature="0" | |||||
d="m 68.87245,187.46807 q 0,-0.25735 0.121956,-0.41341 0.121957,-0.15709 0.319361,-0.15709 0.19637,0 0.311092,0.13435 v -0.58291 h 0.191203 v 1.5875 h -0.1757 l -0.0093,-0.11989 q -0.114722,0.14056 -0.31936,0.14056 -0.194304,0 -0.317294,-0.15916 -0.121956,-0.15916 -0.121956,-0.41548 z m 0.191203,0.0217 q 0,0.19017 0.07855,0.29765 0.07855,0.10749 0.217041,0.10749 0.181901,0 0.265617,-0.1633 v -0.51366 q -0.08578,-0.15813 -0.26355,-0.15813 -0.14056,0 -0.219108,0.10852 -0.07855,0.10852 -0.07855,0.32143 z" | |||||
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:2.11666656px;font-family:Roboto;-inkscape-font-specification:'Roboto, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.26458332px" | |||||
id="path168-2" /> | |||||
<path | |||||
inkscape:connector-curvature="0" | |||||
d="m 70.577772,188.05718 q -0.227376,0 -0.370003,-0.14882 -0.142627,-0.14986 -0.142627,-0.39998 v -0.0351 q 0,-0.1664 0.06305,-0.29662 0.06408,-0.13126 0.177767,-0.20464 0.114722,-0.0744 0.248047,-0.0744 0.218074,0 0.338997,0.14366 0.120923,0.14366 0.120923,0.41134 v 0.0796 H 70.25635 q 0.0041,0.16537 0.09612,0.26769 0.09302,0.10128 0.235644,0.10128 0.101286,0 0.171566,-0.0413 0.07028,-0.0413 0.12299,-0.10955 l 0.116789,0.091 q -0.14056,0.216 -0.42168,0.216 z m -0.02377,-1.00252 q -0.115755,0 -0.194303,0.0847 -0.07855,0.0837 -0.09715,0.23565 h 0.560172 v -0.0145 q -0.0083,-0.14573 -0.07855,-0.22531 -0.07028,-0.0806 -0.190169,-0.0806 z" | |||||
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:2.11666656px;font-family:Roboto;-inkscape-font-specification:'Roboto, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.26458332px" | |||||
id="path170-2" /> | |||||
</g> | |||||
<g | |||||
aria-label="Steps" | |||||
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:2.82222223px;line-height:125%;font-family:Roboto;-inkscape-font-specification:'Roboto, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;display:inline;opacity:1;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" | |||||
id="text144-9" | |||||
transform="translate(20.337672,12.700002)"> | |||||
<path | |||||
d="m 64.144646,171.78929 q -0.340375,-0.0978 -0.496093,-0.23978 -0.154341,-0.14331 -0.154341,-0.35277 0,-0.23703 0.188792,-0.39137 0.190169,-0.15571 0.493337,-0.15571 0.206706,0 0.367936,0.0799 0.162609,0.0799 0.250803,0.22049 0.08957,0.14056 0.08957,0.3073 h -0.265961 q 0,-0.1819 -0.115756,-0.28525 -0.115755,-0.10473 -0.326595,-0.10473 -0.195681,0 -0.305924,0.0868 -0.108865,0.0854 -0.108865,0.2384 0,0.12265 0.103353,0.20809 0.104731,0.0841 0.354155,0.15434 0.250803,0.0703 0.391363,0.15571 0.141938,0.0841 0.209462,0.19706 0.0689,0.113 0.0689,0.26597 0,0.24391 -0.190169,0.39136 -0.19017,0.14607 -0.508496,0.14607 -0.206706,0 -0.385851,-0.0785 -0.179145,-0.0799 -0.276986,-0.21773 -0.09646,-0.1378 -0.09646,-0.31281 h 0.265961 q 0,0.1819 0.13367,0.28801 0.135047,0.10473 0.359668,0.10473 0.209461,0 0.321083,-0.0854 0.111621,-0.0854 0.111621,-0.23289 0,-0.14745 -0.103353,-0.22737 -0.103353,-0.0813 -0.374827,-0.15986 z" | |||||
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:2.82222223px;font-family:Roboto;-inkscape-font-specification:'Roboto, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.26458332px" | |||||
id="path195-7" | |||||
inkscape:connector-curvature="0" /> | |||||
<path | |||||
d="m 65.535087,170.83156 v 0.36104 h 0.278364 v 0.19706 h -0.278364 v 0.92467 q 0,0.0896 0.03721,0.13504 0.03721,0.0441 0.126779,0.0441 0.0441,0 0.121268,-0.0165 v 0.20671 q -0.100597,0.0276 -0.195682,0.0276 -0.170876,0 -0.257693,-0.10335 -0.08682,-0.10336 -0.08682,-0.29352 v -0.92467 h -0.271474 v -0.19706 h 0.271474 v -0.36104 z" | |||||
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:2.82222223px;font-family:Roboto;-inkscape-font-specification:'Roboto, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.26458332px" | |||||
id="path197-5" | |||||
inkscape:connector-curvature="0" /> | |||||
<path | |||||
d="m 66.728468,172.7112 q -0.303168,0 -0.493338,-0.19844 -0.190169,-0.19981 -0.190169,-0.5333 v -0.0468 q 0,-0.22187 0.08406,-0.3955 0.08544,-0.17501 0.237023,-0.27285 0.152962,-0.0992 0.330729,-0.0992 0.290766,0 0.451997,0.19155 0.16123,0.19155 0.16123,0.54846 v 0.10611 h -1.010102 q 0.0055,0.22048 0.128158,0.35691 0.124023,0.13505 0.314192,0.13505 0.135048,0 0.228755,-0.0551 0.09371,-0.0551 0.163986,-0.14607 l 0.155719,0.12127 q -0.187414,0.28801 -0.56224,0.28801 z m -0.0317,-1.3367 q -0.15434,0 -0.259071,0.113 -0.104731,0.11162 -0.129536,0.3142 h 0.746897 v -0.0193 q -0.01102,-0.1943 -0.104731,-0.30041 -0.09371,-0.10749 -0.253559,-0.10749 z" | |||||
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:2.82222223px;font-family:Roboto;-inkscape-font-specification:'Roboto, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.26458332px" | |||||
id="path199-64" | |||||
inkscape:connector-curvature="0" /> | |||||
<path | |||||
d="m 68.863049,171.95466 q 0,0.34037 -0.155718,0.54846 -0.155719,0.20808 -0.42168,0.20808 -0.271473,0 -0.427192,-0.17225 v 0.71795 h -0.254937 v -2.0643 h 0.232889 l 0.0124,0.16537 q 0.155718,-0.19293 0.432704,-0.19293 0.268717,0 0.424436,0.20257 0.157096,0.20257 0.157096,0.56362 z m -0.254937,-0.0289 q 0,-0.25218 -0.107487,-0.39825 -0.107487,-0.14608 -0.2949,-0.14608 -0.231511,0 -0.347266,0.20533 v 0.71245 q 0.114377,0.20395 0.350022,0.20395 0.183279,0 0.290766,-0.1447 0.108865,-0.14607 0.108865,-0.4327 z" | |||||
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:2.82222223px;font-family:Roboto;-inkscape-font-specification:'Roboto, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.26458332px" | |||||
id="path201-63" | |||||
inkscape:connector-curvature="0" /> | |||||
<path | |||||
d="m 70.053674,172.28814 q 0,-0.10335 -0.07855,-0.15985 -0.07717,-0.0579 -0.271474,-0.0992 -0.192925,-0.0413 -0.307302,-0.0992 -0.112999,-0.0579 -0.168121,-0.1378 -0.05374,-0.0799 -0.05374,-0.19017 0,-0.18328 0.15434,-0.31006 0.155718,-0.12678 0.396875,-0.12678 0.253559,0 0.410655,0.13092 0.158475,0.13091 0.158475,0.33486 h -0.256315 q 0,-0.10473 -0.08957,-0.18052 -0.08819,-0.0758 -0.223242,-0.0758 -0.139182,0 -0.21773,0.0606 -0.07855,0.0606 -0.07855,0.15847 0,0.0923 0.07304,0.13918 0.07304,0.0469 0.263205,0.0896 0.191547,0.0427 0.310059,0.10197 0.118511,0.0593 0.175011,0.14332 0.05788,0.0827 0.05788,0.20257 0,0.19981 -0.159852,0.32108 -0.159853,0.11989 -0.41479,0.11989 -0.179145,0 -0.316949,-0.0634 -0.137803,-0.0634 -0.216352,-0.17639 -0.07717,-0.11438 -0.07717,-0.24667 h 0.254937 q 0.0069,0.12816 0.101975,0.20395 0.09646,0.0744 0.253559,0.0744 0.144694,0 0.231511,-0.0579 0.08819,-0.0593 0.08819,-0.1571 z" | |||||
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:2.82222223px;font-family:Roboto;-inkscape-font-specification:'Roboto, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.26458332px" | |||||
id="path203-7" | |||||
inkscape:connector-curvature="0" /> | |||||
</g> | |||||
<g | |||||
transform="translate(21.396006,10.583334)" | |||||
aria-label="Range" | |||||
style="font-style:normal;font-weight:normal;font-size:3.17499995px;line-height:125%;font-family:Sans;letter-spacing:0px;word-spacing:0px;display:inline;opacity:1;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" | |||||
id="text133-97"> | |||||
<path | |||||
inkscape:connector-curvature="0" | |||||
d="m 60.694874,185.58914 h -0.353466 v 0.60875 h -0.199472 v -1.50482 h 0.498161 q 0.254248,0 0.390674,0.11576 0.137459,0.11575 0.137459,0.33693 0,0.14056 -0.07648,0.24495 -0.07545,0.10438 -0.21084,0.15606 l 0.353467,0.63872 v 0.0124 H 61.02147 Z m -0.353466,-0.16226 h 0.30489 q 0.147795,0 0.234611,-0.0765 0.08785,-0.0765 0.08785,-0.20464 0,-0.13953 -0.08371,-0.21394 -0.08268,-0.0744 -0.239779,-0.0754 h -0.303857 z" | |||||
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:2.11666656px;font-family:Roboto;-inkscape-font-specification:'Roboto, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.26458332px" | |||||
id="path153-4" /> | |||||
<path | |||||
inkscape:connector-curvature="0" | |||||
d="m 62.105641,186.19789 q -0.01654,-0.0331 -0.02687,-0.11782 -0.133325,0.13849 -0.318327,0.13849 -0.165364,0 -0.271818,-0.093 -0.10542,-0.0941 -0.10542,-0.23771 0,-0.17466 0.132292,-0.27078 0.133325,-0.0971 0.374137,-0.0971 h 0.186035 v -0.0879 q 0,-0.10026 -0.05994,-0.15917 -0.05994,-0.0599 -0.176734,-0.0599 -0.102319,0 -0.171565,0.0517 -0.06925,0.0517 -0.06925,0.12506 h -0.192236 q 0,-0.0837 0.05891,-0.16123 0.05994,-0.0786 0.16123,-0.12402 0.10232,-0.0455 0.224276,-0.0455 0.19327,0 0.302824,0.0971 0.109554,0.0961 0.113688,0.26562 v 0.5147 q 0,0.15399 0.03927,0.24494 v 0.0165 z m -0.317294,-0.14573 q 0.08992,0 0.170533,-0.0465 0.08062,-0.0465 0.116788,-0.12092 v -0.22944 h -0.149861 q -0.3514,0 -0.3514,0.20567 0,0.0899 0.05994,0.14056 0.05994,0.0506 0.153995,0.0506 z" | |||||
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:2.11666656px;font-family:Roboto;-inkscape-font-specification:'Roboto, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.26458332px" | |||||
id="path155-9" /> | |||||
<path | |||||
inkscape:connector-curvature="0" | |||||
d="m 62.749529,185.07961 0.0062,0.14056 q 0.128158,-0.16123 0.334864,-0.16123 0.3545,0 0.3576,0.39998 v 0.73897 h -0.191202 v -0.74001 q -10e-4,-0.12092 -0.05581,-0.1788 -0.05374,-0.0579 -0.168465,-0.0579 -0.09302,0 -0.163298,0.0496 -0.07028,0.0496 -0.109554,0.13022 v 0.79685 h -0.191202 v -1.11828 z" | |||||
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:2.11666656px;font-family:Roboto;-inkscape-font-specification:'Roboto, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.26458332px" | |||||
id="path157-1" /> | |||||
<path | |||||
inkscape:connector-curvature="0" | |||||
d="m 63.693141,185.62945 q 0,-0.26148 0.120923,-0.41548 0.120923,-0.15503 0.320394,-0.15503 0.204638,0 0.31936,0.1447 l 0.0093,-0.12403 h 0.174666 v 1.09141 q 0,0.21704 -0.129191,0.3421 -0.128158,0.12505 -0.345199,0.12505 -0.120922,0 -0.236678,-0.0517 -0.115755,-0.0517 -0.176733,-0.1416 l 0.09922,-0.11472 q 0.12299,0.15193 0.300757,0.15193 0.139526,0 0.217041,-0.0786 0.07855,-0.0785 0.07855,-0.22117 v -0.0961 q -0.114722,0.13229 -0.313159,0.13229 -0.196371,0 -0.318327,-0.15813 -0.120923,-0.15813 -0.120923,-0.43098 z m 0.192236,0.0217 q 0,0.18914 0.07751,0.29766 0.07751,0.10749 0.217041,0.10749 0.180867,0 0.265617,-0.16433 v -0.51057 q -0.08785,-0.16019 -0.26355,-0.16019 -0.139526,0 -0.218075,0.10852 -0.07855,0.10852 -0.07855,0.32142 z" | |||||
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:2.11666656px;font-family:Roboto;-inkscape-font-specification:'Roboto, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.26458332px" | |||||
id="path159-7" /> | |||||
<path | |||||
inkscape:connector-curvature="0" | |||||
d="m 65.389161,186.21856 q -0.227376,0 -0.370003,-0.14883 -0.142627,-0.14986 -0.142627,-0.39997 v -0.0351 q 0,-0.1664 0.06305,-0.29662 0.06408,-0.13126 0.177767,-0.20464 0.114722,-0.0744 0.248047,-0.0744 0.218074,0 0.338997,0.14366 0.120923,0.14366 0.120923,0.41135 v 0.0796 h -0.757576 q 0.0041,0.16536 0.09612,0.26768 0.09302,0.10129 0.235644,0.10129 0.101286,0 0.171566,-0.0413 0.07028,-0.0413 0.12299,-0.10956 l 0.116789,0.091 q -0.14056,0.21601 -0.42168,0.21601 z m -0.02377,-1.00252 q -0.115755,0 -0.194304,0.0848 -0.07855,0.0837 -0.09715,0.23564 h 0.560172 v -0.0145 q -0.0083,-0.14572 -0.07855,-0.22531 -0.07028,-0.0806 -0.190169,-0.0806 z" | |||||
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:2.11666656px;font-family:Roboto;-inkscape-font-specification:'Roboto, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.26458332px" | |||||
id="path161-06" /> | |||||
</g> | |||||
<g | |||||
transform="translate(21.396006,10.583334)" | |||||
aria-label="Mode" | |||||
style="font-style:normal;font-weight:normal;font-size:3.17499995px;line-height:125%;font-family:Sans;letter-spacing:0px;word-spacing:0px;display:inline;opacity:1;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" | |||||
id="text133-9-0"> | |||||
<path | |||||
inkscape:connector-curvature="0" | |||||
d="m 66.150136,186.5317 0.491959,1.22783 0.49196,-1.22783 h 0.257349 v 1.50481 h -0.198438 v -0.58601 l 0.0186,-0.63252 -0.494027,1.21853 H 66.56561 l -0.492993,-1.21543 0.01964,0.62942 v 0.58601 H 65.89382 v -1.50481 z" | |||||
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:2.11666656px;font-family:Roboto;-inkscape-font-specification:'Roboto, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.26458332px" | |||||
id="path164-8" /> | |||||
<path | |||||
inkscape:connector-curvature="0" | |||||
d="m 67.661155,187.46704 q 0,-0.16433 0.06408,-0.29559 0.06511,-0.13126 0.179834,-0.20257 0.115756,-0.0713 0.26355,-0.0713 0.22841,0 0.36897,0.15813 0.141593,0.15813 0.141593,0.42064 v 0.0134 q 0,0.1633 -0.06305,0.29352 -0.06201,0.12919 -0.1788,0.20154 -0.115756,0.0723 -0.266651,0.0723 -0.227376,0 -0.36897,-0.15813 -0.140559,-0.15812 -0.140559,-0.41857 z m 0.192236,0.0227 q 0,0.18603 0.08578,0.29869 0.08682,0.11265 0.23151,0.11265 0.145728,0 0.231511,-0.11369 0.08578,-0.11472 0.08578,-0.32039 0,-0.18397 -0.08785,-0.29766 -0.08682,-0.11472 -0.231511,-0.11472 -0.141593,0 -0.22841,0.11266 -0.08682,0.11265 -0.08682,0.32246 z" | |||||
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:2.11666656px;font-family:Roboto;-inkscape-font-specification:'Roboto, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.26458332px" | |||||
id="path166-5" /> | |||||
<path | |||||
inkscape:connector-curvature="0" | |||||
d="m 68.87245,187.46807 q 0,-0.25735 0.121956,-0.41341 0.121957,-0.15709 0.319361,-0.15709 0.19637,0 0.311092,0.13435 v -0.58291 h 0.191203 v 1.5875 h -0.1757 l -0.0093,-0.11989 q -0.114722,0.14056 -0.31936,0.14056 -0.194304,0 -0.317294,-0.15916 -0.121956,-0.15916 -0.121956,-0.41548 z m 0.191203,0.0217 q 0,0.19017 0.07855,0.29765 0.07855,0.10749 0.217041,0.10749 0.181901,0 0.265617,-0.1633 v -0.51366 q -0.08578,-0.15813 -0.26355,-0.15813 -0.14056,0 -0.219108,0.10852 -0.07855,0.10852 -0.07855,0.32143 z" | |||||
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:2.11666656px;font-family:Roboto;-inkscape-font-specification:'Roboto, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.26458332px" | |||||
id="path168-3" /> | |||||
<path | |||||
inkscape:connector-curvature="0" | |||||
d="m 70.577772,188.05718 q -0.227376,0 -0.370003,-0.14882 -0.142627,-0.14986 -0.142627,-0.39998 v -0.0351 q 0,-0.1664 0.06305,-0.29662 0.06408,-0.13126 0.177767,-0.20464 0.114722,-0.0744 0.248047,-0.0744 0.218074,0 0.338997,0.14366 0.120923,0.14366 0.120923,0.41134 v 0.0796 H 70.25635 q 0.0041,0.16537 0.09612,0.26769 0.09302,0.10128 0.235644,0.10128 0.101286,0 0.171566,-0.0413 0.07028,-0.0413 0.12299,-0.10955 l 0.116789,0.091 q -0.14056,0.216 -0.42168,0.216 z m -0.02377,-1.00252 q -0.115755,0 -0.194303,0.0847 -0.07855,0.0837 -0.09715,0.23565 h 0.560172 v -0.0145 q -0.0083,-0.14573 -0.07855,-0.22531 -0.07028,-0.0806 -0.190169,-0.0806 z" | |||||
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:2.11666656px;font-family:Roboto;-inkscape-font-specification:'Roboto, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.26458332px" | |||||
id="path170-9" /> | |||||
</g> | |||||
<g | |||||
aria-label="Steps" | |||||
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:2.82222223px;line-height:125%;font-family:Roboto;-inkscape-font-specification:'Roboto, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;display:inline;opacity:1;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" | |||||
id="text144-4" | |||||
transform="translate(35.096588,12.700002)"> | |||||
<path | |||||
d="m 64.144646,171.78929 q -0.340375,-0.0978 -0.496093,-0.23978 -0.154341,-0.14331 -0.154341,-0.35277 0,-0.23703 0.188792,-0.39137 0.190169,-0.15571 0.493337,-0.15571 0.206706,0 0.367936,0.0799 0.162609,0.0799 0.250803,0.22049 0.08957,0.14056 0.08957,0.3073 h -0.265961 q 0,-0.1819 -0.115756,-0.28525 -0.115755,-0.10473 -0.326595,-0.10473 -0.195681,0 -0.305924,0.0868 -0.108865,0.0854 -0.108865,0.2384 0,0.12265 0.103353,0.20809 0.104731,0.0841 0.354155,0.15434 0.250803,0.0703 0.391363,0.15571 0.141938,0.0841 0.209462,0.19706 0.0689,0.113 0.0689,0.26597 0,0.24391 -0.190169,0.39136 -0.19017,0.14607 -0.508496,0.14607 -0.206706,0 -0.385851,-0.0785 -0.179145,-0.0799 -0.276986,-0.21773 -0.09646,-0.1378 -0.09646,-0.31281 h 0.265961 q 0,0.1819 0.13367,0.28801 0.135047,0.10473 0.359668,0.10473 0.209461,0 0.321083,-0.0854 0.111621,-0.0854 0.111621,-0.23289 0,-0.14745 -0.103353,-0.22737 -0.103353,-0.0813 -0.374827,-0.15986 z" | |||||
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:2.82222223px;font-family:Roboto;-inkscape-font-specification:'Roboto, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.26458332px" | |||||
id="path195-1" | |||||
inkscape:connector-curvature="0" /> | |||||
<path | |||||
d="m 65.535087,170.83156 v 0.36104 h 0.278364 v 0.19706 h -0.278364 v 0.92467 q 0,0.0896 0.03721,0.13504 0.03721,0.0441 0.126779,0.0441 0.0441,0 0.121268,-0.0165 v 0.20671 q -0.100597,0.0276 -0.195682,0.0276 -0.170876,0 -0.257693,-0.10335 -0.08682,-0.10336 -0.08682,-0.29352 v -0.92467 h -0.271474 v -0.19706 h 0.271474 v -0.36104 z" | |||||
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:2.82222223px;font-family:Roboto;-inkscape-font-specification:'Roboto, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.26458332px" | |||||
id="path197-54" | |||||
inkscape:connector-curvature="0" /> | |||||
<path | |||||
d="m 66.728468,172.7112 q -0.303168,0 -0.493338,-0.19844 -0.190169,-0.19981 -0.190169,-0.5333 v -0.0468 q 0,-0.22187 0.08406,-0.3955 0.08544,-0.17501 0.237023,-0.27285 0.152962,-0.0992 0.330729,-0.0992 0.290766,0 0.451997,0.19155 0.16123,0.19155 0.16123,0.54846 v 0.10611 h -1.010102 q 0.0055,0.22048 0.128158,0.35691 0.124023,0.13505 0.314192,0.13505 0.135048,0 0.228755,-0.0551 0.09371,-0.0551 0.163986,-0.14607 l 0.155719,0.12127 q -0.187414,0.28801 -0.56224,0.28801 z m -0.0317,-1.3367 q -0.15434,0 -0.259071,0.113 -0.104731,0.11162 -0.129536,0.3142 h 0.746897 v -0.0193 q -0.01102,-0.1943 -0.104731,-0.30041 -0.09371,-0.10749 -0.253559,-0.10749 z" | |||||
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:2.82222223px;font-family:Roboto;-inkscape-font-specification:'Roboto, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.26458332px" | |||||
id="path199-1" | |||||
inkscape:connector-curvature="0" /> | |||||
<path | |||||
d="m 68.863049,171.95466 q 0,0.34037 -0.155718,0.54846 -0.155719,0.20808 -0.42168,0.20808 -0.271473,0 -0.427192,-0.17225 v 0.71795 h -0.254937 v -2.0643 h 0.232889 l 0.0124,0.16537 q 0.155718,-0.19293 0.432704,-0.19293 0.268717,0 0.424436,0.20257 0.157096,0.20257 0.157096,0.56362 z m -0.254937,-0.0289 q 0,-0.25218 -0.107487,-0.39825 -0.107487,-0.14608 -0.2949,-0.14608 -0.231511,0 -0.347266,0.20533 v 0.71245 q 0.114377,0.20395 0.350022,0.20395 0.183279,0 0.290766,-0.1447 0.108865,-0.14607 0.108865,-0.4327 z" | |||||
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:2.82222223px;font-family:Roboto;-inkscape-font-specification:'Roboto, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.26458332px" | |||||
id="path201-5" | |||||
inkscape:connector-curvature="0" /> | |||||
<path | |||||
d="m 70.053674,172.28814 q 0,-0.10335 -0.07855,-0.15985 -0.07717,-0.0579 -0.271474,-0.0992 -0.192925,-0.0413 -0.307302,-0.0992 -0.112999,-0.0579 -0.168121,-0.1378 -0.05374,-0.0799 -0.05374,-0.19017 0,-0.18328 0.15434,-0.31006 0.155718,-0.12678 0.396875,-0.12678 0.253559,0 0.410655,0.13092 0.158475,0.13091 0.158475,0.33486 h -0.256315 q 0,-0.10473 -0.08957,-0.18052 -0.08819,-0.0758 -0.223242,-0.0758 -0.139182,0 -0.21773,0.0606 -0.07855,0.0606 -0.07855,0.15847 0,0.0923 0.07304,0.13918 0.07304,0.0469 0.263205,0.0896 0.191547,0.0427 0.310059,0.10197 0.118511,0.0593 0.175011,0.14332 0.05788,0.0827 0.05788,0.20257 0,0.19981 -0.159852,0.32108 -0.159853,0.11989 -0.41479,0.11989 -0.179145,0 -0.316949,-0.0634 -0.137803,-0.0634 -0.216352,-0.17639 -0.07717,-0.11438 -0.07717,-0.24667 h 0.254937 q 0.0069,0.12816 0.101975,0.20395 0.09646,0.0744 0.253559,0.0744 0.144694,0 0.231511,-0.0579 0.08819,-0.0593 0.08819,-0.1571 z" | |||||
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:2.82222223px;font-family:Roboto;-inkscape-font-specification:'Roboto, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.26458332px" | |||||
id="path203-5" | |||||
inkscape:connector-curvature="0" /> | |||||
</g> | |||||
<g | |||||
transform="translate(35.625755,10.583334)" | |||||
aria-label="Range" | |||||
style="font-style:normal;font-weight:normal;font-size:3.17499995px;line-height:125%;font-family:Sans;letter-spacing:0px;word-spacing:0px;display:inline;opacity:1;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" | |||||
id="text133-4"> | |||||
<path | |||||
inkscape:connector-curvature="0" | |||||
d="m 60.694874,185.58914 h -0.353466 v 0.60875 h -0.199472 v -1.50482 h 0.498161 q 0.254248,0 0.390674,0.11576 0.137459,0.11575 0.137459,0.33693 0,0.14056 -0.07648,0.24495 -0.07545,0.10438 -0.21084,0.15606 l 0.353467,0.63872 v 0.0124 H 61.02147 Z m -0.353466,-0.16226 h 0.30489 q 0.147795,0 0.234611,-0.0765 0.08785,-0.0765 0.08785,-0.20464 0,-0.13953 -0.08371,-0.21394 -0.08268,-0.0744 -0.239779,-0.0754 h -0.303857 z" | |||||
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:2.11666656px;font-family:Roboto;-inkscape-font-specification:'Roboto, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.26458332px" | |||||
id="path153-98" /> | |||||
<path | |||||
inkscape:connector-curvature="0" | |||||
d="m 62.105641,186.19789 q -0.01654,-0.0331 -0.02687,-0.11782 -0.133325,0.13849 -0.318327,0.13849 -0.165364,0 -0.271818,-0.093 -0.10542,-0.0941 -0.10542,-0.23771 0,-0.17466 0.132292,-0.27078 0.133325,-0.0971 0.374137,-0.0971 h 0.186035 v -0.0879 q 0,-0.10026 -0.05994,-0.15917 -0.05994,-0.0599 -0.176734,-0.0599 -0.102319,0 -0.171565,0.0517 -0.06925,0.0517 -0.06925,0.12506 h -0.192236 q 0,-0.0837 0.05891,-0.16123 0.05994,-0.0786 0.16123,-0.12402 0.10232,-0.0455 0.224276,-0.0455 0.19327,0 0.302824,0.0971 0.109554,0.0961 0.113688,0.26562 v 0.5147 q 0,0.15399 0.03927,0.24494 v 0.0165 z m -0.317294,-0.14573 q 0.08992,0 0.170533,-0.0465 0.08062,-0.0465 0.116788,-0.12092 v -0.22944 h -0.149861 q -0.3514,0 -0.3514,0.20567 0,0.0899 0.05994,0.14056 0.05994,0.0506 0.153995,0.0506 z" | |||||
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:2.11666656px;font-family:Roboto;-inkscape-font-specification:'Roboto, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.26458332px" | |||||
id="path155-3" /> | |||||
<path | |||||
inkscape:connector-curvature="0" | |||||
d="m 62.749529,185.07961 0.0062,0.14056 q 0.128158,-0.16123 0.334864,-0.16123 0.3545,0 0.3576,0.39998 v 0.73897 h -0.191202 v -0.74001 q -10e-4,-0.12092 -0.05581,-0.1788 -0.05374,-0.0579 -0.168465,-0.0579 -0.09302,0 -0.163298,0.0496 -0.07028,0.0496 -0.109554,0.13022 v 0.79685 h -0.191202 v -1.11828 z" | |||||
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:2.11666656px;font-family:Roboto;-inkscape-font-specification:'Roboto, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.26458332px" | |||||
id="path157-8" /> | |||||
<path | |||||
inkscape:connector-curvature="0" | |||||
d="m 63.693141,185.62945 q 0,-0.26148 0.120923,-0.41548 0.120923,-0.15503 0.320394,-0.15503 0.204638,0 0.31936,0.1447 l 0.0093,-0.12403 h 0.174666 v 1.09141 q 0,0.21704 -0.129191,0.3421 -0.128158,0.12505 -0.345199,0.12505 -0.120922,0 -0.236678,-0.0517 -0.115755,-0.0517 -0.176733,-0.1416 l 0.09922,-0.11472 q 0.12299,0.15193 0.300757,0.15193 0.139526,0 0.217041,-0.0786 0.07855,-0.0785 0.07855,-0.22117 v -0.0961 q -0.114722,0.13229 -0.313159,0.13229 -0.196371,0 -0.318327,-0.15813 -0.120923,-0.15813 -0.120923,-0.43098 z m 0.192236,0.0217 q 0,0.18914 0.07751,0.29766 0.07751,0.10749 0.217041,0.10749 0.180867,0 0.265617,-0.16433 v -0.51057 q -0.08785,-0.16019 -0.26355,-0.16019 -0.139526,0 -0.218075,0.10852 -0.07855,0.10852 -0.07855,0.32142 z" | |||||
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:2.11666656px;font-family:Roboto;-inkscape-font-specification:'Roboto, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.26458332px" | |||||
id="path159-5" /> | |||||
<path | |||||
inkscape:connector-curvature="0" | |||||
d="m 65.389161,186.21856 q -0.227376,0 -0.370003,-0.14883 -0.142627,-0.14986 -0.142627,-0.39997 v -0.0351 q 0,-0.1664 0.06305,-0.29662 0.06408,-0.13126 0.177767,-0.20464 0.114722,-0.0744 0.248047,-0.0744 0.218074,0 0.338997,0.14366 0.120923,0.14366 0.120923,0.41135 v 0.0796 h -0.757576 q 0.0041,0.16536 0.09612,0.26768 0.09302,0.10129 0.235644,0.10129 0.101286,0 0.171566,-0.0413 0.07028,-0.0413 0.12299,-0.10956 l 0.116789,0.091 q -0.14056,0.21601 -0.42168,0.21601 z m -0.02377,-1.00252 q -0.115755,0 -0.194304,0.0848 -0.07855,0.0837 -0.09715,0.23564 h 0.560172 v -0.0145 q -0.0083,-0.14572 -0.07855,-0.22531 -0.07028,-0.0806 -0.190169,-0.0806 z" | |||||
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:2.11666656px;font-family:Roboto;-inkscape-font-specification:'Roboto, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.26458332px" | |||||
id="path161-2" /> | |||||
</g> | |||||
<g | |||||
transform="translate(36.154922,10.583334)" | |||||
aria-label="Mode" | |||||
style="font-style:normal;font-weight:normal;font-size:3.17499995px;line-height:125%;font-family:Sans;letter-spacing:0px;word-spacing:0px;display:inline;opacity:1;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" | |||||
id="text133-9-2"> | |||||
<path | |||||
inkscape:connector-curvature="0" | |||||
d="m 66.150136,186.5317 0.491959,1.22783 0.49196,-1.22783 h 0.257349 v 1.50481 h -0.198438 v -0.58601 l 0.0186,-0.63252 -0.494027,1.21853 H 66.56561 l -0.492993,-1.21543 0.01964,0.62942 v 0.58601 H 65.89382 v -1.50481 z" | |||||
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:2.11666656px;font-family:Roboto;-inkscape-font-specification:'Roboto, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.26458332px" | |||||
id="path164-2" /> | |||||
<path | |||||
inkscape:connector-curvature="0" | |||||
d="m 67.661155,187.46704 q 0,-0.16433 0.06408,-0.29559 0.06511,-0.13126 0.179834,-0.20257 0.115756,-0.0713 0.26355,-0.0713 0.22841,0 0.36897,0.15813 0.141593,0.15813 0.141593,0.42064 v 0.0134 q 0,0.1633 -0.06305,0.29352 -0.06201,0.12919 -0.1788,0.20154 -0.115756,0.0723 -0.266651,0.0723 -0.227376,0 -0.36897,-0.15813 -0.140559,-0.15812 -0.140559,-0.41857 z m 0.192236,0.0227 q 0,0.18603 0.08578,0.29869 0.08682,0.11265 0.23151,0.11265 0.145728,0 0.231511,-0.11369 0.08578,-0.11472 0.08578,-0.32039 0,-0.18397 -0.08785,-0.29766 -0.08682,-0.11472 -0.231511,-0.11472 -0.141593,0 -0.22841,0.11266 -0.08682,0.11265 -0.08682,0.32246 z" | |||||
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:2.11666656px;font-family:Roboto;-inkscape-font-specification:'Roboto, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.26458332px" | |||||
id="path166-7" /> | |||||
<path | |||||
inkscape:connector-curvature="0" | |||||
d="m 68.87245,187.46807 q 0,-0.25735 0.121956,-0.41341 0.121957,-0.15709 0.319361,-0.15709 0.19637,0 0.311092,0.13435 v -0.58291 h 0.191203 v 1.5875 h -0.1757 l -0.0093,-0.11989 q -0.114722,0.14056 -0.31936,0.14056 -0.194304,0 -0.317294,-0.15916 -0.121956,-0.15916 -0.121956,-0.41548 z m 0.191203,0.0217 q 0,0.19017 0.07855,0.29765 0.07855,0.10749 0.217041,0.10749 0.181901,0 0.265617,-0.1633 v -0.51366 q -0.08578,-0.15813 -0.26355,-0.15813 -0.14056,0 -0.219108,0.10852 -0.07855,0.10852 -0.07855,0.32143 z" | |||||
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:2.11666656px;font-family:Roboto;-inkscape-font-specification:'Roboto, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.26458332px" | |||||
id="path168-0" /> | |||||
<path | |||||
inkscape:connector-curvature="0" | |||||
d="m 70.577772,188.05718 q -0.227376,0 -0.370003,-0.14882 -0.142627,-0.14986 -0.142627,-0.39998 v -0.0351 q 0,-0.1664 0.06305,-0.29662 0.06408,-0.13126 0.177767,-0.20464 0.114722,-0.0744 0.248047,-0.0744 0.218074,0 0.338997,0.14366 0.120923,0.14366 0.120923,0.41134 v 0.0796 H 70.25635 q 0.0041,0.16537 0.09612,0.26769 0.09302,0.10128 0.235644,0.10128 0.101286,0 0.171566,-0.0413 0.07028,-0.0413 0.12299,-0.10955 l 0.116789,0.091 q -0.14056,0.216 -0.42168,0.216 z m -0.02377,-1.00252 q -0.115755,0 -0.194303,0.0847 -0.07855,0.0837 -0.09715,0.23565 h 0.560172 v -0.0145 q -0.0083,-0.14573 -0.07855,-0.22531 -0.07028,-0.0806 -0.190169,-0.0806 z" | |||||
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:2.11666656px;font-family:Roboto;-inkscape-font-specification:'Roboto, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.26458332px" | |||||
id="path170-3" /> | |||||
</g> | |||||
<path | |||||
inkscape:connector-curvature="0" | |||||
id="path10966" | |||||
d="m 37.533103,180.9842 c 0.250146,0 0.418348,-0.0776 0.564986,-0.20702 0.02156,-0.0216 0.04313,-0.0561 0.04313,-0.0992 0,-0.0647 -0.06038,-0.12507 -0.129387,-0.12507 -0.0345,0 -0.06038,0.0129 -0.08194,0.0302 -0.112135,0.0949 -0.22427,0.15095 -0.383846,0.15095 -0.297588,0 -0.513231,-0.24583 -0.513231,-0.54773 v -0.004 c 0,-0.3019 0.215643,-0.54773 0.513231,-0.54773 0.146638,0 0.258773,0.0561 0.366594,0.14232 0.01725,0.0129 0.04313,0.0259 0.08194,0.0259 0.07332,0 0.133699,-0.0604 0.133699,-0.1337 0,-0.0474 -0.02157,-0.0863 -0.05175,-0.10782 -0.133699,-0.10351 -0.293275,-0.17683 -0.530483,-0.17683 -0.470103,0 -0.797881,0.36228 -0.797881,0.80219 v 0.004 c 0,0.44422 0.336404,0.79357 0.784943,0.79357 z m 0,0" | |||||
style="display:inline;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.20523821" /> | |||||
<path | |||||
inkscape:connector-curvature="0" | |||||
id="path10970" | |||||
d="m 38.499826,180.82031 c 0,0.0776 0.06038,0.13801 0.138012,0.13801 h 0.832384 c 0.06901,0 0.125073,-0.0561 0.125073,-0.12507 0,-0.069 -0.05607,-0.12076 -0.125073,-0.12076 h -0.698685 v -1.17742 c 0,-0.0733 -0.06038,-0.1337 -0.133699,-0.1337 -0.07763,0 -0.138012,0.0604 -0.138012,0.1337 z m 0,0" | |||||
style="display:inline;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.20523821" /> | |||||
<path | |||||
inkscape:connector-curvature="0" | |||||
id="path10962" | |||||
d="m 40.570847,180.9842 c 0.474416,0 0.81082,-0.36228 0.81082,-0.79788 v -0.004 c 0,-0.4356 -0.332091,-0.79788 -0.806507,-0.79788 -0.474416,0 -0.81082,0.36659 -0.81082,0.80219 v 0.004 c 0,0.4356 0.332091,0.79357 0.806507,0.79357 z m 0.0043,-0.25015 c -0.306214,0 -0.52617,-0.25015 -0.52617,-0.54773 v -0.004 c 0,-0.3019 0.215643,-0.54773 0.521857,-0.54773 0.306214,0 0.526171,0.25014 0.526171,0.55204 v 0.004 c 0,0.29759 -0.215644,0.54342 -0.521858,0.54342 z m 0,0" | |||||
style="display:inline;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.20523821" /> | |||||
<path | |||||
inkscape:connector-curvature="0" | |||||
id="path10954" | |||||
d="m 42.469083,180.9842 c 0.250147,0 0.418349,-0.0776 0.564986,-0.20702 0.02157,-0.0216 0.04313,-0.0561 0.04313,-0.0992 0,-0.0647 -0.06038,-0.12507 -0.129386,-0.12507 -0.0345,0 -0.06038,0.0129 -0.08195,0.0302 -0.112134,0.0949 -0.224269,0.15095 -0.383845,0.15095 -0.297588,0 -0.513232,-0.24583 -0.513232,-0.54773 v -0.004 c 0,-0.3019 0.215644,-0.54773 0.513232,-0.54773 0.146637,0 0.258772,0.0561 0.366594,0.14232 0.01725,0.0129 0.04313,0.0259 0.08194,0.0259 0.07332,0 0.133699,-0.0604 0.133699,-0.1337 0,-0.0474 -0.02157,-0.0863 -0.05175,-0.10782 -0.133699,-0.10351 -0.293275,-0.17683 -0.530483,-0.17683 -0.470103,0 -0.797882,0.36228 -0.797882,0.80219 v 0.004 c 0,0.44422 0.336404,0.79357 0.784943,0.79357 z m 0,0" | |||||
style="display:inline;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.20523821" /> | |||||
<path | |||||
inkscape:connector-curvature="0" | |||||
id="path10958" | |||||
d="m 43.435773,180.83325 c 0,0.0776 0.06038,0.13801 0.138012,0.13801 0.07332,0 0.133699,-0.0604 0.133699,-0.13801 v -0.31916 l 0.250146,-0.24152 0.500294,0.634 c 0.02588,0.0345 0.06038,0.0647 0.112134,0.0647 0.07763,0 0.138012,-0.0604 0.138012,-0.1337 0,-0.0431 -0.01725,-0.069 -0.03882,-0.0992 l -0.521857,-0.64693 0.483042,-0.46147 c 0.03019,-0.0302 0.04744,-0.0604 0.04744,-0.10351 0,-0.0647 -0.04744,-0.12508 -0.125073,-0.12508 -0.04744,0 -0.08194,0.0172 -0.112135,0.0518 l -0.733188,0.7375 v -0.65556 c 0,-0.0733 -0.06038,-0.1337 -0.133699,-0.1337 -0.07763,0 -0.138012,0.0604 -0.138012,0.1337 z m 0,0" | |||||
style="display:inline;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.20523821" /> | |||||
<path | |||||
inkscape:connector-curvature="0" | |||||
id="path10846" | |||||
d="m 38.701205,190.94147 c 0,0.0604 0.05175,0.10782 0.112134,0.10782 0.06038,0 0.112135,-0.0474 0.112135,-0.10782 v -0.34072 h 0.276024 l 0.306214,0.39247 c 0.02588,0.0345 0.05607,0.0561 0.107822,0.0561 0.05175,0 0.103509,-0.0388 0.103509,-0.10351 0,-0.0345 -0.01294,-0.0561 -0.0345,-0.082 l -0.241521,-0.3019 c 0.168202,-0.0561 0.284649,-0.17682 0.284649,-0.37522 v -0.004 c 0,-0.11214 -0.0345,-0.20271 -0.103509,-0.27171 -0.07763,-0.0776 -0.202705,-0.12507 -0.362281,-0.12507 h -0.448539 c -0.06038,0 -0.112134,0.0474 -0.112134,0.11213 z m 0.224269,-0.5348 v -0.42266 h 0.319153 c 0.163889,0 0.258772,0.0733 0.258772,0.21133 0,0.12939 -0.0992,0.21133 -0.258772,0.21133 z m 0,0" | |||||
style="display:inline;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.20523821" /> | |||||
<path | |||||
inkscape:connector-curvature="0" | |||||
id="path10850" | |||||
d="m 40.575147,191.06223 c 0.327779,0 0.539109,-0.18977 0.539109,-0.56499 v -0.61243 c 0,-0.0604 -0.04744,-0.10782 -0.107821,-0.10782 -0.06469,0 -0.112135,0.0474 -0.112135,0.10782 v 0.62106 c 0,0.23289 -0.120761,0.34934 -0.31484,0.34934 -0.198392,0 -0.319152,-0.12507 -0.319152,-0.35797 v -0.61243 c 0,-0.0604 -0.04744,-0.10782 -0.107822,-0.10782 -0.06469,0 -0.112135,0.0474 -0.112135,0.10782 v 0.62106 c 0,0.36659 0.207018,0.55636 0.534796,0.55636 z m 0,0" | |||||
style="display:inline;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.20523821" /> | |||||
<path | |||||
inkscape:connector-curvature="0" | |||||
id="path10842" | |||||
d="m 41.485736,190.94147 c 0,0.0604 0.05175,0.10782 0.112135,0.10782 0.06038,0 0.107821,-0.0474 0.107821,-0.10782 v -0.79788 l 0.646931,0.83669 c 0.03019,0.0388 0.06038,0.069 0.112135,0.069 h 0.0086 c 0.06038,0 0.107822,-0.0518 0.107822,-0.11214 v -1.05234 c 0,-0.0604 -0.04744,-0.10782 -0.107822,-0.10782 -0.06038,0 -0.107821,0.0474 -0.107821,0.10782 v 0.77201 l -0.629679,-0.81514 c -0.03019,-0.0388 -0.06038,-0.0647 -0.112135,-0.0647 h -0.02588 c -0.06038,0 -0.112135,0.0518 -0.112135,0.11214 z m 0,0" | |||||
style="display:inline;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.20523821" /> | |||||
<path | |||||
inkscape:connector-curvature="0" | |||||
id="path10838" | |||||
d="m 37.863856,200.48624 c 0,0.0604 0.05175,0.10782 0.112135,0.10782 0.06038,0 0.112134,-0.0474 0.112134,-0.10782 v -0.34072 h 0.276024 l 0.306214,0.39247 c 0.02588,0.0345 0.05607,0.0561 0.107822,0.0561 0.05175,0 0.103509,-0.0388 0.103509,-0.10351 0,-0.0345 -0.01294,-0.0561 -0.0345,-0.082 l -0.241521,-0.3019 c 0.168202,-0.0561 0.28465,-0.17682 0.28465,-0.37522 v -0.004 c 0,-0.11214 -0.0345,-0.20271 -0.103509,-0.27171 -0.07763,-0.0776 -0.202705,-0.12507 -0.362282,-0.12507 h -0.448541 c -0.06038,0 -0.112135,0.0474 -0.112135,0.11213 z m 0.224269,-0.5348 v -0.42266 h 0.319153 c 0.163889,0 0.258772,0.0733 0.258772,0.21133 0,0.12939 -0.0992,0.21133 -0.258772,0.21133 z m 0,0" | |||||
style="display:inline;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.20523821" /> | |||||
<path | |||||
inkscape:connector-curvature="0" | |||||
id="path10830" | |||||
d="m 39.3365,200.58543 h 0.741815 c 0.05175,0 0.09919,-0.0431 0.09919,-0.0992 0,-0.0518 -0.04744,-0.0992 -0.09919,-0.0992 h -0.629681 v -0.3364 h 0.539109 c 0.05175,0 0.0992,-0.0431 0.0992,-0.0949 0,-0.0561 -0.04744,-0.10351 -0.0992,-0.10351 h -0.539109 v -0.32346 h 0.621055 c 0.05175,0 0.09488,-0.0431 0.09488,-0.0992 0,-0.0561 -0.04313,-0.0992 -0.09488,-0.0992 H 39.3365 c -0.06038,0 -0.112135,0.0474 -0.112135,0.11213 v 1.03078 c 0,0.0647 0.05175,0.11213 0.112135,0.11213 z m 0,0" | |||||
style="display:inline;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.20523821" /> | |||||
<path | |||||
inkscape:connector-curvature="0" | |||||
id="path10834" | |||||
d="m 40.920168,200.60268 c 0.267398,0 0.448538,-0.13801 0.448538,-0.37522 v -0.004 c 0,-0.20702 -0.1337,-0.3019 -0.401098,-0.36659 -0.241521,-0.0561 -0.297587,-0.0992 -0.297587,-0.1984 0,-0.0863 0.07332,-0.15095 0.202704,-0.15095 0.0992,0 0.19408,0.0302 0.288964,0.0949 0.01725,0.0129 0.0345,0.0172 0.05607,0.0172 0.06038,0 0.107823,-0.0474 0.107823,-0.10351 0,-0.0431 -0.02586,-0.0733 -0.05175,-0.0863 -0.112134,-0.0776 -0.237209,-0.11645 -0.396784,-0.11645 -0.250146,0 -0.426975,0.14664 -0.426975,0.36228 v 0.004 c 0,0.23289 0.146637,0.31053 0.414035,0.37522 0.237209,0.0517 0.28465,0.10351 0.28465,0.18977 v 0.004 c 0,0.0949 -0.08626,0.15958 -0.219956,0.15958 -0.138011,0 -0.250146,-0.0474 -0.353655,-0.12939 -0.01295,-0.0129 -0.0345,-0.0216 -0.06469,-0.0216 -0.05607,0 -0.103509,0.0474 -0.103509,0.10351 0,0.0345 0.01725,0.0647 0.04313,0.0863 0.138011,0.10351 0.301901,0.15526 0.470104,0.15526 z m 0,0" | |||||
style="display:inline;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.20523821" /> | |||||
<path | |||||
inkscape:connector-curvature="0" | |||||
id="path10826" | |||||
d="m 41.802387,200.58543 h 0.741814 c 0.05175,0 0.09919,-0.0431 0.09919,-0.0992 0,-0.0518 -0.04744,-0.0992 -0.09919,-0.0992 h -0.62968 v -0.3364 h 0.539108 c 0.05175,0 0.0992,-0.0431 0.0992,-0.0949 0,-0.0561 -0.04744,-0.10351 -0.0992,-0.10351 h -0.539108 v -0.32346 h 0.621054 c 0.05175,0 0.09488,-0.0431 0.09488,-0.0992 0,-0.0561 -0.04313,-0.0992 -0.09488,-0.0992 h -0.733188 c -0.06038,0 -0.112135,0.0474 -0.112135,0.11213 v 1.03078 c 0,0.0647 0.05175,0.11213 0.112135,0.11213 z m 0,0" | |||||
style="display:inline;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.20523821" /> | |||||
<path | |||||
inkscape:connector-curvature="0" | |||||
id="path10822" | |||||
d="m 43.273005,200.48624 c 0,0.0604 0.05175,0.10782 0.112136,0.10782 0.06038,0 0.112133,-0.0474 0.112133,-0.10782 v -0.95315 h 0.306215 c 0.05607,0 0.0992,-0.0474 0.0992,-0.0992 0,-0.0561 -0.04313,-0.10351 -0.0992,-0.10351 h -0.836696 c -0.05607,0 -0.0992,0.0474 -0.0992,0.10351 0,0.0517 0.04313,0.0992 0.0992,0.0992 h 0.306212 z m 0,0" | |||||
style="display:inline;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.20523821" /> | |||||
<g | |||||
aria-label="Clock In" | |||||
style="font-style:normal;font-weight:normal;font-size:3.17499995px;line-height:125%;font-family:Sans;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" | |||||
id="text1023"> | |||||
<path | |||||
d="m 44.858609,251.46376 q -0.03256,0.27853 -0.206189,0.43046 -0.172427,0.15072 -0.459403,0.15072 -0.311092,0 -0.499195,-0.22307 -0.186896,-0.22307 -0.186896,-0.59686 v -0.16881 q 0,-0.24477 0.08682,-0.43046 0.08802,-0.18569 0.248392,-0.28457 0.160369,-0.10008 0.371381,-0.10008 0.279742,0 0.448551,0.15675 0.16881,0.15555 0.196543,0.43167 h -0.232716 q -0.03014,-0.2098 -0.13143,-0.30385 -0.10008,-0.094 -0.280948,-0.094 -0.221864,0 -0.348471,0.16398 -0.125402,0.16399 -0.125402,0.46664 v 0.17002 q 0,0.28577 0.119373,0.45458 0.119372,0.16881 0.334002,0.16881 0.192925,0 0.295417,-0.0868 0.103697,-0.088 0.137459,-0.30506 z" | |||||
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:2.46944451px;font-family:Roboto;-inkscape-font-specification:'Roboto, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.26458332px" | |||||
id="path1044" /> | |||||
<path | |||||
d="m 45.380713,252.02083 h -0.22307 v -1.85209 h 0.22307 z" | |||||
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:2.46944451px;font-family:Roboto;-inkscape-font-specification:'Roboto, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.26458332px" | |||||
id="path1046" /> | |||||
<path | |||||
d="m 45.677336,251.35644 q 0,-0.19172 0.07476,-0.34485 0.07596,-0.15314 0.209806,-0.23634 0.135048,-0.0832 0.307475,-0.0832 0.266478,0 0.430464,0.18449 0.165193,0.18448 0.165193,0.49075 v 0.0157 q 0,0.19051 -0.07355,0.34244 -0.07235,0.15072 -0.208601,0.23513 -0.135047,0.0844 -0.311092,0.0844 -0.265272,0 -0.430464,-0.18448 -0.163987,-0.18449 -0.163987,-0.48834 z m 0.224276,0.0265 q 0,0.21704 0.10008,0.34847 0.101286,0.13143 0.270095,0.13143 0.170016,0 0.270096,-0.13264 0.10008,-0.13384 0.10008,-0.37379 0,-0.21463 -0.102492,-0.34726 -0.101286,-0.13385 -0.270095,-0.13385 -0.165193,0 -0.266478,0.13143 -0.101286,0.13143 -0.101286,0.37621 z" | |||||
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:2.46944451px;font-family:Roboto;-inkscape-font-specification:'Roboto, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.26458332px" | |||||
id="path1048" /> | |||||
<path | |||||
d="m 47.668085,251.86287 q 0.119372,0 0.2086,-0.0724 0.08923,-0.0723 0.09887,-0.18086 h 0.211012 q -0.006,0.11213 -0.07717,0.21342 -0.07114,0.10129 -0.190513,0.16157 -0.118167,0.0603 -0.250803,0.0603 -0.266478,0 -0.424436,-0.17725 -0.156752,-0.17845 -0.156752,-0.48713 v -0.0374 q 0,-0.19052 0.06994,-0.33883 0.06994,-0.14831 0.20016,-0.2303 0.13143,-0.082 0.309886,-0.082 0.219453,0 0.364147,0.13144 0.145899,0.13143 0.155546,0.34123 H 47.97556 q -0.0096,-0.12661 -0.09646,-0.20739 -0.08561,-0.082 -0.212218,-0.082 -0.170016,0 -0.264067,0.12299 -0.09284,0.12179 -0.09284,0.3533 v 0.0422 q 0,0.22548 0.09284,0.34727 0.09285,0.12178 0.265273,0.12178 z" | |||||
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:2.46944451px;font-family:Roboto;-inkscape-font-specification:'Roboto, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.26458332px" | |||||
id="path1050" /> | |||||
<path | |||||
d="m 48.801521,251.41673 -0.139871,0.1459 v 0.4582 h -0.22307 v -1.85209 h 0.22307 v 1.12018 l 0.119373,-0.14349 0.406349,-0.42926 h 0.271301 l -0.507635,0.54501 0.566718,0.75965 h -0.261655 z" | |||||
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:2.46944451px;font-family:Roboto;-inkscape-font-specification:'Roboto, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.26458332px" | |||||
id="path1052" /> | |||||
<path | |||||
d="m 50.587286,252.02083 h -0.23151 v -1.75562 h 0.23151 z" | |||||
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:2.46944451px;font-family:Roboto;-inkscape-font-specification:'Roboto, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.26458332px" | |||||
id="path1054" /> | |||||
<path | |||||
d="m 51.185355,250.71617 0.0072,0.16399 q 0.149517,-0.18811 0.390674,-0.18811 0.413583,0 0.417201,0.46664 v 0.86214 h -0.22307 v -0.86334 q -0.0012,-0.14108 -0.06511,-0.2086 -0.0627,-0.0675 -0.196543,-0.0675 -0.108521,0 -0.190514,0.0579 -0.08199,0.0579 -0.127813,0.15193 v 0.92966 h -0.22307 v -1.30466 z" | |||||
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:2.46944451px;font-family:Roboto;-inkscape-font-specification:'Roboto, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.26458332px" | |||||
id="path1056" /> | |||||
</g> | |||||
<g | |||||
aria-label="Out" | |||||
style="font-style:normal;font-weight:normal;font-size:3.17499995px;line-height:125%;font-family:Sans;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" | |||||
id="text1027"> | |||||
<path | |||||
d="m 90.426066,251.19969 q 0,0.25804 -0.08682,0.45096 -0.08682,0.19172 -0.245979,0.29301 -0.159164,0.10128 -0.371382,0.10128 -0.207395,0 -0.367764,-0.10128 -0.160369,-0.10249 -0.249597,-0.2906 -0.08802,-0.1893 -0.09043,-0.4377 v -0.1266 q 0,-0.25322 0.08802,-0.44735 0.08802,-0.19413 0.248391,-0.29662 0.161575,-0.1037 0.36897,-0.1037 0.211012,0 0.371381,0.10249 0.161575,0.10129 0.248391,0.29542 0.08682,0.19293 0.08682,0.44976 z m -0.230305,-0.11334 q 0,-0.3123 -0.125401,-0.4787 -0.125402,-0.1676 -0.350883,-0.1676 -0.219453,0 -0.34606,0.1676 -0.125402,0.1664 -0.129019,0.46302 v 0.12902 q 0,0.30265 0.126607,0.47628 0.127813,0.17243 0.350883,0.17243 0.224276,0 0.347266,-0.16278 0.12299,-0.16399 0.126607,-0.46905 z" | |||||
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:2.46944451px;font-family:Roboto;-inkscape-font-specification:'Roboto, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.26458332px" | |||||
id="path1037" /> | |||||
<path | |||||
d="m 91.543827,251.89181 q -0.130225,0.15313 -0.382233,0.15313 -0.208601,0 -0.318327,-0.12057 -0.108521,-0.12179 -0.109726,-0.35933 v -0.84887 h 0.223069 v 0.84284 q 0,0.29663 0.241157,0.29663 0.255626,0 0.340031,-0.19052 v -0.94895 h 0.22307 v 1.30466 H 91.54865 Z" | |||||
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:2.46944451px;font-family:Roboto;-inkscape-font-specification:'Roboto, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.26458332px" | |||||
id="path1039" /> | |||||
<path | |||||
d="m 92.401139,250.40026 v 0.31591 h 0.243568 v 0.17243 h -0.243568 v 0.80908 q 0,0.0784 0.03256,0.11817 0.03256,0.0386 0.110932,0.0386 0.03858,0 0.106109,-0.0145 v 0.18087 q -0.08802,0.0241 -0.171221,0.0241 -0.149517,0 -0.225482,-0.0904 -0.07596,-0.0904 -0.07596,-0.25683 V 250.8886 H 91.94053 v -0.17243 h 0.237539 v -0.31591 z" | |||||
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:2.46944451px;font-family:Roboto;-inkscape-font-specification:'Roboto, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.26458332px" | |||||
id="path1041" /> | |||||
</g> | |||||
<path | |||||
style="fill:none;stroke:#000000;stroke-width:0.10532083;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;stroke-opacity:1" | |||||
d="M 31.359782,251.42663 H 41.88933" | |||||
id="path1029" | |||||
inkscape:connector-curvature="0" /> | |||||
<path | |||||
inkscape:connector-curvature="0" | |||||
id="path1031" | |||||
d="m 93.48308,251.42663 h 15.875" | |||||
style="fill:none;stroke:#000000;stroke-width:0.12931989;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;stroke-opacity:1" /> | |||||
<g | |||||
aria-label="Quad Sequencer" | |||||
style="font-style:normal;font-weight:normal;font-size:3.17499995px;line-height:125%;font-family:Sans;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" | |||||
id="text1035"> | |||||
<path | |||||
d="m 57.24848,164.89701 q 0,0.42168 -0.136426,0.73381 -0.136426,0.31006 -0.378272,0.49816 l 0.500228,0.39274 -0.394808,0.34933 -0.640787,-0.51469 q -0.109555,0.0186 -0.227377,0.0186 -0.374137,0 -0.667659,-0.17983 -0.293522,-0.17984 -0.454753,-0.51263 -0.16123,-0.33487 -0.163297,-0.76895 v -0.14883 q 0,-0.44442 0.159163,-0.78135 0.161231,-0.33899 0.452686,-0.51883 0.293522,-0.1819 0.669726,-0.1819 0.376205,0 0.66766,0.1819 0.293522,0.17984 0.452685,0.51883 0.161231,0.33693 0.161231,0.77928 z m -0.628386,-0.13642 q 0,-0.47336 -0.169499,-0.71934 -0.169498,-0.24598 -0.483691,-0.24598 -0.312126,0 -0.481624,0.24391 -0.169499,0.24185 -0.171566,0.71107 v 0.14676 q 0,0.46096 0.169499,0.71521 0.169498,0.25424 0.487825,0.25424 0.312126,0 0.479557,-0.24391 0.167432,-0.24598 0.169499,-0.7152 z" | |||||
style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:4.23333311px;font-family:Roboto;-inkscape-font-specification:'Roboto, Bold';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.26458332px" | |||||
id="path1059" /> | |||||
<path | |||||
d="m 59.007545,166.10624 q -0.221175,0.26872 -0.611849,0.26872 -0.359668,0 -0.549837,-0.20671 -0.188102,-0.2067 -0.192236,-0.60564 v -1.46555 h 0.597379 v 1.44488 q 0,0.34933 0.318327,0.34933 0.303858,0 0.417546,-0.21084 v -1.58337 h 0.599446 v 2.23656 h -0.562239 z" | |||||
style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:4.23333311px;font-family:Roboto;-inkscape-font-specification:'Roboto, Bold';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.26458332px" | |||||
id="path1061" /> | |||||
<path | |||||
d="m 61.337118,166.33362 q -0.04134,-0.0806 -0.05994,-0.20051 -0.217041,0.24185 -0.564307,0.24185 -0.328662,0 -0.545703,-0.19017 -0.214974,-0.19017 -0.214974,-0.47956 0,-0.35553 0.262516,-0.5457 0.264584,-0.19017 0.762745,-0.19224 h 0.274918 v -0.12815 q 0,-0.15503 -0.08062,-0.24805 -0.07855,-0.093 -0.250114,-0.093 -0.150895,0 -0.237712,0.0724 -0.08475,0.0724 -0.08475,0.19844 H 60.0018 q 0,-0.19431 0.119889,-0.35967 0.119889,-0.16537 0.338997,-0.25838 0.219108,-0.0951 0.49196,-0.0951 0.413411,0 0.655257,0.20877 0.243913,0.20671 0.243913,0.58291 v 0.96945 q 0.0021,0.31833 0.08888,0.48163 v 0.0351 z m -0.494026,-0.41548 q 0.132291,0 0.243913,-0.0579 0.111621,-0.0599 0.165364,-0.15916 v -0.38447 h -0.223242 q -0.448551,0 -0.47749,0.31005 l -0.0021,0.0351 q 0,0.11163 0.07855,0.18397 0.07855,0.0724 0.214974,0.0724 z" | |||||
style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:4.23333311px;font-family:Roboto;-inkscape-font-specification:'Roboto, Bold';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.26458332px" | |||||
id="path1063" /> | |||||
<path | |||||
d="m 62.221819,165.1988 q 0,-0.52296 0.233578,-0.83302 0.235644,-0.31006 0.642854,-0.31006 0.326595,0 0.539502,0.24391 v -1.14101 H 64.2372 v 3.175 h -0.539502 l -0.02894,-0.23771 q -0.223242,0.27905 -0.574642,0.27905 -0.394808,0 -0.634586,-0.31006 -0.237712,-0.31212 -0.237712,-0.8661 z m 0.59738,0.0434 q 0,0.31419 0.109554,0.48163 0.109554,0.16743 0.318327,0.16743 0.276985,0 0.390673,-0.23358 v -0.88263 q -0.111621,-0.23358 -0.386539,-0.23358 -0.432015,0 -0.432015,0.70073 z" | |||||
style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:4.23333311px;font-family:Roboto;-inkscape-font-specification:'Roboto, Bold';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.26458332px" | |||||
id="path1065" /> | |||||
<path | |||||
d="m 67.362591,165.544 q 0,-0.1757 -0.124024,-0.26872 -0.124023,-0.0951 -0.446484,-0.19843 -0.322461,-0.10542 -0.510563,-0.20671 -0.51263,-0.27698 -0.51263,-0.74621 0,-0.24391 0.136425,-0.43408 0.138493,-0.19223 0.394808,-0.29972 0.258382,-0.10749 0.578776,-0.10749 0.322461,0 0.574642,0.11782 0.252181,0.11576 0.390674,0.32867 0.14056,0.2129 0.14056,0.48369 h -0.620117 q 0,-0.20671 -0.130225,-0.3204 -0.130224,-0.11575 -0.365869,-0.11575 -0.227376,0 -0.353467,0.0971 -0.12609,0.0951 -0.12609,0.25218 0,0.14676 0.146761,0.24598 0.148828,0.0992 0.436149,0.18604 0.529167,0.15916 0.771012,0.3948 0.241846,0.23565 0.241846,0.58705 0,0.39067 -0.295589,0.61391 -0.295589,0.22118 -0.795817,0.22118 -0.347266,0 -0.63252,-0.12609 -0.285254,-0.12816 -0.436149,-0.34933 -0.148828,-0.22118 -0.148828,-0.51263 h 0.622184 q 0,0.49816 0.595313,0.49816 0.221175,0 0.345198,-0.0889 0.124024,-0.0909 0.124024,-0.25218 z" | |||||
style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:4.23333311px;font-family:Roboto;-inkscape-font-specification:'Roboto, Bold';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.26458332px" | |||||
id="path1067" /> | |||||
<path | |||||
d="m 69.396574,166.37496 q -0.491959,0 -0.802018,-0.30179 -0.307992,-0.30179 -0.307992,-0.80409 v -0.0579 q 0,-0.33693 0.130225,-0.60152 0.130225,-0.26665 0.367936,-0.40927 0.239779,-0.1447 0.545703,-0.1447 0.458887,0 0.721403,0.28939 0.264584,0.28939 0.264584,0.82062 v 0.24391 h -1.424203 q 0.02894,0.21911 0.173633,0.3514 0.146761,0.13229 0.370003,0.13229 0.345199,0 0.539502,-0.25011 l 0.293522,0.32866 q -0.134358,0.19017 -0.363802,0.29766 -0.229443,0.10542 -0.508496,0.10542 z m -0.06821,-1.83555 q -0.177767,0 -0.289388,0.11989 -0.109554,0.11989 -0.14056,0.34313 h 0.830957 v -0.0475 q -0.0041,-0.19844 -0.107487,-0.30592 -0.103352,-0.10956 -0.293522,-0.10956 z" | |||||
style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:4.23333311px;font-family:Roboto;-inkscape-font-specification:'Roboto, Bold';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.26458332px" | |||||
id="path1069" /> | |||||
<path | |||||
d="m 70.564462,165.19467 q 0,-0.5271 0.233577,-0.83302 0.235644,-0.30593 0.644922,-0.30593 0.359668,0 0.572575,0.27492 l 0.03927,-0.23358 h 0.525032 v 3.09645 h -0.599446 v -1.05213 q -0.206706,0.23358 -0.541569,0.23358 -0.398942,0 -0.636654,-0.31006 -0.237711,-0.31006 -0.237711,-0.87023 z m 0.597379,0.0434 q 0,0.32039 0.111621,0.48782 0.113688,0.16743 0.318327,0.16743 0.274919,0 0.388607,-0.2191 v -0.92398 q -0.111621,-0.21084 -0.384473,-0.21084 -0.206706,0 -0.320394,0.16743 -0.113688,0.16744 -0.113688,0.53124 z" | |||||
style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:4.23333311px;font-family:Roboto;-inkscape-font-specification:'Roboto, Bold';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.26458332px" | |||||
id="path1071" /> | |||||
<path | |||||
d="m 74.386451,166.10624 q -0.221175,0.26872 -0.611849,0.26872 -0.359668,0 -0.549837,-0.20671 -0.188102,-0.2067 -0.192237,-0.60564 v -1.46555 h 0.59738 v 1.44488 q 0,0.34933 0.318327,0.34933 0.303857,0 0.417545,-0.21084 v -1.58337 h 0.599447 v 2.23656 h -0.56224 z" | |||||
style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:4.23333311px;font-family:Roboto;-inkscape-font-specification:'Roboto, Bold';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.26458332px" | |||||
id="path1073" /> | |||||
<path | |||||
d="m 76.449374,166.37496 q -0.491959,0 -0.802018,-0.30179 -0.307991,-0.30179 -0.307991,-0.80409 v -0.0579 q 0,-0.33693 0.130224,-0.60152 0.130225,-0.26665 0.367936,-0.40927 0.239779,-0.1447 0.545703,-0.1447 0.458887,0 0.721403,0.28939 0.264584,0.28939 0.264584,0.82062 v 0.24391 h -1.424203 q 0.02894,0.21911 0.173633,0.3514 0.146761,0.13229 0.370003,0.13229 0.345199,0 0.539502,-0.25011 l 0.293522,0.32866 q -0.134358,0.19017 -0.363802,0.29766 -0.229443,0.10542 -0.508496,0.10542 z m -0.06821,-1.83555 q -0.177766,0 -0.289388,0.11989 -0.109554,0.11989 -0.140559,0.34313 h 0.830957 v -0.0475 q -0.0041,-0.19844 -0.107487,-0.30592 -0.103353,-0.10956 -0.293523,-0.10956 z" | |||||
style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:4.23333311px;font-family:Roboto;-inkscape-font-specification:'Roboto, Bold';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.26458332px" | |||||
id="path1075" /> | |||||
<path | |||||
d="m 78.260116,164.09706 0.0186,0.25838 q 0.239779,-0.29972 0.642855,-0.29972 0.355534,0 0.529166,0.20877 0.173633,0.20878 0.177767,0.62426 v 1.44487 h -0.597379 v -1.43041 q 0,-0.19016 -0.08268,-0.27491 -0.08268,-0.0868 -0.274919,-0.0868 -0.252181,0 -0.378272,0.21497 v 1.57717 h -0.597379 v -2.23656 z" | |||||
style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:4.23333311px;font-family:Roboto;-inkscape-font-specification:'Roboto, Bold';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.26458332px" | |||||
id="path1077" /> | |||||
<path | |||||
d="m 81.013436,165.89333 q 0.165365,0 0.268717,-0.0909 0.103353,-0.0909 0.107487,-0.24184 h 0.560173 q -0.0021,0.22738 -0.124023,0.41754 -0.121957,0.18811 -0.334864,0.29353 -0.21084,0.10335 -0.467155,0.10335 -0.479557,0 -0.756543,-0.30386 -0.276985,-0.30592 -0.276985,-0.84336 v -0.0393 q 0,-0.51677 0.274918,-0.82476 0.274919,-0.30799 0.754476,-0.30799 0.419613,0 0.671794,0.23978 0.254248,0.23771 0.258382,0.63459 H 81.38964 q -0.0041,-0.17364 -0.107487,-0.28112 -0.103352,-0.10956 -0.272851,-0.10956 -0.208773,0 -0.31626,0.15296 -0.10542,0.1509 -0.10542,0.49196 v 0.062 q 0,0.34519 0.10542,0.49609 0.10542,0.15089 0.320394,0.15089 z" | |||||
style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:4.23333311px;font-family:Roboto;-inkscape-font-specification:'Roboto, Bold';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.26458332px" | |||||
id="path1079" /> | |||||
<path | |||||
d="m 83.320272,166.37496 q -0.49196,0 -0.802019,-0.30179 -0.307991,-0.30179 -0.307991,-0.80409 v -0.0579 q 0,-0.33693 0.130225,-0.60152 0.130224,-0.26665 0.367936,-0.40927 0.239778,-0.1447 0.545703,-0.1447 0.458886,0 0.721403,0.28939 0.264583,0.28939 0.264583,0.82062 v 0.24391 H 82.81591 q 0.02894,0.21911 0.173632,0.3514 0.146762,0.13229 0.370004,0.13229 0.345198,0 0.539502,-0.25011 l 0.293522,0.32866 q -0.134359,0.19017 -0.363802,0.29766 -0.229444,0.10542 -0.508496,0.10542 z m -0.06821,-1.83555 q -0.177767,0 -0.289388,0.11989 -0.109554,0.11989 -0.14056,0.34313 h 0.830957 v -0.0475 q -0.0041,-0.19844 -0.107487,-0.30592 -0.103353,-0.10956 -0.293522,-0.10956 z" | |||||
style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:4.23333311px;font-family:Roboto;-inkscape-font-specification:'Roboto, Bold';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.26458332px" | |||||
id="path1081" /> | |||||
<path | |||||
d="m 85.837946,164.65723 q -0.121956,-0.0165 -0.214974,-0.0165 -0.338997,0 -0.444417,0.22944 v 1.46348 h -0.597379 v -2.23656 h 0.564306 l 0.01654,0.26665 q 0.179834,-0.30799 0.49816,-0.30799 0.09922,0 0.186036,0.0269 z" | |||||
style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:4.23333311px;font-family:Roboto;-inkscape-font-specification:'Roboto, Bold';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.26458332px" | |||||
id="path1083" /> | |||||
</g> | |||||
</g> | |||||
</svg> |
@@ -1,370 +0,0 @@ | |||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?> | |||||
<svg | |||||
xmlns:dc="http://purl.org/dc/elements/1.1/" | |||||
xmlns:cc="http://creativecommons.org/ns#" | |||||
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" | |||||
xmlns:svg="http://www.w3.org/2000/svg" | |||||
xmlns="http://www.w3.org/2000/svg" | |||||
xmlns:xlink="http://www.w3.org/1999/xlink" | |||||
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" | |||||
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" | |||||
id="svg8" | |||||
width="60" | |||||
height="380.00003" | |||||
viewBox="0 0 59.999998 380.00004" | |||||
version="1.1" | |||||
sodipodi:docname="Walker.svg" | |||||
inkscape:version="0.92.2 5c3e80d, 2017-08-06"> | |||||
<metadata | |||||
id="metadata29"> | |||||
<rdf:RDF> | |||||
<cc:Work | |||||
rdf:about=""> | |||||
<dc:format>image/svg+xml</dc:format> | |||||
<dc:type | |||||
rdf:resource="http://purl.org/dc/dcmitype/StillImage" /> | |||||
<dc:title>BlankPanel1</dc:title> | |||||
</cc:Work> | |||||
</rdf:RDF> | |||||
</metadata> | |||||
<defs | |||||
id="defs27"> | |||||
<clipPath | |||||
id="clipPath837" | |||||
clipPathUnits="userSpaceOnUse"> | |||||
<path | |||||
inkscape:connector-curvature="0" | |||||
id="path835" | |||||
d="M 0,842 H 595 V 0 H 0 Z" /> | |||||
</clipPath> | |||||
<clipPath | |||||
id="clipPath13703" | |||||
clipPathUnits="userSpaceOnUse"> | |||||
<path | |||||
inkscape:connector-curvature="0" | |||||
id="path13701" | |||||
d="M 0,1020.448 H 935.433 V 0 H 0 Z" /> | |||||
</clipPath> | |||||
</defs> | |||||
<sodipodi:namedview | |||||
pagecolor="#ffffff" | |||||
bordercolor="#666666" | |||||
borderopacity="1" | |||||
objecttolerance="10" | |||||
gridtolerance="10" | |||||
guidetolerance="10" | |||||
inkscape:pageopacity="0" | |||||
inkscape:pageshadow="2" | |||||
inkscape:window-width="1898" | |||||
inkscape:window-height="1026" | |||||
id="namedview25" | |||||
showgrid="true" | |||||
inkscape:zoom="2.1091365" | |||||
inkscape:cx="-102.60295" | |||||
inkscape:cy="208.54037" | |||||
inkscape:window-x="10" | |||||
inkscape:window-y="42" | |||||
inkscape:window-maximized="0" | |||||
inkscape:current-layer="g827" | |||||
showguides="true" | |||||
inkscape:guide-bbox="true"> | |||||
<sodipodi:guide | |||||
position="30,360" | |||||
orientation="1,0" | |||||
id="guide101" | |||||
inkscape:locked="false" /> | |||||
<inkscape:grid | |||||
type="xygrid" | |||||
id="grid826" /> | |||||
<sodipodi:guide | |||||
position="-269.99999,60.000001" | |||||
orientation="0,1" | |||||
id="guide1007" | |||||
inkscape:locked="false" /> | |||||
</sodipodi:namedview> | |||||
<title | |||||
id="title2">BlankPanel1</title> | |||||
<g | |||||
transform="matrix(1.3333333,0,0,-1.3333333,-826.22953,717.78288)" | |||||
inkscape:label="1" | |||||
id="g827" | |||||
style="opacity:1"> | |||||
<g | |||||
id="g831" | |||||
transform="matrix(0.65492365,0,0,1.0001085,214.22316,-0.05847256)"> | |||||
<g | |||||
transform="translate(619.08227,-482.18084)" | |||||
inkscape:label="02" | |||||
id="g13693"> | |||||
<path | |||||
inkscape:connector-curvature="0" | |||||
id="path13695" | |||||
style="fill:#091942;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.22436777" | |||||
d="M 0,735.3352 H 68.666843 V 1020.448 H 0 Z" /> | |||||
<path | |||||
style="opacity:1;fill:#e6e6e6;fill-opacity:1;stroke:#000000;stroke-width:0.47412768;stroke-linecap:square;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:0.98999999" | |||||
d="M -0.45300759,190.33385 V 0.445719 H 45.063249 90.579506 V 190.33385 380.22199 H 45.063249 -0.45300759 Z" | |||||
id="path26" | |||||
inkscape:connector-curvature="0" | |||||
transform="matrix(0.75000002,0,0,-0.75000002,0.58989299,1020.518)" /> | |||||
</g> | |||||
</g> | |||||
<g | |||||
inkscape:groupmode="layer" | |||||
id="layer2" | |||||
inkscape:label="Layer 1" | |||||
style="opacity:0"> | |||||
<image | |||||
sodipodi:absref="/tmp/seq.png" | |||||
y="-538.26715" | |||||
x="619.08228" | |||||
id="image80" | |||||
xlink:href="file:///tmp/seq.png" | |||||
preserveAspectRatio="none" | |||||
height="290.25" | |||||
width="45" | |||||
transform="scale(1,-1)" /> | |||||
</g> | |||||
<flowRoot | |||||
xml:space="preserve" | |||||
id="flowRoot826" | |||||
style="font-style:normal;font-weight:normal;font-size:12px;line-height:125%;font-family:Sans;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" | |||||
transform="matrix(0.75000002,0,0,-0.75000002,619.67216,538.33717)"><flowRegion | |||||
id="flowRegion828"><rect | |||||
id="rect830" | |||||
width="50" | |||||
height="20" | |||||
x="5" | |||||
y="10.000031" /></flowRegion><flowPara | |||||
id="flowPara834">MANIFOLDM</flowPara></flowRoot> <g | |||||
aria-label="Symmetry" | |||||
transform="matrix(1,0,0,-1,-1.6445696e-5,-21)" | |||||
style="font-style:normal;font-weight:normal;font-size:9px;line-height:125%;font-family:Sans;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.75px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" | |||||
id="text878"> | |||||
<path | |||||
d="m 626.45343,-373.62231 q -0.96484,-0.27735 -1.40625,-0.67969 -0.4375,-0.40625 -0.4375,-1 0,-0.67188 0.53516,-1.10938 0.53906,-0.4414 1.39843,-0.4414 0.58594,0 1.04297,0.22656 0.46094,0.22656 0.71094,0.625 0.25391,0.39844 0.25391,0.87109 h -0.75391 q 0,-0.51562 -0.32812,-0.80859 -0.32813,-0.29688 -0.92579,-0.29688 -0.55468,0 -0.86718,0.2461 -0.3086,0.24219 -0.3086,0.67578 0,0.34766 0.29297,0.58984 0.29688,0.23828 1.00391,0.4375 0.71094,0.19922 1.10937,0.44141 0.40235,0.23828 0.59375,0.55859 0.19532,0.32032 0.19532,0.75391 0,0.69141 -0.53907,1.10937 -0.53906,0.41407 -1.4414,0.41407 -0.58594,0 -1.09375,-0.22266 -0.50782,-0.22656 -0.78516,-0.61719 -0.27344,-0.39062 -0.27344,-0.88672 h 0.75391 q 0,0.51563 0.37891,0.81641 0.38281,0.29688 1.01953,0.29688 0.59375,0 0.91015,-0.24219 0.31641,-0.24219 0.31641,-0.66016 0,-0.41797 -0.29297,-0.64453 -0.29297,-0.23047 -1.0625,-0.45312 z" | |||||
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:8px;font-family:Roboto;-inkscape-font-specification:'Roboto, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.75px" | |||||
id="path936" | |||||
inkscape:connector-curvature="0" /> | |||||
<path | |||||
d="m 630.79718,-372.14575 0.98438,-3.16797 h 0.77343 l -1.69922,4.87891 q -0.39453,1.05468 -1.2539,1.05468 l -0.13672,-0.0117 -0.26953,-0.0508 v -0.58593 l 0.19531,0.0156 q 0.36719,0 0.57031,-0.14844 0.20703,-0.14843 0.33985,-0.54297 l 0.16015,-0.42968 -1.50781,-4.17969 h 0.78906 z" | |||||
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:8px;font-family:Roboto;-inkscape-font-specification:'Roboto, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.75px" | |||||
id="path938" | |||||
inkscape:connector-curvature="0" /> | |||||
<path | |||||
d="m 633.87531,-375.31372 0.0195,0.46875 q 0.46484,-0.54688 1.2539,-0.54688 0.88672,0 1.20703,0.67969 0.21094,-0.30469 0.54688,-0.49219 0.33984,-0.1875 0.80078,-0.1875 1.39063,0 1.41406,1.47266 v 2.83203 h -0.72265 v -2.78906 q 0,-0.45313 -0.20703,-0.67578 -0.20704,-0.22656 -0.69532,-0.22656 -0.40234,0 -0.66797,0.24218 -0.26562,0.23828 -0.30859,0.64453 v 2.80469 h -0.72656 v -2.76953 q 0,-0.92187 -0.90235,-0.92187 -0.71093,0 -0.97265,0.60546 v 3.08594 h -0.72266 v -4.22656 z" | |||||
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:8px;font-family:Roboto;-inkscape-font-specification:'Roboto, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.75px" | |||||
id="path940" | |||||
inkscape:connector-curvature="0" /> | |||||
<path | |||||
d="m 640.89093,-375.31372 0.0195,0.46875 q 0.46485,-0.54688 1.25391,-0.54688 0.88672,0 1.20703,0.67969 0.21094,-0.30469 0.54687,-0.49219 0.33985,-0.1875 0.80079,-0.1875 1.39062,0 1.41406,1.47266 v 2.83203 h -0.72266 v -2.78906 q 0,-0.45313 -0.20703,-0.67578 -0.20703,-0.22656 -0.69531,-0.22656 -0.40235,0 -0.66797,0.24218 -0.26563,0.23828 -0.30859,0.64453 v 2.80469 h -0.72657 v -2.76953 q 0,-0.92187 -0.90234,-0.92187 -0.71094,0 -0.97266,0.60546 v 3.08594 h -0.72265 v -4.22656 z" | |||||
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:8px;font-family:Roboto;-inkscape-font-specification:'Roboto, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.75px" | |||||
id="path942" | |||||
inkscape:connector-curvature="0" /> | |||||
<path | |||||
d="m 648.98077,-371.00903 q -0.85937,0 -1.39843,-0.5625 -0.53907,-0.56641 -0.53907,-1.51172 v -0.13281 q 0,-0.62891 0.23829,-1.1211 0.24218,-0.49609 0.67187,-0.77344 0.43359,-0.28125 0.9375,-0.28125 0.82422,0 1.28125,0.54297 0.45703,0.54297 0.45703,1.55469 v 0.30078 h -2.86328 q 0.0156,0.625 0.36328,1.01172 0.35156,0.38281 0.89063,0.38281 0.38281,0 0.64843,-0.15625 0.26563,-0.15625 0.46485,-0.41406 l 0.4414,0.34375 q -0.53125,0.81641 -1.59375,0.81641 z m -0.0898,-3.78907 q -0.4375,0 -0.73437,0.32032 -0.29688,0.3164 -0.36719,0.89062 h 2.11719 v -0.0547 q -0.0312,-0.55078 -0.29688,-0.85156 -0.26562,-0.30469 -0.71875,-0.30469 z" | |||||
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:8px;font-family:Roboto;-inkscape-font-specification:'Roboto, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.75px" | |||||
id="path944" | |||||
inkscape:connector-curvature="0" /> | |||||
<path | |||||
d="m 652.44171,-376.33716 v 1.02344 h 0.78906 v 0.55859 h -0.78906 v 2.6211 q 0,0.2539 0.10547,0.38281 0.10547,0.125 0.35938,0.125 0.125,0 0.34375,-0.0469 v 0.58594 q -0.28516,0.0781 -0.55469,0.0781 -0.48438,0 -0.73047,-0.29297 -0.24609,-0.29297 -0.24609,-0.83203 v -2.6211 h -0.76954 v -0.55859 h 0.76954 v -1.02344 z" | |||||
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:8px;font-family:Roboto;-inkscape-font-specification:'Roboto, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.75px" | |||||
id="path946" | |||||
inkscape:connector-curvature="0" /> | |||||
<path | |||||
d="m 656.11359,-374.66528 q -0.16407,-0.0274 -0.35547,-0.0274 -0.71094,0 -0.96485,0.60547 v 3 h -0.72265 v -4.22656 h 0.70312 l 0.0117,0.48828 q 0.35547,-0.56641 1.00781,-0.56641 0.21094,0 0.32032,0.0547 z" | |||||
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:8px;font-family:Roboto;-inkscape-font-specification:'Roboto, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.75px" | |||||
id="path948" | |||||
inkscape:connector-curvature="0" /> | |||||
<path | |||||
d="m 658.15656,-372.14575 0.98437,-3.16797 h 0.77344 l -1.69922,4.87891 q -0.39453,1.05468 -1.25391,1.05468 l -0.13672,-0.0117 -0.26953,-0.0508 v -0.58593 l 0.19532,0.0156 q 0.36718,0 0.57031,-0.14844 0.20703,-0.14843 0.33984,-0.54297 l 0.16016,-0.42968 -1.50781,-4.17969 h 0.78906 z" | |||||
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:8px;font-family:Roboto;-inkscape-font-specification:'Roboto, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.75px" | |||||
id="path950" | |||||
inkscape:connector-curvature="0" /> | |||||
</g> | |||||
<g | |||||
aria-label="Out" | |||||
transform="matrix(1,0,0,-1,19.5,43.5)" | |||||
style="font-style:normal;font-weight:normal;font-size:9px;line-height:125%;font-family:Sans;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.75px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" | |||||
id="text890"> | |||||
<path | |||||
d="m 630.35577,-260.09204 q 0,0.83594 -0.28125,1.46094 -0.28125,0.62109 -0.79687,0.94922 -0.51563,0.32812 -1.20313,0.32812 -0.67187,0 -1.1914,-0.32812 -0.51953,-0.33204 -0.8086,-0.94141 -0.28515,-0.61328 -0.29296,-1.41797 v -0.41016 q 0,-0.82031 0.28515,-1.44921 0.28516,-0.62891 0.80469,-0.96094 0.52344,-0.33594 1.19531,-0.33594 0.6836,0 1.20313,0.33203 0.52343,0.32813 0.80468,0.95703 0.28125,0.625 0.28125,1.45703 z m -0.74609,-0.36719 q 0,-1.01172 -0.40625,-1.55078 -0.40625,-0.54297 -1.13672,-0.54297 -0.71094,0 -1.12109,0.54297 -0.40625,0.53906 -0.41797,1.5 v 0.41797 q 0,0.98047 0.41016,1.54297 0.41406,0.55859 1.13671,0.55859 0.72657,0 1.125,-0.52734 0.39844,-0.53125 0.41016,-1.51953 z" | |||||
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:8px;font-family:Roboto;-inkscape-font-specification:'Roboto, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#000000;stroke-width:0.75px" | |||||
id="path995" | |||||
inkscape:connector-curvature="0" /> | |||||
<path | |||||
d="m 633.97687,-257.84985 q -0.42188,0.49609 -1.23828,0.49609 -0.67578,0 -1.03125,-0.39062 -0.35157,-0.39454 -0.35547,-1.16407 v -2.75 h 0.72265 v 2.73047 q 0,0.96094 0.78125,0.96094 0.82813,0 1.10157,-0.61719 v -3.07422 h 0.72265 v 4.22657 h -0.6875 z" | |||||
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:8px;font-family:Roboto;-inkscape-font-specification:'Roboto, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#000000;stroke-width:0.75px" | |||||
id="path997" | |||||
inkscape:connector-curvature="0" /> | |||||
<path | |||||
d="m 636.75421,-262.68188 v 1.02343 h 0.78906 v 0.5586 h -0.78906 v 2.62109 q 0,0.25391 0.10547,0.38281 0.10547,0.125 0.35938,0.125 0.125,0 0.34375,-0.0469 v 0.58594 q -0.28516,0.0781 -0.55469,0.0781 -0.48438,0 -0.73047,-0.29297 -0.24609,-0.29297 -0.24609,-0.83203 v -2.62109 h -0.76954 v -0.5586 h 0.76954 v -1.02343 z" | |||||
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:8px;font-family:Roboto;-inkscape-font-specification:'Roboto, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#000000;stroke-width:0.75px" | |||||
id="path999" | |||||
inkscape:connector-curvature="0" /> | |||||
</g> | |||||
<g | |||||
aria-label="Stepsize" | |||||
transform="matrix(1,0,0,-1,0,-1.5)" | |||||
style="font-style:normal;font-weight:normal;font-size:9px;line-height:125%;font-family:Sans;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.75px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" | |||||
id="text880"> | |||||
<path | |||||
d="m 629.32257,-484.29922 q -0.96484,-0.27735 -1.40625,-0.67969 -0.4375,-0.40625 -0.4375,-1 0,-0.67188 0.53516,-1.10938 0.53906,-0.4414 1.39843,-0.4414 0.58594,0 1.04297,0.22656 0.46094,0.22656 0.71094,0.625 0.25391,0.39844 0.25391,0.87109 h -0.75391 q 0,-0.51562 -0.32812,-0.80859 -0.32813,-0.29688 -0.92579,-0.29688 -0.55468,0 -0.86718,0.2461 -0.3086,0.24219 -0.3086,0.67578 0,0.34766 0.29297,0.58984 0.29688,0.23828 1.00391,0.4375 0.71094,0.19922 1.10937,0.44141 0.40235,0.23828 0.59375,0.55859 0.19532,0.32032 0.19532,0.75391 0,0.69141 -0.53907,1.10937 -0.53906,0.41407 -1.4414,0.41407 -0.58594,0 -1.09375,-0.22266 -0.50782,-0.22656 -0.78516,-0.61719 -0.27344,-0.39062 -0.27344,-0.88672 h 0.75391 q 0,0.51563 0.37891,0.81641 0.38281,0.29688 1.01953,0.29688 0.59375,0 0.91015,-0.24219 0.31641,-0.24219 0.31641,-0.66016 0,-0.41797 -0.29297,-0.64453 -0.29297,-0.23047 -1.0625,-0.45312 z" | |||||
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:8px;font-family:Roboto;-inkscape-font-specification:'Roboto, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.75px" | |||||
id="path902" | |||||
inkscape:connector-curvature="0" /> | |||||
<path | |||||
d="m 633.26398,-487.01407 v 1.02344 h 0.78906 v 0.55859 h -0.78906 v 2.6211 q 0,0.2539 0.10547,0.38281 0.10546,0.125 0.35937,0.125 0.125,0 0.34375,-0.0469 v 0.58594 q -0.28516,0.0781 -0.55469,0.0781 -0.48437,0 -0.73047,-0.29297 -0.24609,-0.29297 -0.24609,-0.83203 v -2.6211 h -0.76953 v -0.55859 h 0.76953 v -1.02344 z" | |||||
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:8px;font-family:Roboto;-inkscape-font-specification:'Roboto, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.75px" | |||||
id="path904" | |||||
inkscape:connector-curvature="0" /> | |||||
<path | |||||
d="m 636.64679,-481.68594 q -0.85938,0 -1.39844,-0.5625 -0.53906,-0.56641 -0.53906,-1.51172 v -0.13281 q 0,-0.62891 0.23828,-1.1211 0.24219,-0.49609 0.67188,-0.77344 0.43359,-0.28125 0.9375,-0.28125 0.82421,0 1.28125,0.54297 0.45703,0.54297 0.45703,1.55469 v 0.30078 h -2.86328 q 0.0156,0.625 0.36328,1.01172 0.35156,0.38281 0.89062,0.38281 0.38281,0 0.64844,-0.15625 0.26562,-0.15625 0.46484,-0.41406 l 0.44141,0.34375 q -0.53125,0.81641 -1.59375,0.81641 z m -0.0898,-3.78907 q -0.4375,0 -0.73438,0.32032 -0.29687,0.3164 -0.36719,0.89062 h 2.11719 v -0.0547 q -0.0312,-0.55078 -0.29687,-0.85156 -0.26563,-0.30469 -0.71875,-0.30469 z" | |||||
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:8px;font-family:Roboto;-inkscape-font-specification:'Roboto, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.75px" | |||||
id="path906" | |||||
inkscape:connector-curvature="0" /> | |||||
<path | |||||
d="m 642.69757,-483.83047 q 0,0.96484 -0.44141,1.55468 -0.4414,0.58985 -1.19531,0.58985 -0.76953,0 -1.21094,-0.48828 v 2.03515 h -0.72265 v -5.85156 h 0.66015 l 0.0352,0.46875 q 0.44141,-0.54688 1.22656,-0.54688 0.76172,0 1.20313,0.57422 0.44531,0.57422 0.44531,1.59766 z m -0.72266,-0.082 q 0,-0.71484 -0.30468,-1.1289 -0.30469,-0.41406 -0.83594,-0.41406 -0.65625,0 -0.98438,0.58203 v 2.01953 q 0.32422,0.57812 0.99219,0.57812 0.51953,0 0.82422,-0.41015 0.30859,-0.41407 0.30859,-1.22657 z" | |||||
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:8px;font-family:Roboto;-inkscape-font-specification:'Roboto, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.75px" | |||||
id="path908" | |||||
inkscape:connector-curvature="0" /> | |||||
<path | |||||
d="m 646.07257,-482.88516 q 0,-0.29297 -0.22266,-0.45313 -0.21875,-0.16406 -0.76953,-0.28125 -0.54687,-0.11718 -0.87109,-0.28125 -0.32031,-0.16406 -0.47656,-0.39062 -0.15235,-0.22656 -0.15235,-0.53906 0,-0.51954 0.4375,-0.87891 0.44141,-0.35938 1.125,-0.35938 0.71875,0 1.16407,0.3711 0.44921,0.37109 0.44921,0.94922 h -0.72656 q 0,-0.29688 -0.2539,-0.51172 -0.25,-0.21485 -0.63282,-0.21485 -0.39453,0 -0.61718,0.17188 -0.22266,0.17187 -0.22266,0.44922 0,0.26172 0.20703,0.39453 0.20703,0.13281 0.74609,0.25391 0.54297,0.12109 0.87891,0.28906 0.33594,0.16797 0.49609,0.40625 0.16407,0.23437 0.16407,0.57422 0,0.5664 -0.45313,0.91015 -0.45312,0.33985 -1.17578,0.33985 -0.50781,0 -0.89844,-0.17969 -0.39062,-0.17969 -0.61328,-0.5 -0.21875,-0.32422 -0.21875,-0.69922 h 0.72266 q 0.0195,0.36328 0.28906,0.57813 0.27344,0.21093 0.71875,0.21093 0.41016,0 0.65625,-0.16406 0.25,-0.16797 0.25,-0.44531 z" | |||||
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:8px;font-family:Roboto;-inkscape-font-specification:'Roboto, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.75px" | |||||
id="path910" | |||||
inkscape:connector-curvature="0" /> | |||||
<path | |||||
d="m 648.52179,-481.76407 h -0.72266 v -4.22656 h 0.72266 z m -0.78125,-5.34765 q 0,-0.17579 0.10547,-0.29688 0.10937,-0.12109 0.32031,-0.12109 0.21094,0 0.32031,0.12109 0.10938,0.12109 0.10938,0.29688 0,0.17578 -0.10938,0.29296 -0.10937,0.11719 -0.32031,0.11719 -0.21094,0 -0.32031,-0.11719 -0.10547,-0.11718 -0.10547,-0.29296 z" | |||||
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:8px;font-family:Roboto;-inkscape-font-specification:'Roboto, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.75px" | |||||
id="path912" | |||||
inkscape:connector-curvature="0" /> | |||||
<path | |||||
d="m 650.35382,-482.35391 h 2.47266 v 0.58984 h -3.35547 v -0.53125 l 2.33203,-3.09765 h -2.29688 v -0.59766 h 3.20313 v 0.51172 z" | |||||
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:8px;font-family:Roboto;-inkscape-font-specification:'Roboto, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.75px" | |||||
id="path914" | |||||
inkscape:connector-curvature="0" /> | |||||
<path | |||||
d="m 655.39679,-481.68594 q -0.85938,0 -1.39844,-0.5625 -0.53906,-0.56641 -0.53906,-1.51172 v -0.13281 q 0,-0.62891 0.23828,-1.1211 0.24219,-0.49609 0.67188,-0.77344 0.43359,-0.28125 0.9375,-0.28125 0.82421,0 1.28125,0.54297 0.45703,0.54297 0.45703,1.55469 v 0.30078 h -2.86328 q 0.0156,0.625 0.36328,1.01172 0.35156,0.38281 0.89062,0.38281 0.38281,0 0.64844,-0.15625 0.26562,-0.15625 0.46484,-0.41406 l 0.44141,0.34375 q -0.53125,0.81641 -1.59375,0.81641 z m -0.0898,-3.78907 q -0.4375,0 -0.73438,0.32032 -0.29687,0.3164 -0.36719,0.89062 h 2.11719 v -0.0547 q -0.0312,-0.55078 -0.29687,-0.85156 -0.26563,-0.30469 -0.71875,-0.30469 z" | |||||
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:8px;font-family:Roboto;-inkscape-font-specification:'Roboto, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.75px" | |||||
id="path916" | |||||
inkscape:connector-curvature="0" /> | |||||
</g> | |||||
<g | |||||
aria-label="Range" | |||||
transform="matrix(1,0,0,-1,0,-3)" | |||||
style="font-style:normal;font-weight:normal;font-size:9px;line-height:125%;font-family:Sans;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.75px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" | |||||
id="text884"> | |||||
<path | |||||
d="m 633.52179,-433.06485 h -1.33594 v 2.30078 h -0.7539 v -5.6875 h 1.88281 q 0.96094,0 1.47656,0.4375 0.51953,0.4375 0.51953,1.27344 0,0.53125 -0.28906,0.92578 -0.28516,0.39453 -0.79688,0.58984 l 1.33594,2.41407 v 0.0469 h -0.80469 z m -1.33594,-0.61328 h 1.15235 q 0.55859,0 0.88671,-0.28906 0.33204,-0.28907 0.33204,-0.77344 0,-0.52734 -0.31641,-0.80859 -0.3125,-0.28125 -0.90625,-0.28516 h -1.14844 z" | |||||
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:8px;font-family:Roboto;-inkscape-font-specification:'Roboto, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.75px" | |||||
id="path919" | |||||
inkscape:connector-curvature="0" /> | |||||
<path | |||||
d="m 638.85382,-430.76407 q -0.0625,-0.125 -0.10156,-0.44531 -0.50391,0.52344 -1.20313,0.52344 -0.625,0 -1.02734,-0.35157 -0.39844,-0.35546 -0.39844,-0.89843 0,-0.66016 0.5,-1.02344 0.50391,-0.36719 1.41406,-0.36719 h 0.70313 v -0.33203 q 0,-0.37891 -0.22656,-0.60156 -0.22657,-0.22656 -0.66797,-0.22656 -0.38672,0 -0.64844,0.19531 -0.26172,0.19531 -0.26172,0.47265 h -0.72656 q 0,-0.3164 0.22266,-0.60937 0.22656,-0.29688 0.60937,-0.46875 0.38672,-0.17188 0.84766,-0.17188 0.73047,0 1.14453,0.36719 0.41406,0.36328 0.42969,1.00391 v 1.94531 q 0,0.58203 0.14843,0.92578 v 0.0625 z m -1.19922,-0.55078 q 0.33985,0 0.64453,-0.17578 0.30469,-0.17578 0.44141,-0.45703 v -0.86719 h -0.56641 q -1.32812,0 -1.32812,0.77734 0,0.33985 0.22656,0.53125 0.22656,0.19141 0.58203,0.19141 z" | |||||
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:8px;font-family:Roboto;-inkscape-font-specification:'Roboto, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.75px" | |||||
id="path921" | |||||
inkscape:connector-curvature="0" /> | |||||
<path | |||||
d="m 641.28741,-434.99063 0.0234,0.53125 q 0.48438,-0.60938 1.26563,-0.60938 1.33984,0 1.35156,1.51172 v 2.79297 h -0.72266 v -2.79687 q -0.004,-0.45703 -0.21093,-0.67578 -0.20313,-0.21875 -0.63672,-0.21875 -0.35157,0 -0.61719,0.1875 -0.26563,0.1875 -0.41406,0.49218 v 3.01172 h -0.72266 v -4.22656 z" | |||||
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:8px;font-family:Roboto;-inkscape-font-specification:'Roboto, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.75px" | |||||
id="path923" | |||||
inkscape:connector-curvature="0" /> | |||||
<path | |||||
d="m 644.85382,-432.91251 q 0,-0.98828 0.45703,-1.57031 0.45703,-0.58594 1.21094,-0.58594 0.77344,0 1.20703,0.54688 l 0.0352,-0.46875 h 0.66015 v 4.125 q 0,0.82031 -0.48828,1.29297 -0.48437,0.47265 -1.30469,0.47265 -0.45703,0 -0.89453,-0.19531 -0.4375,-0.19531 -0.66797,-0.53515 l 0.375,-0.4336 q 0.46485,0.57422 1.13672,0.57422 0.52735,0 0.82032,-0.29687 0.29687,-0.29688 0.29687,-0.83594 v -0.36328 q -0.43359,0.5 -1.18359,0.5 -0.74219,0 -1.20313,-0.59766 -0.45703,-0.59766 -0.45703,-1.62891 z m 0.72656,0.082 q 0,0.71484 0.29297,1.125 0.29297,0.40625 0.82031,0.40625 0.6836,0 1.00391,-0.6211 v -1.92969 q -0.33203,-0.60546 -0.99609,-0.60546 -0.52735,0 -0.82422,0.41015 -0.29688,0.41016 -0.29688,1.21485 z" | |||||
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:8px;font-family:Roboto;-inkscape-font-specification:'Roboto, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.75px" | |||||
id="path925" | |||||
inkscape:connector-curvature="0" /> | |||||
<path | |||||
d="m 651.26398,-430.68594 q -0.85938,0 -1.39844,-0.5625 -0.53906,-0.56641 -0.53906,-1.51172 v -0.13281 q 0,-0.62891 0.23828,-1.1211 0.24219,-0.49609 0.67187,-0.77344 0.4336,-0.28125 0.9375,-0.28125 0.82422,0 1.28125,0.54297 0.45703,0.54297 0.45703,1.55469 v 0.30078 h -2.86328 q 0.0156,0.625 0.36328,1.01172 0.35157,0.38281 0.89063,0.38281 0.38281,0 0.64844,-0.15625 0.26562,-0.15625 0.46484,-0.41406 l 0.44141,0.34375 q -0.53125,0.81641 -1.59375,0.81641 z m -0.0898,-3.78907 q -0.4375,0 -0.73437,0.32032 -0.29688,0.3164 -0.36719,0.89062 h 2.11719 v -0.0547 q -0.0312,-0.55078 -0.29688,-0.85156 -0.26562,-0.30469 -0.71875,-0.30469 z" | |||||
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:8px;font-family:Roboto;-inkscape-font-specification:'Roboto, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.75px" | |||||
id="path927" | |||||
inkscape:connector-curvature="0" /> | |||||
</g> | |||||
<text | |||||
xml:space="preserve" | |||||
style="font-style:normal;font-weight:normal;font-size:9px;line-height:125%;font-family:Sans;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.75px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" | |||||
x="619.67218" | |||||
y="-354.58713" | |||||
id="text888" | |||||
transform="scale(1,-1)"><tspan | |||||
sodipodi:role="line" | |||||
id="tspan886" | |||||
x="619.67218" | |||||
y="-346.62424" | |||||
style="stroke-width:0.75px"></tspan></text> | |||||
<g | |||||
aria-label="Size" | |||||
transform="scale(1,-1)" | |||||
style="font-style:normal;font-weight:normal;font-size:9px;line-height:125%;font-family:Sans;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.75px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" | |||||
id="text892"> | |||||
<path | |||||
d="m 625.61163,-338.79922 q -0.96484,-0.27735 -1.40625,-0.67969 -0.4375,-0.40625 -0.4375,-1 0,-0.67188 0.53516,-1.10938 0.53906,-0.4414 1.39844,-0.4414 0.58593,0 1.04297,0.22656 0.46093,0.22656 0.71093,0.625 0.25391,0.39844 0.25391,0.87109 h -0.75391 q 0,-0.51562 -0.32812,-0.80859 -0.32813,-0.29688 -0.92578,-0.29688 -0.55469,0 -0.86719,0.2461 -0.30859,0.24219 -0.30859,0.67578 0,0.34766 0.29296,0.58984 0.29688,0.23828 1.00391,0.4375 0.71094,0.19922 1.10938,0.44141 0.40234,0.23828 0.59375,0.55859 0.19531,0.32032 0.19531,0.75391 0,0.69141 -0.53906,1.10937 -0.53907,0.41407 -1.44141,0.41407 -0.58594,0 -1.09375,-0.22266 -0.50781,-0.22656 -0.78516,-0.61719 -0.27343,-0.39062 -0.27343,-0.88672 h 0.7539 q 0,0.51563 0.37891,0.81641 0.38281,0.29688 1.01953,0.29688 0.59375,0 0.91016,-0.24219 0.3164,-0.24219 0.3164,-0.66016 0,-0.41797 -0.29297,-0.64453 -0.29297,-0.23047 -1.0625,-0.45312 z" | |||||
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:8px;font-family:Roboto;-inkscape-font-specification:'Roboto, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.75px" | |||||
id="path954" /> | |||||
<path | |||||
d="m 629.35773,-336.26407 h -0.72266 v -4.22656 h 0.72266 z m -0.78125,-5.34765 q 0,-0.17579 0.10547,-0.29688 0.10937,-0.12109 0.32031,-0.12109 0.21094,0 0.32031,0.12109 0.10938,0.12109 0.10938,0.29688 0,0.17578 -0.10938,0.29296 -0.10937,0.11719 -0.32031,0.11719 -0.21094,0 -0.32031,-0.11719 -0.10547,-0.11718 -0.10547,-0.29296 z" | |||||
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:8px;font-family:Roboto;-inkscape-font-specification:'Roboto, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.75px" | |||||
id="path956" /> | |||||
<path | |||||
d="m 631.18976,-336.85391 h 2.47265 v 0.58984 h -3.35546 v -0.53125 l 2.33203,-3.09765 h -2.29688 v -0.59766 h 3.20313 v 0.51172 z" | |||||
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:8px;font-family:Roboto;-inkscape-font-specification:'Roboto, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.75px" | |||||
id="path958" /> | |||||
<path | |||||
d="m 636.23273,-336.18594 q -0.85938,0 -1.39844,-0.5625 -0.53906,-0.56641 -0.53906,-1.51172 v -0.13281 q 0,-0.62891 0.23828,-1.1211 0.24219,-0.49609 0.67187,-0.77344 0.4336,-0.28125 0.9375,-0.28125 0.82422,0 1.28125,0.54297 0.45703,0.54297 0.45703,1.55469 v 0.30078 h -2.86328 q 0.0156,0.625 0.36328,1.01172 0.35157,0.38281 0.89063,0.38281 0.38281,0 0.64844,-0.15625 0.26562,-0.15625 0.46484,-0.41406 l 0.44141,0.34375 q -0.53125,0.81641 -1.59375,0.81641 z m -0.0898,-3.78907 q -0.4375,0 -0.73437,0.32032 -0.29688,0.3164 -0.36719,0.89062 h 2.11719 v -0.0547 q -0.0312,-0.55078 -0.29688,-0.85156 -0.26562,-0.30469 -0.71875,-0.30469 z" | |||||
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:8px;font-family:Roboto;-inkscape-font-specification:'Roboto, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.75px" | |||||
id="path960" /> | |||||
</g> | |||||
<g | |||||
aria-label="Range" | |||||
transform="scale(1,-1)" | |||||
style="font-style:normal;font-weight:normal;font-size:9px;line-height:125%;font-family:Sans;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.75px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" | |||||
id="text896"> | |||||
<path | |||||
d="m 644.02179,-338.56485 h -1.33594 v 2.30078 h -0.7539 v -5.6875 h 1.88281 q 0.96094,0 1.47656,0.4375 0.51953,0.4375 0.51953,1.27344 0,0.53125 -0.28906,0.92578 -0.28516,0.39453 -0.79688,0.58984 l 1.33594,2.41407 v 0.0469 h -0.80469 z m -1.33594,-0.61328 h 1.15235 q 0.55859,0 0.88671,-0.28906 0.33204,-0.28907 0.33204,-0.77344 0,-0.52734 -0.31641,-0.80859 -0.3125,-0.28125 -0.90625,-0.28516 h -1.14844 z" | |||||
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:8px;font-family:Roboto;-inkscape-font-specification:'Roboto, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.75px" | |||||
id="path943" /> | |||||
<path | |||||
d="m 649.35382,-336.26407 q -0.0625,-0.125 -0.10156,-0.44531 -0.50391,0.52344 -1.20313,0.52344 -0.625,0 -1.02734,-0.35157 -0.39844,-0.35546 -0.39844,-0.89843 0,-0.66016 0.5,-1.02344 0.50391,-0.36719 1.41406,-0.36719 h 0.70313 v -0.33203 q 0,-0.37891 -0.22656,-0.60156 -0.22657,-0.22656 -0.66797,-0.22656 -0.38672,0 -0.64844,0.19531 -0.26172,0.19531 -0.26172,0.47265 h -0.72656 q 0,-0.3164 0.22266,-0.60937 0.22656,-0.29688 0.60937,-0.46875 0.38672,-0.17188 0.84766,-0.17188 0.73047,0 1.14453,0.36719 0.41406,0.36328 0.42969,1.00391 v 1.94531 q 0,0.58203 0.14843,0.92578 v 0.0625 z m -1.19922,-0.55078 q 0.33985,0 0.64453,-0.17578 0.30469,-0.17578 0.44141,-0.45703 v -0.86719 h -0.56641 q -1.32812,0 -1.32812,0.77734 0,0.33985 0.22656,0.53125 0.22656,0.19141 0.58203,0.19141 z" | |||||
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:8px;font-family:Roboto;-inkscape-font-specification:'Roboto, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.75px" | |||||
id="path945" /> | |||||
<path | |||||
d="m 651.78741,-340.49063 0.0234,0.53125 q 0.48438,-0.60938 1.26563,-0.60938 1.33984,0 1.35156,1.51172 v 2.79297 h -0.72266 v -2.79687 q -0.004,-0.45703 -0.21093,-0.67578 -0.20313,-0.21875 -0.63672,-0.21875 -0.35157,0 -0.61719,0.1875 -0.26563,0.1875 -0.41406,0.49218 v 3.01172 h -0.72266 v -4.22656 z" | |||||
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:8px;font-family:Roboto;-inkscape-font-specification:'Roboto, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.75px" | |||||
id="path947" /> | |||||
<path | |||||
d="m 655.35382,-338.41251 q 0,-0.98828 0.45703,-1.57031 0.45703,-0.58594 1.21094,-0.58594 0.77344,0 1.20703,0.54688 l 0.0352,-0.46875 h 0.66015 v 4.125 q 0,0.82031 -0.48828,1.29297 -0.48437,0.47265 -1.30469,0.47265 -0.45703,0 -0.89453,-0.19531 -0.4375,-0.19531 -0.66797,-0.53515 l 0.375,-0.4336 q 0.46485,0.57422 1.13672,0.57422 0.52735,0 0.82032,-0.29687 0.29687,-0.29688 0.29687,-0.83594 v -0.36328 q -0.43359,0.5 -1.18359,0.5 -0.74219,0 -1.20313,-0.59766 -0.45703,-0.59766 -0.45703,-1.62891 z m 0.72656,0.082 q 0,0.71484 0.29297,1.125 0.29297,0.40625 0.82031,0.40625 0.6836,0 1.00391,-0.6211 v -1.92969 q -0.33203,-0.60546 -0.99609,-0.60546 -0.52735,0 -0.82422,0.41015 -0.29688,0.41016 -0.29688,1.21485 z" | |||||
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:8px;font-family:Roboto;-inkscape-font-specification:'Roboto, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.75px" | |||||
id="path949" /> | |||||
<path | |||||
d="m 661.76398,-336.18594 q -0.85938,0 -1.39844,-0.5625 -0.53906,-0.56641 -0.53906,-1.51172 v -0.13281 q 0,-0.62891 0.23828,-1.1211 0.24219,-0.49609 0.67187,-0.77344 0.4336,-0.28125 0.9375,-0.28125 0.82422,0 1.28125,0.54297 0.45703,0.54297 0.45703,1.55469 v 0.30078 h -2.86328 q 0.0156,0.625 0.36328,1.01172 0.35157,0.38281 0.89063,0.38281 0.38281,0 0.64844,-0.15625 0.26562,-0.15625 0.46484,-0.41406 l 0.44141,0.34375 q -0.53125,0.81641 -1.59375,0.81641 z m -0.0898,-3.78907 q -0.4375,0 -0.73437,0.32032 -0.29688,0.3164 -0.36719,0.89062 h 2.11719 v -0.0547 q -0.0312,-0.55078 -0.29688,-0.85156 -0.26562,-0.30469 -0.71875,-0.30469 z" | |||||
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:8px;font-family:Roboto;-inkscape-font-specification:'Roboto, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.75px" | |||||
id="path951" /> | |||||
</g> | |||||
<g | |||||
aria-label="Clock" | |||||
transform="scale(1,-1)" | |||||
style="font-style:normal;font-weight:normal;font-size:9px;line-height:125%;font-family:Sans;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.75px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" | |||||
id="text900"> | |||||
<path | |||||
d="m 626.61945,-302.73657 q -0.10547,0.90234 -0.66797,1.39453 -0.5586,0.48828 -1.48828,0.48828 -1.00782,0 -1.61719,-0.72266 -0.60547,-0.72265 -0.60547,-1.93359 v -0.54687 q 0,-0.79297 0.28125,-1.39454 0.28516,-0.60156 0.80469,-0.92187 0.51953,-0.32422 1.20312,-0.32422 0.90625,0 1.45313,0.50781 0.54687,0.50391 0.63672,1.39844 h -0.75391 q -0.0977,-0.67969 -0.42578,-0.98437 -0.32422,-0.30469 -0.91016,-0.30469 -0.71875,0 -1.1289,0.53125 -0.40625,0.53125 -0.40625,1.51172 v 0.55078 q 0,0.92578 0.38671,1.47265 0.38672,0.54688 1.08204,0.54688 0.625,0 0.95703,-0.28125 0.33593,-0.28516 0.44531,-0.98828 z" | |||||
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:8px;font-family:Roboto;-inkscape-font-specification:'Roboto, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.75px" | |||||
id="path930" /> | |||||
<path | |||||
d="m 628.31085,-300.93188 h -0.72265 v -6 h 0.72265 z" | |||||
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:8px;font-family:Roboto;-inkscape-font-specification:'Roboto, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.75px" | |||||
id="path932" /> | |||||
<path | |||||
d="m 629.27179,-303.08423 q 0,-0.62109 0.24219,-1.11719 0.24609,-0.49609 0.67968,-0.76562 0.4375,-0.26953 0.9961,-0.26953 0.86328,0 1.39453,0.59765 0.53516,0.59766 0.53516,1.58985 v 0.0508 q 0,0.61719 -0.23829,1.10937 -0.23437,0.48829 -0.67578,0.76172 -0.4375,0.27344 -1.00781,0.27344 -0.85937,0 -1.39453,-0.59766 -0.53125,-0.59765 -0.53125,-1.58203 z m 0.72656,0.0859 q 0,0.70312 0.32422,1.12891 0.32813,0.42578 0.875,0.42578 0.55078,0 0.875,-0.42969 0.32422,-0.43359 0.32422,-1.21094 0,-0.69531 -0.33203,-1.125 -0.32813,-0.43359 -0.875,-0.43359 -0.53516,0 -0.86328,0.42578 -0.32813,0.42578 -0.32813,1.21875 z" | |||||
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:8px;font-family:Roboto;-inkscape-font-specification:'Roboto, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.75px" | |||||
id="path934" /> | |||||
<path | |||||
d="m 635.72101,-301.4436 q 0.38672,0 0.67578,-0.23438 0.28906,-0.23437 0.32031,-0.58594 h 0.6836 q -0.0195,0.36329 -0.25,0.69141 -0.23047,0.32813 -0.61719,0.52344 -0.38281,0.19531 -0.8125,0.19531 -0.86328,0 -1.375,-0.57422 -0.50781,-0.57812 -0.50781,-1.57812 v -0.1211 q 0,-0.61718 0.22656,-1.09765 0.22656,-0.48047 0.64844,-0.7461 0.42578,-0.26562 1.0039,-0.26562 0.71094,0 1.17969,0.42578 0.47266,0.42578 0.50391,1.10547 h -0.6836 q -0.0312,-0.41016 -0.3125,-0.67188 -0.27734,-0.26562 -0.6875,-0.26562 -0.55078,0 -0.85547,0.39844 -0.30078,0.39453 -0.30078,1.14453 v 0.13672 q 0,0.73046 0.30078,1.125 0.30078,0.39453 0.85938,0.39453 z" | |||||
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:8px;font-family:Roboto;-inkscape-font-specification:'Roboto, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.75px" | |||||
id="path937" /> | |||||
<path | |||||
d="m 639.39288,-302.88892 -0.45312,0.47266 v 1.48438 h -0.72266 v -6 h 0.72266 v 3.6289 l 0.38672,-0.46484 1.3164,-1.39063 h 0.87891 l -1.64453,1.76563 1.83594,2.46094 h -0.84766 z" | |||||
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:8px;font-family:Roboto;-inkscape-font-specification:'Roboto, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.75px" | |||||
id="path939" /> | |||||
</g> | |||||
</g> | |||||
</svg> |
@@ -1,163 +0,0 @@ | |||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?> | |||||
<svg | |||||
xmlns:dc="http://purl.org/dc/elements/1.1/" | |||||
xmlns:cc="http://creativecommons.org/ns#" | |||||
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" | |||||
xmlns:svg="http://www.w3.org/2000/svg" | |||||
xmlns="http://www.w3.org/2000/svg" | |||||
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" | |||||
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" | |||||
id="svg8" | |||||
width="30" | |||||
height="380" | |||||
viewBox="0 0 29.999999 380.00001" | |||||
version="1.1" | |||||
sodipodi:docname="Werner.svg" | |||||
inkscape:version="0.92.2 5c3e80d, 2017-08-06"> | |||||
<metadata | |||||
id="metadata29"> | |||||
<rdf:RDF> | |||||
<cc:Work | |||||
rdf:about=""> | |||||
<dc:format>image/svg+xml</dc:format> | |||||
<dc:type | |||||
rdf:resource="http://purl.org/dc/dcmitype/StillImage" /> | |||||
<dc:title>BlankPanel1</dc:title> | |||||
</cc:Work> | |||||
</rdf:RDF> | |||||
</metadata> | |||||
<defs | |||||
id="defs27"> | |||||
<clipPath | |||||
id="clipPath837" | |||||
clipPathUnits="userSpaceOnUse"> | |||||
<path | |||||
inkscape:connector-curvature="0" | |||||
id="path835" | |||||
d="M 0,842 H 595 V 0 H 0 Z" /> | |||||
</clipPath> | |||||
<clipPath | |||||
id="clipPath13703" | |||||
clipPathUnits="userSpaceOnUse"> | |||||
<path | |||||
inkscape:connector-curvature="0" | |||||
id="path13701" | |||||
d="M 0,1020.448 H 935.433 V 0 H 0 Z" /> | |||||
</clipPath> | |||||
</defs> | |||||
<sodipodi:namedview | |||||
pagecolor="#ffffff" | |||||
bordercolor="#666666" | |||||
borderopacity="1" | |||||
objecttolerance="10" | |||||
gridtolerance="10" | |||||
guidetolerance="10" | |||||
inkscape:pageopacity="0" | |||||
inkscape:pageshadow="2" | |||||
inkscape:window-width="1898" | |||||
inkscape:window-height="1026" | |||||
id="namedview25" | |||||
showgrid="true" | |||||
inkscape:zoom="3.050832" | |||||
inkscape:cx="-76.662245" | |||||
inkscape:cy="263.50152" | |||||
inkscape:window-x="10" | |||||
inkscape:window-y="42" | |||||
inkscape:window-maximized="0" | |||||
inkscape:current-layer="g827" | |||||
showguides="true" | |||||
inkscape:guide-bbox="true" | |||||
inkscape:snap-grids="true" | |||||
inkscape:snap-global="true"> | |||||
<inkscape:grid | |||||
type="xygrid" | |||||
id="grid826" /> | |||||
</sodipodi:namedview> | |||||
<title | |||||
id="title2">BlankPanel1</title> | |||||
<g | |||||
transform="matrix(1.3333333,0,0,-1.3333333,-826.22953,717.78285)" | |||||
inkscape:label="1" | |||||
id="g827" | |||||
style="opacity:1"> | |||||
<g | |||||
id="g831" | |||||
transform="matrix(0.32749997,0,0,0.99903815,416.92274,0.58772246)"> | |||||
<g | |||||
transform="translate(619.08227,-482.18084)" | |||||
inkscape:label="02" | |||||
id="g13693"> | |||||
<path | |||||
inkscape:connector-curvature="0" | |||||
id="path13695" | |||||
style="fill:#091942;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.22436777" | |||||
d="M 0,735.3352 H 68.666843 V 1020.448 H 0 Z" /> | |||||
<path | |||||
style="opacity:1;fill:#e6e6e6;fill-opacity:1;stroke:#000000;stroke-width:0.47412768;stroke-linecap:square;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:0.98999999" | |||||
d="M -0.45300759,190.33385 V 0.445719 H 45.063249 90.579506 V 190.33385 380.22199 H 45.063249 -0.45300759 Z" | |||||
id="path26" | |||||
inkscape:connector-curvature="0" | |||||
transform="matrix(0.75000002,0,0,-0.75000002,0.58989299,1020.518)" /> | |||||
</g> | |||||
</g> | |||||
<g | |||||
inkscape:groupmode="layer" | |||||
id="layer2" | |||||
inkscape:label="Layer 1" | |||||
style="opacity:0" /> | |||||
<rect | |||||
style="opacity:1;fill:#3c3c3c;fill-opacity:1;stroke:none;stroke-width:0.39215845;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0" | |||||
id="rect27" | |||||
width="22.5" | |||||
height="92.313423" | |||||
x="619.67218" | |||||
y="-353.95505" | |||||
transform="scale(1,-1)" | |||||
ry="2.2476418" /> | |||||
<g | |||||
aria-label="Time" | |||||
transform="matrix(1,0,0,-1,-1.6726946e-5,-6)" | |||||
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:13.5px;line-height:125%;font-family:Roboto;-inkscape-font-specification:Roboto;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.75px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" | |||||
id="text829"> | |||||
<path | |||||
d="m 626.03107,-503.05994 h -2.05664 v 5.70411 h -0.83936 v -5.70411 h -2.05225 v -0.69433 h 4.94825 z" | |||||
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:9px;font-family:Roboto;-inkscape-font-specification:'Roboto, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.75px" | |||||
id="path831" | |||||
inkscape:connector-curvature="0" /> | |||||
<path | |||||
d="m 627.74493,-497.35583 h -0.81298 v -4.75489 h 0.81298 z m -0.8789,-6.01612 q 0,-0.19775 0.11865,-0.33398 0.12305,-0.13623 0.36035,-0.13623 0.23731,0 0.36035,0.13623 0.12305,0.13623 0.12305,0.33398 0,0.19776 -0.12305,0.32959 -0.12304,0.13184 -0.36035,0.13184 -0.2373,0 -0.36035,-0.13184 -0.11865,-0.13183 -0.11865,-0.32959 z" | |||||
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:9px;font-family:Roboto;-inkscape-font-specification:'Roboto, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.75px" | |||||
id="path833" | |||||
inkscape:connector-curvature="0" /> | |||||
<path | |||||
d="m 629.80597,-502.11072 0.022,0.52735 q 0.52295,-0.61524 1.41065,-0.61524 0.99756,0 1.35791,0.76465 0.2373,-0.34277 0.61523,-0.55371 0.38233,-0.21094 0.90088,-0.21094 1.56445,0 1.59082,1.65674 v 3.18604 h -0.81299 v -3.1377 q 0,-0.50977 -0.23291,-0.76025 -0.23291,-0.25489 -0.78222,-0.25489 -0.45264,0 -0.75147,0.27246 -0.29883,0.26807 -0.34717,0.7251 v 3.15528 h -0.81738 v -3.11573 q 0,-1.03711 -1.01514,-1.03711 -0.7998,0 -1.09424,0.68116 v 3.47168 h -0.81298 v -4.75489 z" | |||||
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:9px;font-family:Roboto;-inkscape-font-specification:'Roboto, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.75px" | |||||
id="path836" | |||||
inkscape:connector-curvature="0" /> | |||||
<path | |||||
d="m 638.90704,-497.26794 q -0.96679,0 -1.57324,-0.63282 -0.60644,-0.6372 -0.60644,-1.70068 v -0.14941 q 0,-0.70752 0.26806,-1.26123 0.27246,-0.55811 0.75586,-0.87012 0.48779,-0.31641 1.05469,-0.31641 0.92725,0 1.44141,0.61084 0.51416,0.61084 0.51416,1.74902 v 0.33838 h -3.2212 q 0.0176,0.70313 0.4087,1.13819 0.3955,0.43066 1.00195,0.43066 0.43066,0 0.72949,-0.17578 0.29883,-0.17578 0.52295,-0.46582 l 0.49658,0.38672 q -0.59765,0.91846 -1.79297,0.91846 z m -0.10107,-4.2627 q -0.49219,0 -0.82617,0.36035 -0.33399,0.35596 -0.41309,1.00196 h 2.38184 v -0.0615 q -0.0352,-0.61963 -0.33399,-0.95801 -0.29883,-0.34277 -0.80859,-0.34277 z" | |||||
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:9px;font-family:Roboto;-inkscape-font-specification:'Roboto, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.75px" | |||||
id="path838" | |||||
inkscape:connector-curvature="0" /> | |||||
</g> | |||||
<g | |||||
aria-label="Δ" | |||||
transform="matrix(1,0,0,-1,-1.6726946e-5,-15)" | |||||
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:13.5px;line-height:125%;font-family:Sans;-inkscape-font-specification:Sans;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.75px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" | |||||
id="text843"> | |||||
<path | |||||
d="m 630.92218,-477.70374 -2.70264,7.42237 h 5.41187 z m -4.50879,8.52979 3.75733,-9.84155 h 1.50952 l 3.75073,9.84155 z" | |||||
id="path849" | |||||
inkscape:connector-curvature="0" /> | |||||
</g> | |||||
<rect | |||||
ry="2.2476418" | |||||
transform="scale(1,-1)" | |||||
y="-448.33716" | |||||
x="619.67218" | |||||
height="92.313423" | |||||
width="22.49996" | |||||
id="rect4520" | |||||
style="opacity:1;fill:#808080;fill-opacity:1;stroke:none;stroke-width:0.39215806;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0" /> | |||||
</g> | |||||
</svg> |
@@ -1,70 +0,0 @@ | |||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?> | |||||
<svg | |||||
xmlns:dc="http://purl.org/dc/elements/1.1/" | |||||
xmlns:cc="http://creativecommons.org/ns#" | |||||
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" | |||||
xmlns:svg="http://www.w3.org/2000/svg" | |||||
xmlns="http://www.w3.org/2000/svg" | |||||
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" | |||||
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" | |||||
version="1.1" | |||||
width="29" | |||||
height="29" | |||||
viewBox="0 0 29 29" | |||||
id="svg14" | |||||
sodipodi:docname="svg_render_tmp.svg" | |||||
inkscape:version="0.92.2 5c3e80d, 2017-08-06"> | |||||
<metadata | |||||
id="metadata20"> | |||||
<rdf:RDF> | |||||
<cc:Work | |||||
rdf:about=""> | |||||
<dc:format>image/svg+xml</dc:format> | |||||
<dc:type | |||||
rdf:resource="http://purl.org/dc/dcmitype/StillImage" /> | |||||
</cc:Work> | |||||
</rdf:RDF> | |||||
</metadata> | |||||
<defs | |||||
id="defs18" /> | |||||
<sodipodi:namedview | |||||
pagecolor="#ffffff" | |||||
bordercolor="#666666" | |||||
borderopacity="1" | |||||
objecttolerance="10" | |||||
gridtolerance="10" | |||||
guidetolerance="10" | |||||
inkscape:pageopacity="0" | |||||
inkscape:pageshadow="2" | |||||
inkscape:window-width="468" | |||||
inkscape:window-height="449" | |||||
id="namedview16" | |||||
showgrid="false" | |||||
inkscape:zoom="8.137931" | |||||
inkscape:cx="14.5" | |||||
inkscape:cy="14.5" | |||||
inkscape:window-x="0" | |||||
inkscape:window-y="0" | |||||
inkscape:window-maximized="0" | |||||
inkscape:current-layer="svg14" /> | |||||
<path | |||||
style="fill:#333333" | |||||
d="M 28.8,14.5 A 14.3,14.3 0 0 1 14.5,28.8 14.3,14.3 0 0 1 0.19999981,14.5 14.3,14.3 0 0 1 14.5,0.19999981 14.3,14.3 0 0 1 28.8,14.5 Z" | |||||
id="circle2" /> | |||||
<path | |||||
style="fill:#eeeeee" | |||||
d="M 25.4,14.5 A 10.9,10.9 0 0 1 14.5,25.4 10.9,10.9 0 0 1 3.6000004,14.5 10.9,10.9 0 0 1 14.5,3.6000004 10.9,10.9 0 0 1 25.4,14.5 Z" | |||||
id="circle4" /> | |||||
<path | |||||
style="fill:#ffffff" | |||||
d="M 15.8,1.6 A 1.3,1.3 0 0 1 14.5,2.9 1.3,1.3 0 0 1 13.2,1.6 1.3,1.3 0 0 1 14.5,0.30000007 1.3,1.3 0 0 1 15.8,1.6 Z" | |||||
id="circle8" /> | |||||
<path | |||||
style="fill:#ffffff" | |||||
d="M 15.8,1.9 A 1.3,1.3 0 0 1 14.5,3.1999999 1.3,1.3 0 0 1 13.2,1.9 1.3,1.3 0 0 1 14.5,0.60000002 1.3,1.3 0 0 1 15.8,1.9 Z" | |||||
id="circle10" /> | |||||
<path | |||||
style="fill:#ffffff" | |||||
d="M 15.8,2.2 A 1.3,1.3 0 0 1 14.5,3.5 1.3,1.3 0 0 1 13.2,2.2 1.3,1.3 0 0 1 14.5,0.9000001 1.3,1.3 0 0 1 15.8,2.2 Z" | |||||
id="circle12" /> | |||||
</svg> |
@@ -1,163 +0,0 @@ | |||||
#include "aepelzen.hpp" | |||||
#include "dsp/digital.hpp" | |||||
#define NUM_CHANNELS 4 | |||||
#define NUM_STEPS 8 | |||||
struct Dice : Module { | |||||
enum ParamIds { | |||||
RESET_PARAM, | |||||
CHANNEL_STEPS_PARAM, | |||||
CHANNEL_MODE_PARAM = CHANNEL_STEPS_PARAM + NUM_CHANNELS, | |||||
COLUMN1_PARAM = CHANNEL_MODE_PARAM + NUM_CHANNELS, | |||||
COLUMN2_PARAM = COLUMN1_PARAM + NUM_STEPS, | |||||
COLUMN3_PARAM = COLUMN2_PARAM + NUM_STEPS, | |||||
COLUMN4_PARAM = COLUMN3_PARAM + NUM_STEPS, | |||||
NUM_PARAMS = COLUMN4_PARAM + NUM_STEPS | |||||
}; | |||||
enum InputIds { | |||||
CHANNEL_CLOCK_INPUT, | |||||
NUM_INPUTS = CHANNEL_CLOCK_INPUT + NUM_CHANNELS | |||||
}; | |||||
enum OutputIds { | |||||
GATE_OUTPUT, | |||||
NUM_OUTPUTS = GATE_OUTPUT + NUM_CHANNELS | |||||
}; | |||||
enum LightIds { | |||||
STEP_LIGHT, | |||||
NUM_LIGHTS = STEP_LIGHT + NUM_CHANNELS * NUM_STEPS | |||||
}; | |||||
enum PlaybackModes { | |||||
MODE_FORWARD, | |||||
MODE_BACKWARD, | |||||
MODE_ALTERNATING, | |||||
MODE_RANDOM_NEIGHBOUR, | |||||
MODE_RANDOM | |||||
}; | |||||
Dice() : Module(NUM_PARAMS, NUM_INPUTS, NUM_OUTPUTS, NUM_LIGHTS) { | |||||
//initialize RNG | |||||
//randomSeedTime(); | |||||
} | |||||
void step() override; | |||||
SchmittTrigger channelClockTrigger[NUM_CHANNELS]; // for external clock | |||||
SchmittTrigger resetTrigger; | |||||
PulseGenerator gatePulse[NUM_CHANNELS]; | |||||
SchmittTrigger clockTrigger; | |||||
int channel_index[NUM_CHANNELS] = {0}; | |||||
bool direction[NUM_CHANNELS] = {}; | |||||
float ColumnValue[NUM_CHANNELS] = {0}; | |||||
float randomValue; | |||||
}; | |||||
void Dice::step() { | |||||
//normalize to first clock input | |||||
for(int y=1;y<NUM_CHANNELS;y++) { | |||||
if(!inputs[CHANNEL_CLOCK_INPUT + y].active) { | |||||
inputs[CHANNEL_CLOCK_INPUT + y].value = inputs[CHANNEL_CLOCK_INPUT].value; | |||||
} | |||||
} | |||||
for(int y=0;y<NUM_CHANNELS;y++) { | |||||
bool pulse = false; | |||||
bool channelStep = false; | |||||
if (channelClockTrigger[y].process(inputs[CHANNEL_CLOCK_INPUT + y].value)) { | |||||
channelStep = true; | |||||
} | |||||
if (channelStep) { | |||||
int numSteps = clampi(roundf(params[CHANNEL_STEPS_PARAM + y].value), 1, 8); | |||||
int mode = clampi(roundf(params[CHANNEL_MODE_PARAM + y].value),0,5); | |||||
gatePulse[y].trigger(1e-3); | |||||
randomValue = randomf(); | |||||
if (mode == MODE_RANDOM_NEIGHBOUR) { | |||||
mode = (randomf() > 0.5) ? MODE_FORWARD : MODE_BACKWARD; | |||||
} | |||||
switch(mode) { | |||||
case MODE_FORWARD: | |||||
channel_index[y] += 1; | |||||
channel_index[y] = (channel_index[y] >= numSteps) ? 0 : channel_index[y]; | |||||
break; | |||||
case MODE_BACKWARD: | |||||
channel_index[y] -= 1; | |||||
channel_index[y] = (channel_index[y] < 0) ? numSteps - 1 : channel_index[y]; | |||||
break; | |||||
case MODE_ALTERNATING: | |||||
if (direction[y]) { | |||||
channel_index[y] += 1; | |||||
if (channel_index[y] >= numSteps) { | |||||
channel_index[y] = numSteps - 2; | |||||
direction[y] = !direction[y]; | |||||
} | |||||
} | |||||
else { | |||||
channel_index[y] -= 1; | |||||
if (channel_index[y] <= 0) { | |||||
channel_index[y] = 0; | |||||
direction[y] = !direction[y]; | |||||
} | |||||
} | |||||
break; | |||||
case MODE_RANDOM: | |||||
channel_index[y] = rand() % numSteps; | |||||
break; | |||||
} | |||||
} | |||||
pulse = gatePulse[y].process(1.0 / engineGetSampleRate()); | |||||
bool gateOn = (randomValue < (params[COLUMN1_PARAM + channel_index[y] + y * 8].value)) ? 1.0 : 0.0; | |||||
gateOn = gateOn && !pulse; | |||||
outputs[GATE_OUTPUT + y].value = (gateOn) ? 10.0 : 0.0; | |||||
for(int i=0;i<NUM_STEPS;i++) { | |||||
lights[STEP_LIGHT + y*NUM_STEPS + i].value = (i == channel_index[y] ? 1.0 : 0.0); | |||||
} | |||||
} | |||||
// Reset | |||||
if (resetTrigger.process(params[RESET_PARAM].value)) { | |||||
//nextStep = true; | |||||
for (int i=0;i<NUM_CHANNELS;i++) { | |||||
channel_index[i] = 0; | |||||
} | |||||
} | |||||
} | |||||
struct DiceWidget : ModuleWidget { | |||||
DiceWidget(Dice *module); | |||||
}; | |||||
DiceWidget::DiceWidget(Dice *module) : ModuleWidget(module) { | |||||
box.size = Vec(8 * RACK_GRID_WIDTH, RACK_GRID_HEIGHT); | |||||
{ | |||||
SVGPanel *panel = new SVGPanel(); | |||||
panel->box.size = box.size; | |||||
panel->setBackground(SVG::load(assetPlugin(plugin, "res/Dice.svg"))); | |||||
addChild(panel); | |||||
} | |||||
addParam(ParamWidget::create<LEDButton>(Vec(10, 5), module, Dice::RESET_PARAM, 0.0, 1.0, 0.0)); | |||||
for(int y=0;y<NUM_CHANNELS;y++) { | |||||
for(int i=0;i<NUM_STEPS;i++) { | |||||
addParam(ParamWidget::create<Trimpot>(Vec(10 + y*27, 30 + i*28), module, Dice::COLUMN1_PARAM + y *NUM_STEPS + i, 0.0, 1.0, 0.0)); | |||||
addChild(ModuleLightWidget::create<SmallLight<RedLight>>(Vec(16 + y*27, 50 + i*28), module, Dice::STEP_LIGHT + y *NUM_STEPS + i)); | |||||
} | |||||
addParam(ParamWidget::create<Trimpot>(Vec(10 + y*27, 265), module, Dice::CHANNEL_STEPS_PARAM + y, 1.0, 8.0, 8.0)); | |||||
addParam(ParamWidget::create<Trimpot>(Vec(10 + y*27, 290), module, Dice::CHANNEL_MODE_PARAM + y, 0, 5, 0)); | |||||
addInput(Port::create<PJ301MPort>(Vec(7+y*27, 310), Port::INPUT, module, Dice::CHANNEL_CLOCK_INPUT + y)); | |||||
addOutput(Port::create<PJ301MPort>(Vec(7 + y*27, 345), Port::OUTPUT, module, Dice::GATE_OUTPUT + y)); | |||||
} | |||||
} | |||||
Model *modelDice = Model::create<Dice, DiceWidget>("Aepelzens Modules", "Dice", "Probability Sequencer", SEQUENCER_TAG); |
@@ -1,160 +0,0 @@ | |||||
#include "aepelzen.hpp" | |||||
#include "dsp/digital.hpp" | |||||
#include <math.h> | |||||
#define NUM_CHANNELS 4 | |||||
struct Erwin : Module { | |||||
enum ParamIds { | |||||
CHANNEL_TRANSPOSE_PARAM, | |||||
NOTE_PARAM = CHANNEL_TRANSPOSE_PARAM + NUM_CHANNELS, | |||||
NUM_PARAMS = NOTE_PARAM + 12 | |||||
}; | |||||
enum InputIds { | |||||
TRANSPOSE_INPUT, | |||||
SEMI_INPUT, | |||||
IN_INPUT, | |||||
NUM_INPUTS = IN_INPUT + 4 | |||||
}; | |||||
enum OutputIds { | |||||
OUT_OUTPUT, | |||||
NUM_OUTPUTS = OUT_OUTPUT + 4 | |||||
}; | |||||
enum LightIds { | |||||
NOTE_LIGHT, | |||||
NUM_LIGHTS = NOTE_LIGHT + 12 | |||||
}; | |||||
Erwin() : Module( NUM_PARAMS, NUM_INPUTS, NUM_OUTPUTS, NUM_LIGHTS) { reset(); }; | |||||
void step() override; | |||||
json_t* toJson() override; | |||||
void fromJson(json_t *rootJ) override; | |||||
//float ratios[13] = {1.0, 16.0/15, 9.0/8, 6.0/5, 5.0/4, 4.0/3, 7.0/5, 3.0/2, 8.0/5, 5.0/3, 16.0/9, 15.0/8, 2.0}; | |||||
bool noteState[12] = {}; | |||||
int octave; | |||||
int transposeOctave = 0; | |||||
int transposeSemi = 0; | |||||
float freq; | |||||
SchmittTrigger noteTriggers[12]; | |||||
}; | |||||
json_t* Erwin::toJson() { | |||||
json_t *rootJ = json_object(); | |||||
// Note values | |||||
json_t *gatesJ = json_array(); | |||||
for (int i = 0; i < 12; i++) { | |||||
json_t *gateJ = json_boolean(noteState[i]); | |||||
json_array_append_new(gatesJ, gateJ); | |||||
} | |||||
json_object_set_new(rootJ, "notes", gatesJ); | |||||
return rootJ; | |||||
} | |||||
void Erwin::fromJson(json_t *rootJ) { | |||||
// Note values | |||||
json_t *gatesJ = json_object_get(rootJ, "notes"); | |||||
for (int i = 0; i < 12; i++) { | |||||
json_t *gateJ = json_array_get(gatesJ, i); | |||||
noteState[i] = !!json_boolean_value(gateJ); | |||||
} | |||||
} | |||||
void Erwin::step() { | |||||
for(int y=0;y<NUM_CHANNELS;y++) { | |||||
octave = trunc(inputs[IN_INPUT+y].value); | |||||
freq = inputs[IN_INPUT+y].value - octave; | |||||
//limit to 4 octaves | |||||
transposeOctave = clampi((int)round(inputs[TRANSPOSE_INPUT].value / 3.0) + (int)round(params[CHANNEL_TRANSPOSE_PARAM + y].value),-4, 4); | |||||
//limit to 1 octave | |||||
transposeSemi = (int)round(inputs[SEMI_INPUT].value * 1.2); | |||||
int semi = (int)(round(freq * 12)); | |||||
//find last matching note in scale | |||||
int lastValidIndex = 0; | |||||
for(int i=semi;i>=0;i--) { | |||||
if(noteState[i]) { | |||||
lastValidIndex = i; | |||||
break; | |||||
} | |||||
} | |||||
if(transposeSemi) { | |||||
lastValidIndex = (lastValidIndex + transposeSemi); | |||||
} | |||||
outputs[OUT_OUTPUT + y].value = octave + lastValidIndex * 1/12.0 + transposeOctave; | |||||
} | |||||
// Note buttons | |||||
for (int i = 0; i < 12; i++) { | |||||
if (noteTriggers[i].process(params[NOTE_PARAM + i].value)) { | |||||
noteState[i] = !noteState[i]; | |||||
} | |||||
lights[NOTE_LIGHT + i].value = (noteState[i] >= 1.0) ? 0.7 : 0; | |||||
} | |||||
} | |||||
template <typename BASE> | |||||
struct MuteLight : BASE { | |||||
MuteLight() { | |||||
this->box.size = mm2px(Vec(6.0, 6.0)); | |||||
} | |||||
}; | |||||
struct ErwinWidget : ModuleWidget { | |||||
ErwinWidget(Erwin *module); | |||||
}; | |||||
ErwinWidget::ErwinWidget(Erwin *module) : ModuleWidget(module) { | |||||
box.size = Vec(15*8, 380); | |||||
{ | |||||
SVGPanel *panel = new SVGPanel(); | |||||
panel->box.size = box.size; | |||||
panel->setBackground(SVG::load(assetPlugin(plugin,"res/Erwin.svg"))); | |||||
addChild(panel); | |||||
} | |||||
addChild(Widget::create<ScrewSilver>(Vec(15, 0))); | |||||
addChild(Widget::create<ScrewSilver>(Vec(box.size.x-30, 0))); | |||||
addChild(Widget::create<ScrewSilver>(Vec(15, 365))); | |||||
addChild(Widget::create<ScrewSilver>(Vec(box.size.x-30, 365))); | |||||
addInput(Port::create<PJ301MPort>(Vec(22.5, 42), Port::INPUT, module, Erwin::TRANSPOSE_INPUT)); | |||||
addInput(Port::create<PJ301MPort>(Vec(76, 42), Port::INPUT, module, Erwin::SEMI_INPUT)); | |||||
for(int i=0;i<4;i++) { | |||||
addOutput(Port::create<PJ301MPort>(Vec(76, 235 + i*30), Port::OUTPUT, module, Erwin::OUT_OUTPUT + i)); | |||||
addInput(Port::create<PJ301MPort>(Vec(76, 100 +i*30), Port::INPUT, module, Erwin::IN_INPUT + i)); | |||||
} | |||||
addParam(ParamWidget::create<Trimpot>(Vec(16, 90), module, Erwin::CHANNEL_TRANSPOSE_PARAM, -4, 4, 0)); | |||||
addParam(ParamWidget::create<Trimpot>(Vec(38, 90), module, Erwin::CHANNEL_TRANSPOSE_PARAM + 1, -4, 4, 0)); | |||||
addParam(ParamWidget::create<Trimpot>(Vec(16, 117.5), module, Erwin::CHANNEL_TRANSPOSE_PARAM + 2, -4, 4, 0)); | |||||
addParam(ParamWidget::create<Trimpot>(Vec(38, 117.5), module, Erwin::CHANNEL_TRANSPOSE_PARAM + 3, -4, 4, 0)); | |||||
//Note buttons | |||||
int white=0; | |||||
int black = 0; | |||||
for(int i=0; i<12; i++) { | |||||
if (i == 1 || i == 3 || i == 6 || i == 8 || i == 10 ) { | |||||
addParam(ParamWidget::create<LEDBezel>(Vec(10,311.5 - black*30), module, Erwin::NOTE_PARAM + i, 0.0, 1.0, 0.0)); | |||||
addChild(ModuleLightWidget::create<MuteLight<GreenLight>>(Vec(12, 313.5 - black*30), module, Erwin::NOTE_LIGHT+i)); | |||||
black++; | |||||
} | |||||
else { | |||||
if(i == 4) | |||||
black++; | |||||
addParam(ParamWidget::create<LEDBezel>(Vec(35,326.5 - white*30), module, Erwin::NOTE_PARAM + i, 0.0, 1.0, 0.0)); | |||||
addChild(ModuleLightWidget::create<MuteLight<GreenLight>>(Vec(37, 328.5 - white*30), module, Erwin::NOTE_LIGHT+i)); | |||||
white++; | |||||
} | |||||
} | |||||
} | |||||
Model *modelErwin = Model::create<Erwin, ErwinWidget>("Aepelzens Modules", "Erwin", "Erwin", UTILITY_TAG); |
@@ -1,520 +0,0 @@ | |||||
#include "aepelzen.hpp" | |||||
#include "dsp/digital.hpp" | |||||
const int NUM_STEPS = 16; | |||||
const int NUM_CHANNELS = 8; | |||||
const int NUM_GATES = NUM_STEPS * NUM_CHANNELS; | |||||
struct GateSeq : Module { | |||||
enum ParamIds { | |||||
LENGTH_PARAM, | |||||
CLOCK_PARAM, | |||||
RUN_PARAM, | |||||
RESET_PARAM, | |||||
INIT_PARAM, | |||||
COPY_PARAM, | |||||
MERGE_PARAM, | |||||
MERGE_MODE_PARAM, | |||||
PATTERN_SWITCH_MODE_PARAM, | |||||
CHANNEL_PROB_PARAM, | |||||
BANK_PARAM = CHANNEL_PROB_PARAM + NUM_CHANNELS, | |||||
PATTERN_PARAM = BANK_PARAM + 8, | |||||
GATE1_PARAM = PATTERN_PARAM + 8, | |||||
NUM_PARAMS = GATE1_PARAM + NUM_GATES + NUM_CHANNELS | |||||
}; | |||||
enum InputIds { | |||||
CLOCK_INPUT, | |||||
EXT_CLOCK_INPUT, | |||||
RESET_INPUT, | |||||
PATTERN_INPUT, | |||||
CHANNEL_CLOCK_INPUT, | |||||
CHANNEL_PROB_INPUT = CHANNEL_CLOCK_INPUT + NUM_CHANNELS, | |||||
NUM_INPUTS = CHANNEL_PROB_INPUT + NUM_CHANNELS | |||||
}; | |||||
enum OutputIds { | |||||
CLOCK_OUTPUT, | |||||
GATE1_OUTPUT, | |||||
NUM_OUTPUTS = GATE1_OUTPUT + NUM_CHANNELS | |||||
}; | |||||
enum LightIds { | |||||
RUNNING_LIGHT, | |||||
RESET_LIGHT, | |||||
COPY_LIGHT, | |||||
MERGE_LIGHT, | |||||
LENGTH_LIGHT, | |||||
BANK_LIGHTS, | |||||
PATTERN_LIGHTS = BANK_LIGHTS + 8, | |||||
GATE_LIGHTS = PATTERN_LIGHTS + 8, | |||||
NUM_LIGHTS = GATE_LIGHTS + NUM_GATES + NUM_GATES | |||||
}; | |||||
GateSeq() : Module(NUM_PARAMS, NUM_INPUTS, NUM_OUTPUTS, NUM_LIGHTS) {} | |||||
void step() override; | |||||
json_t *toJson() override; | |||||
void fromJson(json_t *rootJ) override; | |||||
void initializePattern(int bank, int pattern); | |||||
void copyPattern(int sourcePattern, int bank, int pattern); | |||||
void processPatternSelection(); | |||||
bool mergePatterns(bool gate, int channel, int index, bool step); | |||||
enum MergeModes { | |||||
MERGE_OR, | |||||
MERGE_AND, | |||||
MERGE_XOR, | |||||
MERGE_NOR, | |||||
MERGE_RAND, | |||||
}; | |||||
int mergeMode = 0; | |||||
struct patternInfo { | |||||
bool gates[NUM_GATES] = {false}; | |||||
int length[NUM_CHANNELS] = { 16, 16, 16, 16, 16, 16, 16, 16}; | |||||
//float prob[NUM_CHANNELS] = { 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0}; | |||||
}; | |||||
patternInfo patterns [64] = {}; | |||||
patternInfo* currentPattern; | |||||
int bank = 0; | |||||
int pattern = 0; | |||||
//source pattern for copying (this uses the actual pattern index 0..64) | |||||
int sourcePattern = 0; | |||||
//source pattern for merging | |||||
int mergePattern = 0; | |||||
SchmittTrigger clockTrigger; // for external clock | |||||
SchmittTrigger channelClockTrigger[NUM_CHANNELS]; // for external clock | |||||
SchmittTrigger runningTrigger; | |||||
SchmittTrigger resetTrigger; | |||||
SchmittTrigger initTrigger; | |||||
SchmittTrigger copyTrigger; | |||||
SchmittTrigger mergeTrigger; | |||||
SchmittTrigger lengthTrigger; | |||||
SchmittTrigger gateTriggers[NUM_GATES]; | |||||
SchmittTrigger bankTriggers[8]; | |||||
SchmittTrigger patternTriggers[8]; | |||||
PulseGenerator gatePulse[NUM_CHANNELS]; | |||||
PulseGenerator clockOutPulse; | |||||
float stepLights[NUM_GATES] = {}; | |||||
int channel_index[NUM_CHANNELS] = {}; | |||||
bool running = true; | |||||
bool copyMode = false; | |||||
bool mergeParam = false; | |||||
bool lengthMode = false; | |||||
float phase = 0.0; | |||||
float prob = 0; | |||||
float rand = 0; | |||||
void reset() override { | |||||
for(int y=0;y<64;y++) { | |||||
for (int i = 0; i < NUM_GATES; i++) { | |||||
patterns[y].gates[i] = false; | |||||
} | |||||
for (int i=0; i<NUM_CHANNELS; i++) { | |||||
patterns[y].length[i] = 16; | |||||
} | |||||
} | |||||
bank = 0; | |||||
pattern = 0; | |||||
} | |||||
void randomize() override { | |||||
for (int i=0; i<NUM_CHANNELS; i++) { | |||||
for (int y=0; y<NUM_STEPS; y++) { | |||||
currentPattern->gates[i*NUM_CHANNELS + y] = (randomf() > 0.5); | |||||
} | |||||
currentPattern->length[i] = (int)(randomf()*15) + 1; | |||||
} | |||||
} | |||||
}; | |||||
void GateSeq::step() { | |||||
float gSampleRate = engineGetSampleRate(); | |||||
//const float lightLambda = 0.075; | |||||
const float lightLambda = 0.05; | |||||
// Run | |||||
if (runningTrigger.process(params[RUN_PARAM].value)) | |||||
running = !running; | |||||
lights[RUNNING_LIGHT].value = running ? 1.0 : 0.0; | |||||
processPatternSelection(); | |||||
bool nextStep = false; | |||||
if(lengthTrigger.process(params[LENGTH_PARAM].value)) { | |||||
lengthMode = !lengthMode; | |||||
} | |||||
lights[LENGTH_LIGHT].value = (lengthMode) ? 1.0 : 0.0; | |||||
if (running) { | |||||
if (inputs[EXT_CLOCK_INPUT].active) { | |||||
// External clock | |||||
if (clockTrigger.process(inputs[EXT_CLOCK_INPUT].value)) { | |||||
nextStep = true; | |||||
} | |||||
} | |||||
else { | |||||
// Internal clock | |||||
float clockTime = powf(2.0, params[CLOCK_PARAM].value + inputs[CLOCK_INPUT].value); | |||||
phase += clockTime / gSampleRate; | |||||
if (phase >= 1.0) { | |||||
phase -= 1.0; | |||||
nextStep = true; | |||||
} | |||||
} | |||||
if(nextStep) | |||||
clockOutPulse.trigger(1e-3); | |||||
bool pulse = false; | |||||
bool channelStep = false; | |||||
for (int y = 0; y < NUM_CHANNELS; y++) { | |||||
float channelProb = clampf(inputs[CHANNEL_PROB_INPUT + y].value /5.0 + params[CHANNEL_PROB_PARAM + y].value, 0.0, 1.0); | |||||
//channel clock overwrite | |||||
channelStep = false; | |||||
if(inputs[CHANNEL_CLOCK_INPUT + y].active) { | |||||
if (channelClockTrigger[y].process(inputs[CHANNEL_CLOCK_INPUT + y].value)) { | |||||
channelStep = true; | |||||
} | |||||
} | |||||
else { | |||||
channelStep = nextStep; | |||||
} | |||||
// Advance step | |||||
if (channelStep) { | |||||
//int numSteps = clampi(roundf(params[CHANNEL_STEPS_PARAM+y].value), 1, NUM_STEPS); | |||||
int numSteps = currentPattern->length[y]; | |||||
//workaround to fix crashes on old saves without pattern support | |||||
if(numSteps == 0) | |||||
numSteps = 16; | |||||
channel_index[y] = (channel_index[y] + 1) % numSteps; | |||||
stepLights[y*NUM_STEPS + channel_index[y]] = 1.0; | |||||
gatePulse[y].trigger(1e-3); | |||||
//only compute new random number for active steps | |||||
if (currentPattern->gates[y*NUM_STEPS + channel_index[y]] && channelProb < 1) { | |||||
prob = randomf(); | |||||
} | |||||
} | |||||
pulse = gatePulse[y].process(1.0 / engineGetSampleRate()); | |||||
bool gateOn = currentPattern->gates[y*NUM_STEPS + channel_index[y]]; | |||||
if(mergeParam) { | |||||
//gateOn = gateOn || patterns[mergePattern].gates[y*NUM_STEPS + channel_index[y]]; | |||||
gateOn = mergePatterns(gateOn, y, channel_index[y], channelStep); | |||||
} | |||||
//probability | |||||
if(prob > channelProb) { | |||||
gateOn = false; | |||||
} | |||||
gateOn = gateOn && !pulse; | |||||
outputs[GATE1_OUTPUT + y].value = (gateOn) ? 10.0 : 0.0; | |||||
} | |||||
} | |||||
else { | |||||
//clear outputs, otherwise it holds it's last value | |||||
for(int y=0;y<NUM_CHANNELS;y++) { | |||||
outputs[GATE1_OUTPUT + y].value = 0; | |||||
} | |||||
} | |||||
// Reset | |||||
if (resetTrigger.process(params[RESET_PARAM].value + inputs[RESET_INPUT].value)) { | |||||
phase = 0.0; | |||||
for (int y = 0; y < NUM_CHANNELS; y++) { | |||||
channel_index[y] = 0; | |||||
} | |||||
nextStep = true; | |||||
lights[RESET_LIGHT].value = 1.0; | |||||
} | |||||
lights[RESET_LIGHT].value -= lights[RESET_LIGHT].value / lightLambda / gSampleRate; | |||||
// Gate buttons | |||||
for (int i = 0; i < NUM_GATES; i++) { | |||||
if (gateTriggers[i].process(params[GATE1_PARAM + i].value)) { | |||||
if(lengthMode) { | |||||
currentPattern->length[i/NUM_STEPS] = (i % NUM_STEPS ) + 1; | |||||
} | |||||
else | |||||
currentPattern->gates[i] = !currentPattern->gates[i]; | |||||
} | |||||
stepLights[i] -= stepLights[i] / lightLambda / gSampleRate; | |||||
lights[GATE_LIGHTS + 2*i].value = (currentPattern->gates[i] >= 1.0) ? 0.7 - stepLights[i] : stepLights[i]; | |||||
lights[GATE_LIGHTS + 2*i + 1].value = ( lengthMode && (i % NUM_STEPS + 1) == currentPattern->length[i/NUM_STEPS]) ? 1.0 : 0.0; | |||||
} | |||||
//clock out | |||||
outputs[CLOCK_OUTPUT].value = clockOutPulse.process(1.0/engineGetSampleRate()) ? 10.0 : 0.0; | |||||
} | |||||
template <typename BASE> | |||||
struct BigLight : BASE { | |||||
BigLight() { | |||||
this->box.size = Vec(17, 17); | |||||
} | |||||
}; | |||||
struct GateSeqWidget : ModuleWidget { | |||||
GateSeqWidget(GateSeq *module); | |||||
}; | |||||
GateSeqWidget::GateSeqWidget(GateSeq *module) : ModuleWidget(module) { | |||||
box.size = Vec(525, 380); | |||||
{ | |||||
SVGPanel *panel = new SVGPanel(); | |||||
panel->box.size = box.size; | |||||
panel->setBackground(SVG::load(assetPlugin(plugin, "res/GateSeq.svg"))); | |||||
addChild(panel); | |||||
} | |||||
addChild(Widget::create<ScrewSilver>(Vec(15, 0))); | |||||
addChild(Widget::create<ScrewSilver>(Vec(box.size.x-30, 0))); | |||||
addChild(Widget::create<ScrewSilver>(Vec(15, 365))); | |||||
addChild(Widget::create<ScrewSilver>(Vec(box.size.x-30, 365))); | |||||
addParam(ParamWidget::create<RoundSmallBlackKnob>(Vec(15, 50), module, GateSeq::CLOCK_PARAM, -2.0, 10.0, 2.0)); | |||||
addParam(ParamWidget::create<LEDBezel>(Vec(65, 55), module, GateSeq::RUN_PARAM, 0.0, 1.0, 0.0)); | |||||
addChild(ModuleLightWidget::create<BigLight<GreenLight>>(Vec(67.5, 57.5), module, GateSeq::RUNNING_LIGHT)); | |||||
addParam(ParamWidget::create<LEDBezel>(Vec(96.5, 55), module, GateSeq::RESET_PARAM, 0.0, 1.0, 0.0)); | |||||
addChild(ModuleLightWidget::create<BigLight<GreenLight>>(Vec(99, 57.5), module, GateSeq::RESET_LIGHT)); | |||||
addInput(Port::create<PJ301MPort>(Vec(32, 99-1), Port::INPUT, module, GateSeq::CLOCK_INPUT)); | |||||
addInput(Port::create<PJ301MPort>(Vec(5, 99-1), Port::INPUT, module, GateSeq::EXT_CLOCK_INPUT)); | |||||
addOutput(Port::create<PJ301MPort>(Vec(63.5, 98), Port::OUTPUT, module, GateSeq::CLOCK_OUTPUT)); | |||||
addInput(Port::create<PJ301MPort>(Vec(95.0, 98), Port::INPUT, module, GateSeq::RESET_INPUT)); | |||||
addInput(Port::create<PJ301MPort>(Vec(133, 98), Port::INPUT, module, GateSeq::PATTERN_INPUT)); | |||||
addParam(ParamWidget::create<LEDBezel>(Vec(175, 55), module, GateSeq::COPY_PARAM , 0.0, 1.0, 0.0)); | |||||
addChild(ModuleLightWidget::create<BigLight<YellowLight>>(Vec(177.5, 57.5), module, GateSeq::COPY_LIGHT)); | |||||
addParam(ParamWidget::create<LEDBezel>(Vec(175, 98), module, GateSeq::INIT_PARAM , 0.0, 1.0, 0.0)); | |||||
addParam(ParamWidget::create<LEDBezel>(Vec(205, 98), module, GateSeq::LENGTH_PARAM , 0.0, 1.0, 0.0)); | |||||
addChild(ModuleLightWidget::create<BigLight<RedLight>>(Vec(207.5, 100.5), module, GateSeq::LENGTH_LIGHT)); | |||||
addParam(ParamWidget::create<CKSS>(Vec(139, 55), module, GateSeq::PATTERN_SWITCH_MODE_PARAM , 0.0, 1.0, 0.0)); | |||||
addParam(ParamWidget::create<LEDBezel>(Vec(465, 55), module, GateSeq::MERGE_PARAM , 0.0, 1.0, 0.0)); | |||||
addChild(ModuleLightWidget::create<BigLight<RedLight>>(Vec(467.5, 57.5), module, GateSeq::MERGE_LIGHT)); | |||||
addParam(ParamWidget::create<RoundSmallBlackKnob>(Vec(463, 90), module, GateSeq::MERGE_MODE_PARAM , 0.0, 5.0, 0.0)); | |||||
//pattern/bank buttons | |||||
for(int i=0;i<8;i++) { | |||||
addParam(ParamWidget::create<LEDBezel>(Vec(252 + i*24, 55), module, GateSeq::BANK_PARAM + i, 0.0, 1.0, 0.0)); | |||||
addChild(ModuleLightWidget::create<BigLight<GreenLight>>(Vec(254.5 + i*24, 57.5), module, GateSeq::BANK_LIGHTS + i)); | |||||
addParam(ParamWidget::create<LEDBezel>(Vec(252 + i*24, 98), module, GateSeq::PATTERN_PARAM + i, 0.0, 1.0, 0.0)); | |||||
addChild(ModuleLightWidget::create<BigLight<GreenLight>>(Vec(254.5 + i*24, 100.5), module, GateSeq::PATTERN_LIGHTS + i)); | |||||
} | |||||
for (int y = 0; y < NUM_CHANNELS; y++) { | |||||
for (int x = 0; x < NUM_STEPS; x++) { | |||||
int i = y*NUM_STEPS+x; | |||||
addParam(ParamWidget::create<LEDBezel>(Vec(62 + x*25, 155+y*25), module, GateSeq::GATE1_PARAM + i, 0.0, 1.0, 0.0)); | |||||
addChild(ModuleLightWidget::create<BigLight<GreenRedLight>>(Vec(62 + x*25 + 2.5, 155+y*25+2.5), module, GateSeq::GATE_LIGHTS + 2*i)); | |||||
} | |||||
addInput(Port::create<PJ301MPort>(Vec(5, 155+y*25 - 1.5), Port::INPUT, module, GateSeq::CHANNEL_CLOCK_INPUT + y)); | |||||
addInput(Port::create<PJ301MPort>(Vec(32, 155+y*25 - 1.5), Port::INPUT, module, GateSeq::CHANNEL_PROB_INPUT + y)); | |||||
addOutput(Port::create<PJ301MPort>(Vec(465, 155+y*25 - 1.5), Port::OUTPUT, module, GateSeq::GATE1_OUTPUT + y)); | |||||
addParam(ParamWidget::create<Trimpot>(Vec(495, 155+y*25 + 1.5), module, GateSeq::CHANNEL_PROB_PARAM + y, 0.0, 1.0, 1.0)); | |||||
} | |||||
} | |||||
void GateSeq::processPatternSelection() { | |||||
if(initTrigger.process(params[INIT_PARAM].value)) | |||||
initializePattern(bank, pattern); | |||||
//copy pattern | |||||
if(copyTrigger.process(params[COPY_PARAM].value)) { | |||||
if(copyMode) | |||||
copyPattern(sourcePattern, bank, pattern); | |||||
else | |||||
sourcePattern = 8*bank + pattern; | |||||
copyMode = (!copyMode); | |||||
} | |||||
lights[COPY_LIGHT].value = (copyMode) ? 1.0 : 0.0; | |||||
//merge Mode | |||||
if(mergeTrigger.process(params[MERGE_PARAM].value)) { | |||||
mergeParam = !mergeParam; | |||||
} | |||||
lights[MERGE_LIGHT].value = (mergeParam) ? 1.0 : 0.0; | |||||
//bank | |||||
for(int i=0;i<8;i++) { | |||||
if(bankTriggers[i].process(params[BANK_PARAM + i].value)) { | |||||
bank = i; | |||||
//Switch to first pattern in bank (TODO: do i really want this?) | |||||
pattern = 0; | |||||
break; | |||||
} | |||||
lights[BANK_LIGHTS + i].value = (bank == i) ? 1.0 : 0.0; | |||||
} | |||||
//pattern | |||||
for(int i=0;i<8;i++) { | |||||
if(inputs[PATTERN_INPUT].active) { | |||||
int in = clampi(trunc(inputs[PATTERN_INPUT].value),0 , 7); | |||||
if (in != pattern && params[PATTERN_SWITCH_MODE_PARAM].value) { | |||||
for(int y=0;y<NUM_CHANNELS;y++) { | |||||
channel_index[y] = -1; | |||||
} | |||||
} | |||||
pattern = in; | |||||
} | |||||
else if(patternTriggers[i].process(params[PATTERN_PARAM + i].value)) { | |||||
if(mergeParam) { | |||||
mergePattern = 8*bank + i; | |||||
} | |||||
else { | |||||
pattern = i; | |||||
//reset index | |||||
if(params[PATTERN_SWITCH_MODE_PARAM].value) { | |||||
for(int y=0;y<NUM_CHANNELS;y++) { | |||||
channel_index[y] = -1; | |||||
} | |||||
} | |||||
} | |||||
break; | |||||
} | |||||
} | |||||
for(int i=0;i<8;i++) { | |||||
lights[PATTERN_LIGHTS + i].value = (pattern == i || (mergeParam && mergePattern == i)) ? 1.0 : 0.0; | |||||
} | |||||
currentPattern = &patterns[8*bank + pattern]; | |||||
} | |||||
/** | |||||
Merge Pattern steps | |||||
@param gate Gate State of the base Pattern | |||||
@param channel | |||||
@param index Position in channel | |||||
@param step true if the index increased in the active cycle (i.e. we have a new step) | |||||
*/ | |||||
bool GateSeq::mergePatterns(bool gate, int channel, int index, bool step) { | |||||
bool out = false; | |||||
mergeMode = params[MERGE_MODE_PARAM].value; | |||||
if(step) | |||||
rand = randomf(); | |||||
switch (mergeMode) { | |||||
case MERGE_OR: { | |||||
out = gate || patterns[mergePattern].gates[channel*NUM_STEPS + index]; | |||||
break; | |||||
} | |||||
case MERGE_AND: { | |||||
out = gate && patterns[mergePattern].gates[channel*NUM_STEPS + index]; | |||||
break; | |||||
} | |||||
case MERGE_XOR: { | |||||
out = gate ^ patterns[mergePattern].gates[channel*NUM_STEPS + index]; | |||||
break; | |||||
} | |||||
case MERGE_NOR: { | |||||
out = !(gate || patterns[mergePattern].gates[channel*NUM_STEPS + index]); | |||||
break; | |||||
} | |||||
case MERGE_RAND: { | |||||
if(rand > 0.5) | |||||
out = gate; | |||||
else | |||||
out = patterns[mergePattern].gates[channel*NUM_STEPS + index]; | |||||
break; | |||||
} | |||||
} | |||||
return out; | |||||
} | |||||
void GateSeq::initializePattern(int bank, int pattern) { | |||||
for(int i=0;i<NUM_GATES;i++) { | |||||
currentPattern->gates[i] = 0; | |||||
} | |||||
for (int i = 0; i<NUM_CHANNELS; i++) { | |||||
currentPattern->length[i] = 16; | |||||
//currentPatternp->rob[i] = 1; | |||||
} | |||||
} | |||||
/** | |||||
Copy a pattern | |||||
@param sourcePattern The Source pattern to be copied | |||||
@param bank The bank of the destination pattern | |||||
@param pattern The pattern of the destination pattern | |||||
*/ | |||||
void GateSeq::copyPattern(int sourcePattern, int bank, int pattern) { | |||||
//currentPattern = &patterns[8*bank + pattern]; | |||||
printf("Copying pattern: %d to bank: %d, pattern:%d\n", sourcePattern, bank, pattern); | |||||
for (int i=0; i<NUM_GATES; i++) { | |||||
patterns[8*bank + pattern].gates[i] = patterns[sourcePattern].gates[i]; | |||||
} | |||||
for(int i=0;i<NUM_CHANNELS;i++) { | |||||
patterns[8*bank + pattern].length[i] = patterns[sourcePattern].length[i]; | |||||
} | |||||
} | |||||
json_t* GateSeq::toJson() { | |||||
json_t *rootJ = json_object(); | |||||
//patterns | |||||
json_t *patternsJ = json_array(); | |||||
json_t *lengthsJ = json_array(); | |||||
for(int y=0;y<64;y++) { | |||||
// Gate values | |||||
json_t *gatesJ = json_array(); | |||||
for (int i = 0; i < NUM_GATES; i++) { | |||||
json_t *gateJ = json_integer((int) patterns[y].gates[i]); | |||||
json_array_append_new(gatesJ, gateJ); | |||||
} | |||||
json_array_append_new(patternsJ, gatesJ); | |||||
//second array for lengths to keep things simple | |||||
json_t *pLengthJ = json_array(); | |||||
for(int i=0;i<NUM_CHANNELS;i++) { | |||||
json_t* lengthJ = json_integer(patterns[y].length[i]); | |||||
json_array_append_new(pLengthJ, lengthJ); | |||||
} | |||||
json_array_append_new(lengthsJ, pLengthJ); | |||||
} | |||||
json_object_set_new(rootJ, "patterns", patternsJ); | |||||
json_object_set_new(rootJ, "lengths", lengthsJ); | |||||
json_t *activePatternJ = json_integer(pattern); | |||||
json_object_set_new(rootJ, "pattern", activePatternJ); | |||||
json_t *activeBankJ = json_integer(bank); | |||||
json_object_set_new(rootJ, "bank", activeBankJ); | |||||
return rootJ; | |||||
} | |||||
void GateSeq::fromJson(json_t *rootJ) { | |||||
json_t *patternsJ = json_object_get(rootJ, "patterns"); | |||||
json_t *lengthsJ = json_object_get(rootJ, "lengths"); | |||||
for(int y=0;y<64;y++) { | |||||
// Gate values | |||||
json_t *gatesJ = json_array_get(patternsJ, y); | |||||
for (int i = 0; i < NUM_GATES; i++) { | |||||
json_t *gateJ = json_array_get(gatesJ, i); | |||||
//patterns[y][i] = json_integer_value(gateJ); | |||||
patterns[y].gates[i] = json_integer_value(gateJ); | |||||
} | |||||
json_t *pLengthsJ = json_array_get(lengthsJ, y); | |||||
for(int i=0;i<NUM_CHANNELS;i++) { | |||||
json_t *lengthJ = json_array_get(pLengthsJ, i); | |||||
patterns[y].length[i] = json_integer_value(lengthJ); | |||||
} | |||||
} | |||||
json_t * patternJ = json_object_get(rootJ, "pattern"); | |||||
pattern = json_integer_value(patternJ); | |||||
json_t * bankJ = json_object_get(rootJ, "bank"); | |||||
bank = json_integer_value(bankJ); | |||||
currentPattern = &patterns[8*bank + pattern]; | |||||
} | |||||
Model *modelGateSeq = Model::create<GateSeq, GateSeqWidget>("Aepelzens Modules", "GateSEQ", "Gate Sequencer", SEQUENCER_TAG); |
@@ -1,292 +0,0 @@ | |||||
#include "aepelzen.hpp" | |||||
#include "dsp/digital.hpp" | |||||
#define NUM_CHANNELS 4 | |||||
struct QuadSeq : Module { | |||||
enum ParamIds { | |||||
CLOCK_PARAM, | |||||
RUN_PARAM, | |||||
RESET_PARAM, | |||||
CHANNEL_STEPS_PARAM, | |||||
CHANNEL_RANGE_PARAM = CHANNEL_STEPS_PARAM + NUM_CHANNELS, | |||||
CHANNEL_MODE_PARAM = CHANNEL_RANGE_PARAM + NUM_CHANNELS, | |||||
ROW1_PARAM = CHANNEL_MODE_PARAM + NUM_CHANNELS, | |||||
ROW2_PARAM = ROW1_PARAM + 8, | |||||
ROW3_PARAM = ROW2_PARAM + 8, | |||||
ROW4_PARAM = ROW3_PARAM + 8, | |||||
NUM_PARAMS = ROW4_PARAM + 8 | |||||
}; | |||||
enum InputIds { | |||||
CLOCK_INPUT, | |||||
EXT_CLOCK_INPUT, | |||||
RESET_INPUT, | |||||
CHANNEL_CLOCK_INPUT, | |||||
NUM_INPUTS = CHANNEL_CLOCK_INPUT + NUM_CHANNELS | |||||
}; | |||||
enum OutputIds { | |||||
ROW1_OUTPUT, | |||||
NUM_OUTPUTS = ROW1_OUTPUT + NUM_CHANNELS | |||||
}; | |||||
enum LightIds { | |||||
RUNNING_LIGHT, | |||||
RESET_LIGHT, | |||||
CHANNEL_LIGHTS, | |||||
NUM_LIGHTS = CHANNEL_LIGHTS + 8 * NUM_CHANNELS | |||||
}; | |||||
enum PlaybackModes { | |||||
MODE_FORWARD, | |||||
MODE_BACKWARD, | |||||
MODE_ALTERNATING, | |||||
MODE_RANDOM_NEIGHBOUR, | |||||
MODE_RANDOM | |||||
}; | |||||
bool running = true; | |||||
SchmittTrigger clockTrigger; // for external clock | |||||
SchmittTrigger channelClockTrigger[NUM_CHANNELS]; // for external clock | |||||
// For buttons | |||||
SchmittTrigger runningTrigger; | |||||
SchmittTrigger resetTrigger; | |||||
float phase = 0.0; | |||||
int index = 0; | |||||
float resetLight = 0.0; | |||||
float stepLights[NUM_CHANNELS][8] = {}; | |||||
enum GateMode { | |||||
TRIGGER, | |||||
RETRIGGER, | |||||
CONTINUOUS, | |||||
}; | |||||
GateMode gateMode = TRIGGER; | |||||
PulseGenerator gatePulse; | |||||
int channel_index[NUM_CHANNELS] = {}; | |||||
float rowValue[NUM_CHANNELS] = {}; | |||||
//playback direction: true for forward, false for backward | |||||
bool direction[NUM_CHANNELS] = {}; | |||||
QuadSeq() : Module(NUM_PARAMS, NUM_INPUTS, NUM_OUTPUTS, NUM_LIGHTS) { | |||||
reset(); | |||||
} | |||||
void step() override; | |||||
json_t *toJson() override { | |||||
json_t *rootJ = json_object(); | |||||
// running | |||||
json_object_set_new(rootJ, "running", json_boolean(running)); | |||||
// gates | |||||
// json_t *gatesJ = json_array(); | |||||
// for (int i = 0; i < 8; i++) { | |||||
// json_t *gateJ = json_integer((int) gateState[i]); | |||||
// json_array_append_new(gatesJ, gateJ); | |||||
// } | |||||
// json_object_set_new(rootJ, "gates", gatesJ); | |||||
// // gateMode | |||||
// json_t *gateModeJ = json_integer((int) gateMode); | |||||
// json_object_set_new(rootJ, "gateMode", gateModeJ); | |||||
return rootJ; | |||||
} | |||||
void fromJson(json_t *rootJ) override { | |||||
// running | |||||
json_t *runningJ = json_object_get(rootJ, "running"); | |||||
if (runningJ) | |||||
running = json_is_true(runningJ); | |||||
// gates | |||||
// json_t *gatesJ = json_object_get(rootJ, "gates"); | |||||
// if (gatesJ) { | |||||
// for (int i = 0; i < 8; i++) { | |||||
// json_t *gateJ = json_array_get(gatesJ, i); | |||||
// if (gateJ) | |||||
// gateState[i] = !!json_integer_value(gateJ); | |||||
// } | |||||
// } | |||||
// // gateMode | |||||
// json_t *gateModeJ = json_object_get(rootJ, "gateMode"); | |||||
// if (gateModeJ) | |||||
// gateMode = (GateMode)json_integer_value(gateModeJ); | |||||
} | |||||
void reset() override { | |||||
for(int i=0;i<NUM_CHANNELS;i++) { | |||||
direction[i] = true; | |||||
channel_index[i] = 0; | |||||
} | |||||
} | |||||
void randomize() override { | |||||
} | |||||
}; | |||||
void QuadSeq::step() { | |||||
const float lightLambda = 0.075; | |||||
// Run | |||||
if (runningTrigger.process(params[RUN_PARAM].value)) { | |||||
running = !running; | |||||
} | |||||
lights[RUNNING_LIGHT].value = running ? 1.0 : 0.0; | |||||
bool nextStep = false; | |||||
if (running) { | |||||
if (inputs[EXT_CLOCK_INPUT].active) { | |||||
// External clock | |||||
if (clockTrigger.process(inputs[EXT_CLOCK_INPUT].value)) { | |||||
phase = 0.0; | |||||
nextStep = true; | |||||
} | |||||
} | |||||
else { | |||||
// Internal clock | |||||
float clockTime = powf(2.0, params[CLOCK_PARAM].value + inputs[CLOCK_INPUT].value); | |||||
phase += clockTime / engineGetSampleRate(); | |||||
if (phase >= 1.0) { | |||||
phase -= 1.0; | |||||
nextStep = true; | |||||
} | |||||
} | |||||
} | |||||
// Reset | |||||
if (resetTrigger.process(params[RESET_PARAM].value + inputs[RESET_INPUT].value)) { | |||||
phase = 0.0; | |||||
//index = 8; | |||||
nextStep = true; | |||||
resetLight = 1.0; | |||||
for (int i=0;i<NUM_CHANNELS;i++) { | |||||
channel_index[i] = -1; | |||||
} | |||||
} | |||||
bool channelStep = false; | |||||
for (int y = 0; y < NUM_CHANNELS; y++) { | |||||
//channel clock overwrite | |||||
channelStep = false; | |||||
if(inputs[CHANNEL_CLOCK_INPUT + y].active) { | |||||
if (channelClockTrigger[y].process(inputs[CHANNEL_CLOCK_INPUT + y].value)) { | |||||
channelStep = true; | |||||
} | |||||
} | |||||
else { | |||||
channelStep = nextStep; | |||||
} | |||||
// Advance step | |||||
if (channelStep) { | |||||
int numSteps = clampi(roundf(params[CHANNEL_STEPS_PARAM + y].value), 1, 8); | |||||
int mode = clampi(roundf(params[CHANNEL_MODE_PARAM + y].value),0,5); | |||||
if (mode == MODE_RANDOM_NEIGHBOUR) { | |||||
mode = (randomf() > 0.5) ? MODE_FORWARD : MODE_BACKWARD; | |||||
} | |||||
switch(mode) { | |||||
case MODE_FORWARD: | |||||
channel_index[y] += 1; | |||||
channel_index[y] = (channel_index[y] >= numSteps) ? 0 : channel_index[y]; | |||||
break; | |||||
case MODE_BACKWARD: | |||||
channel_index[y] -= 1; | |||||
channel_index[y] = (channel_index[y] < 0) ? numSteps - 1 : channel_index[y]; | |||||
break; | |||||
case MODE_ALTERNATING: | |||||
if (direction[y]) { | |||||
channel_index[y] += 1; | |||||
if (channel_index[y] >= numSteps) { | |||||
channel_index[y] = numSteps - 2; | |||||
direction[y] = !direction[y]; | |||||
} | |||||
} | |||||
else { | |||||
channel_index[y] -= 1; | |||||
if (channel_index[y] <= 0) { | |||||
channel_index[y] = 0; | |||||
direction[y] = !direction[y]; | |||||
} | |||||
} | |||||
break; | |||||
case MODE_RANDOM: | |||||
//channel_index[y] = round(randomf() * (numSteps - 1)); | |||||
channel_index[y] = rand() % numSteps; | |||||
break; | |||||
} | |||||
stepLights[y][channel_index[y]] = 1.0; | |||||
rowValue[y] = (params[ROW1_PARAM + channel_index[y] + y * 8].value) * params[CHANNEL_RANGE_PARAM + y].value; | |||||
// Outputs | |||||
outputs[ROW1_OUTPUT + y].value = rowValue[y]; | |||||
} | |||||
// steplights | |||||
for (int i = 0; i < 8; i++) { | |||||
//stepLights[y][i] -= stepLights[y][i] / lightLambda / engineGetSampleRate(); | |||||
stepLights[y][i] = (i == channel_index[y]) ? 1.0 : 0.0; | |||||
lights[CHANNEL_LIGHTS + i + 8*y].value = stepLights[y][i]; | |||||
} | |||||
} | |||||
resetLight -= resetLight / lightLambda / engineGetSampleRate(); | |||||
lights[RESET_LIGHT].value = resetLight; | |||||
} | |||||
struct QuadSeqWidget : ModuleWidget { | |||||
QuadSeqWidget(QuadSeq *module); | |||||
}; | |||||
QuadSeqWidget::QuadSeqWidget(QuadSeq *module) : ModuleWidget(module) { | |||||
box.size = Vec(15*22, 380); | |||||
{ | |||||
SVGPanel *panel = new SVGPanel(); | |||||
panel->box.size = box.size; | |||||
panel->setBackground(SVG::load(assetPlugin(plugin, "res/QuadSeq.svg"))); | |||||
addChild(panel); | |||||
} | |||||
// addChild(Widget::create<ScrewSilver>(Vec(5, 0))); | |||||
// addChild(Widget::create<ScrewSilver>(Vec(box.size.x-20, 0))); | |||||
// addChild(Widget::create<ScrewSilver>(Vec(5, 365))); | |||||
// addChild(Widget::create<ScrewSilver>(Vec(box.size.x-20, 365))); | |||||
//original 56 | |||||
addParam(ParamWidget::create<RoundSmallBlackKnob>(Vec(56, 35), module, QuadSeq::CLOCK_PARAM, -2.0, 6.0, 2.0)); | |||||
addParam(ParamWidget::create<LEDButton>(Vec(60, 82), module, QuadSeq::RUN_PARAM, 0.0, 1.0, 0.0)); | |||||
addChild(ModuleLightWidget::create<MediumLight<GreenLight>>(Vec(64.4, 86.4), module, QuadSeq::RUNNING_LIGHT)); | |||||
addParam(ParamWidget::create<LEDButton>(Vec(60, 120), module, QuadSeq::RESET_PARAM, 0.0, 1.0, 0.0)); | |||||
addChild(ModuleLightWidget::create<MediumLight<GreenLight>>(Vec(64.4, 124.4), module, QuadSeq::RESET_LIGHT)); | |||||
addInput(Port::create<PJ301MPort>(Vec(20, 36), Port::INPUT, module, QuadSeq::CLOCK_INPUT)); | |||||
addInput(Port::create<PJ301MPort>(Vec(20, 79), Port::INPUT, module, QuadSeq::EXT_CLOCK_INPUT)); | |||||
addInput(Port::create<PJ301MPort>(Vec(20, 117), Port::INPUT, module, QuadSeq::RESET_INPUT)); | |||||
for (int i=0;i<NUM_CHANNELS;i++) { | |||||
//addParam(ParamWidget::create<RoundSmallBlackKnob>(Vec(135 + i*48, 56), module, QuadSeq::CHANNEL_STEPS_PARAM + i, 1.0, 8.0, 8.0)); | |||||
addParam(ParamWidget::create<RoundSmallBlackKnob>(Vec(105 + i*55, 50), module, QuadSeq::CHANNEL_STEPS_PARAM + i, 1.0, 8.0, 8.0)); | |||||
addParam(ParamWidget::create<Trimpot>(Vec(98 + i*55, 105), module, QuadSeq::CHANNEL_RANGE_PARAM + i, 0.0, 1.0, 1.0)); | |||||
addParam(ParamWidget::create<Trimpot>(Vec(120 + i*55, 105), module, QuadSeq::CHANNEL_MODE_PARAM + i, 0, 5, 0)); | |||||
addInput(Port::create<PJ301MPort>(Vec(18 + i*38, 350), Port::INPUT, module, QuadSeq::CHANNEL_CLOCK_INPUT + i)); | |||||
addOutput(Port::create<PJ301MPort>(Vec(172 + i*38, 350), Port::OUTPUT, module, QuadSeq::ROW1_OUTPUT + i)); | |||||
for (int y = 0; y < 8; y++) { | |||||
//addParam(ParamWidget::create<RoundSmallBlackKnob>(Vec(18 + y*38 ,175 + i*41), module, QuadSeq::ROW1_PARAM + y + i*8, 0.0, 10.0, 0.0)); | |||||
addParam(ParamWidget::create<Knob29>(Vec(18 + y*38 ,170 + i*41), module, QuadSeq::ROW1_PARAM + y + i*8, 0.0, 10.0, 0.0)); | |||||
addChild(ModuleLightWidget::create<SmallLight<RedLight>>(Vec(26.4 + y*38, 200 + i*41), module, QuadSeq::CHANNEL_LIGHTS + y + i*8)); | |||||
} | |||||
} | |||||
} | |||||
Model *modelQuadSeq = Model::create<QuadSeq, QuadSeqWidget>("Aepelzens Modules", "QuadSeq", "Quad Sequencer", SEQUENCER_TAG); |
@@ -1,103 +0,0 @@ | |||||
#include "aepelzen.hpp" | |||||
#include "dsp/digital.hpp" | |||||
struct Walker : Module | |||||
{ | |||||
enum ParamIds | |||||
{ | |||||
STEP_PARAM, | |||||
STEP_ATT_PARAM, | |||||
SYM_PARAM, | |||||
RANGE_PARAM, | |||||
RANGE_ATT_PARAM, | |||||
RANGE_MODE_PARAM, | |||||
NUM_PARAMS | |||||
}; | |||||
enum InputIds | |||||
{ | |||||
CLOCK_INPUT, | |||||
STEP_INPUT, | |||||
RANGE_INPUT, | |||||
NUM_INPUTS | |||||
}; | |||||
enum OutputIds | |||||
{ | |||||
CV_OUTPUT, | |||||
NUM_OUTPUTS | |||||
}; | |||||
enum LightIds | |||||
{ | |||||
NUM_LIGHTS | |||||
}; | |||||
void step() override; | |||||
Walker() : Module(NUM_PARAMS, NUM_INPUTS, NUM_OUTPUTS, NUM_LIGHTS) { | |||||
} | |||||
void reset() override {} | |||||
SchmittTrigger clockTrigger; | |||||
float stepsize, range, sym, cvout; | |||||
int mode = 1; | |||||
}; | |||||
void Walker::step() | |||||
{ | |||||
stepsize = clampf(params[STEP_PARAM].value + inputs[STEP_INPUT].value/5.0 * params[STEP_ATT_PARAM].value, 0.0, 1.0); | |||||
range = clampf(params[RANGE_PARAM].value + inputs[RANGE_INPUT].value * params[RANGE_ATT_PARAM].value, 0.0, 5.0); | |||||
mode = (int)params[RANGE_MODE_PARAM].value; | |||||
if( clockTrigger.process(inputs[CLOCK_INPUT].value) ) { | |||||
float rand = randomf(); | |||||
cvout += (rand > 0.5 - params[SYM_PARAM].value / 2.0) ? + stepsize : -stepsize; | |||||
if(cvout > range || cvout < -range) { | |||||
switch (mode) { | |||||
case 1: | |||||
cvout = clampf(cvout, -range, range); | |||||
break; | |||||
case 2: | |||||
cvout = 0; | |||||
break; | |||||
case 3: | |||||
cvout = randomf() * range/2; | |||||
if (randomf() < 0.5 - params[SYM_PARAM].value / 2.0) | |||||
cvout = -cvout; | |||||
break; | |||||
} | |||||
} | |||||
} | |||||
outputs[CV_OUTPUT].value = cvout; | |||||
return; | |||||
} | |||||
struct WalkerWidget : ModuleWidget | |||||
{ | |||||
SVGPanel *panel; | |||||
WalkerWidget(Walker *module); | |||||
}; | |||||
WalkerWidget::WalkerWidget(Walker *module) : ModuleWidget(module) | |||||
{ | |||||
box.size = Vec(4 * 15, RACK_GRID_HEIGHT); | |||||
panel = new SVGPanel(); | |||||
panel->box.size = box.size; | |||||
panel->setBackground(SVG::load(assetPlugin(plugin, "res/Walker.svg"))); | |||||
addChild(panel); | |||||
addParam(ParamWidget::create<RoundSmallBlackKnob>(Vec(16, 40), module, Walker::STEP_PARAM, 0.0, 1.0, 0.1)); | |||||
addParam(ParamWidget::create<Trimpot>(Vec(21.5, 80), module, Walker::STEP_ATT_PARAM, -1.0, 1.0, 0)); | |||||
addParam(ParamWidget::create<RoundSmallBlackKnob>(Vec(16, 110), module, Walker::RANGE_PARAM, 0, 5.0, 2.0)); | |||||
addParam(ParamWidget::create<Trimpot>(Vec(21.5, 150), module, Walker::RANGE_ATT_PARAM, -1.0, 1.0, 0.0)); | |||||
addParam(ParamWidget::create<BefacoSwitch>(Vec(16, 172.5), module, Walker::RANGE_MODE_PARAM, 1, 3, 1)); | |||||
addParam(ParamWidget::create<RoundSmallBlackKnob>(Vec(16, 210), module, Walker::SYM_PARAM, -1.0, 1.0, 0)); | |||||
addInput(Port::create<PJ301MPort>(Vec(3, 320), Port::INPUT, module, Walker::CLOCK_INPUT));; | |||||
addInput(Port::create<PJ301MPort>(Vec(3, 276), Port::INPUT, module, Walker::STEP_INPUT));; | |||||
addInput(Port::create<PJ301MPort>(Vec(30, 276), Port::INPUT, module, Walker::RANGE_INPUT));; | |||||
addOutput(Port::create<PJ301MPort>(Vec(30,320), Port::OUTPUT, module, Walker::CV_OUTPUT)); | |||||
} | |||||
Model *modelWalker = Model::create<Walker, WalkerWidget>("Aepelzens Modules", "Walker", "Random Walk", UTILITY_TAG, RANDOM_TAG); |
@@ -1,76 +0,0 @@ | |||||
#include "aepelzen.hpp" | |||||
#include "dsp/digital.hpp" | |||||
#define NUM_CHANNELS 4 | |||||
struct Werner : Module { | |||||
enum ParamIds { | |||||
TIME_PARAM, | |||||
DELTA_PARAM, | |||||
NUM_PARAMS | |||||
}; | |||||
enum InputIds { | |||||
CV_INPUT, | |||||
NUM_INPUTS = NUM_CHANNELS | |||||
}; | |||||
enum OutputIds { | |||||
GATE_OUTPUT, | |||||
NUM_OUTPUTS = NUM_CHANNELS | |||||
}; | |||||
enum LightIds { | |||||
NUM_LIGHTS | |||||
}; | |||||
Werner() : Module(NUM_PARAMS, NUM_INPUTS, NUM_OUTPUTS, NUM_LIGHTS) {} | |||||
void step() override; | |||||
PulseGenerator gatePulse[NUM_CHANNELS]; | |||||
float lastValue[NUM_CHANNELS]; | |||||
int res = 16; | |||||
float minDelta = 0; | |||||
int frame = 0; | |||||
}; | |||||
void Werner::step() { | |||||
//max time is about 100ms at 44kHz | |||||
res = (int)clamp(params[TIME_PARAM].value * 4400.0f, 16.0f, 4400.0f); | |||||
minDelta = params[DELTA_PARAM].value * 2.0f; | |||||
if(++frame > res) { | |||||
for(int i=0; i<NUM_CHANNELS;i++) { | |||||
float value = inputs[CV_INPUT + i].value; | |||||
if(abs(value - lastValue[i]) > minDelta) { | |||||
gatePulse[i].trigger(0.01); | |||||
} | |||||
lastValue[i] = value; | |||||
} | |||||
frame = 0; | |||||
} | |||||
for(int i=0; i<NUM_CHANNELS;i++) { | |||||
outputs[GATE_OUTPUT + i].value = gatePulse[i].process(1.0 / engineGetSampleRate()) ? 10.0 : 0.0; | |||||
} | |||||
} | |||||
struct WernerWidget : ModuleWidget | |||||
{ | |||||
WernerWidget(Werner *module); | |||||
}; | |||||
WernerWidget::WernerWidget(Werner *module) : ModuleWidget(module) { | |||||
setPanel(SVG::load(assetPlugin(plugin, "res/Werner.svg"))); | |||||
addParam(ParamWidget::create<Trimpot>(Vec(6, 30), module, Werner::TIME_PARAM, 0.0, 1.0, 0.0)); | |||||
addParam(ParamWidget::create<Trimpot>(Vec(6, 75), module, Werner::DELTA_PARAM, 0.0, 1.0, 0.0)); | |||||
for(int i=0;i<NUM_CHANNELS;i++) { | |||||
addInput(Port::create<PJ301MPort>(Vec(3, 125 + i*30), Port::INPUT, module, Werner::CV_INPUT + i)); | |||||
addOutput(Port::create<PJ301MPort>(Vec(3, 250 + i*30), Port::OUTPUT, module, Werner::GATE_OUTPUT + i)); | |||||
} | |||||
} | |||||
Model *modelWerner = Model::create<Werner, WernerWidget>("Aepelzens Modules", "Werner", "CV-to-Trigger", UTILITY_TAG); |
@@ -1,19 +0,0 @@ | |||||
#include "aepelzen.hpp" | |||||
#include <math.h> | |||||
Plugin *plugin; | |||||
void init(rack::Plugin *p) { | |||||
plugin = p; | |||||
plugin->slug = TOSTRING(SLUG); | |||||
p->version = TOSTRING(VERSION); | |||||
p->addModel(modelQuadSeq); | |||||
p->addModel(modelGateSeq); | |||||
p->addModel(modelDice); | |||||
p->addModel(modelBurst); | |||||
p->addModel(modelFolder); | |||||
p->addModel(modelWalker); | |||||
p->addModel(modelErwin); | |||||
p->addModel(modelWerner); | |||||
} |
@@ -1,21 +0,0 @@ | |||||
#include "rack.hpp" | |||||
using namespace rack; | |||||
extern Plugin *plugin; | |||||
struct Knob29 : RoundKnob { | |||||
Knob29() { | |||||
setSVG(SVG::load(assetPlugin(plugin, "res/knob_29px.svg"))); | |||||
box.size = Vec(29, 29); | |||||
} | |||||
}; | |||||
extern Model *modelQuadSeq; | |||||
extern Model *modelGateSeq; | |||||
extern Model *modelDice; | |||||
extern Model *modelBurst; | |||||
extern Model *modelFolder; | |||||
extern Model *modelWalker; | |||||
extern Model *modelErwin; | |||||
extern Model *modelWerner; |
@@ -1,253 +0,0 @@ | |||||
#include "aepelzen.hpp" | |||||
#include "dsp/digital.hpp" | |||||
#include <math.h> | |||||
#define MAX_REPS 8 | |||||
#define MAX_TIME 1 | |||||
struct Burst : Module | |||||
{ | |||||
enum ParamIds | |||||
{ | |||||
BUTTON_PARAM, | |||||
TIME_PARAM, | |||||
REP_PARAM, | |||||
ACCEL_PARAM, | |||||
JITTER_PARAM, | |||||
CV_MODE_PARAM, | |||||
GATE_MODE_PARAM, | |||||
REP_ATT_PARAM, | |||||
TIME_ATT_PARAM, | |||||
NUM_PARAMS = TIME_ATT_PARAM | |||||
}; | |||||
enum InputIds | |||||
{ | |||||
GATE_INPUT, | |||||
CLOCK_INPUT, | |||||
REP_INPUT, | |||||
TIME_INPUT, | |||||
NUM_INPUTS = TIME_INPUT | |||||
}; | |||||
enum OutputIds | |||||
{ | |||||
GATE_OUTPUT, | |||||
EOC_OUTPUT, | |||||
CV_OUTPUT, | |||||
NUM_OUTPUTS = CV_OUTPUT | |||||
}; | |||||
enum LightIds | |||||
{ | |||||
NUM_LIGHTS | |||||
}; | |||||
enum CvModes | |||||
{ | |||||
CV_UP, | |||||
CV_DOWN, | |||||
CV_MODE3, | |||||
CV_MODE4, | |||||
CV_MODE_RANDOMP, | |||||
CV_MODE_RANDOMN, | |||||
CV_MODE_RANDOM, | |||||
}; | |||||
const float euler = exp(1); | |||||
float timeParam = 0; | |||||
float clockedTimeParam = 0; | |||||
float pulseParam = 4; | |||||
float timer = 0; | |||||
float seconds = 0; | |||||
int pulseCount = 0; | |||||
int pulses = 4; | |||||
float delta = 0; | |||||
float randomcv = 0; | |||||
float cvOut = 0; | |||||
SchmittTrigger m_buttonTrigger; | |||||
SchmittTrigger gateTrigger;; | |||||
SchmittTrigger clockTrigger; | |||||
PulseGenerator outPulse; | |||||
PulseGenerator eocPulse; | |||||
//toggle for every received clock tick | |||||
float clockTimer = 0; | |||||
float lastClockTime = 0; | |||||
float gateOutLength = 0.01; | |||||
void step() override; | |||||
Burst() : Module(NUM_PARAMS, NUM_INPUTS, NUM_OUTPUTS, NUM_LIGHTS) { | |||||
reset(); | |||||
} | |||||
void reset() override | |||||
{ | |||||
onSampleRateChange(); | |||||
} | |||||
void onSampleRateChange() override {delta = 1.0/engineGetSampleRate();} | |||||
void randomize() override {} | |||||
}; | |||||
void Burst::step() | |||||
{ | |||||
//ModuleWidget::step(); | |||||
float schmittValue = gateTrigger.process(inputs[GATE_INPUT].value); | |||||
//seconds = params[TIME_PARAM].value + (inputs[TIME_INPUT].value / 20.0); | |||||
float accel = params[ACCEL_PARAM].value; | |||||
float jitter = params[JITTER_PARAM].value; | |||||
float randomDelta = 0; | |||||
timeParam = clampf(params[TIME_PARAM].value + (params[TIME_ATT_PARAM].value * inputs[TIME_INPUT].value / 10.0 * MAX_TIME),0.0, MAX_TIME); | |||||
pulseParam = clampf(params[REP_PARAM].value + (inputs[REP_INPUT].value * params[REP_ATT_PARAM].value /10.0 * MAX_REPS), 0.0, MAX_REPS); | |||||
//exponential scaling for timeparam | |||||
timeParam = (exp(timeParam) - 1)/(euler - 1); | |||||
if (inputs[CLOCK_INPUT].active) { | |||||
clockTimer += delta; | |||||
if( clockTrigger.process(inputs[CLOCK_INPUT].value) ) { | |||||
timeParam = params[TIME_PARAM].value; | |||||
int mult = (int)(timeParam*8 - 4); | |||||
//smooth clock (over 8 pulses) to reduce sensitivity | |||||
// float clockDelta = clockTimer - lastClockTime; | |||||
// clockTimer -= clockTimer - (clockDelta/8); | |||||
lastClockTime = clockTimer; | |||||
timeParam = clockTimer * pow(2, mult); | |||||
clockedTimeParam = timeParam; | |||||
clockTimer = 0; | |||||
} | |||||
timeParam = clockedTimeParam; | |||||
} | |||||
if( timer > seconds && pulseCount < pulses ) { | |||||
pulseCount ++; | |||||
timer = 0.0; | |||||
seconds = timeParam; | |||||
if(accel > 0) { | |||||
seconds = timeParam/pow(accel,pulseCount); | |||||
} | |||||
if(jitter > 0) { | |||||
randomDelta = randomf() * jitter * seconds; | |||||
if (randomf() > 0.5) { | |||||
seconds = seconds + randomDelta; | |||||
} | |||||
else { | |||||
seconds = seconds - randomDelta; | |||||
} | |||||
} | |||||
if (pulseCount == pulses) { | |||||
eocPulse.trigger(0.01); | |||||
} | |||||
gateOutLength = (params[GATE_MODE_PARAM].value) ? 0.01 : seconds/2; | |||||
outPulse.trigger(gateOutLength); | |||||
randomcv = randomf(); | |||||
//cv | |||||
float cvDelta = 5.0/pulses; | |||||
int mode = roundf(params[CV_MODE_PARAM].value); | |||||
switch (mode) { | |||||
case CV_UP: | |||||
cvOut = pulseCount * cvDelta; | |||||
break; | |||||
case CV_DOWN: | |||||
cvOut = pulseCount * cvDelta * (-1); | |||||
break; | |||||
case CV_MODE3: | |||||
cvOut = trunc((pulseCount + 1)/2) * cvDelta; | |||||
if(pulseCount % 2 == 1) { | |||||
cvOut *= -1; | |||||
} | |||||
break; | |||||
case CV_MODE4: | |||||
cvOut = pulseCount * cvDelta; | |||||
if(pulseCount %2 == 1) { | |||||
cvOut *= -1; | |||||
} | |||||
break; | |||||
case CV_MODE_RANDOMP: | |||||
cvOut = randomcv *5.0; | |||||
break; | |||||
case CV_MODE_RANDOMN: | |||||
cvOut = randomcv * (-5.0); | |||||
break; | |||||
case CV_MODE_RANDOM: | |||||
cvOut = randomcv *10 - 5; | |||||
break; | |||||
} | |||||
} | |||||
if (schmittValue || m_buttonTrigger.process(params[BUTTON_PARAM].value)) { | |||||
pulseCount = 0; | |||||
timer = 0.0; | |||||
//outPulse.trigger(0.01); | |||||
outPulse.trigger(gateOutLength); | |||||
seconds = timeParam; | |||||
pulses = pulseParam; | |||||
//outputs[CV_OUTPUT].value = 0; | |||||
cvOut = 0; | |||||
} | |||||
timer += delta; | |||||
outputs[GATE_OUTPUT].value = outPulse.process(delta) ? 10.0 : 0.0; | |||||
outputs[EOC_OUTPUT].value = eocPulse.process(delta) ? 10.0 : 0.0; | |||||
outputs[CV_OUTPUT].value = (timer < seconds) ? cvOut : 0.0; | |||||
} | |||||
struct BurstWidget : ModuleWidget | |||||
{ | |||||
SVGPanel *panel; | |||||
BurstWidget(Burst *module); | |||||
//void step() override; | |||||
}; | |||||
BurstWidget::BurstWidget(Burst *module) : ModuleWidget(module) | |||||
{ | |||||
//box.size = Vec(6 * RACK_GRID_WIDTH, RACK_GRID_HEIGHT); | |||||
box.size = Vec(6 * 15, RACK_GRID_HEIGHT); | |||||
panel = new SVGPanel(); | |||||
panel->box.size = box.size; | |||||
panel->setBackground(SVG::load(assetPlugin(plugin, "res/Burst.svg"))); | |||||
addChild(panel); | |||||
// addChild(Widget::create<ScrewSilver>(Vec(15, 0))); | |||||
// addChild(Widget::create<ScrewSilver>(Vec(box.size.x - 30, 0))); | |||||
// addChild(Widget::create<ScrewSilver>(Vec(15, 365))); | |||||
// addChild(Widget::create<ScrewSilver>(Vec(box.size.x - 30, 365))); | |||||
//note: SmallKnob size = 28px, Trimpot = 17 px | |||||
//addParam(ParamWidget::create<LEDBezel>(Vec(30, 105), module, Burst::BUTTON_PARAM, 0.0, 1.0, 0.0)); | |||||
addParam(ParamWidget::create<CKD6>(Vec(30, 105), module, Burst::BUTTON_PARAM, 0.0, 1.0, 0.0)); | |||||
//addParam(ParamWidget::create<RoundSmallBlackKnob>(Vec(35, 50), module, Burst::REP_PARAM, 1, 8, 4)); | |||||
addParam(ParamWidget::create<Davies1900hLargeBlackKnob>(Vec(18, 30), module, Burst::REP_PARAM, 0, 8, 4)); | |||||
addParam(ParamWidget::create<RoundSmallBlackKnob>(Vec(10, 150), module, Burst::TIME_PARAM, 0.02, 1, 0.5)); | |||||
addParam(ParamWidget::create<RoundSmallBlackKnob>(Vec(52, 150), module, Burst::ACCEL_PARAM, 1.0, 2.0, 1.0)); | |||||
addParam(ParamWidget::create<RoundSmallBlackKnob>(Vec(10, 195), module, Burst::JITTER_PARAM, 0.0, 1.0, 0.0)); | |||||
addParam(ParamWidget::create<RoundSmallBlackKnob>(Vec(52, 195), module, Burst::CV_MODE_PARAM, 0, 6, 0)); | |||||
addParam(ParamWidget::create<Trimpot>(Vec(15.5, 240), module, Burst::REP_ATT_PARAM, -1.0, 1.0, 0.0)); | |||||
addParam(ParamWidget::create<Trimpot>(Vec(54, 240), module, Burst::TIME_ATT_PARAM, -1.0, 1.0, 0.0)); | |||||
addInput(Port::create<PJ301MPort>(Vec(13, 265), Port::INPUT, module, Burst::REP_INPUT));; | |||||
addInput(Port::create<PJ301MPort>(Vec(50, 265), Port::INPUT, module, Burst::TIME_INPUT));; | |||||
addInput(Port::create<PJ301MPort>(Vec(5, 305), Port::INPUT, module, Burst::GATE_INPUT));; | |||||
addInput(Port::create<PJ301MPort>(Vec(60, 305), Port::INPUT, module, Burst::CLOCK_INPUT));; | |||||
addParam(ParamWidget::create<CKSS>(Vec(38, 300), module, Burst::GATE_MODE_PARAM, 0.0, 1.0, 0.0)); | |||||
addOutput(Port::create<PJ301MPort>(Vec(5,335), Port::OUTPUT, module, Burst::CV_OUTPUT)); | |||||
addOutput(Port::create<PJ301MPort>(Vec(32.5,335), Port::OUTPUT, module, Burst::EOC_OUTPUT)); | |||||
addOutput(Port::create<PJ301MPort>(Vec(60,335), Port::OUTPUT, module, Burst::GATE_OUTPUT)); | |||||
} | |||||
Model *modelBurst = Model::create<Burst, BurstWidget>("Aepelzens Modules", "burst", "Burst Generator", SEQUENCER_TAG); |
@@ -1,222 +0,0 @@ | |||||
#include "aepelzen.hpp" | |||||
#include "dsp/digital.hpp" | |||||
#include <samplerate.h> | |||||
#define BUF_LEN 32 | |||||
#define UPSAMPLE_RATIO 4 | |||||
struct Folder : Module | |||||
{ | |||||
enum ParamIds | |||||
{ | |||||
GAIN_PARAM, | |||||
GAIN_ATT_PARAM, | |||||
SYM_PARAM, | |||||
SYM_ATT_PARAM, | |||||
STAGE_PARAM, | |||||
NUM_PARAMS | |||||
}; | |||||
enum InputIds | |||||
{ | |||||
GATE_INPUT, | |||||
GAIN_INPUT, | |||||
SYM_INPUT, | |||||
NUM_INPUTS | |||||
}; | |||||
enum OutputIds | |||||
{ | |||||
GATE_OUTPUT, | |||||
NUM_OUTPUTS | |||||
}; | |||||
enum LightIds | |||||
{ | |||||
NUM_LIGHTS | |||||
}; | |||||
void step() override; | |||||
Folder() : Module(NUM_PARAMS, NUM_INPUTS, NUM_OUTPUTS, NUM_LIGHTS) { | |||||
state = src_new(SRC_SINC_MEDIUM_QUALITY, 1, &error); | |||||
state_down = src_new(SRC_SINC_MEDIUM_QUALITY, 1, &error); | |||||
} | |||||
~Folder() { | |||||
src_delete(state); | |||||
src_delete(state_down); | |||||
} | |||||
void reset() override | |||||
{ | |||||
onSampleRateChange(); | |||||
} | |||||
void onSampleRateChange() override {} | |||||
void randomize() override {} | |||||
json_t *toJson() override { | |||||
json_t *rootJ = json_object(); | |||||
json_object_set_new(rootJ, "alternativeMode", json_boolean(alternativeMode)); | |||||
return rootJ; | |||||
} | |||||
void fromJson(json_t *rootJ) override { | |||||
json_t *modeJ = json_object_get(rootJ, "alternativeMode"); | |||||
if(modeJ) { | |||||
alternativeMode = json_boolean_value(modeJ); | |||||
} | |||||
} | |||||
float in, out, gain, sym; | |||||
float threshold = 1.0; | |||||
bool alternativeMode = false; | |||||
//variables for samplerate converter | |||||
SRC_DATA data; | |||||
SRC_DATA data_down; | |||||
SRC_STATE* state; | |||||
SRC_STATE* state_down; | |||||
int error = 0; | |||||
int frame = 0; | |||||
float in_buffer[BUF_LEN] = {}; | |||||
float out_buffer[UPSAMPLE_RATIO*BUF_LEN] = {}; | |||||
float folded_buffer[BUF_LEN] = {}; | |||||
}; | |||||
float fold(float in, float threshold) { | |||||
float out; | |||||
if (in>threshold || in<-threshold) { | |||||
out = clamp(fabs(fabs(fmod(in - threshold, threshold*4)) - threshold*2) - threshold, -5.0f,5.0f); | |||||
} | |||||
else { | |||||
out = in; | |||||
} | |||||
return out; | |||||
} | |||||
float fold3(float in, float t) { | |||||
float out = 0; | |||||
if(in>t) { | |||||
out = t - (in - t); | |||||
} | |||||
else if (in < -t) { | |||||
out = -t + (-t - in); | |||||
} | |||||
else { | |||||
out = in; | |||||
} | |||||
return out; | |||||
} | |||||
void Folder::step() | |||||
{ | |||||
gain = clamp(params[GAIN_PARAM].value + (inputs[GAIN_INPUT].value * params[GAIN_ATT_PARAM].value), 0.0f,14.0f); | |||||
sym = clamp(params[SYM_PARAM].value + inputs[SYM_INPUT].value/5.0 * params[SYM_ATT_PARAM].value, -1.0f, 1.0f); | |||||
in = (inputs[GATE_INPUT].value/5.0 + sym) * gain; | |||||
if(++frame >= BUF_LEN) { | |||||
//upsampling | |||||
data.data_in = in_buffer; | |||||
data.data_out = out_buffer; | |||||
data.input_frames = BUF_LEN; | |||||
data.output_frames = UPSAMPLE_RATIO*BUF_LEN; | |||||
data.src_ratio = UPSAMPLE_RATIO; | |||||
data.end_of_input = 0; | |||||
src_process(state, &data); | |||||
//fold | |||||
for(int i=0;i<data.output_frames_gen;i++) { | |||||
if(!alternativeMode) { | |||||
int stages = (int)(params[STAGE_PARAM].value)*2; | |||||
for (int y=0;y<stages;y++) { | |||||
out_buffer[i] = fold3(out_buffer[i], threshold); | |||||
} | |||||
} | |||||
else { | |||||
out_buffer[i] = fold(out_buffer[i], threshold); | |||||
} | |||||
out_buffer[i] = tanh(out_buffer[i]); | |||||
} | |||||
//downsampling | |||||
data_down.data_in = out_buffer; | |||||
data_down.data_out = folded_buffer; | |||||
data_down.input_frames = data.output_frames_gen; | |||||
data_down.output_frames = BUF_LEN; | |||||
data_down.src_ratio = 1.0/UPSAMPLE_RATIO; | |||||
data_down.end_of_input = 0; | |||||
src_process(state_down, &data_down); | |||||
frame = 0; | |||||
} | |||||
in_buffer[frame] = in; | |||||
//out = folded_buffer[frame] * 5.0; | |||||
outputs[GATE_OUTPUT].value = folded_buffer[frame] * 5.0; | |||||
return; | |||||
} | |||||
struct FolderWidget : ModuleWidget | |||||
{ | |||||
SVGPanel *panel; | |||||
FolderWidget(Folder *module); | |||||
Menu *createContextMenu() override; | |||||
}; | |||||
FolderWidget::FolderWidget(Folder *module) : ModuleWidget(module) | |||||
{ | |||||
//box.size = Vec(6 * RACK_GRID_WIDTH, RACK_GRID_HEIGHT); | |||||
box.size = Vec(4 * 15, RACK_GRID_HEIGHT); | |||||
panel = new SVGPanel(); | |||||
panel->box.size = box.size; | |||||
panel->setBackground(SVG::load(assetPlugin(plugin, "res/Folder.svg"))); | |||||
addChild(panel); | |||||
// addChild(Widget::create<ScrewSilver>(Vec(15, 0))); | |||||
// addChild(Widget::create<ScrewSilver>(Vec(box.size.x - 30, 0))); | |||||
// addChild(Widget::create<ScrewSilver>(Vec(15, 365))); | |||||
// addChild(Widget::create<ScrewSilver>(Vec(box.size.x - 30, 365))); | |||||
//note: SmallKnob size = 28px, Trimpot = 17 px | |||||
addParam(ParamWidget::create<BefacoSwitch>(Vec(16, 50), module, Folder::STAGE_PARAM, 1, 3, 2)); | |||||
addParam(ParamWidget::create<RoundSmallBlackKnob>(Vec(16, 100), module, Folder::GAIN_PARAM, 0.0, 14.0, 1.0)); | |||||
addParam(ParamWidget::create<Trimpot>(Vec(21.5, 145), module, Folder::GAIN_ATT_PARAM, -1.0, 1.0, 0)); | |||||
addParam(ParamWidget::create<RoundSmallBlackKnob>(Vec(16, 185), module, Folder::SYM_PARAM, -1.0, 1.0, 0.0)); | |||||
addParam(ParamWidget::create<Trimpot>(Vec(21.5, 230), module, Folder::SYM_ATT_PARAM, -1.0, 1.0, 0.0)); | |||||
addInput(Port::create<PJ301MPort>(Vec(3, 320), Port::INPUT, module, Folder::GATE_INPUT));; | |||||
addInput(Port::create<PJ301MPort>(Vec(3, 276), Port::INPUT, module, Folder::GAIN_INPUT));; | |||||
addInput(Port::create<PJ301MPort>(Vec(30, 276), Port::INPUT, module, Folder::SYM_INPUT));; | |||||
addOutput(Port::create<PJ301MPort>(Vec(30,320), Port::OUTPUT, module, Folder::GATE_OUTPUT)); | |||||
} | |||||
struct FolderMenuItem : MenuItem { | |||||
Folder *module; | |||||
void onAction(EventAction &e) override { | |||||
module->alternativeMode ^= true; | |||||
} | |||||
void step() override { | |||||
rightText = (module->alternativeMode) ? "✔" : ""; | |||||
MenuItem::step(); | |||||
} | |||||
}; | |||||
Menu *FolderWidget::createContextMenu() { | |||||
Menu *menu = ModuleWidget::createContextMenu(); | |||||
Folder *folder = dynamic_cast<Folder*>(module); | |||||
assert(folder); | |||||
menu->addChild(construct<MenuEntry>()); | |||||
menu->addChild(construct<FolderMenuItem>(&FolderMenuItem::text, "Alternative Folding Algorithm", &FolderMenuItem::module, folder)); | |||||
return menu; | |||||
} | |||||
Model *modelFolder = Model::create<Folder, FolderWidget>("Aepelzens Modules", "folder", "Manifold", WAVESHAPER_TAG); |
@@ -1,29 +0,0 @@ | |||||
BSD 3-Clause License | |||||
Copyright (c) 2017, John Hoar | |||||
All rights reserved. | |||||
Redistribution and use in source and binary forms, with or without | |||||
modification, are permitted provided that the following conditions are met: | |||||
* Redistributions of source code must retain the above copyright notice, this | |||||
list of conditions and the following disclaimer. | |||||
* Redistributions in binary form must reproduce the above copyright notice, | |||||
this list of conditions and the following disclaimer in the documentation | |||||
and/or other materials provided with the distribution. | |||||
* Neither the name of the copyright holder nor the names of its | |||||
contributors may be used to endorse or promote products derived from | |||||
this software without specific prior written permission. | |||||
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" | |||||
AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE | |||||
IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE | |||||
DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE | |||||
FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL | |||||
DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR | |||||
SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER | |||||
CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, | |||||
OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE | |||||
OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. |
@@ -1,27 +0,0 @@ | |||||
# Must follow the format in the Naming section of https://vcvrack.com/manual/PluginDevelopmentTutorial.html | |||||
SLUG = AmalgamatedHarmonics | |||||
# Must follow the format in the Versioning section of https://vcvrack.com/manual/PluginDevelopmentTutorial.html | |||||
VERSION = 0.6.9 | |||||
# FLAGS will be passed to both the C and C++ compiler | |||||
FLAGS += | |||||
CFLAGS += | |||||
CXXFLAGS += | |||||
# Careful about linking to shared libraries, since you can't assume much about the user's environment and library search path. | |||||
# Static libraries are fine. | |||||
LDFLAGS += | |||||
# Add .cpp and .c files to the build | |||||
SOURCES += $(wildcard src/*.cpp) | |||||
# Add files to the ZIP package when running `make dist` | |||||
# The compiled plugin is automatically added. | |||||
DISTRIBUTABLES += $(wildcard LICENSE*) res | |||||
# If RACK_DIR is not defined when calling the Makefile, default to two levels above | |||||
RACK_DIR ?= ../.. | |||||
# Include the VCV Rack plugin Makefile framework | |||||
include $(RACK_DIR)/plugin.mk |
@@ -1,10 +0,0 @@ | |||||
Welcome to the Amalgamated Harmonics; your one-stop shop for barely usable modules for [VCVRack](www.vcvrack.com). | |||||
* [Scale Quantizer](https://github.com/jhoar/AmalgamatedHarmonics/wiki/Scale-Quantizer), a scale-aware quantizer with multiple input and outputs | |||||
* [Arpeggiator](https://github.com/jhoar/AmalgamatedHarmonics/wiki/Arpeggiator), a multi-input arpeggiator | |||||
* [Progress](https://github.com/jhoar/AmalgamatedHarmonics/wiki/Progress), a chord sequencer | |||||
* [Fifths and Fourths](https://github.com/jhoar/AmalgamatedHarmonics/wiki/54), an implementation of the Circle of Fifths intended to work with Progress and Scale Quantizer | |||||
* [Imperfect](https://github.com/jhoar/AmalgamatedHarmonics/wiki/Imperfect), a trigger-to-gate and clock divider module. | |||||
The latest release is [0.5.8](https://github.com/jhoar/AmalgamatedHarmonics/releases/tag/v0.5.8) | |||||
@@ -1,81 +0,0 @@ | |||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?> | |||||
<!-- Created with Inkscape (http://www.inkscape.org/) --> | |||||
<svg | |||||
xmlns:dc="http://purl.org/dc/elements/1.1/" | |||||
xmlns:cc="http://creativecommons.org/ns#" | |||||
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" | |||||
xmlns:svg="http://www.w3.org/2000/svg" | |||||
xmlns="http://www.w3.org/2000/svg" | |||||
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" | |||||
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" | |||||
width="17.999601" | |||||
height="18" | |||||
viewBox="0 0 4.7623944 4.7624998" | |||||
version="1.1" | |||||
id="svg7595" | |||||
inkscape:version="0.92.2 5c3e80d, 2017-08-06" | |||||
sodipodi:docname="AHButton.svg"> | |||||
<defs | |||||
id="defs7589"> | |||||
<clipPath | |||||
id="clip444"> | |||||
<path | |||||
d="m 1201.582,338.19922 h 18 v 18 h -18 z m 0,0" | |||||
id="path24586" | |||||
inkscape:connector-curvature="0" /> | |||||
</clipPath> | |||||
</defs> | |||||
<sodipodi:namedview | |||||
id="base" | |||||
pagecolor="#ffffff" | |||||
bordercolor="#666666" | |||||
borderopacity="1.0" | |||||
inkscape:pageopacity="0.0" | |||||
inkscape:pageshadow="2" | |||||
inkscape:zoom="7.9195959" | |||||
inkscape:cx="-67.764383" | |||||
inkscape:cy="0.82092183" | |||||
inkscape:document-units="mm" | |||||
inkscape:current-layer="layer1" | |||||
showgrid="false" | |||||
fit-margin-top="0" | |||||
fit-margin-left="0" | |||||
fit-margin-right="0" | |||||
fit-margin-bottom="0" | |||||
inkscape:window-width="2560" | |||||
inkscape:window-height="1396" | |||||
inkscape:window-x="0" | |||||
inkscape:window-y="18" | |||||
inkscape:window-maximized="0" | |||||
units="px" /> | |||||
<metadata | |||||
id="metadata7592"> | |||||
<rdf:RDF> | |||||
<cc:Work | |||||
rdf:about=""> | |||||
<dc:format>image/svg+xml</dc:format> | |||||
<dc:type | |||||
rdf:resource="http://purl.org/dc/dcmitype/StillImage" /> | |||||
<dc:title /> | |||||
</cc:Work> | |||||
</rdf:RDF> | |||||
</metadata> | |||||
<g | |||||
inkscape:label="Layer 1" | |||||
inkscape:groupmode="layer" | |||||
id="layer1" | |||||
transform="translate(-46.755712,-67.833036)"> | |||||
<g | |||||
transform="matrix(0.26458333,0,0,0.26458333,-271.16296,-21.64884)" | |||||
clip-path="url(#clip444)" | |||||
id="g31387" | |||||
style="clip-rule:nonzero;fill:#d4af37;fill-opacity:1"> | |||||
<path | |||||
style="fill:#d4af37;fill-opacity:1;fill-rule:nonzero;stroke:none" | |||||
d="m 1202.125,344.12109 c -1.6953,4.66797 0.7148,9.83594 5.3789,11.53516 4.6719,1.69531 9.8359,-0.71094 11.5352,-5.37891 1.6992,-4.67187 -0.7071,-9.83203 -5.3789,-11.53515 -4.668,-1.69532 -9.8282,0.70703 -11.5352,5.3789" | |||||
id="path31385" | |||||
inkscape:connector-curvature="0" /> | |||||
</g> | |||||
</g> | |||||
</svg> |
@@ -1,101 +0,0 @@ | |||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?> | |||||
<!-- Created with Inkscape (http://www.inkscape.org/) --> | |||||
<svg | |||||
xmlns:dc="http://purl.org/dc/elements/1.1/" | |||||
xmlns:cc="http://creativecommons.org/ns#" | |||||
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" | |||||
xmlns:svg="http://www.w3.org/2000/svg" | |||||
xmlns="http://www.w3.org/2000/svg" | |||||
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" | |||||
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" | |||||
width="23.005993" | |||||
height="23.005983" | |||||
viewBox="0 0 6.087002 6.0869995" | |||||
version="1.1" | |||||
id="svg16908" | |||||
inkscape:version="0.92.2 5c3e80d, 2017-08-06" | |||||
sodipodi:docname="AHKnob1.svg"> | |||||
<defs | |||||
id="defs16902"> | |||||
<clipPath | |||||
clipPathUnits="userSpaceOnUse" | |||||
id="clipPath6367"> | |||||
<path | |||||
d="M 0,3193 H 2089 V 0 H 0 Z" | |||||
id="path6365" | |||||
inkscape:connector-curvature="0" /> | |||||
</clipPath> | |||||
</defs> | |||||
<sodipodi:namedview | |||||
id="base" | |||||
pagecolor="#ffffff" | |||||
bordercolor="#666666" | |||||
borderopacity="1.0" | |||||
inkscape:pageopacity="0.0" | |||||
inkscape:pageshadow="2" | |||||
inkscape:zoom="12.833327" | |||||
inkscape:cx="2.9610326" | |||||
inkscape:cy="18.000787" | |||||
inkscape:document-units="mm" | |||||
inkscape:current-layer="layer1" | |||||
showgrid="false" | |||||
fit-margin-top="0" | |||||
fit-margin-left="0" | |||||
fit-margin-right="0" | |||||
fit-margin-bottom="0" | |||||
inkscape:window-width="1503" | |||||
inkscape:window-height="1003" | |||||
inkscape:window-x="766" | |||||
inkscape:window-y="55" | |||||
inkscape:window-maximized="0" | |||||
units="px" /> | |||||
<metadata | |||||
id="metadata16905"> | |||||
<rdf:RDF> | |||||
<cc:Work | |||||
rdf:about=""> | |||||
<dc:format>image/svg+xml</dc:format> | |||||
<dc:type | |||||
rdf:resource="http://purl.org/dc/dcmitype/StillImage" /> | |||||
<dc:title></dc:title> | |||||
</cc:Work> | |||||
</rdf:RDF> | |||||
</metadata> | |||||
<g | |||||
inkscape:label="Layer 1" | |||||
inkscape:groupmode="layer" | |||||
id="layer1" | |||||
transform="translate(-230.09584,-126.67083)"> | |||||
<g | |||||
style="fill:#000000;fill-opacity:1;stroke-width:1.33335185" | |||||
id="g6443" | |||||
transform="matrix(0.16908321,0,0,-0.16907394,236.18284,129.71437)"> | |||||
<path | |||||
d="m 0,0 c 0,-9.941 -8.06,-18 -18,-18 -9.941,0 -18,8.059 -18,18 0,9.941 8.059,18 18,18 C -8.06,18 0,9.941 0,0" | |||||
style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1.33335185" | |||||
id="path6445" | |||||
inkscape:connector-curvature="0" /> | |||||
</g> | |||||
<g | |||||
style="fill:#d4af37;fill-opacity:1;stroke-width:1.33335185" | |||||
id="g6447" | |||||
transform="matrix(0.16908321,0,0,-0.16907394,236.1656,129.39275)"> | |||||
<path | |||||
d="m 0,0 c -0.79,1.279 -2.12,2.537 -2.86,4.327 -0.74,1.784 -0.691,3.609 -1.033,5.067 -0.805,0.997 -1.711,1.902 -2.709,2.708 -1.459,0.341 -3.282,0.293 -5.068,1.033 -1.79,0.742 -3.048,2.069 -4.325,2.86 -0.625,0.066 -1.26,0.104 -1.902,0.104 -0.644,0 -1.279,-0.038 -1.903,-0.104 -1.279,-0.791 -2.537,-2.118 -4.327,-2.86 -1.784,-0.74 -3.607,-0.692 -5.067,-1.033 -0.997,-0.806 -1.904,-1.711 -2.708,-2.708 -0.342,-1.458 -0.294,-3.283 -1.035,-5.067 -0.74,-1.79 -2.069,-3.048 -2.858,-4.327 -0.066,-0.625 -0.103,-1.26 -0.103,-1.902 0,-0.643 0.037,-1.278 0.103,-1.905 0.789,-1.277 2.118,-2.535 2.858,-4.325 0.741,-1.784 0.693,-3.609 1.035,-5.066 0.804,-0.998 1.711,-1.904 2.708,-2.709 1.46,-0.342 3.283,-0.293 5.067,-1.032 1.79,-0.743 3.048,-2.071 4.327,-2.861 0.624,-0.065 1.259,-0.103 1.903,-0.103 0.642,0 1.277,0.038 1.902,0.103 1.277,0.79 2.535,2.118 4.325,2.861 1.786,0.739 3.609,0.69 5.068,1.032 0.998,0.805 1.904,1.711 2.709,2.709 0.342,1.457 0.293,3.282 1.033,5.066 0.74,1.79 2.07,3.048 2.86,4.325 0.065,0.627 0.102,1.262 0.102,1.905 C 0.102,-1.26 0.065,-0.625 0,0" | |||||
style="fill:#d4af37;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1.33335185" | |||||
id="path6449" | |||||
inkscape:connector-curvature="0" /> | |||||
</g> | |||||
<g | |||||
style="fill:#000000;fill-opacity:1;stroke-width:1.33335185" | |||||
id="g6451" | |||||
transform="matrix(0.16908321,0,0,-0.16907394,233.24057,126.68261)"> | |||||
<path | |||||
d="M 0,0 C -0.195,0.045 -0.393,0.069 -0.598,0.069 -0.804,0.069 -1.002,0.045 -1.196,0 V -18.157 H 0 Z" | |||||
style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1.33335185" | |||||
id="path6453" | |||||
inkscape:connector-curvature="0" /> | |||||
</g> | |||||
</g> | |||||
</svg> |
@@ -1,433 +0,0 @@ | |||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?> | |||||
<!-- Created with Inkscape (http://www.inkscape.org/) --> | |||||
<svg | |||||
xmlns:dc="http://purl.org/dc/elements/1.1/" | |||||
xmlns:cc="http://creativecommons.org/ns#" | |||||
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" | |||||
xmlns:svg="http://www.w3.org/2000/svg" | |||||
xmlns="http://www.w3.org/2000/svg" | |||||
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" | |||||
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" | |||||
width="6.2990241mm" | |||||
height="6.3003879mm" | |||||
viewBox="0 0 6.2990242 6.3003887" | |||||
version="1.1" | |||||
id="svg15246" | |||||
sodipodi:docname="Trimpot.svg" | |||||
inkscape:version="0.92.2 5c3e80d, 2017-08-06"> | |||||
<defs | |||||
id="defs15240"> | |||||
<clipPath | |||||
id="clip89"> | |||||
<rect | |||||
y="0" | |||||
x="0" | |||||
width="18" | |||||
height="19" | |||||
id="rect4864" /> | |||||
</clipPath> | |||||
<clipPath | |||||
id="clip90"> | |||||
<path | |||||
inkscape:connector-curvature="0" | |||||
d="m 0.898438,0.128906 h 16.25 v 17.882813 h -16.25 z m 0,0" | |||||
id="path4861" /> | |||||
</clipPath> | |||||
<mask | |||||
id="mask44"> | |||||
<g | |||||
style="filter:url(#alpha)" | |||||
id="g4858" | |||||
transform="matrix(0.26458333,0,0,0.26458333,89.358789,128.57765)"> | |||||
<rect | |||||
x="0" | |||||
y="0" | |||||
width="3052.8701" | |||||
height="3351.5" | |||||
style="fill:#000000;fill-opacity:0.14999402;stroke:none" | |||||
id="rect4856" /> | |||||
</g> | |||||
</mask> | |||||
<filter | |||||
id="alpha" | |||||
filterUnits="objectBoundingBox" | |||||
x="0" | |||||
y="0" | |||||
width="1" | |||||
height="1"> | |||||
<feColorMatrix | |||||
type="matrix" | |||||
in="SourceGraphic" | |||||
values="0 0 0 0 1 0 0 0 0 1 0 0 0 0 1 0 0 0 1 0" | |||||
id="feColorMatrix4149" /> | |||||
</filter> | |||||
<clipPath | |||||
id="clipPath17821"> | |||||
<rect | |||||
y="0" | |||||
x="0" | |||||
width="18" | |||||
height="19" | |||||
id="rect17819" /> | |||||
</clipPath> | |||||
<clipPath | |||||
id="clipPath17825"> | |||||
<path | |||||
inkscape:connector-curvature="0" | |||||
d="m 0.898438,0.128906 h 16.25 v 17.882813 h -16.25 z m 0,0" | |||||
id="path17823" /> | |||||
</clipPath> | |||||
<clipPath | |||||
id="clip87"> | |||||
<rect | |||||
y="0" | |||||
x="0" | |||||
width="24" | |||||
height="26" | |||||
id="rect4848" /> | |||||
</clipPath> | |||||
<clipPath | |||||
id="clip88"> | |||||
<path | |||||
inkscape:connector-curvature="0" | |||||
d="m 0.683594,0.921875 h 22.679687 v 24.9375 H 0.683594 Z m 0,0" | |||||
id="path4845" /> | |||||
</clipPath> | |||||
<mask | |||||
id="mask43"> | |||||
<g | |||||
style="filter:url(#alpha)" | |||||
id="g4842" | |||||
transform="matrix(0.26458333,0,0,0.26458333,89.358789,128.57765)"> | |||||
<rect | |||||
x="0" | |||||
y="0" | |||||
width="3052.8701" | |||||
height="3351.5" | |||||
style="fill:#000000;fill-opacity:0.14999402;stroke:none" | |||||
id="rect4840" /> | |||||
</g> | |||||
</mask> | |||||
<filter | |||||
id="filter17836" | |||||
filterUnits="objectBoundingBox" | |||||
x="0" | |||||
y="0" | |||||
width="1" | |||||
height="1"> | |||||
<feColorMatrix | |||||
type="matrix" | |||||
in="SourceGraphic" | |||||
values="0 0 0 0 1 0 0 0 0 1 0 0 0 0 1 0 0 0 1 0" | |||||
id="feColorMatrix17834" /> | |||||
</filter> | |||||
<clipPath | |||||
id="clipPath17840"> | |||||
<rect | |||||
y="0" | |||||
x="0" | |||||
width="24" | |||||
height="26" | |||||
id="rect17838" /> | |||||
</clipPath> | |||||
<clipPath | |||||
id="clipPath17844"> | |||||
<path | |||||
inkscape:connector-curvature="0" | |||||
d="m 0.683594,0.921875 h 22.679687 v 24.9375 H 0.683594 Z m 0,0" | |||||
id="path17842" /> | |||||
</clipPath> | |||||
<clipPath | |||||
id="clip95"> | |||||
<rect | |||||
y="0" | |||||
x="0" | |||||
width="18" | |||||
height="18" | |||||
id="rect4912" /> | |||||
</clipPath> | |||||
<clipPath | |||||
id="clip96"> | |||||
<path | |||||
inkscape:connector-curvature="0" | |||||
d="M 0.140625,0.140625 H 17.199219 V 17.199219 H 0.140625 Z m 0,0" | |||||
id="path4909" /> | |||||
</clipPath> | |||||
<mask | |||||
id="mask47"> | |||||
<g | |||||
style="filter:url(#alpha-3)" | |||||
id="g4906" | |||||
transform="matrix(0.26458333,0,0,0.26458333,88.611154,119.19859)"> | |||||
<rect | |||||
x="0" | |||||
y="0" | |||||
width="3052.8701" | |||||
height="3351.5" | |||||
style="fill:#000000;fill-opacity:0.33000201;stroke:none" | |||||
id="rect4904" /> | |||||
</g> | |||||
</mask> | |||||
<filter | |||||
id="alpha-3" | |||||
filterUnits="objectBoundingBox" | |||||
x="0" | |||||
y="0" | |||||
width="1" | |||||
height="1"> | |||||
<feColorMatrix | |||||
type="matrix" | |||||
in="SourceGraphic" | |||||
values="0 0 0 0 1 0 0 0 0 1 0 0 0 0 1 0 0 0 1 0" | |||||
id="feColorMatrix4149-6" /> | |||||
</filter> | |||||
<clipPath | |||||
id="clipPath18541"> | |||||
<rect | |||||
y="0" | |||||
x="0" | |||||
width="18" | |||||
height="18" | |||||
id="rect18539" /> | |||||
</clipPath> | |||||
<clipPath | |||||
id="clipPath18545"> | |||||
<path | |||||
inkscape:connector-curvature="0" | |||||
d="M 0.140625,0.140625 H 17.199219 V 17.199219 H 0.140625 Z m 0,0" | |||||
id="path18543" /> | |||||
</clipPath> | |||||
<clipPath | |||||
id="clip93"> | |||||
<rect | |||||
y="0" | |||||
x="0" | |||||
width="22" | |||||
height="24" | |||||
id="rect4896" /> | |||||
</clipPath> | |||||
<clipPath | |||||
id="clip94"> | |||||
<path | |||||
inkscape:connector-curvature="0" | |||||
d="M 0.0390625,0.0390625 H 21.300781 V 23.421875 H 0.0390625 Z m 0,0" | |||||
id="path4893" /> | |||||
</clipPath> | |||||
<mask | |||||
id="mask46"> | |||||
<g | |||||
style="filter:url(#alpha-3)" | |||||
id="g4890" | |||||
transform="matrix(0.26458333,0,0,0.26458333,88.611154,119.19859)"> | |||||
<rect | |||||
x="0" | |||||
y="0" | |||||
width="3052.8701" | |||||
height="3351.5" | |||||
style="fill:#000000;fill-opacity:0.14999402;stroke:none" | |||||
id="rect4888" /> | |||||
</g> | |||||
</mask> | |||||
<filter | |||||
id="filter18556" | |||||
filterUnits="objectBoundingBox" | |||||
x="0" | |||||
y="0" | |||||
width="1" | |||||
height="1"> | |||||
<feColorMatrix | |||||
type="matrix" | |||||
in="SourceGraphic" | |||||
values="0 0 0 0 1 0 0 0 0 1 0 0 0 0 1 0 0 0 1 0" | |||||
id="feColorMatrix18554" /> | |||||
</filter> | |||||
<clipPath | |||||
id="clipPath18560"> | |||||
<rect | |||||
y="0" | |||||
x="0" | |||||
width="22" | |||||
height="24" | |||||
id="rect18558" /> | |||||
</clipPath> | |||||
<clipPath | |||||
id="clipPath18564"> | |||||
<path | |||||
inkscape:connector-curvature="0" | |||||
d="M 0.0390625,0.0390625 H 21.300781 V 23.421875 H 0.0390625 Z m 0,0" | |||||
id="path18562" /> | |||||
</clipPath> | |||||
<clipPath | |||||
id="clip91"> | |||||
<rect | |||||
y="0" | |||||
x="0" | |||||
width="29" | |||||
height="32" | |||||
id="rect4880" /> | |||||
</clipPath> | |||||
<clipPath | |||||
id="clip92"> | |||||
<path | |||||
inkscape:connector-curvature="0" | |||||
d="M 0.507812,0.5 H 28.855469 V 31.679688 H 0.507812 Z m 0,0" | |||||
id="path4877" /> | |||||
</clipPath> | |||||
<mask | |||||
id="mask45"> | |||||
<g | |||||
style="filter:url(#alpha-3)" | |||||
id="g4874" | |||||
transform="matrix(0.26458333,0,0,0.26458333,88.611154,119.19859)"> | |||||
<rect | |||||
x="0" | |||||
y="0" | |||||
width="3052.8701" | |||||
height="3351.5" | |||||
style="fill:#000000;fill-opacity:0.14999402;stroke:none" | |||||
id="rect4872" /> | |||||
</g> | |||||
</mask> | |||||
<filter | |||||
id="filter18575" | |||||
filterUnits="objectBoundingBox" | |||||
x="0" | |||||
y="0" | |||||
width="1" | |||||
height="1"> | |||||
<feColorMatrix | |||||
type="matrix" | |||||
in="SourceGraphic" | |||||
values="0 0 0 0 1 0 0 0 0 1 0 0 0 0 1 0 0 0 1 0" | |||||
id="feColorMatrix18573" /> | |||||
</filter> | |||||
<clipPath | |||||
id="clipPath18579"> | |||||
<rect | |||||
y="0" | |||||
x="0" | |||||
width="29" | |||||
height="32" | |||||
id="rect18577" /> | |||||
</clipPath> | |||||
<clipPath | |||||
id="clipPath18583"> | |||||
<path | |||||
inkscape:connector-curvature="0" | |||||
d="M 0.507812,0.5 H 28.855469 V 31.679688 H 0.507812 Z m 0,0" | |||||
id="path18581" /> | |||||
</clipPath> | |||||
<clipPath | |||||
id="clip202"> | |||||
<rect | |||||
y="0" | |||||
x="0" | |||||
width="18" | |||||
height="18" | |||||
id="rect5795" /> | |||||
</clipPath> | |||||
<clipPath | |||||
id="clip203"> | |||||
<path | |||||
inkscape:connector-curvature="0" | |||||
d="M 0.855469,0.140625 H 17.914062 V 17.199219 H 0.855469 Z m 0,0" | |||||
id="path5792" /> | |||||
</clipPath> | |||||
<mask | |||||
id="mask104"> | |||||
<g | |||||
style="filter:url(#alpha-7)" | |||||
id="g5789" | |||||
transform="matrix(0.26458333,0,0,0.26458333,74.416306,97.613551)"> | |||||
<rect | |||||
x="0" | |||||
y="0" | |||||
width="3052.8701" | |||||
height="3351.5" | |||||
style="fill:#000000;fill-opacity:0.33000201;stroke:none" | |||||
id="rect5787" /> | |||||
</g> | |||||
</mask> | |||||
<filter | |||||
id="alpha-7" | |||||
filterUnits="objectBoundingBox" | |||||
x="0" | |||||
y="0" | |||||
width="1" | |||||
height="1"> | |||||
<feColorMatrix | |||||
type="matrix" | |||||
in="SourceGraphic" | |||||
values="0 0 0 0 1 0 0 0 0 1 0 0 0 0 1 0 0 0 1 0" | |||||
id="feColorMatrix4149-5" /> | |||||
</filter> | |||||
<clipPath | |||||
id="clipPath18765"> | |||||
<rect | |||||
y="0" | |||||
x="0" | |||||
width="18" | |||||
height="18" | |||||
id="rect18763" /> | |||||
</clipPath> | |||||
<clipPath | |||||
id="clipPath18769"> | |||||
<path | |||||
inkscape:connector-curvature="0" | |||||
d="M 0.855469,0.140625 H 17.914062 V 17.199219 H 0.855469 Z m 0,0" | |||||
id="path18767" /> | |||||
</clipPath> | |||||
</defs> | |||||
<sodipodi:namedview | |||||
id="base" | |||||
pagecolor="#ffffff" | |||||
bordercolor="#666666" | |||||
borderopacity="1.0" | |||||
inkscape:pageopacity="0.0" | |||||
inkscape:pageshadow="2" | |||||
inkscape:zoom="5.6" | |||||
inkscape:cx="26.106375" | |||||
inkscape:cy="37.463453" | |||||
inkscape:document-units="mm" | |||||
inkscape:current-layer="layer1" | |||||
showgrid="false" | |||||
inkscape:window-width="1274" | |||||
inkscape:window-height="856" | |||||
inkscape:window-x="154" | |||||
inkscape:window-y="0" | |||||
inkscape:window-maximized="0" | |||||
units="px" | |||||
fit-margin-top="0" | |||||
fit-margin-left="0" | |||||
fit-margin-right="0" | |||||
fit-margin-bottom="0" /> | |||||
<metadata | |||||
id="metadata15243"> | |||||
<rdf:RDF> | |||||
<cc:Work | |||||
rdf:about=""> | |||||
<dc:format>image/svg+xml</dc:format> | |||||
<dc:type | |||||
rdf:resource="http://purl.org/dc/dcmitype/StillImage" /> | |||||
<dc:title /> | |||||
</cc:Work> | |||||
</rdf:RDF> | |||||
</metadata> | |||||
<g | |||||
inkscape:label="Layer 1" | |||||
inkscape:groupmode="layer" | |||||
id="layer1" | |||||
transform="translate(-46.318588,-97.647662)"> | |||||
<path | |||||
inkscape:connector-curvature="0" | |||||
id="path7219" | |||||
d="m 46.318588,100.79786 c 0,1.74046 1.409735,3.15019 3.1502,3.15019 1.739088,0 3.148824,-1.40973 3.148824,-3.15019 0,-1.739087 -1.409736,-3.150198 -3.148824,-3.150198 -1.740465,0 -3.1502,1.411111 -3.1502,3.150198" | |||||
style="fill:#d4af37;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.35277775" /> | |||||
<path | |||||
inkscape:connector-curvature="0" | |||||
id="path7221" | |||||
d="m 49.672764,97.658686 c -0.06752,-0.0055 -0.135079,-0.01101 -0.203976,-0.01101 -0.0689,0 -0.137795,0.0055 -0.205317,0.01101 v 3.139174 h 0.409293 z m 0,0" | |||||
style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.35277775" /> | |||||
</g> | |||||
</svg> |
@@ -1,95 +0,0 @@ | |||||
Copyright (c) 2017, keshikan (http://www.keshikan.net), | |||||
with Reserved Font Name "DSEG". | |||||
This Font Software is licensed under the SIL Open Font License, Version 1.1. | |||||
This license is copied below, and is also available with a FAQ at: | |||||
http://scripts.sil.org/OFL | |||||
----------------------------------------------------------- | |||||
SIL OPEN FONT LICENSE Version 1.1 - 26 February 2007 | |||||
----------------------------------------------------------- | |||||
PREAMBLE | |||||
The goals of the Open Font License (OFL) are to stimulate worldwide | |||||
development of collaborative font projects, to support the font creation | |||||
efforts of academic and linguistic communities, and to provide a free and | |||||
open framework in which fonts may be shared and improved in partnership | |||||
with others. | |||||
The OFL allows the licensed fonts to be used, studied, modified and | |||||
redistributed freely as long as they are not sold by themselves. The | |||||
fonts, including any derivative works, can be bundled, embedded, | |||||
redistributed and/or sold with any software provided that any reserved | |||||
names are not used by derivative works. The fonts and derivatives, | |||||
however, cannot be released under any other type of license. The | |||||
requirement for fonts to remain under this license does not apply | |||||
to any document created using the fonts or their derivatives. | |||||
DEFINITIONS | |||||
"Font Software" refers to the set of files released by the Copyright | |||||
Holder(s) under this license and clearly marked as such. This may | |||||
include source files, build scripts and documentation. | |||||
"Reserved Font Name" refers to any names specified as such after the | |||||
copyright statement(s). | |||||
"Original Version" refers to the collection of Font Software components as | |||||
distributed by the Copyright Holder(s). | |||||
"Modified Version" refers to any derivative made by adding to, deleting, | |||||
or substituting -- in part or in whole -- any of the components of the | |||||
Original Version, by changing formats or by porting the Font Software to a | |||||
new environment. | |||||
"Author" refers to any designer, engineer, programmer, technical | |||||
writer or other person who contributed to the Font Software. | |||||
PERMISSION & CONDITIONS | |||||
Permission is hereby granted, free of charge, to any person obtaining | |||||
a copy of the Font Software, to use, study, copy, merge, embed, modify, | |||||
redistribute, and sell modified and unmodified copies of the Font | |||||
Software, subject to the following conditions: | |||||
1) Neither the Font Software nor any of its individual components, | |||||
in Original or Modified Versions, may be sold by itself. | |||||
2) Original or Modified Versions of the Font Software may be bundled, | |||||
redistributed and/or sold with any software, provided that each copy | |||||
contains the above copyright notice and this license. These can be | |||||
included either as stand-alone text files, human-readable headers or | |||||
in the appropriate machine-readable metadata fields within text or | |||||
binary files as long as those fields can be easily viewed by the user. | |||||
3) No Modified Version of the Font Software may use the Reserved Font | |||||
Name(s) unless explicit written permission is granted by the corresponding | |||||
Copyright Holder. This restriction only applies to the primary font name as | |||||
presented to the users. | |||||
4) The name(s) of the Copyright Holder(s) or the Author(s) of the Font | |||||
Software shall not be used to promote, endorse or advertise any | |||||
Modified Version, except to acknowledge the contribution(s) of the | |||||
Copyright Holder(s) and the Author(s) or with their explicit written | |||||
permission. | |||||
5) The Font Software, modified or unmodified, in part or in whole, | |||||
must be distributed entirely under this license, and must not be | |||||
distributed under any other license. The requirement for fonts to | |||||
remain under this license does not apply to any document created | |||||
using the Font Software. | |||||
TERMINATION | |||||
This license becomes null and void if any of the above conditions are | |||||
not met. | |||||
DISCLAIMER | |||||
THE FONT SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, | |||||
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OF | |||||
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT | |||||
OF COPYRIGHT, PATENT, TRADEMARK, OR OTHER RIGHT. IN NO EVENT SHALL THE | |||||
COPYRIGHT HOLDER BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, | |||||
INCLUDING ANY GENERAL, SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL | |||||
DAMAGES, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING | |||||
FROM, OUT OF THE USE OR INABILITY TO USE THE FONT SOFTWARE OR FROM | |||||
OTHER DEALINGS IN THE FONT SOFTWARE. |
@@ -1,30 +0,0 @@ | |||||
#include "AH.hpp" | |||||
// The plugin-wide instance of the Plugin class | |||||
Plugin *plugin; | |||||
void init(rack::Plugin *p) { | |||||
plugin = p; | |||||
// This is the unique identifier for your plugin | |||||
p->slug = "AmalgamatedHarmonics"; | |||||
#ifdef VERSION | |||||
p->version = TOSTRING(VERSION); | |||||
#endif | |||||
p->website = "https://github.com/jhoar/AmalgamatedHarmonics/wiki"; | |||||
p->manual = "https://github.com/jhoar/AmalgamatedHarmonics/wiki"; | |||||
// For each module, specify the ModuleWidget subclass, manufacturer slug (for saving in patches), manufacturer human-readable name, module slug, | |||||
// and module name | |||||
p->addModel(modelArpeggiator); | |||||
p->addModel(modelArpeggiator2); | |||||
p->addModel(modelCircle); | |||||
p->addModel(modelImperfect); | |||||
p->addModel(modelImperfect2); | |||||
p->addModel(modelProgress); | |||||
p->addModel(modelRuckus); | |||||
p->addModel(modelScaleQuantizer); | |||||
p->addModel(modelScaleQuantizer2); | |||||
// Any other plugin initialization may go here. | |||||
// As an alternative, consider lazy-loading assets and lookup tables when your module is created to reduce startup times of Rack. | |||||
} |
@@ -1,30 +0,0 @@ | |||||
#pragma once | |||||
#include "rack.hpp" | |||||
using namespace rack; | |||||
extern Plugin *plugin; | |||||
//////////////////// | |||||
// module widgets | |||||
//////////////////// | |||||
extern Model *modelArpeggiator; | |||||
extern Model *modelArpeggiator2; | |||||
extern Model *modelCircle; | |||||
extern Model *modelImperfect; | |||||
extern Model *modelImperfect2; | |||||
extern Model *modelProgress; | |||||
extern Model *modelRuckus; | |||||
extern Model *modelScaleQuantizer; | |||||
extern Model *modelScaleQuantizer2; | |||||
@@ -1,573 +0,0 @@ | |||||
#include "AH.hpp" | |||||
#include "Core.hpp" | |||||
#include "UI.hpp" | |||||
#include "componentlibrary.hpp" | |||||
#include "dsp/digital.hpp" | |||||
#include <iostream> | |||||
struct Sequence { | |||||
int pDir = 0; | |||||
int sDir = 0; | |||||
int nStep = 0; | |||||
int nDist = 0; | |||||
int stepI = 0; | |||||
int cycleI = 0; | |||||
int stepsRemaining = 0; | |||||
int cycleRemaining = 0; | |||||
int currDist = 0; | |||||
void advanceSequence() { | |||||
stepI++; | |||||
stepsRemaining--; | |||||
} | |||||
void advanceCycle() { | |||||
cycleI++; | |||||
cycleRemaining--; | |||||
} | |||||
void initSequence(int inputStep, int inputDist, int inputPDir, int inputSDir, bool locked) { | |||||
if (!locked) { | |||||
nStep = inputStep; | |||||
nDist = inputDist; | |||||
pDir = inputPDir; | |||||
sDir = inputSDir; | |||||
} | |||||
stepsRemaining = nStep; | |||||
stepI = 0; | |||||
// At the beginning of the sequence (i.e. dist = 0) | |||||
// currDist is the distance from the base note of the sequence, nDist controls the size of the increment | |||||
currDist = 0; | |||||
} | |||||
void setCycle(int n) { | |||||
cycleRemaining = n; | |||||
cycleI = 0; | |||||
} | |||||
bool isCycleFinished() { | |||||
return (cycleRemaining == 0); | |||||
} | |||||
bool isSequenceFinished() { | |||||
return (stepsRemaining == 0); | |||||
} | |||||
bool isSequenceStarted() { | |||||
return stepI; | |||||
} | |||||
}; | |||||
struct Arpeggiator : AHModule { | |||||
const static int MAX_STEPS = 16; | |||||
const static int MAX_DIST = 12; //Octave | |||||
const static int NUM_PITCHES = 6; | |||||
enum ParamIds { | |||||
STEP_PARAM, | |||||
DIST_PARAM, | |||||
PDIR_PARAM, | |||||
SDIR_PARAM, | |||||
LOCK_PARAM, | |||||
TRIGGER_PARAM, | |||||
NUM_PARAMS | |||||
}; | |||||
enum InputIds { | |||||
CLOCK_INPUT, | |||||
STEP_INPUT, | |||||
DIST_INPUT, | |||||
TRIG_INPUT, | |||||
PITCH_INPUT, | |||||
NUM_INPUTS = PITCH_INPUT + NUM_PITCHES | |||||
}; | |||||
enum OutputIds { | |||||
OUT_OUTPUT, | |||||
GATE_OUTPUT, | |||||
EOC_OUTPUT, | |||||
EOS_OUTPUT, | |||||
NUM_OUTPUTS | |||||
}; | |||||
enum LightIds { | |||||
LOCK_LIGHT, | |||||
NUM_LIGHTS | |||||
}; | |||||
Arpeggiator() : AHModule(NUM_PARAMS, NUM_INPUTS, NUM_OUTPUTS, NUM_LIGHTS) { } | |||||
void step() override; | |||||
SchmittTrigger clockTrigger; // for clock | |||||
SchmittTrigger trigTrigger; // for step trigger | |||||
SchmittTrigger lockTrigger; | |||||
SchmittTrigger buttonTrigger; | |||||
PulseGenerator triggerPulse; | |||||
PulseGenerator gatePulse; | |||||
PulseGenerator eosPulse; | |||||
PulseGenerator eocPulse; | |||||
float pitches[NUM_PITCHES]; | |||||
float inputPitches[NUM_PITCHES]; | |||||
bool pitchStatus[NUM_PITCHES]; | |||||
float pitchValue[NUM_PITCHES]; | |||||
int inputPDir; | |||||
int inputSDir; | |||||
int inputStep = 0; | |||||
int inputDist = 0; | |||||
bool locked = false; | |||||
float outVolts; | |||||
bool isRunning = false; | |||||
bool freeRunning = false; | |||||
Sequence seq; | |||||
int newSequence = 0; | |||||
int newCycle = 0; | |||||
const static int LAUNCH = 1; | |||||
const static int COUNTDOWN = 3; | |||||
int nValidPitches = 0; | |||||
int poll = 5000; | |||||
}; | |||||
void Arpeggiator::step() { | |||||
stepX++; | |||||
// Wait a few steps for the inputs to flow through Rack | |||||
if (stepX < 10) { | |||||
return; | |||||
} | |||||
// Get the clock rate and semi-tone | |||||
float semiTone = 1.0 / 12.0; | |||||
// Get inputs from Rack | |||||
float clockInput = inputs[CLOCK_INPUT].value; | |||||
float trigInput = inputs[TRIG_INPUT].value; | |||||
float trigActive = inputs[TRIG_INPUT].active; | |||||
float lockInput = params[LOCK_PARAM].value; | |||||
float buttonInput = params[TRIGGER_PARAM].value; | |||||
float iPDir = params[PDIR_PARAM].value; | |||||
float iSDir = params[SDIR_PARAM].value; | |||||
float iStep; | |||||
if (inputs[STEP_INPUT].active) { | |||||
iStep = inputs[STEP_INPUT].value; | |||||
inputStep = round(rescale(iStep, -10.0f, 10.0f, 0.0f, MAX_STEPS)); | |||||
} else { | |||||
iStep = params[STEP_PARAM].value; | |||||
inputStep = iStep; | |||||
} | |||||
float iDist; | |||||
if (inputs[DIST_INPUT].active) { | |||||
iDist = inputs[DIST_INPUT].value; | |||||
inputDist = round(rescale(iDist, -10.0f, 10.0f, 0.0f, MAX_DIST)); | |||||
} else { | |||||
iDist = params[DIST_PARAM].value; | |||||
inputDist = iDist; | |||||
} | |||||
for (int p = 0; p < NUM_PITCHES; p++) { | |||||
int index = PITCH_INPUT + p; | |||||
pitchStatus[p] = inputs[index].active; | |||||
pitchValue[p] = inputs[index].value; | |||||
} | |||||
// Process inputs | |||||
bool clockStatus = clockTrigger.process(clockInput); | |||||
bool triggerStatus = trigTrigger.process(trigInput); | |||||
bool lockStatus = lockTrigger.process(lockInput); | |||||
bool buttonStatus = buttonTrigger.process(buttonInput); | |||||
inputPDir = iPDir; | |||||
inputSDir = iSDir; | |||||
int nValidPitches = 0; | |||||
for (int p = 0; p < NUM_PITCHES; p++) { | |||||
if (pitchStatus[p]) { //Plugged in | |||||
inputPitches[nValidPitches] = pitchValue[p]; | |||||
nValidPitches++; | |||||
} | |||||
} | |||||
// Check that we even have anything plugged in | |||||
if (nValidPitches == 0) { | |||||
return; // No inputs, no music | |||||
} | |||||
// Has the trigger input been fired | |||||
if (triggerStatus) { | |||||
triggerPulse.trigger(5e-5); | |||||
if (debug()) { std::cout << stepX << " Triggered" << std::endl; } | |||||
} | |||||
// Update the trigger pulse and determine if it is still high | |||||
bool triggerHigh = triggerPulse.process(delta); | |||||
if (debug()) { | |||||
if (triggerHigh) { | |||||
std::cout << stepX << " Trigger is high" << std::endl; | |||||
} | |||||
} | |||||
// Update lock | |||||
if (lockStatus) { | |||||
if (debug()) { std::cout << "Toggling lock: " << locked << std::endl; } | |||||
locked = !locked; | |||||
} | |||||
if (newSequence) { | |||||
newSequence--; | |||||
if (debug()) { std::cout << stepX << " Countdown newSequence " << newSequence << std::endl; } | |||||
} | |||||
if (newCycle) { | |||||
newCycle--; | |||||
if (debug()) { std::cout << stepX << " Countdown newCycle " << newCycle << std::endl; } | |||||
} | |||||
// OK so the problem here might be that the clock gate is still high right after the trigger gate fired on the previous step | |||||
// So we need to wait a while for the clock gate to go low | |||||
// Has the clock input been fired | |||||
bool isClocked = false; | |||||
if (clockStatus && !triggerHigh) { | |||||
if (debug()) { std::cout << stepX << " Clocked" << std::endl; } | |||||
isClocked = true; | |||||
} | |||||
// Has the trigger input been fired, either on the input or button | |||||
if (triggerStatus || buttonStatus) { | |||||
newSequence = COUNTDOWN; | |||||
newCycle = COUNTDOWN; | |||||
if (debug()) { std::cout << stepX << " Triggered" << std::endl; } | |||||
} | |||||
// So this is where the free-running could be triggered | |||||
if (isClocked && !isRunning) { // Must have a clock and not be already running | |||||
if (!trigActive) { // If nothing plugged into the TRIG input | |||||
if (debug()) { std::cout << stepX << " Free running sequence; starting" << std::endl; } | |||||
freeRunning = true; // We're free-running | |||||
newSequence = COUNTDOWN; | |||||
newCycle = LAUNCH; | |||||
} else { | |||||
if (debug()) { std::cout << stepX << " Triggered sequence; wait for trigger" << std::endl; } | |||||
freeRunning = false; | |||||
} | |||||
} | |||||
// Detect cable being plugged in when free-running, stop free-running | |||||
if (freeRunning && trigActive && isRunning) { | |||||
if (debug()) { std::cout << stepX << " TRIG input re-connected" << std::endl; } | |||||
freeRunning = false; | |||||
} | |||||
// Reached the end of the cycle | |||||
if (isRunning && isClocked && seq.isCycleFinished()) { | |||||
// Completed 1 step | |||||
seq.advanceSequence(); | |||||
// Pulse the EOC gate | |||||
eocPulse.trigger(5e-3); | |||||
if (debug()) { std::cout << stepX << " Finished Cycle S: " << seq.stepI << | |||||
" C: " << seq.cycleI << | |||||
" sRemain: " << seq.stepsRemaining << | |||||
" cRemain: " << seq.cycleRemaining << std::endl; | |||||
} | |||||
// Reached the end of the sequence | |||||
if (isRunning && seq.isSequenceFinished()) { | |||||
// Free running, so start new seqeuence & cycle | |||||
if (freeRunning) { | |||||
newCycle = COUNTDOWN; | |||||
newSequence = COUNTDOWN; | |||||
} | |||||
isRunning = false; | |||||
// Pulse the EOS gate | |||||
eosPulse.trigger(5e-3); | |||||
if (debug()) { std::cout << stepX << " Finished sequence S: " << seq.stepI << | |||||
" C: " << seq.cycleI << | |||||
" sRemain: " << seq.stepsRemaining << | |||||
" cRemain: " << seq.cycleRemaining << | |||||
" flag:" << isRunning << std::endl; | |||||
} | |||||
} else { | |||||
newCycle = LAUNCH; | |||||
if (debug()) { std::cout << stepX << " Flagging new cycle" << std::endl; } | |||||
} | |||||
} | |||||
// If we have been triggered, start a new sequence | |||||
if (newSequence == LAUNCH) { | |||||
// At the first step of the sequence | |||||
if (debug()) { std::cout << stepX << " New Sequence" << std::endl; } | |||||
if (!locked) { | |||||
if (debug()) { std::cout << stepX << " Update sequence inputs" << std::endl; } | |||||
} | |||||
// So this is where we tweak the sequence parameters | |||||
seq.initSequence(inputStep, inputDist, inputPDir, inputSDir, locked); | |||||
// We're running now | |||||
isRunning = true; | |||||
} | |||||
// Starting a new cycle | |||||
if (newCycle == LAUNCH) { | |||||
if (debug()) { | |||||
std::cout << stepX << " Defining cycle: nStep: " << seq.nStep << | |||||
" nDist: " << seq.nDist << | |||||
" pDir: " << seq.pDir << | |||||
" sDir: " << seq.sDir << | |||||
" nValidPitches: " << nValidPitches << | |||||
" seqLen: " << seq.nStep * nValidPitches; | |||||
for (int i = 0; i < nValidPitches; i++) { | |||||
std::cout << " P" << i << " V: " << inputPitches[i]; | |||||
} | |||||
std::cout << std::endl; | |||||
} | |||||
/// Reset the cycle counters | |||||
seq.setCycle(nValidPitches); | |||||
if (debug()) { std::cout << stepX << " New cycle" << std::endl; } | |||||
// Deal with RND setting, when sDir == 1, force it up or down | |||||
if (seq.sDir == 1) { | |||||
if (rand() % 2 == 0) { | |||||
seq.sDir = 0; | |||||
} else { | |||||
seq.sDir = 2; | |||||
} | |||||
} | |||||
// Only starting moving after the first cycle | |||||
if (seq.isSequenceStarted()) { | |||||
switch (seq.sDir) { | |||||
case 0: seq.currDist--; break; | |||||
case 2: seq.currDist++; break; | |||||
default: ; | |||||
} | |||||
} | |||||
if (!locked) {// Pitches are locked, and so is the order. This keeps randomly generated arps fixed when locked | |||||
// pitches[i] are offset from the input values according to the dist setting. Here we calculate the offsets | |||||
for (int i = 0; i < nValidPitches; i++) { | |||||
int target; | |||||
// Read the pitches according to direction, but we should do this for the sequence? | |||||
switch (seq.pDir) { | |||||
case 0: target = nValidPitches - i - 1; break; // DOWN | |||||
case 1: target = rand() % nValidPitches; break; // RANDOM | |||||
case 2: target = i; break; // UP | |||||
default: target = i; break; // For random case, read randomly from array, so order does not matter | |||||
} | |||||
// How many semi-tones do we need to shift | |||||
float dV = semiTone * seq.nDist * seq.currDist; | |||||
pitches[i] = clamp(inputPitches[target] + dV, -10.0, 10.0); | |||||
if (debug()) { | |||||
std::cout << stepX << " Pitch: " << i << " stepI: " << seq.stepI << | |||||
" dV:" << dV << | |||||
" target: " << target << | |||||
" in: " << inputPitches[target] << | |||||
" out: " << pitches[target] << std::endl; | |||||
} | |||||
} | |||||
} | |||||
if (debug()) { | |||||
std::cout << stepX << " Output pitches: "; | |||||
for (int i = 0; i < nValidPitches; i++) { | |||||
std::cout << " P" << i << " V: " << pitches[i]; | |||||
} | |||||
std::cout << std::endl; | |||||
} | |||||
} | |||||
// Advance the sequence | |||||
// Are we starting a sequence or are running and have been clocked; if so advance the sequence | |||||
// Only advance from the clock | |||||
if (isRunning && (isClocked || newCycle == LAUNCH)) { | |||||
if (debug()) { std::cout << stepX << " Advance Cycle S: " << seq.stepI << | |||||
" C: " << seq.cycleI << | |||||
" sRemain: " << seq.stepsRemaining << | |||||
" cRemain: " << seq.cycleRemaining << std::endl; | |||||
} | |||||
// Finally set the out voltage | |||||
outVolts = pitches[seq.cycleI]; | |||||
if (debug()) { std::cout << stepX << " Output V = " << outVolts << std::endl; } | |||||
// Update counters | |||||
seq.advanceCycle(); | |||||
// Pulse the output gate | |||||
gatePulse.trigger(5e-4); | |||||
} | |||||
// Set the value | |||||
lights[LOCK_LIGHT].value = locked ? 1.0 : 0.0; | |||||
outputs[OUT_OUTPUT].value = outVolts; | |||||
bool gPulse = gatePulse.process(delta); | |||||
bool sPulse = eosPulse.process(delta); | |||||
bool cPulse = eocPulse.process(delta); | |||||
outputs[GATE_OUTPUT].value = gPulse ? 10.0 : 0.0; | |||||
outputs[EOS_OUTPUT].value = sPulse ? 10.0 : 0.0; | |||||
outputs[EOC_OUTPUT].value = cPulse ? 10.0 : 0.0; | |||||
} | |||||
struct ArpeggiatorDisplay : TransparentWidget { | |||||
Arpeggiator *module; | |||||
int frame = 0; | |||||
std::shared_ptr<Font> font; | |||||
ArpeggiatorDisplay() { | |||||
font = Font::load(assetPlugin(plugin, "res/Roboto-Light.ttf")); | |||||
} | |||||
void draw(NVGcontext *vg) override { | |||||
Vec pos = Vec(0, 20); | |||||
nvgFontSize(vg, 20); | |||||
nvgFontFaceId(vg, font->handle); | |||||
nvgTextLetterSpacing(vg, -1); | |||||
nvgFillColor(vg, nvgRGBA(212, 175, 55, 0xff)); | |||||
char text[128]; | |||||
snprintf(text, sizeof(text), "STEP: %d [%d]", module->seq.nStep, module->inputStep); | |||||
nvgText(vg, pos.x + 10, pos.y + 5, text, NULL); | |||||
snprintf(text, sizeof(text), "DIST: %d [%d]", module->seq.nDist, module->inputDist); | |||||
nvgText(vg, pos.x + 10, pos.y + 25, text, NULL); | |||||
if (module->seq.sDir == 0) { | |||||
snprintf(text, sizeof(text), "SEQ: DSC"); | |||||
} else { | |||||
snprintf(text, sizeof(text), "SEQ: ASC"); | |||||
} | |||||
nvgText(vg, pos.x + 10, pos.y + 45, text, NULL); | |||||
switch(module->seq.pDir) { | |||||
case 0: snprintf(text, sizeof(text), "ARP: R-L"); break; | |||||
case 1: snprintf(text, sizeof(text), "ARP: RND"); break; | |||||
case 2: snprintf(text, sizeof(text), "ARP: L-R"); break; | |||||
default: snprintf(text, sizeof(text), "ARP: ERR"); break; | |||||
} | |||||
nvgText(vg, pos.x + 10, pos.y + 65, text, NULL); | |||||
std::string inputs ("IN: "); | |||||
for (int p = 0; p < Arpeggiator::NUM_PITCHES; p++) { | |||||
if (module->pitchStatus[p] && module->pitchValue[p] > -9.999) { //Plugged in or approx -10.0 | |||||
inputs = inputs + std::to_string(p + 1); | |||||
} | |||||
} | |||||
nvgText(vg, pos.x + 10, pos.y + 85, inputs.c_str(), NULL); | |||||
} | |||||
}; | |||||
struct ArpeggiatorWidget : ModuleWidget { | |||||
ArpeggiatorWidget(Arpeggiator *module); | |||||
}; | |||||
ArpeggiatorWidget::ArpeggiatorWidget(Arpeggiator *module) : ModuleWidget(module) { | |||||
UI ui; | |||||
box.size = Vec(240, 380); | |||||
{ | |||||
SVGPanel *panel = new SVGPanel(); | |||||
panel->box.size = box.size; | |||||
panel->setBackground(SVG::load(assetPlugin(plugin, "res/Arpeggiator.svg"))); | |||||
addChild(panel); | |||||
} | |||||
addChild(Widget::create<ScrewSilver>(Vec(15, 0))); | |||||
addChild(Widget::create<ScrewSilver>(Vec(box.size.x - 30, 0))); | |||||
addChild(Widget::create<ScrewSilver>(Vec(15, 365))); | |||||
addChild(Widget::create<ScrewSilver>(Vec(box.size.x - 30, 365))); | |||||
{ | |||||
ArpeggiatorDisplay *display = new ArpeggiatorDisplay(); | |||||
display->module = module; | |||||
display->box.pos = Vec(10, 95); | |||||
display->box.size = Vec(100, 140); | |||||
addChild(display); | |||||
} | |||||
addOutput(Port::create<PJ301MPort>(ui.getPosition(UI::PORT, 0, 0, false, false), Port::OUTPUT, module, Arpeggiator::OUT_OUTPUT)); | |||||
addOutput(Port::create<PJ301MPort>(ui.getPosition(UI::PORT, 1, 0, false, false), Port::OUTPUT, module, Arpeggiator::GATE_OUTPUT)); | |||||
addParam(ParamWidget::create<AHButton>(ui.getPosition(UI::BUTTON, 2, 0, false, false), module, Arpeggiator::LOCK_PARAM, 0.0, 1.0, 0.0)); | |||||
addChild(ModuleLightWidget::create<MediumLight<GreenLight>>(ui.getPosition(UI::LIGHT, 2, 0, false, false), module, Arpeggiator::LOCK_LIGHT)); | |||||
addOutput(Port::create<PJ301MPort>(ui.getPosition(UI::PORT, 3, 0, false, false), Port::OUTPUT, module, Arpeggiator::EOC_OUTPUT)); | |||||
addOutput(Port::create<PJ301MPort>(ui.getPosition(UI::PORT, 4, 0, false, false), Port::OUTPUT, module, Arpeggiator::EOS_OUTPUT)); | |||||
addParam(ParamWidget::create<BefacoPush>(Vec(127, 155), module, Arpeggiator::TRIGGER_PARAM, 0.0, 1.0, 0.0)); | |||||
for (int i = 0; i < Arpeggiator::NUM_PITCHES; i++) { | |||||
addInput(Port::create<PJ301MPort>(ui.getPosition(UI::PORT, i, 5, true, false), Port::INPUT, module, Arpeggiator::PITCH_INPUT + i)); | |||||
} | |||||
addInput(Port::create<PJ301MPort>(ui.getPosition(UI::PORT, 0, 4, true, false), Port::INPUT, module, Arpeggiator::STEP_INPUT)); | |||||
addParam(ParamWidget::create<AHKnobSnap>(ui.getPosition(UI::KNOB, 1, 4, true, false), module, Arpeggiator::STEP_PARAM, 1.0, 16.0, 1.0)); | |||||
addInput(Port::create<PJ301MPort>(ui.getPosition(UI::PORT, 2, 4, true, false), Port::INPUT, module, Arpeggiator::DIST_INPUT)); | |||||
addParam(ParamWidget::create<AHKnobSnap>(ui.getPosition(UI::KNOB, 3, 4, true, false), module, Arpeggiator::DIST_PARAM, 0.0, 12.0, 0.0)); | |||||
addInput(Port::create<PJ301MPort>(ui.getPosition(UI::PORT, 4, 4, true, false), Port::INPUT, module, Arpeggiator::TRIG_INPUT)); | |||||
addInput(Port::create<PJ301MPort>(ui.getPosition(UI::PORT, 5, 4, true, false), Port::INPUT, module, Arpeggiator::CLOCK_INPUT)); | |||||
addParam(ParamWidget::create<BefacoSwitch>(Vec(178.5, 112.0), module, Arpeggiator::SDIR_PARAM, 0, 2, 0)); | |||||
addParam(ParamWidget::create<BefacoSwitch>(Vec(178.5, 187.0), module, Arpeggiator::PDIR_PARAM, 0, 2, 0)); | |||||
} | |||||
Model *modelArpeggiator = Model::create<Arpeggiator, ArpeggiatorWidget>( "Amalgamated Harmonics", "Arpeggiator", "Arpeggiator (deprecated)", ARPEGGIATOR_TAG); | |||||
@@ -1,297 +0,0 @@ | |||||
#include "AH.hpp" | |||||
#include "Core.hpp" | |||||
#include "UI.hpp" | |||||
#include "dsp/digital.hpp" | |||||
#include <iostream> | |||||
struct Circle : AHModule { | |||||
const static int NUM_PITCHES = 6; | |||||
enum ParamIds { | |||||
KEY_PARAM, | |||||
MODE_PARAM, | |||||
NUM_PARAMS | |||||
}; | |||||
enum InputIds { | |||||
ROTL_INPUT, | |||||
ROTR_INPUT, | |||||
KEY_INPUT, | |||||
MODE_INPUT, | |||||
NUM_INPUTS | |||||
}; | |||||
enum OutputIds { | |||||
KEY_OUTPUT, | |||||
MODE_OUTPUT, | |||||
NUM_OUTPUTS | |||||
}; | |||||
enum LightIds { | |||||
ENUMS(MODE_LIGHT,7), | |||||
ENUMS(BKEY_LIGHT,12), | |||||
ENUMS(CKEY_LIGHT,12), | |||||
NUM_LIGHTS | |||||
}; | |||||
enum Scaling { | |||||
CHROMATIC, | |||||
FIFTHS | |||||
}; | |||||
Scaling voltScale = FIFTHS; | |||||
Circle() : AHModule(NUM_PARAMS, NUM_INPUTS, NUM_OUTPUTS, NUM_LIGHTS) {} | |||||
void step() override; | |||||
json_t *toJson() override { | |||||
json_t *rootJ = json_object(); | |||||
// gateMode | |||||
json_t *scaleModeJ = json_integer((int) voltScale); | |||||
json_object_set_new(rootJ, "scale", scaleModeJ); | |||||
return rootJ; | |||||
} | |||||
void fromJson(json_t *rootJ) override { | |||||
// gateMode | |||||
json_t *scaleModeJ = json_object_get(rootJ, "scale"); | |||||
if (scaleModeJ) { | |||||
voltScale = (Scaling)json_integer_value(scaleModeJ); | |||||
} | |||||
} | |||||
SchmittTrigger rotLTrigger; | |||||
SchmittTrigger rotRTrigger; | |||||
PulseGenerator stepPulse; | |||||
float outVolts[NUM_PITCHES]; | |||||
int baseKeyIndex = 0; | |||||
int curKeyIndex = 0; | |||||
int curMode = 0; | |||||
int poll = 50000; | |||||
}; | |||||
void Circle::step() { | |||||
AHModule::step(); | |||||
// Get inputs from Rack | |||||
float rotLInput = inputs[ROTL_INPUT].value; | |||||
float rotRInput = inputs[ROTR_INPUT].value; | |||||
int newKeyIndex = 0; | |||||
int deg; | |||||
if (inputs[KEY_INPUT].active) { | |||||
float fRoot = inputs[KEY_INPUT].value; | |||||
if (voltScale == FIFTHS) { | |||||
newKeyIndex = CoreUtil().getKeyFromVolts(fRoot); | |||||
} else { | |||||
CoreUtil().getPitchFromVolts(fRoot, Core::NOTE_C, Core::SCALE_CHROMATIC, &newKeyIndex, °); | |||||
} | |||||
} else { | |||||
newKeyIndex = params[KEY_PARAM].value; | |||||
} | |||||
int newMode = 0; | |||||
if (inputs[MODE_INPUT].active) { | |||||
float fMode = inputs[MODE_INPUT].value; | |||||
newMode = round(rescale(fabs(fMode), 0.0f, 10.0f, 0.0f, 6.0f)); | |||||
} else { | |||||
newMode = params[MODE_PARAM].value; | |||||
} | |||||
curMode = newMode; | |||||
// Process inputs | |||||
bool rotLStatus = rotLTrigger.process(rotLInput); | |||||
bool rotRStatus = rotRTrigger.process(rotRInput); | |||||
if (rotLStatus) { | |||||
if (debug()) { std::cout << stepX << " Rotate left: " << curKeyIndex; } | |||||
if (voltScale == FIFTHS) { | |||||
if (curKeyIndex == 0) { | |||||
curKeyIndex = 11; | |||||
} else { | |||||
curKeyIndex--; | |||||
} | |||||
} else { | |||||
curKeyIndex = curKeyIndex + 5; | |||||
if (curKeyIndex > 11) { | |||||
curKeyIndex = curKeyIndex - 12; | |||||
} | |||||
} | |||||
if (debug()) { std::cout << " -> " << curKeyIndex << std::endl; } | |||||
} | |||||
if (rotRStatus) { | |||||
if (debug()) { std::cout << stepX << " Rotate right: " << curKeyIndex; } | |||||
if (voltScale == FIFTHS) { | |||||
if (curKeyIndex == 11) { | |||||
curKeyIndex = 0; | |||||
} else { | |||||
curKeyIndex++; | |||||
} | |||||
} else { | |||||
curKeyIndex = curKeyIndex - 5; | |||||
if (curKeyIndex < 0) { | |||||
curKeyIndex = curKeyIndex + 12; | |||||
} | |||||
} | |||||
if (debug()) { std::cout << " -> " << curKeyIndex << std::endl; } | |||||
} | |||||
if (rotLStatus && rotRStatus) { | |||||
if (debug()) { std::cout << stepX << " Reset " << curKeyIndex << std::endl; } | |||||
curKeyIndex = baseKeyIndex; | |||||
} | |||||
if (newKeyIndex != baseKeyIndex) { | |||||
if (debug()) { std::cout << stepX << " New base: " << newKeyIndex << std::endl;} | |||||
baseKeyIndex = newKeyIndex; | |||||
curKeyIndex = newKeyIndex; | |||||
} | |||||
int curKey; | |||||
int baseKey; | |||||
if (voltScale == FIFTHS) { | |||||
curKey = CoreUtil().CIRCLE_FIFTHS[curKeyIndex]; | |||||
baseKey = CoreUtil().CIRCLE_FIFTHS[baseKeyIndex]; | |||||
} else { | |||||
curKey = curKeyIndex; | |||||
baseKey = baseKeyIndex; | |||||
} | |||||
float keyVolts = CoreUtil().getVoltsFromKey(curKey); | |||||
float modeVolts = CoreUtil().getVoltsFromMode(curMode); | |||||
for (int i = 0; i < Core::NUM_NOTES; i++) { | |||||
lights[CKEY_LIGHT + i].value = 0.0; | |||||
lights[BKEY_LIGHT + i].value = 0.0; | |||||
} | |||||
lights[CKEY_LIGHT + curKey].value = 1.0; | |||||
lights[BKEY_LIGHT + baseKey].value = 1.0; | |||||
for (int i = 0; i < Core::NUM_MODES; i++) { | |||||
lights[MODE_LIGHT + i].value = 0.0; | |||||
} | |||||
lights[MODE_LIGHT + curMode].value = 1.0; | |||||
outputs[KEY_OUTPUT].value = keyVolts; | |||||
outputs[MODE_OUTPUT].value = modeVolts; | |||||
} | |||||
struct CircleWidget : ModuleWidget { | |||||
CircleWidget(Circle *module); | |||||
Menu *createContextMenu() override; | |||||
}; | |||||
CircleWidget::CircleWidget(Circle *module) : ModuleWidget(module) { | |||||
UI ui; | |||||
box.size = Vec(240, 380); | |||||
{ | |||||
SVGPanel *panel = new SVGPanel(); | |||||
panel->box.size = box.size; | |||||
panel->setBackground(SVG::load(assetPlugin(plugin, "res/Circle.svg"))); | |||||
addChild(panel); | |||||
} | |||||
addChild(Widget::create<ScrewSilver>(Vec(15, 0))); | |||||
addChild(Widget::create<ScrewSilver>(Vec(box.size.x - 30, 0))); | |||||
addChild(Widget::create<ScrewSilver>(Vec(15, 365))); | |||||
addChild(Widget::create<ScrewSilver>(Vec(box.size.x - 30, 365))); | |||||
addInput(Port::create<PJ301MPort>(ui.getPosition(UI::PORT, 0, 0, true, false), Port::INPUT, module, Circle::ROTL_INPUT)); | |||||
addInput(Port::create<PJ301MPort>(ui.getPosition(UI::PORT, 5, 0, true, false), Port::INPUT, module, Circle::ROTR_INPUT)); | |||||
addInput(Port::create<PJ301MPort>(ui.getPosition(UI::PORT, 0, 5, true, false), Port::INPUT, module, Circle::KEY_INPUT)); | |||||
addParam(ParamWidget::create<AHKnobSnap>(ui.getPosition(UI::KNOB, 1, 5, true, false), module, Circle::KEY_PARAM, 0.0, 11.0, 0.0)); | |||||
addInput(Port::create<PJ301MPort>(ui.getPosition(UI::PORT, 2, 5, true, false), Port::INPUT, module, Circle::MODE_INPUT)); | |||||
addParam(ParamWidget::create<AHKnobSnap>(ui.getPosition(UI::KNOB, 3, 5, true, false), module, Circle::MODE_PARAM, 0.0, 6.0, 0.0)); | |||||
float div = (M_PI * 2) / 12.0; | |||||
for (int i = 0; i < 12; i++) { | |||||
float cosDiv = cos(div * i); | |||||
float sinDiv = sin(div * i); | |||||
float xPos = sinDiv * 52.5; | |||||
float yPos = cosDiv * 52.5; | |||||
float xxPos = sinDiv * 60.0; | |||||
float yyPos = cosDiv * 60.0; | |||||
// ui.calculateKeyboard(i, xSpace, xOffset, 230.0, &xPos, &yPos, &scale); | |||||
addChild(ModuleLightWidget::create<SmallLight<GreenLight>>(Vec(xxPos + 116.5, 149.5 - yyPos), module, Circle::CKEY_LIGHT + CoreUtil().CIRCLE_FIFTHS[i])); | |||||
// ui.calculateKeyboard(i, xSpace, xOffset + 72.0, 165.0, &xPos, &yPos, &scale); | |||||
addChild(ModuleLightWidget::create<SmallLight<RedLight>>(Vec(xPos + 116.5, 149.5 - yPos), module, Circle::BKEY_LIGHT + CoreUtil().CIRCLE_FIFTHS[i])); | |||||
} | |||||
float xOffset = 18.0; | |||||
for (int i = 0; i < 7; i++) { | |||||
float xPos = 2 * xOffset + i * 18.2; | |||||
addChild(ModuleLightWidget::create<SmallLight<GreenLight>>(Vec(xPos, 280.0), module, Circle::MODE_LIGHT + i)); | |||||
} | |||||
addOutput(Port::create<PJ301MPort>(ui.getPosition(UI::PORT, 4, 5, true, false), Port::OUTPUT, module, Circle::KEY_OUTPUT)); | |||||
addOutput(Port::create<PJ301MPort>(ui.getPosition(UI::PORT, 5, 5, true, false), Port::OUTPUT, module, Circle::MODE_OUTPUT)); | |||||
} | |||||
struct CircleScalingItem : MenuItem { | |||||
Circle *circle; | |||||
Circle::Scaling scalingMode; | |||||
void onAction(EventAction &e) override { | |||||
circle->voltScale = scalingMode; | |||||
} | |||||
void step() override { | |||||
rightText = (circle->voltScale == scalingMode) ? "✔" : ""; | |||||
} | |||||
}; | |||||
Menu *CircleWidget::createContextMenu() { | |||||
Menu *menu = ModuleWidget::createContextMenu(); | |||||
MenuLabel *spacerLabel = new MenuLabel(); | |||||
menu->addChild(spacerLabel); | |||||
Circle *circle = dynamic_cast<Circle*>(module); | |||||
assert(circle); | |||||
MenuLabel *modeLabel = new MenuLabel(); | |||||
modeLabel->text = "Root Volt Scaling"; | |||||
menu->addChild(modeLabel); | |||||
CircleScalingItem *fifthsItem = new CircleScalingItem(); | |||||
fifthsItem->text = "Fifths"; | |||||
fifthsItem->circle = circle; | |||||
fifthsItem->scalingMode = Circle::FIFTHS; | |||||
menu->addChild(fifthsItem); | |||||
CircleScalingItem *chromaticItem = new CircleScalingItem(); | |||||
chromaticItem->text = "Chromatic (V/OCT)"; | |||||
chromaticItem->circle = circle; | |||||
chromaticItem->scalingMode = Circle::CHROMATIC; | |||||
menu->addChild(chromaticItem); | |||||
return menu; | |||||
} | |||||
Model *modelCircle = Model::create<Circle, CircleWidget>( "Amalgamated Harmonics", "Circle", "Fifths and Fourths", SEQUENCER_TAG); | |||||
// ♯♭ |
@@ -1,202 +0,0 @@ | |||||
#include "Core.hpp" | |||||
#include <iostream> | |||||
float Core::getPitchFromVolts(float inVolts, float inRoot, float inScale, int *outRoot, int *outScale, int *outNote, int *outDegree) { | |||||
// get the root note and scale | |||||
int currRoot = getKeyFromVolts(inRoot); | |||||
int currScale = getScaleFromVolts(inScale); | |||||
if (debug && stepX % poll == 0) { | |||||
std::cout << "QUANT " << stepX << " Root in: " << inRoot << " Root out: " << currRoot<< " Scale in: " << inScale << " Scale out: " << currScale << std::endl; | |||||
} | |||||
float outVolts = getPitchFromVolts(inVolts, currRoot, currScale, outNote, outDegree); | |||||
*outRoot = currRoot; | |||||
*outScale = currScale; | |||||
return outVolts; | |||||
} | |||||
float Core::getPitchFromVolts(float inVolts, int currRoot, int currScale, int *outNote, int *outDegree) { | |||||
int *curScaleArr; | |||||
int notesInScale = 0; | |||||
switch (currScale){ | |||||
case SCALE_CHROMATIC: curScaleArr = ASCALE_CHROMATIC; notesInScale=LENGTHOF(ASCALE_CHROMATIC); break; | |||||
case SCALE_IONIAN: curScaleArr = ASCALE_IONIAN; notesInScale=LENGTHOF(ASCALE_IONIAN); break; | |||||
case SCALE_DORIAN: curScaleArr = ASCALE_DORIAN; notesInScale=LENGTHOF(ASCALE_DORIAN); break; | |||||
case SCALE_PHRYGIAN: curScaleArr = ASCALE_PHRYGIAN; notesInScale=LENGTHOF(ASCALE_PHRYGIAN); break; | |||||
case SCALE_LYDIAN: curScaleArr = ASCALE_LYDIAN; notesInScale=LENGTHOF(ASCALE_LYDIAN); break; | |||||
case SCALE_MIXOLYDIAN: curScaleArr = ASCALE_MIXOLYDIAN; notesInScale=LENGTHOF(ASCALE_MIXOLYDIAN); break; | |||||
case SCALE_AEOLIAN: curScaleArr = ASCALE_AEOLIAN; notesInScale=LENGTHOF(ASCALE_AEOLIAN); break; | |||||
case SCALE_LOCRIAN: curScaleArr = ASCALE_LOCRIAN; notesInScale=LENGTHOF(ASCALE_LOCRIAN); break; | |||||
case SCALE_MAJOR_PENTA: curScaleArr = ASCALE_MAJOR_PENTA; notesInScale=LENGTHOF(ASCALE_MAJOR_PENTA); break; | |||||
case SCALE_MINOR_PENTA: curScaleArr = ASCALE_MINOR_PENTA; notesInScale=LENGTHOF(ASCALE_MINOR_PENTA); break; | |||||
case SCALE_HARMONIC_MINOR: curScaleArr = ASCALE_HARMONIC_MINOR; notesInScale=LENGTHOF(ASCALE_HARMONIC_MINOR); break; | |||||
case SCALE_BLUES: curScaleArr = ASCALE_BLUES; notesInScale=LENGTHOF(ASCALE_BLUES); break; | |||||
default: curScaleArr = ASCALE_CHROMATIC; notesInScale=LENGTHOF(ASCALE_CHROMATIC); | |||||
} | |||||
// get the octave | |||||
int octave = floor(inVolts); | |||||
float closestVal = 10.0; | |||||
float closestDist = 10.0; | |||||
int noteFound = 0; | |||||
if (debug && stepX % poll == 0) { | |||||
std::cout << "QUANT Octave: " << octave << " Scale: " << scaleNames[currScale] << " Root: " << noteNames[currRoot] << std::endl; | |||||
} | |||||
float octaveOffset = 0; | |||||
if (currRoot != 0) { | |||||
octaveOffset = (12 - currRoot) / 12.0; | |||||
} | |||||
if (debug && stepX % poll == 0) { | |||||
std::cout << "QUANT Octave: " << octave << " currRoot: " << currRoot << " -> Offset: " << octaveOffset << " inVolts: " << inVolts << std::endl; | |||||
} | |||||
float fOctave = (float)octave - octaveOffset; | |||||
int scaleIndex = 0; | |||||
int searchOctave = 0; | |||||
do { | |||||
int degree = curScaleArr[scaleIndex]; // 0 - 11! | |||||
float fVoltsAboveOctave = searchOctave + degree / 12.0; | |||||
float fScaleNoteInVolts = fOctave + fVoltsAboveOctave; | |||||
float distAway = fabs(inVolts - fScaleNoteInVolts); | |||||
if (debug && stepX % poll == 0) { | |||||
std::cout << "QUANT input: " << inVolts | |||||
<< " index: " << scaleIndex | |||||
<< " root: " << currRoot | |||||
<< " octave: " << fOctave | |||||
<< " degree: " << degree | |||||
<< " V above O: " << fVoltsAboveOctave | |||||
<< " note in V: " << fScaleNoteInVolts | |||||
<< " distance: " << distAway | |||||
<< std::endl; | |||||
} | |||||
// Assume that the list of notes is ordered, so there is an single inflection point at the minimum value | |||||
if (distAway >= closestDist){ | |||||
break; | |||||
} else { | |||||
// Let's remember this | |||||
closestVal = fScaleNoteInVolts; | |||||
closestDist = distAway; | |||||
} | |||||
scaleIndex++; | |||||
if (scaleIndex == notesInScale - 1) { | |||||
scaleIndex = 0; | |||||
searchOctave++; | |||||
} | |||||
} while (true); | |||||
if(scaleIndex == 0) { | |||||
noteFound = notesInScale - 2; // NIS is a count, not index | |||||
} else { | |||||
noteFound = scaleIndex - 1; | |||||
} | |||||
if (debug && stepX % poll == 0) { | |||||
std::cout << "QUANT NIS: " << notesInScale << " scaleIndex: " << scaleIndex << " NF: " << noteFound << std::endl; | |||||
} | |||||
int currNote = (currRoot + curScaleArr[noteFound]) % 12; // So this is the nth note of the scale; | |||||
// case in point, V=0, Scale = F#m returns the 6th note, which should be C# | |||||
if (debug && stepX % poll == 0) { | |||||
// Dump the note and degree, mod the size in case where we have wrapped round | |||||
std::cout << "QUANT Found index in scale: " << noteFound << ", currNote: " << currNote; | |||||
std::cout << " This is scale note: " << curScaleArr[noteFound] << " (Interval: " << intervalNames[curScaleArr[noteFound]] << ")"; | |||||
std::cout << ": " << inVolts << " -> " << closestVal << std::endl; | |||||
} | |||||
*outNote = currNote; | |||||
*outDegree = curScaleArr[noteFound]; | |||||
return closestVal; | |||||
} | |||||
void Core::getRootFromMode(int inMode, int inRoot, int inTonic, int *currRoot, int *quality) { | |||||
*quality = ModeQuality[inMode][inTonic]; | |||||
int positionRelativeToStartOfScale = tonicIndex[inMode + inTonic]; | |||||
int positionStartOfScale = scaleIndex[inMode]; | |||||
// FIXME should be mapped into the Circle of Fifths?? | |||||
*currRoot = inRoot + noteIndex[positionStartOfScale + positionRelativeToStartOfScale]; | |||||
if (*currRoot < 0) { | |||||
*currRoot += 12; | |||||
} | |||||
if (*currRoot > 11) { | |||||
*currRoot -= 12; | |||||
} | |||||
// Quantizer q; | |||||
// | |||||
// std::cout << "Mode: " << inMode | |||||
// << " Root: " << q.noteNames[inRoot] | |||||
// << " Tonic: " << q.tonicNames[inTonic] | |||||
// << " Scale Pos: " << positionStartOfScale | |||||
// << " Rel Pos: " << positionRelativeToStartOfScale | |||||
// << " Note Index: " << positionStartOfScale + positionRelativeToStartOfScale | |||||
// << " Note: " << noteIndex[positionStartOfScale + positionRelativeToStartOfScale] | |||||
// << " Offset: " << ModeOffset[inMode][inTonic] | |||||
// << " Output: " << *currRoot | |||||
// << " " << q.noteNames[*currRoot] | |||||
// << std::endl; | |||||
} | |||||
Core & CoreUtil() { | |||||
static Core core; | |||||
return core; | |||||
} | |||||
// http://c-faq.com/lib/gaussian.html | |||||
double Core::gaussrand() { | |||||
static double U, V; | |||||
static int phase = 0; | |||||
double Z; | |||||
if(phase == 0) { | |||||
U = (rand() + 1.) / (RAND_MAX + 2.); | |||||
V = rand() / (RAND_MAX + 1.); | |||||
Z = sqrt(-2 * log(U)) * sin(2 * M_PI * V); | |||||
} else | |||||
Z = sqrt(-2 * log(U)) * cos(2 * M_PI * V); | |||||
phase = 1 - phase; | |||||
return Z; | |||||
} | |||||
int Core::ipow(int base, int exp) { | |||||
int result = 1; | |||||
while (exp) | |||||
{ | |||||
if (exp & 1) | |||||
result *= base; | |||||
exp >>= 1; | |||||
base *= base; | |||||
} | |||||
return result; | |||||
} | |||||
@@ -1,524 +0,0 @@ | |||||
#pragma once | |||||
#include <iostream> | |||||
#include "dsp/digital.hpp" | |||||
#include "AH.hpp" | |||||
struct AHPulseGenerator { | |||||
float time = 0.f; | |||||
float pulseTime = 0.f; | |||||
bool ishigh() { | |||||
return time < pulseTime; | |||||
} | |||||
bool process(float deltaTime) { | |||||
time += deltaTime; | |||||
return time < pulseTime; | |||||
} | |||||
bool trigger(float pulseTime) { | |||||
// Keep the previous pulseTime if the existing pulse would be held longer than the currently requested one. | |||||
if (time + pulseTime >= this->pulseTime) { | |||||
time = 0.f; | |||||
this->pulseTime = pulseTime; | |||||
return true; | |||||
} else { | |||||
return false; | |||||
} | |||||
} | |||||
}; | |||||
struct BpmCalculator { | |||||
float timer = 0.0f; | |||||
int misses = 0; | |||||
float seconds = 0; | |||||
SchmittTrigger gateTrigger; | |||||
inline bool checkBeat(int mult) { | |||||
return ( ((timer - mult * seconds) * (timer - mult * seconds) / (seconds * seconds) < 0.2f ) && misses < 4); | |||||
} | |||||
float calculateBPM(float delta, float input) { | |||||
if (gateTrigger.process(input) ) { | |||||
if (timer > 0) { | |||||
float new_seconds; | |||||
bool found = false; | |||||
for(int mult = 1; !found && mult < 20; mult++ ) { | |||||
if (checkBeat(mult)) { | |||||
new_seconds = timer / mult; | |||||
if (mult == 1) { | |||||
misses = 0; | |||||
} else { | |||||
misses++; | |||||
} | |||||
found = true; | |||||
}; | |||||
}; | |||||
if (!found) { | |||||
// std::cerr << "default. misses = " << misses << "\n"; | |||||
new_seconds = timer; | |||||
misses = 0; | |||||
} | |||||
float a = 0.5f; // params[SMOOTH_PARAM].value; | |||||
seconds = ((1.0f - a) * seconds + a * new_seconds); | |||||
timer -= seconds; | |||||
} | |||||
}; | |||||
timer += delta; | |||||
if (seconds < 2.0e-05) { | |||||
return 0.0f; | |||||
} else { | |||||
return 60.0f / seconds; | |||||
} | |||||
}; | |||||
}; | |||||
struct ChordDef { | |||||
int number; | |||||
std::string quality; | |||||
int root[6]; | |||||
int first[6]; | |||||
int second[6]; | |||||
}; | |||||
struct Core { | |||||
static constexpr float TRIGGER = 5e-4; | |||||
static constexpr float SEMITONE = 1.0 / 12.0; | |||||
// Reference, midi note to scale | |||||
// 0 1 | |||||
// 1 b2 (#1) | |||||
// 2 2 | |||||
// 3 b3 (#2) | |||||
// 4 3 | |||||
// 5 4 | |||||
// 6 b5 (#4) | |||||
// 7 5 | |||||
// 8 b6 (#5) | |||||
// 9 6 | |||||
// 10 b7 (#6) | |||||
// 11 7 | |||||
// http://www.grantmuller.com/MidiReference/doc/midiReference/ScaleReference.html | |||||
// Although their definition of the Blues scale is wrong | |||||
// Added the octave note to ensure that the last note is correctly processed | |||||
int ASCALE_CHROMATIC [13]= {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12}; // All of the notes | |||||
int ASCALE_IONIAN [8] = {0, 2, 4, 5, 7, 9, 11, 12}; // 1,2,3,4,5,6,7 | |||||
int ASCALE_DORIAN [8] = {0, 2, 3, 5, 7, 9, 10, 12}; // 1,2,b3,4,5,6,b7 | |||||
int ASCALE_PHRYGIAN [8] = {0, 1, 3, 5, 7, 8, 10, 12}; // 1,b2,b3,4,5,b6,b7 | |||||
int ASCALE_LYDIAN [8] = {0, 2, 4, 6, 7, 9, 10, 12}; // 1,2,3,#4,5,6,7 | |||||
int ASCALE_MIXOLYDIAN [8] = {0, 2, 4, 5, 7, 9, 10, 12}; // 1,2,3,4,5,6,b7 | |||||
int ASCALE_AEOLIAN [8] = {0, 2, 3, 5, 7, 8, 10, 12}; // 1,2,b3,4,5,b6,b7 | |||||
int ASCALE_LOCRIAN [8] = {0, 1, 3, 5, 6, 8, 10, 12}; // 1,b2,b3,4,b5,b6,b7 | |||||
int ASCALE_MAJOR_PENTA [6] = {0, 2, 4, 7, 9, 12}; // 1,2,3,5,6 | |||||
int ASCALE_MINOR_PENTA [6] = {0, 3, 5, 7, 10, 12}; // 1,b3,4,5,b7 | |||||
int ASCALE_HARMONIC_MINOR [8] = {0, 2, 3, 5, 7, 8, 11, 12}; // 1,2,b3,4,5,b6,7 | |||||
int ASCALE_BLUES [7] = {0, 3, 5, 6, 7, 10, 12}; // 1,b3,4,b5,5,b7 | |||||
enum Notes { | |||||
NOTE_C = 0, | |||||
NOTE_D_FLAT, // C Sharp | |||||
NOTE_D, | |||||
NOTE_E_FLAT, // D Sharp | |||||
NOTE_E, | |||||
NOTE_F, | |||||
NOTE_G_FLAT, //F Sharp | |||||
NOTE_G, | |||||
NOTE_A_FLAT, // G Sharp | |||||
NOTE_A, | |||||
NOTE_B_FLAT, // A Sharp | |||||
NOTE_B, | |||||
NUM_NOTES | |||||
}; | |||||
int CIRCLE_FIFTHS [12] = { | |||||
NOTE_C, | |||||
NOTE_G, | |||||
NOTE_D, | |||||
NOTE_A, | |||||
NOTE_E, | |||||
NOTE_B, | |||||
NOTE_G_FLAT, | |||||
NOTE_D_FLAT, | |||||
NOTE_A_FLAT, | |||||
NOTE_E_FLAT, | |||||
NOTE_B_FLAT, | |||||
NOTE_F | |||||
}; | |||||
std::string noteNames[12] = { | |||||
"C", | |||||
"C#/Db", | |||||
"D", | |||||
"D#/Eb", | |||||
"E", | |||||
"F", | |||||
"F#/Gb", | |||||
"G", | |||||
"G#/Ab", | |||||
"A", | |||||
"A#/Bb", | |||||
"B", | |||||
}; | |||||
enum Scales { | |||||
SCALE_CHROMATIC = 0, | |||||
SCALE_IONIAN, | |||||
SCALE_DORIAN, | |||||
SCALE_PHRYGIAN, | |||||
SCALE_LYDIAN, | |||||
SCALE_MIXOLYDIAN, | |||||
SCALE_AEOLIAN, | |||||
SCALE_LOCRIAN, | |||||
SCALE_MAJOR_PENTA, | |||||
SCALE_MINOR_PENTA, | |||||
SCALE_HARMONIC_MINOR, | |||||
SCALE_BLUES, | |||||
NUM_SCALES | |||||
}; | |||||
std::string scaleNames[12] = { | |||||
"Chromatic", | |||||
"Ionian (Major)", | |||||
"Dorian", | |||||
"Phrygian", | |||||
"Lydian", | |||||
"Mixolydian", | |||||
"Aeolian (Natural Minor)", | |||||
"Locrian", | |||||
"Major Pentatonic", | |||||
"Minor Pentatonic", | |||||
"Harmonic Minor", | |||||
"Blues" | |||||
}; | |||||
std::string intervalNames[13] { | |||||
"1", | |||||
"b2", | |||||
"2", | |||||
"b3", | |||||
"3", | |||||
"4", | |||||
"b5", | |||||
"5", | |||||
"b6", | |||||
"6", | |||||
"b7", | |||||
"7", | |||||
"O" | |||||
}; | |||||
enum Modes { | |||||
MODE_IONIAN = 0, | |||||
MODE_DORIAN, | |||||
MODE_PHRYGIAN, | |||||
MODE_LYDIAN, | |||||
MODE_MIXOLYDIAN, | |||||
MODE_AEOLIAN, | |||||
MODE_LOCRIAN, | |||||
NUM_MODES | |||||
}; | |||||
std::string modeNames[7] { | |||||
"Ionian (Major)", | |||||
"Dorian", | |||||
"Phrygian", | |||||
"Lydian", | |||||
"Mixolydian", | |||||
"Aeolian (Natural Minor)", | |||||
"Locrian" | |||||
}; | |||||
enum DEGREES { | |||||
DEGREE_I = 0, | |||||
DEGREE_II, | |||||
DEGREE_III, | |||||
DEGREE_IV, | |||||
DEGREE_V, | |||||
DEGREE_VI, | |||||
DEGREE_VII, | |||||
NUM_DEGREES | |||||
}; | |||||
std::string degreeNames[21] { // Degree * 3 + Quality | |||||
"I", | |||||
"i", | |||||
"i°", | |||||
"II", | |||||
"ii", | |||||
"ii°", | |||||
"III", | |||||
"iii", | |||||
"iii°", | |||||
"IV", | |||||
"iv", | |||||
"iv°", | |||||
"V", | |||||
"v", | |||||
"v°", | |||||
"VI", | |||||
"vi", | |||||
"vi°", | |||||
"VII", | |||||
"vii", | |||||
"vii°" | |||||
}; | |||||
enum Inversion { | |||||
ROOT, | |||||
FIRST_INV, | |||||
SECOND_INV, | |||||
NUM_INV | |||||
}; | |||||
std::string inversionNames[5] { | |||||
"", | |||||
"(1)", | |||||
"(2)" | |||||
}; | |||||
enum Quality { | |||||
MAJ = 0, | |||||
MIN, | |||||
DIM, | |||||
NUM_QUALITY | |||||
}; | |||||
std::string qualityNames[3] { | |||||
"Maj", | |||||
"Min", | |||||
"Dim" | |||||
}; | |||||
double gaussrand(); | |||||
int ipow(int base, int exp); | |||||
bool debug = false; | |||||
int poll = 100000; | |||||
int stepX = 0; | |||||
/* | |||||
* Convert a V/OCT voltage to a quantized pitch, key and scale, and calculate various information about the quantised note. | |||||
*/ | |||||
float getPitchFromVolts(float inVolts, int inRoot, int inScale, int *outNote, int *outDegree); | |||||
float getPitchFromVolts(float inVolts, float inRoot, float inScale, int *outRoot, int *outScale, int *outNote, int *outDegree); | |||||
/* | |||||
* Convert a root note (relative to C, C=0) and positive semi-tone offset from that root to a voltage (1V/OCT, 0V = C4 (or 3??)) | |||||
*/ | |||||
float getVoltsFromPitch(int inNote, int inRoot){ | |||||
return (inRoot + inNote) * SEMITONE; | |||||
} | |||||
float getVoltsFromScale(int scale) { | |||||
return rescale(scale, 0.0f, NUM_SCALES - 1, 0.0f, 10.0f); | |||||
} | |||||
int getScaleFromVolts(float volts) { | |||||
return round(rescale(fabs(volts), 0.0f, 10.0f, 0.0f, NUM_SCALES - 1)); | |||||
} | |||||
int getModeFromVolts(float volts) { | |||||
int mode = round(rescale(fabs(volts), 0.0f, 10.0f, 0.0f, NUM_SCALES - 1)); | |||||
return clamp(mode - 1, 0, 6); | |||||
} | |||||
float getVoltsFromMode(int mode) { | |||||
// Mode 0 = IONIAN, MODE 6 = LOCRIAN -> Scale 1 - 7 | |||||
return rescale(mode + 1, 0.0f, NUM_SCALES - 1, 0.0f, 10.0f); | |||||
} | |||||
float getVoltsFromKey(int key) { | |||||
return rescale(key, 0.0f, NUM_NOTES - 1, 0.0f, 10.0f); | |||||
} | |||||
int getKeyFromVolts(float volts) { | |||||
return round(rescale(fabs(volts), 0.0f, 10.0f, 0.0f, NUM_NOTES - 1)); | |||||
} | |||||
void getRootFromMode(int inMode, int inRoot, int inTonic, int *currRoot, int *quality); | |||||
const static int NUM_CHORDS = 99; | |||||
ChordDef ChordTable[NUM_CHORDS] { | |||||
{ 0 ,"None",{ -24 , -24 , -24 , -24 , -24 , -24 },{ -24 , -24 , -24 , -24 , -24 , -24 },{ -24 , -24 , -24 , -24 , -24 , -24 }}, | |||||
{ 1 ,"",{ 0 , 4 , 7 , -24 , -20 , -17 },{ 12 , 4 , 7 , -12 , -20 , -17 },{ 12 , 16 , 7 , -12 , -8 , -17 }}, | |||||
{ 2 ,"M#5",{ 0 , 4 , 8 , -24 , -20 , -16 },{ 12 , 4 , 8 , -12 , -20 , -16 },{ 12 , 16 , 8 , -12 , -8 , -16 }}, | |||||
{ 3 ,"M#5add9",{ 0 , 4 , 8 , 14 , -24 , -20 },{ 12 , 4 , 8 , 14 , -24 , -20 },{ 12 , 16 , 8 , 14 , -12 , -20 }}, | |||||
{ 4 ,"M13",{ 0 , 4 , 7 , 11 , 14 , 21 },{ 12 , 4 , 7 , 11 , 14 , 21 },{ 12 , 16 , 7 , 11 , 14 , 21 }}, | |||||
{ 5 ,"M6",{ 0 , 4 , 7 , 21 , -24 , -20 },{ 12 , 4 , 7 , 21 , -24 , -20 },{ 12 , 16 , 7 , 21 , -12 , -20 }}, | |||||
{ 6 ,"M6#11",{ 0 , 4 , 7 , 9 , 18 , -24 },{ 12 , 4 , 7 , 9 , 18 , -24 },{ 12 , 16 , 7 , 9 , 18 , -24 }}, | |||||
{ 7 ,"M6/9",{ 0 , 4 , 7 , 9 , 14 , -24 },{ 12 , 4 , 7 , 9 , 14 , -24 },{ 12 , 16 , 7 , 9 , 14 , -24 }}, | |||||
{ 8 ,"M6/9#11",{ 0 , 4 , 7 , 9 , 14 , 18 },{ 12 , 4 , 7 , 9 , 14 , 18 },{ 12 , 16 , 7 , 9 , 14 , 18 }}, | |||||
{ 9 ,"M7#11",{ 0 , 4 , 7 , 11 , 18 , -24 },{ 12 , 4 , 7 , 11 , 18 , -24 },{ 12 , 16 , 7 , 11 , 18 , -24 }}, | |||||
{ 10 ,"M7#5",{ 0 , 4 , 8 , 11 , -24 , -20 },{ 12 , 4 , 8 , 11 , -24 , -20 },{ 12 , 16 , 8 , 11 , -12 , -20 }}, | |||||
{ 11 ,"M7#5sus4",{ 0 , 5 , 8 , 11 , -24 , -19 },{ 12 , 5 , 8 , 11 , -24 , -19 },{ 12 , 17 , 8 , 11 , -12 , -19 }}, | |||||
{ 12 ,"M7#9#11",{ 0 , 4 , 7 , 11 , 15 , 18 },{ 12 , 4 , 7 , 11 , 15 , 18 },{ 12 , 16 , 7 , 11 , 15 , 18 }}, | |||||
{ 13 ,"M7add13",{ 0 , 4 , 7 , 9 , 11 , 14 },{ 12 , 4 , 7 , 9 , 11 , 14 },{ 12 , 16 , 7 , 9 , 11 , 14 }}, | |||||
{ 14 ,"M7b5",{ 0 , 4 , 6 , 11 , -24 , -20 },{ 12 , 4 , 6 , 11 , -24 , -20 },{ 12 , 16 , 6 , 11 , -12 , -20 }}, | |||||
{ 15 ,"M7b6",{ 0 , 4 , 8 , 11 , -24 , -20 },{ 12 , 4 , 8 , 11 , -24 , -20 },{ 12 , 16 , 8 , 11 , -12 , -20 }}, | |||||
{ 16 ,"M7b9",{ 0 , 4 , 7 , 11 , 13 , -20 },{ 12 , 4 , 7 , 11 , 13 , -20 },{ 12 , 16 , 7 , 11 , 13 , -20 }}, | |||||
{ 17 ,"M7sus4",{ 0 , 5 , 7 , 11 , -24 , -19 },{ 12 , 5 , 7 , 11 , -24 , -19 },{ 12 , 17 , 7 , 11 , -12 , -19 }}, | |||||
{ 18 ,"M9",{ 0 , 4 , 7 , 11 , 14 , -24 },{ 12 , 4 , 7 , 11 , 14 , -24 },{ 12 , 16 , 7 , 11 , 14 , -24 }}, | |||||
{ 19 ,"M9#11",{ 0 , 4 , 7 , 11 , 14 , 18 },{ 12 , 4 , 7 , 11 , 14 , 18 },{ 12 , 16 , 7 , 11 , 14 , 18 }}, | |||||
{ 20 ,"M9#5",{ 0 , 4 , 8 , 11 , 14 , -24 },{ 12 , 4 , 8 , 11 , 14 , -24 },{ 12 , 16 , 8 , 11 , 14 , -24 }}, | |||||
{ 21 ,"M9#5sus4",{ 0 , 5 , 8 , 11 , 14 , -24 },{ 12 , 5 , 8 , 11 , 14 , -24 },{ 12 , 17 , 8 , 11 , 14 , -24 }}, | |||||
{ 22 ,"M9b5",{ 0 , 4 , 6 , 11 , 14 , -24 },{ 12 , 4 , 6 , 11 , 14 , -24 },{ 12 , 16 , 6 , 11 , 14 , -24 }}, | |||||
{ 23 ,"M9sus4",{ 0 , 5 , 7 , 11 , 14 , -24 },{ 12 , 5 , 7 , 11 , 14 , -24 },{ 12 , 17 , 7 , 11 , 14 , -24 }}, | |||||
{ 24 ,"Madd9",{ 0 , 4 , 7 , 14 , -24 , -20 },{ 12 , 4 , 7 , 14 , -24 , -20 },{ 12 , 16 , 7 , 14 , -12 , -20 }}, | |||||
{ 25 ,"Maj7",{ 0 , 4 , 7 , 11 , -24 , -20 },{ 12 , 4 , 7 , 11 , -24 , -20 },{ 12 , 16 , 7 , 11 , -12 , -20 }}, | |||||
{ 26 ,"Mb5",{ 0 , 4 , 6 , -24 , -20 , -18 },{ 12 , 4 , 6 , -12 , -20 , -18 },{ 12 , 16 , 6 , -12 , -8 , -18 }}, | |||||
{ 27 ,"Mb6",{ 0 , 4 , 20 , -24 , -20 , -4 },{ 12 , 4 , 20 , -12 , -20 , -4 },{ 12 , 16 , 20 , -12 , -8 , -4 }}, | |||||
{ 28 ,"Msus2",{ 0 , 2 , 7 , -24 , -22 , -17 },{ 12 , 2 , 7 , -12 , -22 , -17 },{ 12 , 14 , 7 , -12 , -10 , -17 }}, | |||||
{ 29 ,"Msus4",{ 0 , 5 , 7 , -24 , -19 , -17 },{ 12 , 5 , 7 , -12 , -19 , -17 },{ 12 , 17 , 7 , -12 , -7 , -17 }}, | |||||
{ 30 ,"Maddb9",{ 0 , 4 , 7 , 13 , -24 , -20 },{ 12 , 4 , 7 , 13 , -24 , -20 },{ 12 , 16 , 7 , 13 , -12 , -20 }}, | |||||
{ 31 ,"7",{ 0 , 4 , 7 , 10 , -24 , -20 },{ 12 , 4 , 7 , 10 , -24 , -20 },{ 12 , 16 , 7 , 10 , -12 , -20 }}, | |||||
{ 32 ,"9",{ 0 , 4 , 7 , 10 , 14 , -24 },{ 12 , 4 , 7 , 10 , 14 , -24 },{ 12 , 16 , 7 , 10 , 14 , -24 }}, | |||||
{ 33 ,"11",{ 0 , 7 , 10 , 14 , 17 , -24 },{ 12 , 7 , 10 , 14 , 17 , -24 },{ 12 , 19 , 10 , 14 , 17 , -24 }}, | |||||
{ 34 ,"13",{ 0 , 4 , 7 , 10 , 14 , 21 },{ 12 , 4 , 7 , 10 , 14 , 21 },{ 12 , 16 , 7 , 10 , 14 , 21 }}, | |||||
{ 35 ,"11b9",{ 0 , 7 , 10 , 13 , 17 , -24 },{ 12 , 7 , 10 , 13 , 17 , -24 },{ 12 , 19 , 10 , 13 , 17 , -24 }}, | |||||
{ 36 ,"13#9",{ 0 , 4 , 7 , 10 , 15 , 21 },{ 12 , 4 , 7 , 10 , 15 , 21 },{ 12 , 16 , 7 , 10 , 15 , 21 }}, | |||||
{ 37 ,"13b5",{ 0 , 4 , 6 , 9 , 10 , 14 },{ 12 , 4 , 6 , 9 , 10 , 14 },{ 12 , 16 , 6 , 9 , 10 , 14 }}, | |||||
{ 38 ,"13b9",{ 0 , 4 , 7 , 10 , 13 , 21 },{ 12 , 4 , 7 , 10 , 13 , 21 },{ 12 , 16 , 7 , 10 , 13 , 21 }}, | |||||
{ 39 ,"13no5",{ 0 , 4 , 10 , 14 , 21 , -24 },{ 12 , 4 , 10 , 14 , 21 , -24 },{ 12 , 16 , 10 , 14 , 21 , -24 }}, | |||||
{ 40 ,"13sus4",{ 0 , 5 , 7 , 10 , 14 , 21 },{ 12 , 5 , 7 , 10 , 14 , 21 },{ 12 , 17 , 7 , 10 , 14 , 21 }}, | |||||
{ 41 ,"69#11",{ 0 , 4 , 7 , 9 , 14 , 18 },{ 12 , 4 , 7 , 9 , 14 , 18 },{ 12 , 16 , 7 , 9 , 14 , 18 }}, | |||||
{ 42 ,"7#11",{ 0 , 4 , 7 , 10 , 18 , -24 },{ 12 , 4 , 7 , 10 , 18 , -24 },{ 12 , 16 , 7 , 10 , 18 , -24 }}, | |||||
{ 43 ,"7#11b13",{ 0 , 4 , 7 , 10 , 18 , 20 },{ 12 , 4 , 7 , 10 , 18 , 20 },{ 12 , 16 , 7 , 10 , 18 , 20 }}, | |||||
{ 44 ,"7#5",{ 0 , 4 , 8 , 10 , -24 , -20 },{ 12 , 4 , 8 , 10 , -24 , -20 },{ 12 , 16 , 8 , 10 , -12 , -20 }}, | |||||
{ 45 ,"7#5#9",{ 0 , 4 , 8 , 10 , 15 , -24 },{ 12 , 4 , 8 , 10 , 15 , -24 },{ 12 , 16 , 8 , 10 , 15 , -24 }}, | |||||
{ 46 ,"7#5b9",{ 0 , 4 , 8 , 10 , 13 , -24 },{ 12 , 4 , 8 , 10 , 13 , -24 },{ 12 , 16 , 8 , 10 , 13 , -24 }}, | |||||
{ 47 ,"7#5b9#11",{ 0 , 4 , 8 , 10 , 13 , 18 },{ 12 , 4 , 8 , 10 , 13 , 18 },{ 12 , 16 , 8 , 10 , 13 , 18 }}, | |||||
{ 48 ,"7#5sus4",{ 0 , 5 , 8 , 10 , -24 , -19 },{ 12 , 5 , 8 , 10 , -24 , -19 },{ 12 , 17 , 8 , 10 , -12 , -19 }}, | |||||
{ 49 ,"7#9",{ 0 , 4 , 7 , 10 , 15 , -24 },{ 12 , 4 , 7 , 10 , 15 , -24 },{ 12 , 16 , 7 , 10 , 15 , -24 }}, | |||||
{ 50 ,"7#9#11",{ 0 , 4 , 7 , 10 , 15 , 18 },{ 12 , 4 , 7 , 10 , 15 , 18 },{ 12 , 16 , 7 , 10 , 15 , 18 }}, | |||||
{ 51 ,"7#9b13",{ 0 , 4 , 7 , 10 , 15 , 20 },{ 12 , 4 , 7 , 10 , 15 , 20 },{ 12 , 16 , 7 , 10 , 15 , 20 }}, | |||||
{ 52 ,"7add6",{ 0 , 4 , 7 , 10 , 21 , -24 },{ 12 , 4 , 7 , 10 , 21 , -24 },{ 12 , 16 , 7 , 10 , 21 , -24 }}, | |||||
{ 53 ,"7b13",{ 0 , 4 , 10 , 20 , -24 , -20 },{ 12 , 4 , 10 , 20 , -24 , -20 },{ 12 , 16 , 10 , 20 , -12 , -20 }}, | |||||
{ 54 ,"7b5",{ 0 , 4 , 6 , 10 , -24 , -20 },{ 12 , 4 , 6 , 10 , -24 , -20 },{ 12 , 16 , 6 , 10 , -12 , -20 }}, | |||||
{ 55 ,"7b6",{ 0 , 4 , 7 , 8 , 10 , -24 },{ 12 , 4 , 7 , 8 , 10 , -24 },{ 12 , 16 , 7 , 8 , 10 , -24 }}, | |||||
{ 56 ,"7b9",{ 0 , 4 , 7 , 10 , 13 , -24 },{ 12 , 4 , 7 , 10 , 13 , -24 },{ 12 , 16 , 7 , 10 , 13 , -24 }}, | |||||
{ 57 ,"7b9#11",{ 0 , 4 , 7 , 10 , 13 , 18 },{ 12 , 4 , 7 , 10 , 13 , 18 },{ 12 , 16 , 7 , 10 , 13 , 18 }}, | |||||
{ 58 ,"7b9#9",{ 0 , 4 , 7 , 10 , 13 , 15 },{ 12 , 4 , 7 , 10 , 13 , 15 },{ 12 , 16 , 7 , 10 , 13 , 15 }}, | |||||
{ 59 ,"7b9b13",{ 0 , 4 , 7 , 10 , 13 , 20 },{ 12 , 4 , 7 , 10 , 13 , 20 },{ 12 , 16 , 7 , 10 , 13 , 20 }}, | |||||
{ 60 ,"7no5",{ 0 , 4 , 10 , -24 , -20 , -14 },{ 12 , 4 , 10 , -12 , -20 , -14 },{ 12 , 16 , 10 , -12 , -8 , -14 }}, | |||||
{ 61 ,"7sus4",{ 0 , 5 , 7 , 10 , -24 , -19 },{ 12 , 5 , 7 , 10 , -24 , -19 },{ 12 , 17 , 7 , 10 , -12 , -19 }}, | |||||
{ 62 ,"7sus4b9",{ 0 , 5 , 7 , 10 , 13 , -24 },{ 12 , 5 , 7 , 10 , 13 , -24 },{ 12 , 17 , 7 , 10 , 13 , -24 }}, | |||||
{ 63 ,"7sus4b9b13",{ 0 , 5 , 7 , 10 , 13 , 20 },{ 12 , 5 , 7 , 10 , 13 , 20 },{ 12 , 17 , 7 , 10 , 13 , 20 }}, | |||||
{ 64 ,"9#11",{ 0 , 4 , 7 , 10 , 14 , 18 },{ 12 , 4 , 7 , 10 , 14 , 18 },{ 12 , 16 , 7 , 10 , 14 , 18 }}, | |||||
{ 65 ,"9#5",{ 0 , 4 , 8 , 10 , 14 , -24 },{ 12 , 4 , 8 , 10 , 14 , -24 },{ 12 , 16 , 8 , 10 , 14 , -24 }}, | |||||
{ 66 ,"9#5#11",{ 0 , 4 , 8 , 10 , 14 , 18 },{ 12 , 4 , 8 , 10 , 14 , 18 },{ 12 , 16 , 8 , 10 , 14 , 18 }}, | |||||
{ 67 ,"9b13",{ 0 , 4 , 10 , 14 , 20 , -24 },{ 12 , 4 , 10 , 14 , 20 , -24 },{ 12 , 16 , 10 , 14 , 20 , -24 }}, | |||||
{ 68 ,"9b5",{ 0 , 4 , 6 , 10 , 14 , -24 },{ 12 , 4 , 6 , 10 , 14 , -24 },{ 12 , 16 , 6 , 10 , 14 , -24 }}, | |||||
{ 69 ,"9no5",{ 0 , 4 , 10 , 14 , -24 , -20 },{ 12 , 4 , 10 , 14 , -24 , -20 },{ 12 , 16 , 10 , 14 , -12 , -20 }}, | |||||
{ 70 ,"9sus4",{ 0 , 5 , 7 , 10 , 14 , -24 },{ 12 , 5 , 7 , 10 , 14 , -24 },{ 12 , 17 , 7 , 10 , 14 , -24 }}, | |||||
{ 71 ,"m",{ 0 , 3 , 7 , -24 , -21 , -17 },{ 12 , 3 , 7 , -12 , -21 , -17 },{ 12 , 15 , 7 , -12 , -9 , -17 }}, | |||||
{ 72 ,"m#5",{ 0 , 3 , 8 , -24 , -21 , -16 },{ 12 , 3 , 8 , -12 , -21 , -16 },{ 12 , 15 , 8 , -12 , -9 , -16 }}, | |||||
{ 73 ,"m11",{ 0 , 3 , 7 , 10 , 14 , 17 },{ 12 , 3 , 7 , 10 , 14 , 17 },{ 12 , 15 , 7 , 10 , 14 , 17 }}, | |||||
{ 74 ,"m11A5",{ 0 , 3 , 8 , 10 , 14 , 17 },{ 12 , 3 , 8 , 10 , 14 , 17 },{ 12 , 15 , 8 , 10 , 14 , 17 }}, | |||||
{ 75 ,"m11b5",{ 0 , 3 , 10 , 14 , 17 , 18 },{ 12 , 3 , 10 , 14 , 17 , 18 },{ 12 , 15 , 10 , 14 , 17 , 18 }}, | |||||
{ 76 ,"m6",{ 0 , 3 , 5 , 7 , 21 , -24 },{ 12 , 3 , 5 , 7 , 21 , -24 },{ 12 , 15 , 5 , 7 , 21 , -24 }}, | |||||
{ 77 ,"m69",{ 0 , 3 , 7 , 9 , 14 , -24 },{ 12 , 3 , 7 , 9 , 14 , -24 },{ 12 , 15 , 7 , 9 , 14 , -24 }}, | |||||
{ 78 ,"m7",{ 0 , 3 , 7 , 10 , -24 , -21 },{ 12 , 3 , 7 , 10 , -24 , -21 },{ 12 , 15 , 7 , 10 , -12 , -21 }}, | |||||
{ 79 ,"m7#5",{ 0 , 3 , 8 , 10 , -24 , -21 },{ 12 , 3 , 8 , 10 , -24 , -21 },{ 12 , 15 , 8 , 10 , -12 , -21 }}, | |||||
{ 80 ,"m7add11",{ 0 , 3 , 7 , 10 , 17 , -24 },{ 12 , 3 , 7 , 10 , 17 , -24 },{ 12 , 15 , 7 , 10 , 17 , -24 }}, | |||||
{ 81 ,"m7b5",{ 0 , 3 , 6 , 10 , -24 , -21 },{ 12 , 3 , 6 , 10 , -24 , -21 },{ 12 , 15 , 6 , 10 , -12 , -21 }}, | |||||
{ 82 ,"m9",{ 0 , 3 , 7 , 10 , 14 , -24 },{ 12 , 3 , 7 , 10 , 14 , -24 },{ 12 , 15 , 7 , 10 , 14 , -24 }}, | |||||
{ 83 ,"#5",{ 0 , 3 , 8 , 10 , 14 , -24 },{ 12 , 3 , 8 , 10 , 14 , -24 },{ 12 , 15 , 8 , 10 , 14 , -24 }}, | |||||
{ 84 ,"m9b5",{ 0 , 3 , 10 , 14 , 18 , -24 },{ 12 , 3 , 10 , 14 , 18 , -24 },{ 12 , 15 , 10 , 14 , 18 , -24 }}, | |||||
{ 85 ,"mMaj7",{ 0 , 3 , 7 , 11 , -24 , -21 },{ 12 , 3 , 7 , 11 , -24 , -21 },{ 12 , 15 , 7 , 11 , -12 , -21 }}, | |||||
{ 86 ,"mMaj7b6",{ 0 , 3 , 7 , 8 , 11 , -24 },{ 12 , 3 , 7 , 8 , 11 , -24 },{ 12 , 15 , 7 , 8 , 11 , -24 }}, | |||||
{ 87 ,"mM9",{ 0 , 3 , 7 , 11 , 14 , -24 },{ 12 , 3 , 7 , 11 , 14 , -24 },{ 12 , 15 , 7 , 11 , 14 , -24 }}, | |||||
{ 88 ,"mM9b6",{ 0 , 3 , 7 , 8 , 11 , 14 },{ 12 , 3 , 7 , 8 , 11 , 14 },{ 12 , 15 , 7 , 8 , 11 , 14 }}, | |||||
{ 89 ,"mb6M7",{ 0 , 3 , 8 , 11 , -24 , -21 },{ 12 , 3 , 8 , 11 , -24 , -21 },{ 12 , 15 , 8 , 11 , -12 , -21 }}, | |||||
{ 90 ,"mb6b9",{ 0 , 3 , 8 , 13 , -24 , -21 },{ 12 , 3 , 8 , 13 , -24 , -21 },{ 12 , 15 , 8 , 13 , -12 , -21 }}, | |||||
{ 91 ,"dim",{ 0 , 3 , 6 , -24 , -21 , -18 },{ 12 , 3 , 6 , -12 , -21 , -18 },{ 12 , 15 , 6 , -12 , -9 , -18 }}, | |||||
{ 92 ,"dim7",{ 0 , 3 , 6 , 21 , -24 , -21 },{ 12 , 3 , 6 , 21 , -24 , -21 },{ 12 , 15 , 6 , 21 , -12 , -21 }}, | |||||
{ 93 ,"dim7M7",{ 0 , 3 , 6 , 9 , 11 , -24 },{ 12 , 3 , 6 , 9 , 11 , -24 },{ 12 , 15 , 6 , 9 , 11 , -24 }}, | |||||
{ 94 ,"dimM7",{ 0 , 3 , 6 , 11 , -24 , -21 },{ 12 , 3 , 6 , 11 , -24 , -21 },{ 12 , 15 , 6 , 11 , -12 , -21 }}, | |||||
{ 95 ,"sus24",{ 0 , 2 , 5 , 7 , -24 , -22 },{ 12 , 2 , 5 , 7 , -24 , -22 },{ 12 , 14 , 5 , 7 , -12 , -22 }}, | |||||
{ 96 ,"augadd#9",{ 0 , 4 , 8 , 15 , -24 , -20 },{ 12 , 4 , 8 , 15 , -24 , -20 },{ 12 , 16 , 8 , 15 , -12 , -20 }}, | |||||
{ 97 ,"madd4",{ 0 , 3 , 5 , 7 , -24 , -21 },{ 12 , 3 , 5 , 7 , -24 , -21 },{ 12 , 15 , 5 , 7 , -12 , -21 }}, | |||||
{ 98 ,"madd9",{ 0 , 3 , 7 , 14 , -24 , -21 },{ 12 , 3 , 7 , 14 , -24 , -21 },{ 12 , 15 , 7 , 14 , -12 , -21 }}, | |||||
}; | |||||
int ModeQuality[7][7] { | |||||
{MAJ,MIN,MIN,MAJ,MAJ,MIN,DIM}, // Ionian | |||||
{MIN,MIN,MAJ,MAJ,MIN,DIM,MAJ}, // Dorian | |||||
{MIN,MAJ,MAJ,MIN,DIM,MAJ,MIN}, // Phrygian | |||||
{MAJ,MAJ,MIN,DIM,MAJ,MIN,MIN}, // Lydian | |||||
{MAJ,MIN,DIM,MAJ,MIN,MIN,MAJ}, // Mixolydian | |||||
{MIN,DIM,MAJ,MIN,MIN,MAJ,MAJ}, // Aeolian | |||||
{DIM,MAJ,MIN,MIN,MAJ,MAJ,MIN} // Locrian | |||||
}; | |||||
int ModeOffset[7][7] { | |||||
{0,0,0,0,0,0,0}, // Ionian | |||||
{0,0,-1,-1,0,0,-1}, // Dorian | |||||
{0,-1,-1,0,0,-1,-1}, // Phrygian | |||||
{0,0,0,1,0,0,0}, // Lydian | |||||
{0,0,0,0,0,0,-1}, // Mixolydian | |||||
{0,0,-1,0,0,-1,-1}, // Aeolian | |||||
{0,-1,-1,0,-1,-1,-1} // Locrian | |||||
}; | |||||
// NOTE_C = 0, | |||||
// NOTE_D_FLAT, // C Sharp | |||||
// NOTE_D, | |||||
// NOTE_E_FLAT, // D Sharp | |||||
// NOTE_E, | |||||
// NOTE_F, | |||||
// NOTE_G_FLAT, //F Sharp | |||||
// NOTE_G, | |||||
// NOTE_A_FLAT, // G Sharp | |||||
// NOTE_A, | |||||
// NOTE_B_FLAT, // A Sharp | |||||
// NOTE_B, | |||||
//0 1 2 3 4 5 6 7 8 9 10 11 12 | |||||
int tonicIndex[13] {1, 3, 5, 0, 2, 4, 6, 1, 3, 5, 0, 2, 4}; | |||||
int scaleIndex[7] {5, 3, 1, 6, 4, 2, 0}; | |||||
int noteIndex[13] { | |||||
NOTE_G_FLAT, | |||||
NOTE_D_FLAT, | |||||
NOTE_A_FLAT, | |||||
NOTE_E_FLAT, | |||||
NOTE_B_FLAT, | |||||
NOTE_F, | |||||
NOTE_C, | |||||
NOTE_G, | |||||
NOTE_D, | |||||
NOTE_A, | |||||
NOTE_E, | |||||
NOTE_B, | |||||
NOTE_G_FLAT}; | |||||
}; | |||||
Core & CoreUtil(); |
@@ -1,204 +0,0 @@ | |||||
#include "dsp/digital.hpp" | |||||
#include "AH.hpp" | |||||
#include "Core.hpp" | |||||
#include "UI.hpp" | |||||
#include <iostream> | |||||
struct Imperfect : AHModule { | |||||
enum ParamIds { | |||||
DELAY_PARAM, | |||||
DELAYSPREAD_PARAM = DELAY_PARAM + 8, | |||||
LENGTH_PARAM = DELAYSPREAD_PARAM + 8, | |||||
LENGTHSPREAD_PARAM = LENGTH_PARAM + 8, | |||||
DIVISION_PARAM = LENGTHSPREAD_PARAM + 8, | |||||
NUM_PARAMS = DIVISION_PARAM + 8 | |||||
}; | |||||
enum InputIds { | |||||
TRIG_INPUT, | |||||
NUM_INPUTS = TRIG_INPUT + 8 | |||||
}; | |||||
enum OutputIds { | |||||
OUT_OUTPUT, | |||||
NUM_OUTPUTS = OUT_OUTPUT + 8 | |||||
}; | |||||
enum LightIds { | |||||
OUT_LIGHT, | |||||
NUM_LIGHTS = OUT_LIGHT + 16 | |||||
}; | |||||
Imperfect() : AHModule(NUM_PARAMS, NUM_INPUTS, NUM_OUTPUTS, NUM_LIGHTS) { | |||||
reset(); | |||||
} | |||||
void step() override; | |||||
void reset() override { | |||||
for (int i = 0; i < 8; i++) { | |||||
delayState[i] = false; | |||||
gateState[i] = false; | |||||
delayTime[i] = 0.0; | |||||
gateTime[i] = 0.0; | |||||
} | |||||
} | |||||
Core core; | |||||
bool delayState[8]; | |||||
bool gateState[8]; | |||||
float delayTime[8]; | |||||
float gateTime[8]; | |||||
PulseGenerator delayPhase[8]; | |||||
PulseGenerator gatePhase[8]; | |||||
SchmittTrigger inTrigger[8]; | |||||
int counter[8]; | |||||
}; | |||||
void Imperfect::step() { | |||||
stepX++; | |||||
float dlyLen; | |||||
float dlySpr; | |||||
float gateLen; | |||||
float gateSpr; | |||||
int lastValidInput = -1; | |||||
for (int i = 0; i < 8; i++) { | |||||
bool generateSignal = false; | |||||
bool inputActive = inputs[TRIG_INPUT + i].active; | |||||
bool haveTrigger = inTrigger[i].process(inputs[TRIG_INPUT + i].value); | |||||
bool outputActive = outputs[OUT_OUTPUT + i].active; | |||||
// If we have an active input, we should forget about previous valid inputs | |||||
if (inputActive) { | |||||
lastValidInput = -1; | |||||
if (haveTrigger) { | |||||
if (debug()) { std::cout << stepX << " " << i << " has active input and has received trigger" << std::endl; } | |||||
generateSignal = true; | |||||
lastValidInput = i; | |||||
} | |||||
} else { | |||||
// We have an output and previously seen a trigger | |||||
if (outputActive && lastValidInput > -1) { | |||||
if (debug()) { std::cout << stepX << " " << i << " has active out and has seen trigger on " << lastValidInput << std::endl; } | |||||
generateSignal = true; | |||||
} | |||||
} | |||||
if (generateSignal) { | |||||
counter[i]++; | |||||
int target = core.ipow(2,params[DIVISION_PARAM + i].value); | |||||
if (debug()) { | |||||
std::cout << stepX << " Div: " << i << ": Target: " << target << " Cnt: " << counter[lastValidInput] << " Exp: " << counter[lastValidInput] % target << std::endl; | |||||
} | |||||
if (counter[lastValidInput] % target == 0) { | |||||
dlyLen = log2(params[DELAY_PARAM + i].value); | |||||
dlySpr = log2(params[DELAYSPREAD_PARAM + i].value); | |||||
gateLen = log2(params[LENGTH_PARAM + i].value); | |||||
gateSpr = log2(params[LENGTHSPREAD_PARAM + i].value); | |||||
// Determine delay and gate times for all active outputs | |||||
double rndD = clamp(core.gaussrand(), -2.0f, 2.0f); | |||||
delayTime[i] = clamp(dlyLen + dlySpr * rndD, 0.0f, 100.0f); | |||||
// The modified gate time cannot be earlier than the start of the delay | |||||
double rndG = clamp(core.gaussrand(), -2.0f, 2.0f); | |||||
gateTime[i] = clamp(gateLen + gateSpr * rndG, 0.02f, 100.0f); | |||||
if (debug()) { | |||||
std::cout << stepX << " Delay: " << i << ": Len: " << dlyLen << " Spr: " << dlySpr << " r: " << rndD << " = " << delayTime[i] << std::endl; | |||||
std::cout << stepX << " Gate: " << i << ": Len: " << gateLen << ", Spr: " << gateSpr << " r: " << rndG << " = " << gateTime[i] << std::endl; | |||||
} | |||||
// Trigger the respective delay pulse generators | |||||
delayState[i] = true; | |||||
delayPhase[i].trigger(delayTime[i]); | |||||
} | |||||
} | |||||
} | |||||
for (int i = 0; i < 8; i++) { | |||||
if (delayState[i] && !delayPhase[i].process(delta)) { | |||||
gatePhase[i].trigger(gateTime[i]); | |||||
gateState[i] = true; | |||||
delayState[i] = false; | |||||
} | |||||
lights[OUT_LIGHT + i * 2].value = 0.0; | |||||
lights[OUT_LIGHT + i * 2 + 1].value = 0.0; | |||||
if (gatePhase[i].process(delta)) { | |||||
outputs[OUT_OUTPUT + i].value = 10.0; | |||||
lights[OUT_LIGHT + i * 2].value = 1.0; | |||||
lights[OUT_LIGHT + i * 2 + 1].value = 0.0; | |||||
} else { | |||||
outputs[OUT_OUTPUT + i].value = 0.0; | |||||
gateState[i] = false; | |||||
if (delayState[i]) { | |||||
lights[OUT_LIGHT + i * 2].value = 0.0; | |||||
lights[OUT_LIGHT + i * 2 + 1].value = 1.0; | |||||
} | |||||
} | |||||
} | |||||
} | |||||
struct ImperfectWidget : ModuleWidget { | |||||
ImperfectWidget(Imperfect *module); | |||||
}; | |||||
ImperfectWidget::ImperfectWidget(Imperfect *module) : ModuleWidget(module) { | |||||
UI ui; | |||||
box.size = Vec(315, 380); | |||||
{ | |||||
SVGPanel *panel = new SVGPanel(); | |||||
panel->box.size = box.size; | |||||
panel->setBackground(SVG::load(assetPlugin(plugin, "res/Imperfect.svg"))); | |||||
addChild(panel); | |||||
} | |||||
addChild(Widget::create<ScrewSilver>(Vec(15, 0))); | |||||
addChild(Widget::create<ScrewSilver>(Vec(box.size.x - 30, 0))); | |||||
addChild(Widget::create<ScrewSilver>(Vec(15, 365))); | |||||
addChild(Widget::create<ScrewSilver>(Vec(box.size.x - 30, 365))); | |||||
for (int i = 0; i < 8; i++) { | |||||
addInput(Port::create<PJ301MPort>(ui.getPosition(UI::PORT, 0, i + 1, true, true), Port::INPUT, module, Imperfect::TRIG_INPUT + i)); | |||||
addParam(ParamWidget::create<AHKnobNoSnap>(ui.getPosition(UI::KNOB, 1, i + 1, true, true), module, Imperfect::DELAY_PARAM + i, 1.0, 2.0, 1.0)); | |||||
addParam(ParamWidget::create<AHKnobNoSnap>(ui.getPosition(UI::KNOB, 2, i + 1, true, true), module, Imperfect::DELAYSPREAD_PARAM + i, 1.0, 2.0, 1.0)); | |||||
addParam(ParamWidget::create<AHKnobNoSnap>(ui.getPosition(UI::KNOB, 3, i + 1, true, true), module, Imperfect::LENGTH_PARAM + i, 1.001, 2.0, 1.001)); // Always produce gate | |||||
addParam(ParamWidget::create<AHKnobNoSnap>(ui.getPosition(UI::KNOB, 4, i + 1, true, true), module, Imperfect::LENGTHSPREAD_PARAM + i, 1.0, 2.0, 1.0)); | |||||
addParam(ParamWidget::create<AHKnobSnap>(ui.getPosition(UI::KNOB, 5, i + 1, true, true), module, Imperfect::DIVISION_PARAM + i, 0, 8, 0)); | |||||
addChild(ModuleLightWidget::create<MediumLight<GreenRedLight>>(ui.getPosition(UI::LIGHT, 6, i + 1, true, true), module, Imperfect::OUT_LIGHT + i * 2)); | |||||
addOutput(Port::create<PJ301MPort>(ui.getPosition(UI::PORT, 7, i + 1, true, true), Port::OUTPUT, module, Imperfect::OUT_OUTPUT + i)); | |||||
} | |||||
} | |||||
Model *modelImperfect = Model::create<Imperfect, ImperfectWidget>( "Amalgamated Harmonics", "Imperfect", "Imperfect (deprecated)", UTILITY_TAG); | |||||
@@ -1,407 +0,0 @@ | |||||
#include "dsp/digital.hpp" | |||||
#include "AH.hpp" | |||||
#include "Core.hpp" | |||||
#include "UI.hpp" | |||||
#include <iostream> | |||||
struct Imperfect2 : AHModule { | |||||
enum ParamIds { | |||||
ENUMS(DELAY_PARAM,4), | |||||
ENUMS(DELAYSPREAD_PARAM,4), | |||||
ENUMS(LENGTH_PARAM,4), | |||||
ENUMS(LENGTHSPREAD_PARAM,4), | |||||
ENUMS(DIVISION_PARAM,4), | |||||
NUM_PARAMS | |||||
}; | |||||
enum InputIds { | |||||
ENUMS(TRIG_INPUT,4), | |||||
ENUMS(DELAY_INPUT,4), | |||||
ENUMS(DELAYSPREAD_INPUT,4), | |||||
ENUMS(LENGTH_INPUT,4), | |||||
ENUMS(LENGTHSPREAD_INPUT,4), | |||||
NUM_INPUTS | |||||
}; | |||||
enum OutputIds { | |||||
ENUMS(OUT_OUTPUT,4), | |||||
NUM_OUTPUTS | |||||
}; | |||||
enum LightIds { | |||||
ENUMS(OUT_LIGHT,8), | |||||
NUM_LIGHTS | |||||
}; | |||||
Imperfect2() : AHModule(NUM_PARAMS, NUM_INPUTS, NUM_OUTPUTS, NUM_LIGHTS) { | |||||
reset(); | |||||
} | |||||
void step() override; | |||||
void reset() override { | |||||
for (int i = 0; i < 4; i++) { | |||||
delayState[i] = false; | |||||
gateState[i] = false; | |||||
delayTime[i] = 0.0; | |||||
gateTime[i] = 0.0; | |||||
bpm[i] = 0.0; | |||||
} | |||||
} | |||||
Core core; | |||||
bool delayState[4]; | |||||
bool gateState[4]; | |||||
float delayTime[4]; | |||||
int delayTimeMs[4]; | |||||
int delaySprMs[4]; | |||||
float gateTime[4]; | |||||
int gateTimeMs[4]; | |||||
int gateSprMs[4]; | |||||
float bpm[4]; | |||||
int division[4]; | |||||
int actDelayMs[4] = {0, 0, 0, 0}; | |||||
int actGateMs[4] = {0, 0, 0, 0}; | |||||
AHPulseGenerator delayPhase[4]; | |||||
AHPulseGenerator gatePhase[4]; | |||||
SchmittTrigger inTrigger[4]; | |||||
int counter[4]; | |||||
BpmCalculator bpmCalc[4]; | |||||
}; | |||||
void Imperfect2::step() { | |||||
stepX++; | |||||
float dlyLen; | |||||
float dlySpr; | |||||
float gateLen; | |||||
float gateSpr; | |||||
int lastValidInput = -1; | |||||
for (int i = 0; i < 4; i++) { | |||||
bool generateSignal = false; | |||||
bool inputActive = inputs[TRIG_INPUT + i].active; | |||||
bool haveTrigger = inTrigger[i].process(inputs[TRIG_INPUT + i].value); | |||||
bool outputActive = outputs[OUT_OUTPUT + i].active; | |||||
// This is where we manage row-chaining/normalisation, i.e a row can be active without an | |||||
// input by receiving the input clock from a previous (higher) row | |||||
// If we have an active input, we should forget about previous valid inputs | |||||
if (inputActive) { | |||||
bpm[i] = bpmCalc[i].calculateBPM(delta, inputs[TRIG_INPUT + i].value); | |||||
lastValidInput = -1; | |||||
if (haveTrigger) { | |||||
if (debug()) { std::cout << stepX << " " << i << " has active input and has received trigger" << std::endl; } | |||||
generateSignal = true; | |||||
lastValidInput = i; // Row i has a valid input | |||||
} | |||||
} else { | |||||
// We have an output plugged in this row and previously seen a trigger on previous row | |||||
if (outputActive && lastValidInput > -1) { | |||||
if (debug()) { std::cout << stepX << " " << i << " has active out and has seen trigger on " << lastValidInput << std::endl; } | |||||
generateSignal = true; | |||||
} | |||||
bpm[i] = 0.0; | |||||
} | |||||
if (inputs[DELAY_INPUT + i].active) { | |||||
dlyLen = log2(fabs(inputs[DELAY_INPUT + i].value) + 1.0f); | |||||
} else { | |||||
dlyLen = log2(params[DELAY_PARAM + i].value); | |||||
} | |||||
if (inputs[DELAYSPREAD_INPUT + i].active) { | |||||
dlySpr = log2(fabs(inputs[DELAYSPREAD_INPUT + i].value) + 1.0f); | |||||
} else { | |||||
dlySpr = log2(params[DELAYSPREAD_PARAM + i].value); | |||||
} | |||||
if (inputs[LENGTH_INPUT + i].active) { | |||||
gateLen = log2(fabs(inputs[LENGTH_INPUT + i].value) + 1.001f); | |||||
} else { | |||||
gateLen = log2(params[LENGTH_PARAM + i].value); | |||||
} | |||||
if (inputs[LENGTHSPREAD_INPUT + i].active) { | |||||
gateSpr = log2(fabs(inputs[LENGTHSPREAD_INPUT + i].value) + 1.0f); | |||||
} else { | |||||
gateSpr = log2(params[LENGTHSPREAD_PARAM + i].value); | |||||
} | |||||
division[i] = params[DIVISION_PARAM + i].value; | |||||
delayTimeMs[i] = dlyLen * 1000; | |||||
delaySprMs[i] = dlySpr * 2000; // scaled by ±2 below | |||||
gateTimeMs[i] = gateLen * 1000; | |||||
gateSprMs[i] = gateSpr * 2000; // scaled by ±2 below | |||||
if (generateSignal) { | |||||
counter[i]++; | |||||
int target = division[i]; | |||||
if (debug()) { | |||||
std::cout << stepX << " Div: " << i << ": Target: " << target << " Cnt: " << counter[lastValidInput] << " Exp: " << counter[lastValidInput] % division[i] << std::endl; | |||||
} | |||||
if (counter[lastValidInput] % target == 0) { | |||||
// check that we are not in the gate phase | |||||
if (!gatePhase[i].ishigh() && !delayPhase[i].ishigh()) { | |||||
// Determine delay and gate times for all active outputs | |||||
double rndD = clamp(core.gaussrand(), -2.0f, 2.0f); | |||||
delayTime[i] = clamp(dlyLen + dlySpr * rndD, 0.0f, 100.0f); | |||||
// The modified gate time cannot be earlier than the start of the delay | |||||
double rndG = clamp(core.gaussrand(), -2.0f, 2.0f); | |||||
gateTime[i] = clamp(gateLen + gateSpr * rndG, Core::TRIGGER, 100.0f); | |||||
if (debug()) { | |||||
std::cout << stepX << " Delay: " << i << ": Len: " << dlyLen << " Spr: " << dlySpr << " r: " << rndD << " = " << delayTime[i] << std::endl; | |||||
std::cout << stepX << " Gate: " << i << ": Len: " << gateLen << ", Spr: " << gateSpr << " r: " << rndG << " = " << gateTime[i] << std::endl; | |||||
} | |||||
// Trigger the respective delay pulse generator | |||||
delayState[i] = true; | |||||
if (delayPhase[i].trigger(delayTime[i])) { | |||||
actDelayMs[i] = delayTime[i] * 1000; | |||||
} | |||||
} | |||||
} | |||||
} | |||||
} | |||||
for (int i = 0; i < 4; i++) { | |||||
if (delayState[i] && !delayPhase[i].process(delta)) { | |||||
if (gatePhase[i].trigger(gateTime[i])) { | |||||
actGateMs[i] = gateTime[i] * 1000; | |||||
} | |||||
gateState[i] = true; | |||||
delayState[i] = false; | |||||
} | |||||
lights[OUT_LIGHT + i * 2].value = 0.0f; | |||||
lights[OUT_LIGHT + i * 2 + 1].value = 0.0f; | |||||
if (gatePhase[i].process(delta)) { | |||||
outputs[OUT_OUTPUT + i].value = 10.0f; | |||||
lights[OUT_LIGHT + i * 2].value = 1.0f; | |||||
lights[OUT_LIGHT + i * 2 + 1].value = 0.0f; | |||||
} else { | |||||
outputs[OUT_OUTPUT + i].value = 0.0f; | |||||
gateState[i] = false; | |||||
if (delayState[i]) { | |||||
lights[OUT_LIGHT + i * 2].value = 0.0f; | |||||
lights[OUT_LIGHT + i * 2 + 1].value = 1.0f; | |||||
} | |||||
} | |||||
} | |||||
} | |||||
struct Imperfect2Box : TransparentWidget { | |||||
Imperfect2 *module; | |||||
int frame = 0; | |||||
std::shared_ptr<Font> font; | |||||
float *bpm; | |||||
int *dly; | |||||
int *dlySpr; | |||||
int *gate; | |||||
int *gateSpr; | |||||
int *division; | |||||
int *actDly; | |||||
int *actGate; | |||||
Imperfect2Box() { | |||||
font = Font::load(assetPlugin(plugin, "res/DSEG14ClassicMini-BoldItalic.ttf")); | |||||
} | |||||
void draw(NVGcontext *vg) override { | |||||
Vec pos = Vec(0, 15); | |||||
nvgFontSize(vg, 10); | |||||
nvgFontFaceId(vg, font->handle); | |||||
nvgTextLetterSpacing(vg, -1); | |||||
nvgTextAlign(vg, NVGalign::NVG_ALIGN_CENTER); | |||||
nvgFillColor(vg, nvgRGBA(255, 0, 0, 0xff)); | |||||
char text[10]; | |||||
if (*bpm == 0.0f) { | |||||
snprintf(text, sizeof(text), "-"); | |||||
} else { | |||||
snprintf(text, sizeof(text), "%.1f", *bpm); | |||||
} | |||||
nvgText(vg, pos.x + 20, pos.y, text, NULL); | |||||
snprintf(text, sizeof(text), "%d", *dly); | |||||
nvgText(vg, pos.x + 74, pos.y, text, NULL); | |||||
if (*dlySpr != 0) { | |||||
snprintf(text, sizeof(text), "%d", *dlySpr); | |||||
nvgText(vg, pos.x + 144, pos.y, text, NULL); | |||||
} | |||||
snprintf(text, sizeof(text), "%d", *gate); | |||||
nvgText(vg, pos.x + 214, pos.y, text, NULL); | |||||
if (*gateSpr != 0) { | |||||
snprintf(text, sizeof(text), "%d", *gateSpr); | |||||
nvgText(vg, pos.x + 284, pos.y, text, NULL); | |||||
} | |||||
snprintf(text, sizeof(text), "%d", *division); | |||||
nvgText(vg, pos.x + 334, pos.y, text, NULL); | |||||
nvgFillColor(vg, nvgRGBA(0, 0, 0, 0xff)); | |||||
snprintf(text, sizeof(text), "%d", *actDly); | |||||
nvgText(vg, pos.x + 372, pos.y, text, NULL); | |||||
snprintf(text, sizeof(text), "%d", *actGate); | |||||
nvgText(vg, pos.x + 408, pos.y, text, NULL); | |||||
} | |||||
}; | |||||
struct Imperfect2Widget : ModuleWidget { | |||||
Imperfect2Widget(Imperfect2 *module); | |||||
}; | |||||
Imperfect2Widget::Imperfect2Widget(Imperfect2 *module) : ModuleWidget(module) { | |||||
UI ui; | |||||
box.size = Vec(450, 380); | |||||
{ | |||||
SVGPanel *panel = new SVGPanel(); | |||||
panel->box.size = box.size; | |||||
panel->setBackground(SVG::load(assetPlugin(plugin, "res/Imperfect2.svg"))); | |||||
addChild(panel); | |||||
} | |||||
addChild(Widget::create<ScrewSilver>(Vec(15, 0))); | |||||
addChild(Widget::create<ScrewSilver>(Vec(box.size.x - 30, 0))); | |||||
addChild(Widget::create<ScrewSilver>(Vec(15, 365))); | |||||
addChild(Widget::create<ScrewSilver>(Vec(box.size.x - 30, 365))); | |||||
{ | |||||
Imperfect2Box *display = new Imperfect2Box(); | |||||
display->module = module; | |||||
display->box.pos = Vec(10, 95); | |||||
display->box.size = Vec(200, 20); | |||||
display->bpm = &(module->bpm[0]); | |||||
display->dly = &(module->delayTimeMs[0]); | |||||
display->dlySpr = &(module->delaySprMs[0]); | |||||
display->gate = &(module->gateTimeMs[0]); | |||||
display->gateSpr = &(module->gateSprMs[0]); | |||||
display->division = &(module->division[0]); | |||||
display->actDly = &(module->actDelayMs[0]); | |||||
display->actGate = &(module->actGateMs[0]); | |||||
addChild(display); | |||||
} | |||||
{ | |||||
Imperfect2Box *display = new Imperfect2Box(); | |||||
display->module = module; | |||||
display->box.pos = Vec(10, 165); | |||||
display->box.size = Vec(200, 20); | |||||
display->bpm = &(module->bpm[1]); | |||||
display->dly = &(module->delayTimeMs[1]); | |||||
display->dlySpr = &(module->delaySprMs[1]); | |||||
display->gate = &(module->gateTimeMs[1]); | |||||
display->gateSpr = &(module->gateSprMs[1]); | |||||
display->division = &(module->division[1]); | |||||
display->actDly = &(module->actDelayMs[1]); | |||||
display->actGate = &(module->actGateMs[1]); | |||||
addChild(display); | |||||
} | |||||
{ | |||||
Imperfect2Box *display = new Imperfect2Box(); | |||||
display->module = module; | |||||
display->box.pos = Vec(10, 235); | |||||
display->box.size = Vec(200, 20); | |||||
display->bpm = &(module->bpm[2]); | |||||
display->dly = &(module->delayTimeMs[2]); | |||||
display->dlySpr = &(module->delaySprMs[2]); | |||||
display->gate = &(module->gateTimeMs[2]); | |||||
display->gateSpr = &(module->gateSprMs[2]); | |||||
display->division = &(module->division[2]); | |||||
display->actDly = &(module->actDelayMs[2]); | |||||
display->actGate = &(module->actGateMs[2]); | |||||
addChild(display); | |||||
} | |||||
{ | |||||
Imperfect2Box *display = new Imperfect2Box(); | |||||
display->module = module; | |||||
display->box.pos = Vec(10, 305); | |||||
display->box.size = Vec(200, 20); | |||||
display->bpm = &(module->bpm[3]); | |||||
display->dly = &(module->delayTimeMs[3]); | |||||
display->dlySpr = &(module->delaySprMs[3]); | |||||
display->gate = &(module->gateTimeMs[3]); | |||||
display->gateSpr = &(module->gateSprMs[3]); | |||||
display->division = &(module->division[3]); | |||||
display->actDly = &(module->actDelayMs[3]); | |||||
display->actGate = &(module->actGateMs[3]); | |||||
addChild(display); | |||||
} | |||||
for (int i = 0; i < 4; i++) { | |||||
addInput(Port::create<PJ301MPort>(ui.getPosition(UI::PORT, 0, i * 2 + 1, true, true), Port::INPUT, module, Imperfect2::TRIG_INPUT + i)); | |||||
addInput(Port::create<PJ301MPort>(ui.getPosition(UI::PORT, 1, i * 2 + 1, true, true), Port::INPUT, module, Imperfect2::DELAY_INPUT + i)); | |||||
addParam(ParamWidget::create<AHKnobNoSnap>(ui.getPosition(UI::KNOB, 2, i * 2 + 1, true, true), module, Imperfect2::DELAY_PARAM + i, 1.0f, 2.0f, 1.0f)); | |||||
addInput(Port::create<PJ301MPort>(ui.getPosition(UI::PORT, 3, i * 2 + 1, true, true), Port::INPUT, module, Imperfect2::DELAYSPREAD_INPUT + i)); | |||||
addParam(ParamWidget::create<AHKnobNoSnap>(ui.getPosition(UI::KNOB, 4, i * 2 + 1, true, true), module, Imperfect2::DELAYSPREAD_PARAM + i, 1.0f, 2.0f, 1.0f)); | |||||
addInput(Port::create<PJ301MPort>(ui.getPosition(UI::PORT, 5, i * 2 + 1, true, true), Port::INPUT, module, Imperfect2::LENGTH_INPUT + i)); | |||||
addParam(ParamWidget::create<AHKnobNoSnap>(ui.getPosition(UI::KNOB, 6, i * 2 + 1, true, true), module, Imperfect2::LENGTH_PARAM + i, 1.001f, 2.0f, 1.001f)); // Always produce gate | |||||
addInput(Port::create<PJ301MPort>(ui.getPosition(UI::PORT, 7, i * 2 + 1, true, true), Port::INPUT, module, Imperfect2::LENGTHSPREAD_INPUT + i)); | |||||
addParam(ParamWidget::create<AHKnobNoSnap>(ui.getPosition(UI::KNOB, 8, i * 2 + 1, true, true), module, Imperfect2::LENGTHSPREAD_PARAM + i, 1.0, 2.0, 1.0f)); | |||||
addParam(ParamWidget::create<AHKnobSnap>(ui.getPosition(UI::KNOB, 9, i * 2 + 1, true, true), module, Imperfect2::DIVISION_PARAM + i, 1, 64, 1)); | |||||
addChild(ModuleLightWidget::create<MediumLight<GreenRedLight>>(ui.getPosition(UI::LIGHT, 10, i * 2 + 1, true, true), module, Imperfect2::OUT_LIGHT + i * 2)); | |||||
addOutput(Port::create<PJ301MPort>(ui.getPosition(UI::PORT, 11, i * 2+ 1, true, true), Port::OUTPUT, module, Imperfect2::OUT_OUTPUT + i)); | |||||
} | |||||
} | |||||
Model *modelImperfect2 = Model::create<Imperfect2, Imperfect2Widget>( "Amalgamated Harmonics", "Imperfect2", "Imperfect MkII", UTILITY_TAG); | |||||
@@ -1,556 +0,0 @@ | |||||
#include "AH.hpp" | |||||
#include "Core.hpp" | |||||
#include "UI.hpp" | |||||
#include "dsp/digital.hpp" | |||||
#include <iostream> | |||||
struct Progress : AHModule { | |||||
const static int NUM_PITCHES = 6; | |||||
enum ParamIds { | |||||
CLOCK_PARAM, | |||||
RUN_PARAM, | |||||
RESET_PARAM, | |||||
STEPS_PARAM, | |||||
ENUMS(ROOT_PARAM,8), | |||||
ENUMS(CHORD_PARAM,8), | |||||
ENUMS(INV_PARAM,8), | |||||
ENUMS(GATE_PARAM,8), | |||||
NUM_PARAMS | |||||
}; | |||||
enum InputIds { | |||||
KEY_INPUT, | |||||
MODE_INPUT, | |||||
CLOCK_INPUT, | |||||
EXT_CLOCK_INPUT, | |||||
RESET_INPUT, | |||||
STEPS_INPUT, | |||||
NUM_INPUTS | |||||
}; | |||||
enum OutputIds { | |||||
GATES_OUTPUT, | |||||
ENUMS(PITCH_OUTPUT,6), | |||||
ENUMS(GATE_OUTPUT,8), | |||||
NUM_OUTPUTS | |||||
}; | |||||
enum LightIds { | |||||
RUNNING_LIGHT, | |||||
RESET_LIGHT, | |||||
GATES_LIGHT, | |||||
ENUMS(GATE_LIGHTS,8), | |||||
NUM_LIGHTS | |||||
}; | |||||
float sampleRate; | |||||
Progress() : AHModule(NUM_PARAMS, NUM_INPUTS, NUM_OUTPUTS, NUM_LIGHTS) { | |||||
sampleRate = engineGetSampleRate(); | |||||
} | |||||
void onSampleRateChange() override { | |||||
sampleRate = engineGetSampleRate(); | |||||
} | |||||
void step() override; | |||||
enum ParamType { | |||||
ROOT_TYPE, | |||||
CHORD_TYPE, | |||||
INV_TYPE | |||||
}; | |||||
void receiveEvent(ParamEvent e) override { | |||||
if (receiveEvents && e.pType != -1) { // AHParamWidgets that are no config through set<>() have a pType of -1 | |||||
if (modeMode) { | |||||
paramState = "> " + | |||||
CoreUtil().noteNames[currRoot[e.pId]] + | |||||
CoreUtil().ChordTable[currChord[e.pId]].quality + " " + | |||||
CoreUtil().inversionNames[currInv[e.pId]] + " " + "[" + | |||||
CoreUtil().degreeNames[currDegree[e.pId] * 3 + currQuality[e.pId]] + "]"; | |||||
} else { | |||||
paramState = "> " + | |||||
CoreUtil().noteNames[currRoot[e.pId]] + | |||||
CoreUtil().ChordTable[currChord[e.pId]].quality + " " + | |||||
CoreUtil().inversionNames[currInv[e.pId]]; | |||||
} | |||||
} | |||||
keepStateDisplay = 0; | |||||
} | |||||
json_t *toJson() override { | |||||
json_t *rootJ = json_object(); | |||||
// running | |||||
json_object_set_new(rootJ, "running", json_boolean(running)); | |||||
// gates | |||||
json_t *gatesJ = json_array(); | |||||
for (int i = 0; i < 8; i++) { | |||||
json_t *gateJ = json_integer((int) gates[i]); | |||||
json_array_append_new(gatesJ, gateJ); | |||||
} | |||||
json_object_set_new(rootJ, "gates", gatesJ); | |||||
// gateMode | |||||
json_t *gateModeJ = json_integer((int) gateMode); | |||||
json_object_set_new(rootJ, "gateMode", gateModeJ); | |||||
return rootJ; | |||||
} | |||||
void fromJson(json_t *rootJ) override { | |||||
// running | |||||
json_t *runningJ = json_object_get(rootJ, "running"); | |||||
if (runningJ) | |||||
running = json_is_true(runningJ); | |||||
// gates | |||||
json_t *gatesJ = json_object_get(rootJ, "gates"); | |||||
if (gatesJ) { | |||||
for (int i = 0; i < 8; i++) { | |||||
json_t *gateJ = json_array_get(gatesJ, i); | |||||
if (gateJ) | |||||
gates[i] = !!json_integer_value(gateJ); | |||||
} | |||||
} | |||||
// gateMode | |||||
json_t *gateModeJ = json_object_get(rootJ, "gateMode"); | |||||
if (gateModeJ) | |||||
gateMode = (GateMode)json_integer_value(gateModeJ); | |||||
} | |||||
bool running = true; | |||||
// for external clock | |||||
SchmittTrigger clockTrigger; | |||||
// For buttons | |||||
SchmittTrigger runningTrigger; | |||||
SchmittTrigger resetTrigger; | |||||
SchmittTrigger gateTriggers[8]; | |||||
PulseGenerator gatePulse; | |||||
/** Phase of internal LFO */ | |||||
float phase = 0.0f; | |||||
// Step index | |||||
int index = 0; | |||||
bool gates[8] = {true,true,true,true,true,true,true,true}; | |||||
float resetLight = 0.0f; | |||||
float gateLight = 0.0f; | |||||
float stepLights[8] = {}; | |||||
enum GateMode { | |||||
TRIGGER, | |||||
RETRIGGER, | |||||
CONTINUOUS, | |||||
}; | |||||
GateMode gateMode = CONTINUOUS; | |||||
bool modeMode = false; | |||||
bool prevModeMode = false; | |||||
int offset = 24; // Repeated notes in chord and expressed in the chord definition as being transposed 2 octaves lower. | |||||
// When played this offset needs to be removed (or the notes removed, or the notes transposed to an octave higher) | |||||
float prevRootInput[8] = {-100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0}; | |||||
float prevChrInput[8] = {-100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0}; | |||||
float prevDegreeInput[8] = {-100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0}; | |||||
float prevQualityInput[8] = {-100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0}; | |||||
float prevInvInput[8] = {-100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0}; | |||||
float currRootInput[8]; | |||||
float currChrInput[8]; | |||||
float currDegreeInput[8]; | |||||
float currQualityInput[8]; | |||||
float currInvInput[8]; | |||||
int currMode; | |||||
int currKey; | |||||
int prevMode = -1; | |||||
int prevKey = -1; | |||||
int currRoot[8]; | |||||
int currChord[8]; | |||||
int currInv[8]; | |||||
int currDegree[8]; | |||||
int currQuality[8]; | |||||
float pitches[8][6]; | |||||
float oldPitches[6]; | |||||
void reset() override { | |||||
for (int i = 0; i < 8; i++) { | |||||
gates[i] = true; | |||||
} | |||||
} | |||||
void setIndex(int index, int nSteps) { | |||||
phase = 0.0f; | |||||
this->index = index; | |||||
if (this->index >= nSteps) { | |||||
this->index = 0; | |||||
} | |||||
this->gatePulse.trigger(Core::TRIGGER); | |||||
} | |||||
}; | |||||
void Progress::step() { | |||||
AHModule::step(); | |||||
// Run | |||||
if (runningTrigger.process(params[RUN_PARAM].value)) { | |||||
running = !running; | |||||
} | |||||
int numSteps = (int) clamp(roundf(params[STEPS_PARAM].value + inputs[STEPS_INPUT].value), 1.0f, 8.0f); | |||||
if (running) { | |||||
if (inputs[EXT_CLOCK_INPUT].active) { | |||||
// External clock | |||||
if (clockTrigger.process(inputs[EXT_CLOCK_INPUT].value)) { | |||||
setIndex(index + 1, numSteps); | |||||
} | |||||
} | |||||
else { | |||||
// Internal clock | |||||
float clockTime = powf(2.0f, params[CLOCK_PARAM].value + inputs[CLOCK_INPUT].value); | |||||
phase += clockTime * engineGetSampleTime(); | |||||
if (phase >= 1.0f) { | |||||
setIndex(index + 1, numSteps); | |||||
} | |||||
} | |||||
} | |||||
// Reset | |||||
if (resetTrigger.process(params[RESET_PARAM].value + inputs[RESET_INPUT].value)) { | |||||
setIndex(0, numSteps); | |||||
} | |||||
bool haveRoot = false; | |||||
bool haveMode = false; | |||||
// index is our current step | |||||
if (inputs[KEY_INPUT].active) { | |||||
float fRoot = inputs[KEY_INPUT].value; | |||||
currKey = CoreUtil().getKeyFromVolts(fRoot); | |||||
haveRoot = true; | |||||
} | |||||
if (inputs[MODE_INPUT].active) { | |||||
float fMode = inputs[MODE_INPUT].value; | |||||
currMode = CoreUtil().getModeFromVolts(fMode); | |||||
haveMode = true; | |||||
} | |||||
modeMode = haveRoot && haveMode; | |||||
if (modeMode && ((prevMode != currMode) || (prevKey != currKey))) { // Input changes so force re-read | |||||
for (int step = 0; step < 8; step++) { | |||||
prevDegreeInput[step] = -100.0; | |||||
prevQualityInput[step] = -100.0; | |||||
} | |||||
prevMode = currMode; | |||||
prevKey = currKey; | |||||
} | |||||
// Read inputs | |||||
for (int step = 0; step < 8; step++) { | |||||
if (modeMode) { | |||||
currDegreeInput[step] = params[CHORD_PARAM + step].value; | |||||
currQualityInput[step] = params[ROOT_PARAM + step].value; | |||||
if (prevModeMode != modeMode) { // Switching mode, so reset history to ensure re-read on return | |||||
prevChrInput[step] = -100.0; | |||||
prevRootInput[step] = -100.0; | |||||
} | |||||
} else { | |||||
currChrInput[step] = params[CHORD_PARAM + step].value; | |||||
currRootInput[step] = params[ROOT_PARAM + step].value; | |||||
if (prevModeMode != modeMode) { // Switching mode, so reset history to ensure re-read on return | |||||
prevDegreeInput[step] = -100.0; | |||||
prevQualityInput[step] = -100.0; | |||||
} | |||||
} | |||||
currInvInput[step] = params[INV_PARAM + step].value; | |||||
} | |||||
// Remember mode | |||||
prevModeMode = modeMode; | |||||
// Check for changes on all steps | |||||
for (int step = 0; step < 8; step++) { | |||||
bool update = false; | |||||
if (modeMode) { | |||||
currDegreeInput[step] = params[ROOT_PARAM + step].value; | |||||
currQualityInput[step] = params[CHORD_PARAM + step].value; | |||||
if (prevDegreeInput[step] != currDegreeInput[step]) { | |||||
prevDegreeInput[step] = currDegreeInput[step]; | |||||
update = true; | |||||
} | |||||
if (prevQualityInput[step] != currQualityInput[step]) { | |||||
prevQualityInput[step] = currQualityInput[step]; | |||||
update = true; | |||||
} | |||||
if (update) { | |||||
// Get Degree (I- VII) | |||||
currDegree[step] = round(rescale(fabs(currDegreeInput[step]), 0.0f, 10.0f, 0.0f, Core::NUM_DEGREES - 1)); | |||||
// From the input root, mode and degree, we can get the root chord note and quality (Major,Minor,Diminshed) | |||||
CoreUtil().getRootFromMode(currMode,currKey,currDegree[step],&currRoot[step],&currQuality[step]); | |||||
// Now get the actual chord from the main list | |||||
switch(currQuality[step]) { | |||||
case Core::MAJ: | |||||
currChord[step] = round(rescale(fabs(currQualityInput[step]), 0.0f, 10.0f, 1.0f, 70.0f)); | |||||
break; | |||||
case Core::MIN: | |||||
currChord[step] = round(rescale(fabs(currQualityInput[step]), 0.0f, 10.0f, 71.0f, 90.0f)); | |||||
break; | |||||
case Core::DIM: | |||||
currChord[step] = round(rescale(fabs(currQualityInput[step]), 0.0f, 10.0f, 91.0f, 98.0f)); | |||||
break; | |||||
} | |||||
} | |||||
} else { | |||||
// Chord Mode | |||||
// If anything has changed, recalculate output for that step | |||||
if (prevRootInput[step] != currRootInput[step]) { | |||||
prevRootInput[step] = currRootInput[step]; | |||||
currRoot[step] = round(rescale(fabs(currRootInput[step]), 0.0f, 10.0f, 0.0f, Core::NUM_NOTES - 1)); // Param range is 0 to 10, mapped to 0 to 11 | |||||
update = true; | |||||
} | |||||
if (prevChrInput[step] != currChrInput[step]) { | |||||
prevChrInput[step] = currChrInput[step]; | |||||
currChord[step] = round(rescale(fabs(currChrInput[step]), 0.0f, 10.0f, 1.0f, 98.0f)); // Param range is 0 to 10 | |||||
update = true; | |||||
} | |||||
} | |||||
// Inversions remain the same between Chord and Mode mode | |||||
if (prevInvInput[step] != currInvInput[step]) { | |||||
prevInvInput[step] = currInvInput[step]; | |||||
currInv[step] = currInvInput[step]; | |||||
update = true; | |||||
} | |||||
// So, after all that, we calculate the pitch output | |||||
if (update) { | |||||
int *chordArray; | |||||
// Get the array of pitches based on the inversion | |||||
switch(currInv[step]) { | |||||
case Core::ROOT: chordArray = CoreUtil().ChordTable[currChord[step]].root; break; | |||||
case Core::FIRST_INV: chordArray = CoreUtil().ChordTable[currChord[step]].first; break; | |||||
case Core::SECOND_INV: chordArray = CoreUtil().ChordTable[currChord[step]].second; break; | |||||
default: chordArray = CoreUtil().ChordTable[currChord[step]].root; | |||||
} | |||||
for (int j = 0; j < NUM_PITCHES; j++) { | |||||
// Set the pitches for this step. If the chord has less than 6 notes, the empty slots are | |||||
// filled with repeated notes. These notes are identified by a 24 semi-tome negative | |||||
// offset. We correct for that offset now, pitching thaem back into the original octave. | |||||
// They could be pitched into the octave above (or below) | |||||
if (chordArray[j] < 0) { | |||||
pitches[step][j] = CoreUtil().getVoltsFromPitch(chordArray[j] + offset,currRoot[step]); | |||||
} else { | |||||
pitches[step][j] = CoreUtil().getVoltsFromPitch(chordArray[j],currRoot[step]); | |||||
} | |||||
} | |||||
} | |||||
} | |||||
bool pulse = gatePulse.process(delta); | |||||
// Gate buttons | |||||
for (int i = 0; i < 8; i++) { | |||||
if (gateTriggers[i].process(params[GATE_PARAM + i].value)) { | |||||
gates[i] = !gates[i]; | |||||
} | |||||
bool gateOn = (running && i == index && gates[i]); | |||||
if (gateMode == TRIGGER) { | |||||
gateOn = gateOn && pulse; | |||||
} else if (gateMode == RETRIGGER) { | |||||
gateOn = gateOn && !pulse; | |||||
} | |||||
outputs[GATE_OUTPUT + i].value = gateOn ? 10.0f : 0.0f; | |||||
lights[GATE_LIGHTS + i].setBrightnessSmooth((pulse && i == index) ? (gates[i] ? 1.f : 0.33) : (gates[i] ? 0.66 : 0.0)); | |||||
} | |||||
bool gatesOn = (running && gates[index]); | |||||
if (gateMode == TRIGGER) { | |||||
gatesOn = gatesOn && pulse; | |||||
} else if (gateMode == RETRIGGER) { | |||||
gatesOn = gatesOn && !pulse; | |||||
} | |||||
// Outputs | |||||
outputs[GATES_OUTPUT].value = gatesOn ? 10.0f : 0.0f; | |||||
lights[RUNNING_LIGHT].value = (running); | |||||
lights[RESET_LIGHT].setBrightnessSmooth(resetTrigger.isHigh()); | |||||
lights[GATES_LIGHT].setBrightnessSmooth(pulse); | |||||
for (int i = 0; i < NUM_PITCHES; i++) { | |||||
outputs[PITCH_OUTPUT + i].value = pitches[index][i]; | |||||
} | |||||
} | |||||
struct ProgressWidget : ModuleWidget { | |||||
ProgressWidget(Progress *module); | |||||
Menu *createContextMenu() override; | |||||
}; | |||||
ProgressWidget::ProgressWidget(Progress *module) : ModuleWidget(module) { | |||||
UI ui; | |||||
box.size = Vec(15*26, 380); | |||||
{ | |||||
SVGPanel *panel = new SVGPanel(); | |||||
panel->box.size = box.size; | |||||
panel->setBackground(SVG::load(assetPlugin(plugin, "res/Progress.svg"))); | |||||
addChild(panel); | |||||
} | |||||
addChild(Widget::create<ScrewSilver>(Vec(15, 0))); | |||||
addChild(Widget::create<ScrewSilver>(Vec(box.size.x-30, 0))); | |||||
addChild(Widget::create<ScrewSilver>(Vec(15, 365))); | |||||
addChild(Widget::create<ScrewSilver>(Vec(box.size.x-30, 365))); | |||||
{ | |||||
StateDisplay *display = new StateDisplay(); | |||||
display->module = module; | |||||
display->box.pos = Vec(0, 135); | |||||
display->box.size = Vec(100, 140); | |||||
addChild(display); | |||||
} | |||||
addParam(ParamWidget::create<AHKnobNoSnap>(ui.getPosition(UI::KNOB, 0, 0, true, false), module, Progress::CLOCK_PARAM, -2.0, 6.0, 2.0)); | |||||
addParam(ParamWidget::create<AHButton>(ui.getPosition(UI::BUTTON, 1, 0, true, false), module, Progress::RUN_PARAM, 0.0, 1.0, 0.0)); | |||||
addChild(ModuleLightWidget::create<MediumLight<GreenLight>>(ui.getPosition(UI::LIGHT, 1, 0, true, false), module, Progress::RUNNING_LIGHT)); | |||||
addParam(ParamWidget::create<AHButton>(ui.getPosition(UI::BUTTON, 2, 0, true, false), module, Progress::RESET_PARAM, 0.0, 1.0, 0.0)); | |||||
addChild(ModuleLightWidget::create<MediumLight<GreenLight>>(ui.getPosition(UI::LIGHT, 2, 0, true, false), module, Progress::RESET_LIGHT)); | |||||
addParam(ParamWidget::create<AHKnobSnap>(ui.getPosition(UI::KNOB, 3, 0, true, false), module, Progress::STEPS_PARAM, 1.0, 8.0, 8.0)); | |||||
addChild(ModuleLightWidget::create<MediumLight<GreenLight>>(ui.getPosition(UI::LIGHT, 4, 0, true, false), module, Progress::GATES_LIGHT)); | |||||
// static const float portX[13] = {20, 58, 96, 135, 173, 212, 250, 288, 326, 364, 402, 440, 478}; | |||||
addInput(Port::create<PJ301MPort>(ui.getPosition(UI::PORT, 0, 1, true, false), Port::INPUT, module, Progress::CLOCK_INPUT)); | |||||
addInput(Port::create<PJ301MPort>(ui.getPosition(UI::PORT, 1, 1, true, false), Port::INPUT, module, Progress::EXT_CLOCK_INPUT)); | |||||
addInput(Port::create<PJ301MPort>(ui.getPosition(UI::PORT, 2, 1, true, false), Port::INPUT, module, Progress::RESET_INPUT)); | |||||
addInput(Port::create<PJ301MPort>(ui.getPosition(UI::PORT, 3, 1, true, false), Port::INPUT, module, Progress::STEPS_INPUT)); | |||||
addInput(Port::create<PJ301MPort>(ui.getPosition(UI::PORT, 4, 1, true, false), Port::INPUT, module, Progress::KEY_INPUT)); | |||||
addInput(Port::create<PJ301MPort>(ui.getPosition(UI::PORT, 5, 1, true, false), Port::INPUT, module, Progress::MODE_INPUT)); | |||||
for (int i = 0; i < 3; i++) { | |||||
addOutput(Port::create<PJ301MPort>(ui.getPosition(UI::PORT, 7 + i, 0, true, false), Port::OUTPUT, module, Progress::PITCH_OUTPUT + i)); | |||||
} | |||||
for (int i = 0; i < 3; i++) { | |||||
addOutput(Port::create<PJ301MPort>(ui.getPosition(UI::PORT, 7 + i, 1, true, false), Port::OUTPUT, module, Progress::PITCH_OUTPUT + 3 + i)); | |||||
} | |||||
for (int i = 0; i < 8; i++) { | |||||
AHKnobNoSnap *rootW = ParamWidget::create<AHKnobNoSnap>(ui.getPosition(UI::KNOB, i + 1, 4, true, true), module, Progress::ROOT_PARAM + i, 0.0, 10.0, 0.0); | |||||
AHParamWidget::set<AHKnobNoSnap>(rootW, Progress::ROOT_TYPE, i); | |||||
addParam(rootW); | |||||
AHKnobNoSnap *chordW = ParamWidget::create<AHKnobNoSnap>(ui.getPosition(UI::KNOB, i + 1, 5, true, true), module, Progress::CHORD_PARAM + i, 0.0, 10.0, 0.0); | |||||
AHParamWidget::set<AHKnobNoSnap>(chordW, Progress::CHORD_TYPE, i); | |||||
addParam(chordW); | |||||
AHKnobSnap *invW = ParamWidget::create<AHKnobSnap>(ui.getPosition(UI::KNOB, i + 1, 6, true, true), module, Progress::INV_PARAM + i, 0.0, 2.0, 0.0); | |||||
AHParamWidget::set<AHKnobSnap>(invW, Progress::INV_TYPE, i); | |||||
addParam(invW); | |||||
addParam(ParamWidget::create<AHButton>(ui.getPosition(UI::BUTTON, i + 1, 7, true, true), module, Progress::GATE_PARAM + i, 0.0, 1.0, 0.0)); | |||||
addChild(ModuleLightWidget::create<MediumLight<GreenLight>>(ui.getPosition(UI::LIGHT, i + 1, 7, true, true), module, Progress::GATE_LIGHTS + i)); | |||||
addOutput(Port::create<PJ301MPort>(ui.getPosition(UI::PORT, i + 1, 5, true, false), Port::OUTPUT, module, Progress::GATE_OUTPUT + i)); | |||||
} | |||||
addOutput(Port::create<PJ301MPort>(ui.getPosition(UI::PORT, 9, 5, true, false), Port::OUTPUT, module, Progress::GATES_OUTPUT)); | |||||
} | |||||
struct ProgressGateModeItem : MenuItem { | |||||
Progress *progress; | |||||
Progress::GateMode gateMode; | |||||
void onAction(EventAction &e) override { | |||||
progress->gateMode = gateMode; | |||||
} | |||||
void step() override { | |||||
rightText = (progress->gateMode == gateMode) ? "✔" : ""; | |||||
} | |||||
}; | |||||
Menu *ProgressWidget::createContextMenu() { | |||||
Menu *menu = ModuleWidget::createContextMenu(); | |||||
MenuLabel *spacerLabel = new MenuLabel(); | |||||
menu->addChild(spacerLabel); | |||||
Progress *progress = dynamic_cast<Progress*>(module); | |||||
assert(progress); | |||||
MenuLabel *modeLabel = new MenuLabel(); | |||||
modeLabel->text = "Gate Mode"; | |||||
menu->addChild(modeLabel); | |||||
ProgressGateModeItem *triggerItem = new ProgressGateModeItem(); | |||||
triggerItem->text = "Trigger"; | |||||
triggerItem->progress = progress; | |||||
triggerItem->gateMode = Progress::TRIGGER; | |||||
menu->addChild(triggerItem); | |||||
ProgressGateModeItem *retriggerItem = new ProgressGateModeItem(); | |||||
retriggerItem->text = "Retrigger"; | |||||
retriggerItem->progress = progress; | |||||
retriggerItem->gateMode = Progress::RETRIGGER; | |||||
menu->addChild(retriggerItem); | |||||
ProgressGateModeItem *continuousItem = new ProgressGateModeItem(); | |||||
continuousItem->text = "Continuous"; | |||||
continuousItem->progress = progress; | |||||
continuousItem->gateMode = Progress::CONTINUOUS; | |||||
menu->addChild(continuousItem); | |||||
return menu; | |||||
} | |||||
Model *modelProgress = Model::create<Progress, ProgressWidget>( "Amalgamated Harmonics", "Progress", "Progress", SEQUENCER_TAG); | |||||
@@ -1,284 +0,0 @@ | |||||
#include "util/common.hpp" | |||||
#include "dsp/digital.hpp" | |||||
#include "AH.hpp" | |||||
#include "Core.hpp" | |||||
#include "UI.hpp" | |||||
struct Ruckus : AHModule { | |||||
enum ParamIds { | |||||
ENUMS(DIV_PARAM,16), | |||||
ENUMS(PROB_PARAM,16), | |||||
ENUMS(SHIFT_PARAM,16), | |||||
ENUMS(XMUTE_PARAM,16), | |||||
ENUMS(YMUTE_PARAM,4), | |||||
NUM_PARAMS | |||||
}; | |||||
enum InputIds { | |||||
TRIG_INPUT, | |||||
NUM_INPUTS | |||||
}; | |||||
enum OutputIds { | |||||
ENUMS(XOUT_OUTPUT,4), | |||||
ENUMS(YOUT_OUTPUT,4), | |||||
NUM_OUTPUTS | |||||
}; | |||||
enum LightIds { | |||||
ENUMS(XMUTE_LIGHT,4), | |||||
ENUMS(YMUTE_LIGHT,4), | |||||
NUM_LIGHTS | |||||
}; | |||||
Ruckus() : AHModule(NUM_PARAMS, NUM_INPUTS, NUM_OUTPUTS, NUM_LIGHTS) { | |||||
reset(); | |||||
} | |||||
void step() override; | |||||
json_t *toJson() override { | |||||
json_t *rootJ = json_object(); | |||||
// gates | |||||
json_t *xMutesJ = json_array(); | |||||
json_t *yMutesJ = json_array(); | |||||
for (int i = 0; i < 4; i++) { | |||||
json_t *xMuteJ = json_integer((int) xMute[i]); | |||||
json_array_append_new(xMutesJ, xMuteJ); | |||||
json_t *yMuteJ = json_integer((int) yMute[i]); | |||||
json_array_append_new(yMutesJ, yMuteJ); | |||||
} | |||||
json_object_set_new(rootJ, "xMutes", xMutesJ); | |||||
json_object_set_new(rootJ, "yMutes", yMutesJ); | |||||
return rootJ; | |||||
} | |||||
void fromJson(json_t *rootJ) override { | |||||
// gates | |||||
json_t *xMutesJ = json_object_get(rootJ, "xMutes"); | |||||
if (xMutesJ) { | |||||
for (int i = 0; i < 4; i++) { | |||||
json_t *xMuteJ = json_array_get(xMutesJ, i); | |||||
if (xMuteJ) | |||||
xMute[i] = !!json_integer_value(xMuteJ); | |||||
} | |||||
} | |||||
json_t *yMutesJ = json_object_get(rootJ, "yMutes"); | |||||
if (yMutesJ) { | |||||
for (int i = 0; i < 4; i++) { | |||||
json_t *yMuteJ = json_array_get(yMutesJ, i); | |||||
if (yMuteJ) | |||||
yMute[i] = !!json_integer_value(yMuteJ); | |||||
} | |||||
} | |||||
} | |||||
enum ParamType { | |||||
DIV_TYPE, | |||||
SHIFT_TYPE, | |||||
PROB_TYPE | |||||
}; | |||||
void receiveEvent(ParamEvent e) override { | |||||
if (receiveEvents) { | |||||
switch(e.pType) { | |||||
case ParamType::DIV_TYPE: | |||||
paramState = "> Division: " + std::to_string((int)e.value); | |||||
break; | |||||
case ParamType::SHIFT_TYPE: | |||||
paramState = "> Beat shift: " + std::to_string((int)e.value); | |||||
break; | |||||
case ParamType::PROB_TYPE: | |||||
paramState = "> Probability: " + std::to_string(e.value).substr(0,6); | |||||
break; | |||||
default: | |||||
paramState = "> UNK:" + std::to_string(e.value).substr(0,6); | |||||
} | |||||
} | |||||
keepStateDisplay = 0; | |||||
} | |||||
void reset() override { | |||||
for (int i = 0; i < 4; i++) { | |||||
xMute[i] = true; | |||||
yMute[i] = true; | |||||
} | |||||
} | |||||
Core core; | |||||
AHPulseGenerator xGate[4]; | |||||
AHPulseGenerator yGate[4]; | |||||
bool xMute[4] = {true, true, true, true}; | |||||
bool yMute[4] = {true, true, true, true}; | |||||
SchmittTrigger xLockTrigger[4]; | |||||
SchmittTrigger yLockTrigger[4]; | |||||
SchmittTrigger inTrigger; | |||||
int division[16]; | |||||
int shift[16]; | |||||
float prob[16]; | |||||
unsigned int beatCounter = 100; | |||||
}; | |||||
void Ruckus::step() { | |||||
AHModule::step(); | |||||
for (int i = 0; i < 4; i++) { | |||||
if (xLockTrigger[i].process(params[XMUTE_PARAM + i].value)) { | |||||
xMute[i] = !xMute[i]; | |||||
} | |||||
if (yLockTrigger[i].process(params[YMUTE_PARAM + i].value)) { | |||||
yMute[i] = !yMute[i]; | |||||
} | |||||
} | |||||
for (int i = 0; i < 16; i++) { | |||||
division[i] = params[DIV_PARAM + i].value; | |||||
prob[i] = params[PROB_PARAM + i].value; | |||||
shift[i] = params[SHIFT_PARAM + i].value; | |||||
} | |||||
if (inTrigger.process(inputs[TRIG_INPUT].value)) { | |||||
beatCounter++; | |||||
for (int y = 0; y < 4; y++) { | |||||
for (int x = 0; x < 4; x++) { | |||||
int i = y * 4 + x; | |||||
if(division[i] == 0) { | |||||
continue; // 0 == skip | |||||
} | |||||
if ((beatCounter + shift[i]) % division[i] == 0) { | |||||
if (randomUniform() < prob[i]) { | |||||
xGate[x].trigger(Core::TRIGGER); | |||||
yGate[y].trigger(Core::TRIGGER); | |||||
} | |||||
} | |||||
} | |||||
} | |||||
} | |||||
for (int i = 0; i < 4; i++) { | |||||
if (xGate[i].process(delta) && xMute[i]) { | |||||
outputs[XOUT_OUTPUT + i].value = 10.0f; | |||||
} else { | |||||
outputs[XOUT_OUTPUT + i].value = 0.0f; | |||||
} | |||||
lights[XMUTE_LIGHT + i].value = xMute[i] ? 1.0 : 0.0; | |||||
if (yGate[i].process(delta) && yMute[i]) { | |||||
outputs[YOUT_OUTPUT + i].value = 10.0f; | |||||
} else { | |||||
outputs[YOUT_OUTPUT + i].value = 0.0f; | |||||
} | |||||
lights[YMUTE_LIGHT + i].value = yMute[i] ? 1.0 : 0.0; | |||||
} | |||||
} | |||||
struct RuckusWidget : ModuleWidget { | |||||
RuckusWidget(Ruckus *module); | |||||
}; | |||||
RuckusWidget::RuckusWidget(Ruckus *module) : ModuleWidget(module) { | |||||
UI ui; | |||||
box.size = Vec(390, 380); | |||||
{ | |||||
SVGPanel *panel = new SVGPanel(); | |||||
panel->box.size = box.size; | |||||
panel->setBackground(SVG::load(assetPlugin(plugin, "res/Ruckus.svg"))); | |||||
addChild(panel); | |||||
} | |||||
addChild(Widget::create<ScrewSilver>(Vec(15, 0))); | |||||
addChild(Widget::create<ScrewSilver>(Vec(box.size.x - 30, 0))); | |||||
addChild(Widget::create<ScrewSilver>(Vec(15, 365))); | |||||
addChild(Widget::create<ScrewSilver>(Vec(box.size.x - 30, 365))); | |||||
{ | |||||
StateDisplay *display = new StateDisplay(); | |||||
display->module = module; | |||||
display->box.pos = Vec(30, 335); | |||||
display->box.size = Vec(100, 140); | |||||
addChild(display); | |||||
} | |||||
addInput(Port::create<PJ301MPort>(ui.getPosition(UI::PORT, 9, 8, true, true), Port::INPUT, module, Ruckus::TRIG_INPUT)); | |||||
float xd = 18.0f; | |||||
float yd = 20.0f; | |||||
for (int y = 0; y < 4; y++) { | |||||
for (int x = 0; x < 4; x++) { | |||||
int i = y * 4 + x; | |||||
Vec v = ui.getPosition(UI::KNOB, 1 + x * 2, y * 2, true, true); | |||||
AHKnobSnap *divW = ParamWidget::create<AHKnobSnap>(v, module, Ruckus::DIV_PARAM + i, 0, 64, 0); | |||||
AHParamWidget::set<AHKnobSnap>(divW, Ruckus::DIV_TYPE, i); | |||||
addParam(divW); | |||||
AHTrimpotNoSnap *probW = ParamWidget::create<AHTrimpotNoSnap>(Vec(v.x + xd, v.y + yd), module, Ruckus::PROB_PARAM + i, 0.0f, 1.0f, 1.0f); | |||||
AHParamWidget::set<AHTrimpotNoSnap>(probW, Ruckus::PROB_TYPE, i); | |||||
addParam(probW); | |||||
AHTrimpotSnap *shiftW = ParamWidget::create<AHTrimpotSnap>(Vec(v.x - xd + 4, v.y + yd), module, Ruckus::SHIFT_PARAM + i, -64.0f, 64.0f, 0.0f); | |||||
AHParamWidget::set<AHTrimpotSnap>(shiftW, Ruckus::SHIFT_TYPE, i); | |||||
addParam(shiftW); | |||||
} | |||||
} | |||||
float d = 12.0f; | |||||
for (int x = 0; x < 4; x++) { | |||||
addOutput(Port::create<PJ301MPort>(ui.getPosition(UI::PORT, 1 + x * 2, 8, true, true), Port::OUTPUT, module, Ruckus::XOUT_OUTPUT + x)); | |||||
Vec bVec = ui.getPosition(UI::BUTTON, 1 + x * 2, 7, true, true); | |||||
bVec.y = bVec.y + d; | |||||
addParam(ParamWidget::create<AHButton>(bVec, module, Ruckus::XMUTE_PARAM + x, 0.0, 1.0, 0.0)); | |||||
Vec lVec = ui.getPosition(UI::LIGHT, 1 + x * 2, 7, true, true); | |||||
lVec.y = lVec.y + d; | |||||
addChild(ModuleLightWidget::create<MediumLight<GreenLight>>(lVec, module, Ruckus::XMUTE_LIGHT + x)); | |||||
} | |||||
for (int y = 0; y < 4; y++) { | |||||
addOutput(Port::create<PJ301MPort>(ui.getPosition(UI::PORT,9, y * 2, true, true), Port::OUTPUT, module, Ruckus::YOUT_OUTPUT + y)); | |||||
Vec bVec = ui.getPosition(UI::BUTTON, 8, y * 2, true, true); | |||||
bVec.x = bVec.x + d; | |||||
addParam(ParamWidget::create<AHButton>(bVec, module, Ruckus::YMUTE_PARAM + y, 0.0, 1.0, 0.0)); | |||||
Vec lVec = ui.getPosition(UI::LIGHT, 8, y * 2, true, true); | |||||
lVec.x = lVec.x + d; | |||||
addChild(ModuleLightWidget::create<MediumLight<GreenLight>>(lVec, module, Ruckus::YMUTE_LIGHT + y)); | |||||
} | |||||
} | |||||
Model *modelRuckus = Model::create<Ruckus, RuckusWidget>( "Amalgamated Harmonics", "Ruckus", "Ruckus", SEQUENCER_TAG); | |||||
@@ -1,158 +0,0 @@ | |||||
#include "AH.hpp" | |||||
#include "Core.hpp" | |||||
#include "UI.hpp" | |||||
#include <iostream> | |||||
struct ScaleQuantizer : AHModule { | |||||
enum ParamIds { | |||||
NUM_PARAMS | |||||
}; | |||||
enum InputIds { | |||||
IN_INPUT, | |||||
KEY_INPUT, | |||||
SCALE_INPUT, | |||||
NUM_INPUTS | |||||
}; | |||||
enum OutputIds { | |||||
OUT_OUTPUT, | |||||
TRIG_OUTPUT, | |||||
GATE_OUTPUT, | |||||
NUM_OUTPUTS = GATE_OUTPUT + 12 | |||||
}; | |||||
enum LightIds { | |||||
NOTE_LIGHT, | |||||
KEY_LIGHT = NOTE_LIGHT + 12, | |||||
SCALE_LIGHT = KEY_LIGHT + 12, | |||||
DEGREE_LIGHT = SCALE_LIGHT + 12, | |||||
NUM_LIGHTS = DEGREE_LIGHT + 12 | |||||
}; | |||||
ScaleQuantizer() : AHModule(NUM_PARAMS, NUM_INPUTS, NUM_OUTPUTS, NUM_LIGHTS) {} | |||||
void step() override; | |||||
bool firstStep = true; | |||||
int lastScale = 0; | |||||
int lastRoot = 0; | |||||
float lastPitch = 0.0; | |||||
int currScale = 0; | |||||
int currRoot = 0; | |||||
int currNote = 0; | |||||
int currDegree = 0; | |||||
float currPitch = 0.0; | |||||
}; | |||||
void ScaleQuantizer::step() { | |||||
stepX++; | |||||
lastScale = currScale; | |||||
lastRoot = currRoot; | |||||
lastPitch = currPitch; | |||||
// Get the input pitch | |||||
float volts = inputs[IN_INPUT].value; | |||||
float root = inputs[KEY_INPUT].value; | |||||
float scale = inputs[SCALE_INPUT].value; | |||||
// Calculate output pitch from raw voltage | |||||
currPitch = CoreUtil().getPitchFromVolts(volts, root, scale, &currRoot, &currScale, &currNote, &currDegree); | |||||
// Set the value | |||||
outputs[OUT_OUTPUT].value = currPitch; | |||||
// update tone lights | |||||
for (int i = 0; i < Core::NUM_NOTES; i++) { | |||||
lights[NOTE_LIGHT + i].value = 0.0; | |||||
} | |||||
lights[NOTE_LIGHT + currNote].value = 1.0; | |||||
// update degree lights | |||||
for (int i = 0; i < Core::NUM_NOTES; i++) { | |||||
lights[DEGREE_LIGHT + i].value = 0.0; | |||||
outputs[GATE_OUTPUT + i].value = 0.0; | |||||
} | |||||
lights[DEGREE_LIGHT + currDegree].value = 1.0; | |||||
outputs[GATE_OUTPUT + currDegree].value = 10.0; | |||||
if (lastScale != currScale || firstStep) { | |||||
for (int i = 0; i < Core::NUM_NOTES; i++) { | |||||
lights[SCALE_LIGHT + i].value = 0.0; | |||||
} | |||||
lights[SCALE_LIGHT + currScale].value = 1.0; | |||||
} | |||||
if (lastRoot != currRoot || firstStep) { | |||||
for (int i = 0; i < Core::NUM_NOTES; i++) { | |||||
lights[KEY_LIGHT + i].value = 0.0; | |||||
} | |||||
lights[KEY_LIGHT + currRoot].value = 1.0; | |||||
} | |||||
if (lastPitch != currPitch || firstStep) { | |||||
outputs[TRIG_OUTPUT].value = 10.0; | |||||
} else { | |||||
outputs[TRIG_OUTPUT].value = 0.0; | |||||
} | |||||
firstStep = false; | |||||
} | |||||
struct ScaleQuantizerWidget : ModuleWidget { | |||||
ScaleQuantizerWidget(ScaleQuantizer *module); | |||||
}; | |||||
ScaleQuantizerWidget::ScaleQuantizerWidget(ScaleQuantizer *module) : ModuleWidget(module) { | |||||
UI ui; | |||||
box.size = Vec(240, 380); | |||||
{ | |||||
SVGPanel *panel = new SVGPanel(); | |||||
panel->box.size = box.size; | |||||
panel->setBackground(SVG::load(assetPlugin(plugin, "res/ScaleQuantizer.svg"))); | |||||
addChild(panel); | |||||
} | |||||
addChild(Widget::create<ScrewSilver>(Vec(15, 0))); | |||||
addChild(Widget::create<ScrewSilver>(Vec(box.size.x - 30, 0))); | |||||
addChild(Widget::create<ScrewSilver>(Vec(15, 365))); | |||||
addChild(Widget::create<ScrewSilver>(Vec(box.size.x - 30, 365))); | |||||
addInput(Port::create<PJ301MPort>(ui.getPosition(UI::PORT, 0, 5, false, false), Port::INPUT, module, ScaleQuantizer::IN_INPUT)); | |||||
addInput(Port::create<PJ301MPort>(ui.getPosition(UI::PORT, 1, 5, false, false), Port::INPUT, module, ScaleQuantizer::KEY_INPUT)); | |||||
addInput(Port::create<PJ301MPort>(ui.getPosition(UI::PORT, 2, 5, false, false), Port::INPUT, module, ScaleQuantizer::SCALE_INPUT)); | |||||
addOutput(Port::create<PJ301MPort>(ui.getPosition(UI::PORT, 3, 5, false, false), Port::OUTPUT, module, ScaleQuantizer::TRIG_OUTPUT)); | |||||
addOutput(Port::create<PJ301MPort>(ui.getPosition(UI::PORT, 4, 5, false, false), Port::OUTPUT, module, ScaleQuantizer::OUT_OUTPUT)); | |||||
float xOffset = 18.0; | |||||
float xSpace = 21.0; | |||||
float xPos = 0.0; | |||||
float yPos = 0.0; | |||||
int scale = 0; | |||||
for (int i = 0; i < 12; i++) { | |||||
addChild(ModuleLightWidget::create<SmallLight<GreenLight>>(Vec(xOffset + i * 18.0, 280.0), module, ScaleQuantizer::SCALE_LIGHT + i)); | |||||
ui.calculateKeyboard(i, xSpace, xOffset, 230.0, &xPos, &yPos, &scale); | |||||
addChild(ModuleLightWidget::create<SmallLight<GreenLight>>(Vec(xPos, yPos), module, ScaleQuantizer::KEY_LIGHT + scale)); | |||||
ui.calculateKeyboard(i, xSpace, xOffset + 72.0, 165.0, &xPos, &yPos, &scale); | |||||
addChild(ModuleLightWidget::create<SmallLight<GreenLight>>(Vec(xPos, yPos), module, ScaleQuantizer::NOTE_LIGHT + scale)); | |||||
ui.calculateKeyboard(i, 30.0, xOffset + 9.5, 110.0, &xPos, &yPos, &scale); | |||||
addChild(ModuleLightWidget::create<SmallLight<GreenLight>>(Vec(xPos, yPos), module, ScaleQuantizer::DEGREE_LIGHT + scale)); | |||||
ui.calculateKeyboard(i, 30.0, xOffset, 85.0, &xPos, &yPos, &scale); | |||||
addOutput(Port::create<PJ301MPort>(Vec(xPos, yPos), Port::OUTPUT, module, ScaleQuantizer::GATE_OUTPUT + scale)); | |||||
} | |||||
} | |||||
Model *modelScaleQuantizer = Model::create<ScaleQuantizer, ScaleQuantizerWidget>( "Amalgamated Harmonics", "ScaleQuantizer", "Scale Quantizer (deprecated)", QUANTIZER_TAG); | |||||
@@ -1,206 +0,0 @@ | |||||
#include "dsp/digital.hpp" | |||||
#include "AH.hpp" | |||||
#include "Core.hpp" | |||||
#include "UI.hpp" | |||||
#include <iostream> | |||||
struct ScaleQuantizer2 : AHModule { | |||||
enum ParamIds { | |||||
KEY_PARAM, | |||||
SCALE_PARAM, | |||||
ENUMS(SHIFT_PARAM,8), | |||||
TRANS_PARAM, | |||||
NUM_PARAMS | |||||
}; | |||||
enum InputIds { | |||||
ENUMS(IN_INPUT,8), | |||||
KEY_INPUT, | |||||
SCALE_INPUT, | |||||
TRANS_INPUT, | |||||
ENUMS(HOLD_INPUT,8), | |||||
NUM_INPUTS | |||||
}; | |||||
enum OutputIds { | |||||
ENUMS(OUT_OUTPUT,8), | |||||
ENUMS(TRIG_OUTPUT,8), | |||||
NUM_OUTPUTS | |||||
}; | |||||
enum LightIds { | |||||
ENUMS(KEY_LIGHT,12), | |||||
ENUMS(SCALE_LIGHT,12), | |||||
NUM_LIGHTS | |||||
}; | |||||
ScaleQuantizer2() : AHModule(NUM_PARAMS, NUM_INPUTS, NUM_OUTPUTS, NUM_LIGHTS) {} | |||||
void step() override; | |||||
bool firstStep = true; | |||||
int lastScale = 0; | |||||
int lastRoot = 0; | |||||
float lastTrans = -10000.0f; | |||||
SchmittTrigger holdTrigger[8]; | |||||
float holdPitch[8] = {0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0}; | |||||
float lastPitch[8] = {0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0}; | |||||
PulseGenerator triggerPulse[8]; | |||||
int currScale = 0; | |||||
int currRoot = 0; | |||||
}; | |||||
void ScaleQuantizer2::step() { | |||||
AHModule::step(); | |||||
lastScale = currScale; | |||||
lastRoot = currRoot; | |||||
int currNote = 0; | |||||
int currDegree = 0; | |||||
if (inputs[KEY_INPUT].active) { | |||||
float fRoot = inputs[KEY_INPUT].value; | |||||
currRoot = CoreUtil().getKeyFromVolts(fRoot); | |||||
} else { | |||||
currRoot = params[KEY_PARAM].value; | |||||
} | |||||
if (inputs[SCALE_INPUT].active) { | |||||
float fScale = inputs[SCALE_INPUT].value; | |||||
currScale = CoreUtil().getScaleFromVolts(fScale); | |||||
} else { | |||||
currScale = params[SCALE_PARAM].value; | |||||
} | |||||
float trans = (inputs[TRANS_INPUT].value + params[TRANS_PARAM].value) / 12.0; | |||||
if (trans != 0.0) { | |||||
if (trans != lastTrans) { | |||||
int i; | |||||
int d; | |||||
trans = CoreUtil().getPitchFromVolts(trans, Core::NOTE_C, Core::SCALE_CHROMATIC, &i, &d); | |||||
lastTrans = trans; | |||||
} else { | |||||
trans = lastTrans; | |||||
} | |||||
} | |||||
for (int i = 0; i < 8; i++) { | |||||
float holdInput = inputs[HOLD_INPUT + i].value; | |||||
bool holdActive = inputs[HOLD_INPUT + i].active; | |||||
bool holdStatus = holdTrigger[i].process(holdInput); | |||||
float volts = inputs[IN_INPUT + i].value; | |||||
float shift = params[SHIFT_PARAM + i].value; | |||||
if (holdActive) { | |||||
// Sample the pitch | |||||
if (holdStatus && inputs[IN_INPUT + i].active) { | |||||
holdPitch[i] = CoreUtil().getPitchFromVolts(volts, currRoot, currScale, &currNote, &currDegree); | |||||
} | |||||
} else { | |||||
if (inputs[IN_INPUT + i].active) { | |||||
holdPitch[i] = CoreUtil().getPitchFromVolts(volts, currRoot, currScale, &currNote, &currDegree); | |||||
} | |||||
} | |||||
// If the quantised pitch has changed | |||||
if (lastPitch[i] != holdPitch[i]) { | |||||
// Pulse the gate | |||||
triggerPulse[i].trigger(Core::TRIGGER); | |||||
// Record the pitch | |||||
lastPitch[i] = holdPitch[i]; | |||||
} | |||||
if (triggerPulse[i].process(delta)) { | |||||
outputs[TRIG_OUTPUT + i].value = 10.0f; | |||||
} else { | |||||
outputs[TRIG_OUTPUT + i].value = 0.0f; | |||||
} | |||||
outputs[OUT_OUTPUT + i].value = holdPitch[i] + shift + trans; | |||||
} | |||||
if (lastScale != currScale || firstStep) { | |||||
for (int i = 0; i < Core::NUM_NOTES; i++) { | |||||
lights[SCALE_LIGHT + i].value = 0.0f; | |||||
} | |||||
lights[SCALE_LIGHT + currScale].value = 1.0f; | |||||
} | |||||
if (lastRoot != currRoot || firstStep) { | |||||
for (int i = 0; i < Core::NUM_NOTES; i++) { | |||||
lights[KEY_LIGHT + i].value = 0.0f; | |||||
} | |||||
lights[KEY_LIGHT + currRoot].value = 1.0f; | |||||
} | |||||
firstStep = false; | |||||
} | |||||
struct ScaleQuantizer2Widget : ModuleWidget { | |||||
ScaleQuantizer2Widget(ScaleQuantizer2 *module); | |||||
}; | |||||
ScaleQuantizer2Widget::ScaleQuantizer2Widget(ScaleQuantizer2 *module) : ModuleWidget(module) { | |||||
UI ui; | |||||
box.size = Vec(300, 380); | |||||
{ | |||||
SVGPanel *panel = new SVGPanel(); | |||||
panel->box.size = box.size; | |||||
panel->setBackground(SVG::load(assetPlugin(plugin, "res/ScaleQuantizerMkII.svg"))); | |||||
addChild(panel); | |||||
} | |||||
addChild(Widget::create<ScrewSilver>(Vec(15, 0))); | |||||
addChild(Widget::create<ScrewSilver>(Vec(box.size.x - 30, 0))); | |||||
addChild(Widget::create<ScrewSilver>(Vec(15, 365))); | |||||
addChild(Widget::create<ScrewSilver>(Vec(box.size.x - 30, 365))); | |||||
addInput(Port::create<PJ301MPort>(ui.getPosition(UI::PORT, 0, 5, true, false), Port::INPUT, module, ScaleQuantizer2::KEY_INPUT)); | |||||
addParam(ParamWidget::create<AHKnobSnap>(ui.getPosition(UI::KNOB, 1, 5, true, false), module, ScaleQuantizer2::KEY_PARAM, 0.0f, 11.0f, 0.0f)); // 12 notes | |||||
addInput(Port::create<PJ301MPort>(ui.getPosition(UI::PORT, 3, 5, true, false), Port::INPUT, module, ScaleQuantizer2::SCALE_INPUT)); | |||||
addParam(ParamWidget::create<AHKnobSnap>(ui.getPosition(UI::PORT, 4, 5, true, false), module, ScaleQuantizer2::SCALE_PARAM, 0.0f, 11.0f, 0.0f)); // 12 notes | |||||
addInput(Port::create<PJ301MPort>(ui.getPosition(UI::PORT, 6, 5, true, false), Port::INPUT, module, ScaleQuantizer2::TRANS_INPUT)); | |||||
addParam(ParamWidget::create<AHKnobSnap>(ui.getPosition(UI::PORT, 7, 5, true, false), module, ScaleQuantizer2::TRANS_PARAM, -11.0f, 11.0f, 0.0f)); // 12 notes | |||||
for (int i = 0; i < 8; i++) { | |||||
addInput(Port::create<PJ301MPort>(Vec(6 + i * 29, 41), Port::INPUT, module, ScaleQuantizer2::IN_INPUT + i)); | |||||
addParam(ParamWidget::create<AHTrimpotSnap>(Vec(9 + i * 29.1, 101), module, ScaleQuantizer2::SHIFT_PARAM + i, -3.0f, 3.0f, 0.0f)); | |||||
addOutput(Port::create<PJ301MPort>(Vec(6 + i * 29, 125), Port::OUTPUT, module, ScaleQuantizer2::OUT_OUTPUT + i)); | |||||
addInput(Port::create<PJ301MPort>(Vec(6 + i * 29, 71), Port::INPUT, module, ScaleQuantizer2::HOLD_INPUT + i)); | |||||
addOutput(Port::create<PJ301MPort>(Vec(6 + i * 29, 155), Port::OUTPUT, module, ScaleQuantizer2::TRIG_OUTPUT + i)); | |||||
} | |||||
float xOffset = 18.0; | |||||
float xSpace = 21.0; | |||||
float xPos = 0.0; | |||||
float yPos = 0.0; | |||||
int scale = 0; | |||||
for (int i = 0; i < 12; i++) { | |||||
addChild(ModuleLightWidget::create<SmallLight<GreenLight>>(Vec(xOffset + i * 18.0f, 280.0f), module, ScaleQuantizer2::SCALE_LIGHT + i)); | |||||
ui.calculateKeyboard(i, xSpace, xOffset, 230.0f, &xPos, &yPos, &scale); | |||||
addChild(ModuleLightWidget::create<SmallLight<GreenLight>>(Vec(xPos, yPos), module, ScaleQuantizer2::KEY_LIGHT + scale)); | |||||
} | |||||
} | |||||
Model *modelScaleQuantizer2 = Model::create<ScaleQuantizer2, ScaleQuantizer2Widget>( "Amalgamated Harmonics", "ScaleQuantizer2", "Scale Quantizer MkII", QUANTIZER_TAG); | |||||
@@ -1,76 +0,0 @@ | |||||
#include "UI.hpp" | |||||
void UI::calculateKeyboard(int inKey, float spacing, float xOff, float yOff, float *x, float *y, int *scale) { | |||||
// Sanitise input | |||||
int key = inKey % 12; | |||||
// White | |||||
int whiteO [7] = {0, 1, 2, 3, 4, 5, 6}; // 'spaces' occupied by keys | |||||
int whiteK [7] = {0, 2, 4, 5, 7, 9, 11}; // scale mapped to key | |||||
// Black | |||||
int blackO [5] = {0, 1, 3, 4, 5}; // 'spaces' occupied by keys | |||||
int blackK [5] = {1, 3, 6, 8, 10}; // scale mapped to keys | |||||
float bOffset = xOff + (spacing / 2); | |||||
float bSpace = spacing; | |||||
// Make an equilateral triangle pattern, tri height = base * (sqrt(3) / 2) | |||||
float bDelta = bSpace * sqrt(3) * 0.5; | |||||
// Are we black or white key?, check black keys | |||||
for (int i = 0; i < 5; i++) { | |||||
if (blackK[i] == key) { | |||||
*x = bOffset + bSpace * blackO[i]; | |||||
*y = yOff - bDelta; | |||||
*scale = blackK[i]; | |||||
return; | |||||
} | |||||
} | |||||
int wOffset = xOff; | |||||
int wSpace = spacing; | |||||
for (int i = 0; i < 7; i++) { | |||||
if (whiteK[i] == key) { | |||||
*x = wOffset + wSpace * whiteO[i]; | |||||
*y = yOff; | |||||
*scale = whiteK[i]; | |||||
return; | |||||
} | |||||
} | |||||
} | |||||
Vec UI::getPosition(int type, int xSlot, int ySlot, bool xDense, bool yDense) { | |||||
float *xArray; | |||||
float *yArray; | |||||
switch(type) { | |||||
case KNOB: | |||||
if (xDense) { xArray = X_KNOB_COMPACT; } else { xArray = X_KNOB; } | |||||
if (yDense) { yArray = Y_KNOB_COMPACT; } else { yArray = Y_KNOB; } | |||||
break; | |||||
case PORT: | |||||
if (xDense) { xArray = X_PORT_COMPACT; } else { xArray = X_PORT; } | |||||
if (yDense) { yArray = Y_PORT_COMPACT; } else { yArray = Y_PORT; } | |||||
break; | |||||
case BUTTON: | |||||
if (xDense) { xArray = X_BUTTON_COMPACT; } else { xArray = X_BUTTON; } | |||||
if (yDense) { yArray = Y_BUTTON_COMPACT; } else { yArray = Y_BUTTON; } | |||||
break; | |||||
case LIGHT: | |||||
if (xDense) { xArray = X_LIGHT_COMPACT; } else { xArray = X_LIGHT; } | |||||
if (yDense) { yArray = Y_LIGHT_COMPACT; } else { yArray = Y_LIGHT; } | |||||
break; | |||||
case TRIMPOT: | |||||
if (xDense) { xArray = X_TRIMPOT_COMPACT; } else { xArray = X_TRIMPOT; } | |||||
if (yDense) { yArray = Y_TRIMPOT_COMPACT; } else { yArray = Y_TRIMPOT; } | |||||
break; | |||||
default: | |||||
if (xDense) { xArray = X_KNOB_COMPACT; } else { xArray = X_KNOB; } | |||||
if (yDense) { yArray = Y_KNOB_COMPACT; } else { yArray = Y_KNOB; } | |||||
} | |||||
return Vec(xArray[0] + xArray[1] * xSlot, yArray[0] + yArray[1] * ySlot); | |||||
} |
@@ -1,201 +0,0 @@ | |||||
#pragma once | |||||
#include <iostream> | |||||
#include "AH.hpp" | |||||
#include "componentlibrary.hpp" | |||||
struct ParamEvent { | |||||
ParamEvent(int t, int i, float v) : pType(t), pId(i), value(v) {} | |||||
int pType; | |||||
int pId; | |||||
float value; | |||||
}; | |||||
struct AHModule : Module { | |||||
float delta; | |||||
AHModule(int numParams, int numInputs, int numOutputs, int numLights = 0) : Module(numParams, numInputs, numOutputs, numLights) { | |||||
delta = 1.0 / engineGetSampleRate(); | |||||
} | |||||
void onSampleRateChange() override { | |||||
delta = 1.0 / engineGetSampleRate(); | |||||
} | |||||
int stepX = 0; | |||||
bool debugFlag = false; | |||||
inline bool debug() { | |||||
return debugFlag; | |||||
} | |||||
bool receiveEvents = false; | |||||
int keepStateDisplay = 0; | |||||
std::string paramState = ">"; | |||||
virtual void receiveEvent(ParamEvent e) { | |||||
paramState = ">"; | |||||
keepStateDisplay = 0; | |||||
} | |||||
void step() override { | |||||
stepX++; | |||||
// Once we start stepping, we can process events | |||||
receiveEvents = true; | |||||
// Timeout for display | |||||
keepStateDisplay++; | |||||
if (keepStateDisplay > 50000) { | |||||
paramState = ">"; | |||||
} | |||||
} | |||||
}; | |||||
struct StateDisplay : TransparentWidget { | |||||
AHModule *module; | |||||
int frame = 0; | |||||
std::shared_ptr<Font> font; | |||||
StateDisplay() { | |||||
font = Font::load(assetPlugin(plugin, "res/EurostileBold.ttf")); | |||||
} | |||||
void draw(NVGcontext *vg) override { | |||||
Vec pos = Vec(0, 15); | |||||
nvgFontSize(vg, 16); | |||||
nvgFontFaceId(vg, font->handle); | |||||
nvgTextLetterSpacing(vg, -1); | |||||
nvgFillColor(vg, nvgRGBA(255, 0, 0, 0xff)); | |||||
char text[128]; | |||||
snprintf(text, sizeof(text), "%s", module->paramState.c_str()); | |||||
nvgText(vg, pos.x + 10, pos.y + 5, text, NULL); | |||||
} | |||||
}; | |||||
struct AHParamWidget { // it's a mix-in | |||||
int pType = -1; // Should be set by ste<>(), but if not this allows us to catch pwidgers we are not interested in | |||||
int pId; | |||||
AHModule *mod = NULL; | |||||
virtual ParamEvent generateEvent(float value) { | |||||
return ParamEvent(pType,pId,value); | |||||
}; | |||||
template <typename T = AHParamWidget> | |||||
static void set(T *param, int pType, int pId) { | |||||
param->pType = pType; | |||||
param->pId = pId; | |||||
} | |||||
}; | |||||
// Not going to monitor buttons | |||||
struct AHButton : SVGSwitch, MomentarySwitch { | |||||
AHButton() { | |||||
addFrame(SVG::load(assetPlugin(plugin,"res/ComponentLibrary/AHButton.svg"))); | |||||
} | |||||
}; | |||||
struct AHKnob : RoundKnob, AHParamWidget { | |||||
void onChange(EventChange &e) override { | |||||
// One off cast, don't want to subclass from ParamWidget, so have to grab it here | |||||
if (!mod) { | |||||
mod = static_cast<AHModule *>(this->module); | |||||
} | |||||
mod->receiveEvent(generateEvent(value)); | |||||
RoundKnob::onChange(e); | |||||
} | |||||
}; | |||||
struct AHKnobSnap : AHKnob { | |||||
AHKnobSnap() { | |||||
snap = true; | |||||
setSVG(SVG::load(assetPlugin(plugin,"res/ComponentLibrary/AHKnob.svg"))); | |||||
} | |||||
}; | |||||
struct AHKnobNoSnap : AHKnob { | |||||
AHKnobNoSnap() { | |||||
snap = false; | |||||
setSVG(SVG::load(assetPlugin(plugin,"res/ComponentLibrary/AHKnob.svg"))); | |||||
} | |||||
}; | |||||
struct AHTrimpotSnap : AHKnob { | |||||
AHTrimpotSnap() { | |||||
snap = true; | |||||
setSVG(SVG::load(assetPlugin(plugin,"res/ComponentLibrary/AHTrimpot.svg"))); | |||||
} | |||||
}; | |||||
struct AHTrimpotNoSnap : AHKnob { | |||||
AHTrimpotNoSnap() { | |||||
snap = false; | |||||
setSVG(SVG::load(assetPlugin(plugin,"res/ComponentLibrary/AHTrimpot.svg"))); | |||||
} | |||||
}; | |||||
struct UI { | |||||
enum UIElement { | |||||
KNOB = 0, | |||||
PORT, | |||||
BUTTON, | |||||
LIGHT, | |||||
TRIMPOT | |||||
}; | |||||
float Y_KNOB[2] = {50.8, 56.0}; // w.r.t 22 = 28.8 from bottom | |||||
float Y_PORT[2] = {49.7, 56.0}; // 27.7 | |||||
float Y_BUTTON[2] = {53.3, 56.0}; // 31.3 | |||||
float Y_LIGHT[2] = {57.7, 56.0}; // 35.7 | |||||
float Y_TRIMPOT[2] = {52.8, 56.0}; // 30.8 | |||||
float Y_KNOB_COMPACT[2] = {30.1, 35.0}; // Calculated relative to PORT=29 and the deltas above | |||||
float Y_PORT_COMPACT[2] = {29.0, 35.0}; | |||||
float Y_BUTTON_COMPACT[2] = {32.6, 35.0}; | |||||
float Y_LIGHT_COMPACT[2] = {37.0, 35.0}; | |||||
float Y_TRIMPOT_COMPACT[2] = {32.1, 35.0}; | |||||
float X_KNOB[2] = {12.5, 48.0}; // w.r.t 6.5 = 6 from left | |||||
float X_PORT[2] = {11.5, 48.0}; // 5 | |||||
float X_BUTTON[2] = {14.7, 48.0}; // 8.2 | |||||
float X_LIGHT[2] = {19.1, 48.0}; // 12.6 | |||||
float X_TRIMPOT[2] = {14.7, 48.0}; // 8.2 | |||||
float X_KNOB_COMPACT[2] = {21.0, 35.0}; // 15 + 6, see calc above | |||||
float X_PORT_COMPACT[2] = {20.0, 35.0}; // 15 + 5 | |||||
float X_BUTTON_COMPACT[2] = {23.2, 35.0}; // 15 + 8.2 | |||||
float X_LIGHT_COMPACT[2] = {27.6, 35.0}; // 15 + 12.6 | |||||
float X_TRIMPOT_COMPACT[2] = {23.2, 35.0}; // 15 + 8.2 | |||||
Vec getPosition(int type, int xSlot, int ySlot, bool xDense, bool yDense); | |||||
/* From the numerical key on a keyboard (0 = C, 11 = B), spacing in px between white keys and a starting x and Y coordinate for the C key (in px) | |||||
* calculate the actual X and Y coordinate for a key, and the scale note to which that key belongs (see Midi note mapping) | |||||
* http://www.grantmuller.com/MidiReference/doc/midiReference/ScaleReference.html */ | |||||
void calculateKeyboard(int inKey, float spacing, float xOff, float yOff, float *x, float *y, int *scale); | |||||
}; | |||||
@@ -1,3 +0,0 @@ | |||||
/build | |||||
/dist | |||||
plugin.* |
@@ -1,18 +0,0 @@ | |||||
[submodule "eurorack"] | |||||
path = eurorack | |||||
url = https://github.com/AndrewBelt/eurorack.git | |||||
[submodule "avrlib"] | |||||
path = parasites/avrlib | |||||
url = https://github.com/pichenettes/avril.git | |||||
[submodule "avrlibx"] | |||||
path = parasites/avrlibx | |||||
url = https://github.com/pichenettes/avrilx.git | |||||
[submodule "stm_audio_bootloader"] | |||||
path = parasites/stm_audio_bootloader | |||||
url = https://github.com/pichenettes/stm-audio-bootloader.git | |||||
[submodule "avr_audio_bootloader"] | |||||
path = parasites/avr_audio_bootloader | |||||
url = https://github.com/pichenettes/avr-audio-bootloader.git | |||||
[submodule "stmlib"] | |||||
path = parasites/stmlib | |||||
url = https://github.com/mqtthiqs/stmlib.git |
@@ -1,23 +0,0 @@ | |||||
# eurorack (applies to STM32F modules, not AVR modules) | |||||
Copyright 2014 Olivier Gillet. | |||||
Author: Olivier Gillet (ol.gillet@gmail.com) | |||||
Permission is hereby granted, free of charge, to any person obtaining a copy | |||||
of this software and associated documentation files (the "Software"), to deal | |||||
in the Software without restriction, including without limitation the rights | |||||
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell | |||||
copies of the Software, and to permit persons to whom the Software is | |||||
furnished to do so, subject to the following conditions: | |||||
The above copyright notice and this permission notice shall be included in | |||||
all copies or substantial portions of the Software. | |||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR | |||||
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, | |||||
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE | |||||
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER | |||||
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, | |||||
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN | |||||
THE SOFTWARE. |
@@ -1,11 +0,0 @@ | |||||
Copyright 2016 Andrew Belt | |||||
Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: | |||||
1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. | |||||
2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. | |||||
3. Neither the name of the copyright holder nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission. | |||||
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. |
@@ -1,30 +0,0 @@ | |||||
VERSION ?= v0.5.0 | |||||
FLAGS += \ | |||||
-DTEST \ | |||||
-I./eurorack \ | |||||
-Wno-unused-local-typedefs | |||||
SOURCES = $(wildcard src/*.cpp) \ | |||||
eurorack/stmlib/utils/random.cc \ | |||||
eurorack/stmlib/dsp/atan.cc \ | |||||
eurorack/stmlib/dsp/units.cc \ | |||||
eurorack/clouds/dsp/correlator.cc \ | |||||
eurorack/clouds/dsp/granular_processor.cc \ | |||||
eurorack/clouds/dsp/mu_law.cc \ | |||||
eurorack/clouds/dsp/pvoc/frame_transformation.cc \ | |||||
eurorack/clouds/dsp/pvoc/phase_vocoder.cc \ | |||||
eurorack/clouds/dsp/pvoc/stft.cc \ | |||||
eurorack/clouds/resources.cc | |||||
include ../../plugin.mk | |||||
dist: all | |||||
mkdir -p dist/ArableInstruments | |||||
cp LICENSE* dist/ArableInstruments/ | |||||
cp plugin.* dist/ArableInstruments/ | |||||
cp -R res dist/ArableInstruments/ | |||||
rm -f dist/ArableInstruments/res/*.pdn | |||||
cd dist && zip -5 -r ArableInstruments-$(VERSION)-$(ARCH).zip ArableInstruments |
@@ -1,32 +0,0 @@ | |||||
VERSION ?= v0.5.0 | |||||
FLAGS += \ | |||||
-DTEST -DPARASITES \ | |||||
-I./parasites \ | |||||
-Wno-unused-local-typedefs | |||||
SOURCES = $(wildcard src/*.cpp) \ | |||||
parasites/stmlib/utils/random.cc \ | |||||
parasites/stmlib/dsp/atan.cc \ | |||||
parasites/stmlib/dsp/units.cc \ | |||||
parasites/clouds/dsp/correlator.cc \ | |||||
parasites/clouds/dsp/granular_processor.cc \ | |||||
parasites/clouds/dsp/mu_law.cc \ | |||||
parasites/clouds/dsp/pvoc/frame_transformation.cc \ | |||||
parasites/clouds/dsp/pvoc/phase_vocoder.cc \ | |||||
parasites/clouds/dsp/pvoc/stft.cc \ | |||||
parasites/clouds/resources.cc | |||||
include ../../plugin.mk | |||||
dist: all | |||||
mkdir -p dist/ParableInstruments | |||||
cp LICENSE* dist/ParableInstruments/ | |||||
cp plugin.* dist/ParableInstruments/ | |||||
cp -R res dist/ParableInstruments/ | |||||
rm -f dist/ParableInstruments/res/*.pdn | |||||
cd dist && zip -5 -r ParableInstruments-$(VERSION)-$(ARCH).zip ParableInstruments |
@@ -1,48 +0,0 @@ | |||||
# Arable Instruments - Joni | |||||
Fork of Audible Instruments 'Texture Synthesizer', based on Mutable Instrument's Clouds. | |||||
Features: | |||||
- Implements the alternative modes and quality options of Clouds as a menu options | |||||
- Inputs and knobs for the 3 addition 'Blend' parameters (Stereo Spread, Feedback, and Reverb) | |||||
- Dedicated Freeze button | |||||
# Parable Instruments - Neil | |||||
This repository also builds an alternative version, based on the 'Parasites' alternative firmware for Clouds (https://mqtthiqs.github.io/parasites/clouds.html). | |||||
Parasites has many features and tweaks compared to the vanilla firmware, including: | |||||
- Options for sharper and asymmetrical grain envelopes | |||||
- New alternative modes (Oliverb reverb and Resonestor resonator) | |||||
- Reverse option for some modes (implemented here as a dedicated button) | |||||
IMPORTANT NOTE: | |||||
This repository includes code for both the vanilla firmware (Joni) and Parasites firmware (Neil), but only builds one at a time as separate libraries. If you want to maintain both side by side in a development branch, you can have two clones of the repository under different names in the plugins folder. | |||||
The parasites firmware is build using the makefile 'Makefile.parasite'. | |||||
To build the parasites firmware, run 'make clean', and then build using the makefile Makefile.parasite: | |||||
make -f Makefile.parasite | |||||
make -f Makefile.parasite dist | |||||
# Building Instructions: | |||||
After cloning the repo, do a submodule update with | |||||
git submodule update --init --recursive | |||||
To build the plugin: | |||||
make | |||||
To package: | |||||
make dist | |||||
To build the parasites firmware, run 'make clean', and then build using the makefile Makefile.parasite: | |||||
make -f Makefile.parasite | |||||
make -f Makefile.parasite dist | |||||
Possible future plans: | |||||
- Support for changing buffer size via menu (this has been tested, but lead to crashes in some alternative modes, to enable for testing purposes you can compile with BUFFERRESIZING defined) | |||||
Many thanks to Olivier Gillet for open sourcing the Clouds firmware, Andrew Belt for the orignal VCV Rack ports, and Matthias Puech for the Parasites firmware. | |||||
@@ -1,48 +0,0 @@ | |||||
# Precompiled python modules | |||||
*.pyc | |||||
# Eagle backups | |||||
*.s#? | |||||
*.b#? | |||||
*.bak | |||||
# Gerber files | |||||
*.CUT | |||||
*.GBL | |||||
*.GBO | |||||
*.GBS | |||||
*.GML | |||||
*.GTL | |||||
*.GTO | |||||
*.GTP | |||||
*.GTS | |||||
*.TXT | |||||
*.dri | |||||
*.gpi | |||||
*.pro | |||||
# Assembly files | |||||
*assembly.zip | |||||
*top.pdf | |||||
*bottom.pdf | |||||
*.csv | |||||
*partlist.txt | |||||
*.zip | |||||
# LaTeX compiled file | |||||
*.log | |||||
*.aux | |||||
# OS X crap | |||||
.DS_Stor? | |||||
# Build directory | |||||
build | |||||
# BETA Layout variants | |||||
*_beta.sch | |||||
*_BETA.sch | |||||
*_beta.brd | |||||
*_BETA.brd | |||||
audio_samples/ |
@@ -1,15 +0,0 @@ | |||||
[submodule "avrlib"] | |||||
path = avrlib | |||||
url = https://github.com/pichenettes/avril.git | |||||
[submodule "avrlibx"] | |||||
path = avrlibx | |||||
url = https://github.com/pichenettes/avrilx.git | |||||
[submodule "stm_audio_bootloader"] | |||||
path = stm_audio_bootloader | |||||
url = https://github.com/pichenettes/stm-audio-bootloader.git | |||||
[submodule "avr_audio_bootloader"] | |||||
path = avr_audio_bootloader | |||||
url = https://github.com/pichenettes/avr-audio-bootloader.git | |||||
[submodule "stmlib"] | |||||
path = stmlib | |||||
url = git@github.com:mqtthiqs/stmlib.git |
@@ -1,28 +0,0 @@ | |||||
Mutable Instruments' Eurorack Modules. | |||||
* Braids: Macro-oscillator. | |||||
* Branches: Dual Bernoulli gate. | |||||
* Clouds: Texture synthesizer. | |||||
* Edges: Quad chiptune digital oscillator. | |||||
* Elements: Modal synthesizer. | |||||
* Frames: Keyframer/mixer. | |||||
* Grids: Topographic drum sequencer. | |||||
* Links: Utility module - buffer, mixer. | |||||
* Peaks: Dual trigger converter. | |||||
* Rings: Resonator. | |||||
* Ripples: Liquid 2-pole BP, 2-pole LP and 4-pole LP filter. | |||||
* Shades: Triple attenuverter. | |||||
* Shelves: EQ filter. | |||||
* Streams: Dual dynamics gate. | |||||
* Tides: Tidal modulator. | |||||
* Volts: +5V power module. | |||||
* Warps: Meta-modulator. | |||||
* Yarns: MIDI interface. | |||||
License | |||||
======= | |||||
Code (AVR projects): GPL3.0. | |||||
Code (STM32F projects): MIT license. | |||||
Hardware: cc-by-sa-3.0 | |||||
By: Olivier Gillet (olivier@mutable-instruments.net) |
@@ -1,602 +0,0 @@ | |||||
// Copyright 2012 Olivier Gillet. | |||||
// | |||||
// Author: Olivier Gillet (ol.gillet@gmail.com) | |||||
// | |||||
// Permission is hereby granted, free of charge, to any person obtaining a copy | |||||
// of this software and associated documentation files (the "Software"), to deal | |||||
// in the Software without restriction, including without limitation the rights | |||||
// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell | |||||
// copies of the Software, and to permit persons to whom the Software is | |||||
// furnished to do so, subject to the following conditions: | |||||
// | |||||
// The above copyright notice and this permission notice shall be included in | |||||
// all copies or substantial portions of the Software. | |||||
// | |||||
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR | |||||
// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, | |||||
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE | |||||
// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER | |||||
// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, | |||||
// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN | |||||
// THE SOFTWARE. | |||||
// | |||||
// See http://creativecommons.org/licenses/MIT/ for more information. | |||||
// | |||||
// ----------------------------------------------------------------------------- | |||||
// | |||||
// Oscillator - analog style waveforms. | |||||
#include "braids/analog_oscillator.h" | |||||
#include "stmlib/utils/dsp.h" | |||||
#include "braids/resources.h" | |||||
#include "braids/parameter_interpolation.h" | |||||
namespace braids { | |||||
using namespace stmlib; | |||||
static const size_t kNumZones = 15; | |||||
static const uint16_t kHighestNote = 128 * 128; | |||||
static const uint16_t kPitchTableStart = 128 * 128; | |||||
static const uint16_t kOctave = 12 * 128; | |||||
uint32_t AnalogOscillator::ComputePhaseIncrement(int16_t midi_pitch) { | |||||
if (midi_pitch >= kHighestNote) { | |||||
midi_pitch = kHighestNote - 1; | |||||
} | |||||
int32_t ref_pitch = midi_pitch; | |||||
ref_pitch -= kPitchTableStart; | |||||
size_t num_shifts = 0; | |||||
while (ref_pitch < 0) { | |||||
ref_pitch += kOctave; | |||||
++num_shifts; | |||||
} | |||||
uint32_t a = lut_oscillator_increments[ref_pitch >> 4]; | |||||
uint32_t b = lut_oscillator_increments[(ref_pitch >> 4) + 1]; | |||||
uint32_t phase_increment = a + \ | |||||
(static_cast<int32_t>(b - a) * (ref_pitch & 0xf) >> 4); | |||||
phase_increment >>= num_shifts; | |||||
return phase_increment; | |||||
} | |||||
void AnalogOscillator::Render( | |||||
const uint8_t* sync_in, | |||||
int16_t* buffer, | |||||
uint8_t* sync_out, | |||||
size_t size) { | |||||
RenderFn fn = fn_table_[shape_]; | |||||
if (shape_ != previous_shape_) { | |||||
Init(); | |||||
previous_shape_ = shape_; | |||||
} | |||||
phase_increment_ = ComputePhaseIncrement(pitch_); | |||||
if (pitch_ > kHighestNote) { | |||||
pitch_ = kHighestNote; | |||||
} else if (pitch_ < 0) { | |||||
pitch_ = 0; | |||||
} | |||||
(this->*fn)(sync_in, buffer, sync_out, size); | |||||
} | |||||
void AnalogOscillator::RenderCSaw( | |||||
const uint8_t* sync_in, | |||||
int16_t* buffer, | |||||
uint8_t* sync_out, | |||||
size_t size) { | |||||
BEGIN_INTERPOLATE_PHASE_INCREMENT | |||||
int32_t next_sample = next_sample_; | |||||
while (size--) { | |||||
bool sync_reset = false; | |||||
bool self_reset = false; | |||||
bool transition_during_reset = false; | |||||
uint32_t reset_time = 0; | |||||
INTERPOLATE_PHASE_INCREMENT | |||||
uint32_t pw = static_cast<uint32_t>(parameter_) * 49152; | |||||
if (pw < 8 * phase_increment) { | |||||
pw = 8 * phase_increment; | |||||
} | |||||
int32_t this_sample = next_sample; | |||||
next_sample = 0; | |||||
if (*sync_in) { | |||||
// sync_in contain the fractional reset time. | |||||
reset_time = static_cast<uint32_t>(*sync_in - 1) << 9; | |||||
uint32_t phase_at_reset = phase_ + \ | |||||
(65535 - reset_time) * (phase_increment >> 16); | |||||
sync_reset = true; | |||||
transition_during_reset = false; | |||||
if (phase_at_reset < phase_ || (!high_ && phase_at_reset >= pw)) { | |||||
transition_during_reset = true; | |||||
} | |||||
if (phase_ >= pw) { | |||||
discontinuity_depth_ = -2048 + (aux_parameter_ >> 2); | |||||
int32_t before = (phase_at_reset >> 18); | |||||
int16_t after = discontinuity_depth_; | |||||
int32_t discontinuity = after - before; | |||||
this_sample += discontinuity * ThisBlepSample(reset_time) >> 15; | |||||
next_sample += discontinuity * NextBlepSample(reset_time) >> 15; | |||||
} | |||||
} | |||||
sync_in++; | |||||
phase_ += phase_increment; | |||||
if (phase_ < phase_increment) { | |||||
self_reset = true; | |||||
} | |||||
if (sync_out) { | |||||
if (phase_ < phase_increment) { | |||||
*sync_out++ = phase_ / (phase_increment >> 7) + 1; | |||||
} else { | |||||
*sync_out++ = 0; | |||||
} | |||||
} | |||||
while (transition_during_reset || !sync_reset) { | |||||
if (!high_) { | |||||
if (phase_ < pw) { | |||||
break; | |||||
} | |||||
uint32_t t = (phase_ - pw) / (phase_increment >> 16); | |||||
int16_t before = discontinuity_depth_; | |||||
int16_t after = phase_ >> 18; | |||||
int16_t discontinuity = after - before; | |||||
this_sample += discontinuity * ThisBlepSample(t) >> 15; | |||||
next_sample += discontinuity * NextBlepSample(t) >> 15; | |||||
high_ = true; | |||||
} | |||||
if (high_) { | |||||
if (!self_reset) { | |||||
break; | |||||
} | |||||
self_reset = false; | |||||
discontinuity_depth_ = -2048 + (aux_parameter_ >> 2); | |||||
uint32_t t = phase_ / (phase_increment >> 16); | |||||
int16_t before = 16383; | |||||
int16_t after = discontinuity_depth_; | |||||
int16_t discontinuity = after - before; | |||||
this_sample += discontinuity * ThisBlepSample(t) >> 15; | |||||
next_sample += discontinuity * NextBlepSample(t) >> 15; | |||||
high_ = false; | |||||
} | |||||
} | |||||
if (sync_reset) { | |||||
phase_ = reset_time * (phase_increment >> 16); | |||||
high_ = false; | |||||
} | |||||
next_sample += phase_ < pw | |||||
? discontinuity_depth_ | |||||
: phase_ >> 18; | |||||
*buffer++ = (this_sample - 8192) << 1; | |||||
} | |||||
next_sample_ = next_sample; | |||||
END_INTERPOLATE_PHASE_INCREMENT | |||||
} | |||||
void AnalogOscillator::RenderSquare( | |||||
const uint8_t* sync_in, | |||||
int16_t* buffer, | |||||
uint8_t* sync_out, | |||||
size_t size) { | |||||
BEGIN_INTERPOLATE_PHASE_INCREMENT | |||||
if (parameter_ > 32000) { | |||||
parameter_ = 32000; | |||||
} | |||||
int32_t next_sample = next_sample_; | |||||
while (size--) { | |||||
bool sync_reset = false; | |||||
bool self_reset = false; | |||||
bool transition_during_reset = false; | |||||
uint32_t reset_time = 0; | |||||
INTERPOLATE_PHASE_INCREMENT | |||||
uint32_t pw = static_cast<uint32_t>(32768 - parameter_) << 16; | |||||
int32_t this_sample = next_sample; | |||||
next_sample = 0; | |||||
if (*sync_in) { | |||||
// sync_in contain the fractional reset time. | |||||
reset_time = static_cast<uint32_t>(*sync_in - 1) << 9; | |||||
uint32_t phase_at_reset = phase_ + \ | |||||
(65535 - reset_time) * (phase_increment >> 16); | |||||
sync_reset = true; | |||||
if (phase_at_reset < phase_ || (!high_ && phase_at_reset >= pw)) { | |||||
transition_during_reset = true; | |||||
} | |||||
if (phase_at_reset >= pw) { | |||||
this_sample -= ThisBlepSample(reset_time); | |||||
next_sample -= NextBlepSample(reset_time); | |||||
} | |||||
} | |||||
sync_in++; | |||||
phase_ += phase_increment; | |||||
if (phase_ < phase_increment) { | |||||
self_reset = true; | |||||
} | |||||
if (sync_out) { | |||||
if (phase_ < phase_increment) { | |||||
*sync_out++ = phase_ / (phase_increment >> 7) + 1; | |||||
} else { | |||||
*sync_out++ = 0; | |||||
} | |||||
} | |||||
while (transition_during_reset || !sync_reset) { | |||||
if (!high_) { | |||||
if (phase_ < pw) { | |||||
break; | |||||
} | |||||
uint32_t t = (phase_ - pw) / (phase_increment >> 16); | |||||
this_sample += ThisBlepSample(t); | |||||
next_sample += NextBlepSample(t); | |||||
high_ = true; | |||||
} | |||||
if (high_) { | |||||
if (!self_reset) { | |||||
break; | |||||
} | |||||
self_reset = false; | |||||
uint32_t t = phase_ / (phase_increment >> 16); | |||||
this_sample -= ThisBlepSample(t); | |||||
next_sample -= NextBlepSample(t); | |||||
high_ = false; | |||||
} | |||||
} | |||||
if (sync_reset) { | |||||
phase_ = reset_time * (phase_increment >> 16); | |||||
high_ = false; | |||||
} | |||||
next_sample += phase_ < pw ? 0 : 32767; | |||||
*buffer++ = (this_sample - 16384) << 1; | |||||
} | |||||
next_sample_ = next_sample; | |||||
END_INTERPOLATE_PHASE_INCREMENT | |||||
} | |||||
void AnalogOscillator::RenderSaw( | |||||
const uint8_t* sync_in, | |||||
int16_t* buffer, | |||||
uint8_t* sync_out, | |||||
size_t size) { | |||||
BEGIN_INTERPOLATE_PHASE_INCREMENT | |||||
int32_t next_sample = next_sample_; | |||||
while (size--) { | |||||
bool sync_reset = false; | |||||
bool self_reset = false; | |||||
bool transition_during_reset = false; | |||||
uint32_t reset_time = 0; | |||||
INTERPOLATE_PHASE_INCREMENT | |||||
int32_t this_sample = next_sample; | |||||
next_sample = 0; | |||||
if (*sync_in) { | |||||
// sync_in contain the fractional reset time. | |||||
reset_time = static_cast<uint32_t>(*sync_in - 1) << 9; | |||||
uint32_t phase_at_reset = phase_ + \ | |||||
(65535 - reset_time) * (phase_increment >> 16); | |||||
sync_reset = true; | |||||
if (phase_at_reset < phase_) { | |||||
transition_during_reset = true; | |||||
} | |||||
int32_t discontinuity = phase_at_reset >> 17; | |||||
this_sample -= discontinuity * ThisBlepSample(reset_time) >> 15; | |||||
next_sample -= discontinuity * NextBlepSample(reset_time) >> 15; | |||||
} | |||||
sync_in++; | |||||
phase_ += phase_increment; | |||||
if (phase_ < phase_increment) { | |||||
self_reset = true; | |||||
} | |||||
if (sync_out) { | |||||
if (phase_ < phase_increment) { | |||||
*sync_out++ = phase_ / (phase_increment >> 7) + 1; | |||||
} else { | |||||
*sync_out++ = 0; | |||||
} | |||||
} | |||||
if ((transition_during_reset || !sync_reset) && self_reset) { | |||||
uint32_t t = phase_ / (phase_increment >> 16); | |||||
this_sample -= ThisBlepSample(t); | |||||
next_sample -= NextBlepSample(t); | |||||
} | |||||
if (sync_reset) { | |||||
phase_ = reset_time * (phase_increment >> 16); | |||||
high_ = false; | |||||
} | |||||
next_sample += phase_ >> 17; | |||||
*buffer++ = (this_sample - 16384) << 1; | |||||
} | |||||
next_sample_ = next_sample; | |||||
END_INTERPOLATE_PHASE_INCREMENT | |||||
} | |||||
void AnalogOscillator::RenderVariableSaw( | |||||
const uint8_t* sync_in, | |||||
int16_t* buffer, | |||||
uint8_t* sync_out, | |||||
size_t size) { | |||||
BEGIN_INTERPOLATE_PHASE_INCREMENT | |||||
int32_t next_sample = next_sample_; | |||||
if (parameter_ < 1024) { | |||||
parameter_ = 1024; | |||||
} | |||||
while (size--) { | |||||
bool sync_reset = false; | |||||
bool self_reset = false; | |||||
bool transition_during_reset = false; | |||||
uint32_t reset_time = 0; | |||||
INTERPOLATE_PHASE_INCREMENT | |||||
uint32_t pw = static_cast<uint32_t>(parameter_) << 16; | |||||
int32_t this_sample = next_sample; | |||||
next_sample = 0; | |||||
if (*sync_in) { | |||||
// sync_in contain the fractional reset time. | |||||
reset_time = static_cast<uint32_t>(*sync_in - 1) << 9; | |||||
uint32_t phase_at_reset = phase_ + \ | |||||
(65535 - reset_time) * (phase_increment >> 16); | |||||
sync_reset = true; | |||||
if (phase_at_reset < phase_ || (!high_ && phase_at_reset >= pw)) { | |||||
transition_during_reset = true; | |||||
} | |||||
int32_t before = (phase_at_reset >> 18) + ((phase_at_reset - pw) >> 18); | |||||
int32_t after = (0 >> 18) + ((0 - pw) >> 18); | |||||
int32_t discontinuity = after - before; | |||||
this_sample += discontinuity * ThisBlepSample(reset_time) >> 15; | |||||
next_sample += discontinuity * NextBlepSample(reset_time) >> 15; | |||||
} | |||||
sync_in++; | |||||
phase_ += phase_increment; | |||||
if (phase_ < phase_increment) { | |||||
self_reset = true; | |||||
} | |||||
if (sync_out) { | |||||
if (phase_ < phase_increment) { | |||||
*sync_out++ = phase_ / (phase_increment >> 7) + 1; | |||||
} else { | |||||
*sync_out++ = 0; | |||||
} | |||||
} | |||||
while (transition_during_reset || !sync_reset) { | |||||
if (!high_) { | |||||
if (phase_ < pw) { | |||||
break; | |||||
} | |||||
uint32_t t = (phase_ - pw) / (phase_increment >> 16); | |||||
this_sample -= ThisBlepSample(t) >> 1; | |||||
next_sample -= NextBlepSample(t) >> 1; | |||||
high_ = true; | |||||
} | |||||
if (high_) { | |||||
if (!self_reset) { | |||||
break; | |||||
} | |||||
self_reset = false; | |||||
uint32_t t = phase_ / (phase_increment >> 16); | |||||
this_sample -= ThisBlepSample(t) >> 1; | |||||
next_sample -= NextBlepSample(t) >> 1; | |||||
high_ = false; | |||||
} | |||||
} | |||||
if (sync_reset) { | |||||
phase_ = reset_time * (phase_increment >> 16); | |||||
high_ = false; | |||||
} | |||||
next_sample += phase_ >> 18; | |||||
next_sample += (phase_ - pw) >> 18; | |||||
*buffer++ = (this_sample - 16384) << 1; | |||||
} | |||||
next_sample_ = next_sample; | |||||
END_INTERPOLATE_PHASE_INCREMENT | |||||
} | |||||
void AnalogOscillator::RenderTriangle( | |||||
const uint8_t* sync_in, | |||||
int16_t* buffer, | |||||
uint8_t* sync_out, | |||||
size_t size) { | |||||
BEGIN_INTERPOLATE_PHASE_INCREMENT | |||||
uint32_t phase = phase_; | |||||
while (size--) { | |||||
INTERPOLATE_PHASE_INCREMENT | |||||
int16_t triangle; | |||||
uint16_t phase_16; | |||||
if (*sync_in++) { | |||||
phase = 0; | |||||
} | |||||
phase += phase_increment >> 1; | |||||
phase_16 = phase >> 16; | |||||
triangle = (phase_16 << 1) ^ (phase_16 & 0x8000 ? 0xffff : 0x0000); | |||||
triangle += 32768; | |||||
*buffer = triangle >> 1; | |||||
phase += phase_increment >> 1; | |||||
phase_16 = phase >> 16; | |||||
triangle = (phase_16 << 1) ^ (phase_16 & 0x8000 ? 0xffff : 0x0000); | |||||
triangle += 32768; | |||||
*buffer++ += triangle >> 1; | |||||
} | |||||
phase_ = phase; | |||||
END_INTERPOLATE_PHASE_INCREMENT | |||||
} | |||||
void AnalogOscillator::RenderSine( | |||||
const uint8_t* sync_in, | |||||
int16_t* buffer, | |||||
uint8_t* sync_out, | |||||
size_t size) { | |||||
uint32_t phase = phase_; | |||||
BEGIN_INTERPOLATE_PHASE_INCREMENT | |||||
while (size--) { | |||||
INTERPOLATE_PHASE_INCREMENT | |||||
phase += phase_increment; | |||||
if (*sync_in++) { | |||||
phase = 0; | |||||
} | |||||
*buffer++ = Interpolate824(wav_sine, phase); | |||||
} | |||||
END_INTERPOLATE_PHASE_INCREMENT | |||||
phase_ = phase; | |||||
} | |||||
void AnalogOscillator::RenderTriangleFold( | |||||
const uint8_t* sync_in, | |||||
int16_t* buffer, | |||||
uint8_t* sync_out, | |||||
size_t size) { | |||||
uint32_t phase = phase_; | |||||
BEGIN_INTERPOLATE_PHASE_INCREMENT | |||||
BEGIN_INTERPOLATE_PARAMETER | |||||
while (size--) { | |||||
INTERPOLATE_PARAMETER | |||||
INTERPOLATE_PHASE_INCREMENT | |||||
uint16_t phase_16; | |||||
int16_t triangle; | |||||
int16_t gain = 2048 + (parameter * 30720 >> 15); | |||||
if (*sync_in++) { | |||||
phase = 0; | |||||
} | |||||
// 2x oversampled WF. | |||||
phase += phase_increment >> 1; | |||||
phase_16 = phase >> 16; | |||||
triangle = (phase_16 << 1) ^ (phase_16 & 0x8000 ? 0xffff : 0x0000); | |||||
triangle += 32768; | |||||
triangle = triangle * gain >> 15; | |||||
triangle = Interpolate88(ws_tri_fold, triangle + 32768); | |||||
*buffer = triangle >> 1; | |||||
phase += phase_increment >> 1; | |||||
phase_16 = phase >> 16; | |||||
triangle = (phase_16 << 1) ^ (phase_16 & 0x8000 ? 0xffff : 0x0000); | |||||
triangle += 32768; | |||||
triangle = triangle * gain >> 15; | |||||
triangle = Interpolate88(ws_tri_fold, triangle + 32768); | |||||
*buffer++ += triangle >> 1; | |||||
} | |||||
END_INTERPOLATE_PARAMETER | |||||
END_INTERPOLATE_PHASE_INCREMENT | |||||
phase_ = phase; | |||||
} | |||||
void AnalogOscillator::RenderSineFold( | |||||
const uint8_t* sync_in, | |||||
int16_t* buffer, | |||||
uint8_t* sync_out, | |||||
size_t size) { | |||||
uint32_t phase = phase_; | |||||
BEGIN_INTERPOLATE_PHASE_INCREMENT | |||||
BEGIN_INTERPOLATE_PARAMETER | |||||
while (size--) { | |||||
INTERPOLATE_PARAMETER | |||||
INTERPOLATE_PHASE_INCREMENT | |||||
int16_t sine; | |||||
int16_t gain = 2048 + (parameter * 30720 >> 15); | |||||
if (*sync_in++) { | |||||
phase = 0; | |||||
} | |||||
// 2x oversampled WF. | |||||
phase += phase_increment >> 1; | |||||
sine = Interpolate824(wav_sine, phase); | |||||
sine = sine * gain >> 15; | |||||
sine = Interpolate88(ws_sine_fold, sine + 32768); | |||||
*buffer = sine >> 1; | |||||
phase += phase_increment >> 1; | |||||
sine = Interpolate824(wav_sine, phase); | |||||
sine = sine * gain >> 15; | |||||
sine = Interpolate88(ws_sine_fold, sine + 32768); | |||||
*buffer++ += sine >> 1; | |||||
} | |||||
END_INTERPOLATE_PARAMETER | |||||
END_INTERPOLATE_PHASE_INCREMENT | |||||
phase_ = phase; | |||||
} | |||||
void AnalogOscillator::RenderBuzz( | |||||
const uint8_t* sync_in, | |||||
int16_t* buffer, | |||||
uint8_t* sync_out, | |||||
size_t size) { | |||||
int32_t shifted_pitch = pitch_ + ((32767 - parameter_) >> 1); | |||||
uint16_t crossfade = shifted_pitch << 6; | |||||
size_t index = (shifted_pitch >> 10); | |||||
if (index >= kNumZones) { | |||||
index = kNumZones - 1; | |||||
} | |||||
const int16_t* wave_1 = waveform_table[WAV_BANDLIMITED_COMB_0 + index]; | |||||
index += 1; | |||||
if (index >= kNumZones) { | |||||
index = kNumZones - 1; | |||||
} | |||||
const int16_t* wave_2 = waveform_table[WAV_BANDLIMITED_COMB_0 + index]; | |||||
while (size--) { | |||||
phase_ += phase_increment_; | |||||
if (*sync_in++) { | |||||
phase_ = 0; | |||||
} | |||||
*buffer++ = Crossfade(wave_1, wave_2, phase_, crossfade); | |||||
} | |||||
} | |||||
/* static */ | |||||
AnalogOscillator::RenderFn AnalogOscillator::fn_table_[] = { | |||||
&AnalogOscillator::RenderSaw, | |||||
&AnalogOscillator::RenderVariableSaw, | |||||
&AnalogOscillator::RenderCSaw, | |||||
&AnalogOscillator::RenderSquare, | |||||
&AnalogOscillator::RenderTriangle, | |||||
&AnalogOscillator::RenderSine, | |||||
&AnalogOscillator::RenderTriangleFold, | |||||
&AnalogOscillator::RenderSineFold, | |||||
&AnalogOscillator::RenderBuzz, | |||||
}; | |||||
} // namespace braids |
@@ -1,162 +0,0 @@ | |||||
// Copyright 2012 Olivier Gillet. | |||||
// | |||||
// Author: Olivier Gillet (ol.gillet@gmail.com) | |||||
// | |||||
// Permission is hereby granted, free of charge, to any person obtaining a copy | |||||
// of this software and associated documentation files (the "Software"), to deal | |||||
// in the Software without restriction, including without limitation the rights | |||||
// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell | |||||
// copies of the Software, and to permit persons to whom the Software is | |||||
// furnished to do so, subject to the following conditions: | |||||
// | |||||
// The above copyright notice and this permission notice shall be included in | |||||
// all copies or substantial portions of the Software. | |||||
// | |||||
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR | |||||
// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, | |||||
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE | |||||
// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER | |||||
// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, | |||||
// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN | |||||
// THE SOFTWARE. | |||||
// | |||||
// See http://creativecommons.org/licenses/MIT/ for more information. | |||||
// | |||||
// ----------------------------------------------------------------------------- | |||||
// | |||||
// Oscillator - analog style waveforms. | |||||
#ifndef BRAIDS_ANALOG_OSCILLATOR_H_ | |||||
#define BRAIDS_ANALOG_OSCILLATOR_H_ | |||||
#include "stmlib/stmlib.h" | |||||
#include <cstring> | |||||
#include <cstdio> | |||||
#include "braids/resources.h" | |||||
namespace braids { | |||||
enum AnalogOscillatorShape { | |||||
OSC_SHAPE_SAW, | |||||
OSC_SHAPE_VARIABLE_SAW, | |||||
OSC_SHAPE_CSAW, | |||||
OSC_SHAPE_SQUARE, | |||||
OSC_SHAPE_TRIANGLE, | |||||
OSC_SHAPE_SINE, | |||||
OSC_SHAPE_TRIANGLE_FOLD, | |||||
OSC_SHAPE_SINE_FOLD, | |||||
OSC_SHAPE_BUZZ | |||||
}; | |||||
enum SyncMode { | |||||
OSCILLATOR_SYNC_MODE_OFF, | |||||
OSCILLATOR_SYNC_MODE_MASTER, | |||||
OSCILLATOR_SYNC_MODE_SLAVE | |||||
}; | |||||
class AnalogOscillator { | |||||
public: | |||||
typedef void (AnalogOscillator::*RenderFn)( | |||||
const uint8_t*, | |||||
int16_t*, | |||||
uint8_t*, | |||||
size_t); | |||||
AnalogOscillator() { } | |||||
~AnalogOscillator() { } | |||||
inline void Init() { | |||||
phase_ = 0; | |||||
phase_increment_ = 1; | |||||
high_ = false; | |||||
parameter_ = previous_parameter_ = 0; | |||||
aux_parameter_ = 0; | |||||
discontinuity_depth_ = -16383; | |||||
pitch_ = 60 << 7; | |||||
next_sample_ = 0; | |||||
} | |||||
inline void set_shape(AnalogOscillatorShape shape) { | |||||
shape_ = shape; | |||||
} | |||||
inline void set_pitch(int16_t pitch) { | |||||
pitch_ = pitch; | |||||
} | |||||
inline void set_parameter(int16_t parameter) { | |||||
parameter_ = parameter; | |||||
} | |||||
inline void set_aux_parameter(int16_t parameter) { | |||||
aux_parameter_ = parameter; | |||||
} | |||||
inline uint32_t phase_increment() const { | |||||
return phase_increment_; | |||||
} | |||||
inline void Reset() { | |||||
phase_ = -phase_increment_; | |||||
} | |||||
void Render( | |||||
const uint8_t* sync_in, | |||||
int16_t* buffer, | |||||
uint8_t* sync_out, | |||||
size_t size); | |||||
private: | |||||
void RenderSquare(const uint8_t*, int16_t*, uint8_t*, size_t); | |||||
void RenderSaw(const uint8_t*, int16_t*, uint8_t*, size_t); | |||||
void RenderVariableSaw(const uint8_t*, int16_t*, uint8_t*, size_t); | |||||
void RenderCSaw(const uint8_t*, int16_t*, uint8_t*, size_t); | |||||
void RenderTriangle(const uint8_t*, int16_t*, uint8_t*, size_t); | |||||
void RenderSine(const uint8_t*, int16_t*, uint8_t*, size_t); | |||||
void RenderTriangleFold(const uint8_t*, int16_t*, uint8_t*, size_t); | |||||
void RenderSineFold(const uint8_t*, int16_t*, uint8_t*, size_t); | |||||
void RenderBuzz(const uint8_t*, int16_t*, uint8_t*, size_t); | |||||
uint32_t ComputePhaseIncrement(int16_t midi_pitch); | |||||
inline int32_t ThisBlepSample(uint32_t t) { | |||||
if (t > 65535) { | |||||
t = 65535; | |||||
} | |||||
return t * t >> 18; | |||||
} | |||||
inline int32_t NextBlepSample(uint32_t t) { | |||||
if (t > 65535) { | |||||
t = 65535; | |||||
} | |||||
t = 65535 - t; | |||||
return -static_cast<int32_t>(t * t >> 18); | |||||
} | |||||
uint32_t phase_; | |||||
uint32_t phase_increment_; | |||||
uint32_t previous_phase_increment_; | |||||
bool high_; | |||||
int16_t parameter_; | |||||
int16_t previous_parameter_; | |||||
int16_t aux_parameter_; | |||||
int16_t discontinuity_depth_; | |||||
int16_t pitch_; | |||||
int32_t next_sample_; | |||||
AnalogOscillatorShape shape_; | |||||
AnalogOscillatorShape previous_shape_; | |||||
static RenderFn fn_table_[]; | |||||
DISALLOW_COPY_AND_ASSIGN(AnalogOscillator); | |||||
}; | |||||
} // namespace braids | |||||
#endif // BRAIDS_ANALOG_OSCILLATOR_H_ |
@@ -1,231 +0,0 @@ | |||||
// Copyright 2012 Olivier Gillet. | |||||
// | |||||
// Author: Olivier Gillet (ol.gillet@gmail.com) | |||||
// | |||||
// Permission is hereby granted, free of charge, to any person obtaining a copy | |||||
// of this software and associated documentation files (the "Software"), to deal | |||||
// in the Software without restriction, including without limitation the rights | |||||
// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell | |||||
// copies of the Software, and to permit persons to whom the Software is | |||||
// furnished to do so, subject to the following conditions: | |||||
// | |||||
// The above copyright notice and this permission notice shall be included in | |||||
// all copies or substantial portions of the Software. | |||||
// | |||||
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR | |||||
// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, | |||||
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE | |||||
// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER | |||||
// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, | |||||
// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN | |||||
// THE SOFTWARE. | |||||
// | |||||
// See http://creativecommons.org/licenses/MIT/ for more information. | |||||
#include <stm32f10x_conf.h> | |||||
#include <string.h> | |||||
#include "stmlib/utils/dsp.h" | |||||
#include "stmlib/utils/ring_buffer.h" | |||||
#include "stmlib/system/bootloader_utils.h" | |||||
#include "stmlib/system/flash_programming.h" | |||||
#include "stmlib/system/system_clock.h" | |||||
#include "stm_audio_bootloader/qpsk/packet_decoder.h" | |||||
#include "stm_audio_bootloader/qpsk/demodulator.h" | |||||
#include "braids/drivers/adc.h" | |||||
#include "braids/drivers/display.h" | |||||
#include "braids/drivers/encoder.h" | |||||
#include "braids/drivers/system.h" | |||||
using namespace braids; | |||||
using namespace stmlib; | |||||
using namespace stm_audio_bootloader; | |||||
const double kSampleRate = 48000.0; | |||||
const double kModulationRate = 6000.0; | |||||
const double kBitRate = 12000.0; | |||||
const uint32_t kStartAddress = 0x08004000; | |||||
Adc adc; | |||||
System sys; | |||||
Display display; | |||||
Encoder encoder; | |||||
PacketDecoder decoder; | |||||
Demodulator demodulator; | |||||
extern "C" { | |||||
void HardFault_Handler(void) { while (1); } | |||||
void MemManage_Handler(void) { while (1); } | |||||
void BusFault_Handler(void) { while (1); } | |||||
void UsageFault_Handler(void) { while (1); } | |||||
void NMI_Handler(void) { } | |||||
void SVC_Handler(void) { } | |||||
void DebugMon_Handler(void) { } | |||||
void PendSV_Handler(void) { } | |||||
} | |||||
extern "C" { | |||||
volatile uint8_t packet_inspector_byte = 0; | |||||
volatile bool encoder_released = false; | |||||
void SysTick_Handler() { | |||||
system_clock.Tick(); // Tick global ms counter. | |||||
encoder.Debounce(); | |||||
encoder_released = encoder_released | encoder.released(); | |||||
packet_inspector_byte += encoder.increment(); | |||||
uint32_t ms_clock = system_clock.milliseconds(); | |||||
if ((ms_clock & 0x3f) == 0 && display.mutable_buffer()[0] >= '\x98') { | |||||
display.mutable_buffer()[0] = '\x98' + ((ms_clock >> 6) & 7); | |||||
} | |||||
display.Refresh(); | |||||
} | |||||
uint16_t discard_samples = 8000; | |||||
void TIM1_UP_IRQHandler(void) { | |||||
if (TIM_GetITStatus(TIM1, TIM_IT_Update) == RESET) { | |||||
return; | |||||
} | |||||
TIM_ClearITPendingBit(TIM1, TIM_IT_Update); | |||||
if (adc.PipelinedRead(3)) { | |||||
if (!discard_samples) { | |||||
int16_t sample = adc.channel(3); | |||||
demodulator.PushSample(sample); | |||||
} else { | |||||
--discard_samples; | |||||
} | |||||
} | |||||
} | |||||
} | |||||
static uint32_t current_address; | |||||
static uint16_t packet_index; | |||||
void ProgramPage(const uint8_t* data, size_t size) { | |||||
FLASH_Unlock(); | |||||
FLASH_ErasePage(current_address); | |||||
const uint32_t* words = static_cast<const uint32_t*>( | |||||
static_cast<const void*>(data)); | |||||
for (size_t written = 0; written < size; written += 4) { | |||||
FLASH_ProgramWord(current_address, *words++); | |||||
current_address += 4; | |||||
} | |||||
} | |||||
void PrintPageNumber(uint16_t page_number, bool error) { | |||||
char string[5]; | |||||
string[0] = '\x98'; | |||||
string[1] = error ? 'X' : '0' + page_number / 100; | |||||
string[2] = '0' + (page_number / 10) % 10; | |||||
string[3] = '0' + page_number % 10; | |||||
string[4] = '\0'; | |||||
display.Print(string); | |||||
} | |||||
const char kHexChar[] = "0123456789ABCDEF"; | |||||
void PacketInspector() { | |||||
while (1) { | |||||
char string[5]; | |||||
string[0] = kHexChar[packet_inspector_byte >> 4]; | |||||
string[1] = kHexChar[packet_inspector_byte & 0xf]; | |||||
string[2] = kHexChar[decoder.packet_data()[packet_inspector_byte] >> 4]; | |||||
string[3] = kHexChar[decoder.packet_data()[packet_inspector_byte] & 0xf]; | |||||
string[4] = '\0'; | |||||
display.Print(string); | |||||
} | |||||
} | |||||
void Init() { | |||||
sys.Init(F_CPU / (3 * kSampleRate) - 1, false); | |||||
system_clock.Init(); | |||||
adc.Init(3 * kSampleRate > 96000); | |||||
encoder.Init(); | |||||
display.Init(); | |||||
sys.StartTimers(); | |||||
} | |||||
void InitializeReception() { | |||||
decoder.Init(); | |||||
demodulator.Init( | |||||
kModulationRate / kSampleRate * 4294967296.0, | |||||
kSampleRate / kModulationRate, | |||||
2.0 * kSampleRate / kBitRate); | |||||
demodulator.SyncCarrier(true); | |||||
decoder.Reset(); | |||||
current_address = kStartAddress; | |||||
packet_index = 0; | |||||
display.Print("\x98RDY"); | |||||
} | |||||
uint8_t rx_buffer[PAGE_SIZE]; | |||||
const uint16_t kPacketsPerPage = PAGE_SIZE / kPacketSize; | |||||
const char* kErrorStrings[2] = { "@SYN", "@CRC", }; | |||||
int main(void) { | |||||
Init(); | |||||
InitializeReception(); | |||||
bool exit_updater = !encoder.pressed_immediate(); | |||||
while (!exit_updater) { | |||||
bool error = false; | |||||
if (demodulator.state() == DEMODULATOR_STATE_OVERFLOW) { | |||||
display.Print("@OVF"); | |||||
error = true; | |||||
} else { | |||||
demodulator.ProcessAtLeast(32); | |||||
} | |||||
while (demodulator.available() && !error && !exit_updater) { | |||||
uint8_t symbol = demodulator.NextSymbol(); | |||||
PacketDecoderState state = decoder.ProcessSymbol(symbol); | |||||
switch (state) { | |||||
case PACKET_DECODER_STATE_OK: | |||||
{ | |||||
memcpy( | |||||
rx_buffer + (packet_index % kPacketsPerPage) * kPacketSize, | |||||
decoder.packet_data(), | |||||
kPacketSize); | |||||
++packet_index; | |||||
if ((packet_index % kPacketsPerPage) == 0) { | |||||
PrintPageNumber(packet_index / kPacketsPerPage, false); | |||||
ProgramPage(rx_buffer, PAGE_SIZE); | |||||
decoder.Reset(); | |||||
demodulator.SyncCarrier(false); | |||||
} else { | |||||
decoder.Reset(); | |||||
demodulator.SyncDecision(); | |||||
} | |||||
} | |||||
break; | |||||
case PACKET_DECODER_STATE_ERROR_SYNC: | |||||
case PACKET_DECODER_STATE_ERROR_CRC: | |||||
display.Print(kErrorStrings[state - PACKET_DECODER_STATE_ERROR_SYNC]); | |||||
error = true; | |||||
break; | |||||
case PACKET_DECODER_STATE_END_OF_TRANSMISSION: | |||||
exit_updater = true; | |||||
break; | |||||
default: | |||||
break; | |||||
} | |||||
} | |||||
if (error) { | |||||
encoder_released = false; | |||||
while (!encoder_released); // Polled in ISR | |||||
InitializeReception(); | |||||
} | |||||
} | |||||
Uninitialize(); | |||||
JumpTo(kStartAddress); | |||||
while (1) { } | |||||
} |
@@ -1,104 +0,0 @@ | |||||
// Copyright 2012 Olivier Gillet. | |||||
// | |||||
// Author: Olivier Gillet (ol.gillet@gmail.com) | |||||
// | |||||
// Permission is hereby granted, free of charge, to any person obtaining a copy | |||||
// of this software and associated documentation files (the "Software"), to deal | |||||
// in the Software without restriction, including without limitation the rights | |||||
// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell | |||||
// copies of the Software, and to permit persons to whom the Software is | |||||
// furnished to do so, subject to the following conditions: | |||||
// | |||||
// The above copyright notice and this permission notice shall be included in | |||||
// all copies or substantial portions of the Software. | |||||
// | |||||
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR | |||||
// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, | |||||
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE | |||||
// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER | |||||
// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, | |||||
// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN | |||||
// THE SOFTWARE. | |||||
// | |||||
// See http://creativecommons.org/licenses/MIT/ for more information. | |||||
// | |||||
// ----------------------------------------------------------------------------- | |||||
// | |||||
// Resources definitions. | |||||
// | |||||
// Automatically generated with: | |||||
// make resources | |||||
#include "braids/resources.h" | |||||
namespace braids { | |||||
const uint16_t chr_characters[] = { | |||||
0, 0, 0, 0, | |||||
0, 0, 0, 0, | |||||
0, 0, 0, 0, | |||||
0, 0, 0, 0, | |||||
0, 0, 0, 0, | |||||
0, 0, 0, 0, | |||||
0, 0, 0, 0, | |||||
0, 0, 0, 0, | |||||
0, 272, 1280, 29012, | |||||
46420, 9352, 39716, 256, | |||||
39936, 61440, 952, 340, | |||||
8, 68, 16, 136, | |||||
64648, 24704, 55364, 61504, | |||||
25668, 46148, 48196, 32912, | |||||
64580, 62532, 272, 264, | |||||
160, 4164, 520, 33936, | |||||
64592, 60484, 61776, 39936, | |||||
61712, 40004, 35908, 48192, | |||||
27716, 37136, 30720, 3236, | |||||
7168, 28288, 28192, 64512, | |||||
52292, 64544, 52324, 46148, | |||||
33040, 31744, 3208, 27688, | |||||
680, 656, 37000, 39936, | |||||
544, 61440, 40, 4096, | |||||
512, 63556, 7204, 6212, | |||||
28744, 39940, 35844, 62016, | |||||
11332, 4180, 12352, 432, | |||||
272, 10324, 8272, 14404, | |||||
35972, 50276, 80, 45632, | |||||
7172, 14336, 2056, 10280, | |||||
680, 29248, 4108, 37388, | |||||
272, 37088, 68, 0, | |||||
24736, 3592, 33408, 4136, | |||||
224, 524, 896, 56, | |||||
24712, 18568, 24, 40, | |||||
60416, 2068, 4368, 11840, | |||||
64520, 64516, 65024, 64768, | |||||
64640, 64576, 64544, 64528, | |||||
49152, 57344, 28672, 14336, | |||||
6144, 7168, 35840, 50176, | |||||
65532, 0, 0, 0, | |||||
0, 0, 0, 0, | |||||
0, 0, 0, 0, | |||||
0, 0, 0, 0, | |||||
0, 0, 0, 0, | |||||
0, 0, 0, 0, | |||||
0, 0, 0, 0, | |||||
0, 0, 0, 0, | |||||
0, 0, 0, 0, | |||||
0, 0, 0, 0, | |||||
0, 0, 0, 0, | |||||
0, 0, 0, 0, | |||||
0, 0, 0, 0, | |||||
0, 0, 0, 0, | |||||
0, 0, 0, 0, | |||||
0, 0, 0, 0, | |||||
0, 0, 0, 0, | |||||
0, 0, 0, 0, | |||||
0, 0, 0, 0, | |||||
0, 0, 0, 0, | |||||
0, 0, 0, 0, | |||||
0, 0, 0, 0, | |||||
0, 0, 0, 0, | |||||
0, 0, 0, 65532, | |||||
}; | |||||
} // namespace braids |
@@ -1,45 +0,0 @@ | |||||
// Copyright 2012 Olivier Gillet. | |||||
// | |||||
// Author: Olivier Gillet (ol.gillet@gmail.com) | |||||
// | |||||
// Permission is hereby granted, free of charge, to any person obtaining a copy | |||||
// of this software and associated documentation files (the "Software"), to deal | |||||
// in the Software without restriction, including without limitation the rights | |||||
// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell | |||||
// copies of the Software, and to permit persons to whom the Software is | |||||
// furnished to do so, subject to the following conditions: | |||||
// | |||||
// The above copyright notice and this permission notice shall be included in | |||||
// all copies or substantial portions of the Software. | |||||
// | |||||
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR | |||||
// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, | |||||
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE | |||||
// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER | |||||
// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, | |||||
// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN | |||||
// THE SOFTWARE. | |||||
// | |||||
// See http://creativecommons.org/licenses/MIT/ for more information. | |||||
// | |||||
// ----------------------------------------------------------------------------- | |||||
// | |||||
// Resources definitions. | |||||
// | |||||
// Automatically generated with: | |||||
// make resources | |||||
#ifndef BRAIDS_BOOTLOADER_CHARACTERS_H_ | |||||
#define BRAIDS_BOOTLOADER_CHARACTERS_H_ | |||||
#include "stmlib/stmlib.h" | |||||
namespace braids { | |||||
extern const uint16_t chr_characters[]; | |||||
} // namespace braids | |||||
#endif // BRAIDS_BOOTLOADER_CHARACTERS_H_ |
@@ -1,43 +0,0 @@ | |||||
# Copyright 2012 Olivier Gillet. | |||||
# | |||||
# Author: Olivier Gillet (ol.gillet@gmail.com) | |||||
# | |||||
# Permission is hereby granted, free of charge, to any person obtaining a copy | |||||
# of this software and associated documentation files (the "Software"), to deal | |||||
# in the Software without restriction, including without limitation the rights | |||||
# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell | |||||
# copies of the Software, and to permit persons to whom the Software is | |||||
# furnished to do so, subject to the following conditions: | |||||
# | |||||
# The above copyright notice and this permission notice shall be included in | |||||
# all copies or substantial portions of the Software. | |||||
# | |||||
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR | |||||
# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, | |||||
# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE | |||||
# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER | |||||
# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, | |||||
# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN | |||||
# THE SOFTWARE. | |||||
# | |||||
# See http://creativecommons.org/licenses/MIT/ for more information. | |||||
# System specifications | |||||
F_CRYSTAL = 8000000L | |||||
F_CPU = 72000000L | |||||
SYSCLOCK = SYSCLK_FREQ_72MHz | |||||
FAMILY = f10x | |||||
DENSITY = md | |||||
MEMORY_MODE = flash | |||||
# USB = enabled | |||||
# Preferred upload command | |||||
UPLOAD_COMMAND = upload_jtag | |||||
# Packages to build | |||||
TARGET = braids_bootloader | |||||
PACKAGES = braids/bootloader braids/drivers stmlib/utils stmlib/system \ | |||||
stm_audio_bootloader/qpsk | |||||
RESOURCES = braids/resources | |||||
include stmlib/makefile.inc |
@@ -1,311 +0,0 @@ | |||||
// Copyright 2012 Olivier Gillet. | |||||
// | |||||
// Author: Olivier Gillet (ol.gillet@gmail.com) | |||||
// | |||||
// Permission is hereby granted, free of charge, to any person obtaining a copy | |||||
// of this software and associated documentation files (the "Software"), to deal | |||||
// in the Software without restriction, including without limitation the rights | |||||
// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell | |||||
// copies of the Software, and to permit persons to whom the Software is | |||||
// furnished to do so, subject to the following conditions: | |||||
// | |||||
// The above copyright notice and this permission notice shall be included in | |||||
// all copies or substantial portions of the Software. | |||||
// | |||||
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR | |||||
// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, | |||||
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE | |||||
// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER | |||||
// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, | |||||
// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN | |||||
// THE SOFTWARE. | |||||
// | |||||
// See http://creativecommons.org/licenses/MIT/ for more information. | |||||
#include <stm32f10x_conf.h> | |||||
#include <algorithm> | |||||
#include "stmlib/utils/dsp.h" | |||||
#include "stmlib/utils/ring_buffer.h" | |||||
#include "stmlib/system/system_clock.h" | |||||
#include "stmlib/system/uid.h" | |||||
#include "braids/drivers/adc.h" | |||||
#include "braids/drivers/dac.h" | |||||
#include "braids/drivers/debug_pin.h" | |||||
#include "braids/drivers/gate_input.h" | |||||
#include "braids/drivers/internal_adc.h" | |||||
#include "braids/drivers/system.h" | |||||
#include "braids/envelope.h" | |||||
#include "braids/macro_oscillator.h" | |||||
#include "braids/quantizer.h" | |||||
#include "braids/signature_waveshaper.h" | |||||
#include "braids/vco_jitter_source.h" | |||||
#include "braids/ui.h" | |||||
#include "braids/quantizer_scales.h" | |||||
// #define PROFILE_RENDER 1 | |||||
using namespace braids; | |||||
using namespace std; | |||||
using namespace stmlib; | |||||
const size_t kNumBlocks = 4; | |||||
const size_t kBlockSize = 24; | |||||
MacroOscillator osc; | |||||
Envelope envelope; | |||||
Adc adc; | |||||
Dac dac; | |||||
DebugPin debug_pin; | |||||
GateInput gate_input; | |||||
InternalAdc internal_adc; | |||||
Quantizer quantizer; | |||||
SignatureWaveshaper ws; | |||||
System sys; | |||||
VcoJitterSource jitter_source; | |||||
Ui ui; | |||||
uint8_t current_scale = 0xff; | |||||
size_t current_sample; | |||||
volatile size_t playback_block; | |||||
volatile size_t render_block; | |||||
int16_t audio_samples[kNumBlocks][kBlockSize]; | |||||
uint8_t sync_samples[kNumBlocks][kBlockSize]; | |||||
bool trigger_detected_flag; | |||||
volatile bool trigger_flag; | |||||
uint16_t trigger_delay; | |||||
extern "C" { | |||||
void HardFault_Handler(void) { while (1); } | |||||
void MemManage_Handler(void) { while (1); } | |||||
void BusFault_Handler(void) { while (1); } | |||||
void UsageFault_Handler(void) { while (1); } | |||||
void NMI_Handler(void) { } | |||||
void SVC_Handler(void) { } | |||||
void DebugMon_Handler(void) { } | |||||
void PendSV_Handler(void) { } | |||||
} | |||||
extern "C" { | |||||
void SysTick_Handler() { | |||||
ui.Poll(); | |||||
} | |||||
void TIM1_UP_IRQHandler(void) { | |||||
if (!(TIM1->SR & TIM_IT_Update)) { | |||||
return; | |||||
} | |||||
TIM1->SR = (uint16_t)~TIM_IT_Update; | |||||
dac.Write(-audio_samples[playback_block][current_sample] + 32768); | |||||
bool trigger_detected = gate_input.raised(); | |||||
sync_samples[playback_block][current_sample] = trigger_detected; | |||||
trigger_detected_flag = trigger_detected_flag | trigger_detected; | |||||
current_sample = current_sample + 1; | |||||
if (current_sample >= kBlockSize) { | |||||
current_sample = 0; | |||||
playback_block = (playback_block + 1) % kNumBlocks; | |||||
} | |||||
bool adc_scan_cycle_complete = adc.PipelinedScan(); | |||||
if (adc_scan_cycle_complete) { | |||||
ui.UpdateCv(adc.channel(0), adc.channel(1), adc.channel(2), adc.channel(3)); | |||||
if (trigger_detected_flag) { | |||||
trigger_delay = settings.trig_delay() | |||||
? (1 << settings.trig_delay()) : 0; | |||||
++trigger_delay; | |||||
trigger_detected_flag = false; | |||||
} | |||||
if (trigger_delay) { | |||||
--trigger_delay; | |||||
if (trigger_delay == 0) { | |||||
trigger_flag = true; | |||||
} | |||||
} | |||||
} | |||||
} | |||||
} | |||||
void Init() { | |||||
sys.Init(F_CPU / 96000 - 1, true); | |||||
settings.Init(); | |||||
ui.Init(); | |||||
system_clock.Init(); | |||||
adc.Init(false); | |||||
gate_input.Init(); | |||||
#ifdef PROFILE_RENDER | |||||
debug_pin.Init(); | |||||
#endif | |||||
dac.Init(); | |||||
osc.Init(); | |||||
quantizer.Init(); | |||||
internal_adc.Init(); | |||||
for (size_t i = 0; i < kNumBlocks; ++i) { | |||||
fill(&audio_samples[i][0], &audio_samples[i][kBlockSize], 0); | |||||
fill(&sync_samples[i][0], &sync_samples[i][kBlockSize], 0); | |||||
} | |||||
playback_block = kNumBlocks / 2; | |||||
render_block = 0; | |||||
current_sample = 0; | |||||
envelope.Init(); | |||||
ws.Init(GetUniqueId(1)); | |||||
jitter_source.Init(); | |||||
sys.StartTimers(); | |||||
} | |||||
const uint16_t bit_reduction_masks[] = { | |||||
0xc000, | |||||
0xe000, | |||||
0xf000, | |||||
0xf800, | |||||
0xff00, | |||||
0xfff0, | |||||
0xffff }; | |||||
const uint16_t decimation_factors[] = { 24, 12, 6, 4, 3, 2, 1 }; | |||||
void RenderBlock() { | |||||
static int16_t previous_pitch = 0; | |||||
static int16_t previous_shape = 0; | |||||
static uint16_t gain_lp; | |||||
#ifdef PROFILE_RENDER | |||||
debug_pin.High(); | |||||
#endif | |||||
envelope.Update( | |||||
settings.GetValue(SETTING_AD_ATTACK) * 8, | |||||
settings.GetValue(SETTING_AD_DECAY) * 8); | |||||
uint32_t ad_value = envelope.Render(); | |||||
if (ui.paques()) { | |||||
osc.set_shape(MACRO_OSC_SHAPE_QUESTION_MARK); | |||||
} else if (settings.meta_modulation()) { | |||||
int16_t shape = adc.channel(3); | |||||
shape -= settings.data().fm_cv_offset; | |||||
if (shape > previous_shape + 2 || shape < previous_shape - 2) { | |||||
previous_shape = shape; | |||||
} else { | |||||
shape = previous_shape; | |||||
} | |||||
shape = MACRO_OSC_SHAPE_LAST * shape >> 11; | |||||
shape += settings.shape(); | |||||
if (shape >= MACRO_OSC_SHAPE_LAST_ACCESSIBLE_FROM_META) { | |||||
shape = MACRO_OSC_SHAPE_LAST_ACCESSIBLE_FROM_META; | |||||
} else if (shape <= 0) { | |||||
shape = 0; | |||||
} | |||||
MacroOscillatorShape osc_shape = static_cast<MacroOscillatorShape>(shape); | |||||
osc.set_shape(osc_shape); | |||||
ui.set_meta_shape(osc_shape); | |||||
} else { | |||||
osc.set_shape(settings.shape()); | |||||
} | |||||
// Set timbre and color: CV + internal modulation. | |||||
uint16_t parameters[2]; | |||||
for (uint16_t i = 0; i < 2; ++i) { | |||||
uint16_t value = adc.channel(i) << 3; | |||||
Setting ad_mod_setting = i == 0 ? SETTING_AD_TIMBRE : SETTING_AD_COLOR; | |||||
value += ad_value * settings.GetValue(ad_mod_setting) >> 5; | |||||
if (value > 32767) value = 32767; | |||||
parameters[i] = value; | |||||
} | |||||
osc.set_parameters(parameters[0], parameters[1]); | |||||
// Apply hysteresis to ADC reading to prevent a single bit error to move | |||||
// the quantized pitch up and down the quantization boundary. | |||||
int32_t pitch = quantizer.Process( | |||||
settings.adc_to_pitch(adc.channel(2)), | |||||
(60 + settings.quantizer_root()) << 7); | |||||
if (!settings.meta_modulation()) { | |||||
pitch += settings.adc_to_fm(adc.channel(3)); | |||||
} | |||||
// Check if the pitch has changed to cause an auto-retrigger | |||||
int32_t pitch_delta = pitch - previous_pitch; | |||||
if (settings.data().auto_trig && | |||||
(pitch_delta >= 0x40 || -pitch_delta >= 0x40)) { | |||||
trigger_detected_flag = true; | |||||
} | |||||
previous_pitch = pitch; | |||||
pitch += jitter_source.Render(settings.vco_drift()); | |||||
pitch += internal_adc.value() >> 8; | |||||
pitch += ad_value * settings.GetValue(SETTING_AD_FM) >> 7; | |||||
if (pitch > 16383) { | |||||
pitch = 16383; | |||||
} else if (pitch < 0) { | |||||
pitch = 0; | |||||
} | |||||
if (settings.vco_flatten()) { | |||||
pitch = Interpolate88(lut_vco_detune, pitch << 2); | |||||
} | |||||
osc.set_pitch(pitch + settings.pitch_transposition()); | |||||
if (trigger_flag) { | |||||
osc.Strike(); | |||||
envelope.Trigger(ENV_SEGMENT_ATTACK); | |||||
ui.StepMarquee(); | |||||
trigger_flag = false; | |||||
} | |||||
uint8_t* sync_buffer = sync_samples[render_block]; | |||||
int16_t* render_buffer = audio_samples[render_block]; | |||||
if (settings.GetValue(SETTING_AD_VCA) != 0 | |||||
|| settings.GetValue(SETTING_AD_TIMBRE) != 0 | |||||
|| settings.GetValue(SETTING_AD_COLOR) != 0 | |||||
|| settings.GetValue(SETTING_AD_FM) != 0) { | |||||
memset(sync_buffer, 0, kBlockSize); | |||||
} | |||||
osc.Render(sync_buffer, render_buffer, kBlockSize); | |||||
// Copy to DAC buffer with sample rate and bit reduction applied. | |||||
int16_t sample = 0; | |||||
size_t decimation_factor = decimation_factors[settings.data().sample_rate]; | |||||
uint16_t bit_mask = bit_reduction_masks[settings.data().resolution]; | |||||
int32_t gain = settings.GetValue(SETTING_AD_VCA) ? ad_value : 65535; | |||||
uint16_t signature = settings.signature() * settings.signature() * 4095; | |||||
for (size_t i = 0; i < kBlockSize; ++i) { | |||||
if ((i % decimation_factor) == 0) { | |||||
sample = render_buffer[i] & bit_mask; | |||||
} | |||||
sample = sample * gain_lp >> 16; | |||||
gain_lp += (gain - gain_lp) >> 4; | |||||
int16_t warped = ws.Transform(sample); | |||||
render_buffer[i] = Mix(sample, warped, signature); | |||||
} | |||||
render_block = (render_block + 1) % kNumBlocks; | |||||
#ifdef PROFILE_RENDER | |||||
debug_pin.Low(); | |||||
#endif | |||||
} | |||||
int main(void) { | |||||
Init(); | |||||
while (1) { | |||||
if (current_scale != settings.GetValue(SETTING_QUANTIZER_SCALE)) { | |||||
current_scale = settings.GetValue(SETTING_QUANTIZER_SCALE); | |||||
quantizer.Configure(scales[current_scale]); | |||||
} | |||||
while (render_block != playback_block) { | |||||
RenderBlock(); | |||||
} | |||||
ui.DoEvents(); | |||||
} | |||||
} |
@@ -1,97 +0,0 @@ | |||||
hiklnpstvz||~亙剣墛審憫摂晹敂搾悗媺�ytne]XSNJIIKPV]ht倧灜妓阡祯��麴柁尤急�崉{rib[URNJHHIHHKNPSX\_dhlquxz}~}}|zxvtqonlkiihgghgh{z|xvuuvuqrsqnmmnnlnrtvz}儑垏嫀崑妸妵儊}wrokd_ZTROPRWao|尃端阱��鲱邕辛喘�枙晹憦弽妴儉}ytnifaZVVUTRUZ]_binoprtsqoopppquxz||~€}{晻敁敀弿帇妷垏唵厔剟倎}yvrmigc`_]\\[ZXXVTROMKIGFHJKNV]dq亶洴了凫蝓���纛溘账扛哎湐寔zskb\UMFA:8767:?ELU\clswz€€亗亐倐們噳墠悜挄唩ywxvu{}€ztqmils{儛櫆湙�si_]bhn}墝帗拠噵嫀牠�喇攨i<$&Et幏�����wPHNGFZfcn}亖摗ⅹ冻�搙aSE43@JZv帨�藩�{ibWNS\`hx€儔強唵敋灑&Ζ�湕巿€vng`[WTSTVY\bgnt{亝墡悘帋媶倉xrkf_[UOKJHFIRZey寷彼苕簋��胲使�坸jbZTMLMKKLOQTX\airy€姅洜えà灄弳{ohc\YZ\^djqy€噹敂*��悅sli_QKKGEM`p~帤湜攧wqiZPLE<46@K\t垨ⅲ殢噭yxylP@>2+Lp叕蒿铟�疖忠陋棈oikqz墬さ蒙是啪瑪ybJ'-6Gi嫕Ρ富拱�憖lVJIC=FZgr倲舶�牊強墋yrjd_ZTQPQFQNFKRPKOVWRYaYZ`_ZY_XUXWPRUOQTXS_fbhw~{崯毃韭捎噫桉�����綮遴蚜匠灁弚jdXKB:5/&'+(+.8;BOS^inw唻彎う┒弹芳繁矖櫆悏強~z�sptvqqvuvz倐€垘墢悊彊寑姂}q}waZhcICSM<AM@8R[HPkmf拠彴怀河苎隰钯��嬷栳排刹湙晝pgdQ?F@&&1"./!.?AAN^deo~們帣枛ⅵ牊ぃ�椃�倉qSPYRPez厤潬攼彁僲caT;5Kiqu惁珢uwkA.D'7FDOgvz唸uxyg\t俲p枠剦ó櫇妓锰拮严籂灅xp懀ⅸ灰夏碌爖e\UaM@a剺�脘艜€p8>1=fv啴型法瀽亁tqru|噷噰摌弽棤洏檸€ugTJS^en倱枏�p\G?=:6;GT_efkrl[STRJMTg捊赏��宸�刬gs}帰Д不瓫牣�オ�噏dYNGL\m€敚道颈�mUH3",AKTr崣ざ疾▁噣{~}y|尀�毃父獰洅寣則oqj_dw乻go亜~r_OO^aK63/"#4=5%5ZfWIE^��拾冽箬胥硾牂嫋�cVl崸�妽澃嫉牀枂u儫昹TXemx|lWVgqidw唞p倫噣崝厁増剮'潩Κ┆�櫅棈厑€zolqqiefghfed_^eaOHSYH32BE1!+=@32ALP\u唟q曈丕澷�峥豌芈盟簻敠獕ls垏sfm|亃x亰妷崠槖挍煋垘晭|v{{pfiohahqnjq{儔�ぃ舅净排菩慰杭糠�晱晬sfeaWQC:232/!##-#;:52;K]jo{{x曇虦犵�庑睇龛�暌噪蛩ǘ嘶�殞亱妕bfggaULORRUNDFX]SN\`]gvnhw唺墛彍瓂|qnqz}t~倆彁€垘憤墖噷€啀e{搈h亪|~悞嫚珕叄乽媈OdH77%"&B38pmeシ牻沌彗��噫杷徒敊爍apWJZPBLVW_aa_t乛i攞v張悡摑攼湥攲洕帀墘厇~{oy�沽僚乙驼赜蜒吓驴拱�晱媦ro`XUUC=>9090'*!*)&&(,56=GWa^t悋壔默漓巅瘕貊��麝潢夼呐睙�~{乯]bYDKI64?4.303:77>EFMVXZfrsy唽嫏Ζ瑇far惈獥牴侥尸弶彇弚ks~噲{tyskszbDBQ^fY>=WopdVbn_]dU<+&?URHI[kva楝児�铷挧��⿵懕橇▽~摬�Zl€垐onqv墫€[Og唡UBPgvzlo啔ア妏s彏恱hr|墧牚暗犯党�洃�wpjb]XRQPRTX]dnx厧殻�逗当�弨q`QB82-.+-/7G[t墴泵组齄��嘈惊攡hTE;41025;DPZfnv}啂敎ⅵ┈��á檻�tkaXPJHGJOW_hhfddglry~垜槨¨ィ灇搶厃qg_][ZY]bit~垗敇煝"湕垊zndZOC?;;<:98?K`z挧夹弼��蜩秩急�悑墘寣噦wnd\RF=1/-6?MYgw厲牗���枎噧|ztuqonlkih47ANc槾枢祚镙味�xi[XPQNMNHH>?=ALXn倽睬剞滟痛焾pbRJBDINWROC>?EWdu劃乖轱蜷菪露�亁uv{xuokd\YOI?91-6C\v毣嘴觞��摊弜bULGFBFEFC>914Z[_ft倸�晾丹巤g[PLLScny|~zvnjiipy姈ˉ�晥xdL<33;GTbq}墣妧pggs啟非蚁评返吹寂暂孓械梱ZG868?Sdw|zlUB9BSq幉题觜�峁巇E1)&+5D\lwxug_Zt垞煪春磕穆扛畅煏�vmg`YVVTVTX^`hgkjjhgb[WNJA@;;:=@FNXet~問灠豪涡抑圯噱珉轲聱�鲺熹鬯阔殏lYH5& )7DN]hv|€�€}zsqida]\]adlt | |||||
#=b偆料辛獣~rpp{垯�珐塳J,.[嚥忆蝠闾瘧qQB:;>BHKQWcpsy尀迷招畠smw垷�喵�蛴漦E'":[埊授蟹杚Q.>i摴媚耽廽I.*Cl椇者阖祾a4 | |||||
€亇|zyune\TOOOVX^chlrx{們唹帒暃、ウЖイ灃媬vmf]WQLLMRRTRROS`r姕�爆┇�ぃ�验��疒篓棅�}xxvyxobK5-DUcjlpproqor|尃�晾藩洂妱個ǐΕⅲ灈搻墐~zwrojkgkikihefeddehhmmsuz}亗亇zxpoig```ahlx~}€剰枴Η�脑忪蝙�����菪脸�攧ykcXRGA4*+4BLXbis}嫃櫄、Ε┆�╥u姀搼媯zslmox~儙悜坺cO<:Hd尩匍嫠�[LRq毱弪愫匧 Bl墳殑cI31;Vr彥耗陆搏Д�棵禄搐拑reWRQW^jrroeWI?;AO_w崬Ε瀷}njmy墯Й�巠k`^_i缕仙式掸à�殝噚mkdaVRIIBF?B:BGXY[PNGLP[fggggejfn`d`o|崪�搷棳掠瓤埠蜜徨瘴狡套遗�拫弽噏fQTJVMJ84&)1/1##H]m]XPd}灚川Θ竿谵滞韭仐犊玫珱洓ǒ焦矚僺u厲湊vXQSkz卽cKGOeqrbQGIVeqkg[\Zcgw帒憖vx啓煔垊柟烫禑棿怎鹫瓩灪延綕剒厪檵乲aRQINV_\G$!RruK"#W惁歬KFi浛矛弡丠BY~潷歿\NYq敧瘺{`Ua~湱�gQQh姢獢sVM\|毃瀱j]e}毇獢wbct摪甫俌;0:_埆攻xK=[溾�町lI]欆�燴3:i浄瓌P,%;c嚇恡N.)Bu�穵Y>P伝茉�JMtB綔lHL/0P埥站嘚4K広�醣e4;u鸿谉S B}Μ媂-0\劅爧mWVk懘嚷�il嫶油猳<'T劚尽e,<呉襦�;O幵�痩BEl⒙罏lB.=]儧檣R*0b樁瓋P4Bv�萤rNRwㄇ弄yL;*&.J\nv嚡���耔屑梸relTD!;q媼|ir彣京厃w倈hRAQm倖mhw�鹞歚I@Tpq媺yTDFm狠旌wDGy陪蕪I%)e毐�jY^x垰Γ泙S2%L€�丂#q奉悚kOp�鄯孿;笣Tm�;W泑此l曥璡et~靖V0娊峮rft獰HFФr^ge兎濦>剺殐jBg钙oSYnv槐^O摤{l|jf枑et�BY悹棎[Htǔ俉H兺狤:灡唥kP嬤�4Z棐�Jz�糮H4z�+壪笝]nx榺Z|禌:}窎P儩恠n€暛]qv抾憉宼u亪恟~€u巻a#ZC�昣|墂z◣`Y獁u帞4]虏:K柭kRf翖l9囓�m璜:锲3��\%f銔8n簶Jv彅wr劀x[弻憌厴Ke�`Rs稒v:3?(3W|叆氯拱爳倊剰唓x墠倎儊odcjunsyy}€亝弾wv噽棊墥毀瓫€r剣{aKAUuvjmy垔墖媺儁t垔}噾悐彈媬|挋俲]lrrmjjt墐厲牁墂hbayzw墽兄斧切攙_B 2)8a姇Φ涵�晢z}妶{~寬坿xzvmfeklnsx剝啇拤墣悗嫀搾彅搳亐zuoh^ertpsz倓{{zzss~亄剱憣彈檹噳崊wlmorqpp}媺剨妢nfb]_y摕せ��艽困q_^H%V|\=G^^仾搂崊挄敊�}nw�tqvqidiz~~x|}~剰攱悮檾崚棑媶€|{€倕ucgqyvqmmnmnx{}vx倕~対�亊儏垘晪rv€崌wea_Y^y唫z墳檪樐桩荡拑偙璵^泇F]+0v牜既但憙iafga]o摠焾倫槒{bgookhry儓悪枻�槍�|v|倈€厞崏乴lmnia\h{亄vr}亜墢厖審墐€€{~嚀憡|y{rXBQk倠Ю惊煵穮cg<;壞瘇y悯罌晀@R48m挙�谀殎e]jnbNUi寪挒�s|剚xnt|儔憵殮憚}|€|vlnuw|€姀媴xv|厗vv}|~倗~qgmv}€{vy嫅晽湐剆kissea€湤暏旁瓐g:;K[F@p�炒��詴歾".M:"Kw槺懒疄殧剏lUQi厪�|彔潌souytqw{亙姃晼攲媷墎ujmzzuv~剣剗}€倐€剫寖xrvtpdeiw儎倗憼潖噣}qhdg仈拑嫴焉�{RWZ9"DWmム钕缸�毐堿#HM(/Ur垱�檻媶噷煚憮攤xs{€~rehx姀垈wjky唶姃棐悜妬yplkjlw垙憢妼墡憟}{{vqlllorrry増~倈rrps櫘传槨舅瑔YO^qb66OMFOn|壆阼伟��舯袘^$.JB$5Zu姏�晱�啇搰{帵瘺亃|噧rcdijox|{|儖崓搻厊ux{unpz唻嫅枖帇巼~toty€}{€{z|}xmdff^_iw墭�墙焕京峯?=\_NH`tpv倇eY`hn嚥焉甭��戌沠*&FH2*Qt姙按瓲憙ywuoo倵煍垙ò晈c_hidbfjnu€嫆棔崅|亅uv亞剣暆檹噧剝wlt~亊xxrsxteYU]it姟�└疫繘nRbj]50Rr}倧殢妰s\NP\c|�纬��琰�*7?%Nv尋讣穿槇xxysku垞崌將�{媼x`R^ed^`jx厭枙憮拫倕棢憛厬槒wgpyxop~噭zqbYWYVZk尐�底晟煇yttY:8NbVZ|殲棔檷亂iQAFYev浵涮芬����08OC#(Nv帲贝�檹~~亊~垘乸hy妽mnwwx剤vhaf{墜媼妺暃檴{€妴ypz崟寖噲亄~scRMUh拸€€⌒要搚o|}t`_lkhx嫅xkz崐}唫€剛hMF[o€柡突チ���祪KCYL&&Fo垺驳�湑亀txuw儚寖}亙wfVWcjns|啇湧灅媺搻乶gnw{}倗實彅檹€zuk_\dmv仌�敔捣峲fOTcdYZk嚄'瀷唸俰]fz}剷晫�o[JLXp嵅恋⒓���绹Y7PM3.Lt姏�搐憜wpoomq寢亊嚀憓e^cb^_gw亣彏�棘枊rfghefmx剬敍槄pikmp枴潛「禃唃OT\]NOfw}剨憲灉寊{唽}nv姁厊儖墈n^QINZp嫯帕����諒`#IR;,Fo姉牗�媯|wxww亷攲zs}噮weblqolmu{yy啘�湋棪�rakxvk_am|€~垵�敋裁�uYVc^G>Ncku垥枔悜摉搮ut�nm}帊�亙|q`RLOWh埑种交���隊j)2KB&+Sz悶�珱�nfjlow亜~}噿枎}qruz|wsrqlkt倫敆櫉�憦弜`UQd儫�墵戎磿fbfcF7IZ_et|x}嫄帄噴憵�媨y€~wru~{ssv}~nYLIQd}樃坻勇����菂N!>?,*In厸��€qbZ_ekv儚敆棗殬憛wmhjonjehu剮摋檶~wxwwsl|澝胃┊梁恮Y=Od_NTjmku}}usokq€垑墠枬、瀾亂yrg`cmqt}剤�vk`UVez熎咴肯�饱棄ui]ULG>4-&&&&# $(+0:CNX`it倯牠逗科艳祯�黧铍腚觇滢紫羌菠晪剕voaSD:/+($ '-37<AJQZbhq}嫏Σ咕锰盂忖嶷找幼葸拮吓痉汕恋�€snkkcZLA8/*# #,1689;@JXempqqt嫏П咕檬于怄腼赭黩柃屎挡爱�寎vrsroeWLGDJPVZ]bfltwvtoot~垚憣噦厪湰辈��裂坂塾饲蓅tuvslc[TQQQOI@5*"!(.5;AEKPW_hqx噵彄晼棖槞灐Ι┄�潩灎ぅЕИ�寂艘刿徜轫蝼���镤塾紊媒传�枔攽寘~yxz厙�xts竟抄�殨巿vkaWNE<2( "*2;AGLRYcnz厤摋殱ˉì�倒痪炯悍档刀贩幢�Дィ�洍搸妶厔剠唶噭儊€們厙唵噳崜槦ぉ�妇派烫是美緬弸厈qf^VPKFA<5/)# !(06<AEJPWakw儚洢�壕氯沃捩腠盱腱锺貊黪耢珏汊沐玷玟噘油扰昧谅量几窗�┆�ē�槙搾��攱€ug\SMJGFD?9/% | |||||
)5@KSZ_dkqx倠枲┌逗夯换玖剖吞汕拿钠侨汕坡拷揪苛们送衔似篮挡隘膊嘲�ěИ�蹈构返碑�冀技还唱爾巿儊|vph_VLA4( | |||||
'.39@HQY_bceipx倞悞摋灗尘翘瓮窝走轳鼷������蜩芪恋�憚wj`YUUVYZ]aeinswz€墥灙彻綒牕�富环钞��床鲍ァ潤晱唥sja[SLE<61-*'!!#$'*07>CIOYds亶棡お焙锰咱掴骐秭����蹴阗闻徊�拝yk`XOHB<7656:<ACGLRW^dipv}厡敋mjhhfc]WOIDB?<:62248>CFFDA@@BDEC@;7558:<;840.-,,,+*(((*-04:@IS]gov{亪彊�彻铰窍诌珈镳蝮鳄������箜孓籽躺敲炕冻渤脖�潛媴個|wrm卾i^SI?5* %+.149@FLPQPOPSX\abbbbdfghfd`]\]_``adhq{厧枩煟И����殩搻帊帍弿弾彂敇潰Θ�导檬亿噫眢鳄����蜱谖鹿抱瀿吇洞铂�l^TOH@7*$.6763200/-'$)-5?M[iry~€儕憳煡┉步戎泐貅鲵龛庳涂瓫墄kb\XUQOMLMNNNLHFFHKOUZaly姛雌攒噱牝���遒蚁挝伺阑厐}xo_N</'$%%""$$!"&+--*&#!"$%%$"!#%)+-,**,2;DLPSSV^j{崫┍逗狼握仝卣友研邢挝涎栽椅饶履人吞嗜饰诌珈眄觌眈蝌礤苡唐栏�攱厙儉}wnbUI?840+'!"&('$! !$%'*.4;CKSZ`jt嫋〃�豪铺岩严吞绦又刳圯哜骀驸哔沼蜒矣灾佥怄觌祀腴桎咧堂撼�Б洈崌殩拰俽aQF?;84.% *7DOWZ[]`eoy亞噯剟噵憰枔憥帒枦灋洏晻枡洑槗弽帎摂敁拻摋殰湝洐殰〃�廊显佘咪轲貘鲵赈苜刂油碌�歬gdb^YRLGDBBA?;60,*))(% | |||||
!$&*/4:>@AACEJOSVXZ\biqw}亖儏嫅殺ì�督檬性棕茑骒耵趔蝰蝓�������镩溧壅文汞�槗巼€xpkPNKG@80(#!"#%&'%$&)/6=DGJLNQX^gmqrrpru{€唹妶唭€|wphaYRMFA<868=CIMONNOT\eow|倖寬洟┋椿锰邹彗梃殡盹耵貅�����鲴脬靥颈�悎亁ne\VQP嚷戳�檵乿`WL;@$"'%4EH]\nt啘ㄎ挽蜷秫赧痃诟�弸ipaA@99B&04'+6EPjw悈敓崬殻泩晑t唞妵€~riohegS\XVtk寬暛冻剖势膊���サ�钳蕊磴钭坡�張vgZTF6$ | |||||
.2:SBONSVZgxz棜Ч琅谪抻耘浇挤钵瓪枙巸wgWWM@HOX[Zigjqt€|倂msgeym€亝€{tm\[XJQLM[Ubmt嚁悾珷煔晲姏洭导裳袖埏���痄陨鲸湐坾ldQ8)&26CCCJMPW\nsz寵�菊淹闻录脚量径椽 弰sWZNGOPW_YZY\`hw~zsoiemyx~�倁plVSLBOIKSUZZ`v}啌潪弻妜~噺牋布恳苠���蜷靥揩ā晵噞iUC*%,-;ECITTS[belx~垵�咳亢谰�吕劳厦净瘽拋hZREJPORTXLR[Yhrpjegadwxz噧剒|uZVTEKMRPT[X[mw€彍潝妳rt{}彅湩�套铊���蝈遗杯Α洐崄tbK<.& #%(47=FSU_hmnvz姖Н饺几蛋Ο蛊厢庹搪瓰憖gYJBDMNYZXPRORZheb`a\fr€墦敀唫qaWXOTWZY]\]cqx厫牃搰~klks{亙崝Ы骤蓰�蜞骗瀿櫇洏攷€yobTE8/+19CHKLNS^iqty|vu亸”俗珊珮噺�冁熨亩ā搟eK?BJRZieZRPHKTcc\TQQdw崪�殞€tf^`[`dgiohgks{嫋�槆{heflw}vxz墹螺痒�渑瀢ci~墠噧|mqsm`ULDIM[_XQNHObmv儏坰n{墰糙胝粺唃p暰葆闶瑹潷殏nQEL]y媽zdG?AS^e_I5$.Vp尀�厐{uggnks~巻儎zwz嫗Т徊恷mgiq崚|n_gw犙���笉dYk€妷墑vhuum_ZLDKTfe\RJDRdn€帋唎m}專彭踝箼}cyQ珈榍�┆搙`F<F^{厎hR1.<LS[R:"3^w暒�墔tmmux償煋悓}}仒Н伎﹥sgcew搱mWNYr���烨沶TWgy儊xmkoj`XMGHS^h`VJGK^m儚棆乼z垹妈�盈妐n惥屮鲡茂�瀮eI:;Sj€|oS7!+8FLL8:f劄�崋}vpkmx倵ˇ�媮厲ü盘粶|mdfx寣vVFE_幧蝓笾�XLP]mtwngica]THEBH]`bVMHMWj厱殩唭{嫞田��旖檣€幏摞�啄公檲cK;>OertiQ4*!)092((Jv嫓湒噠qkiku垰┈并棊師�谯涩憉mo亷僾ZC@W埣骢铉翇`LBJVks~rmg[PMC?BJSeZSFDI\k厺�坸}€澔纨�靴坴啓娩��芪陇jH=6JbwymX;&/-68;& | |||||
>]啌潤晜xgdeq仒�渤槕挋�坻佣枀sy~拻v\F8Jk┮耦篁菒^429Wz摜渻aI64=BZdptSG5:Rf啞�憇cgn摣昨戾罎卥es炏���屑媑SBPPew€{aM:AEMXT[K4&&Bk挬鲍檟`FFYj槴量爣ln劃赶凼窉儌€憥枠}f@3Bi櫲祗�蹪a;19]~毉�cA2.9ATejpY@63C^}洭�r_Zd仮音�唯坰bh徔���筵茤mRCNRg|�eI26FSb`_T9& ?l暜喊榶]EEVm懇炕�igx柍授媳峾y厰暁檯mD2:_捗铧镟裉瘹啊ē拵弿巭€oxlW\y潒帀儤��啇潟煪显治嫉漂罚棙┧喾Б灳獁{nMNTbz儉]<H?3,%(%5D]R"-ECJ9-)7=[jhueA^q儝皳�唥寛ql卝墡姁擦摅镡惹性珯啈妛ran卭cX>JSVX]k墇]Kb崑{SbXYX]剷枛妕噝唚oqv敍k`x崿巓x{tjr€澂瘲噰媣fZVcnjKQz��u�刾u~€U?^v唓N8Ml俿ux嚄湋|帩焬q摴珮椑��忄桀闼畩灡晅乭SJ.RUC<58BHEOKg[XcckEgO/SfpjKEqaXFYXN_4OoDOZ[y\BirqLh摃�惱癌芒�吵紪彧腺寥若援�棗me恑\U8<>7Poqam{~卽仧咖ü即返��鲟盱鹨同渻摗洅qI?0DNH>2*=6$1Mnr`_o塪N28t乗@)6=0H!%-27 4%LKTY?=IJ^Gbo亯�侵剃黠�睨倌稍聒趄捱馄伽檶懌~aV2#2/A[EIVszrs啽肚莎┟闷��砭坪潳巣q啍帠|SI5[yWHGCYKGPa搖vx媔ROR€wM>)9P1#,9K3&*CFIIM`E&8J^NTk{儠浵苷嵊��羿僦唾弩驽舟辖仁ⅶ槧簴wbGTWC9FTWk€|塼n樁搏殬槚殾湃睛��悑唹寍厜~s]d_XLTP`PPTjw妢噵杧omm€iPMBM<-(+#0('21720CT@-.7K<:Idlq叜记厌怍�鼢铒���镝匦僬铆岛禈噊kZP?BKLHT_nrpy€剠悙媻悙洠�棤潪崁}摌挐�uwcjkkcwokl~姪ガォ槜恱~厖rfdMJ@A,@@@94+<C67=8#0%'%2>Xkf墽�仆唢皴珀��黧骝渥讼问未灟禎妡XRN?1.(:HDPbXQcstq噲乻x垞湕棑洃媹厰�い潩洔憲�彄|}剻�洉墣垇{uwrj[DK/.8,%#2);C8@NCXaifz棪切商茆蝌��鼬�蹴坩踊ⅲ潧檰r寬}m`B?E?6;32<GNSVV^lon}{}亪湡棿寄淌质杏兆卯岛锭攩妵v俧j~俷paXSNNC&* | |||||
8_UURbw剒vvz洂敁蚕桴骅辄�煨怦蜮酝赜撩皶啇帠坣gttcO836+*&.545DQToqWV^t厎姇ǚ链谶悠列敲勘洍巿uzm`WI12"(%9")1)&)'G8FKUY~|}eo厯�晸�ˇ�灂姕棎煂挔�-棓Д�いえ煹�~{~搶€br亞ugW]VkbbQTTm\cx唙攬摖脯悼黉橼逃稳帛�搰xuni`PV;3# | |||||
6QXLYds啠�敺攘ザ捣窍涪甭购☉槙唘lcgokcjnox|tv|{v崗儑媠崝xds|亰|cp儏乶b{ttah[Ul卾啍洟既嚼运哏噤靥挡�檳€tmaVID>6&& +/;AYbcht}暎ウ�郊共碑��灆湕崁urogZYZ[][[eoppusxz倓寪搾晲挅搲帞棜攬崠槖寛帊崈儐彋オ�灸饰室孕饰似坏�悗剉fZNG?9-$! | |||||
'1;JY^nu~倯煪蹈荒履门痉弹┃�搻€~vg^XPOXWOMMWemhomot{亖媽垐悗審悎彋槚憠彉櫃拫悢棈櫇ⅹ坊榔舷哲茏匮侨鹿��拤~rfZOC81( '5?ITaju厭湩�焊纠寐靖刀鲍�悓亁maZVQNNKILSW_dgims{倖寧彂殰殰灇殶湞殩槦。灆潱ィ┄┎杭盟兄谯坜圩沂驴拨搏�崁vjbWLF=3+! | |||||
!,7AIS^gs~姅櫍�豆患垢贩当��棈厃nid_ZVSTXY\adehinw{倖姁枙摃晿灊湜洕。 煙 灍牐�锤痪氯怂吞扇让凉擦靖獩憤wi\SPE:+$ | |||||
$,.5CMYbly帢殹┋创炒冀档铂�攭僽lf[SRNNURQV]^cjny厠憺〃捕倒冻缓恫���櫁枙悗弿枮灎Θ�汗唤虑饲锹辽露�墍xsqnkfa]XUTQK@1! !-8@GNT[cjorvz}亪挏ク岛玖纳噬啪栋�灅枒弻垇ypkfdcca_\Z[]`eilmoqttustuy}亝垔媿悥洠�北�│К尘窍杂游扇眉椽�枒媯vhZNFB@>9/" | |||||
"&')+-.0369>DIMT^gp|嚀潶�购唤烂迫扰美胶但爾強増垎�{zz}€倎~yrmgb``dhnsx}€儓帟湧�蹈灸商舷吞托已刑荣骀苑攕abr厧弫hWOR[fpqmf_VSXaYG/$8EIJJPRWam{厳�盟严藕倒孪棕滞巳瓶皳vZG717ADGOU`s崵艾�ydTHAK]mv€儓媽垀m_^hs}彚��潟湭噶廊钨 洆�sic^[YUQLGB=94/+)(('$ !)1:BIPYcmuz€剤憳煡�撤杭汗贩辜聊拍吕烂粕滔延栽椅赡炕狗斗兜嘲�Гⅲ┎脚缮坡谰憾矮В垡呛〇乸bYUTSPJB;50./48;;81*! #&)*)*.28>BEGLXj摝澈玖屡峭炎圮仔饶抗蛋�灈洘お狈唤己凡�棃xlb^\^__^]`fq敮溶膂���痣溘煖槗媮uj`ZVUTROJC=71-+)'%! "&*+*))*,.0248BRey嫍潪潩煠�壕揽靠撩哪辆苟吹附盟易圹谧杂右刑偶勃�潩潯Ν醇萌适膳澜苟铂В煓晱墏zpe[RKFA=82,'# | |||||
!%+2:DRanz厤摋洜オ�壕屡人臀瓮耸适宋颜谵怃溻噍谪渍右咸噬墒颂臀闲釉匝问趴旱艾В灆��殥唜j]TNJE?70)% #*06;@FMU^els|噾湧��Ё�掣患浇窘脊疮─�ⅴ┉辈舶�Δ�煚ⅳ�可易渍蚁窝诱匝糖驴己垢挡�煑拸墏wj\PE:1( | |||||
#&+2<GOW\afks|儔彆殲ⅵèГ�牎うèЕイぃ�櫀拸帋憰櫄殬棔暁ⅷ�刀妇葡遮谮儋佘哙噢谥倚躺帕翰�寕xqjaVK@5* | |||||
&2<ELQSVXZ]bipv}亜唻摓�琅侨商弦灾晕瓶栋��┄Е 灋)辰莆洲屙斛���黪蝽驵僖唐扛�槓噣xri_UH?70*% | |||||
'-39@GPW]acdcdefgjpy亪媽媺崜殹Й�陡阜钞�灈槚晹晻枠灔�坊柯妊汆珥蝓���耦扉驿哔疑凉暴��xsnjf`YQIB<61)! | |||||
$1<FOW]aehjlnoopomkjkosutrqqu~唽悢殺�逗赋��洍敀拻敄殹�潦颜剌忤铘������铊噘晕誓疾�枍�崉{toib\TMF@90& | |||||
&,38>FOYajqvwy{~亝嫄敄晹敂棛洑櫂櫅牏ⅱ煕棑憫摂枛棔晹棞ⅸ狈祭菩兮轱痧耱趱鼬鲶痣驵僭纹抗暴牀崝唚ia[YUQKC<5.& !#!!%,7DQ_lw€噹枲┍倒汗贩航撩穆镜�拠~zyyxslcZRMIJOT\aefc_\\akx厬殺┎缴者珙豉�����獒匮伺阑动�敎枑噞oaSIB>?@?<81+'%$$"!!!$&''%!)5BOZbinv亸煬犊门市汆彗驷苷颓梁鲍�攰乿gXI<1,*-/0.(#!,=Rfx垟’啃唠篪�����鲱遘昭似栏癌�噣{unf]TNIFDA=730/158:<<;:84/( "+4=DINUap€帤ⅷ盎蒲佥壑椅松热坡喊�棓晹悐亁rory倢暃煟�醚茕珑珀秕���钿傩嚷挤皑煐巼k_TH=4+" | |||||
"(+/35777631-)$ | |||||
!&+19DMXcn{啌潷埠盟于咪桕腚殍遽捋盅糖驴郊苛攀险汆尻矬鼹�����躏栲叵萍宝洂儀kvhYI;0( $+.27;?>>=>==:6-%!#).///29@HOZhv厪洢�孪纵溟铗趄耜汔哌墼兔交铰扑窝诱刭谳徼腩镳痧蝮蝾玎匾颓匠�搵僾剄[E4+'#%-68:>AB?<:;<>>7*$(##/794.-169>J[n€寳煠�特捩腭鳄�赀刎苒丈罕埠盼宰谯圹卦宰掴珈痿鲼�镦菰型墙療枖攽剴z^C.(,//"!2>C@95:BLOMNMKE=9:;@?8((0* | |||||
$9HKD:42334?Sj}墥枟牤囊卺溏眚蝻菟澜粕姆�’老棕圳圪亚娜颜茜酐���焘孜扰恋�嫈潬挌`E1.6@D:-)1E\lqi]VXakmifc]UJDDEIIA1 | |||||
"4<5!)CW\VKB=964=Qh|噸崐憽杜萄矣剌拶暖煕ガ�寔嫗材烫挝纤路驳矫无稃��镝质阑钩��尀�潄aG43@OWODALe€摋崀ss|唶€ztlbTLKKOMF4 | |||||
$7@8# *G_gcYMGA;8@Tl~垗妱墭�闷拍撬糖瘶�姃憜wmy惁孤撩媚粮�┎概兕���枳汤栋�槃ut厸�恥V=+-?Ta\STd~洴钵攨亪憫噡uj_OFCBDA9' | |||||
4@9%7Vpxuk\RH=5<Qgy亜€{倱┗铺松卧蕴瘮~s垑€rhu帲椿够航礁��笨蚤�躅庹吐钒�搢jgv崢恥Y@/"7Tfd`h~櫜哪福悎寫巰skaXIA>:=:3#5C@1#'6Rq嫇悇rdWH;=Oaosurp|帰何苻阡腌酃潈t}剢倂nz彙���返�槥~涝滂彷酝嗣贡�抳aYbr}uT=0(0Ndim|摣幻恋�€€儅k^VOI?=?=?:4,!-?LKE@GXq尅ě瀷{j\MKX^ghfeeu問拔彘琪��食檯媿帋唨嚄��湜煭播檺搻挔�阑竞嚎痉卑⿹ydTSZ^TE4.-%#-G]it啔┋�煈qnngVJEB@=?DGIDAB@>@CKS[[[^gw墱�抄煈€rd`fdgfcbfx啀A茚圄��耘皾灈洕枒挏牁枓憪敜獰拝�|剫枤棞湣┆Βあ�p_UQPE:,**$!(=Scr厴。牁憜wjdc\LB>>ACHPVXTQTWY[]`cginu~嫏Ξ撤董�噟y|tsoigm€妺澔纵茯��质功�·煔棞湈媷厓啒��{uqux亊倓寱棔敇構}qaRID:;/,*%&+<P_l~摓灉槗噛lfe`RHABFGLV^`[XY[_`^`bfglu亷潽卜患惮�悙攲�wv~摏枼幂噗���兔睕湗棟檿挊檳儊亖嚋�晜vjfhghjfefq}儍唽寗{rcVLE;LC?<:=?GS_fw悾ぁ�坹mhgdWI<;===HTUNFBAGKIKS\\`n儞ɑ娜仕沤恫�帆�噲敪钵蔽殄荏�筅话殌儌儚拻摓�妿摌〖兔瘨u\WXQHG?83>OY\fryz{zpi`WLkjkmqyxrnmm|浀还怀杽|wtrdQ;//& ,*")?UX^t槹输痫玑窒舷赏衣⿳剷�&磊夏揸芸潛}`jlj}垘摙睕崣〃氛栀漂僜XZM;;1 )+8JYhx剣媶uk摌洖М�寔x|挭隘勃憛倎亐xhUKH<++0)(0G\afz毑殊赇滞每纳魄确瀮w{啎棃啌牀帨�寃vjX`eft噷毇潚湥ū判慕硰ploeUVO;-*+)&0?Ocz彊ⅱ棑�菇窍瓢殘zx垶ぃ�僿wwxzviZROC426/%.ATW\p懍呸獒胰揽窍醒锌�y{儗巵|€唥u}儈pab]OW]^kv€姎暴牞锤刻郧每渰vxlXYUA3+( #3D]}枾炊�槧А「糖榎Nh€搸棩矟憵殶揼DOqvdDTv刡OLUuc+ .JSUq幖钎~Takyw厹��裟�牆憐屍枵走煽�gOD]u嚛�敠紡WOP??bt|彍yFF\aFSRQSScl^cxqgz⒉畾崢煈t剼牃哫DC@Fj溌匹vzΩ簯mTv呈揑8l揨=/HlyR-=faGW姫�GPo崗寧碘槎~b{捞漥囑��Xf毦碂nJfzzo[c嫗珮洟憆\s敤来e(=ai[ap寭儂l?7]€櫈洠俺�牏槙様巬ngegny墴凹�〕酣巐v唫sYObq]I12=D6*,6;AHP[hjZS\m剰悤煥犯�敒0桓箩��旨按疮渿敡�晬洦◤yrxx}{fVhs[?65>@FGIO_if_cuvx~厞垖悹摕攲儉€俽ccs亪彎钢抻售殪辕í�sacplU<30:30,&!"(6FJGGO]hmw儝.�こ量久镶聩�箅萆番背�煒拠剳拝oou~{rmW8,.' +59-0>NNPT]ah{€儕巬t亾嚍攼乴wznXKan€媴κ彳且珂爻�瀸kZXgm`NGDNMSQ=(#&%-AKKQbspnv啅洟湕�贩捕琳泐��鲩彰碑�晱妼嫀帀乼z唲tkqa8!#7GDAI]_\Zgu{~sv儘弤q|噖寚僸[drpQEWmy|s暳嶂磕殛乇�渿p`ZnzqYKDPXdeP52878ESWZp億s|崡煙晳〖绦拭无潢��麝庑赖�潝妶彂拪oqz|lji`< ,=85>X^YTau�jjt儈uitw厰媯nS`upTObt儌z炋桎驼雉枘�煇k\l儂aH:G[loW93<::BMNRj亂hs嚃�墕櫣炎星砚邈��蹼嵬勾勃枅€倠寠厃fhspe`]T6 | |||||
#50(6R_]Uay寛mjx垎spw厑櫁宺MTxvXG^z厓t幟瘃云犏袷瑺煆yl^t倈dQDN]lseH:A<<BTWYl倈mv嚀檾倐惎脱苹刨盅屮疰诼�━憖tw厛唩v^`rqj\WT: | |||||
(71-9_ojbq厴憏u{唹y{|丩zsT<:}卥hR1">Ku懛皰r��kotkd啑竞榝[Yy拲噡y倿洃垍}懡苑牤藩烤恞.x犯讷拞溰�寰瑐e偯晡漧Vb|⒈焃Lf嫪景慠2RV`cA<B|嫄wxhcit帥塖7E8L"/PslC#5Su摗煋oP5*-=Tj~帬�pM7<Rs柉恳桄臈zy嫑牚儡豉锿潁}倯湯替聆耒械�潰澄沌渥罓厁ri`l姫冀畳fE7;ADVt憽殟uW8.3:?Kf亪z[@ ,@Yu唩hC$!3X儧槂eF,"2Kh儝棎}[7'3Sr帾掠粤焳hfq~姖句翮桑僶qs|惏裒��捉�晻⒒醉躜芊恮ppov嫪滤票攔YPOWk尓汗◤rVA:<DSg崐|^8 '7Pn唺tP/%0D_y剉Y:#/Icy亁eM8,0B[t崶肪矓tb`hv厰�矣郡妝qt~帴逆�襻痰アū雷���税棄垑垝�垡饥寁gel|暠魄範噈UHHSan~帎€cC*/8CSeqsfO4.:BQamiT6'0<IYfaN7& &9Mbs啒灅俬VT`p寶�静泤vv崰恢眦钶撇┆尘朴屮�褡恭煙&�羞芴耽搳垕挓猜攘異wf`cjov€寫坢P8/-/KV]djkbP8%"0@MQUWUH4,6?FLLA,'>P^jw€倄cOHObx墦洠�搥ojr儝Ц韶彐倌豹熬唾泐鼯钯庐Λ仿恃籴阕陋檿湬彻狼躺埂坹sw厛彅晩uXA56@KalrpmcQ>,#%3EW`a\SH50?DD>82$ | |||||
2J^hmqldWHAFUk儜棖搳rd^dw挏忱刃铀憨牕固囔螋箅谂敞�窃萼挹阅玻湣懊险自信皹億亷湤�棈zbJ<;ETarvqeXI9/*-8HW`_VG7( '8=90''@T_b_XMC=<AQex噺崊{mb\Zar崷猜扇趴东か咀膣��朕渭炊裂哏殇偬莱�熬蛙邋咴裙�悤煬潮�媨fUGDL[krqofXJ<1/3=HRYYO=( $186**;IQPNHC:57?M`oy€€xlaZ[cmz専�脊嘲��皆轼��幺蚊颗雄潢扉扌赂渤臼揍玷哂蔷氮!┎阜癄弣n_YW_iqsqj`UH?99?EKPROI;*&)&!0<CD@<8658AMZfmppkbYVXamy啍ⅸ爱─オ备谜犄�熹苷形眼屐镲赆丈侣峭洲骐脘姿录苟蹈纠急�僾mfcfmsvrjaWNFCCFJLOOJC8+ (03775435:AJRZ`a`^YVVZ`ht~垝殯!煛О蝗帚铗痣溥圪谳徼眍龛嶙问氏折徭殓廑阉颇妹排木胆泹亂urstttqka^YTQQPOMIFA<5-& | |||||
#%'*,16<AFJLNOOPQSX^fmsz€唽悩潱�可于徨珑珂珑殪铒镲黻遽掭葸徜驽驽廪谥友邢蜕媒懂�攷墔�zvqlf^kgd`]ZVPKGB>93-($ !$(,03579=@CGJMQU\_ekry亪挊々惫狼鸵剌徜玳腱眄盱祉眄铑铒镲镲眍铐腓驺噍匾颓粱弹�潡憢唨{vspkv憇g壃妚]�墕晳bkw]_F8/4P$71@%?''"-/+"%9amb^ZQhgRnbOFJ\VPq~vO堑桑廊翱叫苠昭��蔗谀值劂牒祝茅瓬鹊亣伂晙墛v剰Kvgid們m寽|€嚑寠xvlM][_dQUKoTDJAA22O6%-!A! 4.) +C^^DHEd灑東g倞0畳r挘枊厲�媿洓櫜瓚崯� ⒆�萋�易镯艺结瓮绥细�拇煘煥超焲攬崚€噛gisikup[YVlZ7SO><9IMS4<1'*%'4),,)0!%.@2:4B[u|bRQq屡矕|挬莆腔毜屠殨�茁zu儢韭瀦仏�檻矽镥骗期梓暝腿抻钟逅谴�睏憰�摀z{ow�rZ^EEUbdL.0EZ9:D3('5;5'E;"!.+&/+-55,),9I:P?Hk帒r_b咩业敡倪遴俅吗蕞暯铖賵d€惻知{€〃帥壍腼峤潽���亟眠塾韶冀钵�彃枙sz€njbbriPF`C2@PP;!%A9%/<4+*.47=OF3-*(5>99*)5>B><?MQM`WTr殶nt撴煦迎�祉桤遗镩紴匡�孹u兊散sx煈y殔欂缰瓕栃�镤未狄涨虑�疂殤垑垀bakbcaVYXMMXI7:EH<))1%!./+'%,9GVO?5-)7D@8(!.7?IHDGTYWee`t煫憕儳臌�士����遵��忑鍟Ujy浄漦o拑l噧嚶湟▍愄�蜾曳蓖幽量��帄剝oRKRTZYKCFKPUJ:16;:-#&4=>937DR`_RC;:CLLE;8>HOVXTV^dgmomy枿�挮仵�智羽��贽骖俜此芪瀓cq倴恠hyzlqw~⑵猫彂羔庠某�拦铂牅潝厎~}yhPFJRYXPGELX[SF947<:3(.>EC<;CRacXJ><CJLJC>DLS[`_`dkostv倷�Γ痴颃踱诱琦�鲳觏疸歉克偏}jn{妺{kntpmnv挻堪灉秤咧堑�返�潡棊srsoaN@@KVXRHBEPWRF5))042' "-8@HMOMHB:4-(&%%(.7@HNU\bgkot{儘槩�朗显肿鬃衷姨强翻�噥}{zvy}亜儊}|~倝挕磁逸琊鲼躜礴彷儆膛椒�棆vnhcabfjmprtrme[N@2$ &;N^n}垙巻zk[K;.&"&.8CLT^jsxsja[[bjqw~嚂1铰镜�{cQC9.$"Ai摥颗室坫玑泻��醚鬃刿徭腠檗雅钩��枊€wtttrprv|亯悩灎潝噒bO?1"NDFSew啍~哺覆�媤dRIFKT^ejnv亴晻寍j][dt倣摍’啃圳颧{Q3''*%U柹溏苄桃苘洽uQ>ASgtvurtz啎煗拋sllt}厛唨}厞崓媹儉亞帟殰槕�xqle[Nuqnkgda^\YXWVUUUUVWXYZ\]^_`___^\ZWUQMJEA=841.+)'&''*-05;BJS\fp|垟煫读苏萱眚鼷�����耠遛紫壤共�潣搹媹厓倎亖們剠唸垑妸妸墖唲�|yu|wqlhc_[XVTSSSTVX[^beimpsuwyzzyxurnic]WPHA:3-'"!&-5?IUan{墫ぐ缴赞顼貔�����铉嘭吓汲�殦寙倊{ywwxy{}€儑妿憯棛洔湜殬晸弸唩|亖亐€~|ywspmifc`^]\\\]_behlptwz}}~}{xsme^ULB8.% | |||||
*6EUev垯┕勺忪酊����螂阙衅汲�洉弻墖唵噲妼帎憮摂敁搼悗寜噮儊€~~~~€仜棆znjnx亣厏unigeca_adimmkgfku€妽噟oggmvzwjWA0# "" #4Nm姞��非垲���镩滢滞没侗�枈�儖憭崈yuz嚃え�巹€亝墠彂憦妬ukfjv啎洅'潒{sv€嫆拲�zvqi`YX]gorlbXV]l{儊tcVPU_ff\J7&)241**5Nr棿钠良旧垲���痍遘新栋�窗�噦啌々�巹剭湬�瀼剕zywuux}儎~rbWWcz拸瓜说檰儛さ交钵灁坴aOFKYhmcK2"#6RipbJ0#):P]]N9% %:LQF12^暷哚泻�磊瘕��镪嵋辣�迷垡剑敄�茚庸煈摚独将抺i_XQJGKWgsscI1)9^弰2瑯噮暠韧綘剋~悷瀴hJ=EZmqbH1*8SltgN70<ShkZ< 2FI: 3Q`[LAF`埆窘�す脔�筚粮仑腠诨爼煼搜茅搷湻现僧枎槷懒瓕n_dv唵rT90<Wpyq]LMb剙挗擦拓噫觋桢咦兔脯爼媯zsnjgfghikmopqpnkf`YPG<2( | |||||
*9J[n倳Ч寿屣鼽���蜿嶝兔汞�殨搼悙憮晽櫄殬枓寘}ti^RF;1( )3@O_o€仏�羞膈����礅杖公湉儁qkgffimsy€垘敇殮檿弳|pcTE7) | |||||
"2DWl仏�羞膈����礅杖公湉儁qkgffimsy€垘敇殯檿弳|pcTF7) | |||||
"2DWl亄暓�┉佳潇嬲链贝赋�xmny厞倀e_dr厐re_er|~r\E616;9. | |||||
(>NRPNUh優惫付继怫��资忍型涧拡墧牓瀼€z寵煓媫v{噾憛nVE@CGD7%+@NRNKPa{t挩吵�坾w|垬П超瀶ucUOOT^irxyvmcVLECGP\googXA)-APVRH;0.8Nn摰毅桠丈谰乓泸�鲦鸦�弾摏Ο刀超�帀墢櫐郴降�t]LFITdr{zq_J9/1?Xtu師�噉WHENby彏�晢ypmqy儘摃攺�ti]RICBEKRVTL<)2NcopeTC:=Nl惐腾谖憨灍�贞鼯襻凸�ⅴ�膊�牀巺}vqpt}墪灐湋乷a\bq啘�〇{aMEK]uy⒐浮}ZD=EUgw剳殶泹ydZ^q姛�拋uty|vfO:28I\faO4 | |||||
%9Odrp`D+!/W尶沩嗯珱毀和揠觖�廾�敓猜萍〝垎嫄巵o`]i仜��xidgoz啎Ф话杙K57Qy~蔽湿{S=>Odw亣帡、槃m_at帬煁kOFRm啅€a>'%4JXTA& -C^u{lL) K娖铛薰槉懅琳忾瘌��亟�妒卦紮|q|棻及搕acw懁�j`aipv{剸�耿xJ,,K~喐综牵€h`cjprtx€垔乹]PQ`v墣坵hdp厵�刴_^jx~uaF/" $*/28CQ\[M4%Q嵢��蜃华Ξ咐媚韧严卢拃z剶ⅳ梼qlv嫚�搧w|崱�渾sjkrz~亝崠湑^=,3U� !"$%&()*,-/0134679:<=?@BCEFHIKLNPQSTVXY[]^`bceghjlnoqsuwxz|~€們厙墜崗憮晽櫄湠牏ぇ┇�背捣够嚼履迫释涎诱刳苻徙彖觎铖篚���€��������������������������������������������������������������� &,27=CHMRW\`dhloruxz|~€亖倎亐~|zxurolhd`\WRMHC=72,& �痍漭籽唐阑侗��洍攽帇墖厔儌倐倐儎厙墜帒敆洘'�痘榔萄纵潢瘀� €€€€€€€€鞍鞍鞍鞍谮谮谮谮貂貂貂貂��������貂貂貂貂谮谮谮谮鞍鞍鞍鞍€€€€€€€€OOOOOOOO%%%%%%%% | |||||