From 2827ad3b8fbc1e2ca2045fc247c33547aff491ac Mon Sep 17 00:00:00 2001 From: "stan.donarise" Date: Fri, 14 Jun 2024 10:57:11 +1100 Subject: [PATCH 01/29] $mol init --- .gitattributes | 1 + .github/workflows/deploy-to-gh-pages.yml | 23 ++ .gitignore | 1 + CNAME | 1 + Dockerfile | 6 - LICENSE | 42 +-- README.md | 18 +- app/app.view.tree | 1 + app/index.html | 13 + requirements.txt | 4 - results.csv | 261 ------------------- src/this_material_does_not_exist/__init__.py | 0 src/this_material_does_not_exist/app.py | 162 ------------ 13 files changed, 70 insertions(+), 463 deletions(-) create mode 100644 .gitattributes create mode 100644 .github/workflows/deploy-to-gh-pages.yml create mode 100644 .gitignore create mode 100644 CNAME delete mode 100644 Dockerfile create mode 100644 app/app.view.tree create mode 100644 app/index.html delete mode 100644 requirements.txt delete mode 100644 results.csv delete mode 100644 src/this_material_does_not_exist/__init__.py delete mode 100644 src/this_material_does_not_exist/app.py diff --git a/.gitattributes b/.gitattributes new file mode 100644 index 0000000..7745062 --- /dev/null +++ b/.gitattributes @@ -0,0 +1 @@ +* -text diff --git a/.github/workflows/deploy-to-gh-pages.yml b/.github/workflows/deploy-to-gh-pages.yml new file mode 100644 index 0000000..9c7c4ff --- /dev/null +++ b/.github/workflows/deploy-to-gh-pages.yml @@ -0,0 +1,23 @@ +name: build demo + +on: + workflow_dispatch: + push: + pull_request: + +jobs: + build: + + runs-on: ubuntu-latest + + steps: + + - uses: hyoo-ru/mam_build@master2 + with: + package: mpds/tmdne + modules: app + + - uses: JamesIves/github-pages-deploy-action@4.1.7 + with: + branch: gh-pages + folder: mpds/tmdne/app/- diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..e3e8fe6 --- /dev/null +++ b/.gitignore @@ -0,0 +1 @@ +-* diff --git a/CNAME b/CNAME new file mode 100644 index 0000000..13bc825 --- /dev/null +++ b/CNAME @@ -0,0 +1 @@ +nanoshow.mpds.io \ No newline at end of file diff --git a/Dockerfile b/Dockerfile deleted file mode 100644 index 16a0d37..0000000 --- a/Dockerfile +++ /dev/null @@ -1,6 +0,0 @@ -from python:3.11-slim-buster - -copy . /app -workdir /app -run pip install -r requirements.txt -cmd gunicorn src.this_material_does_not_exist.app:server -b 0.0.0.0:8050 diff --git a/LICENSE b/LICENSE index c7c2544..0d0e9f4 100644 --- a/LICENSE +++ b/LICENSE @@ -1,21 +1,21 @@ -MIT License - -Copyright (c) 2023 Matthew Evans - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. +MIT License + +Copyright (c) 2023 Matthew Evans + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/README.md b/README.md index a81ec6f..1bd92d5 100644 --- a/README.md +++ b/README.md @@ -1,9 +1,9 @@ -

💎 this-material-does-not-exist 💎

- -Get given random crystal structures predicted by ML materials discovery projects, and vote on whether you think it should be synthesizable (or, at least, whether it is worth trying!) - -Currently uses [crystaltoolkit](https://docs.crystaltoolkit.org) and data from the -[OPTIMADE API](https://optimade.org) for the recent [Google DeepMind -paper](https://github.com/google-deepmind/materials_discovery). - -![2023-12-10-001838_1095x878_scrot](https://github.com/ml-evs/this-material-does-not-exist/assets/7916000/678ba7ec-d929-438e-8637-3dad5bf26493) +

💎 this-material-does-not-exist 💎

+ +Get given random crystal structures predicted by ML materials discovery projects, and vote on whether you think it should be synthesizable (or, at least, whether it is worth trying!) + +Currently uses [crystaltoolkit](https://docs.crystaltoolkit.org) and data from the +[OPTIMADE API](https://optimade.org) for the recent [Google DeepMind +paper](https://github.com/google-deepmind/materials_discovery). + +![2023-12-10-001838_1095x878_scrot](https://github.com/ml-evs/this-material-does-not-exist/assets/7916000/678ba7ec-d929-438e-8637-3dad5bf26493) diff --git a/app/app.view.tree b/app/app.view.tree new file mode 100644 index 0000000..523c4e5 --- /dev/null +++ b/app/app.view.tree @@ -0,0 +1 @@ +$mpds_tmdne_app $mol_view diff --git a/app/index.html b/app/index.html new file mode 100644 index 0000000..fc1298f --- /dev/null +++ b/app/index.html @@ -0,0 +1,13 @@ + + + + + + + + + +
+ + + diff --git a/requirements.txt b/requirements.txt deleted file mode 100644 index 5cf4480..0000000 --- a/requirements.txt +++ /dev/null @@ -1,4 +0,0 @@ -httpx -crystal-toolkit -optimade[pymatgen] -gunicorn diff --git a/results.csv b/results.csv deleted file mode 100644 index 5f03388..0000000 --- a/results.csv +++ /dev/null @@ -1,261 +0,0 @@ -813805a1-179a-442b-b9da-1555b816138f,a8ba8cc16a,1 -813805a1-179a-442b-b9da-1555b816138f,4c4300b256,2 -813805a1-179a-442b-b9da-1555b816138f,4c4300b256,3 -813805a1-179a-442b-b9da-1555b816138f,4c4300b256,4 -813805a1-179a-442b-b9da-1555b816138f,4c4300b256,5 -813805a1-179a-442b-b9da-1555b816138f,48c04ddda9,1 -052430ea-71a4-45e0-a41c-6ff306996832,08f12dbe96,1 -052430ea-71a4-45e0-a41c-6ff306996832,373e1dabfe,2 -052430ea-71a4-45e0-a41c-6ff306996832,0ed077f153,2 -052430ea-71a4-45e0-a41c-6ff306996832,c3c11010ac,3 -052430ea-71a4-45e0-a41c-6ff306996832,ae4cf9267c,1 -052430ea-71a4-45e0-a41c-6ff306996832,8bf08247fa,1 -052430ea-71a4-45e0-a41c-6ff306996832,ae25695182,2 -052430ea-71a4-45e0-a41c-6ff306996832,feee8c9d63,3 -052430ea-71a4-45e0-a41c-6ff306996832,42769a42a5,1 -052430ea-71a4-45e0-a41c-6ff306996832,9fb7d29912,1 -052430ea-71a4-45e0-a41c-6ff306996832,9cd7028825,1 -052430ea-71a4-45e0-a41c-6ff306996832,f93489bf43,1 -052430ea-71a4-45e0-a41c-6ff306996832,ace503fa98,1 -052430ea-71a4-45e0-a41c-6ff306996832,85eed2ff79,2 -052430ea-71a4-45e0-a41c-6ff306996832,ef3ec0fe29,1 -052430ea-71a4-45e0-a41c-6ff306996832,46111b4fd6,1 -052430ea-71a4-45e0-a41c-6ff306996832,1355778f40,2 -052430ea-71a4-45e0-a41c-6ff306996832,fd48845ad0,3 -2023-12-10T01:35:29.183831,335e4fb7-ebfb-40be-a67b-c9b5986861f3,08f12dbe96,1 -2023-12-10T01:36:05.953010,335e4fb7-ebfb-40be-a67b-c9b5986861f3,373e1dabfe,2 -2023-12-10T01:36:15.569456,335e4fb7-ebfb-40be-a67b-c9b5986861f3,29996413f6,3 -2023-12-10T01:37:03.436101,335e4fb7-ebfb-40be-a67b-c9b5986861f3,b7866d38a4,1 -2023-12-10T01:40:07.901205,335e4fb7-ebfb-40be-a67b-c9b5986861f3,ae4cf9267c,2 -2023-12-10T01:53:25.229727,172.31.48.11,08f12dbe96,1 -2023-12-10T01:53:37.527790,172.31.48.11,373e1dabfe,2 -2023-12-10T04:39:08.401134,172.31.48.11,2032820f51,1 -2023-12-10T07:52:41.831894,172.31.48.11,2871f6d074,1 -2023-12-10T07:52:49.369994,172.31.48.11,8bf08247fa,2 -2023-12-10T07:52:58.968660,172.31.48.11,61f0bde892,3 -2023-12-10T08:40:09.841372,172.31.48.11,fe77f9ad05,1 -2023-12-10T08:40:40.469997,172.31.48.11,474990c5d5,2 -2023-12-10T08:41:56.930155,172.31.48.11,cd58cf65f4,1 -2023-12-10T08:42:11.230770,172.31.48.11,02fb284d16,2 -2023-12-10T08:42:13.081288,172.31.48.11,184bdb616c,3 -2023-12-10T08:42:27.729663,172.31.48.11,42769a42a5,4 -2023-12-10T08:44:22.294723,172.31.48.11,0a627e5e0c,5 -2023-12-10T08:44:29.163058,172.31.48.11,9fb7d29912,6 -2023-12-10T08:44:32.369661,172.31.48.11,9cd7028825,7 -2023-12-10T08:44:40.858716,172.31.48.11,74175f9642,1 -2023-12-10T08:44:42.146964,172.31.48.11,b1e7320905,8 -2023-12-10T08:44:47.722387,172.31.48.11,e34e18dd40,9 -2023-12-10T08:44:52.606806,172.31.48.11,d90550ac56,10 -2023-12-10T08:45:01.197856,172.31.48.11,5088f350e8,11 -2023-12-10T08:45:26.772820,172.31.48.11,22e3d0722b,12 -2023-12-10T09:04:49.820630,172.31.48.11,b5aa020a86,1 -2023-12-10T09:28:48.400872,172.31.48.11,38b594b9f0,1 -2023-12-10T09:28:57.459704,172.31.48.11,6b98dbca69,2 -2023-12-10T09:29:09.253819,172.31.48.11,5d89fc9011,3 -2023-12-10T10:12:28.754033,172.31.48.11,85eed2ff79,1 -2023-12-10T10:12:43.296791,172.31.48.11,3068b9a4b4,2 -2023-12-10T10:13:16.239041,172.31.48.11,ef3ec0fe29,3 -2023-12-10T10:47:21.519517,172.31.48.11,4810103dc8,1 -2023-12-10T11:42:18.309595,172.31.48.11,2d984e0731,1 -2023-12-10T11:42:23.584336,172.31.48.11,396a22636d,2 -2023-12-10T11:42:30.598941,172.31.48.11,aa68bc5ea6,3 -2023-12-10T11:42:32.480918,172.31.48.11,1e42be3bf6,4 -2023-12-10T11:42:33.469528,172.31.48.11,b9c0483275,5 -2023-12-10T11:42:34.091270,172.31.48.11,9342aaea05,6 -2023-12-10T11:42:35.224948,172.31.48.11,da3368a66d,7 -2023-12-10T11:42:36.071050,172.31.48.11,f814051baf,8 -2023-12-10T11:42:36.670731,172.31.48.11,2a3bd925a4,9 -2023-12-10T11:42:37.832525,172.31.48.11,b443ba681d,10 -2023-12-10T11:42:38.947643,172.31.48.11,b178b4b60b,11 -2023-12-10T11:42:39.713972,172.31.48.11,5d89fc9011,12 -2023-12-10T11:42:40.713326,172.31.48.11,f8410244a9,13 -2023-12-10T11:42:41.882827,172.31.48.11,c3c11010ac,14 -2023-12-10T11:42:42.867798,172.31.48.11,d9305374dd,15 -2023-12-10T11:42:44.038933,172.31.48.11,18617e1fb5,16 -2023-12-10T11:42:45.052252,172.31.48.11,bd4841bdf2,17 -2023-12-10T11:42:45.931141,172.31.48.11,ddc2576fb5,18 -2023-12-10T11:42:46.963853,172.31.48.11,77fca3844d,19 -2023-12-10T11:42:47.927634,172.31.48.11,56b1701b36,20 -2023-12-10T11:42:48.728264,172.31.48.11,c6e96e8418,21 -2023-12-10T11:42:49.786490,172.31.48.11,16d7a580f0,22 -2023-12-10T12:30:59.366286,172.31.48.11,1f46285073,1 -2023-12-10T12:33:31.625799,172.31.48.11,5a907bd5fc,2 -2023-12-10T14:46:09.137306,172.31.48.11,5a7f6fa180,1 -2023-12-10T14:46:33.444553,172.31.48.11,0ddc2ad967,2 -2023-12-10T15:30:45.443668,172.31.48.11,e1a304f4f9,1 -2023-12-10T15:52:51.706618,172.31.48.11,52c7b79e28,1 -2023-12-10T15:53:00.560805,172.31.48.11,5585fa5df2,2 -2023-12-10T15:53:04.628762,172.31.48.11,06aa9aba77,3 -2023-12-10T16:54:12.697351,172.31.48.11,67f06bea1b,3 -2023-12-10T18:43:48.233081,172.31.48.11,d481302ccb,1 -2023-12-10T18:44:18.340928,172.31.48.11,81aca8f34b,2 -2023-12-10T18:44:30.769207,172.31.48.11,b84a10bc99,3 -2023-12-10T19:28:43.219652,172.31.48.11,5a233705a7,1 -2023-12-10T19:41:38.989798,172.31.48.11,f94ce15e95,1 -2023-12-10T19:42:54.225213,172.31.48.11,a397e8a674,2 -2023-12-10T21:14:49.053379,172.31.48.11,0833d2b586,2 -2023-12-10T21:14:50.380240,172.31.48.11,609b04ad0a,3 -2023-12-10T21:14:50.626487,172.31.48.11,609b04ad0a,4 -2023-12-10T21:14:50.909309,172.31.48.11,609b04ad0a,5 -2023-12-10T21:14:57.828872,172.31.48.11,77fe38ef14,6 -2023-12-10T21:15:05.176034,172.31.48.11,7637c6768e,7 -2023-12-10T21:45:02.395845,172.31.48.11,ca0509de66,1 -2023-12-10T21:45:20.499606,172.31.48.11,089845da40,2 -2023-12-10T21:45:31.744310,172.31.48.11,e32a217602,3 -2023-12-10T21:45:38.619462,172.31.48.11,f1114bb798,4 -2023-12-10T21:46:10.468585,172.31.48.11,e5d42e2749,5 -2023-12-10T21:46:22.314337,172.31.48.11,d583bca697,6 -2023-12-10T21:46:34.861474,172.31.48.11,5915704b68,7 -2023-12-10T21:46:37.861299,172.31.48.11,4d84e5d5b1,8 -2023-12-10T21:49:27.160548,172.31.48.11,fbca34bf6a,9 -2023-12-10T21:49:35.469406,172.31.48.11,a8e20d3180,10 -2023-12-10T21:49:50.927423,172.31.48.11,ca39d06493,11 -2023-12-10T21:50:08.705153,172.31.48.11,cce2560603,12 -2023-12-10T21:50:18.603789,172.31.48.11,060e7101a6,13 -2023-12-10T21:50:22.818791,172.31.48.11,f7479791f4,14 -2023-12-10T21:50:28.741450,172.31.48.11,5d8f30a894,15 -2023-12-10T21:50:39.680865,172.31.48.11,3c61ed4d8d,16 -2023-12-10T21:50:41.796087,172.31.48.11,904280c87b,17 -2023-12-10T21:50:46.225198,172.31.48.11,87f1f3d8eb,18 -2023-12-10T21:55:34.162429,172.31.48.11,b92e677f98,19 -2023-12-10T21:56:05.493748,172.31.48.11,2d156a895c,20 -2023-12-10T21:56:08.948198,172.31.48.11,bd4841bdf2,21 -2023-12-10T21:56:12.408506,172.31.48.11,7484354c22,22 -2023-12-10T21:56:14.455737,172.31.48.11,8a825332e9,23 -2023-12-10T21:56:31.478971,172.31.48.11,beb8b638a3,24 -2023-12-10T21:56:42.929347,172.31.48.11,e7c9c3fd05,25 -2023-12-10T21:57:17.158976,172.31.48.11,5248a8de80,26 -2023-12-10T21:59:00.815424,172.31.48.11,f15f043fe7,27 -2023-12-10T21:59:15.734561,172.31.48.11,b0e03c8a4b,28,30 -2023-12-10T22:22:51.881985,172.31.48.11,29996413f6,1,20 -2023-12-10T22:23:03.372048,172.31.48.11,c3c11010ac,2,50 -2023-12-10T23:20:02.673454,172.31.48.11,4d99b1d990,1,50 -2023-12-10T23:20:14.229172,172.31.48.11,a51f0a97c0,2,100 -2023-12-10T23:20:21.139649,172.31.48.11,33e42a3c1a,3,50 -2023-12-10T23:20:38.142765,172.31.48.11,2032820f51,4,0 -2023-12-10T23:20:46.541335,172.31.48.11,6ea3e53db0,5,100 -2023-12-10T23:20:53.534309,172.31.48.11,2454bfcde1,6,0 -2023-12-11T07:24:29.099660,172.31.48.11,fb7e18c3b5,1,30 -2023-12-11T07:24:37.651226,172.31.48.11,26b5e16af3,2,30 -2023-12-11T13:39:58.513373,172.31.48.11,27e8fe6fe7,1,70 -2023-12-12T11:05:11.032420,172.31.48.11,184bdb616c,1,0 -2023-12-12T12:24:19.083940,172.31.48.11,9fb7d29912,1,0 -2023-12-12T12:45:32.855150,172.31.48.11,e34e18dd40,1,10 -2023-12-12T12:45:52.148692,172.31.48.11,5088f350e8,2,10 -2023-12-12T12:47:05.045739,172.31.48.11,22e3d0722b,3,10 -2023-12-12T12:48:50.641761,172.31.48.11,29996413f6,4,20 -2023-12-12T12:51:11.514975,172.31.48.11,b5aa020a86,5,10 -2023-12-12T12:51:48.741610,172.31.48.11,3c61ed4d8d,6,10 -2023-12-12T12:53:51.468949,172.31.48.11,b830de4210,7,10 -2023-12-12T12:54:03.380300,172.31.48.11,7274606d10,8,10 -2023-12-12T12:54:37.455742,172.31.48.11,f93489bf43,9,10 -2023-12-12T12:57:02.531810,172.31.48.11,38b594b9f0,10,30 -2023-12-12T12:57:13.080252,172.31.48.11,6b98dbca69,11,50 -2023-12-12T12:57:22.199671,172.31.48.11,5d89fc9011,12,10 -2023-12-12T12:59:05.116814,172.31.48.11,ace503fa98,13,10 -2023-12-12T12:59:34.917430,172.31.48.11,85eed2ff79,14,50 -2023-12-12T13:29:52.021308,172.31.48.11,ef3ec0fe29,1,80 -2023-12-12T13:30:24.010926,172.31.48.11,233b8a3c43,2,20 -2023-12-12T16:42:57.972303,172.31.48.11,9cbe35530e,1,0 -2023-12-12T16:42:59.052957,172.31.48.11,ee248120d7,2,0 -2023-12-12T16:48:02.699372,172.31.48.11,c9e4ebe1af,1,0 -2023-12-12T16:48:15.246189,172.31.48.11,6ea56365f1,2,0 -2023-12-13T02:03:10.100772,172.31.48.11,2d984e0731,1,70 -2023-12-13T11:47:57.296647,172.31.48.11,1e42be3bf6,1,70 -2023-12-13T13:43:09.442535,172.31.48.11,f814051baf,1,10 -2023-12-13T13:43:10.048567,172.31.48.11,2a3bd925a4,2,10 -2023-12-13T13:43:58.978255,172.31.48.11,b443ba681d,3,10 -2023-12-13T20:59:45.588906,172.31.48.11,08f12dbe96,50,1,'too much silicon' -2023-12-28T08:03:16.472476,172.31.48.11,ae25695182,70,1,'' -2024-01-16T20:55:31.063683,172.31.48.5,3c61ed4d8d,50,1,'Na2LiYCl6' -2024-01-16T20:56:24.728380,172.31.48.5,b830de4210,50,2,'' -2024-01-16T20:56:25.865390,172.31.48.5,bbafca2c58,50,3,'' -2024-01-16T20:56:27.074549,172.31.48.5,7274606d10,50,4,'' -2024-01-16T20:56:39.814852,172.31.48.5,f93489bf43,100,5,'' -2024-01-16T20:56:51.033777,172.31.48.5,38b594b9f0,100,6,'' -2024-01-16T20:56:54.827206,172.31.48.5,6b98dbca69,50,7,'' -2024-01-18T18:26:14.920275,172.31.48.5,233b8a3c43,100,1,'' -2024-01-18T18:26:16.917842,172.31.48.5,46111b4fd6,100,2,'' -2024-01-18T18:26:23.741739,172.31.48.5,2d302172db,100,3,'' -2024-01-19T16:17:34.590555,172.31.48.5,ee248120d7,100,1,'' -2024-01-19T16:17:56.594553,172.31.48.5,4810103dc8,50,2,'' -2024-01-19T16:18:09.267377,172.31.48.5,c9e4ebe1af,50,3,'' -2024-01-19T16:18:15.405813,172.31.48.5,6ea56365f1,50,4,'' -2024-01-19T16:18:23.752652,172.31.48.5,f4fe02cdf6,50,5,'' -2024-01-19T16:18:28.364266,172.31.48.5,15d1c55782,50,6,'' -2024-01-19T16:18:58.815686,172.31.48.5,96ec757620,50,7,'' -2024-01-19T16:19:04.905643,172.31.48.5,394472c73e,50,8,'' -2024-01-19T16:19:11.956784,172.31.48.5,2d984e0731,50,9,'' -2024-01-19T16:19:28.358419,172.31.48.5,396a22636d,50,10,'' -2024-01-19T16:19:31.637337,172.31.48.5,aa68bc5ea6,50,11,'' -2024-01-19T16:19:47.575308,172.31.48.5,1e42be3bf6,50,12,'' -2024-02-14T16:14:19.363408,172.31.48.12,67f06bea1b,20,1,'' -2024-02-24T12:18:39.897846,172.31.48.12,83db638923,20,1,'' -2024-03-03T02:43:37.852303,172.31.48.12,f93489bf43,90,1,'' -2024-03-03T02:45:34.056045,172.31.48.12,fd48845ad0,70,1,'' -2024-03-05T08:04:31.024660,172.31.48.12,2a3bd925a4,0,1,'' -2024-03-07T00:03:07.176115,172.31.48.12,5d89fc9011,0,1,'' -2024-03-07T00:03:12.681870,172.31.48.12,f8410244a9,0,2,'' -2024-03-07T00:03:16.087938,172.31.48.12,c3c11010ac,0,3,'' -2024-03-07T00:03:22.378839,172.31.48.12,d9305374dd,0,4,'' -2024-03-07T00:03:26.573822,172.31.48.12,18617e1fb5,0,5,'' -2024-03-07T00:03:35.790353,172.31.48.12,bd4841bdf2,0,6,'' -2024-03-07T00:03:56.033913,172.31.48.12,ddc2576fb5,0,7,'' -2024-03-24T23:24:33.769734,172.31.48.21,6ea3e53db0,30,1,'' -2024-03-25T19:18:02.604763,172.31.48.21,b1fd30944c,0,1,'' -2024-03-25T19:18:17.538123,172.31.48.21,b34312e784,0,2,'' -2024-03-25T19:19:10.513764,172.31.48.21,783030bd26,0,3,'' -2024-03-25T19:19:27.330949,172.31.48.21,672205188c,0,4,'' -2024-03-25T19:19:40.120784,172.31.48.21,e34e18dd40,0,5,'' -2024-03-25T19:49:18.373076,172.31.48.21,b715a6eeab,20,1,'it can be difficult to find someone who wants to deal with radioactive Tc' -2024-03-25T19:51:28.318843,172.31.48.21,f7f1897372,10,2,'Protactinium (Pa) is one of the rarest and most expensive naturally occurring elements. (from Wikipedia)' -2024-03-25T20:01:29.258004,172.31.48.21,184bdb616c,70,1,'' -2024-03-25T20:02:34.229114,172.31.48.21,02fb284d16,10,1,'it is unlikely that Tb, Pr and Lu would order as predicted here. the material might exist in a higher symmetry space group with Tb,Pr and Lu disordered, then it should be written as (Tb,Pr,Lu)5Sn4' -2024-03-25T20:09:58.519545,172.31.48.21,fd48845ad0,0,1,'loose MgBr molecules in a crystals are not a thing' -2024-03-25T20:10:04.188062,172.31.48.21,07570a66bc,0,2,'' -2024-03-25T20:10:45.706989,172.31.48.21,9cbe35530e,0,3,'noooooo' -2024-03-25T20:48:01.556761,172.31.48.21,1e42be3bf6,60,1,'' -2024-03-25T20:48:02.267954,172.31.48.21,1e42be3bf6,60,2,'' -2024-03-25T20:48:11.353763,172.31.48.21,f814051baf,30,3,'' -2024-03-25T20:48:18.438292,172.31.48.21,2a3bd925a4,30,4,'' -2024-03-25T20:59:36.144502,172.31.48.21,d9305374dd,10,2,'Pr and Tb are likely to be disordered, strange coordinations' -2024-03-25T20:59:46.745741,172.31.48.21,d9305374dd,10,1,'Pr and Tb are likely to be disordered, strange coordinations' -2024-03-25T22:33:17.898483,172.31.48.21,e8ccd3fc77,50,1,'' -2024-03-25T22:33:23.167990,172.31.48.21,a6dc87910a,50,2,'' -2024-03-25T22:33:29.377579,172.31.48.21,d31da9d6dc,50,3,'' -2024-03-25T22:35:12.090498,172.31.48.21,62f68203f1,50,1,'' -2024-03-25T22:35:13.974530,172.31.48.21,280b630a85,50,2,'' -2024-03-25T22:50:38.024442,172.31.48.21,13ff474841,80,1,'' -2024-03-25T22:50:45.435729,172.31.48.21,d04b7c0a0c,20,2,'' -2024-03-26T07:02:18.517726,172.31.48.21,83bf568487,90,1,'' -2024-03-26T07:02:28.421269,172.31.48.21,d481302ccb,90,2,'' -2024-03-26T07:11:52.783329,172.31.48.21,5a907bd5fc,20,1,'' -2024-03-26T07:25:02.854034,172.31.48.21,b84a10bc99,10,2,'' -2024-03-26T07:25:17.928210,172.31.48.21,089845da40,40,3,'' -2024-03-26T07:25:44.998067,172.31.48.21,c4adb64fb5,10,4,'' -2024-03-26T16:07:10.156785,172.31.48.21,56b1701b36,30,1,'' -2024-03-26T16:07:21.775268,172.31.48.21,06f8f4799b,30,2,'' -2024-03-27T11:37:35.370114,172.31.48.21,7637c6768e,10,1,'pseudo-trigonal symmetry, gamma roughly 60 deg looks very wrong. CN=13 for Zr is also unlikely. Most likely occupantionally disordered' -2024-03-27T11:42:04.475613,172.31.48.21,27e8fe6fe7,60,2,'Looks similar to Laves phases, mostly reasonable interatomic distances + coordination enviroments. Elements are chemically different enough to order' -2024-03-27T11:45:28.699937,172.31.48.21,aba6abc8bf,20,3,'elements are too similar to order, unlikely Re coordination' -2024-03-27T11:47:25.153803,172.31.48.21,aa68bc5ea6,20,4,'Co-coordinations seems unlikely, also fairly large unit cell' -2024-03-27T11:49:03.737105,172.31.48.21,ca0509de66,70,5,'AlB2-type variant which is reasonable, but Ge and Si are likely disordered' -2024-03-27T11:49:20.130023,172.31.48.21,ca0509de66,80,6,'' -2024-03-27T20:23:52.752055,172.31.48.21,e32a217602,20,1,'' -2024-03-27T20:23:58.091685,172.31.48.21,f1114bb798,90,2,'' -2024-03-27T20:25:38.114031,172.31.48.21,e5d42e2749,20,3,'' -2024-03-27T20:25:49.661376,172.31.48.21,d583bca697,20,4,'' -2024-03-27T20:25:56.752197,172.31.48.21,5915704b68,60,5,'' -2024-03-27T20:26:07.494552,172.31.48.21,4d84e5d5b1,80,6,'' -2024-03-27T20:26:16.076629,172.31.48.21,fbca34bf6a,80,7,'' -2024-03-27T20:26:22.654018,172.31.48.21,aa68bc5ea6,10,8,'' -2024-03-27T20:26:31.872105,172.31.48.21,a8e20d3180,20,9,'' -2024-03-27T20:26:32.743277,172.31.48.21,ca39d06493,20,10,'' -2024-03-28T12:32:15.013107,172.31.48.21,5d8f30a894,50,1,'' -2024-03-28T12:33:16.093023,172.31.48.21,5248a8de80,10,1,'a molecular structure like this is extremely unlikely to be stable' -2024-03-28T13:24:00.366851,172.31.48.21,02fb284d16,50,1,'' -2024-03-28T13:24:01.093983,172.31.48.21,5a7f6fa180,50,2,'' -2024-03-28T13:24:13.008022,172.31.48.21,67f06bea1b,50,3,'' -2024-03-28T13:24:34.076199,172.31.48.21,70e240b00d,0,4,'' -2024-03-28T14:00:49.717186,172.31.48.21,4743aff8ac,0,1,'' -2024-03-28T14:01:19.363703,172.31.48.21,e65070289a,0,2,'' diff --git a/src/this_material_does_not_exist/__init__.py b/src/this_material_does_not_exist/__init__.py deleted file mode 100644 index e69de29..0000000 diff --git a/src/this_material_does_not_exist/app.py b/src/this_material_does_not_exist/app.py deleted file mode 100644 index ba07fed..0000000 --- a/src/this_material_does_not_exist/app.py +++ /dev/null @@ -1,162 +0,0 @@ -from __future__ import annotations -import datetime -import os -from flask import request -import random -import uuid - -import crystal_toolkit.components as ctc -import dash -import httpx -from crystal_toolkit.settings import SETTINGS -from dash import html -from dash.dependencies import Input, Output, State -from optimade.adapters.structures import Structure as OptimadeStructure - -app = dash.Dash( - assets_folder=str(SETTINGS.ASSETS_PATH), - title="This Material Does Not Exist?", -) - -# Required for gunicorn deployment via app:server -server = app.server - - -structure = None - -structure_component = ctc.StructureMoleculeComponent(structure, id="my_structure") - -layout = html.Div( - [ - html.H2("Does this material exist?"), - structure_component.title_layout(), - html.A(None, id="link"), - structure_component.layout(), - html.Div( - [ - html.H3("What's your likelihood that this material is synthesizable?"), - dash.dcc.Slider( - 0, - 100, - 10, - value=50, - marks={0: "0%", 50: "50%", 100: "100%"}, - id="slider", - ), - html.Label("Why? (Optional):"), - dash.dcc.Textarea( - id="comment-box", - value="", - style={ - "width": "100%", - "height": "50px", - "resize": "vertical", - "padding": "5px", - "font-size": "15px", - "border": "1px solid #ccc", - "border-radius": "5px", - }, - ), - html.Button( - "Submit", - id="submit", - n_clicks=0, - style={ - "margin": "10px", - "padding": "15px 20px", - "font-size": "16px", - "background-color": "#333", - "color": "white", - "border": "none", - "border-radius": "5px", - "cursor": "pointer", - }, - ), - ], - style={ - "width": "350px", - "padding": "20px", - "align": "center", - "text-align": "center", - }, - ), - html.Footer( - [ - html.P( - "Scores will be recorded anonymously and shared publicly if they prove interesting!", - style={"text-align": "center"}, - ), - html.Div( - [ - html.A( - "Powered by OPTIMADE", - href="https://www.optimade.org", - style={"padding": "20px"}, - ), - html.A( - "and Crystal Toolkit", - href="https://docs.crystaltoolkit.org", - style={"padding": "20px"}, - ), - html.A( - "using the GNome dataset", - href="https://github.com/google-deepmind/materials_discovery", - style={"padding": "20px"}, - ), - html.A( - "developed on GitHub", - href="https://github.com/ml-evs/this-material-does-not-exist", - style={"padding": "20px"}, - ), - html.A( - "inspired by", - href="https://thispersondoesnotexist.com/", - style={"padding": "20px"}, - ), - ], - ), - ] - ), - ], - style=dict( - margin="2em auto", display="grid", placeContent="center", placeItems="center" - ), -) - -# tell crystal toolkit about your app and layout -ctc.register_crystal_toolkit(app, layout=layout) - -# random string per user session -session_id = str(uuid.uuid4()) -random.seed(1) -shuffled_entries = random.sample(range(0, 384938), 1000) - - -@app.callback( - Output(structure_component.id(), "data"), - Output("link", "href"), - Output("link", "children"), - Output("comment-box", "value"), - Input("submit", "n_clicks"), - State("slider", "value"), - State("comment-box", "value"), - Input(structure_component.id(), "data"), -) -def get_structure(n_clicks: int, value: str, comment: str, data: dict): - results_fname = os.environ.get("RESULTS_PATH", "results.csv") - timestamp = datetime.datetime.now().isoformat() - if data: - with open(results_fname, "a") as f: - f.write( - f'{timestamp},{request.remote_addr},{data["properties"]["optimade_id"].split()[1]},{value},{n_clicks},{comment!r}\n' - ) - - ind = random.choice(shuffled_entries) - base_url = "https://optimade-gnome.odbx.science/v1/structures" - response = httpx.get(f"{base_url}?page_limit=1&page_offset={ind}").json() - optimade_structure = response["data"][0] - pmg_structure = OptimadeStructure(optimade_structure).as_pymatgen - optimade_id = "GNome " + optimade_structure["id"].split("/")[-1].split(".")[0] - optimade_url = base_url + "/" + optimade_structure["id"] - pmg_structure.properties["optimade_id"] = optimade_id - return pmg_structure, optimade_url, optimade_id, "" From 670d4c69a399aa341cfee304e792ba0edea242ce Mon Sep 17 00:00:00 2001 From: "stan.donarise" Date: Fri, 14 Jun 2024 14:12:14 +1100 Subject: [PATCH 02/29] $mpds_tmdne_app initial --- app/app.view.css.ts | 45 +++++++++++++++++++++++++++++++++++++++++++++ app/app.view.tree | 20 ++++++++++++++++++++ app/app.view.ts | 26 ++++++++++++++++++++++++++ 3 files changed, 91 insertions(+) create mode 100644 app/app.view.css.ts create mode 100644 app/app.view.ts diff --git a/app/app.view.css.ts b/app/app.view.css.ts new file mode 100644 index 0000000..cf61b10 --- /dev/null +++ b/app/app.view.css.ts @@ -0,0 +1,45 @@ +namespace $.$$ { + + $mol_style_define( $mpds_tmdne_app, { + + padding: { + top: $mol_gap.block, + bottom: $mol_gap.block, + }, + flex: { + direction: 'column', + }, + + Player: { + flex: { + grow: 1, + }, + }, + + Head: { + justify: { + content: 'center', + }, + }, + + Name: { + justify: { + content: 'center', + }, + }, + + Question: { + justify: { + content: 'center', + }, + }, + + Answer: { + justify: { + content: 'center', + }, + }, + + } ) + +} diff --git a/app/app.view.tree b/app/app.view.tree index 523c4e5..227ba54 100644 --- a/app/app.view.tree +++ b/app/app.view.tree @@ -1 +1,21 @@ $mpds_tmdne_app $mol_view + title \This material does not exist + number? 1 + auto / + <= update + sub / + <= Head $mol_paragraph + title \Does this material exist? + <= Name $mol_paragraph + title <= name \ + <= Player $mpds_cifplayer_player + data <= json null + Fullscreen null + <= Question $mol_paragraph + title \Do you think it's synthesizable? + <= Answer $mol_row + sub / + <= Yes $mol_button_major + click? <=> update? null + <= No $mol_button_major + click? <=> update? diff --git a/app/app.view.ts b/app/app.view.ts new file mode 100644 index 0000000..c265941 --- /dev/null +++ b/app/app.view.ts @@ -0,0 +1,26 @@ +namespace $.$$ { + + export class $mpds_tmdne_app extends $.$mpds_tmdne_app { + + @ $mol_mem + json() { + return this.$.$mol_fetch.json( `https://optimade-gnome.odbx.science/v1/structures?page_limit=1&page_offset=${this.number()}` ) as any + } + + @ $mol_mem + name() { + return this.json()?.data[0]?.attributes?.chemical_formula_reduced ?? '' + } + + @ $mol_action + update() { + this.number( this.number( random_int( 1, 384937 ) ) ) + } + + } + + function random_int( min: number, max: number ) { + return Math.floor( Math.random() * ( max - min + 1 ) ) + min + } + +} From 6b45f11718e85b0a263a029bed2becdf6483478a Mon Sep 17 00:00:00 2001 From: "stan.donarise" Date: Mon, 17 Jun 2024 21:20:29 +1100 Subject: [PATCH 03/29] mpds -> optimade namespace --- .github/workflows/deploy-to-gh-pages.yml | 4 ++-- CNAME | 1 - app/app.view.css.ts | 2 +- app/app.view.tree | 2 +- app/app.view.ts | 2 +- app/index.html | 2 +- 6 files changed, 6 insertions(+), 7 deletions(-) delete mode 100644 CNAME diff --git a/.github/workflows/deploy-to-gh-pages.yml b/.github/workflows/deploy-to-gh-pages.yml index 9c7c4ff..1fab66e 100644 --- a/.github/workflows/deploy-to-gh-pages.yml +++ b/.github/workflows/deploy-to-gh-pages.yml @@ -14,10 +14,10 @@ jobs: - uses: hyoo-ru/mam_build@master2 with: - package: mpds/tmdne + package: optimade/tmdne modules: app - uses: JamesIves/github-pages-deploy-action@4.1.7 with: branch: gh-pages - folder: mpds/tmdne/app/- + folder: optimade/tmdne/app/- diff --git a/CNAME b/CNAME deleted file mode 100644 index 13bc825..0000000 --- a/CNAME +++ /dev/null @@ -1 +0,0 @@ -nanoshow.mpds.io \ No newline at end of file diff --git a/app/app.view.css.ts b/app/app.view.css.ts index cf61b10..fa47931 100644 --- a/app/app.view.css.ts +++ b/app/app.view.css.ts @@ -1,6 +1,6 @@ namespace $.$$ { - $mol_style_define( $mpds_tmdne_app, { + $mol_style_define( $optimade_tmdne_app, { padding: { top: $mol_gap.block, diff --git a/app/app.view.tree b/app/app.view.tree index 227ba54..c6a8eec 100644 --- a/app/app.view.tree +++ b/app/app.view.tree @@ -1,4 +1,4 @@ -$mpds_tmdne_app $mol_view +$optimade_tmdne_app $mol_view title \This material does not exist number? 1 auto / diff --git a/app/app.view.ts b/app/app.view.ts index c265941..86fbe77 100644 --- a/app/app.view.ts +++ b/app/app.view.ts @@ -1,6 +1,6 @@ namespace $.$$ { - export class $mpds_tmdne_app extends $.$mpds_tmdne_app { + export class $optimade_tmdne_app extends $.$optimade_tmdne_app { @ $mol_mem json() { diff --git a/app/index.html b/app/index.html index fc1298f..efcd8ed 100644 --- a/app/index.html +++ b/app/index.html @@ -7,7 +7,7 @@ -
+
From aa9d219ac7cb4fb4c61b661ff7556d71a17cbfc8 Mon Sep 17 00:00:00 2001 From: "stan.donarise" Date: Mon, 17 Jun 2024 21:21:00 +1100 Subject: [PATCH 04/29] chore --- app/app.view.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/app.view.ts b/app/app.view.ts index 86fbe77..b585539 100644 --- a/app/app.view.ts +++ b/app/app.view.ts @@ -14,7 +14,7 @@ namespace $.$$ { @ $mol_action update() { - this.number( this.number( random_int( 1, 384937 ) ) ) + this.number( random_int( 1, 384937 ) ) } } From b5e771fee0291d557674311dfed455b8a8da4f35 Mon Sep 17 00:00:00 2001 From: "stan.donarise" Date: Fri, 28 Jun 2024 15:34:07 +0300 Subject: [PATCH 05/29] swipeable card --- app/app.view.css.ts | 213 ++++++++++++++++++++++++++++++++++++++-- app/app.view.tree | 89 ++++++++++++++--- app/app.view.ts | 100 ++++++++++++++++++- app/index.html | 2 +- html/html.view.css.ts | 23 +++++ html/html.view.tree | 12 +++ html/html.view.ts | 12 +++ swipe/swipe.view.css.ts | 17 ++++ swipe/swipe.view.tree | 28 ++++++ swipe/swipe.view.ts | 81 +++++++++++++++ 10 files changed, 554 insertions(+), 23 deletions(-) create mode 100644 html/html.view.css.ts create mode 100644 html/html.view.tree create mode 100644 html/html.view.ts create mode 100644 swipe/swipe.view.css.ts create mode 100644 swipe/swipe.view.tree create mode 100644 swipe/swipe.view.ts diff --git a/app/app.view.css.ts b/app/app.view.css.ts index fa47931..cb5f2e6 100644 --- a/app/app.view.css.ts +++ b/app/app.view.css.ts @@ -2,18 +2,42 @@ namespace $.$$ { $mol_style_define( $optimade_tmdne_app, { - padding: { - top: $mol_gap.block, - bottom: $mol_gap.block, - }, + overflow: 'hidden', flex: { direction: 'column', }, - + align: { + items: 'center', + }, + Player: { flex: { grow: 1, }, + width: '100%', + opacity: 1, + transition: 'opacity 0.15s', + '[card_holding]': { + 'true': { + opacity: 0.1, + }, + }, + }, + + Head_space: { + position: 'absolute', + top: $mol_gap.block, + left: 0, + right: 0, + flex: { + grow: 1, + }, + pointerEvents: 'none', + }, + + Head_card: { + pointerEvents: 'auto', + margin: 'auto', }, Head: { @@ -22,24 +46,195 @@ namespace $.$$ { }, }, + Prediction: { + font: { + size: '0.7rem', + }, + lineHeight: '16px', + flex: { + grow: 0, + wrap: 'wrap', + }, + position: 'absolute', + left: $mol_gap.block, + bottom: '11rem', + pointerEvents: 'none', + opacity: 1, + transition: 'opacity 0.15s', + '[rotating]': { + 'true': { + opacity: 0, + }, + }, + }, + + Param: { + gap: '0.3rem', + flex: { + wrap: 'wrap', + }, + }, + + Param_name: { + font: { + weight: 700, + }, + }, + + Param_symbol_html: { + flex: { + direction: 'row', + }, + }, + + Param_unit: { + flex: { + direction: 'row', + }, + }, + + Param_mae_unit: { + flex: { + direction: 'row', + }, + }, + + Param_value: { + gap: '0.25rem', + }, + + Foot: { + width: '100%', + overflow: 'hidden', + position: 'absolute', + pointerEvents: 'none', + transition: 'opacity 0.2s', + opacity: 1, + bottom: 0, + '[rotating]': { + 'true': { + opacity: 0, + }, + }, + }, + + Swipeable: { + pointerEvents: 'auto', + margin: 'auto', + // width: '100%', + // overflow: 'hidden', + // width: 'max-content', + // position: 'absolute', + // flex: { + // grow: 1, + // }, + // left: '50%', + // transform: 'translateX(-50%)', + // bottom: 0, + padding: '0.5rem', + Float: { + margin: 'auto', + }, + }, + + Card: { + background: { + color: $mol_theme.back, + }, + bottom: '-20rem', + position: 'relative', + transition: 'bottom 1s', + '[loaded]': { + 'true': { + bottom: 0, + }, + }, + border: { + radius: $mol_gap.round, + }, + boxShadow: '0 0 0.5rem 0rem hsla(0,0%,0%,.125)', + }, + + Card_content: { + flex: { + direction: 'column', + }, + background: { + color: $mol_style_func.hsla( 210, 80, 50, 0.3 ), + }, + padding: $mol_gap.block, + border: { + radius: $mol_gap.round, + }, + '[card_position]': { + 'right': { + background: { + color: $mol_style_func.hsla( 120, 80, 50, 0.3 ), + }, + }, + 'left': { + background: { + color: $mol_style_func.hsla( 0, 80, 50, 0.3 ), + }, + }, + }, + }, + Name: { + flex: { + direction: 'row', + }, + padding: { + bottom: '0.5rem', + }, justify: { content: 'center', }, + font: { + weight: 700, + size: '1.5rem', + }, }, Question: { justify: { content: 'center', }, + padding: { + bottom: '0.5rem', + }, }, - Answer: { - justify: { - content: 'center', + Hint_no: { + color: '#ff6666', + position: 'absolute', + left: '1rem', + bottom: '5rem', + }, + + Hint_yes: { + color: $mol_theme.current, + position: 'absolute', + right: '1rem', + bottom: '5rem', + }, + + Why: { + pointerEvents: 'auto', + maxWidth: '20rem', + }, + + Why_label: { + gap: '0.5rem', + }, + + Why_optinal: { + color: $mol_theme.shade, + font: { + style: 'italic', }, }, - + } ) } diff --git a/app/app.view.tree b/app/app.view.tree index c6a8eec..76d27f2 100644 --- a/app/app.view.tree +++ b/app/app.view.tree @@ -1,21 +1,86 @@ $optimade_tmdne_app $mol_view title \This material does not exist number? 1 + plugins / + <= Theme $mol_theme_auto auto / <= update + rotating? false sub / - <= Head $mol_paragraph - title \Does this material exist? - <= Name $mol_paragraph - title <= name \ - <= Player $mpds_cifplayer_player + <= Player $optimade_cifplayer_player + fullscreen? => player_fullscreen? + attr * + fullscreen <= player_fullscreen? + card_holding <= card_holding data <= json null Fullscreen null - <= Question $mol_paragraph - title \Do you think it's synthesizable? - <= Answer $mol_row + Overlays null + event * + pointerdown? <=> player_pointerdown? null + pointerup? <=> player_pointerup? null + <= Head_space $mol_view sub / - <= Yes $mol_button_major - click? <=> update? null - <= No $mol_button_major - click? <=> update? + <= Head_card $mol_list + sub / + <= Head $mol_paragraph + title \Does this material exist? + <= Prediction $mol_list + attr * + rotating <= rotating + sub <= params / + <= Param* $mol_view + sub / + <= Param_name* $mol_paragraph + minimal_height 16 + title <= param_name* \ + <= Param_symbol_html* $optimade_tmdne_html_view + html <= param_symbol* \ + \= + <= Param_value* $mol_view + minimal_height 16 + sub / + <= param_value* \ + <= Param_unit* $optimade_tmdne_html_view + html <= param_unit* \ + <= Param_mae* $mol_view + sub / + \(± + <= param_mae* \ + <= Param_mae_unit* $optimade_tmdne_html_view + html <= param_unit* \ + \) + <= Foot $mol_view + attr * + rotating <= rotating + sub / + <= Hint_no $mol_view + sub / \ᐊ No + <= Hint_yes $mol_view + sub / \Yes ᐅ + <= Swipeable $optimade_tmdne_swipe + passed => passed + swiped_to? <=> swiped_to? \ + reset_hard => card_reset + on_swiped <= update null + allowed <= loaded false + content / + <= Card $mol_view + attr * + loaded <= loaded + sub / <= Card_content $mol_view + attr * + card_position <= card_position \ + sub / + <= Name $optimade_tmdne_html_view + html <= name \ + <= Question $mol_paragraph + title \Do you think it's synthesizable? + <= Why_label $mol_view + sub / + <= Why_title $mol_paragraph + title \Why? + <= Why_optinal $mol_paragraph + title \(optinal) + <= Why $mol_textarea + value? <=> why? \ + pointer_holding? <=> card_holding? false diff --git a/app/app.view.ts b/app/app.view.ts index b585539..02c839a 100644 --- a/app/app.view.ts +++ b/app/app.view.ts @@ -9,18 +9,116 @@ namespace $.$$ { @ $mol_mem name() { - return this.json()?.data[0]?.attributes?.chemical_formula_reduced ?? '' + let str = this.json()?.data[ 0 ]?.attributes?.chemical_formula_reduced + this.reset() + return formula_html( str ) + } + + @ $mol_action + reset() { + this.why('') + this.card_reset() + } + + @ $mol_mem + loaded() { + try { + this.name() + return true + } catch (error) { + if( $mol_promise_like( error ) ) return false + } + return false } @ $mol_action update() { this.number( random_int( 1, 384937 ) ) } + + @ $mol_mem + predict() { + $mol_wire_solid() + + const params = new URLSearchParams({ + structure: JSON.stringify(this.json()), + }) + const url = `https://labs.mpds.io/predict?${ params.toString() }` + + return this.$.$mol_wire_sync( this ).$.$mol_fetch.success( url, { + method: 'post', + } ).json() ?? {} as any + } + + @ $mol_mem + params(): readonly any[] { + const keys = Object.keys( this.predict().prediction ) + return keys.map( k => this.Param( k ) ) + } + + @ $mol_mem + param_value( id: any ): string { + return this.predict().prediction[id].value ?? '' + } + + @ $mol_mem + param_mae( id: any ): string { + return this.predict().prediction[id].mae ?? '' + } + + @ $mol_mem + param_name( id: any ): string { + return this.predict().legend[id].name ?? '' + } + + @ $mol_mem + param_unit( id: any ): string { + return this.predict().legend[id].gui_units ?? '' + } + + @ $mol_mem + param_symbol( id: any ): string { + return this.predict().legend[id].symbol ?? '' + } + + @ $mol_mem + card_position(): string { + return this.swiped_to() || this.passed() || '' + } + + player_pointerdown( next?: any ) { + this.rotating( true ) + } + + player_pointerup( next?: any ) { + this.rotating( false ) + } } function random_int( min: number, max: number ) { return Math.floor( Math.random() * ( max - min + 1 ) ) + min } + + function formula_html( str: string ) { + let sub = false + let html = '' + for( let i = 0; i < str.length; i++ ) { + if( !isNaN( +str[ i ] ) || str[ i ] == '.' ) { + if( !sub ) { + html += '' + sub = true + } + } else { + if( sub ) { + html += '' + sub = false + } + } + html += str[ i ] + } + if( sub ) html += '' + return html ?? '' + } } diff --git a/app/index.html b/app/index.html index efcd8ed..dfdb054 100644 --- a/app/index.html +++ b/app/index.html @@ -6,7 +6,7 @@ - +
diff --git a/html/html.view.css.ts b/html/html.view.css.ts new file mode 100644 index 0000000..02cbd0a --- /dev/null +++ b/html/html.view.css.ts @@ -0,0 +1,23 @@ +namespace $ { + + $mol_style_define( $optimade_tmdne_html_view , { + + Subscript: { + font: { + size: '.75em', + }, + position: 'relative', + bottom: '-0.5em', + }, + + Superscript: { + font: { + size: '.75em', + }, + position: 'relative', + top: '-0.25em', + }, + + } ) + +} diff --git a/html/html.view.tree b/html/html.view.tree new file mode 100644 index 0000000..0147092 --- /dev/null +++ b/html/html.view.tree @@ -0,0 +1,12 @@ +$optimade_tmdne_html_view $mol_html_view + minimal_height 16 + Subscript* $mol_view + dom_name \sub + sub <= content* + Superscript* $mol_view + dom_name \sup + sub <= content* + Text* $mol_dimmer + minimal_height 16 + needle <= highlight + haystack <= text* diff --git a/html/html.view.ts b/html/html.view.ts new file mode 100644 index 0000000..b9f8ced --- /dev/null +++ b/html/html.view.ts @@ -0,0 +1,12 @@ +namespace $.$$ { + + export class $optimade_tmdne_html_view extends $.$optimade_tmdne_html_view { + + views( node : Node ) { + if( node.nodeName == 'SUB' ) return [ this.Subscript( node ) ] + if( node.nodeName == 'SUP' ) return [ this.Superscript( node ) ] + return super.views( node ) + } + + } +} diff --git a/swipe/swipe.view.css.ts b/swipe/swipe.view.css.ts new file mode 100644 index 0000000..34280e7 --- /dev/null +++ b/swipe/swipe.view.css.ts @@ -0,0 +1,17 @@ +namespace $.$$ { + + $mol_style_define( $optimade_tmdne_swipe, { + + background: { + color: 'transparent', + }, + + Float: { + userSelect: 'none', + pointerEvents: 'none', + position: 'relative', + }, + + } ) + +} diff --git a/swipe/swipe.view.tree b/swipe/swipe.view.tree new file mode 100644 index 0000000..dad0c5a --- /dev/null +++ b/swipe/swipe.view.tree @@ -0,0 +1,28 @@ +$optimade_tmdne_swipe $mol_view + plugins / + <= Touch $mol_touch + allow_draw false + allow_pan <= allowed true + pan? => pan? + speed_threshold 1 + right_threshold <= threshold 60 + left_threshold <= threshold + passed \ + passed_left false + passed_right false + swiped_to? \ + on_swiped null + reset null + reset_hard null + x? 0 + sub / + <= Float $mol_view + sub <= content / + style * + left <= left \0px + transition <= transition? \ + pointer_holding? false + event * + ^ + pointerdown? <=> pointerdown? null + pointerup? <=> pointerup? null diff --git a/swipe/swipe.view.ts b/swipe/swipe.view.ts new file mode 100644 index 0000000..7e59686 --- /dev/null +++ b/swipe/swipe.view.ts @@ -0,0 +1,81 @@ +namespace $.$$ { + + + export class $optimade_tmdne_swipe extends $.$optimade_tmdne_swipe { + + @ $mol_mem + x( next?: number ): number { + return next ?? ( this.start_x + this.pan().x ) + } + + @ $mol_mem + left(): string { + return this.x() + 'px' + } + + auto() { + console.log( this.Touch().action_type() ) + } + + start_x = 0 + start_time?: number + pointerdown( next?: any ) { + this.start_x = parseFloat( $mol_dom_context.getComputedStyle( this.Float().dom_node() ).left ) + this.start_time = (new $mol_time_moment).valueOf() + + this.pan( new $mol_vector_2d( 0, 0 ) ) + this.transition('') + + this.pointer_holding( true ) + } + + pointerup( next?: any ) { + const speed = this.x() / ( (new $mol_time_moment).valueOf() - this.start_time! ) + + this.transition( 'left 0.5s' ) + + if( this.passed_right() || speed > this.speed_threshold() ) this.to_right() + else if( this.passed_left() || speed < ( - this.speed_threshold() ) ) this.to_left() + else this.reset() + + this.pointer_holding( false ) + } + + reset() { + this.swiped_to('') + this.x( 0 ) + } + + reset_hard() { + this.transition( '' ) + this.reset() + } + + passed_left(): boolean { + return this.x() < ( - this.left_threshold() ) + } + + passed_right(): boolean { + return this.x() > this.right_threshold() + } + + passed(): string { + return this.passed_left() ? 'left' : + this.passed_right() ? 'right' : '' + } + + to_right() { + this.swiped_to( 'right' ) + this.on_swiped() + this.x( 900 ) + } + + to_left() { + this.swiped_to( 'left' ) + this.on_swiped() + this.x( -900 ) + } + + } + +} From d89ca6a0063887798d9cbe638681a41757526ee6 Mon Sep 17 00:00:00 2001 From: "stan.donarise" Date: Fri, 28 Jun 2024 17:39:17 +0300 Subject: [PATCH 06/29] userSelect: 'none' --- app/app.view.css.ts | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/app/app.view.css.ts b/app/app.view.css.ts index cb5f2e6..1292e52 100644 --- a/app/app.view.css.ts +++ b/app/app.view.css.ts @@ -41,12 +41,14 @@ namespace $.$$ { }, Head: { + userSelect: 'none', justify: { content: 'center', }, }, Prediction: { + userSelect: 'none', font: { size: '0.7rem', }, @@ -206,6 +208,7 @@ namespace $.$$ { }, Hint_no: { + userSelect: 'none', color: '#ff6666', position: 'absolute', left: '1rem', @@ -213,6 +216,7 @@ namespace $.$$ { }, Hint_yes: { + userSelect: 'none', color: $mol_theme.current, position: 'absolute', right: '1rem', From 204035f5f00cdadd8d465a2c8881eed2aa8bf323 Mon Sep 17 00:00:00 2001 From: "stan.donarise" Date: Sat, 29 Jun 2024 05:56:02 +0300 Subject: [PATCH 07/29] chore --- app/app.view.ts | 2 -- swipe/swipe.view.ts | 4 ---- 2 files changed, 6 deletions(-) diff --git a/app/app.view.ts b/app/app.view.ts index 02c839a..7d86125 100644 --- a/app/app.view.ts +++ b/app/app.view.ts @@ -38,8 +38,6 @@ namespace $.$$ { @ $mol_mem predict() { - $mol_wire_solid() - const params = new URLSearchParams({ structure: JSON.stringify(this.json()), }) diff --git a/swipe/swipe.view.ts b/swipe/swipe.view.ts index 7e59686..fe404aa 100644 --- a/swipe/swipe.view.ts +++ b/swipe/swipe.view.ts @@ -13,10 +13,6 @@ namespace $.$$ { return this.x() + 'px' } - auto() { - console.log( this.Touch().action_type() ) - } - start_x = 0 start_time?: number pointerdown( next?: any ) { From 8ab8d628efca9f142eef9149eb6941990478aa95 Mon Sep 17 00:00:00 2001 From: "stan.donarise" Date: Sat, 29 Jun 2024 07:48:16 +0300 Subject: [PATCH 08/29] prefetch in background --- app/app.view.css.ts | 124 +++--------------------------------------- app/app.view.tree | 47 ++++++---------- app/app.view.ts | 99 +++++++++++++++++++++------------ card/card.view.css.ts | 113 ++++++++++++++++++++++++++++++++++++++ card/card.view.tree | 22 ++++++++ card/card.view.ts | 12 ++++ swipe/swipe.view.tree | 3 +- swipe/swipe.view.ts | 33 +++++------ 8 files changed, 255 insertions(+), 198 deletions(-) create mode 100644 card/card.view.css.ts create mode 100644 card/card.view.tree create mode 100644 card/card.view.ts diff --git a/app/app.view.css.ts b/app/app.view.css.ts index 1292e52..7655ff7 100644 --- a/app/app.view.css.ts +++ b/app/app.view.css.ts @@ -40,7 +40,7 @@ namespace $.$$ { margin: 'auto', }, - Head: { + Head_title: { userSelect: 'none', justify: { content: 'center', @@ -106,13 +106,16 @@ namespace $.$$ { }, Foot: { - width: '100%', - overflow: 'hidden', + justify: { + content: 'space-between', + }, + width: '24rem', position: 'absolute', + bottom: '4rem', + pointerEvents: 'none', transition: 'opacity 0.2s', opacity: 1, - bottom: 0, '[rotating]': { 'true': { opacity: 0, @@ -120,123 +123,14 @@ namespace $.$$ { }, }, - Swipeable: { - pointerEvents: 'auto', - margin: 'auto', - // width: '100%', - // overflow: 'hidden', - // width: 'max-content', - // position: 'absolute', - // flex: { - // grow: 1, - // }, - // left: '50%', - // transform: 'translateX(-50%)', - // bottom: 0, - padding: '0.5rem', - Float: { - margin: 'auto', - }, - }, - - Card: { - background: { - color: $mol_theme.back, - }, - bottom: '-20rem', - position: 'relative', - transition: 'bottom 1s', - '[loaded]': { - 'true': { - bottom: 0, - }, - }, - border: { - radius: $mol_gap.round, - }, - boxShadow: '0 0 0.5rem 0rem hsla(0,0%,0%,.125)', - }, - - Card_content: { - flex: { - direction: 'column', - }, - background: { - color: $mol_style_func.hsla( 210, 80, 50, 0.3 ), - }, - padding: $mol_gap.block, - border: { - radius: $mol_gap.round, - }, - '[card_position]': { - 'right': { - background: { - color: $mol_style_func.hsla( 120, 80, 50, 0.3 ), - }, - }, - 'left': { - background: { - color: $mol_style_func.hsla( 0, 80, 50, 0.3 ), - }, - }, - }, - }, - - Name: { - flex: { - direction: 'row', - }, - padding: { - bottom: '0.5rem', - }, - justify: { - content: 'center', - }, - font: { - weight: 700, - size: '1.5rem', - }, - }, - - Question: { - justify: { - content: 'center', - }, - padding: { - bottom: '0.5rem', - }, - }, - Hint_no: { - userSelect: 'none', + pointerEvents: 'auto', color: '#ff6666', - position: 'absolute', - left: '1rem', - bottom: '5rem', }, Hint_yes: { - userSelect: 'none', - color: $mol_theme.current, - position: 'absolute', - right: '1rem', - bottom: '5rem', - }, - - Why: { pointerEvents: 'auto', - maxWidth: '20rem', - }, - - Why_label: { - gap: '0.5rem', - }, - - Why_optinal: { - color: $mol_theme.shade, - font: { - style: 'italic', - }, + color: $mol_theme.current, }, } ) diff --git a/app/app.view.tree b/app/app.view.tree index 76d27f2..167784b 100644 --- a/app/app.view.tree +++ b/app/app.view.tree @@ -6,6 +6,8 @@ $optimade_tmdne_app $mol_view auto / <= update rotating? false + number_swiped? 0 + number_prefetch? 0 sub / <= Player $optimade_cifplayer_player fullscreen? => player_fullscreen? @@ -22,7 +24,7 @@ $optimade_tmdne_app $mol_view sub / <= Head_card $mol_list sub / - <= Head $mol_paragraph + <= Head_title $mol_paragraph title \Does this material exist? <= Prediction $mol_list attr * @@ -53,34 +55,17 @@ $optimade_tmdne_app $mol_view attr * rotating <= rotating sub / - <= Hint_no $mol_view - sub / \ᐊ No - <= Hint_yes $mol_view - sub / \Yes ᐅ - <= Swipeable $optimade_tmdne_swipe - passed => passed - swiped_to? <=> swiped_to? \ - reset_hard => card_reset - on_swiped <= update null - allowed <= loaded false - content / - <= Card $mol_view - attr * - loaded <= loaded - sub / <= Card_content $mol_view - attr * - card_position <= card_position \ - sub / - <= Name $optimade_tmdne_html_view - html <= name \ - <= Question $mol_paragraph - title \Do you think it's synthesizable? - <= Why_label $mol_view - sub / - <= Why_title $mol_paragraph - title \Why? - <= Why_optinal $mol_paragraph - title \(optinal) - <= Why $mol_textarea - value? <=> why? \ + <= Hint_no $mol_button_minor + title \ᐊ No + click? <=> click_no? null + <= Hint_yes $mol_button_minor + title \Yes ᐅ + click? <=> click_yes? null + ^ cards / <= Card* $optimade_tmdne_card + name <= card_name* \ + loaded <= card_loaded* false + why? <=> why*? \ pointer_holding? <=> card_holding? false + on_swiped <= update null + swipe_to_right => swipe_to_right* + swipe_to_left => swipe_to_left* diff --git a/app/app.view.ts b/app/app.view.ts index 7d86125..8aa640a 100644 --- a/app/app.view.ts +++ b/app/app.view.ts @@ -2,50 +2,76 @@ namespace $.$$ { export class $optimade_tmdne_app extends $.$optimade_tmdne_app { - @ $mol_mem - json() { - return this.$.$mol_fetch.json( `https://optimade-gnome.odbx.science/v1/structures?page_limit=1&page_offset=${this.number()}` ) as any + @ $mol_mem_key + fetch_by_number( number: number ) { + $mol_wire_solid() + return this.$.$mol_fetch.json( `https://optimade-gnome.odbx.science/v1/structures?page_limit=1&page_offset=${number}` ) as any } - @ $mol_mem - name() { - let str = this.json()?.data[ 0 ]?.attributes?.chemical_formula_reduced - this.reset() - return formula_html( str ) - } + @ $mol_mem_key + predict_by_number( number: number ) { + $mol_wire_solid() - @ $mol_action - reset() { - this.why('') - this.card_reset() + const structure = JSON.stringify( this.fetch_by_number( number ) ) + const params = new URLSearchParams({ structure }) + const url = `https://labs.mpds.io/predict?${ params.toString() }` + + const prediction = this.$.$mol_wire_sync( this ).$.$mol_fetch.success( url, { + method: 'post', + } ).json() ?? {} as any + + return prediction } @ $mol_mem - loaded() { + json() { + return this.fetch_by_number( this.number() ) + } + + @ $mol_mem_key + card_name( n: number ) { + const json = this.fetch_by_number( n ) + let str = json?.data[ 0 ]?.attributes?.chemical_formula_reduced + return formula_html( str ) + } + + @ $mol_mem_key + card_loaded( n: number ) { try { - this.name() - return true + this.card_name( n ) + return this.number() === n } catch (error) { if( $mol_promise_like( error ) ) return false } return false } + cards(): readonly ( any )[] { + const swiped = this.number_swiped() + return [ + this.Card( this.number_prefetch() ), + ... swiped ? [ this.Card( swiped ) ] : [], + this.Card( this.number() ), + ] + } + + @ $mol_mem + number_prefetch( next?: number ): number { + return next ?? random_int( 1, 384937 ) + } + @ $mol_action update() { - this.number( random_int( 1, 384937 ) ) + this.number_swiped( this.number() ) + this.number( this.number_prefetch() ) + const prefetch = random_int( 1, 384937 ) + this.number_prefetch( prefetch ) + $mol_wire_async( this ).predict_by_number( prefetch ) } @ $mol_mem predict() { - const params = new URLSearchParams({ - structure: JSON.stringify(this.json()), - }) - const url = `https://labs.mpds.io/predict?${ params.toString() }` - - return this.$.$mol_wire_sync( this ).$.$mol_fetch.success( url, { - method: 'post', - } ).json() ?? {} as any + return this.predict_by_number( this.number() ) } @ $mol_mem @@ -54,36 +80,31 @@ namespace $.$$ { return keys.map( k => this.Param( k ) ) } - @ $mol_mem + @ $mol_mem_key param_value( id: any ): string { return this.predict().prediction[id].value ?? '' } - @ $mol_mem + @ $mol_mem_key param_mae( id: any ): string { return this.predict().prediction[id].mae ?? '' } - @ $mol_mem + @ $mol_mem_key param_name( id: any ): string { return this.predict().legend[id].name ?? '' } - @ $mol_mem + @ $mol_mem_key param_unit( id: any ): string { return this.predict().legend[id].gui_units ?? '' } - @ $mol_mem + @ $mol_mem_key param_symbol( id: any ): string { return this.predict().legend[id].symbol ?? '' } - @ $mol_mem - card_position(): string { - return this.swiped_to() || this.passed() || '' - } - player_pointerdown( next?: any ) { this.rotating( true ) } @@ -91,6 +112,14 @@ namespace $.$$ { player_pointerup( next?: any ) { this.rotating( false ) } + + click_no() { + this.swipe_to_left( this.number() ) + } + + click_yes() { + this.swipe_to_right( this.number() ) + } } diff --git a/card/card.view.css.ts b/card/card.view.css.ts new file mode 100644 index 0000000..8207b38 --- /dev/null +++ b/card/card.view.css.ts @@ -0,0 +1,113 @@ +namespace $.$$ { + + $mol_style_define( $optimade_tmdne_card, { + + pointerEvents: 'auto', + width: 'max-content', + position: 'fixed', + left: '50%', + transform: 'translateX(-50%)', + bottom: 0, + + // position: 'relative', + // left: 0, + // right: 0, + // width: '100%', + // margin: 'auto', + // overflow: 'hidden', + // flex: { + // grow: 1, + // }, + + padding: '0.5rem', + Float: { + margin: 'auto', + }, + + Card_float: { + background: { + color: $mol_theme.back, + }, + bottom: '-10rem', + position: 'relative', + transition: 'bottom 0.7s', + '[loaded]': { + 'true': { + bottom: 0, + }, + }, + border: { + radius: $mol_gap.round, + }, + boxShadow: '0 0 0.5rem 0rem hsla(0,0%,0%,.125)', + }, + + Card_content: { + flex: { + direction: 'column', + }, + background: { + color: $mol_style_func.hsla( 210, 80, 50, 0.3 ), + }, + padding: $mol_gap.block, + border: { + radius: $mol_gap.round, + }, + '[card_position]': { + 'right': { + background: { + color: $mol_style_func.hsla( 120, 80, 50, 0.3 ), + }, + }, + 'left': { + background: { + color: $mol_style_func.hsla( 0, 80, 50, 0.3 ), + }, + }, + }, + }, + + Name: { + flex: { + direction: 'row', + }, + padding: { + bottom: '0.5rem', + }, + justify: { + content: 'center', + }, + font: { + weight: 700, + size: '1.5rem', + }, + }, + + Question: { + justify: { + content: 'center', + }, + padding: { + bottom: '0.5rem', + }, + }, + + Why: { + pointerEvents: 'auto', + maxWidth: '20rem', + }, + + Why_label: { + gap: '0.5rem', + }, + + Why_optinal: { + color: $mol_theme.shade, + font: { + style: 'italic', + }, + }, + + } ) + +} diff --git a/card/card.view.tree b/card/card.view.tree new file mode 100644 index 0000000..0d9268a --- /dev/null +++ b/card/card.view.tree @@ -0,0 +1,22 @@ +$optimade_tmdne_card $optimade_tmdne_swipe + allowed <= loaded false + content / + <= Card_float $mol_view + attr * + loaded <= loaded + sub / <= Card_content $mol_view + attr * + card_position <= card_position \ + sub / + <= Name $optimade_tmdne_html_view + html <= name \ + <= Question $mol_paragraph + title \Do you think it's synthesizable? + <= Why_label $mol_view + sub / + <= Why_title $mol_paragraph + title \Why? + <= Why_optinal $mol_paragraph + title \(optinal) + <= Why $mol_textarea + value? <=> why? \ diff --git a/card/card.view.ts b/card/card.view.ts new file mode 100644 index 0000000..205ee00 --- /dev/null +++ b/card/card.view.ts @@ -0,0 +1,12 @@ +namespace $.$$ { + + export class $optimade_tmdne_card extends $.$optimade_tmdne_card { + + @ $mol_mem + card_position(): string { + return this.swiped_to() || this.passed() || '' + } + + } + +} diff --git a/swipe/swipe.view.tree b/swipe/swipe.view.tree index dad0c5a..b0ed24d 100644 --- a/swipe/swipe.view.tree +++ b/swipe/swipe.view.tree @@ -11,9 +11,10 @@ $optimade_tmdne_swipe $mol_view passed_left false passed_right false swiped_to? \ + swipe_to_right null + swipe_to_left null on_swiped null reset null - reset_hard null x? 0 sub / <= Float $mol_view diff --git a/swipe/swipe.view.ts b/swipe/swipe.view.ts index fe404aa..4cf54ca 100644 --- a/swipe/swipe.view.ts +++ b/swipe/swipe.view.ts @@ -28,20 +28,33 @@ namespace $.$$ { pointerup( next?: any ) { const speed = this.x() / ( (new $mol_time_moment).valueOf() - this.start_time! ) - this.transition( 'left 0.5s' ) - - if( this.passed_right() || speed > this.speed_threshold() ) this.to_right() - else if( this.passed_left() || speed < ( - this.speed_threshold() ) ) this.to_left() + if( this.passed_right() || speed > this.speed_threshold() ) this.swipe_to_right() + else if( this.passed_left() || speed < ( - this.speed_threshold() ) ) this.swipe_to_left() else this.reset() this.pointer_holding( false ) } reset() { + this.transition( 'left 0.5s' ) this.swiped_to('') this.x( 0 ) } + swipe_to_right() { + this.transition( 'left 0.5s' ) + this.swiped_to( 'right' ) + this.on_swiped() + this.x( 300 ) + } + + swipe_to_left() { + this.transition( 'left 0.5s' ) + this.swiped_to( 'left' ) + this.on_swiped() + this.x( -300 ) + } + reset_hard() { this.transition( '' ) this.reset() @@ -60,18 +73,6 @@ namespace $.$$ { this.passed_right() ? 'right' : '' } - to_right() { - this.swiped_to( 'right' ) - this.on_swiped() - this.x( 900 ) - } - - to_left() { - this.swiped_to( 'left' ) - this.on_swiped() - this.x( -900 ) - } - } } From 3730b09804ff6a7992451a2ffacb9e5f18551b37 Mon Sep 17 00:00:00 2001 From: "stan.donarise" Date: Sat, 29 Jun 2024 16:31:23 +0300 Subject: [PATCH 09/29] Update index.html --- app/index.html | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/index.html b/app/index.html index dfdb054..efcd8ed 100644 --- a/app/index.html +++ b/app/index.html @@ -6,7 +6,7 @@ - +
From b10257ab7618a04efc5b3808b285dc07fd603b24 Mon Sep 17 00:00:00 2001 From: "stan.donarise" Date: Sat, 29 Jun 2024 17:21:33 +0300 Subject: [PATCH 10/29] send user answer (post) --- app/app.view.tree | 4 ++-- app/app.view.ts | 23 +++++++++++++++++++++++ swipe/swipe.view.tree | 1 - swipe/swipe.view.ts | 2 -- 4 files changed, 25 insertions(+), 5 deletions(-) diff --git a/app/app.view.tree b/app/app.view.tree index 167784b..faa13f4 100644 --- a/app/app.view.tree +++ b/app/app.view.tree @@ -4,7 +4,7 @@ $optimade_tmdne_app $mol_view plugins / <= Theme $mol_theme_auto auto / - <= update + <= update null rotating? false number_swiped? 0 number_prefetch? 0 @@ -66,6 +66,6 @@ $optimade_tmdne_app $mol_view loaded <= card_loaded* false why? <=> why*? \ pointer_holding? <=> card_holding? false - on_swiped <= update null + swiped_to? <=> swiped_to*? \ swipe_to_right => swipe_to_right* swipe_to_left => swipe_to_left* diff --git a/app/app.view.ts b/app/app.view.ts index 8aa640a..c3d78e7 100644 --- a/app/app.view.ts +++ b/app/app.view.ts @@ -120,6 +120,29 @@ namespace $.$$ { click_yes() { this.swipe_to_right( this.number() ) } + + @ $mol_mem_key + swiped_to( id: number, next?: string ) { + + const vote = next == 'left' ? 0 : next == 'right' ? 1 : undefined + if( vote !== undefined ) { + + this.$.$mol_wire_async( this.$.$mol_fetch ).success( 'https://crus.absolidix.com', { + method: 'post', + headers: { + "Content-Type": "application/json", + }, + body: JSON.stringify( { + id, comment: this.why( id ), vote + } ), + } ) + + this.update() + + } + + return next ?? '' + } } diff --git a/swipe/swipe.view.tree b/swipe/swipe.view.tree index b0ed24d..a0b06e9 100644 --- a/swipe/swipe.view.tree +++ b/swipe/swipe.view.tree @@ -13,7 +13,6 @@ $optimade_tmdne_swipe $mol_view swiped_to? \ swipe_to_right null swipe_to_left null - on_swiped null reset null x? 0 sub / diff --git a/swipe/swipe.view.ts b/swipe/swipe.view.ts index 4cf54ca..b79cd5d 100644 --- a/swipe/swipe.view.ts +++ b/swipe/swipe.view.ts @@ -44,14 +44,12 @@ namespace $.$$ { swipe_to_right() { this.transition( 'left 0.5s' ) this.swiped_to( 'right' ) - this.on_swiped() this.x( 300 ) } swipe_to_left() { this.transition( 'left 0.5s' ) this.swiped_to( 'left' ) - this.on_swiped() this.x( -300 ) } From beea8231c5dc9fb5c9ed697b94cc7ac4ffd7cd18 Mon Sep 17 00:00:00 2001 From: "stan.donarise" Date: Sat, 29 Jun 2024 17:23:35 +0300 Subject: [PATCH 11/29] Update swipe.view.ts --- swipe/swipe.view.ts | 5 ----- 1 file changed, 5 deletions(-) diff --git a/swipe/swipe.view.ts b/swipe/swipe.view.ts index b79cd5d..5d9b94f 100644 --- a/swipe/swipe.view.ts +++ b/swipe/swipe.view.ts @@ -53,11 +53,6 @@ namespace $.$$ { this.x( -300 ) } - reset_hard() { - this.transition( '' ) - this.reset() - } - passed_left(): boolean { return this.x() < ( - this.left_threshold() ) } From ab2e0b8d20a1474603a8e0f73980e2bf1bb1bce3 Mon Sep 17 00:00:00 2001 From: "stan.donarise" Date: Sat, 29 Jun 2024 17:31:20 +0300 Subject: [PATCH 12/29] $optimade_tmdne_swipe: simplify --- swipe/swipe.view.tree | 4 +--- swipe/swipe.view.ts | 23 ++++++++++------------- 2 files changed, 11 insertions(+), 16 deletions(-) diff --git a/swipe/swipe.view.tree b/swipe/swipe.view.tree index a0b06e9..432249d 100644 --- a/swipe/swipe.view.tree +++ b/swipe/swipe.view.tree @@ -8,12 +8,10 @@ $optimade_tmdne_swipe $mol_view right_threshold <= threshold 60 left_threshold <= threshold passed \ - passed_left false - passed_right false swiped_to? \ swipe_to_right null swipe_to_left null - reset null + move_to_middle null x? 0 sub / <= Float $mol_view diff --git a/swipe/swipe.view.ts b/swipe/swipe.view.ts index 5d9b94f..18e9d0f 100644 --- a/swipe/swipe.view.ts +++ b/swipe/swipe.view.ts @@ -28,14 +28,14 @@ namespace $.$$ { pointerup( next?: any ) { const speed = this.x() / ( (new $mol_time_moment).valueOf() - this.start_time! ) - if( this.passed_right() || speed > this.speed_threshold() ) this.swipe_to_right() - else if( this.passed_left() || speed < ( - this.speed_threshold() ) ) this.swipe_to_left() - else this.reset() + if( (this.passed() == 'right') || speed > this.speed_threshold() ) this.swipe_to_right() + else if( (this.passed() == 'left') || speed < ( - this.speed_threshold() ) ) this.swipe_to_left() + else this.move_to_middle() this.pointer_holding( false ) } - reset() { + move_to_middle() { this.transition( 'left 0.5s' ) this.swiped_to('') this.x( 0 ) @@ -53,17 +53,14 @@ namespace $.$$ { this.x( -300 ) } - passed_left(): boolean { - return this.x() < ( - this.left_threshold() ) - } + @ $mol_mem + passed(): string { + const x = this.x() - passed_right(): boolean { - return this.x() > this.right_threshold() - } + if( x < ( - this.left_threshold() ) ) return 'left' + if( x > this.right_threshold() ) return 'right' - passed(): string { - return this.passed_left() ? 'left' : - this.passed_right() ? 'right' : '' + return '' } } From d9dd8a8b90c95e18152af97a9ed5d7a66cc320d2 Mon Sep 17 00:00:00 2001 From: "stan.donarise" Date: Sat, 29 Jun 2024 17:36:54 +0300 Subject: [PATCH 13/29] $optimade_tmdne_app: update before post --- app/app.view.ts | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/app/app.view.ts b/app/app.view.ts index c3d78e7..756251d 100644 --- a/app/app.view.ts +++ b/app/app.view.ts @@ -127,7 +127,9 @@ namespace $.$$ { const vote = next == 'left' ? 0 : next == 'right' ? 1 : undefined if( vote !== undefined ) { - this.$.$mol_wire_async( this.$.$mol_fetch ).success( 'https://crus.absolidix.com', { + this.update() + + this.$.$mol_fetch.success( 'https://crus.absolidix.com', { method: 'post', headers: { "Content-Type": "application/json", @@ -137,8 +139,6 @@ namespace $.$$ { } ), } ) - this.update() - } return next ?? '' From 2a53a8e6236a18bba3edae647a8ec99541f806ff Mon Sep 17 00:00:00 2001 From: Evgeny Blokhin Date: Sat, 29 Jun 2024 16:37:35 +0200 Subject: [PATCH 14/29] Polish styles and fix typo --- app/app.view.css.ts | 8 ++++++-- app/app.view.tree | 2 +- card/card.view.css.ts | 10 +++++----- card/card.view.tree | 4 ++-- 4 files changed, 14 insertions(+), 10 deletions(-) diff --git a/app/app.view.css.ts b/app/app.view.css.ts index 7655ff7..65871b8 100644 --- a/app/app.view.css.ts +++ b/app/app.view.css.ts @@ -1,5 +1,5 @@ namespace $.$$ { - + $mol_style_define( $optimade_tmdne_app, { overflow: 'hidden', @@ -38,6 +38,8 @@ namespace $.$$ { Head_card: { pointerEvents: 'auto', margin: 'auto', + width: '35%', + textAlign: 'center', }, Head_title: { @@ -126,13 +128,15 @@ namespace $.$$ { Hint_no: { pointerEvents: 'auto', color: '#ff6666', + zIndex: 10, }, Hint_yes: { pointerEvents: 'auto', color: $mol_theme.current, + zIndex: 10, }, } ) - + } diff --git a/app/app.view.tree b/app/app.view.tree index 167784b..32b16ed 100644 --- a/app/app.view.tree +++ b/app/app.view.tree @@ -1,5 +1,5 @@ $optimade_tmdne_app $mol_view - title \This material does not exist + title \This Material Does Not Exist? number? 1 plugins / <= Theme $mol_theme_auto diff --git a/card/card.view.css.ts b/card/card.view.css.ts index 8207b38..222ebe4 100644 --- a/card/card.view.css.ts +++ b/card/card.view.css.ts @@ -1,7 +1,7 @@ namespace $.$$ { - + $mol_style_define( $optimade_tmdne_card, { - + pointerEvents: 'auto', width: 'max-content', position: 'fixed', @@ -101,13 +101,13 @@ namespace $.$$ { gap: '0.5rem', }, - Why_optinal: { + Why_optional: { color: $mol_theme.shade, font: { style: 'italic', }, }, - + } ) - + } diff --git a/card/card.view.tree b/card/card.view.tree index 0d9268a..57da28b 100644 --- a/card/card.view.tree +++ b/card/card.view.tree @@ -16,7 +16,7 @@ $optimade_tmdne_card $optimade_tmdne_swipe sub / <= Why_title $mol_paragraph title \Why? - <= Why_optinal $mol_paragraph - title \(optinal) + <= Why_optional $mol_paragraph + title \(optional) <= Why $mol_textarea value? <=> why? \ From 9ae2ca7ab9cca318dc67f9e4819783213a9b0279 Mon Sep 17 00:00:00 2001 From: Evgeny Blokhin Date: Sat, 29 Jun 2024 16:51:39 +0200 Subject: [PATCH 15/29] Fix prediction table on mobile screens --- app/app.view.css | 3 +++ app/app.view.tree | 4 ++-- 2 files changed, 5 insertions(+), 2 deletions(-) create mode 100644 app/app.view.css diff --git a/app/app.view.css b/app/app.view.css new file mode 100644 index 0000000..29b85b2 --- /dev/null +++ b/app/app.view.css @@ -0,0 +1,3 @@ +@media all and (max-width: 900px) { + [optimade_tmdne_app_param_mae], [optimade_tmdne_app_param_name] { display: none; } +} diff --git a/app/app.view.tree b/app/app.view.tree index 0a4cfa8..95e5823 100644 --- a/app/app.view.tree +++ b/app/app.view.tree @@ -33,13 +33,13 @@ $optimade_tmdne_app $mol_view <= Param* $mol_view sub / <= Param_name* $mol_paragraph - minimal_height 16 + minimal_height 24 title <= param_name* \ <= Param_symbol_html* $optimade_tmdne_html_view html <= param_symbol* \ \= <= Param_value* $mol_view - minimal_height 16 + minimal_height 24 sub / <= param_value* \ <= Param_unit* $optimade_tmdne_html_view From 060dc6a6eaa04c6ef23b4f1ae4bd36d5731013eb Mon Sep 17 00:00:00 2001 From: Evgeny Blokhin Date: Sat, 29 Jun 2024 18:12:44 +0200 Subject: [PATCH 16/29] Fix results saving --- app/app.view.ts | 27 +++++++++++++++------------ 1 file changed, 15 insertions(+), 12 deletions(-) diff --git a/app/app.view.ts b/app/app.view.ts index 756251d..84b5a81 100644 --- a/app/app.view.ts +++ b/app/app.view.ts @@ -15,11 +15,11 @@ namespace $.$$ { const structure = JSON.stringify( this.fetch_by_number( number ) ) const params = new URLSearchParams({ structure }) const url = `https://labs.mpds.io/predict?${ params.toString() }` - + const prediction = this.$.$mol_wire_sync( this ).$.$mol_fetch.success( url, { method: 'post', } ).json() ?? {} as any - + return prediction } @@ -34,7 +34,7 @@ namespace $.$$ { let str = json?.data[ 0 ]?.attributes?.chemical_formula_reduced return formula_html( str ) } - + @ $mol_mem_key card_loaded( n: number ) { try { @@ -48,7 +48,7 @@ namespace $.$$ { cards(): readonly ( any )[] { const swiped = this.number_swiped() - return [ + return [ this.Card( this.number_prefetch() ), ... swiped ? [ this.Card( swiped ) ] : [], this.Card( this.number() ), @@ -123,27 +123,30 @@ namespace $.$$ { @ $mol_mem_key swiped_to( id: number, next?: string ) { - + const vote = next == 'left' ? 0 : next == 'right' ? 1 : undefined if( vote !== undefined ) { this.update() - + const params = new URLSearchParams( { + id: this.json()?.data[ 0 ]?.attributes?._gnome_material_id, + comment: this.why( id ), + vote + } ) + this.$.$mol_fetch.success( 'https://crus.absolidix.com', { method: 'post', headers: { - "Content-Type": "application/json", + "Content-Type": "application/x-www-form-urlencoded", }, - body: JSON.stringify( { - id, comment: this.why( id ), vote - } ), + body: params.toString(), } ) } return next ?? '' } - + } function random_int( min: number, max: number ) { @@ -170,5 +173,5 @@ namespace $.$$ { if( sub ) html += '' return html ?? '' } - + } From 4bef46a5f4638a188ab6eb846144b58ebb040a37 Mon Sep 17 00:00:00 2001 From: "stan.donarise" Date: Sat, 29 Jun 2024 19:23:28 +0300 Subject: [PATCH 17/29] fix card hiding --- card/card.view.css.ts | 7 +++---- swipe/swipe.view.tree | 3 +++ swipe/swipe.view.ts | 10 +++++----- 3 files changed, 11 insertions(+), 9 deletions(-) diff --git a/card/card.view.css.ts b/card/card.view.css.ts index 222ebe4..a54ddc9 100644 --- a/card/card.view.css.ts +++ b/card/card.view.css.ts @@ -28,12 +28,11 @@ namespace $.$$ { background: { color: $mol_theme.back, }, - bottom: '-10rem', - position: 'relative', - transition: 'bottom 0.7s', + transform: 'translateY(110%)', + transition: 'transform 0.7s', '[loaded]': { 'true': { - bottom: 0, + transform: 'none', }, }, border: { diff --git a/swipe/swipe.view.tree b/swipe/swipe.view.tree index 432249d..41222d2 100644 --- a/swipe/swipe.view.tree +++ b/swipe/swipe.view.tree @@ -7,6 +7,8 @@ $optimade_tmdne_swipe $mol_view speed_threshold 1 right_threshold <= threshold 60 left_threshold <= threshold + swipe_distance 300 + transition_smooth \left 0.5s passed \ swiped_to? \ swipe_to_right null @@ -19,6 +21,7 @@ $optimade_tmdne_swipe $mol_view style * left <= left \0px transition <= transition? \ + pointer_holding? false event * ^ diff --git a/swipe/swipe.view.ts b/swipe/swipe.view.ts index 18e9d0f..a517138 100644 --- a/swipe/swipe.view.ts +++ b/swipe/swipe.view.ts @@ -36,21 +36,21 @@ namespace $.$$ { } move_to_middle() { - this.transition( 'left 0.5s' ) + this.transition( this.transition_smooth() ) this.swiped_to('') this.x( 0 ) } swipe_to_right() { - this.transition( 'left 0.5s' ) + this.transition( this.transition_smooth() ) this.swiped_to( 'right' ) - this.x( 300 ) + this.x( this.swipe_distance() ) } swipe_to_left() { - this.transition( 'left 0.5s' ) + this.transition( this.transition_smooth() ) this.swiped_to( 'left' ) - this.x( -300 ) + this.x( - this.swipe_distance() ) } @ $mol_mem From 9caefa560d19ed36a6cfa03f36117c778890b3fa Mon Sep 17 00:00:00 2001 From: Evgeny Blokhin Date: Sat, 29 Jun 2024 22:41:56 +0200 Subject: [PATCH 18/29] Fix TS types and use cached Optimade structure --- app/app.view.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/app/app.view.ts b/app/app.view.ts index 84b5a81..4961a43 100644 --- a/app/app.view.ts +++ b/app/app.view.ts @@ -129,9 +129,9 @@ namespace $.$$ { this.update() const params = new URLSearchParams( { - id: this.json()?.data[ 0 ]?.attributes?._gnome_material_id, + id: this.fetch_by_number( id )?.data[ 0 ]?.attributes?._gnome_material_id, comment: this.why( id ), - vote + vote: vote.toString(), } ) this.$.$mol_fetch.success( 'https://crus.absolidix.com', { From e74487f0b30810c8af9948e40126e68608ee673a Mon Sep 17 00:00:00 2001 From: Evgeny Blokhin Date: Sat, 29 Jun 2024 23:22:04 +0200 Subject: [PATCH 19/29] Update compilation info --- README.md | 47 ++++++++++++++++++++++++++++++++++++++--------- 1 file changed, 38 insertions(+), 9 deletions(-) diff --git a/README.md b/README.md index 1bd92d5..d0fb170 100644 --- a/README.md +++ b/README.md @@ -1,9 +1,38 @@ -

💎 this-material-does-not-exist 💎

- -Get given random crystal structures predicted by ML materials discovery projects, and vote on whether you think it should be synthesizable (or, at least, whether it is worth trying!) - -Currently uses [crystaltoolkit](https://docs.crystaltoolkit.org) and data from the -[OPTIMADE API](https://optimade.org) for the recent [Google DeepMind -paper](https://github.com/google-deepmind/materials_discovery). - -![2023-12-10-001838_1095x878_scrot](https://github.com/ml-evs/this-material-does-not-exist/assets/7916000/678ba7ec-d929-438e-8637-3dad5bf26493) +

💎 this-material-does-not-exist 💎

+ +Get given random crystal structures predicted by ML materials discovery projects, and vote on whether you think it should be synthesizable (or, at least, whether it is worth trying!) + +Currently uses [cifplayer](https://github.com/tilde-lab/cifplayer) and data from the +[OPTIMADE API](https://optimade.org) for the recent [Google DeepMind +paper](https://github.com/google-deepmind/materials_discovery). +The physical properties prediction is done dynamically by [MPDS](https://mpds.io/ml). + +![2023-12-10-001838_1095x878_scrot](https://github.com/ml-evs/this-material-does-not-exist/assets/7916000/678ba7ec-d929-438e-8637-3dad5bf26493) + + +## Build + +The `cifplayer` is powered by `$mol`. Note that, unlike many other frontend frameworks, `$mol` provides the same single environment for all its projects, under the standard namespace scheme. That is, all your `$mol`-based code lives inside the same directory `$MOL_HOME`. So if you don't have `$MOL_HOME` yet, please create it and navigate there: + +```bash +mkdir $MOL_HOME && cd $MOL_HOME +``` + +Then build with + +```bash +npm exec mam optimade/tmdne/app +``` + +This will fetch the MAM server (MAM stands for the `$mol` abstract modules), clone this project, and compile it inside `optimade/tmdne/app/-/` subfolder. You will need the `web.js` bundle, that's it. + + +## Develop + +Similarly to above, inside the `$MOL_HOME`, start the MAM dev-server with + +```bash +npm exec mam +``` + +and navigate to http://localhost:9080, there select `optimade` namespace, then `tmdne`, then `app`. As you go through the folder structure, the selected project is being cloned and compiled on the fly, inside the corresponding subfolder of `$MOL_HOME`. From 23a680c7da8dc5a99a71167acf394215c533ef92 Mon Sep 17 00:00:00 2001 From: "stan.donarise" Date: Sun, 30 Jun 2024 15:14:03 +0300 Subject: [PATCH 20/29] $optimade_tmdne_html_view removed --- app/app.view.tree | 9 ++++++--- card/card.view.tree | 3 ++- html/html.view.css.ts | 23 ----------------------- html/html.view.tree | 12 ------------ html/html.view.ts | 12 ------------ 5 files changed, 8 insertions(+), 51 deletions(-) delete mode 100644 html/html.view.css.ts delete mode 100644 html/html.view.tree delete mode 100644 html/html.view.ts diff --git a/app/app.view.tree b/app/app.view.tree index 95e5823..387d40c 100644 --- a/app/app.view.tree +++ b/app/app.view.tree @@ -35,20 +35,23 @@ $optimade_tmdne_app $mol_view <= Param_name* $mol_paragraph minimal_height 24 title <= param_name* \ - <= Param_symbol_html* $optimade_tmdne_html_view + <= Param_symbol_html* $mol_html_view + minimal_height 24 html <= param_symbol* \ \= <= Param_value* $mol_view minimal_height 24 sub / <= param_value* \ - <= Param_unit* $optimade_tmdne_html_view + <= Param_unit* $mol_html_view + minimal_height 24 html <= param_unit* \ <= Param_mae* $mol_view sub / \(± <= param_mae* \ - <= Param_mae_unit* $optimade_tmdne_html_view + <= Param_mae_unit* $mol_html_view + minimal_height 24 html <= param_unit* \ \) <= Foot $mol_view diff --git a/card/card.view.tree b/card/card.view.tree index 57da28b..50cca1d 100644 --- a/card/card.view.tree +++ b/card/card.view.tree @@ -8,7 +8,8 @@ $optimade_tmdne_card $optimade_tmdne_swipe attr * card_position <= card_position \ sub / - <= Name $optimade_tmdne_html_view + <= Name $mol_html_view + minimal_height 24 html <= name \ <= Question $mol_paragraph title \Do you think it's synthesizable? diff --git a/html/html.view.css.ts b/html/html.view.css.ts deleted file mode 100644 index 02cbd0a..0000000 --- a/html/html.view.css.ts +++ /dev/null @@ -1,23 +0,0 @@ -namespace $ { - - $mol_style_define( $optimade_tmdne_html_view , { - - Subscript: { - font: { - size: '.75em', - }, - position: 'relative', - bottom: '-0.5em', - }, - - Superscript: { - font: { - size: '.75em', - }, - position: 'relative', - top: '-0.25em', - }, - - } ) - -} diff --git a/html/html.view.tree b/html/html.view.tree deleted file mode 100644 index 0147092..0000000 --- a/html/html.view.tree +++ /dev/null @@ -1,12 +0,0 @@ -$optimade_tmdne_html_view $mol_html_view - minimal_height 16 - Subscript* $mol_view - dom_name \sub - sub <= content* - Superscript* $mol_view - dom_name \sup - sub <= content* - Text* $mol_dimmer - minimal_height 16 - needle <= highlight - haystack <= text* diff --git a/html/html.view.ts b/html/html.view.ts deleted file mode 100644 index b9f8ced..0000000 --- a/html/html.view.ts +++ /dev/null @@ -1,12 +0,0 @@ -namespace $.$$ { - - export class $optimade_tmdne_html_view extends $.$optimade_tmdne_html_view { - - views( node : Node ) { - if( node.nodeName == 'SUB' ) return [ this.Subscript( node ) ] - if( node.nodeName == 'SUP' ) return [ this.Superscript( node ) ] - return super.views( node ) - } - - } -} From 26081c92eb1387257e5f0ac6543f2d2359052bed Mon Sep 17 00:00:00 2001 From: Evgeny Blokhin Date: Fri, 5 Jul 2024 15:59:57 +0200 Subject: [PATCH 21/29] Fix links --- README.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/README.md b/README.md index d0fb170..5c42ce7 100644 --- a/README.md +++ b/README.md @@ -1,18 +1,18 @@ -

💎 this-material-does-not-exist 💎

+

💎 this-material-does-not-exist 💎

Get given random crystal structures predicted by ML materials discovery projects, and vote on whether you think it should be synthesizable (or, at least, whether it is worth trying!) Currently uses [cifplayer](https://github.com/tilde-lab/cifplayer) and data from the [OPTIMADE API](https://optimade.org) for the recent [Google DeepMind paper](https://github.com/google-deepmind/materials_discovery). -The physical properties prediction is done dynamically by [MPDS](https://mpds.io/ml). +The physical properties prediction is done dynamically by [MPDS ML server](https://mpds.io/ml). ![2023-12-10-001838_1095x878_scrot](https://github.com/ml-evs/this-material-does-not-exist/assets/7916000/678ba7ec-d929-438e-8637-3dad5bf26493) ## Build -The `cifplayer` is powered by `$mol`. Note that, unlike many other frontend frameworks, `$mol` provides the same single environment for all its projects, under the standard namespace scheme. That is, all your `$mol`-based code lives inside the same directory `$MOL_HOME`. So if you don't have `$MOL_HOME` yet, please create it and navigate there: +The `cifplayer` is powered by `$mol` framework. Note that, unlike many other frontend frameworks, `$mol` provides the same single environment for all its projects, under the standard namespace scheme. That is, all your `$mol`-based code lives inside the same directory `$MOL_HOME`. So if you don't have `$MOL_HOME` yet, please create it and navigate there: ```bash mkdir $MOL_HOME && cd $MOL_HOME From 2eb1b6bf7956ebd18f19ef98a33497307db39466 Mon Sep 17 00:00:00 2001 From: "stan.donarise" Date: Sun, 7 Jul 2024 22:08:41 +0300 Subject: [PATCH 22/29] param_min_height prop added --- app/app.view.css.ts | 2 +- app/app.view.tree | 10 ++++------ 2 files changed, 5 insertions(+), 7 deletions(-) diff --git a/app/app.view.css.ts b/app/app.view.css.ts index 65871b8..06d8729 100644 --- a/app/app.view.css.ts +++ b/app/app.view.css.ts @@ -85,7 +85,7 @@ namespace $.$$ { }, }, - Param_symbol_html: { + Param_symbol: { flex: { direction: 'row', }, diff --git a/app/app.view.tree b/app/app.view.tree index 387d40c..8e5fe45 100644 --- a/app/app.view.tree +++ b/app/app.view.tree @@ -33,25 +33,23 @@ $optimade_tmdne_app $mol_view <= Param* $mol_view sub / <= Param_name* $mol_paragraph - minimal_height 24 title <= param_name* \ - <= Param_symbol_html* $mol_html_view - minimal_height 24 + <= Param_symbol* $mol_html_view + minimal_height <= param_min_height 24 html <= param_symbol* \ \= <= Param_value* $mol_view - minimal_height 24 sub / <= param_value* \ <= Param_unit* $mol_html_view - minimal_height 24 + minimal_height <= param_min_height html <= param_unit* \ <= Param_mae* $mol_view sub / \(± <= param_mae* \ <= Param_mae_unit* $mol_html_view - minimal_height 24 + minimal_height <= param_min_height html <= param_unit* \ \) <= Foot $mol_view From 1422f62075086efcaa38593f0e254a4ab3023fd5 Mon Sep 17 00:00:00 2001 From: Evgeny Blokhin Date: Wed, 10 Jul 2024 00:58:22 +0200 Subject: [PATCH 23/29] Add footer and polish look&feel at the different screen resolutions --- README.md | 4 ++-- app/app.view.css | 7 ++++++- app/app.view.css.ts | 15 ++++++++++++--- app/app.view.tree | 24 +++++++++++++++++++++++- card/card.view.css.ts | 5 +++-- card/card.view.tree | 2 +- d582d1239f.png | Bin 0 -> 218213 bytes 7 files changed, 47 insertions(+), 10 deletions(-) create mode 100644 d582d1239f.png diff --git a/README.md b/README.md index 5c42ce7..a7824fc 100644 --- a/README.md +++ b/README.md @@ -7,12 +7,12 @@ Currently uses [cifplayer](https://github.com/tilde-lab/cifplayer) and data from paper](https://github.com/google-deepmind/materials_discovery). The physical properties prediction is done dynamically by [MPDS ML server](https://mpds.io/ml). -![2023-12-10-001838_1095x878_scrot](https://github.com/ml-evs/this-material-does-not-exist/assets/7916000/678ba7ec-d929-438e-8637-3dad5bf26493) +![GNome_d582d1239f_screenshot](https://github.com/mpds-io/this-material-does-not-exist/main/d582d1239f.png) ## Build -The `cifplayer` is powered by `$mol` framework. Note that, unlike many other frontend frameworks, `$mol` provides the same single environment for all its projects, under the standard namespace scheme. That is, all your `$mol`-based code lives inside the same directory `$MOL_HOME`. So if you don't have `$MOL_HOME` yet, please create it and navigate there: +The `cifplayer` is powered by `$mol` framework. Note that, unlike many other frontend frameworks, `$mol` provides the same single environment for all its projects, under the standard namespace scheme. That is, all your `$mol`-based code lives inside the same directory `$MOL_HOME`. So if you don't have `$MOL_HOME` yet, please create it and navigate there ```bash mkdir $MOL_HOME && cd $MOL_HOME diff --git a/app/app.view.css b/app/app.view.css index 29b85b2..6a11ea7 100644 --- a/app/app.view.css +++ b/app/app.view.css @@ -1,3 +1,8 @@ -@media all and (max-width: 900px) { +@media all and (max-width: 850px) { [optimade_tmdne_app_param_mae], [optimade_tmdne_app_param_name] { display: none; } + [optimade_tmdne_app_acks] { display: none; } +} + +@media all and (max-height: 650px) { + [optimade_tmdne_app_prediction] { display: none; } } diff --git a/app/app.view.css.ts b/app/app.view.css.ts index 06d8729..b8a0892 100644 --- a/app/app.view.css.ts +++ b/app/app.view.css.ts @@ -47,6 +47,9 @@ namespace $.$$ { justify: { content: 'center', }, + font: { + size: '1.2rem', + }, }, Prediction: { @@ -113,7 +116,7 @@ namespace $.$$ { }, width: '24rem', position: 'absolute', - bottom: '4rem', + bottom: '5.3rem', pointerEvents: 'none', transition: 'opacity 0.2s', @@ -123,18 +126,24 @@ namespace $.$$ { opacity: 0, }, }, + zIndex: 1, }, Hint_no: { pointerEvents: 'auto', color: '#ff6666', - zIndex: 10, }, Hint_yes: { pointerEvents: 'auto', color: $mol_theme.current, - zIndex: 10, + }, + + Acks: { + font: { + size: '0.7rem', + }, + zIndex: 0, }, } ) diff --git a/app/app.view.tree b/app/app.view.tree index 8e5fe45..e6fa209 100644 --- a/app/app.view.tree +++ b/app/app.view.tree @@ -35,7 +35,7 @@ $optimade_tmdne_app $mol_view <= Param_name* $mol_paragraph title <= param_name* \ <= Param_symbol* $mol_html_view - minimal_height <= param_min_height 24 + minimal_height <= param_min_height 22 html <= param_symbol* \ \= <= Param_value* $mol_view @@ -70,3 +70,25 @@ $optimade_tmdne_app $mol_view swiped_to? <=> swiped_to*? \ swipe_to_right => swipe_to_right* swipe_to_left => swipe_to_left* + <= Acks $mol_view + sub / + <= Acks_a $mol_link + uri \https://www.optimade.org + sub / + \Powered by Optimade + <= Acks_b $mol_link + uri \https://github.com/tilde-lab/cifplayer + sub / + \and cifplayer + <= Acks_c $mol_link + uri \https://github.com/google-deepmind/materials_discovery + sub / + \using the GNome dataset + <= Acks_d $mol_link + uri \https://github.com/ml-evs/this-material-does-not-exist + sub / + \developed on GitHub + <= Acks_e $mol_link + uri \https://thispersondoesnotexist.com + sub / + \and inspired by... diff --git a/card/card.view.css.ts b/card/card.view.css.ts index a54ddc9..0fb9d55 100644 --- a/card/card.view.css.ts +++ b/card/card.view.css.ts @@ -7,7 +7,8 @@ namespace $.$$ { position: 'fixed', left: '50%', transform: 'translateX(-50%)', - bottom: 0, + bottom: '1.6rem', + zIndex: 2, // position: 'relative', // left: 0, @@ -28,7 +29,7 @@ namespace $.$$ { background: { color: $mol_theme.back, }, - transform: 'translateY(110%)', + transform: 'translateY(125%)', transition: 'transform 0.7s', '[loaded]': { 'true': { diff --git a/card/card.view.tree b/card/card.view.tree index 50cca1d..fecfe84 100644 --- a/card/card.view.tree +++ b/card/card.view.tree @@ -9,7 +9,7 @@ $optimade_tmdne_card $optimade_tmdne_swipe card_position <= card_position \ sub / <= Name $mol_html_view - minimal_height 24 + minimal_height 22 html <= name \ <= Question $mol_paragraph title \Do you think it's synthesizable? diff --git a/d582d1239f.png b/d582d1239f.png new file mode 100644 index 0000000000000000000000000000000000000000..8aab0ed5199ba7b97a6e2ff68ba44c09357c63c6 GIT binary patch literal 218213 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 z z;)O6u!CEGjc*G1%IX@g@|F}F2*bPZ_soJky9`Rg>_J^;j2FY5f{G!5CKFWPgFnH{X zFLJfT4ssqvi4f8z*ep6xuJB-hA%`<$LB!xifkh$Kg z!YrVLm-hPIBwIe|_oIl5+s z>r2_yJSDbQ(b_l4fiGbgq<;^^e32+JAs&4`^-CHE!qB>|wb&}3OM{7ug?+}VC zZS%!Apx>>|i;%INZ_AZH(I`wd-tDOmdY02cg6@S37f_?PhLnqB_A%l&J*B2u|7a+J zt&_3f<_JNBG67@=bD8Ao&cOEd+=axgBIwA}Rlu}<|AWY~(zMX?C*2Nl%0;rIf@=0e zrdbmoQmYZXK+wZfe|GqiZ#88BzZ%C)tqQq2H`O_^;IC|X=yti2IuH#qR%~UUk-L-vBj@jFN7x@_u4JQ_OP{^-*93n%uLgnBs`ZfV(AR#mmK~nCr$M_ zM!E?_LDf55_T3yp?YLlFAhJ0F_yiGMFh@q&Dr`FL0rFekx2!gZMX9T6n-+f>0` z9b>jrOxnmfFm9~niFp@18w=Q=!>_cyO1VKn$1U|H71I9tT`DaWrmvnNpN z#dD-S5Q_39ffv2+7zuCzW0_&9!*lw06hd?YE0!vbut|nl{b`&~kr%YPC_Icf19j2~ zve*?xD9XjO0(UQ_Rb>0-MRlS0sCG!~M>K-~s=k?EB%h!_!_%TpC#iIBu(eiZB_pK# z*w13kAql7A{^J+@l&wa-y}lKTc6Z+2<*y^2ul_$YYzW!q-{H;qXr>Qr^*hS3{(fe- z8Uns`#q6!Zz-uAw6kS)_tXFk{&q@9;t9#uF3{jzl@PVFRavWO5=i9WY+nfUeR+?FO;+gaQ zrs$z&>9^<`v-0C%A#>aguDDY&${l?u!1m|gAls@@eJzQh9TRX)uVd<~zJHr=F8c;? zm9#@j43t7Eet&by?A34$3CrGm*@Z&fXVghHy71MfvGhS3MkH_F*B);(IN3RM=x2MZ z9SI(FPJejsvQkPnyX4)3j4Q!`u4-Q`Y>IddVVFEpkr8e5BA<;f#b}8mMqHnJ`4PGF z3#NbU%mncGyq2(y@^<{VBI`L>#jiy%QqeV@sq_M9XE$P-b2O7fEVhhEz6P8DYUuei z4fYL1X|Klji|m!gRNwjzQ8@Fq`>`rqDu>G7^d@_Zsj~B+AkK={)JI6u_hyq4w@~9ri{BNgn6}b0bA1x`xCng5U?28F3tJ~|<`?U0Q-|%^3&ZY@MEeRS zVFXsHAt+zW-}OJy78(7^y9>pc{L){|wl8*o@1W>7Ws6Z~;41OSiq;Y3=t4lq3E{yU z%zM}W@8)=X_DY}@J?0tUEf~sM_}D4J?qqC0RoGZ`goYs-y zn?pEs0<*8x4r>+WFLf^Wu02CfV>f6gp@ZwKj_ZNf6Px3YB9TD2F-Pe?X&L@8T;0e%06UA zqrUwuf<<1M-)e|9zsQJ(yEeB8b{r)_SC_iBUbp}nw}Z3pO!xCm>s-8}x$uKC;;QJ4 z&FcS5!2}lT4;j49*~vLdNra4DB_X&;JPrp?VR>XmL)0GyS6yuQtrwvLTS62 zN7?&Q?pj)e?xGpPif@VR5s5aniG=Zm?kO^VSf~5kM^uVzQDdDkRZ17C3T5{$vJ1IT zzl^o?nIJT@wRt}NxLFsvy#Y;?)>N#x?AU8elCYgi%jrN)26z}Sq9Xs#Btt2Wpp@J`lMNYx%imV_t`isX@h<0XjBT)J!G{`I&H?GhTVHZ3$LwJHXA|Pd5cdlmTG`f$I*VNMc1g+leg3J z4BoS80%yumnX(``;xL#Py=2_Gn`FVoF!Xe>&@UDRjaqE}R^vZz2aE7Q2j-(tkDmM8 zeV&DywXEtzUEL-Lq?+Lc%rf!acxjcz$BVMZqjMLZauR-L$K44!78aJbZ;Jtm53tjR zhCP=>a%layNv;nSx!tvC8lvL zib{5OvS@2>5AdjN01dnUKsi?qNO5$BQw5oI8>N;6064$Qtr=Pvn6F#B*HtIVr{{vW zIIAkDzV_{U2yti{|KgRcojaR)EG}^PZK!ay(DL=kA~es0-G*Bai0m&cMnx(xhywYa=igoov6N|>bvxw>};cHRu9#ndR2cx9j;>C zrbGuJ!!DGpQAGXQ^PR~ebp<&&Vgc9V?*#0{YJ0#8uyAlNt{xuf#5~7?QRhuUjx=t)Vu?D7l>voriy zIHUPwp@g_N1n4!6q7{V9I0yk3`^06*E3VlMgez>2sFXTLluEhp*0;wZJ(Bc^GN5U1 zp1bElofZrPo!%UkR?zTFe#?aCbcv#1*LfY?};yr?D zyZ5l*mA1Y8XR{ zr|Z3d9|#mzupd=ajMx&^*OKINfhOYo+;P$^EHv~v0p4;73<|PnU<8cL)y}Y^#xMK@b7i7j+Oct|3YQl zy*6RIVG_k!4)r5GF^>x-G$9}A zj1qePY)+Fu`k?p1>< z12IZnow*JtpzwiR#X$n8s~#Di7;fs4(1wv6VDc)rZ*d*yRH9}1nk$V8Pl}qt^#6v7UsqbmxDl$ss7m8CCtHexv8D`brXZ4 zYIfUiTq7SIc(v>6#3dNMqtkbM8_SYbS8;`cDcCV5?^^1S48!p&$1RtcLp4iV?z>vv zAKCujRU$&jUSsFBEFP?wf5zIP#?i3quSxyXeDSqVEJdb`gh)ND+5YG})+4VOpMCcv z*XN=@R+>-xy)O{0^)do^AkZp~xwHO81)hM4jGQRw;S5wInl;u!`@cAil*85I_(;1m1Fv3S!Ur@6b!6`l0o?$=Lj_zfli4;HI(Nm78}N5W@3EFp*wc zS+VGSpc|qJS+aYr_inJ&X@K9FebN45&4K&IGDEPUm>3@()U_v&6Z<0*X+1QH>GVSE zU9$0VlbhNtzWd9Ykq`2PvW#mcR70Ptub5Ly#iyV?K0c7XdSu`i2?+_OQ-CQx$rMh= z$p=W-z0ouj6ch;*?E^+^U=uMiGRnL2+pqTk^@DD$Z3eIuSCZ9ytsN@icCBtTkPHDK z7w{J}AWuO?b_a41)den~b+i1(Vk`?{E{u_h$yBM1))ZHi6)3>lv*@boKM~cE+q^RB zrtGd#`omtnN@`#99qLY?q8bQ0GmR+2x?E2?8T|H@xXwwdpahpTufeeBc^+NYa(cMZ zNJ($WLb0-L$6y3K4eJIBi9KzIxdhNI{}r2j=aX=c?Q1b}11L|lZ!1(0>6D8MepFS@ zQB;G``~H*n4N2=Y>41dV+&>zvho%bAJ|2)pWdKbdL`p${J84i<^z!9wrD-JBpSI~~ zJQ3jCmxl}eym2uBod&!Po8Mz_=>X9dFmQqVtXMe@%@=42U;3vzk=KLp3*waf)gdF2 zFHjGIRF0McYY2!(HU|jkV6}3=4ryy^1G1bi3-#3#Q86*uMbghTa_DyOt)2Qboypt) zuV~fQsk+*$U*zs}<9jJ)6R;cw(Y4^ALoGKGdrY|NX-b_QF3(^$EJgh1 zf9MF^XEnIEGmAd;2TQa>AS;*x`ort%Yd)u4kZrVF&RQ6DM?9R5D*)Vl1=!~08FSem zK$>xT(oNb8k`wa@T1D(<7zX++JY8295pVBDhO$QBCO?6nr1IFUrU07uQPUMAosx>m z1PI59S?>h_E8N@L+s@8T_Sf5x@bEzyJAH)zash^iefCOf05$>5HFer5a4LvVk^h4- zK{z0WyMnZ@qoadrEC1o{N_I%`xo~78D&%N?10@QAAXW^D@?NL}a@(5fus})5a7y%j ziD;-)BdGCeXb<@YH>}@f*3Ax)*#{GYY4%oD&bAMCbd;s}$WXuPH&&yw2u;21Up*r! z;}!<8GON~Lo?`p^Ab-9|W$(4&ocsai zkpjm398e9v5eo$Ba(5ur1$2BOE=yYPvOiXH)RdI_OD!!x<8v@qBkZs#2SmUsJ#|1b z3yd&RVJr(mM^_~269_5t@hqaVve=z~ny*)D3*!sa!|&b!;TQOul;g`s;CHIA*>>it&%{Xf zZ%fhiy+xLgXviNy87ngV5o4#a^f5h2qHo5zo8{HvD~!xBv%+I&sjbASwYj~+RqRE& z#fw#EGP3gMT18kYG5OCwmRNE7L^2$U3JVYYIY(2Lx&EooF*7r4722srDi&=6P%`(P(C0RO?2c|mXuyCtoZ5p%{ zw9bp=%hKL%OdMUKQ)Do|PPukS^n2#Ne5GOgeTX%bcaceKw!9lg{;oy9KcZ?ROn;O1 zQk4#$BU566L&lqp+@;B~cS1j{|NXQXu1?KOODUoDT1XxHUkz1d^wM!hY$Ep|&QvMB zL{TjCgYTi6o$mfS-_nEWD zzh%r+{r@(wA5Dhj5@UFc`z#_djkvlERvIr>zWd(J${p(sG2TTg+Wc>r6nL9cXxK=VAqU4E;Aj@zrl9gGt8Hq3pcTi zdxvLxWRv@wYkOTARvfJe@nw!4n9JIHO^$iq?EZ$NKAt1f+{{AFZw-y{&rAn`ScT1C z?(tvh7ZV#=p&S2=d~_PH*eiPUo~fp<)J6Q-GwBt&!)(q8mwYP1D>m6B((pD@hy9b~ zY2FzkIu#jTajFH2Fa00U;eeNg+y4AFbUS<`I~LIJIsE0WZn@8Mqt*BSEOzbC2~7X{ zUr~Hsn$pO(PZWU58-vT+01?I6FWlBJR#M3ZQbS_`kMohq$i;snhj$N$9VpA>=-RJU z9Gt#?{XZD{?s%%h_x*Da%E7VsCVR`?j;xG~>`i2EvbSS|?CcOC6tefo-XSA`K!z%?2(pSR8YNeEeD02 zKnP2d|0B<{9~O_#UEYLyQKtN9B$6>Km8s%5&$++;5Y{W>@+uYS4}6yfnh`7!Rv>b? z8OqKR_(&_cl+MdQ%d%*(E22wAAY2bQL&1qt+IwMkm@P-&cSe#aJo$yM8S71wMOnhf zyij&y(|oS3eB*{}0VM<1BDLyyvo9YhUt0LJZOAYupVJg~T3h&58!zCPql33)Pc-a5=ZBsFwv)0U>^1hy)I7>?R z`%It9*Td5Ni1H}>2lt5gf0$r|Zq@d>G~Zevg;tIlw&>ek87=gGFc{3Np2fVzH2bud z9d<>{(TjuzGFyiFFl&XKmM(CSHpub+F#E##C;oNz!n3yCTL%+wfqmiM?I)TJtq(k@ zU>|Uk>;-k6o7=#RDRM$pJ=#zva`B{P;s4bct(hdfP3Zvw04TaXsjvmb2GQ&1j`);o zGSwpAMLfRlWux{!p!-!XeKdHmo5~nt*THxY7s3yxR$pI!hyh)s|1_^yJ`g(nw6hq_Cw$0P znHln133Kl40OkdRiI3_KUoggd943fU-X-yEa4%HGfY4_P;k72G-o-W_P`;sF!Z(D> zWNj8r;G8}A8>%K)wpQ+H&;R20BCYMN_@mAjRwvIQ04M!F8mcvFv$>{e2xcWc^vrGS zEOYFP_$6+K&Y3w*O;|LqbN=27S>1oV!4$UP-C4QvZIpbJP zKe0hhvU9zpvB6OAOuHh%B<;=>tE*>>;ixgWyy{O_WfNY(Q}DSX(#3#JF0L%-GTIJI zLqKf}BFMc#LK4WIH&iijD3QR7=Hvtm2Zx&1 z0^#LVw~tp{T^)%-MUIcZw!J<3K_&hBcWuW!;J=VOAYj!GZ)6e?5dkWGQD=Zlrf%o( zSt|q3!WXD#kJjX`(7_(A8ZoYS(kXku^P-FDorS!h7Q|NUE^$;_&z{SroXhAOyfhs? zUG^}z?uUkzRvHena>`*S<6W-E@t3_kx%bn7{{&m1&!;vByn1 zb7V#4_0fkJcD{gn>7;B>Zw|nX`-`WL6J;%5>5C0-!=7dAyd96SinP zK%EN^8Ro~2aj3<800{k}{2o*V-Zqey)>g1Be1OFd*hQ=fiNO0OJNsT+osmHb0hTYH zfDZ)tZwmkI-F5q2v;U>r_Gr##8t~$|$5vLmB0^~)rJ!s822J&j3o`((1e#{a%Z=ox zg-77l9Rw^Tep7(h-yVuy3gbCH{MklbM!-;=&>Kw*Y_OrkcKp+ z$RSJ5)TZ%NYe<6 zPZYENu3g`)Jg#+mVN~(AdyCxHY4fwND)wRRe^yFU+0GHzR!C6;x%j1HU|?HSRaLE1 z&DxFw4c)WN18f#^Qdd801o3WW|!JWKS}o|9y_BOy;t|xbk!t z(>JZ8jEfjO%31TRsxJQ`NzIRFTqSgjEdDP^Gs^B!(s;teBadyK+X(6KEoPAC>iK$f zRIj53N=mx)MoY4*A*ja6+{CA*zjv5_oqIr0(ozmmuKT^il%C$N%}u5XXHd|9zwTSZ zZb@?SqCy{hUKGvwA!d`D?nIB>2weU;SMp{F9wv~KZI(+$ntM5J1xeuK#8@Zz$x+`5(*QRwR1;E%+}3G`YgVH>da}WMWj0C+2d|fEi?#ZzTUZNh{CDuatn*AVdWaQ6D6xZjk1*(EC2Wr zXoychO*;pg4d6ux@+1SCiwTqK2)f2(pNSLLLB<_f`G9u-tVlhKOA_;pIFqnu16J zUlbD{^9G>zNVZ5a5&!_FSAVMN9p>;MzNf#AhWW>=_{ch+dhN~Y0OKrUW2!kd;9x=7 zrw_o@yW4-g5}?v8t*9WHz1Nikl-L~@D2aG~t*!OwLE=GpfK(h{AFT8IuK_Nd%$zm0 z)Uk5Wv!m+wBCz&nJvV-_{4o7K{&}0bF9vcgWL-&l5ax7h-XwgBUTgcX+xYY3ORX|ln+mXCT zNw_p+@B>xK7r2fPM+4Sp=+s~wXlm> z0DBP7$ETYHUN*R{SGM2!&Uyluj|t%6(eUZh?nbiu?QivU5-o2 zlV4P{Q3H%e{#FGUYirk94I~k$33vK$priNESvCbB?%cx`)KUxJkE+r0E)TvMwKPDkAl~lmr8Z!nSG{|Q%2;{vHDGv(a zAO>s-JqB~0LV+Ss%JH|i)I5b;+{2{MKrFf13~>Y&Ejm0IN`))+cQtQx=VCtCt3!ko zl?iOp$7&R6BAY3Bx2GilcH-pV$d(GaO$aJEHyHo-;5Y_zAF=`;`NrY!Glg0IeHIu+CtOJ^}ps?Ou*a0*$5U`>ffmrBty{Apf8>Z*r!}wd3^*nHf^R=SbG z9P27PNq5;NiA0gSMI-t35oh~dOFV#H&W7q?&F4{ z*pujL60>`+eZN(s^avMlYTbSRK|tpQ!Ri27;kW&`P(=3OnOd%wDb4pbR>MVdQc}`+ z_zKvZ`*SrVm~yt#3x~ks@pN}i>z^3tfHZmSHNBd8?CQSO6FqC>J_0(Z6Tqrr>?H6g z))bhh30;3375(!GTv6_g2Eqx{Y^RDxK+m<;4zxqMKv@0$>n&+YCU}U=2W^HXCbB*L0-3e(_*_&_Qx zu#$L$A+HKxZ&_CBz3m^onx$#P(-IQFW3}>}&&Lq+NfP-LE<<`@%h97;8@K6ca(21B ztTC@)bV~4f?ld767jXF@)vLjn&y4UKG4}kz=Nz6{+F}c{y6*g2O;;b$n}P8{^OL%s z-&%f5eo8o{fs|(amS#X3Z(7p_&G3&M@a6}J;PH6mv&SdBB&OMJgRGFlQLzIndy4Qe zO>kG#tuT<^P-&s;n``nc|15uRB?NkK%xc*`3Kei67wa^4{iGBUz8+R$si~=BQg=7< zB*q@|uS%kAD)hd{vJfl*XP;+}3ujt3(+q*H($;8>A9z(YPci^>cmWhi@K_BbJJ7Ww zPO=4O%aSx<*l@gH{dbVbmsvFdxtFhA56M6|uV9Kr?&ySt%KdLi-^(vDIN_Zq>f6o@ z$Ggs6nkih(M=eu&%qt0*2&^Czqa?M8Ir1bH(ozeU)(d2WR0r2!@r*E>=j625w4n}l zM0FvxSaA<(WooH<{7PKjQ0xhY_l}2DBsx5~2=APh%ZJjsx|x6KWo;>YdDhjgO6@r( zbZW09?s0RPdXg^!nLF<1`AmxWUX(d6%-qN9VV8qI4;d|+M3jc|sp^=sZDa-pT&@;M zN*~K&2qz1!@|YDyRXBxYq8in_OgLGTGS7Uc!3P%oDj4Cx^9Qu+KIZ3}f%m}lbHIuZ z1PYMfbb$@oGH@_M&;1H|HLKlGcQ@No_Z5!Fb^`E_1j!u$u&uyQr~(8H;0-7Qmifu7 zQ4Pq8_YFVb$d@DNNDfI!P5lYtxVq$}6>#PQR|((>2g;Y&*x2NO4Jz+N*GVPjR^UN8 zSM>zgb^)i8yG`yOXfU|bz9Hqc09_LTW;GAv^Y>BI245_CF=+g0Sz%SE zO5^AW4GKwuiQ6u-N7*UqO1|$lu%$>{7H}1)wnn*!hwS4sAfNHxz3eViDVR1(G8IN) zjJAtDBM6Y+fPQMeR`|1j`TVM;;`d&jP6b;;1GXy`#}<3Qb9Q&4u)$Hzv+4q*JR*!D zNpd@H30HXR&rB8{&Ii5}<&&lqU46Na!xRL}*au73Jh=US{4Z7Of)zGW;! zRfJK@_zk8w@r`XO@>jrzaC3V;Rs7Bra-XRcC@Nde=25@NQh*%dpW|~r z)haZ$&|~o$Y6Ib&O3438adXT$?+8yqf7CD6ur0lax>mig@^;&8jBej;_Gke|%~!gf zxZX%)&1D{^{N-?IwnQ_TMbT=$H-*uhV?X=@R1@(P@dRRu_aWLVZ_0TBC|v8`-8$G$ z$0VKZbJM=OjNq1L8KaxD(|9-j)}{VXQM0oio%mEV%qX1_mol9)s)SPc18eHp+3fL7 zlM(~B$Z%x$nSRaLXf9PcOgYE<97!4c#CX10S}B-NW;JCXXH0?w{+5?MP_2Yv{2ABW z)e@3q|I81E7&SH|Lh?0chFn^E1x|qY!|&mm(v#G=t^VJcuaBYlnhzZ#I8ErXf03}P zJeg0VFMC|ZIREXE+j#Z{2P}<%$UKjE7uq_)%FJxs<1k9z@UF#zJ9d-KvY)izL8;XT z-|~$m>NdFN*K4&_GOEgI?1W&tXO4KJiD&D4BQDbCB$%f z9~0rgX9N+?l6R1HP&Q-|0`mEA6XOiFmu}orT<`Re%{ZHD83)k;Cq-4s<;HEoo)1q_ z4vuFDaGcpS413fj0T)-RRH($LR3S^JOrIoEw)SBgu}^BL&J<=kxKmljk?l=lGHgF@ z_3vrO{)-X(M54K6xn$uw0BiP)6Af`Jj8NMr2?n;NFzI zq_^clA`mM#{AdC__CWx8&!=Y+!;Xb$&zGmG^KNRG3VgDfLXs+@&|58I6|x@a<_|dP3KG%}2^T3ow5&!_`~BWarEz*ERsZ(mgXMRko=-YRYHYT# z##HsmPF$ul9uFd+M8RwYj1&9rR~60MnG$l>^74(C(iy^E4~w+0LRea@Ri@V>q!X8J zMSAqcZ8UVNJ3n9M(;>e5cf8whJrqA~U~^V_^M{9bpquBVoH+W&;ZF~^1q)U`+Ycmh zgM}kTy7rWCiDGd6`4{+enPwc7({y%}c4#++z!hb!BU%`P+B9_u3vsY}vm>;y%+$9T zJ1IBs)fBMO?=DIs%TVy^J2dugJp?bP73^*nf*|p%D1jeHuC>!LOYiMWz zg1bZyVQ(o#{#NMRpt{dBhn^8WCIN1;_s0_y4_NM>!GdN!ve9eV`<;6INe|^+M1Qan z34PqvJ)Z`R258_=D};qrs;v&r+jN63c8RtnJpZ!Pa+)F2dNaOTS*4B@$b<)Sk<&5LsX|8w7!Jj&9pn0z zl=fTKDx`2M6Yiq`QCNda;6{QfZOK&<gkvsbg~vW#kIO^Pyg9(eEewznKGTfC- ziyY9GiR&EEIV@i?xdy&y|HfX_Ohh!&c-(wPK0eL4+t8Ln_349rB1I?(r))OU1+lL=+@m_bukkDdl zU_gwUaj2!1ZusuQ8#d28IykA$uo?flyD@8`7aSqOXLBfg0}ppN3m)EFG9WaCrj4Rg zs`+?ZaUgDSR7j}H7abIykBBY?N#ZSq>6D!f*?D@ty<4w4-QEww5za^}L{b%)2aMi!Vs}H0J|LDG8 zw14VAJk!1`UCLMMm2Liwn`J&OkM}A7EgSjpF$2LIM1lS=j{vjT<+Ev5zhE0OxSd)uaHmr$rorY z6&Ou>;AwewYcFKzZaSG!(5#SX&qPA;@#J1Y@$h+L-K*d2sq^Z$tjvyaItaMynKTk0 zyYQfsnlFOF-mGHz=$vlB;$)DW=@CtTGW#bVJ!Gs{Y$DJs$aa! z!5aNNa}tbUd32!=d-r$abW=U7m-aF0UwV;6_?L!}<9eox{h5D8{JKQ*zL?EbvOoNE zP4n!ZQ{Vnby41a))c_okx~knI$@C04b2BsBFi-`!hLofoOdOMONEg4MdBEh5_8Iz* zj3P*SfaXd8z8exdgNmY9moJRUpeX^P{}zlPfk8+Z%E5@!^VW3()X-Lq!!hpcQ?^^5 zTkJ|q<>d4PW21sF6Ec%jRWDT%+(hgrQ2#IfM%W^NjCW=XU-4KSV1 zNc79S_-;AAMnP@r|F>J-(NE41{j4OP?ZGrz>4Uo28CFLGWWNXPL@;+ujT!=7m+0Ef7D%%S~4k+oH@q)fT)Yu}`at zImu6Cj)PVAFE%YwhIOUT3FFL3pqC|xewX9vs;nb-@3`{Xny6r>xjvSA)-zG(5g}AY zigpRLXl>I$FiKe^p?KpTQP6jH3gyWEz6tN|VSdWjL;s`h8vz+~V;fp>cd?yZe@1;3 zD>qQa-Zn0@zpf8H-J6>ICr`v$d1o?<07?AzLUJBy!T3;TRFZ;Hs+qQ&5FEAng)Tc%65B9@pcmlY%|k$|4>X?DnWV;-@mCfTna z?ib%(AC%)n3qmYif`xNjkS>Dmm}@?6Gv{a;xHkFy#)NziLXp?Fo1gZ2gFN{^0N>=n z!FdVN`ge|DBjJXXW0W^9aai_sgJ7Y0Bh21yba?bva}`w}CP97#Q6!MKFSdrMDjaO93u5%kqvYM%zBqwURu;)&-I z(G^j?L$&dZc|FT6qx+xoy#tQC!((I4zz!X!+9o3`M8?uQGUfg%ERbt(%VfZ-Iu;xw z5==;MD}&Y9^EN0UTRo{HbNaV~qaZ8k=T0*Q(l_4YGqd{>3aJ{r7!;gY`n(VpkKGm*dbY)hg+7D5+4|IG& zddT3g%Jf$fo{IRr5l7pudEzK{7z7i$2=~D2q|{zHEhC)dpv8?@;7OTu#DavEPs-3Q zk{-HOxPST(LArqn%^w$qy3EfXf>PTvYo5F1uOQ{li0log@G)I4nI^f-FW__S`Iu6agpHjYDy>9b z&Fi>Q``f-a3)T96A|-DGNTttblnOL)hvQMq z=9o-uke#*Ne3~vq>Mm|5wQP6i`f9Pvg-2W2E$S_NN2*`zR@4SFR|QWWH6jat^+nix z{DC+5j-YJ{{r5kZbpg}O+!e=csk%wSHX2>lroVR2vGp?W5oy6$5hK-lij7MEt#XwC#U$q(4we|O8B;et` z2Q3VM0>>`4n{|dB_-~5=@&@1{x12Be8P8%riYUnyU611js*xE$WdN@6fxzT>E-L_Z z(s{7}OlEiSo-6ofy-HXXw zo9##K?8n$LzFBGUnOTEBVHL#ruEdO0MXJLmnsF@jaJ;anERYhs~pi9zUctcKMt7M3n9;0o_*c zB-`wPVt$>JEpP3+AL_N7alM~H(dK8E#_qO$@kUKxkv!VckkeL3A-s{nd+13;tHdY@ zn+AAf8~wb3fa?T3e{RZ~n3xzVKK;BRnJ8Of(k(NW7IT}wqgdOfKC3ra-n08oi^TB- zjH1Z{i>`fCW8x>zys8eva3x6rJqD~=&`H*^1L)IlWjT8ppX;_?5kbH#4*ppazdgVf zkOX$<0J1do{^^-+>@^4U0rZBYm6hnh=_bA(0aJKK?MP*!L+}t?#_dj0UW*c$J*@hpx1A~E|^78aa`H!iBeIVcDK6DOC`P; z?0}CoRmiiiUpnpJpV2h!uTczA%4uUtkP>tVc-HA9iYELwEjbR16Dtww3h}X83Jp^Z zI??*{FwBDLpGrj!&9hV*iRx+kmBsj#N?1qpN1Y-wa_Nxk~5T zoDq#E?w~SD@3*UDeo=^wBfzjy3|5RIh0@_O(9=ey`G^t62-`SW(&Lbw>&D&+ z*7_Y3p8ln-aamPiP58Qb5)#dplJ<{;yL!cCZo zvo8)xuz@ExCo8KyU?zkCh<8e?HZK839hsdv(Cv9jFC%KWU5_eCKr92_?Q{1-9r3I{r)e%z21bRZjW07mg@Pv4%rcOMl|Xuqcxf!^;I;Li>D z3;=4IyZ~ans-~SX1?ty5{$nuM?VgX_CAIl*)f?1TodX6Oasdw-o<+>4dZ3ul!Mswk zl3L2XJkq3ADJ}CdUm}R1B6d>A&m$)(nIy9$wiG<)!?>%ACcuZxGL43Zid=9NU?TXr z^TbOX0*1#voN$Uo90kF6(c!41Ms>HRL;J=O8-^dejasjFouk}ii`!VKOAL zBvx8_Q6phPda* zq0&ae{6}eV&{01_MKEIDT7U70!#^Twu3M~M>3vGdPQ}P&+~6{C`rGj32%B^q^hf5q zB<5FgF)Y{`^4dxQZad%qgF8oNXUiy(<3#dfmPUq|~I+*47qq+fe+M3pnz)6rd@wXta`zDh)c1LxY2AVtci_*kA&Y zEztk%Yys}P)<^AEuRf| zbRIW-^n@;)JOhu<$#8%I$4%{bc4%_2yXUQBnb~8zdjGv__Tp@vx;7CDNegNVSx$&+ zk2rYq4<<%dz%kM*?#6}!=K?RAFloj~V&Lfcn7sLBiAswb9S_u3LOCxC4_ne&o4+88 zU^i&Kk#L*-eG#-mYwRUd{V~lVG>1r)50_K*XbL*49n+tG- z*W+3YyxxP17prDvfAs@71`Nw;^2UuD7W3R8Oz4xk+#rBl%#8)s*-jLI6PK3_#(o|5 zQTsUzXYhhl7UxjZ)Fdh;mG_16dbvaHQT7R|R`H_etTA)8OK8xV`Ft&)Q=9>vR$bj$ zah4O`GCyiq5ckq`3waT~=x3===|ajMESsh4GVJHPZUlcWtw;V54$qtXsyuvmES*Y~ z!SVjg(1WMzSB-%eWHiKma&*()T4M3+*NIJP#h5}IY7bP~xf2~p_YKby;yOTojF&}M zXSv&qD^YGwA+XLsmi)A7pA1=DJ1YL&BtL(wBbvZPtx|XVsOYAW8DnmYgMIGJt2H#! zyu@U-U@lQyG}hASsX`-^>emmpCKdC!a$ioiDJj*a&T0*RLuB__4prkY2^;Sjg|I3Q#(JNf z3yfj2nEt$0xt82*F!8Q=_YTcn@%6{B<#`!w)_;9LH+}bU4di<)$wM$S5wN1zD;v71 zKY@#cbrlG7*XVV1U_cPWcCPwEpbZei^_bo=r5hcugyEWi5pT#}P5WT}?hIP~r%>=& z=SzICZPbPP+zJ+rY#>)!>k+v;cR3XHG08dzRB8M~ujOV{%%1TNpQcOT^O6$3L~B;< zSZ9Jt@;QTD+7}i9T*e4?ThTo=%~zEQE648uoG26D(oq`Ub!QqR`k8q z7DiWm+px<^`>pqu%6Gf@bpr_%YQZsh5r9?DPz$wy@Pdei((^uH_~3fnose3S-gqy6 zH`52nnOFcf%F;OY9@~a(9KFn$N2S+m`&qV?OSlSKMg345SG|Cf^c+p_1-yW=(HCdl zUCw)_ttt3w^dg5&>Etvr%=$|U>5$5e-Rkmio)rPY+S(fM9D1$S>%hI`Tf+28Mo(IR zAy;QYnd-wGFlg(=9&P!o6GC{45VavH-^3Wym{WdSk#9N=gHmjGoI73OCd`Gem8_aM49~3ZUMGY&C_O9QRtL@+x^lU7b z6fPQokw=HE5@ED{>^G5Lr}9s!SXexajP&GS9Ag+m<%$eK7JWCran2>l?nF21@>4K` z2h){htv#2ab_hn3cJDD^pN-OxCB{GyB`X_&NiyjxuZ5fgdJ;J z>ods7JV;nYi~A%;?h<@BXubtm{rwm-&R0fdr^DCZ7*7u8vt-0)QUhW=P;L&#TGD%I z7ZzfZhk#Ivpnt1Yf~zzMmpNLocv5Bs%IHqKLhSA+Tu>`qy8}u3Z2K)3SBoP{_w#ez zdr7cWffQ0rc7XOXm}=PP3N(;=ub05+N8fWC*g<%KFKEwWADGC<$bkGS1;*cmy|x9^ zVlaPCcG3~_M$zcTZe_jZ0uVB9@2J_fJJ1^xJLqM9M%K?#U&M{-zh;g;IhWmlWFxh< zt8t@RYC30r$R1m`pBrRRW9(BdSvTNqyx{gI`AnLC2rRe_$@bP*?Ovf85r zN9WD`-r_C>kzP3NOD>`(;}y>;!sph&T8~AN@$e-Q)8np5z2{|CwF|wPp^YjqXbx9o zL5oDgwfi2!yU>;4NRFfWh=_=&i}wRwQsk9cK_PZLFJT?4|6bWFIgjp7?Jo}@YHY&4 zzm}V@J81bZzCwjO%ivkv1bje1A**WKBBvAHpRHQpUt@(b&qZJl7<2eGalA82&biM+qAaKfvq`}u~@o@!w2k?-F zbq720A8KI~ldL8NtZV#$QYDHAPgIXrOOL(Kn(#At z7tfY#I4dfbMs3ipwQb(?F4d{@gL{HTw@kH~G3*Vpk@^w+Mv*uar?Z8>@E!racTCQG4+wXcW*kME^H@sy2?MLjp@0v%)!THsvb3hofv-B8H0?#>m` z?%$5;c{&2+Z3;AcM-a#`HE*+D);>mKr(C}y7$M~E>dFhbS;Y;4pA!PrH6Y!#{RJG= zYA_@7h=e+!4@^9Qp7tM2NVxiuyMgxLOR|EE!|I) z0)*t8pxaBp_h?*?7Xt)!PcT&o+5w8QTfp7tGOU9^fW942&d-adeyeb|)>c;^gUPxl z;_8ao6h4Y(AOMLtn%{FnVK&0j5?t(otMhsGYSC_*D57xdeDseGej65JroT7(B$HOU z)0Rp@-LT-Ie()ZbOJAk#0d+E~o5x>E?wyZB*dnsl2N8K(GJ?|A)qhX#sD@V31O_cl zKIAP#96>^>WkAksAmw}7*Bu!Uv?_aInK(k$W2WhquT}W``xnJmg)+W1&vEc;dR!#%s=|JbLT#5NG_S z#lhO#j0(X|1wN^^>84^=;GxsvtzoZbNXo{k<-BqYQrvl!q(m3dW~wQr`hEi=5*AH2 zPyEesP&g{@wyv>=k>A_N?)T(O+*~yYV|JBrFcusG$?z@OPDN$AcYT{fZ+s5`e9ocL zfNoYY1*Vn4(Usq%30O^`zr97D)EOXUC!^%=zbz?0{L&SvYx~ReNkN!#7IMDM(XSg@ z2nebB{9$0GrvmO>jmP%Xfi|z$C0s^+&C_@Blueb7 zy&75u!c<11@0n*kB8e_kf06EMxpfU2ud|ysL^c{1JsZ+jE4y=Qw;5YKCf$?l#w7jz z-l9^6T+eU^G^{bi_3=1a4x`8ZlseMwp7Bq@FvI%VKt4*RDPN)(?FBW0M6sYIK32wO ziY|+010*mVJc*Md|2*?jLD_M;l|hZvB6)lt>PG6*BqouwHa{Ry_7yFrz#?Nw=~*V~y5x;=iKOOJ{Chxtfs!tD^nu-f|Hu50rP z8`(W#o)T_Gt^-pzANa*nkL;37tpEPpHgyxOH9t>cT4+0$kRmXsAJ-9CMy%DSpfX19 zAlZ=fz)xm!Lr}4K8khz#CWD$^Gbu8k+83WFR!`jPi^vLkANtwM-p`Barx2G$zw6M2 z2un@#tga{p2?u@(h;Pn#IrN_#S`?2f82wG7`{G3=nl(V@t9}zI#g`9?3LFP7VIwQ0 zCn8b%SFDkeObxNxuQM%as+sc{aR+>{idbU1pd%@e6_RE0(PY;4a8HSqo@g{7%uTWF z7J?4bcSw7iY6*z0gRv4}LAFdJPd~dsvdj{pDtda@P$yvNM9*;c_-MihhEoLe=g7>p zli|omJGyCw)E`QuR1B4L0cPjRvZh|f(UoT8d(p5c0UP1|h-~U6eu_0Z{_L9%bCHA- zjF+pj{7{l?Iz8bBzU%hx99A*Sft_&< z#&nx&!NgCU^dRHERRxvuYqw$Bu&AdLGgYRz5DW6oMy7(ykgQpRhcNRGGvdt(w^?|{8wnK{3L17 zl?eSDj^9?~Df@(Y6yW_ZXQXnqGrt!2`knN!fHp1B{k&$$@6Y^BCqY`t^BFHGS ze*Gv|FTcCoX|KG}y?(hzQ6C|fj}1USGCXi;AENXIo1yU0+G5ooC89$&VyV(QRuXrO zto;0aW=z~BxYb{VF5PGk{3Of6WLnBh^!eOZIgoLdKDzbXrSAP*0SG0D5w4N*NHDbp zkQhw93YN?zY@&a`fUk;GKw?~$2HXVx}LHzKk zhB%#rb}W1q{x{`1gW(HzeYhw`P2?w%VJ8g)ISyWEC>y=3{z5^bquC-#0g<7g;M&xU z$JR6F-f}hJdomjLPC`1Keir24CuK;<0)|H3*Lh%fPlFS;?(_F$sU%8VOOfhq<;(MTTb^~4%1fp zP?XR>YnzQQH||jrb|=xDN1Jc-x2BdQ_bU*W$T!ZfMxFkKRW0t9EihQu;gT z2H_u&kd-hBt~ZBhBU?Id=&$Y`xv@oytN#&nag!JnPI1lj-U}|9?tnk1V3T!(v+NYc z=yM`DHZnv*jZO>OF5*h1IJbN`!xbm9i!E?ZNnvF41UuwLb=GnWl7s);w-~KdItNo{ zN~(oVJ0!pK;9)^#sH(6r@FvFV91UGJf4QRPh-bhsP*LS5?zu&DhtmT_ZowJ>>hD?U z-!R!edNBE7Tv)Dl8eX^bTmsEg32Hgs_~>~?SgFES@o?mZL3d)?PuyF@#cBCCwni-G zI3;{*2%qc|b`X#^*y?DV%TyH3$TT6IJ3rV`L;HQ=Pstd~4|~UrwB*ZsUBem4*S#u_ z7$siNX%{G{{EKw-Itt#%Z)@(Jd4`;`w>YzpV2LacT6M9Hg?3brM17-_d?&)sB?fzj zyF5O5bvi6rjB;(Y-6=baA&f%=9;S>-WFh0L{^(bzCGR2uN8vp-$Rx{{GaYi0&bN(z z|8S7~`JSi~rEMZBu$=+MzU*2y)1)__$wd*U9&EBjCl~{~wUVF|b`gH>c796zE%}wQ z*oIFKrBtyRA4Vqz<+LW;_<^gII9pE2B!acTpg>@vva{6-d-q{>M`19X&mb>rLtn|G zT&W~NWQ}!RNC}k~_0S&|iwyo>I$|>v9|F)c+rO-GT6C+!_{wT#;`=G2b!8xYXu;No zlA=Wcs;OxPzAfHx1(LS4lXPi(dSP^wACQMV+-Y1AOTuCKj|Qxce<_i>75KOuB^j&0 z-2aD{lK;`t%-mk1uB7@FXN>l_;uPg`a@%LL!(<+)FC2+5Gl}1hMpo+6=D2O_hOl%c zPJ0Pw7rN?h%ZR@#ezuir|FlYcy;ih9Ksr*9(*maS83}v-RMe+9dJ^IZ`3kv)f(;r? z62?b8O^V`*vseg^I8;<+x(x4pAarQ_!2_LuccmzYzYmolR09_!VRsfC*RAHqA!;Lf zX-atJlPwxm844bb^>2}95c(*k!#5HtX_Qh@C~O5#NPJxp9rLKfr4fG_;GN!+N@TS9 z^1JFndC*ci>X|gjU+GV1Aq?PY^cyR%CLRM_VKi=hqcZFV*l6PmSa#XbNXD^=YkZXK zezEMrqu4-({hc$a3HOZiLaZ|64&a-H5?MiHIZ$X-Q&1E^M-uSMqtEaf5eMomKC{77 z16Yq!q*YlSmeCq#b^PrLQ{ob)7RimX@7G{MMdS4KKqr2|Z5dB+iTrzrc2gfTQ5q=w ze#Gb!h606G$lWTqZznNj{MmcT$k&;J!0U}O=o85m4#V_7{pfg+DT1nK$u#Bie-9|E z8Rt1%Tv~Y>9`_((KyC)V+6?85Y9JP<$fgn<{%rHaQ7^5}$SU*LUW`eeA{I7p`#;3Pm zrQlZ597Uc)p%0nTlV{A~+E6re7b9gc@znR)k>XtCe-f?P1WKO>XA-qbKJxOhH1B*| zqZm;n7nQOUY*1_{{1AcnBJ|S+cH**M;!AzV3KdPzHCqAb+TYoOTO5BBXk6ZR^Q8LG z(NXF|(7*vxh5r*H`LwVJ-R=>F1G;NMc=gh;x(gN?yv)E|C&5>^)~OajSE&2Q00Z%s zjwMGVk-Dz9|5+jr_KLb5bQ^De+_uGSDIw@^W{Ta;JKf~9B*WEFix3u)L*$z4N2-SG z_3Ai;o~$Vn{D!wH|L(}Ka!J%Qh|!hNdP0)plwPbWWgDd%;Zh0>lTB`19k3j15YT6@ zj_aXJKp7{nkHS$GseF+*SB;&w8u3wX?Q^IdD2KI_wn>x_D98#e=}1RJNKTpXT0T_?u2NR%9ZBns{3>#8lu+vTd}3nZ9f&Tfru?m?mTxar1^?Tw z&L5bJd};5k4X=4C3_lSGqlGC-OJgctMH}VtBgTHe9AW*)Qy0vMAi^qoBma9?h8Z`B ztyD5hT`bh!8drFBdA33~LELCdqsD$|?rk^I_cAym=&xx4}62gjea~s~99? z>8|R_fqFw?OTICxQE#j3+ok+>m29IcZ~r7QypsF2`cYu|LAJS%`GLBK%@3p`3KdFK zX;oWEO$7w+|8 z=y0{~hNdmX7Q*^U?}_D8`yQ$qn?7h66dwuch%Qr6IUjkKOg}H`?{hwotS)h0YE?^w z%f)44Y}C@!;N$Y;QvZL~g>`LV59v-4O|T82B&ElLDwv@e#f=f5Bsy)r0QBhY_lOw_;D z^LvYsx@ofrx-^6gf{`CznrRCTbo;O6^?wgZP~b=d(?2o&4MOi0;I-s8Nc2v!e%H=z z7@2Z$|7Hw-i|fy#{h=UJT12-qWGym zQns5$lpNx`pn$52lcYm-10lQno(46EZaLRWK4Hflq6xX|yE1K!v4!85Zx5z^{WH_( zzO}31z<~c?vk@v&ZWJsY{Or~5D=e-HpC6y8lbLDWjLHG5${!!w@qeR3v_*e?^Xkww z(yxaUjv-4cZH5+3YlvO2BdfD&{%^V{cMjJ0?TzeOxUV5L{JF*j->((cMRj@FV-|ba zSBlGBa*rJQM<_>Wf>znvgTyYG8ka_MjdOF|C3to}JMlxj^v+o!Y3B!DnuBof4jXc3 zUcDU-!P0as5Z2&YcyD};O-8^-QBggyA>_&?(PnS;!qrl zQz-84#odd$bJO#^&$!9|jInq2@;T?)+D(8mbs01TXlhf5MHVt*VDzj4no3G+nOcp< zie-yRKlAUrP&dwm^Mc{0vW@>>&I6BRc9HG*(tJTC0D}NUBYN_b`BZzu;ohG@{+W(b8- z-h_Y4q3UpFL~lbY-)*S8$zhk&t>fNbORJMq$wZOxR>N$4ka}&s{cVG3XBBYq+u9_J zApQ?(3=PzaejNKz{4eW5zQTDG;+>Bc7a*0NB6UjM__r^@@1BVL7LiZjFwaxisxA-7 z3Xv!>F8(i5U&8-sdVgAk7Hw(zk8<$uxme9U9(%11yGUMr&cUFGTxu{O-uX`(gExc+FeQn?)LmknkI z$lS3=Mg;|2*4sWFX)9CKWRtt`?tkTkR%}Dv(2cB7R-DY=B-ryYzse$Pq#QaYLhlrG zvmsKElV4Eg^{W{_b*bk8`^Unmx;(4LpQ|?06!-w+w&1-8XUEjGP07a(0wwxl|f^J!8oM|OkPY*5$(uMTAM|%4(&T|#5px~ ziXGq%+s6C1FZ|puWcInRxxyZl!K;k}DCPjAel}14*9J^ML?kF4CU7a9RiOUuWL9oU z(0Y%`;dL*!#!gAKw)3~e=H|VFCb}WxHv{qH=iyKc&z73-q-TAcK|w2M0(xIigye%B>_x;(%%;T$t^h;*N%T>4e@@ zSidijj2y3|cBz=pO5dM%s&x7@N#VHw;^wHQEz|Rrnjt$N4T*N%kK;ngAr?zz_-Sw> z+=s-s4!}y*ju6dwWaGNok3I7tMCwdVz$%3aI}Ekd?s^Os$xLV+7PTrGz`EJ}`d<k0Nzyxnj3}+~fP()Rts(r`mt)b#lgNH~1P~`*tZ3x7rthIoSG& za<8OPnQTnvBe?Y{x}E#cN`}mJj2bZ*Pnxp$+{*Wwotd~$lOmnTL=>V`zLHWEQ zO|c$4^_g6bE8s$7oVlR~%$m$$4*k~#`4d93`MNjd5HN5G-LN~1OAh5!{)#&Q2NJ3I z#557E@#VLQyFFBG0xz7X`!JrYD$Jzdwf?pKq`@`eIp5B#%bY-pGrJp~9qw$4#~w5+dM?{$B=H(LS| zSwXD{tTL6Mg#t6?pq7->C!dDP)e^!vmDK`?!95?n=C8}F{=N+hm58V}p@E_#3c(_Z zMTJ-Wju|vf2k!+buD1QbFwz4FZf>lZ;DYqOdKCB>L!3H8`^uL-UBrT{0gxrUI-Z%z zKg@dw#6F!kN@aj`OD zoP^5(5V#!k9?nI--btGZUw!fw0LbLHMhD;;E?GVXSvZ`3+@3|y3qg+cW@^;cu8dCg zb>OaW>4Nc74B?<4R&%&dk5G@-K%-++>>tJ<9b_>Ai5m!j?=*p_9pc?FV$1IO9=TM4 z)xj>;pN89R1f1LK1qRstSBSvz;q&)tE{=FExT+jhvzsa%F90hjvxX)Ni8he05TTI$ zhXSuAJXGkJCQMkFcAN8NnpU&KIF7j7N+>#%BdTpAm(x4)A#EXUH|gMH9Rt4tLFiv~ zP8ArH7uggk;_pzAO5~q8no@eM;Mj}*u@dK5w{zT;GR}5mS;2-+c#gOZbbhk3O=zG$i%;CH1-|o|z$Z7L9R%O+K0w5>BDodwA zKc1)30vul*flhMF$tbC9*mBBwl-_+eTrU32U)%uN6Hl9hwXkLrdk=^qDX>Cw zJl={))Pp_$A)~=0x#+(`w|H_EqxQ=g+dXO@E(p}-P-2_vs* z7r=E#-&K&_YdA7gr#!F>)i_G0dT;gJ2D6#_wn5R9NA8uQer~qb{1eps2&(;7;X@ehsk{y-SH*z3A1{ii1h__7SR6Xdn;hZmhm(u>s2r@xcLuD zVH(WF0x*x17>0I9Z2ELiLDC2p_*}mMiK1CxshlH<24vpL-9yY5FRfg28+IcH%C+co zUT@CY@YJ_{%(aYpQVp6}ts1j8;<60hnC?Iepg-k+9lb0I?B~Ad!s(202zWSD)F5=x}lo;lUMBax@t`adrvB5FOjuP;zaD*TjfX69g+R*Oof1>(jHl zMse844xRi)KvZugyvG~gp-()flF%qnFL0$-9oNjUMK3ZAdU(q(~h46VV(T>m&? z?2hY4hPKV8FUHdN{R$vd79iM#kuQ;@LSR)$)2e%0$QO!>%S8)>@`ePYRG!*QQB6@O zd4Bpbj0JT90d{4NpM_7yI$vK4qVE{chBA?wsXCHF&$DzfMI^CwLf>;#MTk**v8zyj zF|8u+Ak65%p#NsHY-hI*qB4Mn*(-fYo4Z)O)!>ee(KXoD|X)}^r@cB8bF~wa00^}$v zjmXne&j4tiu%D}DKb3flw!IiprFAs<`!mxUCra=tX|mCaN)>olU>Ey&{%4NGS$$jl zMol+?5D=FA4CeSQq*;5YbW*hPtAK9^=@IzIIT0F2hM8Qg|I{AD#z{@rTeG+AsdrlW ziXFCpvgF<#uhO$&iROXpZ%`)5aQ7TCwP_j9CsD@y8trBx74G&R;UWi9HGj_v38t8= z!WzYk9A-oM7bf2{uXt+-AW?o05KU|~-jl)MC_E+FS|3fs+g|sFd#Az2^?j!!{p`K& zQq5vH5TwINzT!1e6dLQ({{*|wgx2-`aFKZETh(*5LrWVLU83id{wmcO67-`92ioMahydI~)%7>X zRX0^1`RCK1|IepIXyl!CZa-YqX$R}Dnq#w3n{AP|Ib=!_IDezvN9VHgwleY|G8cO> ztXv!MR2+3t^(N(b&F)=~=NYW_Ya3sWh{7HGTIc&fiMNl<@DoMo=eK>t9u8fxCsHlM z+EduKLWF2!m-Zul9jngqLnyKn=|rMiYzs(TxyI-)QZZ-e>Lto%I;{BTm{418@rWW-&?5+VhzCA22U&Yie- zOa20LSDwRTfL!*TwB*LaUJ1Qj=uy7?7Iakj-C`is!u>y@*7<_VCXSK+aND|tbcKQv z!aRIvGi_NRBXL|j_QqH^+04JdNisL+N6xfwcX_oD?JD{2kB~>0+40AqR$TF9DvPZu zgaYlB=@Q`|l)#ivxJn4$K*3zCygcApN*Kz9`x9$7o}7ohf9thb(rh3$lsqRPC6e(c zskGr;hBV;d^wd$Z({wWC(E!~^C~5KufX^VQq+`tr zVmEKAD&Wj}&vOqvN|G?`Tc=>gTlr1vPT>FX98U0ldA>qK%dcWQfc}qLX66oJ%w|Po zl&7qsXxPUB4nuEh_7h|&u_x+8zJDK&KdW&5=sex6Z^~xI^S8P%kl+CC1yEd1QJ}W9 zwY~FkJ*8ObaxJIY-I#w6`6K&c3Y5jwU(N>$yMTM~6_KYVeVvna9fk3dV4jbhdpf2Y z1Do(97#^+A@{jM69bNC1{h@w6;FEV|=}yQqO8EiO6liE&|y%ud`mM%_qNZ`uU)1V$+ddMZyswHi2twGQlBNSwS> z5C1bCweIP)Q(S6M)OcNVro_1VwsENO$rG|6R0$A$Kwv69(UR{#af7r_mP|S>Bs&R~ zR$-H+Y5NGc!1qaHmme_)V~AC8Sj@9&_qQsGq!ySARtQ;xaAE6Es~uY)dLfTwDouoE zhzrMXm|njXv4HO-*3%98GY3o>*wX+2TTb3P`wL3HuX=EdG(Gsr2f*@!6T8Kqrp~Tz zIy4r>>Uc;i5y)E$P$^nbi&!K$vfFIX%_zBJxT7rE4-Ota$3`Kt3W(g$y7#c}X+9*h5N zd(kClM1zDBXY)A9ocp~UyriAIw{dtuDrAkwEmw~WRJK!0x%?UOKs&D|3JrLyZeFsd z9(_`Kbv8!r28GlZgX2;4u@`NfI;A{F-bbn?g3AKk_BlL|{jou6urek#m(v{29N!$* z93NtcR5V{itU8tk=1(}E1VN^n*e1_O=_o6bxCjAcn~Mx_v1R2+tGHY|_YZUadeesX zG&>zSm-3xcM(1+KtOiRT?Hkxg>ef+*lmQZ@Nuxi6zik6CxZPCC)NFOmv(DWz>REfET{c z<9*(H{2 zPi;O+-dj_ ze9J@l<)wmq&-EP%h;NZbQ4<}>(Zid5w(;2ZjP^9O6#?&$c`U8$?YTZT_)P+gB@EUz zX|qd}JU%Fkg$vAI1bQ&oALC{1#wGI?F4%LxfY={?$MP2=SmpeM_B(1AJ<~;U_z`?| zbwp23dU=m4G>Yxd4J5d1`42iYBu(aabMi5ZM(;^#fKwYrv?Q|L?&E{?0pCT)%isJT zeqiy`mzv+6N8No=C?v`$4gL>%ISvM{-h*tJGac>PDNV@55OPbAM3xhRPm!#`5g5kucw*^3I!i0x&OlG4W4$XO zB<`^TV$WWD_Z@>A{nD`*M3!HH9}4#Z>`}}!Y_w?L&fMelf^-ts-$7NZY8XYSxDMY_ zWFY5b`kLq@*hq4JT3KkYarB`9Z2;H&`;%2OQEQQ02?EYoO~p3&;dcdW(D09Ne*5h^ z#(m*srZtA$X`nq+yAr$f{0m~UwaPv3vavY^%O3Scu-F0B<352F2h<1b zV7Qjxy_Uc7`rnzMET5eTVAz(FZj=%DKvApH zh9gd-RIk=l?!~sH{rk}mvfSl!j^S9VomT-jRldx9qX_Kc;gaF|F}Y9!E@jT)@?;&x z5)S?h$^sNt5}_!rv=L+=_9dB2bM4-7IClD~*g9v;gcauZ$Dez(895Tp*(gm-O++8U zx%^*7m#pWkULViKS4+N{Y)o{dcyZs@9~g|cXL_);e>Eve9s0-UYknhk0p`CqKGT|& zw$91n<43UAk>U%rD%nltyp)^`;}{y<1f_J4W`;8>YJ*)ox5Ebwdv0#iPIk-3&0=lt zY9%$4vGQiF^!;BffvHB`N+8LG3)nIM`g~V=7!mjFN6!)Nr}lbH)h9qfoZHWvJ1ulxPm^qog&%g_Wg#H(ncN8k3VjPpzJy z0PPnVtk`DUmyu1cC$qFZEm2JO+ro4Vv3-lD$I@qG+SGgDlI7_%3Z zvixUW70&!K+bJk?p=*lOl%p@3Et$4K_OvOrcTea-ep5{z7+0FVN=nhyu-l#V)dyI0 z{&52~4*n=~@5SIWt@W1P@q5fthm5@kJn~R7T!rh*kRMhLa3QuCduY9h0)fy;+x!e| zn(`Yiz&%mibQZSWQCv-?xuU5zLUJ!C2QpS z?gwY%pT}2=*XZ_v2cK1uyUu@A@EJ*ecdLxDgC%c z93ndY&H2@86@4cqo;wsS}WPc@bJNROl`!?=XJH4gQ_)AV}}vKPDE6w z#AqDLt>Qft+9&Jj*`Hsi(D(02q;);ko{H?jQgf4?5p3ys*Vs$sN%+X$iM#4-LY8J3 zu60bZ%<);L7DWio_-VsZ#h)Zp?X)q7tAgqvg51!9FOgdDj0xdw;3#L9Vgk*nDtoR9 z2?VG@=qm&+z(|W=;#V@;u&WE*>C(93rNGdcws51@dbvYqhvKL#_u90VCN~O$ zg}wh@H3EFe#llz^b}0h=06LK`$OTz+5c$WoF;!H~I&5()&l9M7Xh2~@{LU=ZD%&K9 zem_oBsmf3?$))_IPqJ=9c7bK%WSHzr%~d@5KidlT+GV9I*_59L*If*a{@9p1cRD2F zmEml8pa8rpuX)%8k#8o57PDF4Sf~1M?HqCALn&0!ntE--AZXa^>BNHP`kBf@W0c8$8o+cWlEg9baqA*wR zQ<<&`_&k-y)C61#)5Q6gIbH3!NUytknL})K1~5O~JCqu{v^ALR9GtaBlYI1Sh9lLi zFV22zij^i{8u_B|Uz|in4*)p6yoK$^GcyxA5<*3WinDjm*3?x&qu~8E>l@);%$u(F zm$-S>JP_>ElP7Qq*>xRjxSi9eeRUX9MX(MDbi65mFP0LjG?O>U$iH6M`TCRcT4z*S zR7PKbCjJw71rYT?FB-GOKaZ>zuP~JCq!{ya_`Q41wD$tLL0ax^#UGoprPE)v&1qls zWU=M-?e z*VZ1|H|q?)XTcmi@Qwlw=7|f^Rqc~A&3&EjDs7&>!m~uNiC`bWH?jz?PERuuAT#5% zw8gxMitOYc<5;r<-px` zKJ(udxKxtQAl2Tax^*(Dk>WWe2V|qg^2TpFUeQ-01M2 ze!5)}hr8Txe;~A|Ht8eIPw(brwtcKal=#pujeCD4=--g--0i+BDf`~Cm_diYgSY_H z>BiWl1G9L7r$(p5BYm zhMdbU{+=p}Z1w3^k8ycV34e(*+kMsYqZg;Ar+F?jS^LP@A}6huNdwt+xkRWy{YzboZ^;@$Y(~fGG-yxXH|8wQyk-Ai&{w zB_1bF-0`jk0Nx%uy{h=#!OTrhFFBm%2>HE83nf#GqT=Nyd`imWCzu6xo47++t*e)# zPY)7~({i$27@zwiL}ac0@jsaW*N`fUEOIlD_n! z?!i-<7TRq7(eO*&8sSkn?(I?({f$^GhY!ZjS=@Vy#q#nfs>7c-wvo$!(ON)-=5z($ zZd#Y$aUA1popWzpsC8R%_(GfI=E)NS1H@P$t#31`S}v*VU$F{6$#yp=N~Vu&T7Uas=r1>)=BSbwv*xz7AMte1D0nbZ=P+aCy^UT!0ufPm6~VyE|SVCzS$iNkGt zyYk6GA5}I&2tT~zjMaO&DvLK+0scE%CL7{>woDhVg zMFom3oLA8vl91ean<9C!M ztqro3`*W4BQ=w$Wx-4NdW~5zHTgk8&HkxgQ@2A>J?uj4>86YdPI4USy+~lx_6xZ}e zoB#I4CQ1^?31d7N_8-67;Q@ksA%S*TTxx>!tiMl{5tjaEDVFWKvd>6EXY5BRRB__* zT(QJL`THXmXG0AadEdNdGtKTVhODiutQtd_@z@#E4MOA6MvselCHfWCZ(lvDp-xyV zjah<{J0Mu3Nd7WtN0kymGW_1A2q%RDV#u13p_-%j`Cva_{&>qzWO4NEmf|$fa8E6U zL$(&LS}<;Jsn_3D%~~C;BLc8U9Kw6N^xZh%W#wG%=4n~x8LWR$WtK|gf}$0u(9r#W z(S|G!Mn-OsknEYH`UfJ0Eo4%}r*$De=a%Xk?h?eKF>1U&!sNMH1O+@`WfJR#>%y$F zvc3f<=H1L(nW5}o72~?(x0jtq{`y66a=Sduqiz)fUN|hpO&deOsXi(ZTM<_S6os}} z5bJ!&AtiUs@0mu!Et2Lz+~{v6>aD)`3?=3{P==a#>P_!tyoVskidO5!i@gqT(3U-B zk!VM%vQXzAttPVNTmm1eIhi57ZD%aM>osH&~INb&3QQx@0|B#g{m7^&^^X4W+NhS^5bcA~W>AS`0Ul||`i_^J) z=a>r~oMN~Fc#XC#x>tm5{7Ur%fj$=YZW#H07CY)nHyQRAGsF3r_a>;rOo0-yPL)Yr z`F*G+$em=i-k4KBWDWj%l2g-=V(wGda7MzK%OV=b##kOU5dP-8YpU&_ zOUUU{*A(XBIDJ)iZO)Auel~Gl>-i4+8&eg*vp>s8I9L#cz}9LdAH1@4rd$Oqr(wr# zDQ7`_O>>B+fg4=qtjsoMKT(Z4L(7nd-#;QQL-;yG#g>c5LY;dcAiVlXV~fX8Arq(o zCHCvuO2&oq z;VZrlMmNwOt$p8^k6>>W*f)ItIN&$sf9P^Zq$^D5GX8f&tZs|u$YOF=WTEAfUWBDh6%@YF zMMhSaF}(t`9|48}Z;-wRs4_z%he)S%*`hPl3L?Y({Xg#!U1FQrvXU7>^skLsB1z4C z0YE2Nt_C?`ZEN_aC?qEh@yyx$4XIlYRyKX}S9(~L>Fp z@j8S;*fPObotNBpR>Rag8U3=sI&K|vzy-Fr1A>bv}4T zmr_ZE^-%XI*xEB3G+t1~^Kotmj74sGl0x$FltZL*fhLcC_qT654$CDl>(aL};0YvH zSsVGQG5a|mG302I!=p#>A zsCZrek0thNc4c`^%+3~l!LY{oM_EWaXcXirl=T7Z z1QeoQE?%{r$k35WMx~Tm$b~nrLdCttxM=A}Skw9h+Mt%lvZwd3m;`Jcrw2ITzK0Lt zjhp9@p>lm{gcxZBBJhfM9%DA6Cc>h9AH;aC{@_qccpp8}%kwFD#D;!qB=hvNNb#+f z9z)|a4P*hCSQvV`&GfS?p4*3R?{{%9c%tG#rHgzXoMIPEeUqB>-%H@(2l!wYJ{)-p zwV3mO#7WICb+s_xulj!VDScx*7ycVRvnN_K*Hczo`^QpLTznT*G^&lqrBwOAm}kWX zu6{#5*BFXe1F!<%zN&@;JdO)KxVAL(y^7q>)q~K3*IZ!=4(h!K!qx#5HY-KxFP%{6 zcPC_u`1ZBhN+swJ1vWb2HWn>r0NTE2I{j~V$iGxTaK(rw@!5Uxp=Wiw-3bBVW7wlu zOj`Oy8afO`U)w{sFSHCj?juw9wo5*JHGHfzKq0pzFLDHG&2HJB2$if4azXQ7c7+B= zqH#M=?SDfDCr_`>EZvKFelnexN1czA6kGvjDaJL*|E`krC`7ue-Qd2;`irlZ zPG(7NOTKHAVT|~@8anhcg(>wj+#V28`!I!;xggPAIJ06TwD3!fhM;|`6f#$( z=p(#W4y$8MywPR`tycZ*`osDa>ueAJVa!qq+1;0HbuR0mFxgCD7BzXf5 zH}1ePT4NaDSr1$cKF~TC;g^rumjfVKf=U}SAGnXlpU=#=j>Pp)y>rAMhOm(}bS`l@ zOnSE_8b!Q^Jh!3v1&4L~?-0LM!9m2ys$jUoXAndVHfcpym%}75dBBtjLNY(CEvzlh z>oF95y>0;jXtlemOl2KG6|D@4Bu(XjRSm%+A1pskk%S9|MAa@+t;Ijrp~%+Vn-tt2 zBBZe*sw0^`a6|7n2)TvKC4!Atf`7#yvt?_QlEsRkNAB<{MrhG6*VAcEYt?qf$gjV5iw;9g*LxQg5o`nokDec;SHR{!hBwxG`UK2NiAy6zQik5L=Qu>Cov zjSnMj5~g_47J`aNlV=#LBkw_l%+K|v8h!NXTmFLG>c#gDP;}a_ZL{0&|_P*n;>RC?#KGx^-^F$QRsUY2+e+!IpLp;Hl1!P;RpVkYQ*h!*LLzuhbVep&Su z_%9maV+)4nM8%fZL87%GjI_quR0HF$56^0$MDiY94tXnF;O^;>zaFpuvWozF-E*FG z_i0b&0;(Bs${#^EsF2Nd_H+{M_N@i&&Om_W z9r3O6oVyG>_P9dNa5R8DN$VN4TY;3Dd7M!j?|5VdtvAq-5(rr0sp#UVC&6{@r!cZxQzJ(};U(1*&X9n|K9^?No=^cF zz$Vo8-^Z3UqW5|ko+Uuv}spmPnJerC_ulE9?jWP04@UG)PILVVf#2^aE({0)x_p}?~t0&r{ zq$|smVZB4-X!RNUo(gw@c}*y?4R5&D+E@8wtwvEo*vZClg|nNsk%@q~aUPhLUbh1( zIEZvZ4Ldm8*s7m?-3UKgasKJNftU3xgjtE3EUZPbJBTex3NAb}Qm zP1@iEZ(Xe&93_%ZmIrH#>%(&KWe%axo~7Of>74NpDcRb-5;gUGGDhT_r>J*Zv4o>E zgZ%FyY{?PgB7fb8CT<-+?P03ld_4+CM`sp`1lV5lh1wMhePqgzZ^c8 zoUWPkZulJpXq7pkIq7MCPG9MDRl!PPu*@@w8aLuk$7Yg~JM%X^d`U>f7SPp=UBZ?zs?RX8n7pP3 z&Eo$!Z2470t&SVeloSKYZ@1lEC9(fu0hHX9MMp$O z1~;x#XY$HFjuxhB~5S*in}HIP|CTKA<&AvhKabz$!dO%3W3&S1K1=0XR&`W~m_zOvo)}JH%5i zPx-}I{E~GiT$)vKaan3^`|8rxOT|4=O{urKhI(XK)9U^jnPjlr_gFCHxyxF5No^i_ zau9{A^oiEU`EHbRknok>S>u2K;DPBkiK_oCb0nd!AWv0<;4A#9DEK5&wlMswr8#e5 z&k07yY_P7HS|!goA8U2DCiCWEF$*j@N=c$IHp##Wy72h#?v$V^z<3t{)Sz*9Ic;MQ z2515~GbAoKM6iVRqP_9m4D53{e5P0a-A24$>trX27zcy@Ql+u}-h>R}j{l0zXmW9% zqq)hUDo_38Bj+c6E5<)axSacDMhmY6b35(ggYUjCVoULV+eeMbfvobfs6DRyutiL3 zop;5|G4XXU0Dpz-lPJvomVxjL$h!tP%3||l7@pS7O2eB1b>P28Q`3uwK!6iE$1KIL zg?GFtc-8aF0i~QK58aEYwY`NjM~`CJN%zv@G?+NzbFPK*Y#MQdDhy*|fD8q@<`Ldq z$$^87`(2a3K%2eR`+%rUmgk}H|80SluZpXo%#1j>5%5!dT!ucV9K?C=qxCfg`0Wa!(6+;A? zg5mfWycjxtn`_K|yGgN8v1s->7+x4&h+c@ih~Qn_7{8sv*2kzfZqA}wjC8bx^zt?o z;hOE3!2JV5U~qEBplWaln-QfBTf-`zvD^8lvb*J7p!FuwHxL6E75%0v*N5KB0aV1i zdau)398ts=R*M9`Re&c^go{d@-e^NENX;!v$*akT@bkP(uknpM<7_2-Aqd)M7UEiH%5GOaN_tjY6$ zTcwN+nRHQ6IgWwv)D)7|=C|Y(Ns$CZb&D*o4 zkz3L{9kO4{ei(QeWbmvSYKjj=#?#P#k5~%!sB)B6mD39oR%ic8#W#n0ZGE#hQjJnZ z2?ZB=@vfn%HK}Hi<16bba+o<|(O!G*E3`Q~t6Hwkm%!z{v-=10p5Z~xkv`H&nMXW_ zmz0eK+XOL^Z%3tdC3`OltOGNOVD$xr+q*(0_|$Z zAB7Zk5>xu~gx|sa^%(q4f#O+Z)Ou>K#=Ndh_sfO0RG;uULT*iSb8|^aNkhlLL~Bc( zZPun`Sub8>VQ;cIGhEc5*lkYa$&JNH3ovdVy)9|iWU8lS6G_t&w3+wkb|aeLV7+#; zo@0Z^$`0KAl)9aB-Ppv}6o!}YW)tT%?pSfu!h72@+zf%~twvr?vIoexf9iE0)Ax_0JRGJwIsVIh))?V%t+yV>0k|4ZsY+2WJ7d^BZDte$A4) zMes3NA4iHi5&tfKjfB-l`D0Q-jw|bz0COTI;+Q2YQiLMci-qx2XaD|6?0_h zadqT#cuDk3xu9Qy^Y{5w!GOcaxw=1l1RdUCJ&+46i* z78(Bn@-{IUd~=aea|Gvh-a1blU}5yQMiliVTze_k&m4r6k(}p6{x`wK(F?0wYcI1Y z)AsV;p)4N=p695TldTisYOVX(!!_);SfQhNDxc+!Le~#ry1e!VnLj+&PD_4F82HbZ zo(TpLCdsTcz%IPygala$|ePDt3 zAfrMKX&jzk<;xO-(2u=g6G2$$S}X2BvWzjE^gH6*`!UOnpTE{l!~TMc6HC;Y{8;TF zQbs0<8sR8=nKd%rioFdBZxcI+5T!~*F&?qKU@dH@WP(4xgT70?O_mo}gP+)7d(bls zih}R{!NMAP7LV$>0eKEYRKmjEQlsh+Ty%gGd6L+^cO5EzM#tjg!J3I5EDHZCoS(sl z-f;BWY&;SRw9_#Dr|L#^Z@7w%Ac|xlu$$y<^|&1s(<%U5MtD6~)|}E=dfw$$ zKiFq(qumWxDo|3J&r;5ug<||*i#RHqogb%a*n8$b&3L%d8#G-vy-o{c@x(5?T-V(W z=bc9qlw`Eb@&bdn{;jj0+W2eudh`2lsgD$Lk7x3;J56#9nHN?fTN-q9=y{OpBb4cZ z{Cm4;GY;T%In*$uh-`DF619!6>U3-{t@e*nhklo>^?!Xnr$k|C9O3!81Nc1!+;DPN zY&5Mz(woQ%zxYzd;6cnRY!5Csc23`=8|=Co%>-po z0XubDDmK!l$RpzYOtSkZfE&p!ztc(&p&9u|LY44OP?>=cnG(PxQZ_({%wr2w3r9lk zy-f@ScN{+QkO|da##GUa(KXHFf#etdO}CLW11fC%?tSJro2IpGoLcg8depoSCBL+@ z7GpeLyMaR(x(IhN`@a?|U1|#!)Rb2Rt%T z*@7nBU|2|;pv-kq<-ZXK)0>B~8G?qt>}Mxso{q zFzk%x;TwOTv3q1>R%GOQlowC8^hNeye2&j?n}26^Ht4JlJOyP~1z)Ipz{Y<8KnIDK zAt+f_P3ni5DRZ~GjK~Rh+o%VgR@Uy|j7rKFie%@uwK|U|ad5k`IUD2s(h^N zsp6^iMjviO@5)ndk$69hBAG?u$_^a)b~vr5gGRR~TsX;hw4BY$uP+tJJ!U_xk%0+F zQZP{X%l^>)NlfIy*E4G!l8Z zPWSm?$Z$q57jzy8Kg{&YX#bd#$Q@bBq|bZvoeQ`VkB3+)8XmZfKrFB#a&>$ru?($$ z`7+e$_ON+#PKhpn^AczvBLazR%)TlT)&^>1#R(DwBks86o*E+j_m-C))D2RK97r-0|_>^u0b+ z@XB^XQwc*cspcJqmu6dngF)859n^90Kin?7X?D znSByzj`ozr6tp?jauOb=j2ugwEMToCd<>xEP_jZW#<`3-}F!jPQ%!raEg4UMm;vuet zy~+-ghWpE;&)Ztp=Nxyx-O2qpMtQB(iD6wd%hm2t&A0)$GkYYDfV++A%9zg&OyAru zasoIyS^tV0i%$}}f->ltxvHrk+iK(p-Ld9n|38|(DX`KmST>s2wr$(lv29LlO){}< z+t$RkolI&`%|FQeyEe+?ni_PQ+j6f*A+4*PAg&LF8`>}#mZ?30~ zL}aP*@|`;=_N|HAs^Qb|-IY@3RKkHQ$O1;ai7w*l@vptOE|-bih2q?j1lxTlPoF(C~j0}pj-zuRwV{xj0AE|gRo zOxZk%PFpbe5PH4+Qg+b7Zs9XyBzjwf6h$Xahs2z~)de_=Wq#EC(8wa=iseSd*l1Qr z97b(T(Vw}Q0@6?IvfpJP3%KqKa8wruoMz+s{;kq@n`tV;BC;^5JAK*ml1#RpCozJ( zp63|^R1Z>)ztjX86xTrjSi>m>Cc`4)zNZgyRNv4U?LZs{Tncc#4%6FpGr8m(X7Wm` zlKgj^_}B+mt3)Z}P*-0Ez(wkJpU^tAl{Jrnm_Qifb%c`Zq08CB)A}X$T_Uv0j)=M) z+Ok)r=<}FR5+{`kqSJ##*|NB;0Vf>)@-U{j^LX3&z_axC;fY%ec^f}#CuW7{ z>sXJQ0ZprmYD%3P{4fd&8+CiMPUsNMO&!^vxXvH6E?C3}6tX&hlU*+XywBcJ%{^12 zGVc-VuqM84GC->4^Kxd|~g`&i8V`7r~^!xRxn8|$cd3|%C z&t?tgzp?F^QXFiSh)n+@n3!a>rek;I3#Nnn>ha%|ZK8U$gY)rOV0d?v*3TCIP8X#}Dk8Id2gv<`U$zLms zBYmYqCLSJqlOZN71a^mfh}rK)3@(R!xaAqb=l0Y?dF_F+q zCcP7;jOf*G)aR7O<{VD}r-a^M!+&H6n+u|wbo380FBseYyn4 z(aj&LBD^Cx1hErQg0z91#MHmHQA>yx`AzO}5OOIC>+Wqg zA=&$;Ftf)|L^-v2b0q84nt0g;YbE8!t5?xIkPH6e^8MVzl>$I_4mF~Tz=wCXh%!Jgtlu1Q(5 zlyA_0ZYIk2x@k#O$VU#(Vlej(4UZee;KFQFJ;3-u{}g}bcqjlsmYZucOZZA(;Fdyu zLkGenm2$%`DdTI{oksBlBZ&daZrWKxXi3s-Y8;d;UrZJHJ4~7m#i0EGfcxDlMl@va z_kz3IUQ+K(e`rb^nFEPMKWbetmI@vkTe>uhnB1js!Zl>i1V} zL~mCiP z;B31kLqCSUJalQro72~S69;h|(z4A3MvinA^ZH1cAAS@$WE$>~Drdw?5l^RQ#d!_} ztNmS(-fRCsDA)ImNYT$^4ecr+O0i7~ga1E|jVO8xgT2->c{Q<$4D|!C_B5Fc45~NC zQe!+IQ2}rorsQ0`Si-s#y@|I#RT~Yt%ZcAX=~8a^p#&tMy0d8(%EVB9QHDewJE9c; zjh@glWn)UgbF}Bo>SUCIc;OQnCn*fJ2Hdw#bUWi#T~8Nqx!j+Ljm|(nPeK%J0H#ZNn?Qytb_8x;>GcS&pmpT?>wX#QmmW)S|NmGQ z=lJumE{vXra8h+Xb)vcAGYmgTR6M22+{L+3#QzSTDt~5tX1X-8KMlX6IYLa3|7Wz< z`)!nv!CcqCR{Kpb+@r_h-xE~J-{(%I-knQ}3O;XO*rOBpenK?M_i@Y>9*PO#M~EUqc?PqR^%>O8&WvY(tT!eLDo`G<0i1(}}|H6~X5y z0p!rP>;gkN5+HMYi;>YpEY3hymTT7g%);iluN){y8uzi2+Lbg7gzJB6L}JU7YD|WI z#ch2i#q!)f{h>2g5|RMU3{Ns+OHjvpETWG957NC;NX9J`jqDe8Yz6rErf|C$U2cy` zpqM)V#UK%EohV-p?r{ReNKP)3mfQ*is3mC_d@2T7q=X*pyk~hl#HVtV!K!DPZ6ubU zwng&y;7MzllAU_*tFeurkJpKJZn)9p2!wFvwi!`hWt70R62U9z#Az zPUZP^cFG06#9dkNBBXZ!79djRoWue@XpRtZv`562a)ZLXcT1vaf5_emb|?WQ&8NkP zdp|Is`PAR+r3NJOw|yjFEKSO$cgU7hooe~7@3sRVeJ(V}s*fGm(_|oT3jZ+GbH6;@ zY+-mal#$0nw_ zJLWN>Ce$aj&gcEf&dQ4Ccacm;>2N`;EXBNVq>~6a*%e{B+FLFF5JVY<9lJB+`Mfb+?ikl<7&xA53=DNJCP$KUeC}dm~`pvhP6-wb24IVqh zvUbn^&u*pK_uCFGrvOGnh<^c$_3S4B%&mt~cDorU_`KokEiY32Bk?1l4ComAq*9FD z&TEG22I7Jy!|QF;g28%sMgtBi`iK;odO86qjFh=FdW(cgB1pOb5+{-dBzjtJ7S|4n2o$+?6!gE zaqd4R{-0_)JL~&?jn>N?>&3(1b-1koJb2Gd6Wui~u|y`|v5FvzF$;*5Sy@PS;G9aJ zIvG@3j$&9o2-_WXxBKFLepbhn39~?HYfY}yEnibtlF|<~NLyN(o$f&F_H1WEZ{`NJ zR@3rlG8?f7;l7Xr1_OBrLiPZ=e>`(ttE&6vYHW5MaL0{#<66+X8POn*k(Hrj7FTKcx?2#M%%(;2Zi_ndR0FmYdwh~Ev8U7{`iUcomq8_Hi^V*b@-f4 z{bJj*;AnG0ps!?`wtt+OXlcCA?**AXW@#X0Udd;F5s;`HOC;$0ag%WM^#GTeEEzKn5{LtsvVC!yH>mkH zOBrGd3T;m}g>l4rM9SO z2kZ~xw<0OL0le%-#q$4fh1qGU)=JIC$W%xX8;4UWFS3;5kfL8jtYHlT|9)z^ez+2# z+qqU3WX`}qzaRa$gfwMVO3-Qthu33A^bnO4cDj(e<6Y_a2ON;ITtn3Kdm)Gv*;{}6_4zIgm80NS5%Xq%HvKI`AP8uM98HnY?2fR z@Z;s&@gFU1mO#4(Fbjebs>^7S_f8LF@+qBak}qEYX5rI~Ws?cggH3+8a2AdXM0~1b z4+L5q914zFi7lL4W~P004om0#S9EaLwY>*+X7z4t-gT#H2?lu;zjjW$`+g|+h;p#= zlHe|XZMmaJFa8rA@=2MW5+-E_NkG~AeX#9^`Ab9~F&`i(RPb_NwFy4gp-rG3`Ddv+ zX|*9J_-*A|!_tclcZ?VvtvEkfQm;z59>A|gf@JlIP5M?&&J)25MZu^Un z0Nl&Thr9${PbKvDPyOm?yjJdJnc-VdFM{Q0fV+2pt)VfM~N4oq~NvP7XLQWv+&{1nB zx&56FMe$K~XGfeI#uS`CB(+lZ?N9K%9)0qNfGYjG3P@j7{<5Jva^>{83uXAe zfme)K{f%0wHB5J$$Kxc5QHwA0SR*=QG>S0f*c}NGprZC<_kUi1ttFDX5q<3KHY~Ja ze-;0-&#N?bNy^R2K`~ zx91;%auV4jugMqe!pehYcuTH_^NXkJq>bbNdF{Fzn_N1ny}0^i(tuEIRkYK=kaChN zk_LlYK{^>pKMv`E^qe%g<6AbWWbte~e&!$E`4WV8r?bG#6L5~o#WrJO)9xajxwseU zt=ai#<#;xLuP&j9wYc z7iypVW&cZnZ5+c-%Nog=Mq8qbIcGwvd%jjDS6sO^GdY6{B$Fy&*FgrJhP&7#nky}; zE4{Mvd>yhvm0+IQ4xGGEAc@2uXC-G-Mh}#t!Dug}5gLKlP&`b~4Ttt&NLGJPXxK3E;@U8`<1`uJi1ri@ zE*Cf#wtI|Oft3&)g#Sq0V|ln)uif?qtZLlHH)j!YP-ab#72_tybr`m<_e6#RiAO@8 zkzB0QzJz#Ey)yUHV7LO-r*d!V-vVG3ktF|xc7w3ez@2iQ#3Y-fdn0}V6FD&$+Tz9m ze8y<9mBLmjW3W=a>h9HBFi!|%C8)3(Mha=koT4?$q}?k(R)pS+sgjXcbZ%r>K&uG@ zgdW`IKD`yjf^dmYpq#UDNZDYI@bulc`UTAy+!#R$rPigX9SE}XjTcu|&KrRoO^nlP zp-^=ypAjrHN={hB3}t{yFjV~jC+4pvMXJQU6EaM&Xj8;G+J?h$uCjMCrDX1CnXd0` zX%SQb(@MR(RxGKoZk|fc&j!sygG^wIU3^{j}I_jMWuKr z&Y1^Aqr6CUet$ScjR&|b>Z#|*Sc69jTC9%npN8Toyw9g~OwifC>B@dT_6ohtarA!g z;?afKt<42dOD0oIAe#l?ClKRy)Sotu;v!`=Ti#L-iLTLHuVpT0Mb3FuK9TY-;Inc( zXH-qj+Q#!0{ejHB^Ng0`DuA_+%1Tk;swi%k?la~_MI1CIG~7t>TXFo8fF~>QBX91&7FHh3;-h zSRicYwaR8#0^w?7?9?nA4G&Krg4re{Xj=OfBzc+)ENMXh)7nq2!l?@u!a>!Uc)QhS z9F^JXU$$o62sMf9B4=PBf~1Xq;L9evhYLt*v%T(kFM#4vXpEdvmG*UIRVX$q>{2R7qtH$FZnuqQ}es^-H{*a0`Vn#zp9B@$MOr$~f1YOz} z{PROiMq7<)ZLUS=;lq3vBuvE0KVtr0e~}zf~mZh){_zSlIuJ zEFD}xVM2_0a*4&th%cL@`A^NVwbF{@hF4;FDXF#q6_)zXCC*`RB|OckQ}knxjs1a{ zlG6ieCl9g066DBX6!*yJ<69En!2Po)Yu)5Q2o&P}w_({jSGh(YE(ClA>2%|#x zavMCyO;YVa?IFNXD+))LH14ciY+Ni3X7=WUUZ0Peg5TaN`|wdSLVks*W(wHjN4HR94$Y{=GYbi&!xu3y=RKc%g%Qh9iok2Sd~R zUOCbqbOlrkUEQ&lNR@Xq)=`EvSr&RrPH>XJZ$I4th}IWko9`GE-wC3}`3MLOf@j)P zArZfpy6hLc^%t$66s$!9?d4SV{G}vGb1Sf>SMGgrVs)EwAx3B8Ie*a31jIOn8w1Cu z0Ks=kh-m0Z37*3gs-2~+X&z}jKkRn=o8nh=0#^j6^}B9}+b z3KEvlH7RqWi+n89WxDPc8#;&#?~I4&yVEE808TDa&OixiX&pB^)3CCw>`UXV?zlKb ztX(#8WSZzA!)lz6%vxM*&q^BP<}m5D70z;f<9&4h3XXPASB5TsfJkrVlOnqM*TqnA zE?huGfnL?qu<%n%;CTUcuYUeE9xX8)aSlwdILVFDT zo~-c6Pe>>bVy-?>%i6Z6D(Q0PMB4B9s@5weP^`bHig`vL)!)5xwtbsqRAEvrK~>Wrd&Fg@3|+S)+Q&K1ww#?GANQKx zFN1JGAA3}+8Gdq^529j&6QTulJ&UxhoBuWInt>#ZsoP_pNuXb(`%522;l--s^9*T(IE1rIw0c76dDN3FR+r*-B+^19| zqpC`vb4ZQ0JISJ)?~C1kpn%D-Gt(i&u!L631lUKB%bbxmnsB^#7J3u zy+y2wy|oD8E9;C+^c=H7OKx}m2ZRJUdl~4WB`8QfFsm;G-@*O|LEy&c0pnA7uIZ_N zPaiL%M^hO-!6#&Z8syJ#M6^KjDa)SMBP`%<=JwFgKaac{+pEyT;N@x})O=T%%uphx zZSIr};m&}fRL%lhud2t`Xw$yoad5*FA+Kx>*SnbtU`#j;$i#6;ik=^6PpNg|&$i}G z;bVmo595Xa++sF3vHZj}kXXPBK5gE3&CJzd|93oo{`;DmQ|VTZKaa$b^as-Tp)J7X zjoRVlH^6_vJ%tn)*;d)Jgg9OwG0?Z25oO@IQMe)=GyjeX^dA(14ndvd zz9V}3tSH_ch1_a@&+{k8A8oHD$X#h|A zNA8aBByZUU_yluDTMkZh?f6}_>z7~FT^(hy_54blL;$Qy_!Gm%y&U#KY`3~Sw<9r1 z33okMANk(=6u;H&(V7}NqA znF6$M?f1pD0-I}|bF7Q#P-7j`aBVoq@xb&bc<^AjDvP-T5(wv}3F1zUT-Adn_Q597 z_+b7~)U}47|CwGMfc)Qt@dQ^d{bt=RdYN{yd6j@DSR6Flf;5oteMS4*VLBO>FEv!= zB)v#2nhlxa4de`3HIS!#NVvN+x#>@#d88pV7*+S&#! z8uUUZs!!M=bIf7Ba=ysjbxwVulN+ufHEj{D@#Mgil=Z}*qKJSZp(9DUe~lh92YraJFFZrj?Xe)A&a-gI zUtD#NAC*P$UV10q59h4^+nRZp<&bd5-5Fo{lvkmB}Ac%C3KG80J6 zK|4M|3u?aqP+brgNz%0W&UpEJa(&usqzg_g?T!REy3o!RuCXg%su z?ZbU7)PzmS%8}(X}Wq&q> zgUH7D$J68aXqJMSt?D6$M_awpP)3LfPx!k2_(JE7*36t2ycqGU=u>A%fozAjm zF^2z>I3%jmQ9$ciXvA0&#S97u4RO#&${%|`aU6MK7}?ibra3)1*=73O^Pn1aZaRXi z726};sym@?kTx9JHI%H;d18p@Oi>^v2=;%9hvn5Ct^~B?v+J29s=!6X&Q^K+N_;t2 z3X@N$*hTJyo#LcNTwI{Xkr##HRcwk9V+pQvwY7XgfM&X^r83RF@`(2`Ec7$p^6yZ9 zW5qg)PsfTDG`>`lv$3W`wNxZSA6Nr`L)gNeJDxKB~VgK-V$3y-1^v5?|$Kc64J*3!(rk^?+C zkPA~OpqGp+tC1VhR>LAJ9!pC|jqdjm95ziO*-sBi?~l9ImbbF$alGnExo@a4&=_rI zO;pj)?p~s6LsV|6RE%C850{kp;Z4jZ9`>tn80$~bDjX=r$1tM2wVslubPA7E$XE0j zyWtTH6t!n+vfgngX?8z@uC9Xr3SH;AQZ0J!eittC`xaPOxotgZHk_gD} zB=wB|j!@6^H*$zM6yu1WU6leR@ISxa(nEjZ4ZVGQyymc3d~xRa zG3R~%Tv0&&yh-v?hScl(!4FP2WbagN1QyEbf>dXB<^e+a<+RlG?4$ipXHn0y!sWbX z|0pYEEm^FX{Gi}AIWdmzdOZLT6fWpITWKZa%SiFmf1KXH(=P~n!gy3J0x76q4Ccyh zOzlPedcsiDxyXL?@ihcb;>^u!=em%gnpx%zZ6@?m=Be(8vVNbqS8{Yxx&r)lEIKw7OO7jt|aVgj5#;y_p!U2?GwWJYP98ZSh8jbA@?jYGvsN^h|qgv^zGEwUiW zlg&uXA%L}a1L!5hS-CWcBTb)vRED`|lG|yT@ea?uVm=dV1r;Q&JfBV zQUh5oJ6#KUn6LT;A$T<8`CHj)9m<$?uTkAX3juIh}{;+t5+waW+qXa|E^33ecQrl^L z_ow1`=V_bis7b!&*Lls;G#8(uK*^Lf!{^fcg!AJ)vS|6l0q16o&XO_l6 z9WtO+R|nZsw5<2?Kdb!I{?Sl;;?vzqh{oq2GYpj>2uGqA_u<6fnBCEvBUtKt?+i#@ z3$SFRorGh3dIOXKZaw{+E_R1dj3SHP;Cd>+5#JhZE5poiC&fa)MEizHOVNGWcVu~Muxp28)xdgn{L-o3? zAIus)4Z(2$5bN#@zaOdGw_i^h%)ZaxYh|n^hQu0a9>w^Ak$C~NnAlRTONx1M9z^0z z*}tCx)7sEXAjO`m|BB9u_lvv3ghftYcl>MftRa*}AmDvCDVJeDXv~yQM2r`MPAycH z`{5En2N>5A$jDlIk#n(~QNn4`gkhUcdfaCtb$L;B%#z4WiYKJ0RB=0unQ(IF| zK=tVRE}#~y?bgsQ6$-zv^M1xoHcdx1EteJoJnrpFhbHgF2L?C;f}TROQRg5Qp*#YR zTb_EN-}{?oS?PJ+9_G+!y%Ms+qJkwT%m7QjDumGyr`w zeT<|Su8UZPjOGI7nC!s5d#2*CEeFg<=hJnTf9t&wd!4%{seg(pPs+^FZd*feou-MmrXF zeVwtS&AG6db#c3JY!6Hb4)sg;b=SkihM(&@;gQ(X7Ov0(E7l@{(hjZ0Jjs#Ilvg^D z_ij~ZX|B-G?J?8GK_z~I&v}i0oRIHL&pR&tIX{V@?ZzVj$z!`!zcuUCy{A`)j+DPJ zII9K>$@+ph{G>9kRzVVxgx2wM)rh3&AB~NMO24=Rj)0kKnq%Fn_v17Wbxmbag}szF z&jEkR-6tazoJhFRuju8EE*&n}FOeg|ST7_%I=f6^uNsYDu!AJMQr0}mJ#Gli#vSLek=HK^K9^H1_+?Y_uyG&I37 zJ|@27MyBt=&qQgj3?!+Fo1l(g(rd$;!`}WLME7n-P+zBmJ6q2;z;p;+uDlrf)g zc=|RM*TRfMhU$-i?3jpL22(FLAt`W;GW)L6{^2+I&#Z^3c_;a<3ZV}?;m4uBs^Ka@ z5JYY?PkH8U|B}veVu7)ee?e7n&@k|feq3TWgp!CA#(M7looBAHntG+CIn3vZt>96Z zovcz4DUL?0RHO>zvogj_=vJrTl9p8xwO1J*?B7r9eT@?&)>}9!jjl}o|1a!{UjYB{ zNPZfn8LzYOW3}o7kK-~Vf92k3~X`` zb=$4Do;nd3PxlbUz^b;j{W^5=*lt!$!JMS7QZ79)`(Aw@ zd(b2IsT?n`xSX1r8V(%~TO4Iq5s(mK>Y}oj(zn{Y=BaP(Ng_r8uiE6!;!U!D1~kCY z6UN&l|2S#G-p*^QzxE{u%JjZ#g$Nvhh$T_BI?G{uwku~1)HB0x-{U<%ViH&8 zfncS3qTy@V$=)sdKDce?9(HP8uH&yeeIdT%@_P5kLmxIJIV9X4Ncb}iC0yW=LyY>` z)^;b2`{q1PG%!f@$H&JKmD7{>!Ng~uAF&~UQ4OGZiLiI^U265!enngvayxK}b1=8k z%w%^>%v+kmf3E8l|2L{jEVcAk3{}-%^p&rR&r=&u$mCGB1|Y#Yr@^Nti=#4Z@@uve z`E)&C7#$(7l`0gT2^h=4B-30EMA4eQL%-wYV@K_cS{Lf~hC?Hg-s}cB5xl%~opQFh z(Lb3YHiH1wgsMw5n^4E)NX_h;dmK(W4F;?(uvUDxTC{ak(;4@!78Z&YW#kPR3}WsK zVxEZ_@O09`T)?;|;o&OmmV^3ltnmnoSDqU5C>f<>VA$@;SdM~Rc71H-ea;@{!SMcz zz@jfq%F`<0yq~E!zRs-NUxoIc2nA=pnV+<_f2{^`bO2MdB~ZE&^87yU9J@GjPX!rJ zy=(3R5UjTO240_Ujw2`9pNvCuxIz#Ker8PTt2C^7L-Tl|8zq5Jg&W>mWs2xJtBc!= z52dad@0deKz|HFKPnVJjUyw%9Kkpx&JgD3J2`+`_M{eWkuPl=4p zSIdtD*r?6K{}G9o2L~Dc3ijI*k>>xr0IlY446PXE(-WW|l&A>xb};aexCD~Om&RA- zUu_5Q3)eMM@J84P;>oL;##DWfe-A26BObI&thnzXy4~z^o!I=*z_4?(g#2`Esvz(` z*W!h7v=FowO67CeEc7xbN?KYplv83Ux!$H|WdHJi_Ar4(w z>_G+ZXyghZS?KH2`0m1bCZ46Yh3*~--$Jv9{blYb_W)vc;FEWzr7ocYgzQ2{tB!X( z(`5#=r;V(qce-;)JoND)~qeSZB25RZaH zL%=c#M-~glrX5l$+yhop)iW~~D|+{xIBc9PWu_T4cCH0V+?g&18LFw?yEZ3`P}?#v zG*V_pEe@!{jZr3+O=X(nNBNlGDwu9Or=;#lvnwQy`8mKpPj$|(&K zMq(P;W{+>Rv5yXtYjI_T8suo>Y9Zj7aYkZ!xaX0YY=%Ns-m$cshA}w&LbpW!MzcXl zjI>R4>*yN_(R9A8iqO8*RHz4NVDAQNzj*Yw1bH7O4YzCl4aflNfcB_Y;(OntZk4O}yNk8PET8Wo6G*lDPgY-2FWDQj zw$6+-==!KjPxDxc3Q4}q@6X+Gi;MjQHxUgMVM56Vr;Q%b@Exyhg`@5%CfWAY`%>-H z*AY|_?1>ob)nuDceaFYY_oXX2t|R_?Wk}_DTDn5@Exw|ce{VU0Mwem){cdn#n#pGC zZ4~W!ALr3b5+0^LUgHk$y>xZM;8@Zvk(Kp_?TF`$3Oz}$F7!BEj(ph6)p}->N4Y^P zGadI5@xC#(D9|^H&jud~SQCQsGK)r~$x0`@uN(&s$|zhUIonwK;3;Boo}M_lrg>oj zX~W#6zu+gWt;U%xHMBpq7hgJ(_Qs#UnMfpp|Fo$x?6oBp!>L)Rkx7fO{#vc*m)>hV z66fktsDks*L(*rvx_m|Xxg=YkeB<-<$qXMWOq4VKS4eh}sCOAgR#?eV6(T!+0@eO< zmue5Mx*-8250BhK#>%aAX}*VUFK>~X3UppgY!MDY*E^a2k(89{B!Zz6)IR<96U&+r z86MuH)dHu(`e8I)tJlE@m1a@`0g^FOGUMnXS*#mLb&q!Mh=Y>=nRrr>m&_Sam zgnZKBU^lG5MJ3=cl| zC#wZ35k65(Q)a>)ydS5A>_eHz9I6V#d_pMv-t!v&{GLsHdTMsx>8|SjT>AlM(DQyJ zhQ}piv{NcCHX3*R&c4)AQ)A_->P9eihLD>0%M3^b`f-kaI0!}SK#BITrnZynjFJ}s znkBfiKC&0xIB2t>Q1HlJoc`slIk4H02Emotd|^G+p#;t3jr$dFmht{IeEl`y&km)8xI#ghXZrf`Z|G;gVnKCP8IM#q!LQKW~Ul6|(yK z3J5Ib;5OgX9V*NneQyA3x?Mga2%};w4LvpTTOLWmApik&UB2}4)G<)o82kY;F|eeo z-XO?Bn&bF`_!>yVKzdLT;@}aa{xFhxab%E8^=hb_qV-RZ?bqf!pSyFRS~3-d>J|fv zq+2Z6K1OqpW?_bezuV0PNGTJE=f;9VU0JWEQ8V5zo!?VE!C3y*PyBA5yL~k6z==Ad z(r(XhUPuDolb4^T6d*=Rfj_)-bfHd#qm?8?b#nVXZBf6n%rH_%z2h^=@uW0n%ujsIL= z)?s*^*7QC+D|1H#^;()**7wRqiUc`NgeR$D zHUvE(v;%{AtdWaj+@as@^D$HUqyAQ#e1?4afAbloc}|P%R(&5M?U{-V%CTbQLBNya z3MW&M613N7Eagfd0zIb>VDITfHm|17V|#nX11Mq=P7eHTK5e-dG|p?EUooGR7OU&q zU+WC5@G3l>yl8`*A9f53Vpw~S%K3qT%^pq*rTQwln37pj-izQ+>hfj!tL)ZyrTVpY z{B;73MXbj#s7uFHp%&~!jPQ({7R-E&27xYZ}l~2Ak$R34V zvBXoL9Drtk^Fk>D@MhI_>t}mfpMgF`JSjHmWi!0~{}<}lA=WU;abMacFtN;Vsk;tW zI(8@vbdWq&Rj2bf4*%dF`6-1QqA#!L{Ie3$;$^(KEYAjlDx?xXlnW0kaU9y*Xwg$k z#CbXb&bN-#11}43!Gp-Zf;U7Ut0(!sv)~}f7$E%GABcd^+1ZynjeM=RvTX9o0tSbj5|@Zb$Pn}Vn266Ht{1$OC3D&sFy(EuI#?WW1>%pa z#AW{a`b7=IAbE3*NMcBoXrm~kIa)-Rj^kYxY#IGyTdL!m0*sy$)0#dHp=ECHUsw7; z5u$DBR1+b#jHGyuYJb9GnV&iBJRhlq*69AdaOdL+S$a#TPn^YQn)hV_GoIU$^RnTz z*Q;iw6G#f?FnT*XBwQBzB|WVRUS(E)*di z9m7QN&~&d9n2kjYlN(2iRcLMc!AEgG~Mn{TE=}!btZn zt$KNfYjlUi86|4MfdYAxglU^rXxrO)x?gLr_xILgAOK}g418utt%4uTY~ktJsIOBz z#8B|$>uYlf`K>f|4|BuZL$T*oLTl__10Fd-_8aZE9(b{&xmGQS7|ye_<6#j~sq8_g z022ve+y`}TcbCEHxaAz+_x`0RIjZynm0c1zm8Iem%|uESt)Z;>7Y#EG*Z)(LL*9f~M5%nG9%Q2;kekzP?ic zDV%8B)%+i_p;!kr9CGQ4Li`jj4WE6o7$%UBajvxE(o05SMC2tCrUDA87Nute2p$n} zt0T|NWBvEav2s-adHt)ydJr(c@hic(!3EdTic{r3n-;;F!>YV5jdvGaue`Oz$Ei}r z$rg>Av)Fdm=(>{T&>WlnAbzRsnfuENpdyI2jky#{2Ioyr%z|4Hhadpj>XK7D!V#c99U>vZrH zgIA?I0;FT35?6X0eJsf8<}tYF<;T``1N^t{rfs^zu=bWS?Kdq(%`K>QGV9;tRWlM_?Vu`f~Lu6ZJ;5f zZi%457PY00o>XLj)EH(GGnEV;nuOl#`tO_{w$P7rq_KeAx2`h@8(hH<(+{IjG!X9! z{hix7d<0qlQiNoeDU9?cckQ?orr(cM!wE8$h{5lZU||V` zOAFdiqk=_^`ORUsQfGP-F|wSP?>^V@Ln^=HxS5f_vkQkqx){q+7~Le>_+f5!QpO1W zomi~RbxwRva@Dc>Zb0!TRjdC4Ke+3QC+v4;%5FJ6tyG#gW81rpuH%zM`tJsfZIAoc zo2jGpNXyf(HU35#xc2fPPftz*_ZX^GDi3FbL95<%KL?<2X>2Eww;ITSPMB^-prT%)+GW6D*A@1u*8cT8U0a}&}O zqFjzXb}m(raHx8WnE_s#j)8E7HuI3u1}yc(F@8rUdbrUX5n;Ec&1rFT^#l!K-YEcm zpx44KQOAdw?-T8Jk0Q2v7p^wcbbY3d_kj<-i2J-PfzNm8Ekmw##>+79B6j2aJi#WlYzpW5w)H`zz@;3J3aMUh9BhxD z>C(0%G05NsYe7x}@vqx56E8>b59IW)P02Y6`@3+=s|61Fnyd zzE2Ti*;(<}s|m+y`0(+ItD%G&-k*~?^&D=Pt$)?UVMU|n8|}>TM&BNUkcuKPI6W$V zqX!GDV9}4iWfa(pX8FC!WntaG0K#aK{1axxX8nbbkp9XVW_!Ymuj56k@QgG5$6v2C zn7&i>z0+z(+x7W1J_eBBNHa zvavrmRcS09cdVxD2F?g!1!teoMUXCIHPi6}%53#Fim;F0@&dub`g5=uIPgOCqBCjA zmXLG79ycAr^VU(+MWBR~8d=xh$-=iVG!Qnp?qxtDoK~3ZEV_SilJDb%YLNc`I{s3f zDLiFbgOMd%yS2Hxn&F=6@_YV)uPD*h+t4DvI`tjerir?uO)X6qp&I!WsTbnlkXgv~ znelSNc`mz8J(%(|*nre7DWwz{IqiF*pt8qThtJv97w;Ywzfts0qF`@|IhtbKpkTsn z0D!?X#)|k6;8E5GYxR4cH4uC>nGd_ytif|TWbd*asr%IR3Ai!ey2Ou8jFc+p%X zBZN2k*t>1Le~}1HgnIu@`Q86*i>@EIqhz#)TM|=AvIj|v>8Ne0wB?>Jh|rFEva^KB zJ~MjL_#(&-%-Ys^O2vg-HkK_E#(U6q5N8T9rMIaci0ROHB5ZydO0PA~Nh$6SyTJys!#@X|g z025rjPlNWsX7SeIfaKSA+;UGWaOACeF&?ocOQKn!sKRBXO=2K7FTv5KVa0NRzZezS z?o)Hkppf6{l-)|rr|&8@WO_E3JKr?S7nPNo(p_dxy7DX z2I0G<%~BsyZf!A_-W;ImoguP6`An-Aftw+Fj+?J%jF%`pGRd%Dww#24?x_0ArG9d# zfdOkjxTfMKmC#%E`m6V{0I%yW?e-=m*KYG|SKhhHeYL3N_UvfV&p+(`Rlo73tEoWnqqYcp81FnFZO}h+irC@>&a+*vJm0X44BQ4Iv6zYicyPm7H4b1^y2d zx2V_o;OS-u-bATO#(&|=1R+bYNU6#Cozo>LNLhWLimm9Oge=mtrG=r#ag6jghFVz{Y$s@0T_{RCe0JWr)Gbd5}9I2)v>7W_uPxb>`&yE#W6YCW^5mLk$2#{ zJOgf<2|%LPRLAu1z6Fp>d3EsNQK!**BZn3sP* zMDQP5vNsn(+U9=k@5r@s1)AV@eD9Ov7Y<^OhL1IIh5a_Kf*s1nUU9B$yb1G#LY|7s z0wV~HOoogMC&a%`A_cx1G8RGz2pp`LSN{Ac0=qBb`3;kX0OWDTGt(h_)^8RYyYG8A z#rAgn&EvsjkCPN4s~9}m%D>nAgb-rVLEwR)T;;iZU0AK@Mo8XiO(&-w-TWtP@Sz0ww&izCKEt5RLh7c;Dc%q-x_~q( z@Bg{cA}9q9p!ffTn8~rxagUIoXwWjD>VOKtWsO?MeziwIbo%GcVvv_H9}r{>-RSx z&r;{q<0(lLfL+9JCY!8)vP72n%7?uTZ3Hp3qFXjX(M%v_o!7j{b=>NKBH0XuxVSzP zy^hhvj;ZSy7M0#$)&CStbBz-!{5%Q%0J-E4nXipE&Ou2Ob&`-!4dR=uD7*y~CNfps z%Wn>j!4o0)lCZ0!lX7GUtPq(XrG8IC=g$K-?-wJ?zR+y=?VN6R$M}5q6{&o!r?zbt znjhK0tQq?@g5u1s#JD1$t1d&~*W*WA)!DgnQFF0I64Se}6#9->6DR%8g;e#n7|F3S zTO>FW)a38PRt;6I;XI=PK~^lPN(+u9-Mj2tuJ=Qg)bV=k)`Y8EI*@u=zXy?hk3{?j zolK-gCMSG78kimJJ`pHx2QKypMhrBCEl$E3wfz>OX(=?94vHVE(<6kf zidf?zQCT?Y3_%gW^K#qlgm$sQ_YGKBxvf2aYL({llwgNTmil1LZ24|{QE@@hCL590 zW_!T?MC0?zQSJSn`#>t*SjT+2cQH5&PZthw6o@Yc#$0ZfHol_Sz~jU^2kMc>%w4;g$&n;@A-MH%~l&3-L}zM^~$E$&P}q;BaVQXkdgP*c50s*>K>r zME6JtD>W7`b;JY~S*wuPS)it1rWN2qULZqJEIyb~A$rMSp%Ox_6dKBjh(emYkK?#H z7zuWFOutVa-^7U;#T!I1`PwKNLdQQP#So|c1?kdOMk>D_DeSTyz4lFXxI+P0 z2^d-5V181Iiq(-eFy23LBPd%BwF|a>Y~#@z(w}|jutfj8YG~bRb22x8E&T1NBEcAz zGdKwl3MvPRpfW^5)A}wB$|=TwKm*F8cw710#jm^EFD$9XqeDRtgsmp_(<)FSn8;D6 zEW!t`IoZ+}=O&v|Z{F*~B}eo>dTR1>zL7w|;EGLdOZr&Rn5eDpHqiUVG^n)uzucox zJNOIK)H}P1hpw;cEHS)Y4GuYr|5d5I&$B*M)t}Pm=73)(8>zR$D1<30Gv1L_zmyPj zp&6en*(0%o>vyiOWb?N4c7BYv_cUyAxwHQ|#iP0%{M%D_ zzfwd}qU`J&Rt8vY`yZXgC)Ok)0kx-*-SLDfo+%Gmhb2mrQ7n2-A)K%gWiOa5s3|zK zz4zcmI?ru~i`Ttn}FVhzIUZ{HF4P2rjo6E;2yR>;J zlzMarymOe;EG(CSG)y9Ziszhpo2uz{POwizw`A&)3_MNJvc@@L#MM+ir9cL%@ z(8q*mZn&BA9JCV}M}(Z6wO#;D^_Zg(;jZuaWqG(!dyne zkru`k9Gwsb3~?mmGt(1{5>coz(zDzw9XS(=ir_HtXvH6JX1jSEEPeTJ%O`U&??yTP z(tG#G*k5n`At6E6$Wb~HNoG5Q*HvJTZHsfFm7j+rE ze~zpn>n%h5BzN&Po;)(U@RfITlXy=&iHAWcc$jmUPk%mZM5VM;g7=% z9n**}l-4Y#H*Kzl01qZz3O4~fc0E`R$g8elqyV>t#bPeURU8T_-yJsY2>Yw6}17(T?8!Pa=opvN}dn{$uhvtfE z#a2IIOyMr*dx6+o>MxpO>U&9Cd)LUPbVG`C-iW{Vr4sRY_7P?9!ktER4^=HQ#f>9W z3<{4{uKpo}p#;9ZmlbTx+wR*yO&Y-DP&M2SfF}UOEYcmbnTkSrCx+xl1jTZpv%F1heTydgw9ogEwr2O z?`5{o?3T@UQC0)1;w`E!8f#Jm$A@nprk_t#yg7O7o)_&)n)8?pU||W>8Ki&N`F252 zw$AC@0L>t1j6RnOL?D-heVf40hb!~f}a*&*b= z_=i35&Cu891IQDFr{j zt!G5%LW=C3KRPZ&FK%*`7g;PXnaz^d zVCUNDHEnR5vo%@&01p0WYxsx_%#uQC1}*5?)w;+E++zJ-O}NHYq6iY4n&$ z@XNA`4mt^YMr@D~*rY-?Qp{uAd9FHwx&OmpVP-S9D4LE{Z?15B7?27Cl^2y(dy zmP;xs5`mau)t!Jl1kgAHZp%{MX_{&|Ieh+==Tq0#wyn_>S5=As zMAt%E>hz0?2=OQsm>jsgJnIa&HUVf&<@sLrhtt6*%l0-C$B1I-+U*CW(&E?B;HSLs zJns+@z34!WPi|tUa5v)qA1v%xF^{;&eRWsfA%{~~Lka%wbj(+0uO-8ebBID-!Ea9s zA{_thNz|Bi)*9-Y%uTHqhRan6IF|n0okYAH)jvCzv62fr_yzp+GM$@|dddL`5Z^fMHhdlIG5k|tm8DY2`?RL@8+tETx3H}7wkVt37Q7gV)$`&S zfF@s~FCyFx0YwNV8sJ8Q#r5=>k9L|$XLi(zO+8w3P2A||50GmT{xQK~;Qi0D-=WIN zbDZA}jg^RS@7W7L zqXMct*O7^#O29{;!K=`-N^Hj{^yA>rCqvaYoe}bTXIDzD=hw78cRL_AUeJ^G68SaS z3j_DbyB#4==i*zcF*~q62a%baf-|X=Ra9rA{8GO&wSD(6cT^=ldU08}AHil95DW}Z zwmb|@K-KGM#k_qP9wt7xwV0{#&{njv8yr9rcAw%5jkXES97%jzl&o4=+4>r5(a>y;np;-gA%k__1$U zgCD3#l4ZQ>zO2)WPIP4#zNB5m%tab4&Ty z;}07!rh{09#J;6qS-^)BLnO8hem9xs%zw_2C$5*0cOOY-bxuI6 z_wQ|%kVC&eC~h<&&q5Mp1;0lPzMlK?Gx^!KDgx{EU%S7w1;Ow{Xzm$V9_q7Oa7<^X z+A!WrB@Zm#9#p?bt_L?eF~~G;gG}Kz{w8iDo)2-bQ(E)U;^DjXn1GBhQ?a-!j*8JG z%=U(J`QH4wVa5+^)ON;6VC7rC_|d#Ao7U_vjTWUo zcayxfhQbA(1jr;d_+6D9lozRfNL)MG$wDcz{%O4g`mURHsQa31{X)1PM1i=k|0s&{ zCYvSPCA_-`Ile}v=nV1L3BPhMb)3nk<_uD5;mCb-i?`1F*?BUKSiC)Sw71tdPNhb| z$k!7fYi(p7c>{4S3oOq%1z=yX6jfM@wfTL<;eG091?-8l(;jN`M!ImV;zT=*lFC?H zL;fyh72^9&FDV^BZ%WBUD&Yizj&==!jL82X056+iv=u3>LX9pzDt7Gu7 zQoHi6nE0qm+kMi_d;Z>EZ_c&H+@fykLr;}2XJ~s?%oGWHj;w4=IawG5P@g%1?m71 zj^dlTeUcLoo;!o-GnAUGU-JY-reKK9mHV87Zy$Or@CwAgoUcoWN5NXL?_24Qe%F*{odsw20dKXxJW&V+Yi7(d<;|Hg z+Eh|D!kP8iTp!{dNy@q!yQ|N~8mIr2%EKYC29;|@38*TOIHM*j?g4no92b6R1>U6Q zsVSAamDKLxon}-J~#qY&uf15S*t2E5j znU_=xZAepJ=@AcFOD=9tc9Nr`y8f*Qd@gcTexSwGzbqj9yOB_@K)}OUti=>xzyBIX zJ3?HGy?u72+W*4i!q0See~%dTZB!>Ypb;XwXT`;tIYG@5W4l-uG!QU_g$4O*hCMbb z>)kEyIt^7pFAkqS`5m(_;OCTXXDN<@eO?DKLNF*)@Iy52;8tsebWzE(iyPei$ul|O($2}pwE|g*aE-Bv6s=t*KF-$)C;To_8 zy!Nx$3v@Kf&b__Y<$sKFUZu2N!}=mVU6<)5DzG!`dtp(qK|}*{!npzx!qI^wuDeA} zZNIMBlFaNRvx>w_)L932c^XlZN-5XKI8L%xIr&*I$zEy{{^Ho)dI zrvi$cih)*qxOgt3bpJcx{6416-3asa<6O=;_0nk?{ZtZW+*s+!&g+GfTK)01+kR!$ z@G>Ag%w^9kgYZNs`vrgkYa|ngq2Qwy5{i|>i>pAP402h;gDD8Oj;L?``aB znf-bybp!o8V@bPRBo?zIjpai$NYWEswJ4?oR4}NST(J(o$OpDOw{@GE0X_vGm@6DX zqDtXcR2FnEl^*T3qNDWZ@f*%m<6ZK zB=L{5A6t!y{$ur5Osiw*Hso0ZWkR8+@J zSNhr`s2XcW!utRyK_^qTGbc?_z{|dpB7xdS(rxs%+vj|>&Gt3;zoE>Uq8Fnkl`z$pZMQ5r#(K$EH`3_P;%O#TFKO3IS?Ty-TlRYgp>@@mqsw6n;uKbYNt z(@Pr#dfi;LTI?QvYewOAl%<*!4cK`icsc0%(I-&=0Y1mg>-9wWO;_n#oxt!5HpCj# z@3*R&*{ed|g=uA?0{J}_YtTL}*Ck6h6@+0b#tIO42u=g^CNz(WVrNOMg)+nL>u zlT)5T>>lUDSl{p3AuO`ic&uzpIWX9q3}C#XLL;=(()#N7FzyFhs@J$>lj=l7Eu7$q z74YFXQdlVFuv>%5urM^y6<17Dow0mlqC)me@~o$#qeI9+XkvRt2>jH!0tmj$uFS5% zI=q{I+KmY}?$9PgbZ(VnCc7r}Cwl@PvGqps$$Sw%f|(qby93*-hA)L5X27B1le4Ka zB4fAdy&#L%wGh1-Y*)dQ%U;gZVL}5DlV8$JH&Mt}TqIG;^xeuRLfFrB7jgWM#`4=V z)d=b>p1PrMgF!Q-bps^!j|eQabg?xxj%0Wph2R95VTXAJs_HxuQvVk8H(vS|FzM0X zGN#Hcy+^33)o8c1^!V|}4H8y6J7Uq1?e9g#JTl%S-FMkC+<8@g{%|1Q)AQH(Ll5>P z#Fv3K@-y89Pd&7QQF_^%xc)V9|5-#if=MXXg++g8Iu(Q*d zOVM|2l(TMNac#kF82_E9+hP;imeB5ZGx+7n!h_-aith*!ufI+VXFako3iGrpV`U}M z>;$-vo#f5D%?|ZvzkcL}bT7BzM!J|vIRRz8{XzI5ujy@wJ>O5&I1#e$;KsE*J9Fcq zFHb8!vjKKr8x?Bg5H_Mp$E9}+;h*k~>!>IqW)+#TPeHn=g4l}=oof*T(vag@ga0pl z&JuSK9jG#^LXw*x@R|R5D|(PO33JfhI!RD9@@VhBRT=BsT21?SM(cSQQLV{UwDje; z7-NikmkF;llkie0G~?XWCpq(`}D!@BR?}N?`sP=vY;D>eNeqNoCYop zMk%VciFkSv+X#!c6kq6fmoRI})77ty(60=o?KAVs+=>3mFDI4sT@80~^Nil52Ca{U zh8KA!46mTe{3`NsTM_zy3$QRxizCe?zGHA%nM%0tm3o^4=9h-QCILxVEOwGeL98SA z0(Q2JTTbWA;L-&pQB{@o4f%D8*cE}sI=3;>8+6_}W9RU3I$glH-Wqz7xvhOAkRGw)`Dh??XAl0! z>mRnYL{c22Oc9!|^*P?zY4U!bWI!cg`^@b$`oGkKffp-{GSYA;G!_!G4=3KElPX7B zU+0~EHR(tnbLq-PlQK?=iV9mq8A3B5|A(^(ZUN>}{%FUsrAQr0dU9Iua6&^yt@n9F zre_j5y}{-+NS>bq#xSIhK}U#eqxf#ZjQ49I30>)HINH<^Hv_B7!&!4I*zz!bu#~UQ z0|h1xNV&G)8j&)L{N*2BX}bIRm1|Fc(-ey5=I8R(d$S9PC0XLAIWau4?t>V!(=?pL z*X)9xx4%P=Ouu0XR`y6sU5=pe#NYJ9Q*3DnLt@*#kqX22@YWxA@Y%Jo>+8q+RL+$| zDY6D?>1^cOWo?5X>x#PGpZX#yPezQo2zhq=#`*XC`8$?`zX|>Mk`R>yg|3Io8hSkk zXZU>P$PGeYb)Ln=oENai#AXs?EPky0>)!4<|Bsn_DCLGu8j1C_+H2FpCi3RzrJQ^6G#c?gm~|Nbxwn|lmb z2O7^iM5Yd3lqTut_jHC4>h`Bv3$&iA=#5yM^k4xa+h;|rmr6YVBFb-%o84XM{Oj}D zzZ{5dAp&6173EMck^vZ3IUqnTX;hh!*DWG||2y+-z*Se~G&tv8{ z?UT{sSg_226nO{FbyFXReiRJcA1@*YJE%~!+efE;a-9KMiS`KlT&MuBdp{jhz zig4Rwy>IHXSSV~>#1{ypxhzJ3mH%_9RQ(@4ZM%D(uq6}SZQuyrZ=%Y3888@O6kbG? zc!XZ__tOhD>$KX3a=P#QgP02hcAnx%mB8*bNOMJ!v7kvl91624qAnhBU0@{UZ1op$ z$AGi??$6m_7$n4492AgU!Ab+a0~)45v!&nm!{O)0FO5&9Z|!tzc3KlW0a2wy1nLm9 z@wLIFiNtJAXYv_*TXHurbftYqZ;}}olkmIs=?d(O0(wW9{=%Si_cDRG4*Iyf@dCDA z7NCk!MgrAcx9T@?@S$qfSom{YByI5CZ<=GP-Z6*ES?*A?#w>Qvpy4Qh<#*aV^kmMQ z`xsv!{OQRprQ?&VOO(v+P@=-k*lsdhMOeV~S7_J&-J|Kl==y~P5kFX1?TWK$5JF)x zNkvS{MOO^P2R*Eq4L<|{E&SP0)WD4+VYcT0J@$P>_a>$h1#c=8e5 z#(Q+P@o z)g9saLDdC3FNq}GQlNveL1c|1S!@%l5^Zgbl(c@s`iB9HId&hhl3(apg)rEV(}P9` z@JUzK;VhZvQoa&BM7`5-H&sAGj{yg6#`9r<~tNJS8g(< zH~%7ymd#D!Rj6bWc%n_vxu5k1qdEc4f1JvH7C`@vw(bZAboEyd+=LDh$iVX(N{@e1 z*eHaL0#C?Ok|tYjzFTtrh?29gT%C6b%e$Q@HLv9QdsoVzNaBUd@B0v&mlvLZnlt*Z zyp?J<4ZI>kokeTed(&F?8J|&`hLTNbps+ApiF)L!X~}dT5L6 zqt<-clCK%!qhPH82zW>~Nf?Vf4qYdWr$uM|@Mfi6#axsf;~1dmjVO?=B7iG-B=<*w zf7OYL?Ged4kr^w6IJErjTg5I=;$wq5xp011YezdWqa}W0)pZ?wnwmG&aetuD^cE@> zi?N~Drj`p7{yUH9_5OT7ViEp)Mw6gn3PP5O6rA&u{42l#k7_An!Hhe^p^yu5jAYb7 z)lpfJm5SE>%%0?hdYR>txT_lVja&>-yG}^kM~!?xb2^pUqUR{eP3yM|-$A2NmaQx; zqU@xQfj2(%Yc*m*S#E8%w|5j?SzTS66K(&>Vzt(!ih`m=qQUPC|AWeOOlp!Kq-9|< z3uFuiXayITe^2qxOY4sZAz&p0HSz<0gLOPDf$ z?B^uts_Bo+6#C2|*a9Ddv3f~T&ZVqA1rMZoY)q&~#7PlYE15iE>*BPwTF4sANRkMd zIWaNe+&=WA6o#VQtherkio(65@o-7YIPr5(U{Cw^m*WiE7j)!wc zO6rgBciU%W4gJ8MJ=JNrE22!Cf7E_C^HuXXgKMJPVx)Z!^=a#Q-HxN5&H-1|1GmfH zznz>lA;Tuq#&hDy!4yVmcnLBV@&HLN$2*CanD^uZ}t3_wD5v&af*eB{&IF)5Cmh zUrhD^%ghtvy(Y5T&m%{lU1f#WnAc2aXD=99GLoI{ZdL-JHz_EE_P3RV>31AFxE$ot zZ98;J`uen&y~2?c(b&GsZrk$WiFwAC{bH>Xci#v0R|1lk@#{^W8KW0;4kaGCz1g+v z!t%=Z6Zu42uH+?RE6#+!o}>EDY8NSu)+*0^tl!4?s0w$Vq|i(5q*63^N|P=| zjP!&c#+ECg=TKRw7|v)o9|gc3u1x_AWfi=FS}$lKFJbJj5pQPBKBrquj~FgksX&0*4!ZN$SI6sk&W8CtuC7Ym}2E|Fh z?YC^k(to9YBL7+%NE!U;+_BW5Iy9&Eu8DcYzVRmUf6j{y6!QDqTy~LS5EyKDhXC}JqizC^j;f~p4uJ5iuMiQEyYnZK^#;zlzr`x3=z5v3A_$Dp!jR@^2__sruqnb!LwQi4;Q&8u?owREsH zl0VQ=;G483+sZ2xL+ongHtTz(gTp)dad1gh_y zqiR*YsN1%HI|uoEc$zMvX_y75j(&Nt&9>xjwESz6A)Piyp3@`H;$B?lG;}J;#Re3`dQ+F5xraf z>Spgxoj7MqU7f^~!QMsha~}c{%*-n;fs=LJ1^%KsTuT6R|P1YQquqFcxe`gAJ0x;RZmGkJAtsZnl3i| zsn3)2EA=*dyfDZ6lYwjIzlw>QIPX#3)FKoslhEv! zd`KHp%5SH7d!={X9PNZ<+HeH=9L5*&e^lGDGy;C}ajfkz$x-Fcx>O`d(1ehM4?+0* zx?RlrSO!K^8>+?zl}|=qJ_PW{hvePt$t)@V*nX- ziY9Ttjn~8xN1_a@0Cp5#Tu%4RQD}U33j(X#UvXM8T3Sbvfp0NPL&b>pG(UQ6tu()V zQOcsE$f_@)+ir-b6{S-0S(YPhxW$!odHCesS0elKsI|=x9eF#aWO>`WY3T0>E;|A8P3Ix9xY8L1$Z8ZU? z;|(W0VDR4G!r{0!4Oy4BQUX>KHSwU>)3xy<9Z`FP%)d(>%^+Z!k1TrFxvD_&^_7p71H=9R(lm6h6! zi1*cBp~cM5&3QskW?f-b@i~TB2A0%OTG*E~)d)n^c86O8brB+M7BG&Ij`jgo-iN^ zkI8|6-Fp1Qn!2!oONI*oCTM`<^A+@YxxS}c%f}Z<69XJ>L?fRhb)Wg6z~DIXmzCF^ zh55B5b*AS%&2h%d=;@D=ec9c~B=F*e&h6jd6-!#AB7 z2(z};(&IVe<)3`!0m+UPzuF(C-07w6Yp^vUFO*GsE zdXk|N(>xH##cmUwHUL2RvGY|8NIbBmJmFP`I-?H{%jmBLb*Xh+^!yei+JREskcDYg zhtY4v31tKZC`tk~i5I{5T4)SeWrk8QAA*uPewX_Y<7(qsZQQ>|7XqW{d~YWM+$7pJ zv=ipwfbYbpbAZfY2(Ql!Dkp=51k}EM7*Tf1&#_dmo_QntlL(>`Cqm|s@6AG6)B&J$ zky&M?!%c$vHlgCmQaUIZFUi6QXU|~DBajp>(1U^`qL71=qJS9aP)Zas3Ez8n8FI3H zoF1tYFZ|!bvMHQ}lA#E`hi66a+L5kFa9kzuKdi7@>k#N0n6Ic9yngr`bivH{H~p}r z!%8jUuuv((CKF*>E@@8`)0giRp^=6|XJ%fM5AIV z`r!UrRR@BS%NU7FiWN=DL_IPs=lf^D$f#6(+3pki5T}Y##pcGfS<1M zaLiAib#{`5Tn*YEkdjT5h%i=r7E&l3^FH^ftMpCMHWK^&Y0AKU%;*4)VPSHo16T=Y zG76xCw#42j(F~o2#F{HCHGMCUP!>=;#1mZ)DHsOHV z(MsycJ2NfHY~r6&7Yag6SmL+AP`+oFfhGTQg$cNvwZR$Q|K8zPyiLQqzazF@RF->) z)6pZr$j~x0aBC72j-e{(WHCe{q@s}M=(s5nFwT3V{M}X-sO|oz`~6~Fyd84=^M)5) z4v8HS2W#&WHC95|^zp)rn1vt>oa`LMDVJ#T>}rwJ;*{#A(%}Dcxk* zhKN#nf3N&1c)fP`?yG$1xt#_)OgXQ`_v}n}VoJNCXqJqj+qc(B!0(Mmf|c%zLshQW z8vz^>e% zqM~9&x19g6zV*D$>|#W=K?)u2-Ns|FJ1@S>=l{T-^r~uyWDlU=opp`yI?%1?Vv#e^ z%%5no$s19jC2KNOYq!Rw0#|uqy(p0mWKDe#NPO=Eef#|xt%5skRt*) ztMCpNb&l5+bw21!UcIew{+$7uCKT!v^fC?t_z*^oU}-JPWYiXnPzV7*z$BGxT|{1$ zK_pQaAZ`+=NiMYaD1s~trpRjDij~10_!p7{Snm;Yx|WMfIx-uFFn~%lWo)*M*gVOp z{1Gik8G9E;MJo#WvT6>HI&sbP)U_Uti?CCNTejF{L8$HUq_&12AMo-&AhfyPxH%2H z4r`Wvc8v>4)5CcD=C@EZF#y?#nqEh0&|q~WNZ@WqL8o*q7^+Cb z2-D5wi-YZ|;LeiJ=L(9OVlki)vtH12MET|4Y;@za*9$nZ`!DTP&J;(n3L#e`LH9&*-vW@aDUq!(8a@YKeS9W7kKNiD48<^5_;Xqs z;n+D1A>;m}ru1R);1a-O6`6dRx7C1xwWr%x!c9u=MYdjpeH~EjCM0tawp7~=hIe0! zdu9V3XG67zU~{sPiGY?7g#qFe6!V%&aS&fDwtMMZm_dXAV^7&sVtU;YMdG~YduLM; z*qoe)=hs;f@&MsOm>h z5Hu;gS{WNGa&dO(X_Z(nW$jm9AcjjYMG{+F7(AKYg#LaYk>q{d4dzSVJ6A~z@A?$~osg zYv$TBvu9s3W3^Pvi5o<>b1&ILS!MMnt`T4Z7iKRwxNYwBqLc&C-=|c;nX~-Dwob?&2OPJlf%at;o@8SIpu}{MRHu))#DwR z=^~#TxX|h-+Yl^IP<67TpMKd4+H#-BKFlDy*hmmu(oyXK{=^?;L~RSlZ{J%ZnRII3 zlH;>;)7U`=(Rk6E;P>s9t?PvT(rZ3)wxx&huH`C#i8TygVJ*D_E_9Eql5ez&^p@f& zs+lEIR2r&q%h#l#*-jcm&%jbakjhl}MNJmT41a~i36g_YND?S;u!V`7Po+~yNiWb% zl*Ew1l7%tO%4C2|U8{=Xj{*ZNTpEQEL!pTX`1|IC^m^S8KdIZbR3 z9@_axoX+2VnBMN!t3OxmW-uX%xlh@IkDQeMw{9VsL8CosY^gu*t5Z zDS|4Xx#&jtNm>N37p3fty(6iQhdC5Yf(3HfKN;hiu1h2ePIvG(+n%@2T_!6Ocm5mD z%t0G>h$XA-7Hc(C@5tg;(M5Cn_)=JHH9A68@id%{ZaRrJ^?dL(%h6Y*g{8GW(pXfLQ*m7 zfL_>%#!0_aD>WgzSCb6U{zf^?uSRCQ9ZUN5mP1cLf&_!7JC>XfeO1|#Y(>5hR!TChdXpy6iaQ)lFjfi)Ev zHKHT~EpfU_-0)TBLZ*EKRX#geY@rlt(UzbsCtk4}L?QYr^+%|%caWU0)z1N!4H}D) zovNj=YRQwBH5%q;Al2{?5-1le21K85^01a}b#@UR#o{C!LW&?lB5lPgzA_vHFEa9H znzwnT)pmyN=ZT;EA-&5z_gy=@!9u*ex&$1X4xTGba8>@e{YZ|y*TRDQ7p8F5;pk@~ z*Par(C&%l$K*G6En2R>|_(qm|A>aFZmC_d@m*Iq$so{*5#&|pR4UJ2WswbZl>L%W= z2A4m=nA^fyIpNoI=0`BM55mtCnxIHf=3?)TUiA9drz1%p1N;U;#Qf}SHdLkdBGi{u z+K0(F4t|JC44Vvjv|aCSxvq6~e#+~8|Eb9wqbE_vsYXqZAc82HBrrLsMrD zCoUN`>OJ_GA~u`Cu<4xB`)rZ_@P0UqBEsF}KgoCHZTt}e)vebyjeyMwz654&YrFpK+Alz1`uVzN!y)lr zck2vq$psZP&5WR@wVL07rrzIH;Ax)j=vY}w1dNsMVI1uV&o`w}T|M3ooJ`zq9Te1e z&>Sp0rYqNE`cMgmL-M0Fl>s9OjGQbY4gxJj_=*KxSTNam09#}`;LvYos-N#>=q-z7 z%5-@3@W;(p4iT6N^>mt&%KWG(>2SKF@KW`g1H1-04YA5TF`BY0QY{^owPMT{B45Lj zGUpM5d6})sI?8ORg5hkALsUrc-;@*vz@$iA7DawYB5;%-QZraY3I784;Y^tO=We$y zlTRFnv#4}nS^Sa=wZYT2AKw96Z_72w+d!c87NRi4juvrFle z-JieJ5w%BFDh&-N)`WfpB>XMFMbT4~RXjye=&UE>PK6-1QQm;N%nrS}F7i1=eNW+Y z206KJ{1U!NOB$DkKgiS4>Q>eFJMX%_@;la%(Ev=YjLY*437b9;@~~yLhPeCR z@Y10P#v4OZVY1FInN)z{?W%H!(ABh)M4KOvTXUq=g#N0VnAuBzy>hdVLT15RDu1*t z*|8LK<5Vb)+~x1l{r(7^Y_A@vnea0nDeRs6k{SmUGwN0x3=QHE)|0CQruX#7{{M27yz`*?E2b1fs>ywC@fUoQa!0 z%-#e7&__((w?uUzm8>uOlO%eDhd;YJ!Rc8+%(Ze|COdWcE9L%BrW~erL*c~Vm~ZQV zpgj7~6sm~o^DYuTPjmG9eAbDAPFJrCE-6VIfi5~jdc74=JRj%I{iqpbm;5D)Cx}4U zZRjJA$mO6=N|}TlFU>D~4EskT$+Kl!K2T$6a%AZyrEqkRRwm!orhPGfa?<6_e#Y$3B#ai1gR}Cf>DNpW)rHX8!I%j0#;!v-n&tP}G}6&P z_ONWaE1%m1>qsVJuD;h2FC7{tBVmC?1gi0u0tugmJ(OMMWOoT7B-DFUl4xA{zfHdp zWq+*-K{<~gKTh?>M77GOUB!xX@i2$WV@?~UjpdSBW!*gOHC^UQZS&Z!Rl5GZ;n258 zQT4ebKVO8(H6-Xwc1fh|BdPYZG=n%U(UY>&c8LA@hoACEaD|7TbD%;SW#JYjg%Uj3 zlnM6BA7gA0KX8p7hEc%DmGq+5_f2s}K?IA*=&lFNfs|ny;EG@yE_Sa{87nnR97JG6 zmVQxHMn?Zj)0)TfXu(& zzW95&XTz}&^oopQia3JpBB}#84d@$RDhpp-M;HiP1vysNUoddtnL|}ubT|kPVQH1- z3?HnhVzgh$sM(JpG_$t$^(l>`vS+sw4V6WUz18bNd(m4~A>(msR>OmTuHJt9-QJ?h zF}rHHqt&3A_Z~>$1Qxpm?tb3fKvLw@mFXl*tHqGDK_!u($9$&{MS~_|h${^Q zO3QL7e$1*eDf>e2q#Dt4I5fZ@uhVMmftjPxM|Z$zL{Xt1;g1}B-HU6COBBq!7ajBh zmpeoKQHMM7%y>mwqgo`Avy&%nZr zUDt$DQRZKj$#*b6!Jtj_uh92P(y^!1=(R0Chsgdu#r+c%S87JZJ4hrhuOU)7y>r`T zG|lgd6jb~tMmRKbZi0?AT4DsJte`Rh78D`y5qbS|=DK5bO=d-0r&CjfI=7`mItE)R z7EVc#S82UbqSN;NARRo+zm*Gno=Oxu!e(g6Sv1a1B`Ojm9)cQNW|17H^#zs`oh-tZ zE9np(fqP+#)V4wF!B1O z*MlDeVqBpl0vvVep8MbBx#NbxtNEwlrOXrveVtCn7nf$%e}T3a+RkP&Z&itgvpXvI zo8f%iF&!EXi1|vZ`7`2ec%pSHn#F*r^EKb%Px&EIBUt1O+8jho<$c^mG|c^Fqn+UR zD^)KSXD=2Tnx!(9@Fpv_X>>s+ZH-!Qm||XzDOm9}SkMTxrZ0sk|0k)SZ4_OAywkci z2{SYiL07Ey1y=~aWYQ~nLtL8h7n0IDFdmdv`?Sqq2ndYiL3FDV7fpkkz3y!4tCZ8t z_Ss$nAu|?ML7N#_e-MT^#lSubj29^yGI#SvP!HcvYRVt777p$JhpOdsnO++4V-n(k zh!t7Bi+YVz+2+D(*yDFZW~E~(24~RyvD%2-iQ(iJ^x=rrLsfP^$_p7P?rD&1Ji$^p zi&9wls^8kMNn^R@aoe`8`^%{gNXZTNGFVJK1so#^FM6sH45UcJ+k9LkA^-;MsS4~6 zi9L?f;k_Xv*5rzRvhXE5<`eckNldFDWXU_`<^cRXpzyMQt!6I7S&4zc9qS zZwX^u{_ZO&Xfb))vw;idFX$U6L0WXoT)=iJHln+N+MvPjNd}!%hof!gbfNKzN?*a} zzPfXk`||LqhwC*ehNYcl#baaD5=0imwgiWT@b?z zF+OL`VV=a&yBv-NPY9}^<-l?cN?PNAX&5!{Yxz+d4!DN*%jtyIChG?ZFe+%_5FhLe z>?~^e%V9L&9PB!hC>INM#+ioWR?o)U@;-z0b?xpWxtJZc2Snbi<`b)}K^z>iU#VLb zR4kr;s0#1FsLP;5L5iaOw7vkjUKCLy%2@yK%R^KFfzYbQVmhHwAwfz8?Ee;ee`%e9 zn2Z0v7NEoWaIEWUeSQp#Sf2wEwvYTT4(sC!hZWj9$Lw1n=r5{+oRsskSwwEyijV4p z_<6K0=o?pViy0hR@@X%5KLo^I5G#n#>T6kQ0y>h0X3n22x4fg>?VL{;A4&zA8h+>Zy{1poTJVNjc;8 zka_F>5JKB0D+V{Gb=zYXq|Fwo9R{(Q6=qtrfTyq;Y83~HW@C%CH7*d!- zh~v-h7d@IG%s_88aw%b)dB-tV{jccbJYwX+0`pkEY-VOG)$-{m&p37gwgi;|@3y2z zrIY#+E(;8laI$TB7ULlfPU$*F*^c3xbm1}Sn<9Ldsa~z!5~W7Dm~n|bqK57oxV!y$z zQ#LZ6erY1e23-UwQiw_ua!`!MWg)_Q-QWwWpXHWz+|lI+Lr{Q4KoMb(YFPbBKEuv# zlwmK3g3@e z90NKP`?taCUuiUq-ay}Lvsd@Eo;@+1k-hWQiIkJu_45^{ZNm;*1lov{8y6V4Nv*!8QF0Y->pOc)h zDv+z~&c#bBoVImuSinLv4{Vg`C2 zvB})85*3GAPMIKUI4gxP^{Em{#&D%SF1eR8Ninw7U#}PT`c93m`Ve6{6zx|OmX3vV zyC9Wc`@c-_p7lLI!US^WGWb=~aET!lQCig$Sbv%4E$J!nvSC~it*$hC#y?6NJ3!*$ z)7|>%D|ub#hhYf{l5x{gGE_|*%Z5iawrrw$Ln1Nl9cnY5ie7_8%#bD(MMis}xVuy| zp-IMsw7;L54-W&8DeEASMh6W94V1vboAe+{^Z)I|zPv#ByLnUJ08p`PCwBNOwD!z< zjhRgra;_)z=dIQ7-sjRsh^4mC&nTm@dr}vCLuQ{eh^a$N(8Jh03xf zlZs2Q==J+YSripM$6`%zs6DrgBl@tY25u2(SXtD(GHgDlwrnVb_6)cszel3AQ!EB% zd~-4n^war5wLkk|@WZV^)&^>ezbYg_Z(JDpJB;sXTITb2!e_YZy!cJ5rgCjOG7F=^ zO)1U)(qYpV;Z8RmSA)S&Lr9E)-f@Ma+WJ&5EH|l3X$^Z;i6elX-p$|t- zq2@8w+WUNA2uaz9s6t|>6W?=)03;izPeowk?WR;C?loo4tTn2DF$-4>V^#PTd5}Xy zy3vKQO|+RM^h>HEOX`wZD6((yfiY>T`>0kIT{b2(MTkLB|0vD!J|@*m>d}pIrxBmE~f1JGx0{1bk;mQlg6nVcbKkVSjUr06_Yb0 z8BNR7^wMz95Neb%tSP9E>>vnHWgn)ChJ*q-FDMEyEG|x@Xb@`LH&XS2Ex@v~K4)4^ z7m%67U--V6UGlW$vAql@o@z2_0_uEfKBuYWb<;$s0z52~!<{Ax1}qvG>Fb z5HdJ)Ng}gUhSAQ+;JdD!^l2JzltR0z;=?jX<~=auD}s`Xqmpioks#2pz;;)~ym;;Z zP3JXc-H0gMl_ZDUFeI45m_{-+xS}jrjNv)y@S3hRLsiqK7Obe08_1FeZ#)K|XOU`m z*<7mCV`kRSF=)@|ao+JZKk~IbJvpgqw|DqsI=vM72e$BYg zqxflY`_D6%_WkNXserI$sNTN+o#Bp^>hI_fm`+gt)N)=zq%UT~jFjll*C?4BeQA@Z zI0PgjZz`|pLGpx)?fvi#rZ-t8jS;}^gDWQgD+|5qjS{t^0U_O*!c0#;G)n944C@v1 zn!u0EG;R&rj8*e=B2A5X45jFr2{G6h73?tg8Tq`3C&Yq<89kKQkAH>na`R?%6VqYx zKOU*YP7Q}jAfb(0TNfs@oei4oDfxBj8-k^U*&|$x+R6(k0U-i{B9_lR^mAFhRqU3)Fr=ZqoidsMy=v9 z!$5ke;-R%Nb0h;(81iC#EVj&7Rh`ATlB)1uBUEX?LTQc$zX_=P>&-0K><~N8f9mjW z-=BQNRx<5Cd?DbMFjawoDRmIGv}hD#NS=-v4Qj?AXs`(djbSlbts&mI!K{vD1~!7e;1Of-~c%j4dk@JAr~NCMb^$rh&vJcC}wwzU*0e^u0(&iR6F$IFQKo zsYtP+YcI6e1Qd`{VgSsuT-opmI&L}tv3Ea;NMK&r`_7s)15d3%0*T8y)86~df6y%O zb@v3~>3p;2kh5pkHEwXlDqXE)(vHcn@auYs6w*j~s03b5*$A>(T_7M&RP!&{KpI?n zSy1F`u~y0I?7OvTiIN|g=eM|2;V&ob8L89%`-;TIVL8X6oTme)rrDjA-dE+s9BVec zPhn5Lk2JTZMD3WhN~>P+Adk(C-Zqw5HrU|a&>UG1*%KKsB>ZohuYQZ`mYDDKPv^tm z{(54!Jr_gz#tudH16re^kr2e+hTF&Za>&mk3t~Mtr(R0a#4g5uLw)F9*^{XWb^rBS zQ{4JJI=XGyz(f}bt74RG$(4`Sl`C?_kwga7jf=ZTI~4^9P&zY11Rq`^utfOXKedzv zt4hlbpr#6s{DR}KMKv)I-XY>!Ru-~YV)mlOYps*`9&X@UX>EMabo-^Y{Zv zq(P&5ZYfsYhn-S6PN7xw-HOpth`2`{uPcIK09w1JvMv{UcKDc zx$3C?uPx_y<@@ocWkEn@-GZ-&xFRZ11O}hKNWxq+)58uwS_+Bt74MHGF_r78Bu49Z zHH@H%GPDFt%e-5KO$Z-ZK4*cRBR7q2ew$gHS<<=<%%P5P9n5i*<~i21+z${*5=nzl zh*L6Q(x%YQYSffkp)fX26dRR9QiZu(Ef5B3DR#Rb0w320^q)Mtd_t#7Oq&haXZR9k zBJ5a|EJ{e|5*R|Ki(gSt$4fF;0wa^qZ=c$%_p0gdH>5wU-m`^Eg zZmQK9WypS=KRTq!>))puX4_&Gln2RY^A|b9r=85KNE4lRWulBPC8xY=>-pI>y6jr5z8nAUB>dd##ETrG91O~?w;uF;7Wni&+G2W- zvD}=MIc3WX5?OwNN2F13gT%~gJu=hlV1}UPwn9t#n{~{_M4k+B*Tk>3r`1XzxF0+D z`Pu968k-4p$S2DFuZ)`Gu&^OYmihwC7rMlKvFc4aGaX-E7{X!IfQxkUm~B5z+$s34 zaR#>&M8zAOGx3{-Ky_z#kSTtXnrri4{3I27or)*pCP$#T%I^eE%US{FD6uGUH})1f z*CdG5)xLEC+cY$VN8FI%0#)opu;Y{QJ+U&>SLctZd@g6@-D0)b!l&1xm)OXjfD4IH zi;XA+kCHkOcJ`QvZfpCu^9~67D0tpZJ`(uogO*Mc;cz0REN|}9gqG<4)Urv+%kBDm(OhtoiR;+X zED0*8pM1HzrB#J+*ys>vOp5Y!7u&o{9(F2KgAn-%E&J6vlmOC zLLYf6c+hFv$6@7L1O(rs_gz}`HqO7TK%&4Kmu$|_!}XYW4^z28F)Lytr8H_fTYl6b zMk+~ND*miIr;-Q1H-Jj3<9pw2Sd}KjFp(yMR7=PO-@*f5#gbeypI2g;cRT39dj}-F zENqIC1Tvv8VB!n)&}1noVMxWWV#O6m;l%ptT}?ubiChd4snF9|gNJ4+B_(|1P|YqO z{t&9!g;(UYo?TU?r`6ygm;Fd&MpJ=}%znyT84og1&JPjB!+0u)gC4mtv6>o>Lfr4t zUA0OQdY@lq`RO*7VgJ$xzKd_%NGAj>qCNy&kq!EG}JX=~d8OZd6~CsT=y8zqt2H*4DCZzg38jqOVI464f$?k(@vlXUS!njaP*FO-Zq8?kos}Ot^q;>LkzbS)@uP*mfaNvU)cGPi=|D34jl@2rCHvr;do3rx`AKi<~gpsnS7^51g;pC{jkhR{oa z4ka)*E>stFA~{o5bKCN}zI^VQ;|T2%c-n)Hh!d3@OG1Se0kL%WLyb*&_MJfE>3~#U+dGNjaxcHjzivBOX?ih(M*23PiHVi>0{VH2kpBbzUyC z<#VdJ6E)@kpQ?`sRQG>4SA*%}&dbO<9uPQS!@{aWX&{F;so0z%LK=e`9`;j#_b=`R zYKJeqvoK?Sy8fpKA(yf(Z}D;uwG&R8$?2c!ipH8mqBf1Os>N$&GLT#VtGUIM&A;!g z1aq7r%}Jr`#+0ZFN(TA(7A8M9BXf*FLE;E!c(7==EDPeaRLKyo(0Sz8s?-kPy9a%H z%UgSfybW^o!3Mtl;mmD!V0Kp>)CeR^ga_O73=eL}V~~RmRO`a(QtlrG3QDZ!or}mX zgMLP2cd*H#8uuUwT*R*s^(=-NDMV~3Y6X(77&@M^=6f);5u7gZEGD5hvaVrB$r?H8 zrei!1(ZaCVx0)Ek5e6g?L`~kvt`!wXk6}pq{!I>lK`ftS&I`*V8kq7kUJ1=jNgwu$ zu{Y+5vOlCy9TD~-58pJg3sWxV(fk!fviQ2ShS7cvM1XU!zZg9I`C4_k9O5S4CKnju z{$|YMkS?CzXoMZ|tXKb&$j@RbtvueaPS*_Dh%I@k29)NMW%m~pmBq=Eh~&N07J?BY z)^bip5_FLR3qm57fFM}TDl>KrCH4gD##sW+n)3{IOdeyI~x>9eSGiSTm zb|y7lgfdGE8?q#f$E2~d>*LlE#ofLiPQx!m&b|3ZPL?&5m(QjY?ybd) z$DR>C-|=nyT-owD$hW9c{lC_Xj@{W$e(h%jn{Yv@Zr-`CccjB190@3@mx6Opcr!fB zX&O=4uX?0t8Dc);!GqoYmZ|Z2z2>5WwwS7R&w0EOLZOhlLF}ZK>MtZi{&i#)2)ZoD za3(Ue?qKCf5s#YSrF%!o17O|Kdw=)dvWaJMJN$$$1-&+1`Zk zxntt82x5{OtPl>)s%QsL@FZaM)Jz&v*j<&+E}2QtqL}|vzbwTzI0I6AAUl8nz4?yd z93a{+sQBg%6LNsc=Ac+S%OIkHVa}tZrmKa=lw`!hv_TPdOL7&SUwAb5DEpy?;r%U= z?G1aG;!}7m`OO(#$XyK4hm&OYe^gSmj8j0`3ZwN?h>(QAww5@wKh8gO$JicOwP>Xf z4lHwSbL+2K&6hLA~+~}nG!I!x0!K^@0k6;Lg}cF*P$=)wadjL11=p@Z`HTf z#4`>?{PN!N{u6(>(RS@n3#@0ns1*7b`l3YOJ}2_a@9Co-B|unj(eD=^F7bbTY`ONi z>NxIssCA<3By#_FK29XyaeXatIhiZw+V(E>pH0^?^x5%$%6FZh{X(s{+1C1%%J(Hp zkfsm4SI<;ld0#6h0J5T&+5WbkJRse9>6iDr=bE|PLeWyTHRctL7*vwx1mC_K1d+W0 zwRkZ>>mq*;{x<~F#Q6q|^Q%5mN3+?fDX{i5smVFbhNQu`t&d=@x>`bRSMzH$a@~)8 zY+&puhiDC!DbhS$$%D9oV^{6*W!nxOq#vPW(tjujkMMwDt3?@2aN#Q;=!|Mp3T^dK zq!O0ixck;At%#pzg{IPuAFVuqgI=tRh6ENap<<1A`vCFs_-{u}X$^C9G|sAnr`-sC z6cP?3`>3q1b=F+d=8X+qq`^jl8(|H#FA?uE86|BqcUd9GPFYNq36JqK9FzVDY12TF zgRQ)9Fy6BI(+XBmUn=d>Va?(6u8jmeMAT*AW5?R`od07TQfMX4M+Y$87e+C5Txmos zb~<79Y3w6I>CmP29j zdV-!1uyfv0=RC_SVU0A=zgnz_XhdAuD(sse#cp5bKGoq2pqAi>o}?pe76&<|CxJscD4=pN_BnD%jx&R zp4$of(As!~C!(>SEMHT*sFl-es@=_a^xQD@5b14L4ldfI#Ry>q`~g$#DVT6y&^pvTMTekn7x%C= zCQ13=epN{=aWO|;-vJ;fchL-(I@k}xeNOxyt?+PmrJQA>q^`#Y#npZp=n4kL!Qotl zP6p8+ECr7PG&Zt!qW51(B6J8YL)dJiB;a*B=INH|;XEDyBC&voC(;KuwY;zWGH%H1 zbcS^Zx~9SEwY8^J>z;h_V#DQ!B!V=~0f^;*B;QbjPT%t1MpNrNZa2Z7zbz3+C_-<} zZH`;IZI17kPJw>!FAtzTp5Eu9To_~mZ4C{Ny>M)JQdxnEm-G7TwWi}zU|f;oRwvsG zcWG7CS@WVI-+4__0{4DY^cQNfeYaTw7|>+KSF^bHBd%T+rJQfw-FFvFvyRI(I+4hP zMBo03fZAWLy3lS4{H{(H%H^J}wstm(6-l_Z+!xW7J3n5|%}~7WrnzQ$&ug&0>XPg~ z^*sGrF$xrT3_>H9%yVCmu`2L6qWzx7YPZZF-hGr~_wjF3Xrho2*thg}v1XO;p?T33 z@P2OedH-EV!C&UbERJ6W@VtaR2g%SX-GEb3=ew%{E26r*t^@w;j1*@}NqZ#c4 zC5S^CGS93`0Jj=rRs4Yw4QUzWEb5MCq7s8Eu8kP`+@P!^vd8pCMJIHXQy=G7i5}^2kol=SjFI-XdZTTD zDhzzG_ErU*&JxK}3TJx*HU3p4>5MX&YhUEUx#p(P!HC_@LD~T#6;B@;N1o>pRlTF} zK>rzjBika24?G&y6unWqu%aX}cWcu}2b%c@<@t=O=Kc^ehG+sZ=Y3g1oG08_XQ8K| zPyg0uGBpm$A7&ng0(UB;#;g-fl)waF}CGiX*@61inA4?D!n#1NMB+ z&~pTS^ZL1Fe>V8vvClO0{h?GS__P!Fsps_T;X3fM3-GTcH6?-jIkDHL>%jYYsouBS zNgxCq0uV95^WPuScT~ho^t&8(%ksILmq2)U9#;x*otMCV?m+=f=W-PSc+(dQ5s8S) z>a>kq8Y=X-YNjA$y!O-L^}4sW``72kE0aOz(#Pr1bgonP&4`lVbD2ae)-|xZ871Iv zXfnB!p~r6xAT;>{&+po?c{eK*IE<;~UC>0@^KU;^o@%khP7B0+oad%ltJ`ASAEHt! zsiCE1W(V0PA|?|0cUEBJaLfo%W@nicwdt8Lq+3p@l4j^BB0ThCqo^#wwf zNCD5|R29A&&QBwcsYa&S9mc}A0s&iN+9oJ*>G7Qi^GQ^+;Gm?m@pR8FRn69s0?cs< zNAr$TYco|J>N6v)g#06$v~ksgJUhh^c@SAPjonNV3pm(e3&M&T7s1LWwUe(ao2xOX z4>kw_on-N&df^YwLqGWCJ6X9g)P}$~Twqje@$?(%03w!aQWhzVsxpQMDZ|p8;pxf$ z*8)U_kK{56+N_vBH(cT|A4Y|qoaNlm6P8w@Lb_qyFkZ4jARjv9SiKNxKOLhz*l}SB z74Dd>a)h7Wg<9C@>NCUo8@aq^Z>1z6&ZQO74GYJ*B1)WkP&-`3p<%7-Aum$F?#fg5 zrDzWYV89TwM5wB2nt-8m>7l}62y5Ws(;fEkI<9xmVmUt2<(#r})tz~a1iO$6HB9(! zxMR+9?8|lfh+iXL-t({%2OWycphDu_v9#o7)uX^jN<)f|ao>G|X9Fm~#JA^shwQBX zlE%;-0)0-icisVLQ2XBj1h67)2E`n9ne9Lz`aGTeJ_k^%=P*MrgF)w~`FP4wWWMLR zO(+ZsbP$ln++VES#j(wRg3J;HTI=eNL5}Tv5u{=fHM%WlzqO16?xxtDHk^d+x_=~I zuhj3vGWB>b$WUX#L+P|k!Wen)g|FE^-Y+Wk0!X-0Z?sdTQB48*H)*84YErFPyB+xX zPWWL{1(DZMp;Xx8dN=`~DmEw#Rj<_^Ea?4l<2vk%qBn4qdI9I@2HX%hE}9qD47$w# z;|Kzd5*KK91mEdx`>BV^xDNzs2VP<}oAtr~9Jg%+uB~SG(*@JUcH@5VL9esr+Km#4 z*vIH!nXOFd)?I}RTY+ZyWI?SFxbi_uJ>69Omcv8oEK@i7oUxkf6Q?mXRF$_oE0{32 zpHg#;h!Y-cF>XnTFlPUxslp&oQKQq|>jVpB|Lz(?pOzyucH0_DqrRlF(5(^u%TmlE;B*gc#Liz9oZi2+RAm$Qka|^q#vd#;0cEOlQz=q5X!pxb) zmSWR``iIJt*G2RLDgTU#Y|T~3)0RR<!RP~ST49u zy`4Al#&B1*LI;C6XNi#GfUa`Tm6KwdL${zNCFeg!!73$Tkt`P`y^y>vg1nH22dAb8S;ftXa+!>m3+1uzY9rb}B$kTD!+dR8 zG4ulxf!B=$LO##S^@kt`WN9I{bnS5~d4H^(C#GNb3)qI<#o7%2L8JURN9w92lR>0c zRaR?>VZJbd*Y$$su1xEBt5}4?0Bj?h+O4B3cwvPVdKU?jt=3X9env9v{GEEsv^`MW zvxwOog>4xvIfLd!kQGq{hHg@(Xi_~2 zUK@d*^h)oh-&WlyqNZDc^Jpve?eKmalUvJs5?hrW&5U7O&#}iPDx)6Zlu^vi>dr>* zSF|Kl5}YaKrEGvW+Mg%y9pS z1HAb2%B#2QaosLeX}!g6WmR~0+wWT7tg=*A!0d+=F01+2&L{BXpYPXN1|Aw`G-gc1 zoUoCBwy(hY#{C~yd#y0uUucZ+Q6n6J2wyModM$Wp8uN)bg4ANEnL`h= z(i)4AP77kU$)K* z_3!?U;YTRF489_KXZUJfrTdcpwL1pOux`D&^3iSjEymJN!mYQYBeV9_RU@Eoz1}w2 zVcBzHVPKKGr+t4r@UeThE;jIEDbR*}vsWvUx}J~9x&|Q@$POixi;8FlNHpi9*uda_ z4{H;tn190#_$VIB2b2cnx!hX{G9Fmi&z<-@DopH39>k9yOHUoT9{g z32$v}!4tAD+Rs@6VH}}j!FF09#tizHFm-XMkp-MvIHVFoAX<1edRLVFKilOSJ@W~Aq^oLz0LhH4!YGf(~-(90_gK7@u z{c$0eDI z(O4}S<+_NJVoI*xk>D8qQ}B;;d4cil~0;BDF;0+q;rJN8A1pT%k>PaB*6;bvUO4`8s~ z0VFl*4S457#+~W}=FS48@jAeVAuzV@0_f%+r`O`Q^53icU+(|&>(P%jCLq4oG|l9& zTF4?6U&f!Wp=9*l>yY26b0?f-p4c{zZ(76*NS2}l`;Vfer;emF=ZoZEL|lj^7mMZp zVwqDfFc*A976b63Aq#tWWND>yciQOsQtxcghpoOYckCxFeKVNI%zm~-SPq^HzLc#^ zL|iLh%x~qgv@gB<{Zfz+<82vwUk;!#bBYLT5hO@yC{RhmLqd{7!9=7@q(y+A;h>mc z8fbMI)nXbz11jj$`|i>Eu_)-d?!9lc_&(^&KMFie+?1C!scqB70&g!TKMHQ+FqrV&lKGwsI1$D#6y7gN!TqV_G z{$_@bDxCT4_7^dp4$P0jkh9FE8Z+(eq8Tz+Kw_4W#|MMCi13pETT zjY|5rI&Njs`F8vuj8 zvl$P3b4BYl8+()5OXM=&x6XVf{P}rBI|i7(ll0O^8js+$Ib5K8TR-xSnAF4;%)Ruu z>eJJAZ)_6cQvcC~Q+(=0rYX1Sf5vdQiE{t}AWFQf3S- zeS%dqR4GCsi8L^mD%~F~s=|)t$iube>+yCkF*V8Eh?tTKnedIcmU)7PmmP{NZE7hB zy56?WIJT!`tx6CcUB?ZY;s^N84KV4bvDKf;FtBKjGcD_?zppY=vA1p&Dz{L!h3Jt6 zQSe($?@yXML*C_m{0%CQ{MK^>{a=9K=)P(asgTWjc$jH)HCHU=6S>;8yc>DsEEK!R zWdn+W?JLP)TUMrs4LP_smiI@E|31#5NE#(Im~l2;c7wG&WoPDJ(>~*RvDSUf64#a6$ z9se0W$!;b_+Ler(yA*vQM=DA>P$^?H6*)X&`Yu^8{>yvRtJUw~KaejBuws0o&%%Ci zL5k!H*2)(Q*~)W5R!t$OvU}VCR4gL6} z#+|(4kr???Ryqoj>roN`$It^@vYu@YP0oIvzAWEP$A|GtlJ$W6Qa}&$NPEW1H$H#FiBw(wm@Y9Evm(DEWw%LSOKRrDisOHS;4Sy*LJS;8O>SaDf{Bkr1 zu#Xi|uoXtfqTFhpjhiJaXEz3Ic6`;w+G=zs#&&Cm57&02Xz5id)g*!GpWITX8E^EJ$&R7I&vufdU2I^S^i9mwaKt zS;<*BGqY!A|DM^)k{ZRi)r}~eJ`vTPcU4{!%%&W@FIA`}ZP7Mt+5sgh(Hvs%4BlTD z=y*81is}&yC5IJw@RXs6;b2;sG|w`GY$?n2Aqnb0U^mOfbU$G5V`S^|>ZRW4%H(ga zFa{3Nz_zc0qhRbr*M>Q&f5!+z-#n91(9!q_$V2^~<2JcRKl^F#~fFx%8E()<3(x$Ly??9HQHgX`j#6vX8k`M%+boYPa78 zk85*XyEVvT+GY0tl`f@FyWJXP>H9MQ-upKEHvR3Kq2yX0+fp+J4(DhaBBbti9DJ47 z$`3q8d?~3Wd-#I@J_nx@KO-Ug`3mp#+vobvdYu^LcMBFs^}R2TK)t=NxHvZP?Rupv z-5xHf>5mpwF41`yD0%92@p#h9TnU5_S+plE?wgr|C#y)5BKV!BS1x@hIjTs-aMdEV zhuDAC>YY}=A;qbr2S>tMTzHfb8+ohTejrTAO-lASXv7{{#z3j|4%Zl-37VUMDnUr(;*wE+A)j`TJ)7v-} zxF%K}f*)kL@AH1HbiM@QkUxb4NQcN?L@W0yL2we0$dLf$uC_OPU`mkVp?gNMh1ph&xyBhsNsGsuGbV(Vj&7_Rxe#?Jm5^7*b53j+e;%D+A! z)Y{11*zO}v5VkQml*!64UvpQ!vV2!`V@$-myyb=^Lkp)d5o2M(#J}eMLvhK}b?172 z{GMW&r{M-HAg8WSDF&Jm;?w+yh2Wg~HUw2Vm?ekw+(1;Le#G!e_s2#VeC?{N6zF|m zt)Mj2itn*>RLa-1iWOx=CSvq2#)lSU%_JE#GpIXRYjd@03AunO6q_Q)m)4`afb@?=O)g;942eY`nHfSirs4QIB&S3|w!ZnCTb zyT$U(-Tq(clmz0RJxtLQLH+(;=}K=CKPF`9rn<0_8Aki}4n(uSW++3|CyLUpfYv1T z(PZw*VrdnxQVF0^CQCowv@s4@&;Gk%W`rlRZ)`L4RL>catW@ia&8@#-p(p;nuU zUs=;@1i=o?-lk2N+k5aaZA#yx(@nDo_pJ??<$QZ59xBm=E=k#FC2=N^;%3Wf2_U#P zNDwOxL7aZ-u0Wf`+Sf0;{+{A#Dap}Gb^DuxUL!&0f7fGH9fXY6?jFx?xhtA7)U%-J zN<`#g1wvmqVpED>e&|>eg$M$Sms^;|u(i%_-@bKscgH~gRv#Ch8db`C!(}5hk{3zC zr^G}?;3w3cu=dg?$!Mb3B@iNMtL7v>8Gi#Y3fGMDCRbPRlf~zulN*Tr>at_cCrru3 zgK-TXMu`R4&E7pRIxMuWw5_Z(-aWas1rBWF zuAiRYl_3{jO z7f*mE4MqjYOhw>|($Q7J)-t7d)ZGs1QK`tLIA{rehMon6T(;|?k~#3+jK*f}UuhW5RxkruJLlEb>l%5nrGPNCyXMLlg;igGdcCP zR{1Avc&D?qMg=bf%?t+c-)R)^0lvzO5Rc`CT@fO>L}rO{@Fk)t+VC0fWPEO{`N1?u+Z#@$Hs+w$*Ct?yI3@#<;AoNHFcVAAuzL5i#DAZ!+WvPudGQJzx# zxztOU=!Asnsj0iC=fK`qi!baI0w;fV8YyLMXtFSo^Isg6NrMM9M-WRfrMoXlAfrCQ z=F)Ioc`Ubx;tzwzlTF*AQsa)}SmcTNOgii*kzl zDIX&)xtsU2N zrit=DXfDV$$fUK;BM8Twjb3C__x7lL>@SDol9NLisQp!oj$s4CJKRa>;9xUDlJwqd z-YwoaV4_`~r(X?04R2Bp{;<4t=NQN0`1iDh3?xKARTgLp`!w(Y=ONXHIk-0>?&r5R zLQWER#Z=Tq+sP3>8Np2YApV;;oDx=>F`~aJND2_#!Z4XIg;6jnT~cE9`$RlGSuc~( zBI|mSUb;urS!ID8IwKm%rPolo&Fu05%9~J%d`}GvMv~l*>jl`$X6mL zpzN+Y!TCRop`D<$>moq=w4|BUQ1h~i(^E;;AmF?n#F62mkg|rB9ZKcopQf*r#oMV! z*LwbWOvJBv@|Z4x_v3AY;5mmhm-)*jMCGg&cG zAq^Xd7WT;O77bG6Pmfu?sPdk6AbAda9V&_YO{Mi5SzJ>2LpB+rVWoh=-_)H*rp;LA z!!tbOe3Iq0xJZdG5L+u}Y46cVNZPyqfwgt_M;4tlt9sms^y*g$1Zh?{cqJ4ULD0T7 zlNQQ$o2Rtiq9N=(N++r|Zt6_knUKr^%^m4P18yFv-IcYH06(9hfG$O*+rD6(*@)(m zz4>N#Q>;=RMs2fzzW&x;FdOD-aUId&?<%j4YA*XHN*ejxbzVLJi8IA+*&}OZo&nD7 zWJ4H1DaEt2&_&b2-)FjM$Jsq$F5Cnk(O;+V5HY3{C8D>$0~mj2aFLKzJDSahw*whu zWXU;cWMYb79>Xn{8T_ARdwa2DP+^24*X!pWGls`*SqFk}>q1;V`5A?zJ)B;7|HS@~ zPXf<_!m1sn+3-tAbS2#q)si31xymyksn4tkYx_zTI(jQ_WAJ}0zK; zpas7>N8fxlwcgF?)>-1g)yIS>c=ZLzUB%S3p2?kU*)ew44VR$_s8`u`eBIQDa40b@ zDA;6CKOsSI2Uif&6G@bJGFA&A2Fr@$f&Y|8Ii!NO=n&hLqWiQ}|JBM`pSjs2kMw%f zsNHytp(QCa-WryZd0k#q%qRCL*sOiI6IY8;#8^ex{iu9?jj7%uECmVfee`Rin#55c z4=72rQKb%AWiU-_SR+;6HNP_#Hnw1RpB_L+e-1aO=B|HIg-yTm8?G-Yt!m9#kS#R+ ze-eP?Dq!`1lbrVqCWBFseX`p2g@01A)i9=iLorYnRz`yig=mtXJk&EVLlRNVL0*ZUneD*w08(tl^B&i z(fLiBAwDcHRvpGu?3Alw(nJ6gP6#3Ri2@GrJVK{J#be}HP$`%N3?KTO?|bqF!`k29 zKQQpS<>KGNh17^V^|`+IH`aHlEBf~RJj3zib4PUPm&!NY9O7Ag0O^m8eAA)0 z_EvF0pJ%?+Esy&mM|Z^r1mgI!%-P7ww;qpxt7cnV?~Pzu-9#*eg9ByIa|$doqD}X; z@c-;tZM@hlJsGwf#=ev7h3hmD-Ya9{NSz*{Ho)n5UX;@NrFS=$RAU0?e-{tkcJI0n zW&Y{WgJ^Nff&JjD92AlX+X975DMw-9z>xLH1|zcB?KCTijFKKR2r{LHjk2Y0nC_s< zWkv63jr)+noet`Uto2==!AQ;Ytuf_*XpdG;3E9$2IT%4PX-3MkSq&%m7;P#0atHgO=KmTAo2H2^EjT>ZNS1!Q`<+`JTAa7nSI*N8L;tiPP{%3(X zURYObU0t{@siXB~dBc2qV9^^BZFNTtNt4qYaGmJO9qp&16d|gU)e+EFLMn%!!}YZK zhelAeaGAlU-oz!}i6!ma5U?=VU?=vLip0+J$Yh<{6O1+O8y<_m$pcs2@I+|wulA-; zeg30Kb;EXEOQCW!X64z963H1QE5%#FkRcYiR8>_4+M zO4&;qTsEy=GGZpupUPPeH(YIn0^Tw(64D~!gfe~Mp+TTyrvF^oS0o2&L?{GZ30OQG z&pl0NUgbp2w=Vx~LP%8J(c)qp-; zu%>>W*jxelx(ODHMwdiv6lpjlz_jg0ine-p?5gcR+o7CZ{$Ivl_J42x-VM_3 z>@fv9P*HDa(pZcKlSzHSx-?_*L)9N>v!wei6pl&4A%f6)8LBLz^J5nt@=%Z;iO_uN zz4@QVK=fltw*CgU6MQ8HNu{J|V5=Yc-w7KJ^1Fpc!WC@%hQ#G>JpG~Z=u z&aZ#OD;6mx!IDiI;!mEUjz z_3H%x^yMnBd;bY|$9QUqmu1U@9su^;=fm2qbMThWU?Xw^@oG-af+cB1`w=j@{Xk45 zs2tWwc{C@oSQGs*a(*3C5jYe*ByT2kL+g0Ui|QiU$zFW_Fjx)~87^5c$d`jectO!x zUXc=M%d&m0M>G-cku^w^0_&qtxSH{&wi*U&yghgA5= zFXmyWG;l~`a;R-J$%xnpV|Wlu5=nJoC^nLYf>U!og&49$6{T{xfSxc&-RiO94F#xh z|IaaJI`_2YS5PBPBSIreBS~YJ3?hsU1_!+GV;@qIk?QrYo_OJntX7U#TUSel)o0b0 zRK9=5^^ENlP9fr(;@|`~HIXPO8$r!g;j*Qj<6atj7 ztIn%h1PZe6PbJ&q=UPQfL%3RqJz`?R4xHnNA~~mo2#DX4BM4Fo#<2n;o{6-1Dl3_9 zGUEOBjCkPdzkL&qr)pJ?Dze8HuEWYbaDBv24l%++o@-UouS0or<=)EkRRC|PW4;3v zdelHlzzN0$H}2k3FN%FTjd7qpo$uE5AfpV&EL;3@Jg23lRiT{K1ki(}r3?;S`oGgs zQuuwY_au;n%vjMwZw{v=h?gOUZFPTvy~v>31wA`EI{@6>>~KGvEs>AJrZ$Ps+?#rL zVbuNQ3Si5!g`BeU^Xpi~Mw93z0J{Vc0ZCC`BjK^|6c6^80EA}MS1xP01mIV*v$>ck*4nKy>iZ~4|$voIY5|1GSg zgq@i5(BfDaOrnuUUKYA_RcFAlQ)JRQ;&Mt)_k*=_zaXwt293;pi+#^?M$R4fzC+oP zYsgFHpnjyCl7%VRDV5=oJ}Lknm+;%01_Mkw(ZX_bb}+L|l&rlP854- z)!73kce84}iC&~MV0@9KrCQJjs144|Z`nw!)lxAH}Ggj7)igu<78!A|*#S&e0N`&QdoIuQ}Tw0@uyb4^T5nKW6Ug1P~~F^)_S z=tliV{T$C#03;CQyF~z-P)cKqBjJ_SNCn`ZV4NnGO>xj);31>ZlD~0QR#5@A!<`%* z9RW-7K3g^y8!wWH#KXe_73$RJR#gG#r2Kk*y015AwFfLu;^~YZlqu%dHnQvUu%7`i z+-selr@)1+_6uxWT))@7HxVJ<1D?EouRX-S`&|i8-vBm=O(i;-F-`y5>R=)ZxKJ7< zPaV(#1l-2P#*+7OnmV2nnY=N?+%JGz`29I*^f=a(9tBJrZ1#JtBP_AFnC@!&p;TnY zVY|$31t5=lzFh72-kyLZ%aqbK0EFoFbSYAT&q5`Wr>I9A;NyEw!GK#h%~xswcoTT5 z<1n9G*tL*j9N?W?7ODwB3=9keL_}`OIOODpckcU#ho=7_=%P2u0B}OrMn)C**IbF- z-#QTBoNMYj#}03PG>KY`CIYe>G?1pI=0E}wsLgr(t=HKyuqD+Q`1}Z>QT!=`E%pZh zT+)|p9$ViTwASoyhgc38{xG;E4$VSLpnsy0lIA?hoZXp^zR$TFl%-KFmCh2DTFwk7 z6<82t|DC?P$9<5$mw)BZDJ9j0&u272UBULN6B6zIB@Fr#&Q(2*=PPwE?u>YGjm9N{$Ks9rhblSoBs^V79eF{egbyDv!Dn^N5gWa`-q|crsvkFVM2Fx)p z2~G3d@5A^Pu@2*j$=3bQePd?F$>9740VMi-?qB0vZ=%SqYebA@{Ic%7P_7bFAXNL< zVy9D~dj7cXZK*A2K9T8W#}~#eWXiB|#JqB6O-o3)kc}T&ULs6MEUM_l)0c}gu>X-k z5*=5x&~jmOrRbS`r6vF5=4c2^r2SFdoHqQki!QpTKGuhjdGI+?lruNd@l@O|Y?Kk~ zh-GD28YC#+DmvSyfVStn00!&C0LF-F9{n3djt%GQr)U0m{mW9dndK<{21VO6oi`#& z3h2w=Ohs6_vcbNA|>rC#*Dz5s%?Kp-`cc-Tu}{E)r|;3Gf+ z;UE44AnLY&0|3$;m+ub;{h`Q*hlk8eOz~7=D=R*LCJ2yiP=c1f2ly3;2LK{HDwR24 z6&JT0js;Ms8{qRy>h52y0{ z?Ydj?_6`q$SZxjbSXp%gQX{|*sRRDZ{>P2FZVxc2WUm2sU!yBGg+TcFZz7AotcS=1 zaMUz59s89QJIm&~-|MT5mLs)>?fK)j(*+ViIqE>9@DMZG{2m}^KTq<`%W*ni?4s-9 z`_7JqlHGczCzyr+4H%!(ygM8R58=0&5`F!51KjMzLe0{NLL*18Cdw9t^QDY zsvk|C#vku5ut5Ou{~O?FfGkJcdLk3h5k21&yq?Vz4UVO;qobh_$N@L+A{FM7 z9&VRRfec9ifVj(5&eLv#;gPw3g@!_6@y5laid|~M)vVJRFDzFKT*7a5J4Xo#{s5on zsM=qs=&B{iC4qI^98M~GSy)uZYy7D*dg^P0bCk+UaxzjQRjiBC7<=A_YcFViLl}2w zYxD=_kR>R*oouphS8B*MQbVyJ6y7bB4y9!eLb73q^X#7m%zMj#KAp6|%XyKt6k0Wq z$X38hSnmg9dmhYv9Z=(+o-hh@T)ti-&!8sl{I@l;Z{xh~;jvP_W|t*jZv8um?(`_q zXXqUzLm7`c?nZ{I5U=b?@}~zS3`E%%NTO_FR2IU!6BG)cK{wdV$IPhe^ISEiy6ssE~B4v6hNY=!_N4 zy~~||!fvO%(WkO+VTgo8DCRt2w1k3~f|HqD4*uJlydB81=nJz>k~IZ1)$~Rv{ZT{{ zbuq&jeSHPSbD8Bu)ov|)aI{1yD)v4LRlhD?kS1`@!cXR_24AZP_IWvB+?ZPpEAIOL zL@-5Q;TVSApzRZ=t8<0ZE*Q6V*jPN+D~FP!!eG}XGIl7Zp2Fwb?@yHulz0{;?nk}m z&*`bQ#!CN=hPG5rs$XByyn3NRNfwpRd+1%Q7KKx)(dzk(4yfCvQm zH(-_M0D|)L^mNcZpiS~S7c^e-G{!~>1zhgmv=|lkrUYH!>+^l;PclLKOP7>ZX$cD$ zG+WRCPx|rpR1XN(Kzu#{luGTLbmuFr@DLzt0$k>#(_}>zh~nG85<@8w*lp6|3#2&d zpGZMi)Z!fDe6(SjC%3-iB*-s^$H&K?x{1X3VtGNMKYrkj@a!}_yHuL-d@~=60CM}G zp&?)dLl3YvV2rptJUqw%9O7G#BfyNYL4d&45%4v@V*zpCTicmJF~2+5(2z(vdAp;} zaajhiQtYIh`oOt2cjVgG@>0ooBzVD0Yi{zous zRj8(UwUCmMHrq_Uj7YpB<>neSTdSb69~>Oe(b4V`QT;oCGT~=f0kt+1A+>lYgh!fd z-C^P25lxubKo+y5XU9TB@FOKs^ZGWN(wN-7`)4xUSnkzD zwwOY!_S*siI~3IH*5Lb@odiOZg-h+F9Da&FXkW0U3-4krNfEOR447f9XhRrF=OW#y zX<#D^MUH=z26bk9A({QOlO&l8;WHB@56hbBg&>V0&|9wjoAxwmFM}O1+?Sm5vkyxf zCgHXnSC_lbF<`JNYfyjhKE!{Xej=v?a=M!vPJo}n-dqg2>Qu|D!&Q_o$7iGEv+$@! zr2(7$>jFzof~`^JNxW~^5#Hyve>UgGZ>Kz^JNh;(@|F+gd%|Q1};0$t#8##mX zZ(n{bxJn1?jYNVx8F}+T5kgav-}6;-K*oUv0z`8B1u6zZ%t8Kj6U-w($UfcZc?v;9 z7f>MwqWkalF0dJ(I^JGcyCf6yZTSY9>Q_`&#wbhGJh^!QNv3~t=ua#m1I-9bW=FhV zLuEb}1p+^y83@9rd|O&=KNx{&?1mWlue*2Ko;N19fY0PZv-PBO(M-OWpFx|WU7l>4 z%Vr>;f>6#DVCCoM=i*Y;NChz5ZkNsP+d<;y17UwWR*QgxAe`$WWO{sWfmCjUTTUhd z!v~O2JgmG20AOadd{MVOg%_UFOTeGh0YVE%Q@u{+71yS90Oi6(&wZQS+ySt3yu3VJ zkPEsAP)}FyeAxpac%MDo{}NCyn0RP77r>Kz2eNUXMESf>t@8=Kc~eVIATG$0LHX|` zG20W0fkP$C(;Cs0OnViBh@fQ_&L#?VkI_0QiKB08kLj4q^6d$kJ)1q+96>qjj$E6e zMT#Q*E0HPzKDl>bz^XIdhdvVZ5GX=aC@X^rHZDXzLlzo#MKMPJYao(Ez@YI@cDkUK zcNmZoXdJ#2_^{M4;Q*!^>a=oo!t7jsT<^p047sL8Q0sb|WTN(%4raW(!6N2?MP>BMaoer1x{#H}Wn5C3ADEsXm1Mht&G} zrD`JKv%c~^P=?GZjac3+;yIPnU-0{53Hr2FGM*ZKJxlG7V+>Zw$k zlWZck!*P*)c@2E0Ko|~XeMnY0ChGA@J;l-+;YE+ z{+F`>|NYMZaT|f+z`tn~s8T*QTN?wCTfk*(f#S!=Xbq@KQgd?N0o5=N^_Re(tVlsX z7YK-62~=XhJLH_5odM#nT0j*6;OZi$p8-$v2DGx|K)u!N;|{RL42o=i%!r7HAYgqZ z;xanA`tnU$CVd|e$O4_GgV_OavM+^$y4+IHwfHpz-S^Zu$1jQo7A`4FI4Z~ia-CE(=+;v*qa9+ zlDWBGtL*~=0Y~foZ+UInECG_yH;&7f!N^owuYeLn9Y_zy8yC!IBAKpk$UPIsJ6!^OBL)Jx=EapHP`dcpg!8UHXGbDb^S!J=~k1iqUnf%33&1NaHZvXK|m$ z@4X3r>!Ax=BRu5t9*H3{$2MfMk#x}ON!l_~LV)`lQPlQZql zCGM$qbx|x3Tl6UeO2GE@ZKgT1z&Km<}*%Hvkm z(GAXO3$)Sgn7-hq&|#I32)gJC_PIG2!q-gusqbDRtw2G0m8wf$%0(NgscDk9|FxwB z9ZJ!Om2FhQ$;O5xQ)yp$Txhp8KC0x5G_`^Itd^xEN~46%5vjEvFY5~9MsZd!t3pR0 z70~{}uEUnTN8GeS!;A=KIHX z?b{VF*Q5(@UqDd~bTo>AJ_L97<-pNw$u!#uA_NA5B}lvoi->dp4hytTxBALs^F#r$ zJ1QzFaOv&S^MAP$kWh64Z?QcXd9l{v4j4Y*9NmZcekOop1C0!~pFu1HZnqR;UpTt~ zv2frxXZs(Zkp_4^(6_D9saXVEesARm5H*%+4e!Y}2BHbsxs1NK0v-codcuGV3Q#cL z0kU?WBjyN*SJs@6f{V!CU%pU{d=lwqwZBDCRz{Ruj)ccvGfX)TD7gi3AGhp0<@TncJ za%W{_0o_7m$o_bS;a&ZHJcUUY`_Ikr|G!cF@mzu|<8JN>Y8vZ_hp%_X1}!d$~c zX2y^tp8G*7?qOS4n;xj|NMrh`y@O~iF$ zLK#Q7)_Qf}Wr1GX+nj=^}%*PCWZ0Q9`3>U-whobehjTQm%lA4onHG?f39lV*Gega3*5y z&DpU1sp{=XH2;v8&K`%%{O~8z{F7X0LSYr0h`pK@!PE2X?@x%=&8yLpD4? z)RED#(cNnMk~nL}ba8gBn?7W(b@JR?sLd)z$-rK} zI}_S-XZh1f&j*!#2#zA^>m#(dj#w7O#utL>Qnxkq6L2Dl#Qz@)PTo+D0t#^hkq0j z)z#|wqk>zMPl&{#AIDb6?XTNe%ZK9CnWHjdZ0(Qme27^gvccK-zHo4%6ppEga53vA zl)NB4hKBe;{u!7GvRq^#5+fUkNt--h{oFdEA98H6Rr^`m;;%IO3v83vjx}c!+BwQJVwEK-gm7Fcp*QVjL>01vFrUs%qjtodtX$Qfg=2{_- zy(E95>H6V0r*is(KUE?lokk){5uQS-ekqN;-5MvC`ko6@=06|uXv27AEI-C42gJ_7 zJpvgvb}Z5SvLDt(=6n0i9O7?u6EtRJ#?d@EIU7&PUDBozvD z-Nfefpm?4)?{a1lWxcS ze@Z!^TZtY`3Nmwiwbm1;dh}Z9cX~pPV#u*E34yV?OM?2FRyuytbNtARW!lgZde-r2 zmulq=E$0!eWS5G``Qy!_!d61{b@sp%(GP+?(BBrJmHW3l94Z=#t;g|O-QK~VQq8o^u%WrNYh zt1Q4V36=cua6t~O(R9~62PmG!dfj+F{6 zQ>p=i<6KDgbh=70g~@5XQ;>_RuCnszYJ{4a$4t^gnaiW6V`u3;Q256@PHVpm%+rwo zt|%|c#UiC&)t&!XF@3zc{0Q(bxJ8CjmsP8Vle7Tx*R*;+YK$Z z{Ls|D5nh+LoiBD-Wl%9>CKS4?Ek>6%vRK!T#uLF!%%s`z)x+ADKCX@mpZakk&Io#A zdKY-ycO#nvUnEL?NU|!xf=SOjKVf8iTv-$-=2;oQPUmJ;yWCI4t~o3`0bWPyUnLb{ zZcOuWg0vhbJ~5#XzxzUlExK*Wp6@dtAg34Fi8muXWKamP8w;1&_3`lmx-mdP@sRf< z(qgT0*B7jV5=9G>fntDmhrtk=emG=D&#&kY)iP&VXmm z8dGVUD@}KQcuQclrx@h4KJ6Pj2<3{vrQ+=NIToHCg)QUTc^s9`Fen;mI9JDK4+}ge zdHqPZCo?jk&T;R@=r%FU?y&WYKfBdZ!$|AVPM$;{{NY9+RDwO(;weA4hP3#}lROMY z5lOX@WHp9Rl^?H6{rC5`wTSaJBOmfP!g5yMN?A_UFHcD?LDY&SEyWGA2D5OWf-zCZ!%2dOQRjQRbr7`wsw|3^#F)sC zQ!2~3x0M?&%i-+|U+h44n$8_6r-pW;VSe|sWS4ma10&O!oX>s&rJ$+uClUMGN+?Dd zm5M=t&t^-^ow35ZZ(i^6S-nT&?o#@zpD@5pODx*3zE!~Sj zEDv-9z4g0=gOvC9)t_!|HhXcp2#x~B8l5uno zu2SkgaMFJn=%18Lhfd3USq--I6Za`gKPV-rPQDcM@INMjhjGR9_MDbn_=mx8=-}1o zlgv)Ovh~}AQ7hR6fVm90JoUKB!!R|{N^FOHEg?^Tw8kf@K zN^*(|;}Tkg7tN*kdJ!gW%lu;QaONTcn55`BY`dofBK7t5A<|{~G5#??b_WxAaAz({ zl4C-F&IBWGv`BdZN65u&ioC3fOnDj7#xviR!P}A+J=TTEQQA}(0$%0Vws00KrQAsB z-eH9%_0yBu2IIBo_d98w!7%AmAqtuOL%U68@b}gW%FBI8G76z|h&a0zz~+{ij_pqP zAX1ziZ8=*fk%f{ZdYWyKg_yQ~QAZH44PoOXTsoDllad&~%1R&!Hv=Y-#NkCzZ?u_y z>#(F-G>^T-D2tScQUn_N_8GKg*Z>(sLYSHSgM_I8Mxl+si2Q0*J+8;{w&fm-8($K_p=`&J(8H6K~9&_N}S@i{90lNU&??t^};Ajp9 z)2~77g5$gO%3=U-h7lgh0Py=i5HP$@=o=^CV_y-%L&^8MhWyGclY@(ARNuAMJD=dR`?SphFRedpMB$hk%Q&^YB432B4z9%vo7CWGmdE&6!b@QT zO$DAZ^;O{>Iw;>V;&;*3h1hPVJ?sk+vyN@C$!aJp6h1 zSEogH_F7KSbfW(cN@w(gZfR-ep=*9$wO7kUbCN^kwuwVlu;$iDiv zN_nrre6~8EsU9vZK>JSfmrSMA9fh(}3(lHzt^2P$Bx$-qq)4_EDNVOFGLO@fMdyW_ zR`)i4_tlsP>|nBaX-50Pt#wvC`D4Y|y~IWlaU9$m8|?T+%BQ{BPGi- z8s#VN69)Q3xzVW+QY{^@g~F>MRqko0Q}2+&q|u`8r2=fQx0b9%$;R<;gQQV;q7fiu zxc&Y`IABnmW7X)59yFB)5%&Q#9tQ6B{(a2T&xnI zI=-IO?ThqR>@bW}DTlDQBgA2i26CW=B&j^a1aGLPLW09P7mKFCK>3x)6n7l^_eS8^ zaho6&{!*J#R_^uvLjuYYyCHec_n;t7`VzLXT+czhuB7@rcoq=kh}UwxvSCaW-?N5jfa$q!&(WxzxO_-wBl)rrFJ=#orY zgJDvU6(^`}%i0aZ_z5MA*uOPR9Tg<>;;(<12eKlYBamI}kUO8^JiU(kK){x(*V7p^ zcUlohC!SF0z@Sa=-q4E$CKk?#D71|0vNg~D%~{^VRFD9R$x!jqSni<3WIz7meS3c) zb7OMhev!v)8`;mMHU<|3Z~@R~s;M>)cw1SER)lU;Gyo9T+b} zzD(waG6Er(T(@Xd5`|alTbYwuFaAQ z8*)K5CC+V-N`3RqN2$0qWS+YS41l_UT{;t!d|~c2ejBVhW5XmIZipjSoS|h2z1viBnC*%F zc?Vy?l@E%Dk=wVQ%MVwS@u7MlC33DzD4x}j4E~Tl>qGgy&|?fXGlQ4u!p4>a>fl7I z=*2FnF4Cpg=eWPyR%E$umPnwZUoAS*<+UK1-5C>_%Zcstl$1xi+ zbfHW|GK4W3{a@O_ZV+VcS*!ijy5f@ zO3lc0ovjYV>I{Z1M2kuDudU!h(ckW_AZZJL`7wHg(`K5n0#Q>TdToQG4D5sGeX|>^ zh(eil+O#sgqqLoHN=f-mdUtusjJCyJwvO%NDW`KHoUP#A}9S(*7=_%1e^ zs!o%c%+;w{8@LENlLwa0UvivXLOXbxsl@vG1nqvAL^^fuOBdy)O{ogOP zTxqqhr3ve|?GdM77zBWLg(@DER?^b$L87APR{g>^>JXDkwXDC>>gaoCY$U^i3ld22 zHa0UaHni88V&my~Ho)utM|Qd9N{MsIM3vew&JI1y;pDAV%Gdo9A$5W4xPF32*Og>! z4dhD6(FFHHlU(4e2Y@7ubUs4@#pqfq{xcdD)wV`p93Ux5CD{swdvztnL_SD;6BZhA zsX#|t({IIs=^HeVUh|%^ZZ(@3%dRLn9`*BX-6<~c9PrqcG^2G}if<3+Yo6ZpcsVj( z`GjF0+mo?_!@3%}tQ&D?S;#13nyfP^&_mI%l9T6rb!?{mZJTQf?aD8Jnj=CgJg3f} zVY@L=#jg^P)E6Md)61j1COz`NKZSG@ zBNNf2FhOM6-Q~a_i2i`IlvQ{;vSI0N><~zs4kizcOe9{_@q0d;}DQmH84z^&~dgwEOs`=0U7u*Lg}1RzhOgW2$==2{}cxtWz` zq&oX5epJK?hcc5o{EgI~$=7=pIxTHpjG(^Xyt($yNBfLqsCZ2>tR$))MI(!+$m?QZn_*bKj93LVu#8^j0!*EsvJeBA2iG4||3n#8bgP|@QyP#m0aDwtS# zLWF(6nAl1b5GGY(G6CIl>d6YM0G&?+k}+2c%q5ZKQ7PoK-~sbcBq>4yN>Hbc-!I(K z%5ddn9H6ANR}=^RGj9Ncnwpy*D6S$iGpkdFGcg!rzM4Y6plu-(BX40?SV}9A)JQ7G zNn4;~ZFcp?ED5!4qQ~#V6Je$qY%bZ)6z;l6#-8~T4-}H6veGmnrMzMss~1a0@$F_e z^4D`}y)^QY?)XZ@WZ6�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%0AXT}Fs#?45 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 Ah5!Hn literal 0 HcmV?d00001 From 1a0187ee1f9edfa899669c9d64f831b23d2bc910 Mon Sep 17 00:00:00 2001 From: Evgeny Blokhin Date: Wed, 10 Jul 2024 01:02:02 +0200 Subject: [PATCH 24/29] Fix a screenshot --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index a7824fc..65e29ef 100644 --- a/README.md +++ b/README.md @@ -7,7 +7,7 @@ Currently uses [cifplayer](https://github.com/tilde-lab/cifplayer) and data from paper](https://github.com/google-deepmind/materials_discovery). The physical properties prediction is done dynamically by [MPDS ML server](https://mpds.io/ml). -![GNome_d582d1239f_screenshot](https://github.com/mpds-io/this-material-does-not-exist/main/d582d1239f.png) +![GNome_d582d1239f_screenshot](https://raw.githubusercontent.com/mpds-io/this-material-does-not-exist/main/d582d1239f.png) ## Build From ee4d3a8df699dde0f0d322d64fe4d9bdb787d4e8 Mon Sep 17 00:00:00 2001 From: stan-donarise <111230475+stan-donarise@users.noreply.github.com> Date: Wed, 10 Jul 2024 12:10:58 +0300 Subject: [PATCH 25/29] fix swiped card movement (#5) * fix swiped card movement * fix url * async fetch * remove setTimeout * Update swipe.view.ts --- swipe/swipe.view.ts | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/swipe/swipe.view.ts b/swipe/swipe.view.ts index a517138..d2d0b49 100644 --- a/swipe/swipe.view.ts +++ b/swipe/swipe.view.ts @@ -1,6 +1,5 @@ namespace $.$$ { - export class $optimade_tmdne_swipe extends $.$optimade_tmdne_swipe { @ $mol_mem @@ -37,20 +36,20 @@ namespace $.$$ { move_to_middle() { this.transition( this.transition_smooth() ) - this.swiped_to('') this.x( 0 ) + this.swiped_to('') } swipe_to_right() { this.transition( this.transition_smooth() ) - this.swiped_to( 'right' ) this.x( this.swipe_distance() ) + this.swiped_to( 'right' ) } swipe_to_left() { this.transition( this.transition_smooth() ) - this.swiped_to( 'left' ) this.x( - this.swipe_distance() ) + this.swiped_to( 'left' ) } @ $mol_mem From e88fa0963e657a67852d04fe5113be34b5ccb1e9 Mon Sep 17 00:00:00 2001 From: "stan.donarise" Date: Wed, 10 Jul 2024 13:54:30 +0300 Subject: [PATCH 26/29] request body instead of query string --- app/app.view.ts | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/app/app.view.ts b/app/app.view.ts index 4961a43..a4b1b9c 100644 --- a/app/app.view.ts +++ b/app/app.view.ts @@ -14,10 +14,14 @@ namespace $.$$ { const structure = JSON.stringify( this.fetch_by_number( number ) ) const params = new URLSearchParams({ structure }) - const url = `https://labs.mpds.io/predict?${ params.toString() }` + const url = `https://labs.mpds.io/predict` const prediction = this.$.$mol_wire_sync( this ).$.$mol_fetch.success( url, { method: 'post', + headers: { + "Content-Type": "application/x-www-form-urlencoded", + }, + body: params.toString(), } ).json() ?? {} as any return prediction From a28a7df7eb42cf22f725972632d0f6fb46fa6543 Mon Sep 17 00:00:00 2001 From: "stan.donarise" Date: Mon, 29 Jul 2024 10:44:42 +0300 Subject: [PATCH 27/29] fix excess fetch on start --- app/app.view.tree | 2 -- app/app.view.ts | 14 ++++++++++++-- 2 files changed, 12 insertions(+), 4 deletions(-) diff --git a/app/app.view.tree b/app/app.view.tree index e6fa209..8105fb4 100644 --- a/app/app.view.tree +++ b/app/app.view.tree @@ -3,8 +3,6 @@ $optimade_tmdne_app $mol_view number? 1 plugins / <= Theme $mol_theme_auto - auto / - <= update null rotating? false number_swiped? 0 number_prefetch? 0 diff --git a/app/app.view.ts b/app/app.view.ts index a4b1b9c..2ebdeb0 100644 --- a/app/app.view.ts +++ b/app/app.view.ts @@ -59,16 +59,26 @@ namespace $.$$ { ] } + @ $mol_action + random_number() { + return random_int( 1, 384937 ) + } + + @ $mol_mem + number( next?: number ): number { + return next ?? this.random_number() + } + @ $mol_mem number_prefetch( next?: number ): number { - return next ?? random_int( 1, 384937 ) + return next ?? this.random_number() } @ $mol_action update() { this.number_swiped( this.number() ) this.number( this.number_prefetch() ) - const prefetch = random_int( 1, 384937 ) + const prefetch = this.random_number() this.number_prefetch( prefetch ) $mol_wire_async( this ).predict_by_number( prefetch ) } From b5f35505a72a294d64085fc27e13d4e2c49ae436 Mon Sep 17 00:00:00 2001 From: "stan.donarise" Date: Mon, 29 Jul 2024 10:46:41 +0300 Subject: [PATCH 28/29] fqn attrs --- app/app.view.css.ts | 6 +++--- app/app.view.tree | 6 +++--- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/app/app.view.css.ts b/app/app.view.css.ts index b8a0892..31010bc 100644 --- a/app/app.view.css.ts +++ b/app/app.view.css.ts @@ -17,7 +17,7 @@ namespace $.$$ { width: '100%', opacity: 1, transition: 'opacity 0.15s', - '[card_holding]': { + '[optimade_tmdne_app_player_hidden]': { 'true': { opacity: 0.1, }, @@ -68,7 +68,7 @@ namespace $.$$ { pointerEvents: 'none', opacity: 1, transition: 'opacity 0.15s', - '[rotating]': { + '[optimade_tmdne_app_prediction_hidden]': { 'true': { opacity: 0, }, @@ -121,7 +121,7 @@ namespace $.$$ { pointerEvents: 'none', transition: 'opacity 0.2s', opacity: 1, - '[rotating]': { + '[optimade_tmdne_app_foot_hidden]': { 'true': { opacity: 0, }, diff --git a/app/app.view.tree b/app/app.view.tree index 8105fb4..da5a6de 100644 --- a/app/app.view.tree +++ b/app/app.view.tree @@ -11,7 +11,7 @@ $optimade_tmdne_app $mol_view fullscreen? => player_fullscreen? attr * fullscreen <= player_fullscreen? - card_holding <= card_holding + optimade_tmdne_app_player_hidden <= card_holding data <= json null Fullscreen null Overlays null @@ -26,7 +26,7 @@ $optimade_tmdne_app $mol_view title \Does this material exist? <= Prediction $mol_list attr * - rotating <= rotating + optimade_tmdne_app_prediction_hidden <= rotating sub <= params / <= Param* $mol_view sub / @@ -52,7 +52,7 @@ $optimade_tmdne_app $mol_view \) <= Foot $mol_view attr * - rotating <= rotating + optimade_tmdne_app_foot_hidden <= rotating sub / <= Hint_no $mol_button_minor title \ᐊ No From 10f861829b58b36d58369bd7e4beaf513bdf9dc6 Mon Sep 17 00:00:00 2001 From: Evgeny Blokhin Date: Mon, 29 Jul 2024 11:49:35 +0200 Subject: [PATCH 29/29] Rename random_number -> random_sample --- app/app.view.ts | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/app/app.view.ts b/app/app.view.ts index 2ebdeb0..425935f 100644 --- a/app/app.view.ts +++ b/app/app.view.ts @@ -60,25 +60,25 @@ namespace $.$$ { } @ $mol_action - random_number() { + random_sample() { return random_int( 1, 384937 ) } @ $mol_mem number( next?: number ): number { - return next ?? this.random_number() + return next ?? this.random_sample() } @ $mol_mem number_prefetch( next?: number ): number { - return next ?? this.random_number() + return next ?? this.random_sample() } @ $mol_action update() { this.number_swiped( this.number() ) this.number( this.number_prefetch() ) - const prefetch = this.random_number() + const prefetch = this.random_sample() this.number_prefetch( prefetch ) $mol_wire_async( this ).predict_by_number( prefetch ) }