pax_global_header00006660000000000000000000000064126344427710014524gustar00rootroot0000000000000052 comment=1785cd353c68aa34f97627143b9c2908dfd4ea04 textql-2.0.3/000077500000000000000000000000001263444277100130475ustar00rootroot00000000000000textql-2.0.3/.gitignore000066400000000000000000000000251263444277100150340ustar00rootroot00000000000000vendor/ glide build/ textql-2.0.3/.travis.yml000066400000000000000000000001321263444277100151540ustar00rootroot00000000000000language: go sudo: false go: - 1.5 install: make deps env: - GO15VENDOREXPERIMENT=1textql-2.0.3/LICENSE000066400000000000000000000020721263444277100140550ustar00rootroot00000000000000MIT License ----------- Copyright (c) 2014, Paul Bergeron Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.textql-2.0.3/Makefile000066400000000000000000000017611263444277100145140ustar00rootroot00000000000000.PHONY: all test clean man glide fast release install all: textql textql: deps test go build -ldflags "-X main.VERSION=`cat VERSION`" -o ./build/textql ./textql/main.go fast: go build -i -ldflags "-X main.VERSION=`cat VERSION`-dev" -o ./build/textql ./textql/main.go deps: glide ./glide install glide: ifeq ($(shell uname),Darwin) curl -L https://github.com/Masterminds/glide/releases/download/0.5.0/glide-darwin-amd64.zip -o glide.zip unzip glide.zip mv ./darwin-amd64/glide ./glide rm -fr ./darwin-amd64 rm ./glide.zip else curl -L https://github.com/Masterminds/glide/releases/download/0.5.0/glide-linux-386.zip -o glide.zip unzip glide.zip mv ./linux-386/glide ./glide rm -fr ./linux-386 rm ./glide.zip endif test: go test ./inputs/ go test ./storage/ clean: rm ./glide rm -fr ./build release: textql git tag -a `cat VERSION` git push origin `cat VERSION` install: deps test go install -ldflags "-X main.VERSION=`cat VERSION`" ./textql/textql.go man: ronn man/textql.1.ronn textql-2.0.3/Readme.md000066400000000000000000000074721263444277100146000ustar00rootroot00000000000000# TextQL [![Build Status](https://travis-ci.org/dinedal/textql.svg)](https://travis-ci.org/dinedal/textql) [![Go Report Card](http://goreportcard.com/badge/dinedal/textql)](http://goreportcard.com/report/dinedal/textql) Allows you to easily execute SQL against structured text like CSV or TSV. Example session: ![textql_usage_session](https://raw.github.com/dinedal/textql/master/textql_usage.gif) ## Major changes! Since there has been some time since the initial release of textql, I've made some improvements as well as made the project much more modular. There's also been a additional performance tweaks and added functionality, but this comes at the cost of breaking the original command line flags and changing the install command. ### Changes since v1 Additions: - Numeric values are automatically recognized in more cases. - Date / Time / DateTime values are automatically recognized in reasonable formats. See [Time Strings](https://www.sqlite.org/lang_datefunc.html) for a list for accepted formats, and how to convert from other formats. - Added join support! Multiple files / directories can be loaded by listing them at the end of the command. - Directories are read by reading each file inside, and this is non-recursive. - You can list as many files / directories as you like. - Added flag '-output-file' to save output directly to a file. - Added flag '-output-dlm' to modify the output delimiter. - Added "short SQL" syntax. - For the case of a single table, the `FROM [table]` can be dropped from the query. - For simple selects, the `SELECT` keyword can be dropped from the query. - This means the v1 command `textql -sql "select * from tbl" -source some_file.csv` can be shortened to `textql -sql "*" some_file.csv` Changes: - The flag '-outputHeader' was renamed to '-output-header'. Removals: - Dropped the ability to override table names. This makes less sense after the automatic tablename generation based on filename, joins, and shorter SQL syntax changes. - Removed '-source', any files / paths at the end of the command are used, as well as piped in data. Bug fixes: - Writing to a directory no longer fails silently. ## Key differences between textql and sqlite importing - sqlite import will not accept stdin, breaking unix pipes. textql will happily do so. - textql supports quote escaped delimiters, sqlite does not. - textql leverages the sqlite in memory database feature as much as possible and only touches disk if asked. ## Is it any good? [Yes](https://news.ycombinator.com/item?id=3067434) ## Requirements - Go ## Install Latest release on Homebrew (OS X) ```bash brew install textql ``` Build from source ```bash go get -u github.com/dinedal/textql/... ``` ## Usage ```bash textql [-console] [-save-to path] [-output-file path] [-output-dlm delimter] [-output-header] [-header] [-dlm delimter] [-source path] [-sql sql_statements] [-quiet] [path ...] -console After all statements are run, open SQLite3 REPL with this data -dlm string Input delimiter character between fields -dlm=tab for tab, -dlm=0x## to specify a character code in hex (default ",") -header Treat input files as having the first row as a header row -output-dlm string Output delimiter character between fields -output-dlm=tab for tab, -dlm=0x## to specify a character code in hex (default ",") -output-file file Filename to write output to, if empty no output is written (default "stdout") -output-header Display column names in output -quiet Surpress logging -save-to file SQLite3 db is left on disk at this file -sql string SQL Statement(s) to run on the data -version Print version and exit ``` ## License New MIT License - Copyright (c) 2015, 2016 Paul Bergeron [http://pauldbergeron.com/](http://pauldbergeron.com/) See LICENSE for details textql-2.0.3/TODO.txt000066400000000000000000000705151263444277100143650ustar00rootroot00000000000000Install is really complex with vitess dep. Find a way to fix it? ~ go get -u github.com/dinedal/textql/... # github.com/dinedal/textql/vendor/github.com/youtube/vitess/data/test/bson_test go/src/github.com/dinedal/textql/vendor/github.com/youtube/vitess/data/test/bson_test/input_int.go:7: MyType redeclared in this block previous declaration at go/src/github.com/dinedal/textql/vendor/github.com/youtube/vitess/data/test/bson_test/input_custom.go:7 go/src/github.com/dinedal/textql/vendor/github.com/youtube/vitess/data/test/bson_test/input_map.go:7: MyType redeclared in this block previous declaration at go/src/github.com/dinedal/textql/vendor/github.com/youtube/vitess/data/test/bson_test/input_int.go:7 go/src/github.com/dinedal/textql/vendor/github.com/youtube/vitess/data/test/bson_test/input_mixed.go:11: MyType redeclared in this block previous declaration at go/src/github.com/dinedal/textql/vendor/github.com/youtube/vitess/data/test/bson_test/input_map.go:7 go/src/github.com/dinedal/textql/vendor/github.com/youtube/vitess/data/test/bson_test/input_private.go:7: MyType redeclared in this block previous declaration at go/src/github.com/dinedal/textql/vendor/github.com/youtube/vitess/data/test/bson_test/input_mixed.go:11 go/src/github.com/dinedal/textql/vendor/github.com/youtube/vitess/data/test/bson_test/input_ptr.go:7: MyType redeclared in this block previous declaration at go/src/github.com/dinedal/textql/vendor/github.com/youtube/vitess/data/test/bson_test/input_private.go:7 go/src/github.com/dinedal/textql/vendor/github.com/youtube/vitess/data/test/bson_test/input_simple.go:9: MyType redeclared in this block previous declaration at go/src/github.com/dinedal/textql/vendor/github.com/youtube/vitess/data/test/bson_test/input_ptr.go:7 go/src/github.com/dinedal/textql/vendor/github.com/youtube/vitess/data/test/bson_test/input_slice.go:7: MyType redeclared in this block previous declaration at go/src/github.com/dinedal/textql/vendor/github.com/youtube/vitess/data/test/bson_test/input_simple.go:9 go/src/github.com/dinedal/textql/vendor/github.com/youtube/vitess/data/test/bson_test/input_tag.go:7: MyType redeclared in this block previous declaration at go/src/github.com/dinedal/textql/vendor/github.com/youtube/vitess/data/test/bson_test/input_slice.go:7 go/src/github.com/dinedal/textql/vendor/github.com/youtube/vitess/data/test/bson_test/output_int.go:29: (*MyType).UnmarshalBson redeclared in this block previous declaration at go/src/github.com/dinedal/textql/vendor/github.com/youtube/vitess/data/test/bson_test/output_custom.go:42 go/src/github.com/dinedal/textql/vendor/github.com/youtube/vitess/data/test/bson_test/output_map.go:18: (*MyType).MarshalBson redeclared in this block previous declaration at go/src/github.com/dinedal/textql/vendor/github.com/youtube/vitess/data/test/bson_test/output_custom.go:19 go/src/github.com/dinedal/textql/vendor/github.com/youtube/vitess/data/test/bson_test/output_map.go:18: too many errors # pkg-config --cflags gomysql Package gomysql was not found in the pkg-config search path. Perhaps you should add the directory containing `gomysql.pc' to the PKG_CONFIG_PATH environment variable No package 'gomysql' found pkg-config: exit status 1 # launchpad.net/gozk/zookeeper go/src/launchpad.net/gozk/zookeeper/zk.go:15:10: fatal error: 'zookeeper.h' file not found #include ^ 1 error generated. # github.com/youtube/vitess/go/stats/influxdbbackend go/src/github.com/youtube/vitess/go/stats/influxdbbackend/influxdb_backend.go:40: undefined: client.ClientConfig go/src/github.com/youtube/vitess/go/stats/influxdbbackend/influxdb_backend.go:60: undefined: client.Series go/src/github.com/youtube/vitess/go/stats/influxdbbackend/influxdb_backend.go:62: undefined: client.Series go/src/github.com/youtube/vitess/go/stats/influxdbbackend/influxdb_backend.go:73: backend.client.WriteSeries undefined (type *client.Client has no field or method WriteSeries) # github.com/youtube/vitess/go/terminal go/src/github.com/youtube/vitess/go/terminal/tty.go:16: undefined: syscall.TCGETS # pkg-config --cflags gomysql Package gomysql was not found in the pkg-config search path. Perhaps you should add the directory containing `gomysql.pc' to the PKG_CONFIG_PATH environment variable No package 'gomysql' found pkg-config: exit status 1 # github.com/dinedal/textql/vendor/github.com/youtube/vitess/go/stats/influxdbbackend go/src/github.com/dinedal/textql/vendor/github.com/youtube/vitess/go/stats/influxdbbackend/influxdb_backend.go:40: undefined: client.ClientConfig go/src/github.com/dinedal/textql/vendor/github.com/youtube/vitess/go/stats/influxdbbackend/influxdb_backend.go:60: undefined: client.Series go/src/github.com/dinedal/textql/vendor/github.com/youtube/vitess/go/stats/influxdbbackend/influxdb_backend.go:62: undefined: client.Series go/src/github.com/dinedal/textql/vendor/github.com/youtube/vitess/go/stats/influxdbbackend/influxdb_backend.go:73: backend.client.WriteSeries undefined (type *client.Client has no field or method WriteSeries) # github.com/dinedal/textql/vendor/github.com/youtube/vitess/go/terminal go/src/github.com/dinedal/textql/vendor/github.com/youtube/vitess/go/terminal/tty.go:16: undefined: syscall.TCGETS # github.com/dinedal/textql/vendor/github.com/youtube/vitess/third_party/go/launchpad.net/gozk/zookeeper go/src/github.com/dinedal/textql/vendor/github.com/youtube/vitess/third_party/go/launchpad.net/gozk/zookeeper/zk.go:15:10: fatal error: 'zookeeper.h' file not found #include ^ 1 error generated. Fix all the below: Gofmt formats Go programs. We run gofmt -s on your code, where -s is for the "simplify" command /github.com/dinedal/textql/outputs/csv.go /github.com/dinedal/textql/storage/sqlite_test.go Gocyclo calculates cyclomatic complexities of functions in Go source code. The cyclomatic complexity of a function is calculated according to the following rules: 1 is the base complexity of a function +1 for each 'if', 'for', 'case', '&&' or '||' /github.com/dinedal/textql/cmd/textql.go Line 106: 24 main main repos/src/github.com/dinedal/textql/cmd/textql.go:106:1 /github.com/dinedal/textql/sqlparser/parsed_query.go Line 53: 18 sqlparser EncodeValue repos/src/github.com/dinedal/textql/sqlparser/parsed_query.go:53:1 /github.com/dinedal/textql/sqlparser/sql.go /github.com/dinedal/textql/sqlparser/token.go Line 141: 31 sqlparser (*Tokenizer).Scan repos/src/github.com/dinedal/textql/sqlparser/token.go:141:1 Line 297: 16 sqlparser (*Tokenizer).scanNumber repos/src/github.com/dinedal/textql/sqlparser/token.go:297:1 /github.com/dinedal/textql/sqlparser/tracked_buffer.go Line 40: 18 sqlparser (*TrackedBuffer).Myprintf repos/src/github.com/dinedal/textql/sqlparser/tracked_buffer.go:40:1 gofmt 89% golint 10% Golint is a linter for Go source code. /github.com/dinedal/textql/cmd/textql.go Line 18: exported type CommandLineOptions should have comment or be unexported Line 32: exported var VERSION should have comment or be unexported Line 34: exported function NewCommandLineOptions should have comment or be unexported Line 52: exported method CommandLineOptions.GetCommands should have comment or be unexported Line 52: receiver name should be a reflection of its identity; don't use generic names such as "me", "this", or "self" Line 56: exported method CommandLineOptions.GetSourceFiles should have comment or be unexported Line 56: receiver name should be a reflection of its identity; don't use generic names such as "me", "this", or "self" Line 60: exported method CommandLineOptions.GetDelimiter should have comment or be unexported Line 60: receiver name should be a reflection of its identity; don't use generic names such as "me", "this", or "self" Line 64: exported method CommandLineOptions.GetHeader should have comment or be unexported Line 64: receiver name should be a reflection of its identity; don't use generic names such as "me", "this", or "self" Line 68: exported method CommandLineOptions.GetOutputHeader should have comment or be unexported Line 68: receiver name should be a reflection of its identity; don't use generic names such as "me", "this", or "self" Line 72: exported method CommandLineOptions.GetOutputDelimiter should have comment or be unexported Line 72: receiver name should be a reflection of its identity; don't use generic names such as "me", "this", or "self" Line 76: exported method CommandLineOptions.GetOutputFile should have comment or be unexported Line 76: receiver name should be a reflection of its identity; don't use generic names such as "me", "this", or "self" Line 80: exported method CommandLineOptions.GetSaveTo should have comment or be unexported Line 80: receiver name should be a reflection of its identity; don't use generic names such as "me", "this", or "self" Line 84: exported method CommandLineOptions.GetConsole should have comment or be unexported Line 84: receiver name should be a reflection of its identity; don't use generic names such as "me", "this", or "self" Line 88: exported method CommandLineOptions.GetVersion should have comment or be unexported Line 88: receiver name should be a reflection of its identity; don't use generic names such as "me", "this", or "self" Line 92: exported method CommandLineOptions.GetQuiet should have comment or be unexported Line 92: receiver name should be a reflection of its identity; don't use generic names such as "me", "this", or "self" Line 96: exported method CommandLineOptions.Usage should have comment or be unexported Line 96: receiver name should be a reflection of its identity; don't use generic names such as "me", "this", or "self" Line 133: can probably use "var inputSources []string" instead /github.com/dinedal/textql/inputs/csv.go Line 21: exported type CSVInputOptions should have comment or be unexported Line 27: exported function NewCSVInput should have comment or be unexported Line 27: exported func NewCSVInput returns unexported type *inputs.csvInput, which can be annoying to use Line 49: receiver name should be a reflection of its identity; don't use generic names such as "me", "this", or "self" Line 53: receiver name should be a reflection of its identity; don't use generic names such as "me", "this", or "self" Line 57: receiver name should be a reflection of its identity; don't use generic names such as "me", "this", or "self" Line 84: receiver name should be a reflection of its identity; don't use generic names such as "me", "this", or "self" Line 106: receiver name should be a reflection of its identity; don't use generic names such as "me", "this", or "self" /github.com/dinedal/textql/inputs/input.go Line 3: exported type Input should have comment or be unexported /github.com/dinedal/textql/outputs/csv.go Line 18: exported type CSVOutputOptions should have comment or be unexported Line 24: exported function NewCSVOutput should have comment or be unexported Line 24: exported func NewCSVOutput returns unexported type *outputs.csvOutput, which can be annoying to use Line 35: receiver name should be a reflection of its identity; don't use generic names such as "me", "this", or "self" Line 53: should omit 2nd value from range; this loop is equivalent to `for i := range ...` /github.com/dinedal/textql/outputs/output.go Line 5: exported type Output should have comment or be unexported /github.com/dinedal/textql/sqlparser/analyzer.go Line 50: comment on exported function HasINClause should be of the form "HasINClause ..." /github.com/dinedal/textql/sqlparser/ast.go Line 56: exported method Union.IStatement should have comment or be unexported Line 57: exported method Select.IStatement should have comment or be unexported Line 58: exported method Insert.IStatement should have comment or be unexported Line 59: exported method Update.IStatement should have comment or be unexported Line 60: exported method Delete.IStatement should have comment or be unexported Line 61: exported method Set.IStatement should have comment or be unexported Line 62: exported method DDL.IStatement should have comment or be unexported Line 63: exported method Other.IStatement should have comment or be unexported Line 73: exported method Select.ISelectStatement should have comment or be unexported Line 74: exported method Union.ISelectStatement should have comment or be unexported Line 92: don't use ALL_CAPS in Go names; use CamelCase Line 97: don't use ALL_CAPS in Go names; use CamelCase Line 98: don't use ALL_CAPS in Go names; use CamelCase Line 101: exported method Select.Format should have comment or be unexported Line 117: don't use ALL_CAPS in Go names; use CamelCase Line 118: don't use ALL_CAPS in Go names; use CamelCase Line 119: don't use ALL_CAPS in Go names; use CamelCase Line 120: don't use ALL_CAPS in Go names; use CamelCase Line 121: don't use ALL_CAPS in Go names; use CamelCase Line 124: exported method Union.Format should have comment or be unexported Line 137: exported method Insert.Format should have comment or be unexported Line 149: exported method Select.IInsertRows should have comment or be unexported Line 150: exported method Union.IInsertRows should have comment or be unexported Line 151: exported method Values.IInsertRows should have comment or be unexported Line 163: exported method Update.Format should have comment or be unexported Line 178: exported method Delete.Format should have comment or be unexported Line 190: exported method Set.Format should have comment or be unexported Line 204: don't use ALL_CAPS in Go names; use CamelCase Line 204: exported const AST_CREATE should have comment (or a comment on this block) or be unexported Line 205: don't use ALL_CAPS in Go names; use CamelCase Line 206: don't use ALL_CAPS in Go names; use CamelCase Line 207: don't use ALL_CAPS in Go names; use CamelCase Line 210: exported method DDL.Format should have comment or be unexported Line 226: exported method Other.Format should have comment or be unexported Line 233: exported method Comments.Format should have comment or be unexported Line 242: exported method SelectExprs.Format should have comment or be unexported Line 256: exported method StarExpr.ISelectExpr should have comment or be unexported Line 257: exported method NonStarExpr.ISelectExpr should have comment or be unexported Line 264: exported method StarExpr.Format should have comment or be unexported Line 277: exported method NonStarExpr.Format should have comment or be unexported Line 290: exported method Columns.Format should have comment or be unexported Line 300: exported method TableExprs.Format should have comment or be unexported Line 314: exported method AliasedTableExpr.ITableExpr should have comment or be unexported Line 315: exported method ParenTableExpr.ITableExpr should have comment or be unexported Line 316: exported method JoinTableExpr.ITableExpr should have comment or be unexported Line 326: exported method AliasedTableExpr.Format should have comment or be unexported Line 343: exported method TableName.ISimpleTableExpr should have comment or be unexported Line 344: exported method Subquery.ISimpleTableExpr should have comment or be unexported Line 351: exported method TableName.Format should have comment or be unexported Line 364: exported method ParenTableExpr.Format should have comment or be unexported Line 378: don't use ALL_CAPS in Go names; use CamelCase Line 379: don't use ALL_CAPS in Go names; use CamelCase Line 380: don't use ALL_CAPS in Go names; use CamelCase Line 381: don't use ALL_CAPS in Go names; use CamelCase Line 382: don't use ALL_CAPS in Go names; use CamelCase Line 383: don't use ALL_CAPS in Go names; use CamelCase Line 386: exported method JoinTableExpr.Format should have comment or be unexported Line 400: don't use ALL_CAPS in Go names; use CamelCase Line 400: exported const AST_USE should have comment (or a comment on this block) or be unexported Line 401: don't use ALL_CAPS in Go names; use CamelCase Line 402: don't use ALL_CAPS in Go names; use CamelCase Line 405: exported method IndexHints.Format should have comment or be unexported Line 423: don't use ALL_CAPS in Go names; use CamelCase Line 424: don't use ALL_CAPS in Go names; use CamelCase Line 436: exported method Where.Format should have comment or be unexported Line 451: don't use ALL_CAPS in Go names; use CamelCase Line 463: exported method From.Format should have comment or be unexported Line 476: exported method AndExpr.IExpr should have comment or be unexported Line 477: exported method OrExpr.IExpr should have comment or be unexported Line 478: exported method NotExpr.IExpr should have comment or be unexported Line 479: exported method ParenBoolExpr.IExpr should have comment or be unexported Line 480: exported method ComparisonExpr.IExpr should have comment or be unexported Line 481: exported method RangeCond.IExpr should have comment or be unexported Line 482: exported method NullCheck.IExpr should have comment or be unexported Line 483: exported method ExistsExpr.IExpr should have comment or be unexported Line 484: exported method KeyrangeExpr.IExpr should have comment or be unexported Line 485: exported method StrVal.IExpr should have comment or be unexported Line 486: exported method NumVal.IExpr should have comment or be unexported Line 487: exported method ValArg.IExpr should have comment or be unexported Line 488: exported method NullVal.IExpr should have comment or be unexported Line 489: exported method ColName.IExpr should have comment or be unexported Line 490: exported method ValTuple.IExpr should have comment or be unexported Line 491: exported method Subquery.IExpr should have comment or be unexported Line 492: exported method ListArg.IExpr should have comment or be unexported Line 493: exported method BinaryExpr.IExpr should have comment or be unexported Line 494: exported method UnaryExpr.IExpr should have comment or be unexported Line 495: exported method FuncExpr.IExpr should have comment or be unexported Line 496: exported method CaseExpr.IExpr should have comment or be unexported Line 504: exported method AndExpr.IBoolExpr should have comment or be unexported Line 505: exported method OrExpr.IBoolExpr should have comment or be unexported Line 506: exported method NotExpr.IBoolExpr should have comment or be unexported Line 507: exported method ParenBoolExpr.IBoolExpr should have comment or be unexported Line 508: exported method ComparisonExpr.IBoolExpr should have comment or be unexported Line 509: exported method RangeCond.IBoolExpr should have comment or be unexported Line 510: exported method NullCheck.IBoolExpr should have comment or be unexported Line 511: exported method ExistsExpr.IBoolExpr should have comment or be unexported Line 512: exported method KeyrangeExpr.IBoolExpr should have comment or be unexported Line 519: exported method AndExpr.Format should have comment or be unexported Line 528: exported method OrExpr.Format should have comment or be unexported Line 537: exported method NotExpr.Format should have comment or be unexported Line 546: exported method ParenBoolExpr.Format should have comment or be unexported Line 558: don't use ALL_CAPS in Go names; use CamelCase Line 559: don't use ALL_CAPS in Go names; use CamelCase Line 560: don't use ALL_CAPS in Go names; use CamelCase Line 561: don't use ALL_CAPS in Go names; use CamelCase Line 562: don't use ALL_CAPS in Go names; use CamelCase Line 563: don't use ALL_CAPS in Go names; use CamelCase Line 564: don't use ALL_CAPS in Go names; use CamelCase Line 565: don't use ALL_CAPS in Go names; use CamelCase Line 566: don't use ALL_CAPS in Go names; use CamelCase Line 567: don't use ALL_CAPS in Go names; use CamelCase Line 568: don't use ALL_CAPS in Go names; use CamelCase Line 571: exported method ComparisonExpr.Format should have comment or be unexported Line 584: don't use ALL_CAPS in Go names; use CamelCase Line 585: don't use ALL_CAPS in Go names; use CamelCase Line 588: exported method RangeCond.Format should have comment or be unexported Line 600: don't use ALL_CAPS in Go names; use CamelCase Line 601: don't use ALL_CAPS in Go names; use CamelCase Line 604: exported method NullCheck.Format should have comment or be unexported Line 613: exported method ExistsExpr.Format should have comment or be unexported Line 622: exported method KeyrangeExpr.Format should have comment or be unexported Line 632: exported method StrVal.IValExpr should have comment or be unexported Line 633: exported method NumVal.IValExpr should have comment or be unexported Line 634: exported method ValArg.IValExpr should have comment or be unexported Line 635: exported method NullVal.IValExpr should have comment or be unexported Line 636: exported method ColName.IValExpr should have comment or be unexported Line 637: exported method ValTuple.IValExpr should have comment or be unexported Line 638: exported method Subquery.IValExpr should have comment or be unexported Line 639: exported method ListArg.IValExpr should have comment or be unexported Line 640: exported method BinaryExpr.IValExpr should have comment or be unexported Line 641: exported method UnaryExpr.IValExpr should have comment or be unexported Line 642: exported method FuncExpr.IValExpr should have comment or be unexported Line 643: exported method CaseExpr.IValExpr should have comment or be unexported Line 648: exported method StrVal.Format should have comment or be unexported Line 656: exported method NumVal.Format should have comment or be unexported Line 663: exported method ValArg.Format should have comment or be unexported Line 670: exported method NullVal.Format should have comment or be unexported Line 679: exported method ColName.Format should have comment or be unexported Line 702: exported method ValTuple.IColTuple should have comment or be unexported Line 703: exported method Subquery.IColTuple should have comment or be unexported Line 704: exported method ListArg.IColTuple should have comment or be unexported Line 709: exported method ValTuple.Format should have comment or be unexported Line 717: exported method ValExprs.Format should have comment or be unexported Line 730: exported method Subquery.Format should have comment or be unexported Line 737: exported method ListArg.Format should have comment or be unexported Line 749: don't use ALL_CAPS in Go names; use CamelCase Line 750: don't use ALL_CAPS in Go names; use CamelCase Line 751: don't use ALL_CAPS in Go names; use CamelCase Line 752: don't use ALL_CAPS in Go names; use CamelCase Line 753: don't use ALL_CAPS in Go names; use CamelCase Line 754: don't use ALL_CAPS in Go names; use CamelCase Line 755: don't use ALL_CAPS in Go names; use CamelCase Line 756: don't use ALL_CAPS in Go names; use CamelCase Line 759: exported method BinaryExpr.Format should have comment or be unexported Line 771: don't use ALL_CAPS in Go names; use CamelCase Line 772: don't use ALL_CAPS in Go names; use CamelCase Line 773: don't use ALL_CAPS in Go names; use CamelCase Line 776: exported method UnaryExpr.Format should have comment or be unexported Line 787: exported method FuncExpr.Format should have comment or be unexported Line 815: exported method FuncExpr.IsAggregate should have comment or be unexported Line 826: exported method CaseExpr.Format should have comment or be unexported Line 846: exported method When.Format should have comment or be unexported Line 853: exported method GroupBy.Format should have comment or be unexported Line 864: exported method OrderBy.Format should have comment or be unexported Line 880: don't use ALL_CAPS in Go names; use CamelCase Line 881: don't use ALL_CAPS in Go names; use CamelCase Line 884: exported method Order.Format should have comment or be unexported Line 893: exported method Limit.Format should have comment or be unexported Line 950: exported method Values.Format should have comment or be unexported Line 964: exported method ValTuple.IRowTuple should have comment or be unexported Line 965: exported method Subquery.IRowTuple should have comment or be unexported Line 970: exported method UpdateExprs.Format should have comment or be unexported Line 984: exported method UpdateExpr.Format should have comment or be unexported Line 991: exported method OnDup.Format should have comment or be unexported /github.com/dinedal/textql/sqlparser/parsed_query.go Line 20: exported type ParsedQuery should have comment or be unexported Line 25: exported type EncoderFunc should have comment or be unexported Line 27: exported method ParsedQuery.GenerateQuery should have comment or be unexported Line 49: exported method ParsedQuery.MarshalJSON should have comment or be unexported Line 53: exported function EncodeValue should have comment or be unexported Line 102: exported type TupleEqualityList should have comment or be unexported Line 107: exported method TupleEqualityList.Encode should have comment or be unexported Line 156: exported function FetchBindVar should have comment or be unexported /github.com/dinedal/textql/sqlparser/sql.go /github.com/dinedal/textql/sqlparser/token.go Line 15: exported const EOFCHAR should have comment or be unexported Line 172: if block ends with a return statement, so drop this else and outdent its block Line 190: if block ends with a return statement, so drop this else and outdent its block Line 214: if block ends with a return statement, so drop this else and outdent its block Line 221: if block ends with a return statement, so drop this else and outdent its block Line 249: var keywordId should be keywordID Line 417: exported method Tokenizer.ConsumeNext should have comment or be unexported /github.com/dinedal/textql/sqlparser/tracked_buffer.go Line 25: exported function NewTrackedBuffer should have comment or be unexported Line 101: exported method TrackedBuffer.ParsedQuery should have comment or be unexported Line 105: exported method TrackedBuffer.HasBindVars should have comment or be unexported /github.com/dinedal/textql/storage/sqlite.go Line 20: struct field connId should be connID Line 24: exported type SQLite3Options should have comment or be unexported Line 27: should omit type []*sqlite3.SQLiteConn from declaration of var sqlite3conn; it will be inferred from the right-hand side Line 28: should omit type *regexp.Regexp from declaration of var allWhiteSpace; it will be inferred from the right-hand side Line 29: should omit type *regexp.Regexp from declaration of var tableNameCheckRegEx; it will be inferred from the right-hand side Line 42: exported function NewSQLite3Storage should have comment or be unexported Line 42: exported func NewSQLite3Storage returns unexported type *storage.sqlite3Storage, which can be annoying to use Line 52: receiver name should be a reflection of its identity; don't use generic names such as "me", "this", or "self" Line 69: receiver name should be a reflection of its identity; don't use generic names such as "me", "this", or "self" Line 97: receiver name should be a reflection of its identity; don't use generic names such as "me", "this", or "self" Line 135: receiver name should be a reflection of its identity; don't use generic names such as "me", "this", or "self" Line 160: receiver name should be a reflection of its identity; don't use generic names such as "me", "this", or "self" Line 165: can probably use "var vals []interface{}" instead Line 184: receiver name should be a reflection of its identity; don't use generic names such as "me", "this", or "self" Line 199: receiver name should be a reflection of its identity; don't use generic names such as "me", "this", or "self" Line 207: var backupConnId should be backupConnID Line 234: receiver name should be a reflection of its identity; don't use generic names such as "me", "this", or "self" /github.com/dinedal/textql/storage/sqlite_test.go Line 188: should omit 2nd value from range; this loop is equivalent to `for i := range ...` /github.com/dinedal/textql/storage/storage.go Line 9: exported type Storage should have comment or be unexported /github.com/dinedal/textql/test_util/test_util.go Line 1: don't use an underscore in package name Line 8: exported function OpenFileFromString should have comment or be unexported /github.com/dinedal/textql/util/file_helpers.go Line 12: exported function IsPathDir should have comment or be unexported Line 30: exported function OpenFileOrStdDev should have comment or be unexported Line 65: exported function CleanPath should have comment or be unexported Line 94: exported function RewindFile should have comment or be unexported Line 102: exported function IsThereDataOnStdin should have comment or be unexported Line 111: if block ends with a return statement, so drop this else and outdent its block Line 116: exported function AllFilesInDirectory should have comment or be unexported Line 119: can probably use "var result []string" instead /github.com/dinedal/textql/util/seperator_helpers.go Line 10: exported function DetermineSeparator should have comment or be unexported textql-2.0.3/VERSION000066400000000000000000000000061263444277100141130ustar00rootroot000000000000002.0.3 textql-2.0.3/glide.yaml000066400000000000000000000003141263444277100150150ustar00rootroot00000000000000package: github.com/dinedal/textql import: - package: github.com/mattn/go-sqlite3 ref: 8897bf145272af4dd0305518cfb725a5b6d0541c repo: https://github.com/mattn/go-sqlite3 vcs: git textql-2.0.3/inputs/000077500000000000000000000000001263444277100143715ustar00rootroot00000000000000textql-2.0.3/inputs/csv.go000066400000000000000000000071711263444277100155210ustar00rootroot00000000000000package inputs import ( "encoding/csv" "io" "log" "os" "path" "strconv" ) // CSVInput represents a record producing input from a CSV formatted file or pipe. type CSVInput struct { options *CSVInputOptions reader *csv.Reader firstRow []string header []string minOutputLength int name string } // CSVInputOptions options are passed to the underlying encoding/csv reader. type CSVInputOptions struct { // HasHeader when true, will treat the first row as a header row. HasHeader bool // Seperator is the rune that fields are delimited by. Seperator rune // ReadFrom is where the data will be read from. ReadFrom io.Reader } // NewCSVInput sets up a new CSVInput, the first row is read when this is run. // If there is a problem with reading the first row, the error is returned. // Otherwise, the returned csvInput can be reliably consumed with ReadRecord() // until ReadRecord() returns nil. func NewCSVInput(opts *CSVInputOptions) (*CSVInput, error) { csvInput := &CSVInput{ options: opts, reader: csv.NewReader(opts.ReadFrom), } csvInput.firstRow = nil csvInput.reader.FieldsPerRecord = -1 csvInput.reader.Comma = csvInput.options.Seperator csvInput.reader.LazyQuotes = true headerErr := csvInput.readHeader() if headerErr != nil { return nil, headerErr } if asFile, ok := csvInput.options.ReadFrom.(*os.File); ok { csvInput.name = path.Base(asFile.Name()) } else { csvInput.name = "pipe" } return csvInput, nil } // Name returns the name of the CSV being read. // By default, either the base filename or 'pipe' if it is a unix pipe func (csvInput *CSVInput) Name() string { return csvInput.name } // SetName overrides the name of the CSV func (csvInput *CSVInput) SetName(name string) { csvInput.name = name } // ReadRecord reads a single record from the CSV. Always returns successfully. // If the record is empty, an empty []string is returned. // Record expand to match the current row size, adding blank fields as needed. // Records never return less then the number of fields in the first row. // Returns nil on EOF // In the event of a parse error due to an invalid record, it is logged, and // an empty []string is returned with the number of fields in the first row, // as if the record were empty. // // In general, this is a very tolerant of problems CSV reader. func (csvInput *CSVInput) ReadRecord() []string { var row []string var fileErr error if csvInput.firstRow != nil { row = csvInput.firstRow csvInput.firstRow = nil return row } row, fileErr = csvInput.reader.Read() emptysToAppend := csvInput.minOutputLength - len(row) if fileErr == io.EOF { return nil } else if parseErr, ok := fileErr.(*csv.ParseError); ok { log.Println(parseErr) emptysToAppend = csvInput.minOutputLength } if emptysToAppend > 0 { for counter := 0; counter < emptysToAppend; counter++ { row = append(row, "") } } return row } func (csvInput *CSVInput) readHeader() error { var readErr error csvInput.firstRow, readErr = csvInput.reader.Read() if readErr != nil { log.Fatalln(readErr) return readErr } csvInput.minOutputLength = len(csvInput.firstRow) if csvInput.options.HasHeader { csvInput.header = csvInput.firstRow csvInput.firstRow = nil } else { csvInput.header = make([]string, csvInput.minOutputLength) for i := 0; i < len(csvInput.firstRow); i++ { csvInput.header[i] = "c" + strconv.Itoa(i) } } return nil } // Header returns the header of the csvInput. Either the first row if a header // set in the options, or c#, where # is the column number, starting with 0. func (csvInput *CSVInput) Header() []string { return csvInput.header } textql-2.0.3/inputs/csv_test.go000066400000000000000000000056201263444277100165550ustar00rootroot00000000000000package inputs import ( "os" "strings" "reflect" "testing" "github.com/dinedal/textql/test_util" ) var ( simple = `a,b,c 1,2,3 4,5,6` bad = `a,b,c 1,2, 4,5,6 7,8 9,,10 11,12,13,14 "foo,bar","boo,\"far","," 'foo,bar','"','"' "test ",multi-line ` ) func TestCSVInputFakesHeader(t *testing.T) { fp := test_util.OpenFileFromString(simple) defer fp.Close() defer os.Remove(fp.Name()) opts := &CSVInputOptions{ HasHeader: false, Seperator: ',', ReadFrom: fp, } input, _ := NewCSVInput(opts) expected := []string{"c0", "c1", "c2"} if !reflect.DeepEqual(input.Header(), expected) { t.Errorf("Header() = %v, want %v", input.Header(), expected) } } func TestCSVInputReadsHeader(t *testing.T) { fp := test_util.OpenFileFromString(simple) defer fp.Close() defer os.Remove(fp.Name()) opts := &CSVInputOptions{ HasHeader: true, Seperator: ',', ReadFrom: fp, } input, _ := NewCSVInput(opts) expected := []string{"a", "b", "c"} if !reflect.DeepEqual(input.Header(), expected) { t.Errorf("Header() = %v, want %v", input.Header(), expected) } } func TestCSVInputReadsSimple(t *testing.T) { fp := test_util.OpenFileFromString(simple) defer fp.Close() defer os.Remove(fp.Name()) opts := &CSVInputOptions{ HasHeader: true, Seperator: ',', ReadFrom: fp, } input, _ := NewCSVInput(opts) expected := make([][]string, len(strings.Split(simple, "\n"))-1) expected[0] = []string{"1", "2", "3"} expected[1] = []string{"4", "5", "6"} for counter := 0; counter < len(expected); counter++ { row := input.ReadRecord() if !reflect.DeepEqual(row, expected[counter]) { t.Errorf("ReadRecord() = %v, want %v", row, expected[counter]) } } } func TestCSVInputReadsBad(t *testing.T) { fp := test_util.OpenFileFromString(bad) defer fp.Close() defer os.Remove(fp.Name()) opts := &CSVInputOptions{ HasHeader: true, Seperator: ',', ReadFrom: fp, } input, _ := NewCSVInput(opts) expected := make([][]string, len(strings.Split(bad, "\n"))-1) expected[0] = []string{"1", "2", ""} expected[1] = []string{"4", "5", "6"} expected[2] = []string{"7", "8", ""} expected[3] = []string{"9", "", "10"} expected[4] = []string{"11", "12", "13", "14"} expected[5] = []string{"foo,bar", `boo,\"far`, ","} expected[6] = []string{`'foo`, `bar'`, `'"'`, `'"'`} expected[7] = []string{"test\n", "multi-line", ""} for counter := 0; counter < len(expected); counter++ { row := input.ReadRecord() if !reflect.DeepEqual(row, expected[counter]) { t.Errorf("ReadRecord() = %v, want %v", row, expected[counter]) } } } func TestCSVInputHasAName(t *testing.T) { fp := test_util.OpenFileFromString(simple) defer fp.Close() defer os.Remove(fp.Name()) opts := &CSVInputOptions{ HasHeader: true, Seperator: ',', ReadFrom: fp, } input, _ := NewCSVInput(opts) expected := fp.Name() if !reflect.DeepEqual(input.Name(), expected) { t.Errorf("Name() = %v, want %v", input.Name(), expected) } } textql-2.0.3/inputs/input.go000066400000000000000000000014031263444277100160550ustar00rootroot00000000000000package inputs // Input is how TextQL reads from data sources. // To be an input, an implementor must return tabular data. // How data is manipulated into the tabular structure is left to the implementor. // Inputs are expected to return in a row by row fashion. type Input interface { // ReadRecord should return nil on the end of data, or a single record. // Recoverable errors should represent themselves as empty sets. // Unrecoverable errors should return nil. ReadRecord() []string // Header should return metadata naming the columns in the table. Header() []string // Name should return a reasonable name for the data set, prehaps the file name. Name() string // SetName allows users of the dataset to supply their own name if needed. SetName(string) } textql-2.0.3/man/000077500000000000000000000000001263444277100136225ustar00rootroot00000000000000textql-2.0.3/man/textql.1000066400000000000000000000057411263444277100152340ustar00rootroot00000000000000.\" generated with Ronn/v0.7.3 .\" http://github.com/rtomayko/ronn/tree/0.7.3 . .TH "TEXTQL" "1" "December 2015" "" "" . .SH "NAME" \fBtextql\fR \- execute queries on structured text . .SH "SYNOPSIS" \fBtextql\fR [\fI\-save\-to path\fR] [\fI\-output\-file path\fR] [\fI\-output\-dlm delimter\fR] [\fI\-output\-header\fR] [\fI\-header\fR] [\fI\-dlm delimter\fR] [\fI\-source path\fR] [\fI\-sql sql_statements\fR] [\fI\-quiet\fR] [\fIpath\fR\.\.\.] . .br \fBtextql\fR \fI\-console\fR \fIpath\fR\.\.\. . .br . .SH "DESCRIPTION" \fBtextql\fR executes given statements in SQL on structured texts and returns the result\. SQL statements accepted by \fBtextql\fR are ANSI SQL compatible, and are executed against the data in the order provided\. No transformations are applied to the text files but are instead applied to a temporary view of the data\. Statements that insert data or modify the existing data will only have their effects visible in the output\. . .P The argument list of the end is expected to be a list of paths which may or may not be specific files\. Each path is traversed for files that are then loaded as part of the database that \fBtextql\fR creates internally, and files are loaded without traversal\. Paths provided are not recursed\. . .P Each statement is then executed against \fBtextql\fR\'s internal database and the result, if any, is printed\. \fBINSERT\fR, \fBUPDATE\fR, \fBDELETE\fR or other side effecting statements do not effect the text files given as input, but instead modify the database internal to \fBtextql\fR\. Their result may be viewed via the output, presisting the database as is with \fB\-save\-to\fR or in a SQLite REPL with \fB\-\-console\fR . .P With no arguements, \fBtextql\fR will print a brief overview of it\'s usage\. . .SH "FILES" Structured text accepted by textql is any text file in a tabular format where each row of the table is on a single line, and each column is a section of the line delimited by a single character which is consistent throughout the file\. A common structured text format is CSV (RFC4180)\. . .SH "OPTIONS" . .TP \fB\-console\fR After all statements are run, open SQLite3 REPL with this data . .TP \fB\-dlm string\fR Input delimiter character between fields \-dlm=tab for tab, \-dlm=0x## to specify a character code in hex (default ",") . .TP \fB\-header\fR Treat input files as having the first row as a header row . .TP \fB\-output\-dlm string\fR Output delimiter character between fields \-output\-dlm=tab for tab, \-dlm=0x## to specify a character code in hex (default ",") . .TP \fB\-output\-file file\fR Filename to write output to, if empty no output is written (default "stdout") . .TP \fB\-output\-header\fR Display column names in output . .TP \fB\-quiet\fR Surpress logging . .TP \fB\-save\-to file\fR SQLite3 db is left on disk at this file . .TP \fB\-sql string\fR SQL Statement(s) to run on the data . .TP \fB\-version\fR Print version and exit . .SH "COPYRIGHT" textql is Copyright (C) 2015, 2016 Paul Bergeron \fIhttp://pauldbergeron\.com/\fR textql-2.0.3/man/textql.1.html000066400000000000000000000144711263444277100161770ustar00rootroot00000000000000 textql(1) - execute queries on structured text
  1. textql(1)
  2. textql(1)

NAME

textql - execute queries on structured text

SYNOPSIS

textql [-save-to path] [-output-file path] [-output-dlm delimter] [-output-header] [-header] [-dlm delimter] [-source path] [-sql sql_statements] [-quiet] [path...]
textql -console path...

DESCRIPTION

textql executes given statements in SQL on structured texts and returns the result. SQL statements accepted by textql are ANSI SQL compatible, and are executed against the data in the order provided. No transformations are applied to the text files but are instead applied to a temporary view of the data. Statements that insert data or modify the existing data will only have their effects visible in the output.

The argument list of the end is expected to be a list of paths which may or may not be specific files. Each path is traversed for files that are then loaded as part of the database that textql creates internally, and files are loaded without traversal. Paths provided are not recursed.

Each statement is then executed against textql's internal database and the result, if any, is printed. INSERT, UPDATE, DELETE or other side effecting statements do not effect the text files given as input, but instead modify the database internal to textql. Their result may be viewed via the output, presisting the database as is with -save-to or in a SQLite REPL with --console

With no arguements, textql will print a brief overview of it's usage.

FILES

Structured text accepted by textql is any text file in a tabular format where each row of the table is on a single line, and each column is a section of the line delimited by a single character which is consistent throughout the file. A common structured text format is CSV (RFC4180).

OPTIONS

-console
After all statements are run, open SQLite3 REPL with this data
-dlm string
Input delimiter character between fields -dlm=tab for tab, -dlm=0x## to specify a character code in hex (default ",")
-header
Treat input files as having the first row as a header row
-output-dlm string
Output delimiter character between fields -output-dlm=tab for tab, -dlm=0x## to specify a character code in hex (default ",")
-output-file file
Filename to write output to, if empty no output is written (default "stdout")
-output-header
Display column names in output
-quiet
Surpress logging
-save-to file
SQLite3 db is left on disk at this file
-sql string
SQL Statement(s) to run on the data
-version
Print version and exit

textql is Copyright (C) 2015, 2016 Paul Bergeron http://pauldbergeron.com/

  1. December 2015
  2. textql(1)
textql-2.0.3/man/textql.1.ronn000066400000000000000000000053071263444277100162050ustar00rootroot00000000000000textql(1) -- execute queries on structured text =============================================== ## SYNOPSIS `textql` [<-save-to path>] [<-output-file path>] [<-output-dlm delimter>] [<-output-header>] [<-header>] [<-dlm delimter>] [<-source path>] [<-sql sql_statements>] [<-quiet>] [...]
`textql` <-console> ...
## DESCRIPTION **textql** executes given statements in SQL on structured texts and returns the result. SQL statements accepted by `textql` are ANSI SQL compatible, and are executed against the data in the order provided. No transformations are applied to the text files but are instead applied to a temporary view of the data. Statements that insert data or modify the existing data will only have their effects visible in the output. The argument list of the end is expected to be a list of paths which may or may not be specific files. Each path is traversed for files that are then loaded as part of the database that `textql` creates internally, and files are loaded without traversal. Paths provided are not recursed. Each statement is then executed against `textql`'s internal database and the result, if any, is printed. **INSERT**, **UPDATE**, **DELETE** or other side effecting statements do not effect the text files given as input, but instead modify the database internal to `textql`. Their result may be viewed via the output, presisting the database as is with `-save-to` or in a SQLite REPL with `--console` With no arguements, `textql` will print a brief overview of it's usage. ## FILES Structured text accepted by textql is any text file in a tabular format where each row of the table is on a single line, and each column is a section of the line delimited by a single character which is consistent throughout the file. A common structured text format is CSV (RFC4180). ## OPTIONS * `-console`: After all statements are run, open SQLite3 REPL with this data * `-dlm string`: Input delimiter character between fields -dlm=tab for tab, -dlm=0x## to specify a character code in hex (default ",") * `-header`: Treat input files as having the first row as a header row * `-output-dlm string`: Output delimiter character between fields -output-dlm=tab for tab, -dlm=0x## to specify a character code in hex (default ",") * `-output-file file`: Filename to write output to, if empty no output is written (default "stdout") * `-output-header`: Display column names in output * `-quiet`: Surpress logging * `-save-to file`: SQLite3 db is left on disk at this file * `-sql string`: SQL Statement(s) to run on the data * `-version`: Print version and exit ## COPYRIGHT textql is Copyright (C) 2015, 2016 Paul Bergeron textql-2.0.3/outputs/000077500000000000000000000000001263444277100145725ustar00rootroot00000000000000textql-2.0.3/outputs/csv.go000066400000000000000000000034001263444277100157110ustar00rootroot00000000000000package outputs import ( "database/sql" "encoding/csv" "io" "log" ) // CSVOutput represents a TextQL output that transforms sql.Rows into CSV formatted // string data using encoding/csv type CSVOutput struct { options *CSVOutputOptions writer *csv.Writer firstRow []string header []string minOutputLength int } // CSVOutputOptions define options that are passed to encoding/csv for formatting // the output in specific ways. type CSVOutputOptions struct { // WriteHeader determines if a header row based on the column names should be written. WriteHeader bool // Seperator is the rune used to delimit fields. Seperator rune // WriteTo is where the formatted data will be written to. WriteTo io.Writer } // NewCSVOutput returns a new CSVOutput configured per the options provided. func NewCSVOutput(opts *CSVOutputOptions) *CSVOutput { csvOutput := &CSVOutput{ options: opts, writer: csv.NewWriter(opts.WriteTo), } csvOutput.writer.Comma = csvOutput.options.Seperator return csvOutput } // Show writes the sql.Rows given to the destination in CSV format. func (csvOutput *CSVOutput) Show(rows *sql.Rows) { cols, colsErr := rows.Columns() if colsErr != nil { log.Fatalln(colsErr) } if csvOutput.options.WriteHeader { if err := csvOutput.writer.Write(cols); err != nil { log.Fatalln(err) } } rawResult := make([][]byte, len(cols)) result := make([]string, len(cols)) dest := make([]interface{}, len(cols)) for i := range cols { dest[i] = &rawResult[i] } for rows.Next() { rows.Scan(dest...) for i, raw := range rawResult { result[i] = string(raw) } writeErr := csvOutput.writer.Write(result) if writeErr != nil { log.Fatalln(colsErr) } } csvOutput.writer.Flush() rows.Close() } textql-2.0.3/outputs/output.go000066400000000000000000000004701263444277100164620ustar00rootroot00000000000000package outputs import "database/sql" // Output implementors should accept sql.Rows and transform them // however they need to in order to represent them in their specific format. type Output interface { // Show should display/write the sql.Rows to the implmentor's destination and format. Show(*sql.Rows) } textql-2.0.3/sqlparser/000077500000000000000000000000001263444277100150635ustar00rootroot00000000000000textql-2.0.3/sqlparser/Makefile000066400000000000000000000001551263444277100165240ustar00rootroot00000000000000 MAKEFLAGS = -s sql.go: sql.y go tool yacc -o sql.go sql.y gofmt -w sql.go clean: rm -f y.output sql.go textql-2.0.3/sqlparser/analyzer.go000066400000000000000000000055611263444277100172460ustar00rootroot00000000000000// Copyright 2012, Google Inc. All rights reserved. // Use of this source code is governed by a BSD-style // license that can be found in the LICENSE file. package sqlparser // analyzer.go contains utility analysis functions. import ( "fmt" "github.com/dinedal/textql/sqlparser/sqltypes" ) // GetTableName returns the table name from the SimpleTableExpr // only if it's a simple expression. Otherwise, it returns "". func GetTableName(node SimpleTableExpr) string { if n, ok := node.(*TableName); ok && n.Qualifier == nil { return string(n.Name) } // sub-select or '.' expression return "" } // GetColName returns the column name, only if // it's a simple expression. Otherwise, it returns "". func GetColName(node Expr) string { if n, ok := node.(*ColName); ok { return string(n.Name) } return "" } // IsColName returns true if the ValExpr is a *ColName. func IsColName(node ValExpr) bool { _, ok := node.(*ColName) return ok } // IsValue returns true if the ValExpr is a string, number or value arg. // NULL is not considered to be a value. func IsValue(node ValExpr) bool { switch node.(type) { case StrVal, NumVal, ValArg: return true } return false } // HasINCaluse returns true if any of the conditions has an IN clause. func HasINClause(conditions []BoolExpr) bool { for _, node := range conditions { if c, ok := node.(*ComparisonExpr); ok && c.Operator == AST_IN { return true } } return false } // IsSimpleTuple returns true if the ValExpr is a ValTuple that // contains simple values or if it's a list arg. func IsSimpleTuple(node ValExpr) bool { switch vals := node.(type) { case ValTuple: for _, n := range vals { if !IsValue(n) { return false } } return true case ListArg: return true } // It's a subquery return false } // AsInterface converts the ValExpr to an interface. It converts // ValTuple to []interface{}, ValArg to string, StrVal to sqltypes.String, // NumVal to sqltypes.Numeric, NullVal to nil. // Otherwise, it returns an error. func AsInterface(node ValExpr) (interface{}, error) { switch node := node.(type) { case ValTuple: vals := make([]interface{}, 0, len(node)) for _, val := range node { v, err := AsInterface(val) if err != nil { return nil, err } vals = append(vals, v) } return vals, nil case ValArg: return string(node), nil case ListArg: return string(node), nil case StrVal: return sqltypes.MakeString(node), nil case NumVal: n, err := sqltypes.BuildNumeric(string(node)) if err != nil { return nil, fmt.Errorf("type mismatch: %s", err) } return n, nil case *NullVal: return nil, nil } return nil, fmt.Errorf("unexpected node %v", node) } // StringIn is a convenience function that returns // true if str matches any of the values. func StringIn(str string, values ...string) bool { for _, val := range values { if str == val { return true } } return false } textql-2.0.3/sqlparser/ast.go000066400000000000000000000522321263444277100162050ustar00rootroot00000000000000// Copyright 2012, Google Inc. All rights reserved. // Use of this source code is governed by a BSD-style // license that can be found in the LICENSE file. package sqlparser import ( "errors" "fmt" "strconv" "github.com/dinedal/textql/sqlparser/sqltypes" ) // Instructions for creating new types: If a type // needs to satisfy an interface, declare that function // along with that interface. This will help users // identify the list of types to which they can assert // those interfaces. // If the member of a type has a string with a predefined // list of values, declare those values as const following // the type. // For interfaces that define dummy functions to consolidate // a set of types, define the function as ITypeName. // This will help avoid name collisions. // Parse parses the sql and returns a Statement, which // is the AST representation of the query. func Parse(sql string) (Statement, error) { tokenizer := NewStringTokenizer(sql) if yyParse(tokenizer) != 0 { return nil, errors.New(tokenizer.LastError) } return tokenizer.ParseTree, nil } // SQLNode defines the interface for all nodes // generated by the parser. type SQLNode interface { Format(buf *TrackedBuffer) } // String returns a string representation of an SQLNode. func String(node SQLNode) string { buf := NewTrackedBuffer(nil) buf.Myprintf("%v", node) return buf.String() } // Statement represents a statement. type Statement interface { IStatement() SQLNode } func (*Union) IStatement() {} func (*Select) IStatement() {} func (*Insert) IStatement() {} func (*Update) IStatement() {} func (*Delete) IStatement() {} func (*Set) IStatement() {} func (*DDL) IStatement() {} func (*Other) IStatement() {} // SelectStatement any SELECT statement. type SelectStatement interface { ISelectStatement() IStatement() IInsertRows() SQLNode } func (*Select) ISelectStatement() {} func (*Union) ISelectStatement() {} // Select represents a SELECT statement. type Select struct { Comments Comments Distinct string SelectExprs SelectExprs From *From Where *Where GroupBy GroupBy Having *Where OrderBy OrderBy Limit *Limit Lock string } // Select.Distinct const ( AST_DISTINCT = "distinct " ) // Select.Lock const ( AST_FOR_UPDATE = " for update" AST_SHARE_MODE = " lock in share mode" ) func (node *Select) Format(buf *TrackedBuffer) { buf.Myprintf("select %v%s%v from %v%v%v%v%v%v%s", node.Comments, node.Distinct, node.SelectExprs, node.From, node.Where, node.GroupBy, node.Having, node.OrderBy, node.Limit, node.Lock) } // Union represents a UNION statement. type Union struct { Type string Left, Right SelectStatement } // Union.Type const ( AST_UNION = "union" AST_UNION_ALL = "union all" AST_SET_MINUS = "minus" AST_EXCEPT = "except" AST_INTERSECT = "intersect" ) func (node *Union) Format(buf *TrackedBuffer) { buf.Myprintf("%v %s %v", node.Left, node.Type, node.Right) } // Insert represents an INSERT statement. type Insert struct { Comments Comments Table *TableName Columns Columns Rows InsertRows OnDup OnDup } func (node *Insert) Format(buf *TrackedBuffer) { buf.Myprintf("insert %vinto %v%v %v%v", node.Comments, node.Table, node.Columns, node.Rows, node.OnDup) } // InsertRows represents the rows for an INSERT statement. type InsertRows interface { IInsertRows() SQLNode } func (*Select) IInsertRows() {} func (*Union) IInsertRows() {} func (Values) IInsertRows() {} // Update represents an UPDATE statement. type Update struct { Comments Comments Table *TableName Exprs UpdateExprs Where *Where OrderBy OrderBy Limit *Limit } func (node *Update) Format(buf *TrackedBuffer) { buf.Myprintf("update %v%v set %v%v%v%v", node.Comments, node.Table, node.Exprs, node.Where, node.OrderBy, node.Limit) } // Delete represents a DELETE statement. type Delete struct { Comments Comments Table *TableName Where *Where OrderBy OrderBy Limit *Limit } func (node *Delete) Format(buf *TrackedBuffer) { buf.Myprintf("delete %vfrom %v%v%v%v", node.Comments, node.Table, node.Where, node.OrderBy, node.Limit) } // Set represents a SET statement. type Set struct { Comments Comments Exprs UpdateExprs } func (node *Set) Format(buf *TrackedBuffer) { buf.Myprintf("set %v%v", node.Comments, node.Exprs) } // DDL represents a CREATE, ALTER, DROP or RENAME statement. // Table is set for AST_ALTER, AST_DROP, AST_RENAME. // NewName is set for AST_ALTER, AST_CREATE, AST_RENAME. type DDL struct { Action string Table []byte NewName []byte } const ( AST_CREATE = "create" AST_ALTER = "alter" AST_DROP = "drop" AST_RENAME = "rename" ) func (node *DDL) Format(buf *TrackedBuffer) { switch node.Action { case AST_CREATE: buf.Myprintf("%s table %s", node.Action, node.NewName) case AST_RENAME: buf.Myprintf("%s table %s %s", node.Action, node.Table, node.NewName) default: buf.Myprintf("%s table %s", node.Action, node.Table) } } // Other represents a SHOW, DESCRIBE, or EXPLAIN statement. // It should be used only as an indicator. It does not contain // the full AST for the statement. type Other struct{} func (node *Other) Format(buf *TrackedBuffer) { buf.WriteString("other") } // Comments represents a list of comments. type Comments [][]byte func (node Comments) Format(buf *TrackedBuffer) { for _, c := range node { buf.Myprintf("%s ", c) } } // SelectExprs represents SELECT expressions. type SelectExprs []SelectExpr func (node SelectExprs) Format(buf *TrackedBuffer) { var prefix string for _, n := range node { buf.Myprintf("%s%v", prefix, n) prefix = ", " } } // SelectExpr represents a SELECT expression. type SelectExpr interface { ISelectExpr() SQLNode } func (*StarExpr) ISelectExpr() {} func (*NonStarExpr) ISelectExpr() {} // StarExpr defines a '*' or 'table.*' expression. type StarExpr struct { TableName []byte } func (node *StarExpr) Format(buf *TrackedBuffer) { if node.TableName != nil { buf.Myprintf("%s.", node.TableName) } buf.Myprintf("*") } // NonStarExpr defines a non-'*' select expr. type NonStarExpr struct { Expr Expr As []byte } func (node *NonStarExpr) Format(buf *TrackedBuffer) { buf.Myprintf("%v", node.Expr) if node.As != nil { buf.Myprintf(" as %s", node.As) } } // Columns represents an insert column list. // The syntax for Columns is a subset of SelectExprs. // So, it's castable to a SelectExprs and can be analyzed // as such. type Columns []SelectExpr func (node Columns) Format(buf *TrackedBuffer) { if node == nil { return } buf.Myprintf("(%v)", SelectExprs(node)) } // TableExprs represents a list of table expressions. type TableExprs []TableExpr func (node TableExprs) Format(buf *TrackedBuffer) { var prefix string for _, n := range node { buf.Myprintf("%s%v", prefix, n) prefix = ", " } } // TableExpr represents a table expression. type TableExpr interface { ITableExpr() SQLNode } func (*AliasedTableExpr) ITableExpr() {} func (*ParenTableExpr) ITableExpr() {} func (*JoinTableExpr) ITableExpr() {} // AliasedTableExpr represents a table expression // coupled with an optional alias or index hint. type AliasedTableExpr struct { Expr SimpleTableExpr As []byte Hints *IndexHints } func (node *AliasedTableExpr) Format(buf *TrackedBuffer) { buf.Myprintf("%v", node.Expr) if node.As != nil { buf.Myprintf(" as %s", node.As) } if node.Hints != nil { // Hint node provides the space padding. buf.Myprintf("%v", node.Hints) } } // SimpleTableExpr represents a simple table expression. type SimpleTableExpr interface { ISimpleTableExpr() SQLNode } func (*TableName) ISimpleTableExpr() {} func (*Subquery) ISimpleTableExpr() {} // TableName represents a table name. type TableName struct { Name, Qualifier []byte } func (node *TableName) Format(buf *TrackedBuffer) { if node.Qualifier != nil { escape(buf, node.Qualifier) buf.Myprintf(".") } escape(buf, node.Name) } // ParenTableExpr represents a parenthesized TableExpr. type ParenTableExpr struct { Expr TableExpr } func (node *ParenTableExpr) Format(buf *TrackedBuffer) { buf.Myprintf("(%v)", node.Expr) } // JoinTableExpr represents a TableExpr that's a JOIN operation. type JoinTableExpr struct { LeftExpr TableExpr Join string RightExpr TableExpr On BoolExpr } // JoinTableExpr.Join const ( AST_JOIN = "join" AST_STRAIGHT_JOIN = "straight_join" AST_LEFT_JOIN = "left join" AST_RIGHT_JOIN = "right join" AST_CROSS_JOIN = "cross join" AST_NATURAL_JOIN = "natural join" ) func (node *JoinTableExpr) Format(buf *TrackedBuffer) { buf.Myprintf("%v %s %v", node.LeftExpr, node.Join, node.RightExpr) if node.On != nil { buf.Myprintf(" on %v", node.On) } } // IndexHints represents a list of index hints. type IndexHints struct { Type string Indexes [][]byte } const ( AST_USE = "use" AST_IGNORE = "ignore" AST_FORCE = "force" ) func (node *IndexHints) Format(buf *TrackedBuffer) { buf.Myprintf(" %s index ", node.Type) prefix := "(" for _, n := range node.Indexes { buf.Myprintf("%s%s", prefix, n) prefix = ", " } buf.Myprintf(")") } // Where represents a WHERE or HAVING clause. type Where struct { Type string Expr BoolExpr } // Where.Type const ( AST_WHERE = "where" AST_HAVING = "having" ) // NewWhere creates a WHERE or HAVING clause out // of a BoolExpr. If the expression is nil, it returns nil. func NewWhere(typ string, expr BoolExpr) *Where { if expr == nil { return nil } return &Where{Type: typ, Expr: expr} } func (node *Where) Format(buf *TrackedBuffer) { if node == nil || node.Expr == nil { return } buf.Myprintf(" %s %v", node.Type, node.Expr) } // From represents a FROM clause type From struct { Type string Expr TableExprs } // From.Type const ( AST_FROM = "from" ) // NewFrom creates a FROM clause // of a table list expression. If the expression is nil, it returns nil. func NewFrom(typ string, expr TableExprs) *From { if expr == nil { return nil } return &From{Type: typ, Expr: expr} } func (node *From) Format(buf *TrackedBuffer) { if node == nil || node.Expr == nil { return } buf.Myprintf("%v", node.Expr) } // Expr represents an expression. type Expr interface { IExpr() SQLNode } func (*AndExpr) IExpr() {} func (*OrExpr) IExpr() {} func (*NotExpr) IExpr() {} func (*ParenBoolExpr) IExpr() {} func (*ComparisonExpr) IExpr() {} func (*RangeCond) IExpr() {} func (*NullCheck) IExpr() {} func (*ExistsExpr) IExpr() {} func (*KeyrangeExpr) IExpr() {} func (StrVal) IExpr() {} func (NumVal) IExpr() {} func (ValArg) IExpr() {} func (*NullVal) IExpr() {} func (*ColName) IExpr() {} func (ValTuple) IExpr() {} func (*Subquery) IExpr() {} func (ListArg) IExpr() {} func (*BinaryExpr) IExpr() {} func (*UnaryExpr) IExpr() {} func (*FuncExpr) IExpr() {} func (*CaseExpr) IExpr() {} // BoolExpr represents a boolean expression. type BoolExpr interface { IBoolExpr() Expr } func (*AndExpr) IBoolExpr() {} func (*OrExpr) IBoolExpr() {} func (*NotExpr) IBoolExpr() {} func (*ParenBoolExpr) IBoolExpr() {} func (*ComparisonExpr) IBoolExpr() {} func (*RangeCond) IBoolExpr() {} func (*NullCheck) IBoolExpr() {} func (*ExistsExpr) IBoolExpr() {} func (*KeyrangeExpr) IBoolExpr() {} // AndExpr represents an AND expression. type AndExpr struct { Left, Right BoolExpr } func (node *AndExpr) Format(buf *TrackedBuffer) { buf.Myprintf("%v and %v", node.Left, node.Right) } // OrExpr represents an OR expression. type OrExpr struct { Left, Right BoolExpr } func (node *OrExpr) Format(buf *TrackedBuffer) { buf.Myprintf("%v or %v", node.Left, node.Right) } // NotExpr represents a NOT expression. type NotExpr struct { Expr BoolExpr } func (node *NotExpr) Format(buf *TrackedBuffer) { buf.Myprintf("not %v", node.Expr) } // ParenBoolExpr represents a parenthesized boolean expression. type ParenBoolExpr struct { Expr BoolExpr } func (node *ParenBoolExpr) Format(buf *TrackedBuffer) { buf.Myprintf("(%v)", node.Expr) } // ComparisonExpr represents a two-value comparison expression. type ComparisonExpr struct { Operator string Left, Right ValExpr } // ComparisonExpr.Operator const ( AST_EQ = "=" AST_LT = "<" AST_GT = ">" AST_LE = "<=" AST_GE = ">=" AST_NE = "!=" AST_NSE = "<=>" AST_IN = "in" AST_NOT_IN = "not in" AST_LIKE = "like" AST_NOT_LIKE = "not like" ) func (node *ComparisonExpr) Format(buf *TrackedBuffer) { buf.Myprintf("%v %s %v", node.Left, node.Operator, node.Right) } // RangeCond represents a BETWEEN or a NOT BETWEEN expression. type RangeCond struct { Operator string Left ValExpr From, To ValExpr } // RangeCond.Operator const ( AST_BETWEEN = "between" AST_NOT_BETWEEN = "not between" ) func (node *RangeCond) Format(buf *TrackedBuffer) { buf.Myprintf("%v %s %v and %v", node.Left, node.Operator, node.From, node.To) } // NullCheck represents an IS NULL or an IS NOT NULL expression. type NullCheck struct { Operator string Expr ValExpr } // NullCheck.Operator const ( AST_IS_NULL = "is null" AST_IS_NOT_NULL = "is not null" ) func (node *NullCheck) Format(buf *TrackedBuffer) { buf.Myprintf("%v %s", node.Expr, node.Operator) } // ExistsExpr represents an EXISTS expression. type ExistsExpr struct { Subquery *Subquery } func (node *ExistsExpr) Format(buf *TrackedBuffer) { buf.Myprintf("exists %v", node.Subquery) } // KeyrangeExpr represents a KEYRANGE expression. type KeyrangeExpr struct { Start, End ValExpr } func (node *KeyrangeExpr) Format(buf *TrackedBuffer) { buf.Myprintf("keyrange(%v, %v)", node.Start, node.End) } // ValExpr represents a value expression. type ValExpr interface { IValExpr() Expr } func (StrVal) IValExpr() {} func (NumVal) IValExpr() {} func (ValArg) IValExpr() {} func (*NullVal) IValExpr() {} func (*ColName) IValExpr() {} func (ValTuple) IValExpr() {} func (*Subquery) IValExpr() {} func (ListArg) IValExpr() {} func (*BinaryExpr) IValExpr() {} func (*UnaryExpr) IValExpr() {} func (*FuncExpr) IValExpr() {} func (*CaseExpr) IValExpr() {} // StrVal represents a string value. type StrVal []byte func (node StrVal) Format(buf *TrackedBuffer) { s := sqltypes.MakeString([]byte(node)) s.EncodeSql(buf) } // NumVal represents a number. type NumVal []byte func (node NumVal) Format(buf *TrackedBuffer) { buf.Myprintf("%s", []byte(node)) } // ValArg represents a named bind var argument. type ValArg []byte func (node ValArg) Format(buf *TrackedBuffer) { buf.WriteArg(string(node)) } // NullVal represents a NULL value. type NullVal struct{} func (node *NullVal) Format(buf *TrackedBuffer) { buf.Myprintf("null") } // ColName represents a column name. type ColName struct { Name, Qualifier []byte } func (node *ColName) Format(buf *TrackedBuffer) { if node.Qualifier != nil { escape(buf, node.Qualifier) buf.Myprintf(".") } escape(buf, node.Name) } func escape(buf *TrackedBuffer, name []byte) { if _, ok := keywords[string(name)]; ok { buf.Myprintf("`%s`", name) } else { buf.Myprintf("%s", name) } } // ColTuple represents a list of column values. // It can be ValTuple, Subquery, ListArg. type ColTuple interface { IColTuple() ValExpr } func (ValTuple) IColTuple() {} func (*Subquery) IColTuple() {} func (ListArg) IColTuple() {} // ValTuple represents a tuple of actual values. type ValTuple ValExprs func (node ValTuple) Format(buf *TrackedBuffer) { buf.Myprintf("(%v)", ValExprs(node)) } // ValExprs represents a list of value expressions. // It's not a valid expression because it's not parenthesized. type ValExprs []ValExpr func (node ValExprs) Format(buf *TrackedBuffer) { var prefix string for _, n := range node { buf.Myprintf("%s%v", prefix, n) prefix = ", " } } // Subquery represents a subquery. type Subquery struct { Select SelectStatement } func (node *Subquery) Format(buf *TrackedBuffer) { buf.Myprintf("(%v)", node.Select) } // ListArg represents a named list argument. type ListArg []byte func (node ListArg) Format(buf *TrackedBuffer) { buf.WriteArg(string(node)) } // BinaryExpr represents a binary value expression. type BinaryExpr struct { Operator byte Left, Right Expr } // BinaryExpr.Operator const ( AST_BITAND = '&' AST_BITOR = '|' AST_BITXOR = '^' AST_PLUS = '+' AST_MINUS = '-' AST_MULT = '*' AST_DIV = '/' AST_MOD = '%' ) func (node *BinaryExpr) Format(buf *TrackedBuffer) { buf.Myprintf("%v%c%v", node.Left, node.Operator, node.Right) } // UnaryExpr represents a unary value expression. type UnaryExpr struct { Operator byte Expr Expr } // UnaryExpr.Operator const ( AST_UPLUS = '+' AST_UMINUS = '-' AST_TILDA = '~' ) func (node *UnaryExpr) Format(buf *TrackedBuffer) { buf.Myprintf("%c%v", node.Operator, node.Expr) } // FuncExpr represents a function call. type FuncExpr struct { Name []byte Distinct bool Exprs SelectExprs } func (node *FuncExpr) Format(buf *TrackedBuffer) { var distinct string if node.Distinct { distinct = "distinct " } buf.Myprintf("%s(%s%v)", node.Name, distinct, node.Exprs) } // Aggregates is a map of all aggregate functions. var Aggregates = map[string]bool{ "avg": true, "bit_and": true, "bit_or": true, "bit_xor": true, "count": true, "group_concat": true, "max": true, "min": true, "std": true, "stddev_pop": true, "stddev_samp": true, "stddev": true, "sum": true, "var_pop": true, "var_samp": true, "variance": true, } func (node *FuncExpr) IsAggregate() bool { return Aggregates[string(node.Name)] } // CaseExpr represents a CASE expression. type CaseExpr struct { Expr ValExpr Whens []*When Else ValExpr } func (node *CaseExpr) Format(buf *TrackedBuffer) { buf.Myprintf("case ") if node.Expr != nil { buf.Myprintf("%v ", node.Expr) } for _, when := range node.Whens { buf.Myprintf("%v ", when) } if node.Else != nil { buf.Myprintf("else %v ", node.Else) } buf.Myprintf("end") } // When represents a WHEN sub-expression. type When struct { Cond BoolExpr Val ValExpr } func (node *When) Format(buf *TrackedBuffer) { buf.Myprintf("when %v then %v", node.Cond, node.Val) } // GroupBy represents a GROUP BY clause. type GroupBy []ValExpr func (node GroupBy) Format(buf *TrackedBuffer) { prefix := " group by " for _, n := range node { buf.Myprintf("%s%v", prefix, n) prefix = ", " } } // OrderBy represents an ORDER By clause. type OrderBy []*Order func (node OrderBy) Format(buf *TrackedBuffer) { prefix := " order by " for _, n := range node { buf.Myprintf("%s%v", prefix, n) prefix = ", " } } // Order represents an ordering expression. type Order struct { Expr ValExpr Direction string } // Order.Direction const ( AST_ASC = "asc" AST_DESC = "desc" ) func (node *Order) Format(buf *TrackedBuffer) { buf.Myprintf("%v %s", node.Expr, node.Direction) } // Limit represents a LIMIT clause. type Limit struct { Offset, Rowcount ValExpr } func (node *Limit) Format(buf *TrackedBuffer) { if node == nil { return } buf.Myprintf(" limit ") if node.Offset != nil { buf.Myprintf("%v, ", node.Offset) } buf.Myprintf("%v", node.Rowcount) } // Limits returns the values of the LIMIT clause as interfaces. // The returned values can be nil for absent field, string for // bind variable names, or int64 for an actual number. // Otherwise, it's an error. func (node *Limit) Limits() (offset, rowcount interface{}, err error) { if node == nil { return nil, nil, nil } switch v := node.Offset.(type) { case NumVal: o, err := strconv.ParseInt(string(v), 0, 64) if err != nil { return nil, nil, err } if o < 0 { return nil, nil, fmt.Errorf("negative offset: %d", o) } offset = o case ValArg: offset = string(v) case nil: // pass default: return nil, nil, fmt.Errorf("unexpected node for offset: %+v", v) } switch v := node.Rowcount.(type) { case NumVal: rc, err := strconv.ParseInt(string(v), 0, 64) if err != nil { return nil, nil, err } if rc < 0 { return nil, nil, fmt.Errorf("negative limit: %d", rc) } rowcount = rc case ValArg: rowcount = string(v) default: return nil, nil, fmt.Errorf("unexpected node for rowcount: %+v", v) } return offset, rowcount, nil } // Values represents a VALUES clause. type Values []RowTuple func (node Values) Format(buf *TrackedBuffer) { prefix := "values " for _, n := range node { buf.Myprintf("%s%v", prefix, n) prefix = ", " } } // RowTuple represents a row of values. It can be ValTuple, Subquery. type RowTuple interface { IRowTuple() ValExpr } func (ValTuple) IRowTuple() {} func (*Subquery) IRowTuple() {} // UpdateExprs represents a list of update expressions. type UpdateExprs []*UpdateExpr func (node UpdateExprs) Format(buf *TrackedBuffer) { var prefix string for _, n := range node { buf.Myprintf("%s%v", prefix, n) prefix = ", " } } // UpdateExpr represents an update expression. type UpdateExpr struct { Name *ColName Expr ValExpr } func (node *UpdateExpr) Format(buf *TrackedBuffer) { buf.Myprintf("%v = %v", node.Name, node.Expr) } // OnDup represents an ON DUPLICATE KEY clause. type OnDup UpdateExprs func (node OnDup) Format(buf *TrackedBuffer) { if node == nil { return } buf.Myprintf(" on duplicate key update %v", UpdateExprs(node)) } textql-2.0.3/sqlparser/parsed_query.go000066400000000000000000000076711263444277100201300ustar00rootroot00000000000000// Copyright 2012, Google Inc. All rights reserved. // Use of this source code is governed by a BSD-style // license that can be found in the LICENSE file. package sqlparser import ( "bytes" "encoding/json" "errors" "fmt" "github.com/dinedal/textql/sqlparser/sqltypes" ) type bindLocation struct { offset, length int } type ParsedQuery struct { Query string bindLocations []bindLocation } type EncoderFunc func(value interface{}) ([]byte, error) func (pq *ParsedQuery) GenerateQuery(bindVariables map[string]interface{}) ([]byte, error) { if len(pq.bindLocations) == 0 { return []byte(pq.Query), nil } buf := bytes.NewBuffer(make([]byte, 0, len(pq.Query))) current := 0 for _, loc := range pq.bindLocations { buf.WriteString(pq.Query[current:loc.offset]) name := pq.Query[loc.offset : loc.offset+loc.length] supplied, _, err := FetchBindVar(name, bindVariables) if err != nil { return nil, err } if err := EncodeValue(buf, supplied); err != nil { return nil, err } current = loc.offset + loc.length } buf.WriteString(pq.Query[current:]) return buf.Bytes(), nil } func (pq *ParsedQuery) MarshalJSON() ([]byte, error) { return json.Marshal(pq.Query) } func EncodeValue(buf *bytes.Buffer, value interface{}) error { switch bindVal := value.(type) { case nil: buf.WriteString("null") case []sqltypes.Value: for i := 0; i < len(bindVal); i++ { if i != 0 { buf.WriteString(", ") } if err := EncodeValue(buf, bindVal[i]); err != nil { return err } } case [][]sqltypes.Value: for i := 0; i < len(bindVal); i++ { if i != 0 { buf.WriteString(", ") } buf.WriteByte('(') if err := EncodeValue(buf, bindVal[i]); err != nil { return err } buf.WriteByte(')') } case []interface{}: buf.WriteByte('(') for i, v := range bindVal { if i != 0 { buf.WriteString(", ") } if err := EncodeValue(buf, v); err != nil { return err } } buf.WriteByte(')') case TupleEqualityList: if err := bindVal.Encode(buf); err != nil { return err } default: v, err := sqltypes.BuildValue(bindVal) if err != nil { return err } v.EncodeSql(buf) } return nil } type TupleEqualityList struct { Columns []string Rows [][]sqltypes.Value } func (tpl *TupleEqualityList) Encode(buf *bytes.Buffer) error { if len(tpl.Rows) == 0 { return errors.New("cannot encode with 0 rows") } if len(tpl.Columns) == 1 { return tpl.encodeAsIN(buf) } return tpl.encodeAsEquality(buf) } func (tpl *TupleEqualityList) encodeAsIN(buf *bytes.Buffer) error { buf.WriteString(tpl.Columns[0]) buf.WriteString(" in (") for i, r := range tpl.Rows { if len(r) != 1 { return errors.New("values don't match column count") } if i != 0 { buf.WriteString(", ") } if err := EncodeValue(buf, r); err != nil { return err } } buf.WriteByte(')') return nil } func (tpl *TupleEqualityList) encodeAsEquality(buf *bytes.Buffer) error { for i, r := range tpl.Rows { if i != 0 { buf.WriteString(" or ") } buf.WriteString("(") for j, c := range tpl.Columns { if j != 0 { buf.WriteString(" and ") } buf.WriteString(c) buf.WriteString(" = ") if err := EncodeValue(buf, r[j]); err != nil { return err } } buf.WriteByte(')') } return nil } func FetchBindVar(name string, bindVariables map[string]interface{}) (val interface{}, isList bool, err error) { name = name[1:] if name[0] == ':' { name = name[1:] isList = true } supplied, ok := bindVariables[name] if !ok { return nil, false, fmt.Errorf("missing bind var %s", name) } list, gotList := supplied.([]interface{}) if isList { if !gotList { return nil, false, fmt.Errorf("unexpected list arg type %T for key %s", supplied, name) } if len(list) == 0 { return nil, false, fmt.Errorf("empty list supplied for %s", name) } return list, true, nil } if gotList { return nil, false, fmt.Errorf("unexpected arg type %T for key %s", supplied, name) } return supplied, false, nil } textql-2.0.3/sqlparser/sql.go000066400000000000000000001171651263444277100162240ustar00rootroot00000000000000//line sql.y:6 package sqlparser import __yyfmt__ "fmt" //line sql.y:6 import "bytes" func SetParseTree(yylex interface{}, stmt Statement) { yylex.(*Tokenizer).ParseTree = stmt } func SetAllowComments(yylex interface{}, allow bool) { yylex.(*Tokenizer).AllowComments = allow } func ForceEOF(yylex interface{}) { yylex.(*Tokenizer).ForceEOF = true } var ( SHARE = []byte("share") MODE = []byte("mode") IF_BYTES = []byte("if") VALUES_BYTES = []byte("values") ) //line sql.y:31 type yySymType struct { yys int empty struct{} statement Statement selStmt SelectStatement byt byte bytes []byte bytes2 [][]byte str string selectExprs SelectExprs selectExpr SelectExpr columns Columns colName *ColName tableExprs TableExprs tableExpr TableExpr smTableExpr SimpleTableExpr tableName *TableName indexHints *IndexHints expr Expr boolExpr BoolExpr valExpr ValExpr colTuple ColTuple valExprs ValExprs values Values rowTuple RowTuple subquery *Subquery caseExpr *CaseExpr whens []*When when *When orderBy OrderBy order *Order limit *Limit insRows InsertRows updateExprs UpdateExprs updateExpr *UpdateExpr } const LEX_ERROR = 57346 const SELECT = 57347 const INSERT = 57348 const UPDATE = 57349 const DELETE = 57350 const FROM = 57351 const WHERE = 57352 const GROUP = 57353 const HAVING = 57354 const ORDER = 57355 const BY = 57356 const LIMIT = 57357 const FOR = 57358 const ALL = 57359 const DISTINCT = 57360 const AS = 57361 const EXISTS = 57362 const IN = 57363 const IS = 57364 const LIKE = 57365 const BETWEEN = 57366 const NULL = 57367 const ASC = 57368 const DESC = 57369 const VALUES = 57370 const INTO = 57371 const DUPLICATE = 57372 const KEY = 57373 const DEFAULT = 57374 const SET = 57375 const LOCK = 57376 const KEYRANGE = 57377 const ID = 57378 const STRING = 57379 const NUMBER = 57380 const VALUE_ARG = 57381 const LIST_ARG = 57382 const COMMENT = 57383 const LE = 57384 const GE = 57385 const NE = 57386 const NULL_SAFE_EQUAL = 57387 const UNION = 57388 const MINUS = 57389 const EXCEPT = 57390 const INTERSECT = 57391 const JOIN = 57392 const STRAIGHT_JOIN = 57393 const LEFT = 57394 const RIGHT = 57395 const INNER = 57396 const OUTER = 57397 const CROSS = 57398 const NATURAL = 57399 const USE = 57400 const FORCE = 57401 const ON = 57402 const OR = 57403 const AND = 57404 const NOT = 57405 const UNARY = 57406 const CASE = 57407 const WHEN = 57408 const THEN = 57409 const ELSE = 57410 const END = 57411 const CREATE = 57412 const ALTER = 57413 const DROP = 57414 const RENAME = 57415 const ANALYZE = 57416 const TABLE = 57417 const INDEX = 57418 const VIEW = 57419 const TO = 57420 const IGNORE = 57421 const IF = 57422 const UNIQUE = 57423 const USING = 57424 const SHOW = 57425 const DESCRIBE = 57426 const EXPLAIN = 57427 var yyToknames = []string{ "LEX_ERROR", "SELECT", "INSERT", "UPDATE", "DELETE", "FROM", "WHERE", "GROUP", "HAVING", "ORDER", "BY", "LIMIT", "FOR", "ALL", "DISTINCT", "AS", "EXISTS", "IN", "IS", "LIKE", "BETWEEN", "NULL", "ASC", "DESC", "VALUES", "INTO", "DUPLICATE", "KEY", "DEFAULT", "SET", "LOCK", "KEYRANGE", "ID", "STRING", "NUMBER", "VALUE_ARG", "LIST_ARG", "COMMENT", "LE", "GE", "NE", "NULL_SAFE_EQUAL", "'('", "'='", "'<'", "'>'", "'~'", "UNION", "MINUS", "EXCEPT", "INTERSECT", "','", "JOIN", "STRAIGHT_JOIN", "LEFT", "RIGHT", "INNER", "OUTER", "CROSS", "NATURAL", "USE", "FORCE", "ON", "OR", "AND", "NOT", "'&'", "'|'", "'^'", "'+'", "'-'", "'*'", "'/'", "'%'", "'.'", "UNARY", "CASE", "WHEN", "THEN", "ELSE", "END", "CREATE", "ALTER", "DROP", "RENAME", "ANALYZE", "TABLE", "INDEX", "VIEW", "TO", "IGNORE", "IF", "UNIQUE", "USING", "SHOW", "DESCRIBE", "EXPLAIN", } var yyStatenames = []string{} const yyEofCode = 1 const yyErrCode = 2 const yyMaxDepth = 200 //line yacctab:1 var yyExca = []int{ -1, 1, 1, -1, -2, 0, } const yyNprod = 207 const yyPrivate = 57344 var yyTokenNames []string var yyStates []string const yyLast = 678 var yyAct = []int{ 51, 122, 141, 363, 359, 342, 49, 48, 83, 314, 366, 280, 126, 334, 225, 159, 142, 42, 43, 125, 3, 163, 205, 174, 332, 60, 47, 90, 138, 381, 381, 37, 31, 32, 33, 34, 84, 85, 99, 98, 268, 94, 15, 17, 18, 19, 153, 146, 127, 381, 86, 340, 128, 91, 196, 29, 320, 91, 91, 219, 71, 196, 73, 121, 124, 76, 74, 77, 136, 330, 20, 144, 194, 38, 148, 383, 382, 150, 143, 329, 132, 154, 195, 328, 147, 230, 231, 232, 233, 234, 43, 235, 236, 43, 149, 380, 168, 339, 170, 302, 299, 82, 173, 251, 249, 181, 182, 197, 185, 186, 187, 188, 189, 190, 191, 192, 171, 172, 167, 304, 157, 78, 21, 22, 24, 23, 25, 176, 293, 295, 297, 198, 43, 43, 206, 26, 27, 28, 79, 80, 81, 206, 183, 255, 241, 99, 98, 152, 215, 109, 110, 111, 112, 113, 214, 209, 223, 216, 294, 218, 306, 203, 200, 202, 193, 161, 207, 97, 96, 210, 274, 111, 112, 113, 99, 98, 98, 198, 227, 211, 335, 244, 245, 327, 325, 224, 184, 240, 242, 272, 335, 167, 316, 275, 170, 222, 287, 326, 248, 291, 285, 288, 243, 43, 176, 286, 290, 169, 160, 144, 289, 260, 144, 211, 264, 373, 143, 354, 196, 143, 252, 228, 265, 212, 256, 92, 262, 254, 263, 155, 129, 352, 278, 250, 258, 230, 231, 232, 233, 234, 279, 235, 236, 271, 273, 270, 166, 259, 301, 351, 283, 284, 15, 211, 167, 167, 165, 305, 350, 144, 144, 310, 31, 32, 33, 34, 143, 312, 177, 317, 134, 91, 133, 131, 175, 130, 313, 309, 318, 303, 158, 239, 96, 166, 198, 123, 346, 345, 298, 95, 322, 59, 296, 165, 321, 324, 277, 276, 238, 323, 261, 220, 331, 56, 57, 58, 96, 217, 333, 213, 139, 156, 151, 16, 364, 337, 208, 370, 353, 15, 137, 247, 379, 341, 338, 266, 29, 178, 348, 179, 180, 221, 365, 347, 87, 343, 344, 282, 315, 281, 226, 144, 308, 349, 160, 357, 360, 356, 355, 88, 140, 367, 367, 367, 361, 384, 378, 362, 15, 36, 267, 371, 368, 369, 72, 319, 269, 75, 377, 145, 311, 257, 374, 358, 385, 360, 375, 376, 386, 35, 388, 387, 389, 253, 201, 144, 54, 390, 135, 391, 204, 59, 143, 53, 65, 50, 52, 67, 68, 69, 70, 55, 41, 56, 57, 58, 336, 307, 100, 44, 292, 164, 46, 229, 162, 40, 63, 237, 93, 30, 106, 107, 108, 109, 110, 111, 112, 113, 89, 14, 13, 12, 11, 10, 9, 45, 8, 7, 6, 61, 62, 39, 5, 4, 2, 1, 66, 54, 0, 0, 0, 0, 59, 0, 0, 65, 0, 0, 0, 0, 0, 64, 55, 41, 56, 57, 58, 199, 0, 372, 0, 0, 0, 46, 0, 0, 0, 63, 0, 0, 0, 0, 0, 15, 106, 107, 108, 109, 110, 111, 112, 113, 0, 0, 0, 0, 45, 0, 54, 0, 61, 62, 39, 59, 0, 0, 65, 66, 0, 0, 0, 0, 0, 55, 123, 56, 57, 58, 54, 0, 0, 0, 64, 59, 46, 0, 65, 0, 63, 0, 0, 0, 0, 55, 123, 56, 57, 58, 0, 0, 0, 0, 0, 15, 46, 0, 0, 45, 63, 0, 0, 61, 62, 0, 0, 0, 0, 0, 66, 0, 0, 0, 0, 59, 0, 0, 65, 45, 0, 0, 0, 61, 62, 64, 123, 56, 57, 58, 66, 0, 0, 0, 0, 59, 129, 0, 65, 0, 63, 0, 0, 0, 0, 64, 123, 56, 57, 58, 0, 0, 0, 0, 0, 0, 129, 0, 0, 0, 63, 0, 0, 61, 62, 101, 105, 103, 104, 300, 66, 106, 107, 108, 109, 110, 111, 112, 113, 0, 0, 0, 0, 61, 62, 64, 117, 118, 119, 120, 66, 114, 115, 116, 246, 0, 106, 107, 108, 109, 110, 111, 112, 113, 0, 64, 0, 0, 0, 0, 0, 0, 0, 102, 106, 107, 108, 109, 110, 111, 112, 113, 106, 107, 108, 109, 110, 111, 112, 113, } var yyPact = []int{ 37, -1000, -1000, 211, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, 427, -1000, -1000, -1000, -1000, -30, -27, 31, 48, 11, -1000, -1000, -1000, -1000, 353, 317, -1000, -1000, -1000, 308, -1000, 216, -1000, -1000, 270, 89, 107, 592, -1000, 498, 478, -1000, -1000, -1000, 558, 229, 227, -1000, 226, 224, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, 558, 291, 274, 341, 249, -48, -7, 246, -1000, 4, 246, -1000, 276, -49, 246, -49, 275, -1000, -1000, -1000, -1000, -1000, 427, 239, 334, 427, 210, -1000, -1000, 246, -1000, 132, 498, 498, 558, 228, 306, 558, 558, 117, 558, 558, 558, 558, 558, 558, 558, 558, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, 592, 86, -29, -19, 6, 592, -1000, 538, 366, 427, -1000, 353, 266, 53, 600, 274, 283, 77, 274, 158, -1000, 176, -1000, 273, 85, 246, -1000, 271, -1000, -34, 265, 311, 129, 246, -1000, 216, -1000, 329, 498, -1000, 166, 179, 262, 247, 66, -1000, -1000, -1000, -1000, -1000, 108, 600, -1000, 538, -1000, -1000, 228, 558, 558, 600, 574, -1000, 296, 76, 76, 76, 96, 96, -1000, -1000, -1000, 246, -1000, -1000, 558, -1000, 600, -1000, 3, 427, 2, 165, 60, -1000, 498, 201, 249, 264, 334, 249, 558, -1000, 305, -57, -1000, 157, -1000, 261, -1000, -1000, 260, -1000, 334, 327, 323, 107, 210, 210, -1000, -1000, 144, 140, 154, 150, 143, 64, -1000, 256, 29, 252, -1, -1000, 600, 549, 558, -1000, 600, -1000, -2, -1000, 266, 35, -1000, 558, 78, 314, 249, 249, 198, -1000, 325, -1000, 600, -1000, -1000, 126, 246, -1000, -37, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, 329, 325, 498, 558, 179, 118, -1000, 141, -1000, 127, -1000, -1000, -1000, -1000, -8, -12, -22, -1000, -1000, -1000, -1000, 558, 600, -1000, -77, -1000, 600, 558, 114, 184, 211, 124, -4, -1000, 325, 320, 322, 251, -1000, -1000, 250, -1000, 327, 320, 107, 163, 498, -1000, -1000, 212, 203, 185, 600, -1000, 600, -1000, 288, 162, -1000, -1000, -1000, 249, 320, -1000, 558, 558, -1000, -1000, 325, 298, 107, 246, 246, 246, 286, 184, -1000, -1000, 414, 160, -1000, 350, -1000, 320, -1000, 349, 301, -6, -1000, -25, -26, 348, -1000, 558, 558, -1000, -1000, -1000, 298, -1000, 246, -1000, 246, -1000, -1000, 249, 600, -1000, -1000, 246, -1000, 158, -1000, } var yyPgo = []int{ 0, 445, 444, 19, 443, 442, 438, 437, 436, 434, 433, 432, 431, 430, 429, 379, 428, 419, 313, 31, 73, 418, 417, 415, 414, 21, 27, 413, 411, 28, 410, 10, 15, 17, 409, 408, 407, 26, 1, 23, 12, 406, 6, 396, 25, 395, 7, 393, 390, 22, 388, 383, 14, 11, 9, 373, 4, 372, 5, 3, 371, 370, 13, 2, 16, 147, 369, 367, 366, 365, 364, 360, 0, 8, 359, } var yyR1 = []int{ 0, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 4, 3, 3, 5, 5, 6, 7, 8, 9, 9, 9, 10, 10, 10, 11, 12, 12, 12, 13, 14, 14, 14, 74, 15, 16, 16, 17, 17, 17, 17, 17, 18, 18, 19, 19, 20, 20, 20, 23, 23, 21, 21, 21, 24, 24, 25, 25, 25, 25, 22, 22, 22, 27, 27, 27, 27, 27, 27, 27, 27, 27, 28, 28, 28, 29, 29, 30, 30, 30, 30, 31, 31, 26, 26, 32, 32, 33, 33, 33, 33, 33, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 35, 35, 35, 35, 35, 35, 35, 39, 39, 39, 44, 40, 40, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 43, 43, 45, 45, 45, 47, 50, 50, 48, 48, 49, 51, 51, 46, 46, 37, 37, 37, 37, 52, 52, 53, 53, 54, 54, 55, 55, 56, 57, 57, 57, 58, 58, 58, 59, 59, 59, 60, 60, 61, 61, 62, 62, 36, 36, 41, 41, 42, 42, 63, 63, 64, 65, 65, 66, 66, 67, 67, 68, 68, 68, 68, 68, 69, 69, 70, 70, 71, 71, 72, 73, } var yyR2 = []int{ 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 9, 11, 3, 7, 7, 8, 7, 3, 5, 8, 4, 6, 7, 4, 5, 4, 5, 5, 3, 2, 2, 2, 0, 2, 0, 2, 1, 2, 1, 1, 1, 0, 1, 1, 3, 1, 2, 3, 1, 1, 0, 1, 2, 1, 3, 3, 3, 3, 5, 0, 1, 2, 1, 1, 2, 3, 2, 3, 2, 2, 2, 1, 3, 1, 1, 3, 0, 5, 5, 5, 1, 3, 0, 2, 0, 2, 1, 3, 3, 2, 3, 3, 3, 4, 3, 4, 5, 6, 3, 4, 2, 6, 1, 1, 1, 1, 1, 1, 1, 3, 1, 1, 3, 1, 3, 1, 1, 1, 3, 3, 3, 3, 3, 3, 3, 3, 2, 3, 4, 5, 4, 1, 1, 1, 1, 1, 1, 5, 0, 1, 1, 2, 4, 0, 2, 1, 3, 1, 1, 1, 1, 0, 3, 0, 2, 0, 3, 1, 3, 2, 0, 1, 1, 0, 2, 4, 0, 2, 4, 0, 3, 1, 3, 0, 5, 2, 1, 1, 3, 3, 1, 1, 3, 3, 0, 2, 0, 3, 0, 1, 1, 1, 1, 1, 1, 0, 1, 0, 1, 0, 2, 1, 0, } var yyChk = []int{ -1000, -1, -2, -3, -4, -5, -6, -7, -8, -9, -10, -11, -12, -13, -14, 5, -18, 6, 7, 8, 33, 85, 86, 88, 87, 89, 98, 99, 100, 18, -17, 51, 52, 53, 54, -15, -74, -19, -20, 75, -23, 36, -33, -38, -34, 69, 46, -37, -46, -42, -45, -72, -43, -47, 20, 35, 37, 38, 39, 25, -44, 73, 74, 50, 95, 28, 80, -15, -15, -15, -15, 90, -70, 92, 96, -67, 92, 94, 90, 90, 91, 92, 90, -73, -73, -73, -3, 17, -18, -16, -26, 55, 9, -21, -72, 19, 36, 78, 68, 67, -35, 21, 69, 23, 24, 22, 70, 71, 72, 73, 74, 75, 76, 77, 47, 48, 49, 42, 43, 44, 45, -33, -38, 36, -33, -3, -40, -38, -38, 46, 46, 46, -44, 46, 46, -50, -38, 29, -29, 36, 9, -63, -64, -46, -72, -66, 95, 91, -72, 90, -72, 36, -65, 95, -72, -65, 36, -19, 41, -32, 10, -20, -24, -25, -28, 46, 36, -44, -72, 75, -72, -33, -33, -38, -39, 46, -44, 40, 21, 23, 24, -38, -38, 25, 69, -38, -38, -38, -38, -38, -38, -38, -38, 78, 101, 101, 55, 101, -38, 101, -19, 18, -19, -37, -48, -49, 81, -29, 33, 78, -29, 55, 47, 36, 69, -72, -73, 36, -73, 93, 36, 20, 66, -72, -26, -52, 11, -33, 55, -27, 56, 57, 58, 59, 60, 62, 63, -22, 36, 19, -25, 78, -40, -39, -38, -38, 68, 25, -38, 101, -19, 101, 55, -51, -49, 83, -33, -60, 33, 46, -63, 36, -32, -64, -38, -73, 20, -71, 97, -68, 88, 86, 32, 87, 13, 36, 36, 36, -73, -32, -53, 12, 14, -25, -25, 56, 61, 56, 61, 56, 56, 56, -30, 64, 94, 65, 36, 101, 36, 101, 68, -38, 101, -37, 84, -38, 82, -36, 28, -3, -63, -61, -46, -32, -54, 13, 66, -72, -73, -69, 93, -52, -54, -33, -40, 66, 56, 56, 91, 91, 91, -38, 101, -38, -62, 66, -41, -42, -62, 101, 55, -54, -58, 15, 14, 36, 36, -53, -58, -33, 46, 46, 46, 30, 55, -46, -58, -38, -55, -56, -38, -73, -54, -59, 16, 34, -31, -72, -31, -31, 31, -42, 55, 55, -57, 26, 27, -58, 7, 21, 101, 55, 101, 101, 7, -38, -56, -59, -72, -72, -63, -72, } var yyDef = []int{ 45, -2, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 36, 0, 36, 36, 36, 36, 201, 192, 0, 0, 0, 206, 206, 206, 46, 0, 40, 42, 43, 44, 45, 38, 86, 47, 49, 54, 205, 52, 53, 90, 0, 0, 119, 120, 121, 0, 149, 0, 135, 0, 0, 151, 152, 153, 154, 184, 138, 139, 140, 136, 137, 142, 0, 0, 0, 0, 190, 0, 0, 202, 0, 0, 193, 0, 188, 0, 188, 0, 33, 34, 35, 16, 41, 0, 37, 88, 0, 0, 50, 55, 0, 205, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 106, 107, 108, 109, 110, 111, 112, 93, 0, 205, 0, 0, 0, 117, 130, 0, 0, 0, 104, 0, 0, 0, 143, 0, 0, 78, 0, 21, 185, 0, 149, 0, 0, 0, 206, 0, 206, 0, 0, 0, 0, 0, 32, 86, 39, 155, 0, 48, 87, 57, 63, 0, 75, 77, 56, 51, 150, 91, 92, 95, 96, 0, 114, 115, 0, 0, 0, 98, 0, 102, 0, 122, 123, 124, 125, 126, 127, 128, 129, 0, 94, 116, 0, 183, 117, 131, 0, 0, 0, 0, 147, 144, 0, 173, 0, 0, 88, 0, 0, 206, 0, 203, 24, 0, 27, 0, 29, 189, 0, 206, 88, 157, 0, 89, 0, 0, 66, 67, 0, 0, 0, 0, 0, 80, 64, 0, 0, 0, 0, 97, 99, 0, 0, 103, 118, 132, 0, 134, 0, 0, 145, 0, 0, 0, 0, 0, 88, 79, 159, 186, 187, 22, 191, 0, 0, 206, 199, 194, 195, 196, 197, 198, 28, 30, 31, 155, 159, 0, 0, 58, 61, 68, 0, 70, 0, 72, 73, 74, 59, 0, 0, 0, 65, 60, 76, 113, 0, 100, 133, 0, 141, 148, 0, 177, 0, 180, 177, 0, 175, 159, 167, 0, 0, 204, 25, 0, 200, 157, 167, 158, 156, 0, 69, 71, 0, 0, 0, 101, 105, 146, 17, 0, 179, 181, 18, 174, 0, 167, 20, 0, 0, 206, 26, 159, 170, 62, 0, 0, 0, 0, 0, 176, 19, 168, 160, 161, 164, 23, 167, 14, 0, 0, 0, 84, 0, 0, 0, 182, 0, 0, 163, 165, 166, 170, 171, 0, 81, 0, 82, 83, 0, 169, 162, 15, 0, 85, 178, 172, } var yyTok1 = []int{ 1, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 77, 70, 3, 46, 101, 75, 73, 55, 74, 78, 76, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 48, 47, 49, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 72, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 71, 3, 50, } var yyTok2 = []int{ 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 51, 52, 53, 54, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, } var yyTok3 = []int{ 0, } //line yaccpar:1 /* parser for yacc output */ var yyDebug = 0 type yyLexer interface { Lex(lval *yySymType) int Error(s string) } const yyFlag = -1000 func yyTokname(c int) string { // 4 is TOKSTART above if c >= 4 && c-4 < len(yyToknames) { if yyToknames[c-4] != "" { return yyToknames[c-4] } } return __yyfmt__.Sprintf("tok-%v", c) } func yyStatname(s int) string { if s >= 0 && s < len(yyStatenames) { if yyStatenames[s] != "" { return yyStatenames[s] } } return __yyfmt__.Sprintf("state-%v", s) } func yylex1(lex yyLexer, lval *yySymType) int { c := 0 char := lex.Lex(lval) if char <= 0 { c = yyTok1[0] goto out } if char < len(yyTok1) { c = yyTok1[char] goto out } if char >= yyPrivate { if char < yyPrivate+len(yyTok2) { c = yyTok2[char-yyPrivate] goto out } } for i := 0; i < len(yyTok3); i += 2 { c = yyTok3[i+0] if c == char { c = yyTok3[i+1] goto out } } out: if c == 0 { c = yyTok2[1] /* unknown char */ } if yyDebug >= 3 { __yyfmt__.Printf("lex %s(%d)\n", yyTokname(c), uint(char)) } return c } func yyParse(yylex yyLexer) int { var yyn int var yylval yySymType var yyVAL yySymType yyS := make([]yySymType, yyMaxDepth) Nerrs := 0 /* number of errors */ Errflag := 0 /* error recovery flag */ yystate := 0 yychar := -1 yyp := -1 goto yystack ret0: return 0 ret1: return 1 yystack: /* put a state and value onto the stack */ if yyDebug >= 4 { __yyfmt__.Printf("char %v in %v\n", yyTokname(yychar), yyStatname(yystate)) } yyp++ if yyp >= len(yyS) { nyys := make([]yySymType, len(yyS)*2) copy(nyys, yyS) yyS = nyys } yyS[yyp] = yyVAL yyS[yyp].yys = yystate yynewstate: yyn = yyPact[yystate] if yyn <= yyFlag { goto yydefault /* simple state */ } if yychar < 0 { yychar = yylex1(yylex, &yylval) } yyn += yychar if yyn < 0 || yyn >= yyLast { goto yydefault } yyn = yyAct[yyn] if yyChk[yyn] == yychar { /* valid shift */ yychar = -1 yyVAL = yylval yystate = yyn if Errflag > 0 { Errflag-- } goto yystack } yydefault: /* default state action */ yyn = yyDef[yystate] if yyn == -2 { if yychar < 0 { yychar = yylex1(yylex, &yylval) } /* look through exception table */ xi := 0 for { if yyExca[xi+0] == -1 && yyExca[xi+1] == yystate { break } xi += 2 } for xi += 2; ; xi += 2 { yyn = yyExca[xi+0] if yyn < 0 || yyn == yychar { break } } yyn = yyExca[xi+1] if yyn < 0 { goto ret0 } } if yyn == 0 { /* error ... attempt to resume parsing */ switch Errflag { case 0: /* brand new error */ yylex.Error("syntax error") Nerrs++ if yyDebug >= 1 { __yyfmt__.Printf("%s", yyStatname(yystate)) __yyfmt__.Printf(" saw %s\n", yyTokname(yychar)) } fallthrough case 1, 2: /* incompletely recovered error ... try again */ Errflag = 3 /* find a state where "error" is a legal shift action */ for yyp >= 0 { yyn = yyPact[yyS[yyp].yys] + yyErrCode if yyn >= 0 && yyn < yyLast { yystate = yyAct[yyn] /* simulate a shift of "error" */ if yyChk[yystate] == yyErrCode { goto yystack } } /* the current p has no shift on "error", pop stack */ if yyDebug >= 2 { __yyfmt__.Printf("error recovery pops state %d\n", yyS[yyp].yys) } yyp-- } /* there is no state on the stack with an error shift ... abort */ goto ret1 case 3: /* no shift yet; clobber input char */ if yyDebug >= 2 { __yyfmt__.Printf("error recovery discards %s\n", yyTokname(yychar)) } if yychar == yyEofCode { goto ret1 } yychar = -1 goto yynewstate /* try again in the same state */ } } /* reduction by production yyn */ if yyDebug >= 2 { __yyfmt__.Printf("reduce %v in:\n\t%v\n", yyn, yyStatname(yystate)) } yynt := yyn yypt := yyp _ = yypt // guard against "declared and not used" yyp -= yyR2[yyn] yyVAL = yyS[yyp+1] /* consult goto table to find next state */ yyn = yyR1[yyn] yyg := yyPgo[yyn] yyj := yyg + yyS[yyp].yys + 1 if yyj >= yyLast { yystate = yyAct[yyg] } else { yystate = yyAct[yyj] if yyChk[yystate] != -yyn { yystate = yyAct[yyg] } } // dummy call; replaced with literal code switch yynt { case 1: //line sql.y:154 { SetParseTree(yylex, yyS[yypt-0].statement) } case 2: //line sql.y:160 { yyVAL.statement = yyS[yypt-0].selStmt } case 3: //line sql.y:164 { yyVAL.statement = yyS[yypt-0].selStmt } case 4: yyVAL.statement = yyS[yypt-0].statement case 5: yyVAL.statement = yyS[yypt-0].statement case 6: yyVAL.statement = yyS[yypt-0].statement case 7: yyVAL.statement = yyS[yypt-0].statement case 8: yyVAL.statement = yyS[yypt-0].statement case 9: yyVAL.statement = yyS[yypt-0].statement case 10: yyVAL.statement = yyS[yypt-0].statement case 11: yyVAL.statement = yyS[yypt-0].statement case 12: yyVAL.statement = yyS[yypt-0].statement case 13: yyVAL.statement = yyS[yypt-0].statement case 14: //line sql.y:180 { yyVAL.selStmt = &Select{Comments: nil, Distinct: yyS[yypt-8].str, SelectExprs: yyS[yypt-7].selectExprs, From: NewFrom(AST_FROM, yyS[yypt-6].tableExprs), Where: NewWhere(AST_WHERE, yyS[yypt-5].boolExpr), GroupBy: GroupBy(yyS[yypt-4].valExprs), Having: NewWhere(AST_HAVING, yyS[yypt-3].boolExpr), OrderBy: yyS[yypt-2].orderBy, Limit: yyS[yypt-1].limit, Lock: yyS[yypt-0].str} } case 15: //line sql.y:186 { yyVAL.selStmt = &Select{Comments: Comments(yyS[yypt-9].bytes2), Distinct: yyS[yypt-8].str, SelectExprs: yyS[yypt-7].selectExprs, From: NewFrom(AST_FROM, yyS[yypt-6].tableExprs), Where: NewWhere(AST_WHERE, yyS[yypt-5].boolExpr), GroupBy: GroupBy(yyS[yypt-4].valExprs), Having: NewWhere(AST_HAVING, yyS[yypt-3].boolExpr), OrderBy: yyS[yypt-2].orderBy, Limit: yyS[yypt-1].limit, Lock: yyS[yypt-0].str} } case 16: //line sql.y:190 { yyVAL.selStmt = &Union{Type: yyS[yypt-1].str, Left: yyS[yypt-2].selStmt, Right: yyS[yypt-0].selStmt} } case 17: //line sql.y:196 { yyVAL.statement = &Insert{Comments: Comments(yyS[yypt-5].bytes2), Table: yyS[yypt-3].tableName, Columns: yyS[yypt-2].columns, Rows: yyS[yypt-1].insRows, OnDup: OnDup(yyS[yypt-0].updateExprs)} } case 18: //line sql.y:200 { cols := make(Columns, 0, len(yyS[yypt-1].updateExprs)) vals := make(ValTuple, 0, len(yyS[yypt-1].updateExprs)) for _, col := range yyS[yypt-1].updateExprs { cols = append(cols, &NonStarExpr{Expr: col.Name}) vals = append(vals, col.Expr) } yyVAL.statement = &Insert{Comments: Comments(yyS[yypt-5].bytes2), Table: yyS[yypt-3].tableName, Columns: cols, Rows: Values{vals}, OnDup: OnDup(yyS[yypt-0].updateExprs)} } case 19: //line sql.y:212 { yyVAL.statement = &Update{Comments: Comments(yyS[yypt-6].bytes2), Table: yyS[yypt-5].tableName, Exprs: yyS[yypt-3].updateExprs, Where: NewWhere(AST_WHERE, yyS[yypt-2].boolExpr), OrderBy: yyS[yypt-1].orderBy, Limit: yyS[yypt-0].limit} } case 20: //line sql.y:218 { yyVAL.statement = &Delete{Comments: Comments(yyS[yypt-5].bytes2), Table: yyS[yypt-3].tableName, Where: NewWhere(AST_WHERE, yyS[yypt-2].boolExpr), OrderBy: yyS[yypt-1].orderBy, Limit: yyS[yypt-0].limit} } case 21: //line sql.y:224 { yyVAL.statement = &Set{Comments: Comments(yyS[yypt-1].bytes2), Exprs: yyS[yypt-0].updateExprs} } case 22: //line sql.y:230 { yyVAL.statement = &DDL{Action: AST_CREATE, NewName: yyS[yypt-1].bytes} } case 23: //line sql.y:234 { // Change this to an alter statement yyVAL.statement = &DDL{Action: AST_ALTER, Table: yyS[yypt-1].bytes, NewName: yyS[yypt-1].bytes} } case 24: //line sql.y:239 { yyVAL.statement = &DDL{Action: AST_CREATE, NewName: yyS[yypt-1].bytes} } case 25: //line sql.y:245 { yyVAL.statement = &DDL{Action: AST_ALTER, Table: yyS[yypt-2].bytes, NewName: yyS[yypt-2].bytes} } case 26: //line sql.y:249 { // Change this to a rename statement yyVAL.statement = &DDL{Action: AST_RENAME, Table: yyS[yypt-3].bytes, NewName: yyS[yypt-0].bytes} } case 27: //line sql.y:254 { yyVAL.statement = &DDL{Action: AST_ALTER, Table: yyS[yypt-1].bytes, NewName: yyS[yypt-1].bytes} } case 28: //line sql.y:260 { yyVAL.statement = &DDL{Action: AST_RENAME, Table: yyS[yypt-2].bytes, NewName: yyS[yypt-0].bytes} } case 29: //line sql.y:266 { yyVAL.statement = &DDL{Action: AST_DROP, Table: yyS[yypt-0].bytes} } case 30: //line sql.y:270 { // Change this to an alter statement yyVAL.statement = &DDL{Action: AST_ALTER, Table: yyS[yypt-0].bytes, NewName: yyS[yypt-0].bytes} } case 31: //line sql.y:275 { yyVAL.statement = &DDL{Action: AST_DROP, Table: yyS[yypt-1].bytes} } case 32: //line sql.y:281 { yyVAL.statement = &DDL{Action: AST_ALTER, Table: yyS[yypt-0].bytes, NewName: yyS[yypt-0].bytes} } case 33: //line sql.y:287 { yyVAL.statement = &Other{} } case 34: //line sql.y:291 { yyVAL.statement = &Other{} } case 35: //line sql.y:295 { yyVAL.statement = &Other{} } case 36: //line sql.y:300 { SetAllowComments(yylex, true) } case 37: //line sql.y:304 { yyVAL.bytes2 = yyS[yypt-0].bytes2 SetAllowComments(yylex, false) } case 38: //line sql.y:310 { yyVAL.bytes2 = nil } case 39: //line sql.y:314 { yyVAL.bytes2 = append(yyS[yypt-1].bytes2, yyS[yypt-0].bytes) } case 40: //line sql.y:320 { yyVAL.str = AST_UNION } case 41: //line sql.y:324 { yyVAL.str = AST_UNION_ALL } case 42: //line sql.y:328 { yyVAL.str = AST_SET_MINUS } case 43: //line sql.y:332 { yyVAL.str = AST_EXCEPT } case 44: //line sql.y:336 { yyVAL.str = AST_INTERSECT } case 45: //line sql.y:341 { yyVAL.str = "" } case 46: //line sql.y:345 { yyVAL.str = AST_DISTINCT } case 47: //line sql.y:351 { yyVAL.selectExprs = SelectExprs{yyS[yypt-0].selectExpr} } case 48: //line sql.y:355 { yyVAL.selectExprs = append(yyVAL.selectExprs, yyS[yypt-0].selectExpr) } case 49: //line sql.y:361 { yyVAL.selectExpr = &StarExpr{} } case 50: //line sql.y:365 { yyVAL.selectExpr = &NonStarExpr{Expr: yyS[yypt-1].expr, As: yyS[yypt-0].bytes} } case 51: //line sql.y:369 { yyVAL.selectExpr = &StarExpr{TableName: yyS[yypt-2].bytes} } case 52: //line sql.y:375 { yyVAL.expr = yyS[yypt-0].boolExpr } case 53: //line sql.y:379 { yyVAL.expr = yyS[yypt-0].valExpr } case 54: //line sql.y:384 { yyVAL.bytes = nil } case 55: //line sql.y:388 { yyVAL.bytes = yyS[yypt-0].bytes } case 56: //line sql.y:392 { yyVAL.bytes = yyS[yypt-0].bytes } case 57: //line sql.y:398 { yyVAL.tableExprs = TableExprs{yyS[yypt-0].tableExpr} } case 58: //line sql.y:402 { yyVAL.tableExprs = append(yyVAL.tableExprs, yyS[yypt-0].tableExpr) } case 59: //line sql.y:408 { yyVAL.tableExpr = &AliasedTableExpr{Expr: yyS[yypt-2].smTableExpr, As: yyS[yypt-1].bytes, Hints: yyS[yypt-0].indexHints} } case 60: //line sql.y:412 { yyVAL.tableExpr = &ParenTableExpr{Expr: yyS[yypt-1].tableExpr} } case 61: //line sql.y:416 { yyVAL.tableExpr = &JoinTableExpr{LeftExpr: yyS[yypt-2].tableExpr, Join: yyS[yypt-1].str, RightExpr: yyS[yypt-0].tableExpr} } case 62: //line sql.y:420 { yyVAL.tableExpr = &JoinTableExpr{LeftExpr: yyS[yypt-4].tableExpr, Join: yyS[yypt-3].str, RightExpr: yyS[yypt-2].tableExpr, On: yyS[yypt-0].boolExpr} } case 63: //line sql.y:425 { yyVAL.bytes = nil } case 64: //line sql.y:429 { yyVAL.bytes = yyS[yypt-0].bytes } case 65: //line sql.y:433 { yyVAL.bytes = yyS[yypt-0].bytes } case 66: //line sql.y:439 { yyVAL.str = AST_JOIN } case 67: //line sql.y:443 { yyVAL.str = AST_STRAIGHT_JOIN } case 68: //line sql.y:447 { yyVAL.str = AST_LEFT_JOIN } case 69: //line sql.y:451 { yyVAL.str = AST_LEFT_JOIN } case 70: //line sql.y:455 { yyVAL.str = AST_RIGHT_JOIN } case 71: //line sql.y:459 { yyVAL.str = AST_RIGHT_JOIN } case 72: //line sql.y:463 { yyVAL.str = AST_JOIN } case 73: //line sql.y:467 { yyVAL.str = AST_CROSS_JOIN } case 74: //line sql.y:471 { yyVAL.str = AST_NATURAL_JOIN } case 75: //line sql.y:477 { yyVAL.smTableExpr = &TableName{Name: yyS[yypt-0].bytes} } case 76: //line sql.y:481 { yyVAL.smTableExpr = &TableName{Qualifier: yyS[yypt-2].bytes, Name: yyS[yypt-0].bytes} } case 77: //line sql.y:485 { yyVAL.smTableExpr = yyS[yypt-0].subquery } case 78: //line sql.y:491 { yyVAL.tableName = &TableName{Name: yyS[yypt-0].bytes} } case 79: //line sql.y:495 { yyVAL.tableName = &TableName{Qualifier: yyS[yypt-2].bytes, Name: yyS[yypt-0].bytes} } case 80: //line sql.y:500 { yyVAL.indexHints = nil } case 81: //line sql.y:504 { yyVAL.indexHints = &IndexHints{Type: AST_USE, Indexes: yyS[yypt-1].bytes2} } case 82: //line sql.y:508 { yyVAL.indexHints = &IndexHints{Type: AST_IGNORE, Indexes: yyS[yypt-1].bytes2} } case 83: //line sql.y:512 { yyVAL.indexHints = &IndexHints{Type: AST_FORCE, Indexes: yyS[yypt-1].bytes2} } case 84: //line sql.y:518 { yyVAL.bytes2 = [][]byte{yyS[yypt-0].bytes} } case 85: //line sql.y:522 { yyVAL.bytes2 = append(yyS[yypt-2].bytes2, yyS[yypt-0].bytes) } case 86: //line sql.y:527 { yyVAL.tableExprs = nil } case 87: //line sql.y:531 { yyVAL.tableExprs = yyS[yypt-0].tableExprs } case 88: //line sql.y:537 { yyVAL.boolExpr = nil } case 89: //line sql.y:541 { yyVAL.boolExpr = yyS[yypt-0].boolExpr } case 90: yyVAL.boolExpr = yyS[yypt-0].boolExpr case 91: //line sql.y:548 { yyVAL.boolExpr = &AndExpr{Left: yyS[yypt-2].boolExpr, Right: yyS[yypt-0].boolExpr} } case 92: //line sql.y:552 { yyVAL.boolExpr = &OrExpr{Left: yyS[yypt-2].boolExpr, Right: yyS[yypt-0].boolExpr} } case 93: //line sql.y:556 { yyVAL.boolExpr = &NotExpr{Expr: yyS[yypt-0].boolExpr} } case 94: //line sql.y:560 { yyVAL.boolExpr = &ParenBoolExpr{Expr: yyS[yypt-1].boolExpr} } case 95: //line sql.y:566 { yyVAL.boolExpr = &ComparisonExpr{Left: yyS[yypt-2].valExpr, Operator: yyS[yypt-1].str, Right: yyS[yypt-0].valExpr} } case 96: //line sql.y:570 { yyVAL.boolExpr = &ComparisonExpr{Left: yyS[yypt-2].valExpr, Operator: AST_IN, Right: yyS[yypt-0].colTuple} } case 97: //line sql.y:574 { yyVAL.boolExpr = &ComparisonExpr{Left: yyS[yypt-3].valExpr, Operator: AST_NOT_IN, Right: yyS[yypt-0].colTuple} } case 98: //line sql.y:578 { yyVAL.boolExpr = &ComparisonExpr{Left: yyS[yypt-2].valExpr, Operator: AST_LIKE, Right: yyS[yypt-0].valExpr} } case 99: //line sql.y:582 { yyVAL.boolExpr = &ComparisonExpr{Left: yyS[yypt-3].valExpr, Operator: AST_NOT_LIKE, Right: yyS[yypt-0].valExpr} } case 100: //line sql.y:586 { yyVAL.boolExpr = &RangeCond{Left: yyS[yypt-4].valExpr, Operator: AST_BETWEEN, From: yyS[yypt-2].valExpr, To: yyS[yypt-0].valExpr} } case 101: //line sql.y:590 { yyVAL.boolExpr = &RangeCond{Left: yyS[yypt-5].valExpr, Operator: AST_NOT_BETWEEN, From: yyS[yypt-2].valExpr, To: yyS[yypt-0].valExpr} } case 102: //line sql.y:594 { yyVAL.boolExpr = &NullCheck{Operator: AST_IS_NULL, Expr: yyS[yypt-2].valExpr} } case 103: //line sql.y:598 { yyVAL.boolExpr = &NullCheck{Operator: AST_IS_NOT_NULL, Expr: yyS[yypt-3].valExpr} } case 104: //line sql.y:602 { yyVAL.boolExpr = &ExistsExpr{Subquery: yyS[yypt-0].subquery} } case 105: //line sql.y:606 { yyVAL.boolExpr = &KeyrangeExpr{Start: yyS[yypt-3].valExpr, End: yyS[yypt-1].valExpr} } case 106: //line sql.y:612 { yyVAL.str = AST_EQ } case 107: //line sql.y:616 { yyVAL.str = AST_LT } case 108: //line sql.y:620 { yyVAL.str = AST_GT } case 109: //line sql.y:624 { yyVAL.str = AST_LE } case 110: //line sql.y:628 { yyVAL.str = AST_GE } case 111: //line sql.y:632 { yyVAL.str = AST_NE } case 112: //line sql.y:636 { yyVAL.str = AST_NSE } case 113: //line sql.y:642 { yyVAL.colTuple = ValTuple(yyS[yypt-1].valExprs) } case 114: //line sql.y:646 { yyVAL.colTuple = yyS[yypt-0].subquery } case 115: //line sql.y:650 { yyVAL.colTuple = ListArg(yyS[yypt-0].bytes) } case 116: //line sql.y:656 { yyVAL.subquery = &Subquery{yyS[yypt-1].selStmt} } case 117: //line sql.y:662 { yyVAL.valExprs = ValExprs{yyS[yypt-0].valExpr} } case 118: //line sql.y:666 { yyVAL.valExprs = append(yyS[yypt-2].valExprs, yyS[yypt-0].valExpr) } case 119: //line sql.y:672 { yyVAL.valExpr = yyS[yypt-0].valExpr } case 120: //line sql.y:676 { yyVAL.valExpr = yyS[yypt-0].colName } case 121: //line sql.y:680 { yyVAL.valExpr = yyS[yypt-0].rowTuple } case 122: //line sql.y:684 { yyVAL.valExpr = &BinaryExpr{Left: yyS[yypt-2].valExpr, Operator: AST_BITAND, Right: yyS[yypt-0].valExpr} } case 123: //line sql.y:688 { yyVAL.valExpr = &BinaryExpr{Left: yyS[yypt-2].valExpr, Operator: AST_BITOR, Right: yyS[yypt-0].valExpr} } case 124: //line sql.y:692 { yyVAL.valExpr = &BinaryExpr{Left: yyS[yypt-2].valExpr, Operator: AST_BITXOR, Right: yyS[yypt-0].valExpr} } case 125: //line sql.y:696 { yyVAL.valExpr = &BinaryExpr{Left: yyS[yypt-2].valExpr, Operator: AST_PLUS, Right: yyS[yypt-0].valExpr} } case 126: //line sql.y:700 { yyVAL.valExpr = &BinaryExpr{Left: yyS[yypt-2].valExpr, Operator: AST_MINUS, Right: yyS[yypt-0].valExpr} } case 127: //line sql.y:704 { yyVAL.valExpr = &BinaryExpr{Left: yyS[yypt-2].valExpr, Operator: AST_MULT, Right: yyS[yypt-0].valExpr} } case 128: //line sql.y:708 { yyVAL.valExpr = &BinaryExpr{Left: yyS[yypt-2].valExpr, Operator: AST_DIV, Right: yyS[yypt-0].valExpr} } case 129: //line sql.y:712 { yyVAL.valExpr = &BinaryExpr{Left: yyS[yypt-2].valExpr, Operator: AST_MOD, Right: yyS[yypt-0].valExpr} } case 130: //line sql.y:716 { if num, ok := yyS[yypt-0].valExpr.(NumVal); ok { switch yyS[yypt-1].byt { case '-': yyVAL.valExpr = append(NumVal("-"), num...) case '+': yyVAL.valExpr = num default: yyVAL.valExpr = &UnaryExpr{Operator: yyS[yypt-1].byt, Expr: yyS[yypt-0].valExpr} } } else { yyVAL.valExpr = &UnaryExpr{Operator: yyS[yypt-1].byt, Expr: yyS[yypt-0].valExpr} } } case 131: //line sql.y:731 { yyVAL.valExpr = &FuncExpr{Name: yyS[yypt-2].bytes} } case 132: //line sql.y:735 { yyVAL.valExpr = &FuncExpr{Name: yyS[yypt-3].bytes, Exprs: yyS[yypt-1].selectExprs} } case 133: //line sql.y:739 { yyVAL.valExpr = &FuncExpr{Name: yyS[yypt-4].bytes, Distinct: true, Exprs: yyS[yypt-1].selectExprs} } case 134: //line sql.y:743 { yyVAL.valExpr = &FuncExpr{Name: yyS[yypt-3].bytes, Exprs: yyS[yypt-1].selectExprs} } case 135: //line sql.y:747 { yyVAL.valExpr = yyS[yypt-0].caseExpr } case 136: //line sql.y:753 { yyVAL.bytes = IF_BYTES } case 137: //line sql.y:757 { yyVAL.bytes = VALUES_BYTES } case 138: //line sql.y:763 { yyVAL.byt = AST_UPLUS } case 139: //line sql.y:767 { yyVAL.byt = AST_UMINUS } case 140: //line sql.y:771 { yyVAL.byt = AST_TILDA } case 141: //line sql.y:777 { yyVAL.caseExpr = &CaseExpr{Expr: yyS[yypt-3].valExpr, Whens: yyS[yypt-2].whens, Else: yyS[yypt-1].valExpr} } case 142: //line sql.y:782 { yyVAL.valExpr = nil } case 143: //line sql.y:786 { yyVAL.valExpr = yyS[yypt-0].valExpr } case 144: //line sql.y:792 { yyVAL.whens = []*When{yyS[yypt-0].when} } case 145: //line sql.y:796 { yyVAL.whens = append(yyS[yypt-1].whens, yyS[yypt-0].when) } case 146: //line sql.y:802 { yyVAL.when = &When{Cond: yyS[yypt-2].boolExpr, Val: yyS[yypt-0].valExpr} } case 147: //line sql.y:807 { yyVAL.valExpr = nil } case 148: //line sql.y:811 { yyVAL.valExpr = yyS[yypt-0].valExpr } case 149: //line sql.y:817 { yyVAL.colName = &ColName{Name: yyS[yypt-0].bytes} } case 150: //line sql.y:821 { yyVAL.colName = &ColName{Qualifier: yyS[yypt-2].bytes, Name: yyS[yypt-0].bytes} } case 151: //line sql.y:827 { yyVAL.valExpr = StrVal(yyS[yypt-0].bytes) } case 152: //line sql.y:831 { yyVAL.valExpr = NumVal(yyS[yypt-0].bytes) } case 153: //line sql.y:835 { yyVAL.valExpr = ValArg(yyS[yypt-0].bytes) } case 154: //line sql.y:839 { yyVAL.valExpr = &NullVal{} } case 155: //line sql.y:844 { yyVAL.valExprs = nil } case 156: //line sql.y:848 { yyVAL.valExprs = yyS[yypt-0].valExprs } case 157: //line sql.y:853 { yyVAL.boolExpr = nil } case 158: //line sql.y:857 { yyVAL.boolExpr = yyS[yypt-0].boolExpr } case 159: //line sql.y:862 { yyVAL.orderBy = nil } case 160: //line sql.y:866 { yyVAL.orderBy = yyS[yypt-0].orderBy } case 161: //line sql.y:872 { yyVAL.orderBy = OrderBy{yyS[yypt-0].order} } case 162: //line sql.y:876 { yyVAL.orderBy = append(yyS[yypt-2].orderBy, yyS[yypt-0].order) } case 163: //line sql.y:882 { yyVAL.order = &Order{Expr: yyS[yypt-1].valExpr, Direction: yyS[yypt-0].str} } case 164: //line sql.y:887 { yyVAL.str = AST_ASC } case 165: //line sql.y:891 { yyVAL.str = AST_ASC } case 166: //line sql.y:895 { yyVAL.str = AST_DESC } case 167: //line sql.y:900 { yyVAL.limit = nil } case 168: //line sql.y:904 { yyVAL.limit = &Limit{Rowcount: yyS[yypt-0].valExpr} } case 169: //line sql.y:908 { yyVAL.limit = &Limit{Offset: yyS[yypt-2].valExpr, Rowcount: yyS[yypt-0].valExpr} } case 170: //line sql.y:913 { yyVAL.str = "" } case 171: //line sql.y:917 { yyVAL.str = AST_FOR_UPDATE } case 172: //line sql.y:921 { if !bytes.Equal(yyS[yypt-1].bytes, SHARE) { yylex.Error("expecting share") return 1 } if !bytes.Equal(yyS[yypt-0].bytes, MODE) { yylex.Error("expecting mode") return 1 } yyVAL.str = AST_SHARE_MODE } case 173: //line sql.y:934 { yyVAL.columns = nil } case 174: //line sql.y:938 { yyVAL.columns = yyS[yypt-1].columns } case 175: //line sql.y:944 { yyVAL.columns = Columns{&NonStarExpr{Expr: yyS[yypt-0].colName}} } case 176: //line sql.y:948 { yyVAL.columns = append(yyVAL.columns, &NonStarExpr{Expr: yyS[yypt-0].colName}) } case 177: //line sql.y:953 { yyVAL.updateExprs = nil } case 178: //line sql.y:957 { yyVAL.updateExprs = yyS[yypt-0].updateExprs } case 179: //line sql.y:963 { yyVAL.insRows = yyS[yypt-0].values } case 180: //line sql.y:967 { yyVAL.insRows = yyS[yypt-0].selStmt } case 181: //line sql.y:973 { yyVAL.values = Values{yyS[yypt-0].rowTuple} } case 182: //line sql.y:977 { yyVAL.values = append(yyS[yypt-2].values, yyS[yypt-0].rowTuple) } case 183: //line sql.y:983 { yyVAL.rowTuple = ValTuple(yyS[yypt-1].valExprs) } case 184: //line sql.y:987 { yyVAL.rowTuple = yyS[yypt-0].subquery } case 185: //line sql.y:993 { yyVAL.updateExprs = UpdateExprs{yyS[yypt-0].updateExpr} } case 186: //line sql.y:997 { yyVAL.updateExprs = append(yyS[yypt-2].updateExprs, yyS[yypt-0].updateExpr) } case 187: //line sql.y:1003 { yyVAL.updateExpr = &UpdateExpr{Name: yyS[yypt-2].colName, Expr: yyS[yypt-0].valExpr} } case 188: //line sql.y:1008 { yyVAL.empty = struct{}{} } case 189: //line sql.y:1010 { yyVAL.empty = struct{}{} } case 190: //line sql.y:1013 { yyVAL.empty = struct{}{} } case 191: //line sql.y:1015 { yyVAL.empty = struct{}{} } case 192: //line sql.y:1018 { yyVAL.empty = struct{}{} } case 193: //line sql.y:1020 { yyVAL.empty = struct{}{} } case 194: //line sql.y:1024 { yyVAL.empty = struct{}{} } case 195: //line sql.y:1026 { yyVAL.empty = struct{}{} } case 196: //line sql.y:1028 { yyVAL.empty = struct{}{} } case 197: //line sql.y:1030 { yyVAL.empty = struct{}{} } case 198: //line sql.y:1032 { yyVAL.empty = struct{}{} } case 199: //line sql.y:1035 { yyVAL.empty = struct{}{} } case 200: //line sql.y:1037 { yyVAL.empty = struct{}{} } case 201: //line sql.y:1040 { yyVAL.empty = struct{}{} } case 202: //line sql.y:1042 { yyVAL.empty = struct{}{} } case 203: //line sql.y:1045 { yyVAL.empty = struct{}{} } case 204: //line sql.y:1047 { yyVAL.empty = struct{}{} } case 205: //line sql.y:1051 { yyVAL.bytes = yyS[yypt-0].bytes } case 206: //line sql.y:1056 { ForceEOF(yylex) } } goto yystack /* stack new state and value */ } textql-2.0.3/sqlparser/sql.y000066400000000000000000000443021263444277100160570ustar00rootroot00000000000000// Copyright 2012, Google Inc. All rights reserved. // Use of this source code is governed by a BSD-style // license that can be found in the LICENSE file. %{ package sqlparser import "bytes" func SetParseTree(yylex interface{}, stmt Statement) { yylex.(*Tokenizer).ParseTree = stmt } func SetAllowComments(yylex interface{}, allow bool) { yylex.(*Tokenizer).AllowComments = allow } func ForceEOF(yylex interface{}) { yylex.(*Tokenizer).ForceEOF = true } var ( SHARE = []byte("share") MODE = []byte("mode") IF_BYTES = []byte("if") VALUES_BYTES = []byte("values") ) %} %union { empty struct{} statement Statement selStmt SelectStatement byt byte bytes []byte bytes2 [][]byte str string selectExprs SelectExprs selectExpr SelectExpr columns Columns colName *ColName tableExprs TableExprs tableExpr TableExpr smTableExpr SimpleTableExpr tableName *TableName indexHints *IndexHints expr Expr boolExpr BoolExpr valExpr ValExpr colTuple ColTuple valExprs ValExprs values Values rowTuple RowTuple subquery *Subquery caseExpr *CaseExpr whens []*When when *When orderBy OrderBy order *Order limit *Limit insRows InsertRows updateExprs UpdateExprs updateExpr *UpdateExpr } %token LEX_ERROR %token SELECT INSERT UPDATE DELETE FROM WHERE GROUP HAVING ORDER BY LIMIT FOR %token ALL DISTINCT AS EXISTS IN IS LIKE BETWEEN NULL ASC DESC VALUES INTO DUPLICATE KEY DEFAULT SET LOCK KEYRANGE %token ID STRING NUMBER VALUE_ARG LIST_ARG COMMENT %token LE GE NE NULL_SAFE_EQUAL %token '(' '=' '<' '>' '~' %left UNION MINUS EXCEPT INTERSECT %left ',' %left JOIN STRAIGHT_JOIN LEFT RIGHT INNER OUTER CROSS NATURAL USE FORCE %left ON %left OR %left AND %right NOT %left '&' '|' '^' %left '+' '-' %left '*' '/' '%' %nonassoc '.' %left UNARY %right CASE, WHEN, THEN, ELSE %left END // DDL Tokens %token CREATE ALTER DROP RENAME ANALYZE %token TABLE INDEX VIEW TO IGNORE IF UNIQUE USING %token SHOW DESCRIBE EXPLAIN %start any_command %type command %type select_statement %type missing_select_statement %type insert_statement update_statement delete_statement set_statement %type create_statement alter_statement rename_statement drop_statement %type analyze_statement other_statement %type comment_opt comment_list %type union_op %type distinct_opt %type select_expression_list %type select_expression %type as_lower_opt as_opt %type expression %type table_expression_list %type table_expression %type from_expression_list_opt %type join_type %type simple_table_expression %type dml_table_expression %type index_hint_list %type index_list %type where_expression_opt %type boolean_expression condition %type compare %type row_list %type value value_expression %type col_tuple %type value_expression_list %type tuple_list %type row_tuple %type keyword_as_func %type subquery %type unary_operator %type column_name %type case_expression %type when_expression_list %type when_expression %type value_expression_opt else_expression_opt %type group_by_opt %type having_opt %type order_by_opt order_list %type order %type asc_desc_opt %type limit_opt %type lock_opt %type column_list_opt column_list %type on_dup_opt %type update_list %type update_expression %type exists_opt not_exists_opt ignore_opt non_rename_operation to_opt constraint_opt using_opt %type sql_id %type force_eof %% any_command: command { SetParseTree(yylex, $1) } command: select_statement { $$ = $1 } | missing_select_statement { $$ = $1 } | insert_statement | update_statement | delete_statement | set_statement | create_statement | alter_statement | rename_statement | drop_statement | analyze_statement | other_statement missing_select_statement: distinct_opt select_expression_list from_expression_list_opt where_expression_opt group_by_opt having_opt order_by_opt limit_opt lock_opt { $$ = &Select{Comments: nil, Distinct: $1, SelectExprs: $2, From: NewFrom(AST_FROM, $3), Where: NewWhere(AST_WHERE, $4), GroupBy: GroupBy($5), Having: NewWhere(AST_HAVING, $6), OrderBy: $7, Limit: $8, Lock: $9} } select_statement: SELECT comment_opt distinct_opt select_expression_list from_expression_list_opt where_expression_opt group_by_opt having_opt order_by_opt limit_opt lock_opt { $$ = &Select{Comments: Comments($2), Distinct: $3, SelectExprs: $4, From: NewFrom(AST_FROM, $5), Where: NewWhere(AST_WHERE, $6), GroupBy: GroupBy($7), Having: NewWhere(AST_HAVING, $8), OrderBy: $9, Limit: $10, Lock: $11} } | select_statement union_op select_statement %prec UNION { $$ = &Union{Type: $2, Left: $1, Right: $3} } insert_statement: INSERT comment_opt INTO dml_table_expression column_list_opt row_list on_dup_opt { $$ = &Insert{Comments: Comments($2), Table: $4, Columns: $5, Rows: $6, OnDup: OnDup($7)} } | INSERT comment_opt INTO dml_table_expression SET update_list on_dup_opt { cols := make(Columns, 0, len($6)) vals := make(ValTuple, 0, len($6)) for _, col := range $6 { cols = append(cols, &NonStarExpr{Expr: col.Name}) vals = append(vals, col.Expr) } $$ = &Insert{Comments: Comments($2), Table: $4, Columns: cols, Rows: Values{vals}, OnDup: OnDup($7)} } update_statement: UPDATE comment_opt dml_table_expression SET update_list where_expression_opt order_by_opt limit_opt { $$ = &Update{Comments: Comments($2), Table: $3, Exprs: $5, Where: NewWhere(AST_WHERE, $6), OrderBy: $7, Limit: $8} } delete_statement: DELETE comment_opt FROM dml_table_expression where_expression_opt order_by_opt limit_opt { $$ = &Delete{Comments: Comments($2), Table: $4, Where: NewWhere(AST_WHERE, $5), OrderBy: $6, Limit: $7} } set_statement: SET comment_opt update_list { $$ = &Set{Comments: Comments($2), Exprs: $3} } create_statement: CREATE TABLE not_exists_opt ID force_eof { $$ = &DDL{Action: AST_CREATE, NewName: $4} } | CREATE constraint_opt INDEX sql_id using_opt ON ID force_eof { // Change this to an alter statement $$ = &DDL{Action: AST_ALTER, Table: $7, NewName: $7} } | CREATE VIEW sql_id force_eof { $$ = &DDL{Action: AST_CREATE, NewName: $3} } alter_statement: ALTER ignore_opt TABLE ID non_rename_operation force_eof { $$ = &DDL{Action: AST_ALTER, Table: $4, NewName: $4} } | ALTER ignore_opt TABLE ID RENAME to_opt ID { // Change this to a rename statement $$ = &DDL{Action: AST_RENAME, Table: $4, NewName: $7} } | ALTER VIEW sql_id force_eof { $$ = &DDL{Action: AST_ALTER, Table: $3, NewName: $3} } rename_statement: RENAME TABLE ID TO ID { $$ = &DDL{Action: AST_RENAME, Table: $3, NewName: $5} } drop_statement: DROP TABLE exists_opt ID { $$ = &DDL{Action: AST_DROP, Table: $4} } | DROP INDEX sql_id ON ID { // Change this to an alter statement $$ = &DDL{Action: AST_ALTER, Table: $5, NewName: $5} } | DROP VIEW exists_opt sql_id force_eof { $$ = &DDL{Action: AST_DROP, Table: $4} } analyze_statement: ANALYZE TABLE ID { $$ = &DDL{Action: AST_ALTER, Table: $3, NewName: $3} } other_statement: SHOW force_eof { $$ = &Other{} } | DESCRIBE force_eof { $$ = &Other{} } | EXPLAIN force_eof { $$ = &Other{} } comment_opt: { SetAllowComments(yylex, true) } comment_list { $$ = $2 SetAllowComments(yylex, false) } comment_list: { $$ = nil } | comment_list COMMENT { $$ = append($1, $2) } union_op: UNION { $$ = AST_UNION } | UNION ALL { $$ = AST_UNION_ALL } | MINUS { $$ = AST_SET_MINUS } | EXCEPT { $$ = AST_EXCEPT } | INTERSECT { $$ = AST_INTERSECT } distinct_opt: { $$ = "" } | DISTINCT { $$ = AST_DISTINCT } select_expression_list: select_expression { $$ = SelectExprs{$1} } | select_expression_list ',' select_expression { $$ = append($$, $3) } select_expression: '*' { $$ = &StarExpr{} } | expression as_lower_opt { $$ = &NonStarExpr{Expr: $1, As: $2} } | ID '.' '*' { $$ = &StarExpr{TableName: $1} } expression: boolean_expression { $$ = $1 } | value_expression { $$ = $1 } as_lower_opt: { $$ = nil } | sql_id { $$ = $1 } | AS sql_id { $$ = $2 } table_expression_list: table_expression { $$ = TableExprs{$1} } | table_expression_list ',' table_expression { $$ = append($$, $3) } table_expression: simple_table_expression as_opt index_hint_list { $$ = &AliasedTableExpr{Expr:$1, As: $2, Hints: $3} } | '(' table_expression ')' { $$ = &ParenTableExpr{Expr: $2} } | table_expression join_type table_expression %prec JOIN { $$ = &JoinTableExpr{LeftExpr: $1, Join: $2, RightExpr: $3} } | table_expression join_type table_expression ON boolean_expression %prec JOIN { $$ = &JoinTableExpr{LeftExpr: $1, Join: $2, RightExpr: $3, On: $5} } as_opt: { $$ = nil } | ID { $$ = $1 } | AS ID { $$ = $2 } join_type: JOIN { $$ = AST_JOIN } | STRAIGHT_JOIN { $$ = AST_STRAIGHT_JOIN } | LEFT JOIN { $$ = AST_LEFT_JOIN } | LEFT OUTER JOIN { $$ = AST_LEFT_JOIN } | RIGHT JOIN { $$ = AST_RIGHT_JOIN } | RIGHT OUTER JOIN { $$ = AST_RIGHT_JOIN } | INNER JOIN { $$ = AST_JOIN } | CROSS JOIN { $$ = AST_CROSS_JOIN } | NATURAL JOIN { $$ = AST_NATURAL_JOIN } simple_table_expression: ID { $$ = &TableName{Name: $1} } | ID '.' ID { $$ = &TableName{Qualifier: $1, Name: $3} } | subquery { $$ = $1 } dml_table_expression: ID { $$ = &TableName{Name: $1} } | ID '.' ID { $$ = &TableName{Qualifier: $1, Name: $3} } index_hint_list: { $$ = nil } | USE INDEX '(' index_list ')' { $$ = &IndexHints{Type: AST_USE, Indexes: $4} } | IGNORE INDEX '(' index_list ')' { $$ = &IndexHints{Type: AST_IGNORE, Indexes: $4} } | FORCE INDEX '(' index_list ')' { $$ = &IndexHints{Type: AST_FORCE, Indexes: $4} } index_list: sql_id { $$ = [][]byte{$1} } | index_list ',' sql_id { $$ = append($1, $3) } from_expression_list_opt: { $$ = nil } | FROM table_expression_list { $$ = $2 } where_expression_opt: { $$ = nil } | WHERE boolean_expression { $$ = $2 } boolean_expression: condition | boolean_expression AND boolean_expression { $$ = &AndExpr{Left: $1, Right: $3} } | boolean_expression OR boolean_expression { $$ = &OrExpr{Left: $1, Right: $3} } | NOT boolean_expression { $$ = &NotExpr{Expr: $2} } | '(' boolean_expression ')' { $$ = &ParenBoolExpr{Expr: $2} } condition: value_expression compare value_expression { $$ = &ComparisonExpr{Left: $1, Operator: $2, Right: $3} } | value_expression IN col_tuple { $$ = &ComparisonExpr{Left: $1, Operator: AST_IN, Right: $3} } | value_expression NOT IN col_tuple { $$ = &ComparisonExpr{Left: $1, Operator: AST_NOT_IN, Right: $4} } | value_expression LIKE value_expression { $$ = &ComparisonExpr{Left: $1, Operator: AST_LIKE, Right: $3} } | value_expression NOT LIKE value_expression { $$ = &ComparisonExpr{Left: $1, Operator: AST_NOT_LIKE, Right: $4} } | value_expression BETWEEN value_expression AND value_expression { $$ = &RangeCond{Left: $1, Operator: AST_BETWEEN, From: $3, To: $5} } | value_expression NOT BETWEEN value_expression AND value_expression { $$ = &RangeCond{Left: $1, Operator: AST_NOT_BETWEEN, From: $4, To: $6} } | value_expression IS NULL { $$ = &NullCheck{Operator: AST_IS_NULL, Expr: $1} } | value_expression IS NOT NULL { $$ = &NullCheck{Operator: AST_IS_NOT_NULL, Expr: $1} } | EXISTS subquery { $$ = &ExistsExpr{Subquery: $2} } | KEYRANGE '(' value ',' value ')' { $$ = &KeyrangeExpr{Start: $3, End: $5} } compare: '=' { $$ = AST_EQ } | '<' { $$ = AST_LT } | '>' { $$ = AST_GT } | LE { $$ = AST_LE } | GE { $$ = AST_GE } | NE { $$ = AST_NE } | NULL_SAFE_EQUAL { $$ = AST_NSE } col_tuple: '(' value_expression_list ')' { $$ = ValTuple($2) } | subquery { $$ = $1 } | LIST_ARG { $$ = ListArg($1) } subquery: '(' select_statement ')' { $$ = &Subquery{$2} } value_expression_list: value_expression { $$ = ValExprs{$1} } | value_expression_list ',' value_expression { $$ = append($1, $3) } value_expression: value { $$ = $1 } | column_name { $$ = $1 } | row_tuple { $$ = $1 } | value_expression '&' value_expression { $$ = &BinaryExpr{Left: $1, Operator: AST_BITAND, Right: $3} } | value_expression '|' value_expression { $$ = &BinaryExpr{Left: $1, Operator: AST_BITOR, Right: $3} } | value_expression '^' value_expression { $$ = &BinaryExpr{Left: $1, Operator: AST_BITXOR, Right: $3} } | value_expression '+' value_expression { $$ = &BinaryExpr{Left: $1, Operator: AST_PLUS, Right: $3} } | value_expression '-' value_expression { $$ = &BinaryExpr{Left: $1, Operator: AST_MINUS, Right: $3} } | value_expression '*' value_expression { $$ = &BinaryExpr{Left: $1, Operator: AST_MULT, Right: $3} } | value_expression '/' value_expression { $$ = &BinaryExpr{Left: $1, Operator: AST_DIV, Right: $3} } | value_expression '%' value_expression { $$ = &BinaryExpr{Left: $1, Operator: AST_MOD, Right: $3} } | unary_operator value_expression %prec UNARY { if num, ok := $2.(NumVal); ok { switch $1 { case '-': $$ = append(NumVal("-"), num...) case '+': $$ = num default: $$ = &UnaryExpr{Operator: $1, Expr: $2} } } else { $$ = &UnaryExpr{Operator: $1, Expr: $2} } } | sql_id '(' ')' { $$ = &FuncExpr{Name: $1} } | sql_id '(' select_expression_list ')' { $$ = &FuncExpr{Name: $1, Exprs: $3} } | sql_id '(' DISTINCT select_expression_list ')' { $$ = &FuncExpr{Name: $1, Distinct: true, Exprs: $4} } | keyword_as_func '(' select_expression_list ')' { $$ = &FuncExpr{Name: $1, Exprs: $3} } | case_expression { $$ = $1 } keyword_as_func: IF { $$ = IF_BYTES } | VALUES { $$ = VALUES_BYTES } unary_operator: '+' { $$ = AST_UPLUS } | '-' { $$ = AST_UMINUS } | '~' { $$ = AST_TILDA } case_expression: CASE value_expression_opt when_expression_list else_expression_opt END { $$ = &CaseExpr{Expr: $2, Whens: $3, Else: $4} } value_expression_opt: { $$ = nil } | value_expression { $$ = $1 } when_expression_list: when_expression { $$ = []*When{$1} } | when_expression_list when_expression { $$ = append($1, $2) } when_expression: WHEN boolean_expression THEN value_expression { $$ = &When{Cond: $2, Val: $4} } else_expression_opt: { $$ = nil } | ELSE value_expression { $$ = $2 } column_name: sql_id { $$ = &ColName{Name: $1} } | ID '.' sql_id { $$ = &ColName{Qualifier: $1, Name: $3} } value: STRING { $$ = StrVal($1) } | NUMBER { $$ = NumVal($1) } | VALUE_ARG { $$ = ValArg($1) } | NULL { $$ = &NullVal{} } group_by_opt: { $$ = nil } | GROUP BY value_expression_list { $$ = $3 } having_opt: { $$ = nil } | HAVING boolean_expression { $$ = $2 } order_by_opt: { $$ = nil } | ORDER BY order_list { $$ = $3 } order_list: order { $$ = OrderBy{$1} } | order_list ',' order { $$ = append($1, $3) } order: value_expression asc_desc_opt { $$ = &Order{Expr: $1, Direction: $2} } asc_desc_opt: { $$ = AST_ASC } | ASC { $$ = AST_ASC } | DESC { $$ = AST_DESC } limit_opt: { $$ = nil } | LIMIT value_expression { $$ = &Limit{Rowcount: $2} } | LIMIT value_expression ',' value_expression { $$ = &Limit{Offset: $2, Rowcount: $4} } lock_opt: { $$ = "" } | FOR UPDATE { $$ = AST_FOR_UPDATE } | LOCK IN sql_id sql_id { if !bytes.Equal($3, SHARE) { yylex.Error("expecting share") return 1 } if !bytes.Equal($4, MODE) { yylex.Error("expecting mode") return 1 } $$ = AST_SHARE_MODE } column_list_opt: { $$ = nil } | '(' column_list ')' { $$ = $2 } column_list: column_name { $$ = Columns{&NonStarExpr{Expr: $1}} } | column_list ',' column_name { $$ = append($$, &NonStarExpr{Expr: $3}) } on_dup_opt: { $$ = nil } | ON DUPLICATE KEY UPDATE update_list { $$ = $5 } row_list: VALUES tuple_list { $$ = $2 } | select_statement { $$ = $1 } tuple_list: row_tuple { $$ = Values{$1} } | tuple_list ',' row_tuple { $$ = append($1, $3) } row_tuple: '(' value_expression_list ')' { $$ = ValTuple($2) } | subquery { $$ = $1 } update_list: update_expression { $$ = UpdateExprs{$1} } | update_list ',' update_expression { $$ = append($1, $3) } update_expression: column_name '=' value_expression { $$ = &UpdateExpr{Name: $1, Expr: $3} } exists_opt: { $$ = struct{}{} } | IF EXISTS { $$ = struct{}{} } not_exists_opt: { $$ = struct{}{} } | IF NOT EXISTS { $$ = struct{}{} } ignore_opt: { $$ = struct{}{} } | IGNORE { $$ = struct{}{} } non_rename_operation: ALTER { $$ = struct{}{} } | DEFAULT { $$ = struct{}{} } | DROP { $$ = struct{}{} } | ORDER { $$ = struct{}{} } | ID { $$ = struct{}{} } to_opt: { $$ = struct{}{} } | TO { $$ = struct{}{} } constraint_opt: { $$ = struct{}{} } | UNIQUE { $$ = struct{}{} } using_opt: { $$ = struct{}{} } | USING sql_id { $$ = struct{}{} } sql_id: ID { $$ = $1 } force_eof: { ForceEOF(yylex) } textql-2.0.3/sqlparser/sql_mod.go000066400000000000000000000027101263444277100170500ustar00rootroot00000000000000package sqlparser // Magicify runs the SQL passed in, and a table name, throught a customized // TextQL SQL Parser. This provides the following functionality: // - Queries that do not start with SELECT are implictly mapped to SELECT statements // - Queries that are missing a FROM, have the FROM inserted with tableName func Magicify(sql string, tableName string) string { if tableName == "" { return sql } statement, err := Parse(sql) if err != nil { return sql } switch statement := statement.(type) { case *Select: replaceFromInSelect(statement, tableName) return generateQuery(statement) default: return sql } } func replaceFromInSelect(statement *Select, tableName string) { if statement.From == nil { tableName := &TableName{[]byte(tableName), nil} aliasedTableExpr := AliasedTableExpr{tableName, nil, nil} tableExprs := TableExprs{&aliasedTableExpr} statement.From = &From{Type: AST_FROM, Expr: tableExprs} } else { for _, expr := range statement.From.Expr { switch expr := expr.(type) { case *AliasedTableExpr: switch subQuery := expr.Expr.(type) { case *Subquery: switch selectSubQuery := subQuery.Select.(type) { case *Select: replaceFromInSelect(selectSubQuery, tableName) default: return } default: return } default: return } } } } func generateQuery(statement Statement) string { buf := NewTrackedBuffer(nil) statement.Format(buf) return buf.String() } textql-2.0.3/sqlparser/sqltypes/000077500000000000000000000000001263444277100167475ustar00rootroot00000000000000textql-2.0.3/sqlparser/sqltypes/sqltypes.go000066400000000000000000000207241263444277100211670ustar00rootroot00000000000000// Copyright 2012, Google Inc. All rights reserved. // Use of this source code is governed by a BSD-style // license that can be found in the LICENSE file. // Package sqltypes implements interfaces and types that represent SQL values. package sqltypes import ( "encoding/base64" "encoding/gob" "encoding/json" "fmt" "reflect" "strconv" "time" "unsafe" ) var ( NULL = Value{} DONTESCAPE = byte(255) nullstr = []byte("null") ) // BinWriter interface is used for encoding values. // Types like bytes.Buffer conform to this interface. // We expect the writer objects to be in-memory buffers. // So, we don't expect the write operations to fail. type BinWriter interface { Write([]byte) (int, error) WriteByte(byte) error } // Value can store any SQL value. NULL is stored as nil. type Value struct { Inner InnerValue } // Numeric represents non-fractional SQL number. type Numeric []byte // Fractional represents fractional types like float and decimal // It's functionally equivalent to Numeric other than how it's constructed type Fractional []byte // String represents any SQL type that needs to be represented using quotes. type String []byte // MakeNumeric makes a Numeric from a []byte without validation. func MakeNumeric(b []byte) Value { return Value{Numeric(b)} } // MakeFractional makes a Fractional value from a []byte without validation. func MakeFractional(b []byte) Value { return Value{Fractional(b)} } // MakeString makes a String value from a []byte. func MakeString(b []byte) Value { return Value{String(b)} } // Raw returns the raw bytes. All types are currently implemented as []byte. func (v Value) Raw() []byte { if v.Inner == nil { return nil } return v.Inner.raw() } // String returns the raw value as a string func (v Value) String() string { if v.Inner == nil { return "" } return toString(v.Inner.raw()) } // String force casts a []byte to a string. // USE AT YOUR OWN RISK func toString(b []byte) (s string) { if len(b) == 0 { return "" } pbytes := (*reflect.SliceHeader)(unsafe.Pointer(&b)) pstring := (*reflect.StringHeader)(unsafe.Pointer(&s)) pstring.Data = pbytes.Data pstring.Len = pbytes.Len return } // ParseInt64 will parse a Numeric value into an int64 func (v Value) ParseInt64() (val int64, err error) { if v.Inner == nil { return 0, fmt.Errorf("value is null") } n, ok := v.Inner.(Numeric) if !ok { return 0, fmt.Errorf("value is not Numeric") } return strconv.ParseInt(string(n.raw()), 10, 64) } // ParseUint64 will parse a Numeric value into a uint64 func (v Value) ParseUint64() (val uint64, err error) { if v.Inner == nil { return 0, fmt.Errorf("value is null") } n, ok := v.Inner.(Numeric) if !ok { return 0, fmt.Errorf("value is not Numeric") } return strconv.ParseUint(string(n.raw()), 10, 64) } // ParseFloat64 will parse a Fractional value into an float64 func (v Value) ParseFloat64() (val float64, err error) { if v.Inner == nil { return 0, fmt.Errorf("value is null") } n, ok := v.Inner.(Fractional) if !ok { return 0, fmt.Errorf("value is not Fractional") } return strconv.ParseFloat(string(n.raw()), 64) } // EncodeSql encodes the value into an SQL statement. Can be binary. func (v Value) EncodeSql(b BinWriter) { if v.Inner == nil { if _, err := b.Write(nullstr); err != nil { panic(err) } } else { v.Inner.encodeSql(b) } } // EncodeAscii encodes the value using 7-bit clean ascii bytes. func (v Value) EncodeAscii(b BinWriter) { if v.Inner == nil { if _, err := b.Write(nullstr); err != nil { panic(err) } } else { v.Inner.encodeAscii(b) } } func (v Value) IsNull() bool { return v.Inner == nil } func (v Value) IsNumeric() (ok bool) { if v.Inner != nil { _, ok = v.Inner.(Numeric) } return ok } func (v Value) IsFractional() (ok bool) { if v.Inner != nil { _, ok = v.Inner.(Fractional) } return ok } func (v Value) IsString() (ok bool) { if v.Inner != nil { _, ok = v.Inner.(String) } return ok } // MarshalJSON should only be used for testing. // It's not a complete implementation. func (v Value) MarshalJSON() ([]byte, error) { return json.Marshal(v.Inner) } // UnmarshalJSON should only be used for testing. // It's not a complete implementation. func (v *Value) UnmarshalJSON(b []byte) error { if len(b) == 0 { return fmt.Errorf("error unmarshaling empty bytes") } var val interface{} var err error switch b[0] { case '-': var ival int64 err = json.Unmarshal(b, &ival) val = ival case '"': var bval []byte err = json.Unmarshal(b, &bval) val = bval case 'n': // null err = json.Unmarshal(b, &val) default: var uval uint64 err = json.Unmarshal(b, &uval) val = uval } if err != nil { return err } *v, err = BuildValue(val) return err } // InnerValue defines methods that need to be supported by all non-null value types. type InnerValue interface { raw() []byte encodeSql(BinWriter) encodeAscii(BinWriter) } func BuildValue(goval interface{}) (v Value, err error) { switch bindVal := goval.(type) { case nil: // no op case int: v = Value{Numeric(strconv.AppendInt(nil, int64(bindVal), 10))} case int32: v = Value{Numeric(strconv.AppendInt(nil, int64(bindVal), 10))} case int64: v = Value{Numeric(strconv.AppendInt(nil, int64(bindVal), 10))} case uint: v = Value{Numeric(strconv.AppendUint(nil, uint64(bindVal), 10))} case uint32: v = Value{Numeric(strconv.AppendUint(nil, uint64(bindVal), 10))} case uint64: v = Value{Numeric(strconv.AppendUint(nil, uint64(bindVal), 10))} case float64: v = Value{Fractional(strconv.AppendFloat(nil, bindVal, 'f', -1, 64))} case string: v = Value{String([]byte(bindVal))} case []byte: v = Value{String(bindVal)} case time.Time: v = Value{String([]byte(bindVal.Format("2006-01-02 15:04:05")))} case Numeric, Fractional, String: v = Value{bindVal.(InnerValue)} case Value: v = bindVal default: return Value{}, fmt.Errorf("unsupported bind variable type %T: %v", goval, goval) } return v, nil } // BuildNumeric builds a Numeric type that represents any whole number. // It normalizes the representation to ensure 1:1 mapping between the // number and its representation. func BuildNumeric(val string) (n Value, err error) { if val[0] == '-' || val[0] == '+' { signed, err := strconv.ParseInt(val, 0, 64) if err != nil { return Value{}, err } n = Value{Numeric(strconv.AppendInt(nil, signed, 10))} } else { unsigned, err := strconv.ParseUint(val, 0, 64) if err != nil { return Value{}, err } n = Value{Numeric(strconv.AppendUint(nil, unsigned, 10))} } return n, nil } func (n Numeric) raw() []byte { return []byte(n) } func (n Numeric) encodeSql(b BinWriter) { if _, err := b.Write(n.raw()); err != nil { panic(err) } } func (n Numeric) encodeAscii(b BinWriter) { if _, err := b.Write(n.raw()); err != nil { panic(err) } } func (n Numeric) MarshalJSON() ([]byte, error) { return n.raw(), nil } func (f Fractional) raw() []byte { return []byte(f) } func (f Fractional) encodeSql(b BinWriter) { if _, err := b.Write(f.raw()); err != nil { panic(err) } } func (f Fractional) encodeAscii(b BinWriter) { if _, err := b.Write(f.raw()); err != nil { panic(err) } } func (s String) MarshalJSON() ([]byte, error) { return json.Marshal(string(s.raw())) } func (s String) raw() []byte { return []byte(s) } func (s String) encodeSql(b BinWriter) { writebyte(b, '\'') for _, ch := range s.raw() { if encodedChar := SqlEncodeMap[ch]; encodedChar == DONTESCAPE { writebyte(b, ch) } else { writebyte(b, '\\') writebyte(b, encodedChar) } } writebyte(b, '\'') } func (s String) encodeAscii(b BinWriter) { writebyte(b, '\'') encoder := base64.NewEncoder(base64.StdEncoding, b) encoder.Write(s.raw()) encoder.Close() writebyte(b, '\'') } func writebyte(b BinWriter, c byte) { if err := b.WriteByte(c); err != nil { panic(err) } } // SqlEncodeMap specifies how to escape binary data with '\'. // Complies to http://dev.mysql.com/doc/refman/5.1/en/string-syntax.html var SqlEncodeMap [256]byte // SqlDecodeMap is the reverse of SqlEncodeMap var SqlDecodeMap [256]byte var encodeRef = map[byte]byte{ '\x00': '0', '\'': '\'', '"': '"', '\b': 'b', '\n': 'n', '\r': 'r', '\t': 't', 26: 'Z', // ctl-Z '\\': '\\', } func init() { for i := range SqlEncodeMap { SqlEncodeMap[i] = DONTESCAPE SqlDecodeMap[i] = DONTESCAPE } for i := range SqlEncodeMap { if to, ok := encodeRef[byte(i)]; ok { SqlEncodeMap[byte(i)] = to SqlDecodeMap[to] = byte(i) } } gob.Register(Numeric(nil)) gob.Register(Fractional(nil)) gob.Register(String(nil)) } textql-2.0.3/sqlparser/sqltypes/type_test.go000066400000000000000000000170461263444277100213260ustar00rootroot00000000000000// Copyright 2012, Google Inc. All rights reserved. // Use of this source code is governed by a BSD-style // license that can be found in the LICENSE file. package sqltypes import ( "bytes" "testing" "time" ) func TestNull(t *testing.T) { n := Value{} if !n.IsNull() { t.Errorf("value is not null") } if n.String() != "" { t.Errorf("Expecting '', got %s", n.String()) } b := bytes.NewBuffer(nil) n.EncodeSql(b) if b.String() != "null" { t.Errorf("Expecting null, got %s", b.String()) } n.EncodeAscii(b) if b.String() != "nullnull" { t.Errorf("Expecting nullnull, got %s", b.String()) } js, err := n.MarshalJSON() if err != nil { t.Errorf("Unexpected error: %s", err) } if string(js) != "null" { t.Errorf("Expecting null, received %s", js) } } func TestNumeric(t *testing.T) { n := Value{Numeric([]byte("1234"))} b := bytes.NewBuffer(nil) n.EncodeSql(b) if b.String() != "1234" { t.Errorf("Expecting 1234, got %s", b.String()) } n.EncodeAscii(b) if b.String() != "12341234" { t.Errorf("Expecting 12341234, got %s", b.String()) } js, err := n.MarshalJSON() if err != nil { t.Errorf("Unexpected error: %s", err) } if string(js) != "1234" { t.Errorf("Expecting 1234, received %s", js) } } func TestTime(t *testing.T) { date := time.Date(1999, 1, 2, 3, 4, 5, 0, time.UTC) v, _ := BuildValue(date) if !v.IsString() || v.String() != "1999-01-02 03:04:05" { t.Errorf("Expecting 1999-01-02 03:04:05, got %s", v.String()) } b := &bytes.Buffer{} v.EncodeSql(b) if b.String() != "'1999-01-02 03:04:05'" { t.Errorf("Expecting '1999-01-02 03:04:05', got %s", b.String()) } } const ( INVALIDNEG = "-9223372036854775809" MINNEG = "-9223372036854775808" MAXPOS = "18446744073709551615" INVALIDPOS = "18446744073709551616" NEGFLOAT = "1.234" POSFLOAT = "-1.234" ) func TestBuildNumeric(t *testing.T) { var n Value var err error n, err = BuildNumeric(MINNEG) if err != nil { t.Errorf("Unexpected error: %s", err) } if n.String() != MINNEG { t.Errorf("Expecting %v, received %s", MINNEG, n.Raw()) } n, err = BuildNumeric(MAXPOS) if err != nil { t.Errorf("Unexpected error: %s", err) } if n.String() != MAXPOS { t.Errorf("Expecting %v, received %s", MAXPOS, n.Raw()) } n, err = BuildNumeric("0xA") if err != nil { t.Errorf("Unexpected error: %s", err) } if n.String() != "10" { t.Errorf("Expecting %v, received %s", 10, n.Raw()) } n, err = BuildNumeric("012") if err != nil { t.Errorf("Unexpected error: %s", err) } if string(n.Raw()) != "10" { t.Errorf("Expecting %v, received %s", 10, n.Raw()) } if n, err = BuildNumeric(INVALIDNEG); err == nil { t.Errorf("Expecting error") } if n, err = BuildNumeric(INVALIDPOS); err == nil { t.Errorf("Expecting error") } if n, err = BuildNumeric(NEGFLOAT); err == nil { t.Errorf("Expecting error") } if n, err = BuildNumeric(POSFLOAT); err == nil { t.Errorf("Expecting error") } } const ( HARDSQL = "\x00'\"\b\n\r\t\x1A\\" HARDESCAPED = "'\\0\\'\\\"\\b\\n\\r\\t\\Z\\\\'" HARDASCII = "'ACciCAoNCRpc'" ) func TestString(t *testing.T) { s := Value{String([]byte(HARDSQL))} b := bytes.NewBuffer(nil) s.EncodeSql(b) if b.String() != HARDESCAPED { t.Errorf("Expecting %s, received %s", HARDESCAPED, b.String()) } b = bytes.NewBuffer(nil) s.EncodeAscii(b) if b.String() != HARDASCII { t.Errorf("Expecting %s, received %#v", HARDASCII, b.String()) } s = Value{String([]byte("ab\x01cd"))} js, err := s.MarshalJSON() if err != nil { t.Errorf("Unexpected error: %s", err) } if got, want := string(js), "\"ab\\u0001cd\""; got != want { t.Errorf("%#v.MarshalJSON() = %#v, want %#v", s, got, want) } } func TestBuildValue(t *testing.T) { v, err := BuildValue(nil) if err != nil { t.Errorf("%v", err) } if !v.IsNull() { t.Errorf("Expecting null") } n64, err := v.ParseUint64() if err == nil || err.Error() != "value is null" { t.Errorf("%v", err) } v, err = BuildValue(int(-1)) if err != nil { t.Errorf("%v", err) } if !v.IsNumeric() || v.String() != "-1" { t.Errorf("Expecting -1, received %T: %s", v.Inner, v.String()) } v, err = BuildValue(int32(-1)) if err != nil { t.Errorf("%v", err) } if !v.IsNumeric() || v.String() != "-1" { t.Errorf("Expecting -1, received %T: %s", v.Inner, v.String()) } v, err = BuildValue(int64(-1)) if err != nil { t.Errorf("%v", err) } if !v.IsNumeric() || v.String() != "-1" { t.Errorf("Expecting -1, received %T: %s", v.Inner, v.String()) } n64, err = v.ParseUint64() if err == nil { t.Errorf("-1 shouldn't convert into uint64") } i64, err := v.ParseInt64() if i64 != -1 { t.Errorf("want -1, got %d", i64) } if err != nil { t.Errorf("%v", err) } v, err = BuildValue(uint(1)) if err != nil { t.Errorf("%v", err) } if !v.IsNumeric() || v.String() != "1" { t.Errorf("Expecting 1, received %T: %s", v.Inner, v.String()) } v, err = BuildValue(uint32(1)) if err != nil { t.Errorf("%v", err) } if !v.IsNumeric() || v.String() != "1" { t.Errorf("Expecting 1, received %T: %s", v.Inner, v.String()) } v, err = BuildValue(uint64(1)) if err != nil { t.Errorf("%v", err) } n64, err = v.ParseUint64() if err != nil { t.Errorf("%v", err) } if n64 != 1 { t.Errorf("Expecting 1, got %v", n64) } if !v.IsNumeric() || v.String() != "1" { t.Errorf("Expecting 1, received %T: %s", v.Inner, v.String()) } v, err = BuildValue(1.23) if err != nil { t.Errorf("%v", err) } if !v.IsFractional() || v.String() != "1.23" { t.Errorf("Expecting 1.23, received %T: %s", v.Inner, v.String()) } n64, err = v.ParseUint64() if err == nil { t.Errorf("1.23 shouldn't convert into uint64") } v, err = BuildValue("abcd") if err != nil { t.Errorf("%v", err) } if !v.IsString() || v.String() != "abcd" { t.Errorf("Expecting abcd, received %T: %s", v.Inner, v.String()) } v, err = BuildValue([]byte("abcd")) if err != nil { t.Errorf("%v", err) } if !v.IsString() || v.String() != "abcd" { t.Errorf("Expecting abcd, received %T: %s", v.Inner, v.String()) } n64, err = v.ParseUint64() if err == nil || err.Error() != "value is not Numeric" { t.Errorf("%v", err) } v, err = BuildValue(time.Date(2012, time.February, 24, 23, 19, 43, 10, time.UTC)) if err != nil { t.Errorf("%v", err) } if !v.IsString() || v.String() != "2012-02-24 23:19:43" { t.Errorf("Expecting 2012-02-24 23:19:43, received %T: %s", v.Inner, v.String()) } v, err = BuildValue(Numeric([]byte("123"))) if err != nil { t.Errorf("%v", err) } if !v.IsNumeric() || v.String() != "123" { t.Errorf("Expecting 123, received %T: %s", v.Inner, v.String()) } v, err = BuildValue(Fractional([]byte("12.3"))) if err != nil { t.Errorf("%v", err) } if !v.IsFractional() || v.String() != "12.3" { t.Errorf("Expecting 12.3, received %T: %s", v.Inner, v.String()) } v, err = BuildValue(String([]byte("abc"))) if err != nil { t.Errorf("%v", err) } if !v.IsString() || v.String() != "abc" { t.Errorf("Expecting abc, received %T: %s", v.Inner, v.String()) } v, err = BuildValue(float32(1.23)) if err == nil { t.Errorf("Did not receive error") } v1 := Value{String([]byte("ab"))} v, err = BuildValue(v1) if err != nil { t.Errorf("%v", err) } if !v.IsString() || v.String() != "ab" { t.Errorf("Expecting ab, received %T: %s", v.Inner, v.String()) } v, err = BuildValue(float32(1.23)) if err == nil { t.Errorf("Did not receive error") } } // Ensure DONTESCAPE is not escaped func TestEncode(t *testing.T) { if SqlEncodeMap[DONTESCAPE] != DONTESCAPE { t.Errorf("Encode fail: %v", SqlEncodeMap[DONTESCAPE]) } if SqlDecodeMap[DONTESCAPE] != DONTESCAPE { t.Errorf("Decode fail: %v", SqlDecodeMap[DONTESCAPE]) } } textql-2.0.3/sqlparser/token.go000066400000000000000000000240351263444277100165360ustar00rootroot00000000000000// Copyright 2012, Google Inc. All rights reserved. // Use of this source code is governed by a BSD-style // license that can be found in the LICENSE file. package sqlparser import ( "bytes" "fmt" "strings" "github.com/dinedal/textql/sqlparser/sqltypes" ) const EOFCHAR = 0x100 // Tokenizer is the struct used to generate SQL // tokens for the parser. type Tokenizer struct { InStream *strings.Reader AllowComments bool ForceEOF bool lastChar uint16 Position int errorToken []byte LastError string posVarIndex int ParseTree Statement } // NewStringTokenizer creates a new Tokenizer for the // sql string. func NewStringTokenizer(sql string) *Tokenizer { return &Tokenizer{InStream: strings.NewReader(sql)} } var keywords = map[string]int{ "all": ALL, "alter": ALTER, "analyze": ANALYZE, "and": AND, "as": AS, "asc": ASC, "between": BETWEEN, "by": BY, "case": CASE, "create": CREATE, "cross": CROSS, "default": DEFAULT, "delete": DELETE, "desc": DESC, "describe": DESCRIBE, "distinct": DISTINCT, "drop": DROP, "duplicate": DUPLICATE, "else": ELSE, "end": END, "except": EXCEPT, "exists": EXISTS, "explain": EXPLAIN, "for": FOR, "force": FORCE, "from": FROM, "group": GROUP, "having": HAVING, "if": IF, "ignore": IGNORE, "in": IN, "index": INDEX, "inner": INNER, "insert": INSERT, "intersect": INTERSECT, "into": INTO, "is": IS, "join": JOIN, "key": KEY, "keyrange": KEYRANGE, "left": LEFT, "like": LIKE, "limit": LIMIT, "lock": LOCK, "minus": MINUS, "natural": NATURAL, "not": NOT, "null": NULL, "on": ON, "or": OR, "order": ORDER, "outer": OUTER, "rename": RENAME, "right": RIGHT, "select": SELECT, "set": SET, "show": SHOW, "straight_join": STRAIGHT_JOIN, "table": TABLE, "then": THEN, "to": TO, "union": UNION, "unique": UNIQUE, "update": UPDATE, "use": USE, "using": USING, "values": VALUES, "view": VIEW, "when": WHEN, "where": WHERE, } // Lex returns the next token form the Tokenizer. // This function is used by go yacc. func (tkn *Tokenizer) Lex(lval *yySymType) int { typ, val := tkn.Scan() for typ == COMMENT { if tkn.AllowComments { break } typ, val = tkn.Scan() } switch typ { case ID, STRING, NUMBER, VALUE_ARG, LIST_ARG, COMMENT: lval.bytes = val } tkn.errorToken = val return typ } // Error is called by go yacc if there's a parsing error. func (tkn *Tokenizer) Error(err string) { buf := bytes.NewBuffer(make([]byte, 0, 32)) if tkn.errorToken != nil { fmt.Fprintf(buf, "%s at position %v near %s", err, tkn.Position, tkn.errorToken) } else { fmt.Fprintf(buf, "%s at position %v", err, tkn.Position) } tkn.LastError = buf.String() } // Scan scans the tokenizer for the next token and returns // the token type and an optional value. func (tkn *Tokenizer) Scan() (int, []byte) { if tkn.ForceEOF { return 0, nil } if tkn.lastChar == 0 { tkn.next() } tkn.skipBlank() switch ch := tkn.lastChar; { case isLetter(ch): return tkn.scanIdentifier() case isDigit(ch): return tkn.scanNumber(false) case ch == ':': return tkn.scanBindVar() default: tkn.next() switch ch { case EOFCHAR: return 0, nil case '=', ',', ';', '(', ')', '+', '*', '%', '&', '|', '^', '~': return int(ch), nil case '?': tkn.posVarIndex++ buf := new(bytes.Buffer) fmt.Fprintf(buf, ":v%d", tkn.posVarIndex) return VALUE_ARG, buf.Bytes() case '.': if isDigit(tkn.lastChar) { return tkn.scanNumber(true) } else { return int(ch), nil } case '/': switch tkn.lastChar { case '/': tkn.next() return tkn.scanCommentType1("//") case '*': tkn.next() return tkn.scanCommentType2() default: return int(ch), nil } case '-': if tkn.lastChar == '-' { tkn.next() return tkn.scanCommentType1("--") } else { return int(ch), nil } case '<': switch tkn.lastChar { case '>': tkn.next() return NE, nil case '=': tkn.next() switch tkn.lastChar { case '>': tkn.next() return NULL_SAFE_EQUAL, nil default: return LE, nil } default: return int(ch), nil } case '>': if tkn.lastChar == '=' { tkn.next() return GE, nil } else { return int(ch), nil } case '!': if tkn.lastChar == '=' { tkn.next() return NE, nil } else { return LEX_ERROR, []byte("!") } case '\'', '"': return tkn.scanString(ch, STRING) case '`': return tkn.scanLiteralIdentifier() default: return LEX_ERROR, []byte{byte(ch)} } } } func (tkn *Tokenizer) skipBlank() { ch := tkn.lastChar for ch == ' ' || ch == '\n' || ch == '\r' || ch == '\t' { tkn.next() ch = tkn.lastChar } } func (tkn *Tokenizer) scanIdentifier() (int, []byte) { buffer := bytes.NewBuffer(make([]byte, 0, 8)) buffer.WriteByte(byte(tkn.lastChar)) for tkn.next(); isLetter(tkn.lastChar) || isDigit(tkn.lastChar); tkn.next() { buffer.WriteByte(byte(tkn.lastChar)) } lowered := bytes.ToLower(buffer.Bytes()) if keywordId, found := keywords[string(lowered)]; found { return keywordId, lowered } return ID, buffer.Bytes() } func (tkn *Tokenizer) scanLiteralIdentifier() (int, []byte) { buffer := bytes.NewBuffer(make([]byte, 0, 8)) buffer.WriteByte(byte(tkn.lastChar)) if !isLetter(tkn.lastChar) { return LEX_ERROR, buffer.Bytes() } for tkn.next(); isLetter(tkn.lastChar) || isDigit(tkn.lastChar); tkn.next() { buffer.WriteByte(byte(tkn.lastChar)) } if tkn.lastChar != '`' { return LEX_ERROR, buffer.Bytes() } tkn.next() return ID, buffer.Bytes() } func (tkn *Tokenizer) scanBindVar() (int, []byte) { buffer := bytes.NewBuffer(make([]byte, 0, 8)) buffer.WriteByte(byte(tkn.lastChar)) token := VALUE_ARG tkn.next() if tkn.lastChar == ':' { token = LIST_ARG buffer.WriteByte(byte(tkn.lastChar)) tkn.next() } if !isLetter(tkn.lastChar) { return LEX_ERROR, buffer.Bytes() } for isLetter(tkn.lastChar) || isDigit(tkn.lastChar) || tkn.lastChar == '.' { buffer.WriteByte(byte(tkn.lastChar)) tkn.next() } return token, buffer.Bytes() } func (tkn *Tokenizer) scanMantissa(base int, buffer *bytes.Buffer) { for digitVal(tkn.lastChar) < base { tkn.ConsumeNext(buffer) } } func (tkn *Tokenizer) scanNumber(seenDecimalPoint bool) (int, []byte) { buffer := bytes.NewBuffer(make([]byte, 0, 8)) if seenDecimalPoint { buffer.WriteByte('.') tkn.scanMantissa(10, buffer) goto exponent } if tkn.lastChar == '0' { // int or float tkn.ConsumeNext(buffer) if tkn.lastChar == 'x' || tkn.lastChar == 'X' { // hexadecimal int tkn.ConsumeNext(buffer) tkn.scanMantissa(16, buffer) } else { // octal int or float seenDecimalDigit := false tkn.scanMantissa(8, buffer) if tkn.lastChar == '8' || tkn.lastChar == '9' { // illegal octal int or float seenDecimalDigit = true tkn.scanMantissa(10, buffer) } if tkn.lastChar == '.' || tkn.lastChar == 'e' || tkn.lastChar == 'E' { goto fraction } // octal int if seenDecimalDigit { return LEX_ERROR, buffer.Bytes() } } goto exit } // decimal int or float tkn.scanMantissa(10, buffer) fraction: if tkn.lastChar == '.' { tkn.ConsumeNext(buffer) tkn.scanMantissa(10, buffer) } exponent: if tkn.lastChar == 'e' || tkn.lastChar == 'E' { tkn.ConsumeNext(buffer) if tkn.lastChar == '+' || tkn.lastChar == '-' { tkn.ConsumeNext(buffer) } tkn.scanMantissa(10, buffer) } exit: return NUMBER, buffer.Bytes() } func (tkn *Tokenizer) scanString(delim uint16, typ int) (int, []byte) { buffer := bytes.NewBuffer(make([]byte, 0, 8)) for { ch := tkn.lastChar tkn.next() if ch == delim { if tkn.lastChar == delim { tkn.next() } else { break } } else if ch == '\\' { if tkn.lastChar == EOFCHAR { return LEX_ERROR, buffer.Bytes() } if decodedChar := sqltypes.SqlDecodeMap[byte(tkn.lastChar)]; decodedChar == sqltypes.DONTESCAPE { ch = tkn.lastChar } else { ch = uint16(decodedChar) } tkn.next() } if ch == EOFCHAR { return LEX_ERROR, buffer.Bytes() } buffer.WriteByte(byte(ch)) } return typ, buffer.Bytes() } func (tkn *Tokenizer) scanCommentType1(prefix string) (int, []byte) { buffer := bytes.NewBuffer(make([]byte, 0, 8)) buffer.WriteString(prefix) for tkn.lastChar != EOFCHAR { if tkn.lastChar == '\n' { tkn.ConsumeNext(buffer) break } tkn.ConsumeNext(buffer) } return COMMENT, buffer.Bytes() } func (tkn *Tokenizer) scanCommentType2() (int, []byte) { buffer := bytes.NewBuffer(make([]byte, 0, 8)) buffer.WriteString("/*") for { if tkn.lastChar == '*' { tkn.ConsumeNext(buffer) if tkn.lastChar == '/' { tkn.ConsumeNext(buffer) break } continue } if tkn.lastChar == EOFCHAR { return LEX_ERROR, buffer.Bytes() } tkn.ConsumeNext(buffer) } return COMMENT, buffer.Bytes() } func (tkn *Tokenizer) ConsumeNext(buffer *bytes.Buffer) { if tkn.lastChar == EOFCHAR { // This should never happen. panic("unexpected EOF") } buffer.WriteByte(byte(tkn.lastChar)) tkn.next() } func (tkn *Tokenizer) next() { if ch, err := tkn.InStream.ReadByte(); err != nil { // Only EOF is possible. tkn.lastChar = EOFCHAR } else { tkn.lastChar = uint16(ch) } tkn.Position++ } func isLetter(ch uint16) bool { return 'a' <= ch && ch <= 'z' || 'A' <= ch && ch <= 'Z' || ch == '_' || ch == '@' } func digitVal(ch uint16) int { switch { case '0' <= ch && ch <= '9': return int(ch) - '0' case 'a' <= ch && ch <= 'f': return int(ch) - 'a' + 10 case 'A' <= ch && ch <= 'F': return int(ch) - 'A' + 10 } return 16 // larger than any legal digit val } func isDigit(ch uint16) bool { return '0' <= ch && ch <= '9' } textql-2.0.3/sqlparser/tracked_buffer.go000066400000000000000000000054671263444277100203740ustar00rootroot00000000000000// Copyright 2012, Google Inc. All rights reserved. // Use of this source code is governed by a BSD-style // license that can be found in the LICENSE file. package sqlparser import ( "bytes" "fmt" ) // TrackedBuffer is used to rebuild a query from the ast. // bindLocations keeps track of locations in the buffer that // use bind variables for efficient future substitutions. // nodeFormatter is the formatting function the buffer will // use to format a node. By default(nil), it's FormatNode. // But you can supply a different formatting function if you // want to generate a query that's different from the default. type TrackedBuffer struct { *bytes.Buffer bindLocations []bindLocation nodeFormatter func(buf *TrackedBuffer, node SQLNode) } func NewTrackedBuffer(nodeFormatter func(buf *TrackedBuffer, node SQLNode)) *TrackedBuffer { buf := &TrackedBuffer{ Buffer: bytes.NewBuffer(make([]byte, 0, 128)), bindLocations: make([]bindLocation, 0, 4), nodeFormatter: nodeFormatter, } return buf } // Myprintf mimics fmt.Fprintf(buf, ...), but limited to Node(%v), // Node.Value(%s) and string(%s). It also allows a %a for a value argument, in // which case it adds tracking info for future substitutions. // // The name must be something other than the usual Printf() to avoid "go vet" // warnings due to our custom format specifiers. func (buf *TrackedBuffer) Myprintf(format string, values ...interface{}) { end := len(format) fieldnum := 0 for i := 0; i < end; { lasti := i for i < end && format[i] != '%' { i++ } if i > lasti { buf.WriteString(format[lasti:i]) } if i >= end { break } i++ // '%' switch format[i] { case 'c': switch v := values[fieldnum].(type) { case byte: buf.WriteByte(v) case rune: buf.WriteRune(v) default: panic(fmt.Sprintf("unexpected type %T", v)) } case 's': switch v := values[fieldnum].(type) { case []byte: buf.Write(v) case string: buf.WriteString(v) default: panic(fmt.Sprintf("unexpected type %T", v)) } case 'v': node := values[fieldnum].(SQLNode) if buf.nodeFormatter == nil { node.Format(buf) } else { buf.nodeFormatter(buf, node) } case 'a': buf.WriteArg(values[fieldnum].(string)) default: panic("unexpected") } fieldnum++ i++ } } // WriteArg writes a value argument into the buffer. arg should not contain // the ':' prefix. It also adds tracking info for future substitutions. func (buf *TrackedBuffer) WriteArg(arg string) { buf.bindLocations = append(buf.bindLocations, bindLocation{ offset: buf.Len(), length: len(arg), }) buf.WriteString(arg) } func (buf *TrackedBuffer) ParsedQuery() *ParsedQuery { return &ParsedQuery{Query: buf.String(), bindLocations: buf.bindLocations} } func (buf *TrackedBuffer) HasBindVars() bool { return len(buf.bindLocations) != 0 } textql-2.0.3/sqlparser/y.output000066400000000000000000002562661263444277100166360ustar00rootroot00000000000000 state 0 $accept: .any_command $end distinct_opt: . (45) SELECT shift 15 INSERT shift 17 UPDATE shift 18 DELETE shift 19 DISTINCT shift 29 SET shift 20 CREATE shift 21 ALTER shift 22 DROP shift 24 RENAME shift 23 ANALYZE shift 25 SHOW shift 26 DESCRIBE shift 27 EXPLAIN shift 28 . reduce 45 (src line 340) any_command goto 1 command goto 2 select_statement goto 3 missing_select_statement goto 4 insert_statement goto 5 update_statement goto 6 delete_statement goto 7 set_statement goto 8 create_statement goto 9 alter_statement goto 10 rename_statement goto 11 drop_statement goto 12 analyze_statement goto 13 other_statement goto 14 distinct_opt goto 16 state 1 $accept: any_command.$end $end accept . error state 2 any_command: command. (1) . reduce 1 (src line 152) state 3 command: select_statement. (2) select_statement: select_statement.union_op select_statement UNION shift 31 MINUS shift 32 EXCEPT shift 33 INTERSECT shift 34 . reduce 2 (src line 158) union_op goto 30 state 4 command: missing_select_statement. (3) . reduce 3 (src line 163) state 5 command: insert_statement. (4) . reduce 4 (src line 167) state 6 command: update_statement. (5) . reduce 5 (src line 168) state 7 command: delete_statement. (6) . reduce 6 (src line 169) state 8 command: set_statement. (7) . reduce 7 (src line 170) state 9 command: create_statement. (8) . reduce 8 (src line 171) state 10 command: alter_statement. (9) . reduce 9 (src line 172) state 11 command: rename_statement. (10) . reduce 10 (src line 173) state 12 command: drop_statement. (11) . reduce 11 (src line 174) state 13 command: analyze_statement. (12) . reduce 12 (src line 175) state 14 command: other_statement. (13) . reduce 13 (src line 176) state 15 select_statement: SELECT.comment_opt distinct_opt select_expression_list from_expression_list_opt where_expression_opt group_by_opt having_opt order_by_opt limit_opt lock_opt $$36: . (36) . reduce 36 (src line 299) comment_opt goto 35 $$36 goto 36 state 16 missing_select_statement: distinct_opt.select_expression_list from_expression_list_opt where_expression_opt group_by_opt having_opt order_by_opt limit_opt lock_opt EXISTS shift 54 NULL shift 59 VALUES shift 65 KEYRANGE shift 55 ID shift 41 STRING shift 56 NUMBER shift 57 VALUE_ARG shift 58 '(' shift 46 '~' shift 63 NOT shift 45 '+' shift 61 '-' shift 62 '*' shift 39 CASE shift 66 IF shift 64 . error select_expression_list goto 37 select_expression goto 38 expression goto 40 boolean_expression goto 42 condition goto 44 value goto 47 value_expression goto 43 row_tuple goto 49 keyword_as_func goto 52 subquery goto 60 unary_operator goto 50 column_name goto 48 case_expression goto 53 sql_id goto 51 state 17 insert_statement: INSERT.comment_opt INTO dml_table_expression column_list_opt row_list on_dup_opt insert_statement: INSERT.comment_opt INTO dml_table_expression SET update_list on_dup_opt $$36: . (36) . reduce 36 (src line 299) comment_opt goto 67 $$36 goto 36 state 18 update_statement: UPDATE.comment_opt dml_table_expression SET update_list where_expression_opt order_by_opt limit_opt $$36: . (36) . reduce 36 (src line 299) comment_opt goto 68 $$36 goto 36 state 19 delete_statement: DELETE.comment_opt FROM dml_table_expression where_expression_opt order_by_opt limit_opt $$36: . (36) . reduce 36 (src line 299) comment_opt goto 69 $$36 goto 36 state 20 set_statement: SET.comment_opt update_list $$36: . (36) . reduce 36 (src line 299) comment_opt goto 70 $$36 goto 36 state 21 create_statement: CREATE.TABLE not_exists_opt ID force_eof create_statement: CREATE.constraint_opt INDEX sql_id using_opt ON ID force_eof create_statement: CREATE.VIEW sql_id force_eof constraint_opt: . (201) TABLE shift 71 VIEW shift 73 UNIQUE shift 74 . reduce 201 (src line 1039) constraint_opt goto 72 state 22 alter_statement: ALTER.ignore_opt TABLE ID non_rename_operation force_eof alter_statement: ALTER.ignore_opt TABLE ID RENAME to_opt ID alter_statement: ALTER.VIEW sql_id force_eof ignore_opt: . (192) VIEW shift 76 IGNORE shift 77 . reduce 192 (src line 1017) ignore_opt goto 75 state 23 rename_statement: RENAME.TABLE ID TO ID TABLE shift 78 . error state 24 drop_statement: DROP.TABLE exists_opt ID drop_statement: DROP.INDEX sql_id ON ID drop_statement: DROP.VIEW exists_opt sql_id force_eof TABLE shift 79 INDEX shift 80 VIEW shift 81 . error state 25 analyze_statement: ANALYZE.TABLE ID TABLE shift 82 . error state 26 other_statement: SHOW.force_eof force_eof: . (206) . reduce 206 (src line 1055) force_eof goto 83 state 27 other_statement: DESCRIBE.force_eof force_eof: . (206) . reduce 206 (src line 1055) force_eof goto 84 state 28 other_statement: EXPLAIN.force_eof force_eof: . (206) . reduce 206 (src line 1055) force_eof goto 85 state 29 distinct_opt: DISTINCT. (46) . reduce 46 (src line 344) state 30 select_statement: select_statement union_op.select_statement SELECT shift 15 . error select_statement goto 86 state 31 union_op: UNION. (40) union_op: UNION.ALL ALL shift 87 . reduce 40 (src line 318) state 32 union_op: MINUS. (42) . reduce 42 (src line 327) state 33 union_op: EXCEPT. (43) . reduce 43 (src line 331) state 34 union_op: INTERSECT. (44) . reduce 44 (src line 335) state 35 select_statement: SELECT comment_opt.distinct_opt select_expression_list from_expression_list_opt where_expression_opt group_by_opt having_opt order_by_opt limit_opt lock_opt distinct_opt: . (45) DISTINCT shift 29 . reduce 45 (src line 340) distinct_opt goto 88 state 36 comment_opt: $$36.comment_list comment_list: . (38) . reduce 38 (src line 309) comment_list goto 89 state 37 missing_select_statement: distinct_opt select_expression_list.from_expression_list_opt where_expression_opt group_by_opt having_opt order_by_opt limit_opt lock_opt select_expression_list: select_expression_list.',' select_expression from_expression_list_opt: . (86) FROM shift 92 ',' shift 91 . reduce 86 (src line 526) from_expression_list_opt goto 90 state 38 select_expression_list: select_expression. (47) . reduce 47 (src line 349) state 39 select_expression: '*'. (49) . reduce 49 (src line 359) state 40 select_expression: expression.as_lower_opt as_lower_opt: . (54) AS shift 95 ID shift 96 . reduce 54 (src line 383) as_lower_opt goto 93 sql_id goto 94 state 41 select_expression: ID.'.' '*' column_name: ID.'.' sql_id sql_id: ID. (205) '.' shift 97 . reduce 205 (src line 1049) state 42 expression: boolean_expression. (52) boolean_expression: boolean_expression.AND boolean_expression boolean_expression: boolean_expression.OR boolean_expression OR shift 99 AND shift 98 . reduce 52 (src line 373) state 43 expression: value_expression. (53) condition: value_expression.compare value_expression condition: value_expression.IN col_tuple condition: value_expression.NOT IN col_tuple condition: value_expression.LIKE value_expression condition: value_expression.NOT LIKE value_expression condition: value_expression.BETWEEN value_expression AND value_expression condition: value_expression.NOT BETWEEN value_expression AND value_expression condition: value_expression.IS NULL condition: value_expression.IS NOT NULL value_expression: value_expression.'&' value_expression value_expression: value_expression.'|' value_expression value_expression: value_expression.'^' value_expression value_expression: value_expression.'+' value_expression value_expression: value_expression.'-' value_expression value_expression: value_expression.'*' value_expression value_expression: value_expression.'/' value_expression value_expression: value_expression.'%' value_expression IN shift 101 IS shift 105 LIKE shift 103 BETWEEN shift 104 LE shift 117 GE shift 118 NE shift 119 NULL_SAFE_EQUAL shift 120 '=' shift 114 '<' shift 115 '>' shift 116 NOT shift 102 '&' shift 106 '|' shift 107 '^' shift 108 '+' shift 109 '-' shift 110 '*' shift 111 '/' shift 112 '%' shift 113 . reduce 53 (src line 378) compare goto 100 state 44 boolean_expression: condition. (90) . reduce 90 (src line 545) state 45 boolean_expression: NOT.boolean_expression EXISTS shift 54 NULL shift 59 VALUES shift 65 KEYRANGE shift 55 ID shift 123 STRING shift 56 NUMBER shift 57 VALUE_ARG shift 58 '(' shift 46 '~' shift 63 NOT shift 45 '+' shift 61 '-' shift 62 CASE shift 66 IF shift 64 . error boolean_expression goto 121 condition goto 44 value goto 47 value_expression goto 122 row_tuple goto 49 keyword_as_func goto 52 subquery goto 60 unary_operator goto 50 column_name goto 48 case_expression goto 53 sql_id goto 51 state 46 boolean_expression: '('.boolean_expression ')' subquery: '('.select_statement ')' row_tuple: '('.value_expression_list ')' SELECT shift 15 EXISTS shift 54 NULL shift 59 VALUES shift 65 KEYRANGE shift 55 ID shift 123 STRING shift 56 NUMBER shift 57 VALUE_ARG shift 58 '(' shift 46 '~' shift 63 NOT shift 45 '+' shift 61 '-' shift 62 CASE shift 66 IF shift 64 . error select_statement goto 125 boolean_expression goto 124 condition goto 44 value goto 47 value_expression goto 127 value_expression_list goto 126 row_tuple goto 49 keyword_as_func goto 52 subquery goto 60 unary_operator goto 50 column_name goto 48 case_expression goto 53 sql_id goto 51 state 47 value_expression: value. (119) . reduce 119 (src line 670) state 48 value_expression: column_name. (120) . reduce 120 (src line 675) state 49 value_expression: row_tuple. (121) . reduce 121 (src line 679) state 50 value_expression: unary_operator.value_expression NULL shift 59 VALUES shift 65 ID shift 123 STRING shift 56 NUMBER shift 57 VALUE_ARG shift 58 '(' shift 129 '~' shift 63 '+' shift 61 '-' shift 62 CASE shift 66 IF shift 64 . error value goto 47 value_expression goto 128 row_tuple goto 49 keyword_as_func goto 52 subquery goto 60 unary_operator goto 50 column_name goto 48 case_expression goto 53 sql_id goto 51 state 51 value_expression: sql_id.'(' ')' value_expression: sql_id.'(' select_expression_list ')' value_expression: sql_id.'(' DISTINCT select_expression_list ')' column_name: sql_id. (149) '(' shift 130 . reduce 149 (src line 815) state 52 value_expression: keyword_as_func.'(' select_expression_list ')' '(' shift 131 . error state 53 value_expression: case_expression. (135) . reduce 135 (src line 746) state 54 condition: EXISTS.subquery '(' shift 133 . error subquery goto 132 state 55 condition: KEYRANGE.'(' value ',' value ')' '(' shift 134 . error state 56 value: STRING. (151) . reduce 151 (src line 825) state 57 value: NUMBER. (152) . reduce 152 (src line 830) state 58 value: VALUE_ARG. (153) . reduce 153 (src line 834) state 59 value: NULL. (154) . reduce 154 (src line 838) state 60 row_tuple: subquery. (184) . reduce 184 (src line 986) state 61 unary_operator: '+'. (138) . reduce 138 (src line 761) state 62 unary_operator: '-'. (139) . reduce 139 (src line 766) state 63 unary_operator: '~'. (140) . reduce 140 (src line 770) state 64 keyword_as_func: IF. (136) . reduce 136 (src line 751) state 65 keyword_as_func: VALUES. (137) . reduce 137 (src line 756) state 66 case_expression: CASE.value_expression_opt when_expression_list else_expression_opt END value_expression_opt: . (142) NULL shift 59 VALUES shift 65 ID shift 123 STRING shift 56 NUMBER shift 57 VALUE_ARG shift 58 '(' shift 129 '~' shift 63 '+' shift 61 '-' shift 62 CASE shift 66 IF shift 64 . reduce 142 (src line 781) value goto 47 value_expression goto 136 row_tuple goto 49 keyword_as_func goto 52 subquery goto 60 unary_operator goto 50 column_name goto 48 case_expression goto 53 value_expression_opt goto 135 sql_id goto 51 state 67 insert_statement: INSERT comment_opt.INTO dml_table_expression column_list_opt row_list on_dup_opt insert_statement: INSERT comment_opt.INTO dml_table_expression SET update_list on_dup_opt INTO shift 137 . error state 68 update_statement: UPDATE comment_opt.dml_table_expression SET update_list where_expression_opt order_by_opt limit_opt ID shift 139 . error dml_table_expression goto 138 state 69 delete_statement: DELETE comment_opt.FROM dml_table_expression where_expression_opt order_by_opt limit_opt FROM shift 140 . error state 70 set_statement: SET comment_opt.update_list ID shift 123 . error column_name goto 143 update_list goto 141 update_expression goto 142 sql_id goto 144 state 71 create_statement: CREATE TABLE.not_exists_opt ID force_eof not_exists_opt: . (190) IF shift 146 . reduce 190 (src line 1012) not_exists_opt goto 145 state 72 create_statement: CREATE constraint_opt.INDEX sql_id using_opt ON ID force_eof INDEX shift 147 . error state 73 create_statement: CREATE VIEW.sql_id force_eof ID shift 96 . error sql_id goto 148 state 74 constraint_opt: UNIQUE. (202) . reduce 202 (src line 1041) state 75 alter_statement: ALTER ignore_opt.TABLE ID non_rename_operation force_eof alter_statement: ALTER ignore_opt.TABLE ID RENAME to_opt ID TABLE shift 149 . error state 76 alter_statement: ALTER VIEW.sql_id force_eof ID shift 96 . error sql_id goto 150 state 77 ignore_opt: IGNORE. (193) . reduce 193 (src line 1019) state 78 rename_statement: RENAME TABLE.ID TO ID ID shift 151 . error state 79 drop_statement: DROP TABLE.exists_opt ID exists_opt: . (188) IF shift 153 . reduce 188 (src line 1007) exists_opt goto 152 state 80 drop_statement: DROP INDEX.sql_id ON ID ID shift 96 . error sql_id goto 154 state 81 drop_statement: DROP VIEW.exists_opt sql_id force_eof exists_opt: . (188) IF shift 153 . reduce 188 (src line 1007) exists_opt goto 155 state 82 analyze_statement: ANALYZE TABLE.ID ID shift 156 . error state 83 other_statement: SHOW force_eof. (33) . reduce 33 (src line 285) state 84 other_statement: DESCRIBE force_eof. (34) . reduce 34 (src line 290) state 85 other_statement: EXPLAIN force_eof. (35) . reduce 35 (src line 294) state 86 select_statement: select_statement.union_op select_statement select_statement: select_statement union_op select_statement. (16) . reduce 16 (src line 189) union_op goto 30 state 87 union_op: UNION ALL. (41) . reduce 41 (src line 323) state 88 select_statement: SELECT comment_opt distinct_opt.select_expression_list from_expression_list_opt where_expression_opt group_by_opt having_opt order_by_opt limit_opt lock_opt EXISTS shift 54 NULL shift 59 VALUES shift 65 KEYRANGE shift 55 ID shift 41 STRING shift 56 NUMBER shift 57 VALUE_ARG shift 58 '(' shift 46 '~' shift 63 NOT shift 45 '+' shift 61 '-' shift 62 '*' shift 39 CASE shift 66 IF shift 64 . error select_expression_list goto 157 select_expression goto 38 expression goto 40 boolean_expression goto 42 condition goto 44 value goto 47 value_expression goto 43 row_tuple goto 49 keyword_as_func goto 52 subquery goto 60 unary_operator goto 50 column_name goto 48 case_expression goto 53 sql_id goto 51 state 89 comment_opt: $$36 comment_list. (37) comment_list: comment_list.COMMENT COMMENT shift 158 . reduce 37 (src line 303) state 90 missing_select_statement: distinct_opt select_expression_list from_expression_list_opt.where_expression_opt group_by_opt having_opt order_by_opt limit_opt lock_opt where_expression_opt: . (88) WHERE shift 160 . reduce 88 (src line 536) where_expression_opt goto 159 state 91 select_expression_list: select_expression_list ','.select_expression EXISTS shift 54 NULL shift 59 VALUES shift 65 KEYRANGE shift 55 ID shift 41 STRING shift 56 NUMBER shift 57 VALUE_ARG shift 58 '(' shift 46 '~' shift 63 NOT shift 45 '+' shift 61 '-' shift 62 '*' shift 39 CASE shift 66 IF shift 64 . error select_expression goto 161 expression goto 40 boolean_expression goto 42 condition goto 44 value goto 47 value_expression goto 43 row_tuple goto 49 keyword_as_func goto 52 subquery goto 60 unary_operator goto 50 column_name goto 48 case_expression goto 53 sql_id goto 51 state 92 from_expression_list_opt: FROM.table_expression_list ID shift 166 '(' shift 165 . error table_expression_list goto 162 table_expression goto 163 simple_table_expression goto 164 subquery goto 167 state 93 select_expression: expression as_lower_opt. (50) . reduce 50 (src line 364) state 94 as_lower_opt: sql_id. (55) . reduce 55 (src line 387) state 95 as_lower_opt: AS.sql_id ID shift 96 . error sql_id goto 168 state 96 sql_id: ID. (205) . reduce 205 (src line 1049) state 97 select_expression: ID '.'.'*' column_name: ID '.'.sql_id ID shift 96 '*' shift 169 . error sql_id goto 170 state 98 boolean_expression: boolean_expression AND.boolean_expression EXISTS shift 54 NULL shift 59 VALUES shift 65 KEYRANGE shift 55 ID shift 123 STRING shift 56 NUMBER shift 57 VALUE_ARG shift 58 '(' shift 46 '~' shift 63 NOT shift 45 '+' shift 61 '-' shift 62 CASE shift 66 IF shift 64 . error boolean_expression goto 171 condition goto 44 value goto 47 value_expression goto 122 row_tuple goto 49 keyword_as_func goto 52 subquery goto 60 unary_operator goto 50 column_name goto 48 case_expression goto 53 sql_id goto 51 state 99 boolean_expression: boolean_expression OR.boolean_expression EXISTS shift 54 NULL shift 59 VALUES shift 65 KEYRANGE shift 55 ID shift 123 STRING shift 56 NUMBER shift 57 VALUE_ARG shift 58 '(' shift 46 '~' shift 63 NOT shift 45 '+' shift 61 '-' shift 62 CASE shift 66 IF shift 64 . error boolean_expression goto 172 condition goto 44 value goto 47 value_expression goto 122 row_tuple goto 49 keyword_as_func goto 52 subquery goto 60 unary_operator goto 50 column_name goto 48 case_expression goto 53 sql_id goto 51 state 100 condition: value_expression compare.value_expression NULL shift 59 VALUES shift 65 ID shift 123 STRING shift 56 NUMBER shift 57 VALUE_ARG shift 58 '(' shift 129 '~' shift 63 '+' shift 61 '-' shift 62 CASE shift 66 IF shift 64 . error value goto 47 value_expression goto 173 row_tuple goto 49 keyword_as_func goto 52 subquery goto 60 unary_operator goto 50 column_name goto 48 case_expression goto 53 sql_id goto 51 state 101 condition: value_expression IN.col_tuple LIST_ARG shift 177 '(' shift 175 . error col_tuple goto 174 subquery goto 176 state 102 condition: value_expression NOT.IN col_tuple condition: value_expression NOT.LIKE value_expression condition: value_expression NOT.BETWEEN value_expression AND value_expression IN shift 178 LIKE shift 179 BETWEEN shift 180 . error state 103 condition: value_expression LIKE.value_expression NULL shift 59 VALUES shift 65 ID shift 123 STRING shift 56 NUMBER shift 57 VALUE_ARG shift 58 '(' shift 129 '~' shift 63 '+' shift 61 '-' shift 62 CASE shift 66 IF shift 64 . error value goto 47 value_expression goto 181 row_tuple goto 49 keyword_as_func goto 52 subquery goto 60 unary_operator goto 50 column_name goto 48 case_expression goto 53 sql_id goto 51 state 104 condition: value_expression BETWEEN.value_expression AND value_expression NULL shift 59 VALUES shift 65 ID shift 123 STRING shift 56 NUMBER shift 57 VALUE_ARG shift 58 '(' shift 129 '~' shift 63 '+' shift 61 '-' shift 62 CASE shift 66 IF shift 64 . error value goto 47 value_expression goto 182 row_tuple goto 49 keyword_as_func goto 52 subquery goto 60 unary_operator goto 50 column_name goto 48 case_expression goto 53 sql_id goto 51 state 105 condition: value_expression IS.NULL condition: value_expression IS.NOT NULL NULL shift 183 NOT shift 184 . error state 106 value_expression: value_expression '&'.value_expression NULL shift 59 VALUES shift 65 ID shift 123 STRING shift 56 NUMBER shift 57 VALUE_ARG shift 58 '(' shift 129 '~' shift 63 '+' shift 61 '-' shift 62 CASE shift 66 IF shift 64 . error value goto 47 value_expression goto 185 row_tuple goto 49 keyword_as_func goto 52 subquery goto 60 unary_operator goto 50 column_name goto 48 case_expression goto 53 sql_id goto 51 state 107 value_expression: value_expression '|'.value_expression NULL shift 59 VALUES shift 65 ID shift 123 STRING shift 56 NUMBER shift 57 VALUE_ARG shift 58 '(' shift 129 '~' shift 63 '+' shift 61 '-' shift 62 CASE shift 66 IF shift 64 . error value goto 47 value_expression goto 186 row_tuple goto 49 keyword_as_func goto 52 subquery goto 60 unary_operator goto 50 column_name goto 48 case_expression goto 53 sql_id goto 51 state 108 value_expression: value_expression '^'.value_expression NULL shift 59 VALUES shift 65 ID shift 123 STRING shift 56 NUMBER shift 57 VALUE_ARG shift 58 '(' shift 129 '~' shift 63 '+' shift 61 '-' shift 62 CASE shift 66 IF shift 64 . error value goto 47 value_expression goto 187 row_tuple goto 49 keyword_as_func goto 52 subquery goto 60 unary_operator goto 50 column_name goto 48 case_expression goto 53 sql_id goto 51 state 109 value_expression: value_expression '+'.value_expression NULL shift 59 VALUES shift 65 ID shift 123 STRING shift 56 NUMBER shift 57 VALUE_ARG shift 58 '(' shift 129 '~' shift 63 '+' shift 61 '-' shift 62 CASE shift 66 IF shift 64 . error value goto 47 value_expression goto 188 row_tuple goto 49 keyword_as_func goto 52 subquery goto 60 unary_operator goto 50 column_name goto 48 case_expression goto 53 sql_id goto 51 state 110 value_expression: value_expression '-'.value_expression NULL shift 59 VALUES shift 65 ID shift 123 STRING shift 56 NUMBER shift 57 VALUE_ARG shift 58 '(' shift 129 '~' shift 63 '+' shift 61 '-' shift 62 CASE shift 66 IF shift 64 . error value goto 47 value_expression goto 189 row_tuple goto 49 keyword_as_func goto 52 subquery goto 60 unary_operator goto 50 column_name goto 48 case_expression goto 53 sql_id goto 51 state 111 value_expression: value_expression '*'.value_expression NULL shift 59 VALUES shift 65 ID shift 123 STRING shift 56 NUMBER shift 57 VALUE_ARG shift 58 '(' shift 129 '~' shift 63 '+' shift 61 '-' shift 62 CASE shift 66 IF shift 64 . error value goto 47 value_expression goto 190 row_tuple goto 49 keyword_as_func goto 52 subquery goto 60 unary_operator goto 50 column_name goto 48 case_expression goto 53 sql_id goto 51 state 112 value_expression: value_expression '/'.value_expression NULL shift 59 VALUES shift 65 ID shift 123 STRING shift 56 NUMBER shift 57 VALUE_ARG shift 58 '(' shift 129 '~' shift 63 '+' shift 61 '-' shift 62 CASE shift 66 IF shift 64 . error value goto 47 value_expression goto 191 row_tuple goto 49 keyword_as_func goto 52 subquery goto 60 unary_operator goto 50 column_name goto 48 case_expression goto 53 sql_id goto 51 state 113 value_expression: value_expression '%'.value_expression NULL shift 59 VALUES shift 65 ID shift 123 STRING shift 56 NUMBER shift 57 VALUE_ARG shift 58 '(' shift 129 '~' shift 63 '+' shift 61 '-' shift 62 CASE shift 66 IF shift 64 . error value goto 47 value_expression goto 192 row_tuple goto 49 keyword_as_func goto 52 subquery goto 60 unary_operator goto 50 column_name goto 48 case_expression goto 53 sql_id goto 51 state 114 compare: '='. (106) . reduce 106 (src line 610) state 115 compare: '<'. (107) . reduce 107 (src line 615) state 116 compare: '>'. (108) . reduce 108 (src line 619) state 117 compare: LE. (109) . reduce 109 (src line 623) state 118 compare: GE. (110) . reduce 110 (src line 627) state 119 compare: NE. (111) . reduce 111 (src line 631) state 120 compare: NULL_SAFE_EQUAL. (112) . reduce 112 (src line 635) state 121 boolean_expression: boolean_expression.AND boolean_expression boolean_expression: boolean_expression.OR boolean_expression boolean_expression: NOT boolean_expression. (93) . reduce 93 (src line 555) state 122 condition: value_expression.compare value_expression condition: value_expression.IN col_tuple condition: value_expression.NOT IN col_tuple condition: value_expression.LIKE value_expression condition: value_expression.NOT LIKE value_expression condition: value_expression.BETWEEN value_expression AND value_expression condition: value_expression.NOT BETWEEN value_expression AND value_expression condition: value_expression.IS NULL condition: value_expression.IS NOT NULL value_expression: value_expression.'&' value_expression value_expression: value_expression.'|' value_expression value_expression: value_expression.'^' value_expression value_expression: value_expression.'+' value_expression value_expression: value_expression.'-' value_expression value_expression: value_expression.'*' value_expression value_expression: value_expression.'/' value_expression value_expression: value_expression.'%' value_expression IN shift 101 IS shift 105 LIKE shift 103 BETWEEN shift 104 LE shift 117 GE shift 118 NE shift 119 NULL_SAFE_EQUAL shift 120 '=' shift 114 '<' shift 115 '>' shift 116 NOT shift 102 '&' shift 106 '|' shift 107 '^' shift 108 '+' shift 109 '-' shift 110 '*' shift 111 '/' shift 112 '%' shift 113 . error compare goto 100 state 123 column_name: ID.'.' sql_id sql_id: ID. (205) '.' shift 193 . reduce 205 (src line 1049) state 124 boolean_expression: boolean_expression.AND boolean_expression boolean_expression: boolean_expression.OR boolean_expression boolean_expression: '(' boolean_expression.')' OR shift 99 AND shift 98 ')' shift 194 . error state 125 select_statement: select_statement.union_op select_statement subquery: '(' select_statement.')' UNION shift 31 MINUS shift 32 EXCEPT shift 33 INTERSECT shift 34 ')' shift 195 . error union_op goto 30 state 126 value_expression_list: value_expression_list.',' value_expression row_tuple: '(' value_expression_list.')' ',' shift 196 ')' shift 197 . error state 127 condition: value_expression.compare value_expression condition: value_expression.IN col_tuple condition: value_expression.NOT IN col_tuple condition: value_expression.LIKE value_expression condition: value_expression.NOT LIKE value_expression condition: value_expression.BETWEEN value_expression AND value_expression condition: value_expression.NOT BETWEEN value_expression AND value_expression condition: value_expression.IS NULL condition: value_expression.IS NOT NULL value_expression_list: value_expression. (117) value_expression: value_expression.'&' value_expression value_expression: value_expression.'|' value_expression value_expression: value_expression.'^' value_expression value_expression: value_expression.'+' value_expression value_expression: value_expression.'-' value_expression value_expression: value_expression.'*' value_expression value_expression: value_expression.'/' value_expression value_expression: value_expression.'%' value_expression IN shift 101 IS shift 105 LIKE shift 103 BETWEEN shift 104 LE shift 117 GE shift 118 NE shift 119 NULL_SAFE_EQUAL shift 120 '=' shift 114 '<' shift 115 '>' shift 116 NOT shift 102 '&' shift 106 '|' shift 107 '^' shift 108 '+' shift 109 '-' shift 110 '*' shift 111 '/' shift 112 '%' shift 113 . reduce 117 (src line 660) compare goto 100 state 128 value_expression: value_expression.'&' value_expression value_expression: value_expression.'|' value_expression value_expression: value_expression.'^' value_expression value_expression: value_expression.'+' value_expression value_expression: value_expression.'-' value_expression value_expression: value_expression.'*' value_expression value_expression: value_expression.'/' value_expression value_expression: value_expression.'%' value_expression value_expression: unary_operator value_expression. (130) . reduce 130 (src line 715) state 129 subquery: '('.select_statement ')' row_tuple: '('.value_expression_list ')' SELECT shift 15 NULL shift 59 VALUES shift 65 ID shift 123 STRING shift 56 NUMBER shift 57 VALUE_ARG shift 58 '(' shift 129 '~' shift 63 '+' shift 61 '-' shift 62 CASE shift 66 IF shift 64 . error select_statement goto 125 value goto 47 value_expression goto 198 value_expression_list goto 126 row_tuple goto 49 keyword_as_func goto 52 subquery goto 60 unary_operator goto 50 column_name goto 48 case_expression goto 53 sql_id goto 51 state 130 value_expression: sql_id '('.')' value_expression: sql_id '('.select_expression_list ')' value_expression: sql_id '('.DISTINCT select_expression_list ')' DISTINCT shift 201 EXISTS shift 54 NULL shift 59 VALUES shift 65 KEYRANGE shift 55 ID shift 41 STRING shift 56 NUMBER shift 57 VALUE_ARG shift 58 '(' shift 46 '~' shift 63 NOT shift 45 '+' shift 61 '-' shift 62 '*' shift 39 CASE shift 66 IF shift 64 ')' shift 199 . error select_expression_list goto 200 select_expression goto 38 expression goto 40 boolean_expression goto 42 condition goto 44 value goto 47 value_expression goto 43 row_tuple goto 49 keyword_as_func goto 52 subquery goto 60 unary_operator goto 50 column_name goto 48 case_expression goto 53 sql_id goto 51 state 131 value_expression: keyword_as_func '('.select_expression_list ')' EXISTS shift 54 NULL shift 59 VALUES shift 65 KEYRANGE shift 55 ID shift 41 STRING shift 56 NUMBER shift 57 VALUE_ARG shift 58 '(' shift 46 '~' shift 63 NOT shift 45 '+' shift 61 '-' shift 62 '*' shift 39 CASE shift 66 IF shift 64 . error select_expression_list goto 202 select_expression goto 38 expression goto 40 boolean_expression goto 42 condition goto 44 value goto 47 value_expression goto 43 row_tuple goto 49 keyword_as_func goto 52 subquery goto 60 unary_operator goto 50 column_name goto 48 case_expression goto 53 sql_id goto 51 state 132 condition: EXISTS subquery. (104) . reduce 104 (src line 601) state 133 subquery: '('.select_statement ')' SELECT shift 15 . error select_statement goto 125 state 134 condition: KEYRANGE '('.value ',' value ')' NULL shift 59 STRING shift 56 NUMBER shift 57 VALUE_ARG shift 58 . error value goto 203 state 135 case_expression: CASE value_expression_opt.when_expression_list else_expression_opt END WHEN shift 206 . error when_expression_list goto 204 when_expression goto 205 state 136 value_expression: value_expression.'&' value_expression value_expression: value_expression.'|' value_expression value_expression: value_expression.'^' value_expression value_expression: value_expression.'+' value_expression value_expression: value_expression.'-' value_expression value_expression: value_expression.'*' value_expression value_expression: value_expression.'/' value_expression value_expression: value_expression.'%' value_expression value_expression_opt: value_expression. (143) '&' shift 106 '|' shift 107 '^' shift 108 '+' shift 109 '-' shift 110 '*' shift 111 '/' shift 112 '%' shift 113 . reduce 143 (src line 785) state 137 insert_statement: INSERT comment_opt INTO.dml_table_expression column_list_opt row_list on_dup_opt insert_statement: INSERT comment_opt INTO.dml_table_expression SET update_list on_dup_opt ID shift 139 . error dml_table_expression goto 207 state 138 update_statement: UPDATE comment_opt dml_table_expression.SET update_list where_expression_opt order_by_opt limit_opt SET shift 208 . error state 139 dml_table_expression: ID. (78) dml_table_expression: ID.'.' ID '.' shift 209 . reduce 78 (src line 489) state 140 delete_statement: DELETE comment_opt FROM.dml_table_expression where_expression_opt order_by_opt limit_opt ID shift 139 . error dml_table_expression goto 210 state 141 set_statement: SET comment_opt update_list. (21) update_list: update_list.',' update_expression ',' shift 211 . reduce 21 (src line 222) state 142 update_list: update_expression. (185) . reduce 185 (src line 991) state 143 update_expression: column_name.'=' value_expression '=' shift 212 . error state 144 column_name: sql_id. (149) . reduce 149 (src line 815) state 145 create_statement: CREATE TABLE not_exists_opt.ID force_eof ID shift 213 . error state 146 not_exists_opt: IF.NOT EXISTS NOT shift 214 . error state 147 create_statement: CREATE constraint_opt INDEX.sql_id using_opt ON ID force_eof ID shift 96 . error sql_id goto 215 state 148 create_statement: CREATE VIEW sql_id.force_eof force_eof: . (206) . reduce 206 (src line 1055) force_eof goto 216 state 149 alter_statement: ALTER ignore_opt TABLE.ID non_rename_operation force_eof alter_statement: ALTER ignore_opt TABLE.ID RENAME to_opt ID ID shift 217 . error state 150 alter_statement: ALTER VIEW sql_id.force_eof force_eof: . (206) . reduce 206 (src line 1055) force_eof goto 218 state 151 rename_statement: RENAME TABLE ID.TO ID TO shift 219 . error state 152 drop_statement: DROP TABLE exists_opt.ID ID shift 220 . error state 153 exists_opt: IF.EXISTS EXISTS shift 221 . error state 154 drop_statement: DROP INDEX sql_id.ON ID ON shift 222 . error state 155 drop_statement: DROP VIEW exists_opt.sql_id force_eof ID shift 96 . error sql_id goto 223 state 156 analyze_statement: ANALYZE TABLE ID. (32) . reduce 32 (src line 279) state 157 select_statement: SELECT comment_opt distinct_opt select_expression_list.from_expression_list_opt where_expression_opt group_by_opt having_opt order_by_opt limit_opt lock_opt select_expression_list: select_expression_list.',' select_expression from_expression_list_opt: . (86) FROM shift 92 ',' shift 91 . reduce 86 (src line 526) from_expression_list_opt goto 224 state 158 comment_list: comment_list COMMENT. (39) . reduce 39 (src line 313) state 159 missing_select_statement: distinct_opt select_expression_list from_expression_list_opt where_expression_opt.group_by_opt having_opt order_by_opt limit_opt lock_opt group_by_opt: . (155) GROUP shift 226 . reduce 155 (src line 843) group_by_opt goto 225 state 160 where_expression_opt: WHERE.boolean_expression EXISTS shift 54 NULL shift 59 VALUES shift 65 KEYRANGE shift 55 ID shift 123 STRING shift 56 NUMBER shift 57 VALUE_ARG shift 58 '(' shift 46 '~' shift 63 NOT shift 45 '+' shift 61 '-' shift 62 CASE shift 66 IF shift 64 . error boolean_expression goto 227 condition goto 44 value goto 47 value_expression goto 122 row_tuple goto 49 keyword_as_func goto 52 subquery goto 60 unary_operator goto 50 column_name goto 48 case_expression goto 53 sql_id goto 51 state 161 select_expression_list: select_expression_list ',' select_expression. (48) . reduce 48 (src line 354) state 162 table_expression_list: table_expression_list.',' table_expression from_expression_list_opt: FROM table_expression_list. (87) ',' shift 228 . reduce 87 (src line 530) state 163 table_expression_list: table_expression. (57) table_expression: table_expression.join_type table_expression table_expression: table_expression.join_type table_expression ON boolean_expression JOIN shift 230 STRAIGHT_JOIN shift 231 LEFT shift 232 RIGHT shift 233 INNER shift 234 CROSS shift 235 NATURAL shift 236 . reduce 57 (src line 396) join_type goto 229 state 164 table_expression: simple_table_expression.as_opt index_hint_list as_opt: . (63) AS shift 239 ID shift 238 . reduce 63 (src line 424) as_opt goto 237 state 165 table_expression: '('.table_expression ')' subquery: '('.select_statement ')' SELECT shift 15 ID shift 166 '(' shift 165 . error select_statement goto 125 table_expression goto 240 simple_table_expression goto 164 subquery goto 167 state 166 simple_table_expression: ID. (75) simple_table_expression: ID.'.' ID '.' shift 241 . reduce 75 (src line 475) state 167 simple_table_expression: subquery. (77) . reduce 77 (src line 484) state 168 as_lower_opt: AS sql_id. (56) . reduce 56 (src line 391) state 169 select_expression: ID '.' '*'. (51) . reduce 51 (src line 368) state 170 column_name: ID '.' sql_id. (150) . reduce 150 (src line 820) state 171 boolean_expression: boolean_expression.AND boolean_expression boolean_expression: boolean_expression AND boolean_expression. (91) boolean_expression: boolean_expression.OR boolean_expression . reduce 91 (src line 547) state 172 boolean_expression: boolean_expression.AND boolean_expression boolean_expression: boolean_expression.OR boolean_expression boolean_expression: boolean_expression OR boolean_expression. (92) AND shift 98 . reduce 92 (src line 551) state 173 condition: value_expression compare value_expression. (95) value_expression: value_expression.'&' value_expression value_expression: value_expression.'|' value_expression value_expression: value_expression.'^' value_expression value_expression: value_expression.'+' value_expression value_expression: value_expression.'-' value_expression value_expression: value_expression.'*' value_expression value_expression: value_expression.'/' value_expression value_expression: value_expression.'%' value_expression '&' shift 106 '|' shift 107 '^' shift 108 '+' shift 109 '-' shift 110 '*' shift 111 '/' shift 112 '%' shift 113 . reduce 95 (src line 564) state 174 condition: value_expression IN col_tuple. (96) . reduce 96 (src line 569) state 175 col_tuple: '('.value_expression_list ')' subquery: '('.select_statement ')' SELECT shift 15 NULL shift 59 VALUES shift 65 ID shift 123 STRING shift 56 NUMBER shift 57 VALUE_ARG shift 58 '(' shift 129 '~' shift 63 '+' shift 61 '-' shift 62 CASE shift 66 IF shift 64 . error select_statement goto 125 value goto 47 value_expression goto 198 value_expression_list goto 242 row_tuple goto 49 keyword_as_func goto 52 subquery goto 60 unary_operator goto 50 column_name goto 48 case_expression goto 53 sql_id goto 51 state 176 col_tuple: subquery. (114) . reduce 114 (src line 645) state 177 col_tuple: LIST_ARG. (115) . reduce 115 (src line 649) state 178 condition: value_expression NOT IN.col_tuple LIST_ARG shift 177 '(' shift 175 . error col_tuple goto 243 subquery goto 176 state 179 condition: value_expression NOT LIKE.value_expression NULL shift 59 VALUES shift 65 ID shift 123 STRING shift 56 NUMBER shift 57 VALUE_ARG shift 58 '(' shift 129 '~' shift 63 '+' shift 61 '-' shift 62 CASE shift 66 IF shift 64 . error value goto 47 value_expression goto 244 row_tuple goto 49 keyword_as_func goto 52 subquery goto 60 unary_operator goto 50 column_name goto 48 case_expression goto 53 sql_id goto 51 state 180 condition: value_expression NOT BETWEEN.value_expression AND value_expression NULL shift 59 VALUES shift 65 ID shift 123 STRING shift 56 NUMBER shift 57 VALUE_ARG shift 58 '(' shift 129 '~' shift 63 '+' shift 61 '-' shift 62 CASE shift 66 IF shift 64 . error value goto 47 value_expression goto 245 row_tuple goto 49 keyword_as_func goto 52 subquery goto 60 unary_operator goto 50 column_name goto 48 case_expression goto 53 sql_id goto 51 state 181 condition: value_expression LIKE value_expression. (98) value_expression: value_expression.'&' value_expression value_expression: value_expression.'|' value_expression value_expression: value_expression.'^' value_expression value_expression: value_expression.'+' value_expression value_expression: value_expression.'-' value_expression value_expression: value_expression.'*' value_expression value_expression: value_expression.'/' value_expression value_expression: value_expression.'%' value_expression '&' shift 106 '|' shift 107 '^' shift 108 '+' shift 109 '-' shift 110 '*' shift 111 '/' shift 112 '%' shift 113 . reduce 98 (src line 577) state 182 condition: value_expression BETWEEN value_expression.AND value_expression value_expression: value_expression.'&' value_expression value_expression: value_expression.'|' value_expression value_expression: value_expression.'^' value_expression value_expression: value_expression.'+' value_expression value_expression: value_expression.'-' value_expression value_expression: value_expression.'*' value_expression value_expression: value_expression.'/' value_expression value_expression: value_expression.'%' value_expression AND shift 246 '&' shift 106 '|' shift 107 '^' shift 108 '+' shift 109 '-' shift 110 '*' shift 111 '/' shift 112 '%' shift 113 . error state 183 condition: value_expression IS NULL. (102) . reduce 102 (src line 593) state 184 condition: value_expression IS NOT.NULL NULL shift 247 . error state 185 value_expression: value_expression.'&' value_expression value_expression: value_expression '&' value_expression. (122) value_expression: value_expression.'|' value_expression value_expression: value_expression.'^' value_expression value_expression: value_expression.'+' value_expression value_expression: value_expression.'-' value_expression value_expression: value_expression.'*' value_expression value_expression: value_expression.'/' value_expression value_expression: value_expression.'%' value_expression '+' shift 109 '-' shift 110 '*' shift 111 '/' shift 112 '%' shift 113 . reduce 122 (src line 683) state 186 value_expression: value_expression.'&' value_expression value_expression: value_expression.'|' value_expression value_expression: value_expression '|' value_expression. (123) value_expression: value_expression.'^' value_expression value_expression: value_expression.'+' value_expression value_expression: value_expression.'-' value_expression value_expression: value_expression.'*' value_expression value_expression: value_expression.'/' value_expression value_expression: value_expression.'%' value_expression '+' shift 109 '-' shift 110 '*' shift 111 '/' shift 112 '%' shift 113 . reduce 123 (src line 687) state 187 value_expression: value_expression.'&' value_expression value_expression: value_expression.'|' value_expression value_expression: value_expression.'^' value_expression value_expression: value_expression '^' value_expression. (124) value_expression: value_expression.'+' value_expression value_expression: value_expression.'-' value_expression value_expression: value_expression.'*' value_expression value_expression: value_expression.'/' value_expression value_expression: value_expression.'%' value_expression '+' shift 109 '-' shift 110 '*' shift 111 '/' shift 112 '%' shift 113 . reduce 124 (src line 691) state 188 value_expression: value_expression.'&' value_expression value_expression: value_expression.'|' value_expression value_expression: value_expression.'^' value_expression value_expression: value_expression.'+' value_expression value_expression: value_expression '+' value_expression. (125) value_expression: value_expression.'-' value_expression value_expression: value_expression.'*' value_expression value_expression: value_expression.'/' value_expression value_expression: value_expression.'%' value_expression '*' shift 111 '/' shift 112 '%' shift 113 . reduce 125 (src line 695) state 189 value_expression: value_expression.'&' value_expression value_expression: value_expression.'|' value_expression value_expression: value_expression.'^' value_expression value_expression: value_expression.'+' value_expression value_expression: value_expression.'-' value_expression value_expression: value_expression '-' value_expression. (126) value_expression: value_expression.'*' value_expression value_expression: value_expression.'/' value_expression value_expression: value_expression.'%' value_expression '*' shift 111 '/' shift 112 '%' shift 113 . reduce 126 (src line 699) state 190 value_expression: value_expression.'&' value_expression value_expression: value_expression.'|' value_expression value_expression: value_expression.'^' value_expression value_expression: value_expression.'+' value_expression value_expression: value_expression.'-' value_expression value_expression: value_expression.'*' value_expression value_expression: value_expression '*' value_expression. (127) value_expression: value_expression.'/' value_expression value_expression: value_expression.'%' value_expression . reduce 127 (src line 703) state 191 value_expression: value_expression.'&' value_expression value_expression: value_expression.'|' value_expression value_expression: value_expression.'^' value_expression value_expression: value_expression.'+' value_expression value_expression: value_expression.'-' value_expression value_expression: value_expression.'*' value_expression value_expression: value_expression.'/' value_expression value_expression: value_expression '/' value_expression. (128) value_expression: value_expression.'%' value_expression . reduce 128 (src line 707) state 192 value_expression: value_expression.'&' value_expression value_expression: value_expression.'|' value_expression value_expression: value_expression.'^' value_expression value_expression: value_expression.'+' value_expression value_expression: value_expression.'-' value_expression value_expression: value_expression.'*' value_expression value_expression: value_expression.'/' value_expression value_expression: value_expression.'%' value_expression value_expression: value_expression '%' value_expression. (129) . reduce 129 (src line 711) state 193 column_name: ID '.'.sql_id ID shift 96 . error sql_id goto 170 state 194 boolean_expression: '(' boolean_expression ')'. (94) . reduce 94 (src line 559) state 195 subquery: '(' select_statement ')'. (116) . reduce 116 (src line 654) state 196 value_expression_list: value_expression_list ','.value_expression NULL shift 59 VALUES shift 65 ID shift 123 STRING shift 56 NUMBER shift 57 VALUE_ARG shift 58 '(' shift 129 '~' shift 63 '+' shift 61 '-' shift 62 CASE shift 66 IF shift 64 . error value goto 47 value_expression goto 248 row_tuple goto 49 keyword_as_func goto 52 subquery goto 60 unary_operator goto 50 column_name goto 48 case_expression goto 53 sql_id goto 51 state 197 row_tuple: '(' value_expression_list ')'. (183) . reduce 183 (src line 981) state 198 value_expression_list: value_expression. (117) value_expression: value_expression.'&' value_expression value_expression: value_expression.'|' value_expression value_expression: value_expression.'^' value_expression value_expression: value_expression.'+' value_expression value_expression: value_expression.'-' value_expression value_expression: value_expression.'*' value_expression value_expression: value_expression.'/' value_expression value_expression: value_expression.'%' value_expression '&' shift 106 '|' shift 107 '^' shift 108 '+' shift 109 '-' shift 110 '*' shift 111 '/' shift 112 '%' shift 113 . reduce 117 (src line 660) state 199 value_expression: sql_id '(' ')'. (131) . reduce 131 (src line 730) state 200 select_expression_list: select_expression_list.',' select_expression value_expression: sql_id '(' select_expression_list.')' ',' shift 91 ')' shift 249 . error state 201 value_expression: sql_id '(' DISTINCT.select_expression_list ')' EXISTS shift 54 NULL shift 59 VALUES shift 65 KEYRANGE shift 55 ID shift 41 STRING shift 56 NUMBER shift 57 VALUE_ARG shift 58 '(' shift 46 '~' shift 63 NOT shift 45 '+' shift 61 '-' shift 62 '*' shift 39 CASE shift 66 IF shift 64 . error select_expression_list goto 250 select_expression goto 38 expression goto 40 boolean_expression goto 42 condition goto 44 value goto 47 value_expression goto 43 row_tuple goto 49 keyword_as_func goto 52 subquery goto 60 unary_operator goto 50 column_name goto 48 case_expression goto 53 sql_id goto 51 state 202 select_expression_list: select_expression_list.',' select_expression value_expression: keyword_as_func '(' select_expression_list.')' ',' shift 91 ')' shift 251 . error state 203 condition: KEYRANGE '(' value.',' value ')' ',' shift 252 . error state 204 case_expression: CASE value_expression_opt when_expression_list.else_expression_opt END when_expression_list: when_expression_list.when_expression else_expression_opt: . (147) WHEN shift 206 ELSE shift 255 . reduce 147 (src line 806) when_expression goto 254 else_expression_opt goto 253 state 205 when_expression_list: when_expression. (144) . reduce 144 (src line 790) state 206 when_expression: WHEN.boolean_expression THEN value_expression EXISTS shift 54 NULL shift 59 VALUES shift 65 KEYRANGE shift 55 ID shift 123 STRING shift 56 NUMBER shift 57 VALUE_ARG shift 58 '(' shift 46 '~' shift 63 NOT shift 45 '+' shift 61 '-' shift 62 CASE shift 66 IF shift 64 . error boolean_expression goto 256 condition goto 44 value goto 47 value_expression goto 122 row_tuple goto 49 keyword_as_func goto 52 subquery goto 60 unary_operator goto 50 column_name goto 48 case_expression goto 53 sql_id goto 51 state 207 insert_statement: INSERT comment_opt INTO dml_table_expression.column_list_opt row_list on_dup_opt insert_statement: INSERT comment_opt INTO dml_table_expression.SET update_list on_dup_opt column_list_opt: . (173) SET shift 258 '(' shift 259 . reduce 173 (src line 933) column_list_opt goto 257 state 208 update_statement: UPDATE comment_opt dml_table_expression SET.update_list where_expression_opt order_by_opt limit_opt ID shift 123 . error column_name goto 143 update_list goto 260 update_expression goto 142 sql_id goto 144 state 209 dml_table_expression: ID '.'.ID ID shift 261 . error state 210 delete_statement: DELETE comment_opt FROM dml_table_expression.where_expression_opt order_by_opt limit_opt where_expression_opt: . (88) WHERE shift 160 . reduce 88 (src line 536) where_expression_opt goto 262 state 211 update_list: update_list ','.update_expression ID shift 123 . error column_name goto 143 update_expression goto 263 sql_id goto 144 state 212 update_expression: column_name '='.value_expression NULL shift 59 VALUES shift 65 ID shift 123 STRING shift 56 NUMBER shift 57 VALUE_ARG shift 58 '(' shift 129 '~' shift 63 '+' shift 61 '-' shift 62 CASE shift 66 IF shift 64 . error value goto 47 value_expression goto 264 row_tuple goto 49 keyword_as_func goto 52 subquery goto 60 unary_operator goto 50 column_name goto 48 case_expression goto 53 sql_id goto 51 state 213 create_statement: CREATE TABLE not_exists_opt ID.force_eof force_eof: . (206) . reduce 206 (src line 1055) force_eof goto 265 state 214 not_exists_opt: IF NOT.EXISTS EXISTS shift 266 . error state 215 create_statement: CREATE constraint_opt INDEX sql_id.using_opt ON ID force_eof using_opt: . (203) USING shift 268 . reduce 203 (src line 1044) using_opt goto 267 state 216 create_statement: CREATE VIEW sql_id force_eof. (24) . reduce 24 (src line 238) state 217 alter_statement: ALTER ignore_opt TABLE ID.non_rename_operation force_eof alter_statement: ALTER ignore_opt TABLE ID.RENAME to_opt ID ORDER shift 274 DEFAULT shift 272 ID shift 275 ALTER shift 271 DROP shift 273 RENAME shift 270 . error non_rename_operation goto 269 state 218 alter_statement: ALTER VIEW sql_id force_eof. (27) . reduce 27 (src line 253) state 219 rename_statement: RENAME TABLE ID TO.ID ID shift 276 . error state 220 drop_statement: DROP TABLE exists_opt ID. (29) . reduce 29 (src line 264) state 221 exists_opt: IF EXISTS. (189) . reduce 189 (src line 1009) state 222 drop_statement: DROP INDEX sql_id ON.ID ID shift 277 . error state 223 drop_statement: DROP VIEW exists_opt sql_id.force_eof force_eof: . (206) . reduce 206 (src line 1055) force_eof goto 278 state 224 select_statement: SELECT comment_opt distinct_opt select_expression_list from_expression_list_opt.where_expression_opt group_by_opt having_opt order_by_opt limit_opt lock_opt where_expression_opt: . (88) WHERE shift 160 . reduce 88 (src line 536) where_expression_opt goto 279 state 225 missing_select_statement: distinct_opt select_expression_list from_expression_list_opt where_expression_opt group_by_opt.having_opt order_by_opt limit_opt lock_opt having_opt: . (157) HAVING shift 281 . reduce 157 (src line 852) having_opt goto 280 state 226 group_by_opt: GROUP.BY value_expression_list BY shift 282 . error state 227 where_expression_opt: WHERE boolean_expression. (89) boolean_expression: boolean_expression.AND boolean_expression boolean_expression: boolean_expression.OR boolean_expression OR shift 99 AND shift 98 . reduce 89 (src line 540) state 228 table_expression_list: table_expression_list ','.table_expression ID shift 166 '(' shift 165 . error table_expression goto 283 simple_table_expression goto 164 subquery goto 167 state 229 table_expression: table_expression join_type.table_expression table_expression: table_expression join_type.table_expression ON boolean_expression ID shift 166 '(' shift 165 . error table_expression goto 284 simple_table_expression goto 164 subquery goto 167 state 230 join_type: JOIN. (66) . reduce 66 (src line 437) state 231 join_type: STRAIGHT_JOIN. (67) . reduce 67 (src line 442) state 232 join_type: LEFT.JOIN join_type: LEFT.OUTER JOIN JOIN shift 285 OUTER shift 286 . error state 233 join_type: RIGHT.JOIN join_type: RIGHT.OUTER JOIN JOIN shift 287 OUTER shift 288 . error state 234 join_type: INNER.JOIN JOIN shift 289 . error state 235 join_type: CROSS.JOIN JOIN shift 290 . error state 236 join_type: NATURAL.JOIN JOIN shift 291 . error state 237 table_expression: simple_table_expression as_opt.index_hint_list index_hint_list: . (80) USE shift 293 FORCE shift 295 IGNORE shift 294 . reduce 80 (src line 499) index_hint_list goto 292 state 238 as_opt: ID. (64) . reduce 64 (src line 428) state 239 as_opt: AS.ID ID shift 296 . error state 240 table_expression: '(' table_expression.')' table_expression: table_expression.join_type table_expression table_expression: table_expression.join_type table_expression ON boolean_expression JOIN shift 230 STRAIGHT_JOIN shift 231 LEFT shift 232 RIGHT shift 233 INNER shift 234 CROSS shift 235 NATURAL shift 236 ')' shift 297 . error join_type goto 229 state 241 simple_table_expression: ID '.'.ID ID shift 298 . error state 242 col_tuple: '(' value_expression_list.')' value_expression_list: value_expression_list.',' value_expression ',' shift 196 ')' shift 299 . error state 243 condition: value_expression NOT IN col_tuple. (97) . reduce 97 (src line 573) state 244 condition: value_expression NOT LIKE value_expression. (99) value_expression: value_expression.'&' value_expression value_expression: value_expression.'|' value_expression value_expression: value_expression.'^' value_expression value_expression: value_expression.'+' value_expression value_expression: value_expression.'-' value_expression value_expression: value_expression.'*' value_expression value_expression: value_expression.'/' value_expression value_expression: value_expression.'%' value_expression '&' shift 106 '|' shift 107 '^' shift 108 '+' shift 109 '-' shift 110 '*' shift 111 '/' shift 112 '%' shift 113 . reduce 99 (src line 581) state 245 condition: value_expression NOT BETWEEN value_expression.AND value_expression value_expression: value_expression.'&' value_expression value_expression: value_expression.'|' value_expression value_expression: value_expression.'^' value_expression value_expression: value_expression.'+' value_expression value_expression: value_expression.'-' value_expression value_expression: value_expression.'*' value_expression value_expression: value_expression.'/' value_expression value_expression: value_expression.'%' value_expression AND shift 300 '&' shift 106 '|' shift 107 '^' shift 108 '+' shift 109 '-' shift 110 '*' shift 111 '/' shift 112 '%' shift 113 . error state 246 condition: value_expression BETWEEN value_expression AND.value_expression NULL shift 59 VALUES shift 65 ID shift 123 STRING shift 56 NUMBER shift 57 VALUE_ARG shift 58 '(' shift 129 '~' shift 63 '+' shift 61 '-' shift 62 CASE shift 66 IF shift 64 . error value goto 47 value_expression goto 301 row_tuple goto 49 keyword_as_func goto 52 subquery goto 60 unary_operator goto 50 column_name goto 48 case_expression goto 53 sql_id goto 51 state 247 condition: value_expression IS NOT NULL. (103) . reduce 103 (src line 597) state 248 value_expression_list: value_expression_list ',' value_expression. (118) value_expression: value_expression.'&' value_expression value_expression: value_expression.'|' value_expression value_expression: value_expression.'^' value_expression value_expression: value_expression.'+' value_expression value_expression: value_expression.'-' value_expression value_expression: value_expression.'*' value_expression value_expression: value_expression.'/' value_expression value_expression: value_expression.'%' value_expression '&' shift 106 '|' shift 107 '^' shift 108 '+' shift 109 '-' shift 110 '*' shift 111 '/' shift 112 '%' shift 113 . reduce 118 (src line 665) state 249 value_expression: sql_id '(' select_expression_list ')'. (132) . reduce 132 (src line 734) state 250 select_expression_list: select_expression_list.',' select_expression value_expression: sql_id '(' DISTINCT select_expression_list.')' ',' shift 91 ')' shift 302 . error state 251 value_expression: keyword_as_func '(' select_expression_list ')'. (134) . reduce 134 (src line 742) state 252 condition: KEYRANGE '(' value ','.value ')' NULL shift 59 STRING shift 56 NUMBER shift 57 VALUE_ARG shift 58 . error value goto 303 state 253 case_expression: CASE value_expression_opt when_expression_list else_expression_opt.END END shift 304 . error state 254 when_expression_list: when_expression_list when_expression. (145) . reduce 145 (src line 795) state 255 else_expression_opt: ELSE.value_expression NULL shift 59 VALUES shift 65 ID shift 123 STRING shift 56 NUMBER shift 57 VALUE_ARG shift 58 '(' shift 129 '~' shift 63 '+' shift 61 '-' shift 62 CASE shift 66 IF shift 64 . error value goto 47 value_expression goto 305 row_tuple goto 49 keyword_as_func goto 52 subquery goto 60 unary_operator goto 50 column_name goto 48 case_expression goto 53 sql_id goto 51 state 256 boolean_expression: boolean_expression.AND boolean_expression boolean_expression: boolean_expression.OR boolean_expression when_expression: WHEN boolean_expression.THEN value_expression OR shift 99 AND shift 98 THEN shift 306 . error state 257 insert_statement: INSERT comment_opt INTO dml_table_expression column_list_opt.row_list on_dup_opt SELECT shift 15 VALUES shift 308 . error select_statement goto 309 row_list goto 307 state 258 insert_statement: INSERT comment_opt INTO dml_table_expression SET.update_list on_dup_opt ID shift 123 . error column_name goto 143 update_list goto 310 update_expression goto 142 sql_id goto 144 state 259 column_list_opt: '('.column_list ')' ID shift 123 . error column_name goto 312 column_list goto 311 sql_id goto 144 state 260 update_statement: UPDATE comment_opt dml_table_expression SET update_list.where_expression_opt order_by_opt limit_opt update_list: update_list.',' update_expression where_expression_opt: . (88) WHERE shift 160 ',' shift 211 . reduce 88 (src line 536) where_expression_opt goto 313 state 261 dml_table_expression: ID '.' ID. (79) . reduce 79 (src line 494) state 262 delete_statement: DELETE comment_opt FROM dml_table_expression where_expression_opt.order_by_opt limit_opt order_by_opt: . (159) ORDER shift 315 . reduce 159 (src line 861) order_by_opt goto 314 state 263 update_list: update_list ',' update_expression. (186) . reduce 186 (src line 996) state 264 value_expression: value_expression.'&' value_expression value_expression: value_expression.'|' value_expression value_expression: value_expression.'^' value_expression value_expression: value_expression.'+' value_expression value_expression: value_expression.'-' value_expression value_expression: value_expression.'*' value_expression value_expression: value_expression.'/' value_expression value_expression: value_expression.'%' value_expression update_expression: column_name '=' value_expression. (187) '&' shift 106 '|' shift 107 '^' shift 108 '+' shift 109 '-' shift 110 '*' shift 111 '/' shift 112 '%' shift 113 . reduce 187 (src line 1001) state 265 create_statement: CREATE TABLE not_exists_opt ID force_eof. (22) . reduce 22 (src line 228) state 266 not_exists_opt: IF NOT EXISTS. (191) . reduce 191 (src line 1014) state 267 create_statement: CREATE constraint_opt INDEX sql_id using_opt.ON ID force_eof ON shift 316 . error state 268 using_opt: USING.sql_id ID shift 96 . error sql_id goto 317 state 269 alter_statement: ALTER ignore_opt TABLE ID non_rename_operation.force_eof force_eof: . (206) . reduce 206 (src line 1055) force_eof goto 318 state 270 alter_statement: ALTER ignore_opt TABLE ID RENAME.to_opt ID to_opt: . (199) TO shift 320 . reduce 199 (src line 1034) to_opt goto 319 state 271 non_rename_operation: ALTER. (194) . reduce 194 (src line 1022) state 272 non_rename_operation: DEFAULT. (195) . reduce 195 (src line 1025) state 273 non_rename_operation: DROP. (196) . reduce 196 (src line 1027) state 274 non_rename_operation: ORDER. (197) . reduce 197 (src line 1029) state 275 non_rename_operation: ID. (198) . reduce 198 (src line 1031) state 276 rename_statement: RENAME TABLE ID TO ID. (28) . reduce 28 (src line 258) state 277 drop_statement: DROP INDEX sql_id ON ID. (30) . reduce 30 (src line 269) state 278 drop_statement: DROP VIEW exists_opt sql_id force_eof. (31) . reduce 31 (src line 274) state 279 select_statement: SELECT comment_opt distinct_opt select_expression_list from_expression_list_opt where_expression_opt.group_by_opt having_opt order_by_opt limit_opt lock_opt group_by_opt: . (155) GROUP shift 226 . reduce 155 (src line 843) group_by_opt goto 321 state 280 missing_select_statement: distinct_opt select_expression_list from_expression_list_opt where_expression_opt group_by_opt having_opt.order_by_opt limit_opt lock_opt order_by_opt: . (159) ORDER shift 315 . reduce 159 (src line 861) order_by_opt goto 322 state 281 having_opt: HAVING.boolean_expression EXISTS shift 54 NULL shift 59 VALUES shift 65 KEYRANGE shift 55 ID shift 123 STRING shift 56 NUMBER shift 57 VALUE_ARG shift 58 '(' shift 46 '~' shift 63 NOT shift 45 '+' shift 61 '-' shift 62 CASE shift 66 IF shift 64 . error boolean_expression goto 323 condition goto 44 value goto 47 value_expression goto 122 row_tuple goto 49 keyword_as_func goto 52 subquery goto 60 unary_operator goto 50 column_name goto 48 case_expression goto 53 sql_id goto 51 state 282 group_by_opt: GROUP BY.value_expression_list NULL shift 59 VALUES shift 65 ID shift 123 STRING shift 56 NUMBER shift 57 VALUE_ARG shift 58 '(' shift 129 '~' shift 63 '+' shift 61 '-' shift 62 CASE shift 66 IF shift 64 . error value goto 47 value_expression goto 198 value_expression_list goto 324 row_tuple goto 49 keyword_as_func goto 52 subquery goto 60 unary_operator goto 50 column_name goto 48 case_expression goto 53 sql_id goto 51 state 283 table_expression_list: table_expression_list ',' table_expression. (58) table_expression: table_expression.join_type table_expression table_expression: table_expression.join_type table_expression ON boolean_expression JOIN shift 230 STRAIGHT_JOIN shift 231 LEFT shift 232 RIGHT shift 233 INNER shift 234 CROSS shift 235 NATURAL shift 236 . reduce 58 (src line 401) join_type goto 229 state 284 table_expression: table_expression.join_type table_expression table_expression: table_expression join_type table_expression. (61) table_expression: table_expression.join_type table_expression ON boolean_expression table_expression: table_expression join_type table_expression.ON boolean_expression ON shift 325 . reduce 61 (src line 415) join_type goto 229 state 285 join_type: LEFT JOIN. (68) . reduce 68 (src line 446) state 286 join_type: LEFT OUTER.JOIN JOIN shift 326 . error state 287 join_type: RIGHT JOIN. (70) . reduce 70 (src line 454) state 288 join_type: RIGHT OUTER.JOIN JOIN shift 327 . error state 289 join_type: INNER JOIN. (72) . reduce 72 (src line 462) state 290 join_type: CROSS JOIN. (73) . reduce 73 (src line 466) state 291 join_type: NATURAL JOIN. (74) . reduce 74 (src line 470) state 292 table_expression: simple_table_expression as_opt index_hint_list. (59) . reduce 59 (src line 406) state 293 index_hint_list: USE.INDEX '(' index_list ')' INDEX shift 328 . error state 294 index_hint_list: IGNORE.INDEX '(' index_list ')' INDEX shift 329 . error state 295 index_hint_list: FORCE.INDEX '(' index_list ')' INDEX shift 330 . error state 296 as_opt: AS ID. (65) . reduce 65 (src line 432) state 297 table_expression: '(' table_expression ')'. (60) . reduce 60 (src line 411) state 298 simple_table_expression: ID '.' ID. (76) . reduce 76 (src line 480) state 299 col_tuple: '(' value_expression_list ')'. (113) . reduce 113 (src line 640) state 300 condition: value_expression NOT BETWEEN value_expression AND.value_expression NULL shift 59 VALUES shift 65 ID shift 123 STRING shift 56 NUMBER shift 57 VALUE_ARG shift 58 '(' shift 129 '~' shift 63 '+' shift 61 '-' shift 62 CASE shift 66 IF shift 64 . error value goto 47 value_expression goto 331 row_tuple goto 49 keyword_as_func goto 52 subquery goto 60 unary_operator goto 50 column_name goto 48 case_expression goto 53 sql_id goto 51 state 301 condition: value_expression BETWEEN value_expression AND value_expression. (100) value_expression: value_expression.'&' value_expression value_expression: value_expression.'|' value_expression value_expression: value_expression.'^' value_expression value_expression: value_expression.'+' value_expression value_expression: value_expression.'-' value_expression value_expression: value_expression.'*' value_expression value_expression: value_expression.'/' value_expression value_expression: value_expression.'%' value_expression '&' shift 106 '|' shift 107 '^' shift 108 '+' shift 109 '-' shift 110 '*' shift 111 '/' shift 112 '%' shift 113 . reduce 100 (src line 585) state 302 value_expression: sql_id '(' DISTINCT select_expression_list ')'. (133) . reduce 133 (src line 738) state 303 condition: KEYRANGE '(' value ',' value.')' ')' shift 332 . error state 304 case_expression: CASE value_expression_opt when_expression_list else_expression_opt END. (141) . reduce 141 (src line 775) state 305 value_expression: value_expression.'&' value_expression value_expression: value_expression.'|' value_expression value_expression: value_expression.'^' value_expression value_expression: value_expression.'+' value_expression value_expression: value_expression.'-' value_expression value_expression: value_expression.'*' value_expression value_expression: value_expression.'/' value_expression value_expression: value_expression.'%' value_expression else_expression_opt: ELSE value_expression. (148) '&' shift 106 '|' shift 107 '^' shift 108 '+' shift 109 '-' shift 110 '*' shift 111 '/' shift 112 '%' shift 113 . reduce 148 (src line 810) state 306 when_expression: WHEN boolean_expression THEN.value_expression NULL shift 59 VALUES shift 65 ID shift 123 STRING shift 56 NUMBER shift 57 VALUE_ARG shift 58 '(' shift 129 '~' shift 63 '+' shift 61 '-' shift 62 CASE shift 66 IF shift 64 . error value goto 47 value_expression goto 333 row_tuple goto 49 keyword_as_func goto 52 subquery goto 60 unary_operator goto 50 column_name goto 48 case_expression goto 53 sql_id goto 51 state 307 insert_statement: INSERT comment_opt INTO dml_table_expression column_list_opt row_list.on_dup_opt on_dup_opt: . (177) ON shift 335 . reduce 177 (src line 952) on_dup_opt goto 334 state 308 row_list: VALUES.tuple_list '(' shift 129 . error tuple_list goto 336 row_tuple goto 337 subquery goto 60 state 309 select_statement: select_statement.union_op select_statement row_list: select_statement. (180) UNION shift 31 MINUS shift 32 EXCEPT shift 33 INTERSECT shift 34 . reduce 180 (src line 966) union_op goto 30 state 310 insert_statement: INSERT comment_opt INTO dml_table_expression SET update_list.on_dup_opt update_list: update_list.',' update_expression on_dup_opt: . (177) ',' shift 211 ON shift 335 . reduce 177 (src line 952) on_dup_opt goto 338 state 311 column_list_opt: '(' column_list.')' column_list: column_list.',' column_name ',' shift 340 ')' shift 339 . error state 312 column_list: column_name. (175) . reduce 175 (src line 942) state 313 update_statement: UPDATE comment_opt dml_table_expression SET update_list where_expression_opt.order_by_opt limit_opt order_by_opt: . (159) ORDER shift 315 . reduce 159 (src line 861) order_by_opt goto 341 state 314 delete_statement: DELETE comment_opt FROM dml_table_expression where_expression_opt order_by_opt.limit_opt limit_opt: . (167) LIMIT shift 343 . reduce 167 (src line 899) limit_opt goto 342 state 315 order_by_opt: ORDER.BY order_list BY shift 344 . error state 316 create_statement: CREATE constraint_opt INDEX sql_id using_opt ON.ID force_eof ID shift 345 . error state 317 using_opt: USING sql_id. (204) . reduce 204 (src line 1046) state 318 alter_statement: ALTER ignore_opt TABLE ID non_rename_operation force_eof. (25) . reduce 25 (src line 243) state 319 alter_statement: ALTER ignore_opt TABLE ID RENAME to_opt.ID ID shift 346 . error state 320 to_opt: TO. (200) . reduce 200 (src line 1036) state 321 select_statement: SELECT comment_opt distinct_opt select_expression_list from_expression_list_opt where_expression_opt group_by_opt.having_opt order_by_opt limit_opt lock_opt having_opt: . (157) HAVING shift 281 . reduce 157 (src line 852) having_opt goto 347 state 322 missing_select_statement: distinct_opt select_expression_list from_expression_list_opt where_expression_opt group_by_opt having_opt order_by_opt.limit_opt lock_opt limit_opt: . (167) LIMIT shift 343 . reduce 167 (src line 899) limit_opt goto 348 state 323 boolean_expression: boolean_expression.AND boolean_expression boolean_expression: boolean_expression.OR boolean_expression having_opt: HAVING boolean_expression. (158) OR shift 99 AND shift 98 . reduce 158 (src line 856) state 324 value_expression_list: value_expression_list.',' value_expression group_by_opt: GROUP BY value_expression_list. (156) ',' shift 196 . reduce 156 (src line 847) state 325 table_expression: table_expression join_type table_expression ON.boolean_expression EXISTS shift 54 NULL shift 59 VALUES shift 65 KEYRANGE shift 55 ID shift 123 STRING shift 56 NUMBER shift 57 VALUE_ARG shift 58 '(' shift 46 '~' shift 63 NOT shift 45 '+' shift 61 '-' shift 62 CASE shift 66 IF shift 64 . error boolean_expression goto 349 condition goto 44 value goto 47 value_expression goto 122 row_tuple goto 49 keyword_as_func goto 52 subquery goto 60 unary_operator goto 50 column_name goto 48 case_expression goto 53 sql_id goto 51 state 326 join_type: LEFT OUTER JOIN. (69) . reduce 69 (src line 450) state 327 join_type: RIGHT OUTER JOIN. (71) . reduce 71 (src line 458) state 328 index_hint_list: USE INDEX.'(' index_list ')' '(' shift 350 . error state 329 index_hint_list: IGNORE INDEX.'(' index_list ')' '(' shift 351 . error state 330 index_hint_list: FORCE INDEX.'(' index_list ')' '(' shift 352 . error state 331 condition: value_expression NOT BETWEEN value_expression AND value_expression. (101) value_expression: value_expression.'&' value_expression value_expression: value_expression.'|' value_expression value_expression: value_expression.'^' value_expression value_expression: value_expression.'+' value_expression value_expression: value_expression.'-' value_expression value_expression: value_expression.'*' value_expression value_expression: value_expression.'/' value_expression value_expression: value_expression.'%' value_expression '&' shift 106 '|' shift 107 '^' shift 108 '+' shift 109 '-' shift 110 '*' shift 111 '/' shift 112 '%' shift 113 . reduce 101 (src line 589) state 332 condition: KEYRANGE '(' value ',' value ')'. (105) . reduce 105 (src line 605) state 333 value_expression: value_expression.'&' value_expression value_expression: value_expression.'|' value_expression value_expression: value_expression.'^' value_expression value_expression: value_expression.'+' value_expression value_expression: value_expression.'-' value_expression value_expression: value_expression.'*' value_expression value_expression: value_expression.'/' value_expression value_expression: value_expression.'%' value_expression when_expression: WHEN boolean_expression THEN value_expression. (146) '&' shift 106 '|' shift 107 '^' shift 108 '+' shift 109 '-' shift 110 '*' shift 111 '/' shift 112 '%' shift 113 . reduce 146 (src line 800) state 334 insert_statement: INSERT comment_opt INTO dml_table_expression column_list_opt row_list on_dup_opt. (17) . reduce 17 (src line 194) state 335 on_dup_opt: ON.DUPLICATE KEY UPDATE update_list DUPLICATE shift 353 . error state 336 row_list: VALUES tuple_list. (179) tuple_list: tuple_list.',' row_tuple ',' shift 354 . reduce 179 (src line 961) state 337 tuple_list: row_tuple. (181) . reduce 181 (src line 971) state 338 insert_statement: INSERT comment_opt INTO dml_table_expression SET update_list on_dup_opt. (18) . reduce 18 (src line 199) state 339 column_list_opt: '(' column_list ')'. (174) . reduce 174 (src line 937) state 340 column_list: column_list ','.column_name ID shift 123 . error column_name goto 355 sql_id goto 144 state 341 update_statement: UPDATE comment_opt dml_table_expression SET update_list where_expression_opt order_by_opt.limit_opt limit_opt: . (167) LIMIT shift 343 . reduce 167 (src line 899) limit_opt goto 356 state 342 delete_statement: DELETE comment_opt FROM dml_table_expression where_expression_opt order_by_opt limit_opt. (20) . reduce 20 (src line 216) state 343 limit_opt: LIMIT.value_expression limit_opt: LIMIT.value_expression ',' value_expression NULL shift 59 VALUES shift 65 ID shift 123 STRING shift 56 NUMBER shift 57 VALUE_ARG shift 58 '(' shift 129 '~' shift 63 '+' shift 61 '-' shift 62 CASE shift 66 IF shift 64 . error value goto 47 value_expression goto 357 row_tuple goto 49 keyword_as_func goto 52 subquery goto 60 unary_operator goto 50 column_name goto 48 case_expression goto 53 sql_id goto 51 state 344 order_by_opt: ORDER BY.order_list NULL shift 59 VALUES shift 65 ID shift 123 STRING shift 56 NUMBER shift 57 VALUE_ARG shift 58 '(' shift 129 '~' shift 63 '+' shift 61 '-' shift 62 CASE shift 66 IF shift 64 . error value goto 47 value_expression goto 360 row_tuple goto 49 keyword_as_func goto 52 subquery goto 60 unary_operator goto 50 column_name goto 48 case_expression goto 53 order_list goto 358 order goto 359 sql_id goto 51 state 345 create_statement: CREATE constraint_opt INDEX sql_id using_opt ON ID.force_eof force_eof: . (206) . reduce 206 (src line 1055) force_eof goto 361 state 346 alter_statement: ALTER ignore_opt TABLE ID RENAME to_opt ID. (26) . reduce 26 (src line 248) state 347 select_statement: SELECT comment_opt distinct_opt select_expression_list from_expression_list_opt where_expression_opt group_by_opt having_opt.order_by_opt limit_opt lock_opt order_by_opt: . (159) ORDER shift 315 . reduce 159 (src line 861) order_by_opt goto 362 state 348 missing_select_statement: distinct_opt select_expression_list from_expression_list_opt where_expression_opt group_by_opt having_opt order_by_opt limit_opt.lock_opt lock_opt: . (170) FOR shift 364 LOCK shift 365 . reduce 170 (src line 912) lock_opt goto 363 state 349 table_expression: table_expression join_type table_expression ON boolean_expression. (62) boolean_expression: boolean_expression.AND boolean_expression boolean_expression: boolean_expression.OR boolean_expression OR shift 99 AND shift 98 . reduce 62 (src line 419) state 350 index_hint_list: USE INDEX '('.index_list ')' ID shift 96 . error index_list goto 366 sql_id goto 367 state 351 index_hint_list: IGNORE INDEX '('.index_list ')' ID shift 96 . error index_list goto 368 sql_id goto 367 state 352 index_hint_list: FORCE INDEX '('.index_list ')' ID shift 96 . error index_list goto 369 sql_id goto 367 state 353 on_dup_opt: ON DUPLICATE.KEY UPDATE update_list KEY shift 370 . error state 354 tuple_list: tuple_list ','.row_tuple '(' shift 129 . error row_tuple goto 371 subquery goto 60 state 355 column_list: column_list ',' column_name. (176) . reduce 176 (src line 947) state 356 update_statement: UPDATE comment_opt dml_table_expression SET update_list where_expression_opt order_by_opt limit_opt. (19) . reduce 19 (src line 210) state 357 value_expression: value_expression.'&' value_expression value_expression: value_expression.'|' value_expression value_expression: value_expression.'^' value_expression value_expression: value_expression.'+' value_expression value_expression: value_expression.'-' value_expression value_expression: value_expression.'*' value_expression value_expression: value_expression.'/' value_expression value_expression: value_expression.'%' value_expression limit_opt: LIMIT value_expression. (168) limit_opt: LIMIT value_expression.',' value_expression ',' shift 372 '&' shift 106 '|' shift 107 '^' shift 108 '+' shift 109 '-' shift 110 '*' shift 111 '/' shift 112 '%' shift 113 . reduce 168 (src line 903) state 358 order_by_opt: ORDER BY order_list. (160) order_list: order_list.',' order ',' shift 373 . reduce 160 (src line 865) state 359 order_list: order. (161) . reduce 161 (src line 870) state 360 value_expression: value_expression.'&' value_expression value_expression: value_expression.'|' value_expression value_expression: value_expression.'^' value_expression value_expression: value_expression.'+' value_expression value_expression: value_expression.'-' value_expression value_expression: value_expression.'*' value_expression value_expression: value_expression.'/' value_expression value_expression: value_expression.'%' value_expression order: value_expression.asc_desc_opt asc_desc_opt: . (164) ASC shift 375 DESC shift 376 '&' shift 106 '|' shift 107 '^' shift 108 '+' shift 109 '-' shift 110 '*' shift 111 '/' shift 112 '%' shift 113 . reduce 164 (src line 886) asc_desc_opt goto 374 state 361 create_statement: CREATE constraint_opt INDEX sql_id using_opt ON ID force_eof. (23) . reduce 23 (src line 233) state 362 select_statement: SELECT comment_opt distinct_opt select_expression_list from_expression_list_opt where_expression_opt group_by_opt having_opt order_by_opt.limit_opt lock_opt limit_opt: . (167) LIMIT shift 343 . reduce 167 (src line 899) limit_opt goto 377 state 363 missing_select_statement: distinct_opt select_expression_list from_expression_list_opt where_expression_opt group_by_opt having_opt order_by_opt limit_opt lock_opt. (14) . reduce 14 (src line 178) state 364 lock_opt: FOR.UPDATE UPDATE shift 378 . error state 365 lock_opt: LOCK.IN sql_id sql_id IN shift 379 . error state 366 index_hint_list: USE INDEX '(' index_list.')' index_list: index_list.',' sql_id ',' shift 381 ')' shift 380 . error state 367 index_list: sql_id. (84) . reduce 84 (src line 516) state 368 index_hint_list: IGNORE INDEX '(' index_list.')' index_list: index_list.',' sql_id ',' shift 381 ')' shift 382 . error state 369 index_hint_list: FORCE INDEX '(' index_list.')' index_list: index_list.',' sql_id ',' shift 381 ')' shift 383 . error state 370 on_dup_opt: ON DUPLICATE KEY.UPDATE update_list UPDATE shift 384 . error state 371 tuple_list: tuple_list ',' row_tuple. (182) . reduce 182 (src line 976) state 372 limit_opt: LIMIT value_expression ','.value_expression NULL shift 59 VALUES shift 65 ID shift 123 STRING shift 56 NUMBER shift 57 VALUE_ARG shift 58 '(' shift 129 '~' shift 63 '+' shift 61 '-' shift 62 CASE shift 66 IF shift 64 . error value goto 47 value_expression goto 385 row_tuple goto 49 keyword_as_func goto 52 subquery goto 60 unary_operator goto 50 column_name goto 48 case_expression goto 53 sql_id goto 51 state 373 order_list: order_list ','.order NULL shift 59 VALUES shift 65 ID shift 123 STRING shift 56 NUMBER shift 57 VALUE_ARG shift 58 '(' shift 129 '~' shift 63 '+' shift 61 '-' shift 62 CASE shift 66 IF shift 64 . error value goto 47 value_expression goto 360 row_tuple goto 49 keyword_as_func goto 52 subquery goto 60 unary_operator goto 50 column_name goto 48 case_expression goto 53 order goto 386 sql_id goto 51 state 374 order: value_expression asc_desc_opt. (163) . reduce 163 (src line 880) state 375 asc_desc_opt: ASC. (165) . reduce 165 (src line 890) state 376 asc_desc_opt: DESC. (166) . reduce 166 (src line 894) state 377 select_statement: SELECT comment_opt distinct_opt select_expression_list from_expression_list_opt where_expression_opt group_by_opt having_opt order_by_opt limit_opt.lock_opt lock_opt: . (170) FOR shift 364 LOCK shift 365 . reduce 170 (src line 912) lock_opt goto 387 state 378 lock_opt: FOR UPDATE. (171) . reduce 171 (src line 916) state 379 lock_opt: LOCK IN.sql_id sql_id ID shift 96 . error sql_id goto 388 state 380 index_hint_list: USE INDEX '(' index_list ')'. (81) . reduce 81 (src line 503) state 381 index_list: index_list ','.sql_id ID shift 96 . error sql_id goto 389 state 382 index_hint_list: IGNORE INDEX '(' index_list ')'. (82) . reduce 82 (src line 507) state 383 index_hint_list: FORCE INDEX '(' index_list ')'. (83) . reduce 83 (src line 511) state 384 on_dup_opt: ON DUPLICATE KEY UPDATE.update_list ID shift 123 . error column_name goto 143 update_list goto 390 update_expression goto 142 sql_id goto 144 state 385 value_expression: value_expression.'&' value_expression value_expression: value_expression.'|' value_expression value_expression: value_expression.'^' value_expression value_expression: value_expression.'+' value_expression value_expression: value_expression.'-' value_expression value_expression: value_expression.'*' value_expression value_expression: value_expression.'/' value_expression value_expression: value_expression.'%' value_expression limit_opt: LIMIT value_expression ',' value_expression. (169) '&' shift 106 '|' shift 107 '^' shift 108 '+' shift 109 '-' shift 110 '*' shift 111 '/' shift 112 '%' shift 113 . reduce 169 (src line 907) state 386 order_list: order_list ',' order. (162) . reduce 162 (src line 875) state 387 select_statement: SELECT comment_opt distinct_opt select_expression_list from_expression_list_opt where_expression_opt group_by_opt having_opt order_by_opt limit_opt lock_opt. (15) . reduce 15 (src line 184) state 388 lock_opt: LOCK IN sql_id.sql_id ID shift 96 . error sql_id goto 391 state 389 index_list: index_list ',' sql_id. (85) . reduce 85 (src line 521) state 390 on_dup_opt: ON DUPLICATE KEY UPDATE update_list. (178) update_list: update_list.',' update_expression ',' shift 211 . reduce 178 (src line 956) state 391 lock_opt: LOCK IN sql_id sql_id. (172) . reduce 172 (src line 920) 101 terminals, 75 nonterminals 207 grammar rules, 392/2000 states 0 shift/reduce, 0 reduce/reduce conflicts reported 124 working sets used memory: parser 742/30000 405 extra closures 1040 shift entries, 1 exceptions 210 goto entries 386 entries saved by goto default Optimizer space used: output 678/30000 678 table entries, 102 zero maximum spread: 101, maximum offset: 388 textql-2.0.3/storage/000077500000000000000000000000001263444277100145135ustar00rootroot00000000000000textql-2.0.3/storage/sqlite.go000066400000000000000000000132651263444277100163520ustar00rootroot00000000000000package storage import ( "bytes" "database/sql" "path" "strings" "log" "regexp" "github.com/dinedal/textql/inputs" "github.com/dinedal/textql/sqlparser" sqlite3 "github.com/mattn/go-sqlite3" ) // SQLite3Storage represents a TextQL compatible SQL backend based on in-memory SQLite3 type SQLite3Storage struct { options *SQLite3Options db *sql.DB connID int firstTableName string } // SQLite3Options are options passed into SQLite3 connection as needed. type SQLite3Options struct{} var ( sqlite3conn = []*sqlite3.SQLiteConn{} allWhiteSpace = regexp.MustCompile("^\\s+$") tableNameCheckRegEx = regexp.MustCompile(`.*\[.*\].*`) ) func init() { sql.Register("sqlite3_textql", &sqlite3.SQLiteDriver{ ConnectHook: func(conn *sqlite3.SQLiteConn) error { sqlite3conn = append(sqlite3conn, conn) return nil }, }) } // NewSQLite3StorageWithDefaults returns a SQLite3Storage with the default options. func NewSQLite3StorageWithDefaults() *SQLite3Storage { return NewSQLite3Storage(&SQLite3Options{}) } // NewSQLite3Storage returns a SQLite3Storage with the SQLite3Options provided applied. func NewSQLite3Storage(opts *SQLite3Options) *SQLite3Storage { sqlite3Storage := &SQLite3Storage{ options: opts, firstTableName: "", } sqlite3Storage.open() return sqlite3Storage } func (sqlite3Storage *SQLite3Storage) open() { db, err := sql.Open("sqlite3_textql", ":memory:") if err != nil { log.Fatalln(err) } err = db.Ping() if err != nil { log.Fatalln(err) } sqlite3Storage.connID = len(sqlite3conn) - 1 sqlite3Storage.db = db } // LoadInput reads the entire Input provided into a table named after the Input name. // The name is cooreced into a valid SQLite3 table name prior to use. func (sqlite3Storage *SQLite3Storage) LoadInput(input inputs.Input) { tableName := strings.Replace(input.Name(), path.Ext(input.Name()), "", -1) sqlite3Storage.createTable(tableName, input.Header(), false) tx, txErr := sqlite3Storage.db.Begin() if txErr != nil { log.Fatalln(txErr) } stmt := sqlite3Storage.createLoadStmt(tableName, len(input.Header()), tx) row := input.ReadRecord() for { if row == nil { break } sqlite3Storage.loadRow(tableName, len(input.Header()), row, tx, stmt, true) row = input.ReadRecord() } stmt.Close() tx.Commit() if sqlite3Storage.firstTableName == "" { sqlite3Storage.firstTableName = tableName } } func (sqlite3Storage *SQLite3Storage) createTable(tableName string, columnNames []string, verbose bool) error { var buffer bytes.Buffer if tableNameCheckRegEx.FindString(tableName) != "" { log.Fatalln("Invalid table name", tableName) } buffer.WriteString("CREATE TABLE IF NOT EXISTS [" + (tableName) + "] (") for i, col := range columnNames { columnNameCheckRegEx := regexp.MustCompile(`.*\[.*\].*`) if columnNameCheckRegEx.FindString(col) != "" { log.Fatalln("Invalid table name", col) } buffer.WriteString("[" + col + "] NUMERIC") if i != len(columnNames)-1 { buffer.WriteString(", ") } } buffer.WriteString(");") _, err := sqlite3Storage.db.Exec(buffer.String()) if err != nil { log.Fatalln(err) } if verbose { log.Println(buffer.String()) } return err } func (sqlite3Storage *SQLite3Storage) createLoadStmt(tableName string, colCount int, db *sql.Tx) *sql.Stmt { if colCount == 0 { log.Fatalln("Nothing to build insert with!") } var buffer bytes.Buffer buffer.WriteString("INSERT INTO [" + (tableName) + "] VALUES (") // Don't write the comma for the last column for i := 1; i <= colCount; i++ { buffer.WriteString("nullif(?,'')") if i != colCount { buffer.WriteString(", ") } } buffer.WriteString(");") stmt, err := db.Prepare(buffer.String()) if err != nil { log.Fatalln(err) } return stmt } func (sqlite3Storage *SQLite3Storage) loadRow(tableName string, colCount int, values []string, db *sql.Tx, stmt *sql.Stmt, verbose bool) error { if len(values) == 0 || colCount == 0 { return nil } var vals []interface{} for i := 0; i < colCount; i++ { if allWhiteSpace.MatchString(values[i]) { vals = append(vals, "") } else { vals = append(vals, values[i]) } } _, err := stmt.Exec(vals...) if err != nil && verbose { log.Printf("Bad row: %v\n", err) } return err } // ExecuteSQLString maps the sqlQuery provided from short hand TextQL to SQL, then // applies the query to the sqlite3 in memory database, and lastly returns the sql.Rows // that resulted from the executing query. func (sqlite3Storage *SQLite3Storage) ExecuteSQLString(sqlQuery string) *sql.Rows { var result *sql.Rows var err error if strings.Trim(sqlQuery, " ") != "" { implictFromSQL := sqlparser.Magicify(sqlQuery, sqlite3Storage.firstTableName) result, err = sqlite3Storage.db.Query(implictFromSQL) if err != nil { log.Fatalln(err) } } return result } // SaveTo saves the current in memory database to the path provided as a string. func (sqlite3Storage *SQLite3Storage) SaveTo(path string) error { backupDb, openErr := sql.Open("sqlite3_textql", path) if openErr != nil { return openErr } backupDb.Ping() backupConnID := len(sqlite3conn) - 1 backup, backupStartErr := sqlite3conn[backupConnID].Backup("main", sqlite3conn[sqlite3Storage.connID], "main") if backupStartErr != nil { return backupStartErr } _, backupPerformError := backup.Step(-1) if backupPerformError != nil { return backupPerformError } backupFinishError := backup.Finish() if backupFinishError != nil { return backupFinishError } backupCloseError := backupDb.Close() if backupCloseError != nil { return backupCloseError } return nil } // Close will close the current database func (sqlite3Storage *SQLite3Storage) Close() { sqlite3Storage.db.Close() } textql-2.0.3/storage/sqlite_test.go000066400000000000000000000144421263444277100174070ustar00rootroot00000000000000package storage import ( "fmt" "io/ioutil" "os" "os/exec" "testing" "github.com/dinedal/textql/inputs" "github.com/dinedal/textql/test_util" ) var ( storageOpts = &SQLite3Options{} simpleCSV = `a,b,c 1,2,3 4,5,6` whitespaceValuesCSV = `a,b,c , , 1,2,3 4,5,6` ) func NewTestCSVInput() (input inputs.Input, fp *os.File) { fp = test_util.OpenFileFromString(simpleCSV) opts := &inputs.CSVInputOptions{ HasHeader: true, Seperator: ',', ReadFrom: fp, } newInput, _ := inputs.NewCSVInput(opts) return newInput, fp } func TestSQLiteStorageLoadInput(t *testing.T) { storage := NewSQLite3Storage(storageOpts) input, fp := NewTestCSVInput() defer fp.Close() defer os.Remove(fp.Name()) defer storage.Close() storage.LoadInput(input) } func TestSQLiteStorageSaveTo(t *testing.T) { var ( cmdOut []byte err error tempFile *os.File ) storage := NewSQLite3Storage(storageOpts) input, fp := NewTestCSVInput() defer fp.Close() defer os.Remove(fp.Name()) defer storage.Close() storage.LoadInput(input) tempFile, err = ioutil.TempFile(os.TempDir(), "textql_test") if err != nil { t.Fatalf(err.Error()) } defer os.Remove(tempFile.Name()) tempFile.Close() storage.SaveTo(tempFile.Name()) storage.Close() args := []string{tempFile.Name(), "pragma integrity_check;"} cmd := exec.Command("sqlite3", args...) cmd.Stderr = os.Stderr cmd.Stdin = os.Stdin if cmdOut, err = cmd.Output(); err != nil { fmt.Println(string(cmdOut)) fmt.Println(args) t.Fatalf(err.Error()) } cmdOutStr := string(cmdOut) if cmdOutStr != "ok\n" { fmt.Println(cmdOutStr) t.Fatalf("SaveTo integrity check failed!") } } func TestSQLiteStorageExecuteSQLStringNormalSQL(t *testing.T) { storage := NewSQLite3Storage(storageOpts) input, fp := NewTestCSVInput() defer fp.Close() defer os.Remove(fp.Name()) defer storage.Close() storage.LoadInput(input) sqlString := "select count(*) from " + storage.firstTableName rows := storage.ExecuteSQLString(sqlString) cols, colsErr := rows.Columns() if colsErr != nil { t.Fatalf(colsErr.Error()) } if len(cols) != 1 { t.Fatalf("Expected 1 column, got (%v)", len(cols)) } var dest int for rows.Next() { rows.Scan(&dest) if dest != 2 { t.Fatalf("Expected 2 rows counted, got (%v)", dest) } } } func TestSQLiteStorageExecuteSQLStringMissingSelect(t *testing.T) { storage := NewSQLite3Storage(storageOpts) input, fp := NewTestCSVInput() defer fp.Close() defer os.Remove(fp.Name()) defer storage.Close() storage.LoadInput(input) sqlString := "count(*) from " + storage.firstTableName rows := storage.ExecuteSQLString(sqlString) cols, colsErr := rows.Columns() if colsErr != nil { t.Fatalf(colsErr.Error()) } if len(cols) != 1 { t.Fatalf("Expected 1 column, got (%v)", len(cols)) } var dest int for rows.Next() { rows.Scan(&dest) if dest != 2 { t.Fatalf("Expected 2 rows counted, got (%v)", dest) } } } func LoadTestDataAndExecuteQuery(t *testing.T, testData string, sqlString string) (map[int]map[string]interface{}, []string) { storage := NewSQLite3Storage(storageOpts) fp := test_util.OpenFileFromString(testData) opts := &inputs.CSVInputOptions{ HasHeader: true, Seperator: ',', ReadFrom: fp, } input, _ := inputs.NewCSVInput(opts) defer fp.Close() defer os.Remove(fp.Name()) defer storage.Close() storage.LoadInput(input) rows := storage.ExecuteSQLString(sqlString) cols, colsErr := rows.Columns() if colsErr != nil { t.Fatalf(colsErr.Error()) } rowNumber := 0 result := make(map[int]map[string]interface{}) rawResult := make([]interface{}, len(cols)) dest := make([]interface{}, len(cols)) for i := range cols { dest[i] = &rawResult[i] } for rows.Next() { scanErr := rows.Scan(dest...) if scanErr != nil { t.Fatalf(scanErr.Error()) } result[rowNumber] = make(map[string]interface{}) for i, raw := range rawResult { result[rowNumber][cols[i]] = raw } rowNumber++ } return result, cols } func TestSQLiteStorageExecuteSQLStringMissingFromOuterQuery(t *testing.T) { data, cols := LoadTestDataAndExecuteQuery(t, simpleCSV, "count(*)") if len(cols) != 1 { t.Fatalf("Expected 1 column, got (%v)", len(cols)) } intVal := data[0]["count(*)"].(int64) if intVal != 2 { t.Fatalf("Expected 2 rows counted, got (%v)", intVal) } } func TestSQLiteStorageExecuteSQLStringMissingFromSubQuery(t *testing.T) { data, cols := LoadTestDataAndExecuteQuery(t, simpleCSV, "count(*) from (select *)") if len(cols) != 1 { t.Fatalf("Expected 1 column, got (%v)", len(cols)) } intVal := data[0]["count(*)"].(int64) if intVal != 2 { t.Fatalf("Expected 2 rows counted, got (%v)", intVal) } } func TestWhitespaceLoadsAsNull(t *testing.T) { data, cols := LoadTestDataAndExecuteQuery(t, whitespaceValuesCSV, "max(a)") if len(cols) != 1 { t.Fatalf("Expected 1 column, got (%v)", len(cols)) } intVal := data[0]["max(a)"].(int64) if intVal != 4 { t.Fatalf("Expected 4 max value, got (%v)", intVal) } data, cols = LoadTestDataAndExecuteQuery(t, whitespaceValuesCSV, "typeof(a)") if len(cols) != 1 { t.Fatalf("Expected 1 column, got (%v)", len(cols)) } uintVal := data[0]["typeof(a)"].([]uint8) if string(uintVal[:]) != "null" { t.Fatalf("Expected null value, got (%v)", uintVal) } uintVal = data[1]["typeof(a)"].([]uint8) if string(uintVal[:]) != "integer" { t.Fatalf("Expected integer value, got (%v)", uintVal) } uintVal = data[2]["typeof(a)"].([]uint8) if string(uintVal[:]) != "integer" { t.Fatalf("Expected integer value, got (%v)", uintVal) } data, cols = LoadTestDataAndExecuteQuery(t, whitespaceValuesCSV, "max(b)") if len(cols) != 1 { t.Fatalf("Expected 1 column, got (%v)", len(cols)) } intVal = data[0]["max(b)"].(int64) if intVal != 5 { t.Fatalf("Expected 5 max value, got (%v)", intVal) } data, cols = LoadTestDataAndExecuteQuery(t, whitespaceValuesCSV, "typeof(b)") if len(cols) != 1 { t.Fatalf("Expected 1 column, got (%v)", len(cols)) } uintVal = data[0]["typeof(b)"].([]uint8) if string(uintVal[:]) != "null" { t.Fatalf("Expected null value, got (%v)", uintVal) } uintVal = data[1]["typeof(b)"].([]uint8) if string(uintVal[:]) != "integer" { t.Fatalf("Expected integer value, got (%v)", uintVal) } uintVal = data[2]["typeof(b)"].([]uint8) if string(uintVal[:]) != "integer" { t.Fatalf("Expected integer value, got (%v)", uintVal) } } textql-2.0.3/storage/storage.go000066400000000000000000000020511263444277100165040ustar00rootroot00000000000000package storage import ( "database/sql" "github.com/dinedal/textql/inputs" ) // Storage implentors are expected to be SQL capable engines. // A Storage should support loading data from a TextQL input, // executing any number of SQL statements and returning their resultant // sql.Rows, as well as supporting clean closing and "backing up" of // data to a specific path type Storage interface { // LoadInput should make all the data in the input accessible to queries. LoadInput(*inputs.Input) // SaveTo should write the entire database of the SQL backend to the path given as a string. // Failure in any way should return an error, and nil if the operation was successful. SaveTo(string) error // ExecuteSQLString should first convert from TextQL shorthand SQL to normal SQL, // apply the query or transformation given to the SQL backend and return either nil // or the sql.Rows that were returned from the query. ExecuteSQLString(string) *sql.Rows // Close should cleanly close the database backend, cleaning up data on disk if required. Close() } textql-2.0.3/test_util/000077500000000000000000000000001263444277100150635ustar00rootroot00000000000000textql-2.0.3/test_util/test_util.go000066400000000000000000000002771263444277100174340ustar00rootroot00000000000000package test_util import ( "io/ioutil" "os" ) func OpenFileFromString(contents string) *os.File { f, _ := ioutil.TempFile("./", "csv") f.WriteString(contents) f.Seek(0, 0) return f } textql-2.0.3/textql/000077500000000000000000000000001263444277100143705ustar00rootroot00000000000000textql-2.0.3/textql/main.go000066400000000000000000000141121263444277100156420ustar00rootroot00000000000000package main import ( "flag" "fmt" "io/ioutil" "log" "os" "os/exec" "strings" "github.com/dinedal/textql/inputs" "github.com/dinedal/textql/outputs" "github.com/dinedal/textql/storage" "github.com/dinedal/textql/util" ) type commandLineOptions struct { Statements *string SourceFile *string Delimiter *string Header *bool OutputHeader *bool OutputDelimiter *string OutputFile *string SaveTo *string Console *bool Version *bool Quiet *bool } // Must be set at build via -ldflags "-X main.VERSION=`cat VERSION`" var VERSION string func newCommandLineOptions() *commandLineOptions { cmdLineOpts := commandLineOptions{} cmdLineOpts.Statements = flag.String("sql", "", "SQL Statement(s) to run on the data") cmdLineOpts.Delimiter = flag.String("dlm", ",", "Input delimiter character between fields -dlm=tab for tab, -dlm=0x## to specify a character code in hex") cmdLineOpts.Header = flag.Bool("header", false, "Treat input files as having the first row as a header row") cmdLineOpts.OutputHeader = flag.Bool("output-header", false, "Display column names in output") cmdLineOpts.OutputDelimiter = flag.String("output-dlm", ",", "Output delimiter character between fields -output-dlm=tab for tab, -dlm=0x## to specify a character code in hex") cmdLineOpts.OutputFile = flag.String("output-file", "stdout", "Filename to write output to, if empty no output is written") cmdLineOpts.SaveTo = flag.String("save-to", "", "SQLite3 db is left on disk at this file") cmdLineOpts.Console = flag.Bool("console", false, "After all statements are run, open SQLite3 REPL with this data") cmdLineOpts.Version = flag.Bool("version", false, "Print version and exit") cmdLineOpts.Quiet = flag.Bool("quiet", false, "Surpress logging") flag.Usage = cmdLineOpts.Usage flag.Parse() return &cmdLineOpts } func (clo *commandLineOptions) GetStatements() string { return *clo.Statements } func (clo *commandLineOptions) GetSourceFiles() []string { return flag.Args() } func (clo *commandLineOptions) GetDelimiter() string { return *clo.Delimiter } func (clo *commandLineOptions) GetHeader() bool { return *clo.Header } func (clo *commandLineOptions) GetOutputHeader() bool { return *clo.OutputHeader } func (clo *commandLineOptions) GetOutputDelimiter() string { return *clo.OutputDelimiter } func (clo *commandLineOptions) GetOutputFile() string { return *clo.OutputFile } func (clo *commandLineOptions) GetSaveTo() string { return util.CleanPath(*clo.SaveTo) } func (clo *commandLineOptions) GetConsole() bool { return *clo.Console } func (clo *commandLineOptions) GetVersion() bool { return *clo.Version } func (clo *commandLineOptions) GetQuiet() bool { return *clo.Quiet } func (clo *commandLineOptions) Usage() { if !clo.GetQuiet() { fmt.Fprintf(os.Stderr, "Usage of %s:\n", os.Args[0]) fmt.Fprintf(os.Stderr, "\n") fmt.Fprintf(os.Stderr, " %s [-console] [-save-to path path] [-output-file path] [-output-dlm delimter] [-output-header] [-header] [-dlm delimter] [-source path] [-sql sql_statements] [-quiet] [path ...] \n", os.Args[0]) fmt.Fprintf(os.Stderr, "\n") flag.PrintDefaults() } } func main() { cmdLineOpts := newCommandLineOptions() var outputer outputs.Output if cmdLineOpts.GetVersion() { fmt.Println(VERSION) os.Exit(0) } if len(cmdLineOpts.GetSourceFiles()) == 0 && !util.IsThereDataOnStdin() { cmdLineOpts.Usage() } if cmdLineOpts.GetQuiet() { log.SetOutput(ioutil.Discard) } if cmdLineOpts.GetConsole() { if util.IsThereDataOnStdin() { log.Fatalln("Can not open console with pipe input, read a file instead") } _, sqlite3ConsolePathErr := exec.LookPath("sqlite3") if sqlite3ConsolePathErr != nil { log.Fatalln("Console requested but unable to locate `sqlite3` program on $PATH") } } var inputSources []string if util.IsThereDataOnStdin() { inputSources = append(inputSources, "stdin") } for _, sourceFile := range cmdLineOpts.GetSourceFiles() { if util.IsPathDir(sourceFile) { for _, file := range util.AllFilesInDirectory(sourceFile) { inputSources = append(inputSources, file) } } else { inputSources = append(inputSources, sourceFile) } } storage := storage.NewSQLite3StorageWithDefaults() for _, file := range inputSources { fp := util.OpenFileOrStdDev(file, false) inputOpts := &inputs.CSVInputOptions{ HasHeader: cmdLineOpts.GetHeader(), Seperator: util.DetermineSeparator(cmdLineOpts.GetDelimiter()), ReadFrom: fp, } input, inputErr := inputs.NewCSVInput(inputOpts) if inputErr != nil { log.Printf("Unable to load %v\n", file) } storage.LoadInput(input) } sqlStrings := strings.Split(cmdLineOpts.GetStatements(), ";") if cmdLineOpts.GetOutputFile() != "" { displayOpts := &outputs.CSVOutputOptions{ WriteHeader: cmdLineOpts.GetOutputHeader(), Seperator: util.DetermineSeparator(cmdLineOpts.GetOutputDelimiter()), WriteTo: util.OpenFileOrStdDev(cmdLineOpts.GetOutputFile(), true), } outputer = outputs.NewCSVOutput(displayOpts) } for _, sqlQuery := range sqlStrings { queryResults := storage.ExecuteSQLString(sqlQuery) if queryResults != nil && cmdLineOpts.GetOutputFile() != "" { outputer.Show(queryResults) } } if cmdLineOpts.GetSaveTo() != "" { storage.SaveTo(cmdLineOpts.GetSaveTo()) } if cmdLineOpts.GetConsole() { var args []string if cmdLineOpts.GetOutputHeader() { args = []string{"-header"} } else { args = []string{} } if cmdLineOpts.GetSaveTo() != "" { args = append(args, cmdLineOpts.GetSaveTo()) } else { tempFile, err := ioutil.TempFile(os.TempDir(), "textql") if err != nil { log.Fatalln(err) } defer os.Remove(tempFile.Name()) tempFile.Close() saveErr := storage.SaveTo(tempFile.Name()) if saveErr != nil { log.Fatalln(saveErr) } args = append(args, tempFile.Name()) } cmd := exec.Command("sqlite3", args...) cmd.Stdin = os.Stdin cmd.Stdout = os.Stdout cmd.Stderr = os.Stderr cmdErr := cmd.Run() if cmd.Process != nil { cmd.Process.Release() } if cmdErr != nil { log.Fatalln(cmdErr) } } else { storage.Close() } } textql-2.0.3/textql_usage.gif000066400000000000000000030630421263444277100162530ustar00rootroot00000000000000GIF89a w! NETSCAPE2.0!, %7h1Z(ABTEXI\|gixx}wr|m+]TbWbYn]eYi\}]q^qextyf{qA>B?\_^aceLCVM_V`X`czjvZls{m|ޟ"ߠ# $-ܪOݫSޮXåmS.0œÛƤƣȦɫèȫ˴ȁŎɬҶɽǺɷҹѽيߏސijۻɻŻի׫ӻ޵ߵýֽŞĦǼüƫ²źɼγ˽ HП~*\ȐaHŋ3jȱǏ CIɓ(S\ɲ˗()ʔhƙ8))pϟ)ev,ѣH*]ʴӧPf|4?KVM:]9Y"@1uBt0a":n˷߿ ܶp[+k148q̙#'i ;h"E0*M@ `T(۸sͻo2^gOo,.\ʧ/[!xmo-.eӂ_0ӛ2twXme5/~#;pAǁ>s |""aPDv($hl또="NP >l;A$#/$@wE:"$"PozX[)+͑'ihG[%p21HB0cMt(hMx案&JbTO;2O3 SQPmZ*6?)KJNb6 =(Po<#$Т6ora,>fkgy'h&ņr>$ ah>A@PJ;B1>B0!N,043ARX3ï72/_,u;!62cr=0nAif׻}},nbcKO>1F~aL@Q.P0bp.n'7-^qF48L>~ȋ::-@őKܣ9瞃.:+MYxhp1< 4с,ԏ96 L|N+6|z=P/ן".P)!'o Hp17zkjc4Mn- }3GHp-^ =-.rPW1{_Hb80:GjG'XjȟLh%ba8Y "P  Y)ڈF=J.{;"F:lY)'9ɶ ִmKSam\<>(V Ft"[~=`qQA=v8LOP1aЃ 4ő-^" 0m |2u2=mO<~ehh F&5rڃ<@#^[߫EđFv)*"eJ׺*ҥD^Wԥ(дd~(audtS 0`ͬf7z+p0Ux C8aZ|9%Ћm`̂ Wch=}R򵱝mmoL<~r-&:;уt 4RH/2]:#b/Bh]r,ͯ~}Lg@F2 4\ Ct317\)f5/{ v`)H@>`B/)Ax_:ND`-`ᅘt1#v9&V{̒LB=.1U1 I> 6{c lp11gO(Pf|c\b~v'M'ɎgztKvځE+J#DKꌮpwjH ؿp=5l?6fxp]JUcVmbCŖ&gi=r[wMc7Mzη~ϨſNn;xs81猗V@z{#W0gN|ݍu_=&A7Oҗ;Pzď>>Sч>t{RNfipNxϻOO;񐏼'Ow){GOқO=-+>ުgOϽ#g޽OO>{'ʏO[g~n{~xD`@O.`g8XX~yw]|8Xxg~'w NpI`w5 *,؂.wyrwNJKvGU @P ,/XFxHH1qpK0w0 _ݗ\؅^ɷ x : xDnp'xXpn}Іr|؇~wtg3 ؈؈8x6PXXn\G Wpx版gNJ犲x˗uX¨zhx8ȘʨxXxǸҘw8x8y՘؍(x8wX蘎x؎(8x؏py9yX ) ِY9}y× 9{$Y7&*)y(.ג094 (5:x2>=B A9FEyJ INyMR Q9VyUyZY^y]ba9fYeyjinymr q9v9uyzy~ }y9y釉9y邙999y99~}9I}y7醹©{9Y{yI I9։yɚٹ I9扛yɛI9yɜi{jZy ٠j9zڙjڡ ":Y&j(¹,.2j4Zy8:٣>j@9DFzJjLڤPR:YVjX\^zbjdZryhjj٦njpb9tvzZzj|ڧRꔂ:JYjB꓎@zZ4yJ響H٩zz$ʔڪɪ:PzJºZXzǺ٬ʕ Ԛz`9zڭJ:)暎蚮hYzʖZIpyz8K{i ۰x{;X˗+"{![x(K$o.0ٲ4{3{:˘6۳_ɳ@B;F{ELNR{T[zXۨZڵ^;] df{:j;i۶p[l;i*vxZ|{{~[uJ۫z:{P;۹V;\[b;K [k뺸ۻ{;ۺw›[ۼȻ}79I}؛iܫK|[wK}K{{˟ۿɿ|zBwD\{wHL#rNlwPŕTܴ)|8Z w\_a|cLegikm\o,qsuwly<{ }|ƒL…‡\,l< ܿ|L쾩\,̽l< ܼ|Lɼˌ\,̺՜l< ܹ߬|L鼸댸\,̷l< ܶ}M ]-ʹm= ݳ!}#M%')+-]/-13ͱ57m9=; =ݰ?A}CMEGIKM]O-QSͮUWmY=[ ]ݭ_a}cMegikm]o-qsͫuwmy={ }ݪ}M]-ͨm= ݧ}M]-ͥm= ݤ}Mɽˍ]-͢՝m= ݑݡ߭}M齠덠]-=V]ߖmY^> ΂ >*X z) NY|Hj*^,..ؙ4^3~! ,$O&o܁K&:,r  -Н.S! ,$$@1s0z3>Hd'PP=v@ ]m,}UyBsåsȡȫȡǽǷĮĵǼT f&I:'P*l 05"`$̃A4} a\+ݯM6dmQ4]%}.M!!,,%$2?>3#R1s0z3>$2HFPG={APPPXjqkek|kkqqkrxƂ”ŞŢĮN "f&I:'p,KR AR`#HJ.HiϨr*`4&ǃPXKu! ,<%4==%$2?>3>$2HFPG={APPPXjqkek|kkqqkrxƂ”ŞŢĮN "f&I:'p,KR AR`#HJ.HiϨr*`4&ǃPXKu! ,D43%@"Z"gHv@{ZPPPPWrN&V@ulrZaa}UummxȜȳǻưǷĺǹ`@p($F"TGgJU)ֺ<ĕ 45|0Bɂu&AT'E!X sBX$ $[GcPC SZdN]TA! ,L$2&o܁K&:,ry8T`BBҥM\!,T%42?3%>3I"R!t0z<P?2v@PPP;XjQqwkxa.m9yAȫȺǹ_@p(4F"TGgjU)ֺ=d$ʕ 4P e+p>"92u.zT rBP & #LG&[ OdZNJXA! ,\@0z^'j('cg,m9xLyBmsåsȫȽIJǹJ e&I:[— еx)F D.BE(@rp.DI^H :X5mh<Y!! ,d%$@R!t1s0zGG3FQG>2PG1{A5mXj@owRy7s8yByBZoașȫȽc@p(F"TGM !LUL*[ cGd<"Hb1{wmP"e[!y{U"!"a jaB OUNENJ[A! ,l%o܁K&,ry8y[I]T!,t4#42>>2ZW^ d E&N?N5o@o@uIzIlrxlr€IZZs8ZWZagƬx“ȝȶĵǷǾŢǬǹd@p(|F"TGgU)֊@aVVGha.uP3#R0z1s^ F%j(p@|f:GGGPGGkqllrZf:s8ZzgūȻĽǵ]@p($F"TGgJU)֊]$FJEDHhBaTBL d4 {$JX$$[G [B SP\TZPA!,%4==%$2?>3>$2HFPG={APPPXjqkek|kkqqkrxƂ”ŞŢĮN "f&I:'p,KR AR`#HJ.HiϨr*`4&ǃPXKu! ,#4#?=IZHv@{ZPPPPWrN&V@ulrZaa}UummxȜȳǻưǷĺǹ`@p($F"TGgJU)ֺ<ĕ 45|0Bɂu&AT'E!X sBX$ $[GcPC SZdN]TA! ,2=j p &V5o6u@oHo@uPogrr®nŜȺŞƢǼP bf&I:[™ еxQJSd"C`̀a%.%ö 0f@xw; ׳B! ,%==$$2?>3#R0z>1s>1y>=yFF%j(|f:GGGPGGkqllrZf:s8ZzgūȻĽǵ]@p(4F"TGgjU)ֺ P$˕<QE4ƒUlbpz&JX!&&XG [BSP\TZPA! ,%o܁K&,ry8y[I]T!,=>>2@IZn!t<3>Hp6'c@owwlZZs*y7lD~K\sŨȽĴǼb@p(,F"TGgZU@cyR dDF(86%ͥr )\ {M $ Q%I%! mF#B SPVJKvNXA! ,43%@"Z"gHv@{ZPPPPWrN&V@ulrZaa}UummxȜȳǻưǷĺǹ`@p($F"TGgJU)ֺ<ĕ 45|0Bɂu&AT'E!X sBX$ $[GcPC SZdN]TA!,$2&o܁K&:,ry8T`BBҥM\! ,=>>2@IZn!t<3>Hp6'c@owwlZZs*y7lD~K\sŨȽĴǼb@p(,F"TGgZU@cyR dDF(86%ͥr )\ {M $ Q%I%! mF#B SPVJKvNXA!,%$2?>3#R1s0z>2@IZn!t<3>Hp6'c@owwlZZs*y7lD~K\sŨȽĴǼb@p(,F"TGgZU@cyR dDF(86%ͥr )\ {M $ Q%I%! mF#B SPVJKvNXA! ,%4I!m1g1s<|>GGG>"{AE5c5iXd@uw{Rg:m9yByBoagŔȨȶǽc@p($F"TGgJU)ֺd6=. )ZX $B sT $"$[!FPC TJn{D[ZPA!,%4==%$2?>3>$2HFPG={APPPXjqkek|kkqqkrxƂ”ŞŢĮN "f&I:'p,KR AR`#HJ.HiϨr*`4&ǃPXKu! ,2H"g!mG>"j(p6ǶDzǹ4)RWJ ³7 I1Ob.5M()!,( %4#72?$2==$8%>3$2?>3#>3>>>2@IRZi"X2H1Z!i!t1g1mH>1s>1y>=y]c x xE~>GG3FQ4WyFOW^ F%^'G>"G>2P?2d j p d'j(s(p6GG1PG1PG=PP=XP1u@{ApI{Z|f:GGGGPPPGGPPPPOlPWrXjqvh^kek|kkqqk;EN ] i&N&V&]?N'c'c?d5c5i5k5o6u6u@oVg@oHo@u@uIzIPoQkquwqqw{  k|ti`gllrrrrxxlrrxƀIRZZZ.aaa.a-f:k+m9m9s+v7s*s8z7ZWlD}]xD}UyB\pKKWZZonxamgmtmsåmåsx‡ŋȓȔȜțȡȭũȼĵǭƴǻìƱǷĶĴżĻĞŢĭôƺH*\ȰÇ#JHŋ3jȱǏ CIɓ( 0Ē%@ŏ3c܉1gI\;z2oK>5!QJ1TjX s2pMk۾5 _qn.-E~'fwH2,U-lx Hm5?O=(!g)D`1}Ysт1%P!,M<@?(0i?J s(1OBx˺! /NtLE,2Kg20N=%W"o;T?@?As@ &U zqy|SO8DRAP??C ?˼N?;XqC /(ǏCţ 7U&Ev ?1 YI d\vQ?Ҍ(8Ni$ ?S@{B)%B2@©?PO=Pi r= k P*sIcU@إps.U,* g tO&U]@!?7 #l3B<P]rJ9 (,r?9! @6l,,;o?L @ڪG,0,fcWU(;Sڞs9@g̓A(ʍ:ݝKę!D?J"._~?py!eGFSп=nY#@';Ӽ4@>xӺT,Wݘ_:|Zt!#-HHR_B,@8)BӞ:@6ԢHMRT n6MTTLXiUծz'[XԪhHXֶ>dnXS p^"E^WjV ,a+V2Xu,d'TRH,f7Sr8,hGђ'1-jW[֧`5+lgk! ,)#4#?=IZ3I"R!t0z<P?2v@PPP;XjQqwkxa.m9yAȫȺǹ_@p(4F"TGgjU)ֺ=d$ʕ 4P e+p>"92u.zT rBP & #LG&[ OdZNJXA! ,$)=>>2@IZn!t<3>Hp6'c@owwlZZs*y7lD~K\sŨȽĴǼb@p(,F"TGgZU@cyR dDF(86%ͥr )\ {M $ Q%I%! mF#B SPVJKvNXA! ,,)%o܁K&,ry8y[I]T! ,4)%$23%@1Z!m>GGOO&GGGPWfQpxeex&]5i|vY`xRa:g,g,l^~Abztźǽż`@p(<F"TGgzU)ֺ-|`+9qfK9Y`WL[ B'X$% 'X$GczB SP\N[ZJXA!,<)%42?3%>3I"R!t0z<P?2v@PPP;XjQqwkxa.m9yAȫȺǹ_@p(4F"TGgjU)ֺ=d$ʕ 4P e+p>"92u.zT rBP & #LG&[ OdZNJXA! ,D)2=j p &V5o6u@o@ugrr®nŜȺŞƢǼP e&I:[— еx1ɥK\#CX@AiVJQ!-*ooYf xw; ׳B! ,L)@Ia1g1m0z1yG4G2yPPPP^rEa-g:m9s+xMyBKSihséxȠŤȯǼİǾe@p(DF"TGgU)֊-6!Ir*H("H%aq(d!|ToB#uh (vGeP( SP(JXT\ZTA! ,T)%4==%$2?>3>$2HFPG={APPPXjqkek|kkqqkrxƂ”ŞŢĮP "f&I:'p,KR AR`#HJ.HihDmW 0A (,EՍ !,\)%$2?>3#R1s0zGG3FQFG>2PG1{A5mXj@owRy7s8yByBZoașȫȽe@p(F"TGM LuL,[ „ gd>Xb3B{mP#e["y{U #"#a!j[ B OUNaNJ[A! ,t)%42?3%>3I"R!t0z<P?2v@PPP;XjQqwkxa.m9yAȫȺǹ_@p(4F"TGgjU)ֺ=d$ʕ 4P e+p>"92u.zT rBP & #LG&[ OdZNJXA!,|)=>>2@IZn!t<3>Hp6'c@owwlZZs*y7lD~K\sŨȽĴǼb@p(,F"TGgZU@cyR dDF(86%ͥr )\ {M $ Q%I%! mF#B SPVJKvNXA! ,)%42?3%>3I"R!t0z<P?2v@PPP;XjQqwkxa.m9yAȫȺǹ_@p(4F"TGgjU)ֺ=d$ʕ 4P e+p>"92u.zT rBP & #LG&[ OdZNJXA! ,)2H"g!mG>"j(p6ǶDzǹ4)RWJ ³7 I1Ob.5M()! ,)#4#?=IZGGOO&GGGPWfQpxeex&]5i|vY`xRa:g,g,l^~Abztźǽż`@p(<F"TGgzU)ֺ-|`+9qfK9Y`WL[ B'X$% 'X$GczB SP\N[ZJXA! ,)%$@a"g!mFd'p6V5c5iGFQx}€Im9m9S[hì~ȝȽĽǷǾǵǹ[@p(F"TGg*U)֊]l$Ƃ-p.B}(U(LGh< "WTBFPBwSB L\ZN[TA! ,)x %4#52?$9=$4%>3$3><3#965BRZc#H"T2H1T!l!t3h1s0zH>2x]c x x>G=FgEz%FY>GG8FQ%Fm%Lw4Ol7YvJYI%K4X&W4G>"G>2P?2i p h'j5p(p6G2yX>s^HGG9_H PG1PG=_Q0j@jQw@pIvRjH wY/pV7w`.{c:GGGGPPPGGRQGPPPWXiQ^u\gtQpxe_Oe__xeZgeghhtkwq|kkqqkvxv;KV[&X&]?O4V'd?d5h5n6uGFH^DiXj_pUs@o@wQ~ejfuh{sv  |vYYiviairrtxryÅITXZ.ga.a-d:k+m9s+t7s*s8y7kEl^xYmCl]wE{UqjxcyB\\uixuKV[Zjuhxgymsèv†ćɋŋȋȔœǠĠȢȬŪȹĽǵƼűŹùĞŢĬųƻH*\ȰÇ#JHŋ3jȱǏ Ci*D2B˗# hܩB;^<.hM߁}RhЧ/$ \JTU4~a7s f|3;\W.]3f>kwgU4/fr׵uK8ijs[dlm(X!4HPqz;i C]Jyvn}}>[s]? 0NtԉyQgvq't Vrw፧"PQ#G iNM5RIf $UWD0' =gr10c?8,#8eV(N:i0f746":#ӃHRR4v޸3P9@j(ius@^duڔ|qL3]iЗU>J#iħAN@d#3HIRq31cy'C"?ȪnT<ֵΦa95$ᤊ&k@;A쳆{$Eɮm~1l`<fBs`@+P+D@?8!)>[HK ,|#?Ǿl@/ ə 50e9A49&vF>πMBЁnaJ-B 0a!‚axzhSB i<K(ȩS}_ 0(D\`@0@l(5uOկ&I ҄$uADHXBYLJE9yd(BNX߁N9_u6}FHB(MYiCq|#!ԁc]~,UmֱHSD"{P H7P$0]C`MABr 9X 4yCzy+X$*AT4Ֆ%u5{L3^HԻ͏e?UR, zhT*3>;3]]m=2 Jճ*D&@I 19MkUttl *{|`n1ep/(r3O:A!Z4YN3p#A.))h'Q@S'4h @,yP@ ?Q2 6&FI,@>H(0g^ge]Ya^dc6h$V8\`2cXR`18 ' qg0tf W6Rg H tXX!A*O`&Rwb"aS*t,;Q2N#3F wJra3H*_WO*R8*0tvS AHgxmf-f yF8긎؎8(SP+` 0 !iPi7"Aj jVk. klV.kk"l$v&@ Ұ9ґ%w Hv+pt 8~xG_@\q܊r ۪l]ʥ HJ .VVéVe*ʀYr _,GZz(H2< Ǧ"%Hu*60 `0Z2Pall[ȧ@{m8\CY&M:u:}p#:/\=ǚza  6cFb7B?\_^aceLCVM_V`X`cيߏސի׫ӻ޵ߵֽ 'v]fVLkBDaCa2l#QhZ4X^AC.&P(huyh/x|  U| eJ_O =?AC  x!!,MIMMI[ZIMTMSUQUUPYZQVYSX^Y^LHeKErSNdSMyUPcUPnV]nYTeXSk^YfYXjUUu^c{bIMdMRePUiQUjSXwGKtHLtOS{POuQSrZZ}SUx^U{[[aQbvZjq`Yjeneg~mkqtlarintkr~sfvquvqyvxzyx}QKVV]b]fai`eclajkseqeqhvm{tvk},+4%>(ACUFYJ]J]~wnrw}x{ˆZUd[n]i`repatjmaqc|k}z{wA?^abdC@LCVM_V`Xadfhmzjwtus~ߠ#$ $-ݬS߯YSZ.0ȝÜɢ Ƣʪèʫ̬гȰрǍȎ̮ΰξշոӹͳӺӽ׽ؾۋݎİڻòɵ̼ùڮ⒕䶽⸻ٿƮóŸ˾ʽҶ *\ȰÇ#JHŋ3jȱǏ CIɓ(S,`D+cʜI͛8sɳO弧L0fԡ>kycMDp bd`ÊKٳh]{1cȐ#̲M^#Ξ=uV!C"$ #$?6rVB9ᢴn/gXmE#SM @VcQX6ؠ[JI^\%B!BBS1gM>joHOH aο(h>3ؓ`TQHPh=hq"D=F8A=k.~$K?)&& pJm`' UM$>L6Px\&kUC*% 4V'8Z@ ?#0h`Kj?| f_SD<`pewcWwehǔMi|p7.+,覫n@I4?]( x9XC8#씰MZ<L;0!KOO11{!tB񠱞*M LC/;,<ZA6d@%<Ȼ\w ~M^\k{!vq-anD;A׀5TR7O,M @s`2 <"#.o0<9 uɖ;dⶇnw˛6 Z̠7։|d#`FbSr攄yc@\D7ͥB Uyˋ{ $X*hK  tx8ִN;k#lYRyM"!xl4З0_iq(1GE.\8α5[ʃV B"(r +܃D.T- M(`}r%R;Vģ ݱ'MJ-7Yr k9/x piL b!q1i[@A+\/>}aKv;< x@:0+[>gmlg/vgFdVf(9, m-v:Mzη~o@~a$ N;g#cSϸ7jBA [Wr+0˥8Ϲw0 sl[Hn{'PԧN[XϺַ{`Ng4ڱ~aOqUwԏxϻ';B!,=>>2@IZn!t<3>Hp6'c@owwlZZs*y7lD~K\sŨȽĴǼb@p(,F"TGgZU@cyR dDF(86%ͥr )\ {M $ Q%I%! mF#B SPVJKvNXA!,%$2?>3#R1s0z>2@IZn!t<3>Hp6'c@owwlZZs*y7lD~K\sŨȽĴǼb@p(,F"TGgZU@cyR dDF(86%ͥr )\ {M $ Q%I%! mF#B SPVJKvNXA!,4%4I!m1g1s<|>GGG>"{AE5c5iXd@uw{Rg:m9yByBoagŔȨȶǽc@p($F"TGgJU)ֺd6=. )ZX $B sT $"$[!FPC TJn{D[ZPA! ,<%4==%$2?>3>$2HFPG={APPPXjqkek|kkqqkrxƂ”ŞŢĮN "f&I:'p,KR AR`#HJ.HiϨr*`4&ǃPXKu!,D%o܁K&,ry8y[I]T!,L%@jQf{s80)RWJppFkca^"! ,T%$23%@1Z!m>GGOO&GGGPWfQpxeex&]5i|vY`xRa:g,g,l^~Abztźǽż`@p(<F"TGgzU)ֺ-|`+9qfK9Y`WL[ B'X$% 'X$GczB SP\N[ZJXA! ,\%4I!m1g1s<|>GGG>"{AE5c5iXd@uw{Rg:m9yByBoagŔȨȶǽc@p($F"TGgJU)ֺd6=. )ZX $B sT $"$[!FPC TJn{D[ZPA!,d%4==%$2?>3>$2HFPG={APPPXjqkek|kkqqkrxƂ”ŞŢĮN "f&I:'p,KR AR`#HJ.HiϨr*`4&ǃPXKu!,l%o܁K&,ry8y[I]T! ,t4$3%=%$2?3>>I2H3>HG>"xĿmsåsŪsȡȣJ d&I:(@Bp @O 1 i" LEJ \^+7`Yoi:va!! ,|%$23%@1Z!m>GGOO&GGGPWfQpxeex&]5i|vY`xRa:g,g,l^~Abztźǽż`@p(<F"TGgzU)ֺ-|`+9qfK9Y`WL[ B'X$% 'X$GczB SP\N[ZJXA! ,%$2?>3#R1s0z3>$2HFPG={APPPXjqkek|kkqqkrxƂ”ŞŢĮN "f&I:'p,KR AR`#HJ.HiϨr*`4&ǃPXKu! ,%$2?>3#R1s0z>2@IZn!t<3>Hp6'c@owwlZZs*y7lD~K\sŨȽĴǼb@p(,F"TGgZU@cyR dDF(86%ͥr )\ {M $ Q%I%! mF#B SPVJKvNXA!,%o܁K&,ry8y[I]T! ,#4#?=IZHv@{ZPPPPWrN&V@ulrZaa}UummxȜȳǻưǷĺǹ`@p($F"TGgJU)ֺ<ĕ 45|0Bɂu&AT'E!X sBX$ $[GcPC SZdN]TA! ,4I1m"PPP5oH^m9s8yB}LxUyBsxȯǯǼS f&I:[› еpA"_gPD C! `l" #dLc(/O4!! ,@0z^'j('cg,m9xLyBmsåsȫȽIJǹJ e&I:[— еx)F D.BE(@rp.DI^H :X5mh<Y!!,=>>2@IZn!t<3>Hp6'c@owwlZZs*y7lD~K\sŨȽĴǼb@p(,F"TGgZU@cyR dDF(86%ͥr )\ {M $ Q%I%! mF#B SPVJKvNXA! ,%$2>>2@IZ"aFOd'j(v@N&]5iHjQzlrzĎa}\~AamƠȥȨȡǾǻĩDzǺi@p(<F"TG'Mz>+ pNbU8ekԀC@Kq!{jw% |M'Q}B'" TqB'$ dD NJ\A! ,%4$2$2?ZK H4.`0(J&p[LV2A[Hv@{ZPPPPWrN&V@ulrZaa}UummxȜȳǻưǷĺǹ`@p($F"TGgJU)ֺ<ĕ 45|0Bɂu&AT'E!X sBX$ $[GcPC SZdN]TA!, 2=j p &V5o6u@oHo@uPogrr®nŜȺŞƢǼP bf&I:[™ еxQJSd"C`̀a%.%ö 0f@xw; ׳B! ,=F*o܁K&:,ry RA :,ʴ&OxÕ݊)! ,%$23%@1Z!m>GGOO&GGGPWfQpxeex&]5i|vY`xRa:g,g,l^~Abztźǽż`@p(<F"TGgzU)ֺ-|`+9qfK9Y`WL[ B'X$% 'X$GczB SP\N[ZJXA! ,$%42?3%>3I"R!t0z<P?2v@PPP;XjQqwkxa.m9yAȫȺǹ_@p(4F"TGgjU)ֺ=d$ʕ 4P e+p>"92u.zT rBP & #LG&[ OdZNJXA! ,,2=j p &V5o6u@o@ugrr®nŜȺŞƢǼP e&I:[— еx1ɥK\#CX@AiVJQ!-*ooYf xw; ׳B!,4@Ia1g1m0z1yG4G2yPPPP^rEa-g:m9s+xMyBKSihséxȠŤȯǼİǾe@p(DF"TGgU)֊-6!Ir*H("H%aq(d!|ToB#uh (vGeP( SP(JXT\ZTA! ,<%4==%$2?>3>$2HFPG={APPPXjqkek|kkqqkrxƂ”ŞŢĮP "f&I:'p,KR AR`#HJ.HihDmW 0A (,EՍ ! ,D%$2?>3#R1s0zGG3FQFG>2PG1{A5mXj@owRy7s8yByBZoașȫȽe@p(F"TGM LuL,[ „ gd>Xb3B{mP#e["y{U #"#a!j[ B OUNaNJ[A! ,\%42?3%>3I"R!t0z<P?2v@PPP;XjQqwkxa.m9yAȫȺǹ_@p(4F"TGgjU)ֺ=d$ʕ 4P e+p>"92u.zT rBP & #LG&[ OdZNJXA! ,d=>>2@IZn!t<3>Hp6'c@owwlZZs*y7lD~K\sŨȽĴǼb@p(,F"TGgZU@cyR dDF(86%ͥr )\ {M $ Q%I%! mF#B SPVJKvNXA!,l%42?3%>3I"R!t0z<P?2v@PPP;XjQqwkxa.m9yAȫȺǹ_@p(4F"TGgjU)ֺ=d$ʕ 4P e+p>"92u.zT rBP & #LG&[ OdZNJXA!,t4$3%=%$2?3>>I2H3>HG>"xĿmsåsŪsȡȣJ d&I:(@Bp @O 1 i" LEJ \^+7`Yoi:va!! ,|%o܁K&,ry8y[I]T! ,%$23%@1Z!m>GGOO&GGGPWfQpxeex&]5i|vY`xRa:g,g,l^~Abztźǽż`@p(<F"TGgzU)ֺ-|`+9qfK9Y`WL[ B'X$% 'X$GczB SP\N[ZJXA!,%42?3%>3I"R!t0z<P?2v@PPP;XjQqwkxa.m9yAȫȺǹ_@p(4F"TGgjU)ֺ=d$ʕ 4P e+p>"92u.zT rBP & #LG&[ OdZNJXA!,2=j p &V5o6u@o@ugrr®nŜȺŞƢǼP e&I:[— еx1ɥK\#CX@AiVJQ!-*ooYf xw; ׳B! ,@Ia1g1m0z1yG4G2yPPPP^rEa-g:m9s+xMyBKSihséxȠŤȯǼİǾe@p(DF"TGgU)֊-6!Ir*H("H%aq(d!|ToB#uh (vGeP( SP(JXT\ZTA! ,%4==%$2?>3>$2HFPG={APPPXjqkek|kkqqkrxƂ”ŞŢĮP "f&I:'p,KR AR`#HJ.HihDmW 0A (,EՍ !,%$2?>3#R1s0zGG3FQFG>2PG1{A5mXj@owRy7s8yByBZoașȫȽe@p(F"TGM LuL,[ „ gd>Xb3B{mP#e["y{U #"#a!j[ B OUNaNJ[A! ,%42?3%>3I"R!t0z<P?2v@PPP;XjQqwkxa.m9yAȫȺǹ_@p(4F"TGgjU)ֺ=d$ʕ 4P e+p>"92u.zT rBP & #LG&[ OdZNJXA!,=>>2@IZn!t<3>Hp6'c@owwlZZs*y7lD~K\sŨȽĴǼb@p(,F"TGgZU@cyR dDF(86%ͥr )\ {M $ Q%I%! mF#B SPVJKvNXA! ,%42?3%>3I"R!t0z<P?2v@PPP;XjQqwkxa.m9yAȫȺǹ_@p(4F"TGgjU)ֺ=d$ʕ 4P e+p>"92u.zT rBP & #LG&[ OdZNJXA! ,<%4#92?$2=3%=%>3$2?<3#3333>>>3>>>2@IRZi#H"T2H1W!j!t1j1s0zH$1y=1y]c x xE~%FY>GG3FQIWJ%I4^'W4G>"G>2P?2j p d'j(p6G2yX>sGG1PG1PG=jQw@pI{R{ZjH |f:GGGGPPPGGWTJPPPPWfPZrXjqQpxe_Oe__|f^fefeexkwq|kkqqkwwq;HV&V&]'c?d5c5i5j5o6uH^CkXhQpQp@o@uPoQ~jrtvw{  |vYitfl`fgllruxrxĊWXZ.aea.a-d:g,m9s+v7s*s8y7lDl^rCxMyBzL{VyB\bvKUZjluztagmtmsåsŪs©x‡ŋȇȔœȔȜțȠŠȡȭũȹǬƴǻİ·ĴǾǽķĻżĝŢìóƻH*\ȰÇ#JHŋ3jȱǏ CIɓ(S\ɲ˗0cʜIM!,A2Άf@O73B@DQ$Ux4# -*ƫSAo_c˞]mu$5rroC>dsQܵ;#۸)_T8&t*^μpk ZB ` ('K"7]NNѸ釣0צ+WI!өWN REMr|ܖ,nq;e~A5xIY!TNb͍,;5 +pYze 6& 1vfYzaY@5oԛ~A敋U ) !br,w9̇(O93V6y@Еnt#e׈r#!k/ fc/SdG@^]Lq{C x =0HrDK ,~ b!G"'8MX _xqn+AAF_zų] H{>g^'A.#· xGSG$SgO~oH/ 8 !@eп!8Xx ؀8Xx؁ "8-1P$*u0vǂ02($d3x81\~:@A %H7H JP(PehoZ@\bK7S Y8l؆ r8gtxxz|؇~8Xx؈H8@(臛؉(X!<q1..r(㊯8Ix3hȸ+"8(xhظ8 (xh踎2!,LHLKGWKG\NJRMJ[VGKSIL[GK[JMRMQQM]ZLZTQTSP_XU[KGaIDhNKbOLkMIvRNeSWjQR{X`u_bx`FIcKNmKNcNQlXTsFHsKNyMMqNQvQNsWVv\SzTR`PapVdnh[zf[dahjejkjnpelpmpzpcrststzONRQU[TZX^X^[d[d^j[f]icm`n`nfrizu~h|,+4%>(ABTEXI\|nxw{}w|]TbWbYn]eYi\q^qextyfwqqA>B?\_^aceLCVM_V`X`czjzqls{|}ޟ"ߠ# $-ܪOݫSޮXS.0œÞŤƣȦɫèȫ˱ó˾́ŎɬҶ̽ɷҹѽيߏސ°ۻŴȹ˼Żի׫ӻ޵ߵýֽüƫ²źɼγ˽ H>*\ȐaHŋ3jȱǏ CIɓ(S\ɲ˗()ʔhƙ8+"O)ev,ѣH*]ʴӧPf|4翩~|WL1j>uAFOkυv%!B$ɮtJ˷߿ ,حa+^עhe̜A挙2j?~M^K9rH%2p۸sͻ߷5θM-R0`OK0\HoRNqV,f}Хc>0iҊo}6;eƁQ?w1a,avh($hl0="f!EO$PI>`A=i! @m$@:>y-H!pwE b!$0ooh['+͑'ihPcpa1!cGv sEt((EP案&JW$; BOI% nZ:5?'KJjO25 >%`Oop9#!6dgal>fgygh{ĆrhD>S!a|AHD>p=TG=sB0X;ȣA/Pࣅ=ѣA c0 Pa BҳA b1"#>P]Op{v0c0\Ik>r`cFMOb eov>u歷qGD܄n'7c =[ "N3@3P$,> +P6P*ȂO矇>z8l~63.L>=ZTXDP>c03.ds * 9dQz;۳ @8) @=/rL&1M$mBV7?MOy9(L WBQnn+ԃ84 ᙮f1\] RYx9Qáy#ڬ RHQj5p|@BÀ eE`MaD-O'`Q=:1|c$'IJZRmZA\=6MEִEmSMm\$:yZ$]=WD"[s@=TQGE=LIl a_# 6Ǒ-b:3إCe `G1-P@+aeḟ<ΖB"/Cz4'șR  D1Qd/0qюztBJRx(0lNxR%*TzN9ў{b8||G!P.Xj250_@=-*Lu*F U,O@ ֳrdX颺lK dG1OXI4{d'[RQSnBBB  ʺlgK 8I #V$eN"x2I6\l[+Р4.rN8ҭ̇q!eF~Ճ$P?LW i3L` AĘsGamM0n7{ _ Έd*sg4{ hDlJP k\^@NvqnH bj1]N։B8&`ÐJŕ.s#)3W\QPf 4_roOh.W8ЄC LJ[AMCccC0 htĜ2@:ܐ/0L!=51^,1Msb&6'ǑlؔE&DZfڿi;< %eG^r;ۺ.q]gS;Futw= }{ǀ_+ O8u-x?{v'yO\ݝw)W\ GN(OO \0 2Ϲw󞗼(qc.ANoJϧN[XϺַ{IŮ_|&6ۭ`Nx{t]JO ]O;߸'N! ,%2=h1ZHv@{ZPPPPWrN&V@ulrZaa}UummxȜȳǻưǷĺǹ`@p($F"TGgJU)ֺ<ĕ 45|0Bɂu&AT'E!X sBX$ $[GcPC SZdN]TA! ,,$2?@1s0z$@3>Hd'PP=v@ ]m,}UyBsåsȡȫȡǽǷĮĵǼV bg&I:'p$*lWP=^&S` (MQ4}`q4 ? €BVmLcMWɦgy.M!!,4%o܁K&,ry8y[I]T!,<22HO4v@5i@owqZrCåsdzķĹD d&I:[’ е{I$3 (y**ɾX-muVٵSݨ! ,D2=%=Y4W~_Q0kkq&]@ullr€RRqjéxǽĞDzM "f&I:[ؘ` 2vH"_XBHTDjtGـ550L.@=-W.s]s<-!,*):5:*7(442He)R1u$@$2H$;W3>H=2x] q>G=Ey9FK1SuMM)L>-m m.Q9u^HGG7_H PG9[P2vBpR-{d9JHJMI[GPPSGHTMSRQGSPRLHeKErRNeSMyVUhRYtWjtbIMdMRe_OgTWuGKtOS{POwVVaQbvZjweYgeghhtkwqzjjtkrtqivtv;O i'Y0g5rGFH^QKVVCjXg]f_pTsBrcibjhshwtvw{k},+4%>(AEX|vYj|uiairwruxxqw{ˆVZ.dj2v4ZUkDf[z[mCl]wE|Ui`rgmawf|xyBA?^abdC@LCVM_V`Xdf\ugvuVjvkxsgwqߠ#$)ݬTèuSZ.0šǬи°рǍ̮úշƯӺƸԾۋݎűŸڻźùڮ⒕㷼ٿĝĥŸƮŶҶ H*\ȰÇ#JHŋ3jȱǏ CIɓ(S\ɲ˗0cʜIsc~.󑃴h$rD]PJ01]իXjʵט7ò,Q#G1T.PLu(P)6 0axC PN~h Əb f0oM 8Og`, ! ǩp)ǙRGУ7ϸ}D[(SLF`T5o˟O/^&?r7*,<5\? K/LvO}(;x<ᄺԠ6p8a/9 hA0  <@ާ=_AC&I#5#(y)BxqޗbxAIh7c Ux$?|X c'?TGqB"b/?9P!}nZ3cna"jB_~I(MVa)ʯWRʐ I1eh.Ħ)K}( VO7X.US Bp&ozMd[n?[g?qJ 롛/(MN9<ȳ^(G khnQ9p,7<:pf,gIZoLՓ,pPWW8E/I t2Y|HÐ{%"V4PT%Yk-D3>9)*yI{hBhؠ-cHSQA"NLBPVTT<5l;E=/~)=hHGN\20@H`y|ciݰ  ԣXZ=mlj i hN%+UVIC+0{7D&`e_jLӳMz6m$H63vc(1QMP 8}8(=D0< ?xHUZgf`0α'M5π3' g‡'MJ[Ҙδ7i@QfRԨNWVհgMZָεw^MbN?f;ɎMj[ζn{~MrNv[MzηX[N7l NqL\+GN`/\޹V@+,P>`=;nm\9KNkHOғ~qz 06Z\:<]ձ~FؗN۝Mv́/ge-s/|~_#d7#kwϼ7^H;EQ oj̗: A@C&d@:<;7c00=ft^;!#\0&_9:o?/w{ P PjNp|3wp {؁yvj\$Hg ߀װ Xj; X'Dh!@oȅ;؃f0 ExfxЅ_Bp 'Y~聖xk p\pzVz̐>XsPjG'^sNJ8gupxs@jPqup Gv`ɘQXvpF押hvVLhjȋ؏pk O06Wp>z騏uIx 27v spx(|xƊjr@ zydWV Y8[8nj1 VuЎǒ6x"xVy;jي 00U)PiuXu4x 8}jɐ$ij0 ` ߠ sbIfN w),X7aIejP铌ٖVH9cY锜I` zId琈jyGvVFsv84 )/sC'Ǜ> 9yu(ɝXj8HǚTWuِQpf= BP:z 0`~AO V7xw4x |sJujTh @y8@)Fv- j 3hڧx:}ASiZ֥f$}*P&kj`j Zj: kԊjjjZ놫ʁڮ솮y ` zگ; {g ۰!ǰ;[&rq۱oFk&{w&w$+(;4o*Xm9kאB 5B{y(zgzV~7sg|'U 7 N[Ƿ}I 66zgj*}i(qjLkhi~@ <9;V!hj#X'F`hxGȈje>@˄nﷆXHSXKg蹰۸exXyI;(9tHUj˨{@3kQǍ fkj%{ˋΫ^h0gXjĻ{ّ֜ꩣ *v?7mIAkj!7H @ƒzqj uZÇ@Ylu왓P4,w> Njj9Gߠ^<0|uI}j1pt빮g,BC}HELKNRnP=V}n^}𪃯n#{lbjMau沾ƲsMkx=鶳Vz]ثԧ~zl|[~'~ַs  aKhB)r،͵}Bꀵ8Y ږ]<cek-pZp ǺTXJk+^;j[jƍ)M݅˻7ۍޤ;EÝֆwԛA(ק>[YKj[jH޽{u൹+#fx"ܑpJjYl ]iy7~'Lkj>>6YH@,~W 5H\W\|bΞx)yg^jW6P m~D̂3儞Zx,b{cp#xIg,0vmLmE\nyP.=*^mp>̡s,p|ʿd,ʫ̠4K|٭1`ʀWFʌɟD^yʩ-d4mhƬl^p?+t  j kgj O j}B "z t^ Oh d @ X ?GwOz_Vo*T .w[7&iVjBHA@7κǔ$sW~jȆj/yR ئvObF׳ .:`c\NK(G #R.o/r Ҫ&5#5#S?cuVZk$@"*?$ ""QzUًr RpbiC8p=I:?s+Yg%[w^ze1Wpd/j"M.%6$zH!,Rp~ u_NS0k *">M$mbk>9Ng%|s dr^K*&c6 .4J5R@Zu빿 woޢ /7@cV4C%*( :ӈr2}pSW}u ӊ;,Hus}w1rF&t'"{W~y曷~z꫷^$~{={|k|W}g}㗟%.?/p97N ߈[F* A l:r BWHUY[[E+<4"3t bL!0! =8Xb"L xD$:~@k6g@dfcLnZCZыנ!<@$ft-=+G_Zӛ_9iPӡ&u7jSZC]jյֳuX0# Q*<s$6 ]bdN Yez(1l Cj`CmZJDBSs uu#icRҽ,2^Č^MVov߱0sr: F|1 xR >nW~h`n)!Ia(ʋCdwŶF^RdUrVYZzI~'J\y7SLRrOz&øna8gH@6()zGCٹIy#  [E0ID[ N,([CR2/;9wCxH<S!,Z\#3;@E2"/[+202'FRy 8p>6ۈmD< ? ;I<37vFz4D}G QH e ҠU[ Ã{rT`ToS40g%0B)]MiZUbcGEDfu^VsUT΂.΍དR u`=(cS48( L+B(X8,|?{ 7}ENCa@/X ቩ׋3A( uN=K==}xpu|ĩƼWHC](YY$ ڡmسZZhZt~zH;(%bDOӿT(Q" Ԍ0[U|[ V$:$& T oF!l@,{/ɽKU=!!]Cm = u)H"E!ݑ(]]lص?1ܣ] ^ U[z6,[!6{B<\HU(uۀE:2"լ]\sMx#=]q9;|3c|_DY$<ުH^sޞG`E`a & N_6%] @=+AD aV._[@m_R9 9% $fbe7,@cعJe+bOp|ⅭaF^P嘮E\*:9^9 8cAVa<0p19T^yӈY0eVM朋 h־@O&1f9I?R 9g&e&V6n٦mxd۶m~&fކ.̐ )?op`H'pLHPcRp 'xO _wo/qpOqNCqoJcqq@qqqeq_ڷ0&T"r$g1$o sr)Y>r,ǧ @r/o)Y7^r26-)s55#j؆s:s<;s>=s@W?tB/tDAJDtXthwtKwCJtNw I0DN/u1Hi  ; uSuG\6|ZuaT$@LavPNtN$*. Qs }ƝQȺkX:_b*gvvS25S.Ј8]UO U}]cХAHouowvwWWy޻%쩘>,wgH hxhuߋ\fjdx9B7yaH`7Ad%2yu 0؈5N1o%!`/u :(9zBT>%u o%{N#`4N}PѺp]S{b0/{Oϼ~ hR_ Q]X8ʯ|Dň!I`|'tя _}@o}x}s ! ,T$@1s0z$@3>HF?d'PP=v@ ]m,}UyBsåsȡȫȡǽǷĮĵǼT bg&I:'`$*l WP=^*u &b(> 8?/.|l2g8]%}.N!!,\=>>2@IZn!t<3>Hp6'c@owwlZZs*y7lD~K\sŨȽĴǼb@p(,F"TGgZU@cyR dDF(86%ͥr )\ {M $ Q%I%! mF#B SPVJKvNXA! ,d#4$=a!m>2ZW^ d E&N?N5o@o@uIzIlrxlr€IZZs8ZWZagƬx“ȝȶĵǷǾŢǬǹd@p(|F"TGgU)֊@aVVGha.uP3#R0z1s^ F%j(p@|f:GGGPGGkqllrZf:s8ZzgūȻĽǵ]@p($F"TGgJU)֊]$FJEDHhBaTBL d4 {$JX$$[G [B SP\TZPA!,%o܁K&,ry8y[I]T!,$@1s0z3>Hd'PP=v@ ]m,}UyBsåsȡȫȡǽǷĮĵǼT f&I:'P*l 05"`$̃A4} a\+ݯM6dmQ4]%}.M!!,%42?3%>3I"R!t0z<P?2v@PPP;XjQqwkxa.m9yAȫȺǹ_@p(4F"TGgjU)ֺ=d$ʕ 4P e+p>"92u.zT rBP & #LG&[ OdZNJXA! ,%$@a"g!mFd'p6V5c5iGFQx}€Im9m9S[hì~ȝȽĽǷǾǵǹ[@p(F"TGg*U)֊]l$Ƃ-p.B}(U(LGh< "WTBFPBwSB L\ZN[TA! ,%$2?>3#R1s0z3I"R!t0z<P?2v@PPP;XjQqwkxa.m9yAȫȺǹ_@p(4F"TGgjU)ֺ=d$ʕ 4P e+p>"92u.zT rBP & #LG&[ OdZNJXA! ,%o܁K&,ry8y[I]T! ,$@1s0z3>Hd'PP=v@ ]m,}UyBsåsȡȫȡǽǷĮĵǼT f&I:'P*l 05"`$̃A4} a\+ݯM6dmQ4]%}.M!!,%$2?>3#R1s0z3I"R!t0z<P?2v@PPP;XjQqwkxa.m9yAȫȺǹ_@p(4F"TGgjU)ֺ=d$ʕ 4P e+p>"92u.zT rBP & #LG&[ OdZNJXA!,%$@R!t1s0zGG3FQG>2PG1{A5mXj@owRy7s8yByBZoașȫȽc@p(F"TGM !LUL*[ cGd<"Hb1{wmP"e[!y{U"!"a jaB OUNENJ[A!,%$2?>3#R1s0zHv@{ZPPPPWrN&V@ulrZaa}UummxȜȳǻưǷĺǹ`@p($F"TGgJU)ֺ<ĕ 45|0Bɂu&AT'E!X sBX$ $[GcPC SZdN]TA! , 4#42>>2Z2ZW^ d %E&N?N5o@o@uIzIlrxlr€IZZs8ZWZagƬx“ȝȶĵǷǾŢǬǹe@p(F"TGg U)֊`qZXpa T>X)!( +$X%0* F[0)0[0#.[ZT\PLA!,( %4#42?$2=2?3%>3$2?>3#>>2@IRZak"U2H1Z!i!t1mH>1s]c x xEy>GG3FQ4W{FOW^ F?F%O4G>2P?2d j d'j(s(r6PG1PP=[P0u@vI{A{Z|f:GGGPGGPPPPOlPWrQd}vcIqk^kkq|wdwqw;ENV ] i%E&N&V&]&]?N'c5c5i5k5o6uGFVh@o@u@u@zIzIQkqttqq  kl|wh`glllr}rrxxxlrvĀIRZRZaaa.f:m+m9m9s8y7s*s8{7ZWlD}]tB}UqjrdyA~K\puS[ZZouzahmgmtmsåmåsêx‡ŋȓȜȜȡȫŪȺĵ½ǬǴǼƳĴŶĴǾƽķļÞţŭĴƺH*\ȰÇ#JHŋ3jȱǏ CIɓ(SR$K _T(3 3=nՂ3p?F yP)Qfԍe@ha4(i؃ΉU vՁm5~mF0 `/vh ûP C ovYsg{.O΀u5˻m 35wbK4|0?#%Dku u  Ï/{q^?E@Lg{lѦk&htQA%Gt"Bq D?V< U"qɜs@ Ώ ?L?؊!Yg4 P6+? 9[wm֐m:̶g-w(!lO?7T@3|Z9TAXcć"363O:۳A=nhY?@,DD/1|K@K.B0?6?#$<U; 1}LJcYL=.Q/>ONlf4q}A@a'4!YcG!?⡅Tb][H 4m=`pGW*92B 0 q ˆ.l0t,2ٗB jpH(?Q}яO IKq.jk.X9Dv,J!eB%nEǬ5Cle'Ǐd rD.wzLHUR?T!ub\ʰ]1[daȃ,RF 23 Hc518`fR(x6SQƘcx2`S00l"1y3X9;stz;Nr9tl_zGܦJF`ydf:M;xE  pHK"+%K $E#C,g0⁤HMHm>2@IZn!t<3>Hp6'c@owwlZZs*y7lD~K\sŨȽĴǼb@p(,F"TGgZU@cyR dDF(86%ͥr )\ {M $ Q%I%! mF#B SPVJKvNXA!,%$2?>3#R1s0z>2@IZn!t<3>Hp6'c@owwlZZs*y7lD~K\sŨȽĴǼb@p(,F"TGgZU@cyR dDF(86%ͥr )\ {M $ Q%I%! mF#B SPVJKvNXA! ,4%4I!m1g1s<|>GGG>"{AE5c5iXd@uw{Rg:m9yByBoagŔȨȶǽc@p($F"TGgJU)ֺd6=. )ZX $B sT $"$[!FPC TJn{D[ZPA!,<%4==%$2?>3>$2HFPG={APPPXjqkek|kkqqkrxƂ”ŞŢĮN "f&I:'p,KR AR`#HJ.HiϨr*`4&ǃPXKu! ,D%o܁K&,ry8y[I]T! ,L%@jQf{s80)RWJppFkca^"!,T$@1s0z3>Hd'PP=v@ ]m,}UyBsåsȡȫȡǽǷĮĵǼT f&I:'P*l 05"`$̃A4} a\+ݯM6dmQ4]%}.M!!,\%$2?>3#R1s0z3I"R!t0z<P?2v@PPP;XjQqwkxa.m9yAȫȺǹ_@p(4F"TGgjU)ֺ=d$ʕ 4P e+p>"92u.zT rBP & #LG&[ OdZNJXA! ,l%$@R!t1s0zGG3FQG>2PG1{A5mXj@owRy7s8yByBZoașȫȽc@p(F"TGM !LUL*[ cGd<"Hb1{wmP"e[!y{U"!"a jaB OUNENJ[A!,t%$2?>3#R1s0zGGOO&GGGPWfQpxeex&]5i|vY`xRa:g,g,l^~Abztźǽż`@p(<F"TGgzU)ֺ-|`+9qfK9Y`WL[ B'X$% 'X$GczB SP\N[ZJXA!,%4I!m1g1s<|>GGG>"{AE5c5iXd@uw{Rg:m9yByBoagŔȨȶǽc@p($F"TGgJU)ֺd6=. )ZX $B sT $"$[!FPC TJn{D[ZPA! ,%4==%$2?>3>$2HFPG={APPPXjqkek|kkqqkrxƂ”ŞŢĮN "f&I:'p,KR AR`#HJ.HiϨr*`4&ǃPXKu! ,%o܁K&,ry8y[I]T!,4$3%=%$2?3>>I2H3>HG>"xĿmsåsŪsȡȣJ d&I:(@Bp @O 1 i" LEJ \^+7`Yoi:va!!,%$23%@1Z!m>GGOO&GGGPWfQpxeex&]5i|vY`xRa:g,g,l^~Abztźǽż`@p(<F"TGgzU)ֺ-|`+9qfK9Y`WL[ B'X$% 'X$GczB SP\N[ZJXA! ,%$2?>3#R1s0z3>$2HFPG={APPPXjqkek|kkqqkrxƂ”ŞŢĮN "f&I:'p,KR AR`#HJ.HiϨr*`4&ǃPXKu!,%$2?>3#R1s0z>2@IZn!t<3>Hp6'c@owwlZZs*y7lD~K\sŨȽĴǼb@p(,F"TGgZU@cyR dDF(86%ͥr )\ {M $ Q%I%! mF#B SPVJKvNXA! ,%o܁K&,ry8y[I]T! ,#4#?=IZHv@{ZPPPPWrN&V@ulrZaa}UummxȜȳǻưǷĺǹ`@p($F"TGgJU)ֺ<ĕ 45|0Bɂu&AT'E!X sBX$ $[GcPC SZdN]TA! ,4I1m"PPP5oH^m9s8yB}LxUyBsxȯǯǼS f&I:[› еpA"_gPD C! `l" #dLc(/O4!! , @0z^'j('cg,m9xLyBmsåsȫȽIJǹJ e&I:[— еx)F D.BE(@rp.DI^H :X5mh<Y!!,=>>2@IZn!t<3>Hp6'c@owwlZZs*y7lD~K\sŨȽĴǼb@p(,F"TGgZU@cyR dDF(86%ͥr )\ {M $ Q%I%! mF#B SPVJKvNXA!,%$2>>2@IZ"aFOd'j(v@N&]5iHjQzlrzĎa}\~AamƠȥȨȡǾǻĩDzǺi@p(<F"TG'Mz>+ pNbU8ekԀC@Kq!{jw% |M'Q}B'" TqB'$ dD NJ\A!,$%4$2$2?ZK H4.`0(J&p[LV2A[Hv@{ZPPPPWrN&V@ulrZaa}UummxȜȳǻưǷĺǹ`@p($F"TGgJU)ֺ<ĕ 45|0Bɂu&AT'E!X sBX$ $[GcPC SZdN]TA! ,L2=j p &V5o6u@oHo@uPogrr®nŜȺŞƢǼP bf&I:[™ еxQJSd"C`̀a%.%ö 0f@xw; ׳B!,T=F*o܁K&:,ry RA :,ʴ&OxÕ݊)! ,\%$23%@1Z!m>GGOO&GGGPWfQpxeex&]5i|vY`xRa:g,g,l^~Abztźǽż`@p(<F"TGgzU)ֺ-|`+9qfK9Y`WL[ B'X$% 'X$GczB SP\N[ZJXA! ,d%42?3%>3I"R!t0z<P?2v@PPP;XjQqwkxa.m9yAȫȺǹ_@p(4F"TGgjU)ֺ=d$ʕ 4P e+p>"92u.zT rBP & #LG&[ OdZNJXA! ,l2=j p &V5o6u@o@ugrr®nŜȺŞƢǼP e&I:[— еx1ɥK\#CX@AiVJQ!-*ooYf xw; ׳B! ,t@Ia1g1m0z1yG4G2yPPPP^rEa-g:m9s+xMyBKSihséxȠŤȯǼİǾe@p(DF"TGgU)֊-6!Ir*H("H%aq(d!|ToB#uh (vGeP( SP(JXT\ZTA!,|%4==%$2?>3>$2HFPG={APPPXjqkek|kkqqkrxƂ”ŞŢĮP "f&I:'p,KR AR`#HJ.HihDmW 0A (,EՍ ! ,%$2?>3#R1s0zGG3FQFG>2PG1{A5mXj@owRy7s8yByBZoașȫȽe@p(F"TGM LuL,[ „ gd>Xb3B{mP#e["y{U #"#a!j[ B OUNaNJ[A!,%42?3%>3I"R!t0z<P?2v@PPP;XjQqwkxa.m9yAȫȺǹ_@p(4F"TGgjU)ֺ=d$ʕ 4P e+p>"92u.zT rBP & #LG&[ OdZNJXA! ,=>>2@IZn!t<3>Hp6'c@owwlZZs*y7lD~K\sŨȽĴǼb@p(,F"TGgZU@cyR dDF(86%ͥr )\ {M $ Q%I%! mF#B SPVJKvNXA! ,%42?3%>3I"R!t0z<P?2v@PPP;XjQqwkxa.m9yAȫȺǹ_@p(4F"TGgjU)ֺ=d$ʕ 4P e+p>"92u.zT rBP & #LG&[ OdZNJXA! ,4$3%=%$2?3>>I2H3>HG>"xĿmsåsŪsȡȣJ d&I:(@Bp @O 1 i" LEJ \^+7`Yoi:va!!,%o܁K&,ry8y[I]T! ,%$23%@1Z!m>GGOO&GGGPWfQpxeex&]5i|vY`xRa:g,g,l^~Abztźǽż`@p(<F"TGgzU)ֺ-|`+9qfK9Y`WL[ B'X$% 'X$GczB SP\N[ZJXA!,%42?3%>3I"R!t0z<P?2v@PPP;XjQqwkxa.m9yAȫȺǹ_@p(4F"TGgjU)ֺ=d$ʕ 4P e+p>"92u.zT rBP & #LG&[ OdZNJXA! ,2=j p &V5o6u@o@ugrr®nŜȺŞƢǼP e&I:[— еx1ɥK\#CX@AiVJQ!-*ooYf xw; ׳B!,@Ia1g1m0z1yG4G2yPPPP^rEa-g:m9s+xMyBKSihséxȠŤȯǼİǾe@p(DF"TGgU)֊-6!Ir*H("H%aq(d!|ToB#uh (vGeP( SP(JXT\ZTA! ,%4==%$2?>3>$2HFPG={APPPXjqkek|kkqqkrxƂ”ŞŢĮP "f&I:'p,KR AR`#HJ.HihDmW 0A (,EՍ ! ,%$2?>3#R1s0zGG3FQFG>2PG1{A5mXj@owRy7s8yByBZoașȫȽe@p(F"TGM LuL,[ „ gd>Xb3B{mP#e["y{U #"#a!j[ B OUNaNJ[A! ,%42?3%>3I"R!t0z<P?2v@PPP;XjQqwkxa.m9yAȫȺǹ_@p(4F"TGgjU)ֺ=d$ʕ 4P e+p>"92u.zT rBP & #LG&[ OdZNJXA! , =>>2@IZn!t<3>Hp6'c@owwlZZs*y7lD~K\sŨȽĴǼb@p(,F"TGgZU@cyR dDF(86%ͥr )\ {M $ Q%I%! mF#B SPVJKvNXA!,%42?3%>3I"R!t0z<P?2v@PPP;XjQqwkxa.m9yAȫȺǹ_@p(4F"TGgjU)ֺ=d$ʕ 4P e+p>"92u.zT rBP & #LG&[ OdZNJXA!,**:$9:*7($2>=3#975Ge)R!j!t3i4x(H$2H$;W3>H<2x] q>G=Ey9FK1SuMF?L)L>-l l.P8u^HGG6_H PG8XP5vBpS.{d9JHJMIXGPPUHJRMRSQHPPPMIdMIvQNhSWhPXuVjtfKNcNQe_Oh\ZuJLqNQvQNwWS`PapVdnh[vcIxf\gegffukwq{jkpmprqiuuu;O i'X1g5rKJH^TWCkXh]h_pTrBrdk`nhshztvv{h|,+4%>(ADW|vYj|viajxxrvwxqx|VZ.cj3u4]TkDh[z[mCl]wD{Uqgxtxe{qyBA>B?\_^aceLCVM_V`X`c\xevuVktkxgzqޟ"ߠ#)ܪOݬUèuS.0ĈȖ—ǠǸŎɬҶĹƺƹيߏސŲŸۻźŻի׫ظֽĝĥŸƫǹ H߾~*\ȐaHŋ3jȱǏ CIɓ(S\ɲ˗()ʔhƙ8+"O)ev,ѣH*]ʴӧPf|4~ңGS9VL2Okυ!CF5{J˷߿ ,حa+^עu&QT$IjVPR5Oq?mjʜAL52p۸sͻ߷xS5X̧%I۸yEniT۾ѓsKq.F7]͆$XbHa+ *e=jƆ=($(T8=/=œ= - u/pr;g#-Hw ;'4L?#\v)aLrLa)GF{矀/XvP>@/3DvSOl:Oj C􃡽 lS*무 `$i %栜'egjت$X*-; z$ [Pw=w?r>8Ԡ!i躛mJ9.n F.>)y#=.WDw  l (\0,+H%R#‚fadqhDx%c` =pVЃ %>|2ÐC=88<pxnnkŐüWg-ܢu~,ÃvuBt- q XЯ%S> 8@G;D6epˠ+]W!bX?W) \ѯmiycQ v},pAaz>anXHa ]kh#3 3![tp88<<:QY0' 6 XqS s'鎈, S{}d+0=$(=;T'9.bO>QE gpIbEN#$bD p&N*qn0O1iPH'ǰ1 vY`xm &X $#{W|ttݮw?XcಥOU&D f>k#+`=Y oZ8JW|HGd&S˨c1D y,YMk^ uLfOBO5؇>-u9 ?VJ`v =B2ժX*W oyGUbH)UEm0oVTCDE먈-Z>ƺt߀#oñ0E9RQRa60AZlfZzX,zĞЃn1lD[V1]>xC#b2F.t]:L7-},cow7=|[7?n|WLN+ k, ΰ7/v_w-}{D*ql=L8αw@n?,b˸#~WL%;%L*[Xβ; `0[N6m6~Lg$cxγ>πMBЈNF;ѐ'MJ[Ҙδ7gӠ9MRԨNWVհ5=-Zָεw^vi]P Nf;ل&vG j[ζmiO{8%10w5FfMzޔvYp`A ZFpz(F'_7s\߶^=X )}@s_sNCxaꔯ\>_t{HO:A.jFG*^:<3֍8S/9W4 =vp5Ӎ bg(lcSn[x@x?h=yn;x0b<^8;of#}2  @CP=QsB7 ΁}^(G+/p11O~nU|}( %;l3a j  D`p(7 P `yr(]!`{\g# ݰ )w !(o`D˷g[  ׀$(yVFrx h h t xփ?hy~#Մx&4 TȄNhÇzx{l؆&Ԗggb0|g0 Ѕ+8xqg7vi8mqV'ge){7q{6r .XhW}x戠$'`hvօƋyFhv)gXn8h@ Q |*g`qȂYǁ~0zPpx FqRh~&`@eHgȎuX|~F8|g0|g`Ը,֨h (s7w *y%r_X 8rzCW@)g p:xs#Ȏ ݀:ɓX&ٕ8}6r(dfI#Ygג|ٗpvs!0NI5~m ?g5gL9gؔy@gm7p'x YhKg hYgyjɕ%ى=ș! 'r vd .7PEJ`ɝi`{`grVg `g 'hٝ q{D癞Pyg7  hI8ׅס `9܀94jm̉hO 'p@ypD)_gH xxhF AZgzgK GzFTGzDRxפGx` svs`{(pCzN ryuEq`p`uGF$)5l7jhhhz&-@{JtJhzz 2ת{{6~YȚFv }ج:Ƭzؚjڭ}ɭ:Zq'暮꺮6onlh;9mtiCwjEg K֯vu)g+jWwww{7{L~g~}lrKs`py'|g| x[}sjzawy/[~J۲(135w` ۵^[h7Zcg8:r ah F ȕlA8E(÷~Hgd )xk۶Nk98+'tkVׅ[z6suxiq|:x&k}{zX ;ɛgkP纪+7`5ȑ{Kۛz(9~6 q[a8CyD\gȔkʛK˻ : ګggYGzv)h b|F ې^YsXٖj);g g| Rp  ɛw,}vי* * YK+i9I(`;'x:\yVpysОgXyPCiĹKY:G*p&j{/o)ku|yܚ"iƞ|"f'{RJTZ{Z kJmjgD7j~s <̑Yz|D>'y/>Wi7y.ݹYevINf9X,|Rjk*ͨI9Uν\9@lZ|N1 z.Zxg`l9u ~k:u n\÷ @v:ܺgٛDŽS0PǭxÏ\g,ș^lDy[:<<˙XmJ|޾gzόʙ`yWzw{̬{?ɾlꦿ,|Dtﶜ\Fg,hJgh]ωzg&OU?Ĩi7j9l M>jĐ&DiFlLj3POT/S_XW\[`_oh;fO̺ } @ VFHB @}to~ 0 |o0 :I }Hg_jv:_hO~fl=Fr{DGTphy6qp0Yлz搃/yyp > 7 5Ӭz&S tѣ@ <0X5VBEEkD1Ȓ P N%G7s8J.andSQNZUYnWaŎ%[6iծMQGb~}BU 善ѩΥ(C;Dt# rF%C ^PϺauWi .guo'^-[n6: om#mGn;:tG?;6 M *U|??v >+nAtA#pBގCn-ch% eˮ0n)Z⦜BQGQPV(z+&9v"<zcDq"K0sL24! /lK"ZpA*n*[N.YP톞ri('&mOF I#Kt3;SPC4"\nUbHO(J TP[-1bVXbyS3EueyjvTpw\rͪ O=ZH.c>F)=$$ )Elx ?٭Q U{˘-IHx-+E665ecy/MN4lЇ̢d癥f`9v^JۗZ!cb(gL~Wk WD/:fn|z)bb@*-{j+ `PI H&oj#-uԻQtc}vu3]-2 qt}#k~x7<~yw <z꫷zє{AO7|??}w}M`P~b* -^A :k)ǥ(mdQEb0) HbA|$(XBx,^BZhP&&BPE1C$bw5&.MSnB dAP:c? eO f=))Mlr.%ILfXL-%x9".HkmЌfrI9Vנ&$ExOTfLabbC 8)8'DٓԴ.|HC6,@D xbrjQTfUb)Ac…LeSu-t"a>qzGq R7d$iIg )=15m9׭&Vyp/4Yk8rO\5@ JSZHTKTEEaZlmm[|?HrH'=->^!5b ʚh]6.Vԧa'n{^2( J;štP nsck5(C+nwb4Fy꫽HfX q=8#&oGj Q@ bH"1ƨ`*bcZ`< cY[cU(@1DlH2Vl;gf6$[rWXJ#+J@p9 *y;E+h\9VrJ0pf{3Wו%Wt }" hDGZ3S-}zVӛ44iP}uM=RZի^^YjXn(TSW *QJjUxZ)ԈDA* J [86 } Rd5]mZD1EEn$S]q)XԢFê{XmS77Ƒ4HLE/@$&]ҦI57+J#xKE%ZN>Gg?\LJ=.K8ig$( E;b A_8T<toOPbdGJ)փ"o5-viys/K3pL(V1Ł Т"=:4(L}7#E+cyli4if mGH{ns7M+L9|I"\@7rL}SB>=ճ50Ԝc4/^^sZ= HL[/ }!ٔtb1b1.ɫ+zZXa+,E? ?,3#c??Ø??,Ӯs#*-{֒zjB'@!@zh|???ʳ)DB֣#/*.Jcy./$oJ?hH()k !û9K99"&$A#xHQr,A$DC\XHCښSkD;<'#0(EQ?9lEJ=X&+b&;ăA!EA2zb Y| #32";da1l$C2W Ǻ)?9H Hprs =w| ќ5k|{GR+4H >,M( ĤʖxO$Is  (cP4r f"4O@ir&hЏ:0:Fn<-KYx P1-8|3Je @R e"!"5R>JdZR`LxR+RarHX 01;Ӧ(û(@x1>O_zюmATHEepGԃ'@}#xxËB9 US0B: H?"T% N ; Ā@пcM͢x dо0ՠPkI}:ʋhE\WФ+l֥sVcV T?nDvՋwruWid1lޛq50ϘF]85 X2O؃XukعpH>̘탿"鈇XXЃK){Y-˽4Y$X$`F  -ɖUYrn X%CZڳZk$yp [$* YZ۶HC&Z8R\rFt?Qn)C!ٍ0 ZҕN .LMg\F'r'KЍE1ވ<2]hQ #9°]9^쭊-^E^&l?'\^m 5 %+^^=H1ɚ,j1) >_܍~WPuxr߅j]ٵDjA:aZ(ML~; ^շ5 "c^{:ߦha^6N( $ǙE DB܈YQ (bhYyH}c !T/s/#2=66ZW}Z% cdiY\H&b26eI&J>LvbMfNb-6eSDz/HeEP=9A 99f}Q |gi/B~fg_v9 p bf[g{ 9{}q Қv #%zEވnfy%>Ogf6s?O@Ї.DQDF+f撆hEehlfŜh}YiGe & ƖF]ZcQƨB!zhAi8 ҈2\N 6=1HOKjn@keGiRnx^"Am +,N)EI ŭMऱl͖il&ў jmxlJɮ9f.ͮ Nfkcӟ֊t238Ѐؙ Xtn6䎊~ɧ1#Ù .F5=jj&ƯF&ps;a¼; Y>:1A?t:,FDotC0,G{tL&KLrOupssQ/>uSOuAuUoIsWQuYuau[u"u]uu{0 BH۪==`xڽxq[͎BrY@ew~![y~>cF}}/$\}I g*vsj jЭ 0aw*&@n(H BP>,i@zgAz2en4q`Y=);Fn@̙-O3ɛ&OFڨ*M 2M8v!=?{Ueҭk.޼z/.l3VWҰ&rVǂPO2Z2De*UsH-BlrD<+Q3Ce3Z.'ޟq \撧{oDdmܹ<3ZE:ӯo>O_=s{e@x~8+`z78K>93xk9{yf:饛~:cXꭻ:#:~;,A 1s V/|] dMw-6Ja dJ_7ʹ#0ARGiQFdlY?DG 0VGFAZ1 C0R(`  L{λL99UY<_$C#Cb܍;}@D[bIf d=lٿ#Z &ùǢP  9 ]މw2 Zь@7glVk,dYl5JGYҤ -LkǜFOjiN:PkVU (8/# X,M%fHl|.(Sp+F]@m4xZId(iZeG%qvYl>vs#D|SdL?-Z(P vM !.YwCF ͼ}n!XyJH~q?VN "4t +!ya ݒOB>ZG<͉gD; pֱCo h_UcЄ9^MrwpWJw=!Q@t+ʬG4_L>p:x9qˀqo~wGE#ɣ3עy_GsJ/%ŐZDeb=GBjT,??}ʂ|,/W~Mif'"(@I`REp}By.ه?I8} IHeݑ_ّmL݌`хFqAAH @J\NЃ ɟ4 x!D]ʢJCʨ = J񅂜 K`\\an &JaC9eɈ Sɮ"LAvDrIڳj!r0p a' Ҡs%00Eo݅~(^Teh(ĦIPdr[oȄѨ[py(}V9.izE2N)ynRQ R)viOj~,*B*VaHjZnj_`jdp**]xRjB*u'҉=CުZD*B꫒1ů+6j6+.:)Ni^inri~.ihhhZh! ,%2=h1ZK H4.`0(J&p[LV2A["d'PPP5oH^m9s8yB}LxUyBsxȯǯǼU "g&I:["Ӝr2631n(J X6i*CJ \8Ɔpċ.*8!! ,4%4==%$2?>3>$2HFPG={APPPXjqkek|kkqqkrxƂ”ŞŢĮN "f&I:'p,KR AR`#HJ.HiϨr*`4&ǃPXKu! ,<%4==%$2?>3>$2HFPG={APPPXjqkek|kkqqkrxƂ”ŞŢĮN "f&I:'p,KR AR`#HJ.HiϨr*`4&ǃPXKu!,D%o܁K&,ry8y[I]T! ,**:5=$2?7(343Gf)R1u$@2Z$2H$;W3>H<2x] q>G=Ey8FK1SuMF?L)L>-l l.P8u^HPI7vBpS.{d9JHJMI[GPPRGHTMSSRHRPRLHeKErRNfSMyUVgQYsVjtbIMdMRe_OgUXuGKtOS{POwVVaQbvZjwfYgegggukwq{jjtkrsqjvtv;O i'X1g5rGFH^QKVVCkXh]f_pTsBrcibjishxtuw{k},+4%>(AEX|vYj{uiajrwruxxqw{ˆVZ.cj3u4ZUkDg\y[mCl]wD|Ui`rgmawf|xyBA?^abdC@LCVM_V`Xdf\uevuVjvkxsgwqߠ#$)ݬTèuSZ.0šǬи°рǍ̮øշƯӺƸԾۋݎŲŸڻźùڮ⒕㷼ٿĝĥŸƮŶҶ H*\ȰÇ#JHŋ3jȱǏ CIɓ(S\ɲ˗0cʜIsc~.󑃴h$rD]PJ01]իXjʵט7ò,Q#G1T.PLu(P)6 0axC PN~h Əb f0oM 8Og`, ! ǩp)ǙRGУ7ϸ}D[(SLF`T5o˟O/^&?r7*,<5\? K/LvO}(;x<ᄺԠ6p8a/9 hA0  <@ާ=_AC&I#5#(y)BxqޗbxAIh7c Ux$?|X c'?TGqB"b/?9P!}nZ3cna"jB_~I(MVa)ʯWRʐ I1eh.Ħ)K}( VO7X.US Bp&ozMd[n?[g?qJ 롛/(MN9<ȳ^(G khnQ9p,7<:pf,gIZoLՓ,pPWW8E/I t2Y|HÐ{%"V4PT%Yk-D3>9)*yI{hBhؠ-cHSQA"NLBPVTT<5l;E=/~)=hHGN\20@H`y|ciݰ  ԣXZ=mlj i hN%+UVIC+0{7D&`e_jLӳMz6m$H63vc(1QMP 8}8(=D0< ?xHUZgf`0α'M5π3' g‡'MJ[Ҙδ7i@QfRԨNWVհgMZָεw^MbN?f;ɎMj[ζn{~MrNv[MzηX[N7l MqL<x+GN`/\޹^@+0p>`=;n\9KNkHOғ~qz j0>Z\:<]ձ~FؗN۝Mv́/ge-s/|~_#d7#kwϼ7 ^H;EQ oj̗: A@C&d@:<;7c80=ft^;!#\0&_9:o?/w{ P PjNp|3p {؁yvj\$Hg ߀װ Xj; X'Dh!@oȅ;؃f0 ExfxЅ_B p 'Y~聖xk p6\pzVz̐>XsPjG'^sNJ8guxs@jPqup Gv`ɘQXvpF押hvVLhjȋ؏pk O06gjpx>z騏uIx 27v s y gxjF(АGvhjYސPxz@`ujX~+Yj~/FYjIXVɏyk:x b #@bhxIVGUG ЋWNj]Y 0 >cYgYД`Aɂ4i8 cIua=ljy)ِMPySYWyفY9yF2sxVwiljdG}D lhHޠ蒷ix07t}sИk)x IۉXٞtikk@uU7 '`1ʐ@ Jihux@@j:h 04ȟY:j~<@y@#ڟjdׂp0K7ZyC'=p X `Xv0i/ y wzGl @{( ؑ|fsЗkA!i'|qAט]]W/p*tzƧ s0sاxJ)FXZ:Zo\Zm@wkTj૱fk&&qvZj kҊjZZ:vʁy꺮fy ` Z슯[{G ۰!;rqoFkر$[w&w"+&2o(۲Xm9k3@ky(zgzV~7sg|'U 7 L[Ƿ}H 66jgj*}״i(pjJkHic~@ ;6!hj#X'F`hhGȈje>@˄nﷆHHSX+GȹexXwy)v(9tHTPd0sмӷ d[>{j#kK{ 7{9vK opE)5Kyj9jʩ`\ [ʖ-wx ԗkj0ۿXApy;P5\|\lxj4'3 Pj̙j:F9JP.A W پQ\G΋3Л-)V |ol;e lǣsƊlb\j+-zd *ȣl/p(*5I9y 1R Oٖﰡ\6̤| ʖ\8|,>ɝŠȄˉvx~k ̐:Aw$|Zw|}͇w,̱zj}A֜s\<_pj[hyۻo-K^0.ny,]x)<4IjA|j ډ9;~y'9( /L<{Eo q̽)]]|Ol͛ă9=ikNY6O)f{k)^}r.b畷 WNxщl slƗjy{Džlprܻu贎np? VZ\4jʲLʩ4K˫lʠN˜ɗ<ʅʧ\Nnt}w 6ͬ88,, | gAJ͖A͒:uˆͯ&m(Ș"-0*P]k: mmy*'9z yOn+Tom?]迆Zol\_o9]b_mO=fejOinmrq?vuOk]}|oz0Ѫ v֬VܮȪ w p Oh c @ VK/G}FnFz2jrvjB8_A@𺷔$s_G}vj˰$,yRئf6ob-#޹c(HpX㠌wPfc; 9C sEcqFkIz W$(3IƙBo@zZG`w.9+< 5](HF;,@1!z2CLsO>ωp̱=6N#;Y/5&_ ?x0>R.-kf=rjVk?S9OCtVZkV\Ut=B5@[!"+"׉.>QՈLP!'lLH,UsE7?ۂu^zwlGRH@u' YS@>)P,u +.pBRkP3`SPn8*8.wMT3"5S^?|zh6I_|> (ؘJa꘷,-Bg27F( ͶT~'Zn`|p iFҫ PbU@ ' (E9?K7|u[w|7[G}w<ߗ~)~,!~P. _!$ X+R ~o:A7\CڀDV°0,pųV0hhE*l.ĘDfXJBPK~"SH]<1)ĊX\@ė⨣)7aa7 B($hM6O92)E_1Q|pAt#Ix;up!@$% JvD XuL@%d' @Mi**eHJ!HAj9Sa $`,27BSQ\%)'n`J8)Mj#fC2>~,'Z"i_RƝNJN SWGd"iRdDzG6i:p_~ GkKrsC:QLu" 'k ?]R@AR͂r;֜_jhC5Y\ ) IBJiҡP:+b*L=3[`@E1tZ;5C% ,\’a~aSb&4-fl>6X vjXȺ BH`І.z,Zߑ)r"-R:%DoFXlo}$+ֳ Yq ̀jU-vkKE]JkX"cF@x}һeo{c aNl,# 3U#0BՍt0sd6g,c˄z*άfF,Aʾ^&Ŕ]Xۚe)MQ$l!`pPsb͵1E~(Yԩސ[7m fN)nMxx (qH7.$uHFWSP` 3gl- NQbh@'ZFG$ҋtkhKgZ=iuԣ&D]jTyVu]:VZֳ.Z/Cr@JE@R)u E20lQ!Bf(4,v Kmr3jnV8hl3˦b3l ;7#vLuFyĕSCǒyGa:I ,GX+H$ȃLHƅlHLÇHHt 3SqȎPɁ!L:Kɓltd ԼddȐῘۈ 4 >Ѹஸ bXJHvCLJǰʕJ 46L(ː8hPKc fp,pK ,!0,ۈ-ʢmtlɎHcL6KdüJ눽ȍTCL(̍R М| ̛Bt(̉$ʓPcDMҔ K /䈦{w:bxs焺oB[:llNOˉͤDTl[fR'1Pq:T$O ii$< i: #O!6Q{L VpNgKZĚ8ѦxPQH,MgO UѣsQ ORPL $=2~ ./R ļ8Stwx*CUlIT1hӛF}Î`P%1 uxуԸ(9ddJb @pPEݬ@_TFi6{``V v  N$_.A᨝Ǎ\P7^Q 5-8db%ܓ8b"ߍX3 ♊d_E*`⽛tb b,ޠ]Z؝b)W8b#7N89`N<c0VC&jLOD/QཹDML0@rIIHp1`QSnkxXƼeUMf @ֿef aO1e毝Y@j (f^3 iv;PqeX)QN!a^bKu6e}t~Fd% ,gTe|fLnNȍ1!3"NϘ=:**{Ac3#Mi<<:plixiYՀ>)1Ns6Z$iUR\6"t4%3GA^VW,uiJ~~ŠiikjFi.=6ksEfQk>^kE^FH3oϞ I>핰l5 n8ș;FڲKfept^7UmV=S~nhŶ9&랈ۖ^1sx )@oPo< pL D0-qap7ZpOpq/qOqoqqo/RqE}q3R+rd"Or* Sr'-a'r m*`E-~Tm.-s3$23_%Jsds8s:9s<;s>w=s@?tB/tDCOtFEotHGG ɚttHOl " opwTGS'Wo tJHZX"%wuǸvXMZwI_$t l^gǻUhj_DcG1DNdΎ@i@ڈE'`hPj m !fHi|PRxa#X|OZX Lx+GQҢOj wf x'mo.R0<ѫ]qUM |[<xTR 5ZG Xy"i%]z%a~%v0_ $uP O)RO}dr3Rt^E5)Z(`AV%3@sM[m(Ms&JUj.`RT$Q&BqУ̉y,*,ɒYfA5{ ~z$t{ s[mbFlMn/+سh貊A>w_;0K<1]\fPL2a[%|2),f21<353v163=38g4E}4I$J;4QK0ӗM}5Yk5|UG*@aݘgw؁)0/ƶ&{ɀYPC Ӎv݉ @X\?qPMއ]+g\ʐ@5*y%ZbBp8[~ y.a+^2}u3p2"VbWNS0-a+O|E\2$5d9Sx29?^U=~/6Ll6!aǘDa[B_ ܁ =Iup@ @E3rgf4 d_0 831 &8Ax@ħBT `N9j;(tVA&:=H@j[0$F6 F`:эxAA,#&E֥# OyE[hz '=)5쒣~PFJ RģHpx5zG. 5RdIb̃$8%+ GXiDuB%G@ӍF(Ri3i"S&H&t:yNSԡx | \hhCgbb#@ +0DCʼnVJJ.I~2+nIюƤ!Iғ 4G-Qr‘j`O0ex& 46 75IFB fTTN* eZ3qX|!艶Xz&hL›iIPL'i0XJMq*QQaR SA)O9َzĮfm^ O:)i)+b'%>)--E*"K @"$9ĹvH!U!0,`K|ʰ,k_ϻ@r]_K4-h^ vunj9MirR;pJ_AIu|-,Ѽ#D<WhBoZHG޸ `^vFΫa_#7^2ahL'-1:zy{C>p_d*CdvjqtpG7_*P#̵yrifd"0A&Ν 0Ui\PJ5xFa~JWž 21Թq(t!;W&vp)|& ٮ9]!Bʽu,->5%A$66NJ]`rN˱;*e"m`uf.0/ [ȒS[b7%j(e ZQa Cߗn6b$N:4+{E#DX=m ws`BPkZ(kqx wc̲p䆈DekiF+8ЫN[xQ /\AZ>ozjws6b!&dFd^Me^&ffa8fvg~&@r&h&iՈijfϠ&k<F\*Ȧn&oqB@^o'q'WV&A\ s>'t.@Du^'v. m\f'x'qF'zpY@`^u|gj $'~gg|@y~2Bt'c .@2NhְgP(fָv6v~p(((h^HA(vC((hM\@ )a6~J\@NtJ<*%P :'$(AO$PolixBiH_  IHLC).u1B 4ؗ|D.R/*]42B1CAȄD.@FXjsfTE@+o:jr-\%T`>\VR  ¦Z@ T'<;PBGB-.T뵮k}(a٩ ekFi++h)gxFKGM ګKMf&u ~af^ !4Öd)٠b 3#R1s0z3#R1s0zHF?d'PP=v@ ]m,}UyBsåsȡȫȡǽǷĮĵǼT bg&I:'`$*l WP=^*u &b(> 8?/.|l2g8]%}.N!! ,=>>2@IZn!t<3>Hp6'c@owwlZZs*y7lD~K\sŨȽĴǼb@p(,F"TGgZU@cyR dDF(86%ͥr )\ {M $ Q%I%! mF#B SPVJKvNXA! ,%o܁K&,ry8y[I]T!,%42?3%>3I"R!t0z<P?2v@PPP;XjQqwkxa.m9yAȫȺǹ_@p(4F"TGgjU)ֺ=d$ʕ 4P e+p>"92u.zT rBP & #LG&[ OdZNJXA!,=>>2@IZn!t<3>Hp6'c@owwlZZs*y7lD~K\sŨȽĴǼb@p(,F"TGgZU@cyR dDF(86%ͥr )\ {M $ Q%I%! mF#B SPVJKvNXA! ,%o܁K&,ry8y[I]T! ,42>3@R!m1ss&]?jIzQ``IRg-KShaamxƐȡȬöǻǷǻĦǩųl@p(lF"TGgڒU)֊E0-LBZ%J@$@+ %WTB -), PB"-SB-L* H,-OT (KZNXA! ,423%@"Z"gHv@{ZPPPPWrN&V@ulrZaa}UummxȜȳǻưǷĺǹa@p(,F"TGgZU)֊ ƑJDJ @at>J!$z"XtBX% %[GdPC SZeN[LA!,4I1m"PPP5oH^m9s8yB}LxUyBsxȯǯǼS f&I:[› еpA"_gPD C! `l" #dLc(/O4!! , 22HO4v@5i@owqZrCåsdzķĹD d&I:[’ е{I$3 (y**ɾX-muVٵSݨ! ,%o܁K&,ry8y[I]T!,=33##HK H4.`0(J&p[LV2A[3#R1s0z>2@IZn!t<3>Hp6'c@owwlZZs*y7lD~K\sŨȽĴǼb@p(,F"TGgZU@cyR dDF(86%ͥr )\ {M $ Q%I%! mF#B SPVJKvNXA! ,\2=%=Y4W~_Q0kkq&]@ullr€RRqjéxǽĞDzM "f&I:[ؘ` 2vH"_XBHTDjtGـ550L.@=-W.s]s<-!,d@Ia1g1m0z >{f"B!t& &uGeP& SP&JX T\ZTA! ,l%$2=3%@1Z!m>GGOO&GGGPWfQpxeex&]5i|vY`xRa:g,g,l^~Abztźǽżb@p(DF"TGgU)ֺ5'`;Au#Tf[A]KE+8|H('[ B(X%& !(X%GcTC SP\ZN[PA!,x(%4#72?$2==?6%>3$2?93#>96@IWh#H"T2H1Z!l!t1g1mH$1y3GG3FQ%Fm4W}FOWF?G%M4^'W4G>"^?!P?2j p g's(s6X>sPG=[P2vA{Z{d:GGGPGGZULPPPPOlPWfR[rSfxQpxe__wdJqk^kekhjskwq|kkwtfvtt;HV ] i&[&]4]'c?j5i5l?i5o6uH^TgSs@o@u@u@zIzIzQkqvtqq  |vYjyrdl``glllwvxrrxĀIVVZ.aaa-e:i,m9s+s8s*x7lDl^r]}]xUrCxMsCyBzLzUqgzB\bo{tuKSZhhzgtmsåmås©xĕȔȜțȠšȫŪȺûǬƴǼñĶĴǻƽķǾżĞĦijźH*\ȰÇ#JHŋ3jȱǏ CIɓ(S\ɲ˗$W:ܣWׄZ:_ xw``ɕ~?d@]^m=ZsB@B/no땷 ]>t-,㏇@ Q.(=3BbP_׸|*os{'B:`BbՁlgTO+W@" Tu%9XL"lTTr T8P]U]M5h#x Aiݎ=89)36hX@%aO:e"A; 5DLXd$R"ĠJHD d9bW)O ?S䀘dVVe~cg8J TA&qzQ+B>2@IZn!t<3>Hp6'c@owwlZZs*y7lD~K\sŨȽĴǼb@p(,F"TGgZU@cyR dDF(86%ͥr )\ {M $ Q%I%! mF#B SPVJKvNXA!,%$2?>3#R1s0z>2@IZn!t<3>Hp6'c@owwlZZs*y7lD~K\sŨȽĴǼb@p(,F"TGgZU@cyR dDF(86%ͥr )\ {M $ Q%I%! mF#B SPVJKvNXA!,4%4I!m1g1s<|>GGG>"{AE5c5iXd@uw{Rg:m9yByBoagŔȨȶǽc@p($F"TGgJU)ֺd6=. )ZX $B sT $"$[!FPC TJn{D[ZPA! ,<%4==%$2?>3>$2HFPG={APPPXjqkek|kkqqkrxƂ”ŞŢĮN "f&I:'p,KR AR`#HJ.HiϨr*`4&ǃPXKu!,D%o܁K&,ry8y[I]T! ,L%@jQf{s80)RWJppFkca^"!,T$@1s0z3>Hd'PP=v@ ]m,}UyBsåsȡȫȡǽǷĮĵǼT f&I:'P*l 05"`$̃A4} a\+ݯM6dmQ4]%}.M!! ,\%$2?>3#R1s0z3I"R!t0z<P?2v@PPP;XjQqwkxa.m9yAȫȺǹ_@p(4F"TGgjU)ֺ=d$ʕ 4P e+p>"92u.zT rBP & #LG&[ OdZNJXA! ,l%$@R!t1s0zGG3FQG>2PG1{A5mXj@owRy7s8yByBZoașȫȽc@p(F"TGM !LUL*[ cGd<"Hb1{wmP"e[!y{U"!"a jaB OUNENJ[A!,t%$2?>3#R1s0zGGOO&GGGPWfQpxeex&]5i|vY`xRa:g,g,l^~Abztźǽż`@p(<F"TGgzU)ֺ-|`+9qfK9Y`WL[ B'X$% 'X$GczB SP\N[ZJXA! ,%4I!m1g1s<|>GGG>"{AE5c5iXd@uw{Rg:m9yByBoagŔȨȶǽc@p($F"TGgJU)ֺd6=. )ZX $B sT $"$[!FPC TJn{D[ZPA! ,%4==%$2?>3>$2HFPG={APPPXjqkek|kkqqkrxƂ”ŞŢĮN "f&I:'p,KR AR`#HJ.HiϨr*`4&ǃPXKu!,%o܁K&,ry8y[I]T!,4$3%=%$2?3>>I2H3>HG>"xĿmsåsŪsȡȣJ d&I:(@Bp @O 1 i" LEJ \^+7`Yoi:va!! ,%$23%@1Z!m>GGOO&GGGPWfQpxeex&]5i|vY`xRa:g,g,l^~Abztźǽż`@p(<F"TGgzU)ֺ-|`+9qfK9Y`WL[ B'X$% 'X$GczB SP\N[ZJXA! ,%$2?>3#R1s0z3>$2HFPG={APPPXjqkek|kkqqkrxƂ”ŞŢĮN "f&I:'p,KR AR`#HJ.HiϨr*`4&ǃPXKu! ,%$2?>3#R1s0z>2@IZn!t<3>Hp6'c@owwlZZs*y7lD~K\sŨȽĴǼb@p(,F"TGgZU@cyR dDF(86%ͥr )\ {M $ Q%I%! mF#B SPVJKvNXA!,%o܁K&,ry8y[I]T!,2=j p &V5o6u@o@ugrr®nŜȺŞƢǼP e&I:[— еx1ɥK\#CX@AiVJQ!-*ooYf xw; ׳B! ,%42?==$3%>3"R!t=I>1y><~FP?2v@PPP;XjQqwkxa.m9yAȫȺǹ`@p(LF"TGgU)ֺEp˕ژ:% D*T>@{T sBP )&LG!)[OT\ZNTA!,4$2Iah1m1sE~Ov@5i@o`rZa-s+~7K[gtȡȭijǻìǷĵƺ^@p(F"TGg:U)֊=l.†(}$g%dBJ&:#*D+{L"#t|# X~ #[Zu|MGA! , %$2>>2@IZ"aFOd'j(v@N&]5iHjQzlrzĎa}\~AamƠȥȨȡǾǻĩDzǺi@p(<F"TG'Mz>+ pNbU8ekԀC@Kq!{jw% |M'Q}B'" TqB'$ dD NJ\A!,%$@a"g!mFd'p6V5c5iGFQx}€Im9m9S[hì~ȝȽĽǷǾǵǹ[@p(F"TGg*U)֊]l$Ƃ-p.B}(U(LGh< "WTBFPBwSB L\ZN[TA! ,%42?3%>3I"R!t0z<P?2v@PPP;XjQqwkxa.m9yAȫȺǹ_@p(4F"TGgjU)ֺ=d$ʕ 4P e+p>"92u.zT rBP & #LG&[ OdZNJXA! ,$%4==%$2?>3>$2HFPG={APPPXjqkek|kkqqkrxƂ”ŞŢĮN "f&I:'p,KR AR`#HJ.HiϨr*`4&ǃPXKu!,,4I1m"PPP5oH^m9s8yB}LxUyBsxȯǯǼR f&I:[š е`="gLDM L' B \ (-P@cG(H ^4^^w4!!,4%$2?>3#R1s0zK H4.`0(J&p[LV2A[Hv@{ZPPPPWrN&V@ulrZaa}UummxȜȳǻưǷĺǹ`@p($F"TGgJU)ֺ<ĕ 45|0Bɂu&AT'E!X sBX$ $[GcPC SZdN]TA!,d2=j p &V5o6u@oHo@uPogrr®nŜȺŞƢǼP bf&I:[™ еxQJSd"C`̀a%.%ö 0f@xw; ׳B!,l=F*o܁K&:,ry RA :,ʴ&OxÕ݊)! ,t%$23%@1Z!m>GGOO&GGGPWfQpxeex&]5i|vY`xRa:g,g,l^~Abztźǽż`@p(<F"TGgzU)ֺ-|`+9qfK9Y`WL[ B'X$% 'X$GczB SP\N[ZJXA! ,|%42?3%>3I"R!t0z<P?2v@PPP;XjQqwkxa.m9yAȫȺǹ_@p(4F"TGgjU)ֺ=d$ʕ 4P e+p>"92u.zT rBP & #LG&[ OdZNJXA!,2=j p &V5o6u@o@ugrr®nŜȺŞƢǼP e&I:[— еx1ɥK\#CX@AiVJQ!-*ooYf xw; ׳B! ,@Ia1g1m0z1yG4G2yPPPP^rEa-g:m9s+xMyBKSihséxȠŤȯǼİǾe@p(DF"TGgU)֊-6!Ir*H("H%aq(d!|ToB#uh (vGeP( SP(JXT\ZTA!,%4==%$2?>3>$2HFPG={APPPXjqkek|kkqqkrxƂ”ŞŢĮP "f&I:'p,KR AR`#HJ.HihDmW 0A (,EՍ ! ,%$2?>3#R1s0zGG3FQFG>2PG1{A5mXj@owRy7s8yByBZoașȫȽe@p(F"TGM LuL,[ „ gd>Xb3B{mP#e["y{U #"#a!j[ B OUNaNJ[A!,%42?3%>3I"R!t0z<P?2v@PPP;XjQqwkxa.m9yAȫȺǹ_@p(4F"TGgjU)ֺ=d$ʕ 4P e+p>"92u.zT rBP & #LG&[ OdZNJXA! ,=>>2@IZn!t<3>Hp6'c@owwlZZs*y7lD~K\sŨȽĴǼb@p(,F"TGgZU@cyR dDF(86%ͥr )\ {M $ Q%I%! mF#B SPVJKvNXA!,%42?3%>3I"R!t0z<P?2v@PPP;XjQqwkxa.m9yAȫȺǹ_@p(4F"TGgjU)ֺ=d$ʕ 4P e+p>"92u.zT rBP & #LG&[ OdZNJXA!,4$3%=%$2?3>>I2H3>HG>"xĿmsåsŪsȡȣJ d&I:(@Bp @O 1 i" LEJ \^+7`Yoi:va!! ,%o܁K&,ry8y[I]T! ,%$23%@1Z!m>GGOO&GGGPWfQpxeex&]5i|vY`xRa:g,g,l^~Abztźǽż`@p(<F"TGgzU)ֺ-|`+9qfK9Y`WL[ B'X$% 'X$GczB SP\N[ZJXA! ,%42?3%>3I"R!t0z<P?2v@PPP;XjQqwkxa.m9yAȫȺǹ_@p(4F"TGgjU)ֺ=d$ʕ 4P e+p>"92u.zT rBP & #LG&[ OdZNJXA!,2=j p &V5o6u@o@ugrr®nŜȺŞƢǼP e&I:[— еx1ɥK\#CX@AiVJQ!-*ooYf xw; ׳B! ,@Ia1g1m0z1yG4G2yPPPP^rEa-g:m9s+xMyBKSihséxȠŤȯǼİǾe@p(DF"TGgU)֊-6!Ir*H("H%aq(d!|ToB#uh (vGeP( SP(JXT\ZTA! ,%4==%$2?>3>$2HFPG={APPPXjqkek|kkqqkrxƂ”ŞŢĮP "f&I:'p,KR AR`#HJ.HihDmW 0A (,EՍ !,%$2?>3#R1s0zGG3FQFG>2PG1{A5mXj@owRy7s8yByBZoașȫȽe@p(F"TGM LuL,[ „ gd>Xb3B{mP#e["y{U #"#a!j[ B OUNaNJ[A! ,%42?3%>3I"R!t0z<P?2v@PPP;XjQqwkxa.m9yAȫȺǹ_@p(4F"TGgjU)ֺ=d$ʕ 4P e+p>"92u.zT rBP & #LG&[ OdZNJXA! ,$=>>2@IZn!t<3>Hp6'c@owwlZZs*y7lD~K\sŨȽĴǼb@p(,F"TGgZU@cyR dDF(86%ͥr )\ {M $ Q%I%! mF#B SPVJKvNXA!,,%42?3%>3I"R!t0z<P?2v@PPP;XjQqwkxa.m9yAȫȺǹ_@p(4F"TGgjU)ֺ=d$ʕ 4P e+p>"92u.zT rBP & #LG&[ OdZNJXA!,A**;$9;17($2><3#975Gf)Q!j!t3i4x*E$2H$H<2x] q>G=Ez8FK1SvMF?M)L>-l l-O8v^HGG6_H PG9XP4vBpR.{d9JHJMIXGPPTHJRMRTRHPPPMIdMIvPNiSWgPYtVjtfKNcNQe_Og][uJLqNQvQNwWS`PapVdnh[wdJxf\gegggukwq{jkpmpsqiuut;O i'Y1g5rJIH^TWCkXh]h_pSrBrdk`nishztuv{h|,+4%>(ADW|vYj{uh`jxxrvwxqx|VZ.ci3u4]TkDh[yZmCl]wE{Uqgxtxe{qyBA>B?\_^aceLCVM_V`X`c\xevuVktkxgzqޟ"ߠ#)ܪOݬUçuS.0ĈȖǠǹŎɬҶĹƺƹيߏސIJŸۻźŻի׫ظֽĝťŸƫǹ H߾~*\ȐaHŋ3jȱǏ CIɓ(S\ɲ˗()ʔhƙ8+"O)ev,ѣH*]ʴӧPf|4~ңGS9VL2Okυ!CF5{J˷߿ ,حa+^עu&QT$IjVPR5Oq?mjʜAL52p۸sͻ߷xS5X̧%I۸yEniT۾ѓsKq.F7]͆$XbHa+ *e=jƆ=($(T8=/=œ= - u/pr;g#-Hw ;'4L?#\v)aLrLa)GF{矀/XvP>@/3DvSOl:Oj C􃡽 lS*무 `$i %栜'egjت$X*-; z$ [Pw=w?r>8Ԡ!i躛mJ9.n F.>)y#=.WDw  l (\0,+H%R#‚fadqhDx%c` =pVЃ %>|2ÐC=88<pxnnkŐüWg-ܢu~,ÃvuBt- q XЯ%S> 8@G;D6epˠ+]W!bX?W) \ѯmiycQ v},pAaz>anXHa ]kh#3 3![tp88<<:QY0' 6 XqS s'鎈, S{}d+0=$(=;T'9.bO>QE gpIbEN#$bD p&N*qn0O1iPH'ǰ1 vY`xm &X $#{W|ttݮw?XcಥOU&D f>k#+`=Y oZ8JW|HGd&S˨c1D y,YMk^ uLfOBO5؇>-u9 ?VJ`v =B2ժX*W oyGUbH)UEm0oVTCDE먈-Z>ƺt߀#oñ0E9RQRa60AZlfZzX,zĞЃn1lD[V1]>xC#b2F.t]:L7-},cow7=|[7?n|WLN+ k, ΰ7/v_w-}{D*ql=L8αw@n?,b˸#~WL%;%L*[Xβ; `0[N6m6~Lg$cxγ>πMBЈNF;ѐ'MJ[Ҙδ7gӠ9MRԨNWVհ5=-Zָεw^vi]P Nf;ل&vG j[ζmiO{8%10w5FfMzޔvYp`A ZFpz(F'_7s\߶^=X )}@s_sNCxaꔯ\>_t{HO:A.jFG*^:<3֍8S/9W4 =vp5Ӎ bg(lcSn[x@x?h=yn;x0b<^8;of#}2  @CP=QsB7 ΁}^(G+/p11O~nU|}( %;l3a j  D`p(7 P `yr(]!`{\g# ݰ )w !(o`D˷g[  ׀$(yVFrx h h t xփ?hy~#Մx&4 TȄNhÇzx{l؆&Ԗggb0|g0 Ѕ+8xqg7vi8mqV'ge){7q{6r .XhW}x戠$'`hvօƋyFhv)gXn8h@ Q |*g`qȂYǁ~0zPpx FqRh~&`@eHgȎuX|~F8|g0|g`Ը,֨h (s7w *y%r_X 8rzCW@)g p:xs#Ȏ ݀:ɓX&ٕ8}6r(dfI#Ygג|ٗpvs!0NI5~m ?g5gL9gؔy@gm7p'x YhKg hYgyjɕ%ى=ș! 'r vd .7PEJ`ɝi`{`grVg `g 'hٝ q{D癞Pyg7  hI8ׅס `9܀94jm̉hO 'p@ypD)_gH xxhF AZgzgK GzFTGzDRxפGx` svs`{(pCzN ryuEq`p`uGF$)5l7jhhhz&-@{JtJhzz 2ת{{6~YȚFv }ج:Ƭzؚjڭ}ɭ:Zq'暮꺮6onlh;9mtiCwjEg K֯vu)g+jWwww{7{L~g~}lrKs`py'|g| x[}sjzawy/[~J۲(135w` ۵^[h7Zcg8:r ah F ȕlA8E(÷~Hgd )xk۶Nk98+'tkVׅ[z6suxiq|:x&k}{zX ;ɛgkP纪+7`5ȑ{Kۛz(9~6 q[a8CyD\gȔkʛK˻ : ګggYGzv)h b|F ې^YsXٖj);g g| Rp  ɛw,}vי* * YK+i9I(`;'x:\yVpysОgXyPCiĹKY:G*p&j{/o)ku|yܚ"iƞ|"f'{RJTZ{Z kJmjgD7j~s <̑Yz|D>'y/>Wi7y.ݹYevINf9X,|Rjk*ͨI9Uν\9@lZ|N1 z.Zxg`l9u ~k:u n\÷ @v:ܺgٛDŽS0PǭxÏ\g,ș^lDy[:<<˙XmJ|޾gzόʙ`yWzw{̬{?ɾlꦿ,|Dtﶜ\Fg,hJgh]ωzg&OU?Ĩi7j9l M>jĐ&DiFlLj3POT/S_XW\[`_oh;fO̺ } @ VFHB @}to~ 0 |o0 :I }Hg_jv:_hO~fl=Fr{DGTphy6qp0Yлz搃/yyp > 7 5Ӭz&S tѣ@ <0X5VBEEkD1Ȓ P N%G7s8J.andSQNZUYnWaŎ%[6iծMQGb~}BU 善ѩΥ(C;Dt# rF%C ^PϺauWi .guo'^-[n6: om#mGn;:tG?;6 M *U|??v >+nAtA#pBގCn-ch% eˮ0n)Z⦜BQGQPV(z+&9v"<zcDq"K0sL24! /lK"ZpA*n*[N.YP톞ri('&mOF I#Kt3;SPC4"\nUbHO(J TP[-1bVXbyS3EueyjvTpw\rͪ O=ZH.c>F)=$$ )Elx ?٭Q U{˘-IHx-+E665ecy/MN4lЇ̢d癥f`9v^JۗZ!cb(gL~Wk WD/:fn|z)bb@*-{j+ `PI H&oj#-uԻQtc}vu3]-2 qt}#k~x7<~yw <z꫷zє{AO7|??}w}M`P~b* -^A :k)ǥ(mdQEb0) HbA|$(XBx,^BZhP&&BPE1C$bw5&.MSnB dAP:c? eO f=))Mlr.%ILfXL-%x9".HkmЌfrI9Vנ&$ExOTfLabbC 8)8'DٓԴ.|HC6,@D xbrjQTfUb)Ac…LeSu-t"a>qzGq R7d$iIg )=15m9׭&Vyp/4Yk8rO\5@ JSZHTKTEEaZlmm[|?HrH'=->^!5b ʚh]6.Vԧa'n{^2( J;štP nsck5(C+nwb4Fy꫽HfX q=8#&oGj Q@ bH"1ƨ`*bcZ`< cY[cU(@1DlH2Vl;gf6$[rWXJ#+J@p9 *y;E+h\9VrJ0pf{3Wו%Wt }" hDGZ3S-}zVӛ44iP}uM=RZի^^YjXn(TSW *QJjUxZ)ԈDA* J [86 } Rd5]mZD1EEn$S]q)XԢFê{XmS77Ƒ4HLE/@$&]ҦI57+J#xKE%ZN>Gg?\LJ=.K8ig$( E;b A_8T<toOPbdGJ)փ"o5-viys/K3pL(V1Ł Т"=:4(L}7#E+cyli4if mGH{ns7M+L9|I"\@7rL}SB>=ճ50Ԝc4/^^sZ= HL[/ }!ٔtb1b1.ɫ+zZXa+,E? ?,3#c??Ø??,Ӯs#*-{֒zjB'@!@zh|???ʳ)DB֣#/*.Jcy./$oJ?hH()k !û9K99"&$A#xHQr,A$DC\XHCښSkD;<'#0(EQ?9lEJ=X&+b&;ăA!EA2zb Y| #32";da1l$C2W Ǻ)?9H Hprs =w| ќ5k|{GR+4H >,M( ĤʖxO$Is  (cP4r f"4O@ir&hЏ:0:Fn<-KYx P1-8|3Je @R e"!"5R>JdZR`LxR+RarHX 01;Ӧ(û(@x1>O_zюmATHEepGԃ'@}#xxËB9 US0B: H?"T% N ; Ā@пcM͢x dо0ՠPkI}:ʋhE\WФ+l֥sVcV T?nDvՋwruWid1lޛq50ϘF]85 X2O؃XukعpH>̘탿"鈇XXЃK){Y-˽4Y$X$`F  -ɖUYrn X%CZڳZk$yp [$* YZ۶HC&Z8R\rFt?Qn)C!ٍ0 ZҕN .LMg\F'r'KЍE1ވ<2]hQ #9°]9^쭊-^E^&l?'\^m 5 %+^^=H1ɚ,j1) >_܍~WPuxr߅j]ٵDjA:aZ(ML~; ^շ5 "c^{:ߦha^6N( $ǙE DB܈YQ (bhYyH}c !T/s/#2=66ZW}Z% cdiY\H&b26eI&J>LvbMfNb-6eSDz/HeEP=9A 99f}Q |gi/B~fg_v9 p bf[g{ 9{}q Қv #%zEވnfy%>Ogf6s?O@Ї.DQDF+f撆hEehlfŜh}YiGe & ƖF]ZcQƨB!zhAi8 ҈2\N 6=1HOKjn@keGiRnx^"Am +,N)EI ŭMऱl͖il&ў jmxlJɮ9f.ͮ Nfkcӟ֊t238Ѐؙ Xtn6䎊~ɧ1#Ù .F5=jj&ƯF&ps;a¼; Y>:1A?t:,FDotC0,G{tL&KLrOupssQ/>uSOuAuUoIsWQuYuau[u"u]uu{0 BH۪==`xڽxq[͎BrY@ew~![y~>cF}}/$\}I g*vsj jЭ 0aw*&@n(H BP>,i@zgAz2en4q`Y=);Fn@̙-O3ɛ&OFڨ*M 2M8v!=?{Ueҭk.޼z/.l3VWҰ&rVǂPO2Z2De*UsH-BlrD<+Q3Ce3Z.'ޟq \撧{oDdmܹ<3ZE:ӯo>O_=s{e@x~8+`z78K>93xk9{yf:饛~:cXꭻ:#:~;,A 1s V/|] dMw-6Ja dJ_7ʹ#0ARGiQFdlY?DG 0VGFAZ1 C0R(`  L{λL99UY<_$C#Cb܍;}@D[bIf d=lٿ#Z &ùǢP  9 ]މw2 Zь@7glVk,dYl5JGYҤ -LkǜFOjiN:PkVU (8/# X,M%fHl|.(Sp+F]@m4xZId(iZeG%qvYl>vs#D|SdL?-Z(P vM !.YwCF ͼ}n!XyJH~q?VN "4t +!ya ݒOB>ZG<͉gD; pֱCo h_UcЄ9^MrwpWJw=!Q@t+ʬG4_L>p:x9qˀqo~wGE#ɣ3עy_GsJ/%ŐZDeb=GBjT,??}ʂ|,/W~Mif'"(@I`REp}By.ه?I8} IHeݑ_ّmL݌`хFqAAH @J\NЃ ɟ4 x!D]ʢJCʨ = J񅂜 K`\\an &JaC9eɈ Sɮ"LAvDrIڳj!r0p a' Ҡs%00Eo݅~(^Teh(ĦIPdr[oȄѨ[py(}V9.izE2N)ynRQ R)viO*~lO0ĥcHB*6*<,p] `D%Ī2lm-(;j~@F*<06]*𪧎'"liBQ_PaQY=(cE} nfe]p@ kN%F;ͅ\Lщd6\7@("#Q9+R`Ҽ6)r'(6DFiGADBIyzCQQCјlU0L T(C7HI=ó :;Q^X6]Uulv05ԵܒXEIA7hg2LHɚlr -HemFFu6ϾHOUG)-)].mhTNmS79NZU[-nֺe`S0A^WN$W픇b h@o!gBEaGutQ*۞]$i8a]>ļ0e('i‘"o+w,2?i&oㅀ-b1U̷n‚rQ2;f<_Zlq$[ jH+[߂Ua]c=ssXC}@d fs4ꗄ Krb'bf! ĢIt'6Öމ2 Ie "4Y/GBuIP㉞,2/J%VKљL#aICE>'T#ODU5"ZVD&z4@, !pQd>2Ed8cG,IliC,6uZ?̸d?:}7R6k X,ESr̵YPfw6\6,9ۘ*3N&gQ*`_Fh !CBd |wS_LII&A%crJuz e^;f&+&ttnja%` ۸`X`(xLCN@8Gqx,_F<` 7{l@3'L~x'㎇8+899'9FZ%PIgtY\9hOsD E~y^yns*7qCP] 3E]9SB KF#|4:79j;7_x6xGJ u:_d`,Ũa\˫KPJ}q}ű3EۄE%eɲ?+)DŲ l;S<;S\{IHˇ[{{w'҉Q’,ђ-./ULm1m=)dcP|<-#K8|9RDᶓ>2LTJ Z;A{QlF|Be}ȶGE?U—T ï<|W%P%֎%RY%=Tћ|M9Г3KWU=_}D<|&.[BW^_/o*{ /}~A 򋅕jDnlpCW>#އ:0kATX.B=Pע?L`Wn׃{^~x59~I~nþ~%gL~3Cz-;X|EX1=?s{X쳧o皋~XpUGYnB@Q!@ =r0P#Fuz !pA󼣘fL"IT!K lHA5x SpA21j"S9.(`exg'F;BՕ[H gž8蕩]zxNAંMr Ujؘ4њDkFZ {O lXiI뢎6⑍)}=i˙7wЖϜ2IгX>|$gOeR56B|'inuW͌,GlU#}Tp4)X*G[$ebD>w2Ts,)DRWn.4#؋TІ}87~-Gf9uO t ȭR:.`:1jH5&4ka2MiU::8Β `UI޶FnkfqvΎC;&9r_`10 KV1ZUC:pҫ|w0|Гiѱv]P7}}҆FP\h8JmoHz@"CiAB Ȧ{ڿ磟|l~񡗞NrD x1}/|+n@_q"ahc475c~;1-# ! " oGBb׽PؠV_ aW2zx!3à~ qІ`hCaYA 2%kca=xdw xBW(EMI%;b $H f)w-*CdG64ePQZyι,%Rf=#̎RBPzRf>2@IZn!t<3>Hp6'c@owwlZZs*y7lD~K\sŨȽĴǼb@p(,F"TGgZU@cyR dDF(86%ͥr )\ {M $ Q%I%! mF#B SPVJKvNXA!,-%$2?>3#R1s0z>2@IZn!t<3>Hp6'c@owwlZZs*y7lD~K\sŨȽĴǼb@p(,F"TGgZU@cyR dDF(86%ͥr )\ {M $ Q%I%! mF#B SPVJKvNXA! ,4-%4I!m1g1s<|>GGG>"{AE5c5iXd@uw{Rg:m9yByBoagŔȨȶǽc@p($F"TGgJU)ֺd6=. )ZX $B sT $"$[!FPC TJn{D[ZPA! ,<-%4==%$2?>3>$2HFPG={APPPXjqkek|kkqqkrxƂ”ŞŢĮN "f&I:'p,KR AR`#HJ.HiϨr*`4&ǃPXKu!,D-%o܁K&,ry8y[I]T! ,A**;6=$:?7(344Gf)Q1u*E$2H$H<2x] q>G=Ez8FK1SvMF?L)L>-l l-O8v^HQI7vBpR.{d9IGIMI[GPPQGGTMSTRHQPQLHeKErRNfSMyTVgQYsVjtbIMdMRe_OgVYuGKtOS{POwVVaQbvZjweUgegggukwq{jjtkrsqivtu;O i'Y1g5rGFH^QKVVCkXh]f_pSrBrcibjishxtuw{k},+4%>(AEX|vYj{uh`jrwruxxqx{ˆVZ.ci3u4ZUkDg\yZmCl]wE{Ui`qgmawf|xyBA?^abdC@LCVM_V`Xdf\uevuVkvkxsgvqߠ#$)ݬTçuSZ.0ŠǬйрǍ̮ùշƯӺƸԾۋݎIJĸڻźùڮ⒕㷼ٿĝťŸƮŶҶ H*\ȰÇ#JHŋ3jȱǏ CIɓ(S\ɲ˗0cʜIs#?~.{HѣqD)PH31\yիXjʵט7ò$hF-zD.PJ} eTO)&0`t3 ҲHb}hƏQ 0o|M: 4/g^$ ! ǩp)lj#GУ3zx?}B[TRL%_T5o˟O/&>r7)(<4Xq> /LfO}(:x<ᄹА5p8!/8 dA/  <@ާ\=_AC&9"5"w'y)|BtqޗatAIh7cb Tx>{HO SH>PGqB"b.>8L!}nV3cna"jB_~I$MVaʯWBʐ I1eXO.ĦK}(Y U7Hʏ.TC A`%nzMd[.?['?肂q 롛/(M8Q:9h8*<\S.κ.L2٨84׌δ3·4ZCo,uy,` k\Xg]3WO '$'8#2A$='0SOq&-(C2))*yzdBh֠)cHSQA"NLBPVTL<%l;=/~)=hHGLN\/@FP yb|cπ3' g‡'MJ[Ҙδ7i@QfRԨNWVհgMZָεw^MbNu?f;ɎMj[ζn{~MrNv[MzηX[N7| ML<x+GN`/\޹^+.`>`-;nX9KNkHOғ~qZ ؀j,>qZ\:<]ձ~FؗN۝Mvpa/_es/|n_#d7#kwϼ7 ^G;荣꿀EQ oj̗ A0CE&d?:4;j7c8 =pet^;!|#X0?&_E9: o?/w{ @ PjMp|3` {؁yvj[$Hf p֠ ;xϗ i ː§S7x ` 8jRPXj; X'Dh @oȅ;؃V0 ExfxЅ_Bx ` 'X~聖xk p&[pzVzˀ>HsPjG'^sNJ8guws@jPpt` Gu`ɈQXvpF押hvVLhjȋx؏pk԰ N06gjpx>z騏uIhϷ 27v c i gxjFАGvhjYݐPxz@`ujH~+Yj~/FYjIXVɏyk:h b "@bhxIVGUG ЋWNj]I ɰ >cYgYД`Aɂ4i8 cIua=ljy)ِMPySYWyفY9yE2sxVgiljdG}C lhHݠ蒷ix07t}sИk)h IۉXٞtikj@uU7 &P0ɀ?Jihux@@j:X 04ȟI:i~;@y@#ڟjdׂ`0K7ZxC'=p H `Xf0h/ i wzGl @{( ؑ|fsЗkA!i'|qAט]]W/p*tzƧ s0sاxJ)FXZ:Zo\Zm0wkTj૱Vk&%qvZj kҊjZZ:vʁy꺮fy P Z슯[{G ۰!;rqoFkر$[w&w"+&2o(۲Xm9k3@ky(zgzV~7sg|'U ' L[Ƿ}H  66jgj*}״i(pjJkHic~0 ;6!hj#X'F`hhGȈjd=@˄nﷆHHSX+GȹexXwy)v(9tHTPc0sмӷ d[>{j#kKk 7{9uK npE)5Kyj9jʙ`L [ʖ-wx ԗkj0ۿXApy;@5\|\lxj4'3 Pj̙j:F9IP.A G پQ\G΋3Л-)V lol;e lǣsƊlb\j+ -zd *ȣl.p(*5I9i 1zR Oٖ\6̤| ʖ\8|,>ɝŠȄˉvx~[ ̐:Aw$|Zw|}͇w,̱zj}A֜s\<_pj[hyۻo-K^0.ny,]x)<4IjA|j ډ9;~y'9( /L<{Eo q̽)]]|Ol͛ă9=ikNY6O)f{k)^}r.b畷 WNxщl slƗjy{Džlprܻu贎np? VZ\4jʲLʩ4J˫lɠN˜ɗ<ʅʧ\Nnt}w 6ͬ(8,, | gAJ͖A͒:uˆͯ&m(Ș"-0)P]k: mmy*'9z yOn+Tom?M迆Zol\_o9]b_mO=fejOinmrq?vuOk]}|oj0Ѫ v֬VܭȪw ` Og c 0 VK/G}FnFz2jrfjB8_A@𺷔$s_G}viʰ$,yQئf6ob-!#ܱc(HpXۀ wHfc; 9C@ sEcqFkIzV"2ABo@rZG@ w,9+< \(FF;,@1!z2JCLsO>ωp̱=6N#3X/5&_ ?x0Q.-Skf=r-jVk?S9OCtVZkV\Ut=B5@[!+"׉,>QՈJH&lLH,UsE7?ۂu^zwlGRH@u' ԐQ?~>)Pty +.pBRkP_SPn8*8.wMT3"5S^?|zh6I_|> (ؘBaʘ,-Bg27F ͶTvZn`|p iFҫ HbS@' (Ez`9?K7|u[w|7[G}w<ߗ~)~*~P, _!$ PE+P ~o:A7XCHڀDT°0,hų V0g`*l؊.ÐDfXJBPK~"SH]:1(ĊX\@ė⤣)7aa7 B($hM6O92)D_莾1Q|pAt#Hp;tl!@$% Jv$ PuL@d' @Mi(dHJ!HAj9Sa $`,27BSQ\%)'m` 8)Mj#fCH2>~,'Z"i_RƝNJN SWGd"iRdDzG6i:p_~ GkKrsC:QLu" 'k ?]R@AR͂r;֜_jhC5XX ) IBJiҡPf:+b*L=3[`@E1tZ;5C% ,\’a~aSb&4-fl>6X vjXȺ BH`І.z,Zݑ)r"-R:%DoFtXlo}$+ֳ Yq ̀jU-vkKE]JkX"cF@x}һeo{c ANl,#Ʉ 3U#0B t0sd6g,c˄z*άfF,Aʾ^&Ŕ]Xۚe)MQ$j!_pPsb͵1%}(Yԩސ[7m f(nMxx\ (qH7.$uHFWSL` 3gl- NQbh@'ZFG$ҋtkhKgZ=iuԣ&D]jTyVu]:VZֳ.Z-Cr@BE@R)u E20lQ!Bf(4,v Kmb3jnV8hl3˦b3l ;7#vLuFyĕSCǒyGa:I ,GX+H$ȃLHƅlHLÇHHt 3KqȎPy!L:Kɓltd ԼddȐῘۈ 4 >Ѹஸ bXJHvCLJǰʕJ 46L(ː8hPKc ep,pK ,!0,ۈ-ʢmtlɎH[L6KdüJ눽ȍTCL(̍Q М| ̛Bt(̉$ʓPcDMҔ K /䈦{:w:bxs焺oB[:llNOˉͤDLl[fR'1Pq:T#O hi$< i: #O!6QsLUpNgKZĚ8ѦxPQH,MgO UѣsQ ORPL $=2~-/R ļ8St#wx*CUlAT1hӛF}`P%1txуԸ(9ddJb @Eݬ@_TFi6{``V v  F$_.A᨝Ǎ\P7^Q 5- 8db%ܓ8b"ߍX3 ♊d_E*`⽛tb b,ޠ]Z؝b)W8b#7N89`N<c0VC&jLOD/IཹDML0@rAIH p1`QSnGkxXƼeUMf@ֿe aO1e毝Y@j (f^3 iv ;PqeX)QN!a^bKu6e}t~Fd% ,gTe|fLnNȍ1!3"NϘ=:**sAc2Li<<:plixiỲ>)1Ns6Z$iUR\6"t4%3GA^VW,uiJ~~ŠiikjFi.j=6ksEfQk>^kE^FH3oϞ >함l5 nֈ8ș;FڲKfept^7MmV=S~nhŶ9&랈ۖ^1sx )@oPo< pL D(-iap7ZpOpq/qOqoqqo/RqE}q3R+rd"Or* Sr'-a'r m*`E-~Tm.-s3$23_%Jsds8s:9s<;s>w=s@?tB/tDCOtFEotHGGɚttHOd " opwTGS'Wo tJHZX"%wuǸvXMZwI_s l^gǻUhj_DcG1DNdΎ8i@ڈE_hPj m €eHi|PRp`$#X|OYX Lx+GQҢOj wf x'mo.R04ѫ:]qUM|[<<%A`&ot%H yP sT;d֞zf/d5fbd VVX5w׏XJ=Y-g0D§Apo$=_tڈMM{MȯZ. G_?$ [3|ЌG营Yʷ `pit5ej־(~ :* (-ȃ؄8PGA- X݄775]5 _ 6Pd\g+~1~dP M JqGG e ,$p;C @sxTR5ZG Xy"i%]z%a~%f0_ $u O%RO}dr3RtZE5)Z$`AV!3@rM[m(Ms&JUf.`RT$Q&BqУ̉y,*,ɒYf=5{ ~z#t{ s[mbFhMn/+سh䢊A>g_;0K<1]\f@ 2a[%|2),f21<353v163=38g4E}4I$J;4QK0ӗM}5Yk5|UGo)@aXgw؁)0ƶ&{ɀU@ Ӎv݉ @X\?qPMއ]+g\Ɍ5*y%ZbBp8[n y.a+^2}u3p@2"VbWNS,-a+O|E\25d9t2@9?^U=~/6Ll6!aǘDa[B_ ؁ =A悄tl@ @E3rgf4 D^ 8H31 &4!w@ħBT _N9j;(tVA&:=G8j[0$F6 F`:эxA9~,#&E֥# OyZdz '=)5쒣|PIRģHJpx5r. 52dIb̃$8* GXiDuB%G@ӍF(Ri3i"S&H&t:yNSԡxxa [hhCgRb@ *,DCʼnVJ .I~2+nIюƤ!I҃3G-Qr j`O0dpG& 46 75IFB fTT* eZ3iX| 艶Xz&hL›iIPL'i/XJMq *QQaR SA)O9َzĮfm^ O:)i)+b'%>)--E*"K @"$9ĹvH!Q!0,`K|ʰ,k_ϻ0r]_K4-h^ uu鷌9MibR;pJ_AIu|-,Ѽd#܀D<WhBoZHCݸ `^vFΫa[#7^2ahL'-9zy{C>p_d*CdvjqtpG7_(P#̵yrifT0A"Ν 0Ui\PJ5xFa~JWž 21Թq׍(t!;W&vpj)| ٮ9]!Bʽu,->5%A$66NJ]`rN˱;*e"m`uf.0/ [ȒS[b7%j(e ZQa Cߗn6b$Nq:4+{E#DX=m wr`BPkZ(kqx w#̲p䆈DekiF+8ЫN[xQ /\AZ>ozjws6b!&dFd^Me^&ffa8fvg~&@r&h&iՈijfϠ&k<FX*BȦn&oqB@^o'q'WV&AX s>'t.@Du^'v. m\f'x'qF'zpY`^u|gj $'~ggx@y~2Bt'c .@2NhְgP(fָv6v~p(((h^ƨΨ((&TL@VMi~^+\N|Ns0L}Y+ #Hi}y)O )dF闘NfADOPA"%\Ʀzu;aM|8*QPuHjd)| lH_  IHQ8PAl ~  uɮ~*֨1B4ؗ|D.R/*]D4qDF70΅7QAқ 5,1!CR%}aQѭ^D++  ,D@uPa,H )U+R;/l+Ar:Zk6Sw+(C9DmD.@FXjsE:nnq\LqByZ@+XLmWٛ pׂf0@RP-u "d5ltaU-Y` @jSծmFLܭ:Vk#͞&rk2TBHYWPAnE<pzAO<UƄupnƉ}nWL9n4`r߮OAᢃڮnU{q/΅emٞXbMV P&8x.1+( uzY-AПٞSݙU E$5DEĪixa@pYƵ}בp[VhFIp0 pFi뾮3UU`'W!DL0Y]LЖp^'ͭᖮ)]1\H❐[OMrgxԄJ '^,jխzP߱kɼpJU¥SR% Z/hC^i㍮/'1ٝ')Eԩ܆ 7.62? )hDRBHl~D*[X DȄO n"R/AP8gȆpl_ s &E ,bs:s39#.7% 3s}ob.0s٠b k68캇Ά;']G)0jkjb{#?\Oa9a@98_&] Ljy -yN9椚KFzZשPυ ژ'?ġyqk &VOQ]raGeɮM86̂R3 e%-ީY&m1U2lq:%(IC{8BlQ*zWJ/],J 21S˗M&q?MX9O,S4쫣Ϻ{4!96C%D]5GH1+_J &]ڢ@Śe$>>-yº1ܳ)0xUP5lw D :܀#IFX"lj+7} iPJwD'C̝G r'ձ5*THR`R".E(Ti Š/8tTlgnVOtUHk[> ׷qE% Zm_u夳Nڬɛ+1*w21 pu'#xH0 e(+Н_49, eiY8gjdK>9啅hbFYeb v+%曛7VЄT:&qdW%Fz槨ACZ[m M;0w,Q鼛֚IҙgVQ^%7}mm;?"}d-a6 ᄙ)1k΀mD)O~?A&eJ^Q~ 7V?'2Ɲ?_iË#5E{ÿdB$雞VmX 84t@OY AM~ջL ]Dj&,w/D:8͔\!A b&8Pz E~$`shA=,D2F9P;h<}]FF4/.λgx0JD7HA(Ix=" f9Y6VI8䄊 gYZ׾6=T[Ul+UBop[|VG,f\>rS$ OvqK] ?xɻYj*hy^i;j~\$} \*奔\!;Tpd+_9%6kq՜.ɘoe3ZM1f<5Tv1\8V^ >H36 '^jzB,g 98e9F [BCX-\T6tT6b 4fhAl-l;؛6˥O5=r$Pq=looɒ cH)7mI ,I"uo@^rv' ^g{3OJU'2q.$r'bٛ#oϙ.rYzөnzչNu]Ӱ}k@! ,T-$@1s0z3>Hd'PP=v@ ]m,}UyBsåsȡȫȡǽǷĮĵǼT f&I:'P*l 05"`$̃A4} a\+ݯM6dmQ4]%}.M!! ,\-%$2?>3#R1s0z3I"R!t0z<P?2v@PPP;XjQqwkxa.m9yAȫȺǹ_@p(4F"TGgjU)ֺ=d$ʕ 4P e+p>"92u.zT rBP & #LG&[ OdZNJXA! ,l-%$@R!t1s0zGG3FQG>2PG1{A5mXj@owRy7s8yByBZoașȫȽc@p(F"TGM !LUL*[ cGd<"Hb1{wmP"e[!y{U"!"a jaB OUNENJ[A! ,t-%$2?>3#R1s0zGGOO&GGGPWfQpxeex&]5i|vY`xRa:g,g,l^~Abztźǽż`@p(<F"TGgzU)ֺ-|`+9qfK9Y`WL[ B'X$% 'X$GczB SP\N[ZJXA! ,-%4I!m1g1s<|>GGG>"{AE5c5iXd@uw{Rg:m9yByBoagŔȨȶǽc@p($F"TGgJU)ֺd6=. )ZX $B sT $"$[!FPC TJn{D[ZPA!,-%4==%$2?>3>$2HFPG={APPPXjqkek|kkqqkrxƂ”ŞŢĮN "f&I:'p,KR AR`#HJ.HiϨr*`4&ǃPXKu! ,-%o܁K&,ry8y[I]T! ,-4$3%=%$2?3>>I2H3>HG>"xĿmsåsŪsȡȣJ d&I:(@Bp @O 1 i" LEJ \^+7`Yoi:va!! ,-%$23%@1Z!m>GGOO&GGGPWfQpxeex&]5i|vY`xRa:g,g,l^~Abztźǽż`@p(<F"TGgzU)ֺ-|`+9qfK9Y`WL[ B'X$% 'X$GczB SP\N[ZJXA!,-%$2?>3#R1s0z3>$2HFPG={APPPXjqkek|kkqqkrxƂ”ŞŢĮN "f&I:'p,KR AR`#HJ.HiϨr*`4&ǃPXKu! ,-%$2?>3#R1s0z>2@IZn!t<3>Hp6'c@owwlZZs*y7lD~K\sŨȽĴǼb@p(,F"TGgZU@cyR dDF(86%ͥr )\ {M $ Q%I%! mF#B SPVJKvNXA! ,-%o܁K&,ry8y[I]T! ,-%$23%@1Z!m>GGOO&GGGPWfQpxeex&]5i|vY`xRa:g,g,l^~Abztźǽż`@p(<F"TGgzU)ֺ-|`+9qfK9Y`WL[ B'X$% 'X$GczB SP\N[ZJXA! ,-=>>2@IZn!t<3>Hp6'c@owwlZZs*y7lD~K\sŨȽĴǼb@p(,F"TGgZU@cyR dDF(86%ͥr )\ {M $ Q%I%! mF#B SPVJKvNXA!,-22HO4v@5i@owqZrCåsdzķĹD d&I:[’ е{I$3 (y**ɾX-muVٵSݨ! , -=33##HK H4.`0(J&p[LV2A[>2@IZn!t<3>HWd'p6'c@owwlZZs*y7lD~K\sŨȽĴǼc@p(<F"TGgzRH<É6$#H 'sФ6N|M& Q'I'#wF%wB SPRv`WNJXA! ,-2=%=Y4W~_Q0kkq&]@ullr€RRqjéxǽĞDzM "f&I:[ؘ` 2vH"_XBHTDjtGـ550L.@=-W.s]s<-!,$-2=j p &V5o6u@o@ugrr®nŜȺŞƢǼP e&I:[— еx1ɥK\#CX@AiVJQ!-*ooYf xw; ׳B! ,,-%==$$2?>3#R0z>1s>1y>=yFF%j(|f:GGGPGGkqllrZf:s8ZzgūȻĽǵ]@p(4F"TGgjU)ֺ P$˕<QE4ƒUlbpz&JX!&&XG [BSP\TZPA! ,4-%$2>>2@IZ"aFOd'j(v@N&]5iHjQzlrzĎa}\~AamƠȥȨȡǾǻĩDzǺi@p(<F"TG'Mz>+ pNbU8ekԀC@Kq!{jw% |M'Q}B'" TqB'$ dD NJ\A! ,<-#423%>>>GPP5i@o@uyB9)RULt,€yJmO1O$;$Qy$KhSF!,D-%2?=Za"R>G>1yPG=vY/pGyvNxH^ry7xUyAKbhP be&I:[•0!b8tETEʣXi EpX%-Z0C f)c@'ק7'ewW^_B! ,T-%$$2H"d!m1s3FYG>"d'j(p6XH1ȯǶǺĩDzǺF "e&I:[” еۻx0/,f0I Y"d'j(p6XH1ȯǶǺĩDzǺJ e&I:[— ӗr &0@(% QWE@@d";H㘨d\{Q!! ,t-%2?=Za"RGGOWF%{Iv@ {`;PPFX^rpGy|lN4]Y{wlxRm9r]~A{osåsȡȺǹdzǻǾǼǹp@p(F"TGgJ*H(@^)ڌd V0’ N']1$\tB%/4]rC ."]B-#]41&4]F! SPRRNJ]A! ,-#423%>>>GPP5i@o@uyB9)RULt,€yJmO1O$;$Qy$KhSF! ,-#4$=a!mGG3FQG>2PG1{A5mXj@owRy7s8yByBZoașȫȽc@p(F"TGM !LUL*[ cGd<"Hb1{wmP"e[!y{U"!"a jaB OUNENJ[A! ,-%42?3%>3I"R!t0z<P?2v@PPP;XjQqwkxa.m9yAȫȺǹ_@p(4F"TGgjU)ֺ=d$ʕ 4P e+p>"92u.zT rBP & #LG&[ OdZNJXA!,-=>>2@IZn!t<3>Hp6'c@owwlZZs*y7lD~K\sŨȽĴǼb@p(,F"TGgZU@cyR dDF(86%ͥr )\ {M $ Q%I%! mF#B SPVJKvNXA!,-%$2?>3#R1s0z>2@IZn!t<3>Hp6'c@owwlZZs*y7lD~K\sŨȽĴǼb@p(,F"TGgZU@cyR dDF(86%ͥr )\ {M $ Q%I%! mF#B SPVJKvNXA!,-2=%=Y4W~_Q0kkq&]@ullr€RRqjéxǽĞDzM "f&I:[ؘ` 2vH"_XBHTDjtGـ550L.@=-W.s]s<-! ,-2=j p &V5o6u@o@ugrr®nŜȺŞƢǼP e&I:[— еx1ɥK\#CX@AiVJQ!-*ooYf xw; ׳B! ,-%==$$2?>3#R0z>1s>1y>=yFF%j(|f:GGGPGGkqllrZf:s8ZzgūȻĽǵ]@p(4F"TGgjU)ֺ P$˕<QE4ƒUlbpz&JX!&&XG [BSP\TZPA!,-%$2>>2@IZ"aFOd'j(v@N&]5iHjQzlrzĎa}\~AamƠȥȨȡǾǻĩDzǺi@p(<F"TG'Mz>+ pNbU8ekԀC@Kq!{jw% |M'Q}B'" TqB'$ dD NJ\A! ,-=>>2@IZn!t<3>Hp6'c@owwlZZs*y7lD~K\sŨȽĴǼb@p(,F"TGgZU@cyR dDF(86%ͥr )\ {M $ Q%I%! mF#B SPVJKvNXA! ,-2=%=Y4W~_Q0kkq&]@ullr€RRqjéxǽĞDzM "f&I:[ؘ` 2vH"_XBHTDjtGـ550L.@=-W.s]s<-! ,-2=j p &V5o6u@o@ugrr®nŜȺŞƢǼP e&I:[— еx1ɥK\#CX@AiVJQ!-*ooYf xw; ׳B!,-%==$$2?>3#R0z>1s>1y>=yFF%j(|f:GGGPGGkqllrZf:s8ZzgūȻĽǵ]@p(4F"TGgjU)ֺ P$˕<QE4ƒUlbpz&JX!&&XG [BSP\TZPA!,-%$23%@1Z!m>GGOO&GGGPWfQpxeex&]5i|vY`xRa:g,g,l^~Abztźǽż`@p(<F"TGgzU)ֺ-|`+9qfK9Y`WL[ B'X$% 'X$GczB SP\N[ZJXA! , -=>>2@IZn!t<3>Hp6'c@owwlZZs*y7lD~K\sŨȽĴǼb@p(,F"TGgZU@cyR dDF(86%ͥr )\ {M $ Q%I%! mF#B SPVJKvNXA! ,-%42?3%>3I"R!t0z<P?2v@PPP;XjQqwkxa.m9yAȫȺǹ_@p(4F"TGgjU)ֺ=d$ʕ 4P e+p>"92u.zT rBP & #LG&[ OdZNJXA!,-2=j p &V5o6u@o@ugrr®nŜȺŞƢǼP e&I:[— еx1ɥK\#CX@AiVJQ!-*ooYf xw; ׳B! ,$-@Ia1g1m0z1yG4G2yPPPP^rEa-g:m9s+xMyBKSihséxȠŤȯǼİǾe@p(DF"TGgU)֊-6!Ir*H("H%aq(d!|ToB#uh (vGeP( SP(JXT\ZTA! ,,-#4$=a!m>>GPP5i@o@uyB9)RULt,€yJmO1O$;$Qy$KhSF! ,D-4I1m"PPP5oH^m9s8yB}LxUyBsxȯǯǼR f&I:[š е`="gLDM L' B \ (-P@cG(H ^4^^w4!!,L-@0z^'j('cg,m9xLyBmsåsȫȽIJǹJ e&I:[— еx)F D.BE(@rp.DI^H :X5mh<Y!! ,T-2=%=Y4W~_Q0kkq&]@ullr€RRqjéxǽĞDzM "f&I:[ؘ` 2vH"_XBHTDjtGـ550L.@=-W.s]s<-!,\-4$2Iah1m1sE~Ov@5i@o`rZa-s+~7K[gtȡȭijǻìǷĵƺ^@p(F"TGg:U)֊=l.†(}$g%dBJ&:#*D+{L"#t|# X~ #[Zu|MGA! ,d-%$2?>3#R1s0z >{f"B!t& &uGeP& SP&JX T\ZTA!,t-43%@"Z"gHv@{ZPPPPWrN&VVulrZaa}UummxȜȳǻưǷĺǹ`@p($F"TGgJU)ֺ<ĕ 45|0Bɂu&AT'E!X sBX$ $[GcPC SZdN]TA!,|-#4#?=IZ%Hd'PP=v@ ]m,}UyBsåsȡȫȡǽǷĮĵǼT f&I:'P*l 05"`$̃A4} a\+ݯM6dmQ4]%}.M!!,-#423%>>>GPP5i@o@uyB9)RULt,€yJmO1O$;$Qy$KhSF!,-%4$2$2?ZK H4.`0(J&p[LV2A[3$2?<3#3>>>3>>>2>>>@IRZg#H"R2H1Z!i!t2i1s0zG%GG3FU%Fm4W~IXH%K4^'W4G>"G>2P?2j p d'j(p(p6G2yGG1PG1PG=XH1ZP4jQw@pI{Tv@ vY/{e:GGGGPPPGGZULPPPPWfR\rTgwQpxe__rIx|lN|f^kekhhtkwq|kkqqkwwq;IV ]&Y&]4]'c?f5i5o6uH^DnXhQpQpYpY{@oAvRzjrvuw{|x |vRYjwsfl`k|rtxlrryĂRRZRZZZ.aaa-e:i,m9s+u7s*s8z7lDl^rMyVwD{U}\sU}UqjyB{\vbwzuKUZklxftms~åfåsŪs©xćŇɋȉȖ—ƠŠȡȭũȹǹǭƯȺìıĹĻĝŤųƻH*\ȰÇ#JHŋ3jȱǏ CIɓ(S\ɲ˗0cʜI͛8sɳϟ@"EF6shцp @S>[\rB'~ {qOb5M4Z Q+נ'CybP/W̼{.4GL_yH?|3*gu| THdL 0 !jլQu``[d ^ DzѢAi ܹ U輢.\?%ͣwXY/BQ:(1 M 03DGQ}s@m6I"t&PC"sނ.ˆK*@<1p^Ou(X&BS$"& T@WneJ)>7Q(`AaG=\BКm^f?Ttg A"afT &$IcQ(E{gCkÃ@ )G&h>Ê9AШj%e :YѠ&Bj5`:d@!Ïu-C^ @ {BI >z*0W><?K?64zY#'= 5iï@0O?DA4zub Qnj^" ? -dH06;#*F; `p;tL, ]TL 7=/սQ8^Ӹ.F<sv? ٪/1P>zR< ~.8SuA{O4r*vfpL6j=7H@Z{]t/4<ɬ3E O"A4To N_!zNC5RCe??yk6M ]{?Rq@CBmʈjwwC4(,P| <5oG\'-X60am*!Cw: i6-"jJ:?i)ߍ_ @[= CiZ{^Hݽ6Y}R_xH\0m0w*j,zOoFi!:#,IHA?}!}c _!"z/#"/|{|\7G7SQɷu0_0~ pwa!y`7WX4s{{Te1mq!  P@xBBA: 27o2U_PIn҃?xeb :DCM)> fs` S@2 N TjȆnf8Q8|G$Fm9BvGoWeh#pE IdXU |a `}ρkC!2@'!x T@2gS`([؅\Ԉ9exȉU䉳Wӈ"؉fnzH{et@P^˜FL-*܈!@2ЌՎ I T`="@g% 19`1$1#y?4@ @y:rI4H3]0804!$-i21" ` ,0S3iIiK a 42i:)1I )R1"G'#1OYDbχ,0>s19blKs`~s@I:Mؓ. 1*Dfxz9|9Ireyf*ɓ$Ppe2zA7#B:B!,A43%@"Z"gHv@{ZPPPPWrN&V@ulrZaa}UummxȜȳǻưǷĺǹ`@p($F"TGgJU)ֺ<ĕ 45|0Bɂu&AT'E!X sBX$ $[GcPC SZdN]TA! , A2=j p &V5o6u@oHo@uPogrr®nŜȺŞƢǼP bf&I:[™ еxQJSd"C`̀a%.%ö 0f@xw; ׳B!,A=F*o܁K&:,ry RA :,ʴ&OxÕ݊)! ,A%$23%@1Z!m>GGOO&GGGPWfQpxeex&]5i|vY`xRa:g,g,l^~Abztźǽż`@p(<F"TGgzU)ֺ-|`+9qfK9Y`WL[ B'X$% 'X$GczB SP\N[ZJXA!,$A%42?3%>3I"R!t0z<P?2v@PPP;XjQqwkxa.m9yAȫȺǹ_@p(4F"TGgjU)ֺ=d$ʕ 4P e+p>"92u.zT rBP & #LG&[ OdZNJXA! ,,A2=j p &V5o6u@o@ugrr®nŜȺŞƢǼP e&I:[— еx1ɥK\#CX@AiVJQ!-*ooYf xw; ׳B! ,4A@Ia1g1m0z1yG4G2yPPPP^rEa-g:m9s+xMyBKSihséxȠŤȯǼİǾe@p(DF"TGgU)֊-6!Ir*H("H%aq(d!|ToB#uh (vGeP( SP(JXT\ZTA! ,<A%4==%$2?>3>$2HFPG={APPPXjqkek|kkqqkrxƂ”ŞŢĮP "f&I:'p,KR AR`#HJ.HihDmW 0A (,EՍ !,DA%$2?>3#R1s0zGG3FQFG>2PG1{A5mXj@owRy7s8yByBZoașȫȽe@p(F"TGM LuL,[ „ gd>Xb3B{mP#e["y{U #"#a!j[ B OUNaNJ[A!,\A%42?3%>3I"R!t0z<P?2v@PPP;XjQqwkxa.m9yAȫȺǹ_@p(4F"TGgjU)ֺ=d$ʕ 4P e+p>"92u.zT rBP & #LG&[ OdZNJXA!,dA=>>2@IZn!t<3>Hp6'c@owwlZZs*y7lD~K\sŨȽĴǼb@p(,F"TGgZU@cyR dDF(86%ͥr )\ {M $ Q%I%! mF#B SPVJKvNXA! ,lA%42?3%>3I"R!t0z<P?2v@PPP;XjQqwkxa.m9yAȫȺǹ_@p(4F"TGgjU)ֺ=d$ʕ 4P e+p>"92u.zT rBP & #LG&[ OdZNJXA! ,tA4$3%=%$2?3>>I2H3>HG>"xĿmsåsŪsȡȣJ d&I:(@Bp @O 1 i" LEJ \^+7`Yoi:va!! ,|A%o܁K&,ry8y[I]T!,A%$23%@1Z!m>GGOO&GGGPWfQpxeex&]5i|vY`xRa:g,g,l^~Abztźǽż`@p(<F"TGgzU)ֺ-|`+9qfK9Y`WL[ B'X$% 'X$GczB SP\N[ZJXA!,A%42?3%>3I"R!t0z<P?2v@PPP;XjQqwkxa.m9yAȫȺǹ_@p(4F"TGgjU)ֺ=d$ʕ 4P e+p>"92u.zT rBP & #LG&[ OdZNJXA! ,A2=j p &V5o6u@o@ugrr®nŜȺŞƢǼP e&I:[— еx1ɥK\#CX@AiVJQ!-*ooYf xw; ׳B!,A@Ia1g1m0z1yG4G2yPPPP^rEa-g:m9s+xMyBKSihséxȠŤȯǼİǾe@p(DF"TGgU)֊-6!Ir*H("H%aq(d!|ToB#uh (vGeP( SP(JXT\ZTA!,A%4==%$2?>3>$2HFPG={APPPXjqkek|kkqqkrxƂ”ŞŢĮP "f&I:'p,KR AR`#HJ.HihDmW 0A (,EՍ ! ,A%$2?>3#R1s0zGG3FQFG>2PG1{A5mXj@owRy7s8yByBZoașȫȽe@p(F"TGM LuL,[ „ gd>Xb3B{mP#e["y{U #"#a!j[ B OUNaNJ[A! ,A%42?3%>3I"R!t0z<P?2v@PPP;XjQqwkxa.m9yAȫȺǹ_@p(4F"TGgjU)ֺ=d$ʕ 4P e+p>"92u.zT rBP & #LG&[ OdZNJXA!,A=>>2@IZn!t<3>Hp6'c@owwlZZs*y7lD~K\sŨȽĴǼb@p(,F"TGgZU@cyR dDF(86%ͥr )\ {M $ Q%I%! mF#B SPVJKvNXA! ,A%42?3%>3I"R!t0z<P?2v@PPP;XjQqwkxa.m9yAȫȺǹ_@p(4F"TGgjU)ֺ=d$ʕ 4P e+p>"92u.zT rBP & #LG&[ OdZNJXA!,Ad%42?$2=$$3%=%>3$2?>3#3333>>>3>>>2@IRZan"S2H1T"d!m!t3h1s0zH>1y]c x xE~>GG3FW%Fm&Ny4Ol<\vFO]J%G4W&G>"G>2P?2j p g'j5p(p6G2y^HGG=PG1PG=XH1j@v@{AwTvY/pY<{a:GGGPGGPPFPPPPWfPWrP^rZhsQpxe_Oeeeeex|kkqqkvy|;EN]&W&]'f5g5o6uHoXj_pUt@oHo@vPoQejkqh{rw |vYYiwl`aglllruxrxņIRRZRZZaaa.a-f:d:g,g,m+m9s+y7s*s8y7lDl^x]l]uD}UyB\fuKWZlukuztaggmmsåsés©x‡ŋŋȇȔÜȔȜțȠţȫũȳźǭǯȵǼİŵĴǻǾĻĞĥijƻH*\ȰÇ#JHŋ3jȱǏ CIFO ɸBF 6H` J,]ܙѿ`\ oFoOB-5ڴ3p1ĿN )P[jU+W^&KjC[- B<5D]ݦxRo}~Cs0Np~*_ysv7`Ip±-}:ud~Ǖ? +elѤM?OmfWc=ܻ{|vǓ[}ꄅE%ϟ5<3Nr8\@$:( p~MR^^ 2oM|ɃN{P4Ø"Rh@ % :ȣ83jx(yH(".5ޘ1P"PԒ?:Oh!T@xVʜuޙ' #fQWM% *Y '@('p>: H)j *ZAF"PУ?OXh 5fZ-l9e?[A!Q~Kņ#˯_m;[߆;^okP6& @/[#C[Ԓᰞe:5"9\L1򹌪"{%.4BiHǥܜ@V3L?6u??,m4%tӼ<}PSoX5fq A<ˊDE [2nP;u)U %-KL.P~@zD:|ym9+$ž@ԫ 4+QIi< Yr)48@_ƊISXQ Y$6 6ǿM+f\6OWC:J?!o!Գpπ ]G>O}` ß ?#$r+> PgG,$fXCFa#^80{&^ИA@* a?Fx1C[O?>"avX|QDD%b̉qhE`8[lx2ЍgT@ Cx &0@ bd4 @TZ䑑t.M2@(16RYe+in"2Y"++tH2f>s'́ds 8IrL:v;fUREt8"r}@J|'wȫcmxa'HZc׎< c~%4_j{B\ f d=Cr7O 1>IΥދ7{P^+P>6?"_xpTk8߁ B>.@v XL/NN  N NXt(pw `t&QwPupv$&' s`#T:M<؃@XLB8VQFH;LhN$R(TX!,LHLKGWKG\NJRMJ[VGKSIL[GK[JMRMQQM]ZLZTQTSP_XU[KGaIDhNKbOLkMIvRNeSWjQR{X`u_bx`FIcKNmKNcNQlXTsFHsKNyMMqNQvQNsWVv\SzTR`PapVdnh[zf[dahjejkjnpelpmpzpcrststzONRQU[TZX^X^[d[d^j[f]icm`n`nfrizu~h|,+4%>(ABTEXI\|nxw{}w|]TbWbYn]eYi\q^qextyfwqqA>B?\_^aceLCVM_V`X`czjzqls{|}ޟ"ߠ# $-ܪOݫSޮXS.0œÞŤƣȦɫèȫ˱ó˾́ŎɬҶ̽ɷҹѽيߏސ°ۻŴȹ˼Żի׫ӻ޵ߵýֽüƫ²źɼγ˽ H>*\ȐaHŋ3jȱǏ CIɓ(S\ɲ˗()ʔhƙ8+"O)ev,ѣH*]ʴӧPf|4翩~|WL1j>uAFOkυv%!B$ɮtJ˷߿ ,حa+^עhe̜A挙2j?~M^K9rH%2p۸sͻ߷5θM-R0`OK0\HoRNqV,f}Хc>0iҊo}6;eƁQ?w1a,avh($hl0="f!EO$PI>`A=i! @m$@:>y-H!pwE b!$0ooh['+͑'ihPcpa1!cGv sEt((EP案&JW$; BOI% nZ:5?'KJjO25 >%`Oop9#!6dgal>fgygh{ĆrhD>S!a|AHD>p=TG=sB0X;ȣA/Pࣅ=ѣA c0 Pa BҳA b1"#>P]Op{v0c0\Ik>r`cFMOb eov>u歷qGD܄n'7c =[ "N3@3P$,> +P6P*ȂO矇>z8l~63.L>=ZTXDP>c03.ds * 9dQz;۳ @8) @=/rL&1M$mBV7?MOy9(L WBQnn+ԃ84 ᙮f1\] RYx9Qáy#ڬ RHQj5p|@BÀ eE`MaD-O'`Q=:1|c$'IJZRmZA\=6MEִEmSMm\$:yZ$]=WD"[s@=TQGE=LIl a_# 6Ǒ-b:3إCe `G1-P@+aeḟ<ΖB"/Cz4'șR  D1Qd/0qюztBJRx(0lNxR%*TzN9ў{b8||G!P.Xj250_@=-*Lu*F U,O@ ֳrdX颺lK dG1OXI4{d'[RQSnBBB  ʺlgK 8I #V$eN"x2I6\l[+Р4.rN8ҭ̇q!eF~Ճ$P?LW i3L` AĘsGamM0n7{ _ Έd*sg4{ hDlJP k\^@NvqnH bj1]N։B8&`ÐJŕ.s#)3W\QPf 4_roOh.W8ЄC LJ[AMCccC0 htĜ2@:ܐ/0L!=51^,1Msb&6'ǑlؔE&DZfڿi;< %eG^r;ۺ.q]gS;Futw= }{ǀ_+ O8u-x?{v'yO\ݝw)W\ GN(OO \0 2Ϲw󞗼(qc.ANoJϧN[XϺַ{IŮ_|&6ۭ`Nx{t]JO ]O;߸'N!,=>>2@IZn!t<3>Hp6'c@owwlZZs*y7lD~K\sŨȽĴǼb@p(,F"TGgZU@cyR dDF(86%ͥr )\ {M $ Q%I%! mF#B SPVJKvNXA!,%$2?>3#R1s0z>2@IZn!t<3>Hp6'c@owwlZZs*y7lD~K\sŨȽĴǼb@p(,F"TGgZU@cyR dDF(86%ͥr )\ {M $ Q%I%! mF#B SPVJKvNXA!,4%4I!m1g1s<|>GGG>"{AE5c5iXd@uw{Rg:m9yByBoagŔȨȶǽc@p($F"TGgJU)ֺd6=. )ZX $B sT $"$[!FPC TJn{D[ZPA! ,<%4==%$2?>3>$2HFPG={APPPXjqkek|kkqqkrxƂ”ŞŢĮN "f&I:'p,KR AR`#HJ.HiϨr*`4&ǃPXKu! ,D%o܁K&,ry8y[I]T! ,L%@jQf{s80)RWJppFkca^"!,**;5<-6(344Gf)Q0u*E-:I<2x] q>G=Ez8FL2TuMF?L)K>,m l-N7v^HQI6vBqS.{d9IGIMI[GPPQGGTMSTRHQPQLHeKErRNfSMyTVgQZsUjubIMdMRe_OfWYuGKtOS{POwVVaQbrIxvZjxeUgegggukwq{jjtkrsqivtu;N i'Y1g5rGFH^QKVVClXh]f_pTrArdibjishxtuw{o{,+4%>(AEX|vXjzui`jtwruxxqw{ˆVZ.bi3u4ZUkDh\rMyYmCl]wD{Ui`qhmawf|xyBA?^abdC@LCVM_V`Xdf{\uevuVkvkxsgurߠ#$)ݬTçtSZ.0ŠǬйрǍ̮ùշƯӺƸԾۋݎIJŸڻźùڮ⒕㷼ٿĝťŸƮŶҶ H*\ȰÇ#JHŋ3jȱǏ CIɓ(S\ɲ˗0cʜIsc~.s(#rD)PH040ZիXjʵט7ò,H"F)rT.PJ} eTO)fK/^lC 0N~h ƏQ 0oM ;8τg^ ! ǩp)ǙѢFУ/rϸ}B[TRL]T5o˟O/^ %?r7&,<1P? /LvO}(;x<ᄹ`6p8!/5 \A/  <@ާ=_AC&I"5و"'y)|Blqޗ_lAIh7c Rx$?yX C'?HGqhB"b+?5D!}nZ3cna"jB_~I MVaʯWBʐ I1ehO.ĦK}( SO7Xڏ.R ?@%lzMd[n?[g?ᘸqԐJ 롛/(M0a;6h_8*:`c.Ϻ+L2٨84׌δ3Ά0ZCo,uy¬^ kZXg]3g $$$)*yI{dBh_Ҡ-cHSQA"NLBPVTD<5l;E=/~)=hHGLN\,@@Py|cπ3' g‡'MJ[Ҙδ7i@QfRԨNWVհgMZָεw^MbN?f;ɎMj[ζn{~MrNv[MzηX[N7lp MqL<x+GN`/\޹V+(0=` ;nm\9KNkHOғ~q 06Z\:;]ձ~FؗN۝Mva/ges/|^_#d7#kwϼ7^E;꿀EP oj̗ @0CE&d?:4;j6c00=Pft^;!|"\0?&_9:o?/w{ P PjKp|3w` {؁yvjY$Hd Pנ 9xϧ i ̠‡37x p 8jPPXj; X'Dh@oȅ;؃60 ExfxЅ_BXp 'V~聖xk pYpzVz̐>(sPjG'^sNJ8gu`us@jPnr p Gs`hQXvpF押hvVLhjȋX؏pkհ L06gjpx>z騏uIH 27v S y gxjFАGvhjYސPxz@`uj(~+Yj~/FYjIXVɏyk:x b @bhxIVGUG ЋWNj]Y 0 ʰ >cYgYД`Aɂ4i8 cIua=ljy)ِMPySYWyفY9yC2sxVGiljdG}A lhHޠ蒷ix07t}sИk)x IۉXٞtikh@uU7 #0-ʐ=Jihux@@j:X 04ȟ):g~9@y@#ڟjdׂP0K7ZvC'=~p X `XF0f/ y wgzGl @{( ؑ|fsЗkA!i'|qAט]]W/p*tzƧ s0sاxJ)FXZ:Zo\ZmwkG&&૮&k&"q k qZj k jZZvʁY蚮Fy P خ:Ʈzjگɯ;[' ! rqoFkĸ";ױw&w +$0o&Xm9k1۳>ky(zgzV~7sg|'U ' J[Ƿ}H 66jgj*}iӴ(pjjHk(iC~0 ;~!hj#X'F`hhGȈjb;@˄nﷆHHSX 'exXWpy v(9tHTzPa0sӷ ظb[<{j!kK{ 5[9sK lpE 3+yj9jʩ`K y[ʖ-Էwx wkj|08Apy; 3\ |\lxj2'1Nj̙j8FG0,?W йO<Gk3Л- T \mL۹c jǣsňL`\j+-zd *ȣl+p( 5)9i 1ZR Oٖﰡ<4̤zɔ\6|,>ɛЬȂˉvx~; ̐:Aw$|ZW|}gw ̱zj}AԜs<ljʪq*g& jdW`wZȫ7tĊj jzj}jޚjjM\Ƽ:. i2=Ӂ[qK:Ɔ<@Mt>D] WiJJ7LP=HT]nk\]쪃,?n{l`h _ƴY릲vq=i}89{vDzx=x _h]|j{Wjy[{|L( ڵK9N붇XK[kvTX=#]W=է6p TW k+^h;퇴xϨ溥F- ]`{⽺ CX o_mcmkuu܈j*=֨s ;u׻ Ʈ"ٕ L9Ɗ(|7=zLdAF%JN P\.6j:{Doo)][|ML͛|ă9=ikNW6O f{k]}r.b畵 V.v\j6s~ 0vl|駶v<4Mǻ;NJ>v pîܡkahun˕N6̴)ɟ| JF pi~$ʌɜ\C˟\\ʴvIAڧz\㦼:hZ~p`—|$jl50;^.ټͭ &m&{Ș Y7ѥ&𭧆0}k:_j#T}Hm(]ǐI?ֆ kWƶTb_;Mf&jn, r_Kvˮ j  kej ? jA z I  pW0 @_byt/m:nEz2jpjB8_A@𺷔$sO'}vgˠ",yOུצf6o`<7a翃 Ψ (KGt"DN†5nG!E$YI)UdK1eΤY9uɱȻ+p( f{ t?JgЄ#vlY68Մh2&ŃPԁEX.Z]Mĉ/fcȑ%OeP }g!khU^אB-{G6L߅R3_liVnEYt-BTy{٩qkynٴYWfwŏ'_y/̼cjM(@hjѬ}ڜ#wp)㚃>-!"ޡc(HpX@wPfc; 9C sEcqFkIzV"1IƙBo@bZGw,1+4 \(@pF;,@1!z2BLsO>ωp̱=6N3X/5&_ ?x0Q.-kf=rjVk?S9OCtVZkV\Ut=B5@[ +"׉&>QՈD0%lLHj,UsE7?ۂu^zwlGRH@u' 贐@S?hAz>)P,ua +.pBRkP_SPn8*8.wMT3"5S^?|zh6I_|> (ؘJ0aʘ,-Bg27F ͶT~Zn`|p iFҫ 0bM@' @(Eb9?K7|u[w|7[G}w<ߗ~)~$~P& _!$ PE+P ~o:A7LCڀDT°0,hų V0e`*l؊*ÐDfX0JBPK~"SH]:1'ĊX\@ė⨣)7aa7 B($hM6O92)B_1Q|pAt#Fx;bu`!@$% Jv XuL@d' @Mi(*eHJ!HAj9Sa$ $`,27BSQ\%)'k`J8)Mj#fC2>~,'Z"i_RƝNJRN SWGd"iRdDzG6i:p_~ GkKrsC:QLu" 'k ?]R@AR͂r;֜_jhC5X\ ) IBJiҡP:+b*L=3[`@E1tZ;5C% ,\’a~aSb&4-fl>6X vjXȺ BH`І.z,Zߑ)r"-R:%DoFiATXlo}$+ֳ Yq ̀jU-vkKE]JkX"cF@x}һeo{cNl,#3U#0BՍt0sd6g,c˄z*άfF,Aʾ^&Ŕ]Xۚe)MQj!_pPsb͵1E|(Yԩސ[7m f'nMxx (qH7.$uHFWS@` 3gl- NQbh@'ZFG$ҋtkhKgZ=iuԣ&D]jTyVu]:VZֳ.Z'Cr@BE@R)u E20lQ!Bf(4,v Km23jnV8hl3˦bsGkG[95D z,{G}Sǒ}HA5<ȁ4H\HkTH|4tHHHHH03ǚH3L2Kt tdѸஸ bXJHvCLJǰʕJ 46L(ː0hPKc fp,pK ,!0,ۈ-ʢmtlɎHcL6KdüJ눽HTCL(̍Q М| ̛Bt(̉$ʓPcDMҔ K.x䈦{w:bxs焺o:[:llNOˉͤļ8S3twx*CUlIT1hӛF}`P%1 uxуԸ(9ddJb @pPEݬ@_TFi6{``V v  F$_.AᨕG\P7^Q 5-8db%ܓ8b"ߍX3 ♊d_E*`⽛tb b,ޠ]Z؝b)W8b#7N89`N<c0VC&jLOD/9ཹDML0@rIIHpȃ1`QSnkxXƼeUMf@ֿef aO1e毝Y@j (f^3 iv :PqeX)QN!a^bKu6e}t~Fd% ,gT|fLnFH1!3"NϘ=:**{Ac1Li<<:AplixiY>)1Ns6Z$iMR\6"t4%3GA^VW,uiJ~~ŠiikjFi.j<6ksEfQk>^kE^`nLn MI (m<&. m03 yn-9@mtVN8&m\lSYm_13^ &.N~nVAn^FfHD x )@oHo< pLbRP'%`Pwpqϴ/qWOqoqGq-Rqd'Ur"O*'K.r%%r*Юr-I\r0GݖҒ0?A)As6_"5o6q9q;ss=s?sA/t!tCOtEotAtGtFcĘŰtIId " opwTGS'Wo tJHZX"%wuǸvXMZuJ #@̐ŀvZŐ$?vLٝPtFЦkP:`a `u+% 6J"iQA*i8x g,]L2x%j)-$wю{g,/xno.R0y$ѫ:]qUM퀟|[<<@`oȁt%H?  yP sT;d֞zf7dEfbdVVX5owWxޫxM؂ApٸZCJ0| H"Mt׌%[B9ZpтU!M5C PяY|_P &&OWeoX6֚ ꨣH~ݒ;Mx_޲`MXӗ~3\^B(a Eu6O} „ yᦅsou:]!u +#!@QA$΋rMM&׀*ȗAPXX 4v]CMԙ )MFIѢBg"X2Ȼ#b`gϟ.l0Ċ3n1Ȓ'Slٱ5aH",Y8D7 ?DJBqp4֏ זk;mQ(;j*,.\aB1yBք$mZ~;z=ӯo>7l=T&,0]CBʨ0R23}M̄@56P%TSz0nu/0qmB}wP/Ƹ6 BAȔS,Ǒ9I h y%a9&e"1F0 ^ 8T)PI4rBUSZSx^G8)[(#`bW%Bpx]**㝍fUЧY)pSAU:%U&$CufѤ͙,:,͢} P@|x1`@.f.&knNbغ ,/e־-/6-E:r ]3K<1[|qo1B-L2X1)2-;f.<35|3Α\P=3A  }4I+4"=PQK=5USVk5]{֜k .ƀّIvdS2anl'&A %l7dkK7scr᐀ތ ^/lNʌ@50!y(jzfCp8/vd.}ˮsxcd-&=E@Fp]!`$Rr6 DbэxH1z*~,C &M%֥$ OyZd '=yA !ݩB2N%GR$D;pq Lx$Yc:D)Wq=&DdRJ%ǐDӍƃ(rq&4Fj&s&H>j,✊:ωNS!zp! YhhCq2bA)0DʼnVr .0I~+nfKL"QKԃ2GMTTz;2!T"JuJV4JSP@rPԢ:Vt  _-`_-I3St@BCf"Tom E~5!V]jVl$v(d_Ny *v$x=+ij~XMK[Y_]6o]TY l2' ӎ${Eh< XBqRn'SGi2]|;OjV`$@\fK&NzMc@P e *7*ah`i_*Y/ V,v(0lW\gY,TwSPi/<¢蛒f H48!-^P4n5a1X{]C:pbn'01:,d9y ~1܄*Wlt4DG3B@j \AEfXD$M3@ҝ8P9ag%[8긴V ": wdb~@S*gPvIE ^kϸ4lZ#%B$|/ȫ]pB`=Y\1ꋹ ^|oKϽuEF Ń=,4/Wk\Uwlvg^>euD\_ǡf9 ЁWwZr[,C*D;FoyĴ@Y;4聯[ KJ584 5!6V_UGzt"ˆ_#+]@,m#ޙt\n#&?l/whp{|Qȑ_DēL?aD %WBb;8 @!maE8 (ʦ8 _:2_8O=Gw\ɁЁz F̕`O}DVRa ؞IO6`pߒ$Ybɦ̟J>TYTaa5, ց"%0aV`$ZR`q_:0 7-1ʭ Hx! VJ\ʬCѮa`eBJ"%&<#| EC+!aNb1W)]J-2uGGL QСL'>(Nb4<#ɑC0""X8%ƑPAD4:4v "5b5h5~"88"&0&Ʒ(B&D{4$̋B˽KeH_Dv\t$Cj$aPdE B苕C"iBέ=L2GҍEG\ WNKF-B$+8 wkZH Y-]ۮaWp۞̈́ %zH˹ p0zX5pDL[^ k=[JHvGnQMqyubgW=DL]apZ_\\rZH)I٥Sѵ03zhy &(B\ildqn'.( % /iiHrqaKC*r2pQ_G8.rX\0 9:!B5[ ˅Ssz9Ѕd0lHDȄTȰEH5APIapaZ ;t "4 /s= 1cE: 3WLO/c7"NX6 Aى~&Z\Q àDDR^o0B"8 \NH<Q #("#2/h2!\R@7 TOW߆Tk>rc*JcϮm}LVQb$?o I>/FX"T$K%`$~L6(cesyER%_G_L/sd 0 YmmvE)'ekplex Ȉd^SDŽ ՊI8XHve&yz7{w·|7ҷ}w.0)bDd|h8)\CvNaPbL8bc+7'~ǗJ^ w~x|N$*^aaiOEx}8u*'ñKZ3ɢnz,$9cdU$Ɠ#D*a*̖cőOOWv|94njj&s# ɝЙƝ\G5FkxΕЬ̡Ğ'{W}>3\؄龜Gzj@>\Mّr7pFXXu~[YX '?>-:YBP_3 =~?j1YB[a;Tv8 b"M!ٻBEuPᵈ@y'GaJ)$#pY(cÔo X(h|8rB>D]%QU%#YV"*QJ9úV͚eװ7wztӃw{ԯː!@oUJC?xWckK` 7RH9kJ5>N@o c BT><6[@{ L;9:>\PB˪4CAqBM3fPTзk/AbRRr,L'oc (<2M.<3%꧶aRZ+)f<ҹ>PR(i P(PQFI]nD=աJUIgT,42-NCseߡuP~rCPT|TIHSZu5JoFQӠqUR\h}%w1^9tӢXzzw|*)w2a 8xAvЌ7&D#tP&~(=| \ֈ>K9ĞV:cZZdgf蜆Z:x$i}`pr(R5vXr5kut'[$e@es=dY@nn*mn,|.;i [;:IUnsaz:^[QM'[S w=S襟6+ގ& 񉣤{}':Z6!ł؈}Շ"?P"NO>~I`D2} 5D$:g ?o/)VJP,ojB~6Q\ԡP% Jrr+x2( ]!e_ PF3⬁ Xm)88/ObDA3>5@$!"H=G>zֻ^`lN%W" GzԤB`u?%$SēS+_U2)8NNLQ+90A*/ILZJ`!& QTjYVU~ jAZViUZ-:Vq\Zװ{v^Wu+` [Xj?2VS/=.X-v~0([^WE^Uڂ,o]ˣ%+`[`lM`:G (9aTI b )V1@Cbiqi\c91qc8= _!&td=IMrT2`̙S%t :YRadذ/GDPj4.O iWB|O(cPWt g: r5͐o101!,Eʰ`ӝ(q"(B>T c4wM=J/:.-P~]Kewj99O=QGR42Ŝld(-#ɜ"θݜoKVYK'ɞA˙d^8IRzEZ'xT.+Gjr(PX \Wk o}Q>4s̻^CqK6zA}ҢB }m(@ԃbu`:f85(a{;cI!dV;ySQE`ztvwQ(Pún)GL{S&1$:ٰbuK997365Ibn&8E(SbA``6k%7o;$98r'>/N)BC,B8rZ@1)% $s"c8H9Z%`b6vz*d(]F`Nbc&fK؎Fwt"ث9LZ ,!!?M$2 X(1N)^A,HM84BQUbAF4GQwJlu#M5BGd,FM3SELzSDzHHVAEP"Ϭep<4ddJYsTS$BXCX-Vd@$Y1@xuBrbY/KbLbCJkEUT*_r#[DS?A zen%]#mO#@^F$Y[M`W\A3U:)oa`#\gY-<]#`DTW`q)U@UYX1N%vZdqluV#/aP0TZcd[SFSᐋ;E#v1*hV^uVjV6kK6p^Ml6~"W_*ަxІdLefeBegxf脴!y"y&ufE*s&j7&zsxtr7m֦mnwcRsFvަY61g@!z[y؂&mUc=f(Wn/2%jwf&uh`mg'wg|7Xⷉ~=FuXo7,<~WnFXi${͗idq}x)]tnICp^BPAXwVWtH=t {٦`5_ϢhjivYg{H|8}֧}8F=~xب ɇly ؁戊,H'qBVOx̂Ǖވ!\By8%" O0=b=uMF:u"QeS#Ub9c!7(DMP-]ScWݨ =Qr c7;Vɼb5ԣ!6\$DbN[iam=EaY4Q$؛dN^իݥtb(im1w9W\0.sUeo^_}c[\ipg1|9ycGxKw\win& v 5jϦׂk|7&yj2Yc͑HȐylypH(k3ƹ vxhSꥫ a︉q)ɤ(륣cv4a:^#ʬaJꤪ";j^MLFUJ_j'Y/_<7?_[;G3O_! Z<]ñibL 6&@Xac >KBy#""""J"k~`(\ $m%[m32+]4xZX;Gg^ief80… :|1ĉ+Z1ƍ;z2ȑ$K<,[dPA޽ۄʻ1ˠP'υ:ThBTy M8SZ5֭\z 6X+_w}ʹ3&tJMHݷG ӦQjٺ8Ō;~ 9rʲf]uۃB%vN]8 pR-7i ;ٴk۾ݘrepZ%"D;ԫ[XP  jjO`ݿ=]eAKEQ|g.@ 2HS:y4:x _Hb&bG6sxB 5M:rT=q͋w)dJ.Y݊/1@ "BUPpPS2 fbIUNZVfjfْrIgv'owg~?Jh"衊.hoNJi[%jinEv jf)B M*BŠkidMPӌ !k]k]C̦c^mY ȑ!ig:124nwM@ pʠB隋*ӡFStB[.TBh 6@ o_PQMuS421L9%"R 7Vq.kqZk3*׀1mo97ha3rF5rq1 }ZfDu֕&s!OlQsivڋZP'6qwnv~"X7` ePnxM .| w喳-DP=,]@ ٛϸ,DXF% ;{"|| _foϽw~#~/~['+Dz+Hվc,LKuJֺ (?b M¿J ܲW0/&$C,/q} jlb;9)Xzp(TZ2 q*2 %7(J/f".H"ђ3)zI[Պ4Q!Usae pt52DaIׄ3#R1s0z3I"R!t0z<P?2v@PPP;XjQqwkxa.m9yAȫȺǹ_@p(4F"TGgjU)ֺ=d$ʕ 4P e+p>"92u.zT rBP & #LG&[ OdZNJXA! ,l%$@R!t1s0zGG3FQG>2PG1{A5mXj@owRy7s8yByBZoașȫȽc@p(F"TGM !LUL*[ cGd<"Hb1{wmP"e[!y{U"!"a jaB OUNENJ[A!,t%$2?>3#R1s0zGGOO&GGGPWfQpxeex&]5i|vY`xRa:g,g,l^~Abztźǽż`@p(<F"TGgzU)ֺ-|`+9qfK9Y`WL[ B'X$% 'X$GczB SP\N[ZJXA!,%4I!m1g1s<|>GGG>"{AE5c5iXd@uw{Rg:m9yByBoagŔȨȶǽc@p($F"TGgJU)ֺd6=. )ZX $B sT $"$[!FPC TJn{D[ZPA! ,%4==%$2?>3>$2HFPG={APPPXjqkek|kkqqkrxƂ”ŞŢĮN "f&I:'p,KR AR`#HJ.HiϨr*`4&ǃPXKu!,%o܁K&,ry8y[I]T!,4$3%=%$2?3>>I2H3>HG>"xĿmsåsŪsȡȣJ d&I:(@Bp @O 1 i" LEJ \^+7`Yoi:va!! ,%$23%@1Z!m>GGOO&GGGPWfQpxeex&]5i|vY`xRa:g,g,l^~Abztźǽż`@p(<F"TGgzU)ֺ-|`+9qfK9Y`WL[ B'X$% 'X$GczB SP\N[ZJXA! ,%$2?>3#R1s0z3>$2HFPG={APPPXjqkek|kkqqkrxƂ”ŞŢĮN "f&I:'p,KR AR`#HJ.HiϨr*`4&ǃPXKu!,%$2?>3#R1s0z>2@IZn!t<3>Hp6'c@owwlZZs*y7lD~K\sŨȽĴǼb@p(,F"TGgZU@cyR dDF(86%ͥr )\ {M $ Q%I%! mF#B SPVJKvNXA! ,%o܁K&,ry8y[I]T!,@0z^'j('cg,m9xLyBmsåsȫȽIJǹJ e&I:[— еx)F D.BE(@rp.DI^H :X5mh<Y!! ,%42?3%>3I"R!t0z<P?2v@PPP;XjQqwkxa.m9yAȫȺǹ_@p(4F"TGgjU)ֺ=d$ʕ 4P e+p>"92u.zT rBP & #LG&[ OdZNJXA! ,2=j p &V5o6u@o@ugrr®nŜȺŞƢǼP e&I:[— еx1ɥK\#CX@AiVJQ!-*ooYf xw; ׳B! , %==$$2?>3#R0z>1s>1y>=yFF%j(|f:GGGPGGkqllrZf:s8ZzgūȻĽǵ]@p(4F"TGgjU)ֺ P$˕<QE4ƒUlbpz&JX!&&XG [BSP\TZPA!,%o܁K&,ry8y[I]T!,=33##HK H4.`0(J&p[LV2A[Hv@{ZPPPPWrN&V@ulrZaa}UummxȜȳǻưǷĺǹ`@p($F"TGgJU)ֺ<ĕ 45|0Bɂu&AT'E!X sBX$ $[GcPC SZdN]TA!,42=j p &V5o6u@oHo@uPogrr®nŜȺŞƢǼP bf&I:[™ еxQJSd"C`̀a%.%ö 0f@xw; ׳B! ,<=F*o܁K&:,ry RA :,ʴ&OxÕ݊)! ,D%$23%@1Z!m>GGOO&GGGPWfQpxeex&]5i|vY`xRa:g,g,l^~Abztźǽż`@p(<F"TGgzU)ֺ-|`+9qfK9Y`WL[ B'X$% 'X$GczB SP\N[ZJXA! ,L%42?3%>3I"R!t0z<P?2v@PPP;XjQqwkxa.m9yAȫȺǹ_@p(4F"TGgjU)ֺ=d$ʕ 4P e+p>"92u.zT rBP & #LG&[ OdZNJXA!,T2=j p &V5o6u@o@ugrr®nŜȺŞƢǼP e&I:[— еx1ɥK\#CX@AiVJQ!-*ooYf xw; ׳B!,\@Ia1g1m0z1yG4G2yPPPP^rEa-g:m9s+xMyBKSihséxȠŤȯǼİǾe@p(DF"TGgU)֊-6!Ir*H("H%aq(d!|ToB#uh (vGeP( SP(JXT\ZTA! ,d%4==%$2?>3>$2HFPG={APPPXjqkek|kkqqkrxƂ”ŞŢĮP "f&I:'p,KR AR`#HJ.HihDmW 0A (,EՍ ! ,l%$2?>3#R1s0zGG3FQFG>2PG1{A5mXj@owRy7s8yByBZoașȫȽe@p(F"TGM LuL,[ „ gd>Xb3B{mP#e["y{U #"#a!j[ B OUNaNJ[A! ,%42?3%>3I"R!t0z<P?2v@PPP;XjQqwkxa.m9yAȫȺǹ_@p(4F"TGgjU)ֺ=d$ʕ 4P e+p>"92u.zT rBP & #LG&[ OdZNJXA! ,=>>2@IZn!t<3>Hp6'c@owwlZZs*y7lD~K\sŨȽĴǼb@p(,F"TGgZU@cyR dDF(86%ͥr )\ {M $ Q%I%! mF#B SPVJKvNXA!,%42?3%>3I"R!t0z<P?2v@PPP;XjQqwkxa.m9yAȫȺǹ_@p(4F"TGgjU)ֺ=d$ʕ 4P e+p>"92u.zT rBP & #LG&[ OdZNJXA!,%o܁K&,ry8y[I]T! ,43%@"Z"gHv@{ZPPPPWrN&V@ulrZaa}UummxȜȳǻưǷĺǹ`@p($F"TGgJU)ֺ<ĕ 45|0Bɂu&AT'E!X sBX$ $[GcPC SZdN]TA! ,$22HO4v@5i@owqZrCåsdzķĹG d&I:[“ еۻ D;" Ǣ8.`Lhc h,dɳμVvp!,%$@R!t1s0zGG3FQG>2PG1{A5mXj@owRy7s8yByBZoașȫȽc@p(F"TGM !LUL*[ cGd<"Hb1{wmP"e[!y{U"!"a jaB OUNENJ[A! ,%$2?>3#R1s0z3@R!m1ss&]?jIzQ``IRg-KShaamxƐȡȬöǻǷǻĦǩųl@p(lF"TGgڒU)֊E0-LBZ%J@$@+ %WTB -), PB"-SB-L* H,-OT (KZNXA! ,2%o܁K&*,r#U'kVq3wWL! ,=>>2@IZn!t<3>Hp6'c@owwlZZs*y7lD~K\sŨȽĴǼb@p(,F"TGgZU@cyR dDF(86%ͥr )\ {M $ Q%I%! mF#B SPVJKvNXA!,2=%=Y4W~_Q0kkq&]@ullr€RRqjéxǽĞDzM "f&I:[ؘ` 2vH"_XBHTDjtGـ550L.@=-W.s]s<-! ,2=j p &V5o6u@o@ugrr®nŜȺŞƢǼP e&I:[— еx1ɥK\#CX@AiVJQ!-*ooYf xw; ׳B! ,%==$$2?>3#R0z>1s>1y>=yFF%j(|f:GGGPGGkqllrZf:s8ZzgūȻĽǵ]@p(4F"TGgjU)ֺ P$˕<QE4ƒUlbpz&JX!&&XG [BSP\TZPA!, %$23%@1Z!m>GGOO&GGGPWfQpxeex&]5i|vY`xRa:g,g,l^~Abztźǽż`@p(<F"TGgzU)ֺ-|`+9qfK9Y`WL[ B'X$% 'X$GczB SP\N[ZJXA! ,=>>2@IZn!t<3>Hp6'c@owwlZZs*y7lD~K\sŨȽĴǼb@p(,F"TGgZU@cyR dDF(86%ͥr )\ {M $ Q%I%! mF#B SPVJKvNXA!,%42?3%>3I"R!t0z<P?2v@PPP;XjQqwkxa.m9yAȫȺǹ_@p(4F"TGgjU)ֺ=d$ʕ 4P e+p>"92u.zT rBP & #LG&[ OdZNJXA!,$2=j p &V5o6u@o@ugrr®nŜȺŞƢǼP e&I:[— еx1ɥK\#CX@AiVJQ!-*ooYf xw; ׳B!,,@Ia1g1m0z1yG4G2yPPPP^rEa-g:m9s+xMyBKSihséxȠŤȯǼİǾe@p(DF"TGgU)֊-6!Ir*H("H%aq(d!|ToB#uh (vGeP( SP(JXT\ZTA! ,4=&o܁K&*,ry8T`BKqѕ ! ,<%$@R!t1s0zGG3FQG>2PG1{A5mXj@owRy7s8yByBZoașȫȽc@p(F"TGM !LUL*[ cGd<"Hb1{wmP"e[!y{U"!"a jaB OUNENJ[A! ,D%$2?>3#R1s0zGGOO&GGGPWfQpxeex&]5i|vY`xRa:g,g,l^~Abztźǽż`@p(<F"TGgzU)ֺ-|`+9qfK9Y`WL[ B'X$% 'X$GczB SP\N[ZJXA! ,T#4#?=IZ3>$2HFPG={APPPXjqkek|kkqqkrxƂ”ŞŢĮN "f&I:'p,KR AR`#HJ.HiϨr*`4&ǃPXKu!,l2=%=Y4W~_Q0kkq&]@ullr€RRqjéxǽĞDzM "f&I:[ؘ` 2vH"_XBHTDjtGـ550L.@=-W.s]s<-! ,t2=j p &V5o6u@o@ugrr®nŜȺŞƢǼP e&I:[— еx1ɥK\#CX@AiVJQ!-*ooYf xw; ׳B! ,|2=%=Y4W~F_Q0kkq&]@ullr€RRqjéxǽĞDzO bf&I:[٨d Y2L$@T.I!-*OQU n$($PvK6 4{ ! ,=>>2@IZn!t<3>Hp6'c@owwlZZs*y7lD~K\sŨȽĴǼb@p(,F"TGgZU@cyR dDF(86%ͥr )\ {M $ Q%I%! mF#B SPVJKvNXA!,%o܁K&,ry8y[I]T! ,4Ol?^xW&v@{A'i5c@o`ĺǼE)RW$(b*$ q'% ?d.cS)-f$,E=_MxC"! ,4$3%=%$2?3>>I2H3>HG>"xĿmsåsŪsȡȣJ d&I:(@Bp @O 1 i" LEJ \^+7`Yoi:va!! ,%o܁K&,ry8y[I]T!,%$23%@1Z!m>GGOO&GGGPWfQpxeex&]5i|vY`xRa:g,g,l^~Abztźǽż`@p(<F"TGgzU)ֺ-|`+9qfK9Y`WL[ B'X$% 'X$GczB SP\N[ZJXA! ,(%4#92?$2==$3%=%>3$2?=3#3333>>>3>>>2@IRZi#H"S2H1X!k!t1i1s0zH>2x]c x xE~%FY>GG3FQ4Ol6X|IWI%L4Z&W4G>"G>2P?2j p d'j(p6G2yX>sGG1PG1PG=[P3jQv@{ApI{Z|f:GGGGPRPGG_XOPPPPWfPZrXjqQpxe_Oe__|f^gegggukwq|kkqqkwwq;HV ]&V&]&]'c?d?j5j5o6u@oXiQp@o@uPoQejjrtuw{  |vYiufl``gllrtxrxŀIVWZ.aaa.a-d:g,m9s+v7s*s8y7lCl^rCxMyBxL}UqjyB[cvKTZloaluztftmsåsŪsx†ŋȇȖ˜ƠšȭŪȸǬƴǻìð·ĴǻǽķĺżĞŢíóŻH*\ȰÇ#JHŋ3jȱǏ CIɓ(S\ɲ˗0cʜI͛8sɳϟ@pDEC6shцl @SA$ՌKm` Ӭ(~J3Ԫh*o +уT1ֽ.hIl7n?tы1~̌1?Y kX g &puh4X jUĭ{![wb>\u%qpkzg~;Zo^sOݹ f1 ǫG5%B8t1sMhR6uI Fp(3MH^BVERaMg@ UbEnЉ&EE4#I6F?"=SA!JgE)`B$]3\u$t,$YnOM@ ](S@C>da4@`I&O?D1ti3@fl#G;IO)|IxRP $A @J@9t=s@\z%2(J]ΠO+)i]E0E Z"&.O&{h2l+K9zBА*hj(髻*$P饙n?B*mA1l?;$@1pPp;X\i,<0KoBW|9˗BCAl̪jϒj:3&qzwB}`5"P!4:!XbA;\yMs,{#y:$8򂎒72rl^Dߌ]t߁]u+WHI7yU~ Ӻ^.x -Xۏ>zJ4K]ՃPu~wNk.SHg:o}HBV :ձN382s!$\: ΅ÝAڳ 2H6 {/A! ~D,}Ep"!- kMG5S)ѢFSUq!#@! Q :J ;vdw1Gə@9a@g(E<ʙje ,ď|Q~y$r^<0h1*)HPYfPuxƈa3\M@R!!L.۝WAEhGҚDH 2\`˅@s $AbR D:NxyQ5myX%7QWv |(hX%IKá؎n-"4H!(O24$(1UvɜrB҇> 'hPYP`0l#v9\%F2Oՠ}DՏ.FTNAD}_)Ђ l``~ܤƍtܘɌ@j38:BL SrdBkGOϴCvDŽ>웦8\6-QP>(X!Ȃb9ohhr4 Q*԰,?.' !w܃O`%Nշ=}^>e'4GVg>|-})*qCP/v|}4g&|P@P }23|ŧppyǁ]u&|y|.΢hRt ~2.8}hI pH\%-|D}@~nA7~ǃ@x!d8wXzhghQY(p 2 1 2dDuxe, rz q9L {(@8tw(H|}P?`hzA|a pf2(w[Xp‘6&O&Ҋ'ɸqxxNBbz؎ɣzxQHw@"H1,(.u >Vt ZO،HX42ѥ. Hꨍtq!-Ћa` x5I8˜Б($J" 6|sLAN7`W,4RI1eGMaI@`P9ZɕnٖANqKW8-zM^YIJ9|јKvp!\ D9oid i y Qp).Q#AY7ty#`șSG9vCgY)@-Yةѝe )㹞ٞ9YyI:ٟtA z :ZJڡ ":$z(*:&.0Ѣ2Z6z7J8<ڣ >B: DzHiJڤNP:TZ5!VZi\`bZfzAhljڦpIrZvtzz+!,2=j p &V5o6u@o@ugrr®nŜȺŞƢǼP e&I:[— еx1ɥK\#CX@AiVJQ!-*ooYf xw; ׳B! , @Ia1g1m0z1yG4G2yPPPP^rEa-g:m9s+xMyBKSihséxȠŤȯǼİǾe@p(DF"TGgU)֊-6!Ir*H("H%aq(d!|ToB#uh (vGeP( SP(JXT\ZTA!,%4==%$2?>3>$2HFPG={APPPXjqkek|kkqqkrxƂ”ŞŢĮP "f&I:'p,KR AR`#HJ.HihDmW 0A (,EՍ ! ,%$2?>3#R1s0zGG3FQFG>2PG1{A5mXj@owRy7s8yByBZoașȫȽe@p(F"TGM LuL,[ „ gd>Xb3B{mP#e["y{U #"#a!j[ B OUNaNJ[A!,4%42?3%>3I"R!t0z<P?2v@PPP;XjQqwkxa.m9yAȫȺǹ_@p(4F"TGgjU)ֺ=d$ʕ 4P e+p>"92u.zT rBP & #LG&[ OdZNJXA!,<=>>2@IZn!t<3>Hp6'c@owwlZZs*y7lD~K\sŨȽĴǼb@p(,F"TGgZU@cyR dDF(86%ͥr )\ {M $ Q%I%! mF#B SPVJKvNXA! ,D%42?3%>3I"R!t0z<P?2v@PPP;XjQqwkxa.m9yAȫȺǹ_@p(4F"TGgjU)ֺ=d$ʕ 4P e+p>"92u.zT rBP & #LG&[ OdZNJXA! ,L2H"g!mG>"j(p6ǶDzǹ4)RWJ ³7 I1Ob.5M()!,T#4#?=IZGGOO&GGGPWfQpxeex&]5i|vY`xRa:g,g,l^~Abztźǽż`@p(<F"TGgzU)ֺ-|`+9qfK9Y`WL[ B'X$% 'X$GczB SP\N[ZJXA! ,d%$@a"g!mFd'p6V5c5iGFQx}€Im9m9S[hì~ȝȽĽǷǾǵǹ[@p(F"TGg*U)֊]l$Ƃ-p.B}(U(LGh< "WTBFPBwSB L\ZN[TA! ,p<%4#4#?2?$2=3%=%>3$4>83#333>3>>>2@IRZan#H"T2H2Q1Z"g!m!t1g1m1s0zH>1y]c x x%FY>GG3FQFOWF%O&G4W4G>"G>2P?2j p d'j(q6G2yGG1PG1PG=v@{ApI|f:GGGGPPPGG_XOPPPPWfT^uXjqQpxe_Oe__|f^eeeekekekeexkwq|kkqqkwwq;EV&V&]'c?d5c5k5n6uGF@oXjXjQp@o@u@uQkqsw |vY`kltf`glrrrxxxrzĀIRZRZZZ.a.a-f:d:g,g,m9m9s+y7s*s8y7lDl^xUxMyByA~K\bvKKS[Ziokztahggzmwê{‡ŋȔÜȔȜțȠţȭŪȳŻĽǵƻİǷĴǾǼķĻŽŞŢ®ijƺH*\ȰÇ#JHŋ3jXB ]HR❪0-2xM$iRH@iрwz).P:CuЛB/ PZ1,Jun+W!s(݌ ?R°X,kA'>Q iׁ5sc%&mVAO0#$q} >Cg@SXJ(wP}CRR঍:~O#H͍)yaX33?N<l*xbzD ;˘EdO"2"%8\ 1jwal 'B2y"sCOXR bxP@zͷЗT_(9E(2P}gA@D[J+ID9T@TxX(7!ǎ+gD{;4BA; ?Dњ*O'K5@`0 @8,ʰ 8@?k ,fko @4J+JwIJF4 *-PPJ,p e`ACA-_FRR0;e6BTlp-tmxm6 P$Q~/, (5.xI!`, -i i {>yIc3gBcl'ä?wrY\`0E N@V*T,Z|Fƞ{P}AO_гbF昺~E Tz$K.-L@,W(YQQ$0 #0@ r^hl (ABTEXI\|nxw{}w|]TbWbYn]eYi\q^qextyfwqqA>B?\_^aceLCVM_V`X`czjzqls{|}ޟ"ߠ# $-ܪOݫSޮXS.0œÞŤƣȦɫèȫ˱ó˾́ŎɬҶ̽ɷҹѽيߏސ°ۻŴȹ˼Żի׫ӻ޵ߵýֽüƫ²źɼγ˽ H>*\ȐaHŋ3jȱǏ CIɓ(S\ɲ˗()ʔhƙ8+"O)ev,ѣH*]ʴӧPf|4翩~|WL1j>uAFOkυv%!B$ɮtJ˷߿ ,حa+^עhe̜A挙2j?~M^K9rH%2p۸sͻ߷5θM-R0`OK0\HoRNqV,f}Хc>0iҊo}6;eƁQ?w1a,avh($hl0="f!EO$PI>`A=i! @m$@:>y-H!pwE b!$0ooh['+͑'ihPcpa1!cGv sEt((EP案&JW$; BOI% nZ:5?'KJjO25 >%`Oop9#!6dgal>fgygh{ĆrhD>S!a|AHD>p=TG=sB0X;ȣA/Pࣅ=ѣA c0 Pa BҳA b1"#>P]Op{v0c0\Ik>r`cFMOb eov>u歷qGD܄n'7c =[ "N3@3P$,> +P6P*ȂO矇>z8l~63.L>=ZTXDP>c03.ds * 9dQz;۳ @8) @=/rL&1M$mBV7?MOy9(L WBQnn+ԃ84 ᙮f1\] RYx9Qáy#ڬ RHQj5p|@BÀ eE`MaD-O'`Q=:1|c$'IJZRmZA\=6MEִEmSMm\$:yZ$]=WD"[s@=TQGE=LIl a_# 6Ǒ-b:3إCe `G1-P@+aeḟ<ΖB"/Cz4'șR  D1Qd/0qюztBJRx(0lNxR%*TzN9ў{b8||G!P.Xj250_@=-*Lu*F U,O@ ֳrdX颺lK dG1OXI4{d'[RQSnBBB  ʺlgK 8I #V$eN"x2I6\l[+Р4.rN8ҭ̇q!eF~Ճ$P?LW i3L` AĘsGamM0n7{ _ Έd*sg4{ hDlJP k\^@NvqnH bj1]N։B8&`ÐJŕ.s#)3W\QPf 4_roOh.W8ЄC LJ[AMCccC0 htĜ2@:ܐ/0L!=51^,1Msb&6'ǑlؔE&DZfڿi;< %eG^r;ۺ.q]gS;Futw= }{ǀ_+ O8u-x?{v'yO\ݝw)W\ GN(OO \0 2Ϲw󞗼(qc.ANoJϧN[XϺַ{IŮ_|&6ۭ`Nx{t]JO ]O;߸'N!D,MIMMI[ZIMTMSUQUUPYZQVYSX^Y^LHeKErSNdSMyUPcUPnV]nYTeXSk^YfYXjUUu^c{bIMdMRePUiQUjSXwGKtHLtOS{POuQSrZZ}SUx^U{[[aQbvZjq`Yjeneg~mkqtlarintkr~sfvquvqyvxzyx}QKVV]b]fai`eclajkseqeqhvm{tvk},+4%>(ACUFYJ]J]~wnrw}x{ˆZUd[n]i`repatjmaqc|k}z{wA?^abdC@LCVM_V`Xadfhmzjwtus~ߠ#$ $-ݬS߯YSZ.0ȝÜɢ Ƣʪèʫ̬гȰрǍȎ̮ΰξշոӹͳӺӽ׽ؾۋݎİڻòɵ̼ùڮ⒕䶽⸻ٿƮóŸ˾ʽҶ *\ȰÇ#JHŋ3jȱǏ CIɓ(S,`D+cʜI͛8sɳO弧L0fԡ>kycMDp bd`ÊKٳh]{1cȐ#̲M^#Ξ=uV!C"$ #$?6rVB9ᢴn/gXmE#SM @VcQX6ؠ[JI^\%B!BBS1gM>joHOH aο(h>3ؓ`TQHPh=hq"D=F8A=k.~$K?)&& pJm`' UM$>L6Px\&kUC*% 4V'8Z@ ?#0h`Kj?| f_SD<`pewcWwehǔMi|p7.+,覫n@I4?]( x9XC8#씰MZ<L;0!KOO11{!tB񠱞*M LC/;,<ZA6d@%<Ȼ\w ~M^\k{!vq-anD;A׀5TR7O,M @s`2 <"#.o0<9 uɖ;dⶇnw˛6 Z̠7։|d#`FbSr攄yc@\D7ͥB Uyˋ{ $X*hK  tx8ִN;k#lYRyM"!xl4З0_iq(1GE.\8α5[ʃV B"(r +܃D.T- M(`}r%R;Vģ ݱ'MJ-7Yr k9/x piL b!q1i[@A+\/>}aKv;< x@:0+[>gmlg/vgFdVf(9, m-v:Mzη~o@~a$ N;g#cSϸ7jBA [Wr+0˥8Ϲw0 sl[Hn{'PԧN[XϺַ{`Ng4ڱ~aOqUwԏxϻ';B! , %$2=h1Z=+2 HL L`ADpP3jȑ"F(1с7vxA;ʜISA#6^߯H*]ʔ 9`pMj_0JٳpGʝK.. kSʮ߿oP. ^̸cHKLnʘ3kVzyϠ vMqO^ͺװc˞M۸sͻ Nȓ+_μУKNسkνËOӫ_Ͼ˟OϿ(h& 6F(Vhfv ($h(,0(4h8<@)DiH&L6PF)TViXf\v`)dihlp)tix|矀*蠄j衈&袌6裐F*餔Vj饘f馜v駠*ꨤjꩨꪬ꫰*무j뭸뮼+k&6F+Vkfv+k覫+k,l' 7G,Wlgw ,$l(,0,4l8<@-DmH'L7PG-TWmXg\w`-dmhlp-tmx|߀.n'7G.Wngw砇.褗n騧ꬷ.n/o'7G/Wogw/eo觯/o HL:'H Z̠7z GH(L WB!,$%4==%$2?>3>$2HFPG={APPPXjqkek|kkqqkrxƂ”ŞŢĮN "f&I:'p,KR AR`#HJ.HiϨr*`4&ǃPXKu! ,,43%@"Z"gHv@{ZPPPPWrN&V@ulrZaa}UummxȜȳǻưǷĺǹ`@p($F"TGgJU)ֺ<ĕ 45|0Bɂu&AT'E!X sBX$ $[GcPC SZdN]TA! ,4$2=>>2@IZn!t<3>Hp6'c@owwlZZs*y7lD~K\sŨȽĴǼd@p(<F"TGgzUyR -lHFh@:'Nr 4N{H& Q'I '#mF%B SPVJKvNXA! ,<%$23%@1Z!m>GGOO&GGGPWfQpxeex&]5i|vY`xRa:g,g,l^~Abztźǽż`@p(<F"TGgzU)ֺ-|`+9qfK9Y`WL[ B'X$% 'X$GczB SP\N[ZJXA!,D%o܁K&,ry8y[I]T! ,L43%@"Z"gHv@{ZPPPPWrN&V@ulrZaa}UummxȜȳǻưǷĺǹ`@p($F"TGgJU)ֺ<ĕ 45|0Bɂu&AT'E!X sBX$ $[GcPC SZdN]TA!,T$2=33##H>2@IZn!t<3>Hp6'c@owwlZZs*y7lD~K\sŨȽĴǼb@p(,F"TGgZU@cyR dDF(86%ͥr )\ {M $ Q%I%! mF#B SPVJKvNXA! ,l42>3@R!m1ss&]?jIzQ``IRg-KShaamxƐȡȬöǻǷǻĦǩųl@p(lF"TGgڒU)֊E0-LBZ%J@$@+ %WTB -), PB"-SB-L* H,-OT (KZNXA! ,t@Ia1g0z >{f"B!t& &uGeP& SP&JX T\ZTA!,|2=%=Y4W~_Q0kkq&]@ullr€RRqjéxǽĞDzM "f&I:[ؘ` 2vH"_XBHTjGـ550L.@=-W.@<*! ,@0z^'j('cg,m9xLyBmsåsȫȽIJǹJ e&I:[— еx)F D.BE(@rp.DI^H :X5mh<Y!! ,%42@IZ1mHd'PP=v@ ]m,}UyBsåsȡȫȡǽǷĮĵǼT f&I:'P*l 05"`$̃A4} a\+ݯM6dmQ4]%}.M!!,4I1m"PPP5oH^m9s8yB}LxUyBsxȯǯǼR f&I:[š е`="gLDM L' B \ (-P@cG(H ^4^^w4!! ,$@1s0z3>Hd'PP=v@ ]m,}UyBsåsȡȫȡǽǷĮĵǼT f&I:'P*l 05"`$̃A4} a\+ݯM6dmQ4]%}.M!! ,4$=%$3#@1g1m>GQ^ d5v6v@PPFXPP5c5c5o_jY{@uYxJm,y7rCyB\oTȤůȶ©Ǽf@p(4F"T!1(BMC\M#_D#2ibń &R~^WC&VPC% LDOB&MB&QB INvJKWA!,%o܁K&,ry8y[I]T!,4#42>>2ZW^ d E&N?N5o@o@uIzIlrxlr€IZZs8ZWZagƬx“ȝȶĵǷǾŢǬǹd@p(|F"TGgU)֊@aVVGha.uP3#R0z1s^ F%j(p@|f:GGGPGGkqllrZf:s8ZzgūȻĽǵ]@p($F"TGgJU)֊]$FJEDHhBaTBL d4 {$JX$$[G [B SP\TZPA! ,%4==%$2?>3>$2HFPG={APPPXjqkek|kkqqkrxƂ”ŞŢĮN "f&I:'p,KR AR`#HJ.HiϨr*`4&ǃPXKu!,%4==%$2?>3>$2HFPG={APPPXjqkek|kkqqkrxƂ”ŞŢĮN "f&I:'p,KR AR`#HJ.HiϨr*`4&ǃPXKu! ,#4$=a!m>2ZW^ d E&N?N5o@o@uIzIlrxlr€IZZs8ZWZagƬx“ȝȶĵǷǾŢǬǹd@p(|F"TGgU)֊@aVVGha.uP3#R0z1s^ F%j(p@|f:GGGPGGkqllrZf:s8ZzgūȻĽǵ]@p($F"TGgJU)֊]$FJEDHhBaTBL d4 {$JX$$[G [B SP\TZPA!,%o܁K&,ry8y[I]T! , #4#?=IZ3I"R!t0z<P?2v@PPP;XjQqwkxa.m9yAȫȺǹ_@p(4F"TGgjU)ֺ=d$ʕ 4P e+p>"92u.zT rBP & #LG&[ OdZNJXA! ,@0z^'j('cg,m9xLyBmsåsȫȽIJǹJ e&I:[— еx)F D.BE(@rp.DI^H :X5mh<Y!!,$%o܁K&,ry8y[I]T! ,,%42@IZ1mHFv@{ZPPPPWrN&V@ulrZaa}UummxȜȳǻưǷĺǹa@p(4F"TGgjU)֊M"FJHLMBÄBL!#&z#XtB X& &[GdPC SZT\NXA!,<$2&o܁K&:,ry8T`BBҥM\! ,D%$23%@1Z!m>GGOO&GGGPWfQpxeex&]5i|vY`xRa:g,g,l^~Abztźǽż`@p(<F"TGgzU)ֺ-|`+9qfK9Y`WL[ B'X$% 'X$GczB SP\N[ZJXA! ,L$@1s0z3>Hd'PP=v@ ]m,}UyBsåsȡȫȡǽǷĮĵǼT f&I:'P*l 05"`$̃A4} a\+ݯM6dmQ4]%}.M!! ,T43%@"Z"gHv@{ZPPPPWrN&V@ulrZaa}UummxȜȳǻưǷĺǹ`@p($F"TGgJU)ֺ<ĕ 45|0Bɂu&AT'E!X sBX$ $[GcPC SZdN]TA! ,\$22HO4v@5i@owqZrCåsdzķĹG d&I:[“ еۻ D;" Ǣ8.`Lhc h,dɳμVvp!,d=>>2@IZn!t<3>Hp6'c@owwlZZs*y7lD~K\sŨȽĴǼb@p(,F"TGgZU@cyR dDF(86%ͥr )\ {M $ Q%I%! mF#B SPVJKvNXA! ,l%$2?>3#R1s0z3$3#$2?;3#>3>>>2AWh#H"X2H1Z!j!t1g1mH31m>1s]c x xEy%FY>GG8FQ4W{FO[I%L4^'W4G>"P?2f p g'd5s(s6X>sGG1PG=TP8v@pI{Z|f:GGGGPPPGGWTJPPPXPPPOlPWfPXrUguQpxe__q`O|fDvh^kekggukwq|kkushwsu;JV ] i&N&W&]?N'c?g5h5o6uH^@oXhQpY{@oAvIQkqvuqq  |vYYi|qcl`hurrxxxlrrxƁIXXZ.aaa-d:i,m9s+t7s*x7ZWlDl^rC}]rCxMyByL|UqfyB\\bosuKSZhduzthtmsåm§vÕȔȜȜȠŤšȫŪȹĵǬƯȴǻŲĶĴǻƽĺĞĨijƺH*\ȰÇ#JHŋ3jȱǏ CIɓ(S\ɲ˗0v0bMČÞSAqfMFm\j(SPIh{-DHv 0< r^Oiu@Z>eV5h(ʋpAn0pW,r@FBƎ+md\<| _3hb]3E-HD^52P8лB71.mz E؜c;w1v^c?X >У`*}!? 1$x"PB:?EO c,<2nS C%p-</s m n"[ ;l/6+ Nt+Kl =A$$%8DO ٧@XS@^cB!|46e=?/6A0_w #p/E>y]wBl 7梗"wσ-/1{qD{;!Ox$֖e 䅁p?-D˛BGf0X?q5 ɢRTK0,$j/Wm )&JS D[*CȐ6ġWtX~Q 6СrlY:C8BZрi!g @Ƈ{bXHăp ͵TLG +1 QC ~ dV+xA%.Z#Hvpvw,cȸG7i┼ RT듡%LJU$lM$B$\рs4O.~r4 "հT47/l ku$& Ypf bb!cqEn{ RTnO5>ANlfh }+!Rk; WZe?z~5PRl){ִH,0KQ#^` TkC2 D^IT5c~lb )p^Yسv AH㹯` /`IJLRȰ@ +ӖatZ BĠ^~MKޘ+p@ u}?;7&0+BزB,ftC p1ae!|5p42pކ,@ˡ`9?z!B#Y"r_B憀tCLC D?vUX/޴[PO#tAPjVֲ6 `lmD [NMj[ζ폜+=ocNwbH-z7~@ >Oz֓5K>Q 7nj w9N$&ˁ.FOđN! ,)%2=h1ZGGOWF%{I{`;PPFX^r|lN4]Y{wlxRm9r]~A{osåsȡȺǹdzǻǾǼǹn@p(F"TGg:*F@ZlbcT/’ L']1$\tB$.3]J -!]B,"] 30%3F  SPRRNJ]A!,,)3%"Z1m0z>GW4XH1vY/PPFPPXX[[|||s8s*s8y7~A|buésǼR g&I:[žex%WQ FC1(Hʂ@\aCHyYΦqL%ɾ]w(!! ,4)%@O4uutrxU~AmsƩxȡȥǴ?)RWOP`>GW4XH1vY/PPFPPXX[[|||s8s*s8y7~A|buésǼR g&I:[žex%WQ FC1(Hʂ@\aCHyYΦqL%ɾ]w(!!,D)%#4=@a"a1m1s4W`?drFO4G>2v6v@{IdH jH GGPeQP&V5i@o@uYwllZa.s8ZɭǽǴǻǼh@p(lF"TGg4@L- X"Naѵ S1,~P-L&*B ]-)-(G"  SPR\TMR]A!,L)$2=4^~rr˜uĴŞŢ@)RW (SK+HF3d07<т>Q9I'3$MDFOV(! ,T)2%o܁K&*yc pQWBFm6sJ\!,\)2=%=Y4W~_Q0kkq&]@ullr€RRqjéxǽĞDzM "f&I:[ؘ` 2vH"_XBHTDjtGـ550L.@=-W.s]s<-! ,d)%$23%@1Z!m>GGOO&GGGPWfQpxeex&]5i|vY`xRa:g,g,l^~Abztźǽż`@p(<F"TGgzU)ֺ-|`+9qfK9Y`WL[ B'X$% 'X$GczB SP\N[ZJXA!,l)%o܁K&,ry8y[I]T! ,t)43%@"Z"gHv@{ZPPPPWrN&V@ulrZaa}UummxȜȳǻưǷĺǹ`@p($F"TGgJU)ֺ<ĕ 45|0Bɂu&AT'E!X sBX$ $[GcPC SZdN]TA! ,|)@Ia1g1m0z>2@IZn!t<3>Hp6'c@owwlZZs*y7lD~K\sŨȽĴǼd@p(,F"TGgZU@cyR dDF(86%ͥr ,J{H} $ Q %I%! mF#B SPVJKvNXA!,)2=%=Y4W~_Q0kkq&]@ullr€RRqjéxǽĞDzM "f&I:[ؘ` 2vH"_XBHTDjtGـ550L.@=-W.s]s<-! ,)43%@"Z"gHv@{ZPPPPWrN&V@ulrZaa}UummxȜȳǻưǷĺǹ`@p($F"TGgJU)ֺ<ĕ 45|0Bɂu&AT'E!X sBX$ $[GcPC SZdN]TA!,)2?@0z$@^'j('cg,m9xLyBmsåsȫȽIJǹO bf&I:[™ е۸ 1FL2cM,!& Ѡ&m[0Cuf[NG0{ ! ,)%42?3%>3I"R!t0z<P?2v@PPP;XjQqwkxa.m9yAȫȺǹ_@p(4F"TGgjU)ֺ=d$ʕ 4P e+p>"92u.zT rBP & #LG&[ OdZNJXA!,)%4==%$2?>3>$2HFPG={APPPXjqkek|kkqqkrxƂ”ŞŢĮN "f&I:'p,KR AR`#HJ.HiϨr*`4&ǃPXKu! ,)%o܁K&,ry8y[I]T! ,)4#42>>2ZW^ d E&N?N5o@o@uIzIlrxlr€IZZs8ZWZagƬx“ȝȶĵǷǾŢǬǹd@p(|F"TGgU)֊@aVVGha.uP>2@IZn!t<3>Hp6'c@owwlZZs*y7lD~K\sŨȽĴǼb@p(,F"TGgZU@cyR dDF(86%ͥr )\ {M $ Q%I%! mF#B SPVJKvNXA! ,)$@1s0z3>Hd'PP=v@ ]m,}UyBsåsȡȫȡǽǷĮĵǼT f&I:'P*l 05"`$̃A4} a\+ݯM6dmQ4]%}.M!! ,)%o܁K&,ry8y[I]T! ,)=>>2@IZn!t<3>Hp6'c@owwlZZs*y7lD~K\sŨȽĴǼb@p(,F"TGgZU@cyR dDF(86%ͥr )\ {M $ Q%I%! mF#B SPVJKvNXA!,)%$2?>3#R1s0z>2@IZn!t<3>Hp6'c@owwlZZs*y7lD~K\sŨȽĴǼb@p(,F"TGgZU@cyR dDF(86%ͥr )\ {M $ Q%I%! mF#B SPVJKvNXA! ,)%4I!m1g1s<|>GGG>"{AE5c5iXd@uw{Rg:m9yByBoagŔȨȶǽc@p($F"TGgJU)ֺd6=. )ZX $B sT $"$[!FPC TJn{D[ZPA!, )%4==%$2?>3>$2HFPG={APPPXjqkek|kkqqkrxƂ”ŞŢĮN "f&I:'p,KR AR`#HJ.HiϨr*`4&ǃPXKu!,)(%4#42?$2=2?5%>3$2?>3#>3>>>2@IXh"R"Z1Z!i!t1g1mH>>G$1y31y]c x xI~>GG3FQ4W`4W|4^~?drFOZI%L4^'W4G>"G>2P?2g h's(q6TG7ZP2u@{A{I{ZgH vY/{c:GGGGGPPGGPPFRSTPOlPWfRZrXjqQpxeQP|lNqk^kekiir|kkqqkwwv;H ] i&N&Y&]?N4]'c5c5i5i5o6u@oUfY{@o@uIQkquvw{  |vYjywri`kurrxxlrrxƀIVRZZaaa.a-e:i+m9s+s8s*w7ZWlDl^r]}]xUxMyBxL}UqjzB\|buuKWZdluzthtmsåmåséséx‡ŇɕǠšȭũȺĵûǭƴǼìųõĴǻƽŻĝħóƺH*\ȰÇ#JHŋ3jȱǏ CIɓ(S\r%K| e—1;jŧ|eS5_Ò3V$P*]ZD>٢Tb ( QKf5*h>xG̓k۾ƟDna퟿F*i.3޿nl'؄d46m톳+^gH+rbHN >]yts}}w&x:8zQ# :d(guQGm +@@-<`CǰO*v%[ A:cX(1[چw?) -Ȱ5@(V?aB\c;@U2ht) =?5 (RB<?9#6Hӌ%P xawP|S@3Ecq +"(D9X饙n @В `L<~?T1?$Y5q7 ' Yۜg~Ha/8 1`ӽY"AVy.#4LvG"x7/؊eA@"@w7R7k"mN%}:7P- !A0}Ȉ>0P!|l r $1ı!<'p2V3h`!@J,РE(]zDDuB@ ~&G>:фMb t\^ p@c8Ca-ka)C!f 0~X Q;Y\,ќfgqZ$3i* { ,#,QDgF M Qd1E$cT ;5|N1 6Y@ p[d)n(& -7˩btDU"P7Fp!'c8eOGDx1PU: .YQT -1EUsU@TH\KPAB%,6!pZijYD7e>Z-kcK[``jn9r pKaq$ptK\Rإud xC)/z׋^?{nrKJP2A[faxX|=Ǜ; ~ [x {xa&%>S"! ,==>>2@IZn!t<3>Hp6'c@owwlZZs*y7lD~K\sŨȽĴǼb@p(,F"TGgZU@cyR dDF(86%ͥr )\ {M $ Q%I%! mF#B SPVJKvNXA! ,=%$2?>3#R1s0z>2@IZn!t<3>Hp6'c@owwlZZs*y7lD~K\sŨȽĴǼb@p(,F"TGgZU@cyR dDF(86%ͥr )\ {M $ Q%I%! mF#B SPVJKvNXA!,4=%4I!m1g1s<|>GGG>"{AE5c5iXd@uw{Rg:m9yByBoagŔȨȶǽc@p($F"TGgJU)ֺd6=. )ZX $B sT $"$[!FPC TJn{D[ZPA! ,<=%4==%$2?>3>$2HFPG={APPPXjqkek|kkqqkrxƂ”ŞŢĮN "f&I:'p,KR AR`#HJ.HiϨr*`4&ǃPXKu!,D=%o܁K&,ry8y[I]T! ,L=%@jQf{s80)RWJppFkca^"! ,T=$@1s0z3>Hd'PP=v@ ]m,}UyBsåsȡȫȡǽǷĮĵǼT f&I:'P*l 05"`$̃A4} a\+ݯM6dmQ4]%}.M!!,\=%$2?>3#R1s0z3I"R!t0z<P?2v@PPP;XjQqwkxa.m9yAȫȺǹ_@p(4F"TGgjU)ֺ=d$ʕ 4P e+p>"92u.zT rBP & #LG&[ OdZNJXA! ,l=%$@R!t1s0zGG3FQG>2PG1{A5mXj@owRy7s8yByBZoașȫȽc@p(F"TGM !LUL*[ cGd<"Hb1{wmP"e[!y{U"!"a jaB OUNENJ[A! ,t=%$2?>3#R1s0zGGOO&GGGPWfQpxeex&]5i|vY`xRa:g,g,l^~Abztźǽż`@p(<F"TGgzU)ֺ-|`+9qfK9Y`WL[ B'X$% 'X$GczB SP\N[ZJXA! ,=%4I!m1g1s<|>GGG>"{AE5c5iXd@uw{Rg:m9yByBoagŔȨȶǽc@p($F"TGgJU)ֺd6=. )ZX $B sT $"$[!FPC TJn{D[ZPA!,=%4==%$2?>3>$2HFPG={APPPXjqkek|kkqqkrxƂ”ŞŢĮN "f&I:'p,KR AR`#HJ.HiϨr*`4&ǃPXKu! ,=%o܁K&,ry8y[I]T! ,=4$3%=%$2?3>>I2H3>HG>"xĿmsåsŪsȡȣJ d&I:(@Bp @O 1 i" LEJ \^+7`Yoi:va!!,=@0z^'j('cg,m9xLyBmsåsȫȽIJǹJ e&I:[— еx)F D.BE(@rp.DI^H :X5mh<Y!!,=%42?3%>3I"R!t0z<P?2v@PPP;XjQqwkxa.m9yAȫȺǹ_@p(4F"TGgjU)ֺ=d$ʕ 4P e+p>"92u.zT rBP & #LG&[ OdZNJXA!,=2=j p &V5o6u@o@ugrr®nŜȺŞƢǼP e&I:[— еx1ɥK\#CX@AiVJQ!-*ooYf xw; ׳B!,=%==$$2?>3#R0z>1s>1y>=yFF%j(|f:GGGPGGkqllrZf:s8ZzgūȻĽǵ]@p(4F"TGgjU)ֺ P$˕<QE4ƒUlbpz&JX!&&XG [BSP\TZPA! ,=%o܁K&,ry8y[I]T!,==33##HK H4.`0(J&p[LV2A[Hv@{ZPPPPWrN&V@ulrZaa}UummxȜȳǻưǷĺǹ`@p($F"TGgJU)ֺ<ĕ 45|0Bɂu&AT'E!X sBX$ $[GcPC SZdN]TA! ,=2=j p &V5o6u@oHo@uPogrr®nŜȺŞƢǼP bf&I:[™ еxQJSd"C`̀a%.%ö 0f@xw; ׳B!,==F*o܁K&:,ry RA :,ʴ&OxÕ݊)!, =%$23%@1Z!m>GGOO&GGGPWfQpxeex&]5i|vY`xRa:g,g,l^~Abztźǽż`@p(<F"TGgzU)ֺ-|`+9qfK9Y`WL[ B'X$% 'X$GczB SP\N[ZJXA!,=%42?3%>3I"R!t0z<P?2v@PPP;XjQqwkxa.m9yAȫȺǹ_@p(4F"TGgjU)ֺ=d$ʕ 4P e+p>"92u.zT rBP & #LG&[ OdZNJXA! ,=2=j p &V5o6u@o@ugrr®nŜȺŞƢǼP e&I:[— еx1ɥK\#CX@AiVJQ!-*ooYf xw; ׳B! ,$=@Ia1g1m0z1yG4G2yPPPP^rEa-g:m9s+xMyBKSihséxȠŤȯǼİǾe@p(DF"TGgU)֊-6!Ir*H("H%aq(d!|ToB#uh (vGeP( SP(JXT\ZTA!,,=%4==%$2?>3>$2HFPG={APPPXjqkek|kkqqkrxƂ”ŞŢĮP "f&I:'p,KR AR`#HJ.HihDmW 0A (,EՍ !,4=%$2?>3#R1s0zGG3FQFG>2PG1{A5mXj@owRy7s8yByBZoașȫȽe@p(F"TGM LuL,[ „ gd>Xb3B{mP#e["y{U #"#a!j[ B OUNaNJ[A! ,L=%42?3%>3I"R!t0z<P?2v@PPP;XjQqwkxa.m9yAȫȺǹ_@p(4F"TGgjU)ֺ=d$ʕ 4P e+p>"92u.zT rBP & #LG&[ OdZNJXA!,T==>>2@IZn!t<3>Hp6'c@owwlZZs*y7lD~K\sŨȽĴǼb@p(,F"TGgZU@cyR dDF(86%ͥr )\ {M $ Q%I%! mF#B SPVJKvNXA! ,\=%42?3%>3I"R!t0z<P?2v@PPP;XjQqwkxa.m9yAȫȺǹ_@p(4F"TGgjU)ֺ=d$ʕ 4P e+p>"92u.zT rBP & #LG&[ OdZNJXA! ,d=%o܁K&,ry8y[I]T!,l=%4==%$2?>3>$2HFPG={APPPXjqkek|kkqqkrxƂ”ŞŢĮN "f&I:'p,KR AR`#HJ.HiϨr*`4&ǃPXKu!,t=2=%=Y4W~_Q0kkq&]@ullr€RRqjéxǽĞDzM "f&I:[ؘ` 2vH"_XBHTDjtGـ550L.@=-W.s]s<-! ,|=2=j p &V5o6u@o@ugrr®nŜȺŞƢǼP e&I:[— еx1ɥK\#CX@AiVJQ!-*ooYf xw; ׳B! ,=2=%=Y4W~F_Q0kkq&]@ullr€RRqjéxǽĞDzO bf&I:[٨d Y2L$@T.I!-*OQU n$($PvK6 4{ ! ,==>>2@IZn!t<3>Hp6'c@owwlZZs*y7lD~K\sŨȽĴǼb@p(,F"TGgZU@cyR dDF(86%ͥr )\ {M $ Q%I%! mF#B SPVJKvNXA!,=%o܁K&,ry8y[I]T! ,=4Ol?^xW&v@{A'i5c@o`ĺǼE)RW$(b*$ q'% ?d.cS)-f$,E=_MxC"! ,=4$3%=%$2?3>>I2H3>HG>"xĿmsåsŪsȡȣJ d&I:(@Bp @O 1 i" LEJ \^+7`Yoi:va!! ,=%o܁K&,ry8y[I]T!,=%$23%@1Z!m>GGOO&GGGPWfQpxeex&]5i|vY`xRa:g,g,l^~Abztźǽż`@p(<F"TGgzU)ֺ-|`+9qfK9Y`WL[ B'X$% 'X$GczB SP\N[ZJXA!,=%42?3%>3I"R!t0z<P?2v@PPP;XjQqwkxa.m9yAȫȺǹ_@p(4F"TGgjU)ֺ=d$ʕ 4P e+p>"92u.zT rBP & #LG&[ OdZNJXA! ,=2=j p &V5o6u@o@ugrr®nŜȺŞƢǼP e&I:[— еx1ɥK\#CX@AiVJQ!-*ooYf xw; ׳B! ,=@Ia1g1m0z1yG4G2yPPPP^rEa-g:m9s+xMyBKSihséxȠŤȯǼİǾe@p(DF"TGgU)֊-6!Ir*H("H%aq(d!|ToB#uh (vGeP( SP(JXT\ZTA!,=%4==%$2?>3>$2HFPG={APPPXjqkek|kkqqkrxƂ”ŞŢĮP "f&I:'p,KR AR`#HJ.HihDmW 0A (,EՍ !,=%$2?>3#R1s0zGG3FQFG>2PG1{A5mXj@owRy7s8yByBZoașȫȽe@p(F"TGM LuL,[ „ gd>Xb3B{mP#e["y{U #"#a!j[ B OUNaNJ[A!,=%42?3%>3I"R!t0z<P?2v@PPP;XjQqwkxa.m9yAȫȺǹ_@p(4F"TGgjU)ֺ=d$ʕ 4P e+p>"92u.zT rBP & #LG&[ OdZNJXA! ,==>>2@IZn!t<3>Hp6'c@owwlZZs*y7lD~K\sŨȽĴǼb@p(,F"TGgZU@cyR dDF(86%ͥr )\ {M $ Q%I%! mF#B SPVJKvNXA! ,=%42?3%>3I"R!t0z<P?2v@PPP;XjQqwkxa.m9yAȫȺǹ_@p(4F"TGgjU)ֺ=d$ʕ 4P e+p>"92u.zT rBP & #LG&[ OdZNJXA!,=< %42?$2==$3%=%>3$2?<3#3333>>>3>>>2@IRZi#H"S2H1V!l!t1j1s0zH>1x]c x xE~%FY>GG3FQ4Ol4W~?^xHWH%K4Z&W4G>"G>2P?2j p d'j(j5p6G2yPG1PG=ZP4jQv@vI{A{Z|f:GGGPGG_XOPPPPWfP[rXjqQpxe_Oe__gegggukwq|kkqqkwwq;FV ]&V&]&]4V'c5c5c5i5k5o6uH^@oXiQs@o@uPoQissvw{  |vYjwfl`gllruxrxňVWaaa.a-e:g,m9s+s8y7s*s8y7lDl^rCxMyBzL{UqjyB\ubvKUZlluztagmtmsåsŪs©x‡ŋȇȔœȔȜțȠšȭŪȹǮƵǼìñ·ĴǽķĺļĞƢíóƻH*\ȰÇ#JHŋ3jȱǏ CIɓ(S\ɲ˗0cʜI͛8[hDEC6sgφn )Lr&4АTk&]4eVDzT߾%W xb5va7\b z2{۸ HSyTl jU-z!H{4043Ô@4ڈ#O?D1e]O~Us@e`#;É|O)mLƧz 2D'eYxOYͨ*y&BX!?daj@؈D Igtb%2*9mvB^Зa] nB~O6,;$ ٖʒ*룵ޚzjKd"dwే'G5L(3qO%3‘n@I@Ζs!C,1p.!76Q%0?Q=D}JI"̐,@(@<|,L8_?Ј7g<4PjY!JW4c6jCb5t|sg>@,3#s?'Nv#0Þ/B;5ળǣ3d4mu[ ?^v?}S9zbNA/?@+>|n=@u䱢Bs@o"MpN?@ ,qz_e|Q.)}+0; <hXhv"#ɲƐZ[KZ@؆:>J02!#5HB [,ja O)І8!B`yALV"!(+D|DFYcC()FmbCxpIb|hAU4"ޒ A `Q H&r-+bA]ҕDOiPIo:Ƥ?SrneQѨV1R k4Sq3a'G gs@#mv,L2 kfS&8 J?P-BA.C4ʁŝ" 4D&f > ~ ̳@2؄(0ZO"5@)c&@SL)kJ>QԧGA mZNGO_rNDإ?qT?)EթVDCEyUW4!^$3y!E+A*VFT O C)lT60IʫX3e/!YZ55w@ͬɃ͔o=V<Wh0 >jfӣ(U<D/,ZٛjGwWʌN5qDZ7eUF?BQf@Ld Wx3kU;[m[9n?iDCg K |,."?m. 3"&J@ @ ?L؄N؀@1OxX3>^4֥b8dME%%B(9KTe8tX> s!ag(v8XL`FYTtդ0G} ՈUc؉Wõc{hV5Ӗal*t8o. igVh_V$ Fgv:,w!%XJxؘڸ؍8X2~ea긎"Xx9(yX"'"ӏ舐i0S0a=#> "YH&*ْȒ.2YvH6d:ٓXȓ>LBY;HF&!,LHLKGWKG\NJRMJ[VGKSIL[GK[JMRMQQM]ZLZTQTSP_XU[KGaIDhNKbOLkMIvRNeSWjQR{X`u_bx`FIcKNmKNcNQlXTsFHsKNyMMqNQvQNsWVv\SzTR`PapVdnh[zf[dahjejkjnpelpmpzpcrststzONRQU[TZX^X^[d[d^j[f]icm`n`nfrizu~h|,+4%>(ABTEXI\|nxw{}w|]TbWbYn]eYi\q^qextyfwqqA>B?\_^aceLCVM_V`X`czjzqls{|}ޟ"ߠ# $-ܪOݫSޮXS.0œÞŤƣȦɫèȫ˱ó˾́ŎɬҶ̽ɷҹѽيߏސ°ۻŴȹ˼Żի׫ӻ޵ߵýֽüƫ²źɼγ˽ H>*\ȐaHŋ3jȱǏ CIɓ(S\ɲ˗()ʔhƙ8+"O)ev,ѣH*]ʴӧPf|4翩~|WL1j>uAFOkυv%!B$ɮtJ˷߿ ,حa+^עhe̜A挙2j?~M^K9rH%2p۸sͻ߷5θM-R0`OK0\HoRNqV,f}Хc>0iҊo}6;eƁQ?w1a,avh($hl0="f!EO$PI>`A=i! @m$@:>y-H!pwE b!$0ooh['+͑'ihPcpa1!cGv sEt((EP案&JW$; BOI% nZ:5?'KJjO25 >%`Oop9#!6dgal>fgygh{ĆrhD>S!a|AHD>p=TG=sB0X;ȣA/Pࣅ=ѣA c0 Pa BҳA b1"#>P]Op{v0c0\Ik>r`cFMOb eov>u歷qGD܄n'7c =[ "N3@3P$,> +P6P*ȂO矇>z8l~63.L>=ZTXDP>c03.ds * 9dQz;۳ @8) @=/rL&1M$mBV7?MOy9(L WBQnn+ԃ84 ᙮f1\] RYx9Qáy#ڬ RHQj5p|@BÀ eE`MaD-O'`Q=:1|c$'IJZRmZA\=6MEִEmSMm\$:yZ$]=WD"[s@=TQGE=LIl a_# 6Ǒ-b:3إCe `G1-P@+aeḟ<ΖB"/Cz4'șR  D1Qd/0qюztBJRx(0lNxR%*TzN9ў{b8||G!P.Xj250_@=-*Lu*F U,O@ ֳrdX颺lK dG1OXI4{d'[RQSnBBB  ʺlgK 8I #V$eN"x2I6\l[+Р4.rN8ҭ̇q!eF~Ճ$P?LW i3L` AĘsGamM0n7{ _ Έd*sg4{ hDlJP k\^@NvqnH bj1]N։B8&`ÐJŕ.s#)3W\QPf 4_roOh.W8ЄC LJ[AMCccC0 htĜ2@:ܐ/0L!=51^,1Msb&6'ǑlؔE&DZfڿi;< %eG^r;ۺ.q]gS;Futw= }{ǀ_+ O8u-x?{v'yO\ݝw)W\ GN(OO \0 2Ϲw󞗼(qc.ANoJϧN[XϺַ{IŮ_|&6ۭ`Nx{t]JO ]O;߸'N!,e%2=h1ZGGOO&GGGPWfQpxeex&]5i|vY`xRa:g,g,l^~Abztźǽż`@p(<F"TGgzU)ֺ-|`+9qfK9Y`WL[ B'X$% 'X$GczB SP\N[ZJXA!,,e%$2?>3#R1s0z3#R1s0z"m>GGFOO&GGGPWfQpxeex&]5i|vY`xRa:g,g,l^~Abztźǽżc@p(TF"TGgU)ֺ=)>j%\T@2hKƕJ B&*)m B*X '(#*X'G cTC SP\ZN[PA! ,Le%o܁K&,ry8y[I]T! ,MIMMI[ZIMTMSUQUUPYZQVYSX^Y^LHeKErSNdSMyUPcUPnV]nYTeXSk^YfYXjUUu^c{bIMdMRePUiQUjSXwGKtHLtOS{POuQSrZZ}SUx^U{[[aQbvZjq`Yjeneg~mkqtlarintkr~sfvquvqyvxzyx}QKVV]b]fai`eclajkseqeqhvm{tvk},+4%>(ACUFYJ]J]~wnrw}x{ˆZUd[n]i`repatjmaqc|k}z{wA?^abdC@LCVM_V`Xadfhmzjwtus~ߠ#$ $-ݬS߯YSZ.0ȝÜɢ Ƣʪèʫ̬гȰрǍȎ̮ΰξշոӹͳӺӽ׽ؾۋݎİڻòɵ̼ùڮ⒕䶽⸻ٿƮóŸ˾ʽҶ *\ȰÇ#JHŋ3jȱǏ CIɓ(S,`D+cʜI͛8sɳO弧L0fԡ>kycMDp bd`ÊKٳh]{1cȐ#̲M^#Ξ=uV!C"$ #$?6rVB9ᢴn/gXmE#SM @VcQX6ؠ[JI^\%B!BBS1gM>joHOH aο(h>3ؓ`TQHPh=hq"D=F8A=k.~$K?)&& pJm`' UM$>L6Px\&kUC*% 4V'8Z@ ?#0h`Kj?| f_SD<`pewcWwehǔMi|p7.+,覫n@I4?]( x9XC8#씰MZ<L;0!KOO11{!tB񠱞*M LC/;,<ZA6d@%<Ȼ\w ~M^\k{!vq-anD;A׀5TR7O,M @s`2 <"#.o0<9 uɖ;dⶇnw˛6 Z̠7։|d#`FbSr攄yc@\D7ͥB Uyˋ{ $X*hK  tx8ִN;k#lYRyM"!xl4З0_iq(1GE.\8α5[ʃV B"(r +܃D.T- M(`}r%R;Vģ ݱ'MJ-7Yr k9/x piL b!q1i[@A+\/>}aKv;< x@:0+[>gmlg/vgFdVf(9, m-v:Mzη~o@~a$ N;g#cSϸ7jBA [Wr+0˥8Ϲw0 sl[Hn{'PԧN[XϺַ{`Ng4ڱ~aOqUwԏxϻ';B! ,Te%$23%@1Z!m>GGOO&GGGPWfQpxeex&]5i|vY`xRa:g,g,l^~Abztźǽż`@p(<F"TGgzU)ֺ-|`+9qfK9Y`WL[ B'X$% 'X$GczB SP\N[ZJXA! ,\e2=%=Y4W~_Q0kkq&]@ullr€RRqjéxǽĞDzM "f&I:[ؘ` 2vH"_XBHTDjtGـ550L.@=-W.s]s<-! ,de%4==%$2?>3>$2HFPG={APPPXjqkek|kkqqkrxƂ”ŞŢĮN "f&I:'p,KR AR`#HJ.HiϨr*`4&ǃPXKu!,le%4==%$2?>3>$2HFPG={APPPXjqkek|kkqqkrxƂ”ŞŢĮN "f&I:'p,KR AR`#HJ.HiϨr*`4&ǃPXKu! ,te42>3@R!m1ss&]?jIzQ``IRg-KShaamxƐȡȬöǻǷǻĦǩųl@p(lF"TGgڒU)֊E0-LBZ%J@$@+ %WTB -), PB"-SB-L* H,-OT (KZNXA! ,|e2%o܁K&*,r#U'kVq3wWL!,e=>>2@IZn!t<3>Hp6'c@owwlZZs*y7lD~K\sŨȽĴǼb@p(,F"TGgZU@cyR dDF(86%ͥr )\ {M $ Q%I%! mF#B SPVJKvNXA!,e43%@"Z"gHv@{ZPPPPWrN&V@ulrZaa}UummxȜȳǻưǷĺǹ`@p($F"TGgJU)ֺ<ĕ 45|0Bɂu&AT'E!X sBX$ $[GcPC SZdN]TA! ,e$2&o܁K&:,ry8T`BBҥM\! ,e22HO4v@5i@owqZrCåsdzķĹD d&I:[’ е{I$3 (y**ɾX-muVٵSݨ! ,e%$2?>3#R1s0z >{f"B!t& &uGeP& SP&JX T\ZTA!,e%$2?>3#R1s0z>1y>=yF%j(|f:GGGPGGkqllrZf:s8ZzgūȻĽǵ\@p(F"TGg:U)ֺ Dɕ 6H-.BÈEd XrJX# #[G [B SP\dZNTA!,e%42?3%>3I"R!t0z<P?2v@PPP;XjQqwkxa.m9yAȫȺǹ_@p(4F"TGgjU)ֺ=d$ʕ 4P e+p>"92u.zT rBP & #LG&[ OdZNJXA! ,e=>>2@IZn!t<3>Hp6'c@owwlZZs*y7lD~K\sŨȽĴǼb@p(,F"TGgZU@cyR dDF(86%ͥr )\ {M $ Q%I%! mF#B SPVJKvNXA!,e%o܁K&,ry8y[I]T! ,e=>>2@IZn!t<3>Hp6'c@owwlZZs*y7lD~K\sŨȽĴǼb@p(,F"TGgZU@cyR dDF(86%ͥr )\ {M $ Q%I%! mF#B SPVJKvNXA! ,e$@1s0z3>Hd'PP=v@ ]m,}UyBsåsȡȫȡǽǷĮĵǼT f&I:'P*l 05"`$̃A4} a\+ݯM6dmQ4]%}.M!! ,e%$2?>3#R1s0z>2@IZn!t<3>Hp6'c@owwlZZs*y7lD~K\sŨȽĴǼb@p(,F"TGgZU@cyR dDF(86%ͥr )\ {M $ Q%I%! mF#B SPVJKvNXA! ,e%42?3%>3I"R!t0z<P?2v@PPP;XjQqwkxa.m9yAȫȺǹ_@p(4F"TGgjU)ֺ=d$ʕ 4P e+p>"92u.zT rBP & #LG&[ OdZNJXA! ,e%2?=%@1s0z<PG1GPXPPPVejRZs8s*s8lCToSasåsȩȶǼİd@p(F"T@#KjEPfv5HM4j!bt*Bw#~B}\t i~GmVC ENPLnVA!, e%4==%$2?>3>$2HFPG={APPPXjqkek|kkqqkrxƂ”ŞŢĮN "f&I:'p,KR AR`#HJ.HiϨr*`4&ǃPXKu! ,e%$2?>3#R1s0z3I"R!t0z<P?2v@PPP;XjQqwkxa.m9yAȫȺǹ_@p(4F"TGgjU)ֺ=d$ʕ 4P e+p>"92u.zT rBP & #LG&[ OdZNJXA! ,4e2=j p &V5o6u@o@ugrr®nŜȺŞƢǼP e&I:[— еx1ɥK\#CX@AiVJQ!-*ooYf xw; ׳B! ,<e%==$$2?>3#R0z>1s>1y>=yFF%j(|f:GGGPGGkqllrZf:s8ZzgūȻĽǵ]@p(4F"TGgjU)ֺ P$˕<QE4ƒUlbpz&JX!&&XG [BSP\TZPA!,eH( %42?$2==$6%>3$2?>3#>97@IRZj"T2H1Z"g!m!t1g1mH>"m>1s>1y>=y]c x x>GG3FQ4W{FOH%K4^'P?2j p d'j(s(p6X>sPG1PG=PP=[P0w@{Z|f:GGGGPXPGGPPPPOlPWfPZrXjqQpxqk^kekffv|kkqqk;ENV ] i&V&]&]'c'c?j5i5i5o6u6uVh@o@u@uIzQejkqtvqq  |vYi|f``glllruxrrxƀIRZRZaaa.a-f:b:g,m,g,m+m9s+s8s*s8y7lCl^}]rCxMxL}UqjzBZepKSZZhaluztamagmtmsåmåsx…ŔœȔȜȜȠšȫŪȳŻǬŵǻİóöĴǻƽķļĞƢìôŻH*\ȰÇ#JHŋ3jȱǏ CIɓ(S\ɲD S˛C()@5gW N@Ak4TX :`Ib*j֋ctlC.hMtRpΖۃ|2 $FTNki٦ q?O2h*ZB^؋*k jϼz*jqs?oڊ+tډTzP(%$8HN$ O#a"PX4?4xVv˯&$q ǡئ@w ;?O/O/˟?s:ǸCw YV:9 ! @]Q%lC ` !3 d5!AAP&D}3B#$\X) B5<F!dhaAP G?N U@,$i#YvBr8;y9 ?CN{G܁`r!Ph3$Gx< x=2ac@%s<(aӘ@H0YcLF?>8 a GsSt?Z UBLV03uBȱg4 P ;vDEˁϡMFq|Ftm(̐C3lgAC-1FԦ45 `Z(Dt^+cFkjp.@@RT U^SpZ6pe=@lͅ<8НRTȁ DO}c6mpQBު!Lx_-6 a%j'SiE\ yfzUֲ)QA& 0 mCdK[V#P˅ z6ap`[DA2ĹEuk2!v]C?*¡%ͯ~ -\J/N;_T L [X!Dž7a g 1?,8>W0>cL;6M 2cyRTH19P@,*Vr.^s,2_fNѬ6+n3,:vI!,y%2=h1ZK H4.`0(J&p[LV2A[3@R!m1ss&]?jIzQ``IRg-KShaamxƐȡȬöǻǷǻĦǩųl@p(lF"TGgڒU)֊E0-LBZ%J@$@+ %WTB -), PB"-SB-L* H,-OT (KZNXA! ,Dy423%@"Z"gHv@{ZPPPPWrN&V@ulrZaa}UummxȜȳǻưǷĺǹa@p(,F"TGgZU)֊ ƑJDJ @at>J!$z"XtBX% %[GdPC SZeN[LA!,Ly4I1m"PPP5oH^m9s8yB}LxUyBsxȯǯǼS f&I:[› еpA"_gPD C! `l" #dLc(/O4!!,Ty#423%>>>GPP5i@o@uyB9)RULt,€yJmO1O$;$Qy$KhSF! ,\y22HO4v@5i@owqZrCåsdzķĹD d&I:[’ е{I$3 (y**ɾX-muVٵSݨ! ,dy%$2?>3#R1s0zHv@{ZPPPPWrN&V@ulrZaa}UummxȜȳǻưǷĺǹ`@p($F"TGgJU)ֺ<ĕ 45|0Bɂu&AT'E!X sBX$ $[GcPC SZdN]TA! ,|y2?@0z$@^'j('cg,m9xLyBmsåsȫȽIJǹO bf&I:[™ е۸ 1FL2cM,!& Ѡ&m[0Cuf[NG0{ ! ,y%4==%$2?>3>$2HFPG={APPPXjqkek|kkqqkrxƂ”ŞŢĮN "f&I:'p,KR AR`#HJ.HiϨr*`4&ǃPXKu!,y42>3@R!m1ss&]?jIzQ``IRg-KShaamxƐȡȬöǻǷǻĦǩųl@p(lF"TGgڒU)֊E0-LBZ%J@$@+ %WTB -), PB"-SB-L* H,-OT (KZNXA!,y2%o܁K&*,r#U'kVq3wWL! ,y4I1m"PPP5oH^m9s8yB}LxUyBsxȯǯǼR f&I:[š е`="gLDM L' B \ (-P@cG(H ^4^^w4!! ,y%$23%@1Z!m>GGOO&GGGPWfQpxeex&]5i|vY`xRa:g,g,l^~Abztźǽż`@p(<F"TGgzU)ֺ-|`+9qfK9Y`WL[ B'X$% 'X$GczB SP\N[ZJXA!,y2=%=Y4W~_Q0kkq&]@ullr€RRqjéxǽĞDzM "f&I:[ؘ` 2vH"_XBHTDjtGـ550L.@=-W.s]s<-!,y@0z^'j('cg,m9xLyBmsåsȫȽIJǹJ e&I:[— еx)F D.BE(@rp.DI^H :X5mh<Y!!,y%42@IZ1mHv@{ZPPPPWrN&V@ulrZaa}UummxȜȳǻưǷĺǹ`@p($F"TGgJU)ֺ<ĕ 45|0Bɂu&AT'E!X sBX$ $[GcPC SZdN]TA!,y2?@0z$@^'j('cg,m9xLyBmsåsȫȽIJǹO bf&I:[™ е۸ 1FL2cM,!& Ѡ&m[0Cuf[NG0{ ! ,y%$2?>3#R1s0z>2@IZn!t<3>Hp6'c@owwlZZs*y7lD~K\sŨȽĴǼb@p(,F"TGgZU@cyR dDF(86%ͥr )\ {M $ Q%I%! mF#B SPVJKvNXA!,y%42?3%>3I"R!t0z<P?2v@PPP;XjQqwkxa.m9yAȫȺǹ_@p(4F"TGgjU)ֺ=d$ʕ 4P e+p>"92u.zT rBP & #LG&[ OdZNJXA! ,y%2?=%@1s0z<PG1GPXPPPVejRZs8s*s8lCToSasåsȩȶǼİd@p(F"T@#KjEPfv5HM4j!bt*Bw#~B}\t i~GmVC ENPLnVA! ,y%4==%$2?>3>$2HFPG={APPPXjqkek|kkqqkrxƂ”ŞŢĮN "f&I:'p,KR AR`#HJ.HiϨr*`4&ǃPXKu! , y%$2?>3#R1s0z3$2?;3#>3>>>2>>>ARZk#H"X2H1Z!j!t1mH$1y3GG3FQ4W|FOWH%O4^'W4G>"P?2j p d'j(s(s6X>sPG1PG=\P0v@{Z|f:GGGGPPGPXPGG_XOPPPPOlPWfPWrUhuQpxe__vcIqk^kekiiskwq|kktshwtt;NV i&X&]'c?j5i5k5o6uH^TgQp@o@u@uIzQejkquuqq  |vYi|cl``glllr}txrrxƀITWaaa.f:a:g,g,m+m9m9s8s*s8{7lCl^}]rCyBzL{UqhyBXhsuKSZhauztamagmtmsåmåsxĕȔȜțȡȫŪȸǬŴǼİƶĴǻƼķĻĞŤêijƺH*\ȰÇ#JHŋ3jȱǏ CIɓ(S^dEI#TdI89 @ M%9CBi="3%Q}0J"U# Z9UA.x!@o4Se2pMvm8ݮq2ߑeXk":6*NE~._'6!8iD`6 YSY \awӔ?o=6_} 8MeZ߃z%A34<YLSH@bϠO?@ B'Qy$B!YB\lp=tL萲 +тhJ SrקYk,P(H @ $0=߸TQl$u: T?Q!o! h3Q |a\!V*d㔪"A6RMc,G ?3gUBdC&r,i9|C.ܴk\s:) P)HnЎ$6ٔi!M8 JDJBY h,TͦsMmd.!*uƝed'xHL6r{\m;GӐ,z] 3,a6Ð!.iV2FC?iCtӞ> XK U",H +҅"c-L֏h:\GmsH]'hޠJMbuMqd'KY@ͬf{z,,hGKZMGNֺ"}lUZ[lw (HC:nyKNZJp\.sK]Nؕu]n-wK޳y^-{K_! ,%2=h1ZGGOO&GGGPWfQpxeex&]5i|vY`xRa:g,g,l^~Abztźǽż`@p(<F"TGgzU)ֺ-|`+9qfK9Y`WL[ B'X$% 'X$GczB SP\N[ZJXA! ,,43%@"Z"gHv@{ZPPPPWrN&V@ulrZaa}UummxȜȳǻưǷĺǹ`@p($F"TGgJU)ֺ<ĕ 45|0Bɂu&AT'E!X sBX$ $[GcPC SZdN]TA!,4$2&o܁K&:,ry8T`BBҥM\! ,<2=%=Y4W~_Q0kkq&]@ullr€RRqjéxǽĞDzM "f&I:[ؘ` 2vH"_XBHTDjtGـ550L.@=-W.s]s<-!,D=>>2@IZn!t<3>Hp6'c@owwlZZs*y7lD~K\sŨȽĴǼb@p(,F"TGgZU@cyR dDF(86%ͥr )\ {M $ Q%I%! mF#B SPVJKvNXA! ,L#423%>>>GPP5i@o@uyB9)RULt,€yJmO1O$;$Qy$KhSF! ,T%$23%@1Z!m>GGOO&GGGPWfQpxeex&]5i|vY`xRa:g,g,l^~Abztźǽż`@p(<F"TGgzU)ֺ-|`+9qfK9Y`WL[ B'X$% 'X$GczB SP\N[ZJXA! ,\%o܁K&,ry8y[I]T!,d%42?3%>3I"R!t0z<P?2v@PPP;XjQqwkxa.m9yAȫȺǹ_@p(4F"TGgjU)ֺ=d$ʕ 4P e+p>"92u.zT rBP & #LG&[ OdZNJXA! ,l%4==%$2?>3>$2HFPG={APPPXjqkek|kkqqkrxƂ”ŞŢĮN "f&I:'p,KR AR`#HJ.HiϨr*`4&ǃPXKu! ,t%$23%@1Z!m>GGOO&GGGPWfQpxeex&]5i|vY`xRa:g,g,l^~Abztźǽż`@p(<F"TGgzU)ֺ-|`+9qfK9Y`WL[ B'X$% 'X$GczB SP\N[ZJXA! ,|43%@"Z"gHv@{ZPPPPWrN&V@ulrZaa}UummxȜȳǻưǷĺǹ`@p($F"TGgJU)ֺ<ĕ 45|0Bɂu&AT'E!X sBX$ $[GcPC SZdN]TA!,$2&o܁K&:,ry8T`BBҥM\! ,43%@"Z"gHv@{ZPPPPWrN&V@ulrZaa}UummxȜȳǻưǷĺǹ`@p($F"TGgJU)ֺ<ĕ 45|0Bɂu&AT'E!X sBX$ $[GcPC SZdN]TA!,@Ia1g1m0z>2@IZn!t<3>Hp6'c@owwlZZs*y7lD~K\sŨȽĴǼd@p(,F"TGgZU@cyR dDF(86%ͥr ,J{H} $ Q %I%! mF#B SPVJKvNXA!,2=%=Y4W~_Q0kkq&]@ullr€RRqjéxǽĞDzM "f&I:[ؘ` 2vH"_XBHTDjtGـ550L.@=-W.s]s<-! ,43%@"Z"gHv@{ZPPPPWrN&V@ulrZaa}UummxȜȳǻưǷĺǹ`@p($F"TGgJU)ֺ<ĕ 45|0Bɂu&AT'E!X sBX$ $[GcPC SZdN]TA!,2?@0z$@^'j('cg,m9xLyBmsåsȫȽIJǹO bf&I:[™ е۸ 1FL2cM,!& Ѡ&m[0Cuf[NG0{ ! ,%42?3%>3I"R!t0z<P?2v@PPP;XjQqwkxa.m9yAȫȺǹ_@p(4F"TGgjU)ֺ=d$ʕ 4P e+p>"92u.zT rBP & #LG&[ OdZNJXA!,%4==%$2?>3>$2HFPG={APPPXjqkek|kkqqkrxƂ”ŞŢĮN "f&I:'p,KR AR`#HJ.HiϨr*`4&ǃPXKu! ,%o܁K&,ry8y[I]T! ,2=%=Y4W~_Q0kkq&]@ullr€RRqjéxǽĞDzM "f&I:[ؘ` 2vH"_XBHTDjtGـ550L.@=-W.s]s<-! ,@0z^'j('cg,m9xLyBmsåsȫȽIJǹJ e&I:[— еx)F D.BE(@rp.DI^H :X5mh<Y!!,%o܁K&,ry8y[I]T!,=>>2@IZn!t<3>Hp6'c@owwlZZs*y7lD~K\sŨȽĴǼb@p(,F"TGgZU@cyR dDF(86%ͥr )\ {M $ Q%I%! mF#B SPVJKvNXA! ,%$2?>3#R1s0z>2@IZn!t<3>Hp6'c@owwlZZs*y7lD~K\sŨȽĴǼb@p(,F"TGgZU@cyR dDF(86%ͥr )\ {M $ Q%I%! mF#B SPVJKvNXA! , %4I!m1g1s<|>GGG>"{AE5c5iXd@uw{Rg:m9yByBoagŔȨȶǽc@p($F"TGgJU)ֺd6=. )ZX $B sT $"$[!FPC TJn{D[ZPA! ,%4==%$2?>3>$2HFPG={APPPXjqkek|kkqqkrxƂ”ŞŢĮN "f&I:'p,KR AR`#HJ.HiϨr*`4&ǃPXKu!, ( %4#42?$2=2?3%=%>3$2?>3#>3>>>2>>>@IRZal"R"Z1Z"g!m!t1g1mH$1y31y]c x xE~>GG3FQ4W|FOL%G4^'G>"P?2j j(s(p6PG=]P0v@{A{Z|f:GGGGPPPGGPPPPOlPWfPWrP^rXjqQpxqk^kekeexkkq|kkqqk;EN i&V&]&]'c'c5c5i5i6u@oQdXdXj@o@u@uQkquwqqw{  |vY`kl|`l`glllrrxxrrxƁRZRZaaa.a-f:c:g,g,m+m9m9s+s*s8z7lDl^}]xMyBxL}UqjyA~K\bpKS[ZZiohuztamgmtmsåmåsx‡ŔȔȜțȠšȭũȳżƴǻìŰĶĴƽŻĞģ¬óŻH*\ȰÇ#JHŋ3jȱǏ CIɓ(S,IFXL mbH6o ոSR6ꔣ9 u9 t$tc!Vmnmwb݊;w} Z៦m9رɅE6~LqC [̙ 7c 1gʀ=LQE^7k%4Ǵ]e"=vB ɘsD@hݿp' ]vOˇ?sl1BN}w]}lc\$|.# {D4Te0p!i:!O4MlgPD8L P

% S(\O=.UhFI-JA Pqr<(D?  O/U- ꮘ0kúUX7,2{. '=Q]la蒻,X"lۊмס*@!c@" O:j0#C@Gq˨E0O-as e144\#cAj"  d7(=s7rЃ<\g=ssA= (=$ $%5DjB:6pr{SBUD@pgLբ"m ( 1J?<4ĸLe 1Ȩ G^0u=)ȓ@c sM']褛PۿCA'5" AY4,Eg As/~)qYvA&c-R'}|`4(7Oy0tl l?f(;XyHP?$" aDBLpC,Hu!=aMcR'QD!QFD?x"1pG+pcD'Bv## ‹`(hF4qM|"HL@U1>I+b'(y4. #Y@[!NLm2@քB!a͸( lZd05pÏ hsd1BLcM`+2fFdʸ)N N@5rJds ?6IB!t&( L mXSMp*y59"R"F`CZZ!6U%$`D B`*S rԁ=,VJՅpXUUzXհhMZֶ@kJ׺U!re]W} `T-,bؓ(lG+Z !ile^5TĢx=lfU6kcK4ζEmsoK\Mqܮ.Ml^K]N5I@!,=>>2@IZn!t<3>Hp6'c@owwlZZs*y7lD~K\sŨȽĴǼb@p(,F"TGgZU@cyR dDF(86%ͥr )\ {M $ Q%I%! mF#B SPVJKvNXA! ,%$2?>3#R1s0z>2@IZn!t<3>Hp6'c@owwlZZs*y7lD~K\sŨȽĴǼb@p(,F"TGgZU@cyR dDF(86%ͥr )\ {M $ Q%I%! mF#B SPVJKvNXA!,4%4I!m1g1s<|>GGG>"{AE5c5iXd@uw{Rg:m9yByBoagŔȨȶǽc@p($F"TGgJU)ֺd6=. )ZX $B sT $"$[!FPC TJn{D[ZPA! ,<%4==%$2?>3>$2HFPG={APPPXjqkek|kkqqkrxƂ”ŞŢĮN "f&I:'p,KR AR`#HJ.HiϨr*`4&ǃPXKu! ,D%o܁K&,ry8y[I]T!,L%@jQf{s80)RWJppFkca^"!,T$@1s0z3>Hd'PP=v@ ]m,}UyBsåsȡȫȡǽǷĮĵǼT f&I:'P*l 05"`$̃A4} a\+ݯM6dmQ4]%}.M!! ,\%$2?>3#R1s0z3I"R!t0z<P?2v@PPP;XjQqwkxa.m9yAȫȺǹ_@p(4F"TGgjU)ֺ=d$ʕ 4P e+p>"92u.zT rBP & #LG&[ OdZNJXA! ,l%$@R!t1s0zGG3FQG>2PG1{A5mXj@owRy7s8yByBZoașȫȽc@p(F"TGM !LUL*[ cGd<"Hb1{wmP"e[!y{U"!"a jaB OUNENJ[A!,t%$2?>3#R1s0zGGOO&GGGPWfQpxeex&]5i|vY`xRa:g,g,l^~Abztźǽż`@p(<F"TGgzU)ֺ-|`+9qfK9Y`WL[ B'X$% 'X$GczB SP\N[ZJXA! ,%4I!m1g1s<|>GGG>"{AE5c5iXd@uw{Rg:m9yByBoagŔȨȶǽc@p($F"TGgJU)ֺd6=. )ZX $B sT $"$[!FPC TJn{D[ZPA! ,%4==%$2?>3>$2HFPG={APPPXjqkek|kkqqkrxƂ”ŞŢĮN "f&I:'p,KR AR`#HJ.HiϨr*`4&ǃPXKu!,%o܁K&,ry8y[I]T! ,4$3%=%$2?3>>I2H3>HG>"xĿmsåsŪsȡȣJ d&I:(@Bp @O 1 i" LEJ \^+7`Yoi:va!! ,@0z^'j('cg,m9xLyBmsåsȫȽIJǹJ e&I:[— еx)F D.BE(@rp.DI^H :X5mh<Y!! ,%42?3%>3I"R!t0z<P?2v@PPP;XjQqwkxa.m9yAȫȺǹ_@p(4F"TGgjU)ֺ=d$ʕ 4P e+p>"92u.zT rBP & #LG&[ OdZNJXA! ,2=j p &V5o6u@o@ugrr®nŜȺŞƢǼP e&I:[— еx1ɥK\#CX@AiVJQ!-*ooYf xw; ׳B!,%==$$2?>3#R0z>1s>1y>=yFF%j(|f:GGGPGGkqllrZf:s8ZzgūȻĽǵ]@p(4F"TGgjU)ֺ P$˕<QE4ƒUlbpz&JX!&&XG [BSP\TZPA! ,%o܁K&,ry8y[I]T! ,%4==%$2?>3>$2HFPG={APPPXjqkek|kkqqkrxƂ”ŞŢĮN "f&I:'p,KR AR`#HJ.HiϨr*`4&ǃPXKu! ,2=%=Y4W~_Q0kkq&]@ullr€RRqjéxǽĞDzM "f&I:[ؘ` 2vH"_XBHTDjtGـ550L.@=-W.s]s<-!,2=j p &V5o6u@o@ugrr®nŜȺŞƢǼP e&I:[— еx1ɥK\#CX@AiVJQ!-*ooYf xw; ׳B!,2=%=Y4W~F_Q0kkq&]@ullr€RRqjéxǽĞDzO bf&I:[٨d Y2L$@T.I!-*OQU n$($PvK6 4{ ! ,=>>2@IZn!t<3>Hp6'c@owwlZZs*y7lD~K\sŨȽĴǼb@p(,F"TGgZU@cyR dDF(86%ͥr )\ {M $ Q%I%! mF#B SPVJKvNXA! , %o܁K&,ry8y[I]T!,4Ol?^xW&v@{A'i5c@o`ĺǼE)RW$(b*$ q'% ?d.cS)-f$,E=_MxC"! ,4$3%=%$2?3>>I2H3>HG>"xĿmsåsŪsȡȣJ d&I:(@Bp @O 1 i" LEJ \^+7`Yoi:va!! ,$%o܁K&,ry8y[I]T!,,%$23%@1Z!m>GGOO&GGGPWfQpxeex&]5i|vY`xRa:g,g,l^~Abztźǽż`@p(<F"TGgzU)ֺ-|`+9qfK9Y`WL[ B'X$% 'X$GczB SP\N[ZJXA!,4%42?3%>3I"R!t0z<P?2v@PPP;XjQqwkxa.m9yAȫȺǹ_@p(4F"TGgjU)ֺ=d$ʕ 4P e+p>"92u.zT rBP & #LG&[ OdZNJXA! ,<2=j p &V5o6u@o@ugrr®nŜȺŞƢǼP e&I:[— еx1ɥK\#CX@AiVJQ!-*ooYf xw; ׳B! ,D@Ia1g1m0z1yG4G2yPPPP^rEa-g:m9s+xMyBKSihséxȠŤȯǼİǾe@p(DF"TGgU)֊-6!Ir*H("H%aq(d!|ToB#uh (vGeP( SP(JXT\ZTA!,L%4==%$2?>3>$2HFPG={APPPXjqkek|kkqqkrxƂ”ŞŢĮP "f&I:'p,KR AR`#HJ.HihDmW 0A (,EՍ !,T%$2?>3#R1s0zGG3FQFG>2PG1{A5mXj@owRy7s8yByBZoașȫȽe@p(F"TGM LuL,[ „ gd>Xb3B{mP#e["y{U #"#a!j[ B OUNaNJ[A!,l%42?3%>3I"R!t0z<P?2v@PPP;XjQqwkxa.m9yAȫȺǹ_@p(4F"TGgjU)ֺ=d$ʕ 4P e+p>"92u.zT rBP & #LG&[ OdZNJXA! ,t=>>2@IZn!t<3>Hp6'c@owwlZZs*y7lD~K\sŨȽĴǼb@p(,F"TGgZU@cyR dDF(86%ͥr )\ {M $ Q%I%! mF#B SPVJKvNXA! ,|%42?3%>3I"R!t0z<P?2v@PPP;XjQqwkxa.m9yAȫȺǹ_@p(4F"TGgjU)ֺ=d$ʕ 4P e+p>"92u.zT rBP & #LG&[ OdZNJXA! ,< %42?$2==$3%=%>3$2?>3#3333>>>3>>>2@IRZi"S2H1W!m!t2j1s0zH>1s>1y>=y]c x xE~>GG3FQ4Ol4W~?^xHH%L4W&^'G>"G>2P?2j p d'j(j5p6G2yPG1PG=ZP4jQv@vI{A|f:GGGPGGPPPPWfP^rXjqQpxe_Ogeghht|kkqqk;E ]&V&]&]4V'c'c'i5c5c5i5k5o6uH^@oXhQv@o@uQf{kqsvw{  |vYjw`gllruxrxŃRZRZa.a-f:d:h,m9m9s+s8y7s*s8y7lDl^rCxMyBzLzUqjyB\ubKS[ZmmztagtmsåsŪs©x‡ŋȇȔœȔȜțȠšȭŪȳŻǮƵǼìİóĴǾķĺĽĞƢíóƻH*\ȰÇ#JHŋ3jȱǏ CIɓ(S\ɲ˗0c" DI#ll$&M 10Bʟ7e JhJy*59߿}1$J`'@HŬz5mk,ւ}jw.EhDmJf+:W #^6}[ĿI1?p;WʽR2&nV Z4iǦ-ZƜ5 (U.%X`ûNJsV8(d9g8DVM9e͟+>Q;oPB|V͋,U|A;T?؇?E6A0V)cL#\9b&_\? "X5?yaM%IUՃNX!r h"VX :0.d!\ gTZ`əP7~շ>8eseK96bB\*g&ɠPh"B'!viByD3x" : M \`?dGȐ'L2~z  8a㘠Vux\F M {$zp<DB@E3fA2A8f~W?uBd4j'\ 1g]E2Ptnb0ǐ:N{O104h(N~DbcC)F:ȤYDS"Qy֜(G2DH?YnXg >@0 A c|yf(/~%&Mŋ ,خhqY缿yss̜8 <'o·8-s D CY9 6qz!gCYs @5bzhl!8z ZNP3KfQ&(pRS4_՚X(4T^AC4|Xb )bOMaաI]>%;V FF}!QT 'tS6-?\ Ӎ0"d5+ZVFzrRK\l^IY0T Pjk o孀kh(ňU+XYŹsWWbu@TxuO3`w{Z#6y]nPq|-z/þe]WV^5Ԧ׼ەK~av"P qAX`Z$>@70H;$m D6HL%B&I ./jǐ/;Xq:rAl0 SQHJ=0sD2B !H8 )z%v'HSҘδ7N{ӠGMRԨNWVհn5TbMZ!-hOh0" k(=HiIf;;U+7p>ؾ4?;$TJJrA^f~tվw fh!mt0᱋0L3NIgjSA_hI[ZBo<1L@/ҷO=JP֏G`/g=Ep{!l,LHLKGWKG\NJRMJ[VGKSIL[GK[JMRMQQM]ZLZTQTSP_XU[KGaIDhNKbOLkMIvRNeSWjQR{X`u_bx`FIcKNmKNcNQlXTsFHsKNyMMqNQvQNsWVv\SzTR`PapVdnh[zf[dahjejkjnpelpmpzpcrststzONRQU[TZX^X^[d[d^j[f]icm`n`nfrizu~h|,+4%>(ABTEXI\|nxw{}w|]TbWbYn]eYi\q^qextyfwqqA>B?\_^aceLCVM_V`X`czjzqls{|}ޟ"ߠ# $-ܪOݫSޮXS.0œÞŤƣȦɫèȫ˱ó˾́ŎɬҶ̽ɷҹѽيߏސ°ۻŴȹ˼Żի׫ӻ޵ߵýֽüƫ²źɼγ˽ H>*\ȐaHŋ3jȱǏ CIɓ(S\ɲ˗()ʔhƙ8+"O)ev,ѣH*]ʴӧPf|4翩~|WL1j>uAFOkυv%!B$ɮtJ˷߿ ,حa+^עhe̜A挙2j?~M^K9rH%2p۸sͻ߷5θM-R0`OK0\HoRNqV,f}Хc>0iҊo}6;eƁQ?w1a,avh($hl0="f!EO$PI>`A=i! @m$@:>y-H!pwE b!$0ooh['+͑'ihPcpa1!cGv sEt((EP案&JW$; BOI% nZ:5?'KJjO25 >%`Oop9#!6dgal>fgygh{ĆrhD>S!a|AHD>p=TG=sB0X;ȣA/Pࣅ=ѣA c0 Pa BҳA b1"#>P]Op{v0c0\Ik>r`cFMOb eov>u歷qGD܄n'7c =[ "N3@3P$,> +P6P*ȂO矇>z8l~63.L>=ZTXDP>c03.ds * 9dQz;۳ @8) @=/rL&1M$mBV7?MOy9(L WBQnn+ԃ84 ᙮f1\] RYx9Qáy#ڬ RHQj5p|@BÀ eE`MaD-O'`Q=:1|c$'IJZRmZA\=6MEִEmSMm\$:yZ$]=WD"[s@=TQGE=LIl a_# 6Ǒ-b:3إCe `G1-P@+aeḟ<ΖB"/Cz4'șR  D1Qd/0qюztBJRx(0lNxR%*TzN9ў{b8||G!P.Xj250_@=-*Lu*F U,O@ ֳrdX颺lK dG1OXI4{d'[RQSnBBB  ʺlgK 8I #V$eN"x2I6\l[+Р4.rN8ҭ̇q!eF~Ճ$P?LW i3L` AĘsGamM0n7{ _ Έd*sg4{ hDlJP k\^@NvqnH bj1]N։B8&`ÐJŕ.s#)3W\QPf 4_roOh.W8ЄC LJ[AMCccC0 htĜ2@:ܐ/0L!=51^,1Msb&6'ǑlؔE&DZfڿi;< %eG^r;ۺ.q]gS;Futw= }{ǀ_+ O8u-x?{v'yO\ݝw)W\ GN(OO \0 2Ϲw󞗼(qc.ANoJϧN[XϺַ{IŮ_|&6ۭ`Nx{t]JO ]O;߸'N!D,MIMMI[ZIMTMSUQUUPYZQVYSX^Y^LHeKErSNdSMyUPcUPnV]nYTeXSk^YfYXjUUu^c{bIMdMRePUiQUjSXwGKtHLtOS{POuQSrZZ}SUx^U{[[aQbvZjq`Yjeneg~mkqtlarintkr~sfvquvqyvxzyx}QKVV]b]fai`eclajkseqeqhvm{tvk},+4%>(ACUFYJ]J]~wnrw}x{ˆZUd[n]i`repatjmaqc|k}z{wA?^abdC@LCVM_V`Xadfhmzjwtus~ߠ#$ $-ݬS߯YSZ.0ȝÜɢ Ƣʪèʫ̬гȰрǍȎ̮ΰξշոӹͳӺӽ׽ؾۋݎİڻòɵ̼ùڮ⒕䶽⸻ٿƮóŸ˾ʽҶ *\ȰÇ#JHŋ3jȱǏ CIɓ(S,`D+cʜI͛8sɳO弧L0fԡ>kycMDp bd`ÊKٳh]{1cȐ#̲M^#Ξ=uV!C"$ #$?6rVB9ᢴn/gXmE#SM @VcQX6ؠ[JI^\%B!BBS1gM>joHOH aο(h>3ؓ`TQHPh=hq"D=F8A=k.~$K?)&& pJm`' UM$>L6Px\&kUC*% 4V'8Z@ ?#0h`Kj?| f_SD<`pewcWwehǔMi|p7.+,覫n@I4?]( x9XC8#씰MZ<L;0!KOO11{!tB񠱞*M LC/;,<ZA6d@%<Ȼ\w ~M^\k{!vq-anD;A׀5TR7O,M @s`2 <"#.o0<9 uɖ;dⶇnw˛6 Z̠7։|d#`FbSr攄yc@\D7ͥB Uyˋ{ $X*hK  tx8ִN;k#lYRyM"!xl4З0_iq(1GE.\8α5[ʃV B"(r +܃D.T- M(`}r%R;Vģ ݱ'MJ-7Yr k9/x piL b!q1i[@A+\/>}aKv;< x@:0+[>gmlg/vgFdVf(9, m-v:Mzη~o@~a$ N;g#cSϸ7jBA [Wr+0˥8Ϲw0 sl[Hn{'PԧN[XϺַ{`Ng4ڱ~aOqUwԏxϻ';B!, %$2=h1Z=+2 &&@*ǰÇ1D Ã(ɓ(G` xa@ z$Sɳg&rs }*]ʔ \0lJ| LNTWÊM侦"˶^j@ѹxuw߿K LaJ+^81ǐ:L˘3k̹ϠCMӨS^ͺװc˞M۸sͻ Nȓ+_μУKNسkνËOӫ_Ͼ˟OϿ(h& 6F(Vhfv ($h(,0(4h8<@)DiH&䮒L6PF)TViXf\v`)dihlp)tix|矀*蠄j衈&袌6裐F*餔Vj饘f馜v駠*ꨤjꩨꪬ꫰*무j뭸뮼+k&6F+e! ,$4#42>>2ZW^ d E&N?N5o@o@uIzIlrxlr€IZZs8ZWZagƬx“ȝȶĵǷǾŢǬǹd@p(|F"TGgU)֊@aVVGha.uP3I"R!t0z<^ P?2s@PPP;XjQqwkxa.m9yAȫȺǹa@p(DF"TGgU)֊u 6FJeHPa (=P|T tBP ( %LG ([OT\ZNTA! ,442>3@R!m1ss&]?jIzQ``IRg-KShaamxƐȡȬöǻǷǻĦǩųl@p(lF"TGgڒU)֊E0-LBZ%J@$@+ %WTB -), PB"-SB-L* H,-OT (KZNXA!,<%$23%@1Z!m>GGOO&GGGPWfQpxeex&]5i|vY`xRa:g,g,l^~Abztźǽża@p(<F"TGgzU)֊>FF8 ,@d}C+UhN&[ B'X$% 'X$Gd{B SP\N[ZJXA!,D%o܁K&,ry8y[I]T!,L=>>2@IZn!t<3>Hp6'c@owwlZZs*y7lD~K\sŨȽĴǼb@p(,F"TGgZU@cyR dDF(86%ͥr )\ {M $ Q%I%! mF#B SPVJKvNXA!,T43%@"Z"gHv@{ZPPPPWrN&V@ulrZaa}UummxȜȳǻưǷĺǹ`@p($F"TGgJU)ֺ<ĕ 45|0Bɂu&AT'E!X sBX$ $[GcPC SZdN]TA! ,\$2&o܁K&:,ry8T`BBҥM\!,d%$23%@1Z!m>GGOO&GGGPWfQpxeex&]5i|vY`xRa:g,g,l^~Abztźǽż`@p(<F"TGgzU)ֺ-|`+9qfK9Y`WL[ B'X$% 'X$GczB SP\N[ZJXA! ,l%42?3%>3I"R!t0z<P?2v@PPP;XjQqwkxa.m9yAȫȺǹ_@p(4F"TGgjU)ֺ=d$ʕ 4P e+p>"92u.zT rBP & #LG&[ OdZNJXA!,t%$@a"g!mFd'p6V5c5iGFQx}€Im9m9S[hì~ȝȽĽǷǾǵǹ[@p(F"TGg*U)֊]l$Ƃ-p.B}(U(LGh< "WTBFPBwSB L\ZN[TA! ,|%$2?>3#R1s0z3@R!m1ss&]?jIzQ``IRg-KShaamxƐȡȬöǻǷǻĦǩųl@p(lF"TGgڒU)֊E0-LBZ%J@$@+ %WTB -), PB"-SB-L* H,-OT (KZNXA!,423%@"Z"gHv@{ZPPPPWrN&V@ulrZaa}UummxȜȳǻưǷĺǹa@p(,F"TGgZU)֊ ƑJDJ @at>J!$z"XtBX% %[GdPC SZeN[LA! ,4I1m"PPP5oH^m9s8yB}LxUyBsxȯǯǼS f&I:[› еpA"_gPD C! `l" #dLc(/O4!!,22HO4v@5i@owqZrCåsdzķĹD d&I:[’ е{I$3 (y**ɾX-muVٵSݨ! ,%o܁K&,ry8y[I]T!,4#42>>2ZW^ d E&N?N5o@o@uIzIlrxlr€IZZs8ZWZagƬx“ȝȶĵǷǾŢǬǹd@p(|F"TGgU)֊@aVVGha.uPH>=y^ s@{ZPPPPWrN&V@ulrZaa}UummxȜȳǻưǷĺǹa@p(,F"TGgZU)֊M ƑJEDJ @at>J$z"XtBX% %[GdPC SZT\NXA! ,$22HO4v@5i@owqZrCåsdzķĹG d&I:[“ еۻ D;" Ǣ8.`Lhc h,dɳμVvp! ,%$2@"g>GQG>"&VYfrRyB\htts~åmåsƩxȝȡȥǯâǼY g&I:'`*lUۄ&oӫ`ً,>/c yY=JiàfOg:|6}o0!!$,( %4#42?$2=3%>3$2?>3#>>2@IRZak"V2H1Z"g!m!t1mH$1y3=y]c x x>GG3FQ>GQ4WyFOW^ L%O4G>"P?2d j d'j(s(p6X>sXP1u@{Z|f:GGGPGGPPPPOlPWfPWrQpxqk^eex;ENV i&N&V&]?N'c?j5c5i5j5o6uGFH^QdXj@o@u@uIzIzIQkqttqq  |vYYg|cl``gllrrrrxxxlrvĀIRZRZaaa.f:a:g,g,m+m9m9s8s*s8y7ZWlDl^}]rCyB}L{UzA~K\bpK\S[ZZhavahmgmttms~åmås©xēȔȜȜȡȫũȳŻĵ½ǬŴǻƲ²ƶĴǼƽķŻžģǫijƺH*\ȰÇ#JHŋ3jȱǏ CIɓ(;qC/+4IAr}ү },l@У3J>n!X1*eD6f@:hkqOhah-*u m?Q:HxAkB†wu  =%@& @ùNmbL;6!t W.])[7M[W !6iԴa9qHbυ}/SF\?;CV+Gp# 1?@} /ܗ|@,39܀P~NX!#|hգ ; zBZ?BTscy`@gAVB@P?$ PU>O!|!وin )O, (q#Uف;c% ى*> j @J͢?h켢?P\? fcΤ@7aP 2P("R`Yи X? <Z".ΪiCJK +N#(Fx +E3 C6<?̤h2! qajwA-36O.\<̮  i , J580fBt;P58#c@E)u, U.P0#._ACK0E:xn8y;803'e@)"**ɣ33lJ#"ؓBC8> BOg@+6B} x" ǐUT(1\ F ̡XEK^ ?@s>!ha cFZ<E-|a 2 H3̥BD v$u0Cp.zH)@0Qp ~ @.A=rcC(Ď9ˣ@y%dV.b~,H'?RBD Ը*LT,gIZ)&K-wˆ- 0 K ,&2iKe2t&4JiR! X%XuLE%/%gH)zrE(~J /)ЂNM(1 І*5(D#*ЉR! ,)%2=h1Z3I"R!t0z<P?2v@PPP;XjQqwkxa.m9yAȫȺǹ_@p(4F"TGgjU)ֺ=d$ʕ 4P e+p>"92u.zT rBP & #LG&[ OdZNJXA! ,,)%$23%@1Z!m>GGOO&GGGPWfQpxeex&]5i|vY`xRa:g,g,l^~Abztźǽż`@p(<F"TGgzU)ֺ-|`+9qfK9Y`WL[ B'X$% 'X$GczB SP\N[ZJXA!,4)%o܁K&,ry8y[I]T! ,<)%42?3%>3I"R!t0z<P?2v@PPP;XjQqwkxa.m9yAȫȺǹ_@p(4F"TGgjU)ֺ=d$ʕ 4P e+p>"92u.zT rBP & #LG&[ OdZNJXA!,D)%o܁K&,ry8y[I]T!,L)%$23%@1Z!m>GGOO&GGGPWfQpxeex&]5i|vY`xRa:g,g,l^~Abztźǽż`@p(<F"TGgzU)ֺ-|`+9qfK9Y`WL[ B'X$% 'X$GczB SP\N[ZJXA! ,T)%4I!m1g1s<|>GGG>"{AE5c5iXd@uw{Rg:m9yByBoagŔȨȶǽc@p($F"TGgJU)ֺd6=. )ZX $B sT $"$[!FPC TJn{D[ZPA! ,\)%4==%$2?>3>$2HFPG={APPPXjqkek|kkqqkrxƂ”ŞŢĮN "f&I:'p,KR AR`#HJ.HiϨr*`4&ǃPXKu!,d)2=%=Y4W~_Q0kkq&]@ullr€RRqjéxǽĞDzM "f&I:[ؘ` 2vH"_XBHTDjtGـ550L.@=-W.s]s<-! ,l)=>>2@IZn!t<3>Hp6'c@owwlZZs*y7lD~K\sŨȽĴǼb@p(,F"TGgZU@cyR dDF(86%ͥr )\ {M $ Q%I%! mF#B SPVJKvNXA! ,t)%$2?>3#R1s0zH>GG&Ny4WrFO^HGG={AvRpYGG3FQG>2PG1{A5mXj@owRy7s8yByBZoașȫȽc@p(F"TGM !LUL*[ cGd<"Hb1{wmP"e[!y{U"!"a jaB OUNENJ[A!,)%42?3%>3I"R!t0z<P?2v@PPP;XjQqwkxa.m9yAȫȺǹ_@p(4F"TGgjU)ֺ=d$ʕ 4P e+p>"92u.zT rBP & #LG&[ OdZNJXA! ,)=>>2@IZn!t<3>Hp6'c@owwlZZs*y7lD~K\sŨȽĴǼb@p(,F"TGgZU@cyR dDF(86%ͥr )\ {M $ Q%I%! mF#B SPVJKvNXA!,)%42?3%>3I"R!t0z<P?2v@PPP;XjQqwkxa.m9yAȫȺǹ_@p(4F"TGgjU)ֺ=d$ʕ 4P e+p>"92u.zT rBP & #LG&[ OdZNJXA!,)%2?=%@1s0z<PG1GPXPPPVejRZs8s*s8lCToSasåsȩȶǼİd@p(F"T@#KjEPfv5HM4j!bt*Bw#~B}\t i~GmVC ENPLnVA! ,)%42?3%>3I"R!t0z<P?2v@PPP;XjQqwkxa.m9yAȫȺǹ_@p(4F"TGgjU)ֺ=d$ʕ 4P e+p>"92u.zT rBP & #LG&[ OdZNJXA! ,)%$23%@1Z!m>GGOO&GGGPWfQpxeex&]5i|vY`xRa:g,g,l^~Abztźǽż`@p(<F"TGgzU)ֺ-|`+9qfK9Y`WL[ B'X$% 'X$GczB SP\N[ZJXA!,)%$2?>3#R1s0z3$2?>3#>3>>>2@IRZl"R2Q1Z!m!t1gH]c x x>GG3FQ&Ny4Wr4W{FOF%O&G>"G>2P?2j j(s(p6^HGG=PG1PG=[P0v@{AvRpY<|f:GGGGPXPGGPPPPOlPWfXjqQpxqk^kekeexkkq|kkqqk;EV i&]&]'c5c5i5j6uQdXdXjXj_pQv@o@u@u@zQejkqf{k{rwqqw{  |vYY`kl|w`aglllrxxrrxƉJRZRZa.f:b:g,g,m+m9s8y7s*s8y7lCl^}]yBqjyA~K\TbopuS[ZZooztamagtsåmåséx‡ŋȔȔșțȫũȳźǯȶǼݶĴĻŽĞģ®ŻH*\ȰÇ#JHŋ3jȱǏ CIC0dP*4h^x+ b\|<ܐF^tB@^\B!"(A,t|4%e*օX(4.FB_bw! Rt t.<^%%Y`DVʩَB |c$/BHZ5넮a!u=e$  Vtמ@Or ]#|"zk[ z'O^ӫ_G(B7r B!:i 4F=Ơ!=;PG=(M=$`VЅnԃ7c :0M=@X80PfN zD JH!6⨣@QHW=XYNI#2?P$%$8LN$ @E6H= ȹ'}&gU+]@y@L"O$ĔSH|N)A" ]E=gŚ袂駡bt渒E=6^CS 1}F=

>2@IZn!t<3>Hp6'c@owwlZZs*y7lD~K\sŨȽĴǼb@p(,F"TGgZU@cyR dDF(86%ͥr )\ {M $ Q%I%! mF#B SPVJKvNXA! ,=%$2?>3#R1s0z>2@IZn!t<3>Hp6'c@owwlZZs*y7lD~K\sŨȽĴǼb@p(,F"TGgZU@cyR dDF(86%ͥr )\ {M $ Q%I%! mF#B SPVJKvNXA!,4=%4I!m1g1s<|>GGG>"{AE5c5iXd@uw{Rg:m9yByBoagŔȨȶǽc@p($F"TGgJU)ֺd6=. )ZX $B sT $"$[!FPC TJn{D[ZPA! ,<=%4==%$2?>3>$2HFPG={APPPXjqkek|kkqqkrxƂ”ŞŢĮN "f&I:'p,KR AR`#HJ.HiϨr*`4&ǃPXKu!,D=%o܁K&,ry8y[I]T! ,L=%@jQf{s80)RWJppFkca^"! ,T=%$23%@1Z!m>GGOO&GGGPWfQpxeex&]5i|vY`xRa:g,g,l^~Abztźǽż`@p(<F"TGgzU)ֺ-|`+9qfK9Y`WL[ B'X$% 'X$GczB SP\N[ZJXA! ,\=%42?3%>3I"R!t0z<P?2v@PPP;XjQqwkxa.m9yAȫȺǹ_@p(4F"TGgjU)ֺ=d$ʕ 4P e+p>"92u.zT rBP & #LG&[ OdZNJXA!,d=%$@a"g!mFd'p6V5c5iGFQx}€Im9m9S[hì~ȝȽĽǷǾǵǹ[@p(F"TGg*U)֊]l$Ƃ-p.B}(U(LGh< "WTBFPBwSB L\ZN[TA!,l=%$2?>3#R1s0z>2@IZn!t<3>Hp6'c@owwlZZs*y7lD~K\sŨȽĴǼb@p(,F"TGgZU@cyR dDF(86%ͥr )\ {M $ Q%I%! mF#B SPVJKvNXA!,=43%@"Z"gHv@{ZPPPPWrN&V@ulrZaa}UummxȜȳǻưǷĺǹ`@p($F"TGgJU)ֺ<ĕ 45|0Bɂu&AT'E!X sBX$ $[GcPC SZdN]TA! ,=$2&o܁K&:,ry8T`BBҥM\! ,=2H"g!mG>"j(p6ǶDzǹ4)RWJ ³7 I1Ob.5M()! ,=$=33#@Ra!m<j5v6N@uRffrIZm+m9rCgsƝȬǺưǷǵǼ\@p( F"TGM!J5|[""dV 6YEmAy!~mL !KUmJaNlNUA!,=43%@"Z"gHv@{ZPPPPWrN&V@ulrZaa}UummxȜȳǻưǷĺǹ`@p($F"TGgJU)ֺ<ĕ 45|0Bɂu&AT'E!X sBX$ $[GcPC SZdN]TA! ,=4I1m"PPP5oH^m9s8yB}LxUyBsxȯǯǼS f&I:[› еpA"_gPD C! `l" #dLc(/O4!!,==>>2@IZn!t<3>Hp6'c@owwlZZs*y7lD~K\sŨȽĴǼb@p(,F"TGgZU@cyR dDF(86%ͥr )\ {M $ Q%I%! mF#B SPVJKvNXA! ,=@Ia1g1m0z >{f"B!t& &uGeP& SP&JX T\ZTA!,=4I1m1y>=yG>"PPP5oH^m9s8yB}LxUyBsxȯǯǼS f&I:[› еpA"_gPD C! `l" #dLc(/O4!! ,==>>2@IZn!t<3>Hp6'c@owwlZZs*y7lD~K\sŨȽĴǼb@p(,F"TGgZU@cyR dDF(86%ͥr )\ {M $ Q%I%! mF#B SPVJKvNXA! ,=2H"g!mG>"j(p6ǶDzǹ4)RWJ ³7 I1Ob.5M()!,=%$@R!t1s0zGG3FQG>2PG1{A5mXj@owRy7s8yByBZoașȫȽc@p(F"TGM !LUL*[ cGd<"Hb1{wmP"e[!y{U"!"a jaB OUNENJ[A!,=%2?=%@1s0z<PG1GPXPPPVejRZs8s*s8lCToSasåsȩȶǼİd@p(F"T@#KjEPfv5HM4j!bt*Bw#~B}\t i~GmVC ENPLnVA! ,=%o܁K&,ry8y[I]T!,=%@jQf{s80)RWJppFkca^"! ,=$@1s0z3>Hd'PP=v@ ]m,}UyBsåsȡȫȡǽǷĮĵǼT f&I:'P*l 05"`$̃A4} a\+ݯM6dmQ4]%}.M!!,=%$2?>3#R1s0z3I"R!t0z<P?2v@PPP;XjQqwkxa.m9yAȫȺǹ_@p(4F"TGgjU)ֺ=d$ʕ 4P e+p>"92u.zT rBP & #LG&[ OdZNJXA! ,=%$@R!t1s0zGG3FQG>2PG1{A5mXj@owRy7s8yByBZoașȫȽc@p(F"TGM !LUL*[ cGd<"Hb1{wmP"e[!y{U"!"a jaB OUNENJ[A! ,=%$2?>3#R1s0zGGOO&GGGPWfQpxeex&]5i|vY`xRa:g,g,l^~Abztźǽż`@p(<F"TGgzU)ֺ-|`+9qfK9Y`WL[ B'X$% 'X$GczB SP\N[ZJXA!,D=%4I!m1g1s<|>GGG>"{AE5c5iXd@uw{Rg:m9yByBoagŔȨȶǽc@p($F"TGgJU)ֺd6=. )ZX $B sT $"$[!FPC TJn{D[ZPA! ,L=%4==%$2?>3>$2HFPG={APPPXjqkek|kkqqkrxƂ”ŞŢĮN "f&I:'p,KR AR`#HJ.HiϨr*`4&ǃPXKu!,T=%o܁K&,ry8y[I]T! ,\=4$3%=%$2?3>>I2H3>HG>"xĿmsåsŪsȡȣJ d&I:(@Bp @O 1 i" LEJ \^+7`Yoi:va!!,d=2=%=Y4W~_Q0kkq&]@ullr€RRqjéxǽĞDzM "f&I:[ؘ` 2vH"_XBHTDjtGـ550L.@=-W.s]s<-! ,l=%$@R!t1s0zGG3FQG>2PG1{A5mXj@owRy7s8yByBZoașȫȽc@p(F"TGM !LUL*[ cGd<"Hb1{wmP"e[!y{U"!"a jaB OUNENJ[A!,t=#4$=a!m3I"R!t0z<P?2v@PPP;XjQqwkxa.m9yAȫȺǹ_@p(4F"TGgjU)ֺ=d$ʕ 4P e+p>"92u.zT rBP & #LG&[ OdZNJXA!,=2=j p &V5o6u@o@ugrr®nŜȺŞƢǼP e&I:[— еx1ɥK\#CX@AiVJQ!-*ooYf xw; ׳B! ,=%==$$2?>3#R0z>1s>1y>=yFF%j(|f:GGGPGGkqllrZf:s8ZzgūȻĽǵ]@p(4F"TGgjU)ֺ P$˕<QE4ƒUlbpz&JX!&&XG [BSP\TZPA!,=%o܁K&,ry8y[I]T! ,=43%@"Z"gHv@{ZPPPPWrN&V@ulrZaa}UummxȜȳǻưǷĺǹ`@p($F"TGgJU)ֺ<ĕ 45|0Bɂu&AT'E!X sBX$ $[GcPC SZdN]TA! ,=$22HO4v@5i@owqZrCåsdzķĹG d&I:[“ еۻ D;" Ǣ8.`Lhc h,dɳμVvp!,=%$@R!t1s0zGG3FQG>2PG1{A5mXj@owRy7s8yByBZoașȫȽc@p(F"TGM !LUL*[ cGd<"Hb1{wmP"e[!y{U"!"a jaB OUNENJ[A!,=%$2?>3#R1s0z3@R!m1ss&]?jIzQ``IRg-KShaamxƐȡȬöǻǷǻĦǩųl@p(lF"TGgڒU)֊E0-LBZ%J@$@+ %WTB -), PB"-SB-L* H,-OT (KZNXA! ,=2%o܁K&*,r#U'kVq3wWL! ,==>>2@IZn!t<3>Hp6'c@owwlZZs*y7lD~K\sŨȽĴǼb@p(,F"TGgZU@cyR dDF(86%ͥr )\ {M $ Q%I%! mF#B SPVJKvNXA!,=2=%=Y4W~_Q0kkq&]@ullr€RRqjéxǽĞDzM "f&I:[ؘ` 2vH"_XBHTDjtGـ550L.@=-W.s]s<-!,=2=j p &V5o6u@o@ugrr®nŜȺŞƢǼP e&I:[— еx1ɥK\#CX@AiVJQ!-*ooYf xw; ׳B! , =%==$$2?>3#R0z>1s>1y>=yFF%j(|f:GGGPGGkqllrZf:s8ZzgūȻĽǵ]@p(4F"TGgjU)ֺ P$˕<QE4ƒUlbpz&JX!&&XG [BSP\TZPA! ,=%$23%@1Z!m>GGOO&GGGPWfQpxeex&]5i|vY`xRa:g,g,l^~Abztźǽż`@p(<F"TGgzU)ֺ-|`+9qfK9Y`WL[ B'X$% 'X$GczB SP\N[ZJXA!,==>>2@IZn!t<3>Hp6'c@owwlZZs*y7lD~K\sŨȽĴǼb@p(,F"TGgZU@cyR dDF(86%ͥr )\ {M $ Q%I%! mF#B SPVJKvNXA!,$=%42?3%>3I"R!t0z<P?2v@PPP;XjQqwkxa.m9yAȫȺǹ_@p(4F"TGgjU)ֺ=d$ʕ 4P e+p>"92u.zT rBP & #LG&[ OdZNJXA! ,,=2=j p &V5o6u@o@ugrr®nŜȺŞƢǼP e&I:[— еx1ɥK\#CX@AiVJQ!-*ooYf xw; ׳B!,4=@Ia1g1m0z1yG4G2yPPPP^rEa-g:m9s+xMyBKSihséxȠŤȯǼİǾe@p(DF"TGgU)֊-6!Ir*H("H%aq(d!|ToB#uh (vGeP( SP(JXT\ZTA! ,<=4$=3%=%$2?3>>I2H3>HG>"xĿmsåsŪsȡȣL "e&I:,Rp DP051q$ LIJ \^]epNe\:wX!,D=%o܁K&,ry8y[I]T! ,L=%$23%@1Z!m>GGOO&GGGPWfQpxeex&]5i|vY`xRa:g,g,l^~Abztźǽż`@p(<F"TGgzU)ֺ-|`+9qfK9Y`WL[ B'X$% 'X$GczB SP\N[ZJXA! ,T=%42?3%>3I"R!t0z<P?2v@PPP;XjQqwkxa.m9yAȫȺǹ_@p(4F"TGgjU)ֺ=d$ʕ 4P e+p>"92u.zT rBP & #LG&[ OdZNJXA!,\=2=j p &V5o6u@o@ugrr®nŜȺŞƢǼP e&I:[— еx1ɥK\#CX@AiVJQ!-*ooYf xw; ׳B!,d=@Ia1g1m0z1yG4G2yPPPP^rEa-g:m9s+xMyBKSihséxȠŤȯǼİǾe@p(DF"TGgU)֊-6!Ir*H("H%aq(d!|ToB#uh (vGeP( SP(JXT\ZTA! ,l=%4==%$2?>3>$2HFPG={APPPXjqkek|kkqqkrxƂ”ŞŢĮP "f&I:'p,KR AR`#HJ.HihDmW 0A (,EՍ ! ,t=%$2?>3#R1s0zGG3FQFG>2PG1{A5mXj@owRy7s8yByBZoașȫȽe@p(F"TGM LuL,[ „ gd>Xb3B{mP#e["y{U #"#a!j[ B OUNaNJ[A! ,=%42?3%>3I"R!t0z<P?2v@PPP;XjQqwkxa.m9yAȫȺǹ_@p(4F"TGgjU)ֺ=d$ʕ 4P e+p>"92u.zT rBP & #LG&[ OdZNJXA!,==>>2@IZn!t<3>Hp6'c@owwlZZs*y7lD~K\sŨȽĴǼb@p(,F"TGgZU@cyR dDF(86%ͥr )\ {M $ Q%I%! mF#B SPVJKvNXA! ,=%42?3%>3I"R!t0z<P?2v@PPP;XjQqwkxa.m9yAȫȺǹ_@p(4F"TGgjU)ֺ=d$ʕ 4P e+p>"92u.zT rBP & #LG&[ OdZNJXA!,=2H"g!mG>"j(p6ǶDzǹ4)RWJ ³7 I1Ob.5M()!,=#4#?=IZ3$2?<3#3333>>>3>>>2@IRZam"T2H1X"g!m!t2j1s0zH$1y=3x]c x xE{>GG3FQ4W~II%K4^'G>"G>2P?2j p h'j5p6G2yX>sGG1PG1PG=ZP4jQw@pI{Z|f:GGGGPUPGGPPPPWfPZrXjqQpxe_O|f^gegffv|kkqqk;IV ]&V&]&]'c?g5c5c5i5k5o6uGFH^@oXi@o@uQejittvw{  |vRYivl`cgllrtxrxĀIUXZ.aaa.a-d:h,m9m9s+u7s*s8y7lCl^rCxMyB{L{UqjyBZeKS[ZloakuztahagmtmsåsŪsxÆŋȇȖ‘ȔȜțȠšȭŪȹĽǭƴǼìıķķĻļĝţóŻH*\ȰÇ#JHŋ3jȱǏ CIɓ(S\ɲ˗0cʜI͛8sɳϟ@PHP ~%l\shцh(!գ ZlƬ[jX" \VEA^)`U^}KŔKBpE?D#`-c Y2唌^ºZ]^B}x٭)wy_roV8]-lUw`_<0q@q94r@:z5椹C@e>xλK<sٓ <>7~?ݫ@x'@4D.L;+2Ls: @ zPoQp$)l*%AL_Fd?o М eΗ*G(%WҚN:T@$@iD9ՌwdADAD@_ܱ!xū1-# 7+e"0)5k>/,B 2LD,dԲE=L` ĭ[ s㠶<jbȸ898HB6\+J @Dm Ko!׾RꯟW׈|irݮqMq1:(c"˲V^t;ܳ@enuPF"Ll;uRv U'WC&\ 'j[+/9L, 6E`VKV"TjY#0H+S"a c[FXL}y5rB,U ~llо-S'$k8C(ݭhriJfΥ>"~HmFsvt0s}eS3ZH>ȶ>8;/w!;'8Ƙ)Q'ܻގ@ ĝ! 'ʊǃ;KT29TqÝ\̅7,ϷRAй@fMT)at@DZu HϿ]7x r DW?@sUXs˹ u'1ʇ`Nٚ/D9Sgˏ ó! RxpuAzAޒ~*`Lz}g &Є(p TPC@L,!T4l0r[}ҟW&lq 0,h?:Qtmb/?Ls_~A?G95g~ k*gsW w| h vA|Ƈ|{{'|A} Yq1Ag@|7mj078}}1~(r Z: 1{,.(v ?(}gCw}]ago2|P|c|g|Khcwf8x>weP; 'P *` $ 1ptGXK* k ypVP6samXqwc+ AB[勌+Khp2풌(ͨ*#(!@ q ;cK88DЍ~8Մx@}ꗊ!@:-'7~VW^Ȏx(t a8vQߘ/80 sA q5`IIHh*Y 0'59?SB.HS1PV>ȓorHyB&u@E79%G і4:Xe-p$ p) AQJЗ cZnG JPNFa5`1Yq{`x9j()Y ɛJyɗYIkiI)U99Y!S>Pi~'"5Qi!w5I&"mQ U/ J, Mِ' *,ڢ.02:4Z6z8H9ڣ>@=s!FzHJDKPR:ѤTzXZV^`+ڥbZfzhdlڦnp:tZvJrzz|yڧz:z Iڨz:ZZJ:Z*zzZw:!,Q%$@a"g!mFd'p6V5c5iGFQx}€Im9m9S[hì~ȝȽĽǷǾǵǹ[@p(F"TGg*U)֊]l$Ƃ-p.B}(U(LGh< "WTBFPBwSB L\ZN[TA! ,Q?d%4#42?$2=6%>3$5>63#>3>>>2@IVan#H"R"Z2H2Q"g!m!t3j1s0zH]c x xEy%FY>GG%Fm&Ny4Ol4Wr4W~?^xFOWF%O4W&W4G>"P?2j p d'j(j5p6^HGG=_H PG=_Q0v@vI{A{IvRvY/pY<|f:GGGPGG_XOPPPX_lX^xXjqe__kekkkqkwq|kkqqkvxv;EV&V&]&]4V'c'i5c5i5l?i5n6uGFH^HoXj_pQvQr@o@u@u@zVpQkqf{k{uu Ykf`agllrrxxrzĀIJRZRZZa.f:m,m9m9s+s8s*w7lDl^xYxExUqjyA~K\uvu[S[[Znzhggymuås©z‡ŋȔœȔȜȚȠȡȫŪȻĽǭǯȴƼİijĶĴǼǼķżĽĞŢ®ŲƺH*\ȰÇ#JHŋ3jȱ12 Lnj̿G01r*@xr^t^b>J/fh3*FGvXʵׯ`ÊKٳ[Da^Æ пIiV ?mH! 8:0yXngk,p,_s,?Qo&(;xAbN[ݭ8}˾ c*D4cijO:\ @pSH V?h!HIfX@@mO Q'@8gc@#HaS AIr :x&?DX?4Ǎ q"S)af l: P1"aJ=LS|(Asّ lA; Ϭ(&FOQ V/2 *3HHSE7M`CD 0 r80*hcHG2Z:-,@BB1;1LK'A _6)EV <M;c * yלs,5|&=? j`;͌C6G9 F=`@6eqF=fU?(HA6\Ti_#4U?荮JB<@A%,?ɕd~x.CX屌Lb.Sb3MhEQ !,LHLKGWKG\NJRMJ[VGKSIL[GK[JMRMQQM]ZLZTQTSP_XU[KGaIDhNKbOLkMIvRNeSWjQR{X`u_bx`FIcKNmKNcNQlXTsFHsKNyMMqNQvQNsWVv\SzTR`PapVdnh[zf[dahjejkjnpelpmpzpcrststzONRQU[TZX^X^[d[d^j[f]icm`n`nfrizu~h|,+4%>(ABTEXI\|nxw{}w|]TbWbYn]eYi\q^qextyfwqqA>B?\_^aceLCVM_V`X`czjzqls{|}ޟ"ߠ# $-ܪOݫSޮXS.0œÞŤƣȦɫèȫ˱ó˾́ŎɬҶ̽ɷҹѽيߏސ°ۻŴȹ˼Żի׫ӻ޵ߵýֽüƫ²źɼγ˽ H>*\ȐaHŋ3jȱǏ CIɓ(S\ɲ˗()ʔhƙ8+"O)ev,ѣH*]ʴӧPf|4翩~|WL1j>uAFOkυv%!B$ɮtJ˷߿ ,حa+^עhe̜A挙2j?~M^K9rH%2p۸sͻ߷5θM-R0`OK0\HoRNqV,f}Хc>0iҊo}6;eƁQ?w1a,avh($hl0="f!EO$PI>`A=i! @m$@:>y-H!pwE b!$0ooh['+͑'ihPcpa1!cGv sEt((EP案&JW$; BOI% nZ:5?'KJjO25 >%`Oop9#!6dgal>fgygh{ĆrhD>S!a|AHD>p=TG=sB0X;ȣA/Pࣅ=ѣA c0 Pa BҳA b1"#>P]Op{v0c0\Ik>r`cFMOb eov>u歷qGD܄n'7c =[ "N3@3P$,> +P6P*ȂO矇>z8l~63.L>=ZTXDP>c03.ds * 9dQz;۳ @8) @=/rL&1M$mBV7?MOy9(L WBQnn+ԃ84 ᙮f1\] RYx9Qáy#ڬ RHQj5p|@BÀ eE`MaD-O'`Q=:1|c$'IJZRmZA\=6MEִEmSMm\$:yZ$]=WD"[s@=TQGE=LIl a_# 6Ǒ-b:3إCe `G1-P@+aeḟ<ΖB"/Cz4'șR  D1Qd/0qюztBJRx(0lNxR%*TzN9ў{b8||G!P.Xj250_@=-*Lu*F U,O@ ֳrdX颺lK dG1OXI4{d'[RQSnBBB  ʺlgK 8I #V$eN"x2I6\l[+Р4.rN8ҭ̇q!eF~Ճ$P?LW i3L` AĘsGamM0n7{ _ Έd*sg4{ hDlJP k\^@NvqnH bj1]N։B8&`ÐJŕ.s#)3W\QPf 4_roOh.W8ЄC LJ[AMCccC0 htĜ2@:ܐ/0L!=51^,1Msb&6'ǑlؔE&DZfڿi;< %eG^r;ۺ.q]gS;Futw= }{ǀ_+ O8u-x?{v'yO\ݝw)W\ GN(OO \0 2Ϲw󞗼(qc.ANoJϧN[XϺַ{IŮ_|&6ۭ`Nx{t]JO ]O;߸'N! ,%$23%@1Z!m>GGOO&GGGPWfQpxeex&]5i|vY`xRa:g,g,l^~Abztźǽż`@p(<F"TGgzU)ֺ-|`+9qfK9Y`WL[ B'X$% 'X$GczB SP\N[ZJXA! ,%4I!m1g1s<|>GGG>"{AE5c5iXd@uw{Rg:m9yByBoagŔȨȶǽc@p($F"TGgJU)ֺd6=. )ZX $B sT $"$[!FPC TJn{D[ZPA!,$%4==%$2?>3>$2HFPG={APPPXjqkek|kkqqkrxƂ”ŞŢĮN "f&I:'p,KR AR`#HJ.HiϨr*`4&ǃPXKu!,,2=%=Y4W~_Q0kkq&]@ullr€RRqjéxǽĞDzM "f&I:[ؘ` 2vH"_XBHTDjtGـ550L.@=-W.s]s<-! ,4=>>2@IZn!t<3>Hp6'c@owwlZZs*y7lD~K\sŨȽĴǼb@p(,F"TGgZU@cyR dDF(86%ͥr )\ {M $ Q%I%! mF#B SPVJKvNXA! ,<%$2?>3#R1s0zH>GG&Ny4WrFO^HGG={AvRpY(ACUFYJ]J]~wnrw}x{ˆZUd[n]i`repatjmaqc|k}z{wA?^abdC@LCVM_V`Xadfhmzjwtus~ߠ#$ $-ݬS߯YSZ.0ȝÜɢ Ƣʪèʫ̬гȰрǍȎ̮ΰξշոӹͳӺӽ׽ؾۋݎİڻòɵ̼ùڮ⒕䶽⸻ٿƮóŸ˾ʽҶ *\ȰÇ#JHŋ3jȱǏ CIɓ(S,`D+cʜI͛8sɳO弧L0fԡ>kycMDp bd`ÊKٳh]{1cȐ#̲M^#Ξ=uV!C"$ #$?6rVB9ᢴn/gXmE#SM @VcQX6ؠ[JI^\%B!BBS1gM>joHOH aο(h>3ؓ`TQHPh=hq"D=F8A=k.~$K?)&& pJm`' UM$>L6Px\&kUC*% 4V'8Z@ ?#0h`Kj?| f_SD<`pewcWwehǔMi|p7.+,覫n@I4?]( x9XC8#씰MZ<L;0!KOO11{!tB񠱞*M LC/;,<ZA6d@%<Ȼ\w ~M^\k{!vq-anD;A׀5TR7O,M @s`2 <"#.o0<9 uɖ;dⶇnw˛6 Z̠7։|d#`FbSr攄yc@\D7ͥB Uyˋ{ $X*hK  tx8ִN;k#lYRyM"!xl4З0_iq(1GE.\8α5[ʃV B"(r +܃D.T- M(`}r%R;Vģ ݱ'MJ-7Yr k9/x piL b!q1i[@A+\/>}aKv;< x@:0+[>gmlg/vgFdVf(9, m-v:Mzη~o@~a$ N;g#cSϸ7jBA [Wr+0˥8Ϲw0 sl[Hn{'PԧN[XϺַ{`Ng4ڱ~aOqUwԏxϻ';B!,T2H"g!mG>"j(p6ǶDzǹ4)RWJ ³7 I1Ob.5M()! ,\$=33#@Ra!m<j5v6N@uRffrIZm+m9rCgsƝȬǺưǷǵǼ\@p( F"TGM!J5|[""dV 6YEmAy!~mL !KUmJaNlNUA! ,d43%@"Z"gHv@{ZPPPPWrN&V@ulrZaa}UummxȜȳǻưǷĺǹ`@p($F"TGgJU)ֺ<ĕ 45|0Bɂu&AT'E!X sBX$ $[GcPC SZdN]TA!,l4I1m"PPP5oH^m9s8yB}LxUyBsxȯǯǼS f&I:[› еpA"_gPD C! `l" #dLc(/O4!! ,t=>>2@IZn!t<3>Hp6'c@owwlZZs*y7lD~K\sŨȽĴǼb@p(,F"TGgZU@cyR dDF(86%ͥr )\ {M $ Q%I%! mF#B SPVJKvNXA! ,|@Ia1g1m0z >{f"B!t& &uGeP& SP&JX T\ZTA! ,4I1m1y>=yG>"PPP5oH^m9s8yB}LxUyBsxȯǯǼS f&I:[› еpA"_gPD C! `l" #dLc(/O4!!,=>>2@IZn!t<3>Hp6'c@owwlZZs*y7lD~K\sŨȽĴǼb@p(,F"TGgZU@cyR dDF(86%ͥr )\ {M $ Q%I%! mF#B SPVJKvNXA!,2H"g!mG>"j(p6ǶDzǹ4)RWJ ³7 I1Ob.5M()! ,%$@R!t1s0zGG3FQG>2PG1{A5mXj@owRy7s8yByBZoașȫȽc@p(F"TGM !LUL*[ cGd<"Hb1{wmP"e[!y{U"!"a jaB OUNENJ[A! ,%2?=%@1s0z<PG1GPXPPPVejRZs8s*s8lCToSasåsȩȶǼİd@p(F"T@#KjEPfv5HM4j!bt*Bw#~B}\t i~GmVC ENPLnVA!,%o܁K&,ry8y[I]T!,4$3%=%$2?3>>I2H3>HG>"xĿmsåsŪsȡȣJ d&I:(@Bp @O 1 i" LEJ \^+7`Yoi:va!! ,%$23%@1Z!m>GGOO&GGGPWfQpxeex&]5i|vY`xRa:g,g,l^~Abztźǽż`@p(<F"TGgzU)ֺ-|`+9qfK9Y`WL[ B'X$% 'X$GczB SP\N[ZJXA! ,%$2?>3#R1s0z3>$2HFPG={APPPXjqkek|kkqqkrxƂ”ŞŢĮN "f&I:'p,KR AR`#HJ.HiϨr*`4&ǃPXKu! ,%$2?>3#R1s0z>2@IZn!t<3>Hp6'c@owwlZZs*y7lD~K\sŨȽĴǼb@p(,F"TGgZU@cyR dDF(86%ͥr )\ {M $ Q%I%! mF#B SPVJKvNXA!,%o܁K&,ry8y[I]T! ,%#?$==%33#=aEyWd'p6GG1|fDNVYpR`f||[mtɶĶǺưäǩDzǹ^@p(,F"TGgZU)v( )P 죤* 7-aĀ %WT$ " [ BaZNzJXA! ,%o܁K&,ry8y[I]T! ,=33##HK H4.`0(J&p[LV2A[Hv@{ZPPPPWrN&V@ulrZaa}UummxȜȳǻưǷĺǹ`@p($F"TGgJU)ֺ<ĕ 45|0Bɂu&AT'E!X sBX$ $[GcPC SZdN]TA! ,2=j p &V5o6u@oHo@uPogrr®nŜȺŞƢǼP bf&I:[™ еxQJSd"C`̀a%.%ö 0f@xw; ׳B! ,$=F*o܁K&:,ry RA :,ʴ&OxÕ݊)!,,%$23%@1Z!m>GGOO&GGGPWfQpxeex&]5i|vY`xRa:g,g,l^~Abztźǽż`@p(<F"TGgzU)ֺ-|`+9qfK9Y`WL[ B'X$% 'X$GczB SP\N[ZJXA! ,4%42?3%>3I"R!t0z<P?2v@PPP;XjQqwkxa.m9yAȫȺǹ_@p(4F"TGgjU)ֺ=d$ʕ 4P e+p>"92u.zT rBP & #LG&[ OdZNJXA! ,<2=j p &V5o6u@o@ugrr®nŜȺŞƢǼP e&I:[— еx1ɥK\#CX@AiVJQ!-*ooYf xw; ׳B! ,D@Ia1g1m0z1yG4G2yPPPP^rEa-g:m9s+xMyBKSihséxȠŤȯǼİǾe@p(DF"TGgU)֊-6!Ir*H("H%aq(d!|ToB#uh (vGeP( SP(JXT\ZTA!,L%4==%$2?>3>$2HFPG={APPPXjqkek|kkqqkrxƂ”ŞŢĮP "f&I:'p,KR AR`#HJ.HihDmW 0A (,EՍ !,T%$2?>3#R1s0zGG3FQFG>2PG1{A5mXj@owRy7s8yByBZoașȫȽe@p(F"TGM LuL,[ „ gd>Xb3B{mP#e["y{U #"#a!j[ B OUNaNJ[A!,l%42?3%>3I"R!t0z<P?2v@PPP;XjQqwkxa.m9yAȫȺǹ_@p(4F"TGgjU)ֺ=d$ʕ 4P e+p>"92u.zT rBP & #LG&[ OdZNJXA! ,t=>>2@IZn!t<3>Hp6'c@owwlZZs*y7lD~K\sŨȽĴǼb@p(,F"TGgZU@cyR dDF(86%ͥr )\ {M $ Q%I%! mF#B SPVJKvNXA! ,|%42?3%>3I"R!t0z<P?2v@PPP;XjQqwkxa.m9yAȫȺǹ_@p(4F"TGgjU)ֺ=d$ʕ 4P e+p>"92u.zT rBP & #LG&[ OdZNJXA!,4$3%=%$2?3>>I2H3>HG>"xĿmsåsŪsȡȣJ d&I:(@Bp @O 1 i" LEJ \^+7`Yoi:va!! ,d%4#;2?$2=6%>3$2>;3#976@ITd#H"V2H1S!k!t4h1s0zH$1y<3y]c x x>G=FgE}%FY>GG8FQ%Fm%Lw4Ol7YvIYI%K4W&W4G>"G>2P?2h p h'j5p(q6G2yX>s^HGG:_H PG1PG=_Q0j@jQw@pIwTjH wY/pV8w`.{c:GGGGPQPGGRQGPPPWXiQ\t[gtQpxe_Oe__|fDveYgeghhtkwq|kkqqkvxu;KVZ&X&]?O4V'd?d5i5n6uH^EiXi_pUs@o@vPoQ}ejfuh{uvw{ |vXXiwhair|rsxrxņIUXZ.afa-d:j+m9m9s+s7s*s8y7kEl^xYmCl]wD{UqjxcyB|\ZjujxuKXZjuhwagagmzymsåsĩséxʼnȗǠĠȢȫũȹǻŰĶĴǽǽùĝĦųƻH*\ȰÇ#JHŋ3jȱǏ CIɓ(S\ɲ˗0c"@ dbH(CN4mB˔ SТGSJoߋUbY& x61ID\݃6!_hޔ w?J#ưP`,CfOC*P#&@1'Wc᧣0ܔ/V[lڶYFJЂ?Q Y2urM",cC-qn&W|~9q gQz)BFA$ 2HB \COe8>b=O>Jp;t$'.菌Ɍ:I/8cBL85( ޕ@n!5ޘ94}d>A|?A@m\;ׄݹ D.X nN_EI"C"@| G@jxyQn؇DH*ÊġQsݜbA|Db H~#PQ уg+$ n#L AxdA#6h?")[nP4!MV5L*%gTR.O,0rz4r5ʒw@?4JphX'Ґԁ5ibs=U=#s@Vs A} b)@CqFǽ`$_x٥.ĐZSq;5j28U.=t6m*C~; DF]W 6!BBE! G逵":Xq]Hb)>HAPPFI TDa 8$V rf +mmo :j[eYw  Eˆ5gŲ.hǢ!q!c!q dYѪI=پ6be Xb=ڸs϶bDw YN mnb,`oָY#hqijMS`A:jERHrI@j\I1ţp "*#YWFv 1 nb0=$cŁ[wAjHI85Paw ?>tp`B~qĜ೟PiqXGrkWjE葤 H j> (0  mUr,TH@_Ǻshd@a .Ȯ ȩS Yd.kD%6DMl'`!I풢G.rn%{%G.!g^7q\`ϸƕ{ GN(OW0gN\&Rwnr4cn$ f$h3D㗁} ,pԝ1? >SwpAPDhF*%= ՎJ S:׺35D9Պ74NZ+]":y>!v.x11(D{Sxt3A?9{߱mpetU 90-L&: (C=C3TV`(dXvXGT.HlyG}@Q?Rpp\ q 1XX`k,BMw4`cGShh& x(yP PdO04CHHATXN,vB`(T%5NWU(::Ab؊HgxYiU&:Q.FXtT02  #64RH18瘎$dCؐ[a`&\\ ]Q  V&SxPыPP y$Z<5XzpC49!1+ْDiD{JivOF&f~,@bWGIQ[$\F 69UqdvwwVkBEYAVFltS0wk)Pi9`Z qhYs+ 9Qٚ9YyOAIr+ P AW9D Gg !$U9?YWz ـNG?gu^7vcWv9wk7wrv)& @e{7vw ;Ho2Q*,x7NUx%Yy&9yF&z\Az 7d@4OTwKdpe"~w $* H)9:|%j|C|ww}0}Q}0}082}&}GV'8(2)c )Dʌ0t4WӀBj1d]P,: v[z[c:Ȏi1zI$ >Tqw)Aڂ"Y4ȃ78$:htӑRT0Az;RȋvF7s@H_K\ 2}:^xq10Rj9h8j8UچRZs2o&)Z4K_rA89(x搉tUX8#\87wAJ7%MzL;_ÈB0rJw61a,{vWi[s1t .j xGJ'W]CNk HRD 4X:#S9[sb b 0H/`?T%y 3P`}r'H*3By0YZ~&57xQPFĒ.{arЃB 'Iq:i4FN0'$` j 97;\s0]QnkI[mM"t['B4nFxymP[IiV& %$!A{蛾껾۾;[Dh9t u  |&h<9ufqYwvqGיi$ ل!; G~tzytG45 U58|Jzp 2+J|8{CCgZzK}G}F;ţjMHW)&"+"]2,Q))-s\pjytArz:)ӧ|3mZܘA[01/r/-I +)5@5/ .r7S1G3$IsB m]ʂ\1|Ēw9;Xg g(,->̀QS>~H9Gize*ʚJʆiŠU=Q,+BUsׇ |_(F4ex"֔ G tGد͉uZ XVTêOE(uZ*xLH&(EMTշ$7xtL[C`cE!ծ-,_۴o=_\+-VeP,2P2>=mUuť[r}٩kG@)I}+/}19k8YBtkwc?ڟ\ _h tbd,9FەZ_ ΝozUaޭl,Vmmk֫.LމѫokߐY+߮i1Aa $  ~~>n >$2!b8a'^,-/.ʂ-n7.B>^NH~JNP;TNV~Z!,LHLKGWKG\NJRMJ[VGKSIL[GK[JMRMQQM]ZLZTQTSP_XU[KGaIDhNKbOLkMIvRNeSWjQR{X`u_bx`FIcKNmKNcNQlXTsFHsKNyMMqNQvQNsWVv\SzTR`PapVdnh[zf[dahjejkjnpelpmpzpcrststzONRQU[TZX^X^[d[d^j[f]icm`n`nfrizu~h|,+4%>(ABTEXI\|nxw{}w|]TbWbYn]eYi\q^qextyfwqqA>B?\_^aceLCVM_V`X`czjzqls{|}ޟ"ߠ# $-ܪOݫSޮXS.0œÞŤƣȦɫèȫ˱ó˾́ŎɬҶ̽ɷҹѽيߏސ°ۻŴȹ˼Żի׫ӻ޵ߵýֽüƫ²źɼγ˽ H>*\ȐaHŋ3jȱǏ CIɓ(S\ɲ˗()ʔhƙ8+"O)ev,ѣH*]ʴӧPf|4翩~|WL1j>uAFOkυv%!B$ɮtJ˷߿ ,حa+^עhe̜A挙2j?~M^K9rH%2p۸sͻ߷5θM-R0`OK0\HoRNqV,f}Хc>0iҊo}6;eƁQ?w1a,avh($hl0="f!EO$PI>`A=i! @m$@:>y-H!pwE b!$0ooh['+͑'ihPcpa1!cGv sEt((EP案&JW$; BOI% nZ:5?'KJjO25 >%`Oop9#!6dgal>fgygh{ĆrhD>S!a|AHD>p=TG=sB0X;ȣA/Pࣅ=ѣA c0 Pa BҳA b1"#>P]Op{v0c0\Ik>r`cFMOb eov>u歷qGD܄n'7c =[ "N3@3P$,> +P6P*ȂO矇>z8l~63.L>=ZTXDP>c03.ds * 9dQz;۳ @8) @=/rL&1M$mBV7?MOy9(L WBQnn+ԃ84 ᙮f1\] RYx9Qáy#ڬ RHQj5p|@BÀ eE`MaD-O'`Q=:1|c$'IJZRmZA\=6MEִEmSMm\$:yZ$]=WD"[s@=TQGE=LIl a_# 6Ǒ-b:3إCe `G1-P@+aeḟ<ΖB"/Cz4'șR  D1Qd/0qюztBJRx(0lNxR%*TzN9ў{b8||G!P.Xj250_@=-*Lu*F U,O@ ֳrdX颺lK dG1OXI4{d'[RQSnBBB  ʺlgK 8I #V$eN"x2I6\l[+Р4.rN8ҭ̇q!eF~Ճ$P?LW i3L` AĘsGamM0n7{ _ Έd*sg4{ hDlJP k\^@NvqnH bj1]N։B8&`ÐJŕ.s#)3W\QPf 4_roOh.W8ЄC LJ[AMCccC0 htĜ2@:ܐ/0L!=51^,1Msb&6'ǑlؔE&DZfڿi;< %eG^r;ۺ.q]gS;Futw= }{ǀ_+ O8u-x?{v'yO\ݝw)W\ GN(OO \0 2Ϲw󞗼(qc.ANoJϧN[XϺַ{IŮ_|&6ۭ`Nx{t]JO ]O;߸'N! ,%2=h1Z3I"R!t0z<P?2v@PPP;XjQqwkxa.m9yAȫȺǹ_@p(4F"TGgjU)ֺ=d$ʕ 4P e+p>"92u.zT rBP & #LG&[ OdZNJXA!,,%$23%@1Z!m>GGOO&GGGPWfQpxeex&]5i|vY`xRa:g,g,l^~Abztźǽż`@p(<F"TGgzU)ֺ-|`+9qfK9Y`WL[ B'X$% 'X$GczB SP\N[ZJXA! ,4%o܁K&,ry8y[I]T! ,<%42?3%>3I"R!t0z<P?2v@PPP;XjQqwkxa.m9yAȫȺǹ_@p(4F"TGgjU)ֺ=d$ʕ 4P e+p>"92u.zT rBP & #LG&[ OdZNJXA! ,D@0z^'j('cg,m9xLyBmsåsȫȽIJǹJ e&I:[— еx)F D.BE(@rp.DI^H :X5mh<Y!! ,L43%@"Z"gHv@{ZPPPPWrN&V@ulrZaa}UummxȜȳǻưǷĺǹ`@p($F"TGgJU)ֺ<ĕ 45|0Bɂu&AT'E!X sBX$ $[GcPC SZdN]TA! ,MIMMI[ZIMTMSUQUUPYZQVYSX^Y^LHeKErSNdSMyUPcUPnV]nYTeXSk^YfYXjUUu^c{bIMdMRePUiQUjSXwGKtHLtOS{POuQSrZZ}SUx^U{[[aQbvZjq`Yjeneg~mkqtlarintkr~sfvquvqyvxzyx}QKVV]b]fai`eclajkseqeqhvm{tvk},+4%>(ACUFYJ]J]~wnrw}x{ˆZUd[n]i`repatjmaqc|k}z{wA?^abdC@LCVM_V`Xadfhmzjwtus~ߠ#$ $-ݬS߯YSZ.0ȝÜɢ Ƣʪèʫ̬гȰрǍȎ̮ΰξշոӹͳӺӽ׽ؾۋݎİڻòɵ̼ùڮ⒕䶽⸻ٿƮóŸ˾ʽҶ *\ȰÇ#JHŋ3jȱǏ CIɓ(S,`D+cʜI͛8sɳO弧L0fԡ>kycMDp bd`ÊKٳh]{1cȐ#̲M^#Ξ=uV!C"$ #$?6rVB9ᢴn/gXmE#SM @VcQX6ؠ[JI^\%B!BBS1gM>joHOH aο(h>3ؓ`TQHPh=hq"D=F8A=k.~$K?)&& pJm`' UM$>L6Px\&kUC*% 4V'8Z@ ?#0h`Kj?| f_SD<`pewcWwehǔMi|p7.+,覫n@I4?]( x9XC8#씰MZ<L;0!KOO11{!tB񠱞*M LC/;,<ZA6d@%<Ȼ\w ~M^\k{!vq-anD;A׀5TR7O,M @s`2 <"#.o0<9 uɖ;dⶇnw˛6 Z̠7։|d#`FbSr攄yc@\D7ͥB Uyˋ{ $X*hK  tx8ִN;k#lYRyM"!xl4З0_iq(1GE.\8α5[ʃV B"(r +܃D.T- M(`}r%R;Vģ ݱ'MJ-7Yr k9/x piL b!q1i[@A+\/>}aKv;< x@:0+[>gmlg/vgFdVf(9, m-v:Mzη~o@~a$ N;g#cSϸ7jBA [Wr+0˥8Ϲw0 sl[Hn{'PԧN[XϺַ{`Ng4ڱ~aOqUwԏxϻ';B! ,T$2=>>2@IZn!t<3>Hp6'c@owwlZZs*y7lD~K\sŨȽĴǼd@p(<F"TGgzUyR -lHFh@:'Nr 4N{H& Q'I '#mF%B SPVJKvNXA! ,\$@1s0z3>Hd'PP=v@ ]m,}UyBsåsȡȫȡǽǷĮĵǼT f&I:'P*l 05"`$̃A4} a\+ݯM6dmQ4]%}.M!! ,d%$2?>3#R1s0z2v6v@{IdH jH GGPeQP&V5i@o@uYwllZa.s8ZɭǽǴǻǼh@p(lF"TGg4@L- X"Naѵ S1,~P-L&*B ]-)-(G"  SPR\TMR]A! ,%4$=243%@I"R!m=a$1yN~>GGOWF%{I{`;PPFX^r|lN4]Y{wlxRm9r]~A{osåsȡȺǹdzǻǾǼǹn@p(F"TGgJ.H(P@^)ڌ-d@%"V0’ N']1&\tB %/4]J ."]B-#] 41&4F!SPRRNJ]A!,=R"g!m4WyO5iX^Qp@uQ}ƅRazaagmɽȯǴǺŤ[ bg&I:[]cA9# GLD N0AH4QEÐdUnH[2c.*+i4!!,( %4#42?$2=243%>3$2?>3#>>2@IRZak"T2H1Z"e!m!t1mH$1y]c x xN~>GG3FQ4W`4Wy?drFOWF%O&O4W&^'G>2P?2j d'j(s(s6PP=XP1v@{I{ZdH jH {c:GGGGGPPGGPPFPPPPOlPWfPWrX^rQpxeQP|lNqk^eex;N ] i&V&]4]'c'c5i5i6uX^QdXjQpY{@o@u@uQkqtuqq  |vYY`klw|w`lllglllrxrxxr}ƅRZRZZaaa.a.f:a:g,m,g,m+m9s8s*s8y7lDl^r]}]rCxL}UyA~K\b{pzZZouztamagmtmsåmåsxÇɜȜțȡȫŪȳŻȺûǬǴǻƲóôĴǻżķżţ¬³ƺH*\ȰÇ#JHŋ3jȱǏ #$CXev ̃MZ~aCU&##6cҢt>0w [T柣f!]M-jI]w v>2%;Y K5^mIc[0:U@>[Y!:Q-Imgމ USĀ`^Pi o8ly<桁 keA9E8XP~7?O5ud5Ę[9 :xa @c:@(V^AlAc"|gP$%$@9P% @s!Lq`D9?3?|/Ic(]b]-y&(ĀЊ4 !P;d?zNX40(i69.yCJfN<2aO#vUe)fr+*Z1)8tA^F,A@? \K:b-RnKTUꭲΣgSM/( UO& 1ZU9P}m2xRpKռ˦cK?BSw+!.FZIM _HGbx2P?C]289:0=gS U ME H 7xq (& SX~.|b(CѰ!C!,=>>2@IZn!t<3>Hp6'c@owwlZZs*y7lD~K\sŨȽĴǼb@p(,F"TGgZU@cyR dDF(86%ͥr )\ {M $ Q%I%! mF#B SPVJKvNXA!,%$2?>3#R1s0z>2@IZn!t<3>Hp6'c@owwlZZs*y7lD~K\sŨȽĴǼb@p(,F"TGgZU@cyR dDF(86%ͥr )\ {M $ Q%I%! mF#B SPVJKvNXA! ,4%4I!m1g1s<|>GGG>"{AE5c5iXd@uw{Rg:m9yByBoagŔȨȶǽc@p($F"TGgJU)ֺd6=. )ZX $B sT $"$[!FPC TJn{D[ZPA!,<%4==%$2?>3>$2HFPG={APPPXjqkek|kkqqkrxƂ”ŞŢĮN "f&I:'p,KR AR`#HJ.HiϨr*`4&ǃPXKu!,D%o܁K&,ry8y[I]T! ,L%@jQf{s80)RWJppFkca^"!,T43%@"Z"gHv@{ZPPPPWrN&V@ulrZaa}UummxȜȳǻưǷĺǹ`@p($F"TGgJU)ֺ<ĕ 45|0Bɂu&AT'E!X sBX$ $[GcPC SZdN]TA! ,\4I1m"PPP5oH^m9s8yB}LxUyBsxȯǯǼS f&I:[› еpA"_gPD C! `l" #dLc(/O4!! ,d=>>2@IZn!t<3>Hp6'c@owwlZZs*y7lD~K\sŨȽĴǼb@p(,F"TGgZU@cyR dDF(86%ͥr )\ {M $ Q%I%! mF#B SPVJKvNXA!,l@Ia1g1m0z >{f"B!t& &uGeP& SP&JX T\ZTA! ,t4I1m1y>=yG>"PPP5oH^m9s8yB}LxUyBsxȯǯǼS f&I:[› еpA"_gPD C! `l" #dLc(/O4!!,|=>>2@IZn!t<3>Hp6'c@owwlZZs*y7lD~K\sŨȽĴǼb@p(,F"TGgZU@cyR dDF(86%ͥr )\ {M $ Q%I%! mF#B SPVJKvNXA! ,%@jQf{s80)RWJppFkca^"!,=33##HK H4.`0(J&p[LV2A[3>$2HFPG={APPPXjqkek|kkqqkrxƂ”ŞŢĮN "f&I:'p,KR AR`#HJ.HiϨr*`4&ǃPXKu! ,%$2?>3#R1s0z"j(p6ǶDzǹ4)RWJ ³7 I1Ob.5M()! ,$=33#@Ra!m<j5v6N@uRffrIZm+m9rCgsƝȬǺưǷǵǼ\@p( F"TGM!J5|[""dV 6YEmAy!~mL !KUmJaNlNUA! ,43%@"Z"gHv@{ZPPPPWrN&V@ulrZaa}UummxȜȳǻưǷĺǹ`@p($F"TGgJU)ֺ<ĕ 45|0Bɂu&AT'E!X sBX$ $[GcPC SZdN]TA!,4I1m"PPP5oH^m9s8yB}LxUyBsxȯǯǼS f&I:[› еpA"_gPD C! `l" #dLc(/O4!! ,=>>2@IZn!t<3>Hp6'c@owwlZZs*y7lD~K\sŨȽĴǼb@p(,F"TGgZU@cyR dDF(86%ͥr )\ {M $ Q%I%! mF#B SPVJKvNXA! ,@Ia1g1m0z >{f"B!t& &uGeP& SP&JX T\ZTA! ,4I1m1y>=yG>"PPP5oH^m9s8yB}LxUyBsxȯǯǼS f&I:[› еpA"_gPD C! `l" #dLc(/O4!!,=>>2@IZn!t<3>Hp6'c@owwlZZs*y7lD~K\sŨȽĴǼb@p(,F"TGgZU@cyR dDF(86%ͥr )\ {M $ Q%I%! mF#B SPVJKvNXA! ,2H"g!mG>"j(p6ǶDzǹ4)RWJ ³7 I1Ob.5M()! ,#4#?=IZGGOO&GGGPWfQpxeex&]5i|vY`xRa:g,g,l^~Abztźǽż`@p(<F"TGgzU)ֺ-|`+9qfK9Y`WL[ B'X$% 'X$GczB SP\N[ZJXA!, %$@a"g!mFd'p6V5c5iGFQx}€Im9m9S[hì~ȝȽĽǷǾǵǹ[@p(F"TGg*U)֊]l$Ƃ-p.B}(U(LGh< "WTBFPBwSB L\ZN[TA! ,%o܁K&,ry8y[I]T! ,%@jQf{s80)RWJppFkca^"! ,$$@1s0z3>Hd'PP=v@ ]m,}UyBsåsȡȫȡǽǷĮĵǼT f&I:'P*l 05"`$̃A4} a\+ݯM6dmQ4]%}.M!!,,%$2?>3#R1s0z3I"R!t0z<P?2v@PPP;XjQqwkxa.m9yAȫȺǹ_@p(4F"TGgjU)ֺ=d$ʕ 4P e+p>"92u.zT rBP & #LG&[ OdZNJXA! ,<%$@R!t1s0zGG3FQG>2PG1{A5mXj@owRy7s8yByBZoașȫȽc@p(F"TGM !LUL*[ cGd<"Hb1{wmP"e[!y{U"!"a jaB OUNENJ[A! ,D%$2?>3#R1s0zGGOO&GGGPWfQpxeex&]5i|vY`xRa:g,g,l^~Abztźǽż`@p(<F"TGgzU)ֺ-|`+9qfK9Y`WL[ B'X$% 'X$GczB SP\N[ZJXA!,l%4I!m1g1s<|>GGG>"{AE5c5iXd@uw{Rg:m9yByBoagŔȨȶǽc@p($F"TGgJU)ֺd6=. )ZX $B sT $"$[!FPC TJn{D[ZPA! ,t%4==%$2?>3>$2HFPG={APPPXjqkek|kkqqkrxƂ”ŞŢĮN "f&I:'p,KR AR`#HJ.HiϨr*`4&ǃPXKu!,|%o܁K&,ry8y[I]T! ,4$3%=%$2?3>>I2H3>HG>"xĿmsåsŪsȡȣJ d&I:(@Bp @O 1 i" LEJ \^+7`Yoi:va!!,2=%=Y4W~_Q0kkq&]@ullr€RRqjéxǽĞDzM "f&I:[ؘ` 2vH"_XBHTDjtGـ550L.@=-W.s]s<-! ,%$@R!t1s0zGG3FQG>2PG1{A5mXj@owRy7s8yByBZoașȫȽc@p(F"TGM !LUL*[ cGd<"Hb1{wmP"e[!y{U"!"a jaB OUNENJ[A! ,#4$=a!m3I"R!t0z<P?2v@PPP;XjQqwkxa.m9yAȫȺǹ_@p(4F"TGgjU)ֺ=d$ʕ 4P e+p>"92u.zT rBP & #LG&[ OdZNJXA! ,2=j p &V5o6u@o@ugrr®nŜȺŞƢǼP e&I:[— еx1ɥK\#CX@AiVJQ!-*ooYf xw; ׳B! ,%==$$2?>3#R0z>1s>1y>=yFF%j(|f:GGGPGGkqllrZf:s8ZzgūȻĽǵ]@p(4F"TGgjU)ֺ P$˕<QE4ƒUlbpz&JX!&&XG [BSP\TZPA!,%o܁K&,ry8y[I]T! ,43%@"Z"gHv@{ZPPPPWrN&V@ulrZaa}UummxȜȳǻưǷĺǹ`@p($F"TGgJU)ֺ<ĕ 45|0Bɂu&AT'E!X sBX$ $[GcPC SZdN]TA!,$22HO4v@5i@owqZrCåsdzķĹG d&I:[“ еۻ D;" Ǣ8.`Lhc h,dɳμVvp! ,%$@R!t1s0zGG3FQG>2PG1{A5mXj@owRy7s8yByBZoașȫȽc@p(F"TGM !LUL*[ cGd<"Hb1{wmP"e[!y{U"!"a jaB OUNENJ[A!,%$2?>3#R1s0z3@R!m1ss&]?jIzQ``IRg-KShaamxƐȡȬöǻǷǻĦǩųl@p(lF"TGgڒU)֊E0-LBZ%J@$@+ %WTB -), PB"-SB-L* H,-OT (KZNXA! ,2%o܁K&*,r#U'kVq3wWL! ,=>>2@IZn!t<3>Hp6'c@owwlZZs*y7lD~K\sŨȽĴǼb@p(,F"TGgZU@cyR dDF(86%ͥr )\ {M $ Q%I%! mF#B SPVJKvNXA!,$2=%=Y4W~_Q0kkq&]@ullr€RRqjéxǽĞDzM "f&I:[ؘ` 2vH"_XBHTDjtGـ550L.@=-W.s]s<-! ,,2=j p &V5o6u@o@ugrr®nŜȺŞƢǼP e&I:[— еx1ɥK\#CX@AiVJQ!-*ooYf xw; ׳B! ,4%==$$2?>3#R0z>1s>1y>=yFF%j(|f:GGGPGGkqllrZf:s8ZzgūȻĽǵ]@p(4F"TGgjU)ֺ P$˕<QE4ƒUlbpz&JX!&&XG [BSP\TZPA!,<%$23%@1Z!m>GGOO&GGGPWfQpxeex&]5i|vY`xRa:g,g,l^~Abztźǽż`@p(<F"TGgzU)ֺ-|`+9qfK9Y`WL[ B'X$% 'X$GczB SP\N[ZJXA!,D=>>2@IZn!t<3>Hp6'c@owwlZZs*y7lD~K\sŨȽĴǼb@p(,F"TGgZU@cyR dDF(86%ͥr )\ {M $ Q%I%! mF#B SPVJKvNXA!,L%42?3%>3I"R!t0z<P?2v@PPP;XjQqwkxa.m9yAȫȺǹ_@p(4F"TGgjU)ֺ=d$ʕ 4P e+p>"92u.zT rBP & #LG&[ OdZNJXA! ,T2=j p &V5o6u@o@ugrr®nŜȺŞƢǼP e&I:[— еx1ɥK\#CX@AiVJQ!-*ooYf xw; ׳B! ,\@Ia1g1m0z1yG4G2yPPPP^rEa-g:m9s+xMyBKSihséxȠŤȯǼİǾe@p(DF"TGgU)֊-6!Ir*H("H%aq(d!|ToB#uh (vGeP( SP(JXT\ZTA! ,d4$=3%=%$2?3>>I2H3>HG>"xĿmsåsŪsȡȣL "e&I:,Rp DP051q$ LIJ \^]epNe\:wX!,l%o܁K&,ry8y[I]T! ,t%$23%@1Z!m>GGOO&GGGPWfQpxeex&]5i|vY`xRa:g,g,l^~Abztźǽż`@p(<F"TGgzU)ֺ-|`+9qfK9Y`WL[ B'X$% 'X$GczB SP\N[ZJXA! ,|%42?3%>3I"R!t0z<P?2v@PPP;XjQqwkxa.m9yAȫȺǹ_@p(4F"TGgjU)ֺ=d$ʕ 4P e+p>"92u.zT rBP & #LG&[ OdZNJXA! ,2=j p &V5o6u@o@ugrr®nŜȺŞƢǼP e&I:[— еx1ɥK\#CX@AiVJQ!-*ooYf xw; ׳B!,@Ia1g1m0z1yG4G2yPPPP^rEa-g:m9s+xMyBKSihséxȠŤȯǼİǾe@p(DF"TGgU)֊-6!Ir*H("H%aq(d!|ToB#uh (vGeP( SP(JXT\ZTA! ,%4==%$2?>3>$2HFPG={APPPXjqkek|kkqqkrxƂ”ŞŢĮP "f&I:'p,KR AR`#HJ.HihDmW 0A (,EՍ !,%$2?>3#R1s0zGG3FQFG>2PG1{A5mXj@owRy7s8yByBZoașȫȽe@p(F"TGM LuL,[ „ gd>Xb3B{mP#e["y{U #"#a!j[ B OUNaNJ[A!,(%4#72?$2==$6%>3$2?;3#985@IRZg#H"U2H1X!k!t2k1s0zH$1y=3x]c x xE{%FY>GG3FQ4W~IWI%J4^'W4G>"G>2P?2j p d'j(j5p6G2yX>sGG1PG1PG=[P3jQw@pI{Z|f:GGGGPTPGG_XOPPPPWfP[rXjqQpxe_Oe__|f^gegggukwq|kkqqkwwq;HV ]&V&]&]'c?g5c5c5i5l5o6uGFH^@oXhQp@o@uQejituuw{  |vRYiufl`cgllrtxrxĀIVXZ.aaa.a-e:h,m9m9s+t7s*s8y7lCl^rCxMyB|LzUqjyB[dvKS[ZkoakxahagmtmsåsŪsx†ŋȇȖ˜ƠšȭŪȹĽǭƴǼìı÷ĴǼǽĻĝţóŻH*\ȰÇ#JHŋ3jȱǏ CIɓ(S\ɲ˗0cʜI͛8sɳϟ@zPGP($Q8hHGAQM2 F](b#WjlʬT?j^ 5H.^YYʫсy2j*f  N̸h fΞS^>\tpUĭ{ {wZ:  |GprH,N{Lz)&u %._|7.~``yz칧yUt_FIE >P"!6T?6B&QjLt!E'~g F`)3Ȑ"P/70^?\HCfDc{$cE<&dBy u 2Ե=`H]L@"PHrel95 3 DIĘ"PT\9 ~)(HT)W P|wz >{(馡*蟁& N] @0ucJaS'# DQ3L]$ꪤR?D"?0^@cx%x*B?B6LQ:F@b!2! OBpD/~˜S$t@Ad_$OHF~t@p# K :J @<$ɔyy9 D|?28Pr,c?9/1OoL$?Hbpȕ%)7Ȱ @DX@L)w"_X`|-Ibp1@73ɕԥj0*PдHGC'p*2ׁ𗓉 8Ⰷ !s#Ԧ@ڹx(=RJRYEl/T_dKr<  ÚXlcYV~6?fkY,$5% @9 "6M`UK `nX< QB +`*nlM Nt"Kn#s&?06KV~ 0RZ-IN׮u)тTga%e,Pd};"ol CR A]]xMͭfZo{sc:D5D[" Pk|,P2Ą=8;e9v+]y!%AP[LUX0c̑u OE4KeF*4Ю?Y{,)L YXN㹗r%HРC4a.gږY{39w>l .X&L-lTSx&`8+!K l* dՉ ͛s jQ׿,k{Muav/]Z6HG@Gᓃm)݂@hx)w 69Q'rDzTaW"<.;psk2 x7 'F3̻lM$5=ѩcMuDnsR4\ r'tV=rx9 D%s;gwzKlj>C17J^|t '!0ymWO9BoIM=R(P{Ho}S' 5 hVX+!݋ EWѱ G%H_ԏA=pJϏ'=rwO &ͧ|s?ӗ{և}Wq;T 2weKJ/?b 4{Y j}({A~h޳{{G|GG&J A@#.qWb8ǂ|pwv)}+[.wc o1~h~=8CDŽNX"HKHc'Hq(xHy0ח}pg|[HWd>@}ɠ0.!Id8&@.GJZ`>'0D 1.u11c2 mrxm92h\ >Y|Q-Ha-|dX2W0v /.njuщ 8uu8.Gvh\]鸎&Ï}E a_@cepr ى Ah!XwB |E?M2l_ )-옍9 ?R(11uI9bMO91Xb9`Xه P `lY) #~Jp| J1s :53y9o {ipm9y}y1Gti|I `)0IvI_!Fњzn њn!9mA9)i 78Yɚi©;IJ߄7y.:Q1%dtha'!aRpj  :cQ)q0v:` +Az(*,ڢ.02:4Z"O|a:<ڣ>8Z?:DZFz=LڤNPJTZVzH:X\ڥ^Zb:dZ8fjlhڦpr:tzx\jzڧ~Dʧ:Z-*yD5ᨒZz$Aک:z*ڪJ:zf! ,=>>2@IZn!t<3>Hp6'c@owwlZZs*y7lD~K\sŨȽĴǼb@p(,F"TGgZU@cyR dDF(86%ͥr )\ {M $ Q%I%! mF#B SPVJKvNXA! , %42?3%>3I"R!t0z<P?2v@PPP;XjQqwkxa.m9yAȫȺǹ_@p(4F"TGgjU)ֺ=d$ʕ 4P e+p>"92u.zT rBP & #LG&[ OdZNJXA!,2H"g!mG>"j(p6ǶDzǹ4)RWJ ³7 I1Ob.5M()! ,#4#?=IZGGOO&GGGPWfQpxeex&]5i|vY`xRa:g,g,l^~Abztźǽż`@p(<F"TGgzU)ֺ-|`+9qfK9Y`WL[ B'X$% 'X$GczB SP\N[ZJXA! ,,%$@a"g!mFd'p6V5c5iGFQx}€Im9m9S[hì~ȝȽĽǷǾǵǹ[@p(F"TGg*U)֊]l$Ƃ-p.B}(U(LGh< "WTBFPBwSB L\ZN[TA! ,8( %4#4#?2?$2=3%>3>>2@IZan"R2H1Z"g!m!t0z<|3>H]c x x>GGFOO&G>"P?2d'j(p6GG1v@pIGGGGPPPPPPWfQpx|f^eex;V&]'c?d5c5iGF@oXj@oQtw  |vY`kq`rrxxx}€IZRZZ.a.a:g,g,m9m9s*y7lDl^zA~K\bKS[Zzthmsì~șȝȡȭũȳŻĽǴǻǷĴǾķĻǽóƻH*\ȰÇ#JHŋ(r# x@NIJ@,e TF\ &@!#G=>qJPG'MptjI'51uRQ)DBlr@NY8N'4EaNV8:Q3t2cN>"tF@H@<ЁNԹP,ĩ (e!NTj,2H@ ;$}I>Wp@&*X)H¸ЪE-@0!(u"H'Ak9%*$ @RlRC0@-,`#T ( r$4h86#(A =J.Id1iF5n`CQ[icZ#I 'Ar)Pv9p MFZQ@! ,LILLIYUFJSJM[GK[JNVGWTLTQM][MRYJZXUUMHdLIzRNcSKnRM}RThUUsZbwfJMcMQoORlVSsLO~OQ{QNxWRiUgcYvpVdkd\ybWifibguyez}qc|xtONRQVUTZU]X^ZdZc\i]j]jakankoitft|mr~r|i},+4%>(ABTEXI\|ymtrt{{vy|w|\TgZm\q^l`rf{uwgqj}lwdwm}cwqq{u|{xeA>B?\_^aceLCVM_V`X`clyh~}r{w}}ޟ"ߠ# $-ܪOݫSޮXS.0ģƤȦĦɬĨɬǪˬдŁŎɬҶ̽˳һѼيߏސıۻô´Ǹĸɷȹ˼Żի׫ӻ޵ߵ½ֽ¹ƫĴźɽγ H>*\ȐaHŋ3jȱǏ CIɓ(S\ɲ˗()ʔhƙ8+"O)ev,ѣH*]ʴӧPf|4翩~|Gl͘1kޱ?w9FOkυtС㇮sJ˷߿ ,حa+^עifΠI3j@N?^Avуǎ 2pm 1WOދ=qAoDZK?vѿ7nLQGφ`/>>wıA_ZOML PExlcjt!fs<~hfN< <a ,6=carBt(a< 1'(cvaAܐqaP_>VΰPỊZY>IB'"y&9@a=cA,t8asq0ljxs;̨;?M6RYWmwĠN< S3 A>p6=[d$0S;;b>?A+׋nY<=};[_ qD'( n >Fej> ( (~Y @x:}CmlY@RGfѺ, !`xX=gP6&3b Ř1'cH(11wMJ;F=`z/ d@h8lDhZ I2Ñ p]qHZq]!…3(u}sF?P !BA8PbF$j@,.HLHqTF D%Ⱦ1x7e@i H9PFm2L|P(IGp-#)HSl&@Cg !ɎG9=Q2~xc icLQ QWhE1iRӚ%(:rSy(fP/1t xCT-@ pG`+oМb=`Y2G;r>',6Q#Y f#hɨ+ІkHء4ьqEU7Q>#jw[`xڀB![B MF9X| e`*@V7[" 6b7J) BD߈ WŘ (SB67)\:3Peg3~-pǙ٣ p x9|c…9SP.]{! f|{OBsq;Vaz,C5g >f׸&2#@3[p ou0 0:Y;957[ڍ@z6Cfdk$/Y+Z:d=v]42Qd N>z*í[[۷'`, Vxog;c9@֏qX&sfVgP8/1WCm.ͳI~/Mp#`]f>]h&Ƴ ƎGc[R*ȃBw|h8!.w{'r~E=*q6HԣGǁo(>Fgy Õpj|Bw}uXޢYgց`$^cL'9c]΄ tSr{^ ~h\vKoz=BNoڨuW[׫ƥ}a,؞ղ]*ף ry1ҡo<|uU2yP> o:jd[MY%&ӃU1>Q.|}t0]qt W uGVEr0 3KX  'S0gbaK _\c(JgtQS`̅TgRd75g4jctK_O 1c|_崃E%j܅ Ѐ}9f/70gMMWx^V `cOV}=YՁGX}YSZGT12Ha"7|[؈z7|װ!"z&"ɖ} @2@ zr`6 0_s `sSU: Њ׋O ^%=IP PuHcv<&PN Xȸ^8 Dl8%k7 0cT۠x B 2PhOH0zPOP 5ކWX8SS0M?o' W7Nwd ;)0UƑs Oo xȒV@)D _ɔqO(=kOǐxJW&cٔExxKٔhu9q3Lٌ<وԋ3i '4WrcHٙX\XQ }!} ÷ @@ k ^@|#Q0 ę>p< <6|C8k)U0@xK%xk_3%P:3`rhԹkз34R7& VӐ;#}М 2;U E)ݳ6@1 4@8\^Sp@mm}C' d( 1۰SVVL˘3k6"Zhˡ{g7L |sd[KfXή-0{ؽGyۘȽS̽3(P!cD ># l=/]a;!`CIđ=b'ɒ~@. vl0$P~%DhІv3I"R!t0z<P?2v@PPP;XjQqwkxa.m9yAȫȺǹ_@p(4F"TGgjU)ֺ=d$ʕ 4P e+p>"92u.zT rBP & #LG&[ OdZNJXA!,$-=>>2@IZn!t<3>Hp6'c@owwlZZs*y7lD~K\sŨȽĴǼb@p(,F"TGgZU@cyR dDF(86%ͥr )\ {M $ Q%I%! mF#B SPVJKvNXA! ,,-%o܁K&,ry8y[I]T! ,4-2H"g!mG>"j(p6ǶDzǹ4)RWJ ³7 I1Ob.5M()! ,<-$=33#@Ra!m<j5v6N@uRffrIZm+m9rCgsƝȬǺưǷǵǼ\@p( F"TGM!J5|[""dV 6YEmAy!~mL !KUmJaNlNUA!,D-43%@"Z"gHv@{ZPPPPWrN&V@ulrZaa}UummxȜȳǻưǷĺǹ`@p($F"TGgJU)ֺ<ĕ 45|0Bɂu&AT'E!X sBX$ $[GcPC SZdN]TA! ,A*,<6:'7(452BUf*Q0u-;J:3x] q>G=Ez9FK/Qt?drLL*J>+l m/R:u^HQI4vBpS.{d9IHIMIZGPRQGHTMSTRHRPRLHeKErRNfSMyTVgQYsUlubIMdMRe_OgUXuGKtOS{POwVVaQbvZjwgYgegggukwqzjjtkrsqjvuv;O i'Y1h5rGFH^QKVVX^CkXh]f]pTsBrcibjithxtuw{k},+4%>(AEX|vXi{vi`irwruxxqw{ˆUZ.bj3u3ZUkDh\y[mCl]wD{Ui`qhmawf|xyBA?^abdC@LCVM_V`Xdf|ZjufvuVjvjwsgwrߠ#$)ݬT§uSZ.0ŠǬи°рǍ̮úշƯӺƸԾۋݎıŸڻźºڮ⒕㷼ٿĝťŸƮŶҶ H*\ȰÇ#JHŋ3jȱǏ CIɓ(S\ɲ˗0cʜIsc~.kQqD)PH030ZyիXjʵט7ò$(E%jD.PJ} eTO)fK/^l3 Ҳ0bN~~h ƏQ f0o|M 4τg^ ! ǩp)Ǚ"FУ+jϸ}B[TRL]T5o˟O/^$?r7&(<1P? /LvO}(;x<ᄹ`5p8!/5 \A/  <@ާ=_AC&9N"5H"'y)|Blqޗ_lAIh7c Rx$?yX 3'?HGqhB"b+?5D!}nV3cna"jB_~IMVaʯWBʐ I1ehO.ĦK}( S7X ڏ.R >@%lzMd[n?[g?qԐJ 롛/(M0a;6h8*B9\c.Ϻ+L2٨84׌δ3΅,ZCo,uy¬^ kZXg]3g$$$8p&Ad=$0cOq&*(WC24aO  ˜mܰC+Rv)CN r2O?  l 1Dγ[mᐐ<;y;HZ')*yI{dBh_Ҡ)cHSQA"NLBPVT<<5l;E=/~)=hHGLN\,@@Py|cπ3' g‡'MJ[Ҙδ7i@QfRԨNWVհgMZָεw^MbN?f;ɎMj[ζn{~MrNv[MzηX[N7'[p'N{XQ ?5F(G6Ǎk(pHGet">qq]s$aZ7wԧN٨~<&4ƻ57{4PDǨ5zU}m;Oz!WG^j1UOB }ZdX7d ,o8 " ū2PCw獟 $O` ~F~~֐t ` ȇ3~'@ #j7~'s (~s$x}׃>|͖uYvP r 7P%xg0(( va6Mz$Aj`ycyXxw&lHS%x^~rIQt'~@yjP(T  `: j8HlBp&)@ cjĆo@r;' 7t jz腥~tPj:i#{ǧddžƋ8~u(& ʸ hv@xvpkmj P ސ `  u؋hj xhjsw}6r '(`  . jّ7hy6y`~<ɠȠLٔkKBP XXj@X -pvzxnjcYjeЕfI2Gk_؆(rQW(XUyXAuhxsDyj8hה@ujX  g:I+P }@V , ߸jǷw #0\jtYh~pzjٙrَ7w)UG60ff3Y ~wA`ɚi8U9$a 9gٚAzwAƠ۹\؞Aڡu♢*rYm`s(yv& mwj f88j;X<꣦&q֣CTZ@עچwypZʥVb:&tCmDP ` kJpTrZvzHx|ڧ?~: zgjnp=jmp"jڏPqGopA(Zj6  kإPkjPs4n` ~֪VsQjAjK燪Һؚ6VtGtւ60h6ht :jXu\uHjbfw}s6'yi#xVyyWw zZjC` phxyjuuGy /; ۱W>˧-}W}Yp}ٷ}} ~~N{u``Yj  ֠zhj @e`L뀐gu ȅ h h ZGjJȄ M:[b2Jj;K׆d˪kƇtxKAjuxYXj[YPjkxs˹_亸;jȊ8 jH XΨ8;V8jj_K4}8=p6<Ӌʨ>B-p;=F}VV[r nʩM=k 0շ԰SVoXr\ ^MmZkcMnJ-mJ#kqkVt7כj԰!{6؅Mm=״nӵFDJkn lG6ڴjt;kśmZ]˱o}kk ٽڹ旸6ۡ]kMMmoܴ*Fݻm}Ʈր-k8kݹنݩtmج'ߺ]f߷=m-k}lu]u-y=wuWxDzܰF:벖{Py<ȩ{Ly'{g9kޓvjԜ IbADw%|Wn nwn‡Dn͢wj>{Wpnr>ʘ^<{~;{8n't{kK`Z˵M xa;yjIN~p/sNَ58row)+Yjߞ'?WeykM{y4i _̾BC_N_Ǽtw ysKovǗsPk ~ݣohw;x-ă*ryso-kMˆk j jwo;d7ːM``l舝_{O_ۮꚿuzkPX/g+_Ȉ߇ػK7]jo{o@Oo?G-~ / gkpa`ذ%NEDi; 71CByׁGB ߜ[a)tt9:\n!ٻAU !Eɓaʆ,0 Gɧ.vk޿w@n޾[kX;m}4x4bs=fAlڋJ[&(?P'rCWN5 !R9J9{ǘVby0o0H3w"R_dH;rغ"3 JD렺{6(H>Gw[q3kDDԔ(E\O֜C2"d o.T9U,/3t4* ?F1!h!Py%='j1h_.2qűh o6=KBjJe ̛n,8K#y_=E-Y$\*tu?bˏ=nE'盵s9OsЕd@d 0"]dޑѪl3!>OwgՉ:1q8p<WINy`Ԅ Qh`dH@)ŽhT&Wӝn֨;]WE:>׺Ht_W0ye E (>{_׾|+%0wK8/|_Rp-|a gXp!SxX#&qM|bXOWbX3qm;q}c 9|d$'YK1d(GYSrd+gY[ree/Yc&s f3YkfsHL|g?#7jTZe.uVjXǚʥ#i*k\Z;}k`&vmhfvY';[Ӧvs]mlg[|o_&7]ntVwݝRO@_Vm h'c'ͤlvQ8FC/x-^COؤbhGkM~ ^l҉!@bȇ!I3DcT#ꘞqr']fd a`/e{MpQVҟ@5u[ZkgpST.Ri"rE^$4+C(ZQ2^\FF@ӳBbFjDCFm5mF]ApG+F$B$fLC8孌N{da+L#>ȹT1ʠ:c!‰ %JF9髞PҤf JJFY.yUn.@Oifd"¢rov"fgExEOZb `?4' L͐!lKj%dh5J(ct%nay[ 吅FG2(OhǏ[#2O![ڨ(ia~:)JN>%^$BsϮ DiL+MT-nbʭ{$-+!ϹƯk Uka>/Z]?aRj s3m0Nm֞nmf׎m֫ٮm~mvʾFAbUpF 5nѺ|kIxv\APlMnHVx 2`h\W^5o nnA6c %T @dp&5 %p@W#L&|—Bp$T@Htq8{)83(W\oDBGxW{]O]ԚYB%p,  &KuI".`>ՃEg6[\ _(p9^&6 usQ/#XcD ȆXtEz+tK`7Dp?ċDBrXBx :\i `>⽐X P߆02@uY!7 |A ֍uw.(~p#`ovn\ ɻ s7K>`i7݋M(wc?߾v(J6:>@[Q K10r܏hxj{7<8_SԚT|BO(`yP4c!gO_؝߼gŜijXYAu .|(,uKhz7ze-@rݭF =:fjS>qHcxra9 |7Ʒ) ~|6k ϧ|@8@_z}_vg} ?޷}mm.~NG~m.~|~Ht])DHxϪna>'/nno&8^~o|`T>l!Ĉ'Rh"ƌ7r#Ȑ"G,i$ʔkeKD|m7p\`榉AuD]CM @'Op0UuypjՇlr8,j1(J}W@4 nq e0Ċ3n1Ȓi٬ `wN%QOHm3jp&& 5mP6mgk;q4`Myy93\{B XMP׳o=+[~)qY` Mܥ3@*_C3 7AxpiQN~m_U] ACUWP֐QӉACk(=#A 9ASDuZu grL R>U5ŤOt2ެNAl5[&vA Pa _ "CN*ܤP3A_s(J:)ydD~Vxf afȥChNg,֠TzjtJ;3*~G2VӒMCTT,:x0@բV-z-]ZDKZ%P:koj8jGcPï;`%l 8Aͫ%OXÕ;.['p!<2%7einz0Ȍ C.ZjΘh9ϊ_] ?U(>%zWuXy45I5]{F(P=dk;~o6>' % pxq5 nO4xݟ*H `[~9晇,}z?>q2ѕc,6: ܬ@hO6ԻDaMq'[%-ij={.5f]Vw,4S,˃.v7/panw6I 2q~P` l 3 $|HH`< p GtB* JHa@ + 1(! F(eib()R1HG Ddqb(1Q1W,#Ө5^l|#(GHqv#:걏~# 1@ E22*XA:=UGhE+PaÊ#IIE^`ŃUL leB"HN2e`Z1bV I/e2ssG5 &Z' Q$[j2&P:TEީ]Rj3Qp+VU8Y]8Z]zlӫ a{n3 (cEo5f) "M03a$0nݹ8bv9,&z,W~2|&Lw'ou%-V.DJ;4U&B;]TQkZzlB^Y+*0=P- V. ØfoӝdG-7G"&w;> <; vМpЖ|e ^$AD@I@ >4,QADJ0(3"W] i$Bj T.u+56 |!/:: YȂo{2i P-4!~w|X @h=,BdHLIb5@NaMdEVTpHР\XA(* ̄X$ڗNR< 9רqR=DI`t&! 0( 24C~: !Zam DPYՏC(+DP rUC+B(@*XDĪ ~!EUߌ!̀1ĨADLG3H ~" ްd}tG LZOI)$ UDx@XI"2!QGDD/\ĢX8 ;Lc5b1N8ק.2\"D7@tC@&?J(AP'LDM]`ddM(:Ā!Et](.jaUV\Cԟ,[`t!YX}p& wVPCU)Whvrτ21T#Wmx`<t ʞD|1Xyp2$5./ߧ$%υ(]84[10?,:wqrD$~JLs2Β#3IBW>91YC?L`>CesCױGEDGc$!bgб_-1%s"#2_4XFV@qNot"b'{4;26tFA uLcNtMuѪ u8EWA!h"Z/;3eYˁZr;59;utuQ$hJ|/JF8vk8vD1BI_Dc;ewH`ltBh4*ҁ*&hFLdt5 ovHZk /b?e6: @vno6&LhvkI9m/XsoW6]3KODy6s8jTW7q/A6>GG:UtF ہpT8A@\bJD9ЅOD1X9nm8:2DgHm EC@;&RCDOe9n8UF-xxsyZh0Dm%D6n#Y}68/4R5%3C#FWbpjd\=ݻ!N \7䅛߳ۗ ;ۻ=Jt~EEd>\n~D>~G\AKC2~G_>CsdrOdDLFsR+FnP֕3_? {,@1<?F[Dp4xaB 6tpA:)VLqEdȏI4yeJ+YtfL3iִygN<hPC5ziRK3dSSVzkV[o>:kXcɖ5{X_Ӷun\sͮJo^{Ͽ 6|1""X)qdɓ)W8*XthL1  JH>ܑ}(DР3XR\EHEu44#,1ȃ# bI(/,:ܒ:K6F;B6&)sj,w'˨L˳{G<`cwC,c28T\uuS0 L!.HH8@Hh%i͖nMko\-t*w֝^=+Rݗ5+] Xh"N1PJև,Θk46Ϥ͌S8`e\+.x wtM6P'BM5\+B 2cVÌcd޺<",;#ۮ;褣<T`R 3Ŭl "20MX1$42нDn9Eic,EUbN,sDei{}'<$ Y#vopBx3_Sr2Ud3.ŗ>1tߠJtF+3AUܳO u:mW*ȍЁ~8 0==w;X*RTl9HUAA@X1@p 5,":vC* aXD0+D4ID(QtE)^_Ty' ! ,T-=>>2@IZn!t<3>Hp6'c@owwlZZs*y7lD~K\sŨȽĴǼb@p(,F"TGgZU@cyR dDF(86%ͥr )\ {M $ Q%I%! mF#B SPVJKvNXA! ,\-@Ia1g1m0z >{f"B!t& &uGeP& SP&JX T\ZTA!,d-4I1m1y>=yG>"PPP5oH^m9s8yB}LxUyBsxȯǯǼS f&I:[› еpA"_gPD C! `l" #dLc(/O4!! ,l-=>>2@IZn!t<3>Hp6'c@owwlZZs*y7lD~K\sŨȽĴǼb@p(,F"TGgZU@cyR dDF(86%ͥr )\ {M $ Q%I%! mF#B SPVJKvNXA! ,t-2H"g!mG>"j(p6ǶDzǹ4)RWJ ³7 I1Ob.5M()! ,|-#4#?=IZGGOO&GGGPWfQpxeex&]5i|vY`xRa:g,g,l^~Abztźǽż`@p(<F"TGgzU)ֺ-|`+9qfK9Y`WL[ B'X$% 'X$GczB SP\N[ZJXA! ,-%$@a"g!mFd'p6V5c5iGFQx}€Im9m9S[hì~ȝȽĽǷǾǵǹ[@p(F"TGg*U)֊]l$Ƃ-p.B}(U(LGh< "WTBFPBwSB L\ZN[TA!,-d %4#72?$2=4%>3$5>53#>;4@IXan#H"W2H1U"g!m!t3k1s0zH$1y31y>=y]c x xEy%FY>GG%Fm&Ny4Ol6XyIWI%L4W&W4G>"P?2j p h'j5p6^HGG5_H PG=_Q0w@pIxVvY/pY<|f:GGGGPPPGG_XOPPPT[iR[tXjqQpxe__|f^kekiiskwq|kkqqkvxv;ENV&Z&]4V'd?d5c5i5l?i5n6uGFH^BoXj_pQs@o@vQ|kqh{uv  |vUYiqh`irrxxxrzĂIWRZZZ.aaa.a-d:k+m9m9s+s8s*x7lDl^xYrCxMyB}LyUqjyB\ubvuKKU[Zikwhggmymt¨wŖȔȜțȠŠȡȬũȳżĽǴƼŰijöĴǼǽĺĝĢijƺH*\ȰÇ#JHŋ3jȱǏI$D.2\r!t0vC˘od_ݚ'Ţ; çwA5((ڏU]GDCz T_ؑX" ?ʥnرeRՁT@j!4O>{@'\_/fttퟵb(b|/]vT8iƭiԪUۿKY(sb, ÉEÈ@'Jvx r#"!rUhB_c}"iPA:!?T; ?9$(9=$8%amRDp (jB85|\ ]T?̕'\,8̳) @ˇ1>!oU " sD?T@ B UpAPM8Mm j@4ddA[wM IGA6+6.Wngw砇9 sB"0PR1 %X@:+|3B9ImA.^LM:=7טubX SQsdh5=:L7A1ޱp}@"4 BtF$dO9!|DTRxJ` rE%J>0?H%gQ0Q.*x ыi?>Q?Q )kɅ5Q (O?L!K\1Ho,xƏd[Uigg!bvY@ ɂ*CY_tc(̤ d:Ќ4IjZ@l^~^#d"r=o>B&ȕ@d F AKHrM|ȏ&YC 0+[IW2XF MhCj)\ Obk`3_m\B8ʼqE6 r>tҁT aaa#+6v4S-eϊ)CtPM)Ns)A4JUSث9G:+b5U*h[RN셯Q T?á c@4.< "#439`c_̦%kaӛ&c"[f3AKҚMjq)0 }-j[i!c0nT2o\ӚawAF1[(L@]f~=6(`:(jR cZp" 6|{5 jo 9] r1r6VcN9(d%jI.U 2Tӆ4uQ^H%K!#@ &985|Z># Y~u.&OH.8%C1gﳻ6Xd1*T Z[S|~`6Sijvfh> ]؟9 z#ǡ5Egю#]ISZ)Lq TbK3hKG>IH=U!~Bb-kN5}]7D׾=l_!l,LHLKGWKG\NJRMJ[VGKSIL[GK[JMRMQQM]ZLZTQTSP_XU[KGaIDhNKbOLkMIvRNeSWjQR{X`u_bx`FIcKNmKNcNQlXTsFHsKNyMMqNQvQNsWVv\SzTR`PapVdnh[zf[dahjejkjnpelpmpzpcrststzONRQU[TZX^X^[d[d^j[f]icm`n`nfrizu~h|,+4%>(ABTEXI\|nxw{}w|]TbWbYn]eYi\q^qextyfwqqA>B?\_^aceLCVM_V`X`czjzqls{|}ޟ"ߠ# $-ܪOݫSޮXS.0œÞŤƣȦɫèȫ˱ó˾́ŎɬҶ̽ɷҹѽيߏސ°ۻŴȹ˼Żի׫ӻ޵ߵýֽüƫ²źɼγ˽ H>*\ȐaHŋ3jȱǏ CIɓ(S\ɲ˗()ʔhƙ8+"O)ev,ѣH*]ʴӧPf|4翩~|WL1j>uAFOkυv%!B$ɮtJ˷߿ ,حa+^עhe̜A挙2j?~M^K9rH%2p۸sͻ߷5θM-R0`OK0\HoRNqV,f}Хc>0iҊo}6;eƁQ?w1a,avh($hl0="f!EO$PI>`A=i! @m$@:>y-H!pwE b!$0ooh['+͑'ihPcpa1!cGv sEt((EP案&JW$; BOI% nZ:5?'KJjO25 >%`Oop9#!6dgal>fgygh{ĆrhD>S!a|AHD>p=TG=sB0X;ȣA/Pࣅ=ѣA c0 Pa BҳA b1"#>P]Op{v0c0\Ik>r`cFMOb eov>u歷qGD܄n'7c =[ "N3@3P$,> +P6P*ȂO矇>z8l~63.L>=ZTXDP>c03.ds * 9dQz;۳ @8) @=/rL&1M$mBV7?MOy9(L WBQnn+ԃ84 ᙮f1\] RYx9Qáy#ڬ RHQj5p|@BÀ eE`MaD-O'`Q=:1|c$'IJZRmZA\=6MEִEmSMm\$:yZ$]=WD"[s@=TQGE=LIl a_# 6Ǒ-b:3إCe `G1-P@+aeḟ<ΖB"/Cz4'șR  D1Qd/0qюztBJRx(0lNxR%*TzN9ў{b8||G!P.Xj250_@=-*Lu*F U,O@ ֳrdX颺lK dG1OXI4{d'[RQSnBBB  ʺlgK 8I #V$eN"x2I6\l[+Р4.rN8ҭ̇q!eF~Ճ$P?LW i3L` AĘsGamM0n7{ _ Έd*sg4{ hDlJP k\^@NvqnH bj1]N։B8&`ÐJŕ.s#)3W\QPf 4_roOh.W8ЄC LJ[AMCccC0 htĜ2@:ܐ/0L!=51^,1Msb&6'ǑlؔE&DZfڿi;< %eG^r;ۺ.q]gS;Futw= }{ǀ_+ O8u-x?{v'yO\ݝw)W\ GN(OO \0 2Ϲw󞗼(qc.ANoJϧN[XϺַ{IŮ_|&6ۭ`Nx{t]JO ]O;߸'N! ,MIMMI[ZIMTMSUQUUPYZQVYSX^Y^LHeKErSNdSMyUPcUPnV]nYTeXSk^YfYXjUUu^c{bIMdMRePUiQUjSXwGKtHLtOS{POuQSrZZ}SUx^U{[[aQbvZjq`Yjeneg~mkqtlarintkr~sfvquvqyvxzyx}QKVV]b]fai`eclajkseqeqhvm{tvk},+4%>(ACUFYJ]J]~wnrw}x{ˆZUd[n]i`repatjmaqc|k}z{wA?^abdC@LCVM_V`Xadfhmzjwtus~ߠ#$ $-ݬS߯YSZ.0ȝÜɢ Ƣʪèʫ̬гȰрǍȎ̮ΰξշոӹͳӺӽ׽ؾۋݎİڻòɵ̼ùڮ⒕䶽⸻ٿƮóŸ˾ʽҶ *\ȰÇ#JHŋ3jȱǏ CIɓ(S,`D+cʜI͛8sɳO弧L0fԡ>kycMDp bd`ÊKٳh]{1cȐ#̲M^#Ξ=uV!C"$ #$?6rVB9ᢴn/gXmE#SM @VcQX6ؠ[JI^\%B!BBS1gM>joHOH aο(h>3ؓ`TQHPh=hq"D=F8A=k.~$K?)&& pJm`' UM$>L6Px\&kUC*% 4V'8Z@ ?#0h`Kj?| f_SD<`pewcWwehǔMi|p7.+,覫n@I4?]( x9XC8#씰MZ<L;0!KOO11{!tB񠱞*M LC/;,<ZA6d@%<Ȼ\w ~M^\k{!vq-anD;A׀5TR7O,M @s`2 <"#.o0<9 uɖ;dⶇnw˛6 Z̠7։|d#`FbSr攄yc@\D7ͥB Uyˋ{ $X*hK  tx8ִN;k#lYRyM"!xl4З0_iq(1GE.\8α5[ʃV B"(r +܃D.T- M(`}r%R;Vģ ݱ'MJ-7Yr k9/x piL b!q1i[@A+\/>}aKv;< x@:0+[>gmlg/vgFdVf(9, m-v:Mzη~o@~a$ N;g#cSϸ7jBA [Wr+0˥8Ϲw0 sl[Hn{'PԧN[XϺַ{`Ng4ڱ~aOqUwԏxϻ';B!,}%2=h1Z3"R!t=I>1y><~FP?2v@PPP;XjQqwkxa.m9yAȫȺǹ`@p(LF"TGgU)ֺEp˕ژ:% D*T>@{T sBP )&LG!)[OT\ZNTA!,4}42>3@R!m1ss&]?jIzQ``IRg-KShaamxƐȡȬöǻǷǻĦǩųl@p(lF"TGgڒU)֊E0-LBZ%J@$@+ %WTB -), PB"-SB-L* H,-OT (KZNXA! ,<}%2?=%@1s0z<31yPG1GPXPPPVejRZs8s*s8lCToSasåsȩȶǼİe@p($F"Tǀ"KjIP)f"Bi4XI]G"9]ACBx$B ~\u jGnVC ENPLoVA!,D}%$2?>3#R1s0z3@R!m1ss&]?jIzQ``IRg-KShaamxƐȡȬöǻǷǻĦǩųl@p(lF"TGgڒU)֊E0-LBZ%J@$@+ %WTB -), PB"-SB-L* H,-OT (KZNXA! ,\}423%@"Z"gHv@{ZPPPPWrN&V@ulrZaa}UummxȜȳǻưǷĺǹa@p(,F"TGgZU)֊ ƑJDJ @at>J!$z"XtBX% %[GdPC SZeN[LA! ,d}4I1m"PPP5oH^m9s8yB}LxUyBsxȯǯǼS f&I:[› еpA"_gPD C! `l" #dLc(/O4!! ,l}%o܁K&,ry8y[I]T!,t}@0z^'j('cg,m9xLyBmsåsȫȽIJǹJ e&I:[— еx)F D.BE(@rp.DI^H :X5mh<Y!!,|}%$2?>3#R1s0z3#R1s0zGG3FQG>2PG1{A5mXj@owRy7s8yByBZoașȫȽc@p(F"TGM !LUL*[ cGd<"Hb1{wmP"e[!y{U"!"a jaB OUNENJ[A!,}%o܁K&,ry8y[I]T!,}=>>2@IZn!t<3>Hp6'c@owwlZZs*y7lD~K\sŨȽĴǼb@p(,F"TGgZU@cyR dDF(86%ͥr )\ {M $ Q%I%! mF#B SPVJKvNXA! ,}%42?3%>3I"R!t0z<P?2v@PPP;XjQqwkxa.m9yAȫȺǹ_@p(4F"TGgjU)ֺ=d$ʕ 4P e+p>"92u.zT rBP & #LG&[ OdZNJXA! ,}%2?=%@1s0z<PG1GPXPPPVejRZs8s*s8lCToSasåsȩȶǼİd@p(F"T@#KjEPfv5HM4j!bt*Bw#~B}\t i~GmVC ENPLnVA!,}%$23%@1Z!m>GGOO&GGGPWfQpxeex&]5i|vY`xRa:g,g,l^~Abztźǽż`@p(<F"TGgzU)ֺ-|`+9qfK9Y`WL[ B'X$% 'X$GczB SP\N[ZJXA! ,}%o܁K&,ry8y[I]T!,}2=%=Y4W~_Q0kkq&]@ullr€RRqjéxǽĞDzM "f&I:[ؘ` 2vH"_XBHTDjtGـ550L.@=-W.s]s<-! ,}@0z^'j('cg,m9xLyBmsåsȫȽIJǹJ e&I:[— еx)F D.BE(@rp.DI^H :X5mh<Y!!,}%$23%@1Z!m>GGOO&GGGPWfQpxeex&]5i|vY`xRa:g,g,l^~Abztźǽż`@p(<F"TGgzU)ֺ-|`+9qfK9Y`WL[ B'X$% 'X$GczB SP\N[ZJXA! ,}=>>2@IZn!t<3>Hp6'c@owwlZZs*y7lD~K\sŨȽĴǼb@p(,F"TGgZU@cyR dDF(86%ͥr )\ {M $ Q%I%! mF#B SPVJKvNXA!,}%$2?>3#R1s0z3I"R!t0z<P?2v@PPP;XjQqwkxa.m9yAȫȺǹ_@p(4F"TGgjU)ֺ=d$ʕ 4P e+p>"92u.zT rBP & #LG&[ OdZNJXA!,}%$@R!t1s0zGG3FQG>2PG1{A5mXj@owRy7s8yByBZoașȫȽc@p(F"TGM !LUL*[ cGd<"Hb1{wmP"e[!y{U"!"a jaB OUNENJ[A! ,}4$=%$3#@1g1m>GQ^ d5v6v@PPFXPP5c5c5o_jY{@uYxJm,y7rCyB\oTȤůȶ©Ǽf@p(4F"T!1(BMC\M#_D#2ibń &R~^WC&VPC% LDOB&MB&QB INvJKWA!,}( %42?$2==$3%=%>3$3#$2?>3#>>2ARZl"T1Z!k!t1g1mH$1y86z]c x x>GG3FQ>GQ4W{FO^ I%^'G>"G>2P?2j p h'd5s(r6X>sPG1[P0v@{A{Z|f:GGGGPXPGGPPFQPPPOlPWfPWrQpxqk^ggu;NV i&V&]&]'c'c?j5c5c5i5l5o6u6uH^QdZjXjY{@o@u@uIzQejkqswqq  |vYYi|wf``glllrvxrrƁISRZaaa.f:a:g,m,g,m+m9m9s8y7s*s8y7lCl^rC}]yEzUqjyB\T\bopKSZZkanuztamagmtmsåmåsxŋȔÜȔȜțȤšȫŪȸǬįȵǼİĶĴǻĻļĞƢéóƻH*\ȰÇ#JHŋ3jȱǏ CIɓ(9 #K-/#́+(!X B~WITaZDXIm,F}-@vIjɡeJHkشE3?PhW.YBP /6bɔ-6~ @ '[YJb6LA\+t\p k?F>k%pj$9O@kP8qƫG:y~Bd:tG7]`dX||X3o܁1XSJ I7`zރNH{Ǜop_~T? To1;"T̳F<,AAd#8J~4F:;lgrNH@80V*( aEAYou|<#{u]-zf?QO"Qb0EԬڍ'gO@}]W !Q6V,4PK 9l#1wp%a244K OI<5s|c 5 9/UDnw_ӟ9捏}~7XF(4Z˝>H0&Llr@޴] F)/l)h]x=x9aA PAMp%dCDj$^8$]CX wQ۠hxLU)ЀD"8'xEBmS7-wGXpy+H j@F7q/t<qM ?HH~Bi|rXBV ?@)HZr!eMvR qb$F`  aaAq 7aKssx(쳌Hr R0w$|B pW%h'V"*r?#=)7@81I%XYPHIk'?>2D_SQ$F3aPQFt'ia!ୠAQ*SԂ`SիBFRV Z%+P ւ  AЏH#|^Kf +8Xd'KZͬEfz,V@KU0jWԲkcKkVdͭnִ9MjeQvԣЭ,Ŭ<75u]nwKȎ%y^M{K_̷h_H@! ,=>>2@IZn!t<3>Hp6'c@owwlZZs*y7lD~K\sŨȽĴǼb@p(,F"TGgZU@cyR dDF(86%ͥr )\ {M $ Q%I%! mF#B SPVJKvNXA!,%$2?>3#R1s0z>2@IZn!t<3>Hp6'c@owwlZZs*y7lD~K\sŨȽĴǼb@p(,F"TGgZU@cyR dDF(86%ͥr )\ {M $ Q%I%! mF#B SPVJKvNXA!,4%4I!m1g1s<|>GGG>"{AE5c5iXd@uw{Rg:m9yByBoagŔȨȶǽc@p($F"TGgJU)ֺd6=. )ZX $B sT $"$[!FPC TJn{D[ZPA!,<%4==%$2?>3>$2HFPG={APPPXjqkek|kkqqkrxƂ”ŞŢĮN "f&I:'p,KR AR`#HJ.HiϨr*`4&ǃPXKu! ,D%o܁K&,ry8y[I]T! ,L%@jQf{s80)RWJppFkca^"!,T43%@"Z"gHv@{ZPPPPWrN&V@ulrZaa}UummxȜȳǻưǷĺǹ`@p($F"TGgJU)ֺ<ĕ 45|0Bɂu&AT'E!X sBX$ $[GcPC SZdN]TA!,\4I1m"PPP5oH^m9s8yB}LxUyBsxȯǯǼS f&I:[› еpA"_gPD C! `l" #dLc(/O4!! ,d=>>2@IZn!t<3>Hp6'c@owwlZZs*y7lD~K\sŨȽĴǼb@p(,F"TGgZU@cyR dDF(86%ͥr )\ {M $ Q%I%! mF#B SPVJKvNXA!,l@Ia1g1m0z >{f"B!t& &uGeP& SP&JX T\ZTA!,t4I1m1y>=yG>"PPP5oH^m9s8yB}LxUyBsxȯǯǼS f&I:[› еpA"_gPD C! `l" #dLc(/O4!! ,|=>>2@IZn!t<3>Hp6'c@owwlZZs*y7lD~K\sŨȽĴǼb@p(,F"TGgZU@cyR dDF(86%ͥr )\ {M $ Q%I%! mF#B SPVJKvNXA! ,%@jQf{s80)RWJppFkca^"! ,%$@R!t1s0zGG3FQG>2PG1{A5mXj@owRy7s8yByBZoașȫȽc@p(F"TGM !LUL*[ cGd<"Hb1{wmP"e[!y{U"!"a jaB OUNENJ[A!,%4==%$2?>3>$2HFPG={APPPXjqkek|kkqqkrxƂ”ŞŢĮN "f&I:'p,KR AR`#HJ.HiϨr*`4&ǃPXKu!,2=j p &V5o6u@o@ugrr®nŜȺŞƢǼP e&I:[— еx1ɥK\#CX@AiVJQ!-*ooYf xw; ׳B! ,=F*o܁K&:,ry RA :,ʴ&OxÕ݊)! ,=>>2@IZn!t<3>Hp6'c@owwlZZs*y7lD~K\sŨȽĴǼb@p(,F"TGgZU@cyR dDF(86%ͥr )\ {M $ Q%I%! mF#B SPVJKvNXA! ,%42?3%>3I"R!t0z<P?2v@PPP;XjQqwkxa.m9yAȫȺǹ_@p(4F"TGgjU)ֺ=d$ʕ 4P e+p>"92u.zT rBP & #LG&[ OdZNJXA!,%2?=%@1s0z<PG1GPXPPPVejRZs8s*s8lCToSasåsȩȶǼİd@p(F"T@#KjEPfv5HM4j!bt*Bw#~B}\t i~GmVC ENPLnVA! ,%o܁K&,ry8y[I]T! ,%@jQf{s80)RWJppFkca^"!,43%@"Z"gHv@{ZPPPPWrN&V@ulrZaa}UummxȜȳǻưǷĺǹ`@p($F"TGgJU)ֺ<ĕ 45|0Bɂu&AT'E!X sBX$ $[GcPC SZdN]TA! ,4I1m"PPP5oH^m9s8yB}LxUyBsxȯǯǼS f&I:[› еpA"_gPD C! `l" #dLc(/O4!!,=>>2@IZn!t<3>Hp6'c@owwlZZs*y7lD~K\sŨȽĴǼb@p(,F"TGgZU@cyR dDF(86%ͥr )\ {M $ Q%I%! mF#B SPVJKvNXA! ,@Ia1g1m0z >{f"B!t& &uGeP& SP&JX T\ZTA!,4I1m1y>=yG>"PPP5oH^m9s8yB}LxUyBsxȯǯǼS f&I:[› еpA"_gPD C! `l" #dLc(/O4!! ,=>>2@IZn!t<3>Hp6'c@owwlZZs*y7lD~K\sŨȽĴǼb@p(,F"TGgZU@cyR dDF(86%ͥr )\ {M $ Q%I%! mF#B SPVJKvNXA! ,%@jQf{s80)RWJppFkca^"! , =33##HK H4.`0(J&p[LV2A[3>$2HFPG={APPPXjqkek|kkqqkrxƂ”ŞŢĮN "f&I:'p,KR AR`#HJ.HiϨr*`4&ǃPXKu! ,$%$2?>3#R1s0z"j(p6ǶDzǹ4)RWJ ³7 I1Ob.5M()! ,<$=33#@Ra!m<j5v6N@uRffrIZm+m9rCgsƝȬǺưǷǵǼ\@p( F"TGM!J5|[""dV 6YEmAy!~mL !KUmJaNlNUA!,D43%@"Z"gHv@{ZPPPPWrN&V@ulrZaa}UummxȜȳǻưǷĺǹ`@p($F"TGgJU)ֺ<ĕ 45|0Bɂu&AT'E!X sBX$ $[GcPC SZdN]TA! ,L4I1m"PPP5oH^m9s8yB}LxUyBsxȯǯǼS f&I:[› еpA"_gPD C! `l" #dLc(/O4!!,T=>>2@IZn!t<3>Hp6'c@owwlZZs*y7lD~K\sŨȽĴǼb@p(,F"TGgZU@cyR dDF(86%ͥr )\ {M $ Q%I%! mF#B SPVJKvNXA! ,\@Ia1g1m0z >{f"B!t& &uGeP& SP&JX T\ZTA! ,d4I1m1y>=yG>"PPP5oH^m9s8yB}LxUyBsxȯǯǼS f&I:[› еpA"_gPD C! `l" #dLc(/O4!! ,l=>>2@IZn!t<3>Hp6'c@owwlZZs*y7lD~K\sŨȽĴǼb@p(,F"TGgZU@cyR dDF(86%ͥr )\ {M $ Q%I%! mF#B SPVJKvNXA!,t2H"g!mG>"j(p6ǶDzǹ4)RWJ ³7 I1Ob.5M()! ,|=>>2@IZn!t<3>Hp6'c@owwlZZs*y7lD~K\sŨȽĴǼb@p(,F"TGgZU@cyR dDF(86%ͥr )\ {M $ Q%I%! mF#B SPVJKvNXA! ,%$23%@1Z!m>GGOO&GGGPWfQpxeex&]5i|vY`xRa:g,g,l^~Abztźǽż`@p(<F"TGgzU)ֺ-|`+9qfK9Y`WL[ B'X$% 'X$GczB SP\N[ZJXA! ,%$@a"g!mFd'p6V5c5iGFQx}€Im9m9S[hì~ȝȽĽǷǾǵǹ[@p(F"TGg*U)֊]l$Ƃ-p.B}(U(LGh< "WTBFPBwSB L\ZN[TA!,%o܁K&,ry8y[I]T! ,%@jQf{s80)RWJppFkca^"!,$@1s0z3>Hd'PP=v@ ]m,}UyBsåsȡȫȡǽǷĮĵǼT f&I:'P*l 05"`$̃A4} a\+ݯM6dmQ4]%}.M!! ,%$2?>3#R1s0z3I"R!t0z<P?2v@PPP;XjQqwkxa.m9yAȫȺǹ_@p(4F"TGgjU)ֺ=d$ʕ 4P e+p>"92u.zT rBP & #LG&[ OdZNJXA! ,%$@R!t1s0zGG3FQG>2PG1{A5mXj@owRy7s8yByBZoașȫȽc@p(F"TGM !LUL*[ cGd<"Hb1{wmP"e[!y{U"!"a jaB OUNENJ[A!,%$2?>3#R1s0zGGOO&GGGPWfQpxeex&]5i|vY`xRa:g,g,l^~Abztźǽż`@p(<F"TGgzU)ֺ-|`+9qfK9Y`WL[ B'X$% 'X$GczB SP\N[ZJXA! ,%4I!m1g1s<|>GGG>"{AE5c5iXd@uw{Rg:m9yByBoagŔȨȶǽc@p($F"TGgJU)ֺd6=. )ZX $B sT $"$[!FPC TJn{D[ZPA!,%4==%$2?>3>$2HFPG={APPPXjqkek|kkqqkrxƂ”ŞŢĮN "f&I:'p,KR AR`#HJ.HiϨr*`4&ǃPXKu!,%o܁K&,ry8y[I]T! ,4$3%=%$2?3>>I2H3>HG>"xĿmsåsŪsȡȣJ d&I:(@Bp @O 1 i" LEJ \^+7`Yoi:va!! , 2=%=Y4W~_Q0kkq&]@ullr€RRqjéxǽĞDzM "f&I:[ؘ` 2vH"_XBHTDjtGـ550L.@=-W.s]s<-!,%$@R!t1s0zGG3FQG>2PG1{A5mXj@owRy7s8yByBZoașȫȽc@p(F"TGM !LUL*[ cGd<"Hb1{wmP"e[!y{U"!"a jaB OUNENJ[A! ,#4$=a!m3I"R!t0z<P?2v@PPP;XjQqwkxa.m9yAȫȺǹ_@p(4F"TGgjU)ֺ=d$ʕ 4P e+p>"92u.zT rBP & #LG&[ OdZNJXA! ,<2=j p &V5o6u@o@ugrr®nŜȺŞƢǼP e&I:[— еx1ɥK\#CX@AiVJQ!-*ooYf xw; ׳B! ,D%==$$2?>3#R0z>1s>1y>=yFF%j(|f:GGGPGGkqllrZf:s8ZzgūȻĽǵ]@p(4F"TGgjU)ֺ P$˕<QE4ƒUlbpz&JX!&&XG [BSP\TZPA! ,L%o܁K&,ry8y[I]T!,T43%@"Z"gHv@{ZPPPPWrN&V@ulrZaa}UummxȜȳǻưǷĺǹ`@p($F"TGgJU)ֺ<ĕ 45|0Bɂu&AT'E!X sBX$ $[GcPC SZdN]TA! ,\$22HO4v@5i@owqZrCåsdzķĹG d&I:[“ еۻ D;" Ǣ8.`Lhc h,dɳμVvp! ,d%$@R!t1s0zGG3FQG>2PG1{A5mXj@owRy7s8yByBZoașȫȽc@p(F"TGM !LUL*[ cGd<"Hb1{wmP"e[!y{U"!"a jaB OUNENJ[A! ,l%$2?>3#R1s0z3@R!m1ss&]?jIzQ``IRg-KShaamxƐȡȬöǻǷǻĦǩųl@p(lF"TGgڒU)֊E0-LBZ%J@$@+ %WTB -), PB"-SB-L* H,-OT (KZNXA!,2%o܁K&*,r#U'kVq3wWL! ,=>>2@IZn!t<3>Hp6'c@owwlZZs*y7lD~K\sŨȽĴǼb@p(,F"TGgZU@cyR dDF(86%ͥr )\ {M $ Q%I%! mF#B SPVJKvNXA! ,2=%=Y4W~_Q0kkq&]@ullr€RRqjéxǽĞDzM "f&I:[ؘ` 2vH"_XBHTDjtGـ550L.@=-W.s]s<-! ,2=j p &V5o6u@o@ugrr®nŜȺŞƢǼP e&I:[— еx1ɥK\#CX@AiVJQ!-*ooYf xw; ׳B!,(%4#42?$2==$7%>3$2?;3#=;5@IRZam#H"V2H1Z"g!m!t3k1s0zH$1y<6x]c x xE{%FY>GG3FQ4W~HWH%K4^'W4G>"G>2P?2j p d'j(j5p6X>sPG1PG=[P3jQw@{Z|f:GGGGPXPGG_XOPPPPWfPZrXjqQpxe__kekhhskwq|kkqqkwwq;IV ]&V&]&]'c?j5c5c5i5l5o6uGFH^@oXhQp@o@uQejhuuuw{  |vRYjwfl`cgllrsxrxĀIVXaaa.a-e:i,m9m9s+t7s*s8y7lCl^rCxMyB|LzUqjyBZhvKS[ZkoakuztahagmtmsåsŪsx†ŋȇȔœƠšȭũȻĽǭƴǼìİ·ĴǼǽĻĝţôƺH*\ȰÇ#JHŋ3jȱǏ CIɓ(S\ɲ˗0cʜI͛8sɳϟ@HGP,|Ztd#J:TBFA2QIcbmh pŧQٞ<?rrw ]xC~'+oB>u{!0?Eh$W ޾0%V(Nw:l3f/.q5nUĭ{{w-|D ;Sn:E uM%\ovHľB1y>pwK\w} DEQg}96HsIENؐ!A(!:T2ETatTr҉ V `LD;&ԣGч!dB6_CDX`uE?Zv r 2Ե=0H]<"8e92D}9Ět"D2d"9 (X?Npd:%u @yO#H `2Q3("z)v: 袭j:Q(T xG`&jRD?< īZl<*;l(xN DI#L]mZ׬q)ޞɰ@`tMxR&3$G! HK:9]) opc6.$ B槹 W)EC8BippWG%P2X{aȻiQ :tI!MO98G?бrLbjUȁHg-B=R $%bSIe( 1?nL:R @Z!PR aAbJtRzd\ P4GJ0s& "SDDȓeZIj^ڜ4 I@p\tܱIʇyHo h< )%pa@ PYT*$RQ(P @K蒗 FӉg2)D*Sv4!ծʝB́T =i/!8eM$ŗCT HZqŖ(H5c,1ssf\Y{U5LW^v- ~@ 0@ "YnXS Xcke-})X4l+ =R'jHH@mIXBINo[!݂"( ȧ7w]&stZmT%dp>H!m/)JK'r&Xˤ#lh1$T"d KIǗuшZh/)=–nh4!,5QY"H<8"c|;iLr"O'c9!+K3< xǍ_ c"t1DdEUXm̅7K|e=8^r]*vO!>rx{$7O |/'q#pc] 2'eܘ g Bm,ȽZ X:t'wvc ]W49qWDsL=ܐPЀGЃnzNŻ3p`|') !g { ℁1ʗK0?"a{CL O8ak`ڐs{>/>_M!8HwyyvRt`n#{'~W*'|ħ~Ƈ|W#? J) FdfM9y}1|}.Hx!$hWzz|( $,(އlgf0G{{ZLGGOO&GGGPWfQpxeex&]5i|vY`xRa:g,g,l^~Abztźǽż`@p(<F"TGgzU)ֺ-|`+9qfK9Y`WL[ B'X$% 'X$GczB SP\N[ZJXA! , =>>2@IZn!t<3>Hp6'c@owwlZZs*y7lD~K\sŨȽĴǼb@p(,F"TGgZU@cyR dDF(86%ͥr )\ {M $ Q%I%! mF#B SPVJKvNXA! ,%42?3%>3I"R!t0z<P?2v@PPP;XjQqwkxa.m9yAȫȺǹ_@p(4F"TGgjU)ֺ=d$ʕ 4P e+p>"92u.zT rBP & #LG&[ OdZNJXA!,2=j p &V5o6u@o@ugrr®nŜȺŞƢǼP e&I:[— еx1ɥK\#CX@AiVJQ!-*ooYf xw; ׳B! ,$@Ia1g1m0z1yG4G2yPPPP^rEa-g:m9s+xMyBKSihséxȠŤȯǼİǾe@p(DF"TGgU)֊-6!Ir*H("H%aq(d!|ToB#uh (vGeP( SP(JXT\ZTA! ,,4$=3%=%$2?3>>I2H3>HG>"xĿmsåsŪsȡȣL "e&I:,Rp DP051q$ LIJ \^]epNe\:wX! ,4%o܁K&,ry8y[I]T!,<%$23%@1Z!m>GGOO&GGGPWfQpxeex&]5i|vY`xRa:g,g,l^~Abztźǽż`@p(<F"TGgzU)ֺ-|`+9qfK9Y`WL[ B'X$% 'X$GczB SP\N[ZJXA! ,D%42?3%>3I"R!t0z<P?2v@PPP;XjQqwkxa.m9yAȫȺǹ_@p(4F"TGgjU)ֺ=d$ʕ 4P e+p>"92u.zT rBP & #LG&[ OdZNJXA!,L2=j p &V5o6u@o@ugrr®nŜȺŞƢǼP e&I:[— еx1ɥK\#CX@AiVJQ!-*ooYf xw; ׳B! ,T@Ia1g1m0z1yG4G2yPPPP^rEa-g:m9s+xMyBKSihséxȠŤȯǼİǾe@p(DF"TGgU)֊-6!Ir*H("H%aq(d!|ToB#uh (vGeP( SP(JXT\ZTA!,\%4==%$2?>3>$2HFPG={APPPXjqkek|kkqqkrxƂ”ŞŢĮP "f&I:'p,KR AR`#HJ.HihDmW 0A (,EՍ ! ,d%$2?>3#R1s0zGG3FQFG>2PG1{A5mXj@owRy7s8yByBZoașȫȽe@p(F"TGM LuL,[ „ gd>Xb3B{mP#e["y{U #"#a!j[ B OUNaNJ[A! ,|%42?3%>3I"R!t0z<P?2v@PPP;XjQqwkxa.m9yAȫȺǹ_@p(4F"TGgjU)ֺ=d$ʕ 4P e+p>"92u.zT rBP & #LG&[ OdZNJXA! ,=>>2@IZn!t<3>Hp6'c@owwlZZs*y7lD~K\sŨȽĴǼb@p(,F"TGgZU@cyR dDF(86%ͥr )\ {M $ Q%I%! mF#B SPVJKvNXA! ,%42?3%>3I"R!t0z<P?2v@PPP;XjQqwkxa.m9yAȫȺǹ_@p(4F"TGgjU)ֺ=d$ʕ 4P e+p>"92u.zT rBP & #LG&[ OdZNJXA!,2H"g!mG>"j(p6ǶDzǹ4)RWJ ³7 I1Ob.5M()! ,#4#?=IZGGOO&GGGPWfQpxeex&]5i|vY`xRa:g,g,l^~Abztźǽż`@p(<F"TGgzU)ֺ-|`+9qfK9Y`WL[ B'X$% 'X$GczB SP\N[ZJXA! ,%$@a"g!mFd'p6V5c5iGFQx}€Im9m9S[hì~ȝȽĽǷǾǵǹ[@p(F"TGg*U)֊]l$Ƃ-p.B}(U(LGh< "WTBFPBwSB L\ZN[TA! ,( %4#4#?2?$2=3%=%>3$2?>3#3333>>>3>>>2@IRZan"R2H2Q1Z"g!m!t1g1m1s0zH>1y]c x x>GG3FQFOF%O&G4G>"G>2P?2j p d'j(p6G2yGG1PG1PG=v@{ApI|f:GGGGPPPGGPPPPWfP^rXjqQpxe_O|f^eeeekekekeex|kkqqk;EV&V&]'c?d5c5j5o6uGF@oXjXj@o@u@uQkqsw  |vY`klt`glrrrxxxryĀIRZRZZ.a.a-f:c:g,g,m9m9s+y7s*s8y7lDl^xMyBzA~K\bKKS[ZiokztahgmsåsŪsêz‡ŋȇȔÜȔȜȜȠţȬŪȳŻĽǮǵǻİǷĴǾǾķĻƽŞŢ®³ŻH*\ȰÇ#JHŋ3jȱǏ C@"8rGF>RL pf 4o޻E Sm8Rj@6VE6]%MRx4iTQf6_jq6[=q:0W]͐gy0; a#euhb06!/&J#Cz<V{t<#(E4H18ubhxn~,Ų< 3`B~==CC[04DhAN  < 1#̠"(T!^C؉6lHڈw ZP ,t! B=(Hrŋ@F22]\L#C@p !qnTH:xcH,=cOIHB rLFڑ!)J~dEX8*XC RN$p`CVC |%eˍ`/IL L1L,|&4)i &6mr!,LILLIYVGKTJM[GK[JMVGWSLTQM]\LSYJZUSRMIdMIzQMfSKnRNqRM|QSgSTvZ`sgJLeNQcPWg[SlTSk[UvJK~OQzQNxWRdRbpVdid\ybWigjcdu}qc|zsONRQTZU]X^ZdZc]i]i^kcl`nkldnhudscrnuiyj}smr~u~h|,+4%>(ABTEXI\|xjwv|w|\TaWdYk\cYj[m]p^l`sgxtwgqj|d}lwm}d{rA>B?\_^aceLCVM_V`X`cl{luy}mz|w}}ޟ"ߠ# $-ܪOݫSޮXS.0ţƤȦɫŨȫˬбò˺ƺȁŎɬҶ̽ʵѻѾيߏސۻôǸŸȺʼŶż½ɺի׫ӻ޵ߵ½ֽ·ƫĴźɽγ H>*\ȐaHŋ3jȱǏ CIɓ(S\ɲ˗()ʔhƙ8+"O)ev,ѣH*]ʴӧPf|4翩~tGl͘1ksA{ 26Okυt.sJ˷߿ ,حa+^עjfΠI3j'BN?^F"$#2p,1WOދ)=q9q:~;9unimǽ}rdQqԭkNgHv=>q㇏?[VL-&O\0NeA =lcjd!fsKaPBOHRaVP3IE1iqUjueAy6]NXre|prc+E uҨPsq0Lj|s@@#$YAo޺Ay¶  S"-Nm{S.:{OS6!elY^Z .A5#Tr} *0uP >$0,O)P#8ؓ (+p6>_dLd\644$AG۳ ,I)+O<21 =D 2*1'S) @ڥPʑ(yOӷ˿mLN`SH735| T[u&e[6+Nc?Μ r&k@So|q0p{.&|3+[/=?rwRD )pǽ eŋ^)fKg7{ܲ $`+`F0cHX]$aBͣO FD"1AC=b!pEBC2AG! B6vTvL(I"^ܐVF|T!Fnju?Cd8-U,ƌԣr5HhH$|!>m.x!oŒxSB8W#n`GNJQz,%pLB*GP6R+WQyE㛏`$M]$'=YqB4U1M|x!Ç8mANs!G Do8ig2DbZ(Ш/R"4U>*g` x0 p!U/Y8fb[7<*ME3Qu4'A;aa+U6@qZФf'npƾ1~:X:OPD+"!1,ĐY4 0x;lɊ|l#hH< >R )@eMہp`(Ôi5G~ IIY<xA7N Gmk[> m#P.ӘvPRHbҵm8GV!T.Z6_~ Kϕ7L6\[c&o;\֠0>ۀi-r45~@i;pEm' r!F[ے#+n1XE2F| n>`ET,W&Cq["PHꠠ-XɫJ[k=6Mů2PQbF@lKaGs leLx$ j֣א* k".דX#i %S<q͎`7dbm_Nvl2`&b㑈_f= nl@k;*uswg;2iWڎ6;M 8G6x˻_ƻ i/fi_c+[mį+xRp\1-loK2 ő}#7<⠷p@7Gx .w[*p<Zo}.8qɔ w]V ^ķ[p|!aw]U]7}&VD et`P]Ze$|$ [fsPFTȁ @PTF;e6@G \GffLD/_']&{-8mc H@8P&~Dӆ8 @e%}wkj|؇y 0 "$j}`yP)APf'i0diCbtWK J>02NJ/UB G p JFS],tb%yH逋 &J0Y#W0 LX PLb @XLWm@q p 0 xK8H戎oƌt8_Hvxn Y+3 y IG_ `KbEP0؁0z16YvEH:pX@vQpԨYp.)y>IWC鎮8 㘒QIG*Ǎr`ؘz5PQ1 ! EE ٚx \=YQ >PiĔ@tt&@i3Y DI&te^+cȩ2)yljdPi k5 SGPÇki62' i+ɔڞ9 q1 xV\x10T]i7 ӡ!ȉ؟,xx2#2!xvIל렠$@X$B%PLGiZIvi)k~iyAZ'SО= ?hiq 4V-'TڡkFJ @b d i` z | N0uj0_x~jjy?ʪ-V6}iZy[ʺښjy*yʫUybꬍ:ez|خߚJgdV jǚʮ ʬfKz*yЋ!˪[(u )1-+(f:;~l`DK}hI{!{X#eS`;d[f{ h lr;tK` Pz  ;뷈eqt"bk]W[cK ۺ;[˹q {˻۱;˻{țʻۼ[[Kċֻ ;[g˽V˽ꋹ!,h KGKMJMKGWKG\NJRMJ[VGKSIL[GK[JMRMQQM]ZLZTQTSP_XU[KGaIDhNKbOLkIDpNJuMK|RNeSTdSSlT[lPQvPP~Y[uX`u_bx`FIcKNmKNcNQlVTl^TsFHsKNyMMqNQrPNSOsWVv\SzTR`PapVdnh[z`W{l_dahjejkjnpelpmpvpd}qcrststzONRQU[TZX^X^[d[d^j[f]icm`n`ndrksgvl~u~gzk|npt{{w{}]T_VbWbYn]eYi\q^qcrixtrc}c{mtb}ewqqzjzqml~qs||}œÞŤƣȦɫèȫ˱ó˾ʹ;½ηҹѽ°Ŵȹ˼ļĺ˽ýü²źɼ˽ H*\ȰÇ#J$xmćpz 6ARځp36V#QA85YaݨɃŁ klPA5~*]ʴӧPJJu*:>U E)ݳ6@1 4@8\^Sp@mm}C' d( 1۰SVuJL˘37|XA F=u t3&9QM3V@OyeZ=j ޣbFmL)liν(C"Б  JRXqxN@qdA OZ7_}w~w3 P$9C@ D<|$˂ ^#8SJq^5 2<` S }sO'A_bDxTVT=Xf\v`)dihj<_.!޴" 4 dQO>N=(RGs-AI+BOwgp7ɥ32HL+A,:#քP3:bN=ր%},$' =zA@k覫n|%=\@%sG#K8x" t2sXAOE\Do .M<ӌC4LÍݜH=k800FL_xȼChIOVh 9k+8L#O'kXg\wm.| d"3}A.l7$"Xs06C؞ 03%8A<259 pC"69<$cx얬HhD,8Agb@ ,ha ь0ܠ4^m@Jq(bSHJZ̤&7Nz 1x(n R@waAтUU AWR-qxl—3L |JAȣK3Q_"w6V ̧>ɒ~s@. vh0$h~$D(Іr4a:LDnђ(MJQb0դ2"`Q5Nw:Bv@ PJԢHMRԦ:SJժZuЄTʉ^` XǪԀ!,#4#?=IZ3I"R!t0z<P?2v@PPP;XjQqwkxa.m9yAȫȺǹ_@p(4F"TGgjU)ֺ=d$ʕ 4P e+p>"92u.zT rBP & #LG&[ OdZNJXA!,$=>>2@IZn!t<3>Hp6'c@owwlZZs*y7lD~K\sŨȽĴǼb@p(,F"TGgZU@cyR dDF(86%ͥr )\ {M $ Q%I%! mF#B SPVJKvNXA!,,%o܁K&,ry8y[I]T! ,42H"g!mG>"j(p6ǶDzǹ4)RWJ ³7 I1Ob.5M()! ,<$=33#@Ra!m<j5v6N@uRffrIZm+m9rCgsƝȬǺưǷǵǼ\@p( F"TGM!J5|[""dV 6YEmAy!~mL !KUmJaNlNUA!,D43%@"Z"gHv@{ZPPPPWrN&V@ulrZaa}UummxȜȳǻưǷĺǹ`@p($F"TGgJU)ֺ<ĕ 45|0Bɂu&AT'E!X sBX$ $[GcPC SZdN]TA!,*,<6;&7(452Gg*Q0u=I.;J93x] q>G=Ez9FK0Ru?drLL*J>*m l/R9u^HRI4vBpS/{d9IGIMIZGPSQGGTMSUSIQPQLHeKErRNfSMySVgQZsUlubIMdMRe_OfVYuGKtOS{POwVVaQbvZjwgZgegggukwq{jjtkrrqjvuv;N i'Y1h5rGFH^QKVVX^ClXh]f]pSsArdibjithxtuw{k},+4%>(AEX|vXi{ui`irwruxxqx{ˆUZ.bj3u3ZUkDh\rCyZmCl]xEzUi`qimawf|xyBA?^abdC@LCVM_V`Xdf|ZjufuuVkvjxsgwrߠ#$)ݬT§uSZ.0ŠǬйрǍ̮úշƯӺƸԾۋݎıĸڻźڮ⒕㷼ٿĝŤŸƮŶҶ H*\ȰÇ#JHŋ3jȱǏ CIɓ(S\ɲ˗0cʜIsc~.s(#rD]PJ040ZիXjʵט7ò,H"F)rT.PLu(P)fK/^lC 0N~~h Əa f0oM 8τg` ! ǩp)ǙѢFУ/rϸ}D[(SL]T5o˟O/^$?r7&,<1P? K/LvO}(;x<ᄺ`6p8a/5 \A0  <@ާ=_AC&I"5و"(y)Blqޗ_lAIh7c Rx$?yX C'?HGqhB"b+?5D!}nZ3cna"jB_~I MVa)ʯWRʐ I1eh.Ħ)K}( SO7X .R >@&lzMd[n?[g?ᘸqԠJ 롛/(M0a;6h_8*B9`cO.Ϻ+P2٨84׌δ3Ά0ZCo,u}¬^ kZXg]3g $%$)*yI{hBh_Ҡ-cHSQA"NLBPVTD<5l;E=/~)=hHGN\2,@@`y|c`0α'M5π3' g‡'MJ[Ҙδ7i@QfRԨNWVհgMZָεw^MbN?f;ɎMj[ζn{~MrNv[MzηX[N7'[p'N{εZQ ?@5H(G6Ǎk(pHG}fx"微qq]t$aZNԧ?p]D;  !L EQ((uhbp st<pt~>;'2c^w{.xƿvJiXUFVjnQ"^ wXOm\BU' Fwţ d^CxU`:: /&tw|>c(; H װ~&gp~~אtp LJ3W 瀛  #j'~'sw~Ps$x}˷<؃|͆uYu` xr 7P#Xg&(uaMz"Aj^yayVhw$lHQȁ#X\x~rI;t%x~0yjNR ph `5 jHl@p&)P cjo@r;%h 7s jxȅv~tPj5wizgƇc(~pxs h Hv XxVpkxkj" ` ߠ p shj vhjXsg}6r ɐ%` , jfxY@w~:ʠɀJkKB0 XXj@Аh -`vxXmjaYjcd)2'k](r;7&8SYVAufxsByj6H>ؔsjh " G5I+` }PT , ݸjiƧw #0Zjt9Hpzjryѹ7ww T'60fF1Ytw~WA@iS9ٞ_ٙXٟvW t 驅)D ;狗 &z('&&pfgj.j v- k3Z,Zf Gh;jj`l: (R t*mhWwY:^`tBgF pfaڦnUr:t*qZxzsw~ZucJZz֧ڨݦ &&k ꨜک8qTFIk ZH驶z1f j6jAjKLJ6|x ΊZVtGt֬6086HtjUu[uFjaweg}r6yixFy yw yZjCp PXx~yDŽ`jZKwhxׯ&뀹@Ȳz yy'}ԗև}w ܇&xX跴HXT VЛ0p xTp ʘjW[ xc'Kk ZsK|T{ ʳۦ:EjHJYن`/*jK~aKrXKAjʖsXWXjWPjixs]kzjH jX 8̨jj\ :8;NP zjxۼK૤H@[ۈ8v8Żj迃W#ِY .f-\* J$tz(i*ْ.4|P)Jp bې=?\{ܽнftˊP9i纅CBLp]sH|ſYfl:P{jK癠ŧpvtl q9<VpK皰HymLp Ƽِ~d|\W| s |Ʋ\7yAy)x @LT9v18vsǟAЈOPy A7l ۠<|k?j=j̣4jWv&Dykjjmj IZj]j|j=Mi'.2=p0=6}8 E0t >񿑠P'  !Q4/*ăP%*uxc\EǾ1bV$Eb,1.Jv3cf0"4Kc "#7èSr~ rh-7Si&q0S4}76*DN! /TdľOtRNC15IGsX)t "_Ekw>tbt!FeXe6$i^]_ݏĎػP 9NK8̋5&[cwUX%.n]u5gck䙭nsh^0G ێX6*)w4a x{ G<&T#r0 1pX 0g(/pegܹ&i(:(B#4׫r޹:O?=ej(ʥ=FE}qTg]Gs^ghI7s?}J@n>-LBtյ.gQ#@d4w? ( _ʥ&y 5T0q蓃N&N},Tr ?6C8z\:@Wo;]Yq' A*DDH{w)FJœ5"ō (;Aq~Cu41%"Ǖȑ-T!; cZ#LCJ1*6V2%\I&gJT/L#,w bSzeAH\$j S"QS cwd>z)c)r%4Oe[%37dd.W˸(tMXrH3YrȄDzλlf!Hqѡ1g$@'5@IM*wR?WY!, G   ৼaP" ԨG"86A5jbD5X@J"&*X::kYZU$Gk̴TP!PA╩}ER+fVSk&&y*[љ]צuD)I O%LV֟\dWt!kH "DNArX-ens36FWхtSfwhPG1֦V=Trp^`fCu Wu#W!1q]p^n9Xp-|a gX0s!ܭX#&qM|b]bX3qqbX;q}c < r|d$'Yqd(GYS*gY[rMd,{Yc&sͼ+Ykfs fLCxv|g f qFCAxbE\9d '9V )UP:s\K@kŵ;1'la!p5>wg8RQpfza%WUa" A@Cȝ<.kI:v' I@mL [ŮEFR|='c3STGŊeg}ycldO Zg4A><S=]w*@+;+ڴaA)_72>mEx ECپ`}@k@6 b;<@dvK@l@X@@ 4@ L @  @ܾ\2@ [V@7VHW 8;A6ä3 23,d33e 93'x3B*T[ډm C!*MlGNN N NNΑ0° "b,}1īlOATy Pd tsH {P @[mOBIO_‘Px8 69I cу f@!)!+t N#QP(DQظRMPR" Њ;RހRQ%'!/M 3Hܰ2e .ʎґS1]RW|.,ӑ8{IpM`2$۹9)ɟ쯖H4rȚ1 iHH} i`r1:OP9#UH:%꨹6J <BEC|K}Jփ >RKʢ<&N5 }*Tu.։ CT}RE_Ib#Z+T`RV) h0P4,WM@\yP.'Jy#B P`PN:,EXnX ٹٱ Q `ب< 5XثdXLT@PY| 5PGZɳ XӬM}882T ;m5mٕ8C0Z&tS40,A ЊLE;z҆Yۨ8EH (?ӧ:) ܊RFð쀅X`k* 9:]I \šݻ]Nt-Ҍ\DY\DR<̛Kǃ< טZ4 0p\%)^n*u PI[1J_=x =eI]R _ AfYLިԸ/q_aDD8) b= 'DQlb;ҸM1a"f jM̝9@!.a}1⸒&f 闪6]<;Vcءf3`2 B$B~bQU&dzS= N?!c'>, +>T.n QɢZ"a1-"k(: &(e0c&f:䧵"Q X "!x < ā>Z HSxzEKbQ*Fdj)Z%(>%Flw80h*PbI`?J=LZ/ƨb󋨑 2Bޜa6zn^攬բ+ ,ϑ譃$h:b +Lʛ|MiyAl:T)I`Aہ>&mm#Ͼέ>m^m~m~؞mێھmv.&,xݶ\(pAl)$7W2nPAJ *q8V ȊFO?$Tb-}AN $hOJ%4L7RO 3׵_q3EQ-{UU^<,j1-/pԜKEJq.1)s/6FfR6w[cBɨpnuEg68`tT) $X3DȃxtG){KtL`8?9L f &65^̅2$⼠9 :^X/ҁ*EP8T_[NPba`uObࢊiP1o#pvoЅBx˧)we!ޥstOve$GdL\lXW']PdQl?H~ZOXxPw[vR>EDwn&!I0pK0dyw =Lv9 8x E[`>}x"[|e\6uAx,(e{"iբ<$G`dR rIr-IpHsɊ9<{*·o;t+f i Γ(y O|` ϟC788_z}Lvg}D ޷}mm.~mO^~?m.||Hl(HDHPwn'nb@'nހo(Nno~`U>l!Ĉ'Rh"ƌ7r#Ȑ"G,i$ʔkeKD|m7pTp&AyD]CM @'Op0UuypjՇlr8,Bf5S%X߾ O}k7H^V%Ċ3n1Ȓ'3f o5"J,AM ԃg-SgL@jڷ|wahnJ(zUsgn'-{9x׳o=[RByw;4cW;%?X@&~ 42߀!q5t@57X!PMP4T\qm P54T#]#A 9$E6T}1EԟgYP- [eaYZN^`|V8=A`F:\%njYW_A10;rM|!)WH~ui$J:)Ndj!铝ّPI]\_ (DaV$[MM47 QE{2U;j)j-n}-fjՖ@됚zao7%/;`k 8Q hO\+Pa|{1!.fmZjS0 C*)CKiEoh/*"zwU 8ZEWsYk5]kD2LYO&w[s-3"P¸`7SLt0>ss#HT^K>9w }|?A>u3ͥc06^=ܸݬ`%i6O6;Dq呧_&-դiZ~=k.m1MZw-4# 0z*nKȶ!3ܥ;T;qD0> OXhQI$،&(C pv.dB0 8p"  a>! `BQ$N|"4DL ϕ4HT !/Pnja0M)" ?Q[tS0")B&uC*r7UM]pl3h<;6v=miJ! ]W$C៉,1K1A{ԟBx/3Vkv`ok[ Yp8VE,y,A q޻N:*Dt+;e:hV . oTeiם.L3!#__Ux.[b7;vVy -)㑀44ty'lIair VYM{ߪ+Hpy {@rۏ[n=yK91,9€jq6 /Bװ! 7M0=#i{@s&oO1,9ӼAs|>z-Fq׊ L`FPgIr2 P1( 'H+<:t(&!~ 74 Gpi`ȱд>$ AD`Uh"D]o+=:b̈|vI&tQLiP `~r PzDTn8&`;$=<Gp! Y~YO1u8brEoHg;5EHV)UE:l!,G04V- YA`At^D`%@DHA'eF:,LP5P؉o &œAJW)C p1 6mFH@  H_%3GܩC.ܠ5.5)Y݅ɞ<_$Λ MMČ,DT[arnU+‡$*rebx ,!H@ D%ZNJё[ZD$ DԥeG[jM^^B]`RX aG6=fEH@UObdXE@phRgD~Hhi>hbFfF0e9rDoJ@)ojDqFRhSpIF'FHdPF e4'&R6&>*pe vvyqfHXovw>vvf(E0ey&sqv}bD>kEGf'eFnt{(y'6Iă\(*&gzĄ"dDh4A\^m:O;N`F5dCh0ØG Ha(4(ͨ0n(4B5(ȭ\NU߀xDF%bҨRU:DAa:HlJaM)E~$QES^#nCLhm*UTP;@-:M H5>DR)j( _*5TEn-e҄ꆤr 6jM9+N)V(N+N\+ܽHqkbHNUͫDԟ`X\19.v@.VX->-^D8 @BD 5s:참r),'nˑy~_yhlxr& /Z$ORXo*(Np gTxH;1"쎊"!Fo +rgru]| n6j\j阠jVnC@  2)ʠ\pNcjbrߞGo\0!iV0Rʅo0ఞ0$[ m.C0 ;aMLeXW*4n8<~DnR7D""lF$OFdaqqq*1ECD2%`ECpX!YHp.X!sd@uP2(_D#E$b|yND3);Ŷu$JDDqLڗA#E'gH*sY+X20_D2˅$;s40'[,' 3_(G$"$JċOOI=r"8m[4:o[!:0='4ZܪCz!"#bb5u#G $sFPV;g~߆4RC"~461;"I/I5u4#4ܢ2nU/e=o+ #J!GS3/kFL4V?634WoH5DU;F `Z,Abx*KD*RW]a?4yum6b?D)0cuOIKuDh 6@oӶLK ZbVcc+`kbG CǦuj6Xk)veMC`_Fvk6+gSlmuu+vQzD~7RꨎgwͷHe@ ve@78\ĒYc%ӾC8?a 897%VC47_{[8kq8CZOD4n7g8s,c3>#\+g$w _S\dBx=95qc^c7N/^c&,-9K9Q+;LBе45ʷa e[4RӸgv5X^y>3OT8x8}ù 39}:DOɪ$YEME$@D* rQSDM@ {A$vF[[F%7 ׄ!;/{{M+V[t,dM$As_2`d ,E;[FED2BmaOF@;7.ND#;@]]4DoϰӐc}NR~$?+WGXA~(~Ok@;d>GY[CP3FZPI;FcD? 5{(1*?CFw 8\¶d{$X 4xaB 6tbD)VxcF9v_H#Cz4yeJ+YtfL3iִ $I7yhPC5z`N#6ujTSV tiI[vlX(f{mZkٶYv[sֵ{w+ܝ0p` vAvrd\3xw} ,$l3`4ȴ4wnݻ%WYpLw\A]*uH]TNe(FJ kx7=ZZ o<0@ !웮5sN;P'xG\ZLqZ-  KPƛ\]4 B qE TPP#{$\2,#9 O t\!褣:s{C,Pƒ-؏6[=@p> 0ֽ: L+-q̕oW-(b.2yޡCiO~˭&|g]!=QK<1? spF6u1k9%[qG@}[3HDץY HanY2؁R(ʡ@h=)GK`C1mFt T"Dh=OӜꤡ6}x r&ȕ1 ~[S/5adW"ȯKoFK]97yprE`9sYO{>>SO~g@ ZӠ UF5U I*\Ths!aD4P:X׹T -x "CRQj@%@IKDc x[8Rb\hH"D"O aT@)a(h2 Q:%ͅpMUqiTF!"I+~&kTr rjoWf-f3Na Zvګ_ؾ^61DiDB:PҾ$*X㜲vﮣ-iSX ڲlc%`ڳ-`*gj5;\B%ubDȃXEwam<mD22Ifi>מhf{RҶud9-mEZ1s3;i͝V HԨ> 6ի5]>rۥ'W9UR Ġi1O@C&jQW\!87$9zI'ˉt)nxޛxA:'ШWҹޑcwSaB$HҾ#AW4 A,AH|^xvr1dPO7So_~]P ܇'=5I C'HWs(/udByկ|HSc߳AucӒlw`/M 9A, y 0nɋ'zGxU_Lj'uO4(C 韽/c I Ja +⠮#O+31P;(CpAPK(0B*ZP $LH0"*`$.-#"Zj&P.8l0`8;|',4&!z#"pc`Ha0T0#P, -ha ) @ n/BfdJd"6<$ 44L6hAGBik-?Ct&њ>lA.21gfV{"œ,2FeWjZCR^#!^7ik64`J:6"lƦl! Ȫv **ކ>u,6Fo0o$hhϱ#3rO j Ө:c;O@"rrJC!i!Ae; r3<@QsoPOX']vN-"tD@C()FM!"tLmp/@ б.)ä4xT$cr>Z'n%BR8 Kf C&OZu0{Gtt3vDm1mRfgHC$%Db;4!5Ȇ86D<|ǹ20iuڏ1ۋa"4r4Cx"9/g7!Hrwl9y:w5~Db5W23h=٦9wsآ}“7Y b12@HJPH >h<Airܳ-OjBшdlhAG3R!ֈLr7,RC?{.@2@n/wk84ܪhN&! PCo)/lkCHwJTĭjh4pI$PP"WKԏ eKtMŭLR4GymG b :Ajp0&5 n(B 0uʕ!FK]ۍ:b^a]ϵPukJ,P'@CZ+` `uZ)A.#6bab a36cc?6BVdidE,ZP#^pegNSe3]jV"d&Z6r0!x+"`)N"LBV%p1莯H/_#K"&!-r u*vcs t"0" Ԍ#!8o!ٴ%!w .OZ*pV"F.Bqr%nNriq)70 m,:w""t)"PW@{J5Wjse!p !`wl#|vw GWv6uq7ywoG7#t'xHAt37!+ y%d>/qfZO 4J -yv~F~=hFRgbqw 6%qЗe$"Yi&fGA*˷*f"׀%؃9XcQ^#6X6IՅgY8yJV)x5~_{62QDQi489Ol XG8xG!!N$6aWXx]1!l& #R@##wJmOĮؐ!ߒ#P> @EyJr$ay*`BcL¡?9ۙ۱NƴfF(g9B*b? ZV \:|"-$Svr*5zLw6EQp(s2O'hڤCdlR, !-G2o()JRw*F/e6FOuz"z1 7z+xbE> DԈrwr49&S殽?,cW!w)t2 7)vY"[-#A+w(v $ZnrUt"G3"  0;S (3u4ǭe>;;7{wY64;gs|TȻU(ĚUd#z"{{}f1#h]KB5cDLE`yPU6,d0;3i"w9\D;7ٱb$\/slSk鎼%Nw;F1Cv S!z0Qܤ >{oHs<"̻ϻ< ;=t8n<< =B343h l>%0B3Ѽp|Al3HΧHRa8t4>\?)5\c!\ Wz?|p }Poh"M}oӛk͏Qӹ3:CI,"F?6I|qVE".|tȋa]z} cʅwsDk1c؝pf3bؼt +Tۛ=z$ۈ!K}tlٍ峈Sh\^K>qSeHNhC婾K*ztkq^ht;续4P ][;?>هق>&I;41vV Y;.L0V V3Km3T FR$=I1qGu?l iR9WAO 95?|RËL9S#)O2t4@ٻ *ػ:ZkfrD,b K^|1k i*hʖ<{)%E Yf0Ώ˚F@yV2i.黥(u֫5I9+QjS$`tnJ'BI7A65a͆VӶt UWK&Wn%q[ <`~ imڶyJ LhN<`b{6{v0-7Hnϣ#W|w_NPOozIoe84I8yx%qʤSqV#>ƞp?F|E&d-dRNT'Wn$%\Ҷ#Ix&k jgigz'ӞD1\2Ae)[> iNJi^|2i~ jJj?njj k>ڣފkvkKlu*WgCJ ^m&ʐ@5y B4yڮnRm53ni !{vEp p' xA V+q+0O$bB|SP`D^T& HSq4r- S3|s0@ŁBQ 2%2 -!0 DLCRhqrh-a Q4YcT:\BMB}pOxk7SW ^)>c<AN;LQ8K>z Q9T{[-N:\ױѾKw?ϥTaӍ$`Ph5;?F=EC=o>t\poܓ@#!{]53P?#d6%K`SK ^ abB+ 7Ce԰A;F(|H&XaQ860a ՑCfF@0QQRVK V!QIr WȢ>@ WfP;hT"9vbE"^#hd*>w18=׽1 {œ>„44SƈTzPhA@@LJK  )O\qAb$[w师XE ]neFDv`_z* Ώp# .B|p`0. ,;.͓(9'NxӅ=9 3 ;M` tB.Ϩ4BR';7*O dg r)If8_ S+5T`,d)u `בw|d;4t: G`&D>2@IZn!t<3>Hp6'c@owwlZZs*y7lD~K\sŨȽĴǼb@p(,F"TGgZU@cyR dDF(86%ͥr )\ {M $ Q%I%! mF#B SPVJKvNXA!,\@Ia1g1m0z >{f"B!t& &uGeP& SP&JX T\ZTA!,d4I1m1y>=yG>"PPP5oH^m9s8yB}LxUyBsxȯǯǼS f&I:[› еpA"_gPD C! `l" #dLc(/O4!! ,l=>>2@IZn!t<3>Hp6'c@owwlZZs*y7lD~K\sŨȽĴǼb@p(,F"TGgZU@cyR dDF(86%ͥr )\ {M $ Q%I%! mF#B SPVJKvNXA!,t2H"g!mG>"j(p6ǶDzǹ4)RWJ ³7 I1Ob.5M()! ,|=>>2@IZn!t<3>Hp6'c@owwlZZs*y7lD~K\sŨȽĴǼb@p(,F"TGgZU@cyR dDF(86%ͥr )\ {M $ Q%I%! mF#B SPVJKvNXA!,%$23%@1Z!m>GGOO&GGGPWfQpxeex&]5i|vY`xRa:g,g,l^~Abztźǽż`@p(<F"TGgzU)ֺ-|`+9qfK9Y`WL[ B'X$% 'X$GczB SP\N[ZJXA! ,%$@a"g!mFd'p6V5c5iGFQx}€Im9m9S[hì~ȝȽĽǷǾǵǹ[@p(F"TGg*U)֊]l$Ƃ-p.B}(U(LGh< "WTBFPBwSB L\ZN[TA!,d %4#92?$2=4%>3$5>53#><4@IRZan#H"W2H1U"g!m!t3k1s0z<|$7H%=Y3>H$1y31y>=y]c x x%FY>GG%Fm&Ny4Ol6XyFOWI%L4W&W4G>"P?2j p g'j5q6^HGG7_H PG=_Q0w@pIxVvY/pY<|f:GGGGPPPGG_XOPPPT[iR[tXjqQpxe__|f^kekiiskwq|kkqqkvxv;ENV&Z&]4V'd?d5c5i5l?i5n6uGFH^DoXj_pQs@o@uQ|kqh{uv  |vUYjqh`irrxxxrzĂIXRZZZ.aaa.a-d:i+m9m9s+s8s*x7lDl^xYrCxMyB}LyUqjyB\ubvuKKU[Zikwhggmymt¨wŖȔȜțȠŠȢȫũȳżĽǵƼŰijöĴǼǽĺĝĢ®ijƺH*\ȰÇ#JHŋ3jȱǏI$D.2\rat0vC˘o6ٲ.zwkϠ6T1>uP !PA~8h:z['c @Ɩw]`5]vyɚEPav HV >x3:z1 @7 lCE1< x mܺy#^_%0w~;nݣ Vo.ax];XhGU!P$$ O08%emUDpjB85P|\]`?',8̳) @ˇ"-Є@C@ B4@f$8 wA+$vO c'.٬G.Wngw K0Gl^/  -)E#c>n.|s%9IHxRG?Dc5i9cdlCǷ=0džU[NIMx# żs@U^C9w;!G=9 4 $Yp&&NIhCu9 `x>p}@)eD;Rm#ph!DHᩇCwQ\" 7̡>\A!{.~|}A# Y2\(ABTEXI\|nxw{}w|]TbWbYn]eYi\q^qextyfwqqA>B?\_^aceLCVM_V`X`czjzqls{|}ޟ"ߠ# $-ܪOݫSޮXS.0œÞŤƣȦɫèȫ˱ó˾́ŎɬҶ̽ɷҹѽيߏސ°ۻŴȹ˼Żի׫ӻ޵ߵýֽüƫ²źɼγ˽ H>*\ȐaHŋ3jȱǏ CIɓ(S\ɲ˗()ʔhƙ8+"O)ev,ѣH*]ʴӧPf|4翩~|WL1j>uAFOkυv%!B$ɮtJ˷߿ ,حa+^עhe̜A挙2j?~M^K9rH%2p۸sͻ߷5θM-R0`OK0\HoRNqV,f}Хc>0iҊo}6;eƁQ?w1a,avh($hl0="f!EO$PI>`A=i! @m$@:>y-H!pwE b!$0ooh['+͑'ihPcpa1!cGv sEt((EP案&JW$; BOI% nZ:5?'KJjO25 >%`Oop9#!6dgal>fgygh{ĆrhD>S!a|AHD>p=TG=sB0X;ȣA/Pࣅ=ѣA c0 Pa BҳA b1"#>P]Op{v0c0\Ik>r`cFMOb eov>u歷qGD܄n'7c =[ "N3@3P$,> +P6P*ȂO矇>z8l~63.L>=ZTXDP>c03.ds * 9dQz;۳ @8) @=/rL&1M$mBV7?MOy9(L WBQnn+ԃ84 ᙮f1\] RYx9Qáy#ڬ RHQj5p|@BÀ eE`MaD-O'`Q=:1|c$'IJZRmZA\=6MEִEmSMm\$:yZ$]=WD"[s@=TQGE=LIl a_# 6Ǒ-b:3إCe `G1-P@+aeḟ<ΖB"/Cz4'șR  D1Qd/0qюztBJRx(0lNxR%*TzN9ў{b8||G!P.Xj250_@=-*Lu*F U,O@ ֳrdX颺lK dG1OXI4{d'[RQSnBBB  ʺlgK 8I #V$eN"x2I6\l[+Р4.rN8ҭ̇q!eF~Ճ$P?LW i3L` AĘsGamM0n7{ _ Έd*sg4{ hDlJP k\^@NvqnH bj1]N։B8&`ÐJŕ.s#)3W\QPf 4_roOh.W8ЄC LJ[AMCccC0 htĜ2@:ܐ/0L!=51^,1Msb&6'ǑlؔE&DZfڿi;< %eG^r;ۺ.q]gS;Futw= }{ǀ_+ O8u-x?{v'yO\ݝw)W\ GN(OO \0 2Ϲw󞗼(qc.ANoJϧN[XϺַ{IŮ_|&6ۭ`Nx{t]JO ]O;߸'N!;,MIMMI[ZIMTMSUQUUPYZQVYSX^Y^LHeKErSNdSMyUPcUPnV]nYTeXSk^YfYXjUUu^c{bIMdMRePUiQUjSXwGKtHLtOS{POuQSrZZ}SUx^U{[[aQbvZjq`Yjeneg~mkqtlarintkr~sfvquvqyvxzyx}QKVV]b]fai`eclajkseqeqhvm{tvk},+4%>(ACUFYJ]J]~wnrw}x{ˆZUd[n]i`repatjmaqc|k}z{wA?^abdC@LCVM_V`Xadfhmzjwtus~ߠ#$ $-ݬS߯YSZ.0ȝÜɢ Ƣʪèʫ̬гȰрǍȎ̮ΰξշոӹͳӺӽ׽ؾۋݎİڻòɵ̼ùڮ⒕䶽⸻ٿƮóŸ˾ʽҶ *\ȰÇ#JHŋ3jȱǏ CIɓ(S,`D+cʜI͛8sɳO弧L0fԡ>kycMDp bd`ÊKٳh]{1cȐ#̲M^#Ξ=uV!C"$ #$?6rVB9ᢴn/gXmE#SM @VcQX6ؠ[JI^\%B!BBS1gM>joHOH aο(h>3ؓ`TQHPh=hq"D=F8A=k.~$K?)&& pJm`' UM$>L6Px\&kUC*% 4V'8Z@ ?#0h`Kj?| f_SD<`pewcWwehǔMi|p7.+,覫n@I4?]( x9XC8#씰MZ<L;0!KOO11{!tB񠱞*M LC/;,<ZA6d@%<Ȼ\w ~M^\k{!vq-anD;A׀5TR7O,M @s`2 <"#.o0<9 uɖ;dⶇnw˛6 Z̠7։|d#`FbSr攄yc@\D7ͥB Uyˋ{ $X*hK  tx8ִN;k#lYRyM"!xl4З0_iq(1GE.\8α5[ʃV B"(r +܃D.T- M(`}r%R;Vģ ݱ'MJ-7Yr k9/x piL b!q1i[@A+\/>}aKv;< x@:0+[>gmlg/vgFdVf(9, m-v:Mzη~o@~a$ N;g#cSϸ7jBA [Wr+0˥8Ϲw0 sl[Hn{'PԧN[XϺַ{`Ng4ڱ~aOqUwԏxϻ';B! , ]c x x  I+p8c˻`(dihlp,tmxkpH,ȤreШtJZ,ֹzxL.C\ynx;-~2 tq ~D N.qQMܾyc H*\ȰÇ#JHŋ3jȱǏ CIɓ(S\ɲ˗0cʜI͛8sɳϟ@ JѣH*]ʴӧPJJիXjʵׯ`ÊKٳhӪ]˶۷pʝKݻx˷߿ LÈ+^̸ǐ#KL˘3k̹ϠCMӨS^ͺװc˞M۸sͻ Nȓ+_μУKNسkνËOӫ_Ͼ˟OϿ(h& 6F(Vhfv ($h(,0(4h8<@)DiH&L6PF)TViXf\v`)dihlp)tix|矀*蠄j衈&袌6裐F*餔Vj饘f馜v駠*ꨤjꩨꪬ꫰*무j뭸뮼+k&6F+Vkfv+k覫+k,l' 7G,Wlgw ,$l(,0,4l8<@-DmH'L7PG-TWmXg\w`-dmhlp-tmx|߀.n'7G.Wngw砇.褗n!,%$2=h1Z>2ZW^ d E&N?N5o@o@uIzIlrxlr€IZZs8ZWZagƬx“ȝȶĵǷǾŢǬǹd@p(|F"TGgU)֊@aVVGha.uPH^?d'PP=v@p@= ]m,}UyBsåsȡȫȡǽǷĮĵǼW g&I:'`$*l`A%-,yGr(`xN@Ȁ703 d7{z.N!! ,4%42?3%>3I"R!t0z<P?2v@PPP;XjQqwkxa.m9yAȫȺǹ_@p(4F"TGgjU)ֺ=d$ʕ 4P e+p>"92u.zT rBP & #LG&[ OdZNJXA!,<=>>2@IZn!t<3>Hp6'c@owwlZZs*y7lD~K\sŨȽĴǼb@p(,F"TGgZU@cyR dDF(86%ͥr )\ {M $ Q%I%! mF#B SPVJKvNXA! ,D%o܁K&,ry8y[I]T! ,L%42?3%>3I"R!t0z<P?2v@PPP;XjQqwkxa.m9yAȫȺǹ_@p(4F"TGgjU)ֺ=d$ʕ 4P e+p>"92u.zT rBP & #LG&[ OdZNJXA!,T%2?=%@1s0z<PG1GPXPPPVejRZs8s*s8lCToSasåsȩȶǼİd@p(F"T@#KjEPfv5HM4j!bt*Bw#~B}\t i~GmVC ENPLnVA!,\43%@"Z"gHv@{ZPPPPWrN&V@ulrZaa}UummxȜȳǻưǷĺǹ`@p($F"TGgJU)ֺ<ĕ 45|0Bɂu&AT'E!X sBX$ $[GcPC SZdN]TA! ,d4I1m"PPP5oH^m9s8yB}LxUyBsxȯǯǼS f&I:[› еpA"_gPD C! `l" #dLc(/O4!! ,l=>>2@IZn!t<3>Hp6'c@owwlZZs*y7lD~K\sŨȽĴǼb@p(,F"TGgZU@cyR dDF(86%ͥr )\ {M $ Q%I%! mF#B SPVJKvNXA!,t%o܁K&,ry8y[I]T!,|%$3#@!t0zOW{AN5c5iY{Ylrm9y7yBTǻǽ] g&I:*G.仚 4L,Gd*TV[VnolDԦh|Osp y Cg.Hv@{ZPPPPWrN&V@ulrZaa}UummxȜȳǻưǷĺǹ`@p($F"TGgJU)ֺ<ĕ 45|0Bɂu&AT'E!X sBX$ $[GcPC SZdN]TA! ,$2=%=Y4W~_Q0kkq&]@ullr€RRqjéxǽĞDzO bf&I:[٨d Y2L$_\BhT"F5 dÑPn%PvLK;

GGOO&GGGPWfQpxeex&]5i|vY`xRa:g,g,l^~Abztźǽż`@p(<F"TGgzU)ֺ-|`+9qfK9Y`WL[ B'X$% 'X$GczB SP\N[ZJXA! ,4$=%$3#@1g1m>GQ^ d5v6v@PPFXPP5c5c5o_jY{@uYxJm,y7rCyB\oTȤůȶ©Ǽf@p(4F"T!1(BMC\M#_D#2ibń &R~^WC&VPC% LDOB&MB&QB INvJKWA!,( %4#42?$2==?3%=%>3$3#>>2@IZl"V1Z!i!t1g1mH$1y3GG3FQ>GQ4W{FOW^ ^?O&^'G>"P?2d j d'j(d5s(r6PG1PP=[P0v@{Zp@=GGGGPXPPFQPPPOlPWfPWrQpxqk^hht;ENV ] i&N&X&]?N'c'c5c5c5i5j5o6uH^Qd_jXjY{@o@u@uIzIQejtwqq  |vYYli|rhglllrrxxxlrrƂIRZRZaaa.a:g,m,g,m+m9m9s8y7s*s8y7ZWlCl^rC}]yG{UqjyB\T\bopTSZuztamagmtmsåmåsxȔțȜȤšȫũȹĵǬǯȵǼűǷĶĴƼŻÞƣīƻH*\ȰÇ#JHŋ3jȱǏ C"C@At<`%CpKE Og`e\/C>MPRQh zVak+E;$C} i.C 2ME6IG lbiX;@(~)(9d aٵ.CߦyOOm$ʙ"o5jm`NIp?HEi&Qp:!3HW!@?,h o :(ڑ?2BzbXHQ? H{IqyԲP's[t?1w688>CJ39ʊFNqPC`A>``PL! j B 6A,?44p"& 2!(Ȃ@ "A}FHLP0>hMPH*Z"3Łd3] 1Qdט4@t#9Le.&T~䏁LdAd&4%$D )J.̤ɨN> %A0)JK<%*U#,cIŀ! ,)#4#?=IZ3I"R!t0z<P?2v@PPP;XjQqwkxa.m9yAȫȺǹ_@p(4F"TGgjU)ֺ=d$ʕ 4P e+p>"92u.zT rBP & #LG&[ OdZNJXA! ,$)=>>2@IZn!t<3>Hp6'c@owwlZZs*y7lD~K\sŨȽĴǼb@p(,F"TGgZU@cyR dDF(86%ͥr )\ {M $ Q%I%! mF#B SPVJKvNXA!,,)%o܁K&,ry8y[I]T! ,4)%$23%@1Z!m>GGOO&GGGPWfQpxeex&]5i|vY`xRa:g,g,l^~Abztźǽż`@p(<F"TGgzU)ֺ-|`+9qfK9Y`WL[ B'X$% 'X$GczB SP\N[ZJXA!,<)%42?3%>3I"R!t0z<P?2v@PPP;XjQqwkxa.m9yAȫȺǹ_@p(4F"TGgjU)ֺ=d$ʕ 4P e+p>"92u.zT rBP & #LG&[ OdZNJXA! ,D)2=j p &V5o6u@o@ugrr®nŜȺŞƢǼP e&I:[— еx1ɥK\#CX@AiVJQ!-*ooYf xw; ׳B! ,L)@Ia1g1m0z1yG4G2yPPPP^rEa-g:m9s+xMyBKSihséxȠŤȯǼİǾe@p(DF"TGgU)֊-6!Ir*H("H%aq(d!|ToB#uh (vGeP( SP(JXT\ZTA!,T)%4==%$2?>3>$2HFPG={APPPXjqkek|kkqqkrxƂ”ŞŢĮP "f&I:'p,KR AR`#HJ.HihDmW 0A (,EՍ !,\)%$2?>3#R1s0z3#R1s0z3"R!t=I>1y><~FP?2v@PPP;XjQqwkxa.m9yAȫȺǹ`@p(LF"TGgU)ֺEp˕ژ:% D*T>@{T sBP )&LG!)[OT\ZNTA! ,)2=%=Y4W~_Q0kkq&]@ullr€RRqjéxǽĞDzM "f&I:[ؘ` 2vH"_XBHTDjtGـ550L.@=-W.s]s<-! ,)%4==%$2?>3>$2HFPG={APPPXjqkek|kkqqkrxƂ”ŞŢĮN "f&I:'p,KR AR`#HJ.HiϨr*`4&ǃPXKu! ,)%$23%@1Z!m>GGOO&GGGPWfQpxeex&]5i|vY`xRa:g,g,l^~Abztźǽż`@p(<F"TGgzU)ֺ-|`+9qfK9Y`WL[ B'X$% 'X$GczB SP\N[ZJXA!,)2H"g!mG>"j(p6ǶDzǹ4)RWJ ³7 I1Ob.5M()! ,)#4#?=IZGGOO&GGGPWfQpxeex&]5i|vY`xRa:g,g,l^~Abztźǽż`@p(<F"TGgzU)ֺ-|`+9qfK9Y`WL[ B'X$% 'X$GczB SP\N[ZJXA!,)%$@a"g!mFd'p6V5c5iGFQx}€Im9m9S[hì~ȝȽĽǷǾǵǹ[@p(F"TGg*U)֊]l$Ƃ-p.B}(U(LGh< "WTBFPBwSB L\ZN[TA! ,)x %4#62?$2==$=?5%>3$2?>3#:66@IVan"T2H1X!j!t4k3x=I=Z$2H%=Y3>H3"t>2m>2x]c x xEy>GG3FQ%Fm&Ny;Hg?W`5X{FOWF?^$J%M4\&^5G>"G>2P?2j p h'j5r6G2yX>s^HGG9SG:\P2j@v@pIvR{ZvY/pY<|f:GGGGPQPGGPPPPWfPYrUhuQpxe_OvcI|f^hehggt|kktshvuy;JV ]&N&V&]&]'c?f5i5o6uGFH^BoXj_pQv@o@vPoQejhrh{tt  |vYYh|ti``gllrr}uxryŃIVWZ.aaa.a-f:b:h,m9s+t7s*v7lCl^rMx]vF{UqgyBZduKU[Zkjxgmsåm§vĔœƠšȨŬŪȸĽƴǻñŹĺĝެijƺH*\ȰÇ#JHŋ3jȱǏ Cу)EHB4R˗)̂](͛@%T`!(*0G.e2C?RTLR֩]H|Q7s f{3k\W.]2f>[ׯv㗊ׁͬIa͝+f\p~sn_\,X-~n,8;PD>~RM?}NeyCP~قRH-}~=9?._z%4F8s:|Wui [w^z!tQ!za.M,`@{BO 9 , UDA<0$I?(<r>#3@`C@mqlpBbi&)QNYc?Aw!Kh#J2 ?@F?`d&, ]8):1d` PJ F>l%uS9Ӭd$B~ul:Y =j @"@9 v|CD(CR)?lO߲bO /ۯނew{Na{ÓlFS@ S Y袬Y' o|4sA< o$`,u1!ZFSO3D"76|r'A ZSK3|x= QYk"ݮuƛUx: D H I$6P!f `4 pp!)( L AV"Ђwxk@< HL&:PH*Z*H LX+>1'+z&0d&Ob3dPAʝ8Ed j{ մ,[ xii ָ {)d8n](AF}`!LBs$؈،qi$Hu6QJJӓaqAϢS&<~*թh_U*XT%0LLy/`J4Sih,E ˊ=HӜT8~ Rg !I<)Gens[W8|p#Ht d=|yÕ7+bZ4)ЁA?!)|K7ZAA4^ԢHMRԦ:RA9$7IO A͘ZFlAz7\h 7ⱏP 10vT{ل6SU"t$ֈr!#0c-lQh{܀GM<ͲM aa̤2m`f,Ye/|m b3KXZk_[$\u$k+)ĤQzNT@8arl `2(Rv_hއ჎уI&"Έ8JxOK(!O\zwӺo~+bPK\RԲx|醰IBCޡ lL@u $#컬=>"`7ŦR!ڌͺD#'oL'+^I'1ؽ>B0/ x<3+JbNf1*&1 Y΋T0<|4jY [t} ;^'lts*s F(bV 녰vsġ!y C7G}'q "˦/ǖ yrvf8aC F^Vm-77uNe !CfGs;ȲqV@YoX1?U!]E"G\W0i*b}=tK76k[Գm}BgKSTL&.Y!w0 z3); c&'&]ع76}N'_C >`4K).o\aiuNz}2$^ؐ p2c z / +  gڏX#<G}@lwF.~5"T $Bq , ް-(pPOT"(tq   ["U`%VfBk2+CVDp%WtbX6%GzTfF!MaX f2f XO|-x!E ~QH]5ZEZ%0<6=(`xzF]JevW#( A,U uIRb'_E_YUqv6aa1~I Bpu|c__e!a""LQvL6HI$2Xfd;IcY%"c9N$$"$Dfjr&dgBFgcq(ZE  A,:w+Bq!h &/r1L)r)SL khj-B-B X.V'V$0/l6+almmĐy n16\;73 C3(-IKdONDog:&1p%i"sqnq'G&&RiV^*;^ L"CQ tt"恕p PXs7w vs`);cv6 JYuul9vW1b 2sR~><y) 5yw1'-Yt aGGZIHL8Z5]HS'k]Ǖ\ ܵYYx%/1Ra vII8b&Jj&`ng&3A6P=ɤ'O(j!vhBD[qH[!,LHLKGWKG\NJRMJ[VGKSIL[GK[JMRMQQM]ZLZTQTSP_XU[KGaIDhNKbOLkMIvRNeSWjQR{X`u_bx`FIcKNmKNcNQlXTsFHsKNyMMqNQvQNsWVv\SzTR`PapVdnh[zf[dahjejkjnpelpmpzpcrststzONRQU[TZX^X^[d[d^j[f]icm`n`nfrizu~h|,+4%>(ABTEXI\|nxw{}w|]TbWbYn]eYi\q^qextyfwqqA>B?\_^aceLCVM_V`X`czjzqls{|}ޟ"ߠ# $-ܪOݫSޮXS.0œÞŤƣȦɫèȫ˱ó˾́ŎɬҶ̽ɷҹѽيߏސ°ۻŴȹ˼Żի׫ӻ޵ߵýֽüƫ²źɼγ˽ H>*\ȐaHŋ3jȱǏ CIɓ(S\ɲ˗()ʔhƙ8+"O)ev,ѣH*]ʴӧPf|4翩~|WL1j>uAFOkυv%!B$ɮtJ˷߿ ,حa+^עhe̜A挙2j?~M^K9rH%2p۸sͻ߷5θM-R0`OK0\HoRNqV,f}Хc>0iҊo}6;eƁQ?w1a,avh($hl0="f!EO$PI>`A=i! @m$@:>y-H!pwE b!$0ooh['+͑'ihPcpa1!cGv sEt((EP案&JW$; BOI% nZ:5?'KJjO25 >%`Oop9#!6dgal>fgygh{ĆrhD>S!a|AHD>p=TG=sB0X;ȣA/Pࣅ=ѣA c0 Pa BҳA b1"#>P]Op{v0c0\Ik>r`cFMOb eov>u歷qGD܄n'7c =[ "N3@3P$,> +P6P*ȂO矇>z8l~63.L>=ZTXDP>c03.ds * 9dQz;۳ @8) @=/rL&1M$mBV7?MOy9(L WBQnn+ԃ84 ᙮f1\] RYx9Qáy#ڬ RHQj5p|@BÀ eE`MaD-O'`Q=:1|c$'IJZRmZA\=6MEִEmSMm\$:yZ$]=WD"[s@=TQGE=LIl a_# 6Ǒ-b:3إCe `G1-P@+aeḟ<ΖB"/Cz4'șR  D1Qd/0qюztBJRx(0lNxR%*TzN9ў{b8||G!P.Xj250_@=-*Lu*F U,O@ ֳrdX颺lK dG1OXI4{d'[RQSnBBB  ʺlgK 8I #V$eN"x2I6\l[+Р4.rN8ҭ̇q!eF~Ճ$P?LW i3L` AĘsGamM0n7{ _ Έd*sg4{ hDlJP k\^@NvqnH bj1]N։B8&`ÐJŕ.s#)3W\QPf 4_roOh.W8ЄC LJ[AMCccC0 htĜ2@:ܐ/0L!=51^,1Msb&6'ǑlؔE&DZfڿi;< %eG^r;ۺ.q]gS;Futw= }{ǀ_+ O8u-x?{v'yO\ݝw)W\ GN(OO \0 2Ϲw󞗼(qc.ANoJϧN[XϺַ{IŮ_|&6ۭ`Nx{t]JO ]O;߸'N! ,=>>2@IZn!t<3>Hp6'c@owwlZZs*y7lD~K\sŨȽĴǼb@p(,F"TGgZU@cyR dDF(86%ͥr )\ {M $ Q%I%! mF#B SPVJKvNXA! ,%$2?>3#R1s0z>2@IZn!t<3>Hp6'c@owwlZZs*y7lD~K\sŨȽĴǼb@p(,F"TGgZU@cyR dDF(86%ͥr )\ {M $ Q%I%! mF#B SPVJKvNXA! ,4%4I!m1g1s<|>GGG>"{AE5c5iXd@uw{Rg:m9yByBoagŔȨȶǽc@p($F"TGgJU)ֺd6=. )ZX $B sT $"$[!FPC TJn{D[ZPA! ,<%4==%$2?>3>$2HFPG={APPPXjqkek|kkqqkrxƂ”ŞŢĮN "f&I:'p,KR AR`#HJ.HiϨr*`4&ǃPXKu! ,D%o܁K&,ry8y[I]T!,L%@jQf{s80)RWJppFkca^"! ,MIMMI[ZIMTMSUQUUPYZQVYSX^Y^LHeKErSNdSMyUPcUPnV]nYTeXSk^YfYXjUUu^c{bIMdMRePUiQUjSXwGKtHLtOS{POuQSrZZ}SUx^U{[[aQbvZjq`Yjeneg~mkqtlarintkr~sfvquvqyvxzyx}QKVV]b]fai`eclajkseqeqhvm{tvk},+4%>(ACUFYJ]J]~wnrw}x{ˆZUd[n]i`repatjmaqc|k}z{wA?^abdC@LCVM_V`Xadfhmzjwtus~ߠ#$ $-ݬS߯YSZ.0ȝÜɢ Ƣʪèʫ̬гȰрǍȎ̮ΰξշոӹͳӺӽ׽ؾۋݎİڻòɵ̼ùڮ⒕䶽⸻ٿƮóŸ˾ʽҶ *\ȰÇ#JHŋ3jȱǏ CIɓ(S,`D+cʜI͛8sɳO弧L0fԡ>kycMDp bd`ÊKٳh]{1cȐ#̲M^#Ξ=uV!C"$ #$?6rVB9ᢴn/gXmE#SM @VcQX6ؠ[JI^\%B!BBS1gM>joHOH aο(h>3ؓ`TQHPh=hq"D=F8A=k.~$K?)&& pJm`' UM$>L6Px\&kUC*% 4V'8Z@ ?#0h`Kj?| f_SD<`pewcWwehǔMi|p7.+,覫n@I4?]( x9XC8#씰MZ<L;0!KOO11{!tB񠱞*M LC/;,<ZA6d@%<Ȼ\w ~M^\k{!vq-anD;A׀5TR7O,M @s`2 <"#.o0<9 uɖ;dⶇnw˛6 Z̠7։|d#`FbSr攄yc@\D7ͥB Uyˋ{ $X*hK  tx8ִN;k#lYRyM"!xl4З0_iq(1GE.\8α5[ʃV B"(r +܃D.T- M(`}r%R;Vģ ݱ'MJ-7Yr k9/x piL b!q1i[@A+\/>}aKv;< x@:0+[>gmlg/vgFdVf(9, m-v:Mzη~o@~a$ N;g#cSϸ7jBA [Wr+0˥8Ϲw0 sl[Hn{'PԧN[XϺַ{`Ng4ڱ~aOqUwԏxϻ';B! ,T$@1s0z3>Hd'PP=v@ ]m,}UyBsåsȡȫȡǽǷĮĵǼT f&I:'P*l 05"`$̃A4} a\+ݯM6dmQ4]%}.M!! ,\%$2?>3#R1s0z3I"R!t0z<P?2v@PPP;XjQqwkxa.m9yAȫȺǹ_@p(4F"TGgjU)ֺ=d$ʕ 4P e+p>"92u.zT rBP & #LG&[ OdZNJXA!,l%$@R!t1s0zGG3FQG>2PG1{A5mXj@owRy7s8yByBZoașȫȽc@p(F"TGM !LUL*[ cGd<"Hb1{wmP"e[!y{U"!"a jaB OUNENJ[A!,t%$2?>3#R1s0zGGOO&GGGPWfQpxeex&]5i|vY`xRa:g,g,l^~Abztźǽż`@p(<F"TGgzU)ֺ-|`+9qfK9Y`WL[ B'X$% 'X$GczB SP\N[ZJXA! ,%4I!m1g1s<|>GGG>"{AE5c5iXd@uw{Rg:m9yByBoagŔȨȶǽc@p($F"TGgJU)ֺd6=. )ZX $B sT $"$[!FPC TJn{D[ZPA!,%4==%$2?>3>$2HFPG={APPPXjqkek|kkqqkrxƂ”ŞŢĮN "f&I:'p,KR AR`#HJ.HiϨr*`4&ǃPXKu! ,%o܁K&,ry8y[I]T! ,4$3%=%$2?3>>I2H3>HG>"xĿmsåsŪsȡȣJ d&I:(@Bp @O 1 i" LEJ \^+7`Yoi:va!! ,%$23%@1Z!m>GGOO&GGGPWfQpxeex&]5i|vY`xRa:g,g,l^~Abztźǽż`@p(<F"TGgzU)ֺ-|`+9qfK9Y`WL[ B'X$% 'X$GczB SP\N[ZJXA!,%42?3%>3I"R!t0z<P?2v@PPP;XjQqwkxa.m9yAȫȺǹ_@p(4F"TGgjU)ֺ=d$ʕ 4P e+p>"92u.zT rBP & #LG&[ OdZNJXA! ,2=j p &V5o6u@o@ugrr®nŜȺŞƢǼP e&I:[— еx1ɥK\#CX@AiVJQ!-*ooYf xw; ׳B! ,@Ia1g1m0z1yG4G2yPPPP^rEa-g:m9s+xMyBKSihséxȠŤȯǼİǾe@p(DF"TGgU)֊-6!Ir*H("H%aq(d!|ToB#uh (vGeP( SP(JXT\ZTA! ,%4==%$2?>3>$2HFPG={APPPXjqkek|kkqqkrxƂ”ŞŢĮP "f&I:'p,KR AR`#HJ.HihDmW 0A (,EՍ !,%$2?>3#R1s0z3#R1s0z3"R!t=I>1y><~FP?2v@PPP;XjQqwkxa.m9yAȫȺǹ`@p(LF"TGgU)ֺEp˕ژ:% D*T>@{T sBP )&LG!)[OT\ZNTA! , 2=%=Y4W~_Q0kkq&]@ullr€RRqjéxǽĞDzM "f&I:[ؘ` 2vH"_XBHTDjtGـ550L.@=-W.s]s<-!,%4==%$2?>3>$2HFPG={APPPXjqkek|kkqqkrxƂ”ŞŢĮN "f&I:'p,KR AR`#HJ.HiϨr*`4&ǃPXKu! ,%$23%@1Z!m>GGOO&GGGPWfQpxeex&]5i|vY`xRa:g,g,l^~Abztźǽż`@p(<F"TGgzU)ֺ-|`+9qfK9Y`WL[ B'X$% 'X$GczB SP\N[ZJXA!,$2H"g!mG>"j(p6ǶDzǹ4)RWJ ³7 I1Ob.5M()! ,,%$2?>3#R1s0z3"R!t=I>1y><~FP?2v@PPP;XjQqwkxa.m9yAȫȺǹ`@p(LF"TGgU)ֺEp˕ژ:% D*T>@{T sBP )&LG!)[OT\ZNTA!,D2=%=Y4W~_Q0kkq&]@ullr€RRqjéxǽĞDzM "f&I:[ؘ` 2vH"_XBHTDjtGـ550L.@=-W.s]s<-!,L%4==%$2?>3>$2HFPG={APPPXjqkek|kkqqkrxƂ”ŞŢĮN "f&I:'p,KR AR`#HJ.HiϨr*`4&ǃPXKu!,T%o܁K&,ry8y[I]T! ,\=33##HK H4.`0(J&p[LV2A[Hv@{ZPPPPWrN&V@ulrZaa}UummxȜȳǻưǷĺǹ`@p($F"TGgJU)ֺ<ĕ 45|0Bɂu&AT'E!X sBX$ $[GcPC SZdN]TA!,t2=j p &V5o6u@oHo@uPogrr®nŜȺŞƢǼP bf&I:[™ еxQJSd"C`̀a%.%ö 0f@xw; ׳B! ,|=F*o܁K&:,ry RA :,ʴ&OxÕ݊)! ,%$23%@1Z!m>GGOO&GGGPWfQpxeex&]5i|vY`xRa:g,g,l^~Abztźǽż`@p(<F"TGgzU)ֺ-|`+9qfK9Y`WL[ B'X$% 'X$GczB SP\N[ZJXA! ,%42?3%>3I"R!t0z<P?2v@PPP;XjQqwkxa.m9yAȫȺǹ_@p(4F"TGgjU)ֺ=d$ʕ 4P e+p>"92u.zT rBP & #LG&[ OdZNJXA!,2=j p &V5o6u@o@ugrr®nŜȺŞƢǼP e&I:[— еx1ɥK\#CX@AiVJQ!-*ooYf xw; ׳B!,@Ia1g1m0z1yG4G2yPPPP^rEa-g:m9s+xMyBKSihséxȠŤȯǼİǾe@p(DF"TGgU)֊-6!Ir*H("H%aq(d!|ToB#uh (vGeP( SP(JXT\ZTA! ,%4==%$2?>3>$2HFPG={APPPXjqkek|kkqqkrxƂ”ŞŢĮP "f&I:'p,KR AR`#HJ.HihDmW 0A (,EՍ ! ,%$2?>3#R1s0z3#R1s0z3"R!t=I>1y><~FP?2v@PPP;XjQqwkxa.m9yAȫȺǹ`@p(LF"TGgU)ֺEp˕ژ:% D*T>@{T sBP )&LG!)[OT\ZNTA! ,2=%=Y4W~_Q0kkq&]@ullr€RRqjéxǽĞDzM "f&I:[ؘ` 2vH"_XBHTDjtGـ550L.@=-W.s]s<-!,%4==%$2?>3>$2HFPG={APPPXjqkek|kkqqkrxƂ”ŞŢĮN "f&I:'p,KR AR`#HJ.HiϨr*`4&ǃPXKu! ,%$23%@1Z!m>GGOO&GGGPWfQpxeex&]5i|vY`xRa:g,g,l^~Abztźǽż`@p(<F"TGgzU)ֺ-|`+9qfK9Y`WL[ B'X$% 'X$GczB SP\N[ZJXA!,%o܁K&,ry8y[I]T!,%$3#@!t0zOW{AN5c5iY{Ylrm9y7yBTǻǽ] g&I:*G.仚 4L,Gd*TV[VnolDԦh|Osp y Cg.Hv@{ZPPPPWrN&V@ulrZaa}UummxȜȳǻưǷĺǹ`@p($F"TGgJU)ֺ<ĕ 45|0Bɂu&AT'E!X sBX$ $[GcPC SZdN]TA! ,$2=%=Y4W~_Q0kkq&]@ullr€RRqjéxǽĞDzO bf&I:[٨d Y2L$_\BhT"F5 dÑPn%PvLK;

GGOO&GGGPWfQpxeex&]5i|vY`xRa:g,g,l^~Abztźǽż`@p(<F"TGgzU)ֺ-|`+9qfK9Y`WL[ B'X$% 'X$GczB SP\N[ZJXA! ,$%42?3%>3I"R!t0z<P?2v@PPP;XjQqwkxa.m9yAȫȺǹ_@p(4F"TGgjU)ֺ=d$ʕ 4P e+p>"92u.zT rBP & #LG&[ OdZNJXA!,,2=j p &V5o6u@o@ugrr®nŜȺŞƢǼP e&I:[— еx1ɥK\#CX@AiVJQ!-*ooYf xw; ׳B! ,4@Ia1g1m0z1yG4G2yPPPP^rEa-g:m9s+xMyBKSihséxȠŤȯǼİǾe@p(DF"TGgU)֊-6!Ir*H("H%aq(d!|ToB#uh (vGeP( SP(JXT\ZTA! ,<%4==%$2?>3>$2HFPG={APPPXjqkek|kkqqkrxƂ”ŞŢĮP "f&I:'p,KR AR`#HJ.HihDmW 0A (,EՍ !,D%$2?>3#R1s0zGG3FQFG>2PG1{A5mXj@owRy7s8yByBZoașȫȽe@p(F"TGM LuL,[ „ gd>Xb3B{mP#e["y{U #"#a!j[ B OUNaNJ[A! ,\%42?3%>3I"R!t0z<P?2v@PPP;XjQqwkxa.m9yAȫȺǹ_@p(4F"TGgjU)ֺ=d$ʕ 4P e+p>"92u.zT rBP & #LG&[ OdZNJXA! ,d=>>2@IZn!t<3>Hp6'c@owwlZZs*y7lD~K\sŨȽĴǼb@p(,F"TGgZU@cyR dDF(86%ͥr )\ {M $ Q%I%! mF#B SPVJKvNXA!,l%42?3%>3I"R!t0z<P?2v@PPP;XjQqwkxa.m9yAȫȺǹ_@p(4F"TGgjU)ֺ=d$ʕ 4P e+p>"92u.zT rBP & #LG&[ OdZNJXA! ,t%o܁K&,ry8y[I]T!,|43%@"Z"gHv@{ZPPPPWrN&V@ulrZaa}UummxȜȳǻưǷĺǹ`@p($F"TGgJU)ֺ<ĕ 45|0Bɂu&AT'E!X sBX$ $[GcPC SZdN]TA! ,2?@0z$@^'j('cg,m9xLyBmsåsȫȽIJǹO bf&I:[™ е۸ 1FL2cM,!& Ѡ&m[0Cuf[NG0{ !,%o܁K&,ry8y[I]T! ,%$23%@1Z!m>GGOO&GGGPWfQpxeex&]5i|vY`xRa:g,g,l^~Abztźǽż`@p(<F"TGgzU)ֺ-|`+9qfK9Y`WL[ B'X$% 'X$GczB SP\N[ZJXA! ,%42?3%>3I"R!t0z<P?2v@PPP;XjQqwkxa.m9yAȫȺǹ_@p(4F"TGgjU)ֺ=d$ʕ 4P e+p>"92u.zT rBP & #LG&[ OdZNJXA! ,2=j p &V5o6u@o@ugrr®nŜȺŞƢǼP e&I:[— еx1ɥK\#CX@AiVJQ!-*ooYf xw; ׳B!,@Ia1g1m0z1yG4G2yPPPP^rEa-g:m9s+xMyBKSihséxȠŤȯǼİǾe@p(DF"TGgU)֊-6!Ir*H("H%aq(d!|ToB#uh (vGeP( SP(JXT\ZTA! ,( %42?$2==$2?3%=%>3$3#$2?<3#3333>>>3>>>2@IRZf#H"S2H1W!k!t1i1s0zH>2y]c x xE~%FY>GG3FQ4W~IWI%I4^'W4G>"G>2P?2j p d'j(p6G2yPG1PG=\P2jQw@{Z|f:GGGPGG_XOPPPPWfP[rXjqQpxe_Oe__gegggukwq|kkqqkwwq;ENV ]&V&]&]'c5c5i5j5o6u@oXiUu@o@uPoQjrsvw{  |vYlhwrfl`gllrtxrxņUVaaa.a-f:c:g,m9m9s+s8y7s*s8z7lDl^rCxMyBxL}UqjyB\bvKTZkluztagmtmsåsŪs©x‡ŋȇȔœȔțȜȠšȭŪȸǮƵǻìݲķĴǽķżĞƢíóŻH*\ȰÇ#JHŋ3jȱǏ CIɓ(S\ɲ˗0cʜI͛8sɳϟ@`dED6shцr@@S3%Ap9bbbŲ8oD ^r] ׀vDrпE^@ gP,+G˸" b߿n)xA]o/t aw8_}WX]nL?E/|={ u M?@[.P}E1Uwb s>X?T_ !DDQ3LnP" GR5aH O=2D&FĠ xAqQL>sCp2>;t??>W0s9$P3W(9dh@?8"̅?O'Q\הU^@~*hg Ō:;'q(' Z$b sI hSpب"dꤕsi櫱ZeP0uޙ2 l⺗n駡kByj *+v^96`YǼ?(tJ:nzn.Bl gj: /d"\ 'J oZ@uq a?B@S cBm4p4>3QP$tO2om\4N\tO+T$]v 98Kt۽?ьC7Q4TH wBn襟^u C678;Ѡ>vd4Bs=??óOVP>wF|꫷coWݯ<; Ǿ>N`G4skt:ɏ~:*ho V} Z  Eu0|]X 9G <01B !0*p~wQ"RX4b !  z''BQ3|x"xjAaXG$taDBH4kr>d@H ` Qfr4չ G,ԀW7t+Q9CIbE=VQ Lt k!浳,f?{>֯*`E6Uk٩֭lʐ(>(4EY\[[,x4EO^@%9DHpa[V3m&0NCH8o| dtikrdU9 _C*V?v"(V"4a Gjx݊802b"8~l 61֓M Rd]I6Вkdx!&H҃ XmӸ7c U93ae8?ylNY&AVK.SQyLqK|[ `o)M_\|=1p_ =_)U]B?/Ǭk|D^7~{_S_s|s~gSFgx~wSu^',kx ҀU8guzyQ*p ! 5G>F) p2PH%9CX5 Q3R%"o BHsa w!|=RvUhFnUqs1å`&s*ThiӅkXXaGfAMp(p&j(}Xh8:_y{`fm%Ê8Sbzh؈Fcs8wӇs1 aM‹&T]@91Xڈ G(x9e1pWӄh ȉsx]XBhظ8(0I " 9y"IAL:`-0r4(; 0) E@L H3VHLCi@YQaQS(AU9[rRJQ)fT7)1I:U{p]/EYImQ4YcI&)|wYz) oG>s/0Q/9љ陡yQCcSI 1;װH.Y*Aii 59Yyؙڹٝs!y虞i9=ўya:9zY ڠz Zz1ڡ:":$j!Z(*'.0-4Z63z:3#R1s0z3#R1s0z3"R!t=I>1y><~FP?2v@PPP;XjQqwkxa.m9yAȫȺǹ`@p(LF"TGgU)ֺEp˕ژ:% D*T>@{T sBP )&LG!)[OT\ZNTA!,,2=%=Y4W~_Q0kkq&]@ullr€RRqjéxǽĞDzM "f&I:[ؘ` 2vH"_XBHTDjtGـ550L.@=-W.s]s<-!,4%4==%$2?>3>$2HFPG={APPPXjqkek|kkqqkrxƂ”ŞŢĮN "f&I:'p,KR AR`#HJ.HiϨr*`4&ǃPXKu! ,<%$23%@1Z!m>GGOO&GGGPWfQpxeex&]5i|vY`xRa:g,g,l^~Abztźǽż`@p(<F"TGgzU)ֺ-|`+9qfK9Y`WL[ B'X$% 'X$GczB SP\N[ZJXA! ,D2H"g!mG>"j(p6ǶDzǹ4)RWJ ³7 I1Ob.5M()!,L2=%=Y4W~_Q0kkq&]@ullr€RRqjéxǽĞDzM "f&I:[ؘ` 2vH"_XBHTDjtGـ550L.@=-W.s]s<-! ,T%$@R!t1s0zGG3FQG>2PG1{A5mXj@owRy7s8yByBZoașȫȽc@p(F"TGM !LUL*[ cGd<"Hb1{wmP"e[!y{U"!"a jaB OUNENJ[A! ,\%o܁K&,ry8y[I]T!,d%>3#2H=a>GGXH1GGGYZZ@o@oxUmƬx> bd&I:[‘ е8<dK;-P88 ج!⪼+OeV!,l%o܁K&,ry8y[I]T! ,t%$23%@1Z!m>GGOO&GGGPWfQpxeex&]5i|vY`xRa:g,g,l^~Abztźǽż`@p(<F"TGgzU)ֺ-|`+9qfK9Y`WL[ B'X$% 'X$GczB SP\N[ZJXA!,|%42?3%>3I"R!t0z<P?2v@PPP;XjQqwkxa.m9yAȫȺǹ_@p(4F"TGgjU)ֺ=d$ʕ 4P e+p>"92u.zT rBP & #LG&[ OdZNJXA! ,2=j p &V5o6u@o@ugrr®nŜȺŞƢǼP e&I:[— еx1ɥK\#CX@AiVJQ!-*ooYf xw; ׳B!,@Ia1g1m0z1yG4G2yPPPP^rEa-g:m9s+xMyBKSihséxȠŤȯǼİǾe@p(DF"TGgU)֊-6!Ir*H("H%aq(d!|ToB#uh (vGeP( SP(JXT\ZTA!,%4==%$2?>3>$2HFPG={APPPXjqkek|kkqqkrxƂ”ŞŢĮP "f&I:'p,KR AR`#HJ.HihDmW 0A (,EՍ ! ,%$2?>3#R1s0zGG3FQFG>2PG1{A5mXj@owRy7s8yByBZoașȫȽe@p(F"TGM LuL,[ „ gd>Xb3B{mP#e["y{U #"#a!j[ B OUNaNJ[A!,%42?3%>3I"R!t0z<P?2v@PPP;XjQqwkxa.m9yAȫȺǹ_@p(4F"TGgjU)ֺ=d$ʕ 4P e+p>"92u.zT rBP & #LG&[ OdZNJXA! ,=>>2@IZn!t<3>Hp6'c@owwlZZs*y7lD~K\sŨȽĴǼb@p(,F"TGgZU@cyR dDF(86%ͥr )\ {M $ Q%I%! mF#B SPVJKvNXA! ,%42?3%>3I"R!t0z<P?2v@PPP;XjQqwkxa.m9yAȫȺǹ_@p(4F"TGgjU)ֺ=d$ʕ 4P e+p>"92u.zT rBP & #LG&[ OdZNJXA!,2H"g!mG>"j(p6ǶDzǹ4)RWJ ³7 I1Ob.5M()!,2=%=Y4W~_Q0kkq&]@ullr€RRqjéxǽĞDzM "f&I:[ؘ` 2vH"_XBHTDjtGـ550L.@=-W.s]s<-! ,%$@R!t1s0zGG3FQG>2PG1{A5mXj@owRy7s8yByBZoașȫȽc@p(F"TGM !LUL*[ cGd<"Hb1{wmP"e[!y{U"!"a jaB OUNENJ[A!,%o܁K&,ry8y[I]T! ,4#42>>2ZW^ d E&N?N5o@o@uIzIlrxlr€IZZs8ZWZagƬx“ȝȶĵǷǾŢǬǹd@p(|F"TGgU)֊@aVVGha.uPH^?d'PP=v@p@= ]m,}UyBsåsȡȫȡǽǷĮĵǼW g&I:'`$*l`A%-,yGr(`xN@Ȁ703 d7{z.N!! ,%$2?>3#R1s0z3#R1s0z3I"R!t0z<P?2v@PPP;XjQqwkxa.m9yAȫȺǹ_@p(4F"TGgjU)ֺ=d$ʕ 4P e+p>"92u.zT rBP & #LG&[ OdZNJXA! ,,2=j p &V5o6u@o@ugrr®nŜȺŞƢǼP e&I:[— еx1ɥK\#CX@AiVJQ!-*ooYf xw; ׳B!,4%==$$2?>3#R0z>1s>1y>=yFF%j(|f:GGGPGGkqllrZf:s8ZzgūȻĽǵ]@p(4F"TGgjU)ֺ P$˕<QE4ƒUlbpz&JX!&&XG [BSP\TZPA! ,<%o܁K&,ry8y[I]T! ,D%>3#2H=a>GGXH1GGGYZZ@o@oxUmƬx> bd&I:[‘ е8<dK;-P88 ج!⪼+OeV! ,L%o܁K&,ry8y[I]T!,T#423%>>>GPP5i@o@uyB9)RULt,€yJmO1O$;$Qy$KhSF! ,\3%$=>@"Z!m1s%=HOv6v@{APPPX^x5l@oZxUgzȶĺĦǹT g&I:[žHTuEt GrxQ$i$S)>a敕B"b*l& A> 0dTFUW{.=!! ,d%$2?>3#R1s0zK H4.`0(J&p[LV2A[>>Wd'GPP5i@o@uyB=)Ru,%hHrS&3)2nN`@#͘K6?(R>I2H3>HG>"xĿmsåsŪsȡȣJ d&I:(@Bp @O 1 i" LEJ \^+7`Yoi:va!!,%o܁K&,ry8y[I]T! ,%$23%@1Z!m>GGOO&GGGPWfQpxeex&]5i|vY`xRa:g,g,l^~Abztźǽż`@p(<F"TGgzU)ֺ-|`+9qfK9Y`WL[ B'X$% 'X$GczB SP\N[ZJXA! ,%42?3%>3I"R!t0z<P?2v@PPP;XjQqwkxa.m9yAȫȺǹ_@p(4F"TGgjU)ֺ=d$ʕ 4P e+p>"92u.zT rBP & #LG&[ OdZNJXA! ,2=j p &V5o6u@o@ugrr®nŜȺŞƢǼP e&I:[— еx1ɥK\#CX@AiVJQ!-*ooYf xw; ׳B!,@Ia1g1m0z1yG4G2yPPPP^rEa-g:m9s+xMyBKSihséxȠŤȯǼİǾe@p(DF"TGgU)֊-6!Ir*H("H%aq(d!|ToB#uh (vGeP( SP(JXT\ZTA! ,%4==%$2?>3>$2HFPG={APPPXjqkek|kkqqkrxƂ”ŞŢĮP "f&I:'p,KR AR`#HJ.HihDmW 0A (,EՍ !,%$2?>3#R1s0z3#R1s0z3"R!t=I>1y><~FP?2v@PPP;XjQqwkxa.m9yAȫȺǹ`@p(LF"TGgU)ֺEp˕ژ:% D*T>@{T sBP )&LG!)[OT\ZNTA! ,2=%=Y4W~_Q0kkq&]@ullr€RRqjéxǽĞDzM "f&I:[ؘ` 2vH"_XBHTDjtGـ550L.@=-W.s]s<-!,%4==%$2?>3>$2HFPG={APPPXjqkek|kkqqkrxƂ”ŞŢĮN "f&I:'p,KR AR`#HJ.HiϨr*`4&ǃPXKu!,%$23%@1Z!m>GGOO&GGGPWfQpxeex&]5i|vY`xRa:g,g,l^~Abztźǽż`@p(<F"TGgzU)ֺ-|`+9qfK9Y`WL[ B'X$% 'X$GczB SP\N[ZJXA! ,2H"g!mG>"j(p6ǶDzǹ4)RWJ ³7 I1Ob.5M()!,#4#?=IZGGOO&GGGPWfQpxeex&]5i|vY`xRa:g,g,l^~Abztźǽż`@p(<F"TGgzU)ֺ-|`+9qfK9Y`WL[ B'X$% 'X$GczB SP\N[ZJXA! ,%$@a"g!mFd'p6V5c5iGFQx}€Im9m9S[hì~ȝȽĽǷǾǵǹ[@p(F"TGg*U)֊]l$Ƃ-p.B}(U(LGh< "WTBFPBwSB L\ZN[TA! ,%o܁K&,ry8y[I]T! ,$%$23%@1Z!m>GGOO&GGGPWfQpxeex&]5i|vY`xRa:g,g,l^~Abztźǽż`@p(<F"TGgzU)ֺ-|`+9qfK9Y`WL[ B'X$% 'X$GczB SP\N[ZJXA!,,%42?3%>3I"R!t0z<P?2v@PPP;XjQqwkxa.m9yAȫȺǹ_@p(4F"TGgjU)ֺ=d$ʕ 4P e+p>"92u.zT rBP & #LG&[ OdZNJXA! ,42=j p &V5o6u@o@ugrr®nŜȺŞƢǼP e&I:[— еx1ɥK\#CX@AiVJQ!-*ooYf xw; ׳B! ,<@Ia1g1m0z1yG4G2yPPPP^rEa-g:m9s+xMyBKSihséxȠŤȯǼİǾe@p(DF"TGgU)֊-6!Ir*H("H%aq(d!|ToB#uh (vGeP( SP(JXT\ZTA! ,D%4==%$2?>3>$2HFPG={APPPXjqkek|kkqqkrxƂ”ŞŢĮP "f&I:'p,KR AR`#HJ.HihDmW 0A (,EՍ !,L%$2?>3#R1s0zGG3FQFG>2PG1{A5mXj@owRy7s8yByBZoașȫȽe@p(F"TGM LuL,[ „ gd>Xb3B{mP#e["y{U #"#a!j[ B OUNaNJ[A! ,d%42?3%>3I"R!t0z<P?2v@PPP;XjQqwkxa.m9yAȫȺǹ_@p(4F"TGgjU)ֺ=d$ʕ 4P e+p>"92u.zT rBP & #LG&[ OdZNJXA!,l=>>2@IZn!t<3>Hp6'c@owwlZZs*y7lD~K\sŨȽĴǼb@p(,F"TGgZU@cyR dDF(86%ͥr )\ {M $ Q%I%! mF#B SPVJKvNXA! ,t%42?3%>3I"R!t0z<P?2v@PPP;XjQqwkxa.m9yAȫȺǹ_@p(4F"TGgjU)ֺ=d$ʕ 4P e+p>"92u.zT rBP & #LG&[ OdZNJXA! ,|2H"g!mG>"j(p6ǶDzǹ4)RWJ ³7 I1Ob.5M()! ,#4#?=IZGGOO&GGGPWfQpxeex&]5i|vY`xRa:g,g,l^~Abztźǽż`@p(<F"TGgzU)ֺ-|`+9qfK9Y`WL[ B'X$% 'X$GczB SP\N[ZJXA! ,%$@a"g!mFd'p6V5c5iGFQx}€Im9m9S[hì~ȝȽĽǷǾǵǹ[@p(F"TGg*U)֊]l$Ƃ-p.B}(U(LGh< "WTBFPBwSB L\ZN[TA! ,<%4#72?$2==$=?5%>3$2><3#3333>>>3>>>2>>>@IRZe#H"R"Z2H1W!j!t1g1mH3"t>2x]c x xE{%FY>GG3FQ>Ff?W`4W~IX^$^?I%K4^'Y4G>"G>2P?2i p h'j5q6G2yGG5PG1PG=XH1_H=\P2j@w@pI{Zp@=|f:GGGGPQPGG_XORRRPWfQ\sWirQpxe_Oe__vcI|f^fefggukwq|kkrqjvvv;FV ]&N&V&]&]?N'c?d5c5i5j5n6uGF@oXjQp@o@uIQejjqsv |vYh|ug`jruxlryāIUWZ.aaa-d:g,m9s+v7s*s8z7ZWlCl^rMxUrCxMyBxL}UqhyBZcvuKS[ZllxfzmsåmåsŪsêyćȖƠšȨŬŪȷùǵƻIJĴǾǽĻĝţijźH*\ȰÇ#JHŋ3jȱǏ CIɓ(S\ɲ˗0cʜI͛8sɳϟ1O`$$9xeS) Yŀ^Ī`U~H@Ң3Nӵ'!4ҿnTKנxrū"< q»yr/A ɖcjh-$GL_*mX’޾8wI20n߁,Tŏ[d>PxLa*Agm G܀-$tugv zT A<4!YBSGfEx~ 5 4`@,w,mX**D$E%("MDr>(Q]֬.d0]t"P 93w3Kdi&Ps82 g ]~OXЎ2+9?P*Ty T]sg?x8$0@d]tiN F?*:z' 'A=!b0Ư+/AfhIk)$^+f6hVJaR[2Zc٪ &š]rӤ,G&p(R:kj'hS> %l e Tgn6M9ym C@G*/b' tm#wpM֐m]Wjs̕F)u}.?8#@.Bv#5|A?8]\^u|aj; oA(?񥾸׍}xUPa_wYv~/@ ܞ:^ 9G(Mmxs w-M8~N:bvoz\"2y]@tC Ww ^$8APFeÌ!@8_sE4iRatQ IMF(F22Kh} JabuԐ'1 4#x`Dt#>j  cVFYJy?N-ʑW#򱲉!!LYneX\Q|$H`rl&~1,A(DB8" 2H:lyH_< 0ґD9gs@;xr}w^A^Н6$щ:(6Yc !eVY KTiNwtJ)7NGtBw@&`{HHAf e_jRcGSt(SӨfԔ[,tVjQCʏt!NuJF|sUEL@UQ5KmSX$G5dSMR Ȯ0dZ6+RZ:uT JVY Anymlg{CȮ1bWStt ͈i6*B4 \^fM^{xB y]n!j, +F0BpUiJ'A,k(G/ZXx],]S2Shީ.: 7&fc=s̒Fr [͎<1P!@Hٸ D0X a= %q2X)(8Bs+Q؎xVxȐ Qя1Ua)i#rXhɏbQ"IaaBS$(lBDiNKٔPRT9Ey^ dY!ci4jٖnpr9tYvyxz|ٗ~9YyimPHQ٘y# 0/̡Q 2k E`]9GٛR`zzLH@"#yG2@ 0r,ɲ  pw-NVR4K4o4b*B%a,")˂!Q4(CyG@`'i) 5+bdJEOMFDTFFZM1IJ0"! #EG1QfQ@p*G\a}*Y"9fWUT/:%Z5xZ Ab`0a.T%[]کuI$'A]}czGP7hZf.(BhKZq U0mQ]`]l\ɪrp5n ! `ePFlXtWP | pocf0| ֧ L@Z :ww~t!{Rb P  z(!8K{dhd q:+k-~xL&R t,=)R) 0 yUcqa_)S۶n Rp 1xmC%z;[{[Bv[˘{9 6-@Ѻ,PpÛۻț(1+d;[؛q۽˸4;{+曾۾[ ۿl!,LHLKGWKG\NJRMJ[VGKSIL[GK[JMRMQQM]ZLZTQTSP_XU[KGaIDhNKbOLkMIvRNeSWjQR{X`u_bx`FIcKNmKNcNQlXTsFHsKNyMMqNQvQNsWVv\SzTR`PapVdnh[zf[dahjejkjnpelpmpzpcrststzONRQU[TZX^X^[d[d^j[f]icm`n`nfrizu~h|,+4%>(ABTEXI\|nxw{}w|]TbWbYn]eYi\q^qextyfwqqA>B?\_^aceLCVM_V`X`czjzqls{|}ޟ"ߠ# $-ܪOݫSޮXS.0œÞŤƣȦɫèȫ˱ó˾́ŎɬҶ̽ɷҹѽيߏސ°ۻŴȹ˼Żի׫ӻ޵ߵýֽüƫ²źɼγ˽ H>*\ȐaHŋ3jȱǏ CIɓ(S\ɲ˗()ʔhƙ8+"O)ev,ѣH*]ʴӧPf|4翩~|WL1j>uAFOkυv%!B$ɮtJ˷߿ ,حa+^עhe̜A挙2j?~M^K9rH%2p۸sͻ߷5θM-R0`OK0\HoRNqV,f}Хc>0iҊo}6;eƁQ?w1a,avh($hl0="f!EO$PI>`A=i! @m$@:>y-H!pwE b!$0ooh['+͑'ihPcpa1!cGv sEt((EP案&JW$; BOI% nZ:5?'KJjO25 >%`Oop9#!6dgal>fgygh{ĆrhD>S!a|AHD>p=TG=sB0X;ȣA/Pࣅ=ѣA c0 Pa BҳA b1"#>P]Op{v0c0\Ik>r`cFMOb eov>u歷qGD܄n'7c =[ "N3@3P$,> +P6P*ȂO矇>z8l~63.L>=ZTXDP>c03.ds * 9dQz;۳ @8) @=/rL&1M$mBV7?MOy9(L WBQnn+ԃ84 ᙮f1\] RYx9Qáy#ڬ RHQj5p|@BÀ eE`MaD-O'`Q=:1|c$'IJZRmZA\=6MEִEmSMm\$:yZ$]=WD"[s@=TQGE=LIl a_# 6Ǒ-b:3إCe `G1-P@+aeḟ<ΖB"/Cz4'șR  D1Qd/0qюztBJRx(0lNxR%*TzN9ў{b8||G!P.Xj250_@=-*Lu*F U,O@ ֳrdX颺lK dG1OXI4{d'[RQSnBBB  ʺlgK 8I #V$eN"x2I6\l[+Р4.rN8ҭ̇q!eF~Ճ$P?LW i3L` AĘsGamM0n7{ _ Έd*sg4{ hDlJP k\^@NvqnH bj1]N։B8&`ÐJŕ.s#)3W\QPf 4_roOh.W8ЄC LJ[AMCccC0 htĜ2@:ܐ/0L!=51^,1Msb&6'ǑlؔE&DZfڿi;< %eG^r;ۺ.q]gS;Futw= }{ǀ_+ O8u-x?{v'yO\ݝw)W\ GN(OO \0 2Ϲw󞗼(qc.ANoJϧN[XϺַ{IŮ_|&6ۭ`Nx{t]JO ]O;߸'N! ,%2=h1ZGGOO&GGGPWfQpxeex&]5i|vY`xRa:g,g,l^~Abztźǽż`@p(<F"TGgzU)ֺ-|`+9qfK9Y`WL[ B'X$% 'X$GczB SP\N[ZJXA! ,,4I1m"PPP5oH^m9s8yB}LxUyBsxȯǯǼR f&I:[š е`="gLDM L' B \ (-P@cG(H ^4^^w4!! ,4@Ia1g1m0z >{f"B!t& &uGeP& SP&JX T\ZTA!,<@Ia1g1m0z1yG4PPPP^rEa-g:m9s+xMyBKSihséxȠŤȯǼİǾg@p(<F"TGgzU)֊-4)rFMIBE&€TQ |f#B"t' 'n#GeP' SP'JXT\ZTA!,D43%@"Z"gHv@{ZPPPPWrN&VVulrZaa}UummxȜȳǻưǷĺǹ`@p($F"TGgJU)ֺ<ĕ 45|0Bɂu&AT'E!X sBX$ $[GcPC SZdN]TA!,L$22HO4v@5i@owqZrCåsdzķĹG d&I:[“ еۻ D;" Ǣ8.`Lhc h,dɳμVvp!,)-<6</7(244Fe+R/u:I*9K=1x] qEz:FJ6SsJZ/M*K>-l l-H3x^HGG7QG9[P2vBqL9|f:IHIMI[GPQQGHTMS[VLRQRLHeKErRNeSMyRUfQYrTlubIMdMRe_OgTWuGKtOS{POwVVaQbvZjvdRfefggukwq{jjtkrsrivtw;N i&Y3h5rGFH^QKVVAoXh]f_pTuBrbibjjrgusuw{k},+4%>(AEX|vYlh|ti`jrwsvxxqx{ˆUZ.ai3t4ZUlCg\rIyYn]wF{Ui`qhmawg|xyBA?^abdC@LCVM_V`XdfZduuUkxkxsgxqߠ#$)ݬT§uSZ.0̦Ȭз°рǍ̮ùշƯӺƸԾۋݎıŹڻƻºڮ⒕㷼ٿĝţŸƮŶҶ H*\ȰÇ#JHŋ3jȱǏ CIɓ(S\ɲ˗0cʜIs}.s(#qDo(OD30ZqիXjʵט7òH"F)r4.PFuDԧN)fK/^l# 8BN}hrƏA 0olM:0gZ ! ǩp)yѢFУ/rt8|>[ԧQL]T5o˟O/| %>rS7'$`<2Pa>.LVO}(:xS<ᄸp5p8.6 \A/  <@ާ=_AC&)"5و"gN'y)tBlqޗ_lAIh7c Rx>z8 C肧>HGqxB"b,>6D!}nR3cna"jB_~I MVaɯW~"ʐ I1eH.ĦJ}( S68O.R# ?@E%mzMd[>[>ߘȂqp 롛/(M0A:7h7*ʂ:XC-κ,D2٨84׌δ3Ά0ZCo,uq¬^ kZXg]3G %N$%4pC*A<%,COa &+(g24A M ʜmܮSB+Rv*SЎ r 1ã> N \0DƳ[M;L;z;HZ' fKj遢H2*82$cpJ(a& Ў|[(GБqA5mGhA=N9<ȳ]( kHmQ9p ,7<:pf,gIZ/LՓ,oPWWʒ7%/Im r2Yz8Ð䇎{%"T4T%Yk-D3> )*yIz\BhԠ%cHSQA"NLBPVTDD<l;_0α'ME5π3' g‡'MJ[Ҙδ7i@QfRԨNWVհgMZָεw^MbN5?f;ɎMj[ζn{~MrNv[MzηX[N7~mtmdGH7{ w H>41c+v1WsG|@q @1Y@ӣ^kTg^sW<)GF; iCOsٹ69P\v˱^v{Pj#mOa}ާ~<.B4ЊCO8K.d! W UP gjp`Lg@b |PPjx Vp Հs"*X yr ($j`0 퐃18Ր P XjO6xv b}6sL\؅^vlYy0 P XjHwosHph'CqɷІj}|ChuPjz Vwz VGu8Xj(kV0gjiЄw3xsxgux؊p'*0 cpjsp Z|Ր;D8s`ƈVu XN X,Wj H~P|D{napvs7  Ȑ Ű HvVrX݀xݘ'8;谌Eؒ.VxCp xjjܐG A0jCh1'rT7sD6Nɔ 89GVq0Yfy&6s[j77 *s9/ /H/g@vy+ Qss3 DZFonkY댜R]rI 0 0~xu]ՎY v/,gNޔnU ՑHGt6 z姆 @Yjɮ}ԁYژ v~j_ȩhGRps?@}H˹V񪖕P9C_1Oގ- sY{~ A|}rGoxi ~OH+"k@}c/iuQ |A }rO J̜ibnǝ퀓y~)|i-Ay܌[yL:j7ɐ*\ȳV*k kjj=Ŗ s($X4膵tC%B$.TG!E$YI)UdK1%W͚!0P1;2vد0GI(LF>ZUYnH8~%[Yiծemڰbo[]y6ܜ}&\aĉacȑ%O|ʙ5oٳcG28qC#N$mkرeA z]s&h%W e2pѥO^CH5tcPP˃m'(1)h>S6wc ;h#Lsy]uн/=Y{kE}vc; [: `cW 4wG\޳??>=g8T"nqF>_Y!:` @:/]{' 6]k@&H[KnvY啕_Lxq (С yIf;NQR^{ϻ#jDgz*}t;[ a (p_WWZ('$x׿}v\n5!t(@ ~"swR4KO[”PcpAd&v,>W/c`dҲ_p@@{(hG*= e#tCP%XvT'{\# aHb%lFv0O;9M|Ncˁ1_ ǀQӉapVD; f:Ԡ'J)4H{נ.K@8{䣝ID'D L$5`!ȂD IC^2" 4c)M9?:\E2SRJAv:D(Ie/}ZR$faYLd&Sl92LhZ0ىf5yL?f7fV%f9ɱ?JHHcE=;g=IKmzH =;rg"gA | 5 A@{BtPft6LCGAZ\՞XU0:oK<;}Pk"wUi tB{YiZFqHaqm2+П2AZ\I@IqU)ܪ]9+VyXɪ 3o1HAX T e7B  \ XjhSXy#DBTBrB(l;*AV),$+$$Q S1B*DHy%&|+5Խ3\!C&³]qA@A= ,;<Cp@[I\PD |ă>8A:B9,(~y@-Dy9/siX;sX{)oQ+U,_,3h^hSh~ ;5𴴠菰4jI4DKkhhpP6h~e%g{~NS ǐCU0UAW#WiZ ( & |k7N}4X{8kňŸؓK+;x7y{rHl~FkxX1{0O9Hm񤵊l짠mmmf];<ޣ?þރ>i->;nkn6?;m)?sbr6D"hen6mK)n:Unj=V ?=[kы'&k >?3P~n䆈"@1_H: o7ꖼp Fo>?SqwqMDk]J6CFQ5tl?N*|WrXD l%/-gRQ4@Pt,4 ɔ p-ZE C1_9sr>sDC@//ˈoE#Mt7n߁h_0_127CG>?B'+(_-D*'+.SHD‚tYDPorCrPlsRsxyc}1sUǧGuӆ<iQjIviJxG%| \k'|UE6ϚQϫďˮG*Y|d@z'}R|_11Pե9)}iSDQ57j ihn@LpT4M)~b~؏iG^7;#u|29wVvVjWB8 laC7!F MʈP"E vAVCR AP 0BSajG*!B~*j JP]Xˁ*EaԘT=nܹrbˑ%OLj,چm-Ʈi5r8Ms " 7Œ@_f:xȒ9-F~ ݵ9gPL00]g_Ҧt5?VZcf 7"PPfz\<ĭ̮lwj $OB#S\y-68:MϠE }bh7Y_р [RLsa@X*5g^2w]hV yifR[CՆՂ >'Rؠz5[9b[;@SI#sS;XD5|122CB} 4V5dS%L㇍*y vlm_Nl JVb%CJ/٤w.$UuS2% )f"T*&ILAS9yG'jF$qW&VjS7rVe(9z5Iɟ^+䮇': eU^Kh9Fe^|lYB,u> i}R b[h&ۢo֚gNro8VF9/`-0IVBmC@õs̘K,:/Mw DBi:A*Л 7D=@l؜S1:[RoB3g)2/+t~`]Qskͮ<ܬpGYN@Rtդt̬s jYR6xRu,Éd7 ҧ9:#\Wa7v:]l̳{}ueIW::V7c.{*ݶF}Yw7B/=7}{'mzH#њR:Mv4&CD3<6 RDI#10RxRhw)BcSr>\A.P(L6jEap99ЃӜ F?zO3V;O3S#z;>s$88nݛhߏ*& >,Sm;ޣqH/o 'bs &SBS$,WIqD'J +R$vݐai'<_I; YȂ2ĬnR{ کCi/p,k?%9׸օCB>ϭIt 0V arE;`ЄdT|`}Gi(F>!J`fb`@  l̐d[W!!b&1LpM%~P` (V!Q P"ƙI^- _)B(-"""풃ݒ"0& #5!2>#149#4V#T@! ,\%$23%@1Z!m>GGOO&GGGPWfQpxeex&]5i|vY`xRa:g,g,l^~Abztźǽż`@p(<F"TGgzU)ֺ-|`+9qfK9Y`WL[ B'X$% 'X$GczB SP\N[ZJXA! ,d%o܁K&,ry8y[I]T! ,l%$@R!t1s0zGG3FQG>2PG1{A5mXj@owRy7s8yByBZoașȫȽc@p(F"TGM !LUL*[ cGd<"Hb1{wmP"e[!y{U"!"a jaB OUNENJ[A!,t2=%=Y4W~_Q0kkq&]@ullr€RRqjéxǽĞDzM "f&I:[ؘ` 2vH"_XBHTDjtGـ550L.@=-W.s]s<-! ,|22HO4v@5i@owqZrCåsdzķĹD d&I:[’ е{I$3 (y**ɾX-muVٵSݨ!,%$2?>3#R1s0z>2@IZn!t<3>Hp6'c@owwlZZs*y7lD~K\sŨȽĴǼb@p(,F"TGgZU@cyR dDF(86%ͥr )\ {M $ Q%I%! mF#B SPVJKvNXA! ,43%@"Z"gHv@{ZPPPPWrN&V@ulrZaa}UummxȜȳǻưǷĺǹ`@p($F"TGgJU)ֺ<ĕ 45|0Bɂu&AT'E!X sBX$ $[GcPC SZdN]TA!,$22HO4v@5i@owqZrCåsdzķĹG d&I:[“ еۻ D;" Ǣ8.`Lhc h,dɳμVvp!,2=%=Y4W~_Q0kkq&]@ullr€RRqjéxǽĞDzM "f&I:[ؘ` 2vH"_XBHTDjtGـ550L.@=-W.s]s<-! ,%$2?>3#R1s0zGGOO&GGGPWfQpxeex&]5i|vY`xRa:g,g,l^~Abztźǽż`@p(<F"TGgzU)ֺ-|`+9qfK9Y`WL[ B'X$% 'X$GczB SP\N[ZJXA!,%o܁K&,ry8y[I]T!,=>>2@IZn!t<3>Hp6'c@owwlZZs*y7lD~K\sŨȽĴǼb@p(,F"TGgZU@cyR dDF(86%ͥr )\ {M $ Q%I%! mF#B SPVJKvNXA! ,43%@"Z"gHv@{ZPPPPWrN&V@ulrZaa}UummxȜȳǻưǷĺǹ`@p($F"TGgJU)ֺ<ĕ 45|0Bɂu&AT'E!X sBX$ $[GcPC SZdN]TA! ,43%@"Z"gHv@{ZPPPPWrN&VHuPulrZaa}UummxȜȳǻưǷĺǹa@p(,F"TGgZU)ֺ@ĕ 6 52BFu('}$y"X sBX% %[GcPC SZdN]TA!#,( %4#4#?$2=3%$2?>3#>>2@IRZal"Z2H1Z"g!m!t1g1mH>1y]c x x>GG3FQ4W|FOF%O&G4O4G>"G>2j j(s(p6GG1PG1\P0v@{ApI{Z|f:GGGGPPPGGPPPPOlPWfPWrP^rQpxqk^|f^eexkkqEN i&V&]&]'c?d5i5k6uH^@oQdXj@o@u@uHuTukqwtqq  |vY`ll|t`l`glllrrrxrrƁRZRZZ.aaa-f:c:g,g,m+m9s+s8y7s*s8y7lDl^}]rCxMyB}LxU}UqjyA~K\bpKKSZZiohuztamgmtmsåmåsxŋȔȔȜȠšȬũȳŽǬdzǻŰĶĴƽķĻŻĞĢĴŻH*\ȰÇ#JHŋ3jȱǏ CIɓS@ɲ Verޙf=}z"ow+2mF"#SwVxէwRټPASh,S5ty{sr=8 S}йjWO3Bj̜Q> pC1*JP3"c@ܖrg$J2b&, [`@dWB`c, 2$U$X@L3J 51,\s D M9Pm@!z * 7`Th`1Ȩ*Х )~jRz :nʭb⸒`8S< @#`+Z;˾kA Rvs:\6t#@ ,??%FP]@;A["X3&WLɃ 9F ym|$̈ƿ1@0tL88229#(]$ B ҠF4@/ؕ+aY  RJ\.2~70.kyˊ CI[R ֌KBBmeO 8f <8v5ryH?JЂ"dMAІ(=!*ъ֤.w˞ BQz$}s~!5q)Lgz")Nw)P:1*R{2Eu*TTR! ,=>>2@IZn!t<3>Hp6'c@owwlZZs*y7lD~K\sŨȽĴǼb@p(,F"TGgZU@cyR dDF(86%ͥr )\ {M $ Q%I%! mF#B SPVJKvNXA!,%$2?>3#R1s0z>2@IZn!t<3>Hp6'c@owwlZZs*y7lD~K\sŨȽĴǼb@p(,F"TGgZU@cyR dDF(86%ͥr )\ {M $ Q%I%! mF#B SPVJKvNXA! ,4%4I!m1g1s<|>GGG>"{AE5c5iXd@uw{Rg:m9yByBoagŔȨȶǽc@p($F"TGgJU)ֺd6=. )ZX $B sT $"$[!FPC TJn{D[ZPA! ,<%4==%$2?>3>$2HFPG={APPPXjqkek|kkqqkrxƂ”ŞŢĮN "f&I:'p,KR AR`#HJ.HiϨr*`4&ǃPXKu!,D%o܁K&,ry8y[I]T!,L%@jQf{s80)RWJppFkca^"! ,T$@1s0z3>Hd'PP=v@ ]m,}UyBsåsȡȫȡǽǷĮĵǼT f&I:'P*l 05"`$̃A4} a\+ݯM6dmQ4]%}.M!!,\%$2?>3#R1s0z3I"R!t0z<P?2v@PPP;XjQqwkxa.m9yAȫȺǹ_@p(4F"TGgjU)ֺ=d$ʕ 4P e+p>"92u.zT rBP & #LG&[ OdZNJXA!,l%$@R!t1s0zGG3FQG>2PG1{A5mXj@owRy7s8yByBZoașȫȽc@p(F"TGM !LUL*[ cGd<"Hb1{wmP"e[!y{U"!"a jaB OUNENJ[A! ,t%$2?>3#R1s0zGGOO&GGGPWfQpxeex&]5i|vY`xRa:g,g,l^~Abztźǽż`@p(<F"TGgzU)ֺ-|`+9qfK9Y`WL[ B'X$% 'X$GczB SP\N[ZJXA! ,%4I!m1g1s<|>GGG>"{AE5c5iXd@uw{Rg:m9yByBoagŔȨȶǽc@p($F"TGgJU)ֺd6=. )ZX $B sT $"$[!FPC TJn{D[ZPA!,%4==%$2?>3>$2HFPG={APPPXjqkek|kkqqkrxƂ”ŞŢĮN "f&I:'p,KR AR`#HJ.HiϨr*`4&ǃPXKu! ,%o܁K&,ry8y[I]T!,4$3%=%$2?3>>I2H3>HG>"xĿmsåsŪsȡȣJ d&I:(@Bp @O 1 i" LEJ \^+7`Yoi:va!! ,%$23%@1Z!m>GGOO&GGGPWfQpxeex&]5i|vY`xRa:g,g,l^~Abztźǽż`@p(<F"TGgzU)ֺ-|`+9qfK9Y`WL[ B'X$% 'X$GczB SP\N[ZJXA!,%42?3%>3I"R!t0z<P?2v@PPP;XjQqwkxa.m9yAȫȺǹ_@p(4F"TGgjU)ֺ=d$ʕ 4P e+p>"92u.zT rBP & #LG&[ OdZNJXA! ,2=j p &V5o6u@o@ugrr®nŜȺŞƢǼP e&I:[— еx1ɥK\#CX@AiVJQ!-*ooYf xw; ׳B! ,@Ia1g1m0z1yG4G2yPPPP^rEa-g:m9s+xMyBKSihséxȠŤȯǼİǾe@p(DF"TGgU)֊-6!Ir*H("H%aq(d!|ToB#uh (vGeP( SP(JXT\ZTA! ,%4==%$2?>3>$2HFPG={APPPXjqkek|kkqqkrxƂ”ŞŢĮP "f&I:'p,KR AR`#HJ.HihDmW 0A (,EՍ !,%$2?>3#R1s0z3#R1s0z3"R!t=I>1y><~FP?2v@PPP;XjQqwkxa.m9yAȫȺǹ`@p(LF"TGgU)ֺEp˕ژ:% D*T>@{T sBP )&LG!)[OT\ZNTA!, 2=%=Y4W~_Q0kkq&]@ullr€RRqjéxǽĞDzM "f&I:[ؘ` 2vH"_XBHTDjtGـ550L.@=-W.s]s<-! ,%4==%$2?>3>$2HFPG={APPPXjqkek|kkqqkrxƂ”ŞŢĮN "f&I:'p,KR AR`#HJ.HiϨr*`4&ǃPXKu! ,%$23%@1Z!m>GGOO&GGGPWfQpxeex&]5i|vY`xRa:g,g,l^~Abztźǽż`@p(<F"TGgzU)ֺ-|`+9qfK9Y`WL[ B'X$% 'X$GczB SP\N[ZJXA!,$2H"g!mG>"j(p6ǶDzǹ4)RWJ ³7 I1Ob.5M()!,,%$2?>3#R1s0z3"R!t=I>1y><~FP?2v@PPP;XjQqwkxa.m9yAȫȺǹ`@p(LF"TGgU)ֺEp˕ژ:% D*T>@{T sBP )&LG!)[OT\ZNTA!,D2=%=Y4W~_Q0kkq&]@ullr€RRqjéxǽĞDzM "f&I:[ؘ` 2vH"_XBHTDjtGـ550L.@=-W.s]s<-!,L%4==%$2?>3>$2HFPG={APPPXjqkek|kkqqkrxƂ”ŞŢĮN "f&I:'p,KR AR`#HJ.HiϨr*`4&ǃPXKu! ,T%o܁K&,ry8y[I]T! ,\=33##HK H4.`0(J&p[LV2A[Hv@{ZPPPPWrN&V@ulrZaa}UummxȜȳǻưǷĺǹ`@p($F"TGgJU)ֺ<ĕ 45|0Bɂu&AT'E!X sBX$ $[GcPC SZdN]TA! ,t2=j p &V5o6u@oHo@uPogrr®nŜȺŞƢǼP bf&I:[™ еxQJSd"C`̀a%.%ö 0f@xw; ׳B! ,|=F*o܁K&:,ry RA :,ʴ&OxÕ݊)!,%$23%@1Z!m>GGOO&GGGPWfQpxeex&]5i|vY`xRa:g,g,l^~Abztźǽż`@p(<F"TGgzU)ֺ-|`+9qfK9Y`WL[ B'X$% 'X$GczB SP\N[ZJXA! ,%42?3%>3I"R!t0z<P?2v@PPP;XjQqwkxa.m9yAȫȺǹ_@p(4F"TGgjU)ֺ=d$ʕ 4P e+p>"92u.zT rBP & #LG&[ OdZNJXA! ,2=j p &V5o6u@o@ugrr®nŜȺŞƢǼP e&I:[— еx1ɥK\#CX@AiVJQ!-*ooYf xw; ׳B! ,@Ia1g1m0z1yG4G2yPPPP^rEa-g:m9s+xMyBKSihséxȠŤȯǼİǾe@p(DF"TGgU)֊-6!Ir*H("H%aq(d!|ToB#uh (vGeP( SP(JXT\ZTA!,%4==%$2?>3>$2HFPG={APPPXjqkek|kkqqkrxƂ”ŞŢĮP "f&I:'p,KR AR`#HJ.HihDmW 0A (,EՍ ! ,%$2?>3#R1s0z3#R1s0z3"R!t=I>1y><~FP?2v@PPP;XjQqwkxa.m9yAȫȺǹ`@p(LF"TGgU)ֺEp˕ژ:% D*T>@{T sBP )&LG!)[OT\ZNTA! ,2=%=Y4W~_Q0kkq&]@ullr€RRqjéxǽĞDzM "f&I:[ؘ` 2vH"_XBHTDjtGـ550L.@=-W.s]s<-! ,%4==%$2?>3>$2HFPG={APPPXjqkek|kkqqkrxƂ”ŞŢĮN "f&I:'p,KR AR`#HJ.HiϨr*`4&ǃPXKu!,%$23%@1Z!m>GGOO&GGGPWfQpxeex&]5i|vY`xRa:g,g,l^~Abztźǽż`@p(<F"TGgzU)ֺ-|`+9qfK9Y`WL[ B'X$% 'X$GczB SP\N[ZJXA! ,%o܁K&,ry8y[I]T! ,%$3#@!t0zOW{AN5c5iY{Ylrm9y7yBTǻǽ] g&I:*G.仚 4L,Gd*TV[VnolDԦh|Osp y Cg.Hv@{ZPPPPWrN&V@ulrZaa}UummxȜȳǻưǷĺǹ`@p($F"TGgJU)ֺ<ĕ 45|0Bɂu&AT'E!X sBX$ $[GcPC SZdN]TA!,$2=%=Y4W~_Q0kkq&]@ullr€RRqjéxǽĞDzO bf&I:[٨d Y2L$_\BhT"F5 dÑPn%PvLK;

GGOO&GGGPWfQpxeex&]5i|vY`xRa:g,g,l^~Abztźǽż`@p(<F"TGgzU)ֺ-|`+9qfK9Y`WL[ B'X$% 'X$GczB SP\N[ZJXA!,$%42?3%>3I"R!t0z<P?2v@PPP;XjQqwkxa.m9yAȫȺǹ_@p(4F"TGgjU)ֺ=d$ʕ 4P e+p>"92u.zT rBP & #LG&[ OdZNJXA!,,2=j p &V5o6u@o@ugrr®nŜȺŞƢǼP e&I:[— еx1ɥK\#CX@AiVJQ!-*ooYf xw; ׳B! ,4@Ia1g1m0z1yG4G2yPPPP^rEa-g:m9s+xMyBKSihséxȠŤȯǼİǾe@p(DF"TGgU)֊-6!Ir*H("H%aq(d!|ToB#uh (vGeP( SP(JXT\ZTA! ,<%4==%$2?>3>$2HFPG={APPPXjqkek|kkqqkrxƂ”ŞŢĮP "f&I:'p,KR AR`#HJ.HihDmW 0A (,EՍ !,D%$2?>3#R1s0zGG3FQFG>2PG1{A5mXj@owRy7s8yByBZoașȫȽe@p(F"TGM LuL,[ „ gd>Xb3B{mP#e["y{U #"#a!j[ B OUNaNJ[A! ,\%42?3%>3I"R!t0z<P?2v@PPP;XjQqwkxa.m9yAȫȺǹ_@p(4F"TGgjU)ֺ=d$ʕ 4P e+p>"92u.zT rBP & #LG&[ OdZNJXA!,d=>>2@IZn!t<3>Hp6'c@owwlZZs*y7lD~K\sŨȽĴǼb@p(,F"TGgZU@cyR dDF(86%ͥr )\ {M $ Q%I%! mF#B SPVJKvNXA! ,l%42?3%>3I"R!t0z<P?2v@PPP;XjQqwkxa.m9yAȫȺǹ_@p(4F"TGgjU)ֺ=d$ʕ 4P e+p>"92u.zT rBP & #LG&[ OdZNJXA! ,t%o܁K&,ry8y[I]T! ,|43%@"Z"gHv@{ZPPPPWrN&V@ulrZaa}UummxȜȳǻưǷĺǹ`@p($F"TGgJU)ֺ<ĕ 45|0Bɂu&AT'E!X sBX$ $[GcPC SZdN]TA!,2?@0z$@^'j('cg,m9xLyBmsåsȫȽIJǹO bf&I:[™ е۸ 1FL2cM,!& Ѡ&m[0Cuf[NG0{ ! ,%o܁K&,ry8y[I]T! ,%$23%@1Z!m>GGOO&GGGPWfQpxeex&]5i|vY`xRa:g,g,l^~Abztźǽż`@p(<F"TGgzU)ֺ-|`+9qfK9Y`WL[ B'X$% 'X$GczB SP\N[ZJXA! ,%42?3%>3I"R!t0z<P?2v@PPP;XjQqwkxa.m9yAȫȺǹ_@p(4F"TGgjU)ֺ=d$ʕ 4P e+p>"92u.zT rBP & #LG&[ OdZNJXA!,2=j p &V5o6u@o@ugrr®nŜȺŞƢǼP e&I:[— еx1ɥK\#CX@AiVJQ!-*ooYf xw; ׳B!,@Ia1g1m0z1yG4G2yPPPP^rEa-g:m9s+xMyBKSihséxȠŤȯǼİǾe@p(DF"TGgU)֊-6!Ir*H("H%aq(d!|ToB#uh (vGeP( SP(JXT\ZTA! ,( %42?$2==$2?3%=%>3$3#$2?<3#3333>>>3>>>2@IRZf#H"S2H1W!k!t1i1s0zH>2y]c x xE~%FY>GG3FQ4W~IWI%I4^'W4G>"G>2P?2j p d'j(p6G2yPG1PG=\P2jQw@{Z|f:GGGPGG_XOPPPPWfP[rXjqQpxe_Oe__gegggukwq|kkqqkwwq;ENV ]&V&]&]'c5c5i5j5o6u@oXiUu@o@uPoQjrsvw{  |vYlhwrfl`gllrtxrxņUVaaa.a-f:c:g,m9m9s+s8y7s*s8z7lDl^rCxMyBxL}UqjyB\bvKTZkluztagmtmsåsŪs©x‡ŋȇȔœȔțȜȠšȭŪȸǮƵǻìݲķĴǽķżĞƢíóŻH*\ȰÇ#JHŋ3jȱǏ CIɓ(S\ɲ˗0cʜI͛8sɳϟ@`dED6shцr@@S3%Ap9bbbŲ8oD ^r] ׀vDrпE^@ gP,+G˸" b߿n)xA]o/t aw8_}WX]nL?E/|={ u M?@[.P}E1Uwb s>X?T_ !DDQ3LnP" GR5aH O=2D&FĠ xAqQL>sCp2>;t??>W0s9$P3W(9dh@?8"̅?O'Q\הU^@~*hg Ō:;'q(' Z$b sI hSpب"dꤕsi櫱ZeP0uޙ2 l⺗n駡kByj *+v^96`YǼ?(tJ:nzn.Bl gj: /d"\ 'J oZ@uq a?B@S cBm4p4>3QP$tO2om\4N\tO+T$]v 98Kt۽?ьC7Q4TH wBn襟^u C678;Ѡ>vd4Bs=??óOVP>wF|꫷coWݯ<; Ǿ>N`G4skt:ɏ~:*ho V} Z  Eu0|]X 9G <01B !0*p~wQ"RX4b !  z''BQ3|x"xjAaXG$taDBH4kr>d@H ` Qfr4չ G,ԀW7t+Q9CIbE=VQ Lt k!浳,f?{>֯*`E6Uk٩֭lʐ(>(4EY\[[,x4EO^@%9DHpa[V3m&0NCH8o| dtikrdU9 _C*V?v"(V"4a Gjx݊802b"8~l 61֓M Rd]I6Вkdx!&H҃ XmӸ7c U93ae8?ylNY&AVK.SQyLqK|[ `o)M_\|=1p_ =_)U]B?/Ǭk|D^7~{_S_s|s~gSFgx~wSu^',kx ҀU8guzyQ*p ! 5G>F) p2PH%9CX5 Q3R%"o BHsa w!|=RvUhFnUqs1å`&s*ThiӅkXXaGfAMp(p&j(}Xh8:_y{`fm%Ê8Sbzh؈Fcs8wӇs1 aM‹&T]@91Xڈ G(x9e1pWӄh ȉsx]XBhظ8(0I " 9y"IAL:`-0r4(; 0) E@L H3VHLCi@YQaQS(AU9[rRJQ)fT7)1I:U{p]/EYImQ4YcI&)|wYz) oG>s/0Q/9љ陡yQCcSI 1;װH.Y*Aii 59Yyؙڹٝs!y虞i9=ўya:9zY ڠz Zz1ڡ:":$j!Z(*'.0-4Z63z:3#R1s0z3#R1s0z3"R!t=I>1y><~FP?2v@PPP;XjQqwkxa.m9yAȫȺǹ`@p(LF"TGgU)ֺEp˕ژ:% D*T>@{T sBP )&LG!)[OT\ZNTA!,,2=%=Y4W~_Q0kkq&]@ullr€RRqjéxǽĞDzM "f&I:[ؘ` 2vH"_XBHTDjtGـ550L.@=-W.s]s<-!,4%4==%$2?>3>$2HFPG={APPPXjqkek|kkqqkrxƂ”ŞŢĮN "f&I:'p,KR AR`#HJ.HiϨr*`4&ǃPXKu! ,<%$23%@1Z!m>GGOO&GGGPWfQpxeex&]5i|vY`xRa:g,g,l^~Abztźǽż`@p(<F"TGgzU)ֺ-|`+9qfK9Y`WL[ B'X$% 'X$GczB SP\N[ZJXA! ,D2H"g!mG>"j(p6ǶDzǹ4)RWJ ³7 I1Ob.5M()!,L2=%=Y4W~_Q0kkq&]@ullr€RRqjéxǽĞDzM "f&I:[ؘ` 2vH"_XBHTDjtGـ550L.@=-W.s]s<-!,T%$@R!t1s0zGG3FQG>2PG1{A5mXj@owRy7s8yByBZoașȫȽc@p(F"TGM !LUL*[ cGd<"Hb1{wmP"e[!y{U"!"a jaB OUNENJ[A! ,\%o܁K&,ry8y[I]T! ,d%>3#2H=a>GGXH1GGGYZZ@o@oxUmƬx> bd&I:[‘ е8<dK;-P88 ج!⪼+OeV!,l%o܁K&,ry8y[I]T! ,t%$23%@1Z!m>GGOO&GGGPWfQpxeex&]5i|vY`xRa:g,g,l^~Abztźǽż`@p(<F"TGgzU)ֺ-|`+9qfK9Y`WL[ B'X$% 'X$GczB SP\N[ZJXA! ,|%42?3%>3I"R!t0z<P?2v@PPP;XjQqwkxa.m9yAȫȺǹ_@p(4F"TGgjU)ֺ=d$ʕ 4P e+p>"92u.zT rBP & #LG&[ OdZNJXA! ,2=j p &V5o6u@o@ugrr®nŜȺŞƢǼP e&I:[— еx1ɥK\#CX@AiVJQ!-*ooYf xw; ׳B!,@Ia1g1m0z1yG4G2yPPPP^rEa-g:m9s+xMyBKSihséxȠŤȯǼİǾe@p(DF"TGgU)֊-6!Ir*H("H%aq(d!|ToB#uh (vGeP( SP(JXT\ZTA! ,%4==%$2?>3>$2HFPG={APPPXjqkek|kkqqkrxƂ”ŞŢĮP "f&I:'p,KR AR`#HJ.HihDmW 0A (,EՍ ! ,%$2?>3#R1s0zGG3FQFG>2PG1{A5mXj@owRy7s8yByBZoașȫȽe@p(F"TGM LuL,[ „ gd>Xb3B{mP#e["y{U #"#a!j[ B OUNaNJ[A! ,%42?3%>3I"R!t0z<P?2v@PPP;XjQqwkxa.m9yAȫȺǹ_@p(4F"TGgjU)ֺ=d$ʕ 4P e+p>"92u.zT rBP & #LG&[ OdZNJXA!,=>>2@IZn!t<3>Hp6'c@owwlZZs*y7lD~K\sŨȽĴǼb@p(,F"TGgZU@cyR dDF(86%ͥr )\ {M $ Q%I%! mF#B SPVJKvNXA! ,%42?3%>3I"R!t0z<P?2v@PPP;XjQqwkxa.m9yAȫȺǹ_@p(4F"TGgjU)ֺ=d$ʕ 4P e+p>"92u.zT rBP & #LG&[ OdZNJXA!,2H"g!mG>"j(p6ǶDzǹ4)RWJ ³7 I1Ob.5M()! ,2=%=Y4W~_Q0kkq&]@ullr€RRqjéxǽĞDzM "f&I:[ؘ` 2vH"_XBHTDjtGـ550L.@=-W.s]s<-! ,%$@R!t1s0zGG3FQG>2PG1{A5mXj@owRy7s8yByBZoașȫȽc@p(F"TGM !LUL*[ cGd<"Hb1{wmP"e[!y{U"!"a jaB OUNENJ[A! ,%o܁K&,ry8y[I]T!,4#42>>2ZW^ d E&N?N5o@o@uIzIlrxlr€IZZs8ZWZagƬx“ȝȶĵǷǾŢǬǹd@p(|F"TGgU)֊@aVVGha.uPH^?d'PP=v@p@= ]m,}UyBsåsȡȫȡǽǷĮĵǼW g&I:'`$*l`A%-,yGr(`xN@Ȁ703 d7{z.N!! ,%$2?>3#R1s0z3#R1s0z3I"R!t0z<P?2v@PPP;XjQqwkxa.m9yAȫȺǹ_@p(4F"TGgjU)ֺ=d$ʕ 4P e+p>"92u.zT rBP & #LG&[ OdZNJXA!,,2=j p &V5o6u@o@ugrr®nŜȺŞƢǼP e&I:[— еx1ɥK\#CX@AiVJQ!-*ooYf xw; ׳B! ,4%==$$2?>3#R0z>1s>1y>=yFF%j(|f:GGGPGGkqllrZf:s8ZzgūȻĽǵ]@p(4F"TGgjU)ֺ P$˕<QE4ƒUlbpz&JX!&&XG [BSP\TZPA! ,<%o܁K&,ry8y[I]T! ,D%>3#2H=a>GGXH1GGGYZZ@o@oxUmƬx> bd&I:[‘ е8<dK;-P88 ج!⪼+OeV!,L%o܁K&,ry8y[I]T!,T#423%>>>GPP5i@o@uyB9)RULt,€yJmO1O$;$Qy$KhSF! ,\3%$=>@"Z!m1s%=HOv6v@{APPPX^x5l@oZxUgzȶĺĦǹT g&I:[žHTuEt GrxQ$i$S)>a敕B"b*l& A> 0dTFUW{.=!! ,d%$2?>3#R1s0zK H4.`0(J&p[LV2A[>>Wd'GPP5i@o@uyB=)Ru,%hHrS&3)2nN`@#͘K6?(R>I2H3>HG>"xĿmsåsŪsȡȣJ d&I:(@Bp @O 1 i" LEJ \^+7`Yoi:va!!,%o܁K&,ry8y[I]T! ,%$23%@1Z!m>GGOO&GGGPWfQpxeex&]5i|vY`xRa:g,g,l^~Abztźǽż`@p(<F"TGgzU)ֺ-|`+9qfK9Y`WL[ B'X$% 'X$GczB SP\N[ZJXA! ,%42?3%>3I"R!t0z<P?2v@PPP;XjQqwkxa.m9yAȫȺǹ_@p(4F"TGgjU)ֺ=d$ʕ 4P e+p>"92u.zT rBP & #LG&[ OdZNJXA!,2=j p &V5o6u@o@ugrr®nŜȺŞƢǼP e&I:[— еx1ɥK\#CX@AiVJQ!-*ooYf xw; ׳B!,@Ia1g1m0z1yG4G2yPPPP^rEa-g:m9s+xMyBKSihséxȠŤȯǼİǾe@p(DF"TGgU)֊-6!Ir*H("H%aq(d!|ToB#uh (vGeP( SP(JXT\ZTA!,%4==%$2?>3>$2HFPG={APPPXjqkek|kkqqkrxƂ”ŞŢĮP "f&I:'p,KR AR`#HJ.HihDmW 0A (,EՍ ! ,%$2?>3#R1s0zGG3FQFG>2PG1{A5mXj@owRy7s8yByBZoașȫȽe@p(F"TGM LuL,[ „ gd>Xb3B{mP#e["y{U #"#a!j[ B OUNaNJ[A! ,%42?3%>3I"R!t0z<P?2v@PPP;XjQqwkxa.m9yAȫȺǹ_@p(4F"TGgjU)ֺ=d$ʕ 4P e+p>"92u.zT rBP & #LG&[ OdZNJXA! ,=>>2@IZn!t<3>Hp6'c@owwlZZs*y7lD~K\sŨȽĴǼb@p(,F"TGgZU@cyR dDF(86%ͥr )\ {M $ Q%I%! mF#B SPVJKvNXA!,%42?3%>3I"R!t0z<P?2v@PPP;XjQqwkxa.m9yAȫȺǹ_@p(4F"TGgjU)ֺ=d$ʕ 4P e+p>"92u.zT rBP & #LG&[ OdZNJXA!,$=33#@Ra!m<j5v6N@uRffrIZm+m9rCgsƝȬǺưǷǵǼ\@p( F"TGM!J5|[""dV 6YEmAy!~mL !KUmJaNlNUA! ,<%4#42?$2==$=?5%>3$2>;3#3333>>>3>>>2>>>@IRZf#H"R"Z2H1V!k!t1g1mH3"t>2x]c x xE{%FY>GG3FQ>Ff?W`4W~HX^$^?H%K4^'Y4G>"G>2P?2h p h'j5q6G2yGG=PG1PG=XH1_H=[P3j@w@{Zp@=|f:GGGGPRPGG_XORSSPWfR\sVisQpxe_Oe__vcIfefggukwq|kkrrivvv;HV ]&N&V&]&]?N'c5c5i5k5n6uGF@oXjQp@o@uIQejjqsu |vRYi|wg`jsuxlrxŁIUWaaa-d:h+m9s+v7s*s8z7ZWlCl^rMxUvD}UqhyBZdvuKT[ZmlxahgmagmzmsåmåsŪsêxćȕƠšȨūŪȸ¶ǵƻı·ĴǾǽĻĝţijƺH*\ȰÇ#JHŋ3jȱǏ CIɓ(S\ɲ˗0cʜI͛O\$$8KS4 1X)u*A7Bʡ=1"؀RߍgoVеmZkWd܃|!Nx7Ӓq"!2cN-d=),0 xK%^s4̳20nb,/Tٵo[;u,>H\0IQLPʹ~Dl=<PxLa*۾8r9/ [lRe:@ӰՏ&8(PM [bBNBi`԰Ή2h.YBVbIA3d : AT`#:&!$T[sr2PQt?cB8$0@Nd [4h)(>"45ϟp.JDj)MAB\=;`}I@|:PЦ[)>O9'AaBgY:!l=9dS[{:Lk37Ȉc IB,\ع[ TGeP'rlܱ[AjsLhg2 BO7h +aOg@ ?:P܏2c5Mף1wI(''} K]8BHUA y u81["3*_DW|1]/OO?7Bh]Zs5ز@BtAԇGs##/"GB gϾCt>+<šQ)zɞB? |@<@A5=28aTSva:`2/H>7 u;+6]yS7Ͻ}c.|v򒺤/WXE:h!2GNK]! Df jx ) @^79ٝ.3D#I՛Mp}Qɾw/}xG '~ xD8{ M;{Wz^"?}[O|w{>OO;ЏO[Ͼ}e%P i"<ova?zict! T!<׀}{0uo!!@=bd  |.L"Ԑ␂0-"B+} Q Ѱ@wtd $X%%/")B(.8+y Po!(Ӏ !؅^xB<~&70~3 pd1`i٠;1:>[5_9i78҆cv#kJOlxA/3 V3E-BF&BC ! g[T P02XO[$`a*RҤW7JJ0NtCR6K%@#ϒ UP˸H%eXzFVWp93jwxf8S/UW!WwWug$,r!!`7ft0ox^J08DV5K[[!_E19ipd0@.1LVKi ja2d@` f4 NL |@$Mfbi,e] c _cf `f Y'<סWW٘gnŦr!5s!gkdQ 6Y6tJl(%?$`|l Ԥ1昼~wt|@HvW0xqxQy aw!UiٛڹGp ɠĝYŧ$ٞ9KZZ1 *Ѡ:*zP-z: P!t$-Z90i:ڣɣ> BZIF'JڤȤN^RZHVZڥǥ^!l,LHLKGWKG\NJRMJ[VGKSIL[GK[JMRMQQM]ZLZTQTSP_XU[KGaIDhNKbOLkMIvRNeSWjQR{X`u_bx`FIcKNmKNcNQlXTsFHsKNyMMqNQvQNsWVv\SzTR`PapVdnh[zf[dahjejkjnpelpmpzpcrststzONRQU[TZX^X^[d[d^j[f]icm`n`nfrizu~h|,+4%>(ABTEXI\|nxw{}w|]TbWbYn]eYi\q^qextyfwqqA>B?\_^aceLCVM_V`X`czjzqls{|}ޟ"ߠ# $-ܪOݫSޮXS.0œÞŤƣȦɫèȫ˱ó˾́ŎɬҶ̽ɷҹѽيߏސ°ۻŴȹ˼Żի׫ӻ޵ߵýֽüƫ²źɼγ˽ H>*\ȐaHŋ3jȱǏ CIɓ(S\ɲ˗()ʔhƙ8+"O)ev,ѣH*]ʴӧPf|4翩~|WL1j>uAFOkυv%!B$ɮtJ˷߿ ,حa+^עhe̜A挙2j?~M^K9rH%2p۸sͻ߷5θM-R0`OK0\HoRNqV,f}Хc>0iҊo}6;eƁQ?w1a,avh($hl0="f!EO$PI>`A=i! @m$@:>y-H!pwE b!$0ooh['+͑'ihPcpa1!cGv sEt((EP案&JW$; BOI% nZ:5?'KJjO25 >%`Oop9#!6dgal>fgygh{ĆrhD>S!a|AHD>p=TG=sB0X;ȣA/Pࣅ=ѣA c0 Pa BҳA b1"#>P]Op{v0c0\Ik>r`cFMOb eov>u歷qGD܄n'7c =[ "N3@3P$,> +P6P*ȂO矇>z8l~63.L>=ZTXDP>c03.ds * 9dQz;۳ @8) @=/rL&1M$mBV7?MOy9(L WBQnn+ԃ84 ᙮f1\] RYx9Qáy#ڬ RHQj5p|@BÀ eE`MaD-O'`Q=:1|c$'IJZRmZA\=6MEִEmSMm\$:yZ$]=WD"[s@=TQGE=LIl a_# 6Ǒ-b:3إCe `G1-P@+aeḟ<ΖB"/Cz4'șR  D1Qd/0qюztBJRx(0lNxR%*TzN9ў{b8||G!P.Xj250_@=-*Lu*F U,O@ ֳrdX颺lK dG1OXI4{d'[RQSnBBB  ʺlgK 8I #V$eN"x2I6\l[+Р4.rN8ҭ̇q!eF~Ճ$P?LW i3L` AĘsGamM0n7{ _ Έd*sg4{ hDlJP k\^@NvqnH bj1]N։B8&`ÐJŕ.s#)3W\QPf 4_roOh.W8ЄC LJ[AMCccC0 htĜ2@:ܐ/0L!=51^,1Msb&6'ǑlؔE&DZfڿi;< %eG^r;ۺ.q]gS;Futw= }{ǀ_+ O8u-x?{v'yO\ݝw)W\ GN(OO \0 2Ϲw󞗼(qc.ANoJϧN[XϺַ{IŮ_|&6ۭ`Nx{t]JO ]O;߸'N!D,MIMMI[ZIMTMSUQUUPYZQVYSX^Y^LHeKErSNdSMyUPcUPnV]nYTeXSk^YfYXjUUu^c{bIMdMRePUiQUjSXwGKtHLtOS{POuQSrZZ}SUx^U{[[aQbvZjq`Yjeneg~mkqtlarintkr~sfvquvqyvxzyx}QKVV]b]fai`eclajkseqeqhvm{tvk},+4%>(ACUFYJ]J]~wnrw}x{ˆZUd[n]i`repatjmaqc|k}z{wA?^abdC@LCVM_V`Xadfhmzjwtus~ߠ#$ $-ݬS߯YSZ.0ȝÜɢ Ƣʪèʫ̬гȰрǍȎ̮ΰξշոӹͳӺӽ׽ؾۋݎİڻòɵ̼ùڮ⒕䶽⸻ٿƮóŸ˾ʽҶ *\ȰÇ#JHŋ3jȱǏ CIɓ(S,`D+cʜI͛8sɳO弧L0fԡ>kycMDp bd`ÊKٳh]{1cȐ#̲M^#Ξ=uV!C"$ #$?6rVB9ᢴn/gXmE#SM @VcQX6ؠ[JI^\%B!BBS1gM>joHOH aο(h>3ؓ`TQHPh=hq"D=F8A=k.~$K?)&& pJm`' UM$>L6Px\&kUC*% 4V'8Z@ ?#0h`Kj?| f_SD<`pewcWwehǔMi|p7.+,覫n@I4?]( x9XC8#씰MZ<L;0!KOO11{!tB񠱞*M LC/;,<ZA6d@%<Ȼ\w ~M^\k{!vq-anD;A׀5TR7O,M @s`2 <"#.o0<9 uɖ;dⶇnw˛6 Z̠7։|d#`FbSr攄yc@\D7ͥB Uyˋ{ $X*hK  tx8ִN;k#lYRyM"!xl4З0_iq(1GE.\8α5[ʃV B"(r +܃D.T- M(`}r%R;Vģ ݱ'MJ-7Yr k9/x piL b!q1i[@A+\/>}aKv;< x@:0+[>gmlg/vgFdVf(9, m-v:Mzη~o@~a$ N;g#cSϸ7jBA [Wr+0˥8Ϲw0 sl[Hn{'PԧN[XϺַ{`Ng4ڱ~aOqUwԏxϻ';B! , ]c x x  I+p8c˻`(dihlp,tmxkpH,ȤreШtJZ,ֹzxL.C\ynx;-~2 tq ~D N.qQMܾyc H*\ȰÇ#JHŋ3jȱǏ CIɓ(S\ɲ˗0cʜI͛8sɳϟ@ JѣH*]ʴӧPJJիXjʵׯ`ÊKٳhӪ]˶۷pʝKݻx˷߿ LÈ+^̸ǐ#KL˘3k̹ϠCMӨS^ͺװc˞M۸sͻ Nȓ+_μУKNسkνËOӫ_Ͼ˟OϿ(h& 6F(Vhfv ($h(,0(4h8<@)DiH&L6PF)TViXf\v`)dihlp)tix|矀*蠄j衈&袌6裐F*餔Vj饘f馜v駠*ꨤjꩨꪬ꫰*무j뭸뮼+F! ,%$2=h1ZHv@{ZPPPPWrN&V@ulrZaa}UummxȜȳǻưǷĺǹ`@p($F"TGgJU)ֺ<ĕ 45|0Bɂu&AT'E!X sBX$ $[GcPC SZdN]TA! ,,2?@0z$@^'j('cg,m9xLyBmsåsȫȽIJǹO bf&I:[™ е۸ 1FL2cM,!& Ѡ&m[0Cuf[NG0{ ! ,4%$2?>3#R1s0z3>$2HFPG={APPPXjqkek|kkqqkrxƂ”ŞŢĮN "f&I:'p,KR AR`#HJ.HiϨr*`4&ǃPXKu!,L%42?3%>3I"R!t0z<P?2v@PPP;XjQqwkxa.m9yAȫȺǹ_@p(4F"TGgjU)ֺ=d$ʕ 4P e+p>"92u.zT rBP & #LG&[ OdZNJXA! ,T%$23%@1Z!m>GGOO&GGGPWfQpxeex&]5i|vY`xRa:g,g,l^~Abztźǽż`@p(<F"TGgzU)ֺ-|`+9qfK9Y`WL[ B'X$% 'X$GczB SP\N[ZJXA!,\=>>2@IZn!t<3>Hp6'c@owwlZZs*y7lD~K\sŨȽĴǼb@p(,F"TGgZU@cyR dDF(86%ͥr )\ {M $ Q%I%! mF#B SPVJKvNXA! ,d%o܁K&,ry8y[I]T!,l=>>2@IZn!t<3>Hp6'c@owwlZZs*y7lD~K\sŨȽĴǼb@p(,F"TGgZU@cyR dDF(86%ͥr )\ {M $ Q%I%! mF#B SPVJKvNXA! ,t22HO4v@5i@owqZrCåsdzķĹD d&I:[’ е{I$3 (y**ɾX-muVٵSݨ!,|2=%=Y4W~_Q0kkq&]@ullr€RRqjéxǽĞDzM "f&I:[ؘ` 2vH"_XBHTDjtGـ550L.@=-W.s]s<-!,#4#?=IZGQG>"&VYfrRyB\htts~åmåsƩxȝȡȥǯâǼY g&I:'`*lUۄ&oӫ`ً,>/c yY=JiàfOg:|6}o0!! ,#4$=a!m3@R!m1ss&]?jIzQ``IRg-KShaamxƐȡȬöǻǷǻĦǩųl@p(lF"TGgڒU)֊E0-LBZ%J@$@+ %WTB -), PB"-SB-L* H,-OT (KZNXA! ,423%@"Z"gHv@{ZPPPPWrN&V@ulrZaa}UummxȜȳǻưǷĺǹa@p(,F"TGgZU)֊ ƑJDJ @at>J!$z"XtBX% %[GdPC SZeN[LA!,4I1m"PPP5oH^m9s8yB}LxUyBsxȯǯǼS f&I:[› еpA"_gPD C! `l" #dLc(/O4!! ,%o܁K&,ry8y[I]T! ,#4#?=IZ3I"R!t0z<P?2v@PPP;XjQqwkxa.m9yAȫȺǹ_@p(4F"TGgjU)ֺ=d$ʕ 4P e+p>"92u.zT rBP & #LG&[ OdZNJXA!,@0z^'j('cg,m9xLyBmsåsȫȽIJǹJ e&I:[— еx)F D.BE(@rp.DI^H :X5mh<Y!! ,%o܁K&,ry8y[I]T! ,2=j p &V5o6u@o@ugrr®nŜȺŞƢǼP e&I:[— еx1ɥK\#CX@AiVJQ!-*ooYf xw; ׳B!,%42?==$3%>3"R!t=I>1y><~FP?2v@PPP;XjQqwkxa.m9yAȫȺǹ`@p(LF"TGgU)ֺEp˕ژ:% D*T>@{T sBP )&LG!)[OT\ZNTA!,%$2@"g>GQG>"&VYfrRyB\htts~åmåsƩxȝȡȥǯâǼY g&I:'`*lUۄ&oӫ`ً,>/c yY=JiàfOg:|6}o0!!,%$2?>3#R1s0z3I"R!t0z<P?2v@PPP;XjQqwkxa.m9yAȫȺǹ_@p(4F"TGgjU)ֺ=d$ʕ 4P e+p>"92u.zT rBP & #LG&[ OdZNJXA!,%o܁K&,ry8y[I]T!,%$23%@1Z!m>GGOO&GGGPWfQpxeex&]5i|vY`xRa:g,g,l^~Abztźǽż`@p(<F"TGgzU)ֺ-|`+9qfK9Y`WL[ B'X$% 'X$GczB SP\N[ZJXA! ,$%4I!m1g1s<|>GGG>"{AE5c5iXd@uw{Rg:m9yByBoagŔȨȶǽc@p($F"TGgJU)ֺd6=. )ZX $B sT $"$[!FPC TJn{D[ZPA! ,,%4==%$2?>3>$2HFPG={APPPXjqkek|kkqqkrxƂ”ŞŢĮN "f&I:'p,KR AR`#HJ.HiϨr*`4&ǃPXKu! ,42=%=Y4W~_Q0kkq&]@ullr€RRqjéxǽĞDzM "f&I:[ؘ` 2vH"_XBHTDjtGـ550L.@=-W.s]s<-!,<=>>2@IZn!t<3>Hp6'c@owwlZZs*y7lD~K\sŨȽĴǼb@p(,F"TGgZU@cyR dDF(86%ͥr )\ {M $ Q%I%! mF#B SPVJKvNXA! ,D%$2?>3#R1s0zH>GG&Ny4WrFO^HGG={AvRpYGG3FQG>2PG1{A5mXj@owRy7s8yByBZoașȫȽc@p(F"TGM !LUL*[ cGd<"Hb1{wmP"e[!y{U"!"a jaB OUNENJ[A! ,d%2?=%@1s0z<PG1GPXPPPVejRZs8s*s8lCToSasåsȩȶǼİd@p(F"T@#KjEPfv5HM4j!bt*Bw#~B}\t i~GmVC ENPLnVA! ,l%o܁K&,ry8y[I]T! ,t=33##HK H4.`0(J&p[LV2A[Hv@{ZPPPPWrN&V@ulrZaa}UummxȜȳǻưǷĺǹ`@p($F"TGgJU)ֺ<ĕ 45|0Bɂu&AT'E!X sBX$ $[GcPC SZdN]TA! ,2=j p &V5o6u@oHo@uPogrr®nŜȺŞƢǼP bf&I:[™ еxQJSd"C`̀a%.%ö 0f@xw; ׳B! ,=F*o܁K&:,ry RA :,ʴ&OxÕ݊)!,%42?3%>3I"R!t0z<P?2v@PPP;XjQqwkxa.m9yAȫȺǹ_@p(4F"TGgjU)ֺ=d$ʕ 4P e+p>"92u.zT rBP & #LG&[ OdZNJXA! ,@0z^'j('cg,m9xLyBmsåsȫȽIJǹJ e&I:[— еx)F D.BE(@rp.DI^H :X5mh<Y!! ,42>3@R!m1ss&]?jIzQ``IRg-KShaamxƐȡȬöǻǷǻĦǩųl@p(lF"TGgڒU)֊E0-LBZ%J@$@+ %WTB -), PB"-SB-L* H,-OT (KZNXA! ,2%o܁K&*,r#U'kVq3wWL!,@Ia1g1m0z >{f"B!t& &uGeP& SP&JX T\ZTA! ,%42?=3%>3"R!t0z<=IP?2v@PPP;XjQqwkxa.m9yAȫȺǹ`@p(<F"TGgzU)ֺ=hʕ 6 KL:<{T rBP ' $LG'[OdZNJXA! ,=>>2@IZn!t<3>Hp6'c@owwlZZs*y7lD~K\sŨȽĴǼb@p(,F"TGgZU@cyR dDF(86%ͥr )\ {M $ Q%I%! mF#B SPVJKvNXA!,$@1s0z3>Hd'PP=v@ ]m,}UyBsåsȡȫȡǽǷĮĵǼT f&I:'P*l 05"`$̃A4} a\+ݯM6dmQ4]%}.M!!$,(%4#82?$2==$2?5%>3$2?;3#>:6@IVi#H"T2H1W!j!t1g1mH$1y:8z]c x xEy%FY>GG3FQ>GQ&Ny4Wr4W|FOWI%L4^'W4G>"G>2P?2j p g's(p6X>s^HGG5PG1PG=YP3w@pIyXpY<|f:GGGGPRPGG_XOPPPPOlPWfPXrXjqQpxe__xg^kekhhtkwq|kkqqkwwq;JV ] i&V&]&]'c?g5j5o6uH^@oWh_pQs@oAvPoQejkqh{suw{ |vYYYj|sdl`hrruxrrxƃIUWZ.aaa-d:h,m9s+u7s*s8y7lCl^}]rCxMyByL|UqjyBZfsuK\S[Zjoalygtms~åmåsxŖ˜ǠšȬŪȹǬƯȵǼİĶĴǻƼĺĞĤóƺH*\ȰÇ#JHŋ3jȱǏ CIɓ(S\ɲ˗0cʜIM#H9r!=]sgF<1(AC@q13H>5A`QWE[WŒ(1&;ģŸ.g#-G xG)8z5ĬXJeu6|h)[@  7a_Pz(Ɵq!}9@ӣ9 /*S/TC5"'^bg㕁/,!*>=\'h)6X %=K3(*ȃ0@0?LWRӕ:W.ejGo P"A<[ae>9?%:|)o D]Ϗa` 1=A˃e8 z4bi0.)bxӓ _u3B[@܇`z+e9ԇ 9'=RO~¼pz ѩTDxtOX?חL"!zEHy7i?&Ht@->" C%C3< [ g c ]A C!8U NAKȿ1qg@Q4n0e! bFP"ax/A CRq}Dq5a+W:M 䏳 * yȵ$=Z$6SPa$8.N;x6=ោh@D'y̲@tYL=0$(KJ8=8M=uƙ 6;#Yn! Be8d?@!4Dg q=_(2} lqS iiA юR,;O}e9b:S>ƃAFU! i%FgJ9xU^ ̔$ OrE9 Ҵft%SqVpիGkzS..M=U.&#R3 nPQC+SB4" <5=w8A2$2*h 3;x ,mR'ئ`T-Ԅ .ĺnB\U,+Y7ږ  :oXЧG_ۢSR*_7qXH@/[h7#' Br@-U`%RfU-P(N +hAj]G@<1 *w}GбTCLNJI0~BGG\#ȅ)<(f K?.TNEH|Z,ALljH_΀n@Ld#7 Ͷ)j|}8zT&X'/g+a}Bo4j8v#\`)(V1G(~U0 dClUDΰ  " @&-{a 6Ymw% `WWdʉPB*{D+_gS =H r!35$`ӶCTkB%%[0UTZAp>ndK2}{` Bl 4^#B GupC03'fSZm [x #OI8QuN_Eo~"^I `0  uH WdO(BCY5%1~k)!W@wp!wϻB>ߐ.؁$ 4 {?=F{>!@N<@ <8?$B0B}JX0$ G-ğ xcS ?Ͽ "x   xX؁ǁ 8$XA!&*(,0 B c.(:)--r9ȃDX(;@;7 hN+8P8T8RXXxZ؅^Mb8Dždxhxfl؆-nr8p8vxQx|z؇! ,)=>>2@IZn!t<3>Hp6'c@owwlZZs*y7lD~K\sŨȽĴǼb@p(,F"TGgZU@cyR dDF(86%ͥr )\ {M $ Q%I%! mF#B SPVJKvNXA! ,)%$2?>3#R1s0z>2@IZn!t<3>Hp6'c@owwlZZs*y7lD~K\sŨȽĴǼb@p(,F"TGgZU@cyR dDF(86%ͥr )\ {M $ Q%I%! mF#B SPVJKvNXA! ,4)%4I!m1g1s<|>GGG>"{AE5c5iXd@uw{Rg:m9yByBoagŔȨȶǽc@p($F"TGgJU)ֺd6=. )ZX $B sT $"$[!FPC TJn{D[ZPA! ,<)%4==%$2?>3>$2HFPG={APPPXjqkek|kkqqkrxƂ”ŞŢĮN "f&I:'p,KR AR`#HJ.HiϨr*`4&ǃPXKu!,D)%o܁K&,ry8y[I]T! ,L)%@jQf{s80)RWJppFkca^"! ,T)#4#?=IZHv@{ZPPPPWrN&V@ulrZaa}UummxȜȳǻưǷĺǹ`@p($F"TGgJU)ֺ<ĕ 45|0Bɂu&AT'E!X sBX$ $[GcPC SZdN]TA!,d)2?@0z$@^'j('cg,m9xLyBmsåsȫȽIJǹO bf&I:[™ е۸ 1FL2cM,!& Ѡ&m[0Cuf[NG0{ ! ,l)%$23%@1Z!m>GGOO&GGGPWfQpxeex&]5i|vY`xRa:g,g,l^~Abztźǽż`@p(<F"TGgzU)ֺ-|`+9qfK9Y`WL[ B'X$% 'X$GczB SP\N[ZJXA! ,t)43%@"Z"gHv@{ZPPPPWrN&V@ulrZaa}UummxȜȳǻưǷĺǹ`@p($F"TGgJU)ֺ<ĕ 45|0Bɂu&AT'E!X sBX$ $[GcPC SZdN]TA!,|)%4$2==%$2?>3>$2HFPG={APPPXjqkek|kkqqkrxƂ”ŞŢĮP f&I:'40Rr)`#IJ.Hi[ 8 $b ,,F Dž!,)%$2?>3#R1s0zGGOO&GGGPWfQpxeex&]5i|vY`xRa:g,g,l^~Abztźǽż`@p(<F"TGgzU)ֺ-|`+9qfK9Y`WL[ B'X$% 'X$GczB SP\N[ZJXA! ,)%42?3%>3I"R!t0z<P?2v@PPP;XjQqwkxa.m9yAȫȺǹ_@p(4F"TGgjU)ֺ=d$ʕ 4P e+p>"92u.zT rBP & #LG&[ OdZNJXA!,)2=j p &V5o6u@o@ugrr®nŜȺŞƢǼP e&I:[— еx1ɥK\#CX@AiVJQ!-*ooYf xw; ׳B! ,)@Ia1g1m0z1yG4G2yPPPP^rEa-g:m9s+xMyBKSihséxȠŤȯǼİǾe@p(DF"TGgU)֊-6!Ir*H("H%aq(d!|ToB#uh (vGeP( SP(JXT\ZTA! ,)%4==%$2?>3>$2HFPG={APPPXjqkek|kkqqkrxƂ”ŞŢĮP "f&I:'p,KR AR`#HJ.HihDmW 0A (,EՍ ! ,)%$2?>3#R1s0zGG3FQFG>2PG1{A5mXj@owRy7s8yByBZoașȫȽe@p(F"TGM LuL,[ „ gd>Xb3B{mP#e["y{U #"#a!j[ B OUNaNJ[A!,)%42?3%>3I"R!t0z<P?2v@PPP;XjQqwkxa.m9yAȫȺǹ_@p(4F"TGgjU)ֺ=d$ʕ 4P e+p>"92u.zT rBP & #LG&[ OdZNJXA! ,)=>>2@IZn!t<3>Hp6'c@owwlZZs*y7lD~K\sŨȽĴǼb@p(,F"TGgZU@cyR dDF(86%ͥr )\ {M $ Q%I%! mF#B SPVJKvNXA!,)%42?3%>3I"R!t0z<P?2v@PPP;XjQqwkxa.m9yAȫȺǹ_@p(4F"TGgjU)ֺ=d$ʕ 4P e+p>"92u.zT rBP & #LG&[ OdZNJXA! ,)$=33#@Ra!m<j5v6N@uRffrIZm+m9rCgsƝȬǺưǷǵǼ\@p( F"TGM!J5|[""dV 6YEmAy!~mL !KUmJaNlNUA!,)XP%4#92?$98?$$5%>3$2?<3#976@IRZe#H"V2H1W!j!t3i1s0zG>1y]c x x>G=FgG|%FY>GG7FT%Fm%Iw&Wy4Ol8YxIYF?I%L4Z&W4G>"G>2^?!P?2g p h'j5p(p6G2y^HGG7PG1PG=XH1[P3j@jQw@pIzXjH jQ0wY/sY;w`.{c:GGGGPPPGGQPFPPQPWfPZsXhsQpxe_Oe__xfKveYgegghukwq|kkrrivwx;KV[&Y&]?O4]'d?d6h5o6uGFH^DoXh_pUu@o@uQejisdyuuw{ |vVYhwvk`jrstxrxāIVWZ.aaa.a-d:i+m9m9s+s7s*s8y7jEl^w[l]rCxLsCyByL|UqhxczB\|eyuKV[ZjulxhtmsåmçtĉȘǠšȭũȹŻƺıŸŻĝħųƺH*\ȰÇ#JHŋ3jȱǏ CIɓ(S\ɲKd9a̙5 ޤ r ҿd=hRM^PW4F-0vt[5QO6V;`0hGc t?\&oyRnu(6Z/Xy犠qGBLs9HQ17Zi^Q4"!&Ĉ8|-E5P)%9+ dH%c`11L=0~0?0.0cO(I~d-".ˆXje+2%|Ӎ:ry'a4f/"8rT)i`h"@3V, !P Del@ӏ;` @ $G}GQTLI #V< Z[ZB>mx W-{>"sϰ\*zUV0d @Kk`)jk|Cj BPɄ@T G2$\g'ӵs Yjda55rdaF,qB6@hN< sx,1ة fC@0'É'QsT>T";'XB~0Fg!шR?;! &0Q b50rYB Ƒ(=xPٙȠ@f>0GN1A$@iBztY,Nf E+e')W)q%@FG(5Pu:J0Ɩʣr @pqZ!.#IF%ti5!/!h@AP4$YA*1 E(H C <rs!'Ȃ OIhZ 2Ђ(Aъoz4# hJB: (ERd`j)I^S8ͩNwӞ@ PJԢHMRԦ5G.r&<# #V/^H )0$Wbf m}BʐD#\ q3\<!{+ь9# +^ gd# l^W"Ig "XVu,dߐ8lV"@jDE]ۍWCpճ@Kq&w!= "B εCcI@nD!$NJ܃wu_ UvÄ ϓJ Y**B@Z @AB D>*h=ȇ;JC)2rW<oQpWb穃W117^~@yABt$-&jb$'$ bܱ/[pAcp6BMX98e# Y#GGͳpNwC: oa> q%mʖhK4$GxO!ְ,OӜ 0T'@VMK#+R71~$9FzQ:e*5ꅲq'4<2S)Qi!!Ve,i ]z;M(y>;I,B~ 7mx&U0-|?ę47sG0]$2c@l҄V'?p±>2>< (@U9pW#tXm#̡WS@G2l$,W WkwXV3H08Ȉ)C"< c@9ggP %0 LjAiA_l'xD7o`nr(A'c8(7o6u!f2b '6F[@ [@eX&6d+R5$ Ȑ:#'7XAʃ{ FGc[HKTt$uTJTB-+tHX0FD)W_x *B$JЕcY7`t^G!GAVЖ!Ǖƌ+'05 E PtNDTUVXPXiᚰYp4IY!N̉0g9Yyؙڹٝ9٩!O;扞_2 5X w @[FnsxiGU\ijBS^v#`[ly )< 1z`zԆ[ [i* $J> 1"*j;J8Z 2ngQ: Z ~IYfrk`ڠ1dp80ʱqqv/YuvJIPIfdcZqW]e}V`Bga9XSnS#)R&xmOFQ2)'K| zn_1֖&9 'ۦ&(o2^Pt2`mePbnJ""͊938RI*z#ss#<|{0U[{h9Ã:" 1l7T˰W2GK3i*$K_8i+ R\8;6$wc=f/!@&vfj 4 ,p$s 8@D%ԌS jkFNCFcfoרDh'$ vBЈE$G 2^ a[0 XCWGATC{9adMt>3ȫBqV9%=IH5J9T1n dKӤKZ0CtDy¿ 쿀G1Qz qP eO!YPQs87 d8 JL<|ER2e3p Pob0S\P6kclnpzq\"5`zGx~ }DŽr[\Ȍl&iȘ=~ 'Y qə<ƚ=webnaV !ʣo=2GW߶0f&'P|i+g88r# s3h(ABTEXI\ylvv|w|]TbWgZk\dXk\m]p^rf}ltb|dwqA>B?\_^aceLCVM_V`X`czlzlxz{ow{w}}ޟ"ߠ# $-ܪOݫSޮXS.0ڞģƤȦȬĨɫʮеƁŎɬҶ̷̽мѽيߏސűۻĴƹȹ˼Żի׫ӻ޵ߵ½ֽ»ƫĴźʽγ H_>~*\ȐaHŋ3jȱǏ CIɓ(S\ɲ˗()ʔhƙ8+"O)ev,ѣH*]ʴӧPf|4g~lGL1jSޱ@y:&Okυt%!B$rJ˷߿ ,حa+^עhe̜A挙2jHAM1?^K9rH%2p۸sͻ 1GO7Ŝ^39T0z{1ӫ_SyinWLϔw8= {a,a 6h'V:!bu|[Ɖ 26b)pNo'1#Aȣ,H6L@i{BF%vGQqaSH1E`)ah5'$cl.cooU'cw3gOyvg|O&j#iV y馜v)ydTϩSR% ĩs$1`wX'0 ;s k,0b< C=w aQʲԒ=`HfRM .]ح̲\:\{C,GÍlp>4=sĸZeml{PP;C= ;@B q@dGVmmf5oZj[Z$QV`h Zq A֋|߀.>b=z{3BS Xsః ߬8@#t@}OMs Nx@%(@: PA.⮃;K<ܓ 4p"00Cq.`:"ߣE p<؞. 7\@`N+A.qmTwP% hE+@У cA,a3™(L W7<k~V6 hѶ)-mr"HL"J݃ 6p;X۪@ ''T Sޠ8A蠂Ѓ N82ZGJpZQ ip;?TEyP=wo` k86>pR'E0>ؑ =$8*yI|#nDn' O=!L"Ny HjZ,ԊnrN}&=@%Q!m >]mob̧E(@K,t=S2eTBHqĶ B"?'PJFfbeDu(|\bSpLbrЛR ֠y*zn+dQrԧZ#]}\η I40P%'E\$D/tmb{D;koG+s"'/Nɞn՛yx _*@f16A0" lJ5c+$>'&Cr:,JFcp#j.(oD1!UޣZ兲ͯ~Xq[jGT\ H{: %jKFPB/{ GLbҡ4E!N](8!SGbEbz2ljKa#Eʂ Rނ4+ 0!xB^MN{N(t בONqHZ;W> x#/AxC_M訑 BWޘQ'Ǚ%NWVիAgDf23?x4C6 %5Q.`f;$I{h#=JVJ G@lk{v ;"v(|MLRv4XG2 385!ЇCt1[ιcAp zy!nu+Ԝc@ tb 9̀-6^ !{x`H'1Y=CCcC h4]1<p/0Ha:֓]0;A;[sO{뎽wSefMv(|VF~ؼ{\o7 Owoֆk)xR?\qXgKԕ>{?Ͻw9@@oeA/f'l-9Ģ}Oî^u{Ե>OϿ㏍Bcv`  H7G{~8~MGݷ~7kܤ "8$X&x(*,؂Wg~zH(k8<.@B8DXFx*؃5xJ؄v=xuN8JVxXZ\؅P8Gbj! ,De%$23%@1Z!m>GGOO&GGGPWfQpxeex&]5i|vY`xRa:g,g,l^~Abztźǽż`@p(<F"TGgzU)ֺ-|`+9qfK9Y`WL[ B'X$% 'X$GczB SP\N[ZJXA!,Le%$2?>3#R1s0z3>$2HFPG={APPPXjqkek|kkqqkrxƂ”ŞŢĮN "f&I:'p,KR AR`#HJ.HiϨr*`4&ǃPXKu! ,\e%$2?>3#R1s0z0N^|۴!F!:s_a2=$X?(\v9 ؂3X #AaJF!0ܐP>8wK` B/_N7 `*,v$8K9 ?$N5 px5 Sƣ!?gH@- x'syg18kT-)$qL=Z+%K?R: +iK\)fz* (y,ѥr%?`1<K?Pׁ;X. FX3<؀:ݘe<C>``4&ꐬ(ibٌ<&rHB8#xePk?0k`鍩ãl7#'#1KVS/=cs⫽ [e41@d0=C Ee`5nt432XֳY¿8O'IxRoC(e4*N?޲k v<O?O@1ϺpҼz3w/^a) !;=oǹ=a\?0Ic4` `2jX   E#rC0=WEw btIర,Mt Vs!bE>Bz\RaXn`[dp hPKXܱ)Ę"GxU( @|0) o A0N0'IR2X\9fy|› 6 pAe>(B&E|3[( 85x(W{-1A{e,gr`z:n@W1hcOmf7Nn6aV#:#dR$0In ȇTLC Kܦ"5w`P03Q :doL-C i]aȓ_FZL"}*5sZ Fc0RiWZ@ar|k\W>K+S?`QBE<1"T~LBms]}w!F׹r{=If q7̝g83Gr'L OX&5"f NbX]i0g L8αwsC豐>2@IZn!t<3>Hp6'c@owwlZZs*y7lD~K\sŨȽĴǼb@p(,F"TGgZU@cyR dDF(86%ͥr )\ {M $ Q%I%! mF#B SPVJKvNXA!,te%o܁K&,ry8y[I]T! ,|e%#?$==%33#=aEyWd'p6GG1|fDNVYpR`f||[mtɶĶǺưäǩDzǹ^@p(,F"TGgZU)v( )P 죤* 7-aĀ %WT$ " [ BaZNzJXA!,e%o܁K&,ry8y[I]T!,e=33##HK H4.`0(J&p[LV2A[Hv@{ZPPPPWrN&V@ulrZaa}UummxȜȳǻưǷĺǹ`@p($F"TGgJU)ֺ<ĕ 45|0Bɂu&AT'E!X sBX$ $[GcPC SZdN]TA! ,e2=j p &V5o6u@oHo@uPogrr®nŜȺŞƢǼP bf&I:[™ еxQJSd"C`̀a%.%ö 0f@xw; ׳B!,e=F*o܁K&:,ry RA :,ʴ&OxÕ݊)! ,y**<58;6'344Ef*Q0u,C$2H$;W3>G:3y] q>G=Fx%FY>GG7FR/QuLF?O)J>(m l-R:u^HGG4QG7ZP3vBtW0w`.{d:KHKMHYGPQTHJSLTSQHSPSMIgLG{SMeRLwSUgSWuVjvhJMgNRe_OgTVrKNtMQ~PNvVUcRcweUhehggukwq|jjuriwww;O i&Z1f5rGFH^QLVUCoYfZd_pTsArdjajirgvituuzj{,+4%>(AEX|vXlj`jwwrvxxrw{ˆUZ.ai2u3YTkEf[w[j]vFzVk`rimave{uzBA?^abdC@LCVM_V`Xdf|[}evuVixjxhyqߠ#$)ݬT§tSZ.0ŢȭзðҀǍ̮ƼշƺƹҾۋݎ¬ıŸڻƺĺڮп⒕㷼ĝĥŸĭŹҶ H*\ȰÇ#JHŋ3jȱǏ CIɓ(S\ɲ˗0cʜIsc~.{HѣrD)PH0^2_իXjʵט7ò4hF-zd.PJ} eTO)V1cĀ)Saf-g/"c{y2K~Y,KОfx`+gAr>67Nl|9ZΜѣ|m unSJ1=2Ë)S`ӫ_Ͼ˟9_z`'[7p}Ǐo μ=K?I B3 rq,0WqG_A3X""'aG)|BрޓdA9XfoB VT\a9f٢C`ngzӃ< ?~|?:2Yߝo9gG촀疔Vj9W5 @ړr>.[9Nd( )3 4wPWfz鮼z.7 3.4XF.[ೋCɗ[2O!=|ICȗ~Ɍo^ &p2 -Ӄ+_Vxp l[_Aɰ}_bqߔ >%0Mp+U؃l-%67ab=qcqtZ\E`ˣ#/1+&Zؐ,gIZ҂ U\HN(D+Zmi#!=:F hEnxq J=CQX};g x'DQZn p 0xЉ ` ۱ꌽk^K w8v͍zƸ )`CkS0 յI֨by@m=tY@4y֥oݤh @H9}izKdd}0rȲmĀz بW$٤m-D=InyȾmM|XM~|pH}W'|m} |ܤJ<|1|>W}|w·^0ŗ[| ~|} ^}-nW،ggʷ|,}J~G}M>; I7Ɣi p XnpS^̧cl^Vmr>t~]xzx|}~>~Wmg>X>-}:}<'G4wd xh뫎h,.봾|(}γ.&|}ؾ iNpXưY}ِOPxّzYp)|L)U9jlI]|= |l ]|d׏=$锟o >ռg٢ỷZ, P]W:_85?./Gg:b-ܜUjJ_/oOs*5Ho$_ށ Z籖z nOj o h*vpt* ;W蚬ך {KĮD,j걐Of_ʧ&K^,Z yȋ  卼4k+D;˵+ße{@^ %Tz?iLvn}[û­9ǣ[ϟPPSWw\zgJJ0A}PcI (AT)È+A)*xf&LI.eSQNZUYnWO#[,Y2i|feIw &iJPP$yk^$[4 k(ޔ d֩-Rbƍ*c(G{fsD֭`&qɕ/gs`Ǟu7- }IjAp0[ڹgrݟ4~,K'dHoC$23Dpw/wo;`BPA 3 #ȣw.A賯 [ ).CtO;E$J&<3H$TrI&Dr:c*@%nJ 3*߱2Q"sP36HL@k6D=15)IN5LSM6 `O5 54%zCcARMD0`TRSLTLICR=rV\suW^{ (`2b" 6+R&Zϩ N֠jed[mj4<h!QKM1Yp 4_x`6]+HJ#+b3Lؘ"7VNE6dSV9[ecyfk֪lyg{g^qh6hVJ貔vibjzkk{lFJT].IJZpWgUZ!)ގ۩ Za_*qenRq%G]d2E[iɕw&+<))s3G/l6d&YK D*zR6&o(9D<|g*y1SM6TGDb9 9)Q߈a&SԾΕ=!Q ?1ͯS ^6<Dmh TbA'JQC81? qȔ7|0I4X%z9+)AL4K"'JyV|"(F01)G`A;'&2 P0Pr[CL(Np)IF@ RLK2uGa&bq@Y {C|RhYŠF/- [5ES$^6xQRr3L^!04kR de0bL7jp4c0|)!A.kx xG0\_#Wh $vg?p1&"3T0RqO0hSkto) E2OY)TԂ4a~4Ȫ5(yA30ULPb2O/ ^8Z4rJ7UIv+ sp|mrB4`u1DRޒ?>iOĐd40A{`ՠVմ7Bb*2%0e}e tt̐hɔ[h6!\cګ&L AjX7[R z "aW&w`R Ś)`Jil]j" ,Jt` AA+D #00};SGFXp8&s*x90).5#EQ|a0}rm3rD%(/ V Cu\?K)@|_Dx{Gq_r ^2Ze]VY,sUrx/ֿ)S/~@$>Lȏc9v&j[ @\.沚 @l@{@ @ @ @ , @@d A,A<1B1t,mJ e fpey 6täN)<ɴ1ҹK1,)Cz 96$Dæ4hGl %Т`8H+C BD%+SZ @$)C$ʰ$L1D-fSNiEE.bEHS|QKFdE$0;b0(\,O#W1%TJA*M$Ey4tKp٨z|*(W$D@?G"(~*_tMDH/5э(BTډz( \ r87d &(G{'IG|zd;;,S .+ sqKĈD.=#4Ƨ3"+PzB֠EE1*Ҧ4 JDzA4RۊL THXxDZT1<ىQʠyR kы.[®ż.K$R"[ (ûXLM$29z, ̴S}>(IՊyAI uUUa \=)bPe0a}V7*VhVj]iVlV4C1VpMJMo}p=WI׾,WtmWVAy[ tvuW~Ux-*D0TB#<63د~mXWC:4#D L% =H5uX E\C JĥD =DMX}֒YJP%Fu;[؟!;? vq xkTIEo*W2BUDb9;d\W|L*̓\ 8YrI\؂i˙(I4#!ȩ:-HҧKT` \C iuFc4{ Ĩx9Gƭۻ]!4ѸSعlkHDT|*=]] &p;ݘ'XX1q֕塸rJ D] ]-_'!'L/M/$uŤHDd*.\2KL˴o?%_}$ɱlb_Jܴ`cL>S5fgҪVĨ8f8tU;f~Qca欸V]@ogs q.,sng(fdgw祁ygzg! ,e%42?3%>3I"R!t0z<P?2v@PPP;XjQqwkxa.m9yAȫȺǹ_@p(4F"TGgjU)ֺ=d$ʕ 4P e+p>"92u.zT rBP & #LG&[ OdZNJXA!,e2=j p &V5o6u@o@ugrr®nŜȺŞƢǼP e&I:[— еx1ɥK\#CX@AiVJQ!-*ooYf xw; ׳B!,e@Ia1g1m0z1yG4G2yPPPP^rEa-g:m9s+xMyBKSihséxȠŤȯǼİǾe@p(DF"TGgU)֊-6!Ir*H("H%aq(d!|ToB#uh (vGeP( SP(JXT\ZTA! ,e%4==%$2?>3>$2HFPG={APPPXjqkek|kkqqkrxƂ”ŞŢĮP "f&I:'p,KR AR`#HJ.HihDmW 0A (,EՍ ! ,e%$2?>3#R1s0zGG3FQFG>2PG1{A5mXj@owRy7s8yByBZoașȫȽe@p(F"TGM LuL,[ „ gd>Xb3B{mP#e["y{U #"#a!j[ B OUNaNJ[A!,e%42?3%>3I"R!t0z<P?2v@PPP;XjQqwkxa.m9yAȫȺǹ_@p(4F"TGgjU)ֺ=d$ʕ 4P e+p>"92u.zT rBP & #LG&[ OdZNJXA! ,e=>>2@IZn!t<3>Hp6'c@owwlZZs*y7lD~K\sŨȽĴǼb@p(,F"TGgZU@cyR dDF(86%ͥr )\ {M $ Q%I%! mF#B SPVJKvNXA!,e%42?3%>3I"R!t0z<P?2v@PPP;XjQqwkxa.m9yAȫȺǹ_@p(4F"TGgjU)ֺ=d$ʕ 4P e+p>"92u.zT rBP & #LG&[ OdZNJXA!, e#4$=a"a!m1s3$2><3#:76@ITe#H"T2H1U!k!t3g1s0zH>2x>G=FgE|%FY>GG7FR%Fm%Jw&Wy4Ol7XwIYI%K4X&W4G>"G>2P?2i p h'j5p(p6G2yX>s^HGG9_H PG1PG=XH1_Q0j@jQw@pIvSjH jQ0wY/qV8w`.{c:GGGGPPPGGRQGPPPUXhQ\u[hsQpxe_Oe__|fDveYhehhhtkwq|kkqqkvxu;KVZ&V&]&]?O4V'd?d5h5n6uGFH^EiXh_pUs@o@vPoQ~ejhtfztvw{|vYXiwellajr|rsxrxņITWZ.aga-d:j+m9s+t7s*s8y7jFl^x[mCl]rCxLsCyB{L{VqjxcyB|\\jugxuKX[ZjujygymsèvċȖǠĠȢȫũȹĽǵƻűĶôǽǽ¶ŻżĞťųƻH*\ȰÇ#JHŋ3jȱǏ CIɓ(Kr"Hʉ+[l8KcXΆ㷢~ :RiDD/bpwjB 3`$ZGbNL gCc/nI!]/B;yXDƎwa5.ܭRcdB*2ԜahZwްmLtP$4%goױgCg9oۛ{iܲр@`.C n|L(PϠ. alIp?T4c΄[xƌPBez%j8P A0?p?M},@'pL;?@G=:| t$ЏAy Yn%e_q %̊ %V&D?$+y dB# ;øOU#duB Τ^ZM:,xMni "&:jvNY啹>#mO 1sa`w @[E @A2l[r-a" ]L:R]B:5 6 RhnC!T.tB@p O#u"UW1mбD3P:-tFlϴdo՞H DTBy[l T[R2-AC rBYAF@ O!q 7z##؅VIV 6AkxQ0 DJS[#;c0M@Ȃ8G`;C"4? wQhbxϙP.% 8 ]-l=Bzc[_8o^K!6n]I7t<ꢴxhr'/9_g@޿wjt;!["cx#V,74P5kY$]oER µp E*{z58B=p&4e`)ODLRЇջ.iJѕ4I\Y3`+}lH-iԷ4ã.̞* nʢϺvGvZғ6 G)$%fKox p/M&h1z}> u=yjҾd*}%Wmu])2DRAyv"Z*U&_!p+]GK$wnJƒ?#&xeC 8Xx H*` F%P p z\]p dAh4 ǠodF `#p;Ǡ/ d!8<"H 2؀CJ5T74{hNR(O#" @5͓lx+"P(ƆT+Z8PegȄa0[x<6U1'lq"|5GxhlDC8 !REa]bJHU555E=lRaa ah{Êh@:*Eђb00CȂHXr-ObT/i`iX+e2gS̗;^؎1Er$f}{P2[C)[h<(Rxa3Bhm4r6Ad884 _R?" 0R6PkA:-)!9%y I;! l.";'Gf5P3Q*R 0<0l0sB(x@Ysq 3BЕ: 銙P'm玀][!E='NxS*TBw=3TC*0{4yu , .I^+9ߐHp)'R'{CCKmn;G7CCÔk)0USYWqɕa9.d9fTB8NTM;;C#wbpţoK;# ({ -Y)v[8Uh@LPTz :?Wk|š3T;949[ʩik8;ù$yI `€SYv '0KY\9ʞ%R)1 kAڀWF2qczGdwFDJU "+J'*Z3K=;13jNh}a@P3GJ\5wX~T 'ȈȐɒ<ɔ\ɖ|ɘɚ쀘ځz 1\AwÆɧ\Bj:*ʚJ ˋڨ>ȬBa=QWƜՅj,Aa7A*t˪o(G jr#L A_5z|h؇3+h8ۯZ&F}J\0.y2 'fc@bQ5B B "mѻ'41 \Ј&䌆+ >m;83 tFefb'D(O aYy8RHd;ZԎKPlMMˏ]{'9M&2r*ikY0p0Kaz sBa<|Бz뷀MRqrK4u[C+ڸ$]In4ֶ|zP<@^9Zɺ^۰˖yc#ܠ;-] h Ԍu;)JW һ I!ݕO.b M(D*GKhA,X}-ۿ ܛ-(i$YDnCIEY.\e0Q0mrG~Jp): z&=lI5 ,4#@^C!R E1{c{{M5\,N<W<;K3 ]&0O"j(p6ǶDzǹ4)RWJ ³7 I1Ob.5M()!,L=>>2@IZn!t<3>Hp6'c@owwlZZs*y7lD~K\sŨȽĴǼb@p(,F"TGgZU@cyR dDF(86%ͥr )\ {M $ Q%I%! mF#B SPVJKvNXA!,T%42?3%>3I"R!t0z<P?2v@PPP;XjQqwkxa.m9yAȫȺǹ_@p(4F"TGgjU)ֺ=d$ʕ 4P e+p>"92u.zT rBP & #LG&[ OdZNJXA! ,\%2?=%@1s0z<PG1GPXPPPVejRZs8s*s8lCToSasåsȩȶǼİd@p(F"T@#KjEPfv5HM4j!bt*Bw#~B}\t i~GmVC ENPLnVA! ,d%4==%$2?>3>$2HFPG={APPPXjqkek|kkqqkrxƂ”ŞŢĮN "f&I:'p,KR AR`#HJ.HiϨr*`4&ǃPXKu!,l%$2?>3#R1s0zGGOO&GGGPWfQpxeex&]5i|vY`xRa:g,g,l^~Abztźǽż`@p(<F"TGgzU)ֺ-|`+9qfK9Y`WL[ B'X$% 'X$GczB SP\N[ZJXA!,<%42?$2==$3%=%>3$2?>3#333>3>>>2@IRZan"R2H2Q1Z"g!m!t1g1m1s0zH>1y><~>GG3FQ%Ey&Wy4W~FOF%O&G4G>"G>2P?2j p j(p6G2yPG1PG=_Q0v@{AjH jQ0vY;|f:GGGGPXPGGPPPPWfP^rXjqQpxe_Oeeeekekekeexkkq|kkqqk;EV&V&]&]'c5c5j5o6uXdXjXj@o@u@u@zQejkq`v`{sww{|vYaklwgllrrxxrxƂRZRZa.a-f:c:g,g,m9s+s8y7s*s8y7fDlClMl^x]xMyB}\qjyA~K\TboKSZiookztaagsåséx‡ŋȔœȔȜȜȠŤȫŪȳŻǯȵǻİ´ǾķżĞƢĮóŻH*\ȰÇ#JHŋ3jȱǏ CI"#Gx'SIwֹ(H睟E;efΝ@*M3uxCp¶T YDhBl4ҳhʐ;F ɼCȢ[_)Blڿ!NjkF,\pv#5&ܻsB$^nsT ߵ,m,3h6 8A7FAPgzc[ c$Nt4ƴ /̻]k0WQVwz s` 2Ze@\Tw_u@%"EPO:E! [5@Vhbm)PqYK #c݀1ӏ;H ]3TV'Ap* ĥ_K`p3N HVVɛ@b@` J+1ԕTD>*Pּ ,"qYgmHJi+_KauURYZ$;}@';Qѱ,n뮈޺ CӼMODÎS$@ QDN%=l \\rFđe< hp9_b05aZmrnܛ.A8d4Ҏ̼cXx > M@s,_)!#A)̀n@A @Ep p/C}MoG.ޑWnyH#w砇.褗n騧꬗JRnIբE$K{Ao TO|Rdy8P*"WISORNDR*tAIlHvE&޼֝͘os mV I s}g?/4 hևCM (; $?񁓀Q Dc:0@ :zhG8I x"񱒖 iHD dr$WUhd! Ih uPޢ:i=Od[SBtaX!9*s7w !(P4u&I /mӘT8k84 /L&T2pLȬ*Q:4YJ8!&LԉZ5J!XRAGU)uh&?2Zm\>@؉TEaj UZFRП Ԡ0.dRC #BFNRTF!`S*Hzԭ.5MS:G./oZkmXYuw|" ůeh"5 0PgXec +i+akŢ̱Y"[Ζ,`50l4blD׵ٌZuT@X6Q4 .YxYw`?.R*+Hu ͚DM;-Olf'JXK}tq551{Wʪ%z;j^,hIK!~J.xɋ^Wp_ `b YIR*출g0N`<X2#pڠ6k,CHF R|K2Z~t5e>:5!,E <! ,ĭʮĭʴòŲ˱ҿ½˽ƴճڶݹҼպ߷¬ôɴ̹û˽ϽѻԾ´Ĺ´źʾƲ˶̾ζϹѽziGFFGiϘoGoһջ׉f9yݏXx sotPW kD:E\JؐO+"J\E- .^UhF=NMieJC3 J4а( :cSz\& IR I4F.ZWp" ճ S ޺Jn+<nN{ |^A| 9DjTh#KZCi(sYΓC@[DWS pL(SdSʳbu;tbC=eB͑n:Aup X{͂k7kp>  tk  Gz;v pCt LwkW%ڌi5F b9f=("4Ѕ!p[C#GaTH* Gj9JedO1_A#8F2@m<EoEizL1!F<͐vтc'?8Q7!\zɖ2 EH"v 0$'v1aX"x: dP' )D?d!Ղs-!n3YH0qg@A#$\ƄB1"D[Q<FzCvA 蕅rAy <Ȅo>^FЃ 2MDtАr_f,S F1#k!T0 =z\!%k1ˆ< `#V2eerga+.!rZkG' p7vmpB rI7EǡGrM7F8AZ"w亡@`7 5Z<hN "Mom,dm%![WYifCV]"d0a痫 !¼z!`G457O@@1Ѐ%z upAFQJv:.v/X#|-}:!% 6HO1dyvy @$> Oo(!i2 "ؑ'.F|B<0DNKF A;tCR9$^F$ȉo!)MxC16.H`$0F 56-V$WsƎoTWqR ,%̋$50! ,Sol83qMlLdfd⥷O-K}2Bpum!Kc8 fsA[<Œ8t e ;t]T:UH:0&Ij<q$ OAt-ٲԟչ ͞0ç˼%鈯"P"V oE.q!bB\DUEPhMZۦoe*@C p@WH Kk `k/4luЁSi-"DKZͬf7z hGKҚvH;textql-2.0.3/util/000077500000000000000000000000001263444277100140245ustar00rootroot00000000000000textql-2.0.3/util/file_helpers.go000066400000000000000000000037171263444277100170240ustar00rootroot00000000000000package util import ( "io/ioutil" "log" "os" "os/user" "path/filepath" "strings" ) func IsPathDir(path string) bool { fp, err := os.Open(CleanPath(path)) if err != nil { log.Fatalln(err) } defer fp.Close() stat, statErr := fp.Stat() if statErr != nil { log.Fatalln(statErr) } return stat.IsDir() } func OpenFileOrStdDev(path string, write bool) *os.File { var fp *os.File var err error if path == "stdin" { fp = os.Stdin err = nil } else if path == "stdout" { fp = os.Stdout err = nil } else { if write { fp, err = os.Create(CleanPath(path)) } else { fp, err = os.Open(CleanPath(path)) } } if err != nil { log.Fatalln(err) } stat, statErr := fp.Stat() if statErr != nil { log.Fatalln(err) } if stat.IsDir() { log.Fatalf("%s: is a directory\n", path) } return fp } func CleanPath(path string) string { result := "" if path == "" { return "" } usr, err := user.Current() if err != nil { log.Fatalln(err) } if len(path) > 1 && path[:2] == "~/" { dir := usr.HomeDir + "/" result = strings.Replace(path, "~/", dir, 1) } else { result = path } absResult, absErr := filepath.Abs(result) if absErr != nil { log.Fatalln(absErr) } cleanResult := filepath.Clean(absResult) return cleanResult } func RewindFile(fileHandle *os.File) { _, rewindErr := fileHandle.Seek(0, 0) if rewindErr != nil { log.Fatalln("Unable to rewind file") } } func IsThereDataOnStdin() bool { stat, statErr := os.Stdin.Stat() if statErr != nil { log.Fatalln(statErr) } if (stat.Mode() & os.ModeCharDevice) == 0 { return true } else { return false } } func AllFilesInDirectory(path string) []string { cleanPath := CleanPath(path) directoryEntries, err := ioutil.ReadDir(cleanPath) result := make([]string, 0) if err != nil { log.Fatalln(err) } for _, entry := range directoryEntries { if !entry.IsDir() { result = append(result, filepath.Join(cleanPath, entry.Name())) } } return result } textql-2.0.3/util/seperator_helpers.go000066400000000000000000000007351263444277100201060ustar00rootroot00000000000000package util import ( "encoding/hex" "log" "strings" "unicode/utf8" ) func DetermineSeparator(delimiter string) rune { var separator rune if delimiter == "tab" { separator = '\t' } else if strings.Index(delimiter, "0x") == 0 { dlm, hexErr := hex.DecodeString(delimiter[2:]) if hexErr != nil { log.Fatalln(hexErr) } separator, _ = utf8.DecodeRuneInString(string(dlm)) } else { separator, _ = utf8.DecodeRuneInString(delimiter) } return separator }