pygccxml-commit Mailing List for C++ Python language bindings (Page 67)
Brought to you by:
mbaas,
roman_yakovenko
You can subscribe to this list here.
2006 |
Jan
|
Feb
|
Mar
(190) |
Apr
(166) |
May
(170) |
Jun
(75) |
Jul
(105) |
Aug
(131) |
Sep
(99) |
Oct
(84) |
Nov
(67) |
Dec
(54) |
---|---|---|---|---|---|---|---|---|---|---|---|---|
2007 |
Jan
(66) |
Feb
(49) |
Mar
(25) |
Apr
(62) |
May
(21) |
Jun
(34) |
Jul
(9) |
Aug
(21) |
Sep
(5) |
Oct
|
Nov
(63) |
Dec
(34) |
2008 |
Jan
(10) |
Feb
(42) |
Mar
(26) |
Apr
(25) |
May
(6) |
Jun
(40) |
Jul
(18) |
Aug
(29) |
Sep
(6) |
Oct
(32) |
Nov
(14) |
Dec
(56) |
2009 |
Jan
(127) |
Feb
(52) |
Mar
(2) |
Apr
(10) |
May
(29) |
Jun
(3) |
Jul
|
Aug
(16) |
Sep
(4) |
Oct
(11) |
Nov
(8) |
Dec
(14) |
2010 |
Jan
(31) |
Feb
(1) |
Mar
(7) |
Apr
(9) |
May
(1) |
Jun
|
Jul
(2) |
Aug
|
Sep
|
Oct
|
Nov
|
Dec
|
2011 |
Jan
|
Feb
(8) |
Mar
(4) |
Apr
|
May
|
Jun
|
Jul
|
Aug
|
Sep
|
Oct
|
Nov
|
Dec
|
2014 |
Jan
|
Feb
|
Mar
(1) |
Apr
|
May
|
Jun
|
Jul
|
Aug
|
Sep
|
Oct
|
Nov
|
Dec
|
From: <rom...@us...> - 2006-05-31 07:41:29
|
Revision: 191 Author: roman_yakovenko Date: 2006-05-31 00:41:23 -0700 (Wed, 31 May 2006) ViewCVS: http://svn.sourceforge.net/pygccxml/?rev=191&view=rev Log Message: ----------- verifying proposed fix Modified Paths: -------------- pyplusplus_dev/unittests/data/vector3_to_be_exported.hpp Modified: pyplusplus_dev/unittests/data/vector3_to_be_exported.hpp =================================================================== --- pyplusplus_dev/unittests/data/vector3_to_be_exported.hpp 2006-05-31 04:25:10 UTC (rev 190) +++ pyplusplus_dev/unittests/data/vector3_to_be_exported.hpp 2006-05-31 07:41:23 UTC (rev 191) @@ -294,7 +294,9 @@ return x * x + y * y + z * z; } - void do_smth( const Vector3& x = ZERO ){} + Vector3 do_smth( const Vector3& x = ZERO ){ + return x; + } // special points static const Vector3 ZERO; This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <rom...@us...> - 2006-05-31 04:25:18
|
Revision: 190 Author: roman_yakovenko Date: 2006-05-30 21:25:10 -0700 (Tue, 30 May 2006) ViewCVS: http://svn.sourceforge.net/pygccxml/?rev=190&view=rev Log Message: ----------- adding new unit test Modified Paths: -------------- pyplusplus_dev/unittests/mdecl_wrapper_tester.py Modified: pyplusplus_dev/unittests/mdecl_wrapper_tester.py =================================================================== --- pyplusplus_dev/unittests/mdecl_wrapper_tester.py 2006-05-31 03:55:37 UTC (rev 189) +++ pyplusplus_dev/unittests/mdecl_wrapper_tester.py 2006-05-31 04:25:10 UTC (rev 190) @@ -78,6 +78,26 @@ mb.global_ns[ 'public_base_t' ].exclude() self.failUnless( public_bases[0].ignore == True ) + + #def test__getitem__2( self ): + #mb = module_builder.module_builder_t( self._get_files() + #, gccxml_path=autoconfig.gccxml.executable + #, include_paths=[autoconfig.boost.include] + #, undefine_symbols=['__MINGW32__'] ) + + #mem_funs = mb.classes( 'public_base_t' ).member_functions('regular') + #print len(mem_funs) + ##self.failUnless( 1 == len( public_bases ) ) + + #mem_funs.include() + #for mf in mem_funs: + #self.failUnless( mf.ignore == False ) + + #mb.global_ns[ 'public_base_t' ]['regular'].exclude() + + #for mf in mem_funs: + #self.failUnless( mf.ignore == False ) + def create_suite(): suite = unittest.TestSuite() This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <rom...@us...> - 2006-05-31 03:55:51
|
Revision: 189 Author: roman_yakovenko Date: 2006-05-30 20:55:37 -0700 (Tue, 30 May 2006) ViewCVS: http://svn.sourceforge.net/pygccxml/?rev=189&view=rev Log Message: ----------- applying Allen patch - gccxml check error Modified Paths: -------------- pygccxml_dev/pygccxml/parser/config.py pygccxml_dev/pygccxml/parser/source_reader.py pyplusplus_dev/pyplusplus/module_builder/builder.py Modified: pygccxml_dev/pygccxml/parser/config.py =================================================================== --- pygccxml_dev/pygccxml/parser/config.py 2006-05-31 03:41:50 UTC (rev 188) +++ pygccxml_dev/pygccxml/parser/config.py 2006-05-31 03:55:37 UTC (rev 189) @@ -27,8 +27,9 @@ , define_symbols=None , undefine_symbols=None , start_with_declarations=None - , verbose=False): - """Constructor. + , verbose=False + , ignore_gccxml_output=False): + """Constructor. """ object.__init__( self ) self.__gccxml_path = gccxml_path @@ -51,6 +52,7 @@ self.__start_with_declarations = start_with_declarations self.__verbose = verbose + self.__ignore_gccxml_output = ignore_gccxml_output def clone(self): return config_t( gccxml_path=self.__gccxml_path @@ -59,7 +61,8 @@ , define_symbols=self.__define_symbols[:] , undefine_symbols=self.__undefine_symbols[:] , start_with_declarations=self.__start_with_declarations[:] - , verbose=self.verbose) + , verbose=self.verbose + , ignore_gccxml_output=self.ignore_gccxml_output) def __get_gccxml_path(self): return self.__gccxml_path @@ -94,3 +97,9 @@ def __set_verbose(self, val=True): self.__verbose = val verbose = property( __get_verbose, __set_verbose ) + + def __get_ignore_gccxml_output(self): + return self.__ignore_gccxml_output + def __set_ignore_gccxml_output(self, val=True): + self.__ignore_gccxml_output = val + ignore_gccxml_output = property( __get_ignore_gccxml_output, __set_ignore_gccxml_output ) Modified: pygccxml_dev/pygccxml/parser/source_reader.py =================================================================== --- pygccxml_dev/pygccxml/parser/source_reader.py 2006-05-31 03:41:50 UTC (rev 188) +++ pygccxml_dev/pygccxml/parser/source_reader.py 2006-05-31 03:55:37 UTC (rev 189) @@ -170,14 +170,11 @@ ffname = header if not os.path.isabs( ffname ): ffname = self.__file_full_name(header) - #input, output = os.popen4( self.__create_command_line( ffname, gccxml_file ) ) - #input.close() command_line = self.__create_command_line( ffname, gccxml_file ) if self.__config.verbose: logger.info( " Command line for GCC-XML: %s" % command_line ) input_, output = os.popen4( command_line ) input_.close() - #output = os.popen(command_line) gccxml_reports = [] while True: data = output.readline() @@ -186,11 +183,12 @@ break exit_status = output.close() gccxml_msg = ''.join(gccxml_reports) - if gccxml_msg or exit_status or not os.path.isfile(gccxml_file): - raise gccxml_runtime_error_t( "Error occured while running GCC-XML: %s" % gccxml_msg ) - - #if not os.path.isfile(gccxml_file): - #raise gccxml_runtime_error_t( "Error occured while running GCC-XML: %s status:%s" % (gccxml_msg, exit_status) ) + if self.__config.ignore_gccxml_output: + if not os.path.isfile(gccxml_file): + raise gccxml_runtime_error_t( "Error occured while running GCC-XML: %s status:%s" % (gccxml_msg, exit_status) ) + else: + if gccxml_msg or exit_status or not os.path.isfile(gccxml_file): + raise gccxml_runtime_error_t( "Error occured while running GCC-XML: %s" % gccxml_msg ) except Exception, error: pygccxml.utils.remove_file_no_raise( gccxml_file ) raise error Modified: pyplusplus_dev/pyplusplus/module_builder/builder.py =================================================================== --- pyplusplus_dev/pyplusplus/module_builder/builder.py 2006-05-31 03:41:50 UTC (rev 188) +++ pyplusplus_dev/pyplusplus/module_builder/builder.py 2006-05-31 03:55:37 UTC (rev 189) @@ -33,7 +33,8 @@ , compilation_verbose=False , compilation_mode=None , cache=None - , optimize_queries=True): + , optimize_queries=True + , ignore_gccxml_output=False): """ @param files: list of files, declarations from them you want to export @type files: list of strings or L{file_configuration_t} instances @@ -60,7 +61,8 @@ , define_symbols=define_symbols , undefine_symbols=undefine_symbols , start_with_declarations=start_with_declarations - , verbose=compilation_verbose) + , verbose=compilation_verbose + , ignore_gccxml_output=ignore_gccxml_output) #may be in future I will add those directories to user_defined_directories #to self.__code_creator. This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <rom...@us...> - 2006-05-31 03:41:59
|
Revision: 188 Author: roman_yakovenko Date: 2006-05-30 20:41:50 -0700 (Tue, 30 May 2006) ViewCVS: http://svn.sourceforge.net/pygccxml/?rev=188&view=rev Log Message: ----------- system headers that not used will not be generated Modified Paths: -------------- pyplusplus_dev/pyplusplus/code_creators/module.py pyplusplus_dev/pyplusplus/file_writers/writer.py Modified: pyplusplus_dev/pyplusplus/code_creators/module.py =================================================================== --- pyplusplus_dev/pyplusplus/code_creators/module.py 2006-05-31 03:41:08 UTC (rev 187) +++ pyplusplus_dev/pyplusplus/code_creators/module.py 2006-05-31 03:41:50 UTC (rev 188) @@ -27,7 +27,11 @@ def add_system_header( self, header ): normalize = include_directories.include_directories_t.normalize self.__system_headers.append( normalize( header ) ) - + + def is_system_header( self, header ): + normalize = include_directories.include_directories_t.normalize + return normalize( header ) in self.__system_headers + def _get_include_dirs(self): include_dirs = algorithm.creator_finder.find_by_class_instance( what=include_directories.include_directories_t Modified: pyplusplus_dev/pyplusplus/file_writers/writer.py =================================================================== --- pyplusplus_dev/pyplusplus/file_writers/writer.py 2006-05-31 03:41:08 UTC (rev 187) +++ pyplusplus_dev/pyplusplus/file_writers/writer.py 2006-05-31 03:41:50 UTC (rev 188) @@ -41,7 +41,8 @@ def write_code_repository(self, dir): for cr in code_repository.all: - self.write_file( os.path.join( dir, cr.file_name ), cr.code ) + if self.__extmodule.is_system_header( cr.file_name ): + self.write_file( os.path.join( dir, cr.file_name ), cr.code ) def write_file( fpath, content ): """Write a source file. This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <rom...@us...> - 2006-05-31 03:41:15
|
Revision: 187 Author: roman_yakovenko Date: 2006-05-30 20:41:08 -0700 (Tue, 30 May 2006) ViewCVS: http://svn.sourceforge.net/pygccxml/?rev=187&view=rev Log Message: ----------- adding vector3_tester Modified Paths: -------------- pyplusplus_dev/unittests/test_all.py Modified: pyplusplus_dev/unittests/test_all.py =================================================================== --- pyplusplus_dev/unittests/test_all.py 2006-05-30 21:12:23 UTC (rev 186) +++ pyplusplus_dev/unittests/test_all.py 2006-05-31 03:41:08 UTC (rev 187) @@ -52,6 +52,7 @@ import protected_tester import indexing_suites_tester import hierarchy3_tester +import vector3_tester def create_suite(times): testers = [ @@ -101,6 +102,7 @@ , protected_tester , indexing_suites_tester , hierarchy3_tester + , vector3_tester ] main_suite = unittest.TestSuite() This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <rom...@us...> - 2006-05-30 21:12:34
|
Revision: 186 Author: roman_yakovenko Date: 2006-05-30 14:12:23 -0700 (Tue, 30 May 2006) ViewCVS: http://svn.sourceforge.net/pygccxml/?rev=186&view=rev Log Message: ----------- adding use case for default arguments, that are same as the class under registration Added Paths: ----------- pyplusplus_dev/unittests/data/vector3_to_be_exported.cpp pyplusplus_dev/unittests/data/vector3_to_be_exported.hpp pyplusplus_dev/unittests/vector3_tester.py Added: pyplusplus_dev/unittests/data/vector3_to_be_exported.cpp =================================================================== --- pyplusplus_dev/unittests/data/vector3_to_be_exported.cpp (rev 0) +++ pyplusplus_dev/unittests/data/vector3_to_be_exported.cpp 2006-05-30 21:12:23 UTC (rev 186) @@ -0,0 +1,14 @@ +// Copyright 2004 Roman Yakovenko. +// Distributed under the Boost Software License, Version 1.0. (See +// accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) + +#include "vector3_to_be_exported.hpp" + +namespace vector3{ + +const Vector3 Vector3::ZERO = Vector3( 0,0,0); + +}//statics + + Added: pyplusplus_dev/unittests/data/vector3_to_be_exported.hpp =================================================================== --- pyplusplus_dev/unittests/data/vector3_to_be_exported.hpp (rev 0) +++ pyplusplus_dev/unittests/data/vector3_to_be_exported.hpp 2006-05-30 21:12:23 UTC (rev 186) @@ -0,0 +1,306 @@ +// Copyright 2004 Roman Yakovenko. +// Distributed under the Boost Software License, Version 1.0. (See +// accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) + +#ifndef __vector3_to_be_exported_hpp__ +#define __vector3_to_be_exported_hpp__ + +namespace vector3{ + +class Vector3 +{ +public: + union { + struct { + float x, y, z; + }; + float val[3]; + }; + +public: + inline Vector3() + { + } + + inline Vector3( const float fX, const float fY, const float fZ ) + : x( fX ), y( fY ), z( fZ ) + { + } + + inline explicit Vector3( const float afCoordinate[3] ) + : x( afCoordinate[0] ), + y( afCoordinate[1] ), + z( afCoordinate[2] ) + { + } + + inline explicit Vector3( const int afCoordinate[3] ) + { + x = (float)afCoordinate[0]; + y = (float)afCoordinate[1]; + z = (float)afCoordinate[2]; + } + + inline explicit Vector3( float* const r ) + : x( r[0] ), y( r[1] ), z( r[2] ) + { + } + + inline explicit Vector3( const float scaler ) + : x( scaler ) + , y( scaler ) + , z( scaler ) + { + } + + + inline Vector3( const Vector3& rkVector ) + : x( rkVector.x ), y( rkVector.y ), z( rkVector.z ) + { + } + + inline float operator [] ( const unsigned int i ) const + { + return *(&x+i); + } + + inline float& operator [] ( const unsigned int i ) + { + return *(&x+i); + } + + /** Assigns the value of the other vector. + @param + rkVector The other vector + */ + inline Vector3& operator = ( const Vector3& rkVector ) + { + x = rkVector.x; + y = rkVector.y; + z = rkVector.z; + + return *this; + } + + inline Vector3& operator = ( const float fScaler ) + { + x = fScaler; + y = fScaler; + z = fScaler; + + return *this; + } + + inline bool operator == ( const Vector3& rkVector ) const + { + return ( x == rkVector.x && y == rkVector.y && z == rkVector.z ); + } + + inline bool operator != ( const Vector3& rkVector ) const + { + return ( x != rkVector.x || y != rkVector.y || z != rkVector.z ); + } + + // arithmetic operations + inline Vector3 operator + ( const Vector3& rkVector ) const + { + Vector3 kSum; + + kSum.x = x + rkVector.x; + kSum.y = y + rkVector.y; + kSum.z = z + rkVector.z; + + return kSum; + } + + inline Vector3 operator - ( const Vector3& rkVector ) const + { + Vector3 kDiff; + + kDiff.x = x - rkVector.x; + kDiff.y = y - rkVector.y; + kDiff.z = z - rkVector.z; + + return kDiff; + } + + inline Vector3 operator * ( const float fScalar ) const + { + Vector3 kProd; + + kProd.x = fScalar*x; + kProd.y = fScalar*y; + kProd.z = fScalar*z; + + return kProd; + } + + inline Vector3 operator * ( const Vector3& rhs) const + { + Vector3 kProd; + + kProd.x = rhs.x * x; + kProd.y = rhs.y * y; + kProd.z = rhs.z * z; + + return kProd; + } + + inline Vector3 operator / ( const float fScalar ) const + { + Vector3 kDiv; + + float fInv = 1.0 / fScalar; + kDiv.x = x * fInv; + kDiv.y = y * fInv; + kDiv.z = z * fInv; + + return kDiv; + } + + inline Vector3 operator / ( const Vector3& rhs) const + { + Vector3 kDiv; + + kDiv.x = x / rhs.x; + kDiv.y = y / rhs.y; + kDiv.z = z / rhs.z; + + return kDiv; + } + + + inline Vector3 operator - () const + { + Vector3 kNeg; + + kNeg.x = -x; + kNeg.y = -y; + kNeg.z = -z; + + return kNeg; + } + + // overloaded operators to help Vector3 + inline friend Vector3 operator * ( const float fScalar, const Vector3& rkVector ) + { + Vector3 kProd; + + kProd.x = fScalar * rkVector.x; + kProd.y = fScalar * rkVector.y; + kProd.z = fScalar * rkVector.z; + + return kProd; + } + + inline friend Vector3 operator + (const Vector3& lhs, const float rhs) + { + Vector3 ret(rhs); + return ret += lhs; + } + + inline friend Vector3 operator + (const float lhs, const Vector3& rhs) + { + Vector3 ret(lhs); + return ret += rhs; + } + + inline friend Vector3 operator - (const Vector3& lhs, const float rhs) + { + return lhs - Vector3(rhs); + } + + inline friend Vector3 operator - (const float lhs, const Vector3& rhs) + { + Vector3 ret(lhs); + return ret -= rhs; + } + + // arithmetic updates + inline Vector3& operator += ( const Vector3& rkVector ) + { + x += rkVector.x; + y += rkVector.y; + z += rkVector.z; + + return *this; + } + + inline Vector3& operator += ( const float fScalar ) + { + x += fScalar; + y += fScalar; + z += fScalar; + return *this; + } + + inline Vector3& operator -= ( const Vector3& rkVector ) + { + x -= rkVector.x; + y -= rkVector.y; + z -= rkVector.z; + + return *this; + } + + inline Vector3& operator -= ( const float fScalar ) + { + x -= fScalar; + y -= fScalar; + z -= fScalar; + return *this; + } + + inline Vector3& operator *= ( const float fScalar ) + { + x *= fScalar; + y *= fScalar; + z *= fScalar; + return *this; + } + + inline Vector3& operator *= ( const Vector3& rkVector ) + { + x *= rkVector.x; + y *= rkVector.y; + z *= rkVector.z; + + return *this; + } + + inline Vector3& operator /= ( const float fScalar ) + { + float fInv = 1.0 / fScalar; + + x *= fInv; + y *= fInv; + z *= fInv; + + return *this; + } + + inline Vector3& operator /= ( const Vector3& rkVector ) + { + x /= rkVector.x; + y /= rkVector.y; + z /= rkVector.z; + + return *this; + } + + inline float squaredLength () const + { + return x * x + y * y + z * z; + } + + void do_smth( const Vector3& x = ZERO ){} + // special points + static const Vector3 ZERO; + +}; + + +} + +#endif//__class_order_to_be_exported_hpp__ \ No newline at end of file Added: pyplusplus_dev/unittests/vector3_tester.py =================================================================== --- pyplusplus_dev/unittests/vector3_tester.py (rev 0) +++ pyplusplus_dev/unittests/vector3_tester.py 2006-05-30 21:12:23 UTC (rev 186) @@ -0,0 +1,42 @@ +# Copyright 2004 Roman Yakovenko. +# Distributed under the Boost Software License, Version 1.0. (See +# accompanying file LICENSE_1_0.txt or copy at +# http://www.boost.org/LICENSE_1_0.txt) + +import os +import sys +import unittest +import fundamental_tester_base +from pyplusplus import code_creators + +class tester_t(fundamental_tester_base.fundamental_tester_base_t): + EXTENSION_NAME = 'vector3' + + def __init__( self, *args ): + fundamental_tester_base.fundamental_tester_base_t.__init__( + self + , tester_t.EXTENSION_NAME + , *args ) + + def customize( self, mb ): + vec3 = mb.class_( 'Vector3' ) + mb.calldefs().use_keywords = False + vec3.add_code( 'add_property( "val", &vector3::Vector3::val)' ) + vec3.add_code( 'add_property( "x", &vector3::Vector3::x)' ) + vec3.add_code( 'add_property( "y", &vector3::Vector3::y)' ) + vec3.add_code( 'add_property( "z", &vector3::Vector3::z)' ) + + + def run_tests( self, module): + v3 = module.Vector3() + +def create_suite(): + suite = unittest.TestSuite() + suite.addTest( unittest.makeSuite(tester_t)) + return suite + +def run_suite(): + unittest.TextTestRunner(verbosity=2).run( create_suite() ) + +if __name__ == "__main__": + run_suite() This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <rom...@us...> - 2006-05-30 18:33:31
|
Revision: 185 Author: roman_yakovenko Date: 2006-05-30 11:33:18 -0700 (Tue, 30 May 2006) ViewCVS: http://svn.sourceforge.net/pygccxml/?rev=185&view=rev Log Message: ----------- adding unit test to check Allen point Modified Paths: -------------- pyplusplus_dev/unittests/mdecl_wrapper_tester.py Modified: pyplusplus_dev/unittests/mdecl_wrapper_tester.py =================================================================== --- pyplusplus_dev/unittests/mdecl_wrapper_tester.py 2006-05-30 18:07:08 UTC (rev 184) +++ pyplusplus_dev/unittests/mdecl_wrapper_tester.py 2006-05-30 18:33:18 UTC (rev 185) @@ -62,7 +62,23 @@ self.fail( "Runtime error has not been raised." ) except RuntimeError: pass + + def test__getitem__( self ): + mb = module_builder.module_builder_t( self._get_files() + , gccxml_path=autoconfig.gccxml.executable + , include_paths=[autoconfig.boost.include] + , undefine_symbols=['__MINGW32__'] ) + public_bases = mb.classes( 'public_base_t' ) + self.failUnless( 1 == len( public_bases ) ) + + public_bases.include() + self.failUnless( public_bases[0].ignore == False ) + + mb.global_ns[ 'public_base_t' ].exclude() + + self.failUnless( public_bases[0].ignore == True ) + def create_suite(): suite = unittest.TestSuite() suite.addTest( unittest.makeSuite(tester_t)) This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <rom...@us...> - 2006-05-30 18:07:21
|
Revision: 184 Author: roman_yakovenko Date: 2006-05-30 11:07:08 -0700 (Tue, 30 May 2006) ViewCVS: http://svn.sourceforge.net/pygccxml/?rev=184&view=rev Log Message: ----------- units are always copyable Modified Paths: -------------- pygccxml_dev/pygccxml/declarations/type_traits.py Modified: pygccxml_dev/pygccxml/declarations/type_traits.py =================================================================== --- pygccxml_dev/pygccxml/declarations/type_traits.py 2006-05-30 18:02:44 UTC (rev 183) +++ pygccxml_dev/pygccxml/declarations/type_traits.py 2006-05-30 18:07:08 UTC (rev 184) @@ -676,6 +676,8 @@ return __is_convertible_t( source, target ).is_convertible() def is_noncopyable( class_ ): + if class_.class_type == class_declaration.CLASS_TYPES.UNION: + return False for base_desc in class_.recursive_bases: assert isinstance( base_desc, class_declaration.hierarchy_info_t ) if base_desc.related_class.decl_string in ('::boost::noncopyable', '::boost::noncopyable_::noncopyable' ): This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <rom...@us...> - 2006-05-30 18:02:54
|
Revision: 183 Author: roman_yakovenko Date: 2006-05-30 11:02:44 -0700 (Tue, 30 May 2006) ViewCVS: http://svn.sourceforge.net/pygccxml/?rev=183&view=rev Log Message: ----------- fixing bug in module_t.replace_included_headers function Modified Paths: -------------- pyplusplus_dev/pyplusplus/code_creators/module.py pyplusplus_dev/pyplusplus/module_creator/creator.py Modified: pyplusplus_dev/pyplusplus/code_creators/module.py =================================================================== --- pyplusplus_dev/pyplusplus/code_creators/module.py 2006-05-29 19:43:29 UTC (rev 182) +++ pyplusplus_dev/pyplusplus/code_creators/module.py 2006-05-30 18:02:44 UTC (rev 183) @@ -21,8 +21,13 @@ def __init__(self): """Constructor. """ - compound.compound_t.__init__(self, None) + compound.compound_t.__init__(self, None) + self.__system_headers = [] + def add_system_header( self, header ): + normalize = include_directories.include_directories_t.normalize + self.__system_headers.append( normalize( header ) ) + def _get_include_dirs(self): include_dirs = algorithm.creator_finder.find_by_class_instance( what=include_directories.include_directories_t @@ -111,7 +116,7 @@ else: raise RuntimeError( "include_t creator has not been found." ) - def replace_included_headers( self, headers, leave_boost_python_header=True ): + def replace_included_headers( self, headers, leave_system_headers=True ): to_be_removed = [] for creator in self.creators: if isinstance( creator, include.include_t ): @@ -119,16 +124,10 @@ elif isinstance( creator, module_body.module_body_t ): break - boost_python_header = include_directories.include_directories_t.normalize( 'boost/python.hpp' ) - boost_python_suite_header \ - = include_directories.include_directories_t.normalize( "boost/python/suite/indexing/vector_indexing_suite.hpp" ) for creator in to_be_removed: - if boost_python_header in creator.header: - if not leave_boost_python_header: + if creator.header in self.__system_headers: + if not leave_system_headers: self.remove_creator( creator ) - elif boost_python_suite_header in creator.header: - if not leave_boost_python_header: - self.remove_creator( creator ) else: self.remove_creator( creator ) map( lambda header: self.adopt_include( include.include_t( header=header ) ) Modified: pyplusplus_dev/pyplusplus/module_creator/creator.py =================================================================== --- pyplusplus_dev/pyplusplus/module_creator/creator.py 2006-05-29 19:43:29 UTC (rev 182) +++ pyplusplus_dev/pyplusplus/module_creator/creator.py 2006-05-30 18:02:44 UTC (rev 183) @@ -82,6 +82,7 @@ self.__types_db = types_database.types_database_t() self.__extmodule = code_creators.module_t() + self.__extmodule.add_system_header( "boost/python.hpp" ) self.__extmodule.adopt_creator( code_creators.include_t( header="boost/python.hpp" ) ) self.__create_castinig_constructor = create_castinig_constructor if boost_python_ns_name: @@ -100,7 +101,7 @@ self.__cr_array_1_included = False self.__array_1_registered = set() #(type.decl_string,size) self.__free_operators = [] - + def _prepare_decls( self, decls ): #leave only declarations defined under namespace, but remove namespaces decls = filter( lambda x: not isinstance( x, declarations.namespace_t ) \ @@ -382,6 +383,7 @@ if not isinstance( cls, decl_wrappers.class_t ): continue if cls.indexing_suites: + self.__extmodule.add_system_header( "boost/python/suite/indexing/vector_indexing_suite.hpp" ) include = code_creators.include_t( header="boost/python/suite/indexing/vector_indexing_suite.hpp" ) self.__extmodule.adopt_include(include) break @@ -642,6 +644,7 @@ if declarations.is_array( self.curr_decl.type ): if not self.__cr_array_1_included: + self.__extmodule.add_system_header( code_repository.array_1.file_name ) self.__extmodule.adopt_creator( code_creators.include_t( code_repository.array_1.file_name ) , self.__extmodule.first_include_index() + 1) self.__cr_array_1_included = True This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <rom...@us...> - 2006-05-29 19:43:38
|
Revision: 182 Author: roman_yakovenko Date: 2006-05-29 12:43:29 -0700 (Mon, 29 May 2006) ViewCVS: http://svn.sourceforge.net/pygccxml/?rev=182&view=rev Log Message: ----------- adding to do Modified Paths: -------------- pyplusplus_dev/pyplusplus/module_creator/creator.py Modified: pyplusplus_dev/pyplusplus/module_creator/creator.py =================================================================== --- pyplusplus_dev/pyplusplus/module_creator/creator.py 2006-05-29 19:42:05 UTC (rev 181) +++ pyplusplus_dev/pyplusplus/module_creator/creator.py 2006-05-29 19:43:29 UTC (rev 182) @@ -17,7 +17,16 @@ #TODO: don't export functions that returns non const pointer to fundamental types #TODO: add print decl_wrapper.readme messages +#class Foo{ +# union { +# struct { +# float r,g,b,a; +# }; +# float val[4]; +# }; +#}; + class creator_t( declarations.decl_visitor_t ): """Creating code creators. This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <rom...@us...> - 2006-05-29 19:42:12
|
Revision: 181 Author: roman_yakovenko Date: 2006-05-29 12:42:05 -0700 (Mon, 29 May 2006) ViewCVS: http://svn.sourceforge.net/pygccxml/?rev=181&view=rev Log Message: ----------- update docs Modified Paths: -------------- pyplusplus_dev/docs/examples/boost/boost.rest pyplusplus_dev/docs/examples/examples.rest Modified: pyplusplus_dev/docs/examples/boost/boost.rest =================================================================== --- pyplusplus_dev/docs/examples/boost/boost.rest 2006-05-29 05:46:08 UTC (rev 180) +++ pyplusplus_dev/docs/examples/boost/boost.rest 2006-05-29 19:42:05 UTC (rev 181) @@ -66,9 +66,9 @@ --------------- pyboost package --------------- - - +... + -------- Download -------- Modified: pyplusplus_dev/docs/examples/examples.rest =================================================================== --- pyplusplus_dev/docs/examples/examples.rest 2006-05-29 05:46:08 UTC (rev 180) +++ pyplusplus_dev/docs/examples/examples.rest 2006-05-29 19:42:05 UTC (rev 181) @@ -14,9 +14,9 @@ .. _`graphical interface` : ./../tutorials/pyplusplus_demo.png .. _`tutorials` : ./../tutorials/tutorials.html -------- -EasyBMP -------- +--------- +pyeasybmp +--------- `EasyBMP`_ is a small cross-platform library that provide you functionality needed to work with Windows bitmap (BMP) image files. I took me only few minutes This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <rom...@us...> - 2006-05-29 05:46:25
|
Revision: 180 Author: roman_yakovenko Date: 2006-05-28 22:46:08 -0700 (Sun, 28 May 2006) ViewCVS: http://svn.sourceforge.net/pygccxml/?rev=180&view=rev Log Message: ----------- fixing is_noncopyable bug Modified Paths: -------------- pygccxml_dev/pygccxml/declarations/type_traits.py pyplusplus_dev/pyplusplus/code_creators/class_declaration.py pyplusplus_dev/pyplusplus/decl_wrappers/class_wrapper.py pyplusplus_dev/pyplusplus/module_creator/creator.py pyplusplus_dev/unittests/data/noncopyable_to_be_exported.hpp Modified: pygccxml_dev/pygccxml/declarations/type_traits.py =================================================================== --- pygccxml_dev/pygccxml/declarations/type_traits.py 2006-05-29 04:57:23 UTC (rev 179) +++ pygccxml_dev/pygccxml/declarations/type_traits.py 2006-05-29 05:46:08 UTC (rev 180) @@ -18,6 +18,7 @@ import typedef import calldef import cpptypes +import variable import algorithm import enumeration import class_declaration @@ -260,6 +261,15 @@ return isinstance( nake_type, cpptypes.declarated_t ) \ and isinstance( nake_type.declaration, enumeration.enumeration_t ) +def is_class(type): + """returns True if type represents C++ class""" + nake_type = remove_alias( type ) + nake_type = remove_reference( nake_type ) + nake_type = remove_cv( nake_type ) + + return isinstance( nake_type, cpptypes.declarated_t ) \ + and isinstance( nake_type.declaration, class_declaration.class_t ) + def find_trivial_constructor( type ): """returns reference to trivial constructor or None""" assert isinstance( type, class_declaration.class_t ) @@ -683,6 +693,25 @@ or ( has_destructor( class_ ) and not has_public_destructor( class_ ) ): return True + #It is not enough to check base classes, we should also to check + #member variables. + mvars = filter( lambda x: isinstance( x, variable.variable_t ) + , class_.declarations ) + for mvar in mvars: + if mvar.type_qualifiers.has_static: + continue + type_ = remove_alias( mvar.type ) + type_ = remove_reference( type_ ) + if is_const( type_ ): + no_const = remove_const( type_ ) + if is_fundamental( no_const ) or is_enum( no_const): + return True + if is_class( no_const ): + return True + if is_class( type_ ): + cls = type_.declaration + if is_noncopyable( cls ): + return True return False Modified: pyplusplus_dev/pyplusplus/code_creators/class_declaration.py =================================================================== --- pyplusplus_dev/pyplusplus/code_creators/class_declaration.py 2006-05-29 04:57:23 UTC (rev 179) +++ pyplusplus_dev/pyplusplus/code_creators/class_declaration.py 2006-05-29 05:46:08 UTC (rev 180) @@ -80,7 +80,7 @@ return operator_creators def _generate_noncopyable(self): - if declarations.is_noncopyable( self.declaration ): + if self.declaration.noncopyable: return algorithm.create_identifier( self, '::boost::noncopyable' ) def _generate_bases(self, base_creators): Modified: pyplusplus_dev/pyplusplus/decl_wrappers/class_wrapper.py =================================================================== --- pyplusplus_dev/pyplusplus/decl_wrappers/class_wrapper.py 2006-05-29 04:57:23 UTC (rev 179) +++ pyplusplus_dev/pyplusplus/decl_wrappers/class_wrapper.py 2006-05-29 05:46:08 UTC (rev 180) @@ -29,7 +29,7 @@ self._always_expose_using_scope = False self._redefine_operators = False self._held_type = None - self._noncopyable = False + self._noncopyable = None self._wrapper_alias = self._generate_valid_name() + "_wrapper" self._user_code = [] self._wrapper_user_code = [] @@ -54,6 +54,8 @@ held_type = property( _get_held_type, _set_held_type ) def _get_noncopyable(self): + if self._noncopyable is None: + self._noncopyable = declarations.is_noncopyable( self ) return self._noncopyable def _set_noncopyable(self, noncopyable): self._noncopyable= noncopyable Modified: pyplusplus_dev/pyplusplus/module_creator/creator.py =================================================================== --- pyplusplus_dev/pyplusplus/module_creator/creator.py 2006-05-29 04:57:23 UTC (rev 179) +++ pyplusplus_dev/pyplusplus/module_creator/creator.py 2006-05-29 05:46:08 UTC (rev 180) @@ -565,7 +565,7 @@ if declarations.has_trivial_copy( self.curr_decl ): #I don't know but sometimes boost.python requieres #to construct wrapper from wrapped classe - if not declarations.is_noncopyable( self.curr_decl ): + if not self.curr_decl.noncopyable: scons = code_creators.special_constructor_wrapper_t( class_inst=self.curr_decl ) wrapper.adopt_creator( scons ) trivial_constr = declarations.find_trivial_constructor(self.curr_decl) Modified: pyplusplus_dev/unittests/data/noncopyable_to_be_exported.hpp =================================================================== --- pyplusplus_dev/unittests/data/noncopyable_to_be_exported.hpp 2006-05-29 04:57:23 UTC (rev 179) +++ pyplusplus_dev/unittests/data/noncopyable_to_be_exported.hpp 2006-05-29 05:46:08 UTC (rev 180) @@ -51,6 +51,28 @@ static char get_dd(){ return 'D'; } }; +struct e_t{ + virtual void do_smth() = 0; +private: + c_t c; +}; + +struct f_t{ + f_t() : i(0){} + virtual void do_smth() = 0; +private: + const int i; +}; + +struct g_t{ + enum E{e}; + g_t() : e_(e){} + virtual void do_smth() = 0; +private: + const E e_; +}; + + } #endif//__noncopyable_to_be_exported_hpp__ \ No newline at end of file This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <rom...@us...> - 2006-05-29 04:57:29
|
Revision: 179 Author: roman_yakovenko Date: 2006-05-28 21:57:23 -0700 (Sun, 28 May 2006) ViewCVS: http://svn.sourceforge.net/pygccxml/?rev=179&view=rev Log Message: ----------- fixing unnamed variables bug Modified Paths: -------------- pyplusplus_dev/pyplusplus/decl_wrappers/variable_wrapper.py Modified: pyplusplus_dev/pyplusplus/decl_wrappers/variable_wrapper.py =================================================================== --- pyplusplus_dev/pyplusplus/decl_wrappers/variable_wrapper.py 2006-05-28 20:46:01 UTC (rev 178) +++ pyplusplus_dev/pyplusplus/decl_wrappers/variable_wrapper.py 2006-05-29 04:57:23 UTC (rev 179) @@ -39,7 +39,9 @@ def _exportable_impl( self ): if not isinstance( self.parent, declarations.class_t ): - return '' + return '' + if not self.name: + return "pyplusplus can not expose unnamed variables" if self.bits == 0 and self.name == "": return "pyplusplus can not expose alignement bit." type_ = declarations.remove_alias( self.type ) This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <rom...@us...> - 2006-05-28 20:46:10
|
Revision: 178 Author: roman_yakovenko Date: 2006-05-28 13:46:01 -0700 (Sun, 28 May 2006) ViewCVS: http://svn.sourceforge.net/pygccxml/?rev=178&view=rev Log Message: ----------- updating docs Modified Paths: -------------- pyplusplus_dev/docs/examples/boost/www_configuration.py pyplusplus_dev/docs/examples/examples.rest Modified: pyplusplus_dev/docs/examples/boost/www_configuration.py =================================================================== --- pyplusplus_dev/docs/examples/boost/www_configuration.py 2006-05-28 14:18:06 UTC (rev 177) +++ pyplusplus_dev/docs/examples/boost/www_configuration.py 2006-05-28 20:46:01 UTC (rev 178) @@ -1,2 +1,2 @@ -name = 'boost.date_time' +name = 'boost' #This directory used as place holder for pyplusplus directory \ No newline at end of file Modified: pyplusplus_dev/docs/examples/examples.rest =================================================================== --- pyplusplus_dev/docs/examples/examples.rest 2006-05-28 14:18:06 UTC (rev 177) +++ pyplusplus_dev/docs/examples/examples.rest 2006-05-28 20:46:01 UTC (rev 178) @@ -8,9 +8,10 @@ Graphical interface ------------------- -`pyplusplus`_ has nice, small and simple graphical interface. Please, read +`pyplusplus`_ has nice, small and simple `graphical interface`_. Please, read `tutorials`_ for more information. +.. _`graphical interface` : ./../tutorials/pyplusplus_demo.png .. _`tutorials` : ./../tutorials/tutorials.html ------- @@ -24,22 +25,33 @@ .. __ : ./easybmp/easybmp.html --------------- -boost.date_time +boost libraries --------------- -I thought that running unit tests is not enough. I wanted to check `pyplusplus`_ -on big and complex projects. Also I wanted to check, whether it really simple -to create fully working Python bindings for such projects. The short answer it is -not. The long answer is `here`__. - -.. __ : ./date_time/date_time.html +Boost provides free peer-reviewed portable C++ source libraries. +Using `pyplusplus`_ I created Python bindings for few libraries: + + * `boost.date_time`_ + * `boost.crc`_ + * `boost.rational`_ + * `boost.random`_ + +This is not "just another example". I went father and created new package: +`pyboost`_. This is fully working Python package, with almost all unit test from +the libraries ported to Python. For more information please read `pyboost`_ +package documentation. + +.. _`pyboost` : ./boost/boost.html + +.. _`boost.date_time` : http://boost.org/doc/html/date_time.html +.. _`boost.crc` : http://boost.org/libs/crc/index.html +.. _`boost.rational` : http://boost.org/libs/rational/index.html +.. _`boost.random` : http://boost.org/libs/random/index.html + .. _`GUI`: ./../tutorials/pyplusplus_demo.png .. _`boost.python`: http://www.boost.org/libs/python/doc/index.html .. _`pyplusplus` : ./../pyplusplus.html -.. _`boost.date_time` : http://www.boost.org -.. _`py_easybmp` : ./easybmp/easybmp.html -.. _`py_date_time` : ./date_time/date_time.html .. _`EasyBMP`: http://easybmp.sourceforge.net/ .. This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <rom...@us...> - 2006-05-28 14:18:15
|
Revision: 177 Author: roman_yakovenko Date: 2006-05-28 07:18:06 -0700 (Sun, 28 May 2006) ViewCVS: http://svn.sourceforge.net/pygccxml/?rev=177&view=rev Log Message: ----------- update docs Modified Paths: -------------- pyplusplus_dev/docs/examples/boost/boost.rest Modified: pyplusplus_dev/docs/examples/boost/boost.rest =================================================================== --- pyplusplus_dev/docs/examples/boost/boost.rest 2006-05-28 13:18:05 UTC (rev 176) +++ pyplusplus_dev/docs/examples/boost/boost.rest 2006-05-28 14:18:06 UTC (rev 177) @@ -1,155 +1,74 @@ -======================= -boost.date_time example -======================= +=============== +boost libraries +=============== .. contents:: Table of contents -------------- Introduction -------------- + +What is the `pyplusplus`_? +-------------------------- + +.. include:: ./../../definition.rest + +What is the Boost? +------------------ -What is the boost.date_time? ----------------------------- +`Boost`_ is repository of free peer-reviewed portable C++ source libraries. + +`Boost`_ works on almost any modern operating system, including UNIX and Windows +variants. -`boost`_ is repository of free peer-reviewed portable C++ source libraries. - -`date_time`_ is a cross-platform and open source C++ library designed to provide -a basis for performing efficient time calculations. The `date_time`_ library has -been created by Jeff Garland. - -What is the `pyplusplus`_? --------------------------- - -.. include:: ./../../definition.rest - Abstract -------- -I believe that `pyplusplus`_ is ready for hard work. It is quick, stable and -flexible. In order to prove this, I decided to create `Python`_ bindings for a -few libraries. One of them is the `date_time`_. I choose the `date_time`_ library for -the next reasons: - - + In my opinion, `Python`_ is missing good date\\time library. - - + The `date_time`_ is a library with - - * good documentation - - * well defined interfaces +`Boost`_ libraries have good interface, documentation and unit tests. +A lot of people contributed thier knowledge and expirience to those libraries. +Ten `Boost`_ libraries are already included in the `C++ Standards Committee's`_ +Library Technical Report ( `TR1`_ ) as a step toward becoming part of a future +C++ Standard. More Boost libraries are proposed for the upcoming `TR2`_. + +.. _`C++ Standards Committee's` : http://www.open-std.org/jtc1/sc22/wg21/ +.. _`TR1` : http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2005/n1745.pdf +.. _`TR2` : http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2005/n1810.html + + +I believe that `pyplusplus`_ is ready for hard work. It is quick, stable and +flexible. `pyplusplus`_ is a new tool and in my opinion I should prove its +usefulness. Using `pyplusplus`_, I exposed next libraries to Python: + + * `boost.date_time`_ + * `boost.crc`_ + * `boost.rational`_ + * `boost.random`_ + +There are few reasons I choose to expose those libraries. + +1. I used those libraries at my work. + +2. All those libraries have: - * clear concepts + * good documentation + * well defined interfaces + * clear concepts + * comprehensive unit tests + +3. I think, that Python is missing functionality provided by `boost.date_time`_ + and `boost.random`_ libraries. + +I spent different amount of time on each library. It took me one week, to expose +the `boost.date_time`_ library. I added few missing features to `pyplusplus`_, +polished the existing ones. Most of the time I spent translating tests from C++ +to `Python`_. It took me 3 days to expose all other libraries. + +--------------- +pyboost package +--------------- + + - * comprehensive unit tests - - All this made working with library to be a pleasure. - - + The `date_time`_ implementation uses next C++ techniques and patterns: - - * extensive use of templates - - * template meta-programming ( MPL ) - - * preprocessor meta-programming ( PPL ) - - * operator overloading - - * implicit conversion - - * smart pointers - - * ... - - The `date_time`_ example fully demonstrates the capabilities of `pyplusplus`_. - -It took me one week, evenings only, to expose the `date_time`_ library to `Python`_. -I have added few missing features to `pyplusplus`_, polished existing ones. Most of -the time I spent translating tests from C++ to `Python`_. This examples consist -few files and directories: - - 1. environment.py - contains different environment settings - - 2. customization_data.py - contains a table of aliases and other data - - 3. generate_code.py - main file - - 4. sconstruct - build configuration file - - 5. generated - directory that contains all generated code and only it - - 6. unittests - directory that contains some test, that has been ported from - C++ - -Files and directories located under "pyplusplus-x.y.z/examples/py_date_time". -Where x.y.z is the version of `pyplusplus`_ you are using. - ------------------------- -What should be exportes? ------------------------- -The result of this step should be set of declarations I want to export to Python. -There were few problems I should have solved at this stage. - - 1. Compilation of the `date_time`_ library takes some time. Fortunately - `pygccxml`_ allows to create, save and read `GCC-XML`_ generated file. - Instead of parsing source files each time, `pygccxml`_ parses xml files only. - Now, it takes only few seconds to read declarations. - - 2. The `date_time`_ library makes an extensive use of an other C++ libraries. - Filtering was the second problem I had to deal with. It was easy. - I wanted to export all declarations, defined under namespaces by the `date_time`_ - library: date_time, posix_time, local_time, gregorian. I do not want to - export functionality related to facet, parsing, formatting. Well, this - way I filtered out most of the declarations I do not need. - ----------------------- -Configure declarations ----------------------- -There is a lot of configuration have been applied on declarations: - -1. Every template instantiation class has been renamed. The result: `Python`_ - bindings have exactly the same names as in C++. This also solves an other very - important issue: original library documentation and examples - they could be - reused, without any changes. You can take a look on py_date_time/unittests - directory content. - -2. Namespace aliases have been introduced. ``bpt`` is shorter then - ``boost::posix_time``. As a result, generated code is more readable. - -3. Operators. The `date_time`_ library is using `boost.operators`_ framework to - implement operators overloading. This causes a small problem in `Python`_ - code. Operators, defined in based class, were not visible while using - derived class. After small conversation with people, from boost.python - list, the solution was found - to redefine all operators in derived class. - This functionality was missing in `pyplusplus`_. It took me one hour to - implement it. *code_creator.class_t* class from now has new property - called *redefine_operators*. All I needed to do, in order to export - operators in derived class, is to turn the flag on. - ---------------------- -Writing code to files ---------------------- -Functionality provided by `pyplusplus`_ was good enough for this use case. More -over, `pyplusplus`_ writes code into file only in case the code is different. -This functionality was specially useful - small compilation time. - ------------ -Small bonus ------------ -`boost.date_time`_ library is under development. There were a lot of changes -from version 1.33 to 1.34. Nevertheless I almost did not spend time to change -or update my script. The main reason is of course the script I wrote. Instead -of working on every single class/function/file, `pyplusplus`_ allowed me to -create a set of rules, that work on whole set of declarations. - ----------- -Conclusion ----------- -As for me, `pyplusplus`_ is ready for hard work! -* Big and complex C++ library has been exposed to `Python`_ in few days only. -* You can see from script, that there is no need in deep knowledge of `boost.python`_ library. -* Python gain an excelent functionality for dealing with date/time. -* Real world, 3rd party project is used in testing of `pyplusplus`_. - -------- Download -------- @@ -158,6 +77,13 @@ I am going to continue development of the `Python`_ bindings for `boost.date_time`_ library. + + +.. _`boost.date_time` : http://boost.org/doc/html/date_time.html +.. _`boost.crc` : http://boost.org/libs/crc/index.html +.. _`boost.rational` : http://boost.org/libs/rational/index.html +.. _`boost.random` : http://boost.org/libs/random/index.html + .. _`environment.py`: http://cvs.sourceforge.net/viewcvs.py/pygccxml/source/pyplusplus/examples/py_easybmp/environment.py?view=markup .. _`sconstruct`: http://cvs.sourceforge.net/viewcvs.py/pygccxml/source/pyplusplus/examples/py_easybmp/sconstruct?view=markup @@ -165,7 +91,8 @@ .. _`pygccxml`: http://www.language-binding.net/pygccxml/pygccxml.html .. _`boost.date_time`: http://boost.org/doc/html/date_time.html .. _`date_time`: http://boost.org/doc/html/date_time.html -.. _`boost`: http://www.boost.org +.. _`boost`: http://www.boost.org +.. _`Boost`: http://www.boost.org .. _`boost.python`: http://www.boost.org/libs/python/doc/index.html .. _`boost.operators`: http://www.boost.org/ .. _`GCC-XML`: http://www.gccxml.org This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <rom...@us...> - 2006-05-28 13:18:19
|
Revision: 176 Author: roman_yakovenko Date: 2006-05-28 06:18:05 -0700 (Sun, 28 May 2006) ViewCVS: http://svn.sourceforge.net/pygccxml/?rev=176&view=rev Log Message: ----------- small clean up Modified Paths: -------------- pyplusplus_dev/examples/pyboost_dev/dev/boost_random/generate_code.py pyplusplus_dev/examples/pyboost_dev/dev/crc/generate_code.py pyplusplus_dev/examples/pyboost_dev/dev/rational/generate_code.py Modified: pyplusplus_dev/examples/pyboost_dev/dev/boost_random/generate_code.py =================================================================== --- pyplusplus_dev/examples/pyboost_dev/dev/boost_random/generate_code.py 2006-05-28 08:28:55 UTC (rev 175) +++ pyplusplus_dev/examples/pyboost_dev/dev/boost_random/generate_code.py 2006-05-28 13:18:05 UTC (rev 176) @@ -4,15 +4,11 @@ # accompanying file LICENSE_1_0.txt or copy at # http://www.boost.org/LICENSE_1_0.txt) - import os -import sys import time -import shutil import logging import random_settings from pygccxml import parser -from pygccxml import declarations from pyplusplus import module_builder from pyplusplus.module_builder import call_policies @@ -130,13 +126,10 @@ distribution_funcs = boost_ns.member_functions( name="distribution" , function=lambda decl: not decl.has_const ) distribution_funcs.call_policies = call_policies.return_internal_reference() - - def customize_extmodule( self ): global LICENSE extmodule = self.__mb.code_creator - #beautifying include code generation extmodule.license = LICENSE extmodule.user_defined_directories.append( random_settings.boost.include ) extmodule.user_defined_directories.append( random_settings.working_dir ) @@ -145,7 +138,6 @@ extmodule.replace_included_headers( ['boost/random.hpp', 'boost/nondet_random.hpp', 'random_export.hpp' ] ) def write_files( self ): - #self.__mb.write_module( os.path.join( random_settings.generated_files_dir, 'random.pypp.cpp' ) ) self.__mb.split_module( random_settings.generated_files_dir ) def create(self): Modified: pyplusplus_dev/examples/pyboost_dev/dev/crc/generate_code.py =================================================================== --- pyplusplus_dev/examples/pyboost_dev/dev/crc/generate_code.py 2006-05-28 08:28:55 UTC (rev 175) +++ pyplusplus_dev/examples/pyboost_dev/dev/crc/generate_code.py 2006-05-28 13:18:05 UTC (rev 176) @@ -6,9 +6,7 @@ import os -import sys import time -import shutil import logging import crc_settings from pygccxml import parser Modified: pyplusplus_dev/examples/pyboost_dev/dev/rational/generate_code.py =================================================================== --- pyplusplus_dev/examples/pyboost_dev/dev/rational/generate_code.py 2006-05-28 08:28:55 UTC (rev 175) +++ pyplusplus_dev/examples/pyboost_dev/dev/rational/generate_code.py 2006-05-28 13:18:05 UTC (rev 176) @@ -6,13 +6,10 @@ import os -import sys import time -import shutil import logging import rational_settings from pygccxml import parser -from pygccxml import declarations from pyplusplus import module_builder from pyplusplus.module_builder import call_policies This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <rom...@us...> - 2006-05-28 08:29:10
|
Revision: 175 Author: roman_yakovenko Date: 2006-05-28 01:28:55 -0700 (Sun, 28 May 2006) ViewCVS: http://svn.sourceforge.net/pygccxml/?rev=175&view=rev Log Message: ----------- removing pkg-info.txt and profile_pypp.py files Removed Paths: ------------- pyplusplus_dev/examples/pyboost_dev/dev/date_time/pkg-info.txt pyplusplus_dev/examples/pyboost_dev/dev/date_time/profile_pypp.py Deleted: pyplusplus_dev/examples/pyboost_dev/dev/date_time/pkg-info.txt =================================================================== --- pyplusplus_dev/examples/pyboost_dev/dev/date_time/pkg-info.txt 2006-05-28 08:27:04 UTC (rev 174) +++ pyplusplus_dev/examples/pyboost_dev/dev/date_time/pkg-info.txt 2006-05-28 08:28:55 UTC (rev 175) @@ -1,18 +0,0 @@ -Metadata-Version: 1.1 -Name: py_date_time -Version: 1.33.1 -Author: Roman Yakovenko -Author-email: roman yakovenko at gmail com -Maintainer: Roman Yakovenko -Maintainer-email: roman yakovenko at gmail com -Home-page: http://www.language-binding.net/pyplusplus/examples/py_date_time/py_date_time.html -Download-url: http://sourceforge.net/project/showfiles.php?group_id=118209 -Summary: Python bindings for C++ boost.date_time library -License: Boost Software License -Description: Python bindings for C++ boost.date_time library. Bindings has been created with pyplusplus code generator -Keywords: C++ code generation bindings date time -Classifier: Development Status :: 5 - Production/Stable -Classifier: Intended Audience :: Developers -Classifier: License :: Freeware -Classifier: Programming Language :: Python -Classifier: Topic :: Software Development \ No newline at end of file Deleted: pyplusplus_dev/examples/pyboost_dev/dev/date_time/profile_pypp.py =================================================================== --- pyplusplus_dev/examples/pyboost_dev/dev/date_time/profile_pypp.py 2006-05-28 08:27:04 UTC (rev 174) +++ pyplusplus_dev/examples/pyboost_dev/dev/date_time/profile_pypp.py 2006-05-28 08:28:55 UTC (rev 175) @@ -1,20 +0,0 @@ -# Copyright 2004 Roman Yakovenko. -# Distributed under the Boost Software License, Version 1.0. (See -# accompanying file LICENSE_1_0.txt or copy at -# http://www.boost.org/LICENSE_1_0.txt) - -import os -import hotshot -import hotshot.stats -import settings -import generate_code - -if __name__ == "__main__": - statistics_file = os.path.join( settings.generated_files_dir, 'profile.stat' ) - profile = hotshot.Profile(statistics_file) - profile.runcall( generate_code.export ) - profile.close() - statistics = hotshot.stats.load( statistics_file ) - statistics.strip_dirs() - statistics.sort_stats( 'time', 'calls' ) - statistics.print_stats( 40 ) This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <rom...@us...> - 2006-05-28 08:27:13
|
Revision: 174 Author: roman_yakovenko Date: 2006-05-28 01:27:04 -0700 (Sun, 28 May 2006) ViewCVS: http://svn.sourceforge.net/pygccxml/?rev=174&view=rev Log Message: ----------- removing build_setup.py file Removed Paths: ------------- pyplusplus_dev/examples/pyboost_dev/dev/date_time/build_setup.py Deleted: pyplusplus_dev/examples/pyboost_dev/dev/date_time/build_setup.py =================================================================== --- pyplusplus_dev/examples/pyboost_dev/dev/date_time/build_setup.py 2006-05-28 08:08:40 UTC (rev 173) +++ pyplusplus_dev/examples/pyboost_dev/dev/date_time/build_setup.py 2006-05-28 08:27:04 UTC (rev 174) @@ -1,40 +0,0 @@ -#! /usr/bin/python -# Copyright 2004 Roman Yakovenko. -# Distributed under the Boost Software License, Version 1.0. (See -# accompanying file LICENSE_1_0.txt or copy at -# http://www.boost.org/LICENSE_1_0.txt) - -import os -import sys -import shutil - -def create( source_dir, target_dir ): - sys.path.append( source_dir ) - environment = __import__( 'environment' ) - files_dir = os.path.join( source_dir, 'unittests' ) - files = ['date_time.py' - , 'date_time_zonespec.csv' - , 'LICENSE_1_0.txt' - , 'local_time_tester.py' - , 'posix_time_tester.py' - , 'gregorian_tester.py' - , 'test_all.py' - ] - - if 'win32' == sys.platform: - files.append( '_date_time_.pyd' ) - else: - files.append( '_date_time_.so' ) - - - files = map( lambda fname: os.path.join( files_dir, fname ), files ) - if 'win32' == sys.platform: - files.append( os.path.join( environment.settings.boost_libs_path, 'boost_python.dll' ) ) - files.append( os.path.join( environment.settings.boost_libs_path, 'boost_date_time-vc71-mt-1_33_1.dll' ) ) - else: - files.append( os.path.join( environment.settings.boost_libs_path, 'libboost_python.so' ) ) - files.append( os.path.join( environment.settings.boost_libs_path, 'libboost_python.so.1.33.1' ) ) - files.append( os.path.join( environment.settings.boost_libs_path, 'libboost_date_time-gcc-1_33_1.so' ) ) - files.append( os.path.join( environment.settings.boost_libs_path, 'libboost_date_time-gcc-1_33_1.so.1.33.1' ) ) - for f in files: - shutil.copy( f, target_dir ) \ No newline at end of file This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <rom...@us...> - 2006-05-28 08:08:49
|
Revision: 173 Author: roman_yakovenko Date: 2006-05-28 01:08:40 -0700 (Sun, 28 May 2006) ViewCVS: http://svn.sourceforge.net/pygccxml/?rev=173&view=rev Log Message: ----------- renaming date_time.rest to boost.rest Added Paths: ----------- pyplusplus_dev/docs/examples/boost/boost.rest Removed Paths: ------------- pyplusplus_dev/docs/examples/boost/date_time.rest Copied: pyplusplus_dev/docs/examples/boost/boost.rest (from rev 171, pyplusplus_dev/docs/examples/boost/date_time.rest) =================================================================== --- pyplusplus_dev/docs/examples/boost/boost.rest (rev 0) +++ pyplusplus_dev/docs/examples/boost/boost.rest 2006-05-28 08:08:40 UTC (rev 173) @@ -0,0 +1,180 @@ +======================= +boost.date_time example +======================= + +.. contents:: Table of contents + +-------------- + Introduction +-------------- + +What is the boost.date_time? +---------------------------- + +`boost`_ is repository of free peer-reviewed portable C++ source libraries. + +`date_time`_ is a cross-platform and open source C++ library designed to provide +a basis for performing efficient time calculations. The `date_time`_ library has +been created by Jeff Garland. + +What is the `pyplusplus`_? +-------------------------- + +.. include:: ./../../definition.rest + +Abstract +-------- + +I believe that `pyplusplus`_ is ready for hard work. It is quick, stable and +flexible. In order to prove this, I decided to create `Python`_ bindings for a +few libraries. One of them is the `date_time`_. I choose the `date_time`_ library for +the next reasons: + + + In my opinion, `Python`_ is missing good date\\time library. + + + The `date_time`_ is a library with + + * good documentation + + * well defined interfaces + + * clear concepts + + * comprehensive unit tests + + All this made working with library to be a pleasure. + + + The `date_time`_ implementation uses next C++ techniques and patterns: + + * extensive use of templates + + * template meta-programming ( MPL ) + + * preprocessor meta-programming ( PPL ) + + * operator overloading + + * implicit conversion + + * smart pointers + + * ... + + The `date_time`_ example fully demonstrates the capabilities of `pyplusplus`_. + +It took me one week, evenings only, to expose the `date_time`_ library to `Python`_. +I have added few missing features to `pyplusplus`_, polished existing ones. Most of +the time I spent translating tests from C++ to `Python`_. This examples consist +few files and directories: + + 1. environment.py - contains different environment settings + + 2. customization_data.py - contains a table of aliases and other data + + 3. generate_code.py - main file + + 4. sconstruct - build configuration file + + 5. generated - directory that contains all generated code and only it + + 6. unittests - directory that contains some test, that has been ported from + C++ + +Files and directories located under "pyplusplus-x.y.z/examples/py_date_time". +Where x.y.z is the version of `pyplusplus`_ you are using. + +------------------------ +What should be exportes? +------------------------ +The result of this step should be set of declarations I want to export to Python. +There were few problems I should have solved at this stage. + + 1. Compilation of the `date_time`_ library takes some time. Fortunately + `pygccxml`_ allows to create, save and read `GCC-XML`_ generated file. + Instead of parsing source files each time, `pygccxml`_ parses xml files only. + Now, it takes only few seconds to read declarations. + + 2. The `date_time`_ library makes an extensive use of an other C++ libraries. + Filtering was the second problem I had to deal with. It was easy. + I wanted to export all declarations, defined under namespaces by the `date_time`_ + library: date_time, posix_time, local_time, gregorian. I do not want to + export functionality related to facet, parsing, formatting. Well, this + way I filtered out most of the declarations I do not need. + +---------------------- +Configure declarations +---------------------- +There is a lot of configuration have been applied on declarations: + +1. Every template instantiation class has been renamed. The result: `Python`_ + bindings have exactly the same names as in C++. This also solves an other very + important issue: original library documentation and examples - they could be + reused, without any changes. You can take a look on py_date_time/unittests + directory content. + +2. Namespace aliases have been introduced. ``bpt`` is shorter then + ``boost::posix_time``. As a result, generated code is more readable. + +3. Operators. The `date_time`_ library is using `boost.operators`_ framework to + implement operators overloading. This causes a small problem in `Python`_ + code. Operators, defined in based class, were not visible while using + derived class. After small conversation with people, from boost.python + list, the solution was found - to redefine all operators in derived class. + This functionality was missing in `pyplusplus`_. It took me one hour to + implement it. *code_creator.class_t* class from now has new property + called *redefine_operators*. All I needed to do, in order to export + operators in derived class, is to turn the flag on. + +--------------------- +Writing code to files +--------------------- +Functionality provided by `pyplusplus`_ was good enough for this use case. More +over, `pyplusplus`_ writes code into file only in case the code is different. +This functionality was specially useful - small compilation time. + +----------- +Small bonus +----------- +`boost.date_time`_ library is under development. There were a lot of changes +from version 1.33 to 1.34. Nevertheless I almost did not spend time to change +or update my script. The main reason is of course the script I wrote. Instead +of working on every single class/function/file, `pyplusplus`_ allowed me to +create a set of rules, that work on whole set of declarations. + +---------- +Conclusion +---------- +As for me, `pyplusplus`_ is ready for hard work! +* Big and complex C++ library has been exposed to `Python`_ in few days only. +* You can see from script, that there is no need in deep knowledge of `boost.python`_ library. +* Python gain an excelent functionality for dealing with date/time. +* Real world, 3rd party project is used in testing of `pyplusplus`_. + +-------- +Download +-------- + +http://sourceforge.net/project/showfiles.php?group_id=118209. + +I am going to continue development of the `Python`_ bindings for +`boost.date_time`_ library. + +.. _`environment.py`: http://cvs.sourceforge.net/viewcvs.py/pygccxml/source/pyplusplus/examples/py_easybmp/environment.py?view=markup +.. _`sconstruct`: http://cvs.sourceforge.net/viewcvs.py/pygccxml/source/pyplusplus/examples/py_easybmp/sconstruct?view=markup +.. _`Python`: http://www.python.org +.. _`pygccxml`: http://www.language-binding.net/pygccxml/pygccxml.html +.. _`boost.date_time`: http://boost.org/doc/html/date_time.html +.. _`date_time`: http://boost.org/doc/html/date_time.html +.. _`boost`: http://www.boost.org +.. _`boost.python`: http://www.boost.org/libs/python/doc/index.html +.. _`boost.operators`: http://www.boost.org/ +.. _`GCC-XML`: http://www.gccxml.org +.. _`pyplusplus` : ./../../pyplusplus.html + +.. + Local Variables: + mode: indented-text + indent-tabs-mode: nil + sentence-end-double-space: t + fill-column: 70 + End: Deleted: pyplusplus_dev/docs/examples/boost/date_time.rest =================================================================== --- pyplusplus_dev/docs/examples/boost/date_time.rest 2006-05-28 08:07:48 UTC (rev 172) +++ pyplusplus_dev/docs/examples/boost/date_time.rest 2006-05-28 08:08:40 UTC (rev 173) @@ -1,180 +0,0 @@ -======================= -boost.date_time example -======================= - -.. contents:: Table of contents - --------------- - Introduction --------------- - -What is the boost.date_time? ----------------------------- - -`boost`_ is repository of free peer-reviewed portable C++ source libraries. - -`date_time`_ is a cross-platform and open source C++ library designed to provide -a basis for performing efficient time calculations. The `date_time`_ library has -been created by Jeff Garland. - -What is the `pyplusplus`_? --------------------------- - -.. include:: ./../../definition.rest - -Abstract --------- - -I believe that `pyplusplus`_ is ready for hard work. It is quick, stable and -flexible. In order to prove this, I decided to create `Python`_ bindings for a -few libraries. One of them is the `date_time`_. I choose the `date_time`_ library for -the next reasons: - - + In my opinion, `Python`_ is missing good date\\time library. - - + The `date_time`_ is a library with - - * good documentation - - * well defined interfaces - - * clear concepts - - * comprehensive unit tests - - All this made working with library to be a pleasure. - - + The `date_time`_ implementation uses next C++ techniques and patterns: - - * extensive use of templates - - * template meta-programming ( MPL ) - - * preprocessor meta-programming ( PPL ) - - * operator overloading - - * implicit conversion - - * smart pointers - - * ... - - The `date_time`_ example fully demonstrates the capabilities of `pyplusplus`_. - -It took me one week, evenings only, to expose the `date_time`_ library to `Python`_. -I have added few missing features to `pyplusplus`_, polished existing ones. Most of -the time I spent translating tests from C++ to `Python`_. This examples consist -few files and directories: - - 1. environment.py - contains different environment settings - - 2. customization_data.py - contains a table of aliases and other data - - 3. generate_code.py - main file - - 4. sconstruct - build configuration file - - 5. generated - directory that contains all generated code and only it - - 6. unittests - directory that contains some test, that has been ported from - C++ - -Files and directories located under "pyplusplus-x.y.z/examples/py_date_time". -Where x.y.z is the version of `pyplusplus`_ you are using. - ------------------------- -What should be exportes? ------------------------- -The result of this step should be set of declarations I want to export to Python. -There were few problems I should have solved at this stage. - - 1. Compilation of the `date_time`_ library takes some time. Fortunately - `pygccxml`_ allows to create, save and read `GCC-XML`_ generated file. - Instead of parsing source files each time, `pygccxml`_ parses xml files only. - Now, it takes only few seconds to read declarations. - - 2. The `date_time`_ library makes an extensive use of an other C++ libraries. - Filtering was the second problem I had to deal with. It was easy. - I wanted to export all declarations, defined under namespaces by the `date_time`_ - library: date_time, posix_time, local_time, gregorian. I do not want to - export functionality related to facet, parsing, formatting. Well, this - way I filtered out most of the declarations I do not need. - ----------------------- -Configure declarations ----------------------- -There is a lot of configuration have been applied on declarations: - -1. Every template instantiation class has been renamed. The result: `Python`_ - bindings have exactly the same names as in C++. This also solves an other very - important issue: original library documentation and examples - they could be - reused, without any changes. You can take a look on py_date_time/unittests - directory content. - -2. Namespace aliases have been introduced. ``bpt`` is shorter then - ``boost::posix_time``. As a result, generated code is more readable. - -3. Operators. The `date_time`_ library is using `boost.operators`_ framework to - implement operators overloading. This causes a small problem in `Python`_ - code. Operators, defined in based class, were not visible while using - derived class. After small conversation with people, from boost.python - list, the solution was found - to redefine all operators in derived class. - This functionality was missing in `pyplusplus`_. It took me one hour to - implement it. *code_creator.class_t* class from now has new property - called *redefine_operators*. All I needed to do, in order to export - operators in derived class, is to turn the flag on. - ---------------------- -Writing code to files ---------------------- -Functionality provided by `pyplusplus`_ was good enough for this use case. More -over, `pyplusplus`_ writes code into file only in case the code is different. -This functionality was specially useful - small compilation time. - ------------ -Small bonus ------------ -`boost.date_time`_ library is under development. There were a lot of changes -from version 1.33 to 1.34. Nevertheless I almost did not spend time to change -or update my script. The main reason is of course the script I wrote. Instead -of working on every single class/function/file, `pyplusplus`_ allowed me to -create a set of rules, that work on whole set of declarations. - ----------- -Conclusion ----------- -As for me, `pyplusplus`_ is ready for hard work! -* Big and complex C++ library has been exposed to `Python`_ in few days only. -* You can see from script, that there is no need in deep knowledge of `boost.python`_ library. -* Python gain an excelent functionality for dealing with date/time. -* Real world, 3rd party project is used in testing of `pyplusplus`_. - --------- -Download --------- - -http://sourceforge.net/project/showfiles.php?group_id=118209. - -I am going to continue development of the `Python`_ bindings for -`boost.date_time`_ library. - -.. _`environment.py`: http://cvs.sourceforge.net/viewcvs.py/pygccxml/source/pyplusplus/examples/py_easybmp/environment.py?view=markup -.. _`sconstruct`: http://cvs.sourceforge.net/viewcvs.py/pygccxml/source/pyplusplus/examples/py_easybmp/sconstruct?view=markup -.. _`Python`: http://www.python.org -.. _`pygccxml`: http://www.language-binding.net/pygccxml/pygccxml.html -.. _`boost.date_time`: http://boost.org/doc/html/date_time.html -.. _`date_time`: http://boost.org/doc/html/date_time.html -.. _`boost`: http://www.boost.org -.. _`boost.python`: http://www.boost.org/libs/python/doc/index.html -.. _`boost.operators`: http://www.boost.org/ -.. _`GCC-XML`: http://www.gccxml.org -.. _`pyplusplus` : ./../../pyplusplus.html - -.. - Local Variables: - mode: indented-text - indent-tabs-mode: nil - sentence-end-double-space: t - fill-column: 70 - End: This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <rom...@us...> - 2006-05-28 08:07:56
|
Revision: 172 Author: roman_yakovenko Date: 2006-05-28 01:07:48 -0700 (Sun, 28 May 2006) ViewCVS: http://svn.sourceforge.net/pygccxml/?rev=172&view=rev Log Message: ----------- removing date_time.pdf documentation Removed Paths: ------------- pyplusplus_dev/docs/examples/boost/date_time.pdf Deleted: pyplusplus_dev/docs/examples/boost/date_time.pdf =================================================================== --- pyplusplus_dev/docs/examples/boost/date_time.pdf 2006-05-28 07:48:34 UTC (rev 171) +++ pyplusplus_dev/docs/examples/boost/date_time.pdf 2006-05-28 08:07:48 UTC (rev 172) @@ -1,50794 +0,0 @@ -%PDF-1.3 -%\xAA\xAB\xAC\xAD -4 0 obj -<< /Type /Info -/Producer (FOP 0.20.5) >> -endobj -5 0 obj -<< /Length 145 /Filter [ /ASCII85Decode /FlateDecode ] - >> -stream -Garg^iR2p+<\Q;VZ`l,a#YF&3cneK(8`hd)8EVa-0E=F,"[b'J4Yn<U"Z$Mg4\H/]KofPnBT8+4<)!O%,BIq!OFa6rJqd3QIW5[oO@s$hR\Gnf>Vm%bbbUuOU.S.6=G7;>0%UXe!!70`r;~> -endstream -endobj -6 0 obj -<< /Type /Page -/Parent 1 0 R -/MediaBox [ 0 0 612 792 ] -/Resources 3 0 R -/Contents 5 0 R ->> -endobj -7 0 obj -<< /Length 173 /Filter [ /ASCII85Decode /FlateDecode ] - >> -stream -Garo:YmS?5&4HEoMCFb+p$T-J/o=DmYn=DXM[50:#f/<VJ+')]#r9aZ4F#=)XnNR3YWrFK\<2J:Z"Sdm]F!qpKhaTDHLFM.SG1flg7i9Dq71%Z[Tdc?a!i*jj#)#M<T4'Ccq`iqOa^kNGm!R`SM@+_*Wqt3eK7P$Y5VjJeIO76~> -endstream -endobj -8 0 obj -<< /Type /Page -/Parent 1 0 R -/MediaBox [ 0 0 612 792 ] -/Resources 3 0 R -/Contents 7 0 R ->> -endobj -9 0 obj -<< /Length 73 /Filter [ /ASCII85Decode /FlateDecode ] - >> -stream -Garg^iGoCd.c`?]8E[98dBcY'2_if<<A6-dcneNQ!4%J[("0Sn\X_$sR@*4Vj&-']k]7>:~> -endstream -endobj -10 0 obj -<< /Type /Page -/Parent 1 0 R -/MediaBox [ 0 0 612 792 ] -/Resources 3 0 R -/Contents 9 0 R ->> -endobj -11 0 obj -<< /Length 2126 /Filter [ /ASCII85Decode /FlateDecode ] - >> -stream -Gb"/l=``=U'Lq!Q/,3f(1c2IVl^O6:8LJB17X\s>:'[(-R10stKG(o3^0FB7!b40/.U)h7#9V)$A'P4t^qCO#-e$2b$YC".VL^U19H7h.+dQ(+,o67A_",.b%_6@L'C5CFWORcGU%OB@^)ae<>6ij@f&^V3.[d<rd/(YKIUCsc[>8<SeXa=aL:k)J%rC6hk,p(7<[di=./E$_8uhd[o&k"o"1ptQ!J*M/a$Ba0LpR6MUdmsP=c`Bloh&60j@ZOC>^`3U]DfW4+;!afKZ@dQ4R2UVq]Snc#GIkC/O.3Z#S.%>NC?jcm8\:p,pK?G7@OgsF1%_TQfIK00gHl.pumofEO_k^=[^F6]nDahJO#ki773%h-9#JKBYK\0bj,7-CRST;Z'>4Ko.,s)@bHQmmeX1R+OGqp&l;:S\Qi`l,gu6NS7>7r!eL&s)@(<C3mRDT[Z2$$RS:6p;^W+^oSBK/SnjX`kA3_n>sY'ao.Hlk^@L\W]GK9@`-(V<Ye9+,Yj5p)JO#\mg:4P#*rA&>)Z/\QO0\RiQ-:VfIL$JjZsV=>M4)?$Jfuk^;R2gXA9epAG1k05!sAZg2X9YhS*`TA+o=)f[n8kTa)Mh==-lLL@H3_$JNu::bCOpi'@33#lH409/CV/Nb?&q=9G[uApXC+6D?WIt9Xpi4$_M'#FOf-?h83>eAMd0b!eEVSShjG"o2)Jk5$*`sQj9sK5bLtQB==pG`l;hG<[QWtfsXi5XLZA2*XDlMNL;ihR);VQVaJV;aeX!8+rLptoPcj#k+Y'-OWbb0q/b\k'cRD]qFpd>`X"VL[?BP$fhC;!g,4HRYcRs0!f`XPcZ+%%1hYdo/F0breZRaLLl4U]@]&GH'%Fle&-U]clD-.rG,)lZjTW+6_?`aA5p4O/?Nu[#`4t3*j@gtA+c7W4+7B!!5TnG*'o$?:L8.a>T<8Qe-&6]g819'K+OCdr:*EgBhc_1'A(.-%n*U'P?20b\p'(X$h=cbBh@<kWlJ7S!g1jjN+DLrZ4\=pTZ;mr,Vl,s/L:2;EPfff&[5rW?<oo\5rX=u+&El\`Wt`l"FCh%Erqdn_';9`3]SOP4l,!p[J3]b\[a;fFakcAlgc7pLA>LOm@Xfa2"T$8q)@.&K_.LUX@V]1M0#O)[+;!bF@/PS0(`b0Lm>OA[[d.Q+JO'*)SY=9h2N.ck>;ON&+GM+S5TnFN@*G`$W_M=D8oHS,C*iJHF-.7on%\JVi\*<mO"BEWQ<tc]X`8!6D:$YAB3P+jp78Uk)A:Zp/3_KL+OD0+.uM]$e1M3;C>$)%)ZJ,K2dPZ-Ic5lDTFk)b[B3q;)R&s?Q0t&>,)Y\4KSLmQ+:r4)WUliE+@A;ohY:'gZZTO!p1cTK49+8*+OE=!*?&st5!:EjAU<"$CR9m(Z:<4U*<ZFl\V16^jBV.IS;Xr%(5q2,hF):I\;9-8?%:><G+Qm&1c'MHV"=TFGdY]#X!m3[=%JiG4egbhpZD0bP\Cl2;jf"1R`3tN])(mTUFd\r"T!&20lP(*7&r`S=Y=5;e![<3!M]NC#R#HM$ZWM,*3IreA0&Y\B;\n<MIO9SlW(Np9>T<j1da&i&Es-4\6I))HJjr_DrW;TeO8RS1dN82#jFflk.i&FoJX%B,$eq0YqMk=AU,#DTcr^Y5TnE:[Gku@[)]NIC%a9Io;,,kg2(/:;1/WMm1jb=+Btb9eqL'@dgAsE?\r;.f7@#gUA5B,"F;=Mm($`rj)-]ZD'W24>\O%9j\`U*Aj\6p#kZ("0!B6-;H-n:.QNNa%s?Y39p@mcd"CW)gbFX>18LZYWBNqBp+Q=l5P>o.8s._Dp+bk6J]9Fc#P-\MX35oC$EXhB3TU'qCsfT#e5Ah%A?!.V[aa9s*tW,(FQ3Go:,V$a)omC"rD>U'a<XCdQ$4mnNc.#@+#]ET"G-91D?d:)+WCVQ?-mK7k%h.Z[_fZO]aY%&Kt:\f*TJga[.;`<4A*$WqTCFMk05ZPj2`_^#kSG<R.okAhOn6@Q%!j/L4+.d&En2cA)=c^BbdJ8CV'0$Hlf--nsTa'ItBqY@CpVCEh?,TInq&"3@Pb3jhulegU4Q[f\CL>b,)M5r%pF%DS2$W2D`(LP8//;:!,,lc2C+4d>.^.r"h+8%ik~> -endstream -endobj -12 0 obj -<< /Type /Page -/Parent 1 0 R -/MediaBox [ 0 0 612 792 ] -/Resources 3 0 R -/Contents 11 0 R -/Annots 13 0 R ->> -endobj -13 0 obj -[ -14 0 R -16 0 R -18 0 R -20 0 R -22 0 R -24 0 R -26 0 R -28 0 R -30 0 R -32 0 R -34 0 R -36 0 R -38 0 R -40 0 R -42 0 R -44 0 R -46 0 R -48 0 R -50 0 R -52 0 R -54 0 R -56 0 R -58 0 R -60 0 R -62 0 R -64 0 R -66 0 R -68 0 R -70 0 R -72 0 R -74 0 R -76 0 R -78 0 R -80 0 R -82 0 R -84 0 R -86 0 R -88 0 R -90 0 R -92 0 R -94 0 R -96 0 R -98 0 R -100 0 R -102 0 R -104 0 R -106 0 R -108 0 R -110 0 R -112 0 R -114 0 R -116 0 R -118 0 R -120 0 R -] -endobj -14 0 obj -<< /Type /Annot -/Subtype /Link -/Rect [ 94.8 655.001 165.63 645.001 ] -/C [ 0 0 0 ] -/Border [ 0 0 0 ] -/A 15 0 R -/H /I ->> -endobj -16 0 obj -<< /Type /Annot -/Subtype /Link -/Rect [ 118.8 644.001 164.35 634.001 ] -/C [ 0 0 0 ] -/Border [ 0 0 0 ] -/A 17 0 R -/H /I ->> -endobj -18 0 obj -<< /Type /Annot -/Subtype /Link -/Rect [ 142.8 633.001 187.25 623.001 ] -/C [ 0 0 0 ] -/Border [ 0 0 0 ] -/A 19 0 R -/H /I ->> -endobj -20 0 obj -<< /Type /Annot -/Subtype /Link -/Rect [ 142.8 622.001 214.74 612.001 ] -/C [ 0 0 0 ] -/Border [ 0 0 0 ] -/A 21 0 R -/H /I ->> -endobj -22 0 obj -<< /Type /Annot -/Subtype /Link -/Rect [ 142.8 611.001 210.85 601.001 ] -/C [ 0 0 0 ] -/Border [ 0 0 0 ] -/A 23 0 R -/H /I ->> -endobj -24 0 obj -<< /Type /Annot -/Subtype /Link -/Rect [ 118.8 600.001 219.88 590.001 ] -/C [ 0 0 0 ] -/Border [ 0 0 0 ] -/A 25 0 R -/H /I ->> -endobj -26 0 obj -<< /Type /Annot -/Subtype /Link -/Rect [ 118.8 589.001 159.34 579.001 ] -/C [ 0 0 0 ] -/Border [ 0 0 0 ] -/A 27 0 R -/H /I ->> -endobj -28 0 obj -<< /Type /Annot -/Subtype /Link -/Rect [ 142.8 578.001 161.68 568.001 ] -/C [ 0 0 0 ] -/Border [ 0 0 0 ] -/A 29 0 R -/H /I ->> -endobj -30 0 obj -<< /Type /Annot -/Subtype /Link -/Rect [ 142.8 567.001 245.82 557.001 ] -/C [ 0 0 0 ] -/Border [ 0 0 0 ] -/A 31 0 R -/H /I ->> -endobj -32 0 obj -<< /Type /Annot -/Subtype /Link -/Rect [ 142.8 556.001 190.29 546.001 ] -/C [ 0 0 0 ] -/Border [ 0 0 0 ] -/A 33 0 R -/H /I ->> -endobj -34 0 obj -<< /Type /Annot -/Subtype /Link -/Rect [ 142.8 545.001 197.5 535.001 ] -/C [ 0 0 0 ] -/Border [ 0 0 0 ] -/A 35 0 R -/H /I ->> -endobj -36 0 obj -<< /Type /Annot -/Subtype /Link -/Rect [ 142.8 534.001 256.39 524.001 ] -/C [ 0 0 0 ] -/Border [ 0 0 0 ] -/A 37 0 R -/H /I ->> -endobj -38 0 obj -<< /Type /Annot -/Subtype /Link -/Rect [ 142.8 523.001 221.94 513.001 ] -/C [ 0 0 0 ] -/Border [ 0 0 0 ] -/A 39 0 R -/H /I ->> -endobj -40 0 obj -<< /Type /Annot -/Subtype /Link -/Rect [ 118.8 512.001 164.64 502.001 ] -/C [ 0 0 0 ] -/Border [ 0 0 0 ] -/A 41 0 R -/H /I ->> -endobj -42 0 obj -<< /Type /Annot -/Subtype /Link -/Rect [ 142.8 501.001 166.14 491.001 ] -/C [ 0 0 0 ] -/Border [ 0 0 0 ] -/A 43 0 R -/H /I ->> -endobj -44 0 obj -<< /Type /Annot -/Subtype /Link -/Rect [ 142.8 490.001 201.96 480.001 ] -/C [ 0 0 0 ] -/Border [ 0 0 0 ] -/A 45 0 R -/H /I ->> -endobj -46 0 obj -<< /Type /Annot -/Subtype /Link -/Rect [ 142.8 479.001 192.52 469.001 ] -/C [ 0 0 0 ] -/Border [ 0 0 0 ] -/A 47 0 R -/H /I ->> -endobj -48 0 obj -<< /Type /Annot -/Subtype /Link -/Rect [ 142.8 468.001 199.73 458.001 ] -/C [ 0 0 0 ] -/Border [ 0 0 0 ] -/A 49 0 R -/H /I ->> -endobj -50 0 obj -<< /Type /Annot -/Subtype /Link -/Rect [ 118.8 457.001 165.18 447.001 ] -/C [ 0 0 0 ] -/Border [ 0 0 0 ] -/A 51 0 R -/H /I ->> -endobj -52 0 obj -<< /Type /Annot -/Subtype /Link -/Rect [ 142.8 446.001 227.22 436.001 ] -/C [ 0 0 0 ] -/Border [ 0 0 0 ] -/A 53 0 R -/H /I ->> -endobj -54 0 obj -<< /Type /Annot -/Subtype /Link -/Rect [ 142.8 435.001 211.69 425.001 ] -/C [ 0 0 0 ] -/Border [ 0 0 0 ] -/A 55 0 R -/H /I ->> -endobj -56 0 obj -<< /Type /Annot -/Subtype /Link -/Rect [ 142.8 424.001 226.11 414.001 ] -/C [ 0 0 0 ] -/Border [ 0 0 0 ] -/A 57 0 R -/H /I ->> -endobj -58 0 obj -<< /Type /Annot -/Subtype /Link -/Rect [ 142.8 413.001 220.58 403.001 ] -/C [ 0 0 0 ] -/Border [ 0 0 0 ] -/A 59 0 R -/H /I ->> -endobj -60 0 obj -<< /Type /Annot -/Subtype /Link -/Rect [ 142.8 402.001 210.56 392.001 ] -/C [ 0 0 0 ] -/Border [ 0 0 0 ] -/A 61 0 R -/H /I ->> -endobj -62 0 obj -<< /Type /Annot -/Subtype /Link -/Rect [ 142.8 391.001 217.79 381.001 ] -/C [ 0 0 0 ] -/Border [ 0 0 0 ] -/A 63 0 R -/H /I ->> -endobj -64 0 obj -<< /Type /Annot -/Subtype /Link -/Rect [ 118.8 380.001 215.46 370.001 ] -/C [ 0 0 0 ] -/Border [ 0 0 0 ] -/A 65 0 R -/H /I ->> -endobj -66 0 obj -<< /Type /Annot -/Subtype /Link -/Rect [ 142.8 369.001 195.86 359.001 ] -/C [ 0 0 0 ] -/Border [ 0 0 0 ] -/A 67 0 R -/H /I ->> -endobj -68 0 obj -<< /Type /Annot -/Subtype /Link -/Rect [ 142.8 358.001 185.84 348.001 ] -/C [ 0 0 0 ] -/Border [ 0 0 0 ] -/A 69 0 R -/H /I ->> -endobj -70 0 obj -<< /Type /Annot -/Subtype /Link -/Rect [ 142.8 347.001 209.45 337.001 ] -/C [ 0 0 0 ] -/Border [ 0 0 0 ] -/A 71 0 R -/H /I ->> -endobj -72 0 obj -<< /Type /Annot -/Subtype /Link -/Rect [ 142.8 336.001 188.07 326.001 ] -/C [ 0 0 0 ] -/Border [ 0 0 0 ] -/A 73 0 R -/H /I ->> -endobj -74 0 obj -<< /Type /Annot -/Subtype /Link -/Rect [ 142.8 325.001 211.68 315.001 ] -/C [ 0 0 0 ] -/Border [ 0 0 0 ] -/A 75 0 R -/H /I ->> -endobj -76 0 obj -<< /Type /Annot -/Subtype /Link -/Rect [ 142.8 314.001 288.05 304.001 ] -/C [ 0 0 0 ] -/Border [ 0 0 0 ] -/A 77 0 R -/H /I ->> -endobj -78 0 obj -<< /Type /Annot -/Subtype /Link -/Rect [ 142.8 303.001 233.06 293.001 ] -/C [ 0 0 0 ] -/Border [ 0 0 0 ] -/A 79 0 R -/H /I ->> -endobj -80 0 obj -<< /Type /Annot -/Subtype /Link -/Rect [ 118.8 292.001 169.35 282.001 ] -/C [ 0 0 0 ] -/Border [ 0 0 0 ] -/A 81 0 R -/H /I ->> -endobj -82 0 obj -<< /Type /Annot -/Subtype /Link -/Rect [ 118.8 281.001 147.13 271.001 ] -/C [ 0 0 0 ] -/Border [ 0 0 0 ] -/A 83 0 R -/H /I ->> -endobj -84 0 obj -<< /Type /Annot -/Subtype /Link -/Rect [ 142.8 270.001 192.8 260.001 ] -/C [ 0 0 0 ] -/Border [ 0 0 0 ] -/A 85 0 R -/H /I ->> -endobj -86 0 obj -<< /Type /Annot -/Subtype /Link -/Rect [ 142.8 259.001 196.96 249.001 ] -/C [ 0 0 0 ] -/Border [ 0 0 0 ] -/A 87 0 R -/H /I ->> -endobj -88 0 obj -<< /Type /Annot -/Subtype /Link -/Rect [ 142.8 248.001 366.68 238.001 ] -/C [ 0 0 0 ] -/Border [ 0 0 0 ] -/A 89 0 R -/H /I ->> -endobj -90 0 obj -<< /Type /Annot -/Subtype /Link -/Rect [ 142.8 237.001 195.02 227.001 ] -/C [ 0 0 0 ] -/Border [ 0 0 0 ] -/A 91 0 R -/H /I ->> -endobj -92 0 obj -<< /Type /Annot -/Subtype /Link -/Rect [ 142.8 226.001 187.22 216.001 ] -/C [ 0 0 0 ] -/Border [ 0 0 0 ] -/A 93 0 R -/H /I ->> -endobj -94 0 obj -<< /Type /Annot -/Subtype /Link -/Rect [ 142.8 215.001 256.41 205.001 ] -/C [ 0 0 0 ] -/Border [ 0 0 0 ] -/A 95 0 R -/H /I ->> -endobj -96 0 obj -<< /Type /Annot -/Subtype /Link -/Rect [ 142.8 204.001 163.91 194.001 ] -/C [ 0 0 0 ] -/Border [ 0 0 0 ] -/A 97 0 R -/H /I ->> -endobj -98 0 obj -<< /Type /Annot -/Subtype /Link -/Rect [ 142.8 193.001 205.85 183.001 ] -/C [ 0 0 0 ] -/Border [ 0 0 0 ] -/A 99 0 R -/H /I ->> -endobj -100 0 obj -<< /Type /Annot -/Subtype /Link -/Rect [ 142.8 182.001 222.23 172.001 ] -/C [ 0 0 0 ] -/Border [ 0 0 0 ] -/A 101 0 R -/H /I ->> -endobj -102 0 obj -<< /Type /Annot -/Subtype /Link -/Rect [ 118.8 171.001 158.24 161.001 ] -/C [ 0 0 0 ] -/Border [ 0 0 0 ] -/A 103 0 R -/H /I ->> -endobj -104 0 obj -<< /Type /Annot -/Subtype /Link -/Rect [ 142.8 160.001 207.24 150.001 ] -/C [ 0 0 0 ] -/Border [ 0 0 0 ] -/A 105 0 R -/H /I ->> -endobj -106 0 obj -<< /Type /Annot -/Subtype /Link -/Rect [ 142.8 149.001 188.07 139.001 ] -/C [ 0 0 0 ] -/Border [ 0 0 0 ] -/A 107 0 R -/H /I ->> -endobj -108 0 obj -<< /Type /Annot -/Subtype /Link -/Rect [ 142.8 138.001 248.04 128.001 ] -/C [ 0 0 0 ] -/Border [ 0 0 0 ] -/A 109 0 R -/H /I ->> -endobj -110 0 obj -<< /Type /Annot -/Subtype /Link -/Rect [ 142.8 127.001 237.79 117.001 ] -/C [ 0 0 0 ] -/Border [ 0 0 0 ] -/A 111 0 R -/H /I ->> -endobj -112 0 obj -<< /Type /Annot -/Subtype /Link -/Rect [ 142.8 116.001 254.73 106.001 ] -/C [ 0 0 0 ] -/Border [ 0 0 0 ] -/A 113 0 R -/H /I ->> -endobj -114 0 obj -<< /Type /Annot -/Subtype /Link -/Rect [ 142.8 105.001 242.79 95.001 ] -/C [ 0 0 0 ] -/Border [ 0 0 0 ] -/A 115 0 R -/H /I ->> -endobj -116 0 obj -<< /Type /Annot -/Subtype /Link -/Rect [ 142.8 94.001 200.86 84.001 ] -/C [ 0 0 0 ] -/Border [ 0 0 0 ] -/A 117 0 R -/H /I ->> -endobj -118 0 obj -<< /Type /Annot -/Subtype /Link -/Rect [ 142.8 83.001 191.42 73.001 ] -/C [ 0 0 0 ] -/Border [ 0 0 0 ] -/A 119 0 R -/H /I ->> -endobj -120 0 obj -<< /Type /Annot -/Subtype /Link -/Rect [ 142.8 72.001 201.97 62.001 ] -/C [ 0 0 0 ] -/Border [ 0 0 0 ] -/A 121 0 R -/H /I ->> -endobj -122 0 obj -<< /Length 718 /Filter [ /ASCII85Decode /FlateDecode ] - >> -stream -Gb"/jc#;;i'Ys25.srn'AcBoo("R8k2Q84[A^_,lC;<`'4$umBhp6j_#@uPfX-@4CE;A1EK&>Pc@\-rH7J-:?+G+*^MHPV[4<b'c00t9?3(#-g0hG6I7,Q;t[?Mp.L5P]iZd7`Z@7Q8gm3oEQRg/ur!dY@(N42>++/'dTpin>79Uq%oNG@&$7N_9)=kOro8Dc]5!<EXrS:j:,6:m3.KKeY#XM';<g@Np*iWg.QCnt2_h:O`r]Dq1&('s,R,a[R`36BYI`8@.ZBp?>L[i14eI7F;@">gO-`_"(f8MXqKWES0.*TnC\kaQI#lQ8E3SD-j9=s=(N!d[.2A78Dme=#<%H!dWJU/M>cQ5eAu=+4UVes.=_h:>eUn<EVe-4nP=8c&X&31RcHE=%#4PeMp6qX_>i@4/iN'FfSC#"q`PJI0*iQ^)Hk4-/m1C9"EODKN9LHHget$4$q$YFRq=SNsL3$'b=N#5-H0k2&bh9$X5p4"p(CH8'l"J=\86)W$\ieu:L-:KA_O>f=HI5X9suVjr9c6g/kAkLul?$*/Sreorf55X6tL"\/'U'L^elbg\.c2u8`/!WbFa!=b"].cB:Z8<KHZO$'NG-D6V2#\[VQ=$a-1Bf[oA?e^pgEo+O5_+?0h:N=Sj[U^YP7:2d/iKQWR&rT01.t."fZ04_fXS&T73r2qj_Gs,//$V=V*aK&hbg&!Vo7p=^r-a"rG"Rs#~> -endstream -endobj -123 0 obj -<< /Type /Page -/Parent 1 0 R -/MediaBox [ 0 0 612 792 ] -/Resources 3 0 R -/Contents 122 0 R -/Annots 124 0 R ->> -endobj -124 0 obj -[ -125 0 R -127 0 R -129 0 R -131 0 R -133 0 R -135 0 R -137 0 R -139 0 R -141 0 R -143 0 R -145 0 R -147 0 R -149 0 R -] -endobj -125 0 obj -<< /Type /Annot -/Subtype /Link -/Rect [ 142.8 719.0 187.52 709.0 ] -/C [ 0 0 0 ] -/Border [ 0 0 0 ] -/A 126 0 R -/H /I ->> -endobj -127 0 obj -<< /Type /Annot -/Subtype /Link -/Rect [ 142.8 708.0 189.19 698.0 ] -/C [ 0 0 0 ] -/Border [ 0 0 0 ] -/A 128 0 R -/H /I ->> -endobj -129 0 obj -<< /Type /Annot -/Subtype /Link -/Rect [ 142.8 697.0 246.96 687.0 ] -/C [ 0 0 0 ] -/Border [ 0 0 0 ] -/A 130 0 R -/H /I ->> -endobj -131 0 obj -<< /Type /Annot -/Subtype /Link -/Rect [ 142.8 686.0 196.41 676.0 ] -/C [ 0 0 0 ] -/Border [ 0 0 0 ] -/A 132 0 R -/H /I ->> -endobj -133 0 obj -<< /Type /Annot -/Subtype /Link -/Rect [ 142.8 675.0 221.69 665.0 ] -/C [ 0 0 0 ] -/Border [ 0 0 0 ] -/A 134 0 R -/H /I ->> -endobj -135 0 obj -<< /Type /Annot -/Subtype /Link -/Rect [ 142.8 664.0 258.08 654.0 ] -/C [ 0 0 0 ] -/Border [ 0 0 0 ] -/A 136 0 R -/H /I ->> -endobj -137 0 obj -<< /Type /Annot -/Subtype /Link -/Rect [ 142.8 653.0 228.36 643.0 ] -/C [ 0 0 0 ] -/Border [ 0 0 0 ] -/A 138 0 R -/H /I ->> -endobj -139 0 obj -<< /Type /Annot -/Subtype /Link -/Rect [ 142.8 642.0 228.9 632.0 ] -/C [ 0 0 0 ] -/Border [ 0 0 0 ] -/A 140 0 R -/H /I ->> -endobj -141 0 obj -<< /Type /Annot -/Subtype /Link -/Rect [ 118.8 631.0 191.82 621.0 ] -/C [ 0 0 0 ] -/Border [ 0 0 0 ] -/A 142 0 R -/H /I ->> -endobj -143 0 obj -<< /Type /Annot -/Subtype /Link -/Rect [ 142.8 620.0 228.32 610.0 ] -/C [ 0 0 0 ] -/Border [ 0 0 0 ] -/A 144 0 R -/H /I ->> -endobj -145 0 obj -<< /Type /Annot -/Subtype /Link -/Rect [ 142.8 609.0 226.37 599.0 ] -/C [ 0 0 0 ] -/Border [ 0 0 0 ] -/A 146 0 R -/H /I ->> -endobj -147 0 obj -<< /Type /Annot -/Subtype /Link -/Rect [ 142.8 598.0 231.67 588.0 ] -/C [ 0 0 0 ] -/Border [ 0 0 0 ] -/A 148 0 R -/H /I ->> -endobj -149 0 obj -<< /Type /Annot -/Subtype /Link -/Rect [ 142.8 587.0 232.21 577.0 ] -/C [ 0 0 0 ] -/Border [ 0 0 0 ] -/A 150 0 R -/H /I ->> -endobj -151 0 obj -<< /Length 2697 /Filter [ /ASCII85Decode /FlateDecode ] - >> -stream -Gatm=h/D%-&qA57iPuY%0`&")Hf*PQ]h>VWk\Z9,fe*>0VJKQb;3e)i^;'Y:*)[d0Ek7/M!X+r63Q'fp^.?"C?ep-dB@35$Qgnm_?Nmdl<B(BE0:^9'CcP]N=)9TeBBsU3a7VNj>0S+u(=-c!MDqk+BBtU$+e47-2XgI^]Si-\0sZ6BH2_E!)l4uf/JmC4qB*@!GdXA'!Z%<LR)^b`1@A.jCufK;#H$R@Bbdm4*H?LfP44`:_B<<%1?++A+M<DXM,AL(o<7VPA#jlp?O5M5oL\0@^`.:RTuSXhMiG1XKs5J0s3tob,;Roim2W2.VU13JmtE-J]fkVGo>iR?'3/i!\&e$4Br.gl&@-h3lLX\4+T+@F<*AhX.'&n/F'8:E?(IT\Y[G9s*:<!Wa8>W2H@#T24pOc2e$%Cc#m.P?6mHU"pr,$KA>14"ra+JWRMJppmE+VhkI\@DiP7@k;cU0944C:_kPFe>6,e'aVCYo2S-\+_Q7QO36jX3LXE:5G?)ETu070=">QcS^q\[>^]k\m*buSLRW8)l@+eW_\#q-#nEmsMIMUk-6hMNls;#0RNW'hjd&(HTm27tL1==oo>.MK4-fngG@l$2<T?LK1CGcS-Q'U@gjGmDeI]P&%R?FVQ]VBGbuK^mO/#>aE\.Cj%3GU,c$3+:PIb10M1(0pl%\YjE2pU&P)F(?-3=WbkiN@>'_E&UntY!8*4r^cr'X1.oc.RE?$GpEagm8ip-]-.a=6<=lN`nueqMB6G!/fF`qp4'EgI(B#lCOfU7]2!7_SZK9Z)r'\aQs;1:W&kT&92'&;:L+(7,f%Tb^Es"N;aD5TnjfgHb^\D?B=9N`[SKh[ZN<(@iYsISJMRnln`$tCAD#mAbYlXXX4$Qms-;(JVZC#3eaQ[M8?U/8=M,&tjX)Wb6=Wcp'^kh]!AK3Mj*@Cl:E<F+"]LNcUu$I@ZiQ3>MkV9;h/oqFj/i:tkmc\RRQX0p8ZE?Xf-')Npu>oH%0Th@0@YEe"P*`LB@dZh`=+S0bWru=!\r\c**eODB.Z4oX1[DnDP4"O%@q=[D?q16QJ-rQKrRcS)8Fn)Rf??BIZHFSjJ^0o(=/=ro+5]6BksA8_l<,AiMf/0''$.f+JsD]#%lP5P&FkSooY1`s.)GTFTpFj`a`*c#QV7?p-TE\jO^-j3BYZgP,PEH*ASQD_pi\_lbkpbJVk0!GZbir:(qf.;f=$rfJkn_4G:/cIohNObnT6Q9G^20m3*0;flZ3VY<CDC0Z1?4nHa+k-PL8X@Ht/3V`5Ops-"1bJB1+(]-&'!Y7i`4W>d/<lrl,X[qOaf[YI>dkC>08mE8e9MU&%?`)%?LY(Z5,L^./n,1W]raTP'5,*:S`11>8W#hbfgaV1%p/4E#d6k%j7,ag!9[a*ui%Fq[1;P)[@ErXs./um9;)]Dp49Lr."[Th03XnNiM_m6GqWg*O[I:B;cR>i+VbV/-"M9R9@oTFK:[lGDJX,&(K[>.3*<^HmJfkO"GJ(W,GEMpB==>H*G90"e2'!$^4N'0;VmT!>M@BBKpYAgV!V(&&'KDiY*'o2^''))NArI+Vf`P^o9*QUj2*Afq.V?5'\9_Gisi@'Jg)[ArQC0+#i.[28ik\U$r79M-F38NA\\MI>#)^e:Oe)PYi\$0\"GmY^)0:>JnBT@e*6b0EY*,/0DWD/-cdu"ca>%%S;SSQc;rRaTUl"fS(l(&CQQ:<]C0E@<hA4U$:mZKJ8+FIPc[`)oJ?uRDbPB;V29nu9$FD+/Z=gGeP2e;Unpm/H7lPP\s+bNuS=GU^ipOj9&Uus"=JBo-8+gN"@D665tX9DbtKsoYeqJ=C)*dWW+RoloZF31@WfpDEp!isT./pUi\)&I?-C^bS@?;\R<I5j);OP?\nBhnN^\!:_;@^mg=<iabR+7+"%P^22_(%VOk_k+;ciW7IhHglQNRBWYFbouqEVn-b7F/%jr:I"f3e[D3;]+[pkZ@+%6G2bT@SF+?Ri02`P<o_>6NbQH6bGRrb.lIT]'8%54(j:h/FuKI(nM(?0FX[M2o<>?1?Ln(`-g72,,Bn@S@Dq"ia%El9'edpH=c+89=1&;"_l59&iuBXl@LGjsB&*cGLSTKfRcI8SA1iU)K7n-Pe7:9)):2,TA5Mq0@"eh\DDVWNEfdZ9Uf&ldX@..N,ckK2O0$lcWP$^Wd71iLl;3<(:/D/JSdG-V5<*)U+<B9_8FKL)A-C^!h#8fU3I.si\j(&[ok=1+B#Ab9ort-)BaiH>^2_GfHkniMmlh88bCIQoIE$LcJ_!KY?f.&d5'&@dmIqY1_B`^O1*+'g/GlpU+X85ne?i`'Jk4p#+auAugdg-*R0EQsD3TX\jQJn!lB))HJu5il:dSik;m)!E*GeQD0?sIY#-(p'eY(7#K0kHCdri_`b9BI,:&.irLG>1b+R+e+gq?5jCIDJoDbV0pqIDX-bnDHA0,Q!Jk;D7n5$^OUd\M?4rc>t]qOTfACP_U3D=Ri>rXBcnNhU''Z#o!7QdlD[HK=LdPcS3gYpW4?q/:17pJWZL^.0KYQqLL&BN7f7[kCm6*0>STPZ?>#PGaP_J(#*r@;Lf+gWmKENAP(EE$U()KDZ@5D'V\rq5+%4d$\U>mAXTUdT&^uWlF(fqM!qtR.1(NlDs_(&oBT=iL2T!!sl45^)A`LYPrtCDLF8N+t]CVk0+JD1#R&ggom->?giL?R6jp~> -endstream -endobj -152 0 obj -<< /Type /Page -/Parent 1 0 R -/MediaBox [ 0 0 612 792 ] -/Resources 3 0 R -/Contents 151 0 R -/Annots 153 0 R ->> -endobj -153 0 obj -[ -154 0 R -155 0 R -156 0 R -159 0 R -160 0 R -] -endobj -154 0 obj -<< /Type /Annot -/Subtype /Link -/Rect [ 583.39 629.16 595.06 619.16 ] -/C [ 0 0 0 ] -/Border [ 0 0 0 ] -/A << /URI (http://www.boost.org/LICENSE_1_0.txt) -/S /URI >> -/H /I ->> -endobj -155 0 obj -<< /Type /Annot -/Subtype /Link -/Rect [ 46.8 617.91 210.76 607.91 ] -/C [ 0 0 0 ] -/Border [ 0 0 0 ] -/A << /URI (http://www.boost.org/LICENSE_1_0.txt) -/S /URI >> -/H /I ->> -endobj -156 0 obj -<< /Type /Annot -/Subtype /Link -/Rect [ 94.8 525.221 378.92 515.221 ] -/C [ 0 0 0 ] -/Border [ 0 0 0 ] -/A 158 0 R -/H /I ->> -endobj -157 0 obj -<< -/Type /FileSpec -/F (http://www.crystalclearsoftware.com/libraries/date_time/date_time.pdf) ->> -endobj -158 0 obj -<< -/S /GoToR -/F 157 0 R -/D [ 0 /XYZ null null null ] ->> -endobj -159 0 obj -<< /Type /Annot -/Subtype /Link -/Rect [ 94.8 493.221 407.81 483.221 ] -/C [ 0 0 0 ] -/Border [ 0 0 0 ] -/A << /URI (http://www.crystalclearsoftware.com/libraries/date_time/ref_guide/index.html) -/S /URI >> -/H /I ->> -endobj -160 0 obj -<< /Type /Annot -/Subtype /Link -/Rect [ 94.8 461.221 366.71 451.221 ] -/C [ 0 0 0 ] -/Border [ 0 0 0 ] -/A << /URI (http://www.crystalclearsoftware.com/libraries/date_time/index.html) -/S /URI >> -/H /I ->> -endobj -161 0 obj -<< /Length 3667 /Filter [ /ASCII85Decode /FlateDecode ] - >> -stream -Gat=.D3*G]&cTMZ_B1`#Y+g,C.B^HuF4[9SOmB-%IcqOJ/^ZI0P3=-eh=um,pJMpD$t\*XMZ<e@0f_$0c4"?aID<=<qbsq\_B<*#FuSApIhSqNoe0L6Bs:nY@2q\SC=B?bH2AT%fpgO,<h$k(22,=Gk!ri?>HhNfIC$L\dQ#<K[i`5RMAO]C(>1^++pjFRj)KS;3'=]Z4UBIlhDp8Xgpm(]PJ/EpJ_'%/Ndc+<H))20Z-"4[cFVkp%*@fGoTI"IG<P8HTad+ONC6+JG5N*F,'$O&i&Y#a2f`4oej)_T(pASF]]nqV4LERd<$kG3j)l'#g/r[&2BjRoBm\oM4=5uVN`8(15S-5a3(08N_)b.M21D6^2ZoT*75p%SGn<KN\+'(+n-0`XTr'p&9uj;cmE++R,@jH9L<A?rJf]X"Ib0d#K-hN2$68\WAZ&\$#%?fc<'.jWI$45^8!K<_KsLWafSG]`:fHnAUYmf,[YL'5A[tiSdPO.<:KTt!l04cI2IC5?_^tJo_4\joN6iI@9'9C%B=O/QJ/F_8f,YYkd#]hr=LXp-mcsWARVHNc&^G%'ZMlOV_juu\VP'9lQ1Ka*9@ieZ*_A`2RYWD9_k:,f5+SLTS\1EXnfZ.SNt2iPZ&l%M2CD#L,Qke"!=$nTdhHf>Q@*30coOFb+>fH\T.o\pS=5rL7r8b.MI"Xm$.cY*RQl_PdE&_Gc_<u+G35oZrAht.D7)UPo-0\q>hJ-iLG1Bf?on"M:8ZP5+<b(l<OpT-L_[)WSguTVo%>uUO<:)Y?![l+$H?9oR1b63+`:D_9`Cc6p'%^UGgo>*R!a>r38cIfQ+g(7LSmt"<YJ06UcU/3/]t3GprHiJ;Q,92)[6l:FW)B94N@<,Y_hC"aAYmmkKTc+s*X^b\YrZ/P#Lc+c^chJOH>+q)O'LYRk#PF'^Hkl4])W'NKglS!OQhUD#s@IOBdu#YV?3T.Gg%3Y?oNR@:n'eFc`in6m_]ZUcqLL+s=CH'YLp*%j7Zlj+_c)edjW\;!<Y_jf$52L&kbFLk'T?q,)0SPbb=lWMK]g<Dm4\`oE((^!ob\ZYI'cmuX?J5oL?JQr[0Y,#7(g)ZAD)f[j&CVZ&MtD0Q5UPNP6kePqGu3@TS7bWQHWkCJBu.j.ebK>R[L*JtnRGL5r9rW3<+V4jStlNnKWQQQjZ'/YP.5pMauIiq:\8mr1`*tWJNK=J9AFo/Ct@*'l(:Q'+\XV4[3W=1U(=/J6m:d9+e:$S1,9&KHKjD_jo`1.j"`q,BX`4Dt:]_um1;3uVAVk0X()H[78U1smX0%3=^Da-@$XsTeub_*3W4cs]jXf=;B!r,HI"5D'7e"Q&WAc;:Y/t>etH7DqNlG=qWVlU)h)%^h%>:LEcM(E^ba0fqI$<*5QrV;N>/AFs*'F3qX%-,n*#Pu<;X21aWM0M-@`!<TJ@j:`OIl37%d>G!1[A.$r_s6)j3jL<fo/X^3`p>rY4c1*&gKSBdb9FG;a7JHI%76TL<i\m>7s*BF5&@BiWFd0F8itSAp?,Xb36fr1.n#/<kh!`_6!'TZ++1B"8*hAHq*7T0*5mfH0p#Uo%!4q;T)8.r(T,;DOB;6%gif#T;^hD\Yan?MW9C"na7tU2<.u[]S"8;EVY6..jX_@G<frC/NBeYgN<>F2C3:3%^b'Z)p-s78KiOUZKt;JVctbNk.Yjd6&:5KUD-Pus_!f>1&%3Rda;>.<)5b(tYUdf1a)Ed"cb,nXn)e)tCarC;#l&7ErG54n\"+dWO#E3<e'^*$:c)hNZ(@AO#!cZ6TN"!FpSn9)*;"76`[<r06>lo23PGq38/U$#-prMAM'%2I<7m>uj:L_e&SRkX2h)4hUk!V&;QX9Ah,mKO?e"=3'o8qoN.?#0WqlX9k8aJ6;d-KHs$=7,&._:m_l=M2RSMdMFJPldbi.7H5)Om4qltot4?$6HXQ'cI0/cmGS6f[skZMb2Bp`./qR!KUs3Ci2@[$K_`Rg"GL$ho[f2^<`CF#sZ#i`8l#V^9j'sB_%2BSl.q^LbE78RTY3orl7fGsd(mj"K"X=C\)Z8K[NU?\apHj::2l:@0rHUgBn!b5Lp!O8Pn;FOo\M19Lo:]p4RWJN4'h$"[D/&u:?e"2sF"R3CjYDsIkh7]dAZ#"ZSdu]"qdaABO+Ee/","N&<AYa`eorY61D67QrQuZZ_W&mX5\l'7nDqXT^bCF<b<'\fK4mf%j/d:UX%K"V:R3#&J-g_M75Vki1!$Dof3WPnK$XsT:L@d:1ct(CS.Y"+`f98:%-CbIL,o;ASLm2QXT>ZoWij-M"KD1Z(fH8f;#=q.-FbDEPDh*!u=4ni*OEmO&6]7o;![QV1+D*8lH.#DV2S,9h!51*?^m_S=84-HPqMG`&YRa_Id#tSg"%.Ai<GP7LV?c_sK<<bH?uQg[o[$oC4'L62e$r:Ed[iMR*8<lSl3)Vh4fGfKMnhUh]c.VDCq2fie9TPSCr`o(!d@X51j>O)]S9eq)+jiX<VpmFB<4C?_(G"b.S(@/].mAj]@i>^'!]0<^K^N-'t@;_mG?\_cPjmChr;ltB=Ut,e#o>6@(\+O&'?t%le8:jG`W#P2phC/:5RjWJ0Jm0/ur?%3s.`0846&'pC39olHVDZL.Yek;L3-o)qlMh\GDbH/Zm):d1#u=A1g>J<?MY&lIKN4Vm0l:[&U,bXB#5^q'Z\-ru&ZsB;^`<e'Ef0ek`m`o">c2dasaOC@9R5@F#"TU8SQC/i.Xjmhq=3QIO`=B<aXc^dme@UD#DXl*odD8lCn>`^>A<L(G1_F_q$'kmIPXj9>V6A#eHWF5H)b8_ak;eNs\^0$F]^m\bTP^[,p_[hHD['W(5g(Bu<_"%7TD%d*;NU+sML%W%$!,Y;7,d"K(d1^up/0dpT=:eFYV.WuB;92&WXs1_1RC#&X9cu3n#3&(Q@RD+#M)7\H'#aK]D>*>RDE8`=T@*(*GQ6bTYWec8s*G60Jia_Gsq?t+rVVfC;)u]#06;196']SmSCgRDIR9k:eQAJa?jV]lZ%Xr!YKbgU=`T+\aT7J?#k1).H3S'45DS-qb!H35\=u.K?]^7GHg;QUA8lXfrXtA6ET&3eULs\.!-OkqJ5JGLUZUj^tDeN?dgtsRGR@jQLR`2Q%M8pMq5O3]k4:6--ku4u/qV1hup_7.CXDU6q!gSatIY<%B]?O0:'L<XLhP6(U"ahlU]glB+>\!=3Xq]qB';[gdf=C^S-^hct:D?P$i8r%P"lB^9[[ns1>^_tPbT((f=G&fG8)]087sRq.HLHIhrcpIXku86BNs*-BQfi;/AN8kYj]qNJhUr8"O7U,oM:U^MYR&*gAj.,,S(2Od.K(`CeTsF:?IM+KchPFe(gg,u:?)),]:\<\m])NLCe]"G7"2#_o:';!PcDW^0,ah*pa?@-LB[!'kR[Zrf?KULq+URkr?QAFRsf!4lQSmj`U20[)l&DBdGbXNEg#<?pgc!1]65CYPDM6qdLK7=aMPn:R(lR%fE=3_R6&iAn#!:'?PN!W;*nRl\HrqXF'P;")u]#VRH3T?M$EtXTC86RMg>3Nho]&fX%Y(BlTerb'bmJ,p']K5S"&<4^KH6)<D4Xf\#2Y3UafS].m[7KS%mjnh^neiR@9Hkf.U%r&H7.&#f2nU^22SK@UD_gILKKp@QcG>'V8i$Wk$-0c[PtP#R**~> -endstream -endobj -162 0 obj -<< /Type /Page -/Parent 1 0 R -/MediaBox [ 0 0 612 792 ] -/Resources 3 0 R -/Contents 161 0 R -/Annots 163 0 R ->> -endobj -163 0 obj -[ -164 0 R -165 0 R -166 0 R -167 0 R -168 0 R -169 0 R -170 0 R -171 0 R -] -endobj -164 0 obj -<< /Type /Annot -/Subtype /Link -/Rect [ 540.112 504.0 566.782 494.0 ] -/C [ 0 0 0 ] -/Border [ 0 0 0 ] -/A 89 0 R -/H /I ->> -endobj -165 0 obj -<< /Type /Annot -/Subtype /Link -/Rect [ 94.8 493.0 251.19 483.0 ] -/C [ 0 0 0 ] -/Border [ 0 0 0 ] -/A 89 0 R -/H /I ->> -endobj -166 0 obj -<< /Type /Annot -/Subtype /Link -/Rect [ 109.8 452.0 186.74 442.0 ] -/C [ 0 0 0 ] -/Border [ 0 0 0 ] -/A 91 0 R -/H /I ->> -endobj -167 0 obj -<< /Type /Annot -/Subtype /Link -/Rect [ 109.8 431.0 159.8 421.0 ] -/C [ 0 0 0 ] -/Border [ 0 0 0 ] -/A 85 0 R -/H /I ->> -endobj -168 0 obj -<< /Type /Annot -/Subtype /Link -/Rect [ 109.8 410.0 289.53 400.0 ] -/C [ 0 0 0 ] -/Border [ 0 0 0 ] -/A 89 0 R -/H /I ->> -endobj -169 0 obj -<< /Type /Annot -/Subtype /Link -/Rect [ 109.8 389.0 154.22 379.0 ] -/C [ 0 0 0 ] -/Border [ 0 0 0 ] -/A 93 0 R -/H /I ->> -endobj -170 0 obj -<< /Type /Annot -/Subtype /Link -/Rect [ 272.84 198.561 341.43 188.561 ] -/C [ 0 0 0 ] -/Border [ 0 0 0 ] -/A 87 0 R -/H /I ->> -endobj -171 0 obj -<< /Type /Annot -/Subtype /Link -/Rect [ 324.21 144.235 400.59 134.235 ] -/C [ 0 0 0 ] -/Border [ 0 0 0 ] -/A 27 0 R -/H /I ->> -endobj -172 0 obj -<< /Length 2556 /Filter [ /ASCII85Decode /FlateDecode ] - >> -stream -Gb!#^l]7OT(B;*uKsdOr]AA*a!4J(j9%:4_FL,Zp=&i7%LkW*.@l"hgDK`5Os*f`YiQN,C\!<sC;.S]IO#cBIT&e/e_YSF>_)ASHbOpQPfj*Hl/cX`8`\TH@GW%iDB<p;gI_CVjK)7"C@M)mADI'k"\gk..r\N`0='$!*7V$Z?id11MAGK!k`HKF,Aa7PIRa5cHn[^kJ5<VbImJ*[rLdI4<6(I$,ObeUeeb/4=;sV3u1T<\%"-p'$7A?R&`L]^_aeiL@WUE\P]H^]en4Xat,7Y>oShu@h!a5sOI$D)o?+q*:;T/(P!De.r:1PB7\B%\cYIk.Hi]IH*'KM.S+1Ld#S()DE7^4F3G4K"S;Qn$&8F_@N6W3Ga'Y04jo-.?h6?*!KHMOlD]Xms>]]+)6Y8+;V\U2^WLJft([@E^*alh_eD%K%]]Q'n_3R)Qf&B6:'Oqd2Q(E!bW*I&",[2C.u0S1R8F>X09:dWs5'4FREG"HM>h7a8[>C:/3Jmqe+m*MMBlHC-?7sF'cC0uJHI?*M/aE'Iugbs="-#bb)dBUAK,[h:C,TjFjj%:QS/l;Y_SF/1`C;R_"IYlZ3G?dRQgAU[.OAlP*GTTPG-J#K>?l'l-MY*>R\<5G2`++L]<^G;TF64UW9i"!%l3MRL4Z&>=56ftIa&rn&q-L#"`!K8(Vo?0*WIm_T9M)M^bBtSd^.`:,+oOCjpG+192,4%l_A.WH>V%A,VR80X7>%peQU;`\4bL]U&320Mj)l>.>J[(MBZ;f>^e^BNCH*jUO')`MaQZ3ggP`r"5\S%C^Ea\RF]l%M0t#^[0b+M_Q(=-1o+KSik-QRG=d:PtS=m?:P\/nuNd0DD.B@+UNIM9.kmff]70L=FEeR^0ms0r)n"2R!]8Ron+#:+CK)K#LY<CTefo$9/O19!BFsZ`go@CC;1$piLG?"$u1]jX_)MH+^3O^jmpHmr[@ZcO1ro08'lqao\<n]S$"cjN8fX3SW#mt->EQ0hel*pS>C'5U/8[(J\+hC,fYt_07!Qtg8IL<B-=hKCR8IspFJ7N4(D6cT6eG)&t@T]LUOFXe!OH!7DibCRrP7]4j:9Ug=Ort>s&'p)Q8;V3<)!(CIUpJ2[,gjg*%5=&V33aO'4^u+Mq03ccAJr>_4s@UBZG>;Zg[:gFrBnEAI-)&9VC>d`=4^:F9_qC_Wt@@Vk`hqMCs9*()9<.r]lSM%Q&*IeF4L-`iD,&u(CU%WYcH3tC+K^kUJ%tq6Os%skEh)+\@6&6@Iq47<fLtp]pX+5FY+S+)m1g1ZG,?d".(K$Q.$A]/o9Ji_A*QgrPrel436g6j+WR@.3%cFAr[g1Da-;(hH75',:I**VL^0j;ho%aLJUP)%e9hpBQGW;Sj1uu@p#dP(?B76q`%4-c*lh;_/kap_X]>j?.=!/L6LfX)7gqH0Q_GRChH''64T^-2GR^;?*usg3%grT4Gag6N'<\.(V/qo;Ya(%FTPt,n;q3dfjcE938I./;$;!QLG^7VKOr7GGF0qm?K:cXDU/ZcW-0:=CJ<&'i`0uP>`G;u>h<DkZo2ZcNHaF,[<Zk%6p&/pHD+XTlop.*%oD':'\^R&IgJJZ&(qYMJoM*lo/pq!;qZcH4bQV^.g*ZoOU.T>J)0VaT<aFTj0K#R;9GED3K$-Lbq.:#"_U*2CjV_]^<.5[O94$l]iH8JAW4MY"H:i,Am$_3^ia?&rI2i<h^bVsUIn"7f1l_-Z9ul5cUuoR/Ig(1Vni%jXfFm)n$OpbOeoV*LLpfg`VDPiiq'T]`0SN<$(0__g^=8ZJ^T@rL\Lb`L1RUB\>-`-3tXl0\^9ih/"BPi+HO^GrMVJijk5lR.*NdQb8FhG<6ju,Ad4XX9+cU[1LBVdqSdN*b>_cNUT<fbqnd_R<olOor:9NPB5nbjGPokg7:`#bpN*@V%[*Ga'!UOBd`0[T$[6`kGYq<F[T_3&iB534]hKRQ@2[J0Z[\=m-Y<M#f_#fN7d$Z'0@ID:G4S5kJfWi?3aS.eU+Y>Q>2Iui_RAQ5P8bCg[61e(A*+r<m@ADpAS>pc:)8V$0WW"&CUt6CJ_l'I^n?f`6#R+DpH$Q.+<8VOZ5n)a@ubm&4$CdP#k!@$X))2LGR+1GL'PN<2Fo_u63Vn&,L*CZkZ^R^%qW@9Gan+/m;GJ1'n^qfOGolpGjT:\]'Qg29uUQ,\CK.),.8Qe+`CcWiE6O$9U0rD[r8Wg"r(bu>hc]1H?K2L(1#-EO[i+I?.U@+%e?S'`k&K/I=u=<G8?+K%nlqlf?:Z&o)&0"r==,OgQ*F@HlT.4P2Ge(BpCc?'/QT?'c-`g:H%\o`N)47RsK2ZKGiD1bZ57l%N:<$B<AHV-7Ufd=pih<:(c<#2d*5CYBGoq&S,&B!&NH3Jb\KCTjmmTEi_38?P$FB.$=h,%IJ;6n=a(pEtKg4aj[Rk1%qbnf"OWq1fE#+N#AVj*H_h$+3S8mDK7cK]j4tB;>k]t.e#TUOY^F;NS)18T/&T5?i50=B%]77&UDZa$/Um-m5T7%.GK=D9r[`i]<3W;\VTqdBu+Uaq4'L%2-ak9kPsu?#.4~> -endstream -endobj -173 0 obj -<< /Type /Page -/Parent 1 0 R -/MediaBox [ 0 0 612 792 ] -/Resources 3 0 R -/Contents 172 0 R -/Annots 174 0 R ->> -endobj -174 0 obj -[ -175 0 R -176 0 R -] -endobj -175 0 obj -<< /Type /Annot -/Subtype /Link -/Rect [ 340.33 492.08 418.94 482.08 ] -/C [ 0 0 0 ] -/Border [ 0 0 0 ] -/A 41 0 R -/H /I ->> -endobj -176 0 obj -<< /Type /Annot -/Subtype /Link -/Rect [ 340.33 263.74 444.21 253.74 ] -/C [ 0 0 0 ] -/Border [ 0 0 0 ] -/A 51 0 R -/H /I ->> -endobj -177 0 obj -<< /Length 2726 /Filter [ /ASCII85Decode /FlateDecode ] - >> -stream -GasaqlYkjm&c_:6@W<Jn+-;c\IV]*#GP,7)!ue!*k!RN1#?p,5g!_Gcjh8oGh[rFo7TupB?GPKXaEd\q3#qMfroWXDkAEE6EB!d4NOsJInMW#t]T)*N::a"ZhatK*^=rMJp?p4Mh.Z\gQ!61l]@k3lYjBr#GCdAI?0$CChnS"FGI.;Pd^)O?6Eoc;Bk.?jWn?_0VH52*qsSN0TC^B&9(C-Joa,q-YD_siPM0F)]1s!W<,ib-hDbk40Zo@6+!c>NUgQ&_k9Z.\dUcQ@/G"9;>?SE-P6='oiTBj*.6_6(S3+]j8T]'*KU*ThR?RI_M4\N/S"e5oBXI8"qmYD@ppZ8HE?mbrAQ;t*N]I_4iMDhCr[76)Q<2:gHmeXT_Ym?4N^G2HgceRL%'-TD(ojqAO)unAB2K)GNZ<4Z.85/QXK"\eFC!`JlZduVU;m.NC"tpT#s#kuK<1J*#9c0_UppPA%SZ(00[0V6#&`QkUE,YnG$%d_m6JsRF[ucneVd=t#]=U/&7:Qmd^bU%>aI?)lr.9:XJ4o\erS(45BHW@E[k+^OXci*mmp+NYEtt6KEdD1;i"lt^;*24l:,2SZ_D.?WK*]?.R15-k'p_g;'K09q%9S=Els'id/.>1;8HKM8Q8@;-k:hHOdnB'U$lUJng"oH#%f?@FA<V]8_lD-mK5EbgF@>.Y[c>3'r\UPXdLGI`b?HR)%PQ>c@PYj&ih`1RpdZ5%C/`!@DFZErsBSW7#Q3ma[_YH6)p3E+kGmW*QQ[A'iQ7H[VHG.=c*c)A,iRZ"$7^=eW;h+Cig(UOR]Q9*$d,mL<+]j!H#,]$ilb)m/"/-U`q]jLg4[o<.u<5eli`ume.<p\#r4:1cWe=DgTh%D;_NC:REJbbWj@DoTR(1@9j6*p]3.^cAc\^5Dc[Nc>4fqXS9f-r'JsK?Xt%4Og`5dE+$GJqFq_C>`^\j+i516d<BYT[nrHuIZ+gn`PQT!ptj)D0,tRZ3R)TcM=E8Ig<.'8:XgZ0E0P1?ImYI=K/C]4OSk/G8@,W3Vl=YuQ4W,9"_=DN3"]b1RS(lDbkhbm*mZhFPs\N>P1]7?*8Ybi*?1qnIj4>h,Hls(U&Ga20i:gV9c(/<;B-iNU'@%9\A&)(d-%TK.\u4P+d4s"\OT,F8'Zt8hK0$hZ3R<LkHa?`/YK/cGC)TD#n>C<>h-J3dd9&E3I?5#)ZfT$f,RYik>)d91pltXDuLlpg$eQn%c(gP?ftI.?,AAUUN<g$KL%[[_OgTU_DBk-PMXp1S0\qkC0'l-AbffsA(,O7\!rUDo?[<1Q)/_i9V*%Y@Ss"'c:L"-T6W#CP.6CJ:KlNuB;RosOln"@b.D((ITE3&GE]QsqQ)u,Nbs]te<)2UCur'hW:R;J3&2?LC=C<:H-*Wm#LkM&!j9a8F=*Qi40_c@;#P77mT,J>BM[B`<aWt#/C;WMD]t_R`3Y*?GL3oA%:4d?p_ioIn/IKG$V%3+7BeNUla.sS[TepZ9O+(^K$1=/iptUk'mt-;#0BL7(-/@R(m<&fhsI;!NrCZP>XdbiJQnOeNaI&8R;PX1jad(rfd^hEW-crlAOHK>_""u"Og(aI2$TLEkQf,Qe+.H_E[L,B8nOARRTmBM:JrV>I0HmCFE@/%VaKW704WasAkmP%c_1R[J!q9N-5m-r-XRi%7#8Ac&.Vpg3/G.":(aAJ*b;o$)pXjfW:/n0cWmu92@*jhB!IBf=0u7Zpr$qX9h?QGf%Z]BN:h'LLe,iOjJ"\9oZ!Y5(%fjum4BIeTO&t%&N.6l%*ou/ls2_FI+[?STc]TE=uUGa."Ru3"j&B=]97(B2ugI7^RraZ2OX#Y=e_hh?L52lg<9incMt>P>.pL&U@uCK^r23CF2Q?qocbdQXpQ1^qEa=Ud6d3Ua5lf"-.]*sYfrhT0j?s["N*ir5<(_@5DgFiim),lo.HB(-1;Wd/r&m!*"9$i,+U&enSmUS8:-a!:)]2EYVSk[GGTPu3/dHufXnTS4]a#[gf_YCr.N#'Tf-2PSAfEPr`/ko@e#()+eb6JUmU")*:DM@J`0\5Uu9R0)S'.6;U.hcQ?Sj'2Ye0P>-%_`bbcW[nNs>D`77u7Z1d/5i_<P04.gYVN&u!YI_#aOV!_6%"/9Z>D@=ju-]9iIf<l2<I9TOS$+^eEmjrN^n'(IsAIf3V?342lll2T<-b^(mQ[)=;'55dZ?T;;eM/VuIbo4O!p/QoSU=S09irhuF^#PP9_r9+(Qq8;9f;f9?Y)m<,f-IcX8L!Ts>Q2"AU.MJ%3]<gbc*D0>N2'_AU8(O"^-H?-qqGoVKu7o3jC.m_I-njjLi3DBA^'7C+M$_5,n?uQ*h)TKTME()$`Y!V>n<46/0r($G1J0@$?\gmmAuC(^?SGM_:B*1e%Sso-JJ/=L+#_A[Zp#rm$dVB6kS-h;:l(=Wh0sk4l9(];cU8]0oT#[gd1LDcH/RtK/_gDF`TlA-b(1D_u&-V^uha<(PZVYq">1pF^<TXi?RDR.;Y'#4SupCD92lY]nAh(T<n:S+e*FAY`Lk-^F\LfNMFQ3?s%J$#gfi.e3BY0*@oK?OOE;uc$*jUVLrlNmm!8#g9$k*ObLPm[S"THo2JYprmpXV$'4KNq_OQG)=.s83m.h"h\QbHTAFDo)iVH3f)Y#J)p$>OVhNij\gs]'"e`GY,b[.2R?dJd<:.T4.#hVHlAVE_5?nhliL'DQLHG(,AE[HR(Bk=f9KJ!'Po?BerrX!o1l2~> -endstream -endobj -178 0 obj -<< /Type /Page -/Parent 1 0 R -/MediaBox [ 0 0 612 792 ] -/Resources 3 0 R -/Contents 177 0 R -/Annots 179 0 R ->> -endobj -179 0 obj -[ -180 0 R -182 0 R -184 0 R -185 0 R -186 0 R -187 0 R -188 0 R -189 0 R -190 0 R -191 0 R -192 0 R -193 0 R -] -endobj -180 0 obj -<< /Type /Annot -/Subtype /Link -/Rect [ 94.8 606.655 144.24 596.655 ] -/C [ 0 0 0 ] -/Border [ 0 0 0 ] -/A 181 0 R -/H /I ->> -endobj -182 0 obj -<< /Type /Annot -/Subtype /Link -/Rect [ 155.9 606.655 222.83 596.655 ] -/C [ 0 0 0 ] -/Border [ 0 0 0 ] -/A 183 0 R -/H /I ->> -endobj -184 0 obj -<< /Type /Annot -/Subtype /Link -/Rect [ 265.798 483.456 364.398 473.456 ] -/C [ 0 0 0 ] -/Border [ 0 0 0 ] -/A << /URI (http://emr.cs.iit.edu/home/reingold/calendar-book/second-edition) -/S /URI >> -/H /I ->> -endobj -185 0 obj -<< /Type /Annot -/Subtype /Link -/Rect [ 135.422 386.456 223.192 376.456 ] -/C [ 0 0 0 ] -/Border [ 0 0 0 ] -/A 29 0 R -/H /I ->> -endobj -186 0 obj -<< /Type /Annot -/Subtype /Link -/Rect [ 504.424 375.456 576.064 365.456 ] -/C [ 0 0 0 ] -/Border [ 0 0 0 ] -/A 37 0 R -/H /I ->> -endobj -187 0 obj -<< /Type /Annot -/Subtype /Link -/Rect [ 94.8 364.456 151.74 354.456 ] -/C [ 0 0 0 ] -/Border [ 0 0 0 ] -/A 37 0 R -/H /I ->> -endobj -188 0 obj -<< /Type /Annot -/Subtype /Link -/Rect [ 96.8 279.697 142.07 269.697 ] -/C [ 0 0 0 ] -/Border [ 0 0 0 ] -/A 107 0 R -/H /I ->> -endobj -189 0 obj -<< /Type /Annot -/Subtype /Link -/Rect [ 96.8 268.697 202.04 258.697 ] -/C [ 0 0 0 ] -/Border [ 0 0 0 ] -/A 109 0 R -/H /I ->> -endobj -190 0 obj -<< /Type /Annot -/Subtype /Link -/Rect [ 96.8 233.447 159.57 223.447 ] -/C [ 0 0 0 ] -/Border [ 0 0 0 ] -/A 105 0 R -/H /I ->> -endobj -191 0 obj -<< /Type /Annot -/Subtype /Link -/Rect [ 96.8 198.197 196.79 188.197 ] -/C [ 0 0 0 ] -/Border [ 0 0 0 ] -/A 115 0 R -/H /I ->> -endobj -192 0 obj -<< /Type /Annot -/Subtype /Link -/Rect [ 96.8 162.947 151.25 152.947 ] -/C [ 0 0 0 ] -/Border [ 0 0 0 ] -/A 119 0 R -/H /I ->> -endobj -193 0 obj -<< /Type /Annot -/Subtype /Link -/Rect [ 96.8 114.697 154.86 104.697 ] -/C [ 0 0 0 ] -/Border [ 0 0 0 ] -/A 117 0 R -/H /I ->> -endobj -194 0 obj -<< /Length 2502 /Filter [ /ASCII85Decode /FlateDecode ] - >> -stream -GatU5>ArT2%Xua-(pjgC"Ytreq3n#_fZbc,(?ZrVf@uWe0i2]2N-]l>qNB\,f9_Y39D6HKjrEGNUe-H>5)RkNI<'LV93,qdE3r5\B?k7Ak,o^!F&u[uU/gFP-jolP;QP=3s$0f^G4im*q&-R;Q0TP_-k-Ng#7<bU;+TJKiFCQl<S!uuYKF>T28KDPcIZjFre]$]eb3q5<S=bPF5!CBB'nl`d+"u%k2lSl<5-YYoY5S*GA53gVQ-+SduURg%(DMEgGDuoX)g/0MLB-EVq1T4<n"M7cLUe[&;Hq66Eb=>;C8Uc%h=WS6f.(Dq#LgICcf-C:7QRM-V?*R0H%9Zimi=Ce#(OR6WH#2e^_BGql8ec]Xl62TSDpjODR]Ra-mgOIPN1lQIS'c)D\q)f#6)+Z**dX/IG$%dbKn[?LM#'$-k1>p7IeC7:geiMkY"=etWEhN(K`S\[3/4-s3$AASP'+J4c,A-I(:4ea3m9_csh".b9umH1f-!RtgCTJsD)-!-9G`<Y0+bfRn.*-52[d9)_n)DPFG=>cnr]<LIP/L,:R4]ZZ["0.th$!B\u1#5V7p7,$16+,47'@o8Htb,X,2Z<UaMG1TDGS!rC)=E8IG>%UE21`+MV%u!l[10&)F"3iNXCe=/,="!+)^j6<b.e&MZ#^MHji+K(3OHJ0PkQZ3r\2&;N-:=[V_6[u)o#s84^V,;]_/,a(&jcf'^DRI":e/k-HXnS_nan[7N!WV4@hI=o8`/>OZTY@pV7a/^4`YYm+*l[c1cNc=>baj]OomY'\bF0u!n<q6I:qPim3!lB5r/Y3Fu`RIc3C\.'pZE88,UfKJ\<^e4&+hD2F"'=T!P+&N6'dKEST3okf<;l*W$EUNOrrp=`Td-\Ya[5(5eniflT)e1uj_\I(2'=jZM,t099D>aeh]ARVEA_pr:Rd@1Vcd9cP[n)#JZ)0N)$t1V?RT+c/.jPRbHr`eQC=9O2D7RIqbp=mS-9qNa8E>btcZK;'?uQLk88^.gYB@eS?Rep=<dPN6Yhk#H&MZEG]=C39)/XQGS@mI>pr<7>G\=&mjiX514]jkfKcecsMClKV#Vd$7r/1?5@A?hu$)qISQ5$&kSYo)k=LY=L/2LfVt;I;5mQGY_i`.g):GZ8"ScUICVm=.-&qCplLfI3l'+`;iQ%nK#nq:"R7GFit0Q".Z\E*fLV8e'A%^Y^1.QE/;39V@j+pQ#Fetceg934l\kBWp/=DN<?jN6i%9LY))^S%AUU7M=&ce(W7^/Q-/j]Up(=K\at$Nc!:Z8[j#CMA&$JCF>t>Vdjg]N-W^)56kQ.P24?YiSO)d=l_Nsb+QKuS97**j8<rN@?\*$iCFA)*e]bdZpp4biPIR2K+jU=f3*u(8oRS;'Dj%HAj=@I$#0Tm)Xh<!]>L4Hn2-]InIQ;bI9I'p4O5M$$7>UE-cmn8b5/Q2(W_t;mTA?'r=I:3Rj1EI6K1NLcFHFH1Cl/+Yfur.>'W0k19OK,eZ-(h!-^Z*lc8.qG:aD0ar(rasYthD3((%fDdPUcN2/1<r[ZaO28%2j4)[=@iPhhh4ZoI47`+GW!*(>D25&1a"J\.;W6#n,aQK"35o3LF2aqXsUc+*iOp5.2n66fS&$5h"tF(Rn62K'BEJhb,n4X%8CW_*a8E_PWjLL"D'3!=t(J*_4\k=FpIRBg@q1$G=K)QZ>K^7![Wc%bF0=,?FmMm[aq']Kr-Fj,iD+C@8\e9V[i17Go@q_u`_O7K^u1jAYQ8Ye:/l0RC8et*6T:b>#9qqe6,iCjtH\>)UZZ!)dhRcnC<5t^k3JQQk+LY>bm*jPl96e2I';oC0W%RCpNOO]022I]4p(I-C>_K@bTIor^#87i_5<<WX(>ZE4ECK4(Y#t(2(h+8p;SQi$+*+BUDYH8HX7e.HrF`K=1*TPp8p;-Qb@oTX'4SB)=!diq_NJML%hlZs_b-rlXQ9353q@*aTL$_IKeTA9c6_,qf1lmR*(Vaj4YKf:aL#)PFeNY,^$'!!$U3O6/-#YeZ/e%/afX0Nq(i!pCX.Wh/j++H-K1EaN/S#ArBDFCbE+=KIB+Y+iZi_2E#/X%u+t2sIqKO5+HnX]="GMtDT56nV[o>l3BI+cL?FW54br!Ct2LJ;En<j`81Hg<NZ@M12b\eX'OBE2Y2eEB4QYXHlRY[k!Z%W#d>^/-q?#\S?a,+J"]3P%3+spIahEdTW/Ui)3eYj<a03.9O<B^95^D%D79*S^!J'/Xo@\3KoY<7Fm)*OH46,'Be?aQoHqrHm3PHF\4W2J'X,qGj?paMqeh=p5o2r\K0bjLK)C3L`;h<[U>UgEHJ/eGd5>4g_eFai3o2r!ERIr;]=pY-3;\*lN\45!rthgJ+GrHt0ks!isgJ[>_b+.N:VgDbfSG;P[f`KB>bhEmks^),+_&KT%p&+`o5;"Qu>O!'(YQTtIBY@jbBIF!S<.seM_4^eF=(*e%aK,+k.@IN3&nVT]n+(<o7BbrE6%jK1DA)o=RLrU%M`k>AZg\D(mcCZc~> -endstream -endobj -195 0 obj -<< /Type /Page -/Parent 1 0 R -/MediaBox [ 0 0 612 792 ] -/Resources 3 0 R -/Contents 194 0 R -/Annots 196 0 R ->> -endobj -196 0 obj -[ -197 0 R -199 0 R -201 0 R -203 0 R -205 0 R -207 0 R -209 0 R -211 0 R -212 0 R -214 0 R -216 0 R -217 0 R -218 0 R -] -endobj -197 0 obj -<< /Type /Annot -/Subtype /Link -/Rect [ 94.8 699.561 144.24 689.561 ] -/C [ 0 0 0 ] -/Border [ 0 0 0 ] -/A 198 0 R -/H /I ->> -endobj -199 0 obj -<< /Type /Annot -/Subtype /Link -/Rect [ 158.82 699.561 187.69 689.561 ] -/C [ 0 0 0 ] -/Border [ 0 0 0 ] -/A 200 0 R -/H /I ->> -endobj -201 0 obj -<< /Type /Annot -/Subtype /Link -/Rect [ 202.27 699.561 253.94 689.561 ] -/C [ 0 0 0 ] -/Border [ 0 0 0 ] -/A 202 0 R -/H /I ->> -endobj -203 0 obj -<< /Type /Annot -/Subtype /Link -/Rect [ 268.52 699.561 356.3 689.561 ] -/C [ 0 0 0 ] -/Border [ 0 0 0 ] -/A 204 0 R -/H /I ->> -endobj -205 0 obj -<< /Type /Annot -/Subtype /Link -/Rect [ 373.8 699.561 461.02 689.561 ] -/C [ 0 0 0 ] -/Border [ 0 0 0 ] -/A 206 0 R -/H /I ->> -endobj -207 0 obj -<< /Type /Annot -/Subtype /Link -/Rect [ 478.52 699.561 519.06 689.561 ] -/C [ 0 0 0 ] -/Border [ 0 0 0 ] -/A 208 0 R -/H /I ->> -endobj -209 0 obj -<< /Type /Annot -/Subtype /Link -/Rect [ 533.64 699.561 576.14 689.561 ] -/C [ 0 0 0 ] -/Border [ 0 0 0 ] -/A 210 0 R -/H /I ->> -endobj -211 0 obj -<< /Type /Annot -/Subtype /Link -/Rect [ 94.8 688.561 119.25 678.561 ] -/C [ 0 0 0 ] -/Border [ 0 0 0 ] -/A 210 0 R -/H /I ->> -endobj -212 0 obj -<< /Type /Annot -/Subtype /Link -/Rect [ 130.91 688.561 170.34 678.561 ] -/C [ 0 0 0 ] -/Border [ 0 0 0 ] -/A 213 0 R -/H /I ->> -endobj -214 0 obj -<< /Type /Annot -/Subtype /Link -/Rect [ 182.0 688.561 260.9 678.561 ] -/C [ 0 0 0 ] -/Border [ 0 0 0 ] -/A 215 0 R -/H /I ->> -endobj -216 0 obj -<< /Type /Annot -/Subtype /Link -/Rect [ 142.01 619.362 250.31 609.362 ] -/C [ 0 0 0 ] -/Border [ 0 0 0 ] -/A 206 0 R -/H /I ->> -endobj -217 0 obj -<< /Type /Annot -/Subtype /Link -/Rect [ 279.48 619.362 331.41 609.362 ] -/C [ 0 0 0 ] -/Border [ 0 0 0 ] -/A 35 0 R -/H /I ->> -endobj -218 0 obj -<< /Type /Annot -/Subtype /Link -/Rect [ 353.35 619.362 470.27 609.362 ] -/C [ 0 0 0 ] -/Border [ 0 0 0 ] -/A 37 0 R -/H /I ->> -endobj -219 0 obj -<< /Length 1587 /Filter [ /ASCII85Decode /FlateDecode ] - >> -stream -Gatn&gMZ%0&;KZP'Z+0:^maE]O9GtJfhI%2/(VD6Mnl`c`+Wt`P1&1YkrY+Xd>H&%6Abb/7MuYj_f,OJY#_mj%Ef#I4BpXdE-=Gj)295r)3/g9YXXk?Cj!gJT3iDTW\0pQogQ<^8g0rUal[eYE>Uh5<gW^DrC-EM[e`&^ZC:aJKPeRt_[s^2isN\U(l>?<Zb+noZ`DWlP@]>D`!pF.La%Y;OK4HEd6uk=J^3r5";j!eM+gO!$u<a9N0oJlm5uiXaG<o+QT$B=(h$Y+^:)J(V&9p$eb7b@Z/5D'>r9RfMpdpBf^O'n_rtAo`i/Pm%J`#f[cRLfhA=4'gck,Q\5FQS?/.(t2M\3Nr%)Ga2.7n2Uog(;EkH.XB;B8h;Dla]2D19NVM72K&mN\:`7q;cD`t;hh;tIh/gC1*&kO,#s7/XLXm^!JJ77CL\7sogYSEVOGPU:uYcmZSaWm-\CK7Mp3rAeA?Cq)lqn@OK<`/;Ud[MocVHgWj]ZQ%/T@'>ledm\pk/I%iB^1c<?[@?69G[i5E)$8(KPGOV-8#CpOR0J=WOtHb?+$8RY\Po6P)9e9Mbi<6@"jgTT'gJZ4CEtiiPV0o#`Z!3O!1?<8qQ_p@VA#e?;i6d]W,\1_WPFT_A"2JP_dM^6ji.(_M1H.@agk9X25hKb>[g\QaO0ro5]"EAnSP_3iaLSR;k!9U->mt1,8%0N70,`6C]CMB&c<g'20Pmhh3S'N^N;2a6-iPEeC'LkbQUOrE*n9$;O@!"B't$9MPfY.,<6<3;b])adM;G,ga*!9MWk:*"Yi3S=SiMaiU5N0VdZlP=nGIdtA#d#WXq+IG1H9JSh/qb2d):+=u8dOLL2+@QMhLPESq%R+JF+gT@=>ne-Ci*cL#RH61N]:(/<r]\g4OEU_Q7/bhtVfk6hmbObQRpI;L'2d:iP`h/a#RAS9:k7NYMmgges^W#`]Wq*`U`iW"Qgq=%.&-kt@:OZLfSt>8\7,d_3o9_9i3CjTf_&3=F'0Dl^aKln%7(YX<TdAU_Aa:5pB>=q^D*cL9Gs:ZraieFX)^Z$BA1BMH[#XGQ2f;$jBC:`9<nH2Y1skIE@,S(b6H.9ZQ_=']1LqnLKE&U?k#GEG<D^o=2@*fY+QaRTL7$PG_P`dLE@jt,D3fC;.8!?h7Zt"Z-1<so.61B4;9m1HS199OlS1\F#9cU&go!:R=)p\c92T_=%-"(bRP8Z."*L3aPajK2UY;Pb?fq*lp'Tqj[T;.Ih34tSImbad+&kph.hM/H$4;Ch)s^@fQa<8Ajb[KB_P*<4B1A-:f5$8l;UBI8+`Z*-p7D'LlfRu)i7Lbdg5bXIIYYN2Ie%KE9E4`qnWPnJoGAooj!#fV'B_A.fL4IH4[l-VG5HY*1Dp[s!I?a@%KcL(fdIhGB)`qnI@6tZ5sRU?I0Uc\^iH`YUT\VD*[JUW[b&M51n8%W)3c6f:<@0f>2<5k3M&P@oTS6tWF5Et4%dKM"7c=`o_"W*"GR9sIKpK^ESLp3Ej\X$!=*NOMA(?;$V]n`]d`^_/`82ifCh+\X.lP-oGR@C]4rtAToVnB5R9!jD[u1pE"NWsa<mqZEW-'4UA*F~> -endstream -endobj -220 0 obj -<< /Type /Page -/Parent 1 0 R -/MediaBox [ 0 0 612 792 ] -/Resources 3 0 R -/Contents 219 0 R ->> -endobj -221 0 obj -<< /Length 1756 /Filter [ /ASCII85Decode /FlateDecode ] - >> -stream -Gatn(95iiK&:j6K'fm[,b_U0l7=,;`\%i<O$HD_GG(&;/8h-/FTbAr=8M).%.H=,fms#L;W!>S'd2c31G;c:&^c<_0VgmM?4YF_uh>R`.APLjZ6L<rgZ)oj_2FS7!U4)3(Cb6a9>(EOCYnE-$XEF8edG]81K:,.7?NkV,q4[816i_pQXNaOoZ%i(sH%B!ZZm_LBAjH63S=5@($OD^A3(KMtk>0n4tb8CmdW7=omAc"WNhmG4dfj-mb]tX71bu0CiXT,['E[g6d:gCW)<j.]jeB`7s*;T4tB3`ZkQ*1:lCk4M#J<7aC$JF`LU9=TW28A]6^^lhPP4]FC_^1r;1A*U!$2Q52.FAUJm:H+Ijb/[BJ*G^R<CON?[=qbR.6OP1cXkiJ'UJ*GsSK7g'i)5M31p1N!QG(*fZLIHdJM(`#7gQ>gEP!u+oU7M/[U?sNjS,+g%ZN0C4/8E+KH2:g:(]/BCXkM[OMf&dC\?JGBD@KLGQ[4MD/o9t(jZsUuMpECL(GE\[e9^$KY*MjB,RhfNk;^/miR@0Im\:DT-rmC$LBjJ\?6"0TWX^,c>$IY@=?P>GNg-?i2YZqdeYNnG_5*Ng:4I&OQUc"q$j@9;FK6reC8X*BZ!/;O&eTlSqC:iNjAHfj6C:R_\`P6L6Hl(pC;FmUbQUF5=@!?BcEl(!]@R!b2q1S4Nasc<Tmp;mF%HrePrZVF_AaB5!V')1TcQAQkk.;)r-Cn"b?[4"-0n:h@c7^!`mO2[o:1b*1;L)S0MWka(9Q/_2G+l>2JO8:AhSpe?[BqQ(DH:E(Ba0,"eBm\OU;ucll;uc5.a@Ral,dE:b0%_O;F"qbY5bV;8u_f%f\M)T69"N=*_5k8(^_&[D/[Pm_bUn4,,4#.7BDmWpg?q$q_"!/ZS/!)+'ZKD,F4U<>D&RmJL5>K%IPB%,N_WF]P%cNSS0S*Xi^7JAQOV9T6lI19rD>o-UAs7(H2F.a*fl1Zt#p3%nf$>=it!HHGuc/0p$;Y-F=(ci<9!dG8uLHP7]Gp:029Rb5RUhNB>mXGJ\B0'QJ'jccKU2d)+5/@K;b`?ERnJuY7fYKi>L:OnB2%'3:s<e"+W5XRs/)ZmqD0nhcf'`0)m&5NL@hHKDpKM]cfD=_h7D-CG4rB*YQ8X^@2.rd$`'Y/Q1Isb)V9Xs<,8!=/KK9]+D/'E*/h8EKl';3XnZ+FhE'Zi:,3jYETH6%4%2TPN]Z17/tZma^1jK"Q^^<4tiYUEF@2&RA+/nPAkPo#uZ&\*<N!2rM-!)HF/8!+$)nF\<)K!5r0/6&LW@.+BO=A0W_NM6Q'+fL0ZPOEm`&/?B</P>lrIOcjL+?$$pW!0B269+U7_SaMF.`S\Z"Omlj)[IVj_W2_?3DVV9=D8a5"r:kh&b@jbf3tBJoUV\/V=3h2_LaeTZpS#M>4=R((n,!TI#0."k4.6:@5o_[7V$=F5bR^MUIk7sD[sLgP$&MogkX'apW6iR@)3F0+!3YMS=DMkP-+F$K-`7CPa,T::4FKB**UnXULSrk^@^N2&1gYV2r=b`@+k#@,)J728\kgq5ITjt9V/u-^.V@\e)Q-GJPg,"BRAA-R.Hb1pLc_O-E22)6BLaQ``K2WN2^N[>cYtcpd0jo]7?VeER+$e`;(GIX]H36]7R=*(^Y(]DZl%o',0Fi'h`;!Sk:_cL#Q+Ffq7)Hom[p*EOc$oihDik*/DsB12))OK-%@8?_@qlc=V$.c<Zf&e@E]cQuJhIcuASs.(.2ucVHpiqK)~> -endstream -endobj -222 0 obj -<< /Type /Page -/Parent 1 0 R -/MediaBox [ 0 0 612 792 ] -/Resources 3 0 R -/Contents 221 0 R ->> -endobj -223 0 obj -<< /Length 1791 /Filter [ /ASCII85Decode /FlateDecode ] - >> -stream -Gau0E=`<%a&:XAW+S$c[ep:,4)5f-j';,AbTXA*`\e#]oA[<+CQ)#&ihfkBAQBZQ<oWV]0eD0Z?ljS$K](ieHq!/!.cPI`pdL1#MKZ=1R\;0$AY.X/@cPO'=3p(EW&/Gueod'sIPen5m:*Zm*2jAsK)%BFc4?j)`@20BlL]pPA%3]:fC[MSDrY0S[,ODP@'a*t[r"CaU2.HoL\@5)Ch\H`@Bc4TjHG=g-cQ,rOk4M"L#sj.9[4f:[`u(oaNPIVU4QZ+IN3h"W[5E;1WoV6f[FC8@;6o)Y1PniIW'l(T14f*#B?4gS8'&PWaSOldiFuEK;=)h3*:;>7U>5jO=o)6A/>?V0I.Ojm]JRs,ZEu##@1X,EBaquQ-ZN`i'+uB@/8A+4;<8rs$W'<l&BOS]\_?5H:hcmeND>s=>QDnQmE%D/X5Q4N63+4]AWJdn#F%)X$[F!nZa,S@J0L"r8@j3=<dQ<rYa-rb*-tr#%l[A=+c-Tu3AM]*/5NVf>peXR<XYGhCn6/T85m:^&/ZA'R:+NMX9%?69:l[EP&0a1@2DGuH5!tdLEU)^c%[AJFZ2C9Td;^,<4n4&RAk&i#5udd[Mhh?5m+YX`c4=_Gh=p3OkeH>o5Z&WdjY('q$2`g!Lqsg6t#BmQ?`B>BkTjl+UqiXZkB>EB;P^RBhK^H9,$^]9)Z:q&'7n<:JV(kSm<Fij,*I!e&)uCO?P#RUoj%VWlj[XS"_g2j!iCY9:[5>oiM\62KKPM6ZT8lVGT:/;!DS_D:_@FQ7oSEKkk11Vb(5NPL?grZsmgQA?L9YEaiq'gik.W"HqOU[*@W_@Z7KSWNTCana`OhFi"UjCY0%of@S?K/;sR:1^>MTkN0#@*)q#P.I-Ek<4"T^2\kFt'82ESm]`NN9?c@MNb?E;LmqnUQq'-[dp7?$R"RPa#,KiBA!VRBH'Q&cJ.VJY_OpL]%qQgJDVYOu-&UrP5`c:f"3"(<QrGmFDPWu>@2`uo5YF.LF'q06O3!")Tqrab*I;kO?m$7/).+@#>XOmB#r@$+jQPl:bT<%M#?40i/.W.FjO6/)0^/Z^S5F&MkB/l+JXSNp']nKUqkCo2$hH,X(U:Df?%;Hj<oB=)Gd%/ObT7:=gLDqUF5.V>b(_qfLS\&"50'kr[nMrqH$;2(^f-2fi-j1Oj$ErXnDa>'b14k=!]Z?^q=K>jlCeYUkNISO)3%EF\iI0rVF=^8($!O-VbuHb;%4de)0#7h7UV^!;?%+e.p[UadNp7/*#PO1%eXUrl7pJAd?`4<d2jp>/j24HbIGXUJs&_4X_077.9MZ,1f+N"J0'?_jSf$"+;m.5:=pK_*EU-aB,Q*>P'rY5>1q^P]@8N<Wb7S5%V1qpbWuGe^;X1j)43*:/?hB-*+?\]JSV'YFLJ@!d^^dt2=W([e8#Bb[+`_n$4Qs%bXMrkYD)*]V9;\XYP\3Zk(RB#PqM*HMNn2B^hOko^"._UdQkT.oFTXk$#R\_07/sSAX4.`TnWi0.&IZ4)BVT)Y>Z+O5f)8$bnS=s'jOHmAY(&%5a'M$o1Ve;Dk8+k]l?ffk8D,cOs-AMGP":`c83K,;7TB8VP02[L;Mb5C2"k[I,OsC9fR'[+]'(CfGKc/0`1@Ui?+b4`Rt-1(H@!#Obu%KAZhc'ZYgf+rLpQU[3dliDRD+Bl+nN1Jm7u6HIJTiE*9e3/ZAsdg?G&%fqJ!M6HA@>ci1H6Jr[FSZ'K;./%>JT"C"PKcj;.O$[PuQRrt337>^HJ\+M4Gc@AkI;83#]`1l>V/W;kiQU4'@Ot)H]^B(H"V+C~> -endstream -endobj -224 0 obj -<< /Type /Page -/Parent 1 0 R -/MediaBox [ 0 0 612 792 ] -/Resources 3 0 R -/Contents 223 0 R ->> -endobj -225 0 obj -<< /Length 2098 /Filter [ /ASCII85Decode /FlateDecode ] - >> -stream -Gatm=>Ar7S'RnB3d/)h12T*/*[OJGT/^Q[tf]'AO0GI/o4iCAJa_e@k^I.9Ub+rit6\.Ruc].+8r,`G?G'WV,H1CV4N]peq*2t@+#ndi21#`e"V_X>$07LNXlcQJg&V1R+6l7I_lB;o[+F9KTESa;_H=o'#Z%uq\+Mo%l(pQ&6ZPB9pUI:'"?@@VSJe=$/pI9^%)#fXGO]jI?7m'smUH`?L:V/[dIMr)%/O*C30WckA%8"?dhQ(G,Zc<n?JqLm`H*o7`O7fC&"fulU+18+.P,be`rd25)I)lgL2CT;ZN,Xs^Jgk.[R'TgKOL(b/R@>i9X%<sqnX,YW?'K9a"Ek%M/*5UCeH^)%^YPjlBSs5@Fd]/^b@n^G6ZFs;llPoonCm\.Xa@\,SP`,c;Ns.QIjs[\AZp.l#T"2;=?/E,=-hb@iV@7q<i3Oc!eHT^LY'[b@F9B?D,mOkratmBPQ]JI!!MCs2[?31GPt2220W-inpKW'Hj659_iq^Bffk_@f/uFgnkD;'pF`RhJ%.W/_d./g>)hdrJXVI.++JFjDk<sihn!Ut7HlF8H(Ago.X//>k4"sl?g!JU-EQl^Q]2-kEpR1>liO_1ZJS?a1"MI/`VhO]U%n,A[,qZ\Wb$b*,]k37QCMNqZX$G3dZn-FeW@i+b?+ZS1!r*tC]KCo+]W_->$G!L4*sFOVMe77DLop9O=?:lU1nDC)@YhngB[F%`$ging2($pZ)]RP1kK%#EC`Itn1eoSjSF0d`6p7:U_fU#2#:H#,"<j=;1IubAdZp?L&&Br^()8P6?1>I2'HJJj-E?R'c"a=rVkbaGZtuQfXL[Z*nCbQ=MLcqVD9Npqn3HI$H1ZKj;de!:/NQHoTC@Pf@LdCW0OX#?3e9`!A^JHbQF>0I#V=G'>T5d;#-,PQ\lTgk(csFD]&-?Ef^;gW9QXJE/]tTgq",QA:)[Qcg-!nPpRLmgH`@mZE3#3TAYo=qthiR7,-njSAK<C:r3:@UkrUl6o$,5)WB&Gi-8)e1Mk_F6XbCn!$ttGe3]S24?U?^I>"PV.=n]c!H"ssEO9`,Y;bGNCl9A;)[@!RrdHU22U4;qnk?:D4oN.2lVi!Cn48.qpi56.]TOQ?!I,_Sr4"ru]Z!IX,8*l)!H6s:fa8c**g9J4;,^[?61@;'0aLU<1Qf^eJ[d`IH$5i%#Zgi7\kL_`K>[Oii>S]lp,n!V#/YBH/L`[`;N,+M"LuP$Va5`#FB^^68O'ZI+sX;f%C1e/(kh9B9*9mb`(.Ed#mR+%g,&u[N$_.08D2R>rNP1]gE&@7f/.ZEGtCD>f@&qG'%92A%EAq_S9iBs_9u-sHD&T+Ht:,Wi<tP.a^_,Eh#3MAXWFDnk*CMGp34oM`HH]6ClH;'9%T2#@PBQCB/3A`qEhP!98dNWI'q)?K]O8f-LoHi;E/pADd?brMP9TE":u,PPNLHX,giL(C*ZTcFeOnrKTHkM>rp*&pFZr`;>BjAXq-o2FJ2N^,kc;EHQ!og8$?3QY`ILlp6eQob/F`6=Mr'^]KhW'R#+^San%,k8-05fCuMgtPIalHgYiOugFlD@TRSTW;llXG,/_XAT`$Q#91'WK8i(WL0+MX%CK'DZ_n"+s@!auP)*F4^"gM'Rc=gM7`G+c5J:tIKCQ]J*p^!KY8"lU[jS_o:,T[)T?d,naQ#Or[pRD((X'SP@Q>*k*CSTah^(gHb.R0.;Wm.GV!!+O7*;J3)G#N9(4k,o2q_Lndp8L:_^7\u.<PG'I4r)EG.p&c[iRY&D>e:f3!ae[/mnWbP]I_FFihf*W'qpFUf)PreWNs7qnlNb'e;ftHs58*2I>"(QoO#AlGsMM@<'@.Le!1UA[)p*KApPRSh*Vc??rnCEb#\5joc[HA/TUX=G$WGEF%^MbHHO^b12:*#&M1rQ9Y-%gaXoIkdN\>1!qtqIeVLO'Rj#liJR>$G`9<lo/Z:=Xa4o9A$4SnLp2iL(MWsV)dWl.&p$XB(8E)@jS?B!paa?JgBB0cPO&Db%IYPE:[\h?\1C)5Brkc7WH@FuCa^??E^Opf9<KIkJ`Q%cNYoQ!a(.D4JI:p9/m_h7p\26q9Tp'q@co+7l-2JRtA?bYYnS0To~> -endstream -endobj -226 0 obj -<< /Type /Page -/Parent 1 0 R -/MediaBox [ 0 0 612 792 ] -/Resources 3 0 R -/Contents 225 0 R -/Annots 227 0 R ->> -endobj -227 0 obj -[ -228 0 R -229 0 R -] -endobj -228 0 obj -<< /Type /Annot -/Subtype /Link -/Rect [ 563.898 665.38 582.778 655.38 ] -/C [ 0 0 0 ] -/Border [ 0 0 0 ] -/A 65 0 R -/H /I ->> -endobj -229 0 obj -<< /Type /Annot -/Subtype /Link -/Rect [ 332.0 654.38 398.11 644.38 ] -/C [ 0 0 0 ] -/Border [ 0 0 0 ] -/A 65 0 R -/H /I ->> -endobj -230 0 obj -<< /Length 1943 /Filter [ /ASCII85Decode /FlateDecode ] - >> -stream -GatU4=c_;q&:WMD+f#YA!\l95'"(.9CmkK@?AbJ+WsaPqdC)qWE[>uEs8*:KOd%0F5nP4n8&K7?cEZi(%j.)Js$$57mNH%1GbH3&m]k,/bk'dpY.X/>*tRgF53d,?&.:!(bVA+!Lm&&`Oo&62i=4tGF@m_kE\@\CKPACnI71tMb_D6VL*GIV?$m&Dlm(ClDQ=/toALebU-N(E5S3OQ8+3Y7T9lpLh]BJG^#`m"'rp^,+9k=Y5hkS`[s4.#MU;F<=2cL^:1]Tb,H.`u2c0`GJZ)F1I$;V"6!YYb0%8YdCG8G0'EjV>!6u1K7@hb0Ig&)sC.2T7Jemsnf8S6o^!3nD\id--jjF#.[)Wb#0T:Z%oYKN3^XAkH7fWk>CGh\L&nOa0g7HbfmHopsjlWehdT;^#8\-]7fk<6R0k17g`"Am6CA=uT@f\h!%Y%@<k=o[/Q.^S[\M'%`7G$rK(!^NDLatT7q4]bnC+f0A#gmSdQ?sWB!>,n$Ys]Vlib:_<.O'rg3"Y1krABn-.H`CB0O`8/[o:T8'Lg^ZY*@,:'^g`Igb4=jLi=X96MB(mT+V3dTRU`L9&jn,g+n[[3['(ZU3C0H5Y/'^'P]E=%VPlE!p5/;034t?<+OqC7]\6q.H7(l&h#GCmOahW,;\#L=fu4UgQ.$O&9lI*.l1"HIN$LS9H]Uh<s2c!kE1q<\bi`/M1%R>ip-_j;3"YYJO8*]nV8iD7.hdI0rg0RdUWJJ:rEPgn0!TmQaP2jis7>L&T<aIMdbCJb\o2(cTfTpmc,p3eAEFR_C^YVf+8cHBG:+6[FQT3U%)OQc/,(6fp$>@>g;=odUeW/U?a!j.9<o8N"PT"/aBgPbd7*"2MEL.k&^.kPEN2nLVNeVV02_X^&>UsW1qB(@efQ`-O#fqIX[=;6t=DmU"R/Y.Efn+'t/mc%Y)f>-D:3V11^'b];hIa'>"iQ+%#+*ibW[t7H'D9ZE,IHSp%ZuAU,KKVl)#^@\^EOSFeF,pK/^6,\,<gf3mp+S^Z"5SI61EPbuc2P4GF(+'"_F>l%ME]9Jm5O'^pjj>&mmPjGJohGNZ;BO%)u2q!TEMcK0Zk[EZ1.4ZMW?7h2]qO4FTe6i*d]G@GQD_(=fbr#]o@R/VXB,H.+P?n\1Y:4H?j^,KNIZU[-D3A"s^$H>;Pj7'S+g#7^r@rK;rJQaI4\F--lDrXb;"n`TO/b1]NV92C?gdOP]S"L:%f2Q#j's<2#I5DkXXAS>cK=UR3EWJ3S#!;L=gn-3;Rc$)8e7.5.il(l74T5=<c+K`\biUm<P#[4DR@O:=.h$>em/"o8N2EGCiu1*Q&?HD)J*qgMpBr:(YYKVDp4KciX/+TSnS[G?00f#l#=(+aW_Z2$KYZuBXH"S5o(<F"7j28=]_V/R?M5GrS#/UZ^ueqG27rc"G*paUYBqHQ)Wai&P$7**W%q<0[c/R#7Jmk@Y):T[o/l1]k<$HO@bRBGO4fNkKP=0=\+D-LduZ*n3l$LfH&/D"*nsC2eq6g"a=t/mb-S+GW9Ag_'0TOEN_6ihm^T=`aOP0VT>p/XCd5=h2O#P"I'5WYd*6C3oM'YCn':lC?E9Cf<EEOea-6-IPdclBDIWAA(q*ZH?U=6g_tFteVmO-Z?blfSu=<]8DGnR;B+2,M^!-4p_0YF#K,\W$H)mKF:,nk4=a0APK:Z<<?BG/d4AVEieClQVr;j?%0dlGoug5rQV\Th^TY#B,_ZF-@uMno>1>AZkAm_R4kDRbmGRPdTr<+>Nq1r9X3(=RZou2+D4#3YN>N]YV3W(fE9!4TYh#*9A(qTMV4WGd!+_o2\/PF@G(<'_kXrI$/WE2o0[,;G)hDEJf6<u4O;/rX!T>Q\[g$BMJI,F&=SqhPZP*d)YE7_*5<TP=@9#&dLKai=Yf;0j>;jo&jEbMamn//-P7@ragu-(4#6TYY96>lFI09*`%6Ifr~> -endstream -endobj -231 0 obj -<< /Type /Page -/Parent 1 0 R -/MediaBox [ 0 0 612 792 ] -/Resources 3 0 R -/Contents 230 0 R -/Annots 232 0 R ->> -endobj -232 0 obj -[ -233 0 R -235 0 R -237 0 R -239 0 R -241 0 R -243 0 R -245 0 R -] -endobj -233 0 obj -<< /Type /Annot -/Subtype /Link -/Rect [ 94.8 518.031 144.24 508.031 ] -/C [ 0 0 0 ] -/Border [ 0 0 0 ] -/A 234 0 R -/H /I ->> -endobj -235 0 obj -<< /Type /Annot -/Subtype /Link -/Rect [ 155.9 518.031 184.77 508.031 ] -/C [ 0 0 0 ] -/Border [ 0 0 0 ] -/A 236 0 R -/H /I ->> -endobj -237 0 obj -<< /Type /Annot -/Subtype /Link -/Rect [ 196.43 518.031 248.1 508.031 ] -/C [ 0 0 0 ] -/Border [ 0 0 0 ] -/A 238 0 R -/H /I ->> -endobj -239 0 obj -<< /Type /Annot -/Subtype /Link -/Rect [ 259.76 518.031 300.3 508.031 ] -/C [ 0 0 0 ] -/Border [ 0 0 0 ] -/A 240 0 R -/H /I ->> -endobj -241 0 obj -<< /Type /Annot -/Subtype /Link -/Rect [ 311.96 518.031 351.39 508.031 ] -/C [ 0 0 0 ] -/Border [ 0 0 0 ] -/A 242 0 R -/H /I ->> -endobj -243 0 obj -<< /Type /Annot -/Subtype /Link -/Rect [ 363.05 518.031 470.82 508.031 ] -/C [ 0 0 0 ] -/Border [ 0 0 0 ] -/A 244 0 R -/H /I ->> -endobj -245 0 obj -<< /Type /Annot -/Subtype /Link -/Rect [ 462.282 470.832 522.822 460.832 ] -/C [ 0 0 0 ] -/Border [ 0 0 0 ] -/A 29 0 R -/H /I ->> -endobj -246 0 obj -<< /Length 1961 /Filter [ /ASCII85Decode /FlateDecode ] - >> -stream -Gatm=>Ar7S'RnB3d/)gr2'ZERVFc:RD27dm`E'auK:uCh.R9:^8Ih3fqAnij;&4RoLB*1M*$1]pGL$"4^L(5o>[75Kja0d)P+g51I#5AR!Zs/CLJNWp2HPB5]sm+%`u%90a0c<f+d,Moa`>303EN^KTT_NR![SH_g_56,R+=UR7l507D$:5W8FhnkRnnTjIH5a59t^SOKHKPPTf5S'Lj=o\pXect93+L=YJ%]a`TMe$<::Q@%$kj_G1Y=&l(aKmJk"](<N_6j=!`.Sd+Xn9;JX@8#TKlf^IR$aWX^ko+k(pm=rEMp@!B[15tB",+#5o_!`ilB8"+'dfA9d->&Y6I0BI5_]J_;+4=_q;hh%RVSFl^@'0eIfNI_)jo&f:G'kj0P?6<-p;s",I0G!JsT2is@6g+K6%>XA\2D>DBS)$'(e10;k;3Tm$&Fjd1Qe-/2/*JZJoD+#aTT3RR:`qu=ZGS)Re5`\\005Ls4,;`t5T:ddo/nmB,ipLS:Z0R*3^8ms+\jXa-1Q+8eKui)r?-O1`dH)*gIG82kBpd9\K'rSHqm[E%^?UWk365Qj:4/:peBcl7/5+>/jg<YE=re'49gHpe.s[:3]>I6T^W1F/XHbh#]iA.'tp]u\Hn;Cg3P8"0QfO[p.8Wc=].-F9SOBFIRm`fG%$(0!cbu_j%i\BMa9\QD3RB(#L-YCQY#`T%NqU-Ee)4jd)"gTVd'5dUGr\o3GCUR:`WIDj7_%,CGPXMoQ#[6U=p_U%ohgQ8,taR*06(c/U8KNTNFX5*=\e!WHAiMBD2di#%GFa7OJIL0;`t"Jmjd'>DTmc7+k4Ki0<71P"i0/D!U?N3D01K**MNI`!Ge:>ou5n!W^JFP&6A`D?^dORH0/3a*t=aAU1\@<])S2A?2586B2-)TnY14KKFA^*6)3lZgL_Dr!kd?c->L52,XlO;22c!o"XJP!oZ?21&V./Rj]jg%g_I:<+ArTeF`q!R09<GkK?UdD<=8I`d'..22R'uGa`;]7`CihTN#iPZKuWX)f!t1T#7c]0JOH.1FRDoH'2ZAc%?(;jcZ,\fG(9gc_cPPSS_$]8W%B/5,hWT91mJQfn>RC=KN'CU:H45Cn9d$4dQ5rPcV8=Dio3epVm3A>C:[7pl1sRcqB35ja_]m935,lBUdL&T)]g\X,RP4aX-6<jY6K="(?e.OJVI@]Mc6;VF):>G`?.[=I\04UZ4<,o<TphG(uJTQuhnZ]i5ng-<^ZYHJK[rGR-q7d1!*m<IB^rQ+cae<+`<r_'rC\@P9(_?'.@P(tm)>eO\L$B^PN9!rDi%_=5&qppVp1=%NFKNT-;1;HnKbP8Er02D:<.'!!KSdaDH,cB<"7mc,&fjr`mc>4&mL%G%:**XNVRBbq%5/en,3klZEkP?RYMg-NbQ?!VK#,>_[?lQ'sYm;=bP4^SM#'uI+N!3@:u%ChA&&oN'"M!pQ'k9uhspm"boYZoe?P]AIW+,3bAYnt1bh5@S(^:f6tDIp94h:X9TL7i+RUYB3bPls$3L<B/EK;XnqI0h3a,2XJ"\GQ/[#5=$^[(L;k&AZo-6U"31^RO)?.3d_qqpbFcpC71$JHC+2K-^rK<ckIg+F^Xmdin_`nCahcEH0D+O,B_Q?<qRf+)/qVWO\s6Du^1-l6XFs4SSRc3?85t<GND4Ljn11S.<H&;E'\@8a"TVHd9IS`$#=o5`adA]-t@!N\4Gsh-P%kO;+$.*J\$?f.c(#naM!*%GtI!`fuLTB;0E<%^BV2KH(F/UpbVc2:6*AY'P(["'eZm(CLY8SbT*>ciLd1gW[QNlbp7BTE,(jIZLf[%BC5V$t_d"3'Ijbo,iW'f'c*^L)JPq83?CNJ#nN@>oc4t)_sH4lt6k3'O?GX!uSP(iff`m"#'9+G\Ol)@G(+8aAf5IaRPA00$S>S$fC,m=Wu&H<Wg2sHMJcW[ji&HoT&gYB&JKQ=tqpmrWB>Lh,O~> -endstream -endobj -247 0 obj -<< /Type /Page -/Parent 1 0 R -/MediaBox [ 0 0 612 792 ] -/Resources 3 0 R -/Contents 246 0 R -/Annots 248 0 R ->> -endobj -248 0 obj -[ -249 0 R -250 0 R -] -endobj -249 0 obj -<< /Type /Annot -/Subtype /Link -/Rect [ 528.744 350.232 571.234 340.232 ] -/C [ 0 0 0 ] -/Border [ 0 0 0 ] -/A 65 0 R -/H /I ->> -endobj -250 0 obj -<< /Type /Annot -/Subtype /Link -/Rect [ 332.0 339.232 374.5 329.232 ] -/C [ 0 0 0 ] -/Border [ 0 0 0 ] -/A 65 0 R -/H /I ->> -endobj -251 0 obj -<< /Length 2941 /Filter [ /ASCII85Decode /FlateDecode ] - >> -stream -GauHN?Z4`0&V'PQ&FRYX]o4@s&sYfl,k.Y?!1.Ki(:].20]ZNB='&PY8m3V>m5t4jEN#]R-^PSL!mZUl)%MEX^Z#%VqVp$e(=AABd<^!K7h6CmMW#Y:MNioFNs/)f)Qb*VIpTkBDQBIGS$Kbc<_8mH6=_pa]K(/3@XH>lkofl(k[2a64_WacNCg3.Gg\Ca8Wd6Alb2Y]P/5\ubL0=$G_6Sh:$L%&\p^M8G]G/B*CsuND&ca1mbG<:PY7XWjf'VN#=#:CrhH#obg$m=@N)(g$uUt0O#e0G0)fk\G4!Ob&HhbB$.j6#`e_^Bcs3/^P.YnB2IW-QX9gF,8C!t]V5.MKaGgML(T!-J':+f5cc!PDQ_0mZVH.77iMeuZ?VfVL:NO!"VA<c+,=S<EX6oc37u<0NC*j^A,Pt2:*DD7mj\BE;<c4@i<*6[qHn$3K[60Xe]U%]=0Yt+URL,,n@aT,Sg]bG-$[t_]+pr,0A(qFhrq<X4"pi$refiZc+7Iq>Sc*^HhEB1oP)8\r6T<>;!rch[]\"_!$P&;PYE<7,jc8tO'lb=5j?Y]YWd/P7P7l)afLn^Sqsm$Zg[35O8uT(3fN0\\S9pBp"VF>bY;+=K-M&ogO<bV@WqQF9\P\r2$o1p)`sM+F4Saq1q]n7q<ViL`-U(%5'LX=cVh`j$)>.^6Kk?p.ND9,M[<p@2il^Q:)sVi`=nf&E3VKe%V,-eZH13i39EH41Wnjes0L9(6jh?,Bg+I&%0+)@ja1]u?UBR@FVQHUCoOZK0^E8r)/N/pjZ-nL]<P%.t*2K?aI5rFL4oU&1eR^sQ&Z;l+6D2uY7gu:M`e,-m<)7[=Ra_fk;d>pWdPQ^6`.]lA[l;'Lq!l8Z?9:10:5kG/nYF2nXW_F^DSmED6LCqDNknu^Us!6m591kebRk[5>khelo]2E5PsQtCMq"*jX-BfYP[>]kT"_e>l=r:=[dfq,s*Tpa=KOq[6YoK6s'?/HZ:=M9VnHJp9rh1hJFLBU%V8XMo[%Cd;%KsJ5kgI)0D[$A\g/B?ZUH,JKUS=!!j[Dgj/&V-^%[U?CO(7uDm-kcDjY*h-Fm8r_qD2HP<I]lAD,dF-?5P^^Fu'l[O`iKM+Ft7TVh)tSKRnl6#\IWXVa?f%8PWLkI^WJ0j_P6j1kNBNKsICGOcfT_h(WU&s4*'PIZ0F-T=(T=D,iK*&Hb3j;k6MnMa;de"H7G5Xh7iB?FZ)2cBWRfe"Zi)+d?^2,g*&Dl0)Q"l.'2oG_cdS:%u&Y/N6jb@"Do!L]kZBN6<0TJ#hM!Hb1'B!S7DYQVO8L$H^Wd\%!+47tk*@JD7onP+LB`haV(;i)_V(g'1#B`SW5.\8A@Zd7]V%TkSaKYM1%9ig_s%-R#B-Z5%MJf.Pp^FpZ@Ko2;[PeA"HcgQ`GaM4=DcQ^1>qRDn"J!C+2<j0IYQKmNufkmusD0XCRPK`c;8rX!J^fu)O?l!0'\ARE?+i7nfikdq0(RH(p5S>tNHL->e59Q%&J-L$E&>oYh-lbUL]W\7C9]UlU\]Lg*\bI),!Pi7D&"5U2/S?Lb#&p!"KZ+h->OF&_WPK;3V):eXcn\hC5>(b?KsYGU/Yk6.rA"3/[)P'TQ>[>q64ZHO!@RA'A%P2<`S;"u^6],UWV!Ze!P$iqiZ!N1kYH)`5F:SA7slWepL"3iAH=/,"ADbTs"Cm-%+6[$r-nu25gh+tdjA0bPJDfUP!QUsKs>+tfTTRM2_m2/J:6KQ_#4#;^B?l_(E>Y)^s+Be!cfajE<r,hB:?PF$7PYbG)qHSh@Ap?K]C<V9VLQmAnR-qn2fRn?>3QD3kO_2%+Ai3&SLh2a8;P\2oD'2j/\$+Baa(TCh3P'@ZCJ>b]F8YBob%<E<=P9[S.@pGaM5#"M:U.4ql5^51E?/;g\-SrD7[aEtY+WhTmdBduUVKf+Fq:%E?(p)uH%LPKO&lQCjU6%-=#VmS\gg2cPk/3K1dR#u(;OF`lT,h98TKY'm=YEjig]j11_%DpFp%2DTO,$$R`geO*:&!-RQ>_$#O`#0438qOR;ej-c5[9;q$He^1I2O$<7fIZ,tN8p0*ROQ"H*Jt7(*irMfFm[L%Mr>;G"r?)KVH#V*e3).eoTq[bX>a,Y.hG5\2cbqQNk7PmYaM9RNKOi'jd<Zhrp6lrG(@/$tKlr4hp=G*O4OQQ.4_CsQX'u,ZG$Lb5FMWJ>OcHea-%(b?HTZRQYIU\<<=4[2U<n\Q]5c:0Nf^m/j?gc3+^rFbJSPnH+/L3!1-J^3YJm[3d+kYSeAj.AA%XNJ5Sfc[!jK<Q/Z\2I%gdQtL:H39m@d/'pnN73>(q>oMZdVH-TQ\423W(G-N.Q:#s*,D(P]`qA2r>kbfg6T*A7_EXL?k%dAD;YEJ^QlF1t,9VCHAJFiZ2MU=f^paUt[nSL\i:f?bTio?_+uQbC`><R)TsE,?@Pf@j<b"PO+t:cXOH9oNZ8;"hmG_V1PV.EIX\Q]aHB,T][f(!qh>Vhd`!$YE4!*l,=Fa[_f*Q21[TDQf.U;l&M-`pK&sq#We6fCL:Q"V)b/n6p!-H0e%**rF>sBG55p4Gu,0^dMBjlQgNC6SHm;4*pOpU!tk^''b3($k5@SP+a?Nd/NAebsV%kLZRPlc=%C44l]'RAOpgncV-;_O6A*c15I/p\+[O("Jbp7m7:$mkV;s-]_A^L^k=#,/U#'3dgZ%Nfe$s&_a_]2,!Mc$W*QF<<lk)^o7$%#BNT<S&<AMrjVU\Lq9c,h"A(&ZIn5C_fc90Bqh-@5lg?FUXk>*>"mIG>KT6*]:RWsI(ae0kq.SD\W*pZq@]#',9HcP_EV*USj,Mhr)b81t])Mp4MUCmEVF07.($DHtrm.JA]G]FRjhP30S-r6-1u8d1$N*UiSjL7(r]*KIX&+#2$P'3?U%\5S[k75=j@8efCY+cor_Oa_/?!+EF(2/@,</8s<15d4rrk($@71~> -endstream -endobj -252 0 obj -<< /Type /Page -/Parent 1 0 R -/MediaBox [ 0 0 612 792 ] -/Resources 3 0 R -/Contents 251 0 R -/Annots 253 0 R ->> -endobj -253 0 obj -[ -254 0 R -256 0 R -257 0 R -258 0 R -259 0 R -] -endobj -254 0 obj -<< /Type /Annot -/Subtype /Link -/Rect [ 456.854 584.181 565.734 574.181 ] -/C [ 0 0 0 ] -/Border [ 0 0 0 ] -/A 255 0 R -/H /I ->> -endobj -256 0 obj -<< /Type /Annot -/Subtype /Link -/Rect [ 332.0 573.181 356.45 563.181 ] -/C [ 0 0 0 ] -/Border [ 0 0 0 ] -/A 255 0 R -/H /I ->> -endobj -257 0 obj -<< /Type /Annot -/Subtype /Link -/Rect [ 433.116 232.425 462.566 222.425 ] -/C [ 0 0 0 ] -/Border [ 0 0 0 ] -/A 244 0 R -/H /I ->> -endobj -258 0 obj -<< /Type /Annot -/Subtype /Link -/Rect [ 552.014 232.425 581.464 222.425 ] -/C [ 0 0 0 ] -/Border [ 0 0 0 ] -/A 244 0 R -/H /I ->> -endobj -259 0 obj -<< /Type /Annot -/Subtype /Link -/Rect [ 94.8 210.425 154.24 200.425 ] -/C [ 0 0 0 ] -/Border [ 0 0 0 ] -/A 260 0 R -/H /I ->> -endobj -261 0 obj -<< /Length 2728 /Filter [ /ASCII85Decode /FlateDecode ] - >> -stream -GatlRgN)&Yp"`uKaZcdhO^R#pVUNgMNP1gPDNo&2dafEL6p_N$$If]a(%pl/`.^18+B`D7HGMTEc4/qD]q8Zf5%Gnq6f)Lj]^eOm.t?W:T0MoF.@Q8p00lL$RVt[q]&$Df=[1;ge@;LCS'`MO\oZK1W?8=%a.#:reEsADQ^B]I.e)9re^CTb<A.mh+G0$r8+U't`(7069k,KhgUDdn$!oLJD$d^LrloJ2+M!fU@,;$X(Jb0_')HP%i_9N>AP0VWjKs.>S3L5VWIP+/>u?>LMr>,J)p21sZ`PWk%`K&mRtTW)Z-j3ZiTjrYBUN#[<"?eO1bd/@6eo;;OX>uI@7"sfW=n?'7l<gm'FQFmM$9^'(+aD,50D&jSI27=H47T*!(p>Cld0FuJ0;16$o[oXK"V=u!/s\ZdCYuY$Zs<UTl/:%&oSR\NUpbd!?X!!+;F%$B;a+l&!Z/X^ULik=nldQRc3Y0W@!95PA3,B3N91iZGnOsM5i8U1k4(c.YKRM>.9H<h3,Do7Cbo(4^Y7*;p_[^bJJikDE3ek+P]kMK*JHXH>`s5[HiDsQ_Yr:DI);bJ;M07_J,!l5j/BVNerL`hSZZE%p/9::H]EX/-Y(7jb#OYFp<f&BLP7a'a'k4^HE9/F%AHYkX;1u_[q++m\4\`8>lLq17=e@1_ZRnc4YgonFk1`&jK_"-^23fO[8,)7^91.Q@9&salF8^::#e)jSRhgbl_)SVg2e"PK@/sIWbsWan.K91o:X%E9TldWl5Ks'ZAltr*OHGo!22A)m763dj:@%+^oO>f>Jh6oSSk)($ch#!m]">:p5%X&ao]&CDk26-'q)mO-9.@?j08cK2Rqjr-D5$,U2q19L[/*..eR!:'GAhohflu'4caV[$dt-2iBLX??RcUMZO#p3kPCndaN"r%$"D!,>&"OKU3#nh>`u;Nrp)nYBN[,k^SIY,g)3u.?"5n(.G9h`0[aUNU7T!^cR>Mlc"F!Z6p&L>Apgi>Sd>n8<L(oVQM2e%RB&>RFIV,9QCM)?D"4DJOj1"(CaK86@;\P+ARt-NR'<k*h&qq@/lhVqCI]oprjRWJe_o8L44`K3#s!q&b:=0@2L#WH+X.tCN'm?\pC'(9ZH3NYW0)7]OEOI;8R?o+FLp+K<&4,>m,4PmO_\-M5ruOV`qW$(FbOiM%RdMK*J!-[o/"\X6Mt[\>@F_QR0F$nfm68"'9d)ef4_7*&=Haa+(mTn,]U2e%hJk[SfJFBN[VhKBqkl6dap34l=Rt?fk-+mcO7>o8gZC5KuC<5L)IKrU&jIhsPu_rV#dLe'n4:TC9PIhD?5J_Ioe9_Spp2W_nR71I?T<F&eZdK&T:qld)B(ea)04ADM\t_m-)AMDj'0W>js@`3+S:\<(<FI/@]uGZ14rI@',Mo;^q#$&CZY/4'dKCAk!.#OOT838:Iebb<-&'HLuT`Q7WPQaZ)%e.!=1*5JosUiJZB`MCa1\>Un6]R.,fa\'eWR([juFU1cII2QXdN^7WgTXAHq/6nC@k`Ng1@hPTW0@f]l2ds.H6l)R1W<2F(FqnC.,`r\3@HA[181Kr2#H;VNTSC&)b>9Aq_Le)\fis-B28,;Q6C6U\Y;Y<XTC*FB#Ah*!ELF;4e/msYm#QuR^G$@qCa+MJU8*f][A(4$kMWSK`i@#tA2+VCp)5&\Z!^AI:2>^^b?Bhn`eZ%i,+1%M)V_)0rlc^,f/kJ1*<V)4Rb#@+KUlk9iq]#WD$c$g2ID*sgr[;]1.5\tKr>!rF]D?4E2!q)'Oh)fiB4<THf8`ABUKXkS?C"tjSEa7p5:\A5BT8dejn:\$;s_I?!:b1dtEJ6HAV7=:N<-;T0t/I;JY,(%,IFE`.g*a'cn9e+!!0`b"]:M+F1e7CRZ3\+%VEI9%])1p+e@1E+'EqYe,*E6&\A#UW6>FYAe7DAR=#d.@PQg[aTC<&!<lR",),Pl/<@c?!9CaAKGq'L_"K?\hieI4aL74RocQ]Ae9\b_b]mA]r)Pbi]nP&IaA+C5bUut%P*HDVRJ;b2%EH?m1ZNL@_sFRPFRtAEd->&LU#(?]k8bG\=J59:TJVE'B@CG@2qa&$aQLcl*sY?h7Y7f5X<%OF*MqKOSmtpEbo0L)dHXQ?,H;A+'[IlIn<q*h24A%C'RLBmNg[%E#I6Q@VaVZYa#j)RtH]CO[]1H;DF8[41>LO8h30V(G<@s<d13UP_i(!!TNX<2W-A5&75cG=,jNE^J['_JPA"4-Mo;9$p2@.M>h`%FF?,pmSF+W7YB^GJLbL<N1iV&1ZOCcUr`._,h8M!-T`kD$bPqSE5_Z/U3Z1*D!j06b8oGl-?9,SNrbnb'G)]"k>2WC>cLbjpaAml'$BE!2j4QsHAP!>B/8t?cu/_gWn\<-=dDbeDJ5.af<q^#W$]?tU(T+-ZW4")crV!%<"(FkO0dKAW0%1jC]&2qSSjoJ!q_.R=#G[.%eiM+O\<G1,/k,)D%7gGD%0m#YiEci27.HD49ci)ZE7,@2=;SZ/^;Cukd>uY&%]oW+0`t.FOH00OXre)VGI+T=^JN?G\).F#DcU;+uFC/DYm#BY0_L,"`HK3[msEI-k-*#!3ao,ZA!5J\'>[K9i)C9+l,.'9i.5V?YV\p_2aageU_fHpeM:tdaVGl_=$Jf^WSjQQ"6!_ekm\^mV([<<D>s+X1r#TT=`uq`4f=^d:kF+^4%DVh[,@T."%K4%<6D#'6r_Od`9,c$VmEo7@L4u>!d]=@JGPF~> -endstream -endobj -262 0 obj -<< /Type /Page -/Parent 1 0 R -/MediaBox [ 0 0 612 792 ] -/Resources 3 0 R -/Contents 261 0 R -/Annots 263 0 R ->> -endobj -263 0 obj -[ -264 0 R -266 0 R -268 0 R -270 0 R -272 0 R -274 0 R -276 0 R -] -endobj -264 0 obj -<< /Type /Annot -/Subtype /Link -/Rect [ 94.8 336.781 144.24 326.781 ] -/C [ 0 0 0 ] -/Border [ 0 0 0 ] -/A 265 0 R -/H /I ->> -endobj -266 0 obj -<< /Type /Annot -/Subtype /Link -/Rect [ 155.9 336.781 184.77 326.781 ] -/C [ 0 0 0 ] -/Border [ 0 0 0 ] -/A 267 0 R -/H /I ->> -endobj -268 0 obj -<< /Type /Annot -/Subtype /Link -/Rect [ 196.43 336.781 248.1 326.781 ] -/C [ 0 0 0 ] -/Border [ 0 0 0 ] -/A 269 0 R -/H /I ->> -endobj -270 0 obj -<< /Type /Annot -/Subtype /Link -/Rect [ 259.76 336.781 300.3 326.781 ] -/C [ 0 0 0 ] -/Border [ 0 0 0 ] -/A 271 0 R -/H /I ->> -endobj -272 0 obj -<< /Type /Annot -/Subtype /Link -/Rect [ 311.96 336.781 381.41 326.781 ] -/C [ 0 0 0 ] -/Border [ 0 0 0 ] -/A 273 0 R -/H /I ->> -endobj -274 0 obj -<< /Type /Annot -/Subtype /Link -/Rect [ 393.07 336.781 432.5 326.781 ] -/C [ 0 0 0 ] -/Border [ 0 0 0 ] -/A 275 0 R -/H /I ->> -endobj -276 0 obj -<< /Type /Annot -/Subtype /Link -/Rect [ 403.812 245.582 531.282 235.582 ] -/C [ 0 0 0 ] -/Border [ 0 0 0 ] -/A 115 0 R -/H /I ->> -endobj -277 0 obj -<< /Length 1517 /Filter [ /ASCII85Decode /FlateDecode ] - >> -stream -Gatn'gMZ%0&;KZP'Y97NKHZ+`oDg`(%FDe(laq::G[i`Gi(1#I1qS24%X"N,OLBfH$S4ho1`Xbf1]!BKe`-:o-VP)6XEFu?4>'`&nK1E*+=>Lc&-/#tSs.K%^D(rr*FBkfXN6aMT?6BIio=eDGC<P0XXkiiZ:&A`r[<oN0hlhLh\LF:OX3eV!l?ptD1FF:FN@E28RS90*C+7`2?45QBUL9U[B3Y.$'0H#/:e1<jb_aHH^ui_W(UKi3p#cbS4M&)mZ2:3[J>-;1sXp:8o%n<F75]Dm(N#33B53Ub7A=_E6Jfc@^LU]YV5iQL'Z9)rV1O,I+Y?8Ho>,k(5QQsem+Bu=mIU`=gO6l#u6Fr6eQ@WoWLW.b_kf!hHV^t)b&S2ole$-4?6J2RIHEthTIi*[one`YO#@UVK`(^`t_oTXu:a^">onQo]sh1d`3oRp(u/)]3Z,bs)g9sc#9n=QQL\Kle8&i<_mF2mZZi<pup*4DZO!RWfOXF^LmAVhgHAEB)+Z\IC:H\XSRO'ZMM#$D-TaJ-/KDZ:ru('h";CY$J1n.q)+r5jn6`*$E2cX9sbeJ)r:... [truncated message content] |
From: <rom...@us...> - 2006-05-28 07:48:44
|
Revision: 171 Author: roman_yakovenko Date: 2006-05-28 00:48:34 -0700 (Sun, 28 May 2006) ViewCVS: http://svn.sourceforge.net/pygccxml/?rev=171&view=rev Log Message: ----------- renaming date_time to boost Added Paths: ----------- pyplusplus_dev/docs/examples/boost/ Removed Paths: ------------- pyplusplus_dev/docs/examples/date_time/ Copied: pyplusplus_dev/docs/examples/boost (from rev 168, pyplusplus_dev/docs/examples/date_time) This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <rom...@us...> - 2006-05-28 07:40:28
|
Revision: 170 Author: roman_yakovenko Date: 2006-05-28 00:40:14 -0700 (Sun, 28 May 2006) ViewCVS: http://svn.sourceforge.net/pygccxml/?rev=170&view=rev Log Message: ----------- fixing broken links within documentation Modified Paths: -------------- pygccxml_dev/docs/pygccxml.rest pyplusplus_dev/docs/comparisons/pyste.rest pyplusplus_dev/docs/examples/examples.rest Modified: pygccxml_dev/docs/pygccxml.rest =================================================================== --- pygccxml_dev/docs/pygccxml.rest 2006-05-28 07:08:12 UTC (rev 169) +++ pygccxml_dev/docs/pygccxml.rest 2006-05-28 07:40:14 UTC (rev 170) @@ -87,7 +87,7 @@ `pygccxml`_ provides simple and powerful API to query declarations tree. I will try to give small example, that will prove my point. If you want to know more -about provided API please read `query api`__ document or API documentation. +about provided API please read `query interface`__ document or API documentation. Examples: :: @@ -107,7 +107,7 @@ function has two arguments second argument type is int -.. __: ./query_api.html +.. __: ./query_interface.html ------- License Modified: pyplusplus_dev/docs/comparisons/pyste.rest =================================================================== --- pyplusplus_dev/docs/comparisons/pyste.rest 2006-05-28 07:08:12 UTC (rev 169) +++ pyplusplus_dev/docs/comparisons/pyste.rest 2006-05-28 07:40:14 UTC (rev 170) @@ -415,7 +415,7 @@ thought about them, long before I created `pyplusplus`_. But unfortunately, lack of time and motivation prevents him to work on `Pyste`_. -.. _`screenshot` : ./../pyplusplus_demo.png +.. _`screenshot` : ./../tutorials/pyplusplus_demo.png .. _`pyplusplus` : ./../pyplusplus.html .. _`pygccxml` : ./../../pygccxml/pygccxml.html .. _`Pyste`: http://www.boost.org/libs/python/doc/index.html Modified: pyplusplus_dev/docs/examples/examples.rest =================================================================== --- pyplusplus_dev/docs/examples/examples.rest 2006-05-28 07:08:12 UTC (rev 169) +++ pyplusplus_dev/docs/examples/examples.rest 2006-05-28 07:40:14 UTC (rev 170) @@ -21,7 +21,7 @@ needed to work with Windows bitmap (BMP) image files. I took me only few minutes to create Python bindings for the library. Read more `here`__. - __ : ./easybmp/easybmp.html +.. __ : ./easybmp/easybmp.html --------------- boost.date_time This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <rom...@us...> - 2006-05-28 07:08:28
|
Revision: 169 Author: roman_yakovenko Date: 2006-05-28 00:08:12 -0700 (Sun, 28 May 2006) ViewCVS: http://svn.sourceforge.net/pygccxml/?rev=169&view=rev Log Message: ----------- updating documentation Modified Paths: -------------- pygccxml_dev/docs/download.rest pygccxml_dev/docs/query_interface.rest pyplusplus_dev/docs/comparisons/pyste.rest pyplusplus_dev/docs/download.rest pyplusplus_dev/docs/quotes.rest Modified: pygccxml_dev/docs/download.rest =================================================================== --- pygccxml_dev/docs/download.rest 2006-05-27 20:18:49 UTC (rev 168) +++ pygccxml_dev/docs/download.rest 2006-05-28 07:08:12 UTC (rev 169) @@ -13,6 +13,13 @@ 1) get access to source code 2) get access to latest release version of pyplusplus + + +----------------- +Subversion access +----------------- + +http://sourceforge.net/svn/?group_id=118209 -------- Download @@ -20,12 +27,6 @@ https://sourceforge.net/project/showfiles.php?group_id=118209 ----------- -SVN access ----------- - -http://sourceforge.net/svn/?group_id=118209 - ------------ Installation ------------ Modified: pygccxml_dev/docs/query_interface.rest =================================================================== --- pygccxml_dev/docs/query_interface.rest 2006-05-27 20:18:49 UTC (rev 168) +++ pygccxml_dev/docs/query_interface.rest 2006-05-28 07:08:12 UTC (rev 169) @@ -75,7 +75,7 @@ recursive=None, allow_empty=None ) -As you can see, from the methods arguments you can search for member function +As you can see, from the method arguments you can search for member function by: * ``name`` @@ -105,7 +105,7 @@ mem_funcs = my_class.member_functions( return_type='int' ) - i = declarations.int_t()`` + i = declarations.int_t() ref_i = declarations.reference_t( i ) const_ref_i = declarations.const_t( ref_i ) mem_funcs = my_class.member_functions( return_type=const_ref_int ) Modified: pyplusplus_dev/docs/comparisons/pyste.rest =================================================================== --- pyplusplus_dev/docs/comparisons/pyste.rest 2006-05-27 20:18:49 UTC (rev 168) +++ pyplusplus_dev/docs/comparisons/pyste.rest 2006-05-28 07:08:12 UTC (rev 169) @@ -69,12 +69,11 @@ Carefully read `Pyste`_ definition - -"... The user specifies the classes and functions to be exported using a simple -interface file, which following the `boost.python`_'s philosophy, is simple -`Python`_ code. ..." + "... The user specifies the classes and functions to be exported using a simple + interface file, which following the `boost.python`_'s philosophy, is simple + `Python`_ code. ..." + --- Definition of `Pyste`_. - Simple interface file is an advantage and a disadvantage at the same time. The advantage is obvious: it is easy to start to use. The disadvantage is less obvious - you can not work on whole exported library at once. @@ -92,10 +91,10 @@ You should understand `Pyste`_ implementation details. Third example is solvable if you are lucky and ready to write few `Python`_\\shell scripts. -"... AllFromHeader is broken in some cases. Until it is fixed, use at you own -risk. ..." + "... AllFromHeader is broken in some cases. Until it is fixed, use at you own + risk. ..." --- `Pyste`_ documentation. + ---`Pyste`_ documentation. I have more examples, but I think you've got the idea. @@ -157,8 +156,8 @@ ---------- One of the biggest weaknesses of `Pyste`_ is a lack of good `GCC-XML`_ front-end -and this fact cause `Pyste`_ to generate wrong or not optimal code. I will prove -this later. In order to avoid such weakness, before I have created `pyplusplus`_, +and this fact cause `Pyste`_ to generate not optimal code. I will prove this +later. In order to avoid such weakness, before I have created `pyplusplus`_, I created `pygccxml`_. `pygccxml`_ is a stand alone project, that provides few things: @@ -183,23 +182,26 @@ `boost.type_traits`_ library has been implemented. `pyplusplus`_ makes an extensive use of them: - * find out call policies algorithm + * identify "call policies" algorithm * code creator that generates body of "overridden" virtual functions: - - | *struct expensive_to_copy{...};* - | *...* - | *virtual void* - | *do_smth(expensive_to_copy\* x, const expensive_to_copy& y){* - | *//Pyste generates next code* - | *//call_method< void >(self, "do_smth", x, y);* - | *//pyplusplus generates better code* - | *this->get_override("do_smth")( boost::python::ptr(x), boost::ref(y) );* - | *}* + :: + + struct expensive_to_copy{...}; + + void do_smth( expensive_to_copy* x, const expensive_to_copy& y ){...} + + void + do_smth(expensive_to_copy* x, const expensive_to_copy& y){ + //Pyste generates next code + //call_method< void >(self, "do_smth", x, y); + //pyplusplus generates next code + *this->get_override("do_smth")( boost::python::ptr(x), boost::ref(y) ); + //------------------------------^^^^^^^^^^^^^^^^^^-----^^^^^^^^^^ + } - Do you see the difference? I think that this code is better and correct. - This is a prove to the point I made earlier: `Pyste`_ generates wrong - or not optimal code. + Do you see the difference? This is a prove to the point I made earlier: + `Pyste`_ generates not optimal code. + Do you remember first 3 problems, I talked about? @@ -210,9 +212,11 @@ 3. Maintenance. Every time you add new file\\class to your project you should modify\\create `Pyste`_ interface files. - They are solved by `pygccxml`_ package. + They are solved by `pygccxml`_ package. Please take a look on `pygccxml`_ + `query intrface`__ documentation. + +.. __ : ./../../pygccxml/query_interface.html - Now about mistakes. There is a gold rule: one class, one responsibility. `Pyste`_ breaks this rule. One more time *Exporter* class responsibilities: @@ -281,12 +285,10 @@ Features list ------------- `pyplusplus`_ supports almost all features `Pyste`_ implements. `pyplusplus`_, -version 0.5.1, does not implements next functionality, implemented by `Pyste`_: +version 0.8.0, does not implements next functionality, implemented by `Pyste`_: * *pow* operator - - * templates - + * good documentation Here you can find the complete features list of `pyplusplus`_. @@ -324,37 +326,42 @@ those directories into account. * To define namespace alias. + :: - | *namespace dt = boost::date_time;* + namespace dt = boost::date_time; - All code, that is generated after this statement, will use *dt* instead of - *boost::date_time*. This allows `pyplusplus`_ to create user friendly code. + All code, that is generated after this statement, will use ``dt`` instead of + ``boost::date_time``. This allows `pyplusplus`_ to create user friendly code. * Classes and functions support 2 modes of code generation. Example: + :: + + struct world{ + void set(std::string msg) { this->msg = msg; } + std::string greet() { return msg; } + std::string msg; + }; - | *struct world{* - | *void set(std::string msg) { this->msg = msg; }* - | *std::string greet() { return msg; }* - | *std::string msg;* - | *};* - First mode: - - | *class_<world>("world")* - | *.def("greet", &world::greet)* - | *.def("set", &world::set)* - | *;* + :: + class_<world>("world") + .def("greet", &world::greet) + .def("set", &world::set) + ; + + Second mode: + :: + + if( true ){ + typedef class_<world> world_exposer_t; + world_exposer_t world_exposer; + boost::python::scope world_scope( exposer ); + world_exposer.def( "greet", ( std::string ( world::* )() )( &world::greet ) ); + world_exposer.def( "set", ( void ( world::* )(std::string) )( &world::set ) ); + } - | *if( true ){* - | *typedef class_<world> world_exposer_t;* - | *world_exposer_t world_exposer;* - | *boost::python::scope world_scope( exposer );* - | *world_exposer.def( "greet", ( std::string ( world::\* )() )( &world::greet ) );* - | *world_exposer.def( "set", ( void ( world::\* )(std::string) )( &world::set ) );* - | *}* - Second mode is better then first, because: 1. It is easier to understand compilation error. @@ -410,7 +417,7 @@ .. _`screenshot` : ./../pyplusplus_demo.png .. _`pyplusplus` : ./../pyplusplus.html -.. _`pygccxml` : http://pygccxml.sourceforge.net +.. _`pygccxml` : ./../../pygccxml/pygccxml.html .. _`Pyste`: http://www.boost.org/libs/python/doc/index.html .. _`boost.python`: http://www.boost.org/libs/python/doc/index.html .. _`SourceForge`: http://sourceforge.net/index.php Modified: pyplusplus_dev/docs/download.rest =================================================================== --- pyplusplus_dev/docs/download.rest 2006-05-27 20:18:49 UTC (rev 168) +++ pyplusplus_dev/docs/download.rest 2006-05-28 07:08:12 UTC (rev 169) @@ -13,6 +13,13 @@ 1) get access to source code 2) get access to latest release version of pyplusplus + + +----------------- +Subversion access +----------------- + +http://sourceforge.net/svn/?group_id=118209 -------- Download @@ -20,12 +27,6 @@ https://sourceforge.net/project/showfiles.php?group_id=118209 ----------- -SVN access ----------- - -http://sourceforge.net/svn/?group_id=118209 - ------------ Installation ------------ Modified: pyplusplus_dev/docs/quotes.rest =================================================================== --- pyplusplus_dev/docs/quotes.rest 2006-05-27 20:18:49 UTC (rev 168) +++ pyplusplus_dev/docs/quotes.rest 2006-05-28 07:08:12 UTC (rev 169) @@ -1,6 +1,12 @@ =============================== What they say about pyplusplus? =============================== + +.. contents:: Table of contents + +----------------- +What do they say? +----------------- "... If you can, use pyplusplus over pyste. I say that for ALL users of pyste, pyplusplus is now mature enough to be useful as well as being @@ -8,7 +14,7 @@ Niall Douglas, the author of `TnFOX`_ library - + "... On a related note, I highly suggest that any users out there that have tried/used Pyste but have found it to be too lacking in power should really give pyplusplus a try. It has allowed me to do everything I @@ -18,8 +24,32 @@ Allen Bierbaum, the author of `PyOpenSG`_ library - - +------------------------ +Who is using pyplusplus? +------------------------ + +* Matthias Baas, the author of `Python Computer Graphics Kit`_ project, is using + `pyplusplus`_ to create Python bindings for `Maya C++ SDK`__. + + + .. __ : http://www.highend3d.com/maya + +* I am :-). I created Python bindings for next libraries: + + * `boost.date_time`_ + * `boost.crc`_ + * `boost.rational`_ + * `boost.random`_ + +.. _`boost.date_time` : http://boost.org/doc/html/date_time.html +.. _`boost.crc` : http://boost.org/libs/crc/index.html +.. _`boost.rational` : http://boost.org/libs/rational/index.html +.. _`boost.random` : http://boost.org/libs/random/index.html + + You can download the bindings from https://sourceforge.net/project/showfiles.php?group_id=118209 . + +.. _`pyplusplus` : ./pyplusplus.html +.. _`Python Computer Graphics Kit` : http://cgkit.sourceforge.net/ .. _`TnFOX`: http://www.nedprod.com/TnFOX/ .. _`PyOpenSG`: https://realityforge.vrsource.org/view/PyOpenSG/WebHome This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <rom...@us...> - 2006-05-27 20:19:10
|
Revision: 168 Author: roman_yakovenko Date: 2006-05-27 13:18:49 -0700 (Sat, 27 May 2006) ViewCVS: http://svn.sourceforge.net/pygccxml/?rev=168&view=rev Log Message: ----------- fixing small bug in replace_include_headers method Modified Paths: -------------- pyplusplus_dev/pyplusplus/code_creators/module.py Modified: pyplusplus_dev/pyplusplus/code_creators/module.py =================================================================== --- pyplusplus_dev/pyplusplus/code_creators/module.py 2006-05-27 19:48:20 UTC (rev 167) +++ pyplusplus_dev/pyplusplus/code_creators/module.py 2006-05-27 20:18:49 UTC (rev 168) @@ -120,15 +120,15 @@ break boost_python_header = include_directories.include_directories_t.normalize( 'boost/python.hpp' ) - boost_python_treated = False + boost_python_suite_header \ + = include_directories.include_directories_t.normalize( "boost/python/suite/indexing/vector_indexing_suite.hpp" ) for creator in to_be_removed: - if not boost_python_treated: - boost_python_treated = True - if boost_python_header in creator.header: - if not leave_boost_python_header: - self.remove_creator( creator ) - else: + if boost_python_header in creator.header: + if not leave_boost_python_header: self.remove_creator( creator ) + elif boost_python_suite_header in creator.header: + if not leave_boost_python_header: + self.remove_creator( creator ) else: self.remove_creator( creator ) map( lambda header: self.adopt_include( include.include_t( header=header ) ) This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <rom...@us...> - 2006-05-27 19:48:33
|
Revision: 167 Author: roman_yakovenko Date: 2006-05-27 12:48:20 -0700 (Sat, 27 May 2006) ViewCVS: http://svn.sourceforge.net/pygccxml/?rev=167&view=rev Log Message: ----------- excluding unnamed classes from being exported Modified Paths: -------------- pygccxml_dev/pygccxml/declarations/class_declaration.py pygccxml_dev/pygccxml/parser/project_reader.py pygccxml_dev/pygccxml/parser/scanner.py pyplusplus_dev/pyplusplus/decl_wrappers/class_wrapper.py Modified: pygccxml_dev/pygccxml/declarations/class_declaration.py =================================================================== --- pygccxml_dev/pygccxml/declarations/class_declaration.py 2006-05-27 18:46:37 UTC (rev 166) +++ pygccxml_dev/pygccxml/declarations/class_declaration.py 2006-05-27 19:48:20 UTC (rev 167) @@ -101,6 +101,8 @@ self._aliases = [] def _get_name_impl( self ): + if not self._name: #class with empty name + return self._name if class_t.USE_DEMANGLED_AS_NAME and self.demangled: fname = algorithm.full_name( self.parent ) if fname.startswith( '::' ) and not self.demangled.startswith( '::' ): Modified: pygccxml_dev/pygccxml/parser/project_reader.py =================================================================== --- pygccxml_dev/pygccxml/parser/project_reader.py 2006-05-27 18:46:37 UTC (rev 166) +++ pygccxml_dev/pygccxml/parser/project_reader.py 2006-05-27 19:48:20 UTC (rev 167) @@ -346,6 +346,11 @@ if not decl.name and decl not in joined_decls[decl._name]: decls.append( decl ) joined_decls[decl._name].append( decl ) + elif isinstance( decl, pygccxml.declarations.class_t ): + #unnamed classes + if not decl.name and decl not in joined_decls[decl._name]: + decls.append( decl ) + joined_decls[decl._name].append( decl ) else: assert 1 == len( joined_decls[ decl._name ] ) if isinstance( decl, pygccxml.declarations.namespace_t ): Modified: pygccxml_dev/pygccxml/parser/scanner.py =================================================================== --- pygccxml_dev/pygccxml/parser/scanner.py 2006-05-27 18:46:37 UTC (rev 166) +++ pygccxml_dev/pygccxml/parser/scanner.py 2006-05-27 19:48:20 UTC (rev 167) @@ -366,6 +366,8 @@ def __read_class_impl(self, class_type, attrs): decl = None name = attrs.get(XML_AN_NAME, '') + if '$' in name or '.' in name: + name = '' if attrs.has_key( XML_AN_INCOMPLETE ): decl = self.__decl_factory.create_class_declaration(name=name) else: Modified: pyplusplus_dev/pyplusplus/decl_wrappers/class_wrapper.py =================================================================== --- pyplusplus_dev/pyplusplus/decl_wrappers/class_wrapper.py 2006-05-27 18:46:37 UTC (rev 166) +++ pyplusplus_dev/pyplusplus/decl_wrappers/class_wrapper.py 2006-05-27 19:48:20 UTC (rev 167) @@ -103,6 +103,8 @@ self.wrapper_user_code.append( user_text.user_text_t( code ) ) def _exportable_impl( self ): + if not self.name: + return 'pyplusplus can not expose unnamed classes.' if isinstance( self.parent, declarations.namespace_t ): return '' if not self in self.parent.public_members: This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |