From b05247dadec8e6ec9c994a469895bf9bc294db91 Mon Sep 17 00:00:00 2001 From: Mario Romano Date: Fri, 27 Jan 2017 12:22:25 +0000 Subject: [PATCH] #1014 use document list to display search results (#1548) * #1014 use document list to diplay search results * #1014 refactor pagination * #1014 documentation and scripts update * fix random erros on tests executrion * #1014 fix travis scripts and raise timeout jasmine * #1014 fix appveyor script * #1014 type nodeId --- .travis.yml | 7 + appveyor.yml | 27 +-- .../app/components/files/files.component.html | 4 - .../components/search/search.component.html | 12 +- .../app/components/search/search.component.ts | 12 +- .../ng2-activiti-analytics/karma-test-shim.js | 9 +- .../ng2-activiti-diagrams/karma-test-shim.js | 9 +- .../ng2-activiti-form/karma-test-shim.js | 9 +- .../karma-test-shim.js | 9 +- .../ng2-activiti-tasklist/karma-test-shim.js | 9 +- .../ng2-alfresco-core/karma-test-shim.js | 9 +- .../ng2-alfresco-datatable/README.md | 25 +++ .../docs/assets/pagination-demo.png | Bin 0 -> 12462 bytes .../ng2-alfresco-datatable/karma-test-shim.js | 9 +- .../src/components/pagination/index.ts | 1 - .../pagination/pagination.component.html | 8 +- .../pagination/pagination.component.spec.ts | 76 ++++--- .../pagination/pagination.component.ts | 86 +++++--- .../pagination.data.ts} | 25 +-- .../ng2-alfresco-documentlist/README.md | 4 + .../karma-test-shim.js | 9 +- .../components/document-list.component.html | 7 + .../document-list.component.spec.ts | 41 +++- .../src/components/document-list.component.ts | 151 ++++++++++--- .../src/data/share-datatable-adapter.ts | 99 +-------- .../src/services/document-list.service.ts | 1 - .../ng2-alfresco-login/karma-test-shim.js | 9 +- ng2-components/ng2-alfresco-search/README.md | 5 +- .../ng2-alfresco-search/demo/i18n/en.json | 4 - .../ng2-alfresco-search/demo/package.json | 2 + .../demo/systemjs.config.js | 4 + ng2-components/ng2-alfresco-search/index.ts | 3 +- .../ng2-alfresco-search/karma-test-shim.js | 17 +- .../ng2-alfresco-search/karma.conf.js | 6 + .../ng2-alfresco-search/package.json | 6 +- .../images/document-list.empty-folder.png | Bin 207036 -> 0 bytes .../src/assets/images/empty_doc_lib.svg | 208 ++++++++++++++++++ .../alfresco-search-autocomplete.component.ts | 9 +- .../components/alfresco-search.component.css | 22 ++ .../components/alfresco-search.component.html | 113 +++++++--- .../alfresco-search.component.spec.ts | 80 +++---- .../components/alfresco-search.component.ts | 84 +++---- .../ng2-alfresco-search/src/i18n/en.json | 18 +- .../src/services/alfresco-search.service.ts | 7 +- .../ng2-alfresco-tag/karma-test-shim.js | 9 +- .../ng2-alfresco-upload/karma-test-shim.js | 9 +- .../ng2-alfresco-userinfo/karma-test-shim.js | 9 +- .../ng2-alfresco-viewer/karma-test-shim.js | 9 +- .../ng2-alfresco-webscript/karma-test-shim.js | 9 +- scripts/npm-build-bundle-all.sh | 10 +- scripts/npm-link-all-components-demo.sh | 11 +- scripts/npm-link-demo-shell.sh | 10 +- 52 files changed, 917 insertions(+), 414 deletions(-) create mode 100644 ng2-components/ng2-alfresco-datatable/docs/assets/pagination-demo.png rename ng2-components/ng2-alfresco-datatable/src/{components/pagination/paginationProvider.interface.ts => models/pagination.data.ts} (78%) delete mode 100644 ng2-components/ng2-alfresco-search/demo/i18n/en.json delete mode 100644 ng2-components/ng2-alfresco-search/src/assets/images/document-list.empty-folder.png create mode 100644 ng2-components/ng2-alfresco-search/src/assets/images/empty_doc_lib.svg diff --git a/.travis.yml b/.travis.yml index 5be48fb0ff..e15bf35b9c 100644 --- a/.travis.yml +++ b/.travis.yml @@ -38,14 +38,21 @@ before_script: (cd ng2-components/ng2-alfresco-datatable; npm link ng2-alfresco-core; if [ ! -d "bundles" ]; then npm link; fi); fi - if ([ "$MODULE" == "ng2-activiti-tasklist" ] || [ "$MODULE" == "ng2-activiti-processlist" ]); then + (cd ng2-components/ng2-alfresco-datatable; npm link ng2-alfresco-core; if [ ! -d "bundles" ]; then npm link; fi); (cd ng2-components/ng2-activiti-form; npm link ng2-alfresco-core; if [ ! -d "bundles" ]; then npm link; fi); fi - if ([ "$MODULE" == "ng2-activiti-processlist" ]); then + (cd ng2-components/ng2-alfresco-datatable; npm link ng2-alfresco-core; if [ ! -d "bundles" ]; then npm link; fi); + (cd ng2-components/ng2-activiti-form; npm link ng2-alfresco-core; if [ ! -d "bundles" ]; then npm link; fi); (cd ng2-components/ng2-activiti-tasklist; npm link ng2-alfresco-core; npm link ng2-alfresco-datatable; npm link ng2-activiti-form; if [ ! -d "bundles" ]; then npm link; fi); fi - if ([ "$MODULE" == "ng2-activiti-analytics" ]); then (cd ng2-components/ng2-activiti-diagrams; npm link ng2-alfresco-core; if [ ! -d "bundles" ]; then npm link; fi); fi + - if ([ "$MODULE" == "ng2-alfresco-search" ]); then + (cd ng2-components/ng2-alfresco-datatable; npm link ng2-alfresco-core; if [ ! -d "bundles" ]; then npm link; fi); + (cd ng2-components/ng2-alfresco-documentlist; npm link ng2-alfresco-core; npm link ng2-alfresco-datatable; if [ ! -d "bundles" ]; then npm link; fi); + fi - cd ng2-components/$MODULE; - npm run travis; #npm insall run install, build and tests diff --git a/appveyor.yml b/appveyor.yml index ef6eab1287..e333bfdeee 100644 --- a/appveyor.yml +++ b/appveyor.yml @@ -30,22 +30,19 @@ install: # Get the latest stable version of Node.js or io.js - ps: Install-Product node $env:nodejs_version # install module - - IF %COMPONENT_NAME% NEQ ng2-alfresco-core (cd ng2-components/ng2-alfresco-core && npm install && npm link && cd ../../) - - IF %COMPONENT_NAME% EQU ng2-alfresco-documentlist (cd ng2-components/ng2-alfresco-datatable && npm link ng2-alfresco-core && npm install && npm link && cd ../../) - - IF %COMPONENT_NAME% EQU ng2-activiti-processlist (cd ng2-components/ng2-alfresco-datatable && npm link ng2-alfresco-core && npm install && npm link && cd ../../) - - IF %COMPONENT_NAME% EQU ng2-activiti-processlist (cd ng2-components/ng2-activiti-form && npm link ng2-alfresco-core && npm install && npm link && cd ../../) - - IF %COMPONENT_NAME% EQU ng2-activiti-processlist (cd ng2-components/ng2-activiti-tasklist && npm link ng2-alfresco-core && npm link ng2-alfresco-datatable && npm link ng2-activiti-form && npm install && npm link && cd ../../) - - IF %COMPONENT_NAME% EQU ng2-activiti-tasklist (cd ng2-components/ng2-alfresco-datatable && npm link ng2-alfresco-core && npm install && npm link && cd ../../) - - IF %COMPONENT_NAME% EQU ng2-activiti-tasklist (cd ng2-components/ng2-activiti-form && npm link ng2-alfresco-core && npm install && npm link && cd ../../) - - IF %COMPONENT_NAME% EQU ng2-alfresco-webscript (cd ng2-components/ng2-alfresco-datatable && npm link ng2-alfresco-core && npm install && npm link && cd ../../) - - IF %COMPONENT_NAME% EQU ng2-activiti-analytics (cd ng2-components/ng2-activiti-diagrams && npm link link ng2-alfresco-core && npm install && npm link && cd ../../) + - IF %COMPONENT_NAME% NEQ ng2-alfresco-core (cd ng2-components/ng2-alfresco-core && npm link && cd ../../) + - IF %COMPONENT_NAME% EQU ng2-alfresco-documentlist (cd ng2-components/ng2-alfresco-datatable && npm link ng2-alfresco-core && npm link && cd ../../) + - IF %COMPONENT_NAME% EQU ng2-alfresco-search (cd ng2-components/ng2-alfresco-datatable && npm link ng2-alfresco-core && npm link && cd ../../) + - IF %COMPONENT_NAME% EQU ng2-alfresco-search (cd ng2-components/ng2-alfresco-documentlist && npm link ng2-alfresco-core && npm link ng2-alfresco-datatable && npm link && cd ../../) + - IF %COMPONENT_NAME% EQU ng2-activiti-processlist (cd ng2-components/ng2-alfresco-datatable && npm link ng2-alfresco-core && npm link && cd ../../) + - IF %COMPONENT_NAME% EQU ng2-activiti-processlist (cd ng2-components/ng2-activiti-form && npm link ng2-alfresco-core && npm link && cd ../../) + - IF %COMPONENT_NAME% EQU ng2-activiti-processlist (cd ng2-components/ng2-activiti-tasklist && npm link ng2-alfresco-core && npm link ng2-alfresco-datatable && npm link ng2-activiti-form && npm link && cd ../../) + - IF %COMPONENT_NAME% EQU ng2-activiti-tasklist (cd ng2-components/ng2-alfresco-datatable && npm link ng2-alfresco-core && npm link && cd ../../) + - IF %COMPONENT_NAME% EQU ng2-activiti-tasklist (cd ng2-components/ng2-activiti-form && npm link ng2-alfresco-core && npm link && cd ../../) + - IF %COMPONENT_NAME% EQU ng2-alfresco-webscript (cd ng2-components/ng2-alfresco-datatable && npm link ng2-alfresco-core && npm link && cd ../../) + - IF %COMPONENT_NAME% EQU ng2-activiti-analytics (cd ng2-components/ng2-activiti-diagrams && npm link link ng2-alfresco-core && npm link && cd ../../) - cd ng2-components/%COMPONENT_NAME% - - IF %COMPONENT_NAME% NEQ ng2-alfresco-core (npm link ng2-alfresco-core) - - IF %COMPONENT_NAME% EQU ng2-alfresco-documentlist (npm link ng2-alfresco-datatable) - - IF %COMPONENT_NAME% EQU ng2-activiti-processlist (npm link ng2-alfresco-datatable && npm link ng2-activiti-form && npm link ng2-activiti-tasklist) - - IF %COMPONENT_NAME% EQU ng2-activiti-tasklist (npm link ng2-alfresco-datatable && npm link ng2-activiti-form) - - IF %COMPONENT_NAME% EQU ng2-alfresco-webscript (npm link ng2-alfresco-datatable) - - IF %COMPONENT_NAME% EQU ng2-activiti-analytics (npm link ng2-activiti-diagrams) + - npm run travis # Post-install test scripts. test_script: diff --git a/demo-shell-ng2/app/components/files/files.component.html b/demo-shell-ng2/app/components/files/files.component.html index 9c03991ed6..f8b6e7e7ab 100644 --- a/demo-shell-ng2/app/components/files/files.component.html +++ b/demo-shell-ng2/app/components/files/files.component.html @@ -96,10 +96,6 @@ - - diff --git a/demo-shell-ng2/app/components/search/search.component.html b/demo-shell-ng2/app/components/search/search.component.html index 8e5f7d755c..bdd4757b17 100644 --- a/demo-shell-ng2/app/components/search/search.component.html +++ b/demo-shell-ng2/app/components/search/search.component.html @@ -1,8 +1,12 @@

Search results

- +
- -
-
+
+ +
+
+
diff --git a/demo-shell-ng2/app/components/search/search.component.ts b/demo-shell-ng2/app/components/search/search.component.ts index 6351a0b5b2..9882609249 100644 --- a/demo-shell-ng2/app/components/search/search.component.ts +++ b/demo-shell-ng2/app/components/search/search.component.ts @@ -47,18 +47,18 @@ import { MinimalNodeEntity } from 'alfresco-js-api'; }) export class SearchComponent { - fileShowed: boolean = false; fileNodeId: string; + fileShowed: boolean = false; constructor(public router: Router) { } - onNavigateItem(event: MinimalNodeEntity) { - if (event.entry.isFile) { - this.fileNodeId = event.entry.id; + showFile(event) { + if (event.value.entry.isFile) { + this.fileNodeId = event.value.entry.id; this.fileShowed = true; - } else if (event.entry.isFolder) { - this.router.navigate(['/files', event.entry.id]); + } else { + this.fileShowed = false; } } } diff --git a/ng2-components/ng2-activiti-analytics/karma-test-shim.js b/ng2-components/ng2-activiti-analytics/karma-test-shim.js index d346348361..50673b05cb 100644 --- a/ng2-components/ng2-activiti-analytics/karma-test-shim.js +++ b/ng2-components/ng2-activiti-analytics/karma-test-shim.js @@ -1,7 +1,14 @@ // Tun on full stack traces in errors to help debugging Error.stackTraceLimit = Infinity; -// jasmine.DEFAULT_TIMEOUT_INTERVAL = 1000; +jasmine.DEFAULT_TIMEOUT_INTERVAL = 100000; + +window.componentHandler = { + upgradeAllRegistered: function () { + }, + upgradeElement: function () { + } +}; __karma__.loaded = function() {}; diff --git a/ng2-components/ng2-activiti-diagrams/karma-test-shim.js b/ng2-components/ng2-activiti-diagrams/karma-test-shim.js index 04a45e501c..085bf02f56 100644 --- a/ng2-components/ng2-activiti-diagrams/karma-test-shim.js +++ b/ng2-components/ng2-activiti-diagrams/karma-test-shim.js @@ -1,7 +1,14 @@ // Tun on full stack traces in errors to help debugging Error.stackTraceLimit = Infinity; -// jasmine.DEFAULT_TIMEOUT_INTERVAL = 1000; +jasmine.DEFAULT_TIMEOUT_INTERVAL = 100000; + +window.componentHandler = { + upgradeAllRegistered: function () { + }, + upgradeElement: function () { + } +}; __karma__.loaded = function() {}; diff --git a/ng2-components/ng2-activiti-form/karma-test-shim.js b/ng2-components/ng2-activiti-form/karma-test-shim.js index ac2dd6fcfb..1751adb04e 100644 --- a/ng2-components/ng2-activiti-form/karma-test-shim.js +++ b/ng2-components/ng2-activiti-form/karma-test-shim.js @@ -1,7 +1,14 @@ // Tun on full stack traces in errors to help debugging Error.stackTraceLimit = Infinity; -// jasmine.DEFAULT_TIMEOUT_INTERVAL = 1000; +jasmine.DEFAULT_TIMEOUT_INTERVAL = 100000; + +window.componentHandler = { + upgradeAllRegistered: function () { + }, + upgradeElement: function () { + } +}; __karma__.loaded = function() {}; diff --git a/ng2-components/ng2-activiti-processlist/karma-test-shim.js b/ng2-components/ng2-activiti-processlist/karma-test-shim.js index 8ab8026459..b3f275d74f 100644 --- a/ng2-components/ng2-activiti-processlist/karma-test-shim.js +++ b/ng2-components/ng2-activiti-processlist/karma-test-shim.js @@ -1,7 +1,14 @@ // Tun on full stack traces in errors to help debugging Error.stackTraceLimit = Infinity; -// jasmine.DEFAULT_TIMEOUT_INTERVAL = 1000; +jasmine.DEFAULT_TIMEOUT_INTERVAL = 100000; + +window.componentHandler = { + upgradeAllRegistered: function () { + }, + upgradeElement: function () { + } +}; __karma__.loaded = function() {}; diff --git a/ng2-components/ng2-activiti-tasklist/karma-test-shim.js b/ng2-components/ng2-activiti-tasklist/karma-test-shim.js index a66c8eb6a9..9f594e357b 100644 --- a/ng2-components/ng2-activiti-tasklist/karma-test-shim.js +++ b/ng2-components/ng2-activiti-tasklist/karma-test-shim.js @@ -1,7 +1,14 @@ // Tun on full stack traces in errors to help debugging Error.stackTraceLimit = Infinity; -// jasmine.DEFAULT_TIMEOUT_INTERVAL = 1000; +jasmine.DEFAULT_TIMEOUT_INTERVAL = 100000; + +window.componentHandler = { + upgradeAllRegistered: function () { + }, + upgradeElement: function () { + } +}; __karma__.loaded = function() {}; diff --git a/ng2-components/ng2-alfresco-core/karma-test-shim.js b/ng2-components/ng2-alfresco-core/karma-test-shim.js index c6de4c47e5..23ec0d86d4 100644 --- a/ng2-components/ng2-alfresco-core/karma-test-shim.js +++ b/ng2-components/ng2-alfresco-core/karma-test-shim.js @@ -1,7 +1,14 @@ // Tun on full stack traces in errors to help debugging Error.stackTraceLimit = Infinity; -// jasmine.DEFAULT_TIMEOUT_INTERVAL = 1000; +jasmine.DEFAULT_TIMEOUT_INTERVAL = 100000; + +window.componentHandler = { + upgradeAllRegistered: function () { + }, + upgradeElement: function () { + } +}; __karma__.loaded = function() {}; diff --git a/ng2-components/ng2-alfresco-datatable/README.md b/ng2-components/ng2-alfresco-datatable/README.md index 4ae455c08d..733717418b 100644 --- a/ng2-components/ng2-alfresco-datatable/README.md +++ b/ng2-components/ng2-alfresco-datatable/README.md @@ -441,6 +441,31 @@ let schema = ObjectDataTableAdapter.generateSchema(data); ``` +# Pagination Component + +The pagination object is a generic component to paginate component. The Alfresco API are paginated and returns a Pagination object. You can use the pagination object to feed the pagination component and then listen to the event which return the current pagination and query again the API with the options choose by the user. + +![DataTable demo](docs/assets/pagination-demo.png) + + +### Properties + +| Name | Type | Default | Description +| --- | --- | --- | --- | +| `supportedPageSizes` | numer[] | [5, 10, 20, 50, 100] | This array describe the set of options showed in the pick list | +| `maxItems` | boolean | false | Max number of element showed per page. If you pick another size from the pick list this option will be overwritten | +| `pagination` | Pagination | {count: 0, totalItems: 0, skipCount: 0, maxItems: 20 , hasMoreItems: true} | The Alfresco Api return a pagination object, you can use it to feed the pagination component, or create your own. | + +### Events + +| Name | Description +| --- | --- | +| `changePageSize` | Emitted when user picks one of the options from the pick list | +| `nextPage` | Emitted when user clicks next page button | +| `prevPage` | Emitted when user clicks prev page button | + +All the events carry with them the current pagination object. + ## Build from sources Alternatively you can build component from sources with the following commands: diff --git a/ng2-components/ng2-alfresco-datatable/docs/assets/pagination-demo.png b/ng2-components/ng2-alfresco-datatable/docs/assets/pagination-demo.png new file mode 100644 index 0000000000000000000000000000000000000000..bd78a014403cfc4486b30d31a9658ceeab9ec9f4 GIT binary patch literal 12462 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 Ka;cJu|NjAFF2Do; literal 0 HcmV?d00001 diff --git a/ng2-components/ng2-alfresco-datatable/karma-test-shim.js b/ng2-components/ng2-alfresco-datatable/karma-test-shim.js index b922a90bce..6aa9dd62c7 100644 --- a/ng2-components/ng2-alfresco-datatable/karma-test-shim.js +++ b/ng2-components/ng2-alfresco-datatable/karma-test-shim.js @@ -1,7 +1,14 @@ // Tun on full stack traces in errors to help debugging Error.stackTraceLimit = Infinity; -// jasmine.DEFAULT_TIMEOUT_INTERVAL = 1000; +jasmine.DEFAULT_TIMEOUT_INTERVAL = 100000; + +window.componentHandler = { + upgradeAllRegistered: function () { + }, + upgradeElement: function () { + } +}; __karma__.loaded = function() {}; diff --git a/ng2-components/ng2-alfresco-datatable/src/components/pagination/index.ts b/ng2-components/ng2-alfresco-datatable/src/components/pagination/index.ts index 1b1e7e47b6..4f9699a18c 100644 --- a/ng2-components/ng2-alfresco-datatable/src/components/pagination/index.ts +++ b/ng2-components/ng2-alfresco-datatable/src/components/pagination/index.ts @@ -15,5 +15,4 @@ * limitations under the License. */ -export * from './paginationProvider.interface'; export * from './pagination.component'; diff --git a/ng2-components/ng2-alfresco-datatable/src/components/pagination/pagination.component.html b/ng2-components/ng2-alfresco-datatable/src/components/pagination/pagination.component.html index 297974de9a..5598cc3b73 100644 --- a/ng2-components/ng2-alfresco-datatable/src/components/pagination/pagination.component.html +++ b/ng2-components/ng2-alfresco-datatable/src/components/pagination/pagination.component.html @@ -1,7 +1,7 @@ -
+
Rows per page: - {{pageSize}} + {{pagination.maxItems}} @@ -15,12 +15,12 @@ {{summary}} diff --git a/ng2-components/ng2-alfresco-datatable/src/components/pagination/pagination.component.spec.ts b/ng2-components/ng2-alfresco-datatable/src/components/pagination/pagination.component.spec.ts index 6266faa761..e69a226dcd 100644 --- a/ng2-components/ng2-alfresco-datatable/src/components/pagination/pagination.component.spec.ts +++ b/ng2-components/ng2-alfresco-datatable/src/components/pagination/pagination.component.spec.ts @@ -16,17 +16,9 @@ */ import { PaginationComponent } from '../pagination/pagination.component'; -import { PaginationProvider, DataLoadedEventEmitter} from '../pagination/paginationProvider.interface'; -import { Injector } from '@angular/core'; -import { getTestBed, TestBed} from '@angular/core/testing'; - -class CustomPaginationProvider implements PaginationProvider { - skipCount: number = 0; - dataLoaded: DataLoadedEventEmitter; - count: number = 200; - hasMoreItems: boolean = false; - maxItems: number = 20; -} +import { PaginationData } from '../../models/pagination.data'; +import { Injector, SimpleChange } from '@angular/core'; +import { getTestBed, TestBed } from '@angular/core/testing'; describe('PaginationComponent', () => { let injector: Injector; @@ -40,7 +32,13 @@ describe('PaginationComponent', () => { }); injector = getTestBed(); paginationComponent = injector.get(PaginationComponent); - paginationComponent.provider = new CustomPaginationProvider(); + paginationComponent.pagination = new PaginationData(0, 0, 0, 20, true); + }); + + it('should create Pagination object on init if no object pagination is passed', () => { + paginationComponent.pagination = null; + paginationComponent.ngOnInit(); + expect(paginationComponent.pagination).not.toBe(null); }); it('is defined', () => { @@ -48,35 +46,63 @@ describe('PaginationComponent', () => { }); it('page size', () => { - expect(paginationComponent.pageSize).toBe(20); + expect(paginationComponent.pagination.maxItems).toBe(20); }); it('set page size', () => { - paginationComponent.pageSize = 100; - expect(paginationComponent.pageSize).toBe(100); + paginationComponent.pagination.maxItems = 100; + expect(paginationComponent.pagination.maxItems).toBe(100); }); - it('prevPageAvail', () => { - expect(paginationComponent.prevPageAvail).toBe(false); + it('prevPageAvail dafault false', () => { + expect(paginationComponent.prevPageAvail()).toBe(false); }); - it('nextPageAvail', () => { - expect(paginationComponent.nextPageAvail).toBe(false); + it('nextPageAvail default true', () => { + expect(paginationComponent.nextPageAvail()).toBe(true); }); it('showNextPage', () => { - expect(paginationComponent.provider.skipCount).toBe(0); + expect(paginationComponent.pagination.skipCount).toBe(0); paginationComponent.showNextPage(); - expect(paginationComponent.provider.skipCount).toBe(20); + expect(paginationComponent.pagination.skipCount).toBe(20); }); it('showPrevPage', () => { - paginationComponent.provider.skipCount = 100; + paginationComponent.pagination.skipCount = 100; paginationComponent.showPrevPage(); - expect(paginationComponent.provider.skipCount).toBe(80); + expect(paginationComponent.pagination.skipCount).toBe(80); }); - it('PaginationProvider', () => { - expect(paginationComponent.provider instanceof CustomPaginationProvider).toBeTruthy(); + it('should update the summary on nextpage click', () => { + spyOn(paginationComponent, 'updateSummary'); + + paginationComponent.showNextPage(); + + expect(paginationComponent.updateSummary).toHaveBeenCalled(); + }); + + it('should update the summary on prevpage click', () => { + spyOn(paginationComponent, 'updateSummary'); + + paginationComponent.showPrevPage(); + + expect(paginationComponent.updateSummary).toHaveBeenCalled(); + }); + + it('should update the summary on chage page size click', () => { + spyOn(paginationComponent, 'updateSummary'); + + paginationComponent.setPageSize(100); + + expect(paginationComponent.updateSummary).toHaveBeenCalled(); + }); + + it('should update the summary on input pagination parameter change', () => { + spyOn(paginationComponent, 'updateSummary'); + + paginationComponent.ngOnChanges({pagination: new SimpleChange(null, new PaginationData(0, 0, 0, 20, true))}); + + expect(paginationComponent.updateSummary).toHaveBeenCalled(); }); }); diff --git a/ng2-components/ng2-alfresco-datatable/src/components/pagination/pagination.component.ts b/ng2-components/ng2-alfresco-datatable/src/components/pagination/pagination.component.ts index fdc0d233c6..c689de3ae9 100644 --- a/ng2-components/ng2-alfresco-datatable/src/components/pagination/pagination.component.ts +++ b/ng2-components/ng2-alfresco-datatable/src/components/pagination/pagination.component.ts @@ -15,8 +15,9 @@ * limitations under the License. */ -import { Component, Input, OnInit } from '@angular/core'; -import { PaginationProvider } from './paginationProvider.interface'; +import { SimpleChanges, OnChanges, EventEmitter, Output, Component, Input, OnInit } from '@angular/core'; +import { PaginationData } from '../../models/pagination.data'; +import { Pagination } from 'alfresco-js-api'; @Component({ moduleId: module.id, @@ -24,68 +25,81 @@ import { PaginationProvider } from './paginationProvider.interface'; templateUrl: './pagination.component.html', styleUrls: ['./pagination.component.css'] }) -export class PaginationComponent implements OnInit { +export class PaginationComponent implements OnInit, OnChanges { - DEFAULT_PAGE_SIZE: number = 20; + static DEFAULT_PAGE_SIZE: number = 20; - private _summary: string = ''; + private summary: string = ''; @Input() supportedPageSizes: number[] = [5, 10, 20, 50, 100]; @Input() - provider: PaginationProvider; + maxItems: number = PaginationComponent.DEFAULT_PAGE_SIZE; - get pageSize(): number { - if (this.provider) { - return this.provider.maxItems; - } - return this.DEFAULT_PAGE_SIZE; + @Input() + pagination: Pagination; + + @Output() + changePageSize: EventEmitter = new EventEmitter(); + + @Output() + nextPage: EventEmitter = new EventEmitter(); + + @Output() + prevPage: EventEmitter = new EventEmitter(); + + constructor() { } - set pageSize(value: number) { - if (this.provider) { - this.provider.maxItems = value; + ngOnInit() { + if (!this.pagination) { + this.pagination = new PaginationData(0, 0, 0, this.maxItems, true); + } + } + + ngOnChanges(changes: SimpleChanges) { + if (changes['pagination']) { + if (changes['pagination'].currentValue) { + this.pagination = changes['pagination'].currentValue; + this.updateSummary(); + } } } setPageSize(value: number) { - this.pageSize = value; + this.pagination.maxItems = value; + this.updateSummary(); + this.changePageSize.emit(this.pagination); } - get summary(): string { - return this._summary; + nextPageAvail(): boolean { + return this.pagination.hasMoreItems; } - get nextPageAvail(): boolean { - return this.provider.hasMoreItems; - } - - get prevPageAvail(): boolean { - return this.provider.skipCount > 0; + prevPageAvail(): boolean { + return this.pagination.skipCount > 0; } showNextPage() { - this.provider.skipCount += this.provider.maxItems; + this.pagination.skipCount += this.pagination.maxItems; + this.updateSummary(); + this.nextPage.emit(this.pagination); } showPrevPage() { - this.provider.skipCount -= this.provider.maxItems; + this.pagination.skipCount -= this.pagination.maxItems; + this.updateSummary(); + this.prevPage.emit(this.pagination); } - ngOnInit() { - this.provider.dataLoaded.subscribe(() => { - this.updateSummary(); - }); - } - - private updateSummary() { - let from = this.provider.skipCount; + updateSummary() { + let from = this.pagination.skipCount; if (from === 0) { from = 1; } - let to = this.provider.skipCount + this.provider.count; - let of = this.provider.totalItems; - this._summary = `${from}-${to} of ${of}`; + let to = this.pagination.skipCount + this.pagination.count; + let of = this.pagination.totalItems; + this.summary = `${from}-${to} of ${of}`; } } diff --git a/ng2-components/ng2-alfresco-datatable/src/components/pagination/paginationProvider.interface.ts b/ng2-components/ng2-alfresco-datatable/src/models/pagination.data.ts similarity index 78% rename from ng2-components/ng2-alfresco-datatable/src/components/pagination/paginationProvider.interface.ts rename to ng2-components/ng2-alfresco-datatable/src/models/pagination.data.ts index fb445a0364..94fbe0d19e 100644 --- a/ng2-components/ng2-alfresco-datatable/src/components/pagination/paginationProvider.interface.ts +++ b/ng2-components/ng2-alfresco-datatable/src/models/pagination.data.ts @@ -15,9 +15,9 @@ * limitations under the License. */ -import { Subject } from 'rxjs/Rx'; +import { Pagination } from 'alfresco-js-api'; -export interface PaginationProvider { +export class PaginationData implements Pagination { /** * The number of objects in the collection. @@ -34,7 +34,7 @@ export interface PaginationProvider { * An integer describing the total number of entities in the collection. * The API might not be able to determine this value, in which case this property will not be present. */ - totalItems?: number; + totalItems: number; /** * An integer describing how many entities exist in the collection before those included in this list. @@ -47,18 +47,11 @@ export interface PaginationProvider { */ maxItems: number; - /** - * An event that is emitted every time data is loaded. - */ - dataLoaded: DataLoadedEventEmitter; -} - -export class DataLoadedEventEmitter extends Subject { - constructor() { - super(); - } - - emit(value) { - super.next(value); + constructor(count: number, totalItems: number, skipCount: number, maxItems: number, hasMoreItems: boolean) { + this.count = count; + this.hasMoreItems = hasMoreItems; + this.totalItems = totalItems; + this.skipCount = skipCount; + this.maxItems = maxItems; } } diff --git a/ng2-components/ng2-alfresco-documentlist/README.md b/ng2-components/ng2-alfresco-documentlist/README.md index 2df200747f..ea4be1c6d1 100644 --- a/ng2-components/ng2-alfresco-documentlist/README.md +++ b/ng2-components/ng2-alfresco-documentlist/README.md @@ -168,10 +168,13 @@ platformBrowserDynamic().bootstrapModule(AppModule); ### Properties +The properties currentFolderId, folderNode and node are the entry initialization properties of the document list. They can not be used together, choose the one that suites more your use case. + | Name | Type | Default | Description | | --- | --- | --- | --- | | `currentFolderId` | string | null | Initial node ID of displayed folder. Can be `-root-`, `-shared-`, `-my-`, or a fixed node ID | | `folderNode` | `MinimalNodeEntryEntity` | null | Currently displayed folder node | +| `node` | `NodePaging` | null | Document list will show all the node contained in the NodePaging entity | | `navigate` | boolean | true | Toggles navigation to folder content or file preview | | `navigationMode` | string (click\|dblclick) | dblclick | User interaction for folder navigation or file preview | | `thumbnails` | boolean | false | Show document thumbnails rather than icons | @@ -179,6 +182,7 @@ platformBrowserDynamic().bootstrapModule(AppModule); | `multiselect` | boolean | false | Toggles multiselect mode | | `contentActions` | boolean | false | Toggles content actions for each row | | `contextMenuActions` | boolean | false | Toggles context menus for each row | +| `enablePagination` | boolean | true | Shows pagination | | `creationMenuActions` | boolean | true | Toggles the creation menu actions| | `rowFilter` | `RowFilter` | | Custom row filter, [see more](#custom-row-filter). | `imageResolver` | `ImageResolver` | | Custom image resolver, [see more](#custom-image-resolver). diff --git a/ng2-components/ng2-alfresco-documentlist/karma-test-shim.js b/ng2-components/ng2-alfresco-documentlist/karma-test-shim.js index dcfa63a5ae..53e4408aa1 100644 --- a/ng2-components/ng2-alfresco-documentlist/karma-test-shim.js +++ b/ng2-components/ng2-alfresco-documentlist/karma-test-shim.js @@ -1,7 +1,14 @@ // Tun on full stack traces in errors to help debugging Error.stackTraceLimit = Infinity; -// jasmine.DEFAULT_TIMEOUT_INTERVAL = 1000; +jasmine.DEFAULT_TIMEOUT_INTERVAL = 100000; + +window.componentHandler = { + upgradeAllRegistered: function () { + }, + upgradeElement: function () { + } +}; __karma__.loaded = function() {}; diff --git a/ng2-components/ng2-alfresco-documentlist/src/components/document-list.component.html b/ng2-components/ng2-alfresco-documentlist/src/components/document-list.component.html index 2d582847bb..bb164fbc3c 100644 --- a/ng2-components/ng2-alfresco-documentlist/src/components/document-list.component.html +++ b/ng2-components/ng2-alfresco-documentlist/src/components/document-list.component.html @@ -27,4 +27,11 @@
+ + diff --git a/ng2-components/ng2-alfresco-documentlist/src/components/document-list.component.spec.ts b/ng2-components/ng2-alfresco-documentlist/src/components/document-list.component.spec.ts index c2cc0459cb..80fc2da6e1 100644 --- a/ng2-components/ng2-alfresco-documentlist/src/components/document-list.component.spec.ts +++ b/ng2-components/ng2-alfresco-documentlist/src/components/document-list.component.spec.ts @@ -22,7 +22,7 @@ import { DocumentListComponent } from './document-list.component'; import { DocumentListServiceMock } from './../assets/document-list.service.mock'; import { ContentActionModel } from '../models/content-action.model'; import { FileNode, FolderNode } from '../assets/document-library.model.mock'; -import { NodeMinimalEntry } from '../models/document-library.model'; +import { NodeMinimalEntry, NodeMinimal, NodePaging } from '../models/document-library.model'; import { ShareDataRow, RowFilter, ImageResolver } from './../data/share-datatable-adapter'; describe('DocumentList', () => { @@ -291,10 +291,10 @@ describe('DocumentList', () => { }); /* - it('should not get node path for null node', () => { - expect(documentList.getNodePath(null)).toBeNull(); - }); - */ + it('should not get node path for null node', () => { + expect(documentList.getNodePath(null)).toBeNull(); + }); + */ it('should require valid node for file preview', () => { let file = new FileNode(); @@ -326,12 +326,30 @@ describe('DocumentList', () => { expect(documentList.performNavigation).not.toHaveBeenCalled(); }); - it('should display folder content on reload', () => { + it('should display folder content from loadFolder on reload if folderNode defined', () => { + documentList.folderNode = new NodeMinimal(); + spyOn(documentList, 'loadFolder').and.callThrough(); documentList.reload(); expect(documentList.loadFolder).toHaveBeenCalled(); }); + it('should display folder content from loadFolderByNodeId on reload if currentFolderId defined', () => { + documentList.currentFolderId = 'id-folder'; + spyOn(documentListService, 'getFolderNode').and.returnValue(Promise.reject(false)); + spyOn(documentList, 'loadFolderByNodeId').and.callThrough(); + documentList.reload(); + expect(documentList.loadFolderByNodeId).toHaveBeenCalled(); + }); + + it('should display folder content from loadFolderByNodeId on reload if node defined', () => { + documentList.node = new NodePaging(); + + spyOn(documentList.data, 'loadPage').and.callThrough(); + documentList.reload(); + expect(documentList.data.loadPage).toHaveBeenCalled(); + }); + it('should require node to resolve context menu actions', () => { expect(documentList.getContextActions(null)).toBeNull(); @@ -428,6 +446,7 @@ describe('DocumentList', () => { it('should set row filter for underlying adapter', () => { let filter = {}; + documentList.currentFolderId = 'id'; spyOn(documentList.data, 'setFilter').and.callThrough(); documentList.rowFilter = filter; @@ -445,7 +464,7 @@ describe('DocumentList', () => { it('should emit [nodeClick] event on row click', () => { let node = new NodeMinimalEntry(); let row = new ShareDataRow(node); - let event = { value: row }; + let event = {value: row}; spyOn(documentList, 'onNodeClick').and.callThrough(); documentList.onRowClick(event); @@ -455,7 +474,7 @@ describe('DocumentList', () => { it('should emit [nodeDblClick] event on row double-click', () => { let node = new NodeMinimalEntry(); let row = new ShareDataRow(node); - let event = { value: row }; + let event = {value: row}; spyOn(documentList, 'onNodeDblClick').and.callThrough(); documentList.onRowDblClick(event); @@ -464,8 +483,8 @@ describe('DocumentList', () => { it('should load folder by ID on init', () => { documentList.currentFolderId = '1d26e465-dea3-42f3-b415-faa8364b9692'; - spyOn(documentList.data, 'loadById').and.returnValue(Promise.resolve()); - documentList.ngOnInit(); - expect(documentList.data.loadById).toHaveBeenCalled(); + spyOn(documentList, 'loadFolderNodesByFolderNodeId').and.returnValue(Promise.resolve()); + documentList.ngOnChanges({folderNode: new SimpleChange(null, documentList.currentFolderId)}); + expect(documentList.loadFolderNodesByFolderNodeId).toHaveBeenCalled(); }); }); diff --git a/ng2-components/ng2-alfresco-documentlist/src/components/document-list.component.ts b/ng2-components/ng2-alfresco-documentlist/src/components/document-list.component.ts index 13c863d15e..f2a7ebb66d 100644 --- a/ng2-components/ng2-alfresco-documentlist/src/components/document-list.component.ts +++ b/ng2-components/ng2-alfresco-documentlist/src/components/document-list.component.ts @@ -15,9 +15,22 @@ * limitations under the License. */ -import { Component, OnInit, Input, OnChanges, Output, SimpleChanges, EventEmitter, AfterContentInit, TemplateRef, NgZone, ViewChild, HostListener } from '@angular/core'; +import { + Component, + OnInit, + Input, + OnChanges, + Output, + SimpleChanges, + EventEmitter, + AfterContentInit, + TemplateRef, + NgZone, + ViewChild, + HostListener +} from '@angular/core'; import { Subject } from 'rxjs/Rx'; -import { MinimalNodeEntity, MinimalNodeEntryEntity } from 'alfresco-js-api'; +import { MinimalNodeEntity, MinimalNodeEntryEntity, NodePaging, Pagination } from 'alfresco-js-api'; import { AlfrescoTranslationService } from 'ng2-alfresco-core'; import { DataRowEvent, DataTableComponent, ObjectDataColumn } from 'ng2-alfresco-datatable'; import { DocumentListService } from './../services/document-list.service'; @@ -55,6 +68,9 @@ export class DocumentListComponent implements OnInit, OnChanges, AfterContentIni @Input() multiselect: boolean = false; + @Input() + enablePagination: boolean = true; + @Input() contentActions: boolean = false; @@ -67,10 +83,15 @@ export class DocumentListComponent implements OnInit, OnChanges, AfterContentIni @Input() pageSize: number = DocumentListComponent.DEFAULT_PAGE_SIZE; + skipCount: number = 0; + + pagination: Pagination; + @Input() set rowFilter(value: RowFilter) { - if (this.data) { + if (this.data && value && this.currentFolderId) { this.data.setFilter(value); + this.loadFolderNodesByFolderNodeId(this.currentFolderId, this.pageSize, this.skipCount); } }; @@ -81,6 +102,16 @@ export class DocumentListComponent implements OnInit, OnChanges, AfterContentIni } } + // The identifier of a node. You can also use one of these well-known aliases: -my- | -shared- | -root- + @Input() + currentFolderId: string = null; + + @Input() + folderNode: MinimalNodeEntryEntity = null; + + @Input() + node: NodePaging = null; + @Output() nodeClick: EventEmitter = new EventEmitter(); @@ -102,25 +133,17 @@ export class DocumentListComponent implements OnInit, OnChanges, AfterContentIni @ViewChild(DataTableComponent) dataTable: DataTableComponent; - // The identifier of a node. You can also use one of these well-known aliases: -my- | -shared- | -root- - @Input() - currentFolderId: string = null; - - @Input() - folderNode: MinimalNodeEntryEntity = null; - errorMessage; actions: ContentActionModel[] = []; emptyFolderTemplate: TemplateRef; contextActionHandler: Subject = new Subject(); data: ShareDataTableAdapter; - constructor( - private documentListService: DocumentListService, - private ngZone: NgZone, - private translateService: AlfrescoTranslationService) { + constructor(private documentListService: DocumentListService, + private ngZone: NgZone, + private translateService: AlfrescoTranslationService) { - this.data = new ShareDataTableAdapter(this.documentListService, './', []); + this.data = new ShareDataTableAdapter(this.documentListService, this.baseComponentPath, []); if (translateService) { translateService.addTranslationFolder('ng2-alfresco-documentlist', 'node_modules/ng2-alfresco-documentlist/src'); @@ -151,15 +174,15 @@ export class DocumentListComponent implements OnInit, OnChanges, AfterContentIni ngOnInit() { this.data.thumbnails = this.thumbnails; - this.data.maxItems = this.pageSize; this.contextActionHandler.subscribe(val => this.contextActionCallback(val)); - // Automatically enforce single-click navigation for mobile browsers + this.enforceSingleClickNavigationForMobile(); + } + + private enforceSingleClickNavigationForMobile(): void { if (this.isMobile()) { this.navigationMode = DocumentListComponent.SINGLE_CLICK_NAVIGATION; } - - this.loadFolder(); } ngAfterContentInit() { @@ -172,9 +195,37 @@ export class DocumentListComponent implements OnInit, OnChanges, AfterContentIni ngOnChanges(changes: SimpleChanges) { if (changes['folderNode'] && changes['folderNode'].currentValue) { this.loadFolder(); - } else if (changes['currentFolderId'] && changes['currentFolderId'].currentValue) { - this.loadFolderByNodeId(changes['currentFolderId'].currentValue); + return; } + + if (changes['currentFolderId'] && changes['currentFolderId'].currentValue) { + this.loadFolderByNodeId(changes['currentFolderId'].currentValue); + return; + } + + if (changes['node'] && changes['node'].currentValue) { + this.data.loadPage(changes['node'].currentValue); + return; + } + } + + reload() { + this.ngZone.run(() => { + if (this.folderNode) { + this.loadFolder(); + return; + } + + if (this.currentFolderId) { + this.loadFolderByNodeId(this.currentFolderId); + return; + } + + if (this.node) { + this.data.loadPage(this.node); + return; + } + }); } isEmptyTemplateDefined() { @@ -229,7 +280,7 @@ export class DocumentListComponent implements OnInit, OnChanges, AfterContentIni this.folderNode = node.entry; this.loadFolder(); - this.folderChange.emit({ node: node.entry }); + this.folderChange.emit({node: node.entry}); return true; } return false; @@ -246,21 +297,10 @@ export class DocumentListComponent implements OnInit, OnChanges, AfterContentIni } } - loadFolderById(id: string): Promise { - return this.data.loadById(id); - } - - reload() { - this.ngZone.run(() => { - this.loadFolder(); - }); - } - loadFolder() { let nodeId = this.folderNode ? this.folderNode.id : this.currentFolderId; if (nodeId) { - this.loadFolderById(nodeId) - .catch(err => this.error.emit(err)); + this.loadFolderNodesByFolderNodeId(nodeId, this.pageSize, this.skipCount).catch(err => this.error.emit(err)); } } @@ -269,9 +309,33 @@ export class DocumentListComponent implements OnInit, OnChanges, AfterContentIni this.documentListService.getFolderNode(nodeId).then(node => { this.folderNode = node; this.currentFolderId = node.id; - this.data.loadById(node.id).catch(err => this.error.emit(err)); + this.loadFolderNodesByFolderNodeId(node.id, this.pageSize, this.skipCount).catch(err => this.error.emit(err)); }) - .catch(err => this.error.emit(err)); + .catch(err => this.error.emit(err)); + } + + loadFolderNodesByFolderNodeId(id: string, maxItems: number, skipCount: number): Promise { + return new Promise((resolve, reject) => { + if (id && this.documentListService) { + this.documentListService + .getFolder(null, { + maxItems: maxItems, + skipCount: skipCount, + rootFolderId: id + }) + .subscribe(val => { + this.data.loadPage(val); + this.pagination = val.list.pagination; + resolve(true); + }, + error => { + reject(error); + }); + } else { + resolve(false); + } + }); + } /** @@ -387,4 +451,19 @@ export class DocumentListComponent implements OnInit, OnChanges, AfterContentIni this.reload(); this.success.emit(event); } + + public onChangePageSize(event: Pagination): void { + this.pageSize = event.maxItems; + this.reload(); + } + + public onNextPage(event: Pagination): void { + this.skipCount = event.skipCount; + this.reload(); + } + + public onPrevPage(event: Pagination): void { + this.skipCount = event.skipCount; + this.reload(); + } } diff --git a/ng2-components/ng2-alfresco-documentlist/src/data/share-datatable-adapter.ts b/ng2-components/ng2-alfresco-documentlist/src/data/share-datatable-adapter.ts index ab112fc0bb..23fd57f915 100644 --- a/ng2-components/ng2-alfresco-documentlist/src/data/share-datatable-adapter.ts +++ b/ng2-components/ng2-alfresco-documentlist/src/data/share-datatable-adapter.ts @@ -17,80 +17,34 @@ import { DatePipe } from '@angular/common'; import { ObjectUtils } from 'ng2-alfresco-core'; -import { PaginationProvider, DataLoadedEventEmitter, DataTableAdapter, DataRow, DataColumn, DataSorting } from 'ng2-alfresco-datatable'; +import { DataTableAdapter, DataRow, DataColumn, DataSorting } from 'ng2-alfresco-datatable'; import { NodePaging, NodeMinimalEntry } from './../models/document-library.model'; import { DocumentListService } from './../services/document-list.service'; -export class ShareDataTableAdapter implements DataTableAdapter, PaginationProvider { +export class ShareDataTableAdapter implements DataTableAdapter { ERR_ROW_NOT_FOUND: string = 'Row not found'; ERR_COL_NOT_FOUND: string = 'Column not found'; DEFAULT_DATE_FORMAT: string = 'medium'; - DEFAULT_PAGE_SIZE: number = 20; - MIN_PAGE_SIZE: number = 5; private sorting: DataSorting; private rows: DataRow[]; private columns: DataColumn[]; private page: NodePaging; - private folderNodeId: string; private filter: RowFilter; private imageResolver: ImageResolver; - private _count: number = 0; - private _hasMoreItems: boolean = false; - private _totalItems: number = 0; - private _skipCount: number = 0; - private _maxItems: number = this.DEFAULT_PAGE_SIZE; - thumbnails: boolean = false; - dataLoaded: DataLoadedEventEmitter; selectedRow: DataRow; constructor(private documentListService: DocumentListService, private basePath: string, schema: DataColumn[]) { - this.dataLoaded = new DataLoadedEventEmitter(); this.rows = []; this.columns = schema || []; - this.resetPagination(); - } - - get count(): number { - return this._count; - } - - get hasMoreItems(): boolean { - return this._hasMoreItems; - } - - get totalItems(): number { - return this._totalItems; - } - - get skipCount(): number { - return this._skipCount; - } - - set skipCount(value: number) { - if (value !== this._skipCount) { - this._skipCount = value > 0 ? value : 0; - this.loadById(this.folderNodeId); - } - } - - get maxItems(): number { - return this._maxItems; - } - - set maxItems(value: number) { - if (value !== this._maxItems) { - this._maxItems = value > this.MIN_PAGE_SIZE ? value : this.MIN_PAGE_SIZE; - this.loadById(this.folderNodeId); - } } getRows(): Array { @@ -198,37 +152,8 @@ export class ShareDataTableAdapter implements DataTableAdapter, PaginationProvid this.setSorting(sorting); } - loadById(id: string): Promise { - return new Promise((resolve, reject) => { - if (id && this.documentListService) { - this.documentListService - .getFolder(null, { - maxItems: this._maxItems, - skipCount: this._skipCount, - rootFolderId: id - }) - .subscribe(val => { - this.folderNodeId = id; - this.loadPage(val); - this.dataLoaded.emit(null); - resolve(true); - }, - error => { - reject(error); - }); - } else { - resolve(false); - } - }); - - } - setFilter(filter: RowFilter) { this.filter = filter; - - if (this.filter && this.folderNodeId) { - this.loadById(this.folderNodeId); - } } setImageResolver(resolver: ImageResolver) { @@ -263,9 +188,8 @@ export class ShareDataTableAdapter implements DataTableAdapter, PaginationProvid } } - private loadPage(page: NodePaging) { + public loadPage(page: NodePaging) { this.page = page; - this.resetPagination(); let rows = []; @@ -293,15 +217,6 @@ export class ShareDataTableAdapter implements DataTableAdapter, PaginationProvid } } } - - let pagination = page.list.pagination; - if (pagination) { - this._count = pagination.count; - this._hasMoreItems = pagination.hasMoreItems; - this._maxItems = pagination.maxItems; - this._skipCount = pagination.skipCount; - this._totalItems = pagination.totalItems; - } } this.rows = rows; @@ -310,14 +225,6 @@ export class ShareDataTableAdapter implements DataTableAdapter, PaginationProvid getImagePath(id: string): any { return `${this.basePath}/assets/images/${id}`; } - - private resetPagination() { - this._count = 0; - this._hasMoreItems = false; - this._totalItems = 0; - this._skipCount = 0; - this._maxItems = this.DEFAULT_PAGE_SIZE; - } } export class ShareDataRow implements DataRow { diff --git a/ng2-components/ng2-alfresco-documentlist/src/services/document-list.service.ts b/ng2-components/ng2-alfresco-documentlist/src/services/document-list.service.ts index f2b4254184..04841f8345 100644 --- a/ng2-components/ng2-alfresco-documentlist/src/services/document-list.service.ts +++ b/ng2-components/ng2-alfresco-documentlist/src/services/document-list.service.ts @@ -124,7 +124,6 @@ export class DocumentListService { include: ['path', 'properties'] }; - // see https://github.com/Alfresco/alfresco-js-api/issues/140 let nodes: any = this.apiService.getInstance().nodes; return nodes.getNodeInfo(nodeId, opts); } diff --git a/ng2-components/ng2-alfresco-login/karma-test-shim.js b/ng2-components/ng2-alfresco-login/karma-test-shim.js index b922a90bce..6aa9dd62c7 100644 --- a/ng2-components/ng2-alfresco-login/karma-test-shim.js +++ b/ng2-components/ng2-alfresco-login/karma-test-shim.js @@ -1,7 +1,14 @@ // Tun on full stack traces in errors to help debugging Error.stackTraceLimit = Infinity; -// jasmine.DEFAULT_TIMEOUT_INTERVAL = 1000; +jasmine.DEFAULT_TIMEOUT_INTERVAL = 100000; + +window.componentHandler = { + upgradeAllRegistered: function () { + }, + upgradeElement: function () { + } +}; __karma__.loaded = function() {}; diff --git a/ng2-components/ng2-alfresco-search/README.md b/ng2-components/ng2-alfresco-search/README.md index b35fec0c29..7023fc91c0 100644 --- a/ng2-components/ng2-alfresco-search/README.md +++ b/ng2-components/ng2-alfresco-search/README.md @@ -89,6 +89,7 @@ Follow the 3 steps below: - ng2-alfresco-core - alfresco-js-api - ng2-alfresco-search + - ng2-alfresco-documentlist Please refer to the following example file: [systemjs.config.js](demo/systemjs .config.js) . @@ -165,7 +166,7 @@ platformBrowserDynamic().bootstrapModule(AppModule); | `searchTerm` | {string} | (optional) | "" | Search term to pre-populate the field with | | `inputType` | {string} | (optional) | "text" | Type of the input field to render, e.g. "search" or "text" (default) | | `expandable` | {boolean} | (optional) | true | Whether to use an expanding search control, if false then a regular input is used. | -| `autocomplet` | {boolean} | (optional) | true | Whether the browser should offer field auto-completion for the input field to the user. | +| `autocomplete` | {boolean} | (optional) | true | Whether the browser should offer field auto-completion for the input field to the user. | | `liveSearchEnabled` | {boolean} | (optional) | true | Whether find-as-you-type suggestions should be offered for matching content items. Set to false to disable. | | `liveSearchRoot` | {boolean} | (optional) | "-root-" | NodeRef or node name where the search should start. | | `liveSearchResultType` | {boolean} | (optional) | (none) | Node type to filter live search results by, e.g. 'cm:content'. | @@ -228,7 +229,7 @@ platformBrowserDynamic().bootstrapModule(AppModule); | Name | Description | | --- | --- | -| `navigate` | Emitted when a search result is clicked or double-clicked | +| `preview` | emitted when user acts upon files with either single or double click (depends on `navigation-mode`), recommended for Viewer components integration | | `resultsLoad` | Emitted when search results have fully loaded | #### Options diff --git a/ng2-components/ng2-alfresco-search/demo/i18n/en.json b/ng2-components/ng2-alfresco-search/demo/i18n/en.json deleted file mode 100644 index ff2576b3d3..0000000000 --- a/ng2-components/ng2-alfresco-search/demo/i18n/en.json +++ /dev/null @@ -1,4 +0,0 @@ -{ - "SEARCH": { - } -} diff --git a/ng2-components/ng2-alfresco-search/demo/package.json b/ng2-components/ng2-alfresco-search/demo/package.json index 8ceb942c6a..833d2a7347 100644 --- a/ng2-components/ng2-alfresco-search/demo/package.json +++ b/ng2-components/ng2-alfresco-search/demo/package.json @@ -70,6 +70,8 @@ "ng2-translate": "2.5.0", "alfresco-js-api": "^1.0.0", "ng2-alfresco-core": "1.0.0", + "ng2-alfresco-datatable": "1.0.0", + "ng2-alfresco-documentlist": "1.0.0", "ng2-alfresco-search": "^1.0.0" }, "devDependencies": { diff --git a/ng2-components/ng2-alfresco-search/demo/systemjs.config.js b/ng2-components/ng2-alfresco-search/demo/systemjs.config.js index a5ad11779e..13871f886d 100644 --- a/ng2-components/ng2-alfresco-search/demo/systemjs.config.js +++ b/ng2-components/ng2-alfresco-search/demo/systemjs.config.js @@ -26,6 +26,8 @@ 'ng2-translate': 'npm:ng2-translate', 'alfresco-js-api': 'npm:alfresco-js-api/dist', 'ng2-alfresco-core': 'npm:ng2-alfresco-core', + 'ng2-alfresco-documentlist': 'npm:ng2-alfresco-documentlist', + 'ng2-alfresco-datatable': 'npm:ng2-alfresco-datatable', 'ng2-alfresco-search': 'npm:ng2-alfresco-search' }, // packages tells the System loader how to load when no filename and/or no extension @@ -40,6 +42,8 @@ 'ng2-translate': { defaultExtension: 'js' }, 'alfresco-js-api': { main: './alfresco-js-api.js', defaultExtension: 'js'}, 'ng2-alfresco-core': { main: './index.js', defaultExtension: 'js'}, + 'ng2-alfresco-documentlist': { main: './index.js', defaultExtension: 'js'}, + 'ng2-alfresco-datatable': { main: './index.js', defaultExtension: 'js'}, 'ng2-alfresco-search': { main: './index.js', defaultExtension: 'js'} } }); diff --git a/ng2-components/ng2-alfresco-search/index.ts b/ng2-components/ng2-alfresco-search/index.ts index c2ce45856f..6ac815eb1d 100644 --- a/ng2-components/ng2-alfresco-search/index.ts +++ b/ng2-components/ng2-alfresco-search/index.ts @@ -18,12 +18,12 @@ import { NgModule, ModuleWithProviders } from '@angular/core'; import { FormsModule, ReactiveFormsModule } from '@angular/forms'; import { CoreModule } from 'ng2-alfresco-core'; - import { AlfrescoSearchService } from './src/services/alfresco-search.service'; import { AlfrescoThumbnailService } from './src/services/alfresco-thumbnail.service'; import { AlfrescoSearchComponent } from './src/components/alfresco-search.component'; import { AlfrescoSearchControlComponent } from './src/components/alfresco-search-control.component'; import { AlfrescoSearchAutocompleteComponent } from './src/components/alfresco-search-autocomplete.component'; +import { DocumentListModule } from 'ng2-alfresco-documentlist'; // services export * from './src/services/alfresco-search.service'; @@ -45,6 +45,7 @@ export const ALFRESCO_SEARCH_PROVIDERS: [any] = [ @NgModule({ imports: [ + DocumentListModule.forRoot(), CoreModule, FormsModule, ReactiveFormsModule diff --git a/ng2-components/ng2-alfresco-search/karma-test-shim.js b/ng2-components/ng2-alfresco-search/karma-test-shim.js index b922a90bce..b48288e490 100644 --- a/ng2-components/ng2-alfresco-search/karma-test-shim.js +++ b/ng2-components/ng2-alfresco-search/karma-test-shim.js @@ -1,7 +1,14 @@ // Tun on full stack traces in errors to help debugging Error.stackTraceLimit = Infinity; -// jasmine.DEFAULT_TIMEOUT_INTERVAL = 1000; +jasmine.DEFAULT_TIMEOUT_INTERVAL = 100000; + +window.componentHandler = { + upgradeAllRegistered: function () { + }, + upgradeElement: function () { + } +}; __karma__.loaded = function() {}; @@ -56,7 +63,9 @@ var map = { 'ng2-translate': 'npm:ng2-translate', 'alfresco-js-api': 'npm:alfresco-js-api/dist', - 'ng2-alfresco-core': 'npm:ng2-alfresco-core' + 'ng2-alfresco-core': 'npm:ng2-alfresco-core', + 'ng2-alfresco-datatable': 'npm:ng2-alfresco-datatable', + 'ng2-alfresco-documentlist': 'npm:ng2-alfresco-documentlist' }; var packages = { @@ -65,7 +74,9 @@ var packages = { 'ng2-translate': { defaultExtension: 'js' }, 'alfresco-js-api': { main: './alfresco-js-api.js', defaultExtension: 'js'}, - 'ng2-alfresco-core': { main: './index.js', defaultExtension: 'js'} + 'ng2-alfresco-core': { main: './index.js', defaultExtension: 'js'}, + 'ng2-alfresco-datatable': { main: './index.js', defaultExtension: 'js'}, + 'ng2-alfresco-documentlist': { main: './index.js', defaultExtension: 'js'} }; var config = { diff --git a/ng2-components/ng2-alfresco-search/karma.conf.js b/ng2-components/ng2-alfresco-search/karma.conf.js index 02c4b6c5d0..68345649f6 100644 --- a/ng2-components/ng2-alfresco-search/karma.conf.js +++ b/ng2-components/ng2-alfresco-search/karma.conf.js @@ -50,6 +50,12 @@ module.exports = function (config) { { pattern: 'node_modules/ng2-alfresco-core/src/**/*.js', included: false, served: true, watched: false }, { pattern: 'node_modules/ng2-alfresco-core/index.js', included: false, served: true, watched: false }, + { pattern: 'node_modules/ng2-alfresco-datatable/src/**/*.js', included: false, served: true, watched: false }, + { pattern: 'node_modules/ng2-alfresco-datatable/index.js', included: false, served: true, watched: false }, + + { pattern: 'node_modules/ng2-alfresco-documentlist/src/**/*.js', included: false, served: true, watched: false }, + { pattern: 'node_modules/ng2-alfresco-documentlist/index.js', included: false, served: true, watched: false }, + // paths to support debugging with source maps in dev tools {pattern: 'src/**/*.ts', included: false, watched: false}, {pattern: 'src/**/*.js.map', included: false, watched: false} diff --git a/ng2-components/ng2-alfresco-search/package.json b/ng2-components/ng2-alfresco-search/package.json index 30bdac0c8b..af3f60daa0 100644 --- a/ng2-components/ng2-alfresco-search/package.json +++ b/ng2-components/ng2-alfresco-search/package.json @@ -17,7 +17,7 @@ "posttest": "remap-istanbul -i coverage/report/coverage-final.json -o coverage/report -t html && remap-istanbul -i coverage/report/coverage-final.json -o coverage/report/coverage-final.json", "coverage": "npm run test && wsrv -o -p 9875 ./coverage/report", "prepublish": "npm run test", - "travis": "npm link ng2-alfresco-core", + "travis": "npm link ng2-alfresco-core ng2-alfresco-datatable ng2-alfresco-documentlist", "gulp": "gulp", "build.umd": "gulp build.prod --color --env-config prod --build-type prod", "reinstall": "npm cache clean && npm install" @@ -70,7 +70,9 @@ "zone.js": "^0.6.23", "ng2-translate": "2.5.0", "alfresco-js-api": "^1.0.0", - "ng2-alfresco-core": "1.0.0" + "ng2-alfresco-core": "1.0.0", + "ng2-alfresco-datatable": "1.0.0", + "ng2-alfresco-documentlist": "1.0.0" }, "devDependencies": { "@types/jasmine": "^2.2.33", diff --git a/ng2-components/ng2-alfresco-search/src/assets/images/document-list.empty-folder.png b/ng2-components/ng2-alfresco-search/src/assets/images/document-list.empty-folder.png deleted file mode 100644 index 7a23727b20404f7828a3d7cb109d9004ead9349c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 207036 zcmeFacUV)~@;{6mR8WrvG@vv^1Peuq^rm1zno3nb6r>XZgdRe~hKPWINKX)yhzN*4 zLJvxb)TlHekSJ&(gb*<#frKQ#aPGPHiuZi)xqrUT`{)DDv)OyCy=Kjt`OK`DS=*#D zwkLnzuxo>mkkIdzr!3A135mWH5)yF{T_?EH-P4pMB(y=w-`xC+rMda;GhrYf{~&K6 zp;Jkj57(b@AOo-%2wHbc%_{K;i*R)2ee%M=gFR|05eZN3$cmlVU3B~QRfSVeH=Hm} zS-Y*{n&|#ZTTX2~?{${jwjj-7csh1xPSVj^Eav$ZrLbschQQWCR7x-~R*zcEZuWXPO zdL#YG!ghn4kk5BlNQ~)k1DFHuWLyGNp zM!wm;cV~qWDizRXW=E8|It22hW}_D>m5(mu!Th`4H1*QA-sfa>o)amg>kAEbV6;1Q zPbIGxsyqC~b_!YPUpBQ?%1q?i)pd$jRnAy6jI3MND&ivS`cZWJs^quzdoD>_y6$)H z>O#R9RKmn=$54?g3GPl zqU+D@KB%~+>uC2qr7J=?M~Cn2{k&%B*q$?b?Kh*(?5g>F?6)uG$It9^SbN0G)U4pG z_t$mWBF0yh3eSK2ePP>)S68yv^|T&*p%%0b|7z}qY11~+>#h(${%^EIt4{%o+sD^= z+ycGY`%Q0I{G!>K?PAAIb`{s0_1Uk~y>Z8#JIChF8lH)HD(-OP+0LPxGv*V=Q;JDv z%|541(8@e?ppI#r@XW^08-A@hi@f! zwSM+IeYiH;sn@Yr)MrEW?GDdr7suxZhSy48OX&#i09;DD?D}Hj!=72i$Tf*=mLIi4 zo%GaYHfG)F>5%OxcF2Vwvb zb>YMpH_x1Ux+i?w+}0A&9*fIG2jAWKYIk?voYF(_yd>wOv?P$FV!Ciw{%7+$d#DPT z>HYUAGL%lqzfrjIyJm*W3ERCi<&pc1U0dFO4s5@(q2rdKQblyde8e7#!X=va>M2`nJ-5wsL)DE)(aenz8&bqn zMeT1gZZ_YLxUunu^i7Z`?)FCu2Md|wdJ6gq%Ev2iTc11YaQt9KcgftN;WL%zkbW+? z2m3MsRz1jqlHcEwjvu#3vH0z{*72U>>bFw|&W7)3IAjdJc*@jD{t0Y*#6fUNRWCbUN_zW#c^Wnx zrV-W=mi77KVT+xSccV`nD9+MQS68JeAe21zneN6sFMPJO@Lu`bqHh-WpZb+ZJ#l&d zp;)g{5&5~a#-`MA`jO_*QEUAROSi)i-_!3rJAJSFVrFFKPRCG3=OL9Lr6Fv<_9N1@ zS84-lAu}!!S`0mg*Ua@@FK$(xs5w#JDQn|0V4-z_o=v(3IML&ljC3qNQercV8n7J+ zeh+{9h!Xwv3Z;h9^xpCP??c8<@kq{boQwL!$`iEvEw@|p;!*KgJn7$l{|$At{*|%$ zoktm;Y}+=sjhx6masLE1Wlq{Y#W;nvizNlq(KzxcPdl$S_h8PgJg4l`oOiuVeH(f! z^1OPfeNnjxUH+xZp7#SnhbMKdfIWIWCwg)so>3G=hMwouoO|JU-tl~jtJd?jayyqa z{2Tm>pl3k%=)tkDpgd= zB5gO=x*?U2F}_~p^8N`mDaoj;>uO#VniWAK>qcU9?a|cW=D90TrYudCuiP%VxHL7p z4+DMld*mrbHzkIGZ@!vUHnOKunedFzMKE2u1Z{$LL*bkmPB5KHFJ=RofeWq+XqNf{ zYGqXV)~8PHSJOURqZ5Al`qZs9>5|uX z+rrvT=spYX9gp_P_*}ARBdN17*av7LnJTtr185V!{kx}QH9)~_??DC9s5NsN(<)UJ znXM)5zvKLNeOd1vj@ys4)lSMy_MgC8WLe-k4tsTbUc@%EJ9Vmc#B>aGl((<%Kr4Qf zcr9TNqtK*x5mXf9=`(pI-RE5J`{u0c6qM1P%L=*(y9@$8BG%S?eW*8fJaISY$ zzqTjFnHxMgS2uyKX1q*(Nu-L64P@@ks6OQTU78Ha4O<(wRPO~*WjVzs^K?k~1n4bJ z>KrE>+trv;ndOnrFTLs>LO0~nPGek0z7VOW5kDjWB##r49?`XO6#4F#c z4GT=ub?$Z`Ima7q15d_hf*oCJPe*iF&UP(i-~xpM*)6)9mPbx6budh@Y-Mm00o{Ur zRrBc4*@mhYV!@{abB%XI27Ie&n@;tilAZx#t#~^_l&HPQ@~>f1#*}yzIe)aCB%cX; z?)L;msyzyH9V6k3@mRxS2Dc0*3?L0EjTd0=mrCcFmY2S7ERx)yF0M{;bE|(4;s406 z6f&pD`hEpRf}eE0Ryj^#Ov~2I#534Okb%zZS+<%xx*?u-t0Sd9&qo&z${7!!=+1$f zfpLuytyc=EsnZ3iN9nIB9z~c-CIWA%6C>&%R5+#CbuZ=QtrNeUprzeRNgrBZoj62&bFM zA-)S0zONvkrafOzem_TmB(WIsy(SCLO>Dj9{CP1}=|VM|T%kVaAy=vR{JCP);`2%; zp__^_JJz=583^s)b301PA}+Hv*O${aWd;Kq@>>I2<^r>Y&iHOLYgH36+L{(7W9faP z>rF$zPA+gwkl&&&Z`*;hx7G#LzKLtkZSpuDbLcmrij7xs%bA&9ybc{gY~$aK6*7zZ zp6l%PyUJvt-TvqAfgR2KPXqDmyK`F)?pKpq5V(qBA*arRg@ge6R({u5o>TlL@FEZT zJGg|q*jO8Qfq-h4uYf$g)uMqRg4RMpM$ra>OQ3i7<=xT1pkS~;w6Ve;Eer(LE4S4Z zcK^{NJkVId#pcXzb5NM~?jvg2YKIj}HtgQL+bHackHI;M6MuFW{AH}*7aksBpspSj z6{QxXr3MP~RoBqh*H=HRsjjK1Drlh!jtLIG9IYA*-usW2{PR5)-e9jV|B!HhQ1I@R z_g?k{MT8qGD6926_jFg9ZIG{&F}0Z~xVC6_L@GL;f+?A58qm+>BNzH#p}F z1_ec|u)s0cKiovq=#L5geEZ)V`A08v5HKXn8w?h7Gdc2Smmlx_+}`Ei!*m=hX&YthpPW@+erN{TN?@F!N3M|#os5!;&QmRiRNJq9fQMyAKl#=+A9~j zhmF*KYV!jHD^JYByf24?!W=-LAd^4l0bKcWx0XO71#|eh#h;yx)K|3W2krWY>i%(8 zpt~j;1U>(W111|t7PB{mgv^92Esi=wubG|Lm@#`I^XWSsspWXD?Cd2zKj_-d*CETT zI+wPDECtLlMbA2N^@hmd5o*WZoU`oiEjUzt@O3|sAr0eWBfa*TT@_j*EF!vf_kX!~ z@w62OprV5%{#&De_SX|VRj9G;zrXMwZ65;enN=@*qZs`y0cKaPitGaa50si+@?RsS zZM6l{|G&^GAawmNLjQ&Xzc~6!Mt>>Of5pdN@bn8u|IUW~vP{2h{V%8FZ+wkkZr(3{ z^l$bezi{*yj{d^YUpV^TIPhy<|MxMSUpV>;M}Ohye?yU#E&s2uJG1I+Oi9tDk#<8`8r$tTK`F#pFjX8&jVqO$G(M3{aoH?Vy|T>884-%ir2A ztM`i+?!ur6u@t1mQ>%nQVvc&PyKAjIMk_iKig7^9x#D_>`nCviG?8s&_fzqYk-VVJ z2j{E8xUmWiFIJm%Z6(6^Tstw<3~MdWjhNAIB`xW)r(Zs8uEg-zq!k`Mno0LPeP{ok zBI-HIHMNFG%KIP>;?8WUwHH1?whKMf&rIT~!@+TOvs29ldV0lUIPbF4% z$3Ob>BrA|bdpEDn8Ha31NY`pvoJ`IGwJed4raK(wt@d59KK7=O)&ik-DI;XkOcW4TRP4N+n_w+m%i+&LSBKR;;d{NK0iFZZl8O^#n+Br&I&dh zuw7A3eF%`gm<~2`|0yTax>96?1di|dXU*3?>cUv!*{1jH(~pt&`PIl;b!S7s<0etF zOLKOwPh!Qr4VcUvo{AlLpPO|fa^@+V6P)q&UEaCVCi}NNij3W8i$ylD>^%s zZm+X1b-|~wU)?`KKH2j?XS&}mY${Mz3$vgzm2K(ef`LfejU<1m2MzE8^RPIm8$5u| zwyn_xkqqBQl@L=#5dpK43O`bpkSKPlFeW?i-0G=(^bon=Mpc!|aM83BZMbP~m?pIbbF`0BPWtGUnv#yHd zl8?Y+%~y$d<=MiHp)DqhACaFQ+KXwcwlhg-ywCQKq{FJ658u8+%pEvN`k=$8jdp#1 z(p!1jD^KR|Nb1o1y+8?97|9QiseB8$>;xwf^$m5o3N3C;N>Lp^kI~qrR}k3LX*EVx_8`JM09W5Zo8*5jPK!V7ko)<*j3L_C zBO$N=i;J>=N8(PmQgAJdb!FmyZ0J{XF>xs#0$jDQ-_GB={ea8%OWxA}-t{&_l*OMQ2 zk>?GH=?k%Av=gAE8C7j6_u>PG0T2kI{2%;D<6}yVO|^_yiQpPx^?f11^NjIk{{=N% zZ}lO0-$xM2kU})aOG&0YsDdWqwDlXO>h*rg-X9oyXhZaGeRqm0aI5F{Tm+R|kH2ys zsLbk8q?7W1qf|PcK4ZifuZQ3bnAE6B12l)Z#K{M7n$oHvV7{Ac6cszDi?w1-nLy#b z%BlLcMp`ZO@h54ux?UG11_%Ux3)P9%lIrg}S0IfAQ*D;KaQTh8I96}F<_M~4b_(t* zN2yCgGJR#{-jnK0Xf#I5Sf0tqusa&K)NL&bHgd+9Jfv1*=WO!9ps}yf!FgnI4zQlP zWK?bHbQ0fE4xQkHMRDUwW9P=;Ex3a#W3ZYN z&u|ml&iEv-T1NTK9!VlG!-*&_;4Gz~ojmDJ!~<}ypk_wK^uDpN;VNLYMmZ+sG6yQ5 zhhp@{Fwl;)njwTS#b}CZ;yo9e-#}w88|j8>&&B9&xdW26B3FjZqUkU60%3+*l$l^` z^GO5?`t<_D%bkyBOZXY1VN4fS&UdKVFei?7sCt4O_ncY*a*y?KOEt!nSJUko{a^{K z46?UnoXLC8Oq&;v7)RUSe)QWeMF^0#3@5}@UIk`lk{{G+P^ZQxd5W>UMNwj+1yRlA zYrg^TzBGE%Sx?Mcx13U>7qzb_{EMq7F?a&ObPcJbre?&w<&OCwZZ4Giifc5O%m-0S zB2B1{e1Y-KY7>qfS-M z9wQEOHOZp@+;GICz|tQ`D9J|6htu}p_3pls!4?|?25v%m>8;~LmQ}~{mdU2_Y>kNR zQS-h={fug3>{ztGT7n2MBU>4nA-)Amh_CPD(qbP78q{ANC zF%0e-WjE094~TNe@|ma2GyXkKV^P%L9{trTkR`cD=D%iqXOt$aLUYlr(J8{JZ&4v` zp2s#eQwz|dc*dyDqb7?RTLexIX)4XsM5SNO^<#MuL*NwY>cW<%+MXIKEF6@ z#E1-fRDY8RD8>j3eIBiaGlyLJ1(1k#rS=I&MYQmF99>#7i?HXBH>R~&6>VJE@2P@P z7dQ=X33@d`#*A=YBau5tVqy4PQ`IZ5Z?D$t^5^CG^XeN1Vrs8mY-TjmD~2#ks*|+p zJ+veYzVA!TS9iWzeeDY#W5h##vKtlOR|LU&`hy-dGbuzQBA%_TK|E5z9(RF87RD&^kWGiZtN>Asv!WQztdsK41$!bh;*X_`%L4;# zh}cGrO8FdJL?b~W;y)3W@%2gbIIg0|S#9w9#2dHuP8DF7SiyK96wGc)Q5;-Q+O z=O+)F^i}0>+!2wdFO_2YDl3LYCc7%C0^$8K6Auwf?`6v4FnjwlJELii?piFi?7{vq zYE)SmLp2M2pg$fGP^R~+tl4+Q)jOcF8HEOZ;dt;F9*Mk2DEt0Ey9ow4FjBQ2zLNvT zmFv41r@Z>ZK;;?3@J{?0bBsRM$JydCbG`(pr3!S^Ma`2erJYZRH%xR-=BaC)gv57C+5>BMz_@vJ>=p-XBxQ*- zpwn+@n|md_WlL>NPmN=JQtec`4zx72Vu!gaZo3t52M!g-Ql8U~EC+TLD(2QZtE7ws z?Zb>SqITzz-o=r3^-MnJP2&eCr&hUASvv%}st`HaFmz(oeG$>7V+nv;Rv~`#5OLWH zd2?NZj+dJ?qpBqe>P9h# zyMr$CD)5BMBx|mp?H42P6Lw%F8?RLvS2Yxjo8u4}%zA>1%CJe)^Eieb=2>9>A(ke- z2KpR6%eL*6c}nbXQqkh|WliSOY@q4{_C(!XR!_T&Y)ATWkivnInaaMZHxZ<{yGL=` z?YxuyJ1=(zNZUiDk}FsRLCXj24YfQ@2j!SJgGP|J4re1{kD^oF$>{nqts#t!({#Nx zq$1l8(VpS?yntJ`ovbrF=Nu(wGUU8Tmdtt*O+u@sF~@pdctJq7rfm$3@lK8O$l{qw zM2C}yVI{Z8ce8bUg|0fq%a&e0b@y___O>e8t4H&Frk%)`!5Ag(2}f3y#`yM#)2mib z{lM-7(!Mo2R^jp*;Y!y_fIQdFz&$a5VAnz5r-(c=`{$}g=zI9dkS;mZIn){awU8va z%(B!{^i(~RP4o=iI56ZaGvrs!#TNqfca@smH&0rvogq) zTC<}~1->Gjq#o~-3m>x>BmjT_o(T1+)l z`Fi0{((8pP@>njKafnl4BReoxx@hN)(6N(6x=oFaQ-9yhK-S&4JXy-^td4y-v(#eG zz(6PSB1;Gyxj?j@j~c*gT}L|q!`=D#O?RGr&pc3az_3NaV+4;cN$n>uO+&EVgG5qP zgl=bT#!zqN%vUgGtv$+xZ1|QtSsDk4bPrVPL*(bqtEEEoYl-weS~toOrL(Je?0Fo$ zmP0q*Pcj+tsY3OEyrAW&;#V7-@-p-0%bVe)TeuIuARw-|;ft(*M&B~87Dxwvsm9R| ziSn$7tLg`xqW03r^)Hb#;RUM<=bTyyoA_bwVxsaYC-ACJg7WUS$AHOgs)MMl#v7Ye zXHkpzV<6X!HLAhr!^D{6kE$x@OZcLBMbX}49QVdyPw*Ff8M-_&nM}u-nyT13lT~g< z!2lD<%^g#7=u2^ko0Btn9n@}TJ4ghGGJUbC=2Q#gYZF8QCP!6`jZ#gsGvzK^8dHGI z1AFY`XQDuLZz9A++2hr!b?CYlRcAi!WuNf!pmFGq9$y5MIZyOeMub4QNSM|IF?k_jQ=ksWMlbR7%w}ug!UR5%4)Mr+Sut~Z& z28@elxw&GyLD-0yhQTTqrG!WH$>9E)tgA=5_SZTS#~>Aoz1Uz!Uox+a9Z)BC|@F-n>yHEa|AlUi`Nd;vMVd2 z=OA)cP!#<1yRkE|gz8!FIIrA;thGJ>6XP@r%&*k~KPUUT#iC*ZX&uRuiA1CcD+ucu zSXsfozy(6*;^DRK1;$y#g;KIo#oP!s$v=KQ_DNXIAO`G;!!7rCcRQlkKW)XL1=~eA zoKxSb4UE~x%#Ag-@xs7lZpPP;pm(*$Cjr^64#AJm9c*U5Ye+?JRT$a8p}^jbT>W+Y zSj5HwRRhG>9d9N)=lHZe4phmSH8Rz3cBb|pi^W9|YN?()6rAn;`c%?-{lP>)o0Y>? zyXL#T3>m!A(GrNhgLBs!)z?`cw3BJbZuzq6K-D7WmdE*kVUC--gtM11bYl4aD@Dj4 z;(RvI0E9r$;fAEQ!tv|Qf7T?~S9m3JhfL`K;-PmMAst%yyZ9D3+X)fi8))!Fj#G!g z_LWZdH^#WdVNvXf4>dkTM9y zaPvDn@Ev;Xc>1X^L)e?)$#1jvEhuJk2N;w}x1R66#u$e}nL>HUslU(Vw+noiwdw1bxw@xfmnI^c}HJDnR5AjT)kkI;6y; z24g+GGxMuPmt;oxyAMZhQBz)(mP1k;A><)v;gdv)CE@8TGj3+)0(F6u!?Xv-v&W?R z^is}$vHCu(s*jAnj`{*I!N-Hy6@x^4JS?CrGH;|qpDF{coSP$SfDdIYU3_RUu=E5q z6UmIAwGbsnKDU!SE&zJz*o|R=J732?Kl-Hy=_C`bqeAiuHQVs^p_v z39q9zRv=M;T-QS2d@SHa8S>_5W+~la$!nynT58O94`e3jegm@sZKIh@eg=ZXKj$T0 zY%C{C2PO}zhN02f&FlJO_@b>z<~16BKnwd z?GURI-JW16mCchoG|*gbP90*g2QIpz_vsG$c+b!jy=**(Tc|tp1eW+<22pX7O!9nH z<&J^gcaymy4+tUy&6b;Ha+H*x|JA!!%U7ndiJUJCQD12Tdjp*y0m`b1MxM))||UKY%E z5jcA$-uSrZ1(reeKwBEch*cl&o$dtz`ewXS)Qo_cM#cKX!whKgQxgQeIfSX?b;v57 zemgAKDQ^MW-&tiD2PLquk?v2nSB>n?OwlG)X7VjP=vJ=!KE7 zs7M3m()chJ4pg5nX67EUKMBmQ9(|}@`ov_17iZy<3unNV+AlQ@2xRmcsSS&>eQZ@)oNdwIIhyuroR-tyNTi*D;P5}jU(7zvukGhMXJA1d8&@&a>}spk zhF(v)$`~pH68tGPmy*+66Gaea&f1fWAX!s2#G=q7O;usE-UI>hTduC@gE#MrzNrkN z&x{ikLPN**F&o>#Bfc{fMM-P^Ay?RGw`_}hjl*blXYN#p{0LkXE|XkIPYM*5obx;~ zg>QOOhr>>O9UFdx(^5aJ<98WTRkmDTZZHG#?gXdrNUe2s*P7FkoO@ph)@bT&_RQ90 zZU=R3VL%KKc|Cn}QfIr7%vIKUMcOzv?RjEAjL>1hm-05fWFbq=^H+68J5=P(r> zP{!fVs1In-d2J6WQ~P}@!c_=VRLT>&zwa2)1TxbUjUtlA-V{OcBviS5L_wp;mt^)-(7?!~U+-8l(u6tgF7c(rskVS^5oOh4kx$BqB+3dL5KqSd55`ZB5>v_b-#T4;wQU}l;+S!kFTF^Qomoq zcGW|mA>lAy(?HXZ7l1^Q#zGP54*@T%&U|f(uZf8JD$GZ@Mc7Kq(i#}E*%2*ifhNS- z7I;~2X_&+m;j$~tHflnt>(S$z{Z?aox+NX85siU{S@FT?D&OA};rga6J^ih7(fiE9 zE0-=znuF_ZWTq=M=vW>^HrWXnA`?~$ua9~*%VRfvDGlpzY^sg`HahYni3G#Q7HDKY zO)K8s2O?OS3Mx7Y4Pp8F&WvW|u}k`5=FVZCTg7)Z*T2p8Pt{J#RqiWizl(Z?12^N0 zi88q{;k{GmLZ2nBLNuP8AoRdLulGk*Nw;hA+CRSq@PiPl?S5MnvJoQ-F+91kEhFS@ zRdb-~_N?f)lc8Or%|lZwK`2Gy1M7iFK6vzk5bTY@;uA@h{5g-QZ+~Q&)+kMXRGWHV zJwQtr%iXx|y<5+)Oa-y|e96+78+Rr91&&DHg96tDHa{U>-(pg?v`ojzKlmKl>m#lq z_gyD_*|&EW){^wK@w_nh2*~aeC%j*MsyB}%D~+{$n4{aLjcw4uB=7U>i`I35ddR)U zfkW$0{vZ%*gpq42$e0WHbJq=jhNGJzN}oP?1AvF{3f~mp*L))?gmF~1gNPsA70oaE z=TklTDsmWWm8i?5JWo|pzw)hA!8Rd^UlAJA6Jf$2B2$wZHK{;O9f@u}m8(P23!Rf? zyPZ45F-Nn{7?0dD(}H*4FMb!SF*@AB zm!i1OVZjGE8S_SmM{mwuqTg$fE3<~m@}bh;<~lMY24OPWW8N3kG2XN1KTRplzZYB4q3kfgRjjk!20B6J;1G;ZP@o|C4qWR=sqy%NZ%B^;Bh8rfjX$?;7m+nCI)G(ldX&iRKtNzk)tLA=-Kb< z28Q;=j2dO5rH=UCY1Z9&Bz0f+g1cHwNi(Fcx&rMyygC?DY1@jq*=!J~y6s2*R48HJ z+6zyE_e3{JxfLDV_@+7GQ3vJxRvJ)_9+_Ja!LLG}Kc(Ix2v;TuLX)R&XH%k*yj?5k zGnMiKBaMUav^aGoZV{xxi|5W&72sn{df=ccp2PcBEzN>$4dhE1(&RzNi}w%BA^mv$ zeD4zX9wj6}Q4^N_e2IGx%^V!=&FT+S=BI*b;=G{<8+>~n7@!~3+agG(I3Qw!TXYL> z(fzD=kNBDVsW?ee^s@pkqeVT#%>Lyij5575XS!|K5;>y=C)sjqTq!PvilVc6#xaZ5(TFyS+9`?!n)wev}VsYC8Tbn+!75?FS^gt$}>92+&TUSbb2c2*;Rrw*PEnQlf6wZ6;I#P;et;cI?Y-gY+d2Ueav0tK|&l)6e~zy0;@@6v$; zz%~2@(cpvzptu?{84nG`{b!o&d-P*R2rtGyj@B?_SX#B_9 zW*d7{9nf!yuR~z3eR$iusye7}kOqX=-TRsW6cav~3oEs%WxYEoFAKnusQ^at+HaPH z2TDH;zK%?uBnnasea;@x2$#o|sq6vI#YFk|=oe2@IKi2v%PQmO4;K~8LVGu?Bywg3e?-ea(-bA~bb;HMKg>uX1ymNWHr)(0n(9f=?rIyF1ga*GxZ>sg9P zv4n8@mD{>a9%C|lp0NYa7RjE|5Qd=Ope>)hIF+`=axZzN(%MotC5Bi@`lOgEL%|+# zFC#L_VkRDrX45!liONe)L;I=%M^{oBiN<+cC+Q(PA)7SnV!hPK&F7<9;D=hoBb79O zoz>)BlzLOpv(bl9KY9&cq8Jjm+@(Rn5m)fEnepp6RFVlm`xE0j32|M=>ut z&GkRDRP^{JvtO%@rW5KtItjr7#*@pKVd|e0s+W~YJZVdDhB|VB@NZ@g*&rD0UrEM3 z(y>x{meM`UQ=|rApF%RF+r<3>D#M2Gysg)PacR(tvy9q#6=r9-zEKM!itPqd)-U$* zrg(Ud9fA?dHK{57Vtx{KUT$JDUV}3J&l@g6I|l3Ar*!DroE&p44A_ql zAxLV)vDI|oeI1?q^WZ(jG;i!Yz9AfFm^y^;CMM0yfN{MS8?hu-`}^jxL-3jD4~sQ6 z))Sx#8$N1YZAKYVJp!Z(eZ1M$*)xpqs_*z!8S6hao1qUxP3wk z*4_rFtrOhypFyu;00@t@A62r^w~doFsy;-2;C{*SkOL5v#V)ho6~&8ft`?*`pwQ_H z+^;r!5OLqTJ}o~=p3E$pu=Fe~XO747IYjyN-%z36M^GIZ5vk3gUgOEMK~&V!UPaH( z_belZFfzN4D0msc-!O4SyX4?lCOd37LsEs8+|nj>hxYRmVR8Cpcslf;`G)aLF;j zsj3&zQsdVm#AH;Z&`-x}0R_or*{(N&6B>{6Ex-BA*P&a3Bwry392v9*VF+1=cfCQg z)34nDhVCCezYzSYso6IWxkw4bj?J(aibZY%D3EwlIlNR_fgMb_0`OJ2!t%qL$aE2< zitfyivql{g3;;6_6E+cuN5|AHropTsQ)lXBP9J;P!n8c-m#=iWu*EqFf^&d<3BdS1 z^9_6fg7IS}>jy(U_&j=z7FU&74pJM)ng&l@^uX3UE=pI-ZCmOC+q0mlnLxR|s3*+8 zN|evCa#FDi-lrE*LPzbq?umKKCxG}%Zx?f5vj`%LAW4mPg}zauu$@e$kwHEeeTL{M zHpDb0s%aNOJc(`Va1tknZ!p2>!nHQn>cYl=L1jqhuFC#2;Lu2O3pS;r{X_MTz3T)m z`e2C{qhYm6ktK1@46JW;WEJEJB|tU?Nv6=;7v#P`EjK_F6tb zz}QW}k758^*WS4%;7rbqjP&0xJXZVk_$C!_U%d**sWvusj!MSwd$t|6adKaOudC^d zxga&(c$^`qM$lA!o291(5*szefM9~8wu_M zP~H+babA`~dKI^RSK`=AeJT>w`IP41^_E~nX~YkcCn>zUUrJ-$egYB+JuWCIZKNc3 zwPVxzURd=WD*8gv@#K2dBHPK1`n3~B^Ex=)HCv4kt~Hee6I|^9@T`lB>Nx5JVfYw0 zxmES^Lm>@(JN{TauI5tQOugqbYIpcWqvjn&CjH0gDt^u|oGmeVZ`w@7a!-&w$fSB= z2-$+x1yDOiLJ6(smhmRr1E~yaZh@|wcFPd>nYuf%|2p8abQ&AOKrA*o71Y{~CY3)< zr~HLvPem1F{jqixC29chWtKYySd{q=yPdHxp_nlt9Q`7F~-^$uk#Ge z>2NddYh>Eb2lbeIj%yNRNo$F2vo0QYjL|u5u9RsIPDh7PhAHg)iDFh|gs#d`9B#$qLh@Qb%RCn!dyk{^T zxUs4h?@4bzn*)gO734@KP)Skna_$@zVQ93>M<6tZjFSLh6EV>hrWr>>fQB#y;Gq>M_`6?f^ud)n z_y&T`lo2#P9>EN!m^%6 zxp7$-WO-5}^30i}T$8hm`c9s~7DVOwXm6>{-Yi0o5 zIxn-qGcLwdSISrpC9|wxhRTW}y(?wMCilU3WEgKSt9w~cwA-?XN88rY3|3ize8Cs* zz+;`VKl>}kgjIFWU&j@~Aqd~l#NoZrcu0Vk9s8didNg{lvJ4XfK((^0}agE7gm$f=7r{Fa}AtX z3uR0AMVt$$?0D_ z5~&nFdb-b+Qc5XfskDQ>bs+IUDG`Z6`e=d(Y#xWUrAv#e|BUd={-t%7mVDf|S9@Z7 z(hF@FJrS!GD>^Pg;H!AcVN`$8qd(XAxlF!v1p2411gN+dhHfoHP)Y=7(Br&Nvk=cq&;UP@>QaXdtf#oV2B>9 zp;Q;w^hZfh6TRP*d%n@vtZ-HQw(f!;Chlw)F1!k$|4Hcqu?M^9f>@ATy7$GV=+IO7 z2kw^y?i*?n6oDn`;^LO)v59m9f0=A|Ag=01%=m9-OQIWuo8NsI=Q->}m`)5Lf?}sq zbT@-?rhzLH5ZtK}{2H&GywUFhBJI3nERL=U0sX_LYTcOtROrjWUZj)@3g3NoS1P0T z=$D{-mcM6VnqnyB=wJeb)||%+8d#~4UL4mVn9wgIo}T*AC0mpfjKDuODZGm5e@@Bn zXyJ_qgu(ZCR}=Qv;x@#wgL|If>@?PR6Ljn+tp%iiKmZRW_?WQn>f(%Uj_zCc;}R`b zw@ULDO?7!ZTvpsq#h!mofFij_@!-b}@K!j@Tq&7KY|lv#IBh#^qh<%Bn4+1=`GRFl z%$qDwEEJD7$TFf2p0GArMZbrDexJXl{@lkwKF3-7Gz%V}*=?UnwcK1&_@j<|6A^(E z_(k&~XKt*nRr-^>fvwTcEH&-SPj3Hl#N8nW1QJ>Q;BoAa@A|73tiVFWxsSfiJ8KJ9 zS)IRF%s(K+?UW#Xd2_ep>T2gzga2!skOF~zSAfSYZ2qse{UDbidjwpPyyo!xU#;>_ z?{AIRASmkU50yCbzcjun*rdCOo;&i>OMXJce`xE-N>z#h)@Ja3X)Gx&Fb8{14gD~S zf6e{p3pb=7tw52{J-aG~^p`XUb{oH#{4f6hV)DO)r1h61|4XfY!NtF!{TE#P+o=El z7cQ1fnR7Lkxn;Jv=oDi)vs1_XPR1(MypZ_t>6_qN;9D*k%6OSwWv-=)9}`{Y6GX}C z^~e}>pbc3?cqmUAd;j3XFNydi5v%d$mqh%Mh+h)%FO#{-5;HA6(pV2{ zyZ+inkB18LX?!lG53}5Z2@;g2b1_y6u8V2>dDCEC8*Fh)&peGcN1M}o@=X3e?R=|^ z;=Kft66&<~omFH0Ny++CA6L%Nlk8yZ0TO~YjnEMsz8Cy=Y|A))lay}@v$hi0!edmb z&zo|Q{F*Kc@YNL8`~T@rp!3bv<+>7D9o1K@ahee;l-2sEoI7dxy@9C zetU}DQ15N5J7N41Sr$rpHLb^R_zxfD<8u+sxA~baxRa~how{|xH@*r^YG0xY!ib=i za8%z)5P9Rqz8f>O8a^gfFLmD3DTy~==2Ji_^LfN&5=n5b&owgrjRpAkf=4QQL;6JG z;9W9TY-3kW1g-@6NP?pa{O(h2+Iuy}ZflKXgDk+Crg~Rutzu@YusSP;1xZQD@DE1c zT7T<_1NRLz&X1zy#ut^IUH#b+3n>&(E#uebIQvhG_+xcG25);Y)k=f$IUPpyvA{~8 z33p+jGBQPfV-jPtb~U9p`^xPx{HL_Z`20jM^KbC3?7H(P%(W z_E-}mh)e3M1ZF*RFURND9mzrT+H3jF9;}CW744J|9Y_gZDbnp*36b|jwa^Rt2JB3m z>!WA{l3T66B?p_TXAy#kSo(N7UYWRGP}`dAhsO*&(v1o8Oq zaavi{RQ@8?RE;F#uXX$Idn0t~G{2MF)<3%0Uy zN?R?uP7+d&!k`YHfC=CmebBb-IMRM-Op>+sBW3Kkt=@d=b!M_PvtM3(1>u^N?E{f!$)T$4vUa9O!*l-&FFu>z1tte#Y0< zJu5q;+vQFNK@M|ONu7uCW=puq8-0AhohTV7T zUpL~XdqGQ0g71^`Kz$5Hs8>3y?e*l>07HfkQ$vSYMy51_?ncH(qwNso)vIqNQjsgb z+A^h!@jtbe^~WM6W`Ku>khmwy?rdR$Hc!10uJ3L;@Rij27OSCl^B9PTUCdEGsV9 zBRWDk^%0OXJqNLs+JZOpI>^xppE(cpCwT}%+w%3gn1X|s|3fWggt?{} zx=7W7mOniLOJvKgzdh6*bc|k&Gii(w9RE(U$yhWF1?Gp^4*KL@F5D9blJ*~F8S9>q z*_ql()g#ZP9k$a}ew-E^oRus1NJ1RF90UzKz`s3*1+?S|_W4h?9)|Dqn>F*w--YPZ zpx-%6PYI07$yw^m-^+H$qu^gPc`E0vmy5on5t&`Ka-x6V7W!KQcUrFc>;=ZBM0qvu zn1y#ICBc{IZ91bEuCa`(0FbQy0+5uq3DiaW(cDkQRd2Vjh&@7o&n3*a*Bg@$e5spE zdplEiD7F4pp{)gaugE};OcFj4x%;Ko2kTg`+|hnWh1E!~c4W~vwS?vMri-r>TJX)D zS&J*cm?yn z3;^$H2VRHATsC}z*OG@V&x=2SI=r1pq%wmSF#sw>||xoX5GFFfH=7Wwg<_3i1NXy06WB6PahW&Yi`R^KWA`=nkhew+D-G?ewlw|)O zU+)>#{ZWSqtO29&|Zm>e=J)k0pG!Ye0iV$hijRZoKB4ryuq_=>86vZIDgd)Wt z5E3a8=>igj5F&(t3GKew=bn2ve)rseJorPN^{zGNm~)OXCgBC-=#Z(ByJN1w_s5*z za&Ubd-v2P|XrU+#2L!jY+zPn1|FAN2!b^!IxO8k*v_ytGZ;8O-s{%-+YaVSw)V9CB z1pcbmV*Y^vfOGzK9cU!UUa)W@za_)>FrnOc{ z+1{bbI=G;<)N}>#lKi)2CT>V;dUc7jM$|@x{N#VY-gi;}AYQUcxA@~_J}`RLGat?& zY6V9+6jZ+J0tlH6v9lF`ozoMqg;6pAV&BhpqUvUu|WJ9Lxx>&0ba<;{OLv?`Ezoe>bi?_fD&f)`2l?`!U}k55AaE=(OX!{ zQg_HbaVVOgm%C|Uo^JGR*i16t_Q46$g5jM%{(DdZ7x1knqVAP){~1E$4|Fuyx`zIW z6uYE(W1B$;vxDa|=EU|IIDcW@n(E2)j>kpMMEitNr&_p`Fc1AM9}JRyh*Qu4my6WT z9UXeHiu*;f)=#fyqYBJPMoyZCXD+bHkXdV*+J%0!{fY3ANb-yw`j7us(nkY0Dbwz< zlK*k54zk6rCIUlq#|#FL;_8K2es!`PjKJ==QHmovWcAaTY!+4p;X`_RWR(E%knF7@ zJ0Kk=h=2S6)@%jW^CyyhRWYByE!#6E!mJ8%i}8+LNyPw604&u0-W}4}8M2%U#I_Zl zvxNdI2dX_Bt6uQU7Q%DzJqO3&ty7BoBiKg~Rxx^9CGc*-f37(2qt911{os1OexUxF zbMikr+i2^$tOUCw{cuK}_)^YvIU{~U@DeFe|2Dz;N?mRUZ_yDUunY$NsFb^AdgpG}Pez6Gl)z9S`>VlI;k>@GGdEgv3mT_Cze zD)iGz&gZ!hZAQplK1ua8;EdAU>IBTa{bK|#9U!09x5dBv69freeEn9maOXrP_gUVH z&p|s}drLhw4;Q%G%%JzI7yJj+r4G`EyQB4 zuN)IBtNDHX8#FPbwi+2oeanYuk&7ICDz6Q@MeZ_L$fJ-qB=rZk0HzzXg1b)S0zm@{40g!H4$u#F~b zbJ)V{azvWQIsV)FYKPoVLNln(*Gpv_K|^LjvCpUe&Hz#3VmmZ;7$zB(XaiBiBl)|R zPJ}WN6~InB(?wT)$#lFwrnF)C!8%t)J?k=A4D_8cPtkE;Q4S$TZy@Oqao1_hyL3YJP?)g4wklzIU5XuN z56^EmX#03uozJ5h3{dFb zPAD9-Z5v|D@MMG*YR{@K>8!iy`HR-CBz5S@a3lP$kkrsWvhQ_N;Nx zdu~kFEmzG8nb&f9ZzH`K1+Y>Zk?b`ULI$XD*DSKyexH8ndQ7CxI4qfNuN%Gw zKt|Y%uK2yvzP(_&sOXYB9aZ?`J-K3HY!^_n*p9i|hEWn3d%wl@pgj+A-&7w@R^|H` zw&lI&S+>`@)QVqti~l+hAYP!DBHta$9Ia`rdRT6@6f^ex3;KlT(J>3J5IP_`u!Exp z(rXqti8SOKIBidnpjBPdZ|;VkCU1keYD9A?CXoiDS{6ta2&)z?Kc+~gKO8yV&80Xp zVgMuZ8{!U)a5*=zDm;0OOullLaoYDH#8e?OW4!+uytsPhNHQVi!RQZfuivAD&b%)jGC0>I1isX2P zx9Je`!G*%$C)fe+;_&m?E`Z@v;_Hal54&)npA$NsFOOH6g?8ygA9Bq9tlK#ZcFb3* z@2lKx!B01;NpmfJzsSpx>6#*P!XfHDxAr^Jjv^g8UDzCETRh(m+m*^4Ro89B87-M` ze|7P(Cc5`l%VyK)inJixFpqgfx=VoLx0k4Sws#6KoN0|yEJN?32dOf0z}o<_mWx)7sPWafR6Ma%uA^XCrpm|Wo1KK! zo;&~3Fv8sNf>W23v zq0WyB%P6}?AbM@q0d(zbE$8xnqSnr%O)l4#C>>0kF1ER5KU^DS7|u{#P& z&Lfl0i8-IrOaS}v>~Q(?ir;`vQ+@k4(XhTlQ{QWg3gtc zOs?efFKUXl@I?B0PzRIAL~Kr45Em`G?n%-!9D)bkmXx~vc9S=3vLWih#oRH0HA9iB z>YDBR{!A|Yh`^)JbxHKN`auqAqYgVbqHbdyLh5MN5q2>+i{aPad*f@+s<(*nLX?Gh zT?WAXq=`FT)u2De6;dOO%Tc3!MJ8v4Ioo)aG_^vg<$1oI=%9N{k{zv3+3=Cq9qCOG z$}Pp>MudMZ$qnC9-(rWUvlSzb__o0MKeQXDA10s^`x52$)Z;pTkQvGxmvHXT(p-iI z#PiK@pb7S$m+{?)Yu$c5W*nZX^+&F1=Mz`b{{20&&%P$_tOlr^^RAxW>?w!b?}0YI z@EL;odYVg!gQI$g?b$PJ-&h=aJIKz*FEdj`GusM>t_<2Yj8}HzMUY&$qhtkR>lCOZ zA^}quO56(NJNh*_$#55WTx}a@Gw;5gLbc%Xab34M7FhGAH@j-z7*U4M%dQu?hvyoa z(0!VO{va5^+q@-H3wx*Y^Gx!+jtx!Pig2putc~V+p@vX8JSSk+=-N>U+puA|C;$~-6GQe;E>_5Lv zhAPTEIKe-Fi^INR^ft(&;PGV?pbdwvAkWlv zQvvLjjNb@?h2*y8D#boQ%OCgPpz=^h7BAMjv?yYp;({znfIs7>h@&vyQHhso3$*J? znv5P;gp$l;qt1Lg96xCxYc6VhAt6-r3`wBllKdC@(Z0R~^`dzMAvPT}d~K3a6{%gw zzN>c=ag^M&)q-xDwwNy45}wR%@*+PKf$5c*6&c$wa;?46UR>(S%kg?m@vx}QqgkKM+TAf;*4P92Muny~Y@874G=j>{S zbeii7qRCY`%896HodceOfxo>a-GW$kFd@41cG5RNOSN0fcpeD)X;*9Y>w}D zZGw>4Ebax~r5qoS>kBv+ruO|-(9sN~xZ6LNsy_O{Z2Em4-CJ2>7pG}qw~)NI@gTXb zDl3Nnv2W(&EN*5nQ%O44Q0T?X%$N^9JIn@lhkdbsKy%3xmAzo2n2tDp0&#MGIo&Ds zC9FrxF8l86A0Mhd`mgXFd-oSIar0g0JJNE^NAi-?kF!g-cXfi=5`s|Skq*zr^;4u0 zxM(Y!PH50nN@nB3t}4(vzig4R!&Kh1fk?|7-$^LSp-4cg4=xyB{M0OGjR#EmGIwsa zTy{`0;6h&E^pX-iOKUiib5V{F_iFHVU1QiC1|i5+JEa}3xCcyw8;0{-%aOfL?zCc- zfTmS)VO^%#UuAp451M8(bnD1e>*ZScD^JJhrOflw{E7(|$mUeh4nJ=G5u^^gpw{{^ zE%~f`?bzNi^J!kK>VBdh;Yh&f3<;=rcdPo26&~k1j9NH0M)-aA9_3PnzzK-roQ;y* zk1(O}<>qBHtz{&#?TwD+J1`+5CUXeaiJdSHfs^#kBk*HI71>8!w888jR8a9|=1mFM z7pv8#2KUL^q=|-m`tz?&LkVHKggr#2;u{?TVo#}^*8SB}^B64N7cI;`s_oHYXDU*3 z5zkcH>kseb4;!A$Qgx4fT13@eN9jL zX_IYXsTNI+?P42L_qP{6!lz*%o?93g@AFo8ZLmIPODRs}%!dc*pK8yi7goi>`gg{8 zhmGuA3J@!e3u*9nn3@U3c=}7?FW%^wIjx1J)_3-!ZltM}pzJgD!M>yOSns)c$t&ZF z7)S^<_Kn;kha%xKQN1uhBy9ro-qRnHV7cQ(ZnuxCARf|uXLSM>PdY#68gx0+S9N=x zDi6X7)}mx4>rwrI8sv}629;rc9WoetzjY9tE=Y?|CVXSbB+^$~La9ZtMfAczkIPgx zqtkDp*A>~9J>#35h(6HH&`!C1oI2$1l zQeGFL*9clFdhKDRwc17c*L)Wk;o7tP2K8}1k}5THk(4lLiS-{;yHJ|gHYLN(Yn>g`;kYq|OvcOlY;5IkJ-Tkin5=eywf84+pD z%_6CQZp_y4s9X9Xq|8x_A@w5yqX(!PExja;DiiC{|5%!yFF&1 zPn-|MH|02qDr4UZKojnyozIg}6g@r?n`s~2i95XZ0CwxdKo&CG@4y}%eLp#7?MSFm zr-t+8B$W-4qI;Xxk$rv2k29<$o0{ic!$14H_Ydk_zMA|~t}V{oAnpz{e-&qVMQ~91 zp=Zg$WTW(Z`F`+W&UfDor7Yhr$_Y0VkLt za^4-S%u`ciXPcM&c7DjZ<46CGYg$g6S=+v%66Pqi3w)*qU*|6&g6`d4t9`&ZlXT0l zS;Q`xFdUY!WR^25%{J(QLO9b{O`b-0ngWj<7rx>Ai>Csa8BW{x!bnH2SQl%JBN`G0 z%y&Gt7}s{*hhn>837ycfPdi)yTG_l#HJNt0I^+e6tCL&nLtO^d3FhN&*XC{n@oo^^ zFo0{DnZYTq)8UvVQJh*Odn*mE`9i&`WDpm}l#`8Ekj6DQdO>+BrL784z~r@GDp9Kn zXGmLiOB~Uq6;xipHUDHHg@{CGulIai0wQ!o3ii%7EK6J)_PJbnoN64pWA2ELL;|lq*C(W6sQbHW_73T!l#lK) z5(NuJaxFES`Ms}$JHTqPJLkuJ3BpY6S$SWpJ#lIByUw3QO^alv;1J&&cX(a{5(8H| zHkZ7Xv9&g)Y-TJvbPxL>RBmr5VWFpRZXWdIG`1+f1~Y-Be++Q^&7@a^wUl!~i*s5r z#Sr&YGd=+e(zWiGFIB}WZn3q zP>i>>x{8r?CFH|r>PDdh0S`N7cW{96eo&4Xw`$CG@X1{aB0*zF+Z%z*(QrEvp znKr3t@|6!kD2@JKjWoEAN8Mm3Ci6UrD{xmC)P4&o>4%}J3)?xwfJMsE=O@nDNWIT5;F~uYUUU!z~1yZh!W3qQpS3tDTZTuSF>7IxO5*XFj8H zE{kCyg5#^^!#Cd{2+VOSE{Wg#oLGV6Q&X3E!Q$NoBq!q4+ttt3o8#xwu5g%VFURqQTJvqR;KV6 ziEFe+LF2PU60V9Nyxx<5G!~oM} zcZb!Ryd13|on$*_Z!NIG|BT-S6|~a$MzqAXM9Y87MJ5a(*v*X?G0q=NTXr@CxjY6lJu za~9+450`;@??j$6jkUMed>fcNBAgiLm74~O$ZWH#AL;VYM%e%+FGoYI0NZP!mb3G>eP{mc*Uy5(5*p+f7ch3L|<99=-^M`iBrFY$zg zvYv&Sl}Su}O%i#FlNnRP*{WyiCu+gR4)qvYNl)HfuTaO+uW3IPqRb3AvIv2WYmWH? z_o70yiqQ!}rU@{}ro4}AK;q9!CeFe;Sq;tJu&g!rYXgiXWbe!-PIWA#cfoFk$yGky z&46zii&+ege-Jee!NrUmlollQa#`#l@ZK~DzBi072^Y6i2*y)bj%%+!^DAh=M&)t8 zd5eQ#!_uVVBoINqP{B!%+I^T>F=tLNg>+tP;=WMr{6K88R^?n|O?lgzvfMxL?}CT= zQ=qo8<+#)l6;EhFpDygq3-~^Uf$9r@Sd{%$G*x>4v46}x`%z6kVk7nzMwjPpEKJg2 zTWO|Yy>41e0%`TRbhd&i$5cmBv`F>M8HyQPdIb~aR|J+L3bmq|Jqvrxskxg?+ZlIa z8+x(Eu+s@L^Y17b`JC9@o729QLA`t>@`T@7J+VpY?Yf~%39O#g!E^Et!ZgpHBR~Xl zQ>LA!h$>Oud5`~%#<9$<*;)xFOWWGi1~O{xG1Lt_yA7K-$+r^NZ&B)NFD1}XY8|aI)zo+&Wvwl_X3$qy(yYankxelGnE(QwhX8M9eSd@{$56Ety+M(SP|St)a>GEA#VTokfMYc0rWdPvS*5OoWE(HF6BW zV^pNOa)0ui2tJs;*M|0jMBdzwVu46aG=BC?PwA9_mXN&307)=ufUb_Z<3W87e78hS z{iyZyS@!5|-pAPXYi;6l6i_Kr$FLhi5@wess(1UCb=aj3wVfi5KsDb=nV~K9Rxz{r{Qj_jD};i z3#xo8^5ko5&KhrhzShQ@>V)C$)nw121fA(=^WVItn?3P{t}B+?h_zCLtj|+g)ps6D z*FxlB{Hm6<)p3Z7xPjo${EoZ#iq8{M{6n*iGUihTvL3HMWCOxP5(D9b{?oJ(1NTVR zkenyN^j$X|G=<=R?L5!VWF1aC3hY?)&?fn5-(}cH;j# zy8XXnN>0LG=8H-lyr9Rki?<<+vYvFFMMc9X!!TvD(wrcfk|#_VPA{ZD*X<6$1Abk# zeizoH$3UW~hNI}Kmr`ZSU;SK^TM*fFJ1cof!7UaFFlB@AF+Iz%P|KWmV4fZ*n>9w3 zheo}cA;K35EZFee1r~Yu(pUpS$Hq`KUo{;6Qzg^&?g2Hk? zv(zTN1=2e-=Bn*1?RX)p>XMB8uA--lCsZNJFO+DbM16|fcWhqA!{Paj>YnC?`wy9O z!tJ0`lqg4dfU+i^@aBXy)np3!7fy1wDF+OekI?Mk8!>uHx%j+Wlfse=c>9jtoFoVZQpwy>6=-`0> zxZ*1QIyvl4E730m?!n@nlIk-6<&&V&J$(tDjkrS>6s%bt8XJJC9@La{iJWf3T>^T&Qpcs+vNYb zuURY#3&TvH%_dswceNKww{Szfk5(FR;Ca!=H@N}j4x~!Ij0K$Pk|*WkXZ1)k7(VOX z!hb8F1_X;f(yUUZ_utlILdz z5)J{JN3z)&(3U}l<`N^sUgo5NKF^WNi?Oe_&P8e@hC5sC%wIYC_e+IJ9(S%cU2`En z!gys6KV32uS4!*6l6bCGNbV)~)>F5Z=m2fX>)&vuTlhZn7P6AUe0+vjdrXD3sfM&z zl4m#8(;yHYHbzx#WAvNOr9P$Tbru2j3iT3o@hH4PB05jzhME1T{=dha@|5B|om!TC zAq+n)p>Rx{=+Ae?`~?6TYJHp$^>Q~z#F?8MAx}7|Fy~3MQWWjKjB*fN4a%FZh2Tvc zNK5aIRLd%IjJ+Wj<(p_}*#7rNY31uq{5pU!YXDQs7KTa&5uhY)(FE^Hz&e>&?0E(Y7}N4IrP zn)JrSk>csw`7-^%5K6ZeRPK7^`k z#WTr=*aks{#Cc7#7Vk05p%WA|ltYjt;8-8%MZ7znh`_G!v6dd5Idtrb{hrmP8G$j8 zR+kzRx;>VT83!+Ua3C{XV^;^k8_l!{7~wK|I%OeoOPj9V-ynD>zUtrlxk1!}s#}e6 zkH6kVzl*_V@Ksb#3zoQyw!2~9Xk6HA?UfawB?f$TmgMHY)Nh$U0`I^rGnm=w86kgk zCHkem>>2q~kCzNy|IdJgb*=c=Vk39g>}-z4STH~|5rb#h?lj!>gya#<-|3$D0*AQx z;$VylGDTJ16fwe{@M3sXi>jc?Bfa|37QyCpDtdfvj(e|Eu`s#;y?IuC(cXWDxYN!^ zaqmU^G|;>X?gtZsfo56X%H^@AmYQUasK%N<##j`lG|bC0a78Dq%RhDI3Kw3^O_W_o046r3z~6M$<)dc$0$Fx7SW^_pDIO z%ijeC)EfQ~8I+zbOi*lfDXBYOp>Tv2gzw*^mC3+9Ln4}Sr=Y*ID8iMA%_X60s)V>P zpCugx4mM8SnV{|mFaLinxC6O=U03o8y(2yWdat*zb)2n2zT8HiX<>JDoU=>jt3O*) z-z7qdI}ya!yp!6}V03PRKIKa+Zt2!ix;nR^xfFbgQkhHLMs3%&`>p0xEpL^c7z53u zTH0AdCiR+$$1!79w-j@JKN@1O75Z6Rfo<#~BF*C7&hs8;re;#MwLxn~vnE5~&ge0N zU+7TBdLd1(9BJT$XMzD@b6*0FK@0G-(nORJZkCYKuRSEiU_OZQ3srBFQIXF*tI&kt zN2bkq#*HcLOIPEI*@42RY8LpVbEy|UZ)y+?gq>}Lq2JL>Wi+>uEn6!5^1j#85D4@p z(I|xaAJnnfkEahDOcuG|oc<5!hcL073Rx&+{DbKHr@om}0BuE>xOcx6wK`?7yVLFeL8uoH?{$DKf&iSh(huPJi21 zleit*$gPOGKn0A2sb%P=}Y*$khVRweR0!p#yZ0=3JiR58GE zZPMkbM_8*d9RsaHJ$4G^1=C_yglxwB80z!J((SO#*a^%p?#wBvQA0cME zav-{UegjsrJHg-+;e56#0f_i)$sod%IwEPz}OG4Qe{QkwAkq})04%JvDMcxqW4)8 zW6Av7m9apdEXJ+9Zc@`iCuOQimQe0Sc1ao6k`+uY0B#S0*q{=6ofZ*{mMSMxgL~^` z3E(dkpAaOC-Uq0C80q68K#EfrDM9@YQn!(~?k&lH@wkZmmHH2-^G8N``<6u|G<0fo z+3phLPYB-)b)4Xg!dGY_lcF-6jJX!hCo}oX{o~$a2FER1F@unPWkzD$q9h$+VrR)f z?ryR~Ugi&km8bZ>vbq3>jZv2~LtLi~w1cwN#(Nf6011m$;A9a6t7s`S!||jqxQTx` zTp`#1@aa~-L`tss0>SJdCtz8Xn09W`&}D^SE@-Uw@1gjdAx2j78#zOo&ucoKCoJTuXzZbM?fw8^hob(cH)B9(Lbb>ByV1&Alglq!|@7xL#lFKtx|KHQD|9!1K zo&t%#9d(;!Z5MRBAmHov;AA$LZ5!y=`NZMn1od6hcXJ4<1#Z+pdx)N+Z|(xxMV?2l zS_`u_>1QI4;w0vb^4syBuWgmKN32Lq`!%^}=k5BBYGA5Gb8z#F+>K(t5 z%^;0>ngbq*ebpo0+&)v#9I0aRiG*Gy#)ZUE50<0ms|pbhXX9_z_3wuU8Qf>>b#%l! z6lZSAXfxC;^H`+BI04sNjn*@=Xbwg8kq|%2cRz=im{6UNFe1znVUlTTA?jygwptV@ zY8lGlN*LLDA;?VVBP(sDKwBUtj1ekcncjM1lIRBC-xIZw1tLs(U;XfY3<(4+ za3xUgbTrt{Q3>?Ca4fRt$G?PI2)BDD0j~nAbM!y6YMpnx7*KsalJ6)t(Xf!!yt6}6 zZL=nE&Wn$+wq5thDopuJ%ajGLxh)k@aa$G!7$@+TQVaGhxA<&W^9yo&|LZWdzva>W z2S%dk{A~$>87`*P(iav2y)X$?X)gPM<^P%S&C3av7T#P;1r_U`l?oJFlgSZ3TTn(A zc8m8zm#NAlaEC()Ep(ctpKKU=$>`rdnw?fr%sl&qJUZ53mBojLOQd<(?M<7Yg* z{lKJQ!v_l2-4a3YuV(xkxC_V&@UT&tpxOG|B36+2q$FkU8{{uJ&y$+kt}oy$Bbb*~ zbunSmg#^0;uex79Fx(vk&&zCtieVOQYAy%vP4hLllfzp>#u&HkRYHNrxr)ogZqO@B z*!9d}tzP(@TV~K(h+L}FXKI7iW>UAI+vl(r+1biTX|&0X{5Q)TvkMRYC=6(Pz*H#| z-XgF+f{GtJb5?h|&OM4yfy09^uY?c$!)dBp4{S=kRZDKkhMQz&a>V9!bGbv(=Thd1{Cr7+Lv=K#)cU9U@AeQ&nx$c?{XcX#L1%TFWi&v2T;EwMbkf>>Oq~YB z0Yy@r8`g^-(mA^+!A_Uj1}euTRliIoA87)5;bV_^t{GG#vt|P^Y}a+ums@)ygcTGLf1<8Vwj_cr0I-+2k}K7w{I@$kg!Ru44>^ zAAj35S_k&56XOp&-0j%Y(9tXu9=q{0bP7xtlUP-vi_ImtRA`ive}p9k+WR#o_9lMs z)1`enV}HqU+nnGgqt91d+owP%r#Z9#-ra0##3lznBy4cJbr9Uz_vQ#L?3LxzcFW2^IT?+>YI_iwAwc3X|}73IjP zy*{>A)J>~p(Z}?x{vfIR9}&d}NSv4VFN)yI(8aFct0$A(b|c0WBMNW)6$Yr)(_B^K zt{q$Ie)*B7W@;3=q)E5bS&%x(dtN{gtzp~<@V?GH^|ZxTr?_Eu+3q^5Wj>Wjq_q9g zF|ykVI2{&pD$FT!jUq)M-#BDR=ZRsUpOh|WtOPpe5s_3@m|vtK6&u=s-a+5-yS*9? zzuiydg=9~o&Ma&W_gf8hivl^+X;T0*$?yL>`6+Z`Ri~YfJv1E*)|_hJWq~N9KTZ*lGO1QPGRO_7BYK*;lNvCsqF}t$(G1MGyG>o^ho%*} zZsQ0ova<1AGkGoB8%G~mO(vn}K{CL!?-^GpR99oMC1f(aP5t&RK5;hRW-0WpW+3HV z=o`NOMor930FByuGM4st4fMVX0)nrQ&`)?pK+Oag2%J9f_<^vP#6Q1kE=O#Ie7<4} zbee*b0*s^hqC17-l7ZE$VrjO4Ire`1;jiKzT~4vnW1B?p{qViBv$~pD@vgjWSLX4V z9XcR?-CBZO9a6EJJiYbV46_(i0Q0jUy5LJzq8y<2gc?;hH_g**-T22@ar0FkJiP+p zh+hzy*OYCL7%{a zHwwn;$XfdL2hlvdfV4{s40z1Kq!8|MlY*xey}E^_{H`*vB0ood<5A(5&f)2jCG=Y) z`N`A$$Ra0RSIkaZsN#PHl%qTk*%82$TeXe(wL*oZM3vNy|6F4Vk5Y(WcAn5_MgV55 zs?*Go`qNjoB}wsqqC|x0t?Kb;wTRhage@ABk*TJC$9B4H8CHCXloTRl#fcrG6*2jw zfz{_1(`}~>?eos!6}*7A!ja87kc-Jf=v@u!tl-u|{i>!=Od2pu1Og*G>zZFSa?;Z=d^hr-(^b#a-i8 z(t|pwnU*%YHj;oMIf#*{i>Y9mK`cX*LW7qc?KCF)g=H}tojrJ?DGFE4wjNpO>}+t! z+FJ2%!~DycGOGtfl;e7e^SN`#Liw}b`dO|WR>lD_t+1~j8jp1Y%r?(YL--hMA>vC; zSMa0I)?Q!rH!3F{@MRqJe}7c*c)X>bB1+&JPIDX@FsRk%i^Vke4_JDB7(UJd!Bvq{ z%N>Q=7U;6QZR|4yR(RyNl8f6S>c7N_k8~C_Mth=9d0%TG_G7N3?jx2xuL{tD^*&AG zKJYU3=EJd5`p=kH)z(Tt744$3xiUGf)^<7kqmJem9^$aS2uU^keZ zx?6>>9cRfi^`!qP93z)A5+7~@YPAq2@v+os$klTjWpWXh2VMmrMz7e0I4|e=Pg&y> zEqk^V$okEqhx*;3mS-xC<=8vjYV`)xgMG4qZrdSxz}wWq%Wr*A8mk$CL^#`rY+ewU z7-Tk90`B@^wRE+E@w?#q2vEw<}( zA9t^UBPF=wMz%?#Y*sz<9S6JKCt&Nba5ed0`|Z4pTyEL>(S=h)4vLzTj&xS7Zc_zQ zEOpb#-ZIpgcgH|T_*2M|Tg*|4cS%0znH&Z=n75sp>>KU&@G^v;B~S27@0ln-Ngf!7 z8E9j6yxQavb;<2sb!5h^yu8+?NkV@N_Us(8u?OveA`&Vjzop*X9r?u);8>?`qt;9X ziYI!V5`YpgYXKjWv;Cvr_)(~1Z*6hLkgR+989ML#6YwG0v~snqY38uoQiW}Q_L$oU zgErFm$8_xfBzV@m4iJoo16kA@f{Ogv@_t3kL*y^Lr)!Kf*1!rh&FSkN{+Nh~dFmPU zsarJ2V>B+B^G2-HOLU|LR3U6thXiu`;lxf7kbM8dO;Ng(Qe}HKOj2fm#`1Jo^7a>S z{E61ekQmG zZ=F0($ItwgZVx_-I^=vdag|il-kgB-m1Hk#RPAiP?v(xo(uoUM`sbL#EBtTXW7lv)Bfe`8`X+dV0e%KXZG%LV(=s z6!P%MNja&{FML0bJ?vkbR`2l1V`~00)^$8kz*V+T`Q|7bCvo=6`C zK;C=|GNFTtV{Hj}wa7u4<9tQ-EIB(%Zpit@#bn_YN(LOZpgC=A?3Do&NtkV>SmhLd zUGm8h)|_l`uP$$LfeQLWZ)f3BBb`SIun=sQFGGH;^vvt&ft>Y1u^m@{kzjUNT2Q~G zV;+zksA)rC<@Art?qKG|xObRS{-~)FvtGmIvc$EygL^!u;$C#!*unaGzOq_)7tCf;d}N`wz=Iz=o6~JvgRX9RyLqvq zxhfb1g&Ws72pRS744t!u8t2)q~())0)W}MHRMew6ljmQi*%T=4pLXwd5MV#m0U2 z`uii6K;LVw0Br|1 z%>wl8zT;=$e@jG9Zs^_-dY$wIs|J>SF6{)2=9j04`hB&QtK1*_3(n4%$UoG2$jxbqeX)K=EXMGGbXf5QDasWz9 zB-dLMU(@Doh@L$>I>t+39|?k`8~(N>kaC(yevhxkf2z;SkHZF++l2R z+XKDP?3d0MKJLUVw8c4gcMSfdigt!pAg@kl!bP#!pTUK~v#tG#;|QP@dg!`3ExxxE zwnufc+hXZ>GUhiN);c#>YT5!uoV5#4@Xe*A3X%8j(2;Qifg;=ebTV`_%PwigM)r@h zmrea^K;P$VAjm%!!nO!lE>uW4^m-d4WytWp<8+7SOS}bDY)hjNX`fZEP7A+LZdYH; zWkm82lxP#_ngkvmv4HR4h~;}?0+3iwAXLFc9}4pW%fERXyH9Dta3P*EISh7#=oE^7 z!lBaKnlln(joy7UI9y-6JecXfa83-W*Y-E}J4~=lK+Lb6hmsG^>NsGgEbb9YaD9=g z>taaGajb|G*U-x*g4Z>RHg(5nVuq^^4_6oV0*&`xXXupXTPDAuS&&h8a6#MX^Uudm zum$Z*)Vg(g)`gO(*u?MFi|=VD*y4+|C!TBf!kp3*s;1MxAzys4MnHGc+ZL9#`smE5 zJfWeIOy%`Szl>1rxo+PP7X#?nLNfB$P9Vy@#CMp1Gyzo9?P^NW6r5A=lG#w3^d#f5 z9JD7GuLU*1ls3X_@jV8ulkv(8}Zae|rmJR(?lK^2gT1Z1#H@dSckWuCB&vcK=Nh@Qpf0 zjdz6{yd)o&Z&36k<;3g9lIA@@9rwSF;r)B(ZZu0P$(#KqBRZz}PuERj`rCXz{sq-P zO{u?#bo~sz`lTk4bM8=d*Gz8vsa9t^Z_{E3+eLZUK!LQou8~^enMllU+3NMm{16J(1}j5UBoHVq9Eu!h51DK`qzgI-cOP^)t=_ z(4|^A|AwTxN=5P(8sOJJr|}op&ct8DHidA|Rdx^0f5QE~#}3O_yDv7}o?wAhtDbP{ z*BZ>Ce;VshQ^X`^rvK1cCi=mSxl>}=ltq&NQ0Z8)neMgaAAe_;s`AHo%#{Q?9-oQH zz_Q8b3Hnf!+F@Pie8+XKDM_A-U;LUh#HT9sr!k-I`W83XO zRX$5F@NM((}8nzJI*`z5lp!#W&w)-S_?6&;5Mv z&s{n``e>}%Cigk{Ap<$=xR&WRK>7I6PfvZxKI256L{;$T(^d%6r24$|jMzN-U(15p zSu(bIH0q~Mp;zX@7|DV5s0@HEs@uQUeM$hekMjK0^F2U*NpQS^D)Uy#4%! z$y$+f0)}|{=cEph1@PK6zUCc$x3q5)jhSUI=Qwe0p}6;suHNdH}UruF8)*c5f>?1v-ryyo6m==3JdA;#(Gfd-Fxs`}Ndk~U?E@Q2mETxdKaw8T z;!$_An9>-va`LOJv~82E)~OF+o~kFOQr@juTHWvU4Yf>!&%SJ!8c}&~vSGw$&Ag}K zWrxY0eC-qmQ@QLt{3U<6icrJRSW$HOu1H{!UTkAb;w$?xt)H^}w^Ph)(jX0!th{PEYU1_JcdOQFUSngTtx z`F5&(IQE5}3@eG{cNaL{T_25lG!S{g1>Ja5(^1XVz1JrC*v9aBNuw(sN>r|$QeI8g z5}9ta&yZ=v4qC46v2RLBT2!|G;H5_VWdDNHoO^CGjkccXcuj?9InW_tY(Tx^j!5Ny z+vnG+K^2heTDSK8QcBgPEq*XPik#YWyw8|ll%QNI+1@?!PBr_?l!*7PG0OU90zmTk zgKMO;8}xv>$#Q&W@6~O0XXD!3LSs=F?+lRD#r5RiM+Wa9B5W!F4;fcSiGdH@FQO`x z{4(y0q5RkbebrBV{PX-53df$e87oSKdIPI3MUNwuuKK_UaGb~*I>aNx%ZfpvorG!Y zo|3n|WN6)dFLV8~Xj`|a{9LJAX7|lRtz^G@1#Ljio>RYRlCV)c`}#;?<{{y`2QDq% z3C*~br%db_xbatM@KjA|pu9H6cx!1%MbmQKX^Ii`4p6OJc{QkAmLl*pP^qKB3Tkk4 z9!sfCk&23D()&I()XT|K2c~zArT2mv5SV=}hkPaEVQ1D*3bjY^f!3K6Z%LI=HT&P? zhECgIsjBcHN52I5@@#;S?66DdMtP>y(`60&xbQh9XGy#DJ0G(;H=Eu~Dp_XW2x0jA z(Pnxv2NUd%pV7@g_LzuxS9q;P3a;DoB{t8j1YLWP_$7w=?A9f#BjZV7N5=cE3`(}7 z?8t6k8JXNU%65IXupwQ<=m&uIdTh-4qDVT zZxlQ|{9d>2GF=?lyaujqssUaDC4!`G<4`5<)(7AOl?3-T(|vDh_#N0qwzEn}cS>?< zHvnAZZR_L7yhIwQEc*PTUI8jrdJn@6l@&bkc<`d($--#6=Di|!-Cv|Me)NqQKUI3K z(6!+Gp3W@z#rxm60C5=2U94H;r8Kr^VgkI!(a}?k2r?gDy zr@0P(QVlXuPxML;I3KWl!r}L6e`2~{!l-i+^x;P~BUN9H47|f|X=KA!CYxy;c^vyW zw?jBWHkRA`gIz;9ig3~4_fr4k3swtbIj+46QD%-O>$(P6KRT5+V{+^1#S^u9D8ao3 zE!&f1lw9hlu^PAtoAiT>@-*&V4 zRtT1s?9!1_A@NiGu!={89^+!>EtzFj$r*5v8cM9zGt|`sN;8vPMfshg{BeVF8b@Py z3)?HmOO`=&334_=tS#oy^!LpWuaOQI@1N3$)Phb`JESbGoYHQ(8n*N!l_X}888cV5 zytX}NZp{%DcIiDYQL0Esb6CfbEjRY$VwC@>1JtSMv@YFpfgO8TGnAX=_v5I%L+`L& z)ddrtc=bTXQgY->Krbf#$b*89gJCk2zL9opFSDE1Vh`d2U|e_WW^>h?b{(d1I})X4 zDg-ZtkB{0-1g{Z3%dAdKCtJ~AiHkV|W2ZAoryqV?OHy}m+MhXU=YB${b6yqikgl$V z;?kKZRLs~dH;eT-v9EZMH%EErQMmPL`suoL%S4ot?iAw$e;xtq=l1f3=wDxtBrL1c zU()rhpcw6*8dBbS4E8%R$@giQ0&dr%UIR61U(d?$T(vZL+{)p`KB%iPZcf*3SN4ot zZ_Fe);N(~Kzt-;F8F?R;>0JNFI0jbAds-zy^pYEu&j^q04j?sMn%*SWDNQ^oYACij z##rZ3qKd1F*Q1ztXVr$KW9(Vlxp}y6eiAzcI6f4+x z*{s)X?UU?Gh=G-_fTz3D5tYbdKcOR9p0m}Goh#>Nkl}Z4g>z4r&GMOySnOK(!~WS2 z+#}-_0pC&snF-o0zZO5bkNri|#aWL$Rxfp^?9P3Yi>2yH8%F45Q%kB1k_ zWYKi!wH7N<*vcI=b^K&`Cu2V98l}9Ztr|E(mwxWO)I4?MOhs;k8cexH?^x#o)oWf^ zAD_CbJzh={%h3_dw_1sN1P?Srl&TKwoEQsqY`P@0?Mk=FzoH`k2SM`5ebnNCAKbEP1T#CNL7_zZ$8Q1B_fwjfMcz&}N0r~A z!tF9m`DI+r=0s;HwCs;(H@%ztD5R54Kht}u_qvF~skM#OO$LEi_`TQU`+)Wwi}&uXI!RgPkm8aM-OTBRj`V?bu;Cof_n&ZBv}i z=1$lw@>anYm~RFB`=zniJvJ0MtZxw3rFe1zW}7Ez-=`UFbXUnGk>_oeuuNCQ{;O&e z==~Zv(CHIh=vX!*fah}@b+3XYn9o62Hs<41p9Dh6p~`n=n>`BtW0leoQ!lemwo0Mw($I$mTmE&Y&;C}BNW^?xXB8_bBE8o{3of46&N-b+Pye*KV z?6O;a5Yke#ZxTs z`mH<2|G+J$T`8jmu*0u>F9y6NTd}Y0c{N0|>O<5m=xy4U-&$>?(w5(m4$Mrds9cfX zJAb|meGJ}LmaM)E+gZW)*!%cIrn-jL0H}o|keJwgb@n}*eTae?Hu&BnCA)#kmIKEv zrM4OzzevpJS0H6w+u}ysPkoJK)Ba-r@bugRmhj|!h)VI`ho+7_7fn}1zD8>Zb2P0P z`ne^orBRjO8l)h_8QR^&)V`zf4uWj$*WT=CQ}3xe3zdHVaI4`H0<|!abH~%?w@Sh{ zkaO&K-u1U8c=CN5dcz;{hsmaV6+wgMY||@-;BjaJee{}0Z)7t2ls7W zf3zhx?{D}xPAh9)we>FQ(ogUu0OQ(xfLVklI}P80G6k zjMUR))K&rcz6byr)o}QfC%*LA)?h1hI@}Mjs?@d5OX3z!pUQN9O>bvX-vVs%e%}g; zIQnMZip-Fe?NSBc;@5nve=uo3d{nXo1aWT_Sv=sUDI34B-`17}K;vHbeL_kC%mGgo zDZ3}443sv2s|o^8`ewcDX%wOo>YMdR)B6<4{d)}JH8v?49t?n@%>7#>1SY$50JG%F zH!R1oJqJ6F1RM!wbD%K+7&IovF#td_Dz?sUGvnXK%w$^Ioc}L+FMyk{L(i)QB6;qi$--9 zABp$Nj+#1k%=8l5Kdcf~KPbxa%Awm$3hHXhjdK*PzNp^uUUrddDcAD3uF%2cN9`Yj z*Snw%NvWx7^8)O5(bA%t-MOi5MraF4Wfyqjd7<}zc6jfPM@iDsUO4(uhR91TEu^Iq<) zL`6nM!pytcb<^Jj@~HNXh$)LIZ^jA#_D{{w?;olyK_F*I9M$mHzjY&-^=3WEY)m{q z|6(pqOwaRLlRUV8`Dz|9Gc*LsmV&bmg3*R?4VC;)QJDD3)j#qqs@(Y{9y(~(p7xyD zSS1h=M)T#Om3nDMAECVU$J^J=`?xj9rI+Cp5UX{BQRMmF+DHGCa{d0nb`#9jHMe=L zZ(Hf`mpBl(3mAlJEN2!}{7G(20Vdu$b@_qDx}A!+9_tx!S9u9b0^iebB`v047n3+5 z3hG-u=Fb`V&5sOa6tSdO^O>?>nRF236+Wn=c3d)bwyP54%Q+sv#8{O9DarV!&cjYW zSG^t#Wo4D8hwiD^Rov)F)GszKG087gIQ1q||1F*Ry>xRaGK?jq$op)?-R~>& zKck<^)ohX>?RVz1J?%O9a^_`N;*zO$b|25F-dEUoV@!K}a{(1;ljt?5EE0z5h8^uj z;m&PLXfP%e!cdwi5l+ZLg5Bhh_O_`6M2!ZlyCuUl=l<3~j$h^C$zNh-HcBdK(G=iwfTp(u6eZr2z_7%u1u4N5ka+*4REn5Syf?t$G^{+Mm=p z2d_;ff(l7-KTNcx5zrH}<+m@d~`@~3O)QrmCl(K0NfZe7qkZi1(HDCk$}@qp zm8|mM0U(7>6wi{fG}0Ivs=_NI*On`HD63c5ab6YNDL;&DlWMF7%!Wh?Adch7OYCWU zTBm_Ac9_|!XVTr~JHxeixLRZq^bWEpXO2c6QJ{BJIbIe0w{znV4)&}XeKQM-t+pB? zz`^r=iAgnEqO@;dZf8fG(|gkH&Z5^8gUHyTjh+c0MuJyDO6zvJ)L~*9 zVSO}u{AGbq3jB+1dMUWGyriH5*LrhT7mvI#iyl5o);p;X2F$GgYY^fvZ~aZ%cIH-y zKwF<1+>-@G+qN)GI9-`>+jYk6hgG+PhezryGa`$|E|Z1-or!O{Q;O2ma4ojM%eTQi zGH?-nGmx?!&>=B7GfGI8IEZb<7?3iqkhyaR@OcHjC-!tFM1-^B-Ph#3n?Jq@!^h5^ zrM%o_W!&5?^^xe&9cdOQ{=A4 zEGcSe|3bb0b$UX| zG2!fYR_Co)<@54PK>zEL|MnNtz#+fZ&g2OzSuv*H2%!G#p#9Lo_uqM%GY2E3=rLyL zK2rS(5Y7_R#8w;i-~C;=3XF2c;OJ>$Vg!yWw~gKq1jlDeAWUos$r-r>Nh;4Cn$>qR$? zgin=ScKeUX|Ec-vKR~Ms1dZ}r+F8nRAGCkPpcI|*?32bG>D zRs4!A9Uta8e*Cyd)P!y_eBEiy(Z_7sb@sLU)zNTAGuE7`DH+to|`hY*ZK0S2eOQQ4q2Us{mXNz>;Ze%seac0$2CfdB) zwo!zOo;8%#3_k^&m2WXaIWSKQGh3`Z*hCXETIcsI>Jl_pVo{aAqizN zWIPuhA&F10N;~@*r>?Z)?xqiATTQr%NKw}O7dIP3?`uuzWW@f2o2x3 zfuFp`YdyG=gU8Z%ta6iiR9@;Y3xQj_tK1|tGDr%Y-)c7kR7!-Mqw)u^>blGz=+Zku zhUYOQlb~bDIZvHeav8i1sv2YIJ~{D^3m0x>Rv4J5PTYY;ZHRx`%$o1g2V zpfCxs{58dAm*Hj6q!p{?K%0x{vNP&m0q%#&ChZOXDuL(ICue=063>J=TH6eG_oDm6 z^kJ#vFJk-3h|^5Ah9x|K;S23cc9UqkxK+k2vKm7H86R5>8`!?z8(g-vZZaVv%8)c> zP2J#4I>F{BIGYMtJQkg6*2|-5vfDHgul1XLd%5W&83n%x#CYnGvq#?3nZhwOjn&q`fXejpWn}6d5m@SW;nWNj3?2C-ktSf) z;kA7^D|n_KBn6o23b)CxawaF6y93c9I7)w`g&*SIT0d8Sx!2fm9-WX+&oSE*uioMM z2cyAHE89H-cDP<}#ADtDq@0_-04TY{`m+%OE0iu=bm$Ecjh0)E^ zfFp`WLX0w)@z~J!&KDCZ6X@o8@5*+fHa#o_z6+x z+}9dF@eSCRvPZyC@YGA_5^vwj4vk5&fSeY0#VZ=FkwH}`u`cO!4Lll-%1UmXOImR< zsezS^iYANOcic*UlV5N3SQny`p$B$}%UfrbhO3N1mer${9ONibPmIwqa;A*5?APL} zfWqOe-zXbUi|aeOD*$*LZ$q^}KTIvYO15^aze@Hs>3F;m-etm)K1zz~W?CgRlxly$ zghXBq1>Sfr#*`RpNq~>;vnb_{HtdsV01OMkEin&KVzA-85Yp*{AWzknENs@y2eeaX zs}o{^Mtw=<$>|c=yRQ`ytDWF|l%PRM|0}D;0zZ=R!hB@u1!59CZ>{~#j4r=%Ln|~R zu%fZ@Mp;H)r2);mIBtviDXqe6?8@8_Sghs*oSC22emsS%kJhl4N6a=$^FE}4a82oP`7r@upeBGho%=4UXIdn?->OqOLgteJHJ zyzplD8hh7GrioSCWZtTh1DG5P?xf^vWeWxK;DL24VIBKuhcoBN!u1Y3t;lckP}pM6 zH7OYXn~!h2d30rrSve**KS+hVDp_FS*i9|G9o#`Q_5 zs>x0@!!H-91?z5&OqO`&?avCtw>?nYBZC>|tD0;_U$^4w%P(OjDkU;mDjrzp6*EIl z?&!vqiZWQtrv?maHrA|cs8AqYhV@L|q7^RGuV!tX0$ho#WJqS^IK5zrAMRb5k4FtJ zuZC`};vo+4*A6qO@K$Q!qr}1aiWR?5;!PD7*VRD0fK%WIu_|zNovdzCQ9-OG-8@#i zQ%z-(6jC%cy6@oeiXcJVV-OUb$}E@UI}h=dA}VIGT6MZD$pXyDKN!I9{nHD`82Uav z@e3^2%U8GW^7b4&LdL`(etfT;HOu=bbs6Ey%h{KVq3M5uL)+Qq;0)X=Yg?`KN#-V1 zMH9K4wH{AkAd9l=F?S(Y3n})T2`*J<8$6eivrA|?6>Kf9r-Punl$L@MOsvBd;PX`* zcD={(H7R*8n3RxhWz`ssYs5KY%`YPx)ta)@8Ve(z=6-Jb_{?iq(B$d`L!v8s36C@J zJl}MJETMEN2I=uWZMIMOb$%2|*(rfPXrw?kMI|)BICJ)T*F~bc%_I&9I$3B&0%DV zU{_Mq;WuaJo^1Aa)CgWB)|1F@Mk<_Zl&glHTwuLY;}aZ!iaL{0H#K3xGB`Z(M111| zsw-{8yJ zsIKceej2vrWgW{QT}cJV705e@H?O%~JAZx(+QAud+M|i>U|i24_zG|$&j3MN6`OX& z;~z@#SMBx9k8GguC>eHLob<^6Ig3x^7a+i&b+fLN2^S(N3N#~z)v~Ki2G|tJLqX0W zEPv&D7gzbMGb@V142`td!0de;v(nk`d8(gXq1{QgeKC9Ei56gp<#>|fJcRF?G_#eN zl(k|-^QhFDxJkRVc%v*G_~|1r#`8OR;WLmMjS(h=*CvS@exa*=Hhs@ktsY1GRvS~x zpq(q!hn48@_pU@d61n*T20o=1W?z`@3xazcO>M%uTCIcQ*^}bG6 z$F26+sVmFB)+LsVsqN@5BUd!8m=fpFv*)z5tXei#2n@VJQa(M`x38mhW~g8k%+}w* zaU_NAO7^;$K7iM!ulugAg%s#}H~ONBT&bVxDotBTy~E`yUaeb2)+FY+$E!5?M2nd; z%nv~=9OJuJ=1BoN@5pb{tT)`!AnYwM@yIRKmEBS}9P*wdCguMkD;~tj=|4@q1YfDL z*74I4hcDy0t-f5qb8(6(Wp#XsfToyBe$2i@Ixb}}$t(;%m|)QmA;TGxABhh810>jL zjJd>m4E$1;7?e((oJk`+RTlBg3I_L>SZf`@%B6g=OMDd;HY?wxz;7XRRck-LikAGr z>8^kjM>ZsM!Oo$oWaS)hoZ;B8x#1Pxq1zVRTH(CuWx*BCRl&|adzPFD5dU1VvdQWh z0&po>qC=csGucF~XcTYYb&EFj5Uw^jiN_%RsfzPpZ6D;UN!CTJgWztHDv+CtfibR* z+>1<;$fM_%uix@3iyuhPt&QPSEkMgTTn{QVh9$f9NFYUoik6mwEeRmoTBj621$gFd z86t^M22;kuljx1FU$@FU23@EPtsB6i*9wE`6!fHx+L8y5OT=z84xZ*pdAXMUfnq_U zjQCnjg^(eitwvk2Tybbap>8%z-xR9A1BxqiwX(Hdbtlh3oDAu$v3d^JiupjZ8*rIz zi^Z7tPr1T^g)Sez_Jef4gnau( z`xHNwTGIMLOLV25TN4OuC?CapHpknI8vt|2iM?X=|Pw%gRSK6T*LW96;1S&)LU(~eslIuJEkIo z=(T3zMCJ)Xz+y=GGhVp}aH>S9Wc8VhA%5jaDe>30W-LiTFCbX8z7?oJO9k3BLn~Z3 z0FGu>XLiF6ZVaJKlW(=7%`tjf5*4|!qFs(16&88az?~W@kwnGL2>aU2sgSdpg`E*S zv({*$vIIG)MiB>ZeID44s%d_JC~ZGCom@6LY7jrP;ke}{Bb;=$i?D|tGz}F20;b*G z+hUN_+Mo^YZp*v?R&nsF_K(8R%SO9sf#Td*HJbOV7kj+);0a|!WfUfYPdUd&?d|1B z`J9K(0X{dJk2M3w+FGh!+MufVzwUdgN3`;gDry5*4V;>&_s1wDusXUXb2 zT@scejID){CbK(a0vs)?aI2tbs1U%BNeQZrNXj=?$@`PVJ^YkOJU%i&ocNs z?j7SsFq=$|1fu%%U{u`-xY0+dIB)(zge%04RRVn3q>*C;il*nUBvgextZAIGE~qbs zYwPj#O(D})IvdhlCfM}J19`G_e)^=kl8+Y{W{5(2@70SG%ZZ@|b=BD8cUn=Tn_n(_ zH+$Puj8v42l1b|GwYZD`ky=!2C<2*4tW95`l@t#fTLtYb(jj`Z)(6=E35w{j#15Nd zEsfMG;k(-6)5ce~C z%VwasO?GWxY3ZlqiE!4#@uop-0P2SlY7J1;XS(e;&Uxo!fzZ8Dn{d$>Ie4^q-qPMW z>w{ggTKrZ;5dkT#9&q;z*IUvbH@^b4R)fllNwF7JEt(EZW>Nu6w&Scono!}p`4*%K z7eSeDEBD~T>p^$UgrR)<@4w4PtmHk_H}dgZZ)wCI5Jo;pdG#hy`7yDI;@f$yYQ#G^ zlw!vKobI}LVsfn%q#+P4rKmRNox6f%WDtg7TZEYvw6Sq#wJJ8YP<2e|l&IR{^&eaS zW@sBT#?{Aa;}pue53D86c`1GBpwKHkW(7B7CF;jd-+0(vIa+Wh6>oD3`(R_d`&E3e zrBhJ){6Wp$1|%t74?fL%({TJU>%qyhHo_M2=Gra&k3y3{&V`}y;!3cr*QQ})%gvrz$>A;yZb4VKArTF%Wum_J%mzZL7+8rP?U$9Y;r+IfO zp~!+&xT3&!K|i*ve&{f}ahF!xt!44_0U)xl;Gy%PU}K2q<}yGy;1OxaspJxu(MYdr z#P2*r&X`al#nhHQAeVK>`KcX+J4D!XW;he(O~S5t!^FQjDJJDocnoE<4%M}oP2KuB zpAa-mEii-PX!&cM0lxSlFFAvZ?4CElA#c)LduT;wR2z+KQeb(gT4w_?JrG-|6E8>0 z*(x%&Y-{vMs3>3?5BaEWaVfb0+t}M=BO0oqTdb2c=-?chJ_jz7H^8*GH_Vt2MjPtX zX;&rc0CdVxbhgklZL!l~Is4BZh39Iyzn2-}+P{Ja*8VWY;sICMkqE4VC9aWO+-6-JeMt8j?pe8z6 z1V-uB`Nlx$s(#=MA4{@}dhsY}LhcA1uKXaNYV#%0ufqu900?DakT+fh7g$&f8cb=k zpy~0~HMma}MP(2^y|L&>b81ySLs&b~wsqFVm4JvWGW*oNturR{lKfdxGg~MELL${m zise4l3$*H*H_`Fu-#}~6WXGrv`~Fcyu17)0T*YE6*;%o({i^AU;3yu$o{w^gXZ=ND zBgBqc<UIGZn8gGRxKDKcq`i%uR zsmSW-Pmb;h9z45HPCDq*T~iz5V!WyYBd-A<5_c69VmX}O&FfjM&lu$k;wFC~sjp6f zf1tEx{?>BJt0@lIf)4NXv^>nSd6M=4mw@@`8V?bIySY`z5)JT&J-o+CZ8CR_+EnCj zkf5O9*4`yHVbih%QL)1D=S%WtQ}cb5+Sg}QXw3*DcED1%5oN z0G4XpoKrVUn}0OgSvGwm+VLBvQ7gRMo(WBI{SJyRv#7w7 zy`6?@!pm`=th2P*;Iq7zy<(#9!3BX(BVIU2f-^x3I38qzf|t%d%zA1+Z2jdz!=$Tt zS5{Uc2*!CnpPXA#h0vBc9ohoGiQ0L-bX9!JRkcbD?oi>jvtqE>_z1$IIm^Yxaxf2P zZzAffEAl1^3GJ|=J!B8aJbW(A>CZZ~85xF|T9LgsyqE!wJ=Y0$3u=o#&s7O9=m_ZRt7#1#Ci<<0lw`yYQO4MHO3V_6M`?wAu(C0P zfKR$bnR>h_Wc5Nzf>icWr6pdxs1oi`wZIH64dm17C-RE3huu}Sh?yl2c@Lqz1h&&E zDj%rRpOc+D{FeW$y!kqk&Hz}ubauA^L#U8lbU zsqG9Zq%e*VzBX5eM8CeSHtR2S`A;T)1pudlSXZ9T1c`7mKFJV3r#UsJA7p9c^Y>Jg zQ8{GAzUHt*B4IhnDBy(gUd-@$rSAya$@YAJW=*b1kzYfL)1Wn1==lNwTfvVfSB(X_ z(tx0I#rm|4#&D%vWP}x`WC8M^u1VMBrlVFZplE&BNsF*%Xt4JjL!(2!NxZ*mawO;m zup9OeGhk^VW;r_x~TlLlS1WTHXnQO73WZv-EE($xSuF#E6!318BfH&OE?byX(&t}YCC z`-PIQ8(qeuTvwT#Y*j=tZjpDH8*@&;MFB@vK|AR1FwUfo^M-SfaX1)k(awn2%b6xN z{hTE_;vgr+*}~y)dv}8lSV_-HaDV{=D{SJi07H;Iu$vzqz0jXG{)FQh0NgPl4&xh! zYmbF_rLFnwQ_v{&z&QrzMen;tX|GsQ==>-ohFyMN z@2i-thhgro65$|@*|{=GEs~`DZo2<0xO>_D5Jq_*H1vQm?9nu4)ruk~d%2K4l_7+d37Rgkct&U;C*N(uJO98u&cFAB04#QeeE(Sbw)db76a4$|SCQ2ZI;-QPYi}h2FSDn@y@s zBYW0NNHGkI_tEgx)d=p$zZk91i?CKEr*_73D%!vADRyC=Wp+1!s;w8=XMbS=Sw3VXZm2dJ{F=UQ=zJ^7n;N=knEwx)QkbYs`~7Kys=SH@TcW8AO1QK!0;{gtrWkW zX()tE$lyxGpH%h_44Zw?%WmL#(zDUqFrh!esP0^_W7Od8&sWUajNf4OCUr*4N6wB= z@Q9n~bvoY8HGyyqKi$c8;#KQ|x8(v{{8~QaoK@o~`J@m_LE66oJ?0*{#(CV0aea*_ zbHA)CGGV*FD$0`|Th~E?w5D3P&*$BTtZ`+Cg8paumUIQ!q;JIixwATW~R$9p(aJbb!sKC>W;*liJ}W_#@a0j zp{07H{vu_ZvXj;^3aenC@r5^BwqltNe zdMYihqXQLAta&@4dn0vo(8;J_J`8&WZr><8q?)SUx)nq-~@s3&@B$0=WpP(xJ}(9|T+J@Q{)WEr3FnTODiv1a20H<*QAEBWVuoUctfndE*HZVw?Cc%^VD`+)RZ z?6p8(5nb-qZ1FxB{!G0VAB2G7m%ogN5He%docj{Bq;yor;H21J@(p<~ict%%+jTT& z?WaFgGmAzsD;es=u#kgt#{DltLGcT4Hbt1p*2ez(9Ctd#Y>5nFvJ3jvO2jmCs` z9o{`KtHhdJB5F{+tp_bk|KaJXXK#{#{DgZiWVgtB7)y8w<`SFZvhWpQ>*dx&CTRUz zjzT?cDix3WwA`8%;lxbJCQEp%Y{;fJSB*zunyctpS_J6BKS!eyP0*xb&H1mO5UFFAH`UBAO|Z zIT~HIixk_6`M51*qGzanw@VqH$@WYBL9_6X;ps#A-%g=SuDlv=V#m@_o0JEUNf3Dq zz#!XpEXB*xU2=Z{A%z!-bbWlk5n0%)4|3L*nD*b+*YWG@Oiu7NW)jh!xNn7TfbEL3R|M!r$6ccnzcNY#^YP~BHyjA% z)aw~Or1Y(>(>AO2eYhCyamEHc&zD=%+vPm?SNdN-aQrSXUVV0v?f%`5EB{Z|C-+aE)6Yu>wB$zD;;&3l&{?4{$1VH4|ZFVtWE+8Re)8rg5nd0iZexVU|%N(Yzo(!8h zSr+E~OFyV);wSY@cL{f;{n6Rqvi@%9__{*x1nr}oc#CD zC9MI~vSmW|?9DE+VC{RApZxcOTO@E?mVHF2`qfCC-@>aRVEnIUj{g#R@-*At!@^yb ze{elN@GE2I6#;;-6EVV+uR7K@z0;F^p=V(j8^E&AuI+REl?HISz&1@^UC_8u6s<|Q z>9%)UZ2UjpQLPKwwQE-!I%rj(=qdnEd5qQi&*!#jNTObrP)bWOu(Kmm?6=J3HWTw* zjV03oQ*+Jlipj%Y829)U&XH;_d*(tuG5}H?55_A0FR$Iw^tddiJO~R6Mc?uqtGuX) z_b)URhH*ILpN3Q7$f_weGe&QD-~ZC4{u!ZPho)WyF>$<$u4%wV6+h1cJMmxUV_QGD zH75kN&G&zx6fh^X8 z=w{$LcM&%EORmL109M>QGv4Gl9P3*k@}spXO~*htTL&6nOMl<6C9^TmMxtf2LP0Ns z<7-2GC{8!}yQ+%DDsb-w?4T8=^ulg9z;##t@2${R+1BAE4Q|3+M703PA6vEu8~A z*wQH~4oC+3XWds!Y(u^f^hhRrqA>5^&Hq5m3y5!3}E_l6NC^b+m^=HB&W49RH65gl`;DI`c5F>Kw?~_tKW! zl5r4ts)bGqZ|umq&znvyRM1$iQpFRisg((-C}9`HbOc^kbe-U%n)XF{=znA_-1Us- z;A%WA!#jasTq^SlC3x~BqoIDU`hp5|B(?!B0CGC`w;YfE!Lb~(m%i%{12y>nq-Y$u zKlRMl2JWERUZMPqR zOc*fxvM^)4+Q$4#dtPQp?S@xlD8EelH4;lo;gAiZm9WD2&9B$TutGId`Any~PE+v$ z%DA~Ut&-nq_Q?0K*`AdqoECZbynNv-A{06wgnWbv;PlzIf~bZf1lQ&RGiF=ACstSr z0Dvl)#^(YzB!G07g25j%io>}MPfOi_i|MiGh1R4ZbF)LnJwo|eV=GmSfik)?XF3@@ zt>nR}1RMoI2n?8&C8ki}0^e_t!Ycp~OvWivH{M?a_JMXa+^Y5W{)J(v`={wZ8P>)8 zg>XR5JJDIW|B5-gUNA$*9bL#ZcG0AWp(||mR?b1SNXF%SF z@}^tn1d8#7k?+$A@RQO1mVu(*qzT?42Z$&pGy(&z~r>?NKtKEPQ0*LCt2Z(-q zzw1ior%Ne^SanX`LeRk_YS~>$r zx?<9fkk?o9Bx9Y>*2HN@qQ!FLS^1 z8jgE|G?>l!eYFb|Q}gDv%4!b30zA1Ka;{1}eXntFy4?mTx@WXT6{g}=Sd7YE5%i5> zCeSk962i4iWCUj>E%4GuPgW2V!)cN#giEU>jM;x6MxK!HZ0+YjrWM3Y=SK%~T$gS3 za>{sI$j1d6d&R1f@#F~S4&jftt)>D4j+$CIW`v$-nD@Nt2hnX%u3Xxiir2v7S~|V< zUE5bQ@oowK_em5eWJv3HnQGmTQrK;JAZg)g-RkI-#u)404*s*LTRMf)LaG(GHQx-p z{4q0#sSvx?fh_79fHR|g7szY@N;0bB_B#s<%yIahPTzYU4uNO*fZR~+$Rd8@j=+GW zIn*R9h0?y}u1@+v!vD21N(GwP0QC|gh*?;r^1+Hq4v@Sp-um5;Gxv~iZ=Pu>7gD#A z2ms@c@j>RPmrujT0gSq=L6I&q%Wh<;txlRwQtV-P#qO=4~oa^p(Rh z*{A9WM?$hfMd)x%2fmWys7uf!b|i4G9tl?BH*y7)Jsa>$_VeFKpZY)vg$#qh+MeTj z<6lAEoiu&_U^(UQ9*Nnltc81k(wTqDpjn6lY|v8wfWi;`UD37$UFJLqt?ufv#`iTw z3=##u;?j94UaiFGkGIv1z8SgX8i1H{m+l_E4Q#+2m7`R2%?Xo#w(=i*xNvV?e`d)D zfPBP*o?6V3;!X73!pd>{tTd}YE;hPPHoJnyt*0?8$@WS1wVL`M)O@VIUfw8}v!W~@ zq2>3bxXLo0)?0aUS3Bd>=;oQSjs&BbwWRE&{~%-lG_C)@v|ket&+}p?$0#kz{(|aWhB?!5iw}n09QQ?yy{0BvZ+ zq)h#{?Ymge#T(c6UA5Ap%cxqRB^d|ucWu`_Bz{oM^1i9>|LsS#Y7e$y1VT`xRas1F z6AK2lIX9S#Ki%wq!Ql^|IK3*c#+tIssjRN{MD#7ZMs{2 z$MlUy=3QL{t79=Lu`9|xO4H6fx_iF6&x&stA(AnLt=bCr|^(| zc)ekSyj8yqG^UvT|31n#`o|m&?vYa2e^wCiT?exb?$3WG+Ueud9O&d~)9ECy{1lmvYKH5{&yqz zf91>i!3EB>Yk2;`Ez`GnDCX?$J#coKIdXD+Oi9M^c)vUbs;7Cg7f9YHBb9T2*FIzr zv}d8&K_TxYiKFCL8ilE~Z9$T@>U?^0oJTyEZtZPB$(hpXX23m*5dELx{PsXT1K4|H zRK~BW`SiQp#i}u&1ql09@Ty(-hw2-<_e{9^^1_QB05+6M+dojA(}E`-G^3DT%#j4# z;a%|0xPYKV#cEu)=M<+nL_A@xHtBzI$o~X@ry>CTbDrA&n+k_`a3V3cF4V>huGZ^P zYIP}={UBjS5F6q!??f13ot3t5lu!tFGt37{w|GtUJ(yW-`zL{tMvgu$_DE+u_6m!< zRoA`_wZBHtbgjT;;)7hVTN3(Y*e%c;_%w?B|I=@-Ik4FC+Y-N6#vdYIiUy5CqU>Hb zNNR}fs6liF?)i2%W#GJPHM%ZRgGV&~#tt)dGqDXCq!XlnbS5qHIjfHz349{C1+%&( zA=w%oUtBR*P&}qd&RH*5CHz{?UoNz3><2M>&!Xs`Y!jGr5)?asop?69!2-m(=irBs z$ywhR)A#79(pl6gE|s|-f?WED+rPWdvw^2}I+=)BlqmnzZ7mF4G)dP1@5!1xYi zPzWXhJdW2z)B8+2Cf7gfyGqrA89nLre*?;(LrpQ&U!}0j<6^ek8i&J0g>75xI;OX@ zeld8ls)qm-ea!#+7h>|a=fS;>zLmfX9<{jsvCzkFN-r9;d~~UB?tuopw^i`FJ7H00 zVPfulo~>g=j}Ez6NQWxz;vZidGtwuGES%I(CW`jq$_i6<4wATUH$ZPfqkIS?WnJ$Vv`rl(tD`-VeUTxkC)$8_Qzi9z`i}z&;yK&5hr(`f<4dS>&ZnFtqW>&2@EHMvw^tL8d@1q8F~kAX;Ph_mP-tN?Hi zS-^yY%(;0o*aQ{jWQ~jo&~|VAbsDcr3aBuQ%{(nx_-U(FCXS$wB{Q%Q{5&;~g25Sg zp1EmFk;xf>DA9mU!3Hxjd(w>0AZV_!GxY}C1{vY4xk+>usHmPyG_YLm1ByKj`03Ys zLIxh~UE2=!QK-BaR0)AT@EY$BeCff}^(tzmFDg&woh~nR{;vb<(iWJQ z-O9PEZ1IQ;rA9QyP~!%n4S1+R3_+gj3u2L)(h4(NfpFht%sYZIQPB3)tj413L?|qo zM6ZrmWb*lO2=ezyJ?K@ILsUb%hE1ea`UFS9`VxwvFRQD>y_e_y9KjoUf2$bS%Pj;sLOmJ*>$Ic%H zm7N7#`e*zWb)o}+@W5huK_X)T%C3TY@nb z(jQ8ya;oA0wvVy_(psx?x3>Iqi(pUNY&$E}?)zdAh`rU9HjY|-8P!mU;8 z+@24di8GtN8sj##xp=Syjp1>w{(^depvfVWkE3=AM@7J(HPEEt)hTH(YiczEIGN#& zBqo~Ei{|ogc>V?(Hm(A}M9NO__D_3nn&81*P?Nk++ffxlaD#bBk|@FLoq=vhtCRKi zd@R%2&h<=e1iXJ+VD(irIRIH(#Q>*k;`Io{6@d5X9@asDLfNg#@<2k8iD&dFVmFwI zcZo)|OHPbitkW}2&|*O#BiS&?hqTT&VHvZiwHrMcltb%jAsx;QS8AqfUe}|&-VY#| zLK@Wyp6_$ac3@UVu$gmdDd4?G?F8DC*wj?o9ho?=C)Mvkj2|$EvS`>ZlTV+Mg%Kl| z8Eg`_XGkGG3eVS0|3nO3AArc!d^ZO26ZnnF#m)nBx%lIf;+a&>gl-#1#SyvV36B*d=j;@FHve35fYN55|MyJ0Z&D5=Gw<=#bx z2}*X!&ld`+zUM%6sBKq~kC~@#c_W+~#lc+S;yu4w)B9ax{1O{|d1jwc87gzYAB7TN zAHx{ftwN(H!9Gae>>0g^Htp!V4e}&ajTP2-Pr+ZDS8AfUT`^{RiL`zh7?45adTNKq z06Z9$8#$?a9kIaCUS6M|fXR9cQOSS@>r72F-|mNgoGO1V+pOjbLf|m4W*8zC8 z`7=g;I;#E?a(2X`PXVwg&|a+mXEM?Bo(Ja?d@BLl;#}IM+Sm?dZ1#HC^W7NQ9_wh` zE_5%ms1_~j046Fhp9-=RZYPvSAWd7v_T-l(S%Ww06V);M{$TWA_{ut9>wMsVH^WH0Uvz#omw50wXpDG?(x z>-`o6LPcXuPWiLaFyB@E{78)&a#(M}yYpDn7;mZQ(l^a%`0C6#w1b1-k<^dBu(~4_ z7(=-@w%gL~p9C_NE*gGIp?@*v?s!K|IS`Bpf|R>usvdgP^!i8<%XQ#DK4?~9)OlP# z1isPNvgRKffPfvti^mqa!j+ zJ#h(t!4a8P>q|-3nZGed0}iGbhoP`z9p>m-dzx)!b&4I$fsBff%#2A!)wNOPto;ZP zFjovy-lFsgP$|*cT-ylbrgYwu@+QsUbkIo{z4rb2r+mgIa0CxJWIhgoK#fbULKYz6 z(sZs~BSODZGiJbV&uDH?zs`Di-(T3p8Z0HipGJKXxi%GAh~z^>HYtW_R(G`o1Zit2 zXQ_JKfABME@kh$b-2a#dP#OQV14koAP-t;C1c=j$VeV*A7ZtS5mFO?ldXgi!7i#2_ zTyKKj#>>Ur zE_u6p638$bF=08qce%~={k2M+5gPb@ro^h=F8G#G4Vt6)7~T((GE=6AiR1JyZ**DP%-x6VZ1@iTM1`YP zKiV}S=7tdeti?27{wu*lvHu|XHuI8-v5_q&$*VYRJxRmXyc?GNuGdPEaY&CDkX=}= zU2%)U$CgV_V2G$M-IDoRY^^MP+_fXcv$xaxjdxSiZah@fe z+2E&Foq~ukwHc!~*ZR^67PNaz1Z-a!#DF(WztllALqdaS)g{d-LP(gC_GZ6O=A4Ox z9Sz(%C&Z~!?Bsm-5j!&HHj2#=GK))fmZ(~tuL36UhzYLleG+GK?m~5^XY`h}Upq*) zWbr446H@>j#J9z~UyJYMXLdJC#w@?j8^KO%h>|W5NFVcI z0F3NQO0E;*#@l^K25COke!$q1D-Jp3Fb-4q^b*Gl4rzu3fblJ2jCIw81$(`-I#0SL zh$$^83dBOAITX8SZrc;9K4pQUa;%l}psSb;;H5Oml04Rc zs7gUaCHNqsT0Kz8dCp)zo9H3!Fm#Ri^hI7NZzRhQ=`oa*8CJrv^IP0hAO1-JWTnxKa2s_q%K(ubV$ z{2BmTYcfDN?8d4~uUa=mQCYxM&8oe*=kEW%Psy9D#8KujPpqgSiw-J0sPCudn6FASS zUeRdAH&iJ4{oEXOqt`~cG5TQfxZ2wbGnVkU`B@$c%i9OG`ds3|bTAJcdV74R-Q$=) zk|!tyqsMp^WX3U00r_qKg_LN5PG}f6f?dO=%%EHQ^;y?a%J9^U5jUYKqXnySOMbNA0n1-3cR#{YzgWjqgVXXvdGlbzCLt$FG`C>i($cBKd-da|}PO4E;mcj}!1 zhTq-m0q8y@Ol`E}c+4H2MQ|=mxjPf+*FNk)t*-^)J$j)v0_o7@sUCDYa2#ra{iQk+ zrq9I$((p01nL_$w9V(7TkJGnR(MihfO%t12S(ykFR zlAGV9V82tLEtn@|iyqSW4k&$2V(Z52$2+La>uQ8BU>VRrOZyn7CV0UT#G@rziIMM@U${? zoNNxcTj0hmob!N=K%jZ%$Pkd^og!5r=PR5;MV@u&DcunJem;*961g-^3Y^SKZqW>- zp~XLxEbYernHVg-D5bX0*Atcr>xB6=vv3Z|VKLj~bJWf#fCGyWHJ}6CCV;<6&mkkN z1?{5(nwj;=Q6iUvX1uBuH9J;U180iJVChs6J=H^_U`P=FM6c$XFe}CA69Z9Na>sz- zg<1@6_4a)X(%ga8BlXq}Ga*miScR0RvyD*SMQ7+9!1Lb&JW z$(0~(DO!v-6k9u#P@D;1mOQXlOSNE@iCK^6;qE?wbq;HLKKm0T{vTgTmis}v*=GDC z!u38_*uE9tF}&NMgb12s8k;$4A*;xd%FIqjZVyXwZJ77NP#mx>=-(}!1R$<)se z4jze>Z+-A%{+24-r20zBG>{gzc5Y6t&U0Dxxqj{nQL_Ns);*iM z&`0^V_4E-Uo|*d5H4`uj12LU#=GZ51K>A1r*e5c|&ewaFm&RK)hnNr@5GKj5qh(^0 zcYI=d)daozt(Ka#x1&EHFPd!)9gQYbRdq$iXK7U8z=T%K5nRD)bqZ?rG`VJ}HfEz9 z3=QMjj@c>u;k;4$cnAS-69^`K8y7zodbb5;3l$`Ujsk3(MLwmbW1~msn$kb0^Z(G5 zf5#8j0B<$_)BPmy>y~x9Y*^TcoW*Vdd^C-O=&uR^#meBuH0EW8>*j-E>mAS-iq}A3 za&hhxn1}wjt*gRvJQ#=!iGmhpmXg&`h(G3$!eQroIJ%;N}-&11dZ;C5M z61s8*m+Hhzi#s+_G~@=o2bY4H#{B)AgZ$P&Wm!lfZ-3kB*mpJJXySExl9`N|+^`x5 zb4FQF(|(lqi?>k`lg_WshxN|%V^ZeHT^7f4AmLPu_Pp*)QE|CKO_aSR2Beq=dwEB? zA*P|4mK4%41||rii48gOF_aV=B)fH9g0PVj)>!Y`BEd6x6zGRX!dx5dl5NU%|I9po zJlH~Zc3!t9m;YqSfr8%Xl2#6|M;j{1^J{rN>aHN{wY^ufr?cm?wNJM@#?7ZnFX=a{Zg&mestlhsc8q3_YTj#cZ;)O?ErKU(z&Y+ z^R0QGAz{| z<(;Z)i!w{Uk=&3BS?{EN4%vYLP1kru&xYui?>R}n$lF3SqXdJ~A zN-&6A_hweNW>zbgjVYQdYRbW)N_)UwDYJ>!YxhTH@) zEVcrHH>&f&!ap_VCWBa`kcd7`$ar9o(h8}~g|Uv^V@`Jy(36<*Oe$v+kB&?6^)p0` z84l#O`65`(>Qb0ug^oLw4Qq>j)U3G;5|TOF@5ZDHvYwkB@hSe|K{{xG0!DCO4Vozj z0+B{_I4Hcz5do0GKp<+68`5oOdM&xx=gl9}W{@T(6ZCo}vnHR?p%LQL&+Qi`y8rH9 zw~GmFoEXxpK@v2WVYrPP{@h#nEO*kn-YEIYgtNj~%b!h1|Mi@iKRoA6OY8r7&RDP0 z*L#d`!O?wNARlH8bTamhQo);IIX}=n`AH1EWqx~ii?P{Zv{0S^u-wcOraJHZ+T;s~M{uN|eaZi<3j?JX9q*UHnzxYfb=k{+x~B_O8Z z1T-6SQXQQ_oNDXv5Itu((C5~%(z_R(1l&^(oy5uK7f-|ed`b4~I`KTx^stylb*{>R zL9!U_?&qzkTr5G*8%8NES3bw+vZaI5+%BJIbPacM#D?E>nDnuS+yD1IhAd-X^Sibj zS@@@Oy~%|qWnna%opy(v35m+Y&(G!*n@@p&%h`*9A3#Q`J>cx1inY&sW;>%XXward zm9u(a9=KJB!UC6z*Ox5)sHP*MBSimvBe^v9*}g}c5UQ4Kp?Tp9Ev9XP+s#6=!}M)4 zTN(Ydt@T9g=f=Gb6+Vr=v=;?Ru4y0XE9xKQ#R9!r`lN=yUp#ofcA}+OplZeQmBPfNdHV>Frg?tI>93caGy=gf3Wmbqh9(7Y|d#Okxj^%qb<09%wi zfGC0P7dz&#Xi;_IORl22wE}moHQt^fcvyDs%>%K4OGmJVudIjX(k!xIv~7=OF2@MK zrc>6L5RGb|ao$f8;hY>Fe@v2c=Oz#}2|Ey&PinhIBc0QH?f2HFLv9Z}YM>p+jRdFQ zZ?8aGN1Ddb^kzMjiB)U8P1qQ({N3^h$qnn^v4wK*PYCei!M`1#scfq$mG%F~*eM)- ztLMWasxIyxa@~5$4i#AxGN4|m1G$G3Oc!@@8)?j8({Anwo`jQZGDDYIKiYL>nwX&k z67jkU^xpEsJrZ7j!aoOzxFxLx(()Ktuue8^W7tfH>c=yukwyEc5jgi5|6N(Jp>h25 zw<2sF*hHfm5wX0ogyH)_maIlB@g2p+-9tFSt&qe&1|}xjrshB5t#+z8OeLDvjy3MD zgND*Uudqg?))9KQ3Wjt;+U?nDSZ}NkDFI`_S)lqS$+ z$PPo2Z)^Npzgks*mz%lv`Jdw`P49ScPj2)W;wq{U6Aj%Y(DVpF$8GY0O7*q}f!C@J z8j4$IDmvK5HfIJ+w(`MA5%yDX2UAQSJb7Ud8JD9xxcFB7@EpgF(=@?am(I%MZbuhA z4FGYhHBpv)2tn@Y3CIYklMk4IjV9f`#n8BLff2(fab3XerhT8*gUtfD}UEB6H>EI27Ozw=8V|7rdzQ%!@JMAW8=(-NG?M?W6m<^L@ z3-9U}IeHL%dAe;kDG1U(Qwur%?~xY(jSHwdzC2&>A9V*EdgZ)W;{lXRp+MTHqj=SA z!(#k3PT*#Xpzz%k6;<*xYPA8r(F?>dmaM65^BtZLqWIvQpvWiZPvw~}jCV$Zl?G=n zR9^;g&IEz?OI=&LeU|#)g$5~a$CV;q-+Aw_Yfup&&+|QR<+;*r%8HjBt0UH?DiK_1 znBRzm@pISt(pKjb1DTP;S3aj}%e+RY@{cb4{p{l3%NfVE>;LRXRsQqqKJDWPlNcnm ztm-VIZ*&(+Fl>f7w7p}`UcPCA9saxg)h%CmdbUVe-mV>hZQJLB!!7i3!WW`7hD_zo zs_WGa={h`rQgUT7>q!aJt3=$hI5i&bEq~32C{Jd(^CU4Kz+^(7BYuf<&b;CMQ>bh{ z;WGciM|*jz4#aLFZ|s`#>ZPH}y)_pEd3jO>SD#jr6Xu1tZm&5n{u0*TOIXX~`y8v}(L^m@wp(tU{Hb`ay^fNZ%*P3>QT)pj zva!=Xd;W-RBWD>cGQUw;4;^5 z@8miwJ30H(0W-a4+Y(!F)IAl;`ucmKp1~$}@@LD24qhmxyPpq1jlH)t%YWNu$tc}^ z&aW~1Ioig?BmRh|o6E6l<37IdT|!tR(hI%$CXGG}B7WX%Nf|rA5~cZLV-XvuI*Uhd+H z1#i+r#5HDYXN*K-4j&K6k+{^h_QzX~j^yP~xvt3jyf-~jPMm4k#}CUzPU15K_D*Z) z>E+>v-Up12nZ+^6SH0@z<@U+GeK7#)%t&^+J>K2&aP`tlvk;j;+=5|QVUgRi+leCm zzYnV(M+cK2uHWYEN6ak|krCM~?ypjrB~v)QQ+ju==1Co#QY5pdSS-v!6j0+AS>{BI zts6$gc4_gy*PPWlc?AhrXwzxlZNHiFGW~`9ze^|F1m)+AC6V-MzX$v-pEUa>o-al) z_R~9-3RNw^?4-zF>HY6+^NR}0DbBi+fH}b18*l{Vm*++gvUfX?lH!&^Px5 zSwW~9@bhx>mV5V@_SLvyGv-+jx3L?<_X_h;4&25$rX-;{zAz`y8`@8uXD&(=*2(Mc zxCG9^=~5?9CYJ6mQ=tlv-TM{qi4BSp(_^bl{GSQ0#@XJe@$SZhlJ*prPsv4L3edLivf?a|RJ_~Z8> zzsuMt7ArF_F$Fm)_nYbK+~2_$iRo@5y~wX-@1+AT_2|T7pPGCx_Rw}zoPU2_K@wH?P*$YSy{ES8YYu#3k!J zm3<;_(Wj{YCAznx<;2TWwRM*>Rv8;NCn+X4Q;3t&dIt=#B|YNh18#+REYPtkuZ!hg znjvhprP1q@&GQoDLo46WMREg?q`v(u6FEon7z@J^^UTSDc3vrb;y0z9&wO zQPA-g9D`*tPCIDQKm5yTW4kavf{P|&>>*>f24b@(`+YCh455jK3s*B0Q#!(hQZ1daMCh=CtpzX?DUFQRO^h zLg5PSXf8cnc7@)dY6rGD67z4%wMhaj*M=SbGUzuI^5-V*NC=h33J0F#v;KJT#s|rnVO|-t{#1|Hi%Mlr1?zY zBcpC|t_uCjkd{`Mz!@IS@_zJH0o_eHJ{<7AhfG_TFMg>8j9hc$U( zEe!56KRBsI`}xuQ%_DqU7Ftz=qOMa{YRxM%_!6~pQ6~>UvBFLldEp#Fy;^u9^0bF( z>6%19PfQ%8MC_|EzXTZl!VUg5R_$D+cQJ=S!@ZS`ekM>-G!zxAUjz$MxE)YAAMGGK z$QaaFveEf7$!yw>fJk%c zQ)do3MxR9-i0q#EG{ZQCFW5LmvvwU-G#abTMWZs5seHdlDa>!H2T0!>ky!BPr|5v~ zSMlx?TsAHI+J(6suNB#Pps8R`g#R2qa=FikRG`P8F4(S(Kh$;R*?&YIh%GAia`|l? z$FE9dOW4?3#0_I^m8Klvo8_)|RaHwjzAo}j0>(P033f#1Md(AH7jwQToO*HxHryxz}#3Z5|MReacySMc=44~3dtzR$=f#t0%{8J#Oo zhXXy#dw_9K+-tRkp1=0ClVBII-GiST@oKU?SxuRnR8w zb2|1Ubsr4#c;qmoDMjQ{6aO`T$u`?e?z4J!WG+3zvR8dRvprN2r1!2h_CBih(uT*k zzJnX*N{IW_*~c7xzAMpR}?crZKp4U4q_52Y(1@GMF}(*%8+KJX2Ix z+G!HGF{N{Ub!7jWi4+NCozI+ybnul4+O-nVZ@E1%>soM$j-S%?GaqpO%mN7hhAx{q+~;WvNP1n<}J0pNsjg znZ-{;-CbHdmLpEAJ5(0Negl!nr&eCQvyndWCHdmqA7N>xL~ zD?MR%Ii4-fH=-Zk)*(U`?XkLMqs+*}S^H(5$bIC+G=}2EjwLoNPi3tWEnplb4nLMm z*BQZUzuuhLGH-EkNpk~}~tT_!wz9fR!F=C#+7Zm_%Edc#k~{{WA~ za^T^`?!OZHKDUN$QtCgqygwSJk$ty3bi-1b2Sb^Av5_Npn?6^oH(^r9^P+%UmT-^m zeSGQ4Q!}3p# zI;@PyYqg*vSfE2D@sL-imco9w=cQo@^51Os4K=rrphn-DjdTHLju3ezgIV+~sjEj0 z!aF`_;BSr-z8piD&3~y)m(o1|qed^7KDi=RrOvO$C??f2&RxvyzQJt5!VZyHm~%wk z9_cK7qts7F{*^5OrI`!B<#hQ?lE1%=5SiW~xL-_Sh+FFXOyJOrAjmz-jg znztc&YpS1d(o;AMU8dEili^CaA0y8^>iCge`RehoT2HmZa>}GRxr0`nCc~_(apCmP zm{Ub4E~v<1TRwy{=2s`;F3KNPAnd4L8`gu4O7c5bwUVrZLTew-3&&|=*0)-6l&gNl z{T~JimIS~~Bq;vIrQgj{^wRxZYNGCuCygNA41E4dnKjqwi$uWTy?pORg5QQ{EBMjd z)-E*kn7A*g^1qTj5c{PN?|S0Yxp7EEtfAy{5ry^g^Im#LYG3d|^v3n*Qz6pECwLM# z(jz!WXPw*G_n#lneik81cBwpb^?s_B<^1w;%;1dgKH7p(?Y7lp^AJn&l=sp>R2@Ci z#au-!C(S22CGF!}RRcD1neG?Qzup!$c`I^jJZ5^+`b=LcNvy~tDdH(;=ug#&H=_+r zVd+&-w)mlpC#u5k@ei{j&tlFKPMjw#ckrtfUP?b7E1zIA_eFOXG+tv}Yc=%L>oTRA z5sDbqJ%bf}nwYn5afdE;X1Pr6PBU+R-V|;r{d~)=UvF<3o61agva1u^5>*mzI>)0p z-WHgG@7glob#_zIBX7*sY(t-N+AmKT4UaLYNoVk~=|D(yPKUg@~}DLO$8HDj9vjUF@g&!8}k=cbVX?B_$=;s4m#9 zgy;%1_%P(G4gY?po!;X$O0q5cT;2(w1kN=xt~wg>3ua8%Wt&)bMyD2Yx1Or4S4SgT zp3+Ngh~{w&udzS>gnO&V@>Od1&01-AUBno`o(pc)#=}K!OYd6Ju)j(-4V#Z%0H;sy zJ*y@fI@hL_^HeEyDjurs6i#)a>%w%CwY#MHJ6vNdFT^fBxO3RY(qnJZIbo}FNynM% zsfO7v;t#*R=_!?8*YnK6HIMjSOzne&LCyKs@lAyzwwIz~M{kPy#(T_K+Vor8{g~it zdnobiyOVnfMaYD0|IWhx{njDSW}C*w6T1&$rHj{aMdmioin0jbOi9kVbGdDaD;ady zttiN(^lkY;p4cF{F2+DZN0NO^)?gM_2BYe5Z5QTDj^CEd#iTy1xtMN`ue8Tn^wpz9 z6xO2A9CQVp-m#fgO0RYJTuiV~c|w}-F^at-+ZEl@ap|!a70L;V%%S?Jy#rv|IdTen z>G;EAdcUh?MI?LMV`?)h3CN0mZL$d{ua>ZvRDJ;F#nHmuUWb==j_2`J%$l^=NBcU9s?>vHbh1mizX+d1IJuTDVewi5zs-6?5MGNvy#xfj@dy-NHP5 zZ(zIvhg(N$43whML2Z4rId2r#aeo%cju~uP6DtRY3>DIXw|ei7u0IKf-t^BXj?fIR zcFFxnVSASlnl`kff_gl(OAjYhpA0i2QQPnHuyc7>C*%GAWWdENX$8O8e}S1Q znR8>fw$=xMiK@Tb$eD}x<5YC{d|513&iiw!szIBShBKZTW$nj#H%`pngIN_Nx#m0= zU~W+|Azyo_ ze^M27NV^F+_e>31({k#sr@GHw^$HZ5v<1{%RNjaUW{mIZ(+Y`)-vZ&<(+jPOG)tmL z9}3hS?cp;nsSQ1v6Z-DGC700X!3`sp#Ob%2@)0{T{d}plNZ^!6m#xhaPDeef zfCd@y9tINp?ENAqykfsZ|FQD}zJBEJBreJ;QPv^H_gmkK564Hsx+P6Op*J8BsY9>6 z&X_dV*G&zGxy&R6-JW@DETdsTU!n_PT!Wt3^Xqhv?T$h_C(5@t+TU z<^}#v@USAOI7FcaYf;5(Pl<(Vl+Hen(wl78=&Yy9ACFB(J$vS-Ml%)^&n99yjDsFi zS++=B*CSB>svZU$A5yh>^f&ixAanf~fcFk0J^nqT83^Q!T%L8V`Emm zU0vkiuvaj3SvLoXU7u872O@`G@J6;w4OwrU=7kF#8@QUrl8tq<(O1h@j55~OirT`R z){C4nGqJFQ6CD8g29Y|p%L+BMn=dno5XfIM-?&f~Utk#*7Y_l*ZG zlyK=Kr7VC!l~TNF_MlE7k_+DNp5r*I;Kb?Jgz=81U=S<6-3Gv)4rnr6Hxw%%D?=B?+G3WciCr} zvGLt+Zc;u}O04ad_)}kHaxh2R#_f*1P&;olddsP_zw^roGW1H}1)L7~Tka!z_wD|- zCC9^1c}HE$)bzP#85~Ru!3=m%IIBC*9(t-?Ys1C#&lOp!-C*cj(3*{l-bLhV)U0gq ziT&r}tW@fc2bsA4{aJKz)Y8jVW>mzf80H5Kkyb9I?kWXkgAhB0=TBkTkA_&=&;@X+ zKmkg(*DZeo(rL;U6MgDHN+H42_o1m)A@1Et2deSYB-2XwgR@-WJt6J~zCNQ{7B88< zd)n_^*<1q5eM~z(5UzAUg}X=)bXucD2s@@U2xC}jj3vta+YdHQdtvo9MKS3kIWdfc z(`-)0ROQWu`+uFSt4|y}9OS)MJM>G((v_4GUilaH?hnvW`?h$^jgw6KV=3dz^J=b* z%>wf8yXc09f{o8#^S33@u0cwIwYg`ObLD3x`=-bdcB$2RWH#m-`}ID%V)2^^Xq{lB z8{0f(xj`=f$|sWC8 zCFk4$V+9{HJtfgU3?PpkjugF!kLp2236WKjMKf8Fcr!7Um1t_yZ*`y69}FvX6_@h* zmtXin3F*F4=)Z87&%+&c;ci#GP^a(2w69A-h+}EcwYtiJ8-FaRJagIzEtd%V*xq65 zm1BM36XOpDRBZL>C_Xdlfxlg4bNVOgP9^@I67u(a75a3{YUDZ&QC2^;y@)bV#fVPg zlm`f}p2RaBJMWWE6;>wu_WPqbvk(o5+DD=G1>hRw(6d@-5guKtY@w_FROF(>$NQ9* zPKM*oEh&Xiw*dQbw~zRj51y3t*QsIiqYTHbWN41>N>hfcc#kxu5>lZB$UcJ*=?N3b zoUpRv=c__pJg>RE2-H44mz{8vdF}bi>Ag?yo;+>07Bd)xcJ5^h-^pVIl`<~BFF293 zH_b{kaP6u3V}|W__pwYhT6v%#U&|Q1-dyHk`1eQD&UX6(S-pDfZ7TX`pGU zfv5OEg9HS~|0* zRDX5iB(ETOxCRgS0hr(z){u?pW*uMzRF#MeBE)t4nXmU={`ea*apcQH=ALRJ$N(}(1d>t~Yy~(c_q?WFWF zph)+Vt3CWykn8@&{J%c--CcV7*O2VS<(8IqE3f?2L-1>}>5JL6(#?uR84GebGF#rp z@{bEITv>VALj86T&Y@r}>tE+>aK2K8xOeu(h1OPIK4*PZmCLLiT4;q$Ix&xg^SQyw~-_fjDo^JweiLv8!NV|la2Pklmi4}CMM z!%lnMAm5Noypdw$WkWoCq_v(FDJzGY2L&(QY(M^jwv$7X$8BVvVm~KKvUr z=<>M?Q1Xo{r603@W^+H-wXUxRr!L+QtiLA2AJ7$|ZTUhuNFZTWOvG&?-X(jo@`A>f z_bC^x?4KIM<;Y)E8+?;YOwado&^N%W9?1&{(_SXUKqd5#hqRfm5J9^jGr3uQKHtU2 zD!YdfRfA8l<-rcNagffd9`-!7K&{~@&ly2?hPpq$9k^os#Tj<{S^A*!X?&iscZJEP z%RYzC*gyurIBB?l*=iw<^Ceq1PcbodS%L>cH&Qs@{s&?30Nq~nz>>;M#{Ha^{o9Eb zjr~g0NiX(1PF5Q;csI}9_E^xfF=aEy)UG=W$X~iAnQ8`5t0f*JBInU+{vBhu*wm+? zTNm_`*Cw}IVh0G!>cRSTQh+k*LWXQ>M}Oa$|&M5cWAF1 zWT1~dc1<&@cT4y}8*E7WR>v8FsbCGN`xn0$rge&+3~h44r`n0^8G9h~5M3u@Ac~O_ z@e*^Z-*2*Vn=_?V*(^Y$gJ+l9f>O4d-bm0KU^M7Mtw!eqvU87NDaTVN$1qG|xmbpsmG}W=dMX1z43N2}tl!~6oyd<`)k^7Q)GynS5k9JgI-zgCrurv7jjbotuI~4!W0D%zn z05a0)9XX%gwd~dO7uc;DOIq@jFFD?K%r!x# z_`G=YP-FssoME=0jg!m=HHn9r?cABhQtnK`P-HguD!(4mvq-=%#~+`>TSIHcN-LPcAv$(VlzX^=0-MJh@Dt zX&vIyDZ$Gu={LpjYc5iH_vy+N-GcUph4%U4nj-NntH#b=ar7;E>jN-z@=HADinM%+ z0kg7e!krSGv|1s(-p}S-%D7WB>|;T=>eJ$}df47gC>(!p*Z$TukL0uW2+mtalEU`H ztY{UHgw^}B*3ofaKlWLx*D#T7hEv`-lPNn>v7GENnTWuF({V^mcMT@xe zVTaVg=OYzyYC6OqJ@b@v{{eb9VMneLce&H(F--r3L_o}$%=xLF-sQs3Hs$8FYKva! z`QP)i3pXC-(&W$8W0l2Py~GnFddHofqVuRjk>ub7yqZitrBXE&=kJ%$%Fu zeW4i`;F6$3nSra_`yOVVP4yBieDR0UgIR9EgY6d;vwxmdg)lH7%V&b4-?!9iU)ASW zzdL`5vN`7vGB_hv7dAROcF;Z`InaFY7F33E>Gq%>`t51w)9o=#^CPo4IpQLh<2$1v z6Zoamyiu?N@>QR=zpNS_x$0%Ifa0Jd_Mh}hFI6AV1^K>vvhw$)%BBnth8UA4$eCxE zM&@j7L*emf<;~RESwT0Gf-g&bHsMK9yBbuK7k_2&?Os&!>cxtAN9tqU!b^p3#RO$l zic9`DMl{IR4p(}fq}DF6z2XYm+`7F`uJ2xdiahERu+AJ<-1#K<53Hdml1+K z1y4#CJQ%%qW-G?pGY0Oo`uTGV{L#Kb(2*r`iJe%!1f=pqpCDKSHhQ#T5T^EKX=U%$ zRvv=b>O)z4w3Vi*P-*=*+vte_E^V2|3p75j{hC>KsXSI)pYLw;X+w>a-Xzdj|K3 zMtLLHBbhlX(Rkkc`|8YWlJ4(jVynp`d%M~9eL?&0_(Dl!ryz1!!q%G3$HV)OukhYu z|0iZsy=5}}74-5@j~wf$6PBif=W0*yS4Gn-ZSH-1I5^;)_DMaVIQJIGpjY>qs+*;$ zjGXxOL%W9Gm8cW;CF==HnoAUcdG+YObebU!ojhP}}5ScOT&oEL= zLdnZa^NAkhNY-Z4!sV)7AeURaY6;1lxWe5eb!6kZzEY8r=<264I&E z2x-X;k(O>YT1r}Aq=X2Pqee_}Al;G^M*QdVf8%+-@L~M;!hP?$&ULPH&Ru`==7ff~ zpXTU@)Fy9PT1;AwF2Q*CY>gbv?_xgt%`5xox_(z4gM}`Sbg~i=;A~Z*(boO7(^ddi z{o#yNy6EGOy70ra;68)h))+BJ*-hW_q6_vWV64u+WL`QA+fwk?vMcs8pDpKX_>=`K zdhXvyRzGZ&8`5LE@F30|bNd@{{C#>uph(apMwObp|HPfHEQ}7j;ip2-`>8W*`k9?T zrC0t@21uQFaQLL(xbqlJ)c*72=fd8ReB2`Q#CC_@^?xxkeeDhUaMr z+(*CVxq!yipIdePj1&)x;m{J%=z)JA0PG@!8Y-n{HFQF&aNtow4=jH@aBub&DV*P7 z^kJjx@iFA205_@ZLB86?q;))veS@)j|*-?riy5a*e5tjN8d zgONks?4<0N6ty>3t_?LF;MhT{a8^G5HD-ms)ziLK%SL_hoKF#5t|cZDlr$n$n7qN8 ziQypE=0JbyIBnpRSPE(Q2;Pf~KA|ugN@0oUA z^gJxeDjp~1f=CzVYn>-&BW+djIsc*SSn;l=hdY`%2W=Elyq35#bk}>XW35 zS8Jqi%|M~$gAR zd6G;%Cv`I_A#}8?63KEUd3k#hHOn~Z;q8E*=(zQqbp#%AM#~os-szeaM**3?bOkcN z1krL=^MJGO56)~kU4CwNnbimeG(hp(jSU)kPjoTg@CyIheGuvkcD2aq*RWxtYs=@e zCxJNVCtO5x2rc2m6}ngznFPx@y@co74v=oUB0hhmnXbg3jLO!7K82Q+evKDHTm=-! zk;WN`O6gM?X}s1=2OmEz;kP?Kx>*Q7!;a=U;w<1YUxW@|lZwZf#Rs90poBwP*jH`m zv6C;T{mj>13(T*JZY{)Q&_lr%24x+!9b*`%M_SP{^kCshYpz4vq1vB8!jI(6IpsOt zA#jOvC`mjI1Ro7bLsMj;8&4#BK%9$yodo|}`L*c$A((QV)Xe{KY)@SQ;yPpFNVsfle`ec8RW-2qJ1iW$Hk^FEq;|%Qn8}s!>zxEth*s zsD!)KSP&zwGp;k$%9u+`AHFa-xcUwk_8U-gf$2%mfn}=22gzQ(m_DhK;2iX$$n9S_ zA`?<&WH8SX**;Pz*zTgNTRZcbX-~lj<9H>O@$3uBKwiFoGD((PdXhYZ^VlI@FK@f+ z#)87#j4iEk3iEvuaCYGhv1<#lc#VB0E9{I9l02tAy^#QzP(O*i8HSn_Q*%(fQ6<$D zI*JlX!S!<}Ayey3(^BuAN}Vb7+~rECzwhLumo=@Yf{>|n}Pq0PI1owqWM@wDRh4TdC? z`o?QaaD7l*uBIi(WK`{P&+o1$rt(k)=0QRFE7)UTq0Zg>Ho)>U^2UQU%+J$*qKP5D zRxUVX`3LI+$K+U?tXqJDc8Cs5*|9#J*bDZow+pkAVq*z_9k-#J)J`h>uGA3;8I!Hj z+3i7cDQ~q{xuOjQ?{OR?%dVQ<*h|H(FfK>kMdbdF=&*kS<0As*J0#pPzkC-f=5#clZkBcEH+szO>Ocl+<$4defko zDaT{I@K62GvH>Xp&PZ7SmHj_&loKHi9h;}ey3$id!^YwuBqIJUnZ2knbAR-cuncMd z{Ha9-S84p?YjSfo$Rgi0_xzmwqmP64)+wTik{XuD^zD;1Z@l>|8M~4fCZKFEmVM#4 zqwlr-{9sE7NNg7WPx&$)#VElmJdpSHo4aCBkyqfpS4mCRo~AMIkN~H>IDU zIr_DLYW_Jr+E)7S*~H&QmO`!!IF?R}CrYBIIW8MvNeI{tVeBLNObjdH1A&aws0OL) z3u<;nO=Hk@!M3XX_@}$&_eR8IAYhzK*HOX-BU*%3(YY322n4!dJ`3@$^>L#?tO=!Q zBi%AWW(8mzQY;L|=%t9{&= zEA9)O6nnVr?URX=4!2SV^lIl&9|WoqE~JJ@3n!W7b>82rv^f{j^eYg@d<}vW26Hwf zc3oCw-t1&HY&Vpghxz5T4uCh&wGp4iY-N$Ux`}=*=LEC0GI%JoFE#n*?9XUSUhN6d zwdbM*1-gqOScaRex+>ADCJ1G*Lxb>=mL z$Lv8M%tSodKZXxl?B&p=%~L%6pT)E;R_v@tXESU1Zm474YZ)LfZ-)~H7{UIi@oUCI z2(c0gGct|H^L86fl7%{GW>^+qu{_8kRrMt!_|>(J(|a$MKi+m;QLY~Zv9}5SeZ5%Z zxRh~&&?NxC6|z%+40#CS#4^5XhGs_DfwL8X*GljDMOOQC!LE|+s(0gI4R+c*h${Vn zB{94?Y6hRzI)wE@8c^GMqsOpn^$&|6pDxM+mR_YHbEinpv+1TeDzcK>YYY_jO>%N1 z0f0QUvnof=_Lw!mKg+9FA|&s|*dN|vxX-$RDy21nJ4iW=$&d@p#v@)|<>b!9?>kx|2kAVS0no^t7tO`a0uqfpNlB75cN!9@kx1CxHHA%y;tomZ zjXoGF6mmm=qQu0+EMt@n?1>jWB(d2$nKPZu@z0@-CgnkxFc`;vKm$VBIAn}D$!?fB zvTa%7OeJq+p5PmtEL0Wsd~Uu4uldkXg<&aM(>hp`9Y_01!X3!#^E^M|F=)u>W>VBj z+bDMskmTU~V-XCp{f*J^6VICrmahK&&!&Ayd(*P?eKPc!Y2mJy%qEfLZNRX~4Hj@Z zk>IRLK3hFt#)PA}73nVMHs>%#rb|acY~UqOKlY7Oi~ladadD_r3M_BEI=7yF{GX5g z=hCe?*$ zp#b;ZL=UruDh|8C+f@rb*-(Hm+kK5M#79jM8?0>P>g?jgTKn$bE$DC#daV15$el{d zR0OyNTzmGAv;wAY-%c(sI@1jJ=ru-hFtKk$2m~H0DQ_#fCXW@T2?yr5P$x`!H}LAa z9hQdGqDsTumj=R9Ik;nWI)ypoMG!WV>HW%+g%nsZ9=A{|ff#VZouRvsf~8tdO*TXN*I*2nVI0$BOF z()Pgi`5cil&0>6Cm0#!MDogUyBGhDgw+c7!{pEjW&G7YVF@lys_MJDMaM~lcGQT8t2;5>_{OORy8&}$ zxA^tHacmvTd$acAx%XX%l~Z{qsxokCfKXGi7&~pKqi8zXhH)a9_}2tS>iRo^#N7-+ z_qOp7{0RI@`^!kUP!)ezGC1_v8)akZzfiSm(yd*2sp|`?kh#f*WZ)-PBf^vCSyJ4mvI@uBUFK8)DjaD7*Ttkr z(B~vPL_sRmXDS%NTT19x5m)I9j$z`eowj5v;-~Hb62!+u=Hn6O=h9l6qEks^ zYe-!4H1lZnZJ*l@2E;XC>v4eOL8D0|#f}wVULSX;bw&In3KS2DgNcd*%HcYGLYy_6 z)w}^1$$mD#n0q@*rODVX&z7TN`M+h5J@YJ;uL-sa^~ ziTIN&zl2FFY7XyC0(FDT=5sdbm_g63KecXpreDx;hGcK-*}t-UrPrtHd{@h)=WXAo zhoIVrTuRq#-crPao4;F_&*Hr7<>(mG`LO~V`Q;7f@dZX{oJ0I|C^}Dx0p+)V9Jy?H z3q2vvTOSf~T#x@Bk`p(SW8BmGTq{{_M?b-RDS2*mzJT8Nar$ z+5*fM?v6{djSov21mRp9WWeY9LQXal9_(8)-Lk#Zc$IR*?sGr-w-4p-3pO!7im?bs zrAky%Uw>|o{}7p#O83r7{sUT?-Z95*Y}M0rp5k>FOw4~ zdykZ}y2s(6|&Y-isINkCs7*3;*~rs$5uH54D*iFx-8?s#UGADZQHX z%ZM${S=$$ELUp13cE!ZiQ5>*zI_}S!FMFq17)rg{grtV>+5Cb&=GbkS2$0UV%V`n`iJv zH~vKU9@f5l^uHKnGm2hPslAr4ZoXnDO+&YxOnU@*hvAO~g~ZgY5)bybZMJQ<8gH!5 z1%>T$6n7j$gE=LdJrUP`i`D02RgQjp#5%D|&a z*5d}g7Yr$#E$g}Kz?U<6YPd6yre_SbmBh;940ucL?>{pa!e`Gfp2f=~6iu=711$AK zsL3vt{oUNpZw`j1ZdX7Yt)Cqx*d{3?@a2Y-4HpmB+fX!02dS_xKA8t)2d^(MJI2iH zk$dk0DmvkYdZMXYfVtN+w)eFqO|u{3D5?vQzKL9Al3T4V&b>pSk5%MBl<#hry-I{g zV)O5QX818Taw4>Jds*T7z78B{UDsN{4VJOMw6QRTlf-@rhjZZukxdlj9!pO;tAKMt zQXkzbYn})L<0XhNjr=Zr&#*8wQf56)NbIP|IzF8MfH|JFQB_^rm@FvrBZB&+oY&k> z4OV*=@_^oQBdd#FV0Vftc0-U{S^w@lAr~?xtd2M; zu1Cr=X*3zXdeN5+;y$wLXgEJ=AzyWnu$CfmBXw_D-xcz)I{qSqRC@B~O1$C3S;CiY z+wg5A@ei@FKJFZUI4h@K#DH;Fe71Tz`OP6jXP6fKUzTh6oK>K8vSU8cE$;s*^ncX| z7nOHPjKq+=>WDu4733V`foKy?1c}^@XHw^t?#s&_RLSW^Hn&^Mi?A7L7@VnAwWauW z_xHW|R-*4;ZLOh>Mpj7hK__f{iqgqUMEZf9_}5bf$4bfHgt8;5m|M3LL-t-6eQT9Id=|o(;k%}F#EHEP2aj-;_c8FL z{)8!$y*Hrt2o%+M*aq6i{B!bP`U@vjYVpCE%BPACa-20S61^k(CFt&hL% zeJGeZo~x9Ezfvpj;yR@2kCGbr(#%m{+Gd1%*0qO-JV#`W2J60F)cPUgYM(Zd^l-PtLC?Q704lIXCGoByutWiTy}7BGCBG4Mm_9dw>Jh z!o2$smj=*X0AWWv_O@*cOq_;rR75{CaEXLSJaV{{C;)9No0Gl1xp9HmUkYlFXA=S> zZo`7gc_>s{WN~T8T!}jab1$t2eI|!8I9j0v`?gY8DV1Hq_JpT_Rx7N2+#Qnp{;Q(2 zOG<#~)E>*RHU+Y(PIV1Z1;nS&bGm^ftEDCoC=>yK3jU5Ee%AE3KJF%w`dT74?_^99G{z0k-rJR>j_z>}w6i2L9u z_fZ1(Dy*I_6WvjHe^|7(B7WYC|A&ao>-E_HcbDNGK|4Ib;?i?YKRRhN8~7|c(!l;! zev&NRzDG(Y;@=dyT8(L?5ISKTG~e&xakUhAsbMICaA=&~o;w@pECQ49U+U6YNZe-m zopYYWUyZH??6eN$;fMA;$uU$bW@H}ktq1_6H6(;ejG}x;Hdipd2dg2VG5g_7HE72P zJwLtiAILdR_7t5jbl}+_=6}o7n;t}pT))xV@U)70)_>OW#xTE+kM-4&vX5sXVeM^0dC@`w0ibArLkdBB0u~`!8Vo1z zWmM;Ks?vk#(YTCbBS$8Q_XmR!g&g#NnMV$vp6Jh*oE$4j{$BJ09^PJY0t+vaFcXhg zN}FK?`I%dpH8yIPU7A%5Ga6E9R%Kc@I-7kZujp-(7s9fb4VuArHiC} zj5Gt42}X&>3t^wDT8a%`g#S}?=kbLM3qkh5oq}!uMVT$E1ZnuvbWdl6gCF#mu`Vzk zX`MG!o*rPhuYZ?ucic2dPDxMZrWBaf+(>=2d644s%n!c4%R*-Q1x%V-%05;L;*82N zho&N8F+v?vnE@4kh|Y#{gezX3IoRGH zA0A*9*nD{OyREtq3F-gJ%(olslAVyXWfI5l@Ie`ey4`xrA*P<=ap>iQ&(H;Plh$xr zGN5Om=&WShIbIZTdfbC?y>a?0l*3K^!8d~b@G|Cah3`aNJeW=A%*M?ogSZXUSibyt zY16_w!c|F5pc$*($Tf0*$NT^Zp>esdEk%RxP!f0yn+~QleI2hQMjw13`3KL6imAwL zYZ{kUN;U|KY;U}~Q7?L}n-d^Ns>RO6w=RmiVWEB^ow;Iq)BXHQ%K6VZ=%J z#*sB+>%p~fAl8yz9_>un7eSolONeUJ3Z#e{W6$py<5oU4wJWz)5mhWBntojnWz3sDe2-4 zIZWew>fVbTv$my_e;JKRwe>7Cpr1e&PeD=em&eD|WHe4tC(8rh3$3Bw8r8qz{AJ&Q z9Xd;igAje?llE8(FHY!}h<9lGCae9 zj0-Ic-V2XPpP!IX7p^>XHZXQN0%r4UvVxSNUyXHS2aa!rnGOh7@z;>ejlk7YhksEe zQv^_I#mSth%^BbgBeXu3MnpVkg-DezIuUwn8?gyGR#V9QIz z{@fac{q}40;MF#ErkO5%Z=wwT?(#7aO8zEIEo{^lb>=$eb;{*(pm&RS8ZYVi(&HW) z5-VQY5nCfT<~hUTS!=w}yz66buZ|rBgBcD?w>wdAlot9r^_zoSA0LX>Pyf1^tAkG1 z^KjCQmi5p;9l$Xj47-I@_ZUwwf|z`RUagH1JOq|(pOzYg7~2g#@9oc35#YVSJk zj@|qO^#{fG_cfwudp(!DEtYHp68(ik{&(5Be9naJBJ(G_ui5^43p}E*4>nzyB-z}# z?R-L=g<$T8f8+iob?N#=30lqws9PE>X{uiNnLU?2uXeg)!ZbVKCXuk>o$vD@p5A=* zNd&L3NRjmrPfl*8g(cWi0~cDxGAbP=KdC`tJ%tPX-ak}^IRvW%FYGz_hU2Dp>MNGS z!3D_h?yK+{1x~jZ*1Ed67k>vd_j;DQKOygQ`37~?~l+!uMqp}CVJ?Rb;N(&m`x(u1D z2~vbzmj{Dr%i0r9%b9hTO`gNnhqfm-8W+&*XT~$WkB=O_7*F&8ecM3aO7ZVvCU;s! zgWAzQYJZHD2BoV5c8Z#^Dk`viMAw67a$<0a(8vKmmd_B1t*wd}mPqgXvAm1*w7>1wAs`bR60_&a4o zx^fHn-`azV_eCHYbj*Tt5bbb4vSVNq$BcYEWP)UXd2yM5 zkz0<&8GIEO+?}yztC2xlKU?N&+uX?ECdRVs6LmJz*u2W`ogy)i!>0Vgi-P3Ic0>PH z@p1VclevOW4wnz1(Z_)jL{+xyRsCb#zv80hNDc=1oet=(DFi9Jl>4aLQ{QIs)iu0()Hsd z24TW_VtC5qQbnC2{XAZz2=MJxIS+DOd#kc@y`w^NWzw8k7g#QiM0^(h{h3*WC}k*L zM0Mmf0l=w$u(Vdy>A*9jR`OJKEZ7cwDdRD5_HxvH=Ts`dWa41q@G~wYSNDHcJAMKLi5DRVYTF0HDTQYDT;Zmy)FclR{S%R!uY) zq21c-pPMtIRI9h)1VNpkVfCK>(*OSnJvgLOyxHGCt5ILh_a9Pa-VyA2Jz!mm(gwVq z`gh6sy05mp_2~FKQAG8B#HH0LU-2a$CW(I|AdVzGSY@90?eQs|NnU++e&3FWyH_OK z#a9wvYJ<3rrgW0=DA}1$nADo-+tYA@unb60EX!#0(-TrYVV3SG4yYtowo{64=F-&m zT_}{n4u@zXxAdj^J%ZWzXO6*al0!oEi@7>x>E}>ih__P}*MegmIThPQ%#6%XAc%23BskLj_vx(tCzNb~t-u;l|nXIoo3PjZTh6 zIGKV^cd_1W{0?RXR88$*qJgCFFf36qjGdKf5(NeY$Yy+M4^>; z6wKoQGtpC%095afOCj`BNQ1shLLr^iwQT&SRFS!>J&m1D{L^FkAKo=&)Jgu{(B8RH za4smG`#3kJ8RnMk|EX3`Cof2+OoXsX>O?3O?NdHeWk8zfRqAqOFsfGDc(rhSMY}3q z?vi#icY4JEAg)5`jiS{SrF5al49_=__Lfv`lfG@wYO;NkjY<>SbOW$buUvbRC6^}4 zjV~YkXU{)fg7QCa$9Map0}SP|fiiquv)jb&()-VGtA4mnY;wfB}(H_nK7|%fx$&V+ZWr{6;-c&V$}a- zDQ~GH0H8QWT)GT~{76mWha4Xcqo-bmFn$^NhazA(@DKVu`$_+&@BOFfc<>Qq$ty*_ zyF(sN5>ZofcheQOm1H5Trc*~MSp9<-R21eVUClsm2BwF7-tf z5U*Mgs}}ktk0S#cg8K^H*?7?tHz05s`Wr&*t($0NvsBIzJ_{TEcNW0&yRWMrs2w0u*`@y}h6ircA!h^Wq zo3017wM%4Aeerj~L-CzbDLKxMBZgSbX`MQ^S+I6louF#pP}a$-73%15M8x>9ouKdi zc#)Bxxp~LWVzO8%^eiDYio-CujqNooW$)C?NrRc_G^BJm=*venB+lQS z`){zHjC&t{ye?#*aFRyyn;`>+CqimV8kS5Q7yahfigdo!$E}VedFik&?Ij*cbWrQ# zA+a50YxtjPU6Nlf1sqIN3xV~;AcuKn`E8rI zQ>w-PvYcR}fUX$0QF1pmICqxBh&B49_>ZzL-RGn~{igU2Ba6dI_GDE&#I9BS4^IBi zJt1}C!jb)}{sjsLkMVrmjqx|ko*+d{vq&@jI*<1|-6>hAh1H=?jc-M&iGgC7+3-Ue z8-Yf{s8dajtb><8z0%~2yeWqa2ARx&QmtaW--cb`U1(r#E~0k(FxLE+JdNuH6}M?+ zG6%ug?6oZ61G)ac2^i^yD~^)n0m))F~9sGH&&eC?52tPWaaY0k)@m$;I%7J5UT1> z@yltE*`4Y*4uJGgiDL#shgV7O;E`)7u8xLotiM;s+Ia!(sj6E6?;w>2DRYWSqt_R0 zd6P8lKZEiTtN1rQqHi|58Oms<)-R>|b47J7bO$H*+)pk)`c8&ec++*BgOFoqpPI6P zBfAYdoo*xOS)10gYGW!W zRv)YL_NMlzVOcfl|L5upt_gn2DC-Wl1RbEqfXESP&gpeYmVaD@^FJwX=W<0`w*SN^ zn~Lx5(h-LYS+ALmzxy0|+9UxOgKOx>@^>|sFBL{?K zo5Dh9#^;r>fN}V!A4!ZzNd`oBpIfLF2(dCt;`)R+_Wp4Ayb|6bM~=!2c2!xU#&S+` z8(H2Q<9mm(S4>}MDT5oUYs=2cEYxOp!p9Tp8f`5Vc&Vf1h5b9AG3;k1q-lA~CL3>! z?Pz5(oqdH}e5u>hDQVB|heNRX9(ERO%7Hw*@lQc}YEA_K%s515PLJH%T+K8%(%TXl zi+8NA9^zRZ=!$N#De6utKnGXpoC^leG+lIbd-L_q#D>LcE9sNNtzwc`br(6M-c|HZ zQmm8(rD#;7^0cH#t+(@Tenj2d1g80^nWCO5d<)odF|g{>Pl&>bs{8hfF`Vh1Hx2_< zj+;RinV^+9G+kTQNO0#{byGUzGxIXK+ggx>0tt?#rHPG*CS5qzTW-< zv%YE<;7M^PCbRc^b|y;;HKHjAb$AY?7zYR|&TEB+6_GOKt`7KKyJHbu#6tN`VApiaYbuz)Qq5!ipBcKA__KnGGP? zqHLF22~`w48@YP|%JghgI=}>^_9Meb>T6!7*v`lo*}owIyevsKyOkS!W9dHMa|lhL zEl`-F!v+I)g1e&0lJr*<+ z^wN~$=f4m8YZ(@avhQ%MT4ak)2CIpjB#Zq+ud%@UM_1U8XM8I9|0U!9>p&fuKtLZ< zZak|FyQK}G7SXW1{dC8MW7~G-cM8HB!m<;se8Q#UmA=P){VQMG%d4uP0Eh>Xy?>`y zY@j%cJ=wAIw;0#;SqMs#zw?u}*aRa0ZYQjBKgjs^^a7QhgLn1wN*eT+!-`_Y51XBJJWl zcUn%RSt1{bD(9IlY0c850xIlcxGHF#{q(Bi4SWfVpsI>gL0XcE3i(ZSwlJY6>U_ixCOW{^-~E2pqd@ZH8)L9yYB?M}(XlW7!LlH>Dz^FN08f1Q;_I>E1z zeLwOQT#mSR_lPNlOg_E)%s5s!`mpJP z*+!`&4=}jAu~Xix+@{mcugyto)3D#dn8v=>alp*}lcRG}DpL>qdFwrnkDuOZuH~FP zrWP@wy)X2#|LT?4^`2PnX+sD&FsPqKs{eZdfBYYjPavF^47Hdn5kYjOwwC!AyXy^R zWr$2+$ zh}lUjT)glO9+&?NE-MjWReV4g-?~!=tLo8vZCTm)eLQ?;h{o2AgBxjXn2|rfV>E}| z<{8}fqY*yB`GL9&#j-S>0wg8%*gq(oabo>Q^mZ~~W&D#S#mc7+LYD$tSN4feuo!6K znxbeb?1YZLr@oVdr)5yAkJ_C}F*j^IRiO?Q2t>6q zv8}t2yR2tr+uqT`Ov9qNz}#e${)KJZ%ZdG!>(%d;Ws&fv3g%s1y+}Y#j~PWgZqS;+ zD>Ymi5Mk-HbA?W2L-R5J$>i)TZLkKXwdiX=pAc=ApBqZ7BVrAeI{C<)1=fojklqrb`%k+rjrIr9CR2Xx zjpSE;;2GNs0IpDZCtm~@5L5FRHf7+YI&$a~%+6BWv6CROsxEdm-ie0Yn6I1$8!o30w%&l!8`(ZZjVhdaNZ9ub>;!m%ajpO)?z&aE4~x`IWsNY?1%nz zO6M*8)L=E7*@LMn0>ETBbS95?#OARX@Xfo|3_^^WYS7KHO(#;P=iw|2*pVPr)y8rS zBInkwWBsO619jN0%lK9d@wVj9dw(^_?qJ)Pn52vfF$uxPMzn^V&hDjrE6EY%Q5-2} z>`i5`fQ38^-M~ceVs+L3DL+zwR3Q8Q34$N~^BJ}>3E`9!bSsKcJmPhATkRg5(&FTk z)!6PfAne;nz~zt)a~{wo&Tl%@-Ok+dW?7LYH{EcwE>rA5C2v^h+J7c^*D zhEM$-*Qn1ACw}NU+{z4PK~!l3#ljFavcTuZ=z~^~Wc9R$YHCyHG0)W$gi7D=UItvgO`0{RGLC zt5_w45vpdT!qqmI7`o-wD1NRl5I93)KJp1uK~oQ@b6@2X$V0Et!}pED{+}v!W=WWQrCy z(0gky{6|;_LpO(HNR(zGU_}unzT6cy96hIYDTI?+t$QBu=};|M4OZRTeY2gATb(%< zt7&hdpf`xo$z)YJ0swD*C~V4(b73JwX)|El)>cQuWfTOLU!=OD=3HIM$r*hf3n9wwwe$7)xzo2;y%_$wp6eZ! zu&vxdY`j9Pls1|o$30p-&HJ|*RZ&sYnaBL1%>#$wuZ|Qc&j${F_qad;2Rutsb?3=f z2bobg3$#|77z-YdE{eDE(#RA^`4s$WPU@4CFQUDGu{=!P2*vf`=XCu|)36|kOyq{F zvTiGOTDF9@+b4biRalM*2T~9$u;cEaHPS^(+&1=?0xtu1-7fnZ4^=(}u;YwG!Kz^U z-QcAj2j!$zBt@ty$9di;?+59-F%Dd*P7JyzO|(jl>DEZGDX@4D3M|fbFlq{qL64T3 z9zT-_(}+v=BR^zrN7;gPwLi*DIQ;waVsj~<{W0uYNEbEz^Y)rW{Dp)6;Ct}b$qHg( zsUq)g7}JPgEP_rrQOgYZ(v}x|sW~QhsGb_Xqrkxbiip`w zK4GwzhRp40PiR>c&otD0Ns~4XFu^OEJX_{H)Qd?`R~V9D8&vOs@0bIj$sA9#gcMRj z4O6wnG`1S~>$MYj9?30_GjBnYUy#~D>~1BKXc_NvD|i!?78ofP1YE}UIGa=0%0dNJ zFVv%#EB9-p*?jZOSwE-ZLA!U;&F;qktoG7!hNuiFXIz7KYKJ<1h`ASwsG3=f!{H|U+0vCz5L<|tr$gVoLqEvYA_M%?wX+l4o_u{ z{7^)QLuH(s^NuFLCxVWWgcrSl_pS|`6v@Hnu<5$nH1AY#;M=AAc67RT6Yu8LzZ&Hk zf&2@)V&gA7+o+CP&?TnPeX^NlqCIm1LZ9q>&Z8xMlrm1jqg*_Da9BDW7JusOXxf_v zrBjM_fR>a8Z4d6f;+U4N3dj(dk{(!jr90RAGiYyzaWjkW*R`AQ?4uY*VGfUEzJDX? z7G{F2{MG+)`eAibJUDb~X^P+n4C235tjvi6+fo3&?ELv%`H1ThZoY+DM8+ev}2mn%-js9<*hisLlnb>(7 zJfLycJ|$aGa~qA3hA~AvA+=q)VNy&~m#80SNr}HtG|X^l3|il8>Eam?Wf@;a`_;sVqWxwza^QFP9+r3Wh{QiMl&FQhA}%m%z9U0Ra<&D z*%9whIg)IzrB@pE9dyC)Og(b3#@rU-FaZuN(u=+k@I# z`i-02k38FcBp=5N&h&8eEfR&bnToBe*cC4mm?RQ)k50sgUZ_nPMD4OZ#K!PHIpZCc zuv1htSIZU|kJi%1B0a|BVg4USfmP+tgfuMQ0f{Eo$6Z{uxX2jHbe-LHd_Zd3lKoMI zwe)S$ND1wn7ik9cRN;xLs_OIYc7DcC8Srb`aZR$c6srfFM*_oxX1fp^_ zZ@tP=mug;W7-5dvsvi&Kz*KkZ6boh_2RIm`UiQv!40ZGck%3MZd=}6Io@p+aoDuqX zIc($ga3TA#eOTs)q1{H)@=v0wg41toug$SRhG~5Qz=)}k#beqE@@++R*Ig>QvuAx$ znwuI40$u_Yj zj6)}BmuH}skLb*Pd3=2E?}q=C{m;r&^Dn`Q|MH92%~&--+WULNZ#@Vsj%2rh1}NrK z=``vx_KR!d;}o|{#{|x^$3nv&0G+(UN=_1k+T}MTjx6H??UP!fk6&)WacLTxc@e{@ z`5_iG5+gP00+A0;vk@ zH7SwUOukYg3;LB+e_3Fial3yzr)zy}rn+s zLBj9e6YoDaoguFaLk=o2qvF4;j7OznNGWtoCx^^63{+?a69~mdf3}Vivo@qJi@L-= z#cg@)kXKCTz~rq-PiFN(VH#4=NdEGZlVU2olmk#fDRklR0|@)k?$74^BC%dId*emL zVux0qg49?c9@L@Kvo@5%O(H8d<)R$G!{zsY?j+@6yCd(}#pTDvqV`=IaI%R zd=`$8$+bB_dkWf{7%-#vKFne1|HF-z+el5Meoz88zMS4Z3rX)>3Qjdr&XXAD=Xd@I z--@SsrM=JO;`}-@Y@u};rGY>9$r#;?XwG(TxG0rKcGytKXywNlNrhm9u5rup8gxkz z4=xeqLWcIxKbxlcTx+Z%Vp`F7$VOn^$zvzi-;#{kVql z&I36<3wiU%hyo)KX&F8Z-Qfk89U@7cK|={%v9>j>$|om4=MIdpS7qK z3RRICoy-D>o07mdfs=G*Z`f`-IaBq#>%YC1V0U>FfCfF!zy3%Ws37016gfLfQ_MHr z#gVEtoaCrgkX%XygS$SzO9XvI9N|SUHYMxualArU#@r<t#ZJiti_%(Nvl{7EEFz%))kUJB7w!e+XJJ793KU4 zr$Qp|pzBqkk&@%1spfuLI(g)8y|8jTEysEtT{b8&;*3yYgK^X)O8iM?UQoXW=Oovt zuSie*sKJN+YTAT%o0=y9L9znvC-Ab$@VkhCD%jvk%;tI$)!BCSM%~k4P)B0E+?15@ z;VaoNfmsvh51~&DC~Te7mXM_OK5oZD3s@aI$IMo)HMtX0Cqdn$)KrV+tpFF{#68`G z90mXIU~AG&gxF{WK}V9UQ2vV%pC9Bpt~E<1mlcd)_Pn0K$i?*JVYb&{TnOvb{JF=8kv!n-jMTsJspwy749m|Lj zCBK7&$cun&(<6749MtP0owgzhmdJl46?^RdnRu#$iUkY)i5U|}e<={-;Njj7+@ed! zBV43=p`sF6oC<6KPxS}k$W={$QWhdMt+^%g7**U9K47@133;ePcnU!R7jvDwO?Pdy z&s{yd2DRF*NVxtWmdqMyPvdw(W(w^ap~HaFMa^Y#~kp-CC6 z<}rQcEF}oE>M^sh3DXU-4{d|W_wlS<0;C(*5p5%PWYz~NOC^t-)Z6^ zjNzn+F^Y(|oJTeSg7VEWypa3S{6H~A+1=&35k&!Xvh|bt$SpZs7&f1qX)HKtBg4-H zF)ox7t@TK^cNhFQe~tkWx(7wrl!?*EpCq_u?cJW!YO_J^VK%hiFCZ}6ugNSK%ADQI z(V5;1u+ym)!0wx=fFX8V=)p-;1!hG(Uaag<$Ei7d5FyAZ=S!rg)*}BEg%8Jfxn!#5 zOQ@OZ%`o#GZn^#`6>49^o^#WGTa|rtrke4af3J0WD?80L+%B#GJ&WpD}=~eX7ldL%j0-0@t7%1h$sDVhgN|eq_E0; z;Uh97QKq`JHs1Ni;p>BRZ(qYD^}jRTm$}KtYtqlpNXAKmXt#NQc^7Xn)mp;)+ukRW zon=qsLlu{#){zWue8Yy1)}TnK;q63(_+4AP2Au~iNSmL8Uh&$p9rBtZ3)pbteL!qS zD-*3%x7{y4@|PGXC^~J`c-+pA`oH}X8IGk`Y6!QSIQ|V5|NL%Oxj-7moRD;i})(^g(*b|n=h~N zKC%yT7w8jOEF@NI{W;dv`!iC*g$2=mX$Dmhs#6K4f%sf9d25q8i7KlrP{2cRO4Bv0fOCAIWq9uf8x7qA170l$=sAr}*?gXsphrv)>;taP2X zmvrI}B{epiSTH__z7Ohhq%q1f5Cs4F{Lie!5=VxNPVM(*uT^iwne4Ag>%p$y$}L<* zLo99C&v37sE6cG=%ggzoZ+d*1k3(N}TN}&CmeX%2nJRROXXr1Dc%rI_Po;|kI6*}c zxR8x?FOFuP5Eh(x=@z=+Gf5&lhWpwwn;@elR^cjV36}z_-#Zxilg267#=53N=!VS6 zk?lo>oZ>fA8IW`{UhkKF>MNH{re?PQ0uU z9I*GrGcd&70|8+kRgv^v9868TJRhOsV8nBgw4=e~=!GW<0z|1?5Re~taN z`nOyRIickgegTU1kS>vRh?%-~85YoXS=WPC9|>KQ|1i`HOy%6uZH_viffKe2DrylO;%rSvE`IpDEvovB7}jA zrCQ0fCYJbr((Pq29X*ge40-CpPPK5sQ0A0Skc|lA6fGs7I~9~r2Voj|?ShC&U0v{j zjmCuv$J|cS29g)2uFnC$e+1gph4akNXU6GLL;2c}g#F9nTppp|5OQUyv`?P7ZluYQ z?X=uD{PP?xrIy7q`@>nF`(fd?HTywnE?gyNrfxP00M}Fe0NPs^QjZM{WJZDAuu!Jx>>?U(iYHdo1ecQvxA{`;y3A87sr_T=Mwgp?>ER#X2@on!bC}u=XER%(WbDTVEseTD$f%t@K0` ziC?>a$+NdvbY0E{(v^!y9jrgNahE4U^AHKT*wS z4Gl^~pikQnhT)<7Ef1%u@!5%Du;GH4PjqFBuMY0{%QL4zO$n~MvgHkruq>(6-E|eF zjFV5@p=_l8$76M%Xlh-XV|-jWQlrd1_W99WJ&?qg$;g?)&S%Qn5%obXS+Zlzh@{M# z!3XY>G0YohNm7_+<>V7yd$nNgB!4fs8Kp1|KRS161RAe zMu&df`seBO8Gv%;`URe?cPaGW0mO^X8jMAve9CTw>wzEU^b@Wq19oUjJRZKB$ycKp zU!^Ey!y3Xz?({ubj0|TU2zPdHw94MNQ2C~ldO}$^521%jNQ@#0aJJ*7>CK4(my9`1 zADM3+=jeN|NxId%MfI?~Sp*i!O9LyOW;BB5vZIy2g_YFsVvJae&u;)$v=bJ;Vu$$g z-APCk3~qzCkH8PIzI$=fa(?>-Gl`D1ze@{DHeF)cy4lsm>9J&T^*y<;3T~H}2QTVL z7CyLa`SA`e`ICj)T-xbkUxT%3i+y+R<tHC@zzGVGI zkPD>Kpr~d|MJ{7)50oTEUp^Z|9QIl%-9i+)Rgb5o*q59xUEuj5f6R?}YSuM%Z)UX0&3hGL#_z3%Q+MZuXYyQ##*R%HD50DgXjlH*wES1>@H_5VyF4ThhARI=E# zn9DoDiHdh40hlxhc>`!p>ZwWqOOU>`XcnDp!p*6+Rczry(K6LmTZ#g`K9Uk1!$8Jk zeefA+V5s0;PLp~|`RgT1Hl@sboZ~5zjz$70mvW#w^UzCyG4WR-I~&+%TJo8Bu`bxF z2E9?Yb{FcGPdY>VQAGI@fhF|QVVS7<7={C$hT_^dXh)*#0RG342&7pAPd#mM0aaQ$ z@@-}G#6j@m#wy}HWy~9t^l%0-Z4orz-raRY%9;+%6vFnrUfcKAE7;S*6o7_p=} zi15R_ho{5NJqHfegzepU6)R_xft!rbqmzoLUa zySlqB%;-9Fvm=-iEkY(H={d;9QilanX=`peH4vv^r`s)|UWLn84GO&b$8p=7w$2+( z`)OMupVauMRk{ya81cMY5Jb-g@UnTgFPv9*tmb>?y|WEm04G98drmjm^L>5^5JgOm z$_wjH$!Xz?o!FNGL&9eYV36l@=uU7knFK(bdIgodzoXcA45**}t56q9M3+dT5D`0S zOAZz+I#ohiP+7ML2EWW@0>0i1LxKyn9M0Rr&C9-iV|XkA|D;=Q6Q=Q-wf-T#b--hu zcroVpr+vc973?=#Fn~EE9%DR&?N>^JzfrCDjhSnsDVN6bPy3^ATU%e5i9dS!hb$wg z`yn4d&{KH#KpHnNZS=-nbI?C1`%YF4{4Ro|W2u+YK@Q%U7-XP)B(y|d-s2$eBEZAX;lj|KD@k|k%=3wYPE99Am z(Q)!ugRLwX_=(h0h8az@TnN(Z5aC~AJxE7U3BGJV)QB!+jmL2ig&`zqTlWB*1EAuhhYyhV&yp+Q5xTfWPR zbCI0ipUDr|4}LBno~}1Ccsa5^O}*kj-zTLkw@fkoO$Dj0Fbmkrl!gbZ6@ZD4c-3mG ztW;c{RgV=5m)>9LKda*E_$aN`ivJoXQ7fg|Mcv3_!y6)jC?Fn`qgrx}vpV$cB;w(= zKk(V9Xx8p<)q6L#{GlvCp|dN<5No5Df&U#W8iCz7RGo2^v)^*TyX!*edLg{47wc3x zc=72~v`xFwDNsmoy(?G$wFzi6Ww=xUrQ9Ttcv@XkbTTL0E1ytpN`(6g)zo^q}--K?BS)_!6}- z!}di5H(x8B{R?*Rpd-&0KRP}`6`3lK2Y$!vh=lvJRlPcop$;_9rMg9`0$`jN!b!bxJc(1PRi!nsB`py z{F&brn-$Lj3m$q8bi-b(Oqpqy7YLf$*xV(*F4{~PDNyf}wF2@frH2x+^bheb*F?IJ zmR;S9q8Ip8?Pj#u$^KHQi7famydPYQ43={B$SyJv*746x_t;&?*T$rssIPTSp%~q`ruJe$o zbA|E8Ui>%jE1!zV6=P>}ugR$SXVQ!z*53%;l`K0$Yh7kBpmhY^@48czC1>HW5{D&D z#>MQ*h79=}aHNBw-aJfpcc1IXD-gcyC7c6)S%Zhxc%MJpyVn_5!aWdeaW4 z@Wm{+?V3EE`!i50x`B&mtb(D6zoxzY+^cMPLE4;s08O>?*`M#D{_|V2ufaA5{%9V4zN=n5*Fh`Zee$9M4!$ zsr3Jw8+~d_ck0`@(ec5EBKp7A-(TOS6mXu$5uIYP(xSEe%+n}*erw;ARiX}6UGmPJ zIXD3;(Q#ZycYW`2-O#E@C5NEZt8|SUbH08&LLGuNm36KpU>3yEsl%fr`&7M7&cD#k zjGs;4T!Ff84nOF7J}R*BQgEEc3|@|w1$lr%zpoH(QU5Z+>J_~$&%8bCn1H+cC4E(M znj3p_=@#>PEqJYjWeIc6$Ezo|pawq4$ZF2LJQ>^OXRybWdxfJ!ngmgnxL<+ozvB$O zt>b;;g9$MGOW9D%HhV-A;|pYJ{YgIafJNqW7#z_w0+ zt;q$PHk4n@{-8cU-Un5h)V|(A1t00BG-;|w;SI?Mi}212J1rek7j`Bx#8XV#h>_w< z#Lry?ea>6gxJn)fzn2juae^7Xb&c^#wdeusFlT2<>%@V0&S2@(%_){BHd@H#3WI4T z8eGcO1G)0LC~hLL71s!oC?q3=3Pr|>iH7sGL*Z;lNLIeJy5a9xS z1)5V>YA*!bP+~rFb-7q7S@U@B@k{7t3VwaBrp+jmvgVeWdNuvKfSwyu+2iHKprzFlh~>c`uJrCQ-Bzt~nx;?cai`Vx_eGc{sDLsmC5_{)2dL`)x53 z?L6h)sPhmIl*D@^vQUYiZXu~$ z)!g`#Xw+Fo9?^$b>}NEZk{GuwWFH6gdpn7FI@^tP6 z&YM;hr-(jV&I6ukMtwRo<1ZdrHVxNwU`!Q^J;SAk-@I< zpHrf|H&0$60GV&LebniP*ZXMpUZMi#Lqkr4Wd5LJ^&foa=g2Km)qVnIjig7qa z*0#ab<4`aUSjl=VW;u&l)#2TN6Pj=zqdN@%>T4QuW`I_^L-)DSMl)AZ!H_&b4G#rR2{jQWy2-n zdy!H(D(g9ScedtO8ob0YRrr85+h`L+VFVTH2mSK|o z`>Xyn{AV;mbCL)TSG5(MRjb%j?NXKma9!7psIcC%rGUU!4Q!u|Hj_Cd zroDRhWmUrbDGOZe!vyrGr#88l3@3{GjP3tUpBQn>}14DwC%l&wn}g3zx(cX z=WXp;GTEMF67}=KY3x2yF+E0EcF=~MJ#~B-rvJ24Xo-#kw3-&w? z_|koTJV;Fr$13m5InE%cv{kdZjYR9@ySt-F>ak8ne)Yd+4km=~R;T zTQM$$gvMXrf{1#;MB8oz0p{{1Ix9cg&$BkV!pR){(hszqk-mnrh zOgPSIt7y7df%Tcbs#BO~oUMV0Di0INXxGA*5!0F_z_sImTmW2B zv!R7KFK0=cW!JpEjZUS5E2ix<>W_1?$H?YmUX}&We6M3Jr|mv#Fh0bKn|1$t64%_BGUnd#kz;;Ogi`5_KK6j&r+K6p znM)kz!EdtL=kW^i__|v2{MCjm`bO_zk57gcOC|@MKNn~s!hp^EGV43JR? zT}A1Mo}GK^kly$-f5+tH$$|%r&BW_7Ve$?>n9o?+s0^mr)*pO%sGEuTa^JYd-Ne*e za{p_u(-_A?N<>>kNnlpG_eaHq!W_wsr8!-@QrZzOjH6k+?74f1J6U|r;YnThRXsU-k~gIujFpy z!;lCk-@1VSjzFJ?kYB8tc-`Y4ua-pX`(`uO2T#*piS&O=Fdfa9W1kTxox$ROzg2Mm zbHct|;ycO&r4H5EPL{r42-`%jLEIHn<+EAJn1s~W<=%WWNsE+6W%*VLEVp4hpwh1j zkwmovce_0}rAXdF(JW~2*2lALujF&tV5`#AdwWEV*Wc*6({@OFHad%IMvELRzU5WP z$cka*(U#S^ud#e*_5Jcg6=Md}fC#~R$FxNl{v2gIB?eiJZaUY^RbrL)o=-M*zqX^e z1$Zib>3>>J8;e!Eu&$CA6(*E)0DvfN{Cx13VH@KAIOBYANu+Xbvr}4<@ybPp(|o$~ z!@~0BVB(7hk<)W50&1dpr$AsL4x#r&uM+sNIj7kBgf;8_qIvIdwHo;QB6q0ayAkda zctg1C5&FJM5*NVdo~p96_Crr)F}hO^^jxq*~!bK)v_{l!0VAe<|`ZJn>B!40IBg(@Y(JX=H<0m z8N!BTn|}Gl&j1|ePawe>QX^SdC0jPc;3nJY2!(n-SWx|UtQwIe%|oGSbzZ-VN>Kc2 zl`O+}8TC86((~L@^FMh#W=Ef7{fEOMM$apP4u>(Y8q^o9r8E~ecRd|uEbjiITGBIi zlh2K3`Fya0YR96UZ?F4-lGv|N)TXk4{D>oKh=wu#k89oJg3F9x1Bf|0B})8)^6%|X zv5*%>paN{PgiQ2kD0Y-F0H@Q>zD&{Q^hc>#N7c7i<)JnMOjyW(m(f>qZ`H$ch zLH;);zq=OM_RlBe33il2`|-nx{;%eGf*_uz7~HA}`y90CRl5t0K;RX*o1Ji}F)YwymC}3~3z!uXBnpUhC5wGDd`sE|WVA?3YMXa*ft^`M zG(O&~huP1)>6F`GrB~lq9&cl8YC5s^+n>J^sK)c4yO-^qgyVp3;`f;CT4%rA@b~C# z-F)XY9u(jj#{OW$!a?`g;f~2e;>}fQzIg+p!T}E59ih4nSJiCl`C-exsUtCQ#gk8U zK~XIuD1P$=Syy>+!Sqb=gVf`c^0T}oY(1>JXt_seHaQDdvf)uqgDJ>fG3|m9ZMPy;u|wMV>tG2 zi-Apa>>rOHZS3~Ijfh4}Km}`@;BjQyyu^d4FAK2~M#+q}%jNqeFwZ6<_piC)Az%)N zq=u9cB;L2-R_hjI1|O3^>b1*4s&Cult|Hb$9=VKr_Z5@>nTygtV=#Y@OZ~?qf}EM( zhmEV*2p4fPdkZ9Q<>KoX>GTRu3j z86a-nM-G-?G1R&H024wIqAaQoUBl7JUyLXA%`S%3h3lk7@6I z_sw`G)}dAtDn&u5GucK6s^1Oo4QA_rbd?ew+2@ZT zkMke5`(b+Ic>OjHsQp}B{}(Z8*<+(??wu(eBttv~X5pRX*LF6(1Qq@u>AWj3tg7yzo=*ruWJ3VN)5`>@~b zX^-5vbDQ1MG#)o9zMSXyIh;I4zN4Utmhzc0n}D4c6d)r8Lld=V-To_MGk}dDzj|3w zu`)YwK5YldElq#xXro75MvPG_*2e8_XObdxACwmfb&R;5L|$|B>rFD$QY6*LBZCexww`)@KL zLD1Z<5DFqqDqg8rWI3J=#RPBxvrZSBb#n}2?@Zn+34|A1MkeFINk=u|1vk2Id3fof z;isc%Y}Auq_skZY=ZGTq+z9yp-1o?#iAUh^%>jm}70Ms^_bWc8+OuaYleK%jiueG* zwuEz-#YLElt24fu8pWv2k$Plhg1kYi9sd%-b+K78ZUDK5Xo;reM&ZfWb2rxyD~a8B z)HgDsM8di`BKzudeN2PQyv1)dtWu31Tc@PqzB-_EIvjhh_7e+H8AfP9uL}-8$ivA+ zBgy2LKsySno2MVfocIoAt>fFtIAkY2ez-Z_v_EYSx5un3a1I*$u6oy41a$)t_}~wz zcwH8qV{uc=L=l9`GmB39xPFnOF3Yf8pv}ArDRf9^`xX;DBPz)-UqWaheVumq3u1F0 z>X*9nG-q9Qr@3AXU-wI$c-*!W^$M4$>zzH=$ND~o6@ce1u$*~qGec=S}|9Yq{Z{}&psuy-}4%FYy%nyu;y;R2adA0 zT{M5vz3||r)Cpru497Q);k7Mv`BNRE`6@e1&piFp8hwW!zF=oi?**l+UwCWGwn|*p028&Q>YFuR@n0|Z|!6d z%9F)g0A7m2>Nq*c;)~4~DLQK-zL-132+=LQlC1jOue*R4L~xdSID9tyMWD~v`Dbj5 zIFFfs69dCy+qtSs$iCG{VXoIxP@P|^KPZtP@{iM1u2FUjvVu_ZdPeM~8aB;?%HN#= zOvhNgT^7W(%RJo^mMOn^{A08vCZXmh=?#6Xzh-{Wob=7`ZRF#2j#ewRO82wb(F@f} zyqCz_cQPDA6sF6N&i&IldrXCL2CM74FdhD|fT4Y2R<5 zen!|VW1t^L&Vr`3s*$p$LLs)zATQ@KHjnqb%u031a7r9iCX{=|=`e3|7me5SpOf9F2NWg3xp_KrD}dhb9z*qTQCjkT0rQFf4J=YzQqRTTzm zH1LIsO0)}^IjBSia6qr;6>~Y*laH>T&9os(++MOUg#ZL$p{QTnSlJ-)p>%RW&^^S| zuB~9QVh!#NmO5?OzkETWUJ8O4XzL_f7glLQ6ERC8Z5-oL}Pk3y*$| zM;EDTnW*N5i#Y6!?cpDRDlMHsv} z8?2pv<*bFOz8#P*@AJ~rRoLxU6p;ZWw5mc;xW;`|R!ubjnw4~OMEvBhcZ7>lCnx~F z#~0sjF^+{PGyrk>AA9V;MRo2kf%8cQw&|WHtiZV>#&q4f{?sMK{qb7Oh!6^J4LFY3 z9+F}uA{8Y?&i(j@@hV}1S{%jtmTD>a8oHV&cM)n$MNK+>A}+mwPH^hF0B_Xxnw5pY zO_#t=hr*rvhlM&+QVIGcH+GT_-rJC+pX><$;T$|H31c5kW{q1@FWa|QrLzAa(w_Ny zc7(6wJ#(`C_v7Esiz@8lzZqgF_E)qZQlnZO0>|Rw za4ggJ{G@9*jklOP%lqx$B`=kfnmIDWt&UYR#eAV5Pd>!5?xTx|KUCrME>kWe@(gEW z><6yA##czOI)O#y1Tx@)EpE3)YTLE*^b#w{osC*YFP8Dm%D^#zpO+X^h-#&)Bd8`WNmL2ekA}y5}gF z8gyaEh+~$qRb!dg0zK1@=4;rqzDowyAADF!2@QPIuXzo21!s#t16Cw>tEME)ZBocE zUmE@}IKD+Kr3GCpiEqlw->t>K<|(N&!iS>#!8@5FG6v~iWGSc*EX^&al{@hv88lKF zE;&-F)`=0U^xf&r(g6y&FvXz!YE&Grc=yX^ie^LEu zciAsNVaeEY#Q;g`jy9CePw_pt=jB*DIGuq1kHzDEL)zbZWu?2n^!zs>1s_xV3tG7> z`ud?$016twn=07ig0HHUYX-B6$)0EFXrbHXdop%Y$CGeq!}WfyS0(pYx8~lQNd%re zseu9YrOBis+JSKeZp_#+KRj)sk?Z77PS+*sR-$Fiy%6k5xmijxIp*W& zy^&>KJya=6S6WY^+_SVS$zu;JjxT1M&g@!x(>lv@c`aWnLO5NVpNC#%7n2GIK?y;@ zCTi0SiBs^ITE+OPI6Hl}G(d?~z3pZrsV_ijeKRM1b$+J2>V3?7>?@zhrG9-)i0gTt z#i+GA6VX2mrTe)#+`HeBreCD^$_@aMm-M%gUD+ue=>Yx`WQfiki*Zf5HlxOx3_ae0 zC%qZ_UjGHXMp(#aDhxNUB7+$VRk!Hn&DFv%|WOC7c~u;GyuiuWHB>QuKq;1chf2x+n}l30T#Nu>#oc*)7#_yDLm#6Q zw#&K_O;CGd><-@NY38;E`iXl$1r;(Ot2cZ;EwxYsgUk#ev*8p-G{31Yg`!3CZN*8! z(_pyU7V-b!PqP@$9=34*KX9{)?yKpn1PYd5u-!$wm2@t#&sCi=kiH0}pe^&&QnvnJ zR>un(XNgqhmoR~oq=>=jC@+hlO7gJ9%^ILM zocq)UzO($C?orAupD!vRNIf0aN7mO~Yxh2gm^)`GC-JUBWaRBI(^SA)^Ws;9y8T1E zX^vm@P$7z2>1!EA;G%dpz=C$cpG67@GSM7t>uY=`G5)5XObz))&yC zINGUM)v;2apSZ(yqSWN6o6g9Nr6IlDMG9;3&2rla2NpANUeJgzbt z`U~y;l_O-W{X^Vu`12!!L17zu05dMiL}O4)-4|Zal(f*otXRZ(e-g%(Q+;%(k9JHo zFDD;Kw#h-dWy|`c$^5dR+yhAJ>_FI<3Ya{4U)bS+j~~8&>}^bMf&1lLEzPmbY%=_Q zCb3DxJH~!ySu}dt<><>UcY(ML*K?uz7-jyna0^Gl>}nOFH7zruqo(ZvAAe~aeBl&y z0Icw*SVSlVH;Q$Ag*T(U{xS>39tKitTj*t)4od$)lbvUNbcPpm?@nh%wH|GSsq^ap z3d@mWNf_-?N9_MwyYGVj%8&>|(H0CbRDMR{x`=P1d_J4<)fS9%p-lKGTs{y|)IcqE zwJT35R(gMSTY&8BL|}%$z~MJMKMr+48TSw4Pf)Em8c{`I4Kj9fC>!wYD&p=<<>McR zy`K2K#DKN3#S0I5PYLUhR@NsP4i(j2S3#ykFpzh}JE`fh=7+ys&!h`dV?c>UR#_HhDK^QL18mM?sHwXwl;{r< z_`T3BOU_wm$=hG!#+aKMZ;?ZxAaMir#SvLP9pX9c5=z9`?;dlSSoi+9WmUZ^U~ETc zCYzA^7pG!DGaCdh=1KYqa>n_{*0HZyO1Rj1;+lU7c8`JljH z8k8YkIo+T^YiwRPb@!>Xd>dHf+C|%D$7Q|ufyQdDf2nmRHGrqU)#QL9{ZsAAwYjXi zOr?HYI1?t2Q@2nrkUeoN_Dv1*s{t|*eKxhAcQu=m)i+k`nhw|J zU%upDyy3TD(2p$*xjg#O%KwaMt?;JJCihv@{*Q_QkzEwEUmMk-(!TWh;#=elQ<;k{ zk~WowL(>C^(bX4Qk7Nf*6O(n>zlW58o>CyngQBd^8jtUi-CUoL14=#@DM;W}IQ&M` ze06SsHzQ$p_^RS%%nqz&k5onU&~=6ae7i^(Z>3&t-0zZAW{wje-RmH?KXO+`1S&sK zqcTq~hJJaftMNv?8~*~-F0 zI>O;5MVE?74(O3ou8Pz{|Ly}a`q|>NMK+iXt8;~GN}{GJvjZgfM=bkb*B*qm##$OvP|C8QTWWU98@O(qeDJL& zu7MB-QpvrRJe3x@JEV!-O#O#jr3c{!oiecb7=;F}dBXIC&^g(wAW~Pc%rc6kaKSXv z1GWdeZcw3#@7pvxdOT&3hqq2}w1P-1?o4D!=&s-dCPxY6Q~FV6N)Sm*zslhkmC0A6 zW;@kl*o>8F_jO-7O(RlYP{;> zDiTB|#L?=9p#vnBvyQO=%mH7ajtSS$)N@cl>oy@ze49j)THZm{<;2YKu-TG`Nd2G6 z<$-qIZY}-Ldm*!(5J1WimM@#1%wJ{lRah4UnI ze_!orS?s+_ji5-QyN>cmqC*Zsp zDEF!fZ61srB=!`cu2+fJP20_zvst|0t3IzD33Yb(b?=GyU@TP~VyY*xW6(>?`NE|t zY1mM!xK-x-SC{EuRs5aJUi8z4Wc~w<@XS5o)I}CG=|usije$9et%S#=55JlJ%r= z{ijkVRIE_Ppd=JO;yh7CT7DBncfOvJ@@Ri8lx51gy zm-VDlFR4%a;T#WY2X~GvztXGCZ=LOV;xr3SEoqS}Yh$0Irqo2|xdK35c(o?aijmCH zB8VK5S2zD98epaz4Ip;1KunizjY~KCo6^#7l{<_HtZJO1>FqIUowa{~w~4!Zg4Xvy zdFHsFWcn60`s=H-h3==N5A}+R{T)uWK7_nNiHbrO7h_dOC&XRo*DC+=>oa|!&ZFaE z_nDZPainF7quS~7B>chl{gKVsy|HQ4dN=)a<_q%&`b>yK8PNfLw&=N+zfJA zeXKRaK9DXI-}8)-i})_-!B_B!gQUmfCt+2ShicmWv>np;542U8>ZgH5M+C)k$qg(C zW7n!1Owq0KM!r!uO*bMA~c=AJo0Npq|xhU9B!w0B0JaRA&ZZWuLfIY2#RiIb5ui&HM3zez99z5`k1(f(A;w$R)vR#5b5{S(hD3@+0D^ES)#S8rKM)47loT;Ai7o8JGyII;fl-l-dtPa~HN zlb?Q^EKdrjQKuKGN)@>mk4X9;9J^SwK7Cn=qyZ*}D>@vPg8X*5diQGbsfGLEhQy;;y%&QMzqLPJ?^- z*_I#NutTzgrM;qyf}pweco4hUg!-R+F?`Gw^S?EMv0~ii|9K<&f3qhr?ZuEGqc#g7 zLZ_X6ClvlUt?>lY+sr8xPL$hb>h8T{M+q_b-{A?K9F07n-1wJ(=no83P;IC1q9hnbgzP!VwV) z`0N~dORdb57Xg6V`L$WEny`K0fD1SmJgI?-^I)8nxEEV-yVdm94cX5}oBO64^&QD* zBG}YVGsfGC&Ad7mpf8`gouVg!Dt`S4Yv>KLn#|FI-zV`7Vn0P9ZbdK_z@az{7*aUX+T=NL{4jk5XnLJ-PG0|D_VHPg3+ak<&$o?W)fz8pAG(Vvt9?VI z!L;6+mJ5;aGoje#uxYE`(nD2>gEujqPu``jcD zll#sGSg@~H_wNMeu|l(HvXtDJS8)6H9u%2iziqFLVgTh>V?FF# zxaf+7Z=se|J2=SFt~Qx3B`<)rMsPu3_Z-IPJZ28Hx!w9OBglX<&Lh-4bzs|e^T>|X z&nPdJQn_Kuts2_S*PAQcmw}$sh36#U1N{uJGHidD=e=8M&76L%FeKBCW0l@S4DjDk zH_OM$SF5=PcACvJx;)G9@h+hcO%*Mqx70R~{;;NOYY^&0n!(pL;RoD zR2b9O+B=g}#nd&ea-9no=vVc^QUEIMF4WQ=;!Wjr{a(vmmwW0SIO}(;Yc%Hh*E*ON z@#r@;y@MUpXRvt0c=A%8!RB^tPI{f1a_Vn|lQt~^)Z2CE$pN1%BxNeuS8Jv%`$z^L zyvLk6jSRM9s*zF5_r+*U+XB5W#yok5`(wl(H6D%jvtB!hWcU%p@_xP3z_66nfbj6( z@0V8g*qVVNq!a6;@fR9?TIG!JoMZ$!_q??E)-n+rF4v=#jSt@GySJ0jC7O*f!zGO8 z8U7yFG(;B1$FWo?YSVYQIr7eF4l1ado%h|Y!hCeoaPtHs>U$f~k_RhNz+uuV_7CA| zEp!HUI|l#IiD;OS@=ncA^NW*4tt*tex;$aey)cvEgDky$`@MsN=egGp?ab;epCV=U zk>K10Zd|<&C)h0qQiI76KeB}GHjhrib3O8}vohbnapg)WiQGpYtXx|U_suqAMB;A3 z&vq|b1fxU_H1O_ANQkK1QZ)PwCzHv579M&*+lGTgc1iOu-Y(w4-8qV7v zkRhI<2r1+;WOQ+hiS2~*XMET#&)6YdFp>YZi?b6}d>=qE8GTa(6GUpxxFE6ZX`_E) zOG)M3{P5g=MIjzqb|=r8X`TPG#kc>R-qM~+iuh0YFRkMwf$8QT7B-i3jd^064p(&{ zjDBV?-y-~CDRdXrfYicBcUNba#Jxzx>O;LYuszBdRPeo!h&mdGnZjDYAhR3;Y(9+e zsOLJzVWvT+s#n7lvT$%M84mmLu&pv~ zy&MWf1U)YzJ&cBKcw3G2-~I%xiV0q&FPS}bh_)}S2@{MX;zY4w6S>GJ z@#=7N?J35QHp-?){oBCZZ+H1i>kp9w_^q~5v3V~RMgvsl1*XXKEoSZag;*-y4GRRO ze)LU$#q<*Xb3y;aP8LD{oXE;yAIRr?3CO_W$AvPVszpX6Gc}=^l{F5?s#N{&-8< zI+plN3B~M6e8DuixX3-B$!*~$CVoEgU`&5#{U)E0cfjTQbO&EVC-CPXv1L*}>+YV& z5;g>#4{yoYrZ18Y-@EG5;Z6Hr;0|m-p4 z&$wU*>uzwU3)i8`mtto<-JYMF@JwhYx#ecIe!H4v-Ov<${`gmMub14 zs^^DDp6&GBE3gskEe_4pOOCCl;_q)2;@d`-mz3mu@ho<=RNYCS?TvE2ut)NjTyIc# z)fAGe*&(QXWXimtT$#0{ZER-BP@0oEe^P7BrQBBLW50;=toG1P zzUPTm8X%?lQQ^dnD@V(&V zXcMn29yy7?!jbE%o7;XdPZ04BNi~UhOLTQ{0fq9tqme$MC2&kpyy6lV|1a4Ne zDW2ikb@|6qDc{Qc>hcCeATpWjGkqd@Rx6TRYt8XZt8cV)B7Y4vs=R#{Q<@`%Do(n# zYkX3%{i&JD=6w6x;t#<@@TppPk_d~>B-*$w_6W@O2U9F+j<_DAl7_F;qoXPxS zn`q%(Gybs4+{Y~_Qr1kL@n8&KmKO~a4jKTk;KyU6+wBzfR579NuP|)n!w6!0X?A?P z?@Nyv&Y_BYCS?>V3R|z>(x_3m=K`;#g$k&wH1^GQ6nen>klnPwH96yG!-A+_(Om>F z;>A1-0cgZi2I)@+zSjhg`X?e-I*Gj7lS@9#*jUHBEcw|%79t^s`|G8FqXzH`*xD%j zX8(_Qhlu~c!WL3!X;-^7KW!kSkU1Q?r7yPUfPRW*Xhj5_*TK2AQ@`LbPG3c`i3sv% zV}eG=)|4PobC&`H`Q-PuyLJUtX5fb+S1T7^k*YAYu`>>;D`%bZj=%<7-G$P&%8Z6S z))8DJ*ZsebF*P4bgAWm8Xh?DSU*R1sehUU>?OAU~oLBjwiNTzfGB3B;Y{*swg(lOV z_(S{#C9YQh^yXnE*I)89I}WM`FS7rz3YFY1ZkiQxWxBqSV<5{XRd%ix2%E;) zji~v?=kbEsitS--c9EI%+OY(-jO*Lf3w$o+p4y}g!*7LUTlgq-Q&kEhiOh~LP=6uO zRk;Bw6n;U@Gkg(m^W?Mrv;RfaTL(1Zz2D=4h#(*!N_UFVj85rBx=XqlNS8E7cb9Za zDcv%p1{)#W%z=O~8V0}l{(fGsm%o4S{u%7v=icX>^PB^mSwYlf>`;^q_PoDn!bY0z zX{geOo_E#2hiVeK+`_|9frlWZUoQv>dJ)R)@P8t#k1>b((9_*#(vWHl zWASDMrT9g!?o;vJXlDhzQk9HxOC4j=o|Lpvd0=)GkglFV0_=W!;T~)mC^T`uivV0K zfiO=NOHLbT(?+xuNe%Y_(V9 zO!AzdiM)(LEa0PM#*qq#7^uL33}(TXKEcFXP#9 z$Db~rph5CR?G$@{WE8r>4G&Vi5}Ho;90_gT2kFi6&<;4oN+RkRr+!s(_+MZ4GC*)A zC6r{sBIePGzlDomvOnqGb6wEBx$gRKP%Tm(w5o{SBlO+pJ({6Tr9brJRd?8h4x*eb zT7+fKZS%m(sC=MQNS11ZdlEs%*zIR5=1QVhe_@H=P68_i37vl-(giQ!X(kytiDY$pXgCDyJ~zZA@Qrc`71<*p;?Wh<52z7)I`( zqO7WC_CtE0DM*WT=Z8chZ3oA-mU`v5N{bfad&dZGVfmF=aLTTDU`~^4Biv@2(iOi7 z)6!xpvBocLtH*G-?S#fi+%Esk&3LwB5!}1>MX^oR7~qYqfij|n8S$%$9lyXL{smDa zJe%WaenL;Xom5ND#8Z5g!{(yoMilK!Ifeq6XZhX9mmkJm-ND*+MTFV42+eb}-ej+s zhW74Yb(d0FCN{hN@b8VZvktx&x4@q;ZJB^B9nc4m5Nv2TWXZ-$VZ|`?NeWK*i;j41 zH}R*DdK1GPYV0jdr_(kW;xFvaBU&u$I6HPpBSKeOm)O$6$)tE^0h}ny31@hl8}(Dp zBhmCpLVNjLM!NM&uFmQn*hM0XT>DJc##}P71nZfSvO|N-=J9hkka4x;B#6oqyr#9U zaM)v+%HrqG@j}{Gp0ZY=ax4AIp z_z%fW5cxCHl7z^YZ-|aNhUtk5tb@vC=0AO zSyfb9&?J9~$LlhHElYYm@|AO+EgTny-n5ypaL?DDygYmMN8(HDD_G4LY+=Axq08`Y{diqyQXT4hl_2DN z+G0O9IGU2ye)XOmh4^YAQdt7E)Y@C1+mAt2EbIWeT3@CKfP@ppG&9NfT@^U|EsWa) zjjs6D!_ATCy0wp$1&`uuNOG%?Yj?t}ce^nALl})B5uVvNSa%&}iA&j6c)S(#4EZKl zZ>%Y75vf5%H?__*MGntex=vkrL6qO~O5KM6-xzo>f({Cl@`$vbB1FSt=V74ovD4V! zD!%q#Iw)uoBXA$DB{EE}m#7b1=H|Sn6l!|KEBI!A7XzO$CpSgw?2^KMo7cYOra?j( zj$nyzX)lGTWT%j5VKRUE_#0$z>`f7cP9SiLN)=DyvlnZ z3Nyz-Qg$&=a$QAchQYpSNk~lP=0u*r$G4$tS{g`WD7+-R*i!t84MmVOpXc~)HhT@O ze)AQmuGea=xBQRgLOEtjo1eQfq&gaHQ~sme_}>lAg&tDhv@_lix@LAfn@6VT#aZqQkO@b(1CU;>w6hw8FF0Q z!;{9G?Ha_H5-+txuS1<>zPL2G&DzYS4o@h_v>ZyCp3Pn$t7+a_nOV9&@ypQNhFKMC z+Gr-jwbwulp*-QXPMXi$eK#>) zr>o-p{fjr>wzh`WZsrCR)42I>rz%4i=({$@!EKvIR{?p9+oSmRwb<(6$wF1c+^MoT z5?PfRG`czbsO6Wu=KkLhwXLQ7R|Xv?I8K&={IUhyc)}&voMhy_?(C*nt&l7rrtPql zRl<36z=+uWzb^_lRVFg9ISa~Q=8;naz7Vsv0zTp+5Avvx(f0MyGyU@w_H(eFOqAK8@irOaV_3sPg!SNU z_M}xJ?u27)Jo+ML^NLYZ&xzJVJFd&Fg}?R)XquJb37bSb`@CeBz0CiEYx`p677kJe zQB#(gPfH_qRX`A+t;ckrle)>i(-Em5?zAMrc+vLvknK)oVsDf`Rkb4#u)gtXhBNxF z1a)dk6zS#bW zkYYU7a&H$NPW_c)Ok%dhq03KoWpf4^^WHrC@ncX8$62eq+CWcBM_Nu(6(lJm2i3N` ze4!P=T0y;NFH;2XULfk13(pbY@hI6s`8cYiOo%1wYW*2l2XxSd} z5i8L`3FvU#mGsUpJ8~{n$COQ&-De-BB-$5EhuVf0(y20Gi_(JEqc;0xTa>{{61_Df zD#7RN6fjWSn6R*qm*|%)$faToOU-l&L`92yD5co0*Jc5TCI#^Kf~)rvoDY7CVEpd;J+>jLNa zT)5Vm80GS<*lo{kL5;teJo4Z6!$0s1T+?WPX~ES%$WWyyn9 zp~5mI*5~@^S7qOJ3RHd>AH{mO9yMA$khqmK3sb&qJ!!=-eCFW%oei3S1u$xOQpan8 zJ$d<#(ix*1O&VEmN5{}+OHq+xK?_pA3(Q|j8TZ)&Dyd7@M}J5wySke{Z>ISXW;p?3 zuuS$Kz~-s~_^eb~s~YuCQTyjjXsGbBbBr1%6+9aCpfi0zr_Qie-C*irw$%a> zi0QYU^6zY`e>&OY1{*t1k6mo4T}`rEr8>n15IDq14w76Rc%Ve$P}{0TR=NCNUuH@T zBK^}Pw>%JxZVl($frk6s6Ir4n$q)2W0pKrP?M++Pmqj7Fr(od-!SX4=wDGv)FA_49 z+~}&!WdQ(UHLJrh0OV!X@q@RjI@s04+$+zQrpGx<&L4fLk5UQ8W@(wewF`v!a%lz$ zkvsqXnCRz6)w@UfyAAv;F0%urb8+sb_}QqYnUXxIl8WC-xvJ^PvYmY7eR8V4M$*;c z`R3{LPMcKLM&Np$;Fb(IOTi^--Vz0ES`LvPZjfUM$`;r)08^fxITt;O4b}$w@UdVv z_m}YOmxm04G7^QP3Jare7Dc$tsqKct$nBh_bap$?y(cP^4*(Yn%`>;(A4iZ$mnS;c z6`$BOzz6}2IH9~SFXa9`Z5MW)O<`Ab%>7%klRn22pYZ3; z{4LbXKKa#C4016Mt%9Z_I*0j&CJ99L$iOF&ik)^ZzZpZd{p(H39w6Vw#WmB)FQq-5 zK>Uj}x!E(gjnMGye>lDy%^!L-@Kf^jlzT5don>R7yxFgAAO#D z`-x4nh$)h@lhcFw^;9>3T@NxfjVOS{fZkmZ8>=Hl?A zs+MStxOe>+nkIg!jggaRRV}sqYL_E*Y_d(q>8+Hx1?4+6Ty#8Om#e9!?3xc1aSDHy zc&&jcG2^5044`_tq*iy76;$}^?6ur(c8+>(RpXbe6ZOK6 zZ|OFu3m&86Nog8b?7l)x=oxV+)ukhjpH_{*tUnjdv>}3+f;k&>Kj>QnrY``BTX2xZ zJ2ront3ki={c+KFDdtNRU#n+_1(fM90J8&(5#S(MlpOV&7ZMUh%)v1A(xv1wAVIiS zRnW?=ImC|t*X>n$7&nb;96k+0*!=i));#eDuU)Z_=Dg{dxMbiPG+w1%6qE07UvQHc zJk`}8BZ%h1&KDuX+?sp&NK4h)P{Krdtaa=ZdV9xX1%J6(ul;2+O~O&$B$4kn(KqjT zLkWT}ny}O<#xB$GtE3%{*2!=@ z3>Qp&+9_8GjOQnCoZO~c+=ggM`<=U(mF6M`R5q_uumFAGF>=wmq`k-_wGXV*!-u!L?w{irMyWEwrkDtkInGtw0bqpjNC0^Gam8cJIZ`e;9Y) zd%|clZs<1=rT_W6{@)fV%D`%yO2eaHqm*((1BS#isONg_R6VAFePz-!4rZi}22AI5 zC-?2^ciy{~?7`s`i}!0wlMw2Gz9#N3V)8vZ;`!KLjUhUwS{ITN@J{-A3?yu;I|EBT z(aZ`SixRedbLD}GLvv6XtNka&Q6`|aL6PJS@hUX2{7+{zf(oOa4y-p;+z9^uoTHYL zDde--;QzDu>yq>$PKJ(|n4YaDkA0dVk0P4luCR;O(y2r}l~3n7X;)2w$JVbfhc&-d z)73;r{+j2zyj|h#&&+r1j0joFxktMQvveMDdNsHdUk^Wj`2&3wwl##{z_MnVW&zV( zIw|WTTbYl0XBqEgVsnR^TlG>qK#88HpAV;~<>&UgRP5wDk0ZCU{Jx4ue;0d^o;KvB zms}V0{l!;xBw#4>+_*TToK-VU=GOYiAK$DtJPW(0g%L`Nwx%T^a*KBQ z6$cB)IK!w+q}S4*p4mL*T!<*5vNb28lpSAc0)^R~tQ7`KZS1R`b=zf}#WwwgLJOnv zoNa^!5<0YE?LEK(CI9uB&0Ac$=Ag6Y5I>v*YOe?^1Rov6dc43nJ!t{4Z67r2%CA78T4zz zT$qWQ8kp4fyT{jnY5K>bbcq6d#h~7(QXO!jFm+et{;Is*xBeS=;E;u`bNxG0s=?H1 z{GAO}NAjJOE-HGI>pB*CoT9sH!633t8fOL`l2veD8=<Pd%$3U+yjbm2+ z)`~Q?@X!wJHjI?PXh5!%!b8Gv<$dBV1oNUOV%On~*NciheaS3sd3nU*;(|ksy@1J> ziBWv6-e!<)fyI@v52(%UZ4nP+Rf3yAJ}Hx^(#sbi3fiE0&y6y$a@Rv`kfn2fozXY0 z8jSC<)I`esAy3taxxkW2YA9>;%|A$*quQG@!lI4s&v{ff-U3Bvj= zw;r=%VL@O8Ty&eYhQ(EIir6cIH*@mn>-e6mbvtZ z82S^@T)8CM+pN!OE+~hs30QW35@+wMjg5V9(Y@?J^k~Q1Up>yDbW4@O*AvEMw30KA z-EA_k-3iJ4h)el`k%}3n0XYyD{bT_10dJyp51gak?2wQ5cwg*vNzhB39H}98z8_$m zu-Bk50H}v8uOmxNj!)=C<@*{DLC0KNq9D6vZmwaS#`B=xZp+pw4Vm&kcL?T&$?WA) z?z&zJ;VjyQ6QM8k3kwH5d~uO6Q?2^Yb9-t(Q~LQ{myXBUD~*Gh%!MkAXLf9Cs3fFn zxRTaHl@rkulHPk!M?;Q`aQmWUVk};4&+gW|uH{rS&$v98S)zV%h}?d`a~lEyRnaHi zYmXh_gXN?g-*j$UPn8cT#$g~(iPG(Hdb7$K4Z>0PCwPGNWV=Zf|7kYIM|Y2cI9ja6 z-xM&NdTaFBeBtY6DZ}|{JpQ>0nm(7s0HqA8;|38J12H>SkDI>$zOXB6y~tU*r6Y5y zhQu2)gsPTbjCXeIbxCFWG|ZbI5^f%bj1iDh`Ug3Y+nhR`%A^QQcXW9B<$0++MGZ5G z7r;%dwwr+l7C;w9bfMVf-;t7tu5OneXZ{TNRi0@g@%u|3+EOr5psX+v$TjT}J^t@G zUi^c2F20x5{>yF@J!FAyJy+U^ptzd!B+jwOzO~*K-8!e$RWYdTxc2vuDnmaq$z+9$ z*^1i7kryay_t9BCPiz=Pk7IUzF4`Fgq)mV zd{<9}gL_>3)?^x@B%!G}+@j%07vH$sp{Dj>%Gm=dL*%C=lGWU*JnQI<3Z?W$*lj^s z(tJ3j6vWCa{&*n$T49>p*_Mu>4b4`W0t+gDsgB7jU4-9fTpCBa4bp?IYsZzVGELXbM8ddtW32gk?2c=@q${}XYO2)fN98uZLMN0#p9 z7Iyc&rNba$!2{IrAHw+O#3k~f!vOoPv*jB@+k)14nIZ#aoCR3~kccD5?z~oP_M%AN zKXTxC%s*wbFYJ%R9KR>FB;=o^KMh5kTu}#|4CMx^*|k&w&}>DLJRkZVJpNS{H~E|l z6&Cv|)=$P+uigisH`>DZc{m*wp2{@yWnn1MRa8Lm2So^6OJ?M(-1qLkb2Gj zBaL$PqAT3Erk1u>zSxC3_&|XJBNR>oh9uU|ZB_Y=w+4xlUIYY)`i0?2u0BM|s4VzJU4O zAX_#D=2uX|jW~}`SvLanZsM4twF&8t%i^=jDA`O`k9nr+6X}j?VV=p3_cz-8?snnH z_C-RTcmQbqx8En#TXAhD$8*t#sCHvGYK^+;1%|tQ?st5df`!y`vIY1k{CDJBy8F6_ zP!-*YieXA*^$XtxsWD7!{&Z0gRas(S0-fvLP$N!5NiQhgXB&ofc{@NEh5-JwxcD_Q z!kgtPES^ftf^6P-{}CKDe?}L%p2)x$IhWmGS7dQ_d^HUkG`CAn{F6xYf4sr(^*@jF zu%k^o^M989d@?WnVS;X6TykVL8HckzbMUl2RHo@p1tYnFK;g%SLem8zPDPQJFLjj? zkRI2^c!30Q^hGa{t@vkcpgj*m6iCg79jqCYaUhaVLp#!bOd>VsY`0LW!EQaFwGk^^ z?fn0N4C9{v)5ZNW9n(LU6MuXuDv9OGy1Y$bUfX%zuxBh< z^$clnmgN4^a?}QQ2Bg^Msq0V_g6okj-B!k#ojQ(28Y30T357tUC**{R-Fp`rLsT>? zyiDgl@3m9RW%oGQO=F}wIusp40#;ESXBP*ZNly_6$SjpcJF^i?-Jw9-SYQ}{`OF4pE zh|fOq&~TuSv#+=acnas=-D*-fg8XcKe7kZ@QC3jU^8Yl|Ew6`Ma|F^o}MyLri)6)5B2>2feSaECl_59tu<_w9cHQeuNvd1$%9 zlEP@mB!f^iIgYZgArFzNfgeVQT#ogVXR5_9w)Uz>8`tyI-}G8{=VR?}{eY5do1$!* zC{Qv#si%S3%&QQ#Rh&qHugH?%9iop6KR3O(;4C%EdQ9*RZxZc@h8*h14bHSQWoptc z%mvPrUsDn__#NEkdC_=sEMY-)e+O9u(tpa67VU~vI{qsa=I5)B ztz$;Tkhvy=Y(|~TBMfIx31FmrSlK~9v`Vig9|xg+-w0qT&#H<+z3XYc@Z=;2*hqcV zX-~E1OS6|$m{-<(5cZz=86GfK{-a`lbs;zSXE1ZB>cp8fp&h{cU61|8dSQ@0Qk&m# zePg2-yD^X|?_K(}?3F%a|NgGU{io<3iDg6&qCW~M#&-+iX4(KD7AiCNT{>N8JgFtc4!BrdWt_O%MN18O)TqEYI&jvmxj$|9Ali6tafDL`VUX zt>>r(AdsA%DWeoPbFw4Xl2v)$^LN8lv|wYln7Z%F0FFG@yPL?esIWjKv#r|zKE^|k zm&T4dU*RjdVa}=omO4M<_?t7rNoush$3H!2NSYgF2OC1bUt4AhnXb*3!Qah;(v)*9 z{OgkB_Eqpt;<~cA-+58+ObhUlN#z;b)G<%>YTQaQzcH!0=_fde$KvyaEv22`ag-s0 zmEdoWS4|g|>3rv&MCa)0woibc#Q{G1z}ZB zV>NYmJ0ImXGfsVGrdI%INSM)BQa+6<6rsFsemX}$EQski-b$DN_3hOlE@=8~I_K;A zjTiD=9a6)Aau#;mJKo}179^a?jR=&0JZtw33}SNrq6QdgFk=EdbeGBd%QF)tSe+D%+b}D8iX(8SJt@^A&X# zx5)rgq^SJRLd18jvC%J9D)pMmUw$_-L(M9jHi%p|eY2El{VwH?-M+|_Ua6%_w~G^J z99*SqCFZ|pBC40 zD4O0jout|cK`EbuPXcw-5FiHGrVc`-n7re zUSH*?B&2fOd$rczo2(|@)k^0TH`I_zEFOH>2+W-G5h{3$jJR-zE05B>Kbrr%ORc;= z?wD-5`rcbh&v1{Yu9x3A!=nO5f%?C#i$$DOFinIc$`<%88uIe0H3!v`(!|Nm(H30k z2fNJo0`>m6k$=DalU^hZ|86J$&(fc&U@6rn@N9w0h9O4PYHeiKIG@r`KhBQ6>3gR@ zHQ7guz0d72<61gzfar8OQeJ4jHmWBk4BsV_-av78vkE?0GnakSab|wkQ^l^zOW-uc z#lQ*u?G>Dy%k!E-arOB+#kcUDH%=Arjqw%;YNnz`L_LGv2m--&tU` zD#ir{+I1?dSE&FPvMXjk(A`iD9t;D|F_I5ct`DG()+~u~B1x|~BdyfSGf|DGkaqG< z92-Olaj1$BZI&Mo2xV%SY%L{*PK=XbSVQj2x%3Nz+%Z?peWlXNP`OXqx%GTC;K0Us zU9=^P{BEO_5iqsfWjPhVvcpjRzErKjOPq#~hot=hVwXJte3ax+T+jku$H4>m72J44 zf3~<@CoGhIh>8*V4pw>?-yqWET||iS?jbUfb}3>Z3^7$YFBf!Sz8U3i}d8|ag@doQzZQcEI z+}H2uP+iT&U(hPX@F&^-T5jrajpX z+<27|ax8LCXyS&%TjZhgEkFMOrL@Ul1m(YuK^eYG@ia4r;xbpzPSwVWhWVDC*`Cl( z)rt>1hnjcC#<5;3H^=B{4~{iNo?4t`y+-40NF@ZMe$s7mjAZ!{fTeJO+HuAJ#8&NmI;^7TFls7pe1` zv1W^Jre2Tnh`Y*N5g6p8o2I#yU^QD^MDsa&HzQ&xe>&fCZ=TGX{6mqq+FEK9$8lzY!| zSb9>GqQYQ<@GlfpG6a<~^^Wnc`yRDHPEoEaBfV|!q?7Ti_!}177)=EpbMH(?8Tg%| z7}*qiFFOni_5xuzcJZo6O!3LC%B63%Na-6#$>b{3EfqTEh4XT%gK_R za~M{~yW{M?{43`U$lFh1u7{IO4h8B&)7MHzn_$}dB`~=;+G&0>lOqiYx4eo;vbNEZaqLHg4-`A zNS5GET#2APMwz!k_BJa=L+4f>)fMwq>zb^S86*mcan$%-=!g6=Dm-jyjo==>9rAzK zqqgPDSmY@J48_cmMxaPu!WS|RC$2ReYT08Xc{gR>57l|Ap0`HbF{zmmZCCtO*}sWggpJar`Bm9()+F;CU1%T?;y(-Uj@ zcN6ocQ3m@WgO#7z86-M7p6m{K_H(V(`xj@Ny5boxD6W+lB{1Iqs=DACSJ15y3*v2U zX-lhk!HTaR%vL8zV8;d4&asyo8y`3knndzM%1}DuBcCNKtTWUW)C?mHrH=IQ#o{g3 z@|bH28dhnJQF$XY_~AY@uCr4Oz7mAwt~LEH(DA5^k=gHWSwi@HpH4EB#^)#xFKtrn z+Juwzpo0*t!U$Aq=tVOG$SfzRg)1vso+BrOB^03Zl&-9B?QC~f!(f$Zh1=Fy5wEV3 zec{UJN@sNLPA8dNwd_FcT4*IBFvc~u;pzf`s#1+PKLv={^#?{Kndzt2WV`AK#z$%Vmh`&v(YOT#P>f(A53d=Fccay3S z-kK1>$KU(sWobxe_a7fM6m%-*@mx(vkNg;X6tc?^ZQ3<|0|A!P_>ycGn3U3Z z-FqLHjaCVtc&Hm3lGzR+yK6kWP%3pvL{l?^DgdGx1%2D?82B;nBW$usy8y3lEQ>2t z=98Hhe7z-AO=WBOa+HEC(=y5aBioGTf@p+Ey05N-8tD4>uB8DW698pXlXGYCXlI%ufg4@UO4#|5L(_T z2z)Vv$wDyecdych)PACP}mm-T{Yc`JH~x2Qxq=Iwe<`5+0@jOAALgbGbtsDxM@J% zmA|fpjAd@5w!Bq}-pb0U5@U{~ide!z)!Dg!6YI%%%1B+JEajEC1vHvBSoBi7`=Fqb z{Fb8kwe5phT6K2hhad&V|2$!I%*IbT?M z`W@WV(wh!}ON@Cl{<5ujYc{Xzjj`bBO(xYl{3X-C$u4D>Z-jNFB_)DA+xQuojRm*5 za*9FyUX61!Z!Uo??NpJy97fI#Um%}jXl19fwD9EY)FY+RX$e^qurz;2_Yo#|>Dw_2 zK^q5B&B3C&e(NP&|*Tj&I9QUW{nikzXOvoH(T>4VQR%i4hJX2XR`WrI8(N zLfwzqs}=e z$=e#oIXgDh)$uTUa}ZK^@oM&>QS#Y-Q6f%4_bT<%&cgk}J>#wN)Gt`v2qN^ePI{x| zqrfKyA%b9Gn_QnsY`WL+gLnx{)iys%+QHkX}(4D%9`+zt!HM{+cNDtI zJ*f!rTvjk#9f7LfsWRjj?AW`a6jswxCHRjC$=BsjF^#@y1O%{-@|;fEN0|GG%Iv&y zNvsMyjyw}BY(%O!V~cO+sT)$A49m*1fk*cte8`Z;!Fd<4Aoj-F!86pPEs(y?$Kxa; zv7gj-OQwwg_xkoD0roghoFwsUOKiJ_95R1bT)+%NaTtp}%p*U+L-m^Fh!O2ZEww$I z+x8}hi%)1P*T-Ie1kf%$0FRLjJA&ywem--AXP?t=R?QuGP4iu(*iL_?Kk9b$+$?A9 z^Gz(Ez|+iw;Qh5ARUqgTTm-PxnJ`X`!r~F+DK{(eOCMpF)JlN8Ksy;XyJu7mM#^TG z{tT2O4sdvwlgMf2Nb8^j8}g$wf-dGMhJoM6FWQ!tRWnExC!7%!>djFTAg9M%EbZy| zbop35^;F3nCH7!y+MAV#=AGU=-g(;-g#{rC3r`b+pMXX7EQb4L3q3w#=wT_D$I%D~ zdAKd(p0BMp+7}TfKf(hHfm#brXIxs1Ws<*O@g_nV=Ec>5o3Eg!&~%u+f#aRTVQ}W1 z#Zm6*#Bt~QMJTx|@A(SoL-$6N)1nY3o;OYPuU_9<=xOe3qUO0ci=1gX;05jX43OC zbmoW6>0Vj$K4+f}kUYZ3y3!m}F+y*9^j)8OdK-fr3J8lN%NFjFfo@iBO=%>{AfUUpseY(P~&@OQZ!N2!#_GjAa}+h<=a^GI^cFi3$g0u&aY16 zLT#8i;uhfsx5l-zpeO`rP5C%0yb$CH_#R8OzDjBUTGhr`z5=bFT> z!y22&#Bn|MaLaI?1L>hV!vn>!1i*>a5T8x8&*>xAZQCI_cBi2Rc)++0sMvBy$Skuy zdu52z(Lu~K>DF0x!q{Mnoc(SZ`(yN|Cv;!@_~Y`Y4^1B*dKWZY$c}^jvV(&BDx=e( z;`Fo_i28@(vGhnOp6l#Y+q(mp!S(E814FZI6EK3Na`-uZAP4=n36XlQP)PY?prCA4 zy^c1Ahidx>Z+E^l@QJ!}oYg?<)KD4QI_)byA_SX}5u4~2McZw;v$_giW;bfT>(c5m z5q|6SD^z0S>6%o5cvaI{Q~=VTqHeWhOUclF2inZXc6qtfh(13tt7FgVa%hbc1eF=y~sG{l}L*Y=6RUvkU~ zjF1JSlArp61e?G2BTC_9ju;V0`Z0yFAN#s=K;*bL!*KvqeyyTJb1PGtmBIf|0t}_O zN69qr=+s?%)ZuRGHu;PIbD9FNw^om8QtG5q4CDvnZp&4;>Lk)76`AoeWKvj1_!fO+ zpmE`9l*;>F7HC!<J*_&wcgB2Ry733dSIFPzBW0@(>tcJ5>z6KMH8{3Z+kt?EZ zSO7ndO;I5sKnJUh#bdNhf5;~tz_@7-#b8NqG*f5G?y ze_;GIBuVRE^-j{f77Jy^5ZxRTP7tQb)B;Z8=eRlDsueujeE8)>;K<`-8%1&}+OAso z<%BoufppOu-D;D!Enqf?J#-YQC zDj#F+_Rm1qh=s)<<7TAg1-_5j-1*?B0KW*OyTYVfxo4(YK4CKb`RzK8C)qSvSlh-# zn+`2%FeG;C!SX}FprbSZByQ1{_dDIihntYsN6^Zhxa%Vh^n!<2V-pFTOPd>C#5;Pi5t1AYf^Q2 z>ZZSZB3P?@C*(G@+r{I>USPRG?hMI|=rxNcn#H+rA!7T~B}eJP7XUV&bTB=Vb@XEy zMS*kl;Alz2ssn@Lr|eH3xPjKa?v&GA$?zUQ=FNmw()_?|!=)eJ3w(y_yJp*^YvxD2 z^ejCaPZkp9?Q;1zE`A^=?FcIHpBairmB{XU%^fx#Bqj1jF9oDFQp@h2%T}%|uPM9o z_?Blc`W242VqckToIIPRrVO4wY%1d9;?g=zEvtaL>Pe9J?v|WhZI-AQe<$k<&ahg9 zv(Qg<5r^#VuViK`NRx3KeF}mFJb&zKqXfQZO19#Hp0P1Pro`AR;UwGZ+mdK zYMcdi{C+9s=&XR4DCZ*R7wmM0{A50(lT=%bm?N_qOw@d+njz1VEh7wdXP+1a^vm~7 z>HRds5w&X;l*4vNUH!m)%ox9s{Zjgl?11~(CP*^%w5mK*pdiA=xLv{Tl_ezxdZ1jN z#{;^+q#nJ5;EQki`aRUY*Fjwl9!yND^RJKh^sai`nGi@HVL<(RY$m%Bq4^iN;<9P& z_boLvh2kPP49>5uoki$Dl(l2M)2h?b*oCJ_5W#UZBy(yE%4xhRB(kfcFbO5hZ-D>I zJUO!~?`vh3gkb<1Lc<7tZ*cF?)8nymqgF>iwd<>0I>uz*(yu+!AoJtuwSD)M ziuGEdsjzIphQs`g=E2?IoPb|R(l6I;&TbR1s%FvDI2?4D+MfPvT8{VCW7Dp%8-XwL zVseVRk>G;w5jD{3uct{`Esg^_%PYvPH|av9?SG<%_}gXd|EPDqo}`ab7CW{Y=f6IQgf6^M>}(E^z~k-+w03q zx2{j-g{WZCr{|g#SJFzk_i38@tp&Cw=&H;EpW)?Q2e2mPOWO!e-o{GEXQ^IbXE;d~ z9OqQ6M7c=g_OhippU|+NNnP*|H7D-kVw$rho}t^WYVhTH&y%6`5$tug`yx@uIl-!q z-nOaWse`H-l*a8_2~|1dnx38mc&S*b{=Vbb#ZQf4+wkd<~v$g{_~9 zVj={O2n)hEQdoOaw=EuBSxF%faVW*THB`YYy6KOzYA|fQ$&q+v_lY-ox9n=Scrn(##=ggiELpn#L~Qw@ z3s;`eQ2Sr30!3_n==-^Abs`~U@VSWCv-OxDl{TvoIScfFgRFZ zOCo`}W%ZfhGt}0J3+5NlHx4>eioK$rW@BeB`}XY{KtiH025>5WJ3g*5ImWla5%mD) zBF?!BwqUWL*ATVkx42`-9cS!!XoUv|coF1Z_y)#M1{{<#Ffz2IeR2>~C`_bT^=YC_ zZ4S58bzs2v9e+r$aH zds%kBQ9-m&3cbIfk%#Z=CE3k*wDf12;MM2-@>pS`bnvl>Y9h{+sRndu%cKj!#RnYI}iLa^d zKl6VDcLlGRA~p_^gW?!b`5cqi^;iJS-YmYUN(S$Vto)Q`cmPM71=|-26>7t1SaBB~ z$6l)p64F>8?5zyIlqiWW=GrrhOpwe$qZ`M%?;YfYN2;B!fpV|@9T$?tzToN#asxm9 zrDRC#YjctZ<2nNddHQh&_WWk-wsS6%IJ!-mJ2QQd4HK1LIn^2G7t8O=yt}(g{XDI=lf62gfhO8!|2Ky+U2NUUXPC0 z*;v-#0yVe6{JHXSN;15uLfqq;`?|ie9FVT`{BZfIRWmEh49=3YtOGpF7U`l@_1#b- z;K~Re&PlRdrak_Y0LeTnR1jq5?undZ)~sL%jVZGKxxe#kIlsdv-^oj87q?;wm?zAP zJiZjS#REX7izjMk(lWALI%n3GKRk7c!BiFuKgpY?-abA9O=t_lri4);Sz!~rBLKbk z)`hgD=Oh=?uZe}Ge%TpsNS{AeW<_p>Db?V}q(+V9pUTZSoiE1M#$ejZy^n;x@XS+a9SL}sdlZs^~oMUqDIl*a07Wt;9%lQ3tV_)_VWr)e*U{9KM2 z4fx-tmN`sn_O#j0&nxFaji9{l`$+It5^Rm_A zud-+Kv+4rA4G6EkJE{uVy{sJ_MVf*0rX*8~&uFgmZ_EM@5se5rA72c=c#k0P2Tw&x z%qiE$5`433j(t1E`hXy+h3pUf#9xl;>t98g1Iun zC3#!?HR4URm2rh^-I=BbuCe3I1*&CkhM_H3VS*M_ z+jm{z5PDNjuvIMJ{Cb9pLDs!1h~}kHm}{^#D|3}$?odF)S9hoIn)1?vC4am@jDKp` ziPOBn#gnXWlE~=Qd$()`Czjv+hj3k2qenpvBECi?8h`Jj)5mDUiCuk)(SzYQ1+vTm zZT$@EkHin7Na!A$InEGZX=4>dpn&N(|BE+R05;*H!@bwuLXd2Ht^mS&h;a83`zmrvWr%Pabj)*K^*()C zEV78GezC9AEIlx`eTpL6o0wsQcP}XlJP++JEG!%3EUXxGHLEDm%Y`e1=gde!wY_U& zzRhOkDiV!BND*#KszJZGRD*6SPZD)CEj28=-dS4L@ybKQJs8;m=_qOii@ymoM;66V z)snvJZtmu-It(6n4WfqNgU;K1aE?@BxPiZSknWURC=KwZZq^CTT!^GrvL~YXJkR^- zOEw3&pym3H1SexVC=AM)2d-B`Q@XP$oQ)@w_mTE6`?>!FZm ziH@^wcpBd<68h}|8ho*C3(usVGEc#ln$Q_x#nEbp1Rw;(96z=+_ojb2znHZ5r5h7Jp79-1@n zbUp| z!Td<}Uq!XAH1jNk;yf1I?W+qkzWo!o8+b^5Rew)|kUZpIF3&;R5zx&}OUXK)cdkiT z?8jBm6yX_K7w5n9b$$ZFMX|tcP?e!*?mk!n{z}Sn06UW|)12*qFGj7hp#9^W;t&6? z`#NH(LhzPP^c7cMHA(WF;Wj$hX?jLGM{`+jN9R#)mk7kps%ion-L@|$Do{aubvi5g zB7NjzAxhARUnjS`K~}q2X^^K6Yr()PT|+Lp$~7@68`iG6SKNexIbt>0YBV&U5NE)6 zB}Z{s^}xKt^;GAAA;H}!lK)I}S#$A0jCgsbF-H6F6peJEiU8v@&MW7R-~7iD8`E;? zzjtL_Ko3Syov};KzHXSVawM8`qg5lR4n*gZFt=N&5?KOFY5kZQTi8CI}&4>s+mhi%4^u=1xfYbc%w^@7T5YT z#WjwZFS-Kdzx{wVyBwqE<_pG$9LCv;@PfYK#k>p=3XWvCu0fC{*)hx{Q`x4gDs)69 zKB8Zz|JJh+O`N_y#4D+kFz929V%Tf*ncLM=g#G#yPT-oG6(9E8eLlNdgeDxUQLOG5s~EOMDaAPXp+Ea@3-Wk^5>s_qwc##vL_mD;$~ z!L^6&!(`gdYLi*XUEq~MafaSp$mB%zu+TtA(hJkfL!dOTct*RtpV^px1V|kcn3S3s z9C-JxB-?6o^M)99#x1Eb*>%mK{;>X%)M8jW}p$&HMnxyd1^UHnS3nPEbz%P?v`;AgIb#3Ru?1I*|Y zi)AwV%8u!&vG}v9^FJKii}0el^%rJk`WBVNbu~ zufVmz%J(>gLP<3J%e5V;X8^iv`$Gy_h`hsGD0G)uPKjZ4q387+=0pb-N`2WKEm-PS zMZy^cA!4WchBj~p@wh)NW=uF1%Se&pJ{q3&EVAkU-y*}}6M6veT?K^T{e3=Y4L&vI zR$&4~vi|Csg0M4rS~nq1kjom;?Lo(QA0Ub13g@MCG8JAngOpkD(fWw`=(ppbmm_8l zz5%SV>zhCMoj%h3%4`jzf(dJyTu694j6GitlH3yVSP;wg7u&YdCU*JbYEOw{f`Sf( z1Cx}w)gfw9QPGX>|7aZ^+PS}%=@(!a%ZGpuomJSoo+iKxBKSz0TCu4dVxdHEt;Po7 zs*&A`z2wXqXimX=eBpt`TI<+UU2bKnwq}S0fzQAJVJBLh)%iIud6r^l*7=MWHQ4;&5gZ#H!$|}Iy>*V1;3!vKePuyJ+Ppu6Tg=S5625r_cafx7xMYS zmy@15+cEH0jr)`{!}3d4UlRuS0gZ0>X-pH$z&}cDYPt8i7i*}@p>e^N-D=jpAllAk zeAfCuQrcPuZ-vV-gg2>d>N3#y=g~+8(`tSsz&MoH|C6Sr z;~L>&{c_QaF3T@+;EL8m>~aE8EZfP6I+FDA*vS|;&VZI}#1;9wYvyJ(-rzJba}oYs z@$yPB1iX&(X#oc^}zG; zqF?jDA}Lrxk^YRAF;@6z7Sow#-(CSl`NaFsm8GST**b$SrG8{~l?6Bs0>w*EdHb<~ zRh`iq%4o(1X>zBhmjOfuA$1i!n~4JBx@;Cch)|lsmosCD`i3mDS6FwoaJ$X{%<>lTUsl+3DEgY{Kvl z<{68aD`~E9f^eSo=${eg*%okp4W~}HS(jSX!$A||f&M<5s55Z@Kx)D>t*b6=zpQ=v z3jPu-HVW;Z(BMCaig0C3(sD>}8GrA384MSBEH?Uw(~yI9SU|nsZSq$+e3)S@yR`_7 zQ;=RPEviV`QYw)`tT<ujW)FhgM!G(Bx&&;cF{*IbBCs#@L&CJRi#ZE$xNDOz@ z|KErtPO6bw3ZHytXmq_fj(J*#X7EPt-(7FaG<`gB3H0M@V$)HVROvFf61vkzpYM-W zZMELK;k?W7@T)&!@Lw_3G&_*cG@>1O^X=w()dp+congn4Oyf)3-~{fSZ>YxxCCYO> zgP%>SX!(ErVwH%Ar?n|X6weCy`Y+Rr8PxV!%6}r=f*atA0Ti6T@ob8bED*oUivLka zA2qt>81^GbaF)3K{qhV&>dm}msir30DTH%(R6Sxi$SUe%3o-0r+jaT!2#4j!3v22w zDc*1EJ4Ja8+(ITBRLM$ls!3v_f*c{|{wOM0(5K3^O@52P-9$ep-bB<&n_K7KH8_4c zoDXguJlK))O8{gL&0F%}hpE#fsg{ovt3?M%1*fL$_|E5CNf|zuI5be75ertxf_t`l zDcr$}D|0CbUQeK)1s-mePYd~SKH0|ywwfMm#Cn1ck7E30%ZS%vhu%DBGhTBWPid5; z$9FCFn$B@Yr1_T^`CYObQ+jRB)RiCwPwh^qQO@0ZIMUA2T@<1;C$hoi(9 z!K~5LlT70gV!s!S&m#oCDFd)a4RP#8+H0YHk)pbf(kji@_W2q}? zy;<~7Go?KO=49c4DegXW5EtvN-}0gocj!Qgn$g=s9|vH-+-8cF@l)RITs8G7wXwJ} z5V_0rO3$5d_ePglvx4y77V*)SG~z94!51lW^1mnZFT@B#=L0Km$*?@hH+@E(NrHSY zZ~BY>Vl@^dy+#{S?4&L+9(H^9LDa#<`BL2%2}(y>`--?oIK_T5_u# zqN~DICdUqwKVP-$l|hWPL;L>jUJY1v_~|*_x6g{{N$(N`$6dbOcml}DB`q+6!d~Uw zpOw{)5ftUMz9wBZ!Cs6@M@K_!v_y;}oH#LS(LoM(KDKvhfoca2dvQCfL-eqMVNR&* zh&91bz%Z(XU<7}7FWpOI>`iI?s9L1~mOA>iH*bdzyRKcweOmFxqnr&u?gXmqv6Gq) zx}r~dxN7l^O=IaWz6Ypx5lWc(aogoyH2{C)D}%LMr;72u4f#-fk~@vsinHX}mA*b+ zC!6M$iGlIV0r~$SD9q-&|M)YA6*rm93_7*#&x)$z zd@-V;U-SI@m6^{|`V`r>w*^WPHUq-Rh(GhrT4ZCh-@uZT#o1FE$C?j4DgLm&Gi4_! zQq*_EV;Ns=<2K1WceU2NaQn|r4Thy^;s$~;z4)Ec)vWiiRyX?_#_&BC(*zi z7uf6NX^LAXraIH-pZkEm6^WVto$POuFFgHwk$wr6Hh1tDZko)Gjk)xvC!LBy8c6CY zBJ9iO!hRUTO9H!gY-B+#O`y@Crv*O?P8~8RmWAY zSj~ukZa!MQ^8bFFP!Fby{By$kp&S1In1o0Ob<*MnOXirU(yQ!^WCq}lY^Sdnc;L{T3UlL zh1Oh{mLTho?%Erw&pImIaXzaXQPEj7d>x{IR%SoA?Q~3F6cC0rlAm}M`Nd|O7Ajc)Gnisu~^+>xS}YYl=3Kd0l#mkAXJ`u)TTiBxpPI6A9~20 zBMe+FiH3hRCI?&j0ymryrOfLSq|ri;j~PViv!E`h%@94_2U~s0TZh z8#Irif=b20>gNZHx2LS_;ume_>80^iH^<-|86O$TNw%^36V|DqEzuw71C?;iy0#Oo zfhBEYLj^1BbdzeY(LWBdGI!wZ3+L+NEIX<`>v8_nMzis&>g`9GWnnK=;PkQz_d-@# zXbFh$X_#`FLeiSWc7B74MIg&v!0FzZS{EZ4Jj&IY^=H1P8>zH%Rf$8qbGfwf5at}J zv;@?_pH@Fuzm>b^wyef4BM0B(B@$s@OAD*bR+pQkm;114Qa7C&?R@f#vlAwD0&|hI zT=}2tV^ggcd4TgQD{sWJ&tBXVb&9?T{NLJ!M*=VUz6$L34Nv*+>-hJhEuI%?B*~b9 zK<)@pKfeTk0Q3So+P|e4_nzY<6wPE98fyJCg=9gXOTq8vpJHsu+o__n5v@HK$J+aONXwc|$9zTSDndo%3q+c8S`uAguWBkk6fA)Juh{!L2K zK)xV&evTni`mlyZY2WqrSx?IiEb)}5N`vFf=vVI61ny3t*R{z`%coP1UrV5&c;UkK z*ybDO93|OSe4x9zI@+^J2skN~j;2ydhehXpC2g_Dk<+Kuwh;zD9=d2F+U4$;#3j{^ zQ%th zoXj)pSj3Sn7gBAoa`2X=?EB>t@UC?98ceMu!78)tcV!CN8?~~G2E`+a2h3!z^)v*H zy~VnYyb0?u^+%L%DcpNfU|bVd?<>Z(#nGa+jPP{Atzq{cMEuaV2oGoUkO%bqTQr+B zAEejXyYXXQVGgnO=rGzEk|R7JMW)&f4#e)PC4P#!3R-G9J)Gl|uwE2v#P_awSuZHP z+@r9?P|U+TAAXa;Q2VlqFP*)7#hSh-bc;ki)rUI}fGH7jA)mqA3Tk84#>37`Ia9ii zRAM2KA7B1llH#3VCHImr)1=me$|QW}RhsXcn}Hjxkn9h_z@FhjS(0n1E`iS6jei5oqw@{g zu=H<7^2Eg8=J@_+AT2oFS|9I~Ww6NNd(wXbzp+?;7%L9?IpcGq;$+L19eUt&=Dw}h z#$DH&fy}I#+`I6YpD0Ad;t8ZX%Ya3TQ&fVZc%~(3o^0Acf0{km4J|i2uf#jag01sL z6yBB;2@-kK;+GLZ9ccHh3>Yz_*QFgqOR{5`*Q3eT^q@iTS@yh=hpPdn6TQL?yS>12 ze3s;Wc|@J$Le0Eo*z-ci`@oVW*IYTZ{Lv3*4#D!FPEM2es#D z2b4_L5r7sQAc2e3=~)capg$L1%G!a=mWCEWrV6NH6B~W1I}189p6Ol6kjt*)5`US~ zseSPl1%{zrjM4HR|46>wyM4e`?7m@wb*!Mr}S_QJW;22hKK{H3yaUNiR|-Q zBS|WoVt*V?piL3J=XFk)#J2TI|H}8pPWo;&rt8#VZBovwi5e%XD|;3zD< zw&Kw~ZRg{+cyHjo3D%vdEdVtE|B85vskpj7F&oql6>szQ9UHTxbT}haZ=(7I4`S7D zcc>8J6)WGiiROCeEn)?RH-QPmcy*Py5JhTKyrtj;3f3CIM{Vea@X|5!aNOOS<#dP! zO_Ntk19p^^Clj5u&4OLp%T8CC1YyardzbT#GdD+dvnGww*JZ}^#iwGc@vVaaN{jwy zOu~!dCSj*-VuJ4?vTS7VcuVMJlz|dfrhExub{~h0?$=wUZE5YkGR9o1!~ntVD_NrT zLoT1Owx~hjy%t)G=bxgEOXz0Rh2Cjcu-ioioymwft>|vN5EiA~e7iDqCC4@wn4*1Z z2UV4gQqUAcgb0%33DVHp_p6f00rI7$)_nw3pGW_2CjLn2i9hiv`g6OrFr-8!Tr_3& zR(GkU^@uHr?`+E#FyV%1uKUui<})Wrwgo5R*%{FrX}XPeUrOX&a^R$0Gcq3T?J21h5vH_bP?_5!{&0oGGWBeB%?pl}@-TFv$?p$y{=@_5s zk+n3Hu%wA!`pDA#&}frS-m1f%<-H)C_46bIwZ>!X>I&dEhc!V&+~C&D%t2H?&ll9u zn+EaS|Ij5BFVT3Y!h&4yFM}e*aHPTX!<_Pox~aW6WAe!EhJ3B()08!VR^v*)S>Eva zTCVj0;%mMWRZ?(gvO$T{R$i2G?JJkZ*e`%1z=pMUmPA6L+j1~+*QrLd^p%@`j8C#M zhjC!O`ff&Xo?2^Tn#D2g`Y0ge#XxX4ULA(8f^+zS!HqgUcdhL3-0V7M)J6QKT6~sg zeRc`n+Hx;+J69%W%T#q-4SI&lJI%N3)X6WqoH~>P7q7WGY#mCt&l}jWGl?x7Z6QCf zGiwh(JK>#;bTALtVhukz({4%@cd_$6knD|+;D=sFh)o}pTR^o_le~s@YYxce^65O? z0dPh;SS@vWc9B^Q2d-vWXgpR5dVShD%k+d!ueZi%`F%AzaNH*P%!4XRaX#PCHW(Lk z@Mmg0+oGQFybZvrLaQXfl3LljGpQpi%>?st2o24PGrE-P7jh!B}I(v`l$Kpn(9OW6epCn>wZ_s0Dk71bR z_IP1m)Z`?Z%57==+Lv~cmdfTGm`j5>lVMzUOtOpppT@wAMYzPD6%E%q*sg`&6jB0g z$1q~q>JvcGy8L2`t>dTFBb{mLw{Nk!bOh%`A)1-oX4_2zY8$=@V4f{t5_$0w_$?rj zPDxZ9Fq02efE!F`pGp}5(x^`<5>Z1Q1WZIh@T4o;ow@GT`W*&hfbp0&Qb-Z6M6&-r zz1fG^RkvtLs^>He_3?q6Rr!<`KGqWH%=W*w=cV|s(T1qcM$z1VtDNz34D!^Y<;9~C z#g;3oC`~>2bC;`_j$;9Mh)}6nb^SuhlSCC&IkE`0Hr(m7ToN7A`bJn2-`LsKVTH;< z^tw}V5RL=)YImWB?2}I6;i!dQK5Z7af1bS~A7<&$HIM{?PGq=Q)2OT%etr|ukQf$! zYY3Lhmo8EhoWKq$;d|8Zvc-t$n1RAE@BT&N|GWSUEh*{;hn3JN8023|&mT2+$(WEp z!fLej`CZ0eDN6vj4tffhlS6t#U6x!-eDVwQX6MJHYfC1U>oT7NR|lTh!sDXt^N9dT$)S4 zQkH$14a}K*{u53AHebw+a|xq-G|P01O4yUEa$dB_aG#q%uM$irjRwUItc!S&BrsNQ zHYD*YvDQ}2#_uhfWK3cjuV1nG7>Ks#9cC!o-`LYk5or(B@Eo?})MFYIsGUi#6Oh>) zVTXL*wZtU+gBPdJ0uJ97QP?AJ2$yn|B?KN)gOxbxJkN^I=Spu$j+%>zCj!N+$(j^+ z5G^V#8;MPI>~&mb5@~@6B5j#jwL2w~uCqMg^A{tNBgM;+R;4-?-Vy@j)&k<#7({-z z0a9J;c?Y?uFz>EILzCV#=UDa?e}$!Y0gOiyu?oo$QvHb(7e3Qb`noNew_9QZnv|D~ z!@teHxa%NkgsTeYm3oFlmLCu>EK-$PgCcvlGL@}dp|t48zcPuCr!L?TVB$y@S$tEa zuhxqbBd~gxWbF*i0DeZGBGTONpHFQ{I2#c-BajBHr$k#5hfzRZqH^`*DC71AemDdR zd2TwpdRgc}sNKja`oFh|zCb1pVi=EJ5yy}G?@aK*2wPwOWW6->44}jzLYZ(MW;)Ie zLY84H9!spO81@wb$we5;+HIU7S%XV5(wO4gRmKeWn1=Qvlxnk-1=sKa|XmxtP_ z>ouKEgS_`24zC9wzay!GLu+ z{btHFM<4H2L6D;9Mk#&ly}8+i#lObFXhW&1c;O78)7!7=ZN^QUoz;`cX#3Qe$soT{ zaEx_FZ+XoNZC3jUiOF<|??iD|B@!dVvbH~elsijW#ugEW?a^b3y&OCi=ej%zAcB;@ zE?BF$edt%73!lfMA|+aP@rO@!;tmf_Tlpv!RL0~(R>s?g^vJkjl}hKgIO(%ak1ShR zmMsS@wKi50~RlV=-2E1dLWl4>hsHKjGhS1u2Dm?yuH&sT>k zaeHm1+qre#x%%|AT&m1Uq<`CwYY$IDt_PR#s{E(ZE=2z;B0XJtGWUN(q)#!InNM*H zTUIyKAuu8O>Oj0tZM-a&Ym~@GQr~bXrj`BJlFzqeLeW;IPZa>uTcy#Wzr&r23mcS3Z00IixftlAkldV?1_) zTc5Fg*rvcMz!3h4p;PItDBF12S;MO*<2H$FPc)_)t%)~8o8ek z>*iUk)lCM%O$9-%JZnwKH?-8wAG))@o!*XF*DE`XAMdt@@^%!NENLCgsH)fc3v_^zj5_x@42Q&Jv ztN_1Isgr(n!xJZWDHoyOQg zuKmAPq3&)|KL$G+IpqcBXw_&9#6hw?h1MtKEv`ZXlYEwCaQS8Jej2o9o^_uo{u6x6t4+S0WlesKgyh2vcLi&nK{Nz5B zm4_$Ne%7MR3K;O2bJ-3*jB6owo8?mAoCR;i`TcFYJjVZS+>P6d8vl+V=#9HL<}!^{ zQE(`$VD7?!$FeTmxcMjJ`+b9bT+dsRpETNdR&kwVb8B=g{arYrYr5T{xlc6P(ycEwbCGiMABiREQsqP)Et zXAX(QI1k#0j^}s%56mX=o-52rDsaikcY)!L8rU)I(g7Y%Y__r^_~V`RS;N^rm3?)G ztWu({l9`LUyic>`ZPtSU&fXu|=wP_}@jv@Qyx^=((FRuG{ifFL1vk2PDp)X+TIf3T2IsDU=HXnzE!cJ)=J^6+tnQ2xt}AwIgaDQnq9r4$)az|9 zmuahLTP`Yhqx75fr=@_&U%Q3vaI${jS}Z9mLRfM|@z`F1e49w_$CO1Diaxf_+3%F@ zVe)tBj=PI9@F^tafe+nPUypwkRa9q}()_ zM#kYXO{M+HWMTR$r5$tx8|#dET{cER2Nn+KI(N9gdvkZvYRs|)8cJ#z)Sb?*-;WM1 zGK10IX#}g$pvan>ZLItMc1KK*;(M`WQ^)04*8kWup*!XKPk3H$B1xR82<-7Tc*DB^ zF3tB$T764@>c$a--kmd@4zb+aS=WPgFu_R}McxVQ`b5SI6wttO5?w!n*3pF9mqXaI zw9J2!tMiu(kz{Req@}(Ji}!An*AjjPd33-##P7=VLw9$Y@%MYjflNz=!AgyHfQ)xm zt(H{P1GY0aXRfL-)2ZfwF)c~6^uio#onM6??D9YCPomoYQ8%MWc75nlyV`8vAZm&A z+UY2e&0LVyk8|C>8bJubedv9A(s=uCXYB>!(3L9ax%bzhSw=EQzmX3td`*QTB2Feu zwP}*dhQ}aTV4P>yw^@ukIXQ#>K0)7@4i~&ZD#CtfZY-WUKFW4;hO_y-~*$CB}5{7E8w-< zJ^`*mrisf$5V6!4cBHCTthxwY>2XX+{}@HyCJGYZdemmAX!wDRzw$lNPw3vW*Rk0? zP#&{DV}`A@R{Y1&Mn=q;srB|At%m2ZEuj#NR3p-|kqI-BG*P&V?^U~9|cE4VHZYf{H+y~rhX zmeFNu<+rfsJ70xYo>Tu3I~U34YqGZ%Imk`@H>p*MfrsW_u!V!0)wBHUqW9!uu@}hh z^>J!)j=!8}J@m!H@rfEk8KPEuY0B6&vY*hA z-t1?|7mg|xV?n?Tf}s@u_y9$E8eGI9q|f&6k8z|jV@CZkw_dQ0pFQ94`9h+3Wo}OX z9Iy~}wY6nYtd#Yb8Oj!aS9l~-KS`2kojjV(5bR71732BAU*)a}D)Cg_$SF5K z97+Akn1%7Y9C=O_|Au$rSG%GlBNuTb9$x}b6N)v=nthxj=3Ny8Fk9)GX{#9zTzt6E z^GQDAVqBHj6i#ovxjT8c{-dt=brnC;#P)A_bykmoz5;3f!nNfjoXm#b<5D_p^jpSo z;p)^^L^VO5`h<|0tAlOCNV(`!XXhtAr4Ra>@v;eTm$zFUqbL42J2k+D#_sUfin*n8d^Ik`Gw%(o(vg{y+kaidbfQ))6e;spz5C-zx37RBz*)1)@>}N2mPO6+) z9FeHCbWb+gUo_;kSLWoEN9lEiYQVGPJ7{~gne(9aqVImN-j2yw{#LVwc>m^&>SAB? zOW52W#fuG(XpSwe zKd4DAaHZ9H$pezRo!^2}bLnohcY?pyxv%&VgPX169B({4T``0I*yGSsqEnzCb6j{_ zNaB6FlkI!?1c)nT^mGRoG`kbEW^T^jwC0ivmSs zCtr+VCq!PUB|pS0qoDjMmRECUF%fr0O!X&izmaqCdK$T7(@D+0O6U*D)82@8-P!9M z3}^Z1{rO#5f+xx1gl9bD6zZB))&GtX>q0axhwr&K3%XI$lmHkV__mW_c=c2jyGkD)|;oOTs-!!>a^=5h- zolAFL7XMj4oec12jyjY`hrJU#6oSVv1MI;R;NrG@_x;xMS)l$s_zhL}pe(1*24mfs zp>gLIze@HZ;jkLeEL7Y|7LYFJ;-}cx))HGby-R=`h2Cj)Um0zh9 z3ilg2S9iTNopJHV_Qk^g6(Zc*4pJHIv^}$qr`97@wh&8krEvCb8gZp50Qvcn+W5u# z2?<93cv8hrVpHiKCL$hNHsrDug>xI;dIZiYs|^r)&&#DJhPDsOXAG#GTs8kB4cb{o zChac&N#&XaR+8+(D zw`GUZ;t7v)MY(M;6yo-tvL{M!8t9Pek&USC^Q_%YVkG$uEQrU*pC zR&tsf{g5px20epqV&W_@N%WSmfw9zO)xc%{-1~3m{@2=FM!7rwzN*N5MW(8V!&1fo zzR{JE2?E7+Tm91lX@PbVJ8E?ihk9>8=-jFLwZ-f$$FEFp(%>1nkTnn?6__r{GHHZ; zr0R=XU3#i~>(=tQOZ*oJGq3Di5a_JUkv*$@H>a+Z%J>owv#xGRvEw`r(`TChD=?S$ z)?>{(_*C>Ve>ckI@5r_4$UxGSdD!b8{qDb%Cl3(2{l|U{e%YU>;t&Z*V9;{H7Zu~5 zElZ9Fb*J@>RU&3w=5&=wHBmAP!3)p&qxJ%Bax;Xy4Vrl`724SxLl?};uuexyMvoVU zx?J6lg~zvH&nC8{=3RMaf6Zo4h&X6XFimw?_}HpO&BlWnNDVgBbTYjfp+5dPX#D{& zi|@BgGnW{{IEUIuF+F!@TBJx^{c1Z~6$lzUUdM(x@Czm0dTkMsaA* ziOQ4Sa&0ba8@zoo03tf%bBPZZOdfSGk9Ex+KQ*RAQB-k^`jVylZDOztek0F>WhZ^- z*rQcww*)aB+n-IozcPvt#q&rGdk=V480vg?YC>4UKSD_Sc0seTk<7| z5r{?}8pXwQF}Vy$s5`(eF9Dxr9ofo$Q<@i;yMnhw;eTk-x5st>YK(SWe{a*>-MlVb z<>?QsuN+ikqtanWuT_U2w*&e*XSasAU9W%mnWndb6 z7tqkg(RY5i`~sD_?0QKU3=~%91@5Ws%6jg@6_EQ5ybMu3NC{IVJ-b>8 z4$G`8Q|JoBAr*5YUPhfl$ z%Ke)8#fhVa{`Jo(n*X>u{BTe}*Qchd!_fV|;~84f`VR(qf&NEx-YGiX_LhBl7-@uu zbp^JQ=*KXzy1Kd~5PWuK#?RK0k?%lhl%EH5W6psr@+eS!ArieQr|ESknb4EFOgHsP#uo^5zl>BmKB%wqywZd1pAXJK$^{Zs_W89mup zMI1Jtv=tyL!h|dV2a_}tvOI)MttM3kUwJ`45Hjhy_W8BJ$HC$P!?v$!E3&t#-o<;z zzxsZ*Xr3$|N(d9VgcAIHHawkp(S1h4m+NGSkN(SB;ypu;Wpi28_IP!8p%${(W8J#V zduT2FuJ0*Y;9xbmoZJ5*i!Z3YA%&cr+~xY*uI)OdA9n|fuYVLH)5>rubSvjf_KA)< z)40;s)$C(4jI9&*k*Ud-pT=v1Nh(+)0fOJpjLnP+<->vX za4EN-TTGnyKlLj7Os=HN%4I%&2)b@il6`1La|3rXo=oFFeu*rmiTaR7TOVnqw9HKH zFACdac70#g=_Q+a8lWLFtkU*4Q^;FTmn)ZB1@|CYGu5beGPcz-S9%B*cf$R$;*5_A$6gaFrpf zAB>qRQ!ln12b55{86M=;F}!t_&kd5Ags3d2rOCN|Lt9csC3|$KDa$p+;#oI;hqyX& zb5;wk)P5|zce@#KraF+2U}b8}tp$RB07M;2fR5e;Y2Q*HUQY};#!B$D`0F_CLD?sR zw=}+W69p@>ernsE&q}Y-YqJ%$Ez+d>ZwM^kXSG-a&}8xA|D)&TEs>d{5%YU)Np7=q?f4?}C$^h_3Er;`U?*YJ)XLZhI4uDdtH&dQw9KR2FQQF-kzD zE-`7H7(5_Kt}^IrT%%ewMqaGMi}wM2Er%Mx=zWx01x@wypc39|cMQvmIy{4&q>$9M z=I5mU;XtKUU!WOw8d=hW|DrO?pdqGJc@{yjKez7_o}Cb6F&2O4d49Ny_w5I6>K_}_ z>|DC=kwTKJ63~mLnRvk=>e&e*hhk?13W2jHfXACpRLsDRbo)xbTa*M$)cH9%Y3e!* z6TqW?PH7vD(kkN~y;tH6T)Z-UvSt$rDdlwNcd|M5Dl&oif54zgK?Z(51K!jzr@D zzXWriynp;ydyFTCBBz6Oq`Av()S)uGelE5p)*}3uzr@O(c~C$$Pi=NTP{V~%PmSl* z$jkYH4>s9rK*xIJq!Ky0tdxt47EPD?LARvpQi5u9h{E+dEXQ}uRH0RA*2$njODY4W zuTAsWha0Dx%yGG0G1X|(9TFSktQ-EmLrDpWH5+sVd~Xr&iQCPmL6z&*F)G?sQ-;`R zcH3mn8Jm?I%g{ii3n#XOjq|;s0~|776@`YmHqEPl!44tMoZbR{uT4k$XU&KT#mtQ_ zubF8f86zho`%Z+th8&-6&?3DOqeP+B zuQwBg6V!P8&ytE*=KRP?40zM(3s4u8DGHe&#%{8}5}|oWBYJCu<5j9ip_V36^kFWB zc9ypi&j~+;IdjEZ@j&;r1F8A)zSB-mgw?e)+yikYYT;pPXqlc-&%rk#?$7$ei7~+Q zh#K2GK37Qmm!oABf4udN$7EU?tGBl&zT6wR_dAGbq5cEC>0Ehwg+Y+jHoUp8mppdBVkfx*p{Mr~N^Oc47j2uC|n9FZMR0=Ww8@v&o`ao2EN@IP0bRC@bTmKWd z+-7-|^1aM#LLvd@x0)x4gHC&U)2;um@oDVx=Ok?3hR`j=nNr#9&Z72SWbf|;LqTD8 z<#x}ujG=^^&^w`U_Y4zL@k#`B@As{9@r^$LFV4-%W7RSfAQTxNY}2KZ8b)-nN=5yE z>2mWhiV27cb$8NG8E*ru?sD{JxnpcE8RGnvTjzaqd~O=StBE^k!3Z>VetaB|Vio1M z^aulwAW?}Ve$xi`7lW|>wu$gkkE2}BiA-h!PUilNT)s2C^Y;CQpxdK}RT^xS;phc< z$TNi4xz`oZ$7RvbG18e8;X&75Wff{g8i&H8*jV(U`zfQsT}dQOr8K)oqEGrrY{)4Z zc*Q}UZTP^JoNl`SLG{k2R6t%ObhHU~M`_GD`*;vn_7ZEf89&3(He#6nSju&?7O11F zs?nSjfTwYoch2*%RSa`g-=|lIt}mRN#3oD}hl~3T>>^m3p{oWhbU#VfS@4wO@J<*J z`7mDw(+W<_)T?s1GyOB#MSn>1;@e7Ir;a}pA&@vcilE+Qj)6uXeJLr3ZlLJT~GEUS4bS(113 zOL41KtX_Q#)OIa2=CC7y$Y%LJCvQ?{C^$jsK&<>2}^=9jb&Hg=4MH?FH1u#|lyox_M7OpEipSshGDhOR^?i zxdNqhUAHz2i~kX_$m>*mIO}%vXY~K}G`iERsfjMuv^MJ1QG2)lueh|ylB|CIInMzm z@vUH~qVK61q?$gP#nCSl=4v6Owz4&f)uhaC`K2?T&Vi40c=74JoE2X1pxW+2`0i3g zPHq-XU?oM~JH~0wJGS}4fX!^*-=Qo^X1kP2sJ$I$KPrr))4H51Sk_Q1SuO?Ys+MMO zHQm*tQKBhc>kj(Ie{ADR z0HRZ+^~Qt2T^u`_eS^mM%KvlMlZ`eOCaM)zlWsh~JIUNYeMsqq)5~EI>CV8H=6-@V z%%_?e?_Zv3a$jCbA(1xUgkioa@-A!0ofQJ{J(~CCuN2=($FdJPiAg+O#lj#=sPryr zx}dbm(U=iAwXEjD2nA%l5teki&F1L4{%ZNf=Rafa1q1ptCVe6JjS|&g2_hOaj?3p8 z>t2-LWik9R$UX@hZ6nfe;UNZWne+9LpgC2k-0zJUiDFo}tAjH1A9h|-cN5IY79R6@ zhpojQNSVDZtj>P4W^WrYt=pn3=!pDO6eAQN&28ks`ADx?1-$Y5SwYya$N_j#W9A>M zNIdtgsB0N_)2y`xMPEZNiNPo9WK2Kuap;ICaboz={bZ5|`+ng|ntJ8itt@Y2t~^S3 zlnOxb3FB&ySCeYZcK)cAAwQEq2Y5ZGPUN)Vac*Q9v5qaE(Oc>_x~o&ums(dtzT|MhxiQsyjt zARjco7{Yb~N6kk+oZna5?k05-YI>b9fccveN{mlIG;)~Qo*>gMzMupGZ&n-%4 zhs5^&T$#k4rko@xh%$^z<*xaM-8L-=q{3lS2qd%zvA452CRtoWL2auofTBv1ZX}Ja z)A{pb$Zc{eF4t;B|Cs@|F-2|?qTr^q=hOBs-Y44X?7l?`%GsXl7#H_}8`nojM0*p$ z6P4Nh95^E77C1AlmZUC*whisg1f_dD#Shezn@b&*Zjc*gk({?>*pr>F`8cINT9^rQ zVQTs=sodgIX{yjcZn@eM)OzaPIqQ?ZO%d~LToIcXyzZeM!Za)%GssBMmEk?ZV0V{c zd8PQu?7vk0Mhx1w#Jra}?f=rZQmaq#lB3>mXn+4mRc$CGD2}efR*24 zYf4$8jxDaJM)i|m%zqy@noX|Lrx)OVFv(iGKh(+(dE#dWH#Cg4G-?`tpkDt2uQeQu@ zM0?LF1JUW>XVi_Rgmct`8plX!Szc!z(QMP?X5d|u+vWKa1JjCRprGthW@zk(%x{ zP4WK3(b3|gy(w=-NBq_qT|<_;isE;)DD;08d*c2o zC`^c2euht$j{JD^zkSZewg`IXaf&H~(E8BHPz6*yd43h~drN-ptCn2xTkr!jD)Btgt2qobz-J);kOn}1v;(9jAS|wy#5P6td z|3FDR161o>s4|j0ENNcKC|a<0{MlrB0IR$R(i0!pFgD9clrGgMec`8Bfv840xf3(W z*c^`2b!p{fr$5sAQRCv z09~daRj2kW!l(VG4%m<2#^N1%_oi2aF1yaVEF-fy?#nwATdv+j{hFEWLwfTa-3CAiYIwn zo6R_Vf(21$a+o!N*OiMi=!>E7&|%RJhxnL;o0+s7Z9r%a&PpnIdSwpa0UmGl98yGf z+0t)oD=c1jW~b5dl?D||30d82TIS)#g3OnayaMl(x2VGJ*<@TK-*3m}b;3ueh!XzEmY zk{%}@dDdHjdaI{=Fm0Ajv3Iw}1~z@g?LOgo7tJZVp6zLvG3K0C6Q0d765HG{iRTLy z&LN?Re&lMo6qGk6>QrNq=bF(uS}>OPTqLhXlKuao>Z{|Le%JREQ9z_sq#J|o8V%B* zqS7VZAQGb{(o)hf7$7a(%}|gUV}x|)=mDb!41V)_&gY!-`*Y9hwSV5v{oHZg_kCTs zvobT}r*P^l?+!usSRt?VOO_|g&(E|aBJPmsjSeneiF?kBiXK86N0$pXm@*{XeR=o& zTDN*LjyO}ONB>Y~=Wi|go5tI2;HIbP-R1*a2bbE=C$E^oXp| zm35uGyoIAk=9QH$C8Ihvy*d2VH4u_mr}tsNUW1l%L>tWt1|`_gQaD1?6yX{SuDh;C zWEPVN##!N&<*xmCMCr@;FD&P>5EHeyeEab8Vg}1u>?jnPCmVZFp@jX%NpD56aL>Oq+CwaE#f!aa?{{j3X+EJ_kV?{HgCS?C6pq4U6^X?(MR0N&FFWVMl)KM z#+w!sk(yg6Hq`05y8{l*Cxgjf6$=*)+ENncCk&8)`n||;ijPaAYBul9-hObf*Jg3f z9_17KsF5JV<=%JZm`54Ud zs9smavMn!0Z3gK+M8S)KIchs-I;0mNViYH8Di54iB*G&VHt;kLzS$sUda74Lj1@PJ zeK*@|3p}Jdv=a`icMhu2m$cd5`Zz%?C(FlgKm)=nUMI&#KrP6TKeh>=*OL`jqk2}2 z7N75xK^h;_$0+&r75`Cr$z^j8&WsVXMnzsWvM3KmURb+D$z z_E?Ptr+06mo3%Q-t*>u65`UUw5~iilMkG{6fx0U`qejo&7QY$863z)1XRkygi%af* ztBG7K={j-av1ZN_%kPtVKoAtd$8nhK>(Vb4{Z-`^0e%KSEo>`w^cnhaE?6_);OAVz z+ayJo{uk5A6+rRYq)5S;iHQJvt1s~>2@;f%8&*PpwB#OLrV!%MUAEfiwSy-Ll<&RU z+qsx|+x%{!=5Y?H2=SP)KqTGk1;cq|-!7G*U7ZPp8a|>>>oKez#X7EOg(nYG2CeRc zk7du)6r|4HF{y}~5}reVrpq$1sZ{p&NQ7BOtlr(XB~pR3yDCRhMB1RZXo^jf!|pmy z$-T5#wNaoo;mpt7aN{bN2kDex6%M~1c)pKkQw!frv`(I*#kxxM30<0KYWGYVVLnRK zfwf9a*V{aQ*Hdot`9OkN?9i2BBL9u0czcleer*2^Gm#l-5EwAn2h-Fh`hBR$F@{|}nxcJ|j6=UaZ_ynQ6Ngd|hZb+?(s=~O;rOBv!ms}7bZGHI&W;I(L!C`F1HB?e!xZY3`aR2t^k+}2!A5Xk-}gf@tGgDN=`Of znIbELBTB-N(7()ROjF#oAo5og(h9iU5?EEPyzgb&z2P_;$YY*ad9TU{7}Un15*uN=38gL-gF6&%#GF6X14bj@;I7=*{lI* z9Htd9tqjQ6?QREn<=`nVQ?tH;s?dAH?ecM(N6@^03-ZL9tc?ij(pmKeXkcabT-DKo z+65Lb>BJtn_vDJk2%zvWR%W!!Nz^35y_00sTGsELT86x(VCDDtCNi8U1p4`R=mmhtcoFbN$9Nnt^}Jv!uG$L4(6 z2d|w8HEDWC%H%`zdbA8)$VX_%g8pd1O zHsn63Lm0L$093_6!&39Tq*-U*(I@`v0%!3%_F@4grVZ$Y4e}Vi7>@RvfCFau)jAT- z(7EvDdgpA*&Qhf?OPKU%sl4aoKF55=M~l`_lMcsgMR6Wo{ZiKPz^i9kH?&8Caeph< z{QgS~>c?li);WvKHzO!tj5kpnxZ%-N^wTL{(jwy?QE2%7%6Z3gm(+H~U7Hi|Ev+;) z)K$S9*NAgIL!7WS#}HsAtTL$w70H0*m5ahnW}j<~QXYo+OlapxY^ho={U~}HW1Lu2 zxUFg6N~3a5U5;&`uCMjXHg!}5O@`y4=}ZT)C8vi!ITJsV3eK)RIh0X~|Ni5@hT0U0 zV^Z9Byii9j@xKw@UE%ZZXO9bar`auo2czDvvO7MHqV_E}>0t?>nfY8qVv3s;(I;pEX<#CF=CA=IzPc&|U+w~0l!j@{lk-V*j!(mEY3a1@} zcm#&soU)v0GwNmuHZ+4$(n%Y1k6U&~uk@al-?qcef)5)9BO!y?9ER;VGK^ycdx)LJ zfHJ|aEv$HRsUItzt?F?*R85bc)!w5O9%RP}ZMxbzt+?G!AeroQl6Tnc7rG_fsKDCq zZvBCNxnE3F+xZJ&mvO>6K(Wdap!96O=Ue4uX6303Yb>GC9oFFk&DG|0t=Evm*4B(k zQDv)bnQ(g6f^2Yie`{l7s+fLrhyQ!up=Xurw6a2e1(z9u>0A(t0DP<*6h1BojuKWI-fbAdF<1j|# zYNRzq4CvYd7abaS1`8vTL;qZd%NFI??$Gwo_CjV_&Q3<1mkkSVD?AdcZb>VIo-5ga zWh#Xc{-^9kCM|8=>}=TB>+mz51OJ0qIsR`pDNSF>drwW67Vq3fCxniIMnWV+q~iCt z=9$X*rlS)Bjds5_k(FG-uNwws-euS`Pm+UJ&^q8z|LKX=-|_y1@M3Ohp5w}w-<#!9 z9PafB%P855?OlJF z)s{7~`Cog)5t9VV1uREe@+J6M%+PV1v~|T-{V3?j+2Lc0ufAekC``xg9QOdNWTTiB z{SFuK+4t{S@{Q6Ye*8J)ZY3m29m-*29KK3xW?KgHSQo*@GCAUO)be5$f0*v!0ojTd zADO;_%xX2<&)RnNobLZnb=Z>Agr`@`pLJEhsg&AYCfI)Qk?NO5Yu;~zQ2(D2B{2sD z{mo9kL_GXWp6ON>$a2?Flqj@6!-l^$q%f`UaRb?>Jqk{0L8tNdvY8PImW@~JY3au; z?a4dEFuyOLg4=`!FL*@#>_Pi=kf|pU)<1oyk3#mG-Ztl zmMu_|-CP9=k2n?O?G^TbG&1U#&$6Pk8yAYc>NeZ!vIfK9`9$eX8Tv-*iP{s_<|}HFM`wH%~gL$J8q%TD4WZ=OKTeKv~4& zwBIbvAs=?P>7tr?J#&%x6DcfIaz(rd)AXbLVwS5s5K?1OiJ(D8Rd`>6L+r8)l2aZ6 zGW7M8cv9cFzB$#ZP$uQuh9v2#c~fEZt**yT$qZjr^a-~L@^pO{#!uJ6NdTna1~GJ~ zal7r;*E(Ya=reR`D)&oJ^CbXlaXI^m&|bspv%0e{2h|G%iE*Q?RW-}b+l{PKL3w08 z&pYl_J`y>*+ZnI3=aMFHKC%xl*EVek8*|<3lV>LBoc2-4BvmCR6U_@6=l5`6Yi9dD zp`pux`b?Fpra^6_@b?q$g2@|>f~-Xc8UEX0uQ-c2`KNP4=?65&7od8%Ph%Rt?mFbi z6T{Pi3oV=KMA6O=SpWe`>JS{ht|dB3b7{SJ1XywuN6-glXJx?=1_M7Qvs0-VbT@#I zmnV{_PpK%&@Qw|^-nE|?+Qux)qSR#rq=yamc_mwA+zv8ew+e#TBIT1r`3FCUzpc|c zM-b7<7ZV&E>?CU~mLFh4Th2c!Cv-Bh`stu@5hp2pEx32H)%xii4*N4b2WMRi#51iI z$Q+yJ^YKgrYbBy~Oje(wif|=*O5wwg0E{_@$YV$FRNsJ&LWI_tcojUMd9`y|I284# z2y-th11LIxsHYMnf%^Hhevc&>1)zoEZLfP(psG+)jQD)E=`PE#TcXcU5>r=`4yoSP zVxIp7X_voh!OeT#{A>SB7uH6k7N34`k7ZJK&|MD27+vZMSAvghA_P9SrXr`6m zf_1o}Y2t^rc%+uJ6`wRPVAp5bYo!43Xp_udT)~Pb4jrj+eOPbJ&@=0doLV=lnc}jA znE?hSu%myBGsai8tj-{**yVvx(`CHLRSi3wKm@P(jGfH~Nmz)ncwLWhL48mqw-#?R zAyf9*y@`~%o-5M~D~RLkbU|%GVb*fH+lGyAtx|rs^(9#k#?wZPf(E%o@&)cC zz}8li%Q$RSmK`LoE|evG+c~s^ok=|Hhb7HP|4b=pFvQA4H;W|;2yn%Sq6P1If+TR1 zyv$lR$HBtb9i6c?6&&$);Ya{eDQ`5?6MxhDSYF{GD?r+eK0EH#`7+_2bVYg|%`EB{ zt_fH$0twBRolP5nM!xwH?YA<_f9Lg0vhavp4sasLhBn>jiyT@V>UpjeUq7}vpT~nv z^KHqtE3kNxu%9kL;ej*t01B}?#}HVEZ+Yd{h$8~`3o?m`Hm!oawY0bv0E-XkjMJ!SB0|cI;2%g5V>vw z-6sW;z+R^M9uZ|eOs!fWbz@O(E_~LMI9Y)T#*M^zSzJYGBBJf*mh#hQ%+&RbY5id7 znynON%|M%~FnXpc>yiE4QI&=6c6E8NLE`&;f(3V1tmATA%Iw75 zi=vZbjeeCii9QoEobea7fG6Zvt68k7q*E7}3eI@g9qo8ZyDhG-As=)VC1~DOG{H$MIpbW?QOjG;O{hkxG6_T;}{lXQob_ z#6Dd@bUxo!U3C3VfR`ZBk&O#nKT!LIfq1#A-ma>j*6xSx8|g`{IAEZ_1`TpwO6GK< zWQVy@8t9|FIyG#l|LrGHJKaIs5&cSANRuEp!i2LuFaYS(4EreV>izyg85xj;9`C9h z%1$Y+F zjjf}%Zl}LY!_|`>V=XQftV3`$R*7wdhlT7>^` znsc=HA3V_$b3e%cKYa60u`}vbh|goKL#KTCjZRHUI;(t>N#IzhpuvMKzq}#ODNWqW z2>HiY|CFe^!lDk`mNZY{y{51D6bF{3_PFC-`oP@gS0R>C;y~Qe^=hTt)AfWrP$J5 z&nlGxc+^5B=MuE}r4S-&MMq&-GuIMlH`s6JK{y_3&%`zKOVs|aK**2DQd*ts8ae6G z>n7$SO8mmG*hW(D#fML>o3wTSUc04taM(Xw0JYf2d;F4 zIK2bf%W+I%d;~D)g%$|i_U-A{7d$s7W%9nSU&dQ*zDBIR)zoEvV4aaE3e$lLN&;kL z?8A{9L+>l12tw$DhvmMrEIie#j9WcQAENK{fY_49UWaqX@Klq1fn zZY1I=fw^;7m?V9uK~q#_kvzVTAn4_4zJP3Eq?iGEFtPs6x988=@jVy6?vu&{yQoc* zZFv_keVX?!@kfMnKp=}Wvye&D8!*by=sYXPOw-r4SVD8SV{VZWc#je{`F9a;JD2H~ z3@J~V4iXiqRGT8JzZ4u~DfUaR+!v};_%WL5DVasn|5h}-3g!o;JJf3A$p1wv|8M7% zTM76xiA3OWk-lnZH{SAkOYFy{1$-J|*dHwc;LnLDn?Iodr%i*)7%}?+a)|)Vz}|V% z#>nA?y@P7SqSpN*A9D9eM+1!yBU%R?Kgzh8QebCc9@P<;$PR)-9fjw2{0vFBb>*vB+xAr0orF3`Q{TESgv!)V`-- zklG6fnD0-`vUQFhnczqcn*Na$>}9%CA$;4q`rdVTU|*BPgBG%sRktNPrMr4BbJ}F* zpogD)ZE)%vT6-_D&#ufLZ(h(Jgo{4fb2wI|L%j4ZsM+m{LAy&sbSAFtxMaYe6Skgq z;Gt?g7IPPUJpOom?v;I)f)Phu8Q*D6M&qP?2AQl4)_5w50HeFSl4cv;3r816ZLm-J zh<~?g2p3;=PL1eXwH;g%2XrDAJB}FCa-;ZEx!_}dxMCtxvX?Vc_(tH7c?VHVw0}lC zCvDvbIhi*P{$@DDw&IVE@;Nq;bt#={j^53hs@q1}3>4UOZ0) zzto?G)=g^|jHO=*CKIucn=`k!P3twkc|IgkIQi)!197ze;8~>KU40X=2L{G^A?*~;P*IlzXV%;(lKk}8Iz&X$dkQ=4 zxY-}BB_ORzJ2s5;-WoSob}U9v62t&M@re~-j6Hp02~rGC3z5|7+l-kY*Yz0tahm0_ zzLkgOV6B`f#qdX_rK$;cU+xZcD9m9aY`p zM-$=FeVRl%iVy!W9-PIvQInhJ-v98mpNBiYCe0Iq{!-d6;K?Jzxzh9?wYSGe?Tf(c zo?Nk0*f3bcTD95qEtlfL`(T*R$Ta=yc*2W#M4qZuSG z*WxR@9MjlZ-mSU%+Tm}kURfZqaTADk-71|=HE?bs60RT=yw3^lBgXWQ9u1}pK5wTe zv0XKPx)*8u-Pt7GyrSm$-l%qX-?w#hsA)jRf^=?W*NAWM10Lt8yhs~gUqPP8IlO9Q zP~DoaG9N_9N00iq{{ z+ypJ$LN?8*E{o5dvn*k#`kO%Ohv%wXf_<-Bj~=}%=cLWk2HGe?fJe~$o>9aPOF}`F zQ9~T0wt^(rJgfJ(lUwjXWmpj*ARg@izev2VA*;i)(@pgxqL=*Hhz{3E5y$ zEH@|9Byj&gXmDK|8n=V1HWBKTW=y?#@}DnqP zuA+g6L#Zlu^?O5;@}d>ZFYo|no54O8nTsOdZ%iKb_c8r<6ph)fW`N%3e=qd!+ZR*% zeD{TG0!8?r5hn*K-661*shxFv6xxTcDMLvy;%OGTsWw93VNQ^5{hcy9M3pg4ilx4A(Dq10`DyMcTCA97b#N`IuAI9NH{m^M8x=P;Hto0d zvrJW32-jWsbktTK52viRrrid5D6%K12P;j;<=K2_*$g5Sv&)r#ELGR}m+&09hwJFA zzsh*VAFO27^tCqA_|AfV43Pz44Bt1sd?|TBIj{5-wZimc%&6ZMWXAI7tH>|_Vl-qw zeu8$Tu;kwh38Nq6%k{MNFvBvzX?~=7<-%1T`)|Fz8a3MvMX?KxWD50}pw5r1E_El@NvE5ccnA7rzIEU7;A zmK5B&cNFc8t$@{EZ75SW!apypo@x(PhVXR4{3VmHK;cv`btNgaXLYTV~TU(y33sV)r7K-NJkU#eero@G|; z2cTdwf)g=B%Q)f)Yf!$xar@|{|8YNf-XU-nb4CXxh*Zp%Ks8Ro9imI`1X1BX={1!y z=N=<~xihX_;+IDJcS)u5_g@75Lo}<({}x0+og5VA7GL4~kIVGAt(QM}cnIz7@7ugv z$h5R574Elk7BOw}QcdP=85$be5ZqCsnUs(4ZVx$4DKZA+8S~|gk4e}f0WyreM1 zy_%)kL?7d&GHrS;f1Ja0j-jChxC+mv^UfH^o7 z&J`IC2j;*0e5_Y#R@rD02 z#_OwV+ph3&FQx<2F~F^NOyo!ON#|i+kn#80aj8HuTdtg3KH#J(djAx~w_1bH?R68u z??KaG+^5Hnod(`b2bT1FjM9}J{v$DdL+fw7llaoF=*9dIM@q9F^d6gY($aoagZB&% zLdbjS@!j|VpiS}f0I=Ff{H=}h28!!LM!@V^FUXtUE>*LCsn*6a`Oipt_gvR-v_IG?l%e1e=)l;MKkG;KVMyRbwbv4 zbSzwJ^+IkK$* z5!o#z1*0tJCM8kwM81IynBNCtU|D*`$_2-jSEg9+0tmFH1Z_cENr7iVPhHwYr2-jtDdKTO9^>Q0?=B z{i$S@1t_y=Xh?+=%D`dzbE)z}xG|fwp-W={`B><5}&^`_mPleF~Yp zGwX*}QBIB4<=*6d;_%vD8}4IJV|yMAna0u^!sAsw4}Dp(g55W~UQx6}iVOB1t}O}3 z4^XlI%Qr*NbuTZk1-$n7Lpr zn#_p%Wm|6gs|*w}<21;--m8S19KAy0-grjUnrk+;u;G*M`;~8dw0f6Xi!S-+j|rOZ;ktv{`we`xf=9h->qt9cbSg~ah5EJI~( zCYL9r%*0qo7(YN#^=(Q+gjzlM{MI=L;s-6pt+|S@hHmD>MJGpAwV`6^hE_#G;%?4u zH{^$%U8g#PZV}lNqWb6u*voDLr>+l_OVeuxzj;k{G?d<;6tTa=DZ8V6BUB4}{G#A& zO|t|N@IXwX2+6xleVr*FD!rzpUKApgQN!0UN08i2s$O1uepkXUj0f6KaYAszUlN{ zsqTn+9TUnE8`yDDsrBiL&zfnZz9@`qu)V?h4e-&*_usc(4=|lUNI^58i5WBBfVChS zL4e`n&=DKf$&_h3L~mS_mAWC+*Yn)L=e_luB4B_y<)>5+_UQUZ4H(-T9v*ogF~Bwm z3b+O@qtx+3d>`b8b{KFy}c+$VX0MnhMr0U0fuU z)KEZVd5um4{Rlmh>aul=3yYg%d~lN9rk%;{!#0dzV#0zcyO^UfUgut*RwbdG`hwAy z==+NBkPCKMC+Hkq2k!{cuf$-=rYe1Sv0~0qN03k>%yN*g0Y;}3N}C05g(tGb@#(Zq8s>HJ z#hgq;NVzz8KM+4>y&{{!`@w1?uT?55b5nDKc?M5oo5zm)yZH&~CUdB6Tn320(|N%JB=m^kyT-~PIjfalrI z17BRmK^9(+tTO()1(nyNl&!Y<&SnRiqWlnT6Lzi*qJVebftMI}cx((3ANfTROYjZS zpZzjnhEfZXrum)EBC4z0;w!V1N3Oj-MKpfJ%S|4AC-h>e^E=nx51fSpDH+&OwPsKMojWv!f5yw0 zMVGbf{^$Prh45D6bk{Id>EGgV{Q0%|!g*pj=8a}l2PK+^)I?8QTHpl8gP*@*kNlJN zF^I3d^M?8BEk0kSpDh!z#_Fwyh6a)!Woows?tpj*QAzw^doheD%p103GOk7n)ptiO zj=F$z4}e8Y`{TY|9QFZaHk`Q zktj>fbGgigST@!lN-!ODqnf~^M(_`q1OgUJf)pbYdnb!EsJQ%fhiq=?vv+3EyHuaf zUzeE*ez7VjE<{J%)=p;2inTWLH{>^4MTi9J`qNC&#g$XMKUY7c+D}LLo%|OTl23jA zOu5WTvPhM#DmtHtaxYeT7i~j^VUull_{@@eQ;xRZpmY*f=uKAlbhRBU-t3%jj`&@i zHX{-BHV3R@fSx%n-7|`14H0ku_Pjzf)Z~PgPwnIq({Ou(m*fugW1LVROh$?35Y*K6rT1UM{=8z8gvG<~QfeVg!{^(e? zjOF<_IA9nF-X}vAwpw|e0 zNhL&pDLZlvN#P?HA-13TZ8ea{-i!1sW0) z5srw%7k1_mXq?KGWh}ND*PZ{nz z?=jn8!jU&K`>ANNiMyl@rRmtz`WRiF2@j^$-*`VYP`B^t2!PiMkQT}f`jTZHJwYB6 za82&#{x*Nm{+J&PzB7&#u98~(pFZgk29r}eGXhtBUJli6voYFnLc9(0JTUQxy_Xr@ zS!WAX`uKv`HbeSl3nO4!p;9K&t_>(xkS3A5>E1ZZtuFaB(bNGanpTI4i|H+QJbXmd zUKbU7_P|w?&@LmV4AlDZo{;{)b2^yb8&nO?^*mV_PqPv) zM(b5(i61`k?hd)q)-m<-AX=M7p5Y-NzdcvluC<$+KegAQ$@}!zGOrhDk@j6JV?-gg z3y#;CUInx;Wc{ErhCB?zMSPpf~mUcwMp0bTbhG)dY9H|@3 z%2GVq)BS{TI zN+Kog%7EL`#p5##%WjoF_h7h-Yp2T>*kDj`ss|hERw)Iq=Wf83T_WE$46JI*wnY3s&a2X6 z&0IuDGX(0fW@M?0sjFCWdoJ`AW?yocTR0Yr!8%VK{E(jr1(!4N!5kkzT*=W(6dNuk zOfqDSU=Af=pFRtXr+BQ)ZGFsmD~u)KQ(;ZUXRu};3}&QVCnGicx@GT5GO%dq=MKqA zL2I%N___Gd>>ZL-z9

w?Q4COw7ENVz`rrn9WKu^O__q^`$f&+_dJpT%Go^aYu4 z_Be69k!ilVk_S5^-KqEO%D0&dJNs1?YnUI5D0cx8DQ;bWFF_|;+>p*?I&P$AO#WwS zybv%WJbRS8 z2nF5}1!?9mMPX60y-Nb$Jvg*idRpNE3myyJO1%2lT3_~l3-s%X#!^h0_n!1oH9g+z zRV2X!=QlI<3ND%_YBM1`yWX4H;k7N&C<4qN^(c&jtf17>f4PCC$GAk(II7p`=|4Hd zx6Tue&hRpP88?cfhRqt#xND_%>bhe(ME=fRW6H2m3WWqOUv|J@W+VA5>mz&zh#2RgrAE?mB zd-UV0XHM`g&%8%P^e8acBLl-i3`ytOn7hm89g3gk;d9;n8v?2zPe_Fj2L(P5q^9AG zlS3p5qa<0wrm9fRqZBgVbZBRz?A|cSYYi0y0OH6S8yn-4sf_6awD3iouzy@{9tQnh zr>H6@|)J4TT|`r)gf}b7bG+u#`7fUT5HC zT+!Il{nXLf@fo)UgO4Gmt-;-}y%kXQE@Q_fDLf-&-Y4hzZIT5$!&YuDvr$R4Rby&J z0#SpT?QEs6GgAb$osH0@MgZ7?jtkiQRS&Om^!1~&<*r1Y7Y>6kma>+oirlDR2FG) zV1C81L0h}8QjwQM-beopNe&y~=H>n)RN@|T%WBKT*pdL(>BDPR?#xR3;99x zSE;TyvyXpJ4IeK!lMlJkA8Kka5$QR&;7XqY8+-QclAHZz&dfchh3hOF@owjE6R6pt{D_Ns7Ld!*y-F!dYeyuqKceQA;tH|M6P587Aw?{u6a?3)uBL2bME!C2M8IE zW2UGKa$2^M;~(hhgdGP*`O1j-@%$%CsJI*C-$XmxftHv^O_z}k!i5L|I~mR)uB!Fn zyrY8yH%uTp;SG!mXGWH_Tt7taTr;z8CTdr67OhpO4kauZiD~CDob<_cwgZq^{ zk$K?7QZ41LGLoC+b+S@14Xr00P<%d|f`~^=0F}`@Yr3Zcdbqu|3?{dzUu=H(-HbdP`6P24JD=1bBxV)#%%exE8H$=C`2G-pV9qxP z)W=Ju?4pk}&-l8oPbj3kHX18Zph4tPRnOd;`K2*~El#A;Z0{|ttH_ktdZOTw$~t_N z3on zeBbNP4iT!k{mSquj-1TsSgfKZY#Y4I9p0H2)m((K>`I`1-DbcAd@#3u*X_7QqQjgs(5&CPP3stokt zBdDK(1~iEQekN*Wy(8@h`w+%I_zsrQJlAQ6cyU7-vxx3GQqmV&CCc^1RG-ar7TrX!0&|mN5@fqb@r?&gf%L3m9lwE82sib!S!w+(5FWl#UrFt@n zEH<*d{gRRK^uP|CarR>))B+=4-}Rtb-(qGeFPtVSYTU@r<24?z0_&lZfeBlr67yYX zekO;2zQx1(3^sLfZurESZ2xw(u(VxHlbnKpj#i;YeN+@((awC|mvI1u)^;)ChLuY>FX@F3{olxa3#{$`U; z%2mi!CL}?!xCNmBK=1v0Kg(zj#TPGQt^E|39uz3=RlAR_WV|*%|JkFWV#LkD_=1d| z10p|#u4>R#;0~VRU^FMMS#mFwE;ZziYvRPNrnC6qQtreqYHRPXrjwr+{~R||J5f(UX{ID~&W!sR1fAfqppyQPxgY*tq>mCBg5-nAyOMu}`Br61V9 zcyr;9(j$B?MSb|=Ss+y<^N)0=`L|JGhc3G4*UznD<5EZ0H=nGl7)iel7oCtPt??$D z8}J)CI9MDPee1c$xg?)dtHb>Bz)-v2~y3!B4$-2W!u`S~8 z6$$yR)q_Voe2-`_>egx{Q*isOFCRgCLpy4k6;unBuv*onMWKF6s&o}q6+)^gxkBp6 zW7dp(ONsCndk|GdAshj?gAg0HR}km;YJzv!MmKb}APuBFU8df^51FX$TVOItU0tN(whLw-Tm1IKG={{Uh(0|?`nv^7EV~_)6P0XTwh_ZC=!q^ zD{VJ7Q`v&+N;1JZ3+`JM-fgh?RZDtSr)wm|@aKb+0yVd(tyk%T+wern;U%>q>ftK6 z>*9vqnOVRy9e|U)2<7k}5vF820t&J#dny)EXaA-nuX+1`RyzZTQICb}y+rM-C{q|3 zp>k{A;M0o18qLU8#F{_1(H>i+Xn{?$6>xzlz#`BLlk?UO^sb^zhG+Q!#O1&$ScR@_ zZfU;IMxz@@2NFG0@KDgzdzUGZ!vw;LxBUnN&QFssNl;xNWwa3+0}U^NP?YAo%Es|P zTPLVr3P-Be5&-1-sxez-lNdwjD44AzmuO25Mlx93#dLQ>qx&t%NJ(RF-mmx?JML!P zlP9sJ7-62sVHEg9QigLDJ{!QoXfPoBnjzcFwJqVF(nu@@hn;{=mD-v9`>cYDRB~?Y zd>)A{0&(zrZ6@?7h*0a|ps|!Yrkz&+szx>-; zB>Y=Wi}88L!fY@3!mu;O#o@H;(XB7g-3s0lLnbeRxZm4ST)m-d6d=k} zVE*!TP`2pp$?zkpK2%sWe37r+n%BaV#T@Oe4H2_eQ;`dfS^8jTFqF#^3-vktFg4GU zyZw48W3@b6R8%y!ecX*Z03k6mO|b+#1Vmo>v3=mo{<)hrTl25aza&cWO3nieX*hfF zpS*+JEsyXZC^ar5Alf`A?rS$acs*v-^Dc_tY55Pn@bQ)>mO39EH;9ooS?fZ=C_(gp z2%JKg%}}l))%`zrP`u=e&u_zL=B2uxI+BG$=dNmiZa9PiTJ8bSxp2#;Q*A{d@Z1R% zLJWH4#-!_>s+RK;(OaUgo*@8=;e7E6?GB;Y0ww!p> zZSb~dI+U%rxzPIlN1TWU6!&dOIKCR#?}6T(b$Rw!tlTbcaFaZet2J48ejuZmuY-O- z<7&_s(Jp=oT=)%deGgHTwVi8gZL{$H(``41s`sQaQZX6(R;_X-B-?E|W>hmDi0c}Zt**rK-ITn8zEx@Y-Y28;A_Q{`~o(5{jbsct_{)q?ff9#*%pYT}# z2tfo84Er=x)s5h9-hBVQf==bXh!LSQ;vWdkYwFu9qoQ8SP^BLn(RQ8tIhK?dy3tN4qF)qngRUu_p6d7H#0eUuWgJ~ zcFsM5QJakiERtV6Eter6hF&T&M=X>?gcnm4H1Ddt~`)BD|e!6#Sxn<*YXcI2d(`5xqdZM{Jg zjxS?FMfBW}24pM|1oIcGyt3KttY=&DciUr}4wcG;YNYucY#hMF79Y&w05gEtQa#J; zcX1is=-GRcc+t&Q(h1Ob8p|Z93CUNJ?CG|m4WDEY$-;;X+swWvo4pD>_&4ua8G;_9 z>}4jziQfUY)ae-c`T6k(rn)<`-fV0)1{#`~F-1&YN3Mp!*oI|w&yn8nb(5bd|MYvC z;J6HJZleg*uJP~Y4=$V=O+EHw?E1!vadNAwi2Go&?}_~JFy;XZzvBMKuh(nZW7(oh5X)M23gr<#fuC*?Io&Wt)SwqA{?;yB zzoua?zSv_SF!~aVZq&FsiZg<`LfpxT8HnGjSD|-v@P$=oxf%XEescpOkd<%=yROk1 z^8#i9Uqc)hj>N}K_`I{J%qH49p1meL3tsniGWsn|wb|7!RoWHYdJ^B!kh&s?__5z6 zJ=__77`9GxDzN)eX9h#@L^d3djXCM$nzzB_Mr`vcJ)FQUI7_Dx$C?CMDhRijm;%)} znEL#b_VEt`rydVET&tWR0d4oxTI~!2RveN_zZ+x^y%7|(b(fyaB)JWlHn`&{M7E9* zx?zur`CO=@B1|Bo+RgF}xzC5dcT0AokvwcXUSc+!>hEXwc9ua@av7(H=La>FMRiE!?~m9G>P ze}3NV>|~S8ayTs0Z7aEa?AST0$2^E4Ct!iey4+N>^fE(n+&Q^sbtJ(tGotqe z#@?SC8US-7HY;R1CajUb_cXzE@LvitI1!_IC)6%}O{d$bP}%b!7ze*;_eV`r-bH0+ z9w-^>Hw%h%Tf`Tks4?7b`Qnx&vZ{DcBJzqMQM5)}3(~S$eUf#Lr|AU$$XoULrTgIA z|6}hx!EP5ycLhxKoQ zR_tyyT=)iq#^`7d*z51HF8b<}cfaAxRD-fxVWdH~DTt_&Do_|W{RGd+s^c`6?JjjQ z_Li1)jg4r#!;lw{-#@hA9#ZsDLi-*Llj=z5GFjitwDGf~Nssx?PYa=bh?%v@5Iy9= zALQh8i!$Gxw`9G%sImP52Ly&X`|=cs0`~_7g95=G4$i$S4UnM|e3s^hcLOJ4!Z!*9 zJS177E)AN$V2o}J)y-_IoVaTHCQRyt&awqg!6XW9qjYU&c6$NmhmvPe#RZnzS=@t1 z%q1T=TIQ~Cle}q}%jnm%Z1*r11opQr5@0$ELzcYFpGE3s1?|tKz$PY3Ac7%nLUGdP zqf-534@u7dURHXXjuhRE0`rzAMl0;6wSn8ijc*fH&vByGRUUA$={YsXO+G(k!fl|9 zxvYPBeM#HTkKyJv_s%vCqI>Ynr0vL*G16|@lA9$gnh8v1DKl6lU+G$3y(*bC)xFN6 zXtOocWD2}103l~YXk@V8fW^E`#bwlw@Re_QPMlv`aH6cO7!$tQsJNPSz!xZiBps=2 z)Okw*#)aBA7Wg_mg{92@W`?2KQV9Is+H$5H{_f;fe)MFxxe&v;kF)36&Dl$gXL?`U z7Hk}ll$0Eub7iRpvqe!`s=OvX+I~4KN3VSWl@XbqNFErd$NYN5WGk#8~Rc7&LZIe?s$Sl3g_UL^m zzD4CC@x!gNb5R=|jvePw4W3yZ2zOvcfl zDfSz;7?#L;JnyORy1AE(lk@DHA;$dr$bFMO_MeYDrQDkV$DOm6ojc)d`Ti{l82sy)5h-cpTYo}0~ z5RjT78GZVOSa+2pKWq=^0LS{CHm$Qz3DO5nW-R!H!JL@VXc$_+-R1*y=B4%Zoi z!W2gnBQlQQGjpB2uHF?&8G7z6)3)bG6UaR%sM_p6Z{(X5iU)T6Qwc}25mwgTdey#4 z(eFfWV$C|^lC`AWDh>X))3BxR8OL z1In?mUnSNwN+uR@#HfTnGjJK!day5DEpWck7VT!3$mZY4TpzRLjwI>~M@Jde+}v!C z*|~YB)&C<_PaAXYbG*N+Qc_t3r{`64cY~}RDRoc=vFv%&rd)ghJW(4>+|ML9)iBsl z@AnlhS;_+*r9C|F)z_wu-7wv9j&999WnY&6Sf-s=zss{o=!HEpY_PGX_^o>1NL#2R z+d&PkE=Hd_Fy95MH6TG=UyWY7)&IMsWVM8W+^9*AoPTMtG3b&Q=)r&lBaL3bG+*F5 zvNQQQfHf@-=>&ViZU`bBK)r08g`!s!0?O$$A&BAW8GUE`Z6m=XzqY*B%-v!l`>%5c z`tAT-4R6DwSHnBlf%juqguhA_HBrz5473xmK^om#c<-Y&&9+Zot)rgvE$J^G%dTQ) z0tY%7S)kr83`!1i2SwL{I0@|AG&7fo^m@u~-cD_!5$nzXLsx);m8fWg-pqm0RK5IWi~tCPD~#q+-&|AVkzQ33}tySnS8^m8uC6` zNuXjt@)1^jU^ton^|5Y!=k-58BnRT$bxegsBx_%Gw#|pI>6fdpW7GGPoyO}biK(U$+k;wP0a-qMNO^UIIRZMU^Yy>}^hTBkXrRYe zK&<3P-WNWm{w5$;`{aNL>q$hzF=8eEAip!OGi>RsvsY;#F@`>ED>*{sE=(Hoyjflw zC<1i^!8Y>PlU_1gU?vx1hi>($d*`?1pg8g_Zv zK(?dWaiRNi@+@UI983P zF}FYkC1))aU*wRY8WPAi#$A|V6;}gcxH(=}eNB~*;?b>uQVXQFls!}k4qSnC1t8ru zvtJr$@g`VLQch3ep7J|4*}D6>x)y}YQ_j(lg_%l>Gdd=`oPhAPI+CfUFF+7`z!m_k<3pE|a#RS_xt@Qs@In?`jozcq6``_(_4;0OHEfh<35>g{U3y9dO~;ecX^ zjGVOFy5#sVi(9Z|luTG0BgBiAv# zUQ470R(iQlBL1Mc6_D|=)aWnX@+fznEw$jYtpLr1RP@Epo*LH$I%@6VJ@tbfSovzM zz>397*4-A??Wm0ePw(*1*KI>(FRG^pr=qK+I@Y2(wC2jOG72YX$N89cAWw|Vy6=eW zp=mPZtZ23yvT@03ck^V-SjkXoTI07&K{3zjf0;>ILQEGC2TWD)#xY$;> z7f6Y7yANOWCHE_mj?%W=FdT0Dl2=J>_JZm3`D-wB+c^6dcp)4FDk{%%96v=TDVM#T z;eT#c_w69q{96A}M)iZpE4{58dM7EMKJ{RdGovLOu5X@n@#ecS@r~Vz?XTC($5I9-#6Z}+Na99O~j~jFSw9V)j+&IRcbO@6=YN(Uu`(z9(Wt|Dos8;mwO}D zF15RkOahZfkvn(Ryp~tBVM*%8$uH5LogN0bR~YiyucSAJJ7p{ z3G4v-=Oe4Uo+UN`X4kQbKFJ*!UTHR$Dpd8;Qrsi-vLR9Ll}3n^+oR_`K@=6a;JBKA zo6<*hP`>VZq(rtYGeuFwbbq7(HZ5*ZK0R+>+F2}a@o?LkkmY*0F(DqBS=@f9sQqm2 z*)ZA4I8mbeZ2J{uWo1mz{4)7+*r~;fq5a|HuKAe-UeD?&$Bm%OIe~z_uh^ilAMi@x z6>^dHw`d3mKz+n$pml(;(K&M;!$U&rvFZTJcFy=vXNe3Y-Fh(;~B zJ=YPDW+Z$!(eSkyhl%{S_I|e3sN%#&JxV?SivE?W{%h}u)eZq`*`0PwPv40MkG~ah zba38YCa|O_;t}r*2G`$7vRnxE9NEX&0P*_pRx%%9WrTqHw*R73n=V;bu1#1 z{%F~Q-)XLV%=F0u$^q=}6PxYLX+|QA`QZV5Tq%Yi*EX-ZcSMw(rwNx2%J59EG-e(I z7QjhZlWzIquNK^|Ig3;#+Vb8=K;V(b4RoP6Nqozy{1k(IVUGb4r@e}~e9mk`{pO?7 zQ6CxXHn=V^W7hq^K?&|7io--D7e!SXqz=*)dpo;GR{5g?ya)u-Gh zBpWq(NTxmV&zPTa1LIIL(z#OfMax&JKXUNh68thl%xSk-QrgPR%sV7?fMY`jdE&_P z0>h5hnXjRcn>!G-N_4*G{1z<%z@m_qZmsbASg2q;1av9VpFh(}?Muj!#297A4jhwU zS|l++ySme3tMB!-QgdQJ(YDVT8vX9&sIdx^dGTN!H@fUgq7OktBjE*>#LjmM!0Ke; z&gr27au84l9Zz^2QBUaFDAM9Wzu#OK(W=*n`K&K@_SN4R813mbDAhheG|Tw}Q*y9- z^=TMfbja!`x<#%)hQX>e{a_suHAHb*Q&pv`)+3TtomXX)=JUpPb8OBZ*ocb$aL~^$Z!z9fUlJZH&p4eZ-DyPE zWZNz>JP4M#a_)3g$@2v14ANwYS|-_AiA9o?S1j8gks~FvL@_2NBF$*~n$Dz8r>htR zXG%xXtusv`*4g28_~WD%%2HV>GzsEesop6pGJ!>rsS$9F6{JBa_e96r?0GbmvfSq}yRS(l~2+ zv(^WH2>uKXLU(ZXlgOFc(Dp5ohG#+9(NEC+lZ#D*Oxj}7FKqHRd?1Nywl-_Ph{b}9 z^P8~GA~Yc_-Jc$OPT!g>>tI_>ezD#4AxRs4p=u-ux;fp53a>6W`9MAvQtgzOMX-r9 zU>!rhU~&S@v9#eI-8-3*=AB-a|M6(+Q~lTDF>!cQ*^UuyMrE%-gN)Au*yRAt(&DRl z3O;pzNPE!cg4k@mBC#u?a@r9x^`*~!Qkf&rRR{L@`i!~p9B5t+9#PgB)u9h`PrRep zwjD2faXpWv#f>=PKsNs9cm3`Ym|s>4{j7iK{1GPodo#6691JtafG+3gV;vkvs^XZ> zkNrl=?b#nV6fb{%%#3ctJ7W^kbWEU3avozFYfafV8F$ZO zTfdD~KIq9=O^!C8SAG7ExzH5<*j%((4JgJBd85DKz7}nXXpNDwW0r*VL)P@$O~6Z! z4otP5+8XMLvOf+2-ZQ(bl(Y_?ktL3$hI7&Ap}XB)qM{x&A&JmIX7dI5RU~EN(-hNG z1Cx1O_t&PDxEg7o5gKz`_bcfCvqI|2(Tu4FKby36gqC*B%q8hGEV|h|f!Pe4h^HSh zm?kfzN>*Pox2poP$XU4fOAXD?$uYQB{l3_4DDq$cLuo(0@Fvamy@g@s&eE(Z^C&Rk zfWdF!)fq1=oGvlbINSgRiVw`y;w*C56-UP>;%1o< z07dV$k>=NufkE4SFK(9rAkvoe59cfYMU{V+B0PoP2cd=a+BGf!lMg~)Aa7q^9x>y4 z7#zM<+5nbxn;c!QrIxRI&dF8i&~H(UyU?NY7K2|V}HE)JWMvIdUBBrtX|8@ z3VNHkcMCY-%RCI%u6(;qg0)G-vunZDJZ1GR=4Ac+EFarv4CrihwWfeJ(9LT)xynFX zA={9OmWotI5L3{O`8QD1J!hxttW46TIqzVPo(eeRo)y8FFrUrV85gSu+g`!(J&4sa zCcRqZ*%ZQtQRZ;WRW`1(X{?qIRXenYHsQh2;?$9S{a$X?u5oO}gFq%vO2#Ebhc*_A_Mgq4%ZWLz-vWSXR4e5G9# z|ILwRNN7hjy|s8$u&6wyF!5=?v|yG1G-w;WrB8HifjjzQ<(y~^7o3{%p6LG9vv96*KpDE-~9d$Wr(U08R6>3GEb^?t>IK_@=@3!97f_&{<7sp-mv z2GMT6t_`!h9O#@)D+-Hq-czE;HossN?E2ub024lkvRFESp7}E*S4cH)nRD!AqTXzL zvrUiwbaflScUh!-9r4_t-|NC6q2WTY4ade&Iyr3K&Jc#a@!rWKsEME4=I0SHXTMy8 zp~7I9zT<1JkLM!I`G(9~C(sUo@R4;wRxUHt940W1qtMrA$^3Ed5jMJ_ zqN)g}4>MylBcM3?s^zx4t4WUW0GJF4eF|A05$&iu9CkB4ins`bt|<#a>mPz+__`%F{sFV(LD0@T@knuO{obMWuOZr5Q@)q1k!} zlOWiVOIXSgm~kv=J~cBlP(^2ZmY=CaY+(EC^E2G@YSk&3GOd)9eGaYX?c$Zaj?c6u z*j-Yd%1HNIxK{73vC&X8Idw#uHXZI*7^##*9&BOS7FtD7bVtPvd~026=d{Ok>12@B z=V$ck0vB+V*Qufm7U3Lt6?#pXw zezr3&u39l#1r~09SXlo=Uth`I$^Yz8CkAMFPclBn`kp^rUF{6d37sPpv7^B2yiKiN z<;VCl(f|l9OCbN`CHcWPB757%4fpeJRpkdqhB|v?<=^-jaTqVuY(b+~!IrG1{`Op( z(tCj-c65ET`b%}%zQ`I%>_A4cH-DLA?n{K50G4-nuu7jZ-a55U8xz}>kQ)Q`y>bp3 z^&WoHSAcmP?jV>2bfI?xD#2GUp|m>G#o`1icx+*Qg*I86-8r0#T~@Vc!79LSD>f+w zR1P^#JAP-j4QoYz-$2{v5NB%Orbe5r&kquIPz1?HZV8IX!F}i!bs0&!JF-8 z>)3kdc+yPA!s$hirUHY5#BbAkWlc^wgXWki_~*o{_$gdlu@g>n(ifOD)tZGN>R}^9 zL5mYn%wQ-aXxqPkc-Wcg`Rd%mh-XjsMQG?^Y)7W$`@n5BdJ0aoaA$K^1w(y>Xk0<4IN5`0R`R7i+$JO9{SDDr0fGga!J;$ z^dE#@;?IWTC=YAbXc_pw7XYrs^3rek<{VrvC9IhUB6Ro|BTgx&Msj_t|sALT?!fk`ZbEeqVM%5I*PafLzZQu z3T`eV$?c<+PlvY^r`&JWruFyf7`qz7^`TQmc%N2#1Vo@((n=_$wm2)(Kb9DPA-Hyp zhz=jE&ITX_xCYB33Eg`=@XBS9ncf#%K1;hCI5*{P!F z7XLbm!MldQbg?e++(RLESl_?5+jv-Q5>P<2%^mxMViILI@+RCvwY=1*5?9BE%=8sv}mI?UU-c+&6poOeOACGU%yozJxu<70l8kU(GGoPOi%r~Of6)={S(|BqiuMoo9kAW|;7A7{XIJ7q51GpVf zt4^pzFZ)dCq`1W-z^Rs}su3{W1L!lk#<9zo1S|v?aK*qlYo4c{b&p-0;>9UF?SM;n z&qL0T){oV0qDEDUjJXh*jq?l}%_`ZFIA~76b;hA zUfGeHsP`BqHw^=6eAq>#oj#MB8kgsnv-=BVFnl(x-MVctBd$Y>w zVpDX;2Ng+;GCQ3#rQmz?oI=G}wLvXW^hY@*isL@07J!32RI_s%!B!1~j2=DMs7qI= z&gna*NdM{ggbJ6~*L$~(6lrm*l|ebY}J zbeM(d(kevOz()2>lb~!52$_#xBH9@PCb!y@;T@xy;;Jo|C1)2pwQfe7RZLjF3%#kI z<+_B2tTrlr@1t?!1hQeB8ZD=(wt~Il93AO~EEBtb++@9QeDQkN(;KhCWLF28o`uON zN)2BurNwuRSc%rH@fQ(0L(JjPm%2-pc zF2$+)ws7%45Uii%^ujF{>Q(?gne3gqJg)A1WO<=^uw5*VC1U=SDsa5X;tl5$%Qv2? za@}H_HZyy-gyRm4Zt>?L;>vfsLHC0p{8=p;dtnW-#{FXh!WYE^rXcSUQ8!EA@#JPP zTQIuK_CtcN@$tx~qe`e^)A{Ueqbe>snf;tk6jn57`;yfN=%UO!TF>jH2{#G4P6T4M zUz;h)pRkp_;W{B`aTzezyNn`;CE6lCbQel&6uo zP5%Rjf-=+7pYA?~Jych#zoRP|PQ+gdhij!)8gk6@H=AF(HS_c%yD(ed47XKZD~{RR zW-Q8$@PV{Npdl`{0)FCk2kG<`!L-*b;q)SwFJgOBQVvH>&C2ZO4)W)kS1mIraGtVZ zYlf)#Z9!_@86W{Y;lwa;ZpmIqyBD49N69Dg=CWiY2WoDzr*AjpK$wKZ2720HZ~BZ{ zDNCggn@HT-=c7j#F@9{p0$3z#XVLt}EHUjdP7a?@C2=C&EPA$0d`2jx#f}eK1U2xz zKDl}TZw<8WJsed@jK}(S&WjNIt$>;P&W6j$Rm6qU$6D zW*LBP8B^&6A3rjm&h~EKi>A!X%(yyFCC=Pn{-y|)*LE8M?!TP< zn)LrOD|Md%!1Pf}MjB9Ef;AEHw#@V~BBE{ecbCNDlV`oG_zW}2r=|xN0~v2tjf@@* zETMEP)V5ZR53+ZU#SjMH+M(O{qhZ%*Q;E)PPcwmz?Or9XL&WhSQCc2Idty(vb4jVY zxASg^x*<<@(eDph?oWX|jU6P#(BSadV#^q@GzRB|?Rt6r8IfWKP>R@S1@S;GC<2F= z@SJTvS;;l;i==Vj6l~_uw!5^qZLyuXzY2`;O~(}}CHXs9bXt#nqHDG0<`KKsqdMy| z7kSpOt8$j8-esK8D2h6rSSzybZAQt48t(=(V?g&5v0&1gvVEx++rle^&FKHrToL_r zHq4}%h|iPn6e%@vhK4OE$dlzgPsKNSS;cxD+R6cYD%ngaH~`3HA&`!QjB(xx%#?G@ zkTaOfBq};MX^hy65JxBn=gYo3fcCUqU&~SU!;nOKq#D%TL#ZpEJ)&h>i1_l|>*Cwx zjH;|bo9+diR?EEJL0TIGX$Hfe^b>|Kz8S1DzK z*K|1wWFULPB-(Vm(?0KuZzE(bi~7{&wO6uZA>c>twv2X#2-f$BtcCivTAQwjUt$l&s^6`@6d`WMfSwZ35DY-Kz>PUK_ZRo@auV zuy5?*ZW|51A6zXHc6&-EK?-!ATiX&*l_2gHR~3&Xx{+`x_ehCAs0+qCAY7khTz@A> zn-+LOr7o@K(R}3W&D~ZBqG*ls?OwMo|61h%z%j3i<5aN9$kmJ)ysO;E%%XC~B6%rl zgUaml?V9~FZEwFxJ5au=u%%mDYo>47K7&WQ(8M#;v1syVV{?{L4Cf_?r{N*}x29I# z8C;MmQQ5Qt>Pa`yZMtR7zE?K~?mEEwD@sm7Bno7FVqvA%ty0RCy8!t`w>e1^B=@C! zyzx3r8rTA#r04L6RMEG!y+K}PHVkf^!pJunCMw=1qLrb(LdX^^&n5wf`c1|K2s?&} zJHVCX4^)hxSP9q{?f8|PV>+-=&gG`{jC4|e6P-U(VX|HjbR-fuzr(}a?2F3#I2X{_(MlJU zf;qFb)9Y?+y*l)-gG23Yjkv@8L=s`ZcqHV5+_)~I)m*YY;RY=3hH@T3Z$FJ5$B|=r zotq7d^!TfULv<-UtTHQWV;v{blsWd!E!2=M;Whj*?>0{iHD{TsBF zVgi_FtNu~`TXeZwmD@wN_CDoo7;wyPiHVOc41Rucu9Bc{7G2RxWf*E`mlawWAyMl#o&5S_RR>x$$xNb>~Ju!41|aJ!8+ah@B{$uxi^mQ{2l zzSxtMS>XAg*j(=xOpYmlHU1l7+iC-c1c0YLm3@l~cl!$AdqCWj6vP7{#i0NUUNhxd zv&h-)6#Pc~h>bGOEqZls;WXJ5uS{6&G1UJEAr~C*H`c1{wdw7yPGm3lCZN+(#yGKe%Rpzk>=O78pM&m#?>3K3a z!GO}@37O)Z89WAJ;s8gr^n=%|F!84Y2DH~pKbEWNqeKicHRoO#B&eQr8>OeGKlz|D zATu|n`_pO)(B0)l=Ytp(n}iVPG{6qA@gPhO4;J+tq+uNT=lV7}wkvB$d&Vu@MAuLa&e`}Wis7amD7F&Tb13v?R4cohjXI!U7k zGk((&BJ$|LmXqecf z3UvZzEQ8L-NYOz$q*2c*7F9Ckc~uKiY;11KC*gW9PbBAg)FGV$$B=AipCwxXylISt zCBDzgVxO0qsAp~$LqzXD@l<$Jc<07(ncl+a4(MfDBVF1OUwN_D=_GJ;Q;xr`gFj@w zM+lW7X7C3L>FT7;IAlyuMCoBhMXY_0{^uc1Suu@|DZFr>~3B zFoO4opbMft@c0RQ(*aRn#}(PXA!)!;xP>w~wZz zj*kq#7JaO)>rsC4e*5$-!_m3zy!!E$?UjYu+B@%vuWN%`@Xw|8m-Hh<)@mWQUCNIk zLMN>a9?L?J{+#AYfWzid;!C$~!RVjJRf!e5EVf+44IJo2#1KVBQG>}b-464@I$Ng7 zQ`g**2c_sYaX2)|}ya&F{JiANA}4 zun1tLVe>JiY7$~V9T6~H$g=R^*Sq;hHY%6Fz8QOZEC#O+dsNHQc8<}ZckbmOxUPA1 zl`-uB|LNZ*$H$i2*s*9XcQX9k5VWFRrFhV~Z3a8uVV)MF{KS!4Vpx{tPXn z{F5>A$@5o-xR88RT!$=*gH?M=xq{}pX`GryWDS_#JMFpnJ6BEW!3V;+|U4~BpE97ufvm* z=_Eqc2-R)&d9JwZJ6DiO0`m9(o@@*zLA8b8AFK8GL2(rzUdTV7fZTnWCF5jb^-kcf z51r6R1?pjHp+}CAD(R1YQjBDp<)Rk-ue8@(-Hj(d8q|F2botW|hSM3nY@ZNK+V>uO zw{xM`^;D&Y9n8mw4*cM=R%!ChIZZkAjCQW-^UzaYWrK=z;2t7C?fVicdW*V44>)A@^AQA%ePQ!@boD-l4`SDz}1nmGFp1+rI`&}9T#8IUBgN)y#HSTFBW=QjCNmeRSY7n+a zd^Rb`=MUvYL%6C;cM2Kpfg-&QXd+0sI0fip&CSh4#dp0W-#Ja2vdXx%4rVPFH9kqx zu~BF&n5K1tryhr=2c|jGXU!E_IRH)IkNRB19aJ=)2y{4$xTQ0+-`Yg=xU|Ap7>mR~ zB_NOiv`iIo8i8QG37Bqh1?5Yv=-jr<|RoX#oq~+6W+$P#H z0*g(Pp%~(RHm$OxPXz>HQ`%H z)ZpX4mc(s%SGrvc+PD8I-Jf+Qdl-%sh6M_g9yTShl%3vi^Lje5R|1NT9m9V<%~p{? zDbCEo4-tLqOc`%(+Pqx0j+5gHI0%5rFAS5z>5YeN2Ufrvjz3fazNS*gglPkxLL#H_ zKkO|Hol(DLhTH1gaJl9IHmPuY?%c>b8iNdl5O8U=@A55v_RI3~ zRX!@;Y$CPX|7j^zfJ%f4bN3HVP^V*U;n)9c4GGY!QOg{NC>NG1sm?GoI#0W$7#)1# zj)1aL?%&xhfTjE)CT9Vk@yd5-ztTTmlBS<>PV;MSd$a|fFn{Hl%u zoiWkcO_oiBkHGty1N&H#7i;ry{d>FE0xVl$o6RqjYT@OX!06-RHVp!3mOLRAN=G=G1qzK; zp_7X?_+GmC@jk$M^F)E}>lditzW<&b`=^DeiDuAL>>l*lqptRZK8-u1eBe19SA>t6 z)xjomyPWd!O(yE#=*LZI-z|J{?=Aa5Z@>p==nk^IAKThX6QfQ`7Od$vF*kP+JevP} z^$9F~^*e_Ck!^7`#tdN8(+6HZY*)yPUe>C{nWI?HfCkZbG_|r?f(~FB{n3qKpc5_N zBKAjusBNa@2;GvJtm}mN55UGylb?3K1ZceOuvcT-$Yol%9h{ENv=Xi}-hT4fZzDeh zI8>Byh6VH4b55%FGgHfFd)gk_dksK~DR4AIs2ZJ2k!cAiBAa4O{+!VFSMGmz_N=tN zS&WR|LwMjy7n+cfz3_=tlZBefv(!(ZUJ$@9MGin1?CNfcP+wyjMC-GvrWPs^TNz}! zqr7w|pDARqUuXO6(&!H^?gxG=Ab_n)U)8M?qP~@Xgqo)8qS_hc!t}>H&gFCDV>db5 z;d`t*+!cf>G=K+n<^M5gt@Lf-X>2g@%Mgr#c z3$%CRLe8hE?^c`ZQh}o}L*QWD2=s>KeR zku#7lK4Mqslc7EqY{*I{cjCl}s34&gHvtAsuFyS>*WXH7`=3=S0erir+)%^D#)iq` zSJ55!D%6#~M+<-9(9i`S)8K-)Ud^FerHc@a=7B{h2SRpHBlL4Ee@F={{P=$LgA*sf zg4|t|Px)|B=bP8+$-1hC#1;M`2~^@$aSOP2{syDZk9o`#HOY(o!&(i@499?s@|pnH zjSQhQFqi`sy9crS`yc5x$Sg`E_{ZLOZeWQPNHGSK6lqteiRNdcELPN{d`Y8bHuZAc z>KOqSGtSaKNF7Sl$k8$!WtGsB3Q?;AQ2)XgpH3AnK1bS9ec+xH?%$bv_}GdI;Y0IAR1xzus`- zb8K=3TL`4voZsv6Q3L79V9~l%2HWObeRQj4@WZ0t1aw;|{ta>rw*6I%Y|NZ&dh;RS zP!9XEHc!_q7IepudN4z(=SaoWfCe13Z~;R0LN5sb4tD$p*6kf}6GH8 z65*sd`1nYj+#_Adw5jezXefTO0Wi@J59WKa%&)$eVRqdQwS=D#1T6FY8b4!dWi;If zhzD@6g`i+$9$-))JT%Bll6SasDL9||kwA|ZpN-(NNJH+sp)tr~~IM zX#i|u92{YJgqkKP7Fq@|U-vUzrphC_8^y4tDR~Q_3C{k6Ip?lKp>P2Zi_GHj?kHQ2 zgFK76NRhH5uQd0Zfpu*yGThKF*@7vRSL+AOc6UL7Vpq#-{_W|V0RC*}u1Nl2TLoF+ z{WObv1!$Se`XaM#ux-E+D8Y(3M`{~N+Ku=*+z(>m@1vX_xYAG4*Kt~Do?t6qvPywl zY)IEEW~9FbQZJYsXAr% zMUQVW*2vH%`^4Ak>)^z5j=W!*g4*Wrq~CU^%JhlFS$-AUbF))a{sC5Z$daGzKv zq)bu>TiLx|e!a@P)zjRu=7$r5s8tCVlMe=r{yrauJKt*{fLSqA=YM>lftwBc^5x6p zkKfePs~zXq49FC8(&&q}*M_I=-{8{!3Zc<&fUV-hYxlEIOL}{X8XXIpq9vPg!+5G`;;}_QSOs9#zi8MuxzFD{{kjjYJzzjhfT>^zgOFf0e2=gdTnF9r+T{Qr+)OZB zeNU)X>SPgHqovTxaWs@xz)8sCQS@yvHf&Sz90P|k5Hs)Siq8zT6&dAgZ@iTE8f1I| z%00$&_0&JQ%JY^t06{SB*Rsa^paeX$Y?myBO4WqB{LZF!JUsH`BZGvita?&{tTPe47PjPe-FdR3JJ_1b=P z918Kfet+$cN-^qdGD6hoco@V41(oU@`l=30#F-!D5YUCRE%Dh*Tn$erpc$MVutekW zc$P9I%GNVkWqo502fEcVlC92?Lnydqu?k|9lDJ&v znn21xk)SAIy!DhxYXa8YskO;#1N|>M!0wX{aG)HP@`D|EB_PFV#?P-!r_sP=xKH>` z;orD`>}RrR;xE=fPP zM_rrlSP@)_>&kW zy*)+yY1A2L*+>J^_BJ;7E{Z;dt$IvP^l?f*gOwFq7ptP=Hx^rY5fz`yE_0Y z9jm5!v|qD9m<`Kssh;AI^ghZ&&?AyQ^-q0xyv1ODUh9u;5Rq3y(&|xxwYv^!Daap! zvGN4cs4Z`l_}Z4W#SpV?&7O!-gkDuaGAX0)=t9Jgh=Yp#K(d=Rq$J?5MTN_t0JS!p z2Z|i5zN|vP`_%4jPESv#rXfD>XFK>f1#aDStwDNHD0^z3JTB@zs6jcPx@jwVPfo!Z zlsFcc=D^|ZY~YrJU``sHEsKd_D4dd*JWxXgTJHW?IxUNK!NE)74Oi;@lJcajd=@Gv zZEnPh=64f7D27}6T+-%^vJ^~=#BTz=QK)#lX~R*gqT2-MaFo`yNV4vChfQNVAkxd- z5tE(}e2Zr_V_23^77{HIQ>+As1JPAtAOrmlgHF!4o@qOwHkCTUohiwh7 zU5hOjyU!)cS*wd~<$ocdd6OeV8$3Jl!4`bI#R~(#KcXf>!e#}ZSC=i&UF9RVC8ScO zq;EmNX_s>VqlC)xFK+#tK;$#-x~EC?fgk$++V85-3A5$7#lWr4d-8?=vwsl4B>>(R zZdm9540jKtiDSgu+*>cl9%HiI@Wsst2R+aOQfEEDpNi*Tt|m?Y0t$rPPVAjEp&qB>SK5Nxas78Kn-IB{5$YA@)|4ZqCy>Km>6JY6#@U}G~JkUjFg>=zrv>z zbRN}Mc0o(kL%;R^ve{#ISOH!uBTKx2I@>qH9P*q_P*c4}<7VDdpS1BXxZU|xjU$~p z+h+1!m^yCKn?Oxjqq+*TB#ujvZ@MW#*J(P2ocJ&J7Pzt4ZuG#;-9{~VZaNH_V|NXK z^(@MV*4#Up-pp}XQofFRdU+yc(VY}vjN&UFl(>ESl* z=-r=vbgAvCLWEA2%lQZxDn-7C!}H7d8)Duzu@;43?d zfE@h4uj2@i_a!{0Q?a0aLLU&~T>$#O)w1rs-zUvHsI=@Q7#PW#Qx4QrjXrk~uSAq# z@M7b-l?kyX)Pn+4EdS3(9}57LjU;CfshbGK(m3G!B7#W(%1?WhUYyBMe)L0|vD5S_ zTv4)b8j%Ys+ESv9W~tToKWa|i9n|7WtPH2NJ^3^t4A!4-(aB}|0bSrix0Ukn8DSZo zm;V(s069nqBlsg`p^uEt>Z8tm1LiWSW(`F*Nh!`23aq`{YcgklJ+Nr5XXKk${m*g% zaF_#>Eo3vJo>BwFic@rgaY|F+o)BQPVmhV`YZB!D_bK78R;&gMXin-8hXShiC4Bvk z%7*;-u`rHq4t%rVOCmK_{+D^wlmP@2GyzYMq2|Z^U0wceT|e9>q!Bo&*;X1A^_O}6 zA1?ZzyQJ*qm^^7`ZT|hT9}zZZ0-ynn{t_z}s0H*dYxwI8E%kRJGRD&6@8d`RmtO$s z8=x)>L=faR{U`okIH3gC0a>y4=I8!j$dleh>g`0Ug1-{}pDfb$&dS`FX1*}|@$uQ{ zAx9;l^&F3!KY~tZfVN!%iT-7GS^0mtG{BDhLJKsszknDW!!LvI|4oB% zVPBQ%yzj%RjuPrn<30bvX6Mr8++@Vp*u%1@rjJ4{@qs>}Lg-RVkR72l%qB`vgepp@ zfzebeXYSDL`7gj8+(#!jsNe+s9>n}38V|WtV=*pAQWU1T-B$|!8btI<@MjHF-5^uZ z^N+uZ2122DjKEKXH#K)?XgXGy(-HslSSsgd`5Wu|XviVPzXlS2v%E4U2KzGCe*eGu zikk0#F5pRUucL;XDl}75D+#D42>s*2zmvuV?1B*D%+GAXEWoW<9(mBu zuI17Owx#djEze=YUOU#>M^29=rp%MG5cF`pT2PKK45Y z_@#hg@El*n-#qVsX!?JWSv57;Un2WUWPge5FDv`Y%Koyl{A#~|L2%9gZ-D_am_Q*D zUk6Sc`V$~sZLBmnn6R|LZ158o1H#Gt_YC}zZ@+}|mvH{OIQrdrHmcLjfW}}u^*h;m62vAevKP$tw1B=<7 RpG;u@0#8>zmvv4FO#t8t!vz2U diff --git a/ng2-components/ng2-alfresco-search/src/assets/images/empty_doc_lib.svg b/ng2-components/ng2-alfresco-search/src/assets/images/empty_doc_lib.svg new file mode 100644 index 0000000000..866acd527b --- /dev/null +++ b/ng2-components/ng2-alfresco-search/src/assets/images/empty_doc_lib.svg @@ -0,0 +1,208 @@ + + + + empty_doc_lib + Created with Sketch. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/ng2-components/ng2-alfresco-search/src/components/alfresco-search-autocomplete.component.ts b/ng2-components/ng2-alfresco-search/src/components/alfresco-search-autocomplete.component.ts index f4b5e50e13..f3a066f4ba 100644 --- a/ng2-components/ng2-alfresco-search/src/components/alfresco-search-autocomplete.component.ts +++ b/ng2-components/ng2-alfresco-search/src/components/alfresco-search-autocomplete.component.ts @@ -68,7 +68,7 @@ export class AlfrescoSearchAutocompleteComponent implements OnInit, OnChanges { @ViewChild('resultsTableBody', {}) resultsTableBody: ElementRef; - baseComponentPath: string = module.id.replace('/components/alfresco-search.component.js', ''); + baseComponentPath: string = module.id.replace('/components/alfresco-search-autocomplete.component.js', ''); constructor(private searchService: AlfrescoSearchService, private translateService: AlfrescoTranslationService, @@ -128,13 +128,14 @@ export class AlfrescoSearchAutocompleteComponent implements OnInit, OnChanges { if (node.entry.content && node.entry.content.mimeType) { let icon = this.thumbnailService.getMimeTypeIcon(node.entry.content.mimeType); return this.resolveIconPath(icon); - } else if (node.entry.isFolder) { - return `${this.baseComponentPath}/../assets/images/ft_ic_folder.svg`; + } + if (node.entry.isFolder) { + return `${this.baseComponentPath}/assets/images/ft_ic_folder.svg`; } } resolveIconPath(icon: string): string { - return `${this.baseComponentPath}/../assets/images/${icon}`; + return `${this.baseComponentPath}/assets/images/${icon}`; } /** diff --git a/ng2-components/ng2-alfresco-search/src/components/alfresco-search.component.css b/ng2-components/ng2-alfresco-search/src/components/alfresco-search.component.css index 5f087e32c3..46d9a98066 100644 --- a/ng2-components/ng2-alfresco-search/src/components/alfresco-search.component.css +++ b/ng2-components/ng2-alfresco-search/src/components/alfresco-search.component.css @@ -13,3 +13,25 @@ overflow: hidden; text-overflow: ellipsis; } +.no-result-message { + height: 32px; + opacity: 0.26; + font-family: Muli, Helvetica, Arial, sans-serif; + font-size: 24px; + line-height: 1.33; + letter-spacing: -1px; + color: #000000; +} + +.no-result__empty_doc_lib { + width: 565px; + height: 161px; + object-fit: contain; + margin-top: 17px; +} + +.empty_template { + text-align: center; + margin-top: 20px; + margin-bottom: 20px; +} diff --git a/ng2-components/ng2-alfresco-search/src/components/alfresco-search.component.html b/ng2-components/ng2-alfresco-search/src/components/alfresco-search.component.html index 4b023fbfbe..a38feaaf40 100644 --- a/ng2-components/ng2-alfresco-search/src/components/alfresco-search.component.html +++ b/ng2-components/ng2-alfresco-search/src/components/alfresco-search.component.html @@ -1,38 +1,79 @@ - - - - - - - - - - - +
+

{{ 'SEARCH.RESULTS.ERROR' | translate:{errorMessage: errorMessage} }}

+
+ + + + + -
- - - - - + + + + + + + + + - -
{{ 'SEARCH.RESULTS.SUMMARY' | translate:{numResults: results.length, searchTerm: searchTerm} }}
- {{'SEARCH.RESULTS.COLUMNS.NAME' | translate}} - - {{'SEARCH.RESULTS.COLUMNS.MODIFIED_BY' | translate}} - - {{'SEARCH.RESULTS.COLUMNS.MODIFIED_AT' | translate}} -
{{getMimeTypeKey(result)|translate}}{{result.entry.name}}{{result.entry.modifiedByUser.displayName}}{{result.entry.modifiedAt | date}}
- - - - - - -
{{ 'SEARCH.RESULTS.NONE' | translate:{searchTerm: searchTerm} }}
-

{{ 'SEARCH.RESULTS.ERROR' | translate:{errorMessage: errorMessage} }}

+ + + + + + + + + + + + + +

+ diff --git a/ng2-components/ng2-alfresco-search/src/components/alfresco-search.component.spec.ts b/ng2-components/ng2-alfresco-search/src/components/alfresco-search.component.spec.ts index 61186eda3d..b14a95d503 100644 --- a/ng2-components/ng2-alfresco-search/src/components/alfresco-search.component.spec.ts +++ b/ng2-components/ng2-alfresco-search/src/components/alfresco-search.component.spec.ts @@ -16,12 +16,10 @@ */ import { DebugElement, ReflectiveInjector, SimpleChange } from '@angular/core'; -import { By } from '@angular/platform-browser'; import { ComponentFixture, TestBed, async } from '@angular/core/testing'; import { ActivatedRoute } from '@angular/router'; import { Observable } from 'rxjs/Rx'; import { AlfrescoSearchComponent } from './alfresco-search.component'; -import { AlfrescoThumbnailService } from './../services/alfresco-thumbnail.service'; import { TranslationMock } from './../assets/translation.service.mock'; import { AlfrescoSearchService } from '../services/alfresco-search.service'; import { @@ -33,6 +31,7 @@ import { StorageService, LogService } from 'ng2-alfresco-core'; +import { DocumentListModule } from 'ng2-alfresco-documentlist'; describe('AlfrescoSearchComponent', () => { @@ -69,8 +68,8 @@ describe('AlfrescoSearchComponent', () => { entry: { id: '123', name: 'MyFolder', - isFile : false, - isFolder : true, + isFile: false, + isFolder: true, createdByUser: { displayName: 'John Doe' }, @@ -102,13 +101,13 @@ describe('AlfrescoSearchComponent', () => { beforeEach(async(() => { TestBed.configureTestingModule({ imports: [ - CoreModule.forRoot() + CoreModule.forRoot(), + DocumentListModule.forRoot() ], - declarations: [ AlfrescoSearchComponent ], // declare the test component + declarations: [AlfrescoSearchComponent], // declare the test component providers: [ AlfrescoSearchService, - {provide: AlfrescoTranslationService, useClass: TranslationMock}, - AlfrescoThumbnailService + {provide: AlfrescoTranslationService, useClass: TranslationMock} ] }).compileComponents().then(() => { fixture = TestBed.createComponent(AlfrescoSearchComponent); @@ -123,9 +122,9 @@ describe('AlfrescoSearchComponent', () => { it('should take the provided search term from query param provided via RouteParams', () => { let injector = ReflectiveInjector.resolveAndCreate([ - { provide: ActivatedRoute, useValue: { params: Observable.from([{ q: 'exampleTerm692' }]) } } + {provide: ActivatedRoute, useValue: {params: Observable.from([{q: 'exampleTerm692'}])}} ]); - let search = new AlfrescoSearchComponent(null, null, null, injector.get(ActivatedRoute)); + let search = new AlfrescoSearchComponent(null, null, injector.get(ActivatedRoute)); search.ngOnInit(); expect(search.searchTerm).toBe('exampleTerm692'); }); @@ -138,9 +137,9 @@ describe('AlfrescoSearchComponent', () => { AlfrescoApiService, StorageService, LogService, - { provide: ActivatedRoute, useValue: { params: Observable.from([{}]) } } + {provide: ActivatedRoute, useValue: {params: Observable.from([{}])}} ]); - let search = new AlfrescoSearchComponent(injector.get(AlfrescoSearchService), null, null, injector.get(ActivatedRoute)); + let search = new AlfrescoSearchComponent(injector.get(AlfrescoSearchService), null, injector.get(ActivatedRoute)); search.ngOnInit(); expect(search.searchTerm).toBeNull(); }); @@ -157,6 +156,7 @@ describe('AlfrescoSearchComponent', () => { it('should call search service with the correct parameters', (done) => { let searchTerm = 'searchTerm63688', options = { include: ['path'], + skipCount: 0, rootNodeId: '-my-', nodeType: 'my:type', maxItems: 20, @@ -186,9 +186,9 @@ describe('AlfrescoSearchComponent', () => { component.resultsLoad.subscribe(() => { fixture.detectChanges(); expect(searchService.getQueryNodesPromise).toHaveBeenCalled(); - expect(element.querySelector('#result_user_0')).not.toBeNull(); - expect(element.querySelector('#result_user_0').innerHTML).toBe('John Doe'); - expect(element.querySelector('#result_name_0').innerHTML).toBe('MyDoc'); + let resultsEl = element.querySelector('[data-automation-id="text_MyDoc"]'); + expect(resultsEl).not.toBeNull(); + expect(resultsEl.innerHTML.trim()).toBe('MyDoc'); done(); }); @@ -204,7 +204,7 @@ describe('AlfrescoSearchComponent', () => { component.resultsLoad.subscribe(() => { fixture.detectChanges(); - expect(element.querySelector('#search_no_result')).not.toBeNull(); + expect(element.querySelector('.no-result-message')).not.toBeNull(); done(); }); @@ -218,11 +218,10 @@ describe('AlfrescoSearchComponent', () => { spyOn(searchService, 'getQueryNodesPromise') .and.returnValue(Promise.reject(errorJson)); - component.resultsLoad.subscribe(() => {}, () => { + component.resultsLoad.subscribe(() => { + }, () => { fixture.detectChanges(); - let resultsEl = element.querySelector('[data-automation-id="search_result_table"]'); let errorEl = element.querySelector('[data-automation-id="search_error_message"]'); - expect(resultsEl).toBeNull(); expect(errorEl).not.toBeNull(); expect((errorEl).innerText).toBe('SEARCH.RESULTS.ERROR'); done(); @@ -240,10 +239,10 @@ describe('AlfrescoSearchComponent', () => { component.resultsLoad.subscribe(() => { fixture.detectChanges(); - expect(searchService.getQueryNodesPromise.calls.mostRecent().args[0]).toBe('searchTerm2'); - expect(element.querySelector('#result_user_0')).not.toBeNull(); - expect(element.querySelector('#result_user_0').innerHTML).toBe('John Doe'); - expect(element.querySelector('#result_name_0').innerHTML).toBe('MyDoc'); + expect(searchService.getQueryNodesPromise).toHaveBeenCalled(); + let resultsEl = element.querySelector('[data-automation-id="text_MyDoc"]'); + expect(resultsEl).not.toBeNull(); + expect(resultsEl.innerHTML.trim()).toBe('MyDoc'); done(); }); @@ -257,13 +256,12 @@ describe('AlfrescoSearchComponent', () => { let searchService: AlfrescoSearchService; let querySpy: jasmine.Spy; let emitSpy: jasmine.Spy; - const rowSelector = '[data-automation-id="search_result_table"] tbody tr'; beforeEach(() => { debugElement = fixture.debugElement; searchService = fixture.debugElement.injector.get(AlfrescoSearchService); querySpy = spyOn(searchService, 'getQueryNodesPromise').and.returnValue(Promise.resolve(result)); - emitSpy = spyOn(component.navigate, 'emit'); + emitSpy = spyOn(component.preview, 'emit'); }); describe('click results', () => { @@ -272,12 +270,14 @@ describe('AlfrescoSearchComponent', () => { component.navigationMode = AlfrescoSearchComponent.SINGLE_CLICK_NAVIGATION; }); - it('should emit navigation event when file item clicked', (done) => { + it('should emit preview event when file item clicked', (done) => { component.resultsLoad.subscribe(() => { fixture.detectChanges(); - debugElement.query(By.css(rowSelector)).triggerEventHandler('click', {}); - expect(emitSpy).toHaveBeenCalled(); + + let resultsEl = element.querySelector('[data-automation-id="text_MyDoc"]'); + resultsEl.dispatchEvent(new Event('click')); + done(); }); @@ -285,14 +285,16 @@ describe('AlfrescoSearchComponent', () => { component.ngOnInit(); }); - it('should emit navigation event when non-file item is clicked', (done) => { + it('should emit preview event when non-file item is clicked', (done) => { querySpy.and.returnValue(Promise.resolve(folderResult)); component.resultsLoad.subscribe(() => { fixture.detectChanges(); - debugElement.query(By.css(rowSelector)).triggerEventHandler('click', {}); - expect(emitSpy).toHaveBeenCalled(); + + let resultsEl = element.querySelector('[data-automation-id="text_MyFolder"]'); + resultsEl.dispatchEvent(new Event('click')); + done(); }); @@ -307,12 +309,14 @@ describe('AlfrescoSearchComponent', () => { component.navigationMode = AlfrescoSearchComponent.DOUBLE_CLICK_NAVIGATION; }); - it('should emit navigation event when file item clicked', (done) => { + it('should emit preview event when file item clicked', (done) => { component.resultsLoad.subscribe(() => { fixture.detectChanges(); - debugElement.query(By.css(rowSelector)).triggerEventHandler('dblclick', {}); - expect(emitSpy).toHaveBeenCalled(); + + let resultsEl = element.querySelector('[data-automation-id="text_MyDoc"]'); + resultsEl.dispatchEvent(new Event('dblclick')); + done(); }); @@ -320,14 +324,16 @@ describe('AlfrescoSearchComponent', () => { component.ngOnInit(); }); - it('should emit navigation event when non-file item is clicked', (done) => { + it('should emit preview event when non-file item is clicked', (done) => { querySpy.and.returnValue(Promise.resolve(folderResult)); component.resultsLoad.subscribe(() => { fixture.detectChanges(); - debugElement.query(By.css(rowSelector)).triggerEventHandler('dblclick', {}); - expect(emitSpy).toHaveBeenCalled(); + + let resultsEl = element.querySelector('[data-automation-id="text_MyFolder"]'); + resultsEl.dispatchEvent(new Event('dblclick')); + done(); }); diff --git a/ng2-components/ng2-alfresco-search/src/components/alfresco-search.component.ts b/ng2-components/ng2-alfresco-search/src/components/alfresco-search.component.ts index 711f057d03..0a6cbc00b9 100644 --- a/ng2-components/ng2-alfresco-search/src/components/alfresco-search.component.ts +++ b/ng2-components/ng2-alfresco-search/src/components/alfresco-search.component.ts @@ -18,9 +18,8 @@ import { Component, EventEmitter, Input, Output, Optional, OnChanges, SimpleChanges, OnInit } from '@angular/core'; import { ActivatedRoute, Params } from '@angular/router'; import { AlfrescoSearchService, SearchOptions } from './../services/alfresco-search.service'; -import { AlfrescoThumbnailService } from './../services/alfresco-thumbnail.service'; import { AlfrescoTranslationService } from 'ng2-alfresco-core'; -import { MinimalNodeEntity } from 'alfresco-js-api'; +import { NodePaging, Pagination } from 'alfresco-js-api'; @Component({ moduleId: module.id, @@ -51,23 +50,28 @@ export class AlfrescoSearchComponent implements OnChanges, OnInit { @Input() navigationMode: string = AlfrescoSearchComponent.DOUBLE_CLICK_NAVIGATION; // click|dblclick - @Output() - navigate: EventEmitter = new EventEmitter(); - @Output() resultsLoad = new EventEmitter(); + @Output() + preview: EventEmitter = new EventEmitter(); + results: any = null; + pagination: Pagination; + errorMessage; queryParamName = 'q'; + skipCount: number = 0; + + nodeResults: NodePaging; + baseComponentPath: string = module.id.replace('/components/alfresco-search.component.js', ''); constructor(private searchService: AlfrescoSearchService, private translateService: AlfrescoTranslationService, - private thumbnailService: AlfrescoThumbnailService, @Optional() private route: ActivatedRoute) { } @@ -75,6 +79,7 @@ export class AlfrescoSearchComponent implements OnChanges, OnInit { if (this.translateService !== null) { this.translateService.addTranslationFolder('ng2-alfresco-search', 'node_modules/ng2-alfresco-search/src'); } + if (this.route) { this.route.params.forEach((params: Params) => { this.searchTerm = params.hasOwnProperty(this.queryParamName) ? params[this.queryParamName] : null; @@ -88,38 +93,16 @@ export class AlfrescoSearchComponent implements OnChanges, OnInit { ngOnChanges(changes: SimpleChanges) { if (changes['searchTerm']) { this.searchTerm = changes['searchTerm'].currentValue; + this.skipCount = 0; this.displaySearchResults(this.searchTerm); } } - /** - * Gets thumbnail URL for the given document node. - * @param node Node to get URL for. - * @returns {string} URL address. - */ - getMimeTypeIcon(node: any): string { - if (node.entry.content && node.entry.content.mimeType) { - let icon = this.thumbnailService.getMimeTypeIcon(node.entry.content.mimeType); - return this.resolveIconPath(icon); - } else if (node.entry.isFolder) { - return `${this.baseComponentPath}/../assets/images/ft_ic_folder.svg`; - } - } - - private resolveIconPath(icon: string): string { - return `${this.baseComponentPath}/../assets/images/${icon}`; - } - - /** - * Gets thumbnail message key for the given document node, which can be used to look up alt text - * @param node Node to get URL for. - * @returns {string} URL address. - */ - getMimeTypeKey(node: any): string { - if (node.entry.content && node.entry.content.mimeType) { - return 'SEARCH.ICONS.' + this.thumbnailService.getMimeTypeKey(node.entry.content.mimeType); - } else { - return ''; + onPreviewFile(event: any) { + if (event.value) { + this.preview.emit({ + value: event.value + }); } } @@ -131,6 +114,7 @@ export class AlfrescoSearchComponent implements OnChanges, OnInit { if (searchTerm && this.searchService) { let searchOpts: SearchOptions = { include: ['path'], + skipCount: this.skipCount, rootNodeId: this.rootNodeId, nodeType: this.resultType, maxItems: this.maxResults, @@ -140,33 +124,35 @@ export class AlfrescoSearchComponent implements OnChanges, OnInit { .getNodeQueryResults(searchTerm, searchOpts) .subscribe( results => { + this.nodeResults = results; this.results = results.list.entries; + this.pagination = results.list.pagination; this.resultsLoad.emit(this.results); this.errorMessage = null; }, error => { - this.results = null; - this.errorMessage = error; - this.resultsLoad.error(error); + if (error.status !== 400) { + this.results = null; + this.errorMessage = error; + this.resultsLoad.error(error); + } } ); } } - onItemClick(node, event?: Event) { - if (this.navigate && this.navigationMode === AlfrescoSearchComponent.SINGLE_CLICK_NAVIGATION) { - if (node && node.entry) { - this.navigate.emit(node); - } - } + public onChangePageSize(event: Pagination): void { + this.maxResults = event.maxItems; + this.displaySearchResults(this.searchTerm); } - onItemDblClick(node: MinimalNodeEntity) { - if (this.navigate && this.navigationMode === AlfrescoSearchComponent.DOUBLE_CLICK_NAVIGATION) { - if (node && node.entry) { - this.navigate.emit(node); - } - } + public onNextPage(event: Pagination): void { + this.skipCount = event.skipCount; + this.displaySearchResults(this.searchTerm); } + public onPrevPage(event: Pagination): void { + this.skipCount = event.skipCount; + this.displaySearchResults(this.searchTerm); + } } diff --git a/ng2-components/ng2-alfresco-search/src/i18n/en.json b/ng2-components/ng2-alfresco-search/src/i18n/en.json index 8f8042c28b..bfee68b4c5 100644 --- a/ng2-components/ng2-alfresco-search/src/i18n/en.json +++ b/ng2-components/ng2-alfresco-search/src/i18n/en.json @@ -5,7 +5,7 @@ }, "RESULTS": { "SUMMARY": "Found {{numResults}} results for {{searchTerm}}", - "NONE": "No results found for {{searchTerm}}", + "NONE": "No results found searching for {{searchTerm}}", "ERROR": "An error occurred while running the search", "COLUMNS": { "NAME": "Display name", @@ -25,6 +25,22 @@ "ft_ic_archive": "Acrchive file", "ft_ic_presentation": "Presentation file", "ft_ic_spreadsheet": "Spreadsheet file" + }, + "DOCUMENT_LIST": { + "COLUMNS": { + "DISPLAY_NAME": "Display name", + "CREATED_BY": "Created by", + "CREATED_ON": "Created on" + }, + "ACTIONS": { + "FOLDER": { + "DELETE": "Delete" + }, + "DOCUMENT": { + "DOWNLOAD": "Download", + "DELETE": "Delete" + } + } } } } diff --git a/ng2-components/ng2-alfresco-search/src/services/alfresco-search.service.ts b/ng2-components/ng2-alfresco-search/src/services/alfresco-search.service.ts index 7de189c7da..f9fc563d48 100644 --- a/ng2-components/ng2-alfresco-search/src/services/alfresco-search.service.ts +++ b/ng2-components/ng2-alfresco-search/src/services/alfresco-search.service.ts @@ -18,6 +18,7 @@ import { Injectable } from '@angular/core'; import { Observable } from 'rxjs/Rx'; import { AlfrescoAuthenticationService, AlfrescoApiService } from 'ng2-alfresco-core'; +import { NodePaging } from 'alfresco-js-api'; /** * Internal service used by Document List component. @@ -36,13 +37,13 @@ export class AlfrescoSearchService { * @param options Additional options passed to the search * @returns {Observable} Search results */ - public getNodeQueryResults(term: string, options?: SearchOptions): Observable { + public getNodeQueryResults(term: string, options?: SearchOptions): Observable { return Observable.fromPromise(this.getQueryNodesPromise(term, options)) - .map(res => res) + .map(res => res) .catch(err => this.handleError(err)); } - private getQueryNodesPromise(term: string, opts: SearchOptions) { + private getQueryNodesPromise(term: string, opts: SearchOptions): Promise { return this.apiService.getInstance().core.queriesApi.findNodes(term, opts); } diff --git a/ng2-components/ng2-alfresco-tag/karma-test-shim.js b/ng2-components/ng2-alfresco-tag/karma-test-shim.js index b922a90bce..6aa9dd62c7 100644 --- a/ng2-components/ng2-alfresco-tag/karma-test-shim.js +++ b/ng2-components/ng2-alfresco-tag/karma-test-shim.js @@ -1,7 +1,14 @@ // Tun on full stack traces in errors to help debugging Error.stackTraceLimit = Infinity; -// jasmine.DEFAULT_TIMEOUT_INTERVAL = 1000; +jasmine.DEFAULT_TIMEOUT_INTERVAL = 100000; + +window.componentHandler = { + upgradeAllRegistered: function () { + }, + upgradeElement: function () { + } +}; __karma__.loaded = function() {}; diff --git a/ng2-components/ng2-alfresco-upload/karma-test-shim.js b/ng2-components/ng2-alfresco-upload/karma-test-shim.js index b922a90bce..6aa9dd62c7 100644 --- a/ng2-components/ng2-alfresco-upload/karma-test-shim.js +++ b/ng2-components/ng2-alfresco-upload/karma-test-shim.js @@ -1,7 +1,14 @@ // Tun on full stack traces in errors to help debugging Error.stackTraceLimit = Infinity; -// jasmine.DEFAULT_TIMEOUT_INTERVAL = 1000; +jasmine.DEFAULT_TIMEOUT_INTERVAL = 100000; + +window.componentHandler = { + upgradeAllRegistered: function () { + }, + upgradeElement: function () { + } +}; __karma__.loaded = function() {}; diff --git a/ng2-components/ng2-alfresco-userinfo/karma-test-shim.js b/ng2-components/ng2-alfresco-userinfo/karma-test-shim.js index b922a90bce..6aa9dd62c7 100644 --- a/ng2-components/ng2-alfresco-userinfo/karma-test-shim.js +++ b/ng2-components/ng2-alfresco-userinfo/karma-test-shim.js @@ -1,7 +1,14 @@ // Tun on full stack traces in errors to help debugging Error.stackTraceLimit = Infinity; -// jasmine.DEFAULT_TIMEOUT_INTERVAL = 1000; +jasmine.DEFAULT_TIMEOUT_INTERVAL = 100000; + +window.componentHandler = { + upgradeAllRegistered: function () { + }, + upgradeElement: function () { + } +}; __karma__.loaded = function() {}; diff --git a/ng2-components/ng2-alfresco-viewer/karma-test-shim.js b/ng2-components/ng2-alfresco-viewer/karma-test-shim.js index b922a90bce..6aa9dd62c7 100644 --- a/ng2-components/ng2-alfresco-viewer/karma-test-shim.js +++ b/ng2-components/ng2-alfresco-viewer/karma-test-shim.js @@ -1,7 +1,14 @@ // Tun on full stack traces in errors to help debugging Error.stackTraceLimit = Infinity; -// jasmine.DEFAULT_TIMEOUT_INTERVAL = 1000; +jasmine.DEFAULT_TIMEOUT_INTERVAL = 100000; + +window.componentHandler = { + upgradeAllRegistered: function () { + }, + upgradeElement: function () { + } +}; __karma__.loaded = function() {}; diff --git a/ng2-components/ng2-alfresco-webscript/karma-test-shim.js b/ng2-components/ng2-alfresco-webscript/karma-test-shim.js index dcfa63a5ae..53e4408aa1 100644 --- a/ng2-components/ng2-alfresco-webscript/karma-test-shim.js +++ b/ng2-components/ng2-alfresco-webscript/karma-test-shim.js @@ -1,7 +1,14 @@ // Tun on full stack traces in errors to help debugging Error.stackTraceLimit = Infinity; -// jasmine.DEFAULT_TIMEOUT_INTERVAL = 1000; +jasmine.DEFAULT_TIMEOUT_INTERVAL = 100000; + +window.componentHandler = { + upgradeAllRegistered: function () { + }, + upgradeElement: function () { + } +}; __karma__.loaded = function() {}; diff --git a/scripts/npm-build-bundle-all.sh b/scripts/npm-build-bundle-all.sh index 5433de9890..bb67f0931a 100755 --- a/scripts/npm-build-bundle-all.sh +++ b/scripts/npm-build-bundle-all.sh @@ -72,10 +72,18 @@ npm link ng2-activiti-diagrams npm link npm run build +#LINK SEARCH +echo "====== linking component: ng2-alfresco-search =====" +cd "$DIR/../ng2-components/ng2-alfresco-search" +npm link ng2-alfresco-core +npm link ng2-alfresco-datatable +npm link ng2-alfresco-documentlist +npm link +npm run build + #LINK ALL THE OTHERS COMPONENTS for PACKAGE in \ ng2-alfresco-login \ - ng2-alfresco-search \ ng2-alfresco-userinfo \ ng2-alfresco-upload \ ng2-alfresco-tag \ diff --git a/scripts/npm-link-all-components-demo.sh b/scripts/npm-link-all-components-demo.sh index 7d2ee6a75e..bd09e0c988 100755 --- a/scripts/npm-link-all-components-demo.sh +++ b/scripts/npm-link-all-components-demo.sh @@ -71,10 +71,19 @@ npm link ng2-alfresco-core npm link ng2-activiti-diagrams npm install +#LINK SEARCH +echo "====== linking component: ng2-alfresco-search =====" +cd "$DIR/../ng2-components/ng2-alfresco-search/demo" +npm link ng2-alfresco-core +npm link ng2-alfresco-datatable +npm link ng2-alfresco-documentlist +npm link ng2-alfresco-search +npm link +npm run build + #LINK ALL THE OTHERS COMPONENTS for PACKAGE in \ ng2-alfresco-login \ - ng2-alfresco-search \ ng2-alfresco-userinfo \ ng2-alfresco-upload \ ng2-alfresco-tag \ diff --git a/scripts/npm-link-demo-shell.sh b/scripts/npm-link-demo-shell.sh index 5433de9890..bb67f0931a 100755 --- a/scripts/npm-link-demo-shell.sh +++ b/scripts/npm-link-demo-shell.sh @@ -72,10 +72,18 @@ npm link ng2-activiti-diagrams npm link npm run build +#LINK SEARCH +echo "====== linking component: ng2-alfresco-search =====" +cd "$DIR/../ng2-components/ng2-alfresco-search" +npm link ng2-alfresco-core +npm link ng2-alfresco-datatable +npm link ng2-alfresco-documentlist +npm link +npm run build + #LINK ALL THE OTHERS COMPONENTS for PACKAGE in \ ng2-alfresco-login \ - ng2-alfresco-search \ ng2-alfresco-userinfo \ ng2-alfresco-upload \ ng2-alfresco-tag \