From e1d7a10995e433b28c2f53f31a7be4a4a6d1b9ee Mon Sep 17 00:00:00 2001 From: MAX MARRIOTT Date: Sat, 7 May 2016 10:25:08 +0100 Subject: [PATCH 01/11] added boolean option to append method --- OSC.py | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/OSC.py b/OSC.py index a65ae20..119819b 100755 --- a/OSC.py +++ b/OSC.py @@ -291,9 +291,14 @@ def append(self, argument, typehint=None): elif typehint == 't': binary = OSCTimeTag(argument) tag = 't' + elif typehint == 'B': + binary = '' + if argument: + tag = 'T' + else: + tag = 'F' else: tag, binary = OSCArgument(argument, typehint) - self.typetags += tag self.message += binary From 29526e3ca51af196f95381fd131050b459b95f9d Mon Sep 17 00:00:00 2001 From: Max Marriott Date: Sun, 8 May 2016 21:45:49 +0100 Subject: [PATCH 02/11] edited setup.py to newer setuptools allowing developer install, couple of test files into examples. --- examples/client.py | 9 +++++++++ examples/server.py | 15 +++++++++++++++ setup.py | 2 +- 3 files changed, 25 insertions(+), 1 deletion(-) create mode 100644 examples/client.py create mode 100644 examples/server.py diff --git a/examples/client.py b/examples/client.py new file mode 100644 index 0000000..6ff287b --- /dev/null +++ b/examples/client.py @@ -0,0 +1,9 @@ +from OSC import OSCClient, OSCMessage + +client = OSCClient() +client.connect( ("localhost", 7110) ) + +boolean = OSCMessage() +boolean.setAddress('/in/phantom') +boolean.append(True, typehint='B') +client.send(boolean) \ No newline at end of file diff --git a/examples/server.py b/examples/server.py new file mode 100644 index 0000000..e871af4 --- /dev/null +++ b/examples/server.py @@ -0,0 +1,15 @@ +import OSC +import threading + + +server = OSC.OSCServer( ("localhost", 7110) ) + +def debug_handler(self, addr, tags, data, source): + print addr + print tags + print data + print source + +server.addMsgHandler( "/in/phantom/", debug_handler ) +st = threading.Thread(target=server.serve_forever) +st.start() \ No newline at end of file diff --git a/setup.py b/setup.py index c010af4..7056bba 100755 --- a/setup.py +++ b/setup.py @@ -1,6 +1,6 @@ #!/usr/bin/env python -from distutils.core import setup +from setuptools import setup import OSC From eb4af1cf4faaf3f206300b9ef341472547425d43 Mon Sep 17 00:00:00 2001 From: Max Marriott Date: Mon, 9 May 2016 18:17:22 +0100 Subject: [PATCH 03/11] added better solution to OSC.py some new testsing stuff to client and server --- OSC.py | 36 ++++++++++++++++++++++++++++++------ examples/client.py | 25 +++++++++++++++++++++---- examples/server.py | 4 ++-- 3 files changed, 53 insertions(+), 12 deletions(-) diff --git a/OSC.py b/OSC.py index 119819b..da48aac 100755 --- a/OSC.py +++ b/OSC.py @@ -171,6 +171,9 @@ global IntTypes IntTypes = [types.IntType] +global BoolTypes +BoolTypes = [types.BooleanType] + global NTP_epoch from calendar import timegm NTP_epoch = timegm((1900,1,1,0,0,0)) # NTP time started in 1 Jan 1900 @@ -291,12 +294,14 @@ def append(self, argument, typehint=None): elif typehint == 't': binary = OSCTimeTag(argument) tag = 't' - elif typehint == 'B': - binary = '' - if argument: - tag = 'T' - else: - tag = 'F' + # for booleans we take only the empty + # binary from the def and trust the users tag + elif typehint == 'T': + binary = OSCBoolean(argument)[0] + tag = 'T' + elif typehint == 'F': + binary = OSCBoolean(arguement)[0] + tag = 'F' else: tag, binary = OSCArgument(argument, typehint) self.typetags += tag @@ -742,6 +747,9 @@ def OSCArgument(next, typehint=None): elif type(next) in IntTypes: binary = struct.pack(">i", int(next)) tag = 'i' + elif type(next) in BoolTypes: + # return tag and an empty string + tag, binary = OSCBoolean(next) else: binary = OSCString(next) tag = 's' @@ -787,6 +795,22 @@ def OSCTimeTag(time): return binary +def OSCBoolean(boolean_value): + """ Verifys you are trying to perform opperation on + a boolean and returns the empty binary required along with correct tag""" + # binary is always empty so define immediately + binary = '' + if isinstance(boolean_value, bool): + if boolean_value == True: + tag = 'T' + elif boolean_value == False: + tag = 'F' + else: + raise OSCError('OSC was expecting and boolean and got a %s' %type(boolean_value)) + + return tag, binary + + ###### # # OSCMessage decoding functions diff --git a/examples/client.py b/examples/client.py index 6ff287b..9783563 100644 --- a/examples/client.py +++ b/examples/client.py @@ -1,9 +1,26 @@ -from OSC import OSCClient, OSCMessage +from OSC import * +from time import sleep +import threading + + +server = OSCServer( ("192.168.20.33", 63535) ) + +def debug_handler(addr, tags, data, source): + print addr + print tags + print data + print source client = OSCClient() -client.connect( ("localhost", 7110) ) +client.setServer(server) +client.connect( ("192.168.40.1", 7770) ) +# client.setServer(server) + +server.addMsgHandler( "/info/model", debug_handler ) +st = threading.Thread(target=server.serve_forever) +st.start() boolean = OSCMessage() -boolean.setAddress('/in/phantom') -boolean.append(True, typehint='B') +boolean.setAddress('/info/info') +# boolean.append(False) client.send(boolean) \ No newline at end of file diff --git a/examples/server.py b/examples/server.py index e871af4..ecc2657 100644 --- a/examples/server.py +++ b/examples/server.py @@ -2,7 +2,7 @@ import threading -server = OSC.OSCServer( ("localhost", 7110) ) +server = OSC.OSCServer( ("192.168.40.1", ) ) def debug_handler(self, addr, tags, data, source): print addr @@ -10,6 +10,6 @@ def debug_handler(self, addr, tags, data, source): print data print source -server.addMsgHandler( "/in/phantom/", debug_handler ) +server.addMsgHandler( "/info/info", debug_handler ) st = threading.Thread(target=server.serve_forever) st.start() \ No newline at end of file From c00c7e3957643490ca75d66edebc1802e7bf24eb Mon Sep 17 00:00:00 2001 From: MAX MARRIOTT Date: Mon, 9 May 2016 21:47:29 +0100 Subject: [PATCH 04/11] fixed incoming booean messages, added some more client and server stuff to test it --- OSC.py | 13 ++++++++++++- examples/client.py | 39 ++++++++++++++++++++++++--------------- examples/server.py | 21 ++++++++++++++++++--- 3 files changed, 54 insertions(+), 19 deletions(-) diff --git a/OSC.py b/OSC.py index da48aac..206689e 100755 --- a/OSC.py +++ b/OSC.py @@ -824,6 +824,15 @@ def _readString(data): nextData = int(math.ceil((length+1) / 4.0) * 4) return (data[0:length], data[nextData:]) +def _readBoolean(data): + """Tries to verify boolean value""" + # data can't have anything in it if its a boolean + if len(data) > 0: + print 'To Many Data Bits for a Boolean Value' + else: + # just return nothing + return "", "" + def _readBlob(data): """Reads the next (numbered) block of data """ @@ -901,7 +910,9 @@ def _readDouble(data): def decodeOSC(data): """Converts a binary OSC message to a Python list. """ - table = {"i":_readInt, "f":_readFloat, "s":_readString, "b":_readBlob, "d":_readDouble, "t":_readTimeTag} + table = {"i":_readInt, "f":_readFloat, "s":_readString, + "b":_readBlob, "d":_readDouble, "t":_readTimeTag, + "T":_readBoolean, "F":_readBoolean} decoded = [] address, rest = _readString(data) if address.startswith(","): diff --git a/examples/client.py b/examples/client.py index 9783563..02cc94a 100644 --- a/examples/client.py +++ b/examples/client.py @@ -3,24 +3,33 @@ import threading -server = OSCServer( ("192.168.20.33", 63535) ) +# server = OSCServer( ("192.168.20.33", 63535) ) -def debug_handler(addr, tags, data, source): - print addr - print tags - print data - print source +# def debug_handler(addr, tags, data, source): +# print addr +# print tags +# print data +# print source -client = OSCClient() -client.setServer(server) -client.connect( ("192.168.40.1", 7770) ) +# client = OSCClient() # client.setServer(server) +# client.connect( ("192.168.40.1", 7770) ) +# # client.setServer(server) + +# server.addMsgHandler( "/info/model", debug_handler ) +# st = threading.Thread(target=server.serve_forever) +# st.start() + +# boolean = OSCMessage() +# boolean.setAddress('/info/info') +# # boolean.append(False) +# client.send(boolean) -server.addMsgHandler( "/info/model", debug_handler ) -st = threading.Thread(target=server.serve_forever) -st.start() + +client = OSCClient() +client.connect( ("localhost", 7770) ) boolean = OSCMessage() -boolean.setAddress('/info/info') -# boolean.append(False) -client.send(boolean) \ No newline at end of file +boolean.setAddress('/in/*/phantom') +boolean.append(True) +client.send(boolean) diff --git a/examples/server.py b/examples/server.py index ecc2657..7381fe6 100644 --- a/examples/server.py +++ b/examples/server.py @@ -2,14 +2,29 @@ import threading -server = OSC.OSCServer( ("192.168.40.1", ) ) +# server = OSC.OSCServer( ("192.168.40.1", ) ) -def debug_handler(self, addr, tags, data, source): +# def debug_handler(self, addr, tags, data, source): +# print addr +# print tags +# print data +# print source + +# server.addMsgHandler( "/info/info", debug_handler ) +# st = threading.Thread(target=server.serve_forever) +# st.start() + +server = OSC.OSCServer( ("localhost", 7770 ) ) + +def debug_handler(addr, tags, data, source): print addr print tags print data print source -server.addMsgHandler( "/info/info", debug_handler ) +server.addMsgHandler( "/in/1/phantom", debug_handler ) +server.addMsgHandler( "/in/2/phantom", debug_handler ) +server.addMsgHandler( "/in/3/phantom", debug_handler ) +server.addMsgHandler( "/in/4/phantom", debug_handler ) st = threading.Thread(target=server.serve_forever) st.start() \ No newline at end of file From e32201a7fd5b3fb4efcb8e0f74476bcae9bcfe25 Mon Sep 17 00:00:00 2001 From: MAX MARRIOTT Date: Tue, 10 May 2016 21:00:22 +0100 Subject: [PATCH 05/11] changed boolean stuff to None rather than empty strings, --- OSC.py | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/OSC.py b/OSC.py index 206689e..1b1490f 100755 --- a/OSC.py +++ b/OSC.py @@ -304,8 +304,12 @@ def append(self, argument, typehint=None): tag = 'F' else: tag, binary = OSCArgument(argument, typehint) + self.typetags += tag - self.message += binary + + if binary is not None: + self.message += binary + def getBinary(self): """Returns the binary representation of the message @@ -799,7 +803,7 @@ def OSCBoolean(boolean_value): """ Verifys you are trying to perform opperation on a boolean and returns the empty binary required along with correct tag""" # binary is always empty so define immediately - binary = '' + binary = None if isinstance(boolean_value, bool): if boolean_value == True: tag = 'T' @@ -831,7 +835,7 @@ def _readBoolean(data): print 'To Many Data Bits for a Boolean Value' else: # just return nothing - return "", "" + return None, None def _readBlob(data): """Reads the next (numbered) block of data From 695d69356cfb8f5ef2ff9b016d231b10c88801ff Mon Sep 17 00:00:00 2001 From: MAX MARRIOTT Date: Tue, 17 May 2016 22:35:05 +0100 Subject: [PATCH 06/11] removed files used for testing --- examples/client.py | 35 ----------------------------------- examples/server.py | 30 ------------------------------ 2 files changed, 65 deletions(-) delete mode 100644 examples/client.py delete mode 100644 examples/server.py diff --git a/examples/client.py b/examples/client.py deleted file mode 100644 index 02cc94a..0000000 --- a/examples/client.py +++ /dev/null @@ -1,35 +0,0 @@ -from OSC import * -from time import sleep -import threading - - -# server = OSCServer( ("192.168.20.33", 63535) ) - -# def debug_handler(addr, tags, data, source): -# print addr -# print tags -# print data -# print source - -# client = OSCClient() -# client.setServer(server) -# client.connect( ("192.168.40.1", 7770) ) -# # client.setServer(server) - -# server.addMsgHandler( "/info/model", debug_handler ) -# st = threading.Thread(target=server.serve_forever) -# st.start() - -# boolean = OSCMessage() -# boolean.setAddress('/info/info') -# # boolean.append(False) -# client.send(boolean) - - -client = OSCClient() -client.connect( ("localhost", 7770) ) - -boolean = OSCMessage() -boolean.setAddress('/in/*/phantom') -boolean.append(True) -client.send(boolean) diff --git a/examples/server.py b/examples/server.py deleted file mode 100644 index 7381fe6..0000000 --- a/examples/server.py +++ /dev/null @@ -1,30 +0,0 @@ -import OSC -import threading - - -# server = OSC.OSCServer( ("192.168.40.1", ) ) - -# def debug_handler(self, addr, tags, data, source): -# print addr -# print tags -# print data -# print source - -# server.addMsgHandler( "/info/info", debug_handler ) -# st = threading.Thread(target=server.serve_forever) -# st.start() - -server = OSC.OSCServer( ("localhost", 7770 ) ) - -def debug_handler(addr, tags, data, source): - print addr - print tags - print data - print source - -server.addMsgHandler( "/in/1/phantom", debug_handler ) -server.addMsgHandler( "/in/2/phantom", debug_handler ) -server.addMsgHandler( "/in/3/phantom", debug_handler ) -server.addMsgHandler( "/in/4/phantom", debug_handler ) -st = threading.Thread(target=server.serve_forever) -st.start() \ No newline at end of file From 8bbf31997463bbb5d9edc521d685b3a8076cb335 Mon Sep 17 00:00:00 2001 From: Max Marriott Date: Mon, 8 Aug 2016 10:28:24 +0100 Subject: [PATCH 07/11] updated examples --- examples/client.py | 43 ++++++++++++++++++++++++------------------- examples/server.py | 18 +++++++++--------- 2 files changed, 33 insertions(+), 28 deletions(-) diff --git a/examples/client.py b/examples/client.py index 02cc94a..1f04320 100644 --- a/examples/client.py +++ b/examples/client.py @@ -3,33 +3,38 @@ import threading -# server = OSCServer( ("192.168.20.33", 63535) ) +server = OSCServer( ("192.168.20.33", 63536) ) -# def debug_handler(addr, tags, data, source): -# print addr -# print tags -# print data -# print source +def debug_handler(addr, tags, data, source): + print addr + print tags + print data + print source -# client = OSCClient() +client = OSCClient() # client.setServer(server) # client.connect( ("192.168.40.1", 7770) ) -# # client.setServer(server) - -# server.addMsgHandler( "/info/model", debug_handler ) +client.setServer(server) +client.connect( ("192.168.40.1", 7770) ) + +# server.addMsgHandler('/info/name', debug_handler) +# server.addMsgHandler('/info/uuid', debug_handler) +# server.addMsgHandler('/info/version', debug_handler) +# server.addMsgHandler('/info/id', debug_handler) +# server.addMsgHandler('/info/model', debug_handler) +# # /info/clock s int/ext/extA/extB +# # /info/samplerate i 48 or 96 (if supported) +# # /info/wordlength + +# # server.addMsgHandler( "/info/info", debug_handler) # st = threading.Thread(target=server.serve_forever) # st.start() -# boolean = OSCMessage() -# boolean.setAddress('/info/info') -# # boolean.append(False) -# client.send(boolean) - - -client = OSCClient() -client.connect( ("localhost", 7770) ) boolean = OSCMessage() boolean.setAddress('/in/*/phantom') -boolean.append(True) +boolean.append(False) client.send(boolean) +sleep(5) +server.close() + diff --git a/examples/server.py b/examples/server.py index 7381fe6..1ff77c0 100644 --- a/examples/server.py +++ b/examples/server.py @@ -2,17 +2,17 @@ import threading -# server = OSC.OSCServer( ("192.168.40.1", ) ) +server = OSC.OSCServer( ("192.168.40.1", ) ) -# def debug_handler(self, addr, tags, data, source): -# print addr -# print tags -# print data -# print source +def debug_handler(self, addr, tags, data, source): + print addr + print tags + print data + print source -# server.addMsgHandler( "/info/info", debug_handler ) -# st = threading.Thread(target=server.serve_forever) -# st.start() +server.addMsgHandler( "/info/info", debug_handler ) +st = threading.Thread(target=server.serve_forever) +st.start() server = OSC.OSCServer( ("localhost", 7770 ) ) From a915ac294c43cc619de97ad19f776cadc947e156 Mon Sep 17 00:00:00 2001 From: Max Marriott Date: Fri, 5 May 2017 13:17:27 +0100 Subject: [PATCH 08/11] print typetags, decode bools and give the arg back --- OSC.py | 12 ++++++++---- OSC.pyc | Bin 0 -> 99544 bytes 2 files changed, 8 insertions(+), 4 deletions(-) create mode 100644 OSC.pyc diff --git a/OSC.py b/OSC.py index 1b1490f..66783f2 100755 --- a/OSC.py +++ b/OSC.py @@ -328,7 +328,7 @@ def __repr__(self): def __str__(self): """Returns the Message's address and contents as a string. """ - return "%s %s" % (self.address, str(self.values())) + return "%s %s %s" % (self.address, self.tags(), str(self.values())) def __len__(self): """Returns the number of arguments appended so far @@ -834,7 +834,6 @@ def _readBoolean(data): if len(data) > 0: print 'To Many Data Bits for a Boolean Value' else: - # just return nothing return None, None def _readBlob(data): @@ -941,8 +940,13 @@ def decodeOSC(data): decoded.append(typetags) if typetags.startswith(","): for tag in typetags[1:]: - value, rest = table[tag](rest) - decoded.append(value) + if tag == 'T': + decoded.append(True) + elif tag == 'F': + decoded.append(False) + else: + value, rest = table[tag](rest) + decoded.append(value) else: raise OSCError("OSCMessage's typetag-string lacks the magic ','") diff --git a/OSC.pyc b/OSC.pyc new file mode 100644 index 0000000000000000000000000000000000000000..faf85be0710c1ea16ea43bccb0af19fe06b95191 GIT binary patch literal 99544 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 literal 0 HcmV?d00001 From 9dbe6607e393e4148d730c739a7fe18a946482f9 Mon Sep 17 00:00:00 2001 From: Max Marriott Date: Fri, 5 May 2017 13:25:16 +0100 Subject: [PATCH 09/11] remove pyc file --- OSC.pyc | Bin 99544 -> 0 bytes 1 file changed, 0 insertions(+), 0 deletions(-) delete mode 100644 OSC.pyc diff --git a/OSC.pyc b/OSC.pyc deleted file mode 100644 index faf85be0710c1ea16ea43bccb0af19fe06b95191..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 99544 zcmeFa33Oandf)j902e@{xNmAne4<1Fpa^i0L`f9I7I(2FQtSfNlqk_iv8n)+2vh;} z3M7$kwH-@|m*eqFykxv2cAV9*&rCed8QUG(aoTnt+mpmgd(KJhjMr`_nUiE3MH-wKqNQi>~&i=c}TttJ3q;(bd)I`I_kJn)G~a zbaicd-XC45*` z(bY}S%;xCo=4fV1bahKKvo*T9H7cp~ebMx`Xl8qKbvxHIkap1=TG1apGSM4Vc0~1o z=FHB$4;J%YLD8)?X{C5QSEU%c_yk2+R3v~ZOBfZ zi)zDmax|*#vyW=l}cvL%Jk3SyO4%*3!QGHeP_KB!Q z;|@pfLIWqG+LQL^R8)H^svoybKb=)^I;tIsCLo|^vRh}O+Otu8qZNEEyL&dO9gXT| z?e6p0-E&dxSXAE-)z3r|P}>XHgO{S(@uuRVt3DEcP~V>v+3P)+1-m#?WL%G(aN6B?!Fq;J`vR~*xi@2yO*Nc zD^Yz*+VBh6gHJ}ai&1^66@N9mTaId%tkq@f&L^`6V^OVam4IMl+1<y@Nl8yHGjGxb|jmCkTXsm@eAo@}*hacjC34~|(Kua2D> zTwL4rh4^%(*{Dy)FSVvSQ}N^Rsp&?u(`pV}sGgdtC(Zi8=zzC%Q9Eco1?$aPy%u*` zanfl_Psi8m@nB*F2X#}em{00$+Bn~dXXdL@^tfFgsJ7InPCXvF)!?HvY^>hCS#R@s z&S?R?jjPj@B&jFE0Hv0{8_%|G)!P&E)A10s4^aHV{B)-g-bvZ?Ut1{`d>y;TB>048E z&J#n&fCzEY`15taVYXd|;Dp2!0HL2e91mS@Ob!SRmF6%QO`Y|)UJ>p(x*YJPKo{z0 z+AeUK3ZcAPt@uWxSxb%%4D^o(%SOU`iI6F2BprihGad{O9UP&p2J~jDBeH>tC^-S; z)M6u$%0U0nR4eHm6><-!P#+2JKLQV!XiZN;7_}IJu0V`dAA>e1tnE}Llfi+0$f;Fr zR61#`8j8@gK|tA_oEMi#;4t;kcyP9|Fx{%u2B};FG0|v(5DS7KHDzVFoJs1_H|xp% zxZbR`1W14&K1Ror*?P4x(Wu6^DhtAmdXeZ13kLdUDmNI&Mh6flRNsoLj1{Z_nuRgV z&QI&23yO5BBjzb6+s6j_2WO2L)|0vU`k=lh?ojD4z(qPAXr<7Rka|1~ zz^5BG>Ku}eh&znfb>jsBib`2Gz*fOhV^?TR${#d*t>*N?K!4$(;b#WO(YRc%&bO1s z&H6OZ7@DcmzvkrgDX{#TR5(9f8|V*wCvE}ZwtX?QX@BvP`dHf5dZ#)%JkW1Qnchn} zm3GH*h%~VC%*+Lt`OE2?47> z1yhcZJTg2waAG=X36%xrae@H^ig*vGGB|~J zL(=d#v}B%F8K|_c6AkcDRcF|DGPGF2Wq^;gZY7R+)wavm0^Uj7hT-<=lTqM%79KM( z-{u=_un+Dq<1Z$4aD`6BQ=QK2(E|q%AI(I9T+l&~kG9&A2ZTx^hsF;M42*oV{~@Fi z!f>swA=)1=wC3R#K*1sJa?(i}06I_?4J)q<6kc)BY+8U745Ak91b)NCPMjS-fAP%a z_&_}N>ZzBWYBL64!GVktTD7UUx&N27ibRbSi^4+HL25u za1^glXr={A$oSzvK(oAsL75OuGXzqH?yjBJHCk$u7z5&IKidU7-wIPR#N^xPeHkg8K19 zC7Cic@3NKPQ&}AcgnBT&{Lb)bd|u439)~VZA;c<>)%5gr1oz0qe6#9GV`cQlXk`>) zQ#abf1MT{xpwkw4Ku5JY>`kI(5bi$;wRk}Wh`IxkpoF>nLs%53d;frO+U!#>W_`b2 z+mFaj62S`Qu6l-QbrTT7X+>egYK@5rT7t@#brnFTS}!e>_=dDHG4Hj}Ea#@f@qBY+ zz$jE->!w&AKD9S+h`?wd<$?1}z+Gj8O`K$34CEYC$z{a2$>hO?U?qhC2{|~y#RT#) zT*8!wYOVR}({(*exN?zf$}HmQI(M#5x2`k%0rjO*0dDD-i-gdAA>H)6sb!(@BdNX< z#8t|sXDc1X6qL{37~D5V3qG#Hr}w|(jDGOVYY554bgf!x*93?mv~i4xcweoxkKwL> z6pWXECVutEU2!xCJTDY)BLmeb&m3JPOE z8x0~@nuHn^@KBg*)I{r3u8^2)Fc6lVPxzfKg8-<{H;Wd6w1swSe$q^lw0cwrPziC| zPU^_jk@$k6e=62ciGnQw1V374J~EJ5Y{21EYj&aCn4IdwL)GCsm}_ytT$^10NK4*3 zeDL72BZm(jI=DYR(eBh|;**uhd2G%bjrbT!!pw^|505sdkH_^6q&B)g9z!9&u|NLQ z;qg~0*Z0TemQbr!nb{v-tTS%yX;=xkGnT5^sSX~C>A7`)CO*7OI}RO;Uz={kXWNw~ zn%A-U>Bi`Uoxgai-bj+s>eTW5@fDrMXPT1@M3Eb8uZdyNFv#!E`}h9@0DlV3H(8%< zO&9KHjX%)W^r;7hZ_>jE~R2jK;_J936~dw$&T4GbId_nyDVBFz80N zQsHU755!OkiNiqR>7|eu4BBpR3B+}Hkco^zm>e#d8Wz-Kz0-ikhT#55emXwR&Gz{C z&@k4`L>n(h4fh6P&L9Nll0s#v^yihu;(wr@79LsJLRFVLMbau!T(GEWBWToEF~Kv! z$CtnoMJ(7;YS`%PLOe1uRiB<6gnb)|JjrLDTlTXfK|p29z&qy{Mh~d38*9?W75lrm zgn#rYK6+>w#0Hh=@-ULz+t z@1hzr&ZQg!F1rl7#LyF!3e&4uL%t5iPaYn*jtWHIRY8LEu^O<7;Oz+BX1z8tKZ}lv zl5R99A6b05Rdt;q2~dAJ1^`dRmHEjflMSVtLJ=1OvjgF2=%Mvz*w~y%U=i(Ey zZR{h7ffVu|#J~soUz9SnNBp|Z^S zQx=03jSE3OQaSR_hcUoltMQQA|Kcx@c^xJov$nPX&p@+CHCQS_ETZ?A=6s`GpLNfX zbXRy=^~Nnml{#nWdIJqFg+!nuo=~p4|9W&C_sA6JlAc0W(9;sVVc^w_`9ZHVGg+q0 zaq|+#U2b9w(clsuI35>NhEv1hdp08Pqlw8UiEa1BN5d$8|Tqpu9wO z)8WxWQrq-as1Y@;9S=dV*tM8x#`vU%FHobLOYJzkJIW3IErvnfRr5Bf<|%A@K0%%I z)qEbf?2sn7rQOwi<^1KBUVZIyeB$C8)Oh7YxqRZ{|??b!kjPKF6u{4V(qZlpIj*mdPwX(GdJE0QQ4FP?>Hu zC#ldZC9|#qQav9drSUTDk8ic1U2)%ZfR`KI{qgx`6=n44=cw#*UF;#gG!5@S4V>5e zPdQ&6nR*e$vy-%%qxIUn>Z7`wjf9~Oo}OE`ZjBa-9Qf=djQLLMmDXgVdcayx z&?=9|hn|ivwr&~|KXjDpGQFqfuIOeJNE75SmnH~(FlA>Nr5G_-yEVlL!tiYUx>a-7 zs&Uy>i6=!^P*my$NUi?D+l~Lqe;0>V6OHQhbHEMnGNiMetJBz`lkLh(w;=AU<55sS zE;MeRZ+7nIMkcuZ)>dx0L|OE*zJfjAUl}TK)ltyCI^B|sAnD~C^|+%4M-qMMv2y+9 z(fG)d&mN8+Yp9`(Kc>z8rnMWd-sDVUnpzrqtHCciuY<0<+*;0LQlD;AJNCI?qUYyF zp6aNO-9L2r*-jr9@a|_jtNi59k@W1z!|56C=o9mu0glqOT%)dXW&ibXJjpM)NwGT7 zV*-I3)6@fnj!8Y}RcJ8e9rRf|nXvvUyGd|=NFjceB*eeQZjxoN)=o$<=(iIh_XBo9 z@cuqKA%4HkPVQGMU-fTL2wx`z>o?d5A^VMXvRUDKJt7Fd*-i+>Z?O{s@>}g>yMps7 zvqK?zo$R!>?Xb4(iU_6a<^y(>g!`u;cd@}isTcO@KtIQn^d0zt-`cnp5JHGx(ILS)3w+VzEN~cVfc)Js1&L(b3ARf|*13 z*`@r0q}XhQ$LO^fC_{+MyhL1|PU>C7-aK@TZw}JdMjLyc$YK5g_f8DGd1(LP{ZEcw zE7l%A@k0FOQ^@N5@sZJM=}Wcxv^w$TlShwa_qZONZOsmi9JcqLPRnAOfUrE(jYa*8 z-(1{eI*~PTe|$(^J$Q`>UJk4b)S!12Dr)iz5miy!6DWgdpq*A5H@a}ZT-OP@g`Q$l z$bxh_56~aLGQjoKU=Z~SLx7gtnz47L>k}O_EWPGt&BIRSyz9E3BZ;)^#$*$VuO@sU z{0S*`+ViL)3R;Lt-ElqWpUE7ac{k-_FxQTo*^daP(FM%Mihi9sCF-|9EDQ3t>p1N^ zsvg)P`Z*e58gEsnQLfP1QO1Wtk^S+_%JjU9wt2KL*;^e+yQ-v}q__T_6(nbQ|>6YmbIKn1O%Lt9Mn|vr4qC{keBl=nC4aq|=mlaRsAieIskHa0Y|{Bl4EN zOaZw_FyLrBwZ?`J!zO#v@pqSi3Srb0M>8EsVzLvJwslf1u}+%WYvU+w_rrC$EUkBy zI@-rc)Z1UG3Yhw3LnFPKeubd{`57Z9qL(q!OUdILyr&=32~$4zm$&f3MQgX=NJ_|t zbV20!kP65v#Jci>ymMbyhlJTeJvG*F?Ij+=0i4EZ)7w4Kjh?9enC`sYt8sj%6g3|f zIdBKEA@#6*GJ;wF1I*y7d1^)gPoaN3y&2tpScOkt+aA5sYg}S&^chaI zkJ_h8_GqJS@o1wUU?|WJRFfEpo-mws&XXF)VKn#0^K!(AIg4wh1D?6t!S5nBL&T^^ z79mc#oCFTqq=Jt_1h?b|<4t*Unv=@+BI-h%S`kVZplU#k=!gjprZwQ_Cc(y19Z)h| zVG(aJ!JuemriJ3pk({i1{vuJiesh+{S(>p~#m%oTjPM6lczPN)O4`Ga<%PFDv_kEC zLimSdRI*K|#H3`9&?FwREF4Vvr}^D48tGiOW5+jZTldYCK!d8*sZHb>?pBb7bLfTdNVO1tdya?FJyE!pa-gve(Hyx^sHE0k`VDZER zmWQ3~7G}{(`Gb11N&Mj;C()X1r49POXG3XyX=_hk&$`mOQa?YAz3WOF?VMxJww?_< zGv+A9*vsz}KT{dROI!j#%#aj3!|#~t@QmM5iQXt&j2VBkm&3YftxuH z3_}=K6B2OKcS-3s))xACh{9<fFi}&I@eGSJQmtMJ#x}}OxHZX((C6~AJi2EQ z5eQ4>==k_4^-j==db56ser#|h*WLst(|MX{^InyxFAs9 z-hYA%m-k@|d!l4}#4wIIQ9`hcCPKG$-bUHP{@W&}!<|(k>bFfW2b4ZRo!G-&@>a&Qc`W@-oidd@F zN{L(F93QXGjgOZFG+jo$n@fE?OO;%CNd+Q~M$YR(=l5_wbbd&Amogbfz0M(P(=gU? zzYnYksi32t)Fr=_sO8?`Cc$z1kr}pXh{YoG*QoU&PQ116qQRMwhF0z^FQMmz#!pZz z#oRnNpf2EpA|hj)Sj@?26oejhazm>KTDkg`RbTGr+AbqZ$j7Q`mQdM zGtmGPfWG8hU6&A z^iD$+jisTA9+d^MvH(@ytHa}ZXbPGf7@0C>TC0i4MYu$q?%p8WHVC%_;Q_uGflOO^ zwv`5)Hwey|YPCb+4u$(oM|g} z?{Pd<=9*58`@lkTOw8O=lcb1)U}P|t$7rPh zGlorY*JciUIwQZ{0g)e<-8S@AeaZm_CpGm5;Ot&Tn5IUF2ZB>=7)@b`OQ0c~cfvBo z<3lM$hHV(O8GB8;pg}*y4~bdm0>tFDun5N5kO(1Cv@di*mIum9s>NpA$a*Gf5$pDW zk*szjVKrydGVW&YSwkovqmHjx)G1+bhQ(L8m^6Do!)5V|RMo?jzx}i{1+fg{4)pi* zwMWcUMk7E|;6a~Zx&AP1kOHN-L(vt;A@J8v@{Of{xr1}kyqthUj3WclGJ`*)E;x%& zCruq73_n>fn_{KG@*-vgT*wNW{iU&OtPtVLD*p|Fr9zxh-)b|Gc9nK7qc?1%0R7KE zdSi78ix+uvSq@C;OLWob+1<0&$x7R7csia>=wM<*6yT<#&=mH&!cJLW z7_|#&Prh9;KK^Y5WKrem&nO^Qhu*dR?Fs|DU#%#ZaZK)EikKYsX|vr2NUn&|ahL5t zd5lU{+Ikt+01j@t$ArFTg=jc%EKP?rLi zRR_wKI25?7I%ddoZ@nW5BlbK#{x{S+F@*@jd`(YPy%P~+YX0ZBaLJD$io9u?N6y7Q zgxvgYqheEJbHV?0M*fibUvL3-Qlu?v?-M1foO|0^qV%`dm`AJ>#YW{XruX0&eVR%e z?p|p=)%_{2;(yc^;F>WSjM}q7EQMRV=y&*n^U{mX+Sk${vkuHdV=ye}1A6)j%7WB^ zvb@bM-i$98(VPCDkcPi`nX{D+fiQmDMDuyZKwtYlje=b5kvUGbl~yC~w&6N?fa6A- zB-yxVd<^pzILR>&(5C7E;1aM62m&?$#^~ye+Fv1l<|6>Sbmx=ieKiQX_m!u(ALaGL z5y^%4a49;bx)~&#xUgZos$<3klYc}L6h;VWd?(tJ66awX)8x!`$k|{T_pC7YvN=g2 z4+_TtOT0KB0i`LqI1wv%(neIztE7L!^ECCsyqJlY0d7N!nFisADx_+#s5C1l=YM+N z6q@8b{qQD?h$!$NBt+npYloJpyg&0OcpI$?g?1r@yOpE{mEngsEE8gsrI8g7Od8IZ znrRqjVr8F77=7nxX7nxOGBh(amB5$sg=bbAGIEASu*6CJM}=$>Cef;Opw>1bM;m(9 z_o9x9=+%T?ey8{)BOG!hbA0F#X$dz1Vjz)>stbHhI#U5LiY&Vu7s7n+4#XyPQ*3+* z&sz>A8U3x4^kfhK2+`dy6gXecM)$vU38vAk^G;hLEEm5rw-D3lFma z&g}Zo5yQcP1kSxt%IbCzR#Y`wRZYN>zyJL;4MEwIEYq(n=1{O??}4M1zk(WnQ@vHy z(K3O>_wDCV-FLBy^}Zbzn<-ZsnjHBl#mg-cAf^Q; zfoU}d6@n*wRk+X%7;DCd1Po!{=yx)}^ks&9M&aT;83H(-L)f7Dj-auFXAT?`wOU8EwJ zq!!(*ly>AN__qR@Xfx{D<&05El5QAdl>4RLvUB=^%7Od7(LCUTui5dSlSeGhgF zoC6lRm~p;NwPZVxlhdWc`>Gh8sSMU+>{5X7eAzCZ5@xkHX&M#@_7~l95irbG-zMjn znQS!^Q07KMSLe$viPT&7e;5}qN%W-d>HYGn999a|3h(?!L3J%B_&|CdM87eF6jX)! z23hIIIb;p{GQJdIz!^%KYDbk(a-G9z!ivfu#>xpANm1}*&W;>Zo@&=N$|o)fj4XDr zybUQ3y8dkt6akU4pN;(>C;8YTYjFm^jL?d8mti-~R8TaI@B(SU z!ebXlscD#bM)J|Ng>smV>ega`c^KFOHTZa{K|Y@9;!3+&4p{mEOoMJKcj4*ilC*MCg?os2_C|BNqAS>BDD3V^foX5& zhbB)Q6f-LnCKK3qrna}#JDXYOFmnl)LN52#7e)Ir)Fb@38^LCH#3wx~+ZX-LW#-jH(S2$|M0JW09&H7G_ouc zwoOmEcUN6ZT_fs`Dn&6`LHnQQg{=Mfl8wq%*p2d^Qzhn9(wB{0QZ%)RxZ%jS*4bV^ns}#A8~Lx}$neX1(dXI3%Sx?)BITvLkHS74tbx(|?ED>IQ zNr&?~T+~4du3@3M;9V7aP4_;f!xbG&5q?W&*L08>Xx33#mVigVDmts`a9sz9tMZf% zu?}zRa6^Y_9cDP>6l-UeKKemUG2YoZ0_tIj-gZ zb^UAXdY#{0x2b=5zE>>BRl>hjq&OtWEX4R^>yWWo%yYkZoG&#qybjnA%OnvKt{VVaH4 zu3?&u&#qao87BAZ(@)WeFu|lk&K!2#H0w`c!qD6_@n5OZmX+@9&*qX;NHz{WbLD)5 zrKy(8F!4%F!J*RPgp(6pYbm)yOgYe)47N0uHzR!`P09;i`Z#x*6{}^Tu@lUzSkQW2 zx}Sbs8GoU%OP8e5Y~$toSe*JIMctD)iawFF<9XTu4!rv9YTYNO+eC;F+0V`#X5@=A zej_)d(ht*!p6;7LV^)Bs{@Rr5GzuEvyPx?!aX|@5Kd;~j!(mI0k#NW|49pmqWd?wf z(9Ohv#|^PU7;lfLEje(Q7mYTm&xMt`=_e8?833oA0ePxoi{n8)l_V0EZCho+|fFEswGVN zY=bailBy#?Ix`fYhsBC)%7VAKR-dRaT_UT{q+UF9P_xi0B<2k^n9R(IdVEC_N-TR> zLN+o_w@6vPQ~Z)gIiO;B9vlXAZU{)vh0#LNnQ!7JDU1cZbiRNCLdxi6`jj?LAV|~3 zMQQk0Nh3{%JqKq3n)Fv0X3e6yn|TG{I}RzvEnNp8tpm4tmKHOpha|#;XdJIz^khW2 zK3RI8-Y$!!nItjM5-KZ%gXB9jol%c+etmbWS`zA0l5c&SM60)Zq+Re=18fX{e=t`7 z^$q51?2#1$@ZCP!j$^b5`|QmdgrpI>yDAp zYqHy%PS5eIFgS7+l`rcaKR?{vz(^&)%^bY-N)+u`O}^}w(oQ9e@}S#%mTDouF+!`N z_D-FPJR-{~&t}vh6U{jfws%kd$e;t~axa0TpQci2O=05p&{i2RV1kyf){OQQ$#pbM&(gh9)>>P0ce) zYD7z9Rap8VWZ|m!3c575aBw^teR9H`DXP&Zl?5`U{G?TzC<{Vm!Nq;z9g(rRWG0i{ zV@V_?E$bdIPs&276~eH5lXvC?xwV``y*o?WOPiMoEq;-QGzIhl>tVR<$3i$U%gzNn z&2LCOp60|<$k99%fEru+?KS4I_(mZk^^mI2o|3!sZRT$nhT3}F5W2XCKmRU!Zqqlo zsSGDRU7Gu@sA2TX{M99jnqBfYbAHI~a^H3L zoC;^utfeW5FT{3{o=MX#1%UAtrf2gJQqIjX7tDl{S4F}Z#xpI%kZ3MQW^tht$m%syKSreY7mwIP_aU0*nLoiXmP;7mg@}_hEW&D3mGy- zdm4lCE(oOj2#1S9@=g@83FN(Yo6e$ndv*D^4ud+F6=-JPZe2dip^#2=SofaP;b|Qt z^j1pXs{6AdaD6@M-%w(L1sMeEN?Z9oK$LSc*Tya>l(S1QI0znE6)_pby0)b>k5W3l zLaekf*FrVi>s*Uu4KD{t>uk>Q+(x+ToKWy72n+#arLcIGcfL)qaAqg58HA=Bv6*J` zBU}WQ1ly6H^>xAG-R@*(7>RML+h1da5fP`aJ!pK#^-%*2%m--kuQc~GI}N;LN>0Y@ z6i?%VipY*d(-Ei%932t6M62^y5I0X>+hb9qRMCZZ;RD{Wivs-hl+SNOU6MdoPcE9E zEke}OG&Me+0w@5u26;Z(>ud@orap`Fl7NP zGOXPjF{bkT{BU;)&Sxq9JsP8}deJ5ZZ7OXlJ=D9A(b`pt-Qn8HGs(SE{E`zKP~yPS z+vEc=b|&T-EOJQPw04SAoUs#LAat>11Q01HSB%6z_s-gdOj zQbgUGqy8*b{Jv86_^kvk(jtFAaB27N4M)K;UYQ$?6Y11>;5P49d=; zDHyIFE}nrQDI|+=`572xt4?F)bS;**crMjR?yVF+LWR!>K%#&!(W1neMn>pjs3PtQ zc#4K2cq0DhXi<{s2=Ic#UTw(HVcEP52LbZMN58E%%rrZrGwE;zrlor;?U&y9eBLjy z?u+JGDx)h!WeeTR>dd@~$8}~jEzNGRS5e65-abpzJGOT zLx2AUJa+x-9>6QdMgQ7r3i}K-<h>Z6rI z?F$KJf1659x#kd8(iv_R^RC3Q?pSL-U9*zqNtH5&s&W~nfaw&I%sD|h5;f;5H+Wu| zt7a?;4{_%U#!~nx{3xu)7AgsawJ4+8>WAbOdCI?R1>>Q?XmA+UfN@;7lK$KHV#Abl z9ggpN0D?8W&?Hgc$E<+)^)nt-GX9I7d9E3>Gm63-YQL_fdcu$&)Q~^9+>kFC?N#*dc!S|K zPnM_u?d6_ne>Pv&5mZ@!Nm#*l zTTR`e+J;r@s}uYWg=+5rnPRnn?|rJ>94-AG>L=7ja^{$!UoyeCvhbrBUM%y3u^3!A z3It+ZTINuLWiUXq%>fyOMle0&17!OCfV(Xe>D-AU|N z^ZT_SIYulW)?7MgwRWl#MMeeg?$84ZvYl^w0i*>k6{fArO{aPB{@SSO6Nf9;Ik;dJ z1r7m~pXykUm^m4k!-_$L0(U|IL0)o#tTd%oCt&F6Xe&}xtQP`d5em!s z2ASc^P@Lb-{aNZ!iWe30n&NX<>e2&2FuLCdJ&=3U6xmvR$6t9xozeb!%8)R>t+TlW zZrG4rynJb#1!=2OIlnV0r==k~TPdXi^DJzWjN|eich91aCk!Ske_97%4^!}f4CHgm7rO{Z`6 zuY+~Lw_cB$%!J0uD^U4%1}LQF*yMzu;s`qNrwEx(pp9s6jtXI?PJ2NV#{d8b!V(0z zFhat9BrFZbT4(WfUl;=4k~T%kS36)$OjZre);wT#srGcR^*3FMskYigbcoDUCd-fV z_3~pJl6@S+2X5gn_oR1sf)QFOd}xxOR)wkb7kzvW>Gfd_HjXN2C$byLCvdXkSvROf7Y?V_Y@NDQUR~ z*ul7&lGA5o#fYk~QQ9M%L3z84%ZiL`!HY6pK6lqiV~dBH^V8EKBo44Kh}>$pmx?+I z3uTE&JRhoCjWBvLmr$x5G71J$7PhOEzmd0c-N9igtQ9x57hLZ(u&X7fwUUuOWrw@c z6-`yaF;J^NS5WG-r|=x70UJN1Txy>ya4}37FjYz@Iiv=b zze8vIR?_)(6t~WY&wRYt`?WbfWopwEUT}P(>%tP_xsQNWob6hST78-E12X_DA;+3C zAs*LV=%tS&qOPUrrBxx8!K)y84T@%jWZ30y#;;auHJI~Fvo@B&Cj(pgJN4DS%3-Ad z?B^W^AbRV$40?SJrMSbbTU9h*fd#~bby%C-IP=C0opo*Id32|9DLh0m-M z_G_ugV1K^Zc~zjlpBqu%W?X5j(N!MOgmY1bV4>eBe#tow%Omhx#u@=A+z~JeWBa1x zz;p*nh68>#4oqpCHccsL@#t_iqmMzm@- zp7jAYr@O!^&(H^e)n$#8i5G>b0QW{o=fTWjp)`|96x#vp=?;a^DI}QgI07b-PVnt} z8-WnnM57Ndf8~_|%!NCFp#VF5$`v^SzOj=3PWQe+hi~GLk45=!>E7Sg0iZaVNVu+!6M^nOA|s*Z!n{FMHX5 zf7`Ix%|HTM6t6)uD0UiWJ#nwbI^;lJQC9yR3 zKNErbb@P%G>-r6=-GXn)Qzc2ZtX^BGv1#i4lD63kCBkoczkjiG`!fp2kuplmsS>?I z7i?{IarCbbokE*dv*xBsdghBq{+;xhtsiO6P*v8F@sKs8Kkwpa49Y5XWsb&^pL)Nl z4AZsc>ydvrIm{uL^wL*?`6q*J#uuZPF81nht+m zhwszjdv*9O4xad#p=uhhMrI(&}~ zVyP~MOv{zg34(^@-&V*O%WA`47Dc|ui85-o5x$hKXoKlo%GTP9cSw`@HA$Z?fva)#iFWs`Vk4nyVH6<%gdew*qKi$KYPHbL8+`a`it zcnx)W`?;4Oe%_vYSpT#riz*OZL$3cKR6vpytbjK{O?}aQyR-Lc66|5j(kGIq=wyk*w9C~2}Vd##hr}dYF>vkUku_Y&Ug&{r$){hPK3p{_9L+UMElJRAp zj7lDw)DFa9TkZoGmlKWKEYof~0u$IG7b&cH5wh5ednKTAlLS?~W3er2@F%L*w^dkt zotJY2rM=FUZM_rY*at`Le{;jyPPVGeo`BwaYjWs`4m=vQS7(pw@G=K?MA>%kY0j%& zzP_MLC`0plwze&Xr+o6R`0vuoLU0wg6YU9M)j4Ds5Hy>W;=0C!yxZ5>(>SPpS=hdh zJJDJu>GkX?-OvBRbN&bW*Awd6S?Vo42oPmhvx-|EL5&w)OulB?(USf5e zP%|vruJbQtm7=uWJ}&j*^tB^W(&*lEK{ zcjON(#|M~e;yM^eAF-df?b+1Og;CN`lUa6pz>ZJYam0@MOxOi~snz0vmCy5b`6qSw zDII>AgWEBS?%l7aIb--sx-{u$A%Jh^(pZ7|JzF-3xQ2U;q{e2So$?Rs`Faizt}_o! zn=5~gJMPo2b7s051C4jGJ?)z5k8)w0LtB!WloJc#Bla;{Hp6;Xbv}dBy8Pp+^T$*j zzm<4+WM;8DVN!R_@`p6UrmjVOkHA?JRoG<5jintut4pilH5*H7ncBS(^-YU|Za~Ve zx2p~CoAo^R@Sr5{nx0;c>)}bpfzgzG&-AL=sQ=(VK6UNuH~|>>)U^#ZV-2C)YtzzT zDL#7*D)QND7-Bwq&5V!tcz2~6Ls2<yf+!7b-U(*aDQ< zkRYz47|Iwl2@d0bm%qSwY%xz{i1-RcjqzKI@x=dU^cx zx$=n%_B>SW;$?^Gk(pu`9zHZa!M>~03oAtCj>PadTZPgm2;ZCks$egdanz%njddIY z^t({}OB4V~Fjs+l&IZ8H9cZ>|0o}6`FdWc}63$30xgr=mF#z1Mq%;zc2Q_Mxdc>O` z6~AOE7bjz&9^V8ed?fjA6(onJ!_D%VY^n?T3+f7$iO~gGgYl&wq9(QEm-9Q})1pkr zDf_yy4m`KqW^w#B5CBtz0tgelCO# z8GjxMm!O^DV9K9`fEmYC*G@N*K#fY<7ArOB=3vOi)TER8ne$$Qj)&Jp!7J^qVB1!A z<$KV^7hzFneI(3Me=YkJj@4SGez~JSKWgr!u#5%jDBH)ST@E1tyB};-^e=K z8AR15pXHFM*p<|12NGJQ))Hv{ z5lfnS?IhG|&KxNkS)ovwEfUKEzZ~OF&=$9<7uvZSts~v<+tsqQJn@NLFY4@s4yK@~ z^Hq|pR`GXS+|QLaF|Y#cPjYD-L?zD5&98V7Wm^U0YcvRIV`O_tY%V?A^Dx#&pK}Cp zg7jxYq2Y4U0Wye_0lO>uNL^2TE0@kKFvGdp|+|yQNGNOU}P9qy?T*K%7?w ztwYWYKo5PmQb9})?x{(*b{CBueq)M+fROw{4(wv&I%2vULRE%T02uB~n;@GnR*}x5 z6mP6_c{zQTFkX=RQ_g{-vHcNb(@dN&r1=NfOV-M3_$e<#Ql}=xmK3(dfYA>baE)Xl zSH5fLA-aouUxGCl8o$M9`ImGsW!Ib(Ho{-hz2|fgt(!qX`ViYpjqBS5+BdycHLiFi zhTq_&?-v?Kr;S$kA|SP~V?VRMn71k5i|uBpu$GTNGYl4P5b<408exPpZ4%oCiXxD! zk?hlo*g8jmn$LWJH3CeJ)s#dpA!YMQbBo9iG-1qh6j^|g8$LMl*qVH6BcGRzvI-^Z zWfi$EYX5yJ%VT_Nc1O>^qASf$f}q@Y7h7+sg!fR9RdnE8M3pob;Me6uL>r##vo_%P zWY0W9Se=+lRZ*zCW#+7xWKF&vh>S_M6enqDL2sRa7 z(9~uwQ?~{0YyA)WAK``YJ}(s=c8=01VUWnXh$RK}S52A8qO+k!O{Zg{5o$bPnc19& zY0sAb*kRQf7Q*r5U@6hQou9uHzwm;wGp7zHP>P7Q(6jW@gxTo?*HTMQgm@FTnk`$P zx^J;;7ZocmoUZFf*9)pKbGo(uOM|S|$yn`TjyH2?ZdL3(_lVG?U=XO9mI;|fS)6hH7TJ5{{FhLIjA58cb z3)znK`v59~cHFD>Qbr6UVqvWWesZOG28O|XpThGcBw8N~gV&i1O@LVp z<9`tw6T|qjHIcvqdw5#yMJCaY(kIcKeC7Kw3Gsr!JKd*&Jc zU!ibu8L^FYQK$egU(z}QleDZ#Hv=>w{2@34(Kxh9hz_nG@*5gvF)g`WNAj;$%}f0u zdB`Td)5SxS39y8FNMl>XJzR4zZt?H+H0L1yhc1m*d`@S^Aw-G3+Uz-<{RbU>SBHCH z38tU{lwTD?Fs}luKx}{kbTfqq&?>|Z8qrrt@lj6~&oKVyx@U^d13HsiuWY-smY+g*i_BRR~)P*3qoKFb|Mfx`X9mf$$3MmR*oCI-cZv?++Mh(uOE4=e6UV>x~8 zScx#J5(QY2VP{FPPdJPzQm3!2k&c4ipF3k~Rk;$iY`Oi2YN{Kg4BV9!Ps8pOux7V$SgmDWuCsw@M z$Nj2BflP-tSrUINT2k5)(-_HtSceB;J?@Q0hD+srGk49 za(>UZ6BF2z%N!hG3Z}zgz>+~*)W{e7Qtl)OInbZt?qK|xcrf5ExNCS7@*eRw1Wd9i z3{M=`XMab+-zV_$_3~XDfvzSBfebNj)E5$WIlZ8EiFaD!qXq2^IYP@EwdCU~e=~=i z-QE?awT-&)WMr5!2r{}FiPKMBrU9^J9e)X+5Yfg72<~hJFKi`&Pw#){<90Iinc-2x z67gg8=oG)C#z81yXduSPm}Pfhwv1=-4ub<9E#84Y!o0FOFevA~0Ll0>l{2^@O>0b_ z#gm6wfMsLR1<$2mO@MZNl7&0ln%KxB8~JZplhxK&&8!x;6@xv;x)K;#ZLO$f`30jk zif@hD#gJbN*~PG543~deJr>s(-RBv9qF^>d)_U{i2ee?ZRu6@9Te7U(phqfZL#jj& zT0bNp+KtePl@6-vXHd)a$uqalX+Yhlv>B1F|2OocVUG(e(AjXct;#$0pGNN_zvMSL z)Qg!2+eB;cks4r9@I4-x{L=|Cg{S-@H-RN~88^QqLxD@gmS-qH(%kp;by-c9bC%ep zLe^*FoKcuNtvuBu-eZHfr#N!hD01w$ zANS8x#z&jRmsf*&g=JlR*bBb+FH&fQ)&m6c*Wm-Q%L8 zUaWG?L;k@HzB^X0w83Qa!_8lp`{p_*lOdJQ^BvOTr8_ST2bZ4Q#IhoD4R0xe^Vsyc zV&cNj@O^j9tP$YwE6_v?vw_{ z9K3zKmZ057kXOlMOMNrn#Ao5Uz!oVA?4?*eZ>o&xSvHfzbRZy|Ja1`|z?+TP=AM@} zbo-LM8Wg9KrZ}ZDc%%||wW67-yO;$?}BP#$6Y>y`Kim=tdUVf+eCI34Ijgcu^K?Nr+`h-vc zBET&3N0gDdD7wW6Wt?XWWsFeUZ-`KZX{nW~+38+7dwUl;xz%8{vTFDpnL-LEpq=@$ zub}APH1pJMzJ>Z`?!e|_-6e7L^ZL&yRj6jJx;*^_=biP0=I%ma-=*q_V$l|w9SqDJ z5HQ5VLQkXhQSzArC(#0=EUcRI6WdR$u+DLiSmsP`q7b6Z%Q>9!AF&mtlYo^$7mT}d zaox2)d^A3PDU*(m=kcfPR}}NX?^~vmSlK`MX*Tbt*4o^G{n z)N3R2vx*ss^!}fu9-lOG68u;OI62KMRXBW8*w9_?ZHOrErLuzmsGni=t%VguDw|Sb zbh2J_A~bbxu(?xnIx!XG$9TF@ViD;=D;c-=>mnCfK3WfMGY+ARM2oiYBh4LS-_*q} zVtJmT8Ld zhMYtgk#+<2HKmiO*8DWf5^0w|sgdB!;4$IT@uSBSh(G@3fz;1;Eq?Qf1IOG|a{St7 z-WpIgzYUi@h5H5r)WQkDPPDUuP}`$?un#auFd ztMDO}Os49~&U49R`WS@kb{_Yb1PLb0XJQI$u$5d8Q$@Ly>Ry={_gggaqsEN)6+2;5 zSP{9>g8pD9Xe(ccRuy^o#!??j&r)Ri zrxd(*Wct~U3Yk)T@~FOySgOVd@wEHDt8o2TU|^;U?Scy#1N(wKn)_MVAvmjpUSu&< z3+}kV80bDr_X+I5lzR&^iD%p`i~18nM0~ttij9~}oG~slckhO42^RzFTF>cXeS0~L z!Vq$i!u~CK_XLNJ9!Z%+k|F7@3rQ{ZybO{m;?xKC3yV=n=IM8eUy^X3oA9686Tt>_ zYxeZD*Q93f&vg&9<2Ov6#o?JOdgaRrM4 z%ud{sDI|Qr|C+b*4+MR4FR^*)9@IL`e(u8_GR02ZNk4=4|H;X{vxhGi*@LNsxva4< zVXW>bYtliGtXaw)zHGybh)U=1hT*lW#YJ`gTsFLEotg03#VC)-ZGgL?CwM}1%grkr zrVu06fM+1YD~`HgIb+=JiVS%Su*)T|KVE_l!|o=KoXU-eoUurb`BeT;Fvzz>rV{(L zG=t7dM8c#_+^ci&Ee&V8^(5Rl^j31Kd8-2Edpj*rORp@m!*to4(m4I{kFu^G!;xT z$cq3SCV^6C@uP`K3!F2f(u`p?Gm7#GEM|^(!g%KTq7PU`UGM>S$=JM01?Q4VkfG%p zwkgsj4$IzumTu=%W_J+T+CMhF@Y>jAnRyh|tDgOVf8f(y;jE)es4rxIP%$|z(%}R` zkD<#GYp=UN&*F>51;x&7tzB2HJS^s=dg=t)yvco_Jr* zqccy{McSiLOr2FO19fyyK5CR3goku8$pYLkI7XWxMlv#L4Ec8a(_jT+(zu_Do8%#Z z;@-I5pwCh2Ho7yLo8%fYZQSS%c@Rpt!QQ?$%u{_Ol>X^x! zK68<)7h(?9rLCM~jK}$i&B(Iwbn>t1`WWGUW6hc66~g^$w)&s@j8d%wHHGC}TP$A8 z#08dHV95?@;4Yg8O|@790O&BMn2Lwcjat;BbNfg>Rl+bY3;FPpCHsaI82)lnC4x09*ir^Oeo#{JK|!euZ@}-gwV8H1Xp`Jg_mSR6-TeJX+)*D zXCwYyX%YzakJ;qW_RmXSlBQ+rD#>B-eZkn-)&3qegeJ`W6WJ9y`BeomRoYsl(qBl+ z{Awtpun%cYW)|UT)rv#(X1zo*TH5W|{9~uDT~{ixl7l_9@&3}>A6Oig@G8@vEWg+n zn{5Aq@^jzbAUL3A_#oSadQ$Pid}OFDs54NQ3iwfbBwZ>ttzsZV1< zxryY9)`YU+RV_9_$!w+yO6u%Fs&&!@ZDOd=&9EtDO;v>qg5(*H`5tFJ zg>?L3YA9?j_JS@SJT*d3Ou6|;b4z#4elEG1Kf#2pT&H9B{A&ua9rEzG3f7U(XC#K~o_h%zK@1ZLWk zTt8ZMMHEs*tu9KdOk$^lUClI)&XLs1geZo|!^=6E6K^R{n6U5e$cpNespntF>Rz78 zJ`5uJRzGLxzR!=D(^-bchO~~%-i8yt+>Gx-`7xEXR%EZi1$t`rsb z@Z#4A6{Y8}^oA|&B~*+#+X3pCOwxQYq1q{aiDc64H*AKhnbok})7M@qy=CG+M>D@= zc$si%ziJ4Dure`(5c7E>$!pQv#%S&}EtU+faZ|6D_T9c|ub48Ci_rK!t!Y6==)ZdpSF_cW9D|JAed zEZiFA-2wn}d)O?wKk=!v_d^%u+}~{(LFQQyd6mWG%l}@7U(o@#TU7p%4wm>J9k4J_ zR-{%?Eu~dD12Bp=!DJ@h(|Yi`985Z49^BL1S(}~qU84W}R28k+gP4&JLc}O>h&+hm z99m73*&JrjUK}#E1XULI<1~@`fbN;E)ErGpAt>Lk!v-A`9V~CwVT%r0cDHN}1?94p zcj@qe4j3kcBQ;dX~u6L`)#Sz)$C=)bh-`wn>Os+u%mzNy7lWeuiMGA zx(Aq6x3T{|_VZl5Ze9Pu{%z^jlYudhv1d%Zs_*MRs`QBh8jm`u_r#qe%d)qG)c3e! zUU!|4QP^vbm@$wpUr6@7w2`Xn(NCiC6u)FWhulq@+SG1@*h~u9h}X5C_&xhxEl2tb z8hkT;Jqj=5S3hgSU*Y8Tu%!9vYmZ3Dhk3z}#oFM&cnDK2ItNc&L)Not9Aa;%At)dm zEtIacOsn<+HxUE&T3~zP>j2F&ZvSGWsY%!nxN1#$?0AQS3{z{Ii}UPQp8ohMAY+0D z*^4CAR^lmg9i}-8X^jP~An?OH3?bDR6@nsZC?GiLOsUqRV5^7Qamcq}X+##-uq?sB z17v1km22{V!U#d*j|cb3n=AG^n2wR{L9a^F#dXZW$NQm{YK1RbOn}A&O;(L#hJfj) zd3IXrPe^MW$!bee$n=C-t$F%fqSZsvR7Vsq@3a*1OIlZ)?d1Z<2JtZCkD=X(?9Y84 z-~Z;dPrvhMoV>_Y0gmZvQH%SmRboglZC6+{ukCXhvpNQi2Zx?n$Az}>;9j<*XBZ50 zv|B4M*nFQ_eWJpYobu=Sv@ghP>JhE*HOM?aWiL-HG-I>3&ayyMhY3wuciGY+FPI}m zm*u~&l3&naFX&RR-NnEx=_LiInFH0S8!Kciwx%oSav_=Y%#ql^ov;&XitO!-jRE$qoqj&y~c>tv%*CGNl?}s8sePZR=`L zyCh9NZ_y7GTJ%GUTcrAyYtavt<~~<~b2y~YuO&vZ#QBGyiW8mAOnufSWI3l@mYVR^ z*eu92@lvd>!0NUBL+Tt7BB#70N8%zw&X|~Z`6Dwk)Qa8;lWI42w zbSUg2o|f4tKTaJNeQ6%EDh9>$%#)R|zp`9V<=r}%v&ei;Qcb&~>H#ILSPI4V?#*#0-)B>e7e~ zqdGjvA(w%6mc+dAfxi03c=4yzt^rERLb3%oR&_RU$>5dibMwF^C;(M%+JC&{_Q7FJ z>ZyHjbw$R3t$om4KfxX*tD5>Krp5PNJTjS7U(~Oc-zk2{9u8u|kz$~n`0C-T!t2hH zuDPVhtLPG=SYaW^?k|e2U$gx(#Ye2K(kF+sgJzvPo}@M3uBOXgrONX#FP&l+)sDP= z%rml0c}@IF@eTN-nmw=_u*@p=Wgx6_x04Ujse707lH(+t&(Cf}l7~5=+k9C;J<7!U zKM=4?j4S(6V*O>otWWwGFtn&~c&9Qe_E7ujYg;VN!$M0(@+gfjr-6g``n;^65#QugX8c?l~IppoVNSHAFodOV5xV zB4;_9`Sffm8MaHo)z7f~AScqgY_NbK_G6}Qv6r0`Y#%1ZOd!?`kL5nZn@+yVnPeG~ z+GbbfBLa+ZWVNs`S6SU&VJ8jMU8~=xuCApDEeou*C#-{lqJGvv!%%u>9b|H&dSmRw zmZ`M6_!PMdg@ZrJZ{Vh(i!d5QBg%(u4Nj6^`ibz=kjrpX$Yu6JUs|L~F;P#M1| zyan*I|B-e$CXlA@@Q>ww@VTPlaZW|P@MegzeLcN6%PPakl$$X^%Utq_6PUkK=A_9I zjM?sr^ZkLS6R4jJxWqHQ;zs1HVz)UWa2{pSOnGRU67r@!}?ZeSliEun9{{-Otn&3D3(@ z+5#Jx-i3gZ{;;fo!^I`)On4Ys9>_??s&%cZTgp5?&_5;*3j=2pSi7Hs0cwwlJ)0Jq zvK`aUg6uX#`pWQ2D_agGyNXzUazrVjl|sZw!GJUp~Jy_q#z< z^lLD_o5Nj*3W&s3=?Lp<?NI( zWjtMLYgJ9Qk2Z1;C%7vyWh6wSu;R0(Osu&FDfGZsx7?$K@LK^Zuy21tWau*nih^zvi`A?~*eUkA zsds(JU0AuAYwWF!B>Nr`er`mXnyN1MfJ zRz>yIw%pA_GX0SR@3Gts;V$=a<4f=@dT=E80yr#g!|FHa!YppX(l?y2xDD&xaKhp? zzU~c++xWUSEN-*T9{ZYR5< z+73H;Agb-OlaEEUU3T(dRC~Zq=*!3KgqQuYcY|UE$ zI#s~!ucqWF&m!o_osr6jLTmfO;5R<4(ZRdop0v`>YTE- zjfDrLqBqh8Xnt3GPq!@vDyVc^v-k_xs1p<#9=lq?iEkx~msrnI@76f+Sa8>;4}Pt( zOTc3aylZvyv`GP8-jFIs6b&1Sd@apa5?_UNg>4xSQ#l+R#K+_cahRu@7cD!f{HQ_F zwk5QczuA)_UC`Sq5uC%&$%4{K-nIdQs&|dYcAD}eeORv=RITT0E`$ecM}p^~d+U)j z#UCW|FL<*-1C|r*+Qlgz3XUaKn6Pe!TC)Iz8GDujq;|RXW($L}L`72$m&ODU>vT&f z5ZDnY)T$n9HDlB`R5_M1)l6pVeZgMD`)1*iFfXC2(Y`aBEV=`Y=0wX(my1Iixi0ey ziwr5hwOg^UJub?RF_7lVr&(pwJ1_Bhi!ao*x#PGeXy6eAU8y}>n|W$M2i^+-bcEU&LEnfiOSur{i8YTM>ny}djY9U2WvSCC1CC58I2-1_P~!tfRKU@)JTc>(Dm zS^YjVxt(8d!BUhgi_{`Uv*BDT_d}PWHxV-y#&_Dg(5RatBE9>fgu5nSWa>b=bKfZo zC#S?28hRpK!wYf(HJl7RBIYWkQ`jOh*>4c=D`pv{Ck=CI zxZ~UMnDuf<_smNu2d1YE{Ibq|QHS5q!4RicXXf)WWRktJQe=`C{MHPaFjzN`GxQ)! zCJywnh=y}s_cBZ$4(e*kYR2enrdd2KgA2dEbo@7 zz*nS|uIKJjP2;4Ud}^a%DT8m}_3|fZg3*y%+3X{4g8AOvNs7)Js~m?h$v6M~f&<<` zda6Z4tLk%CzaQg9)^DM+Mab1%U6_xk;EOmz>9J0WCGqqX;bmwt3)WfxQcjJ3+;&+T z&h8t7ca#J}!x~N}sL!C_tV0N4e9hVYxK(-2(6CjI|ECN9y|#~@I^WAL<07BrLS5yb zd1WAZ1{vSXhu_eMI$`K(c+mp}X^h5cI^zTc2i|W(Ba6E@hq&Itf0pWDNU!(byvRke zKE@*4>2w)0skM2L)wOuzqVm5|vn`9}Cpatk6D+~!9o^%%5+mX`#eYNtalc;dU9w}5 zs8EA)ieGYogD}!PHO|?$Ye2>_pONfVII|hBF#ZtD-KrXv*)7P^6OAdoND&iw<$tZS zAJ*aDa40y+PU@21O8TdEe<4S-&2o^bPwCJ4rM^3&(RSp?pX&BM|4gk@bD}&tE_K9O zHp0omrko1ig~+oVfAC9?MmVHNhhlz(9e)yD%hB7H+>v4wrp=~dFh|=||2E;}fGrnWkr?8GIBHpX-__ zK^2&+`EtbaxB3F4sn@5N6XGEj-tkF@;j`(4=3@nmcQ95P9Lq$4g*MR8>RBNy54(w#OA^uc0(yRE^>bRv%nCLwtrp57QQDlP|yRgk8cXqUcy z%Ih|Pw6DmAN6A`YocPzeu^%^IwW3XCyWfr{>&<$b5nqUFEu;VXbfZevkG7!^=gyXO z2pp&#c+2IMUNEko=aCvi(NK@L4+Ov8t#tjl3Jir+$7=OT-WF-gsW9L#**#)$sK$fl zmti49>+kJ~Ch{svz-yzsHEW($#e@Ha(wY)PXRG$bS->t&n|kIQmt8Lj#LHr>tfM$9 z;tGz+)xa+8P~B}rP6*7aSSZk(rSGTBL>t*-)1GL zW@mMRm2ega?C)>P_x_Lmp2L1uk_ z78^d0*KRieRx^HEJ30-f1V=a2cD|?{k2r?-Q2Q)Hd9Luy^%CzkEQa)n0m(stdH~ltj)m9Ae$PQVKo^#)suUR3LqilkV7gnNZY^FH+ z^l7J9cS5w2|0K~RmtwT7pY=_hUwAaFyF|K@cQaNJf)R4bo<4%&IFC+M5ixlf%+1C~C1RFK%Hh?PXWbl`Shq z%`4Tn*3w2B^)v1Eb}mx;M%|Q<%ewoI|L^wBJ;=`UuJ30rTJ4b~>t?U5D8$FtT@h>L z;<#pvaV)Q7Nno$dyKb*Sg^FEi~^Lu{J z_jh@?kPylQ=#^LUL1YqUoM3xBjin;>7+4gjEvCH-ujHECpERWx4C!+n z){7pQMb;Haoxu#->&%Mlk+BAF@B5<-O^Ti{d4Co&3KgKsaHwr5l`d(leucXsr;F@8 zUc%zxf-Z#_26ps6IIB1!p48y_ZSI-k=J-fAl%T()bo|yc;37tAdxjRHVhf$UqBaep z+9o;0ZpR`*$8FgD41%*^PcPcbe-oT{@8zJbH6@Ckz^rv`9JzDA=SYwi5hVmlS}U-| zpXTMYjz(l~c1Aoi?t&&MN1d8lT2gpHKbrSLU(!2E=MzeF8#XO;&sewBLTp10I^5|n zdC0{?S>I6T^#nu3@(<~Dm)!RsP) zQ*a1$bK)U(kYJN7oufD=pUAn$5HLGUC1NX@O;pbA7dRvphOA&OO=C8Rb`t^4ygep; zkm+(&b{0>n)|q8wTygBglEmQ6ZF(gGafo73)WeO;O0HOX!$4y4SrQl+T&l=AUww#U zg%p_Pr(jXM5Rt)UYjdYG(7ALR>xtM}cJ^!hnKaLc8)236c1Xq6GPJ-cb$4d=MN_3v zM$%Xr-7)(+#nw>MErAu?Fxkm3eHBT_X(jtpi-%(CK9Q!UCf#eDlD)onlgy^YC%L!Y zxhbiS+{ja+)$5hXrjfpV*7}$|3dzth!y)DOcz3}< zlC)qz?I6qd+|r_O17o=^NxnHPq7pf=NRV+;tMq1wmAruAiZ{h^h^b^z00qfegN2ib zp;)t}0?_g7?yM*Fp&ZQ}0j;Z?lU1H}P-0!N(n>|IBxnN)FN4pKqX_-x@1GTs==9YRzvRyflwFB-8am~X~+di+CPaEZ%K-ZIxB7?vS2>OY7NRF_Q{O*}F73 zL851_hNqKWZH0@=I$1$BMUJO6{DsKZc1~-!i^UYW&ilED!7c?G!`&eVM0Qdjp*I_MjM)i(sIuQN6pqMIbERhDSE zpZYYCUGAs;Y_l^fGxgK*wm`zy;;VzC&LUKDBo-iAIvA0ZF8^*oENKm;O<{#6b{&=i zxg4FFoD@u4qE}+%NpE zojpYQLOEhgW5rj5Sj`W0WJ`A&dp`^lBI8uHZ=vk;BKuHC#AviOxb4N z!GAW3v$1q~7}2%%GR|+08&*?hgdMa{<#m&!oIq1nk*BOs znx3Dr?_+3}I%mTlYHrp_jP(jz$EoCt61MK)yS1BS;D_%M2DRJ!_5l0K(SLj2NZ%Xy zUy6W{zMDa$hd8^vzY)p+Au@$nc8u&;he;0=PIl9hcMd&$(hhb=K~@?;c;JK5PCX`J zVypfG2?RLYB;!;=hiIxUuwg*;l}#3sb}KCjm5vnrJ0Zh&3xa|oha9XBFFuDB)SY3+ z5+vqJgjo3_$zr;{rS@L7{M=IO{(7#l;uhf8a~Qt=o^K7}ZF`+>A-7#;Ro0NhC;B^* zqKFE^BfgKfAbu_bVdTPHa<+%ydkMLV|CRjK{c?sgg@nz9UPs^h#E>%ga8)E4ZF5(>#5Eh(c{shu!_?4 zqqB2_sES*BI?9hJ0ds0cRtk;a!FM-e7dhdE!bT_ZU{tkZlAAxgJM^8~b*mqu+&x z3vqP0tDn3oM;y*@JI1HhYss#^;2!V!E5bb(xf-nSCmf4C)Z6WxX#_JFu66%W!8C@= zA?mg6SG9eRhBnc$QDC6Wh+QiE&WQ_Ob@);l9seI09g{Pw&OJn!;>p{^cg#biFCVI1 zz9G*jXC!?m+V3bbcs7EcN+aU+9n3@vvm(H$7#roldG0!|SQVz5>z%p?j`ZET@@KFe zjGv1@P106h$!`i9t=Eg=1_opvR-$tVpbA5oyjpVp0)6j zl8w|g#)oxq6wrs20hCq&a6>`qmRb)k)TbzbUQX}|EPa1J5z@~USpS`bqJv{@Vni|t$ru#8ECvln4qT5Fs2O6UlG8oMl5NS`Ww2TtC(3Pqr z*`-z&U`+eTFxAWJ*rr{OCIK#IC+s)4FL8pYNLemkx_=E<(tkBpvn;|-7QL93sR)P9 z*^UM_oi9e8PQq0oU3z;a;RI8;1#s_LIayLR(Dzv^3(Y0c@B!>BW#5~YoQT*PleaL}#LRYIYdfmFul?mWUppTtuACF*sxt%?RzwOq=eR*G4p!l{N zxmhnRBavRzR~DlsvYSOAJgu`fuBkNqa{z2}F;;RKgy^0s$}aUt1)^C=cCHonXR3Jg zeJm1UXQjLW6y>pr`gf@y<{7NH7CJdlCnFH6Xd#R-S(z;^bi1>sSqo9dB{d!Y)Wwl` zZsy!exK*Ry9D2)RCHHPxCvG-+GEkSNPsS?i>62-*a&82XKJ+wHbkX+Maz}%L>2Se0 zi_igtj~=dEOO*BQM_=m2wcaDawrfp zR&KI=d*~{;m7fY!6od2gwBhoiR%YrG16(ZU%AWA>X2qvwW}1jtoqS5ES+XunD{_Q- z09Ta(1uP)pHMZt7T;&}~w*cbR!l8H$0FN}-Rf$U@ce2IxiF(=;WmthB*aDTABVRPHZD z5fyT>O3$&H$Vs3qQV&U~X^Kx>yI4iC6(w@-xkP-+7Bj1sqWd7S$zuzcg%JuAuMBv) zOA?Yow8PS@i$D`}@+MES4-7E-buzFumVtrntR&)dIvCj9DbXjN=?ZlBcJ5w*a2Cn1 z+Hka`Zuc3|y}D_($W+9U(~Ase@p&;!)9p^`Bb8=cGdHciW4t%dKNGeZAhVEU0~JL< zY(cN#+iE+=o1qkYzgF@yE}eL~UkI-5oC>~vZ78|Jm%D3h=zxFy#$QB}S3dXJH@-8s z+00zm=(_Q38Y9%}3CWfoBGba(%gyKxpK9`4TJUK#=`u;PXLY!!!zB*k1M({KFj%%v zg)s;=q|8Tkcv$zmaQ%wT47#rdweMBpMIA11Fo1e>FkS0I32&!zMBR|s7LQR7)@d4H~Q=bu5MBaev@Mjz7{oG(AlC6Z&3vf z=^#8kR{W=R=7s$mltiIGvPm6&SC@)IkWJ_y%}m5NkXLi|T{>hsoY2AcpE6p{q-@BZ z(cz2^varfzd67vYP&T2fS2l^yx(&YZis5_zm_)Pk-1(cF3~eURnf~@~e?xtwK2+aa z-$vNOO>Fv6XDg8FcHP4HjmSTH*dSy#DekM^Re!ThQ}M_;4`*e<3$xv6vhyFx8G+Jn z;G{*kF_!5Z`)d&>jo4vI(R~+(gYCw_?rPD)m<-!)>S8&Bbxpt>3e?y7Oa9YDlxM5Y0YDn}!S*3@Aa;(qTRH1aX4_=F}ZE3siMdFp?P{OppTY{aXu~>xM5F0+Og-h&g z%<5z`ncJggV0VH!keN`Yu2@HD1ye12l3`f{I|P{*4bd`iLb8a)(VFU2Sxm3s8iVv* zNwaGkzZ#oppmSf*RYR64O_}dHhOUU|QbAq{Svp)LFHz1T{JQ!;4|&-T^8*ABEqQO3 zG_OEmRj{@oGr3C;&R&Eu-<+ZM7Rp5-J;7#F0D39x;53fdS#(wK-7_&A}B^8^A0ZZflw5!1+I1V6l074j0Th(o19#=F*l=P(QJ+OAm6Gjg|Q_jbA+)aCUb}jVQg^@i!ipBT0|JzZJO-u-rA~Fl zQ+c!Z**qaNG=*8LkHjg)#=;_jJjhPQn(k_2-7$})wv51%M&v=Q2ub)r<2d0Z6kS98 zMtzC~JaByCNwwh?U^&s1XbKOqh4})$wL=*^tazOcNPv5up($56u%pJoD9MyNb-p!! zT00dH=KI_%;F^4n=sCqVuOP#XV`%7e9lAj33j%DZ~q-`K=fUIP> zbQ)OwoWV4~!mbZ+Dsy_fyEsdmDI120xSM{P_)YNh8W5fuPNSNwiB^i8J|3bGffN_f zxR79N2h!&Uao8*T#QR|+jbrUug(1P-&|snnHO6oY^~`aGWN$@_RxMteVV*wi-ii@y z63=yvMQ`NcUDWf$MvqSh;pE|z$p_HYq_KJ)ax4vI;~oQRb1y{~HMO-lS;#tamMGF5 zOUb3L_#h9Z@XE*&*q%@&jY_v);OY`@_RTYgo2vx~g6Var=UnO1Dr!k5c{u)?WgET+N7 zFgtRTbA@b3;Zdt&b4Ke-_4cGg{9Y}MR73$R~EY^)8KJS;YBq99@rWIhg zz&-+@Y7)x>c6lYeq2;SK=lIQ14%*hYiP-(qs(1b~jjCWJSCMsY;|bUxAw9GlVDimJ zxMum_(qcE4QCY1Rj<`ed_NxfT_`MYDU#rAw+FI;8qq6GKWxb1&o_>lh!g99SZWCW;~dJd+0&FS1Kk_Up$3bcWiyR@!n9zzg_SP5YQB8QePd&>o>&- zeL--TOOI+SQ&(66hA`)eg)wP_!(n{5$9wr*L@_^pk&CE57SF6X7-<+u(>l~TtdTCWMLW%bnX{Q9HKpp&CYn4E zn@R6@cvw!OB>8T{X0tmuCcIM9DMmOEVL?%V819%T+LNpEk^Is*a!GSdp@bn;>b;m8 zvJd4p$4dP|tq&t8`@Rja2julKFqD<#=VjzHg;9`-%J%Mv>1jjtU!-1BQosjvkn5Zr zN2k#&Wh9is5^BdAS?q>b3E6=2j3UyfW&0U?QY@HD(z`6#<{lAsgutM6_+ikr55O1k$`Y;D@x8&pm!x~RwF$)W*K3c)UI z!4e{2_OEz1`viwsQI$vcLywspCp~F%vlgxc`#1~pyKmN+?A@%{aA2Qir_;Qgy`Os~ zDGB|Aa9CRKe2+?INl`7c4`>97goBv>q0W9)?})PCYZO^$ho3z5p8W$+|C`8L!GyMBp@%In*1sABZ(f%e2p1wy3yi@Nw4GajZ7VJ=jEkUrMu&*+fGB_J(mTorydf5Xj8Ms= zcufLAFp{m^%YKQ`;kCYUd#`f~u5y#O%C}%VSKvx7QZU@A3|>LL)2)scLyhJy3A&BMt04z>A_qg+jeX9(h+dOg`k)8FpL==GjA-&J`No@RDg z%87L62UTPEAe9X^3M))|_dz0MUuxB#V}0&EcvIPVGx#~pm@^0wV8tk_o(L_AiOI^I z!Gi%l;?+UQ(tTxaAnYffqNi46L*rGBVd*?ipEDhoMto1a5T=$^1s@SBP?wu&WS`R6 z13C!Ot&qVF<%Gg+g6)k+oYu}0(chzhVcw5FfRR59^Q{P8gBbbeXEOgMgp~-QXTp1u zJH_y%`{^Jp_l_LB{Qqi~{>$k>L_=UUg6(~6Ycw%Zev=-OW->( z@=wz(nWGHFeqTK5kv@hBReek|aX#gWM`w_sGP!vZFefcs-f@ur4LHWnM^m)4dD2bfm2B;i*kRn$uoDXCKaQpuB5=3PkvO z&4bwsdIW*i4o^HWIhh@vI()n`4|@6K$xv47o}QO3J#l^`v!6EwyjerRcI)*W{hRs* z@Pp9+7zCBw)Hg)PqHWcU1_uU^jJ1}=-;Q~4_rP$39Uq{$#VSBOQ4AE5473GH3|^P> z#*ho;Qj)aZ@8Pw86BG21%=jF`R|sYjm?XdCy=jvsU5BSGuufg^4$aA8otE20R%ohm z%#eJ-&$>7uiQ5IgQAcGT(?LCy{T&Wvusru5)`^GkRD zsd#NL+BKY|;0I}YVjEWo%ZP0py`iI)VcyFzWGNTatkg94ZF>5nDz~yN4`$4-XaYee z)n3*#c{48$UC&OBTiEGws6NQw;rdOSkJRt6W}nhe<$&vyQNn3`P=ClHAoO=|(yC}h zVVCH(TZ6{TL&J@`LZIjf|AC@|na5^uVCI3MgP8}44rU%G`c^^Z6tm`G-#A!d8483H zAoCa~=7D2RR?%QO+QZ%goCsD^+=TKu%pvh$hLu-wkS=7*-p7nG?Q+2-Og)%s@|s++ zVHovGO35D~yJJ^w_|@BBBD>db=P#kAy=c87giVf#x5SJXL*y}R*^JO-Oj;3KEiJ6| zBv3jDx`EOiB292Bb3mE%nt4D*}U+!e@E5jKo?e$McpFc$O!Xd}L5{JvEzEJO3sJ-56xvv9FJwvX3W z?kki%u2xcQHiQ((XzD#`Aju=O!Jf^72DoDa7BWQhfLB9>qEcpWW@{6$E{%^NPe^P@ z*N7DiR;@+C#zY;_n8Io<*~AT#Ho zCPwP*wB94>#v9=vZ$Do&LjTPIXt-r&Q_#pA(Fm$_-U#_TLlamqt3dSQQC~uVd+AfH zE;2I_0<=q1JhR|C4ua-^aF7>ctE8Wx2-zb#Ji%eZweviVf@SfAvWDIwNj1xV?q-!) z-N!%XQ^{kT**QJtS6{DES4gAQIHKrm0{W4l5NWJNO2gtnIYB1etrNPY%6(~I>Znwj zr?Iy@M;>X2ptT{&ZLVbureXtk4+Xc_kE@A1uYOWz7K%K%s&WA={~>4VWgXu~WXs+z3xS~VGDWZQN*Y~VefnyXlIucg7xshM7b274b3_G7CwnC8J^F1(iu z=tV1xyG(3~hp^WWM1O4o7e07NMV`B`BLNQN9eT5d0kn#oCd=~_Ohq(fcMa>NA)=^0 z`mhkRUQ$g>Bo<;+sGyG@5#fA7hYe7QMV8a};NytYT{^xnVGzIjQ)-G~K2gH}X$M$9 zIFqiBzcj~Xl8nN_)#8}=UM8ND{iF^e#7vEweTqX##y(q{==Ec~*iw0Jpg0(t4f3}i z@oO0IYgm7mv=F*d>^km^iCJAws~-A8Mj?NxW-ZHKh)a4BGj&nD4VCj{vj2?AsR1^$ z=?Y;mnzks6Qa!@2D~K!#GeeO;N_N=Lai_Nk4jJ&Zv!qBH0u!WSn{70R1$Mnp*fe;% zPj*U#)N-!-B1QC~qR@XQnnXT3SOI*~I4v2VEG8=KQIuUto>b?KS&H&}3wqoJoRbNq zFwa$JCT(K@FRsi$fV>x5b702D6?;N{O=7nph!}>8C9Lq2rRI5FU!0Szgit+}y%cDs ziIzO(;nI!)lQl^}=i3Vx(X*f76I<%u0+`~oE@5>hu}B57M-?b6@q))&hT>YkZ{X|tWE3rvs&N^J*7yoPQe-xQqrW88%^U(+aIlQ17`O~lc=6G<8h z9Em%_zF+r|FfimrxP`QuS@F1t`BFY+Jb4x0w?v!1R(bpE=b<%NZcdL8ViBo$AD{xf>S4T)@wZw_Q(mH6tB+`)=WHk}D+3=r_Ty ztCG?g&&N#p8;<;A$c(8%X#T&gU2eFAbMcI2WngLv&_B_B2JnohY>EqbHtP@@^vI?f zo2Agu0L)aLtxntD8tFDW-OK2-LN|u!zK5Cv`UzzFgqG6r4j^4Z*_f-hc0cE`h0-7p z$$t^pqw=RnB(mm!O;wG@sEU)`CSl^SV}~b?1EU4MDr;BuboD&Vr0s}a4^@S4d-5r(oq<>l-j=*%!&0iI?LaGhL8Kz3cg^8r2KpKhO5J!eW{s$dge-4C ztl)nsQ7MC^tO5Qv3CXflW6)}4R%U@3ciDWN-NBM(AtWv4%YbVmdC*Zxel(J=P$vKv zLlg@d=^!g)E{foDQYUC3+5JmVCrBJf%0-JsdGEi1s^F)KZhk)*Tw7I;eN>5$kgk+( z)+B;0X<3qYGiriLPk&iGt;f=B@_#|MSEZ zp3l_;IAT57#;7-xNUY!)q@+7qyRfsO8wemiS0eO;S%o&F8+ci2bmdy;1_qJb*#ReX z19>Qrz6&2Bj4QeUZbN(~4&?y3#LlCGDnYIrh+F0|WbO4O6Gv4yz%wQhJwrFJ6Wzd0 z75oHL7u?8Wak6_W?UQ%+;e_K?L>Y^*!99%8b?>O8&#b$#$m4Vc?}6diW;P%ObAwN- z`>zSbdnIaX;KJ^qx4UDhr4Eg?M=$E0eVi|>m$t-;5^Yh91e2hJ|tme~+gl3TTfHtM6|ClG_E@1r?T>O0r8YQw<8RM*G$>?bTjh$AIUj;eEetQJiO z-c2G&7qq(`hmytCYMu}Nv+gm{URRT~>#w7UwPL8z9S?ZyZ|S?4eTE1OCbp*E06%wy z;J9Gb2x|$NNen%ZDYdEwQz@DyIF42ify#heRM(aKGFgUL^{^=XvmEShSd5`WR9=?8 zN=#PY+N=5+a-_aDuY$IXlBi&Bs;mVaGXk>}1Q}hpe<>{Bp>hkm50BKJQ9X>Fxq`pT z(~Zk+db?2+S(>YIglLqwTRz7L!$S=6=R~(Ez9m{F!_F_)F25o1=)gBfkc_xORI@dc zM73vfQ4NNNnnJb!OtVuMbXim*9d-hw`$Q?KF(%O;A%Ba_{!oZ&dZ$NJqiA~k8BN+N z4aMrv#URB`qvT#yY5me!4;Q|wU=~7GDR2ExK30*p4(hU3-ZKBK2wk64lH1k4NFKEf z30*gkMZupdbMam3WK9lXqBcON&()-^is72NzaW8^xQK4Qn&BE05u6Y*fdQtu4m}VH zq_A4^x@!GaYacdsp`!Qf+4*o`wdNtBCCp^^evYrbAy@W6dLbsteSBaw8?Nj_>L`m> z-> zn~NRiq?lZirHMnt5sEfu7i)W9zECj4*1=lUQY91|wC99vVRfmZgTgIB0-@PDrpfo39DQ4wMX zpARx2Q+aZPCSeRvig-TKpLy%h#J$M5X!zq4z>yEkzjnb`~V#@I4pPg7R=Vv>1S zl`zoxCps&ogkR&bROx4r>#3rSu9tcr(u?XULj{9dS>I`8a8v)5l5Pv0^9+fD=cwD5 zaIlvhktN?$A%jc94BxS;na8Q)-syfGs&zQ=tinlp1sTeBNUW(MSy5;#O#m4R;L0t- zO|}-BJoXcoVx^_6O)A>rr|6*))cU2ho=@y?vesN&QHW^3OE_NGHv`j~(g zcoI=AzNE9iuK{lzfET4+ZAcai3k?ft5=DY_nmb65u_E3@Sx%p=X?dFc6#4wT)(Q>s zAKEI1bXEv;Ofqh$?jm}m_1+dB4?3Ss+^OFHXUA>7yhRhK`i!~1o3yB=7f z3x%d|zn%(S;6e01u2KwB2YC;aCJa6@($_Llk-H89I*3VSBK+Kd9Vefqx!Kd1Wj_r@ zV|tIyEi{*oYqzx*^@8NG><9Ib&Zs@Iuz*!m+mEF-FuI4{5~G=BCmUAUkLvI-J=3?^ z%kztuGhv0kJmYQLv|P`2s1iytt9#D<7=gmPYb8e&Dp^7AQgWMY-LJE|buh4WkIwe% zFs{Sj)!`>~cv*+Pr^Bap_>2yp)!}D!ctD3=)QgB_5vTG~BRJPaesqZ3~%3DYNWqn`$ sO}qN*yLe-6_v0h?joiNHYqkHhXY-zIBlVF@{H>4NvgbEOCiZOp|CATVvH$=8 From 4887f3e21de42d8b1b42b6dceb2209cea0103e76 Mon Sep 17 00:00:00 2001 From: Max Marriott Date: Fri, 5 May 2017 13:25:52 +0100 Subject: [PATCH 10/11] make sure pyc cannot be added to git path --- .gitignore | 2 ++ 1 file changed, 2 insertions(+) diff --git a/.gitignore b/.gitignore index 378eac2..8458dd7 100644 --- a/.gitignore +++ b/.gitignore @@ -1 +1,3 @@ build +*.pyc +.DS_Store From a28e393bf93ef656a907a2837b1a6ed221715696 Mon Sep 17 00:00:00 2001 From: Max Marriott Date: Fri, 19 Jul 2019 15:34:53 +0100 Subject: [PATCH 11/11] remove [] from protected characters and replace with \[ and \] --- OSC.py | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/OSC.py b/OSC.py index 66783f2..6db0e1e 100755 --- a/OSC.py +++ b/OSC.py @@ -1354,7 +1354,9 @@ def getRegEx(pattern): # Translate OSC-address syntax to python 're' syntax pattern = pattern.replace(".", r"\.") # first, escape all '.'s in the pattern. pattern = pattern.replace("(", r"\(") # escape all '('s. - pattern = pattern.replace(")", r"\)") # escape all ')'s. + pattern = pattern.replace(")", r"\)") + pattern = pattern.replace("]", r"\]") + pattern = pattern.replace("[", r"\[") # escape all ')'s. pattern = pattern.replace("*", r".*") # replace a '*' by '.*' (match 0 or more characters) pattern = pattern.translate(OSCtrans) # change '?' to '.' and '{,}' to '(|)' @@ -1739,9 +1741,9 @@ def addMsgHandler(self, address, callback): - 'callback' is the function called for incoming OSCMessages that match 'address'. The callback-function will be called with the same arguments as the 'msgPrinter_handler' below """ - for chk in '*?,[]{}# ': + for chk in '*?,{}# ': if chk in address: - raise OSCServerError("OSC-address string may not contain any characters in '*?,[]{}# '") + raise OSCServerError("OSC-address string may not contain any characters in '*?,{}# '") if type(callback) not in (types.FunctionType, types.MethodType): raise OSCServerError("Message callback '%s' is not callable" % repr(callback)) @@ -1776,7 +1778,6 @@ def dispatchMessage(self, pattern, tags, data, client_address): raise OSCServerError("Malformed OSC-message; got %d typetags [%s] vs. %d values" % (len(tags), tags, len(data))) expr = getRegEx(pattern) - replies = [] matched = 0 for addr in self.callbacks.keys():