From 1045107f38313259b63ba0e38963546dace9abe5 Mon Sep 17 00:00:00 2001 From: Enrico Eberhard Date: Fri, 18 Sep 2026 13:36:54 +0200 Subject: [PATCH 01/13] feat: update docusaurus config * Add banner * Change navbar and sidebar wording * Change footer text and logos --- docs/docusaurus.config.js | 48 +++++++++++++++++++++++---------------- 1 file changed, 28 insertions(+), 20 deletions(-) diff --git a/docs/docusaurus.config.js b/docs/docusaurus.config.js index 1b54b0226..1f35ebf2b 100644 --- a/docs/docusaurus.config.js +++ b/docs/docusaurus.config.js @@ -6,12 +6,12 @@ const darkCodeTheme = require("prism-react-renderer").themes.vsDark; import rehypeKatex from "rehype-katex"; import remarkMath from "remark-math"; -const url = "https://docs.aica.tech"; +const url = "https://docs.ai-can-change.tech"; /** @type {import('@docusaurus/types').Config} */ const config = { - title: "AICA for Developers", - tagline: "Documentation for the AICA System and robotics software framework", + title: "Developer Docs", + tagline: "Documentation for the Adaptive & Intelligent Control System and robotics software framework", favicon: "img/favicon.ico", url: url, @@ -62,8 +62,8 @@ const config = { rehypePlugins: [rehypeKatex], lastVersion: "current", versions: { - current: { label: "AICA Core v5", path: "", banner: "none" }, - v4: { label: "AICA Core v4", path: "v4", banner: "none" }, + current: { label: "Core v5", path: "", banner: "none" }, + v4: { label: "Core v4", path: "v4", banner: "none" }, }, }, ], @@ -78,13 +78,21 @@ const config = { autoCollapseCategories: false, }, }, + announcementBar: { + id: 'rebranding-announcement', + content: + 'We are currently updating our brand name and logo! Product terminology and references to AICA are strictly historic. Learn more here', + backgroundColor: '#fafbfc', + textColor: '#091E42', + isCloseable: true, + }, // TODO: add a social media card // image: "img/docusaurus-social-card.jpg", navbar: { - title: "AICA Documentation", + title: "Documentation", logo: { - alt: "AICA Logo", + alt: "Logo", src: "img/aica-logo-black-square-small.svg", srcDark: "img/aica-logo-white-square-small.svg", width: 22, @@ -104,7 +112,7 @@ const config = { position: "left", }, { - label: "AICA Studio", + label: "Studio", type: "docSidebar", docsPluginId: "core", sidebarId: "studioSidebar", @@ -130,9 +138,9 @@ const config = { }, footer: { logo: { - alt: "AICA Logo", - src: "img/logo.svg", - srcDark: "img/logo_dark.svg", + alt: "Logo", + src: "img/aica-logo-black-square-small.svg", + srcDark: "img/aica-logo-white-square-small.svg", width: 42, height: 42, }, @@ -163,10 +171,10 @@ const config = { ], }, { - title: "AICA Studio", + title: "Studio", items: [ { - label: "Tour of AICA Studio", + label: "Tour of Studio", href: "/core/studio/", }, { @@ -179,11 +187,11 @@ const config = { title: "Resources", items: [ { - label: "AICA API", + label: "API", href: "https://link.aica.tech/api", }, { - label: "AICAdemy", + label: "AI Academy", href: "https://link.aica.tech/aicademy", }, { @@ -193,10 +201,10 @@ const config = { ], }, { - title: "AICA", + title: "Company", items: [ { - label: "AICA Community", + label: "Community", href: "https://github.com/aica-technology/community", }, { @@ -204,8 +212,8 @@ const config = { href: "https://www.aica.tech", }, { - label: "contact@aica.tech", - href: "mailto:contact@aica.tech", + label: "contact@ai-can-change.tech", + href: "mailto:contact@ai-can-change.tech", }, // { // label: "Private Training & Support", @@ -222,7 +230,7 @@ const config = { ], }, ], - copyright: `Copyright © ${new Date().getFullYear()} AICA SA`, + // copyright: `Copyright © ${new Date().getFullYear()} AICA SA`, }, prism: { theme: lightCodeTheme, From 25c26f6f1d4d36a717a287834fcc3e66d6b94b48 Mon Sep 17 00:00:00 2001 From: Enrico Eberhard Date: Fri, 18 Sep 2026 13:48:37 +0200 Subject: [PATCH 02/13] feat: remove all AICA references from getting started page --- docs/docs/getting-started.md | 47 ++++++++++++++++++++---------------- 1 file changed, 26 insertions(+), 21 deletions(-) diff --git a/docs/docs/getting-started.md b/docs/docs/getting-started.md index d24eb83e5..1c9af3407 100644 --- a/docs/docs/getting-started.md +++ b/docs/docs/getting-started.md @@ -5,56 +5,61 @@ title: Getting Started import SystemOverview from './getting-started/assets/system-overview-embedded.svg'; import ComponentsControllersHardware from './getting-started/assets/components-controllers-hardware-embedded.svg'; -# Welcome to AICA Documentation +# Adaptive & Intelligent Control Applications -AICA is committed to making robotics more accessible by providing smart software solutions for advanced robot control. +:::important +This organization and its content are not affiliated, associated, authorized, endorsed by, or in any way officially +connected with aicas GmbH, Karlsruhe, Germany (www.aicas.com and https://github.com/aicas). Any references to “AICA” are +strictly historic. +::: + +We are committed to making robotics more accessible by providing smart software solutions for advanced robot control. Robotics software has many layers and comprises many different parts. The following terms are used to distinguish -between different parts of the AICA software stack. +between different parts of our software stack. -## AICA Core +## Core -**AICA Core** is a virtual robotics workspace pre-configured with a growing collection of software modules +**Core** is a virtual robotics workspace pre-configured with a growing collection of software modules for motion generation, signal processing, machine learning and control algorithms. It includes hardware interfaces for real-time external control of popular robot brands, force-torque sensors and cameras. The workspace is the foundation and the software modules are the building blocks. -## AICA applications +## Applications -An **application** is a particular configuration of components, controllers and hardware interfaces from the AICA -Core, generally designed to perform a particular task. +An **application** is a particular configuration of components, controllers and hardware interfaces from the Core, +generally designed to perform a particular task. :::tip -AICA develops bespoke applications to solve specific automation challenges for clients, and offers more general smart +We develop bespoke applications to solve specific automation challenges for clients, and offer more general smart applications built around a particular use-case (for example, mechanical assembly) that can be re-configured in only a few steps. -Visit [our website](https://aica.tech) or [contact us](mailto:contact@aica.tech) to learn more about our service -offerings. +Visit [our website](https://ai-can-change.tech) or [contact us](mailto:contact@ai-can-change.tech) to learn more about +our service offerings. ::: -## AICA Studio +## Studio -**AICA Studio** is the graphical user interface layer to AICA Core that empowers developers to build and +**Studio** is the graphical user interface layer to Core that empowers developers to build and extend their own advanced robotic applications. The interactive application editor can be used to dynamically edit, run and monitor robot behaviors. Monitor robot and sensor state data directly in the browser, and manage application states -and events precisely through predicates, transitions, conditions, sequences or interactive buttons. +and events precisely through predicates, transitions, conditions, sequences, or interactive buttons. -## AICA System +## System -The **AICA System** is the software ecosystem that extends AICA Core and Studio. While AICA Core comes bundled with -the basics, AICA is continually developing additional collections of components, controllers or hardware interfaces +The **System** is the software ecosystem that extends Core and Studio. While Core comes bundled with +the basics, we are continually developing additional collections of components, controllers, or hardware interfaces that suit particular use-cases or types of robots. These first-party add-on packages are available to download from -the AICA registry. +the registry. -In addition to AICA Core, AICA Studio and our package registry, the AICA System additionally includes the following +In addition to Core, Studio, and our package registry, the System additionally includes the following products and resources: -- **AICA Launcher** is a desktop app that can install and run AICA Studio with Core and add-on packages in just a few - clicks +- **Launcher** is a desktop app that can install and run Studio with Core and add-on packages in just a few clicks - The **Component SDK** allows developers to extend the base library with custom functionality that will work seamlessly alongside native components From 662fcc6b0a8191f9a546cc9baa9fc708d6ce1917 Mon Sep 17 00:00:00 2001 From: Enrico Eberhard Date: Fri, 18 Sep 2026 13:49:24 +0200 Subject: [PATCH 03/13] feat: replace AICA Core with Core --- docs/docs/concepts/aica-applications.md | 2 +- .../concepts/building-blocks/controllers/gpio.md | 2 +- .../concepts/building-blocks/controllers/ik.md | 4 ++-- .../concepts/building-blocks/controllers/index.md | 4 ++-- .../concepts/building-blocks/controllers/jtc.md | 4 ++-- docs/docs/concepts/building-blocks/frames.md | 2 +- .../building-blocks/hardware-interfaces.md | 10 +++++----- .../robotics-concepts/motion-generation.md | 2 +- .../compatibility/operating-system.md | 14 +++++++------- .../installation/installation-and-launch.md | 10 +++++----- docs/docs/getting-started/installation/proxies.md | 14 +++++++------- .../custom-components/component-package.md | 6 +++--- docs/docs/reference/manual-installation-launch.md | 12 ++++++------ 13 files changed, 43 insertions(+), 43 deletions(-) diff --git a/docs/docs/concepts/aica-applications.md b/docs/docs/concepts/aica-applications.md index 490b07383..4cf52e56c 100644 --- a/docs/docs/concepts/aica-applications.md +++ b/docs/docs/concepts/aica-applications.md @@ -30,7 +30,7 @@ to be modular or re-usable for other applications. If, instead, the application executable program, usually according to some state machine paradigm, this in turn generally undermines the modern concepts of abstraction and dynamic reconfiguration that ROS 2 tools provide. -To address this challenge, AICA Core includes a generalized execution process known as the Event Engine which +To address this challenge, Core includes a generalized execution process known as the Event Engine which dynamically manages component and controller states according to a declarative and easily reconfigurable application description. diff --git a/docs/docs/concepts/building-blocks/controllers/gpio.md b/docs/docs/concepts/building-blocks/controllers/gpio.md index fe0587932..793c46aa2 100644 --- a/docs/docs/concepts/building-blocks/controllers/gpio.md +++ b/docs/docs/concepts/building-blocks/controllers/gpio.md @@ -70,7 +70,7 @@ or you may see both command and state interfaces bundled under the same group, a ## Using GPIO controllers in the AICA framework -In a ROS 2 control setup, and by extension in AICA Core, GPIO controllers operate on **GPIO interfaces defined in the +In a ROS 2 control setup, and by extension in Core, GPIO controllers operate on **GPIO interfaces defined in the URDF** and exposed by the underlying hardware interface. Two GPIO controllers are bundled by default, each aligned with a specific GPIO role: diff --git a/docs/docs/concepts/building-blocks/controllers/ik.md b/docs/docs/concepts/building-blocks/controllers/ik.md index afff14e7a..27b5542f4 100644 --- a/docs/docs/concepts/building-blocks/controllers/ik.md +++ b/docs/docs/concepts/building-blocks/controllers/ik.md @@ -110,8 +110,8 @@ is to combine IK velocity controllers with motion generators that produce desire to be expressed as smooth, continuous velocity commands, while retaining the robustness, responsiveness, and stability properties of velocity-based IK control. -## Using it in AICA Core +## Using it in Core -Both an IK position and velocity controller are included in AICA Core by default. They can be used via a +Both an IK position and velocity controller are included in Core by default. They can be used via a **Cartesian pose** and **Cartesian twist** signal, respectively, that indicates the desired state. Additional parameters can be modified to limit the Cartesian position or velocity. \ No newline at end of file diff --git a/docs/docs/concepts/building-blocks/controllers/index.md b/docs/docs/concepts/building-blocks/controllers/index.md index a60b6f64c..eaf7f54e3 100644 --- a/docs/docs/concepts/building-blocks/controllers/index.md +++ b/docs/docs/concepts/building-blocks/controllers/index.md @@ -14,9 +14,9 @@ connected to components in the application, and expose predicates and transition Controllers are evaluated at fixed control intervals, defined by the rate of the [hardware interface](../hardware-interfaces). -AICA Core includes a number of controller implementations for joint-space and task-space control in position, +Core includes a number of controller implementations for joint-space and task-space control in position, velocity or force, including force-sensitive impedance and admittance controllers. Additionally, sequenced motions can be executed through a [joint trajectory controller](./jtc). -AICA Core can also work with third-party controllers following the `ros2_control` standard, but may have +Core can also work with third-party controllers following the `ros2_control` standard, but may have reduced compatibility with built-in component signal types and dynamically reconfigured parameters. \ No newline at end of file diff --git a/docs/docs/concepts/building-blocks/controllers/jtc.md b/docs/docs/concepts/building-blocks/controllers/jtc.md index 43bd9af9b..b49fa2cdc 100644 --- a/docs/docs/concepts/building-blocks/controllers/jtc.md +++ b/docs/docs/concepts/building-blocks/controllers/jtc.md @@ -28,9 +28,9 @@ setpoint controllers cannot achieve easily (without further logic embedded in th In contrast to purely linear or direct controllers, JTC is ideal for applications requiring continuous, planned motion, such as robotic arms or any system where joint coordination and motion quality are critical. -## Using it in AICA Core +## Using it in Core -A JTC is included in AICA Core by default and can be used via: +A JTC is included in Core by default and can be used via: 1. a **signal** (in this case, a single message) containing the joint trajectory; *i.e.*, one of joint positions, diff --git a/docs/docs/concepts/building-blocks/frames.md b/docs/docs/concepts/building-blocks/frames.md index f3badb56d..32482d770 100644 --- a/docs/docs/concepts/building-blocks/frames.md +++ b/docs/docs/concepts/building-blocks/frames.md @@ -25,7 +25,7 @@ publish that information as a continuous signal. For instance, a vision component might publish the pose of a detected object to TF, while a motion generator component requires the target pose to be received as a signal. Ideally, the vision component would output the pose as a signal, -but this is not always the case. For these situations, the AICA Core provides components that can extract the pose of a +but this is not always the case. For these situations, the Core provides components that can extract the pose of a desired frame from TF and publish it as a signal, or conversely, receive a pose from a signal and send it to TF. ### Frame to Signal diff --git a/docs/docs/concepts/building-blocks/hardware-interfaces.md b/docs/docs/concepts/building-blocks/hardware-interfaces.md index 82444e737..8c8c33659 100644 --- a/docs/docs/concepts/building-blocks/hardware-interfaces.md +++ b/docs/docs/concepts/building-blocks/hardware-interfaces.md @@ -5,7 +5,7 @@ title: Hardware interfaces # Hardware Interfaces -Hardware interfaces form the **connection layer between AICA Core and physical (or simulated) hardware** (robots, +Hardware interfaces form the **connection layer between Core and physical (or simulated) hardware** (robots, sensors, ...). They are responsible for exposing hardware state and accepting control commands generated by controllers. A typical hardware interface provides the following capabilities: @@ -19,7 +19,7 @@ All AICA hardware interfaces follow the [`ros2_control`](/docs/concepts/ros-concepts/controlling-robots) standard, ensuring compatibility and portability across different robots and deployments. -You can refer to our [AICA Core](/docs/getting-started#aica-core) introduction section for a visual +You can refer to our [Core](/docs/getting-started#core) introduction section for a visual representation of where hardware interfaces come into play in the system, and to the [Supported Hardware](/docs/getting-started/compatibility/supported-hardware) page for an overview of readily available interfaces. @@ -27,7 +27,7 @@ available interfaces. ## Role in the control stack Within the AICA control architecture, hardware interfaces sit at the **lowest level of the control stack** -(see [here](/docs/getting-started#aica-core)): +(see [here](/docs/getting-started#core)): - **Above** them are controllers (e.g., joint trajectory, IK, impedance, GPIO controllers) - **Below** them is the actual robot hardware or simulator @@ -48,12 +48,12 @@ By following the `ros2_control` framework, AICA hardware interfaces: - Integrate seamlessly with ROS 2 controllers and controller managers - Work consistently across simulation and real hardware -As a result, controllers and algorithms developed in AICA Core can be reused across different robots without +As a result, controllers and algorithms developed in Core can be reused across different robots without modification, provided a compliant hardware interface is available. ## Supported hardware and extensibility -AICA Core supports hardware interfaces for **most major robot manipulator brands** and a range of simulators. It is also +Core supports hardware interfaces for **most major robot manipulator brands** and a range of simulators. It is also compatible with **third-party hardware interfaces** that conform to the `ros2_control` standard. A detailed overview of readily supported platforms is available on the diff --git a/docs/docs/concepts/robotics-concepts/motion-generation.md b/docs/docs/concepts/robotics-concepts/motion-generation.md index 3ff50f4d3..66a657b71 100644 --- a/docs/docs/concepts/robotics-concepts/motion-generation.md +++ b/docs/docs/concepts/robotics-concepts/motion-generation.md @@ -40,7 +40,7 @@ combination of both approaches is used: - or the task is divided into motions that simply move the robot from one point to another using fast and optimized trajectories and complex behaviors where the desired robot state is recomputed and adapted online. -AICA Core comes with several online motion generator components that use the current state of the robot to calculate the +Core comes with several online motion generator components that use the current state of the robot to calculate the next command using a mathematical concept called _Dynamical Systems_. ## Dynamical Systems diff --git a/docs/docs/getting-started/compatibility/operating-system.md b/docs/docs/getting-started/compatibility/operating-system.md index eb998f414..fedb3acf2 100644 --- a/docs/docs/getting-started/compatibility/operating-system.md +++ b/docs/docs/getting-started/compatibility/operating-system.md @@ -7,7 +7,7 @@ title: Operating System The AICA System is officially supported on Ubuntu and macOS for both amd64 and arm64 architectures. -AICA Core runs in a Docker container based on Ubuntu 24.04. Thanks to containerization, the majority of the +Core runs in a Docker container based on Ubuntu 24.04. Thanks to containerization, the majority of the installation and usage steps in this guide will be the same for macOS or Ubuntu host platforms unless otherwise indicated. @@ -43,9 +43,9 @@ Ubuntu, but not possible on macOS. ### Summary of OS support -| OS | AICA Launcher support | Notes | -|---------------------------|:---------------------:|----------------------------------------------------------------------------------| -| Ubuntu/Debian | Yes | Real-time kernel patch highly recommended | -| Other Linux distributions | No | Requires launching AICA Core manually. Real-time kernel patch highly recommended | -| macOS | Yes | Limited graphics forwarding due to dropped OpenGL support | -| Windows | No | Requires WSL and running AICA Core manually | +| OS | AICA Launcher support | Notes | +|---------------------------|:---------------------:|-----------------------------------------------------------------------------| +| Ubuntu/Debian | Yes | Real-time kernel patch highly recommended | +| Other Linux distributions | No | Requires launching Core manually. Real-time kernel patch highly recommended | +| macOS | Yes | Limited graphics forwarding due to dropped OpenGL support | +| Windows | No | Requires WSL and running Core manually | diff --git a/docs/docs/getting-started/installation/installation-and-launch.md b/docs/docs/getting-started/installation/installation-and-launch.md index 79c82fdcf..ec0b4553c 100644 --- a/docs/docs/getting-started/installation/installation-and-launch.md +++ b/docs/docs/getting-started/installation/installation-and-launch.md @@ -131,14 +131,14 @@ or contact AICA support. ### Configuring the AICA System image -AICA Launcher provides direct access to AICA Core and Studio, and additionally simplifies installing add-on packages +AICA Launcher provides direct access to Core and Studio, and additionally simplifies installing add-on packages from the registry or from custom SDK contributions. -A "configuration" refers to a specific version of AICA Core and the extra packages and versions that should be included. -Defining configurations helps to ensure repeatable builds and deployments, even if AICA Core or any of the referenced +A "configuration" refers to a specific version of Core and the extra packages and versions that should be included. +Defining configurations helps to ensure repeatable builds and deployments, even if Core or any of the referenced packages are subsequently updated or changed. -The simplest configuration just specifies the AICA Core Version, without any packages. Official packages can be added +The simplest configuration just specifies the Core Version, without any packages. Official packages can be added from a dropdown, with a version subselection for each package. [Custom packages](/docs/category/custom-components) can be built using the SDK and then added to the configuration using a Docker image URI. @@ -151,7 +151,7 @@ mounting for persistent storage or file-system interactions. ### Launching a configuration Press the Launch button for any given configuration to start up the AICA System and enter AICA Studio. For the -first time launching a configuration, the AICA Core software image and any additional packages first need to be pulled +first time launching a configuration, the Core software image and any additional packages first need to be pulled from the registry and bundled into the specific runtime image. Depending on network speeds, this may take a while. After the image has been built, launching the configuration a second time will be much faster as the results are cached. diff --git a/docs/docs/getting-started/installation/proxies.md b/docs/docs/getting-started/installation/proxies.md index 601937f0d..d46e8d58d 100644 --- a/docs/docs/getting-started/installation/proxies.md +++ b/docs/docs/getting-started/installation/proxies.md @@ -10,7 +10,7 @@ AICA programs sometimes need Internet connectivity to function. This section det The following services must be allowlisted on your proxy for AICA programs to function: -AICA Core (Online License): +Core (Online License): - `licensing.aica.tech` / `api.licensing.aica.tech` (HTTPS, 443): used to check the license & authenticate Cloud Storage - `ingress-api.analytics.aica.tech` (HTTPS, 443): used to send analytics data @@ -44,9 +44,9 @@ AICA Launcher supports the following environment variables for proxy configurati - HTTP: `HTTP_PROXY` or `http_proxy` - HTTPS: `HTTPS_PROXY` or `https_proxy` - Bypass: `NO_PROXY` or `no_proxy` -- CA Certificate (used to launch AICA Core): `SSL_CERT_FILE` or `ssl_cert_file` +- CA Certificate (used to launch Core): `SSL_CERT_FILE` or `ssl_cert_file` -Starting with Launcher v2.1, those settings will be properly forwarded to AICA Core instances started through the app. +Starting with Launcher v2.1, those settings will be properly forwarded to Core instances started through the app.
MacOS @@ -62,21 +62,21 @@ This is not required if you open AICA Launcher from the command line using `open
-### AICA Core +### Core :::tip -Starting with Launcher v2.1, proxy settings are setup automatically for AICA Core. +Starting with Launcher v2.1, proxy settings are setup automatically for Core. ::: -Starting with v5.0, AICA Core supports the following environment variables for proxy configuration: +Starting with v5.0, Core supports the following environment variables for proxy configuration: - HTTP: `HTTP_PROXY` or `http_proxy` - HTTPS: `HTTPS_PROXY` or `https_proxy` - Bypass: `NO_PROXY` or `no_proxy` -You must provide the environment variables to AICA Core when starting the container. If you choose to intercept HTTPS traffic, you will also need to mount your certificate inside `/etc/ssl/certs`. +You must provide the environment variables to Core when starting the container. If you choose to intercept HTTPS traffic, you will also need to mount your certificate inside `/etc/ssl/certs`. Example: diff --git a/docs/docs/reference/custom-components/component-package.md b/docs/docs/reference/custom-components/component-package.md index e0c246af8..4dd87999c 100644 --- a/docs/docs/reference/custom-components/component-package.md +++ b/docs/docs/reference/custom-components/component-package.md @@ -15,7 +15,7 @@ A lot of the information in this page is also available in the README of the tem ::: -Custom components can be defined in ROS 2 packages and used alongside the standard library of AICA components in AICA Core. Components can be implemented in C++ or Python. A component package can contain multiple +Custom components can be defined in ROS 2 packages and used alongside the standard library of AICA components in Core. Components can be implemented in C++ or Python. A component package can contain multiple components in either language. ## Package infrastructure @@ -135,7 +135,7 @@ Any changes to the standard directory structure must be reflected in the `CMakeL ### Component descriptions -To fully support custom components in AICA Core, each new component should be fully described -by a JSON file according to the component description schema. +To fully support custom components in Core, a JSON file should fully describe each new component +according to the component description schema. diff --git a/docs/docs/reference/manual-installation-launch.md b/docs/docs/reference/manual-installation-launch.md index fcfb14b50..60d52c709 100644 --- a/docs/docs/reference/manual-installation-launch.md +++ b/docs/docs/reference/manual-installation-launch.md @@ -17,7 +17,7 @@ import dockerNetwork from './assets/win-docker-network.png'; # Manual installation and launch -The following sections explain how to install and launch AICA Core and any additional packages manually from the command +The following sections explain how to install and launch Core and any additional packages manually from the command line without the use of AICA Launcher. The pre-requisites are still a valid license and a host with Docker installed. For the rest of this guide, it will be assumed that a valid license has been saved to a file called `aica-license.toml` on the host machine. @@ -200,15 +200,15 @@ cat aica-license.toml | docker login registry.licensing.aica.tech -u USERNAME -- ## Configuring AICA packages with a manifest file -A runtime application image is configured using a simple **manifest file** defining the version of AICA Core to use and +A runtime application image is configured using a simple **manifest file** defining the version of Core to use and optionally defining additional add-on packages. The manifest file contains a custom docker syntax header pointing to AICA's app-builder tool, and the `docker build` command is used to bundle all listed packages into a final runtime image. -### Configuring a minimal runtime image with a version of AICA Core +### Configuring a minimal runtime image with a version of Core The manifest file must contain a syntax header and a list of packages. The minimal version of the manifest includes -only AICA Core as the `core` package. The version can be changed according to the available releases. +only Core as the `core` package. The version can be changed according to the available releases. :::info @@ -459,7 +459,7 @@ docker run -it --rm \ ### Setting a super-admin password -AICA Core v4.3.0 and later require authentication for AICA Studio and the API. If no users exist in the mounted user +Core v4.3.0 and later require authentication for AICA Studio and the API. If no users exist in the mounted user database, as is the case for a new configuration or when no data folder is mounted, a system administration password can be set through an environment variable which grants full administration rights. @@ -580,7 +580,7 @@ You should then be able to run `rviz2` inside the container and see the window a WSL With the right configuration, display sharing can also be achieved with [WSLg](https://github.com/microsoft/wslg). For -that, modify the command to run AICA Core to include the following lines: +that, modify the command to run Core to include the following lines: ```bash docker run -it --rm \ From 6302deee043b15e513f72ab1e076b020807de798 Mon Sep 17 00:00:00 2001 From: Enrico Eberhard Date: Fri, 18 Sep 2026 13:59:32 +0200 Subject: [PATCH 04/13] feat: replace AICA Studio|System with Studio|System --- docs/docs/concepts.md | 6 ++--- docs/docs/concepts/aica-applications.md | 2 +- .../concepts/building-blocks/components.md | 4 ++-- docs/docs/concepts/building-blocks/events.md | 2 +- docs/docs/concepts/building-blocks/frames.md | 4 ++-- docs/docs/concepts/building-blocks/signals.md | 2 +- docs/docs/concepts/going-further.md | 4 ++-- .../robotics-concepts/motion-generation.md | 4 ++-- .../concepts/ros-concepts/built-on-ros.md | 6 ++--- ...mponents-controllers-hardware-embedded.svg | 2 +- .../assets/system-overview-embedded.svg | 2 +- .../compatibility/_category_.json | 2 +- .../compatibility/operating-system.md | 4 ++-- .../compatibility/supported-hardware.md | 4 ++-- .../installation/_category_.json | 2 +- .../installation/installation-and-launch.md | 22 ++++++++--------- .../getting-started/installation/licensing.md | 24 +++++++++---------- docs/docs/getting-started/next-steps.md | 2 +- .../component-descriptions.md | 2 +- .../custom-components/custom-component.md | 2 +- .../custom-components/package-building.md | 2 +- .../reference/manual-installation-launch.md | 24 +++++++++---------- docs/docs/reference/yaml-syntax.md | 6 ++--- 23 files changed, 67 insertions(+), 67 deletions(-) diff --git a/docs/docs/concepts.md b/docs/docs/concepts.md index 6b929ab2b..8167757ae 100644 --- a/docs/docs/concepts.md +++ b/docs/docs/concepts.md @@ -8,11 +8,11 @@ AICA Universe is built on open and extensible standards. This section introduces System, including its ROS integration, robotics foundations, and application building blocks. Explore the topics below for detailed explanations to help you design and develop your own AICA applications and components. -- [ROS 2 concepts](/docs/category/ros-2-concepts): Understand how the AICA System leverages ROS, including nodes, +- [ROS 2 concepts](/docs/category/ros-2-concepts): Understand how the System leverages ROS, including nodes, lifecycle management, URDF, TF, and dynamic composition. - [Robotics concepts](/docs/category/robotics-concepts): Discover key robotics principles such as motion generation and - how they are applied within the AICA System. + how they are applied within the System. - [Application building blocks](/docs/category/application-building-blocks): Learn about building blocks that form the foundation of AICA applications. -Use these resources as a guide to deepen your understanding and accelerate your development with the AICA System. \ No newline at end of file +Use these resources as a guide to deepen your understanding and accelerate your development with the System. \ No newline at end of file diff --git a/docs/docs/concepts/aica-applications.md b/docs/docs/concepts/aica-applications.md index 4cf52e56c..8d3d3447d 100644 --- a/docs/docs/concepts/aica-applications.md +++ b/docs/docs/concepts/aica-applications.md @@ -56,7 +56,7 @@ For example, some component A might be loaded when the application starts. Then, loaded after component A is finalized. Finally, controller X should be started when component B is active, and stopped if component C has an error. -In AICA System, applications are formally described in a YAML file. An application description can also be +In the System, applications are formally described in a YAML file. An application description can also be represented as a graph of building blocks (components, controllers, hardware interfaces) connected by signals and events. diff --git a/docs/docs/concepts/building-blocks/components.md b/docs/docs/concepts/building-blocks/components.md index f959216b8..875f288eb 100644 --- a/docs/docs/concepts/building-blocks/components.md +++ b/docs/docs/concepts/building-blocks/components.md @@ -5,7 +5,7 @@ title: Components # Components -Within an AICA System application, components are the building blocks of advanced robot behaviors. +Within a System application, components are the building blocks of advanced robot behaviors. AICA components are wrappers for [ROS 2 nodes](../ros-concepts/nodes) and [lifecycle nodes](../ros-concepts/lifecycle-nodes) @@ -79,7 +79,7 @@ to trigger events. Refer to [Events](./events) for more information. When a lifecycle components is loaded, it starts in the unconfigured state and normally requires an external trigger to transition into different states. -In the AICA System, lifecycle components can auto-configure and auto-activate themselves +In the System, lifecycle components can auto-configure and auto-activate themselves using [transition events](./events#transitions). Associating the `on_load` state transition with a `lifecycle: configure` event enables the component to automatically configure itself. Equivalently, the `on_configure` transition can be used to trigger a `lifecycle: activate` event. diff --git a/docs/docs/concepts/building-blocks/events.md b/docs/docs/concepts/building-blocks/events.md index 255f4fe80..9f2bc8ca9 100644 --- a/docs/docs/concepts/building-blocks/events.md +++ b/docs/docs/concepts/building-blocks/events.md @@ -20,7 +20,7 @@ The following events can be used to dynamically update the state of a running ap ## Triggering events -Events can be triggered externally by a user through interactions with AICA Studio or via the REST API. +Events can be triggered externally by a user through interactions with Studio or via the REST API. They can also be triggered internally by the Event Engine according to the application description as a result of **predicates**, **transitions**, **sequences** or **conditions**. diff --git a/docs/docs/concepts/building-blocks/frames.md b/docs/docs/concepts/building-blocks/frames.md index 32482d770..97b35835c 100644 --- a/docs/docs/concepts/building-blocks/frames.md +++ b/docs/docs/concepts/building-blocks/frames.md @@ -14,7 +14,7 @@ frames are directly included in an AICA application and are available to all com :::tip [This guide](/core/examples/guides/application-frames) contains an in-depth review of methods to create, edit, and -record application frames in AICA Studio. +record application frames in Studio. ::: @@ -51,6 +51,6 @@ rate. The component has two additional parameters to configure its behavior: :::tip See [this page](/core/examples/core-components/point-attractor) for an example that uses the Frame to Signal -component in AICA Studio. +component in Studio. ::: \ No newline at end of file diff --git a/docs/docs/concepts/building-blocks/signals.md b/docs/docs/concepts/building-blocks/signals.md index ef0894474..51cf9b238 100644 --- a/docs/docs/concepts/building-blocks/signals.md +++ b/docs/docs/concepts/building-blocks/signals.md @@ -5,7 +5,7 @@ title: Signals # Signals -In the AICA System, signals are designed to exchange continuous data between components and controllers in a running +In the System, signals are designed to exchange continuous data between components and controllers in a running application. They are an abstraction of ROS 2 topics that are assumed to exchange data at a regular, periodic frequency. This makes them well-suited for use with signal processing components and controllers. diff --git a/docs/docs/concepts/going-further.md b/docs/docs/concepts/going-further.md index 86c391e1a..b5eaa86a6 100644 --- a/docs/docs/concepts/going-further.md +++ b/docs/docs/concepts/going-further.md @@ -5,9 +5,9 @@ title: Going further with AICA # Going further with AICA -[Contact us](mailto:contact@aica.tech) to learn more about AICA and/or to request an AICA System License. +[Contact us](mailto:contact@aica.tech) to learn more about AICA and/or to request a System License. -If you already have an AICA System License, continue on to [application examples](/core/examples) for guides and +If you already have a System License, continue on to [application examples](/core/examples) for guides and practical references on how to set up your robotic applications. For advanced usage, including building custom components with our Component SDK, refer to diff --git a/docs/docs/concepts/robotics-concepts/motion-generation.md b/docs/docs/concepts/robotics-concepts/motion-generation.md index 66a657b71..6418b0197 100644 --- a/docs/docs/concepts/robotics-concepts/motion-generation.md +++ b/docs/docs/concepts/robotics-concepts/motion-generation.md @@ -20,7 +20,7 @@ One can differentiate between two approaches to motion generation; offline and o **Offline motion generation** plans trajectories in advance using models of the robot and environment. This method enables optimized, collision-free paths and is ideal for predictable, structured settings. Generated trajectories are rolled out in **open loop**, meaning that there is no feedback mechanism that would inform the system about -disturbances. In other words, it lacks adaptability to real-time changes or sensor feedback. In the AICA System, the +disturbances. In other words, it lacks adaptability to real-time changes or sensor feedback. In the System, the [Joint Trajectory Controller](../building-blocks/controllers/jtc) often acts as simple offline motion generator, creating and rolling out a trajectory through a certain number of waypoints in a given amount of time without taking into account the environment. @@ -100,7 +100,7 @@ convergence to a (potentially moving) desired goal. :::tip -Find an example using a Point Attractor DS in AICA Studio on +Find an example using a Point Attractor DS in Studio on [this page](/core/examples/core-components/point-attractor). ::: diff --git a/docs/docs/concepts/ros-concepts/built-on-ros.md b/docs/docs/concepts/ros-concepts/built-on-ros.md index b4e304425..9cc2ffb3b 100644 --- a/docs/docs/concepts/ros-concepts/built-on-ros.md +++ b/docs/docs/concepts/ros-concepts/built-on-ros.md @@ -16,16 +16,16 @@ capabilities of ROS from scratch often constitutes a degree in computer science ROS comes from the abstractions provided by community packages and extensions that each address a particular niche and can be combined to solve complex problems. -The AICA System is built on ROS 2, but it is not intended to supersede existing ROS 2 distributions, packages or +The System is built on ROS 2, but it is not intended to supersede existing ROS 2 distributions, packages or tools. AICA applications and building blocks are **fully compatible with existing ROS packages** and community tools and can be used and deployed alongside them. **For new developers, AICA provides an easy springboard into the wider world of ROS. Advanced users can take the -modularity and dynamic nature of the AICA System to new frontiers.** +modularity and dynamic nature of the System to new frontiers.** -At a glance, the AICA System extends ROS 2 with the following features: +At a glance, the System extends ROS 2 with the following features: - Preconfigured and containerized ROS 2 workspaces - Fully integrated `ros2_control` architecture and hardware drivers for real-time control diff --git a/docs/docs/getting-started/assets/components-controllers-hardware-embedded.svg b/docs/docs/getting-started/assets/components-controllers-hardware-embedded.svg index 0b6a2b066..e16021902 100644 --- a/docs/docs/getting-started/assets/components-controllers-hardware-embedded.svg +++ b/docs/docs/getting-started/assets/components-controllers-hardware-embedded.svg @@ -16,6 +16,6 @@ src: url("https://excalidraw.com/Assistant-Regular.woff2"); } - + Hardware InterfacesHardwareAbstractionLayerControllersComponentsCommandsStateMotion GeneratorsLearning AlgorithmsApplication LogicPositionVelocityImpedanceAdmittanceRobotsActuatorsSensorsGPIOs( Real-Time Context )( ROS 2 Context )InputsOutputs \ No newline at end of file diff --git a/docs/docs/getting-started/assets/system-overview-embedded.svg b/docs/docs/getting-started/assets/system-overview-embedded.svg index 78f9e2edb..0ea5a6af0 100644 --- a/docs/docs/getting-started/assets/system-overview-embedded.svg +++ b/docs/docs/getting-started/assets/system-overview-embedded.svg @@ -16,6 +16,6 @@ src: url("https://excalidraw.com/Assistant-Regular.woff2"); } - + AICA Edge PCHTTPAutomation ServerWeb BrowserREST APIRobotForceSensorApplication Graph and EditorCameraIntegrationMonitoringGripper \ No newline at end of file diff --git a/docs/docs/getting-started/compatibility/_category_.json b/docs/docs/getting-started/compatibility/_category_.json index b91db8f77..2516fd289 100644 --- a/docs/docs/getting-started/compatibility/_category_.json +++ b/docs/docs/getting-started/compatibility/_category_.json @@ -3,6 +3,6 @@ "position": 1, "link": { "type": "generated-index", - "description": "Learn about AICA System's compatibility with different OSs and hardware." + "description": "Learn about the System's compatibility with different OSs and hardware." } } diff --git a/docs/docs/getting-started/compatibility/operating-system.md b/docs/docs/getting-started/compatibility/operating-system.md index fedb3acf2..9df7d347e 100644 --- a/docs/docs/getting-started/compatibility/operating-system.md +++ b/docs/docs/getting-started/compatibility/operating-system.md @@ -5,7 +5,7 @@ title: Operating System # Operating System (OS) -The AICA System is officially supported on Ubuntu and macOS for both amd64 and arm64 architectures. +The System is officially supported on Ubuntu and macOS for both amd64 and arm64 architectures. Core runs in a Docker container based on Ubuntu 24.04. Thanks to containerization, the majority of the installation and usage steps in this guide will be the same for macOS or Ubuntu host platforms unless otherwise @@ -29,7 +29,7 @@ without explicit display forwarding. Further, support for OpenGL rendering is li 3D programs and simulators commonly used in robotics. For example, opening an RViz window in the container on a Mac host will fail, while it will work natively on an Ubuntu host. -AICA Studio is continually being extended to include more live data visualization including interactive 2D and 3D data +Studio is continually being extended to include more live data visualization including interactive 2D and 3D data views directly in the browser. As a result, the reliance on display sharing and the associated operating system limitations will be reduced. diff --git a/docs/docs/getting-started/compatibility/supported-hardware.md b/docs/docs/getting-started/compatibility/supported-hardware.md index 59ad42c22..cec15e2f7 100644 --- a/docs/docs/getting-started/compatibility/supported-hardware.md +++ b/docs/docs/getting-started/compatibility/supported-hardware.md @@ -5,7 +5,7 @@ title: Supported hardware # Supported hardware -The AICA System supports many different types of hardware. The following tables present robotic manipulators and +The System supports many different types of hardware. The following tables present robotic manipulators and peripherals for which drivers exist, along with necessary prerequisites and additional software that these might require. @@ -15,7 +15,7 @@ This list is work in progress and regularly updated. If your hardware is not lis [AICA Community Feedback board](https://github.com/aica-technology/community) or reach out to the AICA team for assistance or further details. -As described in [this section](/docs/concepts/ros-concepts/built-on-ros), the AICA System can integrate existing ROS +As described in [this section](/docs/concepts/ros-concepts/built-on-ros), the System can integrate existing ROS drivers. This allows you to expand the supported hardware list by using open source or custom-developed ROS packages. ::: diff --git a/docs/docs/getting-started/installation/_category_.json b/docs/docs/getting-started/installation/_category_.json index 32ffe91fa..cddfc45f1 100644 --- a/docs/docs/getting-started/installation/_category_.json +++ b/docs/docs/getting-started/installation/_category_.json @@ -3,6 +3,6 @@ "position": 2, "link": { "type": "generated-index", - "description": "Learn how to install and launch the AICA System on your machine." + "description": "Learn how to install and launch the System on your machine." } } diff --git a/docs/docs/getting-started/installation/installation-and-launch.md b/docs/docs/getting-started/installation/installation-and-launch.md index ec0b4553c..89464fd8e 100644 --- a/docs/docs/getting-started/installation/installation-and-launch.md +++ b/docs/docs/getting-started/installation/installation-and-launch.md @@ -7,7 +7,7 @@ title: Installation and launch ## Pre-requisites -AICA System software is distributed with Docker images and executed with Docker containers. That is, it can practically +The System software is distributed with Docker images and executed with Docker containers. That is, it can practically be installed on any system that supports recent Docker versions. However, due to performance advantages (e.g., real-time task execution), AICA suggests using Linux-based platforms that can be easily configured for such considerations. @@ -36,8 +36,8 @@ to create the `docker` group and add your user. For Ubuntu users that need **Docker Desktop for Linux**, note that its installation does **not** include all the necessary dependencies. Follow the instructions from the provided link to ensure that all requirements are met. -When installed, Docker Desktop for Linux can **not** be used to manage images and containers created by the AICA System. -Additionally, you may experience some issues when using AICA System software due to Docker Desktop's custom +When installed, Docker Desktop for Linux can **not** be used to manage images and containers created by the System. +Additionally, you may experience some issues when using the System software due to Docker Desktop's custom configuration (see [manual installation](/docs/reference/manual-installation-launch#configuring-docker-manually-on-linux-macos-or-windows) for more details). @@ -57,7 +57,7 @@ configuration steps are taken. Note that some limitations may apply regarding co :::note -The majority of AICA Studio and Launcher features are available on macOS. However: +The majority of Studio and Launcher features are available on macOS. However: - Forwarding graphics is currently impossible due to MacOS' incompatibility with OpenGL 2.1+. As a result, tools like RViz will not be made available through AICA Launcher. @@ -72,7 +72,7 @@ RViz will not be made available through AICA Launcher. **No native support is provided for Windows machines.** However, with the correct Windows Subsystem for Linux (WSL) configuration, it is possible to -[manually install and run the AICA System on Windows](/docs/reference/manual-installation-launch#configuring-docker-manually-on-linux-macos-or-windows). +[manually install and run the System on Windows](/docs/reference/manual-installation-launch#configuring-docker-manually-on-linux-macos-or-windows). :::note @@ -88,8 +88,8 @@ following limitations may apply: ## AICA Launcher -AICA Launcher is the easiest way to get up and running with the AICA System. It manages licensing, package distribution -and the Docker toolchain so that no command-line access is necessary. It also embeds AICA Studio: Edge directly inside +AICA Launcher is the easiest way to get up and running with the System. It manages licensing, package distribution +and the Docker toolchain so that no command-line access is necessary. It also embeds Studio: Edge directly inside the launcher. ### Installation @@ -117,10 +117,10 @@ To bypass this, right-click on the app and choose Open, and then click Open on t ::: -### Entering an AICA System License +### Entering a System License When the AICA Launcher is started for the first time (or after explicitly logging out), you will be prompted to enter -your AICA System License. As an example, the online license key to enter might look similar to +your System License. As an example, the online license key to enter might look similar to `5614D1-3E7A6C-932DEB-8C4189-F6B0F2-V3`. ![aica-launcher-login](../assets/aica-launcher-login.png) @@ -129,7 +129,7 @@ Once the license is copied into the text field, it will automatically check the successful. If the license is not recognized, check your internet connection or contact AICA support. -### Configuring the AICA System image +### Configuring the System image AICA Launcher provides direct access to Core and Studio, and additionally simplifies installing add-on packages from the registry or from custom SDK contributions. @@ -150,7 +150,7 @@ mounting for persistent storage or file-system interactions. ### Launching a configuration -Press the Launch button for any given configuration to start up the AICA System and enter AICA Studio. For the +Press the Launch button for any given configuration to start up the System and enter Studio. For the first time launching a configuration, the Core software image and any additional packages first need to be pulled from the registry and bundled into the specific runtime image. Depending on network speeds, this may take a while. After the image has been built, launching the configuration a second time will be much faster as the results are cached. diff --git a/docs/docs/getting-started/installation/licensing.md b/docs/docs/getting-started/installation/licensing.md index 0c8b769dd..06329066e 100644 --- a/docs/docs/getting-started/installation/licensing.md +++ b/docs/docs/getting-started/installation/licensing.md @@ -5,13 +5,13 @@ title: Licensing # Licensing -A valid AICA System License is required to access and use AICA System software. Holders of an AICA System License can +A valid the System License is required to access and use the System software. Holders of a System License can also request a Deployment Key for unrestricted offline usage rights of specific deployments. -## AICA System License +## System License A license regulates both the access rights to download AICA software packages and the usage rights to run AICA -applications. To request an AICA System License, contact the AICA sales team at contact@aica.tech. Each new user will +applications. To request a System License, contact the AICA sales team at contact@aica.tech. Each new user will receive access instructions to a personal account for the [AICA license manager](https://licensing.aica.tech/list) which lists all licenses associated with that user. Every license has a name, an expiration date, the actual license key and a list of entitlements. On the [AICA package registry](https://registry.licensing.aica.tech/) the user can see all @@ -19,7 +19,7 @@ available packages for one specific license. :::tip -An AICA System License includes specific entitlements that determine which add-on packages and versions can be accessed +A System License includes specific entitlements that determine which add-on packages and versions can be accessed and used. To discover and access additional components and hardware collections, contact your AICA representative to upgrade your license. @@ -37,15 +37,15 @@ If an unauthorized user has gained access to your license key, contact AICA supp :::info -- AICA System Licenses are online-only and require an active internet connection while AICA Studio is being used. -- An AICA System License can be used on any machine, but only one instance can be running at any one time. +- System Licenses are online-only and require an active internet connection while Studio is being used. +- A System License can be used on any machine, but only one instance can be running at any one time. ::: -An AICA System License will appear in the following format, though the specific license key will be unique for each +A System License will appear in the following format, though the specific license key will be unique for each user. -```console title="Example AICA System License" +```console title="Example System License" 5614D1-3E7A6C-932DEB-8C4189-F6B0F2-V3 ``` @@ -53,7 +53,7 @@ user. A Deployment Key authorizes a specific **deployment** to run offline with no limitations on consecutive or total activation time. A **deployment** is a single machine (i.e., an industrial edge PC) installed with some configuration -of the AICA System. +of the System. A Deployment Key will appear as a very long string of characters in the following format, though the specific key will be unique for each machine. @@ -66,7 +66,7 @@ key/eyJ9df2jfap7IVdIHnlnNpb2482Hh2193L9io8[...]ExMWM3jAuMCJ9.YhsDjwEz8eYnwE21alS To request a Deployment Key, reach out to the AICA team. - +Continue to the next section to learn how to use the AICA Launcher with the System License to access and install +Studio. --> diff --git a/docs/docs/getting-started/next-steps.md b/docs/docs/getting-started/next-steps.md index 3d4f455da..a7d2d8e52 100644 --- a/docs/docs/getting-started/next-steps.md +++ b/docs/docs/getting-started/next-steps.md @@ -5,5 +5,5 @@ title: Next steps # Next steps -After the AICA System is up and running, dive deeper into [core concepts](/docs/concepts) or check out +After the System is up and running, dive deeper into [core concepts](/docs/concepts) or check out some [application examples](/core/examples). diff --git a/docs/docs/reference/custom-components/component-descriptions.md b/docs/docs/reference/custom-components/component-descriptions.md index fdeb05063..6620be5ea 100644 --- a/docs/docs/reference/custom-components/component-descriptions.md +++ b/docs/docs/reference/custom-components/component-descriptions.md @@ -5,7 +5,7 @@ title: Describing a component # Describing a component -To fully support custom components in the AICA System, it is crucial to have a consistent means of +To fully support custom components in the System, it is crucial to have a consistent means of describing individual components and the interfaces they provide. A machine-readable component description should contain all necessary information to procedurally generate documentation, frontend visualisations and backend services for any new component. diff --git a/docs/docs/reference/custom-components/custom-component.md b/docs/docs/reference/custom-components/custom-component.md index ea80627ed..fcafe9915 100644 --- a/docs/docs/reference/custom-components/custom-component.md +++ b/docs/docs/reference/custom-components/custom-component.md @@ -312,7 +312,7 @@ means that the associated input data object is automatically updated every time this means that internal changes to the output data object will automatically be updated in the publisher. The binding logic is supported for a number of common message data types. To interface with non-standard messages -(for example, to communicate with ROS 2 nodes using custom message types outside the AICA System), it is possible to +(for example, to communicate with ROS 2 nodes using custom message types outside the System), it is possible to define raw publishers and subscribers following standard ROS 2 conventions. ### Signal name diff --git a/docs/docs/reference/custom-components/package-building.md b/docs/docs/reference/custom-components/package-building.md index 98f01ce51..4c63faaff 100644 --- a/docs/docs/reference/custom-components/package-building.md +++ b/docs/docs/reference/custom-components/package-building.md @@ -50,5 +50,5 @@ docker build -f aica-package.toml -t custom-component . In AICA Launcher, include the docker image path from the build step as a custom package in the system configuration. Refer to the -[installation and launch](/docs/getting-started/installation/installation-and-launch#configuring-the-aica-system-image) +[installation and launch](/docs/getting-started/installation/installation-and-launch#configuring-the-system-image) section for more details. diff --git a/docs/docs/reference/manual-installation-launch.md b/docs/docs/reference/manual-installation-launch.md index 60d52c709..08dd65c94 100644 --- a/docs/docs/reference/manual-installation-launch.md +++ b/docs/docs/reference/manual-installation-launch.md @@ -31,8 +31,8 @@ on the host machine. If you are using Linux with Docker Engine only, you may skip this section entirely. -For Linux users that have Docker Desktop for Linux installed, some additional steps may be required to ensure that -AICA System software is used at its full potential. +For Linux users that have Docker Desktop for Linux installed, some additional steps may be required to ensure that the +System software is used at its full potential. The main issue originates from Docker Desktop for Linux creating a custom Docker context (`desktop-linux`) and endpoint to manage its images. This is rightfully done to encapsulate those images within uses of the Docker Desktop GUI, without @@ -76,7 +76,7 @@ You may need to repeat these steps upon a restart of your system. If you installed Docker Desktop, all the requirements should already be present on your system. Note that to access the `docker` command through the terminal, Docker Desktop must be running. -The default settings of Docker Desktop are usually sufficient for everything AICA Studio needs. However, in some cases +The default settings of Docker Desktop are usually sufficient for everything Studio needs. However, in some cases (e.g., settings carried over from older Docker Desktop installations) you may need to verify the following: - Go to the Settings menu (usually located at the top right as a gear icon), then click on Advanced and make sure to @@ -101,20 +101,20 @@ your application's needs. ## Configuring and using WSL and Docker on Windows -The AICA System can be installed and run on Windows by leveraging **WSL**, short for +The System can be installed and run on Windows by leveraging **WSL**, short for [Windows Subsystem for Linux](https://learn.microsoft.com/en-us/windows/wsl/about). WSL is a feature of Windows that allows running a Linux environment on a Windows machine without the need for a separate virtual machine or dual booting. While most Linux distributions can be run with either WSL 1 or WSL 2 architecture, WSL 2 has superior performance over WSL 1 and will be assumed throughout these instructions. -On a high level, there are two main requirements for running the AICA System on Windows: +On a high level, there are two main requirements for running the System on Windows: - Ubuntu 22.04 or 24.04 installed through WSL 2 - Docker Desktop that uses the WSL 2 based engine :::note -The following instructions for running the AICA System have been tested and validated on a fresh installation of Windows +The following instructions for running the System have been tested and validated on a fresh installation of Windows 11 Professional with full administrator access. Depending on the machine at hand, some steps might be slightly different or extended access might be required. For questions, consult the [official documentation](https://learn.microsoft.com/en-us/windows/wsl/install-manual), contact your IT support, or @@ -171,11 +171,11 @@ reach out to the AICA team. ## Setting up the AICA license file -To use your AICA System License or Deployment Key for manual installation and launch, it should be saved into a +To use your System License or Deployment Key for manual installation and launch, it should be saved into a TOML-formatted file. In this guide, we use `aica-license.toml` to refer to the license file, though this filename is a convention only and not enforced. -For an AICA System License, the contents of the file should be formatted as: +For a System License, the contents of the file should be formatted as: ```toml title="aica-license.toml" License = "5614D1-3E7A6C-932DEB-8C4189-F6B0F2-V3" @@ -403,7 +403,7 @@ with `docker container ps` and then run `docker container stop ` ### Persistent user data -AICA applications, URDF hardware and user configurations managed through the API or AICA Studio are stored in a +AICA applications, URDF hardware and user configurations managed through the API or Studio are stored in a database. Because the docker container is isolated from the host filesystem, the local database will be lost when the container exits. To persist local data between sessions, create a dedicated directory somewhere on the host. For example, use `mkdir ~/.aica-data` to keep the data folder hidden in the home folder. Then execute the normal run command @@ -459,7 +459,7 @@ docker run -it --rm \ ### Setting a super-admin password -Core v4.3.0 and later require authentication for AICA Studio and the API. If no users exist in the mounted user +Core v4.3.0 and later require authentication for Studio and the API. If no users exist in the mounted user database, as is the case for a new configuration or when no data folder is mounted, a system administration password can be set through an environment variable which grants full administration rights. @@ -508,9 +508,9 @@ docker run -it --rm \ -## Access the AICA Studio +## Access Studio -Visit [localhost:8080](http://localhost:8080) in the browser while the container is running to view AICA Studio. If the +Visit [localhost:8080](http://localhost:8080) in the browser while the container is running to view Studio. If the `AICA_SUPER_ADMIN_PASSWORD` environment variable was set, use the `super-admin` username and the provided password to log in as the system administrator. diff --git a/docs/docs/reference/yaml-syntax.md b/docs/docs/reference/yaml-syntax.md index 509d6da21..71bacc900 100644 --- a/docs/docs/reference/yaml-syntax.md +++ b/docs/docs/reference/yaml-syntax.md @@ -35,7 +35,7 @@ The fields [`components`](#components) and [`hardware`](#hardware) define the ma The fields [`conditions`](#conditions) and [`sequences`](#sequences) define fine-grained application logic to trigger [application state events](#events). The [`on_start`](#on-start)field defines a list of events to be triggered when the application is started, while the [`buttons`](#buttons) field defines interactive buttons to manually trigger -events through AICA Studio. +events through Studio. ## Events @@ -503,7 +503,7 @@ robot_d: :::info -Use the Hardware tab in AICA Studio to manage available URDFs. +Use the Hardware tab in Studio to manage available URDFs. Alternatively, use the API endpoints at `/v1/data/hardware` and `/v1/examples/hardware` to manage custom hardware and view the available built-in example URDFs, respectively. @@ -928,7 +928,7 @@ on_start: ## Buttons -Buttons are interactive elements in AICA Studio. They are used to manually +Buttons are interactive elements in Studio. They are used to manually trigger [state events](#events) when an application is running by clicking the trigger button in the application graph. Buttons have no effect on the application if the UI is not used. From 4e7c070d59684be59ef65ce91f2a613f3b4e4b70 Mon Sep 17 00:00:00 2001 From: Enrico Eberhard Date: Fri, 18 Sep 2026 13:59:46 +0200 Subject: [PATCH 05/13] chore: format --- docs/docs/concepts.md | 2 +- .../concepts/building-blocks/_category_.json | 10 +- .../building-blocks/controllers/ik.md | 2 +- .../building-blocks/controllers/jtc.md | 37 +- docs/docs/concepts/building-blocks/frames.md | 3 +- docs/docs/concepts/building-blocks/signals.md | 3 +- .../robotics-concepts/_category_.json | 10 +- .../robotics-concepts/motion-generation.md | 4 +- .../concepts/ros-concepts/_category_.json | 12 +- .../concepts/ros-concepts/lifecycle-nodes.md | 6 +- docs/docs/concepts/ros-concepts/tf.md | 3 +- docs/docs/concepts/ros-concepts/urdf.md | 3 +- ...mponents-controllers-hardware-embedded.svg | 519 ++++++++++++++- .../assets/system-overview-embedded.svg | 595 +++++++++++++++++- .../compatibility/_category_.json | 12 +- .../compatibility/supported-hardware.md | 52 +- .../installation/_category_.json | 12 +- .../installation/installation-and-launch.md | 3 +- .../getting-started/installation/proxies.md | 12 +- .../custom-components/_category_.json | 3 +- .../aica-package-migrations.md | 14 +- .../custom-components/aica-package-toml.md | 83 ++- .../custom-components/component-package.md | 3 +- .../reference/manual-installation-launch.md | 10 +- 24 files changed, 1250 insertions(+), 163 deletions(-) diff --git a/docs/docs/concepts.md b/docs/docs/concepts.md index 8167757ae..6cace4c01 100644 --- a/docs/docs/concepts.md +++ b/docs/docs/concepts.md @@ -8,7 +8,7 @@ AICA Universe is built on open and extensible standards. This section introduces System, including its ROS integration, robotics foundations, and application building blocks. Explore the topics below for detailed explanations to help you design and develop your own AICA applications and components. -- [ROS 2 concepts](/docs/category/ros-2-concepts): Understand how the System leverages ROS, including nodes, +- [ROS 2 concepts](/docs/category/ros-2-concepts): Understand how the System leverages ROS, including nodes, lifecycle management, URDF, TF, and dynamic composition. - [Robotics concepts](/docs/category/robotics-concepts): Discover key robotics principles such as motion generation and how they are applied within the System. diff --git a/docs/docs/concepts/building-blocks/_category_.json b/docs/docs/concepts/building-blocks/_category_.json index 6ad0d208a..d0d20970d 100644 --- a/docs/docs/concepts/building-blocks/_category_.json +++ b/docs/docs/concepts/building-blocks/_category_.json @@ -1,7 +1,7 @@ { - "label": "Application building blocks", - "position": 4, - "link": { - "type": "generated-index" - } + "label": "Application building blocks", + "position": 4, + "link": { + "type": "generated-index" + } } diff --git a/docs/docs/concepts/building-blocks/controllers/ik.md b/docs/docs/concepts/building-blocks/controllers/ik.md index 27b5542f4..c90598ca4 100644 --- a/docs/docs/concepts/building-blocks/controllers/ik.md +++ b/docs/docs/concepts/building-blocks/controllers/ik.md @@ -38,7 +38,7 @@ Compared to joint-space position controllers, an IK position controller offers s :::caution In reactive or high-rate scenarios, IK position control can be difficult to apply. The command signal needs to be -crafted carefully to ensure continuity and avoid big step changes. Position servoing is demanding for real hardware and +crafted carefully to ensure continuity and avoid big step changes. Position servoing is demanding for real hardware and usually comes with strict constraints from the manufacturer. See more information in [Position vs velocity IK control](/docs/concepts/building-blocks/controllers/ik#position-vs-velocity-ik-control). diff --git a/docs/docs/concepts/building-blocks/controllers/jtc.md b/docs/docs/concepts/building-blocks/controllers/jtc.md index b49fa2cdc..fadda5eb9 100644 --- a/docs/docs/concepts/building-blocks/controllers/jtc.md +++ b/docs/docs/concepts/building-blocks/controllers/jtc.md @@ -7,23 +7,23 @@ title: Joint Trajectory ## Overview -A Joint Trajectory Controller (JTC) is designed to track and execute smooth, time-parameterized trajectories for -multiple joints simultaneously. Unlike simple position, velocity, acceleration, or effort controllers that command -joints to move directly to a target state without regard to time or smoothness, JTC follows a full **_trajectory_**, -_i.e._, a sequence of desired positions, velocities, accelerations, or forces each associated with specific timestamps. +A Joint Trajectory Controller (JTC) is designed to track and execute smooth, time-parameterized trajectories for +multiple joints simultaneously. Unlike simple position, velocity, acceleration, or effort controllers that command +joints to move directly to a target state without regard to time or smoothness, JTC follows a full **_trajectory_**, +_i.e._, a sequence of desired positions, velocities, accelerations, or forces each associated with specific timestamps. This ensures coordinated, continuous, and physically realistic joint motion. Compared to simple linear movement (where joints might move individually or proportionally from one point to another), a joint trajectory approach offers several key advantages: - **Timing awareness**: Movements happen over a defined duration, allowing for synchronized motion across multiple -joints. -- **Smoothness**: In some cases, _e.g._ when velocity and acceleration are considered, transitions between waypoints -are smooth, reducing mechanical stress and improving control performance. + joints. +- **Smoothness**: In some cases, _e.g._ when velocity and acceleration are considered, transitions between waypoints + are smooth, reducing mechanical stress and improving control performance. - **Predictability**: The entire motion profile is predefined, allowing better anticipation of the system’s future -states, which is important for planning and safety. + states, which is important for planning and safety. - **Flexibility**: It can handle complex, multi-joint coordination tasks (*e.g*., following a curve) that simple -setpoint controllers cannot achieve easily (without further logic embedded in them). + setpoint controllers cannot achieve easily (without further logic embedded in them). In contrast to purely linear or direct controllers, JTC is ideal for applications requiring continuous, planned motion, such as robotic arms or any system where joint coordination and motion quality are critical. @@ -33,18 +33,19 @@ such as robotic arms or any system where joint coordination and motion quality a A JTC is included in Core by default and can be used via: + 1. a **signal** (in this case, a single message) containing the joint trajectory; *i.e.*, one of joint positions, -velocities, accelerations, or effort, and their corresponding times from the start of the trajectory (refer to -[trajectory_msgs/JointTrajectoryPoint](https://docs.ros.org/en/noetic/api/trajectory_msgs/html/msg/JointTrajectoryPoint.html)). - + velocities, accelerations, or effort, and their corresponding times from the start of the trajectory (refer to + [trajectory_msgs/JointTrajectoryPoint](https://docs.ros.org/en/noetic/api/trajectory_msgs/html/msg/JointTrajectoryPoint.html)). + 2. a **service** by providing one of the following: - - - **Cartesian frame names** (published as frames) indicating the end-effector poses that should be -traversed in a joint-space motion. - - **Joint position names** (published as joint positions) indicating the exact joint waypoints that JTC should -traverse. + + - **Cartesian frame names** (published as frames) indicating the end-effector poses that should be + traversed in a joint-space motion. + - **Joint position names** (published as joint positions) indicating the exact joint waypoints that JTC should + traverse. Additional parameters can be modified to fine tune how JTC behaves (for example, PID gains for velocity control, constraints for time and goal accuracy, and more). For more practical information on JTC refer to our -[basic example](/core/examples/core-controllers/jtc-example) and our advanced +[basic example](/core/examples/core-controllers/jtc-example) and our advanced [guide on JTC workflows](/core/examples/guides/jtc-guide). \ No newline at end of file diff --git a/docs/docs/concepts/building-blocks/frames.md b/docs/docs/concepts/building-blocks/frames.md index 97b35835c..585d6fb9b 100644 --- a/docs/docs/concepts/building-blocks/frames.md +++ b/docs/docs/concepts/building-blocks/frames.md @@ -6,7 +6,8 @@ title: Frames # Frames The page on [TF in ROS](../ros-concepts/tf) discusses the importance of spatial transforms for robotic applications. -TF can be thought of as a live database that keeps track of coordinate frames and their relationships over time. The AICA +TF can be thought of as a live database that keeps track of coordinate frames and their relationships over time. The +AICA System leverages this framework internally and facilitates interaction with TF. In particular, user-defined frames are directly included in an AICA application and are available to all components at runtime. These so-called **application frames** can be created and modified in the 3D scene view, and their poses will be updated in real time. diff --git a/docs/docs/concepts/building-blocks/signals.md b/docs/docs/concepts/building-blocks/signals.md index 51cf9b238..f2e546c50 100644 --- a/docs/docs/concepts/building-blocks/signals.md +++ b/docs/docs/concepts/building-blocks/signals.md @@ -75,7 +75,8 @@ The following state variables can be exchanged as signals: AICA state signals are built on the -open-source [`state_representation`](https://aica-technology.github.io/control-libraries/versions/v7.1.0/md__github_workspace_source_state_representation__r_e_a_d_m_e.html) +open-source [ +`state_representation`](https://aica-technology.github.io/control-libraries/versions/v7.1.0/md__github_workspace_source_state_representation__r_e_a_d_m_e.html) library for Cartesian and joint state classes in C++ and Python. ::: diff --git a/docs/docs/concepts/robotics-concepts/_category_.json b/docs/docs/concepts/robotics-concepts/_category_.json index 6c00c5807..f8bc33486 100644 --- a/docs/docs/concepts/robotics-concepts/_category_.json +++ b/docs/docs/concepts/robotics-concepts/_category_.json @@ -1,7 +1,7 @@ { - "label": "Robotics concepts", - "position": 2, - "link": { - "type": "generated-index" - } + "label": "Robotics concepts", + "position": 2, + "link": { + "type": "generated-index" + } } diff --git a/docs/docs/concepts/robotics-concepts/motion-generation.md b/docs/docs/concepts/robotics-concepts/motion-generation.md index 6418b0197..cdd5ac51f 100644 --- a/docs/docs/concepts/robotics-concepts/motion-generation.md +++ b/docs/docs/concepts/robotics-concepts/motion-generation.md @@ -21,7 +21,7 @@ One can differentiate between two approaches to motion generation; offline and o enables optimized, collision-free paths and is ideal for predictable, structured settings. Generated trajectories are rolled out in **open loop**, meaning that there is no feedback mechanism that would inform the system about disturbances. In other words, it lacks adaptability to real-time changes or sensor feedback. In the System, the -[Joint Trajectory Controller](../building-blocks/controllers/jtc) often acts as simple offline motion generator, +[Joint Trajectory Controller](../building-blocks/controllers/jtc) often acts as simple offline motion generator, creating and rolling out a trajectory through a certain number of waypoints in a given amount of time without taking into account the environment. @@ -113,7 +113,7 @@ patterns, each represented by a Gaussian distribution. By using a mixture of Gau behaviors and make is possible to learn smooth and reliable movements from real world data. This makes it a powerful tool for tasks like manipulation and human-robot interaction, where both adaptability and safety are important. The figure below shows an example of a SEDS that was learned based on seven demonstrations of a *G* shape and then -integrated from three different starting points along the vector field. +integrated from three different starting points along the vector field.
2D SEDS diff --git a/docs/docs/concepts/ros-concepts/_category_.json b/docs/docs/concepts/ros-concepts/_category_.json index 398db5589..548f69f60 100644 --- a/docs/docs/concepts/ros-concepts/_category_.json +++ b/docs/docs/concepts/ros-concepts/_category_.json @@ -1,8 +1,8 @@ { - "label": "ROS 2 concepts", - "position": 1, - "link": { - "type": "generated-index", - "description": "The next sections briefly review the most important ROS 2 concepts leveraged by the AICA framework." - } + "label": "ROS 2 concepts", + "position": 1, + "link": { + "type": "generated-index", + "description": "The next sections briefly review the most important ROS 2 concepts leveraged by the AICA framework." + } } diff --git a/docs/docs/concepts/ros-concepts/lifecycle-nodes.md b/docs/docs/concepts/ros-concepts/lifecycle-nodes.md index 7d0088c9b..c44963de9 100644 --- a/docs/docs/concepts/ros-concepts/lifecycle-nodes.md +++ b/docs/docs/concepts/ros-concepts/lifecycle-nodes.md @@ -12,7 +12,8 @@ Nodes are normally launched as a collection of processes based on a launch confi it may not be desirable for all node processes to start executing right away. For example, a computer vision processing node should not perform any calculations until a camera sensor node is ready. -Lifecycle nodes present a solution to this problem by distinguishing between different activation states. **Developers can +Lifecycle nodes present a solution to this problem by distinguishing between different activation states. **Developers +can then implement different node behaviors depending on the current internal state.** A lifecycle node has four primary states: @@ -38,7 +39,8 @@ A lifecycle node is a managed node because the transitions between primary lifec external process. In other words, a lifecycle node in the inactive state stays inactive until an external process (for example, another node) requests a transition (for example, from inactive to active using the `activate` transition). -Another key benefit of lifecycle nodes is the ability to **build sophisticated error handling and recovery behavior**. An +Another key benefit of lifecycle nodes is the ability to **build sophisticated error handling and recovery behavior**. +An error can be handled differently depending on the current state or transition. Instead of the node crashing and shutting down completely, a properly handled error can recover the lifecycle node to an unconfigured state. diff --git a/docs/docs/concepts/ros-concepts/tf.md b/docs/docs/concepts/ros-concepts/tf.md index 220c2bf91..edc84c449 100644 --- a/docs/docs/concepts/ros-concepts/tf.md +++ b/docs/docs/concepts/ros-concepts/tf.md @@ -70,7 +70,8 @@ transform: w: 0.0 ``` -Understanding the concepts of TF, coordinate frames and their reference frames is crucial because it forms the foundation +Understanding the concepts of TF, coordinate frames and their reference frames is crucial because it forms the +foundation for how spatial relationships are represented and managed in ROS-based robotic systems. :::info diff --git a/docs/docs/concepts/ros-concepts/urdf.md b/docs/docs/concepts/ros-concepts/urdf.md index 8daa6e711..dcbc7f079 100644 --- a/docs/docs/concepts/ros-concepts/urdf.md +++ b/docs/docs/concepts/ros-concepts/urdf.md @@ -30,7 +30,8 @@ conversion tools. The XML file below shows the URDF of a very simple six axis robot arm that consists of a series of links connected by revolute joints. Each definition of a link is followed by a joint that connects it to its child link. Links have an -optional `visual` tag that defines how it should be visualized. In this case, cylinders as geometrical primitives are used +optional `visual` tag that defines how it should be visualized. In this case, cylinders as geometrical primitives are +used to give the robot a certain look. URDFs of real hardware usually refer to 3D model files (STL, DAE) for this. Note that the links are directly related to [TF](./tf) as every link will become its own coordinate frame. The image below shows the visualization of this robot description with the links as frames in TF. diff --git a/docs/docs/getting-started/assets/components-controllers-hardware-embedded.svg b/docs/docs/getting-started/assets/components-controllers-hardware-embedded.svg index e16021902..8cc20d25e 100644 --- a/docs/docs/getting-started/assets/components-controllers-hardware-embedded.svg +++ b/docs/docs/getting-started/assets/components-controllers-hardware-embedded.svg @@ -1,21 +1,500 @@ - - - eyJ2ZXJzaW9uIjoiMSIsImVuY29kaW5nIjoiYnN0cmluZyIsImNvbXByZXNzZWQiOnRydWUsImVuY29kZWQiOiJ4nO1dV3NcIlmyfp9f0dH7cm/EcPZ4s28gg7w3jWY3XHUwMDE0XGJKgLDCStqY/76ZqCWKMlx1MDAxOIlSl2bETHTPXHUwMDAwVZyqyi/zyzxp/vvbt2/f+49cdTAwMWTv+7++ffdcdTAwMWVKxUat3C2Ovv+O71x1MDAwZr1ur9ZuwUd8/P+99qBbXHUwMDFhf7Pa73d6//rnPydHkFK7+XyU1/CaXqvfg+/9XHUwMDAx///t23/Hf8IntTJcdTAwMWW7WVHKXSjaPnpcdTAwMTjt7HC3t3FYPlx1MDAxYVx1MDAxZjr+0stiul6pX2xVXHUwMDFh3uSjXHUwMDA3eF8xQbRSVDAnhVBCv376iOt0gjCrueSUW+mYVK9cdTAwMWaPauV+XHUwMDE1vsK4VsQxxaWCz51xkzNUvVql2ofvSM5cYpzAXGIqpFx1MDAxM4a9fuN5Qf/6Rl/f6fW77bq31m60u7jqfzBcdTAwMGb/maz5pliqV7rtQav8+p1+t9jqdYpduEmT793WXHUwMDFhjdP+Y+P59lx1MDAxNkvVQdd3ludfufx5XHQ88P7rceVir+qVJ4fB71aqLa+Hz2JyXHUwMDEx7U6xVOvj7WJ0ciG4yM52efzY/jNZVrfY9LbxubVcdTAwMDaNhv/ErfLPXHUwMDEzT33Q8zz8slNKXG7DtX39YFwiS3Dfg+9cdTAwMWW0W2O5Ypxx7iRXkyus9dZBoPrjs95cdTAwMTZcdTAwMWI9b3JncVxyXHUwMDFiXHUwMDEzYZtax6BTLj5cdTAwMWbEXGblTDBFudSTXHUwMDFmbtRa9eAxjXapPvmd8bt//j4twTOEc3KBcFxyPPZcbqXkXFzC7dFcdTAwMGJcXOEzXlx1MDAxZVl753yb3iu9NXis3Vx1MDAxZFaK+5vZXHUwMDE4wem1XHUwMDAxjUuLTeCoZaQmXGaIh/FVXG5KXHUwMDA0t4xP8IdHXG7BiFDMMmG14Vx1MDAwZaC1clx1MDAxY73AXFxQRSzTkmrfXHUwMDFhXlx1MDAwMS64I5oqqa1RQdll2lFupDH8/dh4XHUwMDExnInoiJ/v/Fx1MDAxOSvHf7xcdTAwMWUzOdonen3vYXK5PjFpn1x1MDAxY1x1MDAxZlxy13u1TsVmjlx1MDAwZeR6bjB6XHUwMDFjfX/93p+/R5/2+eCt7Vx1MDAwMb2WXHUwMDE3hcfBwdnallfIXHUwMDE1Rak9/Ssvv1/sdttcdTAwMGKf9/JyMFx1MDAxNJltkzk9brLHrYtRLl/oLnben//1n3hIS1BcdTAwMTViZZCeuq9TaKYsXHUwMDE2zVx1MDAwNlxmXHUwMDA00yDnXHUwMDBiozn6MaVcdTAwMWTNjki4VDCW0nFmbVx1MDAwMNT6o0BcciaZKFx1MDAwMVx1MDAwNp7CXHUwMDBmqmhkh/FcZtLirFx1MDAwM12wYlu3nFx1MDAwMVpaWifrarf6p7Unb3xcdTAwMDOm3t0sNmuNx6lcdTAwMDc7XHUwMDE2Y0R0sVtcdTAwMWXBbfy23ep73dtiyet9n/pStlGroHx/L3n4jSnR79eA1r1+od/uTD4twc9cdTAwMTZrLa+7vYhxandrlVqr2DhbZFVwS7ytl+fIiO/p3lx1MDAxNHtcdTAwMWV+indAvVx0xdYnXHUwMDE3QVx1MDAxMDvtQN07Obm380BMK2eHR1vdM367v3Z4lj3oXdYr7ZSDmFtLXHUwMDAwXHUwMDA1TFx1MDAxOFx1MDAwYujxXHUwMDE5tzGGXHUwMDE5JWi0laRcdTAwMTSkldnAulZcdTAwMDdhWFx1MDAwMFFcZvBopKagK1wiIFx1MDAxY2GSlTFA/MXK6eqSXHUwMDEwdlb6bs1cdTAwMWIhTKfeXVx1MDAwMML/bmVv4DFcdTAwMTRLfZDaf7f2io9+uK5cZstT11x1MDAxMVx1MDAwN9zZa1lcYsHavp1aa6mD7058XHUwMDA3oVxyY9R3f+fBeEDzw3qxTU/Ws7m1gj6+uttmw5TDmDJcdTAwMDXMmjtlLZfSyYlReyHYjjk00n5cdTAwMTSt2lxmS0pcdTAwMWNX1Fqq8Fx1MDAxZlx1MDAxNeFCz2TYXHUwMDEyuFx1MDAwMlx1MDAxY+5z3j9cdTAwMDPD3v9xmD/IXHUwMDE2h1x1MDAwNbU1zOel/PFjQ1xmP4BcdP9cdTAwMTLm3re2ms3cXHUwMDFjPG5tZVx1MDAxZVx1MDAxYfvtwbB/v7WC867lsyN3UC3/MHe5oyfa2d9go1x1MDAwNdebXHUwMDE2j0CzeCWkuFx1MDAwMfhcdLa4e1x1MDAxZi1VKVdCmlx1MDAwM11QSoBLYLSZXHUwMDEw/lx1MDAxN38geVx1MDAxZMSkIdygt2GkZOjmL+RcdTAwMGIwXHUwMDA1flx1MDAwMFx1MDAxY5G0L/DHKqX0fZ7AXHUwMDFhfNxtN1x1MDAxYSCpSXhcdTAwMDBzjGiQSESuZlx1MDAxNcx/Nm8wsZDVzCmQXHUwMDFmt7hcdTAwMGKft2b36qS0f+lcdTAwMWTWa2rt+mFY7st0I1ZpSSwzWlxixangNOjBS8I1tUBvwTWwLrCsVFx1MDAwNOW40ZxrvVxu4H4gZdhaXHUwMDFmNnPd/Vx1MDAwN+mdrOduXbV6qu3Vl1x0fr9cdNaxXHUwMDExdqukXHUwMDEzWonF8Vx1MDAxY/2QUo1nLVx1MDAxOVx1MDAwMfNqXHI3xoJjLFx1MDAwMnh2XHUwMDFmg2emXHUwMDA0oUY5WIWQkb582Fx1MDAwNGvKXHJcdTAwMDdcdTAwMDWQtCufKlx1MDAwYtzstFvjdSVggOeYo7BcdTAwMDFcdTAwMGUvZlx1MDAxNfb3WVVEYFx1MDAxNVx1MDAxZXZsXHUwMDAwXUpLXHJfZjdstr8zXHLWUrfd62WqxX6p+ksgSyhcdTAwMDVN5Fx1MDAwMFx1MDAxYcCVjXRUTFx1MDAwZX2OyVx1MDAxOYAxZeDIXHUwMDFiK7XQ00RaYWBdS8Es5Vx1MDAxMmDMXHUwMDAya10lmXZcdTAwMDTW5zS3ypgob55wq1xygyVcblx1MDAwYnSb+kL8L8TaKSl5QvaZJ2WfeW7tUT2um6tO15ay+c3DzkOvk6y98z3EYrefq7XKtVZl+qp/ZlAswq/Hyqc06I3FjStcdTAwMTA4x4ywzlA9MVxu+DCKnfFzJlaCWDmwXHKGa8FcXOjGeq3y/DXNjvr71pSBRVx1MDAwMd90XHUwMDAyjFx1MDAxNLXSKTrJyHhdXHUwMDE1bi5cdMOZXHUwMDA2n45xQWVoUY1ir1x1MDAwZnqrWevDvT9q11r94D1cdTAwMWXfzCyqoKpXXGZJXHUwMDE3XFyU/zNcdTAwMDBDLeAqdPCk04L0h09cXKhfdujrf//n98hvXHUwMDFiSZRcdTAwMTXGXHSmtOXMf2yGXHUwMDExZZRkVjBcdTAwMDaSo53R885cdTAwMTZcdTAwMDPO8dlCuJyc7Df/38vyKyODb75GOMB+K8G0Xny3JFx1MDAxYWRvVtky8P5Ksl9cdTAwMTbX2YJSwlxm7lxcKO1cdTAwMTibVtnSaWKosZRKboF62eBiV6eznSTMOVx1MDAwN9ZVgVx1MDAwZdK+TdlXrc1D5ItbXHUwMDA32JerXGK8/vKt0IX3UVBzXHUwMDE0W+U3k69mrVxc9uuKXHUwMDAw/5rDSFwi+FdgNVx1MDAwYrEvNnvXJJZ9MWHjk5E4qFx1MDAxZtC6S2yZzFx1MDAwZWOni35N41x1MDAxNrQjXHUwMDAxnqVcdTAwMWNoMMs1n944kVx1MDAxYSxcdTAwMTW31jKqNVx1MDAxOClcdTAwMTFY2FxuuZYwJDZcdTAwMDTCiGRmvCFccspcdTAwMDNcdTAwMWWNz8f4iWBpXHUwMDE1TSw5KTGeVb9i3pXoqrNH77pzcEDFwWVhK108ay6n+UmhXHUwMDFjwW0vcLmRaFx1MDAxOd9G+jRcdTAwMTXjXHUwMDFhKY9cdTAwMTMgaU7Aw3xcdTAwMWLRmkv+fi7KXHUwMDEwcPSl5Vxc4Fx1MDAwZsqJ2Fx1MDAwNLlcdTAwMTgsy1x1MDAxYeB9goJXoT470cpEgFx0X2FcdTAwMTitilx1MDAxN8WngmnGhHJuXHRXNlx1MDAxYVx1MDAxNCnlRVx1MDAwMVx1MDAxMsQ4oZw7XHUwMDA3vFRcdTAwMDFcdJrOJpGKXHUwMDExjdssoExcdTAwMTmQ3eRcdTAwMDJQyoHgwyqMomDKojPCwixcYmg00CDNVqBDP1x1MDAwZlx1MDAwYjrtw88nRIHmsIIgXHUwMDA1XG4s5T3851x1MDAxOUm3e09P2yOW65+2Sqz15OWPROtk8ZJcdTAwMDJniHWSgvdJqVx1MDAwM4UxJczCalx1MDAwMu60Y2B3MW2Bh4SQXHRHwFx1MDAwMeOAXHUwMDAzLeFPKsJCqC1cdTAwMTE/qbqlYFx1MDAxYdxcZoSlqqTgXHUwMDFkRCzRXHKal7hcdTAwMTM8XHUwMDFlXHUwMDAxXHUwMDFhJrS9h89VxTNfXGae48N4S6HBXHUwMDFiOdCNalSa7WF38/zkPHfdujjd3Lzp/4K9lVmrXHRBZtpcdTAwMTCOt1x1MDAxZUD1M2VcdTAwMWNcIsZaP1NcdTAwMWWjXHUwMDA1XHUwMDFjYExcdTAwMGZcdTAwMDCH1IE29vm/k1x1MDAwNEBKwDVcdTAwMTbcMGmjN1xyXHUwMDE0eOFcdTAwMTJ+gGppXHUwMDAxVj5cdTAwMDfmXHUwMDBiLC8nnll+XHUwMDAz2kjBXHUwMDAzsDRcdTAwMDJcdTAwMTXShd6doIIyxs1ie2dcdTAwMWZl7F7s135cdTAwMWJTXHUwMDBlv/27lffA7lx1MDAxNPttf1x1MDAwMsGURSSUIVx1MDAwZuNcbtg3kN1FXGbk2y2hz0TJyU9cdTAwMDXs41x1MDAxY/tcdTAwMTS0jz8vNepCQ7ZyJo2dmVx1MDAxM2FkbJDPXHTtOGjWxeNcdTAwMDJiMMzdjWxtdCbXjqRcdTAwMWLcXpnyfXrQXHUwMDE1TWNcclx1MDAwNVWkOJNcdTAwMTimXHUwMDA1kVx0xPKMXHUwMDA2m63Bi4A/pPbfriRiXHUwMDAyVFx1MDAwMjvQyJmBVE+uZ1x1MDAwMVx1MDAwNvFcdTAwMTJcdTAwMTmQxlx1MDAwMYPxhVxmPkOGxLaoPl6dPlx1MDAwZfSPXvdm7TpXXHUwMDExTb2bwoxcdTAwMDPDQrWML2jhUoPGYXZxtERfdNrRXHUwMDAymtVcdTAwMTjGtFx1MDAxMMZwXHUwMDEzqLyVVlx1MDAxMam5UCi/XHUwMDAyPPLkUv+ArnNqXHUwMDE1+ttcXFx0YFx0yzCIl1x1MDAwMlVcclx1MDAxN+An8581XHThLdZcdTAwMGXv8J5X7LZqrVxuXHUwMDE41GyjXHUwMDAyXHUwMDE2qF9tJlx1MDAxNSGfY1x1MDAxY4Lm73VpUVx1MDAwYlvIWZTiXHUwMDFkZpHGmkXDNYr2wjCno85Ddef47mD3zGVcdTAwMDf7XHUwMDE5o1x1MDAwZV3qYY7esORcdTAwMWGoIDWOUjpcdTAwMWQnV9pcdTAwMTClJKDcajBVXHSGdphcdTAwMTDEOYo7wkJcdTAwMDBkour059pEh9vJ3H2UU7oqm0jzldr2fv6qxXpX+rR/cbvRPU2jTVQzsmrhwWGy9eI2MfKiU1x1MDAwZVx1MDAxNk0tkUxI54w1mHA3XHJcdTAwMTZgkOiGOYy6O6NcdTAwMTJM4MF4LFx1MDAxYje0YFx1MDAxYVPvXVx1MDAxOCxzbaI0XHUwMDE4XHUwMDEw0e7va1x1MDAxNLOdTlx1MDAwM1xm209Hc69dqZVcdTAwMTIyiXNMQ9Ak+lx1MDAxN1x1MDAxNljWKlxmotdo1Dq96GZcdTAwMTbUxEfRXHUwMDE08D1B6Vx1MDAxMrkgha37m+Ygu3l+dVJ32qveePeymfJcXFthXHRVjjIjlFx1MDAwMo02Ocsz75VcdTAwMDSklisrwFx1MDAwN+AmQYMoXHTVVHMtpGRcZnzFiIqXXHUwMDE533lJv1x1MDAxNVjr4Gi0lzixcZ1cdTAwMDeedz/uXHUwMDBmd+43XHUwMDFihdu7bqHZqrlcdTAwMTdcdTAwMWL0cbrAx7beacRmyTj4NLEyXHUwMDBlSlFYvUy+U/Z492wzP8qXa1x1MDAxYrm1tcveRv7uLI72fVxuXHUwMDE5V1RcdTAwMTFtQJlyXHR+l/LV4KZTxsExVGCO/Y0qvoSccVx1MDAxYVx1MDAxYvhV0lx1MDAxOXDt6eIyXrlcdTAwMTXZrZvC1X2RgVx1MDAxMavIQq56W/jUMs5cdTAwMTWxXHUwMDE2KZAxlnOadlx1MDAxOeeaXG4mzJdcdTAwMWWf0uMzunzgnpNkbom6IJtdL7VvN670ei6vM2LvSW1cdTAwMTZYymWc4mY1s1xuU/ssXHUwMDE3gSQ3J4hcdTAwMDUvRcC/1NDk+vSsSI0zqZnVX1x1MDAxMj7VWi5ewsFcdTAwMGJ1Vrol4tDq/Ligbi/q11e1gSpkdK/5o9D4zFx1MDAxMq6YXCJYimKUXHUwMDExQlGTYFx1MDAxYedqRFx1MDAxY9aoMJhcdTAwMTZdNvM3XHUwMDE1ctDSsULOXHUwMDE5JlTqJTqu3VRcdTAwMWKXba+6XvDWNuuFrZaXrZU3Uy7kWlx1MDAxM0WdZcrhNkWwLuyT0XGuXGYwXHUwMDE1JqLjSn9hXHUwMDE5XHUwMDFmXHUwMDA3X1wiXHUwMDA03IXTlSZppMBSsHXG4ko8d31RqniaX1x1MDAxY1Zbd3SUOT6upZ6KM1x1MDAwN1RcXHGKhcCgx8NFNGDnNHXYXCKI8lx1MDAwNMOmjjAqpVaYQIxbmlx1MDAxMUU0kmiAIbhcdTAwMDXCaF9cdTAwMGLBXHUwMDE32aZcdTAwMTZWXG6s8q+owH33fSqFPpjyXHUwMDFk88mKk8mnPltpXHUwMDFhebxcdTAwMTjgKzMtXHUwMDAxk5P95v97WVx1MDAxZMBofEJcdTAwMDFzmmN52USm5qaSXHUwMDE3XG5yVN4stSpPlYPalZGnR7dxZTlp0Vx1MDAwMYpcdTAwMTMumMFcbjYmZSCbwDGChUlaXHUwMDAxx3OSJthHyGLZrDZOKFx1MDAwYuzaxycnXHUwMDE2Tlx1MDAxMXhcdTAwMThcbss5XHUwMDFjpjS6iJbB1ihHY3pcdTAwMWF8KYFPoVx1MDAwNOJcdTAwMDRh/GFIXHUwMDA0VqRcdTAwMDbcXGaqXHUwMDBivE9cdTAwMTi7zFx1MDAxZWpXbtZPTr2b/XPGZabXOJan/jzD1KpcdTAwMDGOfYXFWDQn+yfP/lx1MDAxYyeYdc+BXHUwMDExK2C7ie6uKEyahVx1MDAxZrNAPPwgf1VcdTAwMDSUcGaEM/g1sPrSuCiHTlLDaUxcdTAwMWaEL1XwKVRBrCyMXHUwMDBmXHUwMDBmS8HKlEF82b2RzlCp7eKcoEhcdTAwMTVrepd7d2d7XHUwMDFk73K0t5dnP36kXVx1MDAxOTBcdTAwMDKuoqOgiFx1MDAxNVxi6HRtgVx1MDAxMpRgvz9LXHUwMDA1trcwXHT6XHUwMDA14H5cdTAwMDPzYFqAXHUwMDFlVUZGub2cXGIqqLRwlzFXylx1MDAxN2l6aTtcdTAwMGXHM6zK/NJcdTAwMDSfV1x1MDAxM8RcdFx1MDAwMr4yIVx1MDAxOViZXHUwMDFliJ+QosFToc5fcTl3O3o9f1x1MDAwNlx1MDAwZao52Dtu1lx1MDAwYvYyf8RcdTAwMWbT3t6MM1wiXHKzhmNcdTAwMGWZXHUwMDBi1uo7R5xcdTAwMDZlyMcpPkYnXHUwMDE45TVcdTAwMDRIXHUwMDA38Fx1MDAxM4w5auHvXHUwMDEx/6pcdFx1MDAxYzBcdTAwMTSmXHUwMDA05lx1MDAxYlx06mdrr9tcdTAwMTiUI8z+krvRf1x1MDAxYkVcdTAwMTArXGL4XG6KwIr0XHUwMDAw6JT4QKFcdTAwMWOrXHUwMDFkscSeff76pHa8vl9vn/cuXHUwMDFlNnJcdTAwMWJcdTAwMGascpV2QsBcdTAwMWPhRlpwk+BcdTAwMGbuXHUwMDFi5/VcdTAwMTJcYudCMGdwc5cmXHUwMDFhJ1RcdTAwMGUjNto5Si2TXHUwMDExuchcXFx1MDAxMFxui1x1MDAwMXOB+zn+pMOXojzFnYNDv9TAJ1ZcdTAwMDOxgoCvkFxirExcdTAwMGbw2FihXHUwMDA0XcSdWVwiSDC8XHUwMDE59Vx1MDAxZlx1MDAxZtTJcK3WMlx1MDAxYlx1MDAxN07Uuzt7KVdcdTAwMDOY0WtcdTAwMDTDrTDc41x1MDAwZahcdTAwMDFQzuCjOatAXHUwMDExaGNcdTAwMTNcdTAwMWN8XHUwMDAwy9BcdTAwMWFWgpnSVrBcYr9cdTAwMDCZi1XSYJNxg5ww3CrRYlx1MDAwMpJcdTAwMTX2K1r4eVx1MDAxNUGsJOArXHUwMDEzXHUwMDE2glx1MDAxNWlcdTAwMDLnTPDdV0JAmbKgXHSWqE+6f1DDzc2e7l6tmeJmIcuzZyOefk1gXHUwMDE5XHUwMDFmzzBSflx1MDAwMD7n8DGCnY1cdTAwMWN4SZjllFx1MDAxY1x1MDAxZrCEKSml0uBcdTAwMTZcbklNxK5cdTAwMDF4jthcdTAwMTJVaoPtxIxccutcdTAwMDElOVx1MDAwNZ8yplxi8UtcdTAwMGZ8XHUwMDA2PVx1MDAxMC9cdPjKhIRgZYyAxStcdTAwMDLNXHUwMDA1dlx1MDAxNF6iXHUwMDEzVdme367n18/djVx1MDAxOFx1MDAxNbuH1dFao1RKuVwigDuvnGDGgFx1MDAwZmScXG5QXHUwMDAyLsk4aV8pzrXRXHTuXHUwMDFiOMLAJ3TgimFcdTAwMWJ0XHUwMDFhsW1gXHSAyGL7ViphpTS8fYhcdTAwMWJORsdU7n8pgk+hXGLi5Fx1MDAwMF8hXHRYUlxyzFx1MDAxZTfM4sdccmtpwFx1MDAxZS6TLXe8e3E+6q6dbTQyN4eF89z55uF+yoebXHUwMDE4XHUwMDA1/F8qJ0E8LTZ2mlJcdTAwMDWaSeKwXHUwMDBlUGhcdTAwMGX/2OSChUBNpEOdXHUwMDAzWolrLWxEXHUwMDFmMKaIXHUwMDA06bDWgdpcdTAwMTLY9T2kXGZAXXEsep5HXHUwMDBiut2rVua63Sjw5qnlzVx1MDAxMe+4/dGbtMGbSps/LItujvCr2FxydEeFlFx1MDAwYo1cdTAwMTJ/XHUwMDE2/ZPzcql1tD8sVI8qOnvUXHUwMDFk9ne9uD7VaVx1MDAxMX3LwDF2XHUwMDE2RcZSp/mnXHUwMDE2feXAXHUwMDEyWjpv6/xL8MeCP6tHO1hcdTAwMWG2zEDbcrl6t9s4WMtcdTAwMWNcdTAwMWU9VU5Zo2mLrpxu0Vx1MDAwNzkhXG6bJoHexyQxPVP0k4tccq9I61x1MDAwM09cdTAwMDVcdTAwMGZhfrXLl/B/n1NcdTAwMDaDj1xcUM5cdTAwMTeX/of6w8l+81iXj0/XrbdVqVu1+Zhu6TfGXHUwMDExy7Fsk+FcdTAwMTD6QNbU2CqAy2ksfIGrXHUwMDA0XHUwMDA3sq9E+Fxys06CzvpS/HO8fjaj/7STjMNNXoLq99rnpV6dNi7qXHUwMDBmu5SdZXZrZyblderGUUKFcNRZqnSA7ijsPVxuplx1MDAwMONqXHUwMDE0R3QkJvY0QsrBx1NcdTAwMGVcZlx1MDAwZZOUWUxcdTAwMWZcdTAwMGJKOacg+87FXHLf+Fx1MDAxODFfoMP/l/ePr+W8/6lvh0Vhcvhv/r+Xxj+nsc6OwcY+hi8xymOfP5RuytdWsJ27/OHuzdHBj5tsyuGvNTFOWUpcdTAwMDXD4TpBd0eR8aw0XHUwMDA32sEm6O3g6GH4XHUwMDE56lx1MDAxY2Xw0lGDPFx1MDAxOMFKXFxMXHUwMDE4wTwly8OZwthcdTAwMWSLoYx8mDr4ivolivtcZqNE4UhcdTAwMWRcdTAwMGJcZlQpZfxjJ6KPj5WkJM5HidNoXHUwMDFklVx1MDAwNlNcdTAwMDTfXHUwMDExbnK6mXrpWV80jlx1MDAxZcWN01t24/wsV1xc5/fnN6e+YvGYSUTPsFx1MDAwNbIqQHlRXG7q0LDpWL3kgsAlcuCHTk1ccm59xZvDKXLjLVx1MDAxNi6Zjdp2XHUwMDA36Fx1MDAwYua0ccBcIrFcdTAwMDc/m6D/8/ZcZp+seH7P8Im+WL+943ujXHUwMDAxP9s7UsJcdTAwMWJcZlx1MDAxZTgzg8Tow0tbKadcdTAwMDSmZIbyVL4/b3TG0lbcXHUwMDAzdYvtVS3fcfxtOmu1+1x1MDAwMmCTQHK1NrgjrVx1MDAwMqWFmljm0IVcdTAwMDPDLanWat7pXHUwMDA0JVx1MDAwMnw/QFx1MDAwMd43IczU+SzBXHUwMDFlXHUwMDEwXHUwMDFhbidcdTAwMTeWSjlfX8Qha7w6wJSmTODq4TGZqLzGZVX2XHUwMDAyI4+aw6uNq/uN7YN2zlx1MDAxNNz23dFoY+37ZF3+eUZcdTAwMDBcdTAwMDbw9uFcdTAwMTZiXHUwMDFmYLhcbt/m68/JSFhJTFEnSGXhXHQ4XHUwMDE2XHUwMDEy4IXmMO1cdTAwMTR3veZjVp5n1U5GnN55ZnvQj1pcdTAwMTTF+lx1MDAwNYr9woGiaFx1MDAwMVx1MDAxY8CE1mTgXHUwMDExWi0xh0FKXHUwMDEwXHUwMDBlXHUwMDEzWtNyQ5Z8Q7qjNffsW1x1MDAxYd+S4XlzhcNtNjjQXHUwMDEw7rZcbrRcIpCcg1x1MDAwNMNcdTAwMDfP7S99n77uj8JcdTAwMTc0XHUwMDA1gyQwXHUwMDFmXHUwMDA2+09GKG9cdTAwMDGC5qRiXHUwMDEyX5ZPlMHn1d3LzHv4xbpcdTAwMWI7TDjnd1x1MDAxZCa6W8hYj1x1MDAwM55cdTAwMTfDwa4rXHUwMDFjobJcYtGYXHUwMDEy2bfNp39/pKa2gFaYjSvLJaHMKMMsjlx1MDAxYtVcdTAwMDFORCVcdTAwMDGFLKzBeULal905aY+Mc+iYY5JJRaXzdXPy1yj5sWd9s1a+gPVcdTAwMDHAUmCcJLLeKGDZ+O1cdTAwMWKHSnDBWr+/JrIurzbOtrqXrexcdTAwMTPvneZcbs3GcenOhpFcdTAwMTUz0ItRhU1ZXHJzwJGs8zfze55RJIihilx1MDAwMn6sMVxcmFxiq6UsYUBcdTAwMWNcdTAwMWO47oabqHbKUlx1MDAxMGo0tr5cdTAwMDHsYfubv1x1MDAxObZcdTAwMTKb6GWQwEpcdTAwMWSeToNcdTAwMTclQ1jy7fswrnH28upQM69R+yErtW7Vpnio5+lTofVUMLTeWlx1MDAxZTRsNaCJXk1cYjThkV6MOqD61lxiK1x1MDAxOFx1MDAwNlx1MDAwNtx03a2knFx1MDAxOClcdTAwMTizUlxiwFx1MDAxNlx1MDAwYsHFKKJcdTAwMDU267fA45iMmsjB/2625/1DvCyWkNBIl3pGIFjicHYnXHUwMDEymuG1lKxORO9nXHUwMDFi86N2r4Y9zH1PbNlRliuZ1OVrvVx1MDAxM5xkOdvwXHUwMDA0+7KHL2iFXHUwMDAzunh8N1OjJYa/XHUwMDE33+LeOm/u7Ov8SfmQ2Ytqbq16ueHFpfqnZrrC2I5LsFx1MDAwNaDW+VSju+cps5w4pyWQaGC2kiVYXHUwMDA1/Fx1MDAxZTbwmuPLXHUwMDE5liglM7g7sVEkT3ajOShen6+t5682MqpbuCjePvxcdTAwMDJcdTAwMGI3b1x1MDAxNFx0p7H58Fx1MDAwMFx1MDAxNVx1MDAwNWsxi6fDR1906sHiXGbWXCJYTP1XlorpzTGpOcF4kzROgCDz5JpGXHUwMDFhbNnjXHUwMDFjl45cdTAwMDORM77Uq1x1MDAxOSOZuaVKxTXQ+sBNrjeZtzfNY77w4Gz4cFdk3lx1MDAwMoZsjsJcdTAwMGZcdTAwMWGy8GreM5V5MfOm46dcdTAwMDc5q4GP0kWo/DNk282N3I49qDxlfjRPj+197eD2QaVcdTAwMWayYMLGo8uFcePuqVOQhVx1MDAwZjCHkVxu65jCvrcpN3DCjWtcdTAwMWI+l4FcdTAwMWKdXnjXpb3N2ywrXHKvRmulRyN6aTRwMn7+JNxzp1x1MDAwNVui4Cv6qlNcdTAwMGZcdTAwMTfLyXhbm0mrTaDOQzFcdTAwMGJ0XHUwMDEw9164XHUwMDFlbykmhlx1MDAxNudcYji7jlx1MDAwMVx1MDAxY+LmT4ZccpzSXHUwMDA2XHUwMDBihn/5cK1cdTAwMGa0cNvNjlcuoowmY+Lm6PygiYtYTvI2zsb66ZZKin1cclx1MDAxN/fh9HU/r1x1MDAxYjvNZme73Vx1MDAxYVSrSm5e5dJcdTAwMGZasHFcdTAwMTTYnbXY5t5cdTAwMDVLtrUjYO1cdTAwMWSGYSk3XCLdTpxwXHUwMDFhh3yxz2XiNrZvL1x1MDAwN1x1MDAwN4XbbT28ONlcdTAwMWKah+ObeimNJs7EXHUwMDEyQvD+Kdb5Lm7hoi869WAxhnBcdH9aq7hcdTAwMDZvblx1MDAxYSzGXHUwMDEyoIpcdTAwMTSAXHUwMDAyxj7Rxv/UXHUwMDEwgzZcdTAwMGWHilAuZESDg7CNY5h1XHUwMDA2znZM6eJf0shly5jykqCVm6P1Q5NcIiPW81x1MDAxZTP3jKZSNrNT3G3cnm7k9ttHW92d/F1jO7y1MJ24PJZoIVxywVx1MDAxNCdcdTAwMGLPRlx0y1x1MDAwMq38pFwi0lpjXHUwMDFjx6/4Op6/ptpcdTAwMTNM3MG8eYkzVCWNXGIngN5cdTAwMDaNXHIkmFx0h1m3Mlx1MDAwNDNNQLk4qZ0wXFxy/yzhVG09lIu9qvfr9+ZiN7RcdTAwMDFcXFZzrFCOUN9CxbekXHUwMDAwksxcdTAwMTg3/C072nM2JbDuhftF/Zek+WXi5XT8cUhEJydcZpnfpVPpXHUwMDE2zKpeOmd6plx1MDAxNY8rUpDx89PhQWHKkFpiuInsMjos1Fx1MDAwN1tHl1x1MDAxN5VyLneav7FcdTAwMWIpQl2MXHUwMDFkXHUwMDE30lx1MDAxMm0kVlwiYVx1MDAxNep00pxcdTAwMTaSSGwjyUBcdTAwMTiEVMk1J1x1MDAwMaGU2L9cdTAwMWFWXGY/XHUwMDA1jCGC9FqFU1x1MDAxMTVcdTAwMThtjbNcdTAwMGZ5aIY6c1x1MDAxMoew+8dRJKprljH2QFx1MDAwYv1N4b9cblx1MDAxM16/XHUwMDEw++TxlVx0PfSwOnpcdTAwMTP4Z8R0XHUwMDE5XHUwMDFij8hYolx1MDAxZkN95/HiuK5H/WP+NCy2XHUwMDFlXHUwMDBl79TW3efAPrB0XHUwMDAwtlx1MDAwNFx1MDAwMXUq0MR8nJRnqOHWYNvGXHUwMDA0i1x1MDAxNHHEksRVcPg9LpzlXHUwMDExhUqgi1x1MDAxNM5aYkDOXHUwMDE04Fxch0vTjVx1MDAxMZpTXHUwMDE206/w11x1MDAxNyS+iez/xfGfmfX0x19cYj/4JXXA7MCXim1hLlx1MDAxY1x1MDAxNqXrJZJcdTAwMTf2RLlwcVb2js7ybuO416yc1lx1MDAwYjb1vrzUWI4owXd2ymh/fsJzXHUwMDEyoiFcdTAwMDKejJLYuVjblG/uXHUwMDAw+jXjLmaYQVojX5XdXHUwMDAzXHUwMDAwQOeid1IuXGb5WXOX151KY+SLxzf8XHUwMDE3XHUwMDFhXHUwMDA0ievFKXP0RadcdTAwMWQtilGCLVC4XHUwMDEyXFxcdTAwMTk73dBCUk0kZuxiXHUwMDBlO3BcdTAwMTmVXFzkS1tCXHUwMDA1XHUwMDE2b3Pcl9Vqoc1cdTAwMWRmXHUwMDE1pzhz9m9cdTAwMTT4OmnftPu+PcOVXHUwMDA2veZo/GDQK7iW5Pd1ZGxqXHUwMDFl1nrDXHUwMDEzkYtcdTAwMGbqeWw/XjZrT2e1XG493qtcdTAwMWZvu4uyvzwrrYBVXHUwMDAyK1x1MDAxYlx1MDAwMZM4hyOYY1x1MDAwZl4t0czgUFx1MDAwNGEoS1x1MDAxMLCrMG9Yf1x1MDAwM1x1MDAxYUhFd+ZIq3XbcNW9/qipcmfd652ePDi83vHWU2ndYsFcIlGZU7FEQCj6olNcdTAwMGZcdTAwMTbLXGI4e9xo61x1MDAwMCxiOnVBgtHRSjHM6Fx1MDAwNaauXHUwMDEz7FxcXHUwMDAzayVcdTAwMGVeXHUwMDE001x1MDAwNDmYt6hcdTAwMTb2XHUwMDExXHUwMDFiO0KBpGi9XHUwMDAyXHUwMDE38LPYt2ypPyj2292kTNxcdTAwMWOtXHUwMDFm2tdcdC8ncSsnRGy1jcFcdTAwMWVLVi1UZfAzeyF/eiP0YOvsyNTP65f3/Dp7XHUwMDFj110zPcBFO6asXHUwMDEzWJOEzlxcsOG8INjRSWIukL9cdTAwMWRNXHUwMDFhjVx1MDAxY0Ovm2Gd9qeyco3qzvagIW5rfI3XR6Jwc2t0NYVWTsyY52w0cFx1MDAwYvDxXHUwMDE3XHUwMDBmeURfddrRoiiYOWCDXHUwMDE23CehqJ7mhEqAiFxuLlxmZzj2PcFcXFx1MDAxZiOIXHUwMDA1J1x1MDAwZVRcdTAwMTSOx1FioVx1MDAxNHTFkbjbVST3fFx1MDAxNlx1MDAxYnfqtXrJWbg5XHUwMDFhP2jhQov5gFxm9NitSos9uyxbgpj2jnc22PBa9DZO+0dcdTAwMTdcdTAwMDfb4v7kuJ1+xEpLqFNAPI3BJlx1MDAwMoGcWutcYkWD48x4qy3dXHUwMDA2zsIqqTKfrMJK0bV+eWvtfKvX6txkvaNcdTAwMWR3spVNoX3j4ULUiX2DXHUwMDFiXHUwMDBmjHCJ4cTRV516tDhJXHUwMDE0IFx1MDAwMVx1MDAxYq5cdTAwMWJqXHUwMDAyXXdcdTAwMWSKMFx1MDAxOFx1MDAxYlxuMmotSzBGqVxiQNIpQceA0Vx1MDAxMWCJ8OHA9DJcdTAwMGJmcVx1MDAwNUGO99m3N2XrvMm+5Y+2XHUwMDBmk7Juc/R90LpcdTAwMDWW8v6UPOb6XHUwMDE5m9mTWcWaXHUwMDE3zCtcdTAwMTa2ryRcdTAwMGKn5EVU+3NhiXUox8BZNXOBeVx1MDAxOUaTMVvFvoOSRbTj4zh6XHUwMDA3XHUwMDBl41xmK81cdTAwMWSfXHUwMDFkQkhHtb9cZrz/a1Puosr9wdXkVEi/+VpI+WqmpTVuoVx1MDAwMZDLpdYp1HfWL7LL1vv/37dcdTAwMTOv2Mic1ZretzWAXHUwMDBmvP3t/31cdTAwMGYwueL/frvzPVx1MDAxYVIxeJ66rCB451xcx3I1/7FcdTAwMGXkjObeQmkjjVhi6vdomOtcZvP7XHUwMDE3jydOn9ubS+9gszFKXHUwMDExduLG+1x1MDAwMcnDQcrYxpdcdTAwMWIxnS2sjSWOMXDSXHUwMDE0+HVcIsm539ZcdTAwMTDUjEZgT0tcdTAwMTORN1x1MDAxM2FgXHUwMDA1XHUwMDE4VynNr7Svilx1MDAwYmc+zn9cdTAwMDRcXFx1MDAxY55+41GYeFx1MDAwN1xcl1x1MDAwM2bcXHUwMDAy3m9h94zcrW80a/qp31A/bGf/h9w9WSTp3UkseZLGWo2V8IE29dxht1x1MDAxYz3utVx1MDAwMy6mZFx1MDAxMUnvYXlcdTAwMDNtXGZHjbOvwStcdTAwMTUmnOOe0nY6qTGwQFnGM1x1MDAxMqL6SklcdTAwMTebt4i9RVx1MDAwNF1srOqS9pVaR99kX1x1MDAxM+xdXHUwMDFmXHUwMDE0s8nRv1x1MDAwNc7ySfLUXHUwMDAz/ah9bYn97UpDyapWK2xJurjB7VtbzWZuXHUwMDBlXHUwMDFlt7YyXHUwMDBmjf32YNi/34rBUqnb7vUy1WK/VF1cdTAwMWFPXHRcdTAwMTSdUUVcdTAwMTjIuNNUY1x1MDAwZtdg41x1MDAxMPB5jbHoP4JC00E2sEKjyzXBTFx1MDAwMs5cdTAwMWOlzlx1MDAwZsmJXHUwMDE2JJg3j2Wk8HDANMuQXHUwMDE1NrDM6YbSXHUwMDFmm6z6esxSQSBxfFS7WV9cdTAwMWY2uDmQa1x1MDAxN0V6UrjNLFx1MDAxZlx1MDAwNHqTZ71oX2aaXHUwMDFm1otterKeza1cdTAwMTX08dXdNlx1MDAxYvquxddcdTAwMDJcdTAwMTl0rFWOXHUwMDBihvneWNzl+9ZzXHUwMDBiZEZcdDNcdTAwMGXUjFFKccPf2JY5b83u1Ulp/9I7rNfU2vXDsNyXUWvCXtGWYmTGOSY0Vdrq0KJcZlFcbsRcdTAwMDeopdFcdTAwMGXss1x1MDAwYi1qxem/XHUwMDAwh1ogOL3aJOBYROErjKWwrp/BjqJFNsSOwvFcdTAwMDdHXHUwMDFkwYxjeCBcdTAwMDacXHUwMDFhXHUwMDFkyIXAjtJcdTAwMWN4LDbG1uBcdTAwMDaokJ7QXHUwMDAyublcdTAwMTNYP09cdTAwMDWLympPXfwh/fSIMVxy91O58J5cYi4/PvYrxsnNb2tWu0C/wTeptNdcdTAwMGVcdTAwMTStzsCfXHUwMDE3mLZug3M4Q6iDReBylos7xFx1MDAxMiEsyot9vFxcgUhwu0T+8Vo+O3JcdTAwMDfV8lx1MDAwZnOXO3qinf1ccjaK21xiS1x1MDAxYlx1MDAxMTJgllx1MDAxNLeYkS9cdTAwMDPNmFx1MDAwNGhcdTAwMWROQTSVpkb7MrhSSYNwL41xsZJoxFx1MDAwN/KgzYfsY/HwzPHS3sFT7WC7sZk52l6KXHUwMDA34SBcYrmKisB386BcZlx1MDAxMiFQp+BLXHRcdTAwMGVmXHKeVng+hcU+1dooS3Feh7ThO7taXCJcdTAwMDRrXHUwMDEyXHUwMDAyM4EovOSYn4XWNM544rBqqYCkRc2neFx1MDAwM1x1MDAwZorgOlx1MDAxZldcZpVcZlx1MDAwZppcdTAwMWLQjZ16My651FxcLN7OJFx1MDAxYVx1MDAxOOmhXCLRXHUwMDFh1VFGkOFxa0CSeKBcdTAwMTRSKkkoN6BTQfpcdTAwMDWAILl4rqXA7Z2jXHUwMDFhfF1wTXzae1ZAV2H4XHUwMDBlJ5uumHGleMf0cNCf5lx1MDAxOCvdM51DXHKCfCe0mFVkXHUwMDA0xZUuu1x1MDAxOdsv4Dly55bYfbnqXHUwMDFjXHJbV/fn5YpcdTAwMTnu7fdNZ7DWXnWya1x1MDAwMnDFuLVhijpAiXFsum2BUppcdTAwMThUjzguRrhcdTAwMDTRXHUwMDFhXHUwMDE5/jZcdTAwMDQ0XHUwMDA0VvtcdTAwMGJERni8qoIlY+Tyl6eor1wiXGLzVytHXHUwMDBlxJiDz3JJg1x1MDAxYlx1MDAwN2FcdTAwMTVfRompZdiWZYmA7tmPh8vm9eY1vzoo3NTL9j7rZT+ByVx1MDAxZO89OcYtxWyfQHDFakJcdTAwMTVcdTAwMTVcdTAwMDbDW1TJ5GK5XHUwMDExXHUwMDEwXHUwMDE2oLDRf4LHYIWU/nZBL02gmVx1MDAwMFdcdTAwMTP7XHUwMDA0fmE45Vx1MDAxOFx1MDAwZT/MOFxm//bzhN+Lnc5pXHUwMDFm7vWrXHUwMDFi831Y80a5sGD943b8QrdvrFx1MDAwMVx1MDAxMGre2Fx1MDAxMf3ztz//XHUwMDA31ZfTbiJ9 - - + + + + eyJ2ZXJzaW9uIjoiMSIsImVuY29kaW5nIjoiYnN0cmluZyIsImNvbXByZXNzZWQiOnRydWUsImVuY29kZWQiOiJ4nO1dV3NcIlmyfp9f0dH7cm/EcPZ4s28gg7w3jWY3XHUwMDE0XGJKgLDCStqY/76ZqCWKMlx1MDAxOIlSl2bETHTPXHUwMDAwVZyqyi/zyzxp/vvbt2/f+49cdTAwMWTv+7++ffdcdTAwMWVKxUat3C2Ovv+O71x1MDAwZr1ur9ZuwUd8/P+99qBbXHUwMDFhf7Pa73d6//rnPydHkFK7+XyU1/CaXqvfg+/9XHUwMDAx///t23/Hf8IntTJcdTAwMWW7WVHKXSjaPnpcdTAwMTjt7HC3t3FYPlx1MDAxYVx1MDAxZjr+0stiul6pX2xVXHUwMDFh3uSjXHUwMDA3eF8xQbRSVDAnhVBCv376iOt0gjCrueSUW+mYVK9cdTAwMWaPauV+XHUwMDE1vsK4VsQxxaWCz51xkzNUvVql2ofvSM5cYpzAXGIqpFx1MDAxM4a9fuN5Qf/6Rl/f6fW77bq31m60u7jqfzBcdTAwMGb/maz5pliqV7rtQav8+p1+t9jqdYpduEmT793WXHUwMDFhjdP+Y+P59lx1MDAxNkvVQdd3ludfufx5XHQ88P7rceVir+qVJ4fB71aqLa+Hz2JyXHUwMDEx7U6xVOvj7WJ0ciG4yM52efzY/jNZVrfY9LbxubVcdTAwMDaNhv/ErfLPXHUwMDEzT33Q8zz8slNKXG7DtX39YFwiS3Dfg+9cdTAwMWW0W2O5Ypxx7iRXkyus9dZBoPrjs95cdTAwMTZcdTAwMWI9b3JncVxyXHUwMDFiXHUwMDEzYZtax6BTLj5cdTAwMWbEXGblTDBFudSTXHUwMDFmbtRa9eAxjXapPvmd8bt//j4twTOEc3KBcFxyPPZcbqXkXFzC7dFcdTAwMGJcXOEzXlx1MDAxZVl753yb3iu9NXis3Vx1MDAxZFaK+5vZXHUwMDE4wem1XHUwMDAxjUuLTeCoZaQmXGaIh/FVXG5KXHUwMDA0t4xP8IdHXG7BiFDMMmG14Vx1MDAwZaC1clx1MDAxY73AXFxQRSzTkmrfXHUwMDFhXlx1MDAwMS64I5oqqa1RQdll2lFupDH8/dh4XHUwMDExnInoiJ/v/Fx1MDAxOSvHf7xcdTAwMWUzOdonen3vYXK5PjFpn1x1MDAxY1x1MDAxZlxy13u1TsVmjlx1MDAwZeR6bjB6XHUwMDFjfX/93p+/R5/2+eCt7Vx1MDAwMb2WXHUwMDE3hcfBwdnallfIXHUwMDE1Rak9/Ssvv1/sdttcdTAwMGKf9/JyMFx1MDAxNJltkzk9brLHrYtRLl/oLnben//1n3hIS1BcdTAwMTViZZCeuq9TaKYsXHUwMDE2zVx1MDAwNlxmXHUwMDA00yDnXHUwMDBiozn6MaVcdTAwMWTNjki4VDCW0nFmbVx1MDAwMNT6o0BcciaZKFx1MDAwMVx1MDAwNp7CXHUwMDBmqmhkh/FcZtLirFx1MDAwM12wYlu3nFx1MDAwMVpaWifrarf6p7Unb3xcdTAwMDOm3t0sNmuNx6lcdTAwMDc7XHUwMDE2Y0R0sVtcdTAwMWXBbfy23ep73dtiyet9n/pStlGroHx/L3n4jSnR79eA1r1+od/uTD4twc9cdTAwMTZrLa+7vYhxandrlVqr2DhbZFVwS7ytl+fIiO/p3lx1MDAxNHtcdTAwMWV+indAvVx0xdYnXHUwMDE3QVx1MDAxMDvtQN07Obm380BMK2eHR1vdM367v3Z4lj3oXdYr7ZSDmFtLXHUwMDAwXHUwMDA1TFx1MDAxOFx1MDAwYujxXHUwMDE5tzGGXHUwMDE5JWi0laRcdTAwMTSkldnAulZcdTAwMDdhWFx1MDAwMFFcZvBopKagK1wiIFx1MDAxY2GSlTFA/MXK6eqSXHUwMDEwdlb6bs1cdTAwMWIhTKfeXVx1MDAwMML/bmVv4DFcdTAwMTRLfZDaf7f2io9+uK5cZstT11x1MDAxMVx1MDAwN9zZa1lcYsHavp1aa6mD7058XHUwMDA3oVxyY9R3f+fBeEDzw3qxTU/Ws7m1gj6+uttmw5TDmDJcdTAwMDXMmjtlLZfSyYlReyHYjjk00n5cdTAwMTSt2lxmS0pcdTAwMWNX1Fqq8Fx1MDAxZlx1MDAxNeFCz2TYXHUwMDEyuFx1MDAwMlx1MDAxY+5z3j9cdTAwMDPD3v9xmD/IXHUwMDE2h1x1MDAwNbU1zOel/PFjQ1xmP4BcdP9cdTAwMTLm3re2ms3cXHUwMDFjPG5tZVx1MDAxZVx1MDAxYfvtwbB/v7WC867lsyN3UC3/MHe5oyfa2d9go1x1MDAwNdebXHUwMDE2j0CzeCWkuFx1MDAwMfhcdLa4e1x1MDAxZi1VKVdCmlx1MDAwM11QSoBLYLSZXHUwMDEw/lx1MDAxN38geVx1MDAxZMSkIdygt2GkZOjmL+RcdTAwMGIwXHUwMDA1flx1MDAwMFx1MDAxY5G0L/DHKqX0fZ7AXHUwMDFhfNxtN1x1MDAxYSCpSXhcdTAwMDBzjGiQSESuZlx1MDAxNcx/Nm8wsZDVzCmQXHUwMDFmt7hcdTAwMGKft2b36qS0f+lcdTAwMWTWa2rt+mFY7st0I1ZpSSwzWlxixangNOjBS8I1tUBvwTWwLrCsVFx1MDAwNOW40ZxrvVxu4H4gZdhaXHUwMDFmNnPd/Vx1MDAwN+mdrOduXbV6qu3Vl1x0fr9cdNaxXHUwMDExdqukXHUwMDEzWonF8Vx1MDAxY/2QUo1nLVx1MDAxOVx1MDAwMfNqXHI3xoJjLFx1MDAwMnh2XHUwMDFmg2emXHUwMDA0oUY5WIWQkb582Fx1MDAwNGvKXHJcdTAwMDdcdTAwMDWQtCufKlx1MDAwYtzstFvjdSVggOeYo7BcdTAwMDFcdTAwMGUvZlx1MDAxNfb3WVVEYFx1MDAxNVx1MDAxZXZsXHUwMDAwXUpLXHJfZjdstr8zXHLWUrfd62WqxX6p+ksgSyhcdTAwMDVN5Fx1MDAwMFx1MDAxYcCVjXRUTFx1MDAwZX2OyVx1MDAxOYAxZeDIXHUwMDFiK7XQ00RaYWBdS8Es5Vx1MDAxMmDMXHUwMDAya10lmXZcdTAwMDTW5zS3ypgob55wq1xygyVcblx1MDAwYnSb+kL8L8TaKSl5QvaZJ2WfeW7tUT2um6tO15ay+c3DzkOvk6y98z3EYrefq7XKtVZl+qp/ZlAswq/Hyqc06I3FjStcdTAwMTA4x4ywzlA9MVxu+DCKnfFzJlaCWDmwXHKGa8FcXOjGeq3y/DXNjvr71pSBRVx1MDAwMd90XHUwMDAyjFx1MDAxNLXSKTrJyHhdXHUwMDE1bi5cdMOZXHUwMDA2n45xQWVoUY1ir1x1MDAwZnqrWevDvT9q11r94D1cdTAwMWXfzCyqoKpXXGZJXHUwMDE3XFyU/zNcdTAwMDBDLeAqdPCk04L0h09cXKhfdujrf//n98hvXHUwMDFiSZRcdTAwMTXGXHSmtOXMf2yGXHUwMDExZZRkVjBcdTAwMDaSo53R885cdTAwMTZcdTAwMDPO8dlCuJyc7Df/38vyKyODb75GOMB+K8G0Xny3JFx1MDAxYWRvVtky8P5Ksl9cdTAwMTbX2YJSwlxm7lxcKO1cdTAwMTibVtnSaWKosZRKboF62eBiV6eznSTMOVx1MDAwN9ZVgVx1MDAwZdK+TdlXrc1D5ItbXHUwMDA32JerXGK8/vKt0IX3UVBzXHUwMDE0W+U3k69mrVxc9uuKXHUwMDAw/5rDSFwi+FdgNVx1MDAwYrEvNnvXJJZ9MWHjk5E4qFx1MDAxZtC6S2yZzFx1MDAwZWOni35N41x1MDAxNrQjXHUwMDAxnqVcdTAwMWNoMMs1n944kVx1MDAxYSxcdTAwMTW31jKqNVx1MDAxOClcdTAwMTFY2FxuuZYwJDZcdTAwMDTCiGRmvCFccspcdTAwMDNcdTAwMWWNz8f4iWBpXHUwMDE1TSw5KTGeVb9i3pXoqrNH77pzcEDFwWVhK108ay6n+UmhXHUwMDFjwW0vcLmRaFx1MDAxOd9G+jRcdTAwMTXjXHUwMDFhKY9cdTAwMTMgaU7Aw3xcdTAwMWLRmkv+fi7KXHUwMDEwcPSl5Vxc4Fx1MDAwZsqJ2Fx1MDAwNLlcdTAwMTgsy1x1MDAxYeB9goJXoT470cpEgFx0X2FcdTAwMTitilx1MDAxN8WngmnGhHJuXHRXNlx1MDAxYVx1MDAxNCnlRVx1MDAwMVx1MDAxMsQ4oZw7XHUwMDA3vFRcdTAwMDFcdJrOJpGKXHUwMDExjdssoExcdTAwMTmQ3eRcdTAwMDJQyoHgwyqMomDKojPCwixcYmg00CDNVqBDP1x1MDAwZlx1MDAwYjrtw88nRIHmsIIgXHUwMDA1XG4s5T3851x1MDAxOUm3e09P2yOW65+2Sqz15OWPROtk8ZJcdTAwMDJniHWSgvdJqVx1MDAwM4UxJczCalx1MDAwMu60Y2B3MW2Bh4SQXHRHwFx1MDAwMeOAXHUwMDAzLeFPKsJCqC1cdTAwMTE/qbqlYFx1MDAxYdxcZoSlqqTgXHUwMDFkRCzRXHKal7hcdTAwMTM8XHUwMDFlXHUwMDAxXHUwMDFhJrS9h89VxTNfXGae48N4S6HBXHUwMDFiOdCNalSa7WF38/zkPHfdujjd3Lzp/4K9lVmrXHRBZtpcdTAwMTCOt1x1MDAxZUD1M2VcdTAwMWNcIsZaP1NcdTAwMWWjXHUwMDA1XHUwMDFjYExcdTAwMGZcdTAwMDCH1IE29vm/k1x1MDAwNEBKwDVcdTAwMTbcMGmjN1xyXHUwMDE0eOFcdTAwMTJ+gGppXHUwMDAxVj5cdTAwMDfmXHUwMDBiLC8nnll+XHUwMDAz2kjBXHUwMDAzsDRcdTAwMDJcdTAwMTXShd6doIIyxs1ie2dcdTAwMWZl7F7s135cdTAwMWJTXHUwMDBlv/27lffA7lx1MDAxNPttf1x1MDAwMsGURSSUIVx1MDAwZuNcbtg3kN1FXGbk2y2hz0TJyU9cdTAwMDXs41x1MDAxY/tcdTAwMTS0jz8vNepCQ7ZyJo2dmVx1MDAxM2FkbJDPXHTtOGjWxeNcdTAwMDJiMMzdjWxtdCbXjqRcdTAwMWLcXpnyfXrQXHUwMDE1TWNcclx1MDAwNVWkOJNcdTAwMTimXHUwMDA1kVx0xPKMXHUwMDA2m63Bi4A/pPbfriRiXHUwMDAyVFx1MDAwMjvQyJmBVE+uZ1x1MDAwMVx1MDAwNvFcdTAwMTJcdTAwMTmQxlx1MDAwMYPxhVxmPkOGxLaoPl6dPlx1MDAwZfSPXvdm7TpXXHUwMDExTb2bwoxcdTAwMDPDQrWML2jhUoPGYXZxtERfdNrRXHUwMDAymtVcdTAwMTjGtFx1MDAxMMZwXHUwMDEzqLyVVlx1MDAxMam5UCi/XHUwMDAyPPLkUv+ArnNqXHUwMDE1+ttcXFx0YFx0yzCIl1x1MDAwMlVcclx1MDAxN+An8581XHThLdZcdTAwMGXv8J5X7LZqrVxuXHUwMDE41GyjXHUwMDAyXHUwMDE2qF9tJlx1MDAxNSGfY1x1MDAxY4Lm73VpUVx1MDAwYlvIWZTiXHUwMDFkZpHGmkXDNYr2wjCno85Ddef47mD3zGVcdTAwMDf7XHUwMDE5o1x1MDAwZV3qYY7esORcdTAwMWGoIDWOUjpcdTAwMWQnV9pcdTAwMTClJKDcajBVXHSGdphcdTAwMTDEOYo7wkJcdTAwMDBkour059pEh9vJ3H2UU7oqm0jzldr2fv6qxXpX+rR/cbvRPU2jTVQzsmrhwWGy9eI2MfKiU1x1MDAwZVx1MDAxNk0tkUxI54w1mHA3XHJcdTAwMTZgkOiGOYy6O6NcdTAwMTJM4MF4LFx1MDAxYje0YFx1MDAxYVPvXVx1MDAxOCxzbaI0XHUwMDE4XHUwMDEw0e7va1x1MDAxNLOdTlx1MDAwM1xm209Hc69dqZVcdTAwMTIyiXNMQ9Ak+lx1MDAxN1x1MDAxNljWKlxmotdo1Dq96GZcdTAwMTbUxEfRXHUwMDE08D1B6Vx1MDAxMrkgha37m+Ygu3l+dVJ32qveePeymfJcXFthXHRVjjIjlFx1MDAwMo02Ocsz75VcdTAwMDSklisrwFx1MDAwN+AmQYMoXHTVVHMtpGRcZnzFiIqXXHUwMDE533lJv1x1MDAxNVjr4Gi0lzixcZ1cdTAwMDeedz/uXHUwMDBmd+43XHUwMDFihdu7bqHZqrlcdTAwMTdcdTAwMWL0cbrAx7beacRmyTj4NLEyXHUwMDBlSlFYvUy+U/Z492wzP8qXa1x1MDAxYrm1tcveRv7uLI72fVxuXHUwMDE5V1RcdTAwMTFtQJlyXHR+l/LV4KZTxsExVGCO/Y0qvoSccVx1MDAxYVx1MDAxYvhV0lx1MDAxOXDt6eIyXrlcdTAwMTXZrZvC1X2RgVx1MDAxMavIQq56W/jUMs5cdTAwMTWxXHUwMDE2KZAxlnOadlx1MDAxOeeaXG4mzJdcdTAwMWWf0uMzunzgnpNkbom6IJtdL7VvN670ei6vM2LvSW1cdTAwMTZYymWc4mY1s1xuU/ssXHUwMDE3gSQ3J4hcdTAwMDUvRcC/1NDk+vSsSI0zqZnVX1x1MDAxMj7VWi5ewsFcdTAwMGJ1Vrol4tDq/Ligbi/q11e1gSpkdK/5o9D4zFx1MDAxMq6YXCJYimKUXHUwMDExQlGTYFx1MDAxYedqRFx1MDAxY9aoMJhcdTAwMTZdNvM3XHUwMDE1ctDSsULOXHUwMDE5JlTqJTqu3VRcdTAwMWKXba+6XvDWNuuFrZaXrZU3Uy7kWlx1MDAxM0WdZcrhNkWwLuyT0XGuXGYwXHUwMDE1JqLjSn9hXHUwMDE5XHUwMDFmXHUwMDA3X1wiXHUwMDA03IXTlSZppMBSsHXG4ko8d31RqniaX1x1MDAxY1Zbd3SUOT6upZ6KM1x1MDAwN1RcXHGKhcCgx8NFNGDnNHXYXCKI8lx1MDAwNMOmjjAqpVaYQIxbmlx1MDAxMUU0kmiAIbhcdTAwMDXCaF9cdTAwMGLBXHUwMDE32aZcdTAwMTZWXG6s8q+owH33fSqFPpjyXHUwMDFk88mKk8mnPltpXHUwMDFhebxcdTAwMTjgKzMtXHUwMDAxk5P95v97WVx1MDAxZMBofEJcdTAwMDFzmmN52USm5qaSXHUwMDE3XG5yVN4stSpPlYPalZGnR7dxZTlp0Vx1MDAwMYpcdTAwMTMumMFcbjYmZSCbwDGChUlaXHUwMDAxx3OSJthHyGLZrDZOKFx1MDAwYuzaxycnXHUwMDE2Tlx1MDAxMXhcdTAwMThcbss5XHUwMDFjpjS6iJbB1ihHY3pcdTAwMWF8KYFPoVx1MDAwNOJcdTAwMDRh/GFIXHUwMDA0VqRcdTAwMDbcXGaqXHUwMDBivE9cdTAwMTi7zFx1MDAxZWpXbtZPTr2b/XPGZabXOJan/jzD1KpcdTAwMDGOfYXFWDQn+yfP/lx1MDAxYyeYdc+BXHUwMDExK2C7ie6uKEyahVx1MDAxZrNAPPwgf1VcdTAwMDSUcGaEM/g1sPrSuCiHTlLDaUxcdTAwMWaEL1XwKVRBrCyMXHUwMDBmXHUwMDBmS8HKlEF82b2RzlCp7eKcoEhcdTAwMTVrepd7d2d7XHUwMDFk73K0t5dnP36kXVx1MDAxOTBcdTAwMDKuoqOgiFx1MDAxNVxi6HRtgVx1MDAxMpRgvz9LXHUwMDA1trcwXHT6XHUwMDA14H5cdTAwMDPzYFqAXHUwMDFlVUZGub2cXGIqqLRwlzFXylx1MDAxN2l6aTtcdTAwMGXHM6zK/NJcdTAwMDSfV1x1MDAxM8RcdFx1MDAwMr4yIVx1MDAxOViZXHUwMDFliJ+QosFToc5fcTl3O3o9f1x1MDAwNlx1MDAwZao52Dtu1lx1MDAwYvYyf8RcdTAwMWbT3t6MM1wiXHKzhmNcdTAwMGWZXHUwMDBi1uo7R5xcdTAwMDZlyMcpPkYnXHUwMDE45TVcdTAwMDRIXHUwMDA38Fx1MDAxM4w5auHvXHUwMDEx/6pcdFx1MDAxYzBcdTAwMTSmXHUwMDA05lx1MDAxYlx06mdrr9tcdTAwMTiUI8z+krvRf1x1MDAxYkVcdTAwMTArXGL4XG6KwIr0XHUwMDAw6JT4QKFcdTAwMWOrXHUwMDFkscSeff76pHa8vl9vn/cuXHUwMDFlNnJcdTAwMWJcdTAwMGascpV2QsBcdTAwMWPhRlpwk+BcdTAwMGbuXHUwMDFi5/VcdTAwMTJcYudCMGdwc5cmXHUwMDFhJ1RcdTAwMGUjNto5Si2TXHUwMDExuchcXFx1MDAxMFxui1x1MDAwMXOB+zn+pMOXojzFnYNDv9TAJ1ZcdTAwMDOxgoCvkFxirExcdTAwMGbw2FihXHUwMDA0XcSdWVwiSDC8XHUwMDE59Vx1MDAxZlx1MDAxZtTJcK3WMlx1MDAxYlx1MDAxN07Uuzt7KVdcdTAwMDOY0WtcdTAwMDTDrTDc41x1MDAwZahcdTAwMDFQzuCjOatAXHUwMDExaGNcdTAwMTNcdTAwMWN8XHUwMDAwy9BcdTAwMWFWgpnSVrBcYr9cdTAwMDCZi1XSYJNxg5ww3CrRYlx1MDAwMpJcdTAwMTX2K1r4eVx1MDAxNUGsJOArXHUwMDEzXHUwMDE2glx1MDAxNWlcdTAwMDLnTPDdV0JAmbKgXHSWqE+6f1DDzc2e7l6tmeJmIcuzZyOefk1gXHUwMDE5XHUwMDFmzzBSflx1MDAwMD7n8DGCnY1cdTAwMWN4SZjllFx1MDAxY1x1MDAxZrCEKSml0uBcdTAwMTZcbklNxK5cdTAwMDF4jthcdTAwMTJVaoPtxIxccutcdTAwMDElOVx1MDAwNZ8yplxi8UtcdTAwMGZ8XHUwMDA2PVx1MDAxMC9cdPjKhIRgZYyAxStcdTAwMDLNXHUwMDA1dlx1MDAxNF6iXHUwMDEzVdme367n18/djVx1MDAxOFx1MDAxNbuH1dFao1RKuVwigDuvnGDGgFx1MDAwZmScXG5QXHUwMDAyLsk4aV8pzrXRXHTuXHUwMDFiOMLAJ3TgimFcdTAwMWJ0XHUwMDFhsW1gXHSAyGL7ViphpTS8fYhcdTAwMWJORsdU7n8pgk+hXGLi5Fx1MDAwMF8hXHRYUlxyzFx1MDAxZTfM4sdccmtpwFx1MDAxZS6TLXe8e3E+6q6dbTQyN4eF89z55uF+yoebXHUwMDE4XHUwMDA1/F8qJ0E8LTZ2mlJcdTAwMDWaSeKwXHUwMDBlUGhcdTAwMGX/2OSChUBNpEOdXHUwMDAzWolrLWxEXHUwMDFmMKaIXHUwMDA06bDWgdpcdTAwMTLY9T2kXGZAXXEsep5HXHUwMDBiut2rVua63Sjw5qnlzVx1MDAxMe+4/dGbtMGbSps/LItujvCr2FxydEeFlFx1MDAwYo1cdTAwMTJ/XHUwMDE2/ZPzcql1tD8sVI8qOnvUXHUwMDFk9ne9uD7VaVx1MDAxMX3LwDF2XHUwMDE2RcZSp/mnXHUwMDE2feXAXHUwMDEyWjpv6/xL8MeCP6tHO1hcdTAwMWG2zEDbcrl6t9s4WMtcdTAwMWNcdTAwMWU9VU5Zo2mLrpxu0Vx1MDAwNzkhXG6bJoHexyQxPVP0k4tccq9I61x1MDAwM09cdTAwMDVcdTAwMGZhfrXLl/B/n1NcdTAwMDaDj1xcUM5cdTAwMTeX/of6w8l+81iXj0/XrbdVqVu1+Zhu6TfGXHUwMDExy7Fsk+FcdTAwMTD6QNbU2CqAy2ksfIGrXHUwMDA0XHUwMDA3sq9E+Fxys06CzvpS/HO8fjaj/7STjMNNXoLq99rnpV6dNi7qXHUwMDBmu5SdZXZrZyblderGUUKFcNRZqnSA7ijsPVxuplx1MDAwMONqXHUwMDE0R3QkJvY0QsrBx1NcdTAwMGVcZlx1MDAwZZOUWUxcdTAwMWZcdTAwMGJKOacg+87FXHLf+Fx1MDAxODFfoMP/l/ePr+W8/6lvh0Vhcvhv/r+Xxj+nsc6OwcY+hi8xymOfP5RuytdWsJ27/OHuzdHBj5tsyuGvNTFOWUpcdTAwMDXD4TpBd0eR8aw0XHUwMDA32sEm6O3g6GH4XHUwMDE56lx1MDAxY2Xw0lGDPFx1MDAxOMFKXFxMXHUwMDE4wTwly8OZwthcdTAwMWSLoYx8mDr4ivolivtcZqNE4UhcdTAwMWRcdTAwMGJcZlQpZfxjJ6KPj5WkJM5HidNoXHUwMDFklVx1MDAwNlNcdTAwMDTfXHUwMDExbnK6mXrpWV80jlx1MDAxZcWN01t24/wsV1xc5/fnN6e+YvGYSUTPsFx1MDAwNbIqQHlRXG7q0LDpWL3kgsAlcuCHTk1ccm59xZvDKXLjLVx1MDAxNi6Zjdp2XHUwMDA36Fx1MDAwYua0ccBcIrFcdTAwMDc/m6D/8/ZcZp+seH7P8Im+WL+943ujXHUwMDAxP9s7UsJcdTAwMWJcZlx1MDAxZTgzg8Tow0tbKadcdTAwMDSmZIbyVL4/b3TG0lbcXHUwMDAzdYvtVS3fcfxtOmu1+1x1MDAwMmCTQHK1NrgjrVx1MDAwMqWFmljm0IVcdTAwMDPDLanWat7pXHUwMDA0JVx1MDAwMnw/QFx1MDAwMd43IczU+SzBXHUwMDFlXHUwMDEwXHUwMDFhbidcdTAwMTeWSjlfX8Qha7w6wJSmTODq4TGZqLzGZVX2XHUwMDAyI4+aw6uNq/uN7YN2zlx1MDAxNNz23dFoY+37ZF3+eUZcdTAwMDBcdTAwMDbw9uFcdTAwMTZiXHUwMDFmYLhcbt/m68/JSFhJTFEnSGXhXHQ4XHUwMDE2XHUwMDEy4IXmMO1cdTAwMTR3veZjVp5n1U5GnN55ZnvQj1pcdTAwMTTF+lx1MDAwNYr9woGiaFx1MDAwMVx1MDAxY8CE1mTgXHUwMDExWi0xh0FKXHUwMDEwXHUwMDBlXHUwMDEzWtNyQ5Z8Q7qjNffsW1x1MDAxYd+S4XlzhcNtNjjQXHUwMDEw7rZcbrRcIpCcg1x1MDAwNMNcdTAwMDfP7S99n77uj8JcdTAwMTc0XHUwMDA1gyQwXHUwMDFmXHUwMDA2+09GKG9cdTAwMDGC5qRiXHUwMDEyX5ZPlMHn1d3LzHv4xbpcdTAwMWI7TDjnd1x1MDAxZCa6W8hYj1x1MDAwM55cdTAwMTfDwa4rXHUwMDFjobJcYtGYXHUwMDEy2bfNp39/pKa2gFaYjSvLJaHMKMMsjlx1MDAxYtVcdTAwMDFORCVcdTAwMDGFLKzBeULal905aY+Mc+iYY5JJRaXzdXPy1yj5sWd9s1a+gPVcdTAwMDHAUmCcJLLeKGDZ+O1cdTAwMWKHSnDBWr+/JrIurzbOtrqXrexcdTAwMTPvneZcbs3GcenOhpFcdTAwMTUz0ItRhU1ZXHJzwJGs8zfze55RJIihilx1MDAwMn6sMVxcmFxiq6UsYUBcdTAwMWNcdTAwMWO47oabqHbKUlx1MDAxMGo0tr5cdTAwMDHsYfubv1x1MDAxObZcdTAwMTKb6GWQwEpcdTAwMWSeToNcdTAwMTclQ1jy7fswrnH28upQM69R+yErtW7Vpnio5+lTofVUMLTeWlx1MDAxZTRsNaCJXk1cYjThkV6MOqD61lxiK1x1MDAxOFx1MDAwNlx1MDAwNtx03a2knFx1MDAxOClcdTAwMTizUlxiwFx1MDAxNlx1MDAwYsHFKKJcdTAwMDU267fA45iMmsjB/2625/1DvCyWkNBIl3pGIFjicHYnXHUwMDEymuG1lKxORO9nXHUwMDFi86N2r4Y9zH1PbNlRliuZ1OVrvVx1MDAxM5xkOdvwXHUwMDA0+7KHL2iFXHUwMDAzunh8N1OjJYa/XHUwMDE33+LeOm/u7Ov8SfmQ2Ytqbq16ueHFpfqnZrrC2I5LsFx1MDAwNaDW+VSju+cps5w4pyWQaGC2kiVYXHUwMDA1/Fx1MDAxZTbwmuPLXHUwMDE5liglM7g7sVEkT3ajOShen6+t5682MqpbuCjePvxcdTAwMDJcdTAwMGI3b1x1MDAxNFx0p7H58Fx1MDAwMFx1MDAxNVx1MDAwNWsxi6fDR1906sHiXGbWXCJYTP1XlorpzTGpOcF4kzROgCDz5JpGXHUwMDFhbNnjXHUwMDFjl45cdTAwMDORM77Uq1x1MDAxOSOZuaVKxTXQ+sBNrjeZtzfNY77w4Gz4cFdk3lx1MDAwMoZsjsJcdTAwMGZcdTAwMWGy8GreM5V5MfOm46dcdTAwMDc5q4GP0kWo/DNk282N3I49qDxlfjRPj+197eD2QaVcdTAwMWayYMLGo8uFcePuqVOQhVx1MDAwZjCHkVxu65jCvrcpN3DCjWtcdTAwMWI+l4FcdTAwMWKdXnjXpb3N2ywrXHKvRmulRyN6aTRwMn7+JNxzp1x1MDAwNVui4Cv6qlNcdTAwMGZcdTAwMTfLyXhbm0mrTaDOQzFcdTAwMGJ0XHUwMDEw9164XHUwMDFlbykmhlx1MDAxNudcYji7jlx1MDAwMVx1MDAxY+LmT4ZccpzSXHUwMDA2XHUwMDBihn/5cK1cdTAwMGa0cNvNjlcuoowmY+Lm6PygiYtYTvI2zsb66ZZKin1cclx1MDAxN/fh9HU/r1x1MDAxYjvNZme73Vx1MDAxYVSrSm5e5dJcdTAwMGZasHFcdTAwMTTYnbXY5t5cdTAwMDVLtrUjYO1cdTAwMWSGYSk3XCLdTpxwXHUwMDFhh3yxz2XiNrZvL1x1MDAwN1x1MDAwN4XbbT28ONlcdTAwMWKah+ObeimNJs7EXHUwMDEyQvD+Kdb5Lm7hoi869WAxhnBcdH9aq7hcdTAwMDZvblx1MDAxYSzGXHUwMDEyoIpcdTAwMTSAXHUwMDAyxj7Rxv/UXHUwMDEwgzZcdTAwMGWHilAuZESDg7CNY5h1XHUwMDA2znZM6eJf0shly5jykqCVm6P1Q5NcIiPW81x1MDAxZTP3jKZSNrNT3G3cnm7k9ttHW92d/F1jO7y1MJ24PJZoIVxywVx1MDAxNCdcdTAwMGLPRlx0y1x1MDAwMq38pFwi0lpjXHUwMDFjx6/4Op6/ptpcdTAwMTNM3MG8eYkzVCWNXGIngN5cdTAwMDaNXHIkmFx0h1m3Mlx1MDAwNDNNQLk4qZ0wXFxy/yzhVG09lIu9qvfr9+ZiN7RcdTAwMDFcXFZzrFCOUN9CxbekXHUwMDAwksxcdTAwMTg3/C072nM2JbDuhftF/Zek+WXi5XT8cUhEJydcZpnfpVPpXHUwMDE2zKpeOmd6plx1MDAxNY8rUpDx89PhQWHKkFpiuInsMjos1Fx1MDAwN1tHl1x1MDAxN5VyLneav7FcdTAwMWIpQl2MXHUwMDFkXHUwMDE30lx1MDAxMm0kVlwiYVx1MDAxNep00pxcdTAwMTaSSGwjyUBcdTAwMTiEVMk1J1x1MDAwMaGU2L9cdTAwMWFWXGY/XHUwMDA1jCGC9FqFU1x1MDAxMTVcdTAwMThtjbNcdTAwMGZ5aIY6c1x1MDAxMoew+8dRJKprljH2QFx1MDAwYv1N4b9cblx1MDAxM16/XHUwMDEw++TxlVx0PfSwOnpcdTAwMTP4Z8R0XHUwMDE5XHUwMDFij8hYolx1MDAxZkN95/HiuK5H/WP+NCy2XHUwMDFlXHUwMDBl79TW3efAPrB0XHUwMDAwtlx1MDAwNFx1MDAwMXUq0MR8nJRnqOHWYNvGXHUwMDA0i1x1MDAxNHHEksRVcPg9LpzlXHUwMDExhUqgi1x1MDAxNM5aYkDOXHUwMDE04Fxch0vTjVx1MDAxMZpTXHUwMDE206/w11x1MDAxNyS+iez/xfGfmfX0x19cYj/4JXXA7MCXim1hLlx1MDAxY1x1MDAxNqXrJZJcdTAwMTf2RLlwcVb2js7ybuO416yc1lx1MDAwYjb1vrzUWI4owXd2ymh/fsJzXHUwMDEyoiFcdTAwMDKejJLYuVjblG/uXHUwMDAw+jXjLmaYQVojX5XdXHUwMDAzXHUwMDAwQOeid1IuXGb5WXOX151KY+SLxzf8XHUwMDE3XHUwMDFhXHUwMDA0ievFKXP0RadcdTAwMWQtilGCLVC4XHUwMDEyXFxcdTAwMTk73dBCUk0kZuxiXHUwMDBlO3BcdTAwMTmVXFzkS1tCXHUwMDA1XHUwMDE2b3Pcl9Vqoc1cdTAwMWRmXHUwMDE1pzhz9m9cdTAwMTT4OmnftPu+PcOVXHUwMDA2veZo/GDQK7iW5Pd1ZGxqXHUwMDFl1nrDXHUwMDEzkYtcdTAwMGbqeWw/XjZrT2e1XG493qtcdTAwMWZvu4uyvzwrrYBVXHUwMDAyK1x1MDAxYlx1MDAwMZM4hyOYY1x1MDAwZl4t0czgUFx1MDAwNGEoS1x1MDAxMLCrMG9Yf1x1MDAwM1x1MDAxYUhFd+ZIq3XbcNW9/qipcmfd652ePDi83vHWU2ndYsFcIlGZU7FEQCj6olNcdTAwMGZcdTAwMTbLXGI4e9xo61x1MDAwMCxiOnVBgtHRSjHM6Fx1MDAwNaauXHUwMDEz7FxcXHUwMDAzayVcdTAwMGVeXHUwMDE001x1MDAwNDmYt6hcdTAwMTb2XHUwMDExXHUwMDFiO0KBpGi9XHUwMDAyXHUwMDE38LPYt2ypPyj2292kTNxcdTAwMWOtXHUwMDFm2tdcdC8ncSsnRGy1jcFcdTAwMWVLVi1UZfAzeyF/eiP0YOvsyNTP65f3/Dp7XHUwMDFj110zPcBFO6asXHUwMDEzWJOEzlxcsOG8INjRSWIukL9cdTAwMWRNXHUwMDFhjVx1MDAxY0Ovm2Gd9qeyco3qzvagIW5rfI3XR6Jwc2t0NYVWTsyY52w0cFx1MDAwYvDxXHUwMDE3XHUwMDBmeURfddrRoiiYOWCDXHUwMDE23CehqJ7mhEqAiFxuLlxmZzj2PcFcXFx1MDAxZiOIXHUwMDA1J1x1MDAwZVRcdTAwMTSOx1FioVx1MDAxNHTFkbjbVST3fFx1MDAxNlx1MDAxYnfqtXrJWbg5XHUwMDFhP2jhQov5gFxm9NitSos9uyxbgpj2jnc22PBa9DZO+0dcdTAwMTdcdTAwMDfb4v7kuJ1+xEpLqFNAPI3BJlx1MDAwMoGcWutcYkWD48x4qy3dXHUwMDA2zsIqqTKfrMJK0bV+eWvtfKvX6txkvaNcdTAwMWR3spVNoX3j4ULUiX2DXHUwMDFiXHUwMDBmjHCJ4cTRV516tDhJXHUwMDE0IFx1MDAwMVx1MDAxYq5cdTAwMWJqXHUwMDAyXXdcdTAwMWSKMFx1MDAxOFx1MDAxYlxuMmotSzBGqVxiQNIpQceA0Vx1MDAxMWCJ8OHA9DJcdTAwMGJmcVx1MDAwNUGO99m3N2XrvMm+5Y+2XHUwMDBmk7Juc/R90LpcdTAwMDWW8v6UPOb6XHUwMDE5m9mTWcWaXHUwMDE3zCtcdTAwMTa2ryRcdTAwMGKn5EVU+3NhiXUox8BZNXOBeVx1MDAxOUaTMVvFvoOSRbTj4zh6XHUwMDA3XHUwMDBl41xmK81cdTAwMWSfXHUwMDFkQkhHtb9cZrz/a1Puosr9wdXkVEi/+VpI+WqmpTVuoVx1MDAwMZDLpdYp1HfWL7LL1vv/37dcdTAwMTOv2Mic1ZretzWAXHUwMDBmvP3t/31cdTAwMGYwueL/frvzPVx1MDAxYVIxeJ66rCB451xcx3I1/7FcdTAwMGXkjObeQmkjjVhi6vdomOtcZvP7XHUwMDE3jydOn9ubS+9gszFKXHUwMDExduLG+1x1MDAwMcnDQcrYxpdcdTAwMWIxnS2sjSWOMXDSXHUwMDE0+HVcIsm539ZcdTAwMTDUjEZgT0tcdTAwMTORN1x1MDAxM2FgXHUwMDA1XHUwMDE4VynNr7Svilx1MDAwYmc+zn9cdTAwMDRcXFx1MDAxY55+41GYeFx1MDAwN1xcl1x1MDAwM2bcXHUwMDAy3m9h94zcrW80a/qp31A/bGf/h9w9WSTp3UkseZLGWo2V8IE29dxht1x1MDAxYz3utVx1MDAwMy6mZFx1MDAxMUnvYXlcdTAwMDNtXGZHjbOvwStcdTAwMTUmnOOe0nY6qTGwQFnGM1x1MDAxMqL6SklcdTAwMTebt4i9RVx1MDAwNF1srOqS9pVaR99kX1x1MDAxM+xdXHUwMDFmXHUwMDE0s8nRv1x1MDAwNc7ySfLUXHUwMDAz/ah9bYn97UpDyapWK2xJurjB7VtbzWZuXHUwMDBlXHUwMDFlt7YyXHUwMDBmjf32YNi/34rBUqnb7vUy1WK/VF1cdTAwMWFPXHRcdTAwMTSdUUVcdTAwMTjIuNNUY1x1MDAwZtdg41x1MDAxMPB5jbHoP4JC00E2sEKjyzXBTFx1MDAwMs5cdTAwMWOlzlx1MDAwZsmJXHUwMDE2JJg3j2Wk8HDANMuQXHUwMDE1NrDM6YbSXHUwMDFmm6z6esxSQSBxfFS7WV9cdTAwMWY2uDmQa1x1MDAxN0V6UrjNLFx1MDAxZlx1MDAwNHqTZ71oX2aaXHUwMDFm1otterKeza1cdTAwMTX08dXdNlx1MDAxYvquxddcdTAwMDJcdTAwMTl0rFWOXHUwMDBihvneWNzl+9ZzXHUwMDBiZEZcdDNcdTAwMGXUjFFKccPf2JY5b83u1Ulp/9I7rNfU2vXDsNyXUWvCXtGWYmTGOSY0Vdrq0KJcZlFcbsRcdTAwMDeopdFcdTAwMGXss1x1MDAwYi1qxem/XHUwMDAwh1ogOL3aJOBYROErjKWwrp/BjqJFNsSOwvFcdTAwMDdHXHUwMDFkwYxjeCBcdTAwMDacXHUwMDFhXHUwMDFkyIXAjtJcdTAwMWN4LDbG1uBcdTAwMDaokJ7QXHUwMDAyublcdTAwMTNYP09cdTAwMDWLympPXfwh/fSIMVxy91O58J5cYi4/PvYrxsnNb2tWu0C/wTeptNdcdTAwMGVcdTAwMTStzsCfXHUwMDE3mLZug3M4Q6iDReBylos7xFx1MDAxMiEsyot9vFxcgUhwu0T+8Vo+O3JcdTAwMDfV8lx1MDAwZnOXO3qinf1ccjaK21xiS1x1MDAxYlx1MDAxMTJgllx1MDAxNLeYkS9cdTAwMDPNmFx1MDAwNGhcdTAwMWROQTSVpkb7MrhSSYNwL41xsZJoxFx1MDAwN/KgzYfsY/HwzPHS3sFT7WC7sZk52l6KXHUwMDA34SBcYrmKisB386BcZlx1MDAxMiFQp+BLXHRcdTAwMGVmXHKeVng+hcU+1dooS3Feh7ThO7taXCJcdTAwMDRrXHUwMDEyXHUwMDAyM4EovOSYn4XWNM544rBqqYCkRc2neFx1MDAwM1x1MDAwZorgOlx1MDAxZldcZpVcZlx1MDAwZppcdTAwMWLQjZ16My651FxcLN7OJFx1MDAxYVx1MDAxOOmhXCLRXHUwMDFh1VFGkOFxa0CSeKBcdTAwMTRSKkkoN6BTQfpcdTAwMDWAILl4rqXA7Z2jXHUwMDFhfF1wTXzae1ZAV2H4XHUwMDBlJ5uumHGleMf0cNCf5lx1MDAxOCvdM51DXHKCfCe0mFVkXHUwMDA0xZUuu1x1MDAxOdsv4Dly55bYfbnqXHUwMDFjXHJbV/fn5YpcdTAwMTnu7fdNZ7DWXnWya1x1MDAwMnDFuLVhijpAiXFsum2BUppcdTAwMThUjzguRrhcdTAwMDTRXHUwMDFhXHUwMDE5/jZcdTAwMDQ0XHUwMDA0VvtcdTAwMGJERni8qoIlY+Tyl6eor1wiXGLzVytHXHUwMDBlxJiDz3JJg1x1MDAxYlx1MDAwN2FcdTAwMTVfRompZdiWZYmA7tmPh8vm9eY1vzoo3NTL9j7rZT+ByVx1MDAxZO89OcYtxWyfQHDFakJcdTAwMTVcdTAwMTVcdTAwMDbDW1TJ5GK5XHUwMDExXHUwMDEwXHUwMDE2oLDRf4LHYIWU/nZBL02gmVx1MDAwMFdcdTAwMTP7XHUwMDA0fmE45Vx1MDAxOFx1MDAwZT/MOFxm//bzhN+Lnc5pXHUwMDFm7vWrXHUwMDFi831Y80a5sGD943b8QrdvrFx1MDAwMVx1MDAxMGre2Fx1MDAxMf3ztz//XHUwMDA31ZfTbiJ9 + + - - Hardware InterfacesHardwareAbstractionLayerControllersComponentsCommandsStateMotion GeneratorsLearning AlgorithmsApplication LogicPositionVelocityImpedanceAdmittanceRobotsActuatorsSensorsGPIOs( Real-Time Context )( ROS 2 Context )InputsOutputs \ No newline at end of file + + + + + + + + + + Hardware Interfaces + + + + + Hardware + + + Abstraction + + Layer + + + + + + + + Controllers + + + + + + + + Components + + + + + + + + + + + + + + + + + + Commands + + + + + + + + + + + + + + + + + State + + + + + + + Motion + + Generators + + + + + + + Learning + + Algorithms + + + + + + + Application + + Logic + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Position + + + + + + + + Velocity + + + + + + + + Impedance + + + + + + + + Admittance + + + + + + + + + + + + + + + + + + + + + + + + + Robots + + + + + + + + Actuators + + + + + + + + Sensors + + + + + + + GPIOs + + + + ( + Real-Time Context ) + + + + ( ROS + 2 Context ) + + + + + + + + + + + + + + + + + + + + + + + Inputs + + + + + + + + + + + + + + + + + + Outputs + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/docs/docs/getting-started/assets/system-overview-embedded.svg b/docs/docs/getting-started/assets/system-overview-embedded.svg index 0ea5a6af0..74df6ada4 100644 --- a/docs/docs/getting-started/assets/system-overview-embedded.svg +++ b/docs/docs/getting-started/assets/system-overview-embedded.svg @@ -1,21 +1,576 @@ - - - eyJ2ZXJzaW9uIjoiMSIsImVuY29kaW5nIjoiYnN0cmluZyIsImNvbXByZXNzZWQiOnRydWUsImVuY29kZWQiOiJ4nO1dV3dcIkmTfZ9f0af39SM3vdk35L33u3t0XHUwMDEwIFx0XHQjXHUwMDAxsnu+/743Sj2iqqAoUEM36pGmx1GQSqrC3IiMuPF/f3379r37clf9/l/fvlefy6V6rdIuPX3/XHUwMDE3vf5YbXdqrSYuyej/O62Hdjl653W3e9f5r//8z94nWLnVePtUtV5tVJvdXHUwMDBl3vff+P9v3/4v+mf899TrtbtONXp7dKH3i0TgJv3yVqtcdTAwMTn9Vo9cdTAwMWbppfXvb6h1XHUwMDE28Nu61Vxurl6W6p1q71xuvfT95LBVfnpcXL67OXLVqll46izO38/3fu1lrV7f777Uo011WvhcIr1rnW67dVs9rlW6139//9jrWZ9qt1x1MDAxZa6um9VcdTAwMGV9efH+auuuVK51X/BcdTAwMWF/f63UvIpW6L3yTJ9cdTAwMTFGMSO5XHReeIU/+v3yS3SZc1xcti44K7jUQqf2Nd+qt9q0r/9cdTAwMTBV+qu3s4tS+fZcbttrVt7f022Xmp27Ulx1MDAxYlx1MDAwZqv3vqdcdTAwMWbfWFx1MDAxOM6ks05cdTAwMThvTFxigfduwXW1dnXdXHUwMDFk/p5ONXoowlxiXFwyPPSu0CbuVis98YhePbnsXHUwMDFl7O++mvqRPX65XFy+rFx1MDAxZJ6Vit9/XFz/395cdTAwMTNrl1x1MDAxYdVVWrn5UK/Hb3uz8uO2Jy5cXNCFxbRAxoUyJi1bj/e7RyZU5ML81tbW0Wq9dDv/9H5nXHUwMDEyXHUwMDEyXFxqt1tP39+v/Ltvo1x1MDAwZneV0ptcXFxux6VQQsugVXi/Xq81b9ObrbfKtz1Rjl79979cdTAwMDZrULf63Fx1MDAxZKQ+Slxun6U+Rlx1MDAxOSmksiNrzzp386tLta66bz8+lS5cdTAwMTbXjsqbxd+pPZD+fP1xzPrAObfWeu2S6iNcdTAwMDVn3nPPnfGQV+Wnpz5asKBCXHUwMDEwXHUwMDFjRlx1MDAwYlx1MDAxYeJ9v/pI06cu3jjhYOP4jKjLJFx1MDAwNbq3q1azu197padcdTAwMTf7ovTqUqlRq78knn4k6bjbxdX54rfFylX1207MgtPVYr12RbL/vYxdV9tcdLXo1uCf3t/Qbd31rpbx+0q1ZrXdf39a7dpVrVmqXHUwMDFmXGb93fjG1ZV3U8hiT/Oi1KnS1eiJXHUwMDBl1eN2tdx9k+RcdTAwMDHKLK1ccumX/1ZmXGKUtsoq19OtPHUuVy+3XHUwMDFmXHUwMDFh7Sex+LpR2Dheu2qXj9ZmXFydJdfMOiOsgrBJ01OiN28oXHUwMDA081x1MDAxNs7FXHUwMDFibpXm01Nn7VjAPrxWXG7/XGJC9WuzXHUwMDE3jFx1MDAwYlx1MDAxOFx1MDAxNaudh+1cdLHNvCl3gPXlQtmez1x1MDAxZazbhUb58eZR17dcdTAwMGLq8DA4fV1cXF7ajrmhmfCVQa0sm5VcdTAwMWRvXHUwMDBmKuWz22J9s3G+V1x1MDAxYs1X/mvYuutrj2uVwsVqWN6qnMqzw8dGmz9PYN39XHUwMDA3vde+1+VG5UVcXO9sXm80atvNXHSs+1x1MDAxM5hh6LqhUznYWnmpny/IJ7FydHltz1x1MDAxYXOTwlwiXHUwMDE2Pkn1NPInsUhk6Vx1MDAwNpkvbWX65XfzZYWSXHUwMDFhXG7d0/c888VPSlacbm00XHUwMDFlNraqJ8er5va5aWfdfFx1MDAxMd7A7eZcdTAwMGWG2ivfw15v9ktcbuaslc57I4NN7Wty1ktZ5mBEtVx1MDAwM0T3wulBWIRcdTAwMDVpddBOc8c1N7JaiFx1MDAxObm/4YlW+Fx1MDAxMlxciN5Wf7tcdOvpzt9cdTAwMDIpf7zy7979XHUwMDFhXHUwMDEz1mg+hm7Enlqp3Z2rNSu15lX6I9VmJeNKvdTpzrdcdTAwMWGNWlx1MDAxN9vYadWa3fQ7onWLpOTX1VLfvcDKmdfuaLnko+n917eesEb/8/7f//uvge/OXHUwMDE0XCL6XHUwMDE5KD69XHUwMDE1/4r/e3w7XHUwMDEydPrlv+2I81x1MDAxY2GN5r035JmRhdqtOdrsXFw0rl/Xy5vHr1ul9WMz62aEXHUwMDA3ZrVC9C+cXHUwMDAzXHUwMDAy6Snmm1x1MDAxOVGcce6NcIpcdTAwMDfheXpns2dInFx1MDAxNJZLzmdcYlxufdmRP9+OOJt++Vx1MDAxZI84XHUwMDA3ZG7CXHUwMDE44ZSuPi/K+93S+tlrYzdcdTAwMDR1fLzE7z+BIYHFNFxiUDhcdTAwMTCY6DMkXHUwMDFlYSx3xjhcdTAwMGKjKj6BIVFGapWfXvwyJF+GZHKGxPDMJKtQwVx1MDAwNW6sXHUwMDFlXHUwMDFkkcxcdTAwMTV3LuqnLX93UVx1MDAwZa2FZV9cYp3j8icwJDZcdTAwMThcdTAwMWSMVLAkvver31xmibZMXHUwMDA3XHUwMDE5gpbw9FLOviFcdJ72XHUwMDE5wldk82VIJm5Ihp13mpCZ41x1MDAwNUqGXHUwMDE3XHUwMDFl47izs/my+rJzoZ6bS7Vucf9iY7vV3Z11S6JcdTAwMWPTkkvAXHJBXHSRXlx1MDAxNv3Nklx1MDAxOMO0gPxaXHUwMDE4Xa/19FK8nlx1MDAxOe3w8CUlcFx1MDAwMZJ6R0fvlsQy2ofWXCJI42RQsdPZXHUwMDFmZkRcbqm9p4g0x440N1x1MDAwZp7EwtZld+36aOW2tF5+rT3Nx+3IXHUwMDEx7sVx93Veda+WNviGP9o630y8YWbSxJM0OVx1MDAxZvLHXG5PJEuHVIBgQXNHV6K904PWc+PYPFx1MDAxNuYv60uN2u5la3NltpXIO8G4XHUwMDE2zijnhVxiqWOSIDRcdTAwMDNcIlx1MDAxMcDzQdvpKZBzXGbG01xiJVx1MDAwMyCB9Vx1MDAwM1xuXHUwMDA2gmZGeec89smhYi6tP1x1MDAwMFx1MDAxNojChMrVn6NdvlF/3Vuab5ZMca22vLW/Llx1MDAxN3+tcJvg41x1MDAxMeWXP1x1MDAxZPjuvkee9+lMMZr8atIxeFx1MDAxZO6CNcLhefLc5YxkSlmnvFx1MDAwZl4qLbWZ5nqcXHUwMDA1XHUwMDBijVx1MDAxNTo6LsHb9Jhft+fE+rdnuTK521x1MDAxM0xrOvg00nE4x+TdY1x1MDAxMH9tjVxmXHUwMDBlgF/pJDBcdTAwMWFBNGKCNFx1MDAxMozKsv8hZkdS5t9K7YzkfvRorFDyW6s7rlxcVPWTe0R6stJe6WSY/+tS+fqhXZ1cdTAwMDFcdTAwMDfgNZN4SDZcdTAwMTI6rpMgKijDIFxuXFxcdTAwMDHgXCJeXHUwMDFi5lx1MDAwMvAoy/InojGOqFDgXHUwMDBmpEZcdTAwMTn4nH5cdTAwMTfAmaJDdMBtyLNcdTAwMTTc8z5cdTAwMTAlgMNcdTAwMTVJXV4wNjknMOlY68s3ZMVaWVx1MDAxMlx1MDAxMn26XzYmZVwiLE+/+p6xIUMptbWjXHUwMDFmRb8+++tccu1K4XDr4Hpxa+t896S0NPs2QrFcdTAwMDA4LuBPouq3pI0wXHUwMDAwicJJSckt7mNHTJO2XHUwMDExWjFhOEAqXCJcdTAwMDNteSzjXHUwMDEys1x1MDAxMVAjRUJcdTAwMDDAqnxAjNhnIzz2KZTPPUL6slx1MDAxMZ/ORmRKSPTpftmYkI1AgJSZioGcIXjyY+RiXFy9u77xtPHycntXfT6wXHUwMDBiXHUwMDE3jYuH49m3XHUwMDExhilnXHUwMDAwRZ2CTeTJ6vNcdTAwMTBcdTAwMTBmXHUwMDA2Mt/WO6X8VG1cdTAwMDTV+mNcdTAwMDMwSFx1MDAxY1x1MDAwMHOQjZAqXHUwMDE4g+BcdTAwMWWbXHUwMDE1wnnbX66igFwiXHUwMDA0Npx3OvRlIz6jjVx1MDAxOCwh0af7ZWNSOMJn41xioSVcdTAwMDIvPbqJsHOyU18t7e7PXHUwMDFkLyzNra/vrL5cdTAwMWM/zL6J0FRC76ibgKxwb5XIRDjJqNxcdTAwMWRBerBknKdcdTAwMTdqSOYkdcpQMMutXHUwMDE5XGIjlFx0XG5cdTAwMGbFXHUwMDEw0nS2r1wiV8CJXHUwMDAwR8Q17MtAfPszXGZEpnzQT6FPNMa0XHUwMDBmw+v2pVLpl99cdTAwMTNcdTAwMTLKW1x1MDAwMywxep2JuL25kbWH2sXR5pGslopbR1x1MDAwN4uHs52PdiYwIYVcdTAwMTVcYuNcdTAwMTFsuL6yfclcdTAwMTCCiKiU1Fx1MDAxODm9lDRcdTAwMDBLXHUwMDEwgVx1MDAwNy3wR8Be9Vx1MDAxYlx0K5h0gYBcdTAwMDJcdTAwMDBcdTAwMWX3uj9cdTAwMWRcdTAwMTGchVx1MDAxOMHa5Vx1MDAxOInNV7XePKhvXHUwMDE3L+5V6VWe+uWt5eNcdFx1MDAxOVx0kW8k3j8z2er3vv1P+ZBnuGYpnalZQkGX8aTGUK3i3nKtXFxeOH3x95vb61x1MDAwN/cldfnwW9tDR1EtMl3aXHUwMDFh+FinpE33h3rOXGbwu0Fw5JzkQ/zvzza4cc84t46aWrx0Ulx1MDAwZcj1XHTNnNfCh+CMdNaofoiOr2FMmHXdmlx1MDAxMek3XCKzocJyg3ts1OjC/2JcdTAwMWVXy4f4e+/RdTtb6927vY0w28LvZWDAO/ieXGL9heLpdlxuRK9cdTAwMDCgwntcdTAwMTEoqzfF7s5cdTAwMDAlVPDl+NtYa53uXHUwMDE3fsWcXHUwMDAyTKaKXHUwMDAxIaVcdTAwMGZ9KSx8NHBcdTAwMWXv4PuS/SG9kFwis1x0QGhFnTZjNFx1MDAwMdTskbpcdTAwMGWXXHUwMDA1PJuTl9PGvGuZUmW2Zd9cdTAwMDXDbIDY485cdTAwMWJcdTAwMDU8kpJ9p3FZ4cFw/KeKJ0xnUfaF0d5cdTAwMDTHcyOvL+EnKVx1MDAwYjqTXHUwMDE0Q6hAhVFjZCZcdTAwMWaq6mq3VN668uVKca7+2l7elLOOeixcdTAwMWRdXHUwMDFiXHUwMDBis09gg6fr1iGTRjtjXHUwMDE0LL9cZmp65abOMqkh+cBYTlJ82S/72jHgLy1cZpfQXHUwMDBmqG1a9qGi1lx1MDAwN5vb4/9PXHUwMDEx/beIY4DY47Fm11lcdTAwMDdq1qDc38hyPzxcYprVdJuVXHUwMDEwbeBnZVx1MDAwM7daps2+9oxKsFVcYjpcdTAwMThrplx1MDAwN3mUolZWp4GsQlx1MDAxMHaA4COqh2Ny0ENcdTAwMDVwpuNMJO/VXT7AKVxiNVx1MDAxOPJMP5H2/plEjDyQVCUmOKdaPFcrtvbQXX9YfVjozl/vXFxdTjdEjj3GRJYu9q1/0CytjpAkojvaKj/QLeBcZjKnRNBeSjpodypW0/P9qnRcdTAwMTdJXHUwMDE1MzxwetSGO6mU7buziVx1MDAwNGHWpoZcdTAwMTNOxDZV4LCqwOwyajpcblx1MDAxMjv0g3ZcdTAwMDXpXG54m1FcdTAwMWF/dN+mJpybTFx1MDAxYqbJpicz1Il++lx1MDAxNam32l/xf4/LXHUwMDBlNKxcYlwiWHJpY5jTwVox4+ZcdTAwMTRcdTAwMTJNLW5cdTAwMDZcdTAwMTKmXHUwMDAzXHUwMDBmLlx1MDAwNSS4kVxmj4TYRiRcdTAwMTRkisWyxjLYbKghcYJcYlx1MDAxNzt5XHUwMDFlQlx1MDAwZlx1MDAxNJRz8Vx1MDAxNpdcdTAwMGZcdTAwMWLPX1fQ3dvVR0h/Vlx1MDAwZVx1MDAwZXa+J15cdTAwMWSd7KdRq1TicDrJ95OHXHUwMDA20lx1MDAxNEDJnUyC+mdIU1xigt1s5lxm2FxmgEo9uqKur9nVM3N/9HRcXPRbp5dmZ+dcXP1W4oxcXCVcdTAwMDWOZ0D6jlx1MDAxM6DXOpbRfdNShMJaWmWJXHUwMDAzz9ow8yR42KV3sCq5x4xcdTAwMWLVPXtxasp3oXVZPDjZKajX3c/csZFJU1x1MDAxN+9RSHdsUMbYxYs/81x1MDAwNHyjsP/4tN8pN9pX7lSu+v1Hdbkx21x1MDAwMa1cdTAwMDBoZzo6XHUwMDFkXHUwMDAz5HFKJavx4Fx1MDAxNFxmc54rZ1x1MDAxMe/qaTZQ0omBNcEr41x1MDAwNVx1MDAxZExcdTAwMGUotVx1MDAxOcBTRzX4JqhcXFwimM8o0T/nsopcdTAwMGbdVqPUhUB/26+2XHUwMDFm4y7qXHUwMDE3kdVlb2DqjHVKZZfiXHUwMDBiXHUwMDBi7GXppHVkxX7evVufO5xcdTAwMGbFufnju5d12zks2NKsK7ZcdTAwMGbQXFwjqSeCtDzFQCm4ZVBqXHUwMDFkbFxi3sVL02aRslx1MDAwZT5LcudDRsDe0/ODyrHeL91cdTAwMWbY291bfVFtmaVqu55oZ/xFhuD9N06WW65vo7+r1VH4zFZHoYhsXHUwMDE3mGj0VPDSY3mn+7LUuVldMEsrW6/39eOn/VlXMKC/IG1UWFx1MDAwMnXS6Vx1MDAxM3BhmUUsq1x1MDAxZGVcdLyffVY1YnvmXHUwMDE2XHUwMDFhmJdcdTAwMTD+hUr2xT3wp3BcdTAwMGZkWlx1MDAxMikyS2kk555bOLAx2Fx1MDAxOecugnttvFx1MDAxNP3iYvWy+qRcbq3K9sxbXHUwMDEyzZzBjXBcbuFcdTAwMDZPVrJSuVx1MDAxOFx1MDAwYlEvjOeCYPjMXHUwMDFiXHUwMDEywZWEydN5xTRfduTLjkzOjoiQfTatg6d2kdFcdTAwMGIzXHUwMDFh9XKru7krgrht1Zxrn67ON64/gVx1MDAxOVx0wiC08Vx1MDAxYyF9OqcsVNTOXHUwMDE00d06XHUwMDFmXHUwMDBmsGfVjmhcdTAwMGXMr00uXHUwMDE30pdcdTAwMWT5siNcdTAwMTPEI3JY6iBookhcdTAwMThcdTAwMWSPXHUwMDE0XHUwMDE2bvdcdTAwMTdcdTAwMWUvjp7au8cnXHUwMDBianGvuHI566RqZEg8XHUwMDA3XHUwMDEygakghu506kBcdTAwMGKmgjRWOiAz81x0aF6FVEorXHUwMDE3P0f7siRfluTb1FnVpMpcdTAwMWWDI4W0Vlx1MDAwND9cdTAwMDYnyOnpy8lZbf5urtgqVE73jk5cdTAwMGLiKKuXd1aMiZVRXHUwMDE1gdJEXG6tvOvjVeNcZlx1MDAxN5w3nFx1MDAwYummWDI3XHUwMDE5XrVcdTAwMTBcdTAwMDI1XHUwMDFk5kGSYvP6qFXbet7bvOeLZuly7vnhPMGadvfwfHLw2rnfWll8XFxW9Uans92IXHUwMDE3/cxOJvO3XHUwMDFm0tnsolNjgFx1MDAxMMfphr+xZ436yc71+dbm6+3h5sbJUaGx+OuKRfiHdMhpXHUwMDAw++CFlFxuf3GZXHUwMDAy9pLqdIzRiHJgUORcdTAwMTSpXHSxXHUwMDAz5olcdTAwMTWHXHUwMDFiXHUwMDE4r2DUgF6bQcOkXHUwMDFjNYXojHzAL1x1MDAxNNVxRo30dvWR07fj6sW3OXi3Tua5W716mZT2yZy6XHL8xZM4b8usjpWSZ9OZSyf9WFx1MDAxZFx1MDAxMcPPRma1mlx1MDAwYuLNjKTIOurhTGfwdCBcdTAwMDI17WhQVoLbd+KAWXDGJdFW4aEor2LdXHUwMDE5vTpcdTAwMTHBRNBUoVx1MDAwZVx1MDAxN4c92b6mXGJcdTAwMThcdTAwMTlcdTAwMTOyuMxntTj25Oz2ulVcdTAwMTTmgK/dXFytLepcdTAwMTXcXHUwMDExO/7J2YdMxIjFscOPkb8l6lC5ompcZuiW5pqwiIj1jf9diKqZtNJr4y22XHUwMDBm7GT67u1ky2OpOlbTmFx1MDAxM3hcdTAwMWJcdTAwMDUxNtL0b1xuXHUwMDFlQlx1MDAwN+dcdTAwMTTpXHUwMDAxVTf27elcdTAwMDOBQ9r4/MpcdTAwMDLZQrZO0U+/No1cdTAwMTk9ZKFcdTAwMWWXeSqiOEXeY9QlXHJWjVm3qYjYmfRAPFx1MDAwMkgjqFx1MDAxNOpcdFoyXHUwMDE3NN31IIhcYmh6oIdcdTAwMDNeXHUwMDAx9GhFbERcXNuRSmRFxGFcdTAwMTZ0xmHqXHUwMDFmXHR69lx1MDAxNvdcdTAwMGa+XHUwMDE1d1anVCmbXHUwMDAzXHLSSKh/N1MvO/JDXHUwMDA2u1xiXGJcdTAwMGXloMY4g5jfLq6rdm1Lrlx1MDAxY1ef/MWivj5cXJ09tZXMKipcdTAwMTGksMBK7mLpt0iPtVBMWc6pXc46l1wihfbaMcAnXHSJ9Vork9roXHUwMDA0oZFh3Fx1MDAwNEuN/lxue1RcdTAwMDPCfyWY45ThxVx1MDAxN1FGKt+HjLBBT2xCeeH/9n5hrXtXf60/XHUwMDFl7V6Fo01j7EphQmnCv9NTP5EmnPrIRZ89KVxylpRYTNxcdTAwMTiHcZe7r25zrnBT41vn1efG0m758Lb2XHRcdTAwMTWBcypz4zSIXHUwMDFjTi1FmeFtYFx1MDAxMihCUVx1MDAwNY6aXCJfXHUwMDA2zXX3xtFcdTAwMTRYrbRVXHUwMDAzSsmlY9QszSHrTtJ++lwiXHUwMDA0uEIrZG6l0DT1YFx1MDAwMunySYD9Py1dXHUwMDBlXHUwMDAwT/2uwLpcYlkhrT2HRT9cdTAwMDXHrOaKXHUwMDFijXfgolxyuetlylt0lVx1MDAwNlxuXHUwMDA2rKiFXHUwMDExVMqdt1x1MDAxY0d4YaxcdTAwMTBeOU68M6qvY81pq6VcIspOXHUwMDBlWD4mXHUwMDFhzzJoLpvvx2r4MGfG4NtT23VTXdg839/qdu9X2q1m41qsf8yepVtO3j9XaZGgTdegwVx1MDAwNjDAXHUwMDFhYUxwmnuRbI9cdErD71x1MDAwNyFcdTAwMTXNeUvQYk7atXvmrbHakUzweKd73KKRXGbCfUf92n7ASFkhpYOk5lx1MDAxNS19mbRPZ9Iy5YN+XG59ojEhk1x1MDAxMVTm0Vx1MDAxZlXoWCvHYPpuNlx1MDAwZVx1MDAxYutcdTAwMGKtK9FduH9Z5UeN0/Zz1pDHmTZcdTAwMTkwXG7Ufa+spqY5k8JAXGJcdTAwMDaIXHUwMDEznPJeXHUwMDFjJjektjrBplx1MDAwNM9cdTAwMDRcdTAwMDSBeGOif1x1MDAwZopcdTAwMDbgapShQ1x1MDAxNSNodHb/WSBccjpcdTAwMTiBN+nLYnw6i5EpXHUwMDFl9NMnXHUwMDE4XHUwMDEzMlx1MDAxOFwi2OyoyXEtXHUwMDEwlY6RPjh4vjypXHUwMDE3XlRZv2wsrpndvcOC/KDJmGbUZFx1MDAxOG5vXHUwMDAwpMONXHUwMDA0XHUwMDEwjIljZDBcdTAwMDShXGLHXHKnQbA+3lNcdTAwMTJcdTAwMTlcZuqiXHUwMDA3xnCGXHUwMDE4XCJcdTAwMDSfXvpcdTAwMDDxXHUwMDFhszT6JohAam9cdTAwMDe0MWnBXGZcdTAwMWSKQjSAZ0Vs6sh7h4WNiLF8Xtz0eLB8eyxPzdLa00lp/U50/LJ5+TJcdTAwMTmzbDJcblx1MDAxNjhcImjIXGKNgVO9LHF0XHUwMDExkuFoXHUwMDFjn6Z6XHUwMDFmTiFD7npcdTAwMDGBXHUwMDE4rIxG8CSJoi957ODJUSrjqPfcXHUwMDEwxlx1MDAxZWV/XG5cdTAwMGZQOiW8JNqV+HqaUlx1MDAxM1x1MDAxNmpcdTAwMTiCNo5cdTAwMDebt5yhQT88eFx1MDAxZIjWWFiZ2J6yXGZcdTAwMDFcdTAwMWQwlfMhyrjlLec0o1x1MDAwMUlcdTAwMDE3T9JcdTAwMTCUhMFcdTAwMTVcYjotXHUwMDE3ypPySeKeyN1cdTAwMWRnlFFcZl5FRjw5XHUwMDFjXHUwMDBij8lwyVx1MDAxNVx1MDAxZFHh9srcR/FTw6KGzdzkQ5rooG5cdTAwMGVIKVx1MDAxNlTlXHUwMDE5/JVOpX6wxG9cdTAwMTebZve10lxc2eCtys2nM/jcXHUwMDA2Zlx1MDAxZI1cZuN0jCiT3JqBW6ZodFxm9ddcdTAwMTnhp3fsIzX2XHRRpKJAw4XxXHUwMDAzXGY+lcMoro2SXFy8jVx1MDAxOO6z+NTC5G1uouxcdTAwMGYy+Fx1MDAxZtaGYS2luIvaezFGkuW20jq9fFi8OCvXmzdhvdF6PlPFT6dccsJqhudcdTAwMDBcdTAwMDOroVx1MDAwZmnaNY/YXHUwMDE1XHUwMDFlgCZcXHt4nmGDUH6anYFR3aR2NnJeWlx1MDAwZVximGCmicyIWtVcdTAwMTSi29BfPSngq2z0Vb/UYXgo4E02RZZx1Kkrx5jsfrYv7Vr1fn/tfK6jTy/b1fXOy+Ps6UKqXHUwMDAwQEjOaFCsXHUwMDBikkZ48GR6karKmCBAoKNcdTAwMThtislcdTAwMDKnXHUwMDE4cFx1MDAxYpdGXHUwMDAy+1Od5Vx1MDAwMOhvXGJwuOA0XHJw56Jf9IOLeOVy84uTXHUwMDEz/d9QNvCnY3xBob8jslx1MDAxY1x1MDAxYYhcdTAwMGVRSJ4+eMYlwUrprVEwhPnrwaxcdTAwMTLaXHUwMDA2zqHyXHUwMDAwoVx1MDAxM4ctfUKVXHUwMDBie/FcdTAwMDFJxbZcYkQ8cUDZ1HJCarhcdTAwMWLOIzKNUVA0cI0zXHUwMDAy+Ieollx1MDAxM6uJXHUwMDAw7ZPRaHhEIU7mg3JcItOKXHUwMDA2uGpcdTAwMDTTiqroXHUwMDEzN59cdTAwMTlqwKDp61x1MDAxYT9SjUs2mD1OTWenVVx1MDAxNGJcdTAwMDEvxuGCOS9dlU/23eVcdTAwMWF3+0s7V+7xtO1nfi5rNOrE0FBcdTAwMTFH8ZNP5V1cdTAwMDOAbPCSzqWh/XaKLE8uMOe4XHUwMDEz3lx1MDAxOUr0ylx1MDAwMUc1nnLIgNXKaVx1MDAwYmwt+02pgU54XHUwMDA0cHlVXHUwMDE4f1x1MDAxMIr4p1hYjfBOSFx1MDAwYptIgXtwybSCplxcoDNk42xAuJCb9NBcbuiZOIm5UZHvTthXT1OlOVx1MDAwZipoR2VcdTAwMTn5Q7xcdTAwMTknJlRBfPNEW5ssXHUwMDA17Vx1MDAxM9xcXPOvXHUwMDE0ZXE4XHUwMDFkXHUwMDFmXHUwMDA3WNresFP6IfRjXHUwMDA17L9TQVx1MDAwMTi4cStLh8RaLlbc3Vef41x1MDAwMlU5jtGW9vrcvdjl/lxcP2w3XHUwMDBmXHUwMDFhpePWwd4xn32TKFxyi5KxXHUwMDAy5kjw1HAoXHUwMDFhIFx1MDAwN1x1MDAxMeM0lctAQqZcdTAwMTdaSc141FTmNFx1MDAwNEFcZsws4z1aQECER4TlVLyu/z208l5TyXVei+tcdTAwMWZkXHUwMDE0h0r/0EJNmrGVqVx1MDAwMJB9aKNcdTAwMWYjvjpcdTAwMTB7oX1VmKuvvSw+LnfrV0t761mTXGZmR1x1MDAwMaRcdTAwMTJMkKpLXHUwMDAwWqF9Slx1MDAwMWB/gFx1MDAxNrRcYlx1MDAxNqhMT5O/StOgXHUwMDAyQ1x1MDAxNVx1MDAxOFpcdTAwMWHg1n75XHUwMDE3MPySksyGOlx1MDAxMHj/yVxuTG40dOt3Jlx1MDAxNkYozHz/zFx1MDAwMFa4rcf73SNcdTAwMTMqcmF+a2vraLVeup3vNTUkZPuDrHDTL/vMnjcofFBcbpHJXHUwMDE4pHArur3eeTkpXHUwMDFlnlx1MDAxNV9Pdu5cdTAwMDFgdq82Z1+rqHhSOIXbLlx1MDAwM/VcdTAwMTEntMpcdTAwMDdKpFx0TjP+8GT0XHUwMDE0K1x1MDAxY1xirGiafopoz1x1MDAwZWx31pzR8Fx1MDAxMCrOJua3XHUwMDAxPlx1MDAwNTtcdTAwMTRcYnT/Qdnrf1xu0C5kysfb1ZRojFx0PTNcclx1MDAwNM9Oa0rEdDIxNCfPQFx1MDAxY22vXHUwMDFk4i33fO1RN9f3jXra2PlgXHUwMDFk5a/EncSuolx1MDAxMFx1MDAwMUM+LUKJVFx0lMKdhyOj+UIwmW56objRVLwpLUJcdTAwMTlcdTAwMWHVlTFCiGvqL+TSO+tcdTAwMDdcZi6mI2Av81x1MDAwN1x1MDAxN39ZiE9nITLlg376JGNMXHUwMDAzMTQ2zWyiclx1MDAxMDbh5Vx1MDAxOKHpzdNcIrTwvGS2XHUwMDFhT5dcdTAwMGJ3xd3S/tPZzJtcYnhdOvmgilxmoVx1MDAxMZ2mTv08nYFTMkNYozSfXHUwMDFlMqfO16ChJIg5JZWHXGZcdTAwMDBcdTAwMTEhqmyxXHUwMDFjQqBcdTAwMWRcdTAwMDKn/nSds4hslf4npes+5Fx1MDAxY3W8r6yPeVxm4b13Yoz6P9E84zfLYnNx5cTah9f22sbh6+xcdTAwMWb6SZqXbrySWjn88ameXHUwMDAyXHUwMDBicbPeXHUwMDEwWZOmQ9DpeUfOop5fXHUwMDE3tZpcZi5cdTAwMTCGgYRcdTAwMDHU1lx1MDAxMU5GXHUwMDAwm5Z8XHUwMDFidNRcdTAwMTP+deT3eb1g4t1cdTAwMDVhIZxcdTAwMGVG11x1MDAwMbtpYOfclLEwzGhcdTAwMGbrqKWhmvZkWSClIGmwXHUwMDE2ZS7oUD+/7k5cdKYl4CF10zrupPfpXHJazYWmXHUwMDA0NSVUco8g0+slVlx1MDAwM1x1MDAxNMXWXHUwMDAyj8azQeOszFtcdTAwMGVxXHUwMDAzsXZcdTAwMTJoXGLEh+JcdTAwMTNnhlx1MDAwNVx1MDAxZPX6WsS9sGVCKZubwVeBwadcdTAwMTiaXCJOvZHJXHUwMDE0eUEqXHUwMDE2nPOCZm5qOsHKW1x1MDAwZVx1MDAxZnBcdTAwMDAsXHUwMDFh34WYpbVM7q9PpfPWc0wpQzRcdTAwMDTKKkWTXHUwMDE0fm65QmDcXHUwMDE4mD1cdTAwMDRcYs5cdTAwMDSXun30dfG64/5tXssoVaRcZqDJwlxc+iCMSD9cdTAwMGasR0NulFR4aIFoY8fSh3FrITOPaKXKPo+g42dcdTAwMWFVOnqzzEJ98bmw1disVa5cdTAwMGV3bu1rYVctz/yATdxcdTAwMDPojlx1MDAwMoyCWVx0jotcdTAwMTTfhfBUXGKmXGangmAxxcSRMlxmSMNcdTAwMWL85WCS4j35ycxcdTAwMTGdqSlcdTAwMDM9V7xcdTAwMWb1wYN7a/I7hP8g0PePcYnwgdZcdTAwMDDW0+xgTaV+SVx1MDAxN1x1MDAwNEElseGc2Plg+fLrTJiVxmvBXHUwMDExR1xurkPSR1x1MDAxMiBEbOElgj/qSLa5Rlx1MDAwZjuw0SxcdTAwMTmAL8NDSHYww6NQzypcdTAwMGZcYmtccvmNfFx1MDAxZiSZN0E5XHUwMDE1ndDBfaWMKFGJXHUwMDE4R181eDK2uUY0W8Xe7iBQXHUwMDA2or9Ap1A0Sd3kfuOoSVx1MDAwNp5cdTAwMTX2QVHPbeJcdTAwMGXS9lx1MDAwMpdcdTAwMTKWXHUwMDE0wFx1MDAwNU583IalIcF6cJlNjkJR76+yY4zyXFx9de3ruVx1MDAxZLV8f7lcXD1Zet5ozVx1MDAxN+THXGa3SL0+1WhdM+KhXHUwMDE0hCdEfFx1MDAwMvpbXHUwMDFiNFx1MDAxMKBccpKO+KnWaGp2XHUwMDFiQk+4XHUwMDAw+ID6O8KAUzTLIJ3UZk/cjdybvmp1QSZbe/9cdTAwMGLTeb8uYlx1MDAxOSrimeyGlmezgUNxqTJvjOKxoFaWzcqOt1x1MDAwN5Xy2W2xvtk435tBJpO+jLVikCtcdTAwMDVcdTAwMTNcYrGJMUL8PaCELKqlQfTAmVNk8IVFYYgtqD9cdTAwMTjWXHUwMDE2MYbtl3Fh4E1gjFxycVRcdTAwMTDRTJ+MUzSPXZrBbbszS294XHUwMDFm/F179fxKPVx1MDAxZa3Jg3InbFdWxz9cdTAwMDKWYyhMXHUwMDE2nplcdTAwMDSPoLNcYqBcdTAwMTGpXCI0gj9cdTAwMWREbkheXHUwMDBiT5lTgbcxVvTd2IlcIqnfyjAoqJJdc6qA8JRBTVx1MDAwMVx1MDAxNqiXXHUwMDAwXFxQ3pDR5sbmXHUwMDAyqkK2pkSX6Vx1MDAwNErKXHUwMDAwJ8CJumOEOmVhqLRZXHUwMDAy4ShNXHUwMDA1+SnIl1a6MVx1MDAwMUZcdTAwMTZcdTAwMDeiXHUwMDE40lx1MDAwZu08TSBQY7AgXHUwMDBl1KBZt73UXHUwMDBlR15bS6OsinujXHUwMDFmXHUwMDBiKERiuO1eU1x1MDAwMeFcdTAwMTSpZY2jlnjqx1xiISpcbui3vVx1MDAwM1hcdTAwMTBcdTAwMDN2XHUwMDE4XFzgg8PAX4hcdTAwMTQ+ZPg+xoLYumjF7t9EKVx1MDAxMHPwQ1x1MDAxZlx1MDAwNWJyK1OlgY4x1KaVlSq26Lh79JP94bVQs6qr0nlcdTAwMDb8TDWlXvH4uJK3gjrDvLZcYjwtxbLT01RLXHUwMDEzXHUwMDE1lPVUXGaqiHF6XHUwMDEwXHS0g1NBtO0jXHUwMDE2LVx1MDAxNz/Z61x1MDAxNZTSR1XGyNVZxUnt5qHYWnxcdTAwMTLFg8OXcHtcIndvuJybLZw0vFo0hpNcboJRr1xmXCJcZqW8JZaxWPa7x7dsqITHRIDKKddfhThZXHUwMDEyaOKmJq42K1xmXHJcdTAwMTFcdTAwMDPSUH7AtlxmTSyIXGI/NTFcYvL+bU043zVViIZcYl/ja3on4P28XHUwMDEyyUJ9mFKKq7mQ2sHj5SfRXHJngEnAvpy4XHUwMDFlrU52kfFcdTAwMDD9NVx1MDAwNFxitaacQS4nXiEwXHUwMDE4XHUwMDFjoGg8XHUwMDEwXHUwMDFiQuxcZj5ar0/VJ4TOZHbOXlxifFx1MDAwMzuOxVx1MDAxZqy3s27xoZeMZDzAvXFcdTAwMWZSh9WCoJtBmGNpLICf3sA9K1x1MDAxOUBcdTAwMTaguVxyUnlcdTAwMTlLMr1cdTAwMWL8WD/x+0xtXHUwMDE3XHUwMDFk7GV0XGb8kdhsqdUuV/+nuV9tdlpZgzl+XHUwMDE2o+VglzRGy9jSSFjth6X5WFx1MDAwYlx1MDAwNOfZ/HRwJDQhfvTMbXmrfVX1l1x1MDAwYlx1MDAwZi2/tuTm9u/bV7VGhvqW261Op3Bd6pavx1bhSqlz/bNcdTAwMWN1SVx1MDAxZEZcZslcdTAwMTDTwlxcadJTkzx2I1ZeLYkkXHUwMDA2sZdKNCNO/NiNxnNK7elQxcKfXHUwMDBmalx1MDAwM+Jwq0KGqMFXJlxu4XozvCmJKzJmZv5+6ulxdP1DXklIkynXXG5PXHUwMDEwfnCMhO3dUqW0w62tLV1cdTAwMTd3zs5KutnayOr2/Vx1MDAxObmeuGuyXHUwMDA2sYhcdTAwMDVIXHUwMDAzPqNcdTAwMWGE1MwoTqdcdTAwMTJGUepcctKm3PSiXHUwMDEx6Vx1MDAxNVx1MDAwMyhxVG9hNbeDopGBiVx1MDAwM63o1OpcdTAwMWaUOCje3dXhaLpcdTAwMTDYb8vt0t31t1Kz8m2xUutm+qopXHKRXHUwMDFhbSdTXHUwMDFmpyDi6fv05DcngZDHSP8tqt3r48WSK1x1MDAxZVVXXHUwMDE2b29Wzl5cdTAwMWGNLHas2dJk7Zi0lHhFQOBkqk/VXHUwMDA3Slx1MDAwMFwiTFx1MDAwZlx1MDAwMP9cYvanyIBcdTAwMThcdTAwMWNzREVcdTAwMDH/ZIRybtDpi1xmRGihg+JwTyHIviPGXHUwMDAw78VVLlx1MDAwMeL+/MND80q5neuz3YuOOJzf81x1MDAxN+o3XHUwMDFjME7MXeVhsexTRkGkS/D2I0u6Ulx1MDAwZmLuauH1sj2/vmHnl0J56/X0U0i6VVxm2MZcbip9cC5Fdlx1MDAxNbiH/Fx0XHUwMDE5nUByOcVMt2CcS0NcdTAwMTVcdTAwMTNSYDuDXHUwMDFjVmBUb1x1MDAxOKJcImTKs/U5MO+dTp5PTFvQZ1x1MDAxYq7lyH/MS/b1heFhXHUwMDA3MVx1MDAwZWi72dq93FNn5ijUl1x1MDAwZm6b1f3KwnrhsyhcdTAwMDDnwGaBXHUwMDFhXaROXHUwMDFl9lx1MDAwNKeIwZOORfGIlJpeKclENEAghiRmroyzny9cdTAwMTVIqoDQmSpAZdSUTFx1MDAxYr33Q3fcXFwtrHTt0vP1y/qrLZ00XHUwMDE29axn05zRzFx1MDAwN9hMzyOqtJCUfitcdTAwMTlNb0aES2fXbnrMn1x1MDAxM5F+9SPa+Vx1MDAxMv6c0m9lM+VcdTAwMWW/X1NcdTAwMTHh6HLf3j9bX6iu1bRcXGheby6p56Vuq/VcdTAwMTksv1x1MDAxM55cdE+kcsStqdOjVEjejPDU66BtcEPIaIJcdTAwMTNlOVT2/6NkKv7ycmDhN2JcckGE0lpRP8pcdTAwMDCAr1x1MDAxMcxDJ1x1MDAxMHhcdCqx5f1cdTAwMWTBXHUwMDE2QVxufFNu09NnRPix2/5HV3hcdTAwMGJLdCtEPI5/XHUwMDAwcCfOkzjj1ItcdTAwMTOk917BKieafzPXXHUwMDAzflx1MDAxM1o7o6goiSdZvdIylbdcXLag/liOSLpcdTAwMDJcXKajXHUwMDBl2UlxXHUwMDE3iPg8wLSlglx1MDAxYlx1MDAxMONcdTAwMWN3Pd/u7V+urm1uPCzNvy7WQq1iXHUwMDBmso67ZsxQWVx1MDAxYXhcdTAwMWIoU00jWlJcdTAwMTA1OMaDwq2wWmCxIbWgP2OoIE7UdVx1MDAwNSUm5vlBXHUwMDBlWlx1MDAxMLNcdTAwMWH1zELcqIg+XGYwVI663mRurfOXoZphQ+WYXHUwMDBlgVqNgqFcdTAwMTZzYcb7uGdcXHOhaE41oi1jU82UxIpJ9KuwJIjm85s9M1x1MDAwNfNtuT6ZXHUwMDFj0zLlXHUwMDA0XHUwMDEwMrNa0lx1MDAxYWHHa1x1MDAxZW9try6VnyrrO92DlaM5XHUwMDE3Ls4v57NySLNcdTAwMTNAOMcoLaxtxFvkequ85Y9cdTAwMDJT1J0jXHUwMDA1fFx1MDAwM59cIm3CRFx1MDAwMlxia4hTIZ/R7J9cdTAwMWVAhFic2J86osGDjo9+jn2my9vVouZFVdtcdTAwMTWnm8eLO5t3JzMv91x1MDAxMTu/pC5zXHUwMDBlo5NyyXDY2lma6Ul8XCLZXHUwMDFl2Vx1MDAwMi1Vwk9IvaWTcki8XG4+zmTdXHUwMDEzeqp6XG5RUyBRxnDh+otcdTAwMGVhXHUwMDFjqcUvXGYuOvxyyp/BKWdcdFx1MDAwMv1cdTAwMTT6ZWBMJ5hZgKxi9r6PfFCbQLy2o1x1MDAwM3R/93Bxe1Z+UKbEO/VcdTAwMWK7u3ZwP4PT01L1aFopJlx1MDAxY5UpWo6YJMXyzfFgaPwljKLxU+wgXHUwMDE3TjNcdTAwMWJRQFia+TuwVUAqhvjRQkh0kKa//NjAiVx1MDAxM1n8VOpYplZ9/Cgr56WH/Zf11fvHpafVxdb62WXp91RcdTAwMWb/XHUwMDFlqzLVKlxcakJcdTAwMTIyuk+UgLAm0eZsiCDBXHUwMDA2yk1YRVOZ8pajxipHXHUwMDEzdqRccsHSgUty6pi1NFx1MDAwNd1KRVx1MDAwM8xULjNLQZjArFFBOu2IpTbZxtUn8WPavex6pyyrp3GLPOnRyEZvsPjOvtFcdTAwMTOMRs5cdTAwMTJHOpcqhfqtYUJcdTAwMDFM4+lcdTAwMDJW8ClOiVx1MDAxMcR7XHUwMDEwqFOP6NPdSHVORmqAfy5cdTAwMDbjnVlcdTAwMDcyXHUwMDFmKnOaxzdpx6RqosW3OW47XeiU3sskSpqGsCUoYTKDXHUwMDE16YQzyo9R0Vx1MDAxNOY37s41X7FH63tXhUJzvnu3kXXIl9K6n9fV3uPu6Wquplx1MDAxYaqmJVwiLFx1MDAxYclgjEmecnjPXHUwMDE5NTBcdTAwMDCtSZrbOL1Gco94ifiXXHUwMDAzXGa71vGZTL0pJJlv+TtUkVQwLOMjXGJcdTAwMDeHKoe3pf319cb82crDY0mWnlx1MDAwZi5cdTAwMWV0nNf7e+dmW6m229k8WtitPlx1MDAxZt17+XRcdTAwMWF+bSxjYVx1MDAxOGNpiimF6tJnp6joRsJXjSH+NetcdTAwMGau63x9d55fvTZ4+7w1v+p/p/iP4KpcdTAwMTCGs2BcdTAwMTDiXHUwMDFhhdgnnpV+XHUwMDBi1TlcdTAwMGJOXCKKp5pdOcVmXmJs4DRcZtZcdTAwMWLnvVx1MDAxY+irXHUwMDAy84iYqFXRXHUwMDAw1UjVXHUwMDFmrEeF6krkJdCfT7bmS+e3XHUwMDBil0f3j+unpe7Nml2em45cdTAwMDJMmlx1MDAwM2psvZgtND69XHUwMDE4P6rFXGJcdTAwMWNiQUR6PJE3XHUwMDE31KMgPTeCXHUwMDA23MKY5y3mWbCKhnvS/GHjfZLjT1x1MDAxMblcYs3/lID1xuWP1SFcdTAwMWZD1oTT5qzmSVTPOLFXOVx1MDAwNMnaK2N9bndcdTAwMWSiXHUwMDAwoVx1MDAwM+JcdTAwMDQraFxmbLK5zjJFM4RpXGYhdlx1MDAwZfCft5pgNMbF0ThcIk1VvTpxdulcdTAwMTmRJzpNXHUwMDFjjsT2kM/vJ5nCYzBcdTAwMWM30Fx1MDAxYqlSXHUwMDA0f1x1MDAwZVx1MDAwZZXjppJcdTAwMDOjKUj5QVxmXHJcdTAwMTT1VlFcdTAwMTkmwqLkapHxet+7ULl9julnXHUwMDE3XHUwMDEyT1ZoXCLiooDIXHUwMDEyq8VcYmyGmnGahG05kSpcdTAwMDJn29RyUkqDzcOywnHnXHUwMDBiXG5N83N4XHUwMDA2VHZB+ahe1vHHVemIalx1MDAxNuFcdTAwMWOPZp/mrof41FCMwYlcdTAwMTFcdTAwMWQykZC85L3w+dScWI5yOdLSXGZcInyl5LSpglx1MDAwMTz1zkV9ok6H/Fx1MDAwMFXQeHolifPDa4htUpJcdTAwMGLEuFx1MDAwMoXRUGdJuVx1MDAxN50/XHUwMDAzXHUwMDFj3lxuW0BcdTAwMWPuhOI2OVxmsSBoci1H5KVcdTAwMTFFa0S9I8gyUZRB8PF1LO556jTOXHUwMDEwXHSRI4kh1lx1MDAxMp4/VJzGNZK8Ylx1MDAwM4JcdTAwMTPZXHT3P/mN6UtcdK6Izlx1MDAwMNJcIvEsk1xcdZT3ilxig2kmooBCjrJgQmpTSYPoXHUwMDAw8t1cdI+gvylcdTAwMWSVybHxXHUwMDBlXHUwMDAySoBWeWhcdTAwMWWMZD5hKlxmXHUwMDAyjWWnkn9Jn0o+lKT1kWGEMfRD1yukzKNcdPlcdTAwMGJcdTAwMWFmXHUwMDA1zc/kdJBcdTAwMGL7J/6VfdXlz3grpDyESmpcdPFPQ+Vo+Jvmudae+FXhgDxNjYWCQCxcdTAwMTKLeUajlCPyWHxl6Ucg4mEuSJhmmiaraPRtcsGUW87PgU2Fzlx1MDAxNVx1MDAxNiu7NVxcOlx1MDAxODJr/Oj9XGbXrati63mhaTdcdTAwMWbWT3dcdTAwMWVfasf2Nos0bXaAvmJ4XGbcqah9Q6W6Sj3xXHRcdTAwMDRAb6/JPU/xKFx1MDAxYVx1MDAxNtCYQNNjhZNGhFx1MDAwMUjfUOJcblx1MDAwNlx1MDAxMlx1MDAwZV2QXHUwMDAx7q/kXHUwMDA2doB3jlx1MDAxM5p8If1/XG7ST1x1MDAxOdAk81x1MDAxNyBS3Fx1MDAwMdj82j3PYFx1MDAwMYCWIY08uFx1MDAxNGaQjMbGIybFL4JFXHUwMDFjIXBcdTAwMTiyWFxut7t8OJhynTLhmpJBSsjfXHUwMDFjMb8rJ2GoqatcdTAwMWPRQVx1MDAwMvymPHE+XHUwMDA3m/BE8uFcdTAwMDCptKWKJ+GSu5NEJ1x1MDAwMlhcdTAwMDRYx6HHectJTSVcdTAwMDPceMKChiudOvtgXHUwMDFlxlx1MDAwMreVU3GKzse+kjhQYUTw671EXFyVXHUwMDA0l0SRQlXNXHUwMDAwToYwdX7JKD5BcuWJRYQ4V0RyPUVcdTAwMTQpgYYoeU/QLp/4nTMl3ijOgc518u5JR9ypVJBDTlx1MDAxZoFKrqxIYuyTNFx1MDAwYp5cYp+Awlx1MDAxM6GIwi/DXCKQJMBeifAmV1iG3z5FgY/UVLakKOuYXHUwMDFmiVx1MDAwNKYooKLBPVx1MDAwZeKQXGa8qOBcdTAwMTbgXHUwMDBiRt0gOlQj1O9cdTAwMTK9n3X4/Vx1MDAxMFx1MDAwNS+lSGAsTWFPhLCj78pHXGK8XHUwMDA084rIii3lj7xJXHUwMDA2StiepME2+JV4XHUwMDEzosZ8M5BcdTAwMTL+1O7wXHUwMDE1qX+MONVcdTAwMTEq5YpKXCJcYieC18RypIY0oFx1MDAxOHGNXHUwMDAx2sz9rpZBXHUwMDBlXHUwMDAy8Vxc6oAnnGRi7HO9uVx1MDAwMDBp1UJcdTAwMTJQjr9cXGBcdTAwMTKYXHUwMDE5/t1cdTAwMTA3sUyqhVx1MDAwZYzMllx1MDAwNFxullx1MDAxY1x1MDAxN0eZNkCUY/BcdTAwMTbAqLDjyfSBxq1cYnjeNFx1MDAxNdHS9fz1gKKg29pcdTAwMGKSLphLk5bjuKD4XHUwMDExoi3agtIw8NzjL0jfz1x0clx1MDAwMYqG3UHZXHUwMDFk9fskXHUwMDBmpGn4tFY07D4grkOAN8KJtCZcIlx1MDAxZiqedlShmCxsV1x1MDAxNF32kiku/+tKw5RcIuOEv/FcXLyXKStlXHUwMDAyol+4XHUwMDEyYlx1MDAwMVx1MDAxYSH6gFHGnaZcdTAwMTJKXCK7RlifkD5Y0fA26YLC31x1MDAxMWiwaL14wFx1MDAxZuOai9aDmYK1c1x1MDAwMvKEXHUwMDAwaYR0XHUwMDEzjVKWsO+IjDiRuSSXg3unxCQlTaKgbIT1LCPpo4JRXHUwMDFhlZh8vFHxsItGo0DkdT5Je0FS64SHziprXHUwMDE1ed6E9HlIkiGGeVx1MDAxOFqElzx/WEi/l05cIlxmgYeB61wiSiC5UVhjoU/kX1x1MDAxMDhCXFy5TG4vXHUwMDFlq6qQf/fSn0hcYotlNkjYVsRAxIEm8zNcdTAwMWJDbYtigkPqYK244S64/JvXXHUwMDA3wJK4XHUwMDE2z8dcdTAwMDC3wf5JPDKRq2s/XHUwMDE1SGfVdsBvZFx1MDAwNtI0ekFcdTAwMTMl7+g1bYe311x1MDAxYrXOvVtcXJs7P62dbKjrucfrXHUwMDE5XHUwMDBmpGFcdTAwMWKYhoRIyiBykSruUFx1MDAxNv6BuuKoJdrr6TGsXHRKJSqayFx1MDAwMDtEdY1cdTAwMDOOjFx1MDAwN7DYuKBcdTAwMWNcdTAwMTH85cTN96XO4k2x+7z5fFdfPJg/W1q4K8x/9iPi3q4+UiWy2uxWr9pcdTAwMTFcdTAwMDXNR0tFPsp+M/BXT7kyXHUwMDA0TjW7elXTsMdYOjyfPvfgZfmifrV0Plc/8NvPLctrxawq9okr+qAqrlx1MDAxMdRcXFx1MDAxM60osVRaXHUwMDFhXHUwMDFiltJzXHUwMDAziG+EoMhcdTAwMTGAb4qVIeJtwpuiY22FZ1wiXHUwMDA3sLBccnnP3yQ3NKEp0bA/WO9cdTAwMWbqlZX1x05j/mBvfXvnrvx8fnV0XHUwMDFi1/v1Zb0q1lx1MDAwZXdcdTAwMTZcdTAwMTeM2KjOi5VcdTAwMTdeLP1ivYdhjU1cbplWXHUwMDFieMyf9019XHUwMDA1RqBDq9FLQypcdTAwMGZcdTAwMGK2vLVWu7xZvWqtbV9cdTAwMTe92Nj+nfI/iqPzwKdcdTAwMTaQRFpPg9rSRO9A13RCQHhcdTAwMGZcdTAwMGVoit1LVlx1MDAwMuRcdTAwMDfK5Ulcbrj8gOptzqxEQFxylaTYNs6H26tccqHB4vmDZE5cdTAwMWW37Upn43z57L7wunR9eT93d/v42TUg9mj+6NRwpqREn+6TkTFB8fBux/hcdTAwMDFSn780zlx1MDAwNjfW4KmHXTtv5172XHUwMDBluqvldvd+bXH99XjmXHJcdTAwMDZcclx1MDAwZpWBJnxIZdOTcj1cdTAwMWSXS2U00dJcdTAwMWI1hDLiZ12mIX5HTkRcdTAwMDCKXHUwMDA2YVx1MDAwZSomU3Tqy1x1MDAxZPVlKpru2+8x4fhcdTAwMTFsZZDN/+H24qfUIJsh0VM/9OhO89i1XHUwMDFmb85cdTAwMWXqW/fLL829O3/TtkdZw9dmRVx1MDAwNyxcdTAwMTHiwshQflx1MDAxN6qQYlxmXG40XHUwMDA0h8MweUE86lOkRiRcbmEtudJwzVx0isZecKiINsNKqSMmx0Fz0iNuXGaiV/zSgfF0IGSTx1x1MDAxMYVcdPfKjZ4k6Z6rpdZTcfl27qlaM/YpdGqFWXdcdTAwMDWWXHUwMDEyn4qmY+JmKJ7yXHUwMDA0TjFcdTAwMTdcZqc6XHUwMDA07+1cdTAwMTS1gHhKPVx1MDAxNfDrQDRFZkDsZDhTQVx1MDAwNeLzXHUwMDEzXsbHXHUwMDE5vY9no7TWl1x1MDAwZYyeI7Q8M3OghFxiVojRfcDa9c7yS7d51tns2oO6ssuNTiWL7npWhN9Yg8hIkYRcdTAwMDdnTFx1MDAxOMB07TRCXHUwMDExXHUwMDFhkECNsVOTf5qqRilCjceOXY1IdK1cdTAwMTSl201ubc2OOSretVx1MDAxYdf3d+JUnq7dzpVrauGzS3xvV1x1MDAxZslcdTAwMTFutprESE0hVOLa9FOEg37z9OmwRTZLqlx1MDAxNFFF7Fx1MDAxOFxmL4+lk7mL+935m4eL+fnGizgtbfmsXHUwMDFj4WxNbFx1MDAxMIhpmCNcYiWok934ZJu7d1x1MDAxY85cdTAwMTBvgoshqp3p+Ts60KZcdTAwMWFgJ5TXXlxm5HnJndhcdTAwMTCVk5qJdIBOmsCF5lx1MDAwN8QysdNcdTAwMWGxK7JZ3iWwm3bCjIHfQqdysLXyUj9fkE9i5ejy2p41Zn+QkFSc0TEunXGpYFPMXHJCcEG8ataJ4G1s+ubkXHUwMDFiwzhzXHUwMDE2oTpcdTAwMWMmTVx1MDAxMVFcdTAwMDOSf0JaRkUm0DGuuHJxXHJ7XHUwMDFmsUvu1pnPRd6wftk8Xinfrc7xu/mF6nZ1fXXxoDhcdTAwMTZ5gyPu5nFcdTAwMTQm9lx1MDAxYyc7YjfiWdFcdTAwMTRcdTAwMWFcdTAwMDGHUO2vXHUwMDFlMKONnrWThlx1MDAxZTQ1TPm+XHUwMDFi+2fQRmTKNP1cdTAwMTQs7pSiXHUwMDEyXG4oXHUwMDFlXHUwMDE1XHUwMDA25Zf+YTlJw0m8XHUwMDE1UfotuV6/evRcdTAwMTb8K/7vcYF+dr7TeUlcdTAwMTVGfPRcdTAwMDPCwaL+ISOZnog0TSNJSVx1MDAxNGs8XHKFJuLRNNInXHUwMDBlXaBcdTAwMDJPhyVcYjCnN6vJekZbkLBxb1B/XHUwMDE0pE/j2eDKJjGZ6eNcdTAwMDCdulx1MDAwMT9koD5cdTAwMDTQl9u1u7vqtFx1MDAwNq3lePo0Zu/bzFiA/a9cdTAwMWb24Hvp7m6/i7v6bqW/P9aqT3NcdTAwMDPoSy+jXHUwMDFmciCRqpNWVSOX9u+//v3/McPRziJ9 - - + + + + eyJ2ZXJzaW9uIjoiMSIsImVuY29kaW5nIjoiYnN0cmluZyIsImNvbXByZXNzZWQiOnRydWUsImVuY29kZWQiOiJ4nO1dV3dcIkmTfZ9f0af39SM3vdk35L33u3t0XHUwMDEwIFx0XHQjXHUwMDAxsnu+/743Sj2iqqAoUEM36pGmx1GQSqrC3IiMuPF/f3379r37clf9/l/fvlefy6V6rdIuPX3/XHUwMDE3vf5YbXdqrSYuyej/O62Hdjl653W3e9f5r//8z94nWLnVePtUtV5tVJvdXHUwMDBl3vff+P9v3/4v+mf899TrtbtONXp7dKH3i0TgJv3yVqtcdTAwMTn9Vo9cdTAwMWbppfXvb6h1XHUwMDE28Nu61Vxurl6W6p1q71xuvfT95LBVfnpcXL67OXLVqll46izO38/3fu1lrV7f777Uo011WvhcIr1rnW67dVs9rlW6139//9jrWZ9qt1x1MDAxZa6um9VcdTAwMGV9efH+auuuVK51X/BcdTAwMWF/f63UvIpW6L3yTJ9cdTAwMTFGMSO5XHReeIU/+v3yS3SZc1xcti44K7jUQqf2Nd+qt9q0r/9cdTAwMTBV+qu3s4tS+fZcbttrVt7f022Xmp27Ulx1MDAxYlx1MDAwZqv3vqdcdTAwMWbfWFx1MDAxOM6ks05cdTAwMThvTFxigfduwXW1dnXdXHUwMDFk/p5ONXoowlxiXFwyPPSu0CbuVis98YhePbnsXHUwMDFl7O++mvqRPX65XFy+rFx1MDAxZJ6Vit9/XFz/395cdTAwMTNrl1x1MDAxYdVVWrn5UK/Hb3uz8uO2Jy5cXNCFxbRAxoUyJi1bj/e7RyZU5ML81tbW0Wq9dDv/9H5nXHUwMDEyXHUwMDEyXFxqt1tP39+v/Ltvo1x1MDAwZneV0ptcXFxux6VQQsugVXi/Xq81b9ObrbfKtz1Rjl79979cdTAwMDZrULf63Fx1MDAxZKQ+Slxun6U+Rlx1MDAxOSmksiNrzzp386tLta66bz8+lS5cdTAwMTbXjsqbxd+pPZD+fP1xzPrAObfWeu2S6iNcdTAwMDVn3nPPnfGQV+Wnpz5asKBCXHUwMDEwXHUwMDFjRlx1MDAwYlx1MDAxYeJ9v/pI06cu3jjhYOP4jKjLJFx1MDAwNbq3q1azu197padcdTAwMTf7ovTqUqlRq78knn4k6bjbxdX54rfFylX1207MgtPVYr12RbL/vYxdV9tcdLXo1uCf3t/Qbd31rpbx+0q1ZrXdf39a7dpVrVmqXHUwMDFmXGb93fjG1ZV3U8hiT/Oi1KnS1eiJXHUwMDBl1eN2tdx9k+RcdTAwMDHKLK1ccumX/1ZmXGKUtsoq19OtPHUuVy+3XHUwMDFmXHUwMDFh7Sex+LpR2Dheu2qXj9ZmXFydJdfMOiOsgrBJ01OiN28oXHUwMDA081x1MDAxNs7FXHUwMDFibpXm01Nn7VjAPrxWXG7/XGJC9WuzXHUwMDE3jFx1MDAwYlx1MDAxOFx1MDAxNaudh+1cdLHNvCl3gPXlQtmez1x1MDAxZazbhUb58eZR17dcdTAwMGLq8DA4fV1cXF7ajrmhmfCVQa0sm5VcdTAwMWRvXHUwMDBmKuWz22J9s3G+V1x1MDAxYs1X/mvYuutrj2uVwsVqWN6qnMqzw8dGmz9PYN39XHUwMDA3vde+1+VG5UVcXO9sXm80atvNXHSs+1x1MDAxM5hh6LqhUznYWnmpny/IJ7FydHltz1x1MDAxYXOTwlwiXHUwMDE2Pkn1NPInsUhk6Vx1MDAwNpkvbWX65XfzZYWSXHUwMDFhXG7d0/c888VPSlacbm00XHUwMDFlNraqJ8er5va5aWfdfFx1MDAxMd7A7eZcdTAwMGWG2ivfw15v9ktcbuaslc57I4NN7Wty1ktZ5mBEtVx1MDAwM0T3wulBWIRcdTAwMDVpddBOc8c1N7JaiFx1MDAxObm/4YlW+Fx1MDAxMlxciN5Wf7tcdOvpzt9cdTAwMDIpf7zy7979XHUwMDFhXHUwMDEz1mg+hm7Enlqp3Z2rNSu15lX6I9VmJeNKvdTpzrdcdTAwMWGNWlx1MDAxN9vYadWa3fQ7onWLpOTX1VLfvcDKmdfuaLnko+n917eesEb/8/7f//uvge/OXHUwMDE0XCL6XHUwMDE5KD69XHUwMDE1/4r/e3w7XHUwMDEydPrlv+2I81x1MDAxY2GN5r035JmRhdqtOdrsXFw0rl/Xy5vHr1ul9WMz62aEXHUwMDA3ZrVC9C+cXHUwMDAzXHUwMDAy6Snmm1x1MDAxOVGcce6NcIpcdTAwMDfheXpns2dInFx1MDAxNJZLzmdcYlxufdmRP9+OOJt++Vx1MDAxZI84XHUwMDA3ZG7CXHUwMDE44ZSuPi/K+93S+tlrYzdcdTAwMDR1fLzE7z+BIYHFNFxiUDhcdTAwMTCY6DMkXHUwMDFlYSx3xjhcdTAwMGKjKj6BIVFGapWfXvwyJF+GZHKGxPDMJKtQwVx1MDAwNW6sXHUwMDFlXHUwMDFkkcxcdTAwMTV3LuqnLX93UVx1MDAwZa2FZV9cYp3j8icwJDZcdTAwMThcdTAwMWSMVLAkvver31xmibZMXHUwMDA3XHUwMDE5gpbw9FLOviFcdJ72XHUwMDE5wldk82VIJm5Ihp13mpCZ41x1MDAwNUqGXHUwMDE3XHUwMDFl47izs/my+rJzoZ6bS7Vucf9iY7vV3Z11S6JcdTAwMWPTkkvAXHJBXHSRXlx1MDAxNv3Nklx1MDAxOMO0gPxaXHUwMDE4Xa/19FK8nlx1MDAxOe3w8CUlcFx1MDAwMZJ6R0fvlsQy2ofWXCJI42RQsdPZXHUwMDFmZkRcbqm9p4g0x440N1x1MDAwZp7EwtZld+36aOW2tF5+rT3Nx+3IXHUwMDEx7sVx93Veda+WNviGP9o630y8YWbSxJM0OVx1MDAxZvLHXG5PJEuHVIBgQXNHV6K904PWc+PYPFx1MDAxNuYv60uN2u5la3NltpXIO8G4XHUwMDE2zijnhVxiqWOSIDRcdTAwMDNcIlx1MDAxMcDzQdvpKZBzXGbG01xiJVx1MDAwMyCB9Vx1MDAwM1xuXHUwMDA2gmZGeec89smhYi6tP1x1MDAwMFx1MDAxNojChMrVn6NdvlF/3Vuab5ZMca22vLW/Llx1MDAxN3+tcJvg41x1MDAxMeWXP1x1MDAxZPjuvkee9+lMMZr8atIxeFx1MDAxZO6CNcLhefLc5YxkSlmnvFx1MDAwZl4qLbWZ5nqcXHUwMDA1XHUwMDBijVx1MDAxNTo6LsHb9Jhft+fE+rdnuTK521x1MDAxM0xrOvg00nE4x+TdY1x1MDAxMH9tjVxmXHUwMDBlgF/pJDBcdTAwMWFBNGKCNFx1MDAxMozKsv8hZkdS5t9K7YzkfvRorFDyW6s7rlxcVPWTe0R6stJe6WSY/+tS+fqhXZ1cdTAwMDFcdTAwMDfgNZN4SDZcdTAwMTI6rpMgKijDIFxuXFxcdTAwMDHgXCJeXHUwMDFi5lx1MDAwMvAoy/InojGOqFDgXHUwMDBmpEZcdTAwMTn4nH5cdTAwMTfAmaJDdMBtyLNcdTAwMTTc8z5cdTAwMTAlgMNcdTAwMTVJXV4wNjknMOlY68s3ZMVaWVx1MDAxMlx1MDAxMn26XzYmZVwiLE+/+p6xIUMptbWjXHUwMDFmRb8+++tccu1K4XDr4Hpxa+t896S0NPs2QrFcdTAwMDA4LuBPouq3pI0wXHUwMDAwicJJSckt7mNHTJO2XHUwMDExWjFhOEAqXCJcdTAwMDNteSzjXHUwMDEys1x1MDAxMVAjRUJcdTAwMDDAqnxAjNhnIzz2KZTPPUL6slx1MDAxMZ/ORmRKSPTpftmYkI1AgJSZioGcIXjyY+RiXFy9u77xtPHycntXfT6wXHUwMDBiXHUwMDE3jYuH49m3XHUwMDExhilnXHUwMDAwRZ2CTeTJ6vNcdTAwMTBcdTAwMTBmXHUwMDA2Mt/WO6X8VG1cdTAwMDTV+mNcdTAwMDMwSFx1MDAxY1x1MDAwMHOQjZAqXHUwMDE4g+BcdTAwMWWbXHUwMDE1wnnbX66igFwiXHUwMDA0Npx3OvRlIz6jjVx1MDAxOCwh0af7ZWNSOMJn41xioSVcdTAwMDIvPbqJsHOyU18t7e7PXHUwMDFkLyzNra/vrL5cdTAwMWM/zL6J0FRC76ibgKxwb5XIRDjJqNxcdTAwMWRBerBknKdcdTAwMTdqSOYkdcpQMMutXHUwMDE5XGIjlFx0XG5cdTAwMGbFXHUwMDEw0nS2r1wiV8CJXHUwMDAwR8Q17MtAfPszXGZEpnzQT6FPNMa0XHUwMDBmw+v2pVLpl99cdTAwMTNcdTAwMTLKW1x1MDAwMywxep2JuL25kbWH2sXR5pGslopbR1x1MDAwN4uHs52PdiYwIYVcdTAwMTVcYuNcdTAwMTFsuL6yfclcdTAwMTCCiKiU1Fx1MDAxODm9lDRcdTAwMDBLXHUwMDEwgVx1MDAwNy3wR8Be9Vx1MDAxYlx0K5h0gYBcdTAwMDJcdTAwMDBcdTAwMWX3uj9cdTAwMWRcdTAwMTGchVx1MDAxOMHa5Vx1MDAxOInNV7XePKhvXHUwMDE3L+5V6VWe+uWt5eNcdFx1MDAxOVx0kW8k3j8z2er3vv1P+ZBnuGYpnalZQkGX8aTGUK3i3nKtXFxeOH3x95vb61x1MDAwN/cldfnwW9tDR1EtMl3aXHUwMDFh+FinpE33h3rOXGbwu0Fw5JzkQ/zvzza4cc84t46aWrx0Ulx1MDAwZcj1XHTNnNfCh+CMdNaofoiOr2FMmHXdmlx1MDAxMek3XCKzocJyg3ts1OjC/2JcdTAwMWVXy4f4e+/RdTtb6927vY0w28LvZWDAO/ieXGL9heLpdlxuRK9cdTAwMDCgwntcdTAwMTEoqzfF7s5cdTAwMDAlVPDl+NtYa53uXHUwMDE3fsWcXHUwMDAyTKaKXHUwMDAxIaVcdTAwMGZ9KSx8NHBcdTAwMWXv4PuS/SG9kFwis1x0QGhFnTZjNFx1MDAwMdTskbpcdTAwMGWXXHUwMDA1PJuTl9PGvGuZUmW2Zd9cdTAwMDXDbIDY485cdTAwMWJcdTAwMDU8kpJ9p3FZ4cFw/KeKJ0xnUfaF0d5cdTAwMDTHcyOvL+EnKVx1MDAwYjqTXHUwMDE0Q6hAhVFjZCZcdTAwMWaq6mq3VN668uVKca7+2l7elLOOeixcdTAwMWRdXHUwMDFiXHUwMDBis09gg6fr1iGTRjtjXHUwMDE0LL9cZmp65abOMqkh+cBYTlJ82S/72jHgLy1cZpfQXHUwMDBmqG1a9qGi1lx1MDAwN5vb4/9PXHUwMDEx/beIY4DY47Fm11lcdTAwMDdq1qDc38hyPzxcYprVdJuVXHUwMDEwbeBnZVx1MDAwM7daps2+9oxKsFVcYjpcdTAwMThrplx1MDAwN3mUolZWp4GsQlx1MDAxMHaA4COqh2Ny0ENcdTAwMDVwpuNMJO/VXT7AKVxiNVx1MDAxOPJMP5H2/plEjDyQVCUmOKdaPFcrtvbQXX9YfVjozl/vXFxdTjdEjj3GRJYu9q1/0CytjpAkojvaKj/QLeBcZjKnRNBeSjpodypW0/P9qnRcdTAwMTdJXHUwMDE1MzxwetSGO6mU7buziVx1MDAwNGHWpoZcdTAwMTNOxDZV4LCqwOwyajpcblx1MDAxMjv0g3ZcdTAwMDXpXG54m1FcdTAwMWF/dN+mJpybTFx1MDAxYqbJpicz1Il++lx1MDAxNam32l/xf4/LXHUwMDBlNKxcYlwiWHJpY5jTwVox4+ZcdTAwMTRcdTAwMTJNLW5cdTAwMDZcdTAwMTKmXHUwMDAzXHUwMDBmLlx1MDAwNSS4kVxmj4TYRiRcdTAwMTRkisWyxjLYbKghcYJcYlx1MDAxNzt5XHUwMDFlQlx1MDAwZlx1MDAxNJRz8Vx1MDAxNpdcdTAwMGZcdTAwMWLPX1fQ3dvVR0h/Vlx1MDAwZVx1MDAwZXa+J15cdTAwMWSd7KdRq1TicDrJ95OHXHUwMDA20lx1MDAxNEDJnUyC+mdIU1xigt1s5lxm2FxmgEo9uqKur9nVM3N/9HRcXPRbp5dmZ+dcXP1W4oxcXCVcdTAwMDWOZ0D6jlx1MDAxM6DXOpbRfdNShMJaWmWJXHUwMDAzz9ow8yR42KV3sCq5x4xcdTAwMWLVPXtxasp3oXVZPDjZKajX3c/csZFJU1x1MDAxN+9RSHdsUMbYxYs/81x1MDAwNHyjsP/4tN8pN9pX7lSu+v1Hdbkx21x1MDAwMa1cdTAwMDBoZzo6XHUwMDFkXHUwMDAz5HFKJavx4Fx1MDAxNFxmc54rZ1x1MDAxMe/qaTZQ0omBNcEr41x1MDAwNVx1MDAxZExcdTAwMGUotVx1MDAxOcBTRzX4JqhcXFwimM8o0T/nsopcdTAwMGbdVqPUhUB/26+2XHUwMDFm4y7qXHUwMDE3kdVlb2DqjHVKZZfiXHUwMDBiXHUwMDBi7GXppHVkxX7evVufO5xcdTAwMGbFufnju5d12zks2NKsK7ZcdTAwMGbQXFwjqSeCtDzFQCm4ZVBqXHUwMDFkbFxi3sVL02aRslx1MDAwZT5LcudDRsDe0/ODyrHeL91cdTAwMWbY291bfVFtmaVqu55oZ/xFhuD9N06WW65vo7+r1VH4zFZHoYhsXHUwMDE3mGj0VPDSY3mn+7LUuVldMEsrW6/39eOn/VlXMKC/IG1UWFx1MDAwMnXS6Vx1MDAxM3BhmUUsq1x1MDAxZGVcdLyffVY1YnvmXHUwMDE2XHUwMDFhmJdcdTAwMTD+hUr2xT3wp3BcdTAwMGZkWlx1MDAxMikyS2kk555bOLAx2Fx1MDAxOecugnttvFx1MDAxNP3iYvWy+qRcbq3K9sxbXHUwMDEyzZzBjXBcbuFcdTAwMDZPVrJSuVx1MDAxOFx1MDAwYlEvjOeCYPjMXHUwMDFiXHUwMDEywZWEydN5xTRfduTLjkzOjoiQfTatg6d2kdFcdTAwMGIzXHUwMDFh9XKru7krgrht1Zxrn67ON64/gVx1MDAxOVx0wiC08Vx1MDAxYyF9OqcsVNTOXHUwMDE00d06XHUwMDFmXHUwMDBmsGfVjmhcdTAwMGXMr00uXHUwMDE30pdcdTAwMWT5siNcdTAwMTPEI3JY6iBookhcdTAwMThcdTAwMWSPXHUwMDE0XHUwMDE2bvdcdTAwMTdcdTAwMWUvjp7au8cnXHUwMDBianGvuHI566RqZEg8XHUwMDA3XHUwMDEygakghu506kBcdTAwMGKmgjRWOiAz81x0aF6FVEorXHUwMDE3P0f7siRfluTb1FnVpMpcdTAwMWWDI4W0Vlx1MDAwND9cdTAwMDYnyOnpy8lZbf5urtgqVE73jk5cdTAwMGLiKKuXd1aMiZVRXHUwMDE1gdJEXG6tvOvjVeNcZlx1MDAxN5w3nFx1MDAwYummWDI3XHUwMDE5XrVcdTAwMTBcdTAwMDI1XHUwMDFk5kGSYvP6qFXbet7bvOeLZuly7vnhPMGadvfwfHLw2rnfWll8XFxW9Uans92IXHUwMDE3/cxOJvO3XHUwMDFm0tnsolNjgFx1MDAxMMfphr+xZ436yc71+dbm6+3h5sbJUaGx+OuKRfiHdMhpXHUwMDAw++CFlFxuf3GZXHUwMDAy9pLqdIzRiHJgUORcdTAwMTSpXHSxXHUwMDAz5olcdTAwMTWHXHUwMDFiXHUwMDE4r2DUgF6bQcOkXHUwMDFjNYXojHzAL1x1MDAxNNVxRo30dvWR07fj6sW3OXi3Tua5W716mZT2yZy6XHL8xZM4b8usjpWSZ9OZSyf9WFx1MDAxZFx1MDAxMcPPRma1mlx1MDAwYuLNjKTIOurhTGfwdCBcdTAwMDI17WhQVoLbd+KAWXDGJdFW4aEor2LdXHUwMDE5vTpcdTAwMTHBRNBUoVx1MDAwZVx1MDAxN4c92b6mXGJcdTAwMThcdTAwMTlcdTAwMTOyuMxntTj25Oz2ulVcdTAwMTTmgK/dXFytLepcdTAwMTXcXHUwMDExO/7J2YdMxIjFscOPkb8l6lC5ompcZuiW5pqwiIj1jf9diKqZtNJr4y22XHUwMDBm7GT67u1ky2OpOlbTmFx1MDAxM3hcdTAwMWJcdTAwMDUxNtL0b1xuXHUwMDFlQlx1MDAwN+dcdTAwMTTpXHUwMDAxVTf27elcdTAwMDOBQ9r4/MpcdTAwMDLZQrZO0U+/No1cdTAwMTk9ZKFcdTAwMWWXeSqiOEXeY9QlXHJWjVm3qYjYmfRAPFx1MDAwMkgjqFx1MDAxNOpcdFoyXHUwMDE3NN31IIhcYmh6oIdcdTAwMDNeXHUwMDAx9GhFbERcXNuRSmRFxGFcdTAwMTZ0xmHqXHUwMDFmXHR69lx1MDAxNvdcdTAwMGa+XHUwMDE1d1anVCmbXHUwMDAzXHLSSKh/N1MvO/JDXHUwMDA2u1xiXGJcdTAwMGXloMY4g5jfLq6rdm1Lrlx1MDAxY1ef/MWivj5cXJ09tZXMKipcdTAwMTGksMBK7mLpt0iPtVBMWc6pXc46l1wihfbaMcAnXHSJ9Vork9roXHUwMDA0oZFh3Fx1MDAwNEuN/lxue1RcdTAwMDPCfyWY45ThxVx1MDAxN1FGKt+HjLBBT2xCeeH/9n5hrXtXf60/XHUwMDFl7V6Fo01j7EphQmnCv9NTP5EmnPrIRZ89KVxylpRYTNxcdTAwMTiHcZe7r25zrnBT41vn1efG0m758Lb2XHRcdTAwMTWBcypz4zSIXHUwMDFjTi1FmeFtYFx1MDAxMihCUVx1MDAwNY6aXCJfXHUwMDA2zXX3xtFcdTAwMTRYrbRVXHUwMDAzSsmlY9QszSHrTtJ++lwiXHUwMDA0uEIrZG6l0DT1YFx1MDAwMunySYD9Py1dXHUwMDBlXHUwMDAwT/2uwLpcYlkhrT2HRT9cdTAwMDXHrOaKXHUwMDFijXfgolxyuetlylt0lVx1MDAwNlxuXHUwMDA2rKiFXHUwMDExVMqdt1x1MDAxY0d4YaxcdTAwMTBeOU68M6qvY81pq6VcIspOXHUwMDBlWD4mXHUwMDFhzzJoLpvvx2r4MGfG4NtT23VTXdg839/qdu9X2q1m41qsf8yepVtO3j9XaZGgTdegwVx1MDAwNjDAXHUwMDFhYUxwmnuRbI9cdErD71x1MDAwNyFcdTAwMTXNeUvQYk7atXvmrbHakUzweKd73KKRXGbCfUf92n7ASFkhpYOk5lx1MDAxNS19mbRPZ9Iy5YN+XG59ojEhk1x1MDAxMVTm0Vx1MDAxZlXoWCvHYPpuNlx1MDAwZVx1MDAxYutcdTAwMGKtK9FduH9Z5UeN0/Zz1pDHmTZcdTAwMTkwXG7Ufa+spqY5k8JAXGJcdTAwMDaIXHUwMDEznPJeXHUwMDFjJjektjrBplx1MDAwNM9cdTAwMDRcdTAwMDSBeGOif1x1MDAwZopcdTAwMDbgapShQ1x1MDAxNSNodHb/WSBccjpcdTAwMTiBN+nLYnw6i5EpXHUwMDFl9NMnXHUwMDE4XHUwMDEzMlx1MDAxOFwi2OyoyXEtXHUwMDEwlY6RPjh4vjypXHUwMDE3XlRZv2wsrpndvcOC/KDJmGbUZFx1MDAxOG5vXHUwMDAwpMONXHUwMDA0XHUwMDEwjIljZDBcdTAwMDShXGLHXHKnQbA+3lNcdTAwMTJcdTAwMTlcZuqiXHUwMDA3xnCGXHUwMDE4XCJcdTAwMDSfXvpcdTAwMDDxXHUwMDFhszT6JohAam9cdTAwMDe0MWnBXGZcdTAwMWSKQjSAZ0Vs6sh7h4WNiLF8Xtz0eLB8eyxPzdLa00lp/U50/LJ5+TJcdTAwMTmzbDJcblx1MDAxNjhcImjIXGKNgVO9LHF0XHUwMDExkuFoXHUwMDFjn6Z6XHUwMDFmTiFD7npcdTAwMDGBXHUwMDE4rIxG8CSJoi957ODJUSrjqPfcXHUwMDEwxlx1MDAxZWV/XG5cdTAwMGZQOiW8JNqV+HqaUlx1MDAxM1x1MDAxNmpcdTAwMTiCNo5cdTAwMDebt5yhQT88eFx1MDAxZIjWWFiZ2J6yXGZcdTAwMDFcdTAwMWQwlfMhyrjlLec0o1x1MDAwMUlcdTAwMDE3T9JcdTAwMTCUhMFcdTAwMTVcYjotXHUwMDE3ypPySeKeyN1cdTAwMWRnlFFcZl5FRjw5XHUwMDFjXHUwMDBij8lwyVx1MDAxNVx1MDAxZFHh9srcR/FTw6KGzdzkQ5rooG5cdTAwMGVIKVx1MDAxNlTlXHUwMDE5/JVOpX6wxG9cdTAwMTebZve10lxc2eCtys2nM/jcXHUwMDA2Zlx1MDAxZI1cZuN0jCiT3JqBW6ZodFxm9ddcdTAwMTnhp3fsIzX2XHRRpKJAw4XxXHUwMDAzXGY+lcMoro2SXFy8jVx1MDAxOO6z+NTC5G1uouxcdTAwMGYy+Fx1MDAxZtaGYS2luIvaezFGkuW20jq9fFi8OCvXmzdhvdF6PlPFT6dccsJqhudcdTAwMDBcdTAwMDOroVx1MDAwZmnaNY/YXHUwMDE1XHUwMDFlgCZcXHt4nmGDUH6anYFR3aR2NnJeWlx1MDAwZVximGCmicyIWtVcdTAwMTSi29BfPSngq2z0Vb/UYXgo4E02RZZx1Kkrx5jsfrYv7Vr1fn/tfK6jTy/b1fXOy+Ps6UKqXHUwMDAwQEjOaFCsXHUwMDBikkZ48GR6karKmCBAoKNcdTAwMThtislcdTAwMDKnXHUwMDE4cFx1MDAxYpdGXHUwMDAy+1Od5Vx1MDAwMOhvXGJwuOA0XHJw56Jf9IOLeOVy84uTXHUwMDEz/d9QNvCnY3xBob8jslx1MDAxY1x1MDAxYYhcdTAwMGVRSJ4+eMYlwUrprVEwhPnrwaxcdTAwMTLaXHUwMDA2zqHyXHUwMDAwoVx1MDAxM4ctfUKVXHUwMDBie/FcdTAwMDFJxbZcYkQ8cUDZ1HJCarhcdTAwMWLOIzKNUVA0cI0zXHUwMDAy+Ieollx1MDAxM6uJXHUwMDAw7ZPRaHhEIU7mg3JcItOKXHUwMDA2uGpcdTAwMDTTiqroXHUwMDEzN59cdTAwMTlqwKDp61x1MDAxYT9SjUs2mD1OTWenVVx1MDAxNGJcdTAwMDEvxuGCOS9dlU/23eVcdTAwMWF3+0s7V+7xtO1nfi5rNOrE0FBcdTAwMTFH8ZNP5V1cdTAwMDOAbPCSzqWh/XaKLE8uMOe4XHUwMDEz3lx1MDAxOUr0ylx1MDAwMUc1nnLIgNXKaVx1MDAwYmwt+02pgU54XHUwMDA0cHlVXHUwMDE4f1x1MDAxMIr4p1hYjfBOSFx1MDAwYptIgXtwybSCplxcoDNk42xAuJCb9NBcbuiZOIm5UZHvTthXT1OlOVx1MDAwZipoR2VcdTAwMTn5Q7xcdTAwMTknJlRBfPNEW5ssXHUwMDA17Vx1MDAxM9xcXPOvXHUwMDE0ZXE4XHUwMDFkXHUwMDFmXHUwMDA3WNresFP6IfRjXHUwMDA17L9TQVx1MDAwMTi4cStLh8RaLlbc3Vef41x1MDAwMlU5jtGW9vrcvdjl/lxcP2w3XHUwMDBmXHUwMDFhpePWwd4xn32TKFxyi5KxXHUwMDAy5kjw1HAoXHUwMDFhIFx1MDAwN1x1MDAxMeM0lctAQqZcdTAwMTdaSc141FTmNFx1MDAwNEFcZsws4z1aQECER4TlVLyu/z208l5TyXVei+tcdTAwMWZkXHUwMDE0h0r/0EJNmrGVqVx1MDAwMJB9aKNcdTAwMWYjvjpcdTAwMTB7oX1VmKuvvSw+LnfrV0t761mTXGZmR1x1MDAwMaRcdTAwMTJMkKpLXHUwMDAwWqF9Slx1MDAwMWB/gFx1MDAxNrRcYlx1MDAxNqhMT5O/StOgXHUwMDAyQ1x1MDAxNVx1MDAxOFpcdTAwMWHg1n75XHUwMDE3MPySksyGOlx1MDAxMHj/yVxuTG40dOt3Jlx1MDAxNkYozHz/zFx1MDAwMFa4rcf73SNcdTAwMTMqcmF+a2vraLVeup3vNTUkZPuDrHDTL/vMnjcofFBcbpHJXHUwMDE4pHArur3eeTkpXHUwMDFlnlx1MDAxNV9Pdu5cdTAwMDFgdq82Z1+rqHhSOIXbLlx1MDAwM/VcdTAwMTEntMpcdTAwMDdKpFx0TjP+8GT0XHUwMDE0K1x1MDAxY1xirGiafopoz1x1MDAwZWx31pzR8Fx1MDAxMCrOJua3XHUwMDAxPlx1MDAwNTtcdTAwMTRcYnT/Qdnrf1xu0C5kysfb1ZRojFx0PTNcclx1MDAwNM9Oa0rEdDIxNCfPQFx1MDAxY22vXHUwMDFk4i33fO1RN9f3jXra2PlgXHUwMDFk5a/EncSuolx1MDAxMFx1MDAwMUM+LUKJVFx0lMKdhyOj+UIwmW56objRVLwpLUJcdTAwMTlcdTAwMWHVlTFCiGvqL+TSO+tcdTAwMDdcZi6mI2Av81x1MDAwN1x1MDAxN39ZiE9nITLlg376JGNMXHUwMDAzMTQ2zWyiclx1MDAxMDbh5Vx1MDAxOKHpzdNcIrTwvGS2XHUwMDFhT5dcdTAwMGJ3xd3S/tPZzJtcYnhdOvmgilxmoVx1MDAxMZ2mTv08nYFTMkNYozSfXHUwMDFlMqfO16ChJIg5JZWHXGZcdTAwMDBcdTAwMTEhqmyxXHUwMDFjQqBcdTAwMWRcdTAwMDKn/nSds4hslf4npes+5Fx1MDAxY3W8r6yPeVxm4b13Yoz6P9E84zfLYnNx5cTah9f22sbh6+xcdTAwMWb6SZqXbrySWjn88ameXHUwMDAyXHUwMDBicbPeXHUwMDEwWZOmQ9DpeUfOop5fXHUwMDE3tZpcZi5cdTAwMTCGgYRcdTAwMDHU1lx1MDAxMU5GXHUwMDAwm5Z8XHUwMDFidNRcdTAwMTP+deT3eb1g4t1cdTAwMDVhIZxcdTAwMGVG11x1MDAwMbtpYOfclLEwzGhcdTAwMGbrqKWhmvZkWSClIGmwXHUwMDE2ZS7oUD+/7k5cdKYl4CF10zrupPfpXHJazYWmXHUwMDA0NSVUco8g0+slVlx1MDAwM1x1MDAxNMXWXHUwMDAyj8azQeOszFtcdTAwMGVxXHUwMDAzsXZcdTAwMTJoXGLEh+JcdTAwMTNnhlx1MDAwNVx1MDAxZPX6WsS9sGVCKZubwVeBwadcdTAwMTiaXCJOvZHJXHUwMDE0eUEqXHUwMDE2nPOCZm5qOsHKW1x1MDAwZVx1MDAxZnBcdTAwMDAsXHUwMDFh34WYpbVM7q9PpfPWc0wpQzRcdTAwMDTKKkWTXHUwMDE0fm65QmDcXHUwMDE4mD1cdTAwMDRcYs5cdTAwMDSXun30dfG64/5tXssoVaRcZqDJwlxc+iCMSD9cdTAwMGasR0NulFR4aIFoY8fSh3FrITOPaKXKPo+g42dcdTAwMWFVOnqzzEJ98bmw1disVa5cdTAwMGV3bu1rYVctz/yATdxcdTAwMDPojlx1MDAwMoyCWVx0jotcdTAwMTTfhfBUXGKmXGangmAxxcSRMlxmSMNcdTAwMWL85WCS4j35ycxcdTAwMTGdqSlcdTAwMDM9V7xcdTAwMWb1wYN7a/I7hP8g0PePcYnwgdZcdTAwMDDW0+xgTaV+SVx1MDAxN1x1MDAwNEElseGc2Plg+fLrTJiVxmvBXHUwMDExR1xurkPSR1x1MDAxMiBEbOElgj/qSLa5Rlx1MDAwZjuw0SxcdTAwMTmAL8NDSHYww6NQzypcdTAwMGZcYmtccvmNfFx1MDAxZiSZN0E5XHUwMDE1ndDBfaWMKFGJXHUwMDE4R181eDK2uUY0W8Xe7iBQXHUwMDA2or9Ap1A0Sd3kfuOoSVx1MDAwNp5cdTAwMTX2QVHPbeJcdTAwMGXS9lx1MDAwMpdcdTAwMTKWXHUwMDE0wFx1MDAwNU583IalIcF6cJlNjkJR76+yY4zyXFx9de3ruVx1MDAxZLV8f7lcXD1Zet5ozVx1MDAxN+THXGa3SL0+1WhdM+KhXHUwMDE0hCdEfFx1MDAwMvpbXHUwMDFiNFx1MDAxMKBccpKO+KnWaGp2XHUwMDFiQk+4XHUwMDAw+ID6O8KAUzTLIJ3UZk/cjdybvmp1QSZbe/9cdTAwMGLTeb8uYlx1MDAxOSrimeyGlmezgUNxqTJvjOKxoFaWzcqOt1x1MDAwN5Xy2W2xvtk435tBJpO+jLVikCtcdTAwMDVcdTAwMTNcYrGJMUL8PaCELKqlQfTAmVNk8IVFYYgtqD9cdTAwMTjWXHUwMDE2MYbtl3Fh4E1gjFxycVRcdTAwMTDRTJ+MUzSPXZrBbbszS294XHUwMDFm/F179fxKPVx1MDAxZa3Jg3InbFdWxz9cdTAwMDKWYyhMXHUwMDE2nplcdTAwMDSPoLNcYqBcdTAwMTGpXCI0gj9cdTAwMWREbkheXHUwMDBiT5lTgbcxVvTd2IlcIqnfyjAoqJJdc6qA8JRBTVx1MDAwMVx1MDAxNqiXXHUwMDAwXFxQ3pDR5sbmXHUwMDAyqkK2pkSX6Vx1MDAwNErKXHUwMDAwJ8CJumOEOmVhqLRZXHUwMDAy4ShNXHUwMDA1+SnIl1a6MVx1MDAwMUZcdTAwMTZcdTAwMDeiXHUwMDE40lx1MDAwZu08TSBQY7AgXHUwMDBl1KBZt73UXHUwMDBlR15bS6OsinujXHUwMDFmXHUwMDBiKERiuO1eU1x1MDAwMeFcdTAwMTSpZY2jlnjqx1xiISpcbui3vVx1MDAwM1hcdTAwMTBcdTAwMDN2XHUwMDE4XFzgg8PAX4hcdTAwMTQ+ZPg+xoLYumjF7t9EKVx1MDAxMHPwQ1x1MDAxZlx1MDAwNWJyK1OlgY4x1KaVlSq26Lh79JP94bVQs6qr0nlcdTAwMDb8TDWlXvH4uJK3gjrDvLZcYjwtxbLT01RLXHUwMDEzXHUwMDE1lPVUXGaqiHF6XHUwMDEwXHS0g1NBtO0jXHUwMDE2LVx1MDAxNz/Z61x1MDAxNZTSR1XGyNVZxUnt5qHYWnxcdTAwMTLFg8OXcHtcIndvuJybLZw0vFo0hpNcboJRr1xmXCJcZqW8JZaxWPa7x7dsqITHRIDKKddfhThZXHUwMDEyaOKmJq42K1xmXHJcdTAwMTFcdTAwMDPSUH7AtlxmTSyIXGI/NTFcYvL+bU043zVViIZcYl/ja3on4P28XHUwMDEyyUJ9mFKKq7mQ2sHj5SfRXHJngEnAvpy4XHUwMDFlrU52kfFcdTAwMDD9NVx1MDAwNFxitaacQS4nXiEwXHUwMDE4XHUwMDFjoGg8XHUwMDEwXHUwMDFiQuxcZj5ar0/VJ4TOZHbOXlxifFx1MDAwMzuOxVx1MDAxZqy3s27xoZeMZDzAvXFcdTAwMWZSh9WCoJtBmGNpLICf3sA9K1x1MDAxOUBcdTAwMTaguVxyUnlcdTAwMTlLMr1cdTAwMWL8WD/x+0xtXHUwMDE3XHUwMDFk7GV0XGb8kdhsqdUuV/+nuV9tdlpZgzl+XHUwMDE2o+VglzRGy9jSSFjth6X5WFx1MDAwYlx1MDAwNOfZ/HRwJDQhfvTMbXmrfVX1l1x1MDAwYlx1MDAwZi2/tuTm9u/bV7VGhvqW261Op3Bd6pavx1bhSqlz/bNcdTAwMWN1SVx1MDAxZEZcZslcdTAwMTDTwlxcadJTkzx2I1ZeLYkkXHUwMDA2sZdKNCNO/NiNxnNK7elQxcKfXHUwMDBmalx1MDAwM+Jwq0KGqMFXJlxu4XozvCmJKzJmZv5+6ulxdP1DXklIkynXXG5PXHUwMDEwfnCMhO3dUqW0w62tLV1cdTAwMTd3zs5KutnayOr2/Vx1MDAxObmeuGuyXHUwMDA2sYhcdTAwMDVIXHUwMDAzPqNcdTAwMWGE1MwoTqdcdTAwMTJGUepcctKm3PSiXHUwMDEx6Vx1MDAxNVx1MDAwMyhxVG9hNbeDopGBiVx1MDAwM63o1OpcdTAwMWaUOCje3dXhaLpcdTAwMTDYb8vt0t31t1Kz8m2xUutm+qopXHKRXHUwMDFhbSdTXHUwMDFmpyDi6fv05DcngZDHSP8tqt3r48WSK1x1MDAxZVVXXHUwMDE2b29Wzl5cdTAwMWGNLHas2dJk7Zi0lHhFQOBkqk/VXHUwMDA3Slx1MDAwMFwiTFx1MDAwZlx1MDAwMP9cYvanyIBcdTAwMThcdTAwMWNzREVcdTAwMDH/ZIRybtDpi1xmRGihg+JwTyHIviPGXHUwMDAw78VVLlx1MDAwMeL+/MND80q5neuz3YuOOJzf81x1MDAxN+o3XHUwMDFjME7MXeVhsexTRkGkS/D2I0u6Ulx1MDAwZmLuauH1sj2/vmHnl0J56/X0U0i6VVxm2MZcbip9cC5Fdlx1MDAxNbiH/Fx0XHUwMDE5nUByOcVMt2CcS0NcdTAwMTVcdTAwMTNSYDuDXHUwMDFjVmBUb1x1MDAxOKJcImTKs/U5MO+dTp5PTFvQZ1x1MDAxYq7lyH/MS/b1heFhXHUwMDA3MVx1MDAwZWi72dq93FNn5ijUl1x1MDAwZm6b1f3KwnrhsyhcdTAwMDDnwGaBXHUwMDFhXaROXHUwMDFl9lx1MDAwNKeIwZOORfGIlJpeKclENEAghiRmroyzny9cdTAwMTVIqoDQmSpAZdSUTFx1MDAxYr33Q3fcXFwtrHTt0vP1y/qrLZ00XHUwMDE29axn05zRzFx1MDAwN9hMzyOqtJCUfitcdTAwMTlNb0aES2fXbnrMn1x1MDAxM5F+9SPa+Vx1MDAxMv6c0m9lM+VcdTAwMWW/X1NcdTAwMTHh6HLf3j9bX6iu1bRcXGheby6p56Vuq/VcdTAwMTksv1x1MDAxM55cdE+kcsStqdOjVEjejPDU66BtcEPIaIJcdTAwMTNlOVT2/6NkKv7ycmDhN2JcckGE0lpRP8pcdTAwMDCAr1x1MDAxMcxDJ1x1MDAxMHhcdCqx5f1cdTAwMWTBXHUwMDE2QVxufFNu09NnRPix2/5HV3hcdTAwMGJLdCtEPI5/XHUwMDAwcCfOkzjj1ItcdTAwMTOk917BKieafzPXXHUwMDAzflx1MDAxM1o7o6goiSdZvdIylbdcXLag/liOSLpcdTAwMDJcXKajXHUwMDBl2UlxXHUwMDE3iPg8wLSlglx1MDAxYlx1MDAxMONcdTAwMWN3Pd/u7V+urm1uPCzNvy7WQq1iXHUwMDBmso67ZsxQWVx1MDAxYXhcdTAwMWIoU00jWlJcdTAwMTA1OMaDwq2wWmCxIbWgP2OoIE7UdVx1MDAwNSUm5vlBXHUwMDBlWlx1MDAxMLNcdTAwMWH1zELcqIg+XGYwVI663mRurfOXoZphQ+WYXHUwMDBlgVqNgqFcdTAwMTZzYcb7uGdcXHOhaE41oi1jU82UxIpJ9KuwJIjm85s9M1x1MDAwNfNtuT6ZXHUwMDFj0zLlXHUwMDA0XHUwMDEwMrNa0lx1MDAxYWHHa1x1MDAxZW9try6VnyrrO92DlaM5XHUwMDE3Ls4v57NySLNcdTAwMTNAOMcoLaxtxFvkequ85Y9cdTAwMDJT1J0jXHUwMDA1fFx1MDAwM59cIm3CRFx1MDAwMlxia4hTIZ/R7J9cdTAwMWVAhFic2J86osGDjo9+jn2my9vVouZFVdtcdTAwMTWnm8eLO5t3JzMv91x1MDAxMTu/pC5zXHUwMDBlo5NyyXDY2lma6Ul8XCLZXHUwMDFl2Vx1MDAwMi1Vwk9IvaWTcki8XG4+zmTdXHUwMDEzeqp6XG5RUyBRxnDh+otcdTAwMGVhXHUwMDFjqcUvXGYuOvxyyp/BKWdcdFx1MDAwMv1cdTAwMTT6ZWBMJ5hZgKxi9r6PfFCbQLy2o1x1MDAwM3R/93Bxe1Z+UKbEO/VcdTAwMWK7u3ZwP4PT01L1aFopJlx1MDAxY5UpWo6YJMXyzfFgaPwljKLxU+wgXHUwMDE3TjNcdTAwMWJRQFia+TuwVUAqhvjRQkh0kKa//NjAiVx1MDAxM1n8VOpYplZ9/Cgr56WH/Zf11fvHpafVxdb62WXp91RcdTAwMWb/XHUwMDFlqzLVKlxcakJcdTAwMTIyuk+UgLAm0eZsiCDBXHUwMDA2yk1YRVOZ8pajxipHXHUwMDEzdqRccsHSgUty6pi1NFx1MDAwNd1KRVx1MDAwM8xULjNLQZjArFFBOu2IpTbZxtUn8WPavex6pyyrp3GLPOnRyEZvsPjOvtFcdTAwMTOMRs5cdTAwMTJHOpcqhfqtYUJcdTAwMDFM4+lcdTAwMDJW8ClOiVx1MDAxMcR7XHUwMDEwqFOP6NPdSHVORmqAfy5cdTAwMDbjnVlcdTAwMDcyXHUwMDFmKnOaxzdpx6RqosW3OW47XeiU3sskSpqGsCUoYTKDXHUwMDE16YQzyo9R0Vx1MDAxNOY37s41X7FH63tXhUJzvnu3kXXIl9K6n9fV3uPu6Wquplx1MDAxYaqmJVwiLFx1MDAxYclgjEmecnjPXHUwMDE5NTBcdTAwMDCtSZrbOL1Gco94ifiXXHUwMDAzXGa71vGZTL0pJJlv+TtUkVQwLOMjXGJcdTAwMDeHKoe3pf319cb82crDY0mWnlx1MDAwZi5cdTAwMWV0nNf7e+dmW6m229k8WtitPlx1MDAxZt17+XRcdTAwMWF+bSxjYVx1MDAxOGNpiimF6tJnp6joRsJXjSH+NetcdTAwMGau63x9d55fvTZ4+7w1v+p/p/iP4KpcdTAwMTCGs2BcdTAwMTDiXHUwMDFhhdgnnpV+XHUwMDBi1TlcdTAwMGJOXCKKp5pdOcVmXmJs4DRcZtZcdTAwMWLnvVx1MDAxY+irXHUwMDAy84iYqFXRXHUwMDAw1UjVXHUwMDFmrEeF6krkJdCfT7bmS+e3XHUwMDBil0f3j+unpe7Nml2em45cdTAwMDJMmlx1MDAwM2psvZgtND69XHUwMDE4P6rFXGJcdTAwMWNiQUR6PJE3XHUwMDE31KMgPTeCXHUwMDA23MKY5y3mWbCKhnvS/GHjfZLjT1x1MDAxMblcYs3/lID1xuWP1SFcdTAwMWZD1oTT5qzmSVTPOLFXOVx1MDAwNMnaK2N9bndcdTAwMWSiXHUwMDAwoVx1MDAwM+JcdTAwMDQraFxmbLK5zjJFM4RpXGYhdlx1MDAwZfCft5pgNMbF0ThcIk1VvTpxdulcdTAwMTmRJzpNXHUwMDFjjsT2kM/vJ5nCYzBcdTAwMWM30Fx1MDAxYqlSXHUwMDA0f1x1MDAwZVx1MDAwZZXjppJcdTAwMDOjKUj5QVxmXHJcdTAwMTT1VlFcdTAwMTkmwqLkapHxet+7ULl9julnXHUwMDE3XHUwMDEyT1ZoXCLiooDIXHUwMDEyq8VcYmyGmnGahG05kSpcdTAwMDJn29RyUkqDzcOywnHnXHUwMDBiXG5N83N4XHUwMDA2VHZB+ahe1vHHVemIalx1MDAxNuFcdTAwMWOPZp/mrof41FCMwYlcdTAwMTFcdTAwMWQykZC85L3w+dScWI5yOdLSXGZcInyl5LSpglx1MDAwMTz1zkV9ok6H/Fx1MDAwMFXQeHolifPDa4htUpJcdTAwMGLEuFx1MDAwMoXRUGdJuVx1MDAxN50/XHUwMDAzXHUwMDFj3lxuW0BcdTAwMWPuhOI2OVxmsSBoci1H5KVcdTAwMTFFa0S9I8gyUZRB8PF1LO556jTOXHUwMDEwXHSRI4kh1lx1MDAxMp4/VJzGNZK8Ylx1MDAwM4JcdTAwMTPZXHT3P/mN6UtcdK6Izlx1MDAwMNJcIvEsk1xcdZT3ilxig2kmooBCjrJgQmpTSYPoXHUwMDAw8t1cdI+gvylcdTAwMWSVybHxXHUwMDBlXHUwMDAySoBWeWhcdTAwMWWMZD5hKlxmXHUwMDAyjWWnkn9Jn0o+lKT1kWGEMfRD1yukzKNcdPlcdTAwMGJcdTAwMWFmXHUwMDA1zc/kdJBcdTAwMGL7J/6VfdXlz3grpDyESmpcdPFPQ+Vo+Jvmudae+FXhgDxNjYWCQCxcdTAwMTKLeUajlCPyWHxl6Ucg4mEuSJhmmiaraPRtcsGUW87PgU2Fzlx1MDAxNVx1MDAxNiu7NVxcOlx1MDAxODJr/Oj9XGbXrati63mhaTdcdTAwMWbWT3dcdTAwMWVfasf2Nos0bXaAvmJ4XGbcqah9Q6W6Sj3xXHRcdTAwMDRAb6/JPU/xKFx1MDAxYVx1MDAxNtCYQNNjhZNGhFx1MDAwMUjfUOJcblx1MDAwNlx1MDAxMlx1MDAwZV2QXHUwMDAx7q/kXHUwMDA2doB3jlx1MDAxM5p8If1/XG7ST1x1MDAxOdAk81x1MDAxNyBS3Fx1MDAwMdj82j3PYFx1MDAwMYCWIY08uFx1MDAxNGaQjMbGIybFL4JFXHUwMDFjIXBcdTAwMTiyWFxut7t8OJhynTLhmpJBSsjfXHUwMDFjMb8rJ2GoqatcdTAwMWPRQVx1MDAwMvymPHE+XHUwMDA3m/BE8uFcdTAwMDCptKWKJ+GSu5NEJ1x1MDAwMlhcdTAwMDRYx6HHectJTSVcdTAwMDPceMKChiudOvtgXHUwMDFlxlx1MDAwMreVU3GKzse+kjhQYUTw671EXFyVXHUwMDA0l0SRQlXNXHUwMDAwToYwdX7JKD5BcuWJRYQ4V0RyPUVcdTAwMTQpgYYoeU/QLp/4nTMl3ijOgc518u5JR9ypVJBDTlx1MDAxZoFKrqxIYuyTNFx1MDAwYp5cYp+Awlx1MDAxM6GIwi/DXCKQJMBeifAmV1iG3z5FgY/UVLakKOuYXHUwMDFmiVx1MDAwNKYooKLBPVx1MDAwZeKQXGa8qOBcdTAwMTbgXHUwMDBiRt0gOlQj1O9cdTAwMTK9n3X4/Vx1MDAxMFx1MDAwNS+lSGAsTWFPhLCj78pHXGK8XHUwMDA084rIii3lj7xJXHUwMDA2StiepME2+JV4XHUwMDEzosZ8M5BcdTAwMTL+1O7wXHUwMDE1qX+MONVcdTAwMTEq5YpKXCJcYieC18RypIY0oFx1MDAxOHGNXHUwMDAx2sz9rpZBXHUwMDBlXHUwMDAy8Vxc6oAnnGRi7HO9uVx1MDAwMDBp1UJcdTAwMTJQjr9cXGBcdTAwMTKYXHUwMDE5/t1cdTAwMTA3sUyqhVx1MDAwZYzMllx1MDAwNFxullx1MDAxY1x1MDAxN0eZNkCUY/BcdTAwMTbAqLDjyfSBxq1cYnjeNFx1MDAxNdHS9fz1gKKg29pcdTAwMGKSLphLk5bjuKD4XHUwMDExoi3agtIw8NzjL0jfz1x0clx1MDAwMYqG3UHZXHUwMDFk9fskXHUwMDBmpGn4tFY07D4grkOAN8KJtCZcIlx1MDAxZiqedlShmCxsV1x1MDAxNF32kiku/+tKw5RcIuOEv/FcXLyXKStlXHUwMDAyol+4XHUwMDEyYlx1MDAwMVx1MDAxYSH6gFHGnaZcdTAwMTJKXCK7RlifkD5Y0fA26YLC31x1MDAxMWiwaL14wFx1MDAxZuOai9aDmYK1c1x1MDAwMvKEXHUwMDAwaYR0XHUwMDEzjVKWsO+IjDiRuSSXg3unxCQlTaKgbIT1LCPpo4JRXHUwMDFhlZh8vFHxsItGo0DkdT5Je0FS64SHziprXHUwMDE1ed6E9HlIkiGGeVx1MDAxOFqElzx/WEi/l05cIlxmgYeB61wiSiC5UVhjoU/kX1x1MDAxMDhCXFy5TG4vXHUwMDFlq6qQf/fSn0hcYotlNkjYVsRAxIEm8zNcdTAwMWJDbYtigkPqYK244S64/JvXXHUwMDA3wJK4XHUwMDE2z8dcdTAwMDC3wf5JPDKRq2s/XHUwMDE1SGfVdsBvZFx1MDAwNtI0ekFcdTAwMTMl7+g1bYe311x1MDAxYrXOvVtcXJs7P62dbKjrucfrXHUwMDE5XHUwMDBmpGFcdTAwMWKYhoRIyiBykSruUFx1MDAxNv6BuuKoJdrr6TGsXHRKJSqayFx1MDAwMDtEdY1cdTAwMDOOjFx1MDAwN7DYuKBcdTAwMWNcdTAwMTH85cTN96XO4k2x+7z5fFdfPJg/W1q4K8x/9iPi3q4+UiWy2uxWr9pcdTAwMTFcdTAwMDXNR0tFPsp+M/BXT7kyXHUwMDA0TjW7elXTsMdYOjyfPvfgZfmifrV0Plc/8NvPLctrxawq9okr+qAqrlx1MDAxMdRcXFx1MDAxM60osVRaXHUwMDFhXHUwMDFiltJzXHUwMDAziG+EoMhcdTAwMTGAb4qVIeJtwpuiY22FZ1wiXHUwMDA3sLBccnnP3yQ3NKEp0bA/WO9cdTAwMWbqlZX1x05j/mBvfXvnrvx8fnV0XHUwMDFi1/v1Zb0q1lx1MDAwZXdcdTAwMTZcdTAwMTeM2KjOi5VcdTAwMTdeLP1ivYdhjU1cbplWXHUwMDFieMyf9019XHUwMDA1RqBDq9FLQypcdTAwMGZcdTAwMGK2vLVWu7xZvWqtbV9cdTAwMTe92Nj+nfI/iqPzwKdcdTAwMTaQRFpPg9rSRO9A13RCQHhcdTAwMGZcdTAwMGVoit1LVlx1MDAwMuRcdTAwMDfK5Ulcbrj8gOptzqxEQFxylaTYNs6H26tccqHB4vmDZE5cdTAwMWW37Upn43z57L7wunR9eT93d/v42TUg9mj+6NRwpqREn+6TkTFB8fBux/hcdTAwMDFSn780zlx1MDAwNjfW4KmHXTtv5172XHUwMDBluqvldvd+bXH99XjmXHJcdTAwMDZcclx1MDAwZpWBJnxIZdOTcj1cdTAwMWSXS2U00dJcdTAwMWI1hDLiZ12mIX5HTkRcdTAwMDCKXHUwMDA2YVx1MDAwZSomU3Tqy1x1MDAxZPVlKpru2+8x4fhcdTAwMTFsZZDN/+H24qfUIJsh0VM/9OhO89i1XHUwMDFmb85cdTAwMWXqW/fLL829O3/TtkdZw9dmRVx1MDAwNyxcdTAwMTHiwshQflx1MDAxN6qQYlxmXG40XHUwMDA0h8MweUE86lOkRiRcbmEtudJwzVx0isZecKiINsNKqSMmx0Fz0iNuXGaiV/zSgfF0IGSTx1x1MDAxMYVcdPfKjZ4k6Z6rpdZTcfl27qlaM/YpdGqFWXdcdTAwMDWWXHUwMDEyn4qmY+JmKJ7yXHUwMDA0TjFcdTAwMTdcZqc6XHUwMDA07+1cdTAwMTS1gHhKPVx1MDAxNfDrQDRFZkDsZDhTQVx1MDAwNeLzXHUwMDEzXsbHXHUwMDE5vY9no7TWl1x1MDAwZYyeI7Q8M3OghFxiVojRfcDa9c7yS7d51tns2oO6ssuNTiWL7npWhN9Yg8hIkYRcdTAwMDdnTFx1MDAxOMB07TRCXHUwMDExXHUwMDFhkECNsVOTf5qqRilCjceOXY1IdK1cdTAwMTSl201ubc2OOSretVx1MDAxYdf3d+JUnq7dzpVrauGzS3xvV1x1MDAxZslcdTAwMTFutprESE0hVOLa9FOEg37z9OmwRTZLqlx1MDAxNFFF7Fx1MDAxOFxmL4+lk7mL+935m4eL+fnGizgtbfmsXHUwMDFj4WxNbFx1MDAxMIhpmCNcYiWok934ZJu7d1x1MDAxY85cdTAwMTBvgoshqp3p+Ts60KZcdTAwMWFgJ5TXXlxm5HnJndhcdTAwMTCVk5qJdIBOmsCF5lx1MDAwN8QysdNcdTAwMWGxK7JZ3iWwm3bCjIHfQqdysLXyUj9fkE9i5ejy2p41Zn+QkFSc0TEunXGpYFPMXHJCcEG8ataJ4G1s+ubkXHUwMDFiwzhzXHUwMDE2oTpcdTAwMWMmTVx1MDAxMVFcdTAwMDOSf0JaRkUm0DGuuHJxXHJ7XHUwMDFmsUvu1pnPRd6wftk8Xinfrc7xu/mF6nZ1fXXxoDhcdTAwMTZ5gyPu5nFcdTAwMTQm9lx1MDAxYyc7YjfiWdFcdTAwMTRcdTAwMWFcdTAwMDGHUO2vXHUwMDFlMKONnrWThlx1MDAxZTQ1TPm+XHUwMDFi+2fQRmTKNP1cdTAwMTQs7pSiXHUwMDEyXG4oXHUwMDFlXHUwMDE1XHUwMDA25Zf+YTlJw0m8XHUwMDE1UfotuV6/evRcdTAwMTb8K/7vcYF+dr7TeUlcdTAwMTVGfPRcdTAwMDPCwaL+ISOZnog0TSNJSVx1MDAxNGs8XHKFJuLRNNInXHUwMDBlXaBcdTAwMDJPhyVcYjCnN6vJekZbkLBxb1B/XHUwMDE0pE/j2eDKJjGZ6eNcdTAwMDCdulx1MDAwMT9koD5cdTAwMDTQl9u1u7vqtFx1MDAwNq3lePo0Zu/bzFiA/a9cdTAwMWb24Hvp7m6/i7v6bqW/P9aqT3NcdTAwMDPoSy+jXHUwMDFmciCRqpNWVSOX9u+//v3/McPRziJ9 + + - - AICA Edge PCHTTPAutomation ServerWeb BrowserREST APIRobotForceSensorApplication Graph and EditorCameraIntegrationMonitoringGripper \ No newline at end of file + + + + + + AICA + Edge PC + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + HTTP + + + + + + + + Automation Server + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Web Browser + + + + + + + + + + + + + + + + + + + + + + + + + REST + API + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Robot + + + + + + + + + + + + + + + + + + + Force + + Sensor + + + + + + + Application Graph and + Editor + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Camera + + + + + + + + + + + + + + + + + + + + Integration + + + + + + + + + + + + + + + + + + + + + + + Monitoring + + + + + + + + + + + + + + + + + + + + + + + Gripper + + + \ No newline at end of file diff --git a/docs/docs/getting-started/compatibility/_category_.json b/docs/docs/getting-started/compatibility/_category_.json index 2516fd289..c513af183 100644 --- a/docs/docs/getting-started/compatibility/_category_.json +++ b/docs/docs/getting-started/compatibility/_category_.json @@ -1,8 +1,8 @@ { - "label": "Compatibility", - "position": 1, - "link": { - "type": "generated-index", - "description": "Learn about the System's compatibility with different OSs and hardware." - } + "label": "Compatibility", + "position": 1, + "link": { + "type": "generated-index", + "description": "Learn about the System's compatibility with different OSs and hardware." + } } diff --git a/docs/docs/getting-started/compatibility/supported-hardware.md b/docs/docs/getting-started/compatibility/supported-hardware.md index cec15e2f7..cfab238bf 100644 --- a/docs/docs/getting-started/compatibility/supported-hardware.md +++ b/docs/docs/getting-started/compatibility/supported-hardware.md @@ -22,28 +22,28 @@ drivers. This allows you to expand the supported hardware list by using open sou ## Robotic manipulators -| Brand | Robot Controller | Add-ons | Additional Notes | -|--------------|-----------------------------|---------|------------------| -| [ABB](/core/examples/guides/abb-hardware-interface) | OmniCore | Robot Web Services, Externally Guided Motion | RobotWare 7.X | -| [FANUC](/core/examples/guides/fanuc-hardware-interface) | R-30iB Plus, R-30iB Mate Plus, R-30iB Mini Plus, R-50iA | J516 Stream Motion, R912 Remote Motion | | -| KUKA | KR C5, KR C4, KR C3 | RobotSensorInterface | | -| Mecademic | n/a | n/a | TCP/IP & EtherCAT drivers for Meca500 | -| Stäubli | CS9, CS8C | alter, advCtrlFunctions | TX2 series | -| [Universal Robots](/core/examples/guides/ur-harware-interface) | Polyscope > 5.X | n/a | | -| Franka Emika | n/a | Fast Research Interface | beta version available | -| Kassow | n/a | KORD CBun | beta version available | -| Kinova | Gen3 | n/a | beta version available | -| UFACTORY | n/a | n/a | beta version available | +| Brand | Robot Controller | Add-ons | Additional Notes | +|----------------------------------------------------------------|---------------------------------------------------------|----------------------------------------------|---------------------------------------| +| [ABB](/core/examples/guides/abb-hardware-interface) | OmniCore | Robot Web Services, Externally Guided Motion | RobotWare 7.X | +| [FANUC](/core/examples/guides/fanuc-hardware-interface) | R-30iB Plus, R-30iB Mate Plus, R-30iB Mini Plus, R-50iA | J516 Stream Motion, R912 Remote Motion | | +| KUKA | KR C5, KR C4, KR C3 | RobotSensorInterface | | +| Mecademic | n/a | n/a | TCP/IP & EtherCAT drivers for Meca500 | +| Stäubli | CS9, CS8C | alter, advCtrlFunctions | TX2 series | +| [Universal Robots](/core/examples/guides/ur-harware-interface) | Polyscope > 5.X | n/a | | +| Franka Emika | n/a | Fast Research Interface | beta version available | +| Kassow | n/a | KORD CBun | beta version available | +| Kinova | Gen3 | n/a | beta version available | +| UFACTORY | n/a | n/a | beta version available | ## Peripherals -| Brand | Supported Devices | Requirements | Additional Notes | -|--------------|-----------------------------|------------------------------|------------------| -| SCHUNK | EGU, EGK, EZU mechatronic grippers | Modbus RTU or Ethernet-based (PROFINET, Ethernet/IP, and EtherCAT) interface | | -| ATI | Force / Torque Sensors | Net F/T interface | | -| Bota Systems | Force / Torque Sensors | Serial or EtherCAT interface | | -| [Orbbec](/core/examples/guides/orbbec-component) | Gemini 33X/435Le/2/2L, Femto Bolt/Mega, Astra 2 | n/a | | -| [Intel RealSense](/core/examples/guides/realsense-component) | L515, D4XX | n/a | | +| Brand | Supported Devices | Requirements | Additional Notes | +|--------------------------------------------------------------|-------------------------------------------------|------------------------------------------------------------------------------|------------------| +| SCHUNK | EGU, EGK, EZU mechatronic grippers | Modbus RTU or Ethernet-based (PROFINET, Ethernet/IP, and EtherCAT) interface | | +| ATI | Force / Torque Sensors | Net F/T interface | | +| Bota Systems | Force / Torque Sensors | Serial or EtherCAT interface | | +| [Orbbec](/core/examples/guides/orbbec-component) | Gemini 33X/435Le/2/2L, Femto Bolt/Mega, Astra 2 | n/a | | +| [Intel RealSense](/core/examples/guides/realsense-component) | L515, D4XX | n/a | | :::tip @@ -57,13 +57,13 @@ provided your host machine can natively mount them as USB devices. Along with consumer-grade computers that can be configured to work with the AICA framework, we have extensively used and validated the operation of the framework with the following IPCs: -| Manufacturer | Model | Available GPU | GPU Support | Notes | -|--------------|------------------|:--------------:|:-------------:|-----------------------------------------------------------------------------------| -| Siemens | SIMATIC BX-39A | No | No | Industrial OS; various hardware configurations supported | -| Siemens | SIMATIC IPC 547J | No | No | Ubuntu real-time OS; various hardware configurations supported | -| Beckhoff | C6043 | Yes | Yes | Ubuntu real-time OS; various hardware configurations supported, incl. GPU support | -| Bosch | ctrlX X3 | No | No | ctrlX OS (development purposes only; limited computational resources | -| Bosch | ctrlX X7 | Yes (optional) | No | ctrlX OS | +| Manufacturer | Model | Available GPU | GPU Support | Notes | +|--------------|------------------|:--------------:|:-----------:|-----------------------------------------------------------------------------------| +| Siemens | SIMATIC BX-39A | No | No | Industrial OS; various hardware configurations supported | +| Siemens | SIMATIC IPC 547J | No | No | Ubuntu real-time OS; various hardware configurations supported | +| Beckhoff | C6043 | Yes | Yes | Ubuntu real-time OS; various hardware configurations supported, incl. GPU support | +| Bosch | ctrlX X3 | No | No | ctrlX OS (development purposes only; limited computational resources | +| Bosch | ctrlX X7 | Yes (optional) | No | ctrlX OS | In many occasions, setting up these machines/OSs may require some more nuanced configuration steps. For additional or specialized support on getting these machines up and running you may always [contact us](mailto:contact@aica.tech). \ No newline at end of file diff --git a/docs/docs/getting-started/installation/_category_.json b/docs/docs/getting-started/installation/_category_.json index cddfc45f1..0cb40ba07 100644 --- a/docs/docs/getting-started/installation/_category_.json +++ b/docs/docs/getting-started/installation/_category_.json @@ -1,8 +1,8 @@ { - "label": "Installation", - "position": 2, - "link": { - "type": "generated-index", - "description": "Learn how to install and launch the System on your machine." - } + "label": "Installation", + "position": 2, + "link": { + "type": "generated-index", + "description": "Learn how to install and launch the System on your machine." + } } diff --git a/docs/docs/getting-started/installation/installation-and-launch.md b/docs/docs/getting-started/installation/installation-and-launch.md index 89464fd8e..e52163745 100644 --- a/docs/docs/getting-started/installation/installation-and-launch.md +++ b/docs/docs/getting-started/installation/installation-and-launch.md @@ -60,7 +60,7 @@ configuration steps are taken. Note that some limitations may apply regarding co The majority of Studio and Launcher features are available on macOS. However: - Forwarding graphics is currently impossible due to MacOS' incompatibility with OpenGL 2.1+. As a result, tools like -RViz will not be made available through AICA Launcher. + RViz will not be made available through AICA Launcher. - Realtime applications may be subject to performance limitations due to MacOS' resource management. ::: @@ -78,6 +78,7 @@ configuration, it is possible to AICA Launcher is not available on Windows, nor does the Ubuntu version of Launcher work with WSL. In addition, the following limitations may apply: + - Networking, port and graphics forwarding may require additional configuration. - Realtime applications may be subject to performance limitations due to Windows hypervisor resource management, which might be particularly problematic when working with robots, sensors, and other peripherals. diff --git a/docs/docs/getting-started/installation/proxies.md b/docs/docs/getting-started/installation/proxies.md index d46e8d58d..d08b9ab68 100644 --- a/docs/docs/getting-started/installation/proxies.md +++ b/docs/docs/getting-started/installation/proxies.md @@ -4,7 +4,8 @@ title: Proxies import DockerDesktopProxies from './assets/docker-desktop-proxies.png' -AICA programs sometimes need Internet connectivity to function. This section details the services that must be allowlisted on your proxy for each and how to configure your computer to use it. +AICA programs sometimes need Internet connectivity to function. This section details the services that must be +allowlisted on your proxy for each and how to configure your computer to use it. ## Services @@ -29,7 +30,8 @@ AICA Launcher: As our products rely on Docker, you will need to configure your Docker daemon to use your proxy. -Check [this guide](https://docs.docker.com/engine/cli/proxy/) for instructions on how to configure your Docker daemon to use your proxy. +Check [this guide](https://docs.docker.com/engine/cli/proxy/) for instructions on how to configure your Docker daemon to +use your proxy. This can also be done through the UI if using Docker Desktop. @@ -76,7 +78,8 @@ Starting with v5.0, Core supports the following environment variables for proxy - HTTPS: `HTTPS_PROXY` or `https_proxy` - Bypass: `NO_PROXY` or `no_proxy` -You must provide the environment variables to Core when starting the container. If you choose to intercept HTTPS traffic, you will also need to mount your certificate inside `/etc/ssl/certs`. +You must provide the environment variables to Core when starting the container. If you choose to intercept HTTPS +traffic, you will also need to mount your certificate inside `/etc/ssl/certs`. Example: @@ -87,7 +90,8 @@ docker run %ANY_OTHER_DOCKER_OPTIONS% -e HTTP_PROXY -e HTTPS_PROXY -e NO_PROXY -
MacOS -If you use a local proxy on macOS, you will need to change the host from `localhost` or `127.0.0.1` to `host.docker.internal`. +If you use a local proxy on macOS, you will need to change the host from `localhost` or `127.0.0.1` to +`host.docker.internal`. Example: `-e HTTP_PROXY=http://localhost:8000` becomes `-e HTTP_PROXY=http://host.docker.internal:8000` diff --git a/docs/docs/reference/custom-components/_category_.json b/docs/docs/reference/custom-components/_category_.json index f948de889..7e47b9891 100644 --- a/docs/docs/reference/custom-components/_category_.json +++ b/docs/docs/reference/custom-components/_category_.json @@ -3,7 +3,6 @@ "position": 4, "link": { "type": "generated-index", - "description": "The AICA application framework can be extended with custom components in addition to the standard library", - + "description": "The AICA application framework can be extended with custom components in addition to the standard library" } } diff --git a/docs/docs/reference/custom-components/aica-package-migrations.md b/docs/docs/reference/custom-components/aica-package-migrations.md index c0225a570..1b7b2ca58 100644 --- a/docs/docs/reference/custom-components/aica-package-migrations.md +++ b/docs/docs/reference/custom-components/aica-package-migrations.md @@ -5,17 +5,23 @@ title: Migrating from older versions of package-builder # Migrating from older versions of `package-builder` -While we try to keep the syntax of `package-builder` as stable as possible, sometimes we need to make breaking changes to improve the developer experience or to fix bugs. This document will help you migrate your existing `package-builder` configuration to the latest version. +While we try to keep the syntax of `package-builder` as stable as possible, sometimes we need to make breaking changes +to improve the developer experience or to fix bugs. This document will help you migrate your existing `package-builder` +configuration to the latest version. ## Migrating from `0.0.x` Here are the major changes when moving from `0.0.x` to `1.0.0`: -- `[metadata.version]` is now mandatory and the previous fields `[metadata.name]` and `[metadata.ros-name]` are now respectively `[metadata.collection.name]` and `[metadata.collection.ros-name]`. +- `[metadata.version]` is now mandatory and the previous fields `[metadata.name]` and `[metadata.ros-name]` are now + respectively `[metadata.collection.name]` and `[metadata.collection.ros-name]`. - `[build.environment.aica.libraries]` and `[build.environment.aica.ros]` have been merged into `[build.dependencies]`. - `[build.cmake_args]` has been renamed `[build.cmake-args]`. -- `[build.environment.ssh]` and `[build.environment.image]` have been moved to `[build.ssh]` and `[build.image]` respectively. +- `[build.environment.ssh]` and `[build.environment.image]` have been moved to `[build.ssh]` and `[build.image]` + respectively. :::note -`package-builder` will now do extra checks to ensure all your `[build.dependencies]` are compatible with `[build.image]`. In order to do that, you will need to upgrade the version in those fields to newer ones which incorporate the necessary metadata. +`package-builder` will now do extra checks to ensure all your `[build.dependencies]` are compatible with +`[build.image]`. In order to do that, you will need to upgrade the version in those fields to newer ones which +incorporate the necessary metadata. ::: diff --git a/docs/docs/reference/custom-components/aica-package-toml.md b/docs/docs/reference/custom-components/aica-package-toml.md index 522f5f8b5..8a12b5eef 100644 --- a/docs/docs/reference/custom-components/aica-package-toml.md +++ b/docs/docs/reference/custom-components/aica-package-toml.md @@ -45,7 +45,8 @@ the Docker syntax and version used to build the package. You can find the available versions [here](https://github.com/orgs/aica-technology/packages/container/package/package-builder). -The upcoming sections describe the syntax for the `package-builder` version `1.0.0` and later. If you are migrating from an older version, please refer to the corresponding guide: +The upcoming sections describe the syntax for the `package-builder` version `1.0.0` and later. If you are migrating from +an older version, please refer to the corresponding guide: - [Migrating from `0.0.X`](./aica-package-migrations#migrating-from-00x) @@ -62,7 +63,9 @@ type = "ros" #### `[build.ssh]` -Optional. Default is `false`. If set to `true`, any call to `CMake`, `pip` or custom stage will have access to the SSH credentials given to Docker with `--ssh default`. This is useful if you need to clone a private repository in CMakeLists.txt or install a private Python package from git. +Optional. Default is `false`. If set to `true`, any call to `CMake`, `pip` or custom stage will have access to the SSH +credentials given to Docker with `--ssh default`. This is useful if you need to clone a private repository in +CMakeLists.txt or install a private Python package from git. ```toml title="aica-package.toml" [build] @@ -71,7 +74,9 @@ ssh = false #### `[build.image]` -Required. `[build.image]` is the tag of the AICA `ghcr.io/aica-technology/ros2-ws` image that will be used to build the components. Those images are tagged after the versions of the ROS 2 distributions and are available [here](https://github.com/aica-technology/docker-images/pkgs/container/ros2-ws). +Required. `[build.image]` is the tag of the AICA `ghcr.io/aica-technology/ros2-ws` image that will be used to build the +components. Those images are tagged after the versions of the ROS 2 distributions and are +available [here](https://github.com/aica-technology/docker-images/pkgs/container/ros2-ws). ```toml title="aica-package.toml" [build] @@ -91,7 +96,8 @@ USE_FEATURE_X = "ON" #### `[build.apt-repos]` -Optional. This category allows you to add extra APT repositories to the image. This is useful if you need to install some packages that are not available in the default repositories, which is common for third-party packages. +Optional. This category allows you to add extra APT repositories to the image. This is useful if you need to install +some packages that are not available in the default repositories, which is common for third-party packages. Multiple syntaxes are supported: @@ -102,7 +108,9 @@ Multiple syntaxes are supported: cuda = { deb-uri = 'https://developer.download.nvidia.com/compute/cuda/repos/ubuntu2204/{{ if eq .Arch "amd64" }}x86_64{{else}}sbsa{{end}}/cuda-keyring_1.0-1_all.deb' } ``` -Note that `{{ if eq .Arch "amd64" }}x86_64{{else}}sbsa{{end}}` is a template that will be replaced by `x86_64` if the architecture is `amd64` and `sbsa` otherwise. See [here](https://pkg.go.dev/text/template) for more information on the templating syntax. +Note that `{{ if eq .Arch "amd64" }}x86_64{{else}}sbsa{{end}}` is a template that will be replaced by `x86_64` if the +architecture is `amd64` and `sbsa` otherwise. See [here](https://pkg.go.dev/text/template) for more information on the +templating syntax. ##### Using a repository (with an optional keyring) @@ -115,7 +123,8 @@ components = ["main"] keyring = "https://librealsense.intel.com/Debian/librealsense.pgp" # optional ``` -Note that in this case we use a subcategory to specify the property of this repository, but it can also be expressed using the `{}` syntax like the previous example: +Note that in this case we use a subcategory to specify the property of this repository, but it can also be expressed +using the `{}` syntax like the previous example: ```toml title="aica-package.toml" [build.apt-repos] @@ -128,16 +137,19 @@ Optional. `[build.dependencies]` is used to specify the AICA libraries and ROS 2 image. :::note -Those libraries and packages will not be available at runtime, only while building. If you need them for building _and_ running, add them to the `[build.packages.XYZ.dependencies]` section below instead. -Libraries that are only required at runtime, and not at build time, can be declared with `[build.run-dependencies]` instead. +Those libraries and packages will not be available at runtime, only while building. If you need them for building _and_ +running, add them to the `[build.packages.XYZ.dependencies]` section below instead. +Libraries that are only required at runtime, and not at build time, can be declared with `[build.run-dependencies]` +instead. ::: :::note -Those libraries and packages are built for specific versions of ROS 2, so make sure that the version you are using is compatible with your `[build.image]`. +Those libraries and packages are built for specific versions of ROS 2, so make sure that the version you are using is +compatible with your `[build.image]`. ::: Components usually require the `control-libraries` library. You can find the available -versions [here](https://github.com/aica-technology/control-libraries/pkgs/container/control-libraries). +versions [here](https://github.com/aica-technology/control-libraries/pkgs/container/control-libraries). Components usually also require the `modulo` package. You can find the available versions [here](https://github.com/aica-technology/modulo/pkgs/container/modulo). @@ -148,7 +160,9 @@ available yet. ::: :::note -Starting with version `1.0.0` of the `package-builder`, all libraries and packages need to have special metadata associated in their image. This is done automatically when building with newer versions of `package-builder`. This means you won't be able to use older versions of certain libraries and packages with newer versions of `package-builder`. +Starting with version `1.0.0` of the `package-builder`, all libraries and packages need to have special metadata +associated in their image. This is done automatically when building with newer versions of `package-builder`. This means +you won't be able to use older versions of certain libraries and packages with newer versions of `package-builder`. ::: ```toml title="aica-package.toml" @@ -160,7 +174,9 @@ Starting with version `1.0.0` of the `package-builder`, all libraries and packag ##### Adding version constraints -Because `package-builder` will use your dependencies in the metadata of the component, the version of the dependencies will be expected when the component is used. You can tweak _which_ exact version is expected by using version constraints. +Because `package-builder` will use your dependencies in the metadata of the component, the version of the dependencies +will be expected when the component is used. You can tweak _which_ exact version is expected by using version +constraints. ```toml title="aica-package.toml" [build.dependencies] @@ -168,7 +184,9 @@ Because `package-builder` will use your dependencies in the metadata of the comp ``` :::note -By default, the version constraint is derived from the given version. It will be `~> X.Y` where `X` and `Y` are the major and minor versions of the given version. This means that any version with the same major version and a minor version greater than or equal to the given minor version will be accepted. +By default, the version constraint is derived from the given version. It will be `~> X.Y` where `X` and `Y` are the +major and minor versions of the given version. This means that any version with the same major version and a minor +version greater than or equal to the given minor version will be accepted. ::: :::note @@ -177,7 +195,9 @@ You can find more information about version constraints and their syntax [here]( ##### Adding build-time dependencies -Sometimes you might want to add a library but not require it in the metadata of your component. We call those dependencies build-only dependencies. This might be useful when using a static library that is built into your component and thus is not needed at runtime. +Sometimes you might want to add a library but not require it in the metadata of your component. We call those +dependencies build-only dependencies. This might be useful when using a static library that is built into your component +and thus is not needed at runtime. ```toml title="aica-package.toml" [build.dependencies] @@ -190,7 +210,10 @@ You can also add version constraints to build-only dependencies. #### `[build.run-dependencies]` -Optional. This field is similar to `[build.dependencies]` but its content is not downloaded and added to the image during the build. Instead, the information contained there is used in the metadata of your component. When someone uses your component, they will be notified that they need to use a specific version of the added dependencies matching the one specified in this section. +Optional. This field is similar to `[build.dependencies]` but its content is not downloaded and added to the image +during the build. Instead, the information contained there is used in the metadata of your component. When someone uses +your component, they will be notified that they need to use a specific version of the added dependencies matching the +one specified in this section. ```toml title="aica-package.toml" [build.run-dependencies] @@ -198,7 +221,8 @@ Optional. This field is similar to `[build.dependencies]` but its content is not ``` :::note -The value expected for each entry is not a version but a version constraint. You can find more information about this concept and its syntax in the corresponding section [here](#version-constraints). +The value expected for each entry is not a version but a version constraint. You can find more information about this +concept and its syntax in the corresponding section [here](#version-constraints). ::: #### `[build.packages]` @@ -229,9 +253,11 @@ source = "different-folder/event-more" Optional. This category allows you to specify the APT packages that will be installed in the image. This is useful if you need to install some system dependencies. -By default, available packages are based on the Ubuntu version used by the specified version of ROS2. You can find the list of +By default, available packages are based on the Ubuntu version used by the specified version of ROS2. You can find the +list of packages [here](https://packages.ubuntu.com/) and the Ubuntu version used by the ROS2 -distribution [here](https://docs.ros.org/en/iron/Installation/Ubuntu-Install-Debians.html). See [this section](#buildapt-repos) to learn how to add extra APT repositories. +distribution [here](https://docs.ros.org/en/iron/Installation/Ubuntu-Install-Debians.html). +See [this section](#buildapt-repos) to learn how to add extra APT repositories. :::tip You can either provide a version to be installed or `*` to install the latest available version. @@ -342,11 +368,13 @@ description = "My awesome component" #### `[metadata.collection]` -Required when using multiple `[build.packages]`, otherwise ignored. This must contain the names of the collection being built (the set of multiple components). +Required when using multiple `[build.packages]`, otherwise ignored. This must contain the names of the collection being +built (the set of multiple components). `[metadata.collection.name]` is required. It is the name of the collection. -`[metadata.collection.ros-name]` is optional. This must be specified if `[metadata.collection.name]` is not a valid ROS package name. +`[metadata.collection.ros-name]` is optional. This must be specified if `[metadata.collection.name]` is not a valid ROS +package name. ```toml title="aica-package.toml" [metadata.collection] @@ -395,15 +423,20 @@ source = "build-context://my_source" ##### Version constraints -Version constraints follow the syntax of the [Terraform version constraints](https://www.terraform.io/docs/language/expressions/version-constraints.html) which is similar to syntax used by NPM, yarn or pip. Here is a quick summary: +Version constraints follow the syntax of +the [Terraform version constraints](https://www.terraform.io/docs/language/expressions/version-constraints.html) which +is similar to syntax used by NPM, yarn or pip. Here is a quick summary: - Versions constraints are composed of one or more conditions separated by commas, e.g. `>= 1.0.0, < 2.0.0`. - Each version specified must be a valid [semver](https://semver.org/) version, e.g. `1.0.0`. - The following operators are supported: - - `=` or no operator: allow only the exact version, cannot be combined with other conditions. - - `!=`: exclude a specific version. - - `>`, `>=`, `<`, `<=`: comparison against a specific version, allowing any version matching the operator. `>` allows newer version and `<` allows older version. - - `~>`: allows only the right most number of the version to increase. This is useful to allow only patch or minor versions to increase, e.g. `~> 1.0` allows `1.1`, `1.2`, etc. but not `2.0` and `~> 1.0.0` allows `1.0.1`, `1.0.2`, etc. but not `1.1.0`. + - `=` or no operator: allow only the exact version, cannot be combined with other conditions. + - `!=`: exclude a specific version. + - `>`, `>=`, `<`, `<=`: comparison against a specific version, allowing any version matching the operator. `>` + allows newer version and `<` allows older version. + - `~>`: allows only the right most number of the version to increase. This is useful to allow only patch or minor + versions to increase, e.g. `~> 1.0` allows `1.1`, `1.2`, etc. but not `2.0` and `~> 1.0.0` allows `1.0.1`, + `1.0.2`, etc. but not `1.1.0`. ### Examples diff --git a/docs/docs/reference/custom-components/component-package.md b/docs/docs/reference/custom-components/component-package.md index 4dd87999c..dca3a774a 100644 --- a/docs/docs/reference/custom-components/component-package.md +++ b/docs/docs/reference/custom-components/component-package.md @@ -15,7 +15,8 @@ A lot of the information in this page is also available in the README of the tem ::: -Custom components can be defined in ROS 2 packages and used alongside the standard library of AICA components in Core. Components can be implemented in C++ or Python. A component package can contain multiple +Custom components can be defined in ROS 2 packages and used alongside the standard library of AICA components in Core. +Components can be implemented in C++ or Python. A component package can contain multiple components in either language. ## Package infrastructure diff --git a/docs/docs/reference/manual-installation-launch.md b/docs/docs/reference/manual-installation-launch.md index 08dd65c94..4ac1badc6 100644 --- a/docs/docs/reference/manual-installation-launch.md +++ b/docs/docs/reference/manual-installation-launch.md @@ -80,14 +80,15 @@ The default settings of Docker Desktop are usually sufficient for everything Stu (e.g., settings carried over from older Docker Desktop installations) you may need to verify the following: - Go to the Settings menu (usually located at the top right as a gear icon), then click on Advanced and make sure to -`Allow the default Docker socket to be used (requires password)` and `Allow privileged port mapping (requires password)`. + `Allow the default Docker socket to be used (requires password)` and + `Allow privileged port mapping (requires password)`.
Required advanced options
- If you notice any performance issues, go to Resources in the Settings menu and increase the CPU and memory limits to -your application's needs. + your application's needs.
Optional resource allocation @@ -130,7 +131,7 @@ reach out to the AICA team. Windows Features Enable Hyper-V
-2. Restart your computer for the changes to take effect. +2. Restart your computer for the changes to take effect. 3. [Download and install the Linux kernel update package](https://learn.microsoft.com/en-us/windows/wsl/install-manual#step-4---download-the-linux-kernel-update-package). 4. Open PowerShell or Windows Command Prompt in **administrator** mode and run ```shell @@ -302,7 +303,8 @@ You can start the AICA application container with the following command. :::note -Change `/path/to/aica-license.toml` in the command below to the location of the `aica-license.toml` file from above. For example, +Change `/path/to/aica-license.toml` in the command below to the location of the `aica-license.toml` file from above. For +example, use `~/.aica-license.toml` to keep the license file hidden in the home folder. ::: From 2025e058fc37f7df5eeeff4d7900e1282e82e296 Mon Sep 17 00:00:00 2001 From: Enrico Eberhard Date: Fri, 18 Sep 2026 14:16:26 +0200 Subject: [PATCH 06/13] feat: replace AICA applications with System applications --- docs/docs/concepts.md | 4 +- docs/docs/concepts/aica-applications.md | 10 ++--- .../building-blocks/controllers/gpio.md | 4 +- docs/docs/concepts/building-blocks/events.md | 4 +- docs/docs/concepts/building-blocks/frames.md | 2 +- docs/docs/concepts/building-blocks/signals.md | 2 +- .../concepts/ros-concepts/built-on-ros.md | 2 +- docs/docs/getting-started.md | 40 ++++++++++--------- docs/docs/reference.md | 2 +- .../custom-components/_category_.json | 2 +- .../custom-components/package-building.md | 2 +- .../reference/manual-installation-launch.md | 34 ++++++++-------- docs/docs/reference/yaml-syntax.md | 4 +- 13 files changed, 58 insertions(+), 54 deletions(-) diff --git a/docs/docs/concepts.md b/docs/docs/concepts.md index 6cace4c01..6f4823c9d 100644 --- a/docs/docs/concepts.md +++ b/docs/docs/concepts.md @@ -6,13 +6,13 @@ title: Concepts AICA Universe is built on open and extensible standards. This section introduces the core concepts behind the AICA System, including its ROS integration, robotics foundations, and application building blocks. Explore the topics below -for detailed explanations to help you design and develop your own AICA applications and components. +for detailed explanations to help you design and develop your own System applications and components. - [ROS 2 concepts](/docs/category/ros-2-concepts): Understand how the System leverages ROS, including nodes, lifecycle management, URDF, TF, and dynamic composition. - [Robotics concepts](/docs/category/robotics-concepts): Discover key robotics principles such as motion generation and how they are applied within the System. - [Application building blocks](/docs/category/application-building-blocks): Learn about building blocks that form the - foundation of AICA applications. + foundation of System applications. Use these resources as a guide to deepen your understanding and accelerate your development with the System. \ No newline at end of file diff --git a/docs/docs/concepts/aica-applications.md b/docs/docs/concepts/aica-applications.md index 8d3d3447d..4723a0f1f 100644 --- a/docs/docs/concepts/aica-applications.md +++ b/docs/docs/concepts/aica-applications.md @@ -1,9 +1,9 @@ --- sidebar_position: 3 -title: AICA applications +title: Applications --- -# AICA applications +# Applications The ROS 2 concepts of managed lifecycle nodes and dynamic composition (and by extension, lifecycle components) enable more stateful and modular building blocks for complex applications. A lifecycle component can be flexibly instantiated @@ -36,9 +36,9 @@ description. ## The Event Engine -The Event Engine (EE) is responsible for managing the states of all the elements of an AICA application. +The Event Engine (EE) is responsible for managing the states of all the elements of a System application. -An AICA application is an interconnected graph of **components**, **controllers** and **hardware interfaces**. +a System application is an interconnected graph of **components**, **controllers** and **hardware interfaces**. Components process data in a periodic step function and transfer data as **signals** to other components and controllers. Hardware interfaces are drivers that connect controllers to robots. @@ -60,4 +60,4 @@ In the System, applications are formally described in a YAML file. An applicatio represented as a graph of building blocks (components, controllers, hardware interfaces) connected by signals and events. -The next sections describe the key elements of an AICA application in more detail. \ No newline at end of file +The next sections describe the key elements of a System application in more detail. \ No newline at end of file diff --git a/docs/docs/concepts/building-blocks/controllers/gpio.md b/docs/docs/concepts/building-blocks/controllers/gpio.md index 793c46aa2..705c9357e 100644 --- a/docs/docs/concepts/building-blocks/controllers/gpio.md +++ b/docs/docs/concepts/building-blocks/controllers/gpio.md @@ -22,7 +22,7 @@ GPIO controllers enable applications to: AICA provides **generic GPIO controllers** that are specialized for a single responsibility: -- **Broadcasting controllers** expose GPIO state to the AICA application +- **Broadcasting controllers** expose GPIO state to the System application - **Output controllers** command GPIO values on the hardware ## GPIOs in robot models @@ -84,7 +84,7 @@ low-level drivers. ### GPIO Broadcaster Controller The GPIO Broadcaster Controller is responsible for **observing GPIO state** and making it available to the rest of the -AICA application. +System application. It requires two parameters: diff --git a/docs/docs/concepts/building-blocks/events.md b/docs/docs/concepts/building-blocks/events.md index 9f2bc8ca9..213ac612b 100644 --- a/docs/docs/concepts/building-blocks/events.md +++ b/docs/docs/concepts/building-blocks/events.md @@ -5,7 +5,7 @@ title: Events # Events -Events are discrete actions that change the dynamic state of an AICA application. They are handled and executed by the +Events are discrete actions that change the dynamic state of a System application. They are handled and executed by the Event Engine. For this reason, they are sometimes referred to as "state events". ## Event types @@ -56,7 +56,7 @@ the case of setting up an application, where a controller might need to be loade interface is loaded. It often also applies to the case of handling errors, such that when a component is unloaded or enters into an error state, a controller or other component should be deactivated accordingly. -Every valid state transition on any component, controller or hardware interface in an AICA application can be easily +Every valid state transition on any component, controller or hardware interface in a System application can be easily associated with one or more events to be triggered when that state transition occurs. ### Sequences diff --git a/docs/docs/concepts/building-blocks/frames.md b/docs/docs/concepts/building-blocks/frames.md index 585d6fb9b..520673a28 100644 --- a/docs/docs/concepts/building-blocks/frames.md +++ b/docs/docs/concepts/building-blocks/frames.md @@ -9,7 +9,7 @@ The page on [TF in ROS](../ros-concepts/tf) discusses the importance of spatial TF can be thought of as a live database that keeps track of coordinate frames and their relationships over time. The AICA System leverages this framework internally and facilitates interaction with TF. In particular, user-defined -frames are directly included in an AICA application and are available to all components at runtime. These so-called +frames are directly included in a System application and are available to all components at runtime. These so-called **application frames** can be created and modified in the 3D scene view, and their poses will be updated in real time. :::tip diff --git a/docs/docs/concepts/building-blocks/signals.md b/docs/docs/concepts/building-blocks/signals.md index f2e546c50..d5624c6c5 100644 --- a/docs/docs/concepts/building-blocks/signals.md +++ b/docs/docs/concepts/building-blocks/signals.md @@ -84,7 +84,7 @@ library for Cartesian and joint state classes in C++ and Python. ## Custom messages The standard primitive and state message types are generally enough to cover the majority of messaging needs in -an AICA application. Having a reduced message definition set is important to maximizing the modularity and compatibility +a System application. Having a reduced message definition set is important to maximizing the modularity and compatibility of components. When components are connected by a signal in an application graph, the application interpreter will try to assert that the signals have a matching type. diff --git a/docs/docs/concepts/ros-concepts/built-on-ros.md b/docs/docs/concepts/ros-concepts/built-on-ros.md index 9cc2ffb3b..3eedab1f3 100644 --- a/docs/docs/concepts/ros-concepts/built-on-ros.md +++ b/docs/docs/concepts/ros-concepts/built-on-ros.md @@ -17,7 +17,7 @@ ROS comes from the abstractions provided by community packages and extensions th can be combined to solve complex problems. The System is built on ROS 2, but it is not intended to supersede existing ROS 2 distributions, packages or -tools. AICA applications and building blocks are **fully compatible with existing ROS packages** and community tools and +tools. System applications and building blocks are **fully compatible with existing ROS packages** and community tools and can be used and deployed alongside them. diff --git a/docs/docs/getting-started.md b/docs/docs/getting-started.md index 1c9af3407..0fb29b4f6 100644 --- a/docs/docs/getting-started.md +++ b/docs/docs/getting-started.md @@ -20,6 +20,18 @@ between different parts of our software stack. +## System + +The **System** is a software ecosystem comprising: + +- **Core**: a powerful robotics workspace and runtime engine (Core) +- **Studio**: a graphical user interface for editing, running and monitoring **System applications** +- **Extensions**: collections of components, controllers, or hardware interfaces hosted on our registry that extend the + capabilities of Core and Studio +- **Launcher**: a desktop app that can install and run Studio with Core and add-on packages in just a few clicks +- **Component SDK**: tooling to extend the base library with custom extensions that will work seamlessly alongside + native components + ## Core **Core** is a virtual robotics workspace pre-configured with a growing collection of software modules @@ -31,8 +43,9 @@ The workspace is the foundation and the software modules are the building blocks ## Applications -An **application** is a particular configuration of components, controllers and hardware interfaces from the Core, -generally designed to perform a particular task. +A **System application** is a configuration of components, controllers, and hardware interfaces that are parameterized +and connected in a specific way, generally designed to perform a particular task. One of the main functions of Core is +to load and run System applications. :::tip We develop bespoke applications to solve specific automation challenges for clients, and offer more general smart @@ -45,21 +58,12 @@ our service offerings. ## Studio -**Studio** is the graphical user interface layer to Core that empowers developers to build and -extend their own advanced robotic applications. The interactive application editor can be used to dynamically edit, run -and monitor robot behaviors. Monitor robot and sensor state data directly in the browser, and manage application states -and events precisely through predicates, transitions, conditions, sequences, or interactive buttons. - -## System - -The **System** is the software ecosystem that extends Core and Studio. While Core comes bundled with -the basics, we are continually developing additional collections of components, controllers, or hardware interfaces -that suit particular use-cases or types of robots. These first-party add-on packages are available to download from -the registry. +**Studio** is the graphical user interface layer to Core that empowers developers to build and extend their own advanced +robotic applications. The interactive System application editor can be used to dynamically edit, run, and monitor robot +behaviors. Monitor robot and sensor state data directly in the browser, and manage application states and events +precisely through predicates, transitions, conditions, sequences, or interactive buttons. -In addition to Core, Studio, and our package registry, the System additionally includes the following -products and resources: +## Launcher -- **Launcher** is a desktop app that can install and run Studio with Core and add-on packages in just a few clicks -- The **Component SDK** allows developers to extend the base library with custom functionality that will work seamlessly - alongside native components +**Launcher** is a desktop application to easily package and run a System image from a desired version of Core and any +number of official extensions from our registry or custom extensions built from the SDK. \ No newline at end of file diff --git a/docs/docs/reference.md b/docs/docs/reference.md index fb727a901..011807ba5 100644 --- a/docs/docs/reference.md +++ b/docs/docs/reference.md @@ -5,4 +5,4 @@ title: Programming Reference # Programming Reference AICA Universe is built on open and extensible standards. The following sections provide specific information, -references and examples for developers wishing to write their own AICA applications or components. \ No newline at end of file +references and examples for developers wishing to write their own System applications or components. \ No newline at end of file diff --git a/docs/docs/reference/custom-components/_category_.json b/docs/docs/reference/custom-components/_category_.json index 7e47b9891..1f4499447 100644 --- a/docs/docs/reference/custom-components/_category_.json +++ b/docs/docs/reference/custom-components/_category_.json @@ -3,6 +3,6 @@ "position": 4, "link": { "type": "generated-index", - "description": "The AICA application framework can be extended with custom components in addition to the standard library" + "description": "The application framework can be extended with custom components in addition to the standard library" } } diff --git a/docs/docs/reference/custom-components/package-building.md b/docs/docs/reference/custom-components/package-building.md index 4c63faaff..d1ef71f47 100644 --- a/docs/docs/reference/custom-components/package-building.md +++ b/docs/docs/reference/custom-components/package-building.md @@ -5,7 +5,7 @@ title: Building a component package # Building a component package -To use custom components in AICA applications, the component package must be built and then included in the AICA image +To use custom components in System applications, the component package must be built and then included in the AICA image workspace. The easiest way to do this is to use a `aica-package.toml` file. ## Creating a `aica-package.toml` file diff --git a/docs/docs/reference/manual-installation-launch.md b/docs/docs/reference/manual-installation-launch.md index 4ac1badc6..c4076c569 100644 --- a/docs/docs/reference/manual-installation-launch.md +++ b/docs/docs/reference/manual-installation-launch.md @@ -18,9 +18,9 @@ import dockerNetwork from './assets/win-docker-network.png'; # Manual installation and launch The following sections explain how to install and launch Core and any additional packages manually from the command -line without the use of AICA Launcher. The pre-requisites are still a valid license and a host with Docker installed. -For the rest of this guide, it will be assumed that a valid license has been saved to a file called `aica-license.toml` -on the host machine. +line as a **System container** without the use of AICA Launcher. The pre-requisites are still a valid license and a host +with Docker installed. For the rest of this guide, it will be assumed that a valid license has been saved to a file +called `aica-license.toml` on the host machine. ## Configuring Docker manually on Linux, macOS or Windows @@ -43,7 +43,7 @@ some AICA Launcher functionalities will not work out-of-the-box (e.g., attaching #### Configuring the Docker context `desktop-linux` will typically be the default context when starting up your system. To avoid the above limitations, -make sure to change the context before building or executing AICA applications, or running AICA Launcher. +make sure to change the context before building or executing System applications, or running AICA Launcher. See the available contexts on your system: @@ -214,12 +214,12 @@ only Core as the `core` package. The version can be changed according to the ava :::info In the past, you might have seen applications using the `aica-package.toml` filename. While you can use any filename as -we do not enforce any, we recommend using `aica-application.toml` to avoid confusion with the `aica-package.toml` file +we do not enforce any, we recommend using `aica-system.toml` to avoid confusion with the `aica-package.toml` file which is used for building packages using `package-builder`. ::: -```toml title="aica-application.toml" +```toml title="aica-system.toml" #syntax=ghcr.io/aica-technology/app-builder:v2 [core] @@ -241,7 +241,7 @@ use older versions of certain libraries and packages with newer versions of `app ::: -```toml title="aica-application.toml" +```toml title="aica-system.toml" #syntax=ghcr.io/aica-technology/app-builder:v2 [core] @@ -264,7 +264,7 @@ package that was locally built using `docker build [...] --tag my-custom-compone `docker-image://my-custom-component-package`. Community and third-party packages may also be available on other docker registries such as DockerHub or GitHub Container Registry and can be included with the associated docker path. -```toml title="aica-application.toml" +```toml title="aica-system.toml" #syntax=ghcr.io/aica-technology/app-builder:v2 [core] @@ -288,18 +288,18 @@ to access AICA packages. ::: Once the desired packages have been configured in a manifest file, a `docker build` command can be used to build the -runtime application image. In this example, a manifest file saved as `aica-application.toml` is used to build an image +runtime application image. In this example, a manifest file saved as `aica-system.toml` is used to build an image with the name `aica-runtime`. ```shell -docker build -f aica-application.toml -t aica-runtime . +docker build -f aica-system.toml -t aica-runtime . ``` The command `docker image ls | grep aica-runtime` should then list the `aica-runtime` image. -## Starting the application container +## Starting the System container -You can start the AICA application container with the following command. +You can start the System container with the following command. :::note @@ -397,15 +397,15 @@ longer that a few seconds: ::: -## Stopping the application container +## Stopping the System container -To shut down the AICA application container at any time, press CTRL+C in the original terminal window. Alternatively, -to stop the application container from a different terminal window, look up the container name +To shut down the System container at any time, press CTRL+C in the original terminal window. Alternatively, +to stop the System container from a different terminal window, look up the container name with `docker container ps` and then run `docker container stop `. ### Persistent user data -AICA applications, URDF hardware and user configurations managed through the API or Studio are stored in a +System applications, URDF hardware and user configurations managed through the API or Studio are stored in a database. Because the docker container is isolated from the host filesystem, the local database will be lost when the container exits. To persist local data between sessions, create a dedicated directory somewhere on the host. For example, use `mkdir ~/.aica-data` to keep the data folder hidden in the home folder. Then execute the normal run command @@ -522,7 +522,7 @@ Visit [localhost:8080/api](http://localhost:8080/api) to see the Swagger UI and ## Connect a terminal session to the container -It is sometimes useful to connect to the application container while it is running to inspect files or run commands. +It is sometimes useful to connect to the System container while it is running to inspect files or run commands. This can be accomplished with the `docker container exec` command using the container name. :::note diff --git a/docs/docs/reference/yaml-syntax.md b/docs/docs/reference/yaml-syntax.md index 71bacc900..34c479be5 100644 --- a/docs/docs/reference/yaml-syntax.md +++ b/docs/docs/reference/yaml-syntax.md @@ -5,7 +5,7 @@ title: YAML application syntax # YAML application syntax -The following sections define the YAML syntax used to describe an AICA application. +The following sections define the YAML syntax used to describe a System application. ## Overview @@ -960,7 +960,7 @@ my_button: ## Validating a YAML application The [YAML application schema](https://docs.aica.tech/schemas/1-4-1/application.schema.json) defines the structural rules -of an AICA application and effectively distinguishes between valid and invalid syntax. +of a System application and effectively distinguishes between valid and invalid syntax. Many modern IDEs and code editors can be configured to support custom schemas and provide in-line validation and completion of the YAML content. From 2310464c15efc7204ad2f2e476090ce6531539d0 Mon Sep 17 00:00:00 2001 From: Enrico Eberhard Date: Fri, 18 Sep 2026 14:53:49 +0200 Subject: [PATCH 07/13] feat: replace AICA Launcher with Launcher and other references --- docs/docs/concepts.md | 7 ++-- .../concepts/building-blocks/components.md | 6 ++-- .../building-blocks/controllers/gpio.md | 4 +-- .../building-blocks/controllers/index.md | 4 +-- docs/docs/concepts/building-blocks/events.md | 6 ++-- docs/docs/concepts/building-blocks/frames.md | 1 - .../building-blocks/hardware-interfaces.md | 8 ++--- docs/docs/concepts/building-blocks/signals.md | 10 +++--- docs/docs/concepts/going-further.md | 6 ++-- .../robotics-concepts/motion-generation.md | 2 +- .../concepts/ros-concepts/_category_.json | 2 +- .../concepts/ros-concepts/built-on-ros.md | 4 +-- .../compatibility/operating-system.md | 14 ++++---- .../compatibility/supported-hardware.md | 6 ++-- .../installation/installation-and-launch.md | 35 +++++++++---------- .../getting-started/installation/licensing.md | 25 +++++++------ .../getting-started/installation/proxies.md | 12 +++---- docs/docs/reference.md | 2 +- .../custom-components/aica-package-toml.md | 6 ++-- .../component-descriptions.md | 4 +-- .../custom-components/component-package.md | 2 +- .../custom-components/custom-component.md | 4 +-- .../custom-components/package-building.md | 4 +-- .../reference/manual-installation-launch.md | 28 +++++++-------- docs/docs/reference/yaml-syntax.md | 14 ++++---- 25 files changed, 107 insertions(+), 109 deletions(-) diff --git a/docs/docs/concepts.md b/docs/docs/concepts.md index 6f4823c9d..0b4293437 100644 --- a/docs/docs/concepts.md +++ b/docs/docs/concepts.md @@ -4,9 +4,10 @@ title: Concepts # Concepts -AICA Universe is built on open and extensible standards. This section introduces the core concepts behind the AICA -System, including its ROS integration, robotics foundations, and application building blocks. Explore the topics below -for detailed explanations to help you design and develop your own System applications and components. +Our adaptive and intelligent control system is built on open and extensible standards. This section introduces the core +concepts behind the System, including its ROS integration, robotics foundations, and application building blocks. +Explore the topics below for detailed explanations to help you design and develop your own System applications and +components. - [ROS 2 concepts](/docs/category/ros-2-concepts): Understand how the System leverages ROS, including nodes, lifecycle management, URDF, TF, and dynamic composition. diff --git a/docs/docs/concepts/building-blocks/components.md b/docs/docs/concepts/building-blocks/components.md index 875f288eb..65e6c2f8e 100644 --- a/docs/docs/concepts/building-blocks/components.md +++ b/docs/docs/concepts/building-blocks/components.md @@ -7,7 +7,7 @@ title: Components Within a System application, components are the building blocks of advanced robot behaviors. -AICA components are wrappers for [ROS 2 nodes](../ros-concepts/nodes) +Components are wrappers for [ROS 2 nodes](../ros-concepts/nodes) and [lifecycle nodes](../ros-concepts/lifecycle-nodes) using [dynamic composition](../ros-concepts/dynamic-composition) with additional abstractions for enhanced modularity and developer convenience. @@ -18,13 +18,13 @@ specific services. ## Periodic behavior -A key design concept for AICA components is the idea of periodic behavior. +A key design concept for components is the idea of periodic behavior. In ROS, nodes are generally driven through callbacks, triggered either by a subscription, parameter change event, or service request. Nodes that wish to publish data continuously normally configure an internal timer to trigger a callback function at regular intervals. -This periodic execution is built in to AICA components by default. Components have an execution rate defined by +This periodic execution is built in to components by default. Components have an execution rate defined by a `rate` parameter (the frequency in Hertz for the number of execution steps per second), and automatically publish data attributes and predicates periodically. diff --git a/docs/docs/concepts/building-blocks/controllers/gpio.md b/docs/docs/concepts/building-blocks/controllers/gpio.md index 705c9357e..d75058efc 100644 --- a/docs/docs/concepts/building-blocks/controllers/gpio.md +++ b/docs/docs/concepts/building-blocks/controllers/gpio.md @@ -20,7 +20,7 @@ GPIO controllers enable applications to: - **Command GPIO outputs** (e.g., enable a tool, toggle a relay) - **Interact with external devices** with low latency and predictable behavior -AICA provides **generic GPIO controllers** that are specialized for a single responsibility: +Core provides **generic GPIO controllers** that are specialized for a single responsibility: - **Broadcasting controllers** expose GPIO state to the System application - **Output controllers** command GPIO values on the hardware @@ -68,7 +68,7 @@ or you may see both command and state interfaces bundled under the same group, a ``` -## Using GPIO controllers in the AICA framework +## Using GPIO controllers In a ROS 2 control setup, and by extension in Core, GPIO controllers operate on **GPIO interfaces defined in the URDF** and exposed by the underlying hardware interface. diff --git a/docs/docs/concepts/building-blocks/controllers/index.md b/docs/docs/concepts/building-blocks/controllers/index.md index eaf7f54e3..2f0114b7e 100644 --- a/docs/docs/concepts/building-blocks/controllers/index.md +++ b/docs/docs/concepts/building-blocks/controllers/index.md @@ -5,9 +5,9 @@ title: Controllers # Controllers -AICA controllers are implemented according to the [ros2_control](../../ros-concepts/controlling-robots) standard. +Controllers are implemented according to the [ros2_control](../../ros-concepts/controlling-robots) standard. -The main extension that AICA controllers make is the definition of standard interfaces to communicate +The main extension that our System controllers make is the definition of standard interfaces to communicate with components and the Event Engine in a modular way. Controllers have parameters, inputs and outputs that can be connected to components in the application, and expose predicates and transitions to drive application events. diff --git a/docs/docs/concepts/building-blocks/events.md b/docs/docs/concepts/building-blocks/events.md index 213ac612b..577889453 100644 --- a/docs/docs/concepts/building-blocks/events.md +++ b/docs/docs/concepts/building-blocks/events.md @@ -27,10 +27,10 @@ of **predicates**, **transitions**, **sequences** or **conditions**. ### Predicates Predicates are logical statements that evaluate to true or false and are used to indicate key states for either a -component or controller. AICA components and controllers broadcast any changes to their predicates to a global channel +component or controller. Components and controllers broadcast any changes to their predicates to a global channel in a message containing the source name, the predicate name, and the current value (true or false) of the predicate. -While the term "predicate" has several formal definitions in grammar, logic and mathematics, at AICA the [grammatical +While the term "predicate" has several formal definitions in grammar, logic and mathematics, here the [grammatical definition](https://en.wikipedia.org/wiki/Predicate_(grammar)) is used when naming predicates. Components define predicates depending on their function. A component that calculates if a given input state is within @@ -76,7 +76,7 @@ can be manipulated with logical operators in conditional statements to create mo > When component A _is active_ **and** component B _is **not** in bounds_, do ... -AICA conditions support the "not", "all", "any", and "one of" operators (also known as the NOT, AND, OR and XOR +Conditions support the "not", "all", "any", and "one of" operators (also known as the NOT, AND, OR and XOR operators, respectively). If a condition does not trigger an event directly, it can still be used as the input to another condition or to a conditional sequence step. diff --git a/docs/docs/concepts/building-blocks/frames.md b/docs/docs/concepts/building-blocks/frames.md index 520673a28..b951ed42a 100644 --- a/docs/docs/concepts/building-blocks/frames.md +++ b/docs/docs/concepts/building-blocks/frames.md @@ -7,7 +7,6 @@ title: Frames The page on [TF in ROS](../ros-concepts/tf) discusses the importance of spatial transforms for robotic applications. TF can be thought of as a live database that keeps track of coordinate frames and their relationships over time. The -AICA System leverages this framework internally and facilitates interaction with TF. In particular, user-defined frames are directly included in a System application and are available to all components at runtime. These so-called **application frames** can be created and modified in the 3D scene view, and their poses will be updated in real time. diff --git a/docs/docs/concepts/building-blocks/hardware-interfaces.md b/docs/docs/concepts/building-blocks/hardware-interfaces.md index 8c8c33659..bdca370de 100644 --- a/docs/docs/concepts/building-blocks/hardware-interfaces.md +++ b/docs/docs/concepts/building-blocks/hardware-interfaces.md @@ -15,7 +15,7 @@ A typical hardware interface provides the following capabilities: - Managing initialization, activation, and shutdown - Ensuring real-time safe data exchange -All AICA hardware interfaces follow the +All hardware interfaces in the System follow the [`ros2_control`](/docs/concepts/ros-concepts/controlling-robots) standard, ensuring compatibility and portability across different robots and deployments. @@ -26,7 +26,7 @@ available interfaces. ## Role in the control stack -Within the AICA control architecture, hardware interfaces sit at the **lowest level of the control stack** +Within the System control architecture, hardware interfaces sit at the **lowest level of the control stack** (see [here](/docs/getting-started#core)): - **Above** them are controllers (e.g., joint trajectory, IK, impedance, GPIO controllers) @@ -41,7 +41,7 @@ isolated, reusable, and easy to replace. See more information about our controll ## Integration with `ros2_control` -By following the `ros2_control` framework, AICA hardware interfaces: +By following the `ros2_control` framework, our hardware interfaces: - Expose standardized **state and command interfaces** - Support real-time safe update loops @@ -67,7 +67,7 @@ This allows you to: :::note -The set of included hardware interfaces may vary depending on the license and distribution of AICA software. +The set of included hardware interfaces may vary depending on the license and distribution of System software. If the platform you are looking for is not listed on the [Supported Hardware](/docs/getting-started/compatibility/supported-hardware) page, please [contact us](mailto:contact@aica.tech) to discuss availability or custom integrations. diff --git a/docs/docs/concepts/building-blocks/signals.md b/docs/docs/concepts/building-blocks/signals.md index d5624c6c5..09aabf532 100644 --- a/docs/docs/concepts/building-blocks/signals.md +++ b/docs/docs/concepts/building-blocks/signals.md @@ -25,7 +25,7 @@ between components and controllers is also simplified. Additionally, ROS 2 messages are data packets, not data objects. Parsing data from a message, manipulating it and writing it back into a message can involve a fair amount of boilerplate code. -When developing an AICA component, signals are automatically converted to and from the corresponding data object. +When developing a component, signals are automatically converted to and from the corresponding data object. ## Basic signal types @@ -45,7 +45,7 @@ In robotics and control, one of the most useful data types is the state of an ob The joint angles of a robot arm, the 3D position and velocity of a flying drone, or the measurement of an accelerometer or force-torque sensor are all examples of instantaneous state variables. -AICA signals make it easy for components and controllers to exchange Cartesian and joint state variables in an +Signals make it easy for components and controllers to exchange Cartesian and joint state variables in an internally consistent way. For component developers, state signals are automatically converted into smart data classes that provide useful functions for conversions, transformations and other manipulations. @@ -74,7 +74,7 @@ The following state variables can be exchanged as signals: -AICA state signals are built on the +State signals are built on the open-source [ `state_representation`](https://aica-technology.github.io/control-libraries/versions/v7.1.0/md__github_workspace_source_state_representation__r_e_a_d_m_e.html) library for Cartesian and joint state classes in C++ and Python. @@ -93,9 +93,9 @@ between two connected components has the same name, the application will be vali :::tip -The AICA component library +The Core component library [includes signal translator components](/core/examples/core-components/signal-interoperability) for commonly used ROS -messages (namely `sensor_msgs` and `geometry_msgs`) for AICA components to communicate with traditional ROS nodes in an +messages (namely `sensor_msgs` and `geometry_msgs`) for components to communicate with traditional ROS nodes in an external process. ::: diff --git a/docs/docs/concepts/going-further.md b/docs/docs/concepts/going-further.md index b5eaa86a6..ebeee13ff 100644 --- a/docs/docs/concepts/going-further.md +++ b/docs/docs/concepts/going-further.md @@ -1,11 +1,11 @@ --- sidebar_position: 5 -title: Going further with AICA +title: Going further --- -# Going further with AICA +# Going further -[Contact us](mailto:contact@aica.tech) to learn more about AICA and/or to request a System License. +[Contact us](mailto:contact@aica.tech) to learn more and/or to request a System License. If you already have a System License, continue on to [application examples](/core/examples) for guides and practical references on how to set up your robotic applications. diff --git a/docs/docs/concepts/robotics-concepts/motion-generation.md b/docs/docs/concepts/robotics-concepts/motion-generation.md index cdd5ac51f..f7a9088be 100644 --- a/docs/docs/concepts/robotics-concepts/motion-generation.md +++ b/docs/docs/concepts/robotics-concepts/motion-generation.md @@ -63,7 +63,7 @@ system detects a deviation from the desired path. On the other hand, a DS is abl any point in space, it still knows where to go next in order to reach the target. The function $f(x)$ that defines the behavior of a DS can be implemented analytically from mathematical rules or -optimized from a set of non-linear functions. The AICA component library includes examples of both kinds of behaviors. +optimized from a set of non-linear functions. The component library includes examples of both kinds of behaviors. :::tip diff --git a/docs/docs/concepts/ros-concepts/_category_.json b/docs/docs/concepts/ros-concepts/_category_.json index 548f69f60..2ab4de370 100644 --- a/docs/docs/concepts/ros-concepts/_category_.json +++ b/docs/docs/concepts/ros-concepts/_category_.json @@ -3,6 +3,6 @@ "position": 1, "link": { "type": "generated-index", - "description": "The next sections briefly review the most important ROS 2 concepts leveraged by the AICA framework." + "description": "The next sections briefly review the most important ROS 2 concepts leveraged by the System." } } diff --git a/docs/docs/concepts/ros-concepts/built-on-ros.md b/docs/docs/concepts/ros-concepts/built-on-ros.md index 3eedab1f3..d9505e6f2 100644 --- a/docs/docs/concepts/ros-concepts/built-on-ros.md +++ b/docs/docs/concepts/ros-concepts/built-on-ros.md @@ -6,7 +6,7 @@ title: Built on ROS 2 # Built on ROS 2 The [Robot Operating System (ROS)](https://www.ros.org) is a collection of open-source software libraries and tools -built by roboticists, for roboticists. AICA embraces the ROS philosophies of modularity, distributed processing and +built by roboticists, for roboticists. We embrace the ROS philosophies of modularity, distributed processing and extensible open standards to support increasingly advanced robot applications. At its heart, ROS 2 is a middleware publisher/subscriber mechanism that enables different processes to communicate via @@ -22,7 +22,7 @@ can be used and deployed alongside them. -**For new developers, AICA provides an easy springboard into the wider world of ROS. Advanced users can take the +**For new developers, we provide an easy springboard into the wider world of ROS. Advanced users can take the modularity and dynamic nature of the System to new frontiers.** At a glance, the System extends ROS 2 with the following features: diff --git a/docs/docs/getting-started/compatibility/operating-system.md b/docs/docs/getting-started/compatibility/operating-system.md index 9df7d347e..1e97ad565 100644 --- a/docs/docs/getting-started/compatibility/operating-system.md +++ b/docs/docs/getting-started/compatibility/operating-system.md @@ -35,7 +35,7 @@ limitations will be reduced. ### Real-time capabilities -To fully leverage the real-time capabilities of AICA controllers, the host machine needs a configured real-time kernel. +To fully leverage the real-time capabilities of controllers, the host machine needs a configured real-time kernel. This is currently possible with the Ubuntu Pro 24.04 real-time kernel or the `PREEMPT_RT` kernel patch on standard Ubuntu, but not possible on macOS. @@ -43,9 +43,9 @@ Ubuntu, but not possible on macOS. ### Summary of OS support -| OS | AICA Launcher support | Notes | -|---------------------------|:---------------------:|-----------------------------------------------------------------------------| -| Ubuntu/Debian | Yes | Real-time kernel patch highly recommended | -| Other Linux distributions | No | Requires launching Core manually. Real-time kernel patch highly recommended | -| macOS | Yes | Limited graphics forwarding due to dropped OpenGL support | -| Windows | No | Requires WSL and running Core manually | +| OS | Launcher support | Notes | +|---------------------------|:--------------------:|-----------------------------------------------------------------------------| +| Ubuntu/Debian | Yes | Real-time kernel patch highly recommended | +| Other Linux distributions | No | Requires launching Core manually. Real-time kernel patch highly recommended | +| macOS | Yes | Limited graphics forwarding due to dropped OpenGL support | +| Windows | No | Requires WSL and running Core manually | diff --git a/docs/docs/getting-started/compatibility/supported-hardware.md b/docs/docs/getting-started/compatibility/supported-hardware.md index cfab238bf..25d4cb0ee 100644 --- a/docs/docs/getting-started/compatibility/supported-hardware.md +++ b/docs/docs/getting-started/compatibility/supported-hardware.md @@ -12,8 +12,8 @@ require. :::note This list is work in progress and regularly updated. If your hardware is not listed, please submit a ticket to the -[AICA Community Feedback board](https://github.com/aica-technology/community) or reach out to the AICA team for -assistance or further details. +[Community Feedback board](https://github.com/aica-technology/community) or contact us for assistance or further +details. As described in [this section](/docs/concepts/ros-concepts/built-on-ros), the System can integrate existing ROS drivers. This allows you to expand the supported hardware list by using open source or custom-developed ROS packages. @@ -54,7 +54,7 @@ provided your host machine can natively mount them as USB devices. ## Industrial PC (IPC) support -Along with consumer-grade computers that can be configured to work with the AICA framework, we have extensively used and +Along with consumer-grade computers that can be configured to work with the System, we have extensively used and validated the operation of the framework with the following IPCs: | Manufacturer | Model | Available GPU | GPU Support | Notes | diff --git a/docs/docs/getting-started/installation/installation-and-launch.md b/docs/docs/getting-started/installation/installation-and-launch.md index e52163745..30c325679 100644 --- a/docs/docs/getting-started/installation/installation-and-launch.md +++ b/docs/docs/getting-started/installation/installation-and-launch.md @@ -9,7 +9,7 @@ title: Installation and launch The System software is distributed with Docker images and executed with Docker containers. That is, it can practically be installed on any system that supports recent Docker versions. However, due to performance advantages (e.g., real-time -task execution), AICA suggests using Linux-based platforms that can be easily configured for such considerations. +task execution), we suggest using Linux-based platforms that can be easily configured for such considerations. Before proceeding, you will need to install Docker Engine on the host machine. Depending on your platform, the installation process may vary or require additional steps. Below, you will find instructions per operating system: @@ -17,9 +17,9 @@ installation process may vary or require additional steps. Below, you will find
Linux -While AICA currently distributes AICA Launcher for Debian-based systems, other distributions where Docker can be +While we currently distribute Launcher for Debian-based systems, other distributions where Docker can be installed work equally as well through any browser. You may find distribution-specific instructions to install Docker -Engine [here](https://docs.docker.com/engine/install/) and follow the manual installation steps to build and run AICA +Engine [here](https://docs.docker.com/engine/install/) and follow the manual installation steps to build and run Core [here](/docs/reference/manual-installation-launch). It is **recommended** that you skip the installation of Docker Desktop for Linux (see below). @@ -60,7 +60,7 @@ configuration steps are taken. Note that some limitations may apply regarding co The majority of Studio and Launcher features are available on macOS. However: - Forwarding graphics is currently impossible due to MacOS' incompatibility with OpenGL 2.1+. As a result, tools like - RViz will not be made available through AICA Launcher. + RViz will not be made available through Launcher. - Realtime applications may be subject to performance limitations due to MacOS' resource management. ::: @@ -76,7 +76,7 @@ configuration, it is possible to :::note -AICA Launcher is not available on Windows, nor does the Ubuntu version of Launcher work with WSL. In addition, the +Launcher is not available on Windows, nor does the Ubuntu version of Launcher work with WSL. In addition, the following limitations may apply: - Networking, port and graphics forwarding may require additional configuration. @@ -87,31 +87,31 @@ following limitations may apply:
-## AICA Launcher +## Launcher -AICA Launcher is the easiest way to get up and running with the System. It manages licensing, package distribution +Launcher is the easiest way to get up and running with the System. It manages licensing, package distribution and the Docker toolchain so that no command-line access is necessary. It also embeds Studio: Edge directly inside the launcher. ### Installation -Find the latest release on the AICA GitHub organization under https://github.com/aica-technology/api/releases, and -search for AICA Launcher (for -example, [AICA Launcher v1.2.0](https://github.com/aica-technology/api/releases/tag/launcher%2Fv1.2.0)). +Find the latest release on the GitHub organization under https://github.com/aica-technology/api/releases, and +search for Launcher (for +example, [Launcher v2.0.1](https://github.com/aica-technology/api/releases/tag/launcher%2Fv2.0.1)). Download the prebuilt launcher app based on your operating system and architecture. For example, `aica-launcher-linux-amd64.zip` for Linux machines with an AMD processor or `aica-launcher-darwin-arm64.zip` for macOS on Apple Silicon. -Unzip the file and extract the AICA Launcher executable to your machine, then launch it by double-clicking or +Unzip the file and extract the Launcher executable to your machine, then launch it by double-clicking or right-clicking to start the program. :::tip -On macOS, you may be unable to open the AICA Launcher app because of default security settings. +On macOS, you may be unable to open the Launcher app because of default security settings. ``` -“AICA Launcher” can’t be opened because Apple cannot check it for malicious software. +“Launcher” can’t be opened because Apple cannot check it for malicious software. ``` To bypass this, right-click on the app and choose Open, and then click Open on the dialog that appears. @@ -120,7 +120,7 @@ To bypass this, right-click on the app and choose Open, and then click Open on t ### Entering a System License -When the AICA Launcher is started for the first time (or after explicitly logging out), you will be prompted to enter +When Launcher is started for the first time (or after explicitly logging out), you will be prompted to enter your System License. As an example, the online license key to enter might look similar to `5614D1-3E7A6C-932DEB-8C4189-F6B0F2-V3`. @@ -128,11 +128,11 @@ your System License. As an example, the online license key to enter might look s Once the license is copied into the text field, it will automatically check the validity of the license and log in if successful. If the license is not recognized, check your internet connection -or contact AICA support. +or contact support. ### Configuring the System image -AICA Launcher provides direct access to Core and Studio, and additionally simplifies installing add-on packages +Launcher provides direct access to Core and Studio, and additionally simplifies installing add-on packages from the registry or from custom SDK contributions. A "configuration" refers to a specific version of Core and the extra packages and versions that should be included. @@ -161,5 +161,4 @@ the image has been built, launching the configuration a second time will be much ## Manual installation and launch For advanced users or users that deal with headless machines, the login, build and launch steps described here can also -be performed [manually from the command line](/docs/reference/manual-installation-launch) instead of using AICA -Launcher. \ No newline at end of file +be performed [manually from the command line](/docs/reference/manual-installation-launch) instead of using Launcher. \ No newline at end of file diff --git a/docs/docs/getting-started/installation/licensing.md b/docs/docs/getting-started/installation/licensing.md index 06329066e..c23a0156f 100644 --- a/docs/docs/getting-started/installation/licensing.md +++ b/docs/docs/getting-started/installation/licensing.md @@ -10,17 +10,17 @@ also request a Deployment Key for unrestricted offline usage rights of specific ## System License -A license regulates both the access rights to download AICA software packages and the usage rights to run AICA -applications. To request a System License, contact the AICA sales team at contact@aica.tech. Each new user will -receive access instructions to a personal account for the [AICA license manager](https://licensing.aica.tech/list) which +A license regulates both the access rights to download software packages and the usage rights to run System +applications. To request a System License, contact the sales team at contact@ai-can-change.tech. Each new user will +receive access instructions to a personal account for the [license manager](https://licensing.aica.tech/list) which lists all licenses associated with that user. Every license has a name, an expiration date, the actual license key and a -list of entitlements. On the [AICA package registry](https://registry.licensing.aica.tech/) the user can see all +list of entitlements. On the [package registry](https://registry.licensing.aica.tech/) the user can see all available packages for one specific license. :::tip A System License includes specific entitlements that determine which add-on packages and versions can be accessed -and used. To discover and access additional components and hardware collections, contact your AICA representative to +and used. To discover and access additional components and hardware collections, contact your representative to upgrade your license. ::: @@ -28,10 +28,10 @@ upgrade your license. :::caution Your license key should be kept secret. Do not share your license key with unauthorized users or enter it on websites -other than the official AICA domain. License abuse may prevent your application from running or lead to your license +other than the official domain. License abuse may prevent your application from running or lead to your license being revoked. -If an unauthorized user has gained access to your license key, contact AICA support to reset your license. +If an unauthorized user has gained access to your license key, contact support to reset your license. ::: @@ -58,17 +58,17 @@ of the System. A Deployment Key will appear as a very long string of characters in the following format, though the specific key will be unique for each machine. -```console title="Example AICA Deployment Key" +```console title="Example Deployment Key" key/eyJ9df2jfap7IVdIHnlnNpb2482Hh2193L9io8[...]ExMWM3jAuMCJ9.YhsDjwEz8eYnwE21alSBR_tBSIjavblcziV5nBQ== ``` ### Requesting a Deployment Key -To request a Deployment Key, reach out to the AICA team. +To request a Deployment Key, reach out to the sales team. - +Continue to the next section to learn how to use Launcher with a System License to access and install Studio. --> diff --git a/docs/docs/getting-started/installation/proxies.md b/docs/docs/getting-started/installation/proxies.md index d08b9ab68..64ebf77f0 100644 --- a/docs/docs/getting-started/installation/proxies.md +++ b/docs/docs/getting-started/installation/proxies.md @@ -4,12 +4,12 @@ title: Proxies import DockerDesktopProxies from './assets/docker-desktop-proxies.png' -AICA programs sometimes need Internet connectivity to function. This section details the services that must be +The System sometimes needs Internet connectivity to function. This section details the services that must be allowlisted on your proxy for each and how to configure your computer to use it. ## Services -The following services must be allowlisted on your proxy for AICA programs to function: +The following services must be allowlisted on your proxy for the System to function: Core (Online License): @@ -17,7 +17,7 @@ Core (Online License): - `ingress-api.analytics.aica.tech` (HTTPS, 443): used to send analytics data - `api.storage.aica.tech` (HTTPS, 443): used to access your Cloud Storage -AICA Launcher: +Launcher: - `raw.githubusercontent.com` (HTTPS, 443): used to fetch Terms of Use and the OSS packages manifest - `ghcr.io` (HTTPS, 443): used to download OSS packages @@ -39,9 +39,9 @@ This can also be done through the UI if using Docker Desktop. Docker Desktop settings showing the proxies configuration under Resources > Proxies
-### AICA Launcher +### Launcher -AICA Launcher supports the following environment variables for proxy configuration: +Launcher supports the following environment variables for proxy configuration: - HTTP: `HTTP_PROXY` or `http_proxy` - HTTPS: `HTTPS_PROXY` or `https_proxy` @@ -60,7 +60,7 @@ launchctl setenv HTTP_PROXY "$HTTP_PROXY" launchctl setenv HTTPS_PROXY "$HTTPS_PROXY" ``` -This is not required if you open AICA Launcher from the command line using `open`. +This is not required if you open Launcher from the command line using `open`. diff --git a/docs/docs/reference.md b/docs/docs/reference.md index 011807ba5..7d188662b 100644 --- a/docs/docs/reference.md +++ b/docs/docs/reference.md @@ -4,5 +4,5 @@ title: Programming Reference # Programming Reference -AICA Universe is built on open and extensible standards. The following sections provide specific information, +Our System is built on open and extensible standards. The following sections provide specific information, references and examples for developers wishing to write their own System applications or components. \ No newline at end of file diff --git a/docs/docs/reference/custom-components/aica-package-toml.md b/docs/docs/reference/custom-components/aica-package-toml.md index 8a12b5eef..6114d0b9d 100644 --- a/docs/docs/reference/custom-components/aica-package-toml.md +++ b/docs/docs/reference/custom-components/aica-package-toml.md @@ -74,7 +74,7 @@ ssh = false #### `[build.image]` -Required. `[build.image]` is the tag of the AICA `ghcr.io/aica-technology/ros2-ws` image that will be used to build the +Required. `[build.image]` is the tag of the `ghcr.io/aica-technology/ros2-ws` image that will be used to build the components. Those images are tagged after the versions of the ROS 2 distributions and are available [here](https://github.com/aica-technology/docker-images/pkgs/container/ros2-ws). @@ -133,7 +133,7 @@ librealsense = { type = "deb", uri = "https://librealsense.intel.com/Debian/apt- #### `[build.dependencies]` -Optional. `[build.dependencies]` is used to specify the AICA libraries and ROS 2 packages that will be installed in the +Optional. `[build.dependencies]` is used to specify the libraries and ROS 2 packages that will be installed in the image. :::note @@ -155,7 +155,7 @@ Components usually also require the `modulo` package. You can find the available versions [here](https://github.com/aica-technology/modulo/pkgs/container/modulo). :::note -Libraries are built in a specific way to be compatible with the AICA packaging system. Custom libraries are not +Libraries are built in a specific way to be compatible with the packaging system. Custom libraries are not available yet. ::: diff --git a/docs/docs/reference/custom-components/component-descriptions.md b/docs/docs/reference/custom-components/component-descriptions.md index 6620be5ea..f2a218d41 100644 --- a/docs/docs/reference/custom-components/component-descriptions.md +++ b/docs/docs/reference/custom-components/component-descriptions.md @@ -26,8 +26,8 @@ the [Component Description JSON schema](../../../static/schemas/1-1-1/component. :::info -JSON schemas for public AICA structures and syntax can be found in the `schemas` directory of -the [API repository](https://github.com/aica-technology/api) on AICA GitHub. +JSON schemas for public structures and syntax can be found in the `schemas` directory of +the [API repository](https://github.com/aica-technology/api) on GitHub. ::: diff --git a/docs/docs/reference/custom-components/component-package.md b/docs/docs/reference/custom-components/component-package.md index dca3a774a..878dfaaf3 100644 --- a/docs/docs/reference/custom-components/component-package.md +++ b/docs/docs/reference/custom-components/component-package.md @@ -15,7 +15,7 @@ A lot of the information in this page is also available in the README of the tem ::: -Custom components can be defined in ROS 2 packages and used alongside the standard library of AICA components in Core. +Custom components can be defined in ROS 2 packages and used alongside the standard library of components in Core. Components can be implemented in C++ or Python. A component package can contain multiple components in either language. diff --git a/docs/docs/reference/custom-components/custom-component.md b/docs/docs/reference/custom-components/custom-component.md index fcafe9915..530bbcb4c 100644 --- a/docs/docs/reference/custom-components/custom-component.md +++ b/docs/docs/reference/custom-components/custom-component.md @@ -40,7 +40,7 @@ for customized behavior. These functions are `on_step_callback()` and the collec ::: Registration is the term for defining and exporting a unique class name for the component so that it can be dynamically -loaded by the AICA state engine. +loaded by the Event Engine. @@ -339,7 +339,7 @@ The supported message types are defined in the `std_msgs` library and include: - floating point array - string -For robotic applications, AICA components make it particularly easy to receive, manipulate and send joint and Cartesian +For robotic applications, components make it particularly easy to receive, manipulate and send joint and Cartesian states using the `state_representation` and `clproto` message encoding libraries. State objects can be bound to inputs or outputs and are sent in a special `EncodedState` message type. diff --git a/docs/docs/reference/custom-components/package-building.md b/docs/docs/reference/custom-components/package-building.md index d1ef71f47..7b7a7fec9 100644 --- a/docs/docs/reference/custom-components/package-building.md +++ b/docs/docs/reference/custom-components/package-building.md @@ -5,7 +5,7 @@ title: Building a component package # Building a component package -To use custom components in System applications, the component package must be built and then included in the AICA image +To use custom components in System applications, the component package must be built and then included in the System image workspace. The easiest way to do this is to use a `aica-package.toml` file. ## Creating a `aica-package.toml` file @@ -47,7 +47,7 @@ docker build -f aica-package.toml -t custom-component . ## Launching your custom component -In AICA Launcher, include the docker image path from the build step as a custom package in the system configuration. +In Launcher, include the docker image path from the build step as a custom package in the system configuration. Refer to the [installation and launch](/docs/getting-started/installation/installation-and-launch#configuring-the-system-image) diff --git a/docs/docs/reference/manual-installation-launch.md b/docs/docs/reference/manual-installation-launch.md index c4076c569..148cedd9e 100644 --- a/docs/docs/reference/manual-installation-launch.md +++ b/docs/docs/reference/manual-installation-launch.md @@ -18,7 +18,7 @@ import dockerNetwork from './assets/win-docker-network.png'; # Manual installation and launch The following sections explain how to install and launch Core and any additional packages manually from the command -line as a **System container** without the use of AICA Launcher. The pre-requisites are still a valid license and a host +line as a **System container** without the use of Launcher. The pre-requisites are still a valid license and a host with Docker installed. For the rest of this guide, it will be assumed that a valid license has been saved to a file called `aica-license.toml` on the host machine. @@ -38,12 +38,12 @@ The main issue originates from Docker Desktop for Linux creating a custom Docker to manage its images. This is rightfully done to encapsulate those images within uses of the Docker Desktop GUI, without contaminating other parts of your system. However, creating a custom context with an endpoint in your `/home` directory means you now can not use Docker with elevated privileges (e.g., external devices, forwarding graphics, ...) and that -some AICA Launcher functionalities will not work out-of-the-box (e.g., attaching to a terminal). +some Launcher functionalities will not work out-of-the-box (e.g., attaching to a terminal). #### Configuring the Docker context `desktop-linux` will typically be the default context when starting up your system. To avoid the above limitations, -make sure to change the context before building or executing System applications, or running AICA Launcher. +make sure to change the context before building or executing System applications, or running Launcher. See the available contexts on your system: @@ -119,7 +119,7 @@ The following instructions for running the System have been tested and validated 11 Professional with full administrator access. Depending on the machine at hand, some steps might be slightly different or extended access might be required. For questions, consult the [official documentation](https://learn.microsoft.com/en-us/windows/wsl/install-manual), contact your IT support, or -reach out to the AICA team. +reach out to the support team. ::: @@ -170,7 +170,7 @@ reach out to the AICA team. -## Setting up the AICA license file +## Setting up the System license file To use your System License or Deployment Key for manual installation and launch, it should be saved into a TOML-formatted file. In this guide, we use `aica-license.toml` to refer to the license file, though this filename is @@ -182,7 +182,7 @@ For a System License, the contents of the file should be formatted as: License = "5614D1-3E7A6C-932DEB-8C4189-F6B0F2-V3" ``` -Similarly, for an AICA Deployment Key, it should be formatted as: +Similarly, for a Deployment Key, it should be formatted as: ```toml title="aica-license.toml" License = "key/eyJ9df2jfap7IVdIHnlnNpb24[...]alSBR_tBSIjavblcziV5nBQ==" @@ -190,7 +190,7 @@ License = "key/eyJ9df2jfap7IVdIHnlnNpb24[...]alSBR_tBSIjavblcziV5nBQ==" Of course, replace the license key in the example with your actual license key. -## Logging in to the AICA package registry +## Logging in to the package registry To authenticate docker to login and pull images from the registry, run the following command (no replacement of `USERNAME` required): @@ -199,11 +199,11 @@ To authenticate docker to login and pull images from the registry, run the follo cat aica-license.toml | docker login registry.licensing.aica.tech -u USERNAME --password-stdin ``` -## Configuring AICA packages with a manifest file +## Configuring packages with a manifest file A runtime application image is configured using a simple **manifest file** defining the version of Core to use and optionally defining additional add-on packages. The manifest file contains a custom docker syntax header pointing to -AICA's app-builder tool, and the `docker build` command is used to bundle all listed packages into a final runtime +our app-builder tool, and the `docker build` command is used to bundle all listed packages into a final runtime image. ### Configuring a minimal runtime image with a version of Core @@ -229,7 +229,7 @@ image = "v5.1.0" ### Configuring a runtime image with add-on packages A manifest can include additional components and hardware collections as add-on packages. For any available package -listed in the AICA registry, specify the package and version with the `@aica/` prefix. The following example manifest +listed in the package registry, specify the package and version with the `@aica/` prefix. The following example manifest file includes two add-on packages: version 2.0.0 of the `components/rl_policy_components` component package and version 4.1.0 of the `collections/ur-collection` hardware collection package. @@ -257,7 +257,7 @@ use older versions of certain libraries and packages with newer versions of `app ### Including custom packages -The AICA framework allows developers to build their own +The System allows developers to build their own [custom components](../reference/custom-components/component-package). These packages can be included under a custom name using the `docker-image://` prefix to specify the docker image name or path. For example, a custom component package that was locally built using `docker build [...] --tag my-custom-component-package` could be included as @@ -278,12 +278,12 @@ registries such as DockerHub or GitHub Container Registry and can be included wi "my-ghcr-package" = "docker-image://ghcr.io/user/package:tag" ``` -## Building an AICA runtime application image +## Building a runtime System image :::note [Log in to the package registry](#logging-in-to-the-aica-package-registry) before building the image to authorize docker -to access AICA packages. +to access packages. ::: @@ -383,7 +383,7 @@ error would be shown from a correctly mounted but invalid license file: [ERROR] [1731937393.377201011] [licensing]: Error: license is invalid (ERR - license is invalid), please check that it is correct ``` -Contact AICA support if the container does not start correctly despite a valid license file. +Contact support if the container does not start correctly despite a valid license file. There can also be harmless warnings that appear if Cloud Storage is not set up or if the license verification takes longer that a few seconds: diff --git a/docs/docs/reference/yaml-syntax.md b/docs/docs/reference/yaml-syntax.md index 34c479be5..97d2d6371 100644 --- a/docs/docs/reference/yaml-syntax.md +++ b/docs/docs/reference/yaml-syntax.md @@ -305,7 +305,7 @@ my_component: The optional `display_name` field can be used to give the component a more human-readable name (one that does not have to conform to the `lower_snake_case` naming convention of the YAML syntax). It is only used when rendering the component -as a node in the AICA interactive graph editor. If omitted, the name is taken directly from the YAML field (from the +as a node in the interactive graph editor. If omitted, the name is taken directly from the YAML field (from the previous example, it would default to `my_component`). ### Position @@ -469,8 +469,8 @@ hardware interface driver needed to communicate with the robot. A hardware interface can be linked to URDF file in one of the following ways: -- By name of the custom URDF uploaded to the AICA database -- By name of an example URDF included in the AICA image (available examples depend on license and distribution versions) +- By name of the custom URDF uploaded to the database +- By name of an example URDF included in the image (available examples depend on license and distribution versions) - By the path of a URDF file mounted in the container filesystem - By URDF string content inserted directly in the YAML (not recommended for large files) @@ -562,12 +562,12 @@ If the parameter does not exist in the URDF, it will not be added. ### Display name This optional field is identical to the [component display name](#display-name) and is used to assign a nicer, -human-readable display name to the hardware interface when rendered as a node in the AICA interactive graph editor. +human-readable display name to the hardware interface when rendered as a node in the interactive graph editor. ### Position This optional field is identical to the [component position](#position) and is used to provide an X, Y position for the -hardware interface when rendered as a node in the AICA interactive graph editor. +hardware interface when rendered as a node in the interactive graph editor. This field only affects visualization of the application graph and has no other run-time effect. If a position is not specified, the node will be rendered at a procedurally chosen location. @@ -592,7 +592,7 @@ Predicates can be used to trigger [events](#events) by adding the named predicat under the `events` field of a controller definition. See also [Predicate Events](#predicate-events). Optionally, the `position` field can be used to specify an X, Y location for rendering the hardware interface -as a node in the AICA interactive graph editor. See also [Component Position](#position). +as a node in the interactive graph editor. See also [Component Position](#position). For example: @@ -943,7 +943,7 @@ buttons: ### Position This optional field is identical to the [component position](#position) and is used to provide an X, Y position for the -component when rendered as a node in the AICA interactive graph editor. +component when rendered as a node in the interactive graph editor. ### On Click From 632d1be3a6e2712d4d363ce5bf72af96c9faa135 Mon Sep 17 00:00:00 2001 From: Enrico Eberhard Date: Fri, 18 Sep 2026 14:54:01 +0200 Subject: [PATCH 08/13] chore: format --- docs/docs/concepts/building-blocks/signals.md | 3 ++- docs/docs/concepts/ros-concepts/built-on-ros.md | 3 ++- .../compatibility/operating-system.md | 12 ++++++------ .../reference/custom-components/package-building.md | 3 ++- 4 files changed, 12 insertions(+), 9 deletions(-) diff --git a/docs/docs/concepts/building-blocks/signals.md b/docs/docs/concepts/building-blocks/signals.md index 09aabf532..1877f8da8 100644 --- a/docs/docs/concepts/building-blocks/signals.md +++ b/docs/docs/concepts/building-blocks/signals.md @@ -84,7 +84,8 @@ library for Cartesian and joint state classes in C++ and Python. ## Custom messages The standard primitive and state message types are generally enough to cover the majority of messaging needs in -a System application. Having a reduced message definition set is important to maximizing the modularity and compatibility +a System application. Having a reduced message definition set is important to maximizing the modularity and +compatibility of components. When components are connected by a signal in an application graph, the application interpreter will try to assert that the signals have a matching type. diff --git a/docs/docs/concepts/ros-concepts/built-on-ros.md b/docs/docs/concepts/ros-concepts/built-on-ros.md index d9505e6f2..c7de9d58e 100644 --- a/docs/docs/concepts/ros-concepts/built-on-ros.md +++ b/docs/docs/concepts/ros-concepts/built-on-ros.md @@ -17,7 +17,8 @@ ROS comes from the abstractions provided by community packages and extensions th can be combined to solve complex problems. The System is built on ROS 2, but it is not intended to supersede existing ROS 2 distributions, packages or -tools. System applications and building blocks are **fully compatible with existing ROS packages** and community tools and +tools. System applications and building blocks are **fully compatible with existing ROS packages** and community tools +and can be used and deployed alongside them. diff --git a/docs/docs/getting-started/compatibility/operating-system.md b/docs/docs/getting-started/compatibility/operating-system.md index 1e97ad565..147a99cc5 100644 --- a/docs/docs/getting-started/compatibility/operating-system.md +++ b/docs/docs/getting-started/compatibility/operating-system.md @@ -43,9 +43,9 @@ Ubuntu, but not possible on macOS. ### Summary of OS support -| OS | Launcher support | Notes | -|---------------------------|:--------------------:|-----------------------------------------------------------------------------| -| Ubuntu/Debian | Yes | Real-time kernel patch highly recommended | -| Other Linux distributions | No | Requires launching Core manually. Real-time kernel patch highly recommended | -| macOS | Yes | Limited graphics forwarding due to dropped OpenGL support | -| Windows | No | Requires WSL and running Core manually | +| OS | Launcher support | Notes | +|---------------------------|:----------------:|-----------------------------------------------------------------------------| +| Ubuntu/Debian | Yes | Real-time kernel patch highly recommended | +| Other Linux distributions | No | Requires launching Core manually. Real-time kernel patch highly recommended | +| macOS | Yes | Limited graphics forwarding due to dropped OpenGL support | +| Windows | No | Requires WSL and running Core manually | diff --git a/docs/docs/reference/custom-components/package-building.md b/docs/docs/reference/custom-components/package-building.md index 7b7a7fec9..e1710e1ec 100644 --- a/docs/docs/reference/custom-components/package-building.md +++ b/docs/docs/reference/custom-components/package-building.md @@ -5,7 +5,8 @@ title: Building a component package # Building a component package -To use custom components in System applications, the component package must be built and then included in the System image +To use custom components in System applications, the component package must be built and then included in the System +image workspace. The easiest way to do this is to use a `aica-package.toml` file. ## Creating a `aica-package.toml` file From 0475f00d6c6215819dbeba3e58b42ba57d79bcba Mon Sep 17 00:00:00 2001 From: Enrico Eberhard Date: Fri, 18 Sep 2026 15:05:06 +0200 Subject: [PATCH 09/13] feat: fixup SVGs --- ...mponents-controllers-hardware-embedded.svg | 521 +-------------- .../assets/system-overview-embedded.svg | 597 +----------------- 2 files changed, 42 insertions(+), 1076 deletions(-) diff --git a/docs/docs/getting-started/assets/components-controllers-hardware-embedded.svg b/docs/docs/getting-started/assets/components-controllers-hardware-embedded.svg index 8cc20d25e..0b6a2b066 100644 --- a/docs/docs/getting-started/assets/components-controllers-hardware-embedded.svg +++ b/docs/docs/getting-started/assets/components-controllers-hardware-embedded.svg @@ -1,500 +1,21 @@ - - - - eyJ2ZXJzaW9uIjoiMSIsImVuY29kaW5nIjoiYnN0cmluZyIsImNvbXByZXNzZWQiOnRydWUsImVuY29kZWQiOiJ4nO1dV3NcIlmyfp9f0dH7cm/EcPZ4s28gg7w3jWY3XHUwMDE0XGJKgLDCStqY/76ZqCWKMlx1MDAxOIlSl2bETHTPXHUwMDAwVZyqyi/zyzxp/vvbt2/f+49cdTAwMWTv+7++ffdcdTAwMWVKxUat3C2Ovv+O71x1MDAwZr1ur9ZuwUd8/P+99qBbXHUwMDFhf7Pa73d6//rnPydHkFK7+XyU1/CaXqvfg+/9XHUwMDAx///t23/Hf8IntTJcdTAwMWW7WVHKXSjaPnpcdTAwMTjt7HC3t3FYPlx1MDAxYVx1MDAxZjr+0stiul6pX2xVXHUwMDFh3uSjXHUwMDA3eF8xQbRSVDAnhVBCv376iOt0gjCrueSUW+mYVK9cdTAwMWaPauV+XHUwMDE1vsK4VsQxxaWCz51xkzNUvVql2ofvSM5cYpzAXGIqpFx1MDAxM4a9fuN5Qf/6Rl/f6fW77bq31m60u7jqfzBcdTAwMGb/maz5pliqV7rtQav8+p1+t9jqdYpduEmT793WXHUwMDFhjdP+Y+P59lx1MDAxNkvVQdd3ludfufx5XHQ88P7rceVir+qVJ4fB71aqLa+Hz2JyXHUwMDEx7U6xVOvj7WJ0ciG4yM52efzY/jNZVrfY9LbxubVcdTAwMDaNhv/ErfLPXHUwMDEzT33Q8zz8slNKXG7DtX39YFwiS3Dfg+9cdTAwMWW0W2O5Ypxx7iRXkyus9dZBoPrjs95cdTAwMTZcdTAwMWI9b3JncVxyXHUwMDFiXHUwMDEzYZtax6BTLj5cdTAwMWbEXGblTDBFudSTXHUwMDFmbtRa9eAxjXapPvmd8bt//j4twTOEc3KBcFxyPPZcbqXkXFzC7dFcdTAwMGJcXOEzXlx1MDAxZVl753yb3iu9NXis3Vx1MDAxZFaK+5vZXHUwMDE4wem1XHUwMDAxjUuLTeCoZaQmXGaIh/FVXG5KXHUwMDA0t4xP8IdHXG7BiFDMMmG14Vx1MDAwZaC1clx1MDAxY73AXFxQRSzTkmrfXHUwMDFhXlx1MDAwMS64I5oqqa1RQdll2lFupDH8/dh4XHUwMDExnInoiJ/v/Fx1MDAxOSvHf7xcdTAwMWUzOdonen3vYXK5PjFpn1x1MDAxY1x1MDAxZlxy13u1TsVmjlx1MDAwZeR6bjB6XHUwMDFjfX/93p+/R5/2+eCt7Vx1MDAwMb2WXHUwMDE3hcfBwdnallfIXHUwMDE1Rak9/Ssvv1/sdttcdTAwMGKf9/JyMFx1MDAxNJltkzk9brLHrYtRLl/oLnben//1n3hIS1BcdTAwMTViZZCeuq9TaKYsXHUwMDE2zVx1MDAwNlxmXHUwMDA00yDnXHUwMDBiozn6MaVcdTAwMWTNjki4VDCW0nFmbVx1MDAwMNT6o0BcciaZKFx1MDAwMVx1MDAwNp7CXHUwMDBmqmhkh/FcZtLirFx1MDAwM12wYlu3nFx1MDAwMVpaWifrarf6p7Unb3xcdTAwMDOm3t0sNmuNx6lcdTAwMDc7XHUwMDE2Y0R0sVtcdTAwMWXBbfy23ep73dtiyet9n/pStlGroHx/L3n4jSnR79eA1r1+od/uTD4twc9cdTAwMTZrLa+7vYhxandrlVqr2DhbZFVwS7ytl+fIiO/p3lx1MDAxNHtcdTAwMWV+indAvVx0xdYnXHUwMDE3QVx1MDAxMDvtQN07Obm380BMK2eHR1vdM367v3Z4lj3oXdYr7ZSDmFtLXHUwMDAwXHUwMDA1TFx1MDAxOFx1MDAwYujxXHUwMDE5tzGGXHUwMDE5JWi0laRcdTAwMTSkldnAulZcdTAwMDdhWFx1MDAwMFFcZvBopKagK1wiIFx1MDAxY2GSlTFA/MXK6eqSXHUwMDEwdlb6bs1cdTAwMWIhTKfeXVx1MDAwMML/bmVv4DFcdTAwMTRLfZDaf7f2io9+uK5cZstT11x1MDAxMVx1MDAwN9zZa1lcYsHavp1aa6mD7058XHUwMDA3oVxyY9R3f+fBeEDzw3qxTU/Ws7m1gj6+uttmw5TDmDJcdTAwMDXMmjtlLZfSyYlReyHYjjk00n5cdTAwMTSt2lxmS0pcdTAwMWNX1Fqq8Fx1MDAxZlx1MDAxNeFCz2TYXHUwMDEyuFx1MDAwMlx1MDAxY+5z3j9cdTAwMDPD3v9xmD/IXHUwMDE2h1x1MDAwNbU1zOel/PFjQ1xmP4BcdP9cdTAwMTLm3re2ms3cXHUwMDFjPG5tZVx1MDAxZVx1MDAxYfvtwbB/v7WC867lsyN3UC3/MHe5oyfa2d9go1x1MDAwNdebXHUwMDE2j0CzeCWkuFx1MDAwMfhcdLa4e1x1MDAxZi1VKVdCmlx1MDAwM11QSoBLYLSZXHUwMDEw/lx1MDAxN38geVx1MDAxZMSkIdygt2GkZOjmL+RcdTAwMGIwXHUwMDA1flx1MDAwMFx1MDAxY5G0L/DHKqX0fZ7AXHUwMDFhfNxtN1x1MDAxYSCpSXhcdTAwMDBzjGiQSESuZlx1MDAxNcx/Nm8wsZDVzCmQXHUwMDFmt7hcdTAwMGKft2b36qS0f+lcdTAwMWTWa2rt+mFY7st0I1ZpSSwzWlxixangNOjBS8I1tUBvwTWwLrCsVFx1MDAwNOW40ZxrvVxu4H4gZdhaXHUwMDFmNnPd/Vx1MDAwN+mdrOduXbV6qu3Vl1x0fr9cdNaxXHUwMDExdqukXHUwMDEzWonF8Vx1MDAxY/2QUo1nLVx1MDAxOVx1MDAwMfNqXHI3xoJjLFx1MDAwMnh2XHUwMDFmg2emXHUwMDA0oUY5WIWQkb582Fx1MDAwNGvKXHJcdTAwMDdcdTAwMDWQtCufKlx1MDAwYtzstFvjdSVggOeYo7BcdTAwMDFcdTAwMGUvZlx1MDAxNfb3WVVEYFx1MDAxNVx1MDAxZXZsXHUwMDAwXUpLXHJfZjdstr8zXHLWUrfd62WqxX6p+ksgSyhcdTAwMDVN5Fx1MDAwMFx1MDAxYcCVjXRUTFx1MDAwZX2OyVx1MDAxOYAxZeDIXHUwMDFiK7XQ00RaYWBdS8Es5Vx1MDAxMmDMXHUwMDAya10lmXZcdTAwMDTW5zS3ypgob55wq1xygyVcblx1MDAwYnSb+kL8L8TaKSl5QvaZJ2WfeW7tUT2um6tO15ay+c3DzkOvk6y98z3EYrefq7XKtVZl+qp/ZlAswq/Hyqc06I3FjStcdTAwMTA4x4ywzlA9MVxu+DCKnfFzJlaCWDmwXHKGa8FcXOjGeq3y/DXNjvr71pSBRVx1MDAwMd90XHUwMDAyjFx1MDAxNLXSKTrJyHhdXHUwMDE1bi5cdMOZXHUwMDA2n45xQWVoUY1ir1x1MDAwZnqrWevDvT9q11r94D1cdTAwMWXfzCyqoKpXXGZJXHUwMDE3XFyU/zNcdTAwMDBDLeAqdPCk04L0h09cXKhfdujrf//n98hvXHUwMDFiSZRcdTAwMTXGXHSmtOXMf2yGXHUwMDExZZRkVjBcdTAwMDaSo53R885cdTAwMTZcdTAwMDPO8dlCuJyc7Df/38vyKyODb75GOMB+K8G0Xny3JFx1MDAxYWRvVtky8P5Ksl9cdTAwMTbX2YJSwlxm7lxcKO1cdTAwMTibVtnSaWKosZRKboF62eBiV6eznSTMOVx1MDAwN9ZVgVx1MDAwZdK+TdlXrc1D5ItbXHUwMDA32JerXGK8/vKt0IX3UVBzXHUwMDE0W+U3k69mrVxc9uuKXHUwMDAw/5rDSFwi+FdgNVx1MDAwYrEvNnvXJJZ9MWHjk5E4qFx1MDAxZtC6S2yZzFx1MDAwZWOni35N41x1MDAxNrQjXHUwMDAxnqVcdTAwMWNoMMs1n944kVx1MDAxYSxcdTAwMTW31jKqNVx1MDAxOClcdTAwMTFY2FxuuZYwJDZcdTAwMDTCiGRmvCFccspcdTAwMDNcdTAwMWWNz8f4iWBpXHUwMDE1TSw5KTGeVb9i3pXoqrNH77pzcEDFwWVhK108ay6n+UmhXHUwMDFjwW0vcLmRaFx1MDAxOd9G+jRcdTAwMTXjXHUwMDFhKY9cdTAwMTMgaU7Aw3xcdTAwMWLRmkv+fi7KXHUwMDEwcPSl5Vxc4Fx1MDAwZsqJ2Fx1MDAwNLlcdTAwMTgsy1x1MDAxYeB9goJXoT470cpEgFx0X2FcdTAwMTitilx1MDAxN8WngmnGhHJuXHRXNlx1MDAxYVx1MDAxNCnlRVx1MDAwMVx1MDAxMsQ4oZw7XHUwMDA3vFRcdTAwMDFcdJrOJpGKXHUwMDExjdssoExcdTAwMTmQ3eRcdTAwMDJQyoHgwyqMomDKojPCwixcYmg00CDNVqBDP1x1MDAwZlx1MDAwYjrtw88nRIHmsIIgXHUwMDA1XG4s5T3851x1MDAxOUm3e09P2yOW65+2Sqz15OWPROtk8ZJcdTAwMDJniHWSgvdJqVx1MDAwM4UxJczCalx1MDAwMu60Y2B3MW2Bh4SQXHRHwFx1MDAwMeOAXHUwMDAzLeFPKsJCqC1cdTAwMTE/qbqlYFx1MDAxYdxcZoSlqqTgXHUwMDFkRCzRXHKal7hcdTAwMTM8XHUwMDFlXHUwMDAxXHUwMDFhJrS9h89VxTNfXGae48N4S6HBXHUwMDFiOdCNalSa7WF38/zkPHfdujjd3Lzp/4K9lVmrXHRBZtpcdTAwMTCOt1x1MDAxZUD1M2VcdTAwMWNcIsZaP1NcdTAwMWWjXHUwMDA1XHUwMDFjYExcdTAwMGZcdTAwMDCH1IE29vm/k1x1MDAwNEBKwDVcdTAwMTbcMGmjN1xyXHUwMDE0eOFcdTAwMTJ+gGppXHUwMDAxVj5cdTAwMDfmXHUwMDBiLC8nnll+XHUwMDAz2kjBXHUwMDAzsDRcdTAwMDJcdTAwMTXShd6doIIyxs1ie2dcdTAwMWZl7F7s135cdTAwMWJTXHUwMDBlv/27lffA7lx1MDAxNPttf1x1MDAwMsGURSSUIVx1MDAwZuNcbtg3kN1FXGbk2y2hz0TJyU9cdTAwMDXs41x1MDAxY/tcdTAwMTS0jz8vNepCQ7ZyJo2dmVx1MDAxM2FkbJDPXHTtOGjWxeNcdTAwMDJiMMzdjWxtdCbXjqRcdTAwMWLcXpnyfXrQXHUwMDE1TWNcclx1MDAwNVWkOJNcdTAwMTimXHUwMDA1kVx0xPKMXHUwMDA2m63Bi4A/pPbfriRiXHUwMDAyVFx1MDAwMjvQyJmBVE+uZ1x1MDAwMVx1MDAwNvFcdTAwMTJcdTAwMTmQxlx1MDAwMYPxhVxmPkOGxLaoPl6dPlx1MDAwZfSPXvdm7TpXXHUwMDExTb2bwoxcdTAwMDPDQrWML2jhUoPGYXZxtERfdNrRXHUwMDAymtVcdTAwMTjGtFx1MDAxMMZwXHUwMDEzqLyVVlx1MDAxMam5UCi/XHUwMDAyPPLkUv+ArnNqXHUwMDE1+ttcXFx0YFx0yzCIl1x1MDAwMlVcclx1MDAxN+An8581XHThLdZcdTAwMGXv8J5X7LZqrVxuXHUwMDE41GyjXHUwMDAyXHUwMDE2qF9tJlx1MDAxNSGfY1x1MDAxY4Lm73VpUVx1MDAwYlvIWZTiXHUwMDFkZpHGmkXDNYr2wjCno85Ddef47mD3zGVcdTAwMDf7XHUwMDE5o1x1MDAwZV3qYY7esORcdTAwMWGoIDWOUjpcdTAwMWQnV9pcdTAwMTClJKDcajBVXHSGdphcdTAwMTDEOYo7wkJcdTAwMDBkour059pEh9vJ3H2UU7oqm0jzldr2fv6qxXpX+rR/cbvRPU2jTVQzsmrhwWGy9eI2MfKiU1x1MDAwZVx1MDAxNk0tkUxI54w1mHA3XHJcdTAwMTZgkOiGOYy6O6NcdTAwMTJM4MF4LFx1MDAxYje0YFx1MDAxYVPvXVx1MDAxOCxzbaI0XHUwMDE4XHUwMDEw0e7va1x1MDAxNLOdTlx1MDAwM1xm209Hc69dqZVcdTAwMTIyiXNMQ9Ak+lx1MDAxN1x1MDAxNljWKlxmotdo1Dq96GZcdTAwMTbUxEfRXHUwMDE08D1B6Vx1MDAxMrkgha37m+Ygu3l+dVJ32qveePeymfJcXFthXHRVjjIjlFx1MDAwMo02Ocsz75VcdTAwMDSklisrwFx1MDAwN+AmQYMoXHTVVHMtpGRcZnzFiIqXXHUwMDE533lJv1x1MDAxNVjr4Gi0lzixcZ1cdTAwMDeedz/uXHUwMDBmd+43XHUwMDFihdu7bqHZqrlcdTAwMTdcdTAwMWL0cbrAx7beacRmyTj4NLEyXHUwMDBlSlFYvUy+U/Z492wzP8qXa1x1MDAxYrm1tcveRv7uLI72fVxuXHUwMDE5V1RcdTAwMTFtQJlyXHR+l/LV4KZTxsExVGCO/Y0qvoSccVx1MDAxYVx1MDAxYvhV0lx1MDAxOXDt6eIyXrlcdTAwMTXZrZvC1X2RgVx1MDAxMavIQq56W/jUMs5cdTAwMTWxXHUwMDE2KZAxlnOadlx1MDAxOeeaXG4mzJdcdTAwMWWf0uMzunzgnpNkbom6IJtdL7VvN670ei6vM2LvSW1cdTAwMTZYymWc4mY1s1xuU/ssXHUwMDE3gSQ3J4hcdTAwMDUvRcC/1NDk+vSsSI0zqZnVX1x1MDAxMj7VWi5ewsFcdTAwMGJ1Vrol4tDq/Ligbi/q11e1gSpkdK/5o9D4zFx1MDAxMq6YXCJYimKUXHUwMDExQlGTYFx1MDAxYedqRFx1MDAxY9aoMJhcdTAwMTZdNvM3XHUwMDE1ctDSsULOXHUwMDE5JlTqJTqu3VRcdTAwMWKXba+6XvDWNuuFrZaXrZU3Uy7kWlx1MDAxM0WdZcrhNkWwLuyT0XGuXGYwXHUwMDE1JqLjSn9hXHUwMDE5XHUwMDFmXHUwMDA3X1wiXHUwMDA03IXTlSZppMBSsHXG4ko8d31RqniaX1x1MDAxY1Zbd3SUOT6upZ6KM1x1MDAwN1RcXHGKhcCgx8NFNGDnNHXYXCKI8lx1MDAwNMOmjjAqpVaYQIxbmlx1MDAxMUU0kmiAIbhcdTAwMDXCaF9cdTAwMGLBXHUwMDE32aZcdTAwMTZWXG6s8q+owH33fSqFPpjyXHUwMDFk88mKk8mnPltpXHUwMDFhebxcdTAwMTjgKzMtXHUwMDAxk5P95v97WVx1MDAxZMBofEJcdTAwMDFzmmN52USm5qaSXHUwMDE3XG5yVN4stSpPlYPalZGnR7dxZTlp0Vx1MDAwMYpcdTAwMTMumMFcbjYmZSCbwDGChUlaXHUwMDAxx3OSJthHyGLZrDZOKFx1MDAwYuzaxycnXHUwMDE2Tlx1MDAxMXhcdTAwMThcbss5XHUwMDFjpjS6iJbB1ihHY3pcdTAwMWF8KYFPoVx1MDAwNOJcdTAwMDRh/GFIXHUwMDA0VqRcdTAwMDbcXGaqXHUwMDBivE9cdTAwMTi7zFx1MDAxZWpXbtZPTr2b/XPGZabXOJan/jzD1KpcdTAwMDGOfYXFWDQn+yfP/lx1MDAxYyeYdc+BXHUwMDExK2C7ie6uKEyahVx1MDAxZrNAPPwgf1VcdTAwMDSUcGaEM/g1sPrSuCiHTlLDaUxcdTAwMWaEL1XwKVRBrCyMXHUwMDBmXHUwMDBmS8HKlEF82b2RzlCp7eKcoEhcdTAwMTVrepd7d2d7XHUwMDFk73K0t5dnP36kXVx1MDAxOTBcdTAwMDKuoqOgiFx1MDAxNVxi6HRtgVx1MDAxMpRgvz9LXHUwMDA1trcwXHT6XHUwMDA14H5cdTAwMDPzYFqAXHUwMDFlVUZGub2cXGIqqLRwlzFXylx1MDAxN2l6aTtcdTAwMGXHM6zK/NJcdTAwMDSfV1x1MDAxM8RcdFx1MDAwMr4yIVx1MDAxOViZXHUwMDFliJ+QosFToc5fcTl3O3o9f1x1MDAwNlx1MDAwZao52Dtu1lx1MDAwYvYyf8RcdTAwMWbT3t6MM1wiXHKzhmNcdTAwMGWZXHUwMDBi1uo7R5xcdTAwMDZlyMcpPkYnXHUwMDE45TVcdTAwMDRIXHUwMDA38Fx1MDAxM4w5auHvXHUwMDEx/6pcdFx1MDAxYzBcdTAwMTSmXHUwMDA05lx1MDAxYlx06mdrr9tcdTAwMTiUI8z+krvRf1x1MDAxYkVcdTAwMTArXGL4XG6KwIr0XHUwMDAw6JT4QKFcdTAwMWOrXHUwMDFkscSeff76pHa8vl9vn/cuXHUwMDFlNnJcdTAwMWJcdTAwMGascpV2QsBcdTAwMWPhRlpwk+BcdTAwMGbuXHUwMDFi5/VcdTAwMTJcYudCMGdwc5cmXHUwMDFhJ1RcdTAwMGUjNto5Si2TXHUwMDExuchcXFx1MDAxMFxui1x1MDAwMXOB+zn+pMOXojzFnYNDv9TAJ1ZcdTAwMDOxgoCvkFxirExcdTAwMGbw2FihXHUwMDA0XcSdWVwiSDC8XHUwMDE59Vx1MDAxZlx1MDAxZtTJcK3WMlx1MDAxYlx1MDAxN07Uuzt7KVdcdTAwMDOY0WtcdTAwMDTDrTDc41x1MDAwZahcdTAwMDFQzuCjOatAXHUwMDExaGNcdTAwMTNcdTAwMWN8XHUwMDAwy9BcdTAwMWFWgpnSVrBcYr9cdTAwMDCZi1XSYJNxg5ww3CrRYlx1MDAwMpJcdTAwMTX2K1r4eVx1MDAxNUGsJOArXHUwMDEzXHUwMDE2glx1MDAxNWlcdTAwMDLnTPDdV0JAmbKgXHSWqE+6f1DDzc2e7l6tmeJmIcuzZyOefk1gXHUwMDE5XHUwMDFmzzBSflx1MDAwMD7n8DGCnY1cdTAwMWN4SZjllFx1MDAxY1x1MDAxZrCEKSml0uBcdTAwMTZcbklNxK5cdTAwMDF4jthcdTAwMTJVaoPtxIxccutcdTAwMDElOVx1MDAwNZ8yplxi8UtcdTAwMGZ8XHUwMDA2PVx1MDAxMC9cdPjKhIRgZYyAxStcdTAwMDLNXHUwMDA1dlx1MDAxNF6iXHUwMDEzVdme367n18/djVx1MDAxOFx1MDAxNbuH1dFao1RKuVwigDuvnGDGgFx1MDAwZmScXG5QXHUwMDAyLsk4aV8pzrXRXHTuXHUwMDFiOMLAJ3TgimFcdTAwMWJ0XHUwMDFhsW1gXHSAyGL7ViphpTS8fYhcdTAwMWJORsdU7n8pgk+hXGLi5Fx1MDAwMF8hXHRYUlxyzFx1MDAxZTfM4sdccmtpwFx1MDAxZS6TLXe8e3E+6q6dbTQyN4eF89z55uF+yoebXHUwMDE4XHUwMDA1/F8qJ0E8LTZ2mlJcdTAwMDWaSeKwXHUwMDBlUGhcdTAwMGX/2OSChUBNpEOdXHUwMDAzWolrLWxEXHUwMDFmMKaIXHUwMDA06bDWgdpcdTAwMTLY9T2kXGZAXXEsep5HXHUwMDBiut2rVua63Sjw5qnlzVx1MDAxMe+4/dGbtMGbSps/LItujvCr2FxydEeFlFx1MDAwYo1cdTAwMTJ/XHUwMDE2/ZPzcql1tD8sVI8qOnvUXHUwMDFk9ne9uD7VaVx1MDAxMX3LwDF2XHUwMDE2RcZSp/mnXHUwMDE2feXAXHUwMDEyWjpv6/xL8MeCP6tHO1hcdTAwMWG2zEDbcrl6t9s4WMtcdTAwMWNcdTAwMWU9VU5Zo2mLrpxu0Vx1MDAwNzkhXG6bJoHexyQxPVP0k4tccq9I61x1MDAwM09cdTAwMDVcdTAwMGZhfrXLl/B/n1NcdTAwMDaDj1xcUM5cdTAwMTeX/of6w8l+81iXj0/XrbdVqVu1+Zhu6TfGXHUwMDExy7Fsk+FcdTAwMTD6QNbU2CqAy2ksfIGrXHUwMDA0XHUwMDA3sq9E+Fxys06CzvpS/HO8fjaj/7STjMNNXoLq99rnpV6dNi7qXHUwMDBmu5SdZXZrZyblderGUUKFcNRZqnSA7ijsPVxuplx1MDAwMONqXHUwMDE0R3QkJvY0QsrBx1NcdTAwMGVcZlx1MDAwZZOUWUxcdTAwMWZcdTAwMGJKOacg+87FXHLf+Fx1MDAxODFfoMP/l/ePr+W8/6lvh0Vhcvhv/r+Xxj+nsc6OwcY+hi8xymOfP5RuytdWsJ27/OHuzdHBj5tsyuGvNTFOWUpcdTAwMDXD4TpBd0eR8aw0XHUwMDA32sEm6O3g6GH4XHUwMDE56lx1MDAxY2Xw0lGDPFx1MDAxOMFKXFxMXHUwMDE4wTwly8OZwthcdTAwMWSLoYx8mDr4ivolivtcZqNE4UhcdTAwMWRcdTAwMGJcZlQpZfxjJ6KPj5WkJM5HidNoXHUwMDFklVx1MDAwNlNcdTAwMDTfXHUwMDExbnK6mXrpWV80jlx1MDAxZcWN01t24/wsV1xc5/fnN6e+YvGYSUTPsFx1MDAwNbIqQHlRXG7q0LDpWL3kgsAlcuCHTk1ccm59xZvDKXLjLVx1MDAxNi6Zjdp2XHUwMDA36Fx1MDAwYua0ccBcIrFcdTAwMDc/m6D/8/ZcZp+seH7P8Im+WL+943ujXHUwMDAxP9s7UsJcdTAwMWJcZlx1MDAxZTgzg8Tow0tbKadcdTAwMDSmZIbyVL4/b3TG0lbcXHUwMDAzdYvtVS3fcfxtOmu1+1x1MDAwMmCTQHK1NrgjrVx1MDAwMqWFmljm0IVcdTAwMDPDLanWat7pXHUwMDA0JVx1MDAwMnw/QFx1MDAwMd43IczU+SzBXHUwMDFlXHUwMDEwXHUwMDFhbidcdTAwMTeWSjlfX8Qha7w6wJSmTODq4TGZqLzGZVX2XHUwMDAyI4+aw6uNq/uN7YN2zlx1MDAxNNz23dFoY+37ZF3+eUZcdTAwMDBcdTAwMDbw9uFcdTAwMTZiXHUwMDFmYLhcbt/m68/JSFhJTFEnSGXhXHQ4XHUwMDE2XHUwMDEy4IXmMO1cdTAwMTR3veZjVp5n1U5GnN55ZnvQj1pcdTAwMTTF+lx1MDAwNYr9woGiaFx1MDAwMVx1MDAxY8CE1mTgXHUwMDExWi0xh0FKXHUwMDEwXHUwMDBlXHUwMDEzWtNyQ5Z8Q7qjNffsW1x1MDAxYd+S4XlzhcNtNjjQXHUwMDEw7rZcbrRcIpCcg1x1MDAwNMNcdTAwMDfP7S99n77uj8JcdTAwMTc0XHUwMDA1gyQwXHUwMDFmXHUwMDA2+09GKG9cdTAwMDGC5qRiXHUwMDEyX5ZPlMHn1d3LzHv4xbpcdTAwMWI7TDjnd1x1MDAxZCa6W8hYj1x1MDAwM55cdTAwMTfDwa4rXHUwMDFjobJcYtGYXHUwMDEy2bfNp39/pKa2gFaYjSvLJaHMKMMsjlx1MDAxYtVcdTAwMDFORCVcdTAwMDGFLKzBeULal905aY+Mc+iYY5JJRaXzdXPy1yj5sWd9s1a+gPVcdTAwMDHAUmCcJLLeKGDZ+O1cdTAwMWKHSnDBWr+/JrIurzbOtrqXrexcdTAwMTPvneZcbs3GcenOhpFcdTAwMTUz0ItRhU1ZXHJzwJGs8zfze55RJIihilx1MDAwMn6sMVxcmFxiq6UsYUBcdTAwMWNcdTAwMWO47oabqHbKUlx1MDAxMGo0tr5cdTAwMDHsYfubv1x1MDAxObZcdTAwMTKb6GWQwEpcdTAwMWSeToNcdTAwMTclQ1jy7fswrnH28upQM69R+yErtW7Vpnio5+lTofVUMLTeWlx1MDAxZTRsNaCJXk1cYjThkV6MOqD61lxiK1x1MDAxOFx1MDAwNlx1MDAwNtx03a2knFx1MDAxOClcdTAwMTizUlxiwFx1MDAxNlx1MDAwYsHFKKJcdTAwMDU267fA45iMmsjB/2625/1DvCyWkNBIl3pGIFjicHYnXHUwMDEymuG1lKxORO9nXHUwMDFi86N2r4Y9zH1PbNlRliuZ1OVrvVx1MDAxM5xkOdvwXHUwMDA0+7KHL2iFXHUwMDAzunh8N1OjJYa/XHUwMDE33+LeOm/u7Ov8SfmQ2Ytqbq16ueHFpfqnZrrC2I5LsFx1MDAwNaDW+VSju+cps5w4pyWQaGC2kiVYXHUwMDA1/Fx1MDAxZTbwmuPLXHUwMDE5liglM7g7sVEkT3ajOShen6+t5682MqpbuCjePvxcdTAwMDJcdTAwMGI3b1x1MDAxNFx0p7H58Fx1MDAwMFx1MDAxNVx1MDAwNWsxi6fDR1906sHiXGbWXCJYTP1XlorpzTGpOcF4kzROgCDz5JpGXHUwMDFhbNnjXHUwMDFjl45cdTAwMDORM77Uq1x1MDAxOSOZuaVKxTXQ+sBNrjeZtzfNY77w4Gz4cFdk3lx1MDAwMoZsjsJcdTAwMGZcdTAwMWGy8GreM5V5MfOm46dcdTAwMDc5q4GP0kWo/DNk282N3I49qDxlfjRPj+197eD2QaVcdTAwMWayYMLGo8uFcePuqVOQhVx1MDAwZjCHkVxu65jCvrcpN3DCjWtcdTAwMWI+l4FcdTAwMWKdXnjXpb3N2ywrXHKvRmulRyN6aTRwMn7+JNxzp1x1MDAwNVui4Cv6qlNcdTAwMGZcdTAwMTfLyXhbm0mrTaDOQzFcdTAwMGJ0XHUwMDEw9164XHUwMDFlbykmhlx1MDAxNudcYji7jlx1MDAwMVx1MDAxY+LmT4ZccpzSXHUwMDA2XHUwMDBihn/5cK1cdTAwMGa0cNvNjlcuoowmY+Lm6PygiYtYTvI2zsb66ZZKin1cclx1MDAxN/fh9HU/r1x1MDAxYjvNZme73Vx1MDAxYVSrSm5e5dJcdTAwMGZasHFcdTAwMTTYnbXY5t5cdTAwMDVLtrUjYO1cdTAwMWSGYSk3XCLdTpxwXHUwMDFhh3yxz2XiNrZvL1x1MDAwN1x1MDAwN4XbbT28ONlcdTAwMWKah+ObeimNJs7EXHUwMDEyQvD+Kdb5Lm7hoi869WAxhnBcdH9aq7hcdTAwMDZvblx1MDAxYSzGXHUwMDEyoIpcdTAwMTSAXHUwMDAyxj7Rxv/UXHUwMDEwgzZcdTAwMGWHilAuZESDg7CNY5h1XHUwMDA2znZM6eJf0shly5jykqCVm6P1Q5NcIiPW81x1MDAxZTP3jKZSNrNT3G3cnm7k9ttHW92d/F1jO7y1MJ24PJZoIVxywVx1MDAxNCdcdTAwMGLPRlx0y1x1MDAwMq38pFwi0lpjXHUwMDFjx6/4Op6/ptpcdTAwMTNM3MG8eYkzVCWNXGIngN5cdTAwMDaNXHIkmFx0h1m3Mlx1MDAwNDNNQLk4qZ0wXFxy/yzhVG09lIu9qvfr9+ZiN7RcdTAwMDFcXFZzrFCOUN9CxbekXHUwMDAwksxcdTAwMTg3/C072nM2JbDuhftF/Zek+WXi5XT8cUhEJydcZpnfpVPpXHUwMDE2zKpeOmd6plx1MDAxNY8rUpDx89PhQWHKkFpiuInsMjos1Fx1MDAwN1tHl1x1MDAxN5VyLneav7FcdTAwMWIpQl2MXHUwMDFkXHUwMDE30lx1MDAxMm0kVlwiYVx1MDAxNep00pxcdTAwMTaSSGwjyUBcdTAwMTiEVMk1J1x1MDAwMaGU2L9cdTAwMWFWXGY/XHUwMDA1jCGC9FqFU1x1MDAxMTVcdTAwMThtjbNcdTAwMGZ5aIY6c1x1MDAxMoew+8dRJKprljH2QFx1MDAwYv1N4b9cblx1MDAxM16/XHUwMDEw++TxlVx0PfSwOnpcdTAwMTP4Z8R0XHUwMDE5XHUwMDFij8hYolx1MDAxZkN95/HiuK5H/WP+NCy2XHUwMDFlXHUwMDBl79TW3efAPrB0XHUwMDAwtlx1MDAwNFx1MDAwMXUq0MR8nJRnqOHWYNvGXHUwMDA0i1x1MDAxNHHEksRVcPg9LpzlXHUwMDExhUqgi1x1MDAxNM5aYkDOXHUwMDE04Fxch0vTjVx1MDAxMZpTXHUwMDE206/w11x1MDAxNyS+iez/xfGfmfX0x19cYj/4JXXA7MCXim1hLlx1MDAxY1x1MDAxNqXrJZJcdTAwMTf2RLlwcVb2js7ybuO416yc1lx1MDAwYjb1vrzUWI4owXd2ymh/fsJzXHUwMDEyoiFcdTAwMDKejJLYuVjblG/uXHUwMDAw+jXjLmaYQVojX5XdXHUwMDAzXHUwMDAwQOeid1IuXGb5WXOX151KY+SLxzf8XHUwMDE3XHUwMDFhXHUwMDA0ievFKXP0RadcdTAwMWQtilGCLVC4XHUwMDEyXFxcdTAwMTk73dBCUk0kZuxiXHUwMDBlO3BcdTAwMTmVXFzkS1tCXHUwMDA1XHUwMDE2b3Pcl9Vqoc1cdTAwMWRmXHUwMDE1pzhz9m9cdTAwMTT4OmnftPu+PcOVXHUwMDA2veZo/GDQK7iW5Pd1ZGxqXHUwMDFl1nrDXHUwMDEzkYtcdTAwMGbqeWw/XjZrT2e1XG493qtcdTAwMWZvu4uyvzwrrYBVXHUwMDAyK1x1MDAxYlx1MDAwMZM4hyOYY1x1MDAwZl4t0czgUFx1MDAwNGEoS1x1MDAxMLCrMG9Yf1x1MDAwM1x1MDAxYUhFd+ZIq3XbcNW9/qipcmfd652ePDi83vHWU2ndYsFcIlGZU7FEQCj6olNcdTAwMGZcdTAwMTbLXGI4e9xo61x1MDAwMCxiOnVBgtHRSjHM6Fx1MDAwNaauXHUwMDEz7FxcXHUwMDAzayVcdTAwMGVeXHUwMDE001x1MDAwNDmYt6hcdTAwMTb2XHUwMDExXHUwMDFiO0KBpGi9XHUwMDAyXHUwMDE38LPYt2ypPyj2292kTNxcdTAwMWOtXHUwMDFm2tdcdC8ncSsnRGy1jcFcdTAwMWVLVi1UZfAzeyF/eiP0YOvsyNTP65f3/Dp7XHUwMDFj110zPcBFO6asXHUwMDEzWJOEzlxcsOG8INjRSWIukL9cdTAwMWRNXHUwMDFhjVx1MDAxY0Ovm2Gd9qeyco3qzvagIW5rfI3XR6Jwc2t0NYVWTsyY52w0cFx1MDAwYvDxXHUwMDE3XHUwMDBmeURfddrRoiiYOWCDXHUwMDE23CehqJ7mhEqAiFxuLlxmZzj2PcFcXFx1MDAxZiOIXHUwMDA1J1x1MDAwZVRcdTAwMTSOx1FioVx1MDAxNHTFkbjbVST3fFx1MDAxNlx1MDAxYnfqtXrJWbg5XHUwMDFhP2jhQov5gFxm9NitSos9uyxbgpj2jnc22PBa9DZO+0dcdTAwMTdcdTAwMDfb4v7kuJ1+xEpLqFNAPI3BJlx1MDAwMoGcWutcYkWD48x4qy3dXHUwMDA2zsIqqTKfrMJK0bV+eWvtfKvX6txkvaNcdTAwMWR3spVNoX3j4ULUiX2DXHUwMDFiXHUwMDBmjHCJ4cTRV516tDhJXHUwMDE0IFx1MDAwMVx1MDAxYq5cdTAwMWJqXHUwMDAyXXdcdTAwMWSKMFx1MDAxOFx1MDAxYlxuMmotSzBGqVxiQNIpQceA0Vx1MDAxMWCJ8OHA9DJcdTAwMGJmcVx1MDAwNUGO99m3N2XrvMm+5Y+2XHUwMDBmk7Juc/R90LpcdTAwMDWW8v6UPOb6XHUwMDE5m9mTWcWaXHUwMDE3zCtcdTAwMTa2ryRcdTAwMGKn5EVU+3NhiXUox8BZNXOBeVx1MDAxOUaTMVvFvoOSRbTj4zh6XHUwMDA3XHUwMDBl41xmK81cdTAwMWSfXHUwMDFkQkhHtb9cZrz/a1Puosr9wdXkVEi/+VpI+WqmpTVuoVx1MDAwMZDLpdYp1HfWL7LL1vv/37dcdTAwMTOv2Mic1ZretzWAXHUwMDBmvP3t/31cdTAwMGYwueL/frvzPVx1MDAxYVIxeJ66rCB451xcx3I1/7FcdTAwMGXkjObeQmkjjVhi6vdomOtcZvP7XHUwMDE3jydOn9ubS+9gszFKXHUwMDExduLG+1x1MDAwMcnDQcrYxpdcdTAwMWIxnS2sjSWOMXDSXHUwMDE0+HVcIsm539ZcdTAwMTDUjEZgT0tcdTAwMTORN1x1MDAxM2FgXHUwMDA1XHUwMDE4VynNr7Svilx1MDAwYmc+zn9cdTAwMDRcXFx1MDAxY55+41GYeFx1MDAwN1xcl1x1MDAwM2bcXHUwMDAy3m9h94zcrW80a/qp31A/bGf/h9w9WSTp3UkseZLGWo2V8IE29dxht1x1MDAxYz3utVx1MDAwMy6mZFx1MDAxMUnvYXlcdTAwMDNtXGZHjbOvwStcdTAwMTUmnOOe0nY6qTGwQFnGM1x1MDAxMqL6SklcdTAwMTebt4i9RVx1MDAwNF1srOqS9pVaR99kX1x1MDAxM+xdXHUwMDFmXHUwMDE0s8nRv1x1MDAwNc7ySfLUXHUwMDAz/ah9bYn97UpDyapWK2xJurjB7VtbzWZuXHUwMDBlXHUwMDFlt7YyXHUwMDBmjf32YNi/34rBUqnb7vUy1WK/VF1cdTAwMWFPXHRcdTAwMTSdUUVcdTAwMTjIuNNUY1x1MDAwZtdg41x1MDAxMPB5jbHoP4JC00E2sEKjyzXBTFx1MDAwMs5cdTAwMWOlzlx1MDAwZsmJXHUwMDE2JJg3j2Wk8HDANMuQXHUwMDE1NrDM6YbSXHUwMDFmm6z6esxSQSBxfFS7WV9cdTAwMWY2uDmQa1x1MDAxN0V6UrjNLFx1MDAxZlx1MDAwNHqTZ71oX2aaXHUwMDFm1otterKeza1cdTAwMTX08dXdNlx1MDAxYvquxddcdTAwMDJcdTAwMTl0rFWOXHUwMDBihvneWNzl+9ZzXHUwMDBiZEZcdDNcdTAwMGXUjFFKccPf2JY5b83u1Ulp/9I7rNfU2vXDsNyXUWvCXtGWYmTGOSY0Vdrq0KJcZlFcbsRcdTAwMDeopdFcdTAwMGXss1x1MDAwYi1qxem/XHUwMDAwh1ogOL3aJOBYROErjKWwrp/BjqJFNsSOwvFcdTAwMDdHXHUwMDFkwYxjeCBcdTAwMDacXHUwMDFhXHUwMDFkyIXAjtJcdTAwMWN4LDbG1uBcdTAwMDaokJ7QXHUwMDAyublcdTAwMTNYP09cdTAwMDWLympPXfwh/fSIMVxy91O58J5cYi4/PvYrxsnNb2tWu0C/wTeptNdcdTAwMGVcdTAwMTStzsCfXHUwMDE3mLZug3M4Q6iDReBylos7xFx1MDAxMiEsyot9vFxcgUhwu0T+8Vo+O3JcdTAwMDfV8lx1MDAwZnOXO3qinf1ccjaK21xiS1x1MDAxYlx1MDAxMTJgllx1MDAxNLeYkS9cdTAwMDPNmFx1MDAwNGhcdTAwMWROQTSVpkb7MrhSSYNwL41xsZJoxFx1MDAwN/KgzYfsY/HwzPHS3sFT7WC7sZk52l6KXHUwMDA34SBcYrmKisB386BcZlx1MDAxMiFQp+BLXHRcdTAwMGVmXHKeVng+hcU+1dooS3Feh7ThO7taXCJcdTAwMDRrXHUwMDEyXHUwMDAyM4EovOSYn4XWNM544rBqqYCkRc2neFx1MDAwM1x1MDAwZorgOlx1MDAxZldcZpVcZlx1MDAwZppcdTAwMWLQjZ16My651FxcLN7OJFx1MDAxYVx1MDAxOOmhXCLRXHUwMDFh1VFGkOFxa0CSeKBcdTAwMTRSKkkoN6BTQfpcdTAwMDWAILl4rqXA7Z2jXHUwMDFhfF1wTXzae1ZAV2H4XHUwMDBlJ5uumHGleMf0cNCf5lx1MDAxOCvdM51DXHKCfCe0mFVkXHUwMDA0xZUuu1x1MDAxOdsv4Dly55bYfbnqXHUwMDFjXHJbV/fn5YpcdTAwMTnu7fdNZ7DWXnWya1x1MDAwMnDFuLVhijpAiXFsum2BUppcdTAwMThUjzguRrhcdTAwMDTRXHUwMDFhXHUwMDE5/jZcdTAwMDQ0XHUwMDA0VvtcdTAwMGJERni8qoIlY+Tyl6eor1wiXGLzVytHXHUwMDBlxJiDz3JJg1x1MDAxYlx1MDAwN2FcdTAwMTVfRompZdiWZYmA7tmPh8vm9eY1vzoo3NTL9j7rZT+ByVx1MDAxZO89OcYtxWyfQHDFakJcdTAwMTVcdTAwMTVcdTAwMDbDW1TJ5GK5XHUwMDExXHUwMDEwXHUwMDE2oLDRf4LHYIWU/nZBL02gmVx1MDAwMFdcdTAwMTP7XHUwMDA0fmE45Vx1MDAxOFx1MDAwZT/MOFxm//bzhN+Lnc5pXHUwMDFm7vWrXHUwMDFi831Y80a5sGD943b8QrdvrFx1MDAwMVx1MDAxMGre2Fx1MDAxMf3ztz//XHUwMDA31ZfTbiJ9 - - - - - - - - - - - - - Hardware Interfaces - - - - - Hardware - - - Abstraction - - Layer - - - - - - - - Controllers - - - - - - - - Components - - - - - - - - - - - - - - - - - - Commands - - - - - - - - - - - - - - - - - State - - - - - - - Motion - - Generators - - - - - - - Learning - - Algorithms - - - - - - - Application - - Logic - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Position - - - - - - - - Velocity - - - - - - - - Impedance - - - - - - - - Admittance - - - - - - - - - - - - - - - - - - - - - - - - - Robots - - - - - - - - Actuators - - - - - - - - Sensors - - - - - - - GPIOs - - - - ( - Real-Time Context ) - - - - ( ROS - 2 Context ) - - - - - - - - - - - - - - - - - - - - - - - Inputs - - - - - - - - - - - - - - - - - - Outputs - - - - - - - - - - - - - - - \ No newline at end of file + + + eyJ2ZXJzaW9uIjoiMSIsImVuY29kaW5nIjoiYnN0cmluZyIsImNvbXByZXNzZWQiOnRydWUsImVuY29kZWQiOiJ4nO1dV3NcIlmyfp9f0dH7cm/EcPZ4s28gg7w3jWY3XHUwMDE0XGJKgLDCStqY/76ZqCWKMlx1MDAxOIlSl2bETHTPXHUwMDAwVZyqyi/zyzxp/vvbt2/f+49cdTAwMWTv+7++ffdcdTAwMWVKxUat3C2Ovv+O71x1MDAwZr1ur9ZuwUd8/P+99qBbXHUwMDFhf7Pa73d6//rnPydHkFK7+XyU1/CaXqvfg+/9XHUwMDAx///t23/Hf8IntTJcdTAwMWW7WVHKXSjaPnpcdTAwMTjt7HC3t3FYPlx1MDAxYVx1MDAxZjr+0stiul6pX2xVXHUwMDFh3uSjXHUwMDA3eF8xQbRSVDAnhVBCv376iOt0gjCrueSUW+mYVK9cdTAwMWaPauV+XHUwMDE1vsK4VsQxxaWCz51xkzNUvVql2ofvSM5cYpzAXGIqpFx1MDAxM4a9fuN5Qf/6Rl/f6fW77bq31m60u7jqfzBcdTAwMGb/maz5pliqV7rtQav8+p1+t9jqdYpduEmT793WXHUwMDFhjdP+Y+P59lx1MDAxNkvVQdd3ludfufx5XHQ88P7rceVir+qVJ4fB71aqLa+Hz2JyXHUwMDEx7U6xVOvj7WJ0ciG4yM52efzY/jNZVrfY9LbxubVcdTAwMDaNhv/ErfLPXHUwMDEzT33Q8zz8slNKXG7DtX39YFwiS3Dfg+9cdTAwMWW0W2O5Ypxx7iRXkyus9dZBoPrjs95cdTAwMTZcdTAwMWI9b3JncVxyXHUwMDFiXHUwMDEzYZtax6BTLj5cdTAwMWbEXGblTDBFudSTXHUwMDFmbtRa9eAxjXapPvmd8bt//j4twTOEc3KBcFxyPPZcbqXkXFzC7dFcdTAwMGJcXOEzXlx1MDAxZVl753yb3iu9NXis3Vx1MDAxZFaK+5vZXHUwMDE4wem1XHUwMDAxjUuLTeCoZaQmXGaIh/FVXG5KXHUwMDA0t4xP8IdHXG7BiFDMMmG14Vx1MDAwZaC1clx1MDAxY73AXFxQRSzTkmrfXHUwMDFhXlx1MDAwMS64I5oqqa1RQdll2lFupDH8/dh4XHUwMDExnInoiJ/v/Fx1MDAxOSvHf7xcdTAwMWUzOdonen3vYXK5PjFpn1x1MDAxY1x1MDAxZlxy13u1TsVmjlx1MDAwZeR6bjB6XHUwMDFjfX/93p+/R5/2+eCt7Vx1MDAwMb2WXHUwMDE3hcfBwdnallfIXHUwMDE1Rak9/Ssvv1/sdttcdTAwMGKf9/JyMFx1MDAxNJltkzk9brLHrYtRLl/oLnben//1n3hIS1BcdTAwMTViZZCeuq9TaKYsXHUwMDE2zVx1MDAwNlxmXHUwMDA00yDnXHUwMDBiozn6MaVcdTAwMWTNjki4VDCW0nFmbVx1MDAwMNT6o0BcciaZKFx1MDAwMVx1MDAwNp7CXHUwMDBmqmhkh/FcZtLirFx1MDAwM12wYlu3nFx1MDAwMVpaWifrarf6p7Unb3xcdTAwMDOm3t0sNmuNx6lcdTAwMDc7XHUwMDE2Y0R0sVtcdTAwMWXBbfy23ep73dtiyet9n/pStlGroHx/L3n4jSnR79eA1r1+od/uTD4twc9cdTAwMTZrLa+7vYhxandrlVqr2DhbZFVwS7ytl+fIiO/p3lx1MDAxNHtcdTAwMWV+indAvVx0xdYnXHUwMDE3QVx1MDAxMDvtQN07Obm380BMK2eHR1vdM367v3Z4lj3oXdYr7ZSDmFtLXHUwMDAwXHUwMDA1TFx1MDAxOFx1MDAwYujxXHUwMDE5tzGGXHUwMDE5JWi0laRcdTAwMTSkldnAulZcdTAwMDdhWFx1MDAwMFFcZvBopKagK1wiIFx1MDAxY2GSlTFA/MXK6eqSXHUwMDEwdlb6bs1cdTAwMWIhTKfeXVx1MDAwMML/bmVv4DFcdTAwMTRLfZDaf7f2io9+uK5cZstT11x1MDAxMVx1MDAwN9zZa1lcYsHavp1aa6mD7058XHUwMDA3oVxyY9R3f+fBeEDzw3qxTU/Ws7m1gj6+uttmw5TDmDJcdTAwMDXMmjtlLZfSyYlReyHYjjk00n5cdTAwMTSt2lxmS0pcdTAwMWNX1Fqq8Fx1MDAxZlx1MDAxNeFCz2TYXHUwMDEyuFx1MDAwMlx1MDAxY+5z3j9cdTAwMDPD3v9xmD/IXHUwMDE2h1x1MDAwNbU1zOel/PFjQ1xmP4BcdP9cdTAwMTLm3re2ms3cXHUwMDFjPG5tZVx1MDAxZVx1MDAxYfvtwbB/v7WC867lsyN3UC3/MHe5oyfa2d9go1x1MDAwNdebXHUwMDE2j0CzeCWkuFx1MDAwMfhcdLa4e1x1MDAxZi1VKVdCmlx1MDAwM11QSoBLYLSZXHUwMDEw/lx1MDAxN38geVx1MDAxZMSkIdygt2GkZOjmL+RcdTAwMGIwXHUwMDA1flx1MDAwMFx1MDAxY5G0L/DHKqX0fZ7AXHUwMDFhfNxtN1x1MDAxYSCpSXhcdTAwMDBzjGiQSESuZlx1MDAxNcx/Nm8wsZDVzCmQXHUwMDFmt7hcdTAwMGKft2b36qS0f+lcdTAwMWTWa2rt+mFY7st0I1ZpSSwzWlxixangNOjBS8I1tUBvwTWwLrCsVFx1MDAwNOW40ZxrvVxu4H4gZdhaXHUwMDFmNnPd/Vx1MDAwN+mdrOduXbV6qu3Vl1x0fr9cdNaxXHUwMDExdqukXHUwMDEzWonF8Vx1MDAxY/2QUo1nLVx1MDAxOVx1MDAwMfNqXHI3xoJjLFx1MDAwMnh2XHUwMDFmg2emXHUwMDA0oUY5WIWQkb582Fx1MDAwNGvKXHJcdTAwMDdcdTAwMDWQtCufKlx1MDAwYtzstFvjdSVggOeYo7BcdTAwMDFcdTAwMGUvZlx1MDAxNfb3WVVEYFx1MDAxNVx1MDAxZXZsXHUwMDAwXUpLXHJfZjdstr8zXHLWUrfd62WqxX6p+ksgSyhcdTAwMDVN5Fx1MDAwMFx1MDAxYcCVjXRUTFx1MDAwZX2OyVx1MDAxOYAxZeDIXHUwMDFiK7XQ00RaYWBdS8Es5Vx1MDAxMmDMXHUwMDAya10lmXZcdTAwMDTW5zS3ypgob55wq1xygyVcblx1MDAwYnSb+kL8L8TaKSl5QvaZJ2WfeW7tUT2um6tO15ay+c3DzkOvk6y98z3EYrefq7XKtVZl+qp/ZlAswq/Hyqc06I3FjStcdTAwMTA4x4ywzlA9MVxu+DCKnfFzJlaCWDmwXHKGa8FcXOjGeq3y/DXNjvr71pSBRVx1MDAwMd90XHUwMDAyjFx1MDAxNLXSKTrJyHhdXHUwMDE1bi5cdMOZXHUwMDA2n45xQWVoUY1ir1x1MDAwZnqrWevDvT9q11r94D1cdTAwMWXfzCyqoKpXXGZJXHUwMDE3XFyU/zNcdTAwMDBDLeAqdPCk04L0h09cXKhfdujrf//n98hvXHUwMDFiSZRcdTAwMTXGXHSmtOXMf2yGXHUwMDExZZRkVjBcdTAwMDaSo53R885cdTAwMTZcdTAwMDPO8dlCuJyc7Df/38vyKyODb75GOMB+K8G0Xny3JFx1MDAxYWRvVtky8P5Ksl9cdTAwMTbX2YJSwlxm7lxcKO1cdTAwMTibVtnSaWKosZRKboF62eBiV6eznSTMOVx1MDAwN9ZVgVx1MDAwZdK+TdlXrc1D5ItbXHUwMDA32JerXGK8/vKt0IX3UVBzXHUwMDE0W+U3k69mrVxc9uuKXHUwMDAw/5rDSFwi+FdgNVx1MDAwYrEvNnvXJJZ9MWHjk5E4qFx1MDAxZtC6S2yZzFx1MDAwZWOni35N41x1MDAxNrQjXHUwMDAxnqVcdTAwMWNoMMs1n944kVx1MDAxYSxcdTAwMTW31jKqNVx1MDAxOClcdTAwMTFY2FxuuZYwJDZcdTAwMDTCiGRmvCFccspcdTAwMDNcdTAwMWWNz8f4iWBpXHUwMDE1TSw5KTGeVb9i3pXoqrNH77pzcEDFwWVhK108ay6n+UmhXHUwMDFjwW0vcLmRaFx1MDAxOd9G+jRcdTAwMTXjXHUwMDFhKY9cdTAwMTMgaU7Aw3xcdTAwMWLRmkv+fi7KXHUwMDEwcPSl5Vxc4Fx1MDAwZsqJ2Fx1MDAwNLlcdTAwMTgsy1x1MDAxYeB9goJXoT470cpEgFx0X2FcdTAwMTitilx1MDAxN8WngmnGhHJuXHRXNlx1MDAxYVx1MDAxNCnlRVx1MDAwMVx1MDAxMsQ4oZw7XHUwMDA3vFRcdTAwMDFcdJrOJpGKXHUwMDExjdssoExcdTAwMTmQ3eRcdTAwMDJQyoHgwyqMomDKojPCwixcYmg00CDNVqBDP1x1MDAwZlx1MDAwYjrtw88nRIHmsIIgXHUwMDA1XG4s5T3851x1MDAxOUm3e09P2yOW65+2Sqz15OWPROtk8ZJcdTAwMDJniHWSgvdJqVx1MDAwM4UxJczCalx1MDAwMu60Y2B3MW2Bh4SQXHRHwFx1MDAwMeOAXHUwMDAzLeFPKsJCqC1cdTAwMTE/qbqlYFx1MDAxYdxcZoSlqqTgXHUwMDFkRCzRXHKal7hcdTAwMTM8XHUwMDFlXHUwMDAxXHUwMDFhJrS9h89VxTNfXGae48N4S6HBXHUwMDFiOdCNalSa7WF38/zkPHfdujjd3Lzp/4K9lVmrXHRBZtpcdTAwMTCOt1x1MDAxZUD1M2VcdTAwMWNcIsZaP1NcdTAwMWWjXHUwMDA1XHUwMDFjYExcdTAwMGZcdTAwMDCH1IE29vm/k1x1MDAwNEBKwDVcdTAwMTbcMGmjN1xyXHUwMDE0eOFcdTAwMTJ+gGppXHUwMDAxVj5cdTAwMDfmXHUwMDBiLC8nnll+XHUwMDAz2kjBXHUwMDAzsDRcdTAwMDJcdTAwMTXShd6doIIyxs1ie2dcdTAwMWZl7F7s135cdTAwMWJTXHUwMDBlv/27lffA7lx1MDAxNPttf1x1MDAwMsGURSSUIVx1MDAwZuNcbtg3kN1FXGbk2y2hz0TJyU9cdTAwMDXs41x1MDAxY/tcdTAwMTS0jz8vNepCQ7ZyJo2dmVx1MDAxM2FkbJDPXHTtOGjWxeNcdTAwMDJiMMzdjWxtdCbXjqRcdTAwMWLcXpnyfXrQXHUwMDE1TWNcclx1MDAwNVWkOJNcdTAwMTimXHUwMDA1kVx0xPKMXHUwMDA2m63Bi4A/pPbfriRiXHUwMDAyVFx1MDAwMjvQyJmBVE+uZ1x1MDAwMVx1MDAwNvFcdTAwMTJcdTAwMTmQxlx1MDAwMYPxhVxmPkOGxLaoPl6dPlx1MDAwZfSPXvdm7TpXXHUwMDExTb2bwoxcdTAwMDPDQrWML2jhUoPGYXZxtERfdNrRXHUwMDAymtVcdTAwMTjGtFx1MDAxMMZwXHUwMDEzqLyVVlx1MDAxMam5UCi/XHUwMDAyPPLkUv+ArnNqXHUwMDE1+ttcXFx0YFx0yzCIl1x1MDAwMlVcclx1MDAxN+An8581XHThLdZcdTAwMGXv8J5X7LZqrVxuXHUwMDE41GyjXHUwMDAyXHUwMDE2qF9tJlx1MDAxNSGfY1x1MDAxY4Lm73VpUVx1MDAwYlvIWZTiXHUwMDFkZpHGmkXDNYr2wjCno85Ddef47mD3zGVcdTAwMDf7XHUwMDE5o1x1MDAwZV3qYY7esORcdTAwMWGoIDWOUjpcdTAwMWQnV9pcdTAwMTClJKDcajBVXHSGdphcdTAwMTDEOYo7wkJcdTAwMDBkour059pEh9vJ3H2UU7oqm0jzldr2fv6qxXpX+rR/cbvRPU2jTVQzsmrhwWGy9eI2MfKiU1x1MDAwZVx1MDAxNk0tkUxI54w1mHA3XHJcdTAwMTZgkOiGOYy6O6NcdTAwMTJM4MF4LFx1MDAxYje0YFx1MDAxYVPvXVx1MDAxOCxzbaI0XHUwMDE4XHUwMDEw0e7va1x1MDAxNLOdTlx1MDAwM1xm209Hc69dqZVcdTAwMTIyiXNMQ9Ak+lx1MDAxN1x1MDAxNljWKlxmotdo1Dq96GZcdTAwMTbUxEfRXHUwMDE08D1B6Vx1MDAxMrkgha37m+Ygu3l+dVJ32qveePeymfJcXFthXHRVjjIjlFx1MDAwMo02Ocsz75VcdTAwMDSklisrwFx1MDAwN+AmQYMoXHTVVHMtpGRcZnzFiIqXXHUwMDE533lJv1x1MDAxNVjr4Gi0lzixcZ1cdTAwMDeedz/uXHUwMDBmd+43XHUwMDFihdu7bqHZqrlcdTAwMTdcdTAwMWL0cbrAx7beacRmyTj4NLEyXHUwMDBlSlFYvUy+U/Z492wzP8qXa1x1MDAxYrm1tcveRv7uLI72fVxuXHUwMDE5V1RcdTAwMTFtQJlyXHR+l/LV4KZTxsExVGCO/Y0qvoSccVx1MDAxYVx1MDAxYvhV0lx1MDAxOXDt6eIyXrlcdTAwMTXZrZvC1X2RgVx1MDAxMavIQq56W/jUMs5cdTAwMTWxXHUwMDE2KZAxlnOadlx1MDAxOeeaXG4mzJdcdTAwMWWf0uMzunzgnpNkbom6IJtdL7VvN670ei6vM2LvSW1cdTAwMTZYymWc4mY1s1xuU/ssXHUwMDE3gSQ3J4hcdTAwMDUvRcC/1NDk+vSsSI0zqZnVX1x1MDAxMj7VWi5ewsFcdTAwMGJ1Vrol4tDq/Ligbi/q11e1gSpkdK/5o9D4zFx1MDAxMq6YXCJYimKUXHUwMDExQlGTYFx1MDAxYedqRFx1MDAxY9aoMJhcdTAwMTZdNvM3XHUwMDE1ctDSsULOXHUwMDE5JlTqJTqu3VRcdTAwMWKXba+6XvDWNuuFrZaXrZU3Uy7kWlx1MDAxM0WdZcrhNkWwLuyT0XGuXGYwXHUwMDE1JqLjSn9hXHUwMDE5XHUwMDFmXHUwMDA3X1wiXHUwMDA03IXTlSZppMBSsHXG4ko8d31RqniaX1x1MDAxY1Zbd3SUOT6upZ6KM1x1MDAwN1RcXHGKhcCgx8NFNGDnNHXYXCKI8lx1MDAwNMOmjjAqpVaYQIxbmlx1MDAxMUU0kmiAIbhcdTAwMDXCaF9cdTAwMGLBXHUwMDE32aZcdTAwMTZWXG6s8q+owH33fSqFPpjyXHUwMDFk88mKk8mnPltpXHUwMDFhebxcdTAwMTjgKzMtXHUwMDAxk5P95v97WVx1MDAxZMBofEJcdTAwMDFzmmN52USm5qaSXHUwMDE3XG5yVN4stSpPlYPalZGnR7dxZTlp0Vx1MDAwMYpcdTAwMTMumMFcbjYmZSCbwDGChUlaXHUwMDAxx3OSJthHyGLZrDZOKFx1MDAwYuzaxycnXHUwMDE2Tlx1MDAxMXhcdTAwMThcbss5XHUwMDFjpjS6iJbB1ihHY3pcdTAwMWF8KYFPoVx1MDAwNOJcdTAwMDRh/GFIXHUwMDA0VqRcdTAwMDbcXGaqXHUwMDBivE9cdTAwMTi7zFx1MDAxZWpXbtZPTr2b/XPGZabXOJan/jzD1KpcdTAwMDGOfYXFWDQn+yfP/lx1MDAxYyeYdc+BXHUwMDExK2C7ie6uKEyahVx1MDAxZrNAPPwgf1VcdTAwMDSUcGaEM/g1sPrSuCiHTlLDaUxcdTAwMWaEL1XwKVRBrCyMXHUwMDBmXHUwMDBmS8HKlEF82b2RzlCp7eKcoEhcdTAwMTVrepd7d2d7XHUwMDFk73K0t5dnP36kXVx1MDAxOTBcdTAwMDKuoqOgiFx1MDAxNVxi6HRtgVx1MDAxMpRgvz9LXHUwMDA1trcwXHT6XHUwMDA14H5cdTAwMDPzYFqAXHUwMDFlVUZGub2cXGIqqLRwlzFXylx1MDAxN2l6aTtcdTAwMGXHM6zK/NJcdTAwMDSfV1x1MDAxM8RcdFx1MDAwMr4yIVx1MDAxOViZXHUwMDFliJ+QosFToc5fcTl3O3o9f1x1MDAwNlx1MDAwZao52Dtu1lx1MDAwYvYyf8RcdTAwMWbT3t6MM1wiXHKzhmNcdTAwMGWZXHUwMDBi1uo7R5xcdTAwMDZlyMcpPkYnXHUwMDE45TVcdTAwMDRIXHUwMDA38Fx1MDAxM4w5auHvXHUwMDEx/6pcdFx1MDAxYzBcdTAwMTSmXHUwMDA05lx1MDAxYlx06mdrr9tcdTAwMTiUI8z+krvRf1x1MDAxYkVcdTAwMTArXGL4XG6KwIr0XHUwMDAw6JT4QKFcdTAwMWOrXHUwMDFkscSeff76pHa8vl9vn/cuXHUwMDFlNnJcdTAwMWJcdTAwMGascpV2QsBcdTAwMWPhRlpwk+BcdTAwMGbuXHUwMDFi5/VcdTAwMTJcYudCMGdwc5cmXHUwMDFhJ1RcdTAwMGUjNto5Si2TXHUwMDExuchcXFx1MDAxMFxui1x1MDAwMXOB+zn+pMOXojzFnYNDv9TAJ1ZcdTAwMDOxgoCvkFxirExcdTAwMGbw2FihXHUwMDA0XcSdWVwiSDC8XHUwMDE59Vx1MDAxZlx1MDAxZtTJcK3WMlx1MDAxYlx1MDAxN07Uuzt7KVdcdTAwMDOY0WtcdTAwMDTDrTDc41x1MDAwZahcdTAwMDFQzuCjOatAXHUwMDExaGNcdTAwMTNcdTAwMWN8XHUwMDAwy9BcdTAwMWFWgpnSVrBcYr9cdTAwMDCZi1XSYJNxg5ww3CrRYlx1MDAwMpJcdTAwMTX2K1r4eVx1MDAxNUGsJOArXHUwMDEzXHUwMDE2glx1MDAxNWlcdTAwMDLnTPDdV0JAmbKgXHSWqE+6f1DDzc2e7l6tmeJmIcuzZyOefk1gXHUwMDE5XHUwMDFmzzBSflx1MDAwMD7n8DGCnY1cdTAwMWN4SZjllFx1MDAxY1x1MDAxZrCEKSml0uBcdTAwMTZcbklNxK5cdTAwMDF4jthcdTAwMTJVaoPtxIxccutcdTAwMDElOVx1MDAwNZ8yplxi8UtcdTAwMGZ8XHUwMDA2PVx1MDAxMC9cdPjKhIRgZYyAxStcdTAwMDLNXHUwMDA1dlx1MDAxNF6iXHUwMDEzVdme367n18/djVx1MDAxOFx1MDAxNbuH1dFao1RKuVwigDuvnGDGgFx1MDAwZmScXG5QXHUwMDAyLsk4aV8pzrXRXHTuXHUwMDFiOMLAJ3TgimFcdTAwMWJ0XHUwMDFhsW1gXHSAyGL7ViphpTS8fYhcdTAwMWJORsdU7n8pgk+hXGLi5Fx1MDAwMF8hXHRYUlxyzFx1MDAxZTfM4sdccmtpwFx1MDAxZS6TLXe8e3E+6q6dbTQyN4eF89z55uF+yoebXHUwMDE4XHUwMDA1/F8qJ0E8LTZ2mlJcdTAwMDWaSeKwXHUwMDBlUGhcdTAwMGX/2OSChUBNpEOdXHUwMDAzWolrLWxEXHUwMDFmMKaIXHUwMDA06bDWgdpcdTAwMTLY9T2kXGZAXXEsep5HXHUwMDBiut2rVua63Sjw5qnlzVx1MDAxMe+4/dGbtMGbSps/LItujvCr2FxydEeFlFx1MDAwYo1cdTAwMTJ/XHUwMDE2/ZPzcql1tD8sVI8qOnvUXHUwMDFk9ne9uD7VaVx1MDAxMX3LwDF2XHUwMDE2RcZSp/mnXHUwMDE2feXAXHUwMDEyWjpv6/xL8MeCP6tHO1hcdTAwMWG2zEDbcrl6t9s4WMtcdTAwMWNcdTAwMWU9VU5Zo2mLrpxu0Vx1MDAwNzkhXG6bJoHexyQxPVP0k4tccq9I61x1MDAwM09cdTAwMDVcdTAwMGZhfrXLl/B/n1NcdTAwMDaDj1xcUM5cdTAwMTeX/of6w8l+81iXj0/XrbdVqVu1+Zhu6TfGXHUwMDExy7Fsk+FcdTAwMTD6QNbU2CqAy2ksfIGrXHUwMDA0XHUwMDA3sq9E+Fxys06CzvpS/HO8fjaj/7STjMNNXoLq99rnpV6dNi7qXHUwMDBmu5SdZXZrZyblderGUUKFcNRZqnSA7ijsPVxuplx1MDAwMONqXHUwMDE0R3QkJvY0QsrBx1NcdTAwMGVcZlx1MDAwZZOUWUxcdTAwMWZcdTAwMGJKOacg+87FXHLf+Fx1MDAxODFfoMP/l/ePr+W8/6lvh0Vhcvhv/r+Xxj+nsc6OwcY+hi8xymOfP5RuytdWsJ27/OHuzdHBj5tsyuGvNTFOWUpcdTAwMDXD4TpBd0eR8aw0XHUwMDA32sEm6O3g6GH4XHUwMDE56lx1MDAxY2Xw0lGDPFx1MDAxOMFKXFxMXHUwMDE4wTwly8OZwthcdTAwMWSLoYx8mDr4ivolivtcZqNE4UhcdTAwMWRcdTAwMGJcZlQpZfxjJ6KPj5WkJM5HidNoXHUwMDFklVx1MDAwNlNcdTAwMDTfXHUwMDExbnK6mXrpWV80jlx1MDAxZcWN01t24/wsV1xc5/fnN6e+YvGYSUTPsFx1MDAwNbIqQHlRXG7q0LDpWL3kgsAlcuCHTk1ccm59xZvDKXLjLVx1MDAxNi6Zjdp2XHUwMDA36Fx1MDAwYua0ccBcIrFcdTAwMDc/m6D/8/ZcZp+seH7P8Im+WL+943ujXHUwMDAxP9s7UsJcdTAwMWJcZlx1MDAxZTgzg8Tow0tbKadcdTAwMDSmZIbyVL4/b3TG0lbcXHUwMDAzdYvtVS3fcfxtOmu1+1x1MDAwMmCTQHK1NrgjrVx1MDAwMqWFmljm0IVcdTAwMDPDLanWat7pXHUwMDA0JVx1MDAwMnw/QFx1MDAwMd43IczU+SzBXHUwMDFlXHUwMDEwXHUwMDFhbidcdTAwMTeWSjlfX8Qha7w6wJSmTODq4TGZqLzGZVX2XHUwMDAyI4+aw6uNq/uN7YN2zlx1MDAxNNz23dFoY+37ZF3+eUZcdTAwMDBcdTAwMDbw9uFcdTAwMTZiXHUwMDFmYLhcbt/m68/JSFhJTFEnSGXhXHQ4XHUwMDE2XHUwMDEy4IXmMO1cdTAwMTR3veZjVp5n1U5GnN55ZnvQj1pcdTAwMTTF+lx1MDAwNYr9woGiaFx1MDAwMVx1MDAxY8CE1mTgXHUwMDExWi0xh0FKXHUwMDEwXHUwMDBlXHUwMDEzWtNyQ5Z8Q7qjNffsW1x1MDAxYd+S4XlzhcNtNjjQXHUwMDEw7rZcbrRcIpCcg1x1MDAwNMNcdTAwMDfP7S99n77uj8JcdTAwMTc0XHUwMDA1gyQwXHUwMDFmXHUwMDA2+09GKG9cdTAwMDGC5qRiXHUwMDEyX5ZPlMHn1d3LzHv4xbpcdTAwMWI7TDjnd1x1MDAxZCa6W8hYj1x1MDAwM55cdTAwMTfDwa4rXHUwMDFjobJcYtGYXHUwMDEy2bfNp39/pKa2gFaYjSvLJaHMKMMsjlx1MDAxYtVcdTAwMDFORCVcdTAwMDGFLKzBeULal905aY+Mc+iYY5JJRaXzdXPy1yj5sWd9s1a+gPVcdTAwMDHAUmCcJLLeKGDZ+O1cdTAwMWKHSnDBWr+/JrIurzbOtrqXrexcdTAwMTPvneZcbs3GcenOhpFcdTAwMTUz0ItRhU1ZXHJzwJGs8zfze55RJIihilx1MDAwMn6sMVxcmFxiq6UsYUBcdTAwMWNcdTAwMWO47oabqHbKUlx1MDAxMGo0tr5cdTAwMDHsYfubv1x1MDAxObZcdTAwMTKb6GWQwEpcdTAwMWSeToNcdTAwMTclQ1jy7fswrnH28upQM69R+yErtW7Vpnio5+lTofVUMLTeWlx1MDAxZTRsNaCJXk1cYjThkV6MOqD61lxiK1x1MDAxOFx1MDAwNlx1MDAwNtx03a2knFx1MDAxOClcdTAwMTizUlxiwFx1MDAxNlx1MDAwYsHFKKJcdTAwMDU267fA45iMmsjB/2625/1DvCyWkNBIl3pGIFjicHYnXHUwMDEymuG1lKxORO9nXHUwMDFi86N2r4Y9zH1PbNlRliuZ1OVrvVx1MDAxM5xkOdvwXHUwMDA0+7KHL2iFXHUwMDAzunh8N1OjJYa/XHUwMDE33+LeOm/u7Ov8SfmQ2Ytqbq16ueHFpfqnZrrC2I5LsFx1MDAwNaDW+VSju+cps5w4pyWQaGC2kiVYXHUwMDA1/Fx1MDAxZTbwmuPLXHUwMDE5liglM7g7sVEkT3ajOShen6+t5682MqpbuCjePvxcdTAwMDJcdTAwMGI3b1x1MDAxNFx0p7H58Fx1MDAwMFx1MDAxNVx1MDAwNWsxi6fDR1906sHiXGbWXCJYTP1XlorpzTGpOcF4kzROgCDz5JpGXHUwMDFhbNnjXHUwMDFjl45cdTAwMDORM77Uq1x1MDAxOSOZuaVKxTXQ+sBNrjeZtzfNY77w4Gz4cFdk3lx1MDAwMoZsjsJcdTAwMGZcdTAwMWGy8GreM5V5MfOm46dcdTAwMDc5q4GP0kWo/DNk282N3I49qDxlfjRPj+197eD2QaVcdTAwMWayYMLGo8uFcePuqVOQhVx1MDAwZjCHkVxu65jCvrcpN3DCjWtcdTAwMWI+l4FcdTAwMWKdXnjXpb3N2ywrXHKvRmulRyN6aTRwMn7+JNxzp1x1MDAwNVui4Cv6qlNcdTAwMGZcdTAwMTfLyXhbm0mrTaDOQzFcdTAwMGJ0XHUwMDEw9164XHUwMDFlbykmhlx1MDAxNudcYji7jlx1MDAwMVx1MDAxY+LmT4ZccpzSXHUwMDA2XHUwMDBihn/5cK1cdTAwMGa0cNvNjlcuoowmY+Lm6PygiYtYTvI2zsb66ZZKin1cclx1MDAxN/fh9HU/r1x1MDAxYjvNZme73Vx1MDAxYVSrSm5e5dJcdTAwMGZasHFcdTAwMTTYnbXY5t5cdTAwMDVLtrUjYO1cdTAwMWSGYSk3XCLdTpxwXHUwMDFhh3yxz2XiNrZvL1x1MDAwN1x1MDAwN4XbbT28ONlcdTAwMWKah+ObeimNJs7EXHUwMDEyQvD+Kdb5Lm7hoi869WAxhnBcdH9aq7hcdTAwMDZvblx1MDAxYSzGXHUwMDEyoIpcdTAwMTSAXHUwMDAyxj7Rxv/UXHUwMDEwgzZcdTAwMGWHilAuZESDg7CNY5h1XHUwMDA2znZM6eJf0shly5jykqCVm6P1Q5NcIiPW81x1MDAxZTP3jKZSNrNT3G3cnm7k9ttHW92d/F1jO7y1MJ24PJZoIVxywVx1MDAxNCdcdTAwMGLPRlx0y1x1MDAwMq38pFwi0lpjXHUwMDFjx6/4Op6/ptpcdTAwMTNM3MG8eYkzVCWNXGIngN5cdTAwMDaNXHIkmFx0h1m3Mlx1MDAwNDNNQLk4qZ0wXFxy/yzhVG09lIu9qvfr9+ZiN7RcdTAwMDFcXFZzrFCOUN9CxbekXHUwMDAwksxcdTAwMTg3/C072nM2JbDuhftF/Zek+WXi5XT8cUhEJydcZpnfpVPpXHUwMDE2zKpeOmd6plx1MDAxNY8rUpDx89PhQWHKkFpiuInsMjos1Fx1MDAwN1tHl1x1MDAxN5VyLneav7FcdTAwMWIpQl2MXHUwMDFkXHUwMDE30lx1MDAxMm0kVlwiYVx1MDAxNep00pxcdTAwMTaSSGwjyUBcdTAwMTiEVMk1J1x1MDAwMaGU2L9cdTAwMWFWXGY/XHUwMDA1jCGC9FqFU1x1MDAxMTVcdTAwMThtjbNcdTAwMGZ5aIY6c1x1MDAxMoew+8dRJKprljH2QFx1MDAwYv1N4b9cblx1MDAxM16/XHUwMDEw++TxlVx0PfSwOnpcdTAwMTP4Z8R0XHUwMDE5XHUwMDFij8hYolx1MDAxZkN95/HiuK5H/WP+NCy2XHUwMDFlXHUwMDBl79TW3efAPrB0XHUwMDAwtlx1MDAwNFx1MDAwMXUq0MR8nJRnqOHWYNvGXHUwMDA0i1x1MDAxNHHEksRVcPg9LpzlXHUwMDExhUqgi1x1MDAxNM5aYkDOXHUwMDE04Fxch0vTjVx1MDAxMZpTXHUwMDE206/w11x1MDAxNyS+iez/xfGfmfX0x19cYj/4JXXA7MCXim1hLlx1MDAxY1x1MDAxNqXrJZJcdTAwMTf2RLlwcVb2js7ybuO416yc1lx1MDAwYjb1vrzUWI4owXd2ymh/fsJzXHUwMDEyoiFcdTAwMDKejJLYuVjblG/uXHUwMDAw+jXjLmaYQVojX5XdXHUwMDAzXHUwMDAwQOeid1IuXGb5WXOX151KY+SLxzf8XHUwMDE3XHUwMDFhXHUwMDA0ievFKXP0RadcdTAwMWQtilGCLVC4XHUwMDEyXFxcdTAwMTk73dBCUk0kZuxiXHUwMDBlO3BcdTAwMTmVXFzkS1tCXHUwMDA1XHUwMDE2b3Pcl9Vqoc1cdTAwMWRmXHUwMDE1pzhz9m9cdTAwMTT4OmnftPu+PcOVXHUwMDA2veZo/GDQK7iW5Pd1ZGxqXHUwMDFl1nrDXHUwMDEzkYtcdTAwMGbqeWw/XjZrT2e1XG493qtcdTAwMWZvu4uyvzwrrYBVXHUwMDAyK1x1MDAxYlx1MDAwMZM4hyOYY1x1MDAwZl4t0czgUFx1MDAwNGEoS1x1MDAxMLCrMG9Yf1x1MDAwM1x1MDAxYUhFd+ZIq3XbcNW9/qipcmfd652ePDi83vHWU2ndYsFcIlGZU7FEQCj6olNcdTAwMGZcdTAwMTbLXGI4e9xo61x1MDAwMCxiOnVBgtHRSjHM6Fx1MDAwNaauXHUwMDEz7FxcXHUwMDAzayVcdTAwMGVeXHUwMDE001x1MDAwNDmYt6hcdTAwMTb2XHUwMDExXHUwMDFiO0KBpGi9XHUwMDAyXHUwMDE38LPYt2ypPyj2292kTNxcdTAwMWOtXHUwMDFm2tdcdC8ncSsnRGy1jcFcdTAwMWVLVi1UZfAzeyF/eiP0YOvsyNTP65f3/Dp7XHUwMDFj110zPcBFO6asXHUwMDEzWJOEzlxcsOG8INjRSWIukL9cdTAwMWRNXHUwMDFhjVx1MDAxY0Ovm2Gd9qeyco3qzvagIW5rfI3XR6Jwc2t0NYVWTsyY52w0cFx1MDAwYvDxXHUwMDE3XHUwMDBmeURfddrRoiiYOWCDXHUwMDE23CehqJ7mhEqAiFxuLlxmZzj2PcFcXFx1MDAxZiOIXHUwMDA1J1x1MDAwZVRcdTAwMTSOx1FioVx1MDAxNHTFkbjbVST3fFx1MDAxNlx1MDAxYnfqtXrJWbg5XHUwMDFhP2jhQov5gFxm9NitSos9uyxbgpj2jnc22PBa9DZO+0dcdTAwMTdcdTAwMDfb4v7kuJ1+xEpLqFNAPI3BJlx1MDAwMoGcWutcYkWD48x4qy3dXHUwMDA2zsIqqTKfrMJK0bV+eWvtfKvX6txkvaNcdTAwMWR3spVNoX3j4ULUiX2DXHUwMDFiXHUwMDBmjHCJ4cTRV516tDhJXHUwMDE0IFx1MDAwMVx1MDAxYq5cdTAwMWJqXHUwMDAyXXdcdTAwMWSKMFx1MDAxOFx1MDAxYlxuMmotSzBGqVxiQNIpQceA0Vx1MDAxMWCJ8OHA9DJcdTAwMGJmcVx1MDAwNUGO99m3N2XrvMm+5Y+2XHUwMDBmk7Juc/R90LpcdTAwMDWW8v6UPOb6XHUwMDE5m9mTWcWaXHUwMDE3zCtcdTAwMTa2ryRcdTAwMGKn5EVU+3NhiXUox8BZNXOBeVx1MDAxOUaTMVvFvoOSRbTj4zh6XHUwMDA3XHUwMDBl41xmK81cdTAwMWSfXHUwMDFkQkhHtb9cZrz/a1Puosr9wdXkVEi/+VpI+WqmpTVuoVx1MDAwMZDLpdYp1HfWL7LL1vv/37dcdTAwMTOv2Mic1ZretzWAXHUwMDBmvP3t/31cdTAwMGYwueL/frvzPVx1MDAxYVIxeJ66rCB451xcx3I1/7FcdTAwMGXkjObeQmkjjVhi6vdomOtcZvP7XHUwMDE3jydOn9ubS+9gszFKXHUwMDExduLG+1x1MDAwMcnDQcrYxpdcdTAwMWIxnS2sjSWOMXDSXHUwMDE0+HVcIsm539ZcdTAwMTDUjEZgT0tcdTAwMTORN1x1MDAxM2FgXHUwMDA1XHUwMDE4VynNr7Svilx1MDAwYmc+zn9cdTAwMDRcXFx1MDAxY55+41GYeFx1MDAwN1xcl1x1MDAwM2bcXHUwMDAy3m9h94zcrW80a/qp31A/bGf/h9w9WSTp3UkseZLGWo2V8IE29dxht1x1MDAxYz3utVx1MDAwMy6mZFx1MDAxMUnvYXlcdTAwMDNtXGZHjbOvwStcdTAwMTUmnOOe0nY6qTGwQFnGM1x1MDAxMqL6SklcdTAwMTebt4i9RVx1MDAwNF1srOqS9pVaR99kX1x1MDAxM+xdXHUwMDFmXHUwMDE0s8nRv1x1MDAwNc7ySfLUXHUwMDAz/ah9bYn97UpDyapWK2xJurjB7VtbzWZuXHUwMDBlXHUwMDFlt7YyXHUwMDBmjf32YNi/34rBUqnb7vUy1WK/VF1cdTAwMWFPXHRcdTAwMTSdUUVcdTAwMTjIuNNUY1x1MDAwZtdg41x1MDAxMPB5jbHoP4JC00E2sEKjyzXBTFx1MDAwMs5cdTAwMWOlzlx1MDAwZsmJXHUwMDE2JJg3j2Wk8HDANMuQXHUwMDE1NrDM6YbSXHUwMDFmm6z6esxSQSBxfFS7WV9cdTAwMWY2uDmQa1x1MDAxN0V6UrjNLFx1MDAxZlx1MDAwNHqTZ71oX2aaXHUwMDFm1otterKeza1cdTAwMTX08dXdNlx1MDAxYvquxddcdTAwMDJcdTAwMTl0rFWOXHUwMDBihvneWNzl+9ZzXHUwMDBiZEZcdDNcdTAwMGXUjFFKccPf2JY5b83u1Ulp/9I7rNfU2vXDsNyXUWvCXtGWYmTGOSY0Vdrq0KJcZlFcbsRcdTAwMDeopdFcdTAwMGXss1x1MDAwYi1qxem/XHUwMDAwh1ogOL3aJOBYROErjKWwrp/BjqJFNsSOwvFcdTAwMDdHXHUwMDFkwYxjeCBcdTAwMDacXHUwMDFhXHUwMDFkyIXAjtJcdTAwMWN4LDbG1uBcdTAwMDaokJ7QXHUwMDAyublcdTAwMTNYP09cdTAwMDWLympPXfwh/fSIMVxy91O58J5cYi4/PvYrxsnNb2tWu0C/wTeptNdcdTAwMGVcdTAwMTStzsCfXHUwMDE3mLZug3M4Q6iDReBylos7xFx1MDAxMiEsyot9vFxcgUhwu0T+8Vo+O3JcdTAwMDfV8lx1MDAwZnOXO3qinf1ccjaK21xiS1x1MDAxYlx1MDAxMTJgllx1MDAxNLeYkS9cdTAwMDPNmFx1MDAwNGhcdTAwMWROQTSVpkb7MrhSSYNwL41xsZJoxFx1MDAwN/KgzYfsY/HwzPHS3sFT7WC7sZk52l6KXHUwMDA34SBcYrmKisB386BcZlx1MDAxMiFQp+BLXHRcdTAwMGVmXHKeVng+hcU+1dooS3Feh7ThO7taXCJcdTAwMDRrXHUwMDEyXHUwMDAyM4EovOSYn4XWNM544rBqqYCkRc2neFx1MDAwM1x1MDAwZorgOlx1MDAxZldcZpVcZlx1MDAwZppcdTAwMWLQjZ16My651FxcLN7OJFx1MDAxYVx1MDAxOOmhXCLRXHUwMDFh1VFGkOFxa0CSeKBcdTAwMTRSKkkoN6BTQfpcdTAwMDWAILl4rqXA7Z2jXHUwMDFhfF1wTXzae1ZAV2H4XHUwMDBlJ5uumHGleMf0cNCf5lx1MDAxOCvdM51DXHKCfCe0mFVkXHUwMDA0xZUuu1x1MDAxOdsv4Dly55bYfbnqXHUwMDFjXHJbV/fn5YpcdTAwMTnu7fdNZ7DWXnWya1x1MDAwMnDFuLVhijpAiXFsum2BUppcdTAwMThUjzguRrhcdTAwMDTRXHUwMDFhXHUwMDE5/jZcdTAwMDQ0XHUwMDA0VvtcdTAwMGJERni8qoIlY+Tyl6eor1wiXGLzVytHXHUwMDBlxJiDz3JJg1x1MDAxYlx1MDAwN2FcdTAwMTVfRompZdiWZYmA7tmPh8vm9eY1vzoo3NTL9j7rZT+ByVx1MDAxZO89OcYtxWyfQHDFakJcdTAwMTVcdTAwMTVcdTAwMDbDW1TJ5GK5XHUwMDExXHUwMDEwXHUwMDE2oLDRf4LHYIWU/nZBL02gmVx1MDAwMFdcdTAwMTP7XHUwMDA0fmE45Vx1MDAxOFx1MDAwZT/MOFxm//bzhN+Lnc5pXHUwMDFm7vWrXHUwMDFi831Y80a5sGD943b8QrdvrFx1MDAwMVx1MDAxMGre2Fx1MDAxMf3ztz//XHUwMDA31ZfTbiJ9 + + + + + Hardware InterfacesHardwareAbstractionLayerControllersComponentsCommandsStateMotion GeneratorsLearning AlgorithmsApplication LogicPositionVelocityImpedanceAdmittanceRobotsActuatorsSensorsGPIOs( Real-Time Context )( ROS 2 Context )InputsOutputs \ No newline at end of file diff --git a/docs/docs/getting-started/assets/system-overview-embedded.svg b/docs/docs/getting-started/assets/system-overview-embedded.svg index 74df6ada4..dc0ff8b58 100644 --- a/docs/docs/getting-started/assets/system-overview-embedded.svg +++ b/docs/docs/getting-started/assets/system-overview-embedded.svg @@ -1,576 +1,21 @@ - - - - eyJ2ZXJzaW9uIjoiMSIsImVuY29kaW5nIjoiYnN0cmluZyIsImNvbXByZXNzZWQiOnRydWUsImVuY29kZWQiOiJ4nO1dV3dcIkmTfZ9f0af39SM3vdk35L33u3t0XHUwMDEwIFx0XHQjXHUwMDAxsnu+/743Sj2iqqAoUEM36pGmx1GQSqrC3IiMuPF/f3379r37clf9/l/fvlefy6V6rdIuPX3/XHUwMDE3vf5YbXdqrSYuyej/O62Hdjl653W3e9f5r//8z94nWLnVePtUtV5tVJvdXHUwMDBl3vff+P9v3/4v+mf899TrtbtONXp7dKH3i0TgJv3yVqtcdTAwMTn9Vo9cdTAwMWbppfXvb6h1XHUwMDE28Nu61Vxurl6W6p1q71xuvfT95LBVfnpcXL67OXLVqll46izO38/3fu1lrV7f777Uo011WvhcIr1rnW67dVs9rlW6139//9jrWZ9qt1x1MDAxZa6um9VcdTAwMGV9efH+auuuVK51X/BcdTAwMWF/f63UvIpW6L3yTJ9cdTAwMTFGMSO5XHReeIU/+v3yS3SZc1xcti44K7jUQqf2Nd+qt9q0r/9cdTAwMTBV+qu3s4tS+fZcbttrVt7f022Xmp27Ulx1MDAxYlx1MDAwZqv3vqdcdTAwMWbfWFx1MDAxOM6ks05cdTAwMThvTFxigfduwXW1dnXdXHUwMDFk/p5ONXoowlxiXFwyPPSu0CbuVis98YhePbnsXHUwMDFl7O++mvqRPX65XFy+rFx1MDAxZJ6Vit9/XFz/395cdTAwMTNrl1x1MDAxYdVVWrn5UK/Hb3uz8uO2Jy5cXNCFxbRAxoUyJi1bj/e7RyZU5ML81tbW0Wq9dDv/9H5nXHUwMDEyXHUwMDEyXFxqt1tP39+v/Ltvo1x1MDAwZneV0ptcXFxux6VQQsugVXi/Xq81b9ObrbfKtz1Rjl79979cdTAwMDZrULf63Fx1MDAxZKQ+Slxun6U+Rlx1MDAxOSmksiNrzzp386tLta66bz8+lS5cdTAwMTbXjsqbxd+pPZD+fP1xzPrAObfWeu2S6iNcdTAwMDVn3nPPnfGQV+Wnpz5asKBCXHUwMDEwXHUwMDFjRlx1MDAwYlx1MDAxYeJ9v/pI06cu3jjhYOP4jKjLJFx1MDAwNbq3q1azu197padcdTAwMTf7ovTqUqlRq78knn4k6bjbxdX54rfFylX1207MgtPVYr12RbL/vYxdV9tcdLXo1uCf3t/Qbd31rpbx+0q1ZrXdf39a7dpVrVmqXHUwMDFmXGb93fjG1ZV3U8hiT/Oi1KnS1eiJXHUwMDBl1eN2tdx9k+RcdTAwMDHKLK1ccumX/1ZmXGKUtsoq19OtPHUuVy+3XHUwMDFmXHUwMDFh7Sex+LpR2Dheu2qXj9ZmXFydJdfMOiOsgrBJ01OiN28oXHUwMDA081x1MDAxNs7FXHUwMDFibpXm01Nn7VjAPrxWXG7/XGJC9WuzXHUwMDE3jFx1MDAwYlx1MDAxOFx1MDAxNaudh+1cdLHNvCl3gPXlQtmez1x1MDAxZazbhUb58eZR17dcdTAwMGLq8DA4fV1cXF7ajrmhmfCVQa0sm5VcdTAwMWRvXHUwMDBmKuWz22J9s3G+V1x1MDAxYs1X/mvYuutrj2uVwsVqWN6qnMqzw8dGmz9PYN39XHUwMDA3vde+1+VG5UVcXO9sXm80atvNXHSs+1x1MDAxM5hh6LqhUznYWnmpny/IJ7FydHltz1x1MDAxYXOTwlwiXHUwMDE2Pkn1NPInsUhk6Vx1MDAwNpkvbWX65XfzZYWSXHUwMDFhXG7d0/c888VPSlacbm00XHUwMDFlNraqJ8er5va5aWfdfFx1MDAxMd7A7eZcdTAwMGWG2ivfw15v9ktcbuaslc57I4NN7Wty1ktZ5mBEtVx1MDAwM0T3wulBWIRcdTAwMDVpddBOc8c1N7JaiFx1MDAxObm/4YlW+Fx1MDAxMlxciN5Wf7tcdOvpzt9cdTAwMDIpf7zy7979XHUwMDFhXHUwMDEz1mg+hm7Enlqp3Z2rNSu15lX6I9VmJeNKvdTpzrdcdTAwMWGNWlx1MDAxN9vYadWa3fQ7onWLpOTX1VLfvcDKmdfuaLnko+n917eesEb/8/7f//uvge/OXHUwMDE0XCL6XHUwMDE5KD69XHUwMDE1/4r/e3w7XHUwMDEydPrlv+2I81x1MDAxY2GN5r035JmRhdqtOdrsXFw0rl/Xy5vHr1ul9WMz62aEXHUwMDA3ZrVC9C+cXHUwMDAzXHUwMDAy6Snmm1x1MDAxOVGcce6NcIpcdTAwMDfheXpns2dInFx1MDAxNJZLzmdcYlxufdmRP9+OOJt++Vx1MDAxZI84XHUwMDA3ZG7CXHUwMDE44ZSuPi/K+93S+tlrYzdcdTAwMDR1fLzE7z+BIYHFNFxiUDhcdTAwMTCY6DMkXHUwMDFlYSx3xjhcdTAwMGKjKj6BIVFGapWfXvwyJF+GZHKGxPDMJKtQwVx1MDAwNW6sXHUwMDFlXHUwMDFkkcxcdTAwMTV3LuqnLX93UVx1MDAwZa2FZV9cYp3j8icwJDZcdTAwMThcdTAwMWSMVLAkvver31xmibZMXHUwMDA3XHUwMDE5gpbw9FLOviFcdJ72XHUwMDE5wldk82VIJm5Ihp13mpCZ41x1MDAwNUqGXHUwMDE3XHUwMDFl47izs/my+rJzoZ6bS7Vucf9iY7vV3Z11S6JcdTAwMWPTkkvAXHJBXHSRXlx1MDAxNv3Nklx1MDAxOMO0gPxaXHUwMDE4Xa/19FK8nlx1MDAxOe3w8CUlcFx1MDAwMZJ6R0fvlsQy2ofWXCJI42RQsdPZXHUwMDFmZkRcbqm9p4g0x440N1x1MDAwZp7EwtZld+36aOW2tF5+rT3Nx+3IXHUwMDEx7sVx93Veda+WNviGP9o630y8YWbSxJM0OVx1MDAxZvLHXG5PJEuHVIBgQXNHV6K904PWc+PYPFx1MDAxNuYv60uN2u5la3NltpXIO8G4XHUwMDE2zijnhVxiqWOSIDRcdTAwMDNcIlx1MDAxMcDzQdvpKZBzXGbG01xiJVx1MDAwMyCB9Vx1MDAwM1xuXHUwMDA2gmZGeec89smhYi6tP1x1MDAwMFx1MDAxNojChMrVn6NdvlF/3Vuab5ZMca22vLW/Llx1MDAxN3+tcJvg41x1MDAxMeWXP1x1MDAxZPjuvkee9+lMMZr8atIxeFx1MDAxZO6CNcLhefLc5YxkSlmnvFx1MDAwZl4qLbWZ5nqcXHUwMDA1XHUwMDBijVx1MDAxNTo6LsHb9Jhft+fE+rdnuTK521x1MDAxM0xrOvg00nE4x+TdY1x1MDAxMH9tjVxmXHUwMDBlgF/pJDBcdTAwMWFBNGKCNFx1MDAxMozKsv8hZkdS5t9K7YzkfvRorFDyW6s7rlxcVPWTe0R6stJe6WSY/+tS+fqhXZ1cdTAwMDFcdTAwMDfgNZN4SDZcdTAwMTI6rpMgKijDIFxuXFxcdTAwMDHgXCJeXHUwMDFi5lx1MDAwMvAoy/InojGOqFDgXHUwMDBmpEZcdTAwMTn4nH5cdTAwMTfAmaJDdMBtyLNcdTAwMTTc8z5cdTAwMTAlgMNcdTAwMTVJXV4wNjknMOlY68s3ZMVaWVx1MDAxMlx1MDAxMn26XzYmZVwiLE+/+p6xIUMptbWjXHUwMDFmRb8+++tccu1K4XDr4Hpxa+t896S0NPs2QrFcdTAwMDA4LuBPouq3pI0wXHUwMDAwicJJSckt7mNHTJO2XHUwMDExWjFhOEAqXCJcdTAwMDNteSzjXHUwMDEys1x1MDAxMVAjRUJcdTAwMDDAqnxAjNhnIzz2KZTPPUL6slx1MDAxMZ/ORmRKSPTpftmYkI1AgJSZioGcIXjyY+RiXFy9u77xtPHycntXfT6wXHUwMDBiXHUwMDE3jYuH49m3XHUwMDExhilnXHUwMDAwRZ2CTeTJ6vNcdTAwMTBcdTAwMTBmXHUwMDA2Mt/WO6X8VG1cdTAwMDTV+mNcdTAwMDMwSFx1MDAxY1x1MDAwMHOQjZAqXHUwMDE4g+BcdTAwMWWbXHUwMDE1wnnbX66igFwiXHUwMDA0Npx3OvRlIz6jjVx1MDAxOCwh0af7ZWNSOMJn41xioSVcdTAwMDIvPbqJsHOyU18t7e7PXHUwMDFkLyzNra/vrL5cdTAwMWM/zL6J0FRC76ibgKxwb5XIRDjJqNxcdTAwMWRBerBknKdcdTAwMTdqSOYkdcpQMMutXHUwMDE5XGIjlFx0XG5cdTAwMGbFXHUwMDEw0nS2r1wiV8CJXHUwMDAwR8Q17MtAfPszXGZEpnzQT6FPNMa0XHUwMDBmw+v2pVLpl99cdTAwMTNcdTAwMTLKW1x1MDAwMywxep2JuL25kbWH2sXR5pGslopbR1x1MDAwN4uHs52PdiYwIYVcdTAwMTVcYuNcdTAwMTFsuL6yfclcdTAwMTCCiKiU1Fx1MDAxODm9lDRcdTAwMDBLXHUwMDEwgVx1MDAwNy3wR8Be9Vx1MDAxYlx0K5h0gYBcdTAwMDJcdTAwMDBcdTAwMWX3uj9cdTAwMWRcdTAwMTGchVx1MDAxOMHa5Vx1MDAxOInNV7XePKhvXHUwMDE3L+5V6VWe+uWt5eNcdFx1MDAxOVx0kW8k3j8z2er3vv1P+ZBnuGYpnalZQkGX8aTGUK3i3nKtXFxeOH3x95vb61x1MDAwN/cldfnwW9tDR1EtMl3aXHUwMDFh+FinpE33h3rOXGbwu0Fw5JzkQ/zvzza4cc84t46aWrx0Ulx1MDAwZcj1XHTNnNfCh+CMdNaofoiOr2FMmHXdmlx1MDAxMek3XCKzocJyg3ts1OjC/2JcdTAwMWVXy4f4e+/RdTtb6927vY0w28LvZWDAO/ieXGL9heLpdlxuRK9cdTAwMDCgwntcdTAwMTEoqzfF7s5cdTAwMDAlVPDl+NtYa53uXHUwMDE3fsWcXHUwMDAyTKaKXHUwMDAxIaVcdTAwMGZ9KSx8NHBcdTAwMWXv4PuS/SG9kFwis1x0QGhFnTZjNFx1MDAwMdTskbpcdTAwMGWXXHUwMDA1PJuTl9PGvGuZUmW2Zd9cdTAwMDXDbIDY485cdTAwMWJcdTAwMDU8kpJ9p3FZ4cFw/KeKJ0xnUfaF0d5cdTAwMDTHcyOvL+EnKVx1MDAwYjqTXHUwMDE0Q6hAhVFjZCZcdTAwMWaq6mq3VN668uVKca7+2l7elLOOeixcdTAwMWRdXHUwMDFiXHUwMDBis09gg6fr1iGTRjtjXHUwMDE0LL9cZmp65abOMqkh+cBYTlJ82S/72jHgLy1cZpfQXHUwMDBmqG1a9qGi1lx1MDAwN5vb4/9PXHUwMDEx/beIY4DY47Fm11lcdTAwMDdq1qDc38hyPzxcYprVdJuVXHUwMDEwbeBnZVx1MDAwM7daps2+9oxKsFVcYjpcdTAwMThrplx1MDAwN3mUolZWp4GsQlx1MDAxMHaA4COqh2Ny0ENcdTAwMDVwpuNMJO/VXT7AKVxiNVx1MDAxOPJMP5H2/plEjDyQVCUmOKdaPFcrtvbQXX9YfVjozl/vXFxdTjdEjj3GRJYu9q1/0CytjpAkojvaKj/QLeBcZjKnRNBeSjpodypW0/P9qnRcdTAwMTdJXHUwMDE1MzxwetSGO6mU7buziVx1MDAwNGHWpoZcdTAwMTNOxDZV4LCqwOwyajpcblx1MDAxMjv0g3ZcdTAwMDXpXG54m1FcdTAwMWF/dN+mJpybTFx1MDAxYqbJpicz1Il++lx1MDAxNam32l/xf4/LXHUwMDBlNKxcYlwiWHJpY5jTwVox4+ZcdTAwMTRcdTAwMTJNLW5cdTAwMDZcdTAwMTKmXHUwMDAzXHUwMDBmLlx1MDAwNSS4kVxmj4TYRiRcdTAwMTRkisWyxjLYbKghcYJcYlx1MDAxNzt5XHUwMDFlQlx1MDAwZlx1MDAxNJRz8Vx1MDAxNpdcdTAwMGZcdTAwMWLPX1fQ3dvVR0h/Vlx1MDAwZVx1MDAwZXa+J15cdTAwMWSd7KdRq1TicDrJ95OHXHUwMDA20lx1MDAxNEDJnUyC+mdIU1xigt1s5lxm2FxmgEo9uqKur9nVM3N/9HRcXPRbp5dmZ+dcXP1W4oxcXCVcdTAwMDWOZ0D6jlx1MDAxM6DXOpbRfdNShMJaWmWJXHUwMDAzz9ow8yR42KV3sCq5x4xcdTAwMWLVPXtxasp3oXVZPDjZKajX3c/csZFJU1x1MDAxN+9RSHdsUMbYxYs/81x1MDAwNHyjsP/4tN8pN9pX7lSu+v1Hdbkx21x1MDAwMa1cdTAwMDBoZzo6XHUwMDFkXHUwMDAz5HFKJavx4Fx1MDAxNFxmc54rZ1x1MDAxMe/qaTZQ0omBNcEr41x1MDAwNVx1MDAxZExcdTAwMGUotVx1MDAxOcBTRzX4JqhcXFwimM8o0T/nsopcdTAwMGbdVqPUhUB/26+2XHUwMDFm4y7qXHUwMDE3kdVlb2DqjHVKZZfiXHUwMDBiXHUwMDBi7GXppHVkxX7evVufO5xcdTAwMGbFufnju5d12zks2NKsK7ZcdTAwMGbQXFwjqSeCtDzFQCm4ZVBqXHUwMDFkbFxi3sVL02aRslx1MDAwZT5LcudDRsDe0/ODyrHeL91cdTAwMWbY291bfVFtmaVqu55oZ/xFhuD9N06WW65vo7+r1VH4zFZHoYhsXHUwMDE3mGj0VPDSY3mn+7LUuVldMEsrW6/39eOn/VlXMKC/IG1UWFx1MDAwMnXS6Vx1MDAxM3BhmUUsq1x1MDAxZGVcdLyffVY1YnvmXHUwMDE2XHUwMDFhmJdcdTAwMTD+hUr2xT3wp3BcdTAwMGZkWlx1MDAxMikyS2kk555bOLAx2Fx1MDAxOecugnttvFx1MDAxNP3iYvWy+qRcbq3K9sxbXHUwMDEyzZzBjXBcbuFcdTAwMDZPVrJSuVx1MDAxOFx1MDAwYlEvjOeCYPjMXHUwMDFiXHUwMDEywZWEydN5xTRfduTLjkzOjoiQfTatg6d2kdFcdTAwMGIzXHUwMDFh9XKru7krgrht1Zxrn67ON64/gVx1MDAxOVx0wiC08Vx1MDAxYyF9OqcsVNTOXHUwMDE00d06XHUwMDFmXHUwMDBmsGfVjmhcdTAwMGXMr00uXHUwMDE30pdcdTAwMWT5siNcdTAwMTPEI3JY6iBookhcdTAwMThcdTAwMWSPXHUwMDE0XHUwMDE2bvdcdTAwMTdcdTAwMWUvjp7au8cnXHUwMDBianGvuHI566RqZEg8XHUwMDA3XHUwMDEygakghu506kBcdTAwMGKmgjRWOiAz81x0aF6FVEorXHUwMDE3P0f7siRfluTb1FnVpMpcdTAwMWWDI4W0Vlx1MDAwND9cdTAwMDYnyOnpy8lZbf5urtgqVE73jk5cdTAwMGLiKKuXd1aMiZVRXHUwMDE1gdJEXG6tvOvjVeNcZlx1MDAxN5w3nFx1MDAwYummWDI3XHUwMDE5XrVcdTAwMTBcdTAwMDI1XHUwMDFk5kGSYvP6qFXbet7bvOeLZuly7vnhPMGadvfwfHLw2rnfWll8XFxW9Uans92IXHUwMDE3/cxOJvO3XHUwMDFm0tnsolNjgFx1MDAxMMfphr+xZ436yc71+dbm6+3h5sbJUaGx+OuKRfiHdMhpXHUwMDAw++CFlFxuf3GZXHUwMDAy9pLqdIzRiHJgUORcdTAwMTSpXHSxXHUwMDAz5olcdTAwMTWHXHUwMDFiXHUwMDE4r2DUgF6bQcOkXHUwMDFjNYXojHzAL1x1MDAxNNVxRo30dvWR07fj6sW3OXi3Tua5W716mZT2yZy6XHL8xZM4b8usjpWSZ9OZSyf9WFx1MDAxZFx1MDAxMcPPRma1mlx1MDAwYuLNjKTIOurhTGfwdCBcdTAwMDI17WhQVoLbd+KAWXDGJdFW4aEor2LdXHUwMDE5vTpcdTAwMTHBRNBUoVx1MDAwZVx1MDAxN4c92b6mXGJcdTAwMThcdTAwMTlcdTAwMTOyuMxntTj25Oz2ulVcdTAwMTTmgK/dXFytLepcdTAwMTXcXHUwMDExO/7J2YdMxIjFscOPkb8l6lC5ompcZuiW5pqwiIj1jf9diKqZtNJr4y22XHUwMDBm7GT67u1ky2OpOlbTmFx1MDAxM3hcdTAwMWJcdTAwMDUxNtL0b1xuXHUwMDFlQlx1MDAwN+dcdTAwMTTpXHUwMDAxVTf27elcdTAwMDOBQ9r4/MpcdTAwMDLZQrZO0U+/No1cdTAwMTk9ZKFcdTAwMWWXeSqiOEXeY9QlXHJWjVm3qYjYmfRAPFx1MDAwMkgjqFx1MDAxNOpcdFoyXHUwMDE3NN31IIhcYmh6oIdcdTAwMDNeXHUwMDAx9GhFbERcXNuRSmRFxGFcdTAwMTZ0xmHqXHUwMDFmXHR69lx1MDAxNvdcdTAwMGa+XHUwMDE1d1anVCmbXHUwMDAzXHLSSKh/N1MvO/JDXHUwMDA2u1xiXGJcdTAwMGXloMY4g5jfLq6rdm1Lrlx1MDAxY1ef/MWivj5cXJ09tZXMKipcdTAwMTGksMBK7mLpt0iPtVBMWc6pXc46l1wihfbaMcAnXHSJ9Vork9roXHUwMDA0oZFh3Fx1MDAwNEuN/lxue1RcdTAwMDPCfyWY45ThxVx1MDAxN1FGKt+HjLBBT2xCeeH/9n5hrXtXf60/XHUwMDFl7V6Fo01j7EphQmnCv9NTP5EmnPrIRZ89KVxylpRYTNxcdTAwMTiHcZe7r25zrnBT41vn1efG0m758Lb2XHRcdTAwMTWBcypz4zSIXHUwMDFjTi1FmeFtYFx1MDAxMihCUVx1MDAwNY6aXCJfXHUwMDA2zXX3xtFcdTAwMTRYrbRVXHUwMDAzSsmlY9QszSHrTtJ++lwiXHUwMDA0uEIrZG6l0DT1YFx1MDAwMunySYD9Py1dXHUwMDBlXHUwMDAwT/2uwLpcYlkhrT2HRT9cdTAwMDXHrOaKXHUwMDFijXfgolxyuetlylt0lVx1MDAwNlxuXHUwMDA2rKiFXHUwMDExVMqdt1x1MDAxY0d4YaxcdTAwMTBeOU68M6qvY81pq6VcIspOXHUwMDBlWD4mXHUwMDFhzzJoLpvvx2r4MGfG4NtT23VTXdg839/qdu9X2q1m41qsf8yepVtO3j9XaZGgTdegwVx1MDAwNjDAXHUwMDFhYUxwmnuRbI9cdErD71x1MDAwNyFcdTAwMTXNeUvQYk7atXvmrbHakUzweKd73KKRXGbCfUf92n7ASFkhpYOk5lx1MDAxNS19mbRPZ9Iy5YN+XG59ojEhk1x1MDAxMVTm0Vx1MDAxZlXoWCvHYPpuNlx1MDAwZVx1MDAxYutcdTAwMGKtK9FduH9Z5UeN0/Zz1pDHmTZcdTAwMTkwXG7Ufa+spqY5k8JAXGJcdTAwMDaIXHUwMDEznPJeXHUwMDFjJjektjrBplx1MDAwNM9cdTAwMDRcdTAwMDSBeGOif1x1MDAwZopcdTAwMDbgapShQ1x1MDAxNSNodHb/WSBccjpcdTAwMTiBN+nLYnw6i5EpXHUwMDFl9NMnXHUwMDE4XHUwMDEzMlx1MDAxOFwi2OyoyXEtXHUwMDEwlY6RPjh4vjypXHUwMDE3XlRZv2wsrpndvcOC/KDJmGbUZFx1MDAxOG5vXHUwMDAwpMONXHUwMDA0XHUwMDEwjIljZDBcdTAwMDShXGLHXHKnQbA+3lNcdTAwMTJcdTAwMTlcZuqiXHUwMDA3xnCGXHUwMDE4XCJcdTAwMDSfXvpcdTAwMDDxXHUwMDFhszT6JohAam9cdTAwMDe0MWnBXGZcdTAwMWSKQjSAZ0Vs6sh7h4WNiLF8Xtz0eLB8eyxPzdLa00lp/U50/LJ5+TJcdTAwMTmzbDJcblx1MDAxNjhcImjIXGKNgVO9LHF0XHUwMDExkuFoXHUwMDFjn6Z6XHUwMDFmTiFD7npcdTAwMDGBXHUwMDE4rIxG8CSJoi957ODJUSrjqPfcXHUwMDEwxlx1MDAxZWV/XG5cdTAwMGZQOiW8JNqV+HqaUlx1MDAxM1x1MDAxNmpcdTAwMTiCNo5cdTAwMDebt5yhQT88eFx1MDAxZIjWWFiZ2J6yXGZcdTAwMDFcdTAwMWQwlfMhyrjlLec0o1x1MDAwMUlcdTAwMDE3T9JcdTAwMTCUhMFcdTAwMTVcYjotXHUwMDE3ypPySeKeyN1cdTAwMWRnlFFcZl5FRjw5XHUwMDFjXHUwMDBij8lwyVx1MDAxNVx1MDAxZFHh9srcR/FTw6KGzdzkQ5rooG5cdTAwMGVIKVx1MDAxNlTlXHUwMDE5/JVOpX6wxG9cdTAwMTebZve10lxc2eCtys2nM/jcXHUwMDA2Zlx1MDAxZI1cZuN0jCiT3JqBW6ZodFxm9ddcdTAwMTnhp3fsIzX2XHRRpKJAw4XxXHUwMDAzXGY+lcMoro2SXFy8jVx1MDAxOO6z+NTC5G1uouxcdTAwMGYy+Fx1MDAxZtaGYS2luIvaezFGkuW20jq9fFi8OCvXmzdhvdF6PlPFT6dccsJqhudcdTAwMDBcdTAwMDOroVx1MDAwZmnaNY/YXHUwMDE1XHUwMDFlgCZcXHt4nmGDUH6anYFR3aR2NnJeWlx1MDAwZVximGCmicyIWtVcdTAwMTSi29BfPSngq2z0Vb/UYXgo4E02RZZx1Kkrx5jsfrYv7Vr1fn/tfK6jTy/b1fXOy+Ps6UKqXHUwMDAwQEjOaFCsXHUwMDBikkZ48GR6karKmCBAoKNcdTAwMThtislcdTAwMDKnXHUwMDE4cFx1MDAxYpdGXHUwMDAy+1Od5Vx1MDAwMOhvXGJwuOA0XHJw56Jf9IOLeOVy84uTXHUwMDEz/d9QNvCnY3xBob8jslx1MDAxY1x1MDAxYYhcdTAwMGVRSJ4+eMYlwUrprVEwhPnrwaxcdTAwMTLaXHUwMDA2zqHyXHUwMDAwoVx1MDAxM4ctfUKVXHUwMDBie/FcdTAwMDFJxbZcYkQ8cUDZ1HJCarhcdTAwMWLOIzKNUVA0cI0zXHUwMDAy+Ieollx1MDAxM6uJXHUwMDAw7ZPRaHhEIU7mg3JcItOKXHUwMDA2uGpcdTAwMDTTiqroXHUwMDEzN59cdTAwMTlqwKDp61x1MDAxYT9SjUs2mD1OTWenVVx1MDAxNGJcdTAwMDEvxuGCOS9dlU/23eVcdTAwMWF3+0s7V+7xtO1nfi5rNOrE0FBcdTAwMTFH8ZNP5V1cdTAwMDOAbPCSzqWh/XaKLE8uMOe4XHUwMDEz3lx1MDAxOUr0ylx1MDAwMUc1nnLIgNXKaVx1MDAwYmwt+02pgU54XHUwMDA0cHlVXHUwMDE4f1x1MDAxMIr4p1hYjfBOSFx1MDAwYptIgXtwybSCplxcoDNk42xAuJCb9NBcbuiZOIm5UZHvTthXT1OlOVx1MDAwZipoR2VcdTAwMTn5Q7xcdTAwMTknJlRBfPNEW5ssXHUwMDA17Vx1MDAxM9xcXPOvXHUwMDE0ZXE4XHUwMDFkXHUwMDFmXHUwMDA3WNresFP6IfRjXHUwMDA17L9TQVx1MDAwMTi4cStLh8RaLlbc3Vef41x1MDAwMlU5jtGW9vrcvdjl/lxcP2w3XHUwMDBmXHUwMDFhpePWwd4xn32TKFxyi5KxXHUwMDAy5kjw1HAoXHUwMDFhIFx1MDAwN1x1MDAxMeM0lctAQqZcdTAwMTdaSc141FTmNFx1MDAwNEFcZsws4z1aQECER4TlVLyu/z208l5TyXVei+tcdTAwMWZkXHUwMDE0h0r/0EJNmrGVqVx1MDAwMJB9aKNcdTAwMWYjvjpcdTAwMTB7oX1VmKuvvSw+LnfrV0t761mTXGZmR1x1MDAwMaRcdTAwMTJMkKpLXHUwMDAwWqF9Slx1MDAwMWB/gFx1MDAxNrRcYlx1MDAxNqhMT5O/StOgXHUwMDAyQ1x1MDAxNVx1MDAxOFpcdTAwMWHg1n75XHUwMDE3MPySksyGOlx1MDAxMHj/yVxuTG40dOt3Jlx1MDAxNkYozHz/zFx1MDAwMFa4rcf73SNcdTAwMTMqcmF+a2vraLVeup3vNTUkZPuDrHDTL/vMnjcofFBcbpHJXHUwMDE4pHArur3eeTkpXHUwMDFlnlx1MDAxNV9Pdu5cdTAwMDFgdq82Z1+rqHhSOIXbLlx1MDAwM/VcdTAwMTEntMpcdTAwMDdKpFx0TjP+8GT0XHUwMDE0K1x1MDAxY1xirGiafopoz1x1MDAwZWx31pzR8Fx1MDAxMCrOJua3XHUwMDAxPlx1MDAwNTtcdTAwMTRcYnT/Qdnrf1xu0C5kysfb1ZRojFx0PTNcclx1MDAwNM9Oa0rEdDIxNCfPQFx1MDAxY22vXHUwMDFk4i33fO1RN9f3jXra2PlgXHUwMDFk5a/EncSuolx1MDAxMFx1MDAwMUM+LUKJVFx0lMKdhyOj+UIwmW56objRVLwpLUJcdTAwMTlcdTAwMWHVlTFCiGvqL+TSO+tcdTAwMDdcZi6mI2Av81x1MDAwN1x1MDAxN39ZiE9nITLlg376JGNMXHUwMDAzMTQ2zWyiclx1MDAxMDbh5Vx1MDAxOKHpzdNcIrTwvGS2XHUwMDFhT5dcdTAwMGJ3xd3S/tPZzJtcYnhdOvmgilxmoVx1MDAxMZ2mTv08nYFTMkNYozSfXHUwMDFlMqfO16ChJIg5JZWHXGZcdTAwMDBcdTAwMTEhqmyxXHUwMDFjQqBcdTAwMWRcdTAwMDKn/nSds4hslf4npes+5Fx1MDAxY3W8r6yPeVxm4b13Yoz6P9E84zfLYnNx5cTah9f22sbh6+xcdTAwMWb6SZqXbrySWjn88ameXHUwMDAyXHUwMDBicbPeXHUwMDEwWZOmQ9DpeUfOop5fXHUwMDE3tZpcZi5cdTAwMTCGgYRcdTAwMDHU1lx1MDAxMU5GXHUwMDAwm5Z8XHUwMDFidNRcdTAwMTP+deT3eb1g4t1cdTAwMDVhIZxcdTAwMGVG11x1MDAwMbtpYOfclLEwzGhcdTAwMGbrqKWhmvZkWSClIGmwXHUwMDE2ZS7oUD+/7k5cdKYl4CF10zrupPfpXHJazYWmXHUwMDA0NSVUco8g0+slVlx1MDAwM1x1MDAxNMXWXHUwMDAyj8azQeOszFtcdTAwMGVxXHUwMDAzsXZcdTAwMTJoXGLEh+JcdTAwMTNnhlx1MDAwNVx1MDAxZPX6WsS9sGVCKZubwVeBwadcdTAwMTiaXCJOvZHJXHUwMDE0eUEqXHUwMDE2nPOCZm5qOsHKW1x1MDAwZVx1MDAxZnBcdTAwMDAsXHUwMDFh34WYpbVM7q9PpfPWc0wpQzRcdTAwMDTKKkWTXHUwMDE0fm65QmDcXHUwMDE4mD1cdTAwMDRcYs5cdTAwMDSXun30dfG64/5tXssoVaRcZqDJwlxc+iCMSD9cdTAwMGasR0NulFR4aIFoY8fSh3FrITOPaKXKPo+g42dcdTAwMWFVOnqzzEJ98bmw1disVa5cdTAwMGV3bu1rYVctz/yATdxcdTAwMDPojlx1MDAwMoyCWVx0jotcdTAwMTTfhfBUXGKmXGangmAxxcSRMlxmSMNcdTAwMWL85WCS4j35ycxcdTAwMTGdqSlcdTAwMDM9V7xcdTAwMWb1wYN7a/I7hP8g0PePcYnwgdZcdTAwMDDW0+xgTaV+SVx1MDAxN1x1MDAwNEElseGc2Plg+fLrTJiVxmvBXHUwMDExR1xurkPSR1x1MDAxMiBEbOElgj/qSLa5Rlx1MDAwZjuw0SxcdTAwMTmAL8NDSHYww6NQzypcdTAwMGZcYmtccvmNfFx1MDAxZiSZN0E5XHUwMDE1ndDBfaWMKFGJXHUwMDE4R181eDK2uUY0W8Xe7iBQXHUwMDA2or9Ap1A0Sd3kfuOoSVx1MDAwNp5cdTAwMTX2QVHPbeJcdTAwMGXS9lx1MDAwMpdcdTAwMTKWXHUwMDE0wFx1MDAwNU583IalIcF6cJlNjkJR76+yY4zyXFx9de3ruVx1MDAxZLV8f7lcXD1Zet5ozVx1MDAxN+THXGa3SL0+1WhdM+KhXHUwMDE0hCdEfFx1MDAwMvpbXHUwMDFiNFx1MDAxMKBccpKO+KnWaGp2XHUwMDFiQk+4XHUwMDAw+ID6O8KAUzTLIJ3UZk/cjdybvmp1QSZbe/9cdTAwMGLTeb8uYlx1MDAxOSrimeyGlmezgUNxqTJvjOKxoFaWzcqOt1x1MDAwN5Xy2W2xvtk435tBJpO+jLVikCtcdTAwMDVcdTAwMTNcYrGJMUL8PaCELKqlQfTAmVNk8IVFYYgtqD9cdTAwMTjWXHUwMDE2MYbtl3Fh4E1gjFxycVRcdTAwMTDRTJ+MUzSPXZrBbbszS294XHUwMDFm/F179fxKPVx1MDAxZa3Jg3InbFdWxz9cdTAwMDKWYyhMXHUwMDE2nplcdTAwMDSPoLNcYqBcdTAwMTGpXCI0gj9cdTAwMWREbkheXHUwMDBiT5lTgbcxVvTd2IlcIqnfyjAoqJJdc6qA8JRBTVx1MDAwMVx1MDAxNqiXXHUwMDAwXFxQ3pDR5sbmXHUwMDAyqkK2pkSX6Vx1MDAwNErKXHUwMDAwJ8CJumOEOmVhqLRZXHUwMDAy4ShNXHUwMDA1+SnIl1a6MVx1MDAwMUZcdTAwMTZcdTAwMDeiXHUwMDE40lx1MDAwZu08TSBQY7AgXHUwMDBl1KBZt73UXHUwMDBlR15bS6OsinujXHUwMDFmXHUwMDBiKERiuO1eU1x1MDAwMeFcdTAwMTSpZY2jlnjqx1xiISpcbui3vVx1MDAwM1hcdTAwMTBcdTAwMDN2XHUwMDE4XFzgg8PAX4hcdTAwMTQ+ZPg+xoLYumjF7t9EKVx1MDAxMHPwQ1x1MDAxZlx1MDAwNWJyK1OlgY4x1KaVlSq26Lh79JP94bVQs6qr0nlcdTAwMDb8TDWlXvH4uJK3gjrDvLZcYjwtxbLT01RLXHUwMDEzXHUwMDE1lPVUXGaqiHF6XHUwMDEwXHS0g1NBtO0jXHUwMDE2LVx1MDAxNz/Z61x1MDAxNZTSR1XGyNVZxUnt5qHYWnxcdTAwMTLFg8OXcHtcIndvuJybLZw0vFo0hpNcboJRr1xmXCJcZqW8JZaxWPa7x7dsqITHRIDKKddfhThZXHUwMDEyaOKmJq42K1xmXHJcdTAwMTFcdTAwMDPSUH7AtlxmTSyIXGI/NTFcYvL+bU043zVViIZcYl/ja3on4P28XHUwMDEyyUJ9mFKKq7mQ2sHj5SfRXHJngEnAvpy4XHUwMDFlrU52kfFcdTAwMDD9NVx1MDAwNFxitaacQS4nXiEwXHUwMDE4XHUwMDFjoGg8XHUwMDEwXHUwMDFiQuxcZj5ar0/VJ4TOZHbOXlxifFx1MDAwMzuOxVx1MDAxZqy3s27xoZeMZDzAvXFcdTAwMWZSh9WCoJtBmGNpLICf3sA9K1x1MDAxOUBcdTAwMTaguVxyUnlcdTAwMTlLMr1cdTAwMWL8WD/x+0xtXHUwMDE3XHUwMDFk7GV0XGb8kdhsqdUuV/+nuV9tdlpZgzl+XHUwMDE2o+VglzRGy9jSSFjth6X5WFx1MDAwYlx1MDAwNOfZ/HRwJDQhfvTMbXmrfVX1l1x1MDAwYlx1MDAwZi2/tuTm9u/bV7VGhvqW261Op3Bd6pavx1bhSqlz/bNcdTAwMWN1SVx1MDAxZEZcZslcdTAwMTDTwlxcadJTkzx2I1ZeLYkkXHUwMDA2sZdKNCNO/NiNxnNK7elQxcKfXHUwMDBmalx1MDAwM+Jwq0KGqMFXJlxu4XozvCmJKzJmZv5+6ulxdP1DXklIkynXXG5PXHUwMDEwfnCMhO3dUqW0w62tLV1cdTAwMTd3zs5KutnayOr2/Vx1MDAxObmeuGuyXHUwMDA2sYhcdTAwMDVIXHUwMDAzPqNcdTAwMWGE1MwoTqdcdTAwMTJGUepcctKm3PSiXHUwMDEx6Vx1MDAxNVx1MDAwMyhxVG9hNbeDopGBiVx1MDAwM63o1OpcdTAwMWaUOCje3dXhaLpcdTAwMTDYb8vt0t31t1Kz8m2xUutm+qopXHKRXHUwMDFhbSdTXHUwMDFmpyDi6fv05DcngZDHSP8tqt3r48WSK1x1MDAxZVVXXHUwMDE2b29Wzl5cdTAwMWGNLHas2dJk7Zi0lHhFQOBkqk/VXHUwMDA3Slx1MDAwMFwiTFx1MDAwZlx1MDAwMP9cYvanyIBcdTAwMThcdTAwMWNzREVcdTAwMDH/ZIRybtDpi1xmRGihg+JwTyHIviPGXHUwMDAw78VVLlx1MDAwMeL+/MND80q5neuz3YuOOJzf81x1MDAxN+o3XHUwMDFjME7MXeVhsexTRkGkS/D2I0u6Ulx1MDAwZmLuauH1sj2/vmHnl0J56/X0U0i6VVxm2MZcbip9cC5Fdlx1MDAxNbiH/Fx0XHUwMDE5nUByOcVMt2CcS0NcdTAwMTVcdTAwMTNSYDuDXHUwMDFjVmBUb1x1MDAxOKJcImTKs/U5MO+dTp5PTFvQZ1x1MDAxYq7lyH/MS/b1heFhXHUwMDA3MVx1MDAwZWi72dq93FNn5ijUl1x1MDAwZm6b1f3KwnrhsyhcdTAwMDDnwGaBXHUwMDFhXaROXHUwMDFl9lx1MDAwNKeIwZOORfGIlJpeKclENEAghiRmroyzny9cdTAwMTVIqoDQmSpAZdSUTFx1MDAxYr33Q3fcXFwtrHTt0vP1y/qrLZ00XHUwMDE29axn05zRzFx1MDAwN9hMzyOqtJCUfitcdTAwMTlNb0aES2fXbnrMn1x1MDAxM5F+9SPa+Vx1MDAxMv6c0m9lM+VcdTAwMWW/X1NcdTAwMTHh6HLf3j9bX6iu1bRcXGheby6p56Vuq/VcdTAwMTksv1x1MDAxM55cdE+kcsStqdOjVEjejPDU66BtcEPIaIJcdTAwMTNlOVT2/6NkKv7ycmDhN2JcckGE0lpRP8pcdTAwMDCAr1x1MDAxMcxDJ1x1MDAxMHhcdCqx5f1cdTAwMWTBXHUwMDE2QVxufFNu09NnRPix2/5HV3hcdTAwMGJLdCtEPI5/XHUwMDAwcCfOkzjj1ItcdTAwMTOk917BKieafzPXXHUwMDAzflx1MDAxM1o7o6goiSdZvdIylbdcXLag/liOSLpcdTAwMDJcXKajXHUwMDBl2UlxXHUwMDE3iPg8wLSlglx1MDAxYlx1MDAxMONcdTAwMWN3Pd/u7V+urm1uPCzNvy7WQq1iXHUwMDBmso67ZsxQWVx1MDAxYXhcdTAwMWIoU00jWlJcdTAwMTA1OMaDwq2wWmCxIbWgP2OoIE7UdVx1MDAwNSUm5vlBXHUwMDBlWlx1MDAxMLNcdTAwMWH1zELcqIg+XGYwVI663mRurfOXoZphQ+WYXHUwMDBlgVqNgqFcdTAwMTZzYcb7uGdcXHOhaE41oi1jU82UxIpJ9KuwJIjm85s9M1x1MDAwNfNtuT6ZXHUwMDFj0zLlXHUwMDA0XHUwMDEwMrNa0lx1MDAxYWHHa1x1MDAxZW9try6VnyrrO92DlaM5XHUwMDE3Ls4v57NySLNcdTAwMTNAOMcoLaxtxFvkequ85Y9cdTAwMDJT1J0jXHUwMDA1fFx1MDAwM59cIm3CRFx1MDAwMlxia4hTIZ/R7J9cdTAwMWVAhFic2J86osGDjo9+jn2my9vVouZFVdtcdTAwMTWnm8eLO5t3JzMv91x1MDAxMTu/pC5zXHUwMDBlo5NyyXDY2lma6Ul8XCLZXHUwMDFl2Vx1MDAwMi1Vwk9IvaWTcki8XG4+zmTdXHUwMDEzeqp6XG5RUyBRxnDh+otcdTAwMGVhXHUwMDFjqcUvXGYuOvxyyp/BKWdcdFx1MDAwMv1cdTAwMTT6ZWBMJ5hZgKxi9r6PfFCbQLy2o1x1MDAwM3R/93Bxe1Z+UKbEO/VcdTAwMWK7u3ZwP4PT01L1aFopJlx1MDAxY5UpWo6YJMXyzfFgaPwljKLxU+wgXHUwMDE3TjNcdTAwMWJRQFia+TuwVUAqhvjRQkh0kKa//NjAiVx1MDAxM1n8VOpYplZ9/Cgr56WH/Zf11fvHpafVxdb62WXp91RcdTAwMWb/XHUwMDFlqzLVKlxcakJcdTAwMTIyuk+UgLAm0eZsiCDBXHUwMDA2yk1YRVOZ8pajxipHXHUwMDEzdqRccsHSgUty6pi1NFx1MDAwNd1KRVx1MDAwM8xULjNLQZjArFFBOu2IpTbZxtUn8WPavex6pyyrp3GLPOnRyEZvsPjOvtFcdTAwMTOMRs5cdTAwMTJHOpcqhfqtYUJcdTAwMDFM4+lcdTAwMDJW8ClOiVx1MDAxMcR7XHUwMDEwqFOP6NPdSHVORmqAfy5cdTAwMDbjnVlcdTAwMDcyXHUwMDFmKnOaxzdpx6RqosW3OW47XeiU3sskSpqGsCUoYTKDXHUwMDE16YQzyo9R0Vx1MDAxNOY37s41X7FH63tXhUJzvnu3kXXIl9K6n9fV3uPu6Wquplx1MDAxYaqmJVwiLFx1MDAxYclgjEmecnjPXHUwMDE5NTBcdTAwMDCtSZrbOL1Gco94ifiXXHUwMDAzXGa71vGZTL0pJJlv+TtUkVQwLOMjXGJcdTAwMDeHKoe3pf319cb82crDY0mWnlx1MDAwZi5cdTAwMWV0nNf7e+dmW6m229k8WtitPlx1MDAxZt17+XRcdTAwMWF+bSxjYVx1MDAxOGNpiimF6tJnp6joRsJXjSH+NetcdTAwMGau63x9d55fvTZ4+7w1v+p/p/iP4KpcdTAwMTCGs2BcdTAwMTDiXHUwMDFhhdgnnpV+XHUwMDBi1TlcdTAwMGJOXCKKp5pdOcVmXmJs4DRcZtZcdTAwMWLnvVx1MDAxY+irXHUwMDAy84iYqFXRXHUwMDAw1UjVXHUwMDFmrEeF6krkJdCfT7bmS+e3XHUwMDBil0f3j+unpe7Nml2em45cdTAwMDJMmlx1MDAwM2psvZgtND69XHUwMDE4P6rFXGJcdTAwMWNiQUR6PJE3XHUwMDE31KMgPTeCXHUwMDA23MKY5y3mWbCKhnvS/GHjfZLjT1x1MDAxMblcYs3/lID1xuWP1SFcdTAwMWZD1oTT5qzmSVTPOLFXOVx1MDAwNMnaK2N9bndcdTAwMWSiXHUwMDAwoVx1MDAwM+JcdTAwMDQraFxmbLK5zjJFM4RpXGYhdlx1MDAwZfCft5pgNMbF0ThcIk1VvTpxdulcdTAwMTmRJzpNXHUwMDFjjsT2kM/vJ5nCYzBcdTAwMWM30Fx1MDAxYqlSXHUwMDA0f1x1MDAwZVx1MDAwZZXjppJcdTAwMDOjKUj5QVxmXHJcdTAwMTT1VlFcdTAwMTkmwqLkapHxet+7ULl9julnXHUwMDE3XHUwMDEyT1ZoXCLiooDIXHUwMDEyq8VcYmyGmnGahG05kSpcdTAwMDJn29RyUkqDzcOywnHnXHUwMDBiXG5N83N4XHUwMDA2VHZB+ahe1vHHVemIalx1MDAxNuFcdTAwMWOPZp/mrof41FCMwYlcdTAwMTFcdTAwMWQykZC85L3w+dScWI5yOdLSXGZcInyl5LSpglx1MDAwMTz1zkV9ok6H/Fx1MDAwMFXQeHolifPDa4htUpJcdTAwMGLEuFx1MDAwMoXRUGdJuVx1MDAxN50/XHUwMDAzXHUwMDFj3lxuW0BcdTAwMWPuhOI2OVxmsSBoci1H5KVcdTAwMTFFa0S9I8gyUZRB8PF1LO556jTOXHUwMDEwXHSRI4kh1lx1MDAxMp4/VJzGNZK8Ylx1MDAwM4JcdTAwMTPZXHT3P/mN6UtcdK6Izlx1MDAwMNJcIvEsk1xcdZT3ilxig2kmooBCjrJgQmpTSYPoXHUwMDAw8t1cdI+gvylcdTAwMWSVybHxXHUwMDBlXHUwMDAySoBWeWhcdTAwMWWMZD5hKlxmXHUwMDAyjWWnkn9Jn0o+lKT1kWGEMfRD1yukzKNcdPlcdTAwMGJcdTAwMWFmXHUwMDA1zc/kdJBcdTAwMGL7J/6VfdXlz3grpDyESmpcdPFPQ+Vo+Jvmudae+FXhgDxNjYWCQCxcdTAwMTKLeUajlCPyWHxl6Ucg4mEuSJhmmiaraPRtcsGUW87PgU2Fzlx1MDAxNVx1MDAxNiu7NVxcOlx1MDAxODJr/Oj9XGbXrati63mhaTdcdTAwMWbWT3dcdTAwMWVfasf2Nos0bXaAvmJ4XGbcqah9Q6W6Sj3xXHRcdTAwMDRAb6/JPU/xKFx1MDAxYVx1MDAxNtCYQNNjhZNGhFx1MDAwMUjfUOJcblx1MDAwNlx1MDAxMlx1MDAwZV2QXHUwMDAx7q/kXHUwMDA2doB3jlx1MDAxM5p8If1/XG7ST1x1MDAxOdAk81x1MDAxNyBS3Fx1MDAwMdj82j3PYFx1MDAwMYCWIY08uFx1MDAxNGaQjMbGIybFL4JFXHUwMDFjIXBcdTAwMTiyWFxut7t8OJhynTLhmpJBSsjfXHUwMDFjMb8rJ2GoqatcdTAwMWPRQVx1MDAwMvymPHE+XHUwMDA3m/BE8uFcdTAwMDCptKWKJ+GSu5NEJ1x1MDAwMlhcdTAwMDRYx6HHectJTSVcdTAwMDPceMKChiudOvtgXHUwMDFlxlx1MDAwMreVU3GKzse+kjhQYUTw671EXFyVXHUwMDA0l0SRQlXNXHUwMDAwToYwdX7JKD5BcuWJRYQ4V0RyPUVcdTAwMTQpgYYoeU/QLp/4nTMl3ijOgc518u5JR9ypVJBDTlx1MDAxZoFKrqxIYuyTNFx1MDAwYp5cYp+Awlx1MDAxM6GIwi/DXCKQJMBeifAmV1iG3z5FgY/UVLakKOuYXHUwMDFmiVx1MDAwNKYooKLBPVx1MDAwZeKQXGa8qOBcdTAwMTbgXHUwMDBiRt0gOlQj1O9cdTAwMTK9n3X4/Vx1MDAxMFx1MDAwNS+lSGAsTWFPhLCj78pHXGK8XHUwMDA084rIii3lj7xJXHUwMDA2StiepME2+JV4XHUwMDEzosZ8M5BcdTAwMTL+1O7wXHUwMDE1qX+MONVcdTAwMTEq5YpKXCJcYieC18RypIY0oFx1MDAxOHGNXHUwMDAx2sz9rpZBXHUwMDBlXHUwMDAy8Vxc6oAnnGRi7HO9uVx1MDAwMDBp1UJcdTAwMTJQjr9cXGBcdTAwMTKYXHUwMDE5/t1cdTAwMTA3sUyqhVx1MDAwZYzMllx1MDAwNFxullx1MDAxY1x1MDAxN0eZNkCUY/BcdTAwMTbAqLDjyfSBxq1cYnjeNFx1MDAxNdHS9fz1gKKg29pcdTAwMGKSLphLk5bjuKD4XHUwMDExoi3agtIw8NzjL0jfz1x0clx1MDAwMYqG3UHZXHUwMDFk9fskXHUwMDBmpGn4tFY07D4grkOAN8KJtCZcIlx1MDAxZiqedlShmCxsV1x1MDAxNF32kiku/+tKw5RcIuOEv/FcXLyXKStlXHUwMDAyol+4XHUwMDEyYlx1MDAwMVx1MDAxYSH6gFHGnaZcdTAwMTJKXCK7RlifkD5Y0fA26YLC31x1MDAxMWiwaL14wFx1MDAxZuOai9aDmYK1c1x1MDAwMvKEXHUwMDAwaYR0XHUwMDEzjVKWsO+IjDiRuSSXg3unxCQlTaKgbIT1LCPpo4JRXHUwMDFhlZh8vFHxsItGo0DkdT5Je0FS64SHziprXHUwMDE1ed6E9HlIkiGGeVx1MDAxOFqElzx/WEi/l05cIlxmgYeB61wiSiC5UVhjoU/kX1x1MDAxMDhCXFy5TG4vXHUwMDFlq6qQf/fSn0hcYotlNkjYVsRAxIEm8zNcdTAwMWJDbYtigkPqYK244S64/JvXXHUwMDA3wJK4XHUwMDE2z8dcdTAwMDC3wf5JPDKRq2s/XHUwMDE1SGfVdsBvZFx1MDAwNtI0ekFcdTAwMTMl7+g1bYe311x1MDAxYrXOvVtcXJs7P62dbKjrucfrXHUwMDE5XHUwMDBmpGFcdTAwMWKYhoRIyiBykSruUFx1MDAxNv6BuuKoJdrr6TGsXHRKJSqayFx1MDAwMDtEdY1cdTAwMDOOjFx1MDAwN7DYuKBcdTAwMWNcdTAwMTH85cTN96XO4k2x+7z5fFdfPJg/W1q4K8x/9iPi3q4+UiWy2uxWr9pcdTAwMTFcdTAwMDXNR0tFPsp+M/BXT7kyXHUwMDA0TjW7elXTsMdYOjyfPvfgZfmifrV0Plc/8NvPLctrxawq9okr+qAqrlx1MDAxMdRcXFx1MDAxM60osVRaXHUwMDFhXHUwMDFiltJzXHUwMDAziG+EoMhcdTAwMTGAb4qVIeJtwpuiY22FZ1wiXHUwMDA3sLBccnnP3yQ3NKEp0bA/WO9cdTAwMWbqlZX1x05j/mBvfXvnrvx8fnV0XHUwMDFi1/v1Zb0q1lx1MDAwZXdcdTAwMTZcdTAwMTeM2KjOi5VcdTAwMTdeLP1ivYdhjU1cbplWXHUwMDFieMyf9019XHUwMDA1RqBDq9FLQypcdTAwMGZcdTAwMGK2vLVWu7xZvWqtbV9cdTAwMTe92Nj+nfI/iqPzwKdcdTAwMTaQRFpPg9rSRO9A13RCQHhcdTAwMGZcdTAwMGVoit1LVlx1MDAwMuRcdTAwMDfK5Ulcbrj8gOptzqxEQFxylaTYNs6H26tccqHB4vmDZE5cdTAwMWW37Upn43z57L7wunR9eT93d/v42TUg9mj+6NRwpqREn+6TkTFB8fBux/hcdTAwMDFSn780zlx1MDAwNjfW4KmHXTtv5172XHUwMDBluqvldvd+bXH99XjmXHJcdTAwMDZcclx1MDAwZpWBJnxIZdOTcj1cdTAwMWSXS2U00dJcdTAwMWI1hDLiZ12mIX5HTkRcdTAwMDCKXHUwMDA2YVx1MDAwZSomU3Tqy1x1MDAxZPVlKpru2+8x4fhcdTAwMTFsZZDN/+H24qfUIJsh0VM/9OhO89i1XHUwMDFmb85cdTAwMWXqW/fLL829O3/TtkdZw9dmRVx1MDAwNyxcdTAwMTHiwshQflx1MDAxN6qQYlxmXG40XHUwMDA0h8MweUE86lOkRiRcbmEtudJwzVx0isZecKiINsNKqSMmx0Fz0iNuXGaiV/zSgfF0IGSTx1x1MDAxMYVcdPfKjZ4k6Z6rpdZTcfl27qlaM/YpdGqFWXdcdTAwMDWWXHUwMDEyn4qmY+JmKJ7yXHUwMDA0TjFcdTAwMTdcZqc6XHUwMDA07+1cdTAwMTS1gHhKPVx1MDAxNfDrQDRFZkDsZDhTQVx1MDAwNeLzXHUwMDEzXsbHXHUwMDE5vY9no7TWl1x1MDAwZYyeI7Q8M3OghFxiVojRfcDa9c7yS7d51tns2oO6ssuNTiWL7npWhN9Yg8hIkYRcdTAwMDdnTFx1MDAxOMB07TRCXHUwMDExXHUwMDFhkECNsVOTf5qqRilCjceOXY1IdK1cdTAwMTSl201ubc2OOSretVx1MDAxYdf3d+JUnq7dzpVrauGzS3xvV1x1MDAxZslcdTAwMTFutprESE0hVOLa9FOEg37z9OmwRTZLqlx1MDAxNFFF7Fx1MDAxOFxmL4+lk7mL+935m4eL+fnGizgtbfmsXHUwMDFj4WxNbFx1MDAxMIhpmCNcYiWok934ZJu7d1x1MDAxY85cdTAwMTBvgoshqp3p+Ts60KZcdTAwMWFgJ5TXXlxm5HnJndhcdTAwMTCVk5qJdIBOmsCF5lx1MDAwN8QysdNcdTAwMWGxK7JZ3iWwm3bCjIHfQqdysLXyUj9fkE9i5ejy2p41Zn+QkFSc0TEunXGpYFPMXHJCcEG8ataJ4G1s+ubkXHUwMDFiwzhzXHUwMDE2oTpcdTAwMWMmTVx1MDAxMVFcdTAwMDOSf0JaRkUm0DGuuHJxXHJ7XHUwMDFmsUvu1pnPRd6wftk8Xinfrc7xu/mF6nZ1fXXxoDhcdTAwMTZ5gyPu5nFcdTAwMTQm9lx1MDAxYyc7YjfiWdFcdTAwMTRcdTAwMWFcdTAwMDGHUO2vXHUwMDFlMKONnrWThlx1MDAxZTQ1TPm+XHUwMDFi+2fQRmTKNP1cdTAwMTQs7pSiXHUwMDEyXG4oXHUwMDFlXHUwMDE1XHUwMDA25Zf+YTlJw0m8XHUwMDE1UfotuV6/evRcdTAwMTb8K/7vcYF+dr7TeUlcdTAwMTVGfPRcdTAwMDPCwaL+ISOZnog0TSNJSVx1MDAxNGs8XHKFJuLRNNInXHUwMDBlXaBcdTAwMDJPhyVcYjCnN6vJekZbkLBxb1B/XHUwMDE0pE/j2eDKJjGZ6eNcdTAwMDCdulx1MDAwMT9koD5cdTAwMDTQl9u1u7vqtFx1MDAwNq3lePo0Zu/bzFiA/a9cdTAwMWb24Hvp7m6/i7v6bqW/P9aqT3NcdTAwMDPoSy+jXHUwMDFmciCRqpNWVSOX9u+//v3/McPRziJ9 - - - - - - - - - AICA - Edge PC - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - HTTP - - - - - - - - Automation Server - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Web Browser - - - - - - - - - - - - - - - - - - - - - - - - - REST - API - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Robot - - - - - - - - - - - - - - - - - - - Force - - Sensor - - - - - - - Application Graph and - Editor - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Camera - - - - - - - - - - - - - - - - - - - - Integration - - - - - - - - - - - - - - - - - - - - - - - Monitoring - - - - - - - - - - - - - - - - - - - - - - - Gripper - - - \ No newline at end of file + + + eyJ2ZXJzaW9uIjoiMSIsImVuY29kaW5nIjoiYnN0cmluZyIsImNvbXByZXNzZWQiOnRydWUsImVuY29kZWQiOiJ4nO1dV3dcIkmTfZ9f0af39SM3vdk35L33u3t0XHUwMDEwIFx0XHQjXHUwMDAxsnu+/743Sj2iqqAoUEM36pGmx1GQSqrC3IiMuPF/f3379r37clf9/l/fvlefy6V6rdIuPX3/XHUwMDE3vf5YbXdqrSYuyej/O62Hdjl653W3e9f5r//8z94nWLnVePtUtV5tVJvdXHUwMDBl3vff+P9v3/4v+mf899TrtbtONXp7dKH3i0TgJv3yVqtcdTAwMTn9Vo9cdTAwMWbppfXvb6h1XHUwMDE28Nu61Vxurl6W6p1q71xuvfT95LBVfnpcXL67OXLVqll46izO38/3fu1lrV7f777Uo011WvhcIr1rnW67dVs9rlW6139//9jrWZ9qt1x1MDAxZa6um9VcdTAwMGV9efH+auuuVK51X/BcdTAwMWF/f63UvIpW6L3yTJ9cdTAwMTFGMSO5XHReeIU/+v3yS3SZc1xcti44K7jUQqf2Nd+qt9q0r/9cdTAwMTBV+qu3s4tS+fZcbttrVt7f022Xmp27Ulx1MDAxYlx1MDAwZqv3vqdcdTAwMWbfWFx1MDAxOM6ks05cdTAwMThvTFxigfduwXW1dnXdXHUwMDFk/p5ONXoowlxiXFwyPPSu0CbuVis98YhePbnsXHUwMDFl7O++mvqRPX65XFy+rFx1MDAxZJ6Vit9/XFz/395cdTAwMTNrl1x1MDAxYdVVWrn5UK/Hb3uz8uO2Jy5cXNCFxbRAxoUyJi1bj/e7RyZU5ML81tbW0Wq9dDv/9H5nXHUwMDEyXHUwMDEyXFxqt1tP39+v/Ltvo1x1MDAwZneV0ptcXFxux6VQQsugVXi/Xq81b9ObrbfKtz1Rjl79979cdTAwMDZrULf63Fx1MDAxZKQ+Slxun6U+Rlx1MDAxOSmksiNrzzp386tLta66bz8+lS5cdTAwMTbXjsqbxd+pPZD+fP1xzPrAObfWeu2S6iNcdTAwMDVn3nPPnfGQV+Wnpz5asKBCXHUwMDEwXHUwMDFjRlx1MDAwYlx1MDAxYeJ9v/pI06cu3jjhYOP4jKjLJFx1MDAwNbq3q1azu197padcdTAwMTf7ovTqUqlRq78knn4k6bjbxdX54rfFylX1207MgtPVYr12RbL/vYxdV9tcdLXo1uCf3t/Qbd31rpbx+0q1ZrXdf39a7dpVrVmqXHUwMDFmXGb93fjG1ZV3U8hiT/Oi1KnS1eiJXHUwMDBl1eN2tdx9k+RcdTAwMDHKLK1ccumX/1ZmXGKUtsoq19OtPHUuVy+3XHUwMDFmXHUwMDFh7Sex+LpR2Dheu2qXj9ZmXFydJdfMOiOsgrBJ01OiN28oXHUwMDA081x1MDAxNs7FXHUwMDFibpXm01Nn7VjAPrxWXG7/XGJC9WuzXHUwMDE3jFx1MDAwYlx1MDAxOFx1MDAxNaudh+1cdLHNvCl3gPXlQtmez1x1MDAxZazbhUb58eZR17dcdTAwMGLq8DA4fV1cXF7ajrmhmfCVQa0sm5VcdTAwMWRvXHUwMDBmKuWz22J9s3G+V1x1MDAxYs1X/mvYuutrj2uVwsVqWN6qnMqzw8dGmz9PYN39XHUwMDA3vde+1+VG5UVcXO9sXm80atvNXHSs+1x1MDAxM5hh6LqhUznYWnmpny/IJ7FydHltz1x1MDAxYXOTwlwiXHUwMDE2Pkn1NPInsUhk6Vx1MDAwNpkvbWX65XfzZYWSXHUwMDFhXG7d0/c888VPSlacbm00XHUwMDFlNraqJ8er5va5aWfdfFx1MDAxMd7A7eZcdTAwMGWG2ivfw15v9ktcbuaslc57I4NN7Wty1ktZ5mBEtVx1MDAwM0T3wulBWIRcdTAwMDVpddBOc8c1N7JaiFx1MDAxObm/4YlW+Fx1MDAxMlxciN5Wf7tcdOvpzt9cdTAwMDIpf7zy7979XHUwMDFhXHUwMDEz1mg+hm7Enlqp3Z2rNSu15lX6I9VmJeNKvdTpzrdcdTAwMWGNWlx1MDAxN9vYadWa3fQ7onWLpOTX1VLfvcDKmdfuaLnko+n917eesEb/8/7f//uvge/OXHUwMDE0XCL6XHUwMDE5KD69XHUwMDE1/4r/e3w7XHUwMDEydPrlv+2I81x1MDAxY2GN5r035JmRhdqtOdrsXFw0rl/Xy5vHr1ul9WMz62aEXHUwMDA3ZrVC9C+cXHUwMDAzXHUwMDAy6Snmm1x1MDAxOVGcce6NcIpcdTAwMDfheXpns2dInFx1MDAxNJZLzmdcYlxufdmRP9+OOJt++Vx1MDAxZI84XHUwMDA3ZG7CXHUwMDE44ZSuPi/K+93S+tlrYzdcdTAwMDR1fLzE7z+BIYHFNFxiUDhcdTAwMTCY6DMkXHUwMDFlYSx3xjhcdTAwMGKjKj6BIVFGapWfXvwyJF+GZHKGxPDMJKtQwVx1MDAwNW6sXHUwMDFlXHUwMDFkkcxcdTAwMTV3LuqnLX93UVx1MDAwZa2FZV9cYp3j8icwJDZcdTAwMThcdTAwMWSMVLAkvver31xmibZMXHUwMDA3XHUwMDE5gpbw9FLOviFcdJ72XHUwMDE5wldk82VIJm5Ihp13mpCZ41x1MDAwNUqGXHUwMDE3XHUwMDFl47izs/my+rJzoZ6bS7Vucf9iY7vV3Z11S6JcdTAwMWPTkkvAXHJBXHSRXlx1MDAxNv3Nklx1MDAxOMO0gPxaXHUwMDE4Xa/19FK8nlx1MDAxOe3w8CUlcFx1MDAwMZJ6R0fvlsQy2ofWXCJI42RQsdPZXHUwMDFmZkRcbqm9p4g0x440N1x1MDAwZp7EwtZld+36aOW2tF5+rT3Nx+3IXHUwMDEx7sVx93Veda+WNviGP9o630y8YWbSxJM0OVx1MDAxZvLHXG5PJEuHVIBgQXNHV6K904PWc+PYPFx1MDAxNuYv60uN2u5la3NltpXIO8G4XHUwMDE2zijnhVxiqWOSIDRcdTAwMDNcIlx1MDAxMcDzQdvpKZBzXGbG01xiJVx1MDAwMyCB9Vx1MDAwM1xuXHUwMDA2gmZGeec89smhYi6tP1x1MDAwMFx1MDAxNojChMrVn6NdvlF/3Vuab5ZMca22vLW/Llx1MDAxN3+tcJvg41x1MDAxMeWXP1x1MDAxZPjuvkee9+lMMZr8atIxeFx1MDAxZO6CNcLhefLc5YxkSlmnvFx1MDAwZl4qLbWZ5nqcXHUwMDA1XHUwMDBijVx1MDAxNTo6LsHb9Jhft+fE+rdnuTK521x1MDAxM0xrOvg00nE4x+TdY1x1MDAxMH9tjVxmXHUwMDBlgF/pJDBcdTAwMWFBNGKCNFx1MDAxMozKsv8hZkdS5t9K7YzkfvRorFDyW6s7rlxcVPWTe0R6stJe6WSY/+tS+fqhXZ1cdTAwMDFcdTAwMDfgNZN4SDZcdTAwMTI6rpMgKijDIFxuXFxcdTAwMDHgXCJeXHUwMDFi5lx1MDAwMvAoy/InojGOqFDgXHUwMDBmpEZcdTAwMTn4nH5cdTAwMTfAmaJDdMBtyLNcdTAwMTTc8z5cdTAwMTAlgMNcdTAwMTVJXV4wNjknMOlY68s3ZMVaWVx1MDAxMlx1MDAxMn26XzYmZVwiLE+/+p6xIUMptbWjXHUwMDFmRb8+++tccu1K4XDr4Hpxa+t896S0NPs2QrFcdTAwMDA4LuBPouq3pI0wXHUwMDAwicJJSckt7mNHTJO2XHUwMDExWjFhOEAqXCJcdTAwMDNteSzjXHUwMDEys1x1MDAxMVAjRUJcdTAwMDDAqnxAjNhnIzz2KZTPPUL6slx1MDAxMZ/ORmRKSPTpftmYkI1AgJSZioGcIXjyY+RiXFy9u77xtPHycntXfT6wXHUwMDBiXHUwMDE3jYuH49m3XHUwMDExhilnXHUwMDAwRZ2CTeTJ6vNcdTAwMTBcdTAwMTBmXHUwMDA2Mt/WO6X8VG1cdTAwMDTV+mNcdTAwMDMwSFx1MDAxY1x1MDAwMHOQjZAqXHUwMDE4g+BcdTAwMWWbXHUwMDE1wnnbX66igFwiXHUwMDA0Npx3OvRlIz6jjVx1MDAxOCwh0af7ZWNSOMJn41xioSVcdTAwMDIvPbqJsHOyU18t7e7PXHUwMDFkLyzNra/vrL5cdTAwMWM/zL6J0FRC76ibgKxwb5XIRDjJqNxcdTAwMWRBerBknKdcdTAwMTdqSOYkdcpQMMutXHUwMDE5XGIjlFx0XG5cdTAwMGbFXHUwMDEw0nS2r1wiV8CJXHUwMDAwR8Q17MtAfPszXGZEpnzQT6FPNMa0XHUwMDBmw+v2pVLpl99cdTAwMTNcdTAwMTLKW1x1MDAwMywxep2JuL25kbWH2sXR5pGslopbR1x1MDAwN4uHs52PdiYwIYVcdTAwMTVcYuNcdTAwMTFsuL6yfclcdTAwMTCCiKiU1Fx1MDAxODm9lDRcdTAwMDBLXHUwMDEwgVx1MDAwNy3wR8Be9Vx1MDAxYlx0K5h0gYBcdTAwMDJcdTAwMDBcdTAwMWX3uj9cdTAwMWRcdTAwMTGchVx1MDAxOMHa5Vx1MDAxOInNV7XePKhvXHUwMDE3L+5V6VWe+uWt5eNcdFx1MDAxOVx0kW8k3j8z2er3vv1P+ZBnuGYpnalZQkGX8aTGUK3i3nKtXFxeOH3x95vb61x1MDAwN/cldfnwW9tDR1EtMl3aXHUwMDFh+FinpE33h3rOXGbwu0Fw5JzkQ/zvzza4cc84t46aWrx0Ulx1MDAwZcj1XHTNnNfCh+CMdNaofoiOr2FMmHXdmlx1MDAxMek3XCKzocJyg3ts1OjC/2JcdTAwMWVXy4f4e+/RdTtb6927vY0w28LvZWDAO/ieXGL9heLpdlxuRK9cdTAwMDCgwntcdTAwMTEoqzfF7s5cdTAwMDAlVPDl+NtYa53uXHUwMDE3fsWcXHUwMDAyTKaKXHUwMDAxIaVcdTAwMGZ9KSx8NHBcdTAwMWXv4PuS/SG9kFwis1x0QGhFnTZjNFx1MDAwMdTskbpcdTAwMGWXXHUwMDA1PJuTl9PGvGuZUmW2Zd9cdTAwMDXDbIDY485cdTAwMWJcdTAwMDU8kpJ9p3FZ4cFw/KeKJ0xnUfaF0d5cdTAwMDTHcyOvL+EnKVx1MDAwYjqTXHUwMDE0Q6hAhVFjZCZcdTAwMWaq6mq3VN668uVKca7+2l7elLOOeixcdTAwMWRdXHUwMDFiXHUwMDBis09gg6fr1iGTRjtjXHUwMDE0LL9cZmp65abOMqkh+cBYTlJ82S/72jHgLy1cZpfQXHUwMDBmqG1a9qGi1lx1MDAwN5vb4/9PXHUwMDEx/beIY4DY47Fm11lcdTAwMDdq1qDc38hyPzxcYprVdJuVXHUwMDEwbeBnZVx1MDAwM7daps2+9oxKsFVcYjpcdTAwMThrplx1MDAwN3mUolZWp4GsQlx1MDAxMHaA4COqh2Ny0ENcdTAwMDVwpuNMJO/VXT7AKVxiNVx1MDAxOPJMP5H2/plEjDyQVCUmOKdaPFcrtvbQXX9YfVjozl/vXFxdTjdEjj3GRJYu9q1/0CytjpAkojvaKj/QLeBcZjKnRNBeSjpodypW0/P9qnRcdTAwMTdJXHUwMDE1MzxwetSGO6mU7buziVx1MDAwNGHWpoZcdTAwMTNOxDZV4LCqwOwyajpcblx1MDAxMjv0g3ZcdTAwMDXpXG54m1FcdTAwMWF/dN+mJpybTFx1MDAxYqbJpicz1Il++lx1MDAxNam32l/xf4/LXHUwMDBlNKxcYlwiWHJpY5jTwVox4+ZcdTAwMTRcdTAwMTJNLW5cdTAwMDZcdTAwMTKmXHUwMDAzXHUwMDBmLlx1MDAwNSS4kVxmj4TYRiRcdTAwMTRkisWyxjLYbKghcYJcYlx1MDAxNzt5XHUwMDFlQlx1MDAwZlx1MDAxNJRz8Vx1MDAxNpdcdTAwMGZcdTAwMWLPX1fQ3dvVR0h/Vlx1MDAwZVx1MDAwZXa+J15cdTAwMWSd7KdRq1TicDrJ95OHXHUwMDA20lx1MDAxNEDJnUyC+mdIU1xigt1s5lxm2FxmgEo9uqKur9nVM3N/9HRcXPRbp5dmZ+dcXP1W4oxcXCVcdTAwMDWOZ0D6jlx1MDAxM6DXOpbRfdNShMJaWmWJXHUwMDAzz9ow8yR42KV3sCq5x4xcdTAwMWLVPXtxasp3oXVZPDjZKajX3c/csZFJU1x1MDAxN+9RSHdsUMbYxYs/81x1MDAwNHyjsP/4tN8pN9pX7lSu+v1Hdbkx21x1MDAwMa1cdTAwMDBoZzo6XHUwMDFkXHUwMDAz5HFKJavx4Fx1MDAxNFxmc54rZ1x1MDAxMe/qaTZQ0omBNcEr41x1MDAwNVx1MDAxZExcdTAwMGUotVx1MDAxOcBTRzX4JqhcXFwimM8o0T/nsopcdTAwMGbdVqPUhUB/26+2XHUwMDFm4y7qXHUwMDE3kdVlb2DqjHVKZZfiXHUwMDBiXHUwMDBi7GXppHVkxX7evVufO5xcdTAwMGbFufnju5d12zks2NKsK7ZcdTAwMGbQXFwjqSeCtDzFQCm4ZVBqXHUwMDFkbFxi3sVL02aRslx1MDAwZT5LcudDRsDe0/ODyrHeL91cdTAwMWbY291bfVFtmaVqu55oZ/xFhuD9N06WW65vo7+r1VH4zFZHoYhsXHUwMDE3mGj0VPDSY3mn+7LUuVldMEsrW6/39eOn/VlXMKC/IG1UWFx1MDAwMnXS6Vx1MDAxM3BhmUUsq1x1MDAxZGVcdLyffVY1YnvmXHUwMDE2XHUwMDFhmJdcdTAwMTD+hUr2xT3wp3BcdTAwMGZkWlx1MDAxMikyS2kk555bOLAx2Fx1MDAxOecugnttvFx1MDAxNP3iYvWy+qRcbq3K9sxbXHUwMDEyzZzBjXBcbuFcdTAwMDZPVrJSuVx1MDAxOFx1MDAwYlEvjOeCYPjMXHUwMDFiXHUwMDEywZWEydN5xTRfduTLjkzOjoiQfTatg6d2kdFcdTAwMGIzXHUwMDFh9XKru7krgrht1Zxrn67ON64/gVx1MDAxOVx0wiC08Vx1MDAxYyF9OqcsVNTOXHUwMDE00d06XHUwMDFmXHUwMDBmsGfVjmhcdTAwMGXMr00uXHUwMDE30pdcdTAwMWT5siNcdTAwMTPEI3JY6iBookhcdTAwMThcdTAwMWSPXHUwMDE0XHUwMDE2bvdcdTAwMTdcdTAwMWUvjp7au8cnXHUwMDBianGvuHI566RqZEg8XHUwMDA3XHUwMDEygakghu506kBcdTAwMGKmgjRWOiAz81x0aF6FVEorXHUwMDE3P0f7siRfluTb1FnVpMpcdTAwMWWDI4W0Vlx1MDAwND9cdTAwMDYnyOnpy8lZbf5urtgqVE73jk5cdTAwMGLiKKuXd1aMiZVRXHUwMDE1gdJEXG6tvOvjVeNcZlx1MDAxN5w3nFx1MDAwYummWDI3XHUwMDE5XrVcdTAwMTBcdTAwMDI1XHUwMDFk5kGSYvP6qFXbet7bvOeLZuly7vnhPMGadvfwfHLw2rnfWll8XFxW9Uans92IXHUwMDE3/cxOJvO3XHUwMDFm0tnsolNjgFx1MDAxMMfphr+xZ436yc71+dbm6+3h5sbJUaGx+OuKRfiHdMhpXHUwMDAw++CFlFxuf3GZXHUwMDAy9pLqdIzRiHJgUORcdTAwMTSpXHSxXHUwMDAz5olcdTAwMTWHXHUwMDFiXHUwMDE4r2DUgF6bQcOkXHUwMDFjNYXojHzAL1x1MDAxNNVxRo30dvWR07fj6sW3OXi3Tua5W716mZT2yZy6XHL8xZM4b8usjpWSZ9OZSyf9WFx1MDAxZFx1MDAxMcPPRma1mlx1MDAwYuLNjKTIOurhTGfwdCBcdTAwMDI17WhQVoLbd+KAWXDGJdFW4aEor2LdXHUwMDE5vTpcdTAwMTHBRNBUoVx1MDAwZVx1MDAxN4c92b6mXGJcdTAwMThcdTAwMTlcdTAwMTOyuMxntTj25Oz2ulVcdTAwMTTmgK/dXFytLepcdTAwMTXcXHUwMDExO/7J2YdMxIjFscOPkb8l6lC5ompcZuiW5pqwiIj1jf9diKqZtNJr4y22XHUwMDBm7GT67u1ky2OpOlbTmFx1MDAxM3hcdTAwMWJcdTAwMDUxNtL0b1xuXHUwMDFlQlx1MDAwN+dcdTAwMTTpXHUwMDAxVTf27elcdTAwMDOBQ9r4/MpcdTAwMDLZQrZO0U+/No1cdTAwMTk9ZKFcdTAwMWWXeSqiOEXeY9QlXHJWjVm3qYjYmfRAPFx1MDAwMkgjqFx1MDAxNOpcdFoyXHUwMDE3NN31IIhcYmh6oIdcdTAwMDNeXHUwMDAx9GhFbERcXNuRSmRFxGFcdTAwMTZ0xmHqXHUwMDFmXHR69lx1MDAxNvdcdTAwMGa+XHUwMDE1d1anVCmbXHUwMDAzXHLSSKh/N1MvO/JDXHUwMDA2u1xiXGJcdTAwMGXloMY4g5jfLq6rdm1Lrlx1MDAxY1ef/MWivj5cXJ09tZXMKipcdTAwMTGksMBK7mLpt0iPtVBMWc6pXc46l1wihfbaMcAnXHSJ9Vork9roXHUwMDA0oZFh3Fx1MDAwNEuN/lxue1RcdTAwMDPCfyWY45ThxVx1MDAxN1FGKt+HjLBBT2xCeeH/9n5hrXtXf60/XHUwMDFl7V6Fo01j7EphQmnCv9NTP5EmnPrIRZ89KVxylpRYTNxcdTAwMTiHcZe7r25zrnBT41vn1efG0m758Lb2XHRcdTAwMTWBcypz4zSIXHUwMDFjTi1FmeFtYFx1MDAxMihCUVx1MDAwNY6aXCJfXHUwMDA2zXX3xtFcdTAwMTRYrbRVXHUwMDAzSsmlY9QszSHrTtJ++lwiXHUwMDA0uEIrZG6l0DT1YFx1MDAwMunySYD9Py1dXHUwMDBlXHUwMDAwT/2uwLpcYlkhrT2HRT9cdTAwMDXHrOaKXHUwMDFijXfgolxyuetlylt0lVx1MDAwNlxuXHUwMDA2rKiFXHUwMDExVMqdt1x1MDAxY0d4YaxcdTAwMTBeOU68M6qvY81pq6VcIspOXHUwMDBlWD4mXHUwMDFhzzJoLpvvx2r4MGfG4NtT23VTXdg839/qdu9X2q1m41qsf8yepVtO3j9XaZGgTdegwVx1MDAwNjDAXHUwMDFhYUxwmnuRbI9cdErD71x1MDAwNyFcdTAwMTXNeUvQYk7atXvmrbHakUzweKd73KKRXGbCfUf92n7ASFkhpYOk5lx1MDAxNS19mbRPZ9Iy5YN+XG59ojEhk1x1MDAxMVTm0Vx1MDAxZlXoWCvHYPpuNlx1MDAwZVx1MDAxYutcdTAwMGKtK9FduH9Z5UeN0/Zz1pDHmTZcdTAwMTkwXG7Ufa+spqY5k8JAXGJcdTAwMDaIXHUwMDEznPJeXHUwMDFjJjektjrBplx1MDAwNM9cdTAwMDRcdTAwMDSBeGOif1x1MDAwZopcdTAwMDbgapShQ1x1MDAxNSNodHb/WSBccjpcdTAwMTiBN+nLYnw6i5EpXHUwMDFl9NMnXHUwMDE4XHUwMDEzMlx1MDAxOFwi2OyoyXEtXHUwMDEwlY6RPjh4vjypXHUwMDE3XlRZv2wsrpndvcOC/KDJmGbUZFx1MDAxOG5vXHUwMDAwpMONXHUwMDA0XHUwMDEwjIljZDBcdTAwMDShXGLHXHKnQbA+3lNcdTAwMTJcdTAwMTlcZuqiXHUwMDA3xnCGXHUwMDE4XCJcdTAwMDSfXvpcdTAwMDDxXHUwMDFhszT6JohAam9cdTAwMDe0MWnBXGZcdTAwMWSKQjSAZ0Vs6sh7h4WNiLF8Xtz0eLB8eyxPzdLa00lp/U50/LJ5+TJcdTAwMTmzbDJcblx1MDAxNjhcImjIXGKNgVO9LHF0XHUwMDExkuFoXHUwMDFjn6Z6XHUwMDFmTiFD7npcdTAwMDGBXHUwMDE4rIxG8CSJoi957ODJUSrjqPfcXHUwMDEwxlx1MDAxZWV/XG5cdTAwMGZQOiW8JNqV+HqaUlx1MDAxM1x1MDAxNmpcdTAwMTiCNo5cdTAwMDebt5yhQT88eFx1MDAxZIjWWFiZ2J6yXGZcdTAwMDFcdTAwMWQwlfMhyrjlLec0o1x1MDAwMUlcdTAwMDE3T9JcdTAwMTCUhMFcdTAwMTVcYjotXHUwMDE3ypPySeKeyN1cdTAwMWRnlFFcZl5FRjw5XHUwMDFjXHUwMDBij8lwyVx1MDAxNVx1MDAxZFHh9srcR/FTw6KGzdzkQ5rooG5cdTAwMGVIKVx1MDAxNlTlXHUwMDE5/JVOpX6wxG9cdTAwMTebZve10lxc2eCtys2nM/jcXHUwMDA2Zlx1MDAxZI1cZuN0jCiT3JqBW6ZodFxm9ddcdTAwMTnhp3fsIzX2XHRRpKJAw4XxXHUwMDAzXGY+lcMoro2SXFy8jVx1MDAxOO6z+NTC5G1uouxcdTAwMGYy+Fx1MDAxZtaGYS2luIvaezFGkuW20jq9fFi8OCvXmzdhvdF6PlPFT6dccsJqhudcdTAwMDBcdTAwMDOroVx1MDAwZmnaNY/YXHUwMDE1XHUwMDFlgCZcXHt4nmGDUH6anYFR3aR2NnJeWlx1MDAwZVximGCmicyIWtVcdTAwMTSi29BfPSngq2z0Vb/UYXgo4E02RZZx1Kkrx5jsfrYv7Vr1fn/tfK6jTy/b1fXOy+Ps6UKqXHUwMDAwQEjOaFCsXHUwMDBikkZ48GR6karKmCBAoKNcdTAwMThtislcdTAwMDKnXHUwMDE4cFx1MDAxYpdGXHUwMDAy+1Od5Vx1MDAwMOhvXGJwuOA0XHJw56Jf9IOLeOVy84uTXHUwMDEz/d9QNvCnY3xBob8jslx1MDAxY1x1MDAxYYhcdTAwMGVRSJ4+eMYlwUrprVEwhPnrwaxcdTAwMTLaXHUwMDA2zqHyXHUwMDAwoVx1MDAxM4ctfUKVXHUwMDBie/FcdTAwMDFJxbZcYkQ8cUDZ1HJCarhcdTAwMWLOIzKNUVA0cI0zXHUwMDAy+Ieollx1MDAxM6uJXHUwMDAw7ZPRaHhEIU7mg3JcItOKXHUwMDA2uGpcdTAwMDTTiqroXHUwMDEzN59cdTAwMTlqwKDp61x1MDAxYT9SjUs2mD1OTWenVVx1MDAxNGJcdTAwMDEvxuGCOS9dlU/23eVcdTAwMWF3+0s7V+7xtO1nfi5rNOrE0FBcdTAwMTFH8ZNP5V1cdTAwMDOAbPCSzqWh/XaKLE8uMOe4XHUwMDEz3lx1MDAxOUr0ylx1MDAwMUc1nnLIgNXKaVx1MDAwYmwt+02pgU54XHUwMDA0cHlVXHUwMDE4f1x1MDAxMIr4p1hYjfBOSFx1MDAwYptIgXtwybSCplxcoDNk42xAuJCb9NBcbuiZOIm5UZHvTthXT1OlOVx1MDAwZipoR2VcdTAwMTn5Q7xcdTAwMTknJlRBfPNEW5ssXHUwMDA17Vx1MDAxM9xcXPOvXHUwMDE0ZXE4XHUwMDFkXHUwMDFmXHUwMDA3WNresFP6IfRjXHUwMDA17L9TQVx1MDAwMTi4cStLh8RaLlbc3Vef41x1MDAwMlU5jtGW9vrcvdjl/lxcP2w3XHUwMDBmXHUwMDFhpePWwd4xn32TKFxyi5KxXHUwMDAy5kjw1HAoXHUwMDFhIFx1MDAwN1x1MDAxMeM0lctAQqZcdTAwMTdaSc141FTmNFx1MDAwNEFcZsws4z1aQECER4TlVLyu/z208l5TyXVei+tcdTAwMWZkXHUwMDE0h0r/0EJNmrGVqVx1MDAwMJB9aKNcdTAwMWYjvjpcdTAwMTB7oX1VmKuvvSw+LnfrV0t761mTXGZmR1x1MDAwMaRcdTAwMTJMkKpLXHUwMDAwWqF9Slx1MDAwMWB/gFx1MDAxNrRcYlx1MDAxNqhMT5O/StOgXHUwMDAyQ1x1MDAxNVx1MDAxOFpcdTAwMWHg1n75XHUwMDE3MPySksyGOlx1MDAxMHj/yVxuTG40dOt3Jlx1MDAxNkYozHz/zFx1MDAwMFa4rcf73SNcdTAwMTMqcmF+a2vraLVeup3vNTUkZPuDrHDTL/vMnjcofFBcbpHJXHUwMDE4pHArur3eeTkpXHUwMDFlnlx1MDAxNV9Pdu5cdTAwMDFgdq82Z1+rqHhSOIXbLlx1MDAwM/VcdTAwMTEntMpcdTAwMDdKpFx0TjP+8GT0XHUwMDE0K1x1MDAxY1xirGiafopoz1x1MDAwZWx31pzR8Fx1MDAxMCrOJua3XHUwMDAxPlx1MDAwNTtcdTAwMTRcYnT/Qdnrf1xu0C5kysfb1ZRojFx0PTNcclx1MDAwNM9Oa0rEdDIxNCfPQFx1MDAxY22vXHUwMDFk4i33fO1RN9f3jXra2PlgXHUwMDFk5a/EncSuolx1MDAxMFx1MDAwMUM+LUKJVFx0lMKdhyOj+UIwmW56objRVLwpLUJcdTAwMTlcdTAwMWHVlTFCiGvqL+TSO+tcdTAwMDdcZi6mI2Av81x1MDAwN1x1MDAxN39ZiE9nITLlg376JGNMXHUwMDAzMTQ2zWyiclx1MDAxMDbh5Vx1MDAxOKHpzdNcIrTwvGS2XHUwMDFhT5dcdTAwMGJ3xd3S/tPZzJtcYnhdOvmgilxmoVx1MDAxMZ2mTv08nYFTMkNYozSfXHUwMDFlMqfO16ChJIg5JZWHXGZcdTAwMDBcdTAwMTEhqmyxXHUwMDFjQqBcdTAwMWRcdTAwMDKn/nSds4hslf4npes+5Fx1MDAxY3W8r6yPeVxm4b13Yoz6P9E84zfLYnNx5cTah9f22sbh6+xcdTAwMWb6SZqXbrySWjn88ameXHUwMDAyXHUwMDBicbPeXHUwMDEwWZOmQ9DpeUfOop5fXHUwMDE3tZpcZi5cdTAwMTCGgYRcdTAwMDHU1lx1MDAxMU5GXHUwMDAwm5Z8XHUwMDFidNRcdTAwMTP+deT3eb1g4t1cdTAwMDVhIZxcdTAwMGVG11x1MDAwMbtpYOfclLEwzGhcdTAwMGbrqKWhmvZkWSClIGmwXHUwMDE2ZS7oUD+/7k5cdKYl4CF10zrupPfpXHJazYWmXHUwMDA0NSVUco8g0+slVlx1MDAwM1x1MDAxNMXWXHUwMDAyj8azQeOszFtcdTAwMGVxXHUwMDAzsXZcdTAwMTJoXGLEh+JcdTAwMTNnhlx1MDAwNVx1MDAxZPX6WsS9sGVCKZubwVeBwadcdTAwMTiaXCJOvZHJXHUwMDE0eUEqXHUwMDE2nPOCZm5qOsHKW1x1MDAwZVx1MDAxZnBcdTAwMDAsXHUwMDFh34WYpbVM7q9PpfPWc0wpQzRcdTAwMDTKKkWTXHUwMDE0fm65QmDcXHUwMDE4mD1cdTAwMDRcYs5cdTAwMDSXun30dfG64/5tXssoVaRcZqDJwlxc+iCMSD9cdTAwMGasR0NulFR4aIFoY8fSh3FrITOPaKXKPo+g42dcdTAwMWFVOnqzzEJ98bmw1disVa5cdTAwMGV3bu1rYVctz/yATdxcdTAwMDPojlx1MDAwMoyCWVx0jotcdTAwMTTfhfBUXGKmXGangmAxxcSRMlxmSMNcdTAwMWL85WCS4j35ycxcdTAwMTGdqSlcdTAwMDM9V7xcdTAwMWb1wYN7a/I7hP8g0PePcYnwgdZcdTAwMDDW0+xgTaV+SVx1MDAxN1x1MDAwNEElseGc2Plg+fLrTJiVxmvBXHUwMDExR1xurkPSR1x1MDAxMiBEbOElgj/qSLa5Rlx1MDAwZjuw0SxcdTAwMTmAL8NDSHYww6NQzypcdTAwMGZcYmtccvmNfFx1MDAxZiSZN0E5XHUwMDE1ndDBfaWMKFGJXHUwMDE4R181eDK2uUY0W8Xe7iBQXHUwMDA2or9Ap1A0Sd3kfuOoSVx1MDAwNp5cdTAwMTX2QVHPbeJcdTAwMGXS9lx1MDAwMpdcdTAwMTKWXHUwMDE0wFx1MDAwNU583IalIcF6cJlNjkJR76+yY4zyXFx9de3ruVx1MDAxZLV8f7lcXD1Zet5ozVx1MDAxN+THXGa3SL0+1WhdM+KhXHUwMDE0hCdEfFx1MDAwMvpbXHUwMDFiNFx1MDAxMKBccpKO+KnWaGp2XHUwMDFiQk+4XHUwMDAw+ID6O8KAUzTLIJ3UZk/cjdybvmp1QSZbe/9cdTAwMGLTeb8uYlx1MDAxOSrimeyGlmezgUNxqTJvjOKxoFaWzcqOt1x1MDAwN5Xy2W2xvtk435tBJpO+jLVikCtcdTAwMDVcdTAwMTNcYrGJMUL8PaCELKqlQfTAmVNk8IVFYYgtqD9cdTAwMTjWXHUwMDE2MYbtl3Fh4E1gjFxycVRcdTAwMTDRTJ+MUzSPXZrBbbszS294XHUwMDFm/F179fxKPVx1MDAxZa3Jg3InbFdWxz9cdTAwMDKWYyhMXHUwMDE2nplcdTAwMDSPoLNcYqBcdTAwMTGpXCI0gj9cdTAwMWREbkheXHUwMDBiT5lTgbcxVvTd2IlcIqnfyjAoqJJdc6qA8JRBTVx1MDAwMVx1MDAxNqiXXHUwMDAwXFxQ3pDR5sbmXHUwMDAyqkK2pkSX6Vx1MDAwNErKXHUwMDAwJ8CJumOEOmVhqLRZXHUwMDAy4ShNXHUwMDA1+SnIl1a6MVx1MDAwMUZcdTAwMTZcdTAwMDeiXHUwMDE40lx1MDAwZu08TSBQY7AgXHUwMDBl1KBZt73UXHUwMDBlR15bS6OsinujXHUwMDFmXHUwMDBiKERiuO1eU1x1MDAwMeFcdTAwMTSpZY2jlnjqx1xiISpcbui3vVx1MDAwM1hcdTAwMTBcdTAwMDN2XHUwMDE4XFzgg8PAX4hcdTAwMTQ+ZPg+xoLYumjF7t9EKVx1MDAxMHPwQ1x1MDAxZlx1MDAwNWJyK1OlgY4x1KaVlSq26Lh79JP94bVQs6qr0nlcdTAwMDb8TDWlXvH4uJK3gjrDvLZcYjwtxbLT01RLXHUwMDEzXHUwMDE1lPVUXGaqiHF6XHUwMDEwXHS0g1NBtO0jXHUwMDE2LVx1MDAxNz/Z61x1MDAxNZTSR1XGyNVZxUnt5qHYWnxcdTAwMTLFg8OXcHtcIndvuJybLZw0vFo0hpNcboJRr1xmXCJcZqW8JZaxWPa7x7dsqITHRIDKKddfhThZXHUwMDEyaOKmJq42K1xmXHJcdTAwMTFcdTAwMDPSUH7AtlxmTSyIXGI/NTFcYvL+bU043zVViIZcYl/ja3on4P28XHUwMDEyyUJ9mFKKq7mQ2sHj5SfRXHJngEnAvpy4XHUwMDFlrU52kfFcdTAwMDD9NVx1MDAwNFxitaacQS4nXiEwXHUwMDE4XHUwMDFjoGg8XHUwMDEwXHUwMDFiQuxcZj5ar0/VJ4TOZHbOXlxifFx1MDAwMzuOxVx1MDAxZqy3s27xoZeMZDzAvXFcdTAwMWZSh9WCoJtBmGNpLICf3sA9K1x1MDAxOUBcdTAwMTaguVxyUnlcdTAwMTlLMr1cdTAwMWL8WD/x+0xtXHUwMDE3XHUwMDFk7GV0XGb8kdhsqdUuV/+nuV9tdlpZgzl+XHUwMDE2o+VglzRGy9jSSFjth6X5WFx1MDAwYlx1MDAwNOfZ/HRwJDQhfvTMbXmrfVX1l1x1MDAwYlx1MDAwZi2/tuTm9u/bV7VGhvqW261Op3Bd6pavx1bhSqlz/bNcdTAwMWN1SVx1MDAxZEZcZslcdTAwMTDTwlxcadJTkzx2I1ZeLYkkXHUwMDA2sZdKNCNO/NiNxnNK7elQxcKfXHUwMDBmalx1MDAwM+Jwq0KGqMFXJlxu4XozvCmJKzJmZv5+6ulxdP1DXklIkynXXG5PXHUwMDEwfnCMhO3dUqW0w62tLV1cdTAwMTd3zs5KutnayOr2/Vx1MDAxObmeuGuyXHUwMDA2sYhcdTAwMDVIXHUwMDAzPqNcdTAwMWGE1MwoTqdcdTAwMTJGUepcctKm3PSiXHUwMDEx6Vx1MDAxNVx1MDAwMyhxVG9hNbeDopGBiVx1MDAwM63o1OpcdTAwMWaUOCje3dXhaLpcdTAwMTDYb8vt0t31t1Kz8m2xUutm+qopXHKRXHUwMDFhbSdTXHUwMDFmpyDi6fv05DcngZDHSP8tqt3r48WSK1x1MDAxZVVXXHUwMDE2b29Wzl5cdTAwMWGNLHas2dJk7Zi0lHhFQOBkqk/VXHUwMDA3Slx1MDAwMFwiTFx1MDAwZlx1MDAwMP9cYvanyIBcdTAwMThcdTAwMWNzREVcdTAwMDH/ZIRybtDpi1xmRGihg+JwTyHIviPGXHUwMDAw78VVLlx1MDAwMeL+/MND80q5neuz3YuOOJzf81x1MDAxN+o3XHUwMDFjME7MXeVhsexTRkGkS/D2I0u6Ulx1MDAwZmLuauH1sj2/vmHnl0J56/X0U0i6VVxm2MZcbip9cC5Fdlx1MDAxNbiH/Fx0XHUwMDE5nUByOcVMt2CcS0NcdTAwMTVcdTAwMTNSYDuDXHUwMDFjVmBUb1x1MDAxOKJcImTKs/U5MO+dTp5PTFvQZ1x1MDAxYq7lyH/MS/b1heFhXHUwMDA3MVx1MDAwZWi72dq93FNn5ijUl1x1MDAwZm6b1f3KwnrhsyhcdTAwMDDnwGaBXHUwMDFhXaROXHUwMDFl9lx1MDAwNKeIwZOORfGIlJpeKclENEAghiRmroyzny9cdTAwMTVIqoDQmSpAZdSUTFx1MDAxYr33Q3fcXFwtrHTt0vP1y/qrLZ00XHUwMDE29axn05zRzFx1MDAwN9hMzyOqtJCUfitcdTAwMTlNb0aES2fXbnrMn1x1MDAxM5F+9SPa+Vx1MDAxMv6c0m9lM+VcdTAwMWW/X1NcdTAwMTHh6HLf3j9bX6iu1bRcXGheby6p56Vuq/VcdTAwMTksv1x1MDAxM55cdE+kcsStqdOjVEjejPDU66BtcEPIaIJcdTAwMTNlOVT2/6NkKv7ycmDhN2JcckGE0lpRP8pcdTAwMDCAr1x1MDAxMcxDJ1x1MDAxMHhcdCqx5f1cdTAwMWTBXHUwMDE2QVxufFNu09NnRPix2/5HV3hcdTAwMGJLdCtEPI5/XHUwMDAwcCfOkzjj1ItcdTAwMTOk917BKieafzPXXHUwMDAzflx1MDAxM1o7o6goiSdZvdIylbdcXLag/liOSLpcdTAwMDJcXKajXHUwMDBl2UlxXHUwMDE3iPg8wLSlglx1MDAxYlx1MDAxMONcdTAwMWN3Pd/u7V+urm1uPCzNvy7WQq1iXHUwMDBmso67ZsxQWVx1MDAxYXhcdTAwMWIoU00jWlJcdTAwMTA1OMaDwq2wWmCxIbWgP2OoIE7UdVx1MDAwNSUm5vlBXHUwMDBlWlx1MDAxMLNcdTAwMWH1zELcqIg+XGYwVI663mRurfOXoZphQ+WYXHUwMDBlgVqNgqFcdTAwMTZzYcb7uGdcXHOhaE41oi1jU82UxIpJ9KuwJIjm85s9M1x1MDAwNfNtuT6ZXHUwMDFj0zLlXHUwMDA0XHUwMDEwMrNa0lx1MDAxYWHHa1x1MDAxZW9try6VnyrrO92DlaM5XHUwMDE3Ls4v57NySLNcdTAwMTNAOMcoLaxtxFvkequ85Y9cdTAwMDJT1J0jXHUwMDA1fFx1MDAwM59cIm3CRFx1MDAwMlxia4hTIZ/R7J9cdTAwMWVAhFic2J86osGDjo9+jn2my9vVouZFVdtcdTAwMTWnm8eLO5t3JzMv91x1MDAxMTu/pC5zXHUwMDBlo5NyyXDY2lma6Ul8XCLZXHUwMDFl2Vx1MDAwMi1Vwk9IvaWTcki8XG4+zmTdXHUwMDEzeqp6XG5RUyBRxnDh+otcdTAwMGVhXHUwMDFjqcUvXGYuOvxyyp/BKWdcdFx1MDAwMv1cdTAwMTT6ZWBMJ5hZgKxi9r6PfFCbQLy2o1x1MDAwM3R/93Bxe1Z+UKbEO/VcdTAwMWK7u3ZwP4PT01L1aFopJlx1MDAxY5UpWo6YJMXyzfFgaPwljKLxU+wgXHUwMDE3TjNcdTAwMWJRQFia+TuwVUAqhvjRQkh0kKa//NjAiVx1MDAxM1n8VOpYplZ9/Cgr56WH/Zf11fvHpafVxdb62WXp91RcdTAwMWb/XHUwMDFlqzLVKlxcakJcdTAwMTIyuk+UgLAm0eZsiCDBXHUwMDA2yk1YRVOZ8pajxipHXHUwMDEzdqRccsHSgUty6pi1NFx1MDAwNd1KRVx1MDAwM8xULjNLQZjArFFBOu2IpTbZxtUn8WPavex6pyyrp3GLPOnRyEZvsPjOvtFcdTAwMTOMRs5cdTAwMTJHOpcqhfqtYUJcdTAwMDFM4+lcdTAwMDJW8ClOiVx1MDAxMcR7XHUwMDEwqFOP6NPdSHVORmqAfy5cdTAwMDbjnVlcdTAwMDcyXHUwMDFmKnOaxzdpx6RqosW3OW47XeiU3sskSpqGsCUoYTKDXHUwMDE16YQzyo9R0Vx1MDAxNOY37s41X7FH63tXhUJzvnu3kXXIl9K6n9fV3uPu6Wquplx1MDAxYaqmJVwiLFx1MDAxYclgjEmecnjPXHUwMDE5NTBcdTAwMDCtSZrbOL1Gco94ifiXXHUwMDAzXGa71vGZTL0pJJlv+TtUkVQwLOMjXGJcdTAwMDeHKoe3pf319cb82crDY0mWnlx1MDAwZi5cdTAwMWV0nNf7e+dmW6m229k8WtitPlx1MDAxZt17+XRcdTAwMWF+bSxjYVx1MDAxOGNpiimF6tJnp6joRsJXjSH+NetcdTAwMGau63x9d55fvTZ4+7w1v+p/p/iP4KpcdTAwMTCGs2BcdTAwMTDiXHUwMDFhhdgnnpV+XHUwMDBi1TlcdTAwMGJOXCKKp5pdOcVmXmJs4DRcZtZcdTAwMWLnvVx1MDAxY+irXHUwMDAy84iYqFXRXHUwMDAw1UjVXHUwMDFmrEeF6krkJdCfT7bmS+e3XHUwMDBil0f3j+unpe7Nml2em45cdTAwMDJMmlx1MDAwM2psvZgtND69XHUwMDE4P6rFXGJcdTAwMWNiQUR6PJE3XHUwMDE31KMgPTeCXHUwMDA23MKY5y3mWbCKhnvS/GHjfZLjT1x1MDAxMblcYs3/lID1xuWP1SFcdTAwMWZD1oTT5qzmSVTPOLFXOVx1MDAwNMnaK2N9bndcdTAwMWSiXHUwMDAwoVx1MDAwM+JcdTAwMDQraFxmbLK5zjJFM4RpXGYhdlx1MDAwZfCft5pgNMbF0ThcIk1VvTpxdulcdTAwMTmRJzpNXHUwMDFjjsT2kM/vJ5nCYzBcdTAwMWM30Fx1MDAxYqlSXHUwMDA0f1x1MDAwZVx1MDAwZZXjppJcdTAwMDOjKUj5QVxmXHJcdTAwMTT1VlFcdTAwMTkmwqLkapHxet+7ULl9julnXHUwMDE3XHUwMDEyT1ZoXCLiooDIXHUwMDEyq8VcYmyGmnGahG05kSpcdTAwMDJn29RyUkqDzcOywnHnXHUwMDBiXG5N83N4XHUwMDA2VHZB+ahe1vHHVemIalx1MDAxNuFcdTAwMWOPZp/mrof41FCMwYlcdTAwMTFcdTAwMWQykZC85L3w+dScWI5yOdLSXGZcInyl5LSpglx1MDAwMTz1zkV9ok6H/Fx1MDAwMFXQeHolifPDa4htUpJcdTAwMGLEuFx1MDAwMoXRUGdJuVx1MDAxN50/XHUwMDAzXHUwMDFj3lxuW0BcdTAwMWPuhOI2OVxmsSBoci1H5KVcdTAwMTFFa0S9I8gyUZRB8PF1LO556jTOXHUwMDEwXHSRI4kh1lx1MDAxMp4/VJzGNZK8Ylx1MDAwM4JcdTAwMTPZXHT3P/mN6UtcdK6Izlx1MDAwMNJcIvEsk1xcdZT3ilxig2kmooBCjrJgQmpTSYPoXHUwMDAw8t1cdI+gvylcdTAwMWSVybHxXHUwMDBlXHUwMDAySoBWeWhcdTAwMWWMZD5hKlxmXHUwMDAyjWWnkn9Jn0o+lKT1kWGEMfRD1yukzKNcdPlcdTAwMGJcdTAwMWFmXHUwMDA1zc/kdJBcdTAwMGL7J/6VfdXlz3grpDyESmpcdPFPQ+Vo+Jvmudae+FXhgDxNjYWCQCxcdTAwMTKLeUajlCPyWHxl6Ucg4mEuSJhmmiaraPRtcsGUW87PgU2Fzlx1MDAxNVx1MDAxNiu7NVxcOlx1MDAxODJr/Oj9XGbXrati63mhaTdcdTAwMWbWT3dcdTAwMWVfasf2Nos0bXaAvmJ4XGbcqah9Q6W6Sj3xXHRcdTAwMDRAb6/JPU/xKFx1MDAxYVx1MDAxNtCYQNNjhZNGhFx1MDAwMUjfUOJcblx1MDAwNlx1MDAxMlx1MDAwZV2QXHUwMDAx7q/kXHUwMDA2doB3jlx1MDAxM5p8If1/XG7ST1x1MDAxOdAk81x1MDAxNyBS3Fx1MDAwMdj82j3PYFx1MDAwMYCWIY08uFx1MDAxNGaQjMbGIybFL4JFXHUwMDFjIXBcdTAwMTiyWFxut7t8OJhynTLhmpJBSsjfXHUwMDFjMb8rJ2GoqatcdTAwMWPRQVx1MDAwMvymPHE+XHUwMDA3m/BE8uFcdTAwMDCptKWKJ+GSu5NEJ1x1MDAwMlhcdTAwMDRYx6HHectJTSVcdTAwMDPceMKChiudOvtgXHUwMDFlxlx1MDAwMreVU3GKzse+kjhQYUTw671EXFyVXHUwMDA0l0SRQlXNXHUwMDAwToYwdX7JKD5BcuWJRYQ4V0RyPUVcdTAwMTQpgYYoeU/QLp/4nTMl3ijOgc518u5JR9ypVJBDTlx1MDAxZoFKrqxIYuyTNFx1MDAwYp5cYp+Awlx1MDAxM6GIwi/DXCKQJMBeifAmV1iG3z5FgY/UVLakKOuYXHUwMDFmiVx1MDAwNKYooKLBPVx1MDAwZeKQXGa8qOBcdTAwMTbgXHUwMDBiRt0gOlQj1O9cdTAwMTK9n3X4/Vx1MDAxMFx1MDAwNS+lSGAsTWFPhLCj78pHXGK8XHUwMDA084rIii3lj7xJXHUwMDA2StiepME2+JV4XHUwMDEzosZ8M5BcdTAwMTL+1O7wXHUwMDE1qX+MONVcdTAwMTEq5YpKXCJcYieC18RypIY0oFx1MDAxOHGNXHUwMDAx2sz9rpZBXHUwMDBlXHUwMDAy8Vxc6oAnnGRi7HO9uVx1MDAwMDBp1UJcdTAwMTJQjr9cXGBcdTAwMTKYXHUwMDE5/t1cdTAwMTA3sUyqhVx1MDAwZYzMllx1MDAwNFxullx1MDAxY1x1MDAxN0eZNkCUY/BcdTAwMTbAqLDjyfSBxq1cYnjeNFx1MDAxNdHS9fz1gKKg29pcdTAwMGKSLphLk5bjuKD4XHUwMDExoi3agtIw8NzjL0jfz1x0clx1MDAwMYqG3UHZXHUwMDFk9fskXHUwMDBmpGn4tFY07D4grkOAN8KJtCZcIlx1MDAxZiqedlShmCxsV1x1MDAxNF32kiku/+tKw5RcIuOEv/FcXLyXKStlXHUwMDAyol+4XHUwMDEyYlx1MDAwMVx1MDAxYSH6gFHGnaZcdTAwMTJKXCK7RlifkD5Y0fA26YLC31x1MDAxMWiwaL14wFx1MDAxZuOai9aDmYK1c1x1MDAwMvKEXHUwMDAwaYR0XHUwMDEzjVKWsO+IjDiRuSSXg3unxCQlTaKgbIT1LCPpo4JRXHUwMDFhlZh8vFHxsItGo0DkdT5Je0FS64SHziprXHUwMDE1ed6E9HlIkiGGeVx1MDAxOFqElzx/WEi/l05cIlxmgYeB61wiSiC5UVhjoU/kX1x1MDAxMDhCXFy5TG4vXHUwMDFlq6qQf/fSn0hcYotlNkjYVsRAxIEm8zNcdTAwMWJDbYtigkPqYK244S64/JvXXHUwMDA3wJK4XHUwMDE2z8dcdTAwMDC3wf5JPDKRq2s/XHUwMDE1SGfVdsBvZFx1MDAwNtI0ekFcdTAwMTMl7+g1bYe311x1MDAxYrXOvVtcXJs7P62dbKjrucfrXHUwMDE5XHUwMDBmpGFcdTAwMWKYhoRIyiBykSruUFx1MDAxNv6BuuKoJdrr6TGsXHRKJSqayFx1MDAwMDtEdY1cdTAwMDOOjFx1MDAwN7DYuKBcdTAwMWNcdTAwMTH85cTN96XO4k2x+7z5fFdfPJg/W1q4K8x/9iPi3q4+UiWy2uxWr9pcdTAwMTFcdTAwMDXNR0tFPsp+M/BXT7kyXHUwMDA0TjW7elXTsMdYOjyfPvfgZfmifrV0Plc/8NvPLctrxawq9okr+qAqrlx1MDAxMdRcXFx1MDAxM60osVRaXHUwMDFhXHUwMDFiltJzXHUwMDAziG+EoMhcdTAwMTGAb4qVIeJtwpuiY22FZ1wiXHUwMDA3sLBccnnP3yQ3NKEp0bA/WO9cdTAwMWbqlZX1x05j/mBvfXvnrvx8fnV0XHUwMDFi1/v1Zb0q1lx1MDAwZXdcdTAwMTZcdTAwMTeM2KjOi5VcdTAwMTdeLP1ivYdhjU1cbplWXHUwMDFieMyf9019XHUwMDA1RqBDq9FLQypcdTAwMGZcdTAwMGK2vLVWu7xZvWqtbV9cdTAwMTe92Nj+nfI/iqPzwKdcdTAwMTaQRFpPg9rSRO9A13RCQHhcdTAwMGZcdTAwMGVoit1LVlx1MDAwMuRcdTAwMDfK5Ulcbrj8gOptzqxEQFxylaTYNs6H26tccqHB4vmDZE5cdTAwMWW37Upn43z57L7wunR9eT93d/v42TUg9mj+6NRwpqREn+6TkTFB8fBux/hcdTAwMDFSn780zlx1MDAwNjfW4KmHXTtv5172XHUwMDBluqvldvd+bXH99XjmXHJcdTAwMDZcclx1MDAwZpWBJnxIZdOTcj1cdTAwMWSXS2U00dJcdTAwMWI1hDLiZ12mIX5HTkRcdTAwMDCKXHUwMDA2YVx1MDAwZSomU3Tqy1x1MDAxZPVlKpru2+8x4fhcdTAwMTFsZZDN/+H24qfUIJsh0VM/9OhO89i1XHUwMDFmb85cdTAwMWXqW/fLL829O3/TtkdZw9dmRVx1MDAwNyxcdTAwMTHiwshQflx1MDAxN6qQYlxmXG40XHUwMDA0h8MweUE86lOkRiRcbmEtudJwzVx0isZecKiINsNKqSMmx0Fz0iNuXGaiV/zSgfF0IGSTx1x1MDAxMYVcdPfKjZ4k6Z6rpdZTcfl27qlaM/YpdGqFWXdcdTAwMDWWXHUwMDEyn4qmY+JmKJ7yXHUwMDA0TjFcdTAwMTdcZqc6XHUwMDA07+1cdTAwMTS1gHhKPVx1MDAxNfDrQDRFZkDsZDhTQVx1MDAwNeLzXHUwMDEzXsbHXHUwMDE5vY9no7TWl1x1MDAwZYyeI7Q8M3OghFxiVojRfcDa9c7yS7d51tns2oO6ssuNTiWL7npWhN9Yg8hIkYRcdTAwMDdnTFx1MDAxOMB07TRCXHUwMDExXHUwMDFhkECNsVOTf5qqRilCjceOXY1IdK1cdTAwMTSl201ubc2OOSretVx1MDAxYdf3d+JUnq7dzpVrauGzS3xvV1x1MDAxZslcdTAwMTFutprESE0hVOLa9FOEg37z9OmwRTZLqlx1MDAxNFFF7Fx1MDAxOFxmL4+lk7mL+935m4eL+fnGizgtbfmsXHUwMDFj4WxNbFx1MDAxMIhpmCNcYiWok934ZJu7d1x1MDAxY85cdTAwMTBvgoshqp3p+Ts60KZcdTAwMWFgJ5TXXlxm5HnJndhcdTAwMTCVk5qJdIBOmsCF5lx1MDAwN8QysdNcdTAwMWGxK7JZ3iWwm3bCjIHfQqdysLXyUj9fkE9i5ejy2p41Zn+QkFSc0TEunXGpYFPMXHJCcEG8ataJ4G1s+ubkXHUwMDFiwzhzXHUwMDE2oTpcdTAwMWMmTVx1MDAxMVFcdTAwMDOSf0JaRkUm0DGuuHJxXHJ7XHUwMDFmsUvu1pnPRd6wftk8Xinfrc7xu/mF6nZ1fXXxoDhcdTAwMTZ5gyPu5nFcdTAwMTQm9lx1MDAxYyc7YjfiWdFcdTAwMTRcdTAwMWFcdTAwMDGHUO2vXHUwMDFlMKONnrWThlx1MDAxZTQ1TPm+XHUwMDFi+2fQRmTKNP1cdTAwMTQs7pSiXHUwMDEyXG4oXHUwMDFlXHUwMDE1XHUwMDA25Zf+YTlJw0m8XHUwMDE1UfotuV6/evRcdTAwMTb8K/7vcYF+dr7TeUlcdTAwMTVGfPRcdTAwMDPCwaL+ISOZnog0TSNJSVx1MDAxNGs8XHKFJuLRNNInXHUwMDBlXaBcdTAwMDJPhyVcYjCnN6vJekZbkLBxb1B/XHUwMDE0pE/j2eDKJjGZ6eNcdTAwMDCdulx1MDAwMT9koD5cdTAwMDTQl9u1u7vqtFx1MDAwNq3lePo0Zu/bzFiA/a9cdTAwMWb24Hvp7m6/i7v6bqW/P9aqT3NcdTAwMDPoSy+jXHUwMDFmciCRqpNWVSOX9u+//v3/McPRziJ9 + + + + + Edge PCHTTPAutomation ServerWeb BrowserREST APIRobotForceSensorApplication Graph and EditorCameraIntegrationMonitoringGripper \ No newline at end of file From ec8a4f71181970ba7a283d3091e5420f77cd7177 Mon Sep 17 00:00:00 2001 From: Enrico Eberhard Date: Fri, 18 Sep 2026 15:28:27 +0200 Subject: [PATCH 10/13] feat: remove references to AICA in core v5 docs --- docs/core/examples.md | 4 +- .../examples/core-components/_category_.json | 2 +- .../examples/core-components/colliders.md | 10 +-- .../core-components/point-attractor.md | 4 +- .../signal-interoperability.md | 22 +++--- .../examples/core-controllers/_category_.json | 2 +- .../examples/core-controllers/jtc-example.md | 2 +- docs/core/examples/guides/_category_.json | 2 +- .../examples/guides/abb-hardware-interface.md | 24 +++---- .../examples/guides/application-frames.md | 8 +-- .../examples/guides/camera-calibration.md | 7 +- docs/core/examples/guides/camera-streamer.md | 4 +- docs/core/examples/guides/editor-example.md | 2 +- .../guides/fanuc-hardware-interface.md | 16 ++--- docs/core/examples/guides/fiducial-markers.md | 4 +- docs/core/examples/guides/jtc-guide.md | 18 ++--- .../examples/guides/mock-hardware-example.md | 18 ++--- docs/core/examples/guides/orbbec-component.md | 12 ++-- .../examples/guides/realsense-component.md | 8 +-- docs/core/examples/guides/timer-example.md | 10 +-- .../examples/guides/ur-harware-interface.md | 50 ++++++------- docs/core/examples/guides/ur-sim-guide.md | 14 ++-- docs/core/examples/guides/yolo-example.md | 42 +++++------ .../examples/nvidia-isaac/_category_.json | 2 +- .../nvidia-isaac/isaaclab-aica-bridge.md | 70 +++++++++---------- .../omnigraph-aica-bridge-control.md | 44 ++++++------ .../omnigraph-aica-bridge-visualization.md | 62 ++++++++-------- docs/core/studio.md | 30 ++++---- docs/core/studio/editor.md | 2 +- docs/core/studio/graph.mdx | 6 +- docs/core/studio/profiles-and-scopes.md | 37 +++++----- docs/core/studio/right-panel-tabs.mdx | 6 +- 32 files changed, 274 insertions(+), 270 deletions(-) diff --git a/docs/core/examples.md b/docs/core/examples.md index 410ca0a06..bbb609f36 100644 --- a/docs/core/examples.md +++ b/docs/core/examples.md @@ -4,5 +4,5 @@ title: Examples # Examples -Explore a collection of practical examples below to help you get started with AICA. These samples demonstrate common use -cases, integration patterns, and best practices, making it easier to learn and apply AICA System in your own projects. +Explore a collection of practical examples below to help you get started. These samples demonstrate common use +cases, integration patterns, and best practices, making it easier to learn and apply the System in your own projects. diff --git a/docs/core/examples/core-components/_category_.json b/docs/core/examples/core-components/_category_.json index 60c08378d..74cf88ba6 100644 --- a/docs/core/examples/core-components/_category_.json +++ b/docs/core/examples/core-components/_category_.json @@ -3,6 +3,6 @@ "position": 2, "link": { "type": "generated-index", - "description": "This section contains various application examples using the AICA Core Components." + "description": "This section contains various application examples using the Core Components." } } diff --git a/docs/core/examples/core-components/colliders.md b/docs/core/examples/core-components/colliders.md index ab9d1634a..109a352be 100644 --- a/docs/core/examples/core-components/colliders.md +++ b/docs/core/examples/core-components/colliders.md @@ -10,7 +10,7 @@ import colliderInterfaces from './assets/collider-interfaces.png' # Colliders -The core components in AICA Studio contain several so-called _Collider_ components that detect whether a specific target +The core components in Studio contain several so-called _Collider_ components that detect whether a specific target pose is inside or outside a virtual geometric object defined around a center pose. This functionality is crucial for many robotic applications because it provides the ability to: @@ -53,8 +53,8 @@ default, this is when the z position of the target pose is negative in the coord :::note -Until collider visualizations are natively integrated in AICA Studio, these examples use RViz to visualize and move the -collision targets in space. RViz can be started directly from AICA Launcher. +Until collider visualizations are natively integrated in Studio, these examples use RViz to visualize and move the +collision targets in space. RViz can be started directly from Launcher. @@ -70,7 +70,7 @@ is parametrized to define a box of dimensions 10 by 20 by 5 centimeters around t Box Collider -Start the application from AICA Studio, then go to RViz. Add the interactive marker frame and the geometric object +Start the application from Studio, then go to RViz. Add the interactive marker frame and the geometric object marker as shown below. Observe how moving the interactive marker triggers the predicates of the collider component to update when the target pose enters and exits the box. @@ -211,7 +211,7 @@ This behavior can be inverted with the "Flip normal" parameter. The direction of ::: The example below shows an application that is stopped entirely if the robot end-effector collides with the plane. This -demonstrates how soft safety mechanisms can be implemented in AICA Studio. As soon as the target pose, which is the +demonstrates how soft safety mechanisms can be implemented in Studio. As soon as the target pose, which is the end-effector in this case, has a negative z coordinate relative to the center pose, the _in collision_ predicate fires and the application is stopped immediately. diff --git a/docs/core/examples/core-components/point-attractor.md b/docs/core/examples/core-components/point-attractor.md index 8a165c91e..971e4b479 100644 --- a/docs/core/examples/core-components/point-attractor.md +++ b/docs/core/examples/core-components/point-attractor.md @@ -9,7 +9,7 @@ import pointAttractorExample from './assets/point-attractor-example.webm' # Point Attractors This page shows how Dynamical Systems (DS), and in particular Point Attractor components, can be used to generate -dynamic motions in AICA Studio. Point Attractor DS are valuable in robotics because they provide a simple and robust way +dynamic motions in Studio. Point Attractor DS are valuable in robotics because they provide a simple and robust way to guide a robot toward a specific target. By continuously generating motion commands that drive to the attractor, these components enable reaching, positioning, and interaction tasks, making them useful for applications such as pick-and-place, assembly, and human-robot collaboration. @@ -80,7 +80,7 @@ To set up this example, follow the steps below. of the `Point Attractor` with the `Command` input of the controller. 5. Finally, make sure to load all components on start by creating the necessary event edges. -Start the application from AICA Studio, then switch to the 3D view. Drag the frame around and observe how the robot is +Start the application from Studio, then switch to the 3D view. Drag the frame around and observe how the robot is dynamically attracted towards the frame.
diff --git a/docs/core/examples/core-components/signal-interoperability.md b/docs/core/examples/core-components/signal-interoperability.md index f95d98d42..a15b7fe83 100644 --- a/docs/core/examples/core-components/signal-interoperability.md +++ b/docs/core/examples/core-components/signal-interoperability.md @@ -10,19 +10,19 @@ import signalRosPose from './assets/signal-ros-pose.png' # Signal interoperability -As described in the [signals page](/docs/concepts/building-blocks/signals), AICA signals make it easy to exchange +As described in the [signals page](/docs/concepts/building-blocks/signals), signals make it easy to exchange Cartesian and joint state variables in an internally consistent way. In components, state signals are automatically converted into smart data classes that provide useful functions for conversions, transformations and other manipulations. Even though there is no official standard, there are a few signal types that are very commonly used in ROS. For ease of -interoperability, AICA Core includes several components that translate AICA signals to common ROS messages and back. -These components can be especially valuable when porting existing ROS nodes into AICA Studio using the Component SDK or -when communicating with ROS nodes outside the AICA System. +interoperability, Core includes several components that translate signals to common ROS messages and back. +These components can be especially valuable when porting existing ROS nodes into Studio using the Component SDK or +when communicating with ROS nodes outside the System. -## AICA signals to common ROS messages +## signals to common ROS messages -AICA state signals carrying Cartesian or joint space information can be converted into common ROS message types using +State signals carrying Cartesian or joint space information can be converted into common ROS message types using the following components: | Component name | Input signal type | Output message type | @@ -32,9 +32,9 @@ the following components: | Cartesian Signal to Wrench Stamped Message | Cartesian state or wrench | `geometry_msgs::msg::WrenchStamped` | | Joint Signal To Joint State Message | Joint state, positions, velocities or torques | `sensor_msgs::msg::JointState` | -## Common ROS messages to AICA signals +## Common ROS messages to signals -Common ROS message types carrying Cartesian or joint space information can be converted back into AICA state signals +Common ROS message types carrying Cartesian or joint space information can be converted back into state signals using the following components: | Component name | Input message type | Output signal type | @@ -49,7 +49,7 @@ using the following components: All of these components are single-input single-output blocks. Each time a new message is received, it is translated and immediately published. For that reason, the `rate` parameter doesn't affect the behavior of these components. -## AICA Signal to ROS message example +## Signal to ROS message example This example uses the `Joint Signal To Joint State Message` component to translate the joint state output from the hardware interface to a `sensor_msgs::msg::JointState` message and the `Cartesian Signal to Pose Stamped Message` @@ -193,7 +193,7 @@ With content: -## ROS message to AICA Signal example +## ROS message to Signal example Mirroring the first example, the following application uses the `Wrench Stamped Message To Cartesian Signal` component to translate a `geometry_msgs::msg::WrenchStamped` from some custom component to a Cartesian signal that is connected to @@ -202,7 +202,7 @@ the force controller of the hardware interface. :::note The custom component is just an example placeholder for any implementation that has a ROS standard message output, which -might occur when porting existing ROS nodes into AICA Studio using the AICA SDK. +might occur when porting existing ROS nodes into Studio using the SDK. ::: diff --git a/docs/core/examples/core-controllers/_category_.json b/docs/core/examples/core-controllers/_category_.json index d8dc4169c..880a9a943 100644 --- a/docs/core/examples/core-controllers/_category_.json +++ b/docs/core/examples/core-controllers/_category_.json @@ -3,6 +3,6 @@ "position": 3, "link": { "type": "generated-index", - "description": "This section contains various application examples using the AICA Core Controllers." + "description": "This section contains various application examples using the Core Controllers." } } diff --git a/docs/core/examples/core-controllers/jtc-example.md b/docs/core/examples/core-controllers/jtc-example.md index 133861148..597366572 100644 --- a/docs/core/examples/core-controllers/jtc-example.md +++ b/docs/core/examples/core-controllers/jtc-example.md @@ -19,7 +19,7 @@ Visit our learning platform AICAdemy for an interactive training module with a r ## Setting up the application -Launch AICA Studio and create a new application by pressing "Create new". +Launch Studio and create a new application by pressing "Create new". Copy the following YAML and generate the graph. diff --git a/docs/core/examples/guides/_category_.json b/docs/core/examples/guides/_category_.json index 7e16a3f92..99e8e63fc 100644 --- a/docs/core/examples/guides/_category_.json +++ b/docs/core/examples/guides/_category_.json @@ -3,6 +3,6 @@ "position": 1, "link": { "type": "generated-index", - "description": "This section contains step-by-step guides of various application examples using the AICA System." + "description": "This section contains step-by-step guides of various application examples using the System." } } diff --git a/docs/core/examples/guides/abb-hardware-interface.md b/docs/core/examples/guides/abb-hardware-interface.md index 2e153fb39..61182c064 100644 --- a/docs/core/examples/guides/abb-hardware-interface.md +++ b/docs/core/examples/guides/abb-hardware-interface.md @@ -18,17 +18,17 @@ import abbHIParameters from './assets/abb-hi-parameters.png' ABB offers a wide range of industrial articulated manipulators, from compact 6-axis robots for small-part handling and payloads of a few kilograms to heavy-duty models capable of lifting up to 800 kg. This guide provides instructions for -using ABB robots within the AICA System, focusing on connecting and configuring both simulated environments using +using ABB robots within the System, focusing on connecting and configuring both simulated environments using RobotStudio and real hardware setups. -To use the ABB collection, add `collections/abb` **v1.0.0 or higher** to your configuration in AICA Launcher, currently +To use the ABB collection, add `collections/abb` **v1.0.0 or higher** to your configuration in Launcher, currently supporting the following robot models out of the box: - IRB 1010 - IRB 6730-210/3.1 - GoFa CRB 15000-12/1.27 -Other robot models can be added on request. Reach out to the AICA support team for further information. +Other robot models can be added on request. Reach out to the support team for further information. ## General @@ -38,7 +38,7 @@ and features described below. :::warning -This collection supports RobotWare versions 7.X and above. For older versions, contact the AICA support team. +This collection supports RobotWare versions 7.X and above. For older versions, contact the support team. ::: @@ -58,7 +58,7 @@ EGM is an optional add-in and has to be purchased separately. ### Robot Web Services -The second ABB feature that AICA System utilizes to connect to the robot is Robot Web Services (RWS). RWS is a platform +The second ABB feature that the System utilizes to connect to the robot is Robot Web Services (RWS). RWS is a platform that enables developers to create applications that interact with the robot controller, using RESTful APIs that leverage the HTTPS protocol. The hardware interface uses RWS for auxiliary functionality, such as starting/stopping the program and the motors, and setting IOs. Setting up RWS on the simulator and on the actual robot requires slightly different @@ -114,12 +114,12 @@ Setting up a virtual workstation and controller can be achieved by following the
Additional options in the RobotStudio project.
-7. Disable the Windows firewall on the network where the PC running AICA Core is connected to. -8. Finally, the PC running AICA Core has to be whitelisted to communicate with RobotStudio. As explained +7. Disable the Windows firewall on the network to which the PC running Core is connected. +8. Finally, the PC running Core has to be whitelisted to communicate with RobotStudio. As explained [here](https://forums.robotstudio.com/discussion/12082/using-robotwebservices-to-access-a-remote-virtual-controller), create a file called `vcconf.xml` under `C:/Users//AppData/Roaming/ABB Industrial IT/Robotics IT/RobVC` with the content below. Replace `` in the path above with your Windows user and the IP address in the snippet below with - the IP of the PC running AICA Core (in this example 192.168.137.100). + the IP of the PC running Core (in this example 192.168.137.100). ```xml title="vcconf.xml" @@ -149,7 +149,7 @@ and then restart. After connecting to the robot, the controller should be configured to accept commands from an external device. 1. Navigate to the Controller tab > Configuration > Communication > UDP Unicast Device, and add a new UDPUC device (or - modify the existing one), configured as shown below. This is the PC running AICA Core, the external control device, + modify the existing one), configured as shown below. This is the PC running Core, the external control device, so the address should be set accordingly.
Controller configuration settings. @@ -171,7 +171,7 @@ After connecting to the robot, the controller should be configured to accept com ## RAPID module -The ABB hardware interface provided by AICA needs a matching RAPID module running on the robot to allow external control +The ABB hardware interface needs a matching RAPID module running on the robot to allow external control through EGM. Place the module below in the controller's home directory and upload it to the current task. :::warning @@ -380,7 +380,7 @@ UDP data exchange. ::: -Returning to AICA Studio and the hardware interface, it is now possible to define the parameters and connect to the +Returning to Studio and the hardware interface, it is now possible to define the parameters and connect to the robot. The majority of the hardware interface parameters enable connection to EGM and RWS:
@@ -400,7 +400,7 @@ robot. The majority of the hardware interface parameters enable connection to EG `AICA_EGM`, respectively. - Uc Device: The name of the UDPUC device configured above. -Before starting an application with an ABB hardware interface in AICA Studio, the motors and RAPID program on the robot +Before starting an application with an ABB hardware interface in Studio, the motors and RAPID program on the robot must be started manually through the teach pendant or RobotStudio. After that, running the application will connect to the robot and get information about the mechanical setup of the robot being used. diff --git a/docs/core/examples/guides/application-frames.md b/docs/core/examples/guides/application-frames.md index 4dffe23a7..30f926a26 100644 --- a/docs/core/examples/guides/application-frames.md +++ b/docs/core/examples/guides/application-frames.md @@ -7,9 +7,9 @@ import createFrame from './assets/create-frame.webm' import recordFrame from './assets/record-frame.webm' import editFrame from './assets/edit-frame.webm' -# Application Frames in AICA Studio +# Application Frames in Studio -This guide explains the various methods to create and modify application frames in AICA Studio. +This guide explains the various methods to create and modify application frames in Studio. :::tip @@ -17,10 +17,10 @@ If you haven't done so already, review the corresponding [concepts page](/docs/c ::: -There are two ways to access settings and functionality for application frames in AICA Studio, depending on where the 3D +There are two ways to access settings and functionality for application frames in Studio, depending on where the 3D scene lies: -- With the 3D scene on the main view of the AICA Studio editor, the options to create and record frames can be found +- With the 3D scene on the main view of the Studio editor, the options to create and record frames can be found under the **Scene** tab in the right panel. - With the 3D scene in the right panel, under **3D view**, the options can be found by clicking on the **Settings** button on the top left of the scene. diff --git a/docs/core/examples/guides/camera-calibration.md b/docs/core/examples/guides/camera-calibration.md index f0235cc91..dc2c27e1b 100644 --- a/docs/core/examples/guides/camera-calibration.md +++ b/docs/core/examples/guides/camera-calibration.md @@ -23,7 +23,7 @@ A calibration procedure allows you to determine your camera's intrinsic (focal l undistort images in real time, improving the spatial accuracy of detections and any downstream estimation tasks (e.g., pose reconstruction, depth reasoning, or robot alignment). -## Calibrate camera using AICA Studio and a checkerboard +## Calibrate camera using Studio and a checkerboard If you are using the `CameraStreamer` with a camera with an unknown calibration, we recommend to follow this guide with the code from the corresponding [`CameraStreamer` example](./camera-streamer.md). Cameras with first-party drivers (such @@ -75,7 +75,7 @@ where the calibration square sizes are in meters. :::warning -If you are using AICA's `CameraStreamer` example to produce the image stream, the above command should already work. If +If you are using the `CameraStreamer` example to produce the image stream, the above command should already work. If you are using your own node to stream images, you will likely need to specify which topic the calibrator needs to subscribe to by adding the `--calibration-topic YOUR_ROS_TOPIC` argument to the command above. @@ -95,8 +95,7 @@ Back at your host computer's filesystem, you will notice a `calibration` directo `docker-image/camera_calibration` that contains a compressed file. The file itself contains the images that were sampled along with a YAML file containing the camera calibration information. -Finally, move the YAML file into the `data` folder of your AICA configuration such that it becomes available from AICA -Studio. +Finally, move the YAML file into the `data` folder of your System configuration such that it becomes available from Studio.