Received: from malur.postgresql.org ([217.196.149.56]) by arkaria.postgresql.org with esmtps (TLS1.3:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1nhBoZ-0000XW-RL for pgsql-hackers@arkaria.postgresql.org; Wed, 20 Apr 2022 15:00:20 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.92) (envelope-from ) id 1nhBoX-0000oN-8n for pgsql-hackers@arkaria.postgresql.org; Wed, 20 Apr 2022 15:00:17 +0000 Received: from makus.postgresql.org ([2001:4800:3e1:1::229]) by malur.postgresql.org with esmtps (TLS1.3:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1nhBoW-0000oD-K7 for pgsql-hackers@lists.postgresql.org; Wed, 20 Apr 2022 15:00:16 +0000 Received: from mail-ed1-x52d.google.com ([2a00:1450:4864:20::52d]) by makus.postgresql.org with esmtps (TLS1.3:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.92) (envelope-from ) id 1nhBoR-0000ou-Sp for pgsql-hackers@lists.postgresql.org; Wed, 20 Apr 2022 15:00:15 +0000 Received: by mail-ed1-x52d.google.com with SMTP id 21so2680894edv.1 for ; Wed, 20 Apr 2022 08:00:11 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=cybertec-at.20210112.gappssmtp.com; s=20210112; h=from:to:cc:subject:in-reply-to:references:comments:mime-version :date:message-id; bh=Fgy3OwgZatB3qZEXDogwDCyrkE3x4+Uvk5A1W3WwhSo=; b=ARnWFaywKCGQKtjmZe+xKT0QTBM63PitDGO7n9KBmLanikv7osohZvTiIEJ3sF7/rW A1qiPoWewCK4oG/Z+FiAQZeWO8neCTFB9XCy9WA2XqBS3jYRUOFrTfzAAa13PGk+fL4r dSNH05MmP0S6EM5x0RKBWy9M/9oq6/zLyD4HI+pVI2vHxM/ZX1kScSooMuuOl9f2Q/RC gNS+wbSe+X4rqPxlAoNlLIOm0SCaeLg8ZfnMKucHrEszSbR11e2/yfzZqfbR99fKPeYT zAl7tikahAEq0YAPFM0JxY4OIf+vWLGdnDub1hVnWYT27dK1X9XCzOJRXD6Mhw70haDU ouXg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:from:to:cc:subject:in-reply-to:references :comments:mime-version:date:message-id; bh=Fgy3OwgZatB3qZEXDogwDCyrkE3x4+Uvk5A1W3WwhSo=; b=rFWGAylTSSttGJOfG0H/75bGZPvmhzARRNqwNgjxDsnYNhry87YKTlFFsaR8l0wVBW vYZhqdCKYEPuJh8+ecE3c21uy9gHbSEWLUu80ooA1Wj1B9oCCKVoeuEdlFINNjj713UY AL6cjcIpkMLj6h1PflcN5ObSafkA3CHhY/vU63erhkkqaVgl5sfiW64kKlwH4J2t1RVZ xm72O2HbpHnCWf2F9legunWeMcPBeJiSgxGhG0En0avsXGUFUv+T2M6REvJ48AG6VFI3 4gJOBo9HTse3CSlpz4dNwuBPZ4WIvfMabNlRLHnTPlAX2wNK/EBI5ZlB2GDCFx06Tq4w z/MQ== X-Gm-Message-State: AOAM533b1tqwQjG/b/FeT6zXNVr8gag7MWdflBFX4PBsUT5MwrYeUn5x X/jlkcjTCftyf5SkXT3O9DpoBaGac2csIQ== X-Google-Smtp-Source: ABdhPJyDjxSvFSmbDvYDVFaj/3tMwOsMrSr0XGs2k45515VFfuxKXCetTdVqdJOAmNXWcOL0R7ci2A== X-Received: by 2002:a05:6402:1941:b0:413:2822:9c8 with SMTP id f1-20020a056402194100b00413282209c8mr23831543edz.13.1650466809507; Wed, 20 Apr 2022 08:00:09 -0700 (PDT) Received: from antos (85-207-121-76.static.bluetone.cz. [85.207.121.76]) by smtp.gmail.com with ESMTPSA id q7-20020a170906540700b006d5eca5c9cfsm6844494ejo.191.2022.04.20.08.00.07 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 20 Apr 2022 08:00:08 -0700 (PDT) From: Antonin Houska To: Robert Haas cc: Stephen Frost , PostgreSQL Hackers Subject: Re: Temporary file access API In-reply-to: References: <4987.1644323098@antos> <20220301143431.GT10577@tamriel.snowman.net> <27013.1646738099@antos> <3146.1649408068@antos> <2132.1649664364@antos> <3690.1649755839@antos> Comments: In-reply-to Robert Haas message dated "Tue, 12 Apr 2022 09:01:45 -0400." X-Mailer: MH-E 8.6+git; nmh 1.7+dev; GNU Emacs 27.2.50 MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="=-=-=" Date: Wed, 20 Apr 2022 17:00:26 +0200 Message-ID: <24759.1650466826@antos> List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --=-=-= Content-Type: text/plain Robert Haas wrote: > On Tue, Apr 12, 2022 at 5:30 AM Antonin Houska wrote: > > Robert Haas wrote: > > > On Mon, Apr 11, 2022 at 4:05 AM Antonin Houska wrote: > > > > There are't really that many kinds of files to encrypt: > > > > > > > > https://wiki.postgresql.org/wiki/Transparent_Data_Encryption#List_of_the_files_that_contain_user_data > > > > > > > > (And pg_stat/* files should be removed from the list.) > > > > > > This kind of gets into some theoretical questions. Like, do we think > > > that it's an information leak if people can look at how many > > > transactions are committing and aborting in pg_xact_status? In theory > > > it could be, but I know it's been argued that that's too much of a > > > side channel. I'm not sure I believe that, but it's arguable. > > > > I was referring to the fact that the statistics are no longer stored in files: > > > > https://git.postgresql.org/gitweb/?p=postgresql.git;a=commit;h=5891c7a8ed8f2d3d577e7eea34dacff12d7b6bbd > > Oh, yeah, I agree with that. I see now that the statistics are yet saved to a file on server shutdown. I've updated the wiki page. Attached is a new version of the patch, to evaluate what the API use in the backend could look like. I haven't touched places where the file is accessed in a non-trivial way, e.g. lseek() / fseek() or pg_pwrite() / pg_pread() is called. Another use case might be copying one file to another via a buffer. Something like BufFileCopy(int dstfd, int srcfd, int bufsize) The obvious call site would be in copydir.c:copy_file(), but I think there are a few more in the server code. -- Antonin Houska Web: https://www.cybertec-postgresql.com --=-=-= Content-Type: application/gzip Content-Disposition: attachment; filename=temp_file_api_v2.tgz Content-Transfer-Encoding: base64 H4sIAL4fYGIAA+19a3fbRpLofpV+Rcd74kjmQwTfjGPPyrKc6I5j+UjKYyc7hwckQQnXFMEFSMtK 4v9+69HdaAANEKRkxzNXOIklAf2srq6urufSu14Mp/7MG7oLf/i+efAf9/80Go1epyPgp9PrOPiz 4bTb9FM9wmk3W/i60XZEw2lC+f8QnU8wlsyzipZuCENxr+7WjpyH/vkv8izT64+LU/sxeO/VouDa q019bzaJatMwuK69WE1fQcnaMqi5tbl3U4uW4Wq8XIUefqov3OXYCkRossvrrdZf4wE87Xa31VTr 32r3WqLR7LZ73f8Qjc8BgLLrv+77v+j6v4KFFa3JtNcdtJ1xozVoeH3X7U7dTt9pd5xRrzfqTL3x qDlqOh3xYzAX595COD3RaHxL/4kmLNsuNvOtOJwvg7k/Fz8Eq+idK75zr/5rfDvywqU3rrvL57sv 3aX3rfjFm1ShljhchPCjCWvf/bbZ/LbZF5UGNLZ7vhr9X2+8/Fb89vbw4ugH4RwM/ikQIwVipGCM FIiRQmKkWAbCFYCRQmPkrvp2vgw997q+u3tx5UWecEMofaVbgYrvPJjQMnTH70QwFVB4cnAT+ktP LILIX/rBvCrc+QQqBVB9FXkTMQ3C3dFqOvVCf35Z363VaruiXq8fhN5i5o9drHMwCy7h1xm8C8KJ F3Lx+ljw8yf83xYVqBeF44MR9O3NJwfRMgjdS+8At+MB1oCfuoqs12z1RCV+avxwO/58PFtNPN2O auJKpJ9k/8sgmEUHi0t/PvHmy4Pl7cKbeNOoPvOjZbaeIyq7UBlbjsT4yp1f4no67YHw5xGsNcw+ 2qvsV8WgJybezOMXtf3d3Yk/nYpa7dJfCvfAnHgZwI02rbGL0/kguv1+bzJutqZdp16fuL3RxGk1 nfFIOESVcPU2H80ugH6LEf3Xf4lat92tAqbzD3hxxmVeUJmLX9+8uP3Vn+wl3oon4agqLkJ3Hrlj 7OBkIj74APQRLJwYA8ouvequ2Pm4K+Dfgye7tR3xRJxMCdHH7hj+vXGj+TdLcQWgD0IB/94i/gMu u+LRJPCi2jxY1rwPsOCPCNtvsMp8yS3BJuFO4JMADAlv67uV++oCWufGMl0IeHsgpyQizw3HV9Td LAjerWDLuiPY+VAiF61y9tOoRCGJPJ3uqN/vDNrjcb9e70x67tSZOo1xJx95cprL4ktOQUSRTrva FRX4t9kGDNkV/yk3tnikK03qV4/MD6ulD1s49KLgZg6ohh93K4AJFQDsxZUfCfgvWIViHKzmSy9c uOESqR2C89XJ6+OYbgKxi2DbTv05rJw/pwa+i5YTP6hfPa+Ln2CHR1gzBidS1Gi1AGoJNQBVFl4I BPKaKGnEpDQS730XOvMjai+SJLmCq1fhrpPkerfyByAFjh8x460kxDi0yPPmYnSLhDjEcagTAOa3 N16F+HtVwC+n02nkLUUFqfg+o+sBNSkuTl+ewq6bu9d0bjwKqOSjv4nTUDyCaZ2qv6kCfB0ud3Z0 i093sA2uoyDI+xugJU8WRsvKjj+HmjswAKiEtebeh6XtgMGasg2j3nx0C5CTVZfB0p2J/8Qe37sz fyLoY7ri2+8PZ/4lrNyLWQDHGX96Ch+QUOzsTPxweSsbxB2p6s49XrkR7EgY2NKb8+Q/QtVdAasg YBF+gXnC2N8piGPnUOfSv3RxLLXI/x1aibzLa9i+URXmeemGEyhH6HJ2/Pr8+Pvh+ck/juvUHJzG CIoIZw/H8JW7BILwzUTM/Heww93w0os74qFFCwSdcMdhAG1er2ZLfzHzmKYOqk5TVPq9qtOnHUOE I4lYu8JEqVPYC4dvT8Se/HoGTe/BmSX//AXXB//2luP6PiJbROgb7xPERXfOjcFoVzhrYkPGY5wy IgKQEP+9P1nBwi2ubiM8EfjUrMPsV1wmQizEgYxVYyPJZMRtBVAwlOctAGouWRE4cGC/Q7ceYoMa eYzqiQ0l9xwtqMKv1TWBlzEa/hrxjkqOFVEMUR0BiuXcmfrgfRh7iyVTZBcYhSsXOLSZN79cXsE3 OKhmt+LHw1+Hb3/47/OTo8PXQyQ0iADcFva9A+zEk6kcBLa+gOaDMaCBG4burbjxoS01TjoWfPgp DwXGaT86QYL2K/T3FFsgbi5YAJEAhjFEvk4dmhEhdW27vaC6QxQ8nc9uGWhXbhRv+RFSJgQV1CZM DaDc39RoaSk8Yqd4xoqURAt37CFLKeRrMXKjeCdJYEMriOiDZtUZiIrjdKvAQMObNI7fE7mUR6/E FFmQx0tz5dNxr1Gvz/eFOkygWIgjhiYY0oW0M7fWdlSzti3VrOVSzV0BBFAgHQGubqxB9+TafefJ P46C6+tgvgddizkt1P7TwvJ79Gbqh9ESixul3wcwPJgpsAaqrG5AFq2ZReXH14E7YSaxVPGXq+vF BsVfzVbRVW5JevkjTO6NdyPR+5yRNlmliieFwmeoXyk1D0m3njDhqor0KGytZKdXthU8vYZ6H+Fp IJfW3g6QV/mkZkqjebJYhlXVJP7IGS6dMuX6AbJxl54SC1kWJmXWV7KB6SUWmm04Yq5eVUDGXzGI dHWg2UNt2NKwQ3+n+1OdaJ3jdKoOXFKddgNPd3hVuPGAWqlOFI0Vz0Q80n15uOwhmIKp+rDPo93B 8rXn+qx5JpsFbJefjIMGvk7dWeTFH+k0yb5W/Dh8OWIydwZvVuHYO8XXT3W/ksJCuUZcOybL8Pp1 /B4pZaIg0zx+J9In/wmAdu8xF+QVxyWGUgXTqpQff+gBNzSnUwH+xBsorV2viVcYZwBL2MGlK6Js GehXKrKpCuLwbiU7Hysm7/Otgf/Igi/+ogEYvzJBGL9NLWvlo8EPS8R2NWrjEc5CKJSpwj0tvOXD cu/myoer640PrJP3YUHCJGQwAPc9akrxsqmKcFBNxXVAAivg+uy8FI8b7mAE99agXe2JSrvZhR/w Qo7t+AM0u5R7OAt9OClPlt9EYhEGI7hU38I0RqtL7B0FbsEcb/izmeSAlzf+2Ksze3AYocBn7yuF Lcwb0Y6q7SRIjyItybcJtKwKdSTuJNuDBQAux0SvdmNA02w7iWkezYAvzk6PGQP/qRIlTLFvoETA Fc0ljycm7tJlbuAOw4a2xzgEonIk+mJZ4wq4pXB2688vqexetM/gQ4zZ8wnphC++E8ldAO8qFRz/ Tjw3LkHI8Zv/T+iUoEGrXWl3+iWggXefOaChv6wKifSwqDH3z69mcBx7k7q+SOkDZVcpAXIZD71d Nz3S8YImrwU7iGmSpMDyQfnh0r/2dvxgiNL6pZx3C6iLAxPv9vBnPPP8sZF0jJjkw8l7dz4mCQAx mLAZF4DpkuFG3J97ePvCzUiHFlw6/RHer5g3Bn5zKvbShPr5s5xt+vgx3uuhRpY6FdWBxU8eEBXh ZBAFp/VHpigS0dpOzlECbEUemVRiRLUESP4MrEv08U+5EJ0GndTtfhN/brYQyGuJG7j/e3hfu0Fa MxeXHqAnyvhQrj9dAeFkrhzxMl6B1OmnOLc9NfQqAoAeLinlsLjX40+SHTBL7KcrahjFH345PLkY Hv98/OZi+OKnV7hmw7Pjw5fIHhuYIcf2nWjs2w4by4hjhk+VToza+MzjTpbatzVgjD7+mD/+JJ6a M0A00yiVPDGtBymgpBd6ePTsHZ+dnZ6hjBqePS8Mx8HEGwL9k6pHEnTs7csCAgpcR5d7j8bBajYR 84Dvf7wz/+fR19H/PPpWfH39qMrY12sh+es0OgnyV4B7TKoR1a4CJNfYAWKaJAnxjriC4fMF3rKo z3lRLcB6zsDaWVzyAH6K3EuvTprW0exdNMTJaB6HptDv0BScXtkpmGScuRSg4uOZB4zAhA7uFYEU tg6JMTzWYcUzg9JyuoVUPve+qKn8plcupvJ8JN9oRky9IfgtAxqypC0DBk0zCZr8gRFR+WlOcsQM HKu46teraCkm0AAdzjdXwUyLcIEGzRF8/pLbIVkj8lfx+VAjLBwFcKjD2fAUWCRsk8RGLqomFjF9 Ar6P2D+cpibaNEVEnOTXJAppki5FKO5715+xZAPf5h6JnUabBESdVhd/loMXk+K7HopyzhsdiwiG DU9FGjCBRgEwe0A+f2Y5IeFJXkI022Y/OPNPzoKjU56dMURfAg8YXvvAQl8FN4B5eA/wtJCRBVok RyfeGrs0YWluB30OSyJTE4g5NNQYO0QeL1ETqenQTFLtp8iY6qFSsocMWJjjpgXeI0TeF4ken4u4 XV6i1IDwfr8vTOQnJAdagDjeGVRLo/jOyZvzi7PhxcmPx8Pz44vh0U9nZ3D27antI6UA6QFgK6wL yPIUOyLDVQD2IcgM8ZDtFNelhC5ldpvtwXKA79hO97g9y+n+y9nJxTHjOy5IYqLfPZMnVvq8Zm1k m7QrnV5XymE2Bfjhy5d79rNwSP0TJasKWAv8ZV9vJAv7WnkmkmeElZPNlBLysMl+KDqn5eWQjmoY UI6wJ1dcIMzrxpJ3+CIAlDYl7qhCIM2BOo4FEQNPAKVK6hflanR6TOH7g/IUHgYgTRKYkMeWLT7A PQj9S38O3967s5XHOgAU6AEnHnmsmoORoyaPm9qDITNnduUuUNMyWUkLnOga1UOo4b5xwwlpH95h Q67kUXgiX+2nOPgYGrVnKSZL0S1USzzNuXQhb8ramPmEJ0eHktag0CGOl29Si2WxBTvNkD5DVpTh ibfr2nZJq9UIN6UcJXmSPcdNab3DVXJocP5uyClumIzQyr6BM0rewEiRFeu2YU8sWR8XrJZs9YPT YnMMxiyFVKnFLZRWlpbJEauMojfaA/1GtdUSla7TrLYb5fYAs7gkKN81xfxpVUWOWJ1Fi1LYmdUS WCRCVaEb2Zeiw6SyQbPQa7UN+aJ/Pg9EcqjEYfObnZ053Zwkk61fIi1CWltaUpeWdUFjkv3CNtWN 548kA4hr+vxZhvFN7CVZJsv+SiYPDTaA2wTygnd/FofSIUpckzxVJbtk2yh6JCZTZ+Ck7Tpbi/U6 xhVMTh0/Zi/4z/gymLP9jMkmOUgD6+1X6Ip1KKnVqOzsWO/s+lTfIcsNpU8NDCgSb6UMqeJjVyNI lus0AFpJFiyioZrviCs8V+i6k2oG3ppU0azRkLLlnWvvery43aMtZmPD9CirQtdnSJk17cyZMexk bYMjkcyEsZEqyVVNfkQmY4lqlD3eu/vAEQMRDUktBR8qyX5YKoUHU7IN3szJpsn+pdlCdUu326w6 LYMebkLgmELS7T9pBbMJgbQoNjcjjQmFz3r96HrKWEQaTSpIYGzBueIAHIHTbZkC5Y0AsRFtfPH6 6O/n/8ijiuqrSQ2ZBJBQtMpSDDS4XC0VDYy7IJ5rn28T2QMyh3bIShV7pYzKA24MwOvSLzxCHOIP 19coaAH+B1rzyBCIrLURe4lr4Jsv/Po3NeoSpNtGu+2yyLJU2E6G80SZSButBJJXqZA06iKfniSu oYaEr3aSWIIaZmobJFHdflhXV0Apa7YD1ODzbadyErTpCxd3WUiBK/YjMsHn20/h9JLdAyH/yOSm SxfqSg/Y2MTFejNyA3z7axR2TkmvSUaLyjIPbm4nB6coTg9CUhILvt7DLZNM69Rtf79IBmwzAtIk egPDEiS+NSt5KiBOdtK0njBBs0nlNFfGJtX7ZLOpK0Z30MATtddKKtLP4UJrM27C3+ZBVZCUS1q4 8ZebKw9u9Qmx95zNaRARpHgX3sRSOSswAeMSBymz4BGs4vgKDQxkJ0CEcfS9BkrLK71O+75Gv0PS THcyqYrVnIx64Z5IFp/ddm3kL7luXRY8YArG89S7V5kR0v7WUxbPsjd6g2Ltwx9BLLFM1rOQ+cSG NuoKzQXjryTZOD8+/vvw+M3Lb+Xx32t10DOj12+yZ8Z9QC0e7ppbOJ8ECmIpkKEquGY29vxZWjSY KfJdtkglexVLNJkFJ6mtk40WwTylvNBS8HOSA0UsJCIRGNEfnzRYETICyupSiR/+L+po3An+4LVB ISSwZr2Bk9T132l1YGjwF5lXK94kCBVvUoUxLZX8I/SuXX8eKV3blLxXvNBTrXAVU3Zvcissx96L 4ZgRx+9nji9rrQzw+ZCRcomGwiXgwU5xVjd+BOAgfRdSemk3K8WJqLmKTWF4YhuZwVhkAlZxJ6mK 4NYZBcEc+x1feeN3ZC5F8sEFGo+TBbmUmqF5PJsz9XpNlPT3naSk/05rLmF1fPpKmuwo5Dz9+1fS LCex9Z4JTa9thnkG6d5Q4pXTSnmRmLnsSpOMxAsof785YMqfuM9deLOZDW5PkoB7wpCTZ5b8aKPi sqDIpzSSYUsXlA5A2fLyA7Na5nncd8hrrt9tJWgzzoistjPyPhz6LJhfAtWfvZuvrpkn4N/XHjkH kmF/GleppEky3MSkZkU5tpCjTaqDEjM1u6tkukNvjHpRnxoN9DwVLvR7DooDKgOnnzTLOQfGMQMw BJbGlEOU6xuigyU65CwNjo6tQPfZqcbKsQy5CDIu/JvBusiVIc0bG90DD09dGCa49slqFupNbKqb qQonkuxSG9PtpuwAJReoqiIQcHm+eibe/PT6NZFVWUQ1ZZg3xsyl+pjHXg7TBTLNWnqW3IAam7bC hSLxYPjdPq/0AAlkZdDuVR1THl5+GZN0IlzNx+7SY1prtea3kdoibLDwryk3JJFW2idW22Ak58HT 2LfEZAdTW/pp7L1nlrJpqXfwCgf4yOfPEF0DfwNm7e33bw8vfvhnCnfID6fjVJtAZ51Go4G/GBRp a9jhuYkkX3JG8ha+q11x/h35Q/Em0MYQoad0TqZLkM8qUDSrpj8jcUmG11roL+GyflYp0cJmnFmm l3VXD4uYvyw/J0FzSNwvz56PfWSZTPgktR8pXmNTnrOoop3tRE4TpX+iBGruCAN6mYEQsBIlsj1m LhXoQbqUu00ymr7ePaRBV3cL7I6Y+UXoIwhJwS5bMXBNqsTZoAsvIQDvyxRKyusAcrQaX3Nayl4G cvlGi2jTxjmuZx2tEk0782hdve+SixdLFAb9Bp4wTqOZZMXvQO4oskByt0u3xfE4CPEyNrvVMMwY QifY8i8VvkTgEB9J5j0BIEhylsXbkXcbsIVmqOzt2MniYza+QX6cj1HxdxnVwG0Pms2J0++0GvX6 YDoddVqtXmfczUY1yG8pDmiQXwYRB/AFeVD80ckLZsAcEActEKzioDVGI9W5CBbu/6KBye2CjDUB Yyfe0vVnLNBE2913c+CFUAcS+RMvjkzAhHFXyHgmKV9Z9ZNcpuxFJAuT+Mt0iV+EwTLAqkyap7Cm 5GisHExpFFKyultB60Ng0023vLUeTTA4WU1vLPkLux9deNeLPYoC4isvLqOO2ZXNGyQumXV/LCl+ fprFzsJoMqO1RSSO9nue1xtN+91us17vTTzPG7uNdtsSeaOwsRhNC4sxplLYjeZACU1hCbwjlFWc LwHUu/zitffemyGnPH7nxZYkKR+1XamlUz8PyRgbvkE7l7f2txcwIJiV2G3WW07d2d39PPGfbPG/ mrXDyaSm0RnjfWkHTa/Gxvo1OAJr5O2k9ATbxv9qdXvdTjr+V9fpPMT/+hwPxf9yJq7jtkbuaNB2 281up+E0Rp1ua9Tudr3upDcadFuTcbfv/jXxv5oY/wsw0iCwcJrGGFlVgTLIxQFRMhv86xdUd5FI 8vDtSZVDbzCpRUYvG3PjkRuO/CW6Yj6STpx+HQ5k/HVXHULROPQXS4x1RK6T7/0JR+LgkEizGdzO ZXCwEkGJ/hStTtOM7JV6ygb5+lOIbpvbKRfdC0N6NTGkVysd0qvVb6ZDerW6ZUN63UPspTjcUr3u ut3RqDseNTwLl3KfsZfaZEnTZjEjnt21+3o0I6A5oO9Wc1iDSf3qOTIVMWMEzOUSbrmR5IjiD+gt D0geHVDsK4ocgmVkzKgmrHunC8O/Q8yoGkYPu2vMqNo9x4yqGTGjasTU2fi03Rrql1X0s3sIglKT t7cNY0atiXtSGDPqy4l+smWcnNrHp8hy/wvEjHKaDt9oO9JmLkqF0vnEgV9sYTri+0Cx1RtbnCA2 Gh4hiAICiDPwp5vFlRGfLB4L11nXVs4Qtg/mkh3CuraMIWwaCUY73ZS9MNnmWiISDOFsm7R7TqvB V5R1AVGSAnUjqIk17ohhCm5cTDOhQ7Jl7JaeqM2oCnIkSsRYsUYciWM+rIk4QmDo9ii6SAf9/7sp QKR32q4tRonV3HSL3SeMPffJo48ozRH3hwJ5Bdy4jvz2TA6KI72QhA+Guy+lVTPT2o9OZJ4M/6sV H9o2V8aRPNEct8k/r8i/xRWhe8PHmMEYP5pOHlGYR64/FY8oHpsPy/qISHi4gg5PF978Qr2nJdzH YKKaJQ9GSxcOLXR15kC8Kw4jSSKNdEU8lxT1Vw1wUA5/WY+tIpSIl68LFSmKNIYe+deL2S1yDVQE TeQ4XGUOyrx6mYcuJANVwVr1/BXhNpFpBUVbTZi7vxyiJ/Jy6M+ngQXJ8hBWdcnN6bMgRg9a7HfA X5PRpByK+Jt48eqcDJKGr14OL84O35yfHL+5EN+a7zPNTOtTbGY6yXxJTQAKpd5shFjvYRuslOea iVzvFXblr8rP+ctCZOI9Lkz2NP3MK6Gh/LMVzO8Jzu/vAdAvldM7t/JNZOozeJdY4tUkdnB0Ox9z BxQ3JpjXfvdCgMwUP5jBEKfoY4Jt0iqis7gbRXEMWPY1lL6OSI3RpxDuzGNY2rr49ddfFf2HTQh7 dRJgbGG6MoTStghFrgAwUeOYslfkkUhF/6YHfEaUn4M0ylOAO5ZcuDFTuc1hgtHSu6YLfDzxzHjc 2Y17G6k2GzQYcxnrYu9Izl12JdGYmkujMjHWKMlW7vU+9MIEaJxs5Z0Xzj3eC9RS3Eh9X24FwNHU TkjIftP7QKJ6vK4Ss/lCESK3oM6QXEPcDJMVcwuqaow2Mm4G9qFtITKb4qvkrpAt7SwuEVWGbLY8 JGQnIxKj/Vhfu7gcElbuZcjWPrbPDls0DA4LSxopXOlzjUu8J6bIQWN0b3+JET3fBIiJeO31lxLv VG3pEOuulsE1MhiARLcCrit0UNdlqQP6qWyvkye3okBFMVIkjcoGSeE9SMiViJJSSbmM6yN/f5+h 9TEHtmg8QiU+ZnDAoF+ppVJrG2sdsvRMrSeb3xFmXwGn7YUUEBCxROK7EvnVJdhCzSaZmrcEoaw5 csTsmiJHs37s5tHHGmnuzMJmZBGKwCj7kziVi9vJThUoZG9jG8RUBx+t007OOnZT5b1rxqxDIao7 53jCcWwPVAGo0BMq0KyM3FdpDlokUNoygF8t4UmwVt3FIpw8FrqWZaFrVha6lsdC1z4awokvMoBf e9CgcDe9wZpIQMV3YWkvlAKODuIk7ErrWib+QyWfTt13KCd5j8ZJvHWXV2+APOmgG/tEqDjAzYBi 4w/61V7jbgAqF54JWCeBjStOCeiSqzhURgvUUkdRMPZd7VcDJdB8wUvG0q7LcPd5N8+1chI+mMlW DUOcwogMe7ZR7LX1VB/fMthFyD7g9pBh2fO9HG03o/RJYo7/bhfSraIPRiPuXJa82+0tlKDGEkYN AAXdJP+OYZJ4nyE71q82vjtmOWwbTh8I9tv+J+EEcvaYmk8hI5A5OQmTUmudv0q0SFhkEsRThxGS Cbk6uAsYubVwzsIRGD2S88brT4ues9K2pZYtF7BAu3lO9srxnydKReRsn4njkzcXZ/vqph/Ml/58 pSC4bt1LLHz+yqNSl5bn60g8iqf+yFUGWOLr31dVFa3/61UKP7IIUi3cHgagFSYxT7lhnL2KqvMS OBPF8im3LURPIR2rUXCkGFOTwcmIjvEtHxxdiozbc9bFkVt/bqS46fsLwFTbsR3AxSfw+iPYhiXc K6xF7jm87iDuNshapofhiBqtu0HURhj14Usyi09/+K7VEJi34lQIqt04r8gG8d48JVyRJ19hMLZ7 O6TXH68lQqAVhjczPyfjmhUGL8t+LD5qLfvnEx2mBZtl7YGavctYIpitPXF3EkxfuSMYFrKAP0wf 0FJ9LFW56oi612Nbx9rmA/smiVOJE3s9vmxwYOt+4agWjx8L6+mcPpwTFb9KLlnivJeSI9z7UEdP TEz8CUksYcWpQ7SRiFbXHgVZn3nXLD2FYtE73QAZdKi/Diz8REPxEmphjt+cnr890hyFMRibHIto TjlZVklhVjzOT8LMJHfeZ+VleKWTzIx1M6f3zIbcy26+vs84Vu4lfCC15NNSR9mgf3zO1AUabajz CtWqiBhspS79Jir3F06wck/hBLEdbowE9WR7F/H0UVEgZYjKuB6wWKoTsL2aoToIvevgvZwhVv2b PpyzS18maqCxgvcTWi89nHW6ZAtvjBdlzRV3HbQXq/S7Kp/U5hbgsX49azKxNvaT4vJIl5Hgu2iY sRoHLjXkm043G8UDxvqZC63fAcRlvEPOkJU0z5810KU8hBUg0qWcMAzlD90e91mRFOt/4iZrjs5W mIzdFw82j9vdLqBg0ogiEy4raayyW9papSBeFovrkmPkoFgUXr0/SPmW3rUvKzE18PppopQRKTxX dlk+UB5fPIjkl6qjBPsphVemkgyJdW+x+FSUoKYjKgNYh1Z/6yhBW4Vmy9+e1Izefr8wy4OTYMId b0+7bj4x9o12jGUaJfdKNrTdHbdK2dBy6VBEoeFInhcrTtxLPLg0MhZHhLMgviHUMvaMfJs/Lf5c qgfJWhlbrIRSeUcGY7uH4HP37lxn+NPV686o67RH08ak3/wUznUtp+oAbYYfvR5Zfd+z81wJ17na Rq5zBykyEptr4TBIZoJcJnxaxrYkho0D0RPVo4eBMhLN4W9/h2VQ6YPFoXiEdmlxC4+qOCd1lyHD Mpk+1Y38MVqiYRt7+5J9N/S0VcnOWds0W7KZs6UbizXNZrPK0sloOj2On1+9BKpmn/VTtvQhZogA h5fv8JpS6pFyk539oIOVsshPtJOErm098TeL3ZMagHinRrGzmjO7asgzpFSCpVJS2PQR33MNDsGQ Cb1AjZGJys6OxbgpO76nhr3TF575ugjUDxmwv4QM2HIg0piW61E0RcF2thi2wkVzUqm8OHhiM6CD iyFSWjJHlXcPKcRG9JwT4ZWrqPZ7Gqul8XIa4Z8amTY38kaubeeNXPlP3iCpKhHSPExrt7cH/9bt oulXL1H6pr+T3cpXaLiyL/78U/xPLIEpaOPnTCPvdSv7uAKF09rWRnenlJluXDjhiFE8pC0NVHfK 2ajGvePLu9gE/gs4olesTWxyQTdkhkmPDcs0Nrl9FSHBNjeheERInlTdbYPi2ee3Yay43CFZorNV KdaYjFf26SIIGEED6nVvOuiNO17P7Y4/ZQSBDkcQ6Mggdcv8gAHp097CZ9lZ23sOLWDz/2/VgNmp wTFVm3s3NXl5PHx7UvPntdALQjjcpDZpnO/0bzzF/v/dXrOd9v9vtxvNB///z/GQ/3934rpjr+c1 uuOuM3BG/UmnPYI7a3fS6Q0GrtftNz1Y78Zf4//fQv//n6T+Cs0zJfMEGIm8TRojd9nnvl6vH4Qe arroAnQgZekHqeJCuc23B7H7vem07TALp73im41u2iu+2S/tFl9mRKNNa0iCN3F7o4nTajrjUb3e 8KadbmvQ7gBvmeswX6btrPd8mVoUM4pMNQdsyWo6npsNRLNgmfJLT3yeu4vRyp+h7zpy1xQSDdnb c/jwAj/gLy+98Zk3pRsesbdZ53cY2PUl+bhXrB9ZqPKolN+8+hD5c7iJWJ3qcchLwBLlne+0HBLi wupIb+PU3e+M4cfU+2K1AD7JnxzPMQ3lETv9n0x2xsH1KBj7E76BaVBMvNHq8lJlmfqY29ZT9u8X P+c4VJH1DL2Ulzs4PsbvZLtpOc/Fr2+gyfCWjioy244v9nxPqjnEYcQ3QspQSnfl9V7yOC+6LPI9 MeAAzXWYGw0sEA0jS94T7givAnjZh7uIN+HgTx8T45Su6eJd7ca9hU1cIzjJrS2gn5BlJcrNSIsG IpswLAHmE6isumJR8K+vg8szb/x2Ge7MojkqBhIVjrjTJ9x55jO0JZ4sP8xRsWFOQd0DU1E2I3Ub pG7Pvcs3AUazxFCZaYQwR6rCWTbbXYqu3WzJMF0JH+VE9eMP3ni19E7mdAl3meTJ+8L8OrqMquL8 CrPQmiV+9HbzW6QQSz9610F4+9q/hstn4qt4Eo7STtOJAudeyL6DMKls1aqwgrVci7xGpRs1EjcC UqorZcGqa0k518i5BBQ3oKaBMX2TRc/YJJNrRNvNIoF6knnXGAZDRBRLziJnEpZK+QuQGPlWA4cT nS/NFkDDt1zxhhxSloLCr+KJbZD01TJGEya5cEnHLEh14E6AYXI3uxwmTd3xQv5kHgxRNTdclAL6 zHPnq8X97CQVHXKTrWlY0e5IecyHOdp3L5CqSOvTVnuA4cBbbQ53k2zpcAZ3TuiVUrSgsoy5ktrz 0e0Q28JY88MPPnpESCJF4nqXxGUnk6c5NeAXwTGaZSxxWSZYLUdkacef0h9IrydV1+qL8c58u/Bn s4sPc6nR5iAl7T5FfGi2W2y3bKPlJLLbAL7orwUnKubkpa7w0KWYqwC02vN5iFON6G2lolNXya9w 8w19L/oNPv6TZXCm1521lBR6GwI7Li5yiiN9MKJoSkD0ugyInnN/gDDUqJEi+jLVA7kEM+lUmtT8 Ywf74L1QS5dLUWFZsioe58GTN/D2bUjyYOyiHXs5RYZ3YiC3Gl0ZX+RegVwWwGsgDJziUFKcTGEL iGTxxHlmB0UM9mKIZSG7FrRST41jkWzmMzFBgdEQ/V2HcGlEb9c9yxlfFfNg4sm4L62BwwvT7+Yv zBvgl9cujCxLIS3xLHGXOhWKXA0z5m44qj0nxcsLUrZUngmc6C28/DBnMqbTea1bjrgiIK78QwN+ 2wY2Q/ak4US0IiEZGk7coq8s9jfRKEk2A2idqz1i260GnjlOuynFeza4vgLEjq5s/MB2VJetNwoo L+s+CMdj6XpRjdiC3qrDycX7fTb+sCgRijYLp6fTaYYBrJ4nronZR3PIa//yasl5pB4B4/HOmzxS SkTKCPMEcZpt8eQytFpwR8FId/BL23L4/+pPfnCjF27koWAgugqsWyJx4IsPxCbADtgwkp8Klnc8 RxNqGvXJqdaFcl7b3+OQdUZqNTuhw8tt+N7K8RJ7H/0uPaRx9b7CvRmzGIgChDHxa8AyvlYdBfMl wJH4oj38PuYXVWzxabKSZE2i3/E95jzXMcJTZb7j4Vg6RVZNd8Vvy/Rk+ma/8inQj4zqFi1ZJ8cL JvaWwYLVrxinZzX6gMomlAl47324l+8RH0UBt2H7cmo7Rp1Ok6xdW52GjZna7iIJaM30HMUHOzAa 5BcxT4R8fb2iWI30WRIX/qyMIjTvtP5Gj6IS2KR8j5IMEiIG8FE4ZW+SeskANkg1Q6GDEjmAQqt3 n1CQPio7C3d5lUyeoc3QkuRqxxJYQZGnPDpj0BRq9dfXeDBdBACSPQZu7fksmrP9gwJVVdy4s6FK 7qE0aBIYvT5GAQSgdKVg7r6gkfbkk0fUenc9myMEyrSy7kcCYc0+ClnaLBXeGmgoi+B4W1jLYHcM V8Wz49Ozl8dn5LIIP8hj0SipY7npNKiFchPNp0odtr6Il6ulRx7LOnbkpiJhOyCEWnLklPh7iolA 62qj3bHkrKQDhsSBLnO9rU6/f58bgvYdUoPpzL2MxJ/PxNkL+D48OR+eH5+dHL4++cfxyzjbT2Jz FGyNtRvDTJvV6jptiuPR6gy6MgnUvcwuky30vkVopeRnGjVzZGfx98JWKDFposRLODlUqWCO5wjC Pq/I1SQ0qO7vcaSFnAr7LEAoZgIQRnxooqycxoDJWXKHuS/ioxVPVJnU9zFXhTNf4r76aRuiHB4h mqyvs9s+hlnqfJr5c9PblYDPcrgS/ZnZTNWu5uM+zkHS6rYo/CUgdcvC+W2PcyohaIr8Hf1w+Ob7 4+HL49fHF8ffril18ubi+OzN4evh+dvjI/gLtvjFt9I0mXBae3CyB2b2ChvLGYPZZLlaxOcBVJp7 N/BKVmNEg1Iz8qaUsqJWtwMXE+SMu61Otdu5XwDtEGZXKB/KzJvLkchjgO5T5CxGjLBKDevNg9Xl Fbs16kTfG2A9PORT8MxIshwjOWZ3XbvP9ODiiwa5ywF5kFLCiXBHwft4fBtvNaIxsDnqBkObZWHY zkcRatxM9i1hjF5zOXQ+8HJL3kLilNqk5HYtHjPewKGDmKSb/8FzF4RbKEzeVzBhyFae2Utp+Cd7 SHRQXw71WxxZumF+nXIGsAIjOe6kqD5vEmtbXTNWjb4awIzYhQDmXfgJAZzoQA9ajizdsNqJ6wGc HPc9AXjNWBWA8UeceJnfFNDRH4/Pzw+/P15LOpkGLkJv6n8Yqp23DKFvfX5g6Tow0nUuhfTC0VuK iZlZvyIyFa8xGCNc2Pi7IoMMMByAQYLO+VqxCYkT90TivmgiZ6qjyhO8gyfK9/vKk4sk2MRCucbS ONR0krvUWNRqYnnU+qR2prl0iZZyEEkxqTAho6t048anEqAqGvO6yrnDNEGfHKkNzBLZy8O5cLvc M+Rl0wboC3tP91dYuMTyFE/VhuNbL56eqdnousmKjensyZuf4Qb68vDi5PRNSWJL5k6a1sppWmw9 aGT74gnXTQydLabmvmk9kiLJcS+aQpZlGf9lqOkahGcoJYBUNeCSRm4TYrXPRqk3QmzbjBL9JWa3 OS6ru9ebw7fnP5zqixcjr9QD7KAt4VM7kksEhAIiRSwiWVtLi3rtRrWHtge9hlNtF8iLtr1lMeQT Gop9dB2DgdSefxjPl2lOJKcoSsbH0upPofT9XtHuZb99+t32+XiX7L7GpYiPQolLiXtC+kg0y6wf Z2H7xuUmxh4pfLdecGQpf6HlcPHECxAy78pTUEXW+Lj+mmGMyXZvKR5WBgJyU6wHAhbcBA6q4c1A offoZtBQg9sAIPH4NqWuF2c/vTk6vDhOElWtYSqkqLCxMZsv2mWr5NWnJy85NI+0DcNEyjM+ErQd SJLHOPVpHgmyrGrX51Dbn8hoIZKFSDAP/x9LpmrrGA0NRQaijpuRIUyfk4huxFikZ5Dp7U7sBIpy j07fvDo5+3Ez+e/hi1Mp/i1T5ej0xx8P37wcnrwsXeXip7evj4+wQsW+LvchfGQEtalO0IDA9WHH YoTnW85w7WPo86U715FHNMhZSqwUEabeH+0L4hiDtfz4gmuUlISzSOU5qiDqjUzjA7Nryv2QeKGM GFgjH8FOHKpB0U+5kfJ0cvTxgML/bRz6L0GBVKfGCP5m/vGtDveXDdROO7ZIt0wFikLscXgtX8bB //XkZRxKT56BpNBEWxnmXT7a10vGX6yRvQ/8A5T77563kGnP9dn0TQSdzYHnn0VzGRZ8giZp5ITi ueMr5ZYBJDvyKOI+N4ZgA+wNOJJcgQmzuAnCdxhaLuQwMHUh9n7RSaGYme83m2RH3Os071mjxJsA UZLAFs/1O03A4C+SNqcKPDMLMHrJQDtJVV5dmsM8iytIjVmsBI4T4JDmXwYfgG2xWC3FYra69LW3 SyRNTmArVzkEIewblS6rrsyv2o1ut+o0AWSDQRt9RtIwY1Ahe2BT9Rk6V1ODjMV37Wu5tfdCKdcF fVzY9ceWCuTbw9yPthmUVjexoQ7Ziyv/G6shEKMo/fFU+U4h90T2QDIuF8VIQUZKLr/EkxAaQzz5 Spuvx65GRLWTxRVa5RTnRR00aVHbDWcgo7zdz2Lg6GV8Kw2t74Af+yCtYaOhPx9Kc8DHjyWQMVha DMHYFFImJHInLzgictr+xKa0rykjSoIs21dULNlgpF06F9BWojkWTYg0RhgboU5KWhuBYb/QiNGI vyXnxRFcCeKOA4QHEw03Wj0Z1u2eIJ7LyE4wmvceGf+IH2/PYifL81mwrApF3RPGtLGzDu0rRk8V FVxHS+I2T4dnL0/fvP5v8ad4+/3wxcmbw7P/ljfY91vU4x4PMHImcMfhNbv6wqG6VKJp6SqIASp0 eFG4WExdf7YKNdvMeymRS0ZxxgovMoGB35zqHEBY5n1BGUNy+sR0hChITsSZUyRoKdEIXaB0BGLm USkYvLK9lKPc19EIhTGuz2ZvFmOGNjyraRsASryss3+orG4y0hbyWZgBjmMvufpspxjuGMPWCFUl m4G7z4qDgHHkH2yijhnoMIoqDhR5rJCy+8IPOOUnGPbtG1h4jh0mm9FxcDEQLK4Evz/It15LXPjW Msk1gySZqUg0CU9worF505qWjZIpBK6KfF747PjwpdxycUYze3ZFYKD8pQxwGhmxVaWPPUZHIz9a 1QrDjv84sFsbYiwb7ZyGE08ZGq4ZuFkyTmwao5cAeMmFI3PkGOoqMHaBE6G2Kowd73JPga/0MaGP eNyllTjc4B8pe/snfBHI0ACmXgRc3lsjT3sa1NUBkaYECUJAdCA2wdZz/i4nX0Rt7aav5e35UGcO CRmOIz5t2JwaWyEqoLa9ZVBfrTV8+yvGTGW+xpBu0RJ/BSz6esXRw+K7TbyJ41fSrXl/7aT21S0w fdZUngmTX8Ei2wlx1lIqPWgVw7dgvGjFZ95/n24/rjWkLyZihoPAWtmYUS0hM6jdgWjGX9ZSz1qW wnypu20z8Pxrbr69DSe50W7UTEvwrqqYCcpNJhkU7QWG3ng3inbjyUlJXBYhHJKhbMKf1+RNhlmZ PEYj52AyxMeSq4iPHuVAFSd2pE/y9tZsONVmB+8SvX61lRVjbH+XwCyJwfw93CYTAKH8AfMaEQye K4pv0vOnpL//u/JWBC841AJqEBkM6OKbSChBRiTwgsx+OjUKlY9RgtwZBsS/vBKP8PykdOETbzxz pZNe+KSKjB75AeoUBRRJ1qVG4I7pYiTIb1TmviqqAUhOuRSRO6Ur2nUQLbNpArANEthRQyRmIjMk 7MGb1JSsDKpEKx8v9bfC5aCTHI6Fwg4L3kB1lTd5LmthYvNpsJpPlJ+bFmvHKTqQ73alA5QRnwUA iI1hLPp19vd3jKCgwyfgkLWQJDdwwp0N6OMSHKZTRixYHzRlt6RpvMqKqOKp3vWOwreTXZkoYtsr ink54bYUl808dmpJZTiI2Gx2LmWh605FvX6PJWD3VW4KxVNzain1VcXtfZF1NTE9TSo7kiBxKhMk UNrHOTGY772lpnZSKQtdj4PFrUJhgjrRSqmsUl4DGfeFYjcCJOopzWu+Bq6S01m9vMsCTEOfCVD3 vT/BwErREooye5/n08CEu9WodhpAuB2nv1bs9sX4MyCmJHVwizobW888ZjGkPESFbaYv7KqwF9sZ 86bcrz1fDsmKuab1yNaWxTNJnNKYpdwm+CRVXdVIphxMdXc/UHrphIGXWjlpwpy2cnycNxRt/83Z zrRFYqE5eDlrcB4VRriinSjPnDBOGUfZibEectJqwGsGKm2z7RBU4CPSkrusNrAx0PgoXEbebJoG YLlhSTDqpUsDTL3n19JEIh9LrDuIg/SQQEdd/0UuLrNdewqXYd6YpJIHK3X2yAOPvAwT8JWGQ3oD pDXyj9UH2azhXZXADwAO7pH9LK5JJnk/d/uoyXwB20cN5YvfPqmBbr99NCbdy/axD+tetk+MJZtt n9ioooxHB595fbisoKrJaQ5kzqn7OvMsTiGmIRIxYtKXII2rCfN7aQZW2ny9ksGKLK+Wa9/PaWuU lUqOKf/6SA6m0oY3lMU1wYZYhr+AnHiyYonJrfc/2En4HySnLLWVOY38Znro1ITzT5T2fvM/jW8K 3S1Si256NxRSqawTw6fAhbLOBDtiE0xRE9wCVcr5UuRhj3JYSNPze3fQ2BALs44U62YaQ9hiM0bU q9UAojVA6tXpVFvN+6VeO+uitSSN5Evj+HrfAsbyRPObQrzYwn/HtPAvBPOWlv40X23pD+wgG/tX zNc4eKE/JX0D4AQ0XxvWrdKMVNbDO4yqFIsV1u95Wd1uqp0GSMrFxiwqKnKD5Vn7yo60p0Bx6T1d XNoHAw/a0M6fa/qoyy6KC6su6skehIWMKV8LKw37hxcGqeBFiY0gV7DIf8PcFLK4SeHVvNMlihdP EWRZnEzVEUuSIaaeqMzxe7HBsKxhOpGmGi6BWWa32bMjlpfnIFxi5GxWLp4lGsXUsPpP9idJVBoH C59soNDELGlsyySTIlcCxRw0q4P7I5jcEVv9WuRNZ/SBNGOJ467QiDx10imj6CLDaVkTzexjY/Vy K5exWE4fT8WdJCvmsgYpA2kKzyUN5i1r1WtggKx2sykzyt3n6ZaBiGEqOI6lambKSaV8uILrnrww baCA0ClbC4P67lbyrzyWKeZIwCsoME3cSnG86nzICgIq9msk9OFFq9mS5bNrzhTZQU4cAr3HK6YA TtapS6Eb9sI9WvbQpqIBKVK2yAW0pPUxd6ZFAGvmkGh0g2u9mlT6Bm/HAYIqV8jOwnpNX7c0tt5j EMYrs1sxVHq87B+N9HW/hJgQOySt0os4I5K2Qd/bZ+0UpSCLksmNvQ8Lb0w+JNfofkPtYfI6Uh2j EkppcOMkyicqs5qGbyQWbhRJvZYOI10l0/Y4rDTvvQlaE1JKWIzGj4bD4nc4so0eqTfsBacfNw4E NqDRLIMZRuDHqJBR5M8vqS3C1uRG5nyy9hXIseMtjpWdDZTN+zljcWom9OYs4yp5OEPzf1cYqzCe dp0zEJI2ccGpBfzrxcyf+p5U+Ch7RlTDxAAdebPgJtYDySsyHejPmT+TGhvTCsqS8UpNP86Ju6+M dLSSx1D80MRhxsZIDJU52VnJUHNsXYY4Q8ncg/q7OuXC88aej+5VGJJxdmsiAHQzZohJlCJUk63o /ur84iAzMLIOTg1TK5/INCtp1kALW2TVQAU+iVGDPJZjmwaRMCTieH0kidNGHYmJ/cEAFt/77yl7 hsvIyl4j8xrCtGqsyjWmARl5+husQyCzCCYXkmz6ZddmXvgzSnovMMaqOlOlpbZy2ZMrhgrrmKmV SmjiG/qDNvENfUeGJz5cLGa3rzk3zI9AxADFyeL3h4vDF8AUICEc+xNJF4GbYaakin5F0VLqnqeY 8E4a3OcYYotEatEE/u/EATQz21jsyKGdeeT+IkdIp/Y1XQJ5WoNGi6fV7DLrep/TshvsrjXX3SY4 5FaBIS12Uq9Pvz85gsv3j4dv3568+T5ptamDQ8Ym/xRmcVeFb2sPnE7VIXi2HanuvF+AApMB9HTv 8Tvvtioadv2tyofzd+9Wu0grGQpugWseRSSWFETWVNLHiU3hlrCJp5oNblnT4ZBs52Byj6+Nu2Yu pkpBZL4HViXZfPZ00BhQvsOKltfGTT9/Ji/0n89sLmOYrqzGTLt0i8kcWQrjch+fvjJOmfwCSSVH oclrAdyomRQMeEf0enQ37g969083WZrG5tM4aLv/Is6ArKczEcEzsUXvlWixuVMB1crJV/jw3O9j y//YLsz/OBu74yuvZOpHeorzP7Za3UYrlf+x1Wq0H/I/fo6H8j9Om+NBYzRoueN+q9HptCf9kTMZ T3uNltdojZqTSXvQGTWc9l+T/7G9Lv+jxkiZ+tFMVsj5+JBlfe8vbw/ibMn1sfhTCNHFaDrZCtTi Qdy0yhIJaKqzRKZSRcqOZSZA2Y7R35XQD3bcxI5bRAGjOLtkv51OLtktnVuyaKqjsiVlLsl+b+x0 RoNxd9qq1+GY6jrNRs/x2vm5JIvazOaQLCqNR2O3RaH68YdDajbJ51x6ksnxg71f4Ocx1jk5FTf7 WnOUYMBeU4Az5Lw4UADrizhdNp6TwBg9OpPxR+DApUAJj56a537F2uzR4dEPqI46uSBujsMwZJo9 QuRBfhv5rUcsFS7brBxucbtqvJWdjDFGsZ+DHQ4piUoSEGvwLrNjbAueLiSxrd2aOu0xUP1Jt15v dFtus9X1Og13HbZlmstDtExBxLEeZWuGf9P5SRnXMllJibE7kD9felN/nk4ZqssEN5E3XsHvt1ul HJ3JXKW2pKPZT3IvhaF7q/KNNvvEWDZVRHszQ9vh8vgUSCymaB+OdbY33gI6Fk+VRWJ+hNlHfdNo AKomVVvXt/AKmdDMF8zYNl/S1/04TRw1PAvcyVCtx9AHVCYmhFPIR1cy1Vti3ATa9XVq2Trw//Ue s8gsCGT+GeXYguSxr05eHwPjjAnyKjnVcwSL+a3y5dJsDbUSIdrz75nsuoI4ekZrnp7ewKJgylEF e6GWhKfK6djn7nIZqWG8gg5ekrjncgjvQ3+0wiRP+GskXf07A8r6UYGffc5iBKw5BSagJkLXp2xU MTYk7xbwu7xdGIu5W2o12UkAIc2BDkg7X0Z8w7IfbBTbxO5TMiA9XEHQjEyZz2weVOXEOx0UOsDM Oz2ZCaHcsDEu4CKEBqd75iD0hdl8Cec1XGYOvo6Us7TA9RgBPX5Lvu5JEo/AeHP447G8PU9RSqeS F9L9LNmf9o4fnul4N1iHMw/iHY6cT9G9PnnNSzaT66cvs1Aoj3KpmZBiQ1FejJTozipOSh+fGSFS xYgeo301+KxQ6yVkuqnYbZkIqiD3IfTAuEEBDl41PVRmcFvu/FbKcq5j7RE3J/UmLGBwgaKSUwIm Cl5eheiI9JT9NBiZeg3eRT0p8CyJSnNo2KOCKJKRf9G8vChOCInOEZgUlwSwMn6NuHYvYb/NV9fA TwugINdw/fJh34r3XhihTwELpmgRSZT0mGpUhaMxlV4AigKhMwQX/NYqAsiIiajBZD1LS4A8lwGp AwAoU5rkUxkMh2cBVbI74cfD70+Ocioz0PttBvqgsRHQpVPRlRsNAR2G89VsFgv+OGaHNqFStNf0 uwJMvlxeSbnfnIo+ExLGdHzEECYrbcEHSVy2CKbUgFGblfikFKDaMXTpaxybJC4ShxXpArtE6V66 DacpMzmXBRIUYeOA6DdAMkLRSuWf7FfFMNkXMq+XPt0IggC2eTWGoKbGOnu24bTPUKNjBYBGc5fI SKH3bYnpkvCiqlhW10FYWLBNDo5yiGdXV9oSwHmZGVzukmaWYv1os6trW8+84cNoaYSwBHiy46k+ nrlRlFqHNGixzh3Ay9XLghgq1J6HhGCMPVj9qUTGVrPabCEyAq/RbG2CjIziatYxL4O/QT9sIQA7 9BD+3lNjgI9w+OjQMVsu6T2tqZUCcuNoRQFVDi8uzk5e/HRxDNTv1+OXw7eHZxfD85N/HOc2kJwV wiJ3ndfNgitnVjlvmRPEE1NZYf3ac/gXXkqCqtNpZLYdS4PFtbe8CiYiWnhjfwqnwNT3ZpMvdP/F K/VcskOMkgrXggVHLH2W2YvJzWgW3nqxMu2UWrcktv18eIa4lR5TLrZShlQXNuit5EWkrrfb6Hcx 7hvsagwa5myyq3d2khwPubbvyuBZc7Lp1DgD2575vYRz0Ze3pxNYQSNWnjSmq2MJJInr3hlPzKbK b/EDTLv5AWMxkvXP3J0pQ6BI+arz1Go1EXkeGeUN0YlXrxDhh+P0yKm16zRb+Msm+IF3ihMc/OH1 WbBa+nMPwbOfjyXvgTMGDg1Y+mAxda/92S3HF/6y0UWPFZAEL/xP9m0+G7SKY5yuDW1UG1sjS9xA eRSJiYeegPq13BqNAZ9uF96/xiKpwd5plWQjd1gm3cI26xTPQf9eZqVkTFAMcDL2JsjDf9krBm/V kOnCcvlWD3ybZZNtbb1ouv7mSxZPQ/5WZrnGwUxebL7sZWKmZD6Jx3uHvWW2s/VKJRvZfLlSkzH/ TAQGnWOIEevaQRXmxdAicuX9C6yeHC4sHRAUp7vt4nEzd1k51cJWy6ZnoX+X11an52AqaGBgej2Z E7ocA0M9oMhuzydZnvDFd+pKDL16MxLWw+tKJRE3dNuVvq+lzoVW5g6k0z+YJ4y8Sfzmk7AIrWDd DVDCfl8yGs1HkA3uTYn2suiSd6bI/IUfpUq6SaqTbqvV2kj+yNfiBcyR2Fl2M3oFf7EN1iJropmT 75ziVcbs8jj0KXYR5+A6k+OIXqx8cudgfyweebvJI2/3Nxo5mcAZUPn2fuaR0iwo8HbaPMhugzVT yY4Twa5K6QLvqHFCy6gcjRMXIKqeU4K7IWm3WoOBg6Hm4adUvJWcAzS2ms/8+bs9c0D7TznngAx7 7C+F98GPlpG4ObgJg/mlWHghuVGotCpW/ZLZoqlf+mUz/VKymdPh0dnx4YX4E3775ayEpukPFhrh v+j0okP0k+bRn3ghx2dzAWEwypYXhkFYFaPVErU8HIrFhYl7sxlDut3ooIKv0m2jELy7Aaxxy2P7 E28JaLf36IhDsaKDhju/vXFvuVt0bvG+iUQUoEgLvxLM6xytUcSeCYLM/EuqzRJQXKs2I/MQq/G1 0puRbYhwk4ojgCrFDEWIyXQPUn8kANIw26nvhXWBqzB259yQDOpFHuZmWzdX3hzzfyjROuvRZu4t Bm6Wof3qiorwXhC5ih+NcJzBY1PlFdn7Bpd7rw4vDl9XRSbBBa44TfdRlkpxdpQ1ai4rbKWFuLvA QJChj75LAAdUHUXIHGHQP1Qi+uPVzAVmD61r9usSSdtdioPSbXc6UjheGkljOStrr+Icngnl6K2M Tyk5SsOYgbQo2jqe2VXpNKh0V0bppPLFVs3QBpHkNzGgHI1LcjisdTh6fXh+zrltSBK+djj2aqnh kIOZXiutSzBGRO59Sp/MZt8b8HHMxhkjLFRPGBEycjUA8bxtE9dea8V6EKNcvqrBIrcncJUU2ycX MSGk5mlC5+kv4m+5wmjxLZwIcc2CxZf+WyIjG9cfNu02Rhp5EJ3A3WwJVN6ds+VBVdP9a3IMDQBO dW1t4H3AfAo+er35l3MoILc5XCZadBb16ZdNtvkf6vpopELOSMVVEU8lGaKzEt0txwAodAAd3aZE tTpAmWX1DNFxjKc/HB++pd2F0BMVi5xZRvEz6pRDYFu3lY27zQqIY4itkRBbEVgKRuPJZDZ/2hV/ y2nHXVVKdlV2qjZBq3WuSrr4OSar+7rf2RYLKy2zVuK54jmbewIzBLjXqqMn8SEYCxr3t4eMHk8h XDYeTzno2WWHdtIQi8o+Pboku9sGY7TUzTbtPLGbfeJS0lRq1iQUu9O8VW9lJs296Wlr77y05GNf ebV2O40eJXvqdhwl3yp/PZLyH5Ly0K0ammfDj6ykRYfcMeYNX1GnsTROY/iLTmCD6SmAFHZa0Mi+ EUcq6f5mCio28XcrfauQ9wOGcbchYYzCRGej674+8DEE9Wr+DrGVw16ge/2ET3SMgDLTdmkJ4Uht U6Pn3cqd7JxZzGLe3UpLMTe6tdVMcSTGA5Dd8XBsQsK7XwqLzPQqSfFoOl52soE9Bt2+DCYkmRaZ pS/rWlHgRDRaU0C6VIw6vb7X9Ma9Tq9ed6aTRmvsupNxL+tSUdBU7E5RUAgR3hmQLwX+INkWHvMT bwp3qtU1bIs8lxy2/c3/fv7fb46KvmshyFrr4nVyFGHzd08kJyoqUdSI3Wn+i/Futfl/dgr8PzHo 12jlzyYbOIAW+386zabTTvt/dpzWg//n53jI/7MFBGLQ7ozH7XF/NPIG/cG00+p4o6nTGHhOv9EZ OJ3+yOv9Nf6fnWL/TxMjLQ6gYZzo8GDGnvUHRhXxp+hql85a4tkVDktItXdm00l7Z7adst6Z68Yx 2qS0JPKO4wxcpzkZDbx6fez2HVzHiTPN95tb127WgW5dDSL/zQGRf/iR9qUzqyci6mRc5+JycfN2 H7jRLBi/g2/E5U+80erykmIocVpbjOuwqcPdNK+rAk88vG4qfzunLQ/A9kA6hGC8RdTETXS2rj39 Sjyh2WFOmjgXq5DpgHWp0zlmq1DpUwRrYbT2iXhv+jIclw2EI/Va1wtLIJ01EXZCb8l6LKfrDKqw DypOt6lY263nunOvAW/kxOTFd4vM4hhU9sVPJ69fppKKG1nFVc6VuYec+JBZcFasJ1/trk0qXl4x xPOy6YRSI7bog2r/9onLixFhXZ7yYl2QfbmTuqBpdDsfx+GBRt4UxcMh6vGQKqlM5ZymlnMDhW50 JdzpUqk2bzy5t1Ap1MC91erfkYyghCC4xrBgcDH00MFTBO+98AoNkCKgZR4LtxdeiJIFuFTiLK7C YA5H9+xWTFYhRuDjjOserA389Tepy9t0MyEXr/fS4nJIADNiz6zdKbVCLLbh371iGi/w3dCsdj9B ePLhK5v4DBF6zGkT1vYafPZ1yT/PRFoZTLUcyv5hOfxUYrBNzjfLGSbjef9ujQbHc2hSvAmYiwz1 tt0c7vlEM46zzYK42RGlwNVWMMOL2/1H9x0mtQllumAVk/vKxfS13lwFB8QcekAoloHMj4hE7hs8 H8JrlLoq0wHPXdQliFsDMssAWDel3HE7IMeZt5CWZRK4BcSek2JAjX0LoqVjtGlMSYRoUwdDCmGP UEzmzpfnKsVB0cFjtlxkxif7UguHItDibkUqqhmQhqIKygQnnwAXshH2RHEZoy9bbDhScjJy9B2J HN3WnZAD4VMwWQxfnPz6JlgeoYMTMDpwDCoIGhhmdPuJ0Kiup2MEa6cu9+8ZiXRPJjLZOrWgULbY l4A4/UZfIk5/cDfEMYI+jynoCSrPMZBtMvMjp/X7Pc7PkE2PkAB1XTdWV+Hz8wtQ9P2c3AeyuJkA 4fc89NgaI4uGVtThhvhool+JLm3Y+PuXgX4tsqx1+k7zLrwP6aqOTn98Ozw6O2o1j/bGkiSVWpF7 i/D4+ZjIhzCPX8hjk/93C+T/Qehf+vNNoj+ul/87jUZa/t9wHuI/fpaH5P89gHq33+oP+m6v2Rr1 B4Npuzl2+p3RuNudTL1JY9SeNJuTv0b+3y2W/2uMLCn8V+XFn6LfsEv+7cL/Zlr43+nfRfivx7Fe 3q6KKt1uY9wfdceNXq9Zr3fG/fGk1+44bmszsb9utJzMXxfHc69PgdH7rbKh8zLNFZSQHW0TN2+M hyU2Mnzvhj4KvXILLm4nfp5kn7UBFHOoQ4oNNOeg051uCm/RK/4sHvEpDZg0/Hh2mvHSpKwEoysu LocKlDhbnuWQznlys69DWQq4aNYvW/lRLNmAZsqEw/fxV5WXJrbNf/v65Ij16+cXhxfHQ2mbL3Yw +Ew4bjXHO/BDBmTq96oObNoOct5OWfDk8AlkrGqJ7C39s5Ky/TXCEAKBkofodFtKjI6WRm8P35wc xcIPliUzFOiSl1AdGCoA2bLdRcDul/DHfUnZcRhyXM/iwOo8Tot8nab4SeTrKtp6Wv65nVtFJc35 huN1PhhoCYXGJ2iVNF6FIf2KCISE+GASBotIh6NoDghHu812+R2MXVxrKdiNBzz47FYCBH1bXHlB VDKvBXrQREscBltkI3//araKrvbQ2Wo2RCZf3kYSmGVDLVLpIRGNIwzGrxjJaAEs3/A9OyPcB75Z Ec6GcVaU2y68/3qkS2EdZzQuxLs1AJW3vCwKrq+nHEPbgGMDcgxl2XEJHDPpTsAuZQJ6Z/x5dfLG GArNcx1BoiHLUWKdBDGiFw+kKEaJDLQK79AE47tdoyUE7vsazejXp+Q73Y5SGaLsZ7XIRb0/7s5j bJxvZwNGg2vP3GjJO42RnuI1S8uD7qAt3TrXTXUjbYtiNbZRumgmI4/DeO+F/vRWyGONFMKo9w1R lDPXumEYHLuToncmxkaXG84uPM47UDdI+5LTQG6Ol1ypcIrfWZMH5u4HRbhZHpj1vaOk6+j05fHw 5eHF4fDo9Ozsp7cXxy83GwO9+ZoTgv2+So3HSNqV4Rw12UoPslJujMXZzAqHWCk9wg35tFS4V+uG 57ClPQpLUOk5fal7XbetSexrfD5HQiFVxvEZLTku++ZZe7pvkD7JaCsWbMeKlUy7+SmUpBcmnHSr kFIokuE/M5WZTEWJ050D2rMupNfCNK7l6GOcNeBjUQqnP/66/ftxt5adfkx5Egyw9ppMjZRkFg2K 2dzrtsudk4mRGwIKEc3wRNbnorjC6AMUdEFJ7cXXq2qcgfPrVXy40K4hIDGX9kmF95+K63iQ2f/7 PDb5f69A/j8Z4d3XnU+i8jqAYvl/o9VpZez/u53Gg/z/czwk/+8P+tNBdzLquSOn2xk1R7Bcg57X GY1bo063P+o0OqPOYDT9a+T/vWL5fwIjLToA9fXALCj+RGN+SxInm+S/nxb8O62ygn9756P1ZZSF /2jkjafeZDLt1uu99ngwdSbuuNHNF/XbW8vK+O3lSK7bJJl3s5xwfxFEy2u4rXnhweiSbuqFpv1w dm4p2l8vsbd88BfaRr8N3BFmH+0MMjlxdsURyZ9f+uHhfPIzB8ShI5jvdZMRs8cYqnBCuW7wt2WE v8mkLGfeJJCX6/J35PlIXZDZdFGG4kEwWM3zAUS/Od1/SvE7sMsYQabTbMhQ//c1ia35hRwhvjDm tenN2qhqM4D/+fjsHO8U6MyaYwMvb+Acsuft93Dx+D+nZ7KeCmwMr9UbwsHypl7ZAeTI62DF90Xs SABLWRW8/uw9wL8aUrqTraV09e3EdJ/QIj+NAHezyjdhp3UCxA9LJ38OaGWsZL4NUBkTIGxdxtqD VRhzfpBgzo3zRfcrtXn+1XhjG//XL+D/ljfBAi4895j/swEErJfJ/9l78P/8LA/xf51xawJ8XnPa mgwm3qA7no7H007LG01G/f7UbY8c2PzN3uCv4f/6xfyfgZEW7o/J1gEnrr8+iAsDB9jq55p/WPnA QZoPbA7K8oH5wxiVKyf5wcm40ex2u4OW16rXm27DGU+bk3Gzk88P5reY5QnzyyLDMSAXCenguN56 I48DvJ0Dn7AoKHGDcUHnE+Yj78+VU7KCli/X2t7D6Tk99gNxpDblzGOu5uImeIuwoLMjmebwA3JQ HN+BTHPnS87NJ+PL5nqlxCYVJL5SUqGSahY+l2B4wfUCw9lp7SGFNZBC2kTD2l+n1ay20YOz12qj 4vJeZrklyxh6uUzj1s4vFjbx4pfTtz8cnh+X5hPlFAVcixRkt3AotXSrHeFiVlCDMxGY+K9T194P H1hk80vcXxIIjxOoqmXyeo8kFNrG239/OG3LJSfQam3Q07XgTwVA9cQ1cE5Z59exu5InNQyyFkxr SNndW1NerhMzTgLlqCpjK0J9VH8CwL//9fDogqI7UGAkcU0+EeIWlhSzNnrQAtrfBCq+7Db7cb1f 6id3ITWW+nP6jlrg8GD6///nY7v/DQrufx9mweVm1v9r73/djpO2/292HOfh/vc5Hin/7/QHzmDQ 7ra9UW866TWmLbc1ajguLE4HrhmDtuv1nPFfc/8bFN//JEauv/txQbj3dXpa8l/67gfjTV3+Wr0t L39yHIVXLy4jL30dzx1N4BCedl209x+MWvD/2O2XvvTJ1tZe+GQ50paTUZn06N80UE/qNodxC/33 hXqBu9354Gt+nJ4yuoHWoEGXW/jZs2gHiFlCh8wwmNG5a5jSlQ9MwHGPfnv7/fDo9M3F2elrefye /OP4n085SKvHR+cIY8v7l3NvwrkbdGDJ1qDbrjYHONBuFyNMwsu8wW0opFcWCr++Pk0OcPt4Oolp 5t1+GCqUfSIDFuJKrB/+ra1Z7UtQJsTIxquyAQ9813nn8MDrJl36+mOTClCKGfS3TbVtkxFksVWX 0sac69QS+ZgcG/oQX7wt555dvM9rbNwaDPpMKKXzl0BbuBzSmPIZKkcrJeElnSWcCsPIu4x+BywO f2s2zIBkKp5xG1OdN9s4JBha0ykYU858i82B8+nhxpstdr03TRGNgep7t/FOJdj4lNieCAwTWy5X aKAFlo8lhy7Nhg0BTqYQGXUq68O/wGA4j/p8EdbD2QUVYT68y0mOtBFqbHxa29Gk6elfaYq8+XQr WZePXFUui5zIRQeTv8RmmkituHHB0T6UIrkuUBdPgdp8aelJ8qoHAcbD8/A8PA/Pw/PwPDwPz8Pz 8Dw8D8/D8/A8PA/Pw/PwPDwPz8Pz8Dw8D8/D8/A8PA/Pw/PwPDwPz8Pz8Dw8D8/D85c9/w8eTqvE ALgBAA== --=-=-=--