diff options
author | Greg Ward <gward@python.net> | 2000-08-26 02:40:10 (GMT) |
---|---|---|
committer | Greg Ward <gward@python.net> | 2000-08-26 02:40:10 (GMT) |
commit | 018cbb15c04aa544708430bb5b91aebe3e808923 (patch) | |
tree | 93360f4174338ad6b77c6f24b3e159d3a5fa2902 /Lib | |
parent | 889de85d8bdda507855582f391d8c6a6b3f24381 (diff) | |
download | cpython-018cbb15c04aa544708430bb5b91aebe3e808923.zip cpython-018cbb15c04aa544708430bb5b91aebe3e808923.tar.gz cpython-018cbb15c04aa544708430bb5b91aebe3e808923.tar.bz2 |
New release of the Windows installer from Thomas Heller.
The known bug (bogus error message when an empty file is
extracted) is fixed.
Other changes:
- The target-compile and target-optimize flags of bdist_wininst
are gone. It is no longer possible to compile the python
files during installation.
- The zlib module is no longer required or used by bdist_wininst.
- I moved the decompression/extraction code into a separate
file (extract.c).
- The installer stub is now compressed by UPX (see
http://upx.tsx.org/). This reduces the size of the exe
(and thus the overhead of the final installer program)
from 40 kB to 16 kB.
- The installer displays a more uptodate user wizard-like
user interface, also containing a graphic: Just's Python Powered logo.
(I could not convince myself to use one of the BeOpen logos).
- The installation progress bar now moves correctly.
Diffstat (limited to 'Lib')
-rw-r--r-- | Lib/distutils/command/bdist_wininst.py | 579 |
1 files changed, 296 insertions, 283 deletions
diff --git a/Lib/distutils/command/bdist_wininst.py b/Lib/distutils/command/bdist_wininst.py index 38e973b..9b600a9 100644 --- a/Lib/distutils/command/bdist_wininst.py +++ b/Lib/distutils/command/bdist_wininst.py @@ -22,13 +22,9 @@ class bdist_wininst (Command): ('keep-tree', 'k', "keep the pseudo-installation tree around after " + "creating the distribution archive"), - ('target-compile', 'c', - "compile to .pyc on the target system"), - ('target-optimize', 'o', - "compile to .pyo on the target system"), ('target-version=', 'v', "require a specific python version" + - " on the target system (1.5 or 1.6/2.0)"), + " on the target system"), ('dist-dir=', 'd', "directory to put final built distributions in"), ] @@ -74,22 +70,10 @@ class bdist_wininst (Command): install.root = self.bdist_dir install_lib = self.reinitialize_command('install_lib') + # we do not want to include pyc or pyo files install_lib.compile = 0 install_lib.optimize = 0 - # The packager can choose if .pyc and .pyo files should be created - # on the TARGET system instead at the SOURCE system. - -## # The compilation can only be done on the SOURCE system for one -## # python version (assuming 1.6/2.0 and 1.5 have incompatible -## # byte-codes). -## short_version = sys.version[:3] -## if self.target_version == short_version: -## if not self.target_compile: -## install_lib.compile = 1 -## if not self.target_optimize: -## install_lib.optimize = 1 - install_lib.ensure_finalized() self.announce ("installing to %s" % self.bdist_dir) @@ -137,7 +121,7 @@ class bdist_wininst (Command): # 'info' will be displayed in the installer's dialog box, # describing the items to be installed. - info = metadata.long_description + '\n' + info = metadata.long_description or '' + '\n' for name in dir (metadata): if (name != 'long_description'): @@ -152,11 +136,8 @@ class bdist_wininst (Command): inifile.write ("\n[Setup]\n") inifile.write ("info=%s\n" % repr (info)[1:-1]) inifile.write ("pthname=%s.%s\n" % (metadata.name, metadata.version)) - inifile.write ("pyc_compile=%d\n" % self.target_compile) - inifile.write ("pyo_compile=%d\n" % self.target_optimize) if self.target_version: - vers_minor = string.split (self.target_version, '.')[1] - inifile.write ("vers_minor=%s\n" % vers_minor) + inifile.write ("target_version=%s\n" % self.target_version) title = self.distribution.get_fullname() inifile.write ("title=%s\n" % repr (title)[1:-1]) @@ -166,285 +147,317 @@ class bdist_wininst (Command): # create_inifile() def create_exe (self, arcname, fullname): - import struct, zlib + import struct#, zlib cfgdata = open (self.create_inifile()).read() - comp_method = zlib.DEFLATED - co = zlib.compressobj (zlib.Z_DEFAULT_COMPRESSION, comp_method, -15) - zcfgdata = co.compress (cfgdata) + co.flush() - installer_name = os.path.join(self.dist_dir, "%s.win32.exe" % fullname) self.announce ("creating %s" % installer_name) file = open (installer_name, "wb") file.write (self.get_exe_bytes ()) - file.write (zcfgdata) - crc32 = zlib.crc32 (cfgdata) - header = struct.pack ("<iiiiiiii", - 0x12345678, # tag - comp_method, # compression method - crc32, # checksum - len (cfgdata), # uncompressed length - len (zcfgdata), # compressed length - 0, 0, 0) # reserved fields + file.write (cfgdata) + header = struct.pack ("<ii", + 0x12345679, # tag + len (cfgdata)) # length file.write (header) file.write (open (arcname, "rb").read()) # create_exe() def get_exe_bytes (self): - import zlib, base64 - return zlib.decompress (base64.decodestring (EXEDATA)) + import base64 + return base64.decodestring (EXEDATA) # class bdist_wininst if __name__ == '__main__': - import zlib, base64 - file = r"c:\wininst\wininst.exe" + import base64 + file = r"..\..\misc\wininst.exe" data = open (file, "rb").read() - cdata = zlib.compress (data, 9) - bdata = base64.encodestring (cdata) + bdata = base64.encodestring (data) open ("EXEDATA", "w").write (bdata) - print "%d %d %d" % (len (data), len (cdata), len (bdata)) - -EXEDATA = """ -eNrtfQt4U9eV7pEl28IIJIJNlMRJlCBaN3JcE5uMiYDK2HJMsI1s2TIkDsbYMrLwK9IRj4akENkT -DhvlMU06aW/bSZp2pnMnM5OZ5jY0bYONSQzkwcMp0JJpIO1NZQyEJATMU/df+2z5BalnvszMN/f7 -fPi29jl7r7X2WmuvvdbaW0em9P6nJK0kSTqUWEyStknq5ZDGv46iTL31tanSK5PeuW2bpuSd2yp9 -TUFLe6BtVaCuxVJf19raJltWei2BUKulqdVSuMRtaWlr8GZNmZJiFTT66x9r/ceEE/Pj5eAtR+e/ -hDrrlg/n/zPqitujvN57c2z+TzjMyfmfCdgXeP9HvPbrjnO8iqZ6H/XFeXQ5JalEo5M8rxTPHebb -qJmsSVKFdKltf1OCD1P82aHem1S9SNJwLT0v4HAl8E+TeDYNtZtG6Ci1UpK20s1TkuRLkP7zLvC5 -VfPF3Vmyd51MkiwQDDnGMIbLIkkrsgINdXKdJL0/WchuGtaJNGwLjiwVTCrMwscKFZnXo+G6sgLB -QL0kZH1K0Nt4NT1p4pq4Jq6Ja+KauCauiWvimrgmrolr4vpvvarYCebUe9jpzi65aou+Y7e8ZOP5 -mlDhlmKNY+P57A3RjedzHp2x8XyrPHnj+UDot28mTSka6HszKaVo4EykVO/Xl7tiaaddDim80zAv -JaSj/s1JIFk08I+bpxY5Bv5u41ek5Q/29HiYbNV7ooftkrSMTXllnUOKFGoS2JSXcde5+0VqCKV7 -otvQ7wDJ50HS43qReqM/RNvAHa7yWNogWpfxxs6uZfKNPtMKh+SKrkO/JzaHwzbjPrzTtLwHgm06 -YcIO2e2pVvtiab8COpvzY+LWO4hySdpOFKpdivNM7CAkYIc7j8jfjDkH3ZHO01diMV86DRBLc5SD -Xd7iilUZQB/aSow5Lw1kQ9Jzh2/qCh81hLvqXXG01KvQohfxGd6Z6o6FBn0JOkmKzcl+gniaB5hq -vxQ7uGzZwMZY6EwsTY8W5ry0rHb5A7tVMej0IafLM9epf51u5TkuqN5V7omF9C6fNA3E0p4ifUU6 -pUuxGLXG0kzlfE7wEEvbis6BpM28V4UBwGY0RkpNttPlkY5EFc/gQftP+WSaVDi/yVfCZZmzM0Lc -FoJqTtfyOF9Qb8RpcAE2xsf1UcsoGjFOo+ZqGrt7XtiGSfGEBxPkRWwONYYHtXJBeFAjL/TP9KXX -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 -g0P4QXgJcL4SKedqAR9U+RT0eYea7dFFP9ZOb3RI9MdDTKgllDNeh3QUZR/KNq/aR3K2YCfWROYi -LIvwV4YaGyG1V7hgwAXR0lTf5G2VIVwLfJbENSYgkCp64QSG4LnCx/S1jtDHkKD1PGUdam+GmwzU -NX9dqET0qmdPdD61IlkcZOnFfy+iV884K/XqeWBFsnpuSO3tos4WBLporSWr51fUvkLUFtH/fPyA -VNQbRe0Q/UcFfpJoXypqs+in/6bEnayeU1L7OlHnif59qMqT1TM/aveJOkP0vyye9aLeLOpi0X9a -jK8T7ZWipp/fVenV808a3ybaZVHnCvxdYvwpor1B1FbR/1PxHKffIepC0R8V48f5qxF1uuh/juYh -WT2fpfYNop4n+g+L+bletDeLOlP0bxPPBlFvFXWJ6B8U42tFe4WorxPyvyjknynaA6K+S+DvFPJP -Fu0rRX276P+xeE4Q9WOiXij6/yjGTxbt94v6RtH/jJC/QLR/U9T3iP73hPzTRbtf1HeI/lfEc9w+ -t4j6PtF/RoyfKNo9oqZv5LqE3ZL8OaJ9jajvFvhvC/mNor1R1F8R/S+J57h9/6Woi0T/CTH+JNG+ -XNS3iP7vC/nrRfujol4g+t8X8t8k2ltFnSX6fyWep4r6CVGXif5LY9Z/ueifJuY/PGb9PyTq2QJ/ -x5j1Xyfq20T/j8SzRtSbRJ0v+j8cs/6XifoG0f9XY9b/elHPFf0Hxqz/JlF/TfT/q3iO61cR9SLR -/+mY9V8l6jRq16vffYxc/yFRzxH4e8asf6+oZ4n+/y2e4/bVKWqn6D8+Zv0/KOqbRf/3xqz/R0Q9 -X/T/bsz6bxH1naL/NfEc5y8i6lLRf2HM+o+PM13Mf8+Y9R8UdY7Af3PM+o/b6UzR/7fiOU4/LOoC -0f/RmPX/gKhvEv3fGbP+Hxa1XfQfHLP+V4vaJvp/Lp7j/DFRLxb9Z8es/2pRX/8F63+tqP9C4L87 -Zv2vEvVXRf8/iee4fI+L+l7Rf2rM+q8V9a2i/4dj1v+3RP0N0f/7Meu/TdRfF/2vi+c4f0+Keono -v/Il43/3OPH/hXHi/7Fx4v/T48T//ePE/38ZJ/5/8iXj/+5x4v/fjxP/+8eJ/98dJ/7/dpz4/4tx -4v/5Lxn/3xgn/v9knPj/f8eJ/8+OE/9/M078/z/jxP/Pv2T8f2ec+P+P48T/k+PE/x+ME///bZz4 -/+tx4v/lLxn/e8aJ/y+OE///ME78//Y48b9vnPj/s3Hi/2dfMv6/NU78/4dx4v/AOPH/f40T/4+M -E/9/OU78v/gl43/vOPH/78aJ/38aJ/7/9Tjx/9A48f/VceL/uS8Z//eOE///eZz4//E48f9vxon/ -H4wT/7ePE//phSZXoro+qxPVd2Pciep6eiBRfRemPFHVz7JE9V2ZqkR1/T6YqL4bQ/g0v0sT1Xdq -KhPV9V+TqL5DU5Goynd/ovqOjSdR9QNdiep7NYSfIMbfJMa/IT6+WR0/OT5+kjp+XXx8ga+Lj69V -x58dHz9bHX9KfHyDOn73iPHV8xo6mLM0rG+ta2mqH3G0FLTI9LUoHVYHQyuD9YGmlXTa9UVwI2iN -OXbh3WPpXBPG29Iurx8+zaFGy9omdI86oxrmeSQg9Y3ldWx//N0lrXgfySjeCyObIvsim4gBIEZ/ -IxQAMQDEAEB/vCv2rfhbcMKnT1wT18Q1cU1cE9fE9V94aXgOZr7qf2zX8D1H9jXak3XqOceKp5Af -XeP/t+/S7+I4fO8mpWo+4PUi7CGDkowMqxn/6nDXhKyylaeNpdgfWFDqOAzdeaUA+hvFiBp+fFQp -7ZHuwo6zXxuLbQQM0QqoJycExWGeEDAJEsEUYKQ2UIynJxs5TLq0TfodYAa0LeirB4Vm1LVSO6i1 -IdMOAD6Ifzn8NMI1pnW24CmB00qWXpKSkHyeAE+PCflIsnoxok7/LwIuGXAbpSjgNom+SeJYLFna -irw3RTrF5ari/FrQtR6UfFxHFoyape4NSQppE8e7Q/oepJ0qfXwNmksEzdPj0Lx7aNbi8vwAOZue -vxv+mFQISUhu0lEb7tar5yMj9D0IHtLAw6d8nCz+b+KauCauiWvimrgmrolr4pq4Jq6Ja+L6n3H9 -Pzrvwu8= + print "%d %d" % (len (data), len (bdata)) + +EXEDATA = """\ +TVqQAAMAAAAEAAAA//8AALgAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAA4AAAAA4fug4AtAnNIbgBTM0hVGhpcyBwcm9ncmFtIGNhbm5vdCBiZSBydW4gaW4gRE9TIG1v +ZGUuDQ0KJAAAAAAAAADq0pWMrrP7366z+9+us/vf1a/336+z+98tr/XfrLP731GT/9+ss/vfzKzo +36az+9+us/rf9rP7366z+9+js/vfUZPx36Oz+99ptf3fr7P731JpY2ius/vfAAAAAAAAAABQRQAA +TAEDAE2JpjkAAAAAAAAAAOAADwELAQYAAEAAAAAQAAAAgAAAQMMAAACQAAAA0AAAAABAAAAQAAAA +AgAABAAAAAAAAAAEAAAAAAAAAADgAAAABAAAAAAAAAIAAAAAABAAABAAAAAAEAAAEAAAAAAAABAA +AAAAAAAAAAAAADDRAABwAQAAANAAADABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAFVQWDAAAAAAAIAAAAAQAAAAAAAAAAQAAAAAAAAAAAAAAAAAAIAAAOBV +UFgxAAAAAABAAAAAkAAAADYAAAAEAAAAAAAAAAAAAAAAAABAAADgLnJzcmMAAAAAEAAAANAAAAAE +AAAAOgAAAAAAAAAAAAAAAAAAQAAAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAkSW5mbzogVGhpcyBmaWxlIGlz +IHBhY2tlZCB3aXRoIHRoZSBVUFggZXhlY3V0YWJsZSBwYWNrZXIgaHR0cDovL3VweC50c3gub3Jn +ICQKACRJZDogVVBYIDEuMDEgQ29weXJpZ2h0IChDKSAxOTk2LTIwMDAgdGhlIFVQWCBUZWFtLiBB +bGwgUmlnaHRzIFJlc2VydmVkLiAkCgBVUFghDAkCCiqWey66NM4TkqYAADIzAAAAoAAAJgEA1v+/ +/f9TVVaLdCQUhfZXdHaLfAi9EGBAAIA+AHRoalxWbP/29v8V8FANi/BZHll0V4AmAFcRbP833//Y +g/v/dR5qD3CFwHUROUQkHHQLV9na//9VagX/VCQog8QM9sMQdR1otwAAJHT/T9itg10cACHGBlxG +dZNqAVhfXr/7//9dW8NVi+yD7BCLRRRTVleLQBaLPXg0iUX4M/a79u7+d0PAOXUIdQfHRQgBDFZo +gFYRY9/+9lZWUwUM/9eD+P8p/A+FiG182s23P/gDdRshGP91EOgV/wD2bffmcagPhApB67EfUHQJ +UJn9sW176y9cGBjxUwxqAv9VGIW12bLxwC5nEGbW8GTsdSUuwmhUMOlTt/ue7wH0OwdZDvwkdAoT +7V3hyAONRUvcZotICgPD3ofuQAxRe4BKffwZA697Mw1QhDv4dQkLiJ2hdN8Mhw5WagRWEGSEvgYX +eYs9iJCGD2g4bLe2+Yk86yasKwJTKmi+39rWU64IJXYIO8Z1FycQNjSDeSiElREzwG3hJxd8W8k4 +U4tdUosh9rDwt1ehRghmPQgAUZ4AOJpz2+3CyOxQ6NY8QkwQNlddtsJtyCISQLsIzBZe3X/utgbY +JWioWCrxUIld1C0S9xdutOzeWsB0d/90KFBokJ/S3T7fGUsEFAyVdBMaDX+uc998kgTQkfYhHxKc +hdAN5JDAZNxYGt4x9gDGumZ96/92FulTw92b+6E8I5de69nTgewY7Q1/R3eLTRDZDFZ8C/qNRAvq +xCu2/2/8SAwrz4PpZtED+oE4UEsFBolV9O5K9uP27y6DZRAAZoN4Cv2OMysDixnN9vv/i0wfKo0E +H400EQPzLgECKx6B7/hstz4LAwQ3Escuko0UHw/ub7ftv1geTfAGUCADQBwD0wPHfrX22+2NPBAN +RhwDVhoDyAN2VCM0frmKGh7sjYXo/p1dVGz5umcLaLDuUMxOEB+Z3s0W9FyNhAUNF3QLm9tMGlAb +JQMA8B6k24Cd7EsEXVdIRhR8TH73gLwF5xtcdDD/dRRYULkGsyvYIQCGbhQbCjvzuwLsVnwCAxM5 +g8TtOhqWuBj4QMH80gpQa53b2DhqBkEUIRL/GhU4nNzuOQaMz1fSmqXvtt5c6/eLFwREEYoIhMn9 +fTvj/4D5L3UDxgBcQHXvc0BcDA90F9LN8Ih2nEHJHFFSjr3ROgVOCgvAV1AUJFHNVnA883FKDCBq +32bL/wqZWff5M8lotGBRAB5ovAIAzZJpeA0QMCssUGZrahsy1xoNFBUotnSE7b7geQRWGVlQLg8B +J9fdjSAdJBj/02gp1/vagXVjUCMKARXTqTNnutcLXzifnmtsrZkY9PH2wj7atnfftrgABgA9XOFO +dGCBBRB/wrEbZ3V8Vi44UeEF8McEJHOn4cNgirkA8PnApOyXZg73NTAFzRoE6AMNu/1Y9P/WaEB6 +GGj9Dtq9a6N07SdbgXgIOL11GXxvclv/ah5wBGpSLA0HZs0pnWla8FuE2CA0bVMy1rfltwsoi/hU +i1X8i8j0ESvQ/hu3hSviUg/4K9MDwVKZK8LR+GHW2DoI8BX42A0BoKEQGTz18QgPzALvVoPoTlcl +9WBwWvqBLS50RUgqKJGlxoZ3LA+3yIHkCnF0h+8ab7YMFxDB6BBIbxUHmmowbGzl7miUeOUsYUBA +IBVAFpru7xpo0Iv+/lZISF6hwEEHo2Ps612tvQVwvfu4g/sdzDW0sSz+0w4TiGM47e2AOUTQihR1 +EvOy9utmLii/duskRREvhOxvaoAYaJk8JVdo75JhM2cOMAzAxsVwCN0tietF4iCQOLs9wP4BM/9X +V4B1BHzrAm5EQvhaHLVWrxzlZMEYsluB2eHtxhe09FMz2wsZAAxTaLgcZImlrmgVgBT8igDaBoZ2 +dAcyJj5TAOUSHdwt+FNXmDf4UC5Etk8GdfQnBHFPAQGzcO68izVQOijBe0c2XFDYVJhQCRRfoJCk +pPWzw3QmOFKywgZIIp0VLaxtrSwpFfwseVhvOdc+M3VNmFGP67ntxIxfgKwZZ/VmB95n+Gxh+OMQ +pWAs0a5/AeO6gSXNs/ApSP9AP80m7FpiUgkWEyBmmxCh9BUSN+idzdXe8P1QAN21DNFss/cICB8b +DKBZknyH3cvwaJp2Uw2GHgjdElEm/EyEwQZerOCwrhJUAjIsaxJWBxL0k9xmEymZ9Q5eLfECzcBj +0xU9LgGxA7hmTJYaBdvrJObMYbtyaOwQME5KrMM9uWE+uB3ZATUOWEukAGhX1GE3W1lJUVVNguEl +17ZGXAg9MUTnrGeLxz29A5IDUv/YxSHrd15WvvtXVqMwWOj7pIwCSIC4EVxEDS2VpzHMVhdOI3i2 +He6YDAK/wBo6Igs4TSBCtxJz9aFwm7u5G2ugvz5sNUAGBagTeMNgNQLyFKM4jGphoTukyRgAl1MP +W5d7Llx3EFDa/LXmFaS2OnCmDKKpSFt1Rmt96wNUAjpIdXp/Lf03oYsPweAQV6lQR2/ZoSs8xu5E +V44QndHZLXTrQ19QZVCG12o27gt1LK4YaNhzwsh0YkwhQA8zzXjrIbYJpNiLwxpq33abuMdWOZ6+ +CnSN0fZBWyIIkSJQvxEbDnvwzECF1AjC7FCR3REih0hQXgaIuXjSZJhckivwK6NL0vASVvcQEGpk +uGdub3yl1tyLpIXCW4cNuaGQZ5MCdEkY6bdNvRVFdEMEAXRCaiN0b2fma2MgYjfWGAZ0Ft//txJ/ +BgcPlcFJg+ECQYvBo0LrLp4c78fHBQfcCF4Ik43AbwNqJGiMYssQQOin6yz+Bl732BvAQAscjGTZ +oICLM0Esn+TMdK6r1tEfCsRoCffgZOZgIuvbdUHHNuSJaCe3PShCeqW2CDqiuUEUMiFx6yUvBG93 +dchddJZqC1kRjX3E4NbtRoLzqwb0iRurq7aNfdpgRO4MqxqQE4wbNdwy8L8ACFmXwDAAibkw1aAv +Qi8ptbfHrRz3NRQ3G9hWFQfnYpa5Isxr3kkrMnZnOhJsIFMWQBn0S06eXG1eGfhz1M6Tbskcn+F/ +sZm6t4w0XHyYAAWUfrtlM/EFrIx/kCCbdbR8tG3ZAryoD6T+bhgybETIu5wERZvpFTaiJBkIGxxQ +/eMUMxGVzg/gWaNkWGg6m8V1nrxmy2/SkBcXwSsQWDQd8KyTjAi8D29+NZa+pQcvaLA91mo0bcke +REoOIpj8kTgNtL2dalBVV7uovd/WPdSgBFMmVYt4WS3AAPb9HWjgi1GYHGixSXfojj8fkA2bjDxh +QApo0IBWL/Y9J2CKeHhsrVqzyu7xEWlQo87yDSCspYl3VqGhN8OFh8+OEpVSlFCBxFA09YEZVzuL +8B9V29u/jE9cdUSKSAFACDB86AQz2/9Ty34WbjdyddnGBg1G69MFCidddy30J2oIUQ7oPL+5X4sK +Rx+IBlIfrYgORkDGUyvB66eyfRpRvVPPgI0UV88DVibwiTE6CIDueK34g0oHbDTvKxn8gYzggMYD +RfE/QFMDGHQE2hsd0IJ0aQTFaAzGmgC3i5eJCJniJJtyG7kEOwgazEwCA9xE++pXK0EQAgkegTl2 +vQHeao00NIXOAEp5VjQS+LEJswvCUIy6j3YE3kI2N7/g/hxkFHp/GCyfu06L/it+iyzhYpT6Ybdo +hiwUWcL43B1gWdPMnVj0FPMYVdAe/NmQGj2LRgRolD0BOh4bg+DyqQIeV6AB2vgg26GSwYBhQFdn +iUq8jG9t6x5o+P7rB3BJEKTmDUAHZeEw5IsOKJFVe+TSlz1WwNgD3HsUfriZv7V15Ebg/9doAH+M +6InqDIe+qnCftJ3w9h7LmbI2Gti7bMQimsCN0fgDbCURFwKu4RbrYBfbBOchDccG/djvUTTUcD41 +Vis9INURZ801cPclBAstVg5zIwpBDVhRPyeczmwKXBFU7cz/vwFiAO4z0jvCVnQzi0gcO8p0LNv/ +l+2JUBQCCBiLcQz33hv2UoPmB64xF2y4bZEcIBRRChhsh7CvYetewoG41f8IkACFEnfEnQiF9rGb +gFbetRzWVE4khck95pZd660Klj8mjAgeGlu6rcQoOqkkDccAAIPmAphUn+tgBVuzsTvHH/eKAQ1q +hNnYtjrBeeeljWa1NaoK3Lbtvpla7Pd1Cj/isGQgiX4Y/oa31joTYCAQOIF+KDl+JHUHutLO3A4k +MIFqGFuEICbp2ubSJ4mGPvxMvrDQDfqJeF9WF8+Jegz273cNp7T32cdADAF4+Qh8WQS29l/3D39U +H7gR0+CJShBS11Eebv8XN9ob0lD30oHi4DZlUlY07LZ4DeEZiEFPQXpbdoitxA8zbg7JZt3jTHkL +VhvJJywZ4V+4+mkQcVOUC1CeVRC7BASbbXc7dgr5A6E+AAjwi1Q/+q0KI4OD+gS/+x+Vw7eH9u9L +vQXB4/uJXBmJCMgNDxUe/sSHxHEkjTAoGQS22NpGsz2ISR6JDRAIt/GttS0vBYsOihEcBDXRusXG +FhAERQ9C7IJzBb4uFnQVx09V3Wz23S3zGNRkbOuiIotQEMHpKCYHduPBCF12GCTAz9faDlgUThcF +vQQR2xVaNEiojmYIQHY9blt7i14cC3kGib0fA/+NLrATiTZDBAYIA8H39YXSdLqYe+8hxwNWlNHd +X6jmNj55aPbBICWBYyk4YsPOByYc2AUDPwpr2hmcWaQh2PcCXP11GKMCVfNt6exEbSyFkgKSpTa7 +bSIBT2kCc6AzuUgbtY3oB1IeEs22js1EVAz5C9gMOTBnXvLjCC0CY+SNt+Ze7eFK3MHhGEgt2dpz +C+RJNAlrNxwK2TuDSEKJBjq3rlAYHBSQgUg34hDJJQP2A8qJSDkKvlwyJBcIC4RuzM2WNj85SDSG +CMscEjbr5ZADwWwzWemQQ7aBEKRoAtyyHfR1CYvHV8IIp2dZaAfncmpjpBZQD7A7k0duxwEDORZI +0nBLCE83igobUJAjZ8vh0T5WAgQIk0kODtIgJYywQ4kosyG2CwkhH3hOMPMGLCPZa7j4O2lmBcM0 +LIBwALcVls0lagD9DEPcki3JASn9Bstu+8U4C2ckTN4D1CYOy6ZplidNiNRVJcLLZtk09zEmawwo +GIEk8DJbf9P1cGvgV78FejyJQ3zaW9uqcUUEDwQFdQ6+dWCDN+tHKFKbV8rIBna9dQZ1DT5XUeow +LNi2G+8ox/IBRjQCMA448dlaEO5RCCB0Dru1JgztvtAfYEcwwOgzNWzDf8VtalGDzjW6ZGMg0PQO +WnQY9tLFw4tPKIAz5GhTSVsa0l1U4F/Z3YtXKIzuMRKzkMvDckDQHLYBdVAoKB+Bc6dznytRHi4J +GiSsojYCrZgtvHUD2B6JXiy8OMgki8SQBEmqLbrNIzKD7DA4U284PtbYGmj7KUOyaxJI6NvWti5L +/xsQEDBWO8hb/l1bqlQKFURzBSvBSOsFLAfn8gVcHowDg/gJGQx1v8HBhUxAfhiD/QNzPFkQG64n +Q/SWDcbkSP7+v+2KD8cUTJSL0YvN0+KDxQhjC/JHt/eu6zGJOIkvcs7rBDevg+D71hb4B4vI0ei1 +AWQeSxh3kWPtWeCmdIPtAxkBzRwdbHr/B8HuA9PuK+k/sxneQUi3hXZXSCBSjbCEjQ0wUV3DJ3YO +OFLONzwkXCE04u0aevh1UQ8sUhAV6D5Q3hAoPBSJrmbsOfO171xYcQY35MBiYRQD+F28dYf9WBTO +IHMsqfot0HBu+qAGP0wsT7vCPZf2fEAnInLUvCs18YvWi86C4Qdy6hAz0drbfwuvojjti8E7xfoE +iWxcMewg3UsmAYuJA+kmOrctTNIXvCrHHAUN37XDhZ0WfBpEO9Z1I7+L7xq/xXsoLXQZi9c7sRVz +ByvCx7YLhUhXZCvyc4k1dWcOvtB1tExBSARTiVM0GO6LrZU3B0cwatajtA1vs0w6MSvKSf9LLAdG +vttzBD5VdSBi99ZtcvNB8k6LzsKLyKSGYcKdXrALBaF7g4XJdp3CO8EFwT6X2KCmFEQX0YEC8/D4 +he6li8otHN8DK9DzpNpG297uXCVEA1INS10Vhs507fArDBaJeBwpJthcCwFoXWQY+zzGEBxBKpYO +czgYV8mBMg6SzdF9yNIl/z8lyCCYhr5lix+HHQbW0DwH3dwdCIH6oAUT8gVtDvgGWwV9H0aNhAgC +4o2zdHN3A0go+VBhE288nwyNBQ5IDsdDbsbeponwBOsIrnFThUY3mpIIEQqDYi2V/M7Tc2hZMr40 +BhFpYTIDLAhOj08t0bGL/IBXSwzFK7QG2wSRYQgIA4Zq/bB7mGdymDC4E6HIcyHwXpvsPDTHMWk1 +tJ1urqA3IHLfcBokDA2Wvm9DEI1TUVI0V21n0+bx41BRMEyQGIVsm9nwhSH7COYFGD58hU9l0DTi +Hzd24u0sNQJdD4N70ln2fjz6O+hzM+NKOwXr+mjuvbb5Spj29PnpWHNDB/ou+c2LybV38HcweLkU +I8bmVMEBjea7rQbNNHa0VRCXNHOCa223G8kr6tEMRYQSbjtcw4pxQKQ3H6AjErnH4wv9zXQDM/KD +6BLNWf0ld4krJPgLH8ALO+lzO9YtkIeZ4AQfMJ21RyMH6cnsfK/R7853VYsMjakjziYO471WaxRi +1JAb185lhFMVHOGMCr3erZ8eA9A7KoepddNqlFjKKjkQ6Zk3F3MX8IKTFQ3aHYr88O2lwusCAKgM +QUiZj/x19cSBhPZ3iV56goUPdNvLmBVAJCZRUEA6NmOmjd8JLCRRElK4fw3XPDY7P1FCBQE8DUQ2 +CmvPFGUJWXaYZwdABg81rCSik6bHHxVMJDb7cODTyiU0z3f2PQ24PZ88ICsceZ47hsBQpE6EVwQE +A2wLWQYpSA+itbDAc15rPDCXX7e62NgE0CudOANWTLSagxfozk3uGp36GudRfEmxlWjm2XtAdFZd +4OLF2bZUAB0nZpAoPE0+DSMYaeJQcLEpzCEYYL5WAonSAA7mkmwsAKGdz4u7rdc2JmialtrplUxR +gdbca3eF2hewkOx2yCWhMwYww+BMG4c2UVxh/cuemzXeMxhQZT9VUfIZ7Iff5Ndq/SvRwwPqUE5L +ZXuyK0yNMYtpOVGLsLmG0CsBZpLqLxXNEsh2UlE6Q4XaW/atMmrHQRgwg0tGCHM/1kBISFGJeQRG +RBMOHGEYEUsg6LNZBNdorPKEp4QS2BuEFVLIxjPg4j1UysQAzlboxOc5QQSTiofBPYP7K/cD7oNR +T9FYtARTArhF4UNYMBOfz55q/FCUpKEQAnmQDITCO6SMzyuONxJIgRid/XV7GGWzBlulT1Go1jHY +IjrXImiUsGVESBR8nrpWZYy7kVIMwoHL3VAGNc+CewPZ8GTa/oEYYoVM/V8tpHMhJEwQWSDhgOwY +UoQ+I4U9Qgk7XD1bKXlIUFKmBwx3h9frQKZm50FQVlP3yHJCdEtT0XQ3oe0jtLl76CA3LolWBH9k +W6r8UCvVi24I4259PsYB8q1mCBgxtfA9MkMui8dMVlXFabI1aGNDS1aZEJJeCjudhAkB6Ziglw1B +JoEhGJFTY+2rCU+w/kVDSDeewl4qQ//0KRTtKnK5XG4DYCuLLDotIS7ZNMvlcDAXNX7CWCqYAZtm +dthZMRv4Brik7wyiDGoAVleVogAHGEdYcgGewmndi1hGKIDze40YDRgIV7HADnBj6U/ciEGqt7vv +3XUKiw16BuzCDLpc+e8d373bD4bvEVWB+7AVmcNyBbgIFX/cxSvYgg+Moa3owe1RiN+i22EQihaD +xhvkkLN3rFbxA/kI8vOQQw459PX2Qw455Pf4+Q455JD6+/z9bOeQQ/7/A00GogQbvGSfaSv1tnUV +FhJGE0h19LENu29jd7nx8vfxTL8IizX399q6W23ri/WHEzFdF1smweGt/F8LwQifQtkEP5UIUG49 +8FBdvuYWHxsa9gTDllSj4w8fHKE33BVq7IUiik+jRYhQENAbgXdaDIhIEXUAAA+HAXcPSBjD3xR/ +IGFo4RV2zgNGS9BYMJLwVsjabrWwuWgMwQw0wX72aZpwxbwQwkYsBwMK9MGJM00637WNXnH+BmwW +QJtHoIUOHBqdzhAKByNnbQqSbChGetjK1fIsiX47jCkrta2WFiJ7rfmFiQb0RVwqZdxVGIRSjgEb +diJNEU9VEHc4nFYyu6fqyKN+HLhI21xnup0oDUCu/Bijv0YDGTBypXQTbHUB+En32RvJI4PB701U +7blfYSi9ZmORglcstZxNtkWyFQ+rG2L4c0RAXATFLp6Lug617TAAS+4FeLKOz9Pg0ADHu/Zz7ggL +yDZ54CxBPwosctV9Z6O8roX4IyAIv0aNLVbISRhgFNPo9GuER7huwUUr+EXiLbhAigHFFotJj6PH +TLOVCAavqBB0u2KtRHfgD66LrwUittsm6R8CQK9Fw6ggBw05c9DjJx8HfeaQzoLaQhqvSDcsYO/c +edDn2DMnH8kIvosETLlaa+19TQQDyM6tkbDUt7WZ6XID19NAGPWQYDA0RcxlXpYwiuSWA0QHpGES +ZAxEBIXwEG4WDFJlDI0MwYgC5AFCQdgCkEMOGQwMBQ4FKDBvfgPdgGMDaxXVdQPCK+dMTeo3QNYf +7Wy8QrQjlrEJlkr8eMpWl9ROLC2UNtunjnUhPjA7wREHJ5UaVC0pDPtOHRG2COsPf2eGmkRpIxRS +hXIyZEZGYjwMbYOd3EBiXWNhIi2RHXJej2KePgkjxNsBkELzCYhK/z4I5/4RQUg7UAgaBxCOjudO +DGZJYYY0GGi/N7AAfFSgwOPgTRjY+2QKiApCSES9wBNwRfbPFIsrgWN0ywrix0MfK80TImTNQBcR +qnwz3Un0FMNKCTAYGGZAI/AGCGJQZWorzA3y/SvNU1ZQSchCZZsA67SYivuhrDyJAz6D/wd2FT/e +K8HfPIPvCJFMiRSW0BlMN1C2i8wFrTqy6mKzUqY3dk4gOittbjxW6A3++VMr/YtrZO+JC1v+RMKj +ERJBmcgWyQE7/rdb9SKQ1L6ROQNsOuVy2SzwrjskPEI9qxE2yxc/j00+4gT5emQR5AwgUVPpWAoe +bCBRE3YQ1c0g0WfY23UJ/eOjY6FbWXUcslZVi2wBN1C3CY26U+sgUlX0RKUregET9PyirbZMotP+ +NxriRO1fW1NSx0cYZHeKVwp+e5c0XV5MHvt0BoN95qKmW+8MH0C+wjBPWCwsKc+B7PC2rnJ/oowk +9Ab8tN8B6RaogdVXz0QDSKZpmqZMUFRYXJqmaZpgZGhscHTIELxpeHyJrCRp9gslNjIB735chESN +RAPdBbr0Q0qJuu05CHUfcRgf/itfgZRuwIkpiSqMgcS+GFt4jxqcF7kRjS9soKeYO0M5KD1Bg8C0 +QTeABCZ283b57Lvx+M1zBppiug8rtHgubvR/OS51CEqD7gQ71QU7+qUb/zbbLHYlVPq+UYk70+av +cwa7t/8SjVyMRCszeCVTwwTREXLyb+FmiNCVo4UcDESNo16gWwMr8bpAeRAR4OtONqIDzuWILAvd +3N/a9kqHM9sDTBxISeWMHIpGp/sXde/dBG+3Rgb6tM3/HBWMhGxX0Q4cPQqNjA1D4fF2iVx4QokR +Ensc2x3xTQhDO9lyxVeL3/dCjE6zkbEUNZSJIV3jdA0FA3Eki4RSt9N1pseq/xLEHTwPKDQ+4o+B +AjM0ZYe9wEORDbkKO0mF0m+bW+DsKz4g/TtND44HWeRge2AUONYs/xcsuS34bLo4A98r00UDluiZ +6M871/AmGtdPAjrqHCBJy7iNfSzRTP8BO8d2J4PP//caLccsLOA2bhhBBK59vsXz1t0tbeAfByvH +EnLuhCQk1JftWL8754uxfAP4gf+HMzZyiNjvJiArerD30yzCL42UhNg2iTiL9akbB7k/dDhDiEy2 +X0TYoLSELNbLiAUx/HqJJr3G14tK/O+L9WPhWy3TwUMr8IkUO3Sfw3tPd+sJShgo4PAGwxG6Yo// +WoxuitAJG59uexwq04g9MYsIDJF/cqLb2MAHxg7A6583KQyF/+i7k/FzFIH+yRvSg+Kg9gPUld1g +iHHrICAU4ndr033mAooUMQwQgMJLNDEhL1pui7EE9g6HsbWRhSRHuuK8tDtbdBc2FXMet8UAgzB3 +idsZjvE5jTzVpHEEhh1y5tVcmRihFHqNwjFFuP0XgYXCdAgz0NHoB3X4WBEaDq1KDihgjBxC+2C0 +jQUxJE8j+ss6+1Huu18Yg+gET4gmK985nDjWBTMII3XcdajDE2MVyEogK+PjYWrSwhxSkEDrb+PV +6cGaHk6RG93VN0xC1zv1dBeRLAF0YK2FLE37AQwwLAIuCiQP8kArIV+jYTgBpIHHaBJkGBxO4J0L +X2Y0VdXjJA1kGDRS00HPFbzYaIBSVgTG9hLYFVVScIX219NFbyFYYD44+8YM0c5kZ0woSDh7N7pz +OxZMeFMEVh6oUt76PbBRS3UkJ4M6FgiB/QTAAPxqdxM/HWY5gber5E9RQz5syRB4Hvt1H+CRDYH0 +4yP8dCOLDfkC0C8jAjsDBkusQmCWwGCMRSO9uECSD98NOPwA3g2i3vqhPArvbspdnIkCEJTHAUAR +xwJAdsbpgIdAyFHtDGOrAWzAa9d7wHZt+3Fq/cF3dgMVLBHjDdcbe+876Fi/7XQPMvyRhq0g9wjq +IFYUK8UD1YKF2krmMFaWOG5UiF9wDotLPFUFNkM8Uj1uAhLNi/ekpnKpPmJZyqYDxWo7x78XSywD +/aIKdX5BbtG5rUQoDZF1H3M0ClvYneqaK+6fEIQ5kOXkV0dXVi3UWAdHMHzNXviw91qLhHuC5IyK +MJx6UWFaKBK+Ul1UiVFyNRheDr14wR/MWQsXbjf5i2mcUSA7cTA3OD8cu1EdO+5RQRw5cwkr1VJd +3fVOxBTOSTHN6SaUe4E2tA4czSW+pCwgg/g8IotJ2OqoE0ERi6XI3u5LlBphCAvWRx1y4lj4G7zF +olcwI8rIihzOjTTOwDvHjSyEjsIyTgHT6mhdlCsEZ+85BA/wgwW+I2sMnWBeAHJgtwQ2A8s4VQW6 +YP90x4PjDyvDNDFODSaSrX2ryyOkDw9lS5pJIDSc2Qg5MjEFAZR7AN5MzzvDcytZGIOfA5oL+efV +h9fZEl+1QSaXcgc8WaM1astO+s9wwe4Criibx/VI1ze4EISUvEkoETv3H+zfwXIXi/dFig5GiE3/ +BoPrAus71ogGAesncSwf/tYKfDvfdhOLHRwARUZPdfbbmcHOGCgQS57rGb89P7clBgQZcEVJgUfs +iAJhEnI6DjpH7epyM/k4+LWcEONXhdpJBBN0K/M++IV6m6zwsq078w+C3JsZWgQnqVstW9jbBVrF +ZcHrHtlzAt6M1Qv0OCv5M40UzZrCuARjbMQc+hZTRghXKLyD6s+JPitnVg3CqVklVulzYqxIAfYg +dFZXzwC5sNla2xhk5Hvtcj8QZv71bTsr1YhoAytBWF5ig25AizFBOXdfiUFN73TwZ5r9Zp//Gdka +xSX0iQX4/IC+HBmoBFHMzFE9+xZ2YHAtCHKH6QstBNy6OPaFARdz7JjEDIvhYbabSmDPUMPMNwgu +P/hSKGr/aPBNME5kobD1lvqbUG4lBxJojaLxUsWJZei48m6KLlWuFbS4gw082M7mgDkGQBTAyPa0 +qZgNpOsIDbiM6O/IoKG8DACjRKzcRuR+Ph05HYAYMh5s2e7f2U7MGAhoDGCCCGAniJqg9wKhnD9H +lGi2m1s8mAwJnFADkKC+BmqpS8gDBDIA+i4AQ0ih2G4w9nd/CxmAPiJ1OkYIigY6w3QEPA22PSDf +8hIEIHby1NBO0RY3zaRM9kXQLRH0z9sbq9TrDisgdtjr9WoKWAnaKlqPfkRtq3igPg4VibDQjjgC +veHsTgmJTYjF/FkjbC+4BC7/dYgf5JvgeCMjYwXc1MS6G27sW1sDBAG6MjWswyNbwgqSAC+wrIqC +7DMPAACkab5WohUQERJpmqYbCAMHCQYKpmmapgULBAwDkKbpmg0CPw4BD/t/+38gaW5mbGF0ZSAx +LgEzIENvcHlyaWdodA9m/999OTk1LQQ4IE1hcmsgQWRsZXIgS3vvvfdXY297g3976b733ndrX6cT +sxemaZqmGx8jKzOapmmaO0NTY3ODEJ6maaPD4wElIRmyiwEDApIhGZIDBAWyZacZAHBfR763hFkv +f/fzGWmapuk/ITFBYYGm2XWnwUCBAwECA5qmaZoEBggMEBjCmqZpIDBAYOfhyEa218cGp8KEJCyr +r7MGGeRbAwsMDTnYAEEu1E2cjQogzAMA5X9AlQZDcmVhdGVEafb/3/9jdG9yeSAoJXMpF01hcFZp +ZXdPZkZpbGUV2bs3CysQHXBpbmcX+xkwSxCSRW5kIBlhwdx/dHVybnMgJWRTFxQwsB8sE0luaXQy +GPalAxzOY1xUaW1lFNt+u/1Sb21hbgtoaQpXaXphclx3cb+5N2Bs/3N0YQd4IG9uIHn/3263b0Ag +YylwdVNyLiBDbGljayBOZXi1tu3adCDdF250LnWA6NZt760ZS2NlbBUcaR1oFe3DYN1TfXBbLgNO +bxhba621eRRiTtqCPGVr7dtvl1NvZnR3IGVcUHkzTwZ2dnMHQ28RgVxJjFDR527P3Gg/GyBWiXNp +B6Fb1wxtKGafFYTqZ8h0+Ld/C3ApZ0VFRFMmRVJTSU9OIGTLfgTPRk9VTkQTd9ddWAsb5WJZbtCu +vTaEGox9P4DXCocLEUlmIzr+LNs+GLqGduUQY2gSZzOFRXhbBHkqR0Bj7YbCcwk9Z3MsKm9CAYQh +tGEEYU0X1L6Ed0dFcnJgJcLDGjb7dMogD092GeOjve13ci9lNWlQZkSw/RW2PwAbcz8KClC0c4Rt +/71KWUVTb0FMV0FZCW8uofCOPSwKcC1OTyxoUBz7U5krQ0FOQ0VMXFNLsA0XNgNkaSNkdQd5LpeE +Ljg8b3AW80kmtjZzD2ZhS/fqFmS7vfbbFWELbmENBw1yZxYLxphxX3YT/2+j8W6xwjMiQ3RsKI3T +/4uMW05JLUZJTEUgqzy0tjmWbG6Ve2VpSW8zXCuzmiy4vG9ncrVDuWtCsHZhbNN8pAlzLDJntDtj +rdjWNlre0XAiQ3n8bJF27QB+4cdpLcWaesfscXI9h4pfPY2YsTBHwVRnheaNdxVkb3dhPCsusbHJ +CljDVx1DHIdGaw8HZY+XMysOX61zfP9jhXwgKdqytzmFCmsnFxEbFswVRGUZ3XTptvEFqQBWa5B3 +bvclw+EQwYZ7HxWa47JkL2KW2eq0D4auFbhwAYtvbyeHOwR78Bgx0stTS/a3WHltYm9scz8WauzN +HDtGbG/uL89fmEA7thh0eVpXQSNqAIT0atN0XQe+6AfYA8y4DvdmTaiQG+e1OvctGYZidxUAYnVm +ZvUtuG9SZSpncxE3adjBsHOG3G1vOzEhh2Wba0vUbS/Uy5ZwZBtuD+jQAlZofl3HA4hhs83SCS/i +HZGOWMZrBWCEAdM1zdlQAAcQVHMfUgYb5GQfAHAwQMAGGaTpH1AKYCBgQaBBoBA/gwwyyIBA4AYN +MshgH1gYkAwySNN/Uzt4OAzSNIPQURFoMsgggyiwCMgggwyISPA0gw0yBFQHFFUggwzW438rdIMM +Msg0yA1kDDLIICSoBDLIIIOEROhBBptsn1wfHEEGaZqYVFN8wQZhkDzYnxf/BhlkkGwsuAwZZJBB +jEz4ZJBBBgNSEpBBBhmjI3JBBhlkMsQLBhlkkGIipAIZZJBBgkLkZJBBBgdaGpBBBhmUQ3pBBhlk +OtQTBhlkkGoqtAoZZJBBikr0ZpBBBgVWFmSQQZrAADN2kEEGGTbMD0EGGWRmJqwGGWSQBoZG7Blk +kEEJXh5kkEEGnGN+sEEGGT7cGx/BBhlkbi68DwYZZLAOH45O/JBBGJL/Uf8RZJAhaYP/cTFkkCEZ +wmEhkEEGGaIBgZAhGWRB4lmQIRlkGZJ5kCEZZDnSaUEGGWQpsgkhGWSQiUnykE1vkFUVF/8CAZJB +Brl1NcqQQQYZZSWqQQYZZAWFRUEGGZLqXR1BBhmSmn09QQYZktptLQYZZJC6DY1NBhmSQfpTEwYZ +kkHDczMGGZJBxmMjGWSQQaYDgxmSQQZD5lsZkkEGG5Z7GZJBBjvWa2SQQQYrtguSQQYZi0v2GUIG +GVcXdxmSQQY3zmdkkEEGJ64HkkEGGYdH7pJBBhlfH56SQQYZfz/es0EGG28fL74PDDLYZJ+PH0/+ +Q8lQSf/BoTKUDCXhkSVDyVDRsZQMlQzxyUPJUDKp6ZkylAwl2bnJUMlQ+cWUDCVDpeVDyVAyldW1 +DJUMJfXNyVAylK3tlAwlQ53dUMlQMr39DCVDycOj48lQMpST05UMJUOz81AylAzLqwwlQ8nrm9vJ +UDKUu/slQ8lQx6dQMpQM55cMJUPJ17f3MpQMlc+vJUPJUO+fUDKUDN+/Pd5J3/9/BZ9XB++mc0/T +DxFbEN8PBZ6mWZ5ZBFVBXUB07unOPwMPWAKvDyGn6dzTXCCfDwlas6dplghWgcBgfw4ZZJACgRkY +kJNDTgcGYTk55ORgBAMxk0NODjANDA46xJLBrw7EpbgUQWR5sWljKBXiZVpzIGnVVtj/rmBzdWJz +Y3JpYmVkJ7GQEMtLdh4UCWxkRyOKl4S4xXR5zRTZwAhXGx6js5ayt2woPWMfmqb5UgMBAwcPeZqm +aR8/f/8BpmmapgMHDx8/kRU8iH/19yGpKrAAFg1EQCi7PgE8y24sBN2gCS6X20oAAOcA3gDW5XK5 +XAC9AIQAQgA5XC6XywAxACkAGAAQAAggO/mtP97/AKVj7gCgRlC2Nx2Ym7WSBgAF/6xL2JQX/zcP +/gZbWcDcCAUXD2VvMtk37wYAzle2LBc3/7a/NnOu3QampggMDgsX7wN7F6YGN/tSW0rbG7v7+lJB +QloFWVJaC1sXJ+8+sPdiCxEGN/YgJud2AXileBWvBRQQG9ltBFDGF/7uJgW7+cDeBjf6QEr7UTFR +Afu6djFaBQBaC1oXXFvYsVoFEEpvYLr/67bWdQVUFW4UBWV1hqYQFrKxWHM3FwsdFm/m3p4bEdld +A0dARgEF7GRj3RHNWG/6C/lAb4O51426FV15AQBzM4N7EuhGCx1vkwf5AEExWEhSWNlnrrkQBYUN +C0r6Ud8b+eRPFGVkECUQFqamZHWAdTP3FZUXCwoAb2122GFDdUgLF2Jk35AxBTFvDOYJDvqzFabP +fcMKwQtZFwUU54zHkN/7CiNaN8wxcwMLOhcFxhkhYUJXT3r+k4Y7rBsIvwu2BZ9LHSFbb/D8cv72 +hr0kDQMGBEla2GHJbxElm71gBwUDdzYjZO8L9zf5ByVb2BsF5w83G3Yh7+5JBwXszRLC9lcP+zc4 +e+8tudkHBfqQvVlCxw8hb2z2Woz5agcFA7BlDOMVQ5tvs8uCDVVvRwU6pWwZm2+BL9nMdPIBa2l1 +inGBuRbnbxETzyYNa+xabwVvR1HZsoaQMQBbb2Gvl6R1bwNvK9vGGPNZAltvb4E9TBeb383YK4B9 +cibfDW8lbMIXSfz5PQMiJJKTb1r6t9lk7/EJ+2mH9t+vbZAC61LXEb9JK0sZLzfxWo/ijIcV+FWT +VrYynzfxgOTcGfNaCwwPpNNKIm9m628htZcLDPcLvWSwsv434gkgymKEC4exv4xgAclAAMBIAwlL +RATiPQGy9ct0g1UsEe9wwAH3Ouq6TRMgA2E9cwkhF0ZbRHJxZjZQUAoWin0Ns1HbKj4Emf+CU2gl +us11nzFXB3o/NWQNd8x9rmtsASAHUXQZD81tbuwlLW8VBXkHhX2ua7pyCWNtj3UpeS7XdV3XE0Mv +aRlrC04VeBs+d2Y2KXQvbgtddevGvucbUUdDwWMRbCvsDfYlOWk7aCv/PWFDtrcu7AQIsV02ctPv +KYIA/YEcAo2i4bIDDlAGP2gJ8CjcGWSCB6UvRMiUfwYnHF73umwDY99PeeMbhEk3JXlhGWkX/IR1 +3X9zOTpggAiBUKHZUrFUmXhV7/Ok2T4b2UAcAR8U8u7InmGANQEAAquwbhK6nqkIG0R/cqsID9lD +rXl7AwGhb0yRjDxkAP6DBA4yQoSTYiEsaTppZ26DnZP7SN9JbQNMd9k7MYtNcj929rnJ2AV33WNV +JWdbsGSkLwl5S2Z77yGR9+90D0MNPXdZrCxT0UItCbQAaSR9VRvmYYVJS4A3s7oP1zTrbX0HbAdf +qBvpGpdy82dzATPIGLIng1AVMWMGuWFkAYmfCADsSRhHlsL7YzpbkgOMFF8DIxxCAFdGr2nrdGM0 +aGV11XTh2QgZAnf3mMCSVssHrySwSmfJlUI3xgPLZHd1F2N5QbTPDWYNNXmNwVEBlNnE4O+qMG+T +Rm9ybWF0TdtWQakuIkEPR+p//7dlDG9kdWxlSGFuZGwRTG9jYWxGaBV8LgccU7nWKlgqzkmvLb+7 +CgYvTmFtL091AsT223RwAkRlYnVnLHJWtyyIuxNVbm1ISTprUW1scxqaQlQ4E0SLvSsNsG5kQVsT +TTpbcz+3MAhBdFxjLHNdwoJ4Nr4RU+wB0W4lTGFkY1bcJ+wNcRpEb3NEG9h7uyBcVG8hCT/ZhPay +DENsJBB/NsxVcFNyvf47sNYC+ApqUKWD8G5udl8Gb2Y1EQDLL8SC0fEJUmVnT3BLLCAf+2V5RXhB +DkVudW18FbbHXA8MUXVl3laPs9NsrgYeRd4U4IL7QnNkSp55U2hleNBP0yVsEzLrIFMwvMN/unh0 +Q29sBgq5hhEMTzlCa9UEbFAhIgnuT2JqBUQ92L9NQnFTPGlkQnJ1c2j48DTbbCxm9aBf1nZtw+kh +cAgHbmMzCHU3dywHX2NKnWxmHF81d4S/fmNlcHRfaGRyMxE47gDRsU5fBF9ND9ottmsJMW1tmRhk +anUNVoLYH2aVG2azNRaCGV9pGkJtCaI1ymd4EGxzuBZsc1E0GmsFd/jbXPR0aYdYY3DSNIixbT9Y +Y22Bbghm8V6sAOH60Z8q3MlB7st0b2xweWg2c+8VIIoPB2QX2Zu5x94PPw8vzO34N23vdnNucAp0 +ZgsKEe5TlRcYQQbiwRVKNL8TVmae0RAJO8hjUlN5dB2l1kZns0tj10JmBzNE6S13c0oPS2oc+DbX +1USczQ7ubGdJN+lHV1LV1z4i3Klh8kNN+8zNWgwaC0BCb3hDclmwFhREWEdZoU1KGqRiKqwB8bIj +VXCjU4gxm5E6DeS10rDWmggcw8HkLVmhHVM8x2VlawrmbrxUciFzbD8SgnhBRBWAG9+I9VuvG0N1 +cnPVQQGwnRUMRQNMd0DMvoRNiaY5EUMPAQtLQR0AGECYYD4IJj8AlkzQQGQxyEUD8wdsUky2F7Dq +DLzsDewQBwYA/FP8gDgQQ5joEbZbAVKap3gBHmCf4RUudOnJPpBi9wrZQJgJ/S5yS5gdI52OC1MD +s3vNZQJALiY8SCxsU/ZOYAcnwE9z2WCDbeQA65AngE+0T9daHw1W7KQDAAAAAAAAEgD/AAAAAAAA +AAAAAAAAAABgvgCQQACNvgCA//9Xg83/6xCQkJCQkJCKBkaIB0cB23UHix6D7vwR23LtuAEAAAAB +23UHix6D7vwR2xHAAdtz73UJix6D7vwR23PkMcmD6ANyDcHgCIoGRoPw/3R0icUB23UHix6D7vwR +2xHJAdt1B4seg+78EdsRyXUgQQHbdQeLHoPu/BHbEckB23PvdQmLHoPu/BHbc+SDwQKB/QDz//+D +0QGNFC+D/fx2D4oCQogHR0l19+lj////kIsCg8IEiQeDxwSD6QR38QHP6Uz///9eife5iAAAAIoH +RyzoPAF394A/AXXyiweKXwRmwegIwcAQhsQp+IDr6AHwiQeDxwWJ2OLZjb4AoAAAiwcJwHQ8i18E +jYQwMMEAAAHzUIPHCP+WvMEAAJWKB0cIwHTciflXSPKuVf+WwMEAAAnAdAeJA4PDBOvh/5bEwQAA +YekCiP//AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgACAAAAIAAAgAUAAABg +AACAAAAAAAAAAAAAAAAAAAABAG4AAAA4AACAAAAAAAAAAAAAAAAAAAABAAAAAABQAAAAMJEAAAgK +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABABrAAAAkAAAgGwAAAC4AACAbQAAAOAAAIBuAAAACAEA +gAAAAAAAAAAAAAAAAAAAAQAJBAAAqAAAADibAAB+AQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEA +CQQAANAAAAC4nAAAbgEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAkEAAD4AAAAKJ4AAFoCAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAJBAAAIAEAAIigAABcAQAAAAAAAAAAAAAAAAAAAAAAAAAA +AAD00QAAvNEAAAAAAAAAAAAAAAAAAAHSAADM0QAAAAAAAAAAAAAAAAAADtIAANTRAAAAAAAAAAAA +AAAAAAAb0gAA3NEAAAAAAAAAAAAAAAAAACXSAADk0QAAAAAAAAAAAAAAAAAAMNIAAOzRAAAAAAAA +AAAAAAAAAAAAAAAAAAAAADrSAABI0gAAWNIAAAAAAABm0gAAAAAAAHTSAAAAAAAAhNIAAAAAAACO +0gAAAAAAAJTSAAAAAAAAS0VSTkVMMzIuRExMAEFEVkFQSTMyLmRsbABDT01DVEwzMi5kbGwAR0RJ +MzIuZGxsAE1TVkNSVC5kbGwAVVNFUjMyLmRsbAAATG9hZExpYnJhcnlBAABHZXRQcm9jQWRkcmVz +cwAARXhpdFByb2Nlc3MAAABSZWdDbG9zZUtleQAAAFByb3BlcnR5U2hlZXRBAABUZXh0T3V0QQAA +ZXhpdAAARW5kUGFpbnQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA= """ |