build: Several updates of the build scripts

- Update of waf script (based on custom fork https://github.com/cawka/waf)

- Redesign the way default compile flags are determined.

  This includes a small semantical change with flag processing:
  * there are now "general" compiler and link flags. These are added (if
    supported) even if CXXFLAGS and/or LINKFLAGS environmental variables
    are set.
  * optimization/debug-mode flags that are applied only if CXXFLAGS
    and/or LINKFLAGS environmental variables are not set.

Change-Id: I6affeed08cc49bca28f076839e40ff790e57437b
Refs: #2209
This commit is contained in:
Alexander Afanasyev committed 2015-01-27 11:05:45 -08:00
1 parent d7bb88b53a
commit 76818632e0
2 files changed
+109 -34

No files matched your search

+104 -29
View File
@@ -1,55 +1,58 @@
# -*- Mode: python; py-indent-offset: 4; indent-tabs-mode: nil; coding: utf-8; -*-
#
# Copyright (c) 2014, Regents of the University of California
#
# GPL 3.0 license, see the COPYING.md file for more information
from waflib import Logs, Configure
from waflib import Logs, Configure, Utils
def options(opt):
opt.add_option('--debug', '--with-debug', action='store_true', default=False, dest='debug',
help='''Compile in debugging mode without optimizations (-O0 or -Og)''')
def configure(conf):
areCustomCxxflagsPresent = (len(conf.env.CXXFLAGS) > 0)
defaultFlags = ['-std=c++0x', '-std=c++11',
'-stdlib=libc++', # clang on OSX < 10.9 by default uses gcc's
# libstdc++, which is not C++11 compatible
'-pedantic', '-Wall']
cxx = conf.env['CXX_NAME'] # CXX_NAME represents generic name of the compiler
if cxx == 'gcc':
flags = GccFlags()
elif cxx == 'clang':
flags = ClangFlags()
else:
flags = CompilerFlags()
Logs.warn('The code has not been yet tested with %s compiler' % cxx)
areCustomCxxflagsPresent = (len(conf.env.CXXFLAGS) > 0)
# General flags will alway be applied (e.g., selecting C++11 mode)
generalFlags = flags.getGeneralFlags(conf)
conf.add_supported_cxxflags(generalFlags['CXXFLAGS'])
conf.add_supported_linkflags(generalFlags['LINKFLAGS'])
conf.env.DEFINES += generalFlags['DEFINES']
# Debug or optimization CXXFLAGS and LINKFLAGS will be applied only if the
# corresponding environment variables are not set.
# DEFINES will be always applied
if conf.options.debug:
conf.define('_DEBUG', 1)
defaultFlags += ['-O0',
'-Og', # gcc >= 4.8
'-g3',
'-fcolor-diagnostics', # clang
'-fdiagnostics-color', # gcc >= 4.9
'-Werror',
'-Wno-error=maybe-uninitialized', # Bug #1560
'-Wno-error=unneeded-internal-declaration', # Bug #1588
'-Wno-error=deprecated-register', # Bug #2288
]
extraFlags = flags.getDebugFlags(conf)
if areCustomCxxflagsPresent:
missingFlags = [x for x in defaultFlags if x not in conf.env.CXXFLAGS]
missingFlags = [x for x in extraFlags['CXXFLAGS'] if x not in conf.env.CXXFLAGS]
if len(missingFlags) > 0:
Logs.warn("Selected debug mode, but CXXFLAGS is set to a custom value '%s'"
% " ".join(conf.env.CXXFLAGS))
Logs.warn("Default flags '%s' are not activated" % " ".join(missingFlags))
else:
conf.add_supported_cxxflags(defaultFlags)
else:
defaultFlags += ['-O2', '-g']
if not areCustomCxxflagsPresent:
conf.add_supported_cxxflags(defaultFlags)
extraFlags = flags.getOptimizedFlags(conf)
# clang on OSX < 10.9 by default uses gcc's libstdc++, which is not C++11 compatible
conf.add_supported_linkflags(['-stdlib=libc++'])
if not areCustomCxxflagsPresent:
conf.add_supported_cxxflags(extraFlags['CXXFLAGS'])
conf.add_supported_cxxflags(extraFlags['LINKFLAGS'])
conf.env.DEFINES += extraFlags['DEFINES']
@Configure.conf
def add_supported_cxxflags(self, cxxflags):
"""
Check which cxxflags are supported by compiler and add them to env.CXXFLAGS variable
"""
if len(cxxflags) == 0:
return
self.start_msg('Checking supported CXXFLAGS')
supportedFlags = []
@@ -65,6 +68,9 @@ def add_supported_linkflags(self, linkflags):
"""
Check which linkflags are supported by compiler and add them to env.LINKFLAGS variable
"""
if len(linkflags) == 0:
return
self.start_msg('Checking supported LINKFLAGS')
supportedFlags = []
@@ -74,3 +80,72 @@ def add_supported_linkflags(self, linkflags):
self.end_msg(' '.join(supportedFlags))
self.env.LINKFLAGS = supportedFlags + self.env.LINKFLAGS
class CompilerFlags(object):
def getGeneralFlags(self, conf):
"""Get dict {'CXXFLAGS':[...], LINKFLAGS:[...], DEFINES:[...]} that are always needed"""
return {'CXXFLAGS': [], 'LINKFLAGS': [], 'DEFINES': []}
def getDebugFlags(self, conf):
"""Get tuple {CXXFLAGS, LINKFLAGS, DEFINES} that are needed in debug mode"""
return {'CXXFLAGS': [], 'LINKFLAGS': [], 'DEFINES': ['_DEBUG']}
def getOptimizedFlags(self, conf):
"""Get tuple {CXXFLAGS, LINKFLAGS, DEFINES} that are needed in optimized mode"""
return {'CXXFLAGS': [], 'LINKFLAGS': [], 'DEFINES': ['NDEBUG']}
class GccBasicFlags(CompilerFlags):
"""This class defines base flags that work for gcc and clang compiler"""
def getDebugFlags(self, conf):
flags = super(GccBasicFlags, self).getDebugFlags(conf)
flags['CXXFLAGS'] += ['-pedantic', '-Wall',
'-O0',
'-g3',
'-Werror',
'-Wno-error=maybe-uninitialized', # Bug #1615
]
return flags
def getOptimizedFlags(self, conf):
flags = super(GccBasicFlags, self).getOptimizedFlags(conf)
flags['CXXFLAGS'] += ['-pedantic', '-Wall', '-O2', '-g']
return flags
class GccFlags(GccBasicFlags):
def getGeneralFlags(self, conf):
flags = super(GccFlags, self).getGeneralFlags(conf)
version = tuple(int(i) for i in conf.env['CC_VERSION'])
if version < (4, 6, 0):
conf.fatal('The version of gcc you are using (%s) is too old.\n' %
'.'.join(conf.env['CC_VERSION']) +
'The minimum supported gcc version is 4.6.0.')
elif version < (4, 7, 0):
flags['CXXFLAGS'] += ['-std=c++0x']
else:
flags['CXXFLAGS'] += ['-std=c++11']
return flags
def getDebugFlags(self, conf):
flags = super(GccFlags, self).getDebugFlags(conf)
flags['CXXFLAGS'] += ['-Og', # gcc >= 4.8
'-fdiagnostics-color', # gcc >= 4.9
]
return flags
class ClangFlags(GccBasicFlags):
def getGeneralFlags(self, conf):
flags = super(ClangFlags, self).getGeneralFlags(conf)
flags['CXXFLAGS'] += ['-std=c++11',
'-Wno-error=unneeded-internal-declaration', # Bug #1588
'-Wno-error=deprecated-register',
]
if Utils.unversioned_sys_platform() == "darwin":
flags['CXXFLAGS'] += ['-stdlib=libc++']
flags['LINKFLAGS'] += ['-stdlib=libc++']
return flags
def getDebugFlags(self, conf):
flags = super(ClangFlags, self).getDebugFlags(conf)
flags['CXXFLAGS'] += ['-fcolor-diagnostics']
return flags
Vendored
+5 -5
View File
@@ -1,6 +1,6 @@
#!/usr/bin/env python
# encoding: ISO8859-1
# Thomas Nagy, 2005-2014
# Thomas Nagy, 2005-2015
"""
Redistribution and use in source and binary forms, with or without
@@ -32,10 +32,10 @@ POSSIBILITY OF SUCH DAMAGE.
import os, sys, inspect
VERSION="1.8.2"
REVISION="a01aa13963437a19e5d8748cf2afd71b"
VERSION="1.8.5"
REVISION="d178df7a9bb732db109001d6b461550f"
INSTALL=''
C1='#/'
C1='#8'
C2='#.'
C3='#)'
cwd = os.getcwd()
@@ -164,5 +164,5 @@ if __name__ == '__main__':
Scripting.waf_entry_point(cwd, VERSION, wafdir)
#==>
#BZh91AY&SY�ÉLt"ïÿÿÿ¼@ÿÿÿÿÿÿÿÿÿÿÿ�†¢¦x€�#)!2„Xaé\÷x¬#)#)#)#)#)#)#)#)#)#)#)#)#)#)#)#)#)#)#)/ºúÕ=[Ý{{žÒá¯Z»må˳]9y›o�3ÏZÝ»½õ÷SÒû5Km»¶÷מ£ß4àÖLÕ—sª_^/^Ü&.ëm˜}+Üe#):z{·¡íªì÷ºìUg­•:vÚi>{×�˜×ÍÞçÁï>jWlúûí÷Ɔ»·}Ýw½öpôYÛÆÞÚîÇ>ï¯m¼Øv,¶uÈ#)#)#.#)#)yì#)ƒÉl€#È(MÛÞœÀYÆ`Ë'F]Ûg¹î¡ ƒ\ê¶#.Bí©¡I#)×Cvf(’ªR]íÒOcAT””•QZÉI#.7 mƒËmªéíÜ<z÷޽[vÎìê¬d¶hÒMyU,j¦zS/ݽ{wß};}ÛºÜ{|ûŸ^ÖY}k¼íŽó7Zö³Nì»[Vónßb¾÷s­¯WÛ¶hä#)R¦Æ¨#/¢‚{$�Q‡•›™Ü»¯3Æ€#)¡{w³%¶d‰k{Û½Ûp $UPÞg»š][i­Ž™½º'¹ÚíÎÞðÉÞ·‡[½n÷ÝæÛ·ÎßYUH’:lVÖíÔš˜×mòÝom;gps³:ÉßõOkl®õãxß{Ü÷ÚµÞÞõXZcÊžÜצ¼�J@#/U&ûÞ<™5õöó½=P®“۽Îo³¾òv}{Öw\ç{ÛÞíu=鯽ï5>÷w³×¾ÖiÛ{º­gº»Þì}ëÜ oJíâ®yžíÅv;·‘ëÛ6÷¼jöª´¥¼u¶Îí¾ª•B’n7nï}Ís³ïžï]{çÝÙïI^ÞÎ>ÙãåÛ4¸·Ý£]´wvÙ]Ëžî6½ç]½wÓ0zOžó{ÌöoƒÛƒtÜÓ€P¡P ” Øwf²i»r޶#/¹u´œçFæù=öò<º—Uó½ç•ÛÒ¥8­¬Á¥—¶ÆJ�¾,¶Þ|sß4PSß\èT#)‡ÞÍîå}ÝÞw¾>ûÛ\àxï¾îñ{�D½Ø[®�ºÓ›ïmµowbn£#/6Ï^—»µÙÉ«�ɽ¾ïuWÑ_{®ó>öñ2}ëáô€Õëï®ïW¯Q×»Ð=öo©_}»°zµ»j[}híîç½÷}öíÝ.·ºÜ÷[Çw®u·´ßl6µçw9á{[NOrÙµäﶪÒ6önæPO¬Ó•,ë}x>&ƒ ÓCê¼5[Œ´ØÕ÷lóž{ÞÁð¢@iñ#.:ù¦�}s{¸>ÊvçNÞös›Ó›Å[Ÿqœ«ßmn÷w½ÙõõióÎ7½'ßX}÷»A·\¥Ë)¥ ¢ûío}bù÷T‰õ½€Å„)õ¡îÈè)¥³%Ú³Þó»°6Nîwž¬i¼û[ï¼à2BÍT+g!÷°ãå Ó‡·¬vîw4=.s›¥soº�YÝÖÝé½´(ªH½vâv‹·*�Ù÷›šìçÓݬ«¯s{¬®ûÙïww¯¾õÞ;_ëßN¥_z·fçÞÚ÷n©Nœ�;ÞÝäS½ŠÓªÕé^¾Þ2Ýv{ÞíÉ÷šûìKQm\¯#½zÝä݃êø´%4B#) #)#) É£@#)&�L&¦ž©£O(PÓMSÐÔšši�)�'¦�5£M©é=!§¨hz�¡ê#)#)#)#)#) ˆ‚#)"b2#jTü§µSÍÒ™êi”zFÔò�S ¨#)È€#)#)Iê”’ ªj~Tª=¥6§¦¡§©£Ò#)#)#)#)#)=@�#)#)#)‘#)� ¦šM#)M`M&OL�žQ²ž“iP#)#)#)&¢ €€#@&™4 éSõOh¦Ô�eêÕzž¦›Ò›P#)#)#)Ð#)#)û|Ûú¶ÛWtI?³’wV5sZÍßom©»%‰£á¶Ôå)) ŠZ$‹‚¢#){V@åöüòÎX?æì¿eB?8ý0LØã©‡š.$…5dÆ •ˆƒŒÅ3d�‚o�ç÷ŸAÿ´“ŸRù¤ :‚]X�A#)»/¾_ Ý„sE¾M̺Ôq·ª¥ŒŽÒ8æœÈó+¹IŽ0zË|-8Þ]Y‰ÔÁt>±q/eBœJµJ”ÄâqQa³[à’;Æöu8@!ÿÄð‹¿äÈx±!4…(ÒDa†*„¨¥"CJˆÌ�Jƒ@Ä"›*„ˆ® ‰ÞI#)iD(ÞE(#¢UH€û! °¤ª8šÂ•¤#/AÔ  )æUÛ%€P`ÌJC3LH„È…Í£fh‰)©±‘2RŒÅ-¤¨je,P4$&�©Q´”DJ™¢l¡l–JÌ ‹ L)A±¤Œ›hÅI)iª$%–’5$‚`Ê"F¶“T,šliblŒPRJ)¤HÄÓ6-�SU¦ª¥$ÖXŒ“$j6‚𥫙³4¦©,™fª%M±1³T’T†™’I5Ì�HÍhÔ„lšf‚‰(Ñd´�Z)J¤†lb`…‚‰šLM6(`›)°L ‘ f*d™ˆ“ %²@‘KŠÉdI�„)%%6)2AQ)Iµ j 1¨lІ,L(¢”��%iDÆ,LTl™M¢’e¤‘4²4‘’T¢Šf¤*iM†$Â@¦ÄjK#.›D�l‚‘&**"#/É�¦l`’MIE$dBDÌˆÍ I™31’³)�¡,b$"HJ“a I4ÒÐbLš,¥0lÚ#M"�¢¤€J3A¤I›RÍ,¥”†“K$Ù¦Q 5,RY‘±£+$ÌI"ŠÀ3c,�¨’È*#/Yš1´YCd£2›4IKZl„Êc $jL”™…2RÍF’Ê•L ¢“QdA%() FHi‘¤H4– 5¤Z¬„34‹&aJB›I²E²E£I2I(J,”4�`"���“,E#.‘6k1“RXÐJl2™¥1 #.…¦MRÆ,ÔØ¤Ê,ÒbJÙ$…”T‘bSL h� Å&M)&a²lš2d*#)„k$ÊÄÃh,›%!K&Q�Ši ÉL¤eˆÁi)TÙ¬mˆL‚dJHŠÑ�±¤™¬ŠLhÂHaQ¤2@KÑ´jR1EbKI‘™¢“ ,ˆ”!ŠY#)Z4™ eFi#.›U-m ¤ª(É© k%ÊHÚ)’™&1¬–‹4HÓLÓM’”¢ÔÈÆÍ±(Щ²ÊFh¡K_‚­Ñ²V�ÈK(ÉMbÖŠÅ¢£BfTDÓl–ƒTÆ¥ªb(lXŒ4¤IÌld1¢¡–¡5E‘MdÈle•E¡bdÌjZYŒ�¨°ÌÊj³F™ Y©¥°Ö4ÙD–Te*±MZM¤+6V³RRÃm1B™b´i©Q%¦QDe�¢±¶f�²Ufj�V*J6ØÚ6 %CDB¨¤*#.±ª5 Ô†Ö!5’E´Ñ ¥QH&ˆÃ5(”Ú•F£d“hƤ,jšLÚµ›Vš±ašÆË"eMdI–šaI3j¥¨¦ÌÔÒ¦kJ¥d­J˜ÛJ™JM©¦ÔÙlR#.lÖfd’²ÅÁ©-¥´²ZšFÄ@`i±¤£H„Q°�D1mÉ0)µRD¢Å2šÆÒ“MŠŒ’h4”Â…ŠeDX¤–cBi¢™)“ÊlÐÆ‰ CbÅ™!ŒR³RX m™dË,Ì!#/RÉ�ƒ ±QFÆÄ””dh4‹2‹S1³¤¬i„̓FM‹ lËP)¢„±DE")´d,Í¢Å��Š4"¢4––H¦`´)e ÂH“�šJFS`ÉlB’Ò$“f¥š¨Ò©™‹#.Š”Òl�¤Ê,ÑV(�Ì(’‰I$ÙI4•%£)3H†•5–lme6V*16)4Ô“,É¢¦[R2e-%%²$”K1 Ó(ÑD#.e“d¥ LDÔ�‘h¬FØM‹EFŠ6ÄVšL2LÑ%&‘h¦#)6)"±`Û-4’T†£Y3#.%,Èl…hѰ†Ñ¨­“F„Ë#/ÐDEd¶* c ()5JQ5cXÊfhB¢¤“i…ID–��ÑY¶©‹2j,Q‰+%¡¥4±¥%4IRÉ*JR”£VÄ¥"‹%+e%�²i*,m¶f)”l¦²¨i&l‘I±a�B"Å‹LÉC4`ÚL‰L±"Õ(�0™Kf"”j6¢ØªHB¡’c@FÊj�£i’X©#)ÐbŠL"MZPQiMR›IQ[ÆÖf+%¬È#/Ñlš’‹Å(#4cf„I �’˜4`ͱ�‹hØ¥6ÚJh‚±€É¨¨�­6Ë-FÑX±kI¶¥³d4²±*ŒZ)–*¦¤Ò²Œ£E(–LYR¢ÒVM¤Û%dÕŠM¥3(²m�EIF‹F¶Û5­4f¡²X‰*eEF° Z#.&¥³VLS*ÑDUŠÑ¶Å¢ÛhÚ¡–Mkjš••DÙH6’cÊÂÊQd�šTEÌlII”“"!jMb̵L|>ó~i¯éyÛÇð‘{ßÍ\«E½fý;i6N£#ý¿òþÞS´W d]j¢$LLY¢ÒE˜pÿ«ýT|#.¥)°T\AÈŸúgQ”lÿ©ö�+Û=i÷é8ÈnT-ƒ²Q¥U¥uI ¦é Dn�™#/·ÿ5_Ͼ!kÒîƒÿFÃû>û®ÃüëI2h•ÌäDL³¶»Yb"<ŽÂ #.¶nà]uø^Ì?v§;q0ž¶ã?¨…NéÇX;£QLC§6íˆéTf¥5F�ª2Ù$”¤©�·_Bðjck´ðb­¡Ø£Â¢5Š UwCkJÉTe0ÀÙ¤ŽJ’5äØ2¨…*(Ä´ÊÍh¥P5W³Ñü½Jô·³ÍÍFÉk1Q$âQb-ÀFiw.Š‹u@(þó«ÝçlËÙ¹I��¼ëÅ4â�" ÿïCýª0+1‡j¢AÄŸ6.ZÑ1íÃxÑ#.-WÇýº4=þÂv#/…•µÚ*�6P…²P€§†t+üs’ãLãPºˆÑˆí}[ï ÿi<;ð:N¤¥!V&CS‰MõlJ=i¦Žäâ+kqeœÿ7ñgH \Zšp»PD(aB1¼Üó®ît]ÆŠæå&�¤ÊDUCBWœŽÂyChJ;sÑ§Ó ¡�ì•(*H#(k‡=?#/\‡nÔØ28¸o}up#§²®ó@’�ñkñÛ^éé{𮥷³PhmØ£Ö21ðùÞÞ–H‚ê4|:EZ9`ˆÜZ©R² ä 7n\“w]‡uÓEA½ê·žw÷/š«H(¡ä•š%€‰³[5¸�ND”Å~uKꢱü+LySÿ5é‚eƒÿB©6J®YÆ*%¡x¨È I+ù1�ϳ iuÔÎ%É…V’QøUkÛrú#/ç÷EÏèñé™ìâ£Ær2?f_ C<ᎲB8ãzçÿRƒ¹5NÆ¡ßÆ—dÏ>5~Ä�±qC¡.çíí}ËP˜Îo¢÷Ìå!³P‘ö`rÆw¸C:¥ ÓÖèÛAÙÙW0´d;Ò×¢ÆÑX»0¬MÖ/R„PX%ç¥ãèü1F‰*'Mh³f ØÒƒÆçµ—S+áîß¿ZÄ›#.KHíÿ—!¾ŽëØc$4Ù&27åúí221ÀÍì¢aÍ×e/)Qì´½ÅFv“¤8ÆäÈÈY[i¯ÙÒ”cB'ë!î.êm+Ç3,›Ås]He �¡»¬ªJ]§<0=–¨™ÿ³�wîÄê71)¬‡$LÀÅ¢šÑ`Æ# Rzrå}�_?·ª¶±¡[B�yÖ ’'ˆ… -%$"˜K<P4€«µËcIÌŽ2�ø3\σ�%²aj#/Î,³$©±6„ؘÀî5Œ#CÅ TX]Q4£¶ôõ挃þ‘¢è)€,šùPöÍ�åDå’¡„DJÚÍ›éjõ(�µïï´ò76êo„º‘‚…4£†ÜîÅ“q�¤Þ¨.´BÒ$¸àPj‹{)˜²#¿¦kJlÍFd@îª-¥Q4í»¿‡—,�ªJgoeYRLHÀ]ë²áͺ$cb}¤e|¦x<C%¨÷b#.²µ¶–œe‘L„5|HÙæá¶ºk#/ÓÙÖDVxvT<Y€Qâ�µôáF$Nú¦ûª_…Qš‘Ñ}ÎS3–»{��ÚG½W'²¬äé•Z …WµÍòÂ?ÁV‹S:Ð¸í»™áW'h#.lÌ‚MˆZ�ÆÕåPý¤óÚ˜†‘�¦Ã¬!açž7?Òú_}ÓGúzô¾m.¨l8ã]Y„?ÇÒ¹3L‚4‚ÃÉ XŸm½§"úr‡±5¸uì‘FÀ*”Ð!¡ÈiZ¬mØ�\¤<ad¶A�ëÙÙY.ÞðÁx#/åÄÈq0”ÝM6á¯GÊ�ŸCay¯õ'h L~²XG=ñö«>^3ßa·ÊÌT;ï’Lq»óÆV1^75&}U4B?->Ó36T ¿sž ª#!slÏdª¤?¦Bü†”<ªô©‡«(uÉ=Rò‡x6Ÿ£WÍüIFY¨è_Ún‘õÐh¸ùyϳwkŽÇ'~jKOWáÇY/(yå…ÂHÎl4cLine truncated
#BZh91AY&SY�ê¹Ü&ëÿÿÿ¼@ÿÿÿÿÿÿÿÿÿÿÿ††"¦T€�#)a2€€Xaìœ÷^k¸@#)#)#)#)#)#)#)#)#)#)#)#)#)#)#)#)#)#)#)úæDÚ±ÜÅÓe_Z»l2Øi—m[7×Üî]ÜZ+Ù©.šµ­Oœî£Ý“©ŒÖZµÛ�¯u§Ëï«î\&}½tÅ+¸Ê#)u{»ÞnG¶�=ö:k“ž¯[�]WN�óǘÖmÜÏç.ç[™ê½é )æß_;wàßmíÙ^½Ý°�lZúqO¯¾À#)#)(#.#)|ì#)ø[k#)›íJh#)=Í ÷·˜#8=·i`îoG#×¹Nu¨h#)è‡_wµ»z:#.ÀF„…#8ÐôtrÐÛMRQR•A@HØ÷u).Å2”€¢[möõéîƒG¾Ïª¯¥ó5ß=0×½Üë{Ý.½¸ U; {iÓNۦͯ»Ü¥[Ucé]Íñïz×o}콫l·zÏ6ëÝíÍU¾ïZ÷�¬ï7ÝÞ÷±îGÓ,×»ëº|k>îæÎå{ëï�}·²›˜oOvlôåîáÕèÓ#)³Hè==5œÏq7½{“A #.÷½Õë)$�S{Üí¯]#8Hª¡(Ðê#.ìª[ZÒ[w½íaîÚYÙï jw½åïy÷½÷YØ;4^޺ȣçgÖù÷Þ÷Ç·�j›;½*›m«í&�lk;zï½ïyö­÷¾ï> +îø®Ùç×YãÖP(•Z/®8fbÞ}·**½›¾÷Ýög7Û¶{¾½æ6½ÞóÛÞ÷xÍu×ß{ïTK7}y¹é•Ø0v�oc{Éßkصzœk½Ö=2)ÉäzR™{¡máíݽõ¨C®s;æ^ï¼Û}›»Ìo5íÙÎûºtú=Ǻ-÷4¯[›ÞÛÙ^ÓŸwïg®Þ_Ö#)/yož}óß^Ýä>>ñzõæH#)*#8],û‡v#8õ«·LvJ•—Y´z7›Óצƒ¹ŽMu†ôgi2íp²öìòöØiPyÏ»ëÑï€#)Ïw-º#):÷·>Û½­»æúûÇ�ðN{»îæÞ÷¾º÷±öÎ÷!ö©ç:!m®’»rF†ŸÓßo�}ÝßZZëŽÃzï{ÞUÏmžû>-ëîîÝo¤CÚûîÓîÞ§Û7@ïUãÒZÑåÛ×;uÑ>Û‘î½ßKÙç[¾Û·Ó»/wݾËËqî�Ìo¡äï-ôWÛŸ,ë/\è,Ù#)wÛ¦Žëg4­Vï^Ã:nƒ_A�vð¾‹{è[{ Së}æç½‡|D¯«'Ýí¯¯}×'¯p½Áëîõ÷žçzÃ×omÛï¹}ÛÓ_fï½w¾öï·Ý{o=ì7{gÝÜŸos›¸è)ô ök¡Ð®÷:wd>¨=ápiAáÇ]N»³à#)6Ç£F€#8.»#8ëL#)�³‘¶Ùï‹îîhk@�f(VÎû+ï°ïPi÷7�]aõêûÎô½¾÷Þûtû^¹»¶ç§½½ØÑ‹—k—gX:áÜßovkOuÝ·S›=wF²¥s³§Û½ïª÷{ãÞ¼A÷Êou‡WÌùÓu…ìÃFŸ}îñ³mtÛ¹²·wܾíî½wozî z}zûH¢ù×YÓÅ]ÞZòõ#8úJÞW|%4‚#)#) #)€ÈÉ„ÈÄÓDIž© ýHh#.#.#)h4õ¦�!44h&I²˜¨S&ž¡å h#)#)@#)#)�Hˆ"b#)@CFBIú&¦žÕ6¦i¨4&� ž i #)#)#)#)ž©I4�4SÙ1&TòOÓ*~¨ý(1Bi£@h=OP#)Qê #)#)#)#)"HA#)@#)L€ 1h#8{%?Jm&§é¤™¦š@SCM4šˆ‚#)�@L&“$Ê7¢šdýIêzM4õ š0ƒM#)#)#)#)ÿöùoã¶Ú—HÄÿh“mÖ\ýͶ§Lš)oŽÛWtdF ‘Yb¡ ’Š x¬ÕíöT­(_„~R;Å~hrßó¡MaDÕÆ*j0÷ICâï=ÞíL«2²ÎÆŸ�‡‰?±ew V䢠®Œ@ €]»>¾÷…ãpŽR[›†d&œªEdã&2MÓUËÌ&7¸fYní1sud©<+x¬JÁ0«#)ø»"ï âˆÅ<“zɭ²ÔÒIcþw„;þvCÅ‚Vmb’뮪ÓmmªÄ‚Æ+  È "*]T"´"  Ìˆ#)ˆ!!ˆ¢6 #b ¤ ¸!D#)Ê7Š¡Q¤µ HŒŠ–‚ ¨�*Ûl�H Ĥ34ĈLˆhÆm3DIMH¥Œ‰’”S¶’¡©’K#.hÚ•’ƒ‰@“4M”-“+2‚*‰cBi…(,i#&ÄZ1DRJT¦j‰ e¤‚¤�LI5´š¡`̳cKR1AI(¦‘#LØ´j5J­6ª”“Y,L™&HÔ[MRµŒÓ Ùšf©,™M¶%M±1³T’jadQ$Ô[25#5£R²iš#8)(ÐRZH-¥RC610BÁDÍ)‰¦Ä0M”Ø&H†3€…L“"Qad¶H)bY,‰"R‘I))b“$DÆJRmBZ‚Ìj"¡‹#8(¥ `E€ÉDšFQ1‹&Sh¤™i ¤‰ Å‘¤Œ’¥S0Ö�©¤Q6“I›©6,h’#.�R$¢¢¢ ØÒRÍŒI©1‘‘ 2#4�&Y˜ÉY”ÀЕ‰’¤ØB@’M4´“&‹)L6ˆÓH£B(…) e Ò$ÍRÍ,¥”†“K$Ù¦Q 5,RY‘±£+$ÌI"‹@3c,�¨’È*#8Yš1´YCd£2›4IMm6#. Be1�0‘©2Rfd¥š�%•*6(˜AE&¢&$È‚JPSF€a$d†™DƒA `ÃZhf²̲,™…)#8m&ÉE²E£I2I(J,”4�`"���“,E#.’MšÌdÔc J†S4¦!!°©“DT±‹56)2‹#&$¡M’HYEI%4Á@ÆˆÚ RdÒ’f&É£&B¡�F²L¬L6‚ɲR„I,™FB)¦ƒ$e2‘–#¤¥SfŠ�£Q �L‰IZ1¶4“5‘CI�I #*4†H bZ6�JF(¬L´™š)0’ȉB¥�£I�ÆQšCeª›[h)*Š2jhÉA²’6Šd¦IŒk%¢Í4ÆS4Ód¥(µ21³lJ4*lÆR3@…#8ZýÖ·F�²´†BYFJkZ+Š� ™QLQ²Z#.S$ÕLE#.ƒK†” šHÖcc!‚¡–¡-E‘MdÈle•E¡bdÌjZYŒ’*,32š¬Ñ¦B¬�Hªm…b›(’ÊŒ¦ÛE5i6�¬ÙZÍJRša¶˜¡Lˆ±­jTIi”hŒ±´V6ÌÑT•Yš£U„Š’�¶6�‚ÉF¨Í#8¢�¨4ZƨØf¤6± ¬�¢6ÓD2”IE š(Ã5(”Ú•F£d“hƤ,j™2µ¬­i ‹Yµ,‰•5‘&fjiH¤™­RÔRÒS54©•¥R²UJ˜ÛJ™JM©¥i³“C[5™™$¬±A°jKim,…¦”hˆ Ôi(Ò!l„d B‚™&6£jH”X¦Slm)4ÑQ’M’˜P¢‘L¨‹‚ÒÌiƒMÉL˜ÖSf†4HJ,É b•š’ÀclË&YÌ!#8RÉ‹f&ÄERQ‘ Ò,Ê-LÆÌB’±¦6#.6,L1³-@¦ŠÅˆT¦Ñ�³6‹66(Њ#Ii¡"“aK-D˜¬„ÒR2›Kbš”D’lÔ¢UU31a±RšM‘´™Eš5cD†aD”JI&ÊI¡*KFR6f‘ *[,ØÚ#8ÊlÑDlblRi©&S&Š™Z‘“)hÙ)(Í‘$Á,DÆŒi”h¢²É²R†&"jHH´V#l&Å¢£Eb+M&&h’‚“H´S#)›‘X°k-4’T†£Y3#.%,Èl…hѰ†Ñ¨­“F„Ë#8ÐDE¤¶* c ()5JQ5cXÊfhB¢¤“i…ID–��ÑYkSdÔZ(ÄÊÉhiJ4¤¦‚‰*Y%IL¥(Õ±©"‹%J£ £d±¶M%E�U3Ê6RÙ T4“6H¤Ø°ÒDX±i™(fŒIƒQ)–$Z¥¦)lÄR�Eh¶*’¨d˜ÐƒMQ´m2J*@4¢““V”ZST¦Òj+cXÚÌÅdµš@V‹dÔ”X¦)@ÉA�š$&6J`у6ÄV6-£cJm´”2Ñc“QQ!Z&m–mFÑX±kI¶¥³d4²±*ŒZ)–*¦¤Ò²Œ£E(–LYR¢ÒVJɶJ6É«›JfQdÚ4)ŠJ4Z5¶Ù­i£5#.’ÄIS(Ú*5…Ði5-š²c#*ÑD[EhÖÅ¢ÛhÚ¡–Mkjš••DÙH6’cÊÂÊQd�šTEÌlII”“"!jJÓ-Sõ—ñ/±^íÏáEâþÚBÄÑZa¬ÿG#8)«L¶ýoçlá.Ñnl|;²YzÞ¼½×ú¨ÞžŸÅü]|0ÎE¸9þôè2�ŸÍô‘ížtˆ}ºN2�â´4×,†ä°RÈÄi�ŠÆ7U";W÷�¿Ÿçvøõj�ÿ�ýŸäãÇŸ÷¶V2ñÆ]QTÁK;kµ–"#Èì, ‘Ñ;f﮾ÛÙ‡èÔçn&ž–,gð®éÇX;£‚�#ÇÁÚÓä5ru½�c,“#8J˜ÛuÊãk´ðb­¡Ø£Â&9•B«²ZVJ£)†’9*Hד`ʨJQ–™BÙ«J�ªp¿åÑ�^–ö`¹¹¨Ù5f móÝx1ØÒÐMÚ¬"nÈcÿìI§{7)1 Š7y׊{;wÍÛÊ»ò(À¬Æª‰|˜¹j�1ŒùÃ)bE‘Wáýû,��µ£0#8ƒ+k´:Ul¡ d¡€§†t+û™Éq¥j©%¢YR�Ç9°þøÍ;(82Ø,‚; I§¡§vfU¤q\¢:��+…{™’l%mu÷ùyáIdÒLóÛÍæ)®ît]ÆŠææM!I­$)‚ø ÌHe€a §Jñ¹ä�²&Zd‚‚°BP” ÇMì�ó²ñG6h MMWNÁ„¤Õ2¢RiTD�ñWôÛ^óÒ÷jº–ÞÍÓCÎÜÑ‘AðùÞÞ–FDP£G¿¤U£–�Û¯fÞ^+½û©ÝGJåÉ7uØw]4Tà«yçRù]äKDkëJÍ#.„@DÙ­”­Ä dX¯ÓT�á Çó¦óÝö_Ž Mû’3–I;êc"U…È‚0 4ˆãþø#.z?ž�nÔDSS8–ZIGÛU¯mËè3o¾¦ß›æzø¨Æ±œ�á_¯W1 òPÇYO:OõáÜš§#8ãPïãK²gŸ¿rN؈z%"ýUÕÔúÖq1ŒŸ+]­ñq P튀€ „ŽôÍpÞá ê”)3OeÐ1¶ƒ~ʹ0!tZ2ékÑch¬]˜V&ë¡B6 ¼ô¼}oÇaè’¢tÖ‹6j#.�((Æç±—S+áîß·ZÄ›#.KHíþ´‚ò�öÉ í6IŒ�øúí}7tlŽƒ8ÙDË­×6e/W)QÚi{ʤç'Hq’I22VÚiýý!F1dQ>ò7î]ÔÚ,h¯̲oÍr±ªý)¨ÓéphÛÓwâêü¯ ›ýŽßƒ÷û_=ívŒrÜÖ»«¶#,Äa*ON\¯Ëëð{zÚÛÉBE–Ѐ§^u„ÂEä… ä!BKII¦ÇÙŠ" ³H#8°;\¶4¹‚ñq”oÓ5È|\i-‘6ÍAC™Å–d•6&ЛÆ£1#8E�ñhTM(í½=3FAÿHj]0“_*žÙ±ü(œ²T0ˆ‚é[Y²x°00Q!­|›S%6�#8Ò‰s»MÆB“z º÷WšM>Wد"{8ÌœµÒ‡eBS¦´¦Ì4‘º¨¶•DÓ¶ìþ^\°f¯ÎÞʲ ¤™*‘€¼+²áú$cb}¤e|¦x<C%¨öâ#.²µ¶–œe’d!¨£âFÏ'#.µÓXV˜6εåt+<{jLÀ(ò@Þúñ£'…S}õ/ÅÜÉÈæƒÛdðÝi¨g±ÃfqíDU‰ê£ºeG²•ñûañÏ#8Cê|³£ãGÔÅC¼"÷ý¾r*Q"qJ„R4(‚w8¹GÜW–ÔÄ0„Œm6aq‡–xÜþóé}×MÞá½ö2uCaÇêÌ!ýÏJäÍ2Ò &�"ô9ßW¨Þ]=ðzÓYN˜“a ˜éIwÒL±ªÆÝˆÕÊAãÆ‹%² o^ȆÊÌ‹ßPo‰è÷�i�ho7¯Ù£Y¸øÖÍûøÑsW½QNo‡ø˜ °ù—C³F+žqô¼#ßážÛ†Ï•˜¨wÛ‚Loµ·Ž2±ŠðÚjLù¬Ë´ú÷® #)Ù±Ÿ}²Z‰HJÅW¢š&È?dB|J^èš±J;jA´ÄŽØ—,Za�ù=±*øð¥Line truncated
#<==