From 77371937ad7ed3e0a77099e3692ce7b8f44aa1fa Mon Sep 17 00:00:00 2001 From: Ziwei Wang Date: Tue, 16 Apr 2024 10:37:20 -0400 Subject: [PATCH] Move client's README & TROUBLESHOOTING to root The extension manifest is now root's package.json, the README in root is then used for marketplace page. The images used in the README are also moved. Some un-used images are removed. --- README.md | 309 +++++++++++++----- .../TROUBLESHOOTING.md => TROUBLESHOOTING.md | 0 client/README.md | 264 --------------- client/doc/overrides.gif | Bin 10039 -> 0 bytes client/doc/variable-flags.gif | Bin 17121 -> 0 bytes client/doc/yocto-tasks.gif | Bin 48588 -> 0 bytes .../bitbake-terminal-profile.png | Bin {client/doc => images}/config-picker.png | Bin {client/doc => images}/contextual-menu.png | Bin {client/doc => images}/devtool.png | Bin .../doc => images}/directive-statements.gif | Bin {client/doc => images}/go-to-definition.gif | Bin {client/doc => images}/highlighting.png | Bin {client/doc => images}/hover-information.gif | Bin {client/doc => images}/other-suggestions.gif | Bin {client/doc => images}/problems.png | Bin {client/doc => images}/recipe-view.png | Bin {client/doc => images}/status-bar.gif | Bin 18 files changed, 229 insertions(+), 344 deletions(-) rename client/TROUBLESHOOTING.md => TROUBLESHOOTING.md (100%) delete mode 100644 client/README.md delete mode 100644 client/doc/overrides.gif delete mode 100644 client/doc/variable-flags.gif delete mode 100644 client/doc/yocto-tasks.gif rename {client/doc => images}/bitbake-terminal-profile.png (100%) rename {client/doc => images}/config-picker.png (100%) rename {client/doc => images}/contextual-menu.png (100%) rename {client/doc => images}/devtool.png (100%) rename {client/doc => images}/directive-statements.gif (100%) rename {client/doc => images}/go-to-definition.gif (100%) rename {client/doc => images}/highlighting.png (100%) rename {client/doc => images}/hover-information.gif (100%) rename {client/doc => images}/other-suggestions.gif (100%) rename {client/doc => images}/problems.png (100%) rename {client/doc => images}/recipe-view.png (100%) rename {client/doc => images}/status-bar.gif (100%) diff --git a/README.md b/README.md index b3f2c8fa..c84cfc1f 100644 --- a/README.md +++ b/README.md @@ -1,115 +1,264 @@ -# BitBake recipe language support plugin for Visual Studio Code +# BitBake recipe language support in Visual Studio Code -[![vscode-bitbake CI/CD](https://github.com/yoctoproject/vscode-bitbake/actions/workflows/main.yml/badge.svg?branch=main)](https://github.com/yoctoproject/vscode-bitbake/actions/workflows/main.yml?query=branch%3Amain) +## Configuration -**For a description of the extension itself, please see [the client's README](./client/README.md)**. +Some advanced features of this extension will need to locate and run BitBake. It can be configured from VSCode's settings. -**It is also possible to use some features of the language server on other editors (Vim, ...). Follow [the server's README](./server/README.md)**. +To access the settings, you can navigate to **Files -> Preferences -> Settings** (or use the shortcut [**Ctrl+,**]). BitBake's settings are under **Extensions**. More options are available to tweak the extension's behavior. -The changelog for the extension can be found [here](./client/CHANGELOG.md). +Here's an example `settings.json` reflecting some default values to run bitbake on your host machine: +```json +{ + "bitbake.pathToBuildFolder": "${workspaceFolder}/build", + "bitbake.pathToEnvScript": "${workspaceFolder}/sources/poky/oe-init-build-env", + "bitbake.pathToBitbakeFolder": "${workspaceFolder}/sources/poky/bitbake", +} +``` -## Installing from [VS Code Extension Marketplace](https://marketplace.visualstudio.com/VSCode) +### BitBake Command wrappers -To install this extension from the VS Code Extension Marketplace, please follow [this guide](https://marketplace.visualstudio.com/items?itemName=yocto-project.yocto-bitbake). -For more information regarding the Extension Marketplace, please see the [official documentation](https://code.visualstudio.com/docs/editor/extension-gallery). +Various tools provide ways to automatically configure the BitBake environment, or even call it inside containers. The `bitbake.commandWrapper` option allows you to use them through this extension by wrapping around the bitbake invocation. +The resulting commands generated by this extension will be for example: +```shell + $ $commandWrapper "bitbake core-image-minimal" +``` +Or, if `pathToEnvScript` and `pathToBuildFolder` are defined: +```shell + $ $commandWrapper ". $pathToEnvScript $pathToBuildFolder && bitbake core-image-minimal" +``` +You can also control the directory from which they are started by using the `bitbake.workingDirectory` option as well as the shell environment variables with `bitbake.shellEnv`. -## Manual installation +Here are some examples using the most popular bitbake wrappers: +```json +{ + "bitbake.commandWrapper": "docker run --rm -v ${workspaceFolder}:${workspaceFolder} crops/poky --workdir=${workspaceFolder} /bin/bash -c", + "bitbake.pathToEnvScript": "${workspaceFolder}/sources/poky/oe-init-build-env", + "bitbake.pathToBitbakeFolder": "${workspaceFolder}/sources/poky/bitbake" +} +{ + "bitbake.commandWrapper": "kas shell -c", + "bitbake.workingDirectory": "${workspaceFolder}/yocto" +} +{ + "bitbake.commandWrapper": "cqfd run", + "bitbake.shellEnv": { + "CQFD_EXTRA_RUN_ARGS": "-e DISPLAY=:0 -v /tmp/.X11-unix:/tmp/.X11-unix" + } +} +{ "bitbake.commandWrapper": "${workspaceFolder}/build.sh --" } +``` -Manual installation takes place in two steps. The code must be installed via `npm` and subsequently built within Visual Studio Code. Before performing these steps, please ensure you have cloned this repository. +### Defining Multiple Configurations -### Commands +Sometimes it is necessary to build the same project with different distros or +machines configurations. You can define alternative settings for the extension +through the `bitbake.buildConfigurations` array. It can redefine any property +illustrated above, including command wrappers. You'll be able to switch between +them through the status bar at the bottom right. -To install the dependencies: -``` sh -npm install +```json +{ + "bitbake.buildConfigurations": [ + { + "name": "Machine 1", + "pathToBuildFolder": "${workspaceFolder}/build1" + }, + { + "name": "Machine 2", + "pathToBuildFolder": "${workspaceFolder}/build2" + } + ] +} ``` -To compile the typescript files: -``` sh -npm run compile -``` -To clean up the project (This deletes node_modules): -``` sh -npm run clean -``` -For more commands, refer to the `script` section in the root `package.json`. -## Debugging -Press `F5` or navigate to the debug section on the left of the VS Code and select the client or server to to launch the debug client. +![Configuration picker](images/config-picker.png) -## Testing +### Additional settings recommendations -BitBake and Yocto docs are required for some features to work. They need to be fetched before testing and development: -``` sh -npm run fetch:docs -``` -Similar for the command that fetches poky, it needs to be run before running the integration tests: -``` sh -npm run fetch:poky -``` -A wrapper npm script allows running several kinds of tests. To run all tests, use: -``` sh -npm test +If your workspace contains a Yocto build directory, some other extensions may +be hogging lots of resources to parse it's contents and stall your machine. Here are +some example settings to improve your experience (assuming your build directory +is called `build`). You can add them to your `settings.json` file, or your global +user settings. + +```json +{ + "files.watcherExclude": { + "**/build": true + }, + "search.exclude": { + "**/build": true + }, + "C_Cpp.files.exclude": { + "**/build": true + }, + "python.analysis.exclude": [ + "**/build" + ], + "git.repositoryScanIgnoredFolders": [ + "**/build" + ] +} ``` -All the tests mentionned are run in our GitHub CI. -### Linter tests +Note that the extension deactivates the "files.trimTrailingWhitespace" setting for +Python and Shell script, as it interferes with the functioning of features related +to embedded languages. -One can check coding style using -``` sh -npm run lint -``` -Install the recommended extensions to automatically fix linting errors when possible. +## Features + +### Syntax highlighting + +The extension provides syntax highlighting for BitBake recipes, classes, configuration and inc-files. Syntax highlighting also supports embedded languages inside BitBake recipes including inline Python variable expansion, shell code and Python code. + +The BitBake language is automatically detected based on the file extension: +[`.bb`, `.bbappend`, `.bbclass`]. [`.conf`, `.inc`] are also supported but may be used by other tools. + +![Syntax Hilighting](images/highlighting.png) + +### Context-based suggestions + +*CTRL+SPACE* may be used to provide suggestions. For example, typing `inherit` and pressing *CTRL+SPACE* provides the suggestion `inherit kernel`. Suggestions are context-based, only providing suggestions that apply to your specific layer configuration. + +The following suggestions are currently supported: + +* Keywords `inherit`, `require`, `include` and `export` +* Context-based suggestions for keywords `inherit`, `require` and `include` (provided by *language-server*) +* Context-based suggestions for all symbols within the include hierarchy + +![Directive-statements](images/directive-statements.gif) + +### Go to definition +*This feature requires to have properly [configured the extension](#setup-the-extension)* + +*CTRL and click* may be used to open the file associated with a class, inc-file, recipe or variable. If more than one definition exists, a list of definitions is provided. + +The go to definition feature currently behaves as follows: + +| Definition | Target(s) | +| --- | --- | +| class or inc-file | file | +| recipe | recipe definition and all bbappends | +| symbol | all symbols within the include hierarchy | + +![Go-to-definition](images/go-to-definition.gif) + +### Show definitions of BitBake's defined variables on hover +*This feature requires to have properly [configured the extension](#setup-the-extension)* + +Place your cursor over a variable. If it is a BitBake defined variable, then its definition from the documentation will be displayed. + +![Hover](images/hover-information.gif) -### Unit tests +### Other code suggestions +Overrides, variable flags, frequently-used task names and more. -Unit tests are powered by Jest. They allow mocking the behavior of VSCode -and other external libraries. They can individually be run with: -```sh -npm run jest +![Other-suggestions](images/other-suggestions.gif) + + +### BitBake tasks + +BitBake build tasks may be defined through the `tasks.json` file. They allow to build or a run any specific BitBake command on a set of recipes. This feature requires to have properly [configured the extension](#setup-the-extension). Learn how to use VSCode tasks [on the official Visual Studio Code documentation](https://code.visualstudio.com/docs/editor/tasks). + +Here's an example `tasks.json` configuration: +```json +{ + "tasks": [ + { + "label": "Build core-image-minimal", + "type": "bitbake", + "recipes": [ + "core-image-minimal" + ] + } + ] +} ``` -Unit tests are defined in the `__tests__` folders. -If you have installed the recommended extensions, you'll find launch and debug -tasks for the unit tests in the debug section of VSCode. +### BitBake commands + +The extension provides commands and shortcuts to run BitBake tasks. These commands are available in the command palette (`CTRL+SHIFT+P`) and in the editor's contextual menu. + +![Contextual menu](images/contextual-menu.png) + +### BitBake recipes view + +The extension provides a view to display the list of recipes in the current workspace. This view is available in the left panel. You can quickly navigate to a recipe's source or build it by clicking on it. + +![Recipe tree view](images/recipe-view.png) + +### Problems matcher + +By default, this extension will run BitBake in parse only mode in the background on file saves to identify syntax errors. They will be displayed in the problems panel. You can disable this feature through the extension's settings. + +![Problem matcher](images/problems.png) + +### BitBake status bar + +Bitbake parsing status is displayed in the status bar at the bottom of the screen. It will show wether the last BitBake run was successful or not. The BitBake server queues all BitBake commands and runs them sequentially. The status bar will show you if the extension is currently trying to access the bitbake server. -### Grammar tests +![Status bar](images/status-bar.gif) -See [the individual grammar tests README](client/test/grammars/README.md). +### Devtool and eSDK integration -### Integration tests +The recipe's contextual menu provides shortcuts to open new `devtool` and configure the eSDK on a recipe. +Start by right-clicking on a recipe in the recipe tree view, or in the editor's contextual menu and run the command `Bitbake: Devtool: Modify recipe`. +This feature allows you to modify the recipe's source code and rebuild it from within VSCode. +More information and `devtool` and the eSDK in Yocto's [Application Development and the Extensible SDK (eSDK)](https://docs.yoctoproject.org/sdk-manual/) -These tests allow running the BitBake extension in a live VSCode environment. -See [the individual integration tests README](integration-tests/README.md). +Once the workspace is set up, it will appear in the left panel. Use the contextual menu or the action buttons to build, update the recipe, or close ("reset") the workspace. -## Tree-sitter -This extension uses tree-sitter to parse the documents. The `.wasm` file used for creating the parser is generated from latest release at [here](https://github.com/amaanq/tree-sitter-bitbake). +![Devtool Workspace](images/devtool.png) -For more information about the tree-sitter and its CLI, Check out the offical [site](https://tree-sitter.github.io/tree-sitter/) and [npm page](https://www.npmjs.com/package/tree-sitter-cli) +Clicking on the workspace name will open the sources' workspace in a new window. You may edit the sources and generate patches in your Yocto recipes by following the devtool workflow described in [Yocto's documentation](https://docs.yoctoproject.org/sdk-manual/extensible.html#use-devtool-modify-to-modify-the-source-of-an-existing-component): + - Make changes to the sources + - Commit them in the local git repository + - Run the `Bitbake: Devtool: Update recipe` command to generate the patch and update the recipe -## Publishing +You can also set up the SDK for the recipe by running the `Bitbake: Devtool: Configure VSCode SDK` command. This will create `.vscode/settings.json`, `.vscode/tasks.json` and `.vscode/launch.json` configurations to cross-compile, deploy and debug the recipe on a target machine through SSH. You'll need to configure this extension's settings to match your target machine's configuration: + - `bitbake.sdkImage` + - `bitbake.sshTarget` -Publishing is automated via GitHub Actions and reserved to project maintainers. To publish a new version: - - Update all the `package.json` files with the new version number `X.Y.Z`. - - Document new changes in the `client/CHANGELOG.md` file. - - Make sure the `VSCE_PAT` secret is valid in the [GitHub repository settings](https://github.com/yoctoproject/vscode-bitbake/settings/secrets/actions). - - Make sure the `NODE_AUTH_TOKEN` secret is valid in the [GitHub repository settings](https://github.com/yoctoproject/vscode-bitbake/settings/secrets/actions). - - Update the main branch with the latest staging branch. - - Create a [new release on GitHub](https://github.com/yoctoproject/vscode-bitbake/releases/new) with a tag in the format `vX.Y.Z`. - - Admin approval is required to run the GitHub Action. +**Note:** This feature depends on poky versions 5.0 and above (`devtool ide-sdk` command). Some recipe classes may not be supported yet. At the time of writing, CMake and Meson recipes are supported. -The release will be published to the VS Code Marketplace automatically by the GitHub Action. Admin approval is required to run the GitHub Action, and the `VSCE_PAT` must be updated to match a valid token for the `yocto-project` Azure DevOps publisher. See: - - https://code.visualstudio.com/api/working-with-extensions/publishing-extension - - https://code.visualstudio.com/api/working-with-extensions/continuous-integration -The `NODE_AUTH_TOKEN` secret is used to push the language server package to the npm registry. The token must be linked to account with push permission on: - - https://www.npmjs.com/package/language-server-bitbake -The `VSX_PAT` secret is used for VS Codium / Open-VSX. Instructions: - - https://open-vsx.org/extension/yocto-project/yocto-bitbake +If your recipe's class is not supported, or you have an older version of poky, the `Bitbake: Devtool: Configure devtool fallback` command will add tasks to build and deploy the package through `devtool build/deploy-target`. Linting, debugging, testing and other advanced features will not be available in this mode. +### BitBake terminal profile + +If you need to run custom commands not covered by this extension like `devtool add`, `bitbake-layers`, ... +You can open an interactive BitBake terminal through the command `Bitbake: Open BitBake terminal`, the contextual menu on a recipe, or the "Launch Profile" button. This will open a new terminal with the BitBake environment set up. You can then run any BitBake command. + +![BitBake terminal profile](images/bitbake-terminal-profile.png) + +### Recipe scan +This extension can run bitbake commands to parse recipes through context menu, command palette, or whenever a certain managed file is saved. + +Upon saving `.bb`, `.bbappend` and `.inc` files, it runs `bitbake -e` against the corresponding recipe while `bitbake -p` is run for other saved files. The command `Bitbake: Scan recipe` triggers `bitbake -e`. + +You may toggle this behaviour through the setting `bitbake.parseOnSave`. + +The extension will receive additional information about the recipe from the `bitbake -e` command and provide more advanced features such as `Go to definition` for symbols with variable expansion (e.g., `require recipe_${PN}.bb`) and showing the final values of variables (values in the command output) on hover. + +### Toaster +Toaster users may start toaster through the **main context menu** -> **Bitbake** -> **Start toaster in browser**. It will open the web UI in the default browser. Toaster can also be stopped by the command `Bitbake: Stop Toaster`. + +> Note: Toaster requires additional packages and ports. It may not be compatible with all commandWrapper settings. Read the Toaster manual to configure them to have all the required dependencies. + +## Troubleshooting +See the [TROUBLESHOOTING.md](./TROUBLESHOOTING.md) file. + +## Others +This extension currently doesn't provide linting and formatting. Users are advised to install other extensions that have these features. (e.g. [oelint-adv](https://marketplace.visualstudio.com/items?itemName=kweihmann.oelint-vscode)) + +This extension also doesn't support WKS files, you should find another extension such as [openembedded-kickstart](https://marketplace.visualstudio.com/items?itemName=wickscc.openembedded-kickstart) ## Contributing -Development of this extension happens on [GitHub](https://github.com/yoctoproject/vscode-bitbake). -Issues and pull requests are welcome. +### Reporting issues + +User feedback is very welcome on this [extension's repository](https://github.com/yoctoproject/vscode-bitbake). Please report any issues or feature requests you may have with a detailed description of the problem and the steps to reproduce it. + +### Contributing code -## Acknowledgements +Contributions are welcome! Please submit your contributions as pull requests on this [extension's repository](https://github.com/yoctoproject/vscode-bitbake) -* Syntax derived from https://github.com/mholo65/vscode-bitbake, which is licensed under the [MIT License](https://github.com/mholo65/vscode-bitbake/blob/master/LICENSE). +Instructions to build, test and debug the extension are available in the [README-DEVELOPER](./README-DEVELOPER.md). diff --git a/client/TROUBLESHOOTING.md b/TROUBLESHOOTING.md similarity index 100% rename from client/TROUBLESHOOTING.md rename to TROUBLESHOOTING.md diff --git a/client/README.md b/client/README.md deleted file mode 100644 index e1477d57..00000000 --- a/client/README.md +++ /dev/null @@ -1,264 +0,0 @@ -# BitBake recipe language support in Visual Studio Code - -## Configuration - -Some advanced features of this extension will need to locate and run BitBake. It can be configured from VSCode's settings. - -To access the settings, you can navigate to **Files -> Preferences -> Settings** (or use the shortcut [**Ctrl+,**]). BitBake's settings are under **Extensions**. More options are available to tweak the extension's behavior. - -Here's an example `settings.json` reflecting some default values to run bitbake on your host machine: -```json -{ - "bitbake.pathToBuildFolder": "${workspaceFolder}/build", - "bitbake.pathToEnvScript": "${workspaceFolder}/sources/poky/oe-init-build-env", - "bitbake.pathToBitbakeFolder": "${workspaceFolder}/sources/poky/bitbake", -} -``` - -### BitBake Command wrappers - -Various tools provide ways to automatically configure the BitBake environment, or even call it inside containers. The `bitbake.commandWrapper` option allows you to use them through this extension by wrapping around the bitbake invocation. -The resulting commands generated by this extension will be for example: -```shell - $ $commandWrapper "bitbake core-image-minimal" -``` -Or, if `pathToEnvScript` and `pathToBuildFolder` are defined: -```shell - $ $commandWrapper ". $pathToEnvScript $pathToBuildFolder && bitbake core-image-minimal" -``` -You can also control the directory from which they are started by using the `bitbake.workingDirectory` option as well as the shell environment variables with `bitbake.shellEnv`. - -Here are some examples using the most popular bitbake wrappers: -```json -{ - "bitbake.commandWrapper": "docker run --rm -v ${workspaceFolder}:${workspaceFolder} crops/poky --workdir=${workspaceFolder} /bin/bash -c", - "bitbake.pathToEnvScript": "${workspaceFolder}/sources/poky/oe-init-build-env", - "bitbake.pathToBitbakeFolder": "${workspaceFolder}/sources/poky/bitbake" -} -{ - "bitbake.commandWrapper": "kas shell -c", - "bitbake.workingDirectory": "${workspaceFolder}/yocto" -} -{ - "bitbake.commandWrapper": "cqfd run", - "bitbake.shellEnv": { - "CQFD_EXTRA_RUN_ARGS": "-e DISPLAY=:0 -v /tmp/.X11-unix:/tmp/.X11-unix" - } -} -{ "bitbake.commandWrapper": "${workspaceFolder}/build.sh --" } -``` - -### Defining Multiple Configurations - -Sometimes it is necessary to build the same project with different distros or -machines configurations. You can define alternative settings for the extension -through the `bitbake.buildConfigurations` array. It can redefine any property -illustrated above, including command wrappers. You'll be able to switch between -them through the status bar at the bottom right. - -```json -{ - "bitbake.buildConfigurations": [ - { - "name": "Machine 1", - "pathToBuildFolder": "${workspaceFolder}/build1" - }, - { - "name": "Machine 2", - "pathToBuildFolder": "${workspaceFolder}/build2" - } - ] -} -``` - -![Configuration picker](doc/config-picker.png) - -### Additional settings recommendations - -If your workspace contains a Yocto build directory, some other extensions may -be hogging lots of resources to parse it's contents and stall your machine. Here are -some example settings to improve your experience (assuming your build directory -is called `build`). You can add them to your `settings.json` file, or your global -user settings. - -```json -{ - "files.watcherExclude": { - "**/build": true - }, - "search.exclude": { - "**/build": true - }, - "C_Cpp.files.exclude": { - "**/build": true - }, - "python.analysis.exclude": [ - "**/build" - ], - "git.repositoryScanIgnoredFolders": [ - "**/build" - ] -} -``` - -Note that the extension deactivates the "files.trimTrailingWhitespace" setting for -Python and Shell script, as it interferes with the functioning of features related -to embedded languages. - -## Features - -### Syntax highlighting - -The extension provides syntax highlighting for BitBake recipes, classes, configuration and inc-files. Syntax highlighting also supports embedded languages inside BitBake recipes including inline Python variable expansion, shell code and Python code. - -The BitBake language is automatically detected based on the file extension: -[`.bb`, `.bbappend`, `.bbclass`]. [`.conf`, `.inc`] are also supported but may be used by other tools. - -![Syntax Hilighting](doc/highlighting.png) - -### Context-based suggestions - -*CTRL+SPACE* may be used to provide suggestions. For example, typing `inherit` and pressing *CTRL+SPACE* provides the suggestion `inherit kernel`. Suggestions are context-based, only providing suggestions that apply to your specific layer configuration. - -The following suggestions are currently supported: - -* Keywords `inherit`, `require`, `include` and `export` -* Context-based suggestions for keywords `inherit`, `require` and `include` (provided by *language-server*) -* Context-based suggestions for all symbols within the include hierarchy - -![Directive-statements](doc/directive-statements.gif) - -### Go to definition -*This feature requires to have properly [configured the extension](#setup-the-extension)* - -*CTRL and click* may be used to open the file associated with a class, inc-file, recipe or variable. If more than one definition exists, a list of definitions is provided. - -The go to definition feature currently behaves as follows: - -| Definition | Target(s) | -| --- | --- | -| class or inc-file | file | -| recipe | recipe definition and all bbappends | -| symbol | all symbols within the include hierarchy | - -![Go-to-definition](doc/go-to-definition.gif) - -### Show definitions of BitBake's defined variables on hover -*This feature requires to have properly [configured the extension](#setup-the-extension)* - -Place your cursor over a variable. If it is a BitBake defined variable, then its definition from the documentation will be displayed. - -![Hover](doc/hover-information.gif) - -### Other code suggestions -Overrides, variable flags, frequently-used task names and more. - -![Other-suggestions](doc/other-suggestions.gif) - - -### BitBake tasks - -BitBake build tasks may be defined through the `tasks.json` file. They allow to build or a run any specific BitBake command on a set of recipes. This feature requires to have properly [configured the extension](#setup-the-extension). Learn how to use VSCode tasks [on the official Visual Studio Code documentation](https://code.visualstudio.com/docs/editor/tasks). - -Here's an example `tasks.json` configuration: -```json -{ - "tasks": [ - { - "label": "Build core-image-minimal", - "type": "bitbake", - "recipes": [ - "core-image-minimal" - ] - } - ] -} -``` - -### BitBake commands - -The extension provides commands and shortcuts to run BitBake tasks. These commands are available in the command palette (`CTRL+SHIFT+P`) and in the editor's contextual menu. - -![Contextual menu](doc/contextual-menu.png) - -### BitBake recipes view - -The extension provides a view to display the list of recipes in the current workspace. This view is available in the left panel. You can quickly navigate to a recipe's source or build it by clicking on it. - -![Recipe tree view](doc/recipe-view.png) - -### Problems matcher - -By default, this extension will run BitBake in parse only mode in the background on file saves to identify syntax errors. They will be displayed in the problems panel. You can disable this feature through the extension's settings. - -![Problem matcher](doc/problems.png) - -### BitBake status bar - -Bitbake parsing status is displayed in the status bar at the bottom of the screen. It will show wether the last BitBake run was successful or not. The BitBake server queues all BitBake commands and runs them sequentially. The status bar will show you if the extension is currently trying to access the bitbake server. - -![Status bar](doc/status-bar.gif) - -### Devtool and eSDK integration - -The recipe's contextual menu provides shortcuts to open new `devtool` and configure the eSDK on a recipe. -Start by right-clicking on a recipe in the recipe tree view, or in the editor's contextual menu and run the command `Bitbake: Devtool: Modify recipe`. -This feature allows you to modify the recipe's source code and rebuild it from within VSCode. -More information and `devtool` and the eSDK in Yocto's [Application Development and the Extensible SDK (eSDK)](https://docs.yoctoproject.org/sdk-manual/) - -Once the workspace is set up, it will appear in the left panel. Use the contextual menu or the action buttons to build, update the recipe, or close ("reset") the workspace. - -![Devtool Workspace](doc/devtool.png) - -Clicking on the workspace name will open the sources' workspace in a new window. You may edit the sources and generate patches in your Yocto recipes by following the devtool workflow described in [Yocto's documentation](https://docs.yoctoproject.org/sdk-manual/extensible.html#use-devtool-modify-to-modify-the-source-of-an-existing-component): - - Make changes to the sources - - Commit them in the local git repository - - Run the `Bitbake: Devtool: Update recipe` command to generate the patch and update the recipe - -You can also set up the SDK for the recipe by running the `Bitbake: Devtool: Configure VSCode SDK` command. This will create `.vscode/settings.json`, `.vscode/tasks.json` and `.vscode/launch.json` configurations to cross-compile, deploy and debug the recipe on a target machine through SSH. You'll need to configure this extension's settings to match your target machine's configuration: - - `bitbake.sdkImage` - - `bitbake.sshTarget` - -**Note:** This feature depends on poky versions 5.0 and above (`devtool ide-sdk` command). Some recipe classes may not be supported yet. At the time of writing, CMake and Meson recipes are supported. - -If your recipe's class is not supported, or you have an older version of poky, the `Bitbake: Devtool: Configure devtool fallback` command will add tasks to build and deploy the package through `devtool build/deploy-target`. Linting, debugging, testing and other advanced features will not be available in this mode. - -### BitBake terminal profile - -If you need to run custom commands not covered by this extension like `devtool add`, `bitbake-layers`, ... -You can open an interactive BitBake terminal through the command `Bitbake: Open BitBake terminal`, the contextual menu on a recipe, or the "Launch Profile" button. This will open a new terminal with the BitBake environment set up. You can then run any BitBake command. - -![BitBake terminal profile](doc/bitbake-terminal-profile.png) - -### Recipe scan -This extension can run bitbake commands to parse recipes through context menu, command palette, or whenever a certain managed file is saved. - -Upon saving `.bb`, `.bbappend` and `.inc` files, it runs `bitbake -e` against the corresponding recipe while `bitbake -p` is run for other saved files. The command `Bitbake: Scan recipe` triggers `bitbake -e`. - -You may toggle this behaviour through the setting `bitbake.parseOnSave`. - -The extension will receive additional information about the recipe from the `bitbake -e` command and provide more advanced features such as `Go to definition` for symbols with variable expansion (e.g., `require recipe_${PN}.bb`) and showing the final values of variables (values in the command output) on hover. - -### Toaster -Toaster users may start toaster through the **main context menu** -> **Bitbake** -> **Start toaster in browser**. It will open the web UI in the default browser. Toaster can also be stopped by the command `Bitbake: Stop Toaster`. - -> Note: Toaster requires additional packages and ports. It may not be compatible with all commandWrapper settings. Read the Toaster manual to configure them to have all the required dependencies. - -## Troubleshooting -See the [TROUBLESHOOTING.md](./TROUBLESHOOTING.md) file. - -## Others -This extension currently doesn't provide linting and formatting. Users are advised to install other extensions that have these features. (e.g. [oelint-adv](https://marketplace.visualstudio.com/items?itemName=kweihmann.oelint-vscode)) - -This extension also doesn't support WKS files, you should find another extension such as [openembedded-kickstart](https://marketplace.visualstudio.com/items?itemName=wickscc.openembedded-kickstart) -## Contributing - -### Reporting issues - -User feedback is very welcome on this [extension's repository](https://github.com/yoctoproject/vscode-bitbake). Please report any issues or feature requests you may have with a detailed description of the problem and the steps to reproduce it. - -### Contributing code - -Contributions are welcome! Please submit your contributions as pull requests on this [extension's repository](https://github.com/yoctoproject/vscode-bitbake) - -Instructions to build, test and debug the extension are available in the [root README](../README.md). diff --git a/client/doc/overrides.gif b/client/doc/overrides.gif deleted file mode 100644 index 153f48d4ce61eb640e356389bb35d7f7b8ffb918..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 10039 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 BpcMcB diff --git a/client/doc/yocto-tasks.gif b/client/doc/yocto-tasks.gif deleted file mode 100644 index 0d5261ce72bef686f925e07773ea2ced873df0d2..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 48588 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�=Ld39pGdTX7V%J4w7dm74-*2hrSzJDaSp69OA zoxh!8-;OG)VWd{8hWgpbJCsN(W4K}s~r5`vAOu=pOnJFnECpH23V$O8c0#(n|B z0a;Y#12XI#r(6_{H<^sof=Pdei+?3S;m{D8hbuOrOfyzQ+XH0=S6qs~F7Zh?#z7cy z@^tt)h9s6#^(Y5ex>Md_9#=^|YO$chz`%eQ7^4hEsX0l>b9;dgsY9MBqQyTz&B**Iq&?S3?V;h-?~V1r%jd7IrH2x ziBfON)HqPd8mzkj-KybR`^9lgou1)MUmgQ1wvseeEfgK}^ON9Jp#hD_n380_rYX+7 zs4JbxL5_u2%heI=XCs5(IL=rLn2#_$b^NM!7M5s}KXV=3306~0bQwy&-0AqGcbd?-YjY$dUn@DvuioJK4V1 zw%w5pqiv*e+QS4S!QAf>yvo8$Xxt@$Y%Y!P?+7}Rtgrt@g)pL4(X0x=!kihZltUF5 zPz9FF09$LSD@4lId#Vem=AIc$A#G>A{(d?tO5Mg;|HO=WdV6?s-bLutrCMpgg^K~j zQ9ji|#!|}>q_Rr|3!#&dT9*Z!l1b5y(qMmIi>kNLj-v+WRMX4B@~NHRwv>xUssmvd zle#Yv@Hq43F^-lw7^*p6lS8bvBd4GmoXIKHs-^B?44({_d)br24!O^2XOEo z6-{TZd*cnG#ars<@I`4Qx7M{Y#*b*@Sk^=v613&y>rUrDfq#NFUpmJgW{ z(RveSx6E1H%>SWTM2&(v*QvhK8K<~({s(8`(k$mlcid4TTxi)Gz8nBLoWA*N*5kdp zZ03b4K!7wL1&&Pxv|Wn-`IhrRRc7IdIG?oys{v!Es?1+=`SnY=z{`lY5aHUwXmI3nqO5?7R^|O*%COVhCNS(IW@eE8EikM=VGJ**2pu@lp(5o(?T>?_H{CX79kmlTq{s9te)!T(zxNceEk|InfOlJC(@l?q5U zUadSLx>H4Q1cMvb=Z?mCvG}fU!(~Q%f;#!7ps#XN$P-x|`U?)nj?FeL(=w66`UA97*p zFioiWT$@lC5)o!1yPAeDA22uQfQKRcFZo^(E_b$&1c!l)uW%!z5>avA^bWr^SoI0o z{JMA25@GWTtrzJM79)V@(s&&qwOyp~XRrPHUVF(JKhe^7W7mcs(Fr2G3$ckd6lEA6O2WmjrL^ASy9HGq@maf+i147EdV_?_T3pu4#@)z9ir|j%(fs@yIgusx(gZIZB;Y3Lr~R(zDMK?VVu2=ZY#C%~G2 z%)EJTlmc6BB%ksoF`z{ZH|jfF^*2A2g(SurF3e891rI9fnt^oU0{UUAz9i|1f{#*Pb?SA3UlAKo^Gj+YVJ=D|N+d zxY;dfU=<8l2AiEXbSaaoOjjGQq&V}ikh@|fgt3lBJd_c_{lkafmf6KaHT0x*%^0Gn zMy`q(-*+ye;*XtO==qcv^L6+9kn03^X5wBiSiL2nnln-AhxU(h-yaA=9hu53v;I^! zejDzNi~EDwZu;u0x2-AT=i-LOs^ANBxUrQn1%9ds4tBnDpRjY=qQz7b3e~AouZ~b8 z#f}!z#Hy&aWIHB^10W$NSTx^DuR69TIsK&4@#J%JXR;0|Gedn+KqS*3!LJg z1|)fi^Nu5w1qUDQ)!a7GhZvj(1;eA_>~D)Z2#xNL5R@!YnL925m|2+s0mKfzZ=gvTxX&F_<_c}lp-zn#%PTG`<=+5e+2EoK!S zQI|8HV7`zJy{$nQmf`f3nvK^E1X{{(tDvCw)!Hq+ZN-{02O5`KoT(JsCyJyp9H?GQBhtMBJDd@^Hp+kA<8Z$i$>4`M~BzO%6OWJzgK zW%bAq^P|hG`m;8NXK;>FH=DrKs52)~Q@F3X+hvb#&DsTTDbX2jg>c-{`)9!t@@-a} zb|@K%4{)(FZNwEE=Ea7udUr5lRn~fS`;G_LGuxtkFl?iO--e>i`+|>RRN`$yoLRTU z&J7H{ki50tBlyx43zkj*ujcaETzy=MvSH8mXXjr68L;py`Mpeq3x91cH{v6*m-0Rg zI3CU{9t~ToelHDOu-W#MGtuq7@MJylR$o=;nix-C#F;?OyAzAQ&A;A%1NBD*y03X> zJw0|;`_3HUu=VtPfFXb8$3g7N zr?-bqQhbg1=ch+N4=m=e?zgQv=37u^`Xr3*pZbS?^7IV;cEk5BFPGfc0)ESU{xw+H zNzUV&ts&aiU{{RCF#mn;I+1$QNS^Sy{p!Q-^?f@z`yHTV|7 zvlPE-QCs;ZW~NrUKR!jg+a$v&T_CEuc7#afrQJyrjjab95Mg`7b;dsz4Q z!pCc@^BwN)i1QZ6pyD3`M}Jq**1Jw0vp>3lQk_G^wY~AWH>}<|G4#zC(X)8?>i4_7 zZ@stgy)^uL;{EsQ`+7qtz>T4{{g|dz^`DK(zobeG-u?V3foOeX+q#^9yY~$R;2^LF z@j#FO5BXmn0EompL0ZaLiR|i{)g=UEAf5OB%LBZz$Uh>bW(5r294nI0!l^)7B?mH< zxfa^D80F7y@`l+27uoqtCR3Se_9Fb|bMa(un^KFsKnD&tM;HF>yt1VmZjS;@OB_DB zbe=nnRFcKMUQVXHcsUYN;12{qV@ccGuRY=cSN_0A-FrBjfva4fu9To3dCQWRb|#Zy zTW^zq36USuUf0G>E3dya1$ykyJ(G!n!QGJWyeCPAWmgirUB2w}-@kgu$tPB8RKu;B zlK3Gka_T9*ASlFO{|9S(z&73*s2Yd<$k!HQct(YIp>M(Xo|&3EHoAHXF~$4$f!gJ% z#rcAp8UBjsKNva5if4KpT=-_fQz7OA0W4^hro1OBA5u2&c^Og}$0Xp=N`5o_QLZj6 z)ul%t2|-K{)~gl6M~#1nas#RWEqM;4)G29>L5hr+{UFq*HLl8O&&2h(H)YfsiDn5< zA(u&*2@Lz~fmFsaH%s@<#iZg~Q@1f{R&LpK4mQC)D3(zDIkeb_bJD5jh4_(tbi)eH zMmXIPV1*7~0#89ZSO^ZN2|63C){Dj*=4eLPnTk<_5>HUg^I)fA_bn{=Y?IZVWSmT5 zqH251D+g^VL@Mbf>9UG>vI-#lG!FG~2^E`hVSLFu-7Q_z*6}QqIlXv>i%MN|H-*WF zQ-&#~%YQq&H5>!Dm@Emm_rDost_`i|R4eK<<)&S;Fl6N^gpo)$S%ejFK^DrM^EDkwop z5386A%e69->haEz+$X)d8m-eKMRyfAjpdq_BBez+37e)rP@D+WxaquZ(>%zzuhN&| zu70V!YI9|Qs%SU}6^l}PWOPW8xPIlEt>qiMKlfb@^31>}h)_kLRFG{;AMLw^W0J5l z`>Wamfk`Iiu#h(@m~B(~qq`L!RAE*k_nTJZR^%XNeaext&m4g2jfw=hPl4eaxZ0R9 zKyax#R1UMOnuB*p>WM6vk{TkbTP}2z>DWK`B?(FI`%C!*Cq|T{CByXq$0BEv*}`Z82vrBp*B+ zIY&GrC~|tK3@7=0zWz}Db!C>cU0fz;$xMvfJFnbxP`q)Tjxi^^;&{bnG-KlFxk+Tt zA!~@x{c{*{DEf%CmdTts5xB<=vOtU~b4eay*gEtF0ku4fum(N$X`&qMMC5PITDk^ z%`6S(W|$(&d{odKlPVP}#iHSI=_pg{vSwcVoNAiA4?{PqBz5D$j37aP8hoh{-W!S+ z!aIeKy$=boXUo7PEsaKEPM8h&Kh=z)tu%B)gov%nH%T?^X|l$1lOl<)m6zVaqJcu* zB$`l;lHw;ioA)}s+o2-|u=4R}Va4=q%Bm}lRCm$=@?g`VlT9**64uhXV z`_5G^-?%FSFmLn}`!Z23cCR4zX55V{pIW)nhjZ-_KKxGR8-WW<(1h?4hPf5gRA+|^ z5o*o>ooY?e2a#n1qshm;!YzO>?IC=XJ=o(B(sTcAxo{Uk>BGueO=1C`Co<)@)2>bz8bE8l|#>1WRqDplKz8yk9z37RIlHxH^vhUV!6A z?qN>$CzunBh6F>(B~Yx4GruolL7_}-7g~y_MEEkdPb9FZ#SR3hg@ZCGc*Paz0wG^! zXFiT(^p8w^eOZ`v>1~F1RHTKMcKevpaJnwM$2Lj9O_}?=(Cv;L$XM`?9GJNh3<5Ah zhqlXqb6#o%du0ROf;8QX_+*xZq|iv5g*B#Jg+O*v7!~M>*Zb-pjhmkIK0Hz7sTv@e z8U{xaG}9=cmQaZuZblh1R{3fzzm3P+0*%SR(_yv6j~?@u&BdM84-4=;v*)`W`dkef zjPv@8cX?OX{VeEyU&S-R-v0$Fqi&M2r{GM_5_bFlpGmM;>;9b2+gZ)(F9jalDj3P98GHCK4$8c5QRTWx&!CNe*37{BWfbMQ<) zJfH^MJ%qk5@wl-()Xw4Ux5clIw685HLIPAFuHzd@?qSq}c2@xN?Fz&e7ga4sK z^u4H3b5m@lFZ1M1XCK3;6(;YL8!!IUR1h9W0k~-Yv)w+<-|WPH970PH%{uierO*-h zou42oaksrmVb}r2`uXVP2L_p6CbP1TN0?reI$%ab`N*%!vL?$vpm{YDQWZN-nu$GM zM}^&}BcH~{OPc#~oXUG`Bitj5IyO3r@d&CSa0+HUh5*Kjr^xdh-^U#v?6zdizGo(; z8PH`jUYxpyw~4kBk~_<5X2nT)eBE0)WgL>5_3#hvFSBvp>d=PVRS*A(pUX3g`@Ff) zUUGqJf7SG!?YoEWjf8M1xJ@R0M)~y&GU#}WnPqVoRPD*}Oy9Q!Ogn&ZiR^jXpFY_y zUsT^{|AJltR4BDa>UFFE$zwEbkJ}F=I-9|Kmv~Qjg7bCM@N~d&A*92uh+Bi0Bc!Yt zPN%?O6+%fa@K}${J4{v0_m9#jPFyuB5+VcTH(N9<5y$8gns>R68s@0BUA`Sh%2#a8 z45l-~>lA-d8$%?^jEg!Ix3uwu#2?XR9{}v5Z{XOn^6i+$e`t;Wkh`yz;NoMBo?k|A z?841=n|cE1UwWzo(g*0G^e6Q^vb4VRHn2_X@fPOML%HZ1n+l~-)Cy*$v7(!p+-~{Z zM?(g-X+;WjvlxTCAo`2_A%Y$+M{E5*Q?V|xD7D%YSGe+@@FT~C5-v0+#OjvqsoeYg z9C!iVyGM_`JpOPGli&i-jhqHvR;?FK>-`~5)Rj%JX-{w=AVE_gEpq%9c{-FvSDt3& zt2Q4~&5Nq#;gLg3dLeJZM26rQ6&|B&6Qaosgr#I(5E3Hvv-w6nbnHkAXcJ6xJumH~EO;vMC<5f7>`p?gjQ1*mB z7UY5CvSyWxm!FDkfki|^o^Qg(WKX5Qc@A%~vO`%Q3Nq;w1>h}0zo7`GtB^>nV^)Po zZF~`oyGmynNSBqBl$T9iYKy2Bep{g#Wf>nGk1ah=$<4tf$0CxZ@}_hOuE|$L6p5=v zK-6lRZ+aJ%!FdE=@)%OQW^+P`XHx1;`u7Gop@0MoIrdo09hWw+TA_|ZZNf7;@HeUs zB$VI+siUF*X&ZE;Ji)o|p;~Pn`-v$Mu{;|NhKBNRr^a8#H2*Bqbc9QqZxgCTQYiGq zYmyT3t|=X`V=(~ZeuTi$pu%vuENR!m2u_%OOf@M~%#-@Z{$`Z3qlY&#Oys$1SU?CmiiGh@0bIiY<0 zfM4&C$(`N8=X%(gb!=b|SI;=ecN!u7h%-+t@498_NO+A*xJ>5sP;za~Nt1$~ddztG z@%NS|fB){76Ye<{(33zZElhN7PtY>+XaCE1)J_Bc67|_BW3U_E^=B`n=c# z`E~qYStnEqVh)eB_r6yfB)3oKSjl#>$vzXrPeV(j%yE?*vcX~ zzMG+{BeM`*(T5L65WmUFn^QUPmJ%Uoc0Be7fYAgm%2toA^$!%Q7$~AlC301yHceNh z@i6)Ku+7T42c3ndM%obCF^NYt^!%2^0)it3q)2m+aWMC=^q-6rtrS zkCb7rjYzxGH3O2jwT6Y)Jynp^kE*0NX@AK;XLh$IuMo1==1xnct~=eSO_a#FB>RLe zO$_HvUp(Nl@>uIXqNSqTt$|uhOe@xI+*}4(zUX?{DqkydA z`StnqA``$8;(7l~#z6lqV{5ZZ89V<&#{3%;E*rpb{{Loz|C@~Ak{1#p(vV3C;L$6E z1fR$Mi;QXiznNfmDT93R0SE&~1z>BuKp(zJlU=4+6;7R`l$nNC6Es8IOProW^De4jIr)LVd4@g zy7MNex8px#Oja5{DYxfplP7<=vjwoh4k|4h#9to5;peCDpHjxMIj*H*%mNh{->^0B zBD3y;yzgZ;f9Rz(8ic;!%6Zq5{iTR?`2sP#efr^pKff&b3H6K4w)!qXJSInVE1ee8 z&;=C77ndu^Ny})TRHGXJAJYnO^mm`yb#^JEds-GH?U8o{NRl0~q`1id&>_;&zYlkXk30L!zDaU32rG`Va$cMk4WGq{z?Ex9&~8 z+qF9t1bK@ELHe~O2M2+J6HxHwPfd%9G@T1_?`}pe)S-2A-bfVz%v-}9QxEzRopUUW zzSDqaHvUq{7c_UaDjCe-$2uBVI5f3^TrUv=+%g?4Ig`HDwL z9hmNl3zhz=HcBOs#Nnbg$)i z+?H-^9`bf3kgyU8+w*E-$S)?rp}HNx)3EzOevPWZ@p5x}gk$Px_Ck?@;C(+^A1Q#n zUv`IDQr>-@)I++UZxXZt>oXdQN6SAx5&5sRtBjjyYb#!>R-7K=^aUS9cj z`0?ATSgzyWM~O#|=dLEp+|@3nD1Q3B*@y%Fc%3WyL;#)V_jGo=ytL`ZyRuV0meVIw zLUcwiE;|0)ZtVK>^L_KfsIU+1iy^;0cE7v(>r?-?Prv?QSq?|<4hudMddsH~@_Rp5 z@?p;F$y3UI4(1dJSUacyS4y|k(X;nI70ZFUY&Nf-zvjPWSn&79hpvDA{<3S?_uak2zrVlz!wyyRlmWO%ETG74EX1k|C^*jI)Y*-LXOw|tNCRw#I9_P7j8jXf z?+bMJnix+xaE7K#IzOU1$36j=o6=n%#VK(8f>G1O#LpMHzVQOGcw?4cbHF}HBNVdYK?AMN) z>Fj4SGVmXLWgl6%>@y1|y_bcY`~IJ>9tlopE{lZ#(Rh{aW=x#}P(<^@|BCe+r~NNj z@85XOvf88Jv?k2Vzvc4(hV}k)B-wLz7Xs)2JemVCUex|CtoPsL@_XnU2nkuuUXXE4 zwlk3H-*S2A=HpT}tOo$0msL$Fq>#E)^syE3|HOOfD8bGjk!M^I?D*NR-hah=NKLZ* zL|`4si6gmDy={B;-*}JsoHP=jb>7U^y07!&^X`D_*M4e+Zm+TuxR2TND|q2IB?NDt z>F@dcZmP0ib@iZbi#~DP@;|WN#@J%ZVRqAh!FtEsMZ&Pmmz>~+{~Sq`Fg1zOcRPRo zIb_3nG>gmp?V`wrW+aClsAc0-EZj`iBheXcx9-G^ErTjm`jrABgw>(C0jk;i<>tHoJArr=;*g|CYI)JFvLsHf8#w1BQz%= zPqb&Q6Z=TAw^lRtHdPN{$9ue`J1R{b^V#v9;5&E$Q)Iue3^5{k`E6;CS~rFmBa!HL zN)uchTXvp_9)Wn@ zMv4$>GUT5tn5JBCCD(}vD^S~o^eq)lmuhp&iS20(A5CAw;L60$xFBWow+5~|t<>OT z#qxW6E;~VF!k`85@cZXygD{y!71v4NuORt#Z(`#xST%jThck(t-GR?pz?($co-5+Z z6DyO33+cu!^2;X_LWl=T6~p(nWg1#0C(Pi`r?)uo%T>Kyh-em|93-{RQ2p79p6-OZ z1>@JMB*WULb%Gd86heiKb|Km1!-IWf)xELz$k$QYXHz^wOzBfzH!4mpexyFAHE58h z{1rKz>$19@(jI7aCLW~X1r$vrDOKuqG@8;gD9;`Y)|cAo2)gI~b5A1WKH{#+4L9;T za`2UDovzj3Z#xPn-|IAeNq)S2r^MlxT-B@2BTj97FqJgJ^R^~I^OWx^A){H2$5|_d zviG!!4>%8%a2tu6n*U4{oVlS-ZT|GfJU8XAQJ^%seJ2~J&Cj$;c$N16V0jXp_p`X? zEW*9v`0IOi1!@5pGn;^8#I1J^e>r>Op2plZ10*LV@mRo;;z65fU%DfdEW_0lAnZFf z)pUMt)OwkdbS!_1FEP%klM2=(3=o48d5~4c&LhF#)Cr0e_wY*LSaXYigc%2{+(dXi8SGWv*oqg0_kJ~2jw@ZJQ1At*C$bD z)*?1rJ4yF)M?BArr36}&a-+5`6Sqzpdj`*Lz1Pv?_!IVe|F;ldeC?3K9Eu>T>Cn;c z6L&7!s$>&`g}qk|a&`6}GbFJyhTpwH%z30p`)_pcwU1q3>;^a zjs&<|<{1|+bnx_j>2u}cotGq!zhA^ta|iRNKj!X0m}YFR0PU^9hR?G>V8z*M3)mzL z*C=b8k}0y$#Fu#YOWpCF6#g;xtDiZ?s$lWU$X)f zk;Zr|e`w=bWPbhx4{Z|;#Tjh;?T!t}w^!yBXU)%KGTc>W|()KGwv0HkTyY=b* z*8tCvbk3^DM7hBwvtSvua9%$mJ%K z<4GQ*g79Nz$d%#-~P3qQ(A)(ov{6Z^|FseqEx_ zmTiM#uAKwa_IloD=`!Lw$}6qqw02Z2d~OY-C9OzO3_{Bl%iv&goFcF}&oZalVIy{G z{pM7!>V#&lQM&M7aU2c=C7jFndZwQ8boBtKI=frAIW^q5QK5-iTXyH;+aF!syGm( z4!u0h3AD*z;2CL1EIX^t+pa zzxe_BA&B!QxSXo0Edl2G8GtrmGFn*#0>rJu2%Gu*Kg_?zY2e>mb$J~LoJ&-wQmMr^ zSMu;?$D%vQvwTNkI1vGY=u7(Z3*Fc@iNlaQd)EP5YP)fbD{ahDb?$_SBX=)V$XK@% zlXNnwQ{pZ|{bVrlExkE`C-j<#=RZbSiFg|Nu553zgO09EwAonC^B1N;BaM`$P4@bO zk}tAFV;jr-$Re63bmUz_a{Upchou@$zDF-jL*i_E_O6u<-Nv#~2vUP)pqQF0`P-hv_b zMvqN`Z-`3C()gRz`#4LwUpzk1(G# z3rc9%{Dy~OHMR>ARk=$&ZW`vf9!JH4KhkXFwPcBc@od(u-YZPzTYT%j{5gh)go9n! zei+y6B}lA2gz2C%4R%HNGPkBw9QDsP&UD6j~-Nr>bcjTedYdR%orWl*E{2C@ENXU$u`_4a9U!JYLGy}*n3Q^& z`#unQP!_w{tp8%j>FD9OPT(D_bDii8U+2<1)sEdOkD{zxy94NNolyW0vKGf}Ee`q} z|07lBI{?9t&;f&Ua^rsDJ!1hyGwAwx&eAPiRkbV7shEDDbVQ3>-bgwX%P#s@+*ZrD z!XeZ&<=?>o42{C>s_=Vd$~pLknvB5xln&OBjppoGiOH*?nX>qI&m=YCqsefCu|cUF16RkYDD zQhw0lbh+-`M9_^IxI=+~EfjRCBa%db-NkTRnTDa(M9$|r*F%CIae?7BEx*s-9xUyDvBU=t5O8(wu|t2p~$}HlXZd{eIl@_~5J>Ys-Pl z%eA34c_0~eVvg-m7ZzXR8ZLW{yE68SNEKqsUgdGTdv&~ETQuC9g|V&3YO6R|07mw1 z=W3(k=J>(cEL(AZS96tcAXij<1XXM|j;k{ip(%n04SVIy?Yc|&2*0eiVW;%n11%iS zJd6zhl`~Nu_UHHIA08x}uZVDEW%r#B@rnaj`oQB_6D6IGwrR?qBV7Jd9extQB*oe< zl5QRLPy=$!7MV&`Jxb=Ox#Eb_2_~2w5_oINr3@{1?vF#oq!2J;2feg;H5{*f-$-59;n_o13(wpn^0L@CVQ^a zaH%z|b^DPai!U-b6Y@BZW?I^9^yb8vK(GTbOV&B?O z%LJP+;6^g1XLd9z7YBq_qI&B5Dez|pxVTZfQV~~8BA<|qsVRR%y_wc=Kkly>z$Y4a zm5i*EA2-7ht^)Jlb`Ea>_&tyUSb{x266#UOIZTZckd~TB9pRe&#un;%bFd3q)ewwu z>5C#vYFt@D5N;-k|7GHZQI`J<85D&J&JS2|?)jC|#qCWD_iYU~bP$(_>?!))rD6D& zBmARMX2RGeg8@@|Sk03_$tO|(fTb|0T3|mwus6@@i=@EI14GLexEiP7r(V%2pQf8} zEw~=EycEBDk|6XzOEAb%fQaw=itc)Zuw1vk6VsRxzjWi?y%+xu|?(K;rOJ=)D z@>NV_=_}y5N}4~sE`qKxr%YhMyYMMcqg1>bTg7FXc0F0jV6}I(j=B&n4TCr7A1MY9 zO;`m3tl4LeoQ?(&Z@rb_Yan#m#1OK6DKyaNb)Z83nP%0n9<+yF)`dDn0-y!72 zlr~j3^EUg02EF*P9Fgfr4ll%|1!k3kZ~*rS^dUu@x@Xed;Cd~gxr$-NzbEHY07_bD zE#p6tq~7yn$XYKvYxZ)}q?XGKZoiWi&;>7ocuBemQ)_eGj={cW&OJ*7?0wLHzkr_bs~BZoqWI5*=D6(AZ5P8fje#bN^UjcL z5diEn)*9SRcAms*ZTmI=G|yalm{S71rP{sib?3z<%aveQZy)#?D&hj?TPL&=Xm@De-yGWAYPN(M6sEP?dboSJODZ(x_rQa1-Xg?$@VsDosv@Wy zR+{Ao*4R87?6C%)J4ZPB9=G56%LE9UPesKIXwMFS_Xe7-$nB)|CA2zJP7x@fgCFx2 zK-p?8G|xwx0;IK+@tdF`3|~Md;KhfN!KHweMR_ef{&OrLWav;r1@>&EhuQCE$hW;T zrHRV58ZgC<>+6yb(E6#=@Cvt(Zbh*6RougsPClzl)bi3^+_D?5ASZi6(MRPOc|Yza zaNZZN#tu2s9VqV!_{eVuEHBtH4*Kw%?#J~ph+4{`=k$ik%;gSvNYYIHqC96>z@*j~ zRAqL3${sV*mDxFV>d+{ivlY!y=^?AQ4hBBw9*7TdQ8Fu?N4c$(`u1I0mH5)%rNd#3 zniPQUHWcp(+llu+A;Bv8S3=h3zX2C)xrM#NADHVh+R{6>{^{JMV)BzTy*j13urCXPcNGBGzfVve%LQr6 zn#B8GgnFbxZn6l zd+@;H4b5ZiYy29pT!7oaRx+c{z7mj?A6uhT7K6K zkM}TLJzdvQ0QW|t72zG~V@L*yKA*w5`~tDI%icMWG3f6jFH|z)Tb#sZeV;JjtAbw< ze9e_o4(~@6^gdc`2v>f5|0WQjd;gho+D3KetD8?=4WEntmEe(mGy62(Kdy0)4}Z_s ze;9^I4D#?zs7VP>Fr4gFJ(Sq)y*uCrIT+IBBln_qw#wIIoL{}*(1u56_2gv}l;968 zES)~CQlbKTHu0%j`gw3nU1izg=I*!ah5~vopZ@L;*v<57@wvmA+w-J+ssk^onAM zYf}0(8<)PN+F&)F08--qofm_o>LSg4{WxE~b4VTHF0alMe1_)o>v*p3mG*n##{EOs zgAQ#a$l>$o``ux4-bEzAtHKY#X1&yRm$%-xv!HJ67>{4p{RmMvq|J?cRvd)&m_K>t zzsIP*0azj%)&uh*t-{IJ0g$^j)vINZw_8gCBFhQ=SO5G4i#hGm29q={*h3a~ zJx9-h@t7R}IzS4@cwDNu5H@g6BpYY8El~fww1U^y;9Tgt*Yhs6%3?}oZO=1n54l&a zH8ShAbDM~poYp0kFGfc)k3D>1``vrvuIr+MtXP2G>XDk7JGY*1f7z)kQC}$0mSMK7 z^E2-iP5rh!;C%jYu214kOkVAq3BMa|hkrNAc)t$cFyxpv;*tBsWbzJFEA};D@Js?Q zjjQePPTx-?0KZD zl8rsQOO-Dd;}Sv23tSXaF_%h0QUD`D8Rptc#kktG+~UY{15#iJ8Sud0DAv@($!$-D zvB3SA^wUkp_Kqkt4W3=_G?+e-6(WX8Rq;rJl-q&80gXqT5D8}RTc<;Q>Ij9WUBpFnZcLCPwV?2I2a3ntsi5tmxdfqah zf1#6Pyb`=2NP9c}3yq!A}Mu&2U-d>rD!{9eez(K0p~+ zTqj$L6Z-wJ*g#>P=!3Juss%o`4q^UrtuvuvBSAvFust_~Io9VX85Z0jm2TY| z)*V4(_bAii4jCrU6st8u4#Jbx6~=2UF!73~CO?TBaze`YSH}k6B&U`cprEm1Qd90I zV&Z{8IE1}l13y^ep<1J6)+P)(A{FK;dyWvUvpuoHwN&dlm+6P;InfzMkQ#NO6yg(x z%8`CZ&~>pHc}p28l&Ar?O25p;sc_>~o?p;r*?rD^$teDAJ8_;259URU%A!w#!8(Ks z>xz-a#~26}l!NAK71KTO@knInA4tL2i_zAzgow~CftcGvbRn2}4CsjwP?|!|w{(%i z*kkbzQkAc8R%Kb)S{3yC?6t%2CBal_sHlQxKJPrz82FZP52p*E*)Y^)P$Y%Yaq{&JW2Ah~|7}3u@>3;M*;0p>~d*>31!Qe20fk4HW{_ z_Qb2Bt?o;K0TZ#x>NfHsknaS+YCrPJnVzsGm7)*Fhksy%YwW(VN+o2bXJf^xmb4_G z9l)xUvLHAnF-7K0_^>1?O;{K-SS(ipWNOC>Pf!f{N|nT3)*MU#k(&4=z9q(SUEfNbez~vzm5<&&!F;J)FMQmcL>=wIAalm@P?;W^D21qsd zfOtXJm;#FZZ^Xi6;s(NmvBKbG70A{=Y6WEOK~C#R8w;Fu=_bzRr3!w2DdbzzM{QIy zZZEJED~pVYD3p6CwlRlq-E%+rhwiYreUXAf9T9^@fl||9Z4OO|x^0vWe)z}4T zX+d)>WeieaBau@zG)`8J`($vxh1z>aA;|(Fj+=Dbsc)l@A!`Ua|3rd%!jH>Nm$h2soO!0--C>hvz+ze1a_OjGb;aP$`|A60=q6uiFl?i`Vs0m>{tHE>%pU($z zLU^r)3+)=VBnuJV_z9{n4)D4U>o~^J4!XT9@~7C0X#VF8jKdTR$lynLA*)_K9n{tA z*p6!*Z_ z#xfq#8d*W?)YUYk-`Sb@y9J?`8qFFY%**d5#UNr?@ccrVZI3J#jYOw;_jd=xOTBg^ zQRrNFZHAmMHYCKUfC#^Q%6zVZPUVw1max8;ELbg0NJ$FM8)1I0^7mvrj_2=)| z;Dp6At)#<_U?p=oK&*ECxl-~|)MlSr#=LMU4v$z6DN&vq3WY+AFar&#tgjk0iH={o3|&DnrI@3Pt24 z)!+gs`stMZa#S08DoBw_ti|#Bria)|gu;1%Nb%Nd`o8NzL5fn<@PI?hC^;)ug6M5x zXGRB2t86JI$i3QixQ-_jRVSY24E4?K4(ZUX282oobr0_VhiwZCmm)AQ!(ind7-Oop z9E{_IfEhbz9U_sE-1j0)Kz7gM5^lK)f423|Hd<&)J_bWjqTD`$+_@GP@KWUxjHLtC zl()!Ka0gwM;h_sl618RKjN@-tB@r)u~b1O zx+$w!O$7e(3f!~Vq?yFDSYILxj5BKr!Bs5!)Xr2GM1g;Z^}U~O>pfWGyyc}(Uoevx z&MmGt6H15yHg97Uwmxmsczm2R79y$#3_{D4Mt0H^Ryim@&A@g|iU$M2J$;L9256qI zR#GHMBH3X82`W+J0eLLl2~mS-!NHwmxZ6BMk5z-rg}x+qcLOjUTo1ZJas?XH_R4)4 zrW6#`gW!Avq!$;RvE5`nqW}yqIBF@B*hoF@zDXE3L1{Bk(EFriY>i-|vwW(b?SVY1 zVVmvg01p7cY$OqV?4+gMWzTlt4Y3>M7JfPu6g{;fjBe2xnm_`(>(Ik%uHCH3r$w7Y zmbz(de?+@|Y`7U@U=QPB5@kQ&c;W!#zU9+6hZ!){ znPv@#nxR|-C-cKo*v()QA(7*P5yu^*6CO{&=ggDjoDv<}Qi{PJ$l;jOFl~}>br6OQ z30kDS^a3lq3>T&e4IRG|7t1PGxk`Gxq{CcS0^mEsUHu}})i9helgcuREm4@X57`QW zOMM0ym+-1+SQ`U_$$`*dWi_6fQ43VTr zrf!)cPY8oXLCG++zH?(4CA(A-V@Hd5IFOmV=kp;5()5pHsz=d1$TWc0DP%AfVYV99 zqj9^A`mF>3Fk3~^gN!X<{M1;#$WbP>2H?I@?}17D=~F7@Fu!yu1QPc~DoNcH&4Lw^ za(7_3z3NDxC_Ftm&LF|&qT*3~?g^28MO6^i6%a$2^Lad7SB`7m6y9(Qk2oSEE_4q3 zN{ZnZ8KH82sQO{S-C=d88yzYw%7sOY+vNZ%7Hb$CTpbDHObbID1RE`%`E*+WD=L3# zE?C<|Qs&o@0}1LLM2Bp$ep?_i-0UA*qYf&RNfv1$H^@M9=R^X)SUfW^aA|3`RUv9K z6stmY%E^H{AhzsE8AG<J-7Xw1p)P}l#YgMT20 zxy@BxGil9-6bG3vsN2=QC*_zN;H7$!<*dLJG6zw=hdW=8cXTLpM9?M4!b39}Cgv%J z=6fX63E_6)p>x4*AQC7kTA~y~SVB%cZpjQ%f1Q4IbOl5Ne?ToL^A#Zm)GlNPh3#^3 z(QR;1hP`RjwO~Lh=#CBU8ISzEecVZmsB)aLH-iV{3@ng^`;*nm9phIIFwRxL`=JDY zEqN#>FwA^D(l=4Qs3e)U3}dKdD_HeQWQV6$e#heCW24UKT zzaR|4oRfOITVsTeP3b<2iKqod*Wj-=)5AW0++m$ICP$0?wX#G3=La?4ZYG*}z}`&^ zB1J@(kyYiUV}C)8?Lnf}BrO8l?4Nw5~A` zdyzPLsFiF&3F#Nqb1Jxd3bC=bpF%*!T_`w|h3O3+kWGWSiuKzFE6_M@`M^vcV^4{) z_^LwA$db7ZIJmCmTtlB~~?t zz(Jz5WAeIFG6z&?`sJ7JfysRfO{MlLb?3F1VwR$ko*E;TUZNt`q@0Ts{l9Zby#Pu8A2QcpA!2`_k|CJ?j7mz1 z|94!HLR0DV|A|Y^be@n&w=92!DihZ7JtNYT2u>xtKUR%>4xTHdWuubn&N7Ft6mBh!P?ri>xOPc;0mCXH%OZqEB3?UW!lS^v9*cnUu z6P5gfOG1Q*^>khzuQWOS$tC4NdZWP4U-fpsiOHJvPz7=I-2XV=nOugOAyCQNt3RY- z5?()W&`<$1cc^H8GNzx9IRI1uT13T(0nq-gIAjQo(O)(;a&-9r1?UO~m>8g5a#8RWPqL%liSt^oP;v$gsFZT5=}NrgN^K7I39tRC;o&a(yBzGqagoXf`7c; z|LXzZKi@hEfDH$6lmtcp&+dispWRC~eb-DT1VW?;CUGkqjw0c4_%zl~G#W?!e_(Gk zP;5ZFq)kvJ55^d3z6XP9riec>Wsu~-Y>_11d9pq)lV*Wj&V6#^rtLzuNR3U3u;-yx zwP}xc4~veYUZY)GFlALMn{JcSY^w@uo6Dyz*Q?&oT{^E#dtDx}aFo+IO!~uq5#>&< z)NT*K$)8hUXEg4PrqPKkiN3k8namUO2~+s@?&U&C%{aNnjdr=qT;F;I1)^Va9CU4- zZz4xwVRP5toNu&ZurRXp_?;GtMlE@Z=eOUSHNB5|{G)sQnNe5m+xfHt`V3>}c|5g3 z;4L!U!cH)S#QELzqAdm~T8m|rSSyn{$R7owHj6$C1jERmfC!LS=?O+R0fz0Ha->-0 zj0o&4)owe2sT8j6!YoFw#_9}aG?G%7w^Ac$QO4bl?p$1W9>}LKj|D}cp@9)NwR1zI z1&<&gWM@xx8edGO&5^_feY@HqzWfH(0u5)NjgsJ=Lx(m+h$1T@d~PZC#-r9vso2?2C?rV`-3LSh2Y`K&;f z>0bT12;CvVay9tuvB_1kAjwAi$Q7CRszXqcpjA)^1mx!>FjennXxQ;2yDc~_9%HCF zX`E6dgE8P$CkGKYuUJeHxq#j{l4G`VBe{FbWSELs#am3qo3?7oAz$08Jxfibu)`om zr^z3ujHYdP$-3{NKAVHu6LcU&jy-VzK*L`<8N?PiIe*{yk}E8bc~N&VK5J!LF&f!e zd4!0}QokrpW~=>z$f{jK&Ka_RY@uOryKSA5R*5}NqNve~2nckVNAE*SD52z(%4PJ# z7)oZN4WPeB+!%ENCmZ1pBrRjU@}$Ty7cQ;}{mk*XmxmR3~aUbKdgR!OU$kL!5^0%}2OsLshWK~g{-#_R29fwT5Tvscv`$khu{b0eY&iPtMu zE8LQmby&#+T?z}*b&_1iEAGr#TJ$h>jp9m80-450)EPaj1?~^!4~3TMn9&zuo8JkO zB`K|y^|g@knq5QctHn7GB(84WMw3&S6$UHnQ>M9D)a%bV?cZ0^Lf>{j0}1q>bmxS2 zb$m4b*7LToZ|8p4-VNgdqs2TdkG)=I6Fpz>nDh@4chep$$CV5Q$e}{b){o{uxzRLI z!obhEuA$9^yb4I{{`$xkd-R{?YF#?tQ%VVz2dxEg3X%EBV1N=4J7)%7;jKuL8^s5O zFrSA@Vi$rQU(mu-ApH)sNO_Wja$x=i3wel{46C%Pc+;Y#HL}|>I$jXKyIBh9`XY01 zV!tPN<;iQ5`Da9n`)yF!Ep!S=IO@?H>^&|R3D~p)`Y|>t{u|_!E)4lD>@I~yV`gil zXtJbwE5vs^CnX2mX`DnUM0AYyTOV$;BtS@)t zXdLCbA*p+e83c|%@$W?(KI4;R=CA4R?NKHWTX-?C`w@haZtaMT_~qfg5jpiR`-Wv+ zbV8xg;yn>^AvF>^wjGK_ykuy82U=@SE#bTrlrLM>-HE|P#U2{rts(Uy9u%|hPhNvW{DwRS~wWPE85qX?NAo)7w5 z7>-VgxRdL9O31vr4(v$bb8l5;R3bNdtAF| zZJ(}j@$p~ZBB^0ypjoVP8D!2*PiZ$bU)F5As;uPHWq|Z6cowi4AKqAXqV(5#S1Ely zvq|gva((7K{AA-I>__*W%4@`m&c;pda>ow-nTrXUf&#LA?`6yDK>I|~-y6Dpb(i1X z9+I0O@BHXP=5T%Y6nhipnePBdjxz-R#0*VIaPV1geHhP_`4gY^L28$JIJ4+BFpK0p zm8u(DVQL%ywcaqj+(o4E&n=QZ-x2Osx0q*xxlbdk@HrzS37SDbcF5ougyS+HP1y?k zTpwS>rV(76Zv~d=m{1;ZPt57IM#P*=8i>26XJLP3d?z$%M8uO;*S*K%2z{JZ4&zBM z9g1}2yPENy;mQ3`y)S-sH~SWcHy?xjKpOvkE=-lTkhtbRj^}J%B=1qO@WTF+E}kjeHBOjHov9TTE1GJz+;o+ zwdD>R{wU z>>lF(>43whbGGKpyXoQcUhI#~H|~H<#&EqI&@$LenlfO}$9HuY*xOO(H)E zBsIC7htYl7Qr9UdWBhF&Y1q9@($_x1GjkE+pS^QgARwK(PKj23&_eb|+TwQiQSVvSUO!@kp}O;xNgQ-q@SRXY3nx0?RrX5b*rn87|jdEzTmrltaM zuZjowk#5`lLGuhpt!3cx&uPDv0jlc;pU)?z68@{pCSJ|{zfN7^MAnDJeHz<(&K&x> zHV%7zx~_hGd;2V414+VnpzPN%tH2mF@vQr>fcQnc#OV(Gx7!K%-0Jkln6J$5?oN7# zHaOl~WxcCKQg~2(%J}dmDtO2PN=@;-o|I%b`SLP?C1&x{V~0JRaQ`PN6o(STbJzGM)+p*4e0^ zosGvUq5wGt^rIc?!F}uIvJiuQSE2F%JBENuTWjfbS9ykjx*s9({8ox2uCfg1)r@G; z<<^6vt|t6eYD=N|=~j5lfhGrmrX*ozf?*bVVP+)mn{Ctv)WRs7STrU2eT%pUZFnVe zA+n6H4t}d68Bb+FbPjn>g)xVE-EcLXaLBF4TexSFoM#ayyyB4`oueFR5fmPm9%@++ zl*WMn^bC40=b0%O8n^-<+;_JC1yt?Bqah(O{03^_Uc6h8AwME@7^BSPqjWH$+6AK; z+M_!3qPokYdVHh$1*3aOqRnlipTMG9eWQn%qK8+ar*5M^97HdW#4M&q&%t9p+Qob- zj~ToruTC`J2{sVIjeSiYyD1new59#E-F?q4HugvCS$XV*U|b?&oaM_{OsE8-x$Fxh zm?bDahADowEkJw3FPF(LTF_5j&`(IuuU^+GMi9#oU~O#^uUd)}W0%0o6hRJz5!zc- z=_Zuj#v_d<$UyuR8ITz(&|yNs@O-(yK}M zTY6C~xG}?;NtVfETMSY#&@c^trkVx=S2)XjxPe+^WjP#AGg8tgBC0&Hgb5D2gM^~%S zB`Eb+dh8uE?hu-|njWv8kwlu2{3atcBZH>=4IA`+!p-F+qip zHn1SGOd-<%Ei1K+;E8q?4>xyi1xO-EiMk<}O+BQLGs$hwe~vibXfHUqJ%LBxY9hjF zD#C_n)!H&XKo}Cz?*oSjCMlF7Nkc-0nXT0x?W{K=0tWYUXaOO#qyfmIiPGt4Wc|6u zB+1`}l5h0$Zr|kH+uPcegLaE>A2V=~$nw#p@_}6WPlrIY`t~D9`EM-5iMg=E=-#-E z;p$`{)X1LU6%G<@XyvJ?C73}7iD(4_x~oFr%cZw!auNJL{FDS8X*xYm!y{^m;(dhB zk96USZz3cFuwo7zGC8p%+fp?Itz0rv{NF?h0*eGY9sN3h;*oGQeuE*HPdJ8;PGm`- zuCI|_iF;d#NoI+uqOUntsexjtt%I-qT8X1Ushx1C16G+6OBq}@GZB@etmBQ(#2ZFp z$`e6?qV3F48n6EO*fOuIvO~g>2#S!$du{Fp(|+snqH&Hy2aw?$PFV$|^=D0Id$}u1> zF(>NkRQ6_C#oJlm^5>4S0Bbk{??`J9Mu86oH49ko*aONEgUM@=vI+_yVXx;{NCo)N zeBf4%)z$OuwY)EDHNT;{M?B!>mw3c}c({_DhGvlx=^kF=1=h@5*7ikUMYscVy7%Eb z6*4r2iDEC306D*Uq!lX^lGH#!k7kCnX76xmU8^E%@2rRn>W2o}stoXC2904Oqhljo zRU=M%)<&w-EPqymzKa-b*4QHvCD#M_M;lxr5yI(GwdTVnt|({eCz+hA&PgR4Yz-AG zTz-jaexNezI)Q4Q+xR0=xO#p<)@^glt*ePh?s`U2CLn<#Bf#=FSO`+3rx&V90^HGW znPU!h@3Pt)w=QG~wdT)TcBl#HYJ0oh7Py{w6lt3x*Z%vB-I+oA@%?kOPTOZ|?LRwY zG08YW9`a%h+tWsr3+cc$Ac`*oVS8z~*M4|_uGCvyE9%Vprm$?0BZpkO$VV)H`;0U= zCfxk4GeEz~%syRI(K9Q*lW0Bs{&AG zSt0LPPVbpp?^zw|`SMuRv%uQBtkk>7+Oyx)v)9$T@eqAj9{q#R?9A8ON6|}Ms^Tl8 z?+UG=xxFm?hc-WVY(si^aAf)IaMT^EY3Lf=_yEpWGlNw<&{7NUcRLjab0TkLKvAV1 zX>?`2aAn=7pAt(#3r1keXhJo{V7{=wqC*n4P$IE@fLtru5i^j^&#I3+ha_O|MRwcV zeVZh9yOijVbU@fsmRdiJm%EBGyAJk=PpFlq+C#G1@fzCKScbJkhYghZ)lP;ovy6#7 zI9ko9%ejM@M{B6Iq|kjk9Y2j!5p_4GraCz_0B+xUo{XSHjsCP9C9gsQjx`2lHwJe% zhD0}p28@Mek3k=!$N07zk*1s_yYhL+$2$+3!dbHT9_Z@z$Gz7wBS+OzJ~bsMg9_L( zu#L!+v+zKS@2fwxk~z87MEg51gkb3o)+$f_-fOAqp1dz@d#OCs|8sJXVk(ZIJ>qy+ z9lPThbSla*fBMtVctE~qV(kLObW+z;=*^H~H7L#?#qN`PWVxrJt-}wWcaCu3T{aMZ znrA1&jFOM%3Bvo)J)<-_^G46(G<)_&)UkS{^tW=^BU>r5b1A@h4&_%VBEkhIR`%qy z6ia39DdimKvrp2Iwzci}V^n$gejn7YJjkysuCsr5CxeKxpR%TpG_)_KQtIZ|$Fit| z)QXI73a|LlYH(yUWP}*lGZD}gkR&@6@=T!827RG^&4%15o1`MKHElt;#;QgQ>pjKd z5Zj`b*rHGAly3EqPQcJg!1K9i3gbY~Z1m9l)R1P%ka~8lPx8`S!0=}l4yCDN!Zlp0 z^JywBtM^$Ru<;1jXovS*%Z;tezMn^3vzJwDR$khy;EIffItK-^dybR_!MevHMORa& z$I^^f(|cAkYchC0KwC&%YC3|7Pn_h*C!WkVeeqsHpIS?H>c2=GXLyQV5ddbOL6Ud3 z(kP#N*0x>~?gwdI=d4)o4tIUuGcn5ksr%Qu(cXG*&!>@Tt67BdOW^YmJ5YXiQpb4l zQ_ts(N8`K^qYfZhN7T!W$aTqg=vs@)9mE4mCxII}0gLBPYu_+*9QlDp7b))9@t&%) zQo&Lgx4zi$ZHlQADwuB?p=OE)Z+>^%#5&t7zS{)iYz;JQ5~*%I72hIM-NJsmMYgep z8@ojny9qwqI<4wu6z^p=>1ECBWufY2pXuck-#K92;iK9SRNY|`-|1S7yV2u1Wek|rMV zW>tc=T`y6bz^)n%p%W8PM~8cL#h!50UX0QHuHe3FZPSF@{@dRDcQ}N;RQqpYo1Cc* z{2nq2h-jCWlcRhp9LRnY9O5X9wwT50i0@GG-2o&khS_$TNT9 zMwgXIQsLQrI;z@u!+deXiloS|hHT~XwF>%`dTWuwJYR?Y3oX)#k;w_`*4Lw)jqY82 zF(ei)spsTsoB~>VHC#H+*vs=skG+Mx8*5KRr7P^x-n>RTmWztDqVKB~KRY@*&G@3^9_n#qhIhItR<>++=v216GkK=%rJ?xUpYw(r5 zo-A%09)2GkVICQA-v!Rr5bcYlw65tdq8rRF@&|w8GQPvZVY%)ex`cftRG=2>y*}yJ zym~^7FZhC`oF?`+EKa$$f7G|^m*d%kNYq7FUufKiNlc2+qbu{Y*l+1Rv8GX|PP^CZ zYqf&>sn5${5_f7HV~Blnoc))tC%tY9H(T;jBX= z*E!K^1hS_7iM=)Bp*E`MZO>40xNNzIJ#a@XqWV9(ITfJ>ZVte%(M=$?uI59LPw^?R z@7OkjBcIA~+@{ySb2^J5V)U=lsE6Zb{Tm;y zGFEGxn3IU zMf3OoHshzcK^!il$oC*I3f!TG=8yG5&vdmKhVf0c;$=xRv(<;lteYM1fx&jp(E>yW zl`eBJL{+HJK?bvdj@)vpo`JM6x}GU#>bRMOafhviK|3UohrUU+h8rw`qB1dx+;qv! zp{v;l5%?0yqbeko)ubxYC2fIC`%OCNDNhi^W(|@rTOwm+b>_q)L!7EbGCeA}@d8)@ zpIwnTBhlhJ1IXuti~3&Zy%Jcx%AveB|6Ha);~ra^X#;2oCZ{VS0xRWd`zdYtD zgA^PVt=Ym)NY={36K5U0#Gb~-!^cODe>K6_)Ev3m({05*^?s_dMui~m`==V=Tq0f=cGrf2(g=b5z6(jA$gC`$!yPz)&^h85Y z2psy-ibKZD;4?>U6;aGK?Go8+r8CU1k}9^I6v5vv;woQ6X1ihdo-el2ZNobD_Uw9B z_rAJr=-ZwIxI8t!|z(F`WOHP@ZDBT~>LWBMWn}%9Hz~U;O;>!T6KJyWgi6o5#rTBBZ5P zK^S0agVsUs?BoJe=zLyj650)H{v&t!-jcy%ET9b3}DOhk{@t~wID7I-P`vJ8IoFcseA z*PepS!Pe7}oQ-RQ_y{24+R@9nc{{8dlO~#wDauTwh_oYhBz-k5#xb;Ld8Bk$V4@+` zqKj^I8$K#_)PUF)p-+{^FDHVoVH=7~N13rFFHVFPX`?=gFXqb#R!C$|ol@2p)f|`i zzSK_tZpEZTEE3UN>z#qO<4ED2Tq_G={YbjV`kuQoW~w%&Ju12Ih)&UD8$F`GtHe2S zWpec=9_utRz5Xo&wFy6A1Pm1u+eIuy(~>i(Us}e0rnJ^rPk>k5XOL(S6<4!We3jp75pZN>ll9SpG_kX$y0*IhnDVEc@5)|zTz$>Jhs4aa zn!E{KLkS8UJ0`k?53Y_h2||^->ECM>osLV4aJP8tyh?gVqulCZoE@ZY^#|@!D+^91 zT-ypeDsAv8mnW>0O#R#HdDGgPS@jk9Z|akNIZ3R)EbpsLO*;2_6G{suXUteN?)%2vAM+S@!CVMD{$n$>~utKpKJtyZr zZCuv4Z(e~^%W;LfRQF$eeXY2?&L{cXsow+484|+38Nz-lcCvLA^;9?sAfY!LO+fEX z$y1UxQVK62ts zVR-(@xV6+nrp~u?3=J2wxC)MHk#bQo&BRMqgJ)5?YTD6SolaF+WGaME`k&+wkS)5- zbE&|b_6yMUr{uXmB?W$3Tfez^t+=F-+JNoC`WoF`OOZk;ht2SX=98JFx8BLxBGW^G z>l>PTiit78&Z6H$rd(3T)LvMgJ*s4mbYQ#?>?ximb?&g`5{TYOP}Dl~$tR__ravc3za{ zZm!eoIp)2MH{U5-J84uuWBCNMP^j*9y*62sj;XOrt8isdqS}uBL224|wKOSLIZGy> zQJW>bq`+!W-%EElnjToLpY~X(UhdwKr5)tjc`uoU?UF0n$6gdq2eoi%`}Z!k&kWZ{oG}Ryh@q6oGa>o_-ssx#3PT z_|{oRI=wT|#5>R$hA;Zr0B;yc%vYvyQJ8%|lY7v=Jwv+GO{QgDhUXWns54JfReNKO zFgJgL1deAr+Rv^|1xY^E9;7Mm4!Ryfu;e`oE!kvyP6iinQV>Upw8rCEC@I%78OHP? z(sca#hixgpM9w6`7nw;?qz@dF*yQmIb!u)AX@^o+9<4XhoRrnP6hjThAEmGUjDOvxUjY-*ad& z9}9_{2o2RjWJ!`M!wm%pWJRBQus8vG2tG-&Pqw}UM+N=M|MvIV`W-;_-`CdvA`qS= zNM`>{AaJ1ObJ2~){@dERS$rxc{b2TgMK^?x0hEgWHRb9*&<*0=sfm`V8F;&`phTO6%E?ioQ?XmpDG82TJ8zt1p9aO|0AwK?J%XJHPFO z-O*@Wo{27-sd(48Kg%f)Ld5)rcXnD``5|RcEm3+2#YiSaMGeb2ybw1Inr_hYEu{n3 z#XHb{^Bk#OhKe!$EBJKtS%GG@VSJ75p^E=2_Fp0eH6-Y3VZWcJfwEystuRbkz8Q?of4lC7BgeEAN}z-AzoDCl z(mZf>rd>K87QKn5I9<{)z^Bm-rJsdPZlAS#3+R#fn#B{Hgjts<^|)AmFt64L(-h53hD z{vQaGfB45g;x_-osSu@y06>5~z;i_DC;qby(HtOuAwPe#p_@fbB*C%yKfx^jwGHtB zhzuu*RtrKz8^VhXD2*o;%veiQia1nQT8?HR$lw+lhn8bi9krgw8q&kVl_uVbLOy0| z_Q3*|okp!m{9~pL!BI@!sJ7SR#YjJ~aDYDbTd@j(R3;SaA2;fw=_HgRB^$qn!CpA> zV|q8)1_wy^t7b|z@9UH(8^&^TGJ_T~r_uj~8T~^|{SOuL5C6af{P}1?0o(z^{+maW z`2h9*S8qqCDGi+H5jBEL)+9O+Gr==lq480?t| zReMJRf+}-UrP|a!@Bi?Y_1S?)dyB)zYVFZnF=|JrkI3p>rN4f7AAPFQyu#^yXuH@R zGks#J%Gsn3)F_k>7dIC6VqUIO`oduybp37dz2zf@gh{ve;8^$^BvM}fqWmd`?P#0Hr2{z2#(yCndcKlI~pi5QqY?I1wy7A zehx*XT~T{OEZ~f(i1`R}>xy~c4&d3oy%lZ%DPGbUp*YB^gAu`bEja!g`j431q%SL1~v5UnR{O z^bVmJawL^WAhPlTlX?64h_{vrf=e+P(T|*AK8p?Mxiu$J0z^^Fjbl}@8n+WUwF4tB z9cx&y$Uc);LOA>D#-tx|>eshAjSG;ybO=k(U#f$X^h^}hVn$t%Dhlfpxq>>Z(h=b= z*%re6B&VtqJ48pdj&xnS?!e8MQyf(KlJCDoUcWG$A|?HCn#a*;99^#_>L-}z zCaPOI&?cKL$g`uhj4R5MpXdmF2Rt8DI!xJf$!{Dqv=cLf>Aqv1>%Y$(_v+pWcHS+< z#PHpzx)OeK4zMDB;`6R-35~J|kL0mxWBkZ|v(3{|f!Te&{@zJ&&T<>JwGj^Kx2 z#@`LQul>7?^;9ke!!ny=sl&rhYVkZEqdaL?y&mq9zk_wxs;Q zu5qA6^MF0M)1$XGFYBK4Yqyn?wA{I1?x)>iysLK3-dkb)u7n7SS7GyS1aw5a5_vN= zx|eHe^J=a4D~_^hpJ#2%?|0n^PCh7{l@c9c)zlZUByQ}ufEgd2nt6Vn%-aj%VE>#RvLbnz&mWdi|XIY@?VQ-%L;(lAvNb$wShK%?SJE_RYAsa`}uwkhd)`&J;N~xy#0uGkBgo zj1NDZIxSSLl7=b31{%3;vP)Ai{mlNDj$)GkqBlLGPE|g**vn=~2Jt!{pS3{xleVlV zzC}q@S0im_SC;FNqQ<7C>zVGobP0x+J&Z7$hC`xcQsd$>t+%=41y2i_thjCX7`TKx ziImAkI7v2IIU%C>e7L4RA-YHN!*{D?kw?3aO2zjd$-7YNj4m$>x534Ix3?qiNKDFJ zNWlRba)s4bcwm#4X?`q4mR^wlMgRa)01Pr9!t^`w?KRZ@d?HWy+omcKlWapMlvDy6!vD5h~R?Y`8k#7n7AZc))p>eMbbNTCi< zP_i3QTx!g`uC`;JF#FJ%($aWc;~Gj3=sxy;|