From 082f35cc743cb228e10dded44bb267aa9361371e Mon Sep 17 00:00:00 2001 From: Tobi <40991903+tobka777@users.noreply.github.com> Date: Tue, 2 Aug 2022 11:49:10 +0200 Subject: [PATCH] #774: Getting Started IDE (#729) --- .../advanced-tooling-generic.asciidoc | 15 +- .../advanced-tooling-windows.asciidoc | 17 +- ...-ide-contribution-getting-started.asciidoc | 152 ++++++++++++++++++ documentation/images/WindowsTerminal.png | Bin 0 -> 33925 bytes 4 files changed, 177 insertions(+), 7 deletions(-) create mode 100644 documentation/devonfw-ide-contribution-getting-started.asciidoc create mode 100644 documentation/images/WindowsTerminal.png diff --git a/documentation/advanced-tooling-generic.asciidoc b/documentation/advanced-tooling-generic.asciidoc index 02f821450..ca90f4b07 100644 --- a/documentation/advanced-tooling-generic.asciidoc +++ b/documentation/advanced-tooling-generic.asciidoc @@ -3,8 +3,9 @@ toc::[] = Cross-Platform Tooling -== Git Client -If you are looking for a git client that works cross-platform we recommend to use https://git-fork.com/[Fork]. +== Browser Plugins +There are tons of helpful browser plugins out there and it might be a matter of personal taste what you like to have installed. However, as we are heavily using github we want to promote https://github.com/buunguyen/octotree#octotree[octotree]. +In case you also work with ZenHub you might want to install the https://www.zenhub.com/extension[Zenhub Browser Extension]. == Draw Diagrams To draw diagrams for your project or for blueprints in devonfw, we recommend the following cross-platform tools: @@ -13,6 +14,10 @@ To draw diagrams for your project or for blueprints in devonfw, we recommend the * https://www.objectaid.com/[ObjectAid] is a nice and easy to use eclipse plugin that you can use to quickly create UML diagrams from existing code. While class-diagrams are supported for free, you need to buy a license if you want to use the other diagram types. * https://plantuml.com/[PlantUML] is a great tool that can render UML diagrams from simple markup that can be easily managed in git or other version-control systems together with your code. Its simplicity allows branching and merging unlike other greedy binary UML data-formats. -== Browser Plugins -There are tons of helpful browser plugins out there and it might be a matter of personal taste what you like to have installed. However, as we are heavily using github we want to promote https://github.com/buunguyen/octotree#octotree[octotree]. -In case you also work with ZenHub you might want to install the https://www.zenhub.com/extension[Zenhub Browser Extension]. +== Git Client +If you are looking for a git client that works cross-platform we recommend to use https://git-fork.com/[Fork]. + + +== Tab Grouping For The Web Browser +https://addons.mozilla.org/en-US/firefox/addon/simple-tab-groups/[Simple Tab Groups] is a Firefox plugin that helps to separate tabs e.g. tabs for projekt A, projekt B, travelplanning or hobbies + diff --git a/documentation/advanced-tooling-windows.asciidoc b/documentation/advanced-tooling-windows.asciidoc index f0a258a05..84e4ae505 100644 --- a/documentation/advanced-tooling-windows.asciidoc +++ b/documentation/advanced-tooling-windows.asciidoc @@ -47,9 +47,22 @@ BTW: Windows 10 has already an SSH client included. .Tabs for SSH image::images/tools-tabs-ssh.png["tabs for SSH sessions"] -=== Tabs for CMD +=== Tabs for Shells +If you want to use different shells like CMD, Powershell, git-bash, WSL, SSH, etc. via tabs inside one window, then use https://github.com/microsoft/terminal[Windows-Terminal] that can simply be installed for free via `Microsoft Store`. + +.Tabs for multiple shells inside one window +image::images/WindowsTerminal.png["Shells inside Windows-Terminal"] + + +For perfect integration, you should (re-)insall `git` after Windows-Terminal has been installed and check the option `Add a Git Bash Profile to Windows Terminal` or follow the https://www.timschaeps.be/post/adding-git-bash-to-windows-terminal/[manual integration]. + +.Integration of git-bash into Windows-Terminal +image::https://i.stack.imgur.com/96Blo.png["Intergate git-bash into Windows-Terminal"] + +==== ConEmu +We recommend to use Windows Terminal now, but for the record here is still the suggestion hint we provided earlier: + If you want to have tabs for your windows command-line you simply install https://conemu.github.io/[ConEmu]. Here you can also add other shells like Putty. -Also you should have a look at the new https://github.com/Microsoft/Terminal[Windows Terminal] which also supports tabs. .Tabs for CMD image::images/tools-tabs-cmd.png["tabs for windows shells"] diff --git a/documentation/devonfw-ide-contribution-getting-started.asciidoc b/documentation/devonfw-ide-contribution-getting-started.asciidoc new file mode 100644 index 000000000..b712c0ec3 --- /dev/null +++ b/documentation/devonfw-ide-contribution-getting-started.asciidoc @@ -0,0 +1,152 @@ +:toc: +toc::[] + += Getting started as developer contributing to devonfw-ide + +== Installation +To start developing devonfw-ide, you must first install it on your computer. +Therefore simply follow the link:setup.asciidoc[setup] guide. + +== Contribution +To begin, read through the https://github.com/devonfw/.github/blob/master/CONTRIBUTING.asciidoc[Contribution Guidelines], which you should be sure to follow. +First steps regarding forks or cloning of repos and creating branches, as well as some git commands, https://github.com/firstcontributions/first-contributions[can be found here]. +Clone the https://github.com/devonfw/ide[project IDE] at the beginning. +For further development and testing, it is recommended to xref:symbolic-links[symlink] the modified scripts into your devonfw-ide installation. +Alternatively, the scripts can be adapted in the installation folder and then committed to the project. +For creating a contribution also check the link:DoD.asciidoc[Definition of Done] (DoD). + +=== ShellCheck + +To improve the code quality the https://github.com/koalaman/shellcheck/[ShellCheck] is used for devon-ide. +There is a GitHub action _CI build PR_ for this. If this fails at the PR, you can find the error messages in the big logfile under _Build project with Maven_. +For example, these look like this: + +``` +Running test #2: test-shellcheck + +In scripts/functions line 659: + doUnzip ${1} ${target_dir} + ^--^ SC2086: Double quote to prevent globbing and word splitting. + ^-----------^ SC2086: Double quote to prevent globbing and word splitting. + +Did you mean: + doUnzip "${1}" "${target_dir}" + +For more information: + https://www.shellcheck.net/wiki/SC2086 -- Double quote to prevent globbing ... + +``` + +Further explanations for ShellCheck errors can be found in the https://www.shellcheck.net/wiki/[ShellCheck Wiki]. +Own code can also be tested with the https://www.shellcheck.net/[Online ShellCheck]. +ShellCheck can also be run on the local development environment. To do this, ShellCheck (https://github.com/koalaman/shellcheck/releases/download/stable/shellcheck-stable.zip[win], https://github.com/koalaman/shellcheck/releases/download/stable/shellcheck-stable.darwin.x86_64.tar.xz[mac]) can be extracted to the program directory. For windows the path to the executable (`C:\Program Files\shellcheck-stable`) has to be added to the `PATH` environment variable (https://medium.com/@kevinmarkvi/how-to-add-executables-to-your-path-in-windows-5ffa4ce61a53[instruction]). In the resource folder of the project (`scripts/src/main/resources`) the following command can now be executed in the git-bash: + +``` +shellcheck -x -e SC2181 setup scripts/devon scripts/environment-project scripts/functions scripts/command/* +``` + +For Mac and Linux, ShellCheck is automatically called during the build process (`mvn install`). + +== Create a new commandlet + +=== IDE-Mirrors +Many programs have a download link that depends on the operating system. + +For a new tool create a folder in https://github.com/devonfw/ide-mirrors[ide-mirrors] repository named like the tool and the commandlet with the following files: + +* `urls` contains the download URL(s) that typically contain placeholders like `${ext}` for extension, `${os}` for operating-system, `${arch}` for CPU architecture, or `${code}` for commandlet specific things. The file can hold multiple URLs - one per line. This is used if multiple https://en.wikipedia.org/wiki/Mirror_site[mirrors] are available so the load gets distributed. Therefore devonfw-ide will shuffle the URLs into random order and then try them sequentially so if one URL does not work (e.g. mirror unavailable) it will try the next one. +* `ext-mapping` contains the mapping from operating system (OS) to the according file extension filled into the `${ext}` placeholder of the download for that OS. +* `os-mapping` contains the remapping from OS to the value filled into the `${os}` placeholder of the URL. So you can e.g. remap `windows=win` or `mac=darwin` in case the download URLs do not follow common practices. You can even omit this file to fall back to the default https://github.com/devonfw/ide-mirrors/blob/master/os-mappings[os-mappings]. +* `arch-mapping` contains the remapping from architecture to the value filled into the `${arch}` placeholder of the URL. So you can e.g. remap `aarch64=arm64` or `x86_64=x64` in case the download URLs do not follow common practices. Simply omit this file if not needed. +* `versions` in very special cases, you can create separate configurations in sub-folders for specific versions or version-ranges. Here you can specify a folder-name followed by a less-sign (`<`) and a version number to specify that if the version to install is less than this given version, the configuration will be read from that specified folder. The lines are processed top-down where the first match applies. An example can be found https://github.com/devonfw/ide-mirrors/blob/master/java/versions[here]. + +It is important that the line endings of all files are UNIX `\n`. + +Note that all rules within a mapping are checked from top to bottom. +If the first rule matches, the other rules are ignored. Therefore, the *-rule should always be last. +With the `os-mapping` the *-rule should be used for the Linux distributions, since the OS type is not only linux, but varies strongly. + +It is also possible to use variables in the mapping files (esp. in `os-mapping` that happens first before other variables get replaced). +For example, if the architecture in the download link only appears for Windows, `{arch}` can be used in the `os-mapping. For an example see https://github.com/devonfw/ide-mirrors/blob/master/rancher/os-mappings[here]. + +=== Commandlet +Use an existing commandlet like https://github.com/devonfw/ide/blob/master/scripts/src/main/resources/scripts/command/helm[HELM] as a reference. +Create a file with the name of the tool and put it in the folder https://github.com/devonfw/ide/tree/master/scripts/src/main/resources/scripts/command[scripts/command]. +The first part of the script contains the autocompletion, which should return the available parameters. +Functions like setup or run or other additional functions follow. +Finally, it defines which function should be executed depending on the parameter. + +Use the `doInstall` method for the installation, which downloads the tool based on the mirrors, unpacks it if necessary and puts it in the software folder in the `devonfw-ide` installation: +``` +doInstall "-" "«installation-folder»" "«tool-name»" "«tool-version»" +``` + +For standard installations omit `"«installation-folder»"` (use the empty string arg `""`) what will install to `${DEVON_IDE_HOME}/software/«tool-name»`. + +=== LICENSE +Find the license for the new tool and add the tool to the table of `Third party components` of the link:LICENSE.asciidoc[LICENSE]. +If the license itself does not exist, add it to the end of the file as a new section. + +== Settings +The https://github.com/devonfw/ide-settings[ide-settings] repository allows project-specific configurations of the IDE tools. +For your own settings, fork the repository, adjust the configuration and specify the repository URL during installation. +Important notes on configuration and especially configuration files can be found in the link:configuration.asciidoc[configuration]. +In the configuration files many link:variables.asciidoc[variables] can be defined. + +== Tipps and tricks + +The following sub-sections give you some tipps and tricks to boost your productivty when developing features for `devonfw-ide`. + +== Symbolic Links +With https://schinagl.priv.at/nt/hardlinkshellext/linkshellextension.html[symbolic links] you can use one file that is located inside one directory in multiple other directories, without copying the whole file into the other directories. The file is still only saved at the initial location, but can be accessed through the created links in a much more comfortable way. So you are actually just linked to the original file and therefore don't have to worry about differing versions of the file in your directories. This is very helpful for testing our devon-ide, because e.g. the commandlets folder for testing is not the same as the commandlets folder for git-commits. +Follow https://schinagl.priv.at/nt/hardlinkshellext/linkshellextension.html[these] installation and usage instructions first. +Later on you can make symbolic links of files from your "git folder" and add them into the folder in which the testing is supposed to take place. +E.g. make a symbolic link of ´${DEVON_IDE_HOME}/workspaces/ide/scripts/src/main/resources/scripts/command/docker´ and insert it into the folder ´${DEVON_IDE_HOME}/scripts/command´. +Now changes you make in the first mentioned file will directly be available in your testing environment through the created file-link in the testing environment. + +=== developer tools +Have a look at https://github.com/devonfw/ide/blob/master/documentation/advanced-tooling-generic.asciidoc[advanced-tooling-generic.asciidoc] for some helpfull developer tools. + +=== Bash (Linux's Borne Again Shell) +**For beginners:** + +You probably know this black box on Windows (the Command Prompt) that accepts commands like 'dir' that shows the content of the directory you are currently in, +or 'cd' with which you can change the directory you are currently in and many more commands that allow you to interact with your Windows Operating System in a more direct and eventually faster way. +Now for users of a Linux Distribution there is something similar, but way more powerfull, usually called "Bourne Again Shell", or in short Bash. +This Command Line Interface or "Shell" is what we use most often when implementing something new for our Command-Line-Tool with the name devonfw-ide. https://www.youtube.com/watch?v=I4EWvMFj37g[Have a look at Bash in 150 Seconds.] +For MacOS you often also use BASH. +That's why it is often enough to implement code for Mac or Linux (at least to some extend as you'll see soon enough) to be able to use it on both Operating Systems. + +Let's get to the practical part of the Bash-usage. + +**If you are using Windows**, make sure that you have git-bash installed, so you can execute the Bash commands mentioned in this intruduction. [Here you can find git for windows](https://git-scm.com/download/win). In some cases later on you may want or need to use WSL. Our project teams standard way is to install WSL via Rancher Desktop, which is easily installable with the devon-ide by using the command `devon docker setup`. If you don't have the devon-ide yet, then you can follow [this guide](https://github.com/devonfw/ide/blob/master/documentation/setup.asciidoc) + +The https://www.youtube.com/watch?v=oxuRxtrO2Ag[following video] gives you some important and helpful basics, still you don't need to know all of these commands directly by heart. Instead under the video you'll find a list with the commands mentioned in the video to make a command return to your mind. Also directly play around with those commands while watching the video to learn faster. + +When you used to program in some other languages, you for sure know how helpful a google search in combination with the results on stackexchange can be. +If not, then google your question regarding Bash as usual and mostly you'll find a way to get together the code you want. +Sometimes it needs more patience to get an acceptable result or to find out that a command you already knew includes what you need, if you add the proper tag to its execution. +Take the commands and some of their tags mentioned in https://www.freecodecamp.org/news/linux-command-line-Bash-tutorial/[this rather brief tutorial] as an example. Also definetely try to use the help function from time to time, e.g. type in `ls --help` and you'll see how much more the command `ls` can offer. +On the other side, especialy at the beginning, it is better to get an overview of available tags by googling e.g. +*ls tags Bash* to get a way prettier overview plus examples regarding a commands tags like https://www.tecmint.com/15-basic-ls-command-examples-in-linux/[here] for `ls`. + +**If you have some experience with the Bash or directly want to see more:** + +The meaning of a tag or a sign combination (like `$*`, `$#`, or `$()`) can be hard to guess and also less easy to find during a google-search, because google won't directly search for signs. +Then a syntax cheatsheet https://www.pcwdld.com/bash-cheat-sheet[like this] or https://devhints.io/bash[like that one] can spare you some searching time. +If you don't know what a positional parameter like `$1` is in Bash, then have a look at https://wiki.bash-hackers.org/scripting/posparams[this introduction] and play around with the tools mentioned to get a better understanding of how they work. +It's definitively worth knowing the basics about positional parameters if you want to make some more advanced Bash-scripts. +There are a few more topics that I want to mention to you as you may come across them regularly in Bash-scripting. +The first one concerns regular expressions, which you will find during various coding situations. +Therefore have a look at https://tldp.org/LDP/abs/html/x17129.html[this rather short introdcution on regex] if you are unfamiliar with the so called regex. +Another one is about if-statements and square brackets for testing expressions by comparing them in different ways. +Maybe you'll find something new or helpful https://ryanstutorials.net/bash-scripting-tutorial/bash-if-statements.php[here]. +Finally, to possibly increase your knowledge while scripting bash-files, try out https://www.shellcheck.net/[this spellchecker] that can give you many details on how to improve your code. + +**Directly regarding our project:** + +In case you want to get your hands dirty with code that is already in use and comes from our ide-project, then you can try out the functions written in our https://github.com/devonfw/ide/blob/master/scripts/src/main/resources/scripts/functions[functions-file]. +There are also some basic exercises related to our project that are not official yet, but you can ask for if you want to try some of them out to learn and challenge yourself a bit. + +== Documentation +Scroll down on https://github.com/devonfw/ide[this site] to get an overview of the documentation sections for the devonfw-ide, e.g. Home, Features, Download & Setup or have a look at https://github.com/devonfw/ide/tree/master/documentation[the documentation files folder]. diff --git a/documentation/images/WindowsTerminal.png b/documentation/images/WindowsTerminal.png new file mode 100644 index 0000000000000000000000000000000000000000..e91b7c49e52875a0b84355dc34a7b97b54088dda GIT binary patch literal 33925 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%0AE?932wib$FiiX%O0YWf0u z!0O8w%y~# z@-_z_^*kis{iif9^7X2(E6K*T!9FjGw%atWahCnbc>`bhkLQ(iyd4UB{)gvnwLP$H z@%le(T&c2Yq+Dqw_n^km17DbSHJ`3Mn-)nlEUDG)XD=`AeW{TRe7^tv&q0xt0g2Cu zbX|@Fv%s6LNBerLj9JmW>-d>Zol53tjI2WKIs+h0H}ZxP$BNd>nWR&)&|A*z5^jlwU`JT0XlfDG=_7Hl{nYQqeuO3R~kNQ0=eSe z#>9&^FHaea*8pAnyr7k!Hb@(-Yjg0z7of@aJ#9GgJ6y7?mN5U{)ER)LV1anM-1m(O$L)?C7EkNp;aXFr)N z=%TBZc5lP1e!Z%w@~fY*VJZ5J$dPK+DOq8(24lr5S7bc3JUxD}yl@}cM zLzOtd{you)%b8=f&>~GUYrg(Vo93#u&cFTtQ)lo60b7;U)aU-LqRw+9m6X1`1@xRu z;mTP<>L%53x0Rk~+zmXp{gVVg9pON&f0(HZZ&}(pxAWVF`uXRuU4TmLi(C{SMa5eSh!gd42Eu`8`j6 z^}=&q=UnGH*Eyf_{=DDsv#qD^^$*KW_gB4*c8c8i2;lAY(wcg}NF-K%4_-^T_2QLT z`@05Cds(-LqqSWs0aXU2o`|vc#Fv5kViy*rK2-UNQs{P3;k?XRt>x2ka*x1NzkIh z(kDT}vwP;2T+Q60|8r}xo1in)CZDKtJ{OLQM0rE85*iK;svbO+PjIHEQLWC%3Gx(Z zJduE;j)xn*eYi3wm>3& z4U4>Kt7Ds4<9KZ6UP&%v)5X+`5!05kP|}gvwF24$WS_Rr;U!S2S)MNcC^H#+I`M(= zL$Qb)z*MX4?2sl6Jf5N`3TD{S z+EI?oaX`umbSQ(y>&Yy7vLav&T$!HfzKJ4QandKZ@kqgI46XHT+14NJ{f4wU7C-AwxzRK8Um(4H=2z#C!H zf-?#R;s!Kv`TDhH*CkkXYjHgP6%)f*@y+Ir5 zu{#!6^wt5nfX`l#{G#6PPObs0rxO;9TXx z2mPil3Hfg__y4BMW8>(5#RS!5?|XonCAqa>iMa6(uT;Ft-XRLjcj_Ge^u1N*jT61% zMz#>`1vTre?B%uV0-93|=~%vkQlxIo&YuB_Xw|z`*|QQ^7~9*lT#jPY;qicz`uUm1 zL}=?H_pVY0oTI{%HdeVWSr#_Z_^R^Xlf7cqm`l_46JDXT8jy%$xxdKy$ML^EwIwOwF>PLjb7A^X~Nf7?nxcOG*?aKW1+g>6l(i;0xdmYkX`JK1>b`&Z)@_Dnv%WdhQ z(hvTV=C&rb#~=>KQNPv5Mm{?u*?HUt3CH;O5@416krB@#_dQFmS76mjX;OnbjC~Lr`m;T3KGCF&SIS>KG zDHsdffWlY=xhJ3F^&k+L2imNbn%(#8%|h|}%_2YbhaLvZe*JmT=MR?nn+%)CbDn|9 zBGN92Ay=l#uGRx;(}*+!+13tDRAEMES+$Ku;!ne-8wt`)wkA5#fvti}MvMfOQg%v% zQkI_%>yaJoP=4m)Byyi&YDkXgXrLBDT3n%#@?0FVK{3Ue;Khqna#WS0u;wTnV96Oe z(oF&{>PJNZx&gH9J}Y(g&Y6{*6fsNu?rZx%&ofsfZYEakloLXfS*uk>@VnrOK1mJk>70VK@`$X4@D_-1^9&k}-dxs_< zPiN&p_|X$!zSx02$xCsINE>#GY;8kf~q2DK}g)6{Vvs;IX56m4K8WS?#>?ljLfL>yNtXEAQr;Qqtar|pvBws9FS#)$kpd7 z(&=_Jxr1wT{j8gdD~tk6+CA!!puuC-!0Rta6wC?oj>`5t(;AX6R2?1i0<*sB!7j{t z`3=miP7hz|aNMi23*SyQ@OxX6SYh|+0Zm{Zr#Ywj9i;A-#Z%E*=@@to5EqACS3b^B zz8`GOANv&N0*vu40Op8#@Z497;KLo`Sc+a_7Wj*rEC? z4RwLn+UlhlxItXJtX|#b`WC4}o;~!HeZlHKU+4k+@`IS)_wBplZ>Rntcya;%E?ceY z{LMJ1(fVCb%4x%eXvilLYznR~{(gndLIVEn-o(UxoM?4Ird7sFL<2IP`ud?jQ0lO% z?Mku1^_Q9daiNotaTsv@zEq(OIlk}@AkP+EU2ZRFQBl0Lwm!aq|N86xU03Em6%hqQ zTgkhG%Zp~QOV_7IY^Tk)^EmqCYLoK|j}|=JJ#DwTg#7!PrAm_olg3{zE~;I;vISLu z!ARBhKsvb%x}P5^-w+$h*+U^SH`QA{Ks~u0xpUz^7hZja{vDJw{lI?LK3S3YZt9<6 zAJm3|igSy~$4@mT9r{-z$7viz&puo<*-wB&N{?-cv9_wR`DR@?O(~evMw2lAtQXmv? z!M6Fq%j~LKtwM(DXYXG{Eej<#0Uk>7fA>!Aeh;W5Y53in!&m%L`6Z53U+4KBuLKgH zuHZ|EcELbRulX8ddjRIsJm&bBGbaz{+n|-0} z!2c|}t1kS%&j6oTmG?U@UscdbFXpn}j-6Q;laQo?7fvkwJIF&5b?UeKwV#~wXXjzx z-ckJnujqA$diO2dngl37D;C%$Ddz!c9N z{=pI?6%`<0YLV8Umpi8qAZA@!36!_+Gj4=GHZ6P#Wh`vR@IA1Z6!!N58|8^Yrk>FS1DI%c#v8q&&^b7o?Vl6FhXwUS=*{F&BFcuS!@RmP?JQO{LqZYkN!u>{f`3VR+6VAAhs&=k-V8 zByotmO#YN;JRDJxfWCv>fn)F5WGw_-e0U`RK`Qk|>JW9Djjz9bz_OVXDzh&CoUbXk zhu^m8E~c9*S4#%0fM<@8M%!iH0ZC~E#F0QSTV4n4b|2|)*TKIN=(B`@Etl)!mr-5yX3E|0f4N!WlE)-p z^xnd8e&q6BMHY`ckGW!rooQl)xY@>g;jSc$5h@dv7WhXa^49dvH_oMsK*)JMUy1%v zQ20Q@;+X;n4Mm@#O2@so6jgB5&AgBNcIS=@77cfnt&Og=cub9kFS_Et^Dd!#s`nhH zvIKwN7YaQ7Oxc#lw+sv05_1OZ${4OmTJPOi)%IgqPSgLszuQDqZ*7uKx`~DV7<|M&hCS$>Sbxz?-f>k#lGogZ32)z27KLbS`2_nGR8bJQ zqsF8~5hr5}B1F{1KdB`+sp9bPF5W-GQC-ddj91n&Q%1Jjng--q3zwu@y}LHZsN*bo z825D=+M6B83Yx{9P26ii__EGGwkg^sZPnMD*yn184#KIu3%=7IemNZ{OAGnJ|o&HWv!(@`vXh4-4l61LFapv z3J##NO+{gE3}WWgi>odtLExcn%{#uZ=Y;_82p^sQ5nJ#vm~At;(0O{$?ce9r#4}w^ zX~(uebgRXj#Ux^$F$CyUyL6|Km4~6$|3vVY~1oE5R%{RX?h` zG1zi6y`c*vA=V~rt5}$fFFXNbkUWq7GkecO?1Z2hIL<6A7RTtX_M1;%!-7Y?O^VjwH0uX4aFM<4@|Hmf` zEQUbad1Z(eT{M#@sUfuG;f4- z2}nymG;f;li00M-LkHFfJ(geplMHL)b$1Bt`P=1P&xFMxsSO{omJ=!iFO` z5gRchIWNsiP#(hKme0O|wh-TA(z0ZW)4*!tRXn5L8pYNeMN&8nxjnJ(0O?l&*!`L^ z^e5{L4R(8WDR8A$<6!reD$3teaz_P>d6@Fq!*RY3%_3Le7*D;m)s0NL4(8`QYThb0VcI6y_7|fOd{Zs{x)9OJVyTEnn83QecpE z*CvReDiL?L(HZ88SC(J`_5U@u|J#UdHSnX(0)}mXTdO@YoN3B{)bY`kT41MNR~g9fbyafW}S0FApBe z4)3H+7m_~lOqsdGdEK;kU!5r89g3!kLvhh;JNKJVf!0m4&&wAmk+bdAdYoZmofzYE50-ZhrJ!v5DhMR{n;6~wXpEsbw(siZ>oUe+HkES_gJ_HK)JCvV?fIop> zu`v9UG`DRtTZhdWS#o#>vc)^c{?(^dH~M}*0MzE)(r3_u%D_hyF!UQ(XBgnbuJM`g_U$*$D7se{neeJxj<31&Xu3lHF%~~@w%?F6+sV$KBiWkIX{xc zA+zZp;ylpkBOar(C$Ha;x{jEa7P;uc5t_???(o(|;lvwT({Zsuo_18JS%zU8+R@zh zED!(4V3?pP5TBbZ8cvSu`GJdwfFHn4+3pR=0egvqAkd$ip>FI;$G~>TqKx4j1Btx3 zSfo_A{bmCD~Ju}uwjggAq%-CgKq`* zcYCho>L{cPPQcHbcdczg2`~(Naju2NXaaw|r*S?sBe@m(45JpmQ`FuSr|H<-w9et$ zoMwSHeH9qfr|Ici1!wYNFpTJSm@uPt4Tb2BVA&M`LyyrZ<}ls5Ys_YXt~?5jvcrTp z)ihA0e{g<@PhG`I^*q!kb#+mooE@|6M9m{@zjr57hh5%C>8P#Y+r6Xl&wZ~?7mw|- zrIqyf$L9>hCghT?oy+q!VnF*R_*Ot zg%IiLPOmB0`Y%o$2m!n@BG|JNcG98wXRc$bi=*<`LlWITpMpz8Iz+r6rMJIxec5~n zU0l&^E^%w-q25GeP67H^fw)u}Pf^y`TOSKdr-%6peVDrL-emYJU+dUIt0V03sqsp# zIkh@HU(U!#M~b7Gt4Ylf=s2D8#wJHM1hgXZ8}nPK!eBu~+`9RI8{yRvxJxS?$a{9R zA$Ayel%j@45av*Z=+i-)x!(D7TqlBJV3OH}+)f)Wl~hr<7!K}*?Q#$FtRtUq_DC$= z#efE&RzQ3<0V^z%N$L>vPvG~rrSJ87_Jgc^G4$5wP&%Tg=<`87>^n3p8L5k<4<7NY zM>+!npRyFaV8{@;K|3kpG_R5#Md94>ODZ{spKG$P+T zRMLd99n+GGQEM%Vxbah#-h@uK{;hg6w7)~q?EO1-G_7&R)^iaU#`ieJE{eAi$=JYv zzXjG#m!9{_=Vg#vlPV_!kL^enC&Qf)e@Wz4z_#d19wPR8#Rx;2cdEZN`5xBiB#eKHC?uezF>pLYH!BNVo8!J+~dt9_m?Rdo%HuDZtc z3as*a)EcAik=!pvE(c-2=mZS@X3syOCN>aTrfn$GmYLZ%Bdd#Yl-}s;&2LSCOl@=( zy?MQSV_A#_tsuS$F;Ub1x=rXCuc%OZ#4&E`&_VzoLRC&AV3g<9Kmi#tLunNt-Y&7L z4Z<7WgspA|+EF`s)X&Y`m4S9bX%a)g7Jl)p&F3=F^TcSXz_d4?F5d8@_0zPcL?10iK27YRFmwP*ALn}y2`&^#E!e5ad^xfr?R;V2* zbojPQxBa6~&s+swALZ5^RC%Mdn3V*KX!AgtgDRK&nr<4m_xQRg#k*8l8P|V$NvgsQN zC-NTj!hniN3E&=(&@l45`CL*h7cIQUk3MN%7w898Gg1C!*VY@e?s*YzSc>r4^dMqV zzd9rJkg~Yf^4h`|wi8HPM>2b#4O_4cQef2vJ+D>Es>+6_pZ>#<0_I&A1y!wDhUUfK zjUzWW1r}1{wMpSaNkh9u6(Z$I2o!9E?$`YoY^^F_(!>XRF;jMG;8~&3&#RauL zMRZ8*2a!;p&5DHXNE*QWNKzVb*u{2*J=+7hko%(`lCOipSde3HtRp(V17ZEkzmMbi zZ!9YoHUOZ^({Sf`lh|3WLH`952$Fdd{G^y~3e>j#dIZS*TClTNo|yLaz>r`)uytaq z0kVZ{7Ua)`-4!ha;7ma76^0M2Qo@(-!OZ``$uLB!2?3A`K$^8f2oN^Az9HbP^7bNZ z9{4}Z*F*;_x(bZm&iUKM0wATjHN9G`Q-tgVP-UhwDFK(Zw{P!DCVpV?cL9r*Q4E6; zA8sa^P|yq8%$HEGF?8R#7dn&6UbJks^fI?XLpwXsZ=ck%(aleN8^}1=amBgXgnXP> z7WCx8w%M(hmVASL0?BX>zPBRr+LOj#UeVO{0uV?%fO`B@RZ9)tyf@r?MBDmKo3p|F zTg$enD!;VHMBSeG*2|4(@JG|t-+rL6kKf7^^toM^7}pNn9JV3T$OU^ZwKUJ`75rWI zZ(z?h-e?J&6WFl%J6+>)(sB*c>x;i>=Znv==f8KF-*?Cm{iSyT|9|hs)Qwl~;ez%5 z3+{I8d%3#l!C;`)@zp}SLj;`)6WeoM7K!fNtC3DYf8hJGs7hZi09;1)hAll9Jw=Mp zAK(bT<-X~vYQrSB?urDL3qi;1S=IARaYFruRL`)HTnjk)y8Nm?+Ur{C3%L%4pO-3_ z#m>cP>b{tmFJD4@!RNj{I~OG@`wc^jQ~UTyXKfOc<_bGnh?yM`P{0?oS}hsjz6>vk z9Q#)l>$}*Kc%Bq0lE&R;U_pzW0U~gAW9@gJQXb%`F@?E%!jcUv30c|_ zYAl9b{mexl%K8Rrs*$LsO_wk08;kcorOw>EEY*9&1iHHe2H8@B0i%j9rh1V3X5Xxj zU7qMfCBe}-T#zT92t7vfi2TiK1kj?ih###_`nJGW^j{}$uo|_4;V?l`t<1Ht>E-zF zAM`2r_@Od2cb&s>x6)qyW*lXUO;z0uKJ4OwGp1Rj518JWVC{b%U$QErtlI8|c>oIe z#-g+?M{ti7Ng`EO9iE0tRK3(w{>X-iAp5*bD3M-QW1$yPgdWlZT7oIZuA7KEJYnWf z8xQ?FaC~3o`WhFx(z2U&he=Gop?s7QAoVs9mQEAX+6mJc)FioM5TUe!HKx4Xd5`lG z7kmglK+jxvIU*HXSV9&IQ9C%Jp`9>ht^2XsNLMU>(A0G@D%Ik zTaZ0MyEB&Gb8YZt=mA0xBa4hr+BcO`=tDh)KdC*cHQT`yy+R0#w#(;={bd7vBugP` z?%3t&_u@+bAU$~o-tSK*&Z!8n+_G+v47n)2Z%w1!qnrSRb*BIQ0{HWqbcUI3U1C&k zhORuS&odDi2_Q^Z%}!DP@A(<)3V%aygWG!%2wuG*PQ|WyQcPJz+e1-Ic4co&zH@V+ zN^8f4I$p*=JkOM(*nwtX@whRRj|&hXH$PzJcBQHlC(b}HI@{z{mp1@aoZDTNK$%+O z(D#W$@&yJ`w-uQBeJIgs>g;tC>wiZSjEQ7%Y8^`!=Pp6Ltu#}&&`t{o#YIF#jVK6<^W@Lavdb0CWlxw{P zlZy+hBrEQIhUZTq^N`TUcCq}-I#JyI}YM(_EA~Qenb)n*}#g+v_nL0 z2SznMhq|hA42i&!ajsajqNc_^@a$w?40~+6MpgxKBEbNPEVu8gX(sh{x1AXouz>Rs z6iUBUsUJyO8YjNh8v_ihVk_j-^G>S$J0qI;Gye8~bMAvU=F7kOl=KJNpD{o)3_ycq zYFQ{Wmp#In-0iTiy|Li-=B#;{BzYZ{laXZZ; zS8UnV_hd<9^B~sH2ux@9AAo0QI&k(eUYltYrG_a zekLs@;%Z=7e{Hnl)gfUGuNosCVSl!ymdx=?!2&I=dT?mdj0B2;G{t$FeP5 zX_Q%60jBiL%)r==3K)#b3sbwMFr9r5fk$wi+GTsRfrV+q0aoYuMnCKeAX0za0ireAK~X~zuPG>@9|6;D_h!g`25p5UEij^Af#f& zAKebv202*lMb~e*5%dn&F`Z?_V02-wyBY{Q#VmG|4fLXEb$I8_-x7u?LBHz$3NzL| zTT#bPK$n!ayZe$&DTuQHAen4#AMV$EZ2Kb%7MK`xyp3zZT0Z7Tvvl}CvjZ$kklL)N zTRi!Z5J1Maek4Wx-Xh-!1`h!DhBVl5LbskGm1Xa@=P?ze@V>up!uIsX=+f$+d(D=* zk<-2X$g1sa&_DsA1w*>i`?8KvdT2^^Fx)BsvgLpo1C1};dCYdA5A*4@7vN31#CKQU z3r}m$!`HeJUop2embiRJHetd?<7H7*RR>L}MtMNU2;@@PwMm#V5MjO)N976F5=n{lYtll z7>$}qre7~I|(vu^J6 zhjZfwbPEHfeSVM!KDW+4`zJel4n~4{+MQ{SHqHn{n`Ln`N<-Ct_Bn7; zvh6H{7fe^II#o_9O0EQZ5+{PFx!c@+(7CFL`RMb^HXPdEUQ~^75_HrcKL|HK16#N< z0*UTrz|s(Zjt+^@wq)ce4F|x)U9LW;Y-eEYhBgC(%WVTekB)r$m8gC|9*71Wp95*w zboPcH8&lG!mEe@V3sq|6Wiv?b-kUMpRckk1wvJ^ACPLKThq(RwVDG8w<@{~>{O+Ln zl;g$=0`ChHFvzXPiO**H(r?VkA7n8Q(xw=2N5}#k8~*aqPirkdC3 zpNtx<`nUs^ptd@eE>wOWBtSD6hL7*oZ?%S5Nf>sGai5#xH z%Bt^i6&r7u2049Fki6^@^+CAY%lcZ`UyPtVJ@deoZHV?hFmgfTN*uLrOcRSvIS4%^ z*g#{G?W_TB8P*)zZ*YE(6ntT%b7<*U-2g4dsJ2phA|SoI=_Lw(yz<^25Px;a3+JRQ z8K+5Px_oC&xCUlcHs~-E79SB5fR-fV*ls6|GqRn}<3Z-we^2zj3TBL*+GUsarb-wP zL=OyHMH{6aW7R%qcrlQhT1$bl#<5=~7NksIiJEpA#!Ygz(fJXRA72n*R zf_ilT>*CHe%_#q4%=4fkvo%OhhcL2Q5cCRlf_~;k^^{CuXDQGc07AGMk^+Oi?`uUZ z2CU}ToaXvuyYysSDN1Y!Qscr@|0Ad!d8=(R0gr4H{`AMekhXgw_;ig+6#nG++=Asb z;ax2z?zZ&wE0aO1vYNoM4zib-KiE5ZjmLomT(C+NZ81O`Iw`IG+chL>VngM9+4cx1&nC_T7 z@Iy&w2iDBiqyt8g)KuItjVJ@_j|>$mi@%{Nsiy~5i2yqPLgMU^9g~kO=S2C-J|hB+ z?Lh>IjKcF!`nDXbJZwi=XWIEyCaHTmDV>{a9gCL+;fs@|3`4g;<<^%Df&a(F^gKY9o zrN2%bvIjkC3>@L~fM~X|no0arTWbf%59yTx^K0r%z$&#DJI7?1Wea?9!#lBD?d-?T; z5gs_1!X$jVI8MMVJ&|vVpVS{{N+3KM%+js;vGu&smWsZQUQrq`TJq;g))f&pz#8~r z_z?sqL|HszT;Y%VG|k4xpP}m?JuX>&Jn4><$cv#91gR~a53Tb$&5fgK2Z46>K`BRA z*&_4tZyqi#SJAB#0!8^HIvLK=L)cQ?5hA`hVKi43W`0tmkUIB4>k%a$sC%2UoMGHQ zrp58%Zp(@?qgLgc*&~5nRn|?@slt{oGG^4S_kp&sSejf*?bMwDcG)|~>pZ`gpC%gr zq%HrA$28V3Vw?OhJ5>8a!jtJsm@R?8l!5#g&Ul->0qL3MMS2w00NpzL*+(JP_b+E$ z85~PH?l$rHy{4d~*2{IKC>aJXi80zTjERWwKRffyK3oz@=JZM@3<#(6=?CH)Z)ZC88QMM?By*ivOqBcB z%$VXiPpP>MC^>=Ggei`7CQYyR-*46r{I>Si_%|{6gIX`TE7v+h${N57*Y1Z1f94PN!Q&+s!$ z-n!}CO9k0S{i2csz`l=+LEYAo#s~^WR{Y5w3k`_ZH@AtqsngTO5JXTBNCdc>E(_D@_HLCI-3XRLaG@yqWr$Rqpv0qUyZggb|+<0v=2 zU7e9;xQ5@arDF0(D)IPcl)GwXY@n6IG<&;AX2mj_6mVF|aA!i?Mq<8nFinSsCGorH zVMsY=E#@>(PQ~qNlOTM%W)2&h!1+s2#ekaIF0RSWX*MHvOhl+$QNG+DLvC#7XOcmq-M8ogZ8q|#m-z>A!;_K`0sI5XuXsu|7ud9vHD0`#zLF#My?uPvB~ z%YgrWBs9`5`wsAdtVGkQs`jK0ri}X*SM#A{rg(4<7mo6cugE;ACgcM@eos3cPGxsO zwc~V`C!y8AUOh?js!#gn%Bz)wPcbEvB!6~g#s*U^I8IcmFFY1s&NeVw=>L*GQRfUY z7@<}4;vC@GvNNhRg zNOq!!q2wG-%xi(J#L=b9RCsR?OWM^F9f! zd$^8CfID&WsZDV@0O=jW2JEP<(QEi?$64lw-v~%n(xF%U=O)E>-#hMH`lxW%pbzX( z4kPdMo;;Jr*Ps6=I%TvakJPQQJX*@QZe`@9UW5<;2Pr~N%hBO|NXqODvqof(b!=k8 zz@3N)oB2`0+qb1}W(}s|-@gR$mpG=ui9z;^z&m}=8f9{HmNK);j9 z{6zFP`F1fd*iCf~+}#z(sik}M9Og_!i&|D@ORMX7Q=?IIoHnZ6CX~E}p{dP@k7m5< zw78}>2@Uv|p>tXE2|=MDG7LHkz)1lStwQhGt+i z%6uchreFOc|3$gRiJ;u?*c$haB8uP4a|^PpU7taV_q=AjL$U|1S=Yi^@Dj}*zm#L3 zE%fY|w=}lhhb@o$D?|6!JjVD9-`aH}z{sax(*UH^13ZEIMF$@{>%t1O4pJ~I{K?N$ zwW?oT`EH{*&CEItT|+mHtoFR?Gi8&h9d|bNO{KjP^n40SN4GB0Nf@#>1rEv>DvS5Wrl4J?|}0k>g<6P-bmSWp{ZRegG5oJWqQ~0 zOMf@|zy!Xoj8)pxHj_cPo48$%vPljCX>IBKt;}+rI=oPCux`wDS%v~ZsVkRnc(6{b zOEV}9jk-Bx6V9=21v~yEbk*bNr*4C+94yzuMdC7 z?ZyHVhq8vxfkz&!14e~qW!ykoHOfmVV~UPgRk)j%agn&*v(JXFw>D$JAq=ygc{&eu zq`haU@%WU^4Z-J*7Y2RfE?xADBej z9#5y41-RhHT;lh&jc*XHwb|NsTe{c8C;pD4g>W01M9vB%+^PDV9B{3*2rFOuBE*Qj z2{2S*)vp|B>$|-1+d~0DjCE)mQ?)_Z5ob4%RLbK)zis&aeBKsq^56t(J8|O8?1qJR zF6}JiDiN$HgCC{)(SsrMP+WDEvBZ5&>VTXAgJDXlkl$k$L`vC?hx~14& za`F58LOu0c-Lvpkg&3${12=;jmvzz~*IAhY_7Ghy0=_cmjaM@oIinM#%8{9NRt5rG zGTyf1SWcK;2rq78RikiUO!tO*-SJi6)olr|*L8kAQK2wMeVjI@?1CeJp=7$%ucjcK4)SNy?QOObM-(Q+>kpZ^J4e}80V%X7&h zkGC6_T!>CeXzN(@z+w^0#?T;bETz_BDJx;+?o&n<&r935)^y?4AcW!WSfCa;duHxF zzor>-x4R&4xAHk<@gg|6#Thtd=;OERtBU+)g(>kPX@^&O)UG3i3kJfpg{U+JGh^eP zMa#ieDD(&@p-8byF~^olk( z1~S)maZe=bqoL%$>=5H`y&zuzYRHR; z$~Bx*W1xUPU|q&tcn4BAT0|g4Q8(d251I#gszxT3YXa1R8zuY7=6u})E->5tc%hw- zNB(gFvp``kPioT zU5Tt|Rlku$JTWqL(bdSUj~7}BxoNh1edyoWx}R=t*81M~MS}R)g(r#E{s!W(tE&&a?AN YULst654%c^Q$MBS0oVQX--0jwf5rykHvj+t literal 0 HcmV?d00001