From f3a93b3508e5ecd11285c1f70ac4aaad3264b6c0 Mon Sep 17 00:00:00 2001 From: Ettore Leandro Tognoli Date: Fri, 9 Feb 2024 19:10:39 -0300 Subject: [PATCH 01/20] add pr workflow --- .github/workflows/pr-check.yml | 79 +++++ Pipfile | 4 +- Pipfile.lock | 524 +++++++++++++++++++++++++++++++++ 3 files changed, 606 insertions(+), 1 deletion(-) create mode 100644 .github/workflows/pr-check.yml create mode 100644 Pipfile.lock diff --git a/.github/workflows/pr-check.yml b/.github/workflows/pr-check.yml new file mode 100644 index 0000000..726faa1 --- /dev/null +++ b/.github/workflows/pr-check.yml @@ -0,0 +1,79 @@ +name: "Check Pull Request" + +on: + pull_request: + branches: + - main + - master + +jobs: + lint: + name: "Checking format" + runs-on: ubuntu-latest + steps: + - name: Check out repository code + uses: actions/checkout@v2 + - name: Setup Python + uses: actions/setup-python@v2 + with: + python-version: "3.10" + - name: Install pipenv + run: | + python -m pip install --upgrade pipenv wheel + - id: cache-pipenv + uses: actions/cache@v1 + with: + path: ~/.local/share/virtualenvs + key: ${{ runner.os }}-pipenv-${{ hashFiles('**/Pipfile.lock') }} + - name: Install dependencies + if: steps.cache-pipenv.outputs.cache-hit != 'true' + run: | + pipenv install --dev + - name: Run lint + run: | + pipenv run format || (echo "::error file={name},line={line},endLine={endLine},title={title}::{message}" && exit 1) + + test: + name: "Running tests" + runs-on: ubuntu-latest + steps: + - name: Check out repository code + uses: actions/checkout@v2 + - name: Setup Python + uses: actions/setup-python@v2 + with: + python-version: "3.10" + - name: Install pipenv + run: | + python -m pip install --upgrade pipenv wheel + - id: cache-pipenv + uses: actions/cache@v1 + with: + path: ~/.local/share/virtualenvs + key: ${{ runner.os }}-pipenv-${{ hashFiles('**/Pipfile.lock') }} + - name: Install dependencies + if: steps.cache-pipenv.outputs.cache-hit != 'true' + run: | + pipenv install --dev + - name: Run test suite + run: | + pipenv run coverage + - name: Get Cover + uses: orgoro/coverage@v3.1 + with: + coverageFile: coverage.xml + token: ${{ secrets.PR_GITHUB_TOKEN }} + + install-test: + name: "Install" + runs-on: ubuntu-latest + steps: + - name: Check out repository code + uses: actions/checkout@v2 + - name: Setup Python + uses: actions/setup-python@v2 + with: + python-version: "3.10" + - name: Install project + run: | + python -m pip install ./ diff --git a/Pipfile b/Pipfile index 1f55f1b..0543626 100644 --- a/Pipfile +++ b/Pipfile @@ -12,10 +12,12 @@ ntplib = "*" [dev-packages] autopep8 = "*" +coverage = "*" [requires] python_version = "3.10" [scripts] test = "python -m unittest discover -s test_ensta/ -t ." -format = "autopep8 --in-place --recursive ." +format = "autopep8 --exit-code ." +coverage = "sh -c 'coverage run -m unittest discover -s test_ensta/ -t . && coverage xml'" \ No newline at end of file diff --git a/Pipfile.lock b/Pipfile.lock new file mode 100644 index 0000000..e19d5dc --- /dev/null +++ b/Pipfile.lock @@ -0,0 +1,524 @@ +{ + "_meta": { + "hash": { + "sha256": "cdaeed0987463ef5278d96ad42e65d7b37a8b4e54dada0700be469bb7554920f" + }, + "pipfile-spec": 6, + "requires": { + "python_version": "3.10" + }, + "sources": [ + { + "name": "pypi", + "url": "https://pypi.org/simple", + "verify_ssl": true + } + ] + }, + "default": { + "certifi": { + "hashes": [ + "sha256:0569859f95fc761b18b45ef421b1290a0f65f147e92a1e5eb3e635f9a5e4e66f", + "sha256:dc383c07b76109f368f6106eee2b593b04a011ea4d55f652c6ca24a754d1cdd1" + ], + "markers": "python_version >= '3.6'", + "version": "==2024.2.2" + }, + "cffi": { + "hashes": [ + "sha256:0c9ef6ff37e974b73c25eecc13952c55bceed9112be2d9d938ded8e856138bcc", + "sha256:131fd094d1065b19540c3d72594260f118b231090295d8c34e19a7bbcf2e860a", + "sha256:1b8ebc27c014c59692bb2664c7d13ce7a6e9a629be20e54e7271fa696ff2b417", + "sha256:2c56b361916f390cd758a57f2e16233eb4f64bcbeee88a4881ea90fca14dc6ab", + "sha256:2d92b25dbf6cae33f65005baf472d2c245c050b1ce709cc4588cdcdd5495b520", + "sha256:31d13b0f99e0836b7ff893d37af07366ebc90b678b6664c955b54561fc36ef36", + "sha256:32c68ef735dbe5857c810328cb2481e24722a59a2003018885514d4c09af9743", + "sha256:3686dffb02459559c74dd3d81748269ffb0eb027c39a6fc99502de37d501faa8", + "sha256:582215a0e9adbe0e379761260553ba11c58943e4bbe9c36430c4ca6ac74b15ed", + "sha256:5b50bf3f55561dac5438f8e70bfcdfd74543fd60df5fa5f62d94e5867deca684", + "sha256:5bf44d66cdf9e893637896c7faa22298baebcd18d1ddb6d2626a6e39793a1d56", + "sha256:6602bc8dc6f3a9e02b6c22c4fc1e47aa50f8f8e6d3f78a5e16ac33ef5fefa324", + "sha256:673739cb539f8cdaa07d92d02efa93c9ccf87e345b9a0b556e3ecc666718468d", + "sha256:68678abf380b42ce21a5f2abde8efee05c114c2fdb2e9eef2efdb0257fba1235", + "sha256:68e7c44931cc171c54ccb702482e9fc723192e88d25a0e133edd7aff8fcd1f6e", + "sha256:6b3d6606d369fc1da4fd8c357d026317fbb9c9b75d36dc16e90e84c26854b088", + "sha256:748dcd1e3d3d7cd5443ef03ce8685043294ad6bd7c02a38d1bd367cfd968e000", + "sha256:7651c50c8c5ef7bdb41108b7b8c5a83013bfaa8a935590c5d74627c047a583c7", + "sha256:7b78010e7b97fef4bee1e896df8a4bbb6712b7f05b7ef630f9d1da00f6444d2e", + "sha256:7e61e3e4fa664a8588aa25c883eab612a188c725755afff6289454d6362b9673", + "sha256:80876338e19c951fdfed6198e70bc88f1c9758b94578d5a7c4c91a87af3cf31c", + "sha256:8895613bcc094d4a1b2dbe179d88d7fb4a15cee43c052e8885783fac397d91fe", + "sha256:88e2b3c14bdb32e440be531ade29d3c50a1a59cd4e51b1dd8b0865c54ea5d2e2", + "sha256:8f8e709127c6c77446a8c0a8c8bf3c8ee706a06cd44b1e827c3e6a2ee6b8c098", + "sha256:9cb4a35b3642fc5c005a6755a5d17c6c8b6bcb6981baf81cea8bfbc8903e8ba8", + "sha256:9f90389693731ff1f659e55c7d1640e2ec43ff725cc61b04b2f9c6d8d017df6a", + "sha256:a09582f178759ee8128d9270cd1344154fd473bb77d94ce0aeb2a93ebf0feaf0", + "sha256:a6a14b17d7e17fa0d207ac08642c8820f84f25ce17a442fd15e27ea18d67c59b", + "sha256:a72e8961a86d19bdb45851d8f1f08b041ea37d2bd8d4fd19903bc3083d80c896", + "sha256:abd808f9c129ba2beda4cfc53bde801e5bcf9d6e0f22f095e45327c038bfe68e", + "sha256:ac0f5edd2360eea2f1daa9e26a41db02dd4b0451b48f7c318e217ee092a213e9", + "sha256:b29ebffcf550f9da55bec9e02ad430c992a87e5f512cd63388abb76f1036d8d2", + "sha256:b2ca4e77f9f47c55c194982e10f058db063937845bb2b7a86c84a6cfe0aefa8b", + "sha256:b7be2d771cdba2942e13215c4e340bfd76398e9227ad10402a8767ab1865d2e6", + "sha256:b84834d0cf97e7d27dd5b7f3aca7b6e9263c56308ab9dc8aae9784abb774d404", + "sha256:b86851a328eedc692acf81fb05444bdf1891747c25af7529e39ddafaf68a4f3f", + "sha256:bcb3ef43e58665bbda2fb198698fcae6776483e0c4a631aa5647806c25e02cc0", + "sha256:c0f31130ebc2d37cdd8e44605fb5fa7ad59049298b3f745c74fa74c62fbfcfc4", + "sha256:c6a164aa47843fb1b01e941d385aab7215563bb8816d80ff3a363a9f8448a8dc", + "sha256:d8a9d3ebe49f084ad71f9269834ceccbf398253c9fac910c4fd7053ff1386936", + "sha256:db8e577c19c0fda0beb7e0d4e09e0ba74b1e4c092e0e40bfa12fe05b6f6d75ba", + "sha256:dc9b18bf40cc75f66f40a7379f6a9513244fe33c0e8aa72e2d56b0196a7ef872", + "sha256:e09f3ff613345df5e8c3667da1d918f9149bd623cd9070c983c013792a9a62eb", + "sha256:e4108df7fe9b707191e55f33efbcb2d81928e10cea45527879a4749cbe472614", + "sha256:e6024675e67af929088fda399b2094574609396b1decb609c55fa58b028a32a1", + "sha256:e70f54f1796669ef691ca07d046cd81a29cb4deb1e5f942003f401c0c4a2695d", + "sha256:e715596e683d2ce000574bae5d07bd522c781a822866c20495e52520564f0969", + "sha256:e760191dd42581e023a68b758769e2da259b5d52e3103c6060ddc02c9edb8d7b", + "sha256:ed86a35631f7bfbb28e108dd96773b9d5a6ce4811cf6ea468bb6a359b256b1e4", + "sha256:ee07e47c12890ef248766a6e55bd38ebfb2bb8edd4142d56db91b21ea68b7627", + "sha256:fa3a0128b152627161ce47201262d3140edb5a5c3da88d73a1b790a959126956", + "sha256:fcc8eb6d5902bb1cf6dc4f187ee3ea80a1eba0a89aba40a5cb20a5087d961357" + ], + "markers": "platform_python_implementation != 'PyPy'", + "version": "==1.16.0" + }, + "charset-normalizer": { + "hashes": [ + "sha256:06435b539f889b1f6f4ac1758871aae42dc3a8c0e24ac9e60c2384973ad73027", + "sha256:06a81e93cd441c56a9b65d8e1d043daeb97a3d0856d177d5c90ba85acb3db087", + "sha256:0a55554a2fa0d408816b3b5cedf0045f4b8e1a6065aec45849de2d6f3f8e9786", + "sha256:0b2b64d2bb6d3fb9112bafa732def486049e63de9618b5843bcdd081d8144cd8", + "sha256:10955842570876604d404661fbccbc9c7e684caf432c09c715ec38fbae45ae09", + "sha256:122c7fa62b130ed55f8f285bfd56d5f4b4a5b503609d181f9ad85e55c89f4185", + "sha256:1ceae2f17a9c33cb48e3263960dc5fc8005351ee19db217e9b1bb15d28c02574", + "sha256:1d3193f4a680c64b4b6a9115943538edb896edc190f0b222e73761716519268e", + "sha256:1f79682fbe303db92bc2b1136016a38a42e835d932bab5b3b1bfcfbf0640e519", + "sha256:2127566c664442652f024c837091890cb1942c30937add288223dc895793f898", + "sha256:22afcb9f253dac0696b5a4be4a1c0f8762f8239e21b99680099abd9b2b1b2269", + "sha256:25baf083bf6f6b341f4121c2f3c548875ee6f5339300e08be3f2b2ba1721cdd3", + "sha256:2e81c7b9c8979ce92ed306c249d46894776a909505d8f5a4ba55b14206e3222f", + "sha256:3287761bc4ee9e33561a7e058c72ac0938c4f57fe49a09eae428fd88aafe7bb6", + "sha256:34d1c8da1e78d2e001f363791c98a272bb734000fcef47a491c1e3b0505657a8", + "sha256:37e55c8e51c236f95b033f6fb391d7d7970ba5fe7ff453dad675e88cf303377a", + "sha256:3d47fa203a7bd9c5b6cee4736ee84ca03b8ef23193c0d1ca99b5089f72645c73", + "sha256:3e4d1f6587322d2788836a99c69062fbb091331ec940e02d12d179c1d53e25fc", + "sha256:42cb296636fcc8b0644486d15c12376cb9fa75443e00fb25de0b8602e64c1714", + "sha256:45485e01ff4d3630ec0d9617310448a8702f70e9c01906b0d0118bdf9d124cf2", + "sha256:4a78b2b446bd7c934f5dcedc588903fb2f5eec172f3d29e52a9096a43722adfc", + "sha256:4ab2fe47fae9e0f9dee8c04187ce5d09f48eabe611be8259444906793ab7cbce", + "sha256:4d0d1650369165a14e14e1e47b372cfcb31d6ab44e6e33cb2d4e57265290044d", + "sha256:549a3a73da901d5bc3ce8d24e0600d1fa85524c10287f6004fbab87672bf3e1e", + "sha256:55086ee1064215781fff39a1af09518bc9255b50d6333f2e4c74ca09fac6a8f6", + "sha256:572c3763a264ba47b3cf708a44ce965d98555f618ca42c926a9c1616d8f34269", + "sha256:573f6eac48f4769d667c4442081b1794f52919e7edada77495aaed9236d13a96", + "sha256:5b4c145409bef602a690e7cfad0a15a55c13320ff7a3ad7ca59c13bb8ba4d45d", + "sha256:6463effa3186ea09411d50efc7d85360b38d5f09b870c48e4600f63af490e56a", + "sha256:65f6f63034100ead094b8744b3b97965785388f308a64cf8d7c34f2f2e5be0c4", + "sha256:663946639d296df6a2bb2aa51b60a2454ca1cb29835324c640dafb5ff2131a77", + "sha256:6897af51655e3691ff853668779c7bad41579facacf5fd7253b0133308cf000d", + "sha256:68d1f8a9e9e37c1223b656399be5d6b448dea850bed7d0f87a8311f1ff3dabb0", + "sha256:6ac7ffc7ad6d040517be39eb591cac5ff87416c2537df6ba3cba3bae290c0fed", + "sha256:6b3251890fff30ee142c44144871185dbe13b11bab478a88887a639655be1068", + "sha256:6c4caeef8fa63d06bd437cd4bdcf3ffefe6738fb1b25951440d80dc7df8c03ac", + "sha256:6ef1d82a3af9d3eecdba2321dc1b3c238245d890843e040e41e470ffa64c3e25", + "sha256:753f10e867343b4511128c6ed8c82f7bec3bd026875576dfd88483c5c73b2fd8", + "sha256:7cd13a2e3ddeed6913a65e66e94b51d80a041145a026c27e6bb76c31a853c6ab", + "sha256:7ed9e526742851e8d5cc9e6cf41427dfc6068d4f5a3bb03659444b4cabf6bc26", + "sha256:7f04c839ed0b6b98b1a7501a002144b76c18fb1c1850c8b98d458ac269e26ed2", + "sha256:802fe99cca7457642125a8a88a084cef28ff0cf9407060f7b93dca5aa25480db", + "sha256:80402cd6ee291dcb72644d6eac93785fe2c8b9cb30893c1af5b8fdd753b9d40f", + "sha256:8465322196c8b4d7ab6d1e049e4c5cb460d0394da4a27d23cc242fbf0034b6b5", + "sha256:86216b5cee4b06df986d214f664305142d9c76df9b6512be2738aa72a2048f99", + "sha256:87d1351268731db79e0f8e745d92493ee2841c974128ef629dc518b937d9194c", + "sha256:8bdb58ff7ba23002a4c5808d608e4e6c687175724f54a5dade5fa8c67b604e4d", + "sha256:8c622a5fe39a48f78944a87d4fb8a53ee07344641b0562c540d840748571b811", + "sha256:8d756e44e94489e49571086ef83b2bb8ce311e730092d2c34ca8f7d925cb20aa", + "sha256:8f4a014bc36d3c57402e2977dada34f9c12300af536839dc38c0beab8878f38a", + "sha256:9063e24fdb1e498ab71cb7419e24622516c4a04476b17a2dab57e8baa30d6e03", + "sha256:90d558489962fd4918143277a773316e56c72da56ec7aa3dc3dbbe20fdfed15b", + "sha256:923c0c831b7cfcb071580d3f46c4baf50f174be571576556269530f4bbd79d04", + "sha256:95f2a5796329323b8f0512e09dbb7a1860c46a39da62ecb2324f116fa8fdc85c", + "sha256:96b02a3dc4381e5494fad39be677abcb5e6634bf7b4fa83a6dd3112607547001", + "sha256:9f96df6923e21816da7e0ad3fd47dd8f94b2a5ce594e00677c0013018b813458", + "sha256:a10af20b82360ab00827f916a6058451b723b4e65030c5a18577c8b2de5b3389", + "sha256:a50aebfa173e157099939b17f18600f72f84eed3049e743b68ad15bd69b6bf99", + "sha256:a981a536974bbc7a512cf44ed14938cf01030a99e9b3a06dd59578882f06f985", + "sha256:a9a8e9031d613fd2009c182b69c7b2c1ef8239a0efb1df3f7c8da66d5dd3d537", + "sha256:ae5f4161f18c61806f411a13b0310bea87f987c7d2ecdbdaad0e94eb2e404238", + "sha256:aed38f6e4fb3f5d6bf81bfa990a07806be9d83cf7bacef998ab1a9bd660a581f", + "sha256:b01b88d45a6fcb69667cd6d2f7a9aeb4bf53760d7fc536bf679ec94fe9f3ff3d", + "sha256:b261ccdec7821281dade748d088bb6e9b69e6d15b30652b74cbbac25e280b796", + "sha256:b2b0a0c0517616b6869869f8c581d4eb2dd83a4d79e0ebcb7d373ef9956aeb0a", + "sha256:b4a23f61ce87adf89be746c8a8974fe1c823c891d8f86eb218bb957c924bb143", + "sha256:bd8f7df7d12c2db9fab40bdd87a7c09b1530128315d047a086fa3ae3435cb3a8", + "sha256:beb58fe5cdb101e3a055192ac291b7a21e3b7ef4f67fa1d74e331a7f2124341c", + "sha256:c002b4ffc0be611f0d9da932eb0f704fe2602a9a949d1f738e4c34c75b0863d5", + "sha256:c083af607d2515612056a31f0a8d9e0fcb5876b7bfc0abad3ecd275bc4ebc2d5", + "sha256:c180f51afb394e165eafe4ac2936a14bee3eb10debc9d9e4db8958fe36afe711", + "sha256:c235ebd9baae02f1b77bcea61bce332cb4331dc3617d254df3323aa01ab47bd4", + "sha256:cd70574b12bb8a4d2aaa0094515df2463cb429d8536cfb6c7ce983246983e5a6", + "sha256:d0eccceffcb53201b5bfebb52600a5fb483a20b61da9dbc885f8b103cbe7598c", + "sha256:d965bba47ddeec8cd560687584e88cf699fd28f192ceb452d1d7ee807c5597b7", + "sha256:db364eca23f876da6f9e16c9da0df51aa4f104a972735574842618b8c6d999d4", + "sha256:ddbb2551d7e0102e7252db79ba445cdab71b26640817ab1e3e3648dad515003b", + "sha256:deb6be0ac38ece9ba87dea880e438f25ca3eddfac8b002a2ec3d9183a454e8ae", + "sha256:e06ed3eb3218bc64786f7db41917d4e686cc4856944f53d5bdf83a6884432e12", + "sha256:e27ad930a842b4c5eb8ac0016b0a54f5aebbe679340c26101df33424142c143c", + "sha256:e537484df0d8f426ce2afb2d0f8e1c3d0b114b83f8850e5f2fbea0e797bd82ae", + "sha256:eb00ed941194665c332bf8e078baf037d6c35d7c4f3102ea2d4f16ca94a26dc8", + "sha256:eb6904c354526e758fda7167b33005998fb68c46fbc10e013ca97f21ca5c8887", + "sha256:eb8821e09e916165e160797a6c17edda0679379a4be5c716c260e836e122f54b", + "sha256:efcb3f6676480691518c177e3b465bcddf57cea040302f9f4e6e191af91174d4", + "sha256:f27273b60488abe721a075bcca6d7f3964f9f6f067c8c4c605743023d7d3944f", + "sha256:f30c3cb33b24454a82faecaf01b19c18562b1e89558fb6c56de4d9118a032fd5", + "sha256:fb69256e180cb6c8a894fee62b3afebae785babc1ee98b81cdf68bbca1987f33", + "sha256:fd1abc0d89e30cc4e02e4064dc67fcc51bd941eb395c502aac3ec19fab46b519", + "sha256:ff8fa367d09b717b2a17a052544193ad76cd49979c805768879cb63d9ca50561" + ], + "markers": "python_full_version >= '3.7.0'", + "version": "==3.3.2" + }, + "cryptography": { + "hashes": [ + "sha256:087887e55e0b9c8724cf05361357875adb5c20dec27e5816b653492980d20380", + "sha256:09a77e5b2e8ca732a19a90c5bca2d124621a1edb5438c5daa2d2738bfeb02589", + "sha256:130c0f77022b2b9c99d8cebcdd834d81705f61c68e91ddd614ce74c657f8b3ea", + "sha256:141e2aa5ba100d3788c0ad7919b288f89d1fe015878b9659b307c9ef867d3a65", + "sha256:28cb2c41f131a5758d6ba6a0504150d644054fd9f3203a1e8e8d7ac3aea7f73a", + "sha256:2f9f14185962e6a04ab32d1abe34eae8a9001569ee4edb64d2304bf0d65c53f3", + "sha256:320948ab49883557a256eab46149df79435a22d2fefd6a66fe6946f1b9d9d008", + "sha256:36d4b7c4be6411f58f60d9ce555a73df8406d484ba12a63549c88bd64f7967f1", + "sha256:3b15c678f27d66d247132cbf13df2f75255627bcc9b6a570f7d2fd08e8c081d2", + "sha256:3dbd37e14ce795b4af61b89b037d4bc157f2cb23e676fa16932185a04dfbf635", + "sha256:4383b47f45b14459cab66048d384614019965ba6c1a1a141f11b5a551cace1b2", + "sha256:44c95c0e96b3cb628e8452ec060413a49002a247b2b9938989e23a2c8291fc90", + "sha256:4b063d3413f853e056161eb0c7724822a9740ad3caa24b8424d776cebf98e7ee", + "sha256:52ed9ebf8ac602385126c9a2fe951db36f2cb0c2538d22971487f89d0de4065a", + "sha256:55d1580e2d7e17f45d19d3b12098e352f3a37fe86d380bf45846ef257054b242", + "sha256:5ef9bc3d046ce83c4bbf4c25e1e0547b9c441c01d30922d812e887dc5f125c12", + "sha256:5fa82a26f92871eca593b53359c12ad7949772462f887c35edaf36f87953c0e2", + "sha256:61321672b3ac7aade25c40449ccedbc6db72c7f5f0fdf34def5e2f8b51ca530d", + "sha256:701171f825dcab90969596ce2af253143b93b08f1a716d4b2a9d2db5084ef7be", + "sha256:841ec8af7a8491ac76ec5a9522226e287187a3107e12b7d686ad354bb78facee", + "sha256:8a06641fb07d4e8f6c7dda4fc3f8871d327803ab6542e33831c7ccfdcb4d0ad6", + "sha256:8e88bb9eafbf6a4014d55fb222e7360eef53e613215085e65a13290577394529", + "sha256:a00aee5d1b6c20620161984f8ab2ab69134466c51f58c052c11b076715e72929", + "sha256:a047682d324ba56e61b7ea7c7299d51e61fd3bca7dad2ccc39b72bd0118d60a1", + "sha256:a7ef8dd0bf2e1d0a27042b231a3baac6883cdd5557036f5e8df7139255feaac6", + "sha256:ad28cff53f60d99a928dfcf1e861e0b2ceb2bc1f08a074fdd601b314e1cc9e0a", + "sha256:b9097a208875fc7bbeb1286d0125d90bdfed961f61f214d3f5be62cd4ed8a446", + "sha256:b97fe7d7991c25e6a31e5d5e795986b18fbbb3107b873d5f3ae6dc9a103278e9", + "sha256:e0ec52ba3c7f1b7d813cd52649a5b3ef1fc0d433219dc8c93827c57eab6cf888", + "sha256:ea2c3ffb662fec8bbbfce5602e2c159ff097a4631d96235fcf0fb00e59e3ece4", + "sha256:fa3dec4ba8fb6e662770b74f62f1a0c7d4e37e25b58b2bf2c1be4c95372b4a33", + "sha256:fbeb725c9dc799a574518109336acccaf1303c30d45c075c665c0793c2f79a7f" + ], + "index": "pypi", + "version": "==42.0.2" + }, + "decorator": { + "hashes": [ + "sha256:41fa54c2a0cc4ba648be4fd43cff00aedf5b9465c9bf18d64325bc225f08f760", + "sha256:e3a62f0520172440ca0dcc823749319382e377f37f140a0b99ef45fecb84bfe7" + ], + "version": "==4.4.2" + }, + "idna": { + "hashes": [ + "sha256:9ecdbbd083b06798ae1e86adcbfe8ab1479cf864e4ee30fe4e46a003d12491ca", + "sha256:c05567e9c24a6b9faaa835c4821bad0590fbb9d5779e7caa6e1cc4978e7eb24f" + ], + "markers": "python_version >= '3.5'", + "version": "==3.6" + }, + "imageio": { + "hashes": [ + "sha256:78722d40b137bd98f5ec7312119f8aea9ad2049f76f434748eb306b6937cc1ce", + "sha256:c5094c48ccf6b2e6da8b4061cd95e1209380afafcbeae4a4e280938cce227e1d" + ], + "markers": "python_version >= '3.4'", + "version": "==2.33.1" + }, + "imageio-ffmpeg": { + "hashes": [ + "sha256:24095e882a126a0d217197b86265f821b4bb3cf9004104f67c1384a2b4b49168", + "sha256:2996c64af3e5489227096580269317719ea1a8121d207f2e28d6c24ebc4a253e", + "sha256:39bcd1660118ef360fa4047456501071364661aa9d9021d3d26c58f1ee2081f5", + "sha256:7e900c695c6541b1cb17feb1baacd4009b30a53a45b81c23d53a67ab13ffb766", + "sha256:7eead662d2f46d748c0ab446b68f423eb63d2b54d0a8ef96f80607245540866d", + "sha256:b6de1e18911687c538d5585d8287ab1a23624ca9dc2044fcc4607de667bcf11e" + ], + "markers": "python_version >= '3.4'", + "version": "==0.4.9" + }, + "moviepy": { + "hashes": [ + "sha256:2884e35d1788077db3ff89e763c5ba7bfddbd7ae9108c9bc809e7ba58fa433f5" + ], + "index": "pypi", + "version": "==1.0.3" + }, + "ntplib": { + "hashes": [ + "sha256:899d8fb5f8c2555213aea95efca02934c7343df6ace9d7628a5176b176906267", + "sha256:8d27375329ed7ff38755f7b6d4658b28edc147cadf40338a63a0da8133469d60" + ], + "index": "pypi", + "version": "==0.4.0" + }, + "numpy": { + "hashes": [ + "sha256:03a8c78d01d9781b28a6989f6fa1bb2c4f2d51201cf99d3dd875df6fbd96b23b", + "sha256:08beddf13648eb95f8d867350f6a018a4be2e5ad54c8d8caed89ebca558b2818", + "sha256:1af303d6b2210eb850fcf03064d364652b7120803a0b872f5211f5234b399f20", + "sha256:1dda2e7b4ec9dd512f84935c5f126c8bd8b9f2fc001e9f54af255e8c5f16b0e0", + "sha256:2a02aba9ed12e4ac4eb3ea9421c420301a0c6460d9830d74a9df87efa4912010", + "sha256:2e4ee3380d6de9c9ec04745830fd9e2eccb3e6cf790d39d7b98ffd19b0dd754a", + "sha256:3373d5d70a5fe74a2c1bb6d2cfd9609ecf686d47a2d7b1d37a8f3b6bf6003aea", + "sha256:47711010ad8555514b434df65f7d7b076bb8261df1ca9bb78f53d3b2db02e95c", + "sha256:4c66707fabe114439db9068ee468c26bbdf909cac0fb58686a42a24de1760c71", + "sha256:50193e430acfc1346175fcbdaa28ffec49947a06918b7b92130744e81e640110", + "sha256:52b8b60467cd7dd1e9ed082188b4e6bb35aa5cdd01777621a1658910745b90be", + "sha256:60dedbb91afcbfdc9bc0b1f3f402804070deed7392c23eb7a7f07fa857868e8a", + "sha256:62b8e4b1e28009ef2846b4c7852046736bab361f7aeadeb6a5b89ebec3c7055a", + "sha256:666dbfb6ec68962c033a450943ded891bed2d54e6755e35e5835d63f4f6931d5", + "sha256:675d61ffbfa78604709862923189bad94014bef562cc35cf61d3a07bba02a7ed", + "sha256:679b0076f67ecc0138fd2ede3a8fd196dddc2ad3254069bcb9faf9a79b1cebcd", + "sha256:7349ab0fa0c429c82442a27a9673fc802ffdb7c7775fad780226cb234965e53c", + "sha256:7ab55401287bfec946ced39700c053796e7cc0e3acbef09993a9ad2adba6ca6e", + "sha256:7e50d0a0cc3189f9cb0aeb3a6a6af18c16f59f004b866cd2be1c14b36134a4a0", + "sha256:95a7476c59002f2f6c590b9b7b998306fba6a5aa646b1e22ddfeaf8f78c3a29c", + "sha256:96ff0b2ad353d8f990b63294c8986f1ec3cb19d749234014f4e7eb0112ceba5a", + "sha256:9fad7dcb1aac3c7f0584a5a8133e3a43eeb2fe127f47e3632d43d677c66c102b", + "sha256:9ff0f4f29c51e2803569d7a51c2304de5554655a60c5d776e35b4a41413830d0", + "sha256:a354325ee03388678242a4d7ebcd08b5c727033fcff3b2f536aea978e15ee9e6", + "sha256:a4abb4f9001ad2858e7ac189089c42178fcce737e4169dc61321660f1a96c7d2", + "sha256:ab47dbe5cc8210f55aa58e4805fe224dac469cde56b9f731a4c098b91917159a", + "sha256:afedb719a9dcfc7eaf2287b839d8198e06dcd4cb5d276a3df279231138e83d30", + "sha256:b3ce300f3644fb06443ee2222c2201dd3a89ea6040541412b8fa189341847218", + "sha256:b97fe8060236edf3662adfc2c633f56a08ae30560c56310562cb4f95500022d5", + "sha256:bfe25acf8b437eb2a8b2d49d443800a5f18508cd811fea3181723922a8a82b07", + "sha256:cd25bcecc4974d09257ffcd1f098ee778f7834c3ad767fe5db785be9a4aa9cb2", + "sha256:d209d8969599b27ad20994c8e41936ee0964e6da07478d6c35016bc386b66ad4", + "sha256:d5241e0a80d808d70546c697135da2c613f30e28251ff8307eb72ba696945764", + "sha256:edd8b5fe47dab091176d21bb6de568acdd906d1887a4584a15a9a96a1dca06ef", + "sha256:f870204a840a60da0b12273ef34f7051e98c3b5961b61b0c2c1be6dfd64fbcd3", + "sha256:ffa75af20b44f8dba823498024771d5ac50620e6915abac414251bd971b4529f" + ], + "markers": "python_version >= '2.7'", + "version": "==1.26.4" + }, + "pillow": { + "hashes": [ + "sha256:0304004f8067386b477d20a518b50f3fa658a28d44e4116970abfcd94fac34a8", + "sha256:0689b5a8c5288bc0504d9fcee48f61a6a586b9b98514d7d29b840143d6734f39", + "sha256:0eae2073305f451d8ecacb5474997c08569fb4eb4ac231ffa4ad7d342fdc25ac", + "sha256:0fb3e7fc88a14eacd303e90481ad983fd5b69c761e9e6ef94c983f91025da869", + "sha256:11fa2e5984b949b0dd6d7a94d967743d87c577ff0b83392f17cb3990d0d2fd6e", + "sha256:127cee571038f252a552760076407f9cff79761c3d436a12af6000cd182a9d04", + "sha256:154e939c5f0053a383de4fd3d3da48d9427a7e985f58af8e94d0b3c9fcfcf4f9", + "sha256:15587643b9e5eb26c48e49a7b33659790d28f190fc514a322d55da2fb5c2950e", + "sha256:170aeb00224ab3dc54230c797f8404507240dd868cf52066f66a41b33169bdbe", + "sha256:1b5e1b74d1bd1b78bc3477528919414874748dd363e6272efd5abf7654e68bef", + "sha256:1da3b2703afd040cf65ec97efea81cfba59cdbed9c11d8efc5ab09df9509fc56", + "sha256:1e23412b5c41e58cec602f1135c57dfcf15482013ce6e5f093a86db69646a5aa", + "sha256:2247178effb34a77c11c0e8ac355c7a741ceca0a732b27bf11e747bbc950722f", + "sha256:257d8788df5ca62c980314053197f4d46eefedf4e6175bc9412f14412ec4ea2f", + "sha256:3031709084b6e7852d00479fd1d310b07d0ba82765f973b543c8af5061cf990e", + "sha256:322209c642aabdd6207517e9739c704dc9f9db943015535783239022002f054a", + "sha256:322bdf3c9b556e9ffb18f93462e5f749d3444ce081290352c6070d014c93feb2", + "sha256:33870dc4653c5017bf4c8873e5488d8f8d5f8935e2f1fb9a2208c47cdd66efd2", + "sha256:35bb52c37f256f662abdfa49d2dfa6ce5d93281d323a9af377a120e89a9eafb5", + "sha256:3c31822339516fb3c82d03f30e22b1d038da87ef27b6a78c9549888f8ceda39a", + "sha256:3eedd52442c0a5ff4f887fab0c1c0bb164d8635b32c894bc1faf4c618dd89df2", + "sha256:3ff074fc97dd4e80543a3e91f69d58889baf2002b6be64347ea8cf5533188213", + "sha256:47c0995fc4e7f79b5cfcab1fc437ff2890b770440f7696a3ba065ee0fd496563", + "sha256:49d9ba1ed0ef3e061088cd1e7538a0759aab559e2e0a80a36f9fd9d8c0c21591", + "sha256:51f1a1bffc50e2e9492e87d8e09a17c5eea8409cda8d3f277eb6edc82813c17c", + "sha256:52a50aa3fb3acb9cf7213573ef55d31d6eca37f5709c69e6858fe3bc04a5c2a2", + "sha256:54f1852cd531aa981bc0965b7d609f5f6cc8ce8c41b1139f6ed6b3c54ab82bfb", + "sha256:609448742444d9290fd687940ac0b57fb35e6fd92bdb65386e08e99af60bf757", + "sha256:69ffdd6120a4737710a9eee73e1d2e37db89b620f702754b8f6e62594471dee0", + "sha256:6fad5ff2f13d69b7e74ce5b4ecd12cc0ec530fcee76356cac6742785ff71c452", + "sha256:7049e301399273a0136ff39b84c3678e314f2158f50f517bc50285fb5ec847ad", + "sha256:70c61d4c475835a19b3a5aa42492409878bbca7438554a1f89d20d58a7c75c01", + "sha256:716d30ed977be8b37d3ef185fecb9e5a1d62d110dfbdcd1e2a122ab46fddb03f", + "sha256:753cd8f2086b2b80180d9b3010dd4ed147efc167c90d3bf593fe2af21265e5a5", + "sha256:773efe0603db30c281521a7c0214cad7836c03b8ccff897beae9b47c0b657d61", + "sha256:7823bdd049099efa16e4246bdf15e5a13dbb18a51b68fa06d6c1d4d8b99a796e", + "sha256:7c8f97e8e7a9009bcacbe3766a36175056c12f9a44e6e6f2d5caad06dcfbf03b", + "sha256:823ef7a27cf86df6597fa0671066c1b596f69eba53efa3d1e1cb8b30f3533068", + "sha256:8373c6c251f7ef8bda6675dd6d2b3a0fcc31edf1201266b5cf608b62a37407f9", + "sha256:83b2021f2ade7d1ed556bc50a399127d7fb245e725aa0113ebd05cfe88aaf588", + "sha256:870ea1ada0899fd0b79643990809323b389d4d1d46c192f97342eeb6ee0b8483", + "sha256:8d12251f02d69d8310b046e82572ed486685c38f02176bd08baf216746eb947f", + "sha256:9c23f307202661071d94b5e384e1e1dc7dfb972a28a2310e4ee16103e66ddb67", + "sha256:9d189550615b4948f45252d7f005e53c2040cea1af5b60d6f79491a6e147eef7", + "sha256:a086c2af425c5f62a65e12fbf385f7c9fcb8f107d0849dba5839461a129cf311", + "sha256:a2b56ba36e05f973d450582fb015594aaa78834fefe8dfb8fcd79b93e64ba4c6", + "sha256:aebb6044806f2e16ecc07b2a2637ee1ef67a11840a66752751714a0d924adf72", + "sha256:b1b3020d90c2d8e1dae29cf3ce54f8094f7938460fb5ce8bc5c01450b01fbaf6", + "sha256:b4b6b1e20608493548b1f32bce8cca185bf0480983890403d3b8753e44077129", + "sha256:b6f491cdf80ae540738859d9766783e3b3c8e5bd37f5dfa0b76abdecc5081f13", + "sha256:b792a349405fbc0163190fde0dc7b3fef3c9268292586cf5645598b48e63dc67", + "sha256:b7c2286c23cd350b80d2fc9d424fc797575fb16f854b831d16fd47ceec078f2c", + "sha256:babf5acfede515f176833ed6028754cbcd0d206f7f614ea3447d67c33be12516", + "sha256:c365fd1703040de1ec284b176d6af5abe21b427cb3a5ff68e0759e1e313a5e7e", + "sha256:c4225f5220f46b2fde568c74fca27ae9771536c2e29d7c04f4fb62c83275ac4e", + "sha256:c570f24be1e468e3f0ce7ef56a89a60f0e05b30a3669a459e419c6eac2c35364", + "sha256:c6dafac9e0f2b3c78df97e79af707cdc5ef8e88208d686a4847bab8266870023", + "sha256:c8de2789052ed501dd829e9cae8d3dcce7acb4777ea4a479c14521c942d395b1", + "sha256:cb28c753fd5eb3dd859b4ee95de66cc62af91bcff5db5f2571d32a520baf1f04", + "sha256:cb4c38abeef13c61d6916f264d4845fab99d7b711be96c326b84df9e3e0ff62d", + "sha256:d1b35bcd6c5543b9cb547dee3150c93008f8dd0f1fef78fc0cd2b141c5baf58a", + "sha256:d8e6aeb9201e655354b3ad049cb77d19813ad4ece0df1249d3c793de3774f8c7", + "sha256:d8ecd059fdaf60c1963c58ceb8997b32e9dc1b911f5da5307aab614f1ce5c2fb", + "sha256:da2b52b37dad6d9ec64e653637a096905b258d2fc2b984c41ae7d08b938a67e4", + "sha256:e87f0b2c78157e12d7686b27d63c070fd65d994e8ddae6f328e0dcf4a0cd007e", + "sha256:edca80cbfb2b68d7b56930b84a0e45ae1694aeba0541f798e908a49d66b837f1", + "sha256:f379abd2f1e3dddb2b61bc67977a6b5a0a3f7485538bcc6f39ec76163891ee48", + "sha256:fe4c15f6c9285dc54ce6553a3ce908ed37c8f3825b5a51a15c91442bb955b868" + ], + "markers": "python_version >= '3.8'", + "version": "==10.2.0" + }, + "proglog": { + "hashes": [ + "sha256:19d5da037e8c813da480b741e3fa71fb1ac0a5b02bf21c41577c7f327485ec50", + "sha256:658c28c9c82e4caeb2f25f488fff9ceace22f8d69b15d0c1c86d64275e4ddab4" + ], + "version": "==0.1.10" + }, + "pycparser": { + "hashes": [ + "sha256:8ee45429555515e1f6b185e78100aea234072576aa43ab53aefcae078162fca9", + "sha256:e644fdec12f7872f86c58ff790da456218b10f863970249516d60a5eaca77206" + ], + "version": "==2.21" + }, + "pyotp": { + "hashes": [ + "sha256:346b6642e0dbdde3b4ff5a930b664ca82abfa116356ed48cc42c7d6590d36f63", + "sha256:81c2e5865b8ac55e825b0358e496e1d9387c811e85bb40e71a3b29b288963612" + ], + "index": "pypi", + "version": "==2.9.0" + }, + "requests": { + "hashes": [ + "sha256:58cd2187c01e70e6e26505bca751777aa9f2ee0b7f4300988b709f44e013003f", + "sha256:942c5a758f98d790eaed1a29cb6eefc7ffb0d1cf7af05c3d2791656dbd6ad1e1" + ], + "index": "pypi", + "version": "==2.31.0" + }, + "setuptools": { + "hashes": [ + "sha256:385eb4edd9c9d5c17540511303e39a147ce2fc04bc55289c322b9e5904fe2c05", + "sha256:be1af57fc409f93647f2e8e4573a142ed38724b8cdd389706a867bb4efcf1e78" + ], + "markers": "python_version >= '3.8'", + "version": "==69.0.3" + }, + "tqdm": { + "hashes": [ + "sha256:d302b3c5b53d47bce91fea46679d9c3c6508cf6332229aa1e7d8653723793386", + "sha256:d88e651f9db8d8551a62556d3cff9e3034274ca5d66e93197cf2490e2dcb69c7" + ], + "markers": "python_version >= '3.7'", + "version": "==4.66.1" + }, + "urllib3": { + "hashes": [ + "sha256:051d961ad0c62a94e50ecf1af379c3aba230c66c710493493560c0c223c49f20", + "sha256:ce3711610ddce217e6d113a2732fafad960a03fd0318c91faa79481e35c11224" + ], + "markers": "python_version >= '3.8'", + "version": "==2.2.0" + } + }, + "develop": { + "autopep8": { + "hashes": [ + "sha256:067959ca4a07b24dbd5345efa8325f5f58da4298dab0dde0443d5ed765de80cb", + "sha256:2913064abd97b3419d1cc83ea71f042cb821f87e45b9c88cad5ad3c4ea87fe0c" + ], + "index": "pypi", + "version": "==2.0.4" + }, + "coverage": { + "hashes": [ + "sha256:0193657651f5399d433c92f8ae264aff31fc1d066deee4b831549526433f3f61", + "sha256:02f2edb575d62172aa28fe00efe821ae31f25dc3d589055b3fb64d51e52e4ab1", + "sha256:0491275c3b9971cdbd28a4595c2cb5838f08036bca31765bad5e17edf900b2c7", + "sha256:077d366e724f24fc02dbfe9d946534357fda71af9764ff99d73c3c596001bbd7", + "sha256:10e88e7f41e6197ea0429ae18f21ff521d4f4490aa33048f6c6f94c6045a6a75", + "sha256:18e961aa13b6d47f758cc5879383d27b5b3f3dcd9ce8cdbfdc2571fe86feb4dd", + "sha256:1a78b656a4d12b0490ca72651fe4d9f5e07e3c6461063a9b6265ee45eb2bdd35", + "sha256:1ed4b95480952b1a26d863e546fa5094564aa0065e1e5f0d4d0041f293251d04", + "sha256:23b27b8a698e749b61809fb637eb98ebf0e505710ec46a8aa6f1be7dc0dc43a6", + "sha256:23f5881362dcb0e1a92b84b3c2809bdc90db892332daab81ad8f642d8ed55042", + "sha256:32a8d985462e37cfdab611a6f95b09d7c091d07668fdc26e47a725ee575fe166", + "sha256:3468cc8720402af37b6c6e7e2a9cdb9f6c16c728638a2ebc768ba1ef6f26c3a1", + "sha256:379d4c7abad5afbe9d88cc31ea8ca262296480a86af945b08214eb1a556a3e4d", + "sha256:3cacfaefe6089d477264001f90f55b7881ba615953414999c46cc9713ff93c8c", + "sha256:3e3424c554391dc9ef4a92ad28665756566a28fecf47308f91841f6c49288e66", + "sha256:46342fed0fff72efcda77040b14728049200cbba1279e0bf1188f1f2078c1d70", + "sha256:536d609c6963c50055bab766d9951b6c394759190d03311f3e9fcf194ca909e1", + "sha256:5d6850e6e36e332d5511a48a251790ddc545e16e8beaf046c03985c69ccb2676", + "sha256:6008adeca04a445ea6ef31b2cbaf1d01d02986047606f7da266629afee982630", + "sha256:64e723ca82a84053dd7bfcc986bdb34af8d9da83c521c19d6b472bc6880e191a", + "sha256:6b00e21f86598b6330f0019b40fb397e705135040dbedc2ca9a93c7441178e74", + "sha256:6d224f0c4c9c98290a6990259073f496fcec1b5cc613eecbd22786d398ded3ad", + "sha256:6dceb61d40cbfcf45f51e59933c784a50846dc03211054bd76b421a713dcdf19", + "sha256:7ac8f8eb153724f84885a1374999b7e45734bf93a87d8df1e7ce2146860edef6", + "sha256:85ccc5fa54c2ed64bd91ed3b4a627b9cce04646a659512a051fa82a92c04a448", + "sha256:869b5046d41abfea3e381dd143407b0d29b8282a904a19cb908fa24d090cc018", + "sha256:8bdb0285a0202888d19ec6b6d23d5990410decb932b709f2b0dfe216d031d218", + "sha256:8dfc5e195bbef80aabd81596ef52a1277ee7143fe419efc3c4d8ba2754671756", + "sha256:8e738a492b6221f8dcf281b67129510835461132b03024830ac0e554311a5c54", + "sha256:918440dea04521f499721c039863ef95433314b1db00ff826a02580c1f503e45", + "sha256:9641e21670c68c7e57d2053ddf6c443e4f0a6e18e547e86af3fad0795414a628", + "sha256:9d2f9d4cc2a53b38cabc2d6d80f7f9b7e3da26b2f53d48f05876fef7956b6968", + "sha256:a07f61fc452c43cd5328b392e52555f7d1952400a1ad09086c4a8addccbd138d", + "sha256:a3277f5fa7483c927fe3a7b017b39351610265308f5267ac6d4c2b64cc1d8d25", + "sha256:a4a3907011d39dbc3e37bdc5df0a8c93853c369039b59efa33a7b6669de04c60", + "sha256:aeb2c2688ed93b027eb0d26aa188ada34acb22dceea256d76390eea135083950", + "sha256:b094116f0b6155e36a304ff912f89bbb5067157aff5f94060ff20bbabdc8da06", + "sha256:b8ffb498a83d7e0305968289441914154fb0ef5d8b3157df02a90c6695978295", + "sha256:b9bb62fac84d5f2ff523304e59e5c439955fb3b7f44e3d7b2085184db74d733b", + "sha256:c61f66d93d712f6e03369b6a7769233bfda880b12f417eefdd4f16d1deb2fc4c", + "sha256:ca6e61dc52f601d1d224526360cdeab0d0712ec104a2ce6cc5ccef6ed9a233bc", + "sha256:ca7b26a5e456a843b9b6683eada193fc1f65c761b3a473941efe5a291f604c74", + "sha256:d12c923757de24e4e2110cf8832d83a886a4cf215c6e61ed506006872b43a6d1", + "sha256:d17bbc946f52ca67adf72a5ee783cd7cd3477f8f8796f59b4974a9b59cacc9ee", + "sha256:dfd1e1b9f0898817babf840b77ce9fe655ecbe8b1b327983df485b30df8cc011", + "sha256:e0860a348bf7004c812c8368d1fc7f77fe8e4c095d661a579196a9533778e156", + "sha256:f2f5968608b1fe2a1d00d01ad1017ee27efd99b3437e08b83ded9b7af3f6f766", + "sha256:f3771b23bb3675a06f5d885c3630b1d01ea6cac9e84a01aaf5508706dba546c5", + "sha256:f68ef3660677e6624c8cace943e4765545f8191313a07288a53d3da188bd8581", + "sha256:f86f368e1c7ce897bf2457b9eb61169a44e2ef797099fb5728482b8d69f3f016", + "sha256:f90515974b39f4dea2f27c0959688621b46d96d5a626cf9c53dbc653a895c05c", + "sha256:fe558371c1bdf3b8fa03e097c523fb9645b8730399c14fe7721ee9c9e2a545d3" + ], + "index": "pypi", + "version": "==7.4.1" + }, + "pycodestyle": { + "hashes": [ + "sha256:41ba0e7afc9752dfb53ced5489e89f8186be00e599e712660695b7a75ff2663f", + "sha256:44fe31000b2d866f2e41841b18528a505fbd7fef9017b04eff4e2648a0fadc67" + ], + "markers": "python_version >= '3.8'", + "version": "==2.11.1" + }, + "tomli": { + "hashes": [ + "sha256:939de3e7a6161af0c887ef91b7d41a53e7c5a1ca976325f429cb46ea9bc30ecc", + "sha256:de526c12914f0c550d15924c62d72abc48d6fe7364aa87328337a31007fe8a4f" + ], + "markers": "python_version < '3.11'", + "version": "==2.0.1" + } + } +} From f49254169354f92853e66d2af241e97ea3bcd026 Mon Sep 17 00:00:00 2001 From: Ettore Leandro Tognoli Date: Fri, 9 Feb 2024 17:06:18 -0300 Subject: [PATCH 02/20] redesign media upload --- README.md | 21 +++--- ensta/SessionHost.py | 167 +++++++++++++++++++++---------------------- 2 files changed, 94 insertions(+), 94 deletions(-) diff --git a/README.md b/README.md index 80c237e..00139b4 100644 --- a/README.md +++ b/README.md @@ -95,27 +95,27 @@ from ensta import Host host = Host(username, password) -upload = host.get_upload_id("Picture.jpg") +upload = host.upload_image("Picture.jpg") -host.upload_photo(upload, caption="Travelling 🌆") +host.pub_photo(upload, caption="Travelling 🌆") ```
-Upload Multiple Photos (Single Post)
+Upload Multiple Medias (Single Post)
```python from ensta import Host host = Host(username, password) -upload1 = host.get_upload_id("First.jpg") -upload2 = host.get_upload_id("Second.jpg") -upload3 = host.get_upload_id("Third.jpg") +upload1 = host.upload_image("First.jpg") +upload2 = host.upload_image("Second.jpg") +upload3 = host.upload_video_for_carousel("Video.mp4", thumbnail="Thumbnail.jpg") -host.upload_photos([upload1, upload2, upload3], caption="Travelling 🌆") +host.pub_carousel([upload1, upload2, upload3], caption="Travelling 🌆") ```
@@ -129,9 +129,10 @@ from ensta import Host host = Host(username, password) -host.upload_reel( - video_path="Video.mp4", - thumbnail_path="Thumbnail.jpg", +video_id = host.upload_video_for_reel("Video.mp4", thumbnail="Thumbnail.jpg") + +host.pub_reel( + video_id, caption="Enjoying the winter! ⛄" ) ``` diff --git a/ensta/SessionHost.py b/ensta/SessionHost.py index 188a324..4e30b40 100644 --- a/ensta/SessionHost.py +++ b/ensta/SessionHost.py @@ -1,4 +1,6 @@ import mimetypes +import tempfile +from functools import partial, partialmethod import json import random import string @@ -32,6 +34,27 @@ USERNAME, UID = 0, 1 +IMAGE_RUPLOAD_PARAMS = { + "retry_context": "{\"num_step_auto_retry\": 0, \"num_reupload\": 0, \"num_step_manual_retry\": 0}", + "media_type": "1", + "image_compression": json.dumps({"lib_name": "moz", "lib_version": "3.1.m", "quality": 80}) +} + +REEL_RUPLOAD_PARAMS = { + "retry_context": "{\"num_step_auto_retry\": 0, \"num_reupload\": 0, \"num_step_manual_retry\": 0}", + "is_clips_video": "1", + "media_type": "2", +} + +CAROUSEL_VIDEO_RUPLOAD_PARAMS = { + "retry_context": "{\"num_step_auto_retry\": 0, \"num_reupload\": 0, \"num_step_manual_retry\": 0}", + "is_unified_video": "0", + "is_clips_video": "0", + "is_sidecar": "1", + "media_type": "2", +} + + class SessionHost: session_data: str @@ -854,33 +877,24 @@ def change_display_name(self, display_name: str) -> bool: except JSONDecodeError: raise NetworkError("HTTP Response is not a valid JSON.") - def get_upload_id(self, media_path: str, arg_upload_id: str | None = None) -> str: + def _upload_image(self, media: str, upload_id: str | None = None, **kwargs) -> str: """ - Uploads the given images to Instagram's server and returns its unique ID which you can later use to configure single or multiple posts. - :param media_path: Path to the images file (only jpg & jpeg) - :param arg_upload_id: Custom upload_id (for advanced users) - :return: Upload ID of uploaded file + https://i.instagram.com/rupload_igphoto/ """ - - media_path: Path = Path(media_path) - + rupload_params = dict(kwargs) + media_path: Path = Path(media) mimetype, _ = mimetypes.guess_type(media_path) - - upload_id = arg_upload_id if arg_upload_id is not None else time_id() + upload_id = upload_id or time_id() waterfall_id = str(uuid4()) upload_name = fb_uploader(upload_id) - - rupload_params = { - "retry_context": "{\"num_step_auto_retry\": 0, \"num_reupload\": 0, \"num_step_manual_retry\": 0}", - "media_type": "1", - "xsharing_user_ids": "[]", + rupload_params.update(**{ "upload_id": upload_id, - "image_compression": json.dumps({"lib_name": "moz", "lib_version": "3.1.m", "quality": 80}) - } + "xsharing_user_ids": json.dumps([self.user_id]), + }) with open(media_path, "rb") as file: - photo_data = file.read() - photo_length = str(len(photo_data)) + image_data = file.read() + image_length = str(len(image_data)) request_headers = { "accept-encoding": "gzip", @@ -889,69 +903,62 @@ def get_upload_id(self, media_path: str, arg_upload_id: str | None = None) -> st "x-entity-type": mimetype, "offset": "0", "x-entity-name": upload_name, - "x-entity-length": photo_length, + "x-entity-length": image_length, "content-type": mimetype, - "content-length": photo_length + "content-length": image_length } http_response = self.request_session.post( f"https://i.instagram.com/rupload_igphoto/{upload_name}", - data=photo_data, + data=image_data, headers=request_headers ) try: response_json: dict = http_response.json() - if response_json.get("status", "") != "ok": raise NetworkError("Response json key 'status' not ok.") - if response_json.get("upload_id", "") == "": raise NetworkError( - "Key 'upload_id' in response json doesn't exist or is invalid." - ) + if response_json.get("status", "") != "ok": + raise NetworkError("Response json key 'status' not ok.") + if response_json.get("upload_id", "") == "": + raise NetworkError( + "Key 'upload_id' in response json doesn't exist or is invalid." + ) return str(response_json.get("upload_id")) except JSONDecodeError: raise NetworkError("Response not a valid json.") - def __upload_video(self, path: str, arg_upload_id: str | None = None) -> tuple[bool, any, any, any]: - video_editor = moviepy.editor.VideoFileClip(path) - - path: Path = Path(path) + def _upload_video(self, media: str, upload_id: str | None = None, thumbnail=None, **kwargs) -> str: + """ + https://i.instagram.com/rupload_igvideo/ + video requires and image as thumbnail + """ + assert thumbnail != None + rupload_params = dict(kwargs) + media_path: Path = Path(media) + mimetype, _ = mimetypes.guess_type(media_path) + video_editor = moviepy.editor.VideoFileClip(media) waterfall_id = str(uuid4()) - - upload_id = arg_upload_id if arg_upload_id is not None else time_id() + upload_id = upload_id or time_id() upload_name = fb_uploader(upload_id) - rupload_params = { - "is_clips_video": "1", - "retry_context": "{\"num_step_auto_retry\": 0, \"num_reupload\": 0, \"num_step_manual_retry\": 0}", - "media_type": "2", + rupload_params.update(**{ "xsharing_user_ids": json.dumps([self.user_id]), "upload_id": upload_id, "upload_media_duration_ms": str(int(video_editor.duration * 1000)), "upload_media_width": str(video_editor.size[0]), - "upload_media_height": str(video_editor.size[1]) - } + "upload_media_height": str(video_editor.size[1]), + }) request_headers__get = { "accept-encoding": "gzip", "x-instagram-rupload-params": json.dumps(rupload_params), "x_fb_video_waterfall_id": waterfall_id, - "x-entity-type": "video/mp4" + "x-entity-type": mimetype, } - http_response__get = self.request_session.get( - f"https://i.instagram.com/rupload_igvideo/{upload_name}", - headers=request_headers__get - ) - - if http_response__get.status_code != 200: raise NetworkError( - "Video Upload 'GET' Request failed. Status code not 200." - ) - - # POST Request - - with open(path, "rb") as file: + with open(media_path, "rb") as file: video_data = file.read() video_length = str(len(video_data)) @@ -959,7 +966,7 @@ def __upload_video(self, path: str, arg_upload_id: str | None = None) -> tuple[b "offset": "0", "x-entity-name": upload_name, "x-entity-length": video_length, - "content-type": "application/octet-stream", + "content-type": mimetype, "content-length": video_length, **request_headers__get } @@ -969,19 +976,31 @@ def __upload_video(self, path: str, arg_upload_id: str | None = None) -> tuple[b data=video_data, headers=request_headers ) + response_json: dict = http_response.json() + if response_json.get("status", "") != "ok": + raise Exception() - try: - response_json: dict = http_response.json() + return self.upload_image(media=thumbnail, upload_id=upload_id) - return response_json.get("status", "") == "ok",\ - video_editor.duration,\ - video_editor.size[0],\ - video_editor.size[1] + def upload_media(self, media: str, upload_id: str | None = None, **kwargs) -> str: - except JSONDecodeError: - raise NetworkError("Response not a valid json.") + def unknown_type(*_, **__): + raise Exception(f'Unknown type {media}') - def upload_photo( + mimetype, _ = mimetypes.guess_type(media) + type, _ = mimetype.split('/') + methods = { + 'image': self._upload_image, + 'video': self._upload_video, + } + method = methods.get(type, unknown_type) + return method(media, upload_id, **kwargs) + + upload_video_for_carousel = partialmethod(_upload_video, **CAROUSEL_VIDEO_RUPLOAD_PARAMS) + upload_video_for_reel = partialmethod(_upload_video, **REEL_RUPLOAD_PARAMS) + upload_image = partialmethod(_upload_image, **IMAGE_RUPLOAD_PARAMS) + + def pub_photo( self, upload_id: str, caption: str = "", @@ -1057,7 +1076,7 @@ def upload_photo( except JSONDecodeError: raise NetworkError("Response not a valid json.") - def upload_photos( + def pub_carousel( self, upload_ids: list[str], caption: str = "", @@ -1125,10 +1144,9 @@ def upload_photos( except JSONDecodeError: raise NetworkError("Response not a valid json.") - def upload_reel( + def pub_reel( self, - video_path: str, - thumbnail_path: str, + upload_id: str, caption: str = "", alt_text: str = "", archive_only: bool = False, @@ -1148,25 +1166,6 @@ def upload_reel( :param video_subtitles_enabled: Boolean (Should subtitles be enabled on this reel) :return: ReelUpload """ - - upload_id = time_id() - - video_success, video_duration, video_width, video_height = self.__upload_video(video_path, upload_id) - - if not video_success: raise NetworkError( - "Error while uploading video to Instagram. Please try with a " - "different video, and make sure it's an MP4 video." - ) - - if not self.get_upload_id( - media_path=thumbnail_path, - arg_upload_id=upload_id - ): - raise NetworkError( - "Error while uploading thumbnail to Instagram. Please make " - "sure your image is JPG or try with a different one." - ) - request_headers: dict = { "accept": "*/*", "accept-language": "en-US,en;q=0.9", From 769607cd2a0c85c070c9a555e1f5eb98fc84ebdf Mon Sep 17 00:00:00 2001 From: Ettore Leandro Tognoli Date: Fri, 9 Feb 2024 18:16:29 -0300 Subject: [PATCH 03/20] auto generate video thumbnail --- Pipfile | 1 + ensta/SessionHost.py | 8 +++++++- setup.py | 1 + 3 files changed, 9 insertions(+), 1 deletion(-) diff --git a/Pipfile b/Pipfile index d7c5445..7340177 100644 --- a/Pipfile +++ b/Pipfile @@ -6,6 +6,7 @@ name = "pypi" [packages] requests = "*" moviepy = "*" +pillow = "*" cryptography = "*" pyotp = "*" ntplib = "*" diff --git a/ensta/SessionHost.py b/ensta/SessionHost.py index 4e30b40..c5a2710 100644 --- a/ensta/SessionHost.py +++ b/ensta/SessionHost.py @@ -26,6 +26,7 @@ APIError, ConversionError ) +from PIL import Image from ensta.lib.Searcher import create_search_obj, search_comments from urllib.parse import urlparse, parse_qs from .Utils import time_id, fb_uploader @@ -929,7 +930,7 @@ def _upload_image(self, media: str, upload_id: str | None = None, **kwargs) -> s except JSONDecodeError: raise NetworkError("Response not a valid json.") - def _upload_video(self, media: str, upload_id: str | None = None, thumbnail=None, **kwargs) -> str: + def _upload_video(self, media: str, upload_id: str | None = None, thumbnail=0, **kwargs) -> str: """ https://i.instagram.com/rupload_igvideo/ video requires and image as thumbnail @@ -980,6 +981,11 @@ def _upload_video(self, media: str, upload_id: str | None = None, thumbnail=None if response_json.get("status", "") != "ok": raise Exception() + if isinstance(thumbnail, (int, float)): + thumbnail_frame = video_editor.get_frame(thumbnail) + with tempfile.NamedTemporaryFile(suffix='.jpg') as thumbnail_file: + Image.fromarray(thumbnail_frame).save(thumbnail_file.name) + return self.upload_image(media=thumbnail_file.name, upload_id=upload_id) return self.upload_image(media=thumbnail, upload_id=upload_id) def upload_media(self, media: str, upload_id: str | None = None, **kwargs) -> str: diff --git a/setup.py b/setup.py index d8806bc..6074122 100644 --- a/setup.py +++ b/setup.py @@ -48,6 +48,7 @@ install_requires=[ "requests", "moviepy", + "pillow", "cryptography", "pyotp", "ntplib", From 94bed4b88df14fd2ccec3ba21dea7ff80a2d11f1 Mon Sep 17 00:00:00 2001 From: Anders Glent Buch Date: Wed, 21 Feb 2024 08:58:33 +0100 Subject: [PATCH 04/20] Get user reels --- ensta/Guest.py | 86 ++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 86 insertions(+) diff --git a/ensta/Guest.py b/ensta/Guest.py index 0fa0b87..2ccad4d 100644 --- a/ensta/Guest.py +++ b/ensta/Guest.py @@ -310,6 +310,92 @@ def posts(self, username: str, count: int = 0, __session__: requests.Session | N yield None raise NetworkError("HTTP Response is not a valid JSON.") + def reels( + self, user_id: str, count: int = 0, __session__: requests.Session | None = None + ) -> Generator[Post, None, None]: + """ + Generates a list of target's reels of specified size. + :param user_id: Target's user ID + :param count: Amount of reels to fetch + :param __session__: (Optional) Custom request session object + :return: Generator which yields each reel's data + """ + request_headers = { + "accept": "*/*", + "accept-language": "en-US,en;q=0.9", + "sec-ch-prefers-color-scheme": self.preferred_color_scheme, + "sec-ch-ua": self.user_agent, + "sec-ch-ua-full-version-list": self.user_agent, + "sec-ch-ua-mobile": "?0", + "sec-ch-ua-platform": '"Windows"', + "sec-ch-ua-platform-version": '"15.0.0"', + "sec-fetch-dest": "empty", + "sec-fetch-mode": "cors", + "sec-fetch-site": "same-origin", + "viewport-width": "1475", + "x-asbd-id": "129477", + "x-csrftoken": self.csrf_token, + "x-ig-app-id": self.insta_app_id, + "x-ig-www-claim": self.x_ig_www_claim, + "x-requested-with": "XMLHttpRequest", + "Referer": "https://www.instagram.com/", + "Referrer-Policy": "strict-origin-when-cross-origin", + } + + generated_count = 0 + max_id = None + + while True: + try: + session: requests.Session = __session__ + if __session__ is None: + session: requests.Session = self.request_session + + http_response = session.post( + "https://www.instagram.com/api/v1/clips/user/", + data={ + "target_user_id": user_id, + "page_size": "50", + "include_feed_video": "true", + "max_id": max_id, + }, + headers=request_headers, + ) + + response_json = http_response.json() + + if "status" not in response_json or "items" not in response_json: + yield None + raise NetworkError( + "HTTP response doesn't include 'status' or 'items' node." + ) + + if response_json["status"] != "ok": + yield None + + if response_json.get("message", "") == "checkpoint_required": + raise RateLimitedError( + "IP Temporarily Flagged: Wait for some time, or switch " + "to a different WiFi Network, or use proxies." + ) + + raise NetworkError("Request failed.") + + for each_item in response_json["items"]: + if generated_count < count or count == 0: + yield self.__process_post_data(each_item["media"]) + generated_count += 1 + + if (generated_count < count or count == 0) and response_json.get( + "paging_info", {} + ).get("more_available", False): + max_id = response_json["paging_info"]["max_id"] + else: + return None + except JSONDecodeError: + yield None + raise NetworkError("HTTP Response is not a valid JSON.") + @staticmethod def __process_post_data(data: dict) -> Post: From 9ad92c9e190a48522db58a9994c4dac2f5141dfa Mon Sep 17 00:00:00 2001 From: Anders Glent Buch Date: Wed, 21 Feb 2024 09:14:49 +0100 Subject: [PATCH 05/20] Fix reel link --- ensta/Guest.py | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/ensta/Guest.py b/ensta/Guest.py index 2ccad4d..90c7d04 100644 --- a/ensta/Guest.py +++ b/ensta/Guest.py @@ -383,7 +383,7 @@ def reels( for each_item in response_json["items"]: if generated_count < count or count == 0: - yield self.__process_post_data(each_item["media"]) + yield self.__process_post_data(each_item["media"], reel=True) generated_count += 1 if (generated_count < count or count == 0) and response_json.get( @@ -397,8 +397,7 @@ def reels( raise NetworkError("HTTP Response is not a valid JSON.") @staticmethod - def __process_post_data(data: dict) -> Post: - + def __process_post_data(data: dict, reel: bool = False) -> Post: caption: dict | None = data.get("caption", None) caption_text = "" @@ -439,7 +438,9 @@ def __process_post_data(data: dict) -> Post: ) return Post( - share_url=f"https://www.instagram.com/p/{data.get('code', '')}", + share_url=f"https://www.instagram.com/reel/{data.get('code', '')}" + if reel + else f"https://www.instagram.com/p/{data.get('code', '')}/", taken_at=data.get("taken_at", 0), post_id=data.get("pk", ""), media_type=data.get("media_type", 0), From 860e2478ee5b39584138b3c83314be53b918963e Mon Sep 17 00:00:00 2001 From: Anders Glent Buch Date: Wed, 21 Feb 2024 09:28:44 +0100 Subject: [PATCH 06/20] Be consistent about user ID param naming+type --- ensta/Guest.py | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/ensta/Guest.py b/ensta/Guest.py index 90c7d04..fada640 100644 --- a/ensta/Guest.py +++ b/ensta/Guest.py @@ -311,15 +311,21 @@ def posts(self, username: str, count: int = 0, __session__: requests.Session | N raise NetworkError("HTTP Response is not a valid JSON.") def reels( - self, user_id: str, count: int = 0, __session__: requests.Session | None = None + self, + uid: str | int, + count: int = 0, + __session__: requests.Session | None = None, ) -> Generator[Post, None, None]: """ Generates a list of target's reels of specified size. - :param user_id: Target's user ID + :param uid: Target's user ID :param count: Amount of reels to fetch :param __session__: (Optional) Custom request session object :return: Generator which yields each reel's data """ + + uid = str(uid).replace(" ", "") + request_headers = { "accept": "*/*", "accept-language": "en-US,en;q=0.9", From 51485747d8c96237259d2eba4fdb67d79141ec9c Mon Sep 17 00:00:00 2001 From: Deepak Soni Date: Tue, 5 Mar 2024 00:01:19 +0530 Subject: [PATCH 07/20] Update README.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index b16cb6f..5a4e351 100644 --- a/README.md +++ b/README.md @@ -521,7 +521,7 @@ Ask questions, discuss upcoming features and meet other developers. ## Support Me Wish to support this project? Please consider buying me a coffee here: -[](https://buymeacoffee.com/sonii) +[](https://buymeacoffee.com/sonii) ## Contributors [![Contributors](https://contrib.rocks/image?anon=1&repo=diezo/ensta&)](https://github.com/diezo/ensta/graphs/contributors) From 4aab06df912fc14868c77ee41628cb933136b026 Mon Sep 17 00:00:00 2001 From: Deepak Soni Date: Tue, 5 Mar 2024 00:02:42 +0530 Subject: [PATCH 08/20] Update setup.py --- setup.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/setup.py b/setup.py index 70d5bb1..791b704 100644 --- a/setup.py +++ b/setup.py @@ -1,7 +1,7 @@ from distutils.core import setup from pathlib import Path -version = "5.2.2" +version = "5.2.3" long_description = (Path(__file__).parent / "README.md").read_text(encoding="utf-8") setup( From 2c56f885bc9b3d3f2a099985fd472dbee639eb6f Mon Sep 17 00:00:00 2001 From: Deepak Soni Date: Wed, 6 Mar 2024 17:39:17 +0530 Subject: [PATCH 09/20] Update README.md --- README.md | 3 +++ 1 file changed, 3 insertions(+) diff --git a/README.md b/README.md index 5a4e351..d7879bd 100644 --- a/README.md +++ b/README.md @@ -18,6 +18,9 @@ Python [**3.10**](https://www.python.org/downloads/) or later is required. pip install ensta +## Instagram Account Creator +Buy our products on [**Gumroad**](https://sonii.gumroad.com). + ## Example Fetching profile info by username: From e6e995400ec6a10d4461ee214ffd58c2d24bbc59 Mon Sep 17 00:00:00 2001 From: Deepak Soni Date: Wed, 6 Mar 2024 17:55:50 +0530 Subject: [PATCH 10/20] Update README.md --- README.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index d7879bd..84bed95 100644 --- a/README.md +++ b/README.md @@ -18,8 +18,8 @@ Python [**3.10**](https://www.python.org/downloads/) or later is required. pip install ensta -## Instagram Account Creator -Buy our products on [**Gumroad**](https://sonii.gumroad.com). +## [Instagram Account Creator](https://sonii.gumroad.com) +To buy an Instagram account creator written in Python, [**visit our store**](https://sonii.gumroad.com). ## Example Fetching profile info by username: From 603c86caade3aa294cbc4457b5afe29399ee0290 Mon Sep 17 00:00:00 2001 From: Deepak Soni Date: Wed, 6 Mar 2024 18:01:26 +0530 Subject: [PATCH 11/20] Add files via upload --- ...-style-art-vector-illustration_836950-30.jpg | Bin 0 -> 72300 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 assets/colorful-instagram-icon-vintage-style-art-vector-illustration_836950-30.jpg diff --git a/assets/colorful-instagram-icon-vintage-style-art-vector-illustration_836950-30.jpg b/assets/colorful-instagram-icon-vintage-style-art-vector-illustration_836950-30.jpg new file mode 100644 index 0000000000000000000000000000000000000000..76dc2fe0a8ecdffcad0bd899c12deb77eb67b30a GIT binary patch literal 72300 zcmbrl1yCGc*C#wU!4e?21y68yNrHQDhu{Qfa8E*TcZUS`!Cew$aMu|u=wO30I4sZZ z^M9Y+ueR!YtM+tv-BW$-{O-AZZudF2pBA6~0$wS~D#!wmkN^Or=L7Jx1o#0!{-1>M zOsJ^OCmPznE==@)5hf1C3ykLz2OAd)3kw&U@FgzpOG07-d;(%}Qc`l-H?(YQqDcR* z4LtP#@G+5r$Uqb%Ish_05(+-jQy)P1Um~KS{7cq<2m=ir^92$LDl*pdU1a3{BM%(| z6%82$6Y0eh6o7;Boc#*r)pI@QNND$$k#GOaBNyfWzvS0{r1^hHv6&DHB_`uY1?xe9 z)#t0#ijNLn@HE2_6ai$wt^du-pU-V0U7r2ldKicfa~Zu~@v;%1?Gf+(00FlZuL}7U z5Kg>8`ko0NRCWmQi*i3_qY+ZNcc6lrVY?n@8vGf{?Q9qpZFmnb?~=cCEZ=O__`ftw zWw5Fs zg%miJ_~=&GOXeqt$PWHkd@(F3+su^ZML~C_W;+zk#_71!D|%kkte|Q!w`|<&Ecf;Q z+cV10`EgZscr1-0e5}&8&#q0R8i_8F^{*|AuvmqU6tW3z^ug>qYi5r^a0y*B=8Q!V0R&ZcdG z0uh`kcCRm-XHu;7(t{FmeJ_}_NB#eEkd=VGkf4s6p#23=CUuk6P~-co3_2(8A?=rt@B}NTFVtB-B6$i_90$r(`ikc z*rIx9(QtqZvAYqLRAOqYdGC>l=akw0_f+19+X1gFZ(^-sY-5jx3qgdwgjxZvG#EA_ zjaB{S-}5K>@>KU1#{oFlAEv(223zc7hZ{5W?r!E3@=5$>@KBCMI&NF8Tp@kj15K`> zHY>Cq4p*WyUSD7`d@IM+jXWfrGA|belnZv8WiRjcJ8O(PC1^A6AwGKb(mCdaikfE7 zME-8R#ePU|j3-}i_mGlK^JQ^7R7VA}IheD!a9JX~s?$nO;4wVD*c@w2+}Q~+$`6>* zy>nb@$Cez}X!Y4U&N_bre0q&@%WAJTV5`E{B$q^MK7z;`7*?tVx52x4{nC4}d{KDK zSUK)=~alII}Ke=`rCpirP?Q3IN zc`}^(RCD)H1TkKI>w#k&A7HA#7=&Jq4NY(E@s6a%AkTNwI<5(wEf-ki9L&Tw-6JWd zGQH5mE33og_)ULJJ>QqTjn*A^FQBnt$u1Ao5#HYTJ(3j{sB^U`2yUAkG%3X{DX8Gs z_ck_Na2+wQ=5d|raY%E?DhbVV(^w7W%=D7#@Mjr-oJq158a)mpbZ#?T{SKz8Z2S|P z*FItPRR!G#+&uwCXz3RIfdK%ZB}Mxbg(cikpH5X@dCcf2)?nS$a^9)_K8!0?^z4!$ z(B|mMiI#l;t@C+=yiD4Z)NQkpo$=d`J`}P0bv^_^RRnLYJ9})_f%6R6l5|y66f)Lz+l7Q6T;)K~g@deIWM;l;l!y(f; zF=mLp&f6U56QC_@&VoKnW={Un`62^FGX@yDm`~r99HGAYv0y~iX*2A3f@{WK-^bc} z;rLC*2X@Xo>6D+sTg3HG4wx=4JT zs_~T||3^E9pNQ4<`IHeXhyX9|a>#Y*gCBp6i2dRmFTS|wOcefnFMo5;u^AN3QR3vo zG6g@?Y2)d9o>x07t-2NTER!b=o@AZfFn9(}e{Y(h zNhD`jkUoqgP;6`A=UdzWFP*oK9_^)bw^UNyZhoutMSma`PD^hk1u5L_uM@2w%yUj* z+B?^G4`xLu?cx81hD0`1fp`K0SF3@%)bc};eE1og!$n45cDta@q?`LI5-hj(osTi+ zD@DfnMoza?{mLy?2_|bAWzCZhh|{Z-sF|&ci%rk#>#JE`zqgNNoYuZnsh|VXeBlM` zydBWMtsx9U^jya4G0JsA26>Kob|GAVpZ%ThmxuGVFbs<_EUNR8PJ2RBjH9SkGW-|` z16hf?`mwpoJl!Dz2W>aQ)&{*JsW{fb7|D@Om+Nqj7k01O5eTia8F;CgNxRzU@r22- zBtP9uipg@zgQh%MS>ZoAli+vmSYQf~%?|Zq+dGVWVeS3Z&Om#a}x%kHO1T z{bm9E^%igqGy!8OSh~898_%krAvsc=wCg7A_F#|6dhEN|HY-s^g(f3Of?T#2WXd~P zHO^-4M2r_qbFEV39ckJ_BUmSj^#sRaFuvXFORx;sP&DOuFE~i1CifD|{i04yP3GTZ+L7TUL<7O(v*k&}6>Gs)spDSvX<;!Y?%^&YnWEo-t9_dt6^ zJ%rj}?0$GY*3xHU;l@!v(%!^>dHLEfwb|s1urP@DuSe_Q8jpY z$`Z#4C9nN5H{;Y28MlF$8P!uQFY+l|c>aJ5;asZc-E?a4Qh86|OC>3dM46g1F|E1{UMI}WFo zwCo=2&Reu`yH#qaf~G~yZKSKVmCbPq1}4VAO1)eA4@J=*<5)$)Ry>w;D&&!B&Y5@N2n|u2_|BELz5`~L1!E1mvE(=^cueW*rRs=Gdh#0 zAbH=(-W(utc%_??!ygsoocH;r?kv^fOF6F1yru2;Dyn1?o*j`(yXHjMqXzn0wRA00 z-;KqcZ^c~f&OXiuA4g`4lKo)f(Z{F-zv{f<=i(hH}0BMInr@chd*cByj7n7MNfb+l07$x_S^f} z$CMyJzr{YJv3}F8ci}*q!E0h%mpcyCHCbv<#lbYZ?_@zt!YQY*pUL7LUb8!i~H6L*H}1Ua@!4Be#R{ z3E=VY4y^eWm+;+bzW%q7X53^~hv4lXY0p5nAepsUxt z8yw2Pc7K^rFHhsK)NQ2vUZZ%&)m0I4+)|I6t@)9zc}N6xtyo}p6viMgy24D6T_Cj2 zFo^Y(#4F-MXQxTbco)wydKHE3@qSd4PDKdSWI%T-mGmwBxCBSwBU@x@+$+^bW1JEq zap8K6C_OIA6w2vym%T@k66sh;*2c|G{ph$o-miF6FRqwGSRR(Fbz% z@B|=Va1ZQi|0_HW&KY>qj=a(A>(8$>OsPNg;(Sk~PSFbU$y;;~dMablB~ZDdCWJ zBd^~?DoLUsE>kI6G*MqQT0t7`&M`?mvk)-V7s}C-iGgr`y72d%3WwR!n2pQ!bVgdJ z_JZs(9Bc%e4XbG6eV5P?D~UKy^Ur$GEiqsCZmL=i^%`--D$+eqqA$j}j3{G=xtUGLlqh-} z9BfLjS#-vP+xMEplY<01sZM2Yj%T(8JhiHf6M!{UZJ;dsrrJaO^1-CbzhFU!3d~Ll zy=j5&lG2|3if%ng)5OEV-G#@{mg%@4wUt?&3*3m6ZpjbixxZH*;&ii?mJWwtuq$5{ z8qvq<;h=g7ufW^GgF6{38TSa2(ZxQN8Gn4vU68jmS;l&VZe}^JI~nUD|7&;=ikX@0-%BDu?m*yxaoDRh z|8;DIpp53ZKMux?m}&0XGARx(sE-#M=KX+Y=8+CVqzXU>?>3hnQMnJY(eLybJ*7_Y zR>rUQ<;ePiD1UucG@~+_W%2Lw?rb#46>bP}{8$3%9XKxat3g~i%Qd%$%HZA99ZAH* ztf&-vtt$pTQ1PiQbL?``aW4gF&oS)o%h#~%9eo@ys;S#^T0M?auFg5Lna8w@*6~Uf z;e(>L)9K<^w7_kx9--om7}Gy4!u|^m=J&p#fVtd>PACb9ln1XWz|1hb~KRaH|;{DmZ)bFs<%cf5H@(dB7pHAn$#vXyN(va!a2@yhWMVzIr{*k3jMmud+6@AyoK zw?X@e(PQLrLqP*s#atEi;r^B1`+s!w%2Pmk8=QGoph7o3rtc^~^E_kheVs-`{UGOA z-e#W`Y^;ki0!*}%Q%%QKlvdnBmuwsD$q&yEk7{Lmf}g2V(3R z3|5~27KG|NB7G|!dV$Yo!_X=#4mz~DN)6>lw1{?4$0_^?FwQZ~;}NIMbPmF)21&Lh zOkl5A8v!46@-vWDxbeVTWtx`km4O97D35rWrXsP7wNipD&xjpOw&UM2ih+(bneGI&Ngplo1Xw8YZR($ z)6C81hI0$O7lNlZo0}F(x0FZsC$0+v{B16I6OLfsfn((5R@j6r`a_rX3JHOTpGaLh zB|Ad)1tiGp!1v~Cj$tygA;D3;NyS4yjlOL(6>a7yrGUD6EON&wx_$i&4wku{@-laX zs!a>5{Uz?dc$4~H&;S6f#z%C??uU#Syf%~lvh%yGj<<&IWHKuw$M-n} zjMcX}R*N?!wf8P#%(kz<)H^1_7*5wm71l~7BQ9DQ+ym^Cl11A&Ua>Q;1mz4{%i5P| z-D>_zbc_L##V!AUu7Kz_lw+sb8Y^GyvF&e9rbpK)heF{Hr#N?aR@iZG)?i%>$8>WJ zw=BDj2Zt5SY&3V~Cs3vTx$@Ac)1WvrXP5IDs-&0wwAIU8-*nZbEcP;vW}x$d5vy|wQ=WcCCupyp?{DhPybQDF*Z&e6IZc0m_x9o@=LsPG2tb~k#XB$y|52c^ z(%P7UU-q(n&U+C!NK6jPCAJYb&le6qi|W_6Ue85$0E-v7cw{lFT&2XB=v{OKx70RW zrx*^|^9pLeFyv{(K$pbXOttJg?{tvzeNV`DM6Xr4l{=eAMR zFj+FmV$$)9v-7izX-*I~fVKxD3q1R&CN2wZHKH!vOeZ83YNOD3&b-{x@I&A0YW|-7 zk89{37%v%eUh>%(BzlP@no%c(SWh8GqT)Aq76BWxb!2e@`Buc=3ZN-og6 zAMTwv8zp|;L89v~U3)cpMrR^DJ2ROcUYkic51D_!ta%T^c9Y47AyH(Kbn!Ux?;ircHa?i0d_~+v z`6$E<(rHfq@74aBJmtxMv*3TL*mKB3^wo330~rYg1qlru4HX#$06;-PMnwal<6{sI zzNY1Vg-JyB{sZwFdLCYN5(d7HpBVWyK643>evN+)dSE`sM369%o&c)>-4C9No>-kG zKM?{X-L^5A>epqJcOQ;U6?5xl_EXzC&H#_vgn2j44I0AGOIBC<)7;m?=fjm*)RxAq z4iT-Bk-sI|d!7Khof`9|4PVZ_zqT+6FP*X}G2#6=kDpjK+#2LoZmeAMGqsV39@3OB zqM$PAsR_^QvqyQZl%u*g^|mN;zPmnJ)<%u74dhp?hQcGOsb&hM>7wxgIu8Su?X>FFVqufl6 z;&%;&xGYI^j}-%p^*n=pyw(PaKQtU{o6~bjxjta=A2Y)Vn@)CF?5R0GR!lxbEhkI9 zp6tU|St{DRV+Ptc8eI79PiBlyeiKgs&RMwV5#$Nr(|5{CLlrBd{6<@U@d}$L9p$ z)7umYOa{}i`a1;@@0)(*Jwf$g)bI1vjx2>!dPCI-7p&y6EG#AVEhe)Ayp*FeZ3*>X zSU2J*;J7;LK{RFufe?pSN|e`i@@FLZ5{>SjWsfne+Bu++$NVXEMR)0!npW~be=8wx zAS{B9JRf>rqjERll^Ko2BeWkE9jlFEx|}|&8{hdgk&&bwl5Df!&)u!`i_Hq#3Mj^8 z5-0>W?sGSlRt<5*pnssx>6N*DyMQ&WnN1&LBy?}7HH0EpkYKLJ^Z+U&A@Ww%Eng2= z&0Q_HR-srP)iH10U)xdM>+qDFEHzlGUUI%->Sj^Y(Fr2+0fD49=|9*Bz9CYe!e8sC zn7C)woZTx?JgpM}wWkZ@KN7#7NIQ$sS7A~j*4m&_NuJkWqYWa%oF< z{zQOZ2HkcN&VaT;)1y_l#xqo2!?9BIFZUsS9*d)6!qPY6(ekeC>Rc$B(IDr)eqC8{ zTAqSA2P2B(3Ug>}S_LE80UEq292NYW0FL7Ouq;$i{qb`SUtrT)cB^ zOxGr(WQi@*A(?vvpfg9UtjqF%M?KM(u;m@TdY7fXL>ZV>3xT#&jmIBtEU>NU3LeZE z(vD`~wYYvehAVI$3w;!A7wyL44i});WWNonTs82$38Klf19n)=_bOFKgw$C;Wec*x zC4W~N7+F1&hiEQ z=@!altn6a^Ja&z!hiX3eD{$p->$fbdtj`tuSPi^3{Taq=wZ)v{G>ve$X0245xww$A znzO{Ow;Ks{2MGru)We{C7ldEFB6E;i#=Z1*XZ84k+572Q12|_T$!!e;eV9haUE$9e z)>S!b`~p_CxsOq``)4}qQZHnw@3opq%*VoG=D?j+kgDNDjL7Q+vf3vAS5(h=oV|Ru zD2JUu51eRbUs2GTa_S&}W}m^hjbaNf@S|vf4faB-m~~Z!-aDjRzIr|XGLJA(Ngp@d14G^x^sb_E=*vy(jJeK7u~tJE z9G5Q-YGkoB(>-@VbrUdOuupF@5X}Z@I@67SIng9)vv#R6~kl4)SO=f1j0Tq+A@ApqM*4D zQ@i2{mZQs`H8R?tF=cAvdl0pL%xNTQB!ohCIgb~Y87$R2V}=ERi$`XfYrO+q-YzGv z@*-$(*WRhMjaAD=da!rOjHpk7iJU0xiwdIp#$t~=7ns}REj;t-FeMfTcPqZfMkNFf zkdYc!!T7I_D7{jGMByi(l$Mr-1sqh?}h1m~fnw)ZG0?tUC$e=Q(oMekly=k_1!Ek~13H z8>q)o)0zEMENael$SruqRjYOds!XUE&879t&y@~Dy1SpDM4IR@H~LA;*#bgemB@-- zyB5&qu*B2KOdrtFN9}#ypUZX%ixc~jD|QNt;T_23n;^G|6Z6@ec+MO6UpK)So64uf z&qaq_8rpUGtIHY0rOG@6`z*f%lQ<9d-j|%l1Li{BGf$y;M}miRI+ue&ya_SThzi z>2p~0+?C)sG4E3F{S}7T*NL~hqm<_;Vt*#M+@2W>v7QO8`e!CgEPq1CZTw%%`hS== zX+m}|bMsnP&E%`ewj!qZ;4o+0^=zbUdYdEuJP6vj`mpQQUqLWTf!9tJmj?pw3!XVu zst}L*Wla-%H4+I3{z{xO4VYWVdB&zrL30b0-HAJ+S1-F_J7{yr^z0jqKx9MONZx0+ z_6-N4XTVZ~UQ2ROUqK)vMg0-cL<{#@ZvO2FNTU&TjXSIxVMA3Z8s`kj<@V@THuhND zXJe$XTc;hu$iF)7GXO&^ckEjjxLY ztzMTS$+qMN_k#cQ1;>1gsWx)-6ljdqIp2L%e##&lD%~qY_>{_q z01Mqt#;hnD%c4^vsq2%oI_33S@P^D`d45IRva^-))kzFPQnJI!n?0%xj}^B4V(E41L;GSTlHBeXFV($89D1 zeMg_Yt6xZN{&d+TQOC&GS_+=Xf6wMH`h*S^4F!>X)%~&P**JO?%wufyOCjv12b8u? z$dF5!4B1RN8n}Udw{3B!-TQ0~t_qR3QTwC^BWqQ83Jo!*v#wQm_}uRU)E2P4l=i<( zQ~hG>Q`Eh5Gj=rTYnqZdPdd~=_1#H1sF%BJoI86{AN*{RjWaKsf6`khUKkY+ zRYga{#DqrC_YX1*d~PpnszeZ0-i;5!?Q_d4boS=XEUdr3EBGeC(3=wzsac233|VGq z)Gf!a{DVnLD9hB`802QRBvqkX(~^u&MOyEyLQ7PsOe?8PKefhVF(5gL{jP0qN=~g- z09a$q)nc^DaxaS;%&nQci4NmlY2hv}=djI@TjaB8aJ>`<$GKHsdhE^_$%_{V$)O{C36DqBbiiDW< z)TVb)0hct9t!x7~DT3Af?J3KmZS2fn-d)eUJGPn5$89A1YY;X>1jwt9UYq87VV3eX zWP3M=+LNF6m@9Q)Mj-db++iM%^+uI)SY6(^)J0Eo@O`{(XK8jp!Wxb7Zf?D62-&n% za-ZMeIluV)IKwUramK_MbE{%E=GMO!DVo}e=zS$;z1K+26_2N-X;kP>0DAJ{UnF2B z7wq1oZ}r)QP4x?oC>F*ut0l9?`1hRB+I{9s(n0pg_BTO#=9J7%}MD~hTq4%t(n{YUjJck!p>c`2r`m};b+4lT&1oP zfE<5_zp*x#rLU+akoS9NQZ$Vx;UEpHAzY|=9-#ZY+`v5gh~1zkYg`(pJL zVXQSy8=Bg53cdwc(4oUTDw&7=$u(y>UPpD#u#a3Po? z?f%+Y_wsW`cAPs-fNw&%*{&DT>s({o9WZT=ILOi|L>i~o!>|Z!-{d83Oh!2xbdeK% z^Se3Qj%CwuoZcaGw%q5I&ig>G6qo7r+^jM<`Ff*PVLC8=awJG&BTfh#EiJA3VGgMspd}^k z(a0S4T~u+^Y$xsBK}*Qn)EXWdLDnD?m?{u>rwS9XW$9xQ?q~s(>1O;-3A-9+{ddedglQWd?4628*bx*6Kj2CNC%xs&0^r+p|9l^{Z zJu~SyFeEGng7YI}g;E?;o4eEMy1 zbJfSPk#@(DZ{D7LW5SckSs^+SYhF7%N6}6-?qItA<^lV@l}!A^%pP)#J6@4myS$#+ z^ies2;60m#?^og0$)Wvs^C!e8+T^f6`!dd?io;9MSE%agj^2-X!mTqr0S?eZDCQLd zaYaDOfWLL6^b>$JUKQa69w@LkwDVzDc6WNj)=H@>Py!|Ho~1vMyo$&fY{@{TD$J6P zx4%`IYOBtXyR6g8t7dH(;>qucy&({I0yH4Lfr$QA)!i8$Sw8{Zt2JV158eN~Q@>PJ z%(;-X=W5+u8sn^JBfj^D(K*uV5N+kn-j`Ek5iBmeUJpoCm}aR$jFI#05IeeuC;gJF zIT8_sjkC$|ui?Mj8F~CXKxx((9WN0?>{)CYBURwRkFoKJEGgV5LwA7^S9uy8c>P-0< zJ5exEt zk1AtgqSF%=(-&`cq1(!{B15yrA4bjHp8#bBYwG#JpC1HQ@S43q&hA;FE<-8C)@n#K zQw8l1oh~L{SKjr(^y6&c=F;NfqIiVyMP$x2>2m0tY=I7n_!((Jpr>z0=x0bIA*!_m z{@d`AHWeQcIncwJEKfV^Jiv55k!oTUXSOYvSr@2n5LKX=B2TLRn>3*hU&-F`>vv{t z1H^KV{Zi~U*|>e8KDp*s0|N2mLzf~?$(}?eF0OD7P)m&cYYht@eXs-h3h^j4q}@8h zsywar31GdNhdKDr24tS87I(AGol*bP+MjHboR5z4BAie8!=_XW0mqx#uTIjJudD|$ z2n%!cJP*cXz`%@!PSj?8_QeW-s{*zn9}5D}x-xVcdp%%L6SLh~8>G>^N8~NaeRyi1 zV6EGn%R?V9LyyTw5o-7rZ2?Bk>ye4>;MeI#(8ePho0q-Hf92r2T)J5oJ%sdyY-%jW zY%s8sp`yn%jJe69!M{a7AM{aX1TPD``I0E&*EtJ!Jt{v|R8cl6@{l!-p?;DEGiBL(#c zPX6+a&&UEJniz-EJ`~};>94X{c9?XrpIW$r?azf2S-$43eKo)&%sq6m*j-_o{r3rw zm0b5o-jkd%)Ke_&Br^u3c&QB0pDf4QWwlmFqFd)C za}6s7`|J(!bsPFpF#=2;YZ@vACH3+wLocje;0baziHp~Wr3{M!%}dBmTA!T?CK%HM zUJ4ej@Ao`VsqL*5)Y0!lmyunwUSTsEXVdO!MK4?~ep+gnM6p|7E61&R$SILYc>?HT z%8;_X>gJx8f{yOvCNVzbVTk!!=5gw;*XYhoCw^{~8P7PBbX#p}m=>RMt5Sv81V`WW zJ^>VfnInzSb}h85Z~56cBygG&B4@WFFE?j;t5BeVD{6xu2PtEZ$qS4I$AFeC3^eG}wKi8B z{70XITKXS)IMzJ&s0#A*InvX2YT-I_txo1+=b+N%?u`=OUr!A)Lv=1WH*a}~%Q zh`6yNF}`HRiCG{0)#21DMd0aC@C2yW{adHjLKT0^D75)Oxt!m!@f$f6TZkA?f%6yJ z7aStd&C(Jp=oC6Fy|I~eAGPFi#t^)v9mf|4;ZbGpmr4dx3eHuqCddmXh-y-7M}n#em;s{>iAdU?N}l#>MaKUgpi$68i9bjO#W2WonyY9t(tp? z@E>-MAQjQ_t@1{$b%o$FuJj@{DZUL}Swu~bul3MlIe7rx6TrB|?EE#eQu>6uiwdsT zFTEa|Ur4Ppq@(VT;`=MGv!G;wx*i_bxx^)|9eH^%wl^MTR~)NcA5!c1c*?-b()Ap>DJQb@%7N@?5OLa^ze7)6G>yBy{A3SPdg^}zCj3YU;7h4wem{T7xMmExoY3K!qF2t_yoxKyn3On z((Z~REzdt4*2BV(>c5q6K8~ku2LoqH)U!z1el4BYR!(>z8irKpoT?!c?OspMuRh95 zsag90^xG(j@z0ioam-kAFOR$wl)vsbl^=r)XeFKfG`^Af+^Df7En+6L^5^IzD2I4nsN%=&@)!t-SYPNtwBSqrJ{k9B9OLY32*$2sXk3y!S@4e%ck)?tw&%e_<5o6llvTcA$Cr_9gZvl4o;xUU0qj zcszuIFiKpVHA>~sR`)8)ZBk)P=_aGURSJ*4{|cKS+MQ|t)L6MU)?P6-OTH2cuoOzG z|KsIp2mr+`)$7(MR`r_XL~bd|RR?$sF@ImD!5WvrGbu|7BGKZ z=C=8YKRqr7Sa%xevMHmyhc@y@K;~Ve{0P${2mZr^TYZZ5L_-m1H9)(bKsT#T&6`t> zpNQht3^@_?mp+oq>S z{I@i>-c2TNU0H2>Up+vm2)CD0#odRUxk7N` z8N-tZfh?>TWs#^&ydioh!lwT2{9>HDw6tSUSGFendfQD+j@x`#MvnRIDShYZm|GyQ zt!crs9@kjA@Ojf8V3(CTy=>SuM>Mie_3+v zLT&H5I?0|Fl?hlumSRd7HG5fqvwd?9H&;Q*+FtEUiu(Nn&ph*YP1WBVXhC?m%gjv) zHD&6og@I-yAu{9n*waS{?;)qnQ{NCHzquy>L!BmqZ@_uo#FDwmF{0I(>e2RDq=z zw{?vqyF2GOlyfixlfrM3y;RYF6rb@fxI%^d^k+SWBavz(@j6x?qu_TRdX3L>Vt7rM zDLMXr4;)tGyPmlHXaX@e`US_i;XXt5H~&_bUz*J%rluo?cm0QR*wXD4g9Svza>RFX zNNv<3&RDabC|-tk*}_ur)wpSxu<==_ZXkxzgQmdN#x%{;;1wM`zXufVFmW}eQ~1hI z_RJC5NSdz@|79z8$yASf#aOn1ZSb@rzb{Vz4RaLQ0u$EWlG#N}57qBC;}JGkVuN{P zvz^>tIc_syGb7~bz?AYlZG`7XXp?W@6M!kOz}bfI#|;PVa4{2$Yh-weag|fdkGZqXqzUPgmtf&W78Q;`m@QoS`}x z>)=ekQ0vc0raccXPNHTmxD&d>o*{xp9~W=WcpJXUGee$FRrwM*z)G^a1>4mLYUS>I zT&W&bBwR`%;Zx09*w05xo*wiusRn{ra{~8yY@q|oC%*}(hPTXtTfYTqSy)c;pPv)_ z@Qc9`(>)2jP8lCan#9b^9&Y)KnUhYwQl)xzC-cG|!ddS%_aSv1(K~4Dx@+8nW=Vn= zUu=AL#&V-51?O!FRY>eFXSN!I{)0ewWUj4Zp~YM^zG!E1#c=t~atBoU7O8WZzSs_5 zJ;4uXSv;E%!d9ZfpgQZXBBY(Fxs|8VQBjQ%vF=9ApigJ%!%Tor`RMI8K~wW*_gKgL z603Q7WIHe|6RtW-4KcJ)W81~)`tt1MT*lXHsk#-Dy#D^Wl><)PICDqw#gW?H*Vw5L zOs!BTwxye3nx(U@HUsxwX!28?a%(kJY^slq>@z`LTcB^=B+qt@S574B&0XcHd;$Qa zM2*%vJ!#qebmK&mqN}zYEVhBy+mt@#L-Gg?thi15Wg9nb@r@a!`oymxYBS831?-u0 z{P=|DhB^guE%TM4tSerAduRm#xN_?JRPf%)#imZC0X)Afhstd6YkYjZozN>T~Ull)%xmG6R z5#{=F`*(G{lX5bpga#;_ZRv5EV3=j+>Zw-bcgH;7DJ;f=ZbXn!XrE#Dj;RN~EBQ5# zvz0eQTOB=9FjR2o7__GGA>3nn-u=~}p>O6L6!MDcI6#=A(W&w5)^B#mg)wm4;cmR* zPS9!@xBl^fgplt1fNtA}bjGYyRggaGaCOdx?287O3u8Z1Qq|g@Z_X5N8^g(aWGt@8 z#jDx4+Hz4TpzNXf#!dai8RoZ3xQV&!QJXZ319io571kTG=hE-CH=o7$z?BXWcTNU*WLYO7;jYko{gj+gV*XeZLk+zdE?euO^1}pI^9k!w?)p> z8a%VpkF|7D@Vq2~Sl2mguX%rNDFr99HPs;dpp>w}+LmOk3EB}8*bBtBF#al|90liL zsX{V1solhGb@HOLva{Ti#}@}yw{asYY!o3K5chT_zK4)`ynX*dzRu1*&P4IbaF!u` zkQOqZC@e3yIDK*Gp3fVkRMHyo@s@%<<{fql6V|$#~2A*s6Q_=w?%5n$;xmM+!}o zU+~>FA?smnc{QtLGEK=aBRoL@cx&OoIQ8$|m4=!G;9Vz2S=2)Go;?3&B>V6Zkt&Uy65?F8(3R~k0Z zmh)OdEQ-&P- z&2N88jV`kI=(%RC3PJXWX8XiR|A3ctV(Ra34IAur8C?DbI{ZbA?_kQSPHnhDkG(r+ z*8lS}dh2R}m0rlo@H^zZTJL#7C%5;rBUsx7Zw<)?&+KsmC z*29jetj|F9!)RG?W~vQncHHaZh&fK!-;MgQ6q^C1^iwzLQrs6Dci`f=lA z!qnsNg{pL_{GLxC8VfXxMzTpQ$(u0FO3Gj#k9KJC>~icM@Za{2Q(8(b2{lLFJ6!6uk z8ocnz^ROm8i6S(G|9*Y~n1Yn{qRi?9OgwIJcx8)t>M)uFUXo2MT0Ve|&6!!joRlD% zwADt;rSV3(pDTQOg%UX*Q|FKPzcwvwqqa+7-TG>C2$v!%bc=J;3viW%JlEfjGsW9R zw#=?e#J#eL0_(?He$Y0uPgukCBF$!Tsoz_ckjE?h61pf&R&znc)JObIKzhZWKz|uR zv=#XTAj<)u8s&T-*2@-LvYn@u(E~>>+VV{>`>6LFx(}&7zgx+SQC9 zhMDMH@d>fU=U^147mYTjfI}$}o?qnUvChK9&*82$T^dfd$Gf(g+FKodF?7%O@ikim zBBU=2EnVu1d!jlfB~93%kU0z&CIC~iPB{MxZvy!Xb^)PIr@clItfp@B%8Grw%7vaR zb*7qfVHegyJ*r<3zwDwa<~voRpdF76!Df0pqGejDAx*{$r9{Pq3OQ9{W*Z7cp|@qC z)P;|?j((MwvVR3@t-#snnG$p-EepU5i3HFio3z(%rRfanVUCutSTemiu(Whmdx)sk zIu2}4?n6{DF7S4$gY^yeW!+ra^M3{6PXJ|@?&Dib!5_ns6EK|V08RyAYHvlV~mg9v}NQUlI&1yM{~`>>HQp2%OpJF-;uG>S{CiP5`?~tT$>8R%R z*cJEF>|7c5B20u9vHiw||E}sAzg^~F9OD@q1q3-Mw|NQ8L;B#Z~l0X z-%BrwpTiQMa zzia5iK6`+FOxrEHT8l}1uxfJ`#vh|A%vTowxoQ4+i~3TWH|9yf10BX>-?58k2#g+A zNSX9T&97z6cNW}Yi$A#D*+zU!;#R5432XbNwl6NW#b~>*`Myx@uqx$(OYRLP;cY}Q z4+3Q)Jy~F$vqm%vDoeju_Jh!5bz#=yrELk}d-)u>8Ecm$jfD@n+y4Wb?Kqj ztP3Wx9@ni94Jiq`=;2---TOpLvD`X)FkIkvjX77f8L;Z8oMU!fK@%*k^!Z#6W3boN zJ)3DjnA@#`WTLXclhv&+zuwKf}9h zXHG5O@P409iN~GVlmL^o?+;F3FEXFhdiqso?9H96mCVP>pY*S<07BW*TvEs*$UqOA zhCgIX6Ejzt3LN)_b&XVtTNyBq0Q0M4Hbh+ys)MoZgLug?NZ#gIZTiJeKB3)N)LQN{ zU)(76Vi<70GUm1IR=L`x1E1ZI*Lk0b%CTvnsq6HK5{5|$ieu*iE*v{5RqARucVw{ z)ys_=u+c-FpPiQ!Q)3VWv8{U*@yoGl?6DUqXo8-J z7htf{B?Ix+$b)AS{Y#`qM|S74u~UpzqT__A@xtf6cH*-;U7TkatX$!7Th4LDai19H zbNk;J+{}wpX*Z7o>!E^(>m|Ds5x6xtCggH~9EkWpN3|6r$Kx0tTa9NP$x|?uQ-vY7 zbz!fP#fsG7KCX8-_vb{XobauoujjT3&r}~cX3R1!Cc-RB;jTLI6Wvn$4$r=0V%tV` zC9o3~+9IYN$RO?RTZq`U(bqopjh}kP&%GmO-m$aqmN$hT?LD$51CeWKEjTk7`Za^& zAk{FnW|-kubBj&q8ntVrORXw7wK5}GL|HN09e-DaKTjHE8nV(OsR~iNBzWJBcR1(s zkA8GKJ+u~Q{{Vo$s`SrU0(<2EWoReWr@s*9NAPNTqP4zoP8quqt~^IauS__jR=_l~0z2H!UKW}Ju*wB# zEB1QQSXTI0m|=D=vMRNCOOdX@SNGtYyyM@FepS`jUf2#CEn0v&#S~ic{(bCWSmr+3 zq?N=~NpV{In*kn*j<23tB6v+C)c}N&%q!hKz}_gNsAH1}Ow`BJvkO+$$5bNb)ucXP z)@&$zSf`aE#v9rAmTdwRM81q`{G_dG^X})dcz2-3SFSz=EJv|>lHQ@D6Q;+H<1qO| zhuoa!qsK)=#EgrH7rWaFSoVG-WPUM##z*+#4b=GP))v_Iw@RLNfys`K&Ow=HuUQ7h zwzk@{YlQib9Mp1gk8fj@Gg;VQuG^%HKTl)q@W*MbFGlv~WgkVYBpDxXRZUe#6(hj^ z0D*H__NqF5u@va59@eH*72x-XD*EX%$zq1Ima=3%2a&uxraP>d6C=^sJ`!W$4 z!HBFJL*F);n26Q6?`xjD}g zV@LgjKF@rY2g2_wM9vci&(j9nXpzm~NgJ`;DM9U$0h1uKjdCp?P%LUd%IlS)WzAEp z_2c|;hhKdAKE;-|){;~6-jF`C)qMoyX%ST3KbHM(Y2)72o*87*9t?v}s^F(?ja&GPd;JXSyW!S{fS7YOFQzKRe5NKlpZiDh9^BWEV;9 z%JpgW%~G3Jj;x29KDz^LpqWuOr@arY(XYPtC(=Z4%L{~CTA4NPp*{oD5*oZ{{<-tm&<>TgeU63r4s2X3%!1zlo#~8mcoEJ8nk{56b0kxj$!;kz#7P9TuoI zxJu`{*=18|y8^0^-7VJ0?pPj|YAkX%kaewkxBV-i!h3ji$4|7&);T406QuWg-13&a z%_LKXKssT$N#6A6wsL>u4qyN;A)QG{V#F|$RHsLBv0=r8G+;k+(w4U9U*<3MS+u;r z9wqp~gWYhkKIzyjA!Ii=ovd!ZOCMgQiC!P1xRIyEBzX<#KCamc{I9KnQyC+}&br;% z)M~L~!_~`YuUd|Mc%S4GAN#1hX4%l)Pi305j8$ zt5Kdb&)w^O(Q|RPPO5INe}ARUWXhVm2)C6nW{Ysu+f?sa6yxsq&Y?tDm(XSZF z%I7@@<$8YhquIbTL*7-I42f0J#TfMS zj|9Co-k+u1`A8E6NLW#1nULWR$tEs{a1xtEKcmC^wC8#v)jPH+ODy zY?9y8_$YR#bCEN9wXoUu3n?;sFFwYfXADID0Mc)?nv3G8oIZ!^FO%h!4jfweqKz9i z?vTivc6s%h9)Rs|&Y3g+0OAk-!~j_k009C61O)~O2M7iT1_A>B0RjU61Q8M;F+l|o z6H#FzGD2~IkrW^!Qetv~p|J)tKvR;z(G?^^W1_Oc;ZRgnbCd8TFkobKgOrstHAJ)0 z@paRHgpmK*00;pA00}<<{{Z>k?#^AI?JZd$12rol5>m2kZ+Lh^r?{mf-xBf@jb@#a zm{;0KSHc42bc$1HQg2eEZ*4;5f$skRV>zctIbN{JwXC-?!>MtljFg|dBf=B2a;3SJ zD_xVx#XVVryT%{vDlN^+kuxkaD{mB!Sv3)X6&+g21j=SSBF{-}sR0(fk}2ZR6I(Q? z`Jycr?ckQd>2Wwlm7ef`t6M`bvwk=eWc5;zgd%3sjXV*}w$iNBZncd+*j9?PW6DzB zNWa0>qf`F?Ec>+xb7qCUSazm>q12H>?Nh}EWjSHyRlEcS)IFL-X#l2a(z%z=dJ1^j zvFwi(>rbwsnO3N$R!0tq;%<+VzDl>3CpmqAD5P6MjV{CT?$c=5%Cx8;E!;FLwMy{7YUifs8YhzKGi_ad;|8+xOrh56jT9?G z#CW#6Fv&l#vS_PzZl@R(1PeV;b1u!Ta>LNF5>@Re6a6sSQ6(@yc`3VQ@y?r<@qri| zjp8b%yuzYU_HfoNFyfri*flb5TO1YVH}6akt&F43wxM`7QD_kgwCcG|E6!T4Qjb}J zQlyYlplCrEf-o@Dw9>{C4%I8Cq!Dtu;3XP35LGI{DNBkSB`Dufh!}W|AIT4{sagL3 z(>Sh|sIHdmVL?bxs#Fa@2QjZnN=wYp9gD9e3%?7F_#mW;f(^zrJi4AztuEpcqH|J3 z#u5^QiX|x&01Sup!fMONDOUcm#6abs@>i14lE+@Wbz&nNqyGRcnYPTd$v-k(xHP{& z*5j5Cnms7#Wq!^F+86%-s8VJmGn0O{2lr%N-(}IDCWF7LnQWu>s9`N=#tvV^Jj&P39*uBRJQekg8=P$Ut4>hhW^s_O2XOOE zdJFVVx*9FK(u!O{u?JQ$j;u0)P;MiEin;QSL@*ODD^sAUAb+N;DOThxXO^&7!LYuAx>|cjs7r#wJtDd9_(k;lyyl1dQ@i z&f79j;U2q0d?H2d52Qe%G?RavFgFKjMcC}Sd{}Z_3@Na5aEH8rDt)6T@qmmJtGhKNj{uW!Ct{|mTnRv0xmCED-5k}VD0LBE z=#Fd6DIHb7$0cY{LdT?&LjaUCf~8X)$Oglx3r$7$#cVj5U5Mg1h?G<9sQEV=ARzkW z^C3Y`Emqx7!qM}13!KS}E)1*iW8| zKRnl@FW&~DmmPf5hNi^CjKg~kAt1k-nU^@BRp|^+a)*2?f*&2y#@*2Y1EmgN|&Y$CNKN2IkI)_3X}oU^0nmJ4nkYf~6s!OxF~ zLcAW+uX-y`vXFZqk?9O$=T9Z!>5ThvjP4PD8kkz0P)^kW!j{~#g|IQ>zxoDkxn`E4 zlr77FAXc4lK}i(^W)7?)O0ewUwd5~DoSbMEO4C-9m11E2jc$Oh-OxgkML`CjjvBCC zhbT9xH^XUDN)%EQDhN3d2nj+(5|AhW)B#Dv7`?pHntztN#-~=q(+jrKt*Xk|K~64sECeM(bHLV8F|E?*HG>n6cF@`l4Gmz!<(bbxs( zLaeUZi*)4@zM%kZS(jRx2McE8*R;aarKv?rS;a~?lf=Rl_KfJHbJ_mydVLtu+h=oS zhL-Dtf`UgUwjXv_x~@*yl_e=i6acFTdAFK4IE4idcB2>Sxp}vd>VZWJj;wV6YmVa& z9h*t9qx9Jp-j)4a&Tg^C6vJUFvKHHjRkodM;Nwc^An(L!!WaDLZ`gd4Ybn2aGrC}KD8JK~6&`lFwzzB{#Zl0i&h zMSJ1Ir8$)vd|@3ced&$a-|U-wZg*^D}8(9HpfYfoW!&)%3?h za_pwtiy)c}_ePg@!4!r>!yh`uDM0lJrIXU7H`WufoI*i$n%CMv%tCDz^kl=Jaco;3 z2$FQK*G-sMWs~|guDglE#luwe&W#fc?U++c?N=~>Y0Rh;IVpE;ho!*CDpXnRqM!z6 zn@wF~hn|h;_;{BuCBVl83=XVyb{I>OA19QrBD4z3X!j54rMIKcYdoRG-Yi=6|GN{N=;KUNJEJ!G52B-S4V z)bkl{mg2ZjVF?M8LXN^$6r^ugoTwBKBOUs?BeFk8MV_SnI0Yo!LA(%hgKOlTlTwVS zRpL$FlYXZS(7l^wTV^bdZB6Lv`=aNb(UWYc10|`m@yak#Lc8zQf~jPMt@MLJq$MPj z*NzafdCHD1F0h6!&9nmVWnDSX~cgn5oN6)f#n(Vy(agMhOXGs%ojnSWtzU= zJVRBaXxYh;`puhZJ%p1QEvAv?7u3Ju5hBOiSK$(j4%I}fAGH$AcbJx8`4y{b!X30s zv-Q2!Pe#{CI2e>;y-_O1dZJa1^+clL{X(p_yyV_VNJ<%f~ zlU`QEr8Ey%1*P z?uiDE{MCLDqSI(#q&>tN2ye-U~oFSqUgdgFlZE{ zr@jRM6a(q$@@}T(Ql$&YV!4Pk(sC$Rl62lm6HE#7Y6#w#xhp#d(r_2tf6h?dfh#)d z8&B$#ZMXXh5r(6ROb7-6Eii>!U#6@R_`y;fK?*{J#1WV=EX?fEE)IoQPaUN*>WSwT z$x$JM@);F4Sxz+LSi^Q+G1Oqeg9Z#3Fm)Yf3?CAd-4kjI{X+bsUu5CgNJx^NGzql7 zB;vOrM+3mdG2IwyFwz_zbxKd)5@-BR>Nh~IgfZYVhjhfZDF@p@J=(Dvh^}D6t+L1Jm1)IxkSxFqve3MYYH!cq z6D}6>HKlv9@k}W_@SzG2p$ZV83J{?R5TObXp$dfvR4Nq;f+0c`3J^z#E{7KWkHHU~ zQ;c=_$oGhGE->Ok+i@nTQceXVWf%_-YBgJU6NyjLQWS*(6qA7mC^gU;L1+~}qYm;~ zce9wTs>M7Z)LN7$4-1#_jUR6a6yR|j4-pyoinQL)+F0pu96Uh^Fd%9Wm`niz1S8!D zga`rvfFUEg6YhdByOWfD=!|-x8udaw(An;U`=C>((m6wNu08Q`vq{HViu5b1aEeAWGO7o z8zr|K7hG@1!y(5|fLyc5v~a92lnI|KwcMJL1r`s}mIi zeKG2XmXtD0q*)eMXkC8|Lt2<=>lPbbn!HoyqL-MKn|hgmgpb-a5u>KQ+kcEm&JXa< z@kG&Tzg~ja?>9n%hXYXn5dzAwLbFP@!fd?StgLa>lsvX(8aA7CwOLR+2!peHP$x(w zK23k$B|O9FVGByyT0)Stnxuo6BgD^?pTFrm)x0fs3hL)1)}M4Lip>WYa94G2FpAAe zEpE03Dna?i$7SP)hp9Cxd?!V_=vJz4**Af@8QI8bHLYc_gEL9_=DT_6?bLZ_K?wDg zaM#v+V@X5IaG#qykE8H~ierW%F@#3XYgE$RX-eOR2$l{^Hrlpy0@?II;}S}jXh|}z zT@RHc+DIcBcfnsRR){Jp6{Rk&9gw7?y2{WBg`f(BDnvPH*-5g(Qh7xPunolYPEa<@ zAq90o9HNX;E1YemSz#p#mr}yRrB~hoDHQL7DAW^gqA8K)Z?f?jin7XhA8&M(5gx4Dg@f-Or%hKv3GP2AwA^Y;QM0Z?I+p+Qk~l=m56$eh zl~Jo4lY44b@*-Yb+iHSjnz(lac4rDklA2SVO3D&8V{*oHg;HfsIEI61%GCfuGO?Ub z2R21b_)VWF$)O0RpG?dx9vNgUDO#yigMLOT65>G>NlCwguZ+A;>P>$X7^Rn{W!Y75 zvg?UK_Za6H`GG-@ZF?{~lNF3shimMS`0C9+2sT_v$8n36o0gt1E=0qW>L$?m>$o0k zo@v~87{gMO+wCkZr%-65EjTD~5wmMc8=7%9H#0$(n&+dQTCo?1%vb3&33{X3PCoAw z5dgO*JhG~y?Ucynnr^Q+af?5cLv~yqY~viDdY6dcU=Tu=al~*vTDKqdl)@5#8Z}QM z^L=?|r42NOEvUNvJd!DpOieg+dtO$lRTQU^K^Nh1#0#V3)|Hs>f=Y`rYb~nLt)XEA zSB+!j9+BF(nr&2Us+=uhA0afeO`&1JwiLT|h4!l5qD*KFEhMV}1?Q!fgd}@m6s%9T zXqs7HAlKTAJWuLve-s$Ff(Sc^yck(q>Qa>QjwNa}B=y45+d~y9=&s2k%Ru?N&t9#{ zj5Cg5xxvHvMh+pTE7qEQ+PB4Q-Dn6KMit6w@r^Sd%P6MtoERi15JG{W1YQUu0y2ev zrI~K1cH!YD9V&U_rQfTg{{Y|8P!wfdYGGUUXf$%1Y!e2lH-a-BCBf9yhdjp%I`*Q^KeAtE+ac-X>l(klRSM>xxiH5S{8KG(^UheJZl- z)2-}e**=x3VVF^`2-ACRYF)$Vtu-F_ zSXvY+l_b<2tz6e-QDpH+Ai=Kqx*k(YB7}+>k7}^;-Cc1}_zVWWHCnL|iP5sQy1`i2 z)d<>3Eb`H~?;DQjtI|roiQIQ?R4ge6yl^8ePbry}Ru;>t#S0i1qF*A!%VVJOdBdwQ z!Z>{-RU}Z31{Mt7iJ4TrGcx$FzC4Noclem1{>bD9=p9;mFQW7>x9*DVW+WDelexxR zvPXH=+L(1=zbehf{OE2lz@3v7@{;_egzsB;j>^FYBmSbxvl9+%*_T1K>WR2=6I04J zCo>M5mfnbEU;FDAda3V;cBQ2mNJ~sIfP^3nfFJ5*nVFPyQN~_CS`;{g4i{zXY5fHH z>M8#0qn`uc30o74n==xQq@mW-H>FfCn$1d*v;m5d(n$D^8~*^Pxv(szGS!}sXZPII zylNFm9HAVh9p=}6;{wu8J+p#`nyN)?R*DClg?XyfzDtcV`Vr|QlqinMMhEWtQ+1Yk z21`g&G}hV)>J_JSC@Bg6r9%P^ejyu0qT3#_c}VxgY^Q5Po{g#!KOI~nG_@H+8!5V7 zHpLLiMo1yTVNaxFxqFTGQtLJ+l#)Z+6{8n9< z{{Z#Fx;Y(EKZ?vFMZf5-O-c8q$oV*=BA2}){lD0D&&D)?O!X~z9Lr^gNZy-V?#Kjd zSAhJYVLzJb6bye>`01nJ65a`>Wk4@6lF)E{lhSPO$~JAxbDe0KHohX9)qG-IX z=;g4!aLH-o#tm9nw1WfYB+`I*y1Jj-fkTZxlt3>xCRqVH+t%+*3i{>dUo4 zmHw`|Ok0_8me#V&>+?c$p!nI>{Au2@epoDXpFn zFopwYwzpS$P?3o+s=gzY1;8lV>ABQ;s{62mwvkcfO(zTRO2!TN`y)IBNbDvJt0K{|4eA)sK?7_klq_RWTO=5wY>SdE z1F8&C2}@48hv(f!C}|v{+&^lN%2||`Z7nj=MFLQfKnA7%0H<_D+fNUG48bb6BJhwUrj4xy=LTT_m@vqYf@6)Goihi6ipoHA}%J=HMa za#{A$<4z0|gdVDD+sv`@y6;cfPo zm9*f+Dox>CkOEvPGR@747OlIPB2vQc}esOfPl&f-g(i~f^ZziyqMPbER`n6u3=uXOJm$t0w=EghY z9r1?vO{ZA2m9zD%ub$U!F5?Rem6>S{vay<0E2#v}=+Dok3Pn{`hb;o0dMY5*Nx8)T z01)7Hk!qZp=fkhW{?23f+|_}&$346{(FUY)Rn|48(~D@O2^pxG0p9?5CQ#jX*%zME z4k@Ov(Fa7!fs ziypDW#e5gT-0(nf03=(p!rfqBGayi}{{XDIe;%Xxtoar_8HA2c+81|5`2MUUjwTYeQz1mA@MznL}=@GifRbPGj%k1trJSlqoi`y3rgtB02KXO$SXW zY0@n%U8L%AkLj28OTPaA25Xk*eaY>Njr~VkmR9N%RZKz+-?bQO5zP2%BrP}HjoYK= z+Msj}I4ib0qq;fK&Xhh8Fa6WXHj(VB-KbS0QA2@>p)!-tw9r3R6;yu75p$g;{{Rht zJlOJsc=NvMMiKQ`Jl9rxO zu2mUuhEUAANeOMFCdyKgkODrUZ{DSERQ@e; z>^9q|M7q+Z?I7AVZBp)SVGK;V^`PG%7sE+FzO?}~IYDXGr~HviwJtKI&MQVD&j^;9 zcS^`U?#6wjRlaq~SXFLM7+Dsj3$Cf2QroeLxE>k7bHP@yg*<3EN#!Qt?}s-28Kh;( z&8mW(vJdXpTD+8wjcSSX<`z`1-4THih>YU`x(=)dh-2oD?8Ow5gix~m1C1-1wBu!6 zu!{-`qLEtI?anVT*%&-mF6R`jHohqlzfed-PTh}P0*W1?KdOHgv>|S&rL?ebQm)2_A)F;lyd6%}x+IH3co-3t zB3v28y30xi+jA%!;YRMcUUVQd-1Vt)qPis)-L+7yrQdml33m}LSbJuxmYVYoF{DcP z9kigPUz`A^I9CeN4Nr%aU%|DnS^1}#VIHe&r|(v;oJJ#fjmO~_ln&1ulsqLCH{NX7_s5)I70RrEG|0_9 za(yJjfowW}w$`4KPH;KTvH%(B9*%eAwxZ4PN!t@QdzZLMa^w7qCuS6)dOn0k!#Wt-%(pJzU^1a8%qtUnl4 zryG&kIqM->*5H*;t=E(s=~$yu?>)0^({d^e73$Ly49U(vq^RQ$v_{dOe3)f>Ob|`= z&J3b-bj!>k$u=Cl?YZS4HRjnBCjKzfOv|mh%1X>jmfKS-iwRFAfa6ei!jwe?>cl@f8Tn?q#v(teGyBWckq5h1NL+Ujfs94Q6H#|(5d^B2Z4N%vFY`A}K4QG?t^WW@ z&KxDV8xqZ@B+(&C?2p-LX1%^=>I(j7xG8X{2a5jGI&=AH=I)nhSB zsg3aa%GgUCf>x_VI8hu1^9|XRdBrx$%7s=_iAr&@H{k}#sdBd+{gF#^ax6IIFb-Lw z$9|^D=QLZ1o@5M45p$^>XeJF(MM2&*ingJSX*m(ZMpvPE6z?295NabGa_g9!eO6MG zd(CnKHDDq1zS~RM=?TPhCZ_3U$^NOK$wvHji-V3|{{SgsDQVNPZ>c!yHd<*aam5^x zfm0T(PfkBIMH|3zR+2jtL96Ee8u1iu-{C)WbQUdorsEiRGemV2D_2O<-5lidRo0u1 zp~!cg>wh@is|Z&p56#qb1EJZM(v^G5OX=!yKZuU_16At+n@q^c*W(z7$j6%D_-eu( zN*!$>g5t%t-APD0Jgr5Bv_mOvJ`BmSw95@(oXe+}q>WS)#hqV?@ogw3-lDaDNPFY3J3s63;L9Qxg*3C$x5In^@Z``?eb; zN&w*%NxbKc~O%Amb zxPl5)G9x&+s8M5b#l(FjB)czLU<=DCH~oWuR2rvI)!7)w)vx2Lo>Yq-wX33CugR!u zW?f1^YTd@*qg4_NZP=H6m6lSWRU+0bT1`Sud|``B$-deja7>N5n4sh$n5{)rvZym> zWa4}r%^Pnawz+|QP>*TE<9pdrE9ZS-$w3k?QCZR}Js3TI4jVUVUglN~7 za#HXVva{wmE?0a@u3m0k)iX6NzH=_86sn!z;75s-;xw$=d^VPc?b?kyIbm3Yl%w8+ zg9}pKJm(gowV!EM_=zN12?+xADBzJ6e<@7)Nwp^SxTzm14s~;1qj2=(TJL;?X#^~JxlsWxcvDM5QHwRj(pS$TM ziWj8AMNEZ}Gb-4$rk9yO8E;NezMduV^-g?seRDs)AhheNRj{-o&6e^Q-bVOm^NDv9 zSW4XIkx&(0A}lG_9$KaXn>H-A*{YB;qNz&Z8bBvU>vO03xlK;3XRQ`|CU#0Mlan$WJ?v-gtRh3b4(u(AlF2QTTJ@A^Lyhy`eX1qr<$2lHZ z9?v`7A6B2gR%)laS3GhT)}4Ph@YjsPq>oh`k@Tsg%4yb-M3*XM=2AaJFp>K!#W5!D z$-k5-6?JY3HnZo4IgTfBFj}9MBGOjMf>cMUta}UvC28j&K&3;hD)AWV`lbAJX8S+B zBMXP$1!O60wv-_ycc|lKBC$=f6m71QxKv%nC0;GND&)JR#+(#MS#@QxOI1~CRO3ix zZK26a6K>vtG^bA_0fD;#+dUU2S%d@%>kv25~`H zQjqgYOO3dbWl2&EproDR6qfY#vwmH?1LzlRn;*WMwT+DEO_rxpIbN%taE7cPof^=@RCQhxRLM(LimvecJ8y%? zd{sZ*C-EA@G^ZUnHb2e7t{!ZFYN=-VRp6!m5CBLN015yGL+NZ<7_{A`D(-e1YXq;lxfqf}j*(FbW$Ru|OFvfTDJOBp6}OSC1He&8;NZ)z4PRF0 z$5+=k`_OVtl=TbD1gPbod^%QxnWcKJhMCf6RLc&^$~x5>mszrcw<(AU(zR}A6zC1;T7TPkecg(opwjvnZ+$I1p1`OKyP z&_7JYaZdE&onbCAMHJe_QbY$N9XTM?pR%jI5#X~a$hPLmUB>9q^PPpYeeoeV+p`}N z46w>`FF$YGn4DC}AE97u+xK7ZiFV~B$3?M2+ZXC|rJNQ^rEVCg z;$bU&^;ZThkFwhsYIkj2B(A~PQ)wZQlrP@d&gyMOart8Et zv}(ns-N;t^C$A`V*>_uZt-6I-QdXQ4k}y1BX_L|kNJ!GbG-2b1mq_`wA2@PhK}{@G zw@|A{P~MU*Fkr!<;SaCAA9KD6k6Esx4V52Zrv|};z4eU!5qwRqVfEI+ zIjC(OV`&`34c+i47jPN)#+GqBU|VeSs4wdft4L6&A~6xtlVx4%UaoKjL#$sOYf~xe z9EJOgZV-76^L>Bk7(!^{hz>ix(uHsOYbbKhHqvWNcO}7A-5lne9Mz|*-XQ@$DzqJ2 zP{+dMaZWh;CLFalEYR?G)z4F10&CK2-3hYl66zM6$_9s40%d}Fg26DWNLU0Bfd^7j zSt(VeTIB^~0M4+r)HLGkr54me1x*0N?uloae@G>#CL4Xlm0T(Xh5X+TB6mnWCT5iS zJRscKS8|$1qrwtwQ<6#LRvUfR)U+g_gj-n)AvkW{VTAY@ZA|Qw$xVZG1tP;#DF>5Y zNZkp{gSkU^fkFu>v%7~FoVOx*@(&HHvcKi@4-`@vcS6mZi-NNfhNhT-X&s^`CA5UH zxvtARmj}8UT6)t+BfbiI;`6{(6SHh$w+)2*<4Jy2okiXWqv)^|g%;;EJ@I2iXq)Xy zN-aT7SL=8x zvi@<;ZEHfh&}kPa8rCVa0*($l;+Bdmu9+z}ALtZ*f1<9NNc}vLk1Z$E#6|i#d-H^Z z;eXFH?F;F?FPEK_6AiB;UP=44b41L!S5RLo^(JoLJe~J7Buj%`UM_ z>%K0A=`{LKhh3?vlHF{Mp;$#tIV%{X!ql|3N}Ey?QVm5pWA2LAQ?4jHq?-ygN+_E= zp187IDJ8J3ZLF|{b_z{Ufo7F8yy9-%2^&h~oFLUFv_!+Q^8&tArKz>w={7-+lyfe& zj)cf=U=hb?n_l>5L_Bw{K>q*>q9k-0dZbtX0PT$?#F~HIr5i!-b7>l0c62FKu=DC# zF7!E`=*tcrQGT%)#xO-zfWDw`uXGYpp~?hvRl|7KVF~)m)bV;j+nFpYaX(7l+zSdvzPeBO*5#K23Dm%dFD0%_n?MvWFLNZN-Ex zyQp=#hT9meY6%_YG_;JaZZTP`G_#3)oLD!79emThSr0<*XpmaG12 z0MlP_+8DFSh=Zt@xa+~wh_wLm$mJ}Uu zAtB3kY#vIE;&(y56=hi<;C~1N9mG;Fj>s0PxO>DmQk&4KL8fV5?gxY$lzG5iSScY! z4Qr`ZLC!A#kyyDS6G+0yG=UfD8jnN{>!4q4BfQc%z9%(C%A@-xQ}>svbRRxh&)!6Q z?6owMr}uv~GJ(~}Ux|k3Ri{whWu7>xDd;PR$i%ssnwW66F2$=N;ZmiaG(^ItT_&kY zzHPn@BLo582^Nw;O0!8Bq~u}MJv%CkZA>qm>m<^O;*I;hloqC0umfo4Eo(Lqgx7g7 zD(tKBt|bpJ;YzvUsai^L1{3+tig-HZ2RV*wiSCd5JBw7rx!%;rluyQ*g+ppfgl`Bo zsqTYvuN}9}L|-2?bSN>nm1E5PdL^A(u>P&qj$VX4K- zTVri7>MmN6vQm^J;yI?U^REY5w%*ZYX3|X!3b)n;@SCA2rua{iRltq$+X=LIL88it zv%o@9prcsC>c?I>uS06I;P3)=DR~(*r8o_Yx+*@> zj;xajDpH2gw2W=F%lHTdehj-#p*QVVP_pZMZ6Mvo91gKWIV|wKF0kOX+koe3C%?qB z7?DDqQif|#u!MHjuovM;b@U+gHe>}VylMp@FcKoRTa$lkcqpU~f6|{@8%4C@9!RuM zwv}xrhY`F)+NP%F)PnoP8#K|rYEYZ*z6DWXR)+MbSy#BlJTFDRGomKVFD0H+YVA&} z2%&|USDHv`!k6<3vB|2GIfm@+g#{r(sZvcr>OLZE0ft0z5DM6>%lvn10Hop!3Zpb; zI=Dcr;|Z{&ePd+Ty*WcGZo)`StE+2-D$D+MN3IZ3ua8tG-2m*>h^$z3AYnj-p1g^G zwx-f3>ng3G>F%M*k;=SRh=d;~zDhvu8nlzr-VFZEhzKYHW|i7qvBn5cI2&Xnt`F9j}Q8a|v@X5F4X`h#HyMKPKIV10kT3S_2;9@&Oe9c1G z;>(<*5yF>4h;K~jv?<*Z>dnr|DDtJ%{nCxwfe^~rcphr*?%&x6Q?9F;ge0v;u`xE@ ziP239PAOy;Y1M*B%RUjKw3~W8y8dz+MHEj-NK&?h_C&&7NvrZtHm*r<0-7Iz-3&U) z@UrN$@yD_lQ_h?c*tCC?1o(W-3*=vABbwMeK0i$6s1SOLB>w=Ur2H;h{x(Mtk?Evg z7${d&KRD&JT+|0CJ=etIrQ5AlD6zDaSFzFdX%go~%zbdHva0sQ==P!1I?}LO6cm%% zHRp(dMP}As&*2v+Vl`qQS$8z#ujc~s0uyU-%yma8l5SZ0^(N?-N`_Zno+&tpO5aMW zo(C|N`-J%1ZNC3&2ibFBE8VH2^o2GJ{!qTI!L$dfk6kdDp;#84ar)nlix@} zR-MWf9{6nt8Hsq^C`H%r86OmRI@(M;WppHkhct}P z#>qD@*7u&l11w=1Cay%hw$QkVc2Ue_1oTin_v*n%ly@XvV-Al{)&BsO&9u2Wqvp2# z+d;*(QB{g~OtZ^n>S1XajtazZh0&Rnt?3eaFB{g^x6T}EsYq`~GLn|ou4>VZg;U&O zQ#;+-qi5fbx+td5T2CUkceI^AZP5e}rjCp_)+2)Wd1&4b$Hf3Ya@G z?3?TP&QCq19O;TqI+JT;u29~Ea#aS~UQx{&l`6_hYO2d%s_R!%yL@1B-NRG6DVFL2 zs1yiQ#VQA!lbD5UG`TrxtbTBjcceE!p$74+c|MzCqr`BGHMjZX zsy{hMA3DI#)^8rDH5>J)rAZ-4P&6Qm!31DL5>!bgMAVXRB$Judo}vOqB-|jmqO@P= zwul}VHJyo8RegOm(IO?&C88y&Wu#kGpp`3}bgrkn#Y%zP2PiFinWT3(Ni|b zM4pm9b<~%AUb01n9LNwzaSKY&p^8+4X(}B=Rse5EFaVlkuk?xZRrK*tgzTKUv=yi@ zKIkTrtvGP$FOVy!RSQWF(;TD(QQYZ`zSm zhq8&PrTjy8wvY3chkO(1#b?fky5$>E5V!TcYQ1ejM`_4EOzsd~TWUF#jNu!nDhc`c z+y0?w*nfb|*5|QFf24L*9@8}at5H!cJFG7-ce!M7er2WlqUyi@Y>USely*qH zD=a8_BF=Kovz096)A9NV2E5gTvn4HU1V>j^*ku0kK1{DWR?O>!WU~-X{FhNzVDd!}M-sCkz)o;87Cz8I!W&X)%r5925WL8r0 zZ5-B_t>h>*+c|IcL-ammEMsFd>BoV1wKMOfO+@m?(Q zx4%?SCxe$P#$Xruaj*Q>7(X#t3YPA?&D0Zt>-PDh&h+(BE(ED0n=hScLN~7bgp7u5uuZoW&8^Q$Ji`4?*y$qLODHJ2SZZLpp%< ziD8(|*<(!5(yx8;P~nJ=sf5 zl)kr1#>3iCAPeEVX(hk$yn5Z$$ByL{9)gD8R5a5ZetZS^2>Es5u{@&pg?fx$TFEc#M() z*RXuVD_U;aXth80zQcAR7^=@+vj#+;nJ=Rub7T*Nzq#QfE8n^8SRi*$A;gynTo{d< z+lrg#mX3T@FaG9}4w+HN;fxtjz>Nn&hT#U|asT&9@ktPm`+pWaLN!#WYGqUIuc-YZo#)P ztLr!n<<&x3E*;qYRKc=dFW z(Dc!9b91IU<}}qAGnodInNgVJq$fDK-I&gZq|eV|qd=2pJ!h-Cm^ByxTMgeoOZ-J~ zOl%~~WPk%o920R~xiTp^6#NZ$%spZ;b58BvN?${MwCK1`U~PCG>3ds?adE>* zAEsk+@FoRaAJkPH)J=$H=b+syTy=&9tAU3nz)Vg>qy!aFA^6L99d%YOF=ud1Q5@p1 zbc<=F3R6?*ISi7LhI7rl^?a?2B8Xwg(>`hW#l|_ssR}s+onGyf#+dpTErK>%rTT*q zO-ZcY_P5#RZv+G0mMH}X>$p67z1aIL3~EJT6>D0waPDGvd9?x7h)ow5ymO^;4S)x$0kPKLOp!1jrji_Q~T!NSSXyvse zz<%h6C_!y~-Cy{CSzStNJ{S3z+gqh-cTypqd|qOJQXhxpUlJJuO1}6w z$;M}aOc502&)MUBa)x#bRBaUo6$Zw?LCtDDMdArcbw%B46)3J5sjJc!8Y#Zg8i?01 zj+qK`9&DjppBHym>lhN=w=u@u4ESBlQdZY0jHz3=n3P4w_%|_8*RfgtyjqRi4?6s1 z+t7*JC6NeaxedEnyVWflDv}(*2NPEu(Ft36;>%1%5!oH-r=-X>oFb8 zATq441fx+m9PGL~=*}?V)_{hoBD$oKx$$Yp+P+msSI6rbC06RKjaW>bJCPRz9tSxK}ch5a`Zy)-Z z?lC;9K$>cRv-LdYd^~kk!Be>po^uxj=GD{FPQjX zR^s@gF`#*CzduY~doJ|K?eO4Zvv3EcGqmd)$n&O@{R8UFv#Kh0gqP^klyziWZtA$# zoPKXxLjDiH6KtQCM>f)pg_Dj<4^)$uZ&~lf3Eo2Lr!ETsGFb~PHzm6F(UueG8f4x8 z#pqi*!%MF?SRpf_2fy@u;l)OU#Kt#zbc#f{N*;NV<2K&Jns zWZ7#NBf^(ng04uYPg3w4JO~ZMU^Yl6)DQ$-_Y?xgYqdS*@ULfn^sQbU#LX!4` zyxI*EWh)SB8nw$>1-Ei<>#I#_%QsJkZctiQ-t3!5kspeqOWr{@_Ae?F4Ps|I&rCIM z1p~CQYC5lBNobq-pEO5K_gd$CxRoKzl@Bqq5h(%=`cUNVbx`I%!dv%VpdHQJn7O3$}z&c?N#exFpR8g_K6pTl>$m$EcfMc4XQBtsy1Og^qinQG;TE# zu{Y}@M^Pwt_Kxv$^#Zmb$6@qY1U`~(~?w-t92 zv!oH$=rP9ia7oUx9=Z<8;0!MydJ4oc;g(^{;MFjY>8Rf1O9ns2Dv74*Cc1}?+aDRL zKd3d8-o)WRIySe<6^rSSAW!~cFoS^&TaWaf4c2-{C`*T0I`9}5`v=D9a>~VofkCFd z9&W8aC-gJ3SV>xqGDVkv&bq`0C7O!U5jwj=3M2ZBc_STXn`rp_9vQMzLC8WN;2jg#s{6^B{Pw_Kl0LTGAkWC>vpMF*c%9DYv3FN(Sw6Y97P-( z;xx9gkzLTkJ#H!0$IQ2N29HvcLBe#sbvq!aHYVL6OOB_F2Ev_8N-%J2_2gs0-FlYH z&vkDPZ^~pYN2G$W#%c5USF!M=A~JYFDk?10UGgUj@+o>V?oZZT8C3=Ta^n)@^imsu z^d8&;41)OIM6d92Xa1xz7TRJ3z7QT|?jg_epE{TY|DPW^;{Re>lOe;8TyWLrt^aIteaAW-}F#O45S^5Kec zQn+AqjYFzi?&Lkac*RsPTIB#&@hRiC^1P&Rv#*+77#3|r(jN!E5;Qq_hJ^CPbB5~p zU9GfA)|8yo5qJcJ&nM8$Tyv?3XV6Bft@`3(8W%@X)^!}W)eN1>npAY)_8$N&Rv`$K zha=wwrAtAv&QA(oPzVLt=RrPo{Vn>l>}j^BWd2E9Um+AV;+}Df( zPccWkz!M3wYF823-wI!*bUI4*)6*?*YgFspq{1fHeFE*Zv3I#53ZFBgndHF({cNIH z-Hq7XFm87ukG|yBevd{JVgB;e$Z@@m*r-y=#Zdx4UTF?lqUAoJnIx(AqDcUl>;~iH z;$J!290KWR_-UtdBI-^kbo%3efLJT-gUsa?y^=_*=@@UCS%E)v)Say`jJk)QO;1%p zfoepz>H9ZNjK~!Q`@Vv`j)4kR3$wD=(Lf|bG2WlYGKFkNo)E~6}zvr1h)5 z4O&_4`sl!~9H@WlQY*qmV6Kxzoq}U4m}GlKTU(sko2YvS0D~}tYT{CVu}SYC?cA(V z-XXa!A~BOyKb%rgKdeDI;O(EkWxlzRDNZpl#H?eMbW#klu$L{Fw~3WRcn~^>{qQk! zms5f$gL0;8gx48uNjq`qEjnxhc4x#;@6%k9eG>*FTgSD~lKz4etYKlJ_&TQ0&utq* z9u-B&OEtlorJ^m~|E1?S7zcspfOPNQB2FuH?VspB{iu=;B20x^oiZ@fF@G}OF_!Lm ze-ju{b={iVPuOgH(ZTSQFsO7XmH4x9(tm7mA}0G8@i?nW4zuSnx56$@Ib5Qr7HvOE z5Gey5Vj^$6qTA5;Qwk|bgOj;AZ zl2CP(rcu(=B%d>cOUw=Jz$mIXcUV5s7t7dvJ-|!E-{}uuBT#AWE}wfN6dK zef_?jPjWAS4^8Ufdd_08uP4a){NP}Cu9=)6SD&9zkOcert9;ndm>Jt>f9HcYPw_@lmOKV9@yijCh z?$)KFVCE#3OaawXQI1Q1;2Ih2=7Bi_Byj=%Y`JMZ>Zy3bn|x7PS)xy#nOLNJ(}sSX zUbA?DLTwfd*`EScMm-k&Q*&k)tRRCf_M&?hX(ioZqw$nyp=WS|9Zy6W#$8m^bRAM7 zH&;uq9bW3jklvS);hDEAMTLCaaS%?oiz?Tmwbk5?LiCsgg8h~BP=LImnLKjFbrbqu zj@p%4dKvHAtbHoq#0$*Ft<=N(Np60en09u?N9dxeH;0cL#LdD-K{d9C)rvO@$}?y} zJpCv(VbHVK;GxWI6b_iKu&&*1K=tM9Im(n0wmXBbYut5(aU+3)-)@)*Kn*a8*SA>p zNpzv_-oJr)2#+Sfh}`Px@?NdVYFIhtw($O8M~z?!2b3UV0`DkPgn4FXjy0sJC^MV( zP*^{jB$}pT$=<(|R^$j7P4m`*jW{pN;k&W#JxxVq*~j6S z?>?Qmlpxt0In@)>qGA46TthkA_96h31T%{@aZ&nU2J(EB*6?1o6XRM#RiP z|7zgG0?zk%V3w6w@jqZis7gausT?AAGGsL$;_z!)d4q6l>ONZ+W;l9j41bjLT>qgL ze-EoR&C>a*%%?AHb@Ql#Uir9vi-teMNjP@TOgKhutSkgk5t!5_(p)7V7WG2qa*oTp zo@0)-d;1Rn65mhWgQ0qvy+_enAy0s4xIM)N?Lgji#AXxg!c9HH_8v41aBK8JIFtv) z{N_l*y&*8J8aH7N)5VWHtZl~Q_%8=nv4MS=3boUVPQIB#!i6>Q;ZF>$q)RUsvs4z%1B8VsG}TuIq1?WmK%qE z2K1gawJ=&ZgKqkTOU{p(Piy#=tahjC8HCp-49-{{rVzPx7J*P0sY(5_1J= zmAqG@VNS9vXCoGPn034a4uU%A^N zHvZe^;@XNM(z2xYBeUYZwG&~@j2`&hhiEd2>2fsq0Cf;DmM~+kpZ&A@YioSRr$C&; zSd$N*UAT7+^OK}5v{3XX*M4_k#5Sd2WbmUu75I${a*P&0fS}RB=hWdhc6mY%p5R1u za?dP!=nk5=4lGu=!46YSq|ChfU1Wi<;zo7Y-$krc(?Ypd0x`TSg#FF|!LP-g7tPgj z3XGtQ8o}$`Y&)j+os<*DVg=%(k6MoJCFqWOEyuP6Mu5|2d>`IqjDP33# zF@Cof?jKf+@#JuXD9mzUSm1eVe9%q{gN5*V&RH0QUsV+L6*B4=#<0m ze*hLU4}?ed{s&mZe}gwYejZNAopllv6`EycY}t3eG>cnh*b^iqUEmK{laX3C;4V#? z?~&DuIfa3Ij8D+mv#`)@Hc{5~56t22QAsJK_hAw6*{1R4)rB`U7!ci}_?6=*kzGho z=~e=gw2Zr<31Hl=8DKH&^l!?ry>udrR>j-msNkh?)IH;}cnU84ZS#is4icE7tiHqbN@pV}b8_=H*Atm{aRf5c#^bp8FEy5<#%otrf zn~J=6n0NYG23W`m4np##4qIKJZizh%dG}F5rSY+yEVR72amepdLmERWMOZ$xVZJ=x z2nXbazs1d@@(7-rx1LJTJ_q-;1-_fQ#kFR&;Kc*Lvl)o2A_BrfBFuCsHWOZ(zf}Aa zJuxh-3;l)$iw+zo zVBQN9%rIbF0l;`S9oml(l%z1{Ha?r&A@4LE-pV(ZMKIqudlgAaX{>D?*;W>e=M;PL zt;c@=>E4~(=mezBE6tWwcyZyBa7{fIn(MJw=~ib4#8HO#O}mfqW^TGEbZ|}{HXp}i z4;TYdfM1^tcf5p3LOfF0i=n1Xt%AWEZQKrFJOV=U0#K~htKGrG;)NUhdqOk0YF~OHn-QQVgKjE`Y1%id|2yoJC(#)d=WOy7j z9qTq>x%H?a*RStC^k&GvF%0%q17e6wbv8ZG<+vGJyq2EuoJt z?xBc~F{pp6N%siLc7>)%;oTewVC8p?`zOJTsQBo+DW&5&7K&Ok?VOprl^ODd3$S%5 z*E(jXJ>Q=Bwkk?-WiX;Penc(@WaGoD;s%S?cr&)5L76A1=#V}2V7+~pJXCk%#LzOG zK>bV7W35W_RB&y0llTNfq^b}RW!E#n#RcH2q{eJJb`Yg0l^<<2_U<8|s8N0^%ZC5P zTZ%D+b47ma9m*yoao){0TyGdFK8&i~6M~r?16Q$Qr*44_V$5B4X=YNtqpiV6hCkzR zStmjdf%@T2G{piymkiIGbuc-aVfxt`iiYXrEzaak?n^V6atZJ0iKHR1-miGs_(XY; zJclsMF9X+yn}DWqL2(;nbbJ#<2is4I_q#iTgZWQ7aTX%4@Q@unKFJ^SaXG-C*UG@@ zz!fm~ynVKCb^_&qS4IQ*%rp>0xiE|k#qjeeL10VPAJ^9l>6PN*L-$PANZZ?E_Yf6O zIvbV6XHI&OZS^^F8^QiG0v5Lg{h|o)Ovr>*rLQ37B0IIP55L$TMqiH$;vhgrWEUbI z0U9PjeO>Mhy$5JW>m52&wgQcob?A&^q6+|tcsJ1+yN!G+T?yuWsCRou=Pw@l7z#!Zv;-bk) z{c!v;l1L^-7HBmIXqu=jd9B~-o4J*pP!e|I2SHJKRhGTP9_Y#7F}le_+q1$dv>XQ6 z(5WB_9`g3+WYVmkt_G>#>DtS@M@7Q=O#z}Ayn8E(ho~i0aQ@$08vk*!4#I^r&;H>C z=m8{5iCVp4`b}r+Uy*3Q_Pqm`qV}DPhGqfCG|w0uAy|ccfK;;Y~8o9eR>Ny3Q&cqNzm)yD*F$hX_E1gVpT&__Fc(5Vk+O_ zV@1%qs`;B?^N9!h@35Z!Z#g!I_Atf2qjnqQkSqaMf_n&kFY0&*OZ{rp)b$h!ce43b z85>{kt;Z4G`7xRPFi1DGXTB%7HZye8xXJfspo$z_C;lZa%Ru6-Z8#e5mtiy7zqVTp zVnJINe|Qc?i9X`PdELQ3G;_!M&}oT--@+9mi0gh^f9nd%!=WceQrC?>uy}P6@tq>_ zF(?f#Tm8JwYcP#{lPEflM+_^Slu^^EANvg^F8hkl@ZFx&Ixk#S5tlE{c2BTMxCdRw zWZ&jqjy$$u6&8j9qVs;+)XOPnm+ zE7tlFbEzBs)XJ|)jRiPD&X}~#V)^tK6oWVJsFgB>apD*z*>YL@*=IrM6JU;8!X5rks^iN=);0M)zhv@gx zps~wNg%sojL0t+c;^l|bMo0Y$T|sm63xyi2<#QoR;{uS^w26+QSnK_Gvr7)*T%YEW zug>XVZmrPE5X>5KHA>BF;q-H=L?UBn@eeKBpk+%w{uxV33YUnwWuMLsWq20`xT2$9 zuJ=fHyP9B^CYE7B4)PA_XEzEq?TxR2lf*c%;H&QR5`{q6?O!lIb}HB(LpJ6)zO)jc z!z*k)Ej>Jb7+70(p-s-{j+HQw;)hhWC7p?aR$kH0+V!B z<_4P^`C}g3@CFE&UdPE>PuPfI&qaaW-?p6QorLlOb;8&Y=TkA>L`Z6LNdLi$8!?9h zW}uAh!9o!1v+DJB;v~#AZKLEdVoKxtP8P9@*Wh#;=r(0zk_x`%vC#|nA}1jgQ~Fv~ z$^J7l(d@r|irh$GBT>^3sz9`s0q*R*q(^gRb}ZP{>G}Tvjl9IJ*b|sU-cwiGS3o3% zJ(p3l&`{g17H)f+uhxhMHmlwt+1L8mh~jH-A2Rk8ewQyEY~EZ{ckfNo@4;;dmaw#= z+8f&I;nTXU#H*(0nN+YEP*7T^qA=%Tdf05DHLe35*+Ixl^m=34jyLH0kyIB66r0tW zp_u1z5+izu>ABFp@q_KdH@?Dr=Sn&tXn8b;y9615*VGjBl<_CrBVK`&9&QV5hF`DtG zHN_;p&koC@LU8|Oz#bU{35e1V!PCXSoNX|hi=W~3Q#ubF*XVed_N8h%A?D8`^htP^ zOF7($vhj)1rTy^tBsRrs^_w6k80(WH`0R6h$_4v%;>W)S&^{U%cNs(}TdEvKZC&mCb*8i1^2CZhGp zWs<8yt&r8^L18BiA8Ohq4E|*a2O8}9C`>)%W|dh<)y=&!Kh!p9&8^q&byv+w7`t7P z1iYXzWM2|?8c~jDaF99h4#n|m2grDL5%X95GGU18o+3jYyZ|A^;&(q`F1_(J^4>%K z17!3uYNHyV%lr~{ikTJe#6%!C#DnwwC9^}$q;q}{expzkyK4S`R?sP{wGQV*PDKU2 z)4zqn8T4NbDKgg9<@XWUS10thMTV;}!P52YBChtlQ#8WePCclwGYcIAl3s3l^;D5B zvZ0%Lc;?~0iG&DMMp=xvq2-^O&lFwBwK*dI$kbmOGGq=n2Jn+Z+MAbY`@{tOZw=<( zQl#n~*P_+3(vZV1e%whl?-MnA+(!(5^j~Adn5Ap4uE~KyBYFKiWSk#Ute@&GEN3$ioqrhdvgTi%KB_unG!5g_4S?(0 zn8}(ncNiW2VnhPFGpZ?T?QytUPh#>1TvaN04bcN`Qz+TW0-BOT{H+cC-A&3Iqv&Q@ z-V!l%5SrVVTm%z(FUr9DiAd<^*q}0u#R8t4Zx&_HbEfDKur|{UIsnJaRvK#O^?FJF zW;efi>8=?g&0q-C46E-V(9H5VY^#9GhM`RWz?X&uAg}!d!f3JuzU^$F5h+2>WDGjZ zRLjP8VXcn4)88oQ>aq;f*Z&$e&(PjY3e6*+Uni#wTE&x&lGr73!F?3f3o;m8GY(bK zhcC*IgW0DQonr_ZX=gS_GfSUl62m6qihyccd>JLn9>IebCeoE>FN6g{x!FhU4iFHH zZ*W$oj#=4PK}RCqDNS-vx#JN#WV6z7FEl6NYP5|s5uxyS$LJYYrXr7c7H zR(Lw)s0ZKcI8HI3h&#TWJ>7^E1+)Zf0otvJ+S1qbp48QTL=9*rP7pC+dqI723v=w9 zf85XcT zVRuegFcY~Oqb~W!lmee^Z}vkeax=Z6iL>hJ5B|VGxGJ-6bb9DFQnf5N%9xFlza5h1 z9K^1)_;iIo_B3TUJrxW*+tZX2%iL~`*im9eiwTcnG}C~+C%3kH*qb9ENAuMO8ad-m zDo&#E)ONrv&s#v~XcqZk!(2Tnsier{&Tm_?!K?t#SEZz{<{3Rn8cjEV zjV_08%6jnEn2%+(h;vJj7BuGKs4@)03bQxg)%2PxR8wP3Kvf)c4YEg+#DE9Ngi2{; zLlH3;3VMY=2_|t^NfR!Sl43bfZH!=Fr$;zdxx^Y0@3*WLX#&(i?dty3)$>bIeUbod$l zWju=RSqTYl)aW4?6w4r9LObq-78^?%yTL#!HgT^+4281ndiEQJjIP|8&JJI5*QJ08 zKj!q!+DuV>Nx~>Uxc=@TYXDMs!ye`iLl6e57O!3sv>{MfvU>g6>!le~^#-grF6@EZ zpudJ)$D67$96<0kRYjywCB>;N8Z>>O+~{Y8xPcV})@BFrt$wvnWCU4Zwy6eE>;#u_Bd zW89Xnck9&AYv1*(6PBz4dV7b_ETI@gOxy4y!Z-0E{Lfz|&M^UO+Uqm@jR-5PguOt^+E@CpsZu2BF4)|PyWhT!;j|YQ9CK!; zv8jK!$9RzuBc0VJX+)xaCw)ui1;SCPD{oW(DM*P`)t+mo3y|f5w=oQz#UjVGSiMtO z#6WXLSEp1PxqBJzDcS0v*c%kNK-QQK*~DkM9UlH`DrMBnqQQDaVRRvL*ZxcVnMQ=$ zfd3ymkv-zHHEuH}6<2Gjp~fH)tM!}pIe6l$W!JS>dJH1M%?YM07!y)lml^AmYc!c?p=@|l zfub^~EJU+Y-(Ui}Qg;%FqS=0 zv(Q$n-or;LonHsGW9MQjVXM*1CH%esDG2%tCwhXToDzwQCS83Hh{&pG^eYX1*nKUp z*$d__vKYp~w0(M!SPM{&m^m|s=GQH=zN}SVq5{H?Kh(ziYAp5VZ=A$3XWXx<3h64K z({CbnDFDt4GPr#a9^`=lW^eudH@H9&mR3S9OKu3S^glrDBYmIH0eRNY$>fATJ|x$A zQH6msiSDw|oQ$fEbojM{>mPz)&&ZA(RAhpfRxn-s7)-fww3#GMNtI0VR!OINpf;+O zn*cAZ{e38jLPVI8!*DU^Vc}XLZ8TmoGt?9wTWjc^UXVt06RC$&ZwjG}Yh>&{K)d5v zza}l8N2cO2)fO!Mgiv#kGvz+G`nL?s(KARY8p_1X8{=8h(IA68xHtD2TTJcjZ-*L6 zorBt3ETy-UoicKeWOWRwtgv@2qI0zYREy1FfFq(kavcXnFl}(&f?K!b*`bPCMRo@& z&hPcs2d+>rO!gQij|5;yEurO}^I=!2f=@G=&*9cO4JDEm)hD)@GUE{9qcCR;;?5@r zCb4ApCz>DE-SjN1?$qh%;s#cCPO(XdvknK6iYAV!mA7*Sf|@o=Yiaspgn!>TKP}~!R*a2 zj9B7g{+G=BR++tu5###mKVVCX*D-EnsxDzSxfJgJ&k9tmvURTWZb+Tr&EkK6!uYdl z1P50clg(TU5s2=X%;yeIRyu=aK;j#Q%=Vh_geel!Z|!4E4qeX!4~6gT+NJ|LvDwoS zQ#;Rw+;8tR2uWw8Fau-J8d83 zoP32b_vsU9ly5^UkE}3tmTWwg$o>R;%wJ4HRf6q}< zdSuHK5q~(!$QtewFh=DAbwSe8^n7Cdz<;@kr!X(3h>i{%+Qh> zkYP`WY)bXxnf;RP*e>*3hp?Y4`DscjzQ(+hVMg zi!xRxbQp_G;_{j7{{V)FHbx|DtI8>093}w5Lqpb4z9g(7NU05sw7>|6nl0YC!;Ruz z$TTv?9qCgG4kglLsSkT$wfYYLhwfnKoH8t-gJ{$mp*tzZ)|&A0gRaYhjIkHV{1^PN zb_8)h{cW4Zdm*q+szqIH%reF@<9C_u5ki|V{AIt$i|iwU^v4Lte*n6dNvfzAM3FXI z8AJbw>zyz!8N*4s?2GAi@$9nph~8M0yEfFKV3y384IXRB!@EHOk(^-X`P!Xz%G7dlk#wf! zZG;?SDBt=+)|BI8Mcz3|%{cX{kBn-bo2E#*nINVnlSFFj4y1>3BcTv67W^+H++1cm zOjSI5BCLvW|C{hsB0K%$@`w$3O>zTVGOx2W5(g7eX;R5|G+B_RNw!X!8ecdPn{>nX z_>2U#8!9yCr<(&urx0)Efd|n|lR}HiTPP`f&mT`ghrQVZ{r-X9Oaa)Lwk6+T?Z#5v zFdGQLAA0891Qqo3%uXYIp>0hB$%7UDz{BL5LW66U$SorQRQovHH{#GyNQfLUB`2MN zF#|;fs0@psq0{69oCU-I5Kj8?aml!;jn>dlWfC1f*aKQE;J6pUO@z*A<~rtmoCfDJ z4p~t^?F5Zo!>t>j6rm{T<)0XX(^4qQ1?_wss|@>p0HIhP@29KwvP>Q&Okci%uw~A* zxc>n6gD8*~YG2LamrQSF0-F^Eec2;NwfaGZbc5PZY+(o}k0i~UKQQeP2IWmQ=ZalKQXgih4Dr4V zviwk<;`rTWQbO$;jF&j|b8{lEu?PFm24DXn(Eu0rG)}US>hyaVQntIiKfxGEra8W4S_gOF9 za+z+|xB(1XXeGuFYQ&GE^e?-9!pR&=AuV3MillNl@0${eIGbmKlCbzPEIe*tK#qo0 z7u-L*dVSn_1sefHSvUj#b&EIyiq2yKwg@8pP?7qM?|Ds%^icR{#6gGS^Yz|h*MCHm ze%t~?VDP`yhVCglfNQNt&@lVvd#2bYIX@9=z^4(sGNf`lkz2A6+C_I?t97@~h)$ah z*QUko5^50ZXtNJyn%*f?e-R(zt=LcY=@%mVjgip;ZIS^HO1Emjm;JOVz-8~6)*UmX?0 zd0q$lW=}5-YjPUbmHKGb6q&^!ZCQQ6N*3X!+-jorVAXDmazgc~W69lJE?^f4usg)V zDGpiKb4&iVYBCo&D7|R>WxLaV5H(cY`hNH(rb_1AZ(Gw|Z9lJ%VrB34dCfE#3_GH}=^IBA-)%%l3L>dVdOL{Bvtfv-`j<;G;-&~CUI z7N_1evi_jnq^GiDSak&~D-32DmC!ChTpPML>suycbV!7t!sYCVKxJ(X&!iVkk8P20 zBuA8f>PP@E#7v8k7x%l&6K_0j5XCa+3N7w20}sMTK*fZ^<6SYC1w!R3z1Xe_@@FB}54R(D*fl+*lhnY-Cslu!d+MCZA)n7)C zaw}pvNj24EO?G0<+?JCrUgou*J{`!tTC@)AjHJc8!1CWkbaucrz?cmb4@hz%$!cIq z3eHYZCy#|&($;a0oOV(mC8w&W!Th_5=7Zj`bD?O#HZA${AY+N8g0ujZ&)hW1RJjJ;d6`$KmA%VzWjk1Iy)TEWcrkqul6|T;3R^W^7?2fB$67Dvq;G$ zCg4I`GEWlEyMZes0L?MQYSwn$RK-Q;vUfoZwGI-bk& zf(>IZhu5#^AgCGfD`GBm_It4Q$n)a-h%?$~Nih;+;C->#@E>FGuj)OWbHk`L5NM@^I zz`W!@(1XY#*U-G~h?JXU9Y+%kDrbGs&&oM$xl9vS$m2OT}U^H$`;k&#?5Iz`5 z?KhbV%}^Cj>dqx-?@m~ucucapPr#wze`bb8EA0TRt5luoe+ zE=;%Vdh9m{r2ZTZPI(XcaTH8^vYdU@=GFRjIg{S0!U zAtpL53Z2cXjIm5n0iAdnLL>(8UyM@oXwp)^oY^& z+)=yy{v45OVfKqi-W=QP8)MW+Qe`rx8%FE8&7td51&P+ey&$|EcDz3NxVIBBD6D_8 z*r-3Qa<<$e!64C?WCg~Cn)@g-AbC+elG1NjC;t`Bfl8N*WvjporKUuN+FCAur-6(iJz4v!LVVDgp^yCuUt}V z3U5#HIZ1ZSq4kXrc@%jP6*5oqP=0chHQlwHybW4Zdlvtrhi@y3lo1aa3P8RmR3YrE z(nyP@oF+DUf3t({)`_2RobIKB7F^?6$GB1REB| zXf0C-upQ0LGiidJF`#wbP>yXUtoZGR3epg^H3vftZxe%;D>nC^Ynk{Ay=CnE@VhkCe%V6WY1dGf;zJg_tm69XA*cgsxvT)JmVe4WLdVy5)6c)>O&Kuze1zEnJ! zF7^UtEdEq?#g3Bh;4024&$f-)bt)F0wC2oKuB_U1L0{#P?1i!{`Veay=5JB(0h*8n8fl4l8lWcgJ<9xv= ztQ0oel8o8AC@UvX^B2s+^UtExv*KA{j!dbgxmq5rug>Vs^Iqid^jf0Po=Ye8YFX zFB2g6vv07jBf!MU-2LKzks3FB(ev>?adQWQv;NU<^~jhH?$jF}bs8^lm&PWM>tMby zkvSNL1LDlv7qUOx{*C_U^l$e+_WuCP2l@X1%viEmUVI`erMxlhss8}EJq?7UrQiVv zx}`eo0>Zz}LFEt?@=KW=Q%0T=T6lsmu(l>@77$tn*-`<>LA(!K!2^75VcRKpKoo_% z8Ey)&Y4Y^AE)-J~CCqAS8s&jr5ZcB)#;=9?PwBc<$&Od_rW}(b==g;pr-uY_e-b!u-v0pfgKj6r7^uRkDcSCQnP||n zIjD5Xb)s=Nv+OJnAJOdzc|lFRz=K812ou74%g}xC9zMnh7uP|2G1k#jac)I|xDvu*KFJ#o)jBf}0fdvg5UJiu%-!^sY)ZoiYJUse*w>^z;%n#^^9 zbq^_O)9kY5fp3Ktcy+L{17Bk-3@fwwxJ#GVCGYuxm(B2%>WLczRgiF((4zoo_^55e zWZ> zo2%9#nPK}N1@N%Oa3vS=8BJ$Z7AHu>W8W|M-@+KY!>pYg_+dg}gr$Sz!3)JE z`d!*~n`MNIeV~5OSD16o>s!Y(2|-9*bRG#zBZ5C^UocjEp>6;ZYLqinkzi2)T-xwU^#viuSaf|W^D=r>?*ogKHSaVRN1k6*w zmOe8aMy(L$k|WRDl}^0g@WoQPM=fo`FOlLN7QcCv$AQ!#qvisldwYh>t?=;$HTaa2 zzh-opdOfAF1^|WvMyb%7TrWSJZR061RF5d|@R(w_@GL@oZ39#O|eRD4=+z2WyJA$%WE{Tj!I#f)s^`gb50ZYgfVU*KwhhFyU6c5+N@ zq>XjAT(&#ji@W$u{b~qtOiykdg`=d@IsI}nHDkZk^cY- ziu{9;8lh$Hg7@Ko5A_zaY)DO;LX#^)UQQE}Z!T&-Oy4(f5H{g}ie{8i#0AkvyZ8~b z!157l0o%h8>9`c!SAqK$Tng0I($; zqi%_E6sUOb-WhAZS=Y~SC}6btdOLa`zfInEM3x8)avFTp*NyraV9IKNG#n-H%njM% z%l>HofbeYgvSFq~Uz!i`Qy&lUy_1bdTG8Z~6{9;}aTO7bTElzy<$k03BH3;S$I&Rz z$ja6|4iOSrgkV+TyZ2dtdYXpd7;8WPdR8VS2F6P;5gua7;qA1-^$9>PtzafiBfxl0 z7^#lqeg`kZ7h%dF!aEoOQc*}9Q;!j~&;qMo3q*ZsTkND7THtZ-SuMZ%IWR-tj)aPR z9cje`lqoNVA|~Scdm(gcFgM*&5<$+MD}^T8E@r)B+EN3TTe{f`A?!n_K*l^pec%=N zbonK5{F9u_qszT8WRGzsDcE?0Xx|Bf(1fMf)_BbJ!BEb{BOF;Xuu#2&-0?H9{K%U4 zca_B&LGsj%^m_$kMv|1mdn6%qFnr2Hu$77_vV&Whl2lxwh%IHHk#nUAVz+@#rLU_0 z0KzgdJ*pldDY2^+_mO-B^qkRGSX_uN= z3aSOk!!SY@Jkwu;@Jxx?i?U*Np$M$UDPJzt^+{5hMz(BNr4p38OGupxaXiK$3Dt6W$g5;jeyBFkRfOuroyRRLj2VY9oFVVT2CGWpIwS$#69CMK5VQiTlJj?w9No zz%R=fO&k??pVq(e4OItvDlRNI8GJClKJ)-K&%&^v{?R1T7myTL5v-vY9KQ7XpaA4= zHiY^R^#L>X+vH)NE$ae>oHTHdADJB7FPTwRoss6bgE6f7cukS9A3{igSBsibDj?^^oe?i*T^xK@IVg z%8^d<1;*+dAJo6{HSC+cAu675#t+mXPyN!8gOa&40q7^C36rELe*{(!G$9!_Ddtbxv;EbNhseU>d>$dZ4^C`oGM9^V#zLRhS>|sWN8gM zKL>V^u4Y27G;?>q`3k7iRarZ&Xb9%8okOJ?JC-j}E2K(bowU;>+y=;sl3vGf=yLhU z2S+!zB#qNyw}kh|j!~kcm0ZR55!^Q-w3Fo#y{k~(Wvc!XWDYEHn44c!Z7a&;2TJn?05CD(+2skSU;_OjBJ4f|BBC49=cJ{d3y zj{^e@+z3yXCP{k`8&ddFW@^_4Er@e=69$B}t#udD?JhLA4UTbY+ z*BiWbHxZ_>9w>61?6^0?u?K=wnnG7Umc?q1+aevpcR4N_2A)wh5fj-_6+OtV8t17* zTuXV$9a|r4zqd5E4t~oivtY;y{V?nlV%Db9zINe90#|^RTSXOAR5_;gz7!+y>YHd+ zb#dp!h-b)-!awC+cwRPZ`Ff(Z%@!>d&lWV~7^6U9i~|^_u!A<=(@lETvEGtg3H0+x z7G*SBX=YDBM@h8F5_+J~Ts3{;!k*Fg8T67^?grYK?OswmS%Po5DiDoT8|rL3xJOi2 zyW0(}Tl2`4y$)@6dPwo9=_BJpBV*hvrvsZbAB z*DLDT^WVS}n9qCqcPdW3dt<9fo~ziZkt|vTRykz4Z!yAc9;(-~^GH?EV1c2IgG}+W z5N%BHw-Jb$*qPXgh}2x+x!Re+XKH7StCH*C%?pDgdg(cu5=^6?CG1x*%Bri*Me6SR z3Nu8VEb8>Vn$aokzJ8!XH5`bS5yvPN5e8vMYnWFxb(k+kK0>fu5PadeU-YTMaJr|I8?^!b?j;;O4q7ljU4#8v}qBB zLZ3{A^!BsT1E2*X3LD@m7TETv>_PUS90WPM~~d7 zs|U>xt$6B*62>|ZO^DRP#&epTf?(|8uVj}L7V*TVC|E%;t>HLpQH^7qshc*~Dx;)G z&fPXecQ`HUVG8p4Es_oRcwOp&kBRHTsEV1mbn98)Ym^pUOX(iR)5AE*Sq*RR^x?a* z_gEz<{!X)W`ewxw^J>zOc~rwl_eDgrle=h9Zy@P6fZD68EW#$>lfCM>3`xcaDaHX$ z6sSV*Jq_cp;kV}T45{laV9AkM|!aw@m+y>E1cZp@YqPdo=;VsIlyxmk>|bd z>{@x|fnpM}9DrNFa0pSnCLo;=>}fc3>iBcxloER5^!$BUl5cgcoNlu8ZN>$&BS;Lm z;y8XzzG|b_cI1;7uH|^nmTkq=wjmMyIfeZxyIN5*_G;uNcReyFy|~6PF&pjfPCwDy zBYAYIdceC4xY+WFFY3#VatBiGVsM3~>Kz@TwS`4%+KQVily}qGvV@XYh@pTF8EuCu1LZ|Kebbl_ch0kKN|OaNOXcGnPkiQZi(2Q*QK-vFUi&&Kl;B= zD8%-;k8@lSxCLX=qmu)F3b4;|{f^6iqU_prk~kW7Ui5qP7$$;1ipCIX^y4JT3{a^F zXL%x8s$-nzuPVrL2%g`TOkdcsWrzEaj?GtlpF~!O+f5kuFtXyPqA*oj{uSQIK}=^E z4u1p0^mA=p-D4$ktZL&maz!iUMQKAaJG&IZ`hjFQ9VplmM@lG{T)N zi_#|8+ZMvJuGcz^)2ddp>CRfdae%K>LAy6PQJtk}Cs36nv@5LcyU$N0_CV?9S?IS_ z6hq%yx>S!F1~-}gt$|kDk6OkjE_g!MWTy?D$vkjL%C*hyT-Ej?Q^@f<)HLHoaqH%t5^nn!1Wkk);nEhti(no_eWFWic5d7>v!7 zLM;V?6G<1W6x+huvWbBQq4^Fs5vj(`)D;u?lU)~Mq?KDEqA(9#x|T7@xjhk*KIw4l z%<(GO>&%!XVrtMCU$4hvRROZ6gn2H#!jK}R?8ii}V22tna${m5;ewv*cH>1dwma-a zI&wJ`b4a&adL}v4#!*S*Az1gZ21O%;sPt=^)88r)l zk%M4{)-&Z-BU6>#HpsK&3Is}-Du~s}T86{wKxYmA0CGDFg?W`1)2rHwV8=$e6;J(w z<5Oxn;ApLYGlRzK*d!eIz%b&vI`F-X!vP4@${N_#F)ZOq>eih*K(t0@MqoK}Zv8 zK25gfZLGopkAm^J&uu}KdvbvWS+SnyDyl9vYOlNI(@2G|#F{ul3_yq|Wc?N{QcOrT zk;<_+c-X0ZNS5%pWM{HioF|?!LcZoOz|QAukV_W5NM5sRaP|(JUohPzs&!_bBEGS_ zz0SoqXw|L}o&z+D1lFB_lG_#Le2nS(_K?V`&$X{a;TN3h7N&PaHAP_Tq?3_%kFC_(TAsIv%(9e9mDhxp&F z&HYEke7;gyxzc!ORG7s35i!WET;Z-oM{MJF@=(VXD@_-!Ea`;*oBVLJP+lyT}#=k z7>r->j?<5OE~#wuTC5r6NS0+GA=bI-k1}z>A{E_@Ops3JVd~CcAsH0z2~&|5&Ne?Z zqN8G&xd@+jZrc$x>Xdk7NIbJV#`#PDNg9mbwrq8><-|k5)7Cs)nWc>>fAPqX zN{v3|;85d8JenD47_jzXk*r6@kU0QpSg&e5IYlR(d2v0l=Uh^EA}$~G5fR=KGlwd% z3db>Hi^Ku5HP$O(cc#51j45M&8vEJ_i1xzlO0jG4r-$v z1A3WMytap^lveI&OpjLa#8|cfn>?p_@R-LcI~6!wjOM%?C1B zvt@jRY^%_K3VWqRhPH|cP01V|*g#tMosL=_dPI9_0sgmC6mbmU$x$#hD zVY7DE9TdL4JwEAkOB2%$T%*mBSqAxb3Wna)o*L^K4ee#1k2UOJSmrv0^!ioo-Fj3z z81ov6C$KUH*jMTl1$T2cZi#6dagg&#^t020FWn32uSA0%!pHqJXa)Y@eLv}d0tv4A zc+uXz{{Y}tsp4qWIt!L$6XWuzTXZZp&&Q0>!eiqK4t zwFtn#&1>4NcE{3Pe$5_w?Eo?l|tO35iCemBg7IRkT4R#p_QMi6pp?&3KaxNG#{rZGkHnlyPTKQH66Q5tJ~Oe+0< zVv>r4pwl(2W-CJg)$k+NF2mt~C2|ob;0H9k_o7Z@LKk{uD zT7{T?BbcoV1wKueO~FSX4puo4UH%2Xow^N$9RC18)tG7l`ryy(u+$pKl;l9vY-u{z z8aEdS^~$6OJ=Ib9nvOE|95UN6=Rg;Go1K8AvDwsR@T>3vku*r7+8yE0+KU?;#p%?5 zwg7MSlVAnOsHK%h+fV>LS0bUrc?DnhRuW`KU^vNBV0R!@n-LhgaGv_^wQxbq9)qT0 zu4RN0qnd6y4`lQb4M;%V)*qE@jrop)WQ`e{$P3hq7#b*0emA5=#)#TXJg6)s3EomY z;4}KSed2XrGAI)(Fjb6u#~>+5NT*RWcFxM(p=y#T7?IU9WD*ABEj+2n9D$-D##;Sg z89Dv1KRQCMV{O44!5s$Fqkx{;`=^-jG%PD^==pRT1_gQ;4lt-MzY(j3Q)!1aY=e1& zR~UQ*Ml}7YrWX7b^&m$Q0>qL#KT#ky*B2C}vjBlf#16E9-G>q4&i+ z6B7h4iIt&ujgV&Kf(fIU)aq%jg!a&!nw$5K>ZXo#yhwf{#2t+uI9s^?0O)*cP3YZD zqQ9x!d%ybW&3YtGuy;g?Sb1bc7FSN{9Fz`fHy$*@=TVp9D-#rc)EN0DFgpczLW-f1 z`rC&(m6(HPbQe`Mi;Sx%WK>|x;OW8zdo_#~&AQ>n2bHaVT7En<@$trYw-G=&+j z**kqUvkTF}S&c@Xe#)D-RrB{a5WgrmO*n?2Tgv6!H zaz=qg`7m8YMq`;Z2XW0#;OuG%<&9xxeCHDGeARI3iiV_6&G ztS?x3pB~yxJbXMi*Q*;|j&yUY7nVgu&mvgZ3T`ixLKWZMa(JD*ixc$-#IbM`#6(5I z#C7!=ij$5NzAxFb9bOmAf%*B~wlr)GV47uV8BN;#l@$b7j;!7>VlC^D^r&NoCGN)> zg;D4_Emoi?3b#O^LWK$fp-E#ptEge{HFmHi@I;bN_hkM?t{f5>cTzU!_N%h4jU;iq zdb24exDF~sX2VXPCmB(4j0X11AE+to{g*hA0M<-2hR+wK-n8N2nHAB7>cZgG)uZHt zz-oFltmsgsr4+U-Y`5IP+^?-TcqfS^iN@&T zh##eyuP!0-ktVrRCQ zk~7$vkeo&g^_T~3Wx`3A^+S=N+hz;#HWWK5pbFD^(vD+LbUp@_%(*%pRM4&wz{<>7 z3te{$Z?!^1iTKd51~~xJiE_B4Jw&md2e8T3<+J9(la1sy0DHTe)wow9SM3{|`XNcN zKnG&^q6A`gB3_iau)+ zmRX|x*5%-GrTJg7OWHhaV_>wABlZI;xf;nDi<^O{br+tGA3&sirm`P%PNxBU?Wy5#7P&h13Zm5>`f$*vX04K8!hg0$lD=7fhuyi zxMOQ6&aPMid-Uc^>^%lThy{T(#Dl#OGqVn0?MC8Q%K57cS9utz^9Iy4%A!eNkxD#l zp_P>6K?hK3Hj~+6@?tP~v*E_2lXi@JR*M*xK$w&tZWqbd;iru_c%?;n+-S4i8tAF+Qr9RU3et9atVo1l4wY)!0!A7Lg zb-n=bsr8_df!(r$!ZffgdYa>rM7Do+mKjp_Agzh@TTwV^Prh!S#kZ{xK^Ypz_3mp? zrE6aBqnNWL3vps3YY!GCzBIQgEO+4tam{Fgq+Y~SU0<>>lW@nQ6tXIjX5WtW@t&RM}F*vVgi6TcjwjNaMkH8N~3(bCAgJFw9ir*_hLjix6y=@RPf5J5#G8fK`;-5O)Moqma;Ud<7dN`zSOXeCXWL z($XG+X2Fx16Poz1Dq$#f9cm3v2-JSi(29+fhM zvf8Y9gF}V+jVn%c=j6`apbmuPdf{av;jOhO9Y3sU8H_$ zznvkr(Uwa!*5w+4ahy|0Qm zg(p#lUz@|P{jd+2G}4(!yrIp)_zZ@BN^=IYD)HF(mbG^=5tR+@wyNKB=SjmfDKu`p znQ}b|)w>2D19DezPTJm~Ea8;1CBV44fqN0GRNk7m(<TBSPf(SdYNg;*Mt^YeC)| z#bynDv8z;@i_BO9MLvdb*rX`aPD#osaTpNR2Z|vMbV}_XiF}LjsH$gNu^B~@~2DIM0 z>N39Kw(TdCezB`gJ0F0or-a=PFm+SlYbhQ+$Ugdzz#maY$%NxXP5`X8J*)0bOC*tX zV~w0!x8ZO;mDzBJ#YAA(HNMkxr8c%=jzkLYAbuZJvFIEjn#y>C0=e0SnVJnE$N4U?p4p_BbTR@y7NKb|vc4kRkl7dF7WLpOyLvWd zAcI38n-9Q>{bNzd&R=i~{{Wi2k3w2S&lH1k`p+@H(&$BvfBP^}95x|Np`*w*lZ!C$ zG(IAQw_q!9-LJ84iq|AD2K!}} z^>A4gg~vL$BBUQGfLH^oAn4+Y5~9m88!+?O*R*12`Lunik+Bnu!!WXg;5sBI{?WtB zg%imEIC@D-^yHLi5oeUnDujwJKkQMuzataFAxxL1X`Kq^Iu zujAk&EHUjoc8dgSMHCokjKAjV)y{@qg-MoOIZnet=ba8RStwH3&L<{2mjO<&nyWxvmk1BpRW~oSc84) z;u9o&dW?&rxMCEH)SGH3#fxknE3fu+FtJiNl*+}~Z^Wt&b?v0v~YFIfaL-I-$T&hJ)?&`W*Lr!hN$1N<0DDcU_Gr2xP*k{Va3Km%@wvgpCex5 zepT5jt>>j7>zue}J`6>LDC31V<9)#!di_32JXbk=xNfK7j!)d^#eA0;BN;?9 zU7>RM*aR-p6Mr3NFHnii-`;GB7(9n z-aI<{~MJ+H#*ZVh7KFvQ$JV=T z0J@*-tY5T90@pIePx&ho?HiBnqyGTMQZq8B1XHzy9F}X!vCBJ~m)g zfHRUESa_AxQFdU~i>tp_jNa|Fy%?mpy1RB*+hfC(#^Rv|#7lql6$$<^P@m!z0b$HK z))l{vf1P1l_}BT?6^Gwi!#DA*Va?9mVxa#35U5Y_3WxkclkuZ!w-LXP0=QYm#AIoB zCbx9xe7ZZT0?s+7z4w1A)1U%)!Mhg3Bv%FpIMX3v_lf=Bi%C2z^EQ-iS2|KYlSXJ*~o`&OmsqS=&W4|SD9)e@R6a5}+U1QB8lAi!gFUau%v@?_i1 zX?QWw;#w9`b5N=dUJZSB6rqHy-tZ>BVlc>|oR1zXFA1K2y zwaC%X<}b+TX=S{Hc$!UY4eS8%tPJE4lN2gGEo#9`qzl|3asC_DL|hR^u*Ze`k3$eE zI=O;E1CC#`Dgx>cc(t!l%M^pdh*lbD9^2Um`ql-}H!9)(00IR}W17Ox8(D{gTBmn0 zIl3ELh-J6deVVhziNvx?7ZQ)%Vl7wUnb+-Os(-w9lvmMF$+-%A~C;-X1 zk2)YqtQkWa1F;6xV8mD`H?>$|Be{vZc^?Bp(n95e9!DeaGH(78GRK!P2LqU05TB(0R#aA0Rsa9 z1q1^C000020RsdD1^@>U5)%|5Fd{KB6+jRcBQrq=G*ECQLQ((P00;pC0RadA{{Wz= ztJ2oeG*xE+tVYlmGs2$7I!SBza*6){2VFVp$?@g2jmoRZs@b0lKgELQ60m50hTdVg z;}~^&@$xXQZy>V>I*k@g$HkT`ajUwh{&_#fbq&>IW@JnK-X)jZVb)117Cn+zWR(%D zVqa`^C9R6cfmgFQ6ey_M*_PU0(b7pwYiM@T25{`@Hd%lAe4N|j?m2<&gzRP`tb4-CC@-A8NW6?gU851Ym5|OD-rn@odIUC&r)IYv5ps zt-Q;m;MY%9*|j8G5ipMb0J0{9P=`=jhlJ&FA09O>GPsChQCgDP@pFs9wT?_ntlI2C zx=)=qzCcIB;>S%vg#C=xBCyWg;#JXvU(4~RRa{7g`&tRjR$f=jbzN*hPf{OO87`Qt zX;JM+lJ6Iw$v}O0(^}!F#eF5bD|S`L(UnV$T~;w^4cPAC`76-nB@M4Sn9Hmf$dSD{`ZFUc$3SoOmg2_)aw{39#xu%vlKVr)L^%&`~Up zXK`uP2Oz2O`dn5yGXmj8Y*!jA${ezu+sRk98D*_v%?hkTBDj{Z*mr1&nB0`O5+Khw zkL1-*=`STgi}HfDjsm!K6?b&8YhS}|vK(wDKx#Z`HpDN#m8;bP!*Q`&t7qp7c`cCw z@KSE8>QG&f-tgf~FGrl-OarRw_d38Vj9-n9Z_X@r;uh04t8C@B)yw?nZ>><9)h743 zM54=)ckgc>WJ%XIr)_!c+V7sefFFfgCB2-jVl2 zdG+Jo%1R4lWo=@1)=$eXp9HcQeoTHu#3$ZjdE%W^)snx(PRSd6sPqF)^LBIdeb;VZ zF{!0ZeoLh5>hkGbRo9VqtoL+leR0uIhO!)r?YN}r!$)(X~P#c9%>@4k8`FDo!uK2(HBR$ zRxTQn*X||Vi=@*tcQ!;RuCmN6)_>c*HsU~(LJzX@PqZ#Khv!bzwlJnfuwru}^m21n zEVn)r(TUcaVbg8TlM2SGW>+lPd4@KyB_xP@YOc1-_M|~aVO)?EZL<|s(p`S;(nYO= zsj?U!Zp!=U9?3Nrl+gpZBlZ+id@sF`I;y&fcqrnlvgf-|G*Q^A8eTUo^lChUiy`-9 zOFyZ{CC_$3f@uu3x0`J%B#yRIS=uZe2ZeiQFvnX_X7_AwF~&|*Ewjqq8KYYGuL_Ek zw$?R|_lr}J#Hvb@BGsEeHGyKMB5xBwE!pYLJd>Beim&!m?>* z#WZENh=n;`6&F|=061kJjt`6mK{4+pUxI~YQO^dO;lxGU95u{R#k;E5?}VuBJP;lR z%saxZNlc2QX%eIG+^a|ICa9vdp_KQ%b5sKNAnF?*T=Gg>}eHI76o)@stfe%54{-VEk2Zy=fejY zn^^U8q6?BT3|`C;`7js%0P^P(N{Wldn>7OxOzt}?he>c-{@`lM0HDZW0;Wl|*)2&p zY)FjrYC>uxnvTP=TtEmlEX71EA|fZUCqHBd7fL*9qAs(|uBglyH{07Rrgj}T@mtkG z6#A3jRP@h2=)Cl(ipzvLc@$rDG=;({Y7O&L_6-qX*#mU$HsWRV%(noZ8|gl-;#;3A zSuaA8)P`m@)y*t>$W+muVaIvP4GRLX5^MXTtV%-`P(?~p00Kpijt7!ol*p=u!Ydygj$!d+pNJv#gw(8N@jX7AdRZ$g2 zQ%LJw(cn;Dd0+0I)Y$^Xiwb$+6nQVUSUuF5P0GgSN6oGd+U?cT=@|q(UnVPc8ivfI zKepD3H**3&UqMOG3ykBC!E6^zCmb%SjNXaVVo996m22+_f)gzMdd|uo9Zz`~is5S+ zu?ap_N%s^51tds7O-8tO9D#AVb*##3Ra)DV}(yffHE+-Fu?IMzdeMJp}EqG)?|RaN=6s}+$} z#Q4)&|gNm ztr?MDnle+c_bpRh&842)nEQd1I=LNP)o$Hxd|djBT`k-&a&37bbM3~}*dIX!+zepY zU)0!&Ubd~qO2AYn$wl0k4W`*JopTmU6GyS@)WLJA*|K4THw9(J#$L#ui1FNfn0_k` zzO{*NS4!xp4nsasHM`8IVRKCodE;J$RFqqZEgp*^IJoH&DW$0MH@>Xn`nWGNmhO{s z3^j}8rAs%fvQ*ekj|lBhE(!f!sY8ytkh2{|!MZKcS- zp4)FX4mE{ij6XiK@jRVcef*gxwX0`*_8t%Z^NH zeKa=!TIGGJWpq(!_j|HnlGj82HCYSH3gc4ZtT)TDG~=pZ)zmT;`Be^6TcberRfp;g zqVw;n9In!k6@ZDFV~(}m%RJIl_EnYv#8lP^=dsJ8D+;DcL~QbArK~bHo=a)0TE*Bc zHyTFn(hQhvSO!35?aZSs#1eHpNszojBe*QEvx<)k$mWcSI6<*v{d ziOS2$`v3xNIH<0-V7S}2!COv9Q$Q`U$o8{|5#VLdU?MKy>)L<3huf1 zQu53?`v#C}C7BI6B4X2>NeL2DAPQ?q3imaY>1i=cQnwSSZWKpLlIV<#vNsu47&y5ZR2UDgQ;EYz7cTgJko3hau>B`$YD^N2PMXd77GB=4nNs?wvDJN zBG*S(jTcpM&>Kb8C%Dzv{i(#0$~J9DV>U+r0Guwm=IkL#WRq}el67%7J2`;I&oXst zTnhL#aT<#g%fa6uiri=G&cR0@+Dz4<}^eO?ji+Oogqt%3pcv>srfr;`}94AGnww!W8J5W>eAEk&Pv(Tq-A#vsD0*s9 zB@+ZJ6O6AOD1WDd3sID`%oJ2keLA*EC0b`4!*CYD44>(X6P~J^%(iYU6585q)X3aI zpW|Ha6Nep{nsA6*UN+|5-VRp;B4@c&m{!h1Ogk!;xg0p*@}VjsqC|L{r+K6XmB2;S zP3+N#+C3J0Nu$e2?5L?4(0M?7g*erOX!dZOi7u*^HDp9#w_=Fu#~6ibKh(6tY^%jh zfMiKNrh&Bv#A7yyzV9-QHmHq~DC*Q4V!<2>ivbF?dq|ujCa)g}6C}EXFr=acw>B%u zE4yhfmv5|Hja^}h!rZ#(mh54>WeXOY>s|RGM3Fi`FvX51I=TwTTzx?75<7qnM}63? zMw0Xwe1gcpvjlaRv!q1eByuJ`(CkVYqi(&_kqH}=teOcLb`3P>iS;BA`>t0&)2LHp zfhRgeR8(Cy`f|ObsxtR+vVEm&9CA#jr5D$CVd!BOOJf!r5E#?E?7JCoe4r;c`h1Lw zZYVNYsV(RbBGyA@EN_;o!OFSqNeg_!B--~_U{rvFhHZFc)zPgZ8*VgR9&$g|+)~cr zq2U?H?xK%SEXL%Mf@3_rj^B(+JH0=FXzMV(zas8c63OuG-~4G@Lvw>JB=DD=<)MK;R_x=zNAKKJDxWb zBWQv;BCd(pX`*%#>H8vS;sHx(Bd^va>278sdo9(X{tmx=C-XF}sA<wA<cYv`=%>Z+j+nkVi8#!y=NVO3K6 zxJA{B_A6NO8);pTgPm^UNP{ezcHxnlkzQErw;hJsY``1^6RyYUYF#HHT(vRkxgi$> zt;nE^v$OsZVaApSFE#?$Adl{{3wxM0?Ta}rM4PI?ZJa|MpHfdfFC(LF>Jo}Y0&)w{ zPa3vMI07U@ASy&8CWxc|011%eFG-Y>;9|6vP$s(~PU5w2ERhEH0; z#U>(Rs>R)w?yOGbHx{dUlH%tWe7icZ=PkK(MAAye%Bn7F3dt6iU{!#>9HiU(m>J=M zYjtu-8C7eGixcq2ylh8bhhloURBmC%f!ZkEIYz0y9BoGCD;)R;oZd(}uC+nlW4kU< z%CK*XlHI9gnZpyvMpO#)o;&+FuGo)737o4b?_}f6PTG=H!eJQ@MH$M^BV6iu3sj;= zSlRH?$Q6^Cxd0K!>qawRB!u5eid)-8Zq*3JLib3v}$in>4ipNfYd8U;k zLCuY-7sSn%wJWer%I5Vhb)M~&W*vwt!P;8$qcLtSJ2l66f{kKW4=3kw@F*XUn4kXq6l%=J@Ota(~ zmOu)%xr_8ED-$%X+ms@b3G=2sRF+m87!SCL@66Xcm36EU#bKWg$cPXmC>wOO2D#ScESf8sw z9ka98HvNEJqIvMH$Ed`jlCC%#cUy?5(n;dN!jdRpNM%qB8aEr(kBZQ#I*eiiX9D4u z7)6@d-HqMt@`Kyoyl}jiHI&I9H`p)-B!YPD}kO-|V2NDoK&G z?D*e>V%HZ0B^7ZBL02U~HY>pU@M9QYTq(**?*Qv#LNkdl8NChZgg}OPS3?FNRCnS! z8{CSR#KK};5{lMq09X<^RE;a0>~C&DffL9JXR+*o!<{j5`XMCPk-J^=2s^>7Tu^W> z;ePtYlE7__7hrzM#!TKAc|R(~;vmIF+2NTWb#!5{gKC~d#zu0PBEz{!KmyVLJGb5| z6^Qw*>d$dg$m^k3FglQb0xKAOCxTrUu0~1JaO*5{d4g(uL@q|Lz8#p4G`OsMqnE15 z`BpY_&(-AoMPnu-{{W9CB{CXYd>q>5GUx-nKBVveUo#Q+EK0Q&g_SoC026Sph6k7An4AyNdf z6MVPOFel&5h}cCs_1L9MH>AF9E-MJJ1bpo;wA&x-y#BP#Qh70!&+jvpBeq z*{SH%*JhYe6vCQ27*hsD7gidAD>RrudkwXt@Z!9xMUp1fSxp+zWsQ)Z5x2^PofxYQ z1ZaKsC7GSsQ5#hObh#VJs0hM3-GYmRZ@^S7>QjUSwt$^=Q(eqK?Ka~m9q+C+@dk~c zh8LNSBwWN%yx56eSL9gU!;r0}w${V2?+1vcx<0W@Z5(-T;wbA(&Ll^T5hVyin^?X6 zEi_V37>-3yR%nU1IU2^qTWv@^Y6+LDk24I>J(V;XSz4v)qQj{qvHhU#sT*!dtz?n2 zX<#f#zl9JL7b@5Qc$<;8Q%13KVLcqqV?~QeXWZFupjyGs+}{x7pJl0WP&VdCvwK5> zQ;cpFHO}KHNfZtC*7m2oIDkwfosw<0nCOszd+2pW9K{Z+5p828;QbT6wW02Fj@Kt2 znD^6cJgy2p=W9go+uF*k)HR zb|8h*P!DL{iacoQrSg&*B+Z&Zq0|xu_KE=@XDXl$&>KNDvifu_lwji^bAHh@xsnx9 z6Nze!N7WS!6#|CN!FCGRbTqcXnbt-@`x$STeO5Kxkrmg$g~ezIwd+mb>>%+KVhOTM zxSkEpwy^A;3^p1TU`Qi@9{R0$`l1DE_EJKUVz8p*HhI3vVqMH;7tM; z8!$UTrn>r^L(N5vK+|DljHJ=28Mua9>2X+JRrGp3atQ`W7-$PyU>qyu3QW*V8Ao16 zhdN^2L~9meEq<(Jy>Xyl4W?!S?HKUhD=fHqR1|TlvYq0!M(!WL(6W~e`@k{x(_@K@ zi1o1R6SN1IxE&jfZt93URJgB{Dlvz|WCTkH3ww+9lxS)%TZCMOi&pbpw1hI9K^7p; zt*7jvcDAg43Kgv*Rl(=b7Y*q^E|`THIpHW9M?IpUcwJ>at0k_ZIqvgTI;o&XLKTH| z0f&0FZt$(n-+x1lrL_dp^}dM25Yr{E)t3FLTkQjFFlD@Mj5P!jEJq_&w^&pWu!Zc8 zePWWt>gdCBDY!H}&lMJVkbcfhjyx5qGQ>b5O|3@n8$)lR(k*cm0Ax&uT~(HdIYGGx zg<+J)!?QekNIb^c2NUS){B3DG0cX{rlVOf zaxm+Vs6SX=c%(rQP*5lt2s-IdAU{A*(@O6RMSqz80DWvR2L01-#+Zu|K?b{cxRksM zPO`)_W$_gKWT`7A8bWXGOfxU;U+(wiEXQJja%kwEq{0s1Y>qzaTVdMfE(40!2!GvP zh6@&WjxWanTyhOW4);$|2Qs-_bMHPpJ zMO~uo4JWGNn!yr63c28orOzWmkPk^hmx2CJ8st7S2w-eM+6bUtNR-JA@?+XZ)#x3a zeY?j;`LFlabXYghd#!iXm>PVqAEhw2JW-?w;PNU+G=0txBSGP|vt~W(`|KuEXv%hN znNHiS>3X>FD~Zh?&FaeleAHKcHB-z`+R%TxwZ@ps5@op{s^;86-%@RAlE?#OSJdlf zur@lHnN-YmCv~*fmpZmsB91k&xYTuo`IfDqQ5|9%fxM|Tzi&fY+eYFz8oJJ)XFz*M z+n7^?^wu6b#903TiH$TYzc^b_!(M@C@k%EHfo&V@1k;p~IR%&-8bC2&GffKYlZznv zTt#1~as;3Yk->*Gs~c(jb}51n465bPJ-O;Q$3WDqS}#t zrrbpkLDf$W3gW-YE0s5HHn>uBVZBd{6P0XO9je>Z(eWJ)Rn+P?Fy5z;sTvGQ4C=ty zkQ1-|FQD!s6A$QQc}=#VNGv2XT(Z@IQTPHVgv1Obl)QhCahv zMACmX8#<_EJPMnGL5>3&foE0kBdPDN&PLh9P!dBF-Ki4fG%_iSy790(DTA&dRm6d= ztfX8K%AtxWy3^Gv5PKZ#Prk+<88R%H$khXjg>9gIG3rw@mb zL5e}$b)#qAwdQzJUMP@8r*W|)nsOtb5gr~@y@5$sB@j~%ix4Au?>E|Q&}|bngZ!T! zRDt203b^73qD%DJiU_M!+#nel*CA+jz)&41^gcN{#remZt;CJ8jmqoWCrRu z6Q#vV?heFyI%hq`C-o%5<~r61tr1~OJU_)%jLXR zqoi4f#8)M1F$NsyRZgUHJpeRbj+!h)@3=Y~(WjXgrX`8HG1^Jr(Z^ao;y?)J;vNT; zE~$8C`VFx88t*iWO>5TSom71FIoIyB8#=aSZUk10bamj=#a&nsL9qmH7O&UI30aM; zc_L#QH*hBQd4opo(6Ef1q;B&Dg@~EK9tOWz9C6C0=&_)BnE;Y62HoUzph`B3ylV*W7GSbY z<1A_PnDF2=q8V_|sulvlpKCXn_tXzFf z7CCL&Zyr5nM%RNE+^~4(1}`%AyyI z*_R>tS`+6)1t19A_K6nSz}sP@2J4Wp(1jY>p>{8Pt_9Q$_cRDzT8dD7DkDj66HR_w zsC0LQXv?Fo15vXhxn&?6Wf%og^cJQX!Bfm9gy}qdgQP$LZ+722E(Yo(L zv&)4sR$ZuTLt%5KwP0^bS#A|jZDu{{2NGL;J63@m+@ zy)L8NXXNX!{b5F#m`y6jG+UZ7b-#etr2;evKnB{C2Bc?6->YQ4mOK2t_~>@k$&L1W z*CB_omfm%15lPo742)MtTXEcKKu+~KF!2VoBTz2NTl-pvi(-bU3DwDI;O#7)|f_>I9wg-&po zmqLz0XIIEd>MjjpPAe7^tZkDbplzfJoqhE)Nc#mykC0u_LC|po?WVMNl`xaRj;P*D z1u0n~V!2N$8IX}?w4aSX=?VIx zemd~+6w}2qAjn~L0qydG2B^Y85(GsXfcN2>EyFJrIuTIH9z`lytOA4JP3YN_f)4^H zewmaBRZX)p=zPZNLXUfEv54F`@}kP)V<{l}MPf6J-C_p&XhD~OLvOy54tx>6s)Pjw zz{tkm>Y<17jlUMJRw_1LHvX!Q3Hy!xRG3mZ#^2RZ;Xj7o*Iizw_O{Mdka-$p9#tR% z=BNi`(PKL0{ ziYhF!7s}S>w)F-c6!|$zpJ_CznCOOLQ$=**2I4*d*2B(r?pNG=4Ju_K@0<*z4mYVK zMLP$1ZNz4=`)d#g=N-Q0H8T0BsgQX$_L`RV)96K0?gMY-(@*f zIuZ_|pRK}<^RCtUL-C_bGcy*#le$tZm%;XU+JOuWh&>Ec1d~5C%kUOcD%eI_Tg``Zmj&(f<0-j)&i5Jop+mU~ECAqop$fqQFuo+$82;K?G&rJZ;pjc(k=m6WR+WFp{$xP!Wsh=47L!YI}+o}5$equX8d zI?qV~`eqz=+jm}rcyEk0-mns(KN-eV9wgL)TvM)6z*$vJwqMWSCdQc02K?RdIU0P} zVu9D0JbWk+R9y2M4?v(Yw*BDo6>_WGd-sOgH()NL(Cu-p8>0PeM$N9JcN#jAMvmRw zXwmSa+8g-O5~QNBdbTU2~Yn3gZ5HOhQx-tI5xN&)t6}Ssid7H(Ss6l@6GT7 zYl|Q56YA}#J90PVX^hU`i!Hza^EE4xaiAmsISP^OxZHzGWKMdKTyBoK6*Od#*kugI zVC72H6L^7o2Qb@e7LGxcxMh7PftBnA@+w}V4&B06GdB_i#f3@h7-3-NEtxryu9S@O z$a116xh!~AJV7%JBUI0m=^Kj0;c+qFLzu?i!U+3o6^4gp!WNMI!m-HiH!>CbiKrFh z*j2!F@fC+i%ddGwjlL5Dh_YX<-Fi3Z-fRT`ldr}WCfw;Vls?rv2%}|{S2J)u)-(W( z6e@wZ0bnUZD*^~2;Dfl<3J7Fv3!(tl;eHjY?HLF!ZFpXXR<2M(5n#k+z1Y~1uS{y{ z4ZtH|p Date: Wed, 6 Mar 2024 18:06:10 +0530 Subject: [PATCH 12/20] Update README.md --- README.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/README.md b/README.md index 84bed95..b2247cd 100644 --- a/README.md +++ b/README.md @@ -13,14 +13,14 @@ Both **authenticated** and **anonymous** requests are supported. [](https://buymeacoffee.com/sonii) +## Account Creator +Buy an Instagram [**Account Creator**](https://sonii.gumroad.com) written in Python. + ## Installation Python [**3.10**](https://www.python.org/downloads/) or later is required. pip install ensta -## [Instagram Account Creator](https://sonii.gumroad.com) -To buy an Instagram account creator written in Python, [**visit our store**](https://sonii.gumroad.com). - ## Example Fetching profile info by username: From 9db464516d6e26c824d850db4b7dbc14529ef74d Mon Sep 17 00:00:00 2001 From: Deepak Soni Date: Wed, 6 Mar 2024 18:06:50 +0530 Subject: [PATCH 13/20] Update README.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index b2247cd..009f0ca 100644 --- a/README.md +++ b/README.md @@ -14,7 +14,7 @@ Both **authenticated** and **anonymous** requests are supported. [](https://buymeacoffee.com/sonii) ## Account Creator -Buy an Instagram [**Account Creator**](https://sonii.gumroad.com) written in Python. +Download an Instagram [**Account Creator**](https://sonii.gumroad.com/l/account-creator) written in Python. ## Installation Python [**3.10**](https://www.python.org/downloads/) or later is required. From fcc1a7e2d4f81015318c7fa285490dd55828d534 Mon Sep 17 00:00:00 2001 From: Deepak Soni Date: Wed, 6 Mar 2024 18:08:12 +0530 Subject: [PATCH 14/20] Update README.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 009f0ca..a0764c3 100644 --- a/README.md +++ b/README.md @@ -14,7 +14,7 @@ Both **authenticated** and **anonymous** requests are supported. [](https://buymeacoffee.com/sonii) ## Account Creator -Download an Instagram [**Account Creator**](https://sonii.gumroad.com/l/account-creator) written in Python. +Download an Instagram [**Account Creator**](https://sonii.gumroad.com/l/account-creator) written in Python for **$25**. ## Installation Python [**3.10**](https://www.python.org/downloads/) or later is required. From 52249663496c8ac3440ff583d1a7235df0d41919 Mon Sep 17 00:00:00 2001 From: Deepak Soni Date: Wed, 6 Mar 2024 18:12:43 +0530 Subject: [PATCH 15/20] Update README.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index a0764c3..009f0ca 100644 --- a/README.md +++ b/README.md @@ -14,7 +14,7 @@ Both **authenticated** and **anonymous** requests are supported. [](https://buymeacoffee.com/sonii) ## Account Creator -Download an Instagram [**Account Creator**](https://sonii.gumroad.com/l/account-creator) written in Python for **$25**. +Download an Instagram [**Account Creator**](https://sonii.gumroad.com/l/account-creator) written in Python. ## Installation Python [**3.10**](https://www.python.org/downloads/) or later is required. From ec0ed5f964fc3c1addde3692d6c34b30f0256fb3 Mon Sep 17 00:00:00 2001 From: Deepak Soni Date: Wed, 6 Mar 2024 22:23:33 +0530 Subject: [PATCH 16/20] Update README.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 009f0ca..32fa33b 100644 --- a/README.md +++ b/README.md @@ -14,7 +14,7 @@ Both **authenticated** and **anonymous** requests are supported. [](https://buymeacoffee.com/sonii) ## Account Creator -Download an Instagram [**Account Creator**](https://sonii.gumroad.com/l/account-creator) written in Python. +Download an Instagram [**Account Creator**](https://sonii.gumroad.com/l/account-creator/EARLY10) written in Python. **(20% Discount For First 10 People!)** ## Installation Python [**3.10**](https://www.python.org/downloads/) or later is required. From ea2c47e59efdb8b40fee7f218f5c3fabde7dc903 Mon Sep 17 00:00:00 2001 From: Deepak Soni Date: Wed, 6 Mar 2024 22:24:43 +0530 Subject: [PATCH 17/20] Update README.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 32fa33b..705f969 100644 --- a/README.md +++ b/README.md @@ -14,7 +14,7 @@ Both **authenticated** and **anonymous** requests are supported. [](https://buymeacoffee.com/sonii) ## Account Creator -Download an Instagram [**Account Creator**](https://sonii.gumroad.com/l/account-creator/EARLY10) written in Python. **(20% Discount For First 10 People!)** +Download an Instagram [**Account Creator**](https://sonii.gumroad.com/l/account-creator/EARLY20) written in Python. **(20% Discount For First 10 People!)** ## Installation Python [**3.10**](https://www.python.org/downloads/) or later is required. From d54d801a657bb621746ed76c4df063a9810703df Mon Sep 17 00:00:00 2001 From: Deepak Soni Date: Thu, 7 Mar 2024 14:02:42 +0530 Subject: [PATCH 18/20] Update README.md --- README.md | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index 705f969..b49ae96 100644 --- a/README.md +++ b/README.md @@ -14,7 +14,12 @@ Both **authenticated** and **anonymous** requests are supported. [](https://buymeacoffee.com/sonii) ## Account Creator -Download an Instagram [**Account Creator**](https://sonii.gumroad.com/l/account-creator/EARLY20) written in Python. **(20% Discount For First 10 People!)** +Download an Instagram [**Account Creator**](https://sonii.gumroad.com/l/account-creator/EARLY20) written in Python. + +- Auto-generates email addresses using **DuckDuckGo Emails**. +- Auto fetches OTPs from **ProtonMail Inbox**. +- Auto updates profile picture using [**thispersondoesnotexist.com**](https://thispersondoesnotexist.com) +- Auto-updates to a random **Biography**. ## Installation Python [**3.10**](https://www.python.org/downloads/) or later is required. From 5bc4c48871260087b7dc49cb9815bde8d28145c4 Mon Sep 17 00:00:00 2001 From: Deepak Soni Date: Thu, 7 Mar 2024 14:03:28 +0530 Subject: [PATCH 19/20] Update README.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index b49ae96..ec505ad 100644 --- a/README.md +++ b/README.md @@ -19,7 +19,7 @@ Download an Instagram [**Account Creator**](https://sonii.gumroad.com/l/account- - Auto-generates email addresses using **DuckDuckGo Emails**. - Auto fetches OTPs from **ProtonMail Inbox**. - Auto updates profile picture using [**thispersondoesnotexist.com**](https://thispersondoesnotexist.com) -- Auto-updates to a random **Biography**. +- Auto-updates a random biography. ## Installation Python [**3.10**](https://www.python.org/downloads/) or later is required. From 882d1a1c90898dd7300a2c02d911e28b9cceac60 Mon Sep 17 00:00:00 2001 From: Deepak Soni Date: Sat, 9 Mar 2024 20:28:32 +0530 Subject: [PATCH 20/20] Update README.md --- README.md | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/README.md b/README.md index ccf0120..67a1e7a 100644 --- a/README.md +++ b/README.md @@ -16,10 +16,12 @@ Both **authenticated** and **anonymous** requests are supported. ## Account Creator Download an Instagram [**Account Creator**](https://sonii.gumroad.com/l/account-creator/EARLY20) written in Python. -- Auto-generates email addresses using **DuckDuckGo Emails**. -- Auto fetches OTPs from **ProtonMail Inbox**. -- Auto updates profile picture using [**thispersondoesnotexist.com**](https://thispersondoesnotexist.com) -- Auto-updates a random biography. +- Auto-generates **DuckDuckGo Private Email Addresses**. +- Auto-fetches OTP from **ProtonMail Inbox**. +- Auto-updates Profile Picture to an **AI-Generated Human Face**. +- Sets a random **AI-Generated Biography** on account creation. + +Creator should only be used for legitimate purposes. It's strictly not for spam. ## Installation Python [**3.10**](https://www.python.org/downloads/) or later is required.