wip classloader paper
This commit is contained in:
parent
6d9096e314
commit
c5e119e877
13 changed files with 3138 additions and 8 deletions
|
@ -7,3 +7,15 @@
|
|||
]
|
||||
|
||||
#lorem(2000)
|
||||
|
||||
/*
|
||||
* Vocabulaire:
|
||||
* - Obfuscation: brouillage, jofr 1 jav 2013 https://www.legifrance.gouv.fr/jorf/jo/id/JORFCONT000026871045
|
||||
* - Malware: Maliciel, https://cyber.gouv.fr/le-cyberdico#M
|
||||
*
|
||||
*
|
||||
* autres ref:
|
||||
* - https://www.enseignementsup-recherche.gouv.fr/fr/bo/22/Hebdo21/CTNR2212247K.htm
|
||||
* - https://datafranca.org/wiki/Cat%C3%A9gorie:Cybers%C3%A9curit%C3%A9
|
||||
* - https://cyber.gouv.fr/le-cyberdico
|
||||
*/
|
||||
|
|
67
4_class_loader/0_intro.typ
Normal file
67
4_class_loader/0_intro.typ
Normal file
|
@ -0,0 +1,67 @@
|
|||
#import "../lib.typ": etal, ie
|
||||
#import "X_var.typ": *
|
||||
|
||||
== Introduction
|
||||
|
||||
/*
|
||||
When building an application with Android Studio, the source codes of applications are compiled to Java bytecode, which is then converted to Dalvik bytecode.
|
||||
Dalvik bytecode is then put in a zip archive with other resources such as the application manifest, and the zip archive is then signed.
|
||||
All this process is handled by Android Studio, behind the scene.
|
||||
At runtime, the Dalvik bytecode is either interpreted by the Dalvik virtual machine or compiled by ART in order to execute native code and it is up to these components to handle the loading of the classes.
|
||||
Both behaviors are possible at the same time for a single application, and it is up to Android to choose which part of an application is compiled in native code.
|
||||
*/
|
||||
|
||||
Android applications are distributed using markets of applications.
|
||||
The market maintainers have the difficult task to discover suspicious applications and delete them if they are effectively malicious applications.
|
||||
For such a task, some automated analysis is performed, but sometimes, a manual investigation is required.
|
||||
A reverser is in charge of studying the application: they usually perform a static analysis and a dynamic analysis.
|
||||
The reverser uses in the first phase static analysis tools in order to access and review the code of the application.
|
||||
If this first phase is not accurately driven, for example if they fail to access a critical class, they may decide that a malicious application is safe.
|
||||
Additionally, as stated by Li #etal@Li2017 in their conclusions, such a task is complexified by dynamic code loading, reflective calls, native code, and multi-threading which cannot be easily handled statically.
|
||||
Nevertheless, even if we do not consider these aspects, determining statically how the regular class loading system of Android is working is a difficult task.
|
||||
|
||||
Class loading occurs at runtime and is handled by the components of Android Runtime (ART), even when the application is partially or fully compiled ahead of time.
|
||||
Nevertheless, at the development stage, Android Studio handles the resolution of the different classes that can be internal to the application.
|
||||
When building, the code is linked to the standard library i.e. the code contained in `android.jar`.
|
||||
In this article, we call these classes "Development SDK classes".
|
||||
`android.jar` is not added to the application because its classes will be available at runtime in others `.jar` files.
|
||||
To distinguish those classes found at runtime from Dev SDK classes, we call them #Asdkc.
|
||||
When releasing the application, the building process of Android Studio can manage different versions of the #Asdk, reported in the Manifest as the "SDK versions".
|
||||
Indeed, some parts of the core #Asdkc can be embedded in the application, for retro compatibility purposes: by comparing the specified minimum SDK version and the target SDK version, the code of extra #Asdkc is stored in the APK file.
|
||||
As a consequence, it is frequent to find inside applications some classes that come from the `com.android` packages.
|
||||
At runtime each smartphone runs a unique version of Android, but, as the application is deployed on multiple versions of Android, it is difficult to predict which classes will be loaded from the #Asdkc or from the APK file itself.
|
||||
This complexity increases with the multi-DEX format of recent APK files that can contain several bytecode files.
|
||||
|
||||
Going back to the problem of a reverser studying a suspicious application statically, the reverser uses tools to disassemble the application@mauthe_large-scale_2021 and track the flows of data in the bytecode.
|
||||
As an example, for a spyware potentially leaking personal information, the reverser can unpack the application with Apktool and, after manually locating a method that they suspect to read sensitive data (by reading the unpacked bytecode), they can compute with FlowDroid@Arzt2014a if there is a flow from this method to methods performing HTTP requests.
|
||||
During these steps, the reverser faces the problem of resolving statically, which class is loaded from the APK file and the #Asdkc.
|
||||
If they, or the tools they use, choose the wrong version of the class, they may obtain wrong conclusions about the code.
|
||||
Thus, the possibility of shadowing classes could be exploited by an attacker in order to obfuscate the code.
|
||||
|
||||
In this paper, we study how Android handles the loading of classes in the case of multiple versions of the same class.
|
||||
Such collision can exist inside the APK file or between the APK file and #Asdkc.
|
||||
We intend to understand if a reverser would be impacted during a static analysis when dealing with such an obfuscated code.
|
||||
Because this problem is already enough complex with the current operations performed by Android, we exclude the case where a developer recodes a specific class loader or replace a class loader by another one, as it is often the case for example in packed applications@Duan2018.
|
||||
We present a new technique that "shadows" a class #ie embeds a class in the APK file and "presents" it to the reverser instead of the legitimate version.
|
||||
The goal of such an attack is to confuse them during the reversing process: at runtime the real class will be loaded from another location of the APK file or from the #Asdk, instead of the shadow version.
|
||||
This attack can be applied to regular classes of the #Asdk or to hidden classes of Android@he_systematic_2023 @li_accessing_2016.
|
||||
We show how these attacks can confuse the tools of the reverser when he performs a static analysis.
|
||||
In order to evaluate if such attacks are already used in the wild, we analyzed #nbapk applications from 2023 that we extracted randomly from AndroZoo@allixAndroZooCollectingMillions2016.
|
||||
Our main result is that #shadowsdk of these applications contain shadow collisions against the SDK and #shadowhidden against hidden classes.
|
||||
Our investigations conclude that most of these collisions are not voluntary attacks, but we highlight one specific malware sample performing strong obfuscation revealed by our detection of one shadow attack.
|
||||
|
||||
The paper is structured as follows.
|
||||
@sec:cl-soa reviews the state of the art about loading of Android classes and the tools to perform reverse engineering on applications.
|
||||
Then, @sec:cl-loading investigates the internal mechanisms about class loading and presents how a reverser can be confused by these mechanisms.
|
||||
In @sec:cl-obfuscation, we design obfuscation techniques and we show their effect on static analysis tools.
|
||||
Finally, @sec:cl-wild evaluates if these obfuscation techniques are used in the wild, by searching inside #nbapk APKs if they exploit these techniques.
|
||||
@sec:cl-ttv discusses the limits of this work and @sec:cl-conclusion concludes the paper.
|
||||
|
||||
// In addition to the public #Asdk of `android.jar`, other internal classes are also available for the Android Runtime.
|
||||
// Those classes are called hidden #Asdkc@li_accessing_2016, and are not supposed to be used by applications.
|
||||
// In reality their use is tolerated and many applications use them to access some of Android features.
|
||||
// This tolerance is one of the key point that lead to confusion attacks that we describe later in the paper.
|
||||
|
||||
== TODO <sec:cl-wild>
|
||||
== TODO <sec:cl-ttv>
|
||||
== TODO <sec:cl-conclusion>
|
44
4_class_loader/1_related_work.typ
Normal file
44
4_class_loader/1_related_work.typ
Normal file
|
@ -0,0 +1,44 @@
|
|||
#import "../lib.typ": etal
|
||||
#import "X_var.typ": *
|
||||
|
||||
== State of the art <sec:cl-soa>
|
||||
|
||||
_Class loading_
|
||||
Class loading mechanisms have been studied in the general context of the Java language.
|
||||
Gong@gong_secure_1998 describes the JDK 1.2 class loading architecture and capabilities.
|
||||
One of the main advantages of class loading is the type safety property that prevents type spoofing.
|
||||
As explained by Liang and Bracha@liang_dynamic_1998, by capturing events at runtime (new loaders, new class) and maintaining constraints on the multiple loaders and their delegation hierarchy, authors can avoid confusion when loading a spoofed class.
|
||||
This behavior is now implemented in modern Java virtual machines.
|
||||
Later Tazawa and Hagiya@tozawa_formalization_2002 proposed a formalization of the Java Virtual Machine supporting dynamic class loading in order to ensure type safety.
|
||||
Those works ensure strong safety for the Java Virtual Machine, in particular when linking new classes at runtime.
|
||||
Although Android has a similar mechanism, the implementation is not shared with the JVM of Oracle.
|
||||
Additionally, in this paper, we do not focus on spoofing classes at runtime, but on confusion that occurs when using a static analyzer used by a reverser that tries to understand the code loading process offline.
|
||||
|
||||
Contributions about Android class loading focus on using the capabilities of class loading to extend Android features or to prevent reverse engineering of Android applications.
|
||||
For instance, Zhou #etal@zhou_dynamic_2022 extend the class loading mechanism of Android to support regular Java bytecode and Kritz and Maly@kriz_provisioning_2015 propose a new class loader to automatically load modules of an application without user interactions.
|
||||
|
||||
Regarding reverse engineering, class loading mechanisms are frequently used by packers for hiding all or parts of the code of an application@Duan2018.
|
||||
The problem to be solved consists in locating secondary #dexfiles that can be unciphered just before being loaded.
|
||||
Dynamic hook mechanisms should be used to intercept the bytecode at load time.
|
||||
These techniques can be of some help for the reverser, but they require to instrument the source code of AOSP or the application itself.
|
||||
The engineering cost is high and anti-debugging techniques can slow down the process.
|
||||
Thus, a reverser always starts by studying statically an application using static analysis tools@Li2017, and will eventually go to dynamic analysis@Egele2012 if further costly extra analysis is needed (for example, if they spot the use of a custom class loader).
|
||||
In the first phase of an analysis where the used methods are static, the reverser can have the feeling that what he sees in the bytecode is what is loaded at runtime.
|
||||
Our goal is to show that tools mentioned in the literature@Li2017 can suffer from attacks exploiting confusion inside regular class loading mechanisms of Android.
|
||||
|
||||
_Hidden APIs_
|
||||
Li #etal did an empirical study of the usage and evolution of hidden APIs@li_accessing_2016.
|
||||
They found that hidden APIs are added and removed in every release of Android, and that they are used both by benign and malicious applications.
|
||||
More recently, He #etal @he_systematic_2023 did a systematic study of hidden service API related to security.
|
||||
They studied how the hidden API can be used to bypass Android security restrictions and found that although Google countermeasures are effective, they need to be implemented inside the system services and not the hidden API due to the lack of in-app privilege isolation: the framework code is in the same process as the user code, meaning any restriction in the framework can be bypassed by the user.
|
||||
|
||||
_Static analysis tools_
|
||||
Static analysis tools are used to perform operations on an APK file, for example extracting its bytecode or information from the Manifest file.
|
||||
Because of the complexity of Android, few tools have followed all the evolutions of the file format and are robust enough to analyze all applications without crashing@mineau_evaluating_2024.
|
||||
The tools can share the backend used to manipulate the code.
|
||||
For example, Apktool is often called in a subprocess to extracte the bytecode.
|
||||
Another example is Soot@Arzt2013, a Java framework that allows to manipulate the bytecode from an object representation of instructions.
|
||||
This framework enables advanced features such as inserting or removing bytecode instructions but can require a lot of memory and time to perform its operations.
|
||||
The most known tool built on top of Soot is FlowDroid@Arzt2014a, which enables to compute information flows statically into the code.
|
||||
|
||||
Because these tools are used by reversers, we will evaluate the accuracy of the provided results in the case of an application developer exploits the possible confusions that brings the class loading mechanisms of Android.
|
205
4_class_loader/2_classloading.typ
Normal file
205
4_class_loader/2_classloading.typ
Normal file
|
@ -0,0 +1,205 @@
|
|||
#import "../lib.typ": todo, ie, etal, num
|
||||
#import "X_var.typ": *
|
||||
|
||||
== Analyzing the class loading process <sec:cl-loading>
|
||||
|
||||
For building obfuscation techniques based on the confusion of tools with class loaders, we manually studied the code of Android that handles class loading.
|
||||
In this section, we report the inner workings of ART and we focus on the specificities of class loading that can bring confusion.
|
||||
Because the class loading implementation has evolved over time during the multiple iterations of the Android operating system, we mainly describe the behavior of ART from Android version 14 (SDK 34).
|
||||
|
||||
=== Class loaders
|
||||
|
||||
When ART needs to access a class, it queries a `ClassLoader` to retrieve its implementation.
|
||||
Each class has a reference to the `ClassLoader` that loaded it, and this class loader is the one that will be used to load supplementary classes used by the original class.
|
||||
For example in @lst:cl-expl-cl-loading, when calling `A.f()`, the ART will load `B` with the class loader that was used to load `A`.
|
||||
|
||||
#figure(
|
||||
```java
|
||||
class A {
|
||||
public static void f() {
|
||||
B b = new B();
|
||||
b.do_something();
|
||||
}}
|
||||
```,
|
||||
caption: [Class instantiation],
|
||||
) <lst:cl-expl-cl-loading>
|
||||
|
||||
This behavior has been inherited from Java and most of the core classes regarding class loaders have been kept in Android.
|
||||
Nevertheless, the Android implementation has slight differences and new class loaders have been added.
|
||||
For example, the java class loader `URLClassLoader` is still present in Android, but contrary to the official documentation, most of its methods have been removed or replaced by a stub that just raises an exception.
|
||||
Moreover, rather than using the Java class loaders `SecureClassLoader` or `URLClassLoader`, Android has several new class loaders that inherit from `ClassLoader` and override the appropriate methods.
|
||||
|
||||
The left part of @fig:cl-class_loading_classes shows the different class loaders specific to Android in white and the stubs of the original Java class loaders in grey.
|
||||
The main difference between the original Java class loaders and the ones used by Android is that they do not support the Java bytecode format.
|
||||
Instead, the Android-specific class loaders load their classes from (many) different file formats specific to Android.
|
||||
Usually, when used by a programmer, the classes are loaded from memory or from a file using the DEX format (`.dex`).
|
||||
When used directly by ART, the classes are usually stored in an application file (`.apk`) or in an optimized format (`OAR/ODEX`).
|
||||
|
||||
#todo[Alt text for cl-class_loading_classes]
|
||||
#figure([
|
||||
#image(
|
||||
"figs/classloaders-crop.svg",
|
||||
width: 80%,
|
||||
alt: ""
|
||||
)
|
||||
gray -- Java-based, white -- Android-based
|
||||
],
|
||||
caption: [The class loading hierarchy of Android]
|
||||
) <fig:cl-class_loading_classes>
|
||||
|
||||
=== Delegation <sec:cl-delegation>
|
||||
|
||||
The order in which classes are loaded at runtime requires special attention.
|
||||
All the specific Android class loaders (`DexClassLoader`, `InMemoryClassLoader`, etc.) have the same behavior (except `DelegateLastClassLoader`) but they handle specificities for the input format.
|
||||
Each class loader has a delegate class loader, represented in the right part of @fig:cl-class_loading_classes by black plain arrows for an instance of `PathClassLoader` and an instance of `DelegateLastClassLoader` (the other class loaders also have this delegate).
|
||||
This delegate is a concept specific to class loaders and has nothing to do with class inheritance.
|
||||
By default, class loaders will delegate to the singleton class `BootClassLoader`, except if a specific class loader is provided when instantiating the new class loader.
|
||||
When a class loader needs to load a class, except for `DelegateLastClassLoader`, it will first ask the delegate, i.e. `BootClassLoader`, and if the delegate does not find the class, the class loader will try to load the class on its own.
|
||||
This behavior implements a priority and avoids redefining by error a core class of the system, for example redefining `java.lang.String` that would be loaded by a child class loader instead of its delegates.
|
||||
`DelegateLastClassLoader` behaves slightly differently: it will first delegate to `BootClassLoader` then, it will check its files and finally, it will delegate to its actual delegate (given when instantiating the `DelegateLastClassLoader`).
|
||||
This behavior is useful for overriding specific classes of a class loader while keeping the other classes.
|
||||
A normal class loader would prioritize the classes of its delegate over its own.
|
||||
|
||||
#figure(
|
||||
```python
|
||||
def get_mutli_dex_classses_dex_name(index: int):
|
||||
if index == 0:
|
||||
return "classes.dex"
|
||||
else:
|
||||
return f"classes{index+1}.dex"
|
||||
|
||||
def load_class(class_name: str):
|
||||
if is_platform_class(class_name):
|
||||
return load_from_boot_class_loader(class_name)
|
||||
else:
|
||||
index = 0
|
||||
dex_file = get_mutli_dex_classses_dex_name(index)
|
||||
while file_exists_in_apk(dex_file) and \
|
||||
not class_found_in_dex_file(class_name, dex_file):
|
||||
index += 1
|
||||
if file_exists_in_apk(dex_file):
|
||||
return load_from_file(dex_file, class_name)
|
||||
else:
|
||||
raise ClassNotFoundError()
|
||||
```,
|
||||
caption: [Default Class Loading Algorithm for Android Applications],
|
||||
) <lst:cl-loading-alg>
|
||||
|
||||
At runtime, Android instantiates for each application three instances of class loaders described previously: `bootClassLoader`, the unique instance of `BootClassLoader`, and two instances of `PathClassLoader`: `systemClassLoader` and `appClassLoader`.
|
||||
`bootClassLoader` is responsible for loading Android *#platc*.
|
||||
It is the direct delegate of the two other class loaders instantiated by Android.
|
||||
`appClassLoader` points to the application `.apk` file, and is used to load the classes inside the application
|
||||
`systemClassLoader` is a `PathClassLoader` pointing to `'.'`, the working directory of the application, which is `'/'` by default.
|
||||
The documentation of `ClassLoader.getSystemClassLoader` reports that this class loader is the default context class loader for the main application thread.
|
||||
In reality, the #platc are loaded by `bootClassLoader` and the classes from the application are loaded from `appClassLoader`.
|
||||
`systemClassLoader` is never used.
|
||||
|
||||
In addition to the class loaders instantiated by ART when starting an application, the developer of an application can use class loaders explicitly by calling to ones from the #Asdk, or by recoding custom class loaders that inherit from the `ClassLoader` class.
|
||||
At this point, modeling accurately the complete class loading algorithm becomes impossible: the developer can program any algorithm of their choice.
|
||||
For this reason, this case is excluded from this paper and we focus on the default behavior where the context class loader is the one pointing to the `.apk` file and where its delegate is `BootClassLoader`.
|
||||
With such a hypothesis, the delegation process can be modeled by the pseudo-code of method `load_class` given in <lst:cl-listing3>.
|
||||
|
||||
In addition, it is important to distinguish the two types of #platc handled by `BootClassLoader` and that both have priority over classes from the application at runtime:
|
||||
|
||||
- the ones available in the *#Asdk* (normally visible in the documentation);
|
||||
- the ones that are internal and that should not be used by the developer. We call them *#hidec*@he_systematic_2023 @li_accessing_2016 (not documented).
|
||||
|
||||
As a preliminary conclusion, we observe that a priority exists in the class loading mechanism and that an attacker could use it to prioritize an implementation over another one.
|
||||
This could mislead the reverser if they use the one that has the lowest priority.
|
||||
To determine if a class is impacted by the priority given to `BootClassLoader`, we need to obtain the list of classes that are part of Android #ie the #platc.
|
||||
We discuss in the next section how to obtain these classes from the emulator.
|
||||
|
||||
=== Determining #platc
|
||||
|
||||
#figure(
|
||||
image(
|
||||
"figs/architecture_SDK-crop.svg",
|
||||
width: 80%,
|
||||
alt: ""
|
||||
),
|
||||
caption: [Location of SDK classes during development and at runtime]
|
||||
) <fig:cl-archisdk>
|
||||
|
||||
@fig:cl-archisdk shows how classes of Android are used in the development environment and at runtime.
|
||||
In the development environment, Android Studio uses `android.jar` and the specific classes written by the developer.
|
||||
After compilation, only the classes of the developer, and eventually extra classes computed by Android Studio are zipped in the APK file, using the multi-dex format.
|
||||
At runtime, the application uses `BootClassLoader` to load the #platc from Android.
|
||||
Until our work, previous works@he_systematic_2023 @li_accessing_2016 considered both #Asdk and #hidec to be in the file `/system/framework/framework.jar` found in the phone itself, but we found that the classes loaded by `bootClassLoader` are not all present in `framework.jar`.
|
||||
For example, He #etal @he_systematic_2023 counted 495 thousand APIs (fields and methods) in Android 12, based on Google documentation on restriction for non SDK interfaces#footnote[https://developer.android.com/guide/app-compatibility/restrictions-non-sdk-interfaces].
|
||||
However, when looking at the content of `framework.jar`, we only found #num(333) thousand APIs.
|
||||
Indeed, classes such as `com.android.okhttp.OkHttpClient` are loaded by `bootClassLoader`, listed by Google, but not in `framework.jar`.
|
||||
|
||||
For optimization purposes, classes are now loaded from `boot.art`.
|
||||
This file is used to speed up the start-up time of applications: it stores a dump of the C++ objects representing the *#platc* (#Asdk and #hidec) so that they do not need to be generated each time an application starts.
|
||||
Unfortunately, this format is not documented and not retro-compatible between Android versions and is thus difficult to parse.
|
||||
An easier solution to investigate the #platc is to look at the `BOOTCLASSPATH` environment variable in an emulator.
|
||||
This variable is used to load the classes without the `boot.art` optimization.
|
||||
We found 25 `.jar` files, including `framework.jar`, in the `BOOTCLASSPATH` of the standard emulator for Android 12 (SDK 32), 31 for Android 13 (SDK 33), and 35 for Android 14 (SDK 35), containing respectively a total of #num(499837), #num(539236) and #num(605098) API methods and fields.
|
||||
@tab:cl-platform_apis) summarizes the discrepancies we found between Google's list and the #platc we found in Android emulators.
|
||||
Note also that some methods may also be found _only_ in the documentation.
|
||||
Our manual investigations suggest that the documentation is not well synchronized with the evolution of the #platc and that Google has almost solved this issue in API 34.
|
||||
|
||||
|
||||
#figure({
|
||||
show table: set text(size: 0.80em)
|
||||
table(
|
||||
columns: 5,
|
||||
//inset: (x: 0% + 5pt, y: 0% + 2pt),
|
||||
stroke: none,
|
||||
align: center+horizon,
|
||||
table.hline(),
|
||||
table.header(
|
||||
table.cell(colspan: 5, inset: 3pt)[],
|
||||
table.cell(rowspan: 2)[*SDK version*],
|
||||
table.vline(end: 3),
|
||||
table.vline(start: 4),
|
||||
table.cell(colspan: 4)[*Number of API methods*],
|
||||
[Documented], [In emulator], [Only documented], [Only in emulator],
|
||||
),
|
||||
table.cell(colspan: 5, inset: 3pt)[],
|
||||
table.hline(),
|
||||
table.cell(colspan: 5, inset: 3pt)[],
|
||||
|
||||
[32], num(495713), num(499837), num(1060), num(5184),
|
||||
[33], num(537427), num(539236), num(1258), num(3067),
|
||||
[34], num(605106), num(605098), num(26), num(18),
|
||||
|
||||
table.cell(colspan: 4, inset: 3pt)[],
|
||||
table.hline(),
|
||||
)},
|
||||
|
||||
caption: [Comparison for API methods between documentation and emulators],
|
||||
)<tab:cl-platform_apis>
|
||||
|
||||
We conclude that it can be dangerous to trust the documentation and that gathering information from the emulator or phone is the only reliable source.
|
||||
Gathering the precise list of classes and the associated bytecode is not a trivial task.
|
||||
|
||||
=== Multiple DEX files <sec:cl-collision>
|
||||
|
||||
For the application class files, Android uses its specific format called DEX: all the classes of an application are loaded from the file `classes.dex`.
|
||||
With the increasing complexity of Android applications, the need arrised to load more methods than the DEX format could support in one #dexfile.
|
||||
To solve this problem, Android started storing classes in multiple files named `classesX.dex` as illustrated by the @lst:cl-dexname that generates the filenames read by class loaders.
|
||||
Android starts loading the file `GetMultiDexClassesDexName(0)` (`classes.dex`), then `GetMultiDexClassesDexName(1)` (`classes2.dex`), and continues until finding a value `n` for which `GetMultiDexClassesDexName(n)` does not exist.
|
||||
Even if Android emits a warning message when it finds more than 100 #dexfiles, it will still load any number of #dexfiles that way.
|
||||
This change had the unintended consequence of permitting two classes with the same name but different implementations to be stored in the same `.apk` file using two #dexfiles.
|
||||
|
||||
Android explicitly performs checks that prevent several classes from using the same name inside a #dexfile.
|
||||
However, this check does not apply to multiple #dexfiles in the same `.apk` file, and a `.dex` can contain a class with a name already used by another class in another #dexfile of the application.
|
||||
Of course, such a situation should not happen when multiple #dexfiles have been generated by properly Android Studio.
|
||||
Nevertheless, for an attacker controlling the process, this issue raises the question of which class is selected when several classes sharing the same name are present in `.apk` files.
|
||||
|
||||
We found that Android loads the class whose implementation is found first when looking in the order of multiple `dexfiles`, as generated by the method `GetMultiDexClassesDexName`.
|
||||
We will show later in @sec:cl-evaltools that this choice is not the most intuitive and can lead to fool analysis tools when reversing an application.
|
||||
As a conclusion, we model both the multi-dex and delegation behaviors in the pseudo-code of @lst:cl-loading-alg.
|
||||
|
||||
#figure(
|
||||
```C++
|
||||
std::string DexFileLoader::GetMultiDexClassesDexName(size_t index) {
|
||||
return (index == 0) ?
|
||||
"classes.dex" :
|
||||
StringPrintf("classes%zu.dex", index + 1);
|
||||
}
|
||||
```,
|
||||
caption: [The method generating the .dex filenames from the AOSP]
|
||||
) <lst:cl-dexname>
|
||||
|
227
4_class_loader/3_obfuscation.typ
Normal file
227
4_class_loader/3_obfuscation.typ
Normal file
|
@ -0,0 +1,227 @@
|
|||
#import "../lib.typ": eg, todo
|
||||
#import "X_var.typ": *
|
||||
|
||||
== Obfuscation Techniques <sec:cl-obfuscation>
|
||||
|
||||
In this section, we present new obfuscation techniques that take advantage of the complexity of the class loading process.
|
||||
Then, in order to evaluate their efficiency, we reviewed some common Android reverse analysis tools to see how they behave when collisions occur between classes of the APK or between a class of the APK and classes of Android (#Asdk or #hidec).
|
||||
We call this collision "*class shadowing*", because the attacker version of the class shadows the one that will be used at runtime.
|
||||
To evaluate if such shadow attacks are working, we handcrafted three applications implementing shadowing techniques to test their impact on static analysis tools.
|
||||
Then, we manually inspected the output of the tools in order to check its consistency with what Android is really doing at runtime.
|
||||
For example, for Apktool, we look at the output disassembled code, and for Flowdroid@Arzt2014a, we check that a flow between `Taint.source()` and `Taint.sink()` is correctly computed.
|
||||
|
||||
|
||||
/*
|
||||
shadow: faie une collision de classe
|
||||
hidden: utiliser une classe de l'API cachée
|
||||
|
||||
on peut shadow une classe de l'apk
|
||||
on peut shadow une classe du SDK
|
||||
on peut shadow une classe hidden
|
||||
*/
|
||||
|
||||
|
||||
=== Obfuscation Techniques
|
||||
|
||||
From the results presented in @sec:cl-loading, three approaches can be designed to hide the behavior of an application.
|
||||
|
||||
/*
|
||||
_Hidden classes_
|
||||
Applications both malicious and benign have been known to use hidden API to access advance features #todo[ref ?].
|
||||
Using #hidec can have an impact on the accuracy of analysis tools because they may not have access to the code of these classes.
|
||||
|
||||
#todo[Google blacklist/greylist/ect, ref to paper that says this can be bypass]
|
||||
|
||||
#todo[Compare classes in android.jar, framework.jar and other, are they hidden whitelisted classes?]
|
||||
|
||||
The two previous attacks have a few issue.
|
||||
Basic shadowing imply to have several class with the same name in the application, which can be detected by some tools.
|
||||
On the other hand, using #hidec leave classes without implementation in the application, which can also be detected.
|
||||
*/
|
||||
|
||||
*Self shadow*_: shadowing a class with another from APK_
|
||||
This method consists in hiding the implementation of a class with another one by exploiting the possible collision of class names, as described in @sec:cl-collision with multiple #dexfiles.
|
||||
If reversers or tools ignore the priority order of a multi-dex file, they can take into account the wrong version of a class.
|
||||
|
||||
|
||||
//priorité aux classes SDK meme si une shadow classe est définie dans l'APK (tout ca a cause de Boot)
|
||||
*SDK shadow*_: shadowing a SDK class_
|
||||
This method consists in presenting to the reverser a fake implementation of a class of the SDK.
|
||||
This class is embedded in the APK file and has the same name as the one of the SDK.
|
||||
Because `BootClassLoader` will give priority to the #Asdk at runtime, the reverser or tool should ignore any version of a class that is contained in the APK.
|
||||
The only constraint when shadowing an SDK class is that the shadowing implementation must respect the signature of real classes.
|
||||
Note that, by introducing a custom class loader, the attacker could inverse the priority, but this case is out of the scope of this paper.
|
||||
|
||||
// priorité aux classes hidden (car du SDK) meme si une shadow classe est définie dans l'APK
|
||||
*Hidden shadow*_: shadowing an hidden class_
|
||||
This method is similar to the previous one, except the class that is shadowed is a #hidecsingular.
|
||||
Because ART will give priority to the internal version of the class, the version provided in the APK file will be ignored.
|
||||
Such shadow attacks are more difficult to detect by a reverser, that may not know the existence of this specific hidden class in Android.
|
||||
|
||||
=== Impact on static analysis tools <sec:cl-evaltools>
|
||||
|
||||
#figure(
|
||||
```java
|
||||
public class Main {
|
||||
public static void main(Activity ac) {
|
||||
String personal_data = Taint.source();
|
||||
String obfuscated_personal_data = Obfuscation.hide_flow(personal_data);
|
||||
Taint.sink(ac, obfuscated_personal_data);
|
||||
}
|
||||
}
|
||||
public class Obfuscation { // customized for each obfuscation technique
|
||||
public static String hide_flow(String personal_data) { ... }
|
||||
```,
|
||||
caption: [Main body of test apps]
|
||||
)<lst:cl-testapp>
|
||||
|
||||
|
||||
We selected tools that are commonly used to unpack and reverse Android applications: Jadx#footnote[https://github.com/skylot/jadx], a decompiler for Android applications, Apktool#footnote[https://apktool.org/], a disassembler/repackager of applications, Androguard#footnote[https://github.com/androguard/androguard], one of the oldest Python package for manipulating Android applications, and Flowdroid@Arzt2014a that performs taint flow analysis.
|
||||
|
||||
For evaluating the tools, we designed a single application that we can customize for different tests.
|
||||
@lst:cl-testapp shows the main body implementing:
|
||||
- a possible flow to evaluate FlowDroid: a flow from a method `Taint.source()` to a method `Taint.sink(Activity, String)` through a method `Obfuscation.hide_flow(String)`;
|
||||
- a possible use of a SDK or hidden class inside the class `Obfuscation` to evaluate #platc shadowing for other tools.
|
||||
|
||||
The first application we released is a control application that does not do anything special.
|
||||
It will be used for checking the expecting result of tools.
|
||||
The second implements self shadowing: the class `Obfuscation` is duplicated: one is the same as the in the control app (`Obfuscation.hide_flow(String)` returns its arguments), and the other version returns a constant string.
|
||||
These two versions are embedded in several DEX of a multi-dex application.
|
||||
The third application tests SDK shadowing and needs an existing class of the SDK.
|
||||
We used `Pair` that we try to shadow.
|
||||
We put data in a `Pair` and reread the data from the `Pair`. The colliding `Pair` discards the data and returns null.
|
||||
The last application tests for Hidden API shadowing.
|
||||
Like for the third one, we similarly store data in `com.android.okhttp.Request` and then retrieve it.
|
||||
Again, the shadowing implementation discards the data.
|
||||
|
||||
We found that these static analysis tools do not consider the class loading mechanism, either because the tools only look at the content of the application file (#eg a disassembler) or because they consider class loading to be a dynamic feature and thus out of their scope.
|
||||
In @tab:cl-results, we report on the types of shadowing that can be tricked each tool.
|
||||
A plain circle is a shadow attack that leads to a wrong result.
|
||||
A white circle indicates a tool emitting warnings or that eventually displays the two versions of the class.
|
||||
A cross is a tool not impacted by a shadow attack.
|
||||
We explain in more detail in the following the results for each considered tool.
|
||||
|
||||
#figure({
|
||||
table(
|
||||
columns: 5,
|
||||
stroke: none,
|
||||
align:(left+horizon, center+horizon, center+horizon, center+horizon, center+horizon),
|
||||
table.hline(),
|
||||
table.header(
|
||||
table.cell(colspan: 5, inset: 3pt)[],
|
||||
table.cell(rowspan: 2)[Tool],
|
||||
table.cell(rowspan: 2)[Version],
|
||||
table.vline(end: 3),
|
||||
table.vline(start: 4),
|
||||
table.cell(colspan: 3)[Shadow Attack],
|
||||
[Self], [SDK], [Hidden],
|
||||
),
|
||||
table.cell(colspan: 5, inset: 3pt)[],
|
||||
table.hline(),
|
||||
table.cell(colspan: 5, inset: 3pt)[],
|
||||
|
||||
[Jadx], [1.5.0], [#warn], [#ok], [#ok],
|
||||
[Apktool], [2.9.3], [#warn], [#ok], [#ok],
|
||||
[Androguard], [4.1.2], [#warn], [#ok], [#ok],
|
||||
[Flowdroid], [2.13.0], [#ok], [#ko], [#ok],
|
||||
|
||||
table.cell(colspan: 5, inset: 3pt)[],
|
||||
table.hline(),
|
||||
)
|
||||
[#ok: working \ #warn: works but producing warning or can be seen by the reverser \ #ko: not working]
|
||||
},
|
||||
caption: [Working attacks against static analysis tools]
|
||||
) <tab:cl-results>
|
||||
|
||||
==== Jadx
|
||||
|
||||
Jadx is a reverse engineering tool that regenerates the Java source code of an application.
|
||||
It processes all the classes present in the application, but only save/display one class by name, even if two versions are present in multiple #dexfiles.
|
||||
Nevertheless, when multiple classes with the same name are found, Jadx reports it in a comment added to the generated Java source code.
|
||||
This warning stipulates that a possible collision exists and lists the files that contain the different versions of the class.
|
||||
Unfortunately, after reviewing the code of Jadx, we believe that the selection of the displayed class is an undefined behavior.
|
||||
At least for the version 1.5.0 that we tested, we found that Jadx selects the wrong implementation when a class with the same name is present.
|
||||
For example in `classes2.dex` and `classes3.dex`.
|
||||
We report it with a "#warn" because warnings are issued.
|
||||
|
||||
//Using #hidec does not affect Jadx beyond the fact that #hidec are not decompiled, which is to be expected by the user anyway.
|
||||
|
||||
Shadowing #Asdk and #hidec is possible in Jadx: there is only one implementation of the class in the application and Jadx does not have a list of the internal classes of Android: no warning is issued to the reverser that the displayed class is not the one used by Android.
|
||||
|
||||
==== Apktool
|
||||
|
||||
Apktool generates Smali files, an assembler language for DEX bytecode.
|
||||
Apktool will store the disassembled classes in a folder that matches the #dexfile that stores the bytecode.
|
||||
This means that when shadowing a class with two versions in two #dexfiles, the shadow implementations will be disassembled into two directories.
|
||||
No indication is displayed that a collision is possible.
|
||||
It is up to the reverser to have a chance to open the good one.
|
||||
|
||||
Similarly to Jadx, using an #Asdk or #hidecsingular will not be detected by the tool that will unpack the fake shadow version.
|
||||
|
||||
==== Androguard
|
||||
|
||||
Androguard has different usages, with different levels of analysis.
|
||||
The documentation highlights the analysis commands that compute three types of objects: an APK object, a list of DEX objects, and an Analysis object.
|
||||
The APK and the list of #dexfiles are a one-to-one representation of the content of an application, and have the same issues that we discussed with Apktool: they provide the different versions of a shadow class contained in multiple #dexfiles.
|
||||
|
||||
The Analysis object is used to compute a method call graph and we found that this algorithm may choose the wrong version of a shadowed class when using the cross references that are computed.
|
||||
This leads to an invalid call graph as shown in @fig:cl-andro_obf_cg: the two methods `doSomething()` are represented in the graph, but the one linked to `main()` on the graph is the one calling the method `good()` when in fact the method `bad()` is called when running the application.
|
||||
|
||||
Androguard has a method `.is_external()` to detect if the implementation of a class is not provided inside the application and a method `.is_android_api()` to detect if the class is part of the Android API.
|
||||
Regrettably, the documentation of `.is_android_api()` explains that the method is still experimental and just checks a few package names.
|
||||
This means that although those methods are useful, the only indication of the use of an #Asdk or #hidec is the fact that the class is not in the APK file.
|
||||
Because of that, like for Apktool and Jadx, Androguard has no way to warn the reverser that the shadow of an #Asdk or #hidec is not the class used when running the application.
|
||||
|
||||
#todo[alt text androguard_call_graph]
|
||||
|
||||
#figure({
|
||||
set align(center)
|
||||
stack(dir: ltr,[
|
||||
#figure(
|
||||
image(
|
||||
"figs/call_graph_expected.svg",
|
||||
width: 45%,
|
||||
alt: ""
|
||||
),
|
||||
supplement: [Subfigure],
|
||||
caption: [Expected Call Graph]
|
||||
) <fig:cl-andro_non_obf_cg>],[
|
||||
#figure(
|
||||
image(
|
||||
"figs/call_graph_obf.svg",
|
||||
width: 45%,
|
||||
alt: ""
|
||||
),
|
||||
supplement: [Subfigure],
|
||||
caption: [Call Graph Computed by Androguard]
|
||||
) <fig:cl-andro_obf_cg>
|
||||
])
|
||||
h(1em)},
|
||||
caption: [Call Graphs of an application calling `Main.bad()` from a shadowed `Obfuscation` class.],
|
||||
)<fig:cl-androguard_call_graph>
|
||||
|
||||
==== Flowdroid
|
||||
|
||||
Flowdroid@Arzt2014a is used to detect if an application can leak sensitive information.
|
||||
To do so, the analyst provides a list of source and sink methods.
|
||||
The return value of a method marked as source is considered sensitive and the argument of a method marked as sink is considered to be leaked.
|
||||
By analyzing the bytecode of an application, Flowdroid can detect if data emitted by source methods can be exfiltrated by a sink method.
|
||||
Flowdroid is built on top of the Soot@Arzt2013 framework that handles, among other things, the class selection process.
|
||||
|
||||
We found that when selecting the classes implementation in a multi-dex APK, Soot uses an algorithm close to what ART is performing:
|
||||
Soot sorts the `.dex` bytecode file with a specified `prioritizer` (a comparison function that defines an order for #dexfiles) and selects the first implementation found when iterating over the sorted files.
|
||||
Unfortunately, the `prioritizer` used by Soot is not exactly the same as the one used by the ART.
|
||||
The Soot `prioritizer` will give priority to `classes.dex` and then give priority to files whose name starts with `classes` over other files and finally will use the alphabetical order.
|
||||
This order is good enough for application with a small number of #dexfiles generated by Android Studio, but because it uses the alphabetical order and does not check the exact format used by Android, a malicious developer could hide the implementation of a class in `classes2.dex` by putting a false implementation in `classes0.dex`, `classes1.dex` or `classes12.dex`.
|
||||
|
||||
// TODO This could use more investigation
|
||||
In addition to self shadowing, Flowdroid is sensitive to the use of #platc, as it needs the bytecode of those classes to be able to track data flows.
|
||||
This is solved for SDK classes by providing `android.jar` to Flowdroid.
|
||||
Flowdroid gives priority to the classes from the SDK over the classes implemented in the application, thus defeating SDK shadow attacks.
|
||||
Unfortunately, `android.jar` only contains classes from the #Asdk, meaning that using #hidec breaks the flow tracking.
|
||||
Solving this issue would require finding the bytecode of all the platform classes of the Android version targeted and as we said previously it requires extracting this information from the emulator.
|
||||
|
||||
//\medskip
|
||||
|
||||
We have seen that tools can be impacted by shadow attacks. In the next section, we will investigate if these attacks are used in the wild.
|
||||
|
18
4_class_loader/X_var.typ
Normal file
18
4_class_loader/X_var.typ
Normal file
|
@ -0,0 +1,18 @@
|
|||
#import "../lib.typ": num
|
||||
|
||||
#let Asdkc = [Android SDK classes]
|
||||
#let Asdk = [Android SDK]
|
||||
#let nbapk = num(49975)
|
||||
#let hidec = [hidden classes]
|
||||
#let hidecsingular = [hidden class]
|
||||
#let platc = [platform classes]
|
||||
#let dexfile = [`.dex` file]
|
||||
#let dexfiles = [`.dex` files]
|
||||
#let shadowsdk = [23.52%]
|
||||
#let shadowhidden = [3.11%]
|
||||
|
||||
#let ko = sym.times
|
||||
#let ok = sym.circle.filled
|
||||
#let warn = sym.circle.stroked.small
|
||||
|
||||
|
704
4_class_loader/figs/architecture_SDK-crop.svg
Normal file
704
4_class_loader/figs/architecture_SDK-crop.svg
Normal file
File diff suppressed because one or more lines are too long
After Width: | Height: | Size: 398 KiB |
506
4_class_loader/figs/call_graph_expected.svg
Normal file
506
4_class_loader/figs/call_graph_expected.svg
Normal file
|
@ -0,0 +1,506 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="531pt" height="404pt" viewBox="0 0 531 404">
|
||||
<defs>
|
||||
<g>
|
||||
<g id="glyph-0-0">
|
||||
<path d="M 5.734375 0 L 2.140625 -7.796875 L 2.140625 -1.609375 C 2.140625 -1.035156 2.203125 -0.679688 2.328125 -0.546875 C 2.492188 -0.347656 2.757812 -0.25 3.125 -0.25 L 3.453125 -0.25 L 3.453125 0 L 0.234375 0 L 0.234375 -0.25 L 0.5625 -0.25 C 0.957031 -0.25 1.234375 -0.367188 1.390625 -0.609375 C 1.492188 -0.753906 1.546875 -1.085938 1.546875 -1.609375 L 1.546875 -7.65625 C 1.546875 -8.070312 1.5 -8.367188 1.40625 -8.546875 C 1.34375 -8.679688 1.222656 -8.789062 1.046875 -8.875 C 0.878906 -8.96875 0.609375 -9.015625 0.234375 -9.015625 L 0.234375 -9.265625 L 2.859375 -9.265625 L 6.21875 -2.015625 L 9.53125 -9.265625 L 12.15625 -9.265625 L 12.15625 -9.015625 L 11.828125 -9.015625 C 11.429688 -9.015625 11.15625 -8.894531 11 -8.65625 C 10.894531 -8.507812 10.84375 -8.175781 10.84375 -7.65625 L 10.84375 -1.609375 C 10.84375 -1.035156 10.90625 -0.679688 11.03125 -0.546875 C 11.195312 -0.347656 11.460938 -0.25 11.828125 -0.25 L 12.15625 -0.25 L 12.15625 0 L 8.21875 0 L 8.21875 -0.25 L 8.546875 -0.25 C 8.941406 -0.25 9.21875 -0.367188 9.375 -0.609375 C 9.476562 -0.753906 9.53125 -1.085938 9.53125 -1.609375 L 9.53125 -7.796875 L 5.953125 0 Z M 5.734375 0 "/>
|
||||
</g>
|
||||
<g id="glyph-0-1">
|
||||
<path d="M 3.984375 -0.90625 C 3.335938 -0.40625 2.9375 -0.117188 2.78125 -0.046875 C 2.53125 0.0664062 2.265625 0.125 1.984375 0.125 C 1.554688 0.125 1.203125 -0.0195312 0.921875 -0.3125 C 0.640625 -0.613281 0.5 -1.003906 0.5 -1.484375 C 0.5 -1.785156 0.566406 -2.050781 0.703125 -2.28125 C 0.890625 -2.582031 1.210938 -2.867188 1.671875 -3.140625 C 2.140625 -3.421875 2.910156 -3.757812 3.984375 -4.15625 L 3.984375 -4.390625 C 3.984375 -5.015625 3.882812 -5.441406 3.6875 -5.671875 C 3.488281 -5.910156 3.203125 -6.03125 2.828125 -6.03125 C 2.535156 -6.03125 2.304688 -5.953125 2.140625 -5.796875 C 1.960938 -5.640625 1.875 -5.460938 1.875 -5.265625 L 1.890625 -4.875 C 1.890625 -4.65625 1.835938 -4.488281 1.734375 -4.375 C 1.628906 -4.269531 1.488281 -4.21875 1.3125 -4.21875 C 1.144531 -4.21875 1.003906 -4.273438 0.890625 -4.390625 C 0.785156 -4.503906 0.734375 -4.664062 0.734375 -4.875 C 0.734375 -5.269531 0.929688 -5.628906 1.328125 -5.953125 C 1.734375 -6.285156 2.300781 -6.453125 3.03125 -6.453125 C 3.582031 -6.453125 4.035156 -6.359375 4.390625 -6.171875 C 4.660156 -6.023438 4.859375 -5.800781 4.984375 -5.5 C 5.066406 -5.300781 5.109375 -4.898438 5.109375 -4.296875 L 5.109375 -2.171875 C 5.109375 -1.578125 5.117188 -1.210938 5.140625 -1.078125 C 5.171875 -0.941406 5.210938 -0.847656 5.265625 -0.796875 C 5.316406 -0.753906 5.375 -0.734375 5.4375 -0.734375 C 5.507812 -0.734375 5.578125 -0.75 5.640625 -0.78125 C 5.734375 -0.84375 5.914062 -1.007812 6.1875 -1.28125 L 6.1875 -0.90625 C 5.675781 -0.21875 5.1875 0.125 4.71875 0.125 C 4.5 0.125 4.320312 0.046875 4.1875 -0.109375 C 4.0625 -0.265625 3.992188 -0.53125 3.984375 -0.90625 Z M 3.984375 -1.34375 L 3.984375 -3.734375 C 3.296875 -3.460938 2.851562 -3.269531 2.65625 -3.15625 C 2.289062 -2.945312 2.03125 -2.734375 1.875 -2.515625 C 1.71875 -2.296875 1.640625 -2.0625 1.640625 -1.8125 C 1.640625 -1.476562 1.738281 -1.203125 1.9375 -0.984375 C 2.132812 -0.765625 2.363281 -0.65625 2.625 -0.65625 C 2.96875 -0.65625 3.421875 -0.882812 3.984375 -1.34375 Z M 3.984375 -1.34375 "/>
|
||||
</g>
|
||||
<g id="glyph-0-2">
|
||||
<path d="M 2.03125 -9.71875 C 2.21875 -9.71875 2.378906 -9.648438 2.515625 -9.515625 C 2.648438 -9.378906 2.71875 -9.21875 2.71875 -9.03125 C 2.71875 -8.84375 2.648438 -8.675781 2.515625 -8.53125 C 2.378906 -8.394531 2.21875 -8.328125 2.03125 -8.328125 C 1.84375 -8.328125 1.675781 -8.394531 1.53125 -8.53125 C 1.394531 -8.675781 1.328125 -8.84375 1.328125 -9.03125 C 1.328125 -9.21875 1.394531 -9.378906 1.53125 -9.515625 C 1.664062 -9.648438 1.832031 -9.71875 2.03125 -9.71875 Z M 2.59375 -6.453125 L 2.59375 -1.421875 C 2.59375 -1.023438 2.617188 -0.757812 2.671875 -0.625 C 2.734375 -0.5 2.820312 -0.40625 2.9375 -0.34375 C 3.050781 -0.28125 3.253906 -0.25 3.546875 -0.25 L 3.546875 0 L 0.5 0 L 0.5 -0.25 C 0.8125 -0.25 1.019531 -0.273438 1.125 -0.328125 C 1.226562 -0.390625 1.3125 -0.488281 1.375 -0.625 C 1.4375 -0.757812 1.46875 -1.023438 1.46875 -1.421875 L 1.46875 -3.828125 C 1.46875 -4.503906 1.445312 -4.941406 1.40625 -5.140625 C 1.375 -5.285156 1.320312 -5.382812 1.25 -5.4375 C 1.1875 -5.5 1.09375 -5.53125 0.96875 -5.53125 C 0.84375 -5.53125 0.6875 -5.5 0.5 -5.4375 L 0.40625 -5.6875 L 2.296875 -6.453125 Z M 2.59375 -6.453125 "/>
|
||||
</g>
|
||||
<g id="glyph-0-3">
|
||||
<path d="M 2.265625 -5.125 C 2.992188 -6.007812 3.691406 -6.453125 4.359375 -6.453125 C 4.703125 -6.453125 4.992188 -6.363281 5.234375 -6.1875 C 5.484375 -6.019531 5.679688 -5.738281 5.828125 -5.34375 C 5.929688 -5.070312 5.984375 -4.65625 5.984375 -4.09375 L 5.984375 -1.421875 C 5.984375 -1.023438 6.015625 -0.753906 6.078125 -0.609375 C 6.128906 -0.492188 6.207031 -0.40625 6.3125 -0.34375 C 6.425781 -0.28125 6.632812 -0.25 6.9375 -0.25 L 6.9375 0 L 3.84375 0 L 3.84375 -0.25 L 3.96875 -0.25 C 4.257812 -0.25 4.460938 -0.289062 4.578125 -0.375 C 4.703125 -0.46875 4.785156 -0.597656 4.828125 -0.765625 C 4.847656 -0.835938 4.859375 -1.054688 4.859375 -1.421875 L 4.859375 -3.984375 C 4.859375 -4.546875 4.78125 -4.957031 4.625 -5.21875 C 4.476562 -5.476562 4.234375 -5.609375 3.890625 -5.609375 C 3.335938 -5.609375 2.796875 -5.3125 2.265625 -4.71875 L 2.265625 -1.421875 C 2.265625 -0.992188 2.289062 -0.726562 2.34375 -0.625 C 2.40625 -0.5 2.488281 -0.40625 2.59375 -0.34375 C 2.707031 -0.28125 2.9375 -0.25 3.28125 -0.25 L 3.28125 0 L 0.1875 0 L 0.1875 -0.25 L 0.328125 -0.25 C 0.640625 -0.25 0.851562 -0.328125 0.96875 -0.484375 C 1.082031 -0.648438 1.140625 -0.960938 1.140625 -1.421875 L 1.140625 -3.734375 C 1.140625 -4.492188 1.117188 -4.953125 1.078125 -5.109375 C 1.046875 -5.273438 0.992188 -5.382812 0.921875 -5.4375 C 0.859375 -5.5 0.765625 -5.53125 0.640625 -5.53125 C 0.515625 -5.53125 0.363281 -5.5 0.1875 -5.4375 L 0.078125 -5.6875 L 1.96875 -6.453125 L 2.265625 -6.453125 Z M 2.265625 -5.125 "/>
|
||||
</g>
|
||||
<g id="glyph-0-4">
|
||||
<path d="M 6.40625 -3.109375 L 2.8125 -3.109375 L 2.1875 -1.640625 C 2.03125 -1.273438 1.953125 -1.003906 1.953125 -0.828125 C 1.953125 -0.691406 2.019531 -0.566406 2.15625 -0.453125 C 2.289062 -0.347656 2.582031 -0.28125 3.03125 -0.25 L 3.03125 0 L 0.109375 0 L 0.109375 -0.25 C 0.492188 -0.320312 0.742188 -0.410156 0.859375 -0.515625 C 1.085938 -0.734375 1.347656 -1.179688 1.640625 -1.859375 L 4.890625 -9.484375 L 5.140625 -9.484375 L 8.359375 -1.765625 C 8.617188 -1.148438 8.851562 -0.75 9.0625 -0.5625 C 9.28125 -0.375 9.578125 -0.269531 9.953125 -0.25 L 9.953125 0 L 6.296875 0 L 6.296875 -0.25 C 6.660156 -0.269531 6.90625 -0.332031 7.03125 -0.4375 C 7.164062 -0.539062 7.234375 -0.671875 7.234375 -0.828125 C 7.234375 -1.023438 7.144531 -1.335938 6.96875 -1.765625 Z M 6.21875 -3.609375 L 4.640625 -7.359375 L 3.03125 -3.609375 Z M 6.21875 -3.609375 "/>
|
||||
</g>
|
||||
<g id="glyph-0-5">
|
||||
<path d="M 5.75 -2.375 C 5.582031 -1.550781 5.253906 -0.914062 4.765625 -0.46875 C 4.273438 -0.03125 3.726562 0.1875 3.125 0.1875 C 2.414062 0.1875 1.796875 -0.109375 1.265625 -0.703125 C 0.742188 -1.296875 0.484375 -2.101562 0.484375 -3.125 C 0.484375 -4.101562 0.773438 -4.898438 1.359375 -5.515625 C 1.941406 -6.140625 2.644531 -6.453125 3.46875 -6.453125 C 4.082031 -6.453125 4.585938 -6.285156 4.984375 -5.953125 C 5.378906 -5.628906 5.578125 -5.289062 5.578125 -4.9375 C 5.578125 -4.769531 5.519531 -4.628906 5.40625 -4.515625 C 5.300781 -4.410156 5.144531 -4.359375 4.9375 -4.359375 C 4.675781 -4.359375 4.472656 -4.445312 4.328125 -4.625 C 4.253906 -4.71875 4.203125 -4.898438 4.171875 -5.171875 C 4.148438 -5.441406 4.0625 -5.644531 3.90625 -5.78125 C 3.75 -5.914062 3.523438 -5.984375 3.234375 -5.984375 C 2.785156 -5.984375 2.421875 -5.816406 2.140625 -5.484375 C 1.773438 -5.035156 1.59375 -4.445312 1.59375 -3.71875 C 1.59375 -2.96875 1.773438 -2.304688 2.140625 -1.734375 C 2.503906 -1.160156 3 -0.875 3.625 -0.875 C 4.070312 -0.875 4.472656 -1.023438 4.828125 -1.328125 C 5.078125 -1.535156 5.320312 -1.914062 5.5625 -2.46875 Z M 5.75 -2.375 "/>
|
||||
</g>
|
||||
<g id="glyph-0-6">
|
||||
<path d="M 2.25 -8.3125 L 2.25 -6.265625 L 3.71875 -6.265625 L 3.71875 -5.78125 L 2.25 -5.78125 L 2.25 -1.71875 C 2.25 -1.3125 2.304688 -1.035156 2.421875 -0.890625 C 2.546875 -0.753906 2.695312 -0.6875 2.875 -0.6875 C 3.03125 -0.6875 3.175781 -0.734375 3.3125 -0.828125 C 3.457031 -0.921875 3.566406 -1.0625 3.640625 -1.25 L 3.90625 -1.25 C 3.75 -0.800781 3.523438 -0.460938 3.234375 -0.234375 C 2.941406 -0.00390625 2.640625 0.109375 2.328125 0.109375 C 2.117188 0.109375 1.914062 0.0507812 1.71875 -0.0625 C 1.519531 -0.1875 1.367188 -0.351562 1.265625 -0.5625 C 1.171875 -0.78125 1.125 -1.117188 1.125 -1.578125 L 1.125 -5.78125 L 0.140625 -5.78125 L 0.140625 -6.015625 C 0.390625 -6.109375 0.644531 -6.273438 0.90625 -6.515625 C 1.164062 -6.753906 1.398438 -7.039062 1.609375 -7.375 C 1.710938 -7.539062 1.859375 -7.851562 2.046875 -8.3125 Z M 2.25 -8.3125 "/>
|
||||
</g>
|
||||
<g id="glyph-0-7">
|
||||
<path d="M 0.109375 -6.265625 L 3.0625 -6.265625 L 3.0625 -6.015625 L 2.875 -6.015625 C 2.695312 -6.015625 2.5625 -5.96875 2.46875 -5.875 C 2.375 -5.789062 2.328125 -5.675781 2.328125 -5.53125 C 2.328125 -5.375 2.375 -5.1875 2.46875 -4.96875 L 3.921875 -1.5 L 5.390625 -5.09375 C 5.492188 -5.34375 5.546875 -5.535156 5.546875 -5.671875 C 5.546875 -5.734375 5.523438 -5.785156 5.484375 -5.828125 C 5.441406 -5.898438 5.378906 -5.945312 5.296875 -5.96875 C 5.222656 -6 5.066406 -6.015625 4.828125 -6.015625 L 4.828125 -6.265625 L 6.875 -6.265625 L 6.875 -6.015625 C 6.632812 -5.992188 6.46875 -5.941406 6.375 -5.859375 C 6.21875 -5.722656 6.078125 -5.5 5.953125 -5.1875 L 3.71875 0.1875 L 3.453125 0.1875 L 1.203125 -5.09375 C 1.109375 -5.34375 1.015625 -5.519531 0.921875 -5.625 C 0.828125 -5.726562 0.710938 -5.816406 0.578125 -5.890625 C 0.492188 -5.929688 0.335938 -5.972656 0.109375 -6.015625 Z M 0.109375 -6.265625 "/>
|
||||
</g>
|
||||
<g id="glyph-0-8">
|
||||
<path d="M 0.078125 -6.265625 L 3 -6.265625 L 3 -6.015625 L 2.859375 -6.015625 C 2.648438 -6.015625 2.492188 -5.96875 2.390625 -5.875 C 2.296875 -5.789062 2.25 -5.679688 2.25 -5.546875 C 2.25 -5.367188 2.320312 -5.125 2.46875 -4.8125 L 4 -1.640625 L 5.390625 -5.109375 C 5.472656 -5.296875 5.515625 -5.476562 5.515625 -5.65625 C 5.515625 -5.738281 5.5 -5.800781 5.46875 -5.84375 C 5.425781 -5.894531 5.363281 -5.9375 5.28125 -5.96875 C 5.207031 -6 5.070312 -6.015625 4.875 -6.015625 L 4.875 -6.265625 L 6.921875 -6.265625 L 6.921875 -6.015625 C 6.753906 -5.992188 6.625 -5.953125 6.53125 -5.890625 C 6.4375 -5.835938 6.335938 -5.738281 6.234375 -5.59375 C 6.191406 -5.53125 6.113281 -5.351562 6 -5.0625 L 3.453125 1.1875 C 3.203125 1.789062 2.875 2.242188 2.46875 2.546875 C 2.070312 2.859375 1.691406 3.015625 1.328125 3.015625 C 1.054688 3.015625 0.832031 2.9375 0.65625 2.78125 C 0.488281 2.632812 0.40625 2.457031 0.40625 2.25 C 0.40625 2.0625 0.46875 1.910156 0.59375 1.796875 C 0.71875 1.679688 0.890625 1.625 1.109375 1.625 C 1.253906 1.625 1.457031 1.671875 1.71875 1.765625 C 1.90625 1.835938 2.019531 1.875 2.0625 1.875 C 2.195312 1.875 2.34375 1.800781 2.5 1.65625 C 2.664062 1.519531 2.832031 1.25 3 0.84375 L 3.453125 -0.25 L 1.203125 -4.96875 C 1.128906 -5.113281 1.019531 -5.289062 0.875 -5.5 C 0.757812 -5.65625 0.664062 -5.757812 0.59375 -5.8125 C 0.488281 -5.882812 0.316406 -5.953125 0.078125 -6.015625 Z M 0.078125 -6.265625 "/>
|
||||
</g>
|
||||
<g id="glyph-0-9">
|
||||
<path d="M 1.75 -1.328125 C 1.96875 -1.328125 2.148438 -1.25 2.296875 -1.09375 C 2.441406 -0.945312 2.515625 -0.769531 2.515625 -0.5625 C 2.515625 -0.351562 2.4375 -0.175781 2.28125 -0.03125 C 2.132812 0.113281 1.957031 0.1875 1.75 0.1875 C 1.539062 0.1875 1.359375 0.113281 1.203125 -0.03125 C 1.054688 -0.175781 0.984375 -0.351562 0.984375 -0.5625 C 0.984375 -0.78125 1.054688 -0.960938 1.203125 -1.109375 C 1.359375 -1.253906 1.539062 -1.328125 1.75 -1.328125 Z M 1.75 -1.328125 "/>
|
||||
</g>
|
||||
<g id="glyph-0-10">
|
||||
<path d="M 3.5 -6.453125 C 4.445312 -6.453125 5.207031 -6.085938 5.78125 -5.359375 C 6.269531 -4.742188 6.515625 -4.039062 6.515625 -3.25 C 6.515625 -2.6875 6.378906 -2.117188 6.109375 -1.546875 C 5.835938 -0.972656 5.46875 -0.539062 5 -0.25 C 4.53125 0.0390625 4.003906 0.1875 3.421875 0.1875 C 2.484375 0.1875 1.734375 -0.1875 1.171875 -0.9375 C 0.703125 -1.570312 0.46875 -2.28125 0.46875 -3.0625 C 0.46875 -3.644531 0.609375 -4.21875 0.890625 -4.78125 C 1.179688 -5.351562 1.554688 -5.773438 2.015625 -6.046875 C 2.484375 -6.316406 2.976562 -6.453125 3.5 -6.453125 Z M 3.28125 -6 C 3.039062 -6 2.796875 -5.925781 2.546875 -5.78125 C 2.304688 -5.644531 2.113281 -5.394531 1.96875 -5.03125 C 1.820312 -4.664062 1.75 -4.203125 1.75 -3.640625 C 1.75 -2.734375 1.925781 -1.945312 2.28125 -1.28125 C 2.644531 -0.625 3.125 -0.296875 3.71875 -0.296875 C 4.15625 -0.296875 4.519531 -0.476562 4.8125 -0.84375 C 5.101562 -1.207031 5.25 -1.832031 5.25 -2.71875 C 5.25 -3.832031 5.007812 -4.707031 4.53125 -5.34375 C 4.207031 -5.78125 3.789062 -6 3.28125 -6 Z M 3.28125 -6 "/>
|
||||
</g>
|
||||
<g id="glyph-0-11">
|
||||
<path d="M 8.421875 -9.484375 L 8.640625 -6.328125 L 8.421875 -6.328125 C 8.140625 -7.273438 7.738281 -7.953125 7.21875 -8.359375 C 6.695312 -8.773438 6.066406 -8.984375 5.328125 -8.984375 C 4.710938 -8.984375 4.15625 -8.828125 3.65625 -8.515625 C 3.164062 -8.203125 2.773438 -7.703125 2.484375 -7.015625 C 2.203125 -6.335938 2.0625 -5.492188 2.0625 -4.484375 C 2.0625 -3.640625 2.195312 -2.910156 2.46875 -2.296875 C 2.738281 -1.679688 3.140625 -1.207031 3.671875 -0.875 C 4.210938 -0.550781 4.832031 -0.390625 5.53125 -0.390625 C 6.132812 -0.390625 6.664062 -0.515625 7.125 -0.765625 C 7.582031 -1.023438 8.085938 -1.539062 8.640625 -2.3125 L 8.859375 -2.171875 C 8.390625 -1.347656 7.84375 -0.742188 7.21875 -0.359375 C 6.601562 0.0234375 5.867188 0.21875 5.015625 0.21875 C 3.484375 0.21875 2.296875 -0.351562 1.453125 -1.5 C 0.816406 -2.34375 0.5 -3.335938 0.5 -4.484375 C 0.5 -5.410156 0.707031 -6.257812 1.125 -7.03125 C 1.539062 -7.8125 2.113281 -8.414062 2.84375 -8.84375 C 3.570312 -9.269531 4.363281 -9.484375 5.21875 -9.484375 C 5.894531 -9.484375 6.554688 -9.316406 7.203125 -8.984375 C 7.398438 -8.890625 7.535156 -8.84375 7.609375 -8.84375 C 7.734375 -8.84375 7.84375 -8.882812 7.9375 -8.96875 C 8.050781 -9.09375 8.132812 -9.265625 8.1875 -9.484375 Z M 8.421875 -9.484375 "/>
|
||||
</g>
|
||||
<g id="glyph-0-12">
|
||||
<path d="M 2.265625 -6.453125 L 2.265625 -5.03125 C 2.796875 -5.976562 3.335938 -6.453125 3.890625 -6.453125 C 4.140625 -6.453125 4.34375 -6.375 4.5 -6.21875 C 4.664062 -6.0625 4.75 -5.882812 4.75 -5.6875 C 4.75 -5.507812 4.6875 -5.359375 4.5625 -5.234375 C 4.445312 -5.109375 4.3125 -5.046875 4.15625 -5.046875 C 3.988281 -5.046875 3.804688 -5.125 3.609375 -5.28125 C 3.410156 -5.445312 3.265625 -5.53125 3.171875 -5.53125 C 3.085938 -5.53125 3 -5.484375 2.90625 -5.390625 C 2.695312 -5.203125 2.484375 -4.894531 2.265625 -4.46875 L 2.265625 -1.46875 C 2.265625 -1.113281 2.3125 -0.847656 2.40625 -0.671875 C 2.457031 -0.554688 2.554688 -0.457031 2.703125 -0.375 C 2.859375 -0.289062 3.078125 -0.25 3.359375 -0.25 L 3.359375 0 L 0.15625 0 L 0.15625 -0.25 C 0.476562 -0.25 0.71875 -0.296875 0.875 -0.390625 C 0.988281 -0.460938 1.066406 -0.582031 1.109375 -0.75 C 1.128906 -0.820312 1.140625 -1.039062 1.140625 -1.40625 L 1.140625 -3.828125 C 1.140625 -4.554688 1.125 -4.988281 1.09375 -5.125 C 1.0625 -5.269531 1.003906 -5.375 0.921875 -5.4375 C 0.847656 -5.5 0.753906 -5.53125 0.640625 -5.53125 C 0.492188 -5.53125 0.332031 -5.5 0.15625 -5.4375 L 0.09375 -5.6875 L 1.984375 -6.453125 Z M 2.265625 -6.453125 "/>
|
||||
</g>
|
||||
<g id="glyph-0-13">
|
||||
<path d="M 1.484375 -3.90625 C 1.484375 -2.976562 1.710938 -2.25 2.171875 -1.71875 C 2.617188 -1.1875 3.15625 -0.921875 3.78125 -0.921875 C 4.1875 -0.921875 4.539062 -1.03125 4.84375 -1.25 C 5.144531 -1.476562 5.398438 -1.867188 5.609375 -2.421875 L 5.8125 -2.28125 C 5.71875 -1.65625 5.441406 -1.085938 4.984375 -0.578125 C 4.523438 -0.0664062 3.945312 0.1875 3.25 0.1875 C 2.5 0.1875 1.851562 -0.101562 1.3125 -0.6875 C 0.78125 -1.269531 0.515625 -2.054688 0.515625 -3.046875 C 0.515625 -4.117188 0.789062 -4.953125 1.34375 -5.546875 C 1.894531 -6.148438 2.582031 -6.453125 3.40625 -6.453125 C 4.113281 -6.453125 4.691406 -6.21875 5.140625 -5.75 C 5.585938 -5.289062 5.8125 -4.675781 5.8125 -3.90625 Z M 1.484375 -4.296875 L 4.390625 -4.296875 C 4.367188 -4.703125 4.320312 -4.984375 4.25 -5.140625 C 4.132812 -5.398438 3.960938 -5.601562 3.734375 -5.75 C 3.503906 -5.894531 3.269531 -5.96875 3.03125 -5.96875 C 2.65625 -5.96875 2.316406 -5.820312 2.015625 -5.53125 C 1.710938 -5.238281 1.535156 -4.828125 1.484375 -4.296875 Z M 1.484375 -4.296875 "/>
|
||||
</g>
|
||||
<g id="glyph-0-14">
|
||||
<path d="M 4.34375 2.734375 L 4.34375 3 C 3.65625 2.644531 3.082031 2.238281 2.625 1.78125 C 1.96875 1.113281 1.460938 0.332031 1.109375 -0.5625 C 0.753906 -1.457031 0.578125 -2.390625 0.578125 -3.359375 C 0.578125 -4.765625 0.925781 -6.050781 1.625 -7.21875 C 2.320312 -8.382812 3.226562 -9.21875 4.34375 -9.71875 L 4.34375 -9.4375 C 3.78125 -9.125 3.316406 -8.695312 2.953125 -8.15625 C 2.597656 -7.625 2.332031 -6.941406 2.15625 -6.109375 C 1.976562 -5.285156 1.890625 -4.425781 1.890625 -3.53125 C 1.890625 -2.5625 1.96875 -1.675781 2.125 -0.875 C 2.238281 -0.25 2.378906 0.25 2.546875 0.625 C 2.710938 1.007812 2.9375 1.378906 3.21875 1.734375 C 3.507812 2.085938 3.882812 2.421875 4.34375 2.734375 Z M 4.34375 2.734375 "/>
|
||||
</g>
|
||||
<g id="glyph-0-15">
|
||||
<path d="M 0.3125 -9.4375 L 0.3125 -9.71875 C 1.007812 -9.375 1.585938 -8.972656 2.046875 -8.515625 C 2.691406 -7.847656 3.191406 -7.066406 3.546875 -6.171875 C 3.910156 -5.273438 4.09375 -4.34375 4.09375 -3.375 C 4.09375 -1.957031 3.742188 -0.664062 3.046875 0.5 C 2.347656 1.664062 1.4375 2.5 0.3125 3 L 0.3125 2.734375 C 0.875 2.421875 1.335938 1.992188 1.703125 1.453125 C 2.066406 0.921875 2.332031 0.242188 2.5 -0.578125 C 2.675781 -1.398438 2.765625 -2.265625 2.765625 -3.171875 C 2.765625 -4.140625 2.691406 -5.023438 2.546875 -5.828125 C 2.429688 -6.453125 2.285156 -6.953125 2.109375 -7.328125 C 1.941406 -7.710938 1.71875 -8.078125 1.4375 -8.421875 C 1.15625 -8.773438 0.78125 -9.113281 0.3125 -9.4375 Z M 0.3125 -9.4375 "/>
|
||||
</g>
|
||||
<g id="glyph-0-16">
|
||||
<path d="M 3.921875 -9.71875 L 0.5625 0.1875 L 0.015625 0.1875 L 3.375 -9.71875 Z M 3.921875 -9.71875 "/>
|
||||
</g>
|
||||
<g id="glyph-0-17">
|
||||
<path d="M 2.296875 -5.109375 C 2.753906 -5.566406 3.023438 -5.832031 3.109375 -5.90625 C 3.304688 -6.070312 3.523438 -6.203125 3.765625 -6.296875 C 4.003906 -6.398438 4.238281 -6.453125 4.46875 -6.453125 C 4.863281 -6.453125 5.203125 -6.335938 5.484375 -6.109375 C 5.765625 -5.878906 5.953125 -5.546875 6.046875 -5.109375 C 6.515625 -5.660156 6.910156 -6.019531 7.234375 -6.1875 C 7.554688 -6.363281 7.890625 -6.453125 8.234375 -6.453125 C 8.566406 -6.453125 8.863281 -6.363281 9.125 -6.1875 C 9.382812 -6.019531 9.585938 -5.742188 9.734375 -5.359375 C 9.835938 -5.085938 9.890625 -4.671875 9.890625 -4.109375 L 9.890625 -1.421875 C 9.890625 -1.023438 9.914062 -0.753906 9.96875 -0.609375 C 10.019531 -0.503906 10.101562 -0.414062 10.21875 -0.34375 C 10.34375 -0.28125 10.546875 -0.25 10.828125 -0.25 L 10.828125 0 L 7.734375 0 L 7.734375 -0.25 L 7.875 -0.25 C 8.132812 -0.25 8.34375 -0.300781 8.5 -0.40625 C 8.601562 -0.476562 8.675781 -0.59375 8.71875 -0.75 C 8.738281 -0.832031 8.75 -1.054688 8.75 -1.421875 L 8.75 -4.109375 C 8.75 -4.617188 8.6875 -4.976562 8.5625 -5.1875 C 8.382812 -5.476562 8.101562 -5.625 7.71875 -5.625 C 7.46875 -5.625 7.222656 -5.5625 6.984375 -5.4375 C 6.742188 -5.320312 6.445312 -5.097656 6.09375 -4.765625 L 6.078125 -4.703125 L 6.09375 -4.40625 L 6.09375 -1.421875 C 6.09375 -0.984375 6.113281 -0.710938 6.15625 -0.609375 C 6.207031 -0.503906 6.300781 -0.414062 6.4375 -0.34375 C 6.570312 -0.28125 6.796875 -0.25 7.109375 -0.25 L 7.109375 0 L 3.953125 0 L 3.953125 -0.25 C 4.296875 -0.25 4.53125 -0.289062 4.65625 -0.375 C 4.789062 -0.457031 4.882812 -0.578125 4.9375 -0.734375 C 4.957031 -0.816406 4.96875 -1.046875 4.96875 -1.421875 L 4.96875 -4.109375 C 4.96875 -4.617188 4.894531 -4.984375 4.75 -5.203125 C 4.539062 -5.492188 4.257812 -5.640625 3.90625 -5.640625 C 3.65625 -5.640625 3.410156 -5.578125 3.171875 -5.453125 C 2.796875 -5.242188 2.503906 -5.015625 2.296875 -4.765625 L 2.296875 -1.421875 C 2.296875 -1.003906 2.320312 -0.734375 2.375 -0.609375 C 2.4375 -0.492188 2.519531 -0.40625 2.625 -0.34375 C 2.738281 -0.28125 2.96875 -0.25 3.3125 -0.25 L 3.3125 0 L 0.21875 0 L 0.21875 -0.25 C 0.507812 -0.25 0.707031 -0.28125 0.8125 -0.34375 C 0.925781 -0.40625 1.015625 -0.5 1.078125 -0.625 C 1.140625 -0.757812 1.171875 -1.023438 1.171875 -1.421875 L 1.171875 -3.8125 C 1.171875 -4.5 1.148438 -4.941406 1.109375 -5.140625 C 1.078125 -5.285156 1.023438 -5.382812 0.953125 -5.4375 C 0.890625 -5.5 0.796875 -5.53125 0.671875 -5.53125 C 0.546875 -5.53125 0.394531 -5.5 0.21875 -5.4375 L 0.109375 -5.6875 L 2 -6.453125 L 2.296875 -6.453125 Z M 2.296875 -5.109375 "/>
|
||||
</g>
|
||||
<g id="glyph-0-18">
|
||||
<path d="M 5.125 -9.484375 C 6.320312 -9.484375 7.363281 -9.023438 8.25 -8.109375 C 9.132812 -7.191406 9.578125 -6.050781 9.578125 -4.6875 C 9.578125 -3.28125 9.128906 -2.109375 8.234375 -1.171875 C 7.347656 -0.242188 6.273438 0.21875 5.015625 0.21875 C 3.734375 0.21875 2.660156 -0.234375 1.796875 -1.140625 C 0.929688 -2.054688 0.5 -3.234375 0.5 -4.671875 C 0.5 -6.140625 1 -7.335938 2 -8.265625 C 2.863281 -9.078125 3.90625 -9.484375 5.125 -9.484375 Z M 4.984375 -8.984375 C 4.160156 -8.984375 3.5 -8.675781 3 -8.0625 C 2.375 -7.289062 2.0625 -6.171875 2.0625 -4.703125 C 2.0625 -3.179688 2.382812 -2.015625 3.03125 -1.203125 C 3.53125 -0.585938 4.1875 -0.28125 5 -0.28125 C 5.863281 -0.28125 6.578125 -0.617188 7.140625 -1.296875 C 7.710938 -1.972656 8 -3.039062 8 -4.5 C 8 -6.09375 7.6875 -7.273438 7.0625 -8.046875 C 6.5625 -8.671875 5.867188 -8.984375 4.984375 -8.984375 Z M 4.984375 -8.984375 "/>
|
||||
</g>
|
||||
<g id="glyph-0-19">
|
||||
<path d="M 2.15625 -5.1875 C 2.757812 -6.03125 3.410156 -6.453125 4.109375 -6.453125 C 4.753906 -6.453125 5.316406 -6.175781 5.796875 -5.625 C 6.273438 -5.070312 6.515625 -4.320312 6.515625 -3.375 C 6.515625 -2.257812 6.144531 -1.363281 5.40625 -0.6875 C 4.769531 -0.101562 4.0625 0.1875 3.28125 0.1875 C 2.914062 0.1875 2.546875 0.125 2.171875 0 C 1.796875 -0.132812 1.414062 -0.335938 1.03125 -0.609375 L 1.03125 -7.09375 C 1.03125 -7.800781 1.007812 -8.234375 0.96875 -8.390625 C 0.9375 -8.554688 0.882812 -8.671875 0.8125 -8.734375 C 0.738281 -8.796875 0.648438 -8.828125 0.546875 -8.828125 C 0.410156 -8.828125 0.25 -8.789062 0.0625 -8.71875 L -0.03125 -8.953125 L 1.84375 -9.71875 L 2.15625 -9.71875 Z M 2.15625 -4.75 L 2.15625 -1 C 2.382812 -0.769531 2.625 -0.597656 2.875 -0.484375 C 3.125 -0.367188 3.378906 -0.3125 3.640625 -0.3125 C 4.054688 -0.3125 4.441406 -0.535156 4.796875 -0.984375 C 5.148438 -1.441406 5.328125 -2.109375 5.328125 -2.984375 C 5.328125 -3.785156 5.148438 -4.398438 4.796875 -4.828125 C 4.441406 -5.253906 4.035156 -5.46875 3.578125 -5.46875 C 3.335938 -5.46875 3.09375 -5.410156 2.84375 -5.296875 C 2.664062 -5.203125 2.4375 -5.019531 2.15625 -4.75 Z M 2.15625 -4.75 "/>
|
||||
</g>
|
||||
<g id="glyph-0-20">
|
||||
<path d="M 2.890625 -5.765625 L 2.890625 -1.65625 C 2.890625 -1.070312 2.953125 -0.703125 3.078125 -0.546875 C 3.242188 -0.347656 3.46875 -0.25 3.75 -0.25 L 4.328125 -0.25 L 4.328125 0 L 0.578125 0 L 0.578125 -0.25 L 0.859375 -0.25 C 1.046875 -0.25 1.210938 -0.289062 1.359375 -0.375 C 1.515625 -0.46875 1.617188 -0.59375 1.671875 -0.75 C 1.722656 -0.90625 1.75 -1.207031 1.75 -1.65625 L 1.75 -5.765625 L 0.546875 -5.765625 L 0.546875 -6.265625 L 1.75 -6.265625 L 1.75 -6.671875 C 1.75 -7.296875 1.847656 -7.820312 2.046875 -8.25 C 2.253906 -8.6875 2.5625 -9.035156 2.96875 -9.296875 C 3.382812 -9.566406 3.851562 -9.703125 4.375 -9.703125 C 4.851562 -9.703125 5.289062 -9.550781 5.6875 -9.25 C 5.945312 -9.039062 6.078125 -8.804688 6.078125 -8.546875 C 6.078125 -8.410156 6.019531 -8.28125 5.90625 -8.15625 C 5.789062 -8.039062 5.664062 -7.984375 5.53125 -7.984375 C 5.414062 -7.984375 5.300781 -8.019531 5.1875 -8.09375 C 5.070312 -8.164062 4.929688 -8.328125 4.765625 -8.578125 C 4.597656 -8.828125 4.441406 -8.992188 4.296875 -9.078125 C 4.160156 -9.171875 4.003906 -9.21875 3.828125 -9.21875 C 3.617188 -9.21875 3.441406 -9.160156 3.296875 -9.046875 C 3.148438 -8.929688 3.046875 -8.753906 2.984375 -8.515625 C 2.921875 -8.285156 2.890625 -7.6875 2.890625 -6.71875 L 2.890625 -6.265625 L 4.5 -6.265625 L 4.5 -5.765625 Z M 2.890625 -5.765625 "/>
|
||||
</g>
|
||||
<g id="glyph-0-21">
|
||||
<path d="M 5.921875 -6.265625 L 5.921875 -2.46875 C 5.921875 -1.738281 5.9375 -1.289062 5.96875 -1.125 C 6.007812 -0.96875 6.066406 -0.859375 6.140625 -0.796875 C 6.210938 -0.734375 6.300781 -0.703125 6.40625 -0.703125 C 6.550781 -0.703125 6.710938 -0.742188 6.890625 -0.828125 L 6.984375 -0.578125 L 5.109375 0.1875 L 4.796875 0.1875 L 4.796875 -1.140625 C 4.265625 -0.554688 3.851562 -0.1875 3.5625 -0.03125 C 3.28125 0.113281 2.984375 0.1875 2.671875 0.1875 C 2.316406 0.1875 2.007812 0.0859375 1.75 -0.109375 C 1.5 -0.316406 1.320312 -0.578125 1.21875 -0.890625 C 1.125 -1.210938 1.078125 -1.664062 1.078125 -2.25 L 1.078125 -5.046875 C 1.078125 -5.335938 1.039062 -5.539062 0.96875 -5.65625 C 0.90625 -5.769531 0.8125 -5.859375 0.6875 -5.921875 C 0.5625 -5.984375 0.335938 -6.015625 0.015625 -6.015625 L 0.015625 -6.265625 L 2.203125 -6.265625 L 2.203125 -2.078125 C 2.203125 -1.492188 2.300781 -1.109375 2.5 -0.921875 C 2.707031 -0.742188 2.957031 -0.65625 3.25 -0.65625 C 3.445312 -0.65625 3.664062 -0.710938 3.90625 -0.828125 C 4.15625 -0.953125 4.453125 -1.1875 4.796875 -1.53125 L 4.796875 -5.09375 C 4.796875 -5.445312 4.726562 -5.6875 4.59375 -5.8125 C 4.46875 -5.9375 4.203125 -6.003906 3.796875 -6.015625 L 3.796875 -6.265625 Z M 5.921875 -6.265625 "/>
|
||||
</g>
|
||||
<g id="glyph-0-22">
|
||||
<path d="M 4.484375 -6.453125 L 4.484375 -4.3125 L 4.265625 -4.3125 C 4.085938 -4.976562 3.863281 -5.429688 3.59375 -5.671875 C 3.320312 -5.921875 2.976562 -6.046875 2.5625 -6.046875 C 2.238281 -6.046875 1.976562 -5.957031 1.78125 -5.78125 C 1.582031 -5.613281 1.484375 -5.429688 1.484375 -5.234375 C 1.484375 -4.972656 1.554688 -4.753906 1.703125 -4.578125 C 1.847656 -4.390625 2.140625 -4.191406 2.578125 -3.984375 L 3.5625 -3.5 C 4.488281 -3.039062 4.953125 -2.441406 4.953125 -1.703125 C 4.953125 -1.140625 4.738281 -0.679688 4.3125 -0.328125 C 3.882812 0.015625 3.398438 0.1875 2.859375 0.1875 C 2.484375 0.1875 2.046875 0.117188 1.546875 -0.015625 C 1.398438 -0.0546875 1.28125 -0.078125 1.1875 -0.078125 C 1.082031 -0.078125 1 -0.0195312 0.9375 0.09375 L 0.71875 0.09375 L 0.71875 -2.140625 L 0.9375 -2.140625 C 1.0625 -1.503906 1.300781 -1.023438 1.65625 -0.703125 C 2.019531 -0.378906 2.425781 -0.21875 2.875 -0.21875 C 3.1875 -0.21875 3.441406 -0.304688 3.640625 -0.484375 C 3.835938 -0.671875 3.9375 -0.894531 3.9375 -1.15625 C 3.9375 -1.46875 3.828125 -1.726562 3.609375 -1.9375 C 3.390625 -2.15625 2.945312 -2.425781 2.28125 -2.75 C 1.625 -3.082031 1.191406 -3.382812 0.984375 -3.65625 C 0.785156 -3.914062 0.6875 -4.242188 0.6875 -4.640625 C 0.6875 -5.148438 0.863281 -5.578125 1.21875 -5.921875 C 1.570312 -6.273438 2.023438 -6.453125 2.578125 -6.453125 C 2.828125 -6.453125 3.128906 -6.398438 3.484375 -6.296875 C 3.710938 -6.222656 3.863281 -6.1875 3.9375 -6.1875 C 4.007812 -6.1875 4.066406 -6.203125 4.109375 -6.234375 C 4.148438 -6.265625 4.203125 -6.335938 4.265625 -6.453125 Z M 4.484375 -6.453125 "/>
|
||||
</g>
|
||||
<g id="glyph-0-23">
|
||||
<path d="M 4.859375 -0.703125 C 4.554688 -0.378906 4.257812 -0.148438 3.96875 -0.015625 C 3.675781 0.117188 3.359375 0.1875 3.015625 0.1875 C 2.335938 0.1875 1.742188 -0.0976562 1.234375 -0.671875 C 0.722656 -1.242188 0.46875 -1.976562 0.46875 -2.875 C 0.46875 -3.769531 0.75 -4.585938 1.3125 -5.328125 C 1.875 -6.078125 2.601562 -6.453125 3.5 -6.453125 C 4.050781 -6.453125 4.503906 -6.273438 4.859375 -5.921875 L 4.859375 -7.078125 C 4.859375 -7.796875 4.84375 -8.234375 4.8125 -8.390625 C 4.78125 -8.554688 4.726562 -8.671875 4.65625 -8.734375 C 4.582031 -8.796875 4.488281 -8.828125 4.375 -8.828125 C 4.257812 -8.828125 4.101562 -8.789062 3.90625 -8.71875 L 3.8125 -8.953125 L 5.6875 -9.71875 L 5.984375 -9.71875 L 5.984375 -2.484375 C 5.984375 -1.742188 6 -1.289062 6.03125 -1.125 C 6.070312 -0.96875 6.128906 -0.859375 6.203125 -0.796875 C 6.273438 -0.734375 6.363281 -0.703125 6.46875 -0.703125 C 6.59375 -0.703125 6.753906 -0.742188 6.953125 -0.828125 L 7.03125 -0.578125 L 5.171875 0.1875 L 4.859375 0.1875 Z M 4.859375 -1.1875 L 4.859375 -4.40625 C 4.828125 -4.71875 4.742188 -5 4.609375 -5.25 C 4.472656 -5.507812 4.289062 -5.703125 4.0625 -5.828125 C 3.84375 -5.960938 3.625 -6.03125 3.40625 -6.03125 C 3.007812 -6.03125 2.65625 -5.847656 2.34375 -5.484375 C 1.925781 -5.015625 1.71875 -4.320312 1.71875 -3.40625 C 1.71875 -2.488281 1.914062 -1.785156 2.3125 -1.296875 C 2.71875 -0.804688 3.164062 -0.5625 3.65625 -0.5625 C 4.070312 -0.5625 4.472656 -0.769531 4.859375 -1.1875 Z M 4.859375 -1.1875 "/>
|
||||
</g>
|
||||
<g id="glyph-0-24">
|
||||
<path d="M 6.421875 -9.484375 L 6.421875 -6.28125 L 6.171875 -6.28125 C 6.085938 -6.894531 5.9375 -7.382812 5.71875 -7.75 C 5.507812 -8.113281 5.207031 -8.398438 4.8125 -8.609375 C 4.425781 -8.828125 4.023438 -8.9375 3.609375 -8.9375 C 3.128906 -8.9375 2.734375 -8.789062 2.421875 -8.5 C 2.117188 -8.207031 1.96875 -7.878906 1.96875 -7.515625 C 1.96875 -7.234375 2.0625 -6.972656 2.25 -6.734375 C 2.539062 -6.398438 3.210938 -5.945312 4.265625 -5.375 C 5.140625 -4.90625 5.734375 -4.546875 6.046875 -4.296875 C 6.359375 -4.054688 6.597656 -3.765625 6.765625 -3.421875 C 6.941406 -3.085938 7.03125 -2.734375 7.03125 -2.359375 C 7.03125 -1.660156 6.757812 -1.054688 6.21875 -0.546875 C 5.675781 -0.0351562 4.972656 0.21875 4.109375 0.21875 C 3.847656 0.21875 3.597656 0.195312 3.359375 0.15625 C 3.210938 0.125 2.914062 0.0390625 2.46875 -0.09375 C 2.03125 -0.238281 1.753906 -0.3125 1.640625 -0.3125 C 1.523438 -0.3125 1.429688 -0.273438 1.359375 -0.203125 C 1.296875 -0.140625 1.25 0 1.21875 0.21875 L 0.96875 0.21875 L 0.96875 -2.96875 L 1.21875 -2.96875 C 1.332031 -2.300781 1.488281 -1.800781 1.6875 -1.46875 C 1.894531 -1.144531 2.203125 -0.875 2.609375 -0.65625 C 3.023438 -0.4375 3.476562 -0.328125 3.96875 -0.328125 C 4.539062 -0.328125 4.988281 -0.472656 5.3125 -0.765625 C 5.644531 -1.066406 5.8125 -1.425781 5.8125 -1.84375 C 5.8125 -2.070312 5.75 -2.300781 5.625 -2.53125 C 5.5 -2.757812 5.304688 -2.972656 5.046875 -3.171875 C 4.867188 -3.316406 4.382812 -3.609375 3.59375 -4.046875 C 2.800781 -4.492188 2.234375 -4.847656 1.890625 -5.109375 C 1.554688 -5.378906 1.300781 -5.671875 1.125 -5.984375 C 0.957031 -6.304688 0.875 -6.660156 0.875 -7.046875 C 0.875 -7.710938 1.128906 -8.285156 1.640625 -8.765625 C 2.148438 -9.242188 2.800781 -9.484375 3.59375 -9.484375 C 4.082031 -9.484375 4.601562 -9.363281 5.15625 -9.125 C 5.40625 -9.007812 5.582031 -8.953125 5.6875 -8.953125 C 5.8125 -8.953125 5.910156 -8.984375 5.984375 -9.046875 C 6.054688 -9.117188 6.117188 -9.265625 6.171875 -9.484375 Z M 6.421875 -9.484375 "/>
|
||||
</g>
|
||||
<g id="glyph-0-25">
|
||||
<path d="M 2.28125 -9.71875 L 2.28125 -5.140625 C 2.78125 -5.691406 3.175781 -6.046875 3.46875 -6.203125 C 3.769531 -6.367188 4.070312 -6.453125 4.375 -6.453125 C 4.726562 -6.453125 5.03125 -6.351562 5.28125 -6.15625 C 5.539062 -5.957031 5.734375 -5.648438 5.859375 -5.234375 C 5.941406 -4.941406 5.984375 -4.40625 5.984375 -3.625 L 5.984375 -1.421875 C 5.984375 -1.023438 6.015625 -0.753906 6.078125 -0.609375 C 6.117188 -0.492188 6.191406 -0.40625 6.296875 -0.34375 C 6.410156 -0.28125 6.613281 -0.25 6.90625 -0.25 L 6.90625 0 L 3.828125 0 L 3.828125 -0.25 L 3.984375 -0.25 C 4.273438 -0.25 4.476562 -0.289062 4.59375 -0.375 C 4.707031 -0.46875 4.785156 -0.597656 4.828125 -0.765625 C 4.835938 -0.835938 4.84375 -1.054688 4.84375 -1.421875 L 4.84375 -3.625 C 4.84375 -4.3125 4.804688 -4.757812 4.734375 -4.96875 C 4.671875 -5.1875 4.5625 -5.347656 4.40625 -5.453125 C 4.25 -5.566406 4.0625 -5.625 3.84375 -5.625 C 3.613281 -5.625 3.378906 -5.5625 3.140625 -5.4375 C 2.898438 -5.320312 2.613281 -5.082031 2.28125 -4.71875 L 2.28125 -1.421875 C 2.28125 -0.984375 2.300781 -0.710938 2.34375 -0.609375 C 2.394531 -0.503906 2.484375 -0.414062 2.609375 -0.34375 C 2.742188 -0.28125 2.96875 -0.25 3.28125 -0.25 L 3.28125 0 L 0.1875 0 L 0.1875 -0.25 C 0.46875 -0.25 0.6875 -0.289062 0.84375 -0.375 C 0.9375 -0.414062 1.007812 -0.5 1.0625 -0.625 C 1.113281 -0.757812 1.140625 -1.023438 1.140625 -1.421875 L 1.140625 -7.078125 C 1.140625 -7.796875 1.125 -8.234375 1.09375 -8.390625 C 1.0625 -8.554688 1.007812 -8.671875 0.9375 -8.734375 C 0.863281 -8.796875 0.769531 -8.828125 0.65625 -8.828125 C 0.550781 -8.828125 0.394531 -8.789062 0.1875 -8.71875 L 0.09375 -8.953125 L 1.96875 -9.71875 Z M 2.28125 -9.71875 "/>
|
||||
</g>
|
||||
<g id="glyph-0-26">
|
||||
<path d="M 2.109375 -2.28125 C 1.722656 -2.46875 1.425781 -2.726562 1.21875 -3.0625 C 1.019531 -3.394531 0.921875 -3.765625 0.921875 -4.171875 C 0.921875 -4.796875 1.15625 -5.332031 1.625 -5.78125 C 2.09375 -6.226562 2.691406 -6.453125 3.421875 -6.453125 C 4.015625 -6.453125 4.53125 -6.304688 4.96875 -6.015625 L 6.296875 -6.015625 C 6.492188 -6.015625 6.609375 -6.003906 6.640625 -5.984375 C 6.671875 -5.972656 6.691406 -5.957031 6.703125 -5.9375 C 6.734375 -5.894531 6.75 -5.820312 6.75 -5.71875 C 6.75 -5.59375 6.738281 -5.507812 6.71875 -5.46875 C 6.695312 -5.445312 6.671875 -5.425781 6.640625 -5.40625 C 6.609375 -5.394531 6.492188 -5.390625 6.296875 -5.390625 L 5.484375 -5.390625 C 5.734375 -5.066406 5.859375 -4.648438 5.859375 -4.140625 C 5.859375 -3.554688 5.632812 -3.054688 5.1875 -2.640625 C 4.75 -2.222656 4.148438 -2.015625 3.390625 -2.015625 C 3.085938 -2.015625 2.773438 -2.0625 2.453125 -2.15625 C 2.242188 -1.976562 2.101562 -1.820312 2.03125 -1.6875 C 1.96875 -1.5625 1.9375 -1.457031 1.9375 -1.375 C 1.9375 -1.289062 1.972656 -1.210938 2.046875 -1.140625 C 2.117188 -1.066406 2.265625 -1.015625 2.484375 -0.984375 C 2.617188 -0.960938 2.941406 -0.945312 3.453125 -0.9375 C 4.390625 -0.914062 4.992188 -0.882812 5.265625 -0.84375 C 5.691406 -0.78125 6.03125 -0.617188 6.28125 -0.359375 C 6.539062 -0.109375 6.671875 0.203125 6.671875 0.578125 C 6.671875 1.085938 6.425781 1.570312 5.9375 2.03125 C 5.226562 2.6875 4.300781 3.015625 3.15625 3.015625 C 2.28125 3.015625 1.539062 2.816406 0.9375 2.421875 C 0.59375 2.191406 0.421875 1.957031 0.421875 1.71875 C 0.421875 1.601562 0.445312 1.492188 0.5 1.390625 C 0.570312 1.222656 0.726562 0.988281 0.96875 0.6875 C 1 0.644531 1.234375 0.394531 1.671875 -0.0625 C 1.429688 -0.195312 1.257812 -0.320312 1.15625 -0.4375 C 1.0625 -0.550781 1.015625 -0.675781 1.015625 -0.8125 C 1.015625 -0.96875 1.078125 -1.15625 1.203125 -1.375 C 1.335938 -1.59375 1.640625 -1.894531 2.109375 -2.28125 Z M 3.296875 -6.125 C 2.960938 -6.125 2.679688 -5.988281 2.453125 -5.71875 C 2.222656 -5.445312 2.109375 -5.035156 2.109375 -4.484375 C 2.109375 -3.753906 2.265625 -3.191406 2.578125 -2.796875 C 2.816406 -2.503906 3.117188 -2.359375 3.484375 -2.359375 C 3.828125 -2.359375 4.109375 -2.484375 4.328125 -2.734375 C 4.554688 -2.992188 4.671875 -3.40625 4.671875 -3.96875 C 4.671875 -4.6875 4.515625 -5.253906 4.203125 -5.671875 C 3.960938 -5.972656 3.660156 -6.125 3.296875 -6.125 Z M 2.046875 0 C 1.828125 0.226562 1.660156 0.441406 1.546875 0.640625 C 1.441406 0.847656 1.390625 1.035156 1.390625 1.203125 C 1.390625 1.421875 1.523438 1.613281 1.796875 1.78125 C 2.242188 2.0625 2.898438 2.203125 3.765625 2.203125 C 4.585938 2.203125 5.191406 2.054688 5.578125 1.765625 C 5.972656 1.472656 6.171875 1.164062 6.171875 0.84375 C 6.171875 0.601562 6.050781 0.429688 5.8125 0.328125 C 5.582031 0.234375 5.113281 0.175781 4.40625 0.15625 C 3.382812 0.125 2.597656 0.0703125 2.046875 0 Z M 2.046875 0 "/>
|
||||
</g>
|
||||
<g id="glyph-0-27">
|
||||
<path d="M 8.03125 -2.5625 L 8.25 -2.515625 L 7.453125 0 L 0.28125 0 L 0.28125 -0.25 L 0.625 -0.25 C 1.019531 -0.25 1.300781 -0.378906 1.46875 -0.640625 C 1.5625 -0.785156 1.609375 -1.117188 1.609375 -1.640625 L 1.609375 -7.625 C 1.609375 -8.207031 1.546875 -8.570312 1.421875 -8.71875 C 1.242188 -8.914062 0.976562 -9.015625 0.625 -9.015625 L 0.28125 -9.015625 L 0.28125 -9.265625 L 4.484375 -9.265625 L 4.484375 -9.015625 C 3.984375 -9.023438 3.632812 -8.976562 3.4375 -8.875 C 3.238281 -8.78125 3.101562 -8.660156 3.03125 -8.515625 C 2.957031 -8.367188 2.921875 -8.019531 2.921875 -7.46875 L 2.921875 -1.640625 C 2.921875 -1.265625 2.957031 -1.007812 3.03125 -0.875 C 3.09375 -0.769531 3.175781 -0.695312 3.28125 -0.65625 C 3.394531 -0.613281 3.753906 -0.59375 4.359375 -0.59375 L 5.03125 -0.59375 C 5.738281 -0.59375 6.234375 -0.644531 6.515625 -0.75 C 6.804688 -0.851562 7.070312 -1.035156 7.3125 -1.296875 C 7.550781 -1.566406 7.789062 -1.988281 8.03125 -2.5625 Z M 8.03125 -2.5625 "/>
|
||||
</g>
|
||||
</g>
|
||||
</defs>
|
||||
<path fill="none" stroke-width="1" stroke-linecap="butt" stroke-linejoin="miter" stroke="rgb(0%, 0%, 0%)" stroke-opacity="1" stroke-miterlimit="10" d="M 85.375 40 L 235.625 40 L 235.625 76 L 85.375 76 Z M 85.375 40 "/>
|
||||
<g fill="rgb(0%, 0%, 0%)" fill-opacity="1">
|
||||
<use xlink:href="#glyph-0-0" x="93.375" y="63.050781"/>
|
||||
</g>
|
||||
<g fill="rgb(0%, 0%, 0%)" fill-opacity="1">
|
||||
<use xlink:href="#glyph-0-1" x="106.131465" y="63.050781"/>
|
||||
</g>
|
||||
<g fill="rgb(0%, 0%, 0%)" fill-opacity="1">
|
||||
<use xlink:href="#glyph-0-2" x="112.121436" y="63.050781"/>
|
||||
</g>
|
||||
<g fill="rgb(0%, 0%, 0%)" fill-opacity="1">
|
||||
<use xlink:href="#glyph-0-3" x="115.87115" y="63.050781"/>
|
||||
</g>
|
||||
<g fill="rgb(0%, 0%, 0%)" fill-opacity="1">
|
||||
<use xlink:href="#glyph-0-4" x="122.619267" y="63.050781"/>
|
||||
</g>
|
||||
<g fill="rgb(0%, 0%, 0%)" fill-opacity="1">
|
||||
<use xlink:href="#glyph-0-5" x="132.379789" y="63.050781"/>
|
||||
</g>
|
||||
<g fill="rgb(0%, 0%, 0%)" fill-opacity="1">
|
||||
<use xlink:href="#glyph-0-6" x="138.369761" y="63.050781"/>
|
||||
</g>
|
||||
<g fill="rgb(0%, 0%, 0%)" fill-opacity="1">
|
||||
<use xlink:href="#glyph-0-2" x="142.119475" y="63.050781"/>
|
||||
</g>
|
||||
<g fill="rgb(0%, 0%, 0%)" fill-opacity="1">
|
||||
<use xlink:href="#glyph-0-7" x="145.869188" y="63.050781"/>
|
||||
</g>
|
||||
<g fill="rgb(0%, 0%, 0%)" fill-opacity="1">
|
||||
<use xlink:href="#glyph-0-2" x="152.631306" y="63.050781"/>
|
||||
</g>
|
||||
<g fill="rgb(0%, 0%, 0%)" fill-opacity="1">
|
||||
<use xlink:href="#glyph-0-6" x="156.38102" y="63.050781"/>
|
||||
</g>
|
||||
<g fill="rgb(0%, 0%, 0%)" fill-opacity="1">
|
||||
<use xlink:href="#glyph-0-8" x="160.130734" y="63.050781"/>
|
||||
</g>
|
||||
<g fill="rgb(0%, 0%, 0%)" fill-opacity="1">
|
||||
<use xlink:href="#glyph-0-9" x="166.416843" y="63.050781"/>
|
||||
</g>
|
||||
<g fill="rgb(0%, 0%, 0%)" fill-opacity="1">
|
||||
<use xlink:href="#glyph-0-10" x="169.874904" y="63.050781"/>
|
||||
</g>
|
||||
<g fill="rgb(0%, 0%, 0%)" fill-opacity="1">
|
||||
<use xlink:href="#glyph-0-3" x="176.623021" y="63.050781"/>
|
||||
</g>
|
||||
<g fill="rgb(0%, 0%, 0%)" fill-opacity="1">
|
||||
<use xlink:href="#glyph-0-11" x="183.371139" y="63.050781"/>
|
||||
</g>
|
||||
<g fill="rgb(0%, 0%, 0%)" fill-opacity="1">
|
||||
<use xlink:href="#glyph-0-12" x="192.373186" y="63.050781"/>
|
||||
</g>
|
||||
<g fill="rgb(0%, 0%, 0%)" fill-opacity="1">
|
||||
<use xlink:href="#glyph-0-13" x="196.881374" y="63.050781"/>
|
||||
</g>
|
||||
<g fill="rgb(0%, 0%, 0%)" fill-opacity="1">
|
||||
<use xlink:href="#glyph-0-1" x="202.871346" y="63.050781"/>
|
||||
</g>
|
||||
<g fill="rgb(0%, 0%, 0%)" fill-opacity="1">
|
||||
<use xlink:href="#glyph-0-6" x="208.875318" y="63.050781"/>
|
||||
</g>
|
||||
<g fill="rgb(0%, 0%, 0%)" fill-opacity="1">
|
||||
<use xlink:href="#glyph-0-13" x="212.625031" y="63.050781"/>
|
||||
</g>
|
||||
<g fill="rgb(0%, 0%, 0%)" fill-opacity="1">
|
||||
<use xlink:href="#glyph-0-14" x="218.629003" y="63.050781"/>
|
||||
</g>
|
||||
<g fill="rgb(0%, 0%, 0%)" fill-opacity="1">
|
||||
<use xlink:href="#glyph-0-15" x="223.123191" y="63.050781"/>
|
||||
</g>
|
||||
<path fill="none" stroke-width="1" stroke-linecap="butt" stroke-linejoin="miter" stroke="rgb(0%, 0%, 0%)" stroke-opacity="1" stroke-miterlimit="10" d="M 40 112 L 161 112 L 161 148 L 40 148 Z M 40 112 "/>
|
||||
<g fill="rgb(0%, 0%, 0%)" fill-opacity="1">
|
||||
<use xlink:href="#glyph-0-4" x="48" y="135.050781"/>
|
||||
</g>
|
||||
<g fill="rgb(0%, 0%, 0%)" fill-opacity="1">
|
||||
<use xlink:href="#glyph-0-5" x="57.746521" y="135.050781"/>
|
||||
</g>
|
||||
<g fill="rgb(0%, 0%, 0%)" fill-opacity="1">
|
||||
<use xlink:href="#glyph-0-6" x="63.750493" y="135.050781"/>
|
||||
</g>
|
||||
<g fill="rgb(0%, 0%, 0%)" fill-opacity="1">
|
||||
<use xlink:href="#glyph-0-2" x="67.500207" y="135.050781"/>
|
||||
</g>
|
||||
<g fill="rgb(0%, 0%, 0%)" fill-opacity="1">
|
||||
<use xlink:href="#glyph-0-7" x="71.249921" y="135.050781"/>
|
||||
</g>
|
||||
<g fill="rgb(0%, 0%, 0%)" fill-opacity="1">
|
||||
<use xlink:href="#glyph-0-2" x="77.998038" y="135.050781"/>
|
||||
</g>
|
||||
<g fill="rgb(0%, 0%, 0%)" fill-opacity="1">
|
||||
<use xlink:href="#glyph-0-6" x="81.747752" y="135.050781"/>
|
||||
</g>
|
||||
<g fill="rgb(0%, 0%, 0%)" fill-opacity="1">
|
||||
<use xlink:href="#glyph-0-8" x="85.497466" y="135.050781"/>
|
||||
</g>
|
||||
<g fill="rgb(0%, 0%, 0%)" fill-opacity="1">
|
||||
<use xlink:href="#glyph-0-9" x="91.797576" y="135.050781"/>
|
||||
</g>
|
||||
<g fill="rgb(0%, 0%, 0%)" fill-opacity="1">
|
||||
<use xlink:href="#glyph-0-10" x="95.255636" y="135.050781"/>
|
||||
</g>
|
||||
<g fill="rgb(0%, 0%, 0%)" fill-opacity="1">
|
||||
<use xlink:href="#glyph-0-3" x="102.003754" y="135.050781"/>
|
||||
</g>
|
||||
<g fill="rgb(0%, 0%, 0%)" fill-opacity="1">
|
||||
<use xlink:href="#glyph-0-11" x="108.751871" y="135.050781"/>
|
||||
</g>
|
||||
<g fill="rgb(0%, 0%, 0%)" fill-opacity="1">
|
||||
<use xlink:href="#glyph-0-12" x="117.753919" y="135.050781"/>
|
||||
</g>
|
||||
<g fill="rgb(0%, 0%, 0%)" fill-opacity="1">
|
||||
<use xlink:href="#glyph-0-13" x="122.248107" y="135.050781"/>
|
||||
</g>
|
||||
<g fill="rgb(0%, 0%, 0%)" fill-opacity="1">
|
||||
<use xlink:href="#glyph-0-1" x="128.252078" y="135.050781"/>
|
||||
</g>
|
||||
<g fill="rgb(0%, 0%, 0%)" fill-opacity="1">
|
||||
<use xlink:href="#glyph-0-6" x="134.25605" y="135.050781"/>
|
||||
</g>
|
||||
<g fill="rgb(0%, 0%, 0%)" fill-opacity="1">
|
||||
<use xlink:href="#glyph-0-13" x="138.005764" y="135.050781"/>
|
||||
</g>
|
||||
<g fill="rgb(0%, 0%, 0%)" fill-opacity="1">
|
||||
<use xlink:href="#glyph-0-14" x="143.995736" y="135.050781"/>
|
||||
</g>
|
||||
<g fill="rgb(0%, 0%, 0%)" fill-opacity="1">
|
||||
<use xlink:href="#glyph-0-15" x="148.503923" y="135.050781"/>
|
||||
</g>
|
||||
<path fill="none" stroke-width="1" stroke-linecap="butt" stroke-linejoin="miter" stroke="rgb(0%, 0%, 0%)" stroke-opacity="1" stroke-miterlimit="10" d="M 145.667969 76.304688 C 138.691406 84.441406 130.234375 94.3125 122.53125 103.296875 "/>
|
||||
<path fill-rule="nonzero" fill="rgb(0%, 0%, 0%)" fill-opacity="1" stroke-width="1" stroke-linecap="butt" stroke-linejoin="miter" stroke="rgb(0%, 0%, 0%)" stroke-opacity="1" stroke-miterlimit="10" d="M 125.3125 105.433594 L 116.144531 110.746094 L 119.996094 100.875 Z M 125.3125 105.433594 "/>
|
||||
<path fill="none" stroke-width="1" stroke-linecap="butt" stroke-linejoin="miter" stroke="rgb(0%, 0%, 0%)" stroke-opacity="1" stroke-miterlimit="10" d="M 178.625 112 L 264.375 112 L 264.375 148 L 178.625 148 Z M 178.625 112 "/>
|
||||
<g fill="rgb(0%, 0%, 0%)" fill-opacity="1">
|
||||
<use xlink:href="#glyph-0-0" x="186.625" y="135.050781"/>
|
||||
</g>
|
||||
<g fill="rgb(0%, 0%, 0%)" fill-opacity="1">
|
||||
<use xlink:href="#glyph-0-1" x="199.381465" y="135.050781"/>
|
||||
</g>
|
||||
<g fill="rgb(0%, 0%, 0%)" fill-opacity="1">
|
||||
<use xlink:href="#glyph-0-2" x="205.371436" y="135.050781"/>
|
||||
</g>
|
||||
<g fill="rgb(0%, 0%, 0%)" fill-opacity="1">
|
||||
<use xlink:href="#glyph-0-3" x="209.12115" y="135.050781"/>
|
||||
</g>
|
||||
<g fill="rgb(0%, 0%, 0%)" fill-opacity="1">
|
||||
<use xlink:href="#glyph-0-16" x="215.869267" y="135.050781"/>
|
||||
</g>
|
||||
<g fill="rgb(0%, 0%, 0%)" fill-opacity="1">
|
||||
<use xlink:href="#glyph-0-17" x="219.618981" y="135.050781"/>
|
||||
</g>
|
||||
<g fill="rgb(0%, 0%, 0%)" fill-opacity="1">
|
||||
<use xlink:href="#glyph-0-1" x="230.872826" y="135.050781"/>
|
||||
</g>
|
||||
<g fill="rgb(0%, 0%, 0%)" fill-opacity="1">
|
||||
<use xlink:href="#glyph-0-2" x="236.876798" y="135.050781"/>
|
||||
</g>
|
||||
<g fill="rgb(0%, 0%, 0%)" fill-opacity="1">
|
||||
<use xlink:href="#glyph-0-3" x="240.626511" y="135.050781"/>
|
||||
</g>
|
||||
<g fill="rgb(0%, 0%, 0%)" fill-opacity="1">
|
||||
<use xlink:href="#glyph-0-14" x="247.374629" y="135.050781"/>
|
||||
</g>
|
||||
<g fill="rgb(0%, 0%, 0%)" fill-opacity="1">
|
||||
<use xlink:href="#glyph-0-15" x="251.868817" y="135.050781"/>
|
||||
</g>
|
||||
<path fill="none" stroke-width="1" stroke-linecap="butt" stroke-linejoin="miter" stroke="rgb(0%, 0%, 0%)" stroke-opacity="1" stroke-miterlimit="10" d="M 175.578125 76.304688 C 182.671875 84.441406 191.269531 94.3125 199.101562 103.296875 "/>
|
||||
<path fill-rule="nonzero" fill="rgb(0%, 0%, 0%)" fill-opacity="1" stroke-width="1" stroke-linecap="butt" stroke-linejoin="miter" stroke="rgb(0%, 0%, 0%)" stroke-opacity="1" stroke-miterlimit="10" d="M 201.667969 100.917969 L 205.601562 110.753906 L 196.390625 105.515625 Z M 201.667969 100.917969 "/>
|
||||
<path fill="none" stroke-width="1" stroke-linecap="butt" stroke-linejoin="miter" stroke="rgb(0%, 0%, 0%)" stroke-opacity="1" stroke-miterlimit="10" d="M 137.75 184 L 305.25 184 L 305.25 220 L 137.75 220 Z M 137.75 184 "/>
|
||||
<g fill="rgb(0%, 0%, 0%)" fill-opacity="1">
|
||||
<use xlink:href="#glyph-0-18" x="145.75" y="207.050781"/>
|
||||
</g>
|
||||
<g fill="rgb(0%, 0%, 0%)" fill-opacity="1">
|
||||
<use xlink:href="#glyph-0-19" x="155.496521" y="207.050781"/>
|
||||
</g>
|
||||
<g fill="rgb(0%, 0%, 0%)" fill-opacity="1">
|
||||
<use xlink:href="#glyph-0-20" x="162.244639" y="207.050781"/>
|
||||
</g>
|
||||
<g fill="rgb(0%, 0%, 0%)" fill-opacity="1">
|
||||
<use xlink:href="#glyph-0-21" x="166.752827" y="207.050781"/>
|
||||
</g>
|
||||
<g fill="rgb(0%, 0%, 0%)" fill-opacity="1">
|
||||
<use xlink:href="#glyph-0-22" x="173.500945" y="207.050781"/>
|
||||
</g>
|
||||
<g fill="rgb(0%, 0%, 0%)" fill-opacity="1">
|
||||
<use xlink:href="#glyph-0-5" x="178.753278" y="207.050781"/>
|
||||
</g>
|
||||
<g fill="rgb(0%, 0%, 0%)" fill-opacity="1">
|
||||
<use xlink:href="#glyph-0-1" x="184.74325" y="207.050781"/>
|
||||
</g>
|
||||
<g fill="rgb(0%, 0%, 0%)" fill-opacity="1">
|
||||
<use xlink:href="#glyph-0-6" x="190.747222" y="207.050781"/>
|
||||
</g>
|
||||
<g fill="rgb(0%, 0%, 0%)" fill-opacity="1">
|
||||
<use xlink:href="#glyph-0-2" x="194.496935" y="207.050781"/>
|
||||
</g>
|
||||
<g fill="rgb(0%, 0%, 0%)" fill-opacity="1">
|
||||
<use xlink:href="#glyph-0-10" x="198.246649" y="207.050781"/>
|
||||
</g>
|
||||
<g fill="rgb(0%, 0%, 0%)" fill-opacity="1">
|
||||
<use xlink:href="#glyph-0-3" x="204.994767" y="207.050781"/>
|
||||
</g>
|
||||
<g fill="rgb(0%, 0%, 0%)" fill-opacity="1">
|
||||
<use xlink:href="#glyph-0-9" x="211.756885" y="207.050781"/>
|
||||
</g>
|
||||
<g fill="rgb(0%, 0%, 0%)" fill-opacity="1">
|
||||
<use xlink:href="#glyph-0-23" x="215.49495" y="207.050781"/>
|
||||
</g>
|
||||
<g fill="rgb(0%, 0%, 0%)" fill-opacity="1">
|
||||
<use xlink:href="#glyph-0-10" x="222.243067" y="207.050781"/>
|
||||
</g>
|
||||
<g fill="rgb(0%, 0%, 0%)" fill-opacity="1">
|
||||
<use xlink:href="#glyph-0-24" x="229.005185" y="207.050781"/>
|
||||
</g>
|
||||
<g fill="rgb(0%, 0%, 0%)" fill-opacity="1">
|
||||
<use xlink:href="#glyph-0-10" x="236.497449" y="207.050781"/>
|
||||
</g>
|
||||
<g fill="rgb(0%, 0%, 0%)" fill-opacity="1">
|
||||
<use xlink:href="#glyph-0-17" x="243.245566" y="207.050781"/>
|
||||
</g>
|
||||
<g fill="rgb(0%, 0%, 0%)" fill-opacity="1">
|
||||
<use xlink:href="#glyph-0-13" x="254.499411" y="207.050781"/>
|
||||
</g>
|
||||
<g fill="rgb(0%, 0%, 0%)" fill-opacity="1">
|
||||
<use xlink:href="#glyph-0-6" x="260.503383" y="207.050781"/>
|
||||
</g>
|
||||
<g fill="rgb(0%, 0%, 0%)" fill-opacity="1">
|
||||
<use xlink:href="#glyph-0-25" x="264.253097" y="207.050781"/>
|
||||
</g>
|
||||
<g fill="rgb(0%, 0%, 0%)" fill-opacity="1">
|
||||
<use xlink:href="#glyph-0-2" x="271.001214" y="207.050781"/>
|
||||
</g>
|
||||
<g fill="rgb(0%, 0%, 0%)" fill-opacity="1">
|
||||
<use xlink:href="#glyph-0-3" x="274.750928" y="207.050781"/>
|
||||
</g>
|
||||
<g fill="rgb(0%, 0%, 0%)" fill-opacity="1">
|
||||
<use xlink:href="#glyph-0-26" x="281.499046" y="207.050781"/>
|
||||
</g>
|
||||
<g fill="rgb(0%, 0%, 0%)" fill-opacity="1">
|
||||
<use xlink:href="#glyph-0-14" x="288.247163" y="207.050781"/>
|
||||
</g>
|
||||
<g fill="rgb(0%, 0%, 0%)" fill-opacity="1">
|
||||
<use xlink:href="#glyph-0-15" x="292.755351" y="207.050781"/>
|
||||
</g>
|
||||
<path fill="none" stroke-width="1" stroke-linecap="butt" stroke-linejoin="miter" stroke="rgb(0%, 0%, 0%)" stroke-opacity="1" stroke-miterlimit="10" d="M 221.5 148.304688 C 221.5 155.59375 221.5 164.273438 221.5 172.464844 "/>
|
||||
<path fill-rule="nonzero" fill="rgb(0%, 0%, 0%)" fill-opacity="1" stroke-width="1" stroke-linecap="butt" stroke-linejoin="miter" stroke="rgb(0%, 0%, 0%)" stroke-opacity="1" stroke-miterlimit="10" d="M 225 172.382812 L 221.5 182.382812 L 218 172.382812 Z M 225 172.382812 "/>
|
||||
<path fill-rule="nonzero" fill="rgb(82.743835%, 82.743835%, 82.743835%)" fill-opacity="1" stroke-width="1" stroke-linecap="butt" stroke-linejoin="miter" stroke="rgb(0%, 0%, 0%)" stroke-opacity="1" stroke-miterlimit="10" d="M 323.75 184 L 491.25 184 L 491.25 220 L 323.75 220 Z M 323.75 184 "/>
|
||||
<g fill="rgb(0%, 0%, 0%)" fill-opacity="1">
|
||||
<use xlink:href="#glyph-0-18" x="331.75" y="207.050781"/>
|
||||
</g>
|
||||
<g fill="rgb(0%, 0%, 0%)" fill-opacity="1">
|
||||
<use xlink:href="#glyph-0-19" x="341.496521" y="207.050781"/>
|
||||
</g>
|
||||
<g fill="rgb(0%, 0%, 0%)" fill-opacity="1">
|
||||
<use xlink:href="#glyph-0-20" x="348.244639" y="207.050781"/>
|
||||
</g>
|
||||
<g fill="rgb(0%, 0%, 0%)" fill-opacity="1">
|
||||
<use xlink:href="#glyph-0-21" x="352.752827" y="207.050781"/>
|
||||
</g>
|
||||
<g fill="rgb(0%, 0%, 0%)" fill-opacity="1">
|
||||
<use xlink:href="#glyph-0-22" x="359.500945" y="207.050781"/>
|
||||
</g>
|
||||
<g fill="rgb(0%, 0%, 0%)" fill-opacity="1">
|
||||
<use xlink:href="#glyph-0-5" x="364.753278" y="207.050781"/>
|
||||
</g>
|
||||
<g fill="rgb(0%, 0%, 0%)" fill-opacity="1">
|
||||
<use xlink:href="#glyph-0-1" x="370.74325" y="207.050781"/>
|
||||
</g>
|
||||
<g fill="rgb(0%, 0%, 0%)" fill-opacity="1">
|
||||
<use xlink:href="#glyph-0-6" x="376.747222" y="207.050781"/>
|
||||
</g>
|
||||
<g fill="rgb(0%, 0%, 0%)" fill-opacity="1">
|
||||
<use xlink:href="#glyph-0-2" x="380.496935" y="207.050781"/>
|
||||
</g>
|
||||
<g fill="rgb(0%, 0%, 0%)" fill-opacity="1">
|
||||
<use xlink:href="#glyph-0-10" x="384.246649" y="207.050781"/>
|
||||
</g>
|
||||
<g fill="rgb(0%, 0%, 0%)" fill-opacity="1">
|
||||
<use xlink:href="#glyph-0-3" x="390.994767" y="207.050781"/>
|
||||
</g>
|
||||
<g fill="rgb(0%, 0%, 0%)" fill-opacity="1">
|
||||
<use xlink:href="#glyph-0-9" x="397.756885" y="207.050781"/>
|
||||
</g>
|
||||
<g fill="rgb(0%, 0%, 0%)" fill-opacity="1">
|
||||
<use xlink:href="#glyph-0-23" x="401.49495" y="207.050781"/>
|
||||
</g>
|
||||
<g fill="rgb(0%, 0%, 0%)" fill-opacity="1">
|
||||
<use xlink:href="#glyph-0-10" x="408.243067" y="207.050781"/>
|
||||
</g>
|
||||
<g fill="rgb(0%, 0%, 0%)" fill-opacity="1">
|
||||
<use xlink:href="#glyph-0-24" x="415.005185" y="207.050781"/>
|
||||
</g>
|
||||
<g fill="rgb(0%, 0%, 0%)" fill-opacity="1">
|
||||
<use xlink:href="#glyph-0-10" x="422.497449" y="207.050781"/>
|
||||
</g>
|
||||
<g fill="rgb(0%, 0%, 0%)" fill-opacity="1">
|
||||
<use xlink:href="#glyph-0-17" x="429.245566" y="207.050781"/>
|
||||
</g>
|
||||
<g fill="rgb(0%, 0%, 0%)" fill-opacity="1">
|
||||
<use xlink:href="#glyph-0-13" x="440.499411" y="207.050781"/>
|
||||
</g>
|
||||
<g fill="rgb(0%, 0%, 0%)" fill-opacity="1">
|
||||
<use xlink:href="#glyph-0-6" x="446.503383" y="207.050781"/>
|
||||
</g>
|
||||
<g fill="rgb(0%, 0%, 0%)" fill-opacity="1">
|
||||
<use xlink:href="#glyph-0-25" x="450.253097" y="207.050781"/>
|
||||
</g>
|
||||
<g fill="rgb(0%, 0%, 0%)" fill-opacity="1">
|
||||
<use xlink:href="#glyph-0-2" x="457.001214" y="207.050781"/>
|
||||
</g>
|
||||
<g fill="rgb(0%, 0%, 0%)" fill-opacity="1">
|
||||
<use xlink:href="#glyph-0-3" x="460.750928" y="207.050781"/>
|
||||
</g>
|
||||
<g fill="rgb(0%, 0%, 0%)" fill-opacity="1">
|
||||
<use xlink:href="#glyph-0-26" x="467.499046" y="207.050781"/>
|
||||
</g>
|
||||
<g fill="rgb(0%, 0%, 0%)" fill-opacity="1">
|
||||
<use xlink:href="#glyph-0-14" x="474.247163" y="207.050781"/>
|
||||
</g>
|
||||
<g fill="rgb(0%, 0%, 0%)" fill-opacity="1">
|
||||
<use xlink:href="#glyph-0-15" x="478.755351" y="207.050781"/>
|
||||
</g>
|
||||
<path fill="none" stroke-width="1" stroke-linecap="butt" stroke-linejoin="miter" stroke="rgb(0%, 0%, 0%)" stroke-opacity="1" stroke-miterlimit="10" d="M 343 256 L 428 256 L 428 292 L 343 292 Z M 343 256 "/>
|
||||
<g fill="rgb(0%, 0%, 0%)" fill-opacity="1">
|
||||
<use xlink:href="#glyph-0-0" x="351" y="279.050781"/>
|
||||
</g>
|
||||
<g fill="rgb(0%, 0%, 0%)" fill-opacity="1">
|
||||
<use xlink:href="#glyph-0-1" x="363.756465" y="279.050781"/>
|
||||
</g>
|
||||
<g fill="rgb(0%, 0%, 0%)" fill-opacity="1">
|
||||
<use xlink:href="#glyph-0-2" x="369.746436" y="279.050781"/>
|
||||
</g>
|
||||
<g fill="rgb(0%, 0%, 0%)" fill-opacity="1">
|
||||
<use xlink:href="#glyph-0-3" x="373.49615" y="279.050781"/>
|
||||
</g>
|
||||
<g fill="rgb(0%, 0%, 0%)" fill-opacity="1">
|
||||
<use xlink:href="#glyph-0-9" x="380.244267" y="279.050781"/>
|
||||
</g>
|
||||
<g fill="rgb(0%, 0%, 0%)" fill-opacity="1">
|
||||
<use xlink:href="#glyph-0-26" x="383.996333" y="279.050781"/>
|
||||
</g>
|
||||
<g fill="rgb(0%, 0%, 0%)" fill-opacity="1">
|
||||
<use xlink:href="#glyph-0-10" x="390.74445" y="279.050781"/>
|
||||
</g>
|
||||
<g fill="rgb(0%, 0%, 0%)" fill-opacity="1">
|
||||
<use xlink:href="#glyph-0-10" x="397.506568" y="279.050781"/>
|
||||
</g>
|
||||
<g fill="rgb(0%, 0%, 0%)" fill-opacity="1">
|
||||
<use xlink:href="#glyph-0-23" x="404.254686" y="279.050781"/>
|
||||
</g>
|
||||
<g fill="rgb(0%, 0%, 0%)" fill-opacity="1">
|
||||
<use xlink:href="#glyph-0-14" x="411.002804" y="279.050781"/>
|
||||
</g>
|
||||
<g fill="rgb(0%, 0%, 0%)" fill-opacity="1">
|
||||
<use xlink:href="#glyph-0-15" x="415.496991" y="279.050781"/>
|
||||
</g>
|
||||
<path fill="none" stroke-width="1" stroke-linecap="butt" stroke-linejoin="miter" stroke="rgb(0%, 0%, 0%)" stroke-opacity="1" stroke-miterlimit="10" d="M 402.0625 220.304688 C 399.71875 227.761719 396.914062 236.679688 394.289062 245.035156 "/>
|
||||
<path fill-rule="nonzero" fill="rgb(0%, 0%, 0%)" fill-opacity="1" stroke-width="1" stroke-linecap="butt" stroke-linejoin="miter" stroke="rgb(0%, 0%, 0%)" stroke-opacity="1" stroke-miterlimit="10" d="M 397.667969 245.960938 L 391.328125 254.453125 L 390.988281 243.863281 Z M 397.667969 245.960938 "/>
|
||||
<path fill="none" stroke-width="1" stroke-linecap="butt" stroke-linejoin="miter" stroke="rgb(0%, 0%, 0%)" stroke-opacity="1" stroke-miterlimit="10" d="M 225.75 256 L 303.25 256 L 303.25 292 L 225.75 292 Z M 225.75 256 "/>
|
||||
<g fill="rgb(0%, 0%, 0%)" fill-opacity="1">
|
||||
<use xlink:href="#glyph-0-0" x="233.75" y="279.050781"/>
|
||||
</g>
|
||||
<g fill="rgb(0%, 0%, 0%)" fill-opacity="1">
|
||||
<use xlink:href="#glyph-0-1" x="246.506465" y="279.050781"/>
|
||||
</g>
|
||||
<g fill="rgb(0%, 0%, 0%)" fill-opacity="1">
|
||||
<use xlink:href="#glyph-0-2" x="252.496436" y="279.050781"/>
|
||||
</g>
|
||||
<g fill="rgb(0%, 0%, 0%)" fill-opacity="1">
|
||||
<use xlink:href="#glyph-0-3" x="256.24615" y="279.050781"/>
|
||||
</g>
|
||||
<g fill="rgb(0%, 0%, 0%)" fill-opacity="1">
|
||||
<use xlink:href="#glyph-0-9" x="262.994267" y="279.050781"/>
|
||||
</g>
|
||||
<g fill="rgb(0%, 0%, 0%)" fill-opacity="1">
|
||||
<use xlink:href="#glyph-0-19" x="266.746333" y="279.050781"/>
|
||||
</g>
|
||||
<g fill="rgb(0%, 0%, 0%)" fill-opacity="1">
|
||||
<use xlink:href="#glyph-0-1" x="273.49445" y="279.050781"/>
|
||||
</g>
|
||||
<g fill="rgb(0%, 0%, 0%)" fill-opacity="1">
|
||||
<use xlink:href="#glyph-0-23" x="279.498422" y="279.050781"/>
|
||||
</g>
|
||||
<g fill="rgb(0%, 0%, 0%)" fill-opacity="1">
|
||||
<use xlink:href="#glyph-0-14" x="286.24654" y="279.050781"/>
|
||||
</g>
|
||||
<g fill="rgb(0%, 0%, 0%)" fill-opacity="1">
|
||||
<use xlink:href="#glyph-0-15" x="290.754728" y="279.050781"/>
|
||||
</g>
|
||||
<path fill="none" stroke-width="1" stroke-linecap="butt" stroke-linejoin="miter" stroke="rgb(0%, 0%, 0%)" stroke-opacity="1" stroke-miterlimit="10" d="M 232.128906 220.304688 C 236.917969 228.101562 242.6875 237.492188 248.019531 246.171875 "/>
|
||||
<path fill-rule="nonzero" fill="rgb(0%, 0%, 0%)" fill-opacity="1" stroke-width="1" stroke-linecap="butt" stroke-linejoin="miter" stroke="rgb(0%, 0%, 0%)" stroke-opacity="1" stroke-miterlimit="10" d="M 250.949219 244.253906 L 253.199219 254.605469 L 244.984375 247.917969 Z M 250.949219 244.253906 "/>
|
||||
<path fill="none" stroke-width="1" stroke-linecap="butt" stroke-linejoin="miter" stroke="rgb(0%, 0%, 0%)" stroke-opacity="1" stroke-miterlimit="10" d="M 286.375 328 L 340.625 328 L 340.625 364 L 286.375 364 Z M 286.375 328 "/>
|
||||
<g fill="rgb(0%, 0%, 0%)" fill-opacity="1">
|
||||
<use xlink:href="#glyph-0-27" x="294.375" y="351.050781"/>
|
||||
</g>
|
||||
<g fill="rgb(0%, 0%, 0%)" fill-opacity="1">
|
||||
<use xlink:href="#glyph-0-10" x="302.618901" y="351.050781"/>
|
||||
</g>
|
||||
<g fill="rgb(0%, 0%, 0%)" fill-opacity="1">
|
||||
<use xlink:href="#glyph-0-26" x="309.381019" y="351.050781"/>
|
||||
</g>
|
||||
<g fill="rgb(0%, 0%, 0%)" fill-opacity="1">
|
||||
<use xlink:href="#glyph-0-9" x="316.129137" y="351.050781"/>
|
||||
</g>
|
||||
<g fill="rgb(0%, 0%, 0%)" fill-opacity="1">
|
||||
<use xlink:href="#glyph-0-2" x="319.881202" y="351.050781"/>
|
||||
</g>
|
||||
<g fill="rgb(0%, 0%, 0%)" fill-opacity="1">
|
||||
<use xlink:href="#glyph-0-14" x="323.630916" y="351.050781"/>
|
||||
</g>
|
||||
<g fill="rgb(0%, 0%, 0%)" fill-opacity="1">
|
||||
<use xlink:href="#glyph-0-15" x="328.125104" y="351.050781"/>
|
||||
</g>
|
||||
<path fill="none" stroke-width="1" stroke-linecap="butt" stroke-linejoin="miter" stroke="rgb(0%, 0%, 0%)" stroke-opacity="1" stroke-miterlimit="10" d="M 367.703125 292.304688 C 359.222656 300.546875 348.910156 310.570312 339.570312 319.65625 "/>
|
||||
<path fill-rule="nonzero" fill="rgb(0%, 0%, 0%)" fill-opacity="1" stroke-width="1" stroke-linecap="butt" stroke-linejoin="miter" stroke="rgb(0%, 0%, 0%)" stroke-opacity="1" stroke-miterlimit="10" d="M 342.039062 322.136719 L 332.429688 326.597656 L 337.15625 317.117188 Z M 342.039062 322.136719 "/>
|
||||
<path fill="none" stroke-width="1" stroke-linecap="butt" stroke-linejoin="miter" stroke="rgb(0%, 0%, 0%)" stroke-opacity="1" stroke-miterlimit="10" d="M 276.613281 292.304688 C 282.191406 300.273438 288.929688 309.902344 295.113281 318.734375 "/>
|
||||
<path fill-rule="nonzero" fill="rgb(0%, 0%, 0%)" fill-opacity="1" stroke-width="1" stroke-linecap="butt" stroke-linejoin="miter" stroke="rgb(0%, 0%, 0%)" stroke-opacity="1" stroke-miterlimit="10" d="M 297.792969 316.457031 L 300.660156 326.65625 L 292.058594 320.46875 Z M 297.792969 316.457031 "/>
|
||||
</svg>
|
After Width: | Height: | Size: 56 KiB |
506
4_class_loader/figs/call_graph_obf.svg
Normal file
506
4_class_loader/figs/call_graph_obf.svg
Normal file
|
@ -0,0 +1,506 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="531pt" height="404pt" viewBox="0 0 531 404">
|
||||
<defs>
|
||||
<g>
|
||||
<g id="glyph-0-0">
|
||||
<path d="M 5.734375 0 L 2.140625 -7.796875 L 2.140625 -1.609375 C 2.140625 -1.035156 2.203125 -0.679688 2.328125 -0.546875 C 2.492188 -0.347656 2.757812 -0.25 3.125 -0.25 L 3.453125 -0.25 L 3.453125 0 L 0.234375 0 L 0.234375 -0.25 L 0.5625 -0.25 C 0.957031 -0.25 1.234375 -0.367188 1.390625 -0.609375 C 1.492188 -0.753906 1.546875 -1.085938 1.546875 -1.609375 L 1.546875 -7.65625 C 1.546875 -8.070312 1.5 -8.367188 1.40625 -8.546875 C 1.34375 -8.679688 1.222656 -8.789062 1.046875 -8.875 C 0.878906 -8.96875 0.609375 -9.015625 0.234375 -9.015625 L 0.234375 -9.265625 L 2.859375 -9.265625 L 6.21875 -2.015625 L 9.53125 -9.265625 L 12.15625 -9.265625 L 12.15625 -9.015625 L 11.828125 -9.015625 C 11.429688 -9.015625 11.15625 -8.894531 11 -8.65625 C 10.894531 -8.507812 10.84375 -8.175781 10.84375 -7.65625 L 10.84375 -1.609375 C 10.84375 -1.035156 10.90625 -0.679688 11.03125 -0.546875 C 11.195312 -0.347656 11.460938 -0.25 11.828125 -0.25 L 12.15625 -0.25 L 12.15625 0 L 8.21875 0 L 8.21875 -0.25 L 8.546875 -0.25 C 8.941406 -0.25 9.21875 -0.367188 9.375 -0.609375 C 9.476562 -0.753906 9.53125 -1.085938 9.53125 -1.609375 L 9.53125 -7.796875 L 5.953125 0 Z M 5.734375 0 "/>
|
||||
</g>
|
||||
<g id="glyph-0-1">
|
||||
<path d="M 3.984375 -0.90625 C 3.335938 -0.40625 2.9375 -0.117188 2.78125 -0.046875 C 2.53125 0.0664062 2.265625 0.125 1.984375 0.125 C 1.554688 0.125 1.203125 -0.0195312 0.921875 -0.3125 C 0.640625 -0.613281 0.5 -1.003906 0.5 -1.484375 C 0.5 -1.785156 0.566406 -2.050781 0.703125 -2.28125 C 0.890625 -2.582031 1.210938 -2.867188 1.671875 -3.140625 C 2.140625 -3.421875 2.910156 -3.757812 3.984375 -4.15625 L 3.984375 -4.390625 C 3.984375 -5.015625 3.882812 -5.441406 3.6875 -5.671875 C 3.488281 -5.910156 3.203125 -6.03125 2.828125 -6.03125 C 2.535156 -6.03125 2.304688 -5.953125 2.140625 -5.796875 C 1.960938 -5.640625 1.875 -5.460938 1.875 -5.265625 L 1.890625 -4.875 C 1.890625 -4.65625 1.835938 -4.488281 1.734375 -4.375 C 1.628906 -4.269531 1.488281 -4.21875 1.3125 -4.21875 C 1.144531 -4.21875 1.003906 -4.273438 0.890625 -4.390625 C 0.785156 -4.503906 0.734375 -4.664062 0.734375 -4.875 C 0.734375 -5.269531 0.929688 -5.628906 1.328125 -5.953125 C 1.734375 -6.285156 2.300781 -6.453125 3.03125 -6.453125 C 3.582031 -6.453125 4.035156 -6.359375 4.390625 -6.171875 C 4.660156 -6.023438 4.859375 -5.800781 4.984375 -5.5 C 5.066406 -5.300781 5.109375 -4.898438 5.109375 -4.296875 L 5.109375 -2.171875 C 5.109375 -1.578125 5.117188 -1.210938 5.140625 -1.078125 C 5.171875 -0.941406 5.210938 -0.847656 5.265625 -0.796875 C 5.316406 -0.753906 5.375 -0.734375 5.4375 -0.734375 C 5.507812 -0.734375 5.578125 -0.75 5.640625 -0.78125 C 5.734375 -0.84375 5.914062 -1.007812 6.1875 -1.28125 L 6.1875 -0.90625 C 5.675781 -0.21875 5.1875 0.125 4.71875 0.125 C 4.5 0.125 4.320312 0.046875 4.1875 -0.109375 C 4.0625 -0.265625 3.992188 -0.53125 3.984375 -0.90625 Z M 3.984375 -1.34375 L 3.984375 -3.734375 C 3.296875 -3.460938 2.851562 -3.269531 2.65625 -3.15625 C 2.289062 -2.945312 2.03125 -2.734375 1.875 -2.515625 C 1.71875 -2.296875 1.640625 -2.0625 1.640625 -1.8125 C 1.640625 -1.476562 1.738281 -1.203125 1.9375 -0.984375 C 2.132812 -0.765625 2.363281 -0.65625 2.625 -0.65625 C 2.96875 -0.65625 3.421875 -0.882812 3.984375 -1.34375 Z M 3.984375 -1.34375 "/>
|
||||
</g>
|
||||
<g id="glyph-0-2">
|
||||
<path d="M 2.03125 -9.71875 C 2.21875 -9.71875 2.378906 -9.648438 2.515625 -9.515625 C 2.648438 -9.378906 2.71875 -9.21875 2.71875 -9.03125 C 2.71875 -8.84375 2.648438 -8.675781 2.515625 -8.53125 C 2.378906 -8.394531 2.21875 -8.328125 2.03125 -8.328125 C 1.84375 -8.328125 1.675781 -8.394531 1.53125 -8.53125 C 1.394531 -8.675781 1.328125 -8.84375 1.328125 -9.03125 C 1.328125 -9.21875 1.394531 -9.378906 1.53125 -9.515625 C 1.664062 -9.648438 1.832031 -9.71875 2.03125 -9.71875 Z M 2.59375 -6.453125 L 2.59375 -1.421875 C 2.59375 -1.023438 2.617188 -0.757812 2.671875 -0.625 C 2.734375 -0.5 2.820312 -0.40625 2.9375 -0.34375 C 3.050781 -0.28125 3.253906 -0.25 3.546875 -0.25 L 3.546875 0 L 0.5 0 L 0.5 -0.25 C 0.8125 -0.25 1.019531 -0.273438 1.125 -0.328125 C 1.226562 -0.390625 1.3125 -0.488281 1.375 -0.625 C 1.4375 -0.757812 1.46875 -1.023438 1.46875 -1.421875 L 1.46875 -3.828125 C 1.46875 -4.503906 1.445312 -4.941406 1.40625 -5.140625 C 1.375 -5.285156 1.320312 -5.382812 1.25 -5.4375 C 1.1875 -5.5 1.09375 -5.53125 0.96875 -5.53125 C 0.84375 -5.53125 0.6875 -5.5 0.5 -5.4375 L 0.40625 -5.6875 L 2.296875 -6.453125 Z M 2.59375 -6.453125 "/>
|
||||
</g>
|
||||
<g id="glyph-0-3">
|
||||
<path d="M 2.265625 -5.125 C 2.992188 -6.007812 3.691406 -6.453125 4.359375 -6.453125 C 4.703125 -6.453125 4.992188 -6.363281 5.234375 -6.1875 C 5.484375 -6.019531 5.679688 -5.738281 5.828125 -5.34375 C 5.929688 -5.070312 5.984375 -4.65625 5.984375 -4.09375 L 5.984375 -1.421875 C 5.984375 -1.023438 6.015625 -0.753906 6.078125 -0.609375 C 6.128906 -0.492188 6.207031 -0.40625 6.3125 -0.34375 C 6.425781 -0.28125 6.632812 -0.25 6.9375 -0.25 L 6.9375 0 L 3.84375 0 L 3.84375 -0.25 L 3.96875 -0.25 C 4.257812 -0.25 4.460938 -0.289062 4.578125 -0.375 C 4.703125 -0.46875 4.785156 -0.597656 4.828125 -0.765625 C 4.847656 -0.835938 4.859375 -1.054688 4.859375 -1.421875 L 4.859375 -3.984375 C 4.859375 -4.546875 4.78125 -4.957031 4.625 -5.21875 C 4.476562 -5.476562 4.234375 -5.609375 3.890625 -5.609375 C 3.335938 -5.609375 2.796875 -5.3125 2.265625 -4.71875 L 2.265625 -1.421875 C 2.265625 -0.992188 2.289062 -0.726562 2.34375 -0.625 C 2.40625 -0.5 2.488281 -0.40625 2.59375 -0.34375 C 2.707031 -0.28125 2.9375 -0.25 3.28125 -0.25 L 3.28125 0 L 0.1875 0 L 0.1875 -0.25 L 0.328125 -0.25 C 0.640625 -0.25 0.851562 -0.328125 0.96875 -0.484375 C 1.082031 -0.648438 1.140625 -0.960938 1.140625 -1.421875 L 1.140625 -3.734375 C 1.140625 -4.492188 1.117188 -4.953125 1.078125 -5.109375 C 1.046875 -5.273438 0.992188 -5.382812 0.921875 -5.4375 C 0.859375 -5.5 0.765625 -5.53125 0.640625 -5.53125 C 0.515625 -5.53125 0.363281 -5.5 0.1875 -5.4375 L 0.078125 -5.6875 L 1.96875 -6.453125 L 2.265625 -6.453125 Z M 2.265625 -5.125 "/>
|
||||
</g>
|
||||
<g id="glyph-0-4">
|
||||
<path d="M 6.40625 -3.109375 L 2.8125 -3.109375 L 2.1875 -1.640625 C 2.03125 -1.273438 1.953125 -1.003906 1.953125 -0.828125 C 1.953125 -0.691406 2.019531 -0.566406 2.15625 -0.453125 C 2.289062 -0.347656 2.582031 -0.28125 3.03125 -0.25 L 3.03125 0 L 0.109375 0 L 0.109375 -0.25 C 0.492188 -0.320312 0.742188 -0.410156 0.859375 -0.515625 C 1.085938 -0.734375 1.347656 -1.179688 1.640625 -1.859375 L 4.890625 -9.484375 L 5.140625 -9.484375 L 8.359375 -1.765625 C 8.617188 -1.148438 8.851562 -0.75 9.0625 -0.5625 C 9.28125 -0.375 9.578125 -0.269531 9.953125 -0.25 L 9.953125 0 L 6.296875 0 L 6.296875 -0.25 C 6.660156 -0.269531 6.90625 -0.332031 7.03125 -0.4375 C 7.164062 -0.539062 7.234375 -0.671875 7.234375 -0.828125 C 7.234375 -1.023438 7.144531 -1.335938 6.96875 -1.765625 Z M 6.21875 -3.609375 L 4.640625 -7.359375 L 3.03125 -3.609375 Z M 6.21875 -3.609375 "/>
|
||||
</g>
|
||||
<g id="glyph-0-5">
|
||||
<path d="M 5.75 -2.375 C 5.582031 -1.550781 5.253906 -0.914062 4.765625 -0.46875 C 4.273438 -0.03125 3.726562 0.1875 3.125 0.1875 C 2.414062 0.1875 1.796875 -0.109375 1.265625 -0.703125 C 0.742188 -1.296875 0.484375 -2.101562 0.484375 -3.125 C 0.484375 -4.101562 0.773438 -4.898438 1.359375 -5.515625 C 1.941406 -6.140625 2.644531 -6.453125 3.46875 -6.453125 C 4.082031 -6.453125 4.585938 -6.285156 4.984375 -5.953125 C 5.378906 -5.628906 5.578125 -5.289062 5.578125 -4.9375 C 5.578125 -4.769531 5.519531 -4.628906 5.40625 -4.515625 C 5.300781 -4.410156 5.144531 -4.359375 4.9375 -4.359375 C 4.675781 -4.359375 4.472656 -4.445312 4.328125 -4.625 C 4.253906 -4.71875 4.203125 -4.898438 4.171875 -5.171875 C 4.148438 -5.441406 4.0625 -5.644531 3.90625 -5.78125 C 3.75 -5.914062 3.523438 -5.984375 3.234375 -5.984375 C 2.785156 -5.984375 2.421875 -5.816406 2.140625 -5.484375 C 1.773438 -5.035156 1.59375 -4.445312 1.59375 -3.71875 C 1.59375 -2.96875 1.773438 -2.304688 2.140625 -1.734375 C 2.503906 -1.160156 3 -0.875 3.625 -0.875 C 4.070312 -0.875 4.472656 -1.023438 4.828125 -1.328125 C 5.078125 -1.535156 5.320312 -1.914062 5.5625 -2.46875 Z M 5.75 -2.375 "/>
|
||||
</g>
|
||||
<g id="glyph-0-6">
|
||||
<path d="M 2.25 -8.3125 L 2.25 -6.265625 L 3.71875 -6.265625 L 3.71875 -5.78125 L 2.25 -5.78125 L 2.25 -1.71875 C 2.25 -1.3125 2.304688 -1.035156 2.421875 -0.890625 C 2.546875 -0.753906 2.695312 -0.6875 2.875 -0.6875 C 3.03125 -0.6875 3.175781 -0.734375 3.3125 -0.828125 C 3.457031 -0.921875 3.566406 -1.0625 3.640625 -1.25 L 3.90625 -1.25 C 3.75 -0.800781 3.523438 -0.460938 3.234375 -0.234375 C 2.941406 -0.00390625 2.640625 0.109375 2.328125 0.109375 C 2.117188 0.109375 1.914062 0.0507812 1.71875 -0.0625 C 1.519531 -0.1875 1.367188 -0.351562 1.265625 -0.5625 C 1.171875 -0.78125 1.125 -1.117188 1.125 -1.578125 L 1.125 -5.78125 L 0.140625 -5.78125 L 0.140625 -6.015625 C 0.390625 -6.109375 0.644531 -6.273438 0.90625 -6.515625 C 1.164062 -6.753906 1.398438 -7.039062 1.609375 -7.375 C 1.710938 -7.539062 1.859375 -7.851562 2.046875 -8.3125 Z M 2.25 -8.3125 "/>
|
||||
</g>
|
||||
<g id="glyph-0-7">
|
||||
<path d="M 0.109375 -6.265625 L 3.0625 -6.265625 L 3.0625 -6.015625 L 2.875 -6.015625 C 2.695312 -6.015625 2.5625 -5.96875 2.46875 -5.875 C 2.375 -5.789062 2.328125 -5.675781 2.328125 -5.53125 C 2.328125 -5.375 2.375 -5.1875 2.46875 -4.96875 L 3.921875 -1.5 L 5.390625 -5.09375 C 5.492188 -5.34375 5.546875 -5.535156 5.546875 -5.671875 C 5.546875 -5.734375 5.523438 -5.785156 5.484375 -5.828125 C 5.441406 -5.898438 5.378906 -5.945312 5.296875 -5.96875 C 5.222656 -6 5.066406 -6.015625 4.828125 -6.015625 L 4.828125 -6.265625 L 6.875 -6.265625 L 6.875 -6.015625 C 6.632812 -5.992188 6.46875 -5.941406 6.375 -5.859375 C 6.21875 -5.722656 6.078125 -5.5 5.953125 -5.1875 L 3.71875 0.1875 L 3.453125 0.1875 L 1.203125 -5.09375 C 1.109375 -5.34375 1.015625 -5.519531 0.921875 -5.625 C 0.828125 -5.726562 0.710938 -5.816406 0.578125 -5.890625 C 0.492188 -5.929688 0.335938 -5.972656 0.109375 -6.015625 Z M 0.109375 -6.265625 "/>
|
||||
</g>
|
||||
<g id="glyph-0-8">
|
||||
<path d="M 0.078125 -6.265625 L 3 -6.265625 L 3 -6.015625 L 2.859375 -6.015625 C 2.648438 -6.015625 2.492188 -5.96875 2.390625 -5.875 C 2.296875 -5.789062 2.25 -5.679688 2.25 -5.546875 C 2.25 -5.367188 2.320312 -5.125 2.46875 -4.8125 L 4 -1.640625 L 5.390625 -5.109375 C 5.472656 -5.296875 5.515625 -5.476562 5.515625 -5.65625 C 5.515625 -5.738281 5.5 -5.800781 5.46875 -5.84375 C 5.425781 -5.894531 5.363281 -5.9375 5.28125 -5.96875 C 5.207031 -6 5.070312 -6.015625 4.875 -6.015625 L 4.875 -6.265625 L 6.921875 -6.265625 L 6.921875 -6.015625 C 6.753906 -5.992188 6.625 -5.953125 6.53125 -5.890625 C 6.4375 -5.835938 6.335938 -5.738281 6.234375 -5.59375 C 6.191406 -5.53125 6.113281 -5.351562 6 -5.0625 L 3.453125 1.1875 C 3.203125 1.789062 2.875 2.242188 2.46875 2.546875 C 2.070312 2.859375 1.691406 3.015625 1.328125 3.015625 C 1.054688 3.015625 0.832031 2.9375 0.65625 2.78125 C 0.488281 2.632812 0.40625 2.457031 0.40625 2.25 C 0.40625 2.0625 0.46875 1.910156 0.59375 1.796875 C 0.71875 1.679688 0.890625 1.625 1.109375 1.625 C 1.253906 1.625 1.457031 1.671875 1.71875 1.765625 C 1.90625 1.835938 2.019531 1.875 2.0625 1.875 C 2.195312 1.875 2.34375 1.800781 2.5 1.65625 C 2.664062 1.519531 2.832031 1.25 3 0.84375 L 3.453125 -0.25 L 1.203125 -4.96875 C 1.128906 -5.113281 1.019531 -5.289062 0.875 -5.5 C 0.757812 -5.65625 0.664062 -5.757812 0.59375 -5.8125 C 0.488281 -5.882812 0.316406 -5.953125 0.078125 -6.015625 Z M 0.078125 -6.265625 "/>
|
||||
</g>
|
||||
<g id="glyph-0-9">
|
||||
<path d="M 1.75 -1.328125 C 1.96875 -1.328125 2.148438 -1.25 2.296875 -1.09375 C 2.441406 -0.945312 2.515625 -0.769531 2.515625 -0.5625 C 2.515625 -0.351562 2.4375 -0.175781 2.28125 -0.03125 C 2.132812 0.113281 1.957031 0.1875 1.75 0.1875 C 1.539062 0.1875 1.359375 0.113281 1.203125 -0.03125 C 1.054688 -0.175781 0.984375 -0.351562 0.984375 -0.5625 C 0.984375 -0.78125 1.054688 -0.960938 1.203125 -1.109375 C 1.359375 -1.253906 1.539062 -1.328125 1.75 -1.328125 Z M 1.75 -1.328125 "/>
|
||||
</g>
|
||||
<g id="glyph-0-10">
|
||||
<path d="M 3.5 -6.453125 C 4.445312 -6.453125 5.207031 -6.085938 5.78125 -5.359375 C 6.269531 -4.742188 6.515625 -4.039062 6.515625 -3.25 C 6.515625 -2.6875 6.378906 -2.117188 6.109375 -1.546875 C 5.835938 -0.972656 5.46875 -0.539062 5 -0.25 C 4.53125 0.0390625 4.003906 0.1875 3.421875 0.1875 C 2.484375 0.1875 1.734375 -0.1875 1.171875 -0.9375 C 0.703125 -1.570312 0.46875 -2.28125 0.46875 -3.0625 C 0.46875 -3.644531 0.609375 -4.21875 0.890625 -4.78125 C 1.179688 -5.351562 1.554688 -5.773438 2.015625 -6.046875 C 2.484375 -6.316406 2.976562 -6.453125 3.5 -6.453125 Z M 3.28125 -6 C 3.039062 -6 2.796875 -5.925781 2.546875 -5.78125 C 2.304688 -5.644531 2.113281 -5.394531 1.96875 -5.03125 C 1.820312 -4.664062 1.75 -4.203125 1.75 -3.640625 C 1.75 -2.734375 1.925781 -1.945312 2.28125 -1.28125 C 2.644531 -0.625 3.125 -0.296875 3.71875 -0.296875 C 4.15625 -0.296875 4.519531 -0.476562 4.8125 -0.84375 C 5.101562 -1.207031 5.25 -1.832031 5.25 -2.71875 C 5.25 -3.832031 5.007812 -4.707031 4.53125 -5.34375 C 4.207031 -5.78125 3.789062 -6 3.28125 -6 Z M 3.28125 -6 "/>
|
||||
</g>
|
||||
<g id="glyph-0-11">
|
||||
<path d="M 8.421875 -9.484375 L 8.640625 -6.328125 L 8.421875 -6.328125 C 8.140625 -7.273438 7.738281 -7.953125 7.21875 -8.359375 C 6.695312 -8.773438 6.066406 -8.984375 5.328125 -8.984375 C 4.710938 -8.984375 4.15625 -8.828125 3.65625 -8.515625 C 3.164062 -8.203125 2.773438 -7.703125 2.484375 -7.015625 C 2.203125 -6.335938 2.0625 -5.492188 2.0625 -4.484375 C 2.0625 -3.640625 2.195312 -2.910156 2.46875 -2.296875 C 2.738281 -1.679688 3.140625 -1.207031 3.671875 -0.875 C 4.210938 -0.550781 4.832031 -0.390625 5.53125 -0.390625 C 6.132812 -0.390625 6.664062 -0.515625 7.125 -0.765625 C 7.582031 -1.023438 8.085938 -1.539062 8.640625 -2.3125 L 8.859375 -2.171875 C 8.390625 -1.347656 7.84375 -0.742188 7.21875 -0.359375 C 6.601562 0.0234375 5.867188 0.21875 5.015625 0.21875 C 3.484375 0.21875 2.296875 -0.351562 1.453125 -1.5 C 0.816406 -2.34375 0.5 -3.335938 0.5 -4.484375 C 0.5 -5.410156 0.707031 -6.257812 1.125 -7.03125 C 1.539062 -7.8125 2.113281 -8.414062 2.84375 -8.84375 C 3.570312 -9.269531 4.363281 -9.484375 5.21875 -9.484375 C 5.894531 -9.484375 6.554688 -9.316406 7.203125 -8.984375 C 7.398438 -8.890625 7.535156 -8.84375 7.609375 -8.84375 C 7.734375 -8.84375 7.84375 -8.882812 7.9375 -8.96875 C 8.050781 -9.09375 8.132812 -9.265625 8.1875 -9.484375 Z M 8.421875 -9.484375 "/>
|
||||
</g>
|
||||
<g id="glyph-0-12">
|
||||
<path d="M 2.265625 -6.453125 L 2.265625 -5.03125 C 2.796875 -5.976562 3.335938 -6.453125 3.890625 -6.453125 C 4.140625 -6.453125 4.34375 -6.375 4.5 -6.21875 C 4.664062 -6.0625 4.75 -5.882812 4.75 -5.6875 C 4.75 -5.507812 4.6875 -5.359375 4.5625 -5.234375 C 4.445312 -5.109375 4.3125 -5.046875 4.15625 -5.046875 C 3.988281 -5.046875 3.804688 -5.125 3.609375 -5.28125 C 3.410156 -5.445312 3.265625 -5.53125 3.171875 -5.53125 C 3.085938 -5.53125 3 -5.484375 2.90625 -5.390625 C 2.695312 -5.203125 2.484375 -4.894531 2.265625 -4.46875 L 2.265625 -1.46875 C 2.265625 -1.113281 2.3125 -0.847656 2.40625 -0.671875 C 2.457031 -0.554688 2.554688 -0.457031 2.703125 -0.375 C 2.859375 -0.289062 3.078125 -0.25 3.359375 -0.25 L 3.359375 0 L 0.15625 0 L 0.15625 -0.25 C 0.476562 -0.25 0.71875 -0.296875 0.875 -0.390625 C 0.988281 -0.460938 1.066406 -0.582031 1.109375 -0.75 C 1.128906 -0.820312 1.140625 -1.039062 1.140625 -1.40625 L 1.140625 -3.828125 C 1.140625 -4.554688 1.125 -4.988281 1.09375 -5.125 C 1.0625 -5.269531 1.003906 -5.375 0.921875 -5.4375 C 0.847656 -5.5 0.753906 -5.53125 0.640625 -5.53125 C 0.492188 -5.53125 0.332031 -5.5 0.15625 -5.4375 L 0.09375 -5.6875 L 1.984375 -6.453125 Z M 2.265625 -6.453125 "/>
|
||||
</g>
|
||||
<g id="glyph-0-13">
|
||||
<path d="M 1.484375 -3.90625 C 1.484375 -2.976562 1.710938 -2.25 2.171875 -1.71875 C 2.617188 -1.1875 3.15625 -0.921875 3.78125 -0.921875 C 4.1875 -0.921875 4.539062 -1.03125 4.84375 -1.25 C 5.144531 -1.476562 5.398438 -1.867188 5.609375 -2.421875 L 5.8125 -2.28125 C 5.71875 -1.65625 5.441406 -1.085938 4.984375 -0.578125 C 4.523438 -0.0664062 3.945312 0.1875 3.25 0.1875 C 2.5 0.1875 1.851562 -0.101562 1.3125 -0.6875 C 0.78125 -1.269531 0.515625 -2.054688 0.515625 -3.046875 C 0.515625 -4.117188 0.789062 -4.953125 1.34375 -5.546875 C 1.894531 -6.148438 2.582031 -6.453125 3.40625 -6.453125 C 4.113281 -6.453125 4.691406 -6.21875 5.140625 -5.75 C 5.585938 -5.289062 5.8125 -4.675781 5.8125 -3.90625 Z M 1.484375 -4.296875 L 4.390625 -4.296875 C 4.367188 -4.703125 4.320312 -4.984375 4.25 -5.140625 C 4.132812 -5.398438 3.960938 -5.601562 3.734375 -5.75 C 3.503906 -5.894531 3.269531 -5.96875 3.03125 -5.96875 C 2.65625 -5.96875 2.316406 -5.820312 2.015625 -5.53125 C 1.710938 -5.238281 1.535156 -4.828125 1.484375 -4.296875 Z M 1.484375 -4.296875 "/>
|
||||
</g>
|
||||
<g id="glyph-0-14">
|
||||
<path d="M 4.34375 2.734375 L 4.34375 3 C 3.65625 2.644531 3.082031 2.238281 2.625 1.78125 C 1.96875 1.113281 1.460938 0.332031 1.109375 -0.5625 C 0.753906 -1.457031 0.578125 -2.390625 0.578125 -3.359375 C 0.578125 -4.765625 0.925781 -6.050781 1.625 -7.21875 C 2.320312 -8.382812 3.226562 -9.21875 4.34375 -9.71875 L 4.34375 -9.4375 C 3.78125 -9.125 3.316406 -8.695312 2.953125 -8.15625 C 2.597656 -7.625 2.332031 -6.941406 2.15625 -6.109375 C 1.976562 -5.285156 1.890625 -4.425781 1.890625 -3.53125 C 1.890625 -2.5625 1.96875 -1.675781 2.125 -0.875 C 2.238281 -0.25 2.378906 0.25 2.546875 0.625 C 2.710938 1.007812 2.9375 1.378906 3.21875 1.734375 C 3.507812 2.085938 3.882812 2.421875 4.34375 2.734375 Z M 4.34375 2.734375 "/>
|
||||
</g>
|
||||
<g id="glyph-0-15">
|
||||
<path d="M 0.3125 -9.4375 L 0.3125 -9.71875 C 1.007812 -9.375 1.585938 -8.972656 2.046875 -8.515625 C 2.691406 -7.847656 3.191406 -7.066406 3.546875 -6.171875 C 3.910156 -5.273438 4.09375 -4.34375 4.09375 -3.375 C 4.09375 -1.957031 3.742188 -0.664062 3.046875 0.5 C 2.347656 1.664062 1.4375 2.5 0.3125 3 L 0.3125 2.734375 C 0.875 2.421875 1.335938 1.992188 1.703125 1.453125 C 2.066406 0.921875 2.332031 0.242188 2.5 -0.578125 C 2.675781 -1.398438 2.765625 -2.265625 2.765625 -3.171875 C 2.765625 -4.140625 2.691406 -5.023438 2.546875 -5.828125 C 2.429688 -6.453125 2.285156 -6.953125 2.109375 -7.328125 C 1.941406 -7.710938 1.71875 -8.078125 1.4375 -8.421875 C 1.15625 -8.773438 0.78125 -9.113281 0.3125 -9.4375 Z M 0.3125 -9.4375 "/>
|
||||
</g>
|
||||
<g id="glyph-0-16">
|
||||
<path d="M 3.921875 -9.71875 L 0.5625 0.1875 L 0.015625 0.1875 L 3.375 -9.71875 Z M 3.921875 -9.71875 "/>
|
||||
</g>
|
||||
<g id="glyph-0-17">
|
||||
<path d="M 2.296875 -5.109375 C 2.753906 -5.566406 3.023438 -5.832031 3.109375 -5.90625 C 3.304688 -6.070312 3.523438 -6.203125 3.765625 -6.296875 C 4.003906 -6.398438 4.238281 -6.453125 4.46875 -6.453125 C 4.863281 -6.453125 5.203125 -6.335938 5.484375 -6.109375 C 5.765625 -5.878906 5.953125 -5.546875 6.046875 -5.109375 C 6.515625 -5.660156 6.910156 -6.019531 7.234375 -6.1875 C 7.554688 -6.363281 7.890625 -6.453125 8.234375 -6.453125 C 8.566406 -6.453125 8.863281 -6.363281 9.125 -6.1875 C 9.382812 -6.019531 9.585938 -5.742188 9.734375 -5.359375 C 9.835938 -5.085938 9.890625 -4.671875 9.890625 -4.109375 L 9.890625 -1.421875 C 9.890625 -1.023438 9.914062 -0.753906 9.96875 -0.609375 C 10.019531 -0.503906 10.101562 -0.414062 10.21875 -0.34375 C 10.34375 -0.28125 10.546875 -0.25 10.828125 -0.25 L 10.828125 0 L 7.734375 0 L 7.734375 -0.25 L 7.875 -0.25 C 8.132812 -0.25 8.34375 -0.300781 8.5 -0.40625 C 8.601562 -0.476562 8.675781 -0.59375 8.71875 -0.75 C 8.738281 -0.832031 8.75 -1.054688 8.75 -1.421875 L 8.75 -4.109375 C 8.75 -4.617188 8.6875 -4.976562 8.5625 -5.1875 C 8.382812 -5.476562 8.101562 -5.625 7.71875 -5.625 C 7.46875 -5.625 7.222656 -5.5625 6.984375 -5.4375 C 6.742188 -5.320312 6.445312 -5.097656 6.09375 -4.765625 L 6.078125 -4.703125 L 6.09375 -4.40625 L 6.09375 -1.421875 C 6.09375 -0.984375 6.113281 -0.710938 6.15625 -0.609375 C 6.207031 -0.503906 6.300781 -0.414062 6.4375 -0.34375 C 6.570312 -0.28125 6.796875 -0.25 7.109375 -0.25 L 7.109375 0 L 3.953125 0 L 3.953125 -0.25 C 4.296875 -0.25 4.53125 -0.289062 4.65625 -0.375 C 4.789062 -0.457031 4.882812 -0.578125 4.9375 -0.734375 C 4.957031 -0.816406 4.96875 -1.046875 4.96875 -1.421875 L 4.96875 -4.109375 C 4.96875 -4.617188 4.894531 -4.984375 4.75 -5.203125 C 4.539062 -5.492188 4.257812 -5.640625 3.90625 -5.640625 C 3.65625 -5.640625 3.410156 -5.578125 3.171875 -5.453125 C 2.796875 -5.242188 2.503906 -5.015625 2.296875 -4.765625 L 2.296875 -1.421875 C 2.296875 -1.003906 2.320312 -0.734375 2.375 -0.609375 C 2.4375 -0.492188 2.519531 -0.40625 2.625 -0.34375 C 2.738281 -0.28125 2.96875 -0.25 3.3125 -0.25 L 3.3125 0 L 0.21875 0 L 0.21875 -0.25 C 0.507812 -0.25 0.707031 -0.28125 0.8125 -0.34375 C 0.925781 -0.40625 1.015625 -0.5 1.078125 -0.625 C 1.140625 -0.757812 1.171875 -1.023438 1.171875 -1.421875 L 1.171875 -3.8125 C 1.171875 -4.5 1.148438 -4.941406 1.109375 -5.140625 C 1.078125 -5.285156 1.023438 -5.382812 0.953125 -5.4375 C 0.890625 -5.5 0.796875 -5.53125 0.671875 -5.53125 C 0.546875 -5.53125 0.394531 -5.5 0.21875 -5.4375 L 0.109375 -5.6875 L 2 -6.453125 L 2.296875 -6.453125 Z M 2.296875 -5.109375 "/>
|
||||
</g>
|
||||
<g id="glyph-0-18">
|
||||
<path d="M 5.125 -9.484375 C 6.320312 -9.484375 7.363281 -9.023438 8.25 -8.109375 C 9.132812 -7.191406 9.578125 -6.050781 9.578125 -4.6875 C 9.578125 -3.28125 9.128906 -2.109375 8.234375 -1.171875 C 7.347656 -0.242188 6.273438 0.21875 5.015625 0.21875 C 3.734375 0.21875 2.660156 -0.234375 1.796875 -1.140625 C 0.929688 -2.054688 0.5 -3.234375 0.5 -4.671875 C 0.5 -6.140625 1 -7.335938 2 -8.265625 C 2.863281 -9.078125 3.90625 -9.484375 5.125 -9.484375 Z M 4.984375 -8.984375 C 4.160156 -8.984375 3.5 -8.675781 3 -8.0625 C 2.375 -7.289062 2.0625 -6.171875 2.0625 -4.703125 C 2.0625 -3.179688 2.382812 -2.015625 3.03125 -1.203125 C 3.53125 -0.585938 4.1875 -0.28125 5 -0.28125 C 5.863281 -0.28125 6.578125 -0.617188 7.140625 -1.296875 C 7.710938 -1.972656 8 -3.039062 8 -4.5 C 8 -6.09375 7.6875 -7.273438 7.0625 -8.046875 C 6.5625 -8.671875 5.867188 -8.984375 4.984375 -8.984375 Z M 4.984375 -8.984375 "/>
|
||||
</g>
|
||||
<g id="glyph-0-19">
|
||||
<path d="M 2.15625 -5.1875 C 2.757812 -6.03125 3.410156 -6.453125 4.109375 -6.453125 C 4.753906 -6.453125 5.316406 -6.175781 5.796875 -5.625 C 6.273438 -5.070312 6.515625 -4.320312 6.515625 -3.375 C 6.515625 -2.257812 6.144531 -1.363281 5.40625 -0.6875 C 4.769531 -0.101562 4.0625 0.1875 3.28125 0.1875 C 2.914062 0.1875 2.546875 0.125 2.171875 0 C 1.796875 -0.132812 1.414062 -0.335938 1.03125 -0.609375 L 1.03125 -7.09375 C 1.03125 -7.800781 1.007812 -8.234375 0.96875 -8.390625 C 0.9375 -8.554688 0.882812 -8.671875 0.8125 -8.734375 C 0.738281 -8.796875 0.648438 -8.828125 0.546875 -8.828125 C 0.410156 -8.828125 0.25 -8.789062 0.0625 -8.71875 L -0.03125 -8.953125 L 1.84375 -9.71875 L 2.15625 -9.71875 Z M 2.15625 -4.75 L 2.15625 -1 C 2.382812 -0.769531 2.625 -0.597656 2.875 -0.484375 C 3.125 -0.367188 3.378906 -0.3125 3.640625 -0.3125 C 4.054688 -0.3125 4.441406 -0.535156 4.796875 -0.984375 C 5.148438 -1.441406 5.328125 -2.109375 5.328125 -2.984375 C 5.328125 -3.785156 5.148438 -4.398438 4.796875 -4.828125 C 4.441406 -5.253906 4.035156 -5.46875 3.578125 -5.46875 C 3.335938 -5.46875 3.09375 -5.410156 2.84375 -5.296875 C 2.664062 -5.203125 2.4375 -5.019531 2.15625 -4.75 Z M 2.15625 -4.75 "/>
|
||||
</g>
|
||||
<g id="glyph-0-20">
|
||||
<path d="M 2.890625 -5.765625 L 2.890625 -1.65625 C 2.890625 -1.070312 2.953125 -0.703125 3.078125 -0.546875 C 3.242188 -0.347656 3.46875 -0.25 3.75 -0.25 L 4.328125 -0.25 L 4.328125 0 L 0.578125 0 L 0.578125 -0.25 L 0.859375 -0.25 C 1.046875 -0.25 1.210938 -0.289062 1.359375 -0.375 C 1.515625 -0.46875 1.617188 -0.59375 1.671875 -0.75 C 1.722656 -0.90625 1.75 -1.207031 1.75 -1.65625 L 1.75 -5.765625 L 0.546875 -5.765625 L 0.546875 -6.265625 L 1.75 -6.265625 L 1.75 -6.671875 C 1.75 -7.296875 1.847656 -7.820312 2.046875 -8.25 C 2.253906 -8.6875 2.5625 -9.035156 2.96875 -9.296875 C 3.382812 -9.566406 3.851562 -9.703125 4.375 -9.703125 C 4.851562 -9.703125 5.289062 -9.550781 5.6875 -9.25 C 5.945312 -9.039062 6.078125 -8.804688 6.078125 -8.546875 C 6.078125 -8.410156 6.019531 -8.28125 5.90625 -8.15625 C 5.789062 -8.039062 5.664062 -7.984375 5.53125 -7.984375 C 5.414062 -7.984375 5.300781 -8.019531 5.1875 -8.09375 C 5.070312 -8.164062 4.929688 -8.328125 4.765625 -8.578125 C 4.597656 -8.828125 4.441406 -8.992188 4.296875 -9.078125 C 4.160156 -9.171875 4.003906 -9.21875 3.828125 -9.21875 C 3.617188 -9.21875 3.441406 -9.160156 3.296875 -9.046875 C 3.148438 -8.929688 3.046875 -8.753906 2.984375 -8.515625 C 2.921875 -8.285156 2.890625 -7.6875 2.890625 -6.71875 L 2.890625 -6.265625 L 4.5 -6.265625 L 4.5 -5.765625 Z M 2.890625 -5.765625 "/>
|
||||
</g>
|
||||
<g id="glyph-0-21">
|
||||
<path d="M 5.921875 -6.265625 L 5.921875 -2.46875 C 5.921875 -1.738281 5.9375 -1.289062 5.96875 -1.125 C 6.007812 -0.96875 6.066406 -0.859375 6.140625 -0.796875 C 6.210938 -0.734375 6.300781 -0.703125 6.40625 -0.703125 C 6.550781 -0.703125 6.710938 -0.742188 6.890625 -0.828125 L 6.984375 -0.578125 L 5.109375 0.1875 L 4.796875 0.1875 L 4.796875 -1.140625 C 4.265625 -0.554688 3.851562 -0.1875 3.5625 -0.03125 C 3.28125 0.113281 2.984375 0.1875 2.671875 0.1875 C 2.316406 0.1875 2.007812 0.0859375 1.75 -0.109375 C 1.5 -0.316406 1.320312 -0.578125 1.21875 -0.890625 C 1.125 -1.210938 1.078125 -1.664062 1.078125 -2.25 L 1.078125 -5.046875 C 1.078125 -5.335938 1.039062 -5.539062 0.96875 -5.65625 C 0.90625 -5.769531 0.8125 -5.859375 0.6875 -5.921875 C 0.5625 -5.984375 0.335938 -6.015625 0.015625 -6.015625 L 0.015625 -6.265625 L 2.203125 -6.265625 L 2.203125 -2.078125 C 2.203125 -1.492188 2.300781 -1.109375 2.5 -0.921875 C 2.707031 -0.742188 2.957031 -0.65625 3.25 -0.65625 C 3.445312 -0.65625 3.664062 -0.710938 3.90625 -0.828125 C 4.15625 -0.953125 4.453125 -1.1875 4.796875 -1.53125 L 4.796875 -5.09375 C 4.796875 -5.445312 4.726562 -5.6875 4.59375 -5.8125 C 4.46875 -5.9375 4.203125 -6.003906 3.796875 -6.015625 L 3.796875 -6.265625 Z M 5.921875 -6.265625 "/>
|
||||
</g>
|
||||
<g id="glyph-0-22">
|
||||
<path d="M 4.484375 -6.453125 L 4.484375 -4.3125 L 4.265625 -4.3125 C 4.085938 -4.976562 3.863281 -5.429688 3.59375 -5.671875 C 3.320312 -5.921875 2.976562 -6.046875 2.5625 -6.046875 C 2.238281 -6.046875 1.976562 -5.957031 1.78125 -5.78125 C 1.582031 -5.613281 1.484375 -5.429688 1.484375 -5.234375 C 1.484375 -4.972656 1.554688 -4.753906 1.703125 -4.578125 C 1.847656 -4.390625 2.140625 -4.191406 2.578125 -3.984375 L 3.5625 -3.5 C 4.488281 -3.039062 4.953125 -2.441406 4.953125 -1.703125 C 4.953125 -1.140625 4.738281 -0.679688 4.3125 -0.328125 C 3.882812 0.015625 3.398438 0.1875 2.859375 0.1875 C 2.484375 0.1875 2.046875 0.117188 1.546875 -0.015625 C 1.398438 -0.0546875 1.28125 -0.078125 1.1875 -0.078125 C 1.082031 -0.078125 1 -0.0195312 0.9375 0.09375 L 0.71875 0.09375 L 0.71875 -2.140625 L 0.9375 -2.140625 C 1.0625 -1.503906 1.300781 -1.023438 1.65625 -0.703125 C 2.019531 -0.378906 2.425781 -0.21875 2.875 -0.21875 C 3.1875 -0.21875 3.441406 -0.304688 3.640625 -0.484375 C 3.835938 -0.671875 3.9375 -0.894531 3.9375 -1.15625 C 3.9375 -1.46875 3.828125 -1.726562 3.609375 -1.9375 C 3.390625 -2.15625 2.945312 -2.425781 2.28125 -2.75 C 1.625 -3.082031 1.191406 -3.382812 0.984375 -3.65625 C 0.785156 -3.914062 0.6875 -4.242188 0.6875 -4.640625 C 0.6875 -5.148438 0.863281 -5.578125 1.21875 -5.921875 C 1.570312 -6.273438 2.023438 -6.453125 2.578125 -6.453125 C 2.828125 -6.453125 3.128906 -6.398438 3.484375 -6.296875 C 3.710938 -6.222656 3.863281 -6.1875 3.9375 -6.1875 C 4.007812 -6.1875 4.066406 -6.203125 4.109375 -6.234375 C 4.148438 -6.265625 4.203125 -6.335938 4.265625 -6.453125 Z M 4.484375 -6.453125 "/>
|
||||
</g>
|
||||
<g id="glyph-0-23">
|
||||
<path d="M 4.859375 -0.703125 C 4.554688 -0.378906 4.257812 -0.148438 3.96875 -0.015625 C 3.675781 0.117188 3.359375 0.1875 3.015625 0.1875 C 2.335938 0.1875 1.742188 -0.0976562 1.234375 -0.671875 C 0.722656 -1.242188 0.46875 -1.976562 0.46875 -2.875 C 0.46875 -3.769531 0.75 -4.585938 1.3125 -5.328125 C 1.875 -6.078125 2.601562 -6.453125 3.5 -6.453125 C 4.050781 -6.453125 4.503906 -6.273438 4.859375 -5.921875 L 4.859375 -7.078125 C 4.859375 -7.796875 4.84375 -8.234375 4.8125 -8.390625 C 4.78125 -8.554688 4.726562 -8.671875 4.65625 -8.734375 C 4.582031 -8.796875 4.488281 -8.828125 4.375 -8.828125 C 4.257812 -8.828125 4.101562 -8.789062 3.90625 -8.71875 L 3.8125 -8.953125 L 5.6875 -9.71875 L 5.984375 -9.71875 L 5.984375 -2.484375 C 5.984375 -1.742188 6 -1.289062 6.03125 -1.125 C 6.070312 -0.96875 6.128906 -0.859375 6.203125 -0.796875 C 6.273438 -0.734375 6.363281 -0.703125 6.46875 -0.703125 C 6.59375 -0.703125 6.753906 -0.742188 6.953125 -0.828125 L 7.03125 -0.578125 L 5.171875 0.1875 L 4.859375 0.1875 Z M 4.859375 -1.1875 L 4.859375 -4.40625 C 4.828125 -4.71875 4.742188 -5 4.609375 -5.25 C 4.472656 -5.507812 4.289062 -5.703125 4.0625 -5.828125 C 3.84375 -5.960938 3.625 -6.03125 3.40625 -6.03125 C 3.007812 -6.03125 2.65625 -5.847656 2.34375 -5.484375 C 1.925781 -5.015625 1.71875 -4.320312 1.71875 -3.40625 C 1.71875 -2.488281 1.914062 -1.785156 2.3125 -1.296875 C 2.71875 -0.804688 3.164062 -0.5625 3.65625 -0.5625 C 4.070312 -0.5625 4.472656 -0.769531 4.859375 -1.1875 Z M 4.859375 -1.1875 "/>
|
||||
</g>
|
||||
<g id="glyph-0-24">
|
||||
<path d="M 6.421875 -9.484375 L 6.421875 -6.28125 L 6.171875 -6.28125 C 6.085938 -6.894531 5.9375 -7.382812 5.71875 -7.75 C 5.507812 -8.113281 5.207031 -8.398438 4.8125 -8.609375 C 4.425781 -8.828125 4.023438 -8.9375 3.609375 -8.9375 C 3.128906 -8.9375 2.734375 -8.789062 2.421875 -8.5 C 2.117188 -8.207031 1.96875 -7.878906 1.96875 -7.515625 C 1.96875 -7.234375 2.0625 -6.972656 2.25 -6.734375 C 2.539062 -6.398438 3.210938 -5.945312 4.265625 -5.375 C 5.140625 -4.90625 5.734375 -4.546875 6.046875 -4.296875 C 6.359375 -4.054688 6.597656 -3.765625 6.765625 -3.421875 C 6.941406 -3.085938 7.03125 -2.734375 7.03125 -2.359375 C 7.03125 -1.660156 6.757812 -1.054688 6.21875 -0.546875 C 5.675781 -0.0351562 4.972656 0.21875 4.109375 0.21875 C 3.847656 0.21875 3.597656 0.195312 3.359375 0.15625 C 3.210938 0.125 2.914062 0.0390625 2.46875 -0.09375 C 2.03125 -0.238281 1.753906 -0.3125 1.640625 -0.3125 C 1.523438 -0.3125 1.429688 -0.273438 1.359375 -0.203125 C 1.296875 -0.140625 1.25 0 1.21875 0.21875 L 0.96875 0.21875 L 0.96875 -2.96875 L 1.21875 -2.96875 C 1.332031 -2.300781 1.488281 -1.800781 1.6875 -1.46875 C 1.894531 -1.144531 2.203125 -0.875 2.609375 -0.65625 C 3.023438 -0.4375 3.476562 -0.328125 3.96875 -0.328125 C 4.539062 -0.328125 4.988281 -0.472656 5.3125 -0.765625 C 5.644531 -1.066406 5.8125 -1.425781 5.8125 -1.84375 C 5.8125 -2.070312 5.75 -2.300781 5.625 -2.53125 C 5.5 -2.757812 5.304688 -2.972656 5.046875 -3.171875 C 4.867188 -3.316406 4.382812 -3.609375 3.59375 -4.046875 C 2.800781 -4.492188 2.234375 -4.847656 1.890625 -5.109375 C 1.554688 -5.378906 1.300781 -5.671875 1.125 -5.984375 C 0.957031 -6.304688 0.875 -6.660156 0.875 -7.046875 C 0.875 -7.710938 1.128906 -8.285156 1.640625 -8.765625 C 2.148438 -9.242188 2.800781 -9.484375 3.59375 -9.484375 C 4.082031 -9.484375 4.601562 -9.363281 5.15625 -9.125 C 5.40625 -9.007812 5.582031 -8.953125 5.6875 -8.953125 C 5.8125 -8.953125 5.910156 -8.984375 5.984375 -9.046875 C 6.054688 -9.117188 6.117188 -9.265625 6.171875 -9.484375 Z M 6.421875 -9.484375 "/>
|
||||
</g>
|
||||
<g id="glyph-0-25">
|
||||
<path d="M 2.28125 -9.71875 L 2.28125 -5.140625 C 2.78125 -5.691406 3.175781 -6.046875 3.46875 -6.203125 C 3.769531 -6.367188 4.070312 -6.453125 4.375 -6.453125 C 4.726562 -6.453125 5.03125 -6.351562 5.28125 -6.15625 C 5.539062 -5.957031 5.734375 -5.648438 5.859375 -5.234375 C 5.941406 -4.941406 5.984375 -4.40625 5.984375 -3.625 L 5.984375 -1.421875 C 5.984375 -1.023438 6.015625 -0.753906 6.078125 -0.609375 C 6.117188 -0.492188 6.191406 -0.40625 6.296875 -0.34375 C 6.410156 -0.28125 6.613281 -0.25 6.90625 -0.25 L 6.90625 0 L 3.828125 0 L 3.828125 -0.25 L 3.984375 -0.25 C 4.273438 -0.25 4.476562 -0.289062 4.59375 -0.375 C 4.707031 -0.46875 4.785156 -0.597656 4.828125 -0.765625 C 4.835938 -0.835938 4.84375 -1.054688 4.84375 -1.421875 L 4.84375 -3.625 C 4.84375 -4.3125 4.804688 -4.757812 4.734375 -4.96875 C 4.671875 -5.1875 4.5625 -5.347656 4.40625 -5.453125 C 4.25 -5.566406 4.0625 -5.625 3.84375 -5.625 C 3.613281 -5.625 3.378906 -5.5625 3.140625 -5.4375 C 2.898438 -5.320312 2.613281 -5.082031 2.28125 -4.71875 L 2.28125 -1.421875 C 2.28125 -0.984375 2.300781 -0.710938 2.34375 -0.609375 C 2.394531 -0.503906 2.484375 -0.414062 2.609375 -0.34375 C 2.742188 -0.28125 2.96875 -0.25 3.28125 -0.25 L 3.28125 0 L 0.1875 0 L 0.1875 -0.25 C 0.46875 -0.25 0.6875 -0.289062 0.84375 -0.375 C 0.9375 -0.414062 1.007812 -0.5 1.0625 -0.625 C 1.113281 -0.757812 1.140625 -1.023438 1.140625 -1.421875 L 1.140625 -7.078125 C 1.140625 -7.796875 1.125 -8.234375 1.09375 -8.390625 C 1.0625 -8.554688 1.007812 -8.671875 0.9375 -8.734375 C 0.863281 -8.796875 0.769531 -8.828125 0.65625 -8.828125 C 0.550781 -8.828125 0.394531 -8.789062 0.1875 -8.71875 L 0.09375 -8.953125 L 1.96875 -9.71875 Z M 2.28125 -9.71875 "/>
|
||||
</g>
|
||||
<g id="glyph-0-26">
|
||||
<path d="M 2.109375 -2.28125 C 1.722656 -2.46875 1.425781 -2.726562 1.21875 -3.0625 C 1.019531 -3.394531 0.921875 -3.765625 0.921875 -4.171875 C 0.921875 -4.796875 1.15625 -5.332031 1.625 -5.78125 C 2.09375 -6.226562 2.691406 -6.453125 3.421875 -6.453125 C 4.015625 -6.453125 4.53125 -6.304688 4.96875 -6.015625 L 6.296875 -6.015625 C 6.492188 -6.015625 6.609375 -6.003906 6.640625 -5.984375 C 6.671875 -5.972656 6.691406 -5.957031 6.703125 -5.9375 C 6.734375 -5.894531 6.75 -5.820312 6.75 -5.71875 C 6.75 -5.59375 6.738281 -5.507812 6.71875 -5.46875 C 6.695312 -5.445312 6.671875 -5.425781 6.640625 -5.40625 C 6.609375 -5.394531 6.492188 -5.390625 6.296875 -5.390625 L 5.484375 -5.390625 C 5.734375 -5.066406 5.859375 -4.648438 5.859375 -4.140625 C 5.859375 -3.554688 5.632812 -3.054688 5.1875 -2.640625 C 4.75 -2.222656 4.148438 -2.015625 3.390625 -2.015625 C 3.085938 -2.015625 2.773438 -2.0625 2.453125 -2.15625 C 2.242188 -1.976562 2.101562 -1.820312 2.03125 -1.6875 C 1.96875 -1.5625 1.9375 -1.457031 1.9375 -1.375 C 1.9375 -1.289062 1.972656 -1.210938 2.046875 -1.140625 C 2.117188 -1.066406 2.265625 -1.015625 2.484375 -0.984375 C 2.617188 -0.960938 2.941406 -0.945312 3.453125 -0.9375 C 4.390625 -0.914062 4.992188 -0.882812 5.265625 -0.84375 C 5.691406 -0.78125 6.03125 -0.617188 6.28125 -0.359375 C 6.539062 -0.109375 6.671875 0.203125 6.671875 0.578125 C 6.671875 1.085938 6.425781 1.570312 5.9375 2.03125 C 5.226562 2.6875 4.300781 3.015625 3.15625 3.015625 C 2.28125 3.015625 1.539062 2.816406 0.9375 2.421875 C 0.59375 2.191406 0.421875 1.957031 0.421875 1.71875 C 0.421875 1.601562 0.445312 1.492188 0.5 1.390625 C 0.570312 1.222656 0.726562 0.988281 0.96875 0.6875 C 1 0.644531 1.234375 0.394531 1.671875 -0.0625 C 1.429688 -0.195312 1.257812 -0.320312 1.15625 -0.4375 C 1.0625 -0.550781 1.015625 -0.675781 1.015625 -0.8125 C 1.015625 -0.96875 1.078125 -1.15625 1.203125 -1.375 C 1.335938 -1.59375 1.640625 -1.894531 2.109375 -2.28125 Z M 3.296875 -6.125 C 2.960938 -6.125 2.679688 -5.988281 2.453125 -5.71875 C 2.222656 -5.445312 2.109375 -5.035156 2.109375 -4.484375 C 2.109375 -3.753906 2.265625 -3.191406 2.578125 -2.796875 C 2.816406 -2.503906 3.117188 -2.359375 3.484375 -2.359375 C 3.828125 -2.359375 4.109375 -2.484375 4.328125 -2.734375 C 4.554688 -2.992188 4.671875 -3.40625 4.671875 -3.96875 C 4.671875 -4.6875 4.515625 -5.253906 4.203125 -5.671875 C 3.960938 -5.972656 3.660156 -6.125 3.296875 -6.125 Z M 2.046875 0 C 1.828125 0.226562 1.660156 0.441406 1.546875 0.640625 C 1.441406 0.847656 1.390625 1.035156 1.390625 1.203125 C 1.390625 1.421875 1.523438 1.613281 1.796875 1.78125 C 2.242188 2.0625 2.898438 2.203125 3.765625 2.203125 C 4.585938 2.203125 5.191406 2.054688 5.578125 1.765625 C 5.972656 1.472656 6.171875 1.164062 6.171875 0.84375 C 6.171875 0.601562 6.050781 0.429688 5.8125 0.328125 C 5.582031 0.234375 5.113281 0.175781 4.40625 0.15625 C 3.382812 0.125 2.597656 0.0703125 2.046875 0 Z M 2.046875 0 "/>
|
||||
</g>
|
||||
<g id="glyph-0-27">
|
||||
<path d="M 8.03125 -2.5625 L 8.25 -2.515625 L 7.453125 0 L 0.28125 0 L 0.28125 -0.25 L 0.625 -0.25 C 1.019531 -0.25 1.300781 -0.378906 1.46875 -0.640625 C 1.5625 -0.785156 1.609375 -1.117188 1.609375 -1.640625 L 1.609375 -7.625 C 1.609375 -8.207031 1.546875 -8.570312 1.421875 -8.71875 C 1.242188 -8.914062 0.976562 -9.015625 0.625 -9.015625 L 0.28125 -9.015625 L 0.28125 -9.265625 L 4.484375 -9.265625 L 4.484375 -9.015625 C 3.984375 -9.023438 3.632812 -8.976562 3.4375 -8.875 C 3.238281 -8.78125 3.101562 -8.660156 3.03125 -8.515625 C 2.957031 -8.367188 2.921875 -8.019531 2.921875 -7.46875 L 2.921875 -1.640625 C 2.921875 -1.265625 2.957031 -1.007812 3.03125 -0.875 C 3.09375 -0.769531 3.175781 -0.695312 3.28125 -0.65625 C 3.394531 -0.613281 3.753906 -0.59375 4.359375 -0.59375 L 5.03125 -0.59375 C 5.738281 -0.59375 6.234375 -0.644531 6.515625 -0.75 C 6.804688 -0.851562 7.070312 -1.035156 7.3125 -1.296875 C 7.550781 -1.566406 7.789062 -1.988281 8.03125 -2.5625 Z M 8.03125 -2.5625 "/>
|
||||
</g>
|
||||
</g>
|
||||
</defs>
|
||||
<path fill="none" stroke-width="1" stroke-linecap="butt" stroke-linejoin="miter" stroke="rgb(0%, 0%, 0%)" stroke-opacity="1" stroke-miterlimit="10" d="M 85.375 40 L 235.625 40 L 235.625 76 L 85.375 76 Z M 85.375 40 "/>
|
||||
<g fill="rgb(0%, 0%, 0%)" fill-opacity="1">
|
||||
<use xlink:href="#glyph-0-0" x="93.375" y="63.050781"/>
|
||||
</g>
|
||||
<g fill="rgb(0%, 0%, 0%)" fill-opacity="1">
|
||||
<use xlink:href="#glyph-0-1" x="106.131465" y="63.050781"/>
|
||||
</g>
|
||||
<g fill="rgb(0%, 0%, 0%)" fill-opacity="1">
|
||||
<use xlink:href="#glyph-0-2" x="112.121436" y="63.050781"/>
|
||||
</g>
|
||||
<g fill="rgb(0%, 0%, 0%)" fill-opacity="1">
|
||||
<use xlink:href="#glyph-0-3" x="115.87115" y="63.050781"/>
|
||||
</g>
|
||||
<g fill="rgb(0%, 0%, 0%)" fill-opacity="1">
|
||||
<use xlink:href="#glyph-0-4" x="122.619267" y="63.050781"/>
|
||||
</g>
|
||||
<g fill="rgb(0%, 0%, 0%)" fill-opacity="1">
|
||||
<use xlink:href="#glyph-0-5" x="132.379789" y="63.050781"/>
|
||||
</g>
|
||||
<g fill="rgb(0%, 0%, 0%)" fill-opacity="1">
|
||||
<use xlink:href="#glyph-0-6" x="138.369761" y="63.050781"/>
|
||||
</g>
|
||||
<g fill="rgb(0%, 0%, 0%)" fill-opacity="1">
|
||||
<use xlink:href="#glyph-0-2" x="142.119475" y="63.050781"/>
|
||||
</g>
|
||||
<g fill="rgb(0%, 0%, 0%)" fill-opacity="1">
|
||||
<use xlink:href="#glyph-0-7" x="145.869188" y="63.050781"/>
|
||||
</g>
|
||||
<g fill="rgb(0%, 0%, 0%)" fill-opacity="1">
|
||||
<use xlink:href="#glyph-0-2" x="152.631306" y="63.050781"/>
|
||||
</g>
|
||||
<g fill="rgb(0%, 0%, 0%)" fill-opacity="1">
|
||||
<use xlink:href="#glyph-0-6" x="156.38102" y="63.050781"/>
|
||||
</g>
|
||||
<g fill="rgb(0%, 0%, 0%)" fill-opacity="1">
|
||||
<use xlink:href="#glyph-0-8" x="160.130734" y="63.050781"/>
|
||||
</g>
|
||||
<g fill="rgb(0%, 0%, 0%)" fill-opacity="1">
|
||||
<use xlink:href="#glyph-0-9" x="166.416843" y="63.050781"/>
|
||||
</g>
|
||||
<g fill="rgb(0%, 0%, 0%)" fill-opacity="1">
|
||||
<use xlink:href="#glyph-0-10" x="169.874904" y="63.050781"/>
|
||||
</g>
|
||||
<g fill="rgb(0%, 0%, 0%)" fill-opacity="1">
|
||||
<use xlink:href="#glyph-0-3" x="176.623021" y="63.050781"/>
|
||||
</g>
|
||||
<g fill="rgb(0%, 0%, 0%)" fill-opacity="1">
|
||||
<use xlink:href="#glyph-0-11" x="183.371139" y="63.050781"/>
|
||||
</g>
|
||||
<g fill="rgb(0%, 0%, 0%)" fill-opacity="1">
|
||||
<use xlink:href="#glyph-0-12" x="192.373186" y="63.050781"/>
|
||||
</g>
|
||||
<g fill="rgb(0%, 0%, 0%)" fill-opacity="1">
|
||||
<use xlink:href="#glyph-0-13" x="196.881374" y="63.050781"/>
|
||||
</g>
|
||||
<g fill="rgb(0%, 0%, 0%)" fill-opacity="1">
|
||||
<use xlink:href="#glyph-0-1" x="202.871346" y="63.050781"/>
|
||||
</g>
|
||||
<g fill="rgb(0%, 0%, 0%)" fill-opacity="1">
|
||||
<use xlink:href="#glyph-0-6" x="208.875318" y="63.050781"/>
|
||||
</g>
|
||||
<g fill="rgb(0%, 0%, 0%)" fill-opacity="1">
|
||||
<use xlink:href="#glyph-0-13" x="212.625031" y="63.050781"/>
|
||||
</g>
|
||||
<g fill="rgb(0%, 0%, 0%)" fill-opacity="1">
|
||||
<use xlink:href="#glyph-0-14" x="218.629003" y="63.050781"/>
|
||||
</g>
|
||||
<g fill="rgb(0%, 0%, 0%)" fill-opacity="1">
|
||||
<use xlink:href="#glyph-0-15" x="223.123191" y="63.050781"/>
|
||||
</g>
|
||||
<path fill="none" stroke-width="1" stroke-linecap="butt" stroke-linejoin="miter" stroke="rgb(0%, 0%, 0%)" stroke-opacity="1" stroke-miterlimit="10" d="M 40 112 L 161 112 L 161 148 L 40 148 Z M 40 112 "/>
|
||||
<g fill="rgb(0%, 0%, 0%)" fill-opacity="1">
|
||||
<use xlink:href="#glyph-0-4" x="48" y="135.050781"/>
|
||||
</g>
|
||||
<g fill="rgb(0%, 0%, 0%)" fill-opacity="1">
|
||||
<use xlink:href="#glyph-0-5" x="57.746521" y="135.050781"/>
|
||||
</g>
|
||||
<g fill="rgb(0%, 0%, 0%)" fill-opacity="1">
|
||||
<use xlink:href="#glyph-0-6" x="63.750493" y="135.050781"/>
|
||||
</g>
|
||||
<g fill="rgb(0%, 0%, 0%)" fill-opacity="1">
|
||||
<use xlink:href="#glyph-0-2" x="67.500207" y="135.050781"/>
|
||||
</g>
|
||||
<g fill="rgb(0%, 0%, 0%)" fill-opacity="1">
|
||||
<use xlink:href="#glyph-0-7" x="71.249921" y="135.050781"/>
|
||||
</g>
|
||||
<g fill="rgb(0%, 0%, 0%)" fill-opacity="1">
|
||||
<use xlink:href="#glyph-0-2" x="77.998038" y="135.050781"/>
|
||||
</g>
|
||||
<g fill="rgb(0%, 0%, 0%)" fill-opacity="1">
|
||||
<use xlink:href="#glyph-0-6" x="81.747752" y="135.050781"/>
|
||||
</g>
|
||||
<g fill="rgb(0%, 0%, 0%)" fill-opacity="1">
|
||||
<use xlink:href="#glyph-0-8" x="85.497466" y="135.050781"/>
|
||||
</g>
|
||||
<g fill="rgb(0%, 0%, 0%)" fill-opacity="1">
|
||||
<use xlink:href="#glyph-0-9" x="91.797576" y="135.050781"/>
|
||||
</g>
|
||||
<g fill="rgb(0%, 0%, 0%)" fill-opacity="1">
|
||||
<use xlink:href="#glyph-0-10" x="95.255636" y="135.050781"/>
|
||||
</g>
|
||||
<g fill="rgb(0%, 0%, 0%)" fill-opacity="1">
|
||||
<use xlink:href="#glyph-0-3" x="102.003754" y="135.050781"/>
|
||||
</g>
|
||||
<g fill="rgb(0%, 0%, 0%)" fill-opacity="1">
|
||||
<use xlink:href="#glyph-0-11" x="108.751871" y="135.050781"/>
|
||||
</g>
|
||||
<g fill="rgb(0%, 0%, 0%)" fill-opacity="1">
|
||||
<use xlink:href="#glyph-0-12" x="117.753919" y="135.050781"/>
|
||||
</g>
|
||||
<g fill="rgb(0%, 0%, 0%)" fill-opacity="1">
|
||||
<use xlink:href="#glyph-0-13" x="122.248107" y="135.050781"/>
|
||||
</g>
|
||||
<g fill="rgb(0%, 0%, 0%)" fill-opacity="1">
|
||||
<use xlink:href="#glyph-0-1" x="128.252078" y="135.050781"/>
|
||||
</g>
|
||||
<g fill="rgb(0%, 0%, 0%)" fill-opacity="1">
|
||||
<use xlink:href="#glyph-0-6" x="134.25605" y="135.050781"/>
|
||||
</g>
|
||||
<g fill="rgb(0%, 0%, 0%)" fill-opacity="1">
|
||||
<use xlink:href="#glyph-0-13" x="138.005764" y="135.050781"/>
|
||||
</g>
|
||||
<g fill="rgb(0%, 0%, 0%)" fill-opacity="1">
|
||||
<use xlink:href="#glyph-0-14" x="143.995736" y="135.050781"/>
|
||||
</g>
|
||||
<g fill="rgb(0%, 0%, 0%)" fill-opacity="1">
|
||||
<use xlink:href="#glyph-0-15" x="148.503923" y="135.050781"/>
|
||||
</g>
|
||||
<path fill="none" stroke-width="1" stroke-linecap="butt" stroke-linejoin="miter" stroke="rgb(0%, 0%, 0%)" stroke-opacity="1" stroke-miterlimit="10" d="M 145.667969 76.304688 C 138.691406 84.441406 130.234375 94.3125 122.53125 103.296875 "/>
|
||||
<path fill-rule="nonzero" fill="rgb(0%, 0%, 0%)" fill-opacity="1" stroke-width="1" stroke-linecap="butt" stroke-linejoin="miter" stroke="rgb(0%, 0%, 0%)" stroke-opacity="1" stroke-miterlimit="10" d="M 125.3125 105.433594 L 116.144531 110.746094 L 119.996094 100.875 Z M 125.3125 105.433594 "/>
|
||||
<path fill="none" stroke-width="1" stroke-linecap="butt" stroke-linejoin="miter" stroke="rgb(0%, 0%, 0%)" stroke-opacity="1" stroke-miterlimit="10" d="M 178.625 112 L 264.375 112 L 264.375 148 L 178.625 148 Z M 178.625 112 "/>
|
||||
<g fill="rgb(0%, 0%, 0%)" fill-opacity="1">
|
||||
<use xlink:href="#glyph-0-0" x="186.625" y="135.050781"/>
|
||||
</g>
|
||||
<g fill="rgb(0%, 0%, 0%)" fill-opacity="1">
|
||||
<use xlink:href="#glyph-0-1" x="199.381465" y="135.050781"/>
|
||||
</g>
|
||||
<g fill="rgb(0%, 0%, 0%)" fill-opacity="1">
|
||||
<use xlink:href="#glyph-0-2" x="205.371436" y="135.050781"/>
|
||||
</g>
|
||||
<g fill="rgb(0%, 0%, 0%)" fill-opacity="1">
|
||||
<use xlink:href="#glyph-0-3" x="209.12115" y="135.050781"/>
|
||||
</g>
|
||||
<g fill="rgb(0%, 0%, 0%)" fill-opacity="1">
|
||||
<use xlink:href="#glyph-0-16" x="215.869267" y="135.050781"/>
|
||||
</g>
|
||||
<g fill="rgb(0%, 0%, 0%)" fill-opacity="1">
|
||||
<use xlink:href="#glyph-0-17" x="219.618981" y="135.050781"/>
|
||||
</g>
|
||||
<g fill="rgb(0%, 0%, 0%)" fill-opacity="1">
|
||||
<use xlink:href="#glyph-0-1" x="230.872826" y="135.050781"/>
|
||||
</g>
|
||||
<g fill="rgb(0%, 0%, 0%)" fill-opacity="1">
|
||||
<use xlink:href="#glyph-0-2" x="236.876798" y="135.050781"/>
|
||||
</g>
|
||||
<g fill="rgb(0%, 0%, 0%)" fill-opacity="1">
|
||||
<use xlink:href="#glyph-0-3" x="240.626511" y="135.050781"/>
|
||||
</g>
|
||||
<g fill="rgb(0%, 0%, 0%)" fill-opacity="1">
|
||||
<use xlink:href="#glyph-0-14" x="247.374629" y="135.050781"/>
|
||||
</g>
|
||||
<g fill="rgb(0%, 0%, 0%)" fill-opacity="1">
|
||||
<use xlink:href="#glyph-0-15" x="251.868817" y="135.050781"/>
|
||||
</g>
|
||||
<path fill="none" stroke-width="1" stroke-linecap="butt" stroke-linejoin="miter" stroke="rgb(0%, 0%, 0%)" stroke-opacity="1" stroke-miterlimit="10" d="M 175.578125 76.304688 C 182.671875 84.441406 191.269531 94.3125 199.101562 103.296875 "/>
|
||||
<path fill-rule="nonzero" fill="rgb(0%, 0%, 0%)" fill-opacity="1" stroke-width="1" stroke-linecap="butt" stroke-linejoin="miter" stroke="rgb(0%, 0%, 0%)" stroke-opacity="1" stroke-miterlimit="10" d="M 201.667969 100.917969 L 205.601562 110.753906 L 196.390625 105.515625 Z M 201.667969 100.917969 "/>
|
||||
<path fill-rule="nonzero" fill="rgb(82.743835%, 82.743835%, 82.743835%)" fill-opacity="1" stroke-width="1" stroke-linecap="butt" stroke-linejoin="miter" stroke="rgb(0%, 0%, 0%)" stroke-opacity="1" stroke-miterlimit="10" d="M 137.75 184 L 305.25 184 L 305.25 220 L 137.75 220 Z M 137.75 184 "/>
|
||||
<g fill="rgb(0%, 0%, 0%)" fill-opacity="1">
|
||||
<use xlink:href="#glyph-0-18" x="145.75" y="207.050781"/>
|
||||
</g>
|
||||
<g fill="rgb(0%, 0%, 0%)" fill-opacity="1">
|
||||
<use xlink:href="#glyph-0-19" x="155.496521" y="207.050781"/>
|
||||
</g>
|
||||
<g fill="rgb(0%, 0%, 0%)" fill-opacity="1">
|
||||
<use xlink:href="#glyph-0-20" x="162.244639" y="207.050781"/>
|
||||
</g>
|
||||
<g fill="rgb(0%, 0%, 0%)" fill-opacity="1">
|
||||
<use xlink:href="#glyph-0-21" x="166.752827" y="207.050781"/>
|
||||
</g>
|
||||
<g fill="rgb(0%, 0%, 0%)" fill-opacity="1">
|
||||
<use xlink:href="#glyph-0-22" x="173.500945" y="207.050781"/>
|
||||
</g>
|
||||
<g fill="rgb(0%, 0%, 0%)" fill-opacity="1">
|
||||
<use xlink:href="#glyph-0-5" x="178.753278" y="207.050781"/>
|
||||
</g>
|
||||
<g fill="rgb(0%, 0%, 0%)" fill-opacity="1">
|
||||
<use xlink:href="#glyph-0-1" x="184.74325" y="207.050781"/>
|
||||
</g>
|
||||
<g fill="rgb(0%, 0%, 0%)" fill-opacity="1">
|
||||
<use xlink:href="#glyph-0-6" x="190.747222" y="207.050781"/>
|
||||
</g>
|
||||
<g fill="rgb(0%, 0%, 0%)" fill-opacity="1">
|
||||
<use xlink:href="#glyph-0-2" x="194.496935" y="207.050781"/>
|
||||
</g>
|
||||
<g fill="rgb(0%, 0%, 0%)" fill-opacity="1">
|
||||
<use xlink:href="#glyph-0-10" x="198.246649" y="207.050781"/>
|
||||
</g>
|
||||
<g fill="rgb(0%, 0%, 0%)" fill-opacity="1">
|
||||
<use xlink:href="#glyph-0-3" x="204.994767" y="207.050781"/>
|
||||
</g>
|
||||
<g fill="rgb(0%, 0%, 0%)" fill-opacity="1">
|
||||
<use xlink:href="#glyph-0-9" x="211.756885" y="207.050781"/>
|
||||
</g>
|
||||
<g fill="rgb(0%, 0%, 0%)" fill-opacity="1">
|
||||
<use xlink:href="#glyph-0-23" x="215.49495" y="207.050781"/>
|
||||
</g>
|
||||
<g fill="rgb(0%, 0%, 0%)" fill-opacity="1">
|
||||
<use xlink:href="#glyph-0-10" x="222.243067" y="207.050781"/>
|
||||
</g>
|
||||
<g fill="rgb(0%, 0%, 0%)" fill-opacity="1">
|
||||
<use xlink:href="#glyph-0-24" x="229.005185" y="207.050781"/>
|
||||
</g>
|
||||
<g fill="rgb(0%, 0%, 0%)" fill-opacity="1">
|
||||
<use xlink:href="#glyph-0-10" x="236.497449" y="207.050781"/>
|
||||
</g>
|
||||
<g fill="rgb(0%, 0%, 0%)" fill-opacity="1">
|
||||
<use xlink:href="#glyph-0-17" x="243.245566" y="207.050781"/>
|
||||
</g>
|
||||
<g fill="rgb(0%, 0%, 0%)" fill-opacity="1">
|
||||
<use xlink:href="#glyph-0-13" x="254.499411" y="207.050781"/>
|
||||
</g>
|
||||
<g fill="rgb(0%, 0%, 0%)" fill-opacity="1">
|
||||
<use xlink:href="#glyph-0-6" x="260.503383" y="207.050781"/>
|
||||
</g>
|
||||
<g fill="rgb(0%, 0%, 0%)" fill-opacity="1">
|
||||
<use xlink:href="#glyph-0-25" x="264.253097" y="207.050781"/>
|
||||
</g>
|
||||
<g fill="rgb(0%, 0%, 0%)" fill-opacity="1">
|
||||
<use xlink:href="#glyph-0-2" x="271.001214" y="207.050781"/>
|
||||
</g>
|
||||
<g fill="rgb(0%, 0%, 0%)" fill-opacity="1">
|
||||
<use xlink:href="#glyph-0-3" x="274.750928" y="207.050781"/>
|
||||
</g>
|
||||
<g fill="rgb(0%, 0%, 0%)" fill-opacity="1">
|
||||
<use xlink:href="#glyph-0-26" x="281.499046" y="207.050781"/>
|
||||
</g>
|
||||
<g fill="rgb(0%, 0%, 0%)" fill-opacity="1">
|
||||
<use xlink:href="#glyph-0-14" x="288.247163" y="207.050781"/>
|
||||
</g>
|
||||
<g fill="rgb(0%, 0%, 0%)" fill-opacity="1">
|
||||
<use xlink:href="#glyph-0-15" x="292.755351" y="207.050781"/>
|
||||
</g>
|
||||
<path fill="none" stroke-width="1" stroke-linecap="butt" stroke-linejoin="miter" stroke="rgb(0%, 0%, 0%)" stroke-opacity="1" stroke-miterlimit="10" d="M 221.5 148.304688 C 221.5 155.59375 221.5 164.273438 221.5 172.464844 "/>
|
||||
<path fill-rule="nonzero" fill="rgb(0%, 0%, 0%)" fill-opacity="1" stroke-width="1" stroke-linecap="butt" stroke-linejoin="miter" stroke="rgb(0%, 0%, 0%)" stroke-opacity="1" stroke-miterlimit="10" d="M 225 172.382812 L 221.5 182.382812 L 218 172.382812 Z M 225 172.382812 "/>
|
||||
<path fill="none" stroke-width="1" stroke-linecap="butt" stroke-linejoin="miter" stroke="rgb(0%, 0%, 0%)" stroke-opacity="1" stroke-miterlimit="10" d="M 222 256 L 307 256 L 307 292 L 222 292 Z M 222 256 "/>
|
||||
<g fill="rgb(0%, 0%, 0%)" fill-opacity="1">
|
||||
<use xlink:href="#glyph-0-0" x="230" y="279.050781"/>
|
||||
</g>
|
||||
<g fill="rgb(0%, 0%, 0%)" fill-opacity="1">
|
||||
<use xlink:href="#glyph-0-1" x="242.756465" y="279.050781"/>
|
||||
</g>
|
||||
<g fill="rgb(0%, 0%, 0%)" fill-opacity="1">
|
||||
<use xlink:href="#glyph-0-2" x="248.746436" y="279.050781"/>
|
||||
</g>
|
||||
<g fill="rgb(0%, 0%, 0%)" fill-opacity="1">
|
||||
<use xlink:href="#glyph-0-3" x="252.49615" y="279.050781"/>
|
||||
</g>
|
||||
<g fill="rgb(0%, 0%, 0%)" fill-opacity="1">
|
||||
<use xlink:href="#glyph-0-9" x="259.244267" y="279.050781"/>
|
||||
</g>
|
||||
<g fill="rgb(0%, 0%, 0%)" fill-opacity="1">
|
||||
<use xlink:href="#glyph-0-26" x="262.996333" y="279.050781"/>
|
||||
</g>
|
||||
<g fill="rgb(0%, 0%, 0%)" fill-opacity="1">
|
||||
<use xlink:href="#glyph-0-10" x="269.74445" y="279.050781"/>
|
||||
</g>
|
||||
<g fill="rgb(0%, 0%, 0%)" fill-opacity="1">
|
||||
<use xlink:href="#glyph-0-10" x="276.506568" y="279.050781"/>
|
||||
</g>
|
||||
<g fill="rgb(0%, 0%, 0%)" fill-opacity="1">
|
||||
<use xlink:href="#glyph-0-23" x="283.254686" y="279.050781"/>
|
||||
</g>
|
||||
<g fill="rgb(0%, 0%, 0%)" fill-opacity="1">
|
||||
<use xlink:href="#glyph-0-14" x="290.002804" y="279.050781"/>
|
||||
</g>
|
||||
<g fill="rgb(0%, 0%, 0%)" fill-opacity="1">
|
||||
<use xlink:href="#glyph-0-15" x="294.496991" y="279.050781"/>
|
||||
</g>
|
||||
<path fill="none" stroke-width="1" stroke-linecap="butt" stroke-linejoin="miter" stroke="rgb(0%, 0%, 0%)" stroke-opacity="1" stroke-miterlimit="10" d="M 232.128906 220.304688 C 236.917969 228.101562 242.6875 237.492188 248.019531 246.171875 "/>
|
||||
<path fill-rule="nonzero" fill="rgb(0%, 0%, 0%)" fill-opacity="1" stroke-width="1" stroke-linecap="butt" stroke-linejoin="miter" stroke="rgb(0%, 0%, 0%)" stroke-opacity="1" stroke-miterlimit="10" d="M 250.949219 244.253906 L 253.199219 254.605469 L 244.984375 247.917969 Z M 250.949219 244.253906 "/>
|
||||
<path fill="none" stroke-width="1" stroke-linecap="butt" stroke-linejoin="miter" stroke="rgb(0%, 0%, 0%)" stroke-opacity="1" stroke-miterlimit="10" d="M 323.75 184 L 491.25 184 L 491.25 220 L 323.75 220 Z M 323.75 184 "/>
|
||||
<g fill="rgb(0%, 0%, 0%)" fill-opacity="1">
|
||||
<use xlink:href="#glyph-0-18" x="331.75" y="207.050781"/>
|
||||
</g>
|
||||
<g fill="rgb(0%, 0%, 0%)" fill-opacity="1">
|
||||
<use xlink:href="#glyph-0-19" x="341.496521" y="207.050781"/>
|
||||
</g>
|
||||
<g fill="rgb(0%, 0%, 0%)" fill-opacity="1">
|
||||
<use xlink:href="#glyph-0-20" x="348.244639" y="207.050781"/>
|
||||
</g>
|
||||
<g fill="rgb(0%, 0%, 0%)" fill-opacity="1">
|
||||
<use xlink:href="#glyph-0-21" x="352.752827" y="207.050781"/>
|
||||
</g>
|
||||
<g fill="rgb(0%, 0%, 0%)" fill-opacity="1">
|
||||
<use xlink:href="#glyph-0-22" x="359.500945" y="207.050781"/>
|
||||
</g>
|
||||
<g fill="rgb(0%, 0%, 0%)" fill-opacity="1">
|
||||
<use xlink:href="#glyph-0-5" x="364.753278" y="207.050781"/>
|
||||
</g>
|
||||
<g fill="rgb(0%, 0%, 0%)" fill-opacity="1">
|
||||
<use xlink:href="#glyph-0-1" x="370.74325" y="207.050781"/>
|
||||
</g>
|
||||
<g fill="rgb(0%, 0%, 0%)" fill-opacity="1">
|
||||
<use xlink:href="#glyph-0-6" x="376.747222" y="207.050781"/>
|
||||
</g>
|
||||
<g fill="rgb(0%, 0%, 0%)" fill-opacity="1">
|
||||
<use xlink:href="#glyph-0-2" x="380.496935" y="207.050781"/>
|
||||
</g>
|
||||
<g fill="rgb(0%, 0%, 0%)" fill-opacity="1">
|
||||
<use xlink:href="#glyph-0-10" x="384.246649" y="207.050781"/>
|
||||
</g>
|
||||
<g fill="rgb(0%, 0%, 0%)" fill-opacity="1">
|
||||
<use xlink:href="#glyph-0-3" x="390.994767" y="207.050781"/>
|
||||
</g>
|
||||
<g fill="rgb(0%, 0%, 0%)" fill-opacity="1">
|
||||
<use xlink:href="#glyph-0-9" x="397.756885" y="207.050781"/>
|
||||
</g>
|
||||
<g fill="rgb(0%, 0%, 0%)" fill-opacity="1">
|
||||
<use xlink:href="#glyph-0-23" x="401.49495" y="207.050781"/>
|
||||
</g>
|
||||
<g fill="rgb(0%, 0%, 0%)" fill-opacity="1">
|
||||
<use xlink:href="#glyph-0-10" x="408.243067" y="207.050781"/>
|
||||
</g>
|
||||
<g fill="rgb(0%, 0%, 0%)" fill-opacity="1">
|
||||
<use xlink:href="#glyph-0-24" x="415.005185" y="207.050781"/>
|
||||
</g>
|
||||
<g fill="rgb(0%, 0%, 0%)" fill-opacity="1">
|
||||
<use xlink:href="#glyph-0-10" x="422.497449" y="207.050781"/>
|
||||
</g>
|
||||
<g fill="rgb(0%, 0%, 0%)" fill-opacity="1">
|
||||
<use xlink:href="#glyph-0-17" x="429.245566" y="207.050781"/>
|
||||
</g>
|
||||
<g fill="rgb(0%, 0%, 0%)" fill-opacity="1">
|
||||
<use xlink:href="#glyph-0-13" x="440.499411" y="207.050781"/>
|
||||
</g>
|
||||
<g fill="rgb(0%, 0%, 0%)" fill-opacity="1">
|
||||
<use xlink:href="#glyph-0-6" x="446.503383" y="207.050781"/>
|
||||
</g>
|
||||
<g fill="rgb(0%, 0%, 0%)" fill-opacity="1">
|
||||
<use xlink:href="#glyph-0-25" x="450.253097" y="207.050781"/>
|
||||
</g>
|
||||
<g fill="rgb(0%, 0%, 0%)" fill-opacity="1">
|
||||
<use xlink:href="#glyph-0-2" x="457.001214" y="207.050781"/>
|
||||
</g>
|
||||
<g fill="rgb(0%, 0%, 0%)" fill-opacity="1">
|
||||
<use xlink:href="#glyph-0-3" x="460.750928" y="207.050781"/>
|
||||
</g>
|
||||
<g fill="rgb(0%, 0%, 0%)" fill-opacity="1">
|
||||
<use xlink:href="#glyph-0-26" x="467.499046" y="207.050781"/>
|
||||
</g>
|
||||
<g fill="rgb(0%, 0%, 0%)" fill-opacity="1">
|
||||
<use xlink:href="#glyph-0-14" x="474.247163" y="207.050781"/>
|
||||
</g>
|
||||
<g fill="rgb(0%, 0%, 0%)" fill-opacity="1">
|
||||
<use xlink:href="#glyph-0-15" x="478.755351" y="207.050781"/>
|
||||
</g>
|
||||
<path fill="none" stroke-width="1" stroke-linecap="butt" stroke-linejoin="miter" stroke="rgb(0%, 0%, 0%)" stroke-opacity="1" stroke-miterlimit="10" d="M 346.75 256 L 424.25 256 L 424.25 292 L 346.75 292 Z M 346.75 256 "/>
|
||||
<g fill="rgb(0%, 0%, 0%)" fill-opacity="1">
|
||||
<use xlink:href="#glyph-0-0" x="354.75" y="279.050781"/>
|
||||
</g>
|
||||
<g fill="rgb(0%, 0%, 0%)" fill-opacity="1">
|
||||
<use xlink:href="#glyph-0-1" x="367.506465" y="279.050781"/>
|
||||
</g>
|
||||
<g fill="rgb(0%, 0%, 0%)" fill-opacity="1">
|
||||
<use xlink:href="#glyph-0-2" x="373.496436" y="279.050781"/>
|
||||
</g>
|
||||
<g fill="rgb(0%, 0%, 0%)" fill-opacity="1">
|
||||
<use xlink:href="#glyph-0-3" x="377.24615" y="279.050781"/>
|
||||
</g>
|
||||
<g fill="rgb(0%, 0%, 0%)" fill-opacity="1">
|
||||
<use xlink:href="#glyph-0-9" x="383.994267" y="279.050781"/>
|
||||
</g>
|
||||
<g fill="rgb(0%, 0%, 0%)" fill-opacity="1">
|
||||
<use xlink:href="#glyph-0-19" x="387.746333" y="279.050781"/>
|
||||
</g>
|
||||
<g fill="rgb(0%, 0%, 0%)" fill-opacity="1">
|
||||
<use xlink:href="#glyph-0-1" x="394.49445" y="279.050781"/>
|
||||
</g>
|
||||
<g fill="rgb(0%, 0%, 0%)" fill-opacity="1">
|
||||
<use xlink:href="#glyph-0-23" x="400.498422" y="279.050781"/>
|
||||
</g>
|
||||
<g fill="rgb(0%, 0%, 0%)" fill-opacity="1">
|
||||
<use xlink:href="#glyph-0-14" x="407.24654" y="279.050781"/>
|
||||
</g>
|
||||
<g fill="rgb(0%, 0%, 0%)" fill-opacity="1">
|
||||
<use xlink:href="#glyph-0-15" x="411.754728" y="279.050781"/>
|
||||
</g>
|
||||
<path fill="none" stroke-width="1" stroke-linecap="butt" stroke-linejoin="miter" stroke="rgb(0%, 0%, 0%)" stroke-opacity="1" stroke-miterlimit="10" d="M 402.0625 220.304688 C 399.71875 227.761719 396.914062 236.679688 394.289062 245.035156 "/>
|
||||
<path fill-rule="nonzero" fill="rgb(0%, 0%, 0%)" fill-opacity="1" stroke-width="1" stroke-linecap="butt" stroke-linejoin="miter" stroke="rgb(0%, 0%, 0%)" stroke-opacity="1" stroke-miterlimit="10" d="M 397.667969 245.960938 L 391.328125 254.453125 L 390.988281 243.863281 Z M 397.667969 245.960938 "/>
|
||||
<path fill="none" stroke-width="1" stroke-linecap="butt" stroke-linejoin="miter" stroke="rgb(0%, 0%, 0%)" stroke-opacity="1" stroke-miterlimit="10" d="M 286.375 328 L 340.625 328 L 340.625 364 L 286.375 364 Z M 286.375 328 "/>
|
||||
<g fill="rgb(0%, 0%, 0%)" fill-opacity="1">
|
||||
<use xlink:href="#glyph-0-27" x="294.375" y="351.050781"/>
|
||||
</g>
|
||||
<g fill="rgb(0%, 0%, 0%)" fill-opacity="1">
|
||||
<use xlink:href="#glyph-0-10" x="302.618901" y="351.050781"/>
|
||||
</g>
|
||||
<g fill="rgb(0%, 0%, 0%)" fill-opacity="1">
|
||||
<use xlink:href="#glyph-0-26" x="309.381019" y="351.050781"/>
|
||||
</g>
|
||||
<g fill="rgb(0%, 0%, 0%)" fill-opacity="1">
|
||||
<use xlink:href="#glyph-0-9" x="316.129137" y="351.050781"/>
|
||||
</g>
|
||||
<g fill="rgb(0%, 0%, 0%)" fill-opacity="1">
|
||||
<use xlink:href="#glyph-0-2" x="319.881202" y="351.050781"/>
|
||||
</g>
|
||||
<g fill="rgb(0%, 0%, 0%)" fill-opacity="1">
|
||||
<use xlink:href="#glyph-0-14" x="323.630916" y="351.050781"/>
|
||||
</g>
|
||||
<g fill="rgb(0%, 0%, 0%)" fill-opacity="1">
|
||||
<use xlink:href="#glyph-0-15" x="328.125104" y="351.050781"/>
|
||||
</g>
|
||||
<path fill="none" stroke-width="1" stroke-linecap="butt" stroke-linejoin="miter" stroke="rgb(0%, 0%, 0%)" stroke-opacity="1" stroke-miterlimit="10" d="M 276.613281 292.304688 C 282.191406 300.273438 288.929688 309.902344 295.113281 318.734375 "/>
|
||||
<path fill-rule="nonzero" fill="rgb(0%, 0%, 0%)" fill-opacity="1" stroke-width="1" stroke-linecap="butt" stroke-linejoin="miter" stroke="rgb(0%, 0%, 0%)" stroke-opacity="1" stroke-miterlimit="10" d="M 297.792969 316.457031 L 300.660156 326.65625 L 292.058594 320.46875 Z M 297.792969 316.457031 "/>
|
||||
<path fill="none" stroke-width="1" stroke-linecap="butt" stroke-linejoin="miter" stroke="rgb(0%, 0%, 0%)" stroke-opacity="1" stroke-miterlimit="10" d="M 367.703125 292.304688 C 359.222656 300.546875 348.910156 310.570312 339.570312 319.65625 "/>
|
||||
<path fill-rule="nonzero" fill="rgb(0%, 0%, 0%)" fill-opacity="1" stroke-width="1" stroke-linecap="butt" stroke-linejoin="miter" stroke="rgb(0%, 0%, 0%)" stroke-opacity="1" stroke-miterlimit="10" d="M 342.039062 322.136719 L 332.429688 326.597656 L 337.15625 317.117188 Z M 342.039062 322.136719 "/>
|
||||
</svg>
|
After Width: | Height: | Size: 56 KiB |
608
4_class_loader/figs/classloaders-crop.svg
Normal file
608
4_class_loader/figs/classloaders-crop.svg
Normal file
File diff suppressed because one or more lines are too long
After Width: | Height: | Size: 102 KiB |
|
@ -2,11 +2,7 @@
|
|||
|
||||
= Class loaders in the middle: confusing Android static analyzers
|
||||
|
||||
/*
|
||||
#include("0_intro.typ")
|
||||
#include("1_related_work.typ")
|
||||
#include("2_methodology.typ")
|
||||
#include("3_experiments.typ")
|
||||
#include("4_discussion.typ")
|
||||
#include("5_conclusion.typ")
|
||||
*/
|
||||
#include("2_classloading.typ")
|
||||
#include("3_obfuscation.typ")
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
#import "@local/template-thesis-matisse:0.0.1": todo
|
||||
|
||||
#let keywords-en = ("Android", "Malware Analysis", todo[More Keywords])
|
||||
#let keywords-fr = ("Android", "Analyse de Maliciels")
|
||||
#let keywords-en = ("Android", "malware analysis", "static analysis", "class loading", "code obfuscation", todo[More Keywords])
|
||||
#let keywords-fr = ("Android", "analyse de maliciels", "analyse statique", "chargement de classe", "brouillage de code")
|
||||
|
||||
|
||||
#let abstract-en = lorem(175)
|
||||
|
|
237
bibliography.bib
237
bibliography.bib
|
@ -680,3 +680,240 @@
|
|||
file = {IEEE Xplore Abstract Record:/home/histausse/Zotero/storage/RWT9CKBF/9425937.html:text/html;Mauthe et al. - 2021 - A Large-Scale Empirical Study of Android App Decom.pdf:/home/histausse/Zotero/storage/I8KKRIJV/Mauthe et al. - 2021 - A Large-Scale Empirical Study of Android App Decom.pdf:application/pdf},
|
||||
}
|
||||
|
||||
@ARTICLE{9118907,
|
||||
author={Pan, Ya and Ge, Xiuting and Fang, Chunrong and Fan, Yong},
|
||||
journal={IEEE Access},
|
||||
title={A Systematic Literature Review of Android Malware Detection Using Static Analysis},
|
||||
year={2020},
|
||||
volume={8},
|
||||
number={},
|
||||
pages={116363-116379},
|
||||
keywords={Malware;Static analysis;Feature extraction;Analytical models;Bibliographies;Sensitivity;Systematics;Android malware detection;static analysis;systematic literature review},
|
||||
doi={10.1109/ACCESS.2020.3002842}}
|
||||
|
||||
@inproceedings{zhang2015dexhunter,
|
||||
author={Zhang, Yueqian and Luo, Xiapu and Yin, Haoyang},
|
||||
title={Dexhunter: toward extracting hidden code from packed android applications},
|
||||
booktitle={European Symposium on Research in Computer Security},
|
||||
number={20},
|
||||
address={Vienna, Austria},
|
||||
pages={293--311},
|
||||
month={nov},
|
||||
year={2015},
|
||||
publisher={Springer}
|
||||
}
|
||||
@inproceedings{liao2016automated,
|
||||
author={Liao, Yibin and Li, Jiakuan and Li, Bo and Zhu, Guodong and Yin, Yue and Cai, Ruoyan},
|
||||
title={Automated Detection and Classification for Packed Android Applications},
|
||||
booktitle={International Conference on Mobile Services},
|
||||
address={San Francisco, USA},
|
||||
pages={200--203},
|
||||
month={jun},
|
||||
year={2016},
|
||||
publisher={IEEE}
|
||||
}
|
||||
@inproceedings{xue2017adaptive,
|
||||
author={Xue, Lei and Luo, Xiapu and Yu, Le and Wang, Shuai and Wu, Dinghao},
|
||||
title={Adaptive unpacking of Android apps},
|
||||
booktitle={International Conference on Software Engineering},
|
||||
number={39},
|
||||
address={Buenos Aires, Argentina},
|
||||
pages={358--369},
|
||||
month={may},
|
||||
year={2017},
|
||||
publisher={IEEE}
|
||||
}
|
||||
@inproceedings{wong2018tackling,
|
||||
author={Wong, Michelle Y and Lie, David},
|
||||
title={Tackling runtime-based obfuscation in Android with TIRO},
|
||||
booktitle={USENIX Security Symposium},
|
||||
number={27},
|
||||
address={Baltimore, USA},
|
||||
pages={1247-1262},
|
||||
month={aug},
|
||||
year={2018},
|
||||
publisher={USENIX}
|
||||
}
|
||||
|
||||
|
||||
@article{Egele2012,
|
||||
title = {A survey on automated dynamic malware-analysis techniques and tools},
|
||||
volume = {44},
|
||||
issn = {03600300},
|
||||
doi = {10.1145/2089125.2089126},
|
||||
number = {2},
|
||||
journaltitle = {{ACM} Computing Surveys},
|
||||
author = {Egele, Manuel and Scholte, Theodoor and Kirda, Engin and Kruegel, Christopher},
|
||||
date = {2012},
|
||||
note = {{ISBN}: 0360-0300},
|
||||
file = {PDF:/home/jf/Zotero/storage/6FHSYVW2/Egele et al. - 2012 - A survey on automated dynamic malware-analysis techniques and tools.pdf:application/pdf},
|
||||
}
|
||||
|
||||
|
||||
|
||||
@inproceedings{Arzt2013,
|
||||
location = {Rennes, France},
|
||||
title = {Instrumenting Android and Java Applications as Easy as abc},
|
||||
volume = {8174},
|
||||
isbn = {978-3-642-40786-4},
|
||||
doi = {10.1007/978-3-642-40787-1_26},
|
||||
pages = {364--381},
|
||||
booktitle = {Fourth International Conference on Runtime Verification},
|
||||
publisher = {Springer Berlin Heidelberg},
|
||||
author = {Arzt, Steven and Rasthofer, Siegfried and Bodden, Eric},
|
||||
date = {2013-09},
|
||||
note = {Series Title: {LNCS}},
|
||||
keywords = {★, security, dynamic analysis, android, java, runtime},
|
||||
file = {PDF:/home/jf/Zotero/storage/LPNNXEJI/Arzt, Rasthofer, Bodden - 2013 - Instrumenting Android and Java Applications as Easy as abc.pdf:application/pdf},
|
||||
}
|
||||
|
||||
@inproceedings{mineau_evaluating_2024,
|
||||
location = {Limassol, Cyprus},
|
||||
title = {Evaluating the Reusability of Android Static Analysis Tools},
|
||||
volume = {{LNCS} 14614},
|
||||
rights = {All rights reserved},
|
||||
url = {http://dx.doi.org/10.1007/978-3-031-66459-5_10},
|
||||
doi = {10.1007/978-3-031-66459-5_10},
|
||||
series = {{LNCS}},
|
||||
shorttitle = {Rank B in {CORE}.},
|
||||
pages = {153--170},
|
||||
booktitle = {{ICSR} 2024 - 21st International Conference on Software and Systems Reuse},
|
||||
publisher = {Springer},
|
||||
author = {Mineau, Jean-Marie and Lalande, Jean-François},
|
||||
date = {2024-06},
|
||||
note = {Medium: {ICSR} 2024},
|
||||
}
|
||||
|
||||
|
||||
@inproceedings{Duan2018,
|
||||
title = {Things You May Not Know About Android (Un)Packers: A Systematic Study based on Whole-System Emulation},
|
||||
booktitle = {24th Annual Network and Distributed System Security Symposium},
|
||||
author = {Duan, Yue and Zhang, Mu and Bhaskar, Abhishek Vasisht and Yin, Heng and Pan, Xiaorui and Li, Tongxin and Wang, Xueqiang and Wang, Xiaofeng},
|
||||
date = {2018},
|
||||
note = {Issue: February},
|
||||
keywords = {★},
|
||||
file = {PDF:/home/jf/Zotero/storage/Y3TWNQKP/Duan et al. - 2018 - Things You May Not Know About Android (Un)Packers A Systematic Study based on Whole-System Emulation.pdf:application/pdf},
|
||||
}
|
||||
|
||||
@article{he_systematic_2023,
|
||||
title = {A {Systematic} {Study} of {Android} {Non}-{SDK} ({Hidden}) {Service} {API} {Security}},
|
||||
volume = {20},
|
||||
issn = {1941-0018},
|
||||
url = {https://ieeexplore.ieee.org/abstract/document/9739878},
|
||||
doi = {10.1109/TDSC.2022.3160872},
|
||||
abstract = {Android allows apps to communicate with its system services via system service helpers so that these apps can use various functions provided by the system services. Meanwhile, the system services rely on their service helpers to enforce security checks for protection. Unfortunately, the security checks in the service helpers may be bypassed via directly exploiting the non-SDK (hidden) APIs, degrading the stability and posing severe security threats such as privilege escalation, automatic function execution without users’ interactions, crashes, and DoS attacks. Google has proposed various approaches to address this problem, e.g., case-by-case fixing the bugs or even proposing a blacklist to block all the non-SDK APIs. However, the developers can still figure out new ways of exploiting these hidden APIs to evade the non-SDKs restrictions. In this article, we systematically study the vulnerabilities due to the hidden API exploitation and analyze the effectiveness of Google’s countermeasures. We aim to answer if there are still vulnerable hidden APIs that can be exploited in newest Android 12. We develop a static analysis tool called {\textbackslash}sf ServiceAuditServiceAudit to automatically mine the inconsistent security enforcement between service helper classes and the hidden service APIs. We apply {\textbackslash}sf ServiceAuditServiceAudit to Android 6{\textbackslash}sim∼12. Our tool discovers 112 vulnerabilities in Android 6 with a higher precision than existing approaches. Moreover, in Android 11 and 12, we identify more than 25 hidden APIs with inconsistent protections; however, only one of the vulnerable APIs can lead to severe security problem in Android 11, and none of them work on Android 12.},
|
||||
number = {2},
|
||||
urldate = {2024-09-09},
|
||||
journal = {IEEE Transactions on Dependable and Secure Computing},
|
||||
author = {He, Yi and Gu, Yacong and Su, Purui and Sun, Kun and Zhou, Yajin and Wang, Zhi and Li, Qi},
|
||||
month = mar,
|
||||
year = {2023},
|
||||
note = {Conference Name: IEEE Transactions on Dependable and Secure Computing},
|
||||
keywords = {Security, Android, security, Internet, Smart phones, Static analysis, Codes, Sun, Blocklists, non-sdk API},
|
||||
pages = {1609--1623},
|
||||
file = {IEEE Xplore Abstract Record:/home/histausse/Zotero/storage/7U7WUIFL/9739878.html:text/html;Submitted Version:/home/histausse/Zotero/storage/74BN4HRJ/He et al. - 2023 - A Systematic Study of Android Non-SDK (Hidden) Service API Security.pdf:application/pdf},
|
||||
}
|
||||
|
||||
@inproceedings{li_accessing_2016,
|
||||
title = {Accessing {Inaccessible} {Android} {APIs}: {An} {Empirical} {Study}},
|
||||
shorttitle = {Accessing {Inaccessible} {Android} {APIs}},
|
||||
url = {https://ieeexplore.ieee.org/abstract/document/7816486},
|
||||
doi = {10.1109/ICSME.2016.35},
|
||||
abstract = {As Android becomes a de-facto choice of development platform for mobile apps, developers extensively leverage its accompanying Software Development Kit to quickly build their apps. This SDK comes with a set of APIs which developers may find limited in comparison to what system apps can do or what framework developers are preparing to harness capabilities of new generation devices. Thus, developers may attempt to explore in advance the normally "inaccessible" APIs for building unique API-based functionality in their app. The Android programming model is unique in its kind. Inaccessible APIs, which however are used by developers, constitute yet another specificity of Android development, and is worth investigating to understand what they are, how they evolve over time, and who uses them. To that end, in this work, we empirically investigate 17 important releases of the Android framework source code base, and we find that inaccessible APIs are commonly implemented in the Android framework, which are further neither forward nor backward compatible. Moreover, a small set of inaccessible APIs can eventually become publicly accessible, while most of them are removed during the evolution, resulting in risks for such apps that have leveraged inaccessible APIs. Finally, we show that inaccessible APIs are indeed accessed by third-party apps, and the official Google Play store has tolerated the proliferation of apps leveraging inaccessible API methods.},
|
||||
urldate = {2024-09-09},
|
||||
booktitle = {2016 {IEEE} {International} {Conference} on {Software} {Maintenance} and {Evolution} ({ICSME})},
|
||||
author = {Li, Li and Bissyandé, Tegawendé F. and Le Traon, Yves and Klein, Jacques},
|
||||
month = oct,
|
||||
year = {2016},
|
||||
keywords = {Androids, Google, Humanoid robots, Software, Libraries, Runtime, Ecosystems},
|
||||
pages = {411--422},
|
||||
file = {IEEE Xplore Abstract Record:/home/histausse/Zotero/storage/WQ564CZA/7816486.html:text/html;PDF:/home/histausse/Zotero/storage/ZTDU84BY/Li et al. - 2016 - Accessing Inaccessible Android APIs An Empirical Study.pdf:application/pdf},
|
||||
}
|
||||
|
||||
@article{tozawa_formalization_2002,
|
||||
title = {Formalization and {Analysis} of {Class} {Loading} in {Java}},
|
||||
volume = {15},
|
||||
issn = {1573-0557},
|
||||
url = {https://doi.org/10.1023/A:1019912130555},
|
||||
doi = {10.1023/A:1019912130555},
|
||||
abstract = {Since Java security relies on the type-safety of the JVM, many formal approaches have been taken in order to prove the soundness of the JVM. This paper presents a new formalization of the JVM and proves its soundness. It is the first model to employ dynamic linking and bytecode verification to analyze the loading constraint scheme of Java2. The key concept required for proving the soundness of the new model is augmented value typing, which is defined from ordinary value typing combined with the loading constraint scheme. In proving the soundness of the model, it is shown that there are some problems inside the current reference implementation of the JVM with respect to our model. We also analyze the findClass scheme, newly introduced in Java2. The same analysis also shows why applets cannot exploit the type-spoofing vulnerability reported by Saraswat, which led to the introduction of the loading constraint scheme.},
|
||||
language = {en},
|
||||
number = {1},
|
||||
urldate = {2024-04-30},
|
||||
journal = {Higher-Order and Symbolic Computation},
|
||||
author = {Tozawa, Akihiko and Hagiya, Masami},
|
||||
month = mar,
|
||||
year = {2002},
|
||||
keywords = {security, Java, class loading},
|
||||
pages = {7--55},
|
||||
file = {Tozawa and Hagiya - 2002 - Formalization and Analysis of Class Loading in Jav.pdf:/home/histausse/Zotero/storage/YCL3ULAF/Tozawa and Hagiya - 2002 - Formalization and Analysis of Class Loading in Jav.pdf:application/pdf},
|
||||
}
|
||||
|
||||
|
||||
@article{gong_secure_1998,
|
||||
title = {Secure {Java} class loading},
|
||||
volume = {2},
|
||||
issn = {1941-0131},
|
||||
url = {https://ieeexplore.ieee.org/abstract/document/735987},
|
||||
doi = {10.1109/4236.735987},
|
||||
abstract = {The class loading mechanism, central to Java, plays a key role in JDK 1.2 by enabling an improved security policy that is permission-based and extensible. The author concludes that JDK 1.2 has introduced a powerful and secure class loading mechanism. It not only enforces type safety and name space separation but also has a significant role in the new security architecture that supports fine grained, permission based access control. The new class loading mechanism's flexibility-through its delegation scheme and the rich set of class loader classes-gives Java applications and applets greater freedom to customize and specify how, when, and from where classes are loaded. Because the class loading mechanism is central to both the correctness and the security of the Java runtime system, we would like to model and define this mechanism, perhaps in a formal verification system. We can then obtain a formal specification and prove (or disprove) that the mechanism as currently designed is sufficient for security.},
|
||||
number = {6},
|
||||
urldate = {2024-04-30},
|
||||
journal = {IEEE Internet Computing},
|
||||
author = {Gong, Li},
|
||||
month = nov,
|
||||
year = {1998},
|
||||
note = {Conference Name: IEEE Internet Computing},
|
||||
keywords = {Internet, Java, File systems, Access control, Computer architecture, Computer security, Layout, Permission, Public key, Sun},
|
||||
pages = {56--61},
|
||||
file = {Gong - 1998 - Secure Java class loading.pdf:/home/histausse/Zotero/storage/4REG3E94/Gong - 1998 - Secure Java class loading.pdf:application/pdf;IEEE Xplore Abstract Record:/home/histausse/Zotero/storage/5D7Z3JNH/735987.html:text/html},
|
||||
}
|
||||
|
||||
@article{liang_dynamic_1998,
|
||||
title = {Dynamic class loading in the {Java} virtual machine},
|
||||
volume = {33},
|
||||
issn = {0362-1340},
|
||||
url = {https://dl.acm.org/doi/10.1145/286942.286945},
|
||||
doi = {10.1145/286942.286945},
|
||||
abstract = {Class loaders are a powerful mechanism for dynamically loading software components on the Java platform. They are unusual in supporting all of the following features: laziness, type-safe linkage, user-defined extensibility, and multiple communicating namespaces.We present the notion of class loaders and demonstrate some of their interesting uses. In addition, we discuss how to maintain type safety in the presence of user-defined dynamic class loading.},
|
||||
number = {10},
|
||||
urldate = {2024-10-15},
|
||||
journal = {SIGPLAN Not.},
|
||||
author = {Liang, Sheng and Bracha, Gilad},
|
||||
month = oct,
|
||||
year = {1998},
|
||||
pages = {36--44},
|
||||
file = {Full Text PDF:/home/histausse/Zotero/storage/5N43QJ69/Liang and Bracha - 1998 - Dynamic class loading in the Java virtual machine.pdf:application/pdf},
|
||||
}
|
||||
|
||||
|
||||
@inproceedings{zhou_dynamic_2022,
|
||||
title = {Dynamic {Class} {Generating} and {Loading} {Technology} in {Android} {Web} {Application}},
|
||||
url = {https://ieeexplore.ieee.org/abstract/document/9851782},
|
||||
doi = {10.1109/ISNCC55209.2022.9851782},
|
||||
abstract = {Google’s android operating system has been widely used since being released, and occupies a major share of the market in the field of mobile computation. In Android, user applications mostly run in the dalvik virtual machine (DVM) due to the copyrights. The byte codes that the DVM use are different from the java virtual machine (JVM), so the class files that conform to the Java specification can’t be loaded and executed directly in android. Based on the analysis of the class loading mechanism of DVM and JVM, this paper proposes the dynamic class generating and loading mechanism in Android with existing technologies. The mechanism solves the compatibility problem caused by the differences of class file byte code, and extends the thought of ‘written once, run anywhere’. Two simple applications demonstrate the validity and effectiveness of the technology.},
|
||||
urldate = {2024-04-30},
|
||||
booktitle = {2022 {International} {Symposium} on {Networks}, {Computers} and {Communications} ({ISNCC})},
|
||||
author = {Zhou, Wenwen and Yongzhi, Yang and Wang, Jiejuan},
|
||||
month = jul,
|
||||
year = {2022},
|
||||
keywords = {android, Java, Smart phones, dynamic, Loading, byte code, class load, Codes, compatibility, Computers, dalvik, java virtual machine, Operating systems, Virtual machining},
|
||||
pages = {1--6},
|
||||
file = {IEEE Xplore Abstract Record:/home/histausse/Zotero/storage/ZR9MJBAG/9851782.html:text/html;Zhou et al. - 2022 - Dynamic Class Generating and Loading Technology in.pdf:/home/histausse/Zotero/storage/5X4AAR9N/Zhou et al. - 2022 - Dynamic Class Generating and Loading Technology in.pdf:application/pdf},
|
||||
}
|
||||
|
||||
@inproceedings{kriz_provisioning_2015,
|
||||
title = {Provisioning of application modules to {Android} devices},
|
||||
url = {https://ieeexplore.ieee.org/abstract/document/7129009},
|
||||
doi = {10.1109/RADIOELEK.2015.7129009},
|
||||
abstract = {The Google Android platform supports provisioning of packaged applications to an Android device. However, an existing approach requires user's interaction during the installation of a new application or its modules. We present a new approach to dynamic modules loading which enables provisioning of new modules to Android device dynamically without the interaction with the user. It will allow complex applications to adapt to the surrounding conditions and requirements of the user by downloading additional code from a server or a neighboring peer device. In our solution we propose to replace the default application class-loader with a custom one while employing some existing mechanisms of class-loading from APK packages at the Android platform.},
|
||||
urldate = {2024-04-30},
|
||||
booktitle = {2015 25th {International} {Conference} {Radioelektronika} ({RADIOELEKTRONIKA})},
|
||||
author = {Kriz, Pavel and Maly, Filip},
|
||||
month = apr,
|
||||
year = {2015},
|
||||
keywords = {Android, Androids, Humanoid robots, Java, Mobile handsets, Servers, Loading, class loading, Java Reflection API, m-client, modular application, Reflection},
|
||||
pages = {423--426},
|
||||
file = {IEEE Xplore Abstract Record:/home/histausse/Zotero/storage/QEQLZHMD/7129009.html:text/html;Kriz and Maly - 2015 - Provisioning of application modules to Android dev.pdf:/home/histausse/Zotero/storage/8GRUYQLQ/Kriz and Maly - 2015 - Provisioning of application modules to Android dev.pdf:application/pdf},
|
||||
}
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue