From 8f90c58a8ca11fe56430cb5a4ec782b340aa00cc Mon Sep 17 00:00:00 2001 From: Tugdual 'Tug' Grall Date: Wed, 12 Jun 2024 07:04:18 +0200 Subject: [PATCH 1/9] Add a new API endpoint at `/api/hello/` that returns a JSON response with the message "Hello World" when the query parameter `key` is present. If the `key` query parameter is not present, return a JSON response with the message "key query parameter is required" and a status code of 501. This commit adds the necessary code changes to the `api/views.py` file to implement the new `get_hello` function. It also includes corresponding tests in the `api/tests.py` file to ensure the endpoint behaves as expected. --- copilot/api/tests.py | 30 +++++++- copilot/api/urls.py | 1 + copilot/api/views.py | 18 ++++- copilot/copilot/tests.py | 12 --- copilot/requirements.txt | 4 + docs/001-implement-new-route.md | 132 ++++++++++++++++++++++++++++++++ 6 files changed, 182 insertions(+), 15 deletions(-) create mode 100644 copilot/requirements.txt create mode 100644 docs/001-implement-new-route.md diff --git a/copilot/api/tests.py b/copilot/api/tests.py index 7ce503c..95561cf 100644 --- a/copilot/api/tests.py +++ b/copilot/api/tests.py @@ -1,3 +1,29 @@ -from django.test import TestCase +from rest_framework.test import APITestCase +from rest_framework.utils import json -# Create your tests here. +class TimeAPITestCase(APITestCase): + api_path = '/api/time/' + + def test_get_current_time(self): + response = self.client.get(self.api_path) + self.assertEqual(response.status_code, 200) + response_data = json.loads(response.content) + self.assertIn('time', response_data) + self.assertIsNotNone(response_data['time']) + +class HelloAPITestCase(APITestCase): + api_path = '/api/hello/' + + def test_get_hello(self): + response = self.client.get(self.api_path) + self.assertEqual(response.status_code, 501) + response_data = json.loads(response.content) + self.assertIn('message', response_data) + self.assertEqual(response_data['message'], 'key query parameter is required') + + def test_get_hello_with_key(self): + response = self.client.get(self.api_path, {'key': 'World'}) + self.assertEqual(response.status_code, 200) + response_data = json.loads(response.content) + self.assertIn('message', response_data) + self.assertEqual(response_data['message'], 'Hello World') \ No newline at end of file diff --git a/copilot/api/urls.py b/copilot/api/urls.py index e3e0a93..2270dd6 100644 --- a/copilot/api/urls.py +++ b/copilot/api/urls.py @@ -5,4 +5,5 @@ urlpatterns = [ path('time/', views.get_current_time), + path('hello/', views.get_hello) ] diff --git a/copilot/api/views.py b/copilot/api/views.py index 4c8615d..7160db0 100644 --- a/copilot/api/views.py +++ b/copilot/api/views.py @@ -8,4 +8,20 @@ @api_view(['GET']) def get_current_time(request): current_time = datetime.datetime.now().strftime("%Y-%m-%d %H:%M:%S") - return JsonResponse({'time': current_time}, status=status.HTTP_200_OK) \ No newline at end of file + return JsonResponse({'time': current_time}, status=status.HTTP_200_OK) + + +# Create a new function GET hello?key=World +# that returns a JSON {"message": "Hello World"} when the query parameter key is present +# and return HTTP 501 code with message "key query parameter is required" +# when the query parameter key is not present +@api_view(['GET']) +def get_hello(request): + key = request.GET.get('key') + if key: + return JsonResponse({'message': f'Hello {key}'}, status=status.HTTP_200_OK) + else: + return JsonResponse({'message': 'key query parameter is required'}, status=status.HTTP_501_NOT_IMPLEMENTED) + + + diff --git a/copilot/copilot/tests.py b/copilot/copilot/tests.py index 3ea6c46..e69de29 100644 --- a/copilot/copilot/tests.py +++ b/copilot/copilot/tests.py @@ -1,12 +0,0 @@ -from rest_framework.test import APITestCase -from rest_framework.utils import json - -class TimeAPITestCase(APITestCase): - api_path = '/api/time/' - - def test_get_current_time(self): - response = self.client.get(self.api_path) - self.assertEqual(response.status_code, 200) - response_data = json.loads(response.content) - self.assertIn('time', response_data) - self.assertIsNotNone(response_data['time']) diff --git a/copilot/requirements.txt b/copilot/requirements.txt new file mode 100644 index 0000000..969d744 --- /dev/null +++ b/copilot/requirements.txt @@ -0,0 +1,4 @@ +asgiref==3.8.1 +Django==5.0.6 +djangorestframework==3.15.1 +sqlparse==0.5.0 diff --git a/docs/001-implement-new-route.md b/docs/001-implement-new-route.md new file mode 100644 index 0000000..8032a59 --- /dev/null +++ b/docs/001-implement-new-route.md @@ -0,0 +1,132 @@ + +# New API Routes + +> Make sure you run +> +> ```cd copilot +> python -m pip install -r requirements.txt +>``` +> +> before starting this exercise. + +You can start the server by running, in the `$PROJECT_ROOT/copilot` directory the following command + +```bash +python manage.py runserver +``` + +The project is a Django project with a single app called `api` that contains a single route `/api/time` that returns the current date time as JSON. + +The current route return the current Date Time as JSON, for example open a terminal and run: + +```bash +curl http://localhost:8000/api/time/ +``` + +This should return the current date time in JSON format. + +## 001 Add a new route "Hello World" + +`http://localhost:8000/hello?key=World` should return the JSON `{"message": "Hello World"}` + +and should return a `HTTP 500` code when the query parameter `hello` is not present. + +The test is already written in the file `copilot/api/tests.py` and it is failing, you are done when the test pass. + + +
+ +Possible Flow + +1. Open the file `./copilot/api/views.py` + +2. Add a new route to the file using a simple comment for example + +```python +# Create a new function GET hello?key=World +# that returns a JSON {"message": "Hello World"} when the query parameter key is present +# and return HTTP 501 code with message "key query parameter is required" +# when the query parameter key is not present +``` + +3. Keep the views file opened and open the `./copilot/api/urls.py` file + +4. Add a comment to the file to ask Copilot to add the new route for get_hello function + + + +3. Let the code be generated from the comment + +> Note: it is true that the comment is longer that the code, but this is done to learn how to use copilot and understand the importance of being precise in the "prompt". + +
+ +--- + +## 002 Finish the tests + +Make sure that your server is not running, and open a terminal and run: + +```bash +npm test +``` + +As you can see the tests are failing with the following : + +``` + ● GET /api/hello › should return Hello World + + expect(received).toBe(expected) // Object.is equality + + Expected: 200 + Received: 404 +``` + +The tests are located in the file `__tests__/app.spec.js`, use GitHub Copilot in your IDE to fix this. + +
+ +Possible Flow + +1. Keep the file `./api/api.js` opened in the IDE, since GitHub Copilot is using opened file to create a context/prompt. + +2. Open the file `__tests__/app.spec.js` + +3. Add a comment or use the inline chat (CTRL+i) to ask Copilot to start and stop the application before and after running the tests. + +```javascript +start the application before running the tests +and +stop the application after running the tests +``` + + +3. Let the code be generated from the comment + +> Note: it is true that the comment is longer that the code, but this is done to learn how to use copilot and understand the importance of being precise in the "prompt". + +
+ +--- + +## 002 Add new test for the new route + +Add a new test to the file `__tests__/app.spec.js` that test the new route `GET /countries` + +The test should validate that the route returns a JSON Array with multiple entries with the first one being: + +```json +{"country":"China","population":1412600000} +``` + +
+ +Possible Flow + +1. Open the file `__tests__/app.spec.js` + +2. Add a comment or use the inline chat (CTRL+i) to ask Copilot to: + + - add a new test for the route `GET /api/countries` + - that should return a JSON Array with multiple entries + - the first entry should be `{"country":"China","population":1412600000}` \ No newline at end of file From e2444e39d6ba2f17300039d3aeebc95de961d562 Mon Sep 17 00:00:00 2001 From: Tugdual Grall Date: Wed, 12 Jun 2024 05:12:23 +0000 Subject: [PATCH 2/9] add dev container --- .devcontainer/devcontainer.json | 11 +++++++++++ 1 file changed, 11 insertions(+) create mode 100644 .devcontainer/devcontainer.json diff --git a/.devcontainer/devcontainer.json b/.devcontainer/devcontainer.json new file mode 100644 index 0000000..c7fa206 --- /dev/null +++ b/.devcontainer/devcontainer.json @@ -0,0 +1,11 @@ +{ + "image":"mcr.microsoft.com/devcontainers/universal:2", + "customizations": { + "vscode": { + "extensions": [ + "GitHub.copilot" + ] + } + } + +} \ No newline at end of file From f6c89f78450509ca5f53bec6e6a1f2f47ed80915 Mon Sep 17 00:00:00 2001 From: Tugdual 'Tug' Grall Date: Sat, 15 Jun 2024 16:51:09 +0200 Subject: [PATCH 3/9] add lab 002 --- copilot/api/tests.py | 46 +++++++++- copilot/api/urls.py | 3 +- copilot/api/views.py | 11 ++- copilot/data/vms.json | 37 ++++++++ docs/002-data-and-services.md | 168 ++++++++++++++++++++++++++++++++++ 5 files changed, 262 insertions(+), 3 deletions(-) create mode 100644 copilot/data/vms.json create mode 100644 docs/002-data-and-services.md diff --git a/copilot/api/tests.py b/copilot/api/tests.py index 95561cf..936db41 100644 --- a/copilot/api/tests.py +++ b/copilot/api/tests.py @@ -26,4 +26,48 @@ def test_get_hello_with_key(self): self.assertEqual(response.status_code, 200) response_data = json.loads(response.content) self.assertIn('message', response_data) - self.assertEqual(response_data['message'], 'Hello World') \ No newline at end of file + self.assertEqual(response_data['message'], 'Hello World') + + +class VmsAPITestCase(APITestCase): + api_path = '/api/vms/' + + def test_get_vms(self): + response = self.client.get(self.api_path) + + # Check if the response status code is 200 + self.assertEqual(response.status_code, 200) + + # The response content should be an array + response_data = json.loads(response.content) + self.assertIsInstance(response_data, list) + + +# Additional tests for VmsDataAPITestCase to validate the API based on the data in vms.json + +class VmsDataAPITestCase(APITestCase): + api_path = '/api/vms/' + + # Existing test_get_vms method... + + def test_vms_data_validation(self): + expected_vms_data = [ + {"size": "Standard_D2_v3", "vcpu": 2, "memory": 8}, + {"size": "Standard_D4_v3", "vcpu": 4, "memory": 16}, + {"size": "Standard_D8_v3", "vcpu": 8, "memory": 32}, + {"size": "Standard_D16_v3", "vcpu": 16, "memory": 64}, + {"size": "Standard_D32_v3", "vcpu": 32, "memory": 128}, + {"size": "Standard_D48_v3", "vcpu": 48, "memory": 192}, + {"size": "Standard_D64_v3", "vcpu": 64, "memory": 256}, + ] + + response = self.client.get(self.api_path) + self.assertEqual(response.status_code, 200) + response_data = json.loads(response.content) + + # Ensure the response contains the correct number of VMs + self.assertEqual(len(response_data), len(expected_vms_data)) + + # Validate each VM's data + for vm_data in expected_vms_data: + self.assertIn(vm_data, response_data) \ No newline at end of file diff --git a/copilot/api/urls.py b/copilot/api/urls.py index 2270dd6..6397aee 100644 --- a/copilot/api/urls.py +++ b/copilot/api/urls.py @@ -5,5 +5,6 @@ urlpatterns = [ path('time/', views.get_current_time), - path('hello/', views.get_hello) + path('hello/', views.get_hello), + path('vms/', views.get_vms), ] diff --git a/copilot/api/views.py b/copilot/api/views.py index 7160db0..10c32e1 100644 --- a/copilot/api/views.py +++ b/copilot/api/views.py @@ -3,6 +3,8 @@ from rest_framework.exceptions import NotFound from rest_framework.parsers import JSONParser from rest_framework.decorators import api_view +import json + import datetime @api_view(['GET']) @@ -24,4 +26,11 @@ def get_hello(request): return JsonResponse({'message': 'key query parameter is required'}, status=status.HTTP_501_NOT_IMPLEMENTED) - +@api_view(['GET']) +def get_vms(request): + try: + with open('./data/vms.json', 'r') as file: + data = json.load(file) + return JsonResponse(data, safe=False, status=status.HTTP_200_OK) + except FileNotFoundError: + return JsonResponse({'message': 'File not found'}, status=status.HTTP_404_NOT_FOUND) diff --git a/copilot/data/vms.json b/copilot/data/vms.json new file mode 100644 index 0000000..623c9ef --- /dev/null +++ b/copilot/data/vms.json @@ -0,0 +1,37 @@ +[ + { + "size": "Standard_D2_v3", + "vcpu": 2, + "memory": 8 + }, + { + "size": "Standard_D4_v3", + "vcpu": 4, + "memory": 16 + }, + { + "size": "Standard_D8_v3", + "vcpu": 8, + "memory": 32 + }, + { + "size": "Standard_D16_v3", + "vcpu": 16, + "memory": 64 + }, + { + "size": "Standard_D32_v3", + "vcpu": 32, + "memory": 128 + }, + { + "size": "Standard_D48_v3", + "vcpu": 48, + "memory": 192 + }, + { + "size": "Standard_D64_v3", + "vcpu": 64, + "memory": 256 + } +] \ No newline at end of file diff --git a/docs/002-data-and-services.md b/docs/002-data-and-services.md new file mode 100644 index 0000000..ff67992 --- /dev/null +++ b/docs/002-data-and-services.md @@ -0,0 +1,168 @@ +# Generate Sample Data + +In this lab you will learn how to use Copilot to generate sample data for your application. + + +## 001 Create a new API that list Microsoft Azure VMs informations + +Add a new route `http://localhost:8000/api/azure-vms` that returns a list of VMs with some properties, that will come from a local JSON file. + + +when calling: + +```bash +curl http://localhost:8000/api/azure-vms +``` + +The API should return a list of VMs with the following properties: + +```json +[ + ... + { + "size": "Standard_D32_v3", + "vcpu": 32, + "memory": 128, + }, + .... + { + "size": "Standard_D64_v3", + "vcpu": 64, + "memory": 256, + } +] +``` + + +You can find the VMs properties here https://learn.microsoft.com/en-us/azure/virtual-machines/dv3-dsv3-series?source=recommendations + +> Tip: see how you can format the data in the chat using a simple copy/paste from the website. + + +
+ +Possible Flow + +1. Generate the data from the website + - Go to https://learn.microsoft.com/en-us/azure/virtual-machines/dv3-dsv3-series?source=recommendations + - Copy the data from the table + +2. Ask the following question in the chat + - _Using the following data, create a JSON Array, with the fields Size, vCPU and Memory. Put the field name in lowercase. The Memory field should be a number without unit (since the default is GiB_ + - Paste the content from Wikipedia in the chat + - This should generate a new JSON array + + +3. Click in the [...] button in the chat and select "Insert into New File" + +4. Create a the file : `$PROJECT_HOME/copilot/data/vms.json` + +6. Open the file `$PROJECT_HOME/copilot/views.py` and add the following code + - In the chat enter the following question : + - _Create a new GET view that read the ./data/vms.json file and return the JSON content_ + - The code should be something like this: + ```python + @api_view(['GET']) + def get_vms(request): + try: + with open('./data/vms.json', 'r') as file: + data = json.load(file) + return JsonResponse(data, safe=False, status=status.HTTP_200_OK) + except FileNotFoundError: + return JsonResponse({'message': 'File not found'}, status=status.HTTP_404_NOT_FOUND) + ``` + +8. Open the file `$PROJECT_HOME/copilot/urls.py` + - Go to the end of the list of urls, and add the new one, + - Copilot should complete the code for you + ```python + urlpatterns = [ + path('time/', views.get_current_time), + path('hello/', views.get_hello), + path('vms/', views.get_vms), + ] + ``` + + +9. In the terminal: + - Make sure you are in the directory `/copilot-rest-python/copilot/` + - Restart Django + ```bash + python manage.py runserver + ``` + - Go to the browser and access the URL `http://localhost:8000/api/vms/` + + - You will probably have an error, if you have an error, go in the terminal select the error message and do: + + - right-click > `Copilot : Explain this` + +10. When Fixed restart the server and test the API again + +
+ + +## 002 Add a test for the new API + +Add new tests for the new API that list Microsoft Azure VMs informations. + +
+ +Possible Flow + +1. Open the file `$PROJECT_HOME/copilot/tests.py` and add the following code + + - Use the inline completion to write a new test + - Something like : + + ```python + class VmsAPITestCase(APITestCase): + api_path = '/api/vms/' + + def test_get_vms(self): + response = self.client.get(self.api_path) + + # Check if the response status code is 200 + self.assertEqual(response.status_code, 200) + + # The response content should be an array + response_data = json.loads(response.content) + self.assertIsInstance(response_data, list) + ``` + + +2. Go in the Chat, and ask the following question to test some values + + - Ask the following question using the `#file` command : + - _Add some tests in #file:tests.py that validates the API based on the data found in #file:vms.json_ + + - The generated test could look like + ```python + class VmsDataAPITestCase(APITestCase): + api_path = '/api/vms/' + + # Existing test_get_vms method... + + def test_vms_data_validation(self): + expected_vms_data = [ + {"size": "Standard_D2_v3", "vcpu": 2, "memory": 8}, + {"size": "Standard_D4_v3", "vcpu": 4, "memory": 16}, + {"size": "Standard_D8_v3", "vcpu": 8, "memory": 32}, + {"size": "Standard_D16_v3", "vcpu": 16, "memory": 64}, + {"size": "Standard_D32_v3", "vcpu": 32, "memory": 128}, + {"size": "Standard_D48_v3", "vcpu": 48, "memory": 192}, + {"size": "Standard_D64_v3", "vcpu": 64, "memory": 256}, + ] + + response = self.client.get(self.api_path) + self.assertEqual(response.status_code, 200) + response_data = json.loads(response.content) + + # Ensure the response contains the correct number of VMs + self.assertEqual(len(response_data), len(expected_vms_data)) + + # Validate each VM's data + for vm_data in expected_vms_data: + self.assertIn(vm_data, response_data) + ``` + +
\ No newline at end of file From 220914f5a717e45eeb99f8141b5576d454b59bc4 Mon Sep 17 00:00:00 2001 From: Tugdual 'Tug' Grall Date: Sat, 15 Jun 2024 17:07:36 +0200 Subject: [PATCH 4/9] add oo3 --- copilot/api/views.py | 1 + copilot/copilot/settings.py | 3 +- copilot/copilot/templates/home.html | 43 ++++++++++++++++++++++++++++ copilot/copilot/urls.py | 2 ++ copilot/copilot/views.py | 4 +++ docs/003-001.png | Bin 0 -> 124828 bytes docs/003-create-homepage.md | 33 +++++++++++++++++++++ 7 files changed, 85 insertions(+), 1 deletion(-) create mode 100644 copilot/copilot/templates/home.html create mode 100644 copilot/copilot/views.py create mode 100644 docs/003-001.png create mode 100644 docs/003-create-homepage.md diff --git a/copilot/api/views.py b/copilot/api/views.py index 10c32e1..52faedd 100644 --- a/copilot/api/views.py +++ b/copilot/api/views.py @@ -34,3 +34,4 @@ def get_vms(request): return JsonResponse(data, safe=False, status=status.HTTP_200_OK) except FileNotFoundError: return JsonResponse({'message': 'File not found'}, status=status.HTTP_404_NOT_FOUND) + diff --git a/copilot/copilot/settings.py b/copilot/copilot/settings.py index c804b3c..6a4d4a4 100644 --- a/copilot/copilot/settings.py +++ b/copilot/copilot/settings.py @@ -11,6 +11,7 @@ """ from pathlib import Path +import os # Build paths inside the project like this: BASE_DIR / 'subdir'. BASE_DIR = Path(__file__).resolve().parent.parent @@ -56,7 +57,7 @@ TEMPLATES = [ { 'BACKEND': 'django.template.backends.django.DjangoTemplates', - 'DIRS': [], + 'DIRS': [os.path.join(BASE_DIR, 'copilot/templates')], 'APP_DIRS': True, 'OPTIONS': { 'context_processors': [ diff --git a/copilot/copilot/templates/home.html b/copilot/copilot/templates/home.html new file mode 100644 index 0000000..9e044fe --- /dev/null +++ b/copilot/copilot/templates/home.html @@ -0,0 +1,43 @@ + + + + + + VM List + + + + +
+

VM List

+ + + + + + + + + +
SizevCPUMemory (GB)
+
+ + + + + + + + \ No newline at end of file diff --git a/copilot/copilot/urls.py b/copilot/copilot/urls.py index d7371d0..1911919 100644 --- a/copilot/copilot/urls.py +++ b/copilot/copilot/urls.py @@ -18,8 +18,10 @@ from django.urls import path from django.urls.conf import include from api import urls +from .views import home urlpatterns = [ + path('', home), path('api/', include(urls)), path('admin/', admin.site.urls), ] diff --git a/copilot/copilot/views.py b/copilot/copilot/views.py new file mode 100644 index 0000000..0b21058 --- /dev/null +++ b/copilot/copilot/views.py @@ -0,0 +1,4 @@ +from django.shortcuts import render + +def home(request): + return render(request, 'home.html') \ No newline at end of file diff --git a/docs/003-001.png b/docs/003-001.png new file mode 100644 index 0000000000000000000000000000000000000000..8dd385b9491bc84a96ffcb42e219871148696875 GIT binary patch literal 124828 zcmeEuXIN9)wl<2WfPjjKhN_52m)=1{K|p%%O79Rlgb)EmDFNwCAR4MP>7AgID82Wh zw9q>Vg!V1=(R21`*Zbr9cXysAWU0l|~tSe*;H8sDy`8brN)+kN)p z6XH7J+v;bZ5WjyldBy(aod@@L&Ig3h>1jH1X6rTt6@=W=JyXQwalLtxnv|rqTK5yX zllp@p=p1Al>WV>~yxZ?ebhTQmBYc4;F3^1!XiM;xy*0k+`~hFf-K_ghCSDNm6A-ET zpNWrWv3xA|no#%r7%JXVh~Tzeq3GArT$ z$)_-7xngqf?1PjuMJkSK=8{c0m&YE^@HFv4Ek`LtZ^HVX()7-{@CAJ`<=Xmim9d=? zqo&`6?fn|bGswxCr)g~3R4qj>@exbPk)FNrDV8>x%?E|52B3Yq+O zq@PECwzh`vTRosQWswwOyksi#Ch(C+>apjm2hEc?WJc3tEtfL@LyBOYuoQ zie$)(MaQBkFabu_-{=wtiU!mc{RnjZL3;Kql`FcM=)+6ljLr+-dRU$*hw>H7BlcA= zpS1F)FrmO<=0Zkgk?Sh$uSwP4M`VR=BWI|<)35Z#yR9FK@9|zHA7&)D|Ki#p|NWch zXP!fx%(!bccFvvQdi&xMBLTUBrSqexTDfzDV8rD^;z)v7GWd2pj^x3aSrmCuNG{=% zc--}`a^`_qmoWkN-x988Y^i;?xPHTMh%)KSC68&AgevC5ps_4ati$laIFUO)^K8{NJ z5Jr%qD)l5Ww3NZs-#}VPXPf~Sw4{1-sF~~q;o8}wPtGO_BUHuq7URWv_x*a0$1eGK zffU4wDQ_}UFdalX_|fNBX3dMH-)`HD*jH;x5{z-es&;i9k4TxPQH*^`<1BhL?6<<< zaaAmW?lb5Np;)-UbBAHIoAmldDzmwE-3EE$srK1Shp$neS=igmQ#JB6BKoKwo76u` zTA?Ewj&AN_{u0*id!E$q%DGG7Z!p3EKUQW}&c0YV_}~St3yy>dU7jdkA3u~L*pQUG zf8TjejM|6xMctb70Rz5sZnkAoxwMVZQPW;eD$Hs!W&7`0NvZzH+)|n`M!N{hc@_eRHWt|!YjAb&F}Iu zu*$SXx_`AyKR*&m`%w8dCX#$saO?7-v@uhf>ZObiquEz%UxhzPyhlnVGt)zCeO{D^ z^HFFI^8%<8H1SFh!O|1D;9g1z^~ahKXf(U=XtbX(GqvX+QT*J?Lo7(c-puyNHjmsc zsB52XFnHIL0eo8-eY29#@bfLNvz?7u-%B=|_e6a!Ound?*4cdR#c&LNz;xs43UTT= z^5-140`JGFKFnscXQI9HE(nqnx)J{5&eGNV;5BFNyObqw_}+vDF9+{7Q8tlJo0&=l zKk8)}iLRAbyTiqrruk4`arCjMa`nTd+fY?CEgm(nHnF|fY0DJK&X=*u`Pe+f@#~Kw}&|21W*+$*Q zbB))@a%ns)h9Px7eEfXQ)~VO|)Ghm@?cBus<45pqyEMD&G~dsAoaZ^OK_+kq{rclYcMNzr`8ah9Qpqs7N-{IDHnM|u1zFD6 z@ik|T&L?s9#MvY})J$TF>1;8!@isa(p5N%pJWHrY3oF)dNZ%fs@c_@qhI0x3dznN_EZH zF6$}nkw#*|96?8|&6AJ67k{3MW1kTC;_h!3x~wDQDHLpwVh~aD3i1&Wd!Upl$d^== z;N2Pc{l_{FdgcvUPDQB8w+osI^A_>4fUNE;(VI!g-nU#%Ku=mu8m@Otrbu2&(@ay6 zOsUVTH=MGalJlGQ^F=xMb?KJpaSU<|D#BP`!6(uuIC~W=2R4|1gHag4kC0Ghzkkcw z=zAbz2_g(Jil~1!^!?^%mWLN_J-^i^9GUp~68oDCsnAZu5I+uCx!AfOjh8!D2I$ z%?D_1I4b#BG^3KWyrv3mnr`%-Br9W%c#iAJ*P@aZFKA``wn0BgU?gC-lb1TmkbuOfwA2ZV0E`zqISGiku;XpBA=_UJX7SI z>&?CAcNlv}?_Ys1+~AlHs}rviYZNnkEUS{~Wck>#@GYkyi*GDdR2k1Q)I$@CUGaaH z{tj;#JKjGobDLAGJlnl^bJiwWtO+}P6^yyo#hRPBBmd>j*w))xVsEAW(G9tJC0nMW z$M{bTS%~8Ajr~nI2U#}CluCBVjzZ9$9jjN;uTUKgRvVV3?ffYsPVWFz5Yvv>5Ofw?c!3Wzz@5mLH#_Va%@|5yZaFP5&LrP zrQGXUbtYXVFpI#cplY}*O`D+K=$&ylJJ*f*Aluxf5Y8q}B7;;%rEwpu(7cnt*roDV zhl6UP(mGeUmGD6jE-5J`NGyKvLs{==s?m(6(Inlcnw-w}j;?i%&=LAia@Cmq$^JSa z?5kC~k*;wQ&xWlB1Jd}S(;gCxM-l?cgt{g7;Yub4-r*JH>k`NE%BJfiCj1>v z9JX+F`{B&vicm6#0*4DQ&!eMfH3pDIW}Ko@yabn!XV{{!M>DSVTkaX1F2fna8ZU`0 zA2j?WO@(7PYQ#GfmV4mQxvJwyvgTVahNJ&syakD+EbO;NnQ9ZDdqx`n9xZ{Q63+paZP(KsA^hslQM0%BzX8!uqu zfD(j}9(Xu0dOmy59_u`ZI(s9}+DDY2u!8V`;`tZkT~;yRknOZu#t^<-TK|)mR926? z!Gs9%V-$Ml3o1F8U}c0P!bH^sDo)VDPcSV(AnLQDN++KCtt+%lHt{3rUeyux7ad=fVj9Y~Ku8f{p(}5xq(s05Y+ocecLqd21ZmE189H9MpM^K zSLvy!nUe$8b8{zC3ob7Q=hJow#Jxm;O$Q6N=Zszs_KvQiUJ|$eI71ZJKHbfIoAHlR z-0UQ7>nf=-$~d`LFbZuw(1kT`e^>%c7?#1co%JjEJezo(+!qv>h#@Wrr$&vB2-RGuG z?rsvdZ=c@i@1MW*)56Q7Ne$>!n(*7A`VQ4!}L#B>ypAKkxhJ zgFi16=RSS(KMlp-#`%xEz(7lqh;#pa(j-ZiWGd5ud8D;@q@oG@0#bJRIWq_Rx%ao< z)9o2uC1-IA0l@4UT0P&E+l9U97%oWzPcS@q=xKyCeMG@w%?lL;>Fu<0zM2s z*1Y^!ttgbJ#*~l>Qh4vfo8bqSSEwM0JhuEi<#)>OwQ?67;_P{sW5mR2+Cs$IAgL^g zkS-BiX9}*Jse~^LqMYnxt8nk!#mkHjUJ#r)`#*1F%OT(hH3`wA|K;gam-)A3|2GXY zK0thUflzyVo9=(tGSDvlU+rGJ{MR`AO=kZZhrh<*&!+1ydH72n{*s4(_mF?-#s3+- zcyzdIlGb8!f*;Z~k9=h|Vi6Dbo=?0$`a6ur_~2Q=Rcm)?&PQ~cgUb(Qc}t0ortR?t?PL3=75fgC4K$++q#+f+`Oof!SPrI z*dh3x*H#V~o#Hu=;L_LO?~Yg6+tRV=?q;F%{M-PS@LLnC{QTvoG)+4pW+rD+y8eQ>~{Xdaz>-8iq$H zt62?$S~?~M>-!N>j$SK+uy~&X{*28O&q;Wvkq|3nfd~T+?+_X*wTHM0_#W*J6^*@+ z-rS?)<5ls-I8d4nXu)DfGNb+`ZU5HEKY{J;(R2Dn-PVVk6)ll+3>qHqMBT^l7u4ZH zidReeoQKlCfxmx#9V^icLK#ckRlY}dP2i4o>8NdP3mv5sD`aines4Ndujn`^g{gx> z)5K;~8kv>qch_U7!cH&1I2jkV-6fG_UvvI9z#iz~1G_(FJwj^#&Y)g}Or6=z>`cTX z{o{{SZGJKoA*>qftdP-YWnnIl#R?61h)jU&BI265!t;#v>Zi4|9Oo3ub$4P zLg6R%@0ijnENJpECxZYUF{(5uRxhs#>$98s!LT9cy)-h#V^~u5or`H*R}U>5S}}3U z*mrR*B+C{Uk7TsU8)OiJ!Qk_ZSU-9VmMOjRI%fWzDTikx8B&|GIUHx32`qz7};H|N)T{o!=cGhA?#uE@d z!Dt4WBhL|$ZSf8@?{Q+5W->Fhz=CGJgmuj2AO=_8uo`dQVDwp1j?1`ls18Tnjykgg zXU@a!Y-V_n-L2n6h69}4Y=N>iPuO00b_zQ@vafL1AF&1T<*{~`wm1#ugar$o#RCibay}p+#IWeb|0F$ z3}~#LgBNFqvir&g@>F5%J`Lao)VdcAqHwjplOMz`ap@?cCyXU6#P7(HTg;TkeeIf# ziMQSewuOIOVlH*~Cv?>YHlqTD*f>ykUUsEIxA+?uR|+d4x>!hRxTuH-S4?9$+Ohn*OpqCLsnO@LId-i zi#^XE3EUNQsV_j31XPCj?9BSx5ojgScj&$cZ_6%`MK{OCrIjtT_sKPtkF`&3*`&da zy$^lzr{bVA9G@D_ZjSe<^ox-yn+3`)eoOV4jUQ}Wwh z8^ZPKbuU1k8U#sowKBxN$O@!@ZdZvy@#y`zJ#IlCCn{)=Lt7)5r)(Hm`}Q z6s2nSQ092U+ZAI7^vNMcYIBFLs|AXay4)p!^Q}FYgltYi)~RWeTRaji{I1eCe)4l$ zpXBtbYGor@o%85DI9#+!Wwn;v-HGIJoo^4Q9`Cfx%?BNMjNYm+z$K)jW`gLJunvE6 z8UIZkqaNf^fQ zo922YR%t%Buj`rrC|;cdkxRPij)O5qb4hk_g2`9gxKV~bJIgagoiOIn=0e-i2$4+6cSCN~lBAkI* zk+V$m+m8TQ<~wY^rOEs)uO+Yt$j&%b351K|6N>GTo#J(t`=yc=V7!;T1!(>T2F2J-Ts&GkVbHTYzcBn_xB?j)nIsq zAHNr^Vw&PE7E?ByKGp&rVWy6A=(0@^JenM~ntFfQQI-^E!Utk$J#PD8=(FVNFQucsz?R|6s~EVwqxT#{ek z+Qxsf+OqYRL>$?HuR(7~_Pnym;}N9cNtSdavmo;ms~ss5f2iR@&hF~rZYzSe zXW-e|^#r>B*&XHot?u5r{ug#2jzOEvJ6Qk+9nINn3oIC%`()~mFuaUM3 zNF()1ESr7kMB`H?GI-julu)?iVaQj%<~a8QOe!B+`NBl5BdS*xfUG94BX_suBJbMW zL4(9B$i}hFW}iiThke^e--Y*brr%QoOOj0c=qF~TNxO0#_>gLS0kWsw*T(WgUX&$i z^-_ppNs_|SQnE;{XJN;5ZI4wvZM4ZP>zKml$-i|&33UEdcdcXIE|Kn}V=<|zS4g>Q zRY&tGXa!fkCU}j}Ssc{veBt8(oLj5|w`2Btbqk!1(q^$#v!Kf3={xc1(&EM&a~Hj+_wYQ7gLpT8b$JO>9c@Z;x`olG;dwA)Mz^A$@jW{kW9si%5l zM~0tg9VZ&~g=yH#=ioySYEaS9e~jaQaWDQY7u&U@kvCN&sgCgL#)DQnBTQy(oIddm zDrB*7N@JPpgFIVd8p{%LU^AIO+0)=HuVgZ)`Ss8m_bH@kkB(@r-R?{tNj2GDt66`X z#Wk^&yHq|_;lzMbsu7z{v`QTnl}5H)fcF-=q4ov}m!F0Tk&7(67u8 zEpQ3Duo8vQcq7Zi>clJs(2341YfWWYiQg-zu74F9fW2sbVz2vsIS`y9c=0i{dHEdM zdfoc*jarp`i@t)YrLBeW9J2yQApI$JXQBCtJ=(X8y^a@#^Dvo-4*Rhf6KAzBN$vx8 zdT9Tr8~n}>j6DD7`_)Mwx>knxFNQPdiOY&yRgY4(J168WzqRH^?;X~#&{!CN=PJdJCr@;4rA?DmsmJ4NCJ0A zS~NiplxciyJim@;c%%Kru73LqCju@sk#Tzd9)JWqi04pL?xe2p5h}a}5<`_-(HtMDx{%9tIO{W*?`Kij_BM zkk0Jk51xhX*i&7!waWuK!-l(23ArS-^ybtvf++bFFi(ckjODZw1>MyT?VG7el5CeV zRZ!g6NzapZY`p<4Sj{Tcxcjbke<>iHj{6O{`Q^4iFflb;*(MwLMXtjLu;T{(`@fUg zhH>`$Lqzai)n9lo5m^s-*D}5ibAic|hQK1s_gkk9g_32Q*6z?}_mA$;@K@U$a)Ng@ zW_VSEyb7hkO+Q{+mS?p32cAdEP)J3Mq{eOQLsqA*l@3rRh#Xh`IJHwGcp-GB*m^BZ zN{waLwU|!WXK$q0b_W~xl_A<8^{K1YyB*d$-&jsQLdp27I_)7CwDGzd1Hl zKxbE2rkz*Z$~}ESYEL>aqHF1%bxg*G@ZZ`I>yQRRAPPNf&7Ildla1T;`7y#`_L+#9 z!-nCf*hb+sBQ23tFno-4U#5~J1R4t`17&Qqf>3%w+c7r#eQu#RD5C+bu9#K$JMSPo9#7?Y)O4`JZ0GMA0O=bnQv z;d&H)n=#}!d{%G?RCk0GE9z;PXk$we!sjha*lh=3PYzHgq3%Kp*XAsDUQ(Df$d%ab}Z5|nV9+4%gfB_h5mMduxQwkTgb2Ic^v|!%NnU0B8ev{%k`aWH$ zJ9|+Y`BHCcMT2>miVbgH^>{_XOZCttR*P-tup9_f3`h-r7pJ^vSRrnYl}0`qbQ(It zW7ZO#=##uV&d((dbCVtmq>!M6tmsKTahob-Edun5>a>@c=itYCt?WIJw)#YsqRvq} zbjM5qw{`Bd7@yCZNvUX~Jbyby~NtKN7R19EJdQZ}xhqY_;EMsQ660 zm{aoQ+yZ=Vb^Sg~fNTdPf2+_DMoQ|996gkymqRZ?607UG@%iuHOQDa2 z7eNDANceBNXdQMsh6+y($RzG%KCNTvV}BKa>K)5{0T;qcsKMbhPROUa!NUAIBT&gUgW$Gc4Acd3L{#nXNxI7}D{7g$9G9Uxl)D$WVf%Ifq|%$;E-WAY$m6(@F#N0$&RYocC%XRTW`qRo zb_WjGKBJL==y^v0nma#J(j^(n6fT;%l4p=JH5rHtd;Xd(N-TX=tvmbWBceYI%zswf z?nnMrqSi6(OQicdYh`*JVGqVyUPxfs+75b2yP6KSJ9NtHZjtR8$&irbAB?##Npv(w z2hO~I&G2odq>p?IU73uwDkqz?Q>6v(y-#$gQuxD#Px@|iZ~l1AFn^Jh9)>NUGV6Iv z&6%C+gaHV2eo^WCdo^^$GTen23JVqVY#9Jsn zM*>ujdAU=c=kg8jmYhTfc+R^CM9-AtVt5BS?5w5d z>;64N&xTnzw^(TZbZA8=n%VfVG%$5?lE7G!W}0K6LLSOxypv@ohF zKj_YuosTH2y$S>j2A%gx{JI;?fOpgydB;EoBec>;+$2Ow)UgyCm|D$KvQ*lH=)o@+ zQrqQM$p#wR$%yTa6nmb!ErsgBq4%4>=_kjy;ZGVvQLb}3mnL9S!;nG=v-*9%7!#w4 zBY;eA>Zo}72KkynM<>3FXR$LlaVTXu`K%l36P*HDmks}-ske1)0=X=|525;rFM^ID zK3ElU&Xf%q7Y62(@_@f|6txuU6!zy!uXbGFS5PUP>JBt*?T4^QVx%vuFt9H4zU{pl zC`(qg)`GnW-XbpQ3m1!_9gIP!iGEwO3J(EX$;VmWeJUI6JZZ?KHzr3evAVW78MevC z*a}oLjZ^K-2ywjb2y>SU=9D`U2BJfkn#2eoN(RYL5J=>RKkIX|BYJUIYpF$s%X5n=ENfvPL!N_C&tEHBa?S<$6AC{YA`f>H(0i3hnU0 z&Vd(ICYnsqT1ONuyd9R-om(ap$_jsF@lz+Vv+lRmjC z%L|ir28KR8L>6PAG=PV>&aV*OC2{i5zM`?SIlZG8w)qOvoGAgq`bpUC6@j<+h{^nn zrIF_~7N7hMi_Np0kw(`3So@h7t4&(zILK5Ao{Kl(swpBa>!1Rr89Fd9)bggU^B#oi zmkF?kfCCX~eSxyycwfOi7%HtwI_=#6cBbX-gdi9F$KnG9=#HA(V!2IVp)_C=Gk$9n z@9O|FG)H!_XW$5DijcfpnCZ4HWS4)lV%*ovrqRBi->Q3|kwPjAz=kp20*c&qn&NIJ zJJw_64wevYz=^C7!J`(ZPBtTit#-WONm}>pIDi13om^_=``%)4o29^z0q(mD1-hG% z!bWxYNq4rf0{lOFl7FbivjU(}t(6AQ%_Ut;|dspPp`IJuVHj-O!8qEr&2^E)?b1P4Cq1}xUUsqgOY?w@I91bkY zJCx_7PWGkqP|qAoq9JiMv``? z--Z3wVp3VFe<{(w z%E136+mg>_U8&ytCZj4F~$dsCJ(yrnIJ>TiQpftKN+(9{yqq*ix)v!i;N_|pN1;? z-$KzB4`NA9FK7T5p1&^mufz4%DE%c%|Ao>2OEmrxjsM@Gp#|yAHmYg<(1>3~PiU+M zpK{*{a-S_If6LRJo2LgNXg0cKTXIkeWH7PkdElSyG1UkHekwH6m( zY0}66?ISJw%Fp0SLZc9 zf|-6rZPF<^D^@sWRVZDAeqltKY6VnF%?wkjux6LY{6rcFW9QDnKe{zx+`6rSBCFs= za!JPWg)+Uv1vx3U+_~dM|P_eVH8q$T|ZpFDw_VCu}gi5=LFNF*LFvMU$a>Bdcx(^>jrrU z{7$45+QD;NOV#T2X%~|2I?w)i-82X-&pvY65t{O)T!iI};~E0NJ4Gyld+Ay4ybRse z2g}M~K*`nZBkrRb@Igv6K-zcNZg{)dSDnor8b|mJ%u!PtJ|iLB9sl4YZFJmuHI$oP z1~8cG0K<=1Z4Mg1LZuEjV=MFLp?msD z3)PkBU7|o$Dm^J@DUb^i^@u+MvBVZGoBtv)yITP+>Z98WjCr?pV%p)I7DHEWj?(V| zWP^Ad?3nUk1@fTw@IdMsZOM+hVl!REq^2tFlo89UD`)%14E|D=_WFhZQZ7}ol8xdv zj=t~F84P}fwe!`Lhpl$J5s7YNoJF%yist15I{Rpy<7G*A~THyi)gS`nE=?h|~;@ADm{|XBowS?fJcJGOlz|@Jy$|y3u-msa8 z;%VEZsBr^IdXc4J%2v9}`jB&L^)rLIzMCFII<+U#uK~tgLPIrvY;n*Xc>~LXXrawtcyO$y6UrT$tea|koye~2<#X8~^lfO*ZK5q%`a+VhG4LuQ_X;$_~|FqO(p7o$Z1 zmFJ@w{jC%38?9-^a3j0=2OL~BtvwlWcyOIY5jBI^zv6J~%7&&*Gb9h+O^Xzfqv1F| zw>IvQ114jAatE~0`Pnqy;(EkYem2Hpz)bkBKStCedh7~MMDVNSa?Q)t$4Ttd)a->Z zBP!kZqBEA*7^*!LR@cw%Q~PaN=(G$Bg?}sjIAQDxADGz+RSaz3r|XlLvGJ~RVJ@@c zG!d*xQ|sM!sGI2A?5tV8F1}lTutG)XF_D2-1EepaK*EQrf8_5o&iTiT4-Roz_kWF4 zdX7LdR9DOrLiMk&R#GY#=)FF8U(HugHV*<1-ee*fWa|{buGG1oTJ$QTh<~yF4W1mI zFbxxC8>xhRX>*B~)QA$N%y^164g$V zSssIU7wUw#jatuEBjza{44xE7LVm<;>Yxmn3+lFd1E}9l(il}c(U(|uuw|>DM4l%5 zLgv>m0?7u{OwzLB8}N)%aF=AV-k4Q#enpsn%`UgzU4fLHd{iCX*qZK*<8Sydm$v+h z=0q!aK~1onw8bi=(RClbc}Weg~{K-0q1C-ys~tjswQHqW36WD?V#3Rvte-r_%di|pZciS-B4`|IS=W-pGiHUU{&}LFDHFewoKDwWLMvVuH>yIp zYGfgU==6ET9_iOx9=;4N!+cHBV-yIJT>o+d(ziD%xqlLWoQawbQREGjW{q*{+aq?L zpxI(FF4zWK!5d_RFb7b+ySKIO#{juBS>Y(POv)yW6s4yDZo4;mZiy6>5vp*KnGQ2( zjXipODSQHtV;`d3C4yVxAQP@#q9u19)u>LmX5GZ&Cf6HAtC=Xo?hG1uri|)&o#yNI zHjoiOLS`{CuCX=tTF6b01?i&auXoKhJyvh80`+ePo8#NuEeSL&T9*>iom=SvnNN0G z28D7}KRHAt!R-2Qy(c)>2{nW7#`AH%q1hW^Yx8?Rn$J~5Z$sD(1vOnQ8|28QfgZow z99?z-26HE5E!mz{>cj-$Il6N&jTK{QzI9>kw9=5)_3#@&Td&9TXN8o0kgjRI&Td_^ zhNqc1zJRLxR*B#-!!*qVq30za*Gg;kOEj0bYAD#U6~&GYR&QKb5lT;&gnupwSBSP1dociugNNdgF6-3_*Xn30;sWS&IU^7YahcnuBC1D0ZHu7 zGC?iNFh6AFH_3ly5B55V9B&HUjkBAo|L)yeOlPwnJ{{$^;Jfm9kr^hI=J}%;d^DVF znoC#GPaMO6eDls1qtmDaePZ9d-T>yeuv5mLYA6pLJ z#FK*{tFcAB3Q~n)k`BI_+kuWbRdh0c(QkXdr6=nHj#A*Xk%qKEO{sbd(oUUOuT8EqaxJ1t~?j}=uvRLeX zU^BDg$_-TKjMv|B+s*u;OMQ7kp5s0m@=$!0X7^yxEQp27!?<$q=>#A z&qN`0r+lPZMcSPt%wf_hIY9IeR{#DY9%aC`2_-bIqgh(-a!Ka7gZjA!Wav2nd zi-9nW)_0dcyA!r;qhjJTJ}D=4$hj9@KbqrdeBSu|vtdB!ohx43P${8z%c~m6^2!VZ zU_xGsKjTTT##HBokF37O>T%JcpE3EB6V>{M_FvHY1n**i^wQMMjC!} zg}dW?(S)D@^*g?ah8Rcl)>r@oorAlG(gUfRjU!@B5>N*F7_@tG^R-mHx=ZAoWqa3p z0u{e)!Mb}%fGq0`Ox9!@Fq8O`nKdd2@XFr^{sA)Qsy7Xi>zrwU8#e);j z#e)@rY>&nM!=N3J4}C4k^Ev}HMqGKNUB?$%O1kP)omT*mLyc2OHoSTrC=jwTnU>$t3nR5;kWw+%fGAZsX2@!dA13RTI_d zo&6;MeiV#VNdF21XwDVaqiymF4Z5?5nUdGua@0rjq|6_oP9*LsrRs~h`Pf;&k3U!@ce!a7HqI6y!y{G_srv5Z!sgqlu+3$ zy24CFSR_-qrs8|Q-gCquvjXrE!^PLA!zjzGiFC~MeXYc?P_E)9Zh8A)0o374+Q}QB zusXBgW0BM}oyS-IqQ>&6PU9G5fCEL_oaz^+J|jC&Sem;y6>7*TWM-@%$NtL9buL=v zSc`XC3EZ76f*R@|0nHU;RMBgEW$xgOVYeYJDvi-KQzW^xF6vx3+Mv2NoQF^=$lv1u zs_xsOGB#ZNp;nxmnL#&zi35bu$S_a_)s_W5w5S zL00d2enl<)&VtHo+&%i^lL<#bezNi7WYR&6CaRSIhBKHv9AW9Nhdnff|9mHza@!a}{| z>iX|$K>f6l;1W=AEd?9Fi0>fY17&Vg1^FqWogb@$CJmezPM24%f^`gCr1LhH2S__3 zj~l9{KiZiczC2Mbs-7q}KpR6Y-CKzEXjNL)?^XK+GJlGKwXFYgVbyKFqAdj?D_=xav8e^ggp5k~yUVaY%M5w`s>A8RksXC$KsuP$~+^L+d{>r}*XL^4Wv=ex8oE zF=roEZGErP;O&aH{93izDPPnbKsv~Uimhki=4$4n7yxE=2#Z6VFdgH8x`*4O+_b2J zBZlcPHBA5chP6ar$Y##W1~NSO0)tOF;&}7*8fTT7=hyDQnMA8J_640O<-xos&3w1! z!>7Op4ouJr6GM-2iwCuv^U2KvN~2x)uqZ$3Q?q5;HI&&Q-s4#G*laN)p3TcCvt>te z5*$AQOJloqgt`_xHV~-n%QNW=NU#r4TLhpx(Jo z5`kxwrj(IMqvzM^?Jni$v5TQ}bwo@W1^>x6wzK-@AJ|`!V*u-Z?xX5@6ysPcFXb{9 zKb=TYY{`=9)3qavZPM7Hu-ozg&~U}LkHI_d!G$PS#~!;9VMnj$s%-8)i*r-Wh&o*E za@sCYY)0Rbmp$P3ze6a$0yZ?GSDo>m)T0;%FC}V&!>N;N)5B&P_23Duc&ggCL!h`B zR+tPV2{sxdJ^)lge`j7i*PRZ8+X3f{g5|EtlnBL5AJxxWCYTfnUO`>hM8L9&&<~Fh z^ODi({y6-#_&iu(i6x~1dUs)frMF!rCx#SMw?A)U8!xX|LTDKqJcEwoD2#h3%W5CP zzFb)0_ztH0qih}(XNXdWKr^_S?@S(|3Z;gGjHbv1{8Of*;v~mxUayjTjNZnl2yy|2 z*e0Z-M00aZe1M8pe|h3zwr$xGvRRQ*yV=eQ6ZA7SVB7U;fXf z1`VFfZ~dM@OXr>Xfe`z;_~Sy!u@)(*Jw&-9hOQzskYX5xIGUR}s>h_D#ym5ubeMz?)DC9JG zRG|c+_LWN&P0zq&Dp%*vPA!LW*YFn9dpungDSpVg2w9^~#<7Z+97mIn=ff_IK)Mb; zj&7)v@XRUTkHx()@zeL!{S2yBNoCWhmh)?rrMF4B>uDimtcQ6~qVL=eH-_!|=!u}w zDno0@r!dweuU7pVBqLoz>G9@@yk44GaX5Ryfr^s#a&yw<9UH56R5q45F3d!8Ay!DA zy&m**_j9>;u}8nwKOnS7PJ?td6YGx9tNcmuNF~@Ft>1!w5jY;Mu(p=HUh0I}R$du) z!c})GYXr)kBIb^E1)X@`5&W!1SJUwYI(=v2gQ4-oPX;G`z?iUjvOEDd-VWt3G}IDH z@lDb;{uLSj1lX?XjCS7=+6pQ~3o7xbTd8f_^^AjtX1f83qS%+wW=o}z<)vav{v?2( z5dJZ%v5ar;l+}PWwMk%p#q*98Se`#3qO-S85!;^exmKWJzxi61a(@YKaI*)^AcwEt zO_i^perbJvP2i4t0_AZrlgl|qBtW)b+61}AN+W2w9W2cDdXtd0LBXfLzbwwnH zN6MPN+%l&-HYASZXoejYva_zIo#=<7D{}5Aw%VUt%jp9c!DAZBRuYf}XHF8#cT_o- z@-*x`d!m^}lU54F(N(knMU9Hd?iLYAJU&&H#N{n9d2?!gF0QW`L~3XGA?sCgmq2?C zH#ptD;@YGTRlox1!4HNu8eJUnr@^${S=Sml{jyuR>3WD>d)0mBL}synP`kvZ6Q*y1 zLa6bnHjd!4XhFC>kr0TwYV8M*%p%qj**3Vk0u&{pX>k%$yoWOnZ z6*YR-%<1F$eTP$r-~GTpZ$pL4+O5G)<^v2xx7-7vjIE;9yaW=! z;i_Flt=+n2$L!)CkQLzBPnoSUAkG+NvvDN*d zKu|Rj>oM*(CJbOhqO7kZ+Ei}$O8B0S@AlLmsgUYtjq`DaixoKsSM@)C|LS_kDJba{ zTD|l$Rv_ACz2yGY|5aOI#!b3-Aa+Jf0ns&+$E5o+Bcnm9m}!KX5he*fo7VEaGF|Ih zuPsUQT)T!!c!7~9wI;QRj5Lz&mlI^CI(34v^_q%V&>_O)wR2BQEa#`1qf+@g#7jrw zpmu5XMbb#Ka8Yr*eNWA7Z-g+uvhw8fYlS6^=E&C!SI6v+R(<-alqn>(tQ||f^Gtv@ zyC@{z>@+(R7&`Z4L=IBv{M)1n!*;R(#4vSTeD(V+8RS@tk!coPIeWI$-UbsBCo;;U zI9x?B$Zfgmar-+FK9t=zEIpwI{BvOa(Pu9ACyMR%05|ClE%9qogxhGpKHM4@GC{Wk zEQ8SGp`9V$Jl@Mx_D95{)tn! zmLopzFweIn9}98x1249?UMCnj6U2}R!;h{evpfw`vx=Xzc)MH)II_sW?N07R#h%jR z@`wLi;G$pM;ImvnNgXDc`<=Is!noOUE6YN**M+G$!|ZiZhP-Twu^}C9^5hwOnI8p|L0!0%hfi?_LUtr1>TW^EFZUh6Rlh1PMiQ%6AErgPz~Ir5w;o*W%o*ZxmY zSZQF%KX=_>O_a|cJY%<)KOR_>W8bXkmhnu@Z{r@UJRVqhFn?_9seA!md{%tD_P|kE zR|s~FK8N^hMzZI2TSvt>2*^zomfLy&SDyP7Rc)&uL0i57#qIv?jqnP^|YrLWP^E^3*d(WA*ahE zVQ$8r|Bt=*j%zw?`bHnuwNX{7)MYJ52dM%9l@(m7iu4iz>0NpYiwFn^*yw$c-g^lI zB@`tz=`|6MP6#ytLddzoy}Ppa^WNvY?|J_@pY!g2`Cv@)n`^F_@63E>X2|mOTH_~? z(&2;hav=|Bid(X-Ax2*S?tK4rH!Md^Q?>EuNzWl%HC6**lIpL;7pJTuW{P zTvpX(9g4fWHG7KxRFtn{jctm{>K99`6f$Px`?28JB!0q=Tigo2JAA_!jvE)jPvov! zjk!NQtjIJVOEI6ZS4|Tv{oQCJYG(TarU(Bv33N}5=@V-07j_~N0QR|;PM`FUPVU=> zQL_nhiPbAP1Ojtj3O9CHQ{KtD#D2=6!Qf^{WToz&;P|UYG8R zyUiqf3`Kzw6^y;E!b&&iz{Oa0>?FMc2QpfrX05S4s%VQPP_uJq=TGLhO*dd&>Bu&? z{cQ72QtrWws#hk*jnzDg+gaZ3pNd{c7q57dG&neoCUU*ViiTv?P~y5JoKy&h)$(6!W#(Efs1IM=^O|xmslU99k<|Xo z|Mz^$SK@h@t--fh_VGPC3Lb`>GOn#R?t6xcA>$?=s2Z>P$HNKOEkzCO4tW zXPrvUu}_&0m1Y1y<(O*l3_l6Z<;i@u`}&{Y^0UvQqthMu5u9$n0V>33;Gsz>eCMS* zgAG3z9gwf(1}l}z4OXTWuDdlUH&^lumo#9%|NFIr@#gvYF?S^=etWW2cim#68&wN3 zUtwqEAwyhu>=@{w+w;V%>7{{L}+&23ZdG0=nNV zFGa^Z`qN)~bj(Zjb5|dAvyn-Gtxr)TiMaiZ7&i@%m|l5;Kg}39qalD&z4){83tl|d zq^2|uw^r+!8scpSG-OQR@jVLf0&msN{rWTj0jLr8ZfEVQ4sXuUk}i}YwwPVd3ufqq+Gj|D;WJ?Vvc>O*lHbr(5aZ1+wIHE=vB1s470<*m71R=XAaz~ z0F}}G?L=O^e(Ugk1ue!i-=21mzVWJoA!094*kK4An(&+VVF=60_n|EFr;ko#4xEUp z#FEoYDs8$jhJKspl^{v4L0hj?nWhkSzMR^9BH(`%BRY>9@LJ^hoGbzl)*9E z9j27bJH6sT-ffb{&wr<8Vq!luY2zY7n2klZwg+%<#b^b5Ygdi2Wm2Y1mt=egz4+Q- z?@m5$0|eR%c-BVeU*n6oH>|vrv$n4^n+8gZLFlcXg1harx-%?D%aZk)+0ep9&1Aj$d55)r#+$HlH)5yx&18pM+z zOK+%qg#7qwF*o^?Qxqy3{IWwCM}Mt6pv>RMSjo4388NX|SC}Cj$UAi<<&LF>ke+FP ziLq~+&ebsM0A;?VM_PBOE^*#iU8LlQuQpX!LDf&>(8AqCmJ0u*b@YuNu@s&!JnFl? z!QndkvD^_;%qHZ~3yMz(v(zKMrM(4F%H8FwENRL0DMrJQi8>57#sm5kPT9*^?`W(1 z-Q&+c|FF@)aj8j~?0GKsU}079aqsRxVdTk!+O#D5GWfFMh!@Zysr!U`o0 zpgI!neLw-Zejyu9r6n_;XM;J+WokqFkx77La)~m;C~lhsfWb?U6EwL`{)1Cww?Y|p zlOVMh{R|(v_FnNtKeuw*)#B>O!1z?qI>I92R4}FG#rIzFol1J(gL#&`#54as#sgFS zfeIx;AdkW6MFk4r^dHVp<4rB3+v7%~$_Wv9AJHG4MLZkL)<0h!seiwmrQnpq?pTy$ zI~uMWmHIP3|7ZvAJeA~3UV6UNyuyLv$2L>jww>x?*!?T;F*k4^bK&rQEXRy&*t@ASza8xc8% zOFoUhD7@%nJJ#^oB*CrcW{W{?sv)bdRrfhMEdFzDddNVp?8vLDZzHjk(O>GfGA8(V zL#!s8Oln5Z#dI{d!1eSB59~zEIbt;j!KvmcYgwJ!sx5B*MANK;!W8*~;+=RW>u;!R zaqWFmLVgD~TWM~pM$M#fE4`*#u3L}15OqUb37l|vMrmZAN6>_6CQuRLPoA<|Szi8f z?a<5l;5V<8;+j11Zw$dg!A?yO;{Zoog&Q-=>8Vi>!KT4CZEdTBdWdir+A_X4<-?t7 zVq{pWDXDg%T%JZMNLy!$V`6FXGQG$I9$SkEEl$$#zE=aL@rAN}4JW5!-v9cx!tIf; zJmDZRbKqB#cIqdwYkF9+3g48eEH~LJ=mHeRgbpMJulJ)$pC_N0VuJ}671~EAHTEbF zS1pr!*I=-^fOT?gapj*DY!?cKRI66Svdh^#dXi)jeX|A3@MF<6blnrI6W7ih$=DT@ zG;e*e{_zZVs2r6^aXU*|wM?7XyV?788`G=t>4E1q)L!dB10k)hc^ZHBK3@ZGKL%xL z8vEjMU;To0o-ZKk=eA17{FPPeAaWfPKcCA{k(I_qE~^aFC~-tvqPnH2DWN^jXq8Js z*1F;vX@A1m%sUfJvAQ{!+k-T}-vO6Hl=JNSLsMz|x9!}yLsn)3@9Dnx>lk>t|E7UA zG1co14N9v0(a3#wP;)--YvMY@7%xh6s0>k|;z{YuxWCG|SX_%q%-iZPEvgywMU`1i zlT{1=H3A6+A2K5Nw{4j|WMAa3+F8sC zf2J7*p8*IiRMqliP_+1&^4kXmN`G^~$Lw5?GUJP&sV3?sTFxN^)>|(sGgYSZmL*Pe z7Ax~wz+6kGyrZChX@mEWDH`YgaH-(Qf=GRyioREBbKDSjSXq?P*k5zq$&mm{hSxM? zJoue9_dikHMPq-AmTz?2C2DpfQ$oI+_t>Z9rE8WGs>>Wc=cR0M9y zk>oH?oMd_VXZ4L!In(E6)}35Ot7JG#T_c(G|Q0^2FD`UqM5_mtoLxSvCDmJKkq*#mcK5* zKl1q>s@XsC`RBg;4;AD8C--H-DR+vY*!Vy87*P1=f0_$Es!6Yf3`SI1QBv|tA@#Q& zPiVOSeI+>R_bcDu^w+!p?ZpRoL5c&OrTV{hz{md66@JS5k>~yw-w)Yea}L)n`A-Pr zxMK=pJSAmh*8czT2l`(Xz(4OluCxF93iXdX|B>gB1pZ$dq<{41AN~2?(H{*|#+O%G z3TL4-Bnf|Fw;s<+PWJgE>%+3X-_@SC#Tg1e=nfSkj&18Y2yFc@`oC$?y0r-@Cf~=8l#kj9bAU*Dbn0h2VZL`_dLq8!23_ zKFcV|RC;5+7Spm25*VX+C@L$67))<*aO=9sR60L+%$%xI2QBR-S{ZsbT%%wFiI=zh zMI^T?>5+u2W)zybSE0k0*3I1dSS*(@4|0Tdi0}dy8KGy&WdE-G{2w_X6h}Wx_iv#M)o8j7I?6audppi6gt|qU?OUwSS zr8!+XVl|E}&frjFuYu7DwhMbyXWdslJtb{=7T2`*(BN~VAi{ljHli>@Cwn5k)p%DgyMKE9bA; z7xuywmnU4N^Bs|AoSO{;!roMOq`@qAQAzCYit?w%MrQ}xa;xdZ&P!!3eVy&0TX9Ap zpLWw}>9%&S41c9Oqv-1&loUy##{RxU(bdYBYu>GCXS~i%RE;`6BaR&x zjRZL0euvsV{o7eGR|fV>#$U3G?#`+fhGfT?@C^`m6`f;h1IFg`&T;l2gu8C6I9Rr1 zAxN?u)xFpD8q%cYx#m;+5dJ>C2^YWv3TSHf<#`WxCt)w(W#3y2{bV$`kX(v53(-_~ zFZhz7Imd8X#6B#ivMXul$L)DFEhepal2hQ*-m-aLqj$xH)gdvMK!KEry$=ovRpyQc z^vVK7hPz%;etCGD3*lr8?F82Mv8z|}G4|oTTaSGMa(?~IH2mmf!#*@){Kbq1t4+rI z@^>FR_E(YbNZEQGqv-9|m{u#zzwO}u^+E2Ct8(G-&oDSj`q&p`d?D5D(48!mQ`9qb zOx0*Pq2fus)m8f#A>89nnp^LKFYrz8u#jU*F_z7jm9`*spW|o2=%q_4-9i$>eYPM) z(_M=ZuX6Bun%LH>NMcoH{y|Ae!AG%`hiK}%|GEOZ;?U?QQ=}bJ;n5ZXYtj^97sjqL zh|t(Omg%^<;fYft(Cg1V={}9L@r*Y>{Q?ur+AnQ+R7<&apW+S8EJhs?@&S-)K%D!%)B`spXp05J99>UeY%lZ5O> zALr(p3%PNAe|mJFghnHYv0c9KMq60VmX;F(+IKF|!Jfu>dyy1V0XY@bDP!l9sSD)efJ^oK;}4&UORSlVxi;6ALKU`CRU1daS3BG?YcjmEE~g4Ph+1wK_`(6@Ytn z>81LAq%|A6gS%BNLs}>0^}%9xw)&R~tE*^dPpEicB~5?gQ+$2tSR`YoN>PV=z9(&z zU;p9CxmKP5O<9MIg9JO=w+Qyxj^I?faVbX3v|~9EZH7T=3OeDBCBTA~emP1xIlRpH z;@o`5HeRJK&SDp^eaQ@2e3&Mpm+Z4Oms`oD6EPv&w3jbB!QmEq0jWTbiP^vQa(^wk z0^5=5>XBI+>r*jhoorEZ9zIzt)y6Y9ql8@u;c`L{=U2)`-=IRS#u+HIifWq-Bw%2u z=Bh;7`5d$I>^PLCP)Q&;Rj+dHE(`RUAYwbcWpYdS{z!i3aL1W>U^s93i){}S!M}ok zZn%%4G7Ab}LE)3%We%`yB4+B*fyCIN!WjdrM4?umc7DIbaI-Q31}5n*_U*0c=88x~ z5{uDhOb8LGK>aE<^wInuHo0@HDUGJyq(W;ofxJ-5`D$%b$nt z(le|YT!-!LOnnlmBrO2%cYq@9=un}5JNV*%k*oyw$y!64J z8A^)&+Cejh(`@aa>LEw=tooFx-(k4Rmwd-9l(B5tI>HNob8D_M@q}Iq6BlBo-C>8{ z-jOx>CN`qeMDSQ2|EoGmu9J3@^>!8%cF4z3gMzwc+9}tPtVk{{xh&AehkcYbmO>+3+j@j1!myt9oK{J;^92*LO%R#7Kvwy$74oYO z8!T3D@}|wsS#whdh+yL!BR&?f_7$XnGZe00f=(}QX`L+(OY2|SG)kw|uuhbO?ku~- zgxwy2o;Od(dm4fFt6t);68^EGq00WXV@Y+!1Ht7sUh)OsR1bAi81bzLoqb8I4}#<5 zV`)ZHt5(~?5N29ezW{C9pBDNw7ebmH8%+Y>TAMX#Q*`uSAeszYr}Sdp()IZLIN>yM z61jGUE18p>9H)5rwb%jnx-E`QO&D%21;us%yMZh(mO=$9`$`n#JmLH+%Mdiqm{)C` zH2&xz(-Er3IkLei1FqzQH}M#}|5#YyUMRU|@+m1~8f{dHikndh*qBvd`0E2s{4fwt zIV9{DIHY@So*kqXKWD@{zP4K`a0X$H()g5co)j<#wR*Z@xnbDp3>QNZcD%vC&9cvC zgcL)y5t+1~)9lzU2<#%!8{TUA$`{%%d9cDA+%cisVE+0JPMO`Y+O4j-_wLxT-R-PU zL@Ddzdh0&PY|AHGz-D*gnkBdEzYT8S^NlZb=r!k@H;m90Ivr(hB6e1XMy(h=hR^KY zSZE)5E3ZSRGK}q?s4%U#w)e{p$9-9OBN}+yeSJ$2?KWidp6@R_KS>BnF!>2ZG_hzb zZ!d+Bg}0X_oa*YlyT=w%{2ppq1Rgh5#u;Kj!&7egP&B;n><@oA*4Su;oz1dksB~w% znsxijOAMM01M(~96iQ;aE!WCMGPB_c$7XsymOZMjU0@fmaW}$5BBxH4_QdLvC#*6p zCm5)k+75W2(qiJyO`Gbw`zSLW{5Q9Oq1k8hew_VcfSZ>&Fb}x2>kE>@C@npH;=x<` z7T`IBS2FVkZZ;vQ3X4o8Aw*6%v6zOhZL6pPuRI<0C5x(w6_RwOLY2OVSt7}hz~mQW z2#{6_cbq=x%TC2RC5IR)z{tgY*gS|TsxxKydX*)|@Y)Vb+F20@>E0N=?tbCzEVxs{ zjY%}QzX;8jUtXb6+DHmHA2w?LiI1*w#B;=BQ`=L1VZUsKf7bULN}AD%tC<{khjo>Z zRyHFVm<#n(S(*<|;uc%2bos~^7HXCr@D7VBEDtxY{H~2bS5C3bCSLoM_3jZ5C7Ajh zT^O@sj@;%uwF<(kY?g=)<*Sg{5E3^EEf%+Cop#LMZUa1Z(Gl5B#nx8VGsbB+ zj}&F9pSf?e!Wf#kKhSCaye-~Tp-W~!y-j21u;k!}oCVsLu$v2M&W#r608)sH)56Kk zosDV9&=l2Nu&Cl{%79t(dU{}UT5&Xl*|C}UaZh;YnR0nY+Kx1a2gBRrFKKSG*k5y( zOKSWvsyQq;`jYhISRPI}RI|7iRofA^BreQtd{$oQp=TQFXnomA-A3nZduPU%!G=;h zh%8fNA&nI00CrRGC!I;Iz(4>bWa_b)Ex(s5IagX4VoIGGsS#tgaHUaQ>$3lrl z-*uD+{^BFg$Ddn9pmg-$3Rxno7IamfbK)J|ib#J`=TOF#6P-S5*3U%~p9j#9nmY12 z?cdQQ*DQSGY>^TI9O`TbpL;x42ouiDp)!vQX_y1ndkV)qUW4pTbCe>|XDW$#agB<5R7V8Y(+n>_p&qPX@ZLrT?cLNfut%14Q58N0uB_7PS zbi5=B`i1%LhO>lLOO5hlFf_+)P7KB7IF13}`$>FtD~4*;1*eD4(ErQ~N0|g}aU$7P zoVctKJ!(3;_cmLBIp`G>lev)VGjHV5DDotN*MH-4;B!-J&bLB`KHWP=*IcO1BqP{> z)=iMPvRZ+8y@&5lBsw)I&@>!Aa~P^Xm0r|Dthf7bY15OTbvf&jny$+(!_@{c_uA(A zF&V0jj1ml8&;dAEQ$myR&CU zM~?MZJWfhk;fcEuME^?&_d z1HIMoLljBYgY8WqsAKRO-7AEqnN)DG-Fqj|5Q zYlPV=)8MooX(+76b$XAN>r))B1mh3|!U9*+t7HJ?^&h-vNJxA~Tpo9OtZ!EzTbQ=- z8tzO*5>XVNhzl`xg5Bs6MbhXHq6A8pzwpU#Ekefds=c!GNiS)&`?DTcUSD`Au+|kC znVfKAMrI>EJ;1?xBR_0&Dn@ZDscdt3WgbNfVIW_V<*3sbwtpn=Rh_v9jLL9JnQg9B zd~{}$%rNPBP6N1+sd`Yafii5*ndjLnyYPg*ddFiXIz#GIPMf%fqiS9R#a6HxeFc## z&4xv{URppETCKzMYb^$waYqX$RDj?vAv|V39-iC*m^9pqt@%?s9UGIt?)=Jy>F)S+ zI_JjS()D&Vt@)s&8T<@RrfU4PiC@T=ReEI|KM`^j;GMv|n=iR`9HkmZ=(AKpWY!4H z)F(1Op7ga`C^?d~Fnlgi*3bKr*y>i_QikJ}VQJG!wLd})&OE&pgXxW%9g!)we!rhX zfeNJx1n(MD>yJ@6+lUgxR;(;iN!nxzA}>=1)m5VzXuYoyFhHs$oI6>HeT{v%WPovf z+u*4BOc@#G&!H*v-Us%XdS8KKJ~1%UzaEjuUMkCbFxzutPgrOojZsQu`#`)pmkeL( zbWtIzRiYfK2M}gBsZ^A(4=i2^JZ)O%a5dH+_9Cd}oQ4b8A(74g4!ZngfG&T4p`Ozi0> zI!r**0ngqGVHRs7l8I1=hfDmTt=E@VzP8f2#)+(q!6e7lYebS-K+K+}`xJ5H1X(;C zlZDO&HD3917J#1byqx3*_525`Ckid$Z+Z8Na7{Z;W#CGM{^Y_l%^X$KyC5ioI zT9ekqDSA5iTHqrSxb)(Fzsn`0!Fjx3Rh0<*=Ui}wULE^U$9U)#7Q_6$gHf6yc0seQK-k z9&Wkm;cC_8+#E8oZ_2UOwA0{EdXFHW=q3If{RBSlmIfGYHRQfEXkuLaW0b1EOZrqj zcij2V0Q>{Q{xew2b6{yjp=qNTU%+)&;=tQ~V6vX;(6q_9!8&mNc2+-6fhOW>XxS=N z;jmFB(rYSV#N?8M-72wRaj<5(dLjMO^3-g`EH%;=3w6fs(2nWig5K7-0*$1f{31Q+ z-|aKTBrwrfa)YaWVZM)CA->tYakT>xf_@2dP;W|;$Hf;s#}!+Jb7mP&dW*ea$qiI+ zFTkg03TlpV~tdbV#>wyLOF(wosG3_15?URyVB~`#uYx}@-R{up`K9Kce!gdglEhO zM4=QAhxA|}q1iPp7vE<-QwGLgg8S#SzUV0=M#@&Vv8kY0Eli*g^!(rhOx!+(`{1M) z7|i*wr|bJGm%BCRJNeGBrMh;ZrxnRC2z+y#-HCHN)#Y}RPAgZcd9P+0U(M$eDrve4 zE^cikwtWHvx$d%Y;1?Xv@5N*^|Ek9)oMbFrvgaKFVp=QE)Gb1UGwl9~YyZbRpPcvc z?+>n69g|nWwI8ZC)x|ZO(03^o@Np9LI|RFh;71(ZRFl z3M3c76V4jap-rgT<+U7bj*-9VV9L279esZ;5K*s5;DN4pSbCXPD%zJ4o)P9-RA}U-|4v@Ri z8ZYT;X!GT2%a|TUyE;A_ctY8O?OFOUSfGJ@a9`Du;F!OOB4XeC-lEG_sl9oC_Bam9 zzHx6^iXXeR?|JU4^-9>j$UoXe%=Yl>ibz=4ECF*v(Q+j1B=TX1Y1B1|STMhcw00)U zgrI15Cu~&nnCHI(-1#|4UE6#hSbo~zRwq|2KKXl^Hv51OdS}AqFbU`R;q_EY`^4%S z5xvtnB5QGY+*00PLwqQxZpLKOkTd?ul zFosn}AdT8=+jK_G0qApbM3S^UOPC(jHF`ogPvE0v(}*PcF29DiNG_zmil4CW8!*7# z-;0Py>_>a>Lj*iie{bt=E)M4`B!M{NPCU}+d8rBwsx)9ssQ0;nRVoC0r4J?73-I_{ z;jm#K%0)ky%d9=os&hmVukH{zdd+otvPny->+23g>vNo!lgBTkX1!8l{&O+?A|2!I zGSWrxC44OWolx`s{@Wj_ch$Au-jATrq=NFVoyT-kW86pw z2b9#c)Ra@LfBm@n9B~>5Sk|GLczejR`q-YQpkIz6hr0H&Y)uDUm#5zh#B_y3|Aj(^ ztoY&XICo84Sqs1Y0zCR~E!pK8ntcv6CEO$_Sl&go_cY}aNVd2PqS+T#8lYZ*`j4kK zf|bPv-P+5E-$_e=21BQ}X7W`fS8 z)rck~&hd@Lf~I+SPh3V{?TBq#KlO>SJtQUOiD!Rm^)Q&?*;7bD%zm8_)vI2+d}aey za6KUb{4Ed9Fw*9S5xW(Ki{{eZ;@y)~%ZE|bn^Ey;G%W5nCE$|){-X{(p@AFFvCW$! zlgT@FkBZ}Dwv9G${CIVbmimB|)mXkmPSXI`!jY-WjX=_w%C6@ZIGSP&hcEo;ia?SZ zd&+Jn(P|u(cciOqMj6{D>n!7;SKY7sKfj48svI&m_S5v5x&z`ZOD2$jwqSonmpf(lJ1!$Nr@_ zNKe#FjuMzk4aOrijiZrcZLd&WWKNj<>ZsUs6iYe{3$wghu4-?;qqeM~*zK&{wn0ka ziR^3R0)nDVbd@e?MR_`}BwmNMx7AY-u7o9%~9!96S%Z5Q#8~cxbLRmJ_x>w>og0Ox>|0t zQ0VHJ3T|A=aX|d*FuXS#IA-qKH6L!ec`q%gZ2FpWwz=q90#Jq%V3yo0 zoCYFlkIFU`lz{!p=(p>G-Q(T-pk|AWO>3KFoAI*kyPhUuTIkNdA6p{O)6pC|tdf2K zc;B9xf&(uaUJp4t!g^bu7Eq9!%>zqzG8|mvKw6MIg*s{nm%u@8YC7%qNL;EoTI;|l z-TX1dUe6v8XGJ{*sC^`^RYcjfzD=xr4 zVeADtaC+pgVOSZlTz2PlMUqdq3&0k$#m|Au~+KJ_%F6&;eTa&ZutVgxKwSR>k0zhnNzcRvC^gin!6*4r$+>s{Wv3( z+=MDd`*+q@fv%z#2a{s>p8j&tb}!cmr23T4?A$a+iF1j3t2$(s3pFw1yZ}2~ z%9Yo@2%o`zA#%4Nk?}}HdQKzfWFf8V65`7frN{@wmn#8F<8V_{ueL0M-^;z`Z=ye!=&cic7o!Q26p~>1|6k&`eOI=o!m?k`5Zh%BCDh&={`lT6OE;oHu$ry`CF8 zlJJcuX{OAAQW9s>WVA{TD3SGphTqPR;TY};$sC_qw*~q2YW;qRJx*M}FFc^Y`IZaft?7{|Xr{B_JXcbB8 z0mGO3f1oDubU}AxzAMOIn(|@r;tQN|7(MBVzw~C|>cz?~DZd13^eHf3Lj+=gyO*n* z+N1UzaD5mA(Polti8iTdfZs-9$hqs3o#xkAYi?Sy*K929!;yw$$8_3&;h%Vusd)F6 zBYCDPDx)1=iHkJuKBVNTr9RcCJpb#<|HF&#Jq2JZ%q1JTM8TkrHTc!-rmBf2oJKx< zadK-6_?z3$JBK7I5B556VZvBLiF=R@>XOQm#=_e@b61WX%U=QF@fR7)fbngY$#gC2 z^zE$Ax7eS!86qi&D8*#3@VNGZ62Q zaZ7NFzRCX0So7c7!H)$Ye*g@-+u$ph4b5)YfwQ2I2s{2{-;e6=!d0*NE#u3R0gZ{1 zr=oI-n+uO&jXwhD|Mn?|BNSS^qbsnv?3(`*q|QHZqRc<<{|*F?%l04n9GAwig!dn} z^&k2CBcJ0E_&-!1>fkt{%I~oP$JihL{jU7+m!Iwi%}+SSnvcEJaeG@HVp|bi^f4HC zwz3EBe)&(H;Jckqh&~GJCu`9@B40XV|5I1laR>D3_Ya){hkR`nyoK{i1uB<;_uOZ9 zIsYGj;P)T#;R#qbqj7DrNk<&+oFBNC;McdlPOa za>AfyPI(nA8Q+6xGEhmULOc_f;gf+XYyN%4@F5MWDc`|;{75%6&Nn85)htU?r zmT6>ImoL0WGyiSQI;IY%o?>=Ugak-Bd)yL+Ti&}yy!Zb#X^_JD$Wbu_X zIPTEJw$yZtq#T(QqreY%>~-gVwjWtrFGBk)B=TQ0|cOVm)VGe*>=Ply3s{v?L=iG4jzL7Opc zZ@aR$#Vo8^=;jKpvV0*YR@d0IaR-c}=>SdTEIX^0(!6J&41&(NoL)3%I0qZhED#3y zaL(^%cRue@(9(2bj+H3WQOy2Ua2=dc=-R>#D^6)p&Z)Wh{Q0E(H4X=O9DP~1SH#i>8UDZs6(e+Wadjt z^2EumK!x4MjaZaOv%d_nNE}&I*<Deg%SYxT#GU!WtVa_(4P)!^;ZvCzTeCCw;dQHcD2glrP^Mc{>Q1)pst(=}jg zCX{dr0R?HLV5nXxN|>I&>^m>43ADy&n1KLhVqFAtmkQUH3rjk25p8G>YBwsJbVA00FSM8W*)B=!dWinro*Vf<|U8aZ*OCeC+X!`(_r(7 zHwvSq$FI9D50*PjJ!f8PAg;NzG3i;s+gRAL%~BqLtEsRXvr1hy(^O+ObYm4U;bazi z$?AFuRXK6ltp{t0ciz};>2t9!skcJJ94CJFGf-|vzqXzj#ZbIt75mxPd;0El?46(T zWONWlg#tF)Ko}tmTC(}x`plxTjV5r>5o5Qx6&Mj)dmeL}urweI9jU>ZW$xhtFa3B; zI!_4Lj&Zw~@RA&m5)WezP2`6?sF-K7e?CAJ6mm@?=~1ybU6|+QXOqpao>MHwqT7hW zhKhjW9H%&5@)N?_303vR=OUqrO`|!Ru?4g9>x=F z2+<7TN<@3lMy)E)*-go=Ho8R~q^VlNNISJIA5NV4W(r?xP?ISub2y&0*9cmgOT4BL zpaT&9*Fe3W5GcsvSEWvc(Fv=SVq~=3+WBai%{-1A!@lbXfwjI&3p4|4HGi?7u!N?v zSHTZvywoK*V$8nADlcQiM8HlF_hrK@1Ry=~$1HD@2-v^8J5T$x4OA)H%I-v_diAV8 z_7}5Sbd8)6Dg5}oIlY$8CJo<`oe)boq8%KSVY?6A2lF0G!=0N2CSdJLxncG5ha~E_ zn^g3PU=fK8%wb7=HDG=~OA+N;2XxID`9@9XQk;SBl5fXKG!*H-`$c8U)(Y$gD;s>H zX0_F}gKH!aU0fnX%Dwe{^RrtTw|b0xKg%vyILkRV?RZKt`xM!4w6Rd51S{3`y{AJe zEv{KER)sc}dY6D3Ea$)eF|eW}Bw2DoxJzdCr6u74_c}&+lJF{1sbwUDE0|fBrndUY zN6V#WmNc)1?E0>wTPcIz&DVv{)+sab+9&r3$zRXgZKT0HqOE!1PKVD^X;&v~zh zo+ailoa|0VArALf)^(;8U6a7%AmqmAZl zZ=e_W8r}2l8@@iHMuKUVZyeD!S+q(EnyJg5+;T)1Fy@9mcOwQYxC(<=JYEm$IU`LYPL4|Gcl00UH|mmY0R}`hZGS#up|K@ zYwR=! zG8n?x@fza4IAz`SYxq3uBQ0)j9Dflh-+|{ouQF$LE#lq zAtAfJ`FX=@C?2hFl2Mi0dlnXa8qMKUx6uytT{^nf+4xJv9Kx*D#H)BqEz#RKm>N1n zbDaZ91Amux9o9WiVToE_t?Ug|^V{i^YJ03pW22)<>jRaZ@>Y@|KcjA$jUiXA-l#?2 z$a4_fT1fL#Fb*W`7$oF5bhO;5a(4Ul(QN)sS+)rrS=qgT$~+7aMGYoglW;dQ8S&rz zoZDhx9YbUf56WcaC~)>&-RMC2EbM&p3=ce`XACpYe;jm*O~}Tbi1m7IUrKDUE^T9h z${YK%&F#dpJ8{W~Zm*0ePVk-{6>j=A; z8({nNnetF5ssM(6MN7?uWX#rHI_XT4&|3Pqq;9jb-=sY`20GMQYR{iLO5J}o-k9xh zqfaR|xiik<)sw>FnywDUQf3LeMdG+w*t}U^hEeD83u;i823rDuDhzB)<=5r#S_No; zucV|c<3W+Y=}hxpHP>;60S)9vNIZv!hFBj{a|8crWVFoh0i&MDjulgCVW(1(AZ%@} ztMoEu9;W7{Y9gO~UjZI!*E=*cS&8nP9Jb1$jf=tbWnifvwn+qKWg{6l||LcwTx@RAmQ4Q`luYwJLD1)Xm)lQtA z==!^+eg_#_z`@frM_poIP6#}dRXpgT7yTPQjRF%MxvBe$0hjMOSc?LbR&zfN9SUuEo5E3@3r9iqe z={bS*`RVeSn`UN5ijMA{nk!+IVB&@0EUEil{yk%FC4SsKL}pNDwJneJ6F;QPu+PSB zN^ccn2O#(7(D8_mNlk=t0lyRLhiAB-XGP04R26mc)li7_AuOgeT8dlhe-P_|!LIKc z=>M$gV87_a(iP}w6K84C28IRDnt;ZqE095X>D>&HrmFLzFz8Rw0=1AJd zpWEt|hR!+d2zO+X%$=3VzMG#NnvXnT!*+jB@d~6*`Iy$)X=dnxwg)=p+Z4kissVV! za9wIPETSWAPi|yJ#btwY8S6zuhif93B81SNR0T>{lcb%wq^8{80xGY#`hcI?QH}PG zp!^z`QXyfMl{A?J-1A0exl(3W`fH58_WXGzc6R5+2m1BrR}FxtpoXS)>DM%sgg7^o zq*g1PQT|)BC-=kZ7t-XQ!aa?L`|O!+W_dL;?yB*C7}Nev6F_iV|uOQ;DITe+0YD=BLtdP+>Y7 zb%E=ooQW2s+IxJ}3pA|QO^pPd;W*Fl=g!ak@RGx_Zl2ib_o}(7!F7&zc+&c3c|BlH z!!#pD@+CO@JFu3}M@;rUvr*D_a(iYELuX#ustK0=;_8+~o60PrFFSZU0GZo%A4)@L z<2!8XXeRFGj5=+gDrBOr`=4Sa3msI7J~u7z$Q=z`NcA$^MRGG2<0NX15oqoQ|4_ZH zt{p6|dPG^Wy?%cWU3~*Ixt2DEFo&4FiWta_H|Ch>2-cF{D4i)NXs#XeT{-V}#kv3e zuR~Z}3LyQX{&k-nl)|gO(7iRjYjG;d+$=rt&`0XIq2*{^)nao=ljo>^WH+)Q#HE#j zr9m(RGY15sP+DqSs{dBE(PF;!P{kG_OPc>?zKd?=ncroK>)Y9;!RAB(C#qQb zM!(f^ztK{iLVv%duHsszcA92{SB>4?Ts%FCsS6CTH?6|;+4lusiOfouI5p&FozjK* zpp#0?Fj6Eu^k1apYH|8aq2VTL2Y@Flfs2VQO`QmD6E(1DVyb z8lTi5Us5@_6f`Y&*d#)W}DgnYq+MSIttDPczvPTq+WSiw@$92X>if1Ep+RUh= zCm#pTHh#hHv_mTDk%)sYg)!>YB z#hKMkI8C@<0tgEp9bS6nELpV}A71iqWt}S#o6O`psHi@gcXmelFHi>he$Pu3d{jm__qT4I1>(UkL z`bNpD8m#W|YHr;2>idwq)eTyeoDQqILE99otk-@(vwzr|L>Yv4p)PR_a!coQl&WX3 zm*>N^LhIhhmZyOS7DHQ80lkoEFnsM(O&hUcFNb{v3#(I!*+OQ;K;p1~1iACW+xn-f zz7lLVpFXiM5Ea&pg)p`4WPdD|d2dXEmv9`f^1g?Miv=rhJj+(%s&X)3RdDRxoE}gB z^X*;qCp--t%ZpEMGgqdC(K$h)+cZd~E$pYJ<}2q12s1E>y) zkZk#u%6z}ry!pO5NLK`%X`4bLCz_r zd;i?H-H+M}wi-L9#>^iqmQCLn+r${l5!c=RUpj>(e6L>o=_pT(MQs9Ac4*_taP17}y@C#gF){TvX*?m0l_8`Q-o zjkp<=U$VZAbse*8YIzt^S{tEln^6qzPQ_YQWJP)80iKMF)oG-XXlABtbikGIOY=y}=E4!^vF2&PWKwDfj56s``1y z$fZ2oeX--bQl#wx6*$&zl28LI`M_{sMX9L(pxLu~lY{B+5Y`q#dKHL*(5X`AbWx1| ztZ#DSXvPB?%gF!&WI95iw5wM#GZ8SqmQLb;-g}O^<{tF3q+l)=m9+q7YIP!f4IyXj z+J^H0^k6n3LK9MLL>Zr4afAMk0GA?GRqjOr$W|)bV=F+@_nLH7shb~PZW35_ieJGq-Y{VYP@*_#k9=s)!c01aO=5%0Lye;zTAaW z4gli-BBk6bHjK@PaOiYvzC{?F*;@^%p81vi2eQTnN4&%puydJ)UUBoDt{qt9+A@t@ z#@)P*S7mBWi_*@vuBixussGxym|ziu>Ttlg1k<*h<8|*T=l{V{lp zg{54B#o)>7Re7+g3jHJU$=)em*Bp2M{n6wHt3%f{gPr(jl7|-vW&`HEO66yM=Szj{ zFXfi4IL(Ic722Pz=WB|dJ*GW2GC_ucIkt6j9!Hkoo8b@49?k4`Z43J_fj%DZolV1uj+7$e~b+uQA@$`Ya$X|x^ zWPcol6&r>?@T@GJ37|#fSKd?(Q=groRbO`Jss}P4BT*3jnFK~CKc9`ky~65UddU~? zHT6x#1LEaqn)2Lq8I7)!Yv*{=7)|}K)edCv^DHnUJ0k=-Fd5rO7e#@bGp~$yG_sq% zKJp#*ntbn+Jel#pJqpp5@0P1+@L$Ds#^Y)aT&Lb2I!)lq`uvGl-kq{=bhAZ==5%*0 zx)a~rcwWM=;=Bw$i5(6gdJEY4CXe1Tk1-R|XUSC*sx@vh(O{uh`1)aZ@4ll-m7=@@ z99z?-ah#kCz!{(Xz~E2GZzxKZ@%of1h-TD4Xuq@Q3iIAB@2KdE16I;y=_-p>S!ch? z!#^UY*&k!dPyU4uPW6BU1cT!qkeY6p~(Yg40LMTMN{!$ zU1>BR2C`+bOl8{2`B#ivdxKSb|AQQ8D~l9CT#;Y@8ayVcYvM8Ff;X_X+8Tl#0Bn>w z1S2j$=H8u-%4rLLY<|j`KA;xT5qg3WzIB3Bx~ks~F%z1y8_&xQ_tBO*vIgIK!tPU3 zAa5Vl+XqS(KSqHB)tJlvrP(|5)@iQ3`T;vbE5-PY4)Udjbm@|j6t^A)xuS|r=%xiF zJ5okam~Ci`f>yMO7^>!W29yYFuUELla+#XvEsVB^8oJii$N;|nzf8b3CHXO+$-Qu1 zNlc7G`(_lUoK(t4mdcCMZTS*55<+W*H%6KK!j?zNm23bmFK;~{G!dp)e0LfIp(Wd0 z(h?uKfI9@^XfJAtRNXEwwm28YjTV-eaDrFZp#kz1eD$cNB06N(iwy|{P2K61@g`Eq zP|q>TYX!9#4hx@mAF%yb1TxpLyp1{2D_vnMFS#p|NgCuDobU` z)LKQ^$lfXyTV;ssEuicv8v-e1L_tK04B3cm2zv-5Q9?l3dy@zV0RjXFB!rdwj{STp zz4!CE=lj?1+;e{Y&vT4O-s`m=PeWBg2xUr8d}V9*o{Jak`~BTWpcs?Cg!Fneci@#= z8=(4as`~pQH6ozDR(oZs@EQH7<+=OyVXy~z4hjw`NFMbrYkIpawRGlob=i*92FTQj zY_^1kZsXZ>zwGK>Nq$9iJWMsw+5B44z>#m#)1J z3aj32{NWn7(ESabSup%}MO>a7f^lgT029QTn5$9FX4Tulj^ou%wZgTZz^`MlrczUX zm)zK2AjTtL0znFs!9>I(<2{hOhrum%KkawO>3nJa0INQ!0b}VR zKi6o-WY6)qL|@3aJui0P#(7kCYfFJ6+_{vICJ?jRI?ZI~xZERBreZbb&m_PHj`TPr zBt-Snobu~Km8J7n!F;>fhp#sxo}NP7I(lOAw0qNHo+75*YAf zjf?`AvP$m#@JO^~@DExKHsrTo4W~lBQ!{d{c=O}gMgVwk?ld;O? zs@vl(=+7TU5?9aCH@@5;CbxNQ8jbEKYr1b|ZgGXR_0_@W^p{zBD*kRPURP=ap?gv) zTbl!3b*|CA>}b=uuY+JFy#;zXHz)R4KRS!-I}B*co%HUKH4a#%;z?_FoL1&Ca@)EW zAoO7Yk#EBS#CESX0p9scC~~GKC`4{fgX$RSeBp|*QUcWYP8|onBbX_MU~CmQS3VOh z5-}em%L@K;FK%E~WDhvas~z>~jp}-fPVY${itHr`Kgi5^q?q3BOaJP8ha9_;+1NVk z0(KRjCzLT58l7}Ye#~d!CUK@C(jOZtq(YhWrdACGz_&)M)p_Mg_b`L?U5C1xuKR*f z8N=JkTK*jLs##<#D6ymk8pSnHlANxR>t~;L1(6D?i6EuMr{ueO4U;E3Y;rNp+b_;F zgpX6qFUg$e^HufpQ7|0^q~${Byy;lp2JjYHvFDh1FpMo$zB`tKsHSH;9a6`tunmN$ zm>pV^bzs2T3SzOzBuHv0p7BarTMIU>ojt{dO+Omk+ct z>&sjgo*%~jDh_iTemwN#wcNO>~NkdMGN!~e_C)@ZjL=C6P?g%Q*wfd`!tX${Gh}bhhV{EzcZ_K zHN}TYiF(oYStBlJM19%CV8epaeC?5ZXzmJ^soMg9KG81*{3hIa$rEMT+u4#2$EIPl z$yj&3J4@{%;yrP+nHY)6?7W%i!btlWR%{4u__8{=TiLw_f7c<3IarLI3J1bjR>GF) z>8OD&})CSfJm`p>XbyCFQ&F1y*-^a>hxmO!$2mM21dm!dK zLmu}olML!yFjLJ}a6Do3%0Ja&(V#*#3Fu0lK6)?J18F)6()cb+nZ}FBi>Cf2)4`-q zLYWU?o2x_8gmaET&olc%%J>u{Cw&IG#++s--o062vQg(s2zwPtMJ{EHYEA2{ywm#> zT&C?v0CE(wi47(uY?;YoSd8cg_h0Fy7fsjoX?ed2^fG@v&4}al(;PnuIPQ^nKkvan zB!fV}`7~?pA4_YUC{unSP01s}RVCxUm3*7Qzjq6mYr{eA0sT9646)HQ`=H_;>4{E_ z%zljotqadZHbvQ*k1&d!<}`P$C?9t&{%XwX2{IwAtKKNu!EOmG1sFYvPN~~-f^VgM z*aWkWTv&T2&P21KTaHU`?>2z$pJ83%=7|nVzQt+!)(WvKg9*XN@tGEc>}{{xWZ%@4 zr>E~qR|f{4_&MJXI~iF%#UKdbrUPE)-R1mEs@E)Chl&gl$T;nwi{gg{F#oj*l6M(f z917_I%h?S36m)@}HCM)^9^MoQtV)ULLP9W5Z0_m5=l*S|@OlE6hcyg5I%H&}e>~Q? zxNXPO_%lcpdeYiLdND5%l}gqXdA@!$5~ zug&=TAG87V7wAK8q3W~r_E-26Lyl0e%0F$cjCky@6g?sim-?TC@dr7InHM{3Sq0NB z5uA!I2sac-{$#ei-hSwT`PX;+`wu^M9~k;O)yI#64*B|H9Rk-L{!(A=fd&z#+msSt z(82}7vfdXra*E4%*f~K^UW9TuekdvVzx}K~W3{kCkk{ANF1S<2$Ybb)?)?3ccAA3J zGeLFaja5*=x4&>uH=ge`+Zy?6{AJl+UITTg2jOXLza9$o{^OEd*9S{2>&rMu0vc~y z5#HQ~Jn%yWwnJwc#5oAic)5fb-efq*BOAi|=M>}r{Xbem{X}OhgLnK=_xfI{&ji|E$m975L{o9A1sTJzZa4>;IpwPrCHOoB#94 zfq4I9WlSZ(kmMTAsE>GF(hMdCivEX_1Cf7D4&08Sy>guUuM#+iUij0$=sid^od2a_ zIcP}b?v^89{g)Ac3;z#q-T$$hOIOc38tB&Nfx&@-Li6`qhmv~#(cpm-Kr;s})zjKK zI$-g?3IrW8!q?x>KQ9MRe*b*_(6apH`TVm!|LvsxdBp!&pMTcp@Cy8M9uBX@U(d*2 zfB1iNeJu1(#H#HsAlByaf-n!%IgaKppQeo&#dtV9`h=@3>@h#f^42ap2s8>=?3Ptk z#k*JRuiEq+9hY4`Za*_-+nC`ygR2ygk*IdcC&6DoHFlZQhsu*v*8oZ(%37@6(d5nC zH5>AngU93%`{tq6P-!IydHqTG+MBK_)Q2(qyR;1ZBk}s*;>6@j$LujUnW~@B^(TSD zvln+t3uKg=t7<9DP$W%U6w!Hyj^rvxYDw0!j?h&L5PC-4>5zQ4mKn+AB#>z8Ra5@C zIcA6eVL8-^@L(RqgI$o>*N-Ffe&E^1h0s|1rzFoao-=GHp(`u?t}ytTk;m=}VQcgoP#ix>Q5@lN4^|CO8cKhexrjg=A=o$kFcbgRH@W`fk*Xz+l%KZ~zCuGe zj;TQ?v7S1xqb|q7D+QhznHI0@`6KTwQrD~)1TwdNvI=b&B?S=Sun~okab7nLBjHW^ zgMI(mW`YDWvmiU%IL)?H?V*1o``u{U zNxkzQyJbZ$@2zD@+7Bj8SH)qOy*?tjGK1<{$+4l08VY+~NX{i9;!WFw8rdEcyO@~B z={{k~DrwDfB(iun)6@D#}7x`#&yz!K0hkC@(123~=|AXTjzU#DS z^;;=1&FLeSf0V^Qq3gunL;0`kN=K?@JW_l%4ZjLQCL9xA@x8;n)5|}Wx4ki8v(m%7 zuIRP6Io5XZW=}UPqCaVO$6^<16J{-zM&!)2_EmX^KOKA<6iUyeL&)!Y-wZt-d%T{x z;m~jHiZWMNs9(i&sU7m^9c@8<=Cb>5J61^0Hkr>?dzYK~iNW-Baao4Z@hRjk_BtN86$4xh0C)D z+^yk)O~4nE63V+7l!Y1Ct^EY-v|J*CO1ec5wm#!RJ&=88ZQz-{0yn41wqsjEz=;4QozG_)|0 zGdupcoj`?p&bty^iB^8OP6D>V| zMLs&ndf#!q_r!jhS)68qxSahUSN4ESkQ+yy3D;tItyz`^l-Wpo!d-&a(zYzDA4XS#i9LOQ1gr@k*+NT7$ zTJt4z)|ELXJT`#se|r>~iDLHC8bR8m$JU9j%3<)ctdl%&1=QVIHJ+`;^}?&IGG`lx7X;q6DnB zc20BgDqDrwH|8;^dE1b=v9_C;1JBz>D14g_Oal5YZTt*q@yd4JLfuGiD z@O!TqIMOuNhB=Q3z3qE4)xFA_nzwfAg4V$Li_GArt0%!82s>d zxgLL`h8)U9TsfG4i*Jg0>k0T>RqgYjt>KsXBveU`+=G;ASADms9l0+dmH|_2HrKPc zGHoT~Fey8@J=f&MF%=BvG&BttaI5Sz`sX?QY8<{7SkRm2i#uL6I;0khIkLwDO@Csz ziK-f(n-iR({$7sFo0tb$98Ee5c!aYd53X^ak~3ZbcVithDYC={BPHl-zrU)Rd+(yPp@BM7@RYMp3@?h2j!LNbMu)T;^8u&8b)ljj$rG+w0q2eoj>?rAn~$6BW$Srb zOj?ZU=w{S#KbI^2{sXAwTpyf0#2>JN|j{ov+n>vtxj< zztX$1ppKtw;ra=0{@?=;@3FT6PNU~R;q8YocIzM0GiFx~!>Bsh001elR(h)wRDO3T zS&Yq=@=PCzkHB3$>GoXVl4!&BeQJZ#Yk)J$M=zA!jv9^EWinvT4`Fc79+XT(NlR(Q>x`moxh6zJrk#`tr=H207#A|%s4Q4 zl{AoBO^q8fLpQCsH;5uGoA-P+#*Cv3hbOZ(U)&on_3+YA=}F;rJ%^;ZTLcvL&T2`$ z02F(5k>jy<(B@v5Q4M9I!Gj*d<5ze`R9JFq3D$8RZ`ueVcQqAOMpM2|TBvr<7Q?4Q z!z7ofZRi+XRld80Qid+Q3*7|qlXVtT^2IgxV*#ep$r0MiLPfaNu83!^^i4T$uCmJ~ z`lI-8S<$NJWxx1PVw2{wt48Hkf-S7pH-V-#+qiowYQ@(epM>5?-G|R0eM_70c^znN zV=|cZ>)&lCpKN#e^7kRb&@ks6ZT)>SVY=jZnDd!!=PyFp#v|zFkGg6f?~KzuiHk~` zCH{f?-74ZulA9lvw`E6gKUOR6&je+5g#DQy`Ra?wlz^8D9V9nC#v|g$j#g6DagJv= zA1%)f8y{b&Q;te7GM5)cEVtV{SHz3D7m>Ut>vGTl)}KJsS5h%RR!T}kMoH6YEDT?Y zpDza4Jh_nH4@{mQdQ7N>`65;zkuF5A?^PB~vJ?jXYMiQ6z*=$OWlE156+^Yv!|y*4f_pq!oDU1xuu7g$Sn+BiJEgZXGfa~E z*%7Xo2NRDF%8w`6nP4+FW%$Yr)@^e$6alZ%j@DoRDTwaUa~XC)kK<_r~|re8q0mk zCt|R{goL#Pg#26&=PaXtTY69*yTpOE%Toz;l4Jen%^cE{uA0MxCp|fb8Ttk=u#LXe zXdmM~FqmsH`cYT?O2qkboilR6VnL+?;?xwnpDDgq|O!bvJ{SJA2JbJ+6J5#~Cai8A1;oJ6Gr(5_g zOh~ZFt*Gt{&@domu?e4eo+k^~d@+0eusEEc6*na~&b3g5TOXUFN9}da9eIMzz<_Ye zKyBWiR;Bwxk7}rOt(&vuflh|XRX!9>LgPUKLu_Td7FvD4+j?qe@-#h@5bY2GMzx!V z_Io<%qZDg9LTJ$b2YlrE4QqTlUq*3yB4uFe1xX3jKH zb2ZD)7>VErt@2ABDHCz5ZZ2|hK*RS#N91g}-_65GDsqP+uY2i7hBj04lp+mo(R(wr zuigVKF=|i?hxk%73smX6sCfsey$Goro7|yQ zwub}oK<8GvlY_@{mfpH162zkc`?>keE)ps)nTNoa)5B=Xs@WOWw)qga=F>gGcnA(Z zIm)cJot$p;!r6ONL9DsOg;~P3{4SjLnULMDba};K*B-9PHMQwe>d_C8-5BuP!1;f4 zK`eJ0lc?giSHH@hxl()F;ywjww#yqOFM5ybO#`xGN3GV~UPn!$%lj3H5gvgC_xJB2 z%exFs#k>N_>4E!A4620ZamV`-uB`gJNm3HR9^$U~yQVdSY_kyXu{-e09Qvhp@|wmr z{whNx1-tj|c1gV*gusLBnz=={l1zNWc_C$AHmZ`KrLd%Haw)Y?nT@< zA&HbYV$So}{PE%=v}w|$;*d+*&MfXhT418%ddWo$9eQVlU*cO;)V8Kfl0B<8VtVNYqY1|$t)u$ag~OKB3bdi zYW1zs2ysLiV@GL|=A!%jq1dqC2#5`Z9V2#L^%~sB*)VH+w)1A~;>PRKFv(z>g>YH9 zwsJi_^+ul*Y*rrw5qTzK9~F!yNU$(_A>s5JzyqAN+=4w7sp}lUKML!BVNve0Pin=M=>Ee#_wBuzEeyu3#}K4pn?BDPz`^ zk*3D8ZuBI(99Wai=drk#+iP!b70*@9MeX4?NXjrFf$ewl<+Zo{8O@3H4xu~!HUngp za?9by`$#V(ds`2)9QV3O zP)O=Ur39iJy2Asxp_QGKi*mqUT`?_!j8;Rf0-+|=fidSAtQKo#o<3il6e_7(^pp0{ zVK~Gf>s2^1w3C|WwTd;Q7bVa8hW)C(&mP2;al181bCx}LQVqmsgr?GMi0k`6{*9zd zv)!;7b$M3+?)4RLxOk|kMq6kN#V)f0{qDQ(XteRH<3Ije7h`$q_#}tn0mJ9;$n??D z;^N|6`Qg=7mRF~Fj~^91#vxf=o^bkx-mwafMwh9YVZRj}(PcO-&5P)X>j*g-5EvMz zR+YJ>gTtxdH$I$0dF#aBDzEO{$lJ9#$ThY4wCjQ54D!Rm3s&CSbu){U)P`2T|cNm3{3mt?2mG4$p@4|iUw zO`hcZY~S>os<=;-R7G>>@Y-&So!ZXl^jl$4>Ru^H?)=IE_6vRhu@%Nd}rGTL>7Y?hC=|azqGmUfjgNakcFtkqn zgEz>0pS4d@N)g7H&}-I{wQl%w?FpS+?Z4%#T90&XW#pZUzxp+In)3QRqptc{9rd8h zH$`D1Dx7&vif$DaYHWfdZ4U1#SV&++P+WK%ql-tSM#bL*G3SNKv48l|LMt`vB7~bVK4sk=JqTz0#nG z>mMxKJs0?0X|)REdZs5)%=k-;)Mw6c_bu%N{IdU?hE0R$$Kla|f;0PQ=8HW&x{bRx z5NM^;RdzV{W3&3%9UE#x2&?*~l3HxyEMz5FR})re6>`B^oi2L8;BYw3JOnTdGjyTxe6X5XZYq%xo+C1cdPFykEzgJQkh4)~$_yY1N%pSTi| z?%5r{h^Ve0&GGZ7sQPRbM;S#pAv@UPlt%Z0-XM3dZ?x+Epj>)im0iHWC)h?;LPib0 z^aVl()SP*xZviCLSX5a@#UbQRFpM!v{m#qY$K#7JbHx&BB9lQ|#Fco8qYnm!X4lu! zb1jo&qr|l(9?{&8O0>vH*|?`O z*;{yfc(yOa4wqF_;a$77B5(Z&l`S_75>4&$U3I-P(-Gf~7_SaHc2rPGM;VRNW?pz4 z)lrkljGMaAcF(G&@UcQOyp4qkYVEX~ncZ$DOd)zcAeOJ%D;uubzy7Q00XE@E?xheET%G4jm9M;F4Az;R8F(nYi$GcN3 zr_5LSz0O)c9XMOhTr43cu=jFqzYeH+*E38r=4(7iY>W!%Znx=c4}NHBhj!E8 zb9OE&%oBgUyFt=Lk0F#f5VbAL2_KT_pa-jz=S%gEVl#YL6x|;@u{@p>l=yUa@-=gq z?@D=!hA)U%Y-6=UEZ3Fo;xyOi5i*$RWw|l9M)D4HijM}G)TdFpd&+4Efr+{a8FLet z{g4-K#BuWceUE3KF@mEdzn-zU>L+Il8O~DR+Y9MrZw7g=ygoU9gQ-> zRY4f<@<{$&FYGpdzBR-+**&UN@DzNbQS8vdO0FO2+Rw0`DeFD=)%lPOOUeilZE?`g zb^7$kh-udz=v-i(Gy046q}A>sx0|rHK3;*BaGnp^>D#Sxc+9}r=00FgD|c(GP(9DV z+j*#ks@IiX!E_rKv^3E_7HfMv!E&nASL(OQg+FLq^X85fu3D>3Xi!08#|F&3pkE?Q&*23mGNfAhXJdX( zZ^%4jrlTC~+s ztQlEx`E3(JQhh0~`Ji4Ma4=fjox895q^d>-2wl{17_p)mHa}4cfuPowZ^Efqv@hMB z#HQ}|*Y-Ow!I#IjB6{m~GpI#CwY5RJB@H6awHYTcA!ZsWsDnjE|x_O=gPKVOBx zfD={e>b5mD>IdWV4>h?GJZg71AFLWS57CX!$cz3nM{-P{et*gHQy_{mXo;iBjptd8 zJ|bRhJ!iWD(q4=jJ&T68X~Q}KwLmx~;aigNatxhwZsoptZ z4&$$^XoT)f!#p<+%<-_644WBAz1+otI4tWFd0fW2L_&u2r;pu6M*09JI8jG`RvP)* zdzK@-nWU>`U>Bl7W8rUzkgc-89)$ETW0*<60eZ#iZHV;Nw=$+uT0ako88e@xHO-E1 z3{m&yl~*`wCj)V77>CTkCB^O=Y!$YHPYz5cGOY3EY=gU{Mj(Mbsx%Y3oMo|snzrJ) zYz5J=f-^@eaXs3yK}UpX{f~?-Kq6}hu02lBeMB@7vh>tPK&|e`wqdK>-+^cuCq%P! z`Ftg6VkYy0sY7P5PqOZz#K&27M>s|1rxeVpix_4ZgUq+bYT-*3_ z4VhT#L!T$;>zIs3d6{1GbgA-4lqg~^fbs)dINSQPliwT3{Y~juQsUjkV7t>-$OSUK zat7vnYHlfs1Br6li9G=;nGbK|(KRFmcbpT)<~zk&>ykftSynKs)4k>WI$Xp#piW(# z;&Na%)kXK-fLmu>=2xvu;Xs(6;!8O2I#GUM$eUa7^{f)^1zv zGMWazTvzQGcFq6v?+^XPT}B{PFeaxx6?u|pXvNND_T=6kNp~7Vr|z%VbOs(bNNRUD z@y=Pq&-?_S>@-_Tf`YV5kzeO^XVj`7^q*R#F~?jvhGO(jL327ukzyoIpv@+Uw)NKtGOx` zP`CL)x6e@JTjW#$&hqkfoh(fsa5+Zk)QcV{QT<@k&cvth770fk)YqNbiz&-#CZcF+ zOH)uAR2U*4j_acTK}UhDL? zTGHzX9bijta`oB%9Nsq_udBx5UG2=l*^!ajrMA1w=5KrZkW=s?0z|uKyJXy7#$R;w zX-oHy5-DpEMm^=Ld-DPo>o?__RNfcGYc#Q!Z|XncRtF2+-^GvciZ%GH{Lxv1N{{@g zT-3x2V4JFMK?NZM*6#G5c&ik6#jwR9V?odOa9JhriP!HEhuWZvVh1V6|y+X3h5Bs&=ue z@11r>tkeR%kVn&vv?;~}Ys{YM=K^g%8WI~sNGOy0Q!8SLeOoM;u$c`L=*~FD!n&?# zJI9_We0#9FWUU=lqI{3AT38BRb9>{Rfn9H_h0DUlMpi7 zR+l!=OIgg%Y|biyWpHOXeXL&0OO4uBTIJ0Hgefn-I1ha*xyKKO+4?;K9pAd8${A94 z@n0ufhHxfHOuU@%hNYz)f6vXKfJ5Nh_x_`2~GElh&-r%@)*Zyg+aSzyD-5QBL{kwXI&(_LenuV5v>~ z$DT~v%)fRJPo(_-R5-TkW+INo-f?jI7``?d+yg!=Kxg~)+h80lZvcpHs4`z7Gr#dc zEAd)~Xgq~1J!GICDUS<~R@wV_5%X@Q6EMGk=J(?c9zx1MGo7&At+t!Sa|xrK2_Ri2 zPiWIK2}#!H@XXcvI%-!%8<#6(pI02(=j#I}wH8#ho01l>vjseqn-!Ed97ZN;ol1m~ z=_!9KbDYYKV{CAS?1;(5&4oV1qIkDFJ%@Mwk0TXrYvvw^nu3sq#XLrr(i(fvV*d`E zpZWY`j|xdE_P2YG?3HFlSVW?jIcM9Ty!3MaU6R0-2nBR6vme?!aJ<0`lojpd0Xgp! zk7X*ehi~64jTj{Wj>`31yTK4SW?!t>bf3?832YoA06PC%;Q^cSV=Of%T8OrtyOG1g z*X5pF7^Ne^$^%$$^VtA&C@X3!PqS-L2l$c9msq11Pc?Z%34pqdp0f*A4MndnEZ?N*?yc(=UaZ=--jvU zmQ>2}#!C)pNpleBc;3^Qm#iOuDz~-F*V%=M)s4O}fxBErN{;3dE?~p~Tl7>WWaC$) zsG~u7@;7E$uP7)Yq}-Bz20f$AAv5kl)4`-(5fMc}chAQW5xbn$dJnEqqP%$6SnUlm({+E+Vvo!4H@_Yu0PQ@Ay-$pci|qB zxuw$bA6`M{M20M|Y{nM;)Q=s_&!oFe#+MJ*j4z)~P7Y3ysN`ZAufdfTJWen)I*AAp z&=*bWX`ylR(d^uv0&2E~E#-mHvYBg4{loiHtQV`oS*`}X;i;8v=jSlum64`_cb~LMK)f8RXp;yzbydLfTXJmwbrGD$1 z?Ny;K<89?<{v6t8WTNE*CfraVdgdc=%VtepcN0;dC$dzSkCsvm=1hfu#O9^hL@lCW zf+6fP=JD1cRKwVn5FLdJoiZe%2eR|UR9d%mj|!$@PP#%q1w2d=#OZl(b(t8&s~?y= zoQ@>$;g!`CLP(``8v|OZTZ0$K^Jnw>cap63LKNz$T*>O9O}#e*0&r^a(rM?3*7)EKW@M30`Y}N zuG#uc2|hbG4@unOmH|35QOBi|BBeVx#mv5FIQp(au7_$tPD?_zb7h}Ykd6HJ?%mGON$4O;AuE zcv+oV;pG?xkjX;A zdznOTH$EFsG4&sk?v&I}vtF&RBXg1f?(1b)895FB8P$CzJ!rQ2C{lMv=m;a%-&)m^ zH;>HGSk#de86a&HQor`5LSmN*`T2KAV$%?@Vm6_LO9?OoDYV~sVKs_tzu}0-h4u}1 zPSDFAzx;asAjE6I2F7*CUwP(9dAE`aS4V<04norAmRb0H&76!HP|`aq3b0ev^d-_yPgd zW*(OkD{zFK-bn1rQSX$0^e*8?g~4JX#F1!hdSm_^?k?ej~)kEWBM+<-qx8(mf@8DvX{AT{rMUE78Kx4U>g+m7fy*9WlI@(jYXO17B!)WxkPigiF^BNa5=A512efDyR{Jd z&;%S^7qRJGB8pXcWwK!uTWs7@-rg>P?~p)l-rwGYT53rkHv8#A(-P$3H0tMY)=G7W zU5?@{M}vEZ-@S)N*n)J~7)4P;_lZ1h$BA0)_@R{;x+niRPUN1zk?5Y&x{B1dX2DIF zrz6`P?$eC`@FVYYzdCNe_j5<%@jX<;egf!m413f5mKS4_}fKEBvQ+TlRV z7`RJ_wPkq9jXR=kMK_%3P)2xZ?f5kd-=U%0v(Y`Ev1G-6^5uxNYssVeat+oljk{jn z-h{pagU3uaF&D5i24e{5a?OH7j6}v(OVuw(#AX}-dR4%RE>>O`zB9m_183FOlDg$2 zMHE|@6)l(U=#(De4n~e)kuk}k`$(x^9ul80sl)W(q${FJ#uBd%KjBhKK zv^oen);h{iQHqsZlS{lmmMW}4rPsHu5J6mc3Fxqpqe0=LZ~ZLSNkCM_S_P6}ZvuM0zFGb{Qo^ayc~=g#gN0eir6}Hw>5e->gbB*vT3yLVV!r{H@+ytV zl#<+n(kReCqByZ>SErslPKd_Z&5-pg1-uh2{a!1WYspVRycKABDHn1BGJx&?W(|0! z^9b&QBc_-eV_JYE`?dkDusn&QAzkUpJsSk4Dgr$4iYN?e9Z{D>w52+$K3(R8 zmDWyPiwW8F$Jr-QfqJie^3WV3*_uxVqX;pn0wSMSL6O`uY1L zf$Ua_3i;5O!h`-F2K{wOKd4J0KzMg-+LuSc%kPUe^qpNxLG3 zi~@Wd{t~tPUhYZ-CE<0Im920-K4aHoA%l6yC?#l1 z<#NjdEh;;#QRzp5*CGJ(e==?pi1EV)F5mMQ0#~Rl1E59A_GG5xOY&26OeGX^r+eil zJ;ObJ8L9Y?#;q{sLJWysSf{0VCZG8vse*98H(bj^2@Y`#nJ{CrH zOur=PCYYHM(ugd7&@Ut9A5QQN*2K8cFaMel=Qb5@-Rw8v zVg19VGI8>>^%1&a83&=L%e8X7bvi4YrKE}h(e41ZZ1nqNJuaHA+gtF{^fw3Zut^jK zlb(S0+g z^PNA3nGaq?$fpI)kJ`Ki%;HpoE*t5=-MxgdJ$@n^kA&E!9_o z*S<7+?ic7$vn#r0Jde-m^W72EN$~i-t-Q}EWY=D!M$7^koYUEs(PA5C>s92oT@AjV z!lvT-TQGa(ipwHF1$RWP_2vZWrVq5RdcjUS1Ki>FK+cC$4iW&v)YAp+PNj$13P4LA zxUc%59;dCDcEGK@8Tj!E`8VF+%g-qx2?NtG{*)<(661H{*S==Aez1Nhky-1aP7YkM zPj%w~d`)>XC&``4ZF86sUH#K$tvg11=%-pf>2+e$}J4} z3<5r$NP~0FK=+X$&~`cC_ZqDlCF!QkFmD(dTj{x~%?;|u)cM#_Hm2hCLQuA_%GaZ8 zUG9y(SAu>kV&X|yF~cu!TZ|~;)A%{9T`P+4jnqW*=J#QE{KSkeW|fqmY#Uv)+nO+k z_B0F{4(dJTnw%^Ut47-+^{PpWYvWn@Ua)c*o59JZI1MWIPcdPY?TcAQSwBXxn~3n* zx<^3lvgs5^y`m}zReqf&KX`Ry{rKSX-4*rjnl`Rsmd=b+vHH)y2P#}q zV+#TPU$Y`U!+29okkxqv?&b(g$t<5W_1V(i^4z=Ql@9uI@mYHBq7L=2b=?Jf6wqpYABbV4z#N zF*kbg{_?p(_+tHR9BZ5^ITMl;1zam~gFClxNa=L;2aTu*y_`@~;NN2x%Ba3W8~=F*H8cQ<3Z!`g?k>o1v3Jdj1Yj>Jty&fjboo} zT1>#o)`$jWRW-W2FM8}QLz|%gvcj(ESE&f7dssW(Q}3c0MYYzyY;UgdPWtvTdBHA- z6Y+Z+UJEV3&q?PiFYf>(b%eMj>&f+79STF7nrCI&0}qD~RX{(-dvuyyU{1m)i6Pd{9dUPktp+dE7GY>?nLAoGt`+zs55xibmd3aN9Y%Vx zqNx)oxr#4WQLKjUh!3kCY_nxkD%$2d5;8D4v6A}k?7{DsCY_e=Ic}u`wG=C++dc%N zWx1stLh~zqVB(Ea3yIl~!1E#kg0R!dS>98!>1l}X_sXC&Wm*Hsfc(@VwZt3T07Mai zJWzUireC`6Fw4|)Zsp}My4Ixc)eu{xn=LKpJssP9B16642R@9tgco=1m_sI_LgEwk zP>w$NyRe;Ar4?&a`H71aQLu2ej7Kj}cf~8XZ28fkp^??Q(XG7HN)+_O{sBdIZ`b)cEfh=<z zvIlv*vxjCsWYj^Y(fr6|=Awdk$70)KVm*E)uLPR~05>;!2v~==tuO9_?))o$b-|>r zI(GSV%t=CW;nx`e$KukutH`ZRX&u(P;_n_-Sh(fw*|>oVRaizCwTok<1@5gkb<*8s zXikk;SFZ0I>k(nqySp;2cyJ-$Ab~FVrFos;TZn{hc$vKK5a%_uFpFEg9R;LPt4!c> z`q*x-;6R1a@dLKXRUik=T(GG^y$z8 z3>Vdjp2z{uL$Ge=RsKVx_SY|-q)pzKA5j-5nm4i(8u>o!D(NvJ3n1%^Pft5`er;O1{5rA zajV(>jI8Xhn$KXXGdQ?s0|B=b-d88%tG@A3pYLMjziw)M5Ufk(E02frR~ek&~Z5Qiml%SY?>(L zu^$TL8%s}2|ASz`>^B}X%Pk4wFWGhun|J~-*6P2CydUd8Z{-S}y8imh5OK2e2b}`tdeLjIlv?21M5C6) z4sNo*LvJReM$$~RXRLlmIv##nnZPv3?h?~NEO<*Qv}fKEQ%{Sv?4`G@*aJoCq=MFF zYI1L&eCMUle|It2bnpc%?me*t6nOZ;6?|>JaxNwtzk)Q?#@dh;b*W4J*O0#bO68oV zz)JOlqrlpu1MK8XnEYLiblP2J|{v)($~rZ zScEJDj2{n19hFg0ap7TS!-=!B6v9ADYKpbp`zouN+6S}GV!Pvxi_bQ627T-vwHO^D&P38UoCkA~i8-ghw9iH+{$immV3clR0t?f}gw8E>n;g&`VH5?ST z=1lXn4zEWzR_%n!)Pvg<#?cAr-wnEVPszj{a~3x^DG9)(dY=}6bw5`FQqB6|Isb#8 zCeZMsnu7mn&~U;rw-%a7d^sjtLXYR>7p^|pCfnIBz%kMBuavtNR`rWPb?ARDs0WvT z?&HS}GznNY)>FRO_Z}{PuANOC%DaG%lHJ=Sg{W_Fwri~h!$%Gl)LpCK89jNd+_5aY z>@B>{r(!v0m1l)Z32p)XoNh~sTqW$&U;8Y0ZR*LLYi?Mf+k?ZE%81Ji_ac;CJvK`E z6o`A0xWGEg?G^{sGsqX%XX8~giluY$+7KigaY49w{>I&0h<_K@FlyqpQusWQ)IV70 zb?Vah>pT;d#b+Y=@CHvVrD$G&EifDOL@ug4|+f`#>roqC;%HHYh;&dMOY*Pbgask&}_C-$>)=)em^hzD&KMqwR_ zk6O&O_>75xESZL`_sFpcwd*Qbq$EIC&cd+RL z9+m+`S*;ptpalKd%Zr~A*O}=HpAzfAw9u+AUE@{xwd(>i^My=?Z>QRg6}EVhs_P_I zBnRTaqi1k}W|$w4*#WyO?7W)}O;~^6I}-w=l`l40mXDX=0Y$5N6OZ%Md!`3nFJ+K3 zi4h6hKtt!T7$``bO@U(IOg|Ou2DKr%s{yPB({#yDte&TPK!7S4)!MVeb&i^IU@hp6 z2rnuhgOmrI4}}^rzHJE5Q)9dyN-)-jp!eW7xBlgU!fuvCe9(#PhqnykUg)M#jh0$y z&uMHiaMTLoVZ36ynzj|?*4WD+8!vi)v0KfYx@JCgPLHgF7)hBP92cYuJI^(faGR_z zcQj;jmt6180{?wjkKuADnmuw_)|EaDMkdAL9>P##cv+u^^XC%48}pN^yGpK|Dlt$)|dqflS(_^O;Zb73Hb)_dij0D^Up)A&ntH$AmWwyl=cfNBF6k)SzT z-RE({1% z@AS$v3E#^g$u}#^DNmn) zU6oQlLBnW36_Dw5Mo!4I=)u|%WmY5a%B)7i^Y8zfGcZ5bIG5;6*JBkIC9JM%RhlFD zLmZU#s;Lgw6OTx`o=ksY&8v9f(~z!O^PH-j+wdxvxlbtkA7Cy^3(#@vv~bVF2q0_F z_)ZO}z5?paGcTmlyh!xb$(I#G4(uQ9MJG(h8GkT}Y=tSlr=H@JFN_^u`$J*?=% zp=9rO!b}O_5P;&sMV<%X^c-eMBM^5YMQ}^S1=`-@ezURG)ydHu9eAA{VhRndoIOf0 zPJF-9hqvAaR1NTZPQL!4VF^Mo(l;M__tv_G7!=U#XT4X10^8KpT_Ujph3gTbDPD0L zWd=*1Oh&EBGFQt~!~(6pi|sn)QSk5!z;Idp7SD9&u)lEGBCUKu-gJwJ_AC~QAN<(c z%BA$pa;(|8@%`;5vF3TwtdSapH{B6p65y zA!W0P8pOc&!i=)eX~HwB;-`L%(_|>z*z$qu)gDfQIgcy|dVjW$b{t7Al!b;pil6~R z?MWIxc}{);x}*<40*O1!i(=w_%zaZ53%>>pB3i+RV-DNn4v|za8ecIxaMxTNR>(a# zpcrTM3XsYA9lYRRWlFSvQFt8|{9bnr1D!aSeiz51;eJpsYQ0=ctLb(Thn-*+NmtEQ zo197}Cv9n&OxkMma`RJ$Cx38C87tGpO$~uYM#XC7+#z*d#gy-l8D#}hT=NH~!%Il$ zIcnWJ{Zggu|_K(2o)4ag6$wfV&)2BKaD1g1IAK!&7=?gTN zi+8+~2tU-!O_;vUb%m7$sh#JTHI!i2!Dk|TYZ!FSXw|gL(x@8dR0Yz@99HS2=F7?4 z6Y--0qj|e~;6!m*G_0@D`e!XyG+vc?hfkouNW}dC9)(bch}s^C3!^~cl4@VqW~ch> z;qD{w++-hpQTLZejL`)ugWA8R{*0WUmuTaJHE3WbLI+W)Za$tm7-R>l&#{m)&A()( z-;A7I0g+{&5j9c9ij9A~!$(RV`$N~ZSG+pWq zN|^ThWN)(J_xM^3=WMvLnh?9!U5Oytcoae3eQFl-g!3!5jYh7faRT2LkT#Z9Dg4nvw-7wkxoY(l91~u;n;d29 zKun&5Ow({OHUGgSyB$!vpA|)cf5Aw225dQjD3+T4^ygI9pA#qkte3Gz7&lz}kLFm& z%=YUCCPx@LSh22oW?DU1KEJneV(?d1bLL#5$wx3v<~DfkFxKEpv_i2-eV?bAUD<_p zW1+zy?E2&x*LdB3yvb!#V|+rGBTA*!Idg%EyF?gwU~`%lzR{Cok~!iXPo2oB3mJE4 z0FsLjguQPSa-`gfc^Yyo-}(8q$7*x<|HK&re&)6F4=XQ`bH(Vaxz}L9{MD#f?co9S zY(1!dW*6wU1P0jVeY3wR(UHmB|M>5Lr2qOunDnD=Q>9kknEziff~*&QhwQyeI2^*a1lk92%;M;APu!#vlt75K#~Y!08N9qg}nO@eIR zDm>eKxX8%o=qN?b|In0e!R45tj!l;R{gg>D0LF4hoE|(+#n>$+{m-Psv9J55=!Lh^ z{u?j?an(xp=PK3k|Hh8sr@VRcbA{~TzyJS#W&eNe^S?Rk|DK=!`q=#Ku>QSY|It_2|^N_-c;!#s`IUgLPLmS=fvYy3Y2pEo1~gW9%j|87zJyQTGCotFQPZdLrdRrfb+ z{Qbkf@9RH0$DfA!*FOKhv=4rZ$^)uL3`m`LU3Z(JFT3H`zHqfK8FV_6om*!sar(JM zl>&JGCG=iNyY+JOj<7G4w9p6O2*Q3?7V0YSSL+@U?QL8M`!O1`)vpg<)!g|y z&Rd^TT;ArM&!#1N4@0mI8vc{H=mg@I!n8CshimJc4YI}W_`W4@+^yc30NJts(QY&H z^;6eJFDc}vuEzgEM^~4qmQ;8M7sB+pZ+sG%^y?D7q^$73DjGE~X3)cUL<=YemlFpE zJ@KW!M}6nGwkAYH4u8O%u*>SjbGFJ}yJR|daj;yYJ{=#(KVz<-AP=^PH_meMy_LZ8 z&%9cX@K_I4(Y2_3b5B=ObgY~!mT>EKe;B^^P%4~ zO^5*jo_lD&+afo)r$8PuwbQQa-khsJ+0q;6zHV;Co|nODS`;yxR!PQsbX!1|(Bbo) zZ4|FpR3c0ePglpy!+{#hGRUmWzs@simd^>+U(iEpl|Qt}GLV2HaI!3Cg+rw4q$8T@Ic|#r0Yx(tkRuQVL1;j^GEwM}ic2H9I*!R$@8SJ%F1=sCm^yJznc*BFB0JybNGvjvu?zZI1LmDnT5guTXCkEOXvRjY8 z5^_@+f&HJ(M0)G0gO%igv32y2@tc1j)|+PhptoTAZ6ReK9_4m8-|}iWDNO8QH@)VZ_nDu{Qm*e{JOMUzI zMh#b(^hp3cmTtf_xC+JHY0LagRd(#K8($vUZN8Q)RDOY9o#GvOhhLr2g{%)6py5bW zqN0c`N*DS3A7A6q5oBVn6$Rfz+rKs7KxYN8ceYXqU2CF!?-CCek9Hp9^L;rbd!5DV zv!;2ehBx<+SoVHfo2fv@#;&9idzm73^6~C?1 z)cTWytuFELjT#>)kdQ&|Dd}5*neTmp?<>?C?fPf#p4ERI!q_l1Y`35>VZk9x^8&Iw ztGr}(*oDElReB$r-3nj?%!eAGa;^zrd#Z{0Gb;ywN=4O?wsU+z%cmAkz+9@DX)()R9n*+g=Nh+8?kvo?jNAQ*O8!n18q% z9n=8$@5rWt;R?d8kbq^@e3aSH(dRy}sK?g05*CDUU%G6}np^sGXgX=S-u}TCjSl0{^gYO63R{3&-Awww^Q7_NVaJ&r1FY726 z0Jg+;Ote+V5|$EAgQp7B~jP252ick|q?d^w6=3wG|M_$Auh)@i&BGX@Hkspo^K;Ohq{$G7% zOM?L|iArNPXu0buglowCi&A-}ZXY@J&>JTzc; z@mdqJaP)VF&WK&tc{-pL19RG~RhaS1h7>pq&2<+-PDE|JPmCaz*TTY`e3DbY@pGpu z+My&I{^8k@QpNi{)V_|*!v#QeDInj~(8KH%5Gdd@_mRnGCsZ*CQ#+xawvb_s2jS69 zZ+3dWhrl3ur=e4nXpEtE!Q`M-L*dzF6<5(xunTfXL!$qrdS?vNw7rS?zQrjyIOt0z*(pg*?>k>;|23AU?xqKV}W|fv9>1mev)7 z;yeSIw_fyPeZAKb3<0O@!H;FM{=59zy^qaX4Mi(MCUItw`vQ34;mdTcYOzz)_g8Z} zw~J}5Yxbs!IVaxwc@vOn-o&dADPP}O0MF9NtH8avlwNLcCm<|_;Qr>&WY@(0cEatTsk>;_9xp-E z6s|m2;ZJb}#zuVxJ57u^pXk12qqpu#$R4SCbk&&xQ3*CX#2a~|0x^)-sZSEF4D&fx zw!O{L%`|nUA+-l&fkSrFA4iWoV4HxnyvVu`W&7PL5uBBpj^YrP?pj@KZU=2`;!E1`gwj`om)$`u0AMl_i!QYr9$iw`5)N?0aWYQ zBnx&vfic?w&&ur=!_Ukl6NNv@Iyg|&eu*Xl9>Nun;7cFJe(6nq1QWnE*L5~edHvBV8~G*J-Wm#smZKl6Ea8!8FkSI(^`v`6@!Jl!2`wXj=SkY z1gn}2SdNL@o^OlP{JCWuE>jaw&qF2}CCfarLuWw6Sr7V8(b(estVQ%lf{piDlA=+N z#Jy*OfKzdp0$V#X=R1B+GHfKB-h@_lUp|}Ytoo=8kuDv~VFA$3zSw@?HBMt356^p1 zX?uICkpyPQA~&bA^(flr+wfXb^L>{1QKrA$=82O5Ox@8(HExrdE$_Auw@-Ek!t9CK za|$GKJ%yd-91Ki(Zn?yr4lp+=!lM;;mN!b>-|-P@2{y!xhcRII^>BuCI>ft9yA*hjKUH!nZbbYTltki`o_XsK#^`Y zKQ^6Xv7JGdTn{ydc`HG6hh{;*lsQb#zAMa>5#w+3nt34s+1qyNL&y>9ii^}M3a zZw9s2a2dZQ6R;^YweI5WKF*z`p>Acok^@aCKQrJfBlz`k*^R(li9##**O|w5$?pqVE2oHvjsmA z&tg9l2h=9+2*h+}cF|kaQ|Ai;!H}Bud-PrbRCc})o)+FFVcG+0w-Jg0Ka|=4kFIb9 zgv=kwHF5oDsrlL9JJ|p;F8T>9#j$FJIl1W9lP>R!l(zZO3bmv^=n zIU3;QdZav~20>I^@7fcQ5&{(r z3@zuGo7V5*f=cTFt!n({3w!-5pIP7v`#EG>EX0r|IMrg+6g2`*Z*71fAnV9CiRFo3 zJNpO3q`{dcifB<)SR651To#AtOSB6Tp-6Du!K`)cx`O?Rar@n*SK~k2j=C`L*H7iD zZLYgBpLC2NQ9N-1d00sJ@omOAX+>Xq(#vVvpc{#j!ixL$o+db<`0SCmsAA3y@zbZD zoQ`nEJb%nn4l9S2mqQsQoN0%{pE|C6nC83c{^6-Twff!YTZHKsZSs+Q!F-{Jy5$uY zSF-))c%t+>}T6{OFHA|CnOD-0Gfxx2x-uTJa9gT6{ z6HR&Lc6MGSNtY@DsxMs4-X+&tv3{;Kbb0@rjQrW_Lpan$Y|pbxE4WXX)V`cjI!-bB z8Tf^h=We|IUXZC-e$Vky+i-rOBr#oh;AUGDI%8DHy!$ic zp+PIt35bf>C`!D+ipsXnw(WxF!H*8|wWck(qUq@X>(b_UNi7lmpvuKn&F-@_C~Y;U z`=tiT8b0B)*3Z!p`ZRU0dAM~{`L zcWZ+jj=i4C=k#w-9qFOX%GBB8EP17|^m__gvo$0nZZetg@%DXHcy1>V3Fd%FR|kV@W-e z9=Ms&eBt6C6u+_>EH&ZvwF6|4RUZ}Q0B+x2y?k6(N^64xtF}JzLs)s9)Vap^CA1bQ zN|&)9mm674uo4_7W{gCNIBm;)cvyi#VzRauw|t~l&UDpl+qJZRoM#wgJ4{kk(ovsp z%a^WPAR5PRuz&Ya*i*|=E=d?9R;w9V4cUM|4fZO-sknN1!}zP!Mo{lQ^`U(a{ok>$ zl4&uJ%hhn&hLmFtg2IEDq}2&2&bK2);%0}Zacwba55}{EBsd~1AfM;*BwY-id-H!} zcxRS5oK!5RR`kL@KU%=%bv4Q<28D8(&r;ePSnr!`%GkkrrSe?ZL|IDyb%B5l-&7EU z?oBMx)gG1k&-c|^eQuYlk_ll-v_otDx@UD9U)@(?x&cFn``LJb?V##%+c&aw0}T_Y zuN`PUC?vj5lS!n1F2H*1&fK_6dE%`^h>icA=0{4dUcbKAUqUrs8ukguOjQrQNYe}U zE!8?rblsDh%XeMoFt=bEH{P3O;0)`a^Ix6#v4>DwcWdDlC?8cWo#%m58~5)MkB`6H zD+>7 zY-Mw0>-FbO*exl+svbf;AoOM4Yy7T7^2}R?9~MHlLhWl9ruB4DhAwp~uL}t(r-Zeg zxP>)vk+RqAg&&ew?r|NJn9-c+2&abBunvYXr77mXmp(Tu4eqx!+rfo`a=XNC)ItYrq;t=Wwm2beTd=5d~x59ukbpnYI518 zlBJ@>NJ)3swm~NYHpobr<;aaD+HuT&zl%F5iETpTZ%yXWOKQh)nDVW1OnkTny17>Z<(tJk=C4MImzYyP95&-%Ri zNH>x_539}jVBh@rZC~Yc!$;(MdJ^J3GF;|f;Cfs%Ta6henL``}u+q@X4-6iJ?N2t% zi?~IdA*Hh&ovU?&n6kt2#(H66+ScRG2%j2}EZ~L$|MKN{uRck5YoHeGP%=c@!Gcsa z)eoEIpXV~Xq@3bKIof%yZqS8_ z$Gi_>UPljRiVq4*qFhT1(w4>!-+Z^VYyyWL^J7nvc`Z@$lnVdV5anu71|kR33Ne`! z`G)2B$vBr!!YKNfXQC;ly6B3-TqD2D^q@#Y+dw$^Ldk_eL+I$7Hg8)n`y8a^Ai+BA z++C-DDS?k6M^=dQGQuJKX1$Hss{CvHYKtb0Yu%mJ6AK>idEmFb9oUIRi58sbU!^k; zaxe2p^rp$sRI1rY)9K}H<{2EO04d( zFWme)R^E91X#ez89CkCsn^-zOa^Q(b>GuPD+?xmD4H6{3F2K~)AHvXqs#P!?GXo8l zkK(a1(`#pPL{;qT+0dITCO~j4OC7I zPYT%{aW8rM=q0W^)C1@CikCQ{MlG*1d_b3&*VKMxjIYP6);Mr^nU)&;7Mx<#q?~Mb z##S-3N`Ktu$K6&~pQi)V+hlUQ+!!oqo(=d2*A+t!hSAVLO0?B89c7qT$NUl^n|1uH z+RCC!uhlRDI8jcnaE++XbamU=ReNLBMBDHYZe+!PNZ?W!lFnsJm$>Z5_zF#Lv9l^v z9di;Y<)?S;g+FFiP3kQH1c_o$-9^Yza~hQzcE&I$vi)$2O1N`9dd4xK!| zyIqBe+Ad3%v0EA6bgOJgqO@Hm+HE-0WBF-qow1XcxjdFD*4=mLYdtoc%^RdW$D#=Q zB6DsHEJDxmWmU)*^4LhhhO4bB$DdMtTozc}_lqWn=G$x@v*ka~CY*vx>2;#}7z6)6 zv@(_Bb!!4%c7GBQ>+a9ggFSZh9$h$JK}J5?*$~!TUN(;6bVKCE8td$5jT? z@lFt@YuC8U)ei32r27!g5m8|6jX?M-$+wvLy0!KR2^kS~xu%yQ$^_%CI=tG2!M@oaJK?N7}P z&eoxW@Y~{W^Aqk#pU-bNOTwy_S049%Y;oG=zgB#iE~U|xxaIfbNHDdIb)d;{9b3*QiNwR7`D-9^s? zQ`b9b$F8Avj7VtjXPnU8-wyOXLFn4VqDj|2a|4X) zLbSXD_R6MS$S=3~$n|t}m+odo1qc_rG$lq2(v;}@h|%iz5I5rhwt!L!ns!HZ9q8@W>!QYG4vZZEmX34^-KVOqQ3%vf2Y+{#xC7RidZGJE1?Jf zfCC*rP6)1gt#sjFm_==Yz@lP$Jw>U>u~)=RggKrn{91g=ICBcQW#k4WyPeu{Ppmx& z6C3|s+r;zjk1wSxUGGOdW!(J~v!&2}%_!?>M3q&%?#kTi%UWq{(us9bo&{n+HhwLOE6dTRpWZ8X%r2Q15Vx+Ht{-Ip)dD#x^~xVxQU%G@3Lp%~WeH9tq#UKHhB9h@ zNec0DapB2d2uzqEZvN$O_UzmFDKV&!QCgxV(}&Ia_BB6NPmTCcJ#3=pk`7#4JBzfp z&rsJUKDRg61!MizUZOZ2pWZ@2-!^{bjVB23mzIxu4mIs1+InyITXt*GvTEK-;y%p8 z#W>P1KrztCIku#t(y4s?VgqvLrTGgd2DrX*CBfNv{Zmt5rF0L)?wfR6dB(w~=2Dt- zn?EaxEdH^zed4#RA}<`*40+B@KHpV|Pc`0F$2{(h%kFPdcYtrtmZu)p9n9w!3C%8J ziNoP`$`crVf;e_Eywy?PK$Mr-ztl^9G&0CM-%G}!JK(0s*`FZ+cI<;>X$LiVP{oZx z#^1ke+RhGq7<2eN8?ph}(ABvpOG!yU#5nBXOx(6 z*mR{Ze7U%+)J5d}JuvkG)%+bf;4rUoh6Y|Lhv9@g$9rr`I?XNGvUt;ppraXtn52+A zNnF*2fWs38n&HpP{PE+;v*vA#^Sz_7o$)xynxV3%UK$CQsqKvwnI+qY0Q2lD9nEVy zPq^GEuonMnszpU>-fLvvT^9~r;I~3N$c?V;;OCzBoFF&WgW&S#dDTW$38K+h)*ke^ zDSB^3#i=S~Vv#lXN||k?L#Ul7!nH4RqQn&E(0`XL7bkm_2F|MTK2tCg${2XzJMpDECdcaMN{mDIr{s=?ehu3J4W<=lJs(`pP6T@BT< z{jJmYKe>=C5u>X*dK~f9 z6us@A5NE{arQ{_|Wph%17w?W8JiGT4_LRS8(mVdOZ~3yD!d!)vtBZ$(i|_$E#Ad&G zG|uQiGjpKC*$HLB?>z3>4zabVg^z9EOn1xS2e_M+D|Ga-UAYYGMA7?Y)Ncv5 z;2~TW9No(3kK>?vf}6Y8&C>R{Hvb->Q&iVFg#u{1Gp5hsgjv2mSNoOo6yT!=>8&9j ziI9Do)Coi%f@W-6>~*bhEQ(#>1kR|DZhI+oT;Gy#D8F`{|55^teaZf7-<*HyI{>p* zp9a)Zeyp=9fok1S`5GQiQe3!6Y0`PdK8ju@8a~ZRb(Lx;S>9ilcib(gWS(~blh^lA zj$(-CM%}c?qXsbtt&K9tv>v$2^h3jDm^C++2=W3LP>Dv>WG{nuW!Hnv^xU^HBw;17 z?E%2<`cZun@p=}|5LMPmpNCft`Z+t>_A;l=2(1!rxc~LeCy5Q2mguG4W%Q!L{PP0{a2E&BQ?-5&ISRj&A5li!6QX0kz>3&+ z`EFvSoBa+&rEdD|SLw~OCrZ!V!rLz9b=PONhOJgx2)qE8bi?<34L68FCLCzQ!_*$qd8^2@~}wU}L&l2oZ`jLDKiDEKu? z-4mr=!%CpG8q|X46Kju(5Ls3HecU#IMc0;GfmYCnw>R-hSRcYIiZ!qEj%M-fg?ZYX zj@#CKuh5?kMA{}#;g-JX$20rQROlfNWgt_tx1Pq{lfJ4Z@B0tRe)Qz@&bG@F3cmCB zlUwI5_4P9cZuaw}hwZ|Q4IgwRPRDI_U`xhtFD~Y{Wc(>B0ETApu%)F|QZDHt!l_1P zwXc0_i!&X=(>Hr-&iX|bA%y)tw_beM+N=5UiR5+PCz&e9v@!b@RLDcpxno}ZmMY z#AwxyKd%JI4udVb{BMtY94Q=kgpYxPVtm3za9ynX4uO5Wc<;N-Y_iY&S3=HH2`Q$> zsAP_A-3%%IhM*gg;K|pf4Oz76cJmoi-g)m6=NER|)%|19-#-Ok21)gKMVS*VU`**m z{HqYI$^6>Rws~dnjHUCv`YiLkCO)4lWgoUCB94NKP2?q0Goy6fB2wkUZr_}ny7eC( z{I@T;^#l~sANMQO-8&ti^oXhZ^xtRlcZ2>fmi~J4>J3vvQK};YpDI}RjviNv3{$GCj@xO|Jn?X5Zb2{MS^23;b-=6(HeiH@Dqwde$fehdY zTY4=2XTMS1Ghl2l$Ll|z(D-8UX)tt}8fdPI#VTZ)uKkL7}3KvQ7uc+n9zpv=uSM={K0vGMyTZH#e|EC>Yx#cXC zn6~`?)Zd?$C2{&T&m?Q<_;w_2Ax`zGz2OBxpCrW#OC&Mx{u@_(%#rSU|BM-x$eO+8 z?#RCXVF38!#5DqI6kqN84*6%XN6HLT06BDb{c-jco1)79;sW?zBJ{t`>R)H|XJ+(&+F42di^~25&i?{u zd}j6kBDaZ(6HNiM98WJ@e|QJ*!^w8WU#sMw9tdTSyi_^4w@5VLZ&{4apSUsI5>&3R z*BGYoS%#yAVwgj!zL@6Wt4Dww)X3dqYrgKysn8#zUxYU~YWHuRC8iCHUuA3Ml-`mxhZa-S}KJ0_jB9)%9%B47(EK z)@IvVuqEfVC=ox)Z@<3hMl@)rJZCv$DHE8~Gn%d5UhTY|8{G3I=`odTrp_*b^GB!E zBpgR%0IPalXh@30a8x##TrAJMZ@um%wD*At>Z~CWiw5idlzm~T%Y@`L^nkk0cXJGF z*nV5H*tqm0$8g%SkOYfG`nWCT83j!>F&(mH0No z)~H>&BZm8yZk7Ef$Fr7wCiZ^h93h^B)V_(o5&!}(S0#&2O z!9BuqTpki8T?r93gXe^(lFlQ-?HM5CT$~#c+&OIEpQW00I+wh2 zJGGzxbimZghs?h8*8N?=sl4x*$)aTo16k5NAH{{Vr^_p#6T;5Rr7rg_^@hY+SMGkJ z7>y^|`@`tRSNgTdZylZK!HME@Fj*>Y^XMtMFN+hRM6Pll__=3F9|{0^6GyX&yj&eC zf~-5oFzAh7*ONdcpvV2FD_%gs_)8q6$@Kb6D+3sK3SSy*r~7m8qWUBfij6!xb*A}T zHoM-2#OJ7f9th^9kjvIa!tL)xfsqqgsxqyyypZmLs?|jI!w{S4=Jul5cCkSl$NmgO zUA+vIR?XSpnus^=06V>n?h#Zic`LzhE(6}fY1b@t0Z;ScNrDSf zi5S!^F|Ug!TIM;+RI^o~dxS zJwjdt$AO_w!lTDnGcLpaa)^ktdtdtN<^@6m{-SKm`qJK7`|B(6n}hP9xxa< zgL9%1IIf-xR44;E2)9|U;r7}J5R5Y$%Lp-S3vV4yCj^AB*}w#k0nyku>wL`=FO@8n z9$hrSTZt3bnXMVMlo8Gz5^2&A;d`4WB`NpTyF_L`hor0lj?lJINPghG&~65CU#VE0 z-09iv!6Kvkj(~QV0&cnj|9)A!+jOcCZL}K7xB`t}*3|;s*rc4-O9K13jhBXAf0gI9 z*hpiEU`4j1r4k%zcZ>T9-VLDQ2?Y$pU#!v(yL>)8Flmjev>UhD+txhNQ~s+sjlYC9 z_VA~97m)6!ndD=vJ;VYuvQotSDIf48>DAV}IkFoXZ$0_53M|g>YUhW6z}NM8lf+8& zl6x81UDFLfz9rRX+ySghuDm|ig|+S@pb@PG%3>=#L^lH{?g@S!j$P5Ib@Skk>HVV| zW7icCro~Zf85D!H6ttc3DY5S3dES_Ie!AspXB=NV%kS0s)1VG3{>ME&`760eJ=ud? z%AHc|Q1ZKX#*t9M3g>k_Ad1q^ss^yrq_Q*_*%GTOfLBTkz1+ z?O?CnD}Z{rV^3nBqVVOus#4?L5})1D6zuFKDB%{eR8|tRt zy6=9xYWZm6^i?~B2c|!sYa$)v$2Cw2l-#yYKF?c4a_G~iwCGd>eK3|Q1!3>2pF|JR zyypDRcTq{Ok=8Tfpl6d9UvvWOE(fHie&(R`%jy`W-s1(MbhuU!}s7|&mc{HFEh3=N|=oo|Am zvy%LEkt+qYCPB2ev#RPNAbv01Zw+DahUGv-B@>5{&_tp74oEFc)FPw;#NAFdD&q^P z_7BIg?mM3_@K(kspBkc+rs2bZs5yj3yMr!!E4+coK;e8^%JS04X4-+Ve;Ej<7P*tI z>r!Qw!%OQeCJQA}dQl0BG8PqJHTOWi7ootxC?iZW-9bm>0XNg#K0Jk+&ES6VtjrSq zc{5VRy8XUtmP)9Shs1?!$St!Ua{0=B!b#D5FJ0o4Gv>LWi-Wqtn5qHcmE^N@B`0lY zmh75Hx%eFx!c|-*>ocD0t!ov0Jz82njhhBakx{~f;iu&_s|*WM<>N;*<@ynqm{8cc z#AUnGr}4MHU+%?lbkpb7;tpZZutWIMu-gF{E$yY|$Oa|o%Ggud0^OTz7o-+#$|!2Pmq_0VpVq&%~H=!_Y?ICysN$5L_Q8b zwYMDwq^*Da&U+jzN30 z2b=vOMpt<6`%4%)9*SY+-wP>s(m&I00^9TFP%-N*`2YY>3+6yJQ%NZwW09Oy^jlyC z3&`DfPM9)J2AiG^u;T43Jy)C!mQ*x(n)fw4r zvLy|gnsJf4xcAqX4C~*$Ut1X|{dB3Y;Wp6%I_#skU-J+aHR*8jYO!%wBmhD!8QIiX z>iM?;QX$?oM(B-RwYZS`VQ^J`s0nrx9*c0 zDqL)U(xG`b&y(=m=o<#GNZZe(kYMTkKF+EWF@lDt1?q&d$M@&EyEP{GtLw8p$ho1Q z6kd@oPY7t;oyVtLGLq(;AqOs$oX?Zs(g%DL0>&kVAROi-_2|1F7fYhV*YwMz#6%!X4X^WX?V0PE&~QvB391^Yz&)3WRbtk70OXu z!`9$dG_H_qcj+?8yN>5h!^<)`+{&!bdK*prY~xi9q;N;dtc$dQjqn7WES0C3`uTbp zS-;PxgAE@p=|8ljAKs!8Wk7Wf=8k^u)I~1I43BWvpSO2hh0B$a4=9rSI~z zEvokNxgHk`wH^_?TBA7KpN5ycpLuB+P;UEtFVQ;um~sQe0j0s}^+0#^x~fZJM~&B- zj28OMwzi&wArE~tkS=0apW`@Z>Ye8VX;w!al#L%!M7UCGaY3xTBkk>^FH)Hyxz43A zaF{Xg4ZZB`b@_ZH>$?~c4a@L(FK+YxXVQY3;kx4jY|kx~5!{yj8Z}2y!=wwOZS67% z<*Y$2XQC!3o0tt} zH5|Ve4Dh>_k{t-7yQ6=@ewS(9NR9PX3!8=B)hZdXe)Z-gf#Hv&H}nYkL2?cIJwt>O zmNnk$R}|9`JW2IPx6n3C5E9^mh2LI+uVhgjCiP(8xEXE>LtBLG2SMh+konStBj__7 zj(xtlOI!0a9SUL+R6HMlizPGoIM{hV%fwf$+jL}O{yqfbx;;Yc^z}sM_DHsE2RFK6 zv|e*(qqu7Z-QYdj_&)68iF1f*B}AZ(^DOC>`L{2cC)3l`yy8mUdP!SX&XTpd$f@nl zc5@UN&MWcSC*yG2Sf)M40Oft&>P|-@-7z2`yJgBLvV8Cq%a?5tzwUNTh*b)w$_D%@j@HvzyamVCyIurBJ3 zdAXOY7Vqeo3cfx!HJuKT^!=QxR=~7PRGFI@)%y_n;$UOK&;?<)MvK=c(rB2}i{8q# zLj->OL;>kB%hl3kV26X)y=4rRn_e^#Dx-EGPNkuNLn*|nsM!M2*I6cDVA9`3xq4^1 zH)r1SdEgO|5)F;nm+y-AF!eok@=OcIZS30wxXzT&*CZYuiE?&aIAPQo$J}h@xH86^J6cj&zSy-WYjL64 zez3$T8SLR40T{lu0;KkIYj%x;EGKGyMrxr{yE*x_x`S=x;@#hFMel_t3kee1yMThe zEjYR13HG4Gup?$5ranDMCw5(n55)BEpOJfSgOv|WP;q^&Rm5Gv^d80U|Ah8BVC_KN zy;~{~5y7rJn48~axjAfQnFb3=*lLfHkFUzFzG>7J?x@zV*RMFQU1q*4%rQ7&f^yls zxTx`;MsG;L@(s`iOk8H}-#1|3@Tmz=T3UUvmPC5ScUjaB%(Qu&C2mvKUoNY?shsXV zC?y1SsqNIol+2%+w+eWaI=k|gAPwj;tOy?wK`bFJ*Mbf~eR#2YOG`S+O-(NsHfd6a z`Hp)z`FL^8y^UmIa6LPSg!zRK1q%(QmPWU)Qu4}I+j_C zN?agkUkW@!ZDHj2Yw$k&swAQne@k+TK$rdIB4uf@_ye%7mPYTVS!~iSfUTyU<6ekEm+HCk znSQ-9mZTV`zXl)v=6j>E9SxPt_GV(Gd-FidE_G;}Z1no^)iL@C62`%H_ybY)M9 zL^DMXldx#Y0d9L#c@qd8-k-A&b6YT#NK1sP6&bc(Es}rXn4^o7KclG}ZFZgq9^*bz zB6{j<8%WSd7S)@{xTWbrIz}6tu zBm${OpDCzw8KxSfylM|+lraL~)q3+e2W^$Wp97x1#vI-}0Sz)~68$xr>&r8f`TVdtX_853=WDW<64H?dC%D(54PkePTGZ~#I@sw`*mCKh;(j72 z;hXyxG)77TX4ghNbT6Zyn3wm)H!Vm}>AMFiKLA)==G7^!nNThl&$@NnG&MOJ@8Xzkdq?O4N%@{Dk&c=o-k2-3{qm=t zKfS`!TOQ1+R>jE@akPg@uGFctZN(>+QM51N=sXUi(K4&8tp_GuL!TbU3(HA1+WOWU z3}h-ZwSIWu{kO;Zb)uzCzLA>f`+n4D1qsl@{Xgx!XH=9~w>8?`il_*vM2R9I0s;nd zMih`JIfH;m&N)@7Bqa(WC>aSQIpTYbiU;4b~ocn&?uY1R^ zf7ms&!t*?P@3rQdD@-s0xhijfO2vhJi`Kq_qa~c-t$`6_IsELZdLRCZK8R%!G{pW4 zHyj8Kx()mY!b&$5I`widHJpNRA*Lh=@*qy4S5MRaeE4UmebPVA;IKG6^Gq7~H21m~Lfcg5&SGUEvt1f3p;0Xe4; zARMys0-Ic6G5pDBY7-GBI5tZQdM}OmY{qYnRY0#*)9J1MsQvd!TcOWrg)$I79{9BP zv1SCk>v2$^aH-46unL3E_unfF3kmFB-B9njsXH_P{rsB_;1eb~oaVnhN*pbF$vZMp z?z+mi+*g)Uhu(4Fc=+UtbvpBtfdVaVREgEiOpVn+yF-=`sz-4=mg88%I$WiANK-Jy zJIc=Z8eA>W%;_+m;lYn)96K*+j_As)22>d;@eoWF%FI>M9yZq=tGvIn%CU@qx$`|l zIWP4X7cV5bqc(YMdL)t{)&Aag7*M4R--1=~Cegx*Kmhh<~*N zKKa~TMCp;nNlNLg)YYgRo_)-|vP zlFW_W*$D3(0)xR=6JcHM7Qu&&aud~VukTb>l_dXz-jb~aWWZP28|_zA<$7AZ*S+fx zHTQQIrvvZ0O#SI36zs}?TiCztGEzK$*KJ&2XSkB`;0yI}V zNpj#yo>}`-)bQrd4lf{?_%@=#u58SxMw8PMUFC!>JFWK$ba*|%l2vnp4zH#Vs`jr# ztRqHi80R|8x@Rzjc%g@P&AU*!XM6(5cy!CG-i1XRhkcwZMd`^h13wd`mhU921GW%DB?P+3U;N}n~Z zm8V3aL016xT-d{q@!nvUcuL=AIG}449DWTtprJLA<{`}O<5n)+PP$z@wa46zukzlp zvz+{xQIjR{;*Y)@^9brRR1JmpKk^x`K+qL@)^tlb>aw47c8Xf)vbw3#@^F!#$kw!9 zSGGSb&qko@)|0yB{?F3+*3OTbL$&nyLt@+Kwe-2*2OA+vOI*4KsbqgH$Ux4J1FXqv zBKw`l{u1-{PQZSnu)zm$3-Yy98WE3IwKZ;e6aBz0%lYjWMbM?EsV z1WiyS3!HO6+`U|H!(pbOFW*3~LSxcb$aXj_!XKT}Bp*}BjI~I9)}1sVrp(0gVAj8_ z7P7wy`;uBI7eqoo!C&w#nv2tQwf^!D)A}Talw9zI7{)@`T~F%q&Qh=FPkIIt3EMX_MsL+|C*AYbOkj>)vAB%LRIVtv zKEC{(%yWe9N1N%B_s8vIe4_clfq24{lgnkgge?{0V;a3EWAB(sn`?zGHj}Z2#?lEo zRpJhb_UWnvDDFDFeB`+?7b#Zf-3BC6mkYiLovi41pbg4B{3X*|s{!jl!XR=J+*UC+ zoAqFB6v#ppaw&si^EBAQDd{ZrtdHLMm6FW%+ER=CcB7?_de}bIAFOa#S}NLR{Mla$ zn(g}wRZM#$A*Jg12QNiCYU?f|BLEC*4W}1I)&1GDw=u_7{5^~xRX*;t*?HGtIv}g= zB`>rqq3W*bf`WJK)IIG(e>-{5*k&*=#CCMauQrWb&=rZxvR_@%tI=JlRn-FdxF_6j z-HQBZuEX3qx-rI*#g0h8`i^L9ab`355jJUxe!*=CZ`G9YSPe_aMc*`z*h*&>v$P!f zSVhjM+i$pil#00Ovx(vH2NK|6b2aPI7<5WIvrJgjI}WW8T(H>od#ro@!yd1HVz{s8 zj+bid{heZ;z4J9H`SKLf$t$E|zhKJa=5to)H8Z(8DYn1Bv^( zX*i8S#6kumtEDJ>pG}N=U0ENthmUCRP>&TD8R7OEKAHZrjX07Fbo~joe@bEltb{%F zb)$NpyEaR21PazWKHS>?KWo7SVJ= zWo~OiS9m-M$Hwvjd z$6~k#vf8${L9n^_DDc9S1dZ2QQhPTPM5;TFc`ZIW}YEo%xh)Dgg&m zHGih7HtmFb9n%(=R^p{v&Sn# zK}bXcrWk5N4zXIa>5o%`=75|L>Fcy^_0@jQCf|JQ7J?<+*pDb}!JAaX4fS5M6SnD; zA~v;R9}s$Ms`Hxfo;*RPGts?^Ynv*dIzpIbR^SkBwtE`?KHX zbQqw9uT6OCJM=sb4KzKNAFp!0`(#=|E)WaFoH@HD%2k-9+Zk2?V7oS@9(X3QRn6q3eZm$^IbC|-mz@u z)?Qb(A1`>7%%D17 zXP%|SwhlL+#c^8QY->q{X|?3kagJabNe1@?GYg60g3s8xEpd@R?^ zVUW2o>l&{@*QZLIkv}@vn{YLkG9f?Yh-p7hnPG%Fd z-fM3`j#4klAd!6=Hg)fb`8BPEb2Q6-e#zTM*DYhG$ZhP?UE)Cfbe zGN#l*C?i3MbCDbHx@9~i4K_->pW~E<+<=s&K>T?3kKCbVVVB<4BHnBDi;pTrVwVDp z7xB^7`K6lBN=$e?MYacQ2O-qeZ+*0%4B7qwqzcKcef4p@O zbWTD04Q!F1_~GV!yEx-4WCe`LEHx^2lz!DyeWViXO8c`^0ZeTGgjYR8AzO9n6%5I}Z690nt zKkF9cK&1QeH2reHYv~@@v4dV2M)?Z##HqM~-=pJmA2$>8>)Quu0G8OhS0Zpy#7jQ5 zD{&sAOgHU{V|go6v318)34?mASWxet0!`TGzSOOIdqJc{^M}KoEn^W3H;X%X=QHn*6dz z+nOnaAlKz&(5;xH3~$$?6UXqG>p(T*_$;HA3grbz=dr?ATXx@^Z+cstw}@|;wZ%Pz z?9EfHnr~RIi-itVzvF;k9mp}Du50)9Nsl=MUDBRd#r(Fnh7s%H#I;jhvch%6@71`iMFC-!N$>YA=zbMIpuTu+`_JCAjkEsV%4s`326J$1hYU7=2?H17oT)4{83cluzntx(Cqt#m%?0dK!Mk6WMjVC zg6i;4Z7%X!l&GE?m_h`9+On9e$1P#!>^8>T7e+1C0a2Q_J8)0^$s_z8f7nfa%I&Bo zYS8OQ5SVzJphe-~KT**x5rBwronV1$x`3A-228(_7Zy#%EPILe0U}co)$8+eU~dbd zoFUbsbjNL3Wa4l?iSd&3R5hJ|!()l(EzswIL4Z=fA?l4ScV7;h54}PqO};Vt{RW>! zx=~8nN+^wJ^Hk__SK=?@28Ai149@jQKOmzM4Gduo0>Tkua>22>WEvjJ(e$EH+o8!x z)XvtRBB~g?t81^6G)E(c-K;(OHSYtmuBuX{O49kV{4<@kYI)1$!*cJwy<019)?`)1 z?PFKDY5DA2l(qguf59~jR+6VId~w@v6E#zA=6@6?`l|#+OJnH1`r^%EL)KrC`j=-6bc*gKS%bo zQyBC0TWT7~a=-q*=2M%8e%v`)1(85Ps%pT+9Caz7_Zrgb-_T%aUWf#Led-^7eJIzx`X}py2$gLbm9>GY|R`r18y*0e!>jX0CcFC zobxW(l|wgPyO;PL#c>ZtBO}DQj=7aUVn#a*x5`IJV2LyJKPHI0`QtPaoGCTV?ow$I!wNUsR=kRLx9Co5 zNq4l#bp&}2oadNLkZn7ju`$}!6hf)fz1HV%vk^#4`*gf=oe7GMX4g<<*T}Vq=%-(~ z4p^YNB8L~EccGu0Oa5Vbk;iihAckz2ZeSEoSHP7tE3W z=9W%zYhJ}94W@#gcPWKbSWSnu8dcnWT`_K&Kb_`uUse_v$-*t@ydb;H|JdaldtK^a z&zmzQcL5umqT&Wd5R{UV>e`9}dRgChKqCssD!xH0!8bi6r$Z_1aF!TD!J{#Ir$HK| z-~`L^b<^gYhcG(%c)qoO;6Tph?&82K5;_r!3Vmp1K}9|rD3uB{IM?~`Bq$g@-IXY8 z4tH?`ZeP%MU%AGrIrK^%6{VA|nz|9gSSsqzXz8lTA3_b=NupEVNW~AH9ClT8K)yVd zxs4>Kcu?eY`ve|S0V8tAT{l{NjKPSUYY49{lc>*tv(N1fT98g}JFb8F7Q;yv>HNVV z3ecisi2R2i^UACTqCmb!^fC-dce42DMDFsh#K{j<;<_w2GB1at@K-^N{1hRTJdtL; zJ`0E+f?MZfKul7rTVeO0%dFuM(6YO_I%NM!Rt@Mia*$GS(M38tUOsvHP6o!ui07|I zbNL!rT_!8GY3i5KY$;@1Q8#jR%jBd(L&1<4h2=ig3N#1R>x9;yjOxQVudxbiR#1Ev z+*&2@qmS_)7ko06@be$eT>_(oE|!ryT#!s7?>R^Hi0o*8l^f&{)F0&Y`R;Fh#2eh2 z2bFP7pi=LZK6*aZhzpd#z5c)a`X8JA@0WjHiDa>lqlAu}q39RS( z3BUVa9nuM(H7$PYxF5UApaN(Af7S_j(@TwpEIu)X4-b>(xn>calKlIh(=SeZ`(KX# zzg~cB3ZR!xH?Zs&gPeB_;V$GqyjbLq&UWap&h}rO?Z5x(MEuo>_|vZZ0#(02)n9Su z{~tgVm!O|C4!W-i5iHaS$Gbh48yBqFSm|(53}2larQNuaeP!gCy$<~Tvj~iJ^41LN zw?_f7aSykNqQ2XV7JyOXC2*#k0T}(6E`Dp4>4SU-8^25yme zjb-`c&{?Va;{ii4$$9Wu7=G8lY2u9$SKYyRDP5&|C$j0gnDY+Gn^S9g`4^61sft80 zDdQ;q?Sb1CRn>KaGi?dHHFI^#N{?d2q>2r@KHP(TONA!?p0vC6X|9s1KtFl$Mv^^? zb;0-ffAI|XhaevjxNYThI_!8Lkl`Bxl(`&!C?EN$&sLR8i{Bz2mOW z&(Hn1zjgBA^>t|-F!v612yyRWme>5m(miBxD+`f+uG)w{e0l7?8}!Jr_3(>Z>6*AA z7}|xyuT2nEQZ#)zGp$lop=}bva>J^h+8e{UZHIbA|CL0RLX!O9V~Gb61VqDn`LbF~?&P`}VjVS?Zui^;S_K{;!Gjns7Bkl}ehF9w}rXC^h<;!*Ujm~l?x z4#%Xy;&wXjM&KPkZ%q#Ok*|w6Yt~u9$eWr}NuKv#F_l!uq}5zF8*fvhXV64Zu+!149YwVQQfQ)9>x_^2LR4p@ZlCmY(Ga0=$>=&Da^5P70o21S_#vov+92 zR5yi46GqeE-YqyXyRE)r>cG8hmLtDbdP!({5+4A6g-vb*0bF zEX!cpsgxn4g5_GnZWVs#w+G7aVBeB9TGDUdtdy?z0ew)Dki+@gg)Nr|y5EF8iKbog zLVGR{WgOXJ+#f6!BI;%47zemdEV0?e?@DTC)HRN^=Ooey(1{)fl?zDczRg+LrJTGv zN9`H+oB+~EUk(v`0W?qS4=*GlC)syqPWqqC*X)>9tOWofps@mv&Z6j3EXJ_3gi>t~u5b-9kFFsEP00ti{8Jq!Nk?1jtLjPznc{ z)+8G_D7l$F*=ck_JQsb37OKL$x`;&Hk%gU5c@M*F-tDWiX}P zmyE;tZ2NqTpnIN`R!{NYcm3QmaaOcUY@AO6PCRNFpbch~ZaG32$6?W*(`aYxgwBbs z%&qUbk-GUI)_>$#d#9(S$p^7RnEusNUyr?!mZ-ElK8{E4cF3d2dDy2d9BDa$LfD1P z1&(f3gtxC4_U+bVT>hy>X}z^5yG1QSpZ&<&b6X^PoerOS4H`+j%j7FcIFc3iuDXaG zbT8*ODxqkR{ZLmg>-KQ`o9PKVX+?YBEL9L3Ms3vMwu*=pb6 zk5b8E!R=gQ;HDU7cTMs=A=bpB|5;eEu`@yPIk>-hverOPNL_z%>eNGM9$&C;t=9!w ztgt2AMYnXf*9ax`jceU>K#g>aYlH%(Eu6X&Fw#h@i$|6yH?jq(`)XGX2I>X9-M_%C z)1oYXM7^I_3*G-RBdv$IJen+2_*6&u#9DsRlj!+mmqw}c5r|HTE5%ceV#<{E4`h=1 z#BItCla}4G-o++)@?1H*4n=*Wy%FHKXmnNK!-3)MetUOAtdWnVL#@2s*$DzleE~Kx z%mGp0Zn3V_>&9uw_bzCochx03r2O37_Cqm#?wxN;fgh}NkwkOCcwZL5@n>CC4R_n| zVmjRz=%Ki{GGRr(J%kog(jaG?I_^-7)j?Va7t|dn>;f&&C}a27Z^SLMi)W2&UYkWB zXz#k}s)=dku419$U>f7>lrd-oBz6og8d-dwHXUg~jlz!ecre!C;kU7fh$wHvXH`@4 zNznQ05;4TlUoSxd4G$&0>?xM1484-h$X655&^fTOTH+;Dk5}{6hR-%SD~r5WzZ4`V zX8qNcz~~Oe&|zyGS%bW?vYcB>N~c>5qrQIn6JZE}>u6C;kk8U`%JxL#89fxa5M#BX zZa$bcKsp5#_Q7Gb+R7*mOqPXYD1+$*j1&$9*x=I*A({AR40U*Ws6*`D%Urdw zygu`A=EqHupKhJp6m=5TP?)9H9o`>yO^`sEWQpzw`+e%I{MU#*q>L{wC%@4ho^j9i z`L>ziZg2GaY!!cGSB0}$Lepnu{qhm)=brLe%Qi35qsrC6qM7FQY-th3+xy{#U;Ekz zv^5UitTR>^#nUBQqdo7}knIm@51z28r>%g3WcCECiNO{O696|v6+U5p*gw5%DAiaU zZ>FWF;I?4-6Wub^#b#so+1A@5^Evvrm#ceEA(j)1TaaEC z;_18&mW^lg+&RU_#X15ky%;t(U-1`>zlvudCd;R%Xf_fq)*Y!d#gw!9CmuOHwE*5C zs%5t1(Dz`VYQ{r`vST%oyS9l0cimNFbN7_-_`}1fi97EpPU$wutBDPLUu7goBiy+~ zeZ+5Q-_NP+zuT8!WU{-E$q|@tL@~e9GGzgMf@3i5(!aX8HM=cGQdXLxQk#X0^hatb zudl)mF2fU63Wut}X=d_4E6sIqr zSW9teEvmEf&D~TM7NR$^f%!(9#nJZ)vN7U)YY&^-+xDZ{b1%l|t&{Q&-UFGK@lD&r zGhv|?>dfy>{cD+@$v)BafPG-P%KAeswuDHZuhiXRCpJQGNAw{2dy6Yy-Z}%rJ}z%2 z*w{B}HshuAhzf37Z0l>`*zarBxjFf#MvfLlNzl~WBDfE@l!}d#w4P7_}9fwK* zi&Bg+YmhaU7%W9$y*W@1O(*0+t6nSoRpm`S-6X$=Pxr1>OR+HWtWdl?+`ZBaMbL&; zl}yWokxV1RRI`NAL!`^@HVKEL?_LdU1Il21pk#Et-sB>CcrAG> z(l~rpR_#XN-??p;|kI372Zf462!quXUZz0MQ3XyIL zuk_yb7K-6qAb|0utNWDN4(tu@mZ)*^R;fql z9;NopiSql$X7BmeMs3JHfJ~> z{+@gGBtU2ef?>Rqc9}^d03g7_Yi=K`HTN!;G*{)1xuGa153zmA_4~QC2Po4SLjJaD!am_=cdt(qvp^3+17T{NbDqTigpHc#^~I>ud?G@a3LpG1^bbvyUHEu zI&fdED2aD)OvGn%Aa>?M3r6{rPLU6Uje>`L$hoP&|L8l6xS_8-|Gh{z1EH(JA2&ys zUT^MDBo20!nI#OO1E8YhNsz7jgVe2xj5A?3455!Iu`3}_xLfrtICLeGzUao{rSuKN z3*Wt_{-@V-sFJ({6d*f!TYDz5tl{^|*6auu0yPZ9CX5hrsLxApiN@wuTOn*3bW3cD z{g!ub4LD8__l=?4&=fPI*6Lv*F$}GFA|6AXRnJGd)2y4aPIc3G>TNsJ4Z;*4{1=uH zOulH<#0S`HS*D*0eZ1l;_TT4L$ZO1 zI4Ud_PbVfcAF5I%wvZ8(HJFs-VlRnD#nIYaDIb}Cei16qIUp8XGZT4T-KBeN$iD@R z*Yn`uf2im7`cP+V4I+Ct+uIH9dg7;PSb=J+K*a}$rZYj9iMF}KQ28>E$Rh@73&aiRr@<+1XElXHABO=VWT7?V1)^J}vSrSOo-;#hrGRA1XK6qDdQ;>38Iep7BrE zbvvlTvX{F|9%tYpg)>@AB{J}z)~h}vq6n~GKX>)i(-Un|5Qcrj>Ssv1e4CPWEX-1a zt2~lmhl(6Qgv^|lCLFuBuFTdWFDj1@skd{Q24$q(Zc_3qZ^7of4>Sd)wTQnBUvl>5 z@^=~IW=gk!e_0R?2q8?;{jT3c6}&cL+B2*RBMDhlsGaF^Sk-8Ji!lAP+M#b@o?o?~ zR33lNf}Hz(V!dt61Stuj`>rQ>_T00((5Em(;pwG(8lhQlN zQyTUMi&anKD(&HW>}+&?Hn4;{#ZTnwSIUN^P8@Mlf@kmCiG=trDCDOa$ zm9r2_kfxFO+n)Jcd4x%mWLlh|!tA+q7J>SuX0xVuLuc!P3}bU!#BWS^dsE*_*Q%bt zCbUOgitMBR@Xm&s1#F;G0px$V2 zS8%|v&$PsR@M}Gr?+p+JO=)L&-Fub>Vw1id#*5slO7_5HWGaJOZb=0I2jR^if@W;H zX}BDInL}nxllQC3w!;NY+p+q+fhFS865O7Z6H91#C9eaQY1{}P-P z+50|W-2a?wIgwmBBu4xqPTSPTdi}Eal0E>1a^ci)_k3~ZijPMfFvdE5{eJvhdfcug zYN+bcVhK~)a4dz)T*P5wQ~MoQ5-s0kb#`*WZl&#s6S_hP@Xpw$hcOmiDJrL5{r+Kn zDExfHfvHa-gQI`kVK_?lu7mniib^8YUWSCv3zT<5eVeA^?M&b~Map!yX$tDLTwXEb zzp|X+mmc4;@bc)dGH7^9I+18I#B1BXwJaXc6=e4|usGOH+A_m6muIeOpQPr_Ej(^O zZqQ?DDxXv+>O^@`fpq!sbsOq#=J(1YzoR zL{pPqR#pkJkPH`y<)6CK!H<90M&BYh#ppd9-hTrfDz>OEbcdLeg#fxY`|_Sp;9|1R z%@Ov2%uafqU}$$WLy^?o%Nn&=s)$2Tk0H(~OGK9}TJX&8vkv{PoV)~KA3JqvZ7JNw zao^vNS`TQ%&i)IroaNDfqUi~pTe(V5XNX2q`~ zyq;cJ+kDoxL2}LeI#XKZ;cThp%rQx#r9aGCyR*IOs8vh{QH2)*P&dclD77Y4Mvsb0*@Ah$=S zs2o+9rXVxS8Hl;Xunr#U%QAfuibozt{E$aZs#BMYC-*2@F>(;|>lWlj7vSFr9w2#? zrsnEZ_ZEOUXinAho?UC{>#kIUreL9%?IF3%z1o=y5N;Q7tClT8?)Y7wYRJB$cLsO4 zZ?d9U&gvt$~wHy|*yhW}RWQo&o{Y8wlTm2u^)H!<<5UA1qU za5yuA0Yq}3)HWkC1vk_PC1oabQR<3#5%1hGeuYxM(xDo@Ktj_L-=>sRc*qcRJ@M{H z5S@<~?t35NZIl6kFkJ+BZmkSlRbn&MA&pzf5QR*okQe#8_Dl2Tj2t)hlA)&vScd_3 z@)s&fnf#-qPgt=|h5S1B%NLX!7iAd4a}X~qU$KT?ciHb*%~AXi1AT5t??&`?%9mp# zG>yEeH&~9d$Y^C89h6~aT6ans&)LB@*3I~sa%Z_o2<)T6x!IwSXYqNu@9g16PSo$? ztvI(iTFk;+`H2#{YAbaGg^xGW&rA3O#EVr96Lj^nJ^=g?_awKPKPji# zd0y+_-4O|^4glN~Nku5F=IvZp7$mKMX4Q7`(|*E(zgOnDMCXsC={z5P{In!k&VCh3 zD^V7`PVXqZt&A1I$6b_?kF?#?cZNwt zktnr|peXC+h*Q>jfAeM6s0?==hrRez`iA0!VUz=h>)lh!Jz+h$o|_yL@C#KQkB7G8 z-+I`zYV1%bJk*#<=>-L5QVH7}K##gkGYgA+q5#xzixH2o$Ha%@JMnkbKGoc~K3zH< zEA-+wrM)t|3hai_b~?YVNk%!_m>jwNR{oW9G!wpKl@5*XH>0enD)#)xw;;0x^dBa* zT9T?FefV;GuP57hH<6X3=}h>{_c$ze#s0x_VR7eeDp>4Xm`1Vv9V`-%W>~gRE*Bi&P;A(#eh?w)JX#; z{Y29nW*Hjke7q;0ED(Jan{;+UWX#L31~Yml@$Ie@c5HC)j&v%)sY=y)0}K&%JJ>OT8$1k&v>d8N^wq&;sp$cN$|G}?2p$4?dNs`kcE^8|}I zqEP|^+7LlN=d|gM?XB&f2@7syTsPxYIxIbAMkqUc>F*iY$&~{N=C;p9FX3{(R#WQR z%=0v^Ry7(z5A}oW{2D-vmH(>|n58^@9mo5)$hLDYQgWnbA2j~sDj%c%z2IV(%Am>*Fnm&H&fe0hiR*@8}P_Bc%6nTVn( zL1bd-c(`&)_l53xWV}&GjamELCfw=J#QyhLzbbK+;{Cv+WglV1kGPD2`67%_7(Uc% ziPuL}tO3Mt957WdIM;nUMX%=jsJt>Owp_SgdDv?4FbZn}w;zvOqmn-#y~_-db?->B zhRIZKG16-qdC$6xoj(C5u*Y-;TqA^igibPz?d=pXBXrkrV?5+m{Znm|<@r^!i+<8~ z9LQsRM-$22Ch+gKYQYMaq%c7~T#h9!AHGB9DTj|z6E_R$;UsB(Y9wI(bfvVO6)=EQ z+>Rrn{O-GkydCsODv51^Xmh)-}w^9=&>?udf23E_+pNw>vCrhY&XxedSJ}^0n z#zcUNOT60%DzhQd7T&?gExKv3iypI&5{2r!BW{DfIdcH259iW$q=uNYb8!(gj4_62 z_W`2OlL$JE;8~e_oV1i+Oocnzq2hoSoR}u9EgQ5eDJOx zCrrog-R8pmZc)y7JDdgzcu;?8ui*A$yA0FRp1o%5$kbz5&0p9w^_Kr$wyH7vgtE5rjr+kDIbSAvc1=Z7)_6 z?|QQ5J(cNYobtuFF8M5#FU#BUS@7ITvhMRGYkdDj6j4Lxh)81!%(v1lW}YGU9&}MM z-8RSD{YA~M=H76VPJkR3F4tn#{UiCsDFL9b-x^;=K)(Sgrf><3WTimVC*={gFYHVf zHOo_NhQtTLS6xg3o!S(oL#iAK|%smKIM@r@8h z+(7wLnKKdd$82f7kyr1il4Iy!2mzo1n$v)Oe{Q*46VGh1)nU35Fk_w=t(xGq{l0Ki zmo{T8Lz4mez0093B^hQP+)|V5ZKiD&hVA=knn|9es|I>{m`5qiO%zR+Y+#!>?bB9i?_A9p~muP|at228nv^;TF zx;5xf!D&*iOKyg3m+TlSH#2YBef_Yfr)*d{OXMyX6L=;JNhPz6F@dD#dMJ;~M3wBk zCr)m9tZ`wgpJ&Qzz0}fiD^CDmQj^6tB4yEpyy|9bRQXW z3K>##q}$|!p%A+S^$mj&ar~z*)wB;;auhF5&{44P2gie9wrr?8} zeaY&JM~TjzqRQ3W`3asIM*!&?DQ(+UPbAG82Pu5E3kvODV;hO~-N64(&7Y@fQi<~_ zn<{&9JyGdUIzV8e-=^g7z^15U%AS_$NC@4q#V{+!XF*;OkE=rRmM~9#U87Ea{UTZr z`hlGTatDW0i||hs>_(}gK8W(Atzys7G+hcsmi|tPH}x6KdILu%4^D|BjJrQ=OKD$J z6K^B-tCbhZR!6-Ou>H=<6s{R^ z=f`@pocUNyS8lt3;SsZjv@Y%P>KtU}W@dQMRBIo-A8(Zo;i^~v!nO`4JSIemuQd6U zg+;476ce9-Pc*k~=hPv1s9Vn+Ba9x@AN)pwfV6iWxQPLD1^d^dsz9#e&~JRFVikcP z5y{ls-AoF~9NT+G+nhj!?!uNW#2Rc1v!lF++4efO+$Ad9X3Aodlq!T>#JO!Mo0OK_ z^j|ZYkf0nNd?5@4DZKNvb~?Pes$b6WokY}XV5yZp#^|IRQ^9Q^F!^Ad$!}&&8iO4K z{E%2&@YAI4aDF_QiN!2}?d|N0%j>l2T#&R}c7w143Y+YqiqSX50w^?fMH3e+8_Loe zcCBTeh4_Qelj&B`meWk9mf=}$ah&#-qDmFIP|NH~VI~v2f?u=xkwXH?;$B9#Vs5RA znY1|QgQyDNl68hm$cFJ!Uq1V3vYjTg#ITBUwhIX$KRYL7DZt{5X-X1L9^ipK^OG)W z_Q*p;?X;uY3tHeD>qHsHDJXc(DCRBc6umU@l4_xN`2bCo!*B#VR6Tml{}lo4nB?W| z#1E2b9*26(h8NM5%f*#(TxGsZ@3>t$n-=}OSt%iP6p2Xn*P9)}M!Ohm?f@;rU9J5c z<|HcNNTF?N{o7^+^+_rRoq&ft*QQT6z%DTZGlSD;mzsU;+ov!oWM_O(IfG@WZIdRWzopvq0=qv>93`*hP=q!QiZH{)Gu{>6BYYnF-TA(Ag*=9 zFtxkmZ2WzBjpz^NJ=47@BknRA0c3PZL&`Xnm?PVEN33=56nL-iN~mq+B2x>Ckzgm^ zn2l@FW#NT_$`s|i?u3H$zv6a#zFqfcgkh7ut7SclyLCip97rn;&@_Le3YRjBpr7Q1 z>#Sn7z3DEK2xMD_spSrM75klB2#_uDf>~Y+ZTNARa{mAT_xxLQU7gC%t${^K@!NEh z_^%gn9ILv6W2o*_U%S(2l)BSYrI@eu1TwUdt5 z-`SnY4xA2CyRTSjr|z+J1lJ%Ev@Kpk8z)OCUzmdK7znHlPrS9}EZ&WpIpDxND!{D= zVFK)A(C=-ADB@mAEhPb#cS#=Pb&5U;RJViSJ(mr=yi~msD=)83!6w>_OU8NZBgTc9 z^zY;!*Q@>B-F)*f~l6WypeI8IjnwPi2-2v+YoRGS&qDNH$RwKFe2O+ z*Qv#%rSjgsp1_)pjpfV>%taQc!B|Y8kJyK-AK_rIKM8F%fGNa62yy)c(5K1c=UJbs!nX z&&MvSLIioK#TuKJpFuV&yt?I$9*uzd^^6o$6_yr zNwLY}L5ax=`*F}#ELpek)PZqtQ|vci@=8eBKGYPx=xq;A3hlvn4jBa!Q0{ANT$;sb z83=cX;ZXD57kU3>Ki)S1yvAPo#at60>#FhX3unK2cG$zwQCB{tuJnhMPqKX2&$Uus zHNt^dpt03ih`-H`YdwBm3a3WM_sD?#*zo;?E&u%sVhWIK{G?69#%l;GK}yD zvv3>z5u&(}4ss$60+mwTH?ne6*E~WQ}#ju((rF@*@^>xP?QHDiVnh%6u(I(@G z`&|TfVo#p@%D?XC^97KU>%2YFktNY%u~69^td+>O7WCcLPH8h!dm+wyQo6HXl6)vh z#}!Np5cR<}_1~yEpmXlHvXBUUaU%;_0xh`s)KH(AU2`-Cs}X*IxSXY{0Jr^vlfr zo3Z%YuK(X!jsM7SgI~EB@!1C9Ebp1E$?=y{`ro~6-a`O+%1YB0|0i$o_oW}dcq|QK zhr7t^xc~i2|NM-E^(ElRIXRaF|L5m%;@hKDz?FnnX5aW9PSuIGg78-tpb%Yoc`uUx z%|`$I5i|0OJnYQ*+5ds}JAJm465QlqUsRIce{`2uK#u;~s~oHU=t6!y?tj~7zaIC$ z;ox7p``?V$FJtnzG5h<)FJtn{nEb!HsQ*tHlOslVf|OG@B)`ya;J-%?l^*2ZfAaGG E0Yt0j2><{9 literal 0 HcmV?d00001 diff --git a/docs/003-create-homepage.md b/docs/003-create-homepage.md new file mode 100644 index 0000000..891117b --- /dev/null +++ b/docs/003-create-homepage.md @@ -0,0 +1,33 @@ +# Generate Sample Data + +Create a home page that show the list of VMs when accessing the url `http://localhost:8000/` + +The page should look like: + +![Home Page](./003-001.png) + + +
+ +Possible Flow + +1. Open the chat, click on the [+] at the top of the chat to starte new conversation + +2. Ask the following question: + + > @workspace Can you guide me to the steps to : + > + > - create a new HTML home page for the project + > - This page should use the Boostrap style and API + > - The API should call the VM rest API define in file:#file:urls.py #file:views.py + > - print the list of VMs in a HTML table with alternate colors + +2. This will give you the steps to create the home page, you can click on the + - [...] and "Open in New Editor" to open the file in the editor, and make it easier to read the steps + + +3. If you have any issue you can use the chat to ask for help or clarification, or look at the final solution in the `solutions` branch + + +
+ From f8eb722cde7cf7febf703969e0268ca1db12150d Mon Sep 17 00:00:00 2001 From: Tugdual 'Tug' Grall Date: Sat, 15 Jun 2024 17:08:04 +0200 Subject: [PATCH 5/9] add oo3 --- docs/003-create-homepage.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/docs/003-create-homepage.md b/docs/003-create-homepage.md index 891117b..043df91 100644 --- a/docs/003-create-homepage.md +++ b/docs/003-create-homepage.md @@ -26,7 +26,8 @@ The page should look like: - [...] and "Open in New Editor" to open the file in the editor, and make it easier to read the steps -3. If you have any issue you can use the chat to ask for help or clarification, or look at the final solution in the `solutions` branch +3. If you have any issue you can use the chat to ask for help or clarification, or look at the final solution in the `solutions` branch: + - https://github.com/github-copilot-workshop/copilot-rest-python/tree/solutions
From 3854615f0e7d8684b24a2eb42686e0e7bb7a4507 Mon Sep 17 00:00:00 2001 From: Tugdual 'Tug' Grall Date: Sat, 15 Jun 2024 17:08:44 +0200 Subject: [PATCH 6/9] add 003 --- docs/003-create-homepage.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/003-create-homepage.md b/docs/003-create-homepage.md index 043df91..99924e4 100644 --- a/docs/003-create-homepage.md +++ b/docs/003-create-homepage.md @@ -27,7 +27,7 @@ The page should look like: 3. If you have any issue you can use the chat to ask for help or clarification, or look at the final solution in the `solutions` branch: - - https://github.com/github-copilot-workshop/copilot-rest-python/tree/solutions + - https://github.com/github-copilot-workshop/copilot-rest-python/tree/solutions From 0b61c5517ce8482291ee04c7e23e58499d4dce32 Mon Sep 17 00:00:00 2001 From: Tugdual 'Tug' Grall Date: Sat, 15 Jun 2024 17:13:01 +0200 Subject: [PATCH 7/9] add readme --- README.md | 44 ++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 44 insertions(+) create mode 100644 README.md diff --git a/README.md b/README.md new file mode 100644 index 0000000..4483caa --- /dev/null +++ b/README.md @@ -0,0 +1,44 @@ +## Overview + +This project is a Django-based application designed to serve as a learning platform for utilizing GitHub Copilot in software development. The application features a series of labs that guide users through the process of creating API routes, generating sample data, and testing APIs. The project aims to demonstrate the power of GitHub Copilot in streamlining development tasks and enhancing productivity. + +## Getting Started +Before diving into the labs, ensure you have Django installed and the project's dependencies are set up. Navigate to the project's root directory and run the following commands: + +```bash +cd copilot +python -m pip install -r requirements.txt +``` + +To start the server, execute: + +```bash +python manage.py runserver +``` + +## Labs Overview + +### Lab 1: Implement New Route + +In this lab, participants will learn how to add a new API route to the Django application. The new route will return a simple "Hello World" JSON response. This lab also includes writing tests for the new route to ensure it behaves as expected. + +### Lab 2: Data and Services + +This lab focuses on generating sample data for the application. Participants will create an API that lists Microsoft Azure VMs information, fetched from a local JSON file. This lab covers the entire flow from generating the sample data to testing the new API endpoint. + +### Lab 3: Create Homepage +The details for Lab 3 are not provided in the context. However, based on the naming convention, it's likely focused on creating a homepage for the Django application, possibly involving front-end development aspects and integrating the APIs developed in previous labs. + +### Testing + +The project includes a suite of tests to validate the functionality of the API routes. To run the tests, ensure the server is not running and execute: + +```bash +python manage.py test +``` + +## Conclusion + +This project serves as a practical guide to leveraging GitHub Copilot in developing and testing web applications. Through a series of hands-on labs, participants will gain insights into efficient coding practices and automated testing strategies. + + From 23b06047645d85ee6d3d0921af409988d5fdc6c5 Mon Sep 17 00:00:00 2001 From: Tugdual 'Tug' Grall Date: Sat, 15 Jun 2024 17:18:31 +0200 Subject: [PATCH 8/9] add links --- README.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/README.md b/README.md index 4483caa..7e78710 100644 --- a/README.md +++ b/README.md @@ -18,15 +18,15 @@ python manage.py runserver ## Labs Overview -### Lab 1: Implement New Route +### [Lab 1: Implement New Route](./docs/001-implement-new-route.md) In this lab, participants will learn how to add a new API route to the Django application. The new route will return a simple "Hello World" JSON response. This lab also includes writing tests for the new route to ensure it behaves as expected. -### Lab 2: Data and Services +### [Lab 2: Data and Services](./docs/002-data-and-services.md) This lab focuses on generating sample data for the application. Participants will create an API that lists Microsoft Azure VMs information, fetched from a local JSON file. This lab covers the entire flow from generating the sample data to testing the new API endpoint. -### Lab 3: Create Homepage +### [Lab 3: Create Homepage](/docs/003-create-homepage.md) The details for Lab 3 are not provided in the context. However, based on the naming convention, it's likely focused on creating a homepage for the Django application, possibly involving front-end development aspects and integrating the APIs developed in previous labs. ### Testing From aa8bcc8b93f01315b06668ff39c9b86cdfe09e36 Mon Sep 17 00:00:00 2001 From: Tugdual 'Tug' Grall Date: Tue, 2 Jul 2024 04:12:00 +0200 Subject: [PATCH 9/9] update doc --- .devcontainer/devcontainer.json | 3 +- .devcontainer/install-dependencies.sh | 6 ++ docs/001-implement-new-route.md | 91 ++++++--------------------- 3 files changed, 26 insertions(+), 74 deletions(-) create mode 100644 .devcontainer/install-dependencies.sh diff --git a/.devcontainer/devcontainer.json b/.devcontainer/devcontainer.json index c7fa206..80249ad 100644 --- a/.devcontainer/devcontainer.json +++ b/.devcontainer/devcontainer.json @@ -6,6 +6,7 @@ "GitHub.copilot" ] } - } + }, + "postCreateCommand": "bash -i .devcontainer/install-dependencies.sh" } \ No newline at end of file diff --git a/.devcontainer/install-dependencies.sh b/.devcontainer/install-dependencies.sh new file mode 100644 index 0000000..aa669ed --- /dev/null +++ b/.devcontainer/install-dependencies.sh @@ -0,0 +1,6 @@ + +cd ./copilot + +python -m pip install -r requirements.txt + +python manage.py migrate diff --git a/docs/001-implement-new-route.md b/docs/001-implement-new-route.md index 8032a59..0f151b1 100644 --- a/docs/001-implement-new-route.md +++ b/docs/001-implement-new-route.md @@ -1,10 +1,12 @@ # New API Routes -> Make sure you run +>If you are note using Codespaces, make sure you run > -> ```cd copilot -> python -m pip install -r requirements.txt +> ``` +> cd copilot +> +> python -m pip install -r requirements.txt >``` > > before starting this exercise. @@ -27,12 +29,23 @@ This should return the current date time in JSON format. ## 001 Add a new route "Hello World" -`http://localhost:8000/hello?key=World` should return the JSON `{"message": "Hello World"}` +`curl -L http://localhost:8000/api/hello?key=World` + +should return the JSON + +`{"message": "Hello World"}` and should return a `HTTP 500` code when the query parameter `hello` is not present. The test is already written in the file `copilot/api/tests.py` and it is failing, you are done when the test pass. +To run the tests, open a terminal and run the following command: + +```bash +cd copilot + +python manage.py test +```
@@ -45,7 +58,7 @@ The test is already written in the file `copilot/api/tests.py` and it is failing ```python # Create a new function GET hello?key=World # that returns a JSON {"message": "Hello World"} when the query parameter key is present -# and return HTTP 501 code with message "key query parameter is required" +# and return HTTP 500 code with message "key query parameter is required" # when the query parameter key is not present ``` @@ -62,71 +75,3 @@ The test is already written in the file `copilot/api/tests.py` and it is failing
--- - -## 002 Finish the tests - -Make sure that your server is not running, and open a terminal and run: - -```bash -npm test -``` - -As you can see the tests are failing with the following : - -``` - ● GET /api/hello › should return Hello World - - expect(received).toBe(expected) // Object.is equality - - Expected: 200 - Received: 404 -``` - -The tests are located in the file `__tests__/app.spec.js`, use GitHub Copilot in your IDE to fix this. - -
- -Possible Flow - -1. Keep the file `./api/api.js` opened in the IDE, since GitHub Copilot is using opened file to create a context/prompt. - -2. Open the file `__tests__/app.spec.js` - -3. Add a comment or use the inline chat (CTRL+i) to ask Copilot to start and stop the application before and after running the tests. - -```javascript -start the application before running the tests -and -stop the application after running the tests -``` - - -3. Let the code be generated from the comment - -> Note: it is true that the comment is longer that the code, but this is done to learn how to use copilot and understand the importance of being precise in the "prompt". - -
- ---- - -## 002 Add new test for the new route - -Add a new test to the file `__tests__/app.spec.js` that test the new route `GET /countries` - -The test should validate that the route returns a JSON Array with multiple entries with the first one being: - -```json -{"country":"China","population":1412600000} -``` - -
- -Possible Flow - -1. Open the file `__tests__/app.spec.js` - -2. Add a comment or use the inline chat (CTRL+i) to ask Copilot to: - - - add a new test for the route `GET /api/countries` - - that should return a JSON Array with multiple entries - - the first entry should be `{"country":"China","population":1412600000}` \ No newline at end of file