diff --git a/.gitignore b/.gitignore index e8d1efd..2831ed5 100644 --- a/.gitignore +++ b/.gitignore @@ -4,8 +4,6 @@ *.[ao] TAGS .nfs* -.waf* build -attic -.lock-waf_linux_build -tools.waf/__pycache__/ +builddir +subprojects diff --git a/meson.build b/meson.build new file mode 100644 index 0000000..026a9df --- /dev/null +++ b/meson.build @@ -0,0 +1,20 @@ +project('new-session-manager', 'c', 'cpp', version : '1.3.0', license : 'GPLv3') + +liblodep = dependency('liblo') #and not 'lo' +threaddep = dependency('threads') +jackdep = dependency('jack') #and not 'libjack' + +executable('nsmd', + sources: ['src/nsmd.cpp', 'src/debug.cpp', 'src/Endpoint.cpp', 'src/file.cpp', 'src/Thread.cpp'], + dependencies: [liblodep, threaddep], + install: true, + ) + +executable('jackpatch', + 'src/jackpatch.c', + dependencies: [liblodep, jackdep], + install: true, + ) + + + diff --git a/nonlib/nonlib b/nonlib/nonlib deleted file mode 120000 index 945c9b4..0000000 --- a/nonlib/nonlib +++ /dev/null @@ -1 +0,0 @@ -. \ No newline at end of file diff --git a/nonlib/wscript b/nonlib/wscript deleted file mode 100644 index 8a355d7..0000000 --- a/nonlib/wscript +++ /dev/null @@ -1,22 +0,0 @@ -#!/usr/bin/env python - -def options(opt): - pass - -def configure(conf): - pass - -def build(bld): - #Thread is needed by OSC/Endpoint - #File is for nsmd lockfiles - bld.stlib( - source = ''' -OSC/Endpoint.cpp -Thread.cpp -debug.cpp -file.cpp -''', - includes = '.', - export_incdirs = [ '.', 'nonlib'], - uselib = 'LIBLO JACK PTHREAD', - target = 'nonlib') diff --git a/session-manager/wscript b/session-manager/wscript deleted file mode 100644 index 7d3b4fd..0000000 --- a/session-manager/wscript +++ /dev/null @@ -1,56 +0,0 @@ -#!/usr/bin/env python -import subprocess -import waflib.Options as Options -import string -import os - -# Version of this package (even if built as a child) -PACKAGE_VERSION = '1.2.0' - -# Variables for 'waf dist' -APPNAME = 'non-session-manager' -VERSION = PACKAGE_VERSION - -# Mandatory variables -top = '.' -out = 'build' - -def options(opt): - opt.load('compiler_c') - opt.load('compiler_cxx') - opt.load('gnu_dirs') - -def configure(conf): - conf.load('compiler_c') - conf.load('compiler_cxx') - conf.load('gnu_dirs') - - conf.define('VERSION', PACKAGE_VERSION) - - conf.write_config_header('config.h', remove=False) - - print('') - -def build(bld): - - libs = '' - - bld.program( source = ''' -src/nsmd.cpp -''', - target = 'nsmd', - includes = ['.', 'src', '../nonlib'], - uselib = [ 'LIBLO' ], - use = [ 'nonlib'], - install_path = '${BINDIR}') - - bld.program( source = ''' -src/jackpatch.c -''', - target = 'jackpatch', - includes = ['.', 'src'], - uselib = [ 'LIBLO', 'JACK' ], - install_path = '${BINDIR}') - - - diff --git a/nonlib/OSC/Endpoint.cpp b/src/Endpoint.cpp similarity index 100% rename from nonlib/OSC/Endpoint.cpp rename to src/Endpoint.cpp diff --git a/nonlib/OSC/Endpoint.hpp b/src/Endpoint.hpp similarity index 100% rename from nonlib/OSC/Endpoint.hpp rename to src/Endpoint.hpp diff --git a/nonlib/Thread.cpp b/src/Thread.cpp similarity index 100% rename from nonlib/Thread.cpp rename to src/Thread.cpp diff --git a/nonlib/Thread.hpp b/src/Thread.hpp similarity index 100% rename from nonlib/Thread.hpp rename to src/Thread.hpp diff --git a/nonlib/debug.cpp b/src/debug.cpp similarity index 100% rename from nonlib/debug.cpp rename to src/debug.cpp diff --git a/nonlib/debug.h b/src/debug.h similarity index 100% rename from nonlib/debug.h rename to src/debug.h diff --git a/nonlib/file.cpp b/src/file.cpp similarity index 100% rename from nonlib/file.cpp rename to src/file.cpp diff --git a/nonlib/file.h b/src/file.h similarity index 100% rename from nonlib/file.h rename to src/file.h diff --git a/session-manager/src/jackpatch.c b/src/jackpatch.c similarity index 100% rename from session-manager/src/jackpatch.c rename to src/jackpatch.c diff --git a/nonlib/nsm.h b/src/nsm.h similarity index 100% rename from nonlib/nsm.h rename to src/nsm.h diff --git a/session-manager/src/nsmd.cpp b/src/nsmd.cpp similarity index 99% rename from session-manager/src/nsmd.cpp rename to src/nsmd.cpp index ecc9378..3effb85 100644 --- a/session-manager/src/nsmd.cpp +++ b/src/nsmd.cpp @@ -17,9 +17,9 @@ /* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ /*******************************************************************************/ -#define __MODULE__ "nsmd" +#define __MODULE__ "nsmd" -//debug.C has only one function that gets used multiple times by debug.H and for logging and printing +//debug.c has only one function that gets used multiple times by debug.h and for logging and printing #include "debug.h" #ifndef _GNU_SOURCE @@ -46,7 +46,7 @@ #include #include -#include +#include "Endpoint.hpp" /* for locking */ #include "file.h" @@ -81,7 +81,7 @@ static char *session_root; #define ERR_SESSION_LOCKED -11 #define ERR_OPERATION_PENDING -12 -#define APP_TITLE "Non Session Manager" +#define APP_TITLE "New Session Manager" enum { COMMAND_NONE = 0, diff --git a/waf b/waf deleted file mode 100755 index 061fb98..0000000 --- a/waf +++ /dev/null @@ -1,172 +0,0 @@ -#!/usr/bin/env python -# encoding: latin-1 -# Thomas Nagy, 2005-2018 -# -""" -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions -are met: - -1. Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - -2. Redistributions in binary form must reproduce the above copyright - notice, this list of conditions and the following disclaimer in the - documentation and/or other materials provided with the distribution. - -3. The name of the author may not be used to endorse or promote products - derived from this software without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE AUTHOR "AS IS" AND ANY EXPRESS OR -IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, -INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR -SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) -HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, -STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING -IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE -POSSIBILITY OF SUCH DAMAGE. -""" - -import os, sys, inspect - -VERSION="2.0.18" -REVISION="cdcf693bc7ee4819313101f5afd42692" -GIT="ea17399be6950863390fb7bf25b747b67afe0ce3" -INSTALL='' -C1='#-' -C2='#*' -C3='#(' -cwd = os.getcwd() -join = os.path.join - - -WAF='waf' -def b(x): - return x -if sys.hexversion>0x300000f: - WAF='waf3' - def b(x): - return x.encode() - -def err(m): - print(('\033[91mError: %s\033[0m' % m)) - sys.exit(1) - -def unpack_wafdir(dir, src): - f = open(src,'rb') - c = 'corrupt archive (%d)' - while 1: - line = f.readline() - if not line: err('run waf-light from a folder containing waflib') - if line == b('#==>\n'): - txt = f.readline() - if not txt: err(c % 1) - if f.readline() != b('#<==\n'): err(c % 2) - break - if not txt: err(c % 3) - txt = txt[1:-1].replace(b(C1), b('\n')).replace(b(C2), b('\r')).replace(b(C3), b('\x00')) - - import shutil, tarfile - try: shutil.rmtree(dir) - except OSError: pass - try: - for x in ('Tools', 'extras'): - os.makedirs(join(dir, 'waflib', x)) - except OSError: - err("Cannot unpack waf lib into %s\nMove waf in a writable directory" % dir) - - os.chdir(dir) - tmp = 't.bz2' - t = open(tmp,'wb') - try: t.write(txt) - finally: t.close() - - try: - t = tarfile.open(tmp) - except: - try: - os.system('bunzip2 t.bz2') - t = tarfile.open('t') - tmp = 't' - except: - os.chdir(cwd) - try: shutil.rmtree(dir) - except OSError: pass - err("Waf cannot be unpacked, check that bzip2 support is present") - - try: - for x in t: t.extract(x) - finally: - t.close() - - for x in ('Tools', 'extras'): - os.chmod(join('waflib',x), 493) - - if sys.hexversion<0x300000f: - sys.path = [join(dir, 'waflib')] + sys.path - import fixpy2 - fixpy2.fixdir(dir) - - os.remove(tmp) - os.chdir(cwd) - - try: dir = unicode(dir, 'mbcs') - except: pass - try: - from ctypes import windll - windll.kernel32.SetFileAttributesW(dir, 2) - except: - pass - -def test(dir): - try: - os.stat(join(dir, 'waflib')) - return os.path.abspath(dir) - except OSError: - pass - -def find_lib(): - src = os.path.abspath(inspect.getfile(inspect.getmodule(err))) - base, name = os.path.split(src) - - #devs use $WAFDIR - w=test(os.environ.get('WAFDIR', '')) - if w: return w - - #waf-light - if name.endswith('waf-light'): - w = test(base) - if w: return w - for dir in sys.path: - if test(dir): - return dir - err('waf-light requires waflib -> export WAFDIR=/folder') - - dirname = '%s-%s-%s' % (WAF, VERSION, REVISION) - for i in (INSTALL,'/usr','/usr/local','/opt'): - w = test(i + '/lib/' + dirname) - if w: return w - - #waf-local - dir = join(base, (sys.platform != 'win32' and '.' or '') + dirname) - w = test(dir) - if w: return w - - #unpack - unpack_wafdir(dir, src) - return dir - -wafdir = find_lib() -sys.path.insert(0, wafdir) - -if __name__ == '__main__': - - from waflib import Scripting - Scripting.waf_entry_point(cwd, VERSION, wafdir) - -#==> -#BZh91AY&SY^ePPe(¬#(0Z0e#(bw{#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(>.%PV;FPevֆFjm/n׷zEZ޷@{c9;9z9HxwR=ґz뼨͕};yLPi'}^nڔ#*sᄐ#(#(#(#(ƀ>=t#-^F+ٽ{Q}B#(2Po@#(PIPtinˆ #(#-#(@֒ #(#(%UFحi{tüWmX׺몲fT6ՉJmW{g->nGGo=mvfۛj{|][O|rsˏxw#->41RARmǛtV#*C̍aPwp`#(!(z=E:q䵆ow%/{s=E#(m5د]i4#*i}G#( !s_M>۽=>[׼zӠ:Omn:dry'=۶wNۮۄ[]dvZxnEz}n֪cq-b>.{e{){|͖jv'1w/ݺy=a:wJ˝;*ֶ.`S{ڃ}oԢ#-* ٝg#(lLEw4:Ghyөz#-]v풗Ѓ+F#(؀Ut^ײ=-}{םC{'(m#boUzpe뺈;Λ ;;Gw;`]iܞjmwG/=}[jenyX 7n9flc(yC:]#fֹ;םz9@9olۻ];8;pCaWmeoCASjֻa}z֝.yt;q']GCZ0n:s׻yϟv{=yf޻(#(xw>>8@(]㴀Ff,k`{:-nYuvR#(gUUv9ws=ޘ]Y]{{>|Ƥ눞n#*R^mf֛Oݕqeכv]_h #(@#( CBhѓ h "Q Ѡiz #(@@LaMOSP2zA#(#(#(#(#(DA 0F <ڔmF(4mA#(d#(#('RD!24~LAOPzD#(#(#(#(#($!4#(i#@dA!F!4h#(#(#(#(I &#(&SM=S0*{5SmO'S{R#(4#(4#(#(UL?ٹs괻gƫN"`"{꭮kVB4L֧?KL3.˜F"VyxXP=|O^#-GX#@o&A1Ic|G"N*NC6/qW)EJQNX:gT 0/Aki5JwWjյ(1) *#-*2#(p'IYBD#( b#(QE #(#(_]--kimWt[Z{UmS2d,fjaM 3*,dTQM#-&h A(jj5FmSDhCQDSA 5,h`i"h%j"Ҵ@,ff1#QڌHi6C51L4iec)MSM-ifID2ɶm4ԔlZٛ2d 5&%ȣdH#-4 A 0Ң LE($D ZFԉ,D42HJ0̂VX31"K&lcE"Y!BFJiؒ"J2hhɉIF($@VAMEfSiS0MdlD)mI`Q+EJMAZJ()"JIR("0c$# &RJMEXHjHb iM$ "l@IYR,()b$ئDRʦ(6j,#*4бJd*BdSI&DH*i,hЄQd#h iYAŒ"h&H3 AF&R )3$cA!L1FMbQ2$СYM$QF1$#SH,FRe&f,a6F$S&R"٣iE)4R#$dȦY#FRBX)$ĒiMI$P6cʍ4țA,efB̈%6JSf 6lZ`2Hi,Ah$MaH!ă#*IcQf(14Qja&e&(&Ȍ FI!m-S4RQI3""hFPYSf2-c!lc)DL46!*jFlZƪL)ha$mdF$YL"f!)[2(ĤڊBѓFB%ō S-,ɓ*MV2ȪU40͌fŋ"5i*eV[)Ji[#@dmEk,Ii *j5hPQUY(ڢQR%4DbZ1b mc`-&L,l4J)ѣ LJXcFX$XI֪mk,T2)hdbB%-#b-f4RMRT,+RU,54lBS)aɬE![4BAC*4!cDX&"Dm!Mh3KQY&6L(16Xa4l ĦbPe#--!23i10i1!F4RQaFf1f$FYeXJ"ƒ0$&ѐ3Xъ6e$d#*#-f,L6DcRl`EQBE!F22f Af$L jE54ECF4#*1fQd LM*J(b4!IS5lM%c4FDJ2Zek"41)a1$ ٳC*F k4%1 5$$E1V3-#-I44iFj#-6,eXlD[FXe!)TPX()5%QY&(jŠҚeE$AEMJ*cI"ɢ)BԢ̔ISbQ5j"l*dXTX˜KQi1IYMXh$AAQ4IXԔLTiMSKjJTMEQEM+Ib4PF$HZ-MhQBhL23#1F#S6IQKY*YVJЛR-DlQ$UE3lFŶ1mIQ f5fQMQJ3!RE$mb̩"d)2h3Lj2cFѫmk#-(T04h)S dcl[b5mֲT[)dSSl&F2"4dm$aԚ3e@De$ȌFHdel{?wbۆ3J4IC'dzzZ#*M4ow26/*G2'*G#* 3L(0\:8႒A{~o7iwUXx'[=JI kD?mOZUab8gBd~ՋN؜Z5Gl9bÞKG+v͚[-0UMyzk}d;&7^Լkse^~Y$|;\[ݙNis(I1BovLPƴJ@#-ٔ7^z^\r,[#(3)X)My4xR[5aMHwWhf4NԠanDDiWvc `P"M+{?n{76_sVMp0խF16Բ4sES+tO;cgwu-"O̯[LIRR+,pS)SÝ(C0icNȆ6m y^gmIgu=9F<$7FV#*m]rnQҹs%u""LEz0U%YQ6JEH SC<6]2rjł)GԓOͣVݥ̆+L Q0 V$h40-dWT-]Js+eIZQB\K30\iNNM8 K^ xkBR#-rj)O_z_;wktʡITm S!YS7L4hWbS-UCBLe0):4RGx*uW,jUP$wm<_k(WOXYc7[Ӧ?~򢅑7mZ(( {z)Km`ek_S:҅A@P&xڹƟ[6L3nunZPrMdLb%5MPj4=vFi"=幨o]W)VJܱhܖ]q?^[=:65&3oK}@XuOU!bt'*bL%T9s(0&k[5gؒaJV~7Oݔ%lWWZI\$XS]#IC[Hh2zu(PKW}Z­O#*#-]+)/N,8P5!Q5t\G4>-5kJ]AE0TV6lH](#-<*o8>#*amrṵXdM/C!]k,5Ӳ]ՆXgPAŒқ3_{O4urb~/}GycI-SL#-'־rtpvWrW? ߷%5dt11i%Ȗ7$a#*4K=V[ ًv8V~ij]6(˲4 M~z6qN:UxPD%*FDzk]hb#-P2)J-=+)|ӪgmJ<+)h>.yqh"4\8pkhFv=/N:wsi2>rF3W]C7gZc_"֊GH uHTC5=C#-|_Ɯ_y^F*w]}4{K[vɟS1J9Ar*[ڭ9مHV9}iu+Jb@5]Uqc-ERVEK%e\{t {T)M_T=?o*9&3U㯢;eFÃN=:%o.6oχ1^ q׼J)q& :!ts5SX1ê޻}/"Qn5 Et针msNM#f8S7qME੻OA".͈|5Q׮F_?AJ7-:4tYY&G!r.jP>8>#-Uma<ǔ(/l o?r"Uc"cpᝦ;u鶻.Q]Usʨ# {S)¡#*:$?4pYӭצ|۵#-0D2yz{^j/;W܁j@w p'x$E䰱gK2&5~.3g:``zFHI#LejNՓRSܚshzy] ::9&T9Tv)`آf@ܽ=pm|=#Ѱ={7Z<!(yƴhq]GU& TTM~yR5\m-f؏04ƵdxbJ#(nۛr)quYy`EU kLFo|<,@ ,*f.$\#P)Ӏ9ͷCvd(یj1`ve}!{X= *N_ܣ<i>-+_Ly'4"&PnXM1PG21lpgV5xF&_{mwj8ީͯߧ:۵!w.(ܵoi(-e8=VmS-0aT+e ĨRonmpChDQ S6>b.M4* {ͱuŞT{t?FQģeYpļy--K#|i5#*VGgk qj.".ڛ뚴gJd3wNpcgL$J`,Mv,g#-[ڨ*NI_̫844f)L;=ٷa;|^VBL8it{Ɗ`AH'^a׿qTg_纷#(`iMWtbP*)h44L6G`w 5jSpg)}\R7ɏJ>[BS=ce1RAK\ҽr-sȈ X0>,&Lʉp<ι\>Xgi "DѱN₎meWrw+=h]~'Iy[HJb"׿)L5B^96K#*Ab <4yCnKv`Ҥ>D@@{@(5ގC)ReYU  H̰C޽O ?D/m4qo^ѭ>#*)#A f$;ٴ.'Uw|9$8srĕ{2ur#*mQc@DXLw&騜D*:kQKA(٥dK: %X? zvNWl\.ְKy5a;5QC "<%.WANĵÈ~I%x;sJsPݨ=~먱xLxUtȩxVȋY[e#*镠^d0v>mhdU[ljjP(#-Q-ͺT3!^CF86KmH[ Us-+k[e !}>Krw##PrHNnolK SHp TaC!J^OmG&FOXU|@=K}~>a@|`#(K(߱&jܧ;b|TM$Sl<y|"IӰ<^hn9YutEC2w|E:.nu; uGRr"W }';!m!8DR #(O_"N{+w^ #*k DQpj՘z)@H\E.zIFT&EH?#F@=W8MTX4O )_P}zAa.g?gq_S*;"Fv>g^aqō5ҳsb [( @>O ##(A-G^GK07ocṅgo06(RݠatQšmqxm%¾zw~>9 z#-hpx4=3fD}48;J̙{qZM҈y崎P@۩9X aa򣬖%RQ((7qU -d>}ynb _P;c琂X4C֘)#|X~GziA839&O5G#( $׶~~Ot̩I4 E]#/-)74YUQ`?fgzfrLSyEPbA0G83PLP"=nQxaiïUP82 &6ny^}uTF@š6&ܦ2,,ʷBU1Par1~q#- LǶ1qM%CPEU|ykn ߯ Cop#(iCBDZwCj7G؏7Qorr#*ِ/܂uy;@HX P @#(=A#*gN5."%f'k 'NpurMb<|1xKRKJQf(L]vNv9;Ğ.wL3ɆLeT 5 uf 5g^d9W”nޣNgˤX^kR;#-(=31h,e&#-IhL3938؃OX7;y7trtt&ʁ9梇茞=smcBe(p(jswF!1I:;˦949yfXݙF7 2i cz\cv!#Jvv#-iF.$!C h}!-]$^FUM^>X5mt(\߆I/A-WO!.ibjzo`s s6Ir'Q\%j#(+6XtPEb^v=3;źX}!Bwe]zUlMxB!tTb_dxKX\V#(`"_;q5Mx ;6yNMjGn-x>)YPBQ2y7?tZ&R 5IC?'W8{X8|BރI@̢`l 28.9RY-huJ2Kݐr\kz5y\Z-N}a\P^ kM>\Մ?->u{C|Flߩj l!!$#Qacg %( g=H-52NMu#M<&b(:Vﭧyod˿鿐^>)$7]-~V1N#*g\ a0R2 %kpsM*7D_=CF7-+C[dssS|^|lR!c͏K=z(8`ܡ%0I;va<;1O#('0Kp#*ÑK+/\ihd|#-2S;ĦCPzR0CKIR7ɸ78>snNHXl6DL˞f#5G+>wI0iI v|S2.HE1jo?[|{f1ʍ(u htP.q6Xߚۡ8sXYR"hwkļ{>~#(cA7wcBf#*ubcMԈA?/)_^[8>n ; uIOX/޵8xQ##-{F"~8*l?f#*Blug] J#(`rpPie׵hXpmVk/3j#?^#*~Hn,#-gE3jK&1*X_14iWvevZ80ag>Ө@o68!~Yl2SQui+, A#- ˙A`[QJd(%$H']^וSW땂KF'RD>=>IQQ#vE BKJdp7&BFd`=Pe oRm$گ&B XHHAF4WhlsGbuF4ɍm;i_h;y0i𪝸+VsY-/j댲b?;1IZy{w~oP_;8~{X30~>{P?Y֌QDY|gm޵wt2kKV1C Cb#-XJ}Urx|P?TPFriaF&p2k#-2.@K`ߋ¾z,g˽I1GO 6ҊB& `?ٵEB`҃F!}v~_?? ߭xBޥs&t C4VcnQ4ǜ?]> >R5|#(#*I͘->paU6x~9*E,{d\Aȃ^޵pX.q+!t/rQgr^v({Dpeueswu;:ig#-awk7WGp* g<-x$}*#(RBbk2v(ɤCʒXxgJ )@*J=TM@kj*B'"RݪdT;/Rd=vI},?g?bv)x&!n?LId>31oyؒb~4WV4(H&^f$'C<ɱSxYa`1#X %d C| yJnJS]GJҧ;#(NCCi=qJ0j44oJWj\,aL ) \%S$F-.e}q44 HF@<}!q.>p _O?S=iYexp+l赂v|J[]rz_?_#*c[r`+=W9|Mq߳?>!_r-nwGmpez};]Wy>OG?h<7tI=^G!#(ˊ@i>+١<줧Y0C%6HKL8tb<[(nl|[N 򣃺z)zNl:?ax#Hslۦ7Z#*Q{yҭлeN;D|N`#*YV[#*CW~VVb^M | uhѼB.`s6o#*9*9QcLˆ;-sk&cR%pU[6;hhx(abwqXoKNU.MR$;ţPNs7dc2_E:=ߟ1vq֮^9qBmK{vl96Ifa3##*+jΝ/-alJpH`~ԏu_ ̾jCэ12puoCl彽G*}InQJN|W/|gjm{NcKkE6{_|R|z?Wߜ(>Z4W%q#-:+p,6iVks9K%W|(~)nink`N7Gכ٪=pWqҟ({Ĵ(D5|:9n~}jw'˚#->'B5hۈMDH"n#* Ǚvy׈o?O_]>[;.g~ɒG;i(O4$nOSު1p_wױ#*ӗg:K[HldIK=d#*n sK=P1C$ y+f@H$s@.`C@ЇH+V3>zqu;q{#-u] iPjlpz?oeʎ""뙜 %^G!7 jZm8i枟vqtx-Kn4v/`|ZQÜ2qǃ]kX+GtO6CDFcp AWr+)clb^bV?k<5k,)6?aExS*6R-,A-m$8IW8jWKr R zۅ,[Spd9BJN(Q#{{&^E칂2kl5icgzq$ƞ#v ez_}chP{4wj[bwJf@T :Rq#v4#-*<å&}C QGf VVilwaݍ_iR9w;-w:S-fLX ofq|\>q*a󍀎 !zΓ[17jug٦۹_zjv}B'i=ы[lǗ+r[=X'x{(4za`f|!Ҥ،vlң~J9=S>_GI ]uG<_WN_yD +\h5U6|^qLD,ΰ(t,:m]\.sWI`aha^#-ԷS?ﻫ_g_Wq&j&[% bB<Ь0Dq:C#(#*{JPAϋ7wܺ|A8EQ<>Υ "8%Ob$#- #-.A~nm9I=w ONJyl}^p)fzǏ"#,,6aiUSP#*8}xc݋1..08D#*,Y%ө Hȑ#u0K憰:CF=7ybځ눣i:8#"X#(Z)tA#-qt6cN,m;qO3JE&m5l$2?{o:w7(]uied>#Qm2 ÜЪrҴuF:;HqoI|U͍E%z9Б@imZNЮ ܥ [UQHiWF㐅/NH7#-CgMwFfq+Xlc*8&,ʁp#*#Za|Xo$e*QM5D:Ge.l4f#*pKEP|;Y$QAL&KL4' dDօKXq""v#*aXSu2)op+v`j0tE&Y#FS%}27kYwsލ㍈: Fvn9h{,k<-ŗ}NI?Owc &>ɻpL,s!!kaTQM J#-ٶb~SScZ&`s<9xPURVw_pj[W^t?ϻçY"®ԷǻUL"c lzrO@mm34kɷc]#-1$F Ðf56@؅2PgAAO`PwU3{qLa'k9f)b×wDe69j#*:M-ɰ{!N438!!F1C`/J#-hnࣣ#`إN:(j:;#-ɼIJV;F[;K.2z#*bp 6{.Z:1MWG̜ٲP!٪]:l' l,a9ɍhTr3}\sBQHK]naZu `my&֤ȃ#*e{V6'AſLgfmM/pX C.M/&P'\K9NWGi/ONX7Za#Q)SU#*%2$r#D ՏOšۮ6~E1Wmȋyd.]Dag.T_[n:u+/AlK-$gyU.B@oB]O#-Δ/ly\#-wƷŀzdɡ4:U+sxPqEц={f>N_lV-,Sv~:Ki!>CЋCsqHlcyDCT;<#-b/>X3[x̂뎝[r u1pɪq6׵]p4ίEy Քlza.f߅_9tE'0CT֕#*CS#-1eT; BB6F]RiAYVg2]9F#-p\]e#*d;Ŋ:ZS&ְl†}w?!u~GTWhۢ#YY>iI2OiLC%%Xsܘ(FmbG#(i0`=BiQ%wk3@yA7\= `|gűٮσ-H wLkLI3w>>|nwPjRhs#(%Xx>&I6ՙOH[*cT;_I)Tee_*caWnp[3+ފkBzNќID{ zBQ7lA ;$#(Z˲"7y5LU͊;3 oTt$L;ɣ>]ynݩnI/Fބnqy4˰JFQ\BWm5=2zS>8;MbEq*D'q4(]:W=?)(#$|#*ט-{.`fPOf{S 2TOjanf08"@BGg'/vMZYK^G4Dy}Xj<1A#(dOH&~y T«M&7X7GMM@G;L43FW9g3[|L1d!`>-6M=DD[3co^DG]$導 a(*5ubӕ %dp1_]tRh:)*I|'VK蝳P;!VhuZIфrgs5;GYt\npYԆ]JT2Ye:FC]:0V2b!;="t+Ìqi|u !6995l2 ۙ{#*-\ Ҷ ""JK80aI\ْRܺ+W.0۩]5l(PhqZ c1T*VrѲ<"s|Tjx#o~#(,`ĐqƮScRxFx(O75s%gpD6ugɐ5ݝt^/Fwgo672a')KY>7{;t[i2C9-4ܑ8!i;fC~$i/#.1P-"7NPT/)7ϣTV(~-΍?{8Q"J'p>#*~靅#!chEF#%D_S:@#0g~+K8;U>E#"O>^fm2&Oxr6['7Wc}6"\< '#-b$iQH,h!$ JjxS! 2 DMnX2(u)C< ]:C[41,"yzƵF8f6k) uLk^5fZSiphOA;bO`OUD&Fz/]|4tťJ8 &= #-أZ*<]6&Y2s_BJ\uVtΘ*崢}U}z)`nYCBVk.Q/[M>BNDmj`M>>z;&ǁQG.ŒŋnkZ*80)#-,OtvAwS(xAct˛#*P1ڒhlϞ=ss*vpEwOXY5.*M,up3;o y\W_7:*5K'X|lL.,m6c/{#(p}{#*XIy+}oϒ^o|uv #-gPid~ã!Rt.trI0z@_` @`[bj2l3[f-#-V0z2­Tc}9LO))R)%yqߙf} /U>V[)=ߎn-<~1]+2re]tݲr/zCNmݕ/Ind',/aC+fPRGEJADJkC\FYWR%UXkY +%F׍fy=/B]m[q4=[/ yF:7!GגijG@g!wxog!m2y^b B:Lq rVAI3$ɶ; LujJi6l]*Ǹ@S,tO$MzFF{VԵEgE/{éWatϿ0̹vJ'uC,#(%7ticSdΧK,0qTɧόosvP힘[cuX 4G)<.{ͅ9죥Fj?,],akt^@ h,̝G1"3+Fբ#*]ic#*ۊy>Mie`g-{ɽ[Tq Kμ%2ϽFN>84VM$ّ- 냒G9Tx&p`uog\gRSl(Dn0ߓ60P!푨v_W"8ۄ'n6)k4',+ ɤ+AGX#mBm|on~"*#%KCEcXWV2SV׽:Cv:B Eu[CD'T@p HIY紵V% d*C$A=ejQDFs8RZܰzPE׳o_ {%[(荥eHYXx$W X#Gv#*|)Ȏ A?EQGNe^.ݟVҨ99шdr_bxUGQe#-޶ڰzkuhIC1K2#.|Q{NS|o6y$x^~3j1#-˶,X7o6s1~^Kx'RGNqugsY1%R7ylT6(:y)1L6Pw>gҋ#*ⰫRxw]Xy|_D,9p#*X(&:'k+0?OcVq1r#zĠt>^wDPԴ6az oa#-d2@5D\,5L7A&/5ty"legK(@ @юA9.V)bĠ6iq ]j|Me~d>e^9#*R1lSb%f͛~}9SYPd$/N81^<$=@i҄'ռ1 xxȗH0lQkr!/a4eKVA$eh g72QhsNBdgkUX)uч ѝZ'˧HoU@/G .bÕҁ#XHPK;@eZ*j)7))iJ/lU۷kcKrUDC)4K~ސ@x"GذIǗkde}9PEB#*gy6ywZO$:#(=r=}WP;n{u\}]ڬAmm4u q4Fe̊ZCSZFw⽣VH>N2#(yBuSSn[fqk>F4 SnARy^ewT*f;.Cd0U#m*NRy"QSD;Vj,"5e#(~?PNW?`{"ͅhj(sP=ЂzTWƮ]m7>_)?| T !$'l()MVQA@br2"Z"@6p+r[-<j -y⪑IRBMS20u6?GJæhZORԓ&$փ"#(oWH|Eo#( lq݇s ; .gL,VUv#*TYP#-a* ̰,%z]P}nq+eCa%cwp%'0 `NV}9ڨ]gIc=qڴi"rބyOUY%z^ʭլ?'TTԿSs3l">dSͽ90^b(誙$ sD*WUN6284)ֵoP2L5mx3-?BTZ/y(й.D ]q0* =>o}v"_ 4RRZ"B_̊MTMd8a͸)sč]!pes,ګo4qp[@(FBx3\@؂ y!]X{lmc#*[9'rXԫz+xCNV:wg fz ~mo')D#a(cn;o!16#-8G贇rA{8Fl 7`ʜ2vBBԪωl\lF|J\&=czR\KI@1 IGV.* r#-JMQi"4›N803On Ijcq#--A|Ҕ&jWQ67KCt}aLmi?jGЌnO|#*ЦR^b )C$΄s]#෧k8D3 R|P..1DX{#(iI@]q~<G!}5H/}q_֚`'>>٣׼0aITׁ** ?b!L㠄wܛ@{|fxʗ)ox)ШU 9m)+׳#(W9xe2ˆ{^ )Yut!Mtq1壘WqX;z@Arxi|~B,*J!qTSlcfVy8ϰS;XoAuΝ;7b#-{E Z?۩[zԇUt7?pW8/v5DZ fSP@rrAabl&(sJ#( `Eu,!LTCE5),dEI#(:\tQd )J2/ab(&ģMKÄdSrRwaFJ#*Bn|4D3NBOTm~)RqTQ EwRs'ŗXp>U#*̉3=bҗl0EMcg԰`׆w;:6V6f3#-.NSjo-cGxBWz}sΚ? #(`cnh?/{nϙ#zi(wrQxM`)3E6wy(ǝ[ҤAHSpsusI׽qWE/}.;tg6*-1u #*-UEWG험VU=]L|C0ZC1k|mSeBy+BB{ɸıX%hɦId[ILRi!Eoc(cL(_vܝх!#*9.IA!Cm2$ AF6#*ghE{ "ؖl߶fd;-c"Rb"#*Fϥ& H%5qtLDCJt6y43rMb# 7'AYUM @v*~[eݛh㴣ht;}Wۜ}*M1yg7#(TJ8N3DvS|469OcBzQv0a 0@ xx,ygvǥdb+Nm J9'rx#dN)_ukuMbսJ-o%ʵS@F$&6XOsf"o,0WI)(Q5wY$R/q^ih^/)gb؟3\,"F ɋAl{+$(_+ ){+<)I HE@6 JfSfAGY{O h w)Z5rh1*m64$UdgB^Nê9-D+A'U3%o-#*CPm[QP;omZo#-׼Qkv8gOf*1i#-ׇ\b*ڧFKe(iоqKz ,CFPvC`,C)8v9uMqR/XJtCTˢߓcX>uIiBˤA#(Y9gno#(M1I r iBx 3gjaռ #i-¾.Hl"-0-@9$d h4L<(W2@`֭TÀHl٥Ĥb&q a(YB'w!TX.FEpcDA Ӏ|L#*oYTY㮏|w#*ms]V^9_|&XۏO쎴SXg3!1s#('ClbJY}/!uЪ#-<m 4^0agj#*Dɇc8!+^|w }6vJ C/@t#-6dR#it 'BdmBl>Ӓ$XI¦J8Z#*Ճ(@}{{Jmg@8sDF #΄eq;BSBv/Ó#*.rƹm#c-44 ]^xjv+HT96Pp}҅Uc@4 pD?WN.'5b @4CN @=_hF;"QzxJ".HS5㩃»QǁH6&s q.#8%#*RhRSz,,=(#-jj #*#(%2LgJAQ#-CErM<;grjntK;aHo֡´rSsBVq|&WD6 w~#(uf̠""DO?~?_Ճ RM+4ֲg>Q_YтZWήb{Ooa G1~ؼJ?e0(l}(_o*'xռ 9:QG>UJx>18q##--C#*!3s+3]V\[9Г#-d'$D@_1u?-%?_ƹ;^Gyb]7'4n@CTHbxp=La{';(#j%2oh)dAQn6sGC_f?3ܐGcVq˳ T/N|>&l)[o4xTD(C&YjH5s#-0g#*=Q!s=HZuStpT=GU)n1}WΥ]4e#5]@6D"}>K@^l5;Vv^eOLU{5IP̋ݳ24rMЛb3¥ ,ç>ΨK_JZ"RNVD};:@wKixF&OYy5SqTGAۧs7?J:GwCO=m#ڸ#,-OhjDF#(|,g^ήw-"yzDgáDO/A;0_?O=~~yRhW5hATD@ ?S\͊ D"#*ݡ@z~K׳L0<ܔ#*QoV|EӘS>"8aB"q#(w9Yޤkζd6#*陊 u8$S&#(_}4OzY{1_(SjYW*3Ia$^`m1Fs=%SFZ0@;]`~#(&*Čv[L5UxMaC܊'92eHHH;d#-]q:DshGɂ"4QFߍFxC9.1q69>L2Jozs̻w^߽T?N\9Wצ]uD(%^@63MΓVZ%cUUtE8?^``>?v73E#(y0׾|@#(d(^'k_W]{KFn~\6ۇ:+[#*B#(y8p}jȚ#(8'#([Z}[j~n#('>b>Ԁ|?e#(|o9nLW]03{a뵋XxkQQ5#-k_ SkVHcd|.ǎ6ގث;Hxsm\<(~7[s;;檫jx1c7gWъo_u χ]D۫M*#-ݥE;*-AVi\Xcq[ׇ5Q6|K$_hO?7/-(2x({A;\tR!W.(1K G 0o.γ1ڸ3zgmy1;!_K(MqYkSҲόGo,pSxǡoe 1en .-q)$L7N%{W,rJꊯxpѱ)o̮h A| UB{2҈'v9I#I¹#-Wg^I\JHL55lByʉ?a|76v8szu&)E9BK;k:'Mr%9؊z_CltOr%}d$tTӳl[l(N5bb;#*k~6yluXpF;|pӣ~3 jֹ֠ɔ`")(PPGk鞍*E$!ly߸c!z-֪ս1_-҈*D#-90PDrvfY!rBXLcWDTԝGxzX\\4Ue ŸGZӴNЏg갊db4n^u*RBs!ڽLJ%Hʔ2H2]9i?s!&L ,ZPUY9hVYHP1fA;aĭi՛sDZ~I˿|vш"9Sv(OκX1aN"{#kqq4-T:z.Fdd .4ʊz0|.aYfcc?~ ]B23ӵ'E?ăo9&+vS'sgd6ϮrW8ÙM c}/+txKHI;#^? Ma&"qW:'X2,*[(A`'#ޗutz36t5'dR+Bs$g"fP}ܟHvmR{zy#-'b<AfeȉfhZOZLbH[IgyXg8Ẇ̋ 4َÅܤ߇M`);(#(2lZ`HDmd01#-E/j"*1^OÝm̩sxq|>C2b́ +04W!,"g-^2By%#(h₂p#(O鎌W 5'k^B\c @*Us#xLw$025@O7y I"cĤ.@,znRy<髸zm}ͷּE.HpZg(SWH*Q/zaG0 aR s#H$rw{Wr9_"_/#*Yy_#?n>OR$A׭}՝`CNu&KA"2*(BFTbE\{ˍmiI4Ƚ4w|gOF[TJ`MҰ4hN5\ރ}G$+v7'gqNU{#@v@]C9Pg&c1-P%:cI{W\܄.@ @0-PP߅HydA 88K?3( ԡJ { PEu_jI>u;ns PDAa 'WQ{%T`Bf ]̢ؓS#(尜MKsZO*,]P)aV I^_{ݟ[)F"kQ%e[J?[l(FX8g&w!?_ŔGܳ7#*M3l=نSq\%OАr:я8`i>:D_5ߓWIyC?hӶQBTG;ykQ@Rxb/$#*P)PjS7jDx:})5^n; {$Pk#*AuJ9_v?T_"'(PwVR6$Zqhi ?H yԯtzҨQ3ʡ̸|Z~caT$SW'>Cz1CtX~0p5_(Ifi?s#q9:N0֝&S<'K%"+G;L !%D?W7,C!^]~6wg(GhI#)3H).u:c؆Kkio>=0$`@AV(M7|9v(=ƙ CM5}uzT,Zۅ'וBǰ"͠{KjfPsTXH^ӰXK@ b N<\ޕ׽<}vX#-<6GBt,xĖ`'s':< BI'˒#(wI<^6ܺ-vqUg#-UkXk#U_||h#*Z@eVh:g]xIk#(3[$ga:,M:!Hn+#($7#*cm^%aQOn;tQDD|G2Zۮ_8O"gWf~//Qo9ظ#*#xC8C`xR#*Q#-6fب#(T\s; ?[S'96`7/-afjѧ2wf3xMkv "~0C#3ӟž]/[n@S ̥NX[_g¿?Ö'ɡ'!C,`/L36j7TxRa#^!ؔX91#(hM 0;v gYyc #*pjT#-?Hf9.#*r\#˘mN__1ɮPXxP\u#{Uȿ:`m6-EGØguT/&{GM OxvuF7>~C`5GG|F_d_0wlK-# ܹ3SS!im.~ݒdjP5vks4z?ː >]O. ]N Ao _?]GK_n[T-As_߳wh}Vk,^"8 !@#(bp?~W^#*mPʀQ8#(ڲ1eN"4$IUV*X |}0f2n)|jf{@W+\i>(n:ipwu5jf!f K&ޡ`4B'"|6&#*;V( CfR;R)O9c'c*jٴIrOo˴;#(`;N9/x&346QF7-{lȨ7R,dłvÈ\siJ0!d$ E:Bs^:TcɁXFuyZcXKX̤>"L-n8D4iMRCyJ_T* *D usnos!SfTkCy'5<+ zHRv>v9K.:D f7]**e9UU5~.2i ݷ=}μ.{ =)2 o:22ӡfA鱘vd2KjrCA,B넝fx#(>v=xgi#-~BP$ɡ[t1i(~BW:z޷ҔK?NN~pAb3# Xң @J^0u) Й ;$xychE77A#*:M4(11sYesC>B l HB 6?O#(]D($ЈhMB@g#-Hnz$(i^7039B%9-EV#-hdypk #(O,2)t*ДagyL\9fSM&ơQ[#-hL1؋M'_͌ͼ Ss<}!|'``G)@=EZz2.#*RIAp3!_ϷrP OըKN-aAgJ񮞽uI]Iv$`?.WFvKKF2C„:M4TҪ!%lTM܍erhR:I$5QI]jjKK[m<\Ֆ\oL:P^S5=xfa1ՙ1<^IK-ۭيT@zA_#-PNTbKC!Ж`oM5|yb!im 4}E'BeH!KeG 'O6XM %oqp5w5 hr [A%YHNv>w7|W*}BFyTKR HkE2v=Sc-֚Bي,^( JP>IgJTLMu584`YÊr0Yxq^bZ*(hB0 O[#-&( ! K#pb`^A6o@`. şo*qr"9#(@ |/?4W7.bFc<ݐ~+޷,hAh_qcȹg͵96` tdP"u$>>G#(sEiGi69O۷?D#(q("F#(7>] 2%vë9;0#*OӞl 3ÑMv@ӟFi"H2)1&~u<dP e}-A@PC@vPfo$~*WgQ˗ d$7UQXh|ew-ga}Au5C֦jI'c6UA4d>?ԯތA!![Љo/o ǃ2"C;N߬G"d g&"Zzz,a/TJK#(<IJ0)jp8.X,XQ(T->/0c>Z[Q@< bwpg4| .gڃcMo #*R\#*-A3Zi$&a^p#s!E[#(aF@X#-P2)dE"1,8$T#U Dsbf#($P!k;p38AgœBi$1#(7Qbr#(*xc,z}Hc͏#*PuYELFoyQUzW#*6*Vm-<˵oXzoM9}ZK@982ϷOg?z%GҞAd##-1+ `_w)٘_q*RԕT;;4LHhjr$>WO#(oBY g0BTWgXye5ȁ(UcpOœeA}6!3#-`9&K,1I$@IsHb AUR" iA:A^^R@tګH,A xX,xǨ<#*#(>p}0smB#(W>נd*A#(v]U0sNnj=v`vu9H/#(AM@R`9`1N#(]DQVc [EyB7UD 7J?,Ě[OL'|{Sw4οvN9ܐ낫6U#-Kq5*&#-a!Y-&B#D/aW9(uPsY8hǖU@*U'dqլ0m,Njh6Ɲxj2Chz;˧^>YXo|k> [g?ȂѴO1_H#-#-Z}(ID(lQ?93Lbf#*eqkr>Wl[ۻܶ9g6}7R#(ݒZYXq@\s#(9>瀝LN",6BXT*wS0gCr >1P$XdGu7/4y^9`$-{Ĉ#*_Arwl͠?Fٰl֎bQ9EЯMgڪ$dOҼ;-MB`06#-/@|Cd&Ql`ZlBD.Ha@#- #&J+aZ !PŪ@Ƶ>b?곂s|B|d83mUd.~?q!z!kCc#*JD08"4Xkbuϫ@yF`o=^/Hak>=>bt@%==gq8(#(4a5_nnx0m8_#*BBM#-I#-=a7VB#*㾯]xͤBHD ~N"Hkn#-O᥊0#(4 X?&)^58 9h5% .\U(PF1D#(BY?Y?Ջ|jBzN$D~A}QdǛ?##*T|VM|( @6lqrx}'(BowAlH 8WY#(:Wށ,@LժcFEe/9UnÑ)CLʆt#(|ǹ5K!IuVp訴T SqIbD$%̩D@&p#*& L^QbM@}3OjhDM+kߺVB%Tb7=G=˼-e^;#(oJOS 3Lb#(WgT`Q#-^bd#-9N>ʥ`Ofsk8O7<>'fu !T% 4S5ْ4+_;TS`Oi;o< 8E9-[v'(L3CZ3ߤ1:wqhi"m$,Th($0 Ghdw#-ܗ\4#(hl!؆ %!nl9q"*yŰCpPyt4֞ n vCMjf :f#-A} #*,S :l1иt7K}mWbh&Y&]{̛d?G#-Gg#*/m)gr+ ?q~)uMm{g ה{2Ys&l.<ًxvqPS}MBD|!(faK''j,9"˳CƃJ2n{?xDTXxi=b.#w?LUl(?wBx"sށ #G -QT$&wa{V҅!!oT(v.Ĥ:#(J+ k<:MO4tU}Wj)'#*~惼 j&9ȲbngX*V^g!7QHxA~|:cp{|`gL\Yav?uvs~(=;|M[NBxݱ6hqDrJU؈8>2t1p{VC7yHGaDP3tptOC)%nPd'r?)ϻ_O0*@YC..i+ިrҰ"NZXWn:˟jMe-5}Dj#*9 PƱ/k;N~we10(7Vl-*|;*†84/g]@™^((R#-+ @KR#-1#*ëZLҘ͔=u3^]B. l@#*(qq}Y Zk;L3|^%0.m ܠ. oqJo;ϗn8&pws&ete^RelQYqͭSԇ% ,QS4h-|zm?|6+(̉9JQ0Gy([f"lŒ8h< λIH@(C_}%ߢ^#TYrֱG"f/z৹_bk˭c"#3|Oz",fl!]<˃.Ip|gӛ黜뇧*3l=CӲ_Oe>K<Î3Cϖ!&ZHqԢ&J"E?M]Otir۪<)zN)i4xc^O=Cvz6(RsCo׵v5ONRG|P8숸Kq.60^<YQzM+Cgѥ7#(>4Fi1S}\L#:J#(6^F#$ 3W*aA~K8#(聦ZA%b_k|r{Ks{.:%r/teQ$(L@ 9uL7&Pa%1]1z<_ೲZ KyCuLqON+,)߹9/F]ťbh|`R,i))Y0S#-}׳VQX"6T'.#̢;hHTܘ]VH/^&r6-i`:m. 8t#! #*_ƧFt%AH}'8&~+,,#(!/귣:^ݐT]9w8x|n#({AzTpwH*44M$pik_vLݖnXK0<=G[=f#*@Jl|% b'W?[6#-EIm?Cr銱/y̅]FhQL(Apz:a>ʼngIX:75LloU-#*gL0aa5 X@ ("p=fѥwcvqq3X#-;JRlB|7<3.*i{m9ç3#xO"*T'ѷv:~C;Z-z9|#ު3gvu#(iĨb|DuUIhŧ$#R4#-V&Z%P!Z1xKIb@%(#(gmɑy?>k3AXX^m/:o:7]_Dg>'b3܈Zs wc"#-CPjlz`B,#-#-=Bave!m9C*Yb&׺ۼho5~^:#(DԼ (rln`8EB ͍r~WbWhb%`?_@ozqǝaUk¦SqL`,ݴG.uH2f~9L1Te`hB_`zR\k٧xwOYf\"giζPyjL,gK0!#v8n#-2nl8ӓuYoSltGDB={6<^uje1E UuQ#*ya#&]>s70Fj4k3,gh6z̒a$}|9˿_BB"$!|\=rkV31)I*$r L>;p#*Mha#*&Ќ(MBc8ilPK]Ѓ,yGP^{G@b,“]|4Bl,F=MsmT|IBu깛 h&s `"qSva<2PRaL$ @m +#*FPz$Cӧ[4WGCXmb4iΥ|+ c¬7iwD4(B,sLjĄ&5bg@*,*Gb&IȕlIHS˔Æ=sF!iZ<'{27"mru2 HI'.L*ITJ(3׌8躜Tqu#*z̦2ثˏ32e̱cYVeJ3[3#*;0֊*A`uR%|jX5O9+͝؋O- 7&wb}5}YۋJ?[]AMəT#-2sDȘB#*v;vaÓNHs+]JH>Dqu ).bL eEb,{ވV2g2σb)Bř$%摍ll1K+b0,L.μް]U&aae h#*39HI%o+MjZ} #(Wu#soET1#(0l#*S,s=jmh'G˯<OV#>bYaO1kCHg`w:薊d&QmΆҐ[S~"Sg[VXDlslyeˑec`}kaErКiEzI#*p&L7ٕVCDӶd:ŵ]gъP?a>!AgLiMeɁ)9C42+ (TB&n^s&%-,$B&6d{U``tJ#7nn8ܠ9>\Ha\#*#*+쬞xj֞oHbfav#*B@Im&[JyK>ɟt:~ SlCb-?kXZ#>sNuAtil})&-O =#ϟQ#*AdV&xKcxۦBcI5>+Dtf3+яFWVGMN7Syd7A-+IH~n=Q'AbID 1D&@3$1%NF4>Qʾx^h>ϗyjűY(EuTJ{0cǿI!@I )kܮ3%*~~a?HjR#*Dn#*Dt:ିޫ٩{!Lگ/H06HB)Qj+@#-Z@HϦ{hO,bDuR!St2#(O!@"#*D \+:^^ "RЌ.}-qX$坻{hnQ #-,FBMd"aȋt58VFTyeXØqH˪sp%~@UC."ȄH/R$=fg`KX L<&zk+E+sҼNӱ6s}!fc#-+$GMs'*2(T@$ Q8{4ER@RE@ XDhDc= mQAВ&H-[D;uh@5QM *Tȓ22D&FG3:^cA-#(՚_Qo^̹QLIŀ cʹ 6d2k '*HBP†}*pt0SK#-K\Sr!d#*xrnYZ=~c-ah/oo#*"Bo#*m؞aC­V$v𴐖y!#(+<9&B^{*춫7w6C$ޏ/%8-Y Aיaw1M,J;)S|OOP5RNߠ:'ɢ G`l=B/dE j*!aflV@$T}Je+):bRFgT< P0.>^Kb-gٟgf3$muE\UCQ.<Ѕ#)Qᖈ/xy)Qp~-lhL5cI6Q%F+jlmcjM1F#($A1,?_OEIJ=4xx'B`E"*2#("{or`H$:x=]Eo6?PxhluQD(aYXڊȥbaX9c8|OzB#-~I"p!5HKfiN򩹡"0#* E 2 .zx(#((w*PZ(yz#(ϋ=O$K-l+:@dīPM_oA(;%H*TSpSR3`^ pD)+R*͹nS6[3DA`>ϲx5A592#-$ Jr*A}xo}ntG i 8DP 'A^N|.$#*D mO8IzF,/#-) ! $Bzu#!E(EaDGUP{;v2]6J:4xׂ ~4Š}Lg?<*,-$zPB^+&Q/C9Pq$t"`f#*)i0"$Xߚ!!a J|}>`TeQ2@|m"hPjla7_en≁INiA3LV: DĐlv=~r</#*_m bJkqe2#-jh[#($*>\<{jz(4GŮ~U <6r6fʌ#*nxTq̐=p&}7:דlAÐ|v#-w;60n1ljm>jv4ꅔ[9l9k0֧z-F GF"ob#l./`Qh|19y,2`yA !g].gݚ;sjCr;=CˆciPŸev탵5vT6ƅzoݧFn;.#R{!<Ӧ>,b`t]wg1m(~pT#-t]""M*8o%Ƶ><v(/fO 00CjgVʠ#*jSˋ\Æ\mc4lKpAMpZdYK[?i`㷍z(⍚Y؝|5j`lT#*f=B: h#%U4؁˱ف.721}Ɔ4ql33Ǡܙȃr+K?7fmu'?j߯{L"N-#;8h kb] z;l$Eq7~*+ ՝ĚSY9P+CCMSR6ȏ]IqB'}_ *~tc:V@3cdE3T׷pFE/zn_ '_&7(5NaBusA/&^^wkM-KV1K#C6Kk͔wWirXIEbHD(, c bQaQ̈s(ͥÿvAd#*!Ѹ: "10$I{x<y(#*(%8X*\,2#-(E%)W)P#*X {BI !$({C@&v" S)D{z)Ŷ.?UiPS bB< %w})]#Pt3-1[0* #*HKr*=ip v~ܝܑJY#-XڄH#DU2X(#(#NyҪm[*Y!Evf!|( cPF"I", C,#(6Vf-'g'2wT~!k"h5&ڔ46Mo#(Tԑ"l⧑^3^ re?6#LcY!E$H ;LM nSiۋ)B /CdM4XLt/ q͵)"fQ "g !͡8'*ilHTti3#- Qb9B_.X$Qň$X=h,yjt?ӈ}_CI -a7!rQNszk#(Y7TvgN^ׁt) "v\8^MJճrt? $d`Z*m?ml;i& ]pYԡ3m>:ّa˲!A /!!hl5Vrr]~) F'`At0R8%=#-V s@QaAH&SGÃ>4Dg1 .WpYGd"łUS¬xhN6Ĉt0#-!F" 44`QyE#*B^rHR_2Ab48X IISem]k!F*R/#*/7L> D#Rm/&q@kF/oFDAU#Awr\im{XQ ^psO2؋2L۳y%Y/٘s~ɴ&$~:f%yd r)GKl5N,W}Hi˩*C(vm#*h.ZI#-FwԀF lTF7ߡێSsd>~:)$*wq\^a2DE'[ԼŔ}:w>4HNY#hWqXK+ X.*FVqT#-1D"ڗ7Au*00"ً#(CϨz-Vn!t`^[&|TPV /c "xZc#CLKy5;EH57φS&I]U| `#Bit.) +Vn~(bdCoi7Hp6k(ό8KPX1pƊIT+hTv'A&RzzYd|P\aaO6r@^u4} xaG\m-uvG; S b,mb)M(MӾOm-ZhD]PA@UF"bB5iqT,+)G%J3{#-Cl*rjErr.Yf2p )jѹMF4E-ed6I&͂)\-9Œ(ŦlE71VȔ%A*a %ȅ0-"fKCt4x0dы"#-61'=2.YdžwSS&sMH/&cVgPbf"WB6qPp5 Ia~ 9 .OڨföT=~ xA5/\SaGw|JiR"rxYS&LtRaw0;#/Na=wDE8ŷy:@BeeK']i$̈́o>COM#-˘:>j2apϗ|8lJ?2sZ9ߞڥ9nKS![d`:[3#*t"KG^q%Ԃr7e8yw2k>ƶFN҆@!DD4 AAc>e) D#*.0#(F&1I#& I1vXt2ED#(P$,h71(H(Hxa#*n8OIy'].G?zАmxjpP3p의\>o5ʧ\iӿ̾'1x>˄ߙ ?Ui៤M*jezlw@d!$TF|TަHg#-=,K7n MK7#-xY`Q{p7?Ͱj#(6_NqbNL" HI`G-S5"t1?Todtm8`deS e\,ai#(iZ#R6[&X(FD߳/X #-"fZk#OLiYzJj{"K3(_W+9ew PuDcq}-]N>Hx<G jTX ] wM?5Pޙ`zۖ(A,D7d|GGRBN6j(Q@($I#(ܙ1 Hgxw`y(F UUKck:K ϷWM1j*[ijpFv)2#-B-hrB? #-cguVw̹oۥiL99l$h|& PKcڎ^rߩe8xaniq=wKC ͮy++1*SԾ٣JpZ4!0w#*?LgCY9)S 19wYyvF$;|YҐ8eڏ:;‰=seý<9s6@BIU=8gmD0Jf1}5YgJ^#(p#(j+CȞM#-'hTC˄髍= '÷}QdS҂,]>Pvs'!vlTm,x$QLx#*1ay M|#*D]HqBjJ[0a$O\s0Y]MM$}##X¸֤cf[#*&(Ap'M87FXn&sP2݆3Hb84j(F1q"E,.[is0ՓPkoGbғ~|ֲ\a:^,3Э7FCʞy˽fbj3e`l!{5m(agj -S0,i@:Cܼiwj#-6 4, :Ŷ$sIհ~Z.F 'Dܻ0/@eh} GWgm>x4jOǍ!n6#*ΩсĐLc:R7f2c sio1bbdRe'?;]ux,:!Avxk@s, ai(Xrk.\.D"9BmMSj1hMGE#-ك=舁NUeQoDJ٬Lb>*un)ft&tt;lmhz[f'MbnC#:$n$=JL%fLx348$F1WVգi7)RW_<0ȇv$cc;bQS=lQLiΌhLxy$kfM(|QYvl4e(te] o"Z|d0)uPPeF\5)5w6ۍtzڥb+|EY7þW2SY#cfz9Rw\}&-la2bݳqh^M&/y$fb uS"q0V^Ѐ&Dɷ !CK$rewQaW8E%䦽dڨ#(H0ؘ}1&O%@fv&=,5ZO[@.\[D]pn%>PiL"4lS)*$YhvpӇ+Om@h8CbSf)A$#-dPɱiG\AL`Zmf,Gm+#-fh05,oQ-pk/eӟ~K7I&0ITPߎ$%(+{=OMc9ŴncKl  'e Y#OQ#*+SLMw:v#*o"`yN2hw٢noS͎XMK٦oHkMdZQ[Y_87 ߏrgӎGyR(7̼7'Qgrܨ7=c2vX̼$qM5\[eii>ՒPLm̾fPbd:nqVn O)&PmV\cK 3X:,ckQ:lkF֙fH᥍`=ҲC.|p)x k17DtVv3lE9e1;3T&_0q{oDW Á(I^mḰb G#* бo!vܲ7E&mlJZ0 ޘf鍞y֝n,ˈDwhvkXhumʵ< m6$@)#*]dPxQ5֋hR i8YI()^5;a HMmDTʝ؋D0IvĒZ~ R`lP넙H/8o`%s>s%zj%h!dda8l'`A x(l{$`EQ 2HjgO4#*H9##(DNtS616A(E"`L`D$vZ{2x1t ` O;eU& Pqdn=!;N85rh2nE(armpXqof=i~lGo 6쁦Ώu5#*&df:(}ΡC-[,rCp"oi:l?l* wD";!6u#(PDU}F#-wB0U!2(@ \P(l @YP9[L,11H_˱"d&WB$ҁmd-bBr55B%4CQ #(uv!EUڤ zRR.wf\tR#-dD?ʗQ#-C'A<`PQҘ#(q?N#(9 ?r(`DZAz(| '@7Ƿ#pDžLI tnO_v#*Xr-#0ګ~44r{J7K(]oǸ-Kz6,LJ,[#-4#-@P*OXC5meZ?0nQdA]fsҘ#}"dwr}ƿֱcTZɶUVɵ-5E/NrCTC[sؚW[gRx_Z9l9VW"ɽӆJLVfeJe:^mCi> NО3C!!c$3 YxpȶBa"!҆J(vڽMnHX<ˆ72]CaJ1i-NFf=fheZt'Qp29armvp2 5IVL#*5ęvF50:mjiɫ 5lS9;k;fH2Bd@et;©#*qVPDFUK6(kj؆]Ɵ˘2X2` țq}ʳ#-Dd #( eD J9HomRic"IHt—l) .מqc]nmv#*4Y,#-TW x--u/Hv1ozZ" P $4Ԃ"e#(Tc1I]MVٷΘ]# ֏۰ˆ/l!g:j#*SZvfXPuki)0δ:BRRDd5᧯7s6w9 5b˿oVc'C'͆ۅfN6\qN$g> #pYlӗ͖| H%$#-mjmgvEM$üCW@ DR("+>^u>62x|fQ H*U)zvKQZC.ꍴxKI{v$ƶPo7Z&JRMljDSLYL1K-@WXSjfFͥ1$(SmDȭJkB_kkW]13kiFV֤э_U]kr%^$jm$j֖*jko<#-lMe 5amogmMcG+6[ήIM2hkRW5xbSm#m5؍eH.՚sz/%`v1応#*RC|2+W#("Wu{UhŇ4aA']TRKi):K@eXS^4#(I$uH2 , #(Czmd-![4k^h(i*BT%+DAdȌ\(P,T:SJlqJ),ʪ&֖͊L-31-PZRjkMLɭJ(a2Vmi(%M)!EiRDԙihE66LY5%bR**SeJS%RZJ1dD6Vm4, )1`L&&*YVmj"FRͩ2HVԳY2hҒjSmB#(LQ 1Ae#*%k]6lSK#( ""YQ@c[h)lZP %w^lo)7|1*G@n'Q쯌6pcZogag,azˁv5ELDFc4EHnS&Mz~]>r ACt6ċ)#+d[?47߿ȏaޚ\CT>Dn s8m,3RiP:;$3H>oLjlp&X#ȪLkMCC2֡#-YjOw_KͷiE yw#(#(#-Ŷ5TEY'TTi\ HY"RFD$ȝ)t^F]UPQOF'-T ""ҼNaG,L4,bm,&cf5zi&[`mT#(h7ùv{=.Ѽl|ϏYuho#(xwz ]$`UAg<#-e" ]6ԤEBiw>XVYlQ2#-Ҫ&p4C D6"ku`hcՂƱ1#*#Nf915qVՑMUÍAn"!LbRF[JU"ȣ]nL-RE&1ơHkF&,#(rxdTW H]:Fm>^gB OMoI#-^NԱPכ㓼0+c4.V"/[c4&8L }IfzIYS*}o𙏒B[{,6̄#}T#㞱JǼ԰~JCi V(Rhi)#(2}b0-#-kz@Å/)ңrL څ}[ZRU孃CLB1@iII*hnP#-9dt]ÜhP9Lgq4S&OAUN0Pꨘ2;R#k}g@"PdP [VQffĕ)4iZ*4 #-Z~?6CTPGQpGc8yPF#*#*Z,GXb};dF4N0mD!GH#(2>9#*Á29mښ5.9 fC NH3mvȔj2PкHI;^z;No+fy*wGn;5@C"vŊR5%lvhwQLIXZL7,apXe q"bvFH'SNA( 0X2]'k(*rէ wc9ǽw&7ub3+87Ӿ`UQTUT5bO#* -TީBl#M#*X(㐌66ҼkLq[rYzvńpHf+|#T.|{6QqϬJ:bc0btzí+'g&HC`=DnqzEn'ckYi&3TVFW߃A,u}J,HajPÊ 쪒E聣M˼n6۲&e ޼׫W]I(kU޽')RDȥ씼Wo\hpx Z(3QEP!@XZ@?#*Q3~XsMB\h] 6#-#*PJ?&o,9+ϾM̓*<a'E &m KlqrA♅PR>;F%: bɷ=ŇwuyU?gG0PDY(c^۳gçgPh"3cLB|x+_PE1޸@z$"!ADJTQB#-Q(سBJȄAd$U3\0_Yˏq+bIbNQb:Fz~p$C'= MOrQ&򳂱#(@ % #(~%2ZPT .BcۻlR/CjP=gAȠ-7ځ7YPP`Xo2Jtӿ>GgԉE@Ȑ>W4 , u7'3,?a&j3TAbHٯpH F"5@$ݐ° C (~`(G){uD )9b(a\V'ԓ(stt`7l8`FAFL+:tz1`Fե 1RbcjyQ!h۹n|7P7Il0#*VBŁẗ́ݒbb0]8Ҕ%A#"b6 #*Vddg:XЅ `MRhD3a-[)eBa2X<0"+ a#-boUYVurQu5Db;5\wEFخ[bLkv#-EI"XR"KMSiէX3L#IѝHaXH|8#*jƎCH|16 & DeZZfl`HSA,Kߖ#*;P'Z@FA@/CKmz*L\5O..n?'vɟݪfSU%f7*Qb0h` 8zJafN\Wż<4tANUg$%B!X! Y|o6;Qy[4-iQ&KźMTabEUu+FsuKM$k]0dn#(I o>Xw(l *$,b$"??#аH˻啧u({4\T @*4$!(ȨV1%(D*Q@"N2v)]:tr0zGSdnb~/UPIE_V#-hBj#*CHY (#*R\+xVזdEj#*=Mbu]@) 02V,Q1DwlQf%$[T 3[A TPC~@RuC" KGlT#-⑕E.H`@#-C$a20l@ BĜXE5#(̀Cr@/Bt#-RL ^Kb-/Hfqbzi}MΝoCtPePF F.am02.YPP)QP YmsGW28ދC{W]qIRҔڱZ#-{5Yu13F&۲[`Vw@G(P\9 {<5eQ*Bs|7FCO#ϭ$>4mRi׆3T^X1 JR0f\7$dF YKXXecm#Č0aCA!^OKXI"BM ȵ;鑗g4/QhM*,R2;!xQid9+6!Gx:M8PfIi8K\JjSD08#}l;#1?IrC@&%#*.K3*?_jL! ԅd8Q8_a`D4pFeh=0'voȣ[5x>{(o뎦J/lP5 [kp$l"؍e%f-6+FF2 Dʙigjܶf-,d%lڲ2ePhDU+L٪MRѭ-$Y4 ?N[eB&.#( ؔBT5E]Js[x*#-.^W-->;G'UF#*@*T$N-x;[1A;'ÕXB4ʣԅ gP!dzDBB|x/\˶^$(Ө#-z|]99D (TU@#*jsCh~#(d{"Q h%@r-)8ҧ ,[ǘ>ʥm#*/[/xF]6BĹas)339~qWa`h\"^7TDѓ$Bh#-9ֵ"* rzT3xw fmUHd s&aւ$#*jz0!a#*DV#߭QUQfԹS{8>ĸ mlls_|_B>-M=8A;/5^p:k5ъQ Kׇ~y!$=~FJTΟ܇&UI5HP8*X" T- wkPEE $B(@F,'FbIsRYf$bi]p%!DRa}Ŋu<뙑S$RFbo&%lb".)L YLRH٧KZ@40AA1-#(wc&iOIxz&1Dwu &PEta%'ZHve14fe4HqC)@#(yւ))*<$ 9LxFar FRPX)a"1@$y6 8(Q z4)| :;THF 6¶VU '?z:E$j"ODQov3IGS,-Zը_)Ҳ'T)]jT6л5_1#((,YFP>vxgg5F?_OF"5#*T0XI#( l("Blޗ,EH:6=d"띟X7}6mµ#({qٻ7FlD28u;=I#( ,Zu +@V%F#(#*v'o€׳׹#*fM;Cgi}g{@D=A*Pbƒ]6c^+:nWxݢM%VeӶDB!C~a;vwR.o%UQ$AK=[CbFϴ:60֤FLoXSnm묬nZe1bJ#0%@)h#-j#--20,f,Qmȴ0cZJ#--%dbDrBkTŁ^FCd#-rmah}ﶼ%[-Vƨ̄= #(>l,-$Box$1uFǢ儢0qTavQe994>$W 59 y`Cͽڪk}Liݎ q.`m]to 0q5AiKЂhH܁L^K8G ",cy߳s,Q&3k#̃ Z[9\h*fLi*öCp}ꋫ,זC9 X)׏;p&27h&WCx:|M @{gw!#-OAsr>b2 sjWǫsouo:N/Zƾ\lh#*!74ҍ-3]0]/ZLب'ĕ{#-Z@fE I~`9!1~INk;KT GLUջZ%!D`Z ARV Ыնfa~[PB䍷Anpmز)_<ʫau*H1|v >'}{͈آTgb\ c9!lgpS#(jxCmAHh1LLO=#-!'m;_#(BF5|fmDwK9Bݔu⦡2j?vtk@u.#*n8xVL2 g@q^=6-|#-FCC[|C0#*ڳʑ$E- j*L\9P,am;#- XSU%RG¯^lw2t%(*q8E|h@5#-esֱDb E@O*@Z#-6(38~~z}3.DFq#* ̪MZPvg{g'-s^4l$r,& X!'=5g/.ĝ3#-쩔;w\Z9˷+| zOY#-8h UTZ%NwmgE@ ~rb1AUG&<׺'uUE(\Uhʈ,r>F.~-u͸Ln~6Xcdj `)qZ ښn!G ܛ}Rx<\<;^^hC&+'Mn8U;"ǑC~tcewo0<&1de"'Ď˞ܛZvS?Tkmh#axN2L4w{=,~NHy!ȁ1Gn=1+俤0v@$%K8h~X??x`beԓ8VԄd_8:Ҋ=}_hhq|Q@@Y$@K&鷿ǒB`va b9hH&ā0P]h;a98ҋ)D0@ٿĨqP#-Dd#-**AE(Z%f hPbnš$Z #*k٤?0`.E#-kjb`)]Dk.kˮ}Şw $d" '&s/clʐ*6յZ+aV*66&*H**+X#*/1#-#(ɡCL@^0!;E$FF1@;J#-?^c^F1g}v Sc!*c>ɛtn8|.ăcIj7n= u@Y_nmUE_V!G#(Zg:?o#(a!?2}TCX?N4ފ*zj^4OegٿbL$8˸[.^2I) 5M *f##(X$H$a"@:#*7~}^dԖL#$!b 샦fwSZ]ऍMlPZ|j5$hl(:_`GWۻ\Ss#@{ߧ¿=(; Vaֻ#*nLBNq#* Z.#*4#$R-94dhlp@G0x#*x3NT.Z|F1KEݍ׿uI^Wf:Zdz8 %m,(d)!B" m֒lZBef%D%t#(`3blcCo1UaAV#*cjbە%{V׈$0 RFKb.0c[(*I*U`?- HpQK=۲}|ӕҥ~c%DU'y{Fc[%oE,y#*}l`la*-B- phؙLո:\DZ{#Y&pOw6Uũ%C異|R&Dh[bq)38R#*D#(adƍ-!c<#(Cy{t~Oʶ@]$H#-72udD}%Q81c{N[Z*I&*͙$K<pJ|;[bYfշ [B{4 Muuҹ/]Y lcIb Mh1ǢM&T}s!dvg/Mn{EFvB.M9Ƣ23Z)EA]#73PhSǠέhGRI2bKѭ#'l4U(Zjy=dzDl{qP#*aA{Je#(Do`;O?Yx:Y"F #(x#(B"#-x>H0_m$kEQElijp^GÞ#-W&C37xn8@wKl q(̷Y\sG;7l 4c; L#- \YwsGlIɣ|DP(#*=#-P y!$.wk#-ϙ o =FGɳӝZҏ:g(7E/RDPS0ifڴٞa~N88E4Ԓ,`A7A]^ee$^~ҘzA)@DV4HGAn(#*T"@›<%7#-ct6%F3ufSNiwePC#3!N#lK v @~$t{n}%'sŖb'3f4vlg_H+ 5`8! XD\8]p ^ )3{6z#o#*?,#*ES9/.)owM rML:p@/Y)tL#. $C5A6~Qtˮ2}VblMQ2gCByp%QHBk%m`Θ~cgˢIpݗ^ b>c:W7XFKPQNcʻz#X+#!"gn{ζ$t\.^tі@UJ@R(gc[&љFTfDE&!&4J1dhRdٲl(H-~GP"Gl_l5_^X>VĹsWkm3763td Ҋi3b"*`[:`eeq>α)@4*T}Y}ect6J}'ގ&D +fCxg1.`-MUNB9c%a{y`xj9pbj6[qk0 -&%<Oبs9n9_~A3qs6PuO[XIei4` h*c%)XiJhe H(@X6⧮\EW,)[v]ם+fkn#*V1r!mƓm—!|P J]F8*#(#W4mhjMixہW.i %CKPeݲrKE(R̎(GmN6?tees4~/ShX#*K *9)TqChc6H [y![y`ml٢q$RHbBR("x6([]ݮ꣧jH-M(F"8~Bm19 2mM6M3FSLlk$J `VT6'jU8rӥ%;03l"- GT:#-pci6TJT-1X4#-TES0%H%*p]jn-j @ b2̋jGecz*"`ZR+R#*YhKeqe$+$ JdX5ӃL]*h1bȗ# 0mubXZ:5M2Y"mE1fጒ.kRPn rnbZ@<(ӄ}2#**^*0R;F`)Zj#* iQn@dWcB64b^)1Ie1~|,9X*7bc)[) R#HZB*ZFL2l46m-\,z^5vL%SȂ P`{&. bͼ1#*dӃ bhT"m#*,v9fJ*%z=,1hnA7D73OҙzMͅAJ@!s(4[: )ꑭ![jd"iİ_LLDKJnR5U!ǝ%r{k8YXE-64x5H1#*]`ŰEQ$DؚgS#-hFlPD0#-AD*("`#(r"!*yoXU,)*ڦxytƨkut]q=\mm%j-(Z6ɓVPB!h1CNtѾ@@R(TTBE! #(v,[TQb'5d̹o5-TiKf*Q#(Hr{I PTCda4'7]>8J\ B,\/5Q\a9!Y Xxn*ɌU)Q` -"`܎EA=jB UAchve.6r4J1e )e:6Jxܕ#-hW ђk&Xl3e61.X xPo^nvEL|^{-k>$Vl5X:#(f,Zb+QGv` r}E1z]f]Dž}n]I'.}eb4lf/%-봟#XAuy/7#*Y0q́ީ)$H#-S x]TߊR'j[`z#*ln5(z!P[55XP bKNRD=uSx)ZbQ.@uqU! vXOy,",9 #*-F#*!ʈT(Kd"RR& Ad=+dZ݉n]V6cG7+tշM-%ɮ\nlkclPbQ\Yݬ`?I1imk}W b#(o(Ӗf%f3 /ewlgHI‍#(EZoJ0%;(9<*/~t?9f<|T:L$#(*Z]ƈƐhb$m% #qdRQU@w#-(F1@A#( "-"J!I[EvEB!.2E0$DHѭJ5#*/V#AAS&!BZ4hA *H! ۇlh|~LhzStXhh eŢj#**ƇJE#@r7%D)כּDZB(1/&ʤpGqB*#-7L(aJյۥuTe .ZشVNUpV}P}G(7Tzq*>j`8C+f{CK^YW<"""L|NKtx4j KVT'B+IxSE)1hΝ;cE{vZ;K<'2=\O{؇UtBK=qѲwSatVuz@`:KSry⨟?Whl\1*۳="^)u^xqM(ώ3a)Ǵ3U,T:[pZp]٣=uLʭJߙQU3x'bm&ZYLĒ89vҞ{d ?1_Wo BhHhJjZ${$-kBLxyT.l!ᬓ'/O,]]Bn$I·ӭ-K(CtSI #Y.m7A_d2?^Atrj%u<ݵgQf.e֤}ik. Y}1k-n}?qrꔃR]ļR 1$[!x)sNa8CA۶SrKXwo97̐(sbzT.7/c-PtӦqRj>i4;lgr#*de3~3ĹW5+iųXɄtLFW59#۰a+Dztp⒧fjU*';UBx,pѾa& qKjzjծp)CMkEmHXRX}Tp(fy߉bP/M2iVkQ$ys83D^[)XȡGcZ3fcM_]y汎\gߎΨXBYT [NMMv&tGnLunxKT.港 t|`QWA[Psq xᅥ-S8πw<%znv#-%BX;LgHXEhzzqPm3CDe(APc4L*y y1Uʼ^I\mxUR/RB!1UkVhn[[!֙H"6j,TeA(&EJ xyb39#(0~87.I kTSTx\կ֊\ljznUunF]P;? KZ}}XeR9c`#-D"5j4{mk7Z1tlŢEv`d4|=F!Vb8W ׅ&XHR&*2ᔪ"\iGx˺o"DL)IL`ێlMFi"4!W-?g@:ŻR:I#-^|{LL8(M ,&3N H%fn07#(iReh;Yf#54QHj*=6S &5IZt9j[VhJ&.0)T,YhXx)+"]hPZ2L-~[Zv0;ķHjFGK,(eq1xbBhadnR%6ήeo4)ZKlx2Q1:v{8μ+\R$FG3M95JG(#-~{M=i658/*9R5hgAƣPh *P FSCi .-yd6r@ul09EZ*#*hFemF?'jij NmY8W (Dm4GSU?,4W$y%Q%wL QoX5L7=9!Hkء)Zq#B#-j4u Z'#4LSբfsmQ73N2b{yNQinmX9VOފ=GҼ}@e@F"%Z0#-.{AV#pkXcMA@=6alS!vH#*5m-aZ2F;gHsl=PDo\1bYj\̬Mng%MfDDb]P`jq#*qclLjFR#*b9 X#X$Yr!ve7-#yj )"#-D`2Lng.1Ӑ&MetmYI\>n@F ]>XP;OT`Wo&)1y\#(JUSZoeeb˧8?^&E_yg$<I^澊+GubAW١<@(Ǚ7xcd!RҮ\{N4F̪f|8z^Wr4ww&hiQTfy/Uw򝝄CTZ{𢆛V風kxY@#('GP5טCH LTJJTj[jb(E~lO!dGnU$"HHȀDiŒm&1MD(ZUil[%IRQ$hQMF!Bl)6IFRBJƖĴd3FihL6#*D &* $O8i_3Pq6!-t{ʌ7|]3yBFp@~l)'|Zb#-mC`^E$6S]LKCl3 bչMvn~;EBkx# o+؆E2! fnH\C[|ޯ<װw$jEկ qR5~}mQ%TFKXZcR&F5bLsv`,P"U#K a]w^."Td (h|pIcdj#IܸJQjf##*.V4Ct%b9I6  cjaZ H!/T-ud7t˻t$潼4c)ͽyI\+2->9k5 #-]A6#-pAȬH t=4Q8H93ބn.h0ԫTIX2@)!J#020:6db`@6!$4/`@=:o#(#(M4L#-RҰWse=Oݍ!Xr=Ǫqƕ(lλ! ؿۂa:td@6PUC t4*AjJ#(V֦i B08m+C"+hːF#FD}BBAHFNx/Gs`*hXGP'V%Xづ9-~[ف4#c#Ճ\fi HHh$DjQAD sג<9[-YlKM'4kHWLMy!"E|NKoO sCzhn0ɒzJB#mԟ&lS㥀΅β{-_P%g$;3IF*Ǟ#A -~tNjp{`#(Ǩ9!`B!,W'8=Jao/k~q1.Op~_lԲ]4X`(Q#*rz@ñ:5NPQ̬lxp<|K#( LSܟ,bURa J*.<󲔯XY 9V71PNCO.֢ՕOj}0;88 )N"4D1<+;*6hdhaxP QdU!{`ࠀ?U`%QTNr$|rkFP0\'A@$MI(/cH@89݆4 2e#(.q#(;Q7Ԁr#*d\TRT+ j]xojxܔqC8e L6MץrNI#*l=!f)! iM, y  Lf#*KG#*Ky#*ң;YTR$U7@Bu^˳!0LwL@Em@#*#*$69,j10H`A` ^oq>}~I`&jĥe@|׆V ##(|VƒiiMi#*#!ikǁknO-*B:m-3XhL dy{cxʈJH@m#-#*f <\%$òH۠m~39!-e;uVHPK(fcn8,3S @1Hx噟a4Zsr164Yc[_Mf2CgA".<_)s˄ftͱCR7Y#*9t>:d(UF:wvvDawwQK*vZ0vծ׫×uo4Ȕ[;"˹u#Bddw BB14b Ch}= W$$HuTMcw8CETa1j(M ث3D#*'w>0<6kZz=`ϋLg ##Yy1vSj#(AG؈\]&!x{XX֊$%t \7ڏHl!#*:&LYUE'>>hP? Pb n *q^Rjqƚr')L)f!P|\Krgpnc7rp 8PJV:]"?;>>Ma",:) @F9d ӎe0#vNp#(Ѝ9|>d𵀴bà['x(e[tУJI(( BDT]wI  XK| !#*2>X>H&a*PRuÀ0.:K,i~lPry$H[F*Yim#-k0bE-ԛ!qCB1b;䞨W<׿Tl<C8y͎c|P\o+ "ȋ>Dlf;6i=ʝ{υS2 =dHsծ:Uani(V"[R?mu9#*6 Dj8A;;p#*MIqAq)\epsI- (aHI)v㍘#*֐RhIH\Ȋ1#*yODBHMX>i m;04FAeKhJe#*e4.6?NTT#*6c#(-VVEsv*5V0XXpm/YJ, `AqȊC!zYQ+gPh#(A."D! !u|]XKWDP(0"0!0@sbK|}%y8z`^$X0I*QF1XC^hI ҈cA*x^ONӿ$EC9E ZJS%fp goghbx #w?OpnETg?>m.#(Vf#(#(DZ5?s_H[(yq#- қ6X}Wϊ0$2c2<]FF$#L;?Gv6zy!Rei#*EDyMmn$X-#-H PV%FBH"(n2ݷ2#-*r>F ٞ$pO@1ORӴ: H1B*KK[mjʉRB#ch&Mf/F}ZAh*j6Q)[_TR}$[!OE$=c d$HP5ƛcXmaV(6dbL`=ZHDB E A/#(#-&c}?,vwO|B (OISFeM!`pO`&&Ȅ<|Xhs "OFcu^Vo{S(>#7B fL *`,F)*pP=>8#-@Bpu'Z ZS066#-"$ۣjZM(3M6#-66i0 6(V^TYY^]z|2 :ez{LJÁ7%dB՚hVhh2G(t/W-/]cIsb>2\,|CjpPy+H EJiI*)lb66Rѿm^%ѶM2bTocc%h!THzЫ|B @T#B&zhqF`8j|.wbj^Uj1BЕfkB!>᎞ŝJR@&~w@(Yb>’#-1gv}Q*V#,fD6(రR3n,pɀQD!ZY/t:%&TWm;kkkmMoJ*-7feW[vVl*dJlky#-D8)V8myy5zo^\EQ I@Ƙ ` iFS5e]ۢ[.+s/igD2B#@t0.g5UYt&Œ*1T$p#->9*&R3E,eAT.^0cMu0S|#-A7&hCi0\^?4L3߼>B9Dpۡ#-T!ңX^}7"M#*UJ6v0w!HLSJ@aշA(^&7ӑ1GP5/]lK$GFhW#ZOuҤߎ>9t(a-Q K l0>qCZ6Tp7mjcl D걳̤~X7`Lݟ̈́Y nJ֮^ύ]c8%#-DG>D 7(6ւդIlu Ɯ#*110;D v՘(~ds[!]_#-KBKIH @Dhh)fN[=A<*pNX%6s#*W0& :9x8<ΓV(#w2hK>W1 娈m@_*j#*R`api+^$m趍BãJn#*ls8a9QS>t:"#t#*S PoK"EkHHu>IFSK!jFV47~I!#l/^YzȆAᡑvnFw[{}tXmDI!hDA"g *P[@4&#-=3OBH =#(c36"1P~#( jm_7G?Ï1?/_[O?G]?'l~@Gԩ!D~LraN؆AWTyp.x)"`C 5~Bo{[IQ<7$@#*jl܄ugR]mG$*dSxq²¡?ÆtP\O n@=O_2΄v)|$tvaX AFY^?1V7p=COw˥+q#(FBuـ:bsjʫ' wvx&.AeiLV,|p&odkf5̥AJl9s ?Șgh6R4v0#FvjٻVVM ,rު(AnëNYB͸*5`f#*\#*U&^_3:w$$0Coϥ#شHtA#*hwIPeayPCAsGLMN˖(W3$$b1kgؼ@H?;A33 _Rxx3:h f4S x}2.VwA=x^nzXѬLWzK0NG\HMG.HCd0UW8>[5cJ;j@v?~;szQ5EATN*ABwtqLv``3(H&M",AvE,PĐ#($HB$2Hrx x S{>|ı38bKuɀ]N.vw#`D‡=hP48hm-ZHD &5 j%#*A5ͪ-YM3LbˆvU|>k_qD^>!B4М\Hy=)O)dr XNCWSCy zU ~clYΖ4eV-/E:O=b;=@{ݨ.$([#}һxULqs8iӶeecs&X߇hTK^VӘH0N2B[e7Hߨ0z;gt_:)LP1KUcg`y֮O`=G҈#( ]BCuy -#<== diff --git a/wscript b/wscript deleted file mode 100644 index 65a7f4b..0000000 --- a/wscript +++ /dev/null @@ -1,138 +0,0 @@ -#!/usr/bin/env python -import os -import subprocess -import waflib.Logs as Logs, waflib.Options as Options -import string - -VERSION = 'xxx' -APPNAME = 'non-things' - -top = '.' -out = 'build' - -common = [ 'nonlib'] -projects = [ 'session-manager' ] - -def options(opt): - # opt.add_option('--use-system-ntk', action='store_true', default=False, - # dest='use_system_ntk', - # help="Link to system-installed shared NTK instead of bundled version") - opt.add_option('--enable-debug', action='store_true', default=False, dest='debug', - help='Build for debugging') - opt.add_option('--disable-sse', action='store_false', default=True, dest='sse', - help='Disable SSE optimization') - opt.add_option('--project', action='store', default=False, dest='project', - help='Limit build to a single project (' + ', '.join( projects ) + ')') - - for i in projects: - opt.recurse(i) - -def configure(conf): - conf.load('compiler_c') - conf.load('compiler_cxx') - conf.load('gnu_dirs') - conf.load('gccdeps') - conf.line_just = 52 - - conf.env['LIB_PTHREAD'] = ['pthread'] - conf.env['LIB_DL'] = ['dl'] - conf.env['LIB_M'] = ['m'] - - if Options.options.sse: - if os.system("grep -q '^flags.*\' /proc/cpuinfo"): - Options.options.sse = 0 - print( "Processor lacks sse, disabling..." ) - - conf.check_cfg(package='jack', uselib_store='JACK', args="--cflags --libs", - atleast_version='0.103.0', mandatory=True) - - conf.check_cfg(package='liblo', uselib_store='LIBLO',args="--cflags --libs", - atleast_version='0.26', mandatory=True) - - conf.check_cc(msg='Checking for compiler pointer alignment hints', - uselib_store='HAS_BUILTIN_ASSUME_ALIGNED', - fragment='int main ( char**argv, int argc ) { const char *s = (const char*)__builtin_assume_aligned( 0, 16 ); return 0; }', - execute=False, mandatory=False) -### - - for i in common: - conf.recurse(i) - - optimization_flags = [ - "-O3", - "-fomit-frame-pointer", - "-ffast-math", - "-pipe" - ] - - if Options.options.sse: - print('Using SSE optimization') - optimization_flags.extend( [ - "-msse2", - "-mfpmath=sse" ] ); - - conf.define( 'USE_SSE', 1 ) - - debug_flags = [ '-O0', '-g3' ] - - if Options.options.debug: - print('Building for debugging') - conf.env.append_value('CFLAGS', debug_flags ) - conf.env.append_value('CXXFLAGS', debug_flags ) - - else: - print('Building for performance') - conf.env.append_value('CFLAGS', optimization_flags ) - conf.env.append_value('CXXFLAGS', optimization_flags ) - #conf.define( 'NDEBUG', 1 ) - - conf.define( "_GNU_SOURCE", 1) - - conf.env.append_value('CFLAGS',['-Wall']) -# conf.env.append_value('CXXFLAGS',['-Wall','-fno-exceptions', '-fno-rtti']) - conf.env.append_value('CXXFLAGS',['-Wall','-fno-rtti']) - - global_flags = [ '-pthread', - '-D_LARGEFILE64_SOURCE', - '-D_FILE_OFFSET_BITS=64', - '-D_GNU_SOURCE' ] - - - conf.env.append_value('CFLAGS', global_flags ) - conf.env.append_value('CXXFLAGS', global_flags ) - - - conf.env.PROJECT = conf.options.project - - if conf.env.PROJECT: - pl = [ conf.env.PROJECT ] - else: - pl = projects; - - for i in pl: - Logs.pprint('YELLOW', 'Configuring %s' % i) - conf.recurse(i); - -def run(ctx): - if not Options.options.cmd: - Logs.error("missing --cmd option for run command") - return - - cmd = Options.options.cmd - Logs.pprint('GREEN', 'Running %s' % cmd) - - subprocess.call(cmd, shell=True, env=source_tree_env()) - -def build(bld): - - for i in common: - bld.recurse(i) - - if bld.env.PROJECT: - pl = [ bld.env.PROJECT ] - else: - pl = projects; - - for i in pl: - bld.recurse(i); -