Repository: tomwhite/cubed
Pull request #178 (2023-05-19 23:42:58)

Docs on installing from conda + optional dependencies
Following #166, documents installing from conda and installing sets of optional dependencies.

Copied the idea of pointing to the actual dependencies specification file from the xarray getting started guide.


Patch:
diff --git a/cubed/array_api/creation_functions.py b/cubed/array_api/creation_functions.py
index 0122df05..c7cc3413 100644
--- a/cubed/array_api/creation_functions.py
+++ b/cubed/array_api/creation_functions.py
@@ -104,7 +104,7 @@ def eye(
         shape=shape,
         dtype=dtype,
         chunks=chunks,
-        extra_required_mem=0,
+        extra_projected_mem=0,
         spec=spec,
         k=k,
         chunksize=chunksize,
@@ -190,7 +190,7 @@ def linspace(
         shape=shape,
         dtype=dtype,
         chunks=chunks,
-        extra_required_mem=0,
+        extra_projected_mem=0,
         spec=spec,
         size=chunksize,
         start=start,
diff --git a/cubed/array_api/manipulation_functions.py b/cubed/array_api/manipulation_functions.py
index 6b92a1d2..0395e54c 100644
--- a/cubed/array_api/manipulation_functions.py
+++ b/cubed/array_api/manipulation_functions.py
@@ -98,7 +98,7 @@ def concat(arrays, /, *, axis=0):
     # memory allocated by reading one chunk from input array
     # note that although the output chunk will overlap multiple input chunks,
     # the chunks are read in series, reusing memory
-    extra_required_mem = a.chunkmem
+    extra_projected_mem = a.chunkmem
 
     return map_direct(
         _read_concat_chunk,
@@ -106,7 +106,7 @@ def concat(arrays, /, *, axis=0):
         shape=shape,
         dtype=dtype,
         chunks=chunks,
-        extra_required_mem=extra_required_mem,
+        extra_projected_mem=extra_projected_mem,
         axis=axis,
         offsets=offsets,
     )
@@ -169,7 +169,7 @@ def permute_dims(x, /, axes):
     axes = tuple(d + x.ndim if d < 0 else d for d in axes)
 
     # extra memory copy due to Zarr enforcing C order on transposed array
-    extra_required_mem = x.chunkmem
+    extra_projected_mem = x.chunkmem
     return blockwise(
         np.transpose,
         axes,
@@ -177,7 +177,7 @@ def permute_dims(x, /, axes):
         tuple(range(x.ndim)),
         dtype=x.dtype,
         axes=axes,
-        extra_required_mem=extra_required_mem,
+        extra_projected_mem=extra_projected_mem,
     )
 
 
@@ -223,7 +223,7 @@ def reshape_chunks(x, shape, chunks):
     # TODO: check number of chunks is unchanged
 
     # memory allocated by reading one chunk from input array
-    extra_required_mem = x.chunkmem
+    extra_projected_mem = x.chunkmem
 
     return map_direct(
         _reshape_chunk,
@@ -231,7 +231,7 @@ def reshape_chunks(x, shape, chunks):
         shape=shape,
         dtype=x.dtype,
         chunks=outchunks,
-        extra_required_mem=extra_required_mem,
+        extra_projected_mem=extra_projected_mem,
         inchunks=inchunks,
         outchunks=outchunks,
     )
@@ -262,7 +262,7 @@ def stack(arrays, /, *, axis=0):
 
     # memory allocated by reading one chunk from an input array
     # (output is already catered for in blockwise)
-    extra_required_mem = a.chunkmem
+    extra_projected_mem = a.chunkmem
 
     return map_direct(
         _read_stack_chunk,
@@ -270,7 +270,7 @@ def stack(arrays, /, *, axis=0):
         shape=shape,
         dtype=dtype,
         chunks=chunks,
-        extra_required_mem=extra_required_mem,
+        extra_projected_mem=extra_projected_mem,
         axis=axis,
     )
 
diff --git a/cubed/core/array.py b/cubed/core/array.py
index db7a73d9..7f497514 100644
--- a/cubed/core/array.py
+++ b/cubed/core/array.py
@@ -1,6 +1,7 @@
 from dataclasses import dataclass
 from operator import mul
 from typing import Optional, TypeVar
+from warnings import warn
 
 import numpy as np
 from toolz import map, reduce
@@ -41,9 +42,11 @@ class CoreArray:
         self._chunks = normalize_chunks(
             zarray.chunks, shape=self.shape, dtype=self.dtype
         )
-        # if no spec is supplied, use a default with local temp dir, a modest amount of memory (100MB),
-        # and a conservative amount of reserved memory (200MB)
-        self.spec = spec or Spec(None, max_mem=100_000_000, reserved_mem=200_000_000)
+        # if no spec is supplied, use a default with local temp dir,
+        # and a modest amount of memory (200MB, of which 100MB is reserved)
+        self.spec = spec or Spec(
+            None, allowed_mem=200_000_000, reserved_mem=100_000_000
+        )
         self.plan = plan
 
     @property
@@ -191,12 +194,15 @@ class Spec:
     """The directory path (specified as an fsspec URL) used for storing intermediate data."""
 
     max_mem: Optional[int] = None
-    """The maximum memory available to a worker for data use for the computation, in bytes."""
+    """**Deprecated**. The maximum memory available to a worker for data use for the computation, in bytes."""
+
+    allowed_mem: Optional[int] = None
+    """The total memory available to a worker for running a task, in bytes.
 
-    reserved_mem: Optional[int] = None
-    """The memory reserved on a worker for non-data use, in bytes.
+    This includes any ``reserved_mem`` that has been set."""
 
-    The sum of ``max_mem`` and ``reserved_mem`` should not exceed the total memory of the worker.
+    reserved_mem: int = 0
+    """The memory reserved on a worker for non-data use when running a task, in bytes.
 
     See ``cubed.measure_reserved_memory``.
     """
@@ -207,6 +213,16 @@ class Spec:
     storage_options: dict = None  # type: ignore[assignment]
     """Storage options to be passed to fsspec"""
 
+    def __post_init__(self):
+        if self.max_mem is not None:
+            warn(
+                "`max_mem` is deprecated, please use `allowed_mem` instead",
+                DeprecationWarning,
+                stacklevel=2,
+            )
+        if self.allowed_mem is None:
+            self.allowed_mem = (self.max_mem or 0) + self.reserved_mem
+
 
 class Callback:
     """Object to receive callback events during array computation."""
diff --git a/cubed/core/gufunc.py b/cubed/core/gufunc.py
index 8b007fda..02e13733 100644
--- a/cubed/core/gufunc.py
+++ b/cubed/core/gufunc.py
@@ -26,7 +26,7 @@ def apply_gufunc(
     and multiple outputs are not supported.
 
     Cubed assumes that ``func`` will allocate a new output array. However, if it allocates more memory
-    than than, then you need to tell Cubed about it by setting the ``extra_required_mem`` parameter
+    than than, then you need to tell Cubed about it by setting the ``extra_projected_mem`` parameter
     to the amount needed in bytes (per task).
     """
 
diff --git a/cubed/core/ops.py b/cubed/core/ops.py
index d72c195e..ab2574e7 100644
--- a/cubed/core/ops.py
+++ b/cubed/core/ops.py
@@ -65,7 +65,7 @@ def from_array(x, chunks="auto", asarray=None, spec=None) -> "Array":
         shape=x.shape,
         dtype=x.dtype,
         chunks=outchunks,
-        extra_required_mem=0,
+        extra_projected_mem=0,
         spec=spec,
         outchunks=outchunks,
         asarray=asarray,
@@ -256,7 +256,7 @@ def blockwise(
     extra_source_arrays = kwargs.pop("extra_source_arrays", [])
     source_arrays = list(arrays) + list(extra_source_arrays)
 
-    extra_required_mem = kwargs.pop("extra_required_mem", 0)
+    extra_projected_mem = kwargs.pop("extra_projected_mem", 0)
 
     name = gensym()
     spec = check_array_specs(arrays)
@@ -266,7 +266,8 @@ def blockwise(
         func,
         out_ind,
         *zargs,
-        max_mem=spec.max_mem,
+        allowed_mem=spec.allowed_mem,
+        reserved_mem=spec.reserved_mem,
         target_store=target_store,
         shape=shape,
         dtype=dtype,
@@ -281,7 +282,7 @@ def blockwise(
         "blockwise",
         pipeline.target_array,
         pipeline,
-        pipeline.required_mem + extra_required_mem,
+        pipeline.projected_mem + extra_projected_mem,
         spec.reserved_mem,
         pipeline.num_tasks,
         *source_arrays,
@@ -358,7 +359,7 @@ def index(x, key):
     # memory allocated by reading one chunk from input array
     # note that although the output chunk will overlap multiple input chunks, zarr will
     # read the chunks in series, reusing the buffer
-    extra_required_mem = x.chunkmem
+    extra_projected_mem = x.chunkmem
 
     out = map_direct(
         _read_index_chunk,
@@ -366,7 +367,7 @@ def index(x, key):
         shape=shape,
         dtype=dtype,
         chunks=chunks,
-        extra_required_mem=extra_required_mem,
+        extra_projected_mem=extra_projected_mem,
         target_chunks=chunks,
         selection=selection,
     )
@@ -531,7 +532,7 @@ def _map_blocks(
 
 
 def map_direct(
-    func, *args: "Array", shape, dtype, chunks, extra_required_mem, spec=None, **kwargs
+    func, *args: "Array", shape, dtype, chunks, extra_projected_mem, spec=None, **kwargs
 ) -> "Array":
     """
     Map a function across blocks of a new array, using side-input arrays to read directly from.
@@ -549,9 +550,9 @@ def map_direct(
         The ``dtype`` of the output array.
     chunks : tuple
         Chunk shape of blocks in the output array.
-    extra_required_mem : int
-        Extra memory required (in bytes) for each map task. This should take into account the
-        memory requirements for any reads from the side-input arrays (``args``).
+    extra_projected_mem : int
+        Extra memory projected to be needed (in bytes) for each map task. This should take into account the
+        memory allocations for any reads from the side-input arrays (``args``).
     spec : Spec
         Specification for the new array. If not specified, the one from the first side input
         (`args`) will be used (if any).
@@ -580,7 +581,7 @@ def map_direct(
         dtype=dtype,
         chunks=chunks,
         extra_source_arrays=args,
-        extra_required_mem=extra_required_mem,
+        extra_projected_mem=extra_projected_mem,
         **kwargs,
     )
 
@@ -596,7 +597,8 @@ def rechunk(x, chunks, target_store=None):
     pipeline = primitive_rechunk(
         x.zarray,
         target_chunks=chunks,
-        max_mem=spec.max_mem,
+        allowed_mem=spec.allowed_mem,
+        reserved_mem=spec.reserved_mem,
         target_store=target_store,
         temp_store=temp_store,
     )
@@ -605,7 +607,7 @@ def rechunk(x, chunks, target_store=None):
         "rechunk",
         pipeline.target_array,
         pipeline,
-        pipeline.required_mem,
+        pipeline.projected_mem,
         spec.reserved_mem,
         pipeline.num_tasks,
         x,
@@ -639,7 +641,8 @@ def reduction(
     inds = tuple(range(x.ndim))
 
     result = x
-    max_mem = x.spec.max_mem
+    allowed_mem = x.spec.allowed_mem
+    max_mem = allowed_mem - x.spec.reserved_mem
 
     # reduce initial chunks (if any axis chunksize is > 1)
     if (
@@ -678,7 +681,7 @@ def reduction(
                     target_chunk_size = (max_mem - chunk_mem) // (chunk_mem * 4)
                     if target_chunk_size <= 1:
                         raise ValueError(
-                            f"Not enough memory for reduction. Increase max_mem ({max_mem}) or decrease chunk size"
+                            f"Not enough memory for reduction. Increase allowed_mem ({allowed_mem}) or decrease chunk size"
                         )
                     target_chunks[i] = min(s, target_chunk_size)
         _target_chunks = tuple(target_chunks)
diff --git a/cubed/core/plan.py b/cubed/core/plan.py
index cff4d1c9..7a4e7467 100644
--- a/cubed/core/plan.py
+++ b/cubed/core/plan.py
@@ -42,7 +42,7 @@ class Plan:
         op_name,
         target,
         pipeline=None,
-        required_mem=None,
+        projected_mem=None,
         reserved_mem=None,
         num_tasks=None,
         *source_arrays,
@@ -73,7 +73,7 @@ class Plan:
                 target=target,
                 stack_summaries=stack_summaries,
                 pipeline=pipeline,
-                required_mem=required_mem,
+                projected_mem=projected_mem,
                 reserved_mem=reserved_mem,
                 num_tasks=num_tasks,
             )
@@ -172,13 +172,13 @@ class Plan:
                     tasks += 1
         return tasks
 
-    def max_required_mem(self, optimize_graph=True):
-        """Return the maximum required memory (for a task) to execute this plan."""
+    def max_projected_mem(self, optimize_graph=True):
+        """Return the maximum projected memory across all tasks to execute this plan."""
         dag = self.optimize().dag if optimize_graph else self.dag.copy()
-        required_mem_values = [
-            node["pipeline"].required_mem for _, node in visit_nodes(dag)
+        projected_mem_values = [
+            node["pipeline"].projected_mem for _, node in visit_nodes(dag)
         ]
-        return max(required_mem_values) if len(required_mem_values) > 0 else 0
+        return max(projected_mem_values) if len(projected_mem_values) > 0 else 0
 
     def visualize(
         self, filename="cubed", format=None, rankdir="TB", optimize_graph=True
@@ -188,7 +188,7 @@ class Plan:
             "rankdir": rankdir,
             "label": (
                 f"num tasks: {self.num_tasks(optimize_graph=optimize_graph)}\n"
-                f"max required memory: {memory_repr(self.max_required_mem(optimize_graph=optimize_graph))}"
+                f"max projected memory: {memory_repr(self.max_projected_mem(optimize_graph=optimize_graph))}"
             ),
             "labelloc": "bottom",
             "labeljust": "left",
@@ -216,7 +216,7 @@ class Plan:
             )
             if "pipeline" in d:
                 pipeline = d["pipeline"]
-                tooltip += f"\ntask memory: {memory_repr(pipeline.required_mem)}"
+                tooltip += f"\nprojected memory: {memory_repr(pipeline.projected_mem)}"
                 tooltip += f"\ntasks: {pipeline.num_tasks}"
             if "stack_summaries" in d:
                 # add call stack information
diff --git a/cubed/extensions/history.py b/cubed/extensions/history.py
index 0a04761a..f27212f0 100644
--- a/cubed/extensions/history.py
+++ b/cubed/extensions/history.py
@@ -17,7 +17,7 @@ class HistoryCallback(Callback):
                 dict(
                     array_name=name,
                     op_name=node["op_name"],
-                    required_mem=pipeline.required_mem,
+                    projected_mem=pipeline.projected_mem,
                     reserved_mem=node["reserved_mem"],
                     num_tasks=pipeline.num_tasks,
                 )
@@ -46,16 +46,14 @@ class HistoryCallback(Callback):
 
 def analyze(plan_df, events_df):
     # convert memory to MB
-    plan_df["required_mem_mb"] = plan_df["required_mem"] / 1_000_000
+    plan_df["projected_mem_mb"] = plan_df["projected_mem"] / 1_000_000
     plan_df["reserved_mem_mb"] = plan_df["reserved_mem"] / 1_000_000
-    plan_df["total_mem_mb"] = plan_df["required_mem_mb"] + plan_df["reserved_mem_mb"]
     plan_df = plan_df[
         [
             "array_name",
             "op_name",
-            "required_mem_mb",
+            "projected_mem_mb",
             "reserved_mem_mb",
-            "total_mem_mb",
             "num_tasks",
         ]
     ]
@@ -78,10 +76,12 @@ def analyze(plan_df, events_df):
     df.columns = ["_".join(a).rstrip("_") for a in df.columns.to_flat_index()]
     df = df.merge(plan_df, on="array_name")
 
-    def utilization(row):
-        return row["peak_mem_end_mb_max"] / row["total_mem_mb"]
+    def projected_mem_utilization(row):
+        return row["peak_mem_end_mb_max"] / row["projected_mem_mb"]
 
-    df["utilization"] = df.apply(lambda row: utilization(row), axis=1)
+    df["projected_mem_utilization"] = df.apply(
+        lambda row: projected_mem_utilization(row), axis=1
+    )
     df = df[
         [
             "array_name",
@@ -90,10 +90,9 @@ def analyze(plan_df, events_df):
             "peak_mem_start_mb_max",
             "peak_mem_end_mb_max",
             "peak_mem_delta_mb_max",
-            "required_mem_mb",
+            "projected_mem_mb",
             "reserved_mem_mb",
-            "total_mem_mb",
-            "utilization",
+            "projected_mem_utilization",
         ]
     ]
 
diff --git a/cubed/primitive/blockwise.py b/cubed/primitive/blockwise.py
index 07344ea0..51343b84 100644
--- a/cubed/primitive/blockwise.py
+++ b/cubed/primitive/blockwise.py
@@ -81,7 +81,8 @@ def blockwise(
     func,
     out_ind,
     *args,
-    max_mem,
+    allowed_mem,
+    reserved_mem,
     target_store,
     shape,
     dtype,
@@ -101,8 +102,10 @@ def blockwise(
         Block pattern of the output, something like 'ijk' or (1, 2, 3)
     *args : sequence of Array, index pairs
         Sequence like (x, 'ij', y, 'jk', z, 'i')
-    max_mem : int
-        Maximum memory allowed for a single task of this operation, measured in bytes
+    allowed_mem : int
+        The memory available to a worker for running a task, in bytes. Includes ``reserved_mem``.
+    reserved_mem : int
+        The memory reserved on a worker for non-data use when running a task, in bytes
     target_store : string or zarr.Array
         Path to output Zarr store, or Zarr array
     shape : tuple
@@ -118,9 +121,7 @@ def blockwise(
 
     Returns
     -------
-    pipeline:  Pipeline to run the operation
-    target:  ArrayProxy for the Zarr array output
-    required_mem: minimum memory required per-task, in bytes
+    CubedPipeline to run the operation
     """
 
     # Use dask's make_blockwise_graph
@@ -189,29 +190,29 @@ def blockwise(
         )
     ]
 
-    # calculate memory requirement
-    required_mem = 0
+    # calculate projected memory
+    projected_mem = reserved_mem
     # inputs
     for array in arrays:  # inputs
         # memory for a compressed and an uncompressed input array chunk
         # - we assume compression has no effect (so it's an overestimate)
         # - ideally we'd be able to look at nbytes_stored,
         #   but this is not possible in general since the array has not been written yet
-        required_mem += chunk_memory(array.dtype, array.chunks) * 2
+        projected_mem += chunk_memory(array.dtype, array.chunks) * 2
     # output
     # memory for a compressed and an uncompressed output array chunk
     # - this assumes the blockwise function creates a new array)
     # - numcodecs uses a working output buffer that's the size of the array being compressed
-    required_mem += chunk_memory(dtype, chunksize) * 2
+    projected_mem += chunk_memory(dtype, chunksize) * 2
 
-    if required_mem > max_mem:
+    if projected_mem > allowed_mem:
         raise ValueError(
-            f"Blockwise memory ({required_mem}) exceeds max_mem ({max_mem})"
+            f"Projected blockwise memory ({projected_mem}) exceeds allowed_mem ({allowed_mem}), including reserved_mem ({reserved_mem})"
         )
 
     num_tasks = len(output_blocks)
 
-    return CubedPipeline(stages, spec, target_array, required_mem, num_tasks)
+    return CubedPipeline(stages, spec, target_array, projected_mem, num_tasks)
 
 
 # Code for fusing pipelines
@@ -261,10 +262,10 @@ def fuse(pipeline1, pipeline2):
     spec = BlockwiseSpec(fused_blockwise_func, fused_func, read_proxies, write_proxy)
 
     target_array = pipeline2.target_array
-    required_mem = max(pipeline1.required_mem, pipeline2.required_mem)
+    projected_mem = max(pipeline1.projected_mem, pipeline2.projected_mem)
     num_tasks = pipeline2.num_tasks
 
-    return CubedPipeline(stages, spec, target_array, required_mem, num_tasks)
+    return CubedPipeline(stages, spec, target_array, projected_mem, num_tasks)
 
 
 # blockwise functions
diff --git a/cubed/primitive/rechunk.py b/cubed/primitive/rechunk.py
index c6acf114..81e5fb3c 100644
--- a/cubed/primitive/rechunk.py
+++ b/cubed/primitive/rechunk.py
@@ -4,7 +4,9 @@ from cubed.runtime.pipeline import spec_to_pipeline
 from cubed.vendor.rechunker.api import _setup_rechunk
 
 
-def rechunk(source, target_chunks, max_mem, target_store, temp_store=None):
+def rechunk(
+    source, target_chunks, allowed_mem, reserved_mem, target_store, temp_store=None
+):
     """Rechunk a Zarr array to have target_chunks.
 
     Parameters
@@ -12,8 +14,10 @@ def rechunk(source, target_chunks, max_mem, target_store, temp_store=None):
     source : Zarr array
     target_chunks : tuple
         The desired chunks of the array after rechunking.
-    max_mem : int
-        Maximum memory allowed for a single task of this operation, measured in bytes
+    allowed_mem : int
+        The memory available to a worker for running a task, in bytes. Includes ``reserved_mem``.
+    reserved_mem : int
+        The memory reserved on a worker for non-data use when running a task, in bytes
     target_store : str
         Path to output Zarr store.
     temp_store : str, optional
@@ -21,19 +25,17 @@ def rechunk(source, target_chunks, max_mem, target_store, temp_store=None):
 
     Returns
     -------
-    pipeline:  Pipeline to run the operation
-    target:  Array for the Zarr array output
-    required_mem: minimum memory required per-task, in bytes
+    CubedPipeline to run the operation
     """
 
     # rechunker doesn't take account of uncompressed and compressed copies of the
     # input and output array chunk/selection, so adjust appropriately
-    adjusted_max_mem = max_mem / 4
+    rechunker_max_mem = (allowed_mem - reserved_mem) / 4
 
     copy_specs, intermediate, target = _setup_rechunk(
         source=source,
         target_chunks=target_chunks,
-        max_mem=adjusted_max_mem,
+        max_mem=rechunker_max_mem,
         target_store=target_store,
         temp_store=temp_store,
     )
@@ -47,7 +49,9 @@ def rechunk(source, target_chunks, max_mem, target_store, temp_store=None):
     if intermediate is not None:
         num_tasks += total_chunks(copy_spec.read.array.shape, copy_spec.read.chunks)
 
-    return spec_to_pipeline(copy_spec, target, max_mem, num_tasks)
+    # we assume that rechunker is going to use all the memory it is allowed to
+    projected_mem = allowed_mem
+    return spec_to_pipeline(copy_spec, target, projected_mem, num_tasks)
 
 
 def total_chunks(shape, chunks):
diff --git a/cubed/primitive/types.py b/cubed/primitive/types.py
index 2c00dcb0..c5ab7e42 100644
--- a/cubed/primitive/types.py
+++ b/cubed/primitive/types.py
@@ -11,5 +11,5 @@ class CubedPipeline:
     stages: Iterable[Stage]
     config: Config
     target_array: Any
-    required_mem: int
+    projected_mem: int
     num_tasks: int
diff --git a/cubed/random.py b/cubed/random.py
index 3b19aa11..04148429 100644
--- a/cubed/random.py
+++ b/cubed/random.py
@@ -17,16 +17,16 @@ def random(size, *, chunks=None, spec=None):
     numblocks = tuple(map(len, chunks))
     root_seed = pyrandom.getrandbits(128)
 
-    # no extra memory required since input is an empty array whose
+    # no extra memory is projected to be needed since input is an empty array whose
     # memory is never allocated, see https://pythonspeed.com/articles/measuring-memory-python/#phantom-memory
-    extra_required_mem = 0
+    extra_projected_mem = 0
 
     return map_direct(
         _random,
         shape=shape,
         dtype=dtype,
         chunks=chunks,
-        extra_required_mem=extra_required_mem,
+        extra_projected_mem=extra_projected_mem,
         spec=spec,
         numblocks=numblocks,
         root_seed=root_seed,
diff --git a/cubed/runtime/pipeline.py b/cubed/runtime/pipeline.py
index f14c132b..099ebe84 100644
--- a/cubed/runtime/pipeline.py
+++ b/cubed/runtime/pipeline.py
@@ -63,7 +63,7 @@ def copy_intermediate_to_write(chunk_key, *, config=CopySpec):
 
 
 def spec_to_pipeline(
-    spec: CopySpec, target_array: Any, max_mem: int, num_tasks: int
+    spec: CopySpec, target_array: Any, projected_mem: int, num_tasks: int
 ) -> CubedPipeline:
     # typing won't work until we start using numpy types
     shape = spec.read.array.shape  # type: ignore
@@ -88,7 +88,7 @@ def spec_to_pipeline(
                 mappable=ChunkKeys(shape, spec.write.chunks),
             ),
         ]
-    return CubedPipeline(stages, spec, target_array, max_mem, num_tasks)
+    return CubedPipeline(stages, spec, target_array, projected_mem, num_tasks)
 
 
 def already_computed(node_dict):
diff --git a/docs/computation.md b/docs/computation.md
index 84c74311..90469491 100644
--- a/docs/computation.md
+++ b/docs/computation.md
@@ -11,13 +11,17 @@ A `Plan` object is a directed acyclic graph (DAG), where the nodes are arrays an
 
 The primitive operations, `blockwise` and `rechunk` both have memory requirements that are known ahead of time. Each operation runs a _task_ to compute each chunk of the output. The memory needed for each task is a function of chunk size, dtype, and the nature of the operation, which can be computed while building the plan.
 
-While it is not possible in general to compute the precise amount of memory that will be used (since it is not known ahead of time how well a Zarr chunk will compress), it is possible to put a conservative upper bound on the memory usage. This upper bound is the `required_mem` for a task, and it is calculated automatically by Cubed.
+While it is not possible in general to compute the precise amount of memory that will be used (since it is not known ahead of time how well a Zarr chunk will compress), it is possible to put a conservative upper bound on the memory usage. This upper bound is the `projected_mem` for a task, and it is calculated automatically by Cubed.
 
 ![Memory](images/memory.svg)
 
-The maximum amount of memory that tasks are allowed to use must be specified by the user. This is done by setting the `reserved_mem` and `max_mem` parameters on the `Spec` object. The `reserved_mem` is the amount of memory reserved on a worker for non-data use - it's whatever is needed by the Python process for running a task, and can be estimated using the `measure_reserved_memory` function. The `max_mem` setting is the memory available to a worker for data use - for loading arrays into memory and processing them. It can be set to be the total memory available to a worker, less the `reserved_mem`.
+The maximum amount of memory that tasks are allowed to use must be specified by the user. This is done by setting the `allowed_mem` parameter on the `Spec` object.
 
-If the `required_mem` calculated by Cubed is greater than the value of `max_mem` set by the user, an exception is raised during the planning phase. This check means that the user can have high confidence that the operation will run within its memory budget.
+If the `projected_mem` calculated by Cubed is greater than the value of `allowed_mem` set by the user, an exception is raised during the planning phase. This check means that the user can have high confidence that the operation will run within its memory budget.
+
+It is also a good idea to set `reserved_mem`, the amount of memory reserved on a worker for non-data use - it's whatever is needed by the Python process for running a task, and can be estimated using the `measure_reserved_memory` function. Cubed will use `reserved_mem` as a baseline when calculating `projected_mem`, in order to more accurately estimate the upper bound on memory usage.
+
+The actual (peak) memory usage of each task in a computation can be measured at runtime and analysed to see how well the projected memory matched `peak_measured_mem`. See `HistoryCallback` for details.
 
 ## Execution
 
diff --git a/docs/getting_started.md b/docs/getting_started.md
index f5f8e5b2..21f2c2dc 100644
--- a/docs/getting_started.md
+++ b/docs/getting_started.md
@@ -2,12 +2,37 @@
 
 ## Installation
 
-Install Cubed with pip:
+### Conda
+
+You can install cubed with a minimal set of dependencies using conda:
+
+```shell
+conda install -c conda-forge cubed
+```
+
+### Pip
+
+You can also install cubed with pip:
 
 ```shell
 python -m pip install cubed
 ```
 
+Cubed has many optional dependencies, which can be installed in sets for different functionality (especially for running on different executors):
+
+    $ python -m pip install "cubed[diagnostics]"  # Install optional dependencies for cubed diagnostics
+    $ python -m pip install "cubed[beam]"         # Install optional dependencies for the beam executor
+    $ python -m pip install "cubed[lithops]"      # Install optional dependencies for the lithops executor
+    $ python -m pip install "cubed[modal]"        # Install optional dependencies for the modal executor
+
+To see the full list of which packages are installed with which options see `[project.optional_dependencies]` in `pyproject.toml`:
+```{eval-rst}
+.. literalinclude:: ../pyproject.toml
+   :language: ini
+   :start-at: [project.optional-dependencies]
+   :end-before: [project.urls]
+```
+
 ## Example
 
 Start with a simple example that runs using the local Python executor.
@@ -15,7 +40,7 @@ Start with a simple example that runs using the local Python executor.
 ```python
 >>> import cubed.array_api as xp
 >>> import cubed.random
->>> spec = cubed.Spec(work_dir="tmp", max_mem=100_000)
+>>> spec = cubed.Spec(work_dir="tmp", allowed_mem=100_000)
 >>> a = cubed.random.random((4, 4), chunks=(2, 2), spec=spec)
 >>> b = cubed.random.random((4, 4), chunks=(2, 2), spec=spec)
 >>> c = xp.matmul(a, b)
diff --git a/docs/images/memory.svg b/docs/images/memory.svg
index c012e018..411c08b8 100644
--- a/docs/images/memory.svg
+++ b/docs/images/memory.svg
@@ -1,1 +1,1 @@
-<svg version="1.1" viewBox="0.0 0.0 937.8215223097113 631.5459317585302" fill="none" stroke="none" stroke-linecap="square" stroke-miterlimit="10" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns="http://www.w3.org/2000/svg"><clipPath id="p.0"><path d="m0 0l937.82153 0l0 631.54596l-937.82153 0l0 -631.54596z" clip-rule="nonzero"/></clipPath><g clip-path="url(#p.0)"><path fill="#000000" fill-opacity="0.0" d="m0 0l937.82153 0l0 631.54596l-937.82153 0z" fill-rule="evenodd"/><path fill="#000000" fill-opacity="0.0" d="m7.624672 13.3149605l440.37796 0l0 601.10236l-440.37796 0z" fill-rule="evenodd"/><path stroke="#000000" stroke-width="1.0" stroke-linejoin="round" stroke-linecap="butt" d="m7.624672 13.3149605l440.37796 0l0 601.10236l-440.37796 0z" fill-rule="evenodd"/><path fill="#cfe2f3" d="m36.14173 116.03937l384.0 0l0 384.0l-384.0 0z" fill-rule="evenodd"/><path stroke="#000000" stroke-width="1.0" stroke-linejoin="round" stroke-linecap="butt" d="m36.14173 116.03937l384.0 0l0 384.0l-384.0 0z" fill-rule="evenodd"/><path fill="#d9d2e9" d="m36.157482 500.29135l384.0 0l0 88.44095l-384.0 0z" fill-rule="evenodd"/><path stroke="#000000" stroke-width="1.0" stroke-linejoin="round" stroke-linecap="butt" d="m36.157482 500.29135l384.0 0l0 88.44095l-384.0 0z" fill-rule="evenodd"/><path fill="#000000" d="m139.61687 542.2993l0 1.65625q1.6875 -1.203125 2.65625 -1.609375q0.96875 -0.40625 1.8125 -0.40625q1.3125 0 2.53125 0.96875q0.828125 0.640625 0.828125 1.328125q0 0.5625 -0.40625 0.96875q-0.390625 0.390625 -0.953125 0.390625q-0.484375 0 -1.03125 -0.484375q-0.546875 -0.5 -0.984375 -0.5q-0.546875 0 -1.671875 0.703125q-1.109375 0.703125 -2.78125 2.109375l0 4.015625l3.8125 0q0.953125 0 1.359375 0.375q0.421875 0.375 0.421875 0.96875q0 0.59375 -0.421875 0.96875q-0.40625 0.359375 -1.359375 0.359375l-8.0625 0q-0.96875 0 -1.375 -0.359375q-0.40625 -0.375 -0.40625 -0.984375q0 -0.578125 0.40625 -0.953125q0.40625 -0.375 1.375 -0.375l1.59375 0l0 -6.484375l-0.96875 0q-0.96875 0 -1.375 -0.359375q-0.40625 -0.375 -0.40625 -0.96875q0 -0.59375 0.40625 -0.953125q0.40625 -0.375 1.375 -0.375l3.625 0zm23.246353 7.25l-10.9375 0q0.421875 1.046875 1.46875 1.6875q1.0625 0.640625 2.875 0.640625q1.484375 0 3.953125 -0.640625q1.015625 -0.265625 1.390625 -0.265625q0.546875 0 0.90625 0.390625q0.359375 0.375 0.359375 0.9375q0 0.53125 -0.390625 0.890625q-0.515625 0.484375 -2.53125 0.921875q-2.015625 0.421875 -3.875 0.421875q-3.203125 0 -5.125 -1.796875q-1.921875 -1.8125 -1.921875 -4.453125q0 -2.8125 2.078125 -4.578125q2.078125 -1.765625 4.78125 -1.765625q1.625 0 2.984375 0.578125q1.359375 0.5625 2.03125 1.234375q0.9375 0.96875 1.546875 2.375q0.40625 1.0 0.40625 2.296875l0 1.125zm-2.953125 -2.65625q-0.609375 -1.15625 -1.59375 -1.71875q-0.984375 -0.5625 -2.359375 -0.5625q-1.34375 0 -2.34375 0.5625q-0.984375 0.5625 -1.609375 1.71875l7.90625 0zm15.136978 -1.46875q-0.640625 -0.40625 -1.359375 -0.609375q-0.71875 -0.203125 -1.5 -0.203125q-1.546875 0 -2.453125 0.5q-0.40625 0.234375 -0.40625 0.484375q0 0.296875 0.546875 0.59375q0.421875 0.203125 1.859375 0.40625q2.65625 0.359375 3.703125 0.71875q1.359375 0.484375 2.09375 1.4375q0.75 0.953125 0.75 2.0q0 1.4375 -1.265625 2.390625q-1.8125 1.390625 -4.703125 1.390625q-1.15625 0 -2.140625 -0.203125q-0.96875 -0.1875 -1.796875 -0.578125q-0.1875 0.171875 -0.421875 0.265625q-0.21875 0.078125 -0.453125 0.078125q-0.625 0 -1.0 -0.40625q-0.359375 -0.40625 -0.359375 -1.375l0 -0.890625q0 -0.96875 0.359375 -1.375q0.375 -0.421875 0.984375 -0.421875q0.46875 0 0.796875 0.28125q0.328125 0.265625 0.515625 0.90625q0.609375 0.53125 1.46875 0.796875q0.859375 0.265625 1.96875 0.265625q1.84375 0 2.859375 -0.578125q0.484375 -0.28125 0.484375 -0.59375q0 -0.53125 -0.6875 -0.859375q-0.703125 -0.34375 -2.859375 -0.578125q-3.21875 -0.34375 -4.296875 -1.296875q-1.078125 -0.953125 -1.078125 -2.34375q0 -1.4375 1.21875 -2.390625q1.640625 -1.296875 4.28125 -1.296875q0.9375 0 1.78125 0.1875q0.859375 0.171875 1.640625 0.53125q0.25 -0.1875 0.453125 -0.265625q0.21875 -0.09375 0.40625 -0.09375q0.546875 0 0.90625 0.40625q0.359375 0.40625 0.359375 1.375l0 0.640625q0 0.875 -0.203125 1.1875q-0.421875 0.609375 -1.125 0.609375q-0.484375 0 -0.859375 -0.296875q-0.359375 -0.3125 -0.46875 -0.796875zm19.808853 4.125l-10.9375 0q0.421875 1.046875 1.46875 1.6875q1.0625 0.640625 2.875 0.640625q1.484375 0 3.953125 -0.640625q1.015625 -0.265625 1.390625 -0.265625q0.546875 0 0.90625 0.390625q0.359375 0.375 0.359375 0.9375q0 0.53125 -0.390625 0.890625q-0.515625 0.484375 -2.53125 0.921875q-2.015625 0.421875 -3.875 0.421875q-3.203125 0 -5.125 -1.796875q-1.921875 -1.8125 -1.921875 -4.453125q0 -2.8125 2.078125 -4.578125q2.078125 -1.765625 4.78125 -1.765625q1.625 0 2.984375 0.578125q1.359375 0.5625 2.03125 1.234375q0.9375 0.96875 1.546875 2.375q0.40625 1.0 0.40625 2.296875l0 1.125zm-2.953125 -2.65625q-0.609375 -1.15625 -1.59375 -1.71875q-0.984375 -0.5625 -2.359375 -0.5625q-1.34375 0 -2.34375 0.5625q-0.984375 0.5625 -1.609375 1.71875l7.90625 0zm11.699478 -4.59375l0 1.65625q1.6875 -1.203125 2.65625 -1.609375q0.96875 -0.40625 1.8125 -0.40625q1.3125 0 2.53125 0.96875q0.828125 0.640625 0.828125 1.328125q0 0.5625 -0.40625 0.96875q-0.390625 0.390625 -0.953125 0.390625q-0.484375 0 -1.03125 -0.484375q-0.546875 -0.5 -0.984375 -0.5q-0.546875 0 -1.671875 0.703125q-1.109375 0.703125 -2.78125 2.109375l0 4.015625l3.8125 0q0.953125 0 1.359375 0.375q0.421875 0.375 0.421875 0.96875q0 0.59375 -0.421875 0.96875q-0.40625 0.359375 -1.359375 0.359375l-8.0625 0q-0.96875 0 -1.375 -0.359375q-0.40625 -0.375 -0.40625 -0.984375q0 -0.578125 0.40625 -0.953125q0.40625 -0.375 1.375 -0.375l1.59375 0l0 -6.484375l-0.96875 0q-0.96875 0 -1.375 -0.359375q-0.40625 -0.375 -0.40625 -0.96875q0 -0.59375 0.40625 -0.953125q0.40625 -0.375 1.375 -0.375l3.625 0zm16.574478 8.578125l2.875 -5.921875q-1.0625 0 -1.359375 -0.171875q-0.65625 -0.40625 -0.65625 -1.15625q0 -0.59375 0.40625 -0.953125q0.421875 -0.375 1.375 -0.375l3.65625 0q0.96875 0 1.375 0.375q0.40625 0.359375 0.40625 0.953125q0 0.59375 -0.40625 0.96875q-0.40625 0.359375 -1.375 0.359375l-0.4375 0l-4.46875 9.15625l-2.78125 0l-4.46875 -9.15625l-0.375 0q-0.96875 0 -1.375 -0.359375q-0.40625 -0.375 -0.40625 -0.96875q0 -0.59375 0.40625 -0.953125q0.40625 -0.375 1.375 -0.375l3.578125 0q0.953125 0 1.359375 0.375q0.40625 0.359375 0.40625 0.953125q0 0.75 -0.609375 1.140625q-0.3125 0.1875 -1.40625 0.1875l2.90625 5.921875zm22.668228 -1.328125l-10.9375 0q0.421875 1.046875 1.46875 1.6875q1.0625 0.640625 2.875 0.640625q1.484375 0 3.953125 -0.640625q1.015625 -0.265625 1.390625 -0.265625q0.546875 0 0.90625 0.390625q0.359375 0.375 0.359375 0.9375q0 0.53125 -0.390625 0.890625q-0.515625 0.484375 -2.53125 0.921875q-2.015625 0.421875 -3.875 0.421875q-3.203125 0 -5.125 -1.796875q-1.921875 -1.8125 -1.921875 -4.453125q0 -2.8125 2.078125 -4.578125q2.078125 -1.765625 4.78125 -1.765625q1.625 0 2.984375 0.578125q1.359375 0.5625 2.03125 1.234375q0.9375 0.96875 1.546875 2.375q0.40625 1.0 0.40625 2.296875l0 1.125zm-2.953125 -2.65625q-0.609375 -1.15625 -1.59375 -1.71875q-0.984375 -0.5625 -2.359375 -0.5625q-1.34375 0 -2.34375 0.5625q-0.984375 0.5625 -1.609375 1.71875l7.90625 0zm18.386978 -9.65625l0 14.203125l0.453125 0q0.953125 0 1.359375 0.375q0.421875 0.375 0.421875 0.96875q0 0.59375 -0.40625 0.96875q-0.40625 0.359375 -1.375 0.359375l-3.125 0l0 -0.65625q-0.90625 0.546875 -1.90625 0.8125q-1.0 0.265625 -2.0625 0.265625q-3.0 0 -4.84375 -1.734375q-1.828125 -1.734375 -1.828125 -4.328125q0 -2.703125 1.921875 -4.609375q1.921875 -1.921875 4.703125 -1.921875q1.03125 0 2.03125 0.328125q1.015625 0.3125 1.984375 0.953125l0 -3.328125l-0.453125 0q-0.96875 0 -1.375 -0.359375q-0.40625 -0.375 -0.40625 -0.96875q0 -0.59375 0.40625 -0.953125q0.40625 -0.375 1.375 -0.375l3.125 0zm-2.671875 11.3125q0 -1.640625 -1.15625 -2.78125q-1.15625 -1.15625 -2.84375 -1.15625q-1.65625 0 -2.828125 1.15625q-1.15625 1.140625 -1.15625 2.75q0 1.46875 1.046875 2.421875q1.046875 0.9375 2.9375 0.9375q1.890625 0 2.9375 -0.9375q1.0625 -0.953125 1.0625 -2.390625zm19.933838 13.5625l-14.65625 0q-0.96875 0 -1.375 -0.359375q-0.40625 -0.359375 -0.40625 -0.96875q0 -0.59375 0.40625 -0.96875q0.40625 -0.359375 1.375 -0.359375l14.65625 0q0.9375 0 1.34375 0.359375q0.421875 0.375 0.421875 0.96875q0 0.59375 -0.40625 0.953125q-0.40625 0.375 -1.359375 0.375zm4.4807434 -19.8125l0 0.75q0.65625 -0.640625 1.171875 -0.875q0.53125 -0.25 1.234375 -0.25q0.578125 0 1.140625 0.296875q0.578125 0.28125 1.125 0.859375q0.6875 -0.578125 1.390625 -0.859375q0.71875 -0.28125 1.46875 -0.28125q1.484375 0 2.40625 0.796875q1.21875 1.046875 1.21875 2.734375l0 5.96875q0.828125 0 1.234375 0.390625q0.40625 0.375 0.40625 0.953125q0 0.59375 -0.40625 0.96875q-0.40625 0.359375 -1.359375 0.359375l-2.546875 0l0 -8.421875q0 -0.609375 -0.21875 -0.84375q-0.21875 -0.234375 -0.671875 -0.234375q-0.4375 0 -0.828125 0.234375q-0.46875 0.328125 -1.171875 1.21875l0 5.375q0.84375 0 1.234375 0.390625q0.40625 0.375 0.40625 0.953125q0 0.59375 -0.40625 0.96875q-0.390625 0.359375 -1.359375 0.359375l-2.53125 0l0 -8.421875q0 -0.59375 -0.234375 -0.828125q-0.21875 -0.25 -0.6875 -0.25q-0.46875 0 -0.921875 0.296875q-0.453125 0.28125 -1.09375 1.15625l0 5.375q0.84375 0 1.25 0.390625q0.40625 0.375 0.40625 0.953125q0 0.59375 -0.40625 0.96875q-0.40625 0.359375 -1.375 0.359375l-2.40625 0q-0.96875 0 -1.375 -0.359375q-0.40625 -0.375 -0.40625 -0.984375q0 -0.578125 0.40625 -0.953125q0.390625 -0.375 1.234375 -0.375l0 -6.484375q-0.84375 0 -1.234375 -0.375q-0.40625 -0.375 -0.40625 -0.953125q0 -0.59375 0.40625 -0.953125q0.40625 -0.375 1.375 -0.375l2.53125 0zm26.808838 7.25l-10.9375 0q0.421875 1.046875 1.46875 1.6875q1.0625 0.640625 2.875 0.640625q1.484375 0 3.953125 -0.640625q1.015625 -0.265625 1.390625 -0.265625q0.546875 0 0.90625 0.390625q0.359375 0.375 0.359375 0.9375q0 0.53125 -0.390625 0.890625q-0.515625 0.484375 -2.53125 0.921875q-2.015625 0.421875 -3.875 0.421875q-3.203125 0 -5.125 -1.796875q-1.921875 -1.8125 -1.921875 -4.453125q0 -2.8125 2.078125 -4.578125q2.078125 -1.765625 4.78125 -1.765625q1.625 0 2.984375 0.578125q1.359375 0.5625 2.03125 1.234375q0.9375 0.96875 1.546875 2.375q0.40625 1.0 0.40625 2.296875l0 1.125zm-2.953125 -2.65625q-0.609375 -1.15625 -1.59375 -1.71875q-0.984375 -0.5625 -2.359375 -0.5625q-1.34375 0 -2.34375 0.5625q-0.984375 0.5625 -1.609375 1.71875l7.90625 0zm8.136963 -4.59375l0 0.75q0.65625 -0.640625 1.171875 -0.875q0.53125 -0.25 1.234375 -0.25q0.578125 0 1.140625 0.296875q0.578125 0.28125 1.125 0.859375q0.6875 -0.578125 1.390625 -0.859375q0.71875 -0.28125 1.46875 -0.28125q1.484375 0 2.40625 0.796875q1.21875 1.046875 1.21875 2.734375l0 5.96875q0.828125 0 1.234375 0.390625q0.40625 0.375 0.40625 0.953125q0 0.59375 -0.40625 0.96875q-0.40625 0.359375 -1.359375 0.359375l-2.546875 0l0 -8.421875q0 -0.609375 -0.21875 -0.84375q-0.21875 -0.234375 -0.671875 -0.234375q-0.4375 0 -0.828125 0.234375q-0.46875 0.328125 -1.171875 1.21875l0 5.375q0.84375 0 1.234375 0.390625q0.40625 0.375 0.40625 0.953125q0 0.59375 -0.40625 0.96875q-0.390625 0.359375 -1.359375 0.359375l-2.53125 0l0 -8.421875q0 -0.59375 -0.234375 -0.828125q-0.21875 -0.25 -0.6875 -0.25q-0.46875 0 -0.921875 0.296875q-0.453125 0.28125 -1.09375 1.15625l0 5.375q0.84375 0 1.25 0.390625q0.40625 0.375 0.40625 0.953125q0 0.59375 -0.40625 0.96875q-0.40625 0.359375 -1.375 0.359375l-2.40625 0q-0.96875 0 -1.375 -0.359375q-0.40625 -0.375 -0.40625 -0.984375q0 -0.578125 0.40625 -0.953125q0.390625 -0.375 1.234375 -0.375l0 -6.484375q-0.84375 0 -1.234375 -0.375q-0.40625 -0.375 -0.40625 -0.953125q0 -0.59375 0.40625 -0.953125q0.40625 -0.375 1.375 -0.375l2.53125 0z" fill-rule="nonzero"/><path fill="#d9ead3" d="m92.47769 216.12862l263.71652 0l0 263.71655l-263.71652 0z" fill-rule="evenodd"/><path stroke="#000000" stroke-width="1.0" stroke-linejoin="round" stroke-linecap="butt" d="m92.47769 216.12862l263.71652 0l0 263.71655l-263.71652 0z" fill-rule="evenodd"/><path fill="#000000" d="m135.79533 345.77438l0 1.65625q1.6875 -1.203125 2.65625 -1.609375q0.96875 -0.40625 1.8125 -0.40625q1.3125 0 2.53125 0.96875q0.828125 0.640625 0.828125 1.328125q0 0.5625 -0.40625 0.96875q-0.390625 0.390625 -0.953125 0.390625q-0.484375 0 -1.03125 -0.484375q-0.546875 -0.5 -0.984375 -0.5q-0.546875 0 -1.671875 0.703125q-1.109375 0.703125 -2.78125 2.109375l0 4.015625l3.8125 0q0.953125 0 1.359375 0.375q0.421875 0.375 0.421875 0.96875q0 0.59375 -0.421875 0.96875q-0.40625 0.359375 -1.359375 0.359375l-8.0625 0q-0.96875 0 -1.375 -0.359375q-0.40625 -0.375 -0.40625 -0.984375q0 -0.578125 0.40625 -0.953125q0.40625 -0.375 1.375 -0.375l1.59375 0l0 -6.484375l-0.96875 0q-0.96875 0 -1.375 -0.359375q-0.40625 -0.375 -0.40625 -0.96875q0 -0.59375 0.40625 -0.953125q0.40625 -0.375 1.375 -0.375l3.625 0zm23.246353 7.25l-10.9375 0q0.421875 1.046875 1.46875 1.6875q1.0625 0.640625 2.875 0.640625q1.484375 0 3.953125 -0.640625q1.015625 -0.265625 1.390625 -0.265625q0.546875 0 0.90625 0.390625q0.359375 0.375 0.359375 0.9375q0 0.53125 -0.390625 0.890625q-0.515625 0.484375 -2.53125 0.921875q-2.015625 0.421875 -3.875 0.421875q-3.203125 0 -5.125 -1.796875q-1.921875 -1.8125 -1.921875 -4.453125q0 -2.8125 2.078125 -4.578125q2.078125 -1.765625 4.78125 -1.765625q1.625 0 2.984375 0.578125q1.359375 0.5625 2.03125 1.234375q0.9375 0.96875 1.546875 2.375q0.40625 1.0 0.40625 2.296875l0 1.125zm-2.953125 -2.65625q-0.609375 -1.15625 -1.59375 -1.71875q-0.984375 -0.5625 -2.359375 -0.5625q-1.34375 0 -2.34375 0.5625q-0.984375 0.5625 -1.609375 1.71875l7.90625 0zm18.449478 -1.9375l0 12.0625l0.46875 0q0.953125 0 1.359375 0.359375q0.40625 0.375 0.40625 0.984375q0 0.578125 -0.40625 0.953125q-0.390625 0.375 -1.359375 0.375l-4.71875 0q-0.96875 0 -1.390625 -0.375q-0.40625 -0.375 -0.40625 -0.953125q0 -0.609375 0.40625 -0.984375q0.421875 -0.359375 1.390625 -0.359375l1.578125 0l0 -4.375q-0.96875 0.59375 -1.984375 0.90625q-1.0 0.296875 -2.03125 0.296875q-2.390625 0 -4.28125 -1.4375q-2.28125 -1.71875 -2.28125 -4.359375q0 -2.390625 1.921875 -4.25q1.9375 -1.859375 4.671875 -1.859375q1.0625 0 2.046875 0.3125q1.0 0.3125 1.9375 0.953125l0 -0.90625l3.140625 0q0.953125 0 1.359375 0.375q0.40625 0.359375 0.40625 0.953125q0 0.59375 -0.40625 0.96875q-0.390625 0.359375 -1.359375 0.359375l-0.46875 0zm-2.671875 3.109375q0 -0.5625 -0.4375 -1.421875q-0.4375 -0.875 -1.375 -1.453125q-0.921875 -0.578125 -2.140625 -0.578125q-2.0 0 -3.15625 1.5q-0.796875 1.03125 -0.796875 1.96875q0 1.078125 1.140625 2.09375q1.140625 1.0 2.8125 1.0q1.6875 0 2.8125 -1.0q1.140625 -1.015625 1.140625 -2.109375zm18.152603 -5.765625l0 9.140625q0.84375 0 1.234375 0.390625q0.40625 0.375 0.40625 0.953125q0 0.59375 -0.40625 0.96875q-0.40625 0.359375 -1.375 0.359375l-2.53125 0l0 -0.609375q-1.140625 0.515625 -2.1875 0.765625q-1.046875 0.265625 -1.984375 0.265625q-1.3125 0 -2.28125 -0.546875q-0.953125 -0.546875 -1.515625 -1.53125q-0.40625 -0.703125 -0.40625 -1.75l0 -5.75l-0.453125 0q-0.96875 0 -1.375 -0.359375q-0.40625 -0.375 -0.40625 -0.96875q0 -0.59375 0.40625 -0.953125q0.40625 -0.375 1.375 -0.375l3.125 0l0 7.9375q0 0.84375 0.40625 1.25q0.421875 0.390625 1.265625 0.390625q0.796875 0 1.71875 -0.3125q0.9375 -0.328125 2.3125 -1.15625l0 -5.453125l-0.96875 0q-0.953125 0 -1.375 -0.359375q-0.40625 -0.375 -0.40625 -0.96875q0 -0.59375 0.40625 -0.953125q0.421875 -0.375 1.375 -0.375l3.640625 0zm11.277603 -5.0625l0 2.8125l-3.171875 0l0 -2.8125l3.171875 0zm0.359375 5.0625l0 9.140625l3.203125 0q0.96875 0 1.375 0.375q0.40625 0.375 0.40625 0.96875q0 0.59375 -0.40625 0.96875q-0.40625 0.359375 -1.375 0.359375l-9.0625 0q-0.96875 0 -1.375 -0.359375q-0.40625 -0.375 -0.40625 -0.984375q0 -0.578125 0.40625 -0.953125q0.40625 -0.375 1.375 -0.375l3.203125 0l0 -6.484375l-2.15625 0q-0.953125 0 -1.375 -0.359375q-0.40625 -0.375 -0.40625 -0.96875q0 -0.59375 0.40625 -0.953125q0.421875 -0.375 1.375 -0.375l4.8125 0zm14.121353 0l0 1.65625q1.6875 -1.203125 2.65625 -1.609375q0.96875 -0.40625 1.8125 -0.40625q1.3125 0 2.53125 0.96875q0.828125 0.640625 0.828125 1.328125q0 0.5625 -0.40625 0.96875q-0.390625 0.390625 -0.953125 0.390625q-0.484375 0 -1.03125 -0.484375q-0.546875 -0.5 -0.984375 -0.5q-0.546875 0 -1.671875 0.703125q-1.109375 0.703125 -2.78125 2.109375l0 4.015625l3.8125 0q0.953125 0 1.359375 0.375q0.421875 0.375 0.421875 0.96875q0 0.59375 -0.421875 0.96875q-0.40625 0.359375 -1.359375 0.359375l-8.0625 0q-0.96875 0 -1.375 -0.359375q-0.40625 -0.375 -0.40625 -0.984375q0 -0.578125 0.40625 -0.953125q0.40625 -0.375 1.375 -0.375l1.59375 0l0 -6.484375l-0.96875 0q-0.96875 0 -1.375 -0.359375q-0.40625 -0.375 -0.40625 -0.96875q0 -0.59375 0.40625 -0.953125q0.40625 -0.375 1.375 -0.375l3.625 0zm23.246368 7.25l-10.9375 0q0.421875 1.046875 1.46875 1.6875q1.0625 0.640625 2.875 0.640625q1.484375 0 3.953125 -0.640625q1.015625 -0.265625 1.390625 -0.265625q0.546875 0 0.90625 0.390625q0.359375 0.375 0.359375 0.9375q0 0.53125 -0.390625 0.890625q-0.515625 0.484375 -2.53125 0.921875q-2.015625 0.421875 -3.875 0.421875q-3.203125 0 -5.125 -1.796875q-1.921875 -1.8125 -1.921875 -4.453125q0 -2.8125 2.078125 -4.578125q2.078125 -1.765625 4.78125 -1.765625q1.625 0 2.984375 0.578125q1.359375 0.5625 2.03125 1.234375q0.9375 0.96875 1.546875 2.375q0.40625 1.0 0.40625 2.296875l0 1.125zm-2.953125 -2.65625q-0.609375 -1.15625 -1.59375 -1.71875q-0.984375 -0.5625 -2.359375 -0.5625q-1.34375 0 -2.34375 0.5625q-0.984375 0.5625 -1.609375 1.71875l7.90625 0zm18.386963 -9.65625l0 14.203125l0.453125 0q0.953125 0 1.359375 0.375q0.421875 0.375 0.421875 0.96875q0 0.59375 -0.40625 0.96875q-0.40625 0.359375 -1.375 0.359375l-3.125 0l0 -0.65625q-0.90625 0.546875 -1.90625 0.8125q-1.0 0.265625 -2.0625 0.265625q-3.0 0 -4.84375 -1.734375q-1.828125 -1.734375 -1.828125 -4.328125q0 -2.703125 1.921875 -4.609375q1.921875 -1.921875 4.703125 -1.921875q1.03125 0 2.03125 0.328125q1.015625 0.3125 1.984375 0.953125l0 -3.328125l-0.453125 0q-0.96875 0 -1.375 -0.359375q-0.40625 -0.375 -0.40625 -0.96875q0 -0.59375 0.40625 -0.953125q0.40625 -0.375 1.375 -0.375l3.125 0zm-2.671875 11.3125q0 -1.640625 -1.15625 -2.78125q-1.15625 -1.15625 -2.84375 -1.15625q-1.65625 0 -2.828125 1.15625q-1.15625 1.140625 -1.15625 2.75q0 1.46875 1.046875 2.421875q1.046875 0.9375 2.9375 0.9375q1.890625 0 2.9375 -0.9375q1.0625 -0.953125 1.0625 -2.390625zm19.933868 13.5625l-14.65625 0q-0.96875 0 -1.375 -0.359375q-0.40625 -0.359375 -0.40625 -0.96875q0 -0.59375 0.40625 -0.96875q0.40625 -0.359375 1.375 -0.359375l14.65625 0q0.9375 0 1.34375 0.359375q0.421875 0.375 0.421875 0.96875q0 0.59375 -0.40625 0.953125q-0.40625 0.375 -1.359375 0.375zm4.480713 -19.8125l0 0.75q0.65625 -0.640625 1.171875 -0.875q0.53125 -0.25 1.234375 -0.25q0.578125 0 1.140625 0.296875q0.578125 0.28125 1.125 0.859375q0.6875 -0.578125 1.390625 -0.859375q0.71875 -0.28125 1.46875 -0.28125q1.484375 0 2.40625 0.796875q1.21875 1.046875 1.21875 2.734375l0 5.96875q0.828125 0 1.234375 0.390625q0.40625 0.375 0.40625 0.953125q0 0.59375 -0.40625 0.96875q-0.40625 0.359375 -1.359375 0.359375l-2.546875 0l0 -8.421875q0 -0.609375 -0.21875 -0.84375q-0.21875 -0.234375 -0.671875 -0.234375q-0.4375 0 -0.828125 0.234375q-0.46875 0.328125 -1.171875 1.21875l0 5.375q0.84375 0 1.234375 0.390625q0.40625 0.375 0.40625 0.953125q0 0.59375 -0.40625 0.96875q-0.390625 0.359375 -1.359375 0.359375l-2.53125 0l0 -8.421875q0 -0.59375 -0.234375 -0.828125q-0.21875 -0.25 -0.6875 -0.25q-0.46875 0 -0.921875 0.296875q-0.453125 0.28125 -1.09375 1.15625l0 5.375q0.84375 0 1.25 0.390625q0.40625 0.375 0.40625 0.953125q0 0.59375 -0.40625 0.96875q-0.40625 0.359375 -1.375 0.359375l-2.40625 0q-0.96875 0 -1.375 -0.359375q-0.40625 -0.375 -0.40625 -0.984375q0 -0.578125 0.40625 -0.953125q0.390625 -0.375 1.234375 -0.375l0 -6.484375q-0.84375 0 -1.234375 -0.375q-0.40625 -0.375 -0.40625 -0.953125q0 -0.59375 0.40625 -0.953125q0.40625 -0.375 1.375 -0.375l2.53125 0zm26.808868 7.25l-10.9375 0q0.421875 1.046875 1.46875 1.6875q1.0625 0.640625 2.875 0.640625q1.484375 0 3.953125 -0.640625q1.015625 -0.265625 1.390625 -0.265625q0.546875 0 0.90625 0.390625q0.359375 0.375 0.359375 0.9375q0 0.53125 -0.390625 0.890625q-0.515625 0.484375 -2.53125 0.921875q-2.015625 0.421875 -3.875 0.421875q-3.203125 0 -5.125 -1.796875q-1.921875 -1.8125 -1.921875 -4.453125q0 -2.8125 2.078125 -4.578125q2.078125 -1.765625 4.78125 -1.765625q1.625 0 2.984375 0.578125q1.359375 0.5625 2.03125 1.234375q0.9375 0.96875 1.546875 2.375q0.40625 1.0 0.40625 2.296875l0 1.125zm-2.953125 -2.65625q-0.609375 -1.15625 -1.59375 -1.71875q-0.984375 -0.5625 -2.359375 -0.5625q-1.34375 0 -2.34375 0.5625q-0.984375 0.5625 -1.609375 1.71875l7.90625 0zm8.136963 -4.59375l0 0.75q0.65625 -0.640625 1.171875 -0.875q0.53125 -0.25 1.234375 -0.25q0.578125 0 1.140625 0.296875q0.578125 0.28125 1.125 0.859375q0.6875 -0.578125 1.390625 -0.859375q0.71875 -0.28125 1.46875 -0.28125q1.484375 0 2.40625 0.796875q1.21875 1.046875 1.21875 2.734375l0 5.96875q0.828125 0 1.234375 0.390625q0.40625 0.375 0.40625 0.953125q0 0.59375 -0.40625 0.96875q-0.40625 0.359375 -1.359375 0.359375l-2.546875 0l0 -8.421875q0 -0.609375 -0.21875 -0.84375q-0.21875 -0.234375 -0.671875 -0.234375q-0.4375 0 -0.828125 0.234375q-0.46875 0.328125 -1.171875 1.21875l0 5.375q0.84375 0 1.234375 0.390625q0.40625 0.375 0.40625 0.953125q0 0.59375 -0.40625 0.96875q-0.390625 0.359375 -1.359375 0.359375l-2.53125 0l0 -8.421875q0 -0.59375 -0.234375 -0.828125q-0.21875 -0.25 -0.6875 -0.25q-0.46875 0 -0.921875 0.296875q-0.453125 0.28125 -1.09375 1.15625l0 5.375q0.84375 0 1.25 0.390625q0.40625 0.375 0.40625 0.953125q0 0.59375 -0.40625 0.96875q-0.40625 0.359375 -1.375 0.359375l-2.40625 0q-0.96875 0 -1.375 -0.359375q-0.40625 -0.375 -0.40625 -0.984375q0 -0.578125 0.40625 -0.953125q0.390625 -0.375 1.234375 -0.375l0 -6.484375q-0.84375 0 -1.234375 -0.375q-0.40625 -0.375 -0.40625 -0.953125q0 -0.59375 0.40625 -0.953125q0.40625 -0.375 1.375 -0.375l2.53125 0z" fill-rule="nonzero"/><path fill="#000000" fill-opacity="0.0" d="m54.582676 124.46457l347.1496 0l0 51.716537l-347.1496 0z" fill-rule="evenodd"/><path fill="#000000" d="m176.04524 147.25206l0 0.75q0.65625 -0.640625 1.171875 -0.875q0.53125 -0.25 1.234375 -0.25q0.578125 0 1.140625 0.296875q0.578125 0.28125 1.125 0.859375q0.6875 -0.578125 1.390625 -0.859375q0.71873474 -0.28125 1.4687347 -0.28125q1.484375 0 2.40625 0.796875q1.21875 1.046875 1.21875 2.734375l0 5.96875q0.828125 0 1.234375 0.390625q0.40625 0.375 0.40625 0.953125q0 0.59375 -0.40625 0.96875q-0.40625 0.359375 -1.359375 0.359375l-2.546875 0l0 -8.421875q0 -0.609375 -0.21875 -0.84375q-0.21875 -0.234375 -0.671875 -0.234375q-0.4375 0 -0.828125 0.234375q-0.46873474 0.328125 -1.1718597 1.21875l0 5.375q0.84375 0 1.2343597 0.390625q0.40625 0.375 0.40625 0.953125q0 0.59375 -0.40625 0.96875q-0.39060974 0.359375 -1.3593597 0.359375l-2.53125 0l0 -8.421875q0 -0.59375 -0.234375 -0.828125q-0.21875 -0.25 -0.6875 -0.25q-0.46875 0 -0.921875 0.296875q-0.453125 0.28125 -1.09375 1.15625l0 5.375q0.84375 0 1.25 0.390625q0.40625 0.375 0.40625 0.953125q0 0.59375 -0.40625 0.96875q-0.40625 0.359375 -1.375 0.359375l-2.40625 0q-0.96875 0 -1.375 -0.359375q-0.40625 -0.375 -0.40625 -0.984375q0 -0.578125 0.40625 -0.953125q0.390625 -0.375 1.234375 -0.375l0 -6.484375q-0.84375 0 -1.234375 -0.375q-0.40625 -0.375 -0.40625 -0.953125q0 -0.59375 0.40625 -0.953125q0.40625 -0.375 1.375 -0.375l2.53125 0zm22.527603 11.8125l0 -0.625q-1.015625 0.53125 -2.234375 0.796875q-1.203125 0.265625 -2.1875 0.265625q-2.140625 0 -3.484375 -1.125q-1.34375 -1.140625 -1.34375 -2.53125q0 -1.671875 1.703125 -3.109375q1.71875 -1.4375 4.734375 -1.4375q1.21875 0 2.8125 0.25l0 -0.625q0 -0.609375 -0.515625 -0.984375q-0.515625 -0.375 -1.96875 -0.375q-1.1875 0 -3.0625 0.46875q-0.703125 0.171875 -1.09375 0.171875q-0.53125 0 -0.90625 -0.375q-0.375 -0.390625 -0.375 -1.0q0 -0.328125 0.125 -0.578125q0.140625 -0.25 0.375 -0.390625q0.234375 -0.15625 0.96875 -0.375q1.0 -0.265625 2.015625 -0.421875q1.03125 -0.171875 1.859375 -0.171875q2.5 0 3.859375 1.078125q1.375 1.078125 1.375 2.9375l0 5.484375l0.453125 0q0.96875 0 1.375 0.375q0.421875 0.375 0.421875 0.96875q0 0.59375 -0.421875 0.96875q-0.40625 0.359375 -1.375 0.359375l-3.109375 0zm0 -4.78125q-1.609375 -0.3125 -2.96875 -0.3125q-1.625 0 -2.796875 0.796875q-0.71875 0.515625 -0.71875 1.03125q0 0.375 0.34375 0.609375q0.65625 0.4375 1.78125 0.4375q0.96875 0 2.1875 -0.375q1.21875 -0.390625 2.171875 -1.03125l0 -1.15625zm15.590088 -1.359375l4.046875 3.46875q0.71875 0.046875 1.078125 0.421875q0.375 0.359375 0.375 0.921875q0 0.59375 -0.40625 0.96875q-0.40625 0.359375 -1.375 0.359375l-3.03125 0q-0.96875 0 -1.375 -0.359375q-0.40625 -0.375 -0.40625 -1.0q0 -0.46875 0.28125 -0.8125q0.296875 -0.359375 0.8125 -0.5l-2.0 -1.71875l-2.03125 1.71875q0.625 0.15625 0.890625 0.484375q0.265625 0.328125 0.265625 0.828125q0 0.625 -0.40625 1.0q-0.40625 0.359375 -1.375 0.359375l-3.0 0q-0.96875 0 -1.375 -0.359375q-0.40625 -0.375 -0.40625 -0.984375q0 -0.546875 0.359375 -0.90625q0.359375 -0.375 1.09375 -0.421875l3.953125 -3.484375l-3.5 -3.0q-0.6875 -0.046875 -1.046875 -0.40625q-0.359375 -0.375 -0.359375 -0.921875q0 -0.59375 0.40625 -0.953125q0.421875 -0.375 1.375 -0.375l2.5 0q0.96875 0 1.375 0.375q0.40625 0.359375 0.40625 0.9375q0 0.765625 -0.71875 1.25l1.609375 1.34375l1.59375 -1.375q-0.71875 -0.5 -0.71875 -1.171875q0 -0.625 0.40625 -0.984375q0.40625 -0.375 1.375 -0.375l2.46875 0q0.96875 0 1.375 0.375q0.40625 0.359375 0.40625 0.953125q0 0.546875 -0.359375 0.921875q-0.34375 0.359375 -1.046875 0.40625l-3.515625 3.015625zm21.386993 14.140625l-14.65625 0q-0.96875 0 -1.375 -0.359375q-0.40625 -0.359375 -0.40625 -0.96875q0 -0.59375 0.40625 -0.96875q0.40625 -0.359375 1.375 -0.359375l14.65625 0q0.9375 0 1.34375 0.359375q0.421875 0.375 0.421875 0.96875q0 0.59375 -0.40625 0.953125q-0.40625 0.375 -1.359375 0.375zm4.480713 -19.8125l0 0.75q0.65625 -0.640625 1.171875 -0.875q0.53125 -0.25 1.234375 -0.25q0.578125 0 1.140625 0.296875q0.578125 0.28125 1.125 0.859375q0.6875 -0.578125 1.390625 -0.859375q0.71875 -0.28125 1.46875 -0.28125q1.484375 0 2.40625 0.796875q1.21875 1.046875 1.21875 2.734375l0 5.96875q0.828125 0 1.234375 0.390625q0.40625 0.375 0.40625 0.953125q0 0.59375 -0.40625 0.96875q-0.40625 0.359375 -1.359375 0.359375l-2.546875 0l0 -8.421875q0 -0.609375 -0.21875 -0.84375q-0.21875 -0.234375 -0.671875 -0.234375q-0.4375 0 -0.828125 0.234375q-0.46875 0.328125 -1.171875 1.21875l0 5.375q0.84375 0 1.234375 0.390625q0.40625 0.375 0.40625 0.953125q0 0.59375 -0.40625 0.96875q-0.390625 0.359375 -1.359375 0.359375l-2.53125 0l0 -8.421875q0 -0.59375 -0.234375 -0.828125q-0.21875 -0.25 -0.6875 -0.25q-0.46875 0 -0.921875 0.296875q-0.453125 0.28125 -1.09375 1.15625l0 5.375q0.84375 0 1.25 0.390625q0.40625 0.375 0.40625 0.953125q0 0.59375 -0.40625 0.96875q-0.40625 0.359375 -1.375 0.359375l-2.40625 0q-0.96875 0 -1.375 -0.359375q-0.40625 -0.375 -0.40625 -0.984375q0 -0.578125 0.40625 -0.953125q0.390625 -0.375 1.234375 -0.375l0 -6.484375q-0.84375 0 -1.234375 -0.375q-0.40625 -0.375 -0.40625 -0.953125q0 -0.59375 0.40625 -0.953125q0.40625 -0.375 1.375 -0.375l2.53125 0zm26.808868 7.25l-10.9375 0q0.421875 1.046875 1.46875 1.6875q1.0625 0.640625 2.875 0.640625q1.484375 0 3.953125 -0.640625q1.015625 -0.265625 1.390625 -0.265625q0.546875 0 0.90625 0.390625q0.359375 0.375 0.359375 0.9375q0 0.53125 -0.390625 0.890625q-0.515625 0.484375 -2.53125 0.921875q-2.015625 0.421875 -3.875 0.421875q-3.203125 0 -5.125 -1.796875q-1.921875 -1.8125 -1.921875 -4.453125q0 -2.8125 2.078125 -4.578125q2.078125 -1.765625 4.78125 -1.765625q1.625 0 2.984375 0.578125q1.359375 0.5625 2.03125 1.234375q0.9375 0.96875 1.546875 2.375q0.40625 1.0 0.40625 2.296875l0 1.125zm-2.953125 -2.65625q-0.609375 -1.15625 -1.59375 -1.71875q-0.984375 -0.5625 -2.359375 -0.5625q-1.34375 0 -2.34375 0.5625q-0.984375 0.5625 -1.609375 1.71875l7.90625 0zm8.136963 -4.59375l0 0.75q0.65625 -0.640625 1.171875 -0.875q0.53125 -0.25 1.234375 -0.25q0.578125 0 1.140625 0.296875q0.578125 0.28125 1.125 0.859375q0.6875 -0.578125 1.390625 -0.859375q0.71875 -0.28125 1.46875 -0.28125q1.484375 0 2.40625 0.796875q1.21875 1.046875 1.21875 2.734375l0 5.96875q0.828125 0 1.234375 0.390625q0.40625 0.375 0.40625 0.953125q0 0.59375 -0.40625 0.96875q-0.40625 0.359375 -1.359375 0.359375l-2.546875 0l0 -8.421875q0 -0.609375 -0.21875 -0.84375q-0.21875 -0.234375 -0.671875 -0.234375q-0.4375 0 -0.828125 0.234375q-0.46875 0.328125 -1.171875 1.21875l0 5.375q0.84375 0 1.234375 0.390625q0.40625 0.375 0.40625 0.953125q0 0.59375 -0.40625 0.96875q-0.390625 0.359375 -1.359375 0.359375l-2.53125 0l0 -8.421875q0 -0.59375 -0.234375 -0.828125q-0.21875 -0.25 -0.6875 -0.25q-0.46875 0 -0.921875 0.296875q-0.453125 0.28125 -1.09375 1.15625l0 5.375q0.84375 0 1.25 0.390625q0.40625 0.375 0.40625 0.953125q0 0.59375 -0.40625 0.96875q-0.40625 0.359375 -1.375 0.359375l-2.40625 0q-0.96875 0 -1.375 -0.359375q-0.40625 -0.375 -0.40625 -0.984375q0 -0.578125 0.40625 -0.953125q0.390625 -0.375 1.234375 -0.375l0 -6.484375q-0.84375 0 -1.234375 -0.375q-0.40625 -0.375 -0.40625 -0.953125q0 -0.59375 0.40625 -0.953125q0.40625 -0.375 1.375 -0.375l2.53125 0z" fill-rule="nonzero"/><path fill="#000000" fill-opacity="0.0" d="m54.582676 21.572178l347.1496 0l0 58.17323l-347.1496 0z" fill-rule="evenodd"/><path fill="#000000" d="m112.20435 61.29218l-5.46875 -22.90625l4.734375 0l3.453125 15.734375l4.1875 -15.734375l5.5 0l4.0156174 16.0l3.515625 -16.0l4.65625 0l-5.5625 22.90625l-4.9062424 0l-4.5625 -17.125l-4.546875 17.125l-5.015625 0zm25.328117 -8.53125q0 -2.1875 1.078125 -4.234375q1.078125 -2.046875 3.046875 -3.125q1.984375 -1.078125 4.421875 -1.078125q3.765625 0 6.171875 2.453125q2.40625 2.4375 2.40625 6.171875q0 3.765625 -2.4375 6.25q-2.421875 2.46875 -6.109375 2.46875q-2.28125 0 -4.359375 -1.03125q-2.0625 -1.03125 -3.140625 -3.015625q-1.078125 -2.0 -1.078125 -4.859375zm4.5 0.234375q0 2.46875 1.171875 3.78125q1.171875 1.3125 2.890625 1.3125q1.71875 0 2.875 -1.3125q1.171875 -1.3125 1.171875 -3.8125q0 -2.4375 -1.171875 -3.75q-1.15625 -1.3125 -2.875 -1.3125q-1.71875 0 -2.890625 1.3125q-1.171875 1.3125 -1.171875 3.78125zm20.265625 8.296875l-4.390625 0l0 -16.59375l4.078125 0l0 2.359375q1.046875 -1.671875 1.875 -2.203125q0.84375 -0.53125 1.90625 -0.53125q1.5 0 2.890625 0.828125l-1.359375 3.828125q-1.109375 -0.71875 -2.0625 -0.71875q-0.921875 0 -1.5625 0.515625q-0.640625 0.5 -1.015625 1.828125q-0.359375 1.328125 -0.359375 5.5625l0 5.125zm8.09375 0l0 -22.90625l4.390625 0l0 12.15625l5.140625 -5.84375l5.40625 0l-5.671875 6.0625l6.078125 10.53125l-4.734375 0l-4.171875 -7.453125l-2.046875 2.140625l0 5.3125l-4.390625 0zm27.5625 -5.28125l4.375 0.734375q-0.84375 2.40625 -2.671875 3.671875q-1.8125 1.25 -4.546875 1.25q-4.328125 0 -6.40625 -2.828125q-1.640625 -2.265625 -1.640625 -5.71875q0 -4.125 2.15625 -6.453125q2.15625 -2.34375 5.453125 -2.34375q3.703125 0 5.84375 2.453125q2.140625 2.4375 2.046875 7.484375l-11.0 0q0.046875 1.953125 1.0625 3.046875q1.015625 1.078125 2.53125 1.078125q1.03125 0 1.734375 -0.5625q0.703125 -0.5625 1.0625 -1.8125zm0.25 -4.4375q-0.046875 -1.90625 -0.984375 -2.890625q-0.9375 -1.0 -2.28125 -1.0q-1.4375 0 -2.375 1.046875q-0.9375 1.046875 -0.921875 2.84375l6.5625 0zm12.140625 9.71875l-4.390625 0l0 -16.59375l4.078125 0l0 2.359375q1.046875 -1.671875 1.875 -2.203125q0.84375 -0.53125 1.90625 -0.53125q1.5 0 2.890625 0.828125l-1.359375 3.828125q-1.109375 -0.71875 -2.0625 -0.71875q-0.921875 0 -1.5625 0.515625q-0.640625 0.5 -1.015625 1.828125q-0.359375 1.328125 -0.359375 5.5625l0 5.125zm16.8125 -16.59375l4.046875 0l0 2.265625q2.171875 -2.640625 5.171875 -2.640625q1.59375 0 2.765625 0.65625q1.171875 0.65625 1.921875 1.984375q1.09375 -1.328125 2.359375 -1.984375q1.265625 -0.65625 2.703125 -0.65625q1.828125 0 3.09375 0.75q1.265625 0.734375 1.890625 2.171875q0.453125 1.0625 0.453125 3.4375l0 10.609375l-4.390625 0l0 -9.484375q0 -2.46875 -0.453125 -3.1875q-0.609375 -0.9375 -1.875 -0.9375q-0.921875 0 -1.734375 0.5625q-0.8125 0.5625 -1.171875 1.65625q-0.359375 1.078125 -0.359375 3.421875l0 7.96875l-4.390625 0l0 -9.09375q0 -2.421875 -0.234375 -3.125q-0.234375 -0.703125 -0.734375 -1.046875q-0.484375 -0.34375 -1.328125 -0.34375q-1.015625 0 -1.828125 0.546875q-0.8125 0.546875 -1.171875 1.578125q-0.34375 1.03125 -0.34375 3.421875l0 8.0625l-4.390625 0l0 -16.59375zm38.390625 11.3125l4.375 0.734375q-0.84375 2.40625 -2.671875 3.671875q-1.8125 1.25 -4.546875 1.25q-4.328125 0 -6.40625 -2.828125q-1.640625 -2.265625 -1.640625 -5.71875q0 -4.125 2.15625 -6.453125q2.15625 -2.34375 5.453125 -2.34375q3.703125 0 5.84375 2.453125q2.140625 2.4375 2.046875 7.484375l-11.0 0q0.046875 1.953125 1.0625 3.046875q1.015625 1.078125 2.53125 1.078125q1.03125 0 1.734375 -0.5625q0.703125 -0.5625 1.0625 -1.8125zm0.25 -4.4375q-0.046875 -1.90625 -0.984375 -2.890625q-0.9375 -1.0 -2.28125 -1.0q-1.4375 0 -2.375 1.046875q-0.9375 1.046875 -0.921875 2.84375l6.5625 0zm7.609375 -6.875l4.046875 0l0 2.265625q2.171875 -2.640625 5.171875 -2.640625q1.59375 0 2.765625 0.65625q1.171875 0.65625 1.921875 1.984375q1.09375 -1.328125 2.359375 -1.984375q1.265625 -0.65625 2.703125 -0.65625q1.828125 0 3.09375 0.75q1.265625 0.734375 1.890625 2.171875q0.453125 1.0625 0.453125 3.4375l0 10.609375l-4.390625 0l0 -9.484375q0 -2.46875 -0.453125 -3.1875q-0.609375 -0.9375 -1.875 -0.9375q-0.921875 0 -1.734375 0.5625q-0.8125 0.5625 -1.171875 1.65625q-0.359375 1.078125 -0.359375 3.421875l0 7.96875l-4.390625 0l0 -9.09375q0 -2.421875 -0.234375 -3.125q-0.234375 -0.703125 -0.734375 -1.046875q-0.484375 -0.34375 -1.328125 -0.34375q-1.015625 0 -1.828125 0.546875q-0.8125 0.546875 -1.171875 1.578125q-0.34375 1.03125 -0.34375 3.421875l0 8.0625l-4.390625 0l0 -16.59375zm27.765625 8.0625q0 -2.1875 1.078125 -4.234375q1.078125 -2.046875 3.046875 -3.125q1.984375 -1.078125 4.421875 -1.078125q3.765625 0 6.171875 2.453125q2.40625 2.4375 2.40625 6.171875q0 3.765625 -2.4375 6.25q-2.421875 2.46875 -6.109375 2.46875q-2.28125 0 -4.359375 -1.03125q-2.0625 -1.03125 -3.140625 -3.015625q-1.078125 -2.0 -1.078125 -4.859375zm4.5 0.234375q0 2.46875 1.171875 3.78125q1.171875 1.3125 2.890625 1.3125q1.71875 0 2.875 -1.3125q1.171875 -1.3125 1.171875 -3.8125q0 -2.4375 -1.171875 -3.75q-1.15625 -1.3125 -2.875 -1.3125q-1.71875 0 -2.890625 1.3125q-1.171875 1.3125 -1.171875 3.78125zm20.265625 8.296875l-4.390625 0l0 -16.59375l4.078125 0l0 2.359375q1.046875 -1.671875 1.875 -2.203125q0.84375 -0.53125 1.90625 -0.53125q1.5 0 2.890625 0.828125l-1.359375 3.828125q-1.109375 -0.71875 -2.0625 -0.71875q-0.921875 0 -1.5625 0.515625q-0.640625 0.5 -1.015625 1.828125q-0.359375 1.328125 -0.359375 5.5625l0 5.125zm6.171875 -16.59375l4.671875 0l3.96875 11.78125l3.875 -11.78125l4.546875 0l-5.859375 15.96875l-1.046875 2.890625q-0.578125 1.4531288 -1.109375 2.2187538q-0.515625 0.765625 -1.203125 1.234375q-0.671875 0.484375 -1.671875 0.75q-0.984375 0.265625 -2.234375 0.265625q-1.265625 0 -2.484375 -0.265625l-0.390625 -3.4375q1.03125 0.203125 1.859375 0.203125q1.53125 0 2.265625 -0.9062538q0.734375 -0.890625 1.125 -2.28125l-6.3125 -16.640625z" fill-rule="nonzero"/></g></svg>
+<svg version="1.1" viewBox="0.0 0.0 953.9527559055118 607.3202099737533" fill="none" stroke="none" stroke-linecap="square" stroke-miterlimit="10" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns="http://www.w3.org/2000/svg"><clipPath id="p.0"><path d="m0 0l953.95276 0l0 607.3202l-953.95276 0l0 -607.3202z" clip-rule="nonzero"/></clipPath><g clip-path="url(#p.0)"><path fill="#000000" fill-opacity="0.0" d="m0 0l953.95276 0l0 607.3202l-953.95276 0z" fill-rule="evenodd"/><path fill="#000000" fill-opacity="0.0" d="m232.0 504.0l0 -432.0" fill-rule="evenodd"/><path stroke="#000000" stroke-width="1.0" stroke-linejoin="round" stroke-linecap="butt" d="m232.0 504.0l0 -426.0" fill-rule="evenodd"/><path fill="#000000" stroke="#000000" stroke-width="1.0" stroke-linecap="butt" d="m233.65173 78.0l-1.6517334 -4.538101l-1.6517334 4.538101z" fill-rule="evenodd"/><path fill="#000000" fill-opacity="0.0" d="m232.0 504.0l488.0 0" fill-rule="evenodd"/><path stroke="#000000" stroke-width="1.0" stroke-linejoin="round" stroke-linecap="butt" d="m232.0 504.0l482.0 0" fill-rule="evenodd"/><path fill="#000000" stroke="#000000" stroke-width="1.0" stroke-linecap="butt" d="m714.0 505.65173l4.538086 -1.6517334l-4.538086 -1.6517334z" fill-rule="evenodd"/><path fill="#000000" fill-opacity="0.0" d="m24.0 88.0l176.0 0l0 45.259842l-176.0 0z" fill-rule="evenodd"/><path fill="#000000" d="m49.933815 117.479996l0 -0.5q-0.8125 0.421875 -1.78125 0.640625q-0.96875 0.21875 -1.75 0.21875q-1.71875 0 -2.796875 -0.90625q-1.078125 -0.921875 -1.078125 -2.03125q0 -1.34375 1.375 -2.484375q1.375 -1.15625 3.78125 -1.15625q0.96875 0 2.25 0.203125l0 -0.5q0 -0.484375 -0.421875 -0.78125q-0.40625 -0.3125 -1.5625 -0.3125q-0.953125 0 -2.453125 0.375q-0.5625 0.140625 -0.875 0.140625q-0.4375 0 -0.734375 -0.296875q-0.296875 -0.3125 -0.296875 -0.796875q0 -0.265625 0.109375 -0.46875q0.109375 -0.203125 0.296875 -0.3125q0.1875 -0.125 0.78125 -0.296875q0.78125 -0.21875 1.609375 -0.34375q0.828125 -0.125 1.484375 -0.125q2.0 0 3.09375 0.859375q1.09375 0.859375 1.09375 2.34375l0 4.390625l0.359375 0q0.78125 0 1.109375 0.296875q0.328125 0.296875 0.328125 0.78125q0 0.46875 -0.328125 0.765625q-0.328125 0.296875 -1.109375 0.296875l-2.484375 0zm0 -3.828125q-1.28125 -0.25 -2.375 -0.25q-1.296875 0 -2.234375 0.640625q-0.578125 0.40625 -0.578125 0.828125q0 0.296875 0.28125 0.484375q0.515625 0.34375 1.421875 0.34375q0.765625 0 1.734375 -0.296875q0.984375 -0.3125 1.75 -0.828125l0 -0.921875zm11.93959 -9.671875l0 11.359375l2.5625 0q0.765625 0 1.09375 0.296875q0.328125 0.296875 0.328125 0.78125q0 0.46875 -0.328125 0.765625q-0.328125 0.296875 -1.09375 0.296875l-7.265625 0q-0.765625 0 -1.09375 -0.296875q-0.328125 -0.296875 -0.328125 -0.78125q0 -0.46875 0.328125 -0.765625q0.328125 -0.296875 1.09375 -0.296875l2.5625 0l0 -9.234375l-1.71875 0q-0.75 0 -1.09375 -0.296875q-0.328125 -0.296875 -0.328125 -0.765625q0 -0.46875 0.328125 -0.765625q0.328125 -0.296875 1.09375 -0.296875l3.859375 0zm12.798965 0l0 11.359375l2.5625 0q0.765625 0 1.09375 0.296875q0.328125 0.296875 0.328125 0.78125q0 0.46875 -0.328125 0.765625q-0.328125 0.296875 -1.09375 0.296875l-7.265625 0q-0.765625 0 -1.09375 -0.296875q-0.328125 -0.296875 -0.328125 -0.78125q0 -0.46875 0.328125 -0.765625q0.328125 -0.296875 1.09375 -0.296875l2.5625 0l0 -9.234375l-1.71875 0q-0.75 0 -1.09375 -0.296875q-0.328125 -0.296875 -0.328125 -0.765625q0 -0.46875 0.328125 -0.765625q0.328125 -0.296875 1.09375 -0.296875l3.859375 0zm17.267715 8.953125q0 1.21875 -0.6875 2.375q-0.671875 1.15625 -2.015625 1.84375q-1.34375 0.671875 -2.8125 0.671875q-1.46875 0 -2.796875 -0.671875q-1.328125 -0.671875 -2.03125 -1.828125q-0.703125 -1.15625 -0.703125 -2.421875q0 -1.28125 0.703125 -2.515625q0.71875 -1.234375 2.046875 -1.9375q1.328125 -0.703125 2.78125 -0.703125q1.453125 0 2.796875 0.71875q1.359375 0.71875 2.03125 1.953125q0.6875 1.21875 0.6875 2.515625zm-2.125 0q0 -1.03125 -0.734375 -1.890625q-1.015625 -1.171875 -2.65625 -1.171875q-1.453125 0 -2.421875 0.9375q-0.96875 0.921875 -0.96875 2.140625q0 1.0 0.96875 1.875q0.984375 0.859375 2.421875 0.859375q1.4375 0 2.40625 -0.859375q0.984375 -0.875 0.984375 -1.890625zm9.40834 0.609375l-1.484375 3.9375l-2.015625 0l-1.78125 -7.328125q-0.59375 -0.03125 -0.890625 -0.328125q-0.296875 -0.296875 -0.296875 -0.734375q0 -0.46875 0.328125 -0.765625q0.328125 -0.296875 1.109375 -0.296875l1.984375 0q0.765625 0 1.09375 0.296875q0.328125 0.296875 0.328125 0.765625q0 0.484375 -0.375 0.8125q-0.28125 0.25 -1.09375 0.25l0.8125 3.390625l1.3125 -3.46875l1.90625 0l1.328125 3.46875l0.828125 -3.390625q-0.78125 0 -1.03125 -0.15625q-0.5 -0.3125 -0.5 -0.90625q0 -0.46875 0.328125 -0.765625q0.328125 -0.296875 1.09375 -0.296875l2.0 0q0.78125 0 1.109375 0.296875q0.328125 0.296875 0.328125 0.765625q0 0.4375 -0.296875 0.734375q-0.28125 0.296875 -0.84375 0.328125l-1.75 7.328125l-1.96875 0l-1.5625 -3.9375zm18.12709 0.296875l-8.75 0q0.328125 0.828125 1.171875 1.34375q0.859375 0.5 2.3125 0.5q1.1875 0 3.15625 -0.5q0.8125 -0.21875 1.109375 -0.21875q0.4375 0 0.71875 0.3125q0.296875 0.296875 0.296875 0.75q0 0.421875 -0.3125 0.71875q-0.421875 0.375 -2.03125 0.734375q-1.609375 0.34375 -3.09375 0.34375q-2.5625 0 -4.109375 -1.4375q-1.53125 -1.453125 -1.53125 -3.578125q0 -2.25 1.65625 -3.65625q1.671875 -1.40625 3.828125 -1.40625q1.3125 0 2.390625 0.453125q1.09375 0.453125 1.625 0.984375q0.75 0.78125 1.234375 1.90625q0.328125 0.796875 0.328125 1.84375l0 0.90625zm-2.359375 -2.140625q-0.484375 -0.921875 -1.28125 -1.375q-0.78125 -0.453125 -1.875 -0.453125q-1.09375 0 -1.890625 0.453125q-0.78125 0.453125 -1.28125 1.375l6.328125 0zm14.705208 -7.71875l0 11.359375l0.359375 0q0.765625 0 1.09375 0.296875q0.34375 0.296875 0.34375 0.78125q0 0.46875 -0.328125 0.765625q-0.328125 0.296875 -1.109375 0.296875l-2.4843674 0l0 -0.515625q-0.734375 0.421875 -1.53125 0.640625q-0.796875 0.21875 -1.65625 0.21875q-2.40625 0 -3.875 -1.390625q-1.46875 -1.390625 -1.46875 -3.46875q0 -2.15625 1.546875 -3.6875q1.546875 -1.53125 3.765625 -1.53125q0.828125 0 1.625 0.25q0.8125 0.25 1.59375 0.765625l0 -2.65625l-0.375 0q-0.765625 0 -1.09375 -0.296875q-0.328125 -0.296875 -0.328125 -0.765625q0 -0.46875 0.328125 -0.765625q0.328125 -0.296875 1.09375 -0.296875l2.4999924 0zm-2.1249924 9.046875q0 -1.3125 -0.9375 -2.234375q-0.921875 -0.921875 -2.265625 -0.921875q-1.328125 0 -2.265625 0.921875q-0.921875 0.921875 -0.921875 2.203125q0 1.1875 0.828125 1.9375q0.84375 0.75 2.359375 0.75q1.515625 0 2.359375 -0.75q0.84375 -0.75 0.84375 -1.90625zm15.939598 10.859375l-11.734375 0q-0.765625 0 -1.09375 -0.296875q-0.328125 -0.28125 -0.328125 -0.765625q0 -0.484375 0.328125 -0.78125q0.328125 -0.296875 1.09375 -0.296875l11.734375 0q0.75 0 1.078125 0.296875q0.328125 0.296875 0.328125 0.78125q0 0.46875 -0.328125 0.765625q-0.3125 0.296875 -1.078125 0.296875zm3.5958252 -15.859375l0 0.59375q0.515625 -0.5 0.9375 -0.6875q0.421875 -0.203125 0.96875 -0.203125q0.46875 0 0.921875 0.234375q0.46875 0.21875 0.90625 0.6875q0.546875 -0.46875 1.109375 -0.6875q0.578125 -0.21875 1.171875 -0.21875q1.1875 0 1.921875 0.625q0.984375 0.84375 0.984375 2.1875l0 4.78125q0.65625 0 0.984375 0.3125q0.328125 0.296875 0.328125 0.765625q0 0.46875 -0.328125 0.765625q-0.328125 0.296875 -1.09375 0.296875l-2.03125 0l0 -6.734375q0 -0.5 -0.171875 -0.6875q-0.171875 -0.1875 -0.546875 -0.1875q-0.34375 0 -0.65625 0.1875q-0.375 0.265625 -0.9375 0.984375l0 4.296875q0.671875 0 0.984375 0.3125q0.328125 0.296875 0.328125 0.765625q0 0.46875 -0.328125 0.765625q-0.3125 0.296875 -1.078125 0.296875l-2.03125 0l0 -6.734375q0 -0.484375 -0.1875 -0.671875q-0.1875 -0.203125 -0.546875 -0.203125q-0.375 0 -0.75 0.234375q-0.359375 0.234375 -0.859375 0.9375l0 4.296875q0.65625 0 0.984375 0.3125q0.328125 0.296875 0.328125 0.765625q0 0.46875 -0.328125 0.765625q-0.328125 0.296875 -1.09375 0.296875l-1.921875 0q-0.78125 0 -1.109375 -0.296875q-0.328125 -0.296875 -0.328125 -0.78125q0 -0.46875 0.328125 -0.765625q0.328125 -0.296875 1.0 -0.296875l0 -5.1875q-0.671875 0 -1.0 -0.296875q-0.328125 -0.296875 -0.328125 -0.765625q0 -0.46875 0.328125 -0.765625q0.328125 -0.296875 1.109375 -0.296875l2.03125 0zm21.439606 5.8125l-8.75 0q0.328125 0.828125 1.171875 1.34375q0.859375 0.5 2.3125 0.5q1.1875 0 3.15625 -0.5q0.8125 -0.21875 1.109375 -0.21875q0.4375 0 0.71875 0.3125q0.296875 0.296875 0.296875 0.75q0 0.421875 -0.3125 0.71875q-0.421875 0.375 -2.03125 0.734375q-1.609375 0.34375 -3.09375 0.34375q-2.5625 0 -4.109375 -1.4375q-1.53125 -1.453125 -1.53125 -3.578125q0 -2.25 1.65625 -3.65625q1.671875 -1.40625 3.828125 -1.40625q1.3125 0 2.390625 0.453125q1.09375 0.453125 1.625 0.984375q0.75 0.78125 1.234375 1.90625q0.328125 0.796875 0.328125 1.84375l0 0.90625zm-2.359375 -2.140625q-0.484375 -0.921875 -1.28125 -1.375q-0.78125 -0.453125 -1.875 -0.453125q-1.09375 0 -1.890625 0.453125q-0.78125 0.453125 -1.28125 1.375l6.328125 0zm6.5177 -3.671875l0 0.59375q0.515625 -0.5 0.9375 -0.6875q0.421875 -0.203125 0.96875 -0.203125q0.46875 0 0.921875 0.234375q0.46875 0.21875 0.90625 0.6875q0.546875 -0.46875 1.109375 -0.6875q0.578125 -0.21875 1.171875 -0.21875q1.1875 0 1.921875 0.625q0.984375 0.84375 0.984375 2.1875l0 4.78125q0.65625 0 0.984375 0.3125q0.328125 0.296875 0.328125 0.765625q0 0.46875 -0.328125 0.765625q-0.328125 0.296875 -1.09375 0.296875l-2.03125 0l0 -6.734375q0 -0.5 -0.171875 -0.6875q-0.171875 -0.1875 -0.546875 -0.1875q-0.34375 0 -0.65625 0.1875q-0.375 0.265625 -0.9375 0.984375l0 4.296875q0.671875 0 0.984375 0.3125q0.328125 0.296875 0.328125 0.765625q0 0.46875 -0.328125 0.765625q-0.3125 0.296875 -1.078125 0.296875l-2.03125 0l0 -6.734375q0 -0.484375 -0.1875 -0.671875q-0.1875 -0.203125 -0.546875 -0.203125q-0.375 0 -0.75 0.234375q-0.359375 0.234375 -0.859375 0.9375l0 4.296875q0.65625 0 0.984375 0.3125q0.328125 0.296875 0.328125 0.765625q0 0.46875 -0.328125 0.765625q-0.328125 0.296875 -1.09375 0.296875l-1.921875 0q-0.78125 0 -1.109375 -0.296875q-0.328125 -0.296875 -0.328125 -0.78125q0 -0.46875 0.328125 -0.765625q0.328125 -0.296875 1.0 -0.296875l0 -5.1875q-0.671875 0 -1.0 -0.296875q-0.328125 -0.296875 -0.328125 -0.765625q0 -0.46875 0.328125 -0.765625q0.328125 -0.296875 1.109375 -0.296875l2.03125 0z" fill-rule="nonzero"/><path fill="#000000" fill-opacity="0.0" d="m232.0 112.0l416.0 0" fill-rule="evenodd"/><path stroke="#e06666" stroke-width="4.0" stroke-linejoin="round" stroke-linecap="butt" stroke-dasharray="16.0,12.0" d="m232.0 112.0l416.0 0" fill-rule="evenodd"/><path fill="#9fc5e8" d="m264.0 504.0l0 -40.0l24.0 0l0 -120.0l16.0 0l0 -32.0l16.0 0l0 -32.0l96.0 0l0 16.0l40.0 0l0 -32.0l104.0 0l0 48.0l24.0 0l0 72.0l16.0 0l0 120.0z" fill-rule="evenodd"/><path stroke="#000000" stroke-width="1.0" stroke-linejoin="round" stroke-linecap="butt" d="m264.0 504.0l0 -40.0l24.0 0l0 -120.0l16.0 0l0 -32.0l16.0 0l0 -32.0l96.0 0l0 16.0l40.0 0l0 -32.0l104.0 0l0 48.0l24.0 0l0 72.0l16.0 0l0 120.0z" fill-rule="evenodd"/><path fill="#000000" fill-opacity="0.0" d="m232.0 216.0l416.0 0" fill-rule="evenodd"/><path stroke="#93c47d" stroke-width="4.0" stroke-linejoin="round" stroke-linecap="butt" stroke-dasharray="16.0,12.0" d="m232.0 216.0l416.0 0" fill-rule="evenodd"/><path fill="#000000" fill-opacity="0.0" d="m232.0 450.74014l416.0 0" fill-rule="evenodd"/><path stroke="#f6b26b" stroke-width="4.0" stroke-linejoin="round" stroke-linecap="butt" stroke-dasharray="16.0,12.0" d="m232.0 450.74014l416.0 0" fill-rule="evenodd"/><path fill="#000000" fill-opacity="0.0" d="m264.0 536.0l336.0 0" fill-rule="evenodd"/><path stroke="#000000" stroke-width="1.0" stroke-linejoin="round" stroke-linecap="butt" d="m270.0 536.0l324.0 0" fill-rule="evenodd"/><path fill="#000000" stroke="#000000" stroke-width="1.0" stroke-linecap="butt" d="m270.0 534.34827l-4.538086 1.6517334l4.538086 1.6517334z" fill-rule="evenodd"/><path fill="#000000" stroke="#000000" stroke-width="1.0" stroke-linecap="butt" d="m594.0 537.65173l4.538086 -1.6517334l-4.538086 -1.6517334z" fill-rule="evenodd"/><path fill="#000000" fill-opacity="0.0" d="m176.0 26.740158l112.0 0l0 45.259842l-112.0 0z" fill-rule="evenodd"/><path fill="#000000" d="m195.06668 56.220158l0 -15.265625l3.046875 0l3.609375 10.8125q0.5 1.5 0.734375 2.25q0.265625 -0.828125 0.8125 -2.4375l3.65625 -10.625l2.71875 0l0 15.265625l-1.953125 0l0 -12.78125l-4.4375 12.78125l-1.8125 0l-4.421875 -13.0l0 13.0l-1.953125 0zm25.17276 -3.5625l1.921875 0.234375q-0.453125 1.703125 -1.6875 2.640625q-1.234375 0.9375 -3.171875 0.9375q-2.421875 0 -3.84375 -1.484375q-1.421875 -1.5 -1.421875 -4.203125q0 -2.796875 1.4375 -4.328125q1.4375 -1.546875 3.734375 -1.546875q2.21875 0 3.609375 1.515625q1.40625 1.5 1.40625 4.25q0 0.15625 0 0.5l-8.25 0q0.109375 1.8125 1.03125 2.78125q0.921875 0.96875 2.3125 0.96875q1.03125 0 1.75 -0.53125q0.734375 -0.546875 1.171875 -1.734375zm-6.15625 -3.03125l6.171875 0q-0.125 -1.390625 -0.703125 -2.09375q-0.90625 -1.078125 -2.328125 -1.078125q-1.296875 0 -2.171875 0.859375q-0.875 0.859375 -0.96875 2.3125zm10.439819 6.59375l0 -11.0625l1.671875 0l0 1.546875q0.53125 -0.8125 1.390625 -1.296875q0.859375 -0.5 1.96875 -0.5q1.234375 0 2.015625 0.515625q0.78125 0.5 1.109375 1.421875q1.3125 -1.9375 3.40625 -1.9375q1.65625 0 2.53125 0.921875q0.890625 0.90625 0.890625 2.796875l0 7.59375l-1.859375 0l0 -6.96875q0 -1.125 -0.1875 -1.609375q-0.1875 -0.5 -0.671875 -0.796875q-0.46875 -0.3125 -1.109375 -0.3125q-1.171875 0 -1.9375 0.78125q-0.765625 0.765625 -0.765625 2.484375l0 6.421875l-1.875 0l0 -7.1875q0 -1.25 -0.46875 -1.875q-0.453125 -0.625 -1.5 -0.625q-0.78125 0 -1.453125 0.421875q-0.671875 0.40625 -0.984375 1.21875q-0.296875 0.796875 -0.296875 2.3125l0 5.734375l-1.875 0zm17.063354 -5.53125q0 -3.078125 1.71875 -4.546875q1.421875 -1.234375 3.46875 -1.234375q2.28125 0 3.71875 1.5q1.453125 1.484375 1.453125 4.125q0 2.140625 -0.640625 3.359375q-0.625 1.21875 -1.859375 1.90625q-1.21875 0.671875 -2.671875 0.671875q-2.3125 0 -3.75 -1.484375q-1.4375 -1.5 -1.4375 -4.296875zm1.9375 0q0 2.125 0.921875 3.1875q0.921875 1.046875 2.328125 1.046875q1.40625 0 2.328125 -1.0625q0.921875 -1.0625 0.921875 -3.234375q0 -2.046875 -0.9375 -3.109375q-0.921875 -1.0625 -2.3125 -1.0625q-1.40625 0 -2.328125 1.0625q-0.921875 1.046875 -0.921875 3.171875zm10.611694 5.53125l0 -11.0625l1.6875 0l0 1.671875q0.640625 -1.171875 1.1875 -1.546875q0.546875 -0.375 1.203125 -0.375q0.953125 0 1.921875 0.609375l-0.640625 1.734375q-0.6875 -0.40625 -1.375 -0.40625q-0.609375 0 -1.109375 0.375q-0.484375 0.359375 -0.6875 1.015625q-0.3125 1.0 -0.3125 2.1875l0 5.796875l-1.875 0zm7.0399475 4.265625l-0.21875 -1.765625q0.625 0.171875 1.078125 0.171875q0.625 0 1.0 -0.21875q0.375 -0.203125 0.609375 -0.578125q0.1875 -0.28125 0.578125 -1.390625q0.046875 -0.15625 0.171875 -0.46875l-4.203125 -11.078125l2.015625 0l2.3125 6.40625q0.4375 1.21875 0.796875 2.5625q0.328125 -1.296875 0.765625 -2.515625l2.375 -6.453125l1.875 0l-4.21875 11.25q-0.671875 1.828125 -1.046875 2.515625q-0.5 0.921875 -1.15625 1.34375q-0.640625 0.4375 -1.53125 0.4375q-0.546875 0 -1.203125 -0.21875z" fill-rule="nonzero"/><path fill="#000000" fill-opacity="0.0" d="m728.0 480.0l112.0 0l0 45.259827l-112.0 0z" fill-rule="evenodd"/><path fill="#000000" d="m742.53125 509.48l0 -13.46875l-5.03125 0l0 -1.796875l12.09375 0l0 1.796875l-5.046875 0l0 13.46875l-2.015625 0zm8.127014 -13.109375l0 -2.15625l1.875 0l0 2.15625l-1.875 0zm0 13.109375l0 -11.0625l1.875 0l0 11.0625l-1.875 0zm4.7228394 0l0 -11.0625l1.671875 0l0 1.546875q0.53125 -0.8125 1.390625 -1.296875q0.859375 -0.5 1.96875 -0.5q1.234375 0 2.015625 0.515625q0.78125 0.5 1.109375 1.421875q1.3125 -1.9375 3.40625 -1.9375q1.65625 0 2.53125 0.921875q0.890625 0.90625 0.890625 2.796875l0 7.59375l-1.859375 0l0 -6.96875q0 -1.125 -0.1875 -1.609375q-0.1875 -0.5 -0.671875 -0.796875q-0.46875 -0.3125 -1.109375 -0.3125q-1.171875 0 -1.9375 0.78125q-0.765625 0.765625 -0.765625 2.484375l0 6.421875l-1.875 0l0 -7.1875q0 -1.25 -0.46875 -1.875q-0.453125 -0.625 -1.5 -0.625q-0.78125 0 -1.453125 0.421875q-0.671875 0.40625 -0.984375 1.21875q-0.296875 0.796875 -0.296875 2.3125l0 5.734375l-1.875 0zm25.344604 -3.5625l1.921875 0.234375q-0.453125 1.703125 -1.6875 2.640625q-1.234375 0.9375 -3.171875 0.9375q-2.421875 0 -3.84375 -1.484375q-1.421875 -1.5 -1.421875 -4.203125q0 -2.796875 1.4375 -4.328125q1.4375 -1.546875 3.734375 -1.546875q2.21875 0 3.609375 1.515625q1.40625 1.5 1.40625 4.25q0 0.15625 0 0.5l-8.25 0q0.109375 1.8125 1.03125 2.78125q0.921875 0.96875 2.3125 0.96875q1.03125 0 1.75 -0.53125q0.734375 -0.546875 1.171875 -1.734375zm-6.15625 -3.03125l6.171875 0q-0.125 -1.390625 -0.703125 -2.09375q-0.90625 -1.078125 -2.328125 -1.078125q-1.296875 0 -2.171875 0.859375q-0.875 0.859375 -0.96875 2.3125z" fill-rule="nonzero"/><path fill="#000000" fill-opacity="0.0" d="m328.0 541.98425l216.0 0l0 42.015747l-216.0 0z" fill-rule="evenodd"/><path fill="#000000" d="m341.84375 568.90424l0 -11.78125l-4.40625 0l0 -1.578125l10.578125 0l0 1.578125l-4.40625 0l0 11.78125l-1.765625 0zm12.03009 -1.1875q-0.921875 0.765625 -1.765625 1.09375q-0.828125 0.3125 -1.796875 0.3125q-1.59375 0 -2.453125 -0.78125q-0.859375 -0.78125 -0.859375 -1.984375q0 -0.71875 0.328125 -1.296875q0.328125 -0.59375 0.84375 -0.9375q0.53125 -0.359375 1.1875 -0.546875q0.46875 -0.125 1.453125 -0.25q1.984375 -0.234375 2.921875 -0.5625q0.015625 -0.34375 0.015625 -0.421875q0 -1.0 -0.46875 -1.421875q-0.625 -0.546875 -1.875 -0.546875q-1.15625 0 -1.703125 0.40625q-0.546875 0.40625 -0.8125 1.421875l-1.609375 -0.21875q0.21875 -1.015625 0.71875 -1.640625q0.5 -0.640625 1.453125 -0.984375q0.953125 -0.34375 2.1875 -0.34375q1.25 0 2.015625 0.296875q0.78125 0.28125 1.140625 0.734375q0.375 0.4375 0.515625 1.109375q0.078125 0.421875 0.078125 1.515625l0 2.1875q0 2.28125 0.109375 2.890625q0.109375 0.59375 0.40625 1.15625l-1.703125 0q-0.265625 -0.515625 -0.328125 -1.1875zm-0.140625 -3.671875q-0.890625 0.375 -2.671875 0.625q-1.015625 0.140625 -1.4375 0.328125q-0.421875 0.1875 -0.65625 0.53125q-0.21875 0.34375 -0.21875 0.78125q0 0.65625 0.5 1.09375q0.5 0.4375 1.453125 0.4375q0.9375 0 1.671875 -0.40625q0.75 -0.421875 1.09375 -1.140625q0.265625 -0.5625 0.265625 -1.640625l0 -0.609375zm3.5476074 1.96875l1.625 -0.25q0.125 0.96875 0.75 1.5q0.625 0.515625 1.75 0.515625q1.125 0 1.671875 -0.453125q0.546875 -0.46875 0.546875 -1.09375q0 -0.546875 -0.484375 -0.875q-0.328125 -0.21875 -1.671875 -0.546875q-1.8125 -0.46875 -2.515625 -0.796875q-0.6875 -0.328125 -1.046875 -0.90625q-0.359375 -0.59375 -0.359375 -1.3125q0 -0.640625 0.296875 -1.1875q0.296875 -0.5625 0.8125 -0.921875q0.375 -0.28125 1.03125 -0.46875q0.671875 -0.203125 1.421875 -0.203125q1.140625 0 2.0 0.328125q0.859375 0.328125 1.265625 0.890625q0.421875 0.5625 0.578125 1.5l-1.609375 0.21875q-0.109375 -0.75 -0.640625 -1.171875q-0.515625 -0.421875 -1.46875 -0.421875q-1.140625 0 -1.625 0.375q-0.46875 0.375 -0.46875 0.875q0 0.3125 0.1875 0.578125q0.203125 0.265625 0.640625 0.4375q0.234375 0.09375 1.4375 0.421875q1.75 0.453125 2.4375 0.75q0.6875 0.296875 1.078125 0.859375q0.390625 0.5625 0.390625 1.40625q0 0.828125 -0.484375 1.546875q-0.46875 0.71875 -1.375 1.125q-0.90625 0.390625 -2.046875 0.390625q-1.875 0 -2.875 -0.78125q-0.984375 -0.78125 -1.25 -2.328125zm9.984375 2.890625l0 -13.359375l1.640625 0l0 7.625l3.890625 -3.9375l2.109375 0l-3.6875 3.59375l4.0625 6.078125l-2.015625 0l-3.203125 -4.953125l-1.15625 1.125l0 3.828125l-1.640625 0zm20.823914 -3.546875l1.609375 0.21875q-0.265625 1.65625 -1.359375 2.609375q-1.078125 0.9375 -2.671875 0.9375q-1.984375 0 -3.1875 -1.296875q-1.203125 -1.296875 -1.203125 -3.71875q0 -1.578125 0.515625 -2.75q0.515625 -1.171875 1.578125 -1.75q1.0625 -0.59375 2.3125 -0.59375q1.578125 0 2.578125 0.796875q1.0 0.796875 1.28125 2.265625l-1.59375 0.234375q-0.234375 -0.96875 -0.8125 -1.453125q-0.578125 -0.5 -1.390625 -0.5q-1.234375 0 -2.015625 0.890625q-0.78125 0.890625 -0.78125 2.8125q0 1.953125 0.75 2.84375q0.75 0.875 1.953125 0.875q0.96875 0 1.609375 -0.59375q0.65625 -0.59375 0.828125 -1.828125zm2.40625 -1.296875q0 -2.6875 1.484375 -3.96875q1.25 -1.078125 3.046875 -1.078125q2.0 0 3.265625 1.3125q1.265625 1.296875 1.265625 3.609375q0 1.859375 -0.5625 2.9375q-0.5625 1.0625 -1.640625 1.65625q-1.0625 0.59375 -2.328125 0.59375q-2.03125 0 -3.28125 -1.296875q-1.25 -1.3125 -1.25 -3.765625zm1.6875 0q0 1.859375 0.796875 2.796875q0.8125 0.921875 2.046875 0.921875q1.21875 0 2.03125 -0.921875q0.8125 -0.9375 0.8125 -2.84375q0 -1.796875 -0.8125 -2.71875q-0.8125 -0.921875 -2.03125 -0.921875q-1.234375 0 -2.046875 0.921875q-0.796875 0.90625 -0.796875 2.765625zm9.297607 4.84375l0 -9.671875l1.46875 0l0 1.375q1.0625 -1.59375 3.078125 -1.59375q0.875 0 1.609375 0.3125q0.734375 0.3125 1.09375 0.828125q0.375 0.5 0.515625 1.203125q0.09375 0.453125 0.09375 1.59375l0 5.953125l-1.640625 0l0 -5.890625q0 -1.0 -0.203125 -1.484375q-0.1875 -0.5 -0.671875 -0.796875q-0.484375 -0.296875 -1.140625 -0.296875q-1.046875 0 -1.8125 0.671875q-0.75 0.65625 -0.75 2.515625l0 5.28125l-1.640625 0zm13.953827 -1.46875l0.234375 1.453125q-0.6875 0.140625 -1.234375 0.140625q-0.890625 0 -1.390625 -0.28125q-0.484375 -0.28125 -0.6875 -0.734375q-0.203125 -0.46875 -0.203125 -1.9375l0 -5.578125l-1.203125 0l0 -1.265625l1.203125 0l0 -2.390625l1.625 -0.984375l0 3.375l1.65625 0l0 1.265625l-1.65625 0l0 5.671875q0 0.6875 0.078125 0.890625q0.09375 0.203125 0.28125 0.328125q0.203125 0.109375 0.578125 0.109375q0.265625 0 0.71875 -0.0625zm7.917694 0.28125q-0.921875 0.765625 -1.765625 1.09375q-0.828125 0.3125 -1.796875 0.3125q-1.59375 0 -2.453125 -0.78125q-0.859375 -0.78125 -0.859375 -1.984375q0 -0.71875 0.328125 -1.296875q0.328125 -0.59375 0.84375 -0.9375q0.53125 -0.359375 1.1875 -0.546875q0.46875 -0.125 1.453125 -0.25q1.984375 -0.234375 2.921875 -0.5625q0.015625 -0.34375 0.015625 -0.421875q0 -1.0 -0.46875 -1.421875q-0.625 -0.546875 -1.875 -0.546875q-1.15625 0 -1.703125 0.40625q-0.546875 0.40625 -0.8125 1.421875l-1.609375 -0.21875q0.21875 -1.015625 0.71875 -1.640625q0.5 -0.640625 1.453125 -0.984375q0.953125 -0.34375 2.1875 -0.34375q1.25 0 2.015625 0.296875q0.78125 0.28125 1.140625 0.734375q0.375 0.4375 0.515625 1.109375q0.078125 0.421875 0.078125 1.515625l0 2.1875q0 2.28125 0.109375 2.890625q0.109375 0.59375 0.40625 1.15625l-1.703125 0q-0.265625 -0.515625 -0.328125 -1.1875zm-0.140625 -3.671875q-0.890625 0.375 -2.671875 0.625q-1.015625 0.140625 -1.4375 0.328125q-0.421875 0.1875 -0.65625 0.53125q-0.21875 0.34375 -0.21875 0.78125q0 0.65625 0.5 1.09375q0.5 0.4375 1.453125 0.4375q0.9375 0 1.671875 -0.40625q0.75 -0.421875 1.09375 -1.140625q0.265625 -0.5625 0.265625 -1.640625l0 -0.609375zm4.203827 -6.609375l0 -1.890625l1.640625 0l0 1.890625l-1.640625 0zm0 11.46875l0 -9.671875l1.640625 0l0 9.671875l-1.640625 0zm4.144806 0l0 -9.671875l1.46875 0l0 1.375q1.0625 -1.59375 3.078125 -1.59375q0.875 0 1.609375 0.3125q0.734375 0.3125 1.09375 0.828125q0.375 0.5 0.515625 1.203125q0.09375 0.453125 0.09375 1.59375l0 5.953125l-1.640625 0l0 -5.890625q0 -1.0 -0.203125 -1.484375q-0.1875 -0.5 -0.671875 -0.796875q-0.484375 -0.296875 -1.140625 -0.296875q-1.046875 0 -1.8125 0.671875q-0.75 0.65625 -0.75 2.515625l0 5.28125l-1.640625 0zm17.000732 -3.109375l1.6875 0.203125q-0.40625 1.484375 -1.484375 2.3125q-1.078125 0.8125 -2.765625 0.8125q-2.125 0 -3.375 -1.296875q-1.234375 -1.3125 -1.234375 -3.671875q0 -2.453125 1.25 -3.796875q1.265625 -1.34375 3.265625 -1.34375q1.9375 0 3.15625 1.328125q1.234375 1.3125 1.234375 3.703125q0 0.15625 0 0.4375l-7.21875 0q0.09375 1.59375 0.90625 2.453125q0.8125 0.84375 2.015625 0.84375q0.90625 0 1.546875 -0.46875q0.640625 -0.484375 1.015625 -1.515625zm-5.390625 -2.65625l5.40625 0q-0.109375 -1.21875 -0.625 -1.828125q-0.78125 -0.953125 -2.03125 -0.953125q-1.125 0 -1.90625 0.765625q-0.765625 0.75 -0.84375 2.015625zm9.125732 5.765625l0 -9.671875l1.46875 0l0 1.46875q0.5625 -1.03125 1.03125 -1.359375q0.484375 -0.328125 1.0625 -0.328125q0.828125 0 1.6875 0.53125l-0.5625 1.515625q-0.609375 -0.359375 -1.203125 -0.359375q-0.546875 0 -0.96875 0.328125q-0.421875 0.328125 -0.609375 0.890625q-0.28125 0.875 -0.28125 1.921875l0 5.0625l-1.625 0zm11.364716 0l0 -13.359375l1.640625 0l0 13.359375l-1.640625 0zm4.191681 -11.46875l0 -1.890625l1.640625 0l0 1.890625l-1.640625 0zm0 11.46875l0 -9.671875l1.640625 0l0 9.671875l-1.640625 0zm4.5354614 0l0 -8.40625l-1.453125 0l0 -1.265625l1.453125 0l0 -1.03125q0 -0.96875 0.171875 -1.453125q0.234375 -0.640625 0.828125 -1.03125q0.59375 -0.390625 1.671875 -0.390625q0.6875 0 1.53125 0.15625l-0.25 1.4375q-0.5 -0.09375 -0.953125 -0.09375q-0.75 0 -1.0625 0.328125q-0.3125 0.3125 -0.3125 1.1875l0 0.890625l1.890625 0l0 1.265625l-1.890625 0l0 8.40625l-1.625 0zm11.417664 -3.109375l1.6875 0.203125q-0.40625 1.484375 -1.484375 2.3125q-1.078125 0.8125 -2.765625 0.8125q-2.125 0 -3.375 -1.296875q-1.234375 -1.3125 -1.234375 -3.671875q0 -2.453125 1.25 -3.796875q1.265625 -1.34375 3.265625 -1.34375q1.9375 0 3.15625 1.328125q1.234375 1.3125 1.234375 3.703125q0 0.15625 0 0.4375l-7.21875 0q0.09375 1.59375 0.90625 2.453125q0.8125 0.84375 2.015625 0.84375q0.90625 0 1.546875 -0.46875q0.640625 -0.484375 1.015625 -1.515625zm-5.390625 -2.65625l5.40625 0q-0.109375 -1.21875 -0.625 -1.828125q-0.78125 -0.953125 -2.03125 -0.953125q-1.125 0 -1.90625 0.765625q-0.765625 0.75 -0.84375 2.015625zm8.485107 2.875l1.625 -0.25q0.125 0.96875 0.75 1.5q0.625 0.515625 1.75 0.515625q1.125 0 1.671875 -0.453125q0.546875 -0.46875 0.546875 -1.09375q0 -0.546875 -0.484375 -0.875q-0.328125 -0.21875 -1.671875 -0.546875q-1.8125 -0.46875 -2.515625 -0.796875q-0.6875 -0.328125 -1.046875 -0.90625q-0.359375 -0.59375 -0.359375 -1.3125q0 -0.640625 0.296875 -1.1875q0.296875 -0.5625 0.8125 -0.921875q0.375 -0.28125 1.03125 -0.46875q0.671875 -0.203125 1.421875 -0.203125q1.140625 0 2.0 0.328125q0.859375 0.328125 1.265625 0.890625q0.421875 0.5625 0.578125 1.5l-1.609375 0.21875q-0.109375 -0.75 -0.640625 -1.171875q-0.515625 -0.421875 -1.46875 -0.421875q-1.140625 0 -1.625 0.375q-0.46875 0.375 -0.46875 0.875q0 0.3125 0.1875 0.578125q0.203125 0.265625 0.640625 0.4375q0.234375 0.09375 1.4375 0.421875q1.75 0.453125 2.4375 0.75q0.6875 0.296875 1.078125 0.859375q0.390625 0.5625 0.390625 1.40625q0 0.828125 -0.484375 1.546875q-0.46875 0.71875 -1.375 1.125q-0.90625 0.390625 -2.046875 0.390625q-1.875 0 -2.875 -0.78125q-0.984375 -0.78125 -1.25 -2.328125zm9.984375 6.59375l0 -13.375l1.484375 0l0 1.25q0.53125 -0.734375 1.1875 -1.09375q0.671875 -0.375 1.625 -0.375q1.234375 0 2.171875 0.640625q0.953125 0.625 1.4375 1.796875q0.484375 1.15625 0.484375 2.546875q0 1.484375 -0.53125 2.671875q-0.53125 1.1875 -1.546875 1.828125q-1.015625 0.625 -2.140625 0.625q-0.8125 0 -1.46875 -0.34375q-0.65625 -0.34375 -1.0625 -0.875l0 4.703125l-1.640625 0zm1.484375 -8.484375q0 1.859375 0.75 2.765625q0.765625 0.890625 1.828125 0.890625q1.09375 0 1.875 -0.921875q0.78125 -0.9375 0.78125 -2.875q0 -1.84375 -0.765625 -2.765625q-0.75 -0.921875 -1.8125 -0.921875q-1.046875 0 -1.859375 0.984375q-0.796875 0.96875 -0.796875 2.84375zm15.203857 3.59375q-0.921875 0.765625 -1.765625 1.09375q-0.828125 0.3125 -1.796875 0.3125q-1.59375 0 -2.453125 -0.78125q-0.859375 -0.78125 -0.859375 -1.984375q0 -0.71875 0.328125 -1.296875q0.328125 -0.59375 0.84375 -0.9375q0.53125 -0.359375 1.1875 -0.546875q0.46875 -0.125 1.453125 -0.25q1.984375 -0.234375 2.921875 -0.5625q0.015625 -0.34375 0.015625 -0.421875q0 -1.0 -0.46875 -1.421875q-0.625 -0.546875 -1.875 -0.546875q-1.15625 0 -1.703125 0.40625q-0.546875 0.40625 -0.8125 1.421875l-1.609375 -0.21875q0.21875 -1.015625 0.71875 -1.640625q0.5 -0.640625 1.453125 -0.984375q0.953125 -0.34375 2.1875 -0.34375q1.25 0 2.015625 0.296875q0.78125 0.28125 1.140625 0.734375q0.375 0.4375 0.515625 1.109375q0.078125 0.421875 0.078125 1.515625l0 2.1875q0 2.28125 0.109375 2.890625q0.109375 0.59375 0.40625 1.15625l-1.703125 0q-0.265625 -0.515625 -0.328125 -1.1875zm-0.140625 -3.671875q-0.890625 0.375 -2.671875 0.625q-1.015625 0.140625 -1.4375 0.328125q-0.421875 0.1875 -0.65625 0.53125q-0.21875 0.34375 -0.21875 0.78125q0 0.65625 0.5 1.09375q0.5 0.4375 1.453125 0.4375q0.9375 0 1.671875 -0.40625q0.75 -0.421875 1.09375 -1.140625q0.265625 -0.5625 0.265625 -1.640625l0 -0.609375zm4.2037964 4.859375l0 -9.671875l1.46875 0l0 1.375q1.0625 -1.59375 3.078125 -1.59375q0.875 0 1.609375 0.3125q0.734375 0.3125 1.09375 0.828125q0.375 0.5 0.515625 1.203125q0.09375 0.453125 0.09375 1.59375l0 5.953125l-1.640625 0l0 -5.890625q0 -1.0 -0.203125 -1.484375q-0.1875 -0.5 -0.671875 -0.796875q-0.484375 -0.296875 -1.140625 -0.296875q-1.046875 0 -1.8125 0.671875q-0.75 0.65625 -0.75 2.515625l0 5.28125l-1.640625 0z" fill-rule="nonzero"/><path fill="#000000" fill-opacity="0.0" d="m232.0 264.0l408.0 0" fill-rule="evenodd"/><path stroke="#6fa8dc" stroke-width="4.0" stroke-linejoin="round" stroke-linecap="butt" d="m232.0 264.0l408.0 0" fill-rule="evenodd"/><path fill="#000000" fill-opacity="0.0" d="m664.0 240.0l240.0 0l0 45.259857l-240.0 0z" fill-rule="evenodd"/><path fill="#000000" d="m681.1676 268.30814l0 3.5l1.28125 0q0.765625 0 1.09375 0.296875q0.328125 0.296875 0.328125 0.765625q0 0.46875 -0.328125 0.765625q-0.328125 0.296875 -1.09375 0.296875l-3.78125 0q-0.765625 0 -1.09375 -0.296875q-0.328125 -0.296875 -0.328125 -0.765625q0 -0.46875 0.328125 -0.765625q0.328125 -0.296875 1.09375 -0.296875l0.359375 0l0 -9.65625l-0.359375 0q-0.765625 0 -1.09375 -0.296875q-0.328125 -0.296875 -0.328125 -0.765625q0 -0.46875 0.328125 -0.765625q0.328125 -0.296875 1.09375 -0.296875l2.5 0l0 0.71875q0.75 -0.5 1.546875 -0.75q0.8125 -0.25 1.65625 -0.25q2.1875 0 3.71875 1.484375q1.546875 1.484375 1.546875 3.390625q0 2.125 -1.828125 3.5q-1.515625 1.140625 -3.421875 1.140625q-0.828125 0 -1.625 -0.234375q-0.796875 -0.25 -1.59375 -0.71875zm6.328125 -3.671875q0 -0.453125 -0.359375 -1.140625q-0.34375 -0.6875 -1.078125 -1.15625q-0.734375 -0.46875 -1.71875 -0.46875q-1.59375 0 -2.53125 1.203125q-0.640625 0.828125 -0.640625 1.578125q0 0.859375 0.90625 1.671875q0.921875 0.796875 2.265625 0.796875q1.34375 0 2.25 -0.796875q0.90625 -0.796875 0.90625 -1.6875zm14.470825 1.203125l-8.75 0q0.328125 0.828125 1.171875 1.34375q0.859375 0.5 2.3125 0.5q1.1875 0 3.15625 -0.5q0.8125 -0.21875 1.109375 -0.21875q0.4375 0 0.71875 0.3125q0.296875 0.296875 0.296875 0.75q0 0.421875 -0.3125 0.71875q-0.421875 0.375 -2.03125 0.734375q-1.609375 0.34375 -3.09375 0.34375q-2.5625 0 -4.109375 -1.4375q-1.53125 -1.453125 -1.53125 -3.578125q0 -2.25 1.65625 -3.65625q1.671875 -1.40625 3.828125 -1.40625q1.3125 0 2.390625 0.453125q1.09375 0.453125 1.625 0.984375q0.75 0.78125 1.234375 1.90625q0.328125 0.796875 0.328125 1.84375l0 0.90625zm-2.359375 -2.140625q-0.484375 -0.921875 -1.28125 -1.375q-0.78125 -0.453125 -1.875 -0.453125q-1.09375 0 -1.890625 0.453125q-0.78125 0.453125 -1.28125 1.375l6.328125 0zm11.73645 5.78125l0 -0.5q-0.8125 0.421875 -1.78125 0.640625q-0.96875 0.21875 -1.75 0.21875q-1.71875 0 -2.796875 -0.90625q-1.078125 -0.921875 -1.078125 -2.03125q0 -1.34375 1.375 -2.484375q1.375 -1.15625 3.78125 -1.15625q0.96875 0 2.25 0.203125l0 -0.5q0 -0.484375 -0.421875 -0.78125q-0.40625 -0.3125 -1.5625 -0.3125q-0.953125 0 -2.453125 0.375q-0.5625 0.140625 -0.875 0.140625q-0.4375 0 -0.734375 -0.296875q-0.296875 -0.3125 -0.296875 -0.796875q0 -0.265625 0.109375 -0.46875q0.109375 -0.203125 0.296875 -0.3125q0.1875 -0.125 0.78125 -0.296875q0.78125 -0.21875 1.609375 -0.34375q0.828125 -0.125 1.484375 -0.125q2.0 0 3.09375 0.859375q1.09375 0.859375 1.09375 2.34375l0 4.390625l0.359375 0q0.78125 0 1.109375 0.296875q0.328125 0.296875 0.328125 0.78125q0 0.46875 -0.328125 0.765625q-0.328125 0.296875 -1.109375 0.296875l-2.484375 0zm0 -3.828125q-1.28125 -0.25 -2.375 -0.25q-1.296875 0 -2.234375 0.640625q-0.578125 0.40625 -0.578125 0.828125q0 0.296875 0.28125 0.484375q0.515625 0.34375 1.421875 0.34375q0.765625 0 1.734375 -0.296875q0.984375 -0.3125 1.75 -0.828125l0 -0.921875zm9.11145 0.28125l0 3.546875l-2.5 0q-0.765625 0 -1.09375 -0.296875q-0.328125 -0.296875 -0.328125 -0.78125q0 -0.46875 0.328125 -0.765625q0.34375 -0.296875 1.09375 -0.296875l0.375 0l0 -9.234375l-0.375 0q-0.765625 0 -1.09375 -0.296875q-0.328125 -0.296875 -0.328125 -0.765625q0 -0.46875 0.328125 -0.765625q0.328125 -0.29689026 1.09375 -0.29689026l2.5 0l0 7.1875153l1.671875 -1.34375q-0.265625 -0.453125 -0.265625 -0.734375q0 -0.46875 0.328125 -0.765625q0.328125 -0.296875 1.09375 -0.296875l2.4375 0q0.765625 0 1.09375 0.296875q0.328125 0.296875 0.328125 0.765625q0 0.46875 -0.328125 0.765625q-0.328125 0.296875 -1.09375 0.296875l-0.59375 0l-2.59375 2.109375l3.484375 3.078125l0.625 0q0.765625 0 1.09375 0.296875q0.328125 0.296875 0.328125 0.78125q0 0.46875 -0.328125 0.765625q-0.328125 0.296875 -1.09375 0.296875l-2.453125 0q-0.765625 0 -1.09375 -0.296875q-0.328125 -0.296875 -0.328125 -0.78125q0 -0.40625 0.34375 -0.796875l-2.25 -2.0l-0.40625 0.328125zm20.470886 9.953125l-11.734375 0q-0.765625 0 -1.09375 -0.296875q-0.328125 -0.28125 -0.328125 -0.765625q0 -0.484375 0.328125 -0.78125q0.328125 -0.296875 1.09375 -0.296875l11.734375 0q0.75 0 1.078125 0.296875q0.328125 0.296875 0.328125 0.78125q0 0.46875 -0.328125 0.765625q-0.3125 0.296875 -1.078125 0.296875zm3.5958252 -15.859375l0 0.59375q0.515625 -0.5 0.9375 -0.6875q0.421875 -0.203125 0.96875 -0.203125q0.46875 0 0.921875 0.234375q0.46875 0.21875 0.90625 0.6875q0.546875 -0.46875 1.109375 -0.6875q0.578125 -0.21875 1.171875 -0.21875q1.1875 0 1.921875 0.625q0.984375 0.84375 0.984375 2.1875l0 4.78125q0.65625 0 0.984375 0.3125q0.328125 0.296875 0.328125 0.765625q0 0.46875 -0.328125 0.765625q-0.328125 0.296875 -1.09375 0.296875l-2.03125 0l0 -6.734375q0 -0.5 -0.171875 -0.6875q-0.171875 -0.1875 -0.546875 -0.1875q-0.34375 0 -0.65625 0.1875q-0.375 0.265625 -0.9375 0.984375l0 4.296875q0.671875 0 0.984375 0.3125q0.328125 0.296875 0.328125 0.765625q0 0.46875 -0.328125 0.765625q-0.3125 0.296875 -1.078125 0.296875l-2.03125 0l0 -6.734375q0 -0.484375 -0.1875 -0.671875q-0.1875 -0.203125 -0.546875 -0.203125q-0.375 0 -0.75 0.234375q-0.359375 0.234375 -0.859375 0.9375l0 4.296875q0.65625 0 0.984375 0.3125q0.328125 0.296875 0.328125 0.765625q0 0.46875 -0.328125 0.765625q-0.328125 0.296875 -1.09375 0.296875l-1.921875 0q-0.78125 0 -1.109375 -0.296875q-0.328125 -0.296875 -0.328125 -0.78125q0 -0.46875 0.328125 -0.765625q0.328125 -0.296875 1.0 -0.296875l0 -5.1875q-0.671875 0 -1.0 -0.296875q-0.328125 -0.296875 -0.328125 -0.765625q0 -0.46875 0.328125 -0.765625q0.328125 -0.296875 1.109375 -0.296875l2.03125 0zm21.439575 5.8125l-8.75 0q0.328125 0.828125 1.171875 1.34375q0.859375 0.5 2.3125 0.5q1.1875 0 3.15625 -0.5q0.8125 -0.21875 1.109375 -0.21875q0.4375 0 0.71875 0.3125q0.296875 0.296875 0.296875 0.75q0 0.421875 -0.3125 0.71875q-0.421875 0.375 -2.03125 0.734375q-1.609375 0.34375 -3.09375 0.34375q-2.5625 0 -4.109375 -1.4375q-1.53125 -1.453125 -1.53125 -3.578125q0 -2.25 1.65625 -3.65625q1.671875 -1.40625 3.828125 -1.40625q1.3125 0 2.390625 0.453125q1.09375 0.453125 1.625 0.984375q0.75 0.78125 1.234375 1.90625q0.328125 0.796875 0.328125 1.84375l0 0.90625zm-2.359375 -2.140625q-0.484375 -0.921875 -1.28125 -1.375q-0.78125 -0.453125 -1.875 -0.453125q-1.09375 0 -1.890625 0.453125q-0.78125 0.453125 -1.28125 1.375l6.328125 0zm11.736511 5.78125l0 -0.5q-0.8125 0.421875 -1.78125 0.640625q-0.96875 0.21875 -1.75 0.21875q-1.71875 0 -2.796875 -0.90625q-1.078125 -0.921875 -1.078125 -2.03125q0 -1.34375 1.375 -2.484375q1.375 -1.15625 3.78125 -1.15625q0.96875 0 2.25 0.203125l0 -0.5q0 -0.484375 -0.421875 -0.78125q-0.40625 -0.3125 -1.5625 -0.3125q-0.953125 0 -2.453125 0.375q-0.5625 0.140625 -0.875 0.140625q-0.4375 0 -0.734375 -0.296875q-0.296875 -0.3125 -0.296875 -0.796875q0 -0.265625 0.109375 -0.46875q0.109375 -0.203125 0.296875 -0.3125q0.1875 -0.125 0.78125 -0.296875q0.78125 -0.21875 1.609375 -0.34375q0.828125 -0.125 1.484375 -0.125q2.0 0 3.09375 0.859375q1.09375 0.859375 1.09375 2.34375l0 4.390625l0.359375 0q0.78125 0 1.109375 0.296875q0.328125 0.296875 0.328125 0.78125q0 0.46875 -0.328125 0.765625q-0.328125 0.296875 -1.109375 0.296875l-2.484375 0zm0 -3.828125q-1.28125 -0.25 -2.375 -0.25q-1.296875 0 -2.234375 0.640625q-0.578125 0.40625 -0.578125 0.828125q0 0.296875 0.28125 0.484375q0.515625 0.34375 1.421875 0.34375q0.765625 0 1.734375 -0.296875q0.984375 -0.3125 1.75 -0.828125l0 -0.921875zm13.17395 -3.125q-0.515625 -0.328125 -1.09375 -0.484375q-0.5625 -0.171875 -1.1875 -0.171875q-1.25 0 -1.96875 0.40625q-0.328125 0.1875 -0.328125 0.390625q0 0.234375 0.4375 0.46875q0.328125 0.171875 1.484375 0.328125q2.125 0.28125 2.96875 0.578125q1.09375 0.390625 1.671875 1.15625q0.59375 0.75 0.59375 1.59375q0 1.140625 -1.0 1.921875q-1.453125 1.109375 -3.765625 1.109375q-0.921875 0 -1.71875 -0.171875q-0.78125 -0.15625 -1.4375 -0.46875q-0.15625 0.140625 -0.328125 0.21875q-0.171875 0.0625 -0.359375 0.0625q-0.5 0 -0.796875 -0.328125q-0.296875 -0.328125 -0.296875 -1.09375l0 -0.71875q0 -0.765625 0.296875 -1.09375q0.296875 -0.328125 0.765625 -0.328125q0.390625 0 0.640625 0.21875q0.265625 0.203125 0.421875 0.71875q0.484375 0.421875 1.171875 0.640625q0.6875 0.203125 1.578125 0.203125q1.46875 0 2.28125 -0.453125q0.390625 -0.234375 0.390625 -0.484375q0 -0.40625 -0.546875 -0.6875q-0.5625 -0.265625 -2.28125 -0.453125q-2.578125 -0.265625 -3.4375 -1.046875q-0.875 -0.75 -0.875 -1.875q0 -1.140625 0.96875 -1.90625q1.3125 -1.03125 3.4375 -1.03125q0.75 0 1.421875 0.140625q0.6875 0.140625 1.3125 0.421875q0.203125 -0.140625 0.375 -0.203125q0.171875 -0.078125 0.3125 -0.078125q0.4375 0 0.71875 0.328125q0.296875 0.328125 0.296875 1.09375l0 0.515625q0 0.703125 -0.15625 0.953125q-0.34375 0.484375 -0.90625 0.484375q-0.390625 0 -0.6875 -0.234375q-0.28125 -0.25 -0.375 -0.640625zm15.033325 -2.5l0 7.3125q0.671875 0 0.984375 0.3125q0.328125 0.296875 0.328125 0.765625q0 0.46875 -0.328125 0.765625q-0.328125 0.296875 -1.09375 0.296875l-2.03125 0l0 -0.484375q-0.90625 0.40625 -1.75 0.609375q-0.828125 0.21875 -1.578125 0.21875q-1.046875 0 -1.828125 -0.4375q-0.765625 -0.453125 -1.21875 -1.234375q-0.3125 -0.5625 -0.3125 -1.40625l0 -4.59375l-0.375 0q-0.765625 0 -1.09375 -0.296875q-0.328125 -0.296875 -0.328125 -0.765625q0 -0.46875 0.328125 -0.765625q0.328125 -0.296875 1.09375 -0.296875l2.5 0l0 6.34375q0 0.6875 0.328125 1.0q0.328125 0.3125 1.015625 0.3125q0.640625 0 1.375 -0.25q0.75 -0.25 1.84375 -0.921875l0 -4.359375l-0.765625 0q-0.765625 0 -1.09375 -0.296875q-0.328125 -0.296875 -0.328125 -0.765625q0 -0.46875 0.328125 -0.765625q0.328125 -0.296875 1.09375 -0.296875l2.90625 0zm7.814575 0l0 1.328125q1.34375 -0.96875 2.125 -1.28125q0.78125 -0.328125 1.453125 -0.328125q1.046875 0 2.015625 0.765625q0.671875 0.515625 0.671875 1.0625q0 0.453125 -0.328125 0.78125q-0.3125 0.3125 -0.765625 0.3125q-0.390625 0 -0.828125 -0.390625q-0.4375 -0.40625 -0.78125 -0.40625q-0.4375 0 -1.328125 0.5625q-0.890625 0.5625 -2.234375 1.6875l0 3.21875l3.046875 0q0.765625 0 1.09375 0.296875q0.328125 0.296875 0.328125 0.78125q0 0.46875 -0.328125 0.765625q-0.328125 0.296875 -1.09375 0.296875l-6.453125 0q-0.765625 0 -1.09375 -0.296875q-0.328125 -0.296875 -0.328125 -0.78125q0 -0.46875 0.328125 -0.765625q0.328125 -0.296875 1.09375 -0.296875l1.28125 0l0 -5.1875l-0.78125 0q-0.765625 0 -1.09375 -0.296875q-0.328125 -0.296875 -0.328125 -0.765625q0 -0.46875 0.328125 -0.765625q0.328125 -0.296875 1.09375 -0.296875l2.90625 0zm18.595825 5.8125l-8.75 0q0.328125 0.828125 1.171875 1.34375q0.859375 0.5 2.3125 0.5q1.1875 0 3.15625 -0.5q0.8125 -0.21875 1.109375 -0.21875q0.4375 0 0.71875 0.3125q0.296875 0.296875 0.296875 0.75q0 0.421875 -0.3125 0.71875q-0.421875 0.375 -2.03125 0.734375q-1.609375 0.34375 -3.09375 0.34375q-2.5625 0 -4.109375 -1.4375q-1.53125 -1.453125 -1.53125 -3.578125q0 -2.25 1.65625 -3.65625q1.671875 -1.40625 3.828125 -1.40625q1.3125 0 2.390625 0.453125q1.09375 0.453125 1.625 0.984375q0.75 0.78125 1.234375 1.90625q0.328125 0.796875 0.328125 1.84375l0 0.90625zm-2.359375 -2.140625q-0.484375 -0.921875 -1.28125 -1.375q-0.78125 -0.453125 -1.875 -0.453125q-1.09375 0 -1.890625 0.453125q-0.78125 0.453125 -1.28125 1.375l6.328125 0zm14.705261 -7.7187653l0 11.35939l0.359375 0q0.765625 0 1.09375 0.296875q0.34375 0.296875 0.34375 0.78125q0 0.46875 -0.328125 0.765625q-0.328125 0.296875 -1.109375 0.296875l-2.484375 0l0 -0.515625q-0.734375 0.421875 -1.53125 0.640625q-0.796875 0.21875 -1.65625 0.21875q-2.40625 0 -3.875 -1.390625q-1.46875 -1.390625 -1.46875 -3.46875q0 -2.15625 1.546875 -3.6875q1.546875 -1.53125 3.765625 -1.53125q0.828125 0 1.625 0.25q0.8125 0.25 1.59375 0.765625l0 -2.65625l-0.375 0q-0.765625 0 -1.09375 -0.296875q-0.328125 -0.296875 -0.328125 -0.765625q0 -0.46875 0.328125 -0.765625q0.328125 -0.29689026 1.09375 -0.29689026l2.5 0zm-2.125 9.04689q0 -1.3125 -0.9375 -2.234375q-0.921875 -0.921875 -2.265625 -0.921875q-1.328125 0 -2.265625 0.921875q-0.921875 0.921875 -0.921875 2.203125q0 1.1875 0.828125 1.9375q0.84375 0.75 2.359375 0.75q1.515625 0 2.359375 -0.75q0.84375 -0.75 0.84375 -1.90625zm15.939575 10.859375l-11.734375 0q-0.765625 0 -1.09375 -0.296875q-0.328125 -0.28125 -0.328125 -0.765625q0 -0.484375 0.328125 -0.78125q0.328125 -0.296875 1.09375 -0.296875l11.734375 0q0.75 0 1.078125 0.296875q0.328125 0.296875 0.328125 0.78125q0 0.46875 -0.328125 0.765625q-0.3125 0.296875 -1.078125 0.296875zm3.5958252 -15.859375l0 0.59375q0.515625 -0.5 0.9375 -0.6875q0.421875 -0.203125 0.96875 -0.203125q0.46875 0 0.921875 0.234375q0.46875 0.21875 0.90625 0.6875q0.546875 -0.46875 1.109375 -0.6875q0.578125 -0.21875 1.171875 -0.21875q1.1875 0 1.921875 0.625q0.984375 0.84375 0.984375 2.1875l0 4.78125q0.65625 0 0.984375 0.3125q0.328125 0.296875 0.328125 0.765625q0 0.46875 -0.328125 0.765625q-0.328125 0.296875 -1.09375 0.296875l-2.03125 0l0 -6.734375q0 -0.5 -0.171875 -0.6875q-0.171875 -0.1875 -0.546875 -0.1875q-0.34375 0 -0.65625 0.1875q-0.375 0.265625 -0.9375 0.984375l0 4.296875q0.671875 0 0.984375 0.3125q0.328125 0.296875 0.328125 0.765625q0 0.46875 -0.328125 0.765625q-0.3125 0.296875 -1.078125 0.296875l-2.03125 0l0 -6.734375q0 -0.484375 -0.1875 -0.671875q-0.1875 -0.203125 -0.546875 -0.203125q-0.375 0 -0.75 0.234375q-0.359375 0.234375 -0.859375 0.9375l0 4.296875q0.65625 0 0.984375 0.3125q0.328125 0.296875 0.328125 0.765625q0 0.46875 -0.328125 0.765625q-0.328125 0.296875 -1.09375 0.296875l-1.921875 0q-0.78125 0 -1.109375 -0.296875q-0.328125 -0.296875 -0.328125 -0.78125q0 -0.46875 0.328125 -0.765625q0.328125 -0.296875 1.0 -0.296875l0 -5.1875q-0.671875 0 -1.0 -0.296875q-0.328125 -0.296875 -0.328125 -0.765625q0 -0.46875 0.328125 -0.765625q0.328125 -0.296875 1.109375 -0.296875l2.03125 0zm21.439636 5.8125l-8.75 0q0.328125 0.828125 1.171875 1.34375q0.859375 0.5 2.3125 0.5q1.1875 0 3.15625 -0.5q0.8125 -0.21875 1.109375 -0.21875q0.4375 0 0.71875 0.3125q0.296875 0.296875 0.296875 0.75q0 0.421875 -0.3125 0.71875q-0.421875 0.375 -2.03125 0.734375q-1.609375 0.34375 -3.09375 0.34375q-2.5625 0 -4.109375 -1.4375q-1.53125 -1.453125 -1.53125 -3.578125q0 -2.25 1.65625 -3.65625q1.671875 -1.40625 3.828125 -1.40625q1.3125 0 2.390625 0.453125q1.09375 0.453125 1.625 0.984375q0.75 0.78125 1.234375 1.90625q0.328125 0.796875 0.328125 1.84375l0 0.90625zm-2.359375 -2.140625q-0.484375 -0.921875 -1.28125 -1.375q-0.78125 -0.453125 -1.875 -0.453125q-1.09375 0 -1.890625 0.453125q-0.78125 0.453125 -1.28125 1.375l6.328125 0zm6.5177 -3.671875l0 0.59375q0.515625 -0.5 0.9375 -0.6875q0.421875 -0.203125 0.96875 -0.203125q0.46875 0 0.921875 0.234375q0.46875 0.21875 0.90625 0.6875q0.546875 -0.46875 1.109375 -0.6875q0.578125 -0.21875 1.171875 -0.21875q1.1875 0 1.921875 0.625q0.984375 0.84375 0.984375 2.1875l0 4.78125q0.65625 0 0.984375 0.3125q0.328125 0.296875 0.328125 0.765625q0 0.46875 -0.328125 0.765625q-0.328125 0.296875 -1.09375 0.296875l-2.03125 0l0 -6.734375q0 -0.5 -0.171875 -0.6875q-0.171875 -0.1875 -0.546875 -0.1875q-0.34375 0 -0.65625 0.1875q-0.375 0.265625 -0.9375 0.984375l0 4.296875q0.671875 0 0.984375 0.3125q0.328125 0.296875 0.328125 0.765625q0 0.46875 -0.328125 0.765625q-0.3125 0.296875 -1.078125 0.296875l-2.03125 0l0 -6.734375q0 -0.484375 -0.1875 -0.671875q-0.1875 -0.203125 -0.546875 -0.203125q-0.375 0 -0.75 0.234375q-0.359375 0.234375 -0.859375 0.9375l0 4.296875q0.65625 0 0.984375 0.3125q0.328125 0.296875 0.328125 0.765625q0 0.46875 -0.328125 0.765625q-0.328125 0.296875 -1.09375 0.296875l-1.921875 0q-0.78125 0 -1.109375 -0.296875q-0.328125 -0.296875 -0.328125 -0.78125q0 -0.46875 0.328125 -0.765625q0.328125 -0.296875 1.0 -0.296875l0 -5.1875q-0.671875 0 -1.0 -0.296875q-0.328125 -0.296875 -0.328125 -0.765625q0 -0.46875 0.328125 -0.765625q0.328125 -0.296875 1.109375 -0.296875l2.03125 0z" fill-rule="nonzero"/><path fill="#000000" fill-opacity="0.0" d="m384.0 354.74014l128.0 0l0 42.015778l-128.0 0z" fill-rule="evenodd"/><path fill="#000000" d="m402.648 380.47266q-0.921875 0.765625 -1.765625 1.09375q-0.828125 0.3125 -1.796875 0.3125q-1.59375 0 -2.453125 -0.78125q-0.859375 -0.78125 -0.859375 -1.984375q0 -0.71875 0.328125 -1.296875q0.328125 -0.59375 0.84375 -0.9375q0.53125 -0.359375 1.1875 -0.546875q0.46875 -0.125 1.453125 -0.25q1.984375 -0.234375 2.921875 -0.5625q0.015625 -0.34375 0.015625 -0.421875q0 -1.0 -0.46875 -1.421875q-0.625 -0.546875 -1.875 -0.546875q-1.15625 0 -1.703125 0.40625q-0.546875 0.40625 -0.8125 1.421875l-1.609375 -0.21875q0.21875 -1.015625 0.71875 -1.640625q0.5 -0.640625 1.453125 -0.984375q0.953125 -0.34375 2.1875 -0.34375q1.25 0 2.015625 0.296875q0.78125 0.28125 1.140625 0.734375q0.375 0.4375 0.515625 1.109375q0.078125 0.421875 0.078125 1.515625l0 2.1875q0 2.28125 0.109375 2.890625q0.109375 0.59375 0.40625 1.15625l-1.703125 0q-0.265625 -0.515625 -0.328125 -1.1875zm-0.140625 -3.671875q-0.890625 0.375 -2.671875 0.625q-1.015625 0.140625 -1.4375 0.328125q-0.421875 0.1875 -0.65625 0.53125q-0.21875 0.34375 -0.21875 0.78125q0 0.65625 0.5 1.09375q0.5 0.4375 1.453125 0.4375q0.9375 0 1.671875 -0.40625q0.75 -0.421875 1.09375 -1.140625q0.265625 -0.5625 0.265625 -1.640625l0 -0.609375zm10.516357 1.3125l1.609375 0.21875q-0.265625 1.65625 -1.359375 2.609375q-1.078125 0.9375 -2.671875 0.9375q-1.984375 0 -3.1875 -1.296875q-1.203125 -1.296875 -1.203125 -3.71875q0 -1.578125 0.515625 -2.75q0.515625 -1.171875 1.578125 -1.75q1.0625 -0.59375 2.3125 -0.59375q1.578125 0 2.578125 0.796875q1.0 0.796875 1.28125 2.265625l-1.59375 0.234375q-0.234375 -0.96875 -0.8125 -1.453125q-0.578125 -0.5 -1.390625 -0.5q-1.234375 0 -2.015625 0.890625q-0.78125 0.890625 -0.78125 2.8125q0 1.953125 0.75 2.84375q0.75 0.875 1.953125 0.875q0.96875 0 1.609375 -0.59375q0.65625 -0.59375 0.828125 -1.828125zm6.59375 2.078125l0.234375 1.453125q-0.6875 0.140625 -1.234375 0.140625q-0.890625 0 -1.390625 -0.28125q-0.484375 -0.28125 -0.6875 -0.734375q-0.203125 -0.46875 -0.203125 -1.9375l0 -5.578125l-1.203125 0l0 -1.265625l1.203125 0l0 -2.390625l1.625 -0.984375l0 3.375l1.65625 0l0 1.265625l-1.65625 0l0 5.671875q0 0.6875 0.078125 0.890625q0.09375 0.203125 0.28125 0.328125q0.203125 0.109375 0.578125 0.109375q0.265625 0 0.71875 -0.0625zm7.9332886 1.46875l0 -1.421875q-1.125 1.640625 -3.0625 1.640625q-0.859375 0 -1.609375 -0.328125q-0.734375 -0.328125 -1.09375 -0.828125q-0.359375 -0.5 -0.5 -1.21875q-0.109375 -0.46875 -0.109375 -1.53125l0 -5.984375l1.640625 0l0 5.359375q0 1.28125 0.109375 1.734375q0.15625 0.640625 0.65625 1.015625q0.5 0.375 1.234375 0.375q0.734375 0 1.375 -0.375q0.65625 -0.390625 0.921875 -1.03125q0.265625 -0.65625 0.265625 -1.890625l0 -5.1875l1.640625 0l0 9.671875l-1.46875 0zm10.360107 -1.1875q-0.921875 0.765625 -1.765625 1.09375q-0.828125 0.3125 -1.796875 0.3125q-1.59375 0 -2.453125 -0.78125q-0.859375 -0.78125 -0.859375 -1.984375q0 -0.71875 0.328125 -1.296875q0.328125 -0.59375 0.84375 -0.9375q0.53125 -0.359375 1.1875 -0.546875q0.46875 -0.125 1.453125 -0.25q1.984375 -0.234375 2.921875 -0.5625q0.015625 -0.34375 0.015625 -0.421875q0 -1.0 -0.46875 -1.421875q-0.625 -0.546875 -1.875 -0.546875q-1.15625 0 -1.703125 0.40625q-0.546875 0.40625 -0.8125 1.421875l-1.609375 -0.21875q0.21875 -1.015625 0.71875 -1.640625q0.5 -0.640625 1.453125 -0.984375q0.953125 -0.34375 2.1875 -0.34375q1.25 0 2.015625 0.296875q0.78125 0.28125 1.140625 0.734375q0.375 0.4375 0.515625 1.109375q0.078125 0.421875 0.078125 1.515625l0 2.1875q0 2.28125 0.109375 2.890625q0.109375 0.59375 0.40625 1.15625l-1.703125 0q-0.265625 -0.515625 -0.328125 -1.1875zm-0.140625 -3.671875q-0.890625 0.375 -2.671875 0.625q-1.015625 0.140625 -1.4375 0.328125q-0.421875 0.1875 -0.65625 0.53125q-0.21875 0.34375 -0.21875 0.78125q0 0.65625 0.5 1.09375q0.5 0.4375 1.453125 0.4375q0.9375 0 1.671875 -0.40625q0.75 -0.421875 1.09375 -1.140625q0.265625 -0.5625 0.265625 -1.640625l0 -0.609375zm4.1569824 4.859375l0 -13.359375l1.640625 0l0 13.359375l-1.640625 0zm15.703125 0l0 -1.421875q-1.125 1.640625 -3.0625 1.640625q-0.859375 0 -1.609375 -0.328125q-0.734375 -0.328125 -1.09375 -0.828125q-0.359375 -0.5 -0.5 -1.21875q-0.109375 -0.46875 -0.109375 -1.53125l0 -5.984375l1.640625 0l0 5.359375q0 1.28125 0.109375 1.734375q0.15625 0.640625 0.65625 1.015625q0.5 0.375 1.234375 0.375q0.734375 0 1.375 -0.375q0.65625 -0.390625 0.921875 -1.03125q0.265625 -0.65625 0.265625 -1.890625l0 -5.1875l1.640625 0l0 9.671875l-1.46875 0zm3.391327 -2.890625l1.625 -0.25q0.125 0.96875 0.75 1.5q0.625 0.515625 1.75 0.515625q1.125 0 1.671875 -0.453125q0.546875 -0.46875 0.546875 -1.09375q0 -0.546875 -0.484375 -0.875q-0.328125 -0.21875 -1.671875 -0.546875q-1.8125 -0.46875 -2.515625 -0.796875q-0.6875 -0.328125 -1.046875 -0.90625q-0.359375 -0.59375 -0.359375 -1.3125q0 -0.640625 0.296875 -1.1875q0.296875 -0.5625 0.8125 -0.921875q0.375 -0.28125 1.03125 -0.46875q0.671875 -0.203125 1.421875 -0.203125q1.140625 0 2.0 0.328125q0.859375 0.328125 1.265625 0.890625q0.421875 0.5625 0.578125 1.5l-1.609375 0.21875q-0.109375 -0.75 -0.640625 -1.171875q-0.515625 -0.421875 -1.46875 -0.421875q-1.140625 0 -1.625 0.375q-0.46875 0.375 -0.46875 0.875q0 0.3125 0.1875 0.578125q0.203125 0.265625 0.640625 0.4375q0.234375 0.09375 1.4375 0.421875q1.75 0.453125 2.4375 0.75q0.6875 0.296875 1.078125 0.859375q0.390625 0.5625 0.390625 1.40625q0 0.828125 -0.484375 1.546875q-0.46875 0.71875 -1.375 1.125q-0.90625 0.390625 -2.046875 0.390625q-1.875 0 -2.875 -0.78125q-0.984375 -0.78125 -1.25 -2.328125zm16.296875 1.703125q-0.921875 0.765625 -1.765625 1.09375q-0.828125 0.3125 -1.796875 0.3125q-1.59375 0 -2.453125 -0.78125q-0.859375 -0.78125 -0.859375 -1.984375q0 -0.71875 0.328125 -1.296875q0.328125 -0.59375 0.84375 -0.9375q0.53125 -0.359375 1.1875 -0.546875q0.46875 -0.125 1.453125 -0.25q1.984375 -0.234375 2.921875 -0.5625q0.015625 -0.34375 0.015625 -0.421875q0 -1.0 -0.46875 -1.421875q-0.625 -0.546875 -1.875 -0.546875q-1.15625 0 -1.703125 0.40625q-0.546875 0.40625 -0.8125 1.421875l-1.609375 -0.21875q0.21875 -1.015625 0.71875 -1.640625q0.5 -0.640625 1.453125 -0.984375q0.953125 -0.34375 2.1875 -0.34375q1.25 0 2.015625 0.296875q0.78125 0.28125 1.140625 0.734375q0.375 0.4375 0.515625 1.109375q0.078125 0.421875 0.078125 1.515625l0 2.1875q0 2.28125 0.109375 2.890625q0.109375 0.59375 0.40625 1.15625l-1.703125 0q-0.265625 -0.515625 -0.328125 -1.1875zm-0.140625 -3.671875q-0.890625 0.375 -2.671875 0.625q-1.015625 0.140625 -1.4375 0.328125q-0.421875 0.1875 -0.65625 0.53125q-0.21875 0.34375 -0.21875 0.78125q0 0.65625 0.5 1.09375q0.5 0.4375 1.453125 0.4375q0.9375 0 1.671875 -0.40625q0.75 -0.421875 1.09375 -1.140625q0.265625 -0.5625 0.265625 -1.640625l0 -0.609375zm3.891327 5.65625l1.59375 0.234375q0.109375 0.75 0.5625 1.078125q0.609375 0.453125 1.671875 0.453125q1.140625 0 1.75 -0.453125q0.625 -0.453125 0.84375 -1.265625q0.125 -0.5 0.109375 -2.109375q-1.0625 1.265625 -2.671875 1.265625q-2.0 0 -3.09375 -1.4375q-1.09375 -1.4375 -1.09375 -3.453125q0 -1.390625 0.5 -2.5625q0.515625 -1.171875 1.453125 -1.796875q0.953125 -0.640625 2.25 -0.640625q1.703125 0 2.8125 1.375l0 -1.15625l1.515625 0l0 8.359375q0 2.265625 -0.46875 3.203125q-0.453125 0.9375 -1.453125 1.484375q-0.984375 0.546875 -2.453125 0.546875q-1.71875 0 -2.796875 -0.78125q-1.0625 -0.765625 -1.03125 -2.34375zm1.359375 -5.8125q0 1.90625 0.75 2.78125q0.765625 0.875 1.90625 0.875q1.125 0 1.890625 -0.859375q0.765625 -0.875 0.765625 -2.734375q0 -1.78125 -0.796875 -2.671875q-0.78125 -0.90625 -1.890625 -0.90625q-1.09375 0 -1.859375 0.890625q-0.765625 0.875 -0.765625 2.625zm15.953857 1.90625l1.6875 0.203125q-0.40625 1.484375 -1.484375 2.3125q-1.078125 0.8125 -2.765625 0.8125q-2.125 0 -3.375 -1.296875q-1.234375 -1.3125 -1.234375 -3.671875q0 -2.453125 1.25 -3.796875q1.265625 -1.34375 3.265625 -1.34375q1.9375 0 3.15625 1.328125q1.234375 1.3125 1.234375 3.703125q0 0.15625 0 0.4375l-7.21875 0q0.09375 1.59375 0.90625 2.453125q0.8125 0.84375 2.015625 0.84375q0.90625 0 1.546875 -0.46875q0.640625 -0.484375 1.015625 -1.515625zm-5.390625 -2.65625l5.40625 0q-0.109375 -1.21875 -0.625 -1.828125q-0.78125 -0.953125 -2.03125 -0.953125q-1.125 0 -1.90625 0.765625q-0.765625 0.75 -0.84375 2.015625z" fill-rule="nonzero"/><path fill="#000000" fill-opacity="0.0" d="m8.0 192.0l192.0 0l0 45.259842l-192.0 0z" fill-rule="evenodd"/><path fill="#000000" d="m24.556725 220.30812l0 3.5l1.28125 0q0.765625 0 1.09375 0.296875q0.328125 0.296875 0.328125 0.765625q0 0.46875 -0.328125 0.765625q-0.328125 0.296875 -1.09375 0.296875l-3.78125 0q-0.765625 0 -1.09375 -0.296875q-0.328125 -0.296875 -0.328125 -0.765625q0 -0.46875 0.328125 -0.765625q0.328125 -0.296875 1.09375 -0.296875l0.359375 0l0 -9.65625l-0.359375 0q-0.765625 0 -1.09375 -0.296875q-0.328125 -0.296875 -0.328125 -0.765625q0 -0.46875 0.328125 -0.765625q0.328125 -0.296875 1.09375 -0.296875l2.5 0l0 0.71875q0.75 -0.5 1.546875 -0.75q0.8125 -0.25 1.65625 -0.25q2.1875 0 3.71875 1.484375q1.546875 1.484375 1.546875 3.390625q0 2.125 -1.828125 3.5q-1.515625 1.140625 -3.421875 1.140625q-0.828125 0 -1.625 -0.234375q-0.796875 -0.25 -1.59375 -0.71875zm6.328125 -3.671875q0 -0.453125 -0.359375 -1.140625q-0.34375 -0.6875 -1.078125 -1.15625q-0.734375 -0.46875 -1.71875 -0.46875q-1.59375 0 -2.53125 1.203125q-0.640625 0.828125 -0.640625 1.578125q0 0.859375 0.90625 1.671875q0.921875 0.796875 2.265625 0.796875q1.34375 0 2.25 -0.796875q0.90625 -0.796875 0.90625 -1.6875zm8.673965 -4.609375l0 1.328125q1.34375 -0.96875 2.125 -1.28125q0.78125 -0.328125 1.453125 -0.328125q1.046875 0 2.015625 0.765625q0.671875 0.515625 0.671875 1.0625q0 0.453125 -0.328125 0.78125q-0.3125 0.3125 -0.765625 0.3125q-0.390625 0 -0.828125 -0.390625q-0.4375 -0.40625 -0.78125 -0.40625q-0.4375 0 -1.328125 0.5625q-0.890625 0.5625 -2.234375 1.6875l0 3.21875l3.046875 0q0.765625 0 1.09375 0.296875q0.328125 0.296875 0.328125 0.78125q0 0.46875 -0.328125 0.765625q-0.328125 0.296875 -1.09375 0.296875l-6.453125 0q-0.765625 0 -1.09375 -0.296875q-0.328125 -0.296875 -0.328125 -0.78125q0 -0.46875 0.328125 -0.765625q0.328125 -0.296875 1.09375 -0.296875l1.28125 0l0 -5.1875l-0.78125 0q-0.765625 0 -1.09375 -0.296875q-0.328125 -0.296875 -0.328125 -0.765625q0 -0.46875 0.328125 -0.765625q0.328125 -0.296875 1.09375 -0.296875l2.90625 0zm18.78334 4.90625q0 1.21875 -0.6875 2.375q-0.671875 1.15625 -2.015625 1.84375q-1.34375 0.671875 -2.8125 0.671875q-1.46875 0 -2.796875 -0.671875q-1.328125 -0.671875 -2.03125 -1.828125q-0.703125 -1.15625 -0.703125 -2.421875q0 -1.28125 0.703125 -2.515625q0.71875 -1.234375 2.046875 -1.9375q1.328125 -0.703125 2.78125 -0.703125q1.453125 0 2.796875 0.71875q1.359375 0.71875 2.03125 1.953125q0.6875 1.21875 0.6875 2.515625zm-2.125 0q0 -1.03125 -0.734375 -1.890625q-1.015625 -1.171875 -2.65625 -1.171875q-1.453125 0 -2.421875 0.9375q-0.96875 0.921875 -0.96875 2.140625q0 1.0 0.96875 1.875q0.984375 0.859375 2.421875 0.859375q1.4375 0 2.40625 -0.859375q0.984375 -0.875 0.984375 -1.890625zm11.53334 -8.953125l0 2.25l-2.546875 0l0 -2.25l2.546875 0zm-0.875 6.171875l-4.34375 0q-0.78125 0 -1.109375 -0.296875q-0.328125 -0.296875 -0.328125 -0.765625q0 -0.46875 0.328125 -0.765625q0.328125 -0.296875 1.109375 -0.296875l6.484375 0l0 9.90625q0 1.125 -0.484375 1.953125q-0.46875 0.84375 -1.453125 1.4375q-0.96875 0.609375 -2.203125 0.609375l-2.40625 0q-0.78125 0 -1.109375 -0.296875q-0.328125 -0.296875 -0.328125 -0.765625q0 -0.46875 0.328125 -0.765625q0.328125 -0.296875 1.109375 -0.296875l2.34375 0q0.984375 0 1.515625 -0.53125q0.546875 -0.53125 0.546875 -1.34375l0 -7.78125zm16.87709 3.6875l-8.75 0q0.328125 0.828125 1.171875 1.34375q0.859375 0.5 2.3125 0.5q1.1875 0 3.15625 -0.5q0.8125 -0.21875 1.109375 -0.21875q0.4375 0 0.71875 0.3125q0.296875 0.296875 0.296875 0.75q0 0.421875 -0.3125 0.71875q-0.421875 0.375 -2.03125 0.734375q-1.609375 0.34375 -3.09375 0.34375q-2.5625 0 -4.109375 -1.4375q-1.53125 -1.453125 -1.53125 -3.578125q0 -2.25 1.65625 -3.65625q1.671875 -1.40625 3.828125 -1.40625q1.3125 0 2.390625 0.453125q1.09375 0.453125 1.625 0.984375q0.75 0.78125 1.234375 1.90625q0.328125 0.796875 0.328125 1.84375l0 0.90625zm-2.359375 -2.140625q-0.484375 -0.921875 -1.28125 -1.375q-0.78125 -0.453125 -1.875 -0.453125q-1.09375 0 -1.890625 0.453125q-0.78125 0.453125 -1.28125 1.375l6.328125 0zm13.142715 -3.296875q0.375 -0.359375 0.78125 -0.359375q0.453125 0 0.75 0.328125q0.296875 0.328125 0.296875 1.09375l0 1.375q0 0.765625 -0.296875 1.09375q-0.296875 0.3125 -0.765625 0.3125q-0.4375 0 -0.734375 -0.25q-0.21875 -0.1875 -0.34375 -0.765625q-0.125 -0.578125 -0.609375 -0.859375q-0.84375 -0.5 -2.15625 -0.5q-1.515625 0 -2.421875 0.890625q-0.90625 0.890625 -0.90625 2.234375q0 1.25 0.875 1.984375q0.875 0.71875 2.90625 0.71875q1.328125 0 2.171875 -0.265625q0.5 -0.171875 0.9375 -0.5625q0.453125 -0.40625 0.8125 -0.40625q0.4375 0 0.75 0.328125q0.328125 0.3125 0.328125 0.75q0 0.703125 -0.96875 1.34375q-1.4375 0.953125 -4.203125 0.953125q-2.484375 0 -3.875 -1.03125q-1.875 -1.390625 -1.875 -3.796875q0 -2.28125 1.515625 -3.765625q1.53125 -1.5 3.96875 -1.5q0.890625 0 1.640625 0.171875q0.765625 0.15625 1.421875 0.484375zm8.93959 1.75l0 4.28125q0 0.6875 0.28125 0.90625q0.4375 0.34375 1.5625 0.34375q1.640625 0 3.015625 -0.6875q0.53125 -0.28125 0.828125 -0.28125q0.421875 0 0.71875 0.3125q0.3125 0.3125 0.3125 0.765625q0 0.421875 -0.328125 0.71875q-0.515625 0.484375 -2.015625 0.90625q-1.5 0.40625 -2.53125 0.40625q-1.984375 0 -2.984375 -0.859375q-1.0 -0.859375 -1.0 -2.109375l0 -4.703125l-0.765625 0q-0.765625 0 -1.09375 -0.296875q-0.328125 -0.296875 -0.328125 -0.765625q0 -0.46875 0.328125 -0.765625q0.328125 -0.296875 1.09375 -0.296875l0.765625 0l0 -1.921875q0 -0.78125 0.296875 -1.109375q0.296875 -0.328125 0.78125 -0.328125q0.46875 0 0.765625 0.328125q0.296875 0.328125 0.296875 1.109375l0 1.921875l3.953125 0q0.765625 0 1.09375 0.296875q0.328125 0.296875 0.328125 0.765625q0 0.46875 -0.328125 0.765625q-0.328125 0.296875 -1.09375 0.296875l-3.953125 0zm18.673965 3.6875l-8.75 0q0.328125 0.828125 1.171875 1.34375q0.859375 0.5 2.3125 0.5q1.1875 0 3.15625 -0.5q0.8125 -0.21875 1.109375 -0.21875q0.4375 0 0.71875 0.3125q0.296875 0.296875 0.296875 0.75q0 0.421875 -0.3125 0.71875q-0.421875 0.375 -2.03125 0.734375q-1.609375 0.34375 -3.09375 0.34375q-2.5625 0 -4.109375 -1.4375q-1.53125 -1.453125 -1.53125 -3.578125q0 -2.25 1.65625 -3.65625q1.671875 -1.40625 3.828125 -1.40625q1.3125 0 2.390625 0.453125q1.09375 0.453125 1.625 0.984375q0.75 0.78125 1.234375 1.90625q0.328125 0.796875 0.328125 1.84375l0 0.90625zm-2.359375 -2.140625q-0.484375 -0.921875 -1.28125 -1.375q-0.78125 -0.453125 -1.875 -0.453125q-1.09375 0 -1.890625 0.453125q-0.78125 0.453125 -1.28125 1.375l6.328125 0zm14.705223 -7.71875l0 11.359375l0.359375 0q0.765625 0 1.09375 0.296875q0.34375 0.296875 0.34375 0.78125q0 0.46875 -0.328125 0.765625q-0.328125 0.296875 -1.109375 0.296875l-2.484375 0l0 -0.515625q-0.734375 0.421875 -1.53125 0.640625q-0.796875 0.21875 -1.65625 0.21875q-2.4062576 0 -3.8750076 -1.390625q-1.46875 -1.390625 -1.46875 -3.46875q0 -2.15625 1.546875 -3.6875q1.546875 -1.53125 3.7656326 -1.53125q0.828125 0 1.625 0.25q0.8125 0.25 1.59375 0.765625l0 -2.65625l-0.375 0q-0.765625 0 -1.09375 -0.296875q-0.328125 -0.296875 -0.328125 -0.765625q0 -0.46875 0.328125 -0.765625q0.328125 -0.296875 1.09375 -0.296875l2.5 0zm-2.125 9.046875q0 -1.3125 -0.9375 -2.234375q-0.921875 -0.921875 -2.265625 -0.921875q-1.3281326 0 -2.2656326 0.921875q-0.921875 0.921875 -0.921875 2.203125q0 1.1875 0.828125 1.9375q0.84375 0.75 2.3593826 0.75q1.515625 0 2.359375 -0.75q0.84375 -0.75 0.84375 -1.90625zm15.939575 10.859375l-11.734375 0q-0.765625 0 -1.09375 -0.296875q-0.328125 -0.28125 -0.328125 -0.765625q0 -0.484375 0.328125 -0.78125q0.328125 -0.296875 1.09375 -0.296875l11.734375 0q0.75 0 1.078125 0.296875q0.328125 0.296875 0.328125 0.78125q0 0.46875 -0.328125 0.765625q-0.3125 0.296875 -1.078125 0.296875zm3.5958557 -15.859375l0 0.59375q0.515625 -0.5 0.9375 -0.6875q0.421875 -0.203125 0.96875 -0.203125q0.46875 0 0.921875 0.234375q0.46875 0.21875 0.90625 0.6875q0.546875 -0.46875 1.109375 -0.6875q0.578125 -0.21875 1.171875 -0.21875q1.1875 0 1.921875 0.625q0.984375 0.84375 0.984375 2.1875l0 4.78125q0.65625 0 0.984375 0.3125q0.328125 0.296875 0.328125 0.765625q0 0.46875 -0.328125 0.765625q-0.328125 0.296875 -1.09375 0.296875l-2.03125 0l0 -6.734375q0 -0.5 -0.171875 -0.6875q-0.171875 -0.1875 -0.546875 -0.1875q-0.34375 0 -0.65625 0.1875q-0.375 0.265625 -0.9375 0.984375l0 4.296875q0.671875 0 0.984375 0.3125q0.328125 0.296875 0.328125 0.765625q0 0.46875 -0.328125 0.765625q-0.3125 0.296875 -1.078125 0.296875l-2.03125 0l0 -6.734375q0 -0.484375 -0.1875 -0.671875q-0.1875 -0.203125 -0.546875 -0.203125q-0.375 0 -0.75 0.234375q-0.359375 0.234375 -0.859375 0.9375l0 4.296875q0.65625 0 0.984375 0.3125q0.328125 0.296875 0.328125 0.765625q0 0.46875 -0.328125 0.765625q-0.328125 0.296875 -1.09375 0.296875l-1.921875 0q-0.78125 0 -1.109375 -0.296875q-0.328125 -0.296875 -0.328125 -0.78125q0 -0.46875 0.328125 -0.765625q0.328125 -0.296875 1.0 -0.296875l0 -5.1875q-0.671875 0 -1.0 -0.296875q-0.328125 -0.296875 -0.328125 -0.765625q0 -0.46875 0.328125 -0.765625q0.328125 -0.296875 1.109375 -0.296875l2.03125 0zm21.439575 5.8125l-8.75 0q0.328125 0.828125 1.171875 1.34375q0.859375 0.5 2.3125 0.5q1.1875 0 3.15625 -0.5q0.8125 -0.21875 1.109375 -0.21875q0.4375 0 0.71875 0.3125q0.296875 0.296875 0.296875 0.75q0 0.421875 -0.3125 0.71875q-0.421875 0.375 -2.03125 0.734375q-1.609375 0.34375 -3.09375 0.34375q-2.5625 0 -4.109375 -1.4375q-1.53125 -1.453125 -1.53125 -3.578125q0 -2.25 1.65625 -3.65625q1.671875 -1.40625 3.828125 -1.40625q1.3125 0 2.390625 0.453125q1.09375 0.453125 1.625 0.984375q0.75 0.78125 1.234375 1.90625q0.328125 0.796875 0.328125 1.84375l0 0.90625zm-2.359375 -2.140625q-0.484375 -0.921875 -1.28125 -1.375q-0.78125 -0.453125 -1.875 -0.453125q-1.09375 0 -1.890625 0.453125q-0.78125 0.453125 -1.28125 1.375l6.328125 0zm6.5177307 -3.671875l0 0.59375q0.515625 -0.5 0.9375 -0.6875q0.421875 -0.203125 0.96875 -0.203125q0.46875 0 0.921875 0.234375q0.46875 0.21875 0.90625 0.6875q0.546875 -0.46875 1.109375 -0.6875q0.578125 -0.21875 1.171875 -0.21875q1.1875 0 1.921875 0.625q0.984375 0.84375 0.984375 2.1875l0 4.78125q0.65625 0 0.984375 0.3125q0.328125 0.296875 0.328125 0.765625q0 0.46875 -0.328125 0.765625q-0.328125 0.296875 -1.09375 0.296875l-2.03125 0l0 -6.734375q0 -0.5 -0.171875 -0.6875q-0.171875 -0.1875 -0.546875 -0.1875q-0.34375 0 -0.65625 0.1875q-0.375 0.265625 -0.9375 0.984375l0 4.296875q0.671875 0 0.984375 0.3125q0.328125 0.296875 0.328125 0.765625q0 0.46875 -0.328125 0.765625q-0.3125 0.296875 -1.078125 0.296875l-2.03125 0l0 -6.734375q0 -0.484375 -0.1875 -0.671875q-0.1875 -0.203125 -0.546875 -0.203125q-0.375 0 -0.75 0.234375q-0.359375 0.234375 -0.859375 0.9375l0 4.296875q0.65625 0 0.984375 0.3125q0.328125 0.296875 0.328125 0.765625q0 0.46875 -0.328125 0.765625q-0.328125 0.296875 -1.09375 0.296875l-1.921875 0q-0.78125 0 -1.109375 -0.296875q-0.328125 -0.296875 -0.328125 -0.78125q0 -0.46875 0.328125 -0.765625q0.328125 -0.296875 1.0 -0.296875l0 -5.1875q-0.671875 0 -1.0 -0.296875q-0.328125 -0.296875 -0.328125 -0.765625q0 -0.46875 0.328125 -0.765625q0.328125 -0.296875 1.109375 -0.296875l2.03125 0z" fill-rule="nonzero"/><path fill="#000000" fill-opacity="0.0" d="m24.0 426.74014l176.0 0l0 45.259857l-176.0 0z" fill-rule="evenodd"/><path fill="#000000" d="m41.159332 446.76703l0 1.328125q1.34375 -0.96875 2.125 -1.28125q0.78125 -0.328125 1.453125 -0.328125q1.046875 0 2.015625 0.765625q0.671875 0.515625 0.671875 1.0625q0 0.453125 -0.328125 0.78125q-0.3125 0.3125 -0.765625 0.3125q-0.390625 0 -0.828125 -0.390625q-0.4375 -0.40625 -0.78125 -0.40625q-0.4375 0 -1.328125 0.5625q-0.890625 0.5625 -2.234375 1.6875l0 3.21875l3.046875 0q0.765625 0 1.09375 0.296875q0.328125 0.296875 0.328125 0.78125q0 0.46875 -0.328125 0.765625q-0.328125 0.296875 -1.09375 0.296875l-6.453125 0q-0.765625 0 -1.09375 -0.296875q-0.328125 -0.296875 -0.328125 -0.78125q0 -0.46875 0.328125 -0.765625q0.328125 -0.296875 1.09375 -0.296875l1.28125 0l0 -5.1875l-0.78125 0q-0.765625 0 -1.09375 -0.296875q-0.328125 -0.296875 -0.328125 -0.765625q0 -0.46875 0.328125 -0.765625q0.328125 -0.296875 1.09375 -0.296875l2.90625 0zm18.59584 5.8125l-8.75 0q0.328125 0.828125 1.171875 1.34375q0.859375 0.5 2.3125 0.5q1.1875 0 3.15625 -0.5q0.8125 -0.21875 1.109375 -0.21875q0.4375 0 0.71875 0.3125q0.296875 0.296875 0.296875 0.75q0 0.421875 -0.3125 0.71875q-0.421875 0.375 -2.03125 0.734375q-1.609375 0.34375 -3.09375 0.34375q-2.5625 0 -4.109375 -1.4375q-1.53125 -1.453125 -1.53125 -3.578125q0 -2.25 1.65625 -3.65625q1.671875 -1.40625 3.828125 -1.40625q1.3125 0 2.390625 0.453125q1.09375 0.453125 1.625 0.984375q0.75 0.78125 1.234375 1.90625q0.328125 0.796875 0.328125 1.84375l0 0.90625zm-2.359375 -2.140625q-0.484375 -0.921875 -1.28125 -1.375q-0.78125 -0.453125 -1.875 -0.453125q-1.09375 0 -1.890625 0.453125q-0.78125 0.453125 -1.28125 1.375l6.328125 0zm12.111465 -1.171875q-0.515625 -0.328125 -1.09375 -0.484375q-0.5625 -0.171875 -1.1875 -0.171875q-1.25 0 -1.96875 0.40625q-0.328125 0.1875 -0.328125 0.390625q0 0.234375 0.4375 0.46875q0.328125 0.171875 1.484375 0.328125q2.125 0.28125 2.96875 0.578125q1.09375 0.390625 1.671875 1.15625q0.59375 0.75 0.59375 1.59375q0 1.140625 -1.0 1.921875q-1.453125 1.109375 -3.765625 1.109375q-0.921875 0 -1.71875 -0.171875q-0.78125 -0.15625 -1.4375 -0.46875q-0.15625 0.140625 -0.328125 0.21875q-0.171875 0.0625 -0.359375 0.0625q-0.5 0 -0.796875 -0.328125q-0.296875 -0.328125 -0.296875 -1.09375l0 -0.71875q0 -0.765625 0.296875 -1.09375q0.296875 -0.328125 0.765625 -0.328125q0.390625 0 0.640625 0.21875q0.265625 0.203125 0.421875 0.71875q0.484375 0.421875 1.171875 0.640625q0.6875 0.203125 1.578125 0.203125q1.46875 0 2.28125 -0.453125q0.390625 -0.234375 0.390625 -0.484375q0 -0.40625 -0.546875 -0.6875q-0.5625 -0.265625 -2.28125 -0.453125q-2.578125 -0.265625 -3.4375 -1.046875q-0.875 -0.75 -0.875 -1.875q0 -1.140625 0.96875 -1.90625q1.3125 -1.03125 3.4375 -1.03125q0.75 0 1.421875 0.140625q0.6875 0.140625 1.3125 0.421875q0.203125 -0.140625 0.375 -0.203125q0.171875 -0.078125 0.3125 -0.078125q0.4375 0 0.71875 0.328125q0.296875 0.328125 0.296875 1.09375l0 0.515625q0 0.703125 -0.15625 0.953125q-0.34375 0.484375 -0.90625 0.484375q-0.390625 0 -0.6875 -0.234375q-0.28125 -0.25 -0.375 -0.640625zm15.84584 3.3125l-8.75 0q0.328125 0.828125 1.171875 1.34375q0.859375 0.5 2.3125 0.5q1.1875 0 3.15625 -0.5q0.8125 -0.21875 1.109375 -0.21875q0.4375 0 0.71875 0.3125q0.296875 0.296875 0.296875 0.75q0 0.421875 -0.3125 0.71875q-0.421875 0.375 -2.03125 0.734375q-1.609375 0.34375 -3.09375 0.34375q-2.5625 0 -4.109375 -1.4375q-1.53125 -1.453125 -1.53125 -3.578125q0 -2.25 1.65625 -3.65625q1.671875 -1.40625 3.828125 -1.40625q1.3125 0 2.390625 0.453125q1.09375 0.453125 1.625 0.984375q0.75 0.78125 1.234375 1.90625q0.328125 0.796875 0.328125 1.84375l0 0.90625zm-2.359375 -2.140625q-0.484375 -0.921875 -1.28125 -1.375q-0.78125 -0.453125 -1.875 -0.453125q-1.09375 0 -1.890625 0.453125q-0.78125 0.453125 -1.28125 1.375l6.328125 0zm9.361465 -3.671875l0 1.328125q1.34375 -0.96875 2.125 -1.28125q0.78125 -0.328125 1.453125 -0.328125q1.046875 0 2.015625 0.765625q0.671875 0.515625 0.671875 1.0625q0 0.453125 -0.328125 0.78125q-0.3125 0.3125 -0.765625 0.3125q-0.390625 0 -0.828125 -0.390625q-0.4375 -0.40625 -0.78125 -0.40625q-0.4375 0 -1.328125 0.5625q-0.890625 0.5625 -2.234375 1.6875l0 3.21875l3.046875 0q0.765625 0 1.09375 0.296875q0.328125 0.296875 0.328125 0.78125q0 0.46875 -0.328125 0.765625q-0.328125 0.296875 -1.09375 0.296875l-6.453125 0q-0.765625 0 -1.09375 -0.296875q-0.328125 -0.296875 -0.328125 -0.78125q0 -0.46875 0.328125 -0.765625q0.328125 -0.296875 1.09375 -0.296875l1.28125 0l0 -5.1875l-0.78125 0q-0.765625 0 -1.09375 -0.296875q-0.328125 -0.296875 -0.328125 -0.765625q0 -0.46875 0.328125 -0.765625q0.328125 -0.296875 1.09375 -0.296875l2.90625 0zm13.267715 6.859375l2.296875 -4.734375q-0.859375 0 -1.09375 -0.140625q-0.515625 -0.328125 -0.515625 -0.921875q0 -0.46875 0.328125 -0.765625q0.328125 -0.296875 1.09375 -0.296875l2.921875 0q0.765625 0 1.09375 0.296875q0.328125 0.296875 0.328125 0.765625q0 0.46875 -0.328125 0.765625q-0.328125 0.296875 -1.09375 0.296875l-0.359375 0l-3.5625 7.328125l-2.234375 0l-3.5625 -7.328125l-0.3125 0q-0.765625 0 -1.09375 -0.296875q-0.328125 -0.296875 -0.328125 -0.765625q0 -0.46875 0.328125 -0.765625q0.328125 -0.296875 1.09375 -0.296875l2.875 0q0.75 0 1.078125 0.296875q0.328125 0.296875 0.328125 0.765625q0 0.59375 -0.5 0.90625q-0.25 0.15625 -1.109375 0.15625l2.328125 4.734375zm18.12709 -1.046875l-8.75 0q0.328125 0.828125 1.171875 1.34375q0.859375 0.5 2.3125 0.5q1.1875 0 3.15625 -0.5q0.8125 -0.21875 1.109375 -0.21875q0.4375 0 0.71875 0.3125q0.296875 0.296875 0.296875 0.75q0 0.421875 -0.3125 0.71875q-0.421875 0.375 -2.03125 0.734375q-1.609375 0.34375 -3.09375 0.34375q-2.5625 0 -4.109375 -1.4375q-1.53125 -1.453125 -1.53125 -3.578125q0 -2.25 1.65625 -3.65625q1.671875 -1.40625 3.828125 -1.40625q1.3125 0 2.390625 0.453125q1.09375 0.453125 1.625 0.984375q0.75 0.78125 1.234375 1.90625q0.328125 0.796875 0.328125 1.84375l0 0.90625zm-2.359375 -2.140625q-0.484375 -0.921875 -1.28125 -1.375q-0.78125 -0.453125 -1.875 -0.453125q-1.09375 0 -1.890625 0.453125q-0.78125 0.453125 -1.28125 1.375l6.328125 0zm14.705215 -7.71875l0 11.359375l0.359375 0q0.765625 0 1.09375 0.296875q0.34375 0.296875 0.34375 0.78125q0 0.46875 -0.328125 0.765625q-0.328125 0.296875 -1.109375 0.296875l-2.484375 0l0 -0.515625q-0.734375 0.421875 -1.53125 0.640625q-0.796875 0.21875 -1.65625 0.21875q-2.40625 0 -3.875 -1.390625q-1.46875 -1.390625 -1.46875 -3.46875q0 -2.15625 1.546875 -3.6875q1.546875 -1.53125 3.765625 -1.53125q0.828125 0 1.625 0.25q0.8125 0.25 1.59375 0.765625l0 -2.65625l-0.375 0q-0.765625 0 -1.09375 -0.296875q-0.328125 -0.296875 -0.328125 -0.765625q0 -0.46875 0.328125 -0.765625q0.328125 -0.296875 1.09375 -0.296875l2.5 0zm-2.125 9.046875q0 -1.3125 -0.9375 -2.234375q-0.921875 -0.921875 -2.265625 -0.921875q-1.328125 0 -2.265625 0.921875q-0.921875 0.921875 -0.921875 2.203125q0 1.1875 0.828125 1.9375q0.84375 0.75 2.359375 0.75q1.515625 0 2.359375 -0.75q0.84375 -0.75 0.84375 -1.90625zm15.93959 10.859375l-11.734375 0q-0.765625 0 -1.09375 -0.296875q-0.328125 -0.28125 -0.328125 -0.765625q0 -0.484375 0.328125 -0.78125q0.328125 -0.296875 1.09375 -0.296875l11.734375 0q0.75 0 1.078125 0.296875q0.328125 0.296875 0.328125 0.78125q0 0.46875 -0.328125 0.765625q-0.3125 0.296875 -1.078125 0.296875zm3.5958405 -15.859375l0 0.59375q0.515625 -0.5 0.9375 -0.6875q0.421875 -0.203125 0.96875 -0.203125q0.46875 0 0.921875 0.234375q0.46875 0.21875 0.90625 0.6875q0.546875 -0.46875 1.109375 -0.6875q0.578125 -0.21875 1.171875 -0.21875q1.1875 0 1.921875 0.625q0.984375 0.84375 0.984375 2.1875l0 4.78125q0.65625 0 0.984375 0.3125q0.328125 0.296875 0.328125 0.765625q0 0.46875 -0.328125 0.765625q-0.328125 0.296875 -1.09375 0.296875l-2.03125 0l0 -6.734375q0 -0.5 -0.171875 -0.6875q-0.171875 -0.1875 -0.546875 -0.1875q-0.34375 0 -0.65625 0.1875q-0.375 0.265625 -0.9375 0.984375l0 4.296875q0.671875 0 0.984375 0.3125q0.328125 0.296875 0.328125 0.765625q0 0.46875 -0.328125 0.765625q-0.3125 0.296875 -1.078125 0.296875l-2.03125 0l0 -6.734375q0 -0.484375 -0.1875 -0.671875q-0.1875 -0.203125 -0.546875 -0.203125q-0.375 0 -0.75 0.234375q-0.359375 0.234375 -0.859375 0.9375l0 4.296875q0.65625 0 0.984375 0.3125q0.328125 0.296875 0.328125 0.765625q0 0.46875 -0.328125 0.765625q-0.328125 0.296875 -1.09375 0.296875l-1.921875 0q-0.78125 0 -1.109375 -0.296875q-0.328125 -0.296875 -0.328125 -0.78125q0 -0.46875 0.328125 -0.765625q0.328125 -0.296875 1.0 -0.296875l0 -5.1875q-0.671875 0 -1.0 -0.296875q-0.328125 -0.296875 -0.328125 -0.765625q0 -0.46875 0.328125 -0.765625q0.328125 -0.296875 1.109375 -0.296875l2.03125 0zm21.43959 5.8125l-8.75 0q0.328125 0.828125 1.171875 1.34375q0.859375 0.5 2.3125 0.5q1.1875 0 3.15625 -0.5q0.8125 -0.21875 1.109375 -0.21875q0.4375 0 0.71875 0.3125q0.296875 0.296875 0.296875 0.75q0 0.421875 -0.3125 0.71875q-0.421875 0.375 -2.03125 0.734375q-1.609375 0.34375 -3.09375 0.34375q-2.5625 0 -4.109375 -1.4375q-1.53125 -1.453125 -1.53125 -3.578125q0 -2.25 1.65625 -3.65625q1.671875 -1.40625 3.828125 -1.40625q1.3125 0 2.390625 0.453125q1.09375 0.453125 1.625 0.984375q0.75 0.78125 1.234375 1.90625q0.328125 0.796875 0.328125 1.84375l0 0.90625zm-2.359375 -2.140625q-0.484375 -0.921875 -1.28125 -1.375q-0.78125 -0.453125 -1.875 -0.453125q-1.09375 0 -1.890625 0.453125q-0.78125 0.453125 -1.28125 1.375l6.328125 0zm6.5177155 -3.671875l0 0.59375q0.515625 -0.5 0.9375 -0.6875q0.421875 -0.203125 0.96875 -0.203125q0.46875 0 0.921875 0.234375q0.46875 0.21875 0.90625 0.6875q0.546875 -0.46875 1.109375 -0.6875q0.578125 -0.21875 1.171875 -0.21875q1.1875 0 1.921875 0.625q0.984375 0.84375 0.984375 2.1875l0 4.78125q0.65625 0 0.984375 0.3125q0.328125 0.296875 0.328125 0.765625q0 0.46875 -0.328125 0.765625q-0.328125 0.296875 -1.09375 0.296875l-2.03125 0l0 -6.734375q0 -0.5 -0.171875 -0.6875q-0.171875 -0.1875 -0.546875 -0.1875q-0.34375 0 -0.65625 0.1875q-0.375 0.265625 -0.9375 0.984375l0 4.296875q0.671875 0 0.984375 0.3125q0.328125 0.296875 0.328125 0.765625q0 0.46875 -0.328125 0.765625q-0.3125 0.296875 -1.078125 0.296875l-2.03125 0l0 -6.734375q0 -0.484375 -0.1875 -0.671875q-0.1875 -0.203125 -0.546875 -0.203125q-0.375 0 -0.75 0.234375q-0.359375 0.234375 -0.859375 0.9375l0 4.296875q0.65625 0 0.984375 0.3125q0.328125 0.296875 0.328125 0.765625q0 0.46875 -0.328125 0.765625q-0.328125 0.296875 -1.09375 0.296875l-1.921875 0q-0.78125 0 -1.109375 -0.296875q-0.328125 -0.296875 -0.328125 -0.78125q0 -0.46875 0.328125 -0.765625q0.328125 -0.296875 1.0 -0.296875l0 -5.1875q-0.671875 0 -1.0 -0.296875q-0.328125 -0.296875 -0.328125 -0.765625q0 -0.46875 0.328125 -0.765625q0.328125 -0.296875 1.109375 -0.296875l2.03125 0z" fill-rule="nonzero"/></g></svg>
diff --git a/examples/dataflow/dataflow-add-asarray.py b/examples/dataflow/dataflow-add-asarray.py
index 9853c76f..64a54541 100644
--- a/examples/dataflow/dataflow-add-asarray.py
+++ b/examples/dataflow/dataflow-add-asarray.py
@@ -18,7 +18,7 @@ def run(argv=None):
     known_args, pipeline_args = parser.parse_known_args(argv)
     beam_options = PipelineOptions(pipeline_args)
 
-    spec = cubed.Spec(known_args.tmp_path, max_mem=100000)
+    spec = cubed.Spec(known_args.tmp_path, allowed_mem=100000)
     executor = BeamDagExecutor()
 
     a = xp.asarray(
diff --git a/examples/dataflow/dataflow-add-random.py b/examples/dataflow/dataflow-add-random.py
index 4bd3cba2..6884e566 100644
--- a/examples/dataflow/dataflow-add-random.py
+++ b/examples/dataflow/dataflow-add-random.py
@@ -21,7 +21,7 @@ def run(argv=None):
     known_args, pipeline_args = parser.parse_known_args(argv)
     beam_options = PipelineOptions(pipeline_args)
 
-    spec = cubed.Spec(known_args.tmp_path, max_mem=2_000_000_000)
+    spec = cubed.Spec(known_args.tmp_path, allowed_mem=2_000_000_000)
     executor = BeamDagExecutor()
 
     a = cubed.random.random(
diff --git a/examples/dataflow/dataflow-matmul-random.py b/examples/dataflow/dataflow-matmul-random.py
index 01901c25..374d2c24 100644
--- a/examples/dataflow/dataflow-matmul-random.py
+++ b/examples/dataflow/dataflow-matmul-random.py
@@ -19,7 +19,7 @@ def run(argv=None):
     known_args, pipeline_args = parser.parse_known_args(argv)
     beam_options = PipelineOptions(pipeline_args)
 
-    spec = cubed.Spec(known_args.tmp_path, max_mem=2_000_000_000)
+    spec = cubed.Spec(known_args.tmp_path, allowed_mem=2_000_000_000)
     executor = BeamDagExecutor()
 
     a = cubed.random.random(
diff --git a/examples/lithops/lithops-add-asarray.py b/examples/lithops/lithops-add-asarray.py
index 5b8def71..4bdcc75c 100644
--- a/examples/lithops/lithops-add-asarray.py
+++ b/examples/lithops/lithops-add-asarray.py
@@ -7,7 +7,7 @@ from cubed.runtime.executors.lithops import LithopsDagExecutor
 if __name__ == "__main__":
     tmp_path = sys.argv[1]
     runtime = sys.argv[2]
-    spec = cubed.Spec(tmp_path, max_mem=100000)
+    spec = cubed.Spec(tmp_path, allowed_mem=100000)
     executor = LithopsDagExecutor()
     a = xp.asarray(
         [[1, 2, 3, 4], [5, 6, 7, 8], [9, 10, 11, 12], [13, 14, 15, 16]],
diff --git a/examples/modal/modal-add-asarray.py b/examples/modal/modal-add-asarray.py
index 6a86faa3..26c4baa3 100644
--- a/examples/modal/modal-add-asarray.py
+++ b/examples/modal/modal-add-asarray.py
@@ -7,7 +7,7 @@ from cubed.runtime.executors.modal_async import AsyncModalDagExecutor
 
 if __name__ == "__main__":
     tmp_path = sys.argv[1]
-    spec = cubed.Spec(tmp_path, max_mem=100000)
+    spec = cubed.Spec(tmp_path, allowed_mem=100000)
     executor = AsyncModalDagExecutor()
     a = xp.asarray(
         [[1, 2, 3, 4], [5, 6, 7, 8], [9, 10, 11, 12], [13, 14, 15, 16]],
diff --git a/examples/modal/modal-add-random.py b/examples/modal/modal-add-random.py
index d2230119..43cd2eaa 100644
--- a/examples/modal/modal-add-random.py
+++ b/examples/modal/modal-add-random.py
@@ -9,7 +9,7 @@ from cubed.runtime.executors.modal_async import AsyncModalDagExecutor
 
 if __name__ == "__main__":
     tmp_path = sys.argv[1]
-    spec = cubed.Spec(tmp_path, max_mem=2_000_000_000)
+    spec = cubed.Spec(tmp_path, allowed_mem=2_000_000_000)
     executor = AsyncModalDagExecutor()
     a = cubed.random.random(
         (50000, 50000), chunks=(5000, 5000), spec=spec
diff --git a/examples/modal/modal-matmul-random.py b/examples/modal/modal-matmul-random.py
index c5a6bcaa..076301a9 100644
--- a/examples/modal/modal-matmul-random.py
+++ b/examples/modal/modal-matmul-random.py
@@ -10,7 +10,7 @@ from cubed.runtime.executors.modal_async import AsyncModalDagExecutor
 
 if __name__ == "__main__":
     tmp_path = sys.argv[1]
-    spec = cubed.Spec(tmp_path, max_mem=2_000_000_000)
+    spec = cubed.Spec(tmp_path, allowed_mem=2_000_000_000)
     executor = AsyncModalDagExecutor()
     a = cubed.random.random(
         (50000, 50000), chunks=(5000, 5000), spec=spec
diff --git a/pyproject.toml b/pyproject.toml
index f2b78bea..23ff9434 100644
--- a/pyproject.toml
+++ b/pyproject.toml
@@ -45,7 +45,6 @@ modal = [
     "modal-client",
     "s3fs",
 ]
-complete = ["cubed[beam,lithops,modal]"]
 test = [
     "apache-beam",  # beam but not gcsfs as tests use local beam runner
     "cubed[diagnostics,lithops]",  # modal tests separate due to conflicting package reqs


Test patch:
diff --git a/cubed/tests/primitive/test_blockwise.py b/cubed/tests/primitive/test_blockwise.py
index 50b37689..3eef0fc3 100644
--- a/cubed/tests/primitive/test_blockwise.py
+++ b/cubed/tests/primitive/test_blockwise.py
@@ -14,14 +14,15 @@ def executor(request):
     return request.param
 
 
-def test_blockwise(tmp_path, executor):
+@pytest.mark.parametrize("reserved_mem", [0, 100])
+def test_blockwise(tmp_path, executor, reserved_mem):
     source1 = create_zarr(
         [0, 1, 2], dtype=int, chunks=2, store=tmp_path / "source1.zarr"
     )
     source2 = create_zarr(
         [10, 50, 100], dtype=int, chunks=2, store=tmp_path / "source2.zarr"
     )
-    max_mem = 1000
+    allowed_mem = 1000
     target_store = tmp_path / "target.zarr"
 
     pipeline = blockwise(
@@ -31,7 +32,8 @@ def test_blockwise(tmp_path, executor):
         "i",
         source2,
         "j",
-        max_mem=max_mem,
+        allowed_mem=allowed_mem,
+        reserved_mem=reserved_mem,
         target_store=target_store,
         shape=(3, 3),
         dtype=int,
@@ -43,8 +45,9 @@ def test_blockwise(tmp_path, executor):
     assert pipeline.target_array.chunks == (2, 2)
 
     itemsize = np.dtype(int).itemsize
-    assert pipeline.required_mem == (
-        (itemsize * 2)  # source1 compressed chunk
+    assert pipeline.projected_mem == (
+        reserved_mem  # projected includes reserved
+        + (itemsize * 2)  # source1 compressed chunk
         + (itemsize * 2)  # source1 uncompressed chunk
         + (itemsize * 2)  # source2 compressed chunk
         + (itemsize * 2)  # source2 uncompressed chunk
@@ -60,7 +63,7 @@ def test_blockwise(tmp_path, executor):
     assert_array_equal(res[:], np.outer([0, 1, 2], [10, 50, 100]))
 
 
-def _permute_dims(x, /, axes, max_mem, target_store):
+def _permute_dims(x, /, axes, allowed_mem, reserved_mem, target_store):
     # From dask transpose
     if axes:
         if len(axes) != x.ndim:
@@ -73,7 +76,8 @@ def _permute_dims(x, /, axes, max_mem, target_store):
         axes,
         x,
         tuple(range(x.ndim)),
-        max_mem=max_mem,
+        allowed_mem=allowed_mem,
+        reserved_mem=reserved_mem,
         target_store=target_store,
         shape=x.shape,
         dtype=x.dtype,
@@ -89,11 +93,15 @@ def test_blockwise_with_args(tmp_path, executor):
         chunks=(2, 2),
         store=tmp_path / "source.zarr",
     )
-    max_mem = 1000
+    allowed_mem = 1000
     target_store = tmp_path / "target.zarr"
 
     pipeline = _permute_dims(
-        source, axes=(1, 0), max_mem=max_mem, target_store=target_store
+        source,
+        axes=(1, 0),
+        allowed_mem=allowed_mem,
+        reserved_mem=0,
+        target_store=target_store,
     )
 
     assert pipeline.target_array.shape == (3, 3)
@@ -101,7 +109,7 @@ def test_blockwise_with_args(tmp_path, executor):
     assert pipeline.target_array.chunks == (2, 2)
 
     itemsize = np.dtype(int).itemsize
-    assert pipeline.required_mem == (
+    assert pipeline.projected_mem == (
         (itemsize * 2 * 2)  # source compressed chunk
         + (itemsize * 2 * 2)  # source uncompressed chunk
         + (itemsize * 2 * 2)  # output compressed chunk
@@ -118,18 +126,20 @@ def test_blockwise_with_args(tmp_path, executor):
     )
 
 
-def test_blockwise_max_mem_exceeded(tmp_path):
+@pytest.mark.parametrize("reserved_mem", [0, 10])
+def test_blockwise_allowed_mem_exceeded(tmp_path, reserved_mem):
     source1 = create_zarr(
         [0, 1, 2], dtype=np.int64, chunks=2, store=tmp_path / "source1.zarr"
     )
     source2 = create_zarr(
         [10, 50, 100], dtype=np.int64, chunks=2, store=tmp_path / "source2.zarr"
     )
-    max_mem = 100
+    allowed_mem = 100
     target_store = tmp_path / "target.zarr"
 
     with pytest.raises(
-        ValueError, match=r"Blockwise memory \(\d+\) exceeds max_mem \(100\)"
+        ValueError,
+        match=r"Projected blockwise memory \(\d+\) exceeds allowed_mem \(100\), including reserved_mem \(\d+\)",
     ):
         blockwise(
             np.outer,
@@ -138,7 +148,8 @@ def test_blockwise_max_mem_exceeded(tmp_path):
             "i",
             source2,
             "j",
-            max_mem=max_mem,
+            allowed_mem=allowed_mem,
+            reserved_mem=reserved_mem,
             target_store=target_store,
             shape=(3, 3),
             dtype=np.int64,
diff --git a/cubed/tests/primitive/test_rechunk.py b/cubed/tests/primitive/test_rechunk.py
index 00b5e52d..c03fa2d0 100644
--- a/cubed/tests/primitive/test_rechunk.py
+++ b/cubed/tests/primitive/test_rechunk.py
@@ -14,13 +14,24 @@ def executor(request):
 
 
 @pytest.mark.parametrize(
-    "shape, source_chunks, max_mem, target_chunks, expected_required_mem, expected_num_tasks",
+    "shape, source_chunks, allowed_mem, reserved_mem, target_chunks, expected_projected_mem, expected_num_tasks",
     [
         # one target chunk is made up of two source chunks
         (
             (4, 4),
             (1, 2),
             1000,
+            0,
+            (1, 4),
+            1000,
+            1,
+        ),
+        # everything still works with 100 bytes of reserved_mem
+        (
+            (4, 4),
+            (1, 2),
+            1000,
+            100,
             (1, 4),
             1000,
             1,
@@ -30,6 +41,7 @@ def executor(request):
             (4, 4),
             (1, 4),
             4 * 8 * 4,  # elts x itemsize x copies
+            0,
             (4, 1),
             4 * 8 * 4,  # elts x itemsize x copies
             8,
@@ -41,20 +53,21 @@ def test_rechunk(
     executor,
     shape,
     source_chunks,
-    max_mem,
+    allowed_mem,
+    reserved_mem,
     target_chunks,
-    expected_required_mem,
+    expected_projected_mem,
     expected_num_tasks,
 ):
     source = zarr.ones(shape, chunks=source_chunks, store=tmp_path / "source.zarr")
-    max_mem = max_mem
     target_store = tmp_path / "target.zarr"
     temp_store = tmp_path / "temp.zarr"
 
     pipeline = rechunk(
         source,
         target_chunks=target_chunks,
-        max_mem=max_mem,
+        allowed_mem=allowed_mem,
+        reserved_mem=reserved_mem,
         target_store=target_store,
         temp_store=temp_store,
     )
@@ -63,7 +76,7 @@ def test_rechunk(
     assert pipeline.target_array.dtype == source.dtype
     assert pipeline.target_array.chunks == target_chunks
 
-    assert pipeline.required_mem == expected_required_mem
+    assert pipeline.projected_mem == expected_projected_mem
 
     assert pipeline.num_tasks == expected_num_tasks
 
@@ -74,20 +87,21 @@ def test_rechunk(
     assert res.chunks == target_chunks
 
 
-def test_rechunk_max_mem_exceeded(tmp_path):
+def test_rechunk_allowed_mem_exceeded(tmp_path):
     source = zarr.ones((4, 4), chunks=(2, 2), store=tmp_path / "source.zarr")
-    max_mem = 16
+    allowed_mem = 16
     target_store = tmp_path / "target.zarr"
     temp_store = tmp_path / "temp.zarr"
 
-    # max mem is reduced by a factor of 4 from 16 to 4
+    # cubed's allowed_mem is reduced by a factor of 4 for rechunker's max_mem from 16 to 4
     with pytest.raises(
         ValueError, match=r"Source chunk memory \(32\) exceeds max_mem \(4\)"
     ):
         rechunk(
             source,
             target_chunks=(4, 1),
-            max_mem=max_mem,
+            allowed_mem=allowed_mem,
+            reserved_mem=0,
             target_store=target_store,
             temp_store=temp_store,
         )
diff --git a/cubed/tests/test_array_api.py b/cubed/tests/test_array_api.py
index 85b7d1b0..4958e4ab 100644
--- a/cubed/tests/test_array_api.py
+++ b/cubed/tests/test_array_api.py
@@ -11,7 +11,7 @@ from cubed.tests.utils import ALL_EXECUTORS, MAIN_EXECUTORS, MODAL_EXECUTORS
 
 @pytest.fixture()
 def spec(tmp_path):
-    return cubed.Spec(tmp_path, max_mem=100000)
+    return cubed.Spec(tmp_path, allowed_mem=100000)
 
 
 @pytest.fixture(scope="module", params=MAIN_EXECUTORS)
@@ -293,7 +293,7 @@ def test_matmul(spec, executor):
 @pytest.mark.cloud
 def test_matmul_cloud(executor):
     tmp_path = "gs://barry-zarr-test/matmul"
-    spec = cubed.Spec(tmp_path, max_mem=100000)
+    spec = cubed.Spec(tmp_path, allowed_mem=100000)
     try:
         a = xp.asarray(
             [[1, 2, 3, 4], [5, 6, 7, 8], [9, 10, 11, 12], [13, 14, 15, 16]],
@@ -318,7 +318,7 @@ def test_matmul_cloud(executor):
 @pytest.mark.cloud
 def test_matmul_modal(modal_executor):
     tmp_path = "s3://cubed-unittest/matmul"
-    spec = cubed.Spec(tmp_path, max_mem=100000)
+    spec = cubed.Spec(tmp_path, allowed_mem=100000)
     try:
         a = xp.asarray(
             [[1, 2, 3, 4], [5, 6, 7, 8], [9, 10, 11, 12], [13, 14, 15, 16]],
diff --git a/cubed/tests/test_core.py b/cubed/tests/test_core.py
index b675e740..036e8cf7 100644
--- a/cubed/tests/test_core.py
+++ b/cubed/tests/test_core.py
@@ -17,7 +17,7 @@ from cubed.tests.utils import MAIN_EXECUTORS, MODAL_EXECUTORS, TaskCounter, crea
 
 @pytest.fixture()
 def spec(tmp_path):
-    return cubed.Spec(tmp_path, max_mem=100000)
+    return cubed.Spec(tmp_path, allowed_mem=100000)
 
 
 @pytest.fixture(scope="module", params=MAIN_EXECUTORS)
@@ -232,7 +232,7 @@ def test_default_spec(executor):
     )
 
 
-def test_default_spec_max_mem_exceeded():
+def test_default_spec_allowed_mem_exceeded():
     # default spec fails for large computations
     a = xp.ones((100000, 100000), chunks=(10000, 10000))
     with pytest.raises(ValueError):
@@ -240,8 +240,8 @@ def test_default_spec_max_mem_exceeded():
 
 
 def test_different_specs(tmp_path):
-    spec1 = cubed.Spec(tmp_path, max_mem=100000)
-    spec2 = cubed.Spec(tmp_path, max_mem=200000)
+    spec1 = cubed.Spec(tmp_path, allowed_mem=100000)
+    spec2 = cubed.Spec(tmp_path, allowed_mem=200000)
     a = xp.ones((3, 3), chunks=(2, 2), spec=spec1)
     b = xp.ones((3, 3), chunks=(2, 2), spec=spec2)
     with pytest.raises(ValueError):
@@ -249,7 +249,7 @@ def test_different_specs(tmp_path):
 
 
 def test_reduction_multiple_rounds(tmp_path, executor):
-    spec = cubed.Spec(tmp_path, max_mem=1000)
+    spec = cubed.Spec(tmp_path, allowed_mem=1000)
     a = xp.ones((100, 10), dtype=np.uint8, chunks=(1, 10), spec=spec)
     b = xp.sum(a, axis=0, dtype=np.uint8)
     # check that there is > 1 rechunk step
@@ -257,12 +257,12 @@ def test_reduction_multiple_rounds(tmp_path, executor):
         n for (n, d) in b.plan.dag.nodes(data=True) if d["op_name"] == "rechunk"
     ]
     assert len(rechunks) > 1
-    assert b.plan.max_required_mem() == 1000
+    assert b.plan.max_projected_mem() == 1000
     assert_array_equal(b.compute(executor=executor), np.ones((100, 10)).sum(axis=0))
 
 
 def test_reduction_not_enough_memory(tmp_path):
-    spec = cubed.Spec(tmp_path, max_mem=50)
+    spec = cubed.Spec(tmp_path, allowed_mem=50)
     a = xp.ones((100, 10), dtype=np.uint8, chunks=(1, 10), spec=spec)
     with pytest.raises(ValueError, match=r"Not enough memory for reduction"):
         xp.sum(a, axis=0, dtype=np.uint8)
@@ -295,8 +295,8 @@ def test_compute_multiple():
 
 
 def test_compute_multiple_different_specs(tmp_path):
-    spec1 = cubed.Spec(tmp_path, max_mem=100000)
-    spec2 = cubed.Spec(tmp_path, max_mem=200000)
+    spec1 = cubed.Spec(tmp_path, allowed_mem=100000)
+    spec2 = cubed.Spec(tmp_path, allowed_mem=200000)
 
     a1 = xp.ones((3, 3), chunks=(2, 2), spec=spec1)
     b1 = xp.ones((3, 3), chunks=(2, 2), spec=spec1)
@@ -408,7 +408,7 @@ def test_callbacks(spec, executor):
 def test_callbacks_modal(spec, modal_executor):
     task_counter = TaskCounter(check_timestamps=False)
     tmp_path = "s3://cubed-unittest/callbacks"
-    spec = cubed.Spec(tmp_path, max_mem=100000)
+    spec = cubed.Spec(tmp_path, allowed_mem=100000)
     try:
         a = xp.asarray([[1, 2, 3], [4, 5, 6], [7, 8, 9]], chunks=(2, 2), spec=spec)
         b = xp.asarray([[1, 1, 1], [1, 1, 1], [1, 1, 1]], chunks=(2, 2), spec=spec)
diff --git a/cubed/tests/test_gufunc.py b/cubed/tests/test_gufunc.py
index f2d44028..07e59e33 100644
--- a/cubed/tests/test_gufunc.py
+++ b/cubed/tests/test_gufunc.py
@@ -9,7 +9,7 @@ from cubed import apply_gufunc
 
 @pytest.fixture()
 def spec(tmp_path):
-    return cubed.Spec(tmp_path, max_mem=1000000)
+    return cubed.Spec(tmp_path, allowed_mem=1000000)
 
 
 @pytest.mark.parametrize("vectorize", [False, True])
diff --git a/cubed/tests/test_indexing.py b/cubed/tests/test_indexing.py
index 7363b263..fc7b3d9f 100644
--- a/cubed/tests/test_indexing.py
+++ b/cubed/tests/test_indexing.py
@@ -8,7 +8,7 @@ import cubed.array_api as xp
 
 @pytest.fixture()
 def spec(tmp_path):
-    return cubed.Spec(tmp_path, max_mem=100000)
+    return cubed.Spec(tmp_path, allowed_mem=100000)
 
 
 # Int array indexing is not a part of the array API, so test it separately.
diff --git a/cubed/tests/test_mem_utilization.py b/cubed/tests/test_mem_utilization.py
index 242285c2..4a096086 100644
--- a/cubed/tests/test_mem_utilization.py
+++ b/cubed/tests/test_mem_utilization.py
@@ -1,3 +1,5 @@
+import math
+
 import pytest
 
 pytest.importorskip("lithops")
@@ -12,13 +14,19 @@ from cubed.tests.utils import LITHOPS_LOCAL_CONFIG
 
 @pytest.fixture()
 def spec(tmp_path, reserved_mem):
-    return cubed.Spec(tmp_path, max_mem=2_000_000_000, reserved_mem=reserved_mem)
+    return cubed.Spec(tmp_path, allowed_mem=2_000_000_000, reserved_mem=reserved_mem)
 
 
 @pytest.fixture(scope="module")
 def reserved_mem():
     executor = LithopsDagExecutor(config=LITHOPS_LOCAL_CONFIG)
-    return cubed.measure_reserved_memory(executor) * 1.05  # add some wiggle room
+    res = cubed.measure_reserved_memory(executor) * 1.05  # add some wiggle room
+    return round_up_to_multiple(res, 10_000_000)  # round up to nearest multiple of 10MB
+
+
+def round_up_to_multiple(x, multiple=10):
+    """Round up to the nearest multiple"""
+    return math.ceil(x / multiple) * multiple
 
 
 # Array Object
@@ -201,5 +209,5 @@ def run_operation(name, result_array):
     df = hist.stats_df
     print(df)
 
-    # check utilization does not exceed 1
-    assert (df["utilization"] <= 1.0).all()
+    # check projected_mem_utilization does not exceed 1
+    assert (df["projected_mem_utilization"] <= 1.0).all()
diff --git a/cubed/tests/test_optimization.py b/cubed/tests/test_optimization.py
index d6fbe4a9..01be76ee 100644
--- a/cubed/tests/test_optimization.py
+++ b/cubed/tests/test_optimization.py
@@ -9,7 +9,7 @@ from cubed.tests.utils import TaskCounter
 
 @pytest.fixture()
 def spec(tmp_path):
-    return cubed.Spec(tmp_path, max_mem=100000)
+    return cubed.Spec(tmp_path, allowed_mem=100000)
 
 
 def test_fusion(spec):
diff --git a/cubed/tests/test_random.py b/cubed/tests/test_random.py
index 84ce9732..e3b7f904 100644
--- a/cubed/tests/test_random.py
+++ b/cubed/tests/test_random.py
@@ -11,7 +11,7 @@ from cubed.tests.utils import MAIN_EXECUTORS
 
 @pytest.fixture()
 def spec(tmp_path):
-    return cubed.Spec(tmp_path, max_mem=100000)
+    return cubed.Spec(tmp_path, allowed_mem=100000)
 
 
 @pytest.fixture(scope="module", params=MAIN_EXECUTORS)