From 07d1ba7e944f50a07fdf09b21318035286bc78a6 Mon Sep 17 00:00:00 2001 From: <> Date: Tue, 31 Oct 2023 20:16:02 +0000 Subject: [PATCH] Deployed 4ccbd99 with MkDocs version: 1.5.3 --- .nojekyll | 0 404.html | 1225 +++ .../CPP_SDK_v4/index.html" | 1491 ++++ .../CPP_SDK_v6/index.html" | 1506 ++++ .../Choregraphe_v4/index.html" | 1499 ++++ .../Choregraphe_v6/index.html" | 1475 ++++ .../Maquina_Virtual/index.html" | 1652 ++++ .../NAO_Flasher/index.html" | 1424 ++++ .../NAOqi-overview/index.html" | 1555 ++++ "Instru\303\247\303\265es/ROS_1/index.html" | 1616 ++++ .../Robot_Settings/index.html" | 1453 ++++ assets/images/Metodo_1.jpg | Bin 0 -> 100143 bytes assets/images/NAO.png | Bin 0 -> 7881927 bytes assets/images/cpplogo.png | Bin 0 -> 112631 bytes assets/images/favicon.png | Bin 0 -> 1870 bytes assets/images/python.webp | Bin 0 -> 6244 bytes assets/images/robo.png | Bin 0 -> 35931 bytes assets/javascripts/bundle.aecac24b.min.js | 29 + assets/javascripts/bundle.aecac24b.min.js.map | 7 + assets/javascripts/lunr/min/lunr.ar.min.js | 1 + assets/javascripts/lunr/min/lunr.da.min.js | 18 + assets/javascripts/lunr/min/lunr.de.min.js | 18 + assets/javascripts/lunr/min/lunr.du.min.js | 18 + assets/javascripts/lunr/min/lunr.el.min.js | 1 + assets/javascripts/lunr/min/lunr.es.min.js | 18 + assets/javascripts/lunr/min/lunr.fi.min.js | 18 + assets/javascripts/lunr/min/lunr.fr.min.js | 18 + assets/javascripts/lunr/min/lunr.he.min.js | 1 + assets/javascripts/lunr/min/lunr.hi.min.js | 1 + assets/javascripts/lunr/min/lunr.hu.min.js | 18 + assets/javascripts/lunr/min/lunr.hy.min.js | 1 + assets/javascripts/lunr/min/lunr.it.min.js | 18 + assets/javascripts/lunr/min/lunr.ja.min.js | 1 + assets/javascripts/lunr/min/lunr.jp.min.js | 1 + assets/javascripts/lunr/min/lunr.kn.min.js | 1 + assets/javascripts/lunr/min/lunr.ko.min.js | 1 + assets/javascripts/lunr/min/lunr.multi.min.js | 1 + assets/javascripts/lunr/min/lunr.nl.min.js | 18 + assets/javascripts/lunr/min/lunr.no.min.js | 18 + assets/javascripts/lunr/min/lunr.pt.min.js | 18 + assets/javascripts/lunr/min/lunr.ro.min.js | 18 + assets/javascripts/lunr/min/lunr.ru.min.js | 18 + assets/javascripts/lunr/min/lunr.sa.min.js | 1 + .../lunr/min/lunr.stemmer.support.min.js | 1 + assets/javascripts/lunr/min/lunr.sv.min.js | 18 + assets/javascripts/lunr/min/lunr.ta.min.js | 1 + assets/javascripts/lunr/min/lunr.te.min.js | 1 + assets/javascripts/lunr/min/lunr.th.min.js | 1 + assets/javascripts/lunr/min/lunr.tr.min.js | 18 + assets/javascripts/lunr/min/lunr.vi.min.js | 1 + assets/javascripts/lunr/min/lunr.zh.min.js | 1 + assets/javascripts/lunr/tinyseg.js | 206 + assets/javascripts/lunr/wordcut.js | 6708 +++++++++++++++++ .../workers/search.f886a092.min.js | 42 + .../workers/search.f886a092.min.js.map | 7 + assets/stylesheets/main.4b4a2bd9.min.css | 1 + assets/stylesheets/main.4b4a2bd9.min.css.map | 1 + assets/stylesheets/palette.356b1318.min.css | 1 + .../stylesheets/palette.356b1318.min.css.map | 1 + css/timeago.css | 15 + index.html | 1474 ++++ js/timeago.min.js | 2 + js/timeago_mkdocs_material.js | 18 + mkdocs-kludge.sh | 23 + naoqi-2.1/cpp/about-the-examples/index.html | 1428 ++++ overrides/main.html | 5 + release/index.html | 1407 ++++ .../index.html | 1404 ++++ .../index.html | 1522 ++++ ros1/general-instructions/index.html | 1337 ++++ ros1/installing-native-packages/index.html | 1329 ++++ .../index.html | 1545 ++++ .../index.html | 1404 ++++ .../index.html | 1522 ++++ ros2/general-instructions/index.html | 1666 ++++ .../index.html | 1505 ++++ search/search_index.json | 1 + sitemap.xml | 118 + sitemap.xml.gz | Bin 0 -> 473 bytes vms/ubuntu-14/index.html | 1779 +++++ vms/ubuntu-16/index.html | 1776 +++++ 81 files changed, 43466 insertions(+) create mode 100644 .nojekyll create mode 100644 404.html create mode 100644 "Instru\303\247\303\265es/CPP_SDK_v4/index.html" create mode 100644 "Instru\303\247\303\265es/CPP_SDK_v6/index.html" create mode 100644 "Instru\303\247\303\265es/Choregraphe_v4/index.html" create mode 100644 "Instru\303\247\303\265es/Choregraphe_v6/index.html" create mode 100644 "Instru\303\247\303\265es/Maquina_Virtual/index.html" create mode 100644 "Instru\303\247\303\265es/NAO_Flasher/index.html" create mode 100644 "Instru\303\247\303\265es/NAOqi-overview/index.html" create mode 100644 "Instru\303\247\303\265es/ROS_1/index.html" create mode 100644 "Instru\303\247\303\265es/Robot_Settings/index.html" create mode 100644 assets/images/Metodo_1.jpg create mode 100644 assets/images/NAO.png create mode 100644 assets/images/cpplogo.png create mode 100644 assets/images/favicon.png create mode 100644 assets/images/python.webp create mode 100644 assets/images/robo.png create mode 100644 assets/javascripts/bundle.aecac24b.min.js create mode 100644 assets/javascripts/bundle.aecac24b.min.js.map create mode 100644 assets/javascripts/lunr/min/lunr.ar.min.js create mode 100644 assets/javascripts/lunr/min/lunr.da.min.js create mode 100644 assets/javascripts/lunr/min/lunr.de.min.js create mode 100644 assets/javascripts/lunr/min/lunr.du.min.js create mode 100644 assets/javascripts/lunr/min/lunr.el.min.js create mode 100644 assets/javascripts/lunr/min/lunr.es.min.js create mode 100644 assets/javascripts/lunr/min/lunr.fi.min.js create mode 100644 assets/javascripts/lunr/min/lunr.fr.min.js create mode 100644 assets/javascripts/lunr/min/lunr.he.min.js create mode 100644 assets/javascripts/lunr/min/lunr.hi.min.js create mode 100644 assets/javascripts/lunr/min/lunr.hu.min.js create mode 100644 assets/javascripts/lunr/min/lunr.hy.min.js create mode 100644 assets/javascripts/lunr/min/lunr.it.min.js create mode 100644 assets/javascripts/lunr/min/lunr.ja.min.js create mode 100644 assets/javascripts/lunr/min/lunr.jp.min.js create mode 100644 assets/javascripts/lunr/min/lunr.kn.min.js create mode 100644 assets/javascripts/lunr/min/lunr.ko.min.js create mode 100644 assets/javascripts/lunr/min/lunr.multi.min.js create mode 100644 assets/javascripts/lunr/min/lunr.nl.min.js create mode 100644 assets/javascripts/lunr/min/lunr.no.min.js create mode 100644 assets/javascripts/lunr/min/lunr.pt.min.js create mode 100644 assets/javascripts/lunr/min/lunr.ro.min.js create mode 100644 assets/javascripts/lunr/min/lunr.ru.min.js create mode 100644 assets/javascripts/lunr/min/lunr.sa.min.js create mode 100644 assets/javascripts/lunr/min/lunr.stemmer.support.min.js create mode 100644 assets/javascripts/lunr/min/lunr.sv.min.js create mode 100644 assets/javascripts/lunr/min/lunr.ta.min.js create mode 100644 assets/javascripts/lunr/min/lunr.te.min.js create mode 100644 assets/javascripts/lunr/min/lunr.th.min.js create mode 100644 assets/javascripts/lunr/min/lunr.tr.min.js create mode 100644 assets/javascripts/lunr/min/lunr.vi.min.js create mode 100644 assets/javascripts/lunr/min/lunr.zh.min.js create mode 100644 assets/javascripts/lunr/tinyseg.js create mode 100644 assets/javascripts/lunr/wordcut.js create mode 100644 assets/javascripts/workers/search.f886a092.min.js create mode 100644 assets/javascripts/workers/search.f886a092.min.js.map create mode 100644 assets/stylesheets/main.4b4a2bd9.min.css create mode 100644 assets/stylesheets/main.4b4a2bd9.min.css.map create mode 100644 assets/stylesheets/palette.356b1318.min.css create mode 100644 assets/stylesheets/palette.356b1318.min.css.map create mode 100644 css/timeago.css create mode 100644 index.html create mode 100644 js/timeago.min.js create mode 100644 js/timeago_mkdocs_material.js create mode 100644 mkdocs-kludge.sh create mode 100644 naoqi-2.1/cpp/about-the-examples/index.html create mode 100644 overrides/main.html create mode 100644 release/index.html create mode 100644 ros1/compiling-for-amd64-based-systems/index.html create mode 100644 ros1/compiling-for-arm-based-systems/index.html create mode 100644 ros1/general-instructions/index.html create mode 100644 ros1/installing-native-packages/index.html create mode 100644 ros1/installing-precompiled-packages/index.html create mode 100644 ros2/compiling-for-amd64-based-systems/index.html create mode 100644 ros2/compiling-for-arm-based-systems/index.html create mode 100644 ros2/general-instructions/index.html create mode 100644 ros2/installing-precompiled-packages/index.html create mode 100644 search/search_index.json create mode 100644 sitemap.xml create mode 100644 sitemap.xml.gz create mode 100644 vms/ubuntu-14/index.html create mode 100644 vms/ubuntu-16/index.html diff --git a/.nojekyll b/.nojekyll new file mode 100644 index 0000000..e69de29 diff --git a/404.html b/404.html new file mode 100644 index 0000000..4df8576 --- /dev/null +++ b/404.html @@ -0,0 +1,1225 @@ + + + +
+ + + + + + + + + + + + + + +Para que seja possível desenvolver programas que controlem os robôs, é necessário instalar o SDK (Software Development Kit - Kit de Desenvolvimento de Software) do NAO v4 para C++.
+Esse SDK possui APIs e pacotes importantes para o desenvolvimento de tais programas.
+Para verificar a versão do compilador GCC instalado na sua máquina, execute o comando:
+gcc --version
+
Caso o GCC não esteja instalado no seu sistema, execute:
+sudo apt update
+sudo apt install build-essential
+
gcc --version
+
O qiBuild é uma ferramenta para criar projetos entre sistemas operacionais diversos usando o CMake e será necessário para o propósito do presente tutorial.
+Dependências são pacotes necessários para rodar um programa específico. No caso, para instalar o qiBuild serão necessários os seguintes pacotes:
+sudo apt update
+sudo apt install build-essential cmake python-pip
+pip install 'pip==20.3.4'
+
++Obs.: Você provavelmente receberá warnings do pip no seu terminal, sugerindo o upgrade do pip. Apenas ignore esse aviso, pois o referido upgrade pode corromper o pip.
+
Para instalar o qiBuild, execute o seguinte código no terminal:
+pip install qibuild --user
+
Digite o código abaixo. Você deverá escolher o gerador (recomendado usar o Unix Makefiles) e o compilador de sua escolha.
+qibuild config --wizard
+
++Para os testes do presente tutorial, deixar o compilador como "None" não implicará em problemas. Além disso, você sempre pode reconfigurar seu qiBuild executando o código abaixo no diretório padrão "/~".
+
Resultado: um arquivo é criado em ~/.config/qi/qibuild.xml
. Ele será compartilhado por todas as worktrees que você criar.
++Obs.: worktrees são ambientes de trabalho, nesse caso, do qiBuild.
+
++Exemplo de caminho: "~/Downloads/worktree"
+Obs.: NÃO criar worktree em diretórios com acentos ortográficos no nome, pois isso gera erro de decodificação com o qiBuild.
+
cd caminho/para/worktree
+
qibuild init
+
Para baixar o SDK de C++, siga os seguintes passos:
+Former Versions
.++Obs.: Muito cuidado ao selecionar a opção correta de acordo com seu sistema operacional.
+
Extraia o arquivo baixado na worktree criada anteriormente.
+Supondo que o nome do arquivo extraído seja "naoqi-sdk-2.1.4.13-linux64", acesse o seguinte diretório:
+cd caminho/para/worktree/naoqi-sdk-2.1.4.13-linux64/doc/dev/cpp/examples
+
$ qitoolchain create minhatoolchain /caminho/para/naoqi-sdk-2.1.4.13-linux64/toolchain.xml
+
Em "minhatoolchain", deve ser inserido um nome de sua preferência.
+qibuild add-config minhatoolchain -t minhatoolchain --default
+
cd core/sayhelloworld
+echo "set(CMAKE_CXX_FLAGS "-D_GLIBCXX_USE_CXX11_ABI=0")" >> CMakeLists.txt
+
qibuild configure
+qibuild make
+
cd build-minhatoolchain/sdk/bin
+./sayhelloworld "Olá"
+
++ +Caso o binário rode e resulte no erro "Cannot connect to tcp://Olá:9559", o SDK foi instalado com sucesso.
+
Para que seja possível desenvolver programas que controlem os robôs, é necessário instalar o SDK (Software Development Kit - Kit de Desenvolvimento de Software) de C++ para o NAO v6 (com NAOqi 2.8).
+Esse SDK possui APIs e pacotes importantes para o desenvolvimento de tais programas.
+Para verificar a versão do compilador GCC instalado na sua máquina, execute o comando:
+gcc --version
+
Caso o GCC não esteja instalado no seu sistema, execute:
+sudo apt update
+sudo apt install build-essential
+
gcc --version
+
O qiBuild é uma ferramenta para criar projetos entre sistemas operacionais diversos usando o CMake e será necessário para o propósito do presente tutorial.
+Dependências são pacotes necessários para rodar um programa específico. No caso, para instalar o qiBuild serão necessários os seguintes pacotes:
+sudo apt update
+sudo apt install build-essential cmake python-pip
+
+# Atualizando versão do pip para última versão de suporte ao Python 2.7
+pip install 'pip==20.3.4'
+
Para instalar o qiBuild, execute o seguinte código no terminal:
+pip2 install qibuild --user
+
++Obs.: NÃO ATUALIZAR PIP AUTOMATICAMENTE (COMO SUGERE O PIP no TERMINAL) (o suporte do pip ao Python 2 chegou ao fim, sua atualização automática corrompe o Python 2 do sistema);
+
Digite o seguinte código. Você deverá escolher o gerador (recomendado usar o Unix Makefiles) e o compilador de sua escolha.
+qibuild config --wizard
+
Resultado: um arquivo é criado em ~/.config/qi/qibuild.xml
. Ele será compartilhado por todas as worktrees que você criar.
++Obs.: worktrees são ambientes de trabalho, nesse caso, do qiBuild.
+
++Exemplo de caminho: "/Área de Trabalho/worktree"
+
cd 'Área de Trabalho'/worktree
+
qibuild init
+
Nativamente, existe um exemplo testável intrínseco ao qiBuild, e vamos usá-lo para testar a instalação correta da ferramenta.
+qisrc create myFirstExample
+
cd myfirstexample
+
qibuild configure
+
++Obs.: note que o diretório
+build-sys-linux-x86_64
foi criado dentro do diretório "myfirstexample"
qibuild make
+
build-sys-linux-x86_64/sdk/bin
:cd build-sys-linux-x86_64/sdk/bin
+
E execute:
+./my_first_example
+
++Se a mensagem "Hello, world" aparecer no terminal, a instalação do qiBuild foi concluída com sucesso.
+
Para baixar o SDK de C++, siga os seguintes passos:
+Salvar arquivo
++Obs.: Muito cuidado ao selecionar a opção correta de acordo com seu sistema operacional.
+
Extraia o arquivo baixado no local de preferência
+Supondo que o nome do arquivo extraído seja "naoqi-sdk-2.8.5.10-linux64", crie um toolchain com o seguinte código (adicione o caminho para a pasta extraída e substitua no código abaixo):
+$ qitoolchain create minhatoolchain /caminho/para/naoqi-sdk-2.8.5.10-linux64/toolchain.xml
+
Em "minhatoolchain", deve ser inserido um nome de sua preferência.
+cd caminho/para/worktree
+
qibuild add-config myconfig -t minhatoolchain --default
+
++ +Lembre-se de trocar "minhatoolchain" pelo nome criado anteriormente.
+
Choregraphe é um programa da Softbank Robotics usado para:
+Com o Choregraphe, também é possível criar aplicativos contendo diálogos, serviços e comportamentos poderosos, como interação com pessoas, dança, envio de e-mails, com a possibilidade de desenvolvê-los sem escrever uma única linha de código.
+Mínimo
+Recomendado
+Sistema Operacional
+Ainda que o Choregraphe seja multiplataforma, recomenda-se a instalação no Ubuntu 16.04 (Xenial Xerus) - 64 bits.
+Para baixar o Choregraphe 2.1.4, acesse o site da Aldebaran Robotics.
+Desça até o sub-menu Choregraphe, e na seção do LINUX, clique em Former versions
.
Na página que se abre, selecione o setup do Choregraphe na versão 2.1.4 (versão usada com o NAO v4).
+O download será iniciado.
+Com o navegador de arquivos do Ubuntu, navegue até o diretório onde o setup baixado se encontra.
+Clique no arquivo de setup com o botão direito do mouse, vá em propriedades
e selecione a aba permissões
.
Marque a caixa Permitir a execução desse arquivo como um programa
.
No terminal, abra o diretório onde o setup foi baixado.
+Execute o setup com o seguinte código (supondo que o nome do arquivo baixado seja "choregraphe-suite-2.1.4.13-linux64-setup.run"):
+sudo ./choregraphe-suite-2.1.4.13-linux64-setup.run
+
No wizard que se abre, aceite as permissões, selecione a opção Quick install e, quando for pedida a license key, insira o seguinte código:
+++654e-4564-153c-6518-2f44-7562-206e-4c60-5f47-5f45
+
++Obs.: Como alternativa ao processo de instalação manual, pode-se executar o seguinte código:
+
sudo ./choregraphe-suite-2.1.4.13-linux64-setup.run --mode unattended --installdir '/my/destination_directory' --licenseKeyMode licenseKey --licenseKey '654e-4564-153c-6518-2f44-7562-206e-4c60-5f47-5f45'
+
Executando o Choregraphe 2.1.4
+Para executar o Choregraphe 2.1.4, existem duas maneiras diferentes.
+++Clique duas vezes no ícone do Choregraphe.
+
++ +Execute o seguinte código:
+"/opt/Aldebaran Robotics/Choregraphe Suite 2.1/bin/choregraphe_launcher"
(com as aspas).
Choregraphe é um programa da Softbank Robotics usado para:
+Com o Choregraphe, também é possível criar aplicativos contendo diálogos, serviços e comportamentos poderosos, como interação com pessoas, dança, envio de e-mails, com a possibilidade de desenvolvê-los sem escrever uma única linha de código.
+Mínimo
+Recomendado
+Sistema Operacional
+Ainda que o Choregraphe seja multiplataforma, recomenda-se a instalação no Ubuntu 16.04 (Xenial Xerus) - 64 bits.
+Para baixar o Choregraphe 2.8.6, acesse o site da Aldebaran Robotics.
+Desça até o sub-menu Choregraphe, e na seção "LINUX (2.8.6 and later)", selecione Choregraphe 2.8.6 - Binaries
.
Quando o download for concluído, extraia o arquivo tar.gz no diretório de sua escolha.
+++Obs.: O setup está com arquivos corrompidos. É altamente recomendado que você baixe os binários. +Obs.: O arquivo de binários dispensa uma instalação formal, sendo necessário apenas executar o launcher do programa, conforme explicado abaixo.
+
Executando o Choregraphe 2.8.6
+Exemplo: se o arquivo extraído (choregraphe-suite-2.8.6.23-linux64
) está em "/meu/diretorio", execute o Choregraphe com:
"/meu/diretorio/choregraphe-suite-2.8.6.23-linux64/bin/choregraphe_launcher"
+
++IMPORTANTE: lembre-se de alterar o caminho no código acima de acordo com o local de extração do tar.gz dos binários baixados!
+
Selecionando o robô virtual NAO
+Connect to...
).Select
.Edit
e em Preferences
.NAO H25 (V6)
e clique em OK
. Na janela que se abre, confirme.CASO TENHA ERRO DE DESCONEXÃO DO ROBÔ
+Preferences
.Connect to...
.++ +Nota: +Você pode ter problemas com aceleração gráfica se não tiver com os drivers apropriados. Nesse caso, utilize: +
+./choregraphe --no-ogre
Os robôs NAO utilizam diversos programas para configuração, programação e manutenção. Porém, esses programas são compatíveis com diferentes versões do sistema Linux.
+Para que não seja necessário utilizar muitas máquinas, utilizaremos apenas uma máquina com diversas máquinas virtuais (VMs) disponíveis para rodar no sistema com o gerenciador Virt Manager (cada máquina virtual com um sistema operacional diferente, para que sejam acessados os diversos programas em uma mesma máquina física).
+Para ilustrar a diferença dos sistemas operacionais necessários na operação dos NAOs, observe a tabela abaixo, onde são mostrados programas comuns usados na programação dos NAO v6.
+Programa | +Sistema Compatível | +
---|---|
Robot Settings 2.8.6 | +Ubuntu 16.04 | +
Choregraphe 2.8.6 | +Ubuntu 16.04 | +
NAOqi SDK 2.8.6 (Python) | +Ubuntu 16.04 | +
NAOqi SDK 2.8.5 (C++) | +Ubuntu 16.04 | +
ROS1 | +Ubuntu 20.04 | +
ROS2 | +Ubuntu 22.04 | +
++O NAO v4 utiliza diferentes versões desses programas, com sistemas operacionais também diferentes, em alguns casos. Para mais informações, consulte o Developer Center da Aldebaran Robotics.
+
O Virt Manager é o programa no qual as VMs estarão acessíveis, tornando possível criar, excluir e modificar VMs. Além disso, o Virt Manager permite o compartilhamento de portas USB entre máquina real e virtual e a criação de snapshots (pontos de controle), que funcionam como um recurso de back-up caso estejamos testando diferentes funcionalidades que podem corromper o sistema das VMs.
+Para verificar a compatibilidade, pode-se executar o comando kvm-ok
do pacote cpu-checker
como superuser.
sudo apt update
+sudo apt install cpu-checker
+sudo kvm-ok
+
sudo apt update
+sudo apt install qemu-system-x86
+sudo apt install qemu-system-gui
+sudo apt install qemu-utils
+sudo apt install qemu-block-extra
+sudo apt install ovmf
+sudo apt install libguestfs-tools
+sudo apt install virt-manager
+
sudo systemctl start libvirtd
+sudo systemctl enable libvirtd
+
++Obs.: necessário reiniciar o sistema após esse passo.
+
Navegar
e procure a opção Navegar localmente
Sim
Concluir
para criar a VM++A presente seção do tutorial se refere à uma instalação genérica de sistemas Ubuntu Linux. Caso seja necessário, consulte um guia de instalação da sua versão.
+
Com a VM iniciada, realize a instalação do Ubuntu normalmente:
+Instalar o Ubuntu
Instalar agora
e em seguida em Continuar
Continuar
e aguarde até o fim da instalaçãoReiniciar agora
++Obs.: após o reinício pós-instalação, é comum as VMs travarem. Se for o caso, no menu superior do Virt Manager há um botão vermelho com uma seta ao lado. Clique na seta e selecione "Forçar desligamento". Confirme e depois reinicie a VM no botão de start.
+
Snapshots são pontos de controle da máquina virtual. Para exemplificar, imagine o seguinte exemplo: você precisa instalar um programa instável, e ele pode corromper seu sistema. Para impedir isso, você cria um snapshot antes de instalar o programa. Se, durante a instalação do programa, ocorrer algum problema com seu sistema, você pode acessar o snapshot para voltar ao estado da máquina correspondente ao momento em que você criou o snapshot (antes de instalar o programa) e tomar as medidas necessárias.
+Para criar os snapshots, siga os passos abaixo:
+Concluir
para finalizar a criação do snapshotPara acessar os snapshots criados, siga os passos abaixo:
+Sim
para confirmar e retornar ao snapshot selecionadoÉ possível utilizar as portas físicas da sua máquina em uma máquina virtual. Exemplificando, posso conectar uma Raspberry Pi no meu sistema físico e utilizá-lo na máquina virtual com o Virt Manager.
+Para isso, siga os passos a seguir:
+Máquina Virtual
Redirecionar dispositivo USB
e selecione o dispositivo inseridoO NAO Flasher é uma ferramenta que permite a realização de updates no sistema do NAO v4 e do NAO v6, além do reset de fábrica e outras possibilidades.
+++Recomendação: usar no Linux Ubuntu 16.04 (Xenial Xerus).
+
Acesse o site da Aldebaran Robotics.
+Desça até o menu "NAO Flasher", e clique nele.
+Na aba "LINUX", clique no botão NAO Flasher 2.1.0 - Setup
.
O download do NAO Flasher será iniciado.
+O NAO Flasher baixado no site da Aldebaran Robotics vem em formato de binários, ou seja, não é necessária uma instalação usando um setup. Em outras palavras, basta executar o executável do NAO Flasher, através dos seguintes passos:
+Vá até a pasta onde o arquivo foi baixado.
+Clique sobre o arquivo tar.gz com o botão direito e selecione Extrair aqui
.
Abra a pasta instalada, e dentro dela acesse a pasta bin
, que deve conter um arquivo "Flasher".
Clique sobre o arquivo "Flasher" com o botão direito e selecione Propriedades
. Na aba Permissões
, marque a caixa Permitir execução do arquivo como um programa
.
Para executar o arquivo, clique com o botão direito na pasta bin
e selecione Abrir no terminal
. Em seguida, digite o seguinte código:
sudo ./flasher
+
++ +Caso abra a interface do NAO Flasher, a instalação foi concluída com sucesso.
+
Este é um guia de apresentação de conceitos-chave do framework NAOqi, conhecimento necessário para o início na programação dos robôs da Aldebaran Robotics.
+ +NAOqi: principal software usado no robô para controlá-lo.
+NAOqi Framework: é um framework que funciona como um broker (intermediário). Isso significa que ele interliga diversos módulos. Suponha que você precise programar uma ação específica fora das ações comuns de fábrica do robô. Para isso, o NAOqi utiliza um sistema que resgata os módulos disponíveis (inclusive módulos criados por você, que contenha as funções específicas que você precisa) e os disponibiliza em sua aplicação.
+Multiplataforma: disponível no Windows, Linux e MacOS
+Linguagens aceitas:
+Métodos ou funções: conjunto de instruções a serem realizadas.
+Módulo: conjunto de métodos, funciona como uma classe.
+Biblioteca: conjunto de módulos.
+Proxy: ao criar um proxy de determinado módulo, é possível acessar os métodos desse módulo através do proxy. Funciona como um objeto de uma classe.
+NAOqi Broker: é um intermediador dos módulos. Por exemplo: o módulo A, em um de seus métodos, precisa de um método do módulo B. O broker "avisa" o módulo A da existência do módulo B, possibilitando o acesso desejado.
+Autoload.ini: arquivo localizado no SO do robô, responsável por carregar as bibliotecas quando o robô é iniciado.
+ +Módulos locais: Estão em um mesmo ambiente (processo), e portanto podem compartilhar variáveis e métodos com outros módulos locais. Além disso, apenas um broker é necessário para a conexão entre módulos locais, não precisando de internet para tal conexão. É bem mais rápido que a conexão remota entre módulos.
+Módulos remotos: módulos que utilizam seu broker para se comunicar com outro broker que possui outros módulos. Utilizam a internet para se comunicarem (um broker precisa saber a porta e o IP do outro broker para trocarem informações). Possui velocidade menor em comparação com módulos locais.
+Conexão entre módulos remotos: imagine dois módulos remotos, A e B. A conexão entre eles pode ser broker x broker ou proxy x broker (objeto de A acessa B mas B não acessa A).
+Conexão broker x broker: nesse tipo de conexão, A acessa B e B acessa A. Ou seja, trata-se de uma comunicação recíproca. Para conectar módulos dessa maneira, basta especificar o IP e a Port (usando –pip e –pport na inicialização do módulo). Então, pode-se criar o proxy (objeto do módulo) com AL::ALProxy proxy = AL::ALProxy(nome_módulo)
(em C++) para acessar os métodos desse módulo. Como o IP e a Port já foram especificados com –pip e –pport, não é necessário informar esses na criação do proxy.
Conexão proxy x broker: nesse tipo de conexão, A acessa B, mas B não tem acesso a A. Um módulo (classe) pode se comunicar com outro módulo através da instanciação de seu proxy (objeto). Suponha que o broker de A (que possui o módulo A) se conecta com o broker de B (que "avisa" sobre a existência de B). O proxy de A consegue utilizar os métodos de B através do broker de B, mas os módulos registrados nesse broker (B) NÃO possuem acesso ao módulo (A) que possui esse proxy. Sendo assim, trata-se de uma comunicação de acesso unilateral.
+Criar um nome, usar um IP e uma porta.
+Os passos estão exemplificados aqui:
+// Um broker precisa de um nome, um IP e uma porta para "escutar":
+const std::string nomeBroker = "mybroker";
+
+// IP do NAOqi
+const std::string pip = "127.0.0.1"; // local NAOqi
+
+// Porta do NAOqi
+int pport = 9559;
+
+// Crie o seu próprio broker
+boost::shared_ptr<AL::ALBroker> broker = AL::ALBroker::createBroker(nomeBroker, "0.0.0.0", 54000, pip, pport);
+AL::ALProxy proxy = AL::ALProxy(broker, <nome_do_modulo>);
+
Chamadas bloqueadoras e não bloqueadoras
+Para chamar um método de um módulo, o NAOqi possibilita dois protocolos de chamadas:
+Bloqueadoras: chamada normal de um método. Instancia-se o objeto da classe e o utiliza usando a estrutura: modulo.metodo()
. Esse funcionamento é exatamente igual às chamadas normais de um método de uma classe.
Não bloqueadoras: serve para chamar um método e, ao mesmo tempo, executar outras ações. Por exemplo: fazer o robô andar e falar ao mesmo tempo. Para isso, utiliza-se um “post object” de um proxy. Isso cria um processo que será executado paralelamente à outras atividades. Toda chamada que usa esse post object gera um TaskID, que pode ser usado para verificar se a tarefa está sendo ou já foi executada. Para criar uma chamada não bloqueadora, use a seguinte estrutura: modulo.post.metodo()
.
ALMemory
+Essa ferramenta é a memória do robô.
+Todos os módulos podem ler (resgatar informações) ou escrever (registrar/alterar informações) na memória do robô. O ALMemory é um array de ALValues (valores do módulo ALValues podem ser de todos os tipos tradicionais encontrados na programação).
+Para evitar problemas de acesso concorrente à memória (ações divergentes ao mesmo tempo no mesmo local da memória), eles utilizam critical sections de leitura/escrita para proteger o acesso, ou seja, os threads permitem a execução de apenas um processo por vez, enquanto os outros ficam suspensos até que o processo atual termine. Isso protege os dados.
+Para que fique mais claro:
+Suponha que existam dois métodos no mesmo ambiente, X e Y.
+//Código X:
+
+a = 5
+
//Código Y:
+
+a = 8
+
Se esses códigos forem executados ao mesmo tempo, a execução correta das ações posteriores pode ser prejudicada. Para evitar esse erro nas operações de leitura/escrita em memória, usa-se a critical section.
+ +Guia de instalação do ROS1 em uma máquina nativa ou máquina virtual no Ubuntu 20.04
+Conforme instruções disponibilizadas na ROS wiki.
+Os seguintes passos devem ser realizados no terminal da VM criada.
+sudo apt update
+sudo add-apt-repository restricted
+sudo add-apt-repository universe
+sudo add-apt-repository multiverse
+sudo apt update
+
sudo sh -c 'echo "deb http://packages.ros.org/ros/ubuntu $(lsb_release -sc) main" > /etc/apt/sources.list.d/ros-latest.list'
+
sudo apt install curl
+curl -s https://raw.githubusercontent.com/ros/rosdistro/master/ros.asc | sudo apt-key add -
+
sudo apt update
+
++Instalação completa (tudos os recursos da versão padrão + softwares de visualização 2D/3D e percepção 2D/3D):
+
sudo apt install ros-noetic-desktop-full
+
++Instalação padrão (tudo da versão simples + algumas ferramentas como rqt e rviz):
+
sudo apt install ros-noetic-desktop
+
++Instalação simples (pacotes do ROS, bibliotecas de compilação e comunicação. Sem GUI.)
+
sudo apt install ros-noetic-ros-base
+
sudo apt install ros-noetic-NOME_DO_PACOTE
+
apt search ros-noetic
+
Você deverá 'fontear' esse script em qualquer terminal bash no qual você use o ROS:
+source /opt/ros/noetic/setup.bash
+
Pode ser conveniente fazer isso automaticamente toda vez que iniciar um novo shell para usar o ROS:
+echo "source /opt/ros/noetic/setup.bash" >> ~/.bashrc
+source ~/.bashrc
+
echo "source /opt/ros/noetic/setup.zsh" >> ~/.zshrc
+source ~/.zshrc
+
sudo apt install python3-rosdep python3-rosinstall python3-rosinstall-generator python3-wstool build-essential
+
sudo rosdep init
+rosdep update
+
dpkg -s ros-noetic-ros
+
Com este tutorial, o ROS 1 - Noetic estará instalado em sua máquina.
+ +O Robot Settings 2.8.6 é um programa usado para configurar e gerenciar robôs NAO v6 da Softbank Robotics.
+Entretanto, até o momento da criação desse tutorial, o Robot Settings 2.8.6 é compatível (em distribuições Ubuntu) apenas na versão 16.04 (Xenial Xerus).
+Os seguintes passos devem ser realizados dentro da VM com Ubuntu 16.04 ou em um sistema com Ubuntu 16.04 nativo.
+OK
Pressione CTRL+ALT+T
para abrir o terminal. Execute os comandos abaixo:
cd ~/Downloads
+chmod +x robot-settings-2.8.6.23-linux64-setup.run
+sudo ./robot-settings-2.8.6.23-linux64-setup.run
+
Prosseguindo com a instalação:
+Next
até que apareça o botão Install
Install
, aguarde a instalação e clique em Finish
Com a realização dos passos acima, o Robot Settings estará instalado e operante, podendo ser encontrado no menu de navegação do Ubuntu ou na área de trabalho.
+++ +Cabe ressaltar que, como o Robot Settings não é compatível com o Ubuntu 22.04, deve-se sempre acessá-lo através da máquina virtual (com Ubuntu 16.04) gerenciada pelo Virt Manager, ou por uma máquina com Ubuntu 16.04 nativo para garantir a compatibilidade do sistema.
+
e2;v8FY$j!Q6Z`KZcNJ(Dr z?%e6%jIG7z9IutM$IfQd#NpC&JbM|8xhJ6v3J=o-*THFFPIpl*U7?=v+4lj18&@r4 z@=MEN*}tBG9!;OELlO(qJGDTDy!kO?1*nC00v|})3sAgw%2|UpLG+L#p~sWYX7Su= z>%f8USc5kN63Af(b-m4*mbByE*W%AbIn0-766?_W5)kifz!e+e#F9Z<^OX`SeY0|n zl{s$ukiH@4&X6e3OOvGNVL<}Rwj#;Et0}JLnh 9v?d%}w29tFxm6%fWEgf%L2zmx$?W7BwPUVzjtqEK+&I(f&ezt2 z D9y$vNVWm`ciRNlji1*Kr=teXX) z+tgc3x-N(FK#jMhZ-Lc&3^+%ygM+!vlYWa4L+!QXm|3bq>tjurdj5VjiSCP`b_(c@ zOCou)1%j;jB*PO&QoJWe=M*%ga|;-gJo9tk8;sCQr=m$`2>l~0pJaeP-e$ucWJ5rU z(Cu5>tBjg2_y@W$du9 EIysyA`H^F8ovu9T%VjsMKzFzAl1nke^!J^79UeON= z5+uYkduk)IM`QaR+Hllq-w@(D@V^{;+z`vV@zW&j#5u)5`5wp)114&@|M{P4lEY2M z@RNO{Hf7YmDIe%RzkKaQ5 4WQv2hnM}q zRrA?FC6OFTa0gCruaq8G)|a(Ox8S39cOmteLD?!356vNQX_dg*uV69O(H8JBq{Qnr ztN~Sv%#U&YKTDP)sA1s7c#ilHI||Eek81@nK}7}EyB*@G0^G@pdwbOB3jM0|-rNw# zZ_>fs*y5+%#t0ZWoNRSrT61-jabdFkel-5h7sEF*nih8;@0LF1YVcOLF2ddJrdEdc z@z;{wzMbxuro-4GCg1PvTVZYO0n WnmDkK! z@rzprI(?f9g_YI8^W~4|lkc`MAJ@5D>SEm0@uWl*)sU5Ktxr^@HfP8QjpR-RKMFRR zGM#+ u~;+at-?<*@k+&GMi%N+J^_i;|q;HXVK+g_{{05`~@ zHiP?QQL?#+n634IT@MGoU`};h(>FMQVzpHs&U<@yLGhQWP+X1KCudr8V4JKVYy%5M z%=mh=b3V#45?RpaSgOjc2%mL+2@OTdjjNW5MR*10JMT+ACYN5;w?_6IRi&AJ882Bj zwlg{GT{d2@jtF)i3PKczNvoj3(~_zlSNq4j6A72@Jio>S;wG4la*7|Agg11cBqr;K zii55(Yxq5&^E?RhvyZT_<4eamjB(nGFLocDW(}>nl52GVO{mpJbH56@vKj5fhPRGK z`B=X75^YzS0_y3`!>z7*w6pRBE7@6t0drHnVRqz2P+g2I4M~yz67=R!3i}(Y&Nxe! zJ^k#O*C+QL#;H1*$CH}tl?_!fXIOZP4+#(n1SMMcF!bdY$BdHsn1`i^gYWGMEW_#c z-aHXd;<{%LBpML9HR@khTI4?;FFR|Uf4hvu1wYV;P+(y-3!Odfx^FWQLDXr|BxQ58 z)a`= ~`o?%$d<%lM5x)qAC zO(5w;QHr^FI%0!TBu-oB?J20xHB2B^r)i|qKWimcG%b~ze@odVnrZYZLN)sHV|#@b z$>Nn-Di`6RT0DccqorS_G z)g>l7G>&cCl_`b1vlf>$mXM{>#i+tMO-aeEf$H=RE>zX)Iap`!r?-Xc@h;#n=Q;WH zO;m;6`!vAQ^GaK#cWue{U25OhA$Amb)cI_t `2-S4e|ld)xFh)qAQ0d#)(#PDw+-JfBU+q-HG*pZQI`Er$9@3Jm5J-Ei@8 zz59ArkqA#?T8lXxzlFOkE*~kv7&l~$;%bP84i@Xob-U ~)9dyL;l`X|seGovw4}mc>Tx*=6qKEu^dCRWk+Fk%E{9?Y;!KSYeD9sdV$Zz>rgr z*|^f)+jlej?GHk}ewlQaX)Aaw(Zyo^)it|9v+fkcU{N8MK@c;;AxO}#`MIJrEWzZ{ zY$fGq@kk%hi(SHbrC7@Kbwqt8hSk{3>?n7jcf3nH?KMYT-mNPNb;O|A=;#*f }WVg^IzL(az?A=k=S3SxD$Nt+^f>}BPV0xjdq zjLd^@3&mUr_JV@Vo=+!@N-*&g6(XCgELnod*j)DrUrB1~MPxhR=>uDpl#YZl(WaEp zQ fDlVeXp--E#p7k1Hx=FZc#mCA@jPMEf{OltRy-3G7eTS?Q8wJ#rsmM;`Ko zV>*0B>(!ytXTOujhxf^x>UAl?KOA5gml%ah23admH5qAoT9?g2#H@wYy&c L(7 zFeqzx3^kl+#%L`g5MBXEs_~1_Fv%Tc0*%WDt9@j%>eADaCpEg~#j;4}OVZDWPTgpy zPgtJBsMp3eVoAFB*A &!rN?o}6&a}v0`P#5eK}EU! z?EI5$BvbgCBh{FD;;T|S&C }BBZZh!Z?AyWq;g%KwrO7L7IccvDVgWN=kRE5S zzdmazIxP*|s56)&K;#=+J(7FbZhQDlOOm}BY21fube6s-+6e`2>eaVA5bX?hNl~=# z)p`G>{xu#~83?QL*x_0IGV<=QW {c2g zfQLsyd3P~hWKp18ce8Pm6!F}XA>G1Sq)afVK8^YE+c$-e-A%(KvXc=ph_+S5$Z_3` zutW9EY~@o>1RHz|+y+?spxij7y|2(1WrO7DflRq>)U|Kx;ga*eMtXjE;%Kilbgogj zSlU5PoI{0ns3KgZB8c@C*S%@G7rQXKeKU3o#oax(=mjPlpn(TkJD$v`obbh0XP_s9 zRADY#gwtuAiZDxK$$Y)eghWrxObxRP_`LVZ#hnAmm;h#qbK)Wk_fnJdx)=s(&FunK zU%ozyJLi5===mvV>DCaB>#-0_p;fRVyqG4@&Bz|QO^dKKdK86Z*}EQc7;@O`*0wty z*(`qNefQzY;=XC$n^RB pXAFVXP?-Xfq z=q+N)6a6|e&>K2u${zLl+uDEO|0i3(M_z=GAcSo(*1qz3$O^3Up)BUU_3crOIievf z9^`t+YElG3W|>)j;FbFa6UUobm(DUBsb;?^Dvui84xHbpDelp^U)aPTHq`&vVXGPP zq;teY?L@&MIb@gg_OC(JKR*ivULZK| cKBt zetTI|+m}kN4dhIf$Prxi?ER!7Lp2vS{qNc}qsiYMjW>01TZnKZvq$GaF1rBbZ1+cn z=5YplkxR*0%h7IwK??0;q}qteG!-@9cPs9} X|*b{+}D zxV2-KvFcxjI?NH1A;Kt~L||jeV&|>o5H`>suiTFlqstXu9eZoO5FLwmmL^OeJ|;%l zi-_a)zEi4Xy4j=eb_ya%n8w2Ai~zq54iHJ2fp|2=i*6x<&A0iLY&%z`LW87jUWTJJ z>Y*`qH#sb_%WBIqh&TfkW$dBU-Yg@YVugKk<)7Z|dki|zTTFw9N*y@-PNqlFdnK=a zwK5 h8mHKaTahk@D=@R(l zfo`^kD;vBTjITryBjwQ!gfHfb%A!VQ*iu8r&eOl;@llo w{#4yq1|-i)ja#FKpb^6RDJjAGZ~FzttFtVG$o+73^F4hg-TdGi*? zBzh$Ac8^LUziK9TTNF+`TV4Mv{=q50LBRBrJio!GLZV;HXg(Jg%dAPrv9_0T_n`?^ znS;b5jb4)HFI0p{ZcnOwDyc4bsc7wVp@Y(gqMY_j24TDugSCQ6+=W*$(U)In7c^6< zXr294H-COYQhMLJgqrNnl(#K8!_iyHnOK+gIlF@nHwIyY;8=^~kfW5cp9}o@&YqrR zR;ps05>a6_P8DONl1oUGOFPR- Fc@4P|2 zi64ivqrW^=((qeIM_lYn3ke-aOJP&F+xFSMP3?#x 5ToOOM3?p%Q5B)9Hd0bgTvP{(?HB;c`Lz2cx0;m!46O zWekl}+<6c}B@3E8^ZY@`86VKv4eNDo+Ov W>U^mu1er;5rXb Cad7eU5Aj(Hj4X|3EZKSxOgwvjq+s9xtw{VG0|+Pa=a? zz;p_F#{Lq1Zm@qzEqhC*;FZqTT~Uab)ZlK{dCOI= L-8whekLU-BjhDdQc8S>Hd;{y(V$&&3y(wEvz$n`-@RO$h z<_d(YfKiKF#~Fv3e0qXOryxehQ&0sw#z|mDWD|KYf~o>2RE7KU=Ze0)L*AofPeCk; z&Cq?43Lu8Bq<75;e&G}}7l+Qk*1H-U-N;TM!B`w6C!v^U4W3tk1NKfq7nOl6MasuQ z$~xweX2-Xs-{P|2I{AuH&yHkHe7zRiByBqNVtDhlShFI@^W%--%knLJev?Tp){0X@ zz8sz&Gv&M4qvg5G;R74EO^H#`Y)FY3EANj(lSJOE<5G!M3Qim^vJOWHSTr6qUvk?U zvG;h2D0+nuqTE<7mF~9Fi10c|6IUV(++8QT+(B}0@M?uyuui}6{41ii7^ct-kt4OI z6%E$4g|e9*)E~^#n`~HRN{SxlCu%bLc*JLn4RIW6jlCGBsgJ#zhPNu7q^weID12hA zSf8+MB^q(!F%Dm9)EB>z7LdVNHJRzFKjUp4;dvGHb>%*NgORRZUq5^*-w2^HzIB z9{MSpCDFxV57vgR2v^1{D1nlQ866TuV;C@nz0hk*mOfCA30{GHmT*8iG<&!D_G51K zpPPXekxG2IoFBJ&Z~dSJer||imgj<}bw9j7(4P*u@!SjdFm4vSZdPgClcJwGExc;e z!Ajd&)HC8e1m1=&8| wGj2rnz360)$(NV|R1tRa0(rRa~7|Qz< fRk^glHLwJ&6f?^GN9CqbP@x^2y8C?rk0Ghs#*9K90?YLfg$9EejU~9k#E&bXaog zO3X1BuKOa%=y^x*?Xlc2+_f}slU>&sm1nSTq+^Cg*zLbeSFz#ob3NGKKNzh@o3`}O zE;d87_s!8qE<}5g%c0@NQYA@wGJp|xzw{HIaIkIe0lVzn6rl#ov-rc=zOw$4H18|W zz+E?SK4UwsQ2{ZVUfo3!`g_gtj5)VIt^0TkMPPf|ZELAFu^mMsAr}QFH`f@vP$ktm z`_K7G>#B+J4lYM?B*nVwO(-rx!xS5P!nD mCwP?*08Qj5SPZ@?<+di z`H0|DA73E58;3uOr`ZdpsbPDBktlpdT3$V1`^>_|Z=E ~vW zD87uBmrD&`Hi&AWw)jRI=HW}Fgqzy8uXY{SJ4K+WSF&DN8aY%&g^wQkg_=Jc6qT>F zP^KA8r8$ZS$O(^u7_vM{4^>#9zTK>VA@!K_!&s)G6B ZLSI!m_UyZha$&lwwF3Hy=NqH! Nc4i8wZwN z` ^7h5zfHZK;=C}<8Zw@@K`l{ZE$f46a*=#15FpBLG4cGy z>e#ywo`Z+t#xvwCb{8$;d1|+?!P9Tj;s-v_8Sp-hk;m6%x2a?D>mMM;_3n0!^=9@{ zL_LkMv5LOS#5YPPO>!~f1ARQ-P-KMr0ua0mfu65|&+PYAUEOy#RxbBtQTgz(dP45u zeZq9nEy$ND51Z^^7#2%Tq1Wh|o!Yt|JPm~i4v0S{`^rFgwQ~9K4Pg(FdRE(`cP+1M z%pz)5+o2ZF3$WNmZwiGfK7y}{aQ1~gGX1ag_# pgdkL#KAS#D~VgWYD>Im;tt4 zqxR^U^#a#OHukP3d~cQp`+RSAvoYe3HJ%1gTXh6BSo?raJHC&E=s*-wS {QWK? AQg25sAGT?8>MG_oqzviBT7DM3&pHqITMm>b>sG4hD>dSEqw%HEY z&|-WFs*wTzUQdpS+`uxNoy>gfFB>k2P&|C#BsmZNy*YBfRg+DrvgdBl=J)mha`Iby zB!92wQF26fFIJ8IUr2Yh<(ar3W5Saj)gGYTTm}ALj)N$1>e7-!23Wp(i2iY;_S?$w z!KCxa4GEulPUui87KL?g^FkgSLMNb|Zw+t^&{2EhnV5UPeE<37pG61ZyP12_4$Cn% zVzqOUa6dr{wsC#pVteQpX~EgLy4F@iHDqe_1G|Ll4CY9!mtRGH6|l%su1R;QMQ(O@ z5y-A(F+8$Ooun?}B0<9qN=vrPK8>VhH!y1O-b@y1of7pSr#;f_E~U#o2&^?5RUCJ0 zAicdH_UNIa&fd+uFgCSwqH|Xa>~A5?qpPRxp!E=zT&dQiPB+{7n4C#iuF2O+1c}Us zw^ZviPq0*?%-2c w=;&73dI$Vu3i^8rKYijTD$7fwnSnHXw z_VOMz2 #H`Do7=4|Ws zTkASJz-vwi;yQc4uEddnc`&(uCb}z)1a--0CGIf6RjhOD6jYb5exJwRs%=EeTRP 8WxTU`HlDF<_VSRUUDP{B}U^%ce3q3&8?#4h~oV)^7ed%4N zAbnu@x1=C**C8rzaxd|n@|!)xi%Gh53{7T9SgKYUHY?;@2Qvkw$R*ITcKXM&%$Ml* z=_SLC<*WrqUMb9Y5%g=-5D8|X DFiu9Xf?2Q+vggmA+vp{_%t5>UDa_0!ASD)zO!V^(qMDK=dyXnz!Yd!r<7 z35xnXQUAkJkk#;-@Ix&{0`DmhnVc>Psj>|Rf=ghl_=_m@iAozh&4W^v3dQ}fCWbZI zQaq=~qoFDcA7ANOb@t&Q+f4x+YIr#i^WL`^SWGBzz@1T_VmafyeCyz3&e_niFX?X9 zeD!<%WM7rgB8mAL79C4C$xU%RL=$t=!ZnBuIsW{UX&UHlw oVxzfZ;q7!b zbNVeOX4>@FcJR79EzTkF=*cH-yR`_?=Uu~J`eKnvqpEhx6=hrjPr;O2n2Q3nek`S; z=e8B-^TCBC`5 NAwH?O(bQy(v7E3ebUu4kcs5R!__L zMrp=~ 7vR-i^L(;vDLfVD04-v2OM6 IKL8G4 zWC-T+ETnzis!hzp@}~aH7eSLZ^@x3`g0UC7iron7i;K(9l}TZC*0MwQbUHUV2XDk3 zOqQb3l<@=h3*Qai&~H$i{xW&TgSC-7Y=Rl39Qwpr@r11IMY@OwoR|56&!hY?9bpiv z#mhPi-Gzc`Y+X;v_`2*)?;7TD36^*5Df=UO%Cjjf5wG^JSM)zPJ~65+eZ9EW>fF>! z(pn_abxkea4Joy3AcRpuBWFZBU4;TMV0vnVjq?-ZHw{rrH!DlH@$1#`0|*%k6Yg74 zPKO{mh@UE0-FX;Sbm!?Qs7NljXk0_sQ*nA!cv_f?(xDx%QrV$8VjGcKq<4Q*yZ7cE zgpkY9^+LyG3cun2H-<1zLsX$M%0E0a9p2!YsiQxsfMfCeniHMvl6{uw;!w4h^cMHx zv{1k{d>+vFB^%9mhMBiRt?F4YB@7laG77-55GIGcXh%4{OyY7a=gXZ)(R^Y(cS78( zgg(E1&F5&pDarTK34x-o^Yg47!!$;4*(mVO+pU9{olK_8nGtu7%+>li_& )>?PKTK#kY`Bo#$YC}c)(qJrqo-g3n761HaBk@~$uv-!{DRp9P zl)p<}E7T3w{)#ASs~tCTSChm8%x3rNNq^xp#P^cMiqD^doKHdQ3)boV(AiFd1Lf^J zvl?>=^o+wysTAPW_Hq0VixLx9rP6z?t@Ofl9ezuR^;d&EMbG`uEva4fxzFoGYTctr zRHmTdO!u_^P>^dF*+Ri%QEWp&Gz)Ryh90q3a1nTS^6IR-9ETOEm6VkR`@Pq>)ub5y zWeo>+2v>5Z=4EpAjYZnvYzVWa{*!HZIIvS@&mf5Uh{c_w*}p8GkLFmh!k7NK;JOBO zd3RlP2~6&yBsTS7(l5QNz~=6wbeR|iOk8CY@6*NFH1{y7&ip+p;l8C0t^47Fk~;Y( z@AsB+IMbqaJ_V}Ds#-Bwo_iuPULN9`k zp`XI(@#)Csqp|bC>FNr{@X+`9~ z3&N+LM?!f57*;)+q2$F%22&k@&uunt#;TNtObEV~Go;{|6~3adj-* H9>cm^gbHVE8**Cg7}99CZqdn?(tQHOty%#|JRJZX~78Vv8BxEu;7<61q? zZs|1Dar=;Laan?*pFZN=RD`O5oXUNX7>fZHO}&<^R 8Od^? zxQerve?4wS?y+!}uDN7#b>Ix#Zx)60+bA-Bqtn)G>idxQg3NN{lC0dUo+%ZT!(LXu z`sGnW(E{7W))DyH-mGvQBl)@#@5I383!=L6(h&!@Lr=&cBa%Fx97SkN!(p zwaK-+Z>}vPhOH1n{(IJ19Ih8B;$;I&7@vP+I+41xOErN3qZK~F9 oyDb=G;l!Qcws( zR7T^p$JRRo0<=l}ldOCe4#y_0_N$fD>_n~g5~A;R*&%n|##lv#z8`(~K}+zxc l37jvKp z >_l~ty}w>EsUhSyHN7#nB?L6;mOm(D#nk7&xB <&E#8r%IZxlu2M0fZy$Jl|LTwSD2T!XOQ01&=so`% K5+}kL6=oY4tUi;p`L(6&rhG>EMTF)}57v~aeT$Xrv3lG&v z9>ar+Q-H(%739o>>WkYN1Q%|G?AhEUMBOj9 wbL+b3e+sg|7ZzS4LS!%HY#sV*lWwni&xC0K2d84E{cBRT;*kw>Cv{OXUuks8 za3pmr-}-U7N4)WiGr8DT8aav~Mf)Y{-K(KTkydfb+nbbDy&n6tUWRj` KVSL9%i%sr1?*9A9My+ygf_Reyqj-z(46Esy>)5WHm65&9+-b4V zN0Pk@S~i@DY?`brDIgeY+ >3URUogzIOsB-lhRsBVKk~)-+^KBD z7e0(g`It*>t*5sC?kTt=X2WwJ$GfYBX}~#XV-q9Ca1gBhfW;#-)#CXrM%)-q9pM!a za&-etx_dd{9E@3^2Qe3*_+GwE?6$&f*NgQ`jM$jo9xWrDJ%{si@eMHw3R>|VsLFcx zgzzd>yEKa-!NHwtBb^KL!zwSCLp`$`9qV@2^#SAK-0)0KpK5pQ=I$iMs-`%(sByu? zerw;pIFPv4w?LeHYO}ufJPgwEa+NM^KUShZn#I&+J~H7ZHy~7d2v1=5K+}wQaDw>3 zbtflRK(m44D}OQY5R^PSSU4hI)uD<=^g68ZI~r{EN>|6OUhGZ!?oRLdSGv>xYRvqv z=KaqcYyUj<{x{NeBZQOhm!P>%G$eoR;{CUp$2rP(1M9vmWbgF<73&cn;mEk!jf8pK zj-TV$UlwcW?~7|J0Y$dRehOpX`0ZrS?`MSmJ8zH9gs`RlK~8_4N6S}!kEWWyk=}v# zX=Y4EfHRXhKcAWWE#&i8VW59m-sO#iG)kdy=w0Q @%b@e3{d~;ZXf{N&yj5(fudi`j~p-D&5m90U _4cE^I*(R^3;9F zi_CkJ&E=L`#=Mfca~QI_PNUVgS7}gW8LKiT*S$WKxy!T-r8_i3Sd8Rugn7ogJFlN> zA9FTbl5<$se+psEP|<%K+5&^sK0ithnHMLTy=*|KO?BmQzmaY`fqTRz*GIr9C86ip zto<;Bl_>YVh)nY^u-ex8er%hn8|Ze_RDvpIHU9Tth5n!%#&yYg+WWd55ZhSkocgna z`rn;Ss#!i#`DQ?*?&H1!LZ$|+$H>FJ8wcRkIlveOLMW!5`0yFU{_PADH_*bXw?o+T z(!6ZaA9c8Su{YaY*f6)-Y2D8X)&20Yx7={tSk{e}ovqbO800aOfR3FBkIfL1PLp-H zgv1{xX@X7}G@~6h^<8HZ==EVyX1*5&M~o6)pLc`1?j1RUa~<|}Vd8JK?v{?Z^fm59 zj;w$$iYvHW;T~(Y2uzl~kT6hSEsUORN}XFdfCd0VK?P(eoGeuRl}dMJGZ6IoPn03+ zo2E 4e zd!)o6ooumpxsrB~0T|6xbTD+r!0C94w_9HDb8R5} xgHU| z^2e*yDbux0 wfs`E2P}V9Ey8>>*CTtSt{L ziV{g}ex1<4w~lwb2={VBj_+lk46>$4Pe}og$yR^Zp7YBeL1_N&RIIT1+1t3_G#Spy z2yq4q!3deuH2IJ=b~ks* 8 K+#T++e{-1r z<(|nutn>cDHu>{+{0?T7@?IBOuAJ0iagK6j;}!D!WdlXDlct|uPi`@ZEw%b#Yz6mJ z<`LbYW3}{@cR}}xkoKM2 ymcaLqj=N-;G4*?+X%VH03 z`4;}~apA@6-#t0Sk-#yNqu+M!75?SUy`PqN|C{ro|9FS-Kg97*MKBSB==_=2g92uK zxnS(IeOo!gU>17nBeGi xd2!QX=2|5@4tP;<$SJx74z8f?3ABUa ^^jYG)_M=+>+k!2u(U7Ff bJDWImP)*#<(UFLNR`On@6kU+g2+z%sPk=@5|Qu+I|wR3VEOP^IzbG2CG94 z20$>b##%z9StTQDwmg~t#ol{IHQA@@!a>lWfD{EpN>D&lK$PAiDqRGmNml`B(t8bp zg3^nC(tC$U?}Q$Dm(Y7}Ce#2)Jdf|}nR%T(XYYOXTJwGDoVEXe@Oud4sdv4u>&}0C zF=q9_58?<=ha4v~tvC(|y||2q2XcN-c%hVb<>tww>1@~g%&rjKEuZsx$TYVrdKlW_ zdC@lvKbRC%AX?neOB+5SbhZKXA29XxBugldL2z%SR+*9EW2?7yt6y7gE|W*^x `$`ot?+WOoQM)`pZ!&Z0*;A zgkEdiSC|whPp)8grJp5Ao?6tGqT5#pvycw+a(KmB^48-61vcoY!L@ac633G!LsyYA z-fVqiPfO<}FMp-juBy=-TNcPc7((U+g|yZPRtO{B8gS22&W1Lc#UQf9%qrY8y&d7L zwzg=vT0pn0)Uf3BCjt8Y4J7PbCeEGh?rTl96y~)9A9!s94fuw4O&UzJ rBJ_jx`&?;QAd<(k$$T4{Qy3{KoYXP7 z{OVzyFImXo`98A+*T8K8WT3Fc)@MBS-0~Y$ZJ#C&<7}&zt<9expvl|?sRKYRK+9|B zb$#o6PHPXdN58U_K}erv>9zT)u1m|#Z;)!qpd-;#N=SNR^0x}C^P=RlGwIS1fz{ed za(3z|_b2l^uZuyPB&Vp4UMlEt+zkS|P^7qmDWCh;?wqHM{9W&6NarBSjY_$k(*^z6}0;`5?isL0;aCPRYWw6iF)JT{S zvmV1G;OULxZlz;At&VO!P(Ho0hP3gtOCJlbB`%R96205>us0GL{73swq&G`aW2JI! zeeXuI@EwLz(Mi}Ns|yugfHn@>GoadT6an-iUzfCT4M%x@itRlO0BqPh&tz2~<@No4 zqFj`0fSKKhRvs<_&%|m2fP^Lx _4={UMr zu6SL2-e*~Mw(BkxCF%y^E+%|pUpm6APP48yoFco!8Vw83dQG`Z8@TlF^7lqkrJN1z zxEw=;^X0rk1ErC5meC O~GWJ>8#{X%0CC8d-_lhCk~^AkWp|c6NaWj5he`%GgDr@ zW-g*zr>H2eS7>g-E8nfNhmVtlj_pFP?LH9c(3V89F`u5k@s-$YNLkQs^(Jd)xndxv zE(|m0mw?rNzB_Ns^b%#ChP~1 3CTO zP#_--qBYtb7+K?WbE#YC4~5JHV#trDVlp{_VQYpV4-qxB@tM!xE4$_tx&_DMu|NHtZ2yNnX zAJd;3SGbj %Lhpgs8-kOhVfM+A2hToW~FVeGLW)g zIXpN_rTlUmu8AE%6Hu*EvIXe{ayioqD+(81KQy`ngX&l=Ptffs9cF>&)Apvm`u- z>GR7JiexU;@0EY(eL<9S+()F(gJQ0!#5zYs+|A!9Qg+yy&WnkB=?5yqTvu~796i?2 z+PXz!d28~1@lTMmiI;7}>5`+6WQo2O0^Qnvp~I>`<(iR^ku`fOo5X7sO|UyM^%`>6 zSK>mDV*y)?^WAPc>1(Vb=AiW789hWAF)uYD 9hY@$tF0m#C<0_;Z?_!QM0 za{yF)pv%vPpj#c3c)E&tvpk3P#Okbc!F7P>75(v71o$sS5_tW i$ zAT%sgD1h?XMa &6}&e`v@tZ_BcoOdhZ+d2hB`v&Piy>=8e8 zIg_y!rEa(^rav#!t@f- 38p zb0s*9jbjEu^8gS8D+&*T?LGYg+scHVUPrxmTSJQFg!H8xWxAB`6z>GT4M~mdP?$yz zYQ+T+Zf_ZK4z3KtcbwLDmhUP(W(+)$XNy{PIY_0n#p>D96`|`?f+m_wt30)Tf?jpV zLDO(nVOZ(~9 KUGbraUA2vhHKNFC6Xi RFl;yOVBl>%*<{AF{`%*qjxwm{2uJ)?&;ZF?V$=_TlXAF!oD03%nM`9ay93C9 znDm*fcdfSInXp(2spSJd;iCNqEFA*KJ;Bu!bVdCW0z-;SEnS>yA4%*Fdp^-G1%8x$ z)#SczOW(F$_>f@&3KqyF?g`|CWTswx730eOWg~)AltIFO)>qQ%30k&{vZJo(&EjZw zY}FP0!m|J-vC6> 7TBNSHWW;2$oL_!U!k*y+mTOPkV6@$-2nF)Ofx9Baa}K;A@)Mkj2?up?5)DYuqw z6W6+p4@BCQky2>bf-Tb1??p8<+9zf?ZjSbFYL22SUCAPwOuO>zj&qpunafVU>ypS( zv2jcC?eAVZJ~juQ;XH}wql6fvq}N+d53dq!LCGW-iZ&oLhhz 5JTJJPLkNaWQ3!E{nZ4Oh{7Rp9mehzUjV2qM% z;t3xRT-6Od?9cKRT*3X2?Cq;nU|KFoz38OO=WV7{F;dt~792;Nz5gzH(`v+thifq< zus&4$sh`_Ux^W3VS$kJkm*{+yRj)v(?2^Lh4t)CyM_=71HV$b}xUpdZ7zw3fmo^=W$s6+un6Hl{P5YW5R!+@}8ozQN`93dM{Qf}~azsoj$E v9K@AGh7$Asq|e(MO*T{m1t$A59hom#fLxF?{&HKUc5cU*c@DvIVV+ ze$1Sl8ICEhl2{s(1<*G>IpNPQ37G0yQq8=7y}TVRhR>7Gq{teJ&ax=uj?d=~y$QcX zbtbfi&+vbTJ!V)qsI0Xj)l=2bOGk(prVwgldzy61uXD2qVjg#K5VGua*y4WNe)&Rv zcE|tSxH0OJ)sCHNsF-4+!M2A$lv*heAlCN%mgF})J_6iU Lc5KN;)+I{pdTvHgZ~vZ8-02g|-mw7ISmxDMGbGH_tD zJ&!eO_o&F5;u&ce7wO<|)&wdr-ur+NhbJAvm^R~cf(vnS+%6?XliTAZT%?`PpOJE_ zh_dbvmje()s2)ZuWYQEzM>SPe7-GEyBs>ot+KeR*wr>+p;J5%{mNaymR+!*-*iYz- z8>|d0cwuvHQT&~#;fl_qwSDyyRI =Pvf+%%Uf2 zB#CuL1t=87@wXO=cGW{$BU-Cj(Q+lJlqP}A@sl_QYxzkfe8N$7-I+Gp`tCFSt&}*( zFx+S8`e(YM$@67YBV-v48qTB{kUVIXgV|Et$HsxOZ84*S5cdSge#hp1lBW&=b$EyO z&?=z1#)pgr#OzD#EBOKBt%MO)s=;vj^6ofA+)6eHd-0iy#8<46NGjDHt7Y5FOSvh< zjDBBvT7Qe|({8doHEYcC{0xyFd(no_1>0cVpP;~lj|VGZ!+WIKZ*MKUDCITnWMlOl zDIW-tx?NgbA2ZqiV~6jekiKmD>!uDWE^>0?Fb}glQP2i~LJZyxzj}j}pQi&{%&9ww zZJ!S{YfBayE*6+l=SgUaP`Woy@ }@%>AoqrCzic* z{*Wos-(cn^sAGUef4rQkIcKuF$6rFN pWuw;C z9MLMVRu-Wx_|EU=0=l++p4-pethYqHXeb>+RJ=8_vKqP(V<;sQ^-NB(h7DZdApl|W zdJ@~rUOK|@ncO{FnBkaJ2+FMrc0YS!*b4T0S>eLs-8Z~#h*ed91`=c730B7KENr7V zm0Wz)i)wzw3!|z+nO5r=6~=>L6q&sv+>1}g>0+g!{>J>n%_+sMvh$AP%hbso`M4V+ zhkg7lvJjf`IZNTon8IOOlW;QMXDW6`3><{kZew @v_jMA%Rw+?v1XwLBU>VwcVSkqE16G>_MSYR z>+bJi=^tS#JO_6J(Abat1c2D@!`3U{Uo?PLG>t;jxyJlq9-sEi30>F#DGl%0%0oiT zyjhV$J5zO0qz#Zne--ijm)F{oyex)7ci&ykxU{Ord4d5bD^noC6W%SuU^V?_+VAC+ z$E555nzuJS?z53-%U&-_(^Pi4N3#-T)-?)nYeFT&g#o0ZH9Ps(PMjYw)P%s6R(R {}9Xmy9&d9<@bhZXs9f|rLaeR!C5tZ*T>}DIX40^U?}0@ z!vb4Lde8kjx+V8}r!-txGS4no93TP?+yr>&rc^3dUK@Qa=_%Qq`vivwx8HSYh@VNs zewug@+@8!lQm>h&zadtCQ%?t#yAWB&m)r{-pxsBjcW%(04-CyjuYJ;4L-#HH2wIT7 zn~LU8JGo%gBVo3AX{C|PjrSR5AkcI~5JaOES6M^MLz49Ikon`TBwFr+fBS927=xET zL6rQlSE}lG!eVF5i&?`w-DzH!sIIR&6lR)GdHUT|JgHg`4t0hE`mjeg`H0=((u}sw z>Pd;csR99F?pW(lmbU#lh=SIOdal;~shqM~b}O&`DKuj)@>jW>@zwwD9m{_Pc65$h zG;nBb_23vQDCoaYR%OsT)3u%I3RJtiXyt3Z+lL)X)Nplon6;@eSP;N~By4v2W5je- z6_`RI>9eOR=QrGWx0Dv63!4z?dS%{l2|I}?{#(}8(_T?A5-%YqZyG?ma-wUZgzLl3 zMq$Zf(fX)ZB^cRwW9P#2he$P= Bg&ljG7Ne; z%BZ^+(wqYm@b4y| 7}72UDZ{YD zj=2{2Ntv%0H86UFZ;GP^8t -!tVf*&N)PHbJV)Jzmu_ezuTlxjf74!gQL>2*|aMv^zx`cRBg7F&I4z}hZa zStw>j>E9-Zya9xHBVdZBx}vcx`L!`&on!B76P;;CAm^~3S)2fid@kp77}i3uXmm=V z?_)&}tQyPx3F6~Tmh86-+JG%w!0_VF-Gd4Ok}J?ZFJQVExK7cf>DAogI0BU|P&OXC zxwLPD$@p!tr2+d2mhepcP79=BfBz7HKYgHpw`KS~>sq*De0r@BR=OT=)enQi`(Pd6 zzb%T?2qsLJT}KUV;0>h0pJ40M_9t-c&~J;wd}y!#f41jR6>=vLj>wumH3ME8>nsP* znUg`TB9`QSTl{erF1sCz=5u8MwG+lR!~tnF4ut~%E`M5_euu0|53sBW$~Ym={%&!E zcl3~Wz$rj}Tl_zAsv0?<`=lwrH7=m?lE6sxgO6T?T 1p+UH#dUc32jE0-XqS86 zI@W2>Qx=+8`&!2`%~k%HaMcB?X#mQSy7k z58x^b%-QBoRz+HIubnSJeny_PVpZ&s`ew6RosD9+`z+k0gvr6^ZVYq$@>_A`?y%sL zAK?qociVD#@7o?_N);KIm2LN>v7@-d4gQ3eAp-tC49B4r_y{%i>u+PkJ4PG|zL(%J zxW|}7B;s!%n<}o>0m`7yoa1Bf_1}!#8 cZz;U4e?Kb%rywA^@8o324ly+7( z`rhBnpGw$c`Yy{C`-%2i&D&5*uHZUsU{;&FpZF*IrR<^8L_*A0;kJy @yYFL3S@$T*AD65s7*Jqko%+m6RKxHhdCEnA< zg0zV&(LF@G&VkmG5=&k16GV$M$i-=3KBDFP82g6DUfbN$NQ$PFr~__K?zpPF4*oq< z4VJ7$%+;@6{6chA@gv;G(^d+Bz=Em+=795FZKHM t<_Vz^#@@5VN$|+co4~KS~ z`tF|h>z)vj4L*(XjB-%eRW=8(4pGqwtFde1u9x7sI(nNz>bizcN~gN(3>d2cRx^W0 zUFtLBK(Z*B=SQHaXRsYgOb5!HYMOCmKeaWoF +MZ#Z;bkk@*mwS{)Ke~GRKd|KazbxJ3|FP2l is;av8zr2 zvz)PJ;+oVBz1|?&9S8-E2p_ePw G;sQ~YVY)5OG0qLfU`9+GDnYq4UyPm z9u{62_awhG11Dxq5bKGG{kT$KlpqfTZ-zH||B8OFGXFPmo)@S8hC Lr GG&QyUF#r#bA=IN3Sa^ zdDFvx+S3ngW_U98*E9VezG^b-X_XBZ^`gqSt;SiDAP>dj_id@%_V&=_x-W&ku?Q#Y z1Bhq<+7)z7H)gK3TsR{j$@T+FV4>BdPt@0j>L+haSXaUaFD(k%ek_$zSE?X|u4N)Q z2`9j~QIfDdafy)rZ3mq&1%b&U^OesFg@ R;RvxjLeMdcA1}Yk0OTy!z zK0xS^?b&^;ppvO;vUj_HYo_t5G5=Ths=HvU@(krHDFUD1eIvt6Rk?x-r$t#nsZ9*> z@^u54m*39=@)(>rtAX5N%W6eUANE)36wk8PkBd0 seubmA84I$;_!) z_T9Q|Or1M;ju{Y5n}ln}js%xUtR@1Yb~0Dr|A(g;0Nc^-8|~0zq>k0U(=Q->gQqv+ z!gzjURY~}HH06{KPS!8T9hVII3?b+#{kP=;B?NE8wF_@vb${%r%Vx(&OwbiZha*RL z@ku_^;UpVo1{iW5vmo1uxLH?54I39?{60<&&D^E(k{zpn-W*vt@;@>zwbu1w?1_Q6 z2R<=6lCw2b`L?_9XIL)F-OPN=&zXl3HI>V|!0tOn{OK5e>E(w$1p1AFzjD4&;E~Eu z{cmpi6)pTm+4z@JitdW82F=pPyVHn7*qAx`W{k$CEizjUJRD(f7-gTjj?Nb~v+2$l zYlLB3gAaLW`h7+?W8UOEn3DBT+lAG84=e;7*y(s-o}IB-Y9tP*pc?O5Xx+nDM0DlK zi_B8SvH0XfpZEy2SwgOQJ+|AnPM#bRCtW0$TbwAS2|862eZvwpNysrVZ;`xQMWEvi zLacNB1Vv$B7$Bc&$7tiv!}bh$3AbwQa>4Qj2{OmD+e_nHu!Yyy0)ijngqI#@)XU+x zjc8$m+CM=Y0K sG)uo^*nj-_w@;HOmyPT^MUKSgurC?`#$+m-pwteqJ%N0UjK1CIfEIum zxgoIe%efhwPS8m2=KtB%|C`UM;A=qq_*1H#X>Gtf el{ zSS9yR-GImI`yUdWMbGa18`0qpfCHDSN&r_9d$av@CGz}EOl^RcdW1AM_vW{Min&eU z#QtdYKyCxvh;tA+th7l&OI4J+qaK~O>Xm5XlxOQRCH{$CbE;Ubb}^%ndQpp_b;py+ zII= x^>XWILN%<~~ 72-sK)&nb1moQgQWjxw4@7}QaA^2=7>Cs9~{nwSx$HpV$ms<+dWIXMI zf=VR;bpR8 j!^ZcU7+*XHpgrMqpat$FWfAu3GA|dn?q@Thl!P7a>O9GKi8acZZm~W z;+1fl?MFq^k^1S0$?BG88o1OuKz&+a1k&cQw%Q4nJ`?r2S6|ZzrIv7GuNkv_F|8wK z-vfvp96@HGEztLl8{wJ1$b0Ah5BTsJ!mjrxrj+cRZ?=;t>dXLjPi0O{6Ov5di<}_G zXnpOE1a|Y<$K^uXlOMX#TIYm_ck#gVk3_d)Bue)nN@rvH==25qOD2KYogKo!n!cd- zWy)L1j$>zGwQfG8l3)#NL9u=b-5qOFh;`no@S =YRfQwL>vTXXE^l{kAjWcUP0~n|BlJQj;59huu8; zWk|+=I^v&vUHI?r1;rr)QBT7K?^2qvAOStI-+T@9ACBy*_p`t~-fGGJ+1LNe&g*z9 zhO?cznkSb%;|y-g0+pd12JS?9Gi}W=0ql%;*IUI%K(Ly9ZJ%~UL(7>DCn;k_EvD*C znJYj^Wf6afNXRx|&m=DgoJjs5&O@uhE6vQ=-qew~J#+Z67*j#U%b+8m(QPOhZa|i^ z`Qheh)5$fvvT$43BU}Sl6Vmi~YR$%Gm|{7Tvs^0BK3HN}_&3Y@FO5I%L@P$L?R77( z$#C}~K}21*QVe03I9)MVAWaATl;HmMTjxC_&q-1SMzHaEaFLp{^Ihsy7l}G#@~ybG z+L2x|p3gc;Zg~1L T<<_ORc350=c=>4knlw~H?P*=qiGe>OK4s~G!~ z-wZQ3GyS+HF0z|5jv79t%ezpKIb}%~c&whiZ5AUrdgdQ##I3%B(GEReNM)hv9aFWf zj-N2z_v%lm;x$OUeO4c)Lc8)t (ot_77B{4 z=m+*zB$~eP#wL2B9!~^f{UhXyP5}bs(lQj}mY{ 7pG3%g%2j4gW>@xIgs$gkYH zEh|OKNF!%S(p||Wwidz#+@nzf6E S}(M74HO9`E^j ztN-1_|0d*ej{iJKv@cgT&ULXB#x`y-Ol>X_B?H}}Og$pN6dN$~ZMepmmxPhp6r2;x zsAsHxv!M`i{wIjn(koo={QIAvxaeQCk?8Nh_x~D=eW#vmv14S0Taf AAaY^F-6} z2ya*0SEiCP+e6J(=NLF*WhZk}O`<$OT+1rdoACoXj2IS4`o|VU5{%hW$6xY5ypQ=W z?@qs0A2iG9H7D}o&)kBRo3*(+&$yeGqiy2PXh3Zg4NvZR*4Y^ZN{6M~h8GtWy(}sB z8|%L|U-^#2Ugr9ahU$F)O+zc!di`?JLg B^lxIsL?-#OQEceO<3K+!0GGbC `9`>&bAWSfuPi45d1Qixlz{M?Ww=Q>p~Asd=B zAqkYz7DoTOPycU!hs|`$)M0xab%VSxhlF}C$n FMP!4VG}j9&ybStc3@Yq(CfR9#K=`-p6d4lss#gd*bve zX4L^WcyEh;$HQ_?zKFh6uyn0>c{sCNrqWb Ht37Gsmc+d3P*A*jUvQj8PjKx>V z8&HR@prqRjf0gCVb@$1eH(!HtRUd8=?aJ5yL)rpr7Lw?!)m7u0ixy3_sJeUS9)RpL zJW!rzQWNc2SfJWNF+Rnj7$BJus`LQz9EO?P^bsk61qg? Kc%jqvC+P_NGWiMgZ z%%~s`LQQ=^=}HsGRdBN^g}fX_>1GKG%Q~H|)ONV1Tuxftj;Kb=O7eM7>N~1?v0^P) zYTm@}7D=`VwRcvAfyW2@{n~5aC5DME!Qs~S^H37EO7SlTJrnHpmG~(Y+Wr2aWc!Hi zR)&FW_f=mho9ey#6RCct$JN{Wq<NRP1EVE6?~p;<8_vKpfbi57v+lra%|?5Eai z=$j42KNgJM9TYKWYkqFp`AC?NocpYl^6**j830tGhqiE; 0aXkq=3@I<-AjeSs)_qWItBm?{|_QAX|xSi#CUHuqOR;=6Z zBrO*|>m_Q+hu$v+!J$J2yD ojd^PwC4ZvCT?PrhOB3-sZAhGV?nyx-?<& z+G*c>06+OYL3=>p7R*4oAbsM%vgof;@f> z?*}FX(=Mf4lw#rxer_$N87p7jY1E?;9`LoPYwa5YME|HA #Tnh#XlHzEwXtYGgc2pCeziR13z+%6hrz#a-$f0kzWD >yn{yN%x2izHsy5jD!q|3j|A2Nc=5IOMU+oC(pxe2f zLYx`UyF6b^$94b%(%*H>fid_8=(0IbOxoIm;K{W_K6p47KIwVmfoL=G2gIKuVpncn ze^WRCwW?GLgdPlu38Vaf7%J1{U>N5M^Dbx6A0Y!Yc4WB?S;fzL*?c?$hFgJ)yyc$8 z-(LN+_?1pRk=DdMqUn&t6&{uKMUiacyZ+GjfRv!_&}JCd0+25Lxa>B|p)9tweHz9$ zCQQPefwFxAQ9;s9Yk%^R#*$@QMpb4kTnq@!Bd&kMzs&D^4f!DP)Wq}Bijz@L@&l}6 zu3Uzf{D=)NkK9EkJ5!)AfS-^XT^l_r;_%D*sE^f#n^oiEW4}qo{k^}ePx-!HCmma* zLLX0o(^kVY5VdxAGpMkg9u=ScRbUzz85kq+B!k1u_$i;I^&iU8sxBYgU6J7*gi>fE zppDaV;E!)d6U3vN>`~p0_>pm-!>~3AQA_uga>6GPxPZq7$I2qcr?)ls)OyFXdLe5H z8MXWqbPWl{1|nup@741kg<>Dg@{|K8h=i8)R~Y4>z?*Cp#Y67IYy{nVQtER#+1x(; zDfDt-0!wMwcWs7uN}ftBRPD&u(-W74FG4;pv4T7e{!}CY%JC1+I}pS%prL~wcV_~p zIM1u&BWDl;9_zNnugie>b}nRBEp I`4@H1NtcXN>`%{_!ujT@HM};kU@d`vNW@dC;dAKX?#hJ zyEeJh1c(SAxG^W-j^Rv26qM=-@}moNzKLnA_k8w_X_29=chMtG4vXt|2lplSg8Vu* zxu)ccSzivxr+q%Vp4@0!AkM!QUseXhRuO+3?XM#Szl)afnmUv9Qmt 1_|hm8uvm zigfts<0;SsO{Ye!K=*!XeNu6kYkyk*e(SWN+`YL$7tp09EF-#cV4*7Dz4gjKu|clq zR;u_>D0JLtbblS3^_NIedfhyCmm`dnJr<~LM=FWef%3u671jam>eYYKu67PzRH3pk zygp+16Qti5&_Cfeb7LhuJ*?2%_f~zvq8ze-jBCPafVf34Nn!axQPcTU@@G=2q7nG} zVh$eKf(rxhrEX(pGvn9VW)xR%PsLPBODs0HEbX>6HkrYRi@Xw=Zg-8gNxdL&@6Slu z-jGnhc(xJ5M~xm~O|z$48SPLnSnLfG%8p+fIXI3)4%b2h5k!S=ZyBg}l!Y3rzu6~e zxJ7GI^V&TEZzqQKKoz^$ww`JSl#hNJ+ 5#wY046Ssb*|)+=*;_}bOt_e| >imJbq@=lI7x<&CQ=6Eo+-dm0Z=W zUtTXsiq4I;-XgExhQm!@N|n6dfAzKF2YpO3rNj~@l>$bJyC1aQ%4gMhXH-wVlvP59 zm;+kxI3n@V8Tt_pMX5gxejX)BWA$}A?nCUtqp}qJ%l=yfd+-dKdWQMnp61l)8D*i& z;QGh6GPo4$&2A_ei>&3SSYm8H5x{ZH9`$NSE|r{Vzp=e Q z)`B%6xL&9>u{N`^*VGMH@&5i2)7s5CBQh^G^kHD2aScXM0A)>|Ag&-T!^C6~M!GQ_ zztad=pLF?@*3kILtt$R)bp4=wG1GaG?p-D(D)&^%s6$WbR|SR>1#xuy_0k_Zb_!)- zig|_w^StC6$#<~Pi+akh>0?Rb-8HyAx4Jhuv$TytJD`^>8n0nAE5gFBwA&ng;^Go@ ztgiF#I#PScMC*ZQo%^6g;6nF`71kD3_OaEvTamsLN_6gXLeLNx-K?b1vN?Gcm1T0S z0I^13yXlRLdb8AfloFbrpwOOzcZvH6dMrS+&x1QRcDgz(v~V?)W%p|{o8Wm@sViu& zSw2ih+MCjAJU8MMY;F;AXuE?b9bkDohUIgY3Ct6Q(wPPy#1ebHjOn3h5RF8{B|DS8 zQg726$QF^UOY>VF?-iOxdEZ?Lx)IHo?qz1dRxB$og&awdOa-ddtwxtB0BP{`*vYJr zv5U5L*HUA(C|YTk&r8J^YhooACHa-=5!ETm_a|HSs}=N1G@m0OocfoJ;2>#d`j#X< zNs;u~ig)JZDNgcDF`QHE+TbOBjJOK=aAVYln^$1thTE=krlq26_hXt%{vlU7H^zJ= z0JQk;*&eV4v+;?Q(l9)eW)Ah%%rfw !8dK1LxFB6lyj$~6 zQ2JOs`4Lwv_ewj@mH#ivjMM;YZ0-*w2BRn1emJv=`)-|m;jxP(c0ON?@UabvQCh{Q z$e{oqOf!J+It=_ZBJj_?hv I$xton5gT>!A=rZ`NC6^*1 3M-Kk znvbqoE0w4~`)2#XeAYWa(62?dOt=?-voC1n-++uGO!svd`_8m*)-OHYvLu%iZOu_I z+Ysn1tW26j%gx_`GyIwe6>G4v%C9hsMT$2{2^RA~A|&_NA0g^zFN^Mi1lzqNv7hqX zgnRvNNA0UbR#lXTXj1?Zng`o5u3~Y>Pb}Z#ln2MS{6yT>X7gb)m-tVDKq!<=5n>_T z=|;>9^Vd%U8J|CgBgqj-oIAAHmcpkl!5kmzkEz }7@jgKneX{Tb?ku4j6YUZI?qz@8u)GxNUhV60pT;OV8dp XON~y#_uzjkVr#b|3 zuQ; |^w;R1iwzYa& 7k#@_DVMo51)jOeu3yu^qzm!2;Vf7}uP7d2QiBblxORdvtPh)~$_9Bxy#TB=*`` zqY4{}A>$|}{?^!mxkk7o&rAx+!WJ-S(v}U*m^Gm`-E~GA()ljO81;io7x7%kdg;Ph ztiM)@+UUx@%^Oj6^7F*$@5V2Ia;$85zPD)|4b_)*H`53(yx~ke*BFg8p1&r+klk36 z-+{W`BdZh3&UcL-Vh`%#_KZAWay~h3@j&9(2sgid_X;ofj#c6Bo-1=DF%}Wo+AypE zS^@inECenEpo}>Y^?Ru|Vr+wolid%PwFYF$$T1y9{pWl|Bl{mD`ha}cPd<3ws>4*B zX+Iei_zA+w;ouchUAC* G+gbx<}H_Y z%oK!>5$S55<+d0 }dKx3D;B(_$Pt&-Ae(~`n){?5-HV7 zkq7IZ{zeKh#%6|IF@hGhqg$<`4lZVznU=9){V5cLX!r9gpIaaF5eLdb)U>&li}V&? zZ7Tk?? SE|_8rS7wdjg<2pJ&d+d$k_#FDZYqfGpwzi(Lh zR3LPFZ5Q$e*XOyW1Bef^aiy2uH+>Z$-FY+C_tHt(Q4rS1Gsp7rqOh+-kAYzyVaSuV zdU>gEQxeuFMjgGClDRGsavij9^lt9z+eQvIJNa3I#v1c9TWjeblK>InB_Ys%JVg=y zS&H9{QUj~DINo>@C$4@unZ0i%pFHz?IBPD@vf~|rwAhE(ho?%>yB#ZG0~g$!z3)^i z-jCBNobYtF?@m#hW?903h~epf<1+c3E{ZED6yFjF6S#*QCm&HfrQlk(gIujhzB!y~ zQyulz14c?f_`*dCbhDP@!_w?sh38^=j0asHzKi*&@2_s>3ygZC$OUBPsjC5bKrKbf zKXH8L{*!H#vRJ)BCZ(+28Gd%r1HuhFOzZ&AyHsk3em2Tl_a284dFv6jgkjQd)X|r7 zwW4j~sTIA-m!c};wQKr#VsurHzZE&OoWeH|4aBZ%OaNRB2>oeSe}b5#ZtHjnp@+V> zJ8s3j%nHquRB?ykKj5E%t3j&>^MT-uW?k1KaG+5iMtSd*i&w`Gqc4_lLZHSbH|1=v zpu-7NeG*vzHv5ytJBa7VUh&X$VGhSXphJh8@jzlpKRdT6w 1+S2O&nQA z(EGLxs}(1QJoV=MOADFy-4gVgxgq&*f-2@#2E}KlZ7orEmGoaYFmJ2X0V*#8%v^iu za|7^#;aBIJjpdzKG*y|k Y{_s^VM?BP!1xKl2q^=p@9*q9 z-9v}KsFa6REg5Cll(UD^+^AC6D>sSCm1`y+0zC5Z8wu068gR^pVI;cl$Z-%S&hC*C zysQk<>E8>xSQ%Q2AL$L8sRn$mcHMc6a7*9(3m{_9C6$*FuqG(Em-xI4bRu@vCzTKG zZAYv)TfLnz?ju?}{C8Q_=EZ!)EUo2TcSq~4X`p(!2Ix74dpkkTY=OPp>arRqNa*oz zoGK53-#T WvCz)t%c)4RcCv3+3RC^!DMG#t1i*a&ZqwaBAlRCuT=)CcvOBha|g 7~7tez}`(z5t zvy26v7e*FgncpV3pOa@6tjp~Q5Umedh<(AQU4LvVHCIuAOeo*kt7LH;xwf>`?gT5B z?5o#efhbh|IJ1amKDvE^_)<84HBvgVJ)s{+2|qbI0rG3FH}x4EQnyFFbP5>p%BUMI zax~=ZO6y=i|0B!i-lV}M^m4@ur&0H8)6kYDd C8Ai& z@+XexId4W8ns*|;H@hh Ofw1v(qDJ!deJc$E*<4mZ073*=BT{0PRMUoy zX<0JPS4%JWiLCC`$8-p-S F&-uIb{KL;|$_K)HSVj+FEE|xQ zrPaxIb~1eBBcsyZhbJbFlT%6-^b6S1&6>~NPcRx8dam#$a+Y2^CUQLLJ?7-p*J>C} zkWf70t`xi8?$YDCH*Nbws`}DJTsz1E+yOtirHdNo#WTey&GX`-gQ33yjR312F9pn- zB_p&(EkK8o8WFJ1jPrxlcXzi}zFiXcFl!KRG6L?cg)8V~G3_JXNnDldzR&lSHTwbO zKtPO28-2+<@T1o&BGzXkY`MD{621hPz_k|yiD5y}MzQfOiu&!SY2BWyL7BNSQ`KwZ z1y>AhGqABgK{6OND_uQO8}g8L##JpX(c7~bz!=14xVHb&AYJRg;Kgd @B?C{W>Lb#CS&5wxmYn3w zd6P4j;@7^Cx8@A7(dia+TCrQXa<5DBs!Ypth#p-SgjjSU-=gZVG;128IEbn6Cu>~Y ziQ4;4%r asd?!(~l8?~m@b0+V#63U8*by~)j$i0xNxii>Az9jh& )re{G>*^y zSM}jvNLzyoVW%<@8fd1}KRF!PRz8K S7^hh$~>eH#{PH^NNabwt~YKbewWXad*fj-V*u>E z7NFev@6{mwPq)FJV%ah(I!YY#I}x=ND);y|cTjr(ym; QUR&^0JUFdwvob z=00zp1!Wot<+{tHm&hCGS~*C^+7HP7_@zC5ujg4x6GamPA5*yBS^+8B9_JtFn)YMh zjzs!-tLzth)G|W|5?3~10J|Q7nM)h_fc@%HKd>0s98Tu-P~qOaB1G9?0FxzM5N#I_ zc?Az4Q7MnOMsC9k#KR-rVRO*u-csWc^9Qy^$ybf=mxzCY!hqT;t!GLrWymZo*0*G8 zVjAzS&9*wS+o{co_a6c>b5*Wk1I?kBQNC}@Bqr2`v=}Jho+M=VETyhG4+@6-AOnbZ z8S*pk(%lf}C4BTlmK_ BNJ zZO+A&7uHvZp*2o63l2mr0YOr~gPrwVC>`4Rj;urR{+G(we8`=#L)xon{3RUwLM` zJLS<&@BPAQH{DJzM|?Yk0(ikH?=Y3pojF8!-Bwt2-sdIAr}5`eVcP%>{cgZt`x?Jq zX}2I`6<3@y6wG(xD&A5atFRpotQe{oXt#PUSuDyga#By<3EA)P2ww^Bs4lx?I2^nu zYF~b`0c9J{{iWKp<`=}p+ctTWw2*XZ|HW7_-DJym;m)-KkSqJI-Z-cW8?zM3y8vLc ziUpGlj;&8vtJDLlKOe{dxHeGy$ ?h7#{7M}dFo>zox$FhPft zAmNyZn;1Y7z7`UO=4jZ*oGao7n&XYP<=+7`s*j(KUFPd9`$M*aPB%M-XIr|-lx`dQ zjge5dU$v@Gd)NeW0jZKKy?ZA^y8@y05p^?edZZ^1VL7?D>>V`G!3I6}esb|(rJ-&R zoI7ivH=*0(=q>?de0SVAVp?wA-c*nvG7`th;WN_D%#I+fT%2RhI(prDWmg0|8*YYp z4MTjuXDu~cP;y{0*|9V2@u%X1N9eSd7@2RGZ^f@I_M1R=YLF5v-w%XaQvwVbu-+Cc z>q2ZhZ|h7OQz#`6THBIw#FM@fkDC!7ob(d2s$2LXp}?8FbfK}ObT=kYwYc>o3jh9a zGrKVwO$f|(b5#m{Hn?rQ{Wkrq eh$Bqw!0) zjn99d5q=JV;n;Ln#{%~VZ6v2ShFD%~?gMX;vB60GNy+82xJ1g_PMp )3!EZjDH>DF&5UjUoa4_3)pnSS091LfvD)OLp}aJE!!dnR@-)v>qQDU zzysw+|0LVFbQ*|r?;&guG<#9Xf1d~8)$fUETWYuQ0~8@Z%fF8MzSpaT1eGfm0h4RT zj<<9fnz}*}xsvT(CyUHrRWu$`IhuOgeS&p`oh9EBkP1Hy$hVBQPA+(JRQsXcv1vvV zsbc2|u{X>H^TjgG#FhwW>9op~>}Anz#UHmkt?NoN{Gi?$uqNSs4W@=gQRccq+FbZ( zqZO+^Q!e_t169a5QFvBHc$%gKTdAP&y&Pc~D D2*sL ?yz~0XE$q|BJo%4r_YN`n`jopi-oX z)Tn@<^xlbxfPjdA6sam51f+KYA|NPTKx!xg0z&A$_a1uhy_3)k5aRp8*)!X{XP$Fr z=3Mh$?{nVg4@l69U*pcb*7~lsKI;s}5rV;s#IPP6`~bz`^X?d_0PvPSo(fBv>x}iT zgkdkpV=3I-pxwT)&b+L-&|j}y1#nG9037IjJ>~O~Iv~L$Q3F|#>aL2V(5U;viT-?F z48SelT+! oByI e2@nvbJ5vbmh|G6jqZCDE8cjpOi z$%qv@5Pefee%|nWX!_=Sk5JYe*m6viv?S8*z1nrxpUK~W_@ktMtpjRwYu_`~0)h;~ z+#cHDKYMUnSF3ngc|b(j=E&gY$q_t#4In>y5S>1>pt%Ed=M($@wbXDfG@jfhg-2ZY zD6#Zm@a)Unk^bR9(UQvrM!fCU(DV@1b)*&*d$acxC_wJ-8AAK7H_F0+?u5W@bcsN7eR$F(^(3eMg z2njRao^nZqjM*&cx3PS^c>(~bCxoO&mzDThNx1?Jy*&!|$d62|-&u>d+K-omXYzIz zzBlD^EtvWdC2Z3<_xp1A?R`9cBKLJ8xK*z2@PfBkxlxE&gqEIB;1F+Rf Bhzw=z z?-1URPDM73?2M iQ tE*tV?Z!F$hx_rlpcqyNb& zhDT|^2pNRX^GA`L6qcTnS=4e2@arJ*KYuY~z;y+rm@<_Ul?D1sP0gZGRfP|!2;&!G zWrb`Lz&3D&eG<|f_ f{lbg-FG-# zBPRcyh0KQQ_1Mg*4b2ahrlhX%W%u#zJTF?$xPY}vA6kWVQ@@4X4P=Y_nBddmP)Bqt z5MC1R2a4nzmi!O_ZQ9GQsAV4Fz&O)?w8JrB4q;^I-?zqPk+4Us>#6fNCd$!xQuYQe zSX7iZrHT+aH)) zecCt>^V WXlE58XH19-sZqY{rFW~;r+D5?0kS x*Vv9 0dMjxpaGMYu znZ5_B`%H k}h48XOW&aAX%@y-p77m zMK+}~Hj&Y+GIUbJu=PY 6C+QmbF1N+ z*W5auN8o>kAJ)h1lyc7)t)ITvIeU*#!wwpu!Y;ZUg=c83op=Cv<}cTs-h7lJBp{`5 z$I<*f#{X+w>_0u#C2M2CF)uf>$Jp~)#EgnRxIOg2y=6+3$PblM=96lxTr_B2AayN7 zxRv245>GnCI_Gxj0Ftt;TjFUfu7bGQB5uy~M6gh}{pFezTm%JatfFn)H?unnvPVQ5 zn}rTmV(S!69y8cp|72-1wUzl^=MhSjEq6$g0Uh1(8EP8;j-CNu6Cc?NRp_)KwCsH2 zpr;(Fs0kUUdB2dQsLteYx8;y$?SJPo!T-m{`Q0J?A3yQm@wKNI$WeH^CHz+R!AEmO z;Mfb5R#fx)C2rCdB*ZW(&$e!8#}f!Io9O3G{^4aN7F9N 7EgHo|kn3L3LNMtFkY zuh5prv#s<{jnP*Z=Do}~KAUz)#MYeQ+rXa`HP&7o@DRp}?x%+H_}X)E0IvR4T>vl{ z`X^~2tMQz)pnviZh})3806*dGxia=2j_`hqZa)JN<&&+KG88IKK)&k#_?v3gx%u$^ zRe}B2`TY2afaoAKZ}6T+yfQd*TtJn(((mh4PIv3A#Z5#CC4g{7DbEq6Z_Q%K!1yU$ zoYV_4I|^rO%H^F)`*9~5Z*lNQ!_07(p*JifiOy2^33|itnKMWfe>{sD*?ucfzwwf! zzd>Ze&9@f>OeMaK-nU6vr_!fG!z5Y~k0MXM<{A6V$X`gTeHMgcwYeE`e>FUE9P{)n z$wO$N6p+-LP92EM5>Mw0rXJ01%Sx_)*L4fCTtHm2a6U=g0j7mj)&zX#u)Qg1=r@PY z63uwyVnrLiHwbhpyST{UvuF-PlO$$Yc1FeO;hb6|ob%UZG>le-J8mGJ+H0xruhw_@ zQUxoRo;l{U9X4nHgUv11L{I2)z1B~XR`f8CbCqMAe*O=xVe&*NkaZ`(ANQKHISMU! zw})w&PORZcDp@|zlw>5%5#F@CF_N4;v1^!vcF*IC%H|j1#VanqVPfe0O%%L-tm(WU zVXp|28oC|uwAhsaUtK*`o+)dNaP(up?qMN%IBT2Bkfxk<2qv-R=G-*d!>8ESrE8$w zX3H02?E37QD9-34B-n6+L2@YiWZp`qpzQe#Sp_nMRo{{FxO-{d0b&V<=3FYs-UENOLNY&K7xR e3`59WDjS=WEF~BoM%cxZ zcb J+xD z2b&@{N6K0st<;4Ns~AQ)t*qVfc6U3~4AX%5n}p076vR0{3ue9;8v>$u^+rKy_(M_t z<~+Ie7roe7kLN!?VKPaO)jDjag}H#IFq%5o@30JZM4x03S5@Zf(#kg~5QAdTC>Y|e z(%Q;Pi5; r49XAd=e!RTLk-8gYU%5 zPrsS|vWpi(@+RCrh;nM_(yG&&Om7mE%{CHL=wcAMN~sVDZ#=53tQp~<*k`w*3%aq` z@$`)|!*(B+mplV4s?eS#Wak?A@M$Y7ZWS2loTt-N=A1v9UK;N(Vy{p7dN4y8&kl#0 z&fC6Mgpo1K)_^4t%U+`#*9;}o&m5q^52~g|;x^f>kH~_rp*NQ0CWDJsSaphJpLAyC zcQDzPeU!>T<1fgyo}wKM7-khy(e6%YD<_IYZ0rL!TZ|1t+?sL|dc_M5ZCIbAwB2l| zHA;oQ9m6WvJbTb1a`jNe#&)2_I-f_x0EEVEO2Qqi?V9hAxM>1Xv;)wggV5SD<-Qlh z^_uFxxT)tZ>%Sxv-unF$q*ete(s!pn0(%xGATs}-e^WYdhQI%-5d9x#=EO4vQdlwN zWzl>r;;F|4s2Om}>uwD397id4+SR=A*|*2 -= zbbVdl|0-8jkh3=DO7Xf#5-bm+(qH`D<(sPB1NB9oumV7glRLrHeUgIG(Mv>(GZvSG z=3lM}7>W!Xs6IKTX6Q3S4C^I^r{FnmqrfdpOBTR5r*pgo3x?eWKw$uS-Cs}`;i;8> z;aeC0EDS)(^9w#_VL<dWd4rApaoDE6n{lwnEisnsGB!*0jM3Yzfn8>bg92nJO1ZN|9d>sc@%BS zePA$w8sun~3Lvp)T1nn@3A%pCw4_{r;gK!ubd|DEMSkw9fGHkvf`RnJfx!oD$A)La zuUCrg8(a{dVQPJ$?V~AU`al {$0EK$B9osi_Z}Q6!|}t!Ck2=$uTh3EDfJheEt1ewW7Ej38^uo z-RZ|APquxAy~Y#S+6uw%gEDyUlx*1_3(_rqPjo5}o=eK48(rU??iO?^(w*)Mn{4!# zX9|Ct%}UJ_*@t6r3!S4i0x^RJlDfD9fq2<@AkJX-g{X$GTdZK|Hf(UE9zVu|m>N|` zA2jw>IuavJEVqZT1R4xs_-NkMCZILk!vIg)YPvKk<6F2+$2~d<-qcoS(hj2zgqLN1 z&YE4_ya&Rb6ARq;pS>3uGcy|V;X^Za4HeQDh~)HGW8@$*uN@;82JKdY?za5^8S5U} zKKt4gZKFo>Imls_J$AKNQw4q=l|CwU4_mjjhPh-&scgul+a0Fg>&vc4-q8~+_zJ%c zY`|t(Dl!IrR*bbH92_Qy7 yB3DFubQrB73<4Cv4%Z4U>xSBiLJT%G8* zlem=+^6sSuyNra2KT6jSFzmSo6cMW3PyNSfblg>FFe=q$LF3uPfHW-+7S+mk41!!) zF0Rsn7LS#t#zlQ27iP1yxfcEz*LOLKEfRKAIa-9yY#4M2T@> ekX!S zSnGRx-eiIIGs06_?ONPX0WNPCnJF^n0|GYhKK?L&DylQ%3E4cpjT~-<*qrGyk3nlp z*1lHgLi@?8Qt9dSL`%z+4xw-|nUzkv-C~@I(5zM^t&FzYiZt@%IjwWNg$Zv-9uSFE zbU*mhlKRQZkRkf6JP 5Kmh`F?~?!rA8+zhtw^Kw0c3!{LJE|Eji z=q6cb-zU@>VQ==KZ%-X1&e(c4XB(ELI-dNT`a1iZAvW7XXDIy@|0J!Y(c!09+7pt2 z{3UegLbRQx>N9+_#*8>gk7a0T&F2@~NDURa2k964Hve}UIs7O7sOcPnF^eqt)yM!4 zj9=`EKzsl15R6f1<1a=AU|{@eS4J6sVPF86rmMdi8OR^(if-^P3=HQ#+CzY-@T&y` zh7A6W>-e85{qONiZLCmY&H1H9 h0{e!Nrt190=z3DhqYtOxREZcarsa&ZTPrdZkVGUJE z1eC2H=vx*jbU37qL{md}8oTiw4 kZn~n2+?-Y}fTtJhDa>jOY{R!{xqIUSzDhKF$7e*sqc(@J_?9vz z)%_VZQ2`UT@C$AbLfFCeqaPApQYv_jh^57oKG}?Ar~^_mope8=hJVP$-!_7_c?CS7 zS}>jf(sti={usW&lOX1hpwa8r;+N-2BcRs|7HDHRj$NdYw;w~hWD#>DS#!8?=;g&} z#RY?)d9)Q09lIT;7gNSl*1>nTgErt%BsEI~odflEgkREyK`#auRU$^E3qaXdWhI+` zc??~_0loJYgv=H04Y`twrE_uauGU&XQEvFU3NOiuz6XXUIyg%pBtUK1efW^YF>xTv zJj=R~4aOed`~gxxiJsuAmr})9^;E30zlMEo@xa#ST$3dbzFpIu;kA|OPHj{(N(wBn zL&W31F0=F3wOTN=efH%c^b98lsBcZTaEmR%cGU>hKDXfxq_$5m%+&X `qSmHiD3gR0C%|&kZTE?OxucIVWwIV#a?YAzv8F-t9tTsBW(-QUj2YYYX zK{H4e^(fU9_$iJPmo4Mf)zW1Y;}_VT>$vFXS$ s52PZycnio;?t$zKOY4Pp@&W%=hv)JWBF)PvDVP{3=wz*4#5uSePBMxUIO`>G3 zM`60tRuf6D-VO-adFEt{3b;$q5SZ4q6E6tdt6-FX67!)oB~Vl{*ug=yr^Uw^Wx8R+ z&Ma!7nFhW2DS}fkSl`B~ucgjPzs7jB|HoEE lCp_3x2w 761CKUmVV$wDj2 z#@>v3lv?UfUaRDN)3NP=JF!1dC{DFe7IP93L!9#RNQCj_O#?pHTc1guNNziUNpFM_ zOubmV!wua{QCC&h&ZOedTD=!Ko^fbOxw!x3Qh^?YwiOPh>C%kX4qs?%1r00QB$&(i z;?=1`bG0MeNu;4Hcx&y(aS8^CDwONzI$7L}pNT;kElS={J~v(`hz zWO168dbFJid&t)I3B*cLqc=TE4!`+d#ZTD#23huzXxIoy!N)~gu6H7LC)DP}T $eNV|m)`8c-&)IR0+t^t6X2`o|4yxt?Ciwk;#9FOT%iK3&PC%8vAm&HsG5y&c zj5^3ms&z#_|CY$u65ZY{Q!{@m?kjF|HV6!^GDO~~^@o4#&aczVH7*k0=vxW{VwKe! ze*fVL;4A2H7gLmxMm;8aWP=AgNT$3V^j-USaiM{wZQ`@UJ82-9&g@Rjt_JsNUu$A( zUjjDXlfmj=x8a}f^NJcI@rFGNDW~F|MZYiY&c?bIt~%L%ynB$2D)TOZ;!9ZyejO>4 zdD9)#C-V9lPD49AG$ol>A!z2`;hXf~UzU-_ 7E3nz&`X2f?$#)c({~W2Js_Uxn0W&4OHRa^`?t0tn#TvQ$ z7b!RQF}F)Y8%W?p`mZ)KX?IxwMLed?+8%9E{q`@!B(~8K<#$da`d8z1X^MMM;~(Ix zjUX25EmMId{@)ru9T=`5qjML!M#=_mUVLgI|3%C&bdY7}gfI@Yx|RoTow+#dK~JBy zQK&6k$xhzx^xCS`K1@Q!?$fW0qrX)pBeC1xs!hKr1knD(Vw?{kR!3-@V=>Hu_4PL_ zhN^M_ANu(r5l}CF;k$V9dG6+44D8w7qbpD(Ptf-B&mG043uoj%Z{_m&Cq4EG5{(>l z4 gnEcFIkGVGzkUO&m z@GW>jw7ZOiIi4~mDjMrDZQ;3B92OQkM*ZY-yNMq z80?VgvK_}pve f)iBwRmY?jd`~2_y&i&QJ2kKrtOa& z +qVw*Veo~xO{@F+V!54sNVF)A=f3FM3 zg _k z>H#ANkCJ@Nwp=#>oQhfsgVX-M+~QFK9?E=P;s)T>8R zUdbWNbZ^D3nc+V9o3#eyvU9uk&+8fDZHu{!a%t OqTQ_Vepm8eI2hbBWWu$`|Q}m*A1;0v7-j!9$XN4-=70 zc)|*Q29QolXIo}y^`7Xd>X`6Wducb`unn;fzt5m4qcgmH(LdMSBu`hT7j=n|wzPoy z>|Q#+4bq1rzt5}J1!4Gzb2xK2iXQDG0l!9+Ne@f~RFP4Jf=X&D%81Hk80D%m-aP7& z`VCu~oj!K&ZTAxpE>qkA8{(Z8V`1OwFlSt=aB`Vt>}}q%&)GTUd4h{h_;77tSNI2I z)bzB)c5Es4Hl#0z(VV~^S5Q@2rT4Y6_%YuA`d@L+ESK+{KpVk(cg z77MUTz;NiO7Bo^*31!kRE{~j4jl0-gN-mzW_0mZW=#Y^f 42+>o%sQ( zBf9ti^K1>b7 4s)y08*%$A1hSprfU`oQ8Nfdo`jI4Akvx%GzlR{y72m?YetI-Nw=Ov8YQG1Y zak_k(P6zpv{Oyif4G-^2qGy)M_mM{#l9GCQ^2VatGL8~mkDtC9>zsTuO{_>VI#3KX zhaO*AGdP?uIJ; Ge2Um9IK)nfJJ; zzkEDk@@IPEBJKz$L9P1bdE8pK?64WIZ+MT%{{_#=tzKd=y0-*J@CRrh&F)l3c_>&} zmc( S$@-3}KDQKa~8E5a9-#{c4{yeKlzlo;e-Q*M|>p zr~~9p+~f JnEN)<>ejjk=aH>NZPNt z0(0fS<}8Y%Mn<|iQ!CF-0LTpnfV1aW)RqRzXk4+(IvC2n7p^J=uwwnr1FF9~lYjmd zU#-PG<{dv`EBDgGC0zwgAVa~RygZ16^B}KBI4ZdbI`-6*GD9B&MKHj5!{KJQxRmoN zQF+4xeS3T~WfpOO8dvSxb*{ z6faHllF0?Hu`!O_Hg>5(;N3^bm z9;zCq07K^Ualq0;S3tXr;mpBIfy0Y$sGmQP!cV!BXu#{$GfTQ#ETM;`aXAn4(>}8^ z*ms5l9J0$hVkv8K=Yf9ZPyhR8G-p%k_36Bv0f2)o{{{zh==5wmIfl$YdSeZ64A2pW z;#rt;HLg9f9V>ANbboHwVF%&Nf1+vC4gzb}DRAvCIIXq#KRkK2fUVshAjYk_!(|ri zyQt;E4RBE%CbSSJ7XAb~A$y8nZ5bxLK*Xin560=%*OVyBP_GjQssRM%XNy*X_R#}7 zM=tHy9zTDA(?XF6{3V7OQF@&%7)@UB=xgSqSX$OYmvNx4woMVMZnlnep_N5>6;LaU zl6ANxH78HNzK`4VdJ8yK4GoEtf18rQew&!S4SSk03JKve5cOb3vbhYZB}^$G%}bN1 z6Y;y7SFcnoiZi&jE$R=?J8>Xoo(Hl!RCKUZOdR^03M!Gi*lYMa+8@{wBR*9C)n%7} zUQfI5HBiO)N>x Q5MwHv@SUP17yW( zSla>?+NS{R{@awSYy&DQ&O>m3_BT-r@j>3!`P xLLy9H<;hT~%T7^U0{Bb%_iR-ONFurozBgSHp<>(QM8EC4}NLbe6v zesge1VskE*fBw8Hv1N)uxiDzUix60NR}EVj#iPoBMu5`I$LQ7hZDmc=PWaJPw!np? z31PfI>U%dH9d~Sd*Y8hw^LsI41d$`YbHU20gH|RXJ2(uj=HuSoL78toFXzSl(&lcl z`(O0Go8h)#SmutajTeI-^cZn#OY=ueJ-(!nw+CVXT6EPWYRqftF=B<)zK^P|IEuvZ zd@IXihI(AUH=Han^0*LpYXN-Y{v-0@_6@NplADn5m&YTJQ2yX2HX)_F(l%mDW!DQ^ zZfD&ib=na*y4T!?FNQLlM (xp*_i}?{?*L<&UGX&~ zyD-?OElIYj4^Ppy-}H6JUX%}*#PP~r)_50wLi0gwke_Y#Dzp)D{Y$ARG`ir`$UJ2! z$$SUC?`*~D&`6}Ypj@Mz93SM!w&0W{vD$jCx+cENkh)Ezl@)jK9-C>as8wF*f~TDF z;IeD3)$%x9NW%w0;x8Z~!@nqZzlI(L%4lh<3 -tOZm}C=CmebwU ltJadywa#KT_#26m@8C#vWe{k)mI3o{sG4>~ibCEs zvwd=6LYB?{P-Dx@>2_73;$m~CMOVg}C1nGh`2MasWXF#h)8gVsfs@8r@>MY}(L^!E zO0k#xc)H0q%u~4SNn*~(;9~RQ<0~gjrcWnBxt}~V23U;3M~Fpz78#IR^A8ZU4VMSA z^A`(k?J2#fNk!}LmXZzoZ*gCbkCDzMIOSQ+BSLM&DIFnE7pBK`Uv%LL&dAAXG&HOZ z#x1fYlbDQPMP_uF x;4d!ZHCMOw(IJoc7YXC9az?Jf6=-{Z8epcDASXAzWe+1W zF~KyDGcVwlQ-V6{kjrb2OHGIPRb)H}%g!aad-wnO8f1_QwZNWDt1^uR^oF=4ep4N& zEI$29MOCHRX+^AZ_m&*M1jV=(e8iOWVF#cTdFfSP5^-XqiV-d?otX}sF3ufszcv&d zrY(OlOZY(92XfU)lGeqHy;0 y1a6JIwrlW1<61nOnub1{aICN$r z#J9NjJLS5!54XfX_!b*~iiJgffN0HTCq?-KX?*Rec5k1A%)Vc!R`F4lzCa*+^9Y`b zxLuvLAo=z+JS5E;wl)ZxF+>|+NcMZ!XnFPVYKOh}YJ!9oY$I10?#vv2$ eq zto8K|(4x>5Kh#XXS$M7jRr7=!4y!fMkYOl4$*u#TgzK))*5TglHWBg%=qb`5@D@68 zj$>p`nmg` am=wWx{9XHpXe? zr|zL|?r)oc&R5#M+DN0!_(zVZ<>IU!33d{2%tZIJPao%;O|Ya%&jCKLX6ox-6CRX9 z9%3j1%&m#j4TD#wCTlccuAaS wY6c&=~!@<~$&9ExQz)NJz2e>CAloU9dGi2yN z`!8l;V-|5XlS$Kfw%tXq+0(pfeIo%cb2G~U5fb-KhzkDITt!cY-6uIjq#Dj_8(cBr z?6w+WKM8VKrob66o8hSLuYM_5mznw{qKC1X)0vI2fcf&`{vl{I-2mefwe|e9gFw)B z49;@-%zMu_6y(Q2C>mDWLCn8T*BOmbxlbDh3A8ydAQLP}&-b5e?^dZbHa3h1-hiBW z&>Xr*O5nT}KLf>ki;O$^v7mHAN2+;)K 3 z*2CTB_=$~Ol)LlW_@*DAF_&K05lOKp92>heTV}fW5i78K4hQ=OU;j56^}l}1|J7Hv zKgHpH7pTKAB5vdyu|Lx tIF`3CAI=eM!cVL*K`$$-I2CC>QIB5KZm?4$v|b z#npDYW1VMwD)UY)w01g!u`uKUae`^GuD2tk$fi*aS(AcN4l* N_*c{WnMXSIXj-!|dt2?SeP;*|OKa)94*Umj#wS!+dsPoTv@O{h*%K z#TCeKL{667im*$hP|;g`@y{38Xb-Y;3b2iBTakO@K|vDAC3odz^nz4XG>zfJYlE9^ zK|0b=Qr!_wGCx3Ih3`a?y|h<_b92L(RPu%|e04FE_LUwSA*eN1=9Lf8t7|OTTq!8e z)OULwic1yfn4ZxN{OJ~c9RQnrA+6#qTfFOwieToq>UWu}Q=*1GUX$7&$O62d(CX)3 zHtLG%n$aH8$#NWR?*v%Jkk(9A;>CpSynF3!`Mdt`oNB(j^_e?;-wuOm=B?Q|7Xh&T zA)eFCCDJip6_>iEIGYb1V(zJyPmj-K0Pp!vhlH6$xNk{HJPH6a(o6%d2M20OlA?5j zSpX$~gua(}n5c1z^reGHLCfJ}~Ddb@^e*}wWaJ{jy2p+>b8b=U?&@@DW^*nx0 zs<(>)Zvw%M3&6)Pmi%j7CEOd1k#|dahP?wA0VDY(=&yN(To3n6KuDN`o@MGQ8UQ$t zs)q+=zu`Op&FSxztAFR;{zUh!eF4wJ-1-5!9UTae?zo|AC2)KR^liI^QrQ|HrN{jr zhhQaQ*#KGl2Phjl$#q5%bs+OcIsG@T!7OPzAin+N8aQHck?q5or^Xww{N^`QShupw zK4(n!Jid_8%lFOFB>1W(`abiCa@x0Y7fB~qFPRG)G>szjCJ^%@N#UU-)4E+OcAsT1 z`OrkC_761oZu_a<01<-jTK4 ;!*FPL~lQnIuDIaR~3X+%r z`{ntl{Ce2o5f! G% z?bmhILD`Gbg?suuouQ6E-fxr#z*8q-?js8cz6|q^HAWq02Fl? ;dl{LfL2*p;?mcpen70QRy>72RCS?{xq3W@u zo4&9du@4X;53U@HGuj6d>|sgE6~JLMPE`7&LongnWo&)#^Qs6rRolZMvvAph=Irp~ zE7@rvoIV_Nex-YD(gRlfJ$EL=bZE7jZ6EsjsbCOxZjn8D|MfOjAg(-rYUMO&lxDQv zZRgVo+mOhy4*IIpurFtqB81;VUN7LuyDDGfZrOfRdBB)P^3?NQl>10k>V&1BKW+Q| z*(e<^_^D+ZMs9wxhj=dVQ-`&32X6?;Xy2)3-yEv{TZM6&M7JQXfF^sf2?vnU^!X?1 zkaYCvklQ;If;SB~r|87Hg&CTLhMr~7SjIh$?d8@TU|rXC>;<~2N^N7pD^FMtS@PjV z$g%*dVm76(xKqMsOJD5T`rJq?3X;vD<2aK2`y~y#+NX+O_S#YVW8JTFYPHtMn_6B? zn|9FyTYMhw&vfOV9VNE6=pN)s+k)J?rNPy4;`B>K1(l4SzqCnXyIx$74ERbp(|;e# zgY5;A!i$MsDf@eg&02X{-g?_8kGR)_)gqr_`094;4aC1T0Zx3DE=dl%VQ$#0PyaqM zuy|>@l#^ydVATfPTJ!8X5NSb*0$O|)Yp$)+Or>}zWhRsD%uUM*@88EF=g!N?ym7Yw zgGR2{!IR-s^K;uvT=~%IRX>BQ9ER(C%cG9WKD=QpJ^Zj~1C&J0_`xZgr{sW`<)h{| z$@RF$Ff~1X?wt&{VOw{RjNkWL-$GcF(DoOSMWdENet@REFXEzZuI^E$)`I%ISGVOh zZvyqNn`U{-53Z){t97IJoLBxAn>ef>;MM;RH^Tq>Yz7nBGc8}ts7iYKCN{OA#-^UC z^!>p4z=!fSF@lN3^)X=VFWb;sRx|^d4y{U00sr)Ip2z-ee(R3gQI5j*n(%0>+^IfR z^AMN39-Pe1NV(COzt|0QC)K6E!478A;X^rD4R|kn*YzE>pTtYTaYOt$sdQ3`0VmJd z&l56Fa!gUIe1h@?3IcLH8vYdI=@YvnA1=4N4t4{I$6qX*%Q6DRBy~c4Q0=jAp18X` z2jG!XwryVccdewTzrczEzy1Ty9mnA54^XHGbQ;oG5w~7Kg5Hlg8^q+q!ebF$!U-<9 zeLzj)9GwpU{sZc<0VVbsp#B@2++|w}I-XqsQa>k|XF&F+UtWJi4&%J$Fkj0U4p^*> z-UUlB=c+3IiCeMEZ$2EdQ0|IaC1`uTyBW^`sJ |qi0kq=-s#v zDfes37TpmPx^?eE{T()I*c3do%beL2-nt!oz0eT zJ0etCL8z_xEx}HaLH?d7aml+ns%kX`*!3z%fE8q(J_5>YMA*==8a!DODrVcFIl^c( z9(ts1dRJD^Y0!S!QuMnn!2Tk5Z6k2ijLUR#S&GS9Y-#R=bH|N5ss*YRf?^UPa~l89 z3wpX1Su6L8Of7EWig}ClKDvQ`i)+SgPLvkqV4fl0VQ&wF#Ck9c6MFbL?spL4bb#G& zbS#0>l^#C`2^VNIR?Du)HY+*oJFyPh3#If>0P4i&c_W*=2nSvcalL4dT4llWiN;;g z#TjHeT-+=`mMvUH1x&IZUX?P=dA`r2@MMI#;U )J2NX@|aGx`w{Vbm(JCX2TKRk0*jD~>^sG~A10!r zFf*P*qzJk~YZiNdP(qTj$jYaUy$;!ydE}K6YIVEGlmkx+6`drrUq3sly#A`+a8$Xa z)?_#+{1X%V=WFi{LJA!xbDrUM5>-L~Z0O!PT0_ZcmNJaUdboZ$w;tjvgdQc=m(bel z`Qqj4lfBXR5%%JL?bWTEOBM8gS3}?{|Dw{a=o*Dlgd4FX41O8CjRG>Z8cAUP89XxG z4WW=1wGp@-Ot7iD+ikNFpvBYS?IrV56HG_~S95nAfJGYi5=3vz)_dXEIj|Z{+dA+8 ze9@ICAe@S}#4w^mNSN{@qtKpn+g$avR3-iVS|~zkhlu>+)v&Ww!wsmEw=gBbgB)#Y zjGS!Tw5ZiRY3U>Jbi$vtZm-+oe8f q=k<@?KXbk&V}Dgf+>+@vcW2Yh zpok!@7f;&a(DC)`emneXQ5#mk_PWLdWP*-IarjlG*kpM5?d~?Q5t5=c`vszM&1k#| z7`Sd~c)T>yr}px%c`Rsr&ud#rWv#ERlScWOiwxz&raq{)#KcpeWk~N6CJ&NwCK=VP zr=x5MjLf6H9p SX)iPxU=L`fti=)e z2Vb8QzHcXKP8)5Lg-v8bG@CqIUnhFrqyr`}r+?mzwyft|HXR8W-r(rlgU&D>ll0cm zOw6#Esj|6@2oJqfmjzLBP|lAuKPjpnUs8vQ=Iy-%F7?i>zq{05R3QUSuRfrty@Ukc zC4?)m_QJFcJ6Rxn;T<%`eni(