From fde4ed8da8a0ef2627beb4cca6af374d1ca6d8d9 Mon Sep 17 00:00:00 2001 From: nixonwidjaja Date: Tue, 26 Sep 2023 02:05:19 +0800 Subject: [PATCH] Fix layout, convert to jekyll --- .github/workflows/docs.yml | 25 -- .gitignore | 1 - docs/.gitignore | 23 -- docs/AboutUs.md | 6 +- docs/Configuration.md | 6 +- docs/DevOps.md | 13 +- docs/DeveloperGuide.md | 114 ++++--- docs/Documentation.md | 28 +- docs/Gemfile | 10 + docs/Logging.md | 6 +- docs/SettingUp.md | 26 +- docs/Testing.md | 19 +- docs/UserGuide.md | 50 ++-- docs/_config.yml | 15 + docs/_data/projects.yml | 23 ++ docs/_includes/custom-head.html | 6 + docs/_includes/head.html | 12 + docs/_includes/header.html | 36 +++ docs/_layouts/alt-page.html | 14 + docs/_layouts/default.html | 18 ++ docs/_layouts/page.html | 14 + docs/_sass/minima/_base.scss | 295 +++++++++++++++++++ docs/_sass/minima/_layout.scss | 263 +++++++++++++++++ docs/_sass/minima/custom-mixins.scss | 21 ++ docs/_sass/minima/custom-styles.scss | 34 +++ docs/_sass/minima/custom-variables.scss | 76 +++++ docs/_sass/minima/initialize.scss | 51 ++++ docs/_sass/minima/skins/classic.scss | 84 ++++++ docs/_sass/minima/skins/solarized-dark.scss | 4 + docs/_sass/minima/skins/solarized.scss | 133 +++++++++ docs/assets/css/style.scss | 12 + docs/images/ArchitectureDiagram.png | Bin 0 -> 19887 bytes docs/images/ArchitectureSequenceDiagram.png | Bin 0 -> 15175 bytes docs/images/BetterModelClassDiagram.png | Bin 0 -> 14116 bytes docs/images/CommitActivityDiagram.png | Bin 0 -> 16227 bytes docs/images/ComponentManagers.png | Bin 0 -> 17411 bytes docs/images/DeleteSequenceDiagram.png | Bin 0 -> 28536 bytes docs/images/LogicClassDiagram.png | Bin 0 -> 36640 bytes docs/images/LogicStorageDIP.png | Bin 0 -> 5808 bytes docs/images/ModelClassDiagram.png | Bin 0 -> 27204 bytes docs/images/ParserClasses.png | Bin 0 -> 29478 bytes docs/images/StorageClassDiagram.png | Bin 0 -> 29426 bytes docs/images/UiClassDiagram.png | Bin 0 -> 48363 bytes docs/images/UndoRedoState0.png | Bin 0 -> 6619 bytes docs/images/UndoRedoState1.png | Bin 0 -> 7454 bytes docs/images/UndoRedoState2.png | Bin 0 -> 7855 bytes docs/images/UndoRedoState3.png | Bin 0 -> 7588 bytes docs/images/UndoRedoState4.png | Bin 0 -> 7605 bytes docs/images/UndoRedoState5.png | Bin 0 -> 9427 bytes docs/images/UndoSequenceDiagram.png | Bin 0 -> 27508 bytes docs/images/tracing/LogicSequenceDiagram.png | Bin 0 -> 16688 bytes docs/index.md | 6 +- docs/team/johndoe.md | 4 +- docs/tutorials/AddRemark.md | 49 ++- docs/tutorials/RemovingFields.md | 23 +- docs/tutorials/TracingCode.md | 76 +++-- 56 files changed, 1309 insertions(+), 287 deletions(-) delete mode 100644 .github/workflows/docs.yml delete mode 100644 docs/.gitignore create mode 100644 docs/Gemfile create mode 100644 docs/_config.yml create mode 100644 docs/_data/projects.yml create mode 100644 docs/_includes/custom-head.html create mode 100644 docs/_includes/head.html create mode 100644 docs/_includes/header.html create mode 100644 docs/_layouts/alt-page.html create mode 100644 docs/_layouts/default.html create mode 100644 docs/_layouts/page.html create mode 100644 docs/_sass/minima/_base.scss create mode 100644 docs/_sass/minima/_layout.scss create mode 100644 docs/_sass/minima/custom-mixins.scss create mode 100644 docs/_sass/minima/custom-styles.scss create mode 100644 docs/_sass/minima/custom-variables.scss create mode 100644 docs/_sass/minima/initialize.scss create mode 100644 docs/_sass/minima/skins/classic.scss create mode 100644 docs/_sass/minima/skins/solarized-dark.scss create mode 100644 docs/_sass/minima/skins/solarized.scss create mode 100644 docs/assets/css/style.scss create mode 100644 docs/images/ArchitectureDiagram.png create mode 100644 docs/images/ArchitectureSequenceDiagram.png create mode 100644 docs/images/BetterModelClassDiagram.png create mode 100644 docs/images/CommitActivityDiagram.png create mode 100644 docs/images/ComponentManagers.png create mode 100644 docs/images/DeleteSequenceDiagram.png create mode 100644 docs/images/LogicClassDiagram.png create mode 100644 docs/images/LogicStorageDIP.png create mode 100644 docs/images/ModelClassDiagram.png create mode 100644 docs/images/ParserClasses.png create mode 100644 docs/images/StorageClassDiagram.png create mode 100644 docs/images/UiClassDiagram.png create mode 100644 docs/images/UndoRedoState0.png create mode 100644 docs/images/UndoRedoState1.png create mode 100644 docs/images/UndoRedoState2.png create mode 100644 docs/images/UndoRedoState3.png create mode 100644 docs/images/UndoRedoState4.png create mode 100644 docs/images/UndoRedoState5.png create mode 100644 docs/images/UndoSequenceDiagram.png create mode 100644 docs/images/tracing/LogicSequenceDiagram.png diff --git a/.github/workflows/docs.yml b/.github/workflows/docs.yml deleted file mode 100644 index 57737a615fc..00000000000 --- a/.github/workflows/docs.yml +++ /dev/null @@ -1,25 +0,0 @@ -name: MarkBind Action - -on: - push: - branches: - - master - -jobs: - build_and_deploy: - runs-on: ubuntu-latest - steps: - - name: Install Graphviz - run: sudo apt-get install graphviz - - name: Install Java - uses: actions/setup-java@v3 - with: - java-version: '11' - distribution: 'temurin' - - name: Build & Deploy MarkBind site - uses: MarkBind/markbind-action@v2 - with: - token: ${{ secrets.GITHUB_TOKEN }} - rootDirectory: './docs' - baseUrl: '/addressbook-level3' # replace with your repo name - version: '^5.1.0' diff --git a/.gitignore b/.gitignore index f99a4d436a8..722d372133c 100644 --- a/.gitignore +++ b/.gitignore @@ -22,4 +22,3 @@ src/test/data/sandbox/ # MacOS custom attributes files created by Finder .DS_Store docs/_site/ -docs/_markbind/logs/ diff --git a/docs/.gitignore b/docs/.gitignore deleted file mode 100644 index 1748e487fbd..00000000000 --- a/docs/.gitignore +++ /dev/null @@ -1,23 +0,0 @@ -# Logs -logs -*.log -npm-debug.log* -yarn-debug.log* -yarn-error.log* -lerna-debug.log* -_markbind/logs/ - -# Dependency directories -node_modules/ - -# Production build files (change if you output the build to a different directory) -_site/ - -# Env -.env -.env.local - -# IDE configs -.vscode/ -.idea/* -*.iml diff --git a/docs/AboutUs.md b/docs/AboutUs.md index 8cf4ab68e9e..1c9514e966a 100644 --- a/docs/AboutUs.md +++ b/docs/AboutUs.md @@ -1,10 +1,8 @@ --- - layout: default.md - title: "About Us" +layout: page +title: About Us --- -# About Us - We are a team based in the [School of Computing, National University of Singapore](http://www.comp.nus.edu.sg). You can reach us at the email `seer[at]comp.nus.edu.sg` diff --git a/docs/Configuration.md b/docs/Configuration.md index 32f6255f3b9..13cf0faea16 100644 --- a/docs/Configuration.md +++ b/docs/Configuration.md @@ -1,8 +1,6 @@ --- - layout: default.md - title: "Configuration guide" +layout: page +title: Configuration guide --- -# Configuration guide - Certain properties of the application can be controlled (e.g user preferences file location, logging level) through the configuration file (default: `config.json`). diff --git a/docs/DevOps.md b/docs/DevOps.md index 8228c845e86..d2fd91a6001 100644 --- a/docs/DevOps.md +++ b/docs/DevOps.md @@ -1,15 +1,12 @@ --- - layout: default.md - title: "DevOps guide" - pageNav: 3 +layout: page +title: DevOps guide --- -# DevOps guide +* Table of Contents +{:toc} - - - - +-------------------------------------------------------------------------------------------------------------------- ## Build automation diff --git a/docs/DeveloperGuide.md b/docs/DeveloperGuide.md index a5a11185ae1..8a861859bfd 100644 --- a/docs/DeveloperGuide.md +++ b/docs/DeveloperGuide.md @@ -1,19 +1,15 @@ --- - layout: default.md - title: "Developer Guide" - pageNav: 3 +layout: page +title: Developer Guide --- - -# AB-3 Developer Guide - - - +* Table of Contents +{:toc} -------------------------------------------------------------------------------------------------------------------- ## **Acknowledgements** -_{ list here sources of all reused/adapted ideas, code, documentation, and third-party libraries -- include links to the original source as well }_ +* {list here sources of all reused/adapted ideas, code, documentation, and third-party libraries -- include links to the original source as well} -------------------------------------------------------------------------------------------------------------------- @@ -25,9 +21,14 @@ Refer to the guide [_Setting up and getting started_](SettingUp.md). ## **Design** +
+ +:bulb: **Tip:** The `.puml` files used to create diagrams in this document `docs/diagrams` folder. Refer to the [_PlantUML Tutorial_ at se-edu/guides](https://se-education.org/guides/tutorials/plantUml.html) to learn how to create and edit diagrams. +
+ ### Architecture - + The ***Architecture Diagram*** given above explains the high-level design of the App. @@ -52,7 +53,7 @@ The bulk of the app's work is done by the following four components: The *Sequence Diagram* below shows how the components interact with each other for the scenario where the user issues the command `delete 1`. - + Each of the four main components (also shown in the diagram above), @@ -61,7 +62,7 @@ Each of the four main components (also shown in the diagram above), For example, the `Logic` component defines its API in the `Logic.java` interface and implements its functionality using the `LogicManager.java` class which follows the `Logic` interface. Other components interact with a given component through its interface rather than the concrete class (reason: to prevent outside component's being coupled to the implementation of a component), as illustrated in the (partial) class diagram below. - + The sections below give more details of each component. @@ -69,7 +70,7 @@ The sections below give more details of each component. The **API** of this component is specified in [`Ui.java`](https://github.com/se-edu/addressbook-level3/tree/master/src/main/java/seedu/address/ui/Ui.java) - +![Structure of the UI Component](images/UiClassDiagram.png) The UI consists of a `MainWindow` that is made up of parts e.g.`CommandBox`, `ResultDisplay`, `PersonListPanel`, `StatusBarFooter` etc. All these, including the `MainWindow`, inherit from the abstract `UiPart` class which captures the commonalities between classes that represent parts of the visible GUI. @@ -88,16 +89,14 @@ The `UI` component, Here's a (partial) class diagram of the `Logic` component: - + The sequence diagram below illustrates the interactions within the `Logic` component, taking `execute("delete 1")` API call as an example. - - - +![Interactions Inside the Logic Component for the `delete 1` Command](images/DeleteSequenceDiagram.png) -**Note:** The lifeline for `DeleteCommandParser` should end at the destroy marker (X) but due to a limitation of PlantUML, the lifeline reaches the end of diagram. - +
:information_source: **Note:** The lifeline for `DeleteCommandParser` should end at the destroy marker (X) but due to a limitation of PlantUML, the lifeline reaches the end of diagram. +
How the `Logic` component works: @@ -108,7 +107,7 @@ How the `Logic` component works: Here are the other classes in `Logic` (omitted from the class diagram above) that are used for parsing a user command: - + How the parsing works: * When called upon to parse a user command, the `AddressBookParser` class creates an `XYZCommandParser` (`XYZ` is a placeholder for the specific command name e.g., `AddCommandParser`) which uses the other classes shown above to parse the user command and create a `XYZCommand` object (e.g., `AddCommand`) which the `AddressBookParser` returns back as a `Command` object. @@ -117,7 +116,7 @@ How the parsing works: ### Model component **API** : [`Model.java`](https://github.com/se-edu/addressbook-level3/tree/master/src/main/java/seedu/address/model/Model.java) - + The `Model` component, @@ -127,20 +126,18 @@ The `Model` component, * stores a `UserPref` object that represents the user’s preferences. This is exposed to the outside as a `ReadOnlyUserPref` objects. * does not depend on any of the other three components (as the `Model` represents data entities of the domain, they should make sense on their own without depending on other components) - - -**Note:** An alternative (arguably, a more OOP) model is given below. It has a `Tag` list in the `AddressBook`, which `Person` references. This allows `AddressBook` to only require one `Tag` object per unique tag, instead of each `Person` needing their own `Tag` objects.
+
:information_source: **Note:** An alternative (arguably, a more OOP) model is given below. It has a `Tag` list in the `AddressBook`, which `Person` references. This allows `AddressBook` to only require one `Tag` object per unique tag, instead of each `Person` needing their own `Tag` objects.
- + - +
### Storage component **API** : [`Storage.java`](https://github.com/se-edu/addressbook-level3/tree/master/src/main/java/seedu/address/storage/Storage.java) - + The `Storage` component, * can save both address book data and user preference data in JSON format, and read them back into corresponding objects. @@ -173,63 +170,54 @@ Given below is an example usage scenario and how the undo/redo mechanism behaves Step 1. The user launches the application for the first time. The `VersionedAddressBook` will be initialized with the initial address book state, and the `currentStatePointer` pointing to that single address book state. - +![UndoRedoState0](images/UndoRedoState0.png) Step 2. The user executes `delete 5` command to delete the 5th person in the address book. The `delete` command calls `Model#commitAddressBook()`, causing the modified state of the address book after the `delete 5` command executes to be saved in the `addressBookStateList`, and the `currentStatePointer` is shifted to the newly inserted address book state. - +![UndoRedoState1](images/UndoRedoState1.png) Step 3. The user executes `add n/David …​` to add a new person. The `add` command also calls `Model#commitAddressBook()`, causing another modified address book state to be saved into the `addressBookStateList`. - +![UndoRedoState2](images/UndoRedoState2.png) - +
:information_source: **Note:** If a command fails its execution, it will not call `Model#commitAddressBook()`, so the address book state will not be saved into the `addressBookStateList`. -**Note:** If a command fails its execution, it will not call `Model#commitAddressBook()`, so the address book state will not be saved into the `addressBookStateList`. - - +
Step 4. The user now decides that adding the person was a mistake, and decides to undo that action by executing the `undo` command. The `undo` command will call `Model#undoAddressBook()`, which will shift the `currentStatePointer` once to the left, pointing it to the previous address book state, and restores the address book to that state. - - - - +![UndoRedoState3](images/UndoRedoState3.png) -**Note:** If the `currentStatePointer` is at index 0, pointing to the initial AddressBook state, then there are no previous AddressBook states to restore. The `undo` command uses `Model#canUndoAddressBook()` to check if this is the case. If so, it will return an error to the user rather +
:information_source: **Note:** If the `currentStatePointer` is at index 0, pointing to the initial AddressBook state, then there are no previous AddressBook states to restore. The `undo` command uses `Model#canUndoAddressBook()` to check if this is the case. If so, it will return an error to the user rather than attempting to perform the undo. - +
The following sequence diagram shows how the undo operation works: - +![UndoSequenceDiagram](images/UndoSequenceDiagram.png) - +
:information_source: **Note:** The lifeline for `UndoCommand` should end at the destroy marker (X) but due to a limitation of PlantUML, the lifeline reaches the end of diagram. -**Note:** The lifeline for `UndoCommand` should end at the destroy marker (X) but due to a limitation of PlantUML, the lifeline reaches the end of diagram. - - +
The `redo` command does the opposite — it calls `Model#redoAddressBook()`, which shifts the `currentStatePointer` once to the right, pointing to the previously undone state, and restores the address book to that state. - - -**Note:** If the `currentStatePointer` is at index `addressBookStateList.size() - 1`, pointing to the latest address book state, then there are no undone AddressBook states to restore. The `redo` command uses `Model#canRedoAddressBook()` to check if this is the case. If so, it will return an error to the user rather than attempting to perform the redo. +
:information_source: **Note:** If the `currentStatePointer` is at index `addressBookStateList.size() - 1`, pointing to the latest address book state, then there are no undone AddressBook states to restore. The `redo` command uses `Model#canRedoAddressBook()` to check if this is the case. If so, it will return an error to the user rather than attempting to perform the redo. - +
Step 5. The user then decides to execute the command `list`. Commands that do not modify the address book, such as `list`, will usually not call `Model#commitAddressBook()`, `Model#undoAddressBook()` or `Model#redoAddressBook()`. Thus, the `addressBookStateList` remains unchanged. - +![UndoRedoState4](images/UndoRedoState4.png) Step 6. The user executes `clear`, which calls `Model#commitAddressBook()`. Since the `currentStatePointer` is not pointing at the end of the `addressBookStateList`, all address book states after the `currentStatePointer` will be purged. Reason: It no longer makes sense to redo the `add n/David …​` command. This is the behavior that most modern desktop applications follow. - +![UndoRedoState5](images/UndoRedoState5.png) The following activity diagram summarizes what happens when a user executes a new command: - + #### Design considerations: @@ -282,14 +270,14 @@ _{Explain here how the data archiving feature will be implemented}_ Priorities: High (must have) - `* * *`, Medium (nice to have) - `* *`, Low (unlikely to have) - `*` -| Priority | As a …​ | I want to …​ | So that I can…​ | -|----------|--------------------------------------------|------------------------------|------------------------------------------------------------------------| -| `* * *` | new user | see usage instructions | refer to instructions when I forget how to use the App | -| `* * *` | user | add a new person | | -| `* * *` | user | delete a person | remove entries that I no longer need | -| `* * *` | user | find a person by name | locate details of persons without having to go through the entire list | -| `* *` | user | hide private contact details | minimize chance of someone else seeing them by accident | -| `*` | user with many persons in the address book | sort persons by name | locate a person easily | +| Priority | As a …​ | I want to …​ | So that I can…​ | +| -------- | ------------------------------------------ | ------------------------------ | ---------------------------------------------------------------------- | +| `* * *` | new user | see usage instructions | refer to instructions when I forget how to use the App | +| `* * *` | user | add a new person | | +| `* * *` | user | delete a person | remove entries that I no longer need | +| `* * *` | user | find a person by name | locate details of persons without having to go through the entire list | +| `* *` | user | hide private contact details | minimize chance of someone else seeing them by accident | +| `*` | user with many persons in the address book | sort persons by name | locate a person easily | *{More to be added}* @@ -341,12 +329,10 @@ Priorities: High (must have) - `* * *`, Medium (nice to have) - `* *`, Low (unli Given below are instructions to test the app manually. - - -**Note:** These instructions only provide a starting point for testers to work on; +
:information_source: **Note:** These instructions only provide a starting point for testers to work on; testers are expected to do more *exploratory* testing. - +
### Launch and shutdown diff --git a/docs/Documentation.md b/docs/Documentation.md index 082e652d947..3e68ea364e7 100644 --- a/docs/Documentation.md +++ b/docs/Documentation.md @@ -1,21 +1,29 @@ --- - layout: default.md - title: "Documentation guide" - pageNav: 3 +layout: page +title: Documentation guide --- -# Documentation Guide +**Setting up and maintaining the project website:** + +* We use [**Jekyll**](https://jekyllrb.com/) to manage documentation. +* The `docs/` folder is used for documentation. +* To learn how set it up and maintain the project website, follow the guide [_[se-edu/guides] **Using Jekyll for project documentation**_](https://se-education.org/guides/tutorials/jekyll.html). +* Note these points when adapting the documentation to a different project/product: + * The 'Site-wide settings' section of the page linked above has information on how to update site-wide elements such as the top navigation bar. + * :bulb: In addition to updating content files, you might have to update the config files `docs\_config.yml` and `docs\_sass\minima\_base.scss` (which contains a reference to `AB-3` that comes into play when converting documentation pages to PDF format). +* If you are using Intellij for editing documentation files, you can consider enabling 'soft wrapping' for `*.md` files, as explained in [_[se-edu/guides] **Intellij IDEA: Useful settings**_](https://se-education.org/guides/tutorials/intellijUsefulSettings.html#enabling-soft-wrapping) -* We use [**MarkBind**](https://markbind.org/) to manage documentation. -* The `docs/` folder contains the source files for the documentation website. -* To learn how set it up and maintain the project website, follow the guide [[se-edu/guides] Working with Forked MarkBind sites](https://se-education.org/guides/tutorials/markbind-forked-sites.html) for project documentation. **Style guidance:** * Follow the [**_Google developer documentation style guide_**](https://developers.google.com/style). -* Also relevant is the [_se-edu/guides **Markdown coding standard**_](https://se-education.org/guides/conventions/markdown.html). +* Also relevant is the [_[se-edu/guides] **Markdown coding standard**_](https://se-education.org/guides/conventions/markdown.html) + +**Diagrams:** + +* See the [_[se-edu/guides] **Using PlantUML**_](https://se-education.org/guides/tutorials/plantUml.html) -**Converting to PDF** +**Converting a document to the PDF format:** -* See the guide [_se-edu/guides **Saving web documents as PDF files**_](https://se-education.org/guides/tutorials/savingPdf.html). +* See the guide [_[se-edu/guides] **Saving web documents as PDF files**_](https://se-education.org/guides/tutorials/savingPdf.html) diff --git a/docs/Gemfile b/docs/Gemfile new file mode 100644 index 00000000000..c8385d85874 --- /dev/null +++ b/docs/Gemfile @@ -0,0 +1,10 @@ +# frozen_string_literal: true + +source "https://rubygems.org" + +git_source(:github) {|repo_name| "https://github.com/#{repo_name}" } + +gem 'jekyll' +gem 'github-pages', group: :jekyll_plugins +gem 'wdm', '~> 0.1.0' if Gem.win_platform? +gem 'webrick' diff --git a/docs/Logging.md b/docs/Logging.md index 589644ad5c6..5e4fb9bc217 100644 --- a/docs/Logging.md +++ b/docs/Logging.md @@ -1,10 +1,8 @@ --- - layout: default.md - title: "Logging guide" +layout: page +title: Logging guide --- -# Logging guide - * We are using `java.util.logging` package for logging. * The `LogsCenter` class is used to manage the logging levels and logging destinations. * The `Logger` for a class can be obtained using `LogsCenter.getLogger(Class)` which will log messages according to the specified logging level. diff --git a/docs/SettingUp.md b/docs/SettingUp.md index 03df0295bd2..275445bd551 100644 --- a/docs/SettingUp.md +++ b/docs/SettingUp.md @@ -1,32 +1,27 @@ --- - layout: default.md - title: "Setting up and getting started" - pageNav: 3 +layout: page +title: Setting up and getting started --- -# Setting up and getting started +* Table of Contents +{:toc} - - -------------------------------------------------------------------------------------------------------------------- ## Setting up the project in your computer - +
:exclamation: **Caution:** -**Caution:** Follow the steps in the following guide precisely. Things will not work out if you deviate in some steps. - +
First, **fork** this repo, and **clone** the fork into your computer. If you plan to use Intellij IDEA (highly recommended): 1. **Configure the JDK**: Follow the guide [_[se-edu/guides] IDEA: Configuring the JDK_](https://se-education.org/guides/tutorials/intellijJdk.html) to to ensure Intellij is configured to use **JDK 11**. -1. **Import the project as a Gradle project**: Follow the guide [_[se-edu/guides] IDEA: Importing a Gradle project_](https://se-education.org/guides/tutorials/intellijImportGradleProject.html) to import the project into IDEA. - - Note: Importing a Gradle project is slightly different from importing a normal Java project. - +1. **Import the project as a Gradle project**: Follow the guide [_[se-edu/guides] IDEA: Importing a Gradle project_](https://se-education.org/guides/tutorials/intellijImportGradleProject.html) to import the project into IDEA.
+ :exclamation: Note: Importing a Gradle project is slightly different from importing a normal Java project. 1. **Verify the setup**: 1. Run the `seedu.address.Main` and try a few commands. 1. [Run the tests](Testing.md) to ensure they all pass. @@ -39,11 +34,10 @@ If you plan to use Intellij IDEA (highly recommended): If using IDEA, follow the guide [_[se-edu/guides] IDEA: Configuring the code style_](https://se-education.org/guides/tutorials/intellijCodeStyle.html) to set up IDEA's coding style to match ours. - +
:bulb: **Tip:** - **Tip:** Optionally, you can follow the guide [_[se-edu/guides] Using Checkstyle_](https://se-education.org/guides/tutorials/checkstyle.html) to find how to use the CheckStyle within IDEA e.g., to report problems _as_ you write code. - +
1. **Set up CI** diff --git a/docs/Testing.md b/docs/Testing.md index 78ddc57e670..8a99e82438a 100644 --- a/docs/Testing.md +++ b/docs/Testing.md @@ -1,15 +1,12 @@ --- - layout: default.md - title: "Testing guide" - pageNav: 3 +layout: page +title: Testing guide --- -# Testing guide +* Table of Contents +{:toc} - - - - +-------------------------------------------------------------------------------------------------------------------- ## Running tests @@ -22,10 +19,8 @@ There are two ways to run tests. * **Method 2: Using Gradle** * Open a console and run the command `gradlew clean test` (Mac/Linux: `./gradlew clean test`) - - -**Link**: Read [this Gradle Tutorial from the se-edu/guides](https://se-education.org/guides/tutorials/gradle.html) to learn more about using Gradle. - +
:link: **Link**: Read [this Gradle Tutorial from the se-edu/guides](https://se-education.org/guides/tutorials/gradle.html) to learn more about using Gradle. +
-------------------------------------------------------------------------------------------------------------------- diff --git a/docs/UserGuide.md b/docs/UserGuide.md index b3abf0e8722..57437026c7b 100644 --- a/docs/UserGuide.md +++ b/docs/UserGuide.md @@ -1,15 +1,12 @@ --- - layout: default.md - title: "User Guide" - pageNav: 3 +layout: page +title: User Guide --- -# AB-3 User Guide +AddressBook Level 3 (AB3) is a **desktop app for managing contacts, optimized for use via a Command Line Interface** (CLI) while still having the benefits of a Graphical User Interface (GUI). If you can type fast, AB3 can get your contact management tasks done faster than traditional GUI apps. -AddressBook Level 3 (AB3) is a **desktop app for managing contacts, optimized for use via a Line Interface** (CLI) while still having the benefits of a Graphical User Interface (GUI). If you can type fast, AB3 can get your contact management tasks done faster than traditional GUI apps. - - - +* Table of Contents +{:toc} -------------------------------------------------------------------------------------------------------------------- @@ -44,9 +41,9 @@ AddressBook Level 3 (AB3) is a **desktop app for managing contacts, optimized fo ## Features - +
-**Notes about the command format:**
+**:information_source: Notes about the command format:**
* Words in `UPPER_CASE` are the parameters to be supplied by the user.
e.g. in `add n/NAME`, `NAME` is a parameter which can be used as `add n/John Doe`. @@ -64,7 +61,7 @@ AddressBook Level 3 (AB3) is a **desktop app for managing contacts, optimized fo e.g. if the command specifies `help 123`, it will be interpreted as `help`. * If you are using a PDF version of this document, be careful when copying and pasting commands that span multiple lines as space characters surrounding line-breaks may be omitted when copied over to the application. - +
### Viewing help : `help` @@ -81,10 +78,9 @@ Adds a person to the address book. Format: `add n/NAME p/PHONE_NUMBER e/EMAIL a/ADDRESS [t/TAG]…​` - - -**Tip:** A person can have any number of tags (including 0) - +
:bulb: **Tip:** +A person can have any number of tags (including 0) +
Examples: * `add n/John Doe p/98765432 e/johnd@example.com a/John street, block 123, #01-01` @@ -165,11 +161,9 @@ AddressBook data are saved in the hard disk automatically after any command that AddressBook data are saved automatically as a JSON file `[JAR file location]/data/addressbook.json`. Advanced users are welcome to update data directly by editing that data file. - - -**Caution:** -If your changes to the data file makes its format invalid, AddressBook will discard all data and start with an empty data file at the next run. Hence, it is recommended to take a backup of the file before editing it. - +
:exclamation: **Caution:** +If your changes to the data file makes its format invalid, AddressBook will discard all data and start with an empty data file at the next run. Hence, it is recommended to take a backup of the file before editing it. +
### Archiving data files `[coming in v2.0]` @@ -192,12 +186,12 @@ _Details coming soon ..._ ## Command summary -Action | Format, Examples ------------|---------------------------------------------------------------------------------------------------------------------------------------------------------------------- -**Add** | `add n/NAME p/PHONE_NUMBER e/EMAIL a/ADDRESS [t/TAG]…​`
e.g., `add n/James Ho p/22224444 e/jamesho@example.com a/123, Clementi Rd, 1234665 t/friend t/colleague` -**Clear** | `clear` +Action | Format, Examples +--------|------------------ +**Add** | `add n/NAME p/PHONE_NUMBER e/EMAIL a/ADDRESS [t/TAG]…​`
e.g., `add n/James Ho p/22224444 e/jamesho@example.com a/123, Clementi Rd, 1234665 t/friend t/colleague` +**Clear** | `clear` **Delete** | `delete INDEX`
e.g., `delete 3` -**Edit** | `edit INDEX [n/NAME] [p/PHONE_NUMBER] [e/EMAIL] [a/ADDRESS] [t/TAG]…​`
e.g.,`edit 2 n/James Lee e/jameslee@example.com` -**Find** | `find KEYWORD [MORE_KEYWORDS]`
e.g., `find James Jake` -**List** | `list` -**Help** | `help` +**Edit** | `edit INDEX [n/NAME] [p/PHONE_NUMBER] [e/EMAIL] [a/ADDRESS] [t/TAG]…​`
e.g.,`edit 2 n/James Lee e/jameslee@example.com` +**Find** | `find KEYWORD [MORE_KEYWORDS]`
e.g., `find James Jake` +**List** | `list` +**Help** | `help` diff --git a/docs/_config.yml b/docs/_config.yml new file mode 100644 index 00000000000..6bd245d8f4e --- /dev/null +++ b/docs/_config.yml @@ -0,0 +1,15 @@ +title: "AB-3" +theme: minima + +header_pages: + - UserGuide.md + - DeveloperGuide.md + - AboutUs.md + +markdown: kramdown + +repository: "se-edu/addressbook-level3" +github_icon: "images/github-icon.png" + +plugins: + - jemoji diff --git a/docs/_data/projects.yml b/docs/_data/projects.yml new file mode 100644 index 00000000000..8f3e50cb601 --- /dev/null +++ b/docs/_data/projects.yml @@ -0,0 +1,23 @@ +- name: "AB-1" + url: https://se-edu.github.io/addressbook-level1 + +- name: "AB-2" + url: https://se-edu.github.io/addressbook-level2 + +- name: "AB-3" + url: https://se-edu.github.io/addressbook-level3 + +- name: "AB-4" + url: https://se-edu.github.io/addressbook-level4 + +- name: "Duke" + url: https://se-edu.github.io/duke + +- name: "Collate" + url: https://se-edu.github.io/collate + +- name: "Book" + url: https://se-edu.github.io/se-book + +- name: "Resources" + url: https://se-edu.github.io/resources diff --git a/docs/_includes/custom-head.html b/docs/_includes/custom-head.html new file mode 100644 index 00000000000..8559a67ffad --- /dev/null +++ b/docs/_includes/custom-head.html @@ -0,0 +1,6 @@ +{% comment %} + Placeholder to allow defining custom head, in principle, you can add anything here, e.g. favicons: + + 1. Head over to https://realfavicongenerator.net/ to add your own favicons. + 2. Customize default _includes/custom-head.html in your source directory and insert the given code snippet. +{% endcomment %} diff --git a/docs/_includes/head.html b/docs/_includes/head.html new file mode 100644 index 00000000000..83ac5326933 --- /dev/null +++ b/docs/_includes/head.html @@ -0,0 +1,12 @@ + + + + + + + + {%- include custom-head.html -%} + + {{page.title}} + + diff --git a/docs/_includes/header.html b/docs/_includes/header.html new file mode 100644 index 00000000000..33badcd4f99 --- /dev/null +++ b/docs/_includes/header.html @@ -0,0 +1,36 @@ + diff --git a/docs/_layouts/alt-page.html b/docs/_layouts/alt-page.html new file mode 100644 index 00000000000..5dbc6ef245f --- /dev/null +++ b/docs/_layouts/alt-page.html @@ -0,0 +1,14 @@ +--- +layout: default +--- +
+ +
+

{{ page.alt_title | escape }}

+
+ +
+ {{ content }} +
+ +
diff --git a/docs/_layouts/default.html b/docs/_layouts/default.html new file mode 100644 index 00000000000..e092cd572e0 --- /dev/null +++ b/docs/_layouts/default.html @@ -0,0 +1,18 @@ + + + + {%- include head.html -%} + + + + {%- include header.html -%} + +
+
+ {{ content }} +
+
+ + + + diff --git a/docs/_layouts/page.html b/docs/_layouts/page.html new file mode 100644 index 00000000000..01e4b2a93b8 --- /dev/null +++ b/docs/_layouts/page.html @@ -0,0 +1,14 @@ +--- +layout: default +--- +
+ +
+

{{ page.title | escape }}

+
+ +
+ {{ content }} +
+ +
diff --git a/docs/_sass/minima/_base.scss b/docs/_sass/minima/_base.scss new file mode 100644 index 00000000000..0d3f6e80ced --- /dev/null +++ b/docs/_sass/minima/_base.scss @@ -0,0 +1,295 @@ +html { + font-size: $base-font-size; +} + +/** + * Reset some basic elements + */ +body, h1, h2, h3, h4, h5, h6, +p, blockquote, pre, hr, +dl, dd, ol, ul, figure { + margin: 0; + padding: 0; + +} + + + +/** + * Basic styling + */ +body { + font: $base-font-weight #{$base-font-size}/#{$base-line-height} $base-font-family; + color: $text-color; + background-color: $background-color; + -webkit-text-size-adjust: 100%; + -webkit-font-feature-settings: "kern" 1; + -moz-font-feature-settings: "kern" 1; + -o-font-feature-settings: "kern" 1; + font-feature-settings: "kern" 1; + font-kerning: normal; + display: flex; + min-height: 100vh; + flex-direction: column; + overflow-wrap: break-word; +} + + + +/** + * Set `margin-bottom` to maintain vertical rhythm + */ +h1, h2, h3, h4, h5, h6, +p, blockquote, pre, +ul, ol, dl, figure, +%vertical-rhythm { + margin-bottom: $spacing-unit / 2; +} + +hr { + margin-top: $spacing-unit; + margin-bottom: $spacing-unit; +} + +/** + * `main` element + */ +main { + display: block; /* Default value of `display` of `main` element is 'inline' in IE 11. */ +} + + + +/** + * Images + */ +img { + max-width: 100%; + vertical-align: middle; +} + + + +/** + * Figures + */ +figure > img { + display: block; +} + +figcaption { + font-size: $small-font-size; +} + + + +/** + * Lists + */ +ul, ol { + margin-left: $spacing-unit; +} + +li { + > ul, + > ol { + margin-bottom: 0; + } +} + + + +/** + * Headings + */ +h1, h2, h3, h4, h5, h6 { + font-weight: $base-font-weight; +} + + + +/** + * Links + */ +a { + color: $link-base-color; + text-decoration: none; + + &:visited { + color: $link-visited-color; + } + + &:hover { + color: $text-color; + text-decoration: underline; + } + + .social-media-list &:hover { + text-decoration: none; + + .username { + text-decoration: underline; + } + } +} + + +/** + * Blockquotes + */ +blockquote { + color: $brand-color; + border-left: 4px solid $brand-color-light; + padding-left: $spacing-unit / 2; + @include relative-font-size(1.125); + font-style: italic; + + > :last-child { + margin-bottom: 0; + } + + i, em { + font-style: normal; + } +} + + + +/** + * Code formatting + */ +pre, +code { + font-family: $code-font-family; + font-size: 0.9375em; + border: 1px solid $brand-color-light; + border-radius: 3px; + background-color: $code-background-color; +} + +code { + padding: 1px 5px; +} + +pre { + padding: 8px 12px; + overflow-x: auto; + + > code { + border: 0; + padding-right: 0; + padding-left: 0; + } +} + +.highlight { + border-radius: 3px; + background: $code-background-color; + @extend %vertical-rhythm; + + .highlighter-rouge & { + background: $code-background-color; + } +} + + + +/** + * Wrapper + */ +.wrapper { + max-width: calc(#{$content-width} - (#{$spacing-unit})); + margin-right: auto; + margin-left: auto; + padding-right: $spacing-unit / 2; + padding-left: $spacing-unit / 2; + @extend %clearfix; + + @media screen and (min-width: $on-large) { + max-width: calc(#{$content-width} - (#{$spacing-unit} * 2)); + padding-right: $spacing-unit; + padding-left: $spacing-unit; + } +} + + + +/** + * Clearfix + */ +%clearfix:after { + content: ""; + display: table; + clear: both; +} + + + +/** + * Icons + */ + +.orange { + color: #f66a0a; +} + +.grey { + color: #828282; +} + +/** + * Tables + */ +table { + margin-bottom: $spacing-unit; + width: 100%; + text-align: $table-text-align; + color: $table-text-color; + border-collapse: collapse; + border: 1px solid $table-border-color; + tr { + &:nth-child(even) { + background-color: $table-zebra-color; + } + } + th, td { + padding: ($spacing-unit / 3) ($spacing-unit / 2); + } + th { + background-color: $table-header-bg-color; + border: 1px solid $table-header-border; + } + td { + border: 1px solid $table-border-color; + } + + @include media-query($on-laptop) { + display: block; + overflow-x: auto; + -webkit-overflow-scrolling: touch; + -ms-overflow-style: -ms-autohiding-scrollbar; + } +} + +@media print { + /** + * Prevents page break from cutting through content when printing + */ + body { + display: block; + } + /** + * Replaces the top navigation menu with the project name when printing + */ + .site-header .wrapper { + display: none; + } + .site-header { + text-align: center; + } + .site-header:before { + content: "AB-3"; + font-size: 32px; + } +} + diff --git a/docs/_sass/minima/_layout.scss b/docs/_sass/minima/_layout.scss new file mode 100644 index 00000000000..ca99f981701 --- /dev/null +++ b/docs/_sass/minima/_layout.scss @@ -0,0 +1,263 @@ +/** + * Site header + */ +.site-header { + border-top: 5px solid $brand-color-dark; + border-bottom: 1px solid $brand-color-light; + min-height: $spacing-unit * 1.865; + line-height: $base-line-height * $base-font-size * 2.25; + + // Positioning context for the mobile navigation icon + position: relative; +} + +.site-title { + @include relative-font-size(1.625); + font-weight: 300; + letter-spacing: -1px; + margin-bottom: 0; + float: left; + + @include media-query($on-palm) { + padding-right: 45px; + } + + &, + &:visited { + color: $brand-color-dark; + } +} + +.site-nav { + position: absolute; + top: 9px; + right: $spacing-unit / 2; + background-color: $background-color; + border: 1px solid $brand-color-light; + border-radius: 5px; + text-align: right; + + .nav-trigger { + display: none; + } + + .menu-icon { + float: right; + width: 36px; + height: 26px; + line-height: 0; + padding-top: 10px; + text-align: center; + + > svg path { + fill: $brand-color-dark; + } + } + + label[for="nav-trigger"] { + display: block; + float: right; + width: 36px; + height: 36px; + z-index: 2; + cursor: pointer; + } + + input ~ .trigger { + clear: both; + display: none; + } + + input:checked ~ .trigger { + display: block; + padding-bottom: 5px; + } + + .page-link { + color: $text-color; + line-height: $base-line-height; + display: block; + padding: 5px 10px; + + // Gaps between nav items, but not on the last one + &:not(:last-child) { + margin-right: 0; + } + margin-left: 20px; + } + + @media screen and (min-width: $on-medium) { + position: static; + float: right; + border: none; + background-color: inherit; + + label[for="nav-trigger"] { + display: none; + } + + .menu-icon { + display: none; + } + + input ~ .trigger { + display: block; + } + + .page-link { + display: inline; + padding: 0; + + &:not(:last-child) { + margin-right: 20px; + } + margin-left: auto; + } + } +} + + + +/** + * Page content + */ +.page-content { + padding: $spacing-unit 0; + flex: 1 0 auto; +} + +.page-heading { + @include relative-font-size(2); +} + +.post-list-heading { + @include relative-font-size(1.75); +} + +.post-list { + margin-left: 0; + list-style: none; + + > li { + margin-bottom: $spacing-unit; + } +} + +.post-meta { + font-size: $small-font-size; + color: $brand-color; +} + +.post-link { + display: block; + @include relative-font-size(1.5); +} + + + +/** + * Posts + */ +.post-header { + margin-bottom: $spacing-unit; +} + +.post-title, +.post-content h1 { + @include relative-font-size(2.625); + letter-spacing: -1px; + line-height: 1.15; + + @media screen and (min-width: $on-large) { + @include relative-font-size(2.625); + } +} + +.post-content { + margin-bottom: $spacing-unit; + + h1, h2, h3 { margin-top: $spacing-unit * 2 } + h4, h5, h6 { margin-top: $spacing-unit } + + h2 { + @include relative-font-size(1.75); + + @media screen and (min-width: $on-large) { + @include relative-font-size(2); + } + } + + h3 { + @include relative-font-size(1.375); + + @media screen and (min-width: $on-large) { + @include relative-font-size(1.625); + } + } + + h4 { + @include relative-font-size(1.25); + } + + h5 { + @include relative-font-size(1.125); + } + h6 { + @include relative-font-size(1.0625); + } +} + + +.social-media-list { + display: table; + margin: 0 auto; + li { + float: left; + margin: 5px 10px 5px 0; + &:last-of-type { margin-right: 0 } + a { + display: block; + padding: $spacing-unit / 4; + border: 1px solid $brand-color-light; + &:hover { border-color: darken($brand-color-light, 10%) } + } + } +} + + + +/** + * Pagination navbar + */ +.pagination { + margin-bottom: $spacing-unit; + @extend .social-media-list; + li { + a, div { + min-width: 41px; + text-align: center; + box-sizing: border-box; + } + div { + display: block; + padding: $spacing-unit / 4; + border: 1px solid transparent; + + &.pager-edge { + color: darken($brand-color-light, 5%); + border: 1px dashed; + } + } + } +} + + + +/** + * Grid helpers + */ +@media screen and (min-width: $on-large) { + .one-half { + width: calc(50% - (#{$spacing-unit} / 2)); + } +} diff --git a/docs/_sass/minima/custom-mixins.scss b/docs/_sass/minima/custom-mixins.scss new file mode 100644 index 00000000000..9d4bedc1c67 --- /dev/null +++ b/docs/_sass/minima/custom-mixins.scss @@ -0,0 +1,21 @@ +@mixin alert-variant($background, $border, $color) { + color: $color; + @include gradient-bg($background); + border-color: $border; + + .alert-link { + color: darken($color, 10%); + } +} + +@mixin gradient-bg($color, $foreground: null) { + @if $enable-gradients { + @if $foreground { + background-image: $foreground, linear-gradient(180deg, mix($body-bg, $color, 15%), $color); + } @else { + background-image: linear-gradient(180deg, mix($body-bg, $color, 15%), $color); + } + } @else { + background-color: $color; + } +} diff --git a/docs/_sass/minima/custom-styles.scss b/docs/_sass/minima/custom-styles.scss new file mode 100644 index 00000000000..56b5d56b430 --- /dev/null +++ b/docs/_sass/minima/custom-styles.scss @@ -0,0 +1,34 @@ +// Placeholder to allow defining custom styles that override everything else. +// (Use `_sass/minima/custom-variables.scss` to override variable defaults) +h2, h3, h4, h5, h6 { + color: #e46c0a; +} + +// Bootstrap style alerts +.alert { + position: relative; + padding: $alert-padding-y $alert-padding-x; + margin-bottom: $alert-margin-bottom; + border: $alert-border-width solid transparent; + border-radius : $alert-border-radius; +} + +// Headings for larger alerts +.alert-heading { + // Specified to prevent conflicts of changing $headings-color + color: inherit; +} + +// Provide class for links that match alerts +.alert-link { + font-weight: $alert-link-font-weight; +} + +// Generate contextual modifier classes for colorizing the alert. + +@each $color, $value in $theme-colors { + .alert-#{$color} { + @include alert-variant(color-level($value, $alert-bg-level), color-level($value, $alert-border-level), color-level($value, $alert-color-level)); + } +} + diff --git a/docs/_sass/minima/custom-variables.scss b/docs/_sass/minima/custom-variables.scss new file mode 100644 index 00000000000..a128970cbe7 --- /dev/null +++ b/docs/_sass/minima/custom-variables.scss @@ -0,0 +1,76 @@ +// Placeholder to allow overriding predefined variables smoothly. + +//Bootstrap's default +$white: #fff !default; +$gray-100: #f8f9fa !default; +$gray-200: #e9ecef !default; +$gray-300: #dee2e6 !default; +$gray-400: #ced4da !default; +$gray-500: #adb5bd !default; +$gray-600: #6c757d !default; +$gray-700: #495057 !default; +$gray-800: #343a40 !default; +$gray-900: #212529 !default; +$black: #000 !default; +$blue: #0d6efd !default; +$indigo: #6610f2 !default; +$purple: #6f42c1 !default; +$pink: #d63384 !default; +$red: #dc3545 !default; +$orange: #fd7e14 !default; +$yellow: #ffc107 !default; +$green: #28a745 !default; +$teal: #20c997 !default; +$cyan: #17a2b8 !default; + +$primary: $blue !default; +$secondary: $gray-600 !default; +$success: $green !default; +$info: $cyan !default; +$warning: $yellow !default; +$danger: $red !default; +$light: $gray-100 !default; +$dark: $gray-800 !default; + +$theme-colors: ( + "primary": $primary, + "secondary": $secondary, + "success": $success, + "info": $info, + "warning": $warning, + "danger": $danger, + "light": $light, + "dark": $dark +) !default; + +$theme-color-interval: 8% !default; + +$body-bg: $white !default; +$body-color: $gray-900 !default; +$body-text-align: null !default; + +$enable-gradients: true; + +// Define alert colors, border radius, and padding. +$border-radius: .25rem !default; +$border-width: 1px !default; +$font-weight-bold: 700 !default; + +$alert-padding-y: .75rem !default; +$alert-padding-x: 1.25rem !default; +$alert-margin-bottom: 1rem !default; +$alert-border-radius: $border-radius !default; +$alert-link-font-weight: $font-weight-bold !default; +$alert-border-width: $border-width !default; + +$alert-bg-level: -10 !default; +$alert-border-level: -9 !default; +$alert-color-level: 6 !default; + +// Request a color level +// scss-docs-start color-level +@function color-level($color: $primary, $level: 0) { + $color-base: if($level > 0, $black, $white); + $level: abs($level); + @return mix($color-base, $color, $level * $theme-color-interval); +} diff --git a/docs/_sass/minima/initialize.scss b/docs/_sass/minima/initialize.scss new file mode 100644 index 00000000000..30288811151 --- /dev/null +++ b/docs/_sass/minima/initialize.scss @@ -0,0 +1,51 @@ +@charset "utf-8"; + +// Define defaults for each variable. + +$base-font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", "Segoe UI Symbol", "Segoe UI Emoji", "Apple Color Emoji", Roboto, Helvetica, Arial, sans-serif !default; +$code-font-family: "Menlo", "Inconsolata", "Consolas", "Roboto Mono", "Ubuntu Mono", "Liberation Mono", "Courier New", monospace; +$base-font-size: 16px !default; +$base-font-weight: 400 !default; +$small-font-size: $base-font-size * 0.875 !default; +$base-line-height: 1.5 !default; + +$spacing-unit: 30px !default; + +$table-text-align: left !default; + +// Width of the content area +$content-width: 800px !default; + +$on-palm: 600px !default; +$on-laptop: 800px !default; + +$on-medium: $on-palm !default; +$on-large: $on-laptop !default; + +// Use media queries like this: +// @include media-query($on-palm) { +// .wrapper { +// padding-right: $spacing-unit / 2; +// padding-left: $spacing-unit / 2; +// } +// } +// Notice the following mixin uses max-width, in a deprecated, desktop-first +// approach, whereas media queries used elsewhere now use min-width. +@mixin media-query($device) { + @media screen and (max-width: $device) { + @content; + } +} + +@mixin relative-font-size($ratio) { + font-size: #{$ratio}rem; +} + +// Import pre-styling-overrides hook and style-partials. +@import + "minima/custom-variables", // Hook to override predefined variables. + "minima/custom-mixins", // Hook to add custom mixins. + "minima/base", // Defines element resets. + "minima/layout", // Defines structure and style based on CSS selectors. + "minima/custom-styles" // Hook to override existing styles. +; diff --git a/docs/_sass/minima/skins/classic.scss b/docs/_sass/minima/skins/classic.scss new file mode 100644 index 00000000000..37ea9c5244c --- /dev/null +++ b/docs/_sass/minima/skins/classic.scss @@ -0,0 +1,84 @@ +@charset "utf-8"; + +$brand-color: #828282 !default; +$brand-color-light: lighten($brand-color, 40%) !default; +$brand-color-dark: darken($brand-color, 25%) !default; + +$text-color: #111 !default; +$background-color: #fdfdfd !default; +$code-background-color: #eef !default; + +$link-base-color: #2a7ae2 !default; +$link-visited-color: darken($link-base-color, 15%) !default; + +$table-text-color: lighten($text-color, 18%) !default; +$table-zebra-color: lighten($brand-color, 46%) !default; +$table-header-bg-color: lighten($brand-color, 43%) !default; +$table-header-border: lighten($brand-color, 36%) !default; +$table-border-color: $brand-color-light !default; + + +// Syntax highlighting styles should be adjusted appropriately for every "skin" +// ---------------------------------------------------------------------------- + +.highlight { + .c { color: #998; font-style: italic } // Comment + .err { color: #a61717; background-color: #e3d2d2 } // Error + .k { font-weight: bold } // Keyword + .o { font-weight: bold } // Operator + .cm { color: #998; font-style: italic } // Comment.Multiline + .cp { color: #999; font-weight: bold } // Comment.Preproc + .c1 { color: #998; font-style: italic } // Comment.Single + .cs { color: #999; font-weight: bold; font-style: italic } // Comment.Special + .gd { color: #000; background-color: #fdd } // Generic.Deleted + .gd .x { color: #000; background-color: #faa } // Generic.Deleted.Specific + .ge { font-style: italic } // Generic.Emph + .gr { color: #a00 } // Generic.Error + .gh { color: #999 } // Generic.Heading + .gi { color: #000; background-color: #dfd } // Generic.Inserted + .gi .x { color: #000; background-color: #afa } // Generic.Inserted.Specific + .go { color: #888 } // Generic.Output + .gp { color: #555 } // Generic.Prompt + .gs { font-weight: bold } // Generic.Strong + .gu { color: #aaa } // Generic.Subheading + .gt { color: #a00 } // Generic.Traceback + .kc { font-weight: bold } // Keyword.Constant + .kd { font-weight: bold } // Keyword.Declaration + .kp { font-weight: bold } // Keyword.Pseudo + .kr { font-weight: bold } // Keyword.Reserved + .kt { color: #458; font-weight: bold } // Keyword.Type + .m { color: #099 } // Literal.Number + .s { color: #d14 } // Literal.String + .na { color: #008080 } // Name.Attribute + .nb { color: #0086B3 } // Name.Builtin + .nc { color: #458; font-weight: bold } // Name.Class + .no { color: #008080 } // Name.Constant + .ni { color: #800080 } // Name.Entity + .ne { color: #900; font-weight: bold } // Name.Exception + .nf { color: #900; font-weight: bold } // Name.Function + .nn { color: #555 } // Name.Namespace + .nt { color: #000080 } // Name.Tag + .nv { color: #008080 } // Name.Variable + .ow { font-weight: bold } // Operator.Word + .w { color: #bbb } // Text.Whitespace + .mf { color: #099 } // Literal.Number.Float + .mh { color: #099 } // Literal.Number.Hex + .mi { color: #099 } // Literal.Number.Integer + .mo { color: #099 } // Literal.Number.Oct + .sb { color: #d14 } // Literal.String.Backtick + .sc { color: #d14 } // Literal.String.Char + .sd { color: #d14 } // Literal.String.Doc + .s2 { color: #d14 } // Literal.String.Double + .se { color: #d14 } // Literal.String.Escape + .sh { color: #d14 } // Literal.String.Heredoc + .si { color: #d14 } // Literal.String.Interpol + .sx { color: #d14 } // Literal.String.Other + .sr { color: #009926 } // Literal.String.Regex + .s1 { color: #d14 } // Literal.String.Single + .ss { color: #990073 } // Literal.String.Symbol + .bp { color: #999 } // Name.Builtin.Pseudo + .vc { color: #008080 } // Name.Variable.Class + .vg { color: #008080 } // Name.Variable.Global + .vi { color: #008080 } // Name.Variable.Instance + .il { color: #099 } // Literal.Number.Integer.Long +} diff --git a/docs/_sass/minima/skins/solarized-dark.scss b/docs/_sass/minima/skins/solarized-dark.scss new file mode 100644 index 00000000000..f3b1f387de0 --- /dev/null +++ b/docs/_sass/minima/skins/solarized-dark.scss @@ -0,0 +1,4 @@ +@charset "utf-8"; + +$sol-is-dark: true; +@import "minima/skins/solarized"; diff --git a/docs/_sass/minima/skins/solarized.scss b/docs/_sass/minima/skins/solarized.scss new file mode 100644 index 00000000000..982bd7f2990 --- /dev/null +++ b/docs/_sass/minima/skins/solarized.scss @@ -0,0 +1,133 @@ +@charset "utf-8"; + +// Solarized skin +// ============== +// Created by Sander Voerman using the Solarized +// color scheme by Ethan Schoonover . + +// This style sheet implements two options for the minima.skin setting: +// "solarized" for light mode and "solarized-dark" for dark mode. +$sol-is-dark: false !default; + + +// Color scheme +// ------------ +// The inline comments show the canonical L*a*b values for each color. + +$sol-base03: #002b36; // 15 -12 -12 +$sol-base02: #073642; // 20 -12 -12 +$sol-base01: #586e75; // 45 -07 -07 +$sol-base00: #657b83; // 50 -07 -07 +$sol-base0: #839496; // 60 -06 -03 +$sol-base1: #93a1a1; // 65 -05 -02 +$sol-base2: #eee8d5; // 92 -00 10 +$sol-base3: #fdf6e3; // 97 00 10 +$sol-yellow: #b58900; // 60 10 65 +$sol-orange: #cb4b16; // 50 50 55 +$sol-red: #dc322f; // 50 65 45 +$sol-magenta: #d33682; // 50 65 -05 +$sol-violet: #6c71c4; // 50 15 -45 +$sol-blue: #268bd2; // 55 -10 -45 +$sol-cyan: #2aa198; // 60 -35 -05 +$sol-green: #859900; // 60 -20 65 + +$sol-mono3: $sol-base3; +$sol-mono2: $sol-base2; +$sol-mono1: $sol-base1; +$sol-mono00: $sol-base00; +$sol-mono01: $sol-base01; + +@if $sol-is-dark { + $sol-mono3: $sol-base03; + $sol-mono2: $sol-base02; + $sol-mono1: $sol-base01; + $sol-mono00: $sol-base0; + $sol-mono01: $sol-base1; +} + + +// Minima color variables +// ---------------------- + +$brand-color: $sol-mono1 !default; +$brand-color-light: mix($sol-mono1, $sol-mono3) !default; +$brand-color-dark: $sol-mono00 !default; + +$text-color: $sol-mono01 !default; +$background-color: $sol-mono3 !default; +$code-background-color: $sol-mono2 !default; + +$link-base-color: $sol-blue !default; +$link-visited-color: mix($sol-blue, $sol-mono00) !default; + +$table-text-color: $sol-mono00 !default; +$table-zebra-color: mix($sol-mono2, $sol-mono3) !default; +$table-header-bg-color: $sol-mono2 !default; +$table-header-border: $sol-mono1 !default; +$table-border-color: $sol-mono1 !default; + + +// Syntax highlighting styles +// -------------------------- + +.highlight { + .c { color: $sol-mono1; font-style: italic } // Comment + .err { color: $sol-red } // Error + .k { color: $sol-mono01; font-weight: bold } // Keyword + .o { color: $sol-mono01; font-weight: bold } // Operator + .cm { color: $sol-mono1; font-style: italic } // Comment.Multiline + .cp { color: $sol-mono1; font-weight: bold } // Comment.Preproc + .c1 { color: $sol-mono1; font-style: italic } // Comment.Single + .cs { color: $sol-mono1; font-weight: bold; font-style: italic } // Comment.Special + .gd { color: $sol-red } // Generic.Deleted + .gd .x { color: $sol-red } // Generic.Deleted.Specific + .ge { color: $sol-mono00; font-style: italic } // Generic.Emph + .gr { color: $sol-red } // Generic.Error + .gh { color: $sol-mono1 } // Generic.Heading + .gi { color: $sol-green } // Generic.Inserted + .gi .x { color: $sol-green } // Generic.Inserted.Specific + .go { color: $sol-mono00 } // Generic.Output + .gp { color: $sol-mono00 } // Generic.Prompt + .gs { color: $sol-mono01; font-weight: bold } // Generic.Strong + .gu { color: $sol-mono1 } // Generic.Subheading + .gt { color: $sol-red } // Generic.Traceback + .kc { color: $sol-mono01; font-weight: bold } // Keyword.Constant + .kd { color: $sol-mono01; font-weight: bold } // Keyword.Declaration + .kp { color: $sol-mono01; font-weight: bold } // Keyword.Pseudo + .kr { color: $sol-mono01; font-weight: bold } // Keyword.Reserved + .kt { color: $sol-violet; font-weight: bold } // Keyword.Type + .m { color: $sol-cyan } // Literal.Number + .s { color: $sol-magenta } // Literal.String + .na { color: $sol-cyan } // Name.Attribute + .nb { color: $sol-blue } // Name.Builtin + .nc { color: $sol-violet; font-weight: bold } // Name.Class + .no { color: $sol-cyan } // Name.Constant + .ni { color: $sol-violet } // Name.Entity + .ne { color: $sol-violet; font-weight: bold } // Name.Exception + .nf { color: $sol-blue; font-weight: bold } // Name.Function + .nn { color: $sol-mono00 } // Name.Namespace + .nt { color: $sol-blue } // Name.Tag + .nv { color: $sol-cyan } // Name.Variable + .ow { color: $sol-mono01; font-weight: bold } // Operator.Word + .w { color: $sol-mono1 } // Text.Whitespace + .mf { color: $sol-cyan } // Literal.Number.Float + .mh { color: $sol-cyan } // Literal.Number.Hex + .mi { color: $sol-cyan } // Literal.Number.Integer + .mo { color: $sol-cyan } // Literal.Number.Oct + .sb { color: $sol-magenta } // Literal.String.Backtick + .sc { color: $sol-magenta } // Literal.String.Char + .sd { color: $sol-magenta } // Literal.String.Doc + .s2 { color: $sol-magenta } // Literal.String.Double + .se { color: $sol-magenta } // Literal.String.Escape + .sh { color: $sol-magenta } // Literal.String.Heredoc + .si { color: $sol-magenta } // Literal.String.Interpol + .sx { color: $sol-magenta } // Literal.String.Other + .sr { color: $sol-green } // Literal.String.Regex + .s1 { color: $sol-magenta } // Literal.String.Single + .ss { color: $sol-magenta } // Literal.String.Symbol + .bp { color: $sol-mono1 } // Name.Builtin.Pseudo + .vc { color: $sol-cyan } // Name.Variable.Class + .vg { color: $sol-cyan } // Name.Variable.Global + .vi { color: $sol-cyan } // Name.Variable.Instance + .il { color: $sol-cyan } // Literal.Number.Integer.Long +} diff --git a/docs/assets/css/style.scss b/docs/assets/css/style.scss new file mode 100644 index 00000000000..b5ec6976efa --- /dev/null +++ b/docs/assets/css/style.scss @@ -0,0 +1,12 @@ +--- +# Only the main Sass file needs front matter (the dashes are enough) +--- + +@import + "minima/skins/{{ site.minima.skin | default: 'classic' }}", + "minima/initialize"; + +.icon { + height: 21px; + width: 21px +} diff --git a/docs/images/ArchitectureDiagram.png b/docs/images/ArchitectureDiagram.png new file mode 100644 index 0000000000000000000000000000000000000000..cd540665053ef53e3c0eb01ec3607b02f44a3ada GIT binary patch literal 19887 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 literal 0 HcmV?d00001 diff --git a/docs/images/ArchitectureSequenceDiagram.png b/docs/images/ArchitectureSequenceDiagram.png new file mode 100644 index 0000000000000000000000000000000000000000..37ad06a2803cb13da66978062b40b9555ecbd55a GIT binary patch literal 15175 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 literal 0 HcmV?d00001 diff --git a/docs/images/BetterModelClassDiagram.png b/docs/images/BetterModelClassDiagram.png new file mode 100644 index 0000000000000000000000000000000000000000..02a42e35e76b2a1b61e7feade34a0271e0640aec GIT binary patch literal 14116 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 literal 0 HcmV?d00001 diff --git a/docs/images/CommitActivityDiagram.png b/docs/images/CommitActivityDiagram.png new file mode 100644 index 0000000000000000000000000000000000000000..5b464126b35fc8025f8b92e7261f5ed6287c5eae GIT binary patch literal 16227 zcmaib1yq$?*R4oMcXxM42ps8>Zlt?G^3WkjmvqaaK~x$<8l*XNNJvN>K%~3jKH&Sk z|9}5`@3@Y^aEyKSvv%*j=3H|{sj0|fppv3KdGZ89UQSx$$rCs};4cXIDNteqo5KYD zV|AC&b+>SK@o})Sc7GykGUTUgXQYwe zi#3#@_O@Te1UJE7+%n_Ocg}YXd01WzJFZQ*nMNkr3VIM%haKy8(fmHls?uH|>TtNj ziB&iLmEVccXy}v0{IpdgI~DiG#JB!{l?8c%2F5X_U|Ee&cgr4~19Nu5u#{$%0?8Ru z3U4v&H)d3P$RU=>9at-S-On5_f`~|G5hUOyvGchN?jjAvB$kUp16B=ZJ8T!$&Ho5Se$)5(!4Hq6MEl_H{VO|B=AO1P3g9Bl(FZlVD`|*!d#eHDj6G2 z^dvYyTcusx<1M_1sAu8!E@=|Xwsu*WJ-lxret5S0;N1aTZFri(Z|B0SVd5{P?eQ)> z5!hh{<{qWZ!(=FJG1}R`#qa#jwmKQh3T)e!oz~hWFx?6X^<(PwI96)12#!0;6VFM` zKT7X#_TaBp^X2XdgzhkwCb^gdJb5DWQeIj@%iDN28%0;^^?jeKiHow^@WR{=Uro&p zzH<&uHUmDB`kE6D`5!!=X1W8N*4tne9q7os@LeDCBJ(n66UAdb9(+s*Li-rr81(dh z-{r`&d49oc@7>6a=;;1RquXBN=E#DZ=sCnKvvH<8gF5mWSHSG41ortedM1g5k^~5X zYpx_1xBD$BR37`B<^Nt-!itKDs>C=sTWvuVcyp-FU<${T82P$$0U;lezQm)mvvcm7 z<2EC_Hcf~NS#T9ul4cZ8*66m0>XGvFXM$dXh{P-$^mC{JFUeYOtWdy>x3>0lv0}Q@ zQX2<*47EcjECn&-b$;Mi$pgiG3r%C_IC*DDTeIh0T2~^gaFaGJ9lcY030? zcW-aah^FpKiBIofDIb4;r$4E~FEY;fd@L$5-C$wQrq&V%D`@^PbF8%<9Da-+!E!2+cycOw3WukySfUr-b)Q1zXR&~(Q#SFZ;x2uHC5_KQG(bw5e{S*bVWZw^fjjo(Nnq2UP-{_jm=Ly-vm zmmxGSlb=DPol!VGchP?hhJDS9d8R>Qv)7@uf*L%ApEPMLr&8cR4SMZ*ys)%%gfj>= zQN-4l0DoCMnRXd@6$H`!KG$B08~Q2%@}<8WLZsi!g_p#&sj7I}MT*|7zk-BdCO}`J zzbd@M{dyOU2?Ww)46yz(&FcfHe9k6e3vBPS<7%i2Pj{?=Au`1(6{!d{b z2y0E(dSmY!UDu!U5=Dv7HENI}-N-QoqmAT}ojXgU3p0I*qb?`f>yvj7_4v3vpo$a? z$dU1@CsluA>C|8+0YW~@*?^wQ>0I4VEfJRP-SsAI;+PF7O!(%H?CR?g(od^5Y%`%A zs)89B13sKrE(6VIv{_gyCapy-dy%$0%sw}Pff#WdLtNPW$enPr?3-Z?u-VPtye~ti zSM;qfZh!nC&Xf1NI#+!RWpGtG)#; z!wmua0i(Q?9~S%=p2{wD(=kEioKP~4kt@KfD z#CC9aI5M^d=5J!^`8u#Iv z-ad7(%t}pVa8L@3O@QE&A|z|>*GiX6W-5KWxbRjIdi)jx=I-XEnR!9|%9hy(z1BF3 zzJ!h%R319%kL}m_M}ite0SC2XfNX@!;%Q?&g>E5}bC&#UsZmHB@cvmOACfQScXtpH zHMq7dRBYDeD|ddDqpNl>L*$j{Hu>>>y4;{tHJ5YMyeCU39)ovVc zrk?*@;|yIqpQl$Pw@cpUsMx-FRIqA?anqq1v*rr#krcSyYoGG^Wb*t2zoTy9t2#=N zmpOuF8^6Bih>*?Iy)mk@Pc6x@53>rqAEgYu8ILAlGdD3aV{;rxOT^(em)_qPCZi$a zk(Dmn;Gfwhsc-tKf9-e5aDb@ej`UnEDNax7vaTN62QL`KwdXJyN(g;1>mN#nlGi_Q)%a*~eIVuf{Y}FB{?U4EYfG;xDsqBrnO*sxPH6ZDtX@j-tPICt>!nC?3}A3#ayv_;iEn(6E1x|ip{4^#{suZ zIWGx}bu$J=<5`ihOu|%AOLO0zp+H$To;@xN(@2}3Kn$<9w{UFQK-y@|V#p+@e&u{g z@mv_3^_}9Y0|_G7w<`T+_|jQbnZJ9bD}Y$6(59DK+sy6T zJFl3w6pq5u&2%~vVB3y~k3>*a#9ytI7&f^-$woQn;o$H--tb9gYz=k_+BUPF@k~!q z%ctmf)X<`3I_po@J2NPW6JlZ#PF$$$RBUwb z7<8Q95IfUF8={P-oU*Z!F<5NTD2|4F{e3{d8iokWJYRy_Sl(V@;+qQ=Z;(q~iQs0n zg@oY?ubm4RS9^ElG4ogWM&;)zJ@|X8J>KX-jb`PB*63Uyl8cTdt_{s#+1b(k_TIH@YM6}g)8N|)I@ucrF&r^q+vWv9n!PIh zPR1F>$G5pRC2~n{s+&BvH~h|>Oy7)O@H<=xa_zrij|kJNu&+6ZB@@$Y@kaXSlEKEQ z&(|7w@5FADPa)?NoZYF!@A}fUbD?~Gawj;!a-$$gwA)hObFFuLDNyX4K)4;Nq79M9 zSYyW!9K3KteNYZYXRZ)YiQ2~n8(73bfPmu_*L^T{ndugI4%v917|pm~{>K(!!F*q1 zNMMjG=Y4-v&SUewgiV3<1sX@Asr=~BP*z^N~<@!;Dxa{~#Rz@=l; z<1qzMg~5%bA7mJgHMGR$Xupw)w&cG*QY9><|;Lw&XTmJ-a}t1|yTomJmhXvBM-B_kg7;|Fyb zXG!dGv0>A)mHBEMCdHgNBMLA4Q$oGPn?F-h$xQLxN^n%3i!YtS6wDs>I2(APQiJ(N zcjH?j4sbwC3hW0qP_z$X`61owIk*q<7@SUmkebV=G~qoB`(WxNd9d^?8L9xU_AF_D3DCk`?Zc7iUlL>>Q*%bR*pvBA}R; z7(E~$z#WSQL!H5tf+b4E>a&9 zgNkN>q*Q&9d*ZJWowVupf$Gm2?ny6(A?bP)4jQJ#dTps611LNy+0m5S7I{nt&7Ll* z-}t{#nCaGsWs(pR_ft(;1AVOfjs)UX>mcF2I*!d(ZF%3sJ+qyBGJT?1s$+@h)RtiC zlHDJ7BvxlHbHUqa^0Lm)lEVy?m6Pmu7?(e2z{W-p1%9`rVjU$b-T22j@NHgsAoe<6Dv zkMz#^UGFY!Or;&+Xx>jFh{zY-EHLzo*`s-x83cmZ zKd*`l|BOEwLmwj^qwiO8tkxS@#TDcJ{JkjGBmeO5ka!|AB4Q2Q9t_9cC0y_H5s@v7 z%@9e8?+aOK+!q@PMpF0>2$`QbiW8GNbnux}h6G%YV!hzbD&{aj=M{5|hATXI1?r2R z+$SdTQ;b!RH1XF+v~ZF5GdacW#pz*6Xz%eWTu9W$KRIc=wA)hKNu5MAJAXYOlEG>y zf&D=eaH2OF+uPqWrX{zhQ3KAmR?k-X3MBR^sQO)9pbZ0ZEZ}!127Z_2O-2^r z`x4^nIx&zto#a&NcJ>dQKKVHdLZLp~EAt8VBFTN1sDLL)}QFHJ^gk)Rj0zJ znNgRFkWjl=Ar*Kt{k*-&U%JZ;GlsH>r4G_StGM z&1-L=L(negGY?@NU_vEKdZn{tIXa_21+fK7YCmNr!r-CO4du$`-y7IiDVKhZkr z6lam4msmA)xGPh?;wqz3YgsxCFkeLGIB#hrHuCFwyP%NKfWnG~YlK%ub8>j629KVM zE<0J!rj?0RN#qg|U$*y$LKl zZwr3MT}W>|umst;LrPs^_f-+q&ybK_$;cEJ6(vBVS*Sr)po_R3zS97(bwL+BNM7Zd z24vOY!si58_p7zPfn}jE{apKLr>i&%4`orbwzk&L(Aa6`xF=FS({x~*aV$VMBwEb| zm>V{LeK1WS6@x0l(U)i^Kx)1-mj)zdn#-w_Q-e~~&XR{xLSa8p0d@ck6oV5W0EX6= z-Pzph3tw>_OMn8~%JSorM?0?%Zu#n~{GIt54#kn7U+H--A8UUJyY%_fOm*(dQP&T0 zstDM|%vLFx*&Yu}$|QemlK=aS5=Nx-+WcwHtJ5fasoXA<^zwepeTk*uxP^0|Oh=tSfx#v!>0(!HQ0W;mXnV<>d=@8Xg`nz{x0Q z@t129D|mZ144?xP*kZF6@K3f$rDW}!ex3d6?dkGM5cllfOeNK??`OO7J&v6?&Vv4j zzT~+?q+f9@O#?}Kc(C%9-=Umt&x}H$pLHrJy(%4{qqLckVPR-Qo_~IP*4^kJO!7-t zf>H62WA8+AC{i**r7I8`L~KUL1EP5z#*7b>rqgZn2hBMFM^SI!WNUJ!!sr_Cwj{Ic zCO^7fGO0i!!*OwOgOR?Pc09EN_?m^c+~wBaFNOH{PJo+5$aCi%)`B*`#5Dxmz7*Rm zl22~CIa1_PV~?BEXIR42xY(t)PY3+SK{dR!ZGP-}{?T2fRQ0{NzT;VS|H0#_Do_0*{4LTV;q=t$SqX_CZ?K;dTrMIDh16Ja z^42@N=mMz9I5RSRT%_uo@@`OLeM)XFmlGb)3D)%#e`G}XR>N}rx`jRUW>3c={6T+0 zsPx@+qJLEw>=y%GBagZ$(*5v<7ZzL$SSgmY3dFqD=!PPGXYA>ngeiaL!KUz4Y#v5B zrWyk=3_tz%j|NwZwEjvms1;xcJeniI{q22JRL47IpVE!ttlIj}G@5@}w?w9t?1+qv z{JqpJc3z{JE1L0}@NfIZ^i&QV2@B2Ci6;2IS`e1m8dy-0k|l%bj)++&LO}FuEi2j! z=KjmMHIl@0jN3o8@l_cr6UxD>_659>yos1xJ+z`LbY_F91&LNwh zHC7o(%GobpFEElHhNrGe2ZC3E*VDcwVda~?rx2PpeeS{q4-elLOQyqqtVfS`xi5S4 z&(@7LcT?fV<4glRZibWMQQ>3sUnuG31g|rZMNz@P?PhKtq{(>2mj>RNV9;U;mk)V{ z)muZ|zEERH8wdh+DU>N!I``eHyp}0|(B`)6$3B6#Ba&8SAN&(w3>VFRs zeROdg7LB-72(Ua2K6{n5rqx<&rJLF^>nom!-F*?uT~}siU+{rbS5hDDR<1mDQT5<4 zdH6hDw+}wksA1rfH!e55=LWWtx*pY7ve zu5F!V6&TRZ1OQW6bHZ)wW_J3_vJ9oS6HC;Dl+~A%&1ZvBfymm!@zJ~^b&++Y+PN{{ z{fu3_ClL0mBgdHxNO_(-C&c9XH-kRsre?vQm8S_Cdl3tr zK!le65_%~QblMK4y@#4+?LmdHu#*lO!fMdN1OLOAM*03(VfP9zyfNVjG($MYmggO z@!DAK5*0hZ{1Qd&vyKECD7n9L$7N;#<_fkp$`?V|yMM+4we*>rpX zYJ}=7-^$e~z3a#|>jFEL2R>sOt%8w??I*|dpFdza$$it*pg|;AD3oKV)o*96u4^!T zG>31C;Gw<(M=G^~QCvCM7icA8e7OWT4FfYhxo5wf>XT-l5#+cH^>CikD5Z(qKtLeTRmTf%3nRxcCNOUCa%w1m2a zK{ownq9~~TygT@5)c&~wA;T~FzYL|6Z{aH}$Dcg$_bLd*u4ulu1^kX5bjozA0pbP7_Y8!+aTL+qF4orc#!gFnLe9UM1Mhqg zhW7v;d%0%o|H6fGDc3MJDkm@r`x8tcHmi9@++KNzc(ArqJtuGj@!76}UwZid8RU9< zfOB`Twk;F$QNVFdt&zMVpivy@A_UQ&7ETDqC)vb!_$&`ko=booSVrDyqQ*)S zBJ{{d-U;EP^m5!>SVRgMRgedWN1+n1GN;ou(mZ`j;j8c3WEjxV*5KZ_My=Ckm;kW~ zDTLuO4V147C_}~@Pd>aT-P|mxvN}OB{N{UV-+cJ)=4OIECTSj_S$wG{jmt#zHzOU2 zSaxzkE~gIW>Va9is@U88VS#7n*l+3{#uf<>pRc>ZTi@Mb7=87YA_QNr^7KR5*W<_Hs}y*qj6lW$#5GiPAXC968x|`*V&mii~#%N zt=H`}wH80Y=Bt=aj(u^e=D35SESM7N;4EMRrYnkpyG@R=nOmgxiVZ=rWCF{gPkXDi z2XTrNdjZ}u>2hjEaZm6d#N=^?q(J>pPBByRNKY}-cM+Dnk_ZUwN2l4ralcQtj24?j zhRYWl4wHLgY)to3va+gd$4~BVo1?sFm=&Co6X~umFIr+xcx^oWd_}t)i;pP4Ts5QvtRD@#Yf}_5%rnG{9d^Hj6o*adjL0RW|qcQx_Sdl;AWx_CU|`i z5!kvZA&{Lb%bsY0T<-z~YeBFwAvds7u|%}$0os$e{B^m07{jktKXk^t+Apt5Hx5=> z!Qiuh`ckTc1$Z(wK$Jqa&M8}2Q^hUs!uTe)%I1Km+N;FdxA@OK6{g+UU zq{;kQcAL!GoLarwh;evRi07UE!p_h8yMwO7Rbl*f-23DCNdCNQa}Ma1nnN1zy#h2F zn>?_2?&5;OsOf8^df{9b*39`4soQqiiPfvnn3?;v5GT^khqV0V8RU|={n*MV_uMk4Q7atlgZV~A{A$;&GA=- zi7vSJFw8Qi^@@cC*s_3Bfk1p6aj$YK%K%L#IA>$Ze1{7_U>v^WosQR#;$ zK;b}guO=wLM``K5{&sD`1Cr*F6l~k7U_=!BW@4%v*ZNv!0dn?-|Ta9Lf>2l z6+$?Rjl4s|xJ){r<$QxSmHM~O$eMX*NM2@RTIg$Wvyx76*jaN!KT`m~VE<87bm!-{ za!N|?|5A>IF|}nQTMv{Ysmb@gG!x#Yr=O&?7+CSAq6cIM3IS#?$(k@3GM66&>0t;k zUrkI-?rItXpf|c-XIGbN+6xfHtEE(1|3}&pg0DsU1(zV&-im_pznY!vhc2^4C$nwP z3l8=QQTXXN%C5~f+h@6iB?l`=zb=q0w}%4$j-(=pL`nUbhPEz;@1JE8xBYxQt!7?kXdrgUfNSCLbB4Ko?xo!K7^g$?>lS3S_LWdu&kUly9# zEfbSD5r3ips)bn<3n}}SCxD_M@Rue3>)k}*5uJ>wx~PC74D#IDoPA^+Y<_^@U7uNg zo5q%KdTsN7C%oLW$ymMr3s1xao)N^2s>a-gvLOSUmm@VGgOEGT*+_ar*^5fqJl{h4 z7g)H_+!4o(_Jlfz{jIm0g_4{9Gi=&B$mlq7{{_e*Rw4tsj$<;+2#9j*;Oj^3<1mvm zNwh1e!W;ezVeD)@{{SVK_YwXVPw>xL(MUn#Ieu#-(EsI-EWZ50i*?p1O%G#>#0B7v zO9SK*U`q#uV^G~bL;`Fu>C%dh7;dGn3%rMx%jt)zBZVHBBuzSUS{t(fxbQ&e+NLaD zzHEuG9L`UF+kxhoQ5hgduwI%w!elw}k$QvK6NGxfue01Q4zu6dU-{ z@ejmUwp1mNqR7^7rQIsu+VD*?N$wUExRYEE=$w1~4DkQ;2QD|ab^y;k-yHWUPN?0v zC-I<6~(r4Bwy4 ze|B4${UtG38+fg}-uep&YiirlZKhf<0deoZR^MBPmWGcklw;ph5I*#@ikPfqnm=%P zK;$#HbcXf=`p?CUVgOZi6DS>u%PPpPGYHrv;{;Bk1Yw&%lNM(_1RB76(1lD_J zI(`|r3>YCOpAZOJ9ITq`6a#`T$aLec)8vI-S%6*8TVp? zwfNlSHE0080}6?->0OEiXALDKB?Sf4ja(le1(S0o01_C3EaqB$^6n8_V>JXd$pb9( zU2fZuLTLE;`9(xTn3!bqACUtmX#dxMfYyOvwRhCR_0FPF{>|_k#%#;513wcZqq$4z zm`@T!-z*&xcy~kgg+{Sm-Y^?~1iu}@Sw`lXOOF5_KeU76rRtDySosPiFkiC_o5hvw zQZIlP8CQoXjJN0VHf^49OVk(_8ylOFGAAV^G_kzu#lpkY(+snma-r#LDj03 zQQ7bDZOw^wsI939{c8;nPE3bD0VPzyXevH}RTV(sz| z7^FYmuEhoco=o(yEm=oLZgXQJNvuhvj%yJ5s&trpd1tI_Dr>62H;0!tBeP@zanWvH zP)hgt`P{<<$3FrXB&;UE?bbKftjkzV5v?siWNRR`yP;ti@CmTc3|K}!o0-NJ%3@K9 zwxoL#5P^sFIgLt}(*w7)j{xDs2mak*`DA09O)Wg_rSd6sZ2*W64M?h-q_yAQ#aAxg zU0BEgNTC~47rn56u!GMO9FDPVrUwZMGb~M2oMG)=2jaP#d&W`_P31_%+7}^He>-%% z60z+(cVgoDGUomJNE|xfE+AH0`t{AsOIq_6O1*`%thIF1{%+0x?>TaKGN-k2$kXwaWK@mF^L z#?MR?b+;X*3V6;^664tD%}p6%@Xh~xuNv^NEA1x3U)XDHj~A{*;aRV{2iO6k2{FL; zyGdH~X2vfdr?+WTBLs6Ay~N{ykKNDqGJZ9A59lfG=KfD5#V%5mW=UJM!%ue3(P#p< zyW`xM>byw~bacb_`OCvu(2SD9 z6?%ik7I395_WeWewPuCTLnCAum=Xckb#E-c9Q@Lxw^7 z$E=AKgx9@0zf@(V^tSO~z8_FjX){~WlF*e#YXDAqEL!79`%50miyww6g8o-0oZtKb z?T6D1SNfjzkrU1Rdy+x~p;a3-PHB+b2sr;e4AwVZ=nHA#9$M4Dq&n-;MYA~sK&cyt z-Nk`107|-^Hl@%=<=8|4lst-8+p zGbC=}oAdeGooYhjNpR0mNV`y@WXj`Smr&`xJa#<@;&7hlr@}z%GLp+mB^a(N3JooH zoEHUej&MT&IrPu(xNl}WH|J?dW}_>y#V;LR7b_4nQsTnfIhlaB7M`MowU!hku4(bu zO|borxo9o6Y|5K0NOI-+xZu#JLg6(+)xySE3v~QffFA-QA~9DUFMi4pkINu9jQJT< zk256<0tCCT4ZYtzSvZaFjU}_R>8n|%3PfKKNFT}0)o;C$dQaKtRBqA76nM!HZjwSB zM}8Q1wbh3ZH73L&ucHNC%$O$!HNJ%wqs>)JwGySGFEbbjiy1-SLM)v^qf~E?M+4)9 z8;8JKx($Bk#Dw3RZruk`W)K)^(HCkAX#l<~4b6&Xb2Hb^Y={u2npF9qH?|PClT%qA}LXZ(*wDYf+~=*3GNm4dt-A=Gok|+1q9%vIsoK`a`wXG583Zf#Hd;O zxvv7%&%u^rRJrxlmzliHA|kmfXAJ3_w#{Ha*_ghRcq3y>v|7Xb*D9MtG5K(w(e<(8 zf{GoR>n61wQBt66HjHTVc)W|OQz9{AY{mB*e z``mw_I%YFKsqwImPeJQv0e`eEz6a&Fd@qNQiS3}4OE!^V6|ISM;pqfmkSi1LqPkDY?@(0kRGV zc+EtB(+~tJs-gt09C5IQE*4Oc8pKleumK)l3*hdRQ$gK+Sc~&SNbvoIf$|J1f(eSt zn6ebU(~p7;ep>sZ{#|{}Y_!s_<(J@0THsPh_$^BCqAxmEb}wWwwX2wo9L|+i?C+(J(t;DUFf0L^ScI&8q>(8g zt2|Z38<}?}$r_6htgRpxfSR8>^{K7M$K1CG)lF5pxB zx>nSj+B~kL#F=3ZOO`gXpY6KEXk|=-SiJ{aGLR?k3s-Otj~U=dJrE6&1Z1tEbf7_E zzjcI&@L|l-rOmVA_FNCe6{YI-b6tzByWVUGdK;3$Ac&8c6$zV{*vpOml09`nWlPzs zF21gLQKXQL(NWdPnXKUrAnaOJ#%?Cm@ZiOg_M-$`8Ae<^I%A$Jlna3JRa5EST4vk%Y@V9K~m?9}wtjd1-_>Y^rQfLZC0;22=qg`YEAHVGk z>lv7tk>T~x-;4+L_V!YW1>8&&D|Qk-I#7Jc$4VRbo~?oub-{n+|kWh5H|rw8lS`&^$nnxQ=o@dGq!u2YyEa6zs8@~V$*2Yb$07tgUW zF1k8p{(=6C{|)+|F8AKI%_UrIbuLmmld$^gnvYp_VFtdp*2{$sb-yD#jnUVBUYh~? zfjJCAApT?eJvk{USfB50Tfk=3=Z;t;{fbj{Vdim%$irB@@E2K`X&II^Y+r|zev}=( zOM3`!q=8pMqv2Gotr?Fe9r!Jzi|bT{!4{9Ev2 zxt1*kUxsDP*ZAjCAZ z45vjUG;LHJL9|aSKZxuxJo;WL{b2l~6`R>ZU*c)Y#S~J>Jkl&LFE0q!CxrOlxPaPs zA0*%APdiK{J&dyuX8Bx(n_QB@!Z2kEzX(aX;IJ6+)xTzkwK*O}A*iiV5=xrO{U z`X{mX9~e6vM@`Zs5E#9^eXZfTwpPgiMB11s=u22toG~`_v+@qj;NIMi{5kq7N1(k2 z8{1~Lm317Fne={Gu0n#Z)@}$wdyIj7PJ3&_l=0x0aCe0vySkhSNI*K3IDu>rAbf`bAoni8v`muI-;q^Uw*U=54B!Vq zpENt;@idvYZ3e#ypB{kkK-EY6|3TFWgd=>im|FgCXpix$wliOwQMoZ;1+~Io;Y4Ov z*{c7kKsy-mvEA1+{K@;9IrS~PQ;Yl) z1b-U_q(uH=g|fp8Vh`&DWTL3?C*R=zo!?MWUd2tDyY-eygRbnOJI2Qf50anOTp6#u zyRWlc`TJjiCCRS41R$LRSizz+Q~S2%YVjTuGsCQGVNtDv?ni4qUcJ%d^gPOWf^zFC zmc(^Pe(o@YWUX%>xl%gI@{#T=V5C2+iDsmTb&YAjD|ZU2(-Y=FP1}7DQ?C3?KeN*- zfZBL-arFgy^lVx8;L?=U&27nwE6>ABB%3+36<4eYoF{j9s|lK_xE<%o5M+ zjN2ZS7#ahD7o}r>oxWV51dYd4l}TpxHCFzVdH-g2kSJd6;lH9GmLQRUUe%0PNBC#0 z+xz>@&xy?~ERx$$<%vN80CS=hgVU>!voZG;Y$y8aG5g3pfKlnI@X6fs6EQeAI6$ij zT&(Kq>OejZ2n3oLS+_33j0;%xu#kyQ_#*;U?PR4dVfXuW^bM*yqU4@o4r&Z6HN3iN zF0^=?eQ^&71s0*EsH7yK{ZH|PYFnnuL^}e1nGDDuM51zoK_mH~0pbC2B9f9MWrwQ% zl*}qs%uA!Ja?xXllKv|X>Xi6b9Q2Tu@+b|We-Owag2aB_^Foz6T@xVFIM*a+fL~0; zX9)(RqnYx8$iT_;7n91V7v{9GnHk4UvXi&Qje7^vLff?IO!ozHCboE5jVmX&01(KO zDQ}Aj&_F|@Ki{pU> z1870$uXJ=!;B#r4Um;Gc%7RaU6d=yDg>X8yD>X_ip5!rdpdbTsl7-tj{z%f{TERm< zqux0;cY`Om+L2|&|KGVmB@eklHve80a1ygX(EXpQ;$1QXVrN{Mko3T#rBZ(dhNh@; zf+I+xUy9|c$WHFF*r(Rf1rR3ZYE6GLhwR`tnr>%XZ7>+lmE(2=`9Iz=n=uBDAp_UP zM2oim*Rq2dX{BUj2-=K50Bs?r(}f_6eBpqboepse&>p;_-U)|&RWUR)EK$jR>A7FG0otk9Z2D{R}_l;en+=?HBG zN7@dMrv=${g=6>~_7EK(mEH5=`5*y|NVC^|GLz~C3^vw^gZ!XjlTbzGo$?Cr2bq3< zH)9eAJi^&~tkOVE91F%q0`cd&!#*lQ1$Fgt9h0{&+%|@Qq{FMLtAHaY6Pr%O4Il#a zCL^E=j3ML@y}xm5qM|Yr1GIGqRed*pY0q!JHKOgLaWkh>r!prii|o$)=lndN zWBOWEl`v@coOtf59UcXRvR4fQK((e&b8{a8BVIQ)Z+U4qQB-Zw2Ph1uc5|uMftY)MU#8F+iD!+HOV z%KteaKMAuL!FxDcC{6BLNf5|TE99jI>#HhB7N7T&BBUV(oPf^q+Mv$9cxIdX`75UP z5BWe3sy_zX=`xZgp}qA8ssLR;VUwRIOz8tl1OnOM%kh}$N|UA0Q7*up3Ndic$?yTc zL6Kwt#t%?3gQKIH#v@q*m4Mt#lFsMHXUzyP^fuSESE;P8scpo?#s7LxCLY0RC{UK5 zyv>udGwnT)-^uTeeGqq?l?anS&G5j$>NIYs0?=&)HAokjI}NfGRE#5}KU= z!9~6sMe*EQ0QnqQR_CgUUc%Bi48~rALHi4hlK_{5h(?(3w_;>Fjh3!1F(Ki`_O_7s zf$14WzDW7J|ges61F~|q5>py7)bCy5+yK-*o)@69)^3mjs-xYm8zu3ek@zN zT)z|ma8S?|pJQq!BW&7-Rqh!ad;>_){sg9ik2i)njhfIYUjDG%lY*DM`uD?Y$tB&8yRG zKsOsL3eee)+V_c>^T-JaFl*2q_U$h~T=(mvau!pLcjx^4^}$M4hOYTkCa(?fER?9` z#sN{vx=vxdLOtt`fhZ?EUY!89&oH)TWn~5EKc!`5udlAmQRjd}jtENM{^4PaKtQ-B zofC&7BlE=K%|i_~mw*DY z?&k!Pa??QPDX@U-9Bmr-nsG;khXYyOb<_QX0Iwg&!##;!Sy@RK>xO?w2JROZxS$2{ zIkgb^x_)poF+IDbS?Ee2!0kQ$u1IfAz%y3P{gCJC_>Lu-6Xz=5c?cGiF4xUEku-*y yluW&+DW?+Lph^QmSrrX~(MMk6|9=WE1CxE2TM~=*u7Pa#C-O2X(iM`X!T$?`*Sq=v literal 0 HcmV?d00001 diff --git a/docs/images/ComponentManagers.png b/docs/images/ComponentManagers.png new file mode 100644 index 0000000000000000000000000000000000000000..ae52a35718a82846d19185f2e5bed573d67cfbcc GIT binary patch literal 17411 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 Nlg1WCg~u-k{133EV@?17 literal 0 HcmV?d00001 diff --git a/docs/images/LogicClassDiagram.png b/docs/images/LogicClassDiagram.png new file mode 100644 index 0000000000000000000000000000000000000000..e3b784310fe5f427feccedbf734be63b9e810825 GIT binary patch literal 36640 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 literal 0 HcmV?d00001 diff --git a/docs/images/LogicStorageDIP.png b/docs/images/LogicStorageDIP.png new file mode 100644 index 0000000000000000000000000000000000000000..871157f5a9c35321a8004b0017fe6a0533129e1f GIT binary patch literal 5808 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 TX#zhdLZYs$rBtk7`R2a>OJ+-` literal 0 HcmV?d00001 diff --git a/docs/images/ParserClasses.png b/docs/images/ParserClasses.png new file mode 100644 index 0000000000000000000000000000000000000000..edfd1ff789795245c36851cd2780c707090d0460 GIT binary patch literal 29478 zcmdqJWkA(k^ESFc0VzpAML+@Rkd_W%^;&ZXCow0y9e8iFFa`Cnfp4b>%3#vR9jz$#wDzc5wm&@F%T=ueBD&#y!j7 zA28`yq3ZK<+&IvvJbNf}j>ApZzQ(dMb%qba&HG(M@DYyc4+5EJia;hEujPeT7|%z( zIE)+21O$Hd*BOel-M;F4vCG$a0IhbZ3$ldh1 zoTiO*JikIse&LH)yJ4sw;_4M?o+d7>B}J_6#>;?A?Voa=aAaQcAU8y0Wg7$9vTFOjILfcnEb)?oQ+Z19m&9 zdf?9ZkT*y6*3^d30c(+Xp%0f9rdnuQu;1LLlW)bL5R`D@Ft*rX362e^IbF?%HjziB zBy=c3^dVj{>tz-Rewek-Po+e{!bawo?#ygcY=@>H1 zKK>9-3Qwcu@R`prrYt@QtC-ATcfhB}oN8fR4b|@%Sx?Q0mTC31-jSVfix=^`H9%w| zsMyolgYOQ|j9E*yTv^YDP)aHcy{pb{ud44j_v-p4=Q6s)49ho47CJCV!W$#hnoPEp zf@`dOI8|C-#KAJy#9ldyT@fDlUVRxa>ln2!LkLi z9oqBDtff?4r07#($5S$vXv_4tv$GtMzPO)f2@}Pm9o5Ad+tOK&fEPl%lhC*BU)?y} zGarCgSg4f8;N|Hl$)~=ol8EB!`x@c{UZ=0==;%-H;?|yAH5nVjJc`q6`l0vn-lE+qlvhO z-IeYq;MRD#`FpHg8uDLb|NAumRR(U2eG#1BizH5j`X4L$Zxf+f|Fy_}D@aZM!Czzl z>oose50X!-2Vwu#=I0JwxBs!C|D32c^XlTF=6o^WY}!)dHPGhDvihCF7ryx0A{c7! zCU0aP6#Rt9$d*k6GX$p(rjsQbmDXDdG~huTvz1T>At9kePG|5@D;6Z99{c2Kua1ig zpGFIqH%Iw7g>iIrG!a1#_FI_RO!*(pXZOw^=kA*c!?oLfzk^l(r}vU*2QyC>6C8K# z&lh}f7!4R)Z=FgLh|wy09H7i-_tlfIuFDDWx%pF5sI`0JSd3(MURgz+K+kK=*Kt#w zn+tNf`3qUo($MTp{xqC(Iuc6@6Q=5v8zw-tmRvr}FL}blH~bmjcKJc3uL}0i;9&bv z|2q_Td_)9<*1%^+$3qfa=kuRsv*mV1va#XoB#BC9O7w@cLO4c$$Wj~<5fi%{v|#@< z97|u7;5ZrXVe|-fYj-T(w}UJI%Yp-Ok-zxf)NE zA|oPVTo3jtuV;9vDUy=Y&1rPyx`mssbm%_(=BhEz@LTu~PqSQ4Cv=xz(PG3cwFY5q z`j(i^sZE~FI_{;_;j-BfNrd2Wbjsw)YyjP3lf%Km&DqX5rz9$YzjaSLq{eYL%8{aP zOcZBG5;gw#M@NIyxq* z?dhrNj(XWvM+wtx_hw}#%S`8{%1rZBtG<54cfB@G7Sbc7{Cm|!{Thh5Zb$B!0e3L< z9s5hcPLL;PRv+eXulDkles0E^)>b&4ndrxNcX!`w43E7W=rq#bm1{|Tur!KB9m|l( za5RwJdTaFNax0(NX#C69uf$j!7t7&;#%Lqi^4R{KA%iDEXwPTM%|BC-Qf%_CUg;;x zWBF5Bjq_5>JH6bDd`Upw5W;o{CByfHVw7TGzTva%51CM*shP`0I^_J8&gA4|n(BQI zg`npqbG53Z4*NW(f+f3Edz_YAp@+a&K9B|ZO?VW=m-R~^))Yy8N^ZhZf?9j|~r7jt&hG~a~n`8MBX&*j(FyfiGHy23RuLUT$O(DF+_hmhjg%kg6 z!q-pnT+TIq6u92q9v>f*NvA(LIXXP_w=>4Kn}<52RIC05JDO@=ay_mU0?*&rr2PQy zv8b@{!RcxG%H8c*9dD=;hm^y~CV!f`%f)L(%-t-mtL$ z^&s&rHiV?wHSqx*X2?6x%DhI;`5(?@1hw4eVk-dBO+ z=ARK&4a@ZZ`k#B|JHFvxP6mN&gR>6p1LD11Kp+J;zN~zFzv2`)+)Q3>{%;56mw-t1 z_gA>haQ}aPZ`Agw^X#Oi)#0^d)_V>lls}@7Vt*IFov2}xQP5G-C*+Ep&E16lXPQoa zQBi}S=iv`kqr^Fjoi3td7)hkbrt16uJkmu(wA|YK2^+J(g%Ax}x3k?WnWFVchV@oj z2p6Zjl`5t+4b7av2r<&rg2-G0tCs`@zueAETWG-b_M*tgC&WEhw=XH2M0%V9Zk5I9 zZCFX1m2=nE_a$#M8Vku~TL*YQ&Lfxp82EEyeC_C>I6h{7h0Xg}ajNuoJK;e9`%!oI z4_T7oOj^H^xSS8)Cve&FK2lUbeyg>f+yb52yL_oDq-BdUUJv44wv_gDdnnulbQILTzr%thf-Q~7NWphnf5Q7QGFZE)Xt(ub z@!7TsTUd9uNBP@uC=*^m0ph9(F}iwB`Uu3!+Cnv)e@m)v-xD0!k7m>U<;$4bQ6x4? z`}mB_)6{h`GW)tayv^OT)V%!3#ZKq5{gjLl92Es97es8-=pW2dC3kxBJ7 zT9!(|jEaSY`Bg)SkzzMReuSE8#$cgV)6me-g9lxryTmVyL-53isJeTosvQ^&_vhbh zy6SZM61mFB)z-NlPMN~_yX+EYHVqqZcnqiFSd(5{c(p$Lj?>M~Au&#iOZVHU3jFPc z39XS3yS7Itgj7(kHF1?5Jra6_>~gWPc(tCoB??m%O8D;Xtd1hp;M43ZbGk$b=GOMK zeU&Ul-R?}lPsPdQ!<9gI3<9OnW5*loIu^^6#U(M1L~&@n_V;3wr6-AWE1N9=8(*1u zaMMks*IHoAF&eSry{)R=>^zMn`Iq|9Q0&7=1anj!r7K_JA+&hS)<{_1q#RveFobDn zR9LP-p4$gl&$=cKeWe}TXlxuz`SQg|%E2DjGWMl%+3sqpFxnu@Kx);t-mKGzFv8xFix<^}gq*6x%-`y!}+-09#8 z$+XDcMDcL~E0wPguTF!7O;{+0gk|3l z3S!lb%w+T_q8k!JXeOxx5Ite2|V5Z2PET&3Ujb>sMW+)7t|nV!ZP@ivn_v(dwUEZ${1 z93LSXW_77M`a^W|g`(mGUJK3Ri|ZR(Q4tY5`(Qk=?eRjZM<#hx6Kjcy0lw|sz0@!H z?{>;4GzYq9t|--lP)${GPqkf-iyxizYM7*qPRtW1g|EkwM%x|(2T)^kRVShy7GcW}=k;5xmJW;R6K z=~F-1gfm_mPo9&ItPK`bn`)x0h$FhBiPqje#)bBjW?&PoWy&iyR=x{FVq?}Qixdts z{uAS~+e4i1V;L@d@rEA;VX0}zcbLofT`7sMIk8MFVS^;ZtHIAOh?yAHXu?G23GK?m z_a7Z?N^2ipofFlZscpo1u3jHLE;DsKTZ;|ZSiFOEi~rW47=xir%KIqk ztBxBFr=~{f&DLg*E2NIvYiSQDtqsbj_Yje@IncT(OaNt(eds9 zoEj=l%n^2Ee0|$A5j%qpF3X|6f*6CPOZpL?hQ@(YJujKQZkY*??5L-z$Q*>q}D-AJ!jUB(6)-!gpv`h4m2rQNmyL6D(-GtDUTT9nN<&r+>6 z$aCs|rH@Lv+AjwBe+b8B zpHG@sh)(JX5}HK7CM_(ay;B>|L!Hi7e?yg;y6jiHE-6-+%u;97gSSeu5UP~OsT(b4 zQCH2o)(f?`ats3R!P$XOYRmoPFGY9R9IVFE#R^lTRVt=|IetoxEV)}4rIthqR`ReLUbr0o?(>S-N3y5-%Fjp(EI@>?7B9!w%LSc#h7Lko}H-?A?3lE z_C2F#zCs=9RJrSE;i>&V%TxN`&+a$AI5(oTr;t_qTM|#I+RIJ9^>xaNVIwN#%h13N z`dg!E`FWuP;&D%30cXX=en`&@56VcM+uM$a;FPdui=HH{ROe|NBwQ!ad@;kS)18Ma zV?%?7?dwKM-$Qy8PT#Y!n9ajzsPU$+1xCj@`|4}w-Rop7(@MhlpOEOqvOl4DDEFh< zMunQ9YABe$*7_S(U{5&me?$~Hu}P7ZvEVN4ZZ$T{i%|`wH%t;tkUz@-u}hIr-}0AY zg|EQ*r|k2;o`2Wlx+6KI7QKdTD|8#I_aXBQ)qkG8q4-xhF)MQ7jyvTlayA*b0sn_b zbP{oed3cgr)hBGlj*i)RvNVddk^g083w=KnO;$?orPj8cbpND_y*-07SFF2{|FwZZ zv+l;`H8XZf9?pFY4=M1!-q#(WEVGyd@)gltZGQwQ1Ux+PXtoCLJB)O3s)Ws-9{nO; zX=rNKQy38t10+fn^8c-(lfEylyG&pDi`ORaZuTHsR9v^Ww7a|X-j8QuqjW<&3{d}( z?C-SIcD$G*N26&YD~rX*T~(znVY2dM&}2sLHPNR+ZPtHw=n~AAH7>2{n2f(p9w?N{R#!W1jU|5lmbrKEr}qaZJzm$iX8w^OTG6@70{O=@C^68(YAx4{FHBvs4TEs@OosKMrcHeY zo`QD7J4*|sL+{90GMU@i8m&JygPgEP=M$GP6*i*R+7%UIDg{Y)v*!q5iR$gwyhxIv zXS2#&uC>tm*3W;RGTa#@Miu9UZLMc}b+0*8C8Ud?y5cyUk1p19osW8gMa|#uAEjdRR(f3j#7Tmwy`e6|1dj(yh3j&GfD%#6H2a3a1)+`j22>39{Kt z?ze-7p@gBp96;qSFaCHpSUy66bArKc-()l!77-iP!GXH}obuq$xVnC!_|~mP3nL?k zwO$H!S7+f*pDZSnl3u)E!;-DLW!UNN%)2RO_#>ja%dI_E^m(Ya6`>$rj=bq)Z+vo? zQoY>a5u$R50=uaiL>bckC;A)*m?_7bhoyw)g;yG07v;h#RvsTy9nwvJjCntlh(hDtD`~xH`mFov(X$D`KnXQLCB04 zCqg$GI=V#VZ2sJ8cehHZDDs~yH*aB9F3MtK&{(1mrp6(6=xWdAL1=1f&hCu7^lZMW z^j(zlpMouq))olkP?_a=M-_zA_ZX?V;VYCgFr)LWe7FP`hs%Sd0i$TkKf*h-O&eR2 z0cVuS)#>Sw&m$_(<}S-obIwz*>&Y3b_+#ufS{J1b8X5zgk-9icakIeT`z1+PK}Y!S zvNXw-a#{}MQTc4?&Kw8@)iYJJxX3cg+Xi=47wV>%`;mPkcpkJ1%7vehbgiVV^Dc-pT0=5@T0|WtqWfT#gr9dt^&T zT@&K(Sd8Rmr|f*T+kba!t2R~Y3I~*b)b~!c%Ar`c0e9BHaAmwuP%*z(Sg73qY-0%5 z_qt6gm)vbY$ z{;_ZfWE}aowg1Qadh7Ncs`1htx~<$lZ3##@^s{H6DaALs<>2WYibQmm8p+r4f&UsBbDY{|5;&_W?w?V6N=ss_BS#;6|H;{LJY_X}H&x#ICz402kCNMdufv2ZA}Jr1e~ESBP< zc^ukTrwB8eKEG9;2a7xai)5BOhjVh^mnUzk$0RUNv$@BO@g>8Zm%J7M_4kLjCQR^)UBgp^K)EIr?w{x(PUQYQ`G$M))i|{NuYI zj40^eRaN;*1{de0pgIzXQw_vG-{Ujc;^Jap`L3=fBl5)I!cs8f9W4Ra!hDU5FRo%~ z-4NBQUu{CliFJFM^HjGixPH1^pC8;^)!ltxn*AQaS!pmrUOKMvg2f_LES4!pKAeyL zbzjU%pM(7;9UV^4HpcAMO|bW-Dn`WR7e?G~!2y_*87{HtH?zH(Gdc1FfJ5jHXNFn| zL^on7<`cui`fSEzA#s_PGz9gOKm?@y5`^;^Fu2r20@Usi-^W32JD<$V%oH|qg za&rmLhg`W_B|?F~_O33BNdZ1S$#6k@=ZN7v(CEB6-NBeb_-2TMi8%})iOEIR+oMGB zcvgM^f!U2<1R`Rcnw!%fW9sVY7~!2?XEYWXy*yG7*#W50(a~X)#`egXQcyxgHZ6?Q z4{=)CT((irpME79bWz!CcPR%I-r&NiSGNd3LEILSzgNF}5Gj&ZUsX{716#z!%xN%8 zN*)iMbAJG*mu!Eu%5U4OHB)JAZr(yaj)celjk7nF*>qztt>lfxvQV;du}+U%jzVZ; zB!Bj6u8zQY>=?wZ>C)ZZ-4dsZ!xaw4(|+h&!OR>idwUo{fo;Qavr9jWvGJmml!ypS zDRYesKBY2~p3$n$k_`sOo(83q0omxB!O!S*_GW8J`jdD*6YRhY@$9!K2Vw%C^#OWn zYAWTZvQybxk@945nJlT5inW9)o1pIs5?nV7vO*#vVXR(qiyuqWY8;MfU%hgNjW5|B zmX`2iyt%pYL3%b=ZmxAW=eSohxQaD7xB){oH19Hy!XF*2WS=%W#a1qtOLleUQw+n; z-_X#&AXmGV;OMEEEn|Upo9KG0u@(7Jrr`qUNjmeXSF_ra$5kEsXFEi)uw+q{tjK*Ke$i*im#p>&`FGsf zarpMjXbloVu|iQjKYKbmCyTVZfT7A{@%ev~>fx<`_&9 z#c?)GZ@no~nnVe@$0WE5ScDG#w=JWY>ao;*&P!~YPL=Y1a5%hS|4i zh9;a}TUh{((8dQ=f1dXhjkBwEzS3TNDQe3nm{CAI4_WWtXhLDObD(~N_}=sP8Ny8j z4x&~ht_{-|sQR=5KrZ_B{bWdwWs6bXRDcJJ=-{qeTZ+*fxOefYY)5z)HXZ{dD_ z-otSwqoZ0+_E%)SM@;^1p+ou^?V!0;|M@RXER(9!TKourp3y3N*Uxs~of}$Jxf1~B zLQ4J&%Jp(1eSF-il$-vO_6m~;d#qJF6-1nmngEn;X6yYm_V(o-iwfiAi0wx}9_Y`o zJL_|X&^0*M8L8raPL? zwbTFV^o*s18(=57O49puk(*}xL~Lw(M}1|C`gCiJUT;g0NFS2y^6MPl&+lq{zVIENlvI%-HYwM2`P4mv1>vrLjJ7dh zxs$}hW|m*$vA<*jN?z~}ij9wmn)Mhp)S0~!Hw+(!CJV+0jfmJLN%*#2VktP&5K^@SHvi2V7M2S< zyrU>;jvg#hF<#zLP-W#{>%j{8wy$&@H1ZCmTec(Mx@=~?KR37K17hcKbJts6D=|r` z@PSG!mQnfb$NJHnoax(}GMPMflYtcOQuKTJObL>J7HbO{LD;u%Be_#QMsuTrpIet3 zj2ti;h&JxQcPzBcpaHjOU%lkm%vsm4(=doZme zm^Miz@R??Mt+E)TGhzqcGwxKB5>_?t^xyy z*`CAa)a!pdYDk})3~x1zwHinPoMcF6<9Nfx=yj6t3vvRF*1OBC+tnWIp^rCyB*fmH z5w$z8V0C);w!rJ;v>GnqfXlA8rrNjE_FZ_GM4Vl`i$X5$WdB=;ecg$N2LU>In9GgB z#>jK()B{@DtQ`3xOf0O|Bx^;p2u&eX9zdDpbikE~X;*LQd}Nu7%DGc!vxX2@4VaDI zI`<{KX`o?evffb=nb_ohNBWw8$g#?1W_N$TVypndwJWj$mb8e8 ziCJn`W;95IUs?~V({q?FrL7XrD$R9eWLT_&=z4QfU$vL#yh)Z1OzQ1@HIAbPpLV~E z1^kHW6)&DQ0Z5FLGlTB0?}PLv1m!APT73Fcv8InttBLQ&iaeTSA5LtU=xn1CNxrmU zD%meqO5Xnz!QWQ}G3e9wtlU$V=_lR5ZIN(F%Rt=E8GF80Q$1_r&iHw)lVDrIV{dJ3Fv(P&NgYQ-RL{AhIPWkv z)h-iG2GHPv-cs3gKDOcP^x6IbUw8+##-^d4TzyvVXz7!3K7 zP6`rO5rRCFYvYvKlyM8S~Pa_yP%{_dZTo}It&ayAD%)(W_wWz zqV=*kqTK8yR-mFR06MFKCB+nh3%vm@l-AxyW93C#sgd)^0FB9y8rUHLO3p`2W%KCX zL;x+N7SB#kH)hKh!=ls@ooBJc!wCxLq@}Iw%sN*YE4wyuS?T$jSrWZ!SY8T0o^{Od z>KqIjocoQqN>dtn7_|lp9fliSU6Ft@Fv&?))HIDaH|x<~+vMiaj)L%p3MZB;iU+J) zFmih(%2_lW`e13L3m`sxB}N-(ms>8Dt9&hOvCZc`UfQ)+CaCeqAJ2b9Ncf9a ziX-MKT?FCd}5DaOk~-P)T@yy_zfBdB&qdNre`5T)0tuKr z`ws@<1THRzo|srE-MiZc2GqGS8nts_X4+c@Z>+Bz91@>CMa+)h9<;revAV}h#y~2u z>tzL|imsSync@2zRh^a%%~i72YVgoIxU4IQDf-)z5eT?!>Pw7_ZdG7m_&sq(JReE} z(2~C|^Ml4%o_5GHjL|Yvv$4F4X1S7=w|Gd%5%lzXoVlk9KDw>J$a9q^aw>7cFMhsf zZZn#kCLSC*0z4fPM$4Y5GA?1~uY0{SH!_d@Ha4E+w#VPT2K6L%B?0gJehGF*I$dR^ zkWl=XhU$?kC{o9jpk+r|SVw zd@84O-^xe?2+}YhO^`%AP$+ObGv3gC*HC-4yV&p<-skaaq-Tx2$vk-Ei+FsG@u^P{ zPsh}g*Lu?i+=$7@&c+LyL%3G^z9lPCguRI82WOU+mgQHPy4`F1g9w|Zw0p1ra6(%9 zb@!e6hXcZ(WWiv{ggST3%g#uo!Y5P@VbW~2pK@mqU?wFI^^8jM>i~yC8=LTZ+o!9GV3nUbW~B^zF?ng4eHUC@2zJI~Si^;c<9e--HX>28g&6soJ3@7_D}bvVMOuOQy?Y zY=S{F0wB@v^hgGFi+obRJeIS=^2Hc763C&sb`ikAm-KS52`Y;wh_fZ+XiYE#2b-D_ z*ixy<%uJi_XkHDAgVnc^+>f!$bLg@CdP@K-)#>SEPkK*?Vo9$7h|;LEg+M)(B2MC+ z`mL*d+Q0VV2_@HEUZ&ynddc8)aDk(;#@~?$MkDwUz-_NCw-%XgK)!mIB~7+?!lCrm zp02`lZjr~P&ZVJ*vhMh7C2H-nhZKKZzG=~Q3WvT^Ujk1f9quv zo@y7~oB6m5k~I!mv1iU4_hy@`e2u;T&spT=@kY=S#Bv_O4cTlHP#6S|Qz)G6y1#n0 z!N6W)@%r62j&}z6HLEyyYV2e_>#sf#O=$fP?&+eiIN8J@N}*CZ7f-~iFjcRf&rpkJ zkf-taA=wNJK95&@2=*aOp->Iogw?fmQ~D~i-9mm8xj~Q zHCrC4bpfYZ@^QFneEh`$0+-f5XEry_G8_zRNvP}Itdw8mBw!|3F+|gTm$66{SbC36 zpXKwg`%rX}NPng>(qJUkbQbqyaJ1zWB|MXJL;{7cb7^7B@Ha(1hqGEXNvy58>S)4Q zx~FgVJ*+GVh^3*B+W-{3+I!nz#LqhCTR|q$n<#;Sued(V;wIN?Ol_xvaeuVA5Yz+p?BEm5VJ|0kyh*qiY*c`WYKfwfnPer2S^h(a&z)EACp9_3k}55sMvm({_F z>Hs)OBj%(@u5Paa8hHf-YBLp5^A}^H#lBtX_4YY2Ft_+rT*AP3rHq#uZRqB4YB8C# zG<9RXwnEVE%I@%JWBdTZm^o8e;lKPP6z?(T-F2K*dN(fHVzb~xnh#Pdy|Y7VneE0@ zr4$YmCDGfrLC;3-qp=fmAnaKqjih~qiVOBww^8G?pry;|_X;x3?hy&$j;+D8~@YWztqj%)eyNH1S7gwU6Oo^S|DijE|!y*<9}UWMbK{6a%s@QK2A)SdW4n z%HKJJZ=1(VmFaue0mV1y3GaM%#ZlT`aJD-+g^e?QeHr24a48yX!N|Zs$X4}|x|dI| zuWYuG4KHmF5N6f*sW`J%psDG94@Y9Hjm_@+7NiV( z1>Vb}mq;&wL4n)E95h1U#r?DOM4Yn`Up{KqJbp<+Vmg%m9$;Fr z>=n~(@sSjL;_*sOD?&qmj`sl7*Ky|dC%o4Zx|sTEw5qU9(LV&BWGM) zv=nHs3QI7{=CKEZ3kB$-`E`-uBayoS0iqSZgoT}5?X}R?wDS+} zj3zZGRY;rPS5)nxeBr_iaGW5+AP2P$NqAUT?mUK>3TR^8?KdHxa$scepraSvULTq5 zOiDAERJVVHas-i9XiUF)wZ)XDcM!KA46~_0w=!27-{H_DEF~o;Cr7;nbDE-#rdV^SveLOE z5W?Arwf@j$`Xm+wq7w8z$|U54{eHBrPVIhUT%lG7tBHfmV6SQI#6af2w&hxhHHO1% zwcA%JY!I(NqmJX4f&j44vVg4ujPiwZOBWBQ1Lm9{^HQL*Q~{vi2XMDqOV#T(82E`3 z0L^2bQ^CWQzdm{rL%>zHe{(i=wq8igEWbeFN24BmcHpN|Qx9uJPGGgFRCO8=fNjcb zSZa22iD*=aH{Yh3aRI3xY47c|?B!p2j4S7KGGfyctV;UGwEEx-bmzuB{0prO+odJ! z0qWp5=^8$~C{w!Z4{MwK}EIK+->n-u0OW3F~ zKKQorAVFO+zp`14VwayDU*!%t8eN`&0V#VWICJ;$MvU?s++zRl1sL z5*ymZ@sQYYNCyD4);+60++e-rAOf}&g#tNl{6;Itb!`SNVnpF4YuFqC?rN3I$!I&w z1DIrvl%tF}SFUEPw}I8w9(^<^g< zB*`N+BUZ+Vp)VQWw^dbr3gvIUP(gzE)Cma0iP}~`r@PWRL+8`_(kbd+1D-EW{={4r zR!YLkkeJJn*4^Z~Q_(<-69W9B4-&EE>+kuR{g%52YHtpK7bxTt13jw)J+pxtAndE{ zR%s^)FByp@joVt!HRfvfCx2#uc6$@n+khY(n)^_Y_Flqpvov6-Kgw5#By6e3<;F{= z2dhX;420R*Lnt?_{j-o~Z}$^H1HMeZ*s8%p8XkVKhATJ!%p_9t;;{IhLZPPnK|!I! zcxnZU3X9o*!4Y(Ddu|zmrPhV`zWFVeOV&=$=)S!yLw(|oZ;J~$gF*WMwGj+v*V|RZ z*)coPQ38w%d=~T$ta8X#l<8iLwqT0&Z!+>w~-4yg(T3#TWeq-1q^ zE0qx<1y1Ken;o(MEd9JAheRjX_JIIj0F%h&vL@8J5KR%y5-kudt2-6OvxAE$uiQzZ zNeW3iLW0FRy1TWf3{gM~4nu*&2`DHK+=LIg-dgtcNL>q7;UdQefR1#D%ZvulBKgxwrC2}I6(Vr z_6UmG9uU`*s^98?SOsV(>;`^-BkOvQ%HZPiLrg@=-OX)_!!d7UAZJPHn3~|`(l~*c z#_ePigz^&rc^Ta|^#L)Y)*0Z7V%vi)jz_ESjgWDrBqcMmm`8I`b}5W!XB#9qH_|%$ zh9*43brA-ueDBc>aK;t=mcdPSUEu;a?#zrXgFc-uI0rs_=rBTd4g+MH_3y|_tsC1H zPS(+MD|~>^v$RMz4*ikF0XvjdD>w`wO@A-MjjBI+x{V~}WHb8Pw_#xFXWJD_jIwhf zCoG9z!RsrBttVSq08ijv%6JJzgWEI!faw0CIO_I}@O$nfAf?rb(~Lvo_yvn^Oxaoj z#9AP592+OL7t8QLO~9l0W$Ud{|34bw^Z0BU+S?PYwNElHm(MAmJsPpn)mH>lpXBM; zi~_DCr8)!D@43^0+8%+$dcSPVH6;#!aqhRu-27RwZlckEra1`N0H?|jUkfb=#bF)< zWE$fFW%zn5z~Zbu*TfON8p#$mivF>#%GVoTHBzu(HJS|vV!tD&8%20b%uxdzPJ*50 zBIwpn6fE%Clxn!rzw=iL34TE37FxO3+?p<*%c>SKBzXAC#;|nFyg4&{tR`UdCqd*Rmv2$`7hfR6p*68!{p4}czkok050$i+Feg6r#XtT#nx zDj7Yg`cZrytNwH>y&E1LCYSvIxG$bm1Ou57I$G#BjaB@wo!!&ixohvxojs4 z8PDB%f`&G!7t3UaTN#z=T<=D;^4tpavM$x{F0tX=XDZdu z(6VHpx2##?S#$fBFvG9w^Ruv;(ZojcO@0CdT3J<_xh@g#CKI3CoJ(4?Tye!`0_8 zZc2*3PbqKH?o3sg(L_<^+q#XL%M-xOQOZ^NDG>NHG)n$*+klVnA*22AfFQoZdUCp0 z?Cz92dsj{QjL2)cX5;_P(Ft=p>`3=QJh6TCg=UtQ0jeL9L1?CM$v+)0!-CjKd?;t4 z@oY{#U+f_JkrI}*CWzj!-ykoksR>`svu>@>+H5Oi70DH4ZhaRBN*X+;hfpz? z&Q`AnzsXlFqo$?~=6w8r!^U~?^r_G-xWA3yl3Y>HZM?O+E8Yce*3K5|qEPiacy@Nu z0VXMj_+2lyDQyxY6DFNMd~pe5CdqvaB>96&Y)oprh-Jiy?xm(h&+nb91ikUtR^_FcaU^oXt`gnOF-d7Y9QGD6TWwH|Nv9APHBEL#-RSWk@U z?EP{CJnNAQ?<8NPQJ%4!+$i9N-OD8My0SNdyb)wnfC|{_z=#4!Gax-3=!Z%Jg@y4X zrE0;v3@DY%!t)P|o8NPB0y+0M@Sg)MX@Gvr6q^?_F>yx~Gs(){4}6ny^jvIU!~YfWd=JGpkbr(F+5~-7ijaJP3yL`eA(l zX9Y2uoT22!-p^Rk^jGh^`|V=9X8<3k+Tp|?RCHKBPHa*oO(fC>-=+MW&to(+G!NIK z)gBWQ6L7T~aEZQ@_?4A0k8BTTg;$i)($el#A3fIRG6p$RDbbECQyS62f*-^9$C?-) znpsrq`In$9@pc-1uc)`*Tz#7y!+!>XL&ZQ@SBduax z1}>J_fDKjtsbsO_-E~tNC$6sly{Tr_^|(a<+zyxmG~p^+pCXu5T5s^H0d?Dnu6YG& z#^9)+1sC2)IA$VZVwxP>0}Be8qtp}bHZo$7PTx~8rOb8ct{aWaIK#$&DTHYy0F)h& zvG#E=2Z*!UZWjnI2fiWzTcXhs_Hr~EVEoJioNn}fzWo#NBx1Bq=d~bdz^dH*iF9)x zZ!MQ{x{|(>(5Sr_1~oD`@J**|qN%6@X!(}g@NI+eT?0=Ha9pN?LQ&=)hJ_Wa-&KRg z2jC_I`)QE)Lh7-ss5bMwJ0j|=Ha1?pJ1v0G221JBI-PH*Qp_*?OU1#2|4wh5wsIpu zGE?bz@IVg^WP@+O^S)^ki9tE?Q-GZk=mcq_HD5d+7F!L(ccmo%am1@e>OZN zSlr96i`Klj*93P{VW6cyBrUN8C->m|_TEP|2`*ob|$0_dQTj%vm@9VdE<28omoZs8E$VEP=8v3uq`bP!8jUtctz8i zpGANO2ClCaYu6`poJ-pq~duv z$yN2~B*9pmbo(2E!NMg3=NX!%wwX5Mr#py=99OBq zctaO}=M8Q-6saKtv#xN0)V%xL0;;mp?TS%Qw2>qlX$F8Fbb;^o^G#Imjy0t=1;kR& zWT-q(`<&=9Nq>LaBpX0m%uy&w>L5n}{iZxnJTie&e3a6)njE?0b13)~7U-}1%l*mO zAmPyKukY&Wl3zN)0F*ZXR@weF^NJIM<8UdY3M8REg8A`~_&563Z_^k987`1e3;6i} zrD$`oMFC5g1fX4#+YvwXgnm}0AdS?uV^-60^8nc48d@n&J2`bf3H3H2x zXcgv!LDu?ypin6>ECb#G=orR*aQ)BQLIm^GoP$rGGYXuqR=_2j-nflEEJ#3kaAv;J z6BW>Ay{CA=csIQvKu0yZ@xop$_@yL`!v$85D}~_L=70_b$cBi;*?X}bw1Jo`0S>CO z9YkG3H%1k~VL$Dz-u^Q_&Rl6ZxxCN>tE?nnqj9rWw6p;yKcH}xW~PY?@4wIyAi{C~ zS8d-J4rkZ3Eg^S;XwecS2tguwt+n@F`#jGpsM7g0Aaa1e?X6b20t`Jn3V{@Q z^M=2wIr^VM!lDni*LXl@3@4&rf@9^m#q{FB61)Q7+IkA__pftm-(cEZN(v6VM%yw4 zhkJrj-&w^^+@}kfl9;Gq&^z>evWKiY+#SG#-uLvUxi4!)ynp|V0xOGQej!*8(G3TP zve4@fcA5bU%V~pTU*j?D~i$f*iEf)nW0OXwQ$w;hHN4i1H)vNrfv3~-8sc!Dc>V2B->qg8mewsoRkKLy!LE_b=MgCZs( zI(q-l*{}}OLu_Zmq@7c8Th-+a91=OD-nfR@sq(x^UmLG8@{?S&$Ddc?qF>v#y%Uf>{UYM_ z*$AKM7`>P_+fHjYgWDzL#O1Ovs^K-BA*g1M!C&qcHWCtn zb$Zu=+-m|6K@@*Rr1;{U4Lvb8BAdW6xLl(d{U!|3^V4AZvNT|>&mL|64Z z3IjV9u;a1--O}f)@c9&7f4CxEp&0O3M)K^$cxWLccN7j;4+i`aUFQ|!@K87)IxIiz z*2u@QU;Jz5jHmPWTce36nHU)IBm(9EC=aMZOmO%00O+T%J+srnZ%;OjY23$aNHFy} z<;?h3Ck}V(-S+f^UIq67yqut$qk8wwO1Va$H8_(me&cSYAAST5v|#J94#L2N?`r~A z!55)tlFeU9uM!>yWYz;_F4>bq*j)mR-*+n=S9=>V6*g0RbM2Ff=-0H(%{L6(%-6a5 z$WTdVh%;xD{`Qz<$kI?$FPE<`thoFQ-?i&?Vps9ek(xzBkclEVgro9#;HOV9K)(ZW zav*tV@H%IaSjw?b!}>C!zkfXhl?N`MipzK3Moanm2!Kr?*dwKHss$A&-xAtm)$N3W z71Zp99oOpc{o^Vj0lEV3aAh8Xtt6gAw&Ou0fA~qj>A|duMjWA+>S!#eKYj~`Ks{>X zPc-uQB5@iN;$y-6%6KKG@ZBq+-ObzFT!ukyb5i?7c zCAJ*BBqR(D`ZX@#Abzr(oekM+k=$(g1S*;G^>Y+}ey2qF#}5U7E%>Z!BvE`n$)dQZ zN|X~`3-j?Itg(3j)HnBa5vyzVe2+iAtrfus9GP%wBqWec@v-qOv2;NvJtJ>zGk`+W zfEiuW0Hrc1s9i{~ypw%$hg&&7F*?mLGBIHe9k1*4M5WjS2g;6tiJhos2_P6BZ#<NbP3=AY~fX$1$yj8W_f7|1khqmQ}iJA@n14q1S z5>UT`9AJLB2RS`fdgPjOW|XyPfGTm^8zI%*ouD))e zCy+cAC$xffIYz^geC<*R~YK3CiRH-R>c#`YPicy8QRpnX*F@eRNcwz!o{EprD| zb31gB?JDDjcR}c+h~+55ojY6kUwdv*3kB9(diTwbF%m}mF|N4UmT4=0bzrpK?%@{U z(%9%^>08=6ckZABd)^lp`+lPS^8cyPj)#e(?Tl;Efc31?w$K*YQCT2kyx-N-A@sr0 z*tw7DYz6=i*}koJ4pqBvjuy1$T83!4o>}wjqz%ZWR#v@$ z@{Kt5t}KJtvFt~*@0TnfY`%-kXRVYG8o)$ zrX_G_s1B%`w1#o*=3Mqv2Fe20?`bFVodBtYDi$n1$U>Uw6>FS z7Ix(8!aCiT9!Kwqt(WQD_j*8iHX~I7-}5m_sY=#Aw$=v@%11mT#F0RoWNDPko3Oj* zji9h_^fA%~pDif33$XZyVCeBY{OGrVp@><@di~mH2YIE_FP)v$We+yuJ}QpEbv|yJ zQF#Za7{KdGEQSftqDi`EV@=}0=OH}12dZ`Iz8`=5eGo7nkjUV#RyvK^6~E?^)_4)d ziWW4%4z)nFLVaNTAv z4jP6Pawt;W;d2Tjbri(>Xb=gbSmIKb%WoQ^YtzAT)bg~GW>`LnhUNzES z-Gv{m`2+N+ojpDyW2qS$5U?{cO7ZZ5vmZpH9C2#B4vk^{N9*TfL=w10oj=^2S*C71 z?1A>9E@AiLj=aVZa$x-lV4UMf{`IjIHC?x<3>o53w`CWZ;ZIxBOiB4a{HN)E}%_<3ULbD%Lx=`^E43C*Q7Wfsl?4wlZUpc{aamREKhT}M+2EuY9hrB z^?0gPQBQ=7l|7R9HL6M@-Oct=yz6sQTA(N6_U_X-qLO9SdrFs>zf)31McL(SE0Tua zFwahl9U82w=JZ7S=P1oxdRfzgF-@~g*xCD$3V(}dp!%_zl=z5VpW@wLfinUG&YXT4 z$ah4vRN}U*_fx#T|3Te4Zy1bj`A6=HIXv>Duzd71bJ(g0lr@YFKLMBJv#K zR%2ue+RV5gp4~DJ?2;}3M})PGfGUEfC99?FzCKs7R8s`Rd3{}uczB|Eo6oV>eg8@L zj61avP!Ilr40qbp5b4=J8heUz5W(Z<91XLbfRvxoLndF>JHAj zZGN~UWy>Q5`^nra!40}EwgUqd1+O8!6H00=N33m0!KKT|-gpzZ9fP1VHDm9$LSQQ8 zxe{dc9Z$65V9$9#s1E1BR2I!w%X)z%OJdTqY^Z+mOihvArl`XT+3PhOr)0h?Y;AnD zn77Y=KPE5_SS}JzYWd|q)N(k}3_x#Xil@)UD<;z=q8$F}|L}oK@OKd1a!>4YZ8J+= z?+G|X*BH=nYA#MVF)-7vbJsVCrwJcbUVgMJ6VH)t=289HXjzWo&y+sHksT3{50iB; zQIx?>OA0l(X-+3eikO&s^mKha!TKygDnblAcX2{9HS=o#+mSQ(vtgMtfDk%R$X=z` zG?3s4#zpV~^x-74Mq@q23C3E0^@r9sfV4Gmm!DUL=%-H_5vGZg{&hZu;ZaWptAh?A zf}F;%L0->5n5u0euU2U&07`Lw#`G| z9BjZovGUOfr$KU&p+aAlG`Nkc8$Yhy;K1vKHPXtq%NU^(O)F}u6EWqm0cOR=P$u8^ z^SN^HtjR&gxcRK~fuAM1l}K7wphLrWKaH7IIZN~S{#1a7yUk#A^}#?hUKRtnu#!ZL zzF>d9n8u2c;%83lQ2-!5yxf;c_f*DoEBbrG?)Q6J;Wur6pdi|xrLR7qvct8uzW%`w z38xV2Ufzj6dBkSRJh7IfcqL}A+CHO|p}e}D^?tG~RhC>MOZtxk|HwU=^_OmJ&Uk;a zSo6+c#@x@xTN{(Q_lwmsp0xo*rd!;1=B2vhS|eV{i~P%|Pc0PBtSUGiQhEI^!a92W zK19MKKrjn!F|6H1`1PiE^2e0b8Hz2N-y6>KBn|<%sutowfsm@(CjM%TJ5I8you71| z?Ck8y$nqIDll`~EE4GPBA$uE~CzojjW9Ws)zUBAqc8@SW7)9Ejt7}P{1~zYy1(CNj z(Oij8!fHLV2pw`nymHMkE4y91?JyTxuvggFZ1(&q%k+zRyuF{`G?*%=?j|s~@{cX4 z)cc#1&TQGoLzWLi8B$$GA27MbNG60O(|NpZ%a~g?H#1unVwS475^>ZwqiQ#dXnWaX z`2Zxso}TD(LkUR+8F=Q=h57Mz8&sL(q! z5mj4HWc)CHsMc7d$fDi+)nG{Cr(}X|;y6Eg>}Ixqc!o52cN-8BbC_No+l?u!b`ez~ z$)Hgfr^vBY)*sQ1iw};Av~?~YvNqqg9-mptWD*oq5axKENmSPD&~HSj##f*M!hYEa z0M%nqu}lEHiDZ*|;rTIbh}C<>*#)5Re?}d>!N#3!kDqcg9kUxTUr%k#kQ`b*)uc?f zvEiJ{m(BVEu%|%$6_nvb-S|*WuDYi*7*?lx?2%VjQcWnk*Tejan1p26sq?=9q(^No zva_6evZr&Td-}Y2C@B8v3G#43G-;cg&RVhNp!mZF6=A;$E7yJE`$I;6+!p2$IR0UY zo2bzxMsJX~Fjo%K)MSnjjD;p(08acxPT85Do?fGWI6!v-2}=*#a4!4ZEHB$cWaF!D zb^{dB(s!b3qQQ2=#AdKZh6);ZX?gOftPJgasnxl#Q_$gBmFLlV^jE1H@Ar0Ur%E4i zl85^3tyOM7;n94QN;NX!gyUuRG+t|D5}hT|8lJc2X0v!#!UrR4oB=0Bo|XGy`bO?S zSe%xDo~-Ocu0;+9!y7OLM}WWYk~Huh8WI*XeKD4#n;n3LQ~ca=KiXsIOI051n0L0- zwprL~7S9v)>ohu2_>?DCGt*8a*Y>BNJ?goXEC-V@jAm?)<#KK zM7ucFsAm&JMUX&kZFZ;V=b5t^jJ5m$zlO?DLOuf3Chd>Lg=I;^T=)KF9@SPV2f16cm%CPA8PSO)6Zi2L6;(ops=^EyU|i&t)J8DgLkvb86s_rc~&=})w+ z#Ma-Z-TYzl$3i;9FR#O8?G*^E<;SPB@+kF9`nzC*0YnWmNk!EndlA@4{QFt`1O0l3 zH8}YZy(IjwhNBg}Qq|22o*=M9{S*^m5OQD^L-9WqVP)Z8hj!==XoiJJHO~uDSq6uz zfJ~VdX$H3K;831v)_)UWXFDss$B&8;O*flm$kY3?b=R%j6LRNMuajL?wc8Z9e_!Fa z#I{yGR}sa}wee2-WKRdPUwJ(6J{4_djBE`*ZLF^)3d^lIeSC8C6>{@5_k-*eWIB$8 zdDE>VosO3}$qqDcbDlAaeo)c19yT{ks6c9j_^Mc6@+T(t{X!(~qayYsa*^&*2t-bt z{yC3d!p%rw!%^WUxA{74N@_8PS7`n3_I=FG{MGJzKQT$%Jqszd?i*f>)S~Xr`!->; zmOtvMp}%4Sy_H2b;rH*l&<544lk6}Sy>Z`Q&&^+>Xsm2<=i414wYTMO`CR;wi_hjW zXD`l6yWKU)46Ew^ioa(TLCAT8%YU^i$ zXKva5CJ^0?Io+k+qGR70!f|)UDx65mTG>1dllv( z9O!Qg8h`)HJvsTYV9fWQ=M-N*o_GNBd$E-gV>+13-&16+m&Z*Z((-1K0p1fIxdo2JIWo)|jIK&g!f6UlQ(V4b zQ)&96gec%QKKY9`?X%l%Pfus}R=@H01-B>EJ!gx&H51mMz#jNO@_L2n)Q#ktb>ClC zBO-cJVO?GK52p6N6a0+d5nKA@0AI6IXldM%L=rbu8#WCL4XNL~ySt_5aYxcYbp+vs zB|kH2`Soo{v9Z0^eyy*y^%g2e;$@WZ(D=Cik00ZMgZ$rz%RB9DLx=~Y^qmhc?PR2- zdG7r}kg_yrXlXI_F?e*+tnl*Yo13pL_WYQ4U>=%eId2);ZGTc88bEhLj(TP0CZ?d) z4sh(M(6dULVdss}TSV~<`S*!h#!}wJ5tpQNoLs)@{Yh>?Mftg3AjeA0AQAne`S~y$ zAzn7T8(T3IOfrE>=>eD62!a1rM>~6Wy5Kcw*w$F z7BJ_|LD?4pgzAvPrQVh!#rHQD(nD(2cd&21J3Mr@MjeVJaH(&sX2UdfPw#Ir;w>J@-{!zm$GJE)XYv~YaY#lJk z{@h}GBm=t#v$YBe0*h;ZHFz*@o{tPG*+saat`5m%tkIJSugdVXpE|y_+ahsp4J&os z@i;_1W*h~zpMFv<9Pe?1c?hkN`R2R>l1;sc#kO#Rv$hNMmg5$q$;n~r_ibdi zG^ox;^28zVx>nV1EoJ3Y;Yh_B^h1?47?+(Ta@~seu`E&K=f-<7)Z+NbUAW;2epnb? zV{TQIQi{Thf5t@Gm|a$0SzA(CnVk*$oNpby7)5>lV1Hgoi8j=4lpB8XQ^4Ly0AY)! z^36Ygx3~20FuQTv=Y#Fk@RnsZWM@WgZME;Lh&&|?8 z7B*C#_sOhgF{M0PiMNAPh2eZ20+U7|S!>fxD={(eW7$IHas8g0o0^!H>tvo=KtSrw zfK)*@>9vbFZmAl~rasw%~$3h3CoMFE6(q%s$;e+|8cHmGnDrgUS2j$Aa~BsOvq&;E+||Lgj`{stqB|pDucU z^Bbwqo~@|u{%iD#>t(SDD*++5o#1?3NF2+v%s$@y4^GNT|=oNE@*aZ zF_lyCslMaZ%X;B}ri;Gee*O6x7;$65QIjTh+a$WHYvJ=}9}ujrmwlzrXW&Lpn#3@0 zg9Z;YuIuHZOXuDtD~v#_j~=%Tg3%F31fKVw-r`^@@t-&$<^`Wsnu2c3cO$mcMtv{F z7&I{vHQU}85ihMtCSG4%ZQ1sYAAU5B*~0lHcK*^RNv{)`d-nwHtQF`D>^ap=ra@H) zcwFtK29-A)s}JV{{?l4Gs6nTmdN^CGN0V?yvKO%%uDSxj=mU66V7@E;h{@q zS{x?xSq#GHxfGQ&!qD^1U>z2l4<_rjNbn#+0&@Y>4m1hw{VH*FU+Er{1;G zUp$0UHJMVo0p$jXFi+FnC;oINdtB|AW@WkODhHye&iW{caMloE;#5zf8T`25y_jF)+Z+}-*#uyJiML%m3)c| zAANzk_K)`|4XVQRW?<1-6(hZ9v$Ucj1$BBdJz6YKUVdW#gZmL*kRs3#>p1N9b{6)vlF;X?-b47+7N-}Wae#Bkq?GaQBw62oNE5@O>crB_Qs~MEc!NX~Cf)1`=UuVBC7`H7G2EC{$dR*kx z9%e_9t}MK{9u9vGF-KC_c8Gc$s6`e=)>lJy#()x9-uK4WCM|)la&qzj=A+(qTV}CW zV2+m<`@*UJ8bTs<4N$YY&{I`OFH1{5c;oO)z?478X(|D;gaPBrWjmppMHdUy7jMaQ za6Om(EITDIG7{nWv5aR7{(?~cVsXP>S>4XcB2WCPK3lcX5WNKz|HpUOdWv&BJ8G}d zUcCDAL(|+nhK)N87YVkg`F+kBgUDcUYgqxGN<#gAz1D(WBedJxoaNCYc{}^Y(bB~d*Kb~L zWp~iqY}rroH*&r_7Z>5Xa0e};-k~R-Y!7&z}*z!XA+AdM$SsC{^HXj#yg#-lv}3iez+8~e?fm3ntt z69$O6yG!dHvxYW5%2*gpCve_}Z9eeD%SP z*kAH>;HD>))Q2nef%b zZ+IY%Sy2}k`F@f3{unul@@-Onu3hhY*P7GecinH|QKcpF-Q7YiXpy*o|L62|4MKCL z&ZwjjgT{nNRlxO2igzw9+sSn;|1$sO>ilKxlWAYmUc{`gUGYU6p7|2hEgB2iQZVs+ zumYIn>gvjt$8WJ!%zo;lLW-(7SgP^n40T}*r%uZ~>;L1q|Ai0!KRUAaC0F5wva(f! z6DmeVk$SBug{6z_(?j}zuOgOlr+s-Xy&c`PtQ&X#36PsA#u=*}kqgU%Z%_l7v5#SwoVN5KNixm*-&c)^d zOY+_Ms*e?T^Sn_kVy+ACr2l6l`@d@N=qdl?+@{N177+Bw%+59)Ei&3tlk^uHY7eE> zR9C;tc?HXm9*qXyFVOz;_f+@wYVd&yCuiqwQYp7 z1^{C4u_kmQ(DN|?4W51Vt44Z71&9XO27sURV#MG>Y)se0X|cRBy1!&I5=cc5dm2^xcj!?Kdwjj!8`MxOa#FT zxt*Z0ou1W4XLAEXJ2+tjO9LAnI|F?JU1tJgJG+mz>@+kV&2=p8>@Ccx^{gx$`n&Pr z;NUS$!Dp3y(leFU1Oi(zDY)2bjG3J8 zLMcCqkR=K+Yz?ppJ+G>$-8X+s{LU%uw#eD_D1U7K)EmoZKm=U_4ZU@-$9;wNt{p?HZWa2?Vv{(TAqtKX>AOh ztU0S&Wu;_EUWq(Z;P9bjg&=*SZ}BDHcJtmyrrflP< zLh&^20pFC*VT1gKsrd9qW;qrbZ%`$yiVB$X32!O}+^@9xAXod`^_afWop1&jrSHZo z7Q54E9$EIO7f>B+#nxN$IyYMwpNM>pV8Y+sT>ti-%iAgX=7|acV?cAQtJ!6Zz-CD4 zwbUWeY2E6pH17qy6^|S}>3yx-X??ryCgBn6@vg`VIU2-wk4Td~hqYbL`6AT(9L;?5 zYb$t-B9u|7Z7Qr);+wveVb)LOB7)^znZ(f}PXtp0g-ll4?p?#1`R@;wx}r(G2u2^c zH9z)^!Tu#n^q#6rDqC4?v<9`Xf=NK@Ik&;3=zxTG?4y)+-D*|Jk96ZSy5+yKkFjoB z)HzKOA)Jo!3zDtqr_4_l41di~UPBCjecBYVpV)3rLrG?DE~k)MopneUL42Bw#_*Bi z16!dI%~n6+Z%bkAYoqba-Q*`BKIxW+_X5IyEGwIQX2|8od;C7dJ(s%_>yc!YT z7(;mfc;U+-5$`8Pb}bRoHy7^-!h?|@BAsWLkE%M6&Ap!VwTmc58Hh&Knu}MM_ei#t zm}B&W66K!BSzSSXJPteQ-<{u`+u7VZJ@RnZbm`+};NYk|;yl_(EcikS0ue4)*k>H} z3P;0h_z=A4f9{24fX)Xo7~m!NF+Bx%Awbht1TVbAoq6EplSHrzEQn(WN@1yip6~xt zKm193d}hD?qh1dv0t7ur07CEF2MTDo2b59! zsTb*!6;RSoYVeyyoPT|d+aCVzQ=pLlTNM^PIUhy-`{7o8a6egC2l6-^_v$t?;-uI& ze>{WZEuuBFdt{(^`2;SwO+iWHODBmr$7kB!TEV9Q8^3iM3v3QN@n-r9~U3Amd}1qY+FZ1l65^*mP?FFcQ{$u^2vmjG*vY&+#=T2 zIrgl))knqvI5UWROBo;uXakEOY|ed zq`6~mZ&yfo-t-)Aj*JC77E8@LsIZt(7H=O@(&|IXV|2%&Jem6pZrTAUR-JNxP0oVbC@ut5O6%f_4O>x%)1lpZMs#nn)d zN2`NTQjPQ4W@grFG_;Yiv2vT$?q_39M&aNFK6D%|X1I8znLL2|{i&g$p|i6S5#KGi zo?hZRE(bFeRlpei6Dzl-hnRzFp74m1hMJmq7KxDCi>-EVRQ$Ewh?IT#w9H?P*Q+!W zS`ekui84_+W z%ukhT5M#e&GL2uGa$2Vb_X+U}EGFTp>yKsq(sp*tEwi(;-#p=JERl>HbK3oisrf3^ z#W4N8g~vL_f(*;v{{H$diFBewB)GKu$<~;Gfx*_iveNavD0_@U3&Z-I;iGJIC8ds9 zV5rAI4gWP%-C;Kcx-iRv+Y#`~jf3L4y6f@@O~M}FJOkK8B;qA3%*?}Ug^(Mw={jJr zF{n|xl(JqVw)1-H`N48miS@FOcMF|SKk(wp%BY+~;FrNE&{9POg^2L*S^Ei%yhwxb z%tW{7ZpP@fwYA^BKawxl^iXXj-h(q7`jUC{GzS=pR@~nHgl#>(MHbtr)#v%a!9m_V z*C(=_l~x4g)YRO&Wh0{j10bThyT!(%Rh-say->NcEPLmbBoaQ16=>9s?jtwcoX)6t z8jK&8A#Y6wr=T8Xxgx+t6TvLA@IhJm9E40faJyqCv6y{NL_Fn253WK<35mMv!=8@s zSo}emy*3+zDINF_x20BJG-8S5`>v?8Ug^9IqJu}ITyav^OTg<5tmKyVi30uoYqxT8 z+XHd0KnRVEkIRl#SudYk&E=_#HBbX+H!B?*FZNeUfa-w1g{q1hSYp5;WtH#Y4EC9I!M` z_TS716a>4$&kR`Icn;p5LAiwm2X$vVl5Pe=RRc+Reu!(DXS>=4d8mV ztyt#oCoOV5%wGtpLftR7W2bw92VU9 z^kZG&fxQ6br0-!;?7rj0U11~x&=s`ebdFTx`jc@rm~Y?AIzn%B;kl+hK7SN~z7y*a z??`^2y%eLIlHL<(-FWSCVN>j>nipg2n5kHEUc~gl1_Q^HU_8!vVxy<9f&Jjz>w6Nd z&On2E#^qy_uOf#KNDJ`-`kNk^6F1Gfv)|$m#E~#NWcyRs_?-RT&bR9f?j18sDGFbKL z>;!px&U!teSHz+qfiq@WI)0_EId!&#R=q&<$E}6;oVD=nA+03y<)JZbRvjgSu=UwmTwsun|c+9#? zY?(x;U8(QC3H_`w5_BX*geSp?wt1=l>plBm=>V7T>caItRMz=ds$iYN+~vvEJ{!ly zN|;Jhf@=A}Z3;wbXS&`Mxa!s^4zs0xKvzpu!ol=*VQrpnT%N>0p2FA|^t=&D*h5u0 z+bo@uoaIv|SAV5ql+cziTotL3^$Y`z|LpZLiNptC6iluSIR^IfjwGkguPckIRWx$< z;!oE4`Nk%8Zy-0~bJ5A?Isq(})2%cd)~gCi#rJcWsust|1VW)#IGuSJKTi3%YWa+D zs;Dc!xZx1=Hk(c{P^fj2CTze2t)%^qm>tQ5>G@2wsbI6iIr9Z7aiXu?&F{V1P2R`8 zzVe!-4pb5Q)n}TTSIhX&Xi8Mh-@H23biQlRl0h8hdDq>!h2x`RxU5dWl+dG*)EGQ*Udi--DRXgsG~lSxhVq8qs_DK5l3gQcWkBQ}s=nY@ z(1Nb9?2VSpH!J16VrtF#@oqj}wT*~~W%eUH4?EXoKiF%76HH22g5{!N;b2xx17QtRgA8>+Ry;HOTx? zW890KH(F4CYC>y!cc}!zt?k8^V=y2{ARt?0c4Y)Fpxmz{+UhKXh-)DMc0Y707w*@D|lE$Hp#v>lj5uyJPey?*?*&5Xnk z|BA#@;JM*OcD)C}CgT*qs?r+#`St{_oIGSj$L$x>#<$NL*dW#F*7n^44=xN(!^kObv9LIYpoBuFk`h~yI()Lv*b_Xppwr0 zT1n8rpmT8U?M&U`=O^#w&%VhgOS&*RW=5VsuUO`zE4A-oz@V&2V4GbRQPc-2h!`<0 z6~&Y1^Sn)Fb8K0cH5wrC=sRCHHu|eoAAaETtYI0)NV-3cQE2bnl>Y&^C1T5cM?9Lg zm)^Lw4%q>&-gudeg&FL~FstDepgb!d;E1U5@400X%Jh=&`B%*lNJV+g`HKGd(#z#m z^>twB0C(KZ4$p%frpv3nM(9T!9Ubd~puJjYE~EDHEqXLpnxEn{jp`~IH)F%;@(rNp zRK}?FQmZn4&UG&gP0o4vhbVO}qjxeI8IQ;HuH*ch=vCzDf#caRfxIBhTk zp}GgTK0nYG)vT|{sBpOajs@`RJ!o+UJ}TBFW=}|(uu1n`)sfW6-rokNr8IUM(BlF< z*yz~UgnC$byt;yhB&sYr?v58JD$g~onclN$go51Dk6ivjy6|ULEU$j3o~l21|L$RJ z2L5`27-zH-@r#pzv-u}jmn7Bg{jZlmmdv%-I2FEWC;$E2z-xcU7egXhopu*=*V71g;&Y-Q0DdCUPz0>&&cQg zC<~tp%)+A6eZa$Uy5|*awZO4>%NOHuIg*rvQwp&vMTMG+ipyyY<6kc#=KXYF{3}Ae zbUZnNqPqLLbfC}?T94)jx7tQ9X?mE)I$ls=`y$WoFK7pwPTBsiCyR`(bcJm`yT;#9 z-ySbSm6};mTfxm4(n|C{}lyuO(Z%*dS#^huVb?x_dX~&G-rCUBx zI|{MN^h{JfnZEgyp9?}&Z{IHYQ560lbGr5=5evdi%duW=KX5;x{!@gtl?TrgS-N@L z&Oz5kFhH{YgQO8ah2JqoNeYb=9e0&k>FKkf)Q}Mb%Tp^(k#h5@|Ai?8B2=f`A<f}4+7k(b{R++kAaFpbAW&ofVm`)|+5VIvp@&{lrbRDx!V z-TuG1|306o!o+CZ<+NFpx=mLW@R-2Y&O?HjHz$28Q&-sE#7h9a`k84-03D^JzF+bg zHwNRgx=17_w&xj-9u1597x6;i!AFe$1<5d2_LU$&{~-rG#e-^4FV9$lRo;jYsx$@m zBJokb>w(@N>nr~A5m24X#=_bR$^c7AD@tu*%r1u-nYFSm}IF}bHTR}#qaR?9p^)=`-rtPu~wy;z~ zsmaRCd<;41z(n`Un!^22W~6_21yCKWt(oKC*y}0eaK-FrR|nMw-b>{Hpa0cgEI>B) z_a7&5``K)1tKMwXeUYZYf3-34e?G5K*K7xkvQ$=;E1XSQ4Oif=oLKWz zM((!du~1H z=zl(oNY40HGX5>q)6--3F+5LNeR*AdK3_ba9`Hjw_Sa+i0d3r;Z}A(6s_M&AGjj#a z%3q;ICQSRy1!fRV2Yxc|oZ*-;<*2D?C3{7EXSv6z59zpWF?VhVf_W&chsq;};w~>Q zTSXax)3CG;IlbGc_bGsk4M|QjRK6a_xR(Q?xPGjYWO9RFFCGb<=nhKv0 zcv@(Wt9d)27+kI|s#95g5r7)nCtLj|PtJ%8qY`c#5<3U2mpb222yjbF7c5aejey z+SAhSqU6O70(5vWzb=u;RVejyZ|v~l#EQ0P4F~iYi7!babXY-=VzB5E3;z7!DJdB- zp-LpQR^YYi2eJP@m-B;sN$t`3;eMr1yk}Ug9Ch9j18b&ZW-WAse5T$O#U(bKT;d6 z@{u$o>HZ};9R!&w6p`@Y#@vPGAByt3fP3}QnN|wb;Q;cVtLLaV5Beh3I{mG-gNuhl zVc@sgQ94n&^mtSedD_B;5d>}P^YPdRrORz*qhDziKFH`?CK4H(Ab4dTbB{N{B}#vo}J5arZ!^s%3UB)n{U&Uz&gCk~yv zUF&zci`uolne&%ca-ldc*=(D0zABkIm}E^SRiB=84j#yqO7%=%TY9I3PLUNcynyi6 z3JfHc8QmmpQJlTP|BN8flF@W@pXZC!-wwy!yqLIz)<5L}yWq}8l)b5AO}{RuGWkEQ zk3N-RoX53&>*REH-`>*~)eEUhyuj9Uy}iay16?)mH4l`-PW&p#ou`&>R*4XaM-WSU z^;?cRdc7`AJ%2FD{;mF54NumShVZ`}_xzEUtKV4W&YeE`A08+-amCF8W&Ou3QqYTfP8SFogQL67bobQ zoEgF6K6z))KwQuN1-V{I&`Sx^jSRSG?oDHh3={3(SyE{z628ty>0%d5isZ+sCQET3 zcmy3-5zqd1GT*MfFOnw+!Z0ZR_&!+)|B&+D?ETysj`B0R${cuEb4trSiCe0NWBp?^ zg&LP$5l^UpDR61@>EH)Gs~zSLh;FO=Ney%9LpAn}rJeM+=6%#87y5*WN<1p8J3T|= zim&TUE}OMK*__ z+fEAnW89hhhZ7uM#-J6}WNo`5mL?XIohZ-|1}~b7d<_>h&Gzp_DGz;W%hc~opkQSF zn32y8J(e<-9-CPbU-GSFI%}g;dMC>IVxr`JdKGREcW|q|V>6g`gIHRMdEg0LVMCUB z!4%9!SzK#WLtje!UY&E28x=S+nH?<<8cF%YxGIjXIp&HnW9{QGAFCuAaL zmX89?i1M{Ol;kWlt)w{wH&4H;%PSDtRJu=2X^LwM@Q8FULzeeSMmoZ(Bw!5G1q!kEuk&Dh2`w6w!O zW-0Ln{Q%x1u#*K|m$@E1E~p{uUs~4s`u3fm-?Ogvo&u=;_+s#BnZYt+sSR7bv#j`^ zlJEx4TjoXB+~c?{`Wmb6HGPg{f3e z#*KC&cVcxCb<%ZmwbJpAi}D$sywJl$RVS-ZLG$9@DfKdooKsQLAn4B^-GlBfc=!ik z=w85u60tB)V6wqi3rtq--Mf%LqR)-0+FZIv@-T)e`HRu`uLvNKm(lpo(9gYFMD5gg zRkG%##0cK#*Gcxue;s}RQG|xTK9M}KI!PeSQzLSeVR&I- zWL!PA(af^-d$F##;}4eUQJ*CFD9g=V2Rr-GsI`uFREf>GoabCd)v{kiP+HFru8uI6 zBf;r<@hW`{EXt)O+Q+;(G8FJP^%i{w&K!n9-vZIpusi#-IL_3(WxhDQ77~?kATbAP zC)h+s^qI)>=Dbwe3u8@vXPwXuAydeU00ajW*)x2QnVU1CFn3gx!%xyDhjH0(clXL0 zGbxHLkK&92d;oH5|9u5AaM42h@Jw5j>@nfgX34g9%-BF-QE^!&6;5W%*!h|$Ra<3D zL{v*=B05Oy^8r?|$U=@DyR%8SLPJ5q3*x#Z96ECKO(C%1;%DA&Uk@yXGs+r@cW1k% zg=r-lqO*Tg(|Wti%^l>9JqPbwAA%qa>Blk^2RUL|jpC`pK{~op$PVg4lRhO+V{<#e z2Iiw9D>sg`Cd|m+@kDmKGs*$BGB+V8Mw7YSq4mpkI!=E_T#Lp$hVvRWXnptSNBl-q z?L@syeEoN%<0wmvYA(~Y?5|gmA8K~ZbEm2=4H}{nHDqow=t@~{G;~i@gXxbMC@}=d zK-plaFcT8@OK^2ivn8V#39z-iM8pm3ZkP|8)|z5N zYvuYY$6RhluZ55OqOL)T0jH6AF=m=_sO_8OO9}pA8}cnD^-a{P>q?W#ThCSR_2iYn z?3zutC8!eJe1}yTklU;t7Pi%9fd8U)tS!Cp_Q3v?0~? z;Vs5Wtj70Rg{0bfE7pAxj}RNSDW)i?ebs~hHc`e8J_C^L_Vnv(B%JNmut@2k(S@2J zbJOoGG8vBU=r{P}T68zzpbBxT!Hnl28jtqY9fR~ouC$g>SwN_ALKi8rlm zI!}K`qWe8gQg81r#!qO`q8Tow;7?0`#a(xWb|NF&P({SFWHhA)RZ&aiv)BsS4@`oD zxL`)jU3P_H0}XZci5gt0e!r@M1~S$9*J`|ahbJc57LfSL z%S_BO=QpU!%TtUYTMJH=*!dcl@HI~gNX35D{wDXbWa7cdKEvrhp6u(k+wa|VnecO@ zmP+;12Vi{Ei;)OY+uSa@zX5|a-M(magA2JA2_L855mIam#>}6{JcVSb6H4lNaXaJG z9~iGFp`=BB7Z$%;^$>~3To{hMG7N3JxM#*!Aw zC{`T>RkVhYGcE(ivNc95CI_Dg-?-1^&5n#UFZ&6#;cQQ3e~7OSfA5nxx{0DR!l1Mx zypA%*d+my8$+DqXU)yBGdL)j?bTkT`JSkL&zWA#{*lM`mLc$Su@8M?@@YtA_ie)LA5XQQYX7o3;nSnc-BH(QGf6icnfYidiD2F3q$H#sD* zEXMvTKELD7-N}RU7G9hbO}~$e5N7sSPY3qFQA12BRCLZQY ziZ$je&PT&GlNrr#Gki733bPg(c~urB`(4wn#e{#nN;?D{0?P#MEa(9aWbsKM2r!kaz=C?Ekgk*Ax)8T znNs4Hdslh6^?~vBXEiL7nmS(4fRC1c3?`-S#5BhzXHLq$kli|uWvs0<@My}U7oF#N zMs0%>(Xn@H&-|@SxAeu5pL}C>7^s)|M9*<`xqh2_O2`#jL@E z#W6g_>3>r_!@aX-oZJ?;XL4>f{l7tEM+RxQD@k|ls?OUAAs(?HUAqjsa`-95E2$%i*2 z?tc`+M~V{0t{OCQV*{EikmceUw+U}ORrUVUU~U!llv0>e{?(cu^!PqPcV49ZXOHw{ ziPnUFvi>B(_0oj{gb%7g|MI>G<9{!KQp*YQ!{42FV?4M7;=e9|5RM)eLfHe=c#FbB z3Sf{wUF{BOMa(0fkbg9>FxVz5Ayh&Mb@XK&O%6XTqiP3^KWX^(THqfS`qq%%wh{IG z4O9k*^e0&UIjy+Wtlww+^uyoHLpxb3{_C&MyAC-evIMl9{!;K4DGr5DIjzQOSb~84 z?lcb?cG^qTeq1sl+Yd>;U!uBlG^ar|P4pO_7nLJGY;PB?sZOZ9A6vB_}L25F7n_6JtASE(Q^m!IB{T$sUWk!5I}J@<2Hv5$Y3cE= zg=V5qR+3iIS90yF!fSV1c6|q|ly6%Uk~H~l>vX3{YdUvkeB9tQ^x1XA`8_L|@v$~G z>2UvQSKs3XI&^H&Sf;CW#x7Uu=39lAx}PGouxu1wA9sHrD}0ITV_{N&;aDjT8+fvo zxpHeLU*_gNqNY@JP@PdF4>Z&-fH0VJISM)&ASE%=zqPx6QBhTEPfn#Q>@5}GCXn}8 z{cc?I9(QWyy%JR{=(m?jnvr$$2g=BnnzB?fp{@$C>~9VC*k;hQdVAEJc0^QdZObR; zjlhKJwtYIiGGFVK|L#b)qMcv}9#?n?qz92q+)AnOTb=1pd3Fe@|1On6|EY>uV*`ch zcxy>>fG(9jC2TTf>NqBk_dVX(ROKL&NqnEQ6A2CHTtZS(!TN~$wVO=>`&-)^EtW4_ z&luM8>UsqOPjzltzJrM@#p?iJQbaH^9o9O%if!^6h)igX?>xW2Byx9<8_gR*&@xc@ zD0=-_yfe2gGLqb4)z*~-Y73bj9n+ef9v`A+{`B-6Y~XBBaBAPPKNWK5N}egilNd%P zY`iEJ5%r@mn(jRIW$aq0PDcSMqA%=MHcXvY!%D_w)(w z#5Wrv=lwM?D=WMTOlepE5jS7fTQyI@<+j(K^d`jK5;rLw8;Xx$rm`6~QCsp*QIdOC zaRx&KS|N2SHN)4hzzyycklrIDZniu>3K94gxKMm)f6C*ZV0QbA?Pzp^&FJ!cAy*>& zgOUV}f|8nqfmkm3oc{ATK9{>`-l>AShUjRXFVTglx$VN**)UonX557)j?(paJT=sv z_yMYLgAp_jTsqJ%j6#LYVygVpVV39DlavCQzH~w4f#Zi{OT4s5({8FUSQoj?iAYj! zSj)wKO*7LL0JFK{?bHOMr*ns4?D5`gf~BA%0k@2y$@l!XZ@;L9r) z?~E#9emEBx;3lN84OxT44B7VkB{_!dL+iT*mR0Z_corxrWkic9g+QkUEXq!;ZV13gVMeh&83jLMZEeeEGtGMyD19aj5>vdS5WYu{HtAFag1X}Jp-#DKteK;g69>KB>wLncEn*E2 z)6!X76CoFeKDVyK0Z%1)ApMl84-p~T~%-F}r%dm5FhWgBXC zf8VZ}ik}?3_Cvpmq9tmxqdkxc&(h+6aA8twkhLiJ#8UcJ|mxy$CC(fV>Lbf zF^h|@#%>NK#3VbKSFWKP?TftKU_ez&v=;^H_?n@c{-U`()7R7?Bb%~Hu&O95=p3Ki zj8XXR_?JR=|q@QjZ<;$UN z$k?-v?_@gsSV*X<-&han_f3Sw*vl+z07a2$%@I$Fo-aLOxr55P>9}N#T9wy$^>E^< zhjU9_k5lKOrXxeFI}#kfJ$*BdomE_{>$+sMndm-{(O4?I(H#nt=IJ~_o^#8`LGAI7 z=nXa+u3r-&4AOmKNm7-TTjW6+qoxK05L?&7eF4{*!FBb6w�y3#e%kgElqe^sH=7 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 DN7m$8 literal 0 HcmV?d00001 diff --git a/docs/images/UiClassDiagram.png b/docs/images/UiClassDiagram.png new file mode 100644 index 0000000000000000000000000000000000000000..11f06d686714cf02d88c4b32879bb71b11f56e13 GIT binary patch literal 48363 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 literal 0 HcmV?d00001 diff --git a/docs/images/UndoRedoState0.png b/docs/images/UndoRedoState0.png new file mode 100644 index 0000000000000000000000000000000000000000..c5f91b5853370c1d6a8b9f5f9a9724e4a4a2c429 GIT binary patch literal 6619 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 literal 0 HcmV?d00001 diff --git a/docs/images/UndoRedoState2.png b/docs/images/UndoRedoState2.png new file mode 100644 index 0000000000000000000000000000000000000000..20853694e0338a708b62ce3a20c72bff00c0b8e9 GIT binary patch literal 7855 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 literal 0 HcmV?d00001 diff --git a/docs/images/UndoRedoState3.png b/docs/images/UndoRedoState3.png new file mode 100644 index 0000000000000000000000000000000000000000..1a9551b31bea8ffedd9db1094f06ef6b74431fe8 GIT binary patch literal 7588 zcmeHscT|&Kw`LGUrFR6xfQmFJiV*42K_I9!mEJo6Lhp)zf>c2ufT0MH-diY9X$k~L z5Rfhip*IP|Kww^--?#3)vu53yZ_U5+{*kuM+IydU_I}QOp1gVh)uf~5q6UFLblO^K zk3b-b8Q}Am3ul1WuV*=mfHz?u^~XN8Fwa0Ydj}toroD%~x3!PG9j{Fwual3DCtOxs z+|$k4!^hX%P0SYN?l;g227%5bI2%6p`Pc6t3cyZ4_J*OJKKCugwj&eWVVcV-{*V{< zO9ijKe?grrY-4cOP~q;HwoR8StWEmtgVW#*vXjagLj~g!nB49$;itluv-JmQX_f_^ z^x`VoJPC#~iQZrlV>5!`Fm3d6_AV`LNkbLq0C1`!hiB0pRkHMpqS7d1;~Fk$Z$}B< zPS0zMRPacyM``wkx1D4%T$oZ?bbOvAU2>_4u+X=4`CxWo{b24@gj}&eC5Uh6%u|I) zR4wlni6WeTk#QSC!|cR4O>WOaO;1P4g#AxS7mL>#F`_cIf*9BK#|S@+nEGn0I7;q? zVd0Hf9n3jPSEqUnXJNI{iBTsttw`s|5Y_P56ee$yDW2eVJ>y$kncsdsdqP`(+9PPX zyty`n|AqZGIo`R%3v;i){+g2rzrGu$FS1IfA=L8lq0x;_y0~8Xg+tjR4ulM)Gqh`W zhN{?W85Mdmk*C-W4vf3?3CwOkvF^1_@;BwV(4Lf(&ru}SFoO(I$b0S89AU-1>(8Q> z{ZW2V#&;mVeu+)nK!n=QIKLh(9=w~#<8Z&Kd_AM@(V*!-KQsDMUmEwOryTO8kimhX zJSzWVdA~rmfk;2=Sdp0_!QEWkHL}DqXk^rPxA&qK1C@0}YG$$TUb3~cs<|OpXsr0- z>1k>BPPi1)fUaeaiRaS7!hMwh)^iV+1Zn9#l0Ox)F={aS&To2M4tcR)L#-IDMK5;4 zuk(I%FM&22K+Xy?Y8Cl;T^u~OL~k0i#%f`clerHIZb#E%XCvj z44&&JOgc`{J)hV+2eEy`{oPzI4H8D%A^#f9)a>2+RKTBB@axc%uH~5Td)i?XS~=!5 zYIR9QAP`rUwwkhGfW^i%jSuSx`TRCk?)n17vsS*d7p~7S-Mh+{d-i!m#tRpn*jN?i ze$2C2-ZT5DSGyh$sfZ>tM9rj_qdf|lv?IYIaQ8L=P`I`Y3;T3S?7Q==ZoP8Ip7rzeKg+U|fwR8>ic zi&wsWP5X4J)=~fd{oXcgSQ0JWLdgRN91k|9<6>hE>BloLr{pa@K0XGeV~I+5sd0Ji%a=|gB}RUJ``9cS zx%%qWtD}Q0jz-a&H($rc7iz{lqdXtBKkn$p_N2y6+cUCIC%q;)giUj+4zOy|^FdqN z3r8@y;~%Sg1$3O7(Il4l8|}Nsu6~{T0V(G{Fgck;GQ9Pa3ESeg!7Ktq5PYy{f5f_$ zs7U&7=)F)GPAgsNcO~Fro!Fo3#F#$VQ_r%Sb?u73^c%FoZQs7TnWG;h)HKPZEdFR3){52N%^ zNA?>HK=BoX85yND2}?*Mk$@V=KS{R?6RIFV=dDQcj2ure#g$HTtQ3!f&7Yr4w};AI zz51NI4Np!^HiWp;Jbp?%IKVXOQTqG)d%c$q;bg}`Jf@OX!@|O%Tbflf)ydNC6IDiT zG5ZH_IJ{WNw)^!p%><{ODwy|sy{C;HdgNcfyjRoH(q5Ievv8Z4n!2`Ty$><{PbtU^ zUk|ig`}mAfLyx@{CL?6C%sCZs&>Xx=z}^f}!$&jkM|G3-)>f$A%5F^5v#b&8phu4S zYaKBRj-{PE6T^;>_ry(V8k#3L9u9@K@bjt+3Tov3{{B*v$^@{I1(!4DQJPv1J1$I$ zZ$s0pZX2i-ril76{^i;A@!FN1;JMFHt-rEnkE4YvTYtqqWC733&6Ry_H<&^DikL3o z@%Zmr4PPLs$G-=|*&7kk?p&p{;$<=>CMGKo!SyZwjfpf-X1}rU{q-l#uj>v!od<90 z-BrZbP*75B>m7n;tBvqso$56Ik>ctPvOz?_$_Gf{>gs9@y%4wY8vfh2@spFm+dn>) zr67@D4vwXj6;5X6l(aPUgXl6b_YY}VS=?M)T&%2joblIp#G8i{0urw%IK}Mj>`csd z*J3Qq%>E!z5KTukom{{+?}&i@yPNSiF+2{R*8rOh`uD~{a)HzjnYY9DmD~oV-ap_J3gRfk<0*poUENpC2LB!>s zJ&8JeZn6l=;EnpPZv=o0_lW>Vev)_e<6tJZ5`d3KvRMg)^Wc!}g|BbC*+8Jnxd0MN zN*a`9BoMxQ`GQ8vHvh4A?_l8J!-qCqK6hfGqkH*5AkRxezDxkp&no?MA1IFri--WN zz;)%y=EepO3yWm<$#E70R$~;rzpkyV?JPfaRwRaEnL3}-#~uG(JG$Fp@Ez8;x~scG zugd#ULGn5iHVKLMg!z#ZoEHbdO<>{vd!y9BgbmW3qnhk6m1ZH~4sYtvX*a0rAY2g0g9Gv}ksAc8z2b zUPnAfA=tRgRT3g3q+Rx49dWtAbxf>!oL*-Y;;!dKA$9s*No0^8^qi8rP z%$il=o;`b37x3fbv(KMZ-Zlffo3IAbi|PVyzG3>PG3SNZ(-TPi&fZ>{3Ft1(A9Df% zF^e|=0O~T1iixSEKB{SQ9jgeTZIN;a_ZFm^1iBpD{l2iUn&*aqK%DQCRL8*uAPpM+ z?WqGfa{l{7;`=qv-c+Hqv^2Mox1y$3uU%_vYdgLOoKvIqG zuZ6D@*4LGkl*Ggm{4Oywt0)g*48+96QHMn>TM-cvL?ThraiB^zVwdm#WhD8p?eyPF zFJ6XszzU=%F01!oF!7z!$cqQbiTZK3Y{QRlt{nk$&z&))&0FLM@9H{kq%yBQ5y*5VaBS)&_8bRtJxRCZNfxE z$*Mj+a{qIU%-=Qcf7TE~UJP0b)S=PX%}tMA~#bkRpkC5;DifW zFKGqM8I?e-N^uidaZ{~XbOs*W{l&w7*LGxIMP&KcTKBp~%J@F*$SxUk%P>%b?|Mk< zHoHrppspDPdk8vstdqwKHd?5Wj_}R-Zv@s*%%GDrq^!iH}?-+~fnj zh0J?c1n6-Ibw!zSPq~Yxr2mOvbajme87wyP83g1CYY!Fr%r1UK^Odfsz|z-Z15KAd zZtJa~dzY{sF#_wer?P8E#kQ%Dk*Khe`VKMkr#!3+{)@d_q@kjAKalG`o8CCVoX8H2 zjp@kY5k=Ek5B#a%=dD%)7OuM5_9%94zN;$@=*XTa|JQz#pW4|yP*dhX zvVm@mWOZ}mLgqWcw{Md))av$$K8bO0g2ITe48Ya+wYr+=*|Tx*jQE2(Z2g3 z>r7MiyXa|j{mSNKOXFmrj=*a$QiX@KRb$T*n6p{GvJ+bo`Qt}KYwOMSv}Rdfwnt;hy#&mk-BlxZgJTZa8M_TB6DpZTp6R9d$A z^QZ4FA&14>q%kvky4`)gqS+FY(H6Y)&~fmc$(t0LfSk<%zs-=$cY4c@bhKX1pSP`m z@;p^Xp4!{%I92Cb^>)XL4@t-h2iXPhVjaIrAWRVEt3zL=rk2pYu8z%O@6HCv5v7p< z`QX#wYRu8JBoU-#!lyus*RgZhZ!}v9J|b`RU^9{j4%|9YC%Xq^+(SOb3)}oXxDGPH zzy%p{8~F=r3i;P*-ISJ16B83V_B`E5Y%UAmTb%%=zUubUwH%6Xf~k6&@kJ<|bcyy$ zEG*qOUUP-ckBqkWky`u*=d!X&4VHEX!+ZSIO_;-VMZ_(Y8yU*;C?R?W&>93~s6oX&9Vh<6j4*pyE{Ha0%3hLeVG zKGoF;j!+CcqWWt7{x74WDU-3o7vM zOxK`8_IXr8=p3Q_M zGOG0;($m$Er6_&zCD-DP@VV%jcgWcsAylHC1*%8nzKa*E%y*TD(a}^B|783ybywef z->803cB@Jw#(Hx$M8~lPAxqA(vs&dBZKB@Iltc^hN#l$s1T$E0KOYHZMZA`0e9{KHiuFCJIVa992)xe=BsHpz^*tx#}i*CeRX>s~q zs8hOvi#|1$($nzRgs*?~=t)Rdke|9a)-{b+IM*h~Bdsu7-P@b?rc+5Hw-4u?vlV~i zoken(_X_|vWKgZzM{{)WiFE>zd|;W^aYD!n@e%-n3t z7<+kJknhIsAVXoW`-G&q_VHr>NMS)C{JsfQe4dHEet1NMma(`fx#LR!?|pxYe5%%9g_wg87!qj zoR!>|;1idZ>OzmC=Pxq#aNk1t4FcKc#CrWNcPkSX+cGY(*Z|BA<<`&ysnBB@-c`_f^*r7UF%VNmT9;YHWI{fsE`@_Ni7(9%Oj3gZ$dOFpl zLm24k=T=wor6!H@^ESYQq5;n~fIu35{ICMpMPQT#5WMZ~pK*kOX!ZHUMS%0hafrV) z0WDw2=lo`9YO2$mosp4|lyomNP%5IG5236Fuu>X#37gKBfQ<09l!8cyqjg!GYL<*6 zXo5q100#HV1r(}!C-V7B=z%%fNzQLw>y(a$Mh6N#SuRLiPzK2Y!qmCFm0^^5iyuG$ z-tw1I zpav~x+HxUU0U^ILv8v{IN zKoQsY1q23>N*FZyDXsM|j&?{lYQBOqHNuIi5Fk)=KvV$1`u6|7{yW)-KKikYD=025 zo|&16-r`oTHS?AQgORsvyA1)tjJo*I<)uRv$D+5V=Qg0mF>2@<8I63ewspiJ_$xtG zT=|^qQUJHBcOB~;0XG2Z#`3aLGqshJn&kJs$w}^mz7*iZ0e<$c->g0w*`0yXe5W*F z_)f!V$NYc$vCocbacN0_pa1vo-}Ua3(xRdpfPD7r!uiPt_bfB?S|o#_7QnN|YwRC9 z7y>qgIh?0y@BM6?EoJ-K0ZJ2*=D8QqR>yhAW2#9xk}8yl(_~{~;}EwnYjAr4Fx>r( zNdY>z;KsvSJ`%)-UJGB6dwY9DOe)rA+FD?2efPDRNM9#8ycpjr8#rZP*Y2LOg%O*Ffcb)2qh6A zvmtL_Qg&aGfP)0IX4qsyJpRcy8xIL7#Mg=8OhYRI^A*r-~()`$qSIt zva_=R>15*)T$7)U@?UNRFT-Y9g^aJW=l|XvRN`2hx50#w1&f|wT3fR{Y=2j!q%bS$ zPH~Ihrw1z@pB!xsWF86_r3}s`!gj4 zBqeJB;q}IW+vbP&)*!v8zs4SDXhiR~IQ&Y-97p+f?lgK#-{uUQPzPA|o70ym&E;kK z8YEso7_$!bD)pZUM8TH^fE=*SqV$o{&5m$Qd$(Q+kkdaE0i4Rh!U9n8)sG)Ny6rWu zHpa5oC1bKP+KVlp}f_fM8RAc@) znU7@?u?Q#c#m2_!q>C*sEW9r&LR{|VAd|^JN5oZPPM(_Su#1^p0)s6L4Gk?UER2lQ zZM);S8{NilHyBUFdSn7Mu`CLByUWM-Y2h7~C+#8J3Z(ZO$WB$kDz-K@v_l_9M(P12ACP5!WuEy1b^n_`c#f64Y?q&(q;y*Wf0u%^)uCz?Dpt?` E2LvS7wEzGB literal 0 HcmV?d00001 diff --git a/docs/images/UndoRedoState4.png b/docs/images/UndoRedoState4.png new file mode 100644 index 0000000000000000000000000000000000000000..46dfae78c94886758c6d6c3c525db41b361d14e7 GIT binary patch literal 7605 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 literal 0 HcmV?d00001 diff --git a/docs/images/UndoRedoState5.png b/docs/images/UndoRedoState5.png new file mode 100644 index 0000000000000000000000000000000000000000..f45889b5fdff0652cf017fd906297d229e49c8fe GIT binary patch literal 9427 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 literal 0 HcmV?d00001 diff --git a/docs/images/UndoSequenceDiagram.png b/docs/images/UndoSequenceDiagram.png new file mode 100644 index 0000000000000000000000000000000000000000..c7a7e637266b619cb915f925ccec102552979f38 GIT binary patch literal 27508 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 jA +![The relationship between RemarkCommand and Command](../images/add-remark/RemarkCommandClass.png) Following the convention in other commands, we add relevant messages as constants and use them. **`RemarkCommand.java`:** -```java +``` java public static final String MESSAGE_USAGE = COMMAND_WORD + ": Edits the remark of the person identified " + "by the index number used in the last person listing. " @@ -93,7 +90,7 @@ Let’s change `RemarkCommand` to parse input from the user. We start by modifying the constructor of `RemarkCommand` to accept an `Index` and a `String`. While we are at it, let’s change the error message to echo the values. While this is not a replacement for tests, it is an obvious way to tell if our code is functioning as intended. -```java +``` java import static seedu.address.commons.util.CollectionUtil.requireAllNonNull; //... public class RemarkCommand extends Command { @@ -145,13 +142,13 @@ Now let’s move on to writing a parser that will extract the index and remark f Create a `RemarkCommandParser` class in the `seedu.address.logic.parser` package. The class must extend the `Parser` interface. - +![The relationship between Parser and RemarkCommandParser](../images/add-remark/RemarkCommandParserClass.png) Thankfully, `ArgumentTokenizer#tokenize()` makes it trivial to parse user input. Let’s take a look at the JavaDoc provided for the function to understand what it does. **`ArgumentTokenizer.java`:** -```java +``` java /** * Tokenizes an arguments string and returns an {@code ArgumentMultimap} * object that maps prefixes to their respective argument values. Only the @@ -169,7 +166,7 @@ We can tell `ArgumentTokenizer#tokenize()` to look out for our new prefix `r/` a **`ArgumentMultimap.java`:** -```java +``` java /** * Returns the last value of {@code prefix}. */ @@ -184,7 +181,7 @@ This appears to be what we need to get a String of the remark. But what about th **`DeleteCommandParser.java`:** -```java +``` java Index index = ParserUtil.parseIndex(args); return new DeleteCommand(index); ``` @@ -195,7 +192,7 @@ Now that we have the know-how to extract the data that we need from the user’s **`RemarkCommandParser.java`:** -```java +``` java public RemarkCommand parse(String args) throws ParseException { requireNonNull(args); ArgumentMultimap argMultimap = ArgumentTokenizer.tokenize(args, @@ -215,11 +212,11 @@ public RemarkCommand parse(String args) throws ParseException { } ``` - +

If you are stuck, check out the sample [here](https://github.com/se-edu/addressbook-level3/commit/dc6d5139d08f6403da0ec624ea32bd79a2ae0cbf#diff-8bf239e8e9529369b577701303ddd96af93178b4ed6735f91c2d8488b20c6b4a). @@ -247,7 +244,7 @@ Simply add the following to [`seedu.address.ui.PersonCard`](https://github.com/s **`PersonCard.java`:** -```java +``` java @FXML private Label remark; ``` @@ -279,11 +276,11 @@ We change the constructor of `Person` to take a `Remark`. We will also need to d Unfortunately, a change to `Person` will cause other commands to break, you will have to modify these commands to use the updated `Person`! - +
-Use the `Find Usages` feature in IntelliJ IDEA on the `Person` class to find these commands. +:bulb: Use the `Find Usages` feature in IntelliJ IDEA on the `Person` class to find these commands. - +
Refer to [this commit](https://github.com/se-edu/addressbook-level3/commit/ce998c37e65b92d35c91d28c7822cd139c2c0a5c) and check that you have got everything in order! @@ -294,11 +291,11 @@ AddressBook stores data by serializing `JsonAdaptedPerson` into `json` with the While the changes to code may be minimal, the test data will have to be updated as well. - +
-You must delete AddressBook’s storage file located at `/data/addressbook.json` before running it! Not doing so will cause AddressBook to default to an empty address book! +:exclamation: You must delete AddressBook’s storage file located at `/data/addressbook.json` before running it! Not doing so will cause AddressBook to default to an empty address book! - +
Check out [this commit](https://github.com/se-edu/addressbook-level3/commit/556cbd0e03ff224d7a68afba171ad2eb0ce56bbf) to see what the changes entail. @@ -311,7 +308,7 @@ Just add [this one line of code!](https://github.com/se-edu/addressbook-level3/c **`PersonCard.java`:** -```java +``` java public PersonCard(Person person, int displayedIndex) { //... remark.setText(person.getRemark().value); @@ -331,7 +328,7 @@ save it with `Model#setPerson()`. **`RemarkCommand.java`:** -```java +``` java //... public static final String MESSAGE_ADD_REMARK_SUCCESS = "Added remark to Person: %1$s"; public static final String MESSAGE_DELETE_REMARK_SUCCESS = "Removed remark from Person: %1$s"; diff --git a/docs/tutorials/RemovingFields.md b/docs/tutorials/RemovingFields.md index c73bd379e5e..f29169bc924 100644 --- a/docs/tutorials/RemovingFields.md +++ b/docs/tutorials/RemovingFields.md @@ -1,11 +1,8 @@ --- - layout: default.md - title: "Tutorial: Removing Fields" - pageNav: 3 +layout: page +title: "Tutorial: Removing Fields" --- -# Tutorial: Removing Fields - > Perfection is achieved, not when there is nothing more to add, but when there is nothing left to take away. > > — Antoine de Saint-Exupery @@ -13,17 +10,17 @@ When working on an existing code base, you will most likely find that some features that are no longer necessary. This tutorial aims to give you some practice on such a code 'removal' activity by removing the `address` field from `Person` class. - +
**If you have done the [Add `remark` command tutorial](AddRemark.html) already**, you should know where the code had to be updated to add the field `remark`. From that experience, you can deduce where the code needs to be changed to _remove_ that field too. The removing of the `address` field can be done similarly.

However, if you have no such prior knowledge, removing a field can take a quite a bit of detective work. This tutorial takes you through that process. **At least have a read even if you don't actually do the steps yourself.** - +
- - +* Table of Contents +{:toc} ## Safely deleting `Address` @@ -53,10 +50,10 @@ Let’s try removing references to `Address` in `EditPersonDescriptor`. 1. Remove the usages of `address` and select `Do refactor` when you are done. - +
- **Tip:** Removing usages may result in errors. Exercise discretion and fix them. For example, removing the `address` field from the `Person` class will require you to modify its constructor. - + :bulb: **Tip:** Removing usages may result in errors. Exercise discretion and fix them. For example, removing the `address` field from the `Person` class will require you to modify its constructor. +
1. Repeat the steps for the remaining usages of `Address` @@ -74,7 +71,7 @@ A quick look at the `PersonCard` class and its `fxml` file quickly reveals why i **`PersonCard.java`** -```java +``` java ... @FXML private Label address; diff --git a/docs/tutorials/TracingCode.md b/docs/tutorials/TracingCode.md index 2b1b0f2d6b7..4fb62a83ef6 100644 --- a/docs/tutorials/TracingCode.md +++ b/docs/tutorials/TracingCode.md @@ -1,30 +1,26 @@ --- - layout: default.md - title: "Tutorial: Tracing code" - pageNav: 3 +layout: page +title: "Tutorial: Tracing code" --- -# Tutorial: Tracing code - - > Indeed, the ratio of time spent reading versus writing is well over 10 to 1. We are constantly reading old code as part of the effort to write new code. …​\[Therefore,\] making it easy to read makes it easier to write. > > — Robert C. Martin Clean Code: A Handbook of Agile Software Craftsmanship When trying to understand an unfamiliar code base, one common strategy used is to trace some representative execution path through the code base. One easy way to trace an execution path is to use a debugger to step through the code. In this tutorial, you will be using the IntelliJ IDEA’s debugger to trace the execution path of a specific user command. - - +* Table of Contents +{:toc} ## Before we start Before we jump into the code, it is useful to get an idea of the overall structure and the high-level behavior of the application. This is provided in the 'Architecture' section of the developer guide. In particular, the architecture diagram (reproduced below), tells us that the App consists of several components. - +![ArchitectureDiagram](../images/ArchitectureDiagram.png) It also has a sequence diagram (reproduced below) that tells us how a command propagates through the App. - + Note how the diagram shows only the execution flows _between_ the main components. That is, it does not show details of the execution path *inside* each component. By hiding those details, the diagram aims to inform the reader about the overall execution path of a command without overwhelming the reader with too much details. In this tutorial, you aim to find those omitted details so that you get a more in-depth understanding of how the code works. @@ -41,16 +37,16 @@ As you know, the first step of debugging is to put in a breakpoint where you wan In our case, we would want to begin the tracing at the very point where the App start processing user input (i.e., somewhere in the UI component), and then trace through how the execution proceeds through the UI component. However, the execution path through a GUI is often somewhat obscure due to various *event-driven mechanisms* used by GUI frameworks, which happens to be the case here too. Therefore, let us put the breakpoint where the `UI` transfers control to the `Logic` component. - + According to the sequence diagram you saw earlier (and repeated above for reference), the `UI` component yields control to the `Logic` component through a method named `execute`. Searching through the code base for an `execute()` method that belongs to the `Logic` component yields a promising candidate in `seedu.address.logic.Logic`. - +
-**Intellij Tip:** The ['**Search Everywhere**' feature](https://www.jetbrains.com/help/idea/searching-everywhere.html) can be used here. In particular, the '**Find Symbol**' ('Symbol' here refers to methods, variables, classes etc.) variant of that feature is quite useful here as we are looking for a _method_ named `execute`, not simply the text `execute`. - +:bulb: **Intellij Tip:** The ['**Search Everywhere**' feature](https://www.jetbrains.com/help/idea/searching-everywhere.html) can be used here. In particular, the '**Find Symbol**' ('Symbol' here refers to methods, variables, classes etc.) variant of that feature is quite useful here as we are looking for a _method_ named `execute`, not simply the text `execute`. +
A quick look at the `seedu.address.logic.Logic` (an extract given below) confirms that this indeed might be what we’re looking for. @@ -71,14 +67,14 @@ public interface Logic { But apparently, this is an interface, not a concrete implementation. That should be fine because the [Architecture section of the Developer Guide](../DeveloperGuide.html#architecture) tells us that components interact through interfaces. Here's the relevant diagram: - + Next, let's find out which statement(s) in the `UI` code is calling this method, thus transferring control from the `UI` to the `Logic`. - +
-**Intellij Tip:** The ['**Find Usages**' feature](https://www.jetbrains.com/help/idea/find-highlight-usages.html#find-usages) can find from which parts of the code a class/method/variable is being used. - +:bulb: **Intellij Tip:** The ['**Find Usages**' feature](https://www.jetbrains.com/help/idea/find-highlight-usages.html#find-usages) can find from which parts of the code a class/method/variable is being used. +
![`Find Usages` tool window. `Edit` \> `Find` \> `Find Usages`.](../images/tracing/FindUsages.png) @@ -91,10 +87,10 @@ Now let’s set the breakpoint. First, double-click the item to reach the corres Recall from the User Guide that the `edit` command has the format: `edit INDEX [n/NAME] [p/PHONE] [e/EMAIL] [a/ADDRESS] [t/TAG]…​` For this tutorial we will be issuing the command `edit 1 n/Alice Yeoh`. - +
-**Tip:** Over the course of the debugging session, you will encounter every major component in the application. Try to keep track of what happens inside the component and where the execution transfers to another component. - +:bulb: **Tip:** Over the course of the debugging session, you will encounter every major component in the application. Try to keep track of what happens inside the component and where the execution transfers to another component. +
1. To start the debugging session, simply `Run` \> `Debug Main` @@ -114,7 +110,7 @@ Recall from the User Guide that the `edit` command has the format: `edit INDEX [ **LogicManager\#execute().** - ```java + ``` java @Override public CommandResult execute(String commandText) throws CommandException, ParseException { @@ -146,7 +142,7 @@ Recall from the User Guide that the `edit` command has the format: `edit INDEX [ ![StepOver](../images/tracing/StepOver.png) 1. _Step into_ the line where user input in parsed from a String to a Command, which should bring you to the `AddressBookParser#parseCommand()` method (partial code given below): - ```java + ``` java public Command parseCommand(String userInput) throws ParseException { ... final String commandWord = matcher.group("commandWord"); @@ -161,7 +157,7 @@ Recall from the User Guide that the `edit` command has the format: `edit INDEX [ 1. Stepping through the `switch` block, we end up at a call to `EditCommandParser().parse()` as expected (because the command we typed is an edit command). - ```java + ``` java ... case EditCommand.COMMAND_WORD: return new EditCommandParser().parse(arguments); @@ -170,10 +166,8 @@ Recall from the User Guide that the `edit` command has the format: `edit INDEX [ 1. Let’s see what `EditCommandParser#parse()` does by stepping into it. You might have to click the 'step into' button multiple times here because there are two method calls in that statement: `EditCommandParser()` and `parse()`. - - - **Intellij Tip:** Sometimes, you might end up stepping into functions that are not of interest. Simply use the `step out` button to get out of them! - +
:bulb: **Intellij Tip:** Sometimes, you might end up stepping into functions that are not of interest. Simply use the `step out` button to get out of them! +
1. Stepping through the method shows that it calls `ArgumentTokenizer#tokenize()` and `ParserUtil#parseIndex()` to obtain the arguments and index required. @@ -181,17 +175,17 @@ Recall from the User Guide that the `edit` command has the format: `edit INDEX [ ![EditCommand](../images/tracing/EditCommand.png) 1. As you just traced through some code involved in parsing a command, you can take a look at this class diagram to see where the various parsing-related classes you encountered fit into the design of the `Logic` component. - + 1. Let’s continue stepping through until we return to `LogicManager#execute()`. The sequence diagram below shows the details of the execution path through the Logic component. Does the execution path you traced in the code so far match the diagram?
- + ![Tracing an `edit` command through the Logic component](../images/tracing/LogicSequenceDiagram.png) 1. Now, step over until you read the statement that calls the `execute()` method of the `EditCommand` object received, and step into that `execute()` method (partial code given below): **`EditCommand#execute()`:** - ```java + ``` java @Override public CommandResult execute(Model model) throws CommandException { ... @@ -211,28 +205,25 @@ Recall from the User Guide that the `edit` command has the format: `edit INDEX [ * it uses the `updateFilteredPersonList` method to ask the `Model` to populate the 'filtered list' with _all_ persons.
FYI, The 'filtered list' is the list of persons resulting from the most recent operation that will be shown to the user immediately after. For the `edit` command, we populate it with all the persons so that the user can see the edited person along with all other persons. If this was a `find` command, we would be setting that list to contain the search results instead.
To provide some context, given below is the class diagram of the `Model` component. See if you can figure out where the 'filtered list' of persons is being tracked. -
+
* :bulb: This may be a good time to read through the [`Model` component section of the DG](../DeveloperGuide.html#model-component) 1. As you step through the rest of the statements in the `EditCommand#execute()` method, you'll see that it creates a `CommandResult` object (containing information about the result of the execution) and returns it.
Advancing the debugger by one more step should take you back to the middle of the `LogicManager#execute()` method.
1. Given that you have already seen quite a few classes in the `Logic` component in action, see if you can identify in this partial class diagram some of the classes you've encountered so far, and see how they fit into the class structure of the `Logic` component: - - + * :bulb: This may be a good time to read through the [`Logic` component section of the DG](../DeveloperGuide.html#logic-component) 1. Similar to before, you can step over/into statements in the `LogicManager#execute()` method to examine how the control is transferred to the `Storage` component and what happens inside that component. - - - **Intellij Tip:** When trying to step into a statement such as `storage.saveAddressBook(model.getAddressBook())` which contains multiple method calls, Intellij will let you choose (by clicking) which one you want to step into. - +
:bulb: **Intellij Tip:** When trying to step into a statement such as `storage.saveAddressBook(model.getAddressBook())` which contains multiple method calls, Intellij will let you choose (by clicking) which one you want to step into. +
-1. As you step through the code inside the `Storage` component, you will eventually arrive at the `JsonAddressBook#saveAddressBook()` method which calls the `JsonSerializableAddressBook` constructor, to create an object that can be _serialized_ (i.e., stored in storage medium) in JSON format. That constructor is given below (with added line breaks for easier readability): +1. As you step through the code inside the `Storage` component, you will eventually arrive at the `JsonAddressBook#saveAddressBook()` method which calls the `JsonSerializableAddressBook` constructor, to create an object that can be _serialized_ (i.e., stored in storage medium) in JSON format. That constructor is given below (with added line breaks for easier readability): **`JsonSerializableAddressBook` constructor:** - ```java + ``` java /** * Converts a given {@code ReadOnlyAddressBook} into this class for Jackson use. * @@ -252,8 +243,7 @@ Recall from the User Guide that the `edit` command has the format: `edit INDEX [ This is because regular Java objects need to go through an _adaptation_ for them to be suitable to be saved in JSON format. 1. While you are stepping through the classes in the `Storage` component, here is the component's class diagram to help you understand how those classes fit into the structure of the component.
- - + * :bulb: This may be a good time to read through the [`Storage` component section of the DG](../DeveloperGuide.html#storage-component) 1. We can continue to step through until you reach the end of the `LogicManager#execute()` method and return to the `MainWindow#executeCommand()` method (the place where we put the original breakpoint). @@ -261,7 +251,7 @@ Recall from the User Guide that the `edit` command has the format: `edit INDEX [ 1. Stepping into `resultDisplay.setFeedbackToUser(commandResult.getFeedbackToUser());`, we end up in: **`ResultDisplay#setFeedbackToUser()`** - ```java + ``` java public void setFeedbackToUser(String feedbackToUser) { requireNonNull(feedbackToUser); resultDisplay.setText(feedbackToUser);