openxlsx/0000755000176200001440000000000014745244712012144 5ustar liggesusersopenxlsx/tests/0000755000176200001440000000000014374150317013301 5ustar liggesusersopenxlsx/tests/testthat/0000755000176200001440000000000014745244712015146 5ustar liggesusersopenxlsx/tests/testthat/test-cloneWorksheet.R0000644000176200001440000000151614374150317021240 0ustar liggesusers context("clone Worksheet") test_that("clone Worksheet with data", { wb <- createWorkbook() addWorksheet(wb, "Sheet 1") writeData(wb, "Sheet 1", 1) cloneWorksheet(wb, "Sheet 2", clonedSheet = "Sheet 1") file_name <- system.file("extdata", "cloneWorksheetExample.xlsx", package = "openxlsx") refwb <- loadWorkbook(file = file_name) expect_equal(sheets(wb), sheets(refwb)) expect_equal(worksheetOrder(wb), worksheetOrder(refwb)) }) test_that("clone empty Worksheet", { wb <- createWorkbook() addWorksheet(wb, "Sheet 1") cloneWorksheet(wb, "Sheet 2", clonedSheet = "Sheet 1") file_name <- system.file("extdata", "cloneEmptyWorksheetExample.xlsx", package = "openxlsx") refwb <- loadWorkbook(file = file_name) expect_equal(sheets(wb), sheets(refwb)) expect_equal(worksheetOrder(wb), worksheetOrder(refwb)) }) openxlsx/tests/testthat/test-loading_workbook.R0000644000176200001440000022556214656134061021610 0ustar liggesusers context("Load Workbook Object") test_that("Loading readTest.xlsx Sheet 1", { fl <- system.file("extdata", "readTest.xlsx", package = "openxlsx") wb <- loadWorkbook(fl) sheet_data <- wb$worksheets[[2]]$sheet_data sheet_v <- sheet_data$v sheet_t <- sheet_data$t sheet_f <- sheet_data$f sheet_row <- sheet_data$rows sheet_col <- sheet_data$cols ## Sheet 2 expected_row <- c( 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 5L, 5L, 5L, 5L, 5L, 5L, 5L, 6L, 6L, 6L, 6L, 6L, 6L, 6L, 7L, 9L, 10L, 10L, 10L, 11L, 12L, 13L, 13L, 13L, 14L, 14L, 14L, 14L, 15L, 15L, 16L, 16L, 16L, 16L, 17L, 17L, 17L, 17L, 18L, 19L, 19L, 20L, 20L, 21L, 22L, 22L, 23L, 23L, 24L, 25L, 25L, 26L, 26L, 26L, 27L, 27L, 28L, 28L, 28L, 29L, 30L, 31L, 31L, 31L, 32L, 33L, 33L, 33L, 34L, 35L ) expect_equal(sheet_row, expected_row) expected_col <- c( 1L, 2L, 3L, 4L, 5L, 6L, 7L, 8L, 9L, 1L, 2L, 3L, 4L, 5L, 6L, 7L, 8L, 9L, 1L, 2L, 3L, 4L, 5L, 6L, 7L, 8L, 9L, 1L, 2L, 3L, 4L, 5L, 6L, 7L, 8L, 9L, 1L, 2L, 3L, 4L, 5L, 6L, 7L, 1L, 2L, 3L, 4L, 5L, 6L, 7L, 1L, 1L, 1L, 2L, 3L, 3L, 1L, 4L, 5L, 6L, 1L, 5L, 6L, 8L, 1L, 2L, 2L, 6L, 7L, 8L, 2L, 3L, 5L, 6L, 2L, 2L, 4L, 2L, 3L, 4L, 5L, 6L, 2L, 5L, 5L, 4L, 6L, 2L, 3L, 7L, 1L, 8L, 2L, 3L, 7L, 7L, 4L, 5L, 6L, 7L, 8L, 7L, 8L, 9L, 8L, 1L ) expect_equal(sheet_col, expected_col) expected_t <- c( 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ) expect_equal(sheet_t, expected_t) expected_v <- c( "0", "1", "2", "3", "4", "5", "6", "7", "8", "1", "2", "3", "4", "5", "6", "7", "8", "9", "1", "2", "3", "4", "5", "6", "7", "8", "9", "1", "2", "3", "4", "5", "6", "7", "8", "8", "2", "2", "3", "4", "4", "5", "6", "1", "1", "2", "2", "2", "3", "3", "1", "2", "2", "34", "3", "4", "2", "2", "2", "3", "2", "6", "3", "3", "2", "2", "2", "2", "2", "2", "2", "2", "2", "2", "2", "2", "2", "2", "2", "2", "2", "2", "2", "2", "2", "2", "2", "2", "2", "2", "2", "2", "2", "2", "2", "2", "2", "2", "2", "2", "2", "2", "2", "2", "2", "35" ) expect_equal(sheet_v, expected_v) ## Sheet 3 expected_col_widths <- structure(c("41.430625", "11.29", "11.0009375", "8.71578125"), .Names = c("3", "4", "5", "6") ) attr(expected_col_widths, "hidden") <- rep("0", 4) expect_equal(wb$colWidths[[3]], expected_col_widths) }) test_that("Loading readTest.xlsx Sheet 1", { fl <- system.file("extdata", "readTest.xlsx", package = "openxlsx") wb <- loadWorkbook(fl) sheet_data <- wb$worksheets[[1]]$sheet_data sheet_v <- sheet_data$v sheet_t <- sheet_data$t sheet_f <- sheet_data$f sheet_row <- sheet_data$rows sheet_col <- sheet_data$cols ## sheet 1 expected_row <- c( 1L, 1L, 1L, 1L, 1L, 1L, 1L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 3L, 3L, 3L, 3L, 3L, 4L, 4L, 4L, 4L, 4L, 4L, 5L, 5L, 5L, 5L, 6L, 6L, 6L, 6L, 6L, 7L, 7L, 7L, 7L, 7L, 8L, 9L, 9L, 9L, 9L, 9L, 10L, 10L, 10L, 10L, 10L, 11L, 11L, 11L ) expect_equal(sheet_row, expected_row) expected_col <- c( 1L, 2L, 4L, 5L, 6L, 7L, 8L, 1L, 2L, 4L, 5L, 6L, 7L, 8L, 1L, 4L, 5L, 6L, 8L, 1L, 2L, 4L, 5L, 6L, 8L, 1L, 2L, 5L, 6L, 1L, 2L, 4L, 5L, 6L, 1L, 2L, 4L, 5L, 6L, 6L, 1L, 2L, 4L, 5L, 6L, 1L, 2L, 4L, 5L, 6L, 2L, 4L, 6L ) expect_equal(sheet_col, expected_col) expected_t <- c( 1, 1, 1, 1, 1, 1, 1, 2, 0, 0, 1, 0, 3, 4, 2, 4, 1, 0, 4, 2, 0, 0, 1, 0, 4, 2, 0, 4, NA, 2, 0, 0, 1, NA, 2, 0, 0, 1, 0, 0, 2, 0, 0, 1, 0, 2, 0, 0, 1, 0, 0, 0, 0 ) expect_equal(sheet_t, expected_t) expected_v <- c( "2096", "2097", "2098", "2099", "2107", "2108", "2109", "1", "1", "1", "2100", "42042", "3209324 This", "#DIV/0!", "1", "#NUM!", "2101", "42041", "#N/A", "1", "2", "1.34", "2102", "42040", "#NUM!", "0", "2", "#NUM!", NA, "0", "3", "1.56", "2103", NA, "0", "1", "1.7", "2104", "42037", "42036", "0", "2", "23", "2105", "42035", "0", "3", "67.3", "2106", "42034", "1", "123", "42033" ) expect_equal(sheet_v, expected_v) expected_f <- c( NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, "\"3209324\" & \" This\"", "1/0", NA, NA, NA, NA, "#N/A", NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA ) expect_equal(sheet_f, expected_f) ## Column Widths expected_col_widths <- structure("10.8603125", .Names = "6") attr(expected_col_widths, "hidden") <- "0" expect_equal(wb$colWidths[[1]], expected_col_widths) expected_shared_strings <- structure(c( "v1", "v2", "v3", "v4", "v5", "v6", "v7", "v8", "v9", "bool", "Date", "value", "word", "N-Z-P-S-Y", "C-G-D-X-H", "B-K-A-O-W", "H-P-G-O-K", "F-P-C-L-T", "A-N-Q-P-V", "Y-E-B-K-O", "V-S-N-T-R", "F-K-Z-U-S", "O-E-Z-T-G", "Q-X-F-L-N", "E-D-Y-Z-N", "W-F-L-C-I", "P-S-W-Y-E", "P-H-N-Q-Z", "S-O-L-W-J", "J-E-F-Q-K", "D-N-O-P-Z", "H-Z-K-S-U", "B-P-A-Y-R", "Z-I-X-J-V", "Y-S-I-M-X", "V-A-C-R-O", "O-V-S-C-Q", "A-K-S-V-W", "B-G-U-S-J", "Z-E-J-V-T", "P-F-C-N-T", "L-T-Z-D-V", "K-Q-Y-N-O", "U-S-Z-O-E", "Y-F-Z-C-P", "P-Y-M-I-K", "D-Y-A-L-T", "W-I-F-A-B", "I-H-S-W-K", "U-D-J-F-K", "B-K-G-J-V", "Y-J-E-N-B", "X-L-V-S-U", "A-I-B-S-P", "U-L-D-O-M", "M-D-V-R-X", "O-Q-K-S-B", "O-R-X-C-W", "O-F-M-A-X", "J-K-V-E-X", "W-B-S-O-A", "R-N-D-G-S", "W-J-K-M-R", "K-I-H-F-M", "U-F-X-P-A", "M-R-C-H-L", "H-A-E-X-J", "C-B-K-L-S", "V-A-I-S-L", "B-L-N-J-G", "J-X-A-D-O", "I-S-W-P-U", "D-R-M-G-C", "M-V-U-D-W", "U-S-A-Z-B", "T-E-N-F-P", "K-E-S-Z-Y", "D-J-O-T-A", "F-U-Y-T-R", "Q-U-N-P-J", "D-C-V-A-X", "S-B-F-E-V", "U-R-P-H-A", "R-C-Z-J-B", "L-B-M-F-I", "D-Y-B-S-Q", "X-Y-D-W-P", "Z-L-I-V-R", "Z-W-T-M-B", "Z-U-S-E-G", "V-I-M-C-O", "E-K-D-R-Z", "Z-F-H-Y-D", "O-I-X-M-A", "F-K-U-G-T", "I-P-X-J-M", "F-N-Z-E-C", "F-A-M-X-E", "R-V-C-O-P", "X-Y-C-V-H", "K-G-T-Y-I", "N-M-E-D-F", "M-K-N-U-W", "L-K-J-A-B", "S-M-T-D-A", "W-D-G-F-U", "X-R-Z-F-E", "H-L-N-G-P", "Z-X-W-M-R", "E-F-G-J-V", "X-I-M-Z-V", "T-A-O-L-Q", "F-T-X-N-B", "O-G-D-P-A", "B-K-Z-V-M", "M-J-O-S-X", "O-D-M-S-G", "W-O-V-A-D", "I-D-W-T-H", "E-C-I-A-L", "P-I-W-U-T", "Y-P-U-L-C", "Q-N-A-B-E", "C-F-X-Y-H", "Q-P-G-I-J", "A-Q-J-W-F", "G-N-R-U-D", "G-L-I-F-V", "Y-R-P-K-X", "V-W-B-G-S", "E-Q-D-N-F", "E-R-U-D-O", "O-E-G-X-L", "D-Q-G-A-K", "U-Z-N-C-V", "O-K-T-W-X", "L-W-G-K-Q", "I-F-O-X-Q", "J-B-V-W-T", "U-H-I-P-Q", "R-W-M-S-U", "F-U-M-W-H", "F-A-Q-U-K", "Q-R-D-K-I", "L-P-K-V-S", "G-I-B-U-Q", "Z-W-L-G-E", "Q-C-I-B-A", "J-N-Y-W-D", "T-Y-G-W-S", "L-M-A-G-K", "O-D-S-T-K", "O-G-L-T-Z", "N-Q-E-B-F", "B-F-W-A-X", "U-G-Q-B-M", "B-O-V-U-A", "R-K-X-H-A", "B-P-Q-T-R", "I-P-Z-L-V", "C-T-L-W-D", "L-Q-D-M-U", "N-P-H-A-G", "F-O-P-G-M", "N-M-Z-W-L", "G-V-K-Z-T", "F-J-T-C-U", "J-P-R-A-C", "Z-X-V-C-W", "B-Z-K-I-Q", "E-N-L-I-Y", "C-D-P-R-B", "I-W-X-P-V", "T-M-P-I-O", "W-Y-D-J-K", "A-O-C-L-B", "S-R-O-Y-C", "A-O-Y-N-W", "P-C-O-D-Y", "E-S-A-L-Y", "E-O-Q-W-C", "U-O-A-X-Q", "W-E-N-Y-D", "A-W-J-Z-X", "P-L-R-U-K", "V-J-E-K-Z", "V-A-M-G-D", "N-C-F-M-G", "H-W-N-K-R", "G-T-A-F-O", "K-F-V-G-S", "N-V-H-G-I", "F-Y-T-S-G", "A-H-O-C-V", "Q-W-J-S-C", "W-G-I-X-E", "D-B-V-A-N", "P-N-L-Y-Q", "O-I-R-Q-U", "D-R-W-E-O", "W-X-U-V-P", "X-Y-D-A-W", "M-J-B-S-G", "K-R-G-N-Y", "O-B-K-L-M", "G-N-Y-X-D", "K-F-A-B-T", "S-Z-R-L-A", "K-Y-W-X-A", "O-Q-X-I-D", "I-L-R-M-X", "S-D-V-U-N", "B-W-F-A-T", "A-W-X-R-J", "D-H-G-X-L", "E-C-V-U-T", "D-W-P-Z-F", "V-O-M-P-R", "P-L-B-X-N", "Z-U-F-D-V", "M-K-Z-S-Y", "X-P-N-T-D", "U-Q-D-T-S", "N-I-X-S-O", "S-C-K-F-D", "N-V-I-R-D", "Z-X-Y-B-P", "U-W-R-D-V", "G-V-I-N-K", "D-Y-N-T-J", "P-K-F-U-W", "U-I-P-D-Q", "R-T-Q-N-Z", "Z-R-D-V-O", "Z-S-F-T-D", "X-K-Z-B-W", "U-F-Z-S-Y", "X-I-T-Z-K", "A-X-H-N-Z", "R-U-Q-W-J", "C-H-P-V-Y", "R-O-A-T-E", "L-F-B-X-A", "Z-X-E-C-G", "R-B-C-Q-W", "A-O-Z-U-B", "R-W-P-S-H", "R-Y-B-A-W", "K-X-U-I-M", "O-X-F-P-A", "U-Y-P-D-M", "A-D-K-R-M", "R-U-D-T-M", "H-Q-Y-K-J", "T-B-H-N-U", "P-I-V-X-W", "S-H-X-C-U", "I-O-Y-G-W", "A-U-Z-J-R", "Q-U-H-M-A", "B-W-M-I-C", "P-X-Z-Y-N", "Y-J-W-N-B", "V-Y-U-S-B", "K-W-S-Q-M", "I-K-X-H-S", "F-L-M-Q-T", "S-Z-O-K-L", "O-P-N-G-E", "P-H-R-Q-T", "M-L-A-D-T", "D-S-X-V-H", "F-C-O-A-B", "P-I-N-O-H", "H-X-Y-I-C", "S-I-R-P-Q", "P-M-F-H-Y", "S-R-O-T-Q", "X-H-O-B-R", "W-P-A-Q-V", "E-L-Q-G-Y", "I-S-T-W-C", "B-M-R-G-Y", "S-J-A-K-Q", "E-P-B-G-J", "R-Y-E-L-D", "A-R-C-N-S", "Y-H-B-M-I", "T-Q-C-K-N", "L-T-Z-V-C", "Q-L-N-J-K", "T-E-J-M-Y", "E-M-F-R-C", "M-A-Y-D-I", "G-M-Y-F-Q", "A-X-B-E-N", "F-Y-E-H-L", "S-Z-R-M-O", "U-V-W-S-I", "D-S-E-L-K", "B-C-X-V-F", "Q-V-L-F-H", "H-Z-I-J-P", "W-U-O-M-D", "A-Y-T-O-X", "Y-C-Z-V-D", "E-L-O-X-Y", "D-U-K-X-A", "S-W-K-N-E", "D-F-T-E-Y", "J-T-B-C-L", "E-T-Z-V-F", "Q-D-U-P-E", "M-Q-X-T-J", "A-M-I-K-P", "J-T-B-E-R", "L-X-J-O-F", "X-B-V-W-P", "Y-N-H-G-Z", "M-F-K-S-P", "K-B-V-Z-L", "T-L-Y-G-A", "N-U-X-C-D", "W-B-O-X-Z", "U-Y-J-F-A", "T-V-J-I-S", "T-L-W-X-Z", "V-K-X-C-N", "G-C-I-S-Z", "C-T-K-S-Z", "F-I-D-N-E", "E-C-M-Y-J", "N-C-Y-S-I", "B-N-I-L-D", "Y-F-T-M-V", "R-A-E-O-M", "M-G-P-W-X", "H-B-C-D-R", "A-J-N-C-H", "R-O-F-D-N", "H-E-R-T-K", "M-U-S-V-A", "L-V-F-A-H", "E-Q-N-Y-C", "T-N-L-X-S", "C-F-X-A-N", "M-X-Y-C-Z", "A-N-F-B-K", "J-Q-R-Z-D", "Q-P-Y-G-N", "D-Y-O-R-J", "K-R-Y-N-O", "A-H-K-J-B", "O-G-J-A-S", "T-N-K-X-S", "V-P-X-Y-F", "R-P-V-G-T", "O-B-F-E-D", "Z-P-I-T-F", "T-S-D-X-G", "Y-J-P-Z-U", "H-W-Y-K-J", "H-Z-C-F-Q", "D-I-B-N-X", "K-B-U-H-E", "H-Y-U-Q-A", "N-Q-G-T-I", "J-B-V-E-G", "M-F-O-E-H", "B-P-K-M-I", "T-Z-B-Q-Y", "X-Y-T-P-O", "E-K-I-W-C", "C-M-R-S-Y", "F-Y-M-W-L", "A-S-E-U-J", "I-P-W-N-G", "V-G-R-E-T", "H-O-W-G-Y", "O-H-B-C-P", "C-Y-D-Q-X", "X-Y-I-Z-U", "R-I-Q-Y-P", "E-M-L-D-Y", "B-G-P-Y-T", "Z-H-X-D-V", "S-B-R-J-F", "O-T-X-P-W", "Y-C-T-M-E", "J-A-D-O-P", "B-W-Q-D-I", "Y-T-X-K-Q", "F-D-P-X-J", "Z-G-Y-O-N", "J-N-Z-Q-P", "W-C-E-I-U", "L-R-K-F-H", "X-I-G-B-O", "M-C-Q-Y-Z", "S-T-W-J-E", "G-O-N-Y-Q", "O-Q-R-Z-B", "X-G-E-C-I", "P-B-D-F-Q", "Q-H-D-I-V", "H-I-J-D-Q", "C-B-S-I-G", "M-A-F-D-B", "G-Z-R-U-K", "N-U-L-Q-R", "C-A-K-M-T", "F-S-R-B-K", "O-D-X-S-W", "H-J-N-P-C", "N-G-Y-L-J", "D-X-K-O-E", "F-E-H-D-L", "E-M-D-P-Z", "Q-K-I-J-V", "D-O-N-M-X", "C-P-N-E-K", "L-H-T-U-P", "M-T-Z-P-H", "B-T-L-Z-G", "Z-V-R-C-I", "J-M-R-D-G", "I-V-L-Q-T", "O-V-X-A-M", "V-L-N-A-T", "M-B-R-U-O", "O-B-Q-F-X", "H-O-E-K-G", "S-H-G-B-D", "N-Z-C-L-D", "M-F-J-H-K", "A-O-D-W-B", "I-X-G-K-W", "B-S-O-K-Q", "X-T-Z-I-D", "N-D-G-B-L", "Z-O-U-I-X", "W-B-A-R-H", "S-G-Q-J-F", "M-B-J-F-A", "M-B-X-A-P", "F-M-S-Y-V", "T-K-B-G-C", "H-V-C-G-X", "V-A-S-I-T", "Z-X-G-U-S", "U-J-Y-M-H", "D-Y-H-X-S", "T-Q-X-I-E", "S-V-K-M-T", "S-Z-P-O-Y", "V-Y-Q-L-F", "A-E-R-V-G", "E-C-M-G-O", "T-B-U-M-V", "M-R-V-A-E", "C-A-R-W-N", "Y-U-D-Z-X", "Y-G-Z-C-Q", "T-X-R-A-D", "S-A-U-R-K", "E-A-D-R-V", "P-R-T-W-F", "A-Z-Y-O-N", "O-P-W-A-I", "H-V-U-R-F", "W-D-G-P-I", "M-Z-Q-C-I", "Y-S-H-W-I", "F-J-C-N-S", "H-C-Z-Y-K", "W-J-K-Z-I", "Q-T-G-C-X", "S-Q-T-O-Y", "Z-G-T-W-X", "X-M-J-R-W", "S-Y-N-F-H", "C-F-V-G-A", "W-R-J-I-B", "I-V-B-A-M", "R-C-D-L-U", "S-T-B-A-N", "F-W-J-M-A", "J-I-R-E-H", "Q-D-O-E-R", "R-B-M-O-J", "B-X-G-V-U", "R-J-L-Y-M", "R-F-A-X-J", "N-I-J-V-Q", "J-O-D-Q-Z", "K-I-F-D-H", "N-H-Q-Z-M", "I-K-R-Z-X", "O-D-U-T-I", "K-G-S-L-Y", "X-D-O-K-A", "C-X-I-P-J", "X-A-Y-V-T", "I-V-T-J-O", "X-D-M-H-U", "M-L-R-Y-J", "N-L-I-R-B", "A-J-Z-O-Q", "G-Y-I-S-E", "N-F-X-Z-T", "U-G-C-F-K", "R-N-W-S-M", "A-O-T-N-U", "W-O-P-G-V", "D-W-E-H-O", "B-D-S-E-Z", "C-L-V-M-I", "Y-N-C-W-B", "C-Q-L-P-W", "X-H-L-B-M", "H-V-D-K-Q", "O-S-C-U-H", "V-I-J-K-A", "D-M-B-I-F", "O-H-N-J-V", "R-L-Q-J-Y", "Q-P-B-S-X", "J-K-V-H-F", "A-T-L-Q-B", "E-D-S-B-G", "K-T-X-J-Q", "W-L-U-B-H", "T-Y-Z-G-V", "G-S-C-X-P", "D-C-M-Z-Y", "V-G-F-D-E", "Q-F-X-O-U", "E-V-L-F-G", "M-T-V-U-Y", "Z-X-S-U-E", "J-I-F-E-R", "C-V-J-R-W", "W-R-V-U-K", "M-A-S-U-Q", "J-K-O-F-I", "I-Y-G-U-Z", "B-Y-V-D-R", "M-G-Q-N-J", "A-F-N-K-M", "R-B-D-Q-P", "H-T-N-U-L", "J-W-E-A-B", "N-M-K-R-O", "H-Q-A-N-E", "U-B-Y-L-Q", "J-E-N-T-Q", "D-N-L-R-E", "K-S-O-L-Z", "Z-D-Y-A-N", "D-Q-B-X-Z", "J-E-F-O-Q", "U-E-Q-T-R", "U-H-F-N-L", "C-T-I-V-X", "V-L-Q-O-K", "G-Q-D-P-V", "D-T-V-G-S", "I-G-H-Z-L", "A-E-I-Y-B", "S-V-N-B-R", "M-P-J-Y-N", "D-T-W-Q-Z", "U-V-F-A-S", "M-B-T-Y-Q", "F-I-C-D-X", "G-X-O-K-J", "J-M-I-E-D", "C-B-S-F-A", "A-Y-O-Z-P", "R-T-H-L-S", "P-X-B-S-O", "B-I-C-P-T", "F-K-H-Z-N", "R-D-Y-T-P", "S-U-P-G-R", "M-K-R-Q-V", "Z-E-O-U-T", "M-W-Y-X-C", "Q-J-U-T-B", "L-H-S-J-U", "P-M-X-R-N", "S-Y-T-G-W", "W-P-N-V-O", "E-U-I-L-M", "V-S-K-J-R", "P-E-T-C-X", "E-V-C-S-Y", "M-S-F-T-Q", "L-D-P-K-T", "D-Z-U-Q-P", "D-H-L-W-N", "V-U-Q-I-A", "L-D-G-H-V", "G-I-U-Q-E", "G-E-D-R-H", "N-T-L-K-H", "J-U-K-F-V", "G-J-Y-K-W", "E-A-I-G-Q", "S-U-H-R-T", "L-S-W-H-C", "P-V-I-Y-O", "E-L-K-X-N", "Y-B-S-T-N", "N-U-V-E-Z", "B-V-K-M-O", "L-V-H-A-K", "M-U-T-J-K", "V-J-T-F-R", "T-Y-E-U-W", "C-D-B-A-L", "K-E-U-S-A", "D-H-R-X-Z", "M-B-Z-G-C", "P-E-T-S-Y", "M-G-O-J-F", "C-Y-E-P-X", "R-V-D-C-N", "S-Y-A-K-Z", "K-S-G-T-D", "D-F-G-U-K", "F-B-P-T-M", "P-G-O-D-W", "U-L-I-R-J", "F-Q-N-X-J", "D-Q-F-V-B", "R-P-E-Z-H", "A-H-X-M-L", "I-H-F-G-W", "V-C-M-H-Y", "V-H-L-Y-F", "H-I-L-P-V", "L-Q-W-K-A", "D-W-J-R-L", "W-E-V-J-L", "F-Z-X-U-H", "K-U-Q-I-R", "S-D-N-E-V", "G-T-E-L-Y", "S-P-E-B-D", "U-N-L-S-O", "Z-G-W-I-X", "M-C-X-S-E", "P-C-S-X-Y", "B-Z-K-R-H", "D-J-W-Y-U", "J-O-Q-F-P", "I-A-V-G-Y", "U-B-V-G-N", "W-H-Q-M-E", "J-R-O-D-F", "W-M-C-O-P", "R-I-F-M-Q", "Q-L-D-W-X", "M-A-Q-P-F", "O-J-T-L-A", "X-S-I-P-G", "G-W-D-Y-F", "T-B-M-N-J", "Q-W-N-Z-C", "M-F-C-O-H", "Z-N-Q-X-P", "Q-G-A-Y-C", "R-F-G-P-E", "X-J-F-R-C", "J-S-Q-E-L", "O-K-P-F-D", "R-J-W-G-T", "Y-P-J-N-D", "N-S-F-Y-T", "M-L-N-H-U", "V-A-H-G-Q", "H-L-W-K-P", "U-P-G-V-O", "V-N-P-I-Y", "A-O-E-F-L", "W-F-Q-J-G", "B-A-L-V-Q", "Y-J-F-V-S", "O-F-E-J-A", "X-O-F-M-B", "B-M-L-H-W", "Z-X-F-T-B", "W-X-E-M-A", "F-J-V-W-L", "P-C-U-R-O", "S-K-F-D-V", "K-F-Z-Q-C", "J-S-R-M-Q", "E-H-L-Q-N", "W-F-M-E-X", "P-R-E-N-A", "D-F-G-N-Y", "I-S-O-V-T", "R-I-C-N-L", "I-T-C-Y-P", "R-W-I-K-X", "P-B-J-X-G", "D-W-F-N-E", "M-G-C-B-K", "E-T-H-F-W", "A-E-L-F-Z", "Z-V-W-S-R", "O-T-L-D-Q", "S-E-M-Z-O", "N-R-Y-A-U", "Y-D-M-A-R", "S-M-P-N-K", "C-T-B-L-Z", "X-A-L-I-V", "B-V-M-G-S", "N-R-K-Q-D", "F-O-L-X-Y", "Y-T-F-A-S", "X-G-O-U-A", "Z-F-I-B-T", "V-H-B-N-W", "V-K-B-W-S", "V-C-T-L-G", "X-N-L-Y-Q", "N-D-L-I-Z", "L-K-G-N-E", "D-L-M-K-Z", "E-I-P-Z-U", "H-X-B-C-D", "B-H-D-C-V", "F-O-L-D-R", "B-Z-J-Y-V", "E-C-R-B-S", "E-X-V-B-S", "P-K-I-W-G", "A-I-F-V-O", "D-F-R-I-E", "X-L-I-N-O", "P-Y-Q-C-S", "C-P-A-X-L", "W-O-U-A-X", "H-M-R-E-B", "K-Y-P-G-A", "O-E-V-D-C", "Z-A-K-M-W", "S-F-M-Z-E", "X-U-I-C-J", "C-V-T-B-N", "Z-Q-Y-V-G", "T-W-G-Q-D", "K-Y-L-R-F", "W-O-S-E-A", "V-T-Q-F-G", "G-V-J-M-U", "P-R-A-N-C", "I-R-A-F-T", "X-Z-U-W-N", "A-G-R-D-Y", "J-U-T-A-Q", "K-Y-T-H-U", "P-Q-L-Z-G", "N-K-Y-X-W", "A-T-M-R-Z", "M-B-P-C-L", "M-Q-K-N-R", "I-W-H-G-R", "I-F-D-Q-A", "V-G-F-C-X", "H-Q-F-D-T", "N-R-T-Q-G", "X-V-P-B-G", "V-H-B-N-X", "G-Q-T-J-Y", "P-F-A-N-H", "C-D-I-W-K", "T-R-J-B-P", "E-P-X-L-S", "O-K-B-L-M", "Z-T-B-R-V", "V-N-Y-Z-U", "E-W-V-F-O", "D-S-A-Z-J", "R-O-W-A-Y", "V-L-K-J-Q", "Q-T-J-S-Z", "M-G-L-Y-D", "G-U-W-I-C", "G-O-D-T-I", "R-L-Z-P-V", "W-G-M-T-I", "S-F-H-Z-J", "Z-L-O-V-N", "G-D-A-U-H", "Y-K-V-R-E", "Y-O-L-R-I", "X-V-Z-I-B", "N-Z-S-D-O", "N-X-Z-J-M", "S-X-A-H-C", "V-T-R-F-H", "K-E-Q-B-J", "V-R-J-U-G", "Q-K-B-P-Z", "Y-I-S-X-K", "U-O-R-Q-J", "Q-T-X-F-D", "P-O-F-B-J", "C-M-K-L-F", "N-W-Y-A-V", "E-H-I-G-U", "L-J-X-A-C", "Q-K-U-D-B", "A-S-R-D-T", "S-Z-E-Y-U", "A-K-R-S-G", "S-F-R-J-Q", "A-Y-J-F-U", "L-I-J-R-H", "K-C-V-Q-F", "H-U-A-T-D", "E-W-L-I-C", "Y-P-R-F-V", "L-M-P-Z-U", "T-Q-U-P-V", "Q-W-T-M-K", "P-D-G-Y-K", "F-I-K-C-P", "I-T-Y-K-L", "H-T-K-I-R", "H-K-B-M-F", "J-P-D-Z-Q", "D-M-K-C-V", "E-K-Y-F-R", "P-L-H-A-J", "R-C-Z-V-T", "I-W-G-A-T", "Y-N-X-K-R", "M-N-E-C-Q", "J-B-W-R-X", "R-M-D-T-F", "R-V-L-Y-G", "M-V-E-Z-Q", "S-H-Q-X-G", "H-P-Y-Q-G", "F-N-K-T-W", "I-B-Z-P-F", "G-P-N-S-F", "B-Y-S-N-A", "P-I-Z-A-S", "X-I-K-B-Y", "B-Q-F-W-M", "Y-E-J-P-M", "V-E-T-G-O", "M-N-L-K-I", "N-D-W-B-V", "F-P-S-M-X", "K-H-Q-M-F", "Z-B-O-I-L", "L-F-D-S-E", "W-Y-P-B-A", "L-P-S-V-U", "D-G-L-J-P", "K-U-F-Y-E", "J-G-R-M-N", "J-U-P-H-O", "O-U-N-M-W", "X-V-J-K-E", "C-W-G-L-K", "D-H-A-O-K", "H-G-C-X-P", "B-C-I-J-D", "N-L-T-D-S", "X-D-C-A-T", "Z-D-U-N-E", "P-W-A-I-L", "N-U-G-H-C", "F-Q-E-V-T", "X-O-M-S-U", "Z-V-S-Q-R", "K-Z-U-D-L", "A-O-Z-C-T", "S-K-U-T-Q", "V-Q-I-B-Z", "A-K-Z-N-Y", "T-G-V-Y-O", "G-K-R-A-J", "Y-J-F-T-U", "E-P-K-G-F", "U-P-X-L-V", "H-C-S-M-I", "K-D-X-W-N", "F-E-P-V-R", "C-P-V-W-L", "I-S-M-E-B", "D-E-L-C-O", "A-D-V-U-W", "D-I-N-M-Z", "O-Z-K-S-N", "F-J-W-L-S", "H-C-V-W-I", "B-A-L-V-Y", "N-K-Z-W-X", "Z-C-X-K-A", "S-X-H-G-Y", "L-G-M-V-Q", "Z-L-G-Y-Q", "J-W-E-A-D", "G-S-A-M-U", "F-M-D-K-O", "B-O-G-R-K", "V-S-U-Q-B", "R-X-O-N-F", "Y-N-M-H-I", "T-J-W-Q-L", "R-W-P-B-H", "D-A-I-P-E", "D-P-Q-T-N", "Y-K-Q-U-X", "A-Y-M-C-R", "M-O-I-L-B", "Y-O-K-J-F", "O-C-J-X-H", "W-J-X-L-Z", "F-P-H-A-L", "M-T-F-U-P", "W-H-F-C-X", "R-C-D-Z-L", "Y-B-A-I-L", "S-I-Y-W-P", "K-D-X-G-Z", "O-W-Q-M-G", "M-T-V-L-G", "F-Z-Y-J-L", "V-L-A-S-N", "I-P-A-S-N", "G-T-Q-D-F", "G-R-L-W-V", "I-R-Z-V-P", "M-L-B-A-I", "D-K-Z-F-M", "M-O-G-X-V", "Y-V-D-Z-W", "M-S-O-G-T", "Z-F-M-U-X", "V-N-Z-P-I", "N-D-F-U-J", "G-O-U-E-S", "Z-C-G-W-B", "O-T-E-N-V", "W-P-H-C-V", "X-R-D-P-G", "Y-C-E-F-T", "V-O-G-K-I", "S-I-W-M-L", "M-H-C-O-A", "Q-C-N-Z-D", "A-N-L-S-T", "X-W-I-L-K", "A-Y-V-S-K", "D-W-F-L-K", "U-Z-I-R-Q", "V-W-B-A-T", "I-U-R-E-W", "N-W-U-Q-O", "F-H-L-N-O", "D-I-T-J-H", "W-K-Q-D-T", "A-O-R-I-U", "M-E-V-A-F", "U-J-M-X-S", "O-E-R-K-H", "A-V-Z-T-D", "C-Z-B-D-L", "D-J-T-Q-G", "A-O-C-I-Z", "J-L-A-Y-C", "P-O-H-E-V", "A-M-Z-I-R", "W-C-R-H-V", "Z-G-I-V-N", "K-M-W-T-Q", "O-I-F-D-N", "X-D-A-V-T", "T-S-M-B-D", "F-C-D-U-Q", "B-H-M-Q-G", "M-K-I-W-B", "R-M-Q-W-P", "N-Z-L-F-G", "I-P-J-B-W", "O-Y-W-U-V", "C-V-Z-B-O", "O-Q-S-F-X", "B-G-F-M-W", "N-X-R-P-S", "L-T-A-H-R", "G-O-E-L-X", "R-I-U-X-Y", "Q-O-Z-F-V", "O-P-J-C-M", "D-W-G-S-L", "T-K-W-L-O", "E-I-O-K-D", "K-E-A-I-S", "M-I-W-F-K", "S-W-G-T-N", "P-L-J-D-A", "O-M-T-J-P", "C-R-Z-L-G", "F-S-D-V-K", "N-J-H-V-I", "D-I-A-F-J", "U-R-T-V-X", "J-N-T-R-S", "K-V-Z-T-Q", "J-L-C-R-M", "Z-A-R-L-E", "Y-L-W-I-S", "B-W-E-N-U", "B-S-W-J-F", "D-G-I-P-S", "D-Q-M-E-R", "K-T-R-A-D", "P-Q-L-E-U", "U-D-W-A-O", "Q-R-P-D-Y", "C-X-V-S-I", "F-E-U-I-K", "H-Z-T-L-P", "P-I-U-B-O", "S-Q-G-W-K", "K-V-S-U-L", "F-N-Q-O-P", "M-Q-F-C-L", "V-X-G-C-A", "N-S-E-C-V", "R-K-J-A-X", "D-L-H-W-S", "Z-C-Y-L-G", "M-D-W-F-U", "R-A-U-S-F", "Y-W-H-V-Q", "B-K-G-J-W", "B-V-H-E-C", "D-J-X-S-H", "W-C-H-Z-Q", "X-B-A-I-U", "D-A-J-C-F", "B-P-U-S-W", "A-D-R-Z-K", "S-H-P-A-Z", "J-O-U-P-S", "W-C-H-P-T", "C-U-Z-O-W", "P-E-H-M-S", "B-W-L-Y-N", "N-S-F-R-Y", "W-R-K-A-N", "G-X-V-D-E", "I-G-D-P-T", "W-N-J-R-L", "P-Q-H-A-V", "U-Q-R-P-W", "I-H-Q-X-U", "W-K-R-M-N", "U-H-Q-B-Y", "X-P-D-V-W", "E-K-F-R-C", "T-E-B-N-L", "I-S-K-Q-H", "Y-Z-V-Q-L", "W-L-U-P-I", "Y-P-F-H-O", "M-C-Y-T-I", "Q-A-V-Z-O", "I-H-U-K-F", "Q-Z-C-W-Y", "U-M-Q-C-R", "U-H-S-M-W", "R-C-M-Y-G", "R-C-J-A-V", "X-B-Z-C-Y", "P-C-O-J-I", "E-C-O-W-R", "E-T-Y-X-F", "Q-M-C-K-S", "H-I-O-J-K", "R-P-N-J-V", "H-Y-P-N-V", "R-J-I-L-S", "N-K-T-Z-O", "H-B-K-A-P", "P-G-J-A-B", "L-S-O-I-Y", "L-U-R-Z-D", "F-I-K-Q-B", "Q-K-X-B-M", "A-C-L-B-I", "J-E-O-D-K", "Y-W-V-G-D", "S-N-T-H-Q", "K-M-D-R-H", "B-U-N-A-T", "A-J-F-O-C", "J-L-V-R-D", "X-A-Q-J-R", "I-V-E-W-Z", "Q-G-K-P-X", "O-H-K-J-D", "N-K-I-J-B", "Y-R-N-G-C", "K-L-E-B-S", "O-P-T-D-G", "O-R-E-J-V", "X-V-B-Z-U", "Y-H-I-O-C", "B-O-Y-M-P", "J-Z-R-Q-P", "A-E-K-M-D", "D-X-L-F-U", "J-X-U-A-Z", "Y-R-G-X-Q", "Y-R-P-W-C", "K-Q-C-Y-L", "K-H-L-V-U", "P-A-N-I-C", "M-D-Y-F-A", "H-V-D-F-U", "Z-D-P-U-J", "O-E-I-Z-Q", "L-Q-A-O-I", "L-V-C-K-N", "E-Z-R-Q-K", "N-T-V-U-D", "U-B-O-H-Z", "F-X-D-H-U", "T-W-R-O-G", "G-A-O-Z-L", "Z-C-B-G-P", "O-I-B-S-N", "Z-R-I-O-Y", "K-B-L-C-Z", "Z-B-T-F-D", "B-H-P-J-C", "A-T-L-N-M", "O-P-W-M-S", "Q-I-L-G-J", "O-D-Q-J-M", "P-B-F-Z-V", "Q-H-J-I-C", "K-V-W-Z-D", "Y-A-R-Z-Q", "M-U-H-Q-N", "O-D-K-J-Z", "I-C-Z-J-H", "E-K-R-G-M", "D-B-G-Y-K", "U-Q-B-C-L", "Y-Q-M-W-L", "A-Z-J-B-S", "C-W-K-O-X", "G-E-V-B-R", "L-N-Q-T-H", "H-E-X-A-J", "U-O-Z-S-B", "P-G-W-K-D", "J-W-L-C-A", "L-C-E-V-Z", "T-K-Y-Q-P", "Z-J-Q-U-V", "V-C-P-K-X", "U-X-A-H-E", "I-J-E-Z-W", "O-M-W-F-S", "N-K-Y-P-M", "C-G-K-L-R", "M-T-V-A-E", "D-V-H-Q-F", "M-N-P-W-L", "G-E-F-T-M", "G-X-D-Q-O", "X-G-W-E-Z", "U-C-B-P-Z", "F-K-Z-W-H", "P-C-D-F-L", "N-V-G-R-T", "I-N-B-J-T", "B-T-A-M-L", "Q-D-N-Y-I", "B-I-K-X-A", "C-U-F-S-K", "W-X-G-P-L", "H-A-P-L-C", "W-T-K-P-F", "G-B-U-T-K", "U-S-Q-Y-Z", "G-C-E-Z-W", "Z-Y-Q-B-M", "D-Y-N-C-E", "E-J-Q-K-I", "P-R-O-B-V", "D-E-A-S-U", "I-A-M-E-L", "M-K-U-F-Y", "L-Q-H-S-O", "Z-F-V-T-P", "V-N-M-R-J", "Q-E-P-K-O", "O-H-J-U-K", "U-Z-Q-O-F", "R-X-K-O-C", "L-R-K-C-G", "V-F-B-S-K", "L-Z-O-H-E", "D-S-Y-V-K", "R-J-V-A-C", "P-L-B-Q-Z", "U-Q-Z-X-Y", "E-P-L-F-T", "Z-F-C-G-B", "W-V-C-A-J", "O-N-C-Y-H", "B-Y-C-D-Z", "E-X-G-H-Z", "Y-H-X-J-I", "O-K-P-J-D", "G-E-K-T-B", "G-A-K-Y-P", "T-V-X-P-H", "W-Y-D-K-V", "Z-W-B-P-Q", "A-J-F-U-P", "V-A-X-E-Z", "F-T-J-E-I", "V-M-L-Z-U", "H-I-B-L-Q", "C-D-V-K-M", "G-Z-F-J-R", "C-T-N-U-H", "W-Y-U-X-M", "T-F-I-W-V", "X-O-P-Y-W", "L-Z-P-B-K", "A-E-T-Q-K", "K-P-C-T-Z", "C-A-H-G-E", "B-W-G-D-V", "A-S-D-B-I", "T-D-G-C-P", "J-B-F-T-K", "V-R-L-U-F", "O-P-Q-X-M", "K-M-T-E-D", "R-B-H-X-G", "L-C-O-Y-B", "R-Z-U-E-I", "K-I-W-O-G", "Z-X-W-F-K", "Y-C-B-S-V", "L-M-R-N-Z", "B-Q-M-Z-K", "P-S-Z-O-T", "Y-A-Z-N-R", "L-O-A-P-J", "O-Z-Y-M-P", "C-P-S-J-Q", "Y-F-Q-A-R", "U-Z-K-B-X", "Q-R-T-H-X", "N-U-E-Q-A", "X-Z-R-J-C", "U-X-E-A-Z", "Y-M-O-A-V", "N-K-D-W-M", "V-Q-E-F-S", "L-U-A-Z-D", "X-S-R-P-E", "I-B-O-Z-L", "J-G-K-H-Z", "T-P-O-Z-S", "L-I-R-G-N", "Y-C-O-Z-A", "H-B-D-Q-R", "C-L-J-E-T", "K-Z-N-U-X", "P-F-S-Z-H", "S-N-D-R-T", "V-R-S-T-G", "N-S-F-U-Y", "D-P-L-C-A", "B-X-V-M-S", "B-M-Z-E-Q", "K-Y-S-P-B", "K-T-V-F-G", "U-Z-B-W-E", "J-X-O-C-Y", "X-C-Q-P-D", "X-L-Y-J-Z", "Y-F-O-N-H", "M-J-B-Z-X", "G-X-R-A-D", "E-I-L-O-A", "B-R-C-I-K", "K-W-F-N-P", "C-Y-R-A-H", "J-H-D-N-C", "P-Y-C-I-D", "P-D-C-U-E", "H-A-I-E-P", "B-N-E-H-S", "C-Y-P-E-F", "K-F-X-B-S", "M-Q-D-I-Z", "V-S-P-K-O", "L-W-M-T-I", "K-N-B-V-D", "A-Z-N-X-G", "U-T-D-A-Y", "Q-Z-D-F-E", "J-Q-I-Y-C", "G-L-E-O-R", "V-J-Z-K-F", "O-W-F-X-H", "H-R-P-X-L", "B-F-X-G-P", "I-C-A-M-R", "P-N-W-Z-L", "R-G-O-H-D", "G-M-B-W-K", "G-D-E-H-P", "Z-K-I-P-N", "K-V-C-E-W", "O-K-N-T-R", "K-B-N-X-M", "E-V-A-X-P", "Q-J-I-Y-C", "I-T-U-J-D", "W-U-T-O-Q", "O-E-H-J-A", "D-K-P-A-I", "D-J-A-F-X", "T-X-D-V-A", "B-W-T-H-V", "H-G-Q-E-U", "B-U-F-Z-Y", "O-S-R-T-D", "F-W-S-I-G", "Z-O-X-C-S", "H-V-K-N-E", "Z-M-L-E-O", "Q-V-T-M-P", "T-N-D-C-S", "L-F-Q-R-Y", "U-F-S-I-O", "S-R-M-B-K", "D-P-W-U-A", "Y-W-A-T-E", "I-W-A-F-J", "V-J-G-A-Q", "Z-S-C-Y-L", "T-C-N-O-S", "J-R-Y-X-Q", "A-F-P-N-J", "R-Y-N-H-M", "S-W-Q-B-V", "N-Q-U-G-K", "T-A-Y-R-Z", "I-L-O-U-V", "W-B-L-F-Q", "N-T-E-W-G", "L-S-I-W-X", "P-A-Z-J-U", "Z-N-F-X-G", "P-B-O-E-N", "D-U-T-C-K", "G-Y-I-K-S", "F-H-W-X-P", "O-B-T-E-Z", "N-K-T-S-X", "E-S-T-N-V", "E-A-J-Q-F", "P-Q-D-X-B", "R-F-J-E-Q", "X-Z-S-M-V", "E-Z-Q-D-X", "M-O-T-U-D", "O-I-X-Z-H", "H-T-V-I-M", "U-E-A-D-W", "Z-D-F-A-X", "E-D-V-P-N", "K-J-R-M-H", "V-A-K-U-D", "S-B-L-A-N", "Q-C-Z-D-P", "U-Z-A-W-C", "V-D-M-G-B", "Z-H-A-I-X", "W-F-H-R-X", "G-E-V-F-K", "H-A-V-L-E", "K-P-E-X-Y", "T-O-Y-R-P", "H-T-F-U-K", "R-V-N-C-X", "K-H-Z-R-A", "Q-P-J-G-N", "T-F-L-K-E", "E-T-O-D-G", "J-K-E-S-N", "K-Q-D-C-B", "Q-R-A-F-D", "J-W-A-Q-I", "N-T-F-G-D", "E-R-I-D-N", "M-G-P-Q-V", "D-P-R-G-N", "N-C-F-T-A", "D-F-Q-X-O", "U-D-K-Q-X", "N-G-M-Q-A", "I-X-F-D-V", "R-T-C-K-I", "S-G-E-R-O", "R-B-J-G-Z", "J-X-G-K-R", "U-K-O-L-C", "X-Q-U-S-B", "B-A-M-V-N", "N-A-V-G-U", "I-Y-U-Z-C", "Y-R-I-M-V", "Y-I-R-P-N", "E-C-Q-A-P", "P-Z-B-O-A", "D-A-R-F-Y", "Q-E-T-L-N", "Z-D-F-Q-C", "X-T-Q-W-D", "D-P-Y-U-J", "S-J-Q-X-V", "E-O-P-W-N", "W-Q-B-O-Y", "Y-Z-W-Q-F", "H-Q-C-X-O", "S-B-W-V-L", "G-R-Y-V-J", "W-F-G-K-S", "F-N-P-D-S", "L-C-Q-T-Z", "V-S-Y-O-B", "L-F-X-U-Q", "G-D-R-M-E", "P-Q-R-Y-G", "N-E-H-L-P", "Z-R-F-M-U", "I-X-C-F-O", "L-E-X-K-O", "G-V-Y-X-F", "O-P-V-A-Z", "P-K-S-L-Y", "Q-R-K-M-D", "A-N-B-J-R", "C-S-G-R-M", "H-C-E-O-D", "E-I-N-F-O", "F-S-P-O-B", "T-S-A-X-B", "R-K-Y-L-M", "F-G-O-C-T", "C-F-H-Y-Z", "M-P-Z-A-V", "N-U-X-B-T", "Q-A-V-N-P", "D-R-V-C-K", "U-P-X-M-F", "S-P-I-T-Z", "O-Z-C-U-Y", "B-G-X-A-D", "Y-U-L-A-W", "O-J-Q-W-G", "V-B-I-F-D", "V-J-Q-K-A", "H-X-W-S-A", "E-D-F-T-I", "H-Q-V-R-L", "M-U-Z-K-Q", "V-Y-U-Q-X", "H-M-I-U-O", "N-Q-P-U-R", "Y-F-I-V-D", "F-A-L-W-M", "G-Q-M-L-B", "X-B-L-P-W", "I-A-R-Q-F", "U-E-J-T-V", "O-B-Q-U-S", "B-P-U-S-M", "N-Z-D-O-V", "A-X-S-T-V", "O-Y-C-F-K", "D-S-I-M-Y", "B-Y-N-G-I", "G-P-U-M-F", "V-B-G-N-W", "C-K-I-S-Y", "U-B-I-R-V", "L-R-M-C-Z", "T-Z-D-U-M", "R-M-F-T-O", "S-V-D-F-Y", "M-F-R-C-J", "G-P-O-X-W", "M-R-X-H-Z", "N-D-J-R-Y", "B-J-W-U-L", "T-E-U-D-J", "M-V-J-R-B", "G-X-Z-U-Y", "L-C-P-M-D", "H-Z-W-E-T", "O-H-Y-C-K", "M-B-Q-N-E", "B-D-E-U-V", "V-P-F-Y-R", "U-M-C-J-L", "P-X-L-Z-A", "D-E-F-X-H", "P-I-Z-C-V", "V-N-O-B-G", "M-T-U-D-P", "I-A-E-O-Q", "V-R-S-L-A", "S-I-Q-N-T", "A-W-T-O-U", "O-T-V-A-Q", "D-R-O-Z-F", "Z-M-F-Q-I", "B-H-E-L-M", "Z-S-D-L-G", "E-B-N-A-Q", "K-Z-O-C-D", "Y-J-M-C-Z", "K-O-F-A-G", "J-U-L-Y-G", "A-F-C-V-D", "S-B-H-T-U", "J-F-V-T-Q", "H-L-Z-K-M", "F-Q-O-K-S", "P-S-U-V-A", "Y-L-E-D-F", "Z-L-U-K-V", "J-N-M-P-F", "G-M-F-Y-Z", "W-P-N-D-U", "J-V-Q-H-P", "Q-B-H-O-R", "U-R-J-K-W", "J-Q-S-O-F", "S-J-N-T-O", "A-S-B-Q-W", "W-X-Q-H-I", "K-R-V-S-X", "Q-S-O-R-W", "R-Q-N-G-Z", "Z-P-A-S-R", "F-N-X-K-D", "S-I-X-A-W", "K-E-J-H-G", "D-N-Z-W-U", "X-Y-T-J-O", "X-I-J-Z-S", "R-V-L-W-C", "X-T-A-M-I", "A-W-B-K-M", "E-C-Q-T-X", "A-B-V-W-X", "K-O-B-W-Q", "V-Y-F-P-C", "H-O-E-X-D", "I-Y-A-H-Q", "J-U-N-D-F", "O-V-N-P-Y", "X-R-O-C-J", "W-I-D-R-M", "Q-C-O-H-N", "L-Z-Y-W-T", "L-H-J-U-I", "X-M-E-R-U", "R-J-K-Z-E", "Q-A-I-P-R", "A-D-L-Q-M", "F-E-M-B-Z", "S-J-N-H-P", "I-Y-C-L-F", "W-Y-O-N-I", "S-E-N-B-H", "K-Z-E-U-V", "D-N-Y-Z-O", "Q-S-B-J-P", "J-N-V-T-B", "U-H-Q-L-S", "U-C-N-Q-L", "A-L-R-Q-F", "J-Y-K-P-L", "W-S-O-M-U", "L-P-S-U-T", "U-V-P-F-M", "C-J-W-Q-N", "A-V-C-P-L", "P-V-N-Y-E", "A-S-M-K-G", "T-U-I-W-H", "E-K-G-P-M", "Z-F-O-H-E", "C-G-I-X-R", "R-F-D-O-X", "C-R-F-M-Q", "H-F-M-N-W", "M-Y-F-I-X", "A-B-U-X-S", "C-F-G-R-D", "M-A-G-L-C", "W-L-Y-F-U", "U-M-C-R-H", "A-C-P-Y-K", "A-E-V-C-P", "M-C-A-J-B", "M-O-Z-G-A", "T-R-E-Y-M", "F-K-E-S-C", "F-Q-B-J-T", "R-Y-D-V-B", "J-M-C-R-W", "L-S-E-Z-R", "J-A-E-P-N", "Y-S-K-B-O", "S-Y-N-G-C", "B-Q-I-W-H", "W-T-U-J-Y", "O-J-W-G-C", "Q-B-G-I-F", "W-E-B-T-N", "M-A-U-R-G", "Q-R-O-X-P", "H-T-Y-N-P", "L-Q-A-G-X", "U-S-D-R-C", "I-J-F-R-Q", "K-T-G-C-E", "M-K-P-C-T", "W-Z-L-N-K", "B-O-G-U-P", "C-F-V-D-P", "G-A-P-R-X", "E-I-Y-K-F", "W-H-G-P-S", "G-J-W-M-B", "R-Y-B-F-L", "T-F-Y-Q-I", "R-L-O-C-F", "I-X-S-G-O", "F-R-M-A-X", "H-B-L-Z-A", "A-L-M-N-C", "F-D-Q-X-L", "Y-K-S-Q-D", "I-Z-B-O-D", "R-M-A-S-C", "J-S-U-H-T", "Q-B-A-P-Z", "I-D-X-Q-O", "F-H-S-W-Z", "P-V-K-R-G", "L-B-A-H-I", "I-P-T-O-Q", "N-F-K-Y-V", "T-U-M-A-G", "S-N-X-W-F", "I-V-Y-O-C", "M-T-Z-G-O", "R-V-B-J-I", "O-X-N-R-V", "W-N-M-F-J", "I-L-R-D-B", "E-G-F-V-Z", "A-P-S-L-Y", "U-A-X-G-O", "Y-D-B-O-M", "T-Q-K-M-D", "L-K-D-X-G", "V-Z-J-A-C", "T-N-I-W-H", "Z-C-S-R-E", "X-P-C-S-J", "O-A-F-C-R", "P-Z-X-W-E", "N-L-Q-W-Z", "M-J-W-D-T", "R-S-Q-G-O", "Z-C-Q-Y-S", "S-J-Y-R-V", "B-H-M-G-A", "Y-K-D-O-N", "Y-F-G-W-J", "I-G-T-C-V", "U-D-T-B-F", "N-Q-X-R-V", "F-O-N-L-V", "R-C-X-F-I", "C-G-H-U-X", "T-I-J-W-G", "U-B-G-O-Y", "G-C-H-Q-V", "S-U-D-A-H", "F-B-S-I-H", "X-R-S-O-B", "M-H-C-E-K", "Y-J-A-T-N", "Z-B-I-D-X", "R-I-U-E-B", "C-S-O-V-X", "S-Y-G-E-M", "N-O-D-H-Z", "U-D-V-T-S", "U-I-H-Q-M", "L-E-S-U-Y", "L-Q-Y-W-P", "J-K-U-C-V", "A-Z-R-S-N", "Z-F-A-Y-L", "C-L-G-R-I", "A-N-Q-C-Z", "A-X-P-R-Z", "W-N-I-M-X", "O-I-L-B-N", "P-U-Q-S-Y", "N-M-W-L-D", "D-V-X-C-R", "P-G-J-I-X", "Y-G-C-T-H", "R-S-V-N-X", "Y-H-O-Q-D", "Q-N-Y-Z-H", "D-Q-J-B-H", "N-X-O-Z-T", "R-Q-B-X-J", "V-S-U-E-K", "H-X-U-C-K", "W-X-E-I-P", "Z-H-J-N-L", "A-R-N-V-H", "R-W-L-O-N", "Q-Z-K-E-G", "M-X-L-W-F", "Z-R-L-K-J", "S-E-G-Y-N", "R-H-K-V-L", "A-V-Q-R-I", "Z-L-J-B-O", "W-S-R-C-V", "S-L-Q-M-R", "T-P-Y-A-K", "W-R-H-U-O", "Z-B-Q-P-J", "I-H-Q-Y-U", "W-K-U-I-S", "V-Y-N-M-W", "O-C-P-J-V", "M-S-Z-W-G", "T-M-E-X-F", "E-W-A-P-N", "Z-S-N-B-K", "G-D-X-R-V", "O-D-J-X-I", "F-V-G-U-L", "R-U-I-Z-M", "G-E-O-L-I", "K-T-B-F-X", "I-M-R-C-T", "B-Q-M-F-C", "E-J-F-W-B", "W-P-N-H-G", "E-F-G-O-J", "P-C-O-S-H", "C-L-A-N-W", "J-N-B-F-K", "S-X-A-E-Z", "G-B-F-T-P", "K-C-G-D-E", "T-I-O-G-U", "B-R-W-Q-Z", "L-C-R-G-N", "F-A-B-V-G", "R-E-Q-W-L", "L-Z-J-H-S", "E-R-L-D-N", "N-D-A-O-F", "V-O-A-C-L", "A-J-S-M-W", "K-B-V-T-O", "J-D-P-K-L", "J-Y-T-D-X", "Z-A-E-K-B", "L-D-R-Z-Q", "O-X-L-B-G", "B-P-V-O-K", "Y-J-D-T-E", "C-F-R-N-W", "U-Y-M-Q-E", "Y-O-V-X-H", "Z-K-D-V-Q", "A-Q-B-P-S", "W-S-O-Z-B", "W-D-U-F-S", "A-H-P-R-E", "W-N-V-J-K", "D-F-U-Y-S", "O-A-G-P-V", "V-J-R-E-P", "I-P-R-E-U", "F-T-C-O-G", "K-F-U-M-H", "V-N-F-X-U", "E-R-C-H-B", "D-U-C-V-X", "Q-Z-U-C-A", "B-G-I-O-T", "L-C-S-Z-M", "S-Y-A-W-P", "K-M-D-G-N", "O-I-D-R-Q", "D-P-J-Q-C", "T-N-I-B-L", "I-G-M-D-A", "O-D-C-L-Y", "B-D-Q-H-F", "H-M-W-P-X", "Z-Q-U-T-L", "K-F-I-O-R", "U-W-L-M-V", "M-A-N-D-Y", "M-E-X-I-K", "Y-S-F-L-V", "Q-Y-O-L-E", "T-K-G-A-O", "I-S-J-V-Q", "J-K-P-B-G", "D-P-F-I-T", "I-Q-B-J-M", "E-Q-H-V-W", "J-D-C-E-Q", "Q-U-V-D-J", "G-D-S-Z-T", "U-M-X-Z-C", "Q-R-Z-G-W", "R-C-L-Q-J", "E-I-O-V-W", "S-E-R-D-Q", "V-J-E-D-T", "K-A-D-N-T", "P-C-R-Z-X", "P-B-I-T-E", "H-W-Q-L-C", "C-J-K-E-G", "R-Y-D-P-Q", "R-X-U-L-K", "R-T-Q-G-Y", "X-H-J-T-D", "U-E-F-I-A", "L-K-O-C-M", "K-Y-H-M-J", "T-M-K-L-Y", "B-D-U-L-P", "D-G-N-F-H", "H-K-O-J-B", "L-A-C-X-D", "L-D-P-Q-J", "A-F-T-U-R", "M-W-H-Q-V", "T-F-J-S-G", "C-T-W-E-N", "K-U-F-A-D", "S-U-Q-T-P", "K-V-Y-B-T", "E-V-Y-O-S", "D-J-E-I-C", "Y-P-M-X-O", "Q-X-W-K-S", "G-W-O-B-C", "A-V-G-B-D", "I-L-V-D-K", "R-V-G-B-W", "Z-S-O-M-G", "B-A-C-X-W", "S-P-X-G-Q", "A-I-S-C-B", "Q-N-S-J-P", "E-T-W-J-B", "R-X-Y-T-E", "X-G-Z-V-S", "C-M-B-A-N", "N-L-W-B-I", "R-H-E-F-X", "E-U-I-Z-C", "N-F-E-Z-V", "T-S-O-J-F", "R-U-B-S-K", "R-A-S-K-G", "O-F-K-R-V", "N-X-J-A-M", "E-A-Z-T-X", "H-G-S-J-M", "H-E-A-J-U", "N-Z-M-Q-O", "B-M-R-E-S", "X-Y-Z-E-U", "W-I-H-R-J", "N-W-M-Y-Q", "I-N-O-T-P", "C-N-T-H-W", "O-C-M-H-L", "V-U-X-N-Q", "M-B-W-A-N", "H-Q-Z-B-L", "H-E-C-O-Y", "A-D-W-F-Y", "C-G-L-M-O", "A-D-U-O-C", "U-O-V-R-H", "Z-B-Y-G-L", "L-X-C-E-P", "L-P-K-M-R", "A-F-T-M-B", "E-Z-B-K-U", "D-F-E-A-Y", "J-A-R-M-O", "T-N-I-U-X", "F-Q-B-D-J", "N-J-M-R-Z", "Z-G-C-A-K", "U-G-V-X-H", "D-I-R-Z-W", "E-O-M-R-T", "L-G-S-F-M", "A-J-C-K-N", "Z-N-D-L-H", "X-Y-S-U-V", "B-Q-I-L-Y", "J-C-D-Z-E", "S-U-K-T-G", "P-W-T-X-U", "D-I-H-B-A", "Y-W-L-U-E", "F-O-A-S-V", "B-H-R-Z-J", "B-V-C-Y-L", "Z-C-J-F-H", "Z-Y-V-A-T", "R-F-D-E-Y", "J-O-L-A-M", "L-B-Z-F-P", "X-P-S-D-R", "O-E-B-R-S", "J-P-B-Q-X", "Q-E-Z-I-U", "Q-N-G-U-P", "W-O-L-I-T", "D-O-B-K-Z", "Z-E-A-V-J", "K-D-E-W-A", "Y-B-M-C-Z", "B-N-Y-J-O", "L-U-F-E-J", "B-V-X-O-F", "V-X-S-A-P", "L-B-Y-D-E", "E-U-D-V-T", "J-P-T-D-A", "Q-C-R-X-V", "I-D-L-A-O", "R-G-Q-V-K", "H-S-W-R-F", "C-E-F-Y-O", "S-P-B-Q-M", "B-J-Z-F-Q", "U-E-C-P-Z", "D-H-O-E-B", "G-J-L-R-S", "L-C-V-T-S", "R-V-W-K-I", "A-M-X-W-P", "W-B-K-A-C", "P-O-I-L-S", "A-K-T-B-Y", "K-B-X-R-T", "S-P-T-Q-W", "D-Z-U-W-B", "L-S-E-H-Q", "G-F-W-U-N", "J-T-E-Z-F", "V-X-N-T-B", "T-K-D-N-R", "L-K-Q-I-T", "N-E-X-D-Q", "Y-B-S-X-A", "S-D-W-J-Q", "U-H-J-W-I", "X-Z-A-J-B", "E-S-D-O-H", "G-O-Y-N-Q", "U-F-I-B-A", "M-H-W-C-O", "F-Z-C-B-M", "S-C-A-O-V", "G-R-H-Q-U", "V-N-J-Q-P", "V-P-Y-M-U", "R-J-O-Q-V", "G-C-U-E-I", "C-A-T-L-R", "O-N-S-G-H", "P-Z-K-U-V", "R-Z-H-D-N", "G-E-X-C-L", "Q-K-E-P-S", "N-K-I-H-A", "A-N-T-R-M", "T-R-G-E-F", "I-B-T-S-D", "G-R-J-L-W", "I-P-Y-K-L", "S-J-M-F-W", "U-H-D-P-T", "A-D-H-M-B", "S-T-Z-P-U", "N-I-G-R-S", "U-V-M-Q-S", "E-F-S-J-R", "F-H-O-S-Z", "O-G-R-E-Z", "B-M-A-N-T", "Z-H-D-L-Q", "Q-R-N-J-K", "C-X-H-Y-L", "I-X-W-G-E", "T-B-M-Q-S", "A-H-Z-V-B", "R-Z-M-X-G", "M-U-K-H-E", "G-B-L-A-W", "R-X-T-S-F", "D-W-Q-M-S", "P-B-F-Q-K", "R-H-I-J-V", "I-F-J-V-C", "U-T-K-R-F", "P-T-L-U-R", "I-L-P-N-F", "D-H-K-X-J", "A-Q-B-M-S", "B-V-L-Q-F", "C-H-K-V-A", "T-Y-C-P-U", "B-U-P-Q-H", "M-H-Q-E-I", "E-Z-S-U-K", "H-W-Q-R-M", "C-I-B-J-K", "E-I-O-S-H", "Y-I-E-X-L", "S-Q-O-L-N", "J-H-L-T-G", "H-M-Q-J-I", "V-I-Z-J-Q", "B-G-R-J-P", "Z-I-W-B-O", "R-V-B-G-N", "B-I-N-J-R", "F-T-W-M-L", "F-S-K-I-J", "S-N-V-G-Z", "X-I-G-L-H", "K-B-X-V-A", "F-M-A-H-N", "Y-Z-I-W-A", "P-M-R-C-Z", "N-U-B-R-A", "wordZ2", "Var1", "Var2", "Var3", "Var4", "a", "b", "c", "e", "f", "h", "i", "Var5", "Var6", "Var7", "col 1", "col 2", "g", "x" ), uniqueCount = 2114L) expect_equal(expected_shared_strings, wb$sharedStrings) }) test_that("Loading multiple pivot tables: loadPivotTables.xlsx works",{ ## loadPivotTables.xlsx is a file with 3 pivot tables and 2 of them have the same reference data (pivotCacheDefinition) fl <- system.file("extdata", "loadPivotTables.xlsx", package = "openxlsx") wb <- loadWorkbook(fl) # Check that wb is correctly loaded sheet_names <- c("iris", "iris_pivot", "penguins", "penguins_pivot1", "penguins_pivot2") expect_equal(wb$sheet_names, sheet_names) # Check number of 'pivotTables' expect_equal(length(wb$pivotTables), 3) # Check number of 'pivotCacheDefinition' expect_equal(length(wb$pivotDefinitions), 2) }) test_that("Load and saving a file with Threaded Comments works", { ## loadThreadComment.xlsx is a simple xlsx file that uses Threaded Comment. fl <- system.file("extdata", "loadThreadComment.xlsx", package = "openxlsx") wb <- loadWorkbook(fl) # Check that wb can be saved without error expect_silent(saveWorkbook(wb, file = temp_xlsx())) }) test_that("Read and save file with inlineStr", { ## loadThreadComment.xlsx is a simple xlsx file that uses Threaded Comment. fl <- system.file("extdata", "inlineStr.xlsx", package = "openxlsx") wb <- loadWorkbook(fl) wb_df <- readWorkbook(wb) df <- data.frame( this = c("is an xlsx file", "written with writexl::write_xlsx"), it = c("cannot be read", "with open.xlsx::read.xlsx"), stringsAsFactors = FALSE) # compare file imported with inlineStr expect_true(all.equal(df, wb_df, compare.attributes = FALSE)) df_read_xlsx <- read.xlsx(fl) df_readWorkbook <- readWorkbook(fl) expect_true(all.equal(df, df_read_xlsx, compare.attributes = FALSE)) expect_true(all.equal(df, df_readWorkbook, compare.attributes = FALSE)) tmp_xlsx <- temp_xlsx() # Check that wb can be saved without error and reimported expect_silent(saveWorkbook(wb, file = tmp_xlsx)) wb_df_re <- readWorkbook(loadWorkbook(tmp_xlsx)) expect_true(all.equal(wb_df, wb_df_re, compare.attributes = FALSE)) }) # tests for getChildlessNode returns the content of every node, single node or not. the name has only historical meaning test_that("read nodes", { # read single node test <- "" that <- openxlsx:::getChildlessNode(test, "xf") expect_equal(test, that) # real life example and ... mixed cellXfs <- "" that <- openxlsx:::getChildlessNode(cellXfs, "xf") test <- c("", "", "", "", "", "", "", "", "" ) expect_equal(test, that) # test test <- "" that <- openxlsx:::getChildlessNode(test, "xf") expect_equal(character(0), that) # test test <- "" that <- openxlsx:::getChildlessNode(test, "b") test <- c( "", "" ) expect_equal(test, that) # test ... test <- "a" that <- openxlsx:::getChildlessNode(test, "b") test <- c("a", "") expect_equal(test, that) # test test <- "" that <- openxlsx:::getChildlessNode(test, "xf") test <- "" expect_equal(test, that) }) test_that("sheet visibility", { # example is rather slow (lots of hidden cols) fl <- system.file("extdata", "ColorTabs3.xlsx", package = "openxlsx") tmp_dir <- temp_xlsx() exp_sheets <- c("Nums", "Chars", "hidden") exp_vis <- c("visible", "visible", "hidden") # after load wb <- loadWorkbook(fl) wb_sheets <- openxlsx::sheets(wb) wb_vis <- openxlsx::sheetVisibility(wb) # save saveWorkbook(wb, tmp_dir) # re-import wb2 <- loadWorkbook(tmp_dir) wb2_sheets <- openxlsx::sheets(wb) wb2_vis <- openxlsx::sheetVisibility(wb) expect_equal(exp_sheets, wb_sheets) expect_equal(exp_vis, wb_vis) expect_equal(exp_sheets, wb2_sheets) expect_equal(exp_vis, wb2_vis) }) test_that("test headerFooter", { # Plain text headers and footers header = c('ODD HEAD LEFT', 'ODD HEAD CENTER', 'ODD HEAD RIGHT') footer = c('ODD FOOT RIGHT', 'ODD FOOT CENTER', 'ODD FOOT RIGHT') evenHeader = c('EVEN HEAD LEFT', 'EVEN HEAD CENTER', 'EVEN HEAD RIGHT') evenFooter = c('EVEN FOOT RIGHT', 'EVEN FOOT CENTER', 'EVEN FOOT RIGHT') firstHeader = c('TOP', 'OF FIRST', 'PAGE') firstFooter = c('BOTTOM', 'OF FIRST', 'PAGE') # Add Sheet 1 wb=createWorkbook() addWorksheet(wb, 'Sheet 1', header = header, footer = footer, evenHeader = evenHeader, evenFooter = evenFooter, firstHeader = firstHeader, firstFooter = firstFooter) # Modified headers and footers to make them Arial 8 header <- paste0('&"Arial"&8', header) footer <- paste0('&"Arial"&8', footer) evenHeader <- paste0('&"Arial"&8', evenHeader) evenFooter <- paste0('&"Arial"&8', evenFooter) firstHeader <- paste0('&"Arial"&8', firstHeader) firstFooter <- paste0('&"Arial"&8', firstFooter) # Add Sheet 2 addWorksheet(wb, 'Sheet 2', header = header, footer = footer, evenHeader = evenHeader, evenFooter = evenFooter, firstHeader = firstHeader, firstFooter = firstFooter) writeData(wb, sheet = 1, 1:400) writeData(wb, sheet = 2, 1:400) tmp1 <- temp_xlsx() # Save workbook saveWorkbook(wb, tmp1, overwrite = TRUE) # Load workbook and save again wb2 <- loadWorkbook(tmp1) expect_equal(wb$worksheets[[1]]$headerFooter, wb2$worksheets[[1]]$headerFooter) expect_equal(wb$worksheets[[2]]$headerFooter, wb2$worksheets[[2]]$headerFooter) }) openxlsx/tests/testthat/test-trying_to_break_openxlsx.R0000644000176200001440000001521114374150317023363 0ustar liggesusers context("Images and Tables.") test_that("Images and Tables - reordering and removing", { if (FALSE) { options("stringsAsFactors" = FALSE) tempFile <- temp_xlsx("break") getPlot <- function(i) { n <- 5000 plot(1:n, rnorm(n)) title(main = sprintf("Plot for Sheet: %s", i)) } df1 <- iris[1:5, 1:4] df2 <- mtcars df3 <- data.frame( "Date" = Sys.Date() - 0:10, "Logical" = sample(c(TRUE, FALSE), 1, replace = TRUE), "Currency" = as.numeric(-5:5) * 100, "Accounting" = as.numeric(-5:5), "hLink" = "https://CRAN.R-project.org/", "Percentage" = seq(-5, 5, length.out = 11), "TinyNumber" = runif(11) / 1E9, stringsAsFactors = FALSE ) df3U <- df3 class(df3$Currency) <- "currency" class(df3$Accounting) <- "accounting" class(df3$hLink) <- "hyperlink" class(df3$Percentage) <- "percentage" class(df3$TinyNumber) <- "scientific" df4 <- data.frame("X" = 1:10000, "Y" = sample(LETTERS, size = 10000, replace = TRUE)) df5 <- USJudgeRatings hs <- createStyle(fontColour = "blue", textRotation = 45) wb <- createWorkbook() expect_equal(names(wb), character(0)) addWorksheet(wb = wb, sheetName = "Sheet 1", gridLines = FALSE, tabColour = "red", zoom = 75) writeDataTable(wb, sheet = 1, x = df1, startCol = 7, startRow = 10, tableName = "Sheet1Table1") expect_equal(names(wb), "Sheet 1") addWorksheet(wb, sheetName = "Sheet 2", tabColour = "purple") writeDataTable(wb, sheet = "Sheet 2", x = df2, startCol = 2, startRow = 2, rowNames = TRUE) expect_equal(names(wb), c("Sheet 1", "Sheet 2")) addWorksheet(wb, sheetName = "Sheet 3", tabColour = "green") writeDataTable(wb, sheet = 3, x = df3, startCol = 1, startRow = 1) expect_equal(names(wb), c("Sheet 1", "Sheet 2", "Sheet 3")) addWorksheet(wb, sheetName = "Sheet 4", tabColour = "orange") writeDataTable(wb, sheet = 4, x = df4) expect_equal(names(wb), c("Sheet 1", "Sheet 2", "Sheet 3", "Sheet 4")) addWorksheet(wb, sheetName = "Sheet 5", tabColour = "yellow") writeData(wb, sheet = "Sheet 5", x = df5, rowNames = TRUE) expect_equal(names(wb), c("Sheet 1", "Sheet 2", "Sheet 3", "Sheet 4", "Sheet 5")) worksheetOrder(wb) <- c(1, 3, 5, 4, 2) expect_equal(names(wb), c("Sheet 1", "Sheet 2", "Sheet 3", "Sheet 4", "Sheet 5")) ## save and load 1 saveWorkbook(wb, file = tempFile, overwrite = TRUE) wb <- loadWorkbook(tempFile) expect_equal(names(wb), c("Sheet 1", "Sheet 3", "Sheet 5", "Sheet 4", "Sheet 2")) expect_equal(df1, read.xlsx(wb, sheet = 1)) expect_equal(df1, read.xlsx(wb, sheet = "Sheet 1")) expect_equal(df1, read.xlsx(tempFile, sheet = 1)) expect_equal(df1, read.xlsx(tempFile, sheet = "Sheet 1")) expect_equal(df3U, read.xlsx(wb, sheet = 2, detectDates = TRUE)) expect_equal(df3U, read.xlsx(wb, sheet = "Sheet 3", detectDates = TRUE)) expect_equal(df3U, read.xlsx(tempFile, sheet = 2, detectDates = TRUE)) expect_equal(df3U, read.xlsx(tempFile, sheet = "Sheet 3", detectDates = TRUE)) expect_equal(df5, read.xlsx(wb, sheet = 3, rowNames = TRUE)) expect_equal(df5, read.xlsx(wb, sheet = "Sheet 5", rowNames = TRUE)) expect_equal(df5, read.xlsx(tempFile, sheet = 3, rowNames = TRUE)) expect_equal(df5, read.xlsx(tempFile, sheet = "Sheet 5", rowNames = TRUE)) expect_equal(df4, read.xlsx(wb, sheet = 4)) expect_equal(df4, read.xlsx(wb, sheet = "Sheet 4")) expect_equal(df4, read.xlsx(tempFile, sheet = 4)) expect_equal(df4, read.xlsx(tempFile, sheet = "Sheet 4")) expect_equal(df2, read.xlsx(wb, sheet = 5, rowNames = TRUE)) expect_equal(df2, read.xlsx(wb, sheet = "Sheet 2", rowNames = TRUE)) expect_equal(df2, read.xlsx(tempFile, sheet = 5, rowNames = TRUE)) expect_equal(df2, read.xlsx(tempFile, sheet = "Sheet 2", rowNames = TRUE)) ## remove "Sheet 5" by index (3) removeWorksheet(wb, sheet = 3) expect_equal(names(wb), c("Sheet 1", "Sheet 3", "Sheet 4", "Sheet 2")) ## remove sheet "Sheet 4" removeWorksheet(wb, sheet = "Sheet 4") expect_equal(names(wb), c("Sheet 1", "Sheet 3", "Sheet 2")) ## Introduce some images getPlot(1) insertPlot(wb = wb, sheet = "Sheet 1", startCol = 14, startRow = 3) getPlot(2) insertPlot(wb = wb, sheet = "Sheet 2", startCol = 14, startRow = 3) getPlot(3) insertPlot(wb = wb, sheet = "Sheet 3", startCol = 14, startRow = 3) expect_true(any(grepl("image1", wb$drawings_rels[[1]]))) expect_true(any(grepl("image3", wb$drawings_rels[[2]]))) expect_true(any(grepl("image2", wb$drawings_rels[[3]]))) ## put back to original order worksheetOrder(wb) <- c(1, 3, 2) saveWorkbook(wb, file = tempFile, overwrite = TRUE) wb <- loadWorkbook(file = tempFile) ## drawings added in order expect_true(any(grepl("image1", wb$drawings_rels[[1]]))) expect_true(any(grepl("image2", wb$drawings_rels[[2]]))) expect_true(any(grepl("image3", wb$drawings_rels[[3]]))) ## Introduce some more images getPlot("1_2") insertPlot(wb = wb, sheet = "Sheet 1", startCol = 14, startRow = 25) getPlot("2_2") insertPlot(wb = wb, sheet = "Sheet 2", startCol = 14, startRow = 25) getPlot("3_2") insertPlot(wb = wb, sheet = "Sheet 3", startCol = 14, startRow = 25) saveWorkbook(wb, file = tempFile, overwrite = TRUE) wb <- loadWorkbook(tempFile) worksheetOrder(wb) <- c(3, 2, 1) saveWorkbook(wb, file = tempFile, overwrite = TRUE) wb <- loadWorkbook(tempFile) hl <- rep("https://google.com.au", 5) names(hl) <- sprintf("Link to google %s", 1:5) class(hl) <- "hyperlink" writeData(wb, "Sheet 1", hl) ## Add in some column widths setColWidths(wb, sheet = 1, cols = 1:50, widths = "auto") worksheetOrder(wb) <- c(3, 2, 1) removeWorksheet(wb, sheet = "Sheet 2") saveWorkbook(wb, file = tempFile, overwrite = TRUE) wb <- loadWorkbook(tempFile) expect_equal(names(wb), c("Sheet 1", "Sheet 3")) expect_equal(df1, read.xlsx(tempFile, sheet = 1, startRow = 10)) expect_equal(df3U, read.xlsx(tempFile, sheet = 2, detectDates = TRUE)) expect_equal(df1, read.xlsx(wb, sheet = 1, startRow = 10)) expect_equal(df3U, read.xlsx(wb, sheet = 2, detectDates = TRUE)) unlink(tempFile, recursive = TRUE, force = TRUE) rm(wb) } }) test_that("setColWidths() should support zero-length cols", { file <- temp_xlsx() on.exit(unlink(file), add = TRUE) wb <- createWorkbook() ws <- addWorksheet(wb, "empty") tbl <- data.frame(A = 1:3) writeData(wb, ws, tbl) setColWidths(wb, ws, integer(0L), widths = 12) saveWorkbook(wb, file) x <- readWorkbook(file) expect_equal(x, tbl) }) openxlsx/tests/testthat/test-wrappers.R0000644000176200001440000001726114745234534020121 0ustar liggesusers context("Test wrappers") test_that("int2col and col2int", { nums <- 2:27 chrs <- c("B", "C", "D", "E", "F", "G", "H", "I", "J", "K", "L", "M", "N", "O", "P", "Q", "R", "S", "T", "U", "V", "W", "X", "Y", "Z", "AA") expect_equal(chrs, int2col(nums)) expect_equal(nums, col2int(chrs)) }) test_that("deleteDataColumn basics", { wb <- createWorkbook() addWorksheet(wb, "tester") for (i in seq(5)) { mat <- data.frame(x = rep(paste0(int2col(i), i), 10)) writeData(wb, sheet = 1, startRow = 1, startCol = i, mat) writeFormula(wb, sheet = 1, startRow = 12, startCol = i, x = sprintf("=COUNTA(%s2:%s11)", int2col(i), int2col(i))) } expect_equal( setdiff(wb$worksheets[[1]]$sheet_data$f, NA), c("=COUNTA(A2:A11)", "=COUNTA(B2:B11)", "=COUNTA(C2:C11)", "=COUNTA(D2:D11)", "=COUNTA(E2:E11)") ) deleteDataColumn(wb, 1, col = 3) expect_equal(read.xlsx(wb), data.frame(x = rep("A1", 10), x = "B2", x = "D4", x = "E5", # no C3! check.names = FALSE)) expect_equal( setdiff(wb$worksheets[[1]]$sheet_data$f, NA), c("=COUNTA(A2:A11)", "=COUNTA(B2:B11)", "=COUNTA(C2:C11)", "=COUNTA(D2:D11)") ) deleteDataColumn(wb, 1, col = 2) expect_equal(read.xlsx(wb), data.frame(x = rep("A1", 10), x = "D4", x = "E5", # no B2! check.names = FALSE)) expect_equal( setdiff(wb$worksheets[[1]]$sheet_data$f, NA), c("=COUNTA(A2:A11)", "=COUNTA(B2:B11)", "=COUNTA(C2:C11)") ) deleteDataColumn(wb, 1, col = 1) expect_equal(read.xlsx(wb), data.frame(x = rep("D4", 10), x = "E5", # no A1! check.names = FALSE)) expect_equal( setdiff(wb$worksheets[[1]]$sheet_data$f, NA), c("=COUNTA(A2:A11)", "=COUNTA(B2:B11)") ) }) test_that("deleteDataColumn with more complicated formulae", { # works with more complicated formula as well! wb <- createWorkbook() addWorksheet(wb, "tester") writeData(wb, sheet = 1, startRow = 1, startCol = 1, x = matrix(c(1, 1), ncol = 1), colNames = FALSE) for (c in 2:10) writeFormula(wb, 1, sprintf("%s1 + 1", int2col(c - 1)), startRow = 1, startCol = c) for (c in 2:10) writeFormula(wb, 1, sprintf("%s1 + %s2", int2col(c), int2col(c - 1)), startRow = 2, startCol = c) for (c in 2:10) writeFormula(wb, 1, sprintf("%s2 + %s2", int2col(c), int2col(c + 1)), startRow = 3, startCol = c) deleteDataColumn(wb, 1, 3) # saveWorkbook(wb, "tester.xlsx") # and inspect by hand: expect lots of #REF! expect_equal(read.xlsx(wb), data.frame(`1` = 1, check.names = FALSE)) expect_equal( wb$worksheets[[1]]$sheet_data$f, c(NA, "A1 + 1", "#REF!1 + 1", "C1 + 1", "D1 + 1", "E1 + 1", "F1 + 1", "G1 + 1", "H1 + 1", NA, "B1 + A2", "C1 + #REF!2", "D1 + C2", "E1 + D2", "F1 + E2", "G1 + F2", "H1 + G2", "I1 + H2", "B2 + #REF!2", "C2 + D2", "D2 + E2", "E2 + F2", "F2 + G2", "G2 + H2", "H2 + I2", "I2 + J2") ) }) test_that("deleteDataColumn with wide data", { wb <- createWorkbook() addWorksheet(wb, "tester") ncols <- 30 nrows <- 100 df <- as.data.frame(matrix(seq(ncols * nrows), ncol = ncols)) colnames(df) <- int2col(seq(ncols)) writeData(wb, sheet = 1, startRow = 1, startCol = 1, x = df, colNames = TRUE) expect_equal(read.xlsx(wb), df) deleteDataColumn(wb, 1, 2) expect_equal(read.xlsx(wb), df[, -2]) deleteDataColumn(wb, 1, 100) expect_equal(read.xlsx(wb), df[, -2]) deleteDataColumn(wb, 1, 55) expect_equal(read.xlsx(wb), df[, -c(2, 56)]) # 56 b.c. one col was already taken out deleteDataColumn(wb, 1, 1) expect_equal(read.xlsx(wb), df[, -c(1, 2, 56)]) # delete all data for (i in seq(ncols - 2)) deleteDataColumn(wb, 1, 1) expect_warning(read.xlsx(wb), "No data found on worksheet") }) test_that("deleteDataColumn with formatting data", { wb <- createWorkbook() addWorksheet(wb, "tester") df <- data.frame(x = 1:10, y = letters[1:10], z = 10:1) writeData(wb, sheet = 1, startRow = 1, startCol = 1, x = df, colNames = TRUE) st <- openxlsx::createStyle(textDecoration = "Bold", fontSize = 20, fontColour = "red") openxlsx::addStyle(wb, 1, style = st, rows = 1, cols = seq(ncol(df))) sst <- wb$styleObjects[[1]] sst$rows <- c(1, 1) sst$cols <- c(1, 2) deleteDataColumn(wb, 1, 2) expect_length(wb$styleObjects, 1) expect_equal(wb$styleObjects[[1]], sst) }) test_that("deleteDataColumn with shared strings does not crash or change inputs", { df <- data.frame("Col 1" = "Row 2 Col 1", "Col 2" = "Row 2 Col 2", "Col 3" = "Row 2 Col 3", check.names = FALSE) wb <- createWorkbook() addWorksheet(wb, "tester") writeData(wb, sheet = 1, startRow = 1, startCol = 1, x = df, colNames = TRUE) deleteDataColumn(wb, sheet = 1, col = 2) expect_equal( wb$sharedStrings, structure( list( "Col 1", "Col 3", "Row 2 Col 1", "Row 2 Col 3" ), uniqueCount = 4L ) ) expect_equal( read.xlsx(wb), data.frame( "Col 1" = "Row 2 Col 1", "Col 3" = "Row 2 Col 3" ) ) }) test_that("deleteDataColumn with shared strings on other sheets", { df <- data.frame("ABC" = "I am a shared string with sheet 2!") df2 <- data.frame("AB" = "I am a shared string with sheet 2!") wb <- createWorkbook() addWorksheet(wb, "tester") writeData(wb, sheet = 1, startRow = 1, startCol = 1, x = df, colNames = TRUE) simplify <- function(sd) data.frame(rows = sd$rows, cols = sd$cols, t = sd$t, v = sd$v) expect_equal( simplify(wb$worksheets[[1]]$sheet_data), data.frame(rows = c(1, 2), cols = 1, t = 1, v = c("0", "1")) ) expect_equal( wb$sharedStrings, structure( list( "ABC", "I am a shared string with sheet 2!" ), uniqueCount = 2L ) ) addWorksheet(wb, "tester2") writeData(wb, sheet = 2, startRow = 1, startCol = 1, x = df2, colNames = TRUE) expect_equal( simplify(wb$worksheets[[2]]$sheet_data), data.frame(rows = c(1, 2), cols = 1, t = 1, v = c("2", "1")) ) expect_equal( wb$sharedStrings, structure( list( "ABC", "I am a shared string with sheet 2!", "AB" ), uniqueCount = 3L ) ) # deleting from sheet 1 does not delete the string from sheet 2! deleteDataColumn(wb, sheet = 1, col = 1) expect_equal( simplify(wb$worksheets[[1]]$sheet_data), data.frame(rows = numeric(0), cols = numeric(0), t = numeric(0), v = character(0)) ) # note on sheet 2, the indices v to the shared strings have to change as well! expect_equal( simplify(wb$worksheets[[2]]$sheet_data), data.frame(rows = c(1, 2), cols = 1, t = 1, v = c("1", "0")) ) expect_equal( wb$sharedStrings, structure( list( "I am a shared string with sheet 2!", "AB" ), uniqueCount = 2L ) ) expect_equal( read.xlsx(wb, sheet = 2), data.frame(AB = "I am a shared string with sheet 2!") ) }) openxlsx/tests/testthat/test-write_data_to_sheetData_NAs.R0000644000176200001440000000641114374150317023613 0ustar liggesusers context("Writing NA to sheet_data") test_that("Writing to sheet_data with keepNA = FALSE", { a <- head(iris) a[2, 2] <- NA a[3, 5] <- NA a[5, 1] <- NA a[5, 5] <- NA wb <- createWorkbook() addWorksheet(wb, "Sheet 1") writeData(wb, 1, a, keepNA = FALSE) sheet_data <- wb$worksheets[[1]]$sheet_data sheet_v <- sheet_data$v sheet_t <- sheet_data$t sheet_f <- sheet_data$f sheet_row <- sheet_data$rows sheet_col <- sheet_data$cols sheet_v <- as.numeric(sheet_v) sheet_v <- sheet_v[!is.na(sheet_v)] sheet_t <- sheet_t[!is.na(sheet_t)] sheet_f <- sheet_f[!is.na(sheet_f)] sheet_row <- sheet_row[!is.na(sheet_row)] sheet_col <- sheet_col[!is.na(sheet_col)] n_values <- prod(dim(a)) + ncol(a) expect_length(sheet_row, n_values) expect_length(sheet_col, n_values) expect_length(sheet_t, n_values - 4) expect_length(sheet_v, n_values - 4) expect_length(sheet_f, 0) ## rows/cols expect_equal(sheet_row, rep(1:7, each = 5)) expect_equal(sheet_col, rep(1:5, times = 7)) ## header types expect_equal(sheet_t[1:5], rep(1, ncol(a))) ## data.frame t & v expected_t <- c( "n", "n", "n", "n", "s", "n", "n", "n", "s", "n", "n", "n", "n", "n", "n", "n", "n", "s", "n", "n", "n", "n", "n", "n", "n", "s", NA, NA, NA, NA ) expected_t <- map_cell_types_to_integer(t = expected_t) expect_equal(sheet_t[6:n_values], expected_t) expect_equal(sheet_v[1:5], 0:4) expected_v <- c( 5.1, 3.5, 1.4, 0.2, 5, 4.9, 1.4, 0.2, 5, 4.7, 3.2, 1.3, 0.2, 4.6, 3.1, 1.5, 0.2, 5, 3.6, 1.4, 0.2, 5.4, 3.9, 1.7, 0.4, 5, NA, NA, NA, NA ) expect_equal(sheet_v[6:n_values], expected_v) }) test_that("Writing to sheet_data with keepNA = TRUE and na.string = '*'", { a <- head(iris) a[2, 2] <- NA a[3, 5] <- NA a[5, 1] <- NA a[5, 5] <- NA wb <- createWorkbook() addWorksheet(wb, "Sheet 1") writeData(wb, 1, a, keepNA = TRUE, na.string = "*") sheet_data <- wb$worksheets[[1]]$sheet_data sheet_v <- sheet_data$v sheet_t <- sheet_data$t sheet_f <- sheet_data$f sheet_row <- sheet_data$rows sheet_col <- sheet_data$cols sheet_v <- as.numeric(sheet_v) sheet_v <- sheet_v[!is.na(sheet_v)] sheet_t <- sheet_t[!is.na(sheet_t)] sheet_f <- sheet_f[!is.na(sheet_f)] sheet_row <- sheet_row[!is.na(sheet_row)] sheet_col <- sheet_col[!is.na(sheet_col)] n_values <- prod(dim(a)) + ncol(a) expect_length(sheet_row, n_values) expect_length(sheet_col, n_values) expect_length(sheet_t, n_values) expect_length(sheet_v, n_values) expect_length(sheet_f, 0) ## rows/cols expect_equal(sheet_row, rep(1:7, each = 5)) expect_equal(sheet_col, rep(1:5, times = 7)) ## header types expect_equal(sheet_t[1:5], rep(1, ncol(a))) ## data.frame t & v expected_t <- c( "n", "n", "n", "n", "s", "n", "s", "n", "n", "s", "n", "n", "n", "n", "s", "n", "n", "n", "n", "s", "s", "n", "n", "n", "s", "n", "n", "n", "n", "s" ) expected_t <- map_cell_types_to_integer(t = expected_t) expect_equal(sheet_t[6:n_values], expected_t) expect_equal(sheet_v[1:5], 0:4) expected_v <- c( 5.1, 3.5, 1.4, 0.2, 5, 4.9, 6, 1.4, 0.2, 5, 4.7, 3.2, 1.3, 0.2, 6, 4.6, 3.1, 1.5, 0.2, 5, 6, 3.6, 1.4, 0.2, 6, 5.4, 3.9, 1.7, 0.4, 5 ) expect_equal(sheet_v[6:n_values], expected_v) }) openxlsx/tests/testthat/test-setColWidths.R0000644000176200001440000000241114664166646020671 0ustar liggesusers context("Setting column widths") test_that("Resetting col widths", { # Write some data to a workbook object. wb <- createWorkbook() addWorksheet(wb, "iris") writeData(wb, "iris", iris) # Set column widths and perform the pre-save operation to prepare col xml # (typically called by `saveWorkbook()`). setColWidths(wb, "iris", cols = 1:2, 12) wb$setColWidths(1) # Set column widths again for a different range inclusive of the previous one, # perform the pre-save operation to prepare col xml, and test for an error # (reported in https://github.com/ycphs/openxlsx/issues/493). setColWidths(wb, "iris", cols = 1:5, 15) expect_error(wb$setColWidths(1), NA) # Test that the resulting col xml meets expectations. expected_col_xml <- c( "1" = "", "2" = "", "3" = "", "4" = "", "5" = "" ) expect_equal( wb$worksheets[[1]]$cols, expected_col_xml ) }) openxlsx/tests/testthat/test-write_xlsx_vector_args.R0000644000176200001440000000677714656134061023071 0ustar liggesusers context("write.xlsx vector arguments") test_that("Writing then reading returns identical data.frame 1", { tmp_file <- file.path(tempdir(), "xlsx_vector_args.xlsx") df1 <- data.frame(1:2) df2 <- data.frame(1:3) x <- list(df1, df2) write.xlsx( file = tmp_file, x = x, gridLines = c(FALSE, TRUE), sheetName = c("a", "b"), zoom = c(50, 90), tabColour = c("red", "blue") ) wb <- loadWorkbook(tmp_file) expect_equal(getSheetNames(tmp_file), expected = c("a", "b")) expect_equal(names(wb), expected = c("a", "b")) expect_true(grepl('rgb="FFFF0000"', wb$worksheets[[1]]$sheetPr)) expect_true(grepl('rgb="FF0000FF"', wb$worksheets[[2]]$sheetPr)) expect_true(grepl('zoomScale="50"', wb$worksheets[[1]]$sheetViews)) expect_true(grepl('zoomScale="90"', wb$worksheets[[2]]$sheetViews)) expect_true(grepl('showGridLines="0"', wb$worksheets[[1]]$sheetViews)) expect_true(grepl('showGridLines="1"', wb$worksheets[[2]]$sheetViews)) expect_equal(read.xlsx(tmp_file, sheet = 1), df1) expect_equal(read.xlsx(tmp_file, sheet = 2), df2) unlink(tmp_file, recursive = TRUE, force = TRUE) }) test_that("write.xlsx() passes withFilter and colWidths [151]", { df <- data.frame(x = 1, b = 2) x <- buildWorkbook(df) y <- buildWorkbook(df, withFilter = TRUE, colWidths = 15) expect_equal(x$worksheets[[1]]$autoFilter, character()) expect_equal(y$worksheets[[1]]$autoFilter, "") expect_equal(x$colWidths, list(list())) expect_equal( y$colWidths[[1]], structure(c(`1` = "15", `2` = "15"), hidden = c("0", "0")) ) }) test_that("write.xlsx() correctly passes default asTable and withFilters", { df <- data.frame(x = 1, b = 2) # asTable = TRUE >> writeDataTable >> withFilter = TRUE # asTable = FALSE >> writeData >> withFilter = FALSE x <- buildWorkbook(df, asTable = FALSE) y <- buildWorkbook(df, asTable = TRUE) # Save the workbook tf <- temp_xlsx() saveWorkbook(y, tf) y2 <- loadWorkbook(tf) expect_identical(x$worksheets[[1]]$autoFilter, character()) # not autoFilter for tables -- not named in buildWorkbook expect_equal( y$worksheets[[1]]$tableParts, structure("", tableName = "Table3") ) expect_equal( y2$worksheets[[1]]$tableParts, structure("", tableName = c(`A1:B2` = "Table3")) ) file.remove(tf) }) test_that("write.xlsx() correctly handles colWidths", { x <- data.frame(a = 1, b = 2, c = 3) zero3 <- rep("0", 3) # No warning when passing "auto" expect_warning(buildWorkbook(rep_len(list(x), 3), colWidths = "auto"), NA) # single value is repeated for all columns wb <- buildWorkbook(rep_len(list(x), 3), colWidths = 13) exp <- rep_len(list(structure(c(`1` = "13", `2` = "13", `3` = "13"), hidden = zero3)), 3) expect_equal(wb$colWidths, exp) # sets are repeated wb <- buildWorkbook(rep_len(list(x), 3), colWidths = list(c(10, 20, 30))) exp <- rep_len(list(structure(c(`1` = "10", `2` = "20", `3` = "30"), hidden = zero3)), 3) expect_equal(wb$colWidths, exp) # 3 distinct sets wb <- buildWorkbook( rep_len(list(x), 3), colWidths = list( c(10, 20, 30), c(100, 200, 300), c(1, 2, 3) )) expect_equal( wb$colWidths, list( structure(c(`1` = "10", `2` = "20", `3` = "30"), hidden = zero3), structure(c(`1` = "100", `2` = "200", `3` = "300"), hidden = zero3), structure(c(`1` = "1", `2` = "2", `3` = "3"), hidden = zero3) ) ) }) openxlsx/tests/testthat/test-conditionalFormatting.R0000644000176200001440000001063314374150317022602 0ustar liggesusers context("Testing 'topN' and 'bottomN' conditions in conditionalFormatting") TNBN_test_data <- data.frame(col1 = 1:10, col2 = 1:10, col3 = seq(10, 100, 10), col4 = seq(10, 100, 10), col5 = 1:10, col6 = 1:10) bg_blue <- createStyle(bgFill = "skyblue") wb <- createWorkbook() sht <- "TopN_BottomN_TEST" addWorksheet(wb, sht) writeData(wb, sht, TNBN_test_data) conditionalFormatting(wb, sht, cols = 1, rows = 2:11, type = "topN", rank = 3, style = bg_blue, percent = FALSE) conditionalFormatting(wb, sht, cols = 2, rows = 2:11, type = "bottomN", rank = 3, style = bg_blue, percent = FALSE) conditionalFormatting(wb, sht, cols = 3, rows = 2:11, type = "topN", rank = 50, style = bg_blue, percent = TRUE) conditionalFormatting(wb, sht, cols = 4, rows = 2:11, type = "bottomN", rank = 50, style = bg_blue, percent = TRUE) conditionalFormatting(wb, sht, cols = 5, rows = 2:11, type = "topN", rank = 3, style = bg_blue) conditionalFormatting(wb, sht, cols = 6, rows = 2:11, type = "bottomN", rank = 3, style = bg_blue) test_that("Number of conditionalFormatting rules added equal to 6", { expect_equal(object = length(wb$worksheets[[1]]$conditionalFormatting), expected = 6) }) test_that("topN conditions do not have the 'bottom' argument", { expect_false(object = grepl(paste('bottom'), wb$worksheets[[1]]$conditionalFormatting[1])) expect_false(object = grepl(paste('bottom'), wb$worksheets[[1]]$conditionalFormatting[3])) }) test_that("bottomN conditions have the 'bottom' argument set to '1'", { expect_true(object = grepl(paste('bottom="1"'), wb$worksheets[[1]]$conditionalFormatting[2])) expect_true(object = grepl(paste('bottom="1"'), wb$worksheets[[1]]$conditionalFormatting[4])) }) test_that("topN/bottomN rank conditions have the 'percent=FALSE' argument set to '0'", { expect_true(object = grepl(paste('percent="0"'), wb$worksheets[[1]]$conditionalFormatting[1])) expect_true(object = grepl(paste('percent="0"'), wb$worksheets[[1]]$conditionalFormatting[2])) }) test_that("topN/bottomN rank conditions do not have the 'percent' argument is set to 'NULL'", { expect_true(object = grepl(paste('percent="NULL"'), wb$worksheets[[1]]$conditionalFormatting[5])) expect_true(object = grepl(paste('percent="NULL"'), wb$worksheets[[1]]$conditionalFormatting[6])) }) test_that("topN/bottomN percent conditions have the 'percent' argument set to '1'", { expect_true(object = grepl(paste('percent="1"'), wb$worksheets[[1]]$conditionalFormatting[3])) expect_true(object = grepl(paste('percent="1"'), wb$worksheets[[1]]$conditionalFormatting[4])) }) test_that("topN/bottomN conditions correspond to 'top10' type", { expect_true(object = grepl(paste('type="top10"'), wb$worksheets[[1]]$conditionalFormatting[1])) expect_true(object = grepl(paste('type="top10"'), wb$worksheets[[1]]$conditionalFormatting[2])) expect_true(object = grepl(paste('type="top10"'), wb$worksheets[[1]]$conditionalFormatting[3])) expect_true(object = grepl(paste('type="top10"'), wb$worksheets[[1]]$conditionalFormatting[4])) expect_true(object = grepl(paste('type="top10"'), wb$worksheets[[1]]$conditionalFormatting[5])) expect_true(object = grepl(paste('type="top10"'), wb$worksheets[[1]]$conditionalFormatting[6])) }) context("Testing 'blanks' and 'notBlanks' conditions in conditionalFormatting") BNB_test_data <- data.frame(col1 = sample(c("X", NA_character_), 10, replace = TRUE), col2 = sample(c("Y", NA_character_), 10, replace = TRUE)) bg_blue <- createStyle(bgFill = "skyblue") bg_red <- createStyle(bgFill = "red") wb <- createWorkbook() sht <- "Blanks_NonBlanks_TEST" addWorksheet(wb, sht) writeData(wb, sht, BNB_test_data) conditionalFormatting(wb, sht, cols = 1, rows = 2:11, type = "blanks", style = bg_red) conditionalFormatting(wb, sht, cols = 2, rows = 2:11, type = "notBlanks", style = bg_blue) test_that("Number of conditionalFormatting rules added equal to 2", { expect_equal(object = length(wb$worksheets[[1]]$conditionalFormatting), expected = 2) }) test_that("type='blanks' calls type='containsBlanks'", { expect_true(object = grepl(paste('containsBlanks'), wb$worksheets[[1]]$conditionalFormatting[1])) }) test_that("type='notBlanks' calls type='notContainsBlanks'", { expect_true(object = grepl(paste('notContainsBlanks'), wb$worksheets[[1]]$conditionalFormatting[2])) }) openxlsx/tests/testthat/test-silent_worksheet_entries.R0000644000176200001440000000043614745234534023374 0ustar liggesuserscontext("silent get_worksheet_entries") test_that("get_worksheet_entries is silent in reference to string in other sheet", { fl <- system.file("extdata", "silent_worksheet_entries.xlsx", package = "openxlsx") wb <- loadWorkbook(fl) expect_silent(get_worksheet_entries(wb, 1)) }) openxlsx/tests/testthat/test-skip_empty_rows.R0000644000176200001440000002021314374150317021475 0ustar liggesusers context("Skip Empty Rows") test_that("skip empty rows", { xlsxfile <- temp_xlsx() df <- data.frame("x" = c(1, NA, NA, 2), "y" = c(1, NA, NA, 3)) write.xlsx(df, xlsxfile) wb <- loadWorkbook(xlsxfile) df1 <- readWorkbook(xlsxfile, skipEmptyRows = FALSE) df2 <- readWorkbook(wb, skipEmptyRows = FALSE) expect_equal(df, df1) expect_equal(df, df2) v <- c("A1", "B1", "A2", "B2", "A5", "B5") expect_equal(calc_number_rows(x = v, skipEmptyRows = TRUE), 3) expect_equal(calc_number_rows(x = v, skipEmptyRows = FALSE), 5) ## DONT SKIP df1 <- readWorkbook(xlsxfile, skipEmptyRows = TRUE) df2 <- readWorkbook(wb, skipEmptyRows = TRUE) expect_equal(nrow(df1), 2) expect_equal(nrow(df2), 2) expect_equivalent(df[c(1, 4), ], df1) expect_equivalent(df[c(1, 4), ], df2) }) test_that("skip empty cols", { xlsxfile <- temp_xlsx() x <- data.frame("a" = c(1, NA, NA, 2), "b" = c(1, NA, NA, 3)) y <- data.frame("x" = c(1, NA, NA, 2), "y" = c(1, NA, NA, 3)) wb <- createWorkbook() addWorksheet(wb, "Sheet 1") writeData(wb, sheet = 1, x = x) writeData(wb, sheet = 1, x = y, startCol = 4) saveWorkbook(wb, file = xlsxfile) ## from file res <- readWorkbook(xlsxfile, skipEmptyRows = FALSE, skipEmptyCols = FALSE) expect_equal(ncol(res), 5) expect_equal(nrow(res), 4) ## from file res <- readWorkbook(xlsxfile, skipEmptyRows = TRUE, skipEmptyCols = TRUE) expect_equal(ncol(res), 4) expect_equal(nrow(res), 2) expect_equivalent(cbind(x, y)[c(1, 4), ], res) ## from file res <- readWorkbook(xlsxfile, skipEmptyRows = FALSE, skipEmptyCols = TRUE) expect_equal(ncol(res), 4) expect_equal(nrow(res), 4) expect_equivalent(cbind(x, y), res) ## from file res <- readWorkbook(xlsxfile, skipEmptyRows = TRUE, skipEmptyCols = FALSE) expect_equal(ncol(res), 5) expect_equal(nrow(res), 2) expect_true(all(is.na(res$X3))) ############################################################################# ## Workbook object ## Workbook object wb <- loadWorkbook(xlsxfile) ## from workbook object res <- readWorkbook(wb, skipEmptyRows = FALSE, skipEmptyCols = FALSE) expect_equal(ncol(res), 5) expect_equal(nrow(res), 4) ## from workbook object res <- readWorkbook(wb, skipEmptyRows = TRUE, skipEmptyCols = TRUE) expect_equal(ncol(res), 4) expect_equal(nrow(res), 2) expect_equivalent(cbind(x, y)[c(1, 4), ], res) ## from workbook object res <- readWorkbook(wb, skipEmptyRows = FALSE, skipEmptyCols = TRUE) expect_equal(ncol(res), 4) expect_equal(nrow(res), 4) expect_equivalent(cbind(x, y), res) ## from workbook object res <- readWorkbook(wb, skipEmptyRows = TRUE, skipEmptyCols = FALSE) expect_equal(ncol(res), 5) expect_equal(nrow(res), 2) expect_true(all(is.na(res$X3))) }) test_that("Version 4 fixes from File", { fl <- system.file("extdata", "readTest.xlsx", package = "openxlsx") x <- read.xlsx(xlsxFile = fl, sheet = 4, skipEmptyCols = TRUE, skipEmptyRows = TRUE, colNames = FALSE) expect_equal(nrow(x), 5L) expect_equal(ncol(x), 4L) x <- read.xlsx(xlsxFile = fl, sheet = 4, skipEmptyCols = TRUE, skipEmptyRows = TRUE, colNames = TRUE) expect_equal(nrow(x), 5L - 1L) expect_equal(ncol(x), 4L) ############################################################## ## FALSE FALSE FALSE x <- read.xlsx(xlsxFile = fl, sheet = 4, skipEmptyCols = FALSE, skipEmptyRows = FALSE, colNames = FALSE) expect_equal(nrow(x), 6L) expect_equal(ncol(x), 8L) ## NA columns expect_true(all(is.na(x$X1))) expect_true(all(is.na(x$X2))) expect_true(all(is.na(x$X3))) expect_true(all(is.na(x$X7))) ## NA rows expect_true(all(is.na(x[3, ]))) ############################################################## ## FALSE FALSE TRUE x <- read.xlsx(xlsxFile = fl, sheet = 4, skipEmptyCols = FALSE, skipEmptyRows = FALSE, colNames = TRUE) expect_equal(nrow(x), 6L - 1L) expect_equal(ncol(x), 8L) ## NA columns expect_true(all(is.na(x$X1))) expect_true(all(is.na(x$X2))) expect_true(all(is.na(x$X3))) expect_true(all(is.na(x$X7))) ## NA rows expect_true(all(is.na(x[2, ]))) ############################################################## ## FALSE TRUE FALSE x <- read.xlsx(xlsxFile = fl, sheet = 4, skipEmptyCols = FALSE, skipEmptyRows = TRUE, colNames = FALSE) expect_equal(nrow(x), 5L) expect_equal(ncol(x), 8L) ## NA columns expect_true(all(is.na(x$X1))) expect_true(all(is.na(x$X2))) expect_true(all(is.na(x$X3))) expect_true(all(is.na(x$X7))) ############################################################## ## FALSE TRUE TRUE x <- read.xlsx(xlsxFile = fl, sheet = 4, skipEmptyCols = FALSE, skipEmptyRows = TRUE, colNames = TRUE) expect_equal(nrow(x), 5L - 1L) expect_equal(ncol(x), 8L) ## NA columns expect_true(all(is.na(x$X1))) expect_true(all(is.na(x$X2))) expect_true(all(is.na(x$X3))) expect_true(all(is.na(x$X7))) ############################################################## ## TRUE FALSE FALSE x <- read.xlsx(xlsxFile = fl, sheet = 4, skipEmptyCols = TRUE, skipEmptyRows = FALSE, colNames = FALSE) expect_equal(nrow(x), 6L) expect_equal(ncol(x), 4L) ## NA rows expect_true(all(is.na(x[3, ]))) ############################################################## ## TRUE FALSE TRUE x <- read.xlsx(xlsxFile = fl, sheet = 4, skipEmptyCols = TRUE, skipEmptyRows = FALSE, colNames = TRUE) expect_equal(nrow(x), 6L - 1L) expect_equal(ncol(x), 4L) ## NA rows expect_true(all(is.na(x[2, ]))) }) test_that("Version 4 fixes from Workbook Objects", { fl <- loadWorkbook(system.file("extdata", "readTest.xlsx", package = "openxlsx")) x <- read.xlsx(xlsxFile = fl, sheet = 4, skipEmptyCols = TRUE, skipEmptyRows = TRUE, colNames = FALSE) expect_equal(nrow(x), 5L) expect_equal(ncol(x), 4L) x <- read.xlsx(xlsxFile = fl, sheet = 4, skipEmptyCols = TRUE, skipEmptyRows = TRUE, colNames = TRUE) expect_equal(nrow(x), 5L - 1L) expect_equal(ncol(x), 4L) ############################################################## ## FALSE FALSE FALSE x <- read.xlsx(xlsxFile = fl, sheet = 4, skipEmptyCols = FALSE, skipEmptyRows = FALSE, colNames = FALSE) expect_equal(nrow(x), 6L) expect_equal(ncol(x), 8L) ## NA columns expect_true(all(is.na(x$X1))) expect_true(all(is.na(x$X2))) expect_true(all(is.na(x$X3))) expect_true(all(is.na(x$X7))) ## NA rows expect_true(all(is.na(x[3, ]))) ############################################################## ## FALSE FALSE TRUE x <- read.xlsx(xlsxFile = fl, sheet = 4, skipEmptyCols = FALSE, skipEmptyRows = FALSE, colNames = TRUE) expect_equal(nrow(x), 6L - 1L) expect_equal(ncol(x), 8L) ## NA columns expect_true(all(is.na(x$X1))) expect_true(all(is.na(x$X2))) expect_true(all(is.na(x$X3))) expect_true(all(is.na(x$X7))) ## NA rows expect_true(all(is.na(x[2, ]))) ############################################################## ## FALSE TRUE FALSE x <- read.xlsx(xlsxFile = fl, sheet = 4, skipEmptyCols = FALSE, skipEmptyRows = TRUE, colNames = FALSE) expect_equal(nrow(x), 5L) expect_equal(ncol(x), 8L) ## NA columns expect_true(all(is.na(x$X1))) expect_true(all(is.na(x$X2))) expect_true(all(is.na(x$X3))) expect_true(all(is.na(x$X7))) ############################################################## ## FALSE TRUE TRUE x <- read.xlsx(xlsxFile = fl, sheet = 4, skipEmptyCols = FALSE, skipEmptyRows = TRUE, colNames = TRUE) expect_equal(nrow(x), 5L - 1L) expect_equal(ncol(x), 8L) ## NA columns expect_true(all(is.na(x$X1))) expect_true(all(is.na(x$X2))) expect_true(all(is.na(x$X3))) expect_true(all(is.na(x$X7))) ############################################################## ## TRUE FALSE FALSE x <- read.xlsx(xlsxFile = fl, sheet = 4, skipEmptyCols = TRUE, skipEmptyRows = FALSE, colNames = FALSE) expect_equal(nrow(x), 6L) expect_equal(ncol(x), 4L) ## NA rows expect_true(all(is.na(x[3, ]))) ############################################################## ## TRUE FALSE TRUE x <- read.xlsx(xlsxFile = fl, sheet = 4, skipEmptyCols = TRUE, skipEmptyRows = FALSE, colNames = TRUE) expect_equal(nrow(x), 6L - 1L) expect_equal(ncol(x), 4L) ## NA rows expect_true(all(is.na(x[2, ]))) }) openxlsx/tests/testthat/test-remove_worksheets.R0000644000176200001440000000301414374150317022012 0ustar liggesusers context("Removing worksheets.") test_that("Deleting worksheets", { tempFile <- temp_xlsx() genWS <- function(wb, sheetName) { addWorksheet(wb, sheetName) writeDataTable(wb, sheetName, data.frame("X" = sprintf("This is sheet: %s", sheetName)), colNames = FALSE) } wb <- createWorkbook() genWS(wb, "Sheet 1") genWS(wb, "Sheet 2") genWS(wb, "Sheet 3") expect_equal(names(wb), c("Sheet 1", "Sheet 2", "Sheet 3")) removeWorksheet(wb, sheet = 1) expect_equal(names(wb), c("Sheet 2", "Sheet 3")) removeWorksheet(wb, sheet = 1) expect_equal(names(wb), c("Sheet 3")) ## add to end genWS(wb, "Sheet 1") genWS(wb, "Sheet 2") expect_equal(names(wb), c("Sheet 3", "Sheet 1", "Sheet 2")) saveWorkbook(wb, tempFile, overwrite = TRUE) ## re-load & re-order worksheets wb <- loadWorkbook(tempFile) expect_equal(names(wb), c("Sheet 3", "Sheet 1", "Sheet 2")) writeData(wb, sheet = "Sheet 2", x = iris[1:10, 1:4], startRow = 5) expect_equal(iris[1:10, 1:4], read.xlsx(wb, "Sheet 2", startRow = 5)) writeData(wb, sheet = 1, x = iris[1:20, 1:4], startRow = 5) expect_equal(iris[1:20, 1:4], read.xlsx(wb, "Sheet 3", startRow = 5)) removeWorksheet(wb, sheet = 1) expect_equal("This is sheet: Sheet 1", read.xlsx(wb, 1, startRow = 1)[[1]]) removeWorksheet(wb, sheet = 2) expect_equal("This is sheet: Sheet 1", read.xlsx(wb, 1, startRow = 1)[[1]]) removeWorksheet(wb, sheet = 1) expect_equal(names(wb), character(0)) unlink(tempFile, recursive = TRUE, force = TRUE) rm(wb) }) openxlsx/tests/testthat/test-write_read_equality.R0000644000176200001440000002025414374150317022306 0ustar liggesusers context("Writing and reading returns similar objects") test_that("Writing then reading returns identical data.frame 1", { curr_wd <- getwd() ## data genDf <- function() { set.seed(1) data.frame( "Date" = Sys.Date() - 0:4, "Logical" = c(TRUE, FALSE, TRUE, TRUE, FALSE), "Currency" = -2:2, "Accounting" = -2:2, "hLink" = "https://CRAN.R-project.org/", "Percentage" = seq(-1, 1, length.out = 5), "TinyNumber" = runif(5) / 1E9, stringsAsFactors = FALSE ) } df <- genDf() df class(df$Currency) <- "currency" class(df$Accounting) <- "accounting" class(df$hLink) <- "hyperlink" class(df$Percentage) <- "percentage" class(df$TinyNumber) <- "scientific" op <- options() options("openxlsx.dateFormat" = "yyyy-mm-dd") fileName <- file.path(tempdir(), "allClasses.xlsx") write.xlsx(df, file = fileName, overwrite = TRUE) x <- read.xlsx(xlsxFile = fileName, detectDates = TRUE) expect_equal(object = x, expected = genDf(), check.attributes = FALSE) unlink(fileName, recursive = TRUE, force = TRUE) expect_equal(object = getwd(), curr_wd) options(op) }) test_that("Writing then reading returns identical data.frame 2", { curr_wd <- getwd() ## data.frame of dates dates <- data.frame("d1" = Sys.Date() - 0:500) dates[nrow(dates)+1,] = as.Date("1900-01-02") for (i in 1:3) dates <- cbind(dates, dates) names(dates) <- paste0("d", 1:8) ## Date Formatting wb <- createWorkbook() addWorksheet(wb, "Date Formatting", gridLines = FALSE) writeData(wb, 1, dates) ## write without styling ## set default date format options("openxlsx.dateFormat" = "yyyy/mm/dd") ## numFmt == "DATE" will use the date format specified by the above addStyle(wb, 1, style = createStyle(numFmt = "DATE"), rows = 2:11, cols = 1, gridExpand = TRUE) ## some custom date format examples sty <- createStyle(numFmt = "yyyy/mm/dd") addStyle(wb, 1, style = sty, rows = 2:11, cols = 2, gridExpand = TRUE) sty <- createStyle(numFmt = "yyyy/mmm/dd") addStyle(wb, 1, style = sty, rows = 2:11, cols = 3, gridExpand = TRUE) sty <- createStyle(numFmt = "yy / mmmm / dd") addStyle(wb, 1, style = sty, rows = 2:11, cols = 4, gridExpand = TRUE) sty <- createStyle(numFmt = "ddddd") addStyle(wb, 1, style = sty, rows = 2:11, cols = 5, gridExpand = TRUE) sty <- createStyle(numFmt = "yyyy-mmm-dd") addStyle(wb, 1, style = sty, rows = 2:11, cols = 6, gridExpand = TRUE) sty <- createStyle(numFmt = "mm/ dd yyyy") addStyle(wb, 1, style = sty, rows = 2:11, cols = 7, gridExpand = TRUE) sty <- createStyle(numFmt = "mm/dd/yy") addStyle(wb, 1, style = sty, rows = 2:11, cols = 8, gridExpand = TRUE) setColWidths(wb, 1, cols = 1:10, widths = 23) fileName <- file.path(tempdir(), "DateFormatting.xlsx") write.xlsx(dates, file = fileName, overwrite = TRUE) x <- read.xlsx(xlsxFile = fileName, detectDates = TRUE) expect_equal(object = x, expected = dates, check.attributes = FALSE) xNoDateDetection <- read.xlsx(xlsxFile = fileName, detectDates = FALSE) dateOrigin <- getDateOrigin(fileName) expect_equal(object = dateOrigin, expected = "1900-01-01", check.attributes = FALSE) for (i in seq_len(ncol(x))) { xNoDateDetection[[i]] <- convertToDate(xNoDateDetection[[i]], origin = dateOrigin) } expect_equal(object = xNoDateDetection, expected = dates, check.attributes = FALSE) expect_equal(object = getwd(), curr_wd) unlink(fileName, recursive = TRUE, force = TRUE) }) test_that("Writing then reading rowNames, colNames combinations", { op <- options() options(stringsAsFactors = FALSE) fileName <- temp_xlsx() curr_wd <- getwd() mt <- utils::head(mtcars) # don't need the whole thing # write the row and column names for testing write.xlsx(mt, file = fileName, overwrite = TRUE, rowNames = TRUE, colNames = TRUE) # rowNames = colNames = TRUE # Row names = first column # Col names = first row x <- read.xlsx(fileName, sheet = 1, rowNames = TRUE) expect_equal(x, mt) # rowNames = TRUE, colNames = FALSE # Row names = first column # Col names = X1, X2, etc # need to create an expected output y <- as.data.frame(rbind(colnames(mt), as.matrix(mt))) colnames(y) <- c(make.names(seq_along(mt))) x <- read.xlsx(fileName, sheet = 1, rowNames = TRUE, colNames = FALSE) expect_equal(x, y) # rowNames = FALSE, colNames = TRUE # Row names = "" # Cl names = first row y2 <- cbind(row.names(mt), mt) colnames(y2)[1] <- "" row.names(y2) <- NULL x <- read.xlsx(fileName, sheet = 1, rowNames = FALSE, colNames = TRUE) expect_equal(x, y2) # rowNames = FALSE, colNames = FALSE # Row names = "" # Col names = X1, X2, etc y3 <- cbind(row.names(y), y) colnames(y3) <- make.names(seq_along(y3)) row.names(y3) <- NULL x <- read.xlsx(fileName, sheet = 1, rowNames = FALSE, colNames = FALSE) expect_equal(x, y3) # Check wd expect_equal(getwd(), curr_wd) unlink(fileName, recursive = TRUE, force = TRUE) options(op) }) test_that("Writing then reading returns identical data.frame 3", { op <- options() options(openxlsx.dateFormat = "yyyy-mm-dd") ## data df <- data.frame( Date = as.Date("2021-05-21") - 0:4, Logical = c(TRUE, FALSE, TRUE, TRUE, FALSE), Currency = -2:2, Accounting = -2:2, hLink = "https://CRAN.R-project.org/", Percentage = seq.int(-1, 1, length.out = 5), TinyNumber = runif(5) / 1E9, stringsAsFactors = FALSE ) class(df$Currency) <- "currency" class(df$Accounting) <- "accounting" class(df$hLink) <- "hyperlink" class(df$Percentage) <- "percentage" class(df$TinyNumber) <- "scientific" fileName <- tempfile("allClasses", fileext = ".xlsx") write.xlsx(df, file = fileName, overwrite = TRUE) ## rows, cols combinations rows <- 1:4 cols <- c(1, 3, 5) x <- read.xlsx(fileName, detectDates = TRUE, rows = rows, cols = cols) exp <- df[sort((rows - 1)[(rows - 1) <= nrow(df)]), sort(cols[cols <= ncol(df)])] expect_equal(x, exp) rows <- 1:4 cols <- 1:9 x <- read.xlsx(xlsxFile = fileName, detectDates = TRUE, rows = rows, cols = cols) exp <- df[sort((rows - 1)[(rows - 1) <= nrow(df)]), sort(cols[cols <= ncol(df)])] expect_equal(x, exp) rows <- 1:200 cols <- c(5, 99, 2) x <- read.xlsx(xlsxFile = fileName, detectDates = TRUE, rows = rows, cols = cols) exp <- df[sort((rows - 1)[(rows - 1) <= nrow(df)]), sort(cols[cols <= ncol(df)])] expect_equal(x, exp) rows <- 1000:900 cols <- c(5, 99, 2) suppressWarnings(x <- read.xlsx(xlsxFile = fileName, detectDates = TRUE, rows = rows, cols = cols)) expect_identical(x, NULL) unlink(fileName, recursive = TRUE, force = TRUE) options(op) }) test_that("Writing then reading returns identical data.frame 4", { ## data df <- head(iris[, 1:4]) df[1, 2] <- NA df[3, 1] <- NA df[6, 4] <- NA tf <- temp_xlsx() write.xlsx(x = df, file = tf, keepNA = TRUE) x <- read.xlsx(tf) expect_equal(object = x, expected = df, check.attributes = TRUE) unlink(tf, recursive = TRUE, force = TRUE) tf <- temp_xlsx() write.xlsx(x = df, file = tf, keepNA = FALSE) x <- read.xlsx(tf) expect_equal(object = x, expected = df, check.attributes = TRUE) unlink(tf, recursive = TRUE, force = TRUE) }) test_that("Writing then reading returns identical data.frame 5", { ## data df <- head(iris[, 1:4]) df[1, 2] <- NA df[3, 1] <- NA df[6, 4] <- NA na.string <- "*" df_expected <- df df_expected[1, 2] <- na.string df_expected[3, 1] <- na.string df_expected[6, 4] <- na.string tf <- temp_xlsx() write.xlsx(x = df, file = tf, keepNA = TRUE, na.string = na.string) x <- read.xlsx(tf) expect_equal(object = x, expected = df_expected, check.attributes = TRUE) unlink(tf, recursive = TRUE, force = TRUE) }) test_that("Special characters in sheet names", { tf <- temp_xlsx() ## data sheet_name <- "A & B < D > D" wb <- createWorkbook() addWorksheet(wb, sheetName = sheet_name) addWorksheet(wb, sheetName = "test") writeData(wb, sheet = 1, x = 1:10) saveWorkbook(wb = wb, file = tf, overwrite = TRUE) expect_equal(getSheetNames(tf)[1], sheet_name) expect_equal(getSheetNames(tf)[2], "test") expect_equal(read.xlsx(tf, colNames = FALSE)[[1]], 1:10) unlink(tf, recursive = TRUE, force = TRUE) }) openxlsx/tests/testthat/test-getCellRefs.R0000644000176200001440000000062014374150317020436 0ustar liggesusers context("Check Cell Ref") test_that("Provide tests for single getCellRefs", { expect_equal(getCellRefs(data.frame(1, 2)), "B1") expect_error(getCellRefs(c(1, 2))) expect_error(getCellRefs(c(1, "a"))) }) test_that("Provide tests for multiple getCellRefs", { expect_equal(getCellRefs(data.frame(1:3, 2:4)), c("B1", "C2", "D3")) expect_error(getCellRefs(c(1:2, c("a", "b")))) }) openxlsx/tests/testthat/test-validate_table_name.R0000644000176200001440000000447414374150317022212 0ustar liggesusers test_that("Validate Table Names", { wb <- createWorkbook() addWorksheet(wb, "Sheet 1") ## case expect_equal(wb$validate_table_name("test"), "test") expect_equal(wb$validate_table_name("TEST"), "test") expect_equal(wb$validate_table_name("Test"), "test") ## length expect_error(wb$validate_table_name(paste(sample(LETTERS, size = 300, replace = TRUE), collapse = "")), regexp = "tableName must be less than 255 characters") ## look like cell ref expect_error(wb$validate_table_name("R1C2"), regexp = "tableName cannot be the same as a cell reference, such as R1C1", fixed = TRUE) expect_error(wb$validate_table_name("A1"), regexp = "tableName cannot be the same as a cell reference", fixed = TRUE) expect_error(wb$validate_table_name("R06821C9682"), regexp = "tableName cannot be the same as a cell reference, such as R1C1", fixed = TRUE) expect_error(wb$validate_table_name("ABD918751"), regexp = "tableName cannot be the same as a cell reference", fixed = TRUE) expect_error(wb$validate_table_name("A$100"), regexp = "'$' character cannot exist in a tableName", fixed = TRUE) expect_error(wb$validate_table_name("A12$100"), regexp = "'$' character cannot exist in a tableName", fixed = TRUE) tbl_nm <- "性別" expect_equal(wb$validate_table_name(tbl_nm), tbl_nm) }) test_that("Existing Table Names", { wb <- createWorkbook() addWorksheet(wb, "Sheet 1") ## Existing names - case in-sensitive writeDataTable(wb, sheet = 1, x = head(iris), tableName = "Table1") expect_error(wb$validate_table_name("Table1"), regexp = "Table with name 'table1' already exists", fixed = TRUE) expect_error(writeDataTable(wb, sheet = 1, x = head(iris), tableName = "Table1", startCol = 10), regexp = "Table with name 'table1' already exists", fixed = TRUE) expect_error(wb$validate_table_name("TABLE1"), regexp = "Table with name 'table1' already exists", fixed = TRUE) expect_error(writeDataTable(wb, sheet = 1, x = head(iris), tableName = "TABLE1", startCol = 20), regexp = "Table with name 'table1' already exists", fixed = TRUE) expect_error(wb$validate_table_name("table1"), regexp = "Table with name 'table1' already exists", fixed = TRUE) expect_error(writeDataTable(wb, sheet = 1, x = head(iris), tableName = "table1", startCol = 30), regexp = "Table with name 'table1' already exists", fixed = TRUE) }) openxlsx/tests/testthat/test-writeData.R0000644000176200001440000000352614656123677020207 0ustar liggesuserstest_that("writeData() forces evaluation of x (#264)", { wbfile <- temp_xlsx() op <- options(stringsAsFactors = FALSE) x <- format(123.4) df <- data.frame(d = format(123.4)) df2 <- data.frame(e = x) wb <- createWorkbook() addWorksheet(wb, "sheet") writeData(wb, "sheet", startCol = 1, data.frame(a = format(123.4))) writeData(wb, "sheet", startCol = 2, data.frame(b = as.character(123.4))) writeData(wb, "sheet", startCol = 3, data.frame(c = "123.4")) writeData(wb, "sheet", startCol = 4, df) writeData(wb, "sheet", startCol = 5, df2) saveWorkbook(wb, wbfile) out <- read.xlsx(wbfile) # Possibly overkill with(out, { expect_identical(a, b) expect_identical(a, c) expect_identical(a, d) expect_identical(a, e) expect_identical(b, c) expect_identical(b, d) expect_identical(b, e) expect_identical(c, d) expect_identical(c, e) expect_identical(d, e) }) options(op) file.remove(wbfile) }) test_that("as.character.formula() works [312]", { form <- y ~ x1 * x2 + x3 expect_identical( as.character.default(form), openxlsx:::as.character.formula(form) ) skip_if_not_installed("formula.tools") # "tests specifically for as.character.formula conflict" foo <- function() { wb <- openxlsx::buildWorkbook( data.frame( x = structure("A2 + B2", class = c("character", "formula")), stringsAsFactors = FALSE ) ) as.list(wb$worksheets[[1]]$sheet_data) } before <- foo() # don't required the "require" function for deps check match.fun("require")("formula.tools", character.only = TRUE) middle <- foo() detach("package:formula.tools", character.only = TRUE, force = TRUE) end <- foo() expect_identical(before, middle, ignore.environment = TRUE) expect_identical(before, end, ignore.environment = TRUE) }) openxlsx/tests/testthat/test-fontSizeLookupTables.R0000644000176200001440000000025514627413402022367 0ustar liggesuserstest_that("lookup tables dimensions", { expect_equal(dim(openxlsxFontSizeLookupTable), c(29L, 225L)) expect_equal(dim(openxlsxFontSizeLookupTableBold), c(29L, 225L)) }) openxlsx/tests/testthat/test-options.R0000644000176200001440000000325314374150317017737 0ustar liggesusers test_that("option names are appropriate", { bad <- grep("^openxlsx[.].*", names(op.openxlsx), value = TRUE, invert = TRUE) expect_equal(bad, character(0)) }) test_that("changing options", { op <- options() # Set via options() options(openxlsx.borders = "whatever") expect_equal(openxlsx_getOp("borders"), getOption("openxlsx.borders")) expect_equal(openxlsx_getOp("borders"), "whatever") # Set via openxlsx_setOp() openxlsx_setOp("borders", "new_whatever") expect_equal(openxlsx_getOp("borders"), getOption("openxlsx.borders")) expect_equal(openxlsx_getOp("borders"), "new_whatever") # with openxlsx. prefix openxlsx_setOp("openxlsx.borders", "new_new_whatever") expect_equal(openxlsx_getOp("openxlsx.borders"), getOption("openxlsx.borders")) expect_equal(openxlsx_getOp("openxlsx.borders"), "new_new_whatever") options(openxlsx.tableStyle = "Cool format") expect_equal(openxlsx_getOp("tableStyle"), openxlsx_getOp("openxlsx.tableStyle")) # Setting to NULL will return default options(openxlsx.borders = NULL) expect_equal(openxlsx_getOp("borders"), op.openxlsx[["openxlsx.borders"]]) # Bad options names will trigger warning but still be produced options(openxlsx.likelyNotARealOption = TRUE) expect_warning( expect_true(openxlsx_getOp("likelyNotARealOption")), "not a standard openxlsx option" ) # Multiple Ops returns error expect_error(openxlsx_getOp(c("withFilter", "borders")), "length 1") openxlsx_resetOp() options(op) }) test_that("openxlsx_setOp() works with list [#215]", { op <- options() expect_error(openxlsx_setOp(list(withFilter = TRUE, keepNA = TRUE)), NA) openxlsx_resetOp() options(op) }) openxlsx/tests/testthat/test-read_write_logicals.R0000644000176200001440000000224714374150317022250 0ustar liggesusers context("Readind and Writing Logicals") test_that("TRUE, FALSE, NA", { curr_wd <- getwd() fileName <- file.path(tempdir(), "T_F_NA.xlsx") x <- iris x$Species <- as.character(x$Species) x$all_t <- TRUE x$all_f <- FALSE x$tf <- sample(c(TRUE, FALSE), size = 150, replace = TRUE) x$t_na <- sample(c(TRUE, NA), size = 150, replace = TRUE) x$f_na <- sample(c(FALSE, NA), size = 150, replace = TRUE) x$tf_na <- sample(c(TRUE, FALSE, NA), size = 150, replace = TRUE) wb <- write.xlsx(x, file = fileName, colNames = TRUE) y <- read.xlsx(fileName, sheet = 1) expect_equal(x, y) ## T becomes false TRUE and NA exist in a columns expect_equal(x$t_na, y$t_na) expect_equal(x$f_na, y$f_na) expect_equal(is.na(x$f_na), is.na(y$f_na)) expect_equal(is.na(x$tf_na), is.na(y$tf_na)) ## From Workbook y <- read.xlsx(wb, sheet = 1) expect_equal(x, y) ## T becomes false TRUE and NA exist in a columns expect_equal(x$t_na, y$t_na) expect_equal(x$f_na, y$f_na) expect_equal(is.na(x$f_na), is.na(y$f_na)) expect_equal(is.na(x$tf_na), is.na(y$tf_na)) expect_equal(object = getwd(), curr_wd) unlink(fileName, recursive = TRUE, force = TRUE) }) openxlsx/tests/testthat/test-activeSheet.R0000644000176200001440000000204114374150317020502 0ustar liggesusers context("active Sheet ") test_that("get and set active sheet of a workbook", { tempFile1 <- temp_xlsx("temp1") tempFile2 <- temp_xlsx("temp2") tempFile3 <- temp_xlsx("temp3") wbook <- createWorkbook() addWorksheet(wbook, sheetName = "S1") addWorksheet(wbook, sheetName = "S2") addWorksheet(wbook, sheetName = "S3") saveWorkbook(wbook,tempFile1) # default value is the first sheet active expect_equal(activeSheet(wbook),1) expect_equal(activeSheet(wbook),loadWorkbook(tempFile1)$ActiveSheet) activeSheet(wbook) <- 1 ## active sheet S1 saveWorkbook(wbook,tempFile2) expect_equal(activeSheet(wbook),1) expect_equal(activeSheet(wbook),loadWorkbook(tempFile2)$ActiveSheet) activeSheet(wbook) <- "S2" ## active sheet S2 saveWorkbook(wbook,tempFile3) expect(activeSheet(wbook),2) expect_equal(activeSheet(wbook),loadWorkbook(tempFile3)$ActiveSheet) unlink(tempFile1, recursive = TRUE, force = TRUE) unlink(tempFile2, recursive = TRUE, force = TRUE) unlink(tempFile3, recursive = TRUE, force = TRUE) }) openxlsx/tests/testthat/test-write_data_to_sheetData.R0000644000176200001440000002547714656134061023070 0ustar liggesusers context("Converting R types to Excel types") test_that("Converting R types to Excel types", { wb <- createWorkbook() addWorksheet(wb, "S1") addWorksheet(wb, "S2") addWorksheet(wb, "S3") writeDataTable(wb, "S1", x = iris) n_values <- prod(dim(iris)) + ncol(iris) sheet_data <- wb$worksheets[[1]]$sheet_data sheet_v <- sheet_data$v sheet_t <- sheet_data$t sheet_f <- sheet_data$f sheet_row <- sheet_data$rows sheet_col <- sheet_data$cols sheet_v <- as.numeric(sheet_v) expect_length(sheet_row, n_values) expect_length(sheet_col, n_values) expect_length(sheet_t, n_values) expect_length(sheet_v, n_values) expect_length(sheet_f, n_values) ## rows/cols expect_equal(sheet_row, rep(1:151, each = 5)) expect_equal(sheet_col, rep(1:5, times = 151)) ## header types expect_equal(sheet_t[1:5], rep(1, 5)) ## data.frame t & v expect_equal(sheet_t[6:n_values], rep(c(0, 0, 0, 0, 1), 150)) expect_equal(sheet_v[1:5], 0:4) expected_v <- c( 5.1, 3.5, 1.4, 0.2, 5, 4.9, 3, 1.4, 0.2, 5, 4.7, 3.2, 1.3, 0.2, 5, 4.6, 3.1, 1.5, 0.2, 5, 5, 3.6, 1.4, 0.2, 5, 5.4, 3.9, 1.7, 0.4, 5, 4.6, 3.4, 1.4, 0.3, 5, 5, 3.4, 1.5, 0.2, 5, 4.4, 2.9, 1.4, 0.2, 5, 4.9, 3.1, 1.5, 0.1, 5, 5.4, 3.7, 1.5, 0.2, 5, 4.8, 3.4, 1.6, 0.2, 5, 4.8, 3, 1.4, 0.1, 5, 4.3, 3, 1.1, 0.1, 5, 5.8, 4, 1.2, 0.2, 5, 5.7, 4.4, 1.5, 0.4, 5, 5.4, 3.9, 1.3, 0.4, 5, 5.1, 3.5, 1.4, 0.3, 5, 5.7, 3.8, 1.7, 0.3, 5, 5.1, 3.8, 1.5, 0.3, 5, 5.4, 3.4, 1.7, 0.2, 5, 5.1, 3.7, 1.5, 0.4, 5, 4.6, 3.6, 1, 0.2, 5, 5.1, 3.3, 1.7, 0.5, 5, 4.8, 3.4, 1.9, 0.2, 5, 5, 3, 1.6, 0.2, 5, 5, 3.4, 1.6, 0.4, 5, 5.2, 3.5, 1.5, 0.2, 5, 5.2, 3.4, 1.4, 0.2, 5, 4.7, 3.2, 1.6, 0.2, 5, 4.8, 3.1, 1.6, 0.2, 5, 5.4, 3.4, 1.5, 0.4, 5, 5.2, 4.1, 1.5, 0.1, 5, 5.5, 4.2, 1.4, 0.2, 5, 4.9, 3.1, 1.5, 0.2, 5, 5, 3.2, 1.2, 0.2, 5, 5.5, 3.5, 1.3, 0.2, 5, 4.9, 3.6, 1.4, 0.1, 5, 4.4, 3, 1.3, 0.2, 5, 5.1, 3.4, 1.5, 0.2, 5, 5, 3.5, 1.3, 0.3, 5, 4.5, 2.3, 1.3, 0.3, 5, 4.4, 3.2, 1.3, 0.2, 5, 5, 3.5, 1.6, 0.6, 5, 5.1, 3.8, 1.9, 0.4, 5, 4.8, 3, 1.4, 0.3, 5, 5.1, 3.8, 1.6, 0.2, 5, 4.6, 3.2, 1.4, 0.2, 5, 5.3, 3.7, 1.5, 0.2, 5, 5, 3.3, 1.4, 0.2, 5, 7, 3.2, 4.7, 1.4, 6, 6.4, 3.2, 4.5, 1.5, 6, 6.9, 3.1, 4.9, 1.5, 6, 5.5, 2.3, 4, 1.3, 6, 6.5, 2.8, 4.6, 1.5, 6, 5.7, 2.8, 4.5, 1.3, 6, 6.3, 3.3, 4.7, 1.6, 6, 4.9, 2.4, 3.3, 1, 6, 6.6, 2.9, 4.6, 1.3, 6, 5.2, 2.7, 3.9, 1.4, 6, 5, 2, 3.5, 1, 6, 5.9, 3, 4.2, 1.5, 6, 6, 2.2, 4, 1, 6, 6.1, 2.9, 4.7, 1.4, 6, 5.6, 2.9, 3.6, 1.3, 6, 6.7, 3.1, 4.4, 1.4, 6, 5.6, 3, 4.5, 1.5, 6, 5.8, 2.7, 4.1, 1, 6, 6.2, 2.2, 4.5, 1.5, 6, 5.6, 2.5, 3.9, 1.1, 6, 5.9, 3.2, 4.8, 1.8, 6, 6.1, 2.8, 4, 1.3, 6, 6.3, 2.5, 4.9, 1.5, 6, 6.1, 2.8, 4.7, 1.2, 6, 6.4, 2.9, 4.3, 1.3, 6, 6.6, 3, 4.4, 1.4, 6, 6.8, 2.8, 4.8, 1.4, 6, 6.7, 3, 5, 1.7, 6, 6, 2.9, 4.5, 1.5, 6, 5.7, 2.6, 3.5, 1, 6, 5.5, 2.4, 3.8, 1.1, 6, 5.5, 2.4, 3.7, 1, 6, 5.8, 2.7, 3.9, 1.2, 6, 6, 2.7, 5.1, 1.6, 6, 5.4, 3, 4.5, 1.5, 6, 6, 3.4, 4.5, 1.6, 6, 6.7, 3.1, 4.7, 1.5, 6, 6.3, 2.3, 4.4, 1.3, 6, 5.6, 3, 4.1, 1.3, 6, 5.5, 2.5, 4, 1.3, 6, 5.5, 2.6, 4.4, 1.2, 6, 6.1, 3, 4.6, 1.4, 6, 5.8, 2.6, 4, 1.2, 6, 5, 2.3, 3.3, 1, 6, 5.6, 2.7, 4.2, 1.3, 6, 5.7, 3, 4.2, 1.2, 6, 5.7, 2.9, 4.2, 1.3, 6, 6.2, 2.9, 4.3, 1.3, 6, 5.1, 2.5, 3, 1.1, 6, 5.7, 2.8, 4.1, 1.3, 6, 6.3, 3.3, 6, 2.5, 7, 5.8, 2.7, 5.1, 1.9, 7, 7.1, 3, 5.9, 2.1, 7, 6.3, 2.9, 5.6, 1.8, 7, 6.5, 3, 5.8, 2.2, 7, 7.6, 3, 6.6, 2.1, 7, 4.9, 2.5, 4.5, 1.7, 7, 7.3, 2.9, 6.3, 1.8, 7, 6.7, 2.5, 5.8, 1.8, 7, 7.2, 3.6, 6.1, 2.5, 7, 6.5, 3.2, 5.1, 2, 7, 6.4, 2.7, 5.3, 1.9, 7, 6.8, 3, 5.5, 2.1, 7, 5.7, 2.5, 5, 2, 7, 5.8, 2.8, 5.1, 2.4, 7, 6.4, 3.2, 5.3, 2.3, 7, 6.5, 3, 5.5, 1.8, 7, 7.7, 3.8, 6.7, 2.2, 7, 7.7, 2.6, 6.9, 2.3, 7, 6, 2.2, 5, 1.5, 7, 6.9, 3.2, 5.7, 2.3, 7, 5.6, 2.8, 4.9, 2, 7, 7.7, 2.8, 6.7, 2, 7, 6.3, 2.7, 4.9, 1.8, 7, 6.7, 3.3, 5.7, 2.1, 7, 7.2, 3.2, 6, 1.8, 7, 6.2, 2.8, 4.8, 1.8, 7, 6.1, 3, 4.9, 1.8, 7, 6.4, 2.8, 5.6, 2.1, 7, 7.2, 3, 5.8, 1.6, 7, 7.4, 2.8, 6.1, 1.9, 7, 7.9, 3.8, 6.4, 2, 7, 6.4, 2.8, 5.6, 2.2, 7, 6.3, 2.8, 5.1, 1.5, 7, 6.1, 2.6, 5.6, 1.4, 7, 7.7, 3, 6.1, 2.3, 7, 6.3, 3.4, 5.6, 2.4, 7, 6.4, 3.1, 5.5, 1.8, 7, 6, 3, 4.8, 1.8, 7, 6.9, 3.1, 5.4, 2.1, 7, 6.7, 3.1, 5.6, 2.4, 7, 6.9, 3.1, 5.1, 2.3, 7, 5.8, 2.7, 5.1, 1.9, 7, 6.8, 3.2, 5.9, 2.3, 7, 6.7, 3.3, 5.7, 2.5, 7, 6.7, 3, 5.2, 2.3, 7, 6.3, 2.5, 5, 1.9, 7, 6.5, 3, 5.2, 2, 7, 6.2, 3.4, 5.4, 2.3, 7, 5.9, 3, 5.1, 1.8, 7 ) expect_equal(sheet_v[6:n_values], expected_v) ############################ SPECIAL DATA TYPES df <- data.frame( "Date" = as.Date("2016-12-5") - 0:19, "T" = TRUE, "F" = FALSE, "Time" = as.POSIXct("2016-12-05 20:31:12 AEDT") - 0:19 * 60 * 60, "Cash" = paste("$", 1:20), "Cash2" = 31:50, "hLink" = "https://CRAN.R-project.org/", "Percentage" = seq(0, 1, length.out = 20), "TinyNumbers" = 1:20 / 1E9, stringsAsFactors = FALSE ) ## openxlsx will apply default Excel styling for these classes class(df$Cash) <- "currency" class(df$Cash2) <- "accounting" class(df$hLink) <- "hyperlink" class(df$Percentage) <- "percentage" class(df$TinyNumbers) <- "scientific" writeDataTable(wb, "S3", x = df, startRow = 4, rowNames = TRUE, tableStyle = "TableStyleMedium9") ## Get all data sheet_data <- wb$worksheets[[3]]$sheet_data n_values <- (nrow(df) + 1) * (ncol(df) + 1) sheet_v <- sheet_data$v sheet_t <- sheet_data$t sheet_f <- sheet_data$f sheet_row <- sheet_data$rows sheet_col <- sheet_data$cols sheet_v <- as.numeric(sheet_v) expect_length(sheet_row, n_values) expect_length(sheet_t, n_values) ## rows/cols expect_equal(sheet_row, rep(4:24, each = ncol(df) + 1L)) expect_equal(sheet_col, rep(1:10, times = nrow(df) + 1L)) ## header types expect_equal(sheet_t[1:(ncol(df) + 1)], rep(1, ncol(df) + 1)) ## data.frame t & v expect_equal(sheet_t[(ncol(df) + 2):n_values], rep(c(1, 0, 2, 2, 0, 0, 0, 1, 0, 0), 20)) expect_equal(sheet_v[1:(ncol(df) + 1)], 8:17) expected_v <- c( 18, 42709, 1, 0, 42709.86, 1, 31, 19, 0, 0.000000001, 20, 42708, 1, 0, 42709.81, 2, 32, 19, 0.05263158, 0.000000002, 21, 42707, 1, 0, 42709.77, 3, 33, 19, 0.10526316, 0.000000003, 22, 42706, 1, 0, 42709.73, 4, 34, 19, 0.15789474, 0.000000004, 23, 42705, 1, 0, 42709.69, 5, 35, 19, 0.21052632, 0.000000005, 24, 42704, 1, 0, 42709.65, 6, 36, 19, 0.26315789, 0.000000006, 25, 42703, 1, 0, 42709.61, 7, 37, 19, 0.31578947, 0.000000007, 26, 42702, 1, 0, 42709.56, 8, 38, 19, 0.36842105, 0.000000008, 27, 42701, 1, 0, 42709.52, 9, 39, 19, 0.42105263, 0.000000009, 28, 42700, 1, 0, 42709.48, 10, 40, 19, 0.47368421, 0.00000001, 29, 42699, 1, 0, 42709.44, 11, 41, 19, 0.52631579, 0.000000011, 30, 42698, 1, 0, 42709.4, 12, 42, 19, 0.57894737, 0.000000012, 31, 42697, 1, 0, 42709.36, 13, 43, 19, 0.63157895, 0.000000013, 32, 42696, 1, 0, 42709.31, 14, 44, 19, 0.68421053, 0.000000014, 33, 42695, 1, 0, 42709.27, 15, 45, 19, 0.73684211, 0.000000015, 34, 42694, 1, 0, 42709.23, 16, 46, 19, 0.78947368, 0.000000016, 35, 42693, 1, 0, 42709.19, 17, 47, 19, 0.84210526, 0.000000017, 36, 42692, 1, 0, 42709.15, 18, 48, 19, 0.89473684, 0.000000018, 37, 42691, 1, 0, 42709.11, 19, 49, 19, 0.94736842, 0.000000019, 38, 42690, 1, 0, 42709.06, 20, 50, 19, 1, 0.00000002 ) # expect_equal(sheet_v[(ncol(df)+2):n_values], expected_v) }) test_that("Write zero rows & columns", { tempFile <- temp_xlsx() wb <- createWorkbook() addWorksheet(wb, "s1") addWorksheet(wb, "s2") ## ZERO ROWS ## headers only writeData(wb, sheet = 1, x = mtcars[0, ], colNames = TRUE, rowNames = FALSE) ## no headers writeData(wb, sheet = 1, x = mtcars[0, ], colNames = FALSE, rowNames = FALSE, startRow = 5) ## row names writeData(wb, sheet = 1, x = mtcars[0, ], colNames = TRUE, rowNames = TRUE, startRow = 10) ## row names only writeData(wb, sheet = 1, x = mtcars[0, ], colNames = FALSE, rowNames = TRUE, startRow = 15) ## ZERO COLS ## headers only writeData(wb, sheet = 2, x = mtcars[, 0], colNames = TRUE, rowNames = FALSE) ## no headers writeData(wb, sheet = 2, x = mtcars[, 0], colNames = FALSE, rowNames = FALSE, startRow = 5) ## row names writeData(wb, sheet = 2, x = mtcars[, 0], colNames = TRUE, rowNames = TRUE, startRow = 10) ## row names only writeData(wb, sheet = 2, x = mtcars[, 0], colNames = FALSE, rowNames = TRUE, startRow = 15) saveWorkbook(wb, tempFile, overwrite = TRUE) unlink(tempFile) }) test_that("too much data", { wb <- createWorkbook() addWorksheet(wb, "test1") addWorksheet(wb, "test2") df1 <- data.frame(Col1 = paste(rep(1, 32768 + 100), collapse = "")) df2 <- data.frame(Col1 = paste(rep(1, 32768), collapse = "")) expect_warning( writeData(wb, 1, df1), "1 is truncated. Number of characters exeed the limit of 32767." ) expect_warning( writeData(wb, 2, df2), "1 is truncated. Number of characters exeed the limit of 32767." ) }) # example from gh issue #200 test_that("write hyperlinks", { tmp <- openxlsx:::temp_xlsx() tmp_dir <- tempdir() # create data channels <- data.frame( channel = c("ABC", "BBC", "CBC"), homepage = c("https://www.abc.net.au/", "https://www.bbc.com/", "https://www.cbc.ca/"), stringsAsFactors = FALSE ) channels$formula <- paste0('=HYPERLINK("', channels$homepage, '","', channels$channel, '")') # create xlsx wb <- createWorkbook() addWorksheet(wb, "channels") writeDataTable(wb, "channels", channels, tableName = "channels") writeFormula(wb, "channels", channels$formula, startRow = 2, startCol = 1) freezePane(wb, "channels", firstRow = TRUE) setColWidths(wb, "channels", cols = seq_along(channels), widths = "auto") saveWorkbook(wb, file = tmp, overwrite = TRUE) # check the xls file for the correct string unzip(tmp, exdir = tmp_dir) sheet1 <- readLines(paste0(tmp_dir, "/xl/worksheets/sheet1.xml"), warn = FALSE) res <- sapply(replaceIllegalCharacters(channels$formula), FUN = function(str) grepl(str, x = sheet1, fixed = TRUE)) expect_true(all(res)) }) test_that("write list containing NA",{ data <- data.frame(i=1:3) data$x <- list(1, c(2, 3), c(4, NA, 5)) xlsx_file <- temp_xlsx() wb <- createWorkbook() addWorksheet(wb, "Sheet1") writeData(wb, sheet = 1, data, sep = ";", na.string = "") saveWorkbook(wb, file = xlsx_file, overwrite=TRUE) res <- read.xlsx(xlsx_file) exp <- data.frame(i = 1:3, x = c("1", "2;3", "4;;5"), stringsAsFactors = FALSE) expect_equal(exp, res) }) openxlsx/tests/testthat/test-protect-workbook.R0000644000176200001440000000164214374150317021557 0ustar liggesusers context("Protection") test_that("Protect Workbook", { wb <- createWorkbook() addWorksheet(wb, "s1") wb$protectWorkbook(password = "abcdefghij") expect_true(wb$workbook$workbookProtection == "") wb$protectWorkbook(protect = FALSE, password = "abcdefghij", lockStructure = TRUE, lockWindows = TRUE) expect_true(wb$workbook$workbookProtection == "") }) test_that("Reading protected Workbook", { tmp_file <- file.path(tempdir(), "xlsx_read_protectedwb.xlsx") wb <- createWorkbook() addWorksheet(wb, "s1") protectWorkbook(wb, password = "abcdefghij") saveWorkbook(wb, tmp_file, overwrite = TRUE) wb2 <- loadWorkbook(file = tmp_file) # Check that the order of the sub-elements is preserved n1 <- names(wb2$workbook) n2 <- names(wb$workbook)[names(wb$workbook) != "apps"] expect_equal(n1, n2) unlink(tmp_file, recursive = TRUE, force = TRUE) }) openxlsx/tests/testthat/test-read_from_created_wb.R0000644000176200001440000002713114374150317022362 0ustar liggesusers context("Reading from wb object is identical to reading from file") test_that("Reading from new workbook", { curr_wd <- getwd() wb <- createWorkbook() for (i in 1:4) { addWorksheet(wb, sprintf("Sheet %s", i)) } ## colNames = TRUE, rowNames = TRUE writeData(wb, sheet = 1, x = mtcars, colNames = TRUE, rowNames = TRUE, startRow = 10, startCol = 5) x <- read.xlsx(wb, 1, colNames = TRUE, rowNames = TRUE) expect_equal(object = mtcars, expected = x, check.attributes = TRUE) ## colNames = TRUE, rowNames = FALSE writeData(wb, sheet = 2, x = mtcars, colNames = TRUE, rowNames = FALSE, startRow = 10, startCol = 5) x <- read.xlsx(wb, sheet = 2, colNames = TRUE, rowNames = FALSE) expect_equal(object = mtcars, expected = x, check.attributes = FALSE) expect_equal(object = colnames(mtcars), expected = colnames(x), check.attributes = FALSE) ## colNames = FALSE, rowNames = TRUE writeData(wb, sheet = 3, x = mtcars, colNames = FALSE, rowNames = TRUE, startRow = 2, startCol = 2) x <- read.xlsx(wb, sheet = 3, colNames = FALSE, rowNames = TRUE) expect_equal(object = mtcars, expected = x, check.attributes = FALSE) expect_equal(object = rownames(mtcars), expected = rownames(x)) ## colNames = FALSE, rowNames = FALSE writeData(wb, sheet = 4, x = mtcars, colNames = FALSE, rowNames = FALSE, startRow = 12, startCol = 1) x <- read.xlsx(wb, sheet = 4, colNames = FALSE, rowNames = FALSE) expect_equal(object = mtcars, expected = x, check.attributes = FALSE) expect_equal(object = getwd(), curr_wd) rm(wb) }) test_that("Empty workbook", { curr_wd <- getwd() wb <- createWorkbook() addWorksheet(wb, "Sheet 1") expect_equal(NULL, suppressWarnings(read.xlsx(wb))) expect_equal(NULL, suppressWarnings(read.xlsx(wb, sheet = 1, colNames = FALSE))) expect_equal(NULL, suppressWarnings(read.xlsx(wb, sheet = 1, colNames = TRUE))) expect_equal(NULL, suppressWarnings(read.xlsx(wb, sheet = 1, colNames = FALSE, skipEmptyRows = FALSE))) expect_equal(NULL, suppressWarnings(read.xlsx(wb, sheet = 1, colNames = TRUE, skipEmptyRows = FALSE))) expect_equal(NULL, suppressWarnings(read.xlsx(wb, sheet = 1, colNames = FALSE, skipEmptyRows = TRUE, detectDates = TRUE))) expect_equal(NULL, suppressWarnings(read.xlsx(wb, sheet = 1, colNames = TRUE, skipEmptyRows = TRUE, detectDates = FALSE))) expect_equal(NULL, suppressWarnings(read.xlsx(wb, sheet = 1, colNames = FALSE, skipEmptyRows = TRUE, detectDates = TRUE, rows = 4:10))) expect_equal(NULL, suppressWarnings(read.xlsx(wb, sheet = 1, colNames = TRUE, skipEmptyRows = TRUE, detectDates = FALSE, cols = 4:10))) expect_warning(read.xlsx(wb)) expect_warning(read.xlsx(wb, sheet = 1, colNames = FALSE)) expect_warning(read.xlsx(wb, sheet = 1, colNames = TRUE)) expect_warning(read.xlsx(wb, sheet = 1, colNames = FALSE, skipEmptyRows = FALSE)) expect_warning(read.xlsx(wb, sheet = 1, colNames = TRUE, skipEmptyRows = FALSE)) expect_warning(read.xlsx(wb, sheet = 1, colNames = FALSE, skipEmptyRows = TRUE, detectDates = TRUE)) expect_warning(read.xlsx(wb, sheet = 1, colNames = TRUE, skipEmptyRows = TRUE, detectDates = FALSE)) expect_warning(read.xlsx(wb, sheet = 1, colNames = FALSE, skipEmptyRows = TRUE, detectDates = TRUE, rows = 4:10)) expect_warning(read.xlsx(wb, sheet = 1, colNames = TRUE, skipEmptyRows = TRUE, detectDates = FALSE, cols = 4:10)) ## 1 element writeData(wb, 1, "a") x <- read.xlsx(wb) expect_equal(nrow(x), 0) expect_equal(names(x), "a") x <- read.xlsx(wb, sheet = 1, colNames = FALSE) expect_equal(data.frame("X1" = "a", stringsAsFactors = FALSE), x) x <- read.xlsx(wb, sheet = 1, colNames = TRUE) expect_equal(nrow(x), 0) expect_equal(names(x), "a") x <- read.xlsx(wb, sheet = 1, colNames = FALSE, skipEmptyRows = FALSE) expect_equal(data.frame("X1" = "a", stringsAsFactors = FALSE), x) x <- read.xlsx(wb, sheet = 1, colNames = TRUE, skipEmptyRows = FALSE) expect_equal(nrow(x), 0) expect_equal(names(x), "a") writeData(wb, 1, Sys.Date(), startCol = 1, startRow = 1) x <- read.xlsx(wb) expect_equal(nrow(x), 0) expect_equal(convertToDate(as.integer(names(x)[1])), Sys.Date()) x <- read.xlsx(wb, sheet = 1, colNames = FALSE) expect_equal(nrow(x), 1) x <- read.xlsx(wb, sheet = 1, colNames = FALSE, skipEmptyRows = TRUE, detectDates = TRUE) expect_equal(class(x[[1]]), "Date") x <- read.xlsx(wb, sheet = 1, colNames = FALSE, skipEmptyRows = TRUE, detectDates = TRUE) expect_equal(x[[1]], Sys.Date()) x <- suppressWarnings(read.xlsx(wb, sheet = 1, colNames = FALSE, skipEmptyRows = TRUE, detectDates = TRUE, rows = 4:10)) expect_equal(NULL, x) x <- suppressWarnings(read.xlsx(wb, sheet = 1, colNames = TRUE, skipEmptyRows = TRUE, detectDates = FALSE, cols = 4:10)) expect_equal(NULL, x) addWorksheet(wb, "Sheet 2") removeWorksheet(wb, 1) ## 1 date writeData(wb, 1, Sys.Date(), colNames = FALSE) x <- read.xlsx(wb) expect_equal(convertToDate(names(x)), Sys.Date()) x <- read.xlsx(wb, sheet = 1, colNames = FALSE) x1 <- convertToDate(x[[1]]) expect_equal(x1, Sys.Date()) x <- read.xlsx(wb, sheet = 1, colNames = FALSE, skipEmptyRows = TRUE, detectDates = TRUE) expect_equal(class(x[[1]]), "Date") expect_equal(x[[1]], Sys.Date()) x <- read.xlsx(wb, sheet = 1, colNames = TRUE, skipEmptyRows = TRUE, detectDates = TRUE) expect_equal(as.Date(names(x)), Sys.Date()) x <- suppressWarnings(read.xlsx(wb, sheet = 1, colNames = FALSE, skipEmptyRows = TRUE, detectDates = TRUE, rows = 4:10)) expect_equal(NULL, x) x <- suppressWarnings(read.xlsx(wb, sheet = 1, colNames = TRUE, skipEmptyRows = TRUE, detectDates = FALSE, cols = 4:10)) expect_equal(NULL, x) expect_equal(object = getwd(), curr_wd) }) test_that("Reading NAs and NaN values", { fileName <- file.path(tempdir(), "NaN.xlsx") na.string <- "*" ## data a <- data.frame( X = c(-pi / 0, NA, NaN), Y = letters[1:3], Z = c(pi / 0, 99, NaN), Z2 = c(1, NaN, NaN), stringsAsFactors = FALSE ) b <- a b[b == -Inf] <- NaN b[b == Inf] <- NaN c <- b is_na <- sapply(c, is.na) is_nan <- sapply(c, is.nan) c[is_na & !is_nan] <- na.string is_nan_after <- sapply(c, is.nan) c[is_nan & !is_nan_after] <- NA wb <- createWorkbook() addWorksheet(wb, "Sheet 1") writeData(wb, 1, a, keepNA = FALSE) addWorksheet(wb, "Sheet 2") writeData(wb, 2, a, keepNA = TRUE) addWorksheet(wb, "Sheet 3") writeData(wb, 3, a, keepNA = TRUE, na.string = na.string) saveWorkbook(wb, file = fileName, overwrite = TRUE) ## from file expected_df <- structure(list( X = c(NA_real_, NA_real_, NA_real_), Y = c("a", "b", "c"), Z = c(NA, 99, NA), Z2 = c(1, NA, NA) ), .Names = c("X", "Y", "Z", "Z2"), row.names = c(NA, 3L), class = "data.frame" ) expect_equal(read.xlsx(fileName), expected_df) ## from workbook expected_df <- structure(list( X = c(NA_real_, NA_real_, NA_real_), Y = c("a", "b", "c"), Z = c(NA, 99, NA), Z2 = c(1, NA, NA) ), .Names = c("X", "Y", "Z", "Z2"), row.names = c(NA, 3L), class = "data.frame" ) expect_equal(read.xlsx(wb), expected_df) ## keepNA = FALSE expect_equal(read.xlsx(wb), read.xlsx(fileName)) expect_equal(b, read.xlsx(wb)) expect_equal(b, read.xlsx(fileName)) ## keepNA = TRUE expect_equal(read.xlsx(wb), expected_df) expect_equal(read.xlsx(fileName), expected_df) expect_equal(b, read.xlsx(wb, sheet = 2)) expect_equal(b, read.xlsx(fileName, sheet = 2)) ## keepNA = TRUE, na.string = "*" expect_equal(c, read.xlsx(wb, sheet = 3)) expect_equal(c, read.xlsx(fileName, sheet = 3)) unlink(fileName, recursive = TRUE, force = TRUE) }) test_that("Reading from new workbook 2 ", { ## data genDf <- function() { data.frame( "Date" = Sys.Date() - 0:4, "Logical" = c(TRUE, FALSE, TRUE, TRUE, FALSE), "Currency" = -2:2, "Accounting" = -2:2, "hLink" = "https://CRAN.R-project.org/", "Percentage" = seq(-1, 1, length.out = 5), "TinyNumber" = runif(5) / 1E9, stringsAsFactors = FALSE ) } df <- genDf() class(df$Currency) <- "currency" class(df$Accounting) <- "accounting" class(df$hLink) <- "hyperlink" class(df$Percentage) <- "percentage" class(df$TinyNumber) <- "scientific" options("openxlsx.dateFormat" = NULL) fileName <- file.path(tempdir(), "allClasses.xlsx") wb <- write.xlsx(df, file = fileName, overwrite = TRUE) x <- read.xlsx(wb, sheet = 1, detectDates = FALSE) x[[1]] <- convertToDate(x[[1]]) expect_equal(object = x, expected = genDf(), check.attributes = FALSE) x <- read.xlsx(wb, sheet = 1, detectDates = TRUE) expect_equal(object = x, expected = genDf(), check.attributes = FALSE) unlink(fileName, recursive = TRUE, force = TRUE) }) test_that("Reading from new workbook cols/rows", { wb <- createWorkbook() for (i in 1:4) { addWorksheet(wb, sprintf("Sheet %s", i)) } tempFile <- temp_xlsx() ## 1 writeData(wb, sheet = 1, x = mtcars, colNames = TRUE, rowNames = FALSE) saveWorkbook(wb, tempFile, overwrite = TRUE) cols <- 1:3 rows <- 1:10 x <- read.xlsx(wb, 1, colNames = TRUE, rowNames = FALSE, rows = rows, cols = cols) y <- read.xlsx(tempFile, 1, colNames = TRUE, rowNames = FALSE, rows = rows, cols = cols) df <- mtcars[sort((rows - 1)[(rows - 1) <= nrow(mtcars)]), sort(cols[cols <= ncol(mtcars)])] rownames(df) <- seq_len(nrow(df)) expect_equal(object = x, expected = y) expect_equal(object = x, expected = df) ## 2 writeData(wb, sheet = 2, x = mtcars, colNames = TRUE, rowNames = FALSE, startRow = 10, startCol = 5) saveWorkbook(wb, tempFile, overwrite = TRUE) cols <- 1:300 rows <- 1:1000 x <- read.xlsx(wb, sheet = 2, colNames = TRUE, rowNames = FALSE, rows = rows, cols = cols) y <- read.xlsx(tempFile, sheet = 2, colNames = TRUE, rowNames = FALSE, rows = rows, cols = cols) # expect_equal(object = mtcars, expected = x, check.attributes = FALSE) expect_equal(object = x, expected = y, check.attributes = TRUE) expect_equal(object = colnames(mtcars), expected = colnames(x), check.attributes = FALSE) cols <- 1:3 rows <- 12:13 x <- suppressWarnings(read.xlsx(wb, sheet = 2, colNames = TRUE, rowNames = FALSE, rows = rows, cols = cols)) y <- suppressWarnings(read.xlsx(tempFile, sheet = 2, colNames = TRUE, rowNames = FALSE, rows = rows, cols = cols)) expect_equal(object = NULL, expected = x, check.attributes = FALSE) expect_equal(object = NULL, expected = y, check.attributes = TRUE) ## 3 writeData(wb, sheet = 3, x = mtcars, colNames = TRUE, rowNames = FALSE) saveWorkbook(wb, tempFile, overwrite = TRUE) cols <- c(2, 4, 6) rows <- seq(1, 31, by = 2) x <- read.xlsx(wb, sheet = 3, colNames = TRUE, rowNames = FALSE, rows = rows, cols = cols) y <- read.xlsx(tempFile, sheet = 3, colNames = TRUE, rowNames = FALSE, rows = rows, cols = cols) df <- mtcars[sort((rows - 1)[(rows - 1) <= nrow(mtcars)]), sort(cols[cols <= ncol(mtcars)])] rownames(df) <- seq_len(nrow(df)) expect_equal(object = x, expected = y, check.attributes = FALSE) expect_equal(object = df, expected = x, check.attributes = FALSE) ## 4 writeData(wb, sheet = 4, x = mtcars, colNames = TRUE, rowNames = TRUE) saveWorkbook(wb, tempFile, overwrite = TRUE) cols <- c(1, 6, 12) rows <- seq(1, 31, by = 2) x <- read.xlsx(wb, sheet = 4, colNames = TRUE, rowNames = TRUE, rows = rows, cols = cols) y <- read.xlsx(tempFile, sheet = 4, colNames = TRUE, rowNames = TRUE, rows = rows, cols = cols) df <- mtcars[sort((rows - 1)[(rows - 1) <= nrow(mtcars)]), cols[-1] - 1] expect_equal(object = x, expected = y, check.attributes = FALSE) expect_equal(object = df, expected = x, check.attributes = FALSE) rm(wb) unlink(tempFile, recursive = TRUE, force = TRUE) }) openxlsx/tests/testthat/test-read_from_loaded_workbook.R0000644000176200001440000002335214374150317023431 0ustar liggesusers context("Reading from workbook is identical to reading from file readTest.xlsx") test_that("Reading example workbook readTest.xlsx", { curr_wd <- getwd() xlsxFile <- system.file("extdata", "readTest.xlsx", package = "openxlsx") wb <- loadWorkbook(xlsxFile) ## sheet 1 sheet <- 1 x <- read.xlsx(xlsxFile, sheet) y <- read.xlsx(wb, sheet) expect_equal(dim(x), c(10, 7)) expect_equal(dim(y), c(10, 7)) expect_equal(x, y) x <- read.xlsx(xlsxFile, sheet, detectDates = TRUE) y <- read.xlsx(wb, sheet, detectDates = TRUE) expect_equal(dim(x), c(10, 7)) expect_equal(dim(y), c(10, 7)) expect_equal(x, y) x <- read.xlsx(xlsxFile, sheet, startRow = 3, colNames = FALSE, detectDates = TRUE) y <- read.xlsx(wb, sheet, startRow = 3, colNames = FALSE, detectDates = TRUE) expect_equal(dim(x), c(9, 5)) expect_equal(dim(y), c(9, 5)) expect_equal(x, y) x <- read.xlsx(xlsxFile, sheet, rows = 2:4, colNames = TRUE, detectDates = TRUE) y <- read.xlsx(wb, sheet, rows = 2:4, colNames = TRUE, detectDates = TRUE) expect_equal(dim(x), c(2, 6)) expect_equal(dim(y), c(2, 6)) expect_equal(x, y) x <- read.xlsx(xlsxFile, sheet, rows = 2:4, colNames = FALSE, detectDates = TRUE) y <- read.xlsx(wb, sheet, rows = 2:4, colNames = FALSE, detectDates = TRUE) expect_equal(dim(x), c(3, 6)) expect_equal(dim(y), c(3, 6)) expect_equal(x, y) x <- read.xlsx(xlsxFile, sheet, rows = 2:4, colNames = FALSE, detectDates = FALSE) y <- read.xlsx(wb, sheet, rows = 2:4, colNames = FALSE, detectDates = FALSE) expect_equal(dim(x), c(3, 6)) expect_equal(dim(y), c(3, 6)) expect_equal(x, y) x <- read.xlsx(xlsxFile, sheet, colNames = FALSE, detectDates = FALSE, cols = 2:4) y <- read.xlsx(wb, sheet, colNames = FALSE, detectDates = FALSE, cols = 2:4) expect_equal(dim(x), c(9, 2)) expect_equal(dim(y), c(9, 2)) expect_equal(x, y) ## sheet 2 sheet <- 2 x <- read.xlsx(xlsxFile, sheet) y <- read.xlsx(wb, sheet) expect_equal(dim(x), c(33, 9)) expect_equal(dim(y), c(33, 9)) expect_equal(x, y) x <- read.xlsx(xlsxFile, sheet, startRow = 3, colNames = FALSE, detectDates = TRUE) y <- read.xlsx(wb, sheet, startRow = 3, colNames = FALSE, detectDates = TRUE) expect_equal(dim(x), c(32, 9)) expect_equal(dim(y), c(32, 9)) expect_equal(x, y) x <- read.xlsx(xlsxFile, sheet, rows = 2:4, colNames = TRUE, detectDates = TRUE) y <- read.xlsx(wb, sheet, rows = 2:4, colNames = TRUE, detectDates = TRUE) expect_equal(dim(x), c(2, 9)) expect_equal(dim(y), c(2, 9)) expect_equal(x, y) x <- read.xlsx(xlsxFile, sheet, rows = 2:4, colNames = FALSE, detectDates = TRUE) y <- read.xlsx(wb, sheet, rows = 2:4, colNames = FALSE, detectDates = TRUE) expect_equal(dim(x), c(3, 9)) expect_equal(dim(y), c(3, 9)) expect_equal(x, y) x <- read.xlsx(xlsxFile, sheet, rows = 2:4, colNames = FALSE, detectDates = FALSE) y <- read.xlsx(wb, sheet, rows = 2:4, colNames = FALSE, detectDates = FALSE) expect_equal(dim(x), c(3, 9)) expect_equal(dim(y), c(3, 9)) expect_equal(x, y) x <- read.xlsx(xlsxFile, sheet, colNames = FALSE, detectDates = FALSE, cols = 2:4) y <- read.xlsx(wb, sheet, colNames = FALSE, detectDates = FALSE, cols = 2:4) expect_equal(dim(x), c(21, 3)) expect_equal(dim(y), c(21, 3)) expect_equal(x, y) ## sheet 3 sheet <- 3 x <- read.xlsx(xlsxFile, sheet) y <- read.xlsx(wb, sheet) expect_equal(dim(x), c(2083, 5)) expect_equal(dim(y), c(2083, 5)) expect_equal(x, y) x <- read.xlsx(xlsxFile, sheet, startRow = 3, colNames = FALSE, detectDates = TRUE) y <- read.xlsx(wb, sheet, startRow = 3, colNames = FALSE, detectDates = TRUE) expect_equal(dim(x), c(2084, 5)) expect_equal(dim(y), c(2084, 5)) expect_equal(x, y) x <- suppressWarnings(read.xlsx(xlsxFile, sheet, rows = 2:4, colNames = TRUE, detectDates = TRUE)) y <- suppressWarnings(read.xlsx(wb, sheet, rows = 2:4, colNames = TRUE, detectDates = TRUE)) expect_equal(dim(x), NULL) expect_equal(dim(y), NULL) expect_equal(x, y) x <- suppressWarnings(read.xlsx(xlsxFile, sheet, rows = 2:4, colNames = FALSE, detectDates = TRUE)) y <- suppressWarnings(read.xlsx(wb, sheet, rows = 2:4, colNames = FALSE, detectDates = TRUE)) expect_equal(dim(x), NULL) expect_equal(dim(y), NULL) expect_equal(x, NULL) expect_equal(y, NULL) expect_equal(x, y) x <- suppressWarnings(read.xlsx(xlsxFile, sheet, rows = 2:4, colNames = FALSE, detectDates = FALSE)) y <- suppressWarnings(read.xlsx(wb, sheet, rows = 2:4, colNames = FALSE, detectDates = FALSE)) expect_equal(dim(x), NULL) expect_equal(dim(y), NULL) expect_equal(x, NULL) expect_equal(y, NULL) expect_equal(x, y) x <- read.xlsx(xlsxFile, sheet, colNames = FALSE, detectDates = FALSE, cols = 2:4) y <- read.xlsx(wb, sheet, colNames = FALSE, detectDates = FALSE, cols = 2:4) expect_equal(dim(x), c(2084, 2)) expect_equal(dim(y), c(2084, 2)) expect_equal(x, y) ## sheet 5 sheet <- 5 x <- read.xlsx(xlsxFile, sheet) y <- read.xlsx(wb, sheet) expect_equal(dim(x), c(271, 297)) expect_equal(dim(y), c(271, 297)) expect_equal(x, y) x <- read.xlsx(xlsxFile, sheet, startRow = 3, colNames = FALSE, detectDates = TRUE) y <- read.xlsx(wb, sheet, startRow = 3, colNames = FALSE, detectDates = TRUE) expect_equal(dim(x), c(270, 297)) expect_equal(dim(y), c(270, 297)) expect_equal(x, y) x <- read.xlsx(xlsxFile, sheet, rows = 2:4, colNames = TRUE, detectDates = TRUE) y <- read.xlsx(wb, sheet, rows = 2:4, colNames = TRUE, detectDates = TRUE) expect_equal(dim(x), c(2, 297)) expect_equal(dim(y), c(2, 297)) expect_equal(x, y) x <- read.xlsx(xlsxFile, sheet, rows = 2:4, colNames = FALSE, detectDates = TRUE) y <- read.xlsx(wb, sheet, rows = 2:4, colNames = FALSE, detectDates = TRUE) expect_equal(dim(x), c(3, 297)) expect_equal(dim(y), c(3, 297)) expect_equal(x, y) x <- read.xlsx(xlsxFile, sheet, rows = 2:4, colNames = FALSE, detectDates = FALSE) y <- read.xlsx(wb, sheet, rows = 2:4, colNames = FALSE, detectDates = FALSE) expect_equal(dim(x), c(3, 297)) expect_equal(dim(y), c(3, 297)) expect_equal(x, y) x <- read.xlsx(xlsxFile, sheet, colNames = FALSE, detectDates = FALSE, cols = 2:4) y <- read.xlsx(wb, sheet, colNames = FALSE, detectDates = FALSE, cols = 2:4) expect_equal(dim(x), c(272, 3)) expect_equal(dim(y), c(272, 3)) expect_equal(x, y) expect_equal(object = getwd(), curr_wd) }) test_that("Load read - Skip Empty rows/cols", { curr_wd <- getwd() xlsxFile <- system.file("extdata", "readTest.xlsx", package = "openxlsx") wb <- loadWorkbook(xlsxFile) x <- read.xlsx(xlsxFile = xlsxFile, sheet = 4, skipEmptyCols = TRUE, skipEmptyRows = TRUE, colNames = FALSE) expect_equal(nrow(x), 5L) expect_equal(ncol(x), 4L) x <- read.xlsx(xlsxFile = xlsxFile, sheet = 4, skipEmptyCols = TRUE, skipEmptyRows = TRUE, colNames = TRUE) expect_equal(nrow(x), 5L - 1L) expect_equal(ncol(x), 4L) ############################################################## ## FALSE FALSE FALSE x <- read.xlsx(xlsxFile = xlsxFile, sheet = 4, skipEmptyCols = FALSE, skipEmptyRows = FALSE, colNames = FALSE) expect_equal(nrow(x), 6L) expect_equal(ncol(x), 8L) ## NA columns expect_true(all(is.na(x$X1))) expect_true(all(is.na(x$X2))) expect_true(all(is.na(x$X3))) expect_true(all(is.na(x$X7))) ## NA rows expect_true(all(is.na(x[3, ]))) ############################################################## ## FALSE FALSE TRUE x <- read.xlsx(xlsxFile = xlsxFile, sheet = 4, skipEmptyCols = FALSE, skipEmptyRows = FALSE, colNames = TRUE) expect_equal(nrow(x), 6L - 1L) expect_equal(ncol(x), 8L) ## NA columns expect_true(all(is.na(x$X1))) expect_true(all(is.na(x$X2))) expect_true(all(is.na(x$X3))) expect_true(all(is.na(x$X7))) ## NA rows expect_true(all(is.na(x[2, ]))) ############################################################## ## FALSE TRUE FALSE x <- read.xlsx(xlsxFile = xlsxFile, sheet = 4, skipEmptyCols = FALSE, skipEmptyRows = TRUE, colNames = FALSE) expect_equal(nrow(x), 5L) expect_equal(ncol(x), 8L) ## NA columns expect_true(all(is.na(x$X1))) expect_true(all(is.na(x$X2))) expect_true(all(is.na(x$X3))) expect_true(all(is.na(x$X7))) ############################################################## ## FALSE TRUE TRUE x <- read.xlsx(xlsxFile = xlsxFile, sheet = 4, skipEmptyCols = FALSE, skipEmptyRows = TRUE, colNames = TRUE) expect_equal(nrow(x), 5L - 1L) expect_equal(ncol(x), 8L) ## NA columns expect_true(all(is.na(x$X1))) expect_true(all(is.na(x$X2))) expect_true(all(is.na(x$X3))) expect_true(all(is.na(x$X7))) ############################################################## ## TRUE FALSE FALSE x <- read.xlsx(xlsxFile = xlsxFile, sheet = 4, skipEmptyCols = TRUE, skipEmptyRows = FALSE, colNames = FALSE) expect_equal(nrow(x), 6L) expect_equal(ncol(x), 4L) ## NA rows expect_true(all(is.na(x[3, ]))) ############################################################## ## TRUE FALSE TRUE x <- read.xlsx(xlsxFile = xlsxFile, sheet = 4, skipEmptyCols = TRUE, skipEmptyRows = FALSE, colNames = TRUE) expect_equal(nrow(x), 6L - 1L) expect_equal(ncol(x), 4L) ## NA rows expect_true(all(is.na(x[2, ]))) expect_equal(object = getwd(), curr_wd) }) context("Reading from workbook is identical to reading from file read_failure_test.xlsx") test_that("Reading example workbook read_failure_test.xlsx", { curr_wd <- getwd() fl <- system.file("extdata", "read_failure_test.xlsx", package = "openxlsx") wb <- loadWorkbook(fl) x <- read.xlsx(fl, sheet = 1, skipEmptyCols = TRUE) y <- read.xlsx(wb, sheet = 1, skipEmptyCols = TRUE) expect_true(all.equal(x, y)) x <- read.xlsx(fl, sheet = 1, skipEmptyCols = FALSE) y <- read.xlsx(wb, sheet = 1, skipEmptyCols = FALSE) expect_true(all.equal(x, y)) expect_equal(object = getwd(), curr_wd) }) openxlsx/tests/testthat/test-protect-worksheet.R0000644000176200001440000000146714374150317021742 0ustar liggesusers context("Protection") test_that("Protection", { wb <- createWorkbook() addWorksheet(wb, "s1") addWorksheet(wb, "s2") protectWorksheet(wb, sheet = "s1", protect = TRUE, password = "abcdefghij", lockSelectingLockedCells = FALSE, lockSelectingUnlockedCells = FALSE, lockFormattingCells = TRUE, lockFormattingColumns = TRUE, lockPivotTables = TRUE) expect_true(wb$worksheets[[1]]$sheetProtection == "") protectWorksheet(wb, sheet = "s2", protect = TRUE) expect_true(wb$worksheets[[2]]$sheetProtection == "") protectWorksheet(wb, sheet = "s2", protect = FALSE) expect_true(wb$worksheets[[2]]$sheetProtection == "") }) openxlsx/tests/testthat/test-Worksheet_naming.R0000644000176200001440000000176614374150317021557 0ustar liggesusers context("Worksheet naming") test_that("Worksheet names", { ### test for names without special character wb <- createWorkbook() sheetname <- "test" addWorksheet(wb, sheetname) expect_equal(sheetname,names(wb)) ### test for names with & wb <- createWorkbook() sheetname <- "S&P 500" addWorksheet(wb, sheetname) expect_equal(sheetname,names(wb)) expect_equal("S&P 500",wb$sheet_names) ### test for names with < wb <- createWorkbook() sheetname <- "<24 h" addWorksheet(wb, sheetname) expect_equal(sheetname,names(wb)) expect_equal("<24 h",wb$sheet_names) ### test for names with > wb <- createWorkbook() sheetname <- ">24 h" addWorksheet(wb, sheetname) expect_equal(sheetname,names(wb)) expect_equal(">24 h",wb$sheet_names) ### test for names with " wb <- createWorkbook() sheetname <- 'test "A"' addWorksheet(wb, sheetname) expect_equal(sheetname,names(wb)) expect_equal("test "A"",wb$sheet_names) }) openxlsx/tests/testthat/test-getBaseFont.R0000644000176200001440000000075714374150317020453 0ustar liggesuserstest_that("getBaseFont works", { wb <- createWorkbook() expect_equal( getBaseFont(wb), list( size = list(val = "11"), # should this be "#000000"? colour = list(rgb = "FF000000"), name = list(val = "Calibri") ) ) modifyBaseFont(wb, fontSize = 9, fontName = "Arial", fontColour = "red") expect_equal( getBaseFont(wb), list( size = list(val = "9"), colour = list(rgb = "FFFF0000"), name = list(val = "Arial") ) ) }) openxlsx/tests/testthat/test-CommentClass.R0000644000176200001440000000126314374150317020633 0ustar liggesuserstest_that("createComment() works", { # error checking expect_error(createComment("hi", width = 1), NA) expect_error(createComment("hi", width = 1L), NA) expect_error(createComment("hi", width = 1:2), "width") expect_error(createComment("hi", height = 1), NA) expect_error(createComment("hi", height = 1L), NA) expect_error(createComment("hi", height = 1:2), "height") expect_error(createComment("hi", visible = NULL)) expect_error(createComment("hi", visible = c(TRUE, FALSE)), "visible") expect_error(createComment("hi", author = 1)) expect_error(createComment("hi", author = c("a", "a")), "author") expect_s4_class(createComment("hello"), "Comment") }) openxlsx/tests/testthat/test-worksheet_ordering.R0000644000176200001440000001575214374150317022157 0ustar liggesusers context("Re-ordering worksheets.") test_that("Worksheet ordering from new Workbook", { genWS <- function(wb, sheetName) { addWorksheet(wb, sheetName) writeDataTable(wb, sheetName, data.frame("X" = sprintf("This is sheet: %s", sheetName)), colNames = FALSE) } wb <- createWorkbook() genWS(wb, "Sheet 1") genWS(wb, "Sheet 2") genWS(wb, "Sheet 3") tempFile <- temp_xlsx("orderingTest") ## no ordering saveWorkbook(wb, file = tempFile, overwrite = TRUE) expect_equal(names(wb), sprintf("Sheet %s", 1:3)) wb <- loadWorkbook(tempFile) expect_equal(names(wb), sprintf("Sheet %s", 1:3)) ## re-order doesnt do anything worksheetOrder(wb) <- c(3, 2, 1) expect_equal(names(wb), sprintf("Sheet %s", 1:3)) saveWorkbook(wb, file = tempFile, overwrite = TRUE) expect_equal(names(wb), sprintf("Sheet %s", 1:3)) ## reloading - reordered wb <- loadWorkbook(file = tempFile) expect_equal(names(wb), sprintf("Sheet %s", 3:1)) x <- read.xlsx(tempFile, sheet = 1)[[1]] expect_equal(x, "This is sheet: Sheet 3") x <- read.xlsx(tempFile, sheet = 2)[[1]] expect_equal(x, "This is sheet: Sheet 2") x <- read.xlsx(tempFile, sheet = 3)[[1]] expect_equal(x, "This is sheet: Sheet 1") ## reloading - reordered - reading from the workbook object x <- read.xlsx(wb, sheet = 1)[[1]] expect_equal(x, "This is sheet: Sheet 3") x <- read.xlsx(wb, sheet = 2)[[1]] expect_equal(x, "This is sheet: Sheet 2") x <- read.xlsx(wb, sheet = 3)[[1]] expect_equal(x, "This is sheet: Sheet 1") ## save and re-load again saveWorkbook(wb, tempFile, overwrite = TRUE) wb <- loadWorkbook(tempFile) expect_equal(names(wb), sprintf("Sheet %s", 3:1)) x <- read.xlsx(wb, sheet = 1)[[1]] expect_equal(x, "This is sheet: Sheet 3") x <- read.xlsx(wb, sheet = 2)[[1]] expect_equal(x, "This is sheet: Sheet 2") x <- read.xlsx(wb, sheet = 3)[[1]] expect_equal(x, "This is sheet: Sheet 1") x <- read.xlsx(wb, sheet = 1)[[1]] expect_equal(x, "This is sheet: Sheet 3") x <- read.xlsx(wb, sheet = 2)[[1]] expect_equal(x, "This is sheet: Sheet 2") x <- read.xlsx(wb, sheet = 3)[[1]] expect_equal(x, "This is sheet: Sheet 1") ###### re-order again worksheetOrder(wb) <- c(2, 3, 1) saveWorkbook(wb, tempFile, overwrite = TRUE) x <- read.xlsx(tempFile, sheet = 1)[[1]] expect_equal(x, "This is sheet: Sheet 2") x <- read.xlsx(tempFile, sheet = 2)[[1]] expect_equal(x, "This is sheet: Sheet 1") x <- read.xlsx(tempFile, sheet = 3)[[1]] expect_equal(x, "This is sheet: Sheet 3") wb <- loadWorkbook(tempFile) expect_equal(names(wb), sprintf("Sheet %s", c(2, 1, 3))) x <- read.xlsx(wb, sheet = 1)[[1]] expect_equal(x, "This is sheet: Sheet 2") x <- read.xlsx(wb, sheet = 2)[[1]] expect_equal(x, "This is sheet: Sheet 1") x <- read.xlsx(wb, sheet = 3)[[1]] expect_equal(x, "This is sheet: Sheet 3") ## add a worksheet genWS(wb, sheetName = "Sheet 4") x <- read.xlsx(wb, sheet = 4)[[1]] expect_equal(x, "This is sheet: Sheet 4") ## re-order and add worksheet then save worksheetOrder(wb) <- c(3, 1, 4, 2) names(wb) saveWorkbook(wb, tempFile, overwrite = TRUE) ## read from file x <- read.xlsx(tempFile, sheet = 1)[[1]] expect_equal(x, "This is sheet: Sheet 3") x <- read.xlsx(tempFile, sheet = 2)[[1]] expect_equal(x, "This is sheet: Sheet 2") x <- read.xlsx(tempFile, sheet = 3)[[1]] expect_equal(x, "This is sheet: Sheet 4") x <- read.xlsx(tempFile, sheet = 4)[[1]] expect_equal(x, "This is sheet: Sheet 1") x <- read.xlsx(tempFile, sheet = "Sheet 3")[[1]] expect_equal(x, "This is sheet: Sheet 3") x <- read.xlsx(tempFile, sheet = "Sheet 2")[[1]] expect_equal(x, "This is sheet: Sheet 2") x <- read.xlsx(tempFile, sheet = "Sheet 4")[[1]] expect_equal(x, "This is sheet: Sheet 4") x <- read.xlsx(tempFile, sheet = "Sheet 1")[[1]] expect_equal(x, "This is sheet: Sheet 1") ## read from workbook wb <- loadWorkbook(tempFile) x <- read.xlsx(wb, sheet = 1)[[1]] expect_equal(x, "This is sheet: Sheet 3") x <- read.xlsx(wb, sheet = 2)[[1]] expect_equal(x, "This is sheet: Sheet 2") x <- read.xlsx(wb, sheet = 3)[[1]] expect_equal(x, "This is sheet: Sheet 4") x <- read.xlsx(wb, sheet = 4)[[1]] expect_equal(x, "This is sheet: Sheet 1") ## read from workbook using name wb <- loadWorkbook(tempFile) x <- read.xlsx(wb, sheet = "Sheet 3")[[1]] expect_equal(x, "This is sheet: Sheet 3") x <- read.xlsx(wb, sheet = "Sheet 2")[[1]] expect_equal(x, "This is sheet: Sheet 2") x <- read.xlsx(wb, sheet = "Sheet 1")[[1]] expect_equal(x, "This is sheet: Sheet 1") x <- read.xlsx(wb, sheet = "Sheet 4")[[1]] expect_equal(x, "This is sheet: Sheet 4") writeData(wb, sheet = "Sheet 3", iris[1:10, 1:4], startRow = 5) x <- read.xlsx(wb, sheet = "Sheet 3", startRow = 5, colNames = TRUE) expect_equal(x, iris[1:10, 1:4]) writeData(wb, sheet = 4, iris[1:20, 1:4], startRow = 5) x <- read.xlsx(wb, sheet = 4, startRow = 5, colNames = TRUE) expect_equal(x, iris[1:20, 1:4]) writeData(wb, sheet = 2, iris[1:30, 1:4], startRow = 5) x <- read.xlsx(wb, sheet = 2, startRow = 5, colNames = TRUE) expect_equal(x, iris[1:30, 1:4]) ## reading from saved file saveWorkbook(wb, tempFile, TRUE) x <- read.xlsx(tempFile, sheet = "Sheet 3", startRow = 5, colNames = TRUE) expect_equal(x, iris[1:10, 1:4]) x <- read.xlsx(tempFile, sheet = 4, startRow = 5, colNames = TRUE) expect_equal(x, iris[1:20, 1:4]) x <- read.xlsx(tempFile, sheet = 2, startRow = 5, colNames = TRUE) expect_equal(x, iris[1:30, 1:4]) ## And finally load again wb <- loadWorkbook(tempFile) x <- read.xlsx(wb, sheet = "Sheet 3", startRow = 5, colNames = TRUE) expect_equal(x, iris[1:10, 1:4]) x <- read.xlsx(wb, sheet = 4, startRow = 5, colNames = TRUE) expect_equal(x, iris[1:20, 1:4]) x <- read.xlsx(wb, sheet = 2, startRow = 5, colNames = TRUE) expect_equal(x, iris[1:30, 1:4]) unlink(tempFile, recursive = TRUE, force = TRUE) rm(wb) }) test_that("Worksheet ordering from new Workbook", { tempFile <- temp_xlsx() wb <- createWorkbook() addWorksheet(wb = wb, sheetName = "Sheet 1", gridLines = FALSE) writeDataTable(wb = wb, sheet = 1, x = iris) addWorksheet(wb = wb, sheetName = "mtcars (Sheet 2)", gridLines = FALSE) writeData(wb = wb, sheet = 2, x = mtcars) addWorksheet(wb = wb, sheetName = "Sheet 3", gridLines = FALSE) writeData(wb = wb, sheet = 3, x = Formaldehyde) worksheetOrder(wb) names(wb) worksheetOrder(wb) <- c(1, 3, 2) # switch position of sheets 2 & 3 names(wb) writeData(wb, 2, 'This is still the "mtcars" worksheet', startCol = 15) names(wb) writeData(wb, "Sheet 3", "writing to sheet 3", startCol = 15) worksheetOrder(wb) names(wb) ## ordering within workbook is not changed saveWorkbook(wb, tempFile, overwrite = TRUE) worksheetOrder(wb) <- c(3, 2, 1) saveWorkbook(wb, tempFile, overwrite = TRUE) wb <- loadWorkbook(tempFile) worksheetOrder(wb) <- c(3, 2, 1) unlink(tempFile, recursive = TRUE, force = TRUE) rm(wb) }) openxlsx/tests/testthat/test-freeze_pane.R0000644000176200001440000000775714374150317020544 0ustar liggesusers context("Freeze Panes") test_that("Freeze Panes", { wb <- createWorkbook() addWorksheet(wb, "Sheet 1") freezePane(wb, 1, firstActiveRow = 3, firstActiveCol = 3) expected <- "" expect_equal(wb$worksheets[[1]]$freezePane, expected) wb <- createWorkbook() addWorksheet(wb, "Sheet 1") freezePane(wb, 1, firstActiveRow = 1, firstActiveCol = 3) expected <- "" expect_equal(wb$worksheets[[1]]$freezePane, expected) wb <- createWorkbook() addWorksheet(wb, "Sheet 1") freezePane(wb, 1, firstActiveRow = 2, firstActiveCol = 1) expected <- "" expect_equal(wb$worksheets[[1]]$freezePane, expected) wb <- createWorkbook() addWorksheet(wb, "Sheet 1") freezePane(wb, 1, firstActiveRow = 2, firstActiveCol = 4) expected <- "" expect_equal(wb$worksheets[[1]]$freezePane, expected) wb <- createWorkbook() addWorksheet(wb, "Sheet 1") freezePane(wb, 1, firstCol = TRUE) expected <- "" expect_equal(wb$worksheets[[1]]$freezePane, expected) wb <- createWorkbook() addWorksheet(wb, "Sheet 1") freezePane(wb, 1, firstRow = TRUE) expected <- "" expect_equal(wb$worksheets[[1]]$freezePane, expected) wb <- createWorkbook() addWorksheet(wb, "Sheet 1") freezePane(wb, 1, firstRow = TRUE, firstCol = TRUE) expected <- "" expect_equal(wb$worksheets[[1]]$freezePane, expected) wb <- createWorkbook() addWorksheet(wb, "Sheet 1") addWorksheet(wb, "Sheet 2") addWorksheet(wb, "Sheet 3") addWorksheet(wb, "Sheet 4") addWorksheet(wb, "Sheet 5") addWorksheet(wb, "Sheet 6") addWorksheet(wb, "Sheet 7") freezePane(wb, sheet = 1, firstActiveRow = 3, firstActiveCol = 3) freezePane(wb, sheet = 2, firstActiveRow = 1, firstActiveCol = 3) freezePane(wb, sheet = 3, firstActiveRow = 2, firstActiveCol = 1) freezePane(wb, sheet = 4, firstActiveRow = 2, firstActiveCol = 4) freezePane(wb, sheet = 5, firstCol = TRUE) freezePane(wb, sheet = 6, firstRow = TRUE) freezePane(wb, sheet = 7, firstRow = TRUE, firstCol = TRUE) expected <- "" expect_equal(wb$worksheets[[1]]$freezePane, expected) expected <- "" expect_equal(wb$worksheets[[2]]$freezePane, expected) expected <- "" expect_equal(wb$worksheets[[3]]$freezePane, expected) expected <- "" expect_equal(wb$worksheets[[4]]$freezePane, expected) expected <- "" expect_equal(wb$worksheets[[5]]$freezePane, expected) expected <- "" expect_equal(wb$worksheets[[6]]$freezePane, expected) expected <- "" expect_equal(wb$worksheets[[7]]$freezePane, expected) }) openxlsx/tests/testthat/test-border_parsing.R0000644000176200001440000003453414374150317021252 0ustar liggesusers context("Style Parsing") test_that("parsing border xml", { wb <- loadWorkbook(file = system.file("extdata", "loadExample.xlsx", package = "openxlsx")) styles <- getStyles(wb = wb) expected_borders <- list( NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, "medium", "medium", "medium", "medium", NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, "thin", NULL, "thin", "thin", NULL, "thin", "thin", "thin", "thin", "thin", "thin", "thin", NULL, "thin", "thin", "medium", "medium", "medium", "medium", "thin", "medium", "medium", "thin", NULL, "medium", "medium", "medium", "thin", "thin", "medium", "medium", "thin", "thin", "thick", NULL, "thick", "thick", "thick", NULL, NULL, NULL, NULL, NULL, "medium", "medium", NULL, "medium", "mediumDashed", "mediumDashed", "mediumDashed", NULL, NULL, NULL, NULL, NULL, NULL ) expect_equal(expected_borders, sapply(styles, "[[", "borderBottom")) expected_borders <- list( NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, "thin", "thin", "thin", NULL, NULL, NULL, NULL, "medium", NULL, NULL, NULL, NULL, NULL, "thin", NULL, "thin", "thick", NULL, "medium", "thin", "thin", "thin", "thin", "thick", "thick", "thin", "thin", "thin", "medium", "medium", "thin", "thick", "thick", "medium", "thin", "thick", "thick", "medium", "thin", "thin", "medium", "thin", "thin", "thin", "medium", "medium", "medium", NULL, NULL, NULL, NULL, NULL, NULL, "mediumDashed", "mediumDashed", "mediumDashed", NULL, NULL, NULL, NULL, NULL, NULL ) expect_equal(expected_borders, sapply(styles, "[[", "borderTop")) expected_borders <- list( NULL, NULL, NULL, NULL, NULL, NULL, "medium", NULL, "medium", NULL, NULL, NULL, NULL, NULL, NULL, "thin", NULL, NULL, "thin", NULL, NULL, "thin", "medium", NULL, NULL, NULL, NULL, "thin", "thin", "thin", NULL, "thin", NULL, NULL, NULL, "thin", "medium", "thin", "thin", "thin", "thin", "medium", "thin", "thin", NULL, "thin", "thick", "thin", "thick", "thick", "thin", "thin", "thin", "thin", "thick", NULL, "thin", "thin", "thin", "medium", NULL, NULL, "medium", NULL, "medium", NULL, "medium", NULL, "mediumDashed", NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL ) expect_equal(expected_borders, sapply(styles, "[[", "borderLeft")) expected_borders <- list( NULL, NULL, NULL, NULL, NULL, "medium", NULL, "medium", NULL, NULL, NULL, "medium", NULL, NULL, NULL, NULL, NULL, "thin", NULL, NULL, "thin", NULL, NULL, NULL, "thin", NULL, "thin", NULL, "thin", "thin", "thin", "thin", "thick", NULL, "thick", "medium", "thin", "thin", "thin", "thin", "medium", "thin", "thin", "medium", NULL, "medium", "thin", "thin", "medium", "medium", "thin", "thick", "medium", "medium", "thin", "medium", "thin", NULL, "thick", NULL, NULL, "medium", NULL, "medium", NULL, NULL, NULL, "medium", NULL, NULL, "mediumDashed", NULL, NULL, NULL, NULL, NULL, NULL ) expect_equal(expected_borders, sapply(styles, "[[", "borderRight")) ## COLOURS expected_borders <- list( NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, structure(list( indexed = "64" ), .Names = "indexed"), structure(list(indexed = "64"), .Names = "indexed"), structure(list(indexed = "64"), .Names = "indexed"), structure(list( indexed = "64" ), .Names = "indexed"), NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, structure(list(theme = "6"), .Names = "theme"), NULL, structure(list(theme = "6"), .Names = "theme"), structure(list( theme = "6" ), .Names = "theme"), NULL, structure(list( indexed = "64" ), .Names = "indexed"), structure(list( indexed = "64" ), .Names = "indexed"), structure(list( indexed = "64" ), .Names = "indexed"), structure(list( indexed = "64" ), .Names = "indexed"), structure(list( indexed = "64" ), .Names = "indexed"), structure(list( indexed = "64" ), .Names = "indexed"), structure(list( indexed = "64" ), .Names = "indexed"), NULL, structure(list( indexed = "64" ), .Names = "indexed"), structure(list( indexed = "64" ), .Names = "indexed"), structure(list( theme = "3" ), .Names = "theme"), structure(list(theme = "3"), .Names = "theme"), structure(list(theme = "3"), .Names = "theme"), structure(list( theme = "6" ), .Names = "theme"), structure(list(indexed = "64"), .Names = "indexed"), structure(list(theme = "6"), .Names = "theme"), structure(list( theme = "6" ), .Names = "theme"), structure(list(indexed = "64"), .Names = "indexed"), NULL, structure(list(theme = "6"), .Names = "theme"), structure(list( theme = "7\" tint=\"-0.249977111117893" ), .Names = "theme"), structure(list(theme = "7\" tint=\"-0.249977111117893"), .Names = "theme"), structure(list(indexed = "64"), .Names = "indexed"), structure(list( indexed = "64" ), .Names = "indexed"), structure(list( theme = "9\" tint=\"-0.249977111117893" ), .Names = "theme"), structure(list(theme = "9\" tint=\"-0.249977111117893"), .Names = "theme"), structure(list(indexed = "64"), .Names = "indexed"), structure(list( indexed = "64" ), .Names = "indexed"), structure(list( theme = "5\" tint=\"-0.249977111117893" ), .Names = "theme"), NULL, structure(list(theme = "5\" tint=\"-0.249977111117893"), .Names = "theme"), structure(list(theme = "5\" tint=\"-0.249977111117893"), .Names = "theme"), structure(list(theme = "5\" tint=\"-0.249977111117893"), .Names = "theme"), NULL, NULL, NULL, NULL, NULL, structure("9\" tint=\"-0.249977111117893", .Names = "theme"), structure("9\" tint=\"-0.249977111117893", .Names = "theme"), NULL, structure("9\" tint=\"-0.249977111117893", .Names = "theme"), structure("9\" tint=\"-0.249977111117893", .Names = "theme"), structure("9\" tint=\"-0.249977111117893", .Names = "theme"), structure("9\" tint=\"-0.249977111117893", .Names = "theme"), NULL, NULL, NULL, NULL, NULL, NULL ) expect_equal(expected_borders, sapply(styles, "[[", "borderBottomColour")) expected_borders <- list( NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, structure(list(theme = "6"), .Names = "theme"), structure(list(theme = "6"), .Names = "theme"), structure(list( theme = "6" ), .Names = "theme"), NULL, NULL, NULL, NULL, structure(list(indexed = "64"), .Names = "indexed"), NULL, NULL, NULL, NULL, NULL, structure(list(indexed = "64"), .Names = "indexed"), NULL, structure(list(indexed = "64"), .Names = "indexed"), structure(list(theme = "5\" tint=\"-0.249977111117893"), .Names = "theme"), NULL, structure(list(indexed = "64"), .Names = "indexed"), structure(list(indexed = "64"), .Names = "indexed"), structure(list( indexed = "64" ), .Names = "indexed"), structure(list( indexed = "64" ), .Names = "indexed"), structure(list( indexed = "64" ), .Names = "indexed"), structure(list( theme = "5\" tint=\"-0.249977111117893" ), .Names = "theme"), structure(list(theme = "5\" tint=\"-0.249977111117893"), .Names = "theme"), structure(list(indexed = "64"), .Names = "indexed"), structure(list( indexed = "64" ), .Names = "indexed"), structure(list( indexed = "64" ), .Names = "indexed"), structure(list( theme = "6" ), .Names = "theme"), structure(list(indexed = "64"), .Names = "indexed"), structure(list(indexed = "64"), .Names = "indexed"), structure(list( theme = "5\" tint=\"-0.249977111117893" ), .Names = "theme"), structure(list(theme = "5\" tint=\"-0.249977111117893"), .Names = "theme"), structure(list(theme = "7\" tint=\"-0.249977111117893"), .Names = "theme"), structure(list(indexed = "64"), .Names = "indexed"), structure(list( theme = "5\" tint=\"-0.249977111117893" ), .Names = "theme"), structure(list(theme = "5\" tint=\"-0.249977111117893"), .Names = "theme"), structure(list(theme = "9\" tint=\"-0.249977111117893"), .Names = "theme"), structure(list(indexed = "64"), .Names = "indexed"), structure(list( indexed = "64" ), .Names = "indexed"), structure(list( indexed = "64" ), .Names = "indexed"), structure(list( indexed = "64" ), .Names = "indexed"), structure(list( indexed = "64" ), .Names = "indexed"), structure(list( indexed = "64" ), .Names = "indexed"), structure("9\" tint=\"-0.249977111117893", .Names = "theme"), structure("9\" tint=\"-0.249977111117893", .Names = "theme"), structure("9\" tint=\"-0.249977111117893", .Names = "theme"), NULL, NULL, NULL, NULL, NULL, NULL, structure("9\" tint=\"-0.249977111117893", .Names = "theme"), structure("9\" tint=\"-0.249977111117893", .Names = "theme"), structure("9\" tint=\"-0.249977111117893", .Names = "theme"), NULL, NULL, NULL, NULL, NULL, NULL ) expect_equal(expected_borders, sapply(styles, "[[", "borderTopColour")) expected_borders <- list( NULL, NULL, NULL, NULL, NULL, NULL, structure(list(indexed = "64"), .Names = "indexed"), NULL, structure(list(indexed = "64"), .Names = "indexed"), NULL, NULL, NULL, NULL, NULL, NULL, structure(list(theme = "6"), .Names = "theme"), NULL, NULL, structure(list(theme = "6"), .Names = "theme"), NULL, NULL, structure(list(theme = "6"), .Names = "theme"), structure(list(indexed = "64"), .Names = "indexed"), NULL, NULL, NULL, NULL, structure(list(indexed = "64"), .Names = "indexed"), structure(list(indexed = "64"), .Names = "indexed"), structure(list( indexed = "64" ), .Names = "indexed"), NULL, structure(list( indexed = "64" ), .Names = "indexed"), NULL, NULL, NULL, structure(list(indexed = "64"), .Names = "indexed"), structure(list( theme = "3" ), .Names = "theme"), structure(list(indexed = "64"), .Names = "indexed"), structure(list(indexed = "64"), .Names = "indexed"), structure(list( indexed = "64" ), .Names = "indexed"), structure(list( indexed = "64" ), .Names = "indexed"), structure(list( theme = "6" ), .Names = "theme"), structure(list(indexed = "64"), .Names = "indexed"), structure(list(indexed = "64"), .Names = "indexed"), NULL, structure(list(indexed = "64"), .Names = "indexed"), structure(list( theme = "5\" tint=\"-0.249977111117893" ), .Names = "theme"), structure(list(indexed = "64"), .Names = "indexed"), structure(list( theme = "5\" tint=\"-0.249977111117893" ), .Names = "theme"), structure(list(theme = "5\" tint=\"-0.249977111117893"), .Names = "theme"), structure(list(indexed = "64"), .Names = "indexed"), structure(list( indexed = "64" ), .Names = "indexed"), structure(list( indexed = "64" ), .Names = "indexed"), structure(list( indexed = "64" ), .Names = "indexed"), structure(list( theme = "5\" tint=\"-0.249977111117893" ), .Names = "theme"), NULL, structure(list(indexed = "64"), .Names = "indexed"), structure(list(indexed = "64"), .Names = "indexed"), structure(list( indexed = "64" ), .Names = "indexed"), structure("9\" tint=\"-0.249977111117893", .Names = "theme"), NULL, NULL, structure("9\" tint=\"-0.249977111117893", .Names = "theme"), NULL, structure("9\" tint=\"-0.249977111117893", .Names = "theme"), NULL, structure(list(indexed = "64"), .Names = "indexed"), NULL, structure("9\" tint=\"-0.249977111117893", .Names = "theme"), NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL ) expect_equal(expected_borders, sapply(styles, "[[", "borderLeftColour")) expected_borders <- list( NULL, NULL, NULL, NULL, NULL, structure(list(indexed = "64"), .Names = "indexed"), NULL, structure(list(indexed = "64"), .Names = "indexed"), NULL, NULL, NULL, structure(list(indexed = "64"), .Names = "indexed"), NULL, NULL, NULL, NULL, NULL, structure(list(theme = "6"), .Names = "theme"), NULL, NULL, structure(list(theme = "6"), .Names = "theme"), NULL, NULL, NULL, structure(list(theme = "6"), .Names = "theme"), NULL, structure(list(indexed = "64"), .Names = "indexed"), NULL, structure(list(indexed = "64"), .Names = "indexed"), structure(list(indexed = "64"), .Names = "indexed"), structure(list( indexed = "64" ), .Names = "indexed"), structure(list( indexed = "64" ), .Names = "indexed"), structure(list( theme = "5\" tint=\"-0.249977111117893" ), .Names = "theme"), NULL, structure(list(theme = "5\" tint=\"-0.249977111117893"), .Names = "theme"), structure(list(theme = "3"), .Names = "theme"), structure(list( indexed = "64" ), .Names = "indexed"), structure(list( indexed = "64" ), .Names = "indexed"), structure(list( indexed = "64" ), .Names = "indexed"), structure(list( indexed = "64" ), .Names = "indexed"), structure(list( theme = "6" ), .Names = "theme"), structure(list(indexed = "64"), .Names = "indexed"), structure(list(indexed = "64"), .Names = "indexed"), structure(list( theme = "6" ), .Names = "theme"), NULL, structure(list( theme = "6" ), .Names = "theme"), structure(list(indexed = "64"), .Names = "indexed"), structure(list(indexed = "64"), .Names = "indexed"), structure(list( theme = "7\" tint=\"-0.249977111117893" ), .Names = "theme"), structure(list(theme = "7\" tint=\"-0.249977111117893"), .Names = "theme"), structure(list(indexed = "64"), .Names = "indexed"), structure(list( theme = "5\" tint=\"-0.249977111117893" ), .Names = "theme"), structure(list(theme = "9\" tint=\"-0.249977111117893"), .Names = "theme"), structure(list(theme = "9\" tint=\"-0.249977111117893"), .Names = "theme"), structure(list(indexed = "64"), .Names = "indexed"), structure(list( indexed = "64" ), .Names = "indexed"), structure(list( indexed = "64" ), .Names = "indexed"), NULL, structure(list( theme = "5\" tint=\"-0.249977111117893" ), .Names = "theme"), NULL, NULL, structure("9\" tint=\"-0.249977111117893", .Names = "theme"), NULL, structure("9\" tint=\"-0.249977111117893", .Names = "theme"), NULL, NULL, NULL, structure("9\" tint=\"-0.249977111117893", .Names = "theme"), NULL, NULL, structure("9\" tint=\"-0.249977111117893", .Names = "theme"), NULL, NULL, NULL, NULL, NULL, NULL ) expect_equal(expected_borders, sapply(styles, "[[", "borderRightColour")) }) openxlsx/tests/testthat/test-skip_empty_cols.R0000644000176200001440000001427514374150317021456 0ustar liggesusers context("Skip Empty Cols") test_that("skip empty rows", { xlsxfile <- temp_xlsx() df <- data.frame("x" = c(1, NA, NA, 2), "y" = c(1, NA, NA, 3)) write.xlsx(df, xlsxfile) wb <- loadWorkbook(xlsxfile) df1 <- readWorkbook(xlsxfile, skipEmptyRows = FALSE) df2 <- readWorkbook(wb, skipEmptyRows = FALSE) expect_equal(df, df1) expect_equal(df, df2) v <- c("A1", "B1", "A2", "B2", "A5", "B5") expect_equal(calc_number_rows(x = v, skipEmptyRows = TRUE), 3) expect_equal(calc_number_rows(x = v, skipEmptyRows = FALSE), 5) ## DONT SKIP df1 <- readWorkbook(xlsxfile, skipEmptyRows = TRUE) df2 <- readWorkbook(wb, skipEmptyRows = TRUE) expect_equal(nrow(df1), 2) expect_equal(nrow(df2), 2) expect_equivalent(df[c(1, 4), ], df1) expect_equivalent(df[c(1, 4), ], df2) }) test_that("Version 4 fixes from File", { fl <- system.file("extdata", "readTest.xlsx", package = "openxlsx") x <- read.xlsx(xlsxFile = fl, sheet = 4, skipEmptyCols = TRUE, skipEmptyRows = TRUE, colNames = FALSE) expect_equal(nrow(x), 5L) expect_equal(ncol(x), 4L) x <- read.xlsx(xlsxFile = fl, sheet = 4, skipEmptyCols = TRUE, skipEmptyRows = TRUE, colNames = TRUE) expect_equal(nrow(x), 5L - 1L) expect_equal(ncol(x), 4L) ############################################################## ## FALSE FALSE FALSE x <- read.xlsx(xlsxFile = fl, sheet = 4, skipEmptyCols = FALSE, skipEmptyRows = FALSE, colNames = FALSE) expect_equal(nrow(x), 6L) expect_equal(ncol(x), 8L) ## NA columns expect_true(all(is.na(x$X1))) expect_true(all(is.na(x$X2))) expect_true(all(is.na(x$X3))) expect_true(all(is.na(x$X7))) ## NA rows expect_true(all(is.na(x[3, ]))) ############################################################## ## FALSE FALSE TRUE x <- read.xlsx(xlsxFile = fl, sheet = 4, skipEmptyCols = FALSE, skipEmptyRows = FALSE, colNames = TRUE) expect_equal(nrow(x), 6L - 1L) expect_equal(ncol(x), 8L) ## NA columns expect_true(all(is.na(x$X1))) expect_true(all(is.na(x$X2))) expect_true(all(is.na(x$X3))) expect_true(all(is.na(x$X7))) ## NA rows expect_true(all(is.na(x[2, ]))) ############################################################## ## FALSE TRUE FALSE x <- read.xlsx(xlsxFile = fl, sheet = 4, skipEmptyCols = FALSE, skipEmptyRows = TRUE, colNames = FALSE) expect_equal(nrow(x), 5L) expect_equal(ncol(x), 8L) ## NA columns expect_true(all(is.na(x$X1))) expect_true(all(is.na(x$X2))) expect_true(all(is.na(x$X3))) expect_true(all(is.na(x$X7))) ############################################################## ## FALSE TRUE TRUE x <- read.xlsx(xlsxFile = fl, sheet = 4, skipEmptyCols = FALSE, skipEmptyRows = TRUE, colNames = TRUE) expect_equal(nrow(x), 5L - 1L) expect_equal(ncol(x), 8L) ## NA columns expect_true(all(is.na(x$X1))) expect_true(all(is.na(x$X2))) expect_true(all(is.na(x$X3))) expect_true(all(is.na(x$X7))) ############################################################## ## TRUE FALSE FALSE x <- read.xlsx(xlsxFile = fl, sheet = 4, skipEmptyCols = TRUE, skipEmptyRows = FALSE, colNames = FALSE) expect_equal(nrow(x), 6L) expect_equal(ncol(x), 4L) ## NA rows expect_true(all(is.na(x[3, ]))) ############################################################## ## TRUE FALSE TRUE x <- read.xlsx(xlsxFile = fl, sheet = 4, skipEmptyCols = TRUE, skipEmptyRows = FALSE, colNames = TRUE) expect_equal(nrow(x), 6L - 1L) expect_equal(ncol(x), 4L) ## NA rows expect_true(all(is.na(x[2, ]))) }) test_that("Version 4 fixes from Workbook Objects", { fl <- loadWorkbook(system.file("extdata", "readTest.xlsx", package = "openxlsx")) x <- read.xlsx(xlsxFile = fl, sheet = 4, skipEmptyCols = TRUE, skipEmptyRows = TRUE, colNames = FALSE) expect_equal(nrow(x), 5L) expect_equal(ncol(x), 4L) x <- read.xlsx(xlsxFile = fl, sheet = 4, skipEmptyCols = TRUE, skipEmptyRows = TRUE, colNames = TRUE) expect_equal(nrow(x), 5L - 1L) expect_equal(ncol(x), 4L) ############################################################## ## FALSE FALSE FALSE x <- read.xlsx(xlsxFile = fl, sheet = 4, skipEmptyCols = FALSE, skipEmptyRows = FALSE, colNames = FALSE) expect_equal(nrow(x), 6L) expect_equal(ncol(x), 8L) ## NA columns expect_true(all(is.na(x$X1))) expect_true(all(is.na(x$X2))) expect_true(all(is.na(x$X3))) expect_true(all(is.na(x$X7))) ## NA rows expect_true(all(is.na(x[3, ]))) ############################################################## ## FALSE FALSE TRUE x <- read.xlsx(xlsxFile = fl, sheet = 4, skipEmptyCols = FALSE, skipEmptyRows = FALSE, colNames = TRUE) expect_equal(nrow(x), 6L - 1L) expect_equal(ncol(x), 8L) ## NA columns expect_true(all(is.na(x$X1))) expect_true(all(is.na(x$X2))) expect_true(all(is.na(x$X3))) expect_true(all(is.na(x$X7))) ## NA rows expect_true(all(is.na(x[2, ]))) ############################################################## ## FALSE TRUE FALSE x <- read.xlsx(xlsxFile = fl, sheet = 4, skipEmptyCols = FALSE, skipEmptyRows = TRUE, colNames = FALSE) expect_equal(nrow(x), 5L) expect_equal(ncol(x), 8L) ## NA columns expect_true(all(is.na(x$X1))) expect_true(all(is.na(x$X2))) expect_true(all(is.na(x$X3))) expect_true(all(is.na(x$X7))) ############################################################## ## FALSE TRUE TRUE x <- read.xlsx(xlsxFile = fl, sheet = 4, skipEmptyCols = FALSE, skipEmptyRows = TRUE, colNames = TRUE) expect_equal(nrow(x), 5L - 1L) expect_equal(ncol(x), 8L) ## NA columns expect_true(all(is.na(x$X1))) expect_true(all(is.na(x$X2))) expect_true(all(is.na(x$X3))) expect_true(all(is.na(x$X7))) ############################################################## ## TRUE FALSE FALSE x <- read.xlsx(xlsxFile = fl, sheet = 4, skipEmptyCols = TRUE, skipEmptyRows = FALSE, colNames = FALSE) expect_equal(nrow(x), 6L) expect_equal(ncol(x), 4L) ## NA rows expect_true(all(is.na(x[3, ]))) ############################################################## ## TRUE FALSE TRUE x <- read.xlsx(xlsxFile = fl, sheet = 4, skipEmptyCols = TRUE, skipEmptyRows = FALSE, colNames = TRUE) expect_equal(nrow(x), 6L - 1L) expect_equal(ncol(x), 4L) ## NA rows expect_true(all(is.na(x[2, ]))) }) openxlsx/tests/testthat/test-page_setup.R0000644000176200001440000000233614374150317020401 0ustar liggesusers context("Page setup") test_that("Page setup", { wb <- createWorkbook() addWorksheet(wb, "s1") addWorksheet(wb, "s2") pageSetup(wb, sheet = "s1", orientation = "landscape", scale = 100, left = 0.1, right = 0.1, top = .75, bottom = .75, header = 0.1, footer = 0.1, fitToWidth = TRUE, fitToHeight = TRUE, paperSize = 1, summaryRow = "below", summaryCol = "right" ) pageSetup(wb, sheet = 2, orientation = "landscape", scale = 100, left = 0.1, right = 0.1, top = .75, bottom = .75, header = 0.1, footer = 0.1, fitToWidth = TRUE, fitToHeight = TRUE, paperSize = 1, summaryRow = "below", summaryCol = "right" ) expect_equal(wb$worksheets[[1]]$pageSetup, wb$worksheets[[2]]$pageSetup) v <- gsub(" ", "", wb$worksheets[[1]]$pageSetup, fixed = TRUE) expect_true(grepl('paperSize="1"', v)) expect_true(grepl('orientation="landscape"', v)) expect_true(grepl('fitToWidth="1"', v)) expect_true(grepl('fitToHeight="1"', v)) pr <- wb$worksheets[[1]]$sheetPr # SheetPr will be a character vector of length 2; the first entry will # be for PageSetupPr, inserted by `fitToWidth`/`fitToHeight`. expect_true(grepl('', pr[2], fixed = TRUE)) }) openxlsx/tests/testthat/test-load_read_file_read_equality.R0000644000176200001440000000571614656134061024074 0ustar liggesusers context("Reading from workbook is identical to reading from file") test_that("Reading from loaded workbook", { wb <- createWorkbook() for (i in 1:4) { addWorksheet(wb, sprintf("Sheet %s", i)) } writeData(wb, sheet = 1, x = mtcars, colNames = TRUE, rowNames = TRUE, startRow = 10, startCol = 5, borders = "all") writeData(wb, sheet = 2, x = mtcars, colNames = TRUE, rowNames = FALSE, startRow = 10, startCol = 5, borders = "rows") writeData(wb, sheet = 3, x = mtcars, colNames = FALSE, rowNames = TRUE, startRow = 2, startCol = 2, borders = "columns") writeData(wb, sheet = 4, x = mtcars, colNames = FALSE, rowNames = FALSE, startRow = 12, startCol = 1, borders = "surrounding") tempFile <- temp_xlsx() saveWorkbook(wb, tempFile, overwrite = TRUE) wb <- loadWorkbook(tempFile) ## colNames = TRUE, rowNames = TRUE x <- read.xlsx(wb, 1, colNames = TRUE, rowNames = TRUE) expect_equal(object = mtcars, expected = x, check.attributes = TRUE) ## colNames = TRUE, rowNames = FALSE x <- read.xlsx(wb, sheet = 2, colNames = TRUE, rowNames = FALSE) expect_equal(object = mtcars, expected = x, check.attributes = FALSE) expect_equal(object = colnames(mtcars), expected = colnames(x), check.attributes = FALSE) ## colNames = FALSE, rowNames = TRUE x <- read.xlsx(wb, sheet = 3, colNames = FALSE, rowNames = TRUE) expect_equal(object = mtcars, expected = x, check.attributes = FALSE) expect_equal(object = rownames(mtcars), expected = rownames(x)) ## colNames = FALSE, rowNames = FALSE x <- read.xlsx(wb, sheet = 4, colNames = FALSE, rowNames = FALSE) expect_equal(object = mtcars, expected = x, check.attributes = FALSE) unlink(tempFile, recursive = TRUE, force = TRUE) }) test_that("na.convert = TRUE", { fl <- system.file("extdata", "na_convert.xlsx", package = "openxlsx") # optional return empty cell as "" wb1 <- loadWorkbook(fl, na.convert = FALSE) tmp_no_na <- temp_xlsx("na_convert_false") saveWorkbook(wb1, tmp_no_na) # default return emtpy cell as "NA" string wb2 <- loadWorkbook(fl, na.convert = TRUE) tmp_has_na <- temp_xlsx("na_convert_true") saveWorkbook(wb2, tmp_has_na) # # FIXME both return identical output # read.xlsx(wb1) # read.xlsx(wb2) # # for visual comparison # openXL(tmp_has_na) # openXL(tmp_no_na) ## new option # check value of last cells: index position of shared strings exp <- c("1", "0", "0", "0", "0", "0") got <- tail(wb1$worksheets[[1]]$sheet_data$v) expect_equal(exp, got) # check value of shared string: index position 0 exp <- "" got <- wb1$sharedStrings[[1]] expect_equal(exp, got) ## default # check value of last cells: index position of shared strings exp <- c("1", "0", "0", "0", "0", "0") got <- tail(wb2$worksheets[[1]]$sheet_data$v) expect_equal(exp, got) # check value of shared string: index position 0 exp <- "NA" got <- wb2$sharedStrings[[1]] expect_equal(exp, got) }) openxlsx/tests/testthat/test-writing_posixct.R0000644000176200001440000000551514374150317021503 0ustar liggesusers context("Writing Posixct") test_that("Writing Posixct with writeData & writeDataTable", { options("openxlsx.datetimeFormat" = "dd/mm/yy hh:mm") tstart <- strptime("30/05/2017 08:30", "%d/%m/%Y %H:%M", tz = "CET") TimeDT <- c(0, 5, 10, 15, 30, 60, 120, 180, 240, 480, 720, 1440) * 60 + tstart df <- data.frame(TimeDT, TimeTxt = format(TimeDT, "%Y-%m-%d %H:%M")) wb <- createWorkbook() addWorksheet(wb, "writeData") addWorksheet(wb, "writeDataTable") writeData(wb, "writeData", df, startCol = 2, startRow = 3, rowNames = FALSE) writeDataTable(wb, "writeDataTable", df, startCol = 2, startRow = 3) wd <- as.numeric(wb$worksheets[[1]]$sheet_data$v) wdt <- as.numeric(wb$worksheets[[2]]$sheet_data$v) expected <- c( 0, 1, 42885.3541666667, 2, 42885.3576388889, 3, 42885.3611111111, 4, 42885.3645833333, 5, 42885.375, 6, 42885.3958333333, 7, 42885.4375, 8, 42885.4791666667, 9, 42885.5208333333, 10, 42885.6875, 11, 42885.8541666667, 12, 42886.3541666667, 13 ) expect_equal(object = round(wd, 12), expected = expected) expect_equal(object = round(wdt, 12), expected = expected) expect_equal(object = wd, expected = wdt) options("openxlsx.datetimeFormat" = "yyyy-mm-dd hh:mm:ss") }) test_that("Writing mixed EDT/EST Posixct with writeData & writeDataTable", { options("openxlsx.datetimeFormat" = "dd/mm/yy hh:mm") tstart1 <- as.POSIXct("12/03/2018 08:30", format = "%d/%m/%Y %H:%M") tstart2 <- as.POSIXct("10/03/2018 08:30", format = "%d/%m/%Y %H:%M") TimeDT1 <- c(NA, 0, 10, 30, 60, 120, 240, 720, 1440) * 60 + tstart1 TimeDT2 <- c(0, 10, 30, 60, 120, 240, 720, NA, 1440) * 60 + tstart2 df <- data.frame( timeval = c(TimeDT1, TimeDT2), timetxt = format(c(TimeDT1, TimeDT2), "%Y-%m-%d %H:%M") ) wb <- createWorkbook() addWorksheet(wb, "writeData") addWorksheet(wb, "writeDataTable") writeData(wb, "writeData", df, startCol = 2, startRow = 3, rowNames = FALSE) writeDataTable(wb, "writeDataTable", df, startCol = 2, startRow = 3) wd <- as.numeric(wb$worksheets[[1]]$sheet_data$v) wdt <- as.numeric(wb$worksheets[[2]]$sheet_data$v) wd <- wd[wb$worksheets[[1]]$sheet_data$cols == 2] wdt <- wdt[wb$worksheets[[2]]$sheet_data$cols == 2] # drop any integer indexes introduced in write wd <- wd[wd != 0 | is.na(wd)] wdt <- wdt[wdt != 0 | is.na(wdt)] # sort everything wd <- convertToDateTime(wd[order(wd)]) wdt <- convertToDateTime(wdt[order(wdt)]) expected <- df$timeval[order(df$timeval)] # compare expect_equal( object = wd, expected = expected, tolerance = 10 ^ -10, check.tzone = FALSE ) expect_equal( object = wdt, expected = expected, tolerance = 10 ^ -10, check.tzone = TRUE ) expect_equal( object = wd, expected = wdt, check.tzone = TRUE ) options("openxlsx.datetimeFormat" = "yyyy-mm-dd hh:mm:ss") }) openxlsx/tests/testthat/test-read_xlsx_random_seed.R0000644000176200001440000000047014374150317022573 0ustar liggesuserstest_that("read_xlsx() does not change random seed", { rs <- .Random.seed expect_identical(rs, .Random.seed) tf <- temp_xlsx() expect_identical(rs, .Random.seed) write.xlsx(data.frame(a = 1), tf) expect_identical(rs, .Random.seed) read.xlsx(tf) expect_identical(rs, .Random.seed) unlink(tf) }) openxlsx/tests/testthat/test-writing_sheet_data.R0000644000176200001440000013140614374150317022112 0ustar liggesusers context("Writing Sheet Data XML") test_that("Writing sheetData rows XML - iris", { temp_file <- temp_xlsx() openxlsx::write.xlsx(iris, temp_file) unzip(temp_file, exdir = tempdir()) x <- readUTF8(file.path(tempdir(), "xl", "worksheets", "sheet1.xml")) rows <- unlist(regmatches(x = x, gregexpr("", x))) expected_rows <- c( "01234", "5.13.51.40.25", "4.931.40.25", "4.73.21.30.25", "4.63.11.50.25", "53.61.40.25", "5.43.91.70.45", "4.63.41.40.35", "53.41.50.25", "4.42.91.40.25", "4.93.11.50.15", "5.43.71.50.25", "4.83.41.60.25", "4.831.40.15", "4.331.10.15", "5.841.20.25", "5.74.41.50.45", "5.43.91.30.45", "5.13.51.40.35", "5.73.81.70.35", "5.13.81.50.35", "5.43.41.70.25", "5.13.71.50.45", "4.63.610.25", "5.13.31.70.55", "4.83.41.90.25", "531.60.25", "53.41.60.45", "5.23.51.50.25", "5.23.41.40.25", "4.73.21.60.25", "4.83.11.60.25", "5.43.41.50.45", "5.24.11.50.15", "5.54.21.40.25", "4.93.11.50.25", "53.21.20.25", "5.53.51.30.25", "4.93.61.40.15", "4.431.30.25", "5.13.41.50.25", "53.51.30.35", "4.52.31.30.35", "4.43.21.30.25", "53.51.60.65", "5.13.81.90.45", "4.831.40.35", "5.13.81.60.25", "4.63.21.40.25", "5.33.71.50.25", "53.31.40.25", "73.24.71.46", "6.43.24.51.56", "6.93.14.91.56", "5.52.341.36", "6.52.84.61.56", "5.72.84.51.36", "6.33.34.71.66", "4.92.43.316", "6.62.94.61.36", "5.22.73.91.46", "523.516", "5.934.21.56", "62.2416", "6.12.94.71.46", "5.62.93.61.36", "6.73.14.41.46", "5.634.51.56", "5.82.74.116", "6.22.24.51.56", "5.62.53.91.16", "5.93.24.81.86", "6.12.841.36", "6.32.54.91.56", "6.12.84.71.26", "6.42.94.31.36", "6.634.41.46", "6.82.84.81.46", "6.7351.76", "62.94.51.56", "5.72.63.516", "5.52.43.81.16", "5.52.43.716", "5.82.73.91.26", "62.75.11.66", "5.434.51.56", "63.44.51.66", "6.73.14.71.56", "6.32.34.41.36", "5.634.11.36", "5.52.541.36", "5.52.64.41.26", "6.134.61.46", "5.82.641.26", "52.33.316", "5.62.74.21.36", "5.734.21.26", "5.72.94.21.36", "6.22.94.31.36", "5.12.531.16", "5.72.84.11.36", "6.33.362.57", "5.82.75.11.97", "7.135.92.17", "6.32.95.61.87", "6.535.82.27", "7.636.62.17", "4.92.54.51.77", "7.32.96.31.87", "6.72.55.81.87", "7.23.66.12.57", "6.53.25.127", "6.42.75.31.97", "6.835.52.17", "5.72.5527", "5.82.85.12.47", "6.43.25.32.37", "6.535.51.87", "7.73.86.72.27", "7.72.66.92.37", "62.251.57", "6.93.25.72.37", "5.62.84.927", "7.72.86.727", "6.32.74.91.87", "6.73.35.72.17", "7.23.261.87", "6.22.84.81.87", "6.134.91.87", "6.42.85.62.17", "7.235.81.67", "7.42.86.11.97", "7.93.86.427", "6.42.85.62.27", "6.32.85.11.57", "6.12.65.61.47", "7.736.12.37", "6.33.45.62.47", "6.43.15.51.87", "634.81.87", "6.93.15.42.17", "6.73.15.62.47", "6.93.15.12.37", "5.82.75.11.97", "6.83.25.92.37", "6.73.35.72.57", "6.735.22.37", "6.32.551.97", "6.535.227", "6.23.45.42.37", "5.935.11.87" ) for (i in seq_along(expected_rows)) { expect_equal(rows[i], expected = expected_rows[i]) } unlink(x = temp_file) }) test_that("Writing sheetData rows XML - mtcars", { temp_file <- temp_xlsx() openxlsx::write.xlsx(mtcars, temp_file, rowNames = TRUE) unzip(temp_file, exdir = tempdir()) x <- readUTF8(file.path(tempdir(), "xl", "worksheets", "sheet1.xml")) rows <- unlist(regmatches(x = x, gregexpr("", x))) expected_rows <- c( "01234567891011", "122161601103.92.6216.460144", "132161601103.92.87517.020144", "1422.84108933.852.3218.611141", "1521.462581103.083.21519.441031", "1618.783601753.153.4417.020032", "1718.162251052.763.4620.221031", "1814.383602453.213.5715.840034", "1924.44146.7623.693.19201042", "2022.84140.8953.923.1522.91042", "2119.26167.61233.923.4418.31044", "2217.86167.61233.923.4418.91044", "2316.48275.81803.074.0717.40033", "2417.38275.81803.073.7317.60033", "2515.28275.81803.073.78180033", "2610.484722052.935.2517.980034", "2710.4846021535.42417.820034", "2814.784402303.235.34517.420034", "2932.4478.7664.082.219.471141", "3030.4475.7524.931.61518.521142", "3133.9471.1654.221.83519.91141", "3221.54120.1973.72.46520.011031", "3315.583181502.763.5216.870032", "3415.283041503.153.43517.30032", "3513.383502453.733.8415.410034", "3619.284001753.083.84517.050032", "3727.3479664.081.93518.91141", "38264120.3914.432.1416.70152", "3930.4495.11133.771.51316.91152", "4015.883512644.223.1714.50154", "4119.761451753.622.7715.50156", "421583013353.543.5714.60158", "4321.441211094.112.7818.61142" ) for (i in seq_along(expected_rows)) { expect_equal(rows[i], expected = expected_rows[i]) } }) openxlsx/tests/testthat/test-encoding.R0000644000176200001440000000470514656134061020036 0ustar liggesusers context("Encoding Tests") test_that("Write read encoding equality", { tempFile <- temp_xlsx() wb <- createWorkbook() for (i in 1:4) { addWorksheet(wb, sprintf("Sheet %s", i)) } df <- data.frame("X" = c("测试", "一下"), stringsAsFactors = FALSE) writeDataTable(wb, sheet = 1, x = df) saveWorkbook(wb, tempFile, overwrite = TRUE) x <- read.xlsx(tempFile) expect_equal(x, df) x <- read.xlsx(wb) expect_equal(x, df) ## reload wb <- loadWorkbook(tempFile) x <- read.xlsx(wb) expect_equal(x, df) saveWorkbook(wb, tempFile, overwrite = TRUE) x <- read.xlsx(tempFile) expect_equal(x, df) unlink(tempFile, recursive = TRUE, force = TRUE) rm(wb) }) test_that("Support non-ASCII strings not in UTF-8 encodings", { non_ascii <- c("\u4f60\u597d", "\u4e2d\u6587", "\u6c49\u5b57", "\u5de5\u4f5c\u7c3f1", "\u6d4b\u8bd5\u540d\u5b571", "\u6d4b2", "\u5de52", "\u5de5\u4f5c3") # Ideally, we should test against native encodings. However, the testing machine's # locale encoding may not be able to represent the non-ascii letters, when # it's the case, we use the UTF-8 encoding as it is. if (identical( enc2utf8(enc2native(non_ascii)), non_ascii )) { non_ascii <- enc2native(non_ascii) } non_ascii_df <- data.frame( X = non_ascii, Y = seq_along(non_ascii), stringsAsFactors = FALSE ) colnames(non_ascii_df) <- non_ascii[3:4] file <- temp_xlsx() wb <- createWorkbook(creator = non_ascii[1]) ws <- addWorksheet(wb, non_ascii[2]) writeDataTable(wb, ws, non_ascii_df, tableName = non_ascii[3]) writeData(wb, ws, non_ascii_df, xy = list("D", 1), name = non_ascii[4]) writeComment(wb, ws, 1, 1, comment = createComment(non_ascii[5], non_ascii[6])) writeFormula(wb, ws, x = sprintf('"%s"&"%s"', non_ascii[1], non_ascii[2]), xy = list("G", 1)) createNamedRegion(wb, ws, 7, 1, name = non_ascii[7]) saveWorkbook(wb, file) wb2 <- loadWorkbook(file) expect_equal( getCreators(wb2), non_ascii[1] ) expect_equal( getSheetNames(file), non_ascii[2] ) expect_equivalent( getTables(wb2, ws), non_ascii[3] ) expect_equivalent( getNamedRegions(wb2), non_ascii[c(4, 7)] ) expect_equal( wb2$comments[[1]][[1]][c("comment", "author")], setNames(as.list(non_ascii[5:6]), c("comment", "author")) ) expect_equal( read.xlsx(file, ws, cols = 1:2), non_ascii_df ) expect_equal( read.xlsx(file, ws, cols = 4:5), non_ascii_df ) }) openxlsx/tests/testthat/test-outlines.R0000644000176200001440000001207414656134061020110 0ustar liggesuserscontext("Workbook groupings") # groupRows() requires assigning to wb to global environment # For reference, see here: https://github.com/r-lib/testthat/issues/720 test_that("group columns", { # Grouping then setting widths updates hidden wb <- createWorkbook() addWorksheet(wb, "Sheet 1") groupColumns(wb, "Sheet 1", 2:3, hidden = TRUE) setColWidths(wb, "Sheet 1", 2, widths = "18", hidden = FALSE) expect_equal(attr(wb$colOutlineLevels[[1]], "hidden")[attr(wb$colOutlineLevels[[1]], "names") == 2], "0") # Setting column widths then grouping wb <- createWorkbook() addWorksheet(wb, "Sheet 1") setColWidths(wb, "Sheet 1", 2:3, widths = "18", hidden = FALSE) groupColumns(wb, "Sheet 1", 1:2, hidden = TRUE) expect_equal(attr(wb$colWidths[[1]], "hidden")[attr(wb$colWidths[[1]], "names") == 2], "1") }) test_that("group rows", { wb <- createWorkbook() assign("wb", wb, envir = .GlobalEnv) addWorksheet(wb, "Sheet 1") groupRows(wb, "Sheet 1", 1:4, hidden = TRUE) expect_equal(names(wb$outlineLevels[[1]]), c("1", "2", "3", "4")) expect_equal(unique(attr(wb$outlineLevels[[1]], "hidden")), "1") rm(wb) }) test_that("group rows 2", { wb <- createWorkbook() addWorksheet(wb, 'Sheet1') addWorksheet(wb, 'Sheet2') writeData(wb, "Sheet1", iris) writeData(wb, "Sheet2", iris) ## create list of groups # lines used for grouping (here: species) grp <- list( seq(2, 51), seq(52, 101), seq(102, 151) ) # assign group levels names(grp) <- c("1","0","1") groupRows(wb, "Sheet1", rows = grp) # different grouping names(grp) <- c("1","2","3") groupRows(wb, "Sheet2", rows = grp) expect_equal(unique(wb$outlineLevels[[1]]), c("1", "0")) expect_equal(unique(wb$outlineLevels[[2]]), c("1", "2", "3")) }) test_that("ungroup columns", { # OutlineLevelCol is removed from SheetFormatPr when no # column groupings left wb <- createWorkbook() addWorksheet(wb, "Sheet 1") setColWidths(wb, "Sheet 1", 2:3, widths = "18", hidden = FALSE) groupColumns(wb, "Sheet 1", 1:3, hidden = TRUE) ungroupColumns(wb, "Sheet 1", 1:3) expect_equal(unique(attr(wb$colWidths[[1]], "hidden")[attr(wb$colWidths[[1]], "names") %in% c(2, 3)]), "0") }) test_that("ungroup rows", { wb <- createWorkbook() addWorksheet(wb, "Sheet 1") groupRows(wb, "Sheet 1", 1:3, hidden = TRUE) ungroupRows(wb, "Sheet 1", 1:3) expect_equal(length(wb$outlineLevels[[1]]), 0L) }) test_that("no warnings #485", { wb <- createWorkbook() addWorksheet(wb, "Sheet 1") expect_silent( groupRows( rows = c(1), sheet = "Sheet 1", wb = wb ) ) expect_silent( ungroupRows( rows = c(1), sheet = "Sheet 1", wb = wb ) ) }) test_that("loading workbook preserves outlines", { fl <- system.file("extdata", "groupTest.xlsx", package = "openxlsx") wb <- loadWorkbook(fl) expect_equal(names(wb$colOutlineLevels[[1]]), c("2", "3", "4")) expect_equal(names(wb$outlineLevels[[1]]), c("3", "4")) expect_equal(unique(attr(wb$outlineLevels[[1]], "hidden")[names(wb$outlineLevels[[1]]) %in% c("3", "4")]), "true") wbb <- createWorkbook() addWorksheet(wbb, sheetName = "Test", gridLines = FALSE, tabColour = "deepskyblue") writeData(wbb, sheet = "Test", x = c(colA = "testcol1", colB = "testcol2")) groupColumns(wbb, "Test", cols = 2:3, hidden = FALSE) setColWidths(wbb, sheet = "Test", cols=c(1:5), widths = c(9,9,9,9,9)) groupColumns(wbb, "Test", cols = 5:10, hidden = FALSE) setColWidths(wbb, "Test", cols = 15:20, widths = 9) tf <- temp_xlsx("test") tf2 <- temp_xlsx("test2") saveWorkbook(wbb, tf, overwrite = TRUE) test <- wbb$worksheets[[1]]$copy() wb <- loadWorkbook(tf) saveWorkbook(wb, tf2, overwrite = TRUE) testthat::expect_equal(wb$worksheets[[1]], test) unlink(c("tf", "tf2"), recursive = TRUE, force = TRUE) }) test_that("Grouping after setting colwidths has correct length of hidden attributes", { # Issue #100 - https://github.com/ycphs/openxlsx/issues/100 wb <- createWorkbook(title = "column width and grouping error") addWorksheet(wb, sheetName = 1) setColWidths( wb, sheet = 1, cols = 1:100, widths = 8 ) groupColumns(wb, sheet = 1, cols = 20:100, hidden = TRUE) expect_equal(length(wb$colOutlineLevels[[1]]), length(attr(wb$colOutlineLevels[[1]], "hidden"))) }) test_that("Consecutive calls to saveWorkbook doesn't corrupt attributes", { wbb <- createWorkbook() addWorksheet(wbb, sheetName = "Test", gridLines = FALSE, tabColour = "deepskyblue") writeData(wbb, sheet = "Test", x = c(colA = "testcol1", colB = "testcol2")) groupColumns(wbb, "Test", cols = 2:3, hidden = FALSE) setColWidths(wbb, sheet = "Test", cols=c(1:5), widths = c(9,9,9,9,9)) groupColumns(wbb, "Test", cols = 5:10, hidden = FALSE) setColWidths(wbb, "Test", cols = 15:20, widths = 9) tf <- temp_xlsx("test") tf2 <- temp_xlsx("test2") saveWorkbook(wbb, tf, overwrite = TRUE) test <- wbb$worksheets[[1]]$copy() saveWorkbook(wbb, tf2, overwrite = TRUE) testthat::expect_equal(wbb$worksheets[[1]], test) unlink(c("tf", "tf2"), recursive = TRUE, force = TRUE) }) openxlsx/tests/testthat/test-styles.R0000644000176200001440000000252714374150317017572 0ustar liggesusers context("Styles") test_that("setStyle", { tmp_file <- temp_xlsx() # lorem ipsum txt <- paste0( "Lorem ipsum dolor sit amet, consectetur adipiscing elit, ", "sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. ", "Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris", "nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in ", "reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla", "pariatur. Excepteur sint occaecat cupidatat non proident, sunt in ", "culpa qui officia deserunt mollit anim id est laborum." ) ## create workbook wb <- createWorkbook() addWorksheet(wb, "Test") writeData(wb, "Test", txt) ## create a style s <- createStyle( fontSize = 12, fontColour = "black", valign="center", wrapText = TRUE, halign = "justify" ) addStyle(wb, "Test", s, 1, 1) setColWidths(wb, "Test", 1, 50) setRowHeights(wb, "Test", 1, 150) ## save workbook saveWorkbook(wb, tmp_file) ## load it again wb2 <- loadWorkbook(tmp_file) s2 <- getStyles(wb2)[[1]] ## test that the style survived the round trip expect_equal(s2$fontSize, c(val="12")) expect_equal(s2$fontColour, c(rgb="FF000000")) expect_equal(s2$valign, "center") expect_equal(s2$wrapText, TRUE) expect_equal(s2$halign, "justify") }) openxlsx/tests/testthat/test-date_time_conversion.R0000644000176200001440000000303014656165604022445 0ustar liggesusers context("Date/Time Conversions") test_that("as_POSIXct_utc", { exp <- "2022-03-02 19:27:35" got <- as_POSIXct_utc("2022-03-02 19:27:35") expect_equal(exp, as.character(got)) }) test_that("convert to date", { dates <- as.Date("2015-02-07") + -10:10 origin <- 25569L n <- as.integer(dates) + origin expect_equal(convertToDate(n), dates) earlyDate <- as.Date("1900-01-03") serialDate <- 3 expect_equal(convertToDate(serialDate), earlyDate) }) test_that("convert to datetime", { x <- 43037 + 2 / 1440 expect_equal(object = convertToDateTime(x, tx = Sys.timezone()), expected = as.POSIXct("2017-10-29 00:02:00", tz = Sys.timezone())) x <- 43037 + 2 / 1440 + 1 / 86400 expect_equal(object = convertToDateTime(x, tx = Sys.timezone()), expected = as.POSIXct("2017-10-29 00:02:01", tz = Sys.timezone())) x <- 43037 + 2.50 / 1440 expect_equal(object = convertToDateTime(x, tx = Sys.timezone()), expected = as.POSIXct("2017-10-29 00:02:30", tz = Sys.timezone())) x <- 43037 + 2 / 1440 + 12.12 / 86400 x_datetime <- convertToDateTime(x, tx = "UTC") attr(x_datetime, "tzone") <- "UTC" }) test_that("read.xlsx detectDates", { xlsxFile <- system.file("extdata", "gh_issue_288.xlsx", package = "openxlsx") ref_dat <- data.frame(Date = c(as.Date(c("2021-10-20", "2021-11-03")))) ref_num <- data.frame(Date = c(44489.4, 44503.0)) tst_dat <- read.xlsx(xlsxFile, detectDates = TRUE) tst_num <- read.xlsx(xlsxFile, detectDates = FALSE) expect_equal(ref_dat, tst_dat) expect_equal(ref_num, tst_num) }) openxlsx/tests/testthat/test-read_xlsx_correct_sheet.R0000644000176200001440000000244714374150317023152 0ustar liggesusers context("Read xlsx") test_that("read.xlsx correct sheet", { fl <- system.file("extdata", "readTest.xlsx", package = "openxlsx") sheet_names <- getSheetNames(file = fl) expected_sheet_names <- c( "Sheet1", "Sheet2", "Sheet 3", "Sheet 4", "Sheet 5", "Sheet 6", "1", "11", "111", "1111", "11111", "111111" ) expect_equal(object = sheet_names, expected = expected_sheet_names) expect_equal(read.xlsx(xlsxFile = fl, sheet = 7), data.frame(x = 1)) expect_equal(read.xlsx(xlsxFile = fl, sheet = 8), data.frame(x = 11)) expect_equal(read.xlsx(xlsxFile = fl, sheet = 9), data.frame(x = 111)) expect_equal(read.xlsx(xlsxFile = fl, sheet = 10), data.frame(x = 1111)) expect_equal(read.xlsx(xlsxFile = fl, sheet = 11), data.frame(x = 11111)) expect_equal(read.xlsx(xlsxFile = fl, sheet = 12), data.frame(x = 111111)) expect_equal(read.xlsx(xlsxFile = fl, sheet = "1"), data.frame(x = 1)) expect_equal(read.xlsx(xlsxFile = fl, sheet = "11"), data.frame(x = 11)) expect_equal(read.xlsx(xlsxFile = fl, sheet = "111"), data.frame(x = 111)) expect_equal(read.xlsx(xlsxFile = fl, sheet = "1111"), data.frame(x = 1111)) expect_equal(read.xlsx(xlsxFile = fl, sheet = "11111"), data.frame(x = 11111)) expect_equal(read.xlsx(xlsxFile = fl, sheet = "111111"), data.frame(x = 111111)) }) openxlsx/tests/testthat/test-saveWorkbook.R0000644000176200001440000000320014374150317020710 0ustar liggesusers context("save workbook") test_that("test return values for saveWorkbook", { tempFile <- temp_xlsx() wb<-createWorkbook() addWorksheet(wb,"name") expect_true( saveWorkbook(wb,tempFile,returnValue = TRUE)) expect_error( saveWorkbook(wb,tempFile,returnValue = TRUE)) expect_invisible( saveWorkbook(wb,tempFile,returnValue = FALSE ,overwrite = TRUE)) unlink(tempFile, recursive = TRUE, force = TRUE) } ) # regression test for a typo test_that("regression test for #248", { # Basic data frame df <- data.frame(number = 1:3, percent = 4:6/100) tempFile <- temp_xlsx() # no formatting expect_silent(write.xlsx(df, tempFile, borders = "columns", overwrite = TRUE)) # Change column class to percentage class(df$percent) <- "percentage" expect_silent(write.xlsx(df, tempFile, borders = "columns", overwrite = TRUE)) }) # test for hyperrefs test_that("creating hyperlinks", { # prepare a file tempFile <- temp_xlsx() wb <- createWorkbook() sheet <- "test" addWorksheet(wb, sheet) img <- "D:/somepath/somepicture.png" # warning: col and row provided, but not required expect_warning( linkString <- makeHyperlinkString(col = 1, row = 4, text = "test.png", file = img)) linkString2 <- makeHyperlinkString(text = "test.png", file = img) # col and row not needed expect_equal(linkString, linkString2) # write file without errors writeFormula(wb, sheet, x = linkString, startCol = 1, startRow = 1) expect_silent(saveWorkbook(wb, tempFile, overwrite = TRUE)) # TODO: add a check that the written xlsx file contains linkString }) openxlsx/tests/testthat/test-table_overlaps.R0000644000176200001440000001061314374150317021244 0ustar liggesusers context("Writing over tables") test_that("writeDataTable over tables", { overwrite_table_error <- "Cannot overwrite existing table with another table" df1 <- data.frame("X" = 1:10) wb <- createWorkbook() addWorksheet(wb, "Sheet1") ## table covers rows 4->10 and cols 4->8 writeDataTable(wb = wb, sheet = 1, x = head(iris), startCol = 4, startRow = 4) ## should all run without error writeDataTable(wb = wb, sheet = 1, x = df1, startCol = 3, startRow = 2) writeDataTable(wb = wb, sheet = 1, x = df1, startCol = 9, startRow = 2) writeDataTable(wb = wb, sheet = 1, x = df1, startCol = 4, startRow = 11) writeDataTable(wb = wb, sheet = 1, x = df1, startCol = 5, startRow = 11) writeDataTable(wb = wb, sheet = 1, x = df1, startCol = 6, startRow = 11) writeDataTable(wb = wb, sheet = 1, x = df1, startCol = 7, startRow = 11) writeDataTable(wb = wb, sheet = 1, x = df1, startCol = 8, startRow = 11) writeDataTable(wb = wb, sheet = 1, x = head(iris, 2), startCol = 4, startRow = 1) ## Now error expect_error(writeDataTable(wb = wb, sheet = 1, x = df1, startCol = "H", startRow = 21), regexp = overwrite_table_error) expect_error(writeDataTable(wb = wb, sheet = 1, x = df1, startCol = 3, startRow = 12), regexp = overwrite_table_error) expect_error(writeDataTable(wb = wb, sheet = 1, x = df1, startCol = 9, startRow = 12), regexp = overwrite_table_error) expect_error(writeDataTable(wb = wb, sheet = 1, x = df1, startCol = "i", startRow = 12), regexp = overwrite_table_error) ## more errors expect_error(writeDataTable(wb = wb, sheet = 1, x = head(iris)), regexp = overwrite_table_error) expect_error(writeDataTable(wb = wb, sheet = 1, x = head(iris), startCol = 4, startRow = 21), regexp = overwrite_table_error) ## should work writeDataTable(wb = wb, sheet = 1, x = head(iris), startCol = 4, startRow = 22) writeDataTable(wb = wb, sheet = 1, x = head(iris), startCol = 4, startRow = 40) ## more errors expect_error(writeDataTable(wb = wb, sheet = 1, x = head(iris, 2), startCol = 4, startRow = 38), regexp = overwrite_table_error) expect_error(writeDataTable(wb = wb, sheet = 1, x = head(iris, 2), startCol = 4, startRow = 38, colNames = FALSE), regexp = overwrite_table_error) expect_error(writeDataTable(wb = wb, sheet = 1, x = head(iris), startCol = "H", startRow = 40), regexp = overwrite_table_error) writeDataTable(wb = wb, sheet = 1, x = head(iris), startCol = "I", startRow = 40) writeDataTable(wb = wb, sheet = 1, x = head(iris)[, 1:3], startCol = "A", startRow = 40) expect_error(writeDataTable(wb = wb, sheet = 1, x = head(iris, 2), startCol = 4, startRow = 38, colNames = FALSE), regexp = overwrite_table_error) expect_error(writeDataTable(wb = wb, sheet = 1, x = head(iris, 2), startCol = 1, startRow = 46, colNames = FALSE), regexp = overwrite_table_error) }) test_that("writeData over tables", { overwrite_table_error <- "Cannot overwrite table headers. Avoid writing over the header row" df1 <- data.frame("X" = 1:10) wb <- createWorkbook() addWorksheet(wb, "Sheet1") ## table covers rows 4->10 and cols 4->8 writeDataTable(wb = wb, sheet = 1, x = head(iris), startCol = 4, startRow = 4) ## Anywhere on row 5 is fine for (i in 1:10) { writeData(wb = wb, sheet = 1, x = head(iris), startRow = 5, startCol = i) } ## Anywhere on col i is fine for (i in 1:10) { writeData(wb = wb, sheet = 1, x = head(iris), startRow = i, startCol = "i") } ## Now errors on headers expect_error(writeData(wb = wb, sheet = 1, x = head(iris), startCol = 4, startRow = 4), regexp = overwrite_table_error) writeData(wb = wb, sheet = 1, x = head(iris), startCol = 4, startRow = 5) writeData(wb = wb, sheet = 1, x = head(iris)[1:3]) writeData(wb = wb, sheet = 1, x = head(iris, 2), startCol = 4) writeData(wb = wb, sheet = 1, x = head(iris, 2), startCol = 4, colNames = FALSE) ## Example of how this should be used writeDataTable(wb = wb, sheet = 1, x = head(iris), startCol = 4, startRow = 30) writeData(wb = wb, sheet = 1, x = head(iris), startCol = 4, startRow = 31, colNames = FALSE) writeDataTable(wb = wb, sheet = 1, x = head(iris), startCol = 10, startRow = 30) writeData(wb = wb, sheet = 1, x = tail(iris), startCol = 10, startRow = 31, colNames = FALSE) writeDataTable(wb = wb, sheet = 1, x = head(iris)[, 1:3], startCol = 1, startRow = 30) writeData(wb = wb, sheet = 1, x = tail(iris), startCol = 1, startRow = 31, colNames = FALSE) }) openxlsx/tests/testthat/test-build_workbook.R0000644000176200001440000000255514374150317021264 0ustar liggesuserstest_that("buildWorkbook() accepts tableName [187]", { x <- data.frame(a = 1, b = 2) # default name wb <- buildWorkbook(x, asTable = TRUE) expect_equal(attr(wb$tables, "tableName"), "Table3") # define 1/2 table name wb <- buildWorkbook(x, asTable = TRUE, tableName = "table_x") expect_equal(attr(wb$tables, "tableName"), "table_x") # define 2/2 table names wb <- buildWorkbook(list(x, x), asTable = TRUE, tableName = c("table_x", "table_y")) expect_equal(attr(wb$tables, "tableName"), c("table_x", "table_y")) # try to define 1/2 table names expect_error(buildWorkbook(list(x, x), asTable = TRUE, tableName = "table_x")) }) test_that("row.name and col.name are deprecated", { x <- data.frame(a = 1) expect_warning( buildWorkbook(x, file = temp_xlsx(), row.names = TRUE, overwrite = TRUE), "Please use 'rowNames' instead of 'row.names'" ) expect_warning( buildWorkbook(x, file = temp_xlsx(), row.names = TRUE, overwrite = TRUE, asTable = TRUE), "Please use 'rowNames' instead of 'row.names'" ) expect_warning( buildWorkbook(x, file = temp_xlsx(), col.names = TRUE, overwrite = TRUE), "Please use 'colNames' instead of 'col.names'" ) expect_warning( buildWorkbook(x, file = temp_xlsx(), col.names = TRUE, overwrite = TRUE, asTable = TRUE), "Please use 'colNames' instead of 'col.names'" ) }) openxlsx/tests/testthat/test-write-permissions.R0000644000176200001440000000071714672624216021756 0ustar liggesusers context("error without write permissions") test_that("test failed write errors for saveWorkbook", { skip_on_cran() skip_on_ci() temp_file <- tempfile() file.create(temp_file) Sys.chmod(path = temp_file, mode = "444") wb <- createWorkbook() addWorksheet(wb, "name") expect_warning(write.xlsx( x = cars, file = temp_file, overwrite = TRUE ), regexp = "Permission denied" ) unlink(temp_file, recursive = TRUE, force = TRUE) }) openxlsx/tests/testthat/test-fill_merged_cells.R0000644000176200001440000000322214374150317021673 0ustar liggesusers context("Fill Merged Cells") test_that("fill merged cells", { wb <- createWorkbook() addWorksheet(wb, sheetName = "sheet1") writeData(wb = wb, sheet = 1, x = data.frame("A" = 1, "B" = 2)) writeData(wb = wb, sheet = 1, x = 2, startRow = 2, startCol = 2) writeData(wb = wb, sheet = 1, x = 3, startRow = 2, startCol = 3) writeData(wb = wb, sheet = 1, x = 4, startRow = 2, startCol = 4) writeData(wb = wb, sheet = 1, x = t(matrix(1:4, 4, 4)), startRow = 3, startCol = 1, colNames = FALSE) mergeCells(wb = wb, sheet = 1, cols = 2:4, rows = 1) mergeCells(wb = wb, sheet = 1, cols = 2:4, rows = 3) mergeCells(wb = wb, sheet = 1, cols = 2:4, rows = 4) mergeCells(wb = wb, sheet = 1, cols = 2:4, rows = 5) tmp_file <- temp_xlsx() saveWorkbook(wb = wb, file = tmp_file, overwrite = TRUE) expect_equal(names(read.xlsx(tmp_file, fillMergedCells = FALSE)), c("A", "B", "X3", "X4")) expect_equal(names(read.xlsx(tmp_file, fillMergedCells = TRUE)), c("A", "B", "B", "B")) r1 <- data.frame("A" = rep(1, 5), "B" = rep(2, 5), "X3" = rep(3,5), "X4" = rep(4, 5)) r2 <- data.frame("A" = rep(1, 5), "B" = rep(2, 5), "B1" = c(3,2,2,2,3), "B2" = c(4,2,2,2,4)) names(r2) <- c("A", "B", "B", "B") r2_1 <- r2[1:5, 1:3] names(r2_1) <- c("A", "B", "B") expect_equal(read.xlsx(tmp_file, fillMergedCells = FALSE), r1) expect_equal(read.xlsx(tmp_file, fillMergedCells = TRUE), r2) expect_equal( read.xlsx(tmp_file, cols = 1:3, fillMergedCells = TRUE), r2_1) expect_equal( read.xlsx(tmp_file, rows = 1:3, fillMergedCells = TRUE), r2[1:2, ]) expect_equal( read.xlsx(tmp_file, cols = 1:3, rows = 1:4, fillMergedCells = TRUE), r2_1[1:3,]) }) openxlsx/tests/testthat/test-grouped_rows.R0000644000176200001440000001454514656134061020772 0ustar liggesusers context("Group visibility and nested Grouping") test_that("row and column grouping", { # Test file has several worksheets: # 1. "simple visible grouping": One simple grouping (rows 1:2, columns 1:2), visible # 2. "simple hidden grouping": One simple grouping (rows 1:2, columns 1:2), hidden # 3. "multiple non-nested groupings": three groupings (rows/cols 1:2, 4:5 and 7:8 (hidden); table contents only until cell G6, so last grouping has no actual content) # 4. "nested grouping": cols rows 1:4 (outline level 1) and 2:3 (outline level 2), contents to cell F7 (spanning all groupings) # 4. "nested grouping 2": Like previous, but outline level 2 is hidden, contents only to cell B2 # Potential issues with groupings: # - Outline level not preserved # - Hidden flag not set (or not correctly loaded) # - When nesting goes beyond the cell contents, rows/cols need to be added manually to the xml for the grouping settings # - Hidden flag for visible rows/cols not properly loaded, so subsequent hidden cols set the hidden flag for the wrong row/col # - Non-overlapping groupings wb <- loadWorkbook(file = system.file("extdata", "nested_grouped_rowscols.xlsx", package = "openxlsx")) fileName <- file.path(tempdir(), "nested_grouped_rowscols_out.xlsx") oL1 = c(`1` = "1", `2` = "1") oL3 = c(`1` = "1", `2` = "1", `4` = "1", `5` = "1", `7` = "1", `8` = "1") oL4 = c(`1` = "1", `2` = "2", `3` = "2", `4` = "1") stripAttributes <- function(x, attr = NA) { y = x if (is.na(attr)) { attributes(y) <- NULL } else { attr(y, attr) <- NULL } y } ### 1. Loading of outline level # First sheet has simple, visible groupings expect_equal(oL1, stripAttributes(wb$outlineLevels[[1]], "hidden")) expect_equal(oL1, stripAttributes(wb$colOutlineLevels[[1]], "hidden")) # Second sheet has simple, hidden groupings expect_equal(oL1, stripAttributes(wb$outlineLevels[[2]], "hidden")) expect_equal(oL1, stripAttributes(wb$colOutlineLevels[[2]], "hidden")) # Third sheet has simple, non-overlapping groupings expect_equal(oL3, stripAttributes(wb$outlineLevels[[3]], "hidden")) expect_equal(oL3, stripAttributes(wb$colOutlineLevels[[3]], "hidden")) # Fourth tab has nested, visible groupings expect_equal(oL4, stripAttributes(wb$outlineLevels[[4]], "hidden")) expect_equal(oL4, stripAttributes(wb$colOutlineLevels[[4]], "hidden")) ### 2. Loading of row/columng visibility of groupings (hidden attribute) # First tab has visible groupings, second tab has hidden groupings, third has visible, fourth has visible and hidden rows/cols expect_equal(rep(NA_character_, 2), attr(wb$outlineLevels[[1]], "hidden")) expect_equal(c("1", "1"), attr(wb$outlineLevels[[2]], "hidden")) expect_equal(c(rep(NA_character_, 4), "1", "1"), attr(wb$outlineLevels[[3]], "hidden")) expect_equal(rep(NA_character_, 4), attr(wb$outlineLevels[[4]], "hidden")) expect_equal(c(NA_character_, "1", "1", NA_character_), attr(wb$outlineLevels[[5]], "hidden")) expect_equal(rep("0", 2), attr(wb$colOutlineLevels[[1]], "hidden")) expect_equal(c("1", "1"), attr(wb$colOutlineLevels[[2]], "hidden")) expect_equal(c("0", "0", "0", "0", "1", "1"), attr(wb$colOutlineLevels[[3]], "hidden")) expect_equal(rep("0", 4), attr(wb$colOutlineLevels[[4]], "hidden")) expect_equal(c("0", "1", "1", "0"), attr(wb$colOutlineLevels[[5]], "hidden")) #### 3. Export xlsx file and read it in again to check if outlines are preserved # The test file has groupings beyond the actual file contents, so not all # grouped rows/cols are available in the data and need to be added manually # for the grouping data! openxlsx::saveWorkbook(wb, file = fileName, overwrite = TRUE) wbout <- loadWorkbook(file = fileName) expect_equal(wb$outlineLevels[[1]], wbout$outlineLevels[[1]]) expect_equal(wb$outlineLevels[[2]], wbout$outlineLevels[[2]]) expect_equal(wb$outlineLevels[[3]], wbout$outlineLevels[[3]]) expect_equal(wb$outlineLevels[[4]], wbout$outlineLevels[[4]]) expect_equal(wb$outlineLevels[[5]], wbout$outlineLevels[[5]]) expect_equal(wb$colOutlineLevels[[1]], wbout$colOutlineLevels[[1]]) expect_equal(wb$colOutlineLevels[[2]], wbout$colOutlineLevels[[2]]) expect_equal(wb$colOutlineLevels[[3]], wbout$colOutlineLevels[[3]]) # BUG: Ordering of entries not preserved expect_equal(wb$colOutlineLevels[[4]], wbout$colOutlineLevels[[4]]) # BUG: Ordering of entries not preserved expect_equal(wb$colOutlineLevels[[5]], wbout$colOutlineLevels[[5]]) # BUG: Ordering of entries not preserved #### 4. Manually create non-overlapping and nested groupings of rows / cols wb <- openxlsx::createWorkbook() wb$addWorksheet(sheetName = "Manually") writeData(wb, "Manually", matrix(1:225, 15, 15), 1, 1) # non-nested grouping (visible and hidden) groupRows(wb, "Manually", 2:3, FALSE) groupRows(wb, "Manually", 5:6, TRUE) # nested grouping groupRows(wb, "Manually", 9:15) # Outline level 1, next groupings will be level 2! groupRows(wb, "Manually", 10:11) groupRows(wb, "Manually", 13:14) expect_equal(c(`2` = "1", `3` = "1", `5` = "1", `6` = "1", `9` = "1", `10` = "2", `11` = "2", `12` = "1", `13` = "2", `14` = "2", `15` = "1"), stripAttributes(wb$outlineLevels[[1]], "hidden")) # non-nested grouping (visible and hidden) groupColumns(wb, "Manually", 2:3, FALSE) groupColumns(wb, "Manually", 5:6, TRUE) # nested grouping groupColumns(wb, "Manually", 9:15) groupColumns(wb, "Manually", 10:11) groupColumns(wb, "Manually", 13:14) expect_equal(c(`2` = "1", `3` = "1", `5` = "1", `6` = "1", `9` = "1", `10` = "2", `11` = "2", `12` = "1", `13` = "2", `14` = "2", `15` = "1"), stripAttributes(wb$colOutlineLevels[[1]], "hidden")) #### 5. Ungrouping rows/cols simply decrements the level (and removes the entry if no longer grouped) ungroupRows(wb, "Manually", 11:13) expect_equal(c(`2` = "1", `3` = "1", `5` = "1", `6` = "1", `9` = "1", `10` = "2", `11` = "1", `13` = "1", `14` = "2", `15` = "1"), stripAttributes(wb$outlineLevels[[1]], "hidden")) ungroupColumns(wb, "Manually", 11:13) expect_equal(c(`2` = "1", `3` = "1", `5` = "1", `6` = "1", `9` = "1", `10` = "2", `11` = "1", `13` = "1", `14` = "2", `15` = "1"), stripAttributes(wb$colOutlineLevels[[1]], "hidden")) #### CLEANUP unlink(fileName, recursive = TRUE, force = TRUE) }) openxlsx/tests/testthat/test-worksheet_renaming.R0000644000176200001440000000346614374150317022145 0ustar liggesusers context("Renaming worksheets.") test_that("Can rename worksheets under all conditions", { tempFile <- file.path(tempdir(), "renaming.xlsx") wb <- createWorkbook() addWorksheet(wb, "sheet 1") addWorksheet(wb, "sheet 2") addWorksheet(wb, "sheet 3") addWorksheet(wb, "sheet 4") addWorksheet(wb, "sheet 5") renameWorksheet(wb, sheet = 2, "THis is SHEET 2") expect_equal(names(wb), c("sheet 1", "THis is SHEET 2", "sheet 3", "sheet 4", "sheet 5")) renameWorksheet(wb, sheet = "THis is SHEET 2", "THis is STILL SHEET 2") expect_equal(names(wb), c("sheet 1", "THis is STILL SHEET 2", "sheet 3", "sheet 4", "sheet 5")) renameWorksheet(wb, sheet = 5, "THis is SHEET 5") expect_equal(names(wb), c("sheet 1", "THis is STILL SHEET 2", "sheet 3", "sheet 4", "THis is SHEET 5")) renameWorksheet(wb, sheet = 5, "THis is STILL SHEET 5") expect_equal(names(wb), c("sheet 1", "THis is STILL SHEET 2", "sheet 3", "sheet 4", "THis is STILL SHEET 5")) renameWorksheet(wb, sheet = 2, "Sheet 2") expect_equal(names(wb), c("sheet 1", "Sheet 2", "sheet 3", "sheet 4", "THis is STILL SHEET 5")) renameWorksheet(wb, sheet = 5, "Sheet 5") expect_equal(names(wb), c("sheet 1", "Sheet 2", "sheet 3", "sheet 4", "Sheet 5")) ## re-ordering worksheetOrder(wb) <- c(4, 3, 2, 5, 1) saveWorkbook(wb, tempFile, overwrite = TRUE) wb <- loadWorkbook(file = tempFile) renameWorksheet(wb, sheet = 2, "THIS is SHEET 3") wb <- loadWorkbook(tempFile) renameWorksheet(wb, sheet = "Sheet 5", "THIS is NOW SHEET 5") expect_equal(names(wb), c("sheet 4", "sheet 3", "Sheet 2", "THIS is NOW SHEET 5", "sheet 1")) names(wb)[[1]] <- "THIS IS NOW SHEET 4" expect_equal(names(wb), c("THIS IS NOW SHEET 4", "sheet 3", "Sheet 2", "THIS is NOW SHEET 5", "sheet 1")) unlink(tempFile, recursive = TRUE, force = TRUE) }) openxlsx/tests/testthat/test-read_sources.R0000644000176200001440000000320614656123677020734 0ustar liggesusers context("Read Sources") test_that("read.xlsx from different sources", { skip_if_offline() ## URL xlsxFile <- "https://github.com/ycphs/openxlsx/raw/master/inst/extdata/readTest.xlsx" df_url <- read.xlsx(xlsxFile) ## File xlsxFile <- system.file("extdata", "readTest.xlsx", package = "openxlsx") df_file <- read.xlsx(xlsxFile) expect_true(all.equal(df_url, df_file), label = "Read from URL") ## Non-existing URL xlsxFile <- "https://github.com/ycphs/openxlsx/raw/master/inst/extdata/readTest2.xlsx" expect_error(suppressWarnings(read.xlsx(xlsxFile))) ## Non-existing File xlsxFile <- file.path(dirname(system.file("extdata", "readTest.xlsx", package = "openxlsx")), "readTest00.xlsx") expect_error(read.xlsx(xlsxFile), regexp = "File does not exist.") }) test_that("loadWorkbook from different sources", { skip_if_offline() ## URL xlsxFile <- "https://github.com/ycphs/openxlsx/raw/master/inst/extdata/readTest.xlsx" wb_url <- loadWorkbook(xlsxFile) ## File xlsxFile <- system.file("extdata", "readTest.xlsx", package = "openxlsx") wb_file <- loadWorkbook(xlsxFile) ## check expect_true(all.equal.Workbook(wb_url, wb_file), "Loading from URL vs local not equal") }) test_that("getDateOrigin from different sources", { skip_if_offline() ## URL xlsxFile <- "https://github.com/ycphs/openxlsx/raw/master/inst/extdata/readTest.xlsx" origin_url <- getDateOrigin(xlsxFile) ## File xlsxFile <- system.file("extdata", "readTest.xlsx", package = "openxlsx") origin_file <- getDateOrigin(xlsxFile) ## check expect_equal(origin_url, origin_file) expect_equal(origin_url, "1900-01-01") }) openxlsx/tests/testthat/test-Workbook_properties.R0000644000176200001440000000335214374150317022315 0ustar liggesusers context("Workbook properties") test_that("Workbook properties", { ## check creator wb <- createWorkbook(creator = "Alex", title = "title here", subject = "this & that", category = "some category") expect_true(grepl("Alex", wb$core)) expect_true(grepl("title here", wb$core)) expect_true(grepl("this & that", wb$core)) expect_true(grepl("some category", wb$core)) fl <- tempfile(fileext = ".xlsx") wb <- write.xlsx( x = iris, file = fl, creator = "Alex 2", title = "title here 2", subject = "this & that 2", category = "some category 2" ) expect_true(grepl("Alex 2", wb$core)) expect_true(grepl("title here 2", wb$core)) expect_true(grepl("this & that 2", wb$core)) expect_true(grepl("some category 2", wb$core)) ## maintain on load wb_loaded <- loadWorkbook(fl) expect_equal(object = wb_loaded$core, expected = paste0(wb$core, collapse = "")) wb <- createWorkbook(creator = "Philipp", title = "title here", subject = "this & that", category = "some category") addCreator(wb, "test") expect_true(grepl("Philipp;test", wb$core)) expect_equal(getCreators(wb), c("Philipp", "test")) setLastModifiedBy(wb, "Philipp 2") expect_true(grepl("Philipp 2", wb$core)) }) test_that("Workbook can print with 0 sheets [240]", { compare_text <- "A Workbook object.\n \nWorksheets:\n No worksheets attached\n" printed_text <- capture_output(x <- createWorkbook()$show()) expect_null(x) expect_equal(compare_text, printed_text) }) openxlsx/tests/testthat/test-setWindowSize.R0000644000176200001440000000435114656123677021076 0ustar liggesuserstest_that("can read default sizes from new workbook", { wb <- createWorkbook() expect_equal(getWindowSize(wb), list(xWindow = "0", yWindow = "0", windowWidth = "13125", windowHeight = "6105")) }) test_that("can change sizes in new workbook", { wb <- createWorkbook() setWindowSize(wb, xWindow = 100, yWindow = 200, windowWidth = 20000, windowHeight = 15000) expect_equal(getWindowSize(wb), list(xWindow = "100", yWindow = "200", windowWidth = "20000", windowHeight = "15000")) }) test_that("can change only a few parameters", { wb <- createWorkbook() setWindowSize(wb, yWindow = 300, windowWidth = 12000) # others are the default expect_equal(getWindowSize(wb), list(xWindow = "0", yWindow = "300", windowWidth = "12000", windowHeight = "6105")) }) test_that("window size and position must be coercible to integers and non negative", { wb <- createWorkbook() expect_error(setWindowSize(wb, xWindow = -300)) expect_error(setWindowSize(wb, yWindow = -300)) expect_error(setWindowSize(wb, windowWidth = -300)) expect_error(setWindowSize(wb, windowHeight = -300)) expect_error(expect_warning(setWindowSize(wb, xWindow = "string"))) expect_error(expect_warning(setWindowSize(wb, yWindow = "string"))) expect_error(expect_warning(setWindowSize(wb, windowWidth = "string"))) expect_error(expect_warning(setWindowSize(wb, windowHeight = "string"))) setWindowSize(wb, xWindow = "500") expect_equal(getWindowSize(wb)$xWindow, "500") }) test_that("saving and loading preserve window sizes", { wb <- createWorkbook() setWindowSize(wb, xWindow = 400, yWindow = 500, windowWidth = 1000, windowHeight = 5000) addWorksheet(wb, "sheet1") tempfile <- tempfile() saveWorkbook(wb, tempfile) wb2 <- loadWorkbook(tempfile) expect_equal(getWindowSize(wb2), list(xWindow = "400", yWindow = "500", windowWidth = "1000", windowHeight = "5000")) setWindowSize(wb2, xWindow = 700, yWindow = 900, windowWidth = 900, windowHeight = 4000) tempfile2 <- tempfile() saveWorkbook(wb2, tempfile2) wb3 <- loadWorkbook(tempfile2) expect_equal(getWindowSize(wb3), list(xWindow = "700", yWindow = "900", windowWidth = "900", windowHeight = "4000")) }) openxlsx/tests/testthat/test-v3_0_0_bugs.R0000644000176200001440000000061014374150317020244 0ustar liggesusers context("v3.0.0 Bug Fixes") test_that("read.xlsx bug fixes", { file <- system.file("extdata", "readTest.xlsx", package = "openxlsx") df <- read.xlsx(file, sheet = 1, rows = 1:2, cols = 1) expect_equal(df, data.frame("Var1" = TRUE)) df <- read.xlsx(file, sheet = 1, rows = 1, cols = 1, colNames = FALSE) expect_equal(df, data.frame("X1" = "Var1", stringsAsFactors = FALSE)) }) openxlsx/tests/testthat/test-insertImage.R0000644000176200001440000002102614672624216020516 0ustar liggesusers context("Inserting images") test_that("Inserting hyperlinked image", { # Create a workbook. wb <- createWorkbook() addWorksheet(wb, "Sheet 1") # Insert multiple images. Specifically one with a link before and after other # images to test whether drawings reference the correct index of the drawing # relationships. img <- system.file("extdata", "einstein.jpg", package = "openxlsx") insertImage(wb, "Sheet 1", img) insertImage(wb, "Sheet 1", img, address = "https://github.com/ycphs/openxlsx") insertImage(wb, "Sheet 1", img) # Declare expectations for drawings and drawings_rels xml. expected_drawings <- list( "\n 0\n 0\n 0\n 0\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n ", "\n 0\n 0\n 0\n 0\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n ", "\n 0\n 0\n 0\n 0\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n " ) expected_drawings_rels <- list( "", "", "", "" ) # Test expectations for drawings and drawings_rels xml. expect_equal(expected_drawings, wb$drawings[[1]]) expect_equal(expected_drawings_rels, wb$drawings_rels[[1]]) # Test errors. expect_error( insertImage(wb, "Sheet 1", img, address = NULL), "Invalid address" ) expect_error( insertImage(wb, "Sheet 1", img, address = NA), "Invalid address" ) expect_error( insertImage( wb, "Sheet 1", img, address = c("https://github.com/ycphs/openxlsx", "https://github.com/ycphs/openxlsx/issues") ), "Invalid address" ) }) openxlsx/tests/testthat/test-deleting_tables.R0000644000176200001440000002046014374150317021370 0ustar liggesusers context(desc = "Deleting tables from worksheets") test_that("Deleting a Table Object", { wb <- createWorkbook() addWorksheet(wb, sheetName = "Sheet 1") addWorksheet(wb, sheetName = "Sheet 2") writeDataTable(wb, sheet = "Sheet 1", x = iris, tableName = "iris") writeDataTable(wb, sheet = 1, x = mtcars, tableName = "mtcars", startCol = 10) # Get table ---- expect_equal(length(getTables(wb, sheet = 1)), 2L) expect_equal(length(getTables(wb, sheet = "Sheet 1")), 2L) expect_equal(length(getTables(wb, sheet = 2)), 0) expect_equal(length(getTables(wb, sheet = "Sheet 2")), 0) expect_error(getTables(wb, sheet = 3)) expect_error(getTables(wb, sheet = "Sheet 3")) expect_equal(getTables(wb, sheet = 1), c("iris", "mtcars"), check.attributes = FALSE) expect_equal(getTables(wb, sheet = "Sheet 1"), c("iris", "mtcars"), check.attributes = FALSE) expect_equal(attr(getTables(wb, sheet = 1), "refs"), c("A1:E151", "J1:T33")) expect_equal(attr(getTables(wb, sheet = "Sheet 1"), "refs"), c("A1:E151", "J1:T33")) expect_equal(length(wb$tables), 2L) ## Deleting a worksheet ---- removeWorksheet(wb, 1) expect_equal(length(wb$tables), 2L) expect_equal(length(getTables(wb, sheet = 1)), 0) expect_equal(attr(wb$tables, "tableName"), c("iris_openxlsx_deleted", "mtcars_openxlsx_deleted")) expect_equal(attr(wb$tables, "sheet"), c(0, 0)) ################################################################################### ## write same tables again writeDataTable(wb, sheet = 1, x = iris, tableName = "iris") writeDataTable(wb, sheet = 1, x = mtcars, tableName = "mtcars", startCol = 10) expect_equal(attr(wb$tables, "tableName"), c("iris_openxlsx_deleted", "mtcars_openxlsx_deleted", "iris", "mtcars")) expect_equal(attr(wb$tables, "sheet"), c(0, 0, 1, 1)) expect_equal(length(getTables(wb, sheet = 1)), 2L) expect_equal(length(getTables(wb, sheet = "Sheet 2")), 2L) expect_error(getTables(wb, sheet = 2)) expect_error(getTables(wb, sheet = "Sheet 1")) expect_equal(getTables(wb, sheet = 1), c("iris", "mtcars"), check.attributes = FALSE) expect_equal(getTables(wb, sheet = "Sheet 2"), c("iris", "mtcars"), check.attributes = FALSE) expect_equal(attr(getTables(wb, sheet = 1), "refs"), c("A1:E151", "J1:T33")) expect_equal(attr(getTables(wb, sheet = "Sheet 2"), "refs"), c("A1:E151", "J1:T33")) expect_equal(length(wb$tables), 4L) ################################################################################### ## removeTable ## remove iris and re-write it removeTable(wb = wb, sheet = 1, table = "iris") expect_equal(length(wb$tables), 4L) expect_equal(wb$worksheets[[1]]$tableParts, "", check.attributes = FALSE) expect_equal(attr(wb$worksheets[[1]]$tableParts, "tableName"), "mtcars") expect_equal(attr(wb$tables, "tableName"), c( "iris_openxlsx_deleted", "mtcars_openxlsx_deleted", "iris_openxlsx_deleted", "mtcars" )) ## removeTable clears table object and all data writeDataTable(wb, sheet = 1, x = iris, tableName = "iris", startCol = 1) expect_equal(wb$worksheets[[1]]$tableParts, c("", ""), check.attributes = FALSE) expect_equal(attr(wb$worksheets[[1]]$tableParts, "tableName"), c("mtcars", "iris")) removeTable(wb = wb, sheet = 1, table = "iris") expect_equal(length(wb$tables), 5L) expect_equal(wb$worksheets[[1]]$tableParts, "", check.attributes = FALSE) expect_equal(attr(wb$worksheets[[1]]$tableParts, "tableName"), "mtcars") expect_equal(attr(wb$tables, "tableName"), c( "iris_openxlsx_deleted", "mtcars_openxlsx_deleted", "iris_openxlsx_deleted", "mtcars", "iris_openxlsx_deleted" )) expect_equal(getTables(wb, sheet = 1), "mtcars", check.attributes = FALSE) }) test_that("Save and load Table Deletion", { temp_file <- temp_xlsx() wb <- createWorkbook() addWorksheet(wb, sheetName = "Sheet 1") addWorksheet(wb, sheetName = "Sheet 2") writeDataTable(wb, sheet = "Sheet 1", x = iris, tableName = "iris") writeDataTable(wb, sheet = 1, x = mtcars, tableName = "mtcars", startCol = 10) ################################################################################### ## Deleting a worksheet removeWorksheet(wb, 1) expect_equal(length(wb$tables), 2L) expect_equal(length(getTables(wb, sheet = 1)), 0) expect_equal(attr(wb$tables, "tableName"), c("iris_openxlsx_deleted", "mtcars_openxlsx_deleted")) expect_equal(attr(wb$tables, "sheet"), c(0, 0)) ## both table were written to sheet 1 and are expected to not exist after load saveWorkbook(wb = wb, file = temp_file, overwrite = TRUE) wb <- loadWorkbook(file = temp_file) expect_null(wb$tables) unlink(temp_file) ################################################################################### ## Deleting a table wb <- createWorkbook() addWorksheet(wb, sheetName = "Sheet 1") addWorksheet(wb, sheetName = "Sheet 2") writeDataTable(wb, sheet = "Sheet 1", x = iris, tableName = "iris") writeDataTable(wb, sheet = 1, x = mtcars, tableName = "mtcars", startCol = 10) ## remove iris and re-write it removeTable(wb = wb, sheet = 1, table = "iris") expect_equal(attr(wb$tables, "tableName"), c("iris_openxlsx_deleted", "mtcars")) temp_file <- temp_xlsx() saveWorkbook(wb = wb, file = temp_file, overwrite = TRUE) wb <- loadWorkbook(file = temp_file) expect_equal(length(wb$tables), 1L) expect_equal(unname(attr(wb$tables, "tableName")), "mtcars") expect_equal(wb$worksheets[[1]]$tableParts, "", check.attributes = FALSE) ## rId reset expect_equal(unname(attr(wb$worksheets[[1]]$tableParts, "tableName")), "mtcars") unlink(temp_file) ## now delete the other table wb <- createWorkbook() addWorksheet(wb, sheetName = "Sheet 1") addWorksheet(wb, sheetName = "Sheet 2") writeDataTable(wb, sheet = "Sheet 1", x = iris, tableName = "iris") writeDataTable(wb, sheet = 1, x = mtcars, tableName = "mtcars", startCol = 10) writeDataTable(wb, sheet = 2, x = mtcars, tableName = "mtcars2", startCol = 3) removeTable(wb = wb, sheet = 1, table = "iris") removeTable(wb = wb, sheet = 1, table = "mtcars") expect_equal(attr(wb$tables, "tableName"), c("iris_openxlsx_deleted", "mtcars_openxlsx_deleted", "mtcars2")) temp_file <- temp_xlsx() saveWorkbook(wb = wb, file = temp_file, overwrite = TRUE) wb <- loadWorkbook(file = temp_file) expect_equal(length(wb$tables), 1L) expect_equal(unname(attr(wb$tables, "tableName")), "mtcars2") expect_length(wb$worksheets[[1]]$tableParts, 0) expect_equal(wb$worksheets[[2]]$tableParts, "", check.attributes = FALSE) expect_equal(unname(attr(wb$worksheets[[2]]$tableParts, "tableName")), "mtcars2") unlink(temp_file) ## write tables back in writeDataTable(wb, sheet = "Sheet 1", x = iris, tableName = "iris") writeDataTable(wb, sheet = 1, x = mtcars, tableName = "mtcars", startCol = 10) expect_equal(length(wb$tables), 3L) expect_equal(unname(attr(wb$tables, "tableName")), c("mtcars2", "iris", "mtcars")) expect_length(wb$worksheets[[1]]$tableParts, 2) expect_equal(wb$worksheets[[1]]$tableParts, c("", ""), check.attributes = FALSE) expect_equal(unname(attr(wb$worksheets[[1]]$tableParts, "tableName")), c("iris", "mtcars")) expect_length(wb$worksheets[[2]]$tableParts, 1) expect_equal(wb$worksheets[[2]]$tableParts, c(""), check.attributes = FALSE) expect_equal(unname(attr(wb$worksheets[[2]]$tableParts, "tableName")), "mtcars2") saveWorkbook(wb = wb, file = temp_file, overwrite = TRUE) ## Ids should get reset after load wb <- loadWorkbook(file = temp_file) expect_equal(length(wb$tables), 3L) expect_equal(unname(attr(wb$tables, "tableName")), c("iris", "mtcars", "mtcars2")) expect_length(wb$worksheets[[1]]$tableParts, 2) expect_equal(wb$worksheets[[1]]$tableParts, c("", ""), check.attributes = FALSE) expect_equal(unname(attr(wb$worksheets[[1]]$tableParts, "tableName")), c("iris", "mtcars")) expect_length(wb$worksheets[[2]]$tableParts, 1) expect_equal(wb$worksheets[[2]]$tableParts, c(""), check.attributes = FALSE) expect_equal(unname(attr(wb$worksheets[[2]]$tableParts, "tableName")), "mtcars2") unlink(temp_file) }) openxlsx/tests/testthat/test-loading_workbook_unzipped.R0000644000176200001440000000106214374150317023510 0ustar liggesusers context("Load Unzipped Workbook Object") test_that("Loading unzipped readTest.xlsx", { fl <- system.file("extdata", "readTest.xlsx", package = "openxlsx") wb <- loadWorkbook(fl) ## make unzipped file & load tmp_dir <- file.path(tempdir(), paste(sample(LETTERS, 6), collapse = "")) if (dir.exists(tmp_dir)) unlink(tmp_dir, recursive = TRUE) dir.create(tmp_dir) unzip(zipfile = fl, exdir = tmp_dir) wb2 <- loadWorkbook(file = tmp_dir, isUnzipped = TRUE) expect_true(all.equal(wb, wb2)) unlink(tmp_dir, recursive = TRUE) }) "" openxlsx/tests/testthat/test-loading_workbook_tables.R0000644000176200001440000000331014374150317023122 0ustar liggesusers context("Load Workbook Object Tables") test_that("Tables loaded correctly", { wb <- loadWorkbook(system.file("extdata", "loadExample.xlsx", package = "openxlsx")) expect_equal(unname(attr(wb$tables, "tableName")), c("Table2", "Table3")) expect_equal(names(attr(wb$tables, "tableName")), c("A1:E51", "A1:K30")) expect_equal(attr(wb$tables, "sheet"), c(1, 3)) expect_equal(wb$worksheets[[1]]$tableParts, "", check.attributes = FALSE) expect_equal(unname(attr(wb$worksheets[[1]]$tableParts, "tableName")), "Table2") expect_equal(names(attr(wb$worksheets[[1]]$tableParts, "tableName")), "A1:E51") expect_equal(wb$worksheets[[3]]$tableParts, "", check.attributes = FALSE) expect_equal(unname(attr(wb$worksheets[[3]]$tableParts, "tableName")), "Table3") expect_equal(names(attr(wb$worksheets[[3]]$tableParts, "tableName")), "A1:K30") ## now remove a table expect_equal(unname(getTables(wb, 1)), "Table2", check.attributes = FALSE) expect_equal(unname(getTables(wb, 3)), "Table3", check.attributes = FALSE) removeTable(wb, sheet = 1, table = "Table2") expect_equal(getTables(wb, sheet = 1), character(0), check.attributes = FALSE) expect_equal(length(wb$worksheets[[1]]$tableParts), 0) expect_equal(wb$worksheets[[1]]$tableParts, character(0), check.attributes = FALSE) expect_equal(wb$worksheets[[3]]$tableParts, "", check.attributes = FALSE) expect_equal(unname(attr(wb$worksheets[[3]]$tableParts, "tableName")), "Table3") expect_equal(names(attr(wb$worksheets[[3]]$tableParts, "tableName")), "A1:K30") expect_error(removeTable(wb, sheet = 1, table = "Table2"), regexp = "table 'Table2' does not exist") }) openxlsx/tests/testthat/test-writeDataTable.R0000644000176200001440000000122514656123677021151 0ustar liggesuserstest_that("writeDataTable() warns about Excel limitations", { dt <- data.frame(var = c(1)) header_255 <- paste(sample(tolower(LETTERS), 255, TRUE), collapse = "") header_256 <- paste(sample(tolower(LETTERS), 256, TRUE), collapse = "") wb <- createWorkbook() addWorksheet(wb, "sheetA") addWorksheet(wb, "sheetB") expect_warning({ colnames(dt) <- header_255 writeDataTable(wb, sheet = "sheetA", x = dt) }, regexp = NA ) expect_warning({ colnames(dt) <- header_256 writeDataTable(wb, sheet = "sheetB", x = dt) }, regexp = "Column name exceeds 255 chars, possible incompatibility with MS Excel. Index: 1" ) })openxlsx/tests/testthat/test-named_regions.R0000644000176200001440000003112314374150317021053 0ustar liggesusers context("Named Regions") test_that("Maintaining Named Regions on Load", { ## create named regions wb <- createWorkbook() addWorksheet(wb, "Sheet 1") addWorksheet(wb, "Sheet 2") ## specify region writeData(wb, sheet = 1, x = iris, startCol = 1, startRow = 1) createNamedRegion( wb = wb, sheet = 1, name = "iris", rows = seq_len(nrow(iris) + 1), cols = seq_len(ncol(iris)) ) ## using writeData 'name' argument writeData(wb, sheet = 1, x = iris, name = "iris2", startCol = 10) ## Named region size 1 writeData(wb, sheet = 2, x = 99, name = "region1", startCol = 3, startRow = 3) ## save file for testing out_file <- temp_xlsx() saveWorkbook(wb, out_file, overwrite = TRUE) expect_equal(object = getNamedRegions(wb), expected = getNamedRegions(out_file)) df1 <- read.xlsx(wb, namedRegion = "iris") df2 <- read.xlsx(out_file, namedRegion = "iris") expect_equal(df1, df2) df1 <- read.xlsx(wb, namedRegion = "region1") expect_s3_class(df1, "data.frame") expect_equal(nrow(df1), 0) expect_equal(ncol(df1), 1) df1 <- read.xlsx(wb, namedRegion = "region1", colNames = FALSE) expect_s3_class(df1, "data.frame") expect_equal(nrow(df1), 1) expect_equal(ncol(df1), 1) df1 <- read.xlsx(wb, namedRegion = "region1", rowNames = TRUE) expect_s3_class(df1, "data.frame") expect_equal(nrow(df1), 0) expect_equal(ncol(df1), 0) }) test_that("Correctly Loading Named Regions Created in Excel", { # Load an excel workbook (in the repo, it's located in the /inst folder; # when installed on the user's system, it is located in the installation folder # of the package) filename <- system.file("extdata", "namedRegions.xlsx", package = "openxlsx") # Load this workbook. We will test read.xlsx by passing both the object wb and # the filename. Both should produce the same results. wb <- loadWorkbook(filename) # NamedTable refers to Sheet1!$C$5:$D$8 table_f <- read.xlsx(filename, namedRegion = "NamedTable" ) table_w <- read.xlsx(wb, namedRegion = "NamedTable" ) expect_equal(object = table_f, expected = table_w) expect_equal(object = class(table_f), expected = "data.frame") expect_equal(object = ncol(table_f), expected = 2) expect_equal(object = nrow(table_f), expected = 3) # NamedCell refers to Sheet1!$C$2 # This proeduced an error in an earlier version of the pacage when the object # wb was passed, but worked correctly when the filename was passed to read.xlsx cell_f <- read.xlsx(filename, namedRegion = "NamedCell", colNames = FALSE, rowNames = FALSE ) cell_w <- read.xlsx(wb, namedRegion = "NamedCell", colNames = FALSE, rowNames = FALSE ) expect_equal(object = cell_f, expected = cell_w) expect_equal(object = class(cell_f), expected = "data.frame") expect_equal(object = ncol(cell_f), expected = 1) expect_equal(object = nrow(cell_f), expected = 1) # NamedCell2 refers to Sheet1!$C$2:$C$2 cell2_f <- read.xlsx(filename, namedRegion = "NamedCell2", colNames = FALSE, rowNames = FALSE ) cell2_w <- read.xlsx(wb, namedRegion = "NamedCell2", colNames = FALSE, rowNames = FALSE ) expect_equal(object = cell2_f, expected = cell2_w) expect_equal(object = class(cell2_f), expected = "data.frame") expect_equal(object = ncol(cell2_f), expected = 1) expect_equal(object = nrow(cell2_f), expected = 1) }) test_that("Load names from an Excel file with funky non-region names", { filename <- system.file("extdata", "namedRegions2.xlsx", package = "openxlsx") wb <- loadWorkbook(filename) names <- getNamedRegions(wb) sheets <- attr(names, "sheet") positions <- attr(names, "position") expect_true(length(names) == length(sheets)) expect_true(length(names) == length(positions)) expect_equal( head(names, 5), c("barref", "barref", "fooref", "fooref", "IQ_CH") ) expect_equal( sheets, c( "Sheet with space", "Sheet1", "Sheet with space", "Sheet1", rep("", 26) ) ) expect_equal(positions, c("B4", "B4", "B3", "B3", rep("", 26))) names2 <- getNamedRegions(filename) expect_equal(names, names2) }) test_that("Missing rows in named regions", { temp_file <- temp_xlsx() wb <- createWorkbook() addWorksheet(wb, "Sheet 1") ## create region writeData(wb, sheet = 1, x = iris[1:11, ], startCol = 1, startRow = 1) deleteData(wb, sheet = 1, cols = 1:2, rows = c(6, 6)) createNamedRegion( wb = wb, sheet = 1, name = "iris", rows = 1:(5 + 1), cols = 1:2 ) createNamedRegion( wb = wb, sheet = 1, name = "iris2", rows = 1:(5 + 2), cols = 1:2 ) ## iris region is rows 1:6 & cols 1:2 ## iris2 region is rows 1:7 & cols 1:2 ## row 6 columns 1 & 2 are blank expect_equal(getNamedRegions(wb)[1:2], c("iris", "iris2"), ignore.attributes = TRUE) expect_equal(attr(getNamedRegions(wb), "sheet"), c("Sheet 1", "Sheet 1")) expect_equal(attr(getNamedRegions(wb), "position"), c("A1:B6", "A1:B7")) ######################################################################## from Workbook ## Skip empty rows x <- read.xlsx(xlsxFile = wb, namedRegion = "iris", colNames = TRUE, skipEmptyRows = TRUE) expect_equal(dim(x), c(4, 2)) x <- read.xlsx(xlsxFile = wb, namedRegion = "iris2", colNames = TRUE, skipEmptyRows = TRUE) expect_equal(dim(x), c(5, 2)) ## Keep empty rows x <- read.xlsx(xlsxFile = wb, namedRegion = "iris", colNames = TRUE, skipEmptyRows = FALSE) expect_equal(dim(x), c(5, 2)) x <- read.xlsx(xlsxFile = wb, namedRegion = "iris2", colNames = TRUE, skipEmptyRows = FALSE) expect_equal(dim(x), c(6, 2)) ######################################################################## from file saveWorkbook(wb, file = temp_file, overwrite = TRUE) ## Skip empty rows x <- read.xlsx(xlsxFile = temp_file, namedRegion = "iris", colNames = TRUE, skipEmptyRows = TRUE) expect_equal(dim(x), c(4, 2)) x <- read.xlsx(xlsxFile = temp_file, namedRegion = "iris2", colNames = TRUE, skipEmptyRows = TRUE) expect_equal(dim(x), c(5, 2)) ## Keep empty rows x <- read.xlsx(xlsxFile = temp_file, namedRegion = "iris", colNames = TRUE, skipEmptyRows = FALSE) expect_equal(dim(x), c(5, 2)) x <- read.xlsx(xlsxFile = temp_file, namedRegion = "iris2", colNames = TRUE, skipEmptyRows = FALSE) expect_equal(dim(x), c(6, 2)) unlink(temp_file) }) test_that("Missing columns in named regions", { temp_file <- temp_xlsx() wb <- createWorkbook() addWorksheet(wb, "Sheet 1") ## create region writeData(wb, sheet = 1, x = iris[1:11, ], startCol = 1, startRow = 1) deleteData(wb, sheet = 1, cols = 2, rows = 1:12, gridExpand = TRUE) createNamedRegion( wb = wb, sheet = 1, name = "iris", rows = 1:5, cols = 1:2 ) createNamedRegion( wb = wb, sheet = 1, name = "iris2", rows = 1:5, cols = 1:3 ) ## iris region is rows 1:5 & cols 1:2 ## iris2 region is rows 1:5 & cols 1:3 ## row 6 columns 1 & 2 are blank expect_equal(getNamedRegions(wb)[1:2], c("iris", "iris2"), ignore.attributes = TRUE) expect_equal(attr(getNamedRegions(wb), "sheet"), c("Sheet 1", "Sheet 1")) expect_equal(attr(getNamedRegions(wb), "position"), c("A1:B5", "A1:C5")) ######################################################################## from Workbook ## Skip empty cols x <- read.xlsx(xlsxFile = wb, namedRegion = "iris", colNames = TRUE, skipEmptyCols = TRUE) expect_equal(dim(x), c(4, 1)) x <- read.xlsx(xlsxFile = wb, namedRegion = "iris2", colNames = TRUE, skipEmptyCols = TRUE) expect_equal(dim(x), c(4, 2)) ## Keep empty cols x <- read.xlsx(xlsxFile = wb, namedRegion = "iris", colNames = TRUE, skipEmptyCols = FALSE) expect_equal(dim(x), c(4, 1)) x <- read.xlsx(xlsxFile = wb, namedRegion = "iris2", colNames = TRUE, skipEmptyCols = FALSE) expect_equal(dim(x), c(4, 3)) ######################################################################## from file saveWorkbook(wb, file = temp_file, overwrite = TRUE) ## Skip empty cols x <- read.xlsx(xlsxFile = temp_file, namedRegion = "iris", colNames = TRUE, skipEmptyCols = TRUE) expect_equal(dim(x), c(4, 1)) x <- read.xlsx(xlsxFile = temp_file, namedRegion = "iris2", colNames = TRUE, skipEmptyCols = TRUE) expect_equal(dim(x), c(4, 2)) ## Keep empty cols x <- read.xlsx(xlsxFile = temp_file, namedRegion = "iris", colNames = TRUE, skipEmptyCols = FALSE) expect_equal(dim(x), c(4, 1)) x <- read.xlsx(xlsxFile = temp_file, namedRegion = "iris2", colNames = TRUE, skipEmptyCols = FALSE) expect_equal(dim(x), c(4, 3)) unlink(temp_file) }) test_that("Matching Substrings breaks reading named regions", { temp_file <- temp_xlsx() wb <- createWorkbook() addWorksheet(wb, "table") addWorksheet(wb, "table2") t1 <- head(iris) t1$Species <- as.character(t1$Species) t2 <- head(mtcars) writeData(wb, sheet = "table", x = t1, name = "t", startCol = 3, startRow = 12) writeData(wb, sheet = "table2", x = t2, name = "t2", startCol = 5, startRow = 24, rowNames = TRUE) writeData(wb, sheet = "table", x = head(t1, 3), name = "t1", startCol = 9, startRow = 3) writeData(wb, sheet = "table2", x = head(t2, 3), name = "t22", startCol = 15, startRow = 12, rowNames = TRUE) saveWorkbook(wb, file = temp_file, overwrite = TRUE) r1 <- getNamedRegions(wb) expect_equal(attr(r1, "sheet"), c("table", "table2", "table", "table2")) expect_equal(attr(r1, "position"), c("C12:G18", "E24:P30", "I3:M6", "O12:Z15")) expect_equal(r1, c("t", "t2", "t1", "t22"), check.attributes = FALSE) r2 <- getNamedRegions(temp_file) expect_equal(attr(r2, "sheet"), c("table", "table2", "table", "table2")) expect_equal(attr(r1, "position"), c("C12:G18", "E24:P30", "I3:M6", "O12:Z15")) expect_equal(r2, c("t", "t2", "t1", "t22"), check.attributes = FALSE) ## read file named region expect_equal(t1, read.xlsx(xlsxFile = temp_file, namedRegion = "t")) expect_equal(t2, read.xlsx(xlsxFile = temp_file, namedRegion = "t2", rowNames = TRUE)) expect_equal(head(t1, 3), read.xlsx(xlsxFile = temp_file, namedRegion = "t1")) expect_equal(head(t2, 3), read.xlsx(xlsxFile = temp_file, namedRegion = "t22", rowNames = TRUE)) ## read Workbook named region expect_equal(t1, read.xlsx(xlsxFile = wb, namedRegion = "t")) expect_equal(t2, read.xlsx(xlsxFile = wb, namedRegion = "t2", rowNames = TRUE)) expect_equal(head(t1, 3), read.xlsx(xlsxFile = wb, namedRegion = "t1")) expect_equal(head(t2, 3), read.xlsx(xlsxFile = wb, namedRegion = "t22", rowNames = TRUE)) unlink(temp_file) }) test_that("Read namedRegion from specific sheet", { filename <- system.file("extdata", "namedRegions3.xlsx", package = "openxlsx") namedR <- "MyRange" sheets <- openxlsx::getSheetNames(filename) # read the correct sheets expect_equal(data.frame(X1 = "S1A1", X2 = "S1B1", stringsAsFactors = FALSE), read.xlsx(filename, sheet = "Sheet1", namedRegion = namedR, rowNames = FALSE, colNames = FALSE)) expect_equal(data.frame(X1 = "S2A1", X2 = "S2B1", stringsAsFactors = FALSE), read.xlsx(filename, sheet = which(sheets %in% "Sheet2"), namedRegion = namedR, rowNames = FALSE, colNames = FALSE)) expect_equal(data.frame(X1 = "S3A1", X2 = "S3B1", stringsAsFactors = FALSE), read.xlsx(filename, sheet = "Sheet3", namedRegion = namedR, rowNames = FALSE, colNames = FALSE)) # Warning: Workbook has no such named region. (Wrong namedRegion selected.) expect_warning(read.xlsx(filename, sheet = "Sheet2", namedRegion = "MyRage", rowNames = FALSE, colNames = FALSE)) # Warning: Workbook has no such named region on this sheet. (Correct namedRegion, but wrong sheet selected.) expect_warning(read.xlsx(filename, sheet = "Sheet4", namedRegion = namedR, rowNames = FALSE, colNames = FALSE)) }) test_that("Overwrite and delete named regions", { temp_file <- temp_xlsx() wb <- createWorkbook() addWorksheet(wb, "Sheet 1") ## create region writeData(wb, sheet = 1, x = iris[1:11, ], startCol = 1, startRow = 1, name = "iris") init_nr <- getNamedRegions(wb) expect_equal(attr(init_nr, "position"), "A1:E12") # no overwrite expect_error({ writeData(wb, sheet = 1, x = iris[1:11, ], startCol = 1, startRow = 1, name = "iris") }) expect_error({ createNamedRegion( wb = wb, sheet = 1, name = "iris", rows = 1:5, cols = 1:2 ) }) # overwrite createNamedRegion( wb = wb, sheet = 1, name = "iris", rows = 1:5, cols = 1:2, overwrite = TRUE ) # check midification modify_nr <- getNamedRegions(wb) expect_equal(attr(modify_nr, "position"), "A1:B5") expect_true("iris" %in% modify_nr) # delete name region deleteNamedRegion(wb, "iris") expect_false("iris" %in% getNamedRegions(wb)) }) openxlsx/tests/testthat/test-validate_data.R0000644000176200001440000000111114656134061021016 0ustar liggesuserscontext("Data validation") # Basic test workbook ========================================================== wb <- createWorkbook() addWorksheet(wb, "Sheet 1") addWorksheet(wb, "Sheet 2") writeDataTable(wb, sheet = 1, x = iris[1:30, ]) writeData(wb, sheet = 2, x = sample(iris$Sepal.Length, 10)) # Unit tests =================================================================== test_that("Data validation for lists is performed without warnings", { expect_invisible( dataValidation( wb, 1, col = 1, rows = 2:31, type = "list", value = "'Sheet 2'!$A$1:$A$10" ) ) }) openxlsx/tests/testthat.R0000644000176200001440000000007414374150317015265 0ustar liggesuserslibrary(testthat) library(openxlsx) test_check("openxlsx") openxlsx/MD50000644000176200001440000003432714745244712012465 0ustar liggesusers6299def7e30db3974dd5b3b4d4354efc *DESCRIPTION 642d2c8a8eb84596cf03131cd006091e *LICENSE 1a32ad0e36bc453bc2afef984e267942 *NAMESPACE cb9bcb19b4bbfd1381341c4e3a686b1a *NEWS.md c08a8ae64bd2fde94977c8268628cdd0 *R/CommentClass.R 9b3fdf37acfe6790cbc60428d8d3a9d6 *R/HyperlinkClass.R 86e7a64744faaa38afab4ceef1b02c26 *R/RcppExports.R c7da3c75dc0ed45e6c97e0da745b8193 *R/StyleClass.R f402e52cca78214d04cea4eab3334892 *R/WorkbookClass.R ed8c8bbe703a435117845c659f43724f *R/asserts.R bb7c007a1a080126b9636b020be85510 *R/baseXML.R fcbb6c09c7c420eab65006b860b7514d *R/borderFunctions.R 4a29591f990da8301d04833fe9ad17a9 *R/build_workbook.R 3bad4cf7533cb8c28ace7b6f13624ad1 *R/chartsheet_class.R 462742cbe2f8a93dd4e4eb7c29c7d819 *R/class_definitions.R 53e77a66ba7e19857a563dda0245d639 *R/conditional_formatting.R 269f5d48db8f9e67d3297a69faab9ce9 *R/data-fontSizeLookupTables.R 96dacf5ef420cbf2f380cf3a2f6ea5b9 *R/helperFunctions.R 9bafc112fb2d2a6fc59b1b93676a6db3 *R/loadWorkbook.R 17914458bc705cfa48e8f3d25e0b6b4d *R/onUnload.R 2bc28d6a22bef8b953f3092f4fc0130d *R/openXL.R 609be913ba8f81a81c72165d4ffd41cf *R/openxlsx-package.R 1f1441ce57a728521b2d80e1ca73a798 *R/openxlsx.R 7df6f80fccf042c628a4f736bf54c066 *R/openxlsxCoerce.R 4a718b50a93db93865d10c9bf4d61bfc *R/readWorkbook.R c677252863c1e91658b83ed306bb6984 *R/setWindowSize.R 0e5d88f926958a0327906fd56b499bcb *R/sheet_data_class.R 495a7fcc97356aa1d9b30dfae3e8acf4 *R/sysdata.rda 2421ef6611992334a90e1b6ee1ca6a61 *R/utils.R 7682cbeee04c54085dfa7fdd6ea29448 *R/workbook_column_widths.R 2f33d64c79eb477ec2166d0021b64fde *R/workbook_read_workbook.R 1343553c586c554a413887fc4ac1654a *R/workbook_write_data.R e5db136a9855cb2a44e39f91b1858fe5 *R/worksheet_class.R 2e8a4a77abbbc1572561950065e4b52a *R/wrappers.R fff6ea056b535bc2abf59e72e4c1ae4c *R/writeData.R bdb2df15c65423790f3efb935e7852d8 *R/writeDataTable.R 3c960289e8671e36c3f3041bdcb4c612 *R/writexlsx.R b2bb1de4aa9013d6160d148d5efce133 *R/zzz.R e53f84d5a0e15e66bb01f291e4ee0905 *README.md cfcf132c11de5d6ba6d2a42910c19f16 *build/vignette.rds 343d3a245359829be70f7a09fd3eb0f7 *data/openxlsxFontSizeLookupTable.rda b8a2611217089a3cc419d7e0e6fd2ee1 *data/openxlsxFontSizeLookupTableBold.rda 67cc3de04bf79b5b9eafc803219231f7 *inst/WORDLIST 72ee868baade1eed178617829684922d *inst/doc/Formatting.R 2d352ded3ea3b85cf911fe01179a140a *inst/doc/Formatting.Rmd a655c9bd8dfd32d67b282995dde1d980 *inst/doc/Formatting.html 7ebe1039dd1ebb038cb34244f79fda46 *inst/doc/Introduction.R 5f329b4c2d841f09d18f4a20efa4c1e7 *inst/doc/Introduction.Rmd 632e25bc2de18e1763ccbbf3c99546a0 *inst/doc/Introduction.html b882b13f509c96d058883be4eb6664a1 *inst/extdata/ColorTabs3.xlsx 94cfdf8f6784785d4606805128a28659 *inst/extdata/build_font_size_lookup.R 13cccf9835335301211ac8d8a4785659 *inst/extdata/cloneEmptyWorksheetExample.xlsx c2f3a10132c34da8e7c70a72f52d06c5 *inst/extdata/cloneWorksheetExample.xlsx 12d59e9df767c97293b786deb7569e00 *inst/extdata/conditional_formatting_testing.R 36a7feeb6214d7e79ac8b89df3c45df0 *inst/extdata/einstein.jpg 9ee0809d7c588f17b47a7b6bcd13f5a6 *inst/extdata/gh_issue_288.xlsx 0c1574a0171de89f03b8cfc5dcd0d0e5 *inst/extdata/groupTest.xlsx 4e2a987f8dc163fe8e53a1fe46757201 *inst/extdata/inlineStr.xlsx fb9a2de7bc2ec82fe52394335d80050d *inst/extdata/loadExample.xlsx 170b968dd1a7c0bbb8ff70ac6a53565a *inst/extdata/loadPivotTables.xlsx a26ff22341de278fefc53dd6baba61e8 *inst/extdata/loadThreadComment.xlsx d148fd0b486ea7486d529a6d83ef36a1 *inst/extdata/load_xlsx_testing.R 993580626b6ba2c02fb52957a174c69e *inst/extdata/na_convert.xlsx b880cccb0e6a0573c9107453505ee04a *inst/extdata/namedRegions.xlsx 5c6ee667b971ee565af8d65a715176fe *inst/extdata/namedRegions2.xlsx e02ca6f0caae9cd6dc155c8c76b2c7eb *inst/extdata/namedRegions3.xlsx 41f241c6e98b325badb716b4d7f1bfc2 *inst/extdata/nested_grouped_rowscols.xlsx 1febf7741950a8f461c80f0975895d1e *inst/extdata/readTest.xlsx 87c13e763f8e6097bbdc81159798622f *inst/extdata/read_failure_test.xlsx 9a47fb9a8bfbd1e30f5589ada1179027 *inst/extdata/silent_worksheet_entries.xlsx d54cbee2c4963f0de72fe9402c3cf330 *inst/extdata/stack_style_testing.R c6aeb228c3870708bd97960b7cdd2ccb *man/NamedRegion.Rd 18350dca6385752a9b2e36991d6ec56d *man/activeSheet.Rd 273b6e96b63df7312bb4151331604347 *man/addCreator.Rd bbaf3609c33e80c456ab44d68e3da3fe *man/addFilter.Rd ddfd19ebf034a74bb11e5429bc9b0cb1 *man/addStyle.Rd 9b3a515c14d7913e2c77fc9a846787b7 *man/addWorksheet.Rd 9a966e34696cf5c4ff264921000eb6f7 *man/all.equal.Rd 99f4e3d204f3fcc3d249c396c157c9fa *man/as.character.formula.Rd 957e8b1f1160a3496142763f7d6c12dd *man/as_POSIXct_utc.Rd ea0fc10654e64c717381e31abe8c49ac *man/auto_heights.Rd 85cda23cbc7766b5d9e0470f8d09b4a4 *man/buildWorkbook.Rd 99fb306f47779db2fb1299b3220f690b *man/cloneWorksheet.Rd a76b621acf03d12e802f7740410c7b75 *man/col2int.Rd 4d640d702ab19fa1cfe66b65f2cc8cac *man/conditionalFormat.Rd 9056a595939f4206f1f7d518d7dfb054 *man/conditionalFormatting.Rd be2f5a877330a76c56886030b21f71fa *man/convertFromExcelRef.Rd 49cc87aea1dceed112a0ad7db86140bc *man/convertToDate.Rd 56eb70168427856194e638ea45cf00d1 *man/convertToDateTime.Rd 3afd6bee7500ceb56f47b04cd218d5ec *man/copyWorkbook.Rd 1408f21e6ce1c0d39027432386b594eb *man/createComment.Rd 98cc3c8d01aa62582bde667a5f3cafa2 *man/createStyle.Rd ef35091c04398e70ab66ac0e58447b3a *man/createWorkbook.Rd 7cf9d8466f05ee64303056d3c50cfd41 *man/dataValidation.Rd 22842e0dc52b1bb9faaa01d32837cce8 *man/deleteData.Rd a4b60bbb803103fbb4d98166c7c18196 *man/deleteDataColumn.Rd cb1e46f469cfbbbde29c8b5113e1d789 *man/figures/lifecycle-archived.svg c0d2e5a54f1fa4ff02bf9533079dd1f7 *man/figures/lifecycle-defunct.svg a1b8c987c676c16af790f563f96cbb1f *man/figures/lifecycle-deprecated.svg c3978703d8f40f2679795335715e98f4 *man/figures/lifecycle-experimental.svg 952b59dc07b171b97d5d982924244f61 *man/figures/lifecycle-maturing.svg 27b879bf3677ea76e3991d56ab324081 *man/figures/lifecycle-questioning.svg 46de21252239c5a23d400eae83ec6b2d *man/figures/lifecycle-retired.svg 6902bbfaf963fbc4ed98b86bda80caa2 *man/figures/lifecycle-soft-deprecated.svg 53b3f893324260b737b3c46ed2a0e643 *man/figures/lifecycle-stable.svg ef31140642186ea56df0de173b762df9 *man/figures/logo.png 9935549e5ab436e1a14b39aa6eb5f586 *man/figures/tableoptions.pdf 57f30d30484a5402e9fce7539de1d3a6 *man/figures/tableoptions.png 0149d719fa10621d49bab2dab606fa78 *man/freezePane.Rd 3ef5e44807e4b1bcc6e11ed59cd7c88e *man/getBaseFont.Rd 859371762a43d28a8c7c432c87225414 *man/getCellRefs.Rd 99ec5c9f79447f83e1408ec70f530c1d *man/getCreators.Rd ce4edd8f6f6346b3ee529cef824504fb *man/getDateOrigin.Rd 6c5dff3e29072bcfdcc29a5acf00cb16 *man/getNamedRegions.Rd 51c06a3e6a3b48f803f31cfc5da77718 *man/getSheetNames.Rd c68485370e63eb113ec778e4e580c036 *man/getStyles.Rd 93b0fefa86c1831dcc15d319dc96b3b6 *man/getTables.Rd 04a5aaf0c26f4a784601696f9ef056d0 *man/get_worksheet_entries.Rd 6453bb240b16419933b4e95ca50a4a19 *man/groupColumns.Rd 69cb6afee11814687a2dae4ddacd10a6 *man/groupRows.Rd 6e28aa8bb05e1302ed6cf695ef963e37 *man/if_null_then.Rd 6d8ad79db92a3cf3db98216948eea006 *man/insertImage.Rd b1add1c7291378f6ee82dddbf7f88214 *man/insertPlot.Rd 8ff8b8e6032d06730162721cb9a73551 *man/int2col.Rd 899d107df8bd12130d82819db050f422 *man/loadWorkbook.Rd 60ddf015971252068024307796311ef5 *man/makeHyperlinkString.Rd 765d90aa1da92e2a2253f35ca8415e70 *man/mergeCells.Rd 33949f2f7996248691f1e24d3c34f42e *man/modifyBaseFont.Rd 7e325d8306c2cd6d7cbbb596d2a22100 *man/names.Rd ac4dc6218aafac571db14324923e828b *man/openXL.Rd 6866bcf15be8c62fef05be3f1a9468cc *man/openxlsx.Rd 85409f35c05f52fdc110c91ddc910606 *man/openxlsxFontSizeLookupTable.Rd 749167442b4f5763420869f1104c5fba *man/openxlsx_options.Rd c9f636ec6e72658b73c50782f764b75e *man/pageBreak.Rd 0035a9387fd16efb4b27699e0aaa7096 *man/pageSetup.Rd efd799300fd0b8f28ca76c5a6ebe23b3 *man/protectWorkbook.Rd 31ebda5026cbb39bd0473f51bb1cc767 *man/protectWorksheet.Rd 32fa8e3c63b26933c85f874a12b3f44c *man/read.xlsx.Rd cc256c448e08386d72b870cff4c5044f *man/readWorkbook.Rd fe6d6bd2b296ae2518c90e74d4536298 *man/removeCellMerge.Rd f6aca8a6e9dbc80d1ca75584f5703f2e *man/removeColWidths.Rd fb081d4904e9d451b7700bf46953bac8 *man/removeComment.Rd 8a4be0dc4493756345236301731f6cb1 *man/removeFilter.Rd ccbe03f6634679bbf9e02bad224b5449 *man/removeRowHeights.Rd acb9313bcf25977e8e1692a33899c74c *man/removeTable.Rd 0501e2933272896dc38181f252821d9e *man/removeWorksheet.Rd 576dc9d7676e4c439b504ddc92e77cd8 *man/renameWorksheet.Rd b318513a8ad61c50e4c7abfd92ecbeda *man/replaceStyle.Rd 19d87523c8ad1c916bed239f1d0c06bc *man/saveWorkbook.Rd 2a0ed5f23849651b38661ec25db0cee1 *man/setColWidths.Rd 5272e5d31ce61886e297552fe804db83 *man/setFooter.Rd 4ed2e0674e259bc5762024a399058d3a *man/setHeader.Rd 8ccfdfa4a8f9add8c7fb9a306f47de56 *man/setHeaderFooter.Rd 59843df825b3188fa66773c2c219eb67 *man/setLastModifiedBy.Rd db359d18f45f627d9efbfdb4b5c21e54 *man/setRowHeights.Rd d5ad29e20d8850acfb352c0c09fa3ae9 *man/setWindowSize.Rd b58e3015272c2e9f26a6403d8571c336 *man/sheetVisibility.Rd 38a4899f27620d73520a573591471556 *man/sheetVisible.Rd 1fbb54405f371943a8d54ee8401b0b3e *man/sheets.Rd c298e8123d3dbe3109affcd97ecc4ba3 *man/showGridLines.Rd 284f8e2c1c315486b3def805d5934aff *man/temp_xlsx.Rd ab5949a9477236dc55a96ca0ee169f8a *man/ungroupColumns.Rd a4461839e10dedad79db486bc2e175d4 *man/ungroupRows.Rd 661899c8e1ee9da19b220b762d609926 *man/worksheetOrder.Rd 6017ff27934cda950d82cbadcd933e78 *man/write.xlsx.Rd 008f5482c257bf67a82e93f2bed929bc *man/writeComment.Rd b2f191ea7314eaff5b37067be8263cca *man/writeData.Rd 59e38f64253975a683c90dd440bc7af8 *man/writeDataTable.Rd 72fa2fda9ae6051bb5447bdbb4bdf5aa *man/writeFormula.Rd 458ccf3508f0ddf06fb3ccb5651823ce *src/RcppExports.cpp 71289967be1025e3cff58b2edbe0fc77 *src/helper_functions.cpp 333dc6fea1e7d5c200864132569e13d0 *src/load_workbook.cpp 1385cba6d8f3abe5f80618b30fcd938b *src/openxlsx.h 2327d9c18dfe187ff583451188a37a90 *src/read_workbook.cpp 557afd47f11e28673fc3baece799a607 *src/write_data.cpp cfd2f3edb190a3b8143b318692f089af *src/write_file.cpp 02eaa86a480283543be67636cc724155 *src/write_file_2.cpp 0f4ef4791fd7c7c057019a8ea9be4189 *tests/testthat.R 4b4305ecb6df9b843523a2ba15d69f6e *tests/testthat/test-CommentClass.R 5b803cd6f138e8fb404979260f27a78b *tests/testthat/test-Workbook_properties.R 7bd0057d0a4b315701510d8f156e001c *tests/testthat/test-Worksheet_naming.R f1037393961c7deb9b2afaf4f83979ca *tests/testthat/test-activeSheet.R 513547f7f067dbd76fd1d00b90881e13 *tests/testthat/test-border_parsing.R 22f6b897df2ec3ec24a88b29a55a41e5 *tests/testthat/test-build_workbook.R aef5cc8a6e9dfd355eb5181fa1ff7762 *tests/testthat/test-cloneWorksheet.R 5d000063ccb5f76e195feb7172cec910 *tests/testthat/test-conditionalFormatting.R 78a650379a2ede86b31f081650980434 *tests/testthat/test-date_time_conversion.R 00c7e6604ed5414b946cc008e9ea0f7e *tests/testthat/test-deleting_tables.R 1127f9ec5320f662c6084c88c4dd1c7e *tests/testthat/test-encoding.R b45dfc802717dc0712c2652a1f2e46d0 *tests/testthat/test-fill_merged_cells.R b32dd54c884ff5b2c1c14175bb8eca37 *tests/testthat/test-fontSizeLookupTables.R f18592bcae7665f118ad956f8945b69f *tests/testthat/test-freeze_pane.R c35aa4ff942b23ebca3f574c4572aecb *tests/testthat/test-getBaseFont.R ef82ea6139b9810fec76cec79ed3f1ef *tests/testthat/test-getCellRefs.R 04fe8e391522ca3c996657dbd4f9b51e *tests/testthat/test-grouped_rows.R 011c5f633e3dfcb4e144a3d13a7ec59f *tests/testthat/test-insertImage.R 6a35092ab345ed8b28d7992a614e9c04 *tests/testthat/test-load_read_file_read_equality.R 6c6ae38f471c755c329475a86d7dbc69 *tests/testthat/test-loading_workbook.R 638c53b84f39ead1ed3a74830574a302 *tests/testthat/test-loading_workbook_tables.R 1dfb48fd6cb85655b177382a089253c7 *tests/testthat/test-loading_workbook_unzipped.R 0baadbd59bde179827e8def90ebfbc6a *tests/testthat/test-named_regions.R 3043ba1c251ea01af1102fa62eabc181 *tests/testthat/test-options.R 0fbe61fdfa35328c262edcac7b450744 *tests/testthat/test-outlines.R d4c11d48bcba235b2875b6668124bca6 *tests/testthat/test-page_setup.R b50185556b0803ba2371b9895e006acf *tests/testthat/test-protect-workbook.R afa7a2b159c05bc03bf9464964c723e3 *tests/testthat/test-protect-worksheet.R db0a7f925cea27925f76cbcf4b190bb1 *tests/testthat/test-read_from_created_wb.R d694023e037c359b7739f32de6419801 *tests/testthat/test-read_from_loaded_workbook.R 4035e85beac8e000a89ba86f505a4264 *tests/testthat/test-read_sources.R 44dab24011f5e3fb3423f72acba56a73 *tests/testthat/test-read_write_logicals.R 970a6f91a0154683f4eadeddf711d26b *tests/testthat/test-read_xlsx_correct_sheet.R 1eca5bc2c26f119ecf4456ca813f6992 *tests/testthat/test-read_xlsx_random_seed.R df54be3f12d660c574b32227c4cceee7 *tests/testthat/test-remove_worksheets.R c4ac69f8a52d9d98661ddec632c30ea5 *tests/testthat/test-saveWorkbook.R ef7a7ec2e8398cb062867f4f7d55d786 *tests/testthat/test-setColWidths.R ab4900f0518a36be467b34c23eeca0e2 *tests/testthat/test-setWindowSize.R a99a9cbfcdb79a3686e2a0ba9186b72d *tests/testthat/test-silent_worksheet_entries.R 625439523957f8b6e588060b2dabf378 *tests/testthat/test-skip_empty_cols.R 9111b653923fb206174fea7e08b10d1e *tests/testthat/test-skip_empty_rows.R 34195c84b33ca34853ac9283c28f16fc *tests/testthat/test-styles.R 7b4de205c3f151929e45e591ffbf6169 *tests/testthat/test-table_overlaps.R ba69b538bfb64fb4750c5516f71ad5d1 *tests/testthat/test-trying_to_break_openxlsx.R f9360d4b16fe2d81181b6a96d520033c *tests/testthat/test-v3_0_0_bugs.R 4758b60140ac4e0f5fcf53b0d6811069 *tests/testthat/test-validate_data.R 16ae9afdd27f64d245772cdd8d63b473 *tests/testthat/test-validate_table_name.R 6f819a56ef06b1c5626072591dd12903 *tests/testthat/test-worksheet_ordering.R 59ef59664451c2679e13b11ada83e10f *tests/testthat/test-worksheet_renaming.R 1ba209900809f827995e6ba252781357 *tests/testthat/test-wrappers.R 7c3850df1cdfa5a305758f031c5935e6 *tests/testthat/test-write-permissions.R 85c78d352b7f286f11093257d23e3922 *tests/testthat/test-writeData.R c32903035cd015e26586d1384cfc2058 *tests/testthat/test-writeDataTable.R 2b4cf09ff9a76bd24017289745c55bbf *tests/testthat/test-write_data_to_sheetData.R fa9e13ce4b7350b26acd70f3f4372425 *tests/testthat/test-write_data_to_sheetData_NAs.R d502e4fdd25e6f387e69f375099d77c3 *tests/testthat/test-write_read_equality.R 3dcb14d080558215ff00f0a5b2e4ab51 *tests/testthat/test-write_xlsx_vector_args.R 5b7ee465d9df599c9c3d5b3f659a8df1 *tests/testthat/test-writing_posixct.R fa20be960d52aee79fe4d47f3dcb4c03 *tests/testthat/test-writing_sheet_data.R 2d352ded3ea3b85cf911fe01179a140a *vignettes/Formatting.Rmd 5f329b4c2d841f09d18f4a20efa4c1e7 *vignettes/Introduction.Rmd e37f875bb932ea389ed1a8abe3405ccf *vignettes/tableStyles.PNG openxlsx/R/0000755000176200001440000000000014745235501012341 5ustar liggesusersopenxlsx/R/RcppExports.R0000644000176200001440000001061414701433367014761 0ustar liggesusers# Generated by using Rcpp::compileAttributes() -> do not edit by hand # Generator token: 10BE3573-1514-4C36-9D1C-5A225CD40393 calc_column_widths <- function(sheet_data, sharedStrings, autoColumns, widths, baseFontCharWidth, minW, maxW) { .Call(`_openxlsx_calc_column_widths`, sheet_data, sharedStrings, autoColumns, widths, baseFontCharWidth, minW, maxW) } convert_to_excel_ref <- function(cols, LETTERS) { .Call(`_openxlsx_convert_to_excel_ref`, cols, LETTERS) } convert_from_excel_ref <- function(x) { .Call(`_openxlsx_convert_from_excel_ref`, x) } convert_to_excel_ref_expand <- function(cols, LETTERS, rows) { .Call(`_openxlsx_convert_to_excel_ref_expand`, cols, LETTERS, rows) } isInternalHyperlink <- function(x) { .Call(`_openxlsx_isInternalHyperlink`, x) } write_file <- function(head = "", body = "", tail = "", fl = "") { .Call(`_openxlsx_write_file`, head, body, tail, fl) } cppReadFile <- function(xmlFile) { .Call(`_openxlsx_cppReadFile`, xmlFile) } read_file_newline <- function(xmlFile) { .Call(`_openxlsx_read_file_newline`, xmlFile) } get_letters <- function() { .Call(`_openxlsx_get_letters`) } markUTF8 <- function(x, clone) { .Call(`_openxlsx_markUTF8`, x, clone) } loadworksheets <- function(wb, styleObjects, xmlFiles, is_chart_sheet) { .Call(`_openxlsx_loadworksheets`, wb, styleObjects, xmlFiles, is_chart_sheet) } getNodes <- function(xml, tagIn) { .Call(`_openxlsx_getNodes`, xml, tagIn) } getOpenClosedNode <- function(xml, open_tag, close_tag) { .Call(`_openxlsx_getOpenClosedNode`, xml, open_tag, close_tag) } getAttr <- function(x, tag) { .Call(`_openxlsx_getAttr`, x, tag) } getChildlessNode_ss <- function(xml, tag) { .Call(`_openxlsx_getChildlessNode_ss`, xml, tag) } getChildlessNode <- function(xml, tag) { .Call(`_openxlsx_getChildlessNode`, xml, tag) } get_extLst_Major <- function(xml) { .Call(`_openxlsx_get_extLst_Major`, xml) } cell_ref_to_col <- function(x) { .Call(`_openxlsx_cell_ref_to_col`, x) } int_2_cell_ref <- function(cols) { .Call(`_openxlsx_int_2_cell_ref`, cols) } get_shared_strings <- function(xmlFile, isFile) { .Call(`_openxlsx_get_shared_strings`, xmlFile, isFile) } getCellInfo <- function(xmlFile, sharedStrings, skipEmptyRows, startRow, rows, getDates) { .Call(`_openxlsx_getCellInfo`, xmlFile, sharedStrings, skipEmptyRows, startRow, rows, getDates) } read_workbook <- function(cols_in, rows_in, v, string_inds, is_date, hasColNames, hasSepNames, skipEmptyRows, skipEmptyCols, nRows, clean_names) { .Call(`_openxlsx_read_workbook`, cols_in, rows_in, v, string_inds, is_date, hasColNames, hasSepNames, skipEmptyRows, skipEmptyCols, nRows, clean_names) } calc_number_rows <- function(x, skipEmptyRows) { .Call(`_openxlsx_calc_number_rows`, x, skipEmptyRows) } map_cell_types_to_integer <- function(t) { .Call(`_openxlsx_map_cell_types_to_integer`, t) } map_cell_types_to_char <- function(t) { .Call(`_openxlsx_map_cell_types_to_char`, t) } build_cell_types_integer <- function(classes, n_rows) { .Call(`_openxlsx_build_cell_types_integer`, classes, n_rows) } buildCellTypes <- function(classes, nRows) { .Call(`_openxlsx_buildCellTypes`, classes, nRows) } build_cell_merges <- function(comps) { .Call(`_openxlsx_build_cell_merges`, comps) } buildCellList <- function(r, t, v) { .Call(`_openxlsx_buildCellList`, r, t, v) } #' @import Rcpp write_worksheet_xml <- function(prior, post, sheet_data, R_fileName) { .Call(`_openxlsx_write_worksheet_xml`, prior, post, sheet_data, R_fileName) } buildMatrixNumeric <- function(v, rowInd, colInd, colNames, nRows, nCols) { .Call(`_openxlsx_buildMatrixNumeric`, v, rowInd, colInd, colNames, nRows, nCols) } buildMatrixMixed <- function(v, rowInd, colInd, colNames, nRows, nCols, charCols, dateCols) { .Call(`_openxlsx_buildMatrixMixed`, v, rowInd, colInd, colNames, nRows, nCols, charCols, dateCols) } matrixRowInds <- function(indices) { .Call(`_openxlsx_matrixRowInds`, indices) } build_table_xml <- function(table, tableStyleXML, ref, colNames, showColNames, withFilter) { .Call(`_openxlsx_build_table_xml`, table, tableStyleXML, ref, colNames, showColNames, withFilter) } write_worksheet_xml_2 <- function(prior, post, sheet_data, row_heights_ = NULL, outline_levels_ = NULL, R_fileName = "output") { .Call(`_openxlsx_write_worksheet_xml_2`, prior, post, sheet_data, row_heights_, outline_levels_, R_fileName) } openxlsx/R/borderFunctions.R0000644000176200001440000003446014656134061015641 0ustar liggesusers genBaseColStyle <- function(cc) { colStyle <- createStyle() specialFormat <- TRUE if ("date" %in% cc) { colStyle <- createStyle(numFmt = "date") } else if (any(c("posixlt", "posixct", "posixt") %in% cc)) { colStyle <- createStyle(numFmt = "longdate") } else if ("currency" %in% cc) { colStyle$numFmt <- list(numFmtId = "164", "formatCode" = ""$"#,##0.00") } else if ("accounting" %in% cc) { colStyle$numFmt <- list(numFmtId = "44") } else if ("hyperlink" %in% cc) { colStyle$fontColour <- list(theme = "10") } else if ("percentage" %in% cc) { colStyle$numFmt <- list(numFmtId = "10") } else if ("scientific" %in% cc) { colStyle$numFmt <- list(numFmtId = "11") } else if (any(c("3", "comma") %in% cc)) { colStyle$numFmt <- list(numFmtId = "3") } else if ("numeric" %in% cc && !grepl("[^0\\.,#\\$\\* %]", openxlsx_getOp("numFmt"))) { colStyle$numFmt <- list(numFmtId = 9999, formatCode = openxlsx_getOp("numFmt")) } else { colStyle$numFmt <- list(numFmtId = "0") specialFormat <- FALSE } list( style = colStyle, specialFormat = specialFormat ) } Workbook$methods(surroundingBorders = function( colClasses, sheet, startRow, startCol, nRow, nCol, borderColour, borderStyle, borderType ) { sheet <- sheet_names[[validateSheet(sheet)]] ## steps # get column class # get corresponding base style for (i in 1:nCol) { tmp <- genBaseColStyle(colClasses[[i]]) colStyle <- tmp$style specialFormat <- tmp$specialFormat ## create style objects sTop <- colStyle$copy() sMid <- colStyle$copy() sBot <- colStyle$copy() ## First column if (i == 1) { if (nRow == 1 & nCol == 1) { ## All sTop$borderTop <- borderStyle sTop$borderTopColour <- borderColour sTop$borderBottom <- borderStyle sTop$borderBottomColour <- borderColour sTop$borderLeft <- borderStyle sTop$borderLeftColour <- borderColour sTop$borderRight <- borderStyle sTop$borderRightColour <- borderColour styleObjects <<- append(styleObjects, list( list( "style" = sTop, "sheet" = sheet, "rows" = startRow, "cols" = startCol ) )) } else if (nCol == 1) { ## Top sTop$borderLeft <- borderStyle sTop$borderLeftColour <- borderColour sTop$borderTop <- borderStyle sTop$borderTopColour <- borderColour sTop$borderRight <- borderStyle sTop$borderRightColour <- borderColour ## Middle sMid$borderLeft <- borderStyle sMid$borderLeftColour <- borderColour sMid$borderRight <- borderStyle sMid$borderRightColour <- borderColour ## Bottom sBot$borderBottom <- borderStyle sBot$borderBottomColour <- borderColour sBot$borderLeft <- borderStyle sBot$borderLeftColour <- borderColour sBot$borderRight <- borderStyle sBot$borderRightColour <- borderColour styleObjects <<- append(styleObjects, list( list( "style" = sTop, "sheet" = sheet, "rows" = startRow, "cols" = startCol ) )) styleObjects <<- append(styleObjects, list( list( "style" = sMid, "sheet" = sheet, "rows" = (startRow + 1L):(startRow + nRow - 2L), # 2nd -> 2nd to last "cols" = rep.int(startCol, nRow - 2L) ) )) styleObjects <<- append(styleObjects, list( list( "style" = sBot, "sheet" = sheet, "rows" = startRow + nRow - 1L, "cols" = startCol ) )) } else if (nRow == 1) { ## All sTop$borderTop <- borderStyle sTop$borderTopColour <- borderColour sTop$borderBottom <- borderStyle sTop$borderBottomColour <- borderColour sTop$borderLeft <- borderStyle sTop$borderLeftColour <- borderColour styleObjects <<- append(styleObjects, list( list( "style" = sTop, "sheet" = sheet, "rows" = startRow, "cols" = startCol ) )) } else { ## Top sTop$borderLeft <- borderStyle sTop$borderLeftColour <- borderColour sTop$borderTop <- borderStyle sTop$borderTopColour <- borderColour ## Middle sMid$borderLeft <- borderStyle sMid$borderLeftColour <- borderColour ## Bottom sBot$borderLeft <- borderStyle sBot$borderLeftColour <- borderColour sBot$borderBottom <- borderStyle sBot$borderBottomColour <- borderColour styleObjects <<- append(styleObjects, list( list( "style" = sTop, "sheet" = sheet, "rows" = startRow, "cols" = startCol ) )) if (nRow > 2) { styleObjects <<- append(styleObjects, list( list( "style" = sMid, "sheet" = sheet, "rows" = (startRow + 1L):(startRow + nRow - 2L), # 2nd -> 2nd to last "cols" = rep.int(startCol, nRow - 2L) ) )) } styleObjects <<- append(styleObjects, list( list( "style" = sBot, "sheet" = sheet, "rows" = startRow + nRow - 1L, "cols" = startCol ) )) } } else if (i == nCol) { if (nRow == 1) { ## All sTop$borderTop <- borderStyle sTop$borderTopColour <- borderColour sTop$borderBottom <- borderStyle sTop$borderBottomColour <- borderColour sTop$borderRight <- borderStyle sTop$borderRightColour <- borderColour styleObjects <<- append(styleObjects, list( list( "style" = sTop, "sheet" = sheet, "rows" = startRow, "cols" = startCol + nCol - 1L ) )) } else { ## Top sTop$borderRight <- borderStyle sTop$borderRightColour <- borderColour sTop$borderTop <- borderStyle sTop$borderTopColour <- borderColour ## Middle sMid$borderRight <- borderStyle sMid$borderRightColour <- borderColour ## Bottom sBot$borderRight <- borderStyle sBot$borderRightColour <- borderColour sBot$borderBottom <- borderStyle sBot$borderBottomColour <- borderColour styleObjects <<- append(styleObjects, list( list( "style" = sTop, "sheet" = sheet, "rows" = startRow, "cols" = startCol + nCol - 1L ) )) if (nRow > 2) { styleObjects <<- append(styleObjects, list( list( "style" = sMid, "sheet" = sheet, "rows" = (startRow + 1L):(startRow + nRow - 2L), # 2nd -> 2nd to last "cols" = rep.int(startCol + nCol - 1L, nRow - 2L) ) )) } styleObjects <<- append(styleObjects, list( list( "style" = sBot, "sheet" = sheet, "rows" = startRow + nRow - 1L, "cols" = startCol + nCol - 1L ) )) } } else { ## inside columns if (nRow == 1) { ## Top sTop$borderTop <- borderStyle sTop$borderTopColour <- borderColour ## Bottom sTop$borderBottom <- borderStyle sTop$borderBottomColour <- borderColour styleObjects <<- append(styleObjects, list( list( "style" = sTop, "sheet" = sheet, "rows" = startRow, "cols" = startCol + i - 1L ) )) } else { ## Top sTop$borderTop <- borderStyle sTop$borderTopColour <- borderColour ## Bottom sBot$borderBottom <- borderStyle sBot$borderBottomColour <- borderColour styleObjects <<- append(styleObjects, list( list( "style" = sTop, "sheet" = sheet, "rows" = startRow, "cols" = startCol + i - 1L ) )) ## Middle if (specialFormat) { styleObjects <<- append(styleObjects, list( list( "style" = sMid, "sheet" = sheet, "rows" = (startRow + 1L):(startRow + nRow - 2L), # 2nd -> 2nd to last "cols" = rep.int(startCol + i - 1L, nRow - 2L) ) )) } styleObjects <<- append(styleObjects, list( list( "style" = sBot, "sheet" = sheet, "rows" = startRow + nRow - 1L, "cols" = startCol + i - 1L ) )) } } ## End of if(i == 1), i == NCol, else inside columns } ## End of loop through columns invisible(0) }) Workbook$methods(rowBorders = function( colClasses, sheet, startRow, startCol, nRow, nCol, borderColour, borderStyle, borderType ) { sheet <- sheet_names[[validateSheet(sheet)]] ## steps # get column class # get corresponding base style for (i in 1:nCol) { tmp <- genBaseColStyle(colClasses[[i]]) sTop <- tmp$style ## First column if (i == 1) { if (nCol == 1) { ## All borders (rows and surrounding) sTop$borderTop <- borderStyle sTop$borderTopColour <- borderColour sTop$borderBottom <- borderStyle sTop$borderBottomColour <- borderColour sTop$borderLeft <- borderStyle sTop$borderLeftColour <- borderColour sTop$borderRight <- borderStyle sTop$borderRightColour <- borderColour } else { ## Top, Left, Bottom sTop$borderTop <- borderStyle sTop$borderTopColour <- borderColour sTop$borderBottom <- borderStyle sTop$borderBottomColour <- borderColour sTop$borderLeft <- borderStyle sTop$borderLeftColour <- borderColour } } else if (i == nCol) { ## Top, Right, Bottom sTop$borderTop <- borderStyle sTop$borderTopColour <- borderColour sTop$borderBottom <- borderStyle sTop$borderBottomColour <- borderColour sTop$borderRight <- borderStyle sTop$borderRightColour <- borderColour } else { ## inside columns ## Top, Middle, Bottom sTop$borderTop <- borderStyle sTop$borderTopColour <- borderColour sTop$borderBottom <- borderStyle sTop$borderBottomColour <- borderColour } ## End of if(i == 1), i == NCol, else inside columns styleObjects <<- append(styleObjects, list( list( "style" = sTop, "sheet" = sheet, "rows" = (startRow):(startRow + nRow - 1L), "cols" = rep(startCol + i - 1L, nRow) ) )) } ## End of loop through columns invisible(0) }) Workbook$methods(columnBorders = function( colClasses, sheet, startRow, startCol, nRow, nCol, borderColour, borderStyle, borderType ) { sheet <- sheet_names[[validateSheet(sheet)]] ## steps # get column class # get corresponding base style for (i in 1:nCol) { tmp <- genBaseColStyle(colClasses[[i]]) colStyle <- tmp$style specialFormat <- tmp$specialFormat ## create style objects sTop <- colStyle$copy() sMid <- colStyle$copy() sBot <- colStyle$copy() if (nRow == 1) { ## Top sTop$borderTop <- borderStyle sTop$borderTopColour <- borderColour sTop$borderBottom <- borderStyle sTop$borderBottomColour <- borderColour sTop$borderLeft <- borderStyle sTop$borderLeftColour <- borderColour sTop$borderRight <- borderStyle sTop$borderRightColour <- borderColour styleObjects <<- append(styleObjects, list( list( "style" = sTop, "sheet" = sheet, "rows" = startRow, "cols" = startCol + i - 1L ) )) } else { ## Top sTop$borderTop <- borderStyle sTop$borderTopColour <- borderColour sTop$borderLeft <- borderStyle sTop$borderLeftColour <- borderColour sTop$borderRight <- borderStyle sTop$borderRightColour <- borderColour ## Middle sMid$borderLeft <- borderStyle sMid$borderLeftColour <- borderColour sMid$borderRight <- borderStyle sMid$borderRightColour <- borderColour ## Bottom sBot$borderBottom <- borderStyle sBot$borderBottomColour <- borderColour sBot$borderLeft <- borderStyle sBot$borderLeftColour <- borderColour sBot$borderRight <- borderStyle sBot$borderRightColour <- borderColour colInd <- startCol + i - 1L styleObjects <<- append(styleObjects, list( list( "style" = sTop, "sheet" = sheet, "rows" = startRow, "cols" = colInd ) )) if (nRow > 2) { styleObjects <<- append(styleObjects, list( list( "style" = sMid, "sheet" = sheet, "rows" = (startRow + 1L):(startRow + nRow - 2L), "cols" = rep(colInd, nRow - 2L) ) )) } styleObjects <<- append(styleObjects, list( list( "style" = sBot, "sheet" = sheet, "rows" = startRow + nRow - 1L, "cols" = colInd ) )) } } ## End of loop through columns invisible(0) }) Workbook$methods(allBorders = function( colClasses, sheet, startRow, startCol, nRow, nCol, borderColour, borderStyle, borderType ) { sheet <- sheet_names[[validateSheet(sheet)]] ## steps # get column class # get corresponding base style for (i in 1:nCol) { tmp <- genBaseColStyle(colClasses[[i]]) sTop <- tmp$style ## All borders sTop$borderTop <- borderStyle sTop$borderTopColour <- borderColour sTop$borderBottom <- borderStyle sTop$borderBottomColour <- borderColour sTop$borderLeft <- borderStyle sTop$borderLeftColour <- borderColour sTop$borderRight <- borderStyle sTop$borderRightColour <- borderColour styleObjects <<- append(styleObjects, list( list( "style" = sTop, "sheet" = sheet, "rows" = (startRow):(startRow + nRow - 1L), "cols" = rep(startCol + i - 1L, nRow) ) )) } ## End of loop through columns invisible(0) }) openxlsx/R/worksheet_class.R0000644000176200001440000002046114656123677015702 0ustar liggesusers #' @include class_definitions.R WorkSheet$methods(initialize = function( showGridLines = TRUE, tabSelected = FALSE, tabColour = NULL, zoom = 100, oddHeader = NULL, oddFooter = NULL, evenHeader = NULL, evenFooter = NULL, firstHeader = NULL, firstFooter = NULL, paperSize = 9, orientation = "portrait", hdpi = 300, vdpi = 300 ) { if (!is.null(tabColour)) { tabColour <- sprintf('', tabColour) } else { tabColour <- character(0) } if (zoom < 10) { zoom <- 10 } else if (zoom > 400) { zoom <- 400 } naToNULLList <- function(x) { lapply(x, function(x) { if (is.na(x)) { return(NULL) } x }) } # hf <- list( # oddHeader = naToNULLList(oddHeader), # oddFooter = naToNULLList(oddFooter), # evenHeader = naToNULLList(evenHeader), # evenFooter = naToNULLList(evenFooter), # firstHeader = naToNULLList(firstHeader), # firstFooter = naToNULLList(firstFooter) # ) hf <- list( oddHeader = oddHeader, oddFooter = oddFooter, evenHeader = evenHeader, evenFooter = evenFooter, firstHeader = firstHeader, firstFooter = firstFooter ) if (all(vapply(hf, is.null, NA))) { hf <- list() } ## list of all possible children sheetPr <<- tabColour dimension <<- '' sheetViews <<- sprintf('', as.integer(zoom), as.integer(showGridLines), as.integer(tabSelected)) sheetFormatPr <<- '' cols <<- character(0) autoFilter <<- character(0) mergeCells <<- character(0) conditionalFormatting <<- character(0) dataValidations <<- NULL dataValidationsLst <<- character(0) hyperlinks <<- list() pageMargins <<- '' pageSetup <<- sprintf('', paperSize, orientation, hdpi, vdpi) ## will always be 2 headerFooter <<- hf rowBreaks <<- character(0) colBreaks <<- character(0) drawing <<- '' ## will always be 1 legacyDrawing <<- character(0) legacyDrawingHF <<- character(0) oleObjects <<- character(0) tableParts <<- character(0) extLst <<- character(0) freezePane <<- character(0) sheet_data <<- Sheet_Data$new() }) WorkSheet$methods(get_prior_sheet_data = function() { xml <- '' if (length(sheetPr) > 0) { tmp <- sheetPr if (!any(grepl("", paste(tmp, collapse = ""), "") } xml <- paste(xml, tmp, collapse = "") } if (length(dimension) > 0) { xml <- paste(xml, dimension, collapse = "") } ## sheetViews handled here if (length(freezePane) > 0) { xml <- paste(xml, gsub("/>", paste0(">", freezePane, ""), sheetViews, fixed = TRUE), collapse = "") } else if (length(sheetViews) > 0) { xml <- paste(xml, sheetViews, collapse = "") } if (length(sheetFormatPr) > 0) { xml <- paste(xml, sheetFormatPr, collapse = "") } if (length(cols) > 0) { xml <- paste(xml, pxml(c("", cols, "")), collapse = "") } return(xml) }) WorkSheet$methods(get_post_sheet_data = function() { xml <- "" if (length(sheetProtection) > 0) { xml <- paste0(xml, sheetProtection, collapse = "") } if (length(autoFilter) > 0) { xml <- paste0(xml, autoFilter, collapse = "") } if (length(mergeCells) > 0) { xml <- paste0(xml, paste0(sprintf('', length(mergeCells)), pxml(mergeCells), ""), collapse = "") } if (length(conditionalFormatting) > 0) { nms <- names(conditionalFormatting) xml <- paste0(xml, paste( sapply(unique(nms), function(x) { paste0( sprintf('', x), pxml(conditionalFormatting[nms == x]), "" ) }), collapse = "" ), collapse = "" ) } if (length(dataValidations) > 0) { xml <- paste0(xml, paste0(sprintf('', length(dataValidations)), pxml(dataValidations), "")) } if (length(hyperlinks) > 0) { h_inds <- paste0(seq_along(hyperlinks), "h") xml <- paste(xml, paste("", paste(sapply(seq_along(h_inds), function(i) hyperlinks[[i]]$to_xml(h_inds[i])), collapse = ""), ""), collapse = "") } if (length(pageMargins) > 0) { xml <- paste0(xml, pageMargins, collapse = "") } if (length(pageSetup) > 0) { xml <- paste0(xml, pageSetup, collapse = "") } if (!identical(headerFooter, list()) && length(headerFooter) > 0) { xml <- paste0(xml, genHeaderFooterNode(headerFooter), collapse = "") } ## rowBreaks and colBreaks if (length(rowBreaks) > 0) { xml <- paste0(xml, paste0(sprintf('', length(rowBreaks), length(rowBreaks)), paste(rowBreaks, collapse = ""), ""), collapse = "" ) } if (length(colBreaks) > 0) { xml <- paste0(xml, paste0(sprintf('', length(colBreaks), length(colBreaks)), paste(colBreaks, collapse = ""), ""), collapse = "" ) } if (length(drawing) > 0) { xml <- paste0(xml, drawing, collapse = "") } if (length(legacyDrawing) > 0) { xml <- paste0(xml, legacyDrawing, collapse = "") } if (length(legacyDrawingHF) > 0) { xml <- paste0(xml, legacyDrawingHF, collapse = "") } if (length(oleObjects) > 0) { xml <- paste0(xml, oleObjects, collapse = "") } if (length(tableParts) > 0) { xml <- paste0(xml, paste0(sprintf('', length(tableParts)), pxml(tableParts), ""), collapse = "" ) } if (length(dataValidationsLst) > 0) { dataValidationsLst_xml <- paste0(sprintf('', length(dataValidationsLst)), paste0(pxml(dataValidationsLst), ""), collapse = "" ) } else { dataValidationsLst_xml <- character(0) } if (length(extLst) > 0 || length(dataValidationsLst) > 0) { xml <- paste0(xml, sprintf("%s", paste0(pxml(extLst), dataValidationsLst_xml))) } xml <- paste0(xml, "") return(xml) }) WorkSheet$methods(order_sheetdata = function() { if (sheet_data$n_elements == 0) { return(invisible(0)) } if (sheet_data$data_count > 1) { ord <- order(sheet_data$rows, sheet_data$cols, method = "radix", na.last = TRUE) sheet_data$rows <<- sheet_data$rows[ord] sheet_data$cols <<- sheet_data$cols[ord] sheet_data$t <<- sheet_data$t[ord] sheet_data$v <<- sheet_data$v[ord] sheet_data$f <<- sheet_data$f[ord] sheet_data$style_id <<- sheet_data$style_id[ord] sheet_data$data_count <<- 1L dm1 <- paste0(int_2_cell_ref(cols = sheet_data$cols[1]), sheet_data$rows[1]) dm2 <- paste0(int_2_cell_ref(cols = sheet_data$cols[sheet_data$n_elements]), sheet_data$rows[sheet_data$n_elements]) if (length(dm1) == 1 & length(dm2) != 1) { if (!is.na(dm1) & !is.na(dm2) & dm1 != "NA" & dm2 != "NA") { dimension <<- sprintf("", dm1, dm2) } } } invisible(0) }) openxlsx/R/writeDataTable.R0000644000176200001440000002520014656123677015372 0ustar liggesusers #' @name writeDataTable #' @title Write to a worksheet as an Excel table #' @description Write to a worksheet and format as an Excel table #' @param wb A Workbook object containing a #' worksheet. #' @param sheet The worksheet to write to. Can be the worksheet index or name. #' @param x A dataframe. #' @param startCol A vector specifying the starting column to write df #' @param startRow A vector specifying the starting row to write df #' @param xy An alternative to specifying startCol and startRow individually. #' A vector of the form c(startCol, startRow) #' @param colNames If `TRUE`, column names of x are written. #' @param rowNames If `TRUE`, row names of x are written. #' @param row.names,col.names Deprecated, please use `rowNames`, `colNames` instead #' @param tableStyle Any excel table style name or "none" (see "formatting" vignette). #' @param tableName name of table in workbook. The table name must be unique. #' @param headerStyle Custom style to apply to column names. #' @param withFilter If `TRUE` or `NA`, columns with have filters in the first row. #' @param keepNA If `TRUE`, NA values are converted to #N/A (or `na.string`, if not NULL) in Excel, else NA cells will be empty. #' @param na.string If not NULL, and if `keepNA` is `TRUE`, NA values are converted to this string in Excel. #' @param sep Only applies to list columns. The separator used to collapse list columns to a character vector e.g. sapply(x$list_column, paste, collapse = sep). #' @param stack If `TRUE` the new style is merged with any existing cell styles. If FALSE, any #' existing style is replaced by the new style. #' \cr\cr #' \cr**The below options correspond to Excel table options:** #' \cr #' \if{html}{\figure{tableoptions.png}{options: width="40\%" alt="Figure: table_options.png"}} #' \if{latex}{\figure{tableoptions.pdf}{options: width=7cm}} #' #' @param firstColumn logical. If TRUE, the first column is bold #' @param lastColumn logical. If TRUE, the last column is bold #' @param bandedRows logical. If TRUE, rows are colour banded #' @param bandedCols logical. If TRUE, the columns are colour banded #' @details columns of x with class Date/POSIXt, currency, accounting, #' hyperlink, percentage are automatically styled as dates, currency, accounting, #' hyperlinks, percentages respectively. #' @seealso [addWorksheet()] #' @seealso [writeData()] #' @seealso [removeTable()] #' @seealso [getTables()] #' @export #' @examples #' ## see package vignettes for further examples. #' #' ##################################################################################### #' ## Create Workbook object and add worksheets #' wb <- createWorkbook() #' addWorksheet(wb, "S1") #' addWorksheet(wb, "S2") #' addWorksheet(wb, "S3") #' #' #' ##################################################################################### #' ## -- write data.frame as an Excel table with column filters #' ## -- default table style is "TableStyleMedium2" #' #' writeDataTable(wb, "S1", x = iris) #' #' writeDataTable(wb, "S2", #' x = mtcars, xy = c("B", 3), rowNames = TRUE, #' tableStyle = "TableStyleLight9" #' ) #' #' df <- data.frame( #' "Date" = Sys.Date() - 0:19, #' "T" = TRUE, "F" = FALSE, #' "Time" = Sys.time() - 0:19 * 60 * 60, #' "Cash" = paste("$", 1:20), "Cash2" = 31:50, #' "hLink" = "https://CRAN.R-project.org/", #' "Percentage" = seq(0, 1, length.out = 20), #' "TinyNumbers" = runif(20) / 1E9, stringsAsFactors = FALSE #' ) #' #' ## openxlsx will apply default Excel styling for these classes #' class(df$Cash) <- c(class(df$Cash), "currency") #' class(df$Cash2) <- c(class(df$Cash2), "accounting") #' class(df$hLink) <- "hyperlink" #' class(df$Percentage) <- c(class(df$Percentage), "percentage") #' class(df$TinyNumbers) <- c(class(df$TinyNumbers), "scientific") #' #' writeDataTable(wb, "S3", x = df, startRow = 4, rowNames = TRUE, tableStyle = "TableStyleMedium9") #' #' ##################################################################################### #' ## Additional Header Styling and remove column filters #' #' writeDataTable(wb, #' sheet = 1, x = iris, startCol = 7, headerStyle = createStyle(textRotation = 45), #' withFilter = FALSE #' ) #' #' #' ##################################################################################### #' ## Save workbook #' ## Open in excel without saving file: openXL(wb) #' \dontrun{ #' saveWorkbook(wb, "writeDataTableExample.xlsx", overwrite = TRUE) #' } #' #' #' #' #' #' ##################################################################################### #' ## Pre-defined table styles gallery #' #' wb <- createWorkbook(paste0("tableStylesGallery.xlsx")) #' addWorksheet(wb, "Style Samples") #' for (i in 1:21) { #' style <- paste0("TableStyleLight", i) #' writeDataTable(wb, #' x = data.frame(style), sheet = 1, #' tableStyle = style, startRow = 1, startCol = i * 3 - 2 #' ) #' } #' #' for (i in 1:28) { #' style <- paste0("TableStyleMedium", i) #' writeDataTable(wb, #' x = data.frame(style), sheet = 1, #' tableStyle = style, startRow = 4, startCol = i * 3 - 2 #' ) #' } #' #' for (i in 1:11) { #' style <- paste0("TableStyleDark", i) #' writeDataTable(wb, #' x = data.frame(style), sheet = 1, #' tableStyle = style, startRow = 7, startCol = i * 3 - 2 #' ) #' } #' #' ## openXL(wb) #' \dontrun{ #' saveWorkbook(wb, file = "tableStylesGallery.xlsx", overwrite = TRUE) #' } #' writeDataTable <- function( wb, sheet, x, startCol = 1, startRow = 1, xy = NULL, colNames = TRUE, rowNames = FALSE, tableStyle = openxlsx_getOp("tableStyle", "TableStyleLight9"), tableName = NULL, headerStyle = openxlsx_getOp("headerStyle"), withFilter = openxlsx_getOp("withFilter", TRUE), keepNA = openxlsx_getOp("keepNA", FALSE), na.string = openxlsx_getOp("na.string"), sep = ", ", stack = FALSE, firstColumn = openxlsx_getOp("firstColumn", FALSE), lastColumn = openxlsx_getOp("lastColumn", FALSE), bandedRows = openxlsx_getOp("bandedRows", TRUE), bandedCols = openxlsx_getOp("bandedCols", FALSE), col.names, row.names ) { op <- get_set_options() on.exit(options(op), add = TRUE) ## increase scipen to avoid writing in scientific if (!missing(row.names)) { warning("Please use 'rowNames' instead of 'row.names'", call. = FALSE) row.names <- rowNames } if (!missing(col.names)) { warning("Please use 'colNames' instead of 'col.names'", call. = FALSE) colNames <- col.names } # Set NULLs withFilter <- withFilter %||% TRUE keepNA <- keepNA %||% FALSE firstColumn <- firstColumn %||% FALSE lastColumn <- lastColumn %||% FALSE bandedRows <- bandedRows %||% TRUE bandedCols <- bandedCols %||% FALSE withFilter <- withFilter %||% TRUE if (!is.null(xy)) { if (length(xy) != 2) { stop("xy parameter must have length 2") } startCol <- xy[[1]] startRow <- xy[[2]] } # Assert parameters assert_class(wb, "Workbook") assert_class(x, "data.frame") assert_true_false(colNames) assert_true_false(rowNames) assert_class(headerStyle, "Style", or_null = TRUE) assert_true_false(withFilter) assert_character1(sep) assert_true_false(firstColumn) assert_true_false(lastColumn) assert_true_false(bandedRows) assert_true_false(bandedCols) if (is.null(tableName)) { tableName <- sprintf("Table%i", length(wb$tables) + 3L) } else { tableName <- wb$validate_table_name(tableName) } ## convert startRow and startCol if (!is.numeric(startCol)) { startCol <- convertFromExcelRef(startCol) } startRow <- as.integer(startRow) ## Coordinates for each section if (rowNames) { x <- cbind(data.frame("row names" = rownames(x)), as.data.frame(x)) } ## If 0 rows append a blank row tableStyle <- validate_StyleName(tableStyle) ## header style if (inherits(headerStyle, "Style")) { addStyle( wb = wb, sheet = sheet, style = headerStyle, rows = startRow, cols = 0:(ncol(x) - 1L) + startCol, gridExpand = TRUE ) } showColNames <- colNames if (colNames) { colNames <- colnames(x) assert_unique(colNames, case_sensitive = FALSE) ## zero char names are invalid char0 <- nchar(colNames) == 0 if (any(char0)) { colNames[char0] <- colnames(x)[char0] <- paste0("Column", which(char0)) } # Compatibility with MS Excel: throw warning if a table column name exceeds # the length of 255 chars. char_over255 <- nchar(colNames) > 255 if (any(char_over255)) { warning_msg <- sprintf( "Column name exceeds 255 chars, possible incompatibility with MS Excel. Index: %s", toString(which(char_over255))) warning(warning_msg) } } else { colNames <- paste0("Column", seq_along(x)) names(x) <- colNames } ## If zero rows, append an empty row (prevent XML from corrupting) if (nrow(x) == 0) { x <- rbind( as.data.frame(x), matrix("", nrow = 1, ncol = ncol(x), dimnames = list(character(), colnames(x))) ) names(x) <- colNames } ref1 <- paste0(convert_to_excel_ref(cols = startCol, LETTERS = LETTERS), startRow) ref2 <- paste0(convert_to_excel_ref(cols = startCol + ncol(x) - 1, LETTERS = LETTERS), startRow + nrow(x)) ref <- paste(ref1, ref2, sep = ":") ## check not overwriting another table wb$check_overwrite_tables( sheet = sheet, new_rows = c(startRow, startRow + nrow(x) - 1L + 1L), ## + header new_cols = c(startCol, startCol + ncol(x) - 1L) ) ## column class styling # consider not using lowercase and instead use inherits(x, class) colClasses <- lapply(x, function(x) tolower(class(x))) classStyles( wb, sheet = sheet, startRow = startRow, startCol = startCol, colNames = TRUE, nRow = nrow(x), colClasses = colClasses, stack = stack ) ## write data to worksheet wb$writeData( df = x, colNames = TRUE, sheet = sheet, startRow = startRow, startCol = startCol, colClasses = colClasses, hlinkNames = NULL, keepNA = keepNA, na.string = na.string, list_sep = sep ) ## replace invalid XML characters colNames <- replaceIllegalCharacters(colNames) ## create table.xml and assign an id to worksheet tables wb$buildTable( sheet = sheet, colNames = colNames, ref = ref, showColNames = showColNames, tableStyle = tableStyle, tableName = tableName, withFilter = withFilter[1], totalsRowCount = 0L, showFirstColumn = firstColumn[1], showLastColumn = lastColumn[1], showRowStripes = bandedRows[1], showColumnStripes = bandedCols[1] ) } openxlsx/R/workbook_read_workbook.R0000644000176200001440000002330614656134061017235 0ustar liggesusers #' @export read.xlsx.Workbook <- function(xlsxFile, sheet = 1, startRow = 1, colNames = TRUE, rowNames = FALSE, detectDates = FALSE, skipEmptyRows = TRUE, skipEmptyCols = TRUE, rows = NULL, cols = NULL, check.names = FALSE, sep.names = ".", namedRegion = NULL, na.strings = "NA", fillMergedCells = FALSE) { ## Validate inputs and get files if (!is.logical(colNames)) { stop("colNames must be TRUE/FALSE.") } if (!is.logical(rowNames)) { stop("rowNames must be TRUE/FALSE.") } if (!is.logical(detectDates)) { stop("detectDates must be TRUE/FALSE.") } if (!is.logical(skipEmptyRows)) { stop("skipEmptyRows must be TRUE/FALSE.") } if (!is.logical(check.names)) { stop("check.names must be TRUE/FALSE.") } if (!is.character(sep.names) || nchar(sep.names) != 1) { stop("sep.names must be a character and only one.") } if (length(sheet) != 1) { stop("sheet must be of length 1.") } ## Named region logic reading_named_region <- FALSE if (!is.null(namedRegion)) { dn <- xlsxFile$workbook$definedNames if (length(dn) == 0) { warning("Workbook has no named regions.") return(NULL) } dn_names <- replaceXMLEntities(regmatches(dn, regexpr('(?<=name=")[^"]+', dn, perl = TRUE))) ind <- tolower(dn_names) == tolower(namedRegion) if (!any(ind)) { stop(sprintf("Region '%s' not found!", namedRegion)) } ## pull out first node value dn <- dn[ind] region <- regmatches(dn, regexpr("(?<=>)[^\\<]+", dn, perl = TRUE)) sheet <- names(xlsxFile)[sapply(names(xlsxFile), function(x) grepl(x, dn))] if (length(sheet) > 1) { sheet <- sheet[which.max(nchar(sheet))] } region <- gsub("[^A-Z0-9:]", "", gsub(sheet, "", region, fixed = TRUE)) if (grepl(":", region, fixed = TRUE)) { cols <- unlist(lapply(strsplit(region, split = ":", fixed = TRUE), convertFromExcelRef)) rows <- unlist(lapply(strsplit(region, split = ":", fixed = TRUE), function(x) as.integer(gsub("[A-Z]", "", x)))) cols <- seq(from = cols[1], to = cols[2], by = 1) rows <- seq(from = rows[1], to = rows[2], by = 1) } else { cols <- convertFromExcelRef(region) rows <- as.integer(gsub("[A-Z]", "", region, perl = TRUE)) } startRow <- 1 reading_named_region <- TRUE named_region_rows <- rows } if (is.null(rows)) { rows <- NA } else if (length(rows) > 1) { rows <- as.integer(sort(rows)) } ## check startRow if (!is.null(startRow)) { if (length(startRow) > 1) { stop("startRow must have length 1.") } } ## create temp dir and unzip nSheets <- length(xlsxFile$worksheets) if (nSheets == 0) { stop("Workbook has no worksheets") } ## get workbook names sheetNames <- xlsxFile$sheet_names if ("character" %in% class(sheet)) { sheetNames <- replaceXMLEntities(sheetNames) if (!sheet %in% sheetNames) { stop(sprintf('Cannot find sheet named "%s"', sheet)) } sheet <- which(sheetNames == sheet) } else { sheet <- sheet if (sheet > nSheets) { stop(sprintf("sheet %s does not exist.", sheet)) } } ## read in sharedStrings sharedStrings <- paste(unlist(xlsxFile$sharedStrings), collapse = "\n") if (length(sharedStrings) > 0) { sharedStrings <- getSharedStringsFromFile(sharedStringsFile = sharedStrings, isFile = FALSE) if (!is.null(na.strings)) { sharedStrings[sharedStrings %in% na.strings] <- NA } } ## read in worksheet and get cells with a value node, skip emptyStrs cells xlsxFile$worksheets[[sheet]]$order_sheetdata() sheet_data <- xlsxFile$worksheets[[sheet]]$sheet_data ###################################################### ## What data to read keep <- rep.int(TRUE, length(sheet_data$rows)) if (!is.na(rows[1])) { keep <- keep & (sheet_data$rows %in% rows) } if (!is.null(cols[1])) { keep <- keep & (sheet_data$cols %in% cols) } if (startRow > 1) { keep <- keep & (sheet_data$rows >= startRow) } ## error cells keep <- keep & (sheet_data$t != 4 & !is.na(sheet_data$t) & !is.na(sheet_data$v)) ## "e" or missing if (any(is.na(sharedStrings))) { keep[(sheet_data$t %in% 1 & (sheet_data$v %in% as.character(which(is.na(sharedStrings)) - 1L)))] <- FALSE } ## End what data to read ###################################################### rows <- sheet_data$rows[keep] cols <- sheet_data$cols[keep] v <- sheet_data$v[keep] t <- sheet_data$t[keep] if (length(v) == 0) { warning("No data found on worksheet.", call. = FALSE) return(NULL) } if (is.null(rows)) { warning("No data found on worksheet.", call. = FALSE) return(NULL) } else { if (skipEmptyRows) { nRows <- length(unique(rows)) } else if (reading_named_region) { nRows <- max(named_region_rows) - min(named_region_rows) + 1 } else { nRows <- max(rows) - min(rows) + 1 } } ## get references for string cells string_refs <- which(t == 2 | t == 1) ## "b" or "s" if (length(string_refs) == 0) { string_refs <- -1L } ## get Refs for boolean bool_refs <- which(t == 2) ## "b" if (length(bool_refs) == 0) { bool_refs <- -1L } if (bool_refs[1] != -1L) { false_ind <- which(sharedStrings == "FALSE") - 1L if (length(false_ind) == 0) { false_ind <- length(sharedStrings) sharedStrings <- c(sharedStrings, "FALSE") } true_ind <- which(sharedStrings == "TRUE") - 1L if (length(true_ind) == 0) { true_ind <- length(sharedStrings) sharedStrings <- c(sharedStrings, "TRUE") } logical_vals <- v[bool_refs] logical_vals[logical_vals == "0"] <- false_ind[1] logical_vals[logical_vals == "1"] <- true_ind[1] v[bool_refs] <- logical_vals rm(logical_vals) rm(bool_refs) } ## If any t="str" exist, add v to sharedStrings and replace v with newSharedStringsInd str_inds <- which(t %in% c(3, 5)) ## "str" or "inlineStr" if (length(str_inds) > 0) { unique_strs <- unique(v[str_inds]) unique_strs[unique_strs == "#N/A"] <- NA ## Match references of "str" cells to r new_shared_string_inds <- length(sharedStrings):(length(sharedStrings) + length(unique_strs) - 1L) ## replace strings in v with reference to sharedStrings, (now can convert v to numeric) v[str_inds] <- new_shared_string_inds[match(v[str_inds], unique_strs)] ## append new strings to sharedStrings sharedStrings <- c(sharedStrings, unique_strs) if (string_refs[1] == -1L) { string_refs <- str_inds } else { string_refs <- sort(c(string_refs, str_inds)) } } ## Now safe to convert v to numeric vn <- as.numeric(v) ## Using -1 as a flag for no strings if (length(sharedStrings) == 0 || string_refs[1] == -1L) { string_refs <- as.integer(NA) } else { ## set encoding of sharedStrings & replace values in v with string values Encoding(sharedStrings) <- "UTF-8" v[string_refs] <- sharedStrings[vn[string_refs] + 1L] ## any NA sharedStrings - remove v_na <- which(is.na(v)) if (length(v_na) > 0) { string_refs <- setdiff(string_refs, v_na) } } ## date detection origin <- 25569L isDate <- as.logical(NA) if (detectDates) { ## get date origin if (length(xlsxFile$workbook$workbookPr) > 0) { if (grepl('date1904="1"|date1904="true"', xlsxFile$workbook$workbookPr, ignore.case = TRUE)) { origin <- 24107L } } sO <- xlsxFile$styleObjects sO <- sO[unlist(lapply(sO, "[[", "sheet")) == sheetNames[sheet]] styles <- lapply(sO, function(x) { fc <- x[["style"]][["numFmt"]]$formatCode if (is.null(fc)) { fc <- x[["style"]][["numFmt"]]$numFmtId } fc }) sO <- sO[sapply(styles, length) > 0] format_codes <- unlist(lapply(sO, function(x) { fc <- x[["style"]][["numFmt"]]$formatCode if (is.null(fc)) { fc <- x[["style"]][["numFmt"]]$numFmtId } fc })) # dateIds <- NULL variable not used if (length(format_codes) > 0) { ## this regex defines what "looks" like a date format_codes <- gsub(".*(?<=\\])|@", "", format_codes, perl = TRUE) sO <- sO[(!grepl("[^mdyhsapAMP[:punct:] ]", format_codes) & nchar(format_codes > 3)) | format_codes == 14] } if (length(sO) > 0) { style_rows <- unlist(lapply(sO, "[[", "rows")) style_cols <- unlist(lapply(sO, "[[", "cols")) isDate <- pair_rc(rows, cols) %in% pair_rc(style_rows, style_cols) ## check numbers are also integers not_an_integer <- suppressWarnings(as.numeric(v[isDate])) not_an_integer <- (not_an_integer %% 1L != 0) | is.na(not_an_integer) isDate[not_an_integer] <- FALSE ## perform int to date to character convertsion (way too slow) v[isDate] <- format(as.Date(as.integer(v[isDate]) - origin, origin = "1970-01-01"), "%Y-%m-%d") } } ## end of detectDates ## Build data.frame m <- read_workbook( cols_in = cols, rows_in = rows, v = v, string_inds = string_refs, is_date = isDate, hasColNames = colNames, hasSepNames = sep.names, skipEmptyRows = skipEmptyRows, skipEmptyCols = skipEmptyCols, nRows = nRows, clean_names = clean_names ) if (colNames && check.names) { colnames(m) <- make.names(colnames(m), unique = TRUE) } if (rowNames) { rownames(m) <- m[[1]] m[[1]] <- NULL } return(m) } openxlsx/R/workbook_write_data.R0000644000176200001440000002231114656134061016523 0ustar liggesusers #' @include class_definitions.R Workbook$methods(writeData = function( df, sheet, startRow, startCol, colNames, colClasses, hlinkNames, keepNA, na.string, list_sep ) { sheet <- validateSheet(sheet) nCols <- ncol(df) nRows <- nrow(df) df_nms <- names(df) allColClasses <- unlist(colClasses) isPOSIXlt <- function(data) sapply(lapply(data, class), FUN = function(x) any(x == "POSIXlt")) to_convert <- isPOSIXlt(df) if (any(to_convert)) { message("Found POSIXlt. Converting to POSIXct") df[to_convert] <- lapply(df[to_convert], as.POSIXct) } df <- as.list(df) ###################################################################### ## standardise all column types ## pull out NaN values nans <- unlist(lapply(1:nCols, function(i) { tmp <- df[[i]] if (!"character" %in% class(tmp) & !"list" %in% class(tmp)) { v <- which(is.nan(tmp) | is.infinite(tmp)) if (length(v) == 0) { return(v) } return(as.integer(nCols * (v - 1) + i)) ## row position } })) ## convert any Dates to integers and create date style object if (any(c("date", "posixct", "posixt") %in% allColClasses)) { dInds <- which(sapply(colClasses, function(x) "date" %in% x)) origin <- 25569L if (grepl('date1904="1"|date1904="true"', stri_join(unlist(workbook), collapse = ""), ignore.case = TRUE)) { origin <- 24107L } for (i in dInds) { df[[i]] <- as.integer(df[[i]]) + origin if (origin == 25569L) { earlyDate <- which(df[[i]] < 60) df[[i]][earlyDate] <- df[[i]][earlyDate] - 1 } } pInds <- which(sapply(colClasses, function(x) any(c("posixct", "posixt", "posixlt") %in% x))) if (length(pInds) > 0 & nRows > 0) { parseOffset <- function(tz) { suppressWarnings( ifelse(stri_sub(tz, 1, 1) == "+", 1L, -1L) * (as.integer(stri_sub(tz, 2, 3)) + as.integer(stri_sub(tz, 4, 5)) / 60) / 24 ) } t <- lapply(df[pInds], function(x) format(x, "%z")) offSet <- lapply(t, parseOffset) offSet <- lapply(offSet, function(x) ifelse(is.na(x), 0, x)) for (i in seq_along(pInds)) { df[[pInds[i]]] <- as.numeric(as.POSIXct(df[[pInds[i]]])) / 86400 + origin + offSet[[i]] } } } ## convert any Dates to integers and create date style object if (any(c("currency", "accounting", "percentage", "3", "comma") %in% allColClasses)) { cInds <- which(sapply(colClasses, function(x) any(c("accounting", "currency", "percentage", "3", "comma") %in% tolower(x)))) for (i in cInds) { df[[i]] <- as.numeric(gsub("[^0-9\\.-]", "", df[[i]], perl = TRUE)) } class(df[[i]]) <- "numeric" } ## convert scientific if ("scientific" %in% allColClasses) { for (i in which(sapply(colClasses, function(x) "scientific" %in% x))) { class(df[[i]]) <- "numeric" } } ## if ("list" %in% allColClasses) { for (i in which(sapply(colClasses, function(x) "list" %in% x))) { # check for and replace NA df_i <- lapply(df[[i]], unlist) df_i <- lapply(df_i, function(x) { x[is.na(x)] <- na.string x }) df[[i]] <- sapply(df_i, stri_join, collapse = list_sep) } } if ("hyperlink" %in% allColClasses) { for (i in which(sapply(colClasses, function(x) "hyperlink" %in% x))) { class(df[[i]]) <- "hyperlink" } } if (any(c("formula", "array_formula") %in% allColClasses)) { frm <- "formula" cls <- "openxlsx_formula" if ("array_formula" %in% allColClasses) { frm <- "array_formula" cls <- "openxlsx_array_formula" } for (i in which(sapply(colClasses, function(x) frm %in% x))) { df[[i]] <- replaceIllegalCharacters(as.character(df[[i]])) class(df[[i]]) <- cls } } colClasses <- sapply(df, function(x) tolower(class(x))[[1]]) ## by here all cols must have a single class only ## convert logicals (Excel stores logicals as 0 & 1) if ("logical" %in% allColClasses) { for (i in which(sapply(colClasses, function(x) "logical" %in% x))) { class(df[[i]]) <- "numeric" } } ## convert all numerics to character (this way preserves digits) if ("numeric" %in% colClasses) { for (i in which(sapply(colClasses, function(x) "numeric" %in% x))) { class(df[[i]]) <- "character" } } ## End standardise all column types ###################################################################### ## cell types t <- build_cell_types_integer(classes = colClasses, n_rows = nRows) for (i in which(sapply(colClasses, function(x) !"character" %in% x & !"numeric" %in% x))) { df[[i]] <- as.character(df[[i]]) } ## cell values v <- as.character(t(as.matrix( data.frame(df, stringsAsFactors = FALSE, check.names = FALSE, fix.empty.names = FALSE) ))) if (keepNA) { if (is.null(na.string)) { t[is.na(v)] <- 4L v[is.na(v)] <- "#N/A" } else { t[is.na(v)] <- 1L v[is.na(v)] <- as.character(na.string) } } else { t[is.na(v)] <- as.integer(NA) v[is.na(v)] <- as.character(NA) } ## If any NaN values if (length(nans) > 0) { t[nans] <- 4L v[nans] <- "#NUM!" } # prepend column headers if (colNames) { t <- c(rep.int(1L, nCols), t) v <- c(df_nms, v) nRows <- nRows + 1L } ## Formulas f_in <- rep.int(as.character(NA), length(t)) any_functions <- FALSE ref_cell <- paste0(int_2_cell_ref(startCol), startRow) if (any(c("openxlsx_formula", "openxlsx_array_formula") %in% colClasses)) { ## alter the elements of t where we have a formula to be "str" if ("openxlsx_formula" %in% colClasses) { formula_cols <- which(sapply(colClasses, function(x) "openxlsx_formula" %in% x, USE.NAMES = FALSE), useNames = FALSE) formula_strs <- stri_join("", unlist(df[formula_cols], use.names = FALSE), "") } else { # openxlsx_array_formula formula_cols <- which(sapply(colClasses, function(x) "openxlsx_array_formula" %in% x, USE.NAMES = FALSE), useNames = FALSE) formula_strs <- stri_join("", unlist(df[formula_cols], use.names = FALSE), "") } formula_inds <- unlist(lapply(formula_cols, function(i) i + (1:(nRows - colNames) - 1) * nCols + (colNames * nCols)), use.names = FALSE) f_in[formula_inds] <- formula_strs any_functions <- TRUE rm(formula_cols) rm(formula_strs) rm(formula_inds) } suppressWarnings(try(rm(df), silent = TRUE)) ## Append hyperlinks, convert h to s in cell type hyperlink_cols <- which(sapply(colClasses, function(x) "hyperlink" %in% x, USE.NAMES = FALSE), useNames = FALSE) if (length(hyperlink_cols) > 0) { hyperlink_inds <- sort(unlist(lapply(hyperlink_cols, function(i) i + (1:(nRows - colNames) - 1) * nCols + (colNames * nCols)), use.names = FALSE)) na_hyperlink <- intersect(hyperlink_inds, which(is.na(t))) if (length(hyperlink_inds) > 0) { t[t %in% 9] <- 1L ## set cell type to "s" hyperlink_refs <- convert_to_excel_ref_expand(cols = hyperlink_cols + startCol - 1, LETTERS = LETTERS, rows = as.character((startRow + colNames):(startRow + nRows - 1L))) if (length(na_hyperlink) > 0) { to_remove <- which(hyperlink_inds %in% na_hyperlink) hyperlink_refs <- hyperlink_refs[-to_remove] hyperlink_inds <- hyperlink_inds[-to_remove] } exHlinks <- worksheets[[sheet]]$hyperlinks targets <- replaceIllegalCharacters(v[hyperlink_inds]) if (!is.null(hlinkNames) & length(hlinkNames) == length(hyperlink_inds)) { v[hyperlink_inds] <- hlinkNames } ## this is text to display instead of hyperlink ## create hyperlink objects newhl <- lapply(seq_along(hyperlink_inds), function(i) { Hyperlink$new(ref = hyperlink_refs[i], target = targets[i], location = NULL, display = NULL, is_external = TRUE) }) worksheets[[sheet]]$hyperlinks <<- append(worksheets[[sheet]]$hyperlinks, newhl) } } ## convert all strings to references in sharedStrings and update values (v) strFlag <- which(t == 1L) newStrs <- v[strFlag] if (length(newStrs) > 0) { newStrs <- replaceIllegalCharacters(newStrs) vl <- stri_length(newStrs) for (i in which(vl > 32767)) { if (vl[i]>32768+30) { warning( paste0( stri_sub(newStrs[i], 32768, 32768 + 15), " ... " , stri_sub(newStrs[i], vl[i] - 15, vl[i]), " is truncated. Number of characters exeed the limit of 32767." ) ) } else { warning( paste0( stri_sub(newStrs[i], 32768, -1), " is truncated. Number of characters exeed the limit of 32767." ) ) } # v[i] <- stri_sub(v[i], 1, 32767) } newStrs <- stri_join("", newStrs, "") uNewStr <- unique(newStrs) .self$updateSharedStrings(uNewStr) v[strFlag] <- match(newStrs, sharedStrings) - 1L } # ## Create cell list of lists worksheets[[sheet]]$sheet_data$write( rows_in = startRow:(startRow + nRows - 1L), cols_in = startCol:(startCol + nCols - 1L), t_in = t, v_in = v, f_in = f_in, any_functions = any_functions ) invisible(0) }) openxlsx/R/conditional_formatting.R0000644000176200001440000005336614656123677017251 0ustar liggesusers #' @name conditionalFormatting #' @aliases databar #' @title Add conditional formatting to cells #' @description Add conditional formatting to cells #' @author Alexander Walker, Philipp Schauberger #' @param wb A workbook object #' @param sheet A name or index of a worksheet #' @param cols Columns to apply conditional formatting to #' @param rows Rows to apply conditional formatting to #' @param rule The condition under which to apply the formatting. See examples. #' @param style A style to apply to those cells that satisfy the rule. Default is createStyle(fontColour = "#9C0006", bgFill = "#FFC7CE") #' @param type Either 'expression', 'colourScale', 'databar', 'duplicates', 'beginsWith', #' 'endsWith', 'topN', 'bottomN', 'blanks', 'notBlanks', 'contains' or 'notContains' (case insensitive). #' @param ... See below #' @details See Examples. #' #' If type == "expression" #' \itemize{ #' \item{style is a Style object. See [createStyle()]} #' \item{rule is an expression. Valid operators are "<", "<=", ">", ">=", "==", "!=".} #' } #' #' If type == "colourScale" #' \itemize{ #' \item{style is a vector of colours with length 2 or 3} #' \item{rule can be NULL or a vector of colours of equal length to styles} #' } #' #' If type == "databar" #' \itemize{ #' \item{style is a vector of colours with length 2 or 3} #' \item{rule is a numeric vector specifying the range of the databar colours. Must be equal length to style} #' \item{... #' \itemize{ #' \item{**showvalue** If FALSE the cell value is hidden. Default TRUE.} #' \item{**gradient** If FALSE colour gradient is removed. Default TRUE.} #' \item{**border** If FALSE the border around the database is hidden. Default TRUE.} #' } #' } #' } #' #' If type == "duplicates" #' \itemize{ #' \item{style is a Style object. See [createStyle()]} #' \item{rule is ignored.} #' } #' #' If type == "contains" #' \itemize{ #' \item{style is a Style object. See [createStyle()]} #' \item{rule is the text to look for within cells} #' } #' #' If type == "between" #' \itemize{ #' \item{style is a Style object. See [createStyle()]} #' \item{rule is a numeric vector of length 2 specifying lower and upper bound (Inclusive)} #' } #' If type == "blanks" #' \itemize{ #' \item{style is a Style object. See [createStyle()]} #' \item{rule is ignored.} #' } #' #' If type == "notBlanks" #' \itemize{ #' \item{style is a Style object. See [createStyle()]} #' \item{rule is ignored.} #' } #' #' If type == "topN" #' \itemize{ #' \item{style is a Style object. See [createStyle()]} #' \item{rule is ignored} #' \item{... #' \itemize{ #' \item{**rank** numeric vector of length 1 indicating number of highest values.} #' \item{**percent** TRUE if you want top N percentage.} #' } #' } #' } #' #' If type == "bottomN" #' \itemize{ #' \item{style is a Style object. See [createStyle()]} #' \item{rule is ignored} #' \item{... #' \itemize{ #' \item{**rank** numeric vector of length 1 indicating number of lowest values.} #' \item{**percent** TRUE if you want bottom N percentage.} #' } #' } #' } #' #' @seealso [createStyle()] #' @export #' @examples #' wb <- createWorkbook() #' addWorksheet(wb, "cellIs") #' addWorksheet(wb, "Moving Row") #' addWorksheet(wb, "Moving Col") #' addWorksheet(wb, "Dependent on") #' addWorksheet(wb, "Duplicates") #' addWorksheet(wb, "containsText") #' addWorksheet(wb, "notcontainsText") #' addWorksheet(wb, "beginsWith") #' addWorksheet(wb, "endsWith") #' addWorksheet(wb, "colourScale", zoom = 30) #' addWorksheet(wb, "databar") #' addWorksheet(wb, "between") #' addWorksheet(wb, "topN") #' addWorksheet(wb, "bottomN") #' addWorksheet(wb, "containsBlanks") #' addWorksheet(wb, "notContainsBlanks") #' addWorksheet(wb, "logical operators") #' #' negStyle <- createStyle(fontColour = "#9C0006", bgFill = "#FFC7CE") #' posStyle <- createStyle(fontColour = "#006100", bgFill = "#C6EFCE") #' #' ## rule applies to all each cell in range #' writeData(wb, "cellIs", -5:5) #' writeData(wb, "cellIs", LETTERS[1:11], startCol = 2) #' conditionalFormatting(wb, "cellIs", #' cols = 1, #' rows = 1:11, rule = "!=0", style = negStyle #' ) #' conditionalFormatting(wb, "cellIs", #' cols = 1, #' rows = 1:11, rule = "==0", style = posStyle #' ) #' #' ## highlight row dependent on first cell in row #' writeData(wb, "Moving Row", -5:5) #' writeData(wb, "Moving Row", LETTERS[1:11], startCol = 2) #' conditionalFormatting(wb, "Moving Row", #' cols = 1:2, #' rows = 1:11, rule = "$A1<0", style = negStyle #' ) #' conditionalFormatting(wb, "Moving Row", #' cols = 1:2, #' rows = 1:11, rule = "$A1>0", style = posStyle #' ) #' #' ## highlight column dependent on first cell in column #' writeData(wb, "Moving Col", -5:5) #' writeData(wb, "Moving Col", LETTERS[1:11], startCol = 2) #' conditionalFormatting(wb, "Moving Col", #' cols = 1:2, #' rows = 1:11, rule = "A$1<0", style = negStyle #' ) #' conditionalFormatting(wb, "Moving Col", #' cols = 1:2, #' rows = 1:11, rule = "A$1>0", style = posStyle #' ) #' #' ## highlight entire range cols X rows dependent only on cell A1 #' writeData(wb, "Dependent on", -5:5) #' writeData(wb, "Dependent on", LETTERS[1:11], startCol = 2) #' conditionalFormatting(wb, "Dependent on", #' cols = 1:2, #' rows = 1:11, rule = "$A$1<0", style = negStyle #' ) #' conditionalFormatting(wb, "Dependent on", #' cols = 1:2, #' rows = 1:11, rule = "$A$1>0", style = posStyle #' ) #' #' ## highlight cells in column 1 based on value in column 2 #' writeData(wb, "Dependent on", data.frame(x = 1:10, y = runif(10)), startRow = 15) #' conditionalFormatting(wb, "Dependent on", #' cols = 1, #' rows = 16:25, rule = "B16<0.5", style = negStyle #' ) #' conditionalFormatting(wb, "Dependent on", #' cols = 1, #' rows = 16:25, rule = "B16>=0.5", style = posStyle #' ) #' #' #' ## highlight duplicates using default style #' writeData(wb, "Duplicates", sample(LETTERS[1:15], size = 10, replace = TRUE)) #' conditionalFormatting(wb, "Duplicates", cols = 1, rows = 1:10, type = "duplicates") #' #' ## cells containing text #' fn <- function(x) paste(sample(LETTERS, 10), collapse = "-") #' writeData(wb, "containsText", sapply(1:10, fn)) #' conditionalFormatting(wb, "containsText", cols = 1, rows = 1:10, type = "contains", rule = "A") #' #' ## cells not containing text #' fn <- function(x) paste(sample(LETTERS, 10), collapse = "-") #' writeData(wb, "containsText", sapply(1:10, fn)) #' conditionalFormatting(wb, "notcontainsText", cols = 1, #' rows = 1:10, type = "notcontains", rule = "A") #' #' #' ## cells begins with text #' fn <- function(x) paste(sample(LETTERS, 10), collapse = "-") #' writeData(wb, "beginsWith", sapply(1:100, fn)) #' conditionalFormatting(wb, "beginsWith", cols = 1, rows = 1:100, type = "beginsWith", rule = "A") #' #' #' ## cells ends with text #' fn <- function(x) paste(sample(LETTERS, 10), collapse = "-") #' writeData(wb, "endsWith", sapply(1:100, fn)) #' conditionalFormatting(wb, "endsWith", cols = 1, rows = 1:100, type = "endsWith", rule = "A") #' #' ## colourscale colours cells based on cell value #' df <- read.xlsx(system.file("extdata", "readTest.xlsx", package = "openxlsx"), sheet = 4) #' writeData(wb, "colourScale", df, colNames = FALSE) ## write data.frame #' #' ## rule is a vector or colours of length 2 or 3 (any hex colour or any of colours()) #' ## If rule is NULL, min and max of cells is used. Rule must be the same length as style or NULL. #' conditionalFormatting(wb, "colourScale", #' cols = 1:ncol(df), rows = 1:nrow(df), #' style = c("black", "white"), #' rule = c(0, 255), #' type = "colourScale" #' ) #' #' setColWidths(wb, "colourScale", cols = 1:ncol(df), widths = 1.07) #' setRowHeights(wb, "colourScale", rows = 1:nrow(df), heights = 7.5) #' #' ## Databars #' writeData(wb, "databar", -5:5) #' conditionalFormatting(wb, "databar", cols = 1, rows = 1:11, type = "databar") ## Default colours #' #' ## Between #' # Highlight cells in interval [-2, 2] #' writeData(wb, "between", -5:5) #' conditionalFormatting(wb, "between", cols = 1, rows = 1:11, type = "between", rule = c(-2, 2)) #' #' ## Top N #' writeData(wb, "topN", data.frame(x = 1:10, y = rnorm(10))) #' # Highlight top 5 values in column x #' conditionalFormatting(wb, "topN", cols = 1, rows = 2:11, #' style = posStyle, type = "topN", rank = 5)#' #' # Highlight top 20 percentage in column y #' conditionalFormatting(wb, "topN", cols = 2, rows = 2:11, #' style = posStyle, type = "topN", rank = 20, percent = TRUE) #' #'## Bottom N #' writeData(wb, "bottomN", data.frame(x = 1:10, y = rnorm(10))) #' # Highlight bottom 5 values in column x #' conditionalFormatting(wb, "bottomN", cols = 1, rows = 2:11, #' style = negStyle, type = "topN", rank = 5) #' # Highlight bottom 20 percentage in column y #' conditionalFormatting(wb, "bottomN", cols = 2, rows = 2:11, #' style = negStyle, type = "topN", rank = 20, percent = TRUE) #' #' ## cells containing blanks #' sample_data <- sample(c("X", NA_character_), 10, replace = TRUE) #' writeData(wb, "containsBlanks", sample_data) #' conditionalFormatting(wb, "containsBlanks", cols = 1, rows = 1:10, #' type = "blanks", style = negStyle) #' #' ## cells not containing blanks #' sample_data <- sample(c("X", NA_character_), 10, replace = TRUE) #' writeData(wb, "notContainsBlanks", sample_data) #' conditionalFormatting(wb, "notContainsBlanks", cols = 1, rows = 1:10, #' type = "notBlanks", style = posStyle) #' #' ## Logical Operators #' # You can use Excels logical Operators #' writeData(wb, "logical operators", 1:10) #' conditionalFormatting(wb, "logical operators", #' cols = 1, rows = 1:10, #' rule = "OR($A1=1,$A1=3,$A1=5,$A1=7)" #' ) #' \dontrun{ #' saveWorkbook(wb, "conditionalFormattingExample.xlsx", TRUE) #' } #' #' #' ######################################################################### #' ## Databar Example #' #' wb <- createWorkbook() #' addWorksheet(wb, "databar") #' #' ## Databars #' writeData(wb, "databar", -5:5, startCol = 1) #' conditionalFormatting(wb, "databar", cols = 1, rows = 1:11, type = "databar") ## Defaults #' #' writeData(wb, "databar", -5:5, startCol = 3) #' conditionalFormatting(wb, "databar", cols = 3, rows = 1:11, type = "databar", border = FALSE) #' #' writeData(wb, "databar", -5:5, startCol = 5) #' conditionalFormatting(wb, "databar", #' cols = 5, rows = 1:11, #' type = "databar", style = c("#a6a6a6"), showValue = FALSE #' ) #' #' writeData(wb, "databar", -5:5, startCol = 7) #' conditionalFormatting(wb, "databar", #' cols = 7, rows = 1:11, #' type = "databar", style = c("#a6a6a6"), showValue = FALSE, gradient = FALSE #' ) #' #' writeData(wb, "databar", -5:5, startCol = 9) #' conditionalFormatting(wb, "databar", #' cols = 9, rows = 1:11, #' type = "databar", style = c("#a6a6a6", "#a6a6a6"), showValue = FALSE, gradient = FALSE #' ) #' \dontrun{ #' saveWorkbook(wb, file = "databarExample.xlsx", overwrite = TRUE) #' } #' conditionalFormatting <- function(wb, sheet, cols, rows, rule = NULL, style = NULL, type = "expression", ...) { op <- get_set_options() on.exit(options(op), add = TRUE) type <- tolower(type) params <- list(...) if (type %in% c("colorscale", "colourscale")) { type <- "colorScale" } else if (type == "databar") { type <- "dataBar" } else if (type == "duplicates") { type <- "duplicatedValues" } else if (type == "contains") { type <- "containsText" } else if (type == "notcontains") { type <- "notContainsText" } else if (type == "beginswith") { type <- "beginsWith" } else if (type == "endswith") { type <- "endsWith" } else if (type == "between") { type <- "between" } else if (type == "topn") { type <- "topN" } else if (type == "bottomn") { type <- "bottomN" } else if (type == "blanks") { type <- "containsBlanks" } else if (type == "notblanks") { type <- "notContainsBlanks" }else if (type != "expression") { stop( "Invalid type argument. Type must be one of 'expression', 'colourScale', 'databar', 'duplicates', 'beginsWith', 'endsWith', 'blanks', 'notBlanks', 'contains' or 'notContains'" ) } ## rows and cols if (!is.numeric(cols)) { cols <- convertFromExcelRef(cols) } rows <- as.integer(rows) ## check valid rule values <- NULL dxfId <- NULL if (type == "colorScale") { # type == "colourScale" # - style is a vector of colours with length 2 or 3 # - rule specifies the quantiles (numeric vector of length 2 or 3), if NULL min and max are used if (is.null(style)) { stop("If type == 'colourScale', style must be a vector of colours of length 2 or 3.") } if (!inherits(style, "character")) { stop("If type == 'colourScale', style must be a vector of colours of length 2 or 3.") } if (!length(style) %in% 2:3) { stop("If type == 'colourScale', style must be a vector of length 2 or 3.") } if (!is.null(rule)) { if (length(rule) != length(style)) { stop("If type == 'colourScale', rule and style must have equal lengths.") } } style <- validateColour(style, errorMsg = "Invalid colour specified in style.") values <- rule rule <- style } else if (type == "dataBar") { # type == "databar" # - style is a vector of colours of length 2 or 3 # - rule specifies the quantiles (numeric vector of length 2 or 3), if NULL min and max are used if (is.null(style)) { style <- "#638EC6" } if (!inherits(style, "character")) { stop("If type == 'dataBar', style must be a vector of colours of length 1 or 2.") } if (!length(style) %in% 1:2) { stop("If type == 'dataBar', style must be a vector of length 1 or 2.") } if (!is.null(rule)) { if (length(rule) != length(style)) { stop("If type == 'dataBar', rule and style must have equal lengths.") } } ## Additional parameters passed by ... if ("showValue" %in% names(params)) { params$showValue <- as.integer(params$showValue) if (is.na(params$showValue)) { stop("showValue must be 0/1 or TRUE/FALSE") } } if ("gradient" %in% names(params)) { params$gradient <- as.integer(params$gradient) if (is.na(params$gradient)) { stop("gradient must be 0/1 or TRUE/FALSE") } } if ("border" %in% names(params)) { params$border <- as.integer(params$border) if (is.na(params$border)) { stop("border must be 0/1 or TRUE/FALSE") } } style <- validateColour(style, errorMsg = "Invalid colour specified in style.") values <- rule rule <- style } else if (type == "expression") { # type == "expression" # - style = createStyle() # - rule is an expression to evaluate # rule <- gsub(" ", "", rule) rule <- replaceIllegalCharacters(rule) rule <- gsub("!=", "<>", rule) rule <- gsub("==", "=", rule) if (!grepl("[A-Z]", substr(rule, 1, 2))) { ## formula looks like "operatorX" , attach top left cell to rule rule <- paste0(getCellRefs(data.frame( "x" = min(rows), "y" = min(cols) )), rule) } ## else, there is a letter in the formula and apply as is if (is.null(style)) { style <- createStyle(fontColour = "#9C0006", bgFill = "#FFC7CE") } if (!"Style" %in% class(style)) { stop("If type == 'expression', style must be a Style object.") } invisible(dxfId <- wb$addDXFS(style)) } else if (type == "duplicatedValues") { # type == "duplicatedValues" # - style is a Style object # - rule is ignored if (is.null(style)) { style <- createStyle(fontColour = "#9C0006", bgFill = "#FFC7CE") } if (!"Style" %in% class(style)) { stop("If type == 'duplicates', style must be a Style object.") } invisible(dxfId <- wb$addDXFS(style)) rule <- style } else if (type == "containsText") { # type == "contains" # - style is Style object # - rule is text to look for if (is.null(style)) { style <- createStyle(fontColour = "#9C0006", bgFill = "#FFC7CE") } if (!"character" %in% class(rule)) { stop("If type == 'contains', rule must be a character vector of length 1.") } if (!"Style" %in% class(style)) { stop("If type == 'contains', style must be a Style object.") } invisible(dxfId <- wb$addDXFS(style)) values <- rule rule <- style } else if (type == "notContainsText") { # type == "contains" # - style is Style object # - rule is text to look for if (is.null(style)) { style <- createStyle(fontColour = "#9C0006", bgFill = "#FFC7CE") } if (!"character" %in% class(rule)) { stop("If type == 'notContains', rule must be a character vector of length 1.") } if (!"Style" %in% class(style)) { stop("If type == 'notContains', style must be a Style object.") } invisible(dxfId <- wb$addDXFS(style)) values <- rule rule <- style } else if (type == "beginsWith") { # type == "contains" # - style is Style object # - rule is text to look for if (is.null(style)) { style <- createStyle(fontColour = "#9C0006", bgFill = "#FFC7CE") } if (!"character" %in% class(rule)) { stop("If type == 'beginsWith', rule must be a character vector of length 1.") } if (!"Style" %in% class(style)) { stop("If type == 'beginsWith', style must be a Style object.") } invisible(dxfId <- wb$addDXFS(style)) values <- rule rule <- style } else if (type == "endsWith") { # type == "contains" # - style is Style object # - rule is text to look for if (is.null(style)) { style <- createStyle(fontColour = "#9C0006", bgFill = "#FFC7CE") } if (!"character" %in% class(rule)) { stop("If type == 'endsWith', rule must be a character vector of length 1.") } if (!"Style" %in% class(style)) { stop("If type == 'endsWith', style must be a Style object.") } invisible(dxfId <- wb$addDXFS(style)) values <- rule rule <- style } else if (type == "between") { rule <- range(rule) if (is.null(style)) { style <- createStyle(fontColour = "#9C0006", bgFill = "#FFC7CE") } if (!"Style" %in% class(style)) { stop("If type == 'between', style must be a Style object.") } invisible(dxfId <- wb$addDXFS(style)) } else if (type == "topN") { # type == "topN" # - rule is ignored # - 'rank' and 'percent' are named params if (is.null(style)) { style <- createStyle(fontColour = "#9C0006", bgFill = "#FFC7CE") } if (!"Style" %in% class(style)) { stop("If type == 'topN', style must be a Style object.") } invisible(dxfId <- wb$addDXFS(style)) ## Additional parameters passed by ... if ("percent" %in% names(params)) { params$percent <- as.integer(params$percent) if (is.na(params$percent)) { stop("percent must be 0/1 or TRUE/FALSE") } } if ("rank" %in% names(params)) { params$rank <- as.integer(params$rank) if (is.na(params$rank)) { stop("rank must be a number") } } invisible(dxfId <- wb$addDXFS(style)) values <- params rule <- style } else if (type == "bottomN") { # type == "bottomN" # - rule is ignored # - 'rank' and 'percent' are named params if (is.null(style)) { style <- createStyle(fontColour = "#9C0006", bgFill = "#FFC7CE") } if (!"Style" %in% class(style)) { stop("If type == 'bottomN', style must be a Style object.") } invisible(dxfId <- wb$addDXFS(style)) ## Additional parameters passed by ... if ("percent" %in% names(params)) { params$percent <- as.integer(params$percent) if (is.na(params$percent)) { stop("percent must be 0/1 or TRUE/FALSE") } } if ("rank" %in% names(params)) { params$rank <- as.integer(params$rank) if (is.na(params$rank)) { stop("rank must be a number") } } invisible(dxfId <- wb$addDXFS(style)) values <- params rule <- style } else if (type == "containsBlanks") { # rule is ignored if (is.null(style)) { style <- createStyle(fontColour = "#9C0006", bgFill = "#FFC7CE") } if (!"Style" %in% class(style)) { stop("If type == 'blanks', style must be a Style object.") } invisible(dxfId <- wb$addDXFS(style)) } else if (type == "notContainsBlanks") { # rule is ignored if (is.null(style)) { style <- createStyle(fontColour = "#9C0006", bgFill = "#FFC7CE") } if (!"Style" %in% class(style)) { stop("If type == 'notBlanks', style must be a Style object.") } invisible(dxfId <- wb$addDXFS(style)) } invisible( wb$conditionalFormatting( sheet, startRow = min(rows), endRow = max(rows), startCol = min(cols), endCol = max(cols), dxfId = dxfId, formula = rule, type = type, values = values, params = params ) ) invisible(0) } openxlsx/R/build_workbook.R0000644000176200001440000001321214656123677015512 0ustar liggesusers#' Build Workbook #' #' Build a workbook from a data.frame or named list #' #' @details #' This function can be used as shortcut to create a workbook object from a #' data.frame or named list. If names are available in the list they will be #' used as the worksheet names. The parameters in `...` are collected #' and passed to [writeData()] or [writeDataTable()] to #' initially create the Workbook objects then appropriate parameters are #' passed to [setColWidths()]. #' #' @param x A data.frame or a (named) list of objects that can be handled by #' [writeData()] or [writeDataTable()] to write to file #' @param asTable If `TRUE` will use [writeDataTable()] rather #' than [writeData()] to write `x` to the file (default: #' `FALSE`) #' @param ... Additional arguments passed to [writeData()], #' [writeDataTable()], [setColWidths()] (see Optional #' Parameters) #' @author Jordan Mark Barbone #' @returns A Workbook object #' #' @details #' columns of x with class Date or POSIXt are automatically #' styled as dates and datetimes respectively. #' #' @section Optional Parameters: #' #' **createWorkbook Parameters** #' \describe{ #' \item{**creator**}{ A string specifying the workbook author} #' } #' #' **addWorksheet Parameters** #' \describe{ #' \item{**sheetName**}{ Name of the worksheet} #' \item{**gridLines**}{ A logical. If `FALSE`, the worksheet grid lines will be hidden.} #' \item{**tabColour**}{ Colour of the worksheet tab. A valid colour (belonging to colours()) #' or a valid hex colour beginning with "#".} #' \item{**zoom**}{ A numeric between 10 and 400. Worksheet zoom level as a percentage.} #' } #' #' **writeData/writeDataTable Parameters** #' \describe{ #' \item{**startCol**}{ A vector specifying the starting column(s) to write df} #' \item{**startRow**}{ A vector specifying the starting row(s) to write df} #' \item{**xy**}{ An alternative to specifying startCol and startRow individually. #' A vector of the form c(startCol, startRow)} #' \item{**colNames or col.names**}{ If `TRUE`, column names of x are written.} #' \item{**rowNames or row.names**}{ If `TRUE`, row names of x are written.} #' \item{**headerStyle**}{ Custom style to apply to column names.} #' \item{**borders**}{ Either "surrounding", "columns" or "rows" or NULL. If "surrounding", a border is drawn around the #' data. If "rows", a surrounding border is drawn a border around each row. If "columns", a surrounding border is drawn with a border #' between each column. If "`all`" all cell borders are drawn.} #' \item{**borderColour**}{ Colour of cell border} #' \item{**borderStyle**}{ Border line style.} #' \item{**keepNA**}{If `TRUE`, NA values are converted to #N/A (or `na.string`, if not NULL) in Excel, else NA cells will be empty. Defaults to FALSE.} #' \item{**na.string**}{If not NULL, and if `keepNA` is `TRUE`, NA values are converted to this string in Excel. Defaults to NULL.} #' } #' #' **freezePane Parameters** #' \describe{ #' \item{**firstActiveRow**}{Top row of active region to freeze pane.} #' \item{**firstActiveCol**}{Furthest left column of active region to freeze pane.} #' \item{**firstRow**}{If `TRUE`, freezes the first row (equivalent to firstActiveRow = 2)} #' \item{**firstCol**}{If `TRUE`, freezes the first column (equivalent to firstActiveCol = 2)} #' } #' #' **colWidths Parameters** #' \describe{ #' \item{**colWidths**}{May be a single value for all columns (or "auto"), or a list of vectors that will be recycled for each sheet (see examples)} #' } #' #' @examples #' x <- data.frame(a = 1, b = 2) #' wb <- buildWorkbook(x) #' #' y <- list(a = x, b = x, c = x) #' buildWorkbook(y, asTable = TRUE) #' buildWorkbook(y, asTable = TRUE, tableStyle = "TableStyleLight8") #' #' @seealso [write.xlsx()] #' #' @export buildWorkbook <- function(x, asTable = FALSE, ...) { if (!is.logical(asTable)) { stop("asTable must be a logical.") } params <- list(...) isList <- inherits(x, "list") if (isList) { params[["sheetName"]] <- params[["sheetName"]] %||% names(x) %||% paste0("Sheet ", seq_along(x)) } ## create new Workbook object wb <- do_call_params(createWorkbook, params) ## If a list is supplied write to individual worksheets using names if available if (isList) { do_call_params(addWorksheet, params, wb = list(wb), .map = TRUE) } else { params[["sheetName"]] <- params[["sheetName"]] %||% "Sheet 1" do_call_params(addWorksheet, params, wb = wb) } params[["sheet"]] <- params[["sheet"]] %||% params[["sheetName"]] # write Data if (asTable) { do_call_params(writeDataTable, params, x = x, wb = list(wb), .map = TRUE) } else { do_call_params(writeData, params, x = x, wb = wb, .map = TRUE) } do_setColWidths(wb, x, params, isList) do_call_params(freezePane, params, wb = list(wb), .map = TRUE) wb } do_setColWidths <- function(wb, x, params, isList) { if (!isList) { x <- list(x) } params[["startCol"]] <- params[["startCol"]] %||% 1 params[["startCol"]] <- rep_len(list(params[["startCol"]]), length.out = length(x)) params[["colWidths"]] <- params[["colWidths"]] %||% "" params[["colWidths"]] <- rep_len(as.list(params[["colWidths"]]), length.out = length(x)) for (i in seq_along(wb[["worksheets"]])) { if (identical(params[["colWidths"]][[i]], "auto")) { setColWidths( wb, sheet = i, cols = seq_along(x[[i]]) + params[["startCol"]][[i]] - 1L, widths = "auto" ) } else if (!identical(params[["colWidths"]][[i]], "")) { setColWidths( wb, sheet = i, cols = seq_along(x[[i]]) + params[["startCol"]][[i]] - 1L, widths = params[["colWidths"]][[i]] ) } } wb } openxlsx/R/StyleClass.R0000644000176200001440000001676014374150317014563 0ustar liggesusers #' @include class_definitions.R Style$methods(initialize = function() { fontName <<- NULL fontColour <<- NULL fontSize <<- NULL fontFamily <<- NULL fontScheme <<- NULL fontDecoration <<- NULL borderTop <<- NULL borderLeft <<- NULL borderRight <<- NULL borderBottom <<- NULL borderTopColour <<- NULL borderLeftColour <<- NULL borderRightColour <<- NULL borderBottomColour <<- NULL borderDiagonal <<- NULL borderDiagonalColour <<- NULL borderDiagonalUp <<- FALSE borderDiagonalDown <<- FALSE halign <<- NULL valign <<- NULL indent <<- NULL textRotation <<- NULL numFmt <<- NULL fill <<- NULL wrapText <<- NULL hidden <<- NULL locked <<- NULL xfId <<- NULL }) mergeStyle <- function(oldStyle, newStyle) { ## This function is used to merge an existing cell style with a new style to create a stacked style. oldStyle <- oldStyle$copy() if (!is.null(newStyle$fontName)) { oldStyle$fontName <- newStyle$fontName } if (!is.null(newStyle$fontColour)) { oldStyle$fontColour <- newStyle$fontColour } if (!is.null(newStyle$fontSize)) { oldStyle$fontSize <- newStyle$fontSize } if (!is.null(newStyle$fontFamily)) { oldStyle$fontFamily <- newStyle$fontFamily } if (!is.null(newStyle$fontScheme)) { oldStyle$fontScheme <- newStyle$fontScheme } if (length(newStyle$fontDecoration) > 0) { if (length(oldStyle$fontDecoration) == 0) { oldStyle$fontDecoration <- newStyle$fontDecoration } else { oldStyle$fontDecoration <- c(oldStyle$fontDecoration, newStyle$fontDecoration) } } ## borders if (!is.null(newStyle$borderTop)) { oldStyle$borderTop <- newStyle$borderTop } if (!is.null(newStyle$borderLeft)) { oldStyle$borderLeft <- newStyle$borderLeft } if (!is.null(newStyle$borderRight)) { oldStyle$borderRight <- newStyle$borderRight } if (!is.null(newStyle$borderBottom)) { oldStyle$borderBottom <- newStyle$borderBottom } if (!is.null(newStyle$borderDiagonal)) { oldStyle$borderDiagonal <- newStyle$borderDiagonal } oldStyle$borderDiagonalUp <- newStyle$borderDiagonalUp oldStyle$borderDiagonalDown <- newStyle$borderDiagonalDown if (!is.null(newStyle$borderTopColour)) { oldStyle$borderTopColour <- newStyle$borderTopColour } if (!is.null(newStyle$borderLeftColour)) { oldStyle$borderLeftColour <- newStyle$borderLeftColour } if (!is.null(newStyle$borderRightColour)) { oldStyle$borderRightColour <- newStyle$borderRightColour } if (!is.null(newStyle$borderBottomColour)) { oldStyle$borderBottomColour <- newStyle$borderBottomColour } ## other if (!is.null(newStyle$halign)) { oldStyle$halign <- newStyle$halign } if (!is.null(newStyle$valign)) { oldStyle$valign <- newStyle$valign } if (!is.null(newStyle$indent)) { oldStyle$indent <- newStyle$indent } if (!is.null(newStyle$textRotation)) { oldStyle$textRotation <- newStyle$textRotation } if (!is.null(newStyle$numFmt)) { oldStyle$numFmt <- newStyle$numFmt } if (!is.null(newStyle$fill)) { oldStyle$fill <- newStyle$fill } if (!is.null(newStyle$wrapText)) { oldStyle$wrapText <- newStyle$wrapText } if (!is.null(newStyle$locked)) { oldStyle$locked <- newStyle$locked } if (!is.null(newStyle$hidden)) { oldStyle$hidden <- newStyle$hidden } if (!is.null(newStyle$xfId)) { oldStyle$xfId <- newStyle$xfId } return(oldStyle) } Style$methods(show = function(print = TRUE) { numFmtMapping <- list( list("numFmtId" = 0), list("numFmtId" = 2), list("numFmtId" = 164), list("numFmtId" = 44), list("numFmtId" = 14), list("numFmtId" = 167), list("numFmtId" = 10), list("numFmtId" = 11), list("numFmtId" = 49) ) validNumFmt <- c("GENERAL", "NUMBER", "CURRENCY", "ACCOUNTING", "DATE", "TIME", "PERCENTAGE", "SCIENTIFIC", "TEXT") if (!is.null(numFmt)) { if (as.integer(numFmt$numFmtId) %in% unlist(numFmtMapping)) { numFmtStr <- validNumFmt[unlist(numFmtMapping) == as.integer(numFmt$numFmtId)] } else { numFmtStr <- sprintf('"%s"', numFmt$formatCode) } } else { numFmtStr <- "GENERAL" } borders <- c(sprintf("Top: %s", borderTop), sprintf("Bottom: %s", borderBottom), sprintf("Left: %s", borderLeft), sprintf("Right: %s", borderRight)) borderColours <- gsub("^FF", "#", c(borderTopColour, borderBottomColour, borderLeftColour, borderRightColour)) fgFill <- fill$fillFg bgFill <- fill$fillBg styleShow <- "A custom cell style. \n\n" styleShow <- append(styleShow, sprintf("Cell formatting: %s \n", numFmtStr)) ## numFmt styleShow <- append(styleShow, sprintf("Font name: %s \n", fontName[[1]])) ## Font name styleShow <- append(styleShow, sprintf("Font size: %s \n", fontSize[[1]])) ## Font size styleShow <- append(styleShow, sprintf("Font colour: %s \n", gsub("^FF", "#", fontColour[[1]]))) ## Font colour ## Font decoration if (length(fontDecoration) > 0) { styleShow <- append(styleShow, sprintf("Font decoration: %s \n", paste(fontDecoration, collapse = ", "))) } if (length(borders) > 0) { styleShow <- append(styleShow, sprintf("Cell borders: %s \n", paste(borders, collapse = ", "))) ## Cell borders styleShow <- append(styleShow, sprintf("Cell border colours: %s \n", paste(borderColours, collapse = ", "))) ## Cell borders } if (!is.null(halign)) { styleShow <- append(styleShow, sprintf("Cell horz. align: %s \n", halign)) } ## Cell horizontal alignment if (!is.null(valign)) { styleShow <- append(styleShow, sprintf("Cell vert. align: %s \n", valign)) } ## Cell vertical alignment if (!is.null(indent)) { styleShow <- append(styleShow, sprintf("Cell indent: %s \n", indent)) } ## Cell indent if (!is.null(textRotation)) { styleShow <- append(styleShow, sprintf("Cell text rotation: %s \n", textRotation)) } ## Cell text rotation ## Cell fill colour if (length(fgFill) > 0) { styleShow <- append(styleShow, sprintf("Cell fill foreground: %s \n", paste(paste0(names(fgFill), ": ", sub("^FF", "#", fgFill)), collapse = ", "))) } if (length(bgFill) > 0) { styleShow <- append(styleShow, sprintf("Cell fill background: %s \n", paste(paste0(names(bgFill), ": ", sub("^FF", "#", bgFill)), collapse = ", "))) } if (!is.null(locked)) { styleShow <- append(styleShow, sprintf("Cell protection: %s \n", locked)) } ## Cell protection if (!is.null(hidden)) { styleShow <- append(styleShow, sprintf("Cell formula hidden: %s \n", hidden)) } ## Cell formula hidden styleShow <- append(styleShow, sprintf("wraptext: %s", wrapText)) ## wrap text styleShow <- c(styleShow, "\n\n") if (print) { cat(styleShow) } return(invisible(styleShow)) }) Style$methods(as.list = function() { l <- list( "fontName" = fontName, "fontColour" = fontColour, "fontSize" = fontSize, "fontFamily" = fontFamily, "fontScheme" = fontScheme, "fontDecoration" = fontDecoration, "borderTop" = borderTop, "borderLeft" = borderLeft, "borderRight" = borderRight, "borderBottom" = borderBottom, "borderTopColour" = borderTopColour, "borderLeftColour" = borderLeftColour, "borderRightColour" = borderRightColour, "borderBottomColour" = borderBottomColour, "halign" = halign, "valign" = valign, "indent" = indent, "textRotation" = textRotation, "numFmt" = numFmt, "fillFg" = fill$fillFg, "fillBg" = fill$fillBg, "wrapText" = wrapText, "locked" = locked, "hidden" = hidden, "xfId" = xfId ) l[sapply(l, length) > 0] }) openxlsx/R/baseXML.R0000644000176200001440000006022214672624216013765 0ustar liggesusers genBaseContent_Type <- function() { c( '', '', '', '', '', '', '', '', '' ) } genBaseShapeVML <- function(clientData, id) { if (grepl("visible", clientData, ignore.case = TRUE)) { visible <- "visible" } else { visible <- "hidden" } paste0( sprintf('', visible), '
', clientData, "" ) } genClientData <- function(col, row, visible, height, width) { txt <- sprintf( '%s, 15, %s, 10, %s, 147, %s, 18False%s%s', col, row - 2L, col + width - 1L, row + height - 1L, row - 1L, col - 1L ) if (visible) { txt <- paste0(txt, "") } txt <- paste0(txt, "") return(txt) } # genBaseRels <- function(){ # # ' # # ' # # } # # # genBaseApp <- function(){ # list('Microsoft Excel') # } genBaseCore <- function(creator = "", title = NULL, subject = NULL, category = NULL) { core <- '' core <- stri_c(core, sprintf("%s", replaceIllegalCharacters(creator))) core <- stri_c(core, sprintf("%s", replaceIllegalCharacters(creator))) core <- stri_c(core, sprintf('%s', format(as_POSIXct_utc(Sys.time()), "%Y-%m-%dT%H:%M:%SZ"))) if (!is.null(title)) { core <- stri_c(core, sprintf("%s", replaceIllegalCharacters(title))) } if (!is.null(subject)) { core <- stri_c(core, sprintf("%s", replaceIllegalCharacters(subject))) } if (!is.null(category)) { core <- stri_c(core, sprintf("%s", replaceIllegalCharacters(category))) } core <- stri_c(core, "") return(core) } # # addAuthor <- function(wb,Author = NULL){ # # if (!is.null(Author)) { # current_creator <- # stri_match(wb$core, regex = "(.*?)")[1, 2] # wb$core <- # stri_replace_all_fixed( # wb$core, # pattern = current_creator, # replacement = stri_c(current_creator, Author, sep = ";") # ) # } # # # } # # # setAuthor <- function(wb,Author = NULL){ # # if (!is.null(Author)) { # current_creator <- # stri_match(wb$core, regex = "(.*?)")[1, 2] # wb$core <- # stri_replace_all_fixed( # wb$core, # pattern = current_creator, # replacement = Author # ) # } # # # } # # setLastModifiedBy <- function(wb,ModifiedBy=NULL){ # # if (!is.null(addmodifier)) { # current_lastmodifier <- # stri_match(wb$core, regex = "(.*?)")[1, 2] # wb$core <- # stri_replace_all_fixed( # wb$core, # pattern = current_lastmodifier, # replacement = ModifiedBy # ) # } # # # } # # # # # setBaseCore <- function(core,setcreator="",setmodifier="", # title = NULL, subject = NULL, category = NULL){ # # # core <- c(core, sprintf('%s', setcreator)) # core <- c(core, sprintf('%s', format(Sys.time(), "%Y-%m-%dT%H:%M:%SZ"))) # # if(!is.null(title)) # core <- c(core, sprintf('%s', replaceIllegalCharacters(title))) # # if(!is.null(subject)) # core <- c(core, sprintf('%s', replaceIllegalCharacters(subject))) # # if(!is.null(category)) # core <- c(core, sprintf('%s', replaceIllegalCharacters(category))) # # core <- c(core, '') # # return(core) # # } genBaseWorkbook.xml.rels <- function() { c( '', '', '' ) } genBaseWorkbook <- function() { list( workbookPr = '', workbookProtection = NULL, bookViews = '', sheets = NULL, externalReferences = NULL, definedNames = NULL, calcPr = NULL, pivotCaches = NULL, extLst = NULL ) } genBaseSheetRels <- function(sheetInd) { c( sprintf('', sheetInd), sprintf('', sheetInd), sprintf('', sheetInd) ) } genBaseStyleSheet <- function(dxfs = NULL, tableStyles = NULL, extLst = NULL) { list( numFmts = NULL, fonts = c(''), fills = c( '', '' ), borders = c(""), cellStyleXfs = c(''), cellXfs = c(''), cellStyles = c(''), dxfs = dxfs, tableStyles = tableStyles, indexedColors = NULL, extLst = extLst ) } genBasePic <- function(imageNo, imageRelNo, hyperlinkXML) { sprintf(' ', imageNo, imageNo, hyperlinkXML, imageRelNo) } genBaseTheme <- function() { ' ' } genPrinterSettings <- function() { "5c 00 5c 00 41 00 55 00 43 00 41 00 4c 00 50 00 52 00 4f 00 44 00 46 00 50 00 5c 00 4c 00 31 00 34 00 78 00 65 00 72 00 6f 00 78 00 31 00 20 00 2d 00 20 00 58 00 65 00 72 00 6f 00 00 00 00 00 01 04 00 52 dc 00 5c 05 13 ff 81 07 02 00 09 00 9a 0b 34 08 64 00 01 00 0f 00 2c 01 02 00 02 00 2c 01 03 00 01 00 41 00 34 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 01 00 00 00 01 00 00 00 01 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 52 c0 21 46 00 58 00 20 00 41 00 70 00 65 00 6f 00 73 00 50 00 6f 00 72 00 74 00 2d 00 49 00 49 00 49 00 20 00 43 00 34 00 34 00 30 00 30 00 20 00 50 00 43 00 4c 00 20 00 36 00 00 00 00 00 00 00 00 00 4e 08 a0 13 40 09 08 00 0b 01 64 00 01 00 07 00 01 00 00 00 00 00 00 00 00 00 07 00 01 00 08 01 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 08 08 08 00 08 08 08 00 08 08 08 00 08 08 08 00 00 01 03 00 02 02 00 01 02 02 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 01 00 00 00 00 00 00 00 02 02 48 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 bc 02 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 05 00 00 00 00 00 00 08 00 01 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 01 00 00 00 00 00 00 01 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 0b 96 00 00 00 c8 00 01 01 01 01 01 01 01 01 01 01 01 01 09 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 bc 02 00 00 00 00 00 00 00 00 02 00 41 00 72 00 69 00 61 00 6c 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 01 00 01 00 01 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 12 70 5f 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 01 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00" } gen_databar_extlst <- function(guid, sqref, posColour, negColour, values, border, gradient) { xml <- sprintf('', guid, border, gradient) if (is.null(values)) { xml <- sprintf(' %s %s', xml, posColour, negColour, negColour, sqref) } else { xml <- sprintf(' %s %s%s %s', xml, values[[1]], values[[2]], posColour, negColour, negColour, sqref) } return(xml) } contentTypePivotXML <- function(i) { c( sprintf('', i), sprintf('', i), sprintf('', i) ) } contentTypeSlicerCacheXML <- function(i) { c( sprintf('', i), sprintf('', i) ) } genBaseSlicerXML <- function() { ' ' } genSlicerCachesExtLst <- function(i) { paste0( ' ', paste(sprintf('', i), collapse = ""), "" ) } openxlsx/R/zzz.R0000644000176200001440000000024714374150317013323 0ustar liggesusers.onAttach <- function(libname, pkgname) { op <- options() toset <- !(names(op.openxlsx) %in% names(op)) if (any(toset)) { options(op.openxlsx[toset]) } } openxlsx/R/onUnload.R0000644000176200001440000000011714374150317014241 0ustar liggesusers.onUnload <- function(libpath) { library.dynam.unload("openxlsx", libpath) } openxlsx/R/helperFunctions.R0000644000176200001440000007625614745234534015661 0ustar liggesusers#' @name makeHyperlinkString #' @title create Excel hyperlink string #' @description Wrapper to create internal hyperlink string to pass to writeFormula(). Either link to external urls or local files or straight to cells of local Excel sheets. #' @param sheet Name of a worksheet #' @param row integer row number for hyperlink to link to #' @param col column number of letter for hyperlink to link to #' @param text display text #' @param file Excel file name to point to. If NULL hyperlink is internal. #' @seealso [writeFormula()] #' @export makeHyperlinkString #' @examples #' #' ## Writing internal hyperlinks #' wb <- createWorkbook() #' addWorksheet(wb, "Sheet1") #' addWorksheet(wb, "Sheet2") #' addWorksheet(wb, "Sheet 3") #' writeData(wb, sheet = 3, x = iris) #' #' ## External Hyperlink #' x <- c("https://www.google.com", "https://www.google.com.au") #' names(x) <- c("google", "google Aus") #' class(x) <- "hyperlink" #' #' writeData(wb, sheet = 1, x = x, startCol = 10) #' #' #' ## Internal Hyperlink - create hyperlink formula manually #' writeFormula( #' wb, "Sheet1", #' x = '=HYPERLINK(\"#Sheet2!B3\", "Text to Display - Link to Sheet2")', #' startCol = 3 #' ) #' #' ## Internal - No text to display using makeHyperlinkString() function #' writeFormula( #' wb, "Sheet1", #' startRow = 1, #' x = makeHyperlinkString(sheet = "Sheet 3", row = 1, col = 2) #' ) #' #' ## Internal - Text to display #' writeFormula( #' wb, "Sheet1", #' startRow = 2, #' x = makeHyperlinkString( #' sheet = "Sheet 3", row = 1, col = 2, #' text = "Link to Sheet 3" #' ) #' ) #' #' ## Link to file - No text to display #' writeFormula( #' wb, "Sheet1", #' startRow = 4, #' x = makeHyperlinkString( #' sheet = "testing", row = 3, col = 10, #' file = system.file("extdata", "loadExample.xlsx", package = "openxlsx") #' ) #' ) #' #' ## Link to file - Text to display #' writeFormula( #' wb, "Sheet1", #' startRow = 3, #' x = makeHyperlinkString( #' sheet = "testing", row = 3, col = 10, #' file = system.file("extdata", "loadExample.xlsx", package = "openxlsx"), #' text = "Link to File." #' ) #' ) #' #' ## Link to external file - Text to display #' writeFormula( #' wb, "Sheet1", #' startRow = 10, startCol = 1, #' x = '=HYPERLINK("[C:/Users]", "Link to an external file")' #' ) #' #' ## Link to internal file #' x = makeHyperlinkString(text = "test.png", file = "D:/somepath/somepicture.png") #' writeFormula(wb, "Sheet1", startRow = 11, startCol = 1, x = x) #' #' \dontrun{ #' saveWorkbook(wb, "internalHyperlinks.xlsx", overwrite = TRUE) #' } #' makeHyperlinkString <- function(sheet, row = 1, col = 1, text = NULL, file = NULL) { op <- get_set_options() on.exit(options(op), add = TRUE) if (missing(sheet)) { if (!missing(row) || !missing(col)) warning("Option for col and/or row found, but no sheet was provided.") if (is.null(text)) str <- sprintf("=HYPERLINK(\"%s\")", file) if (is.null(file)) str <- sprintf("=HYPERLINK(\"%s\")", text) if (!is.null(text) && !is.null(file)) str <- sprintf("=HYPERLINK(\"%s\", \"%s\")", file, text) } else { cell <- paste0(int2col(col), row) if (!is.null(file)) { dest <- sprintf('"[%s]%s!%s"', file, sheet, cell) } else { dest <- sprintf('"#\'%s\'!%s"', sheet, cell) } if (is.null(text)) { str <- sprintf('=HYPERLINK(%s)', dest) } else { str <- sprintf('=HYPERLINK(%s, \"%s\")', dest, text) } } return(str) } getRId <- function(x) { regmatches(x, gregexpr('(?<= r:id=")[0-9A-Za-z]+', x, perl = TRUE)) } getId <- function(x) { regmatches(x, gregexpr('(?<= Id=")[0-9A-Za-z]+', x, perl = TRUE)) } ## creates style object based on column classes ## Used in writeData for styling when no borders and writeData table for all column-class based styling classStyles <- function(wb, sheet, startRow, startCol, colNames, nRow, colClasses, stack = TRUE) { sheet <- wb$validateSheet(sheet) allColClasses <- unlist(colClasses, use.names = FALSE) rowInds <- (1 + startRow + colNames - 1L):(nRow + startRow + colNames - 1L) startCol <- startCol - 1L newStylesElements <- NULL names(colClasses) <- NULL # For custom number formats, ensure unique IDs (extract the current maximum and add 1 for each new format) maxnumFmtId <- max(unlist(sapply(wb$styleObjects, function(i) { as.integer( max(c(i$style$numFmt$numFmtId, 0)) ) })), 165) if ("hyperlink" %in% allColClasses) { ## style hyperlinks inds <- which(sapply(colClasses, function(x) "hyperlink" %in% x)) hyperlinkstyle <- createStyle(textDecoration = "underline") hyperlinkstyle$fontColour <- list("theme" = "10") styleElements <- list( "style" = hyperlinkstyle, "sheet" = wb$sheet_names[sheet], "rows" = rep.int(rowInds, times = length(inds)), "cols" = rep(inds + startCol, each = length(rowInds)) ) newStylesElements <- append(newStylesElements, list(styleElements)) } if ("date" %in% allColClasses) { ## style dates inds <- which(sapply(colClasses, function(x) "date" %in% x)) # make sure the style has a unique ID: style = createStyle(numFmt = "date") if (style$numFmt$numFmtId == 165) { style$numFmt$numFmtId <- maxnumFmtId + 1 maxnumFmtId <- style$numFmt$numFmtId } styleElements <- list( "style" = style, "sheet" = wb$sheet_names[sheet], "rows" = rep.int(rowInds, times = length(inds)), "cols" = rep(inds + startCol, each = length(rowInds)) ) newStylesElements <- append(newStylesElements, list(styleElements)) } if (any(c("posixlt", "posixct", "posixt") %in% allColClasses)) { ## style POSIX inds <- which(sapply(colClasses, function(x) any(c("posixct", "posixt", "posixlt") %in% x))) # make sure the style has a unique ID: style = createStyle(numFmt = "LONGDATE") if (style$numFmt$numFmtId == 165) { style$numFmt$numFmtId <- maxnumFmtId + 1 maxnumFmtId <- style$numFmt$numFmtId } styleElements <- list( "style" = style, "sheet" = wb$sheet_names[sheet], "rows" = rep.int(rowInds, times = length(inds)), "cols" = rep(inds + startCol, each = length(rowInds)) ) newStylesElements <- append(newStylesElements, list(styleElements)) } ## style currency as CURRENCY if ("currency" %in% allColClasses) { inds <- which(sapply(colClasses, function(x) "currency" %in% x)) styleElements <- list( "style" = createStyle(numFmt = "CURRENCY"), "sheet" = wb$sheet_names[sheet], "rows" = rep.int(rowInds, times = length(inds)), "cols" = rep(inds + startCol, each = length(rowInds)) ) newStylesElements <- append(newStylesElements, list(styleElements)) } ## style accounting as ACCOUNTING if ("accounting" %in% allColClasses) { inds <- which(sapply(colClasses, function(x) "accounting" %in% x)) styleElements <- list( "style" = createStyle(numFmt = "ACCOUNTING"), "sheet" = wb$sheet_names[sheet], "rows" = rep.int(rowInds, times = length(inds)), "cols" = rep(inds + startCol, each = length(rowInds)) ) newStylesElements <- append(newStylesElements, list(styleElements)) } ## style percentages if ("percentage" %in% allColClasses) { inds <- which(sapply(colClasses, function(x) "percentage" %in% x)) styleElements <- list( "style" = createStyle(numFmt = "percentage"), "sheet" = wb$sheet_names[sheet], "rows" = rep.int(rowInds, times = length(inds)), "cols" = rep(inds + startCol, each = length(rowInds)) ) newStylesElements <- append(newStylesElements, list(styleElements)) } ## style big mark if ("scientific" %in% allColClasses) { inds <- which(sapply(colClasses, function(x) "scientific" %in% x)) styleElements <- list( "style" = createStyle(numFmt = "scientific"), "sheet" = wb$sheet_names[sheet], "rows" = rep.int(rowInds, times = length(inds)), "cols" = rep(inds + startCol, each = length(rowInds)) ) newStylesElements <- append(newStylesElements, list(styleElements)) } ## style big mark if ("3" %in% allColClasses || "comma" %in% allColClasses) { inds <- which(sapply(colClasses, function(x) "3" %in% tolower(x) | "comma" %in% tolower(x))) styleElements <- list( "style" = createStyle(numFmt = "3"), "sheet" = wb$sheet_names[sheet], "rows" = rep.int(rowInds, times = length(inds)), "cols" = rep(inds + startCol, each = length(rowInds)) ) newStylesElements <- append(newStylesElements, list(styleElements)) } ## numeric sigfigs (Col must be numeric and numFmt options must only have 0s and \\.) if ("numeric" %in% allColClasses && !grepl("[^0\\.,#\\$\\* %]", getOption("openxlsx.numFmt", "GENERAL"))) { inds <- which(sapply(colClasses, function(x) "numeric" %in% tolower(x))) styleElements <- list( "style" = createStyle(numFmt = getOption("openxlsx.numFmt", "0")), "sheet" = wb$sheet_names[sheet], "rows" = rep.int(rowInds, times = length(inds)), "cols" = rep(inds + startCol, each = length(rowInds)) ) newStylesElements <- append(newStylesElements, list(styleElements)) } if (!is.null(newStylesElements)) { if (stack) { for (i in seq_along(newStylesElements)) { wb$addStyle( sheet = sheet, style = newStylesElements[[i]]$style, rows = newStylesElements[[i]]$rows, cols = newStylesElements[[i]]$cols, stack = TRUE ) } } else { wb$styleObjects <- append(wb$styleObjects, newStylesElements) } } invisible(1) } #' @name validateColour #' @description validate the colour input #' @param colour colour #' @param errorMsg Error message #' @author Philipp Schauberger #' @importFrom grDevices colours #' @keywords internal #' @noRd validateColour <- function(colour, errorMsg = "Invalid colour!") { ## check if if (is.null(colour)) { colour <- "black" } validColours <- colours() if (any(colour %in% validColours)) { colour[colour %in% validColours] <- col2hex(colour[colour %in% validColours]) } if (any(!grepl("^#[A-Fa-f0-9]{6}$", colour))) { stop(errorMsg, call. = FALSE) } colour <- gsub("^#", "FF", toupper(colour)) return(colour) } #' @name col2hex #' @description convert rgb to hex #' @param creator my.col #' @author Philipp Schauberger #' @importFrom grDevices col2rgb rgb #' @keywords internal #' @noRd col2hex <- function(my.col) { rgb(t(col2rgb(my.col)), maxColorValue = 255) } ## header and footer replacements headerFooterSub <- function(x) { if (!is.null(x)) { x <- replaceIllegalCharacters(x) x <- gsub("\\[Page\\]", "P", x) x <- gsub("\\[Pages\\]", "N", x) x <- gsub("\\[Date\\]", "D", x) x <- gsub("\\[Time\\]", "T", x) x <- gsub("\\[Path\\]", "Z", x) x <- gsub("\\[File\\]", "F", x) x <- gsub("\\[Tab\\]", "A", x) } return(x) } writeCommentXML <- function(comment_list, file_name) { authors <- unique(sapply(comment_list, "[[", "author")) xml <- '' xml <- c(xml, paste0("", paste(sprintf("%s", authors), collapse = ""), "")) for (i in seq_along(comment_list)) { authorInd <- which(authors == comment_list[[i]]$author) - 1L xml <- c(xml, sprintf('', comment_list[[i]]$ref, authorInd)) if (length(comment_list[[i]]$style) != 0) { ## check that style information is present for (j in seq_along(comment_list[[i]]$comment)) { xml <- c(xml, sprintf('%s%s', comment_list[[i]]$style[[j]], comment_list[[i]]$comment[[j]])) } } else { ## Case with no styling information. for (j in seq_along(comment_list[[i]]$comment)) { xml <- c(xml, sprintf('%s', comment_list[[i]]$comment[[j]])) } } xml <- c(xml, "") } write_file(body = paste(xml, collapse = ""), tail = "", fl = file_name) NULL } illegalchars <- c("&", '"', "'", "<", ">", "\a", "\b", "\v", "\f") illegalcharsreplace <- c("&", """, "'", "<", ">", "", "", "", "") replaceIllegalCharacters <- function(v) { vEnc <- Encoding(v) v <- as.character(v) flg <- vEnc != "UTF-8" if (any(flg)) { v[flg] <- stri_conv(v[flg], from = "", to = "UTF-8") } v <- stri_replace_all_fixed(v, illegalchars, illegalcharsreplace, vectorize_all = FALSE) return(v) } replaceXMLEntities <- function(v) { v <- gsub("&", "&", v, fixed = TRUE) v <- gsub(""", '"', v, fixed = TRUE) v <- gsub("'", "'", v, fixed = TRUE) v <- gsub("<", "<", v, fixed = TRUE) v <- gsub(">", ">", v, fixed = TRUE) return(v) } pxml <- function(x) { paste(unique(unlist(x)), collapse = "") } removeHeadTag <- function(x) { x <- paste(x, collapse = "") if (any(grepl("<\\?", x))) { x <- gsub("<\\?xml [^>]+", "", x) } x <- gsub("^>", "", x) x } validateBorderStyle <- function(borderStyle) { valid <- c( "none", "thin", "medium", "dashed", "dotted", "thick", "double", "hair", "mediumDashed", "dashDot", "mediumDashDot", "dashDotDot", "mediumDashDotDot", "slantDashDot" ) ind <- match(tolower(borderStyle), tolower(valid)) if (any(is.na(ind))) { stop("Invalid borderStyle", call. = FALSE) } return(valid[ind]) } getAttrsFont <- function(xml, tag) { x <- lapply(xml, getChildlessNode, tag = tag) x[sapply(x, length) == 0] <- "" x <- unlist(x) a <- lapply(x, function(x) unlist(regmatches(x, gregexpr('[a-zA-Z]+=".*?"', x)))) nms <- lapply(a, function(xml) regmatches(xml, regexpr('[a-zA-Z]+(?=\\=".*?")', xml, perl = TRUE))) vals <- lapply(a, function(xml) regmatches(xml, regexpr('(?<=").*?(?=")', xml, perl = TRUE))) vals <- lapply(vals, function(x) { Encoding(x) <- "UTF-8" x }) vals <- lapply(seq_along(vals), function(i) { names(vals[[i]]) <- nms[[i]] vals[[i]] }) return(vals) } getAttrs <- function(xml, tag) { x <- lapply(xml, getChildlessNode_ss, tag = tag) x[sapply(x, length) == 0] <- "" a <- lapply(x, function(x) regmatches(x, regexpr('[a-zA-Z]+=".*?"', x))) names <- lapply(a, function(xml) regmatches(xml, regexpr('[a-zA-Z]+(?=\\=".*?")', xml, perl = TRUE))) vals <- lapply(a, function(xml) regmatches(xml, regexpr('(?<=").*?(?=")', xml, perl = TRUE))) vals <- lapply(vals, function(x) { Encoding(x) <- "UTF-8" x }) names(vals) <- names return(vals) } buildFontList <- function(fonts) { sz <- getAttrs(fonts, "sz") colour <- getAttrsFont(fonts, "color") name <- getAttrs(fonts, tag = "name") family <- getAttrs(fonts, "family") scheme <- getAttrs(fonts, "scheme") italic <- lapply(fonts, getChildlessNode, tag = "i") bold <- lapply(fonts, getChildlessNode, tag = "b") underline <- lapply(fonts, getChildlessNode, tag = "u") strikeout <- lapply(fonts, getChildlessNode, tag = "strike") ## Build font objects ft <- replicate(list(), n = length(fonts)) for (i in seq_along(fonts)) { f <- NULL nms <- NULL if (length(unlist(sz[i])) > 0) { f <- c(f, sz[i]) nms <- c(nms, "sz") } if (length(unlist(colour[i])) > 0) { f <- c(f, colour[i]) nms <- c(nms, "color") } if (length(unlist(name[i])) > 0) { f <- c(f, name[i]) nms <- c(nms, "name") } if (length(unlist(family[i])) > 0) { f <- c(f, family[i]) nms <- c(nms, "family") } if (length(unlist(scheme[i])) > 0) { f <- c(f, scheme[i]) nms <- c(nms, "scheme") } if (length(italic[[i]]) > 0) { f <- c(f, "italic") nms <- c(nms, "italic") } if (length(bold[[i]]) > 0) { f <- c(f, "bold") nms <- c(nms, "bold") } if (length(underline[[i]]) > 0) { f <- c(f, "underline") nms <- c(nms, "underline") } if (length(unlist(strikeout[i])) > 0) { f <- c(f, strikeout[i]) nms <- c(nms, "strikeout") } f <- lapply(seq_along(f), function(i) unlist(f[i])) names(f) <- nms ft[[i]] <- f } ft } get_named_regions_from_string <- function(dn) { dn <- gsub("", "", dn, fixed = TRUE) dn <- gsub("", "", dn, fixed = TRUE) dn <- unique(unlist(strsplit(dn, split = "", fixed = TRUE))) dn <- grep(").*", dn, perl = TRUE)) dn_pos <- gsub("[$']", "", dn_pos) has_bang <- grepl("!", dn_pos, fixed = TRUE) dn_sheets <- ifelse(has_bang, gsub("^(.*)!.*$", "\\1", dn_pos), "" ) dn_coords <- ifelse(has_bang, gsub("^.*!(.*)$", "\\1", dn_pos), "" ) attr(dn_names, "sheet") <- dn_sheets attr(dn_names, "position") <- dn_coords return(dn_names) } nodeAttributes <- function(x) { x <- paste0("<", unlist(strsplit(x, split = "<"))) x <- grep(" 1) tmp <- tmp[[1]] if (length(tmp) == 1) { sideBorder[[i]] <- tmp } } sideBorder <- sideBorder[sideBorder != ""] x <- x[sideBorder != ""] if (length(sideBorder) == 0) { return(NULL) } ## style weight <- gsub('style=|"', "", regmatches(x, regexpr('style="[a-z]+"', x, perl = TRUE, ignore.case = TRUE))) ## Colours cols <- replicate(n = length(sideBorder), list(rgb = "FF000000")) colNodes <- unlist(sapply(x, getChildlessNode, tag = "color", USE.NAMES = FALSE)) if (length(colNodes) > 0) { attrs <- regmatches(colNodes, regexpr('(theme|indexed|rgb|auto)=".+"', colNodes)) } else { attrs <- NULL } if (length(attrs) != length(x)) { return( list( "borders" = paste(sideBorder, collapse = ""), "colour" = cols ) ) } attrs <- strsplit(attrs, split = "=") cols <- sapply(attrs, function(attr) { if (length(attr) == 2) { y <- list(gsub('"', "", attr[2])) names(y) <- gsub(" ", "", attr[[1]]) } else { tmp <- paste(attr[-1], collapse = "=") y <- gsub('^"|"$', "", tmp) names(y) <- gsub(" ", "", attr[[1]]) } return(y) }) ## sideBorder & cols if ("LEFT" %in% sideBorder) { style$borderLeft <- weight[which(sideBorder == "LEFT")] style$borderLeftColour <- cols[which(sideBorder == "LEFT")] } if ("RIGHT" %in% sideBorder) { style$borderRight <- weight[which(sideBorder == "RIGHT")] style$borderRightColour <- cols[which(sideBorder == "RIGHT")] } if ("TOP" %in% sideBorder) { style$borderTop <- weight[which(sideBorder == "TOP")] style$borderTopColour <- cols[which(sideBorder == "TOP")] } if ("BOTTOM" %in% sideBorder) { style$borderBottom <- weight[which(sideBorder == "BOTTOM")] style$borderBottomColour <- cols[which(sideBorder == "BOTTOM")] } if ("DIAGONAL" %in% sideBorder) { style$borderDiagonal <- weight[which(sideBorder == "DIAGONAL")] style$borderDiagonalColour <- cols[which(sideBorder == "DIAGONAL")] } return(style) } genHeaderFooterNode <- function(x) { # # &Lfirst L&CfC&RfR # &LfFootL&CfFootC&RfFootR # &LTIS&CIS&REVEN H # &LEVEN L F&CEVEN C F&REVEN RIGHT F # &L&P&Cfirst C&Rfirst R # &Lfirst L Foot&Cfirst C Foot&Rfirst R Foot # ## ODD if (length(x$oddHeader) > 0) { oddHeader <- paste0( "", sprintf("&L%s", x$oddHeader[[1]]), sprintf("&C%s", x$oddHeader[[2]]), sprintf("&R%s", x$oddHeader[[3]]), "", collapse = "" ) } else { oddHeader <- NULL } if (length(x$oddFooter) > 0) { oddFooter <- paste0( "", sprintf("&L%s", x$oddFooter[[1]]), sprintf("&C%s", x$oddFooter[[2]]), sprintf("&R%s", x$oddFooter[[3]]), "", collapse = "" ) } else { oddFooter <- NULL } ## EVEN if (length(x$evenHeader) > 0) { evenHeader <- paste0( "", sprintf("&L%s", x$evenHeader[[1]]), sprintf("&C%s", x$evenHeader[[2]]), sprintf("&R%s", x$evenHeader[[3]]), "", collapse = "" ) } else { evenHeader <- NULL } if (length(x$evenFooter) > 0) { evenFooter <- paste0( "", sprintf("&L%s", x$evenFooter[[1]]), sprintf("&C%s", x$evenFooter[[2]]), sprintf("&R%s", x$evenFooter[[3]]), "", collapse = "" ) } else { evenFooter <- NULL } ## FIRST if (length(x$firstHeader) > 0) { firstHeader <- paste0( "", sprintf("&L%s", x$firstHeader[[1]]), sprintf("&C%s", x$firstHeader[[2]]), sprintf("&R%s", x$firstHeader[[3]]), "", collapse = "" ) } else { firstHeader <- NULL } if (length(x$firstFooter) > 0) { firstFooter <- paste0( "", sprintf("&L%s", x$firstFooter[[1]]), sprintf("&C%s", x$firstFooter[[2]]), sprintf("&R%s", x$firstFooter[[3]]), "", collapse = "" ) } else { firstFooter <- NULL } headTag <- sprintf( '', as.integer(!(is.null(evenHeader) & is.null(evenFooter))), as.integer(!(is.null(firstHeader) & is.null(firstFooter))) ) paste0( headTag, oddHeader, oddFooter, evenHeader, evenFooter, firstHeader, firstFooter, "" ) } buildFillList <- function(fills) { fillAttrs <- rep(list(list()), length(fills)) ## patternFill inds <- grepl("patternFill", fills) fillAttrs[inds] <- lapply(fills[inds], nodeAttributes) ## gradientFill inds <- grepl("gradientFill", fills) fillAttrs[inds] <- fills[inds] return(fillAttrs) } # Can test with below: # x <- "" getDefinedNamesSheet <- function(x) { sub("'?\\!.*", "", sub("^.*>'", "", x)) } # Not used but kepted in case fix above isn't correct getDefinedNamedSheet_ <- function(x) { belongTo <- unlist(lapply(strsplit(x, split = ">|<"), "[[", 3)) quoted <- grepl("^'", belongTo) belongTo[quoted] <- regmatches(belongTo[quoted], regexpr("(?<=').*(?='!)", belongTo[quoted], perl = TRUE)) belongTo[!quoted] <- gsub("!\\$[A-Z0-9].*", "", belongTo[!quoted]) belongTo[!quoted] <- gsub("!#REF!.*", "", belongTo[!quoted]) return(belongTo) } getSharedStringsFromFile <- function(sharedStringsFile, isFile) { ## read in, get si tags, get t tag value and pull out all string nodes sharedStrings <- get_shared_strings(xmlFile = sharedStringsFile, isFile = isFile) ## read from file Encoding(sharedStrings) <- "UTF-8" z <- tolower(sharedStrings) sharedStrings[z == "true"] <- "TRUE" sharedStrings[z == "false"] <- "FALSE" z <- NULL ## effectivel remove z ## XML replacements sharedStrings <- replaceXMLEntities(sharedStrings) return(sharedStrings) } clean_names <- function(x, schar) { x <- gsub("^[[:space:]]+|[[:space:]]+$", "", x) x <- gsub("[[:space:]]+", schar, x) return(x) } mergeCell2mapping <- function(x) { refs <- regmatches(x, regexpr("(?<=ref=\")[A-Z0-9:]+", x, perl = TRUE)) refs <- strsplit(refs, split = ":") rows <- lapply(refs, function(r) { r <- as.integer(gsub(pattern = "[A-Z]", replacement = "", r, perl = TRUE)) seq(from = r[1], to = r[2], by = 1) }) cols <- lapply(refs, function(r) { r <- convertFromExcelRef(r) seq(from = r[1], to = r[2], by = 1) }) ## for each we grid.expand refs <- do.call("rbind", lapply(seq_along(rows), function(i) { tmp <- expand.grid("cols" = cols[[i]], "rows" = rows[[i]]) tmp$ref <- paste0(convert_to_excel_ref(cols = tmp$cols, LETTERS = LETTERS), tmp$rows) tmp$anchor_cell <- tmp$ref[1] return(tmp[, c("anchor_cell", "ref", "rows")]) })) refs <- refs[refs$anchor_cell != refs$ref, ] return(refs) } getFile <- function(xlsxFile) { ## Is this a file or URL (code taken from read.table()) on.exit(try(close(fl), silent = TRUE), add = TRUE) fl <- file(description = xlsxFile) ## If URL download if ("url" %in% class(fl)) { tmpFile <- tempfile(fileext = ".xlsx") download.file(url = xlsxFile, destfile = tmpFile, cacheOK = FALSE, mode = "wb", quiet = TRUE) xlsxFile <- tmpFile } return(xlsxFile) } #' @name get_worksheet_entries #' @title Get entries from workbook worksheet #' @description Get all entries from workbook worksheet without xml tags #' @param wb workbook #' @param sheet worksheet #' @author David Breuer #' @return vector of strings #' @export #' @examples #' ## Create new workbook #' wb <- createWorkbook() #' addWorksheet(wb, "Sheet") #' sheet <- 1 #' #' ## Write dummy data #' writeData(wb, sheet, c("A", "BB", "CCC"), startCol = 2, startRow = 3) #' writeData(wb, sheet, c(4, 5), startCol = 4, startRow = 3) #' #' ## Get text entries #' get_worksheet_entries(wb, sheet) #' get_worksheet_entries <- function(wb, sheet) { # get worksheet data dat <- wb$worksheets[[sheet]]$sheet_data # get vector of entries val <- dat$v # get boolean vector of text entries typ <- (dat$t == 1) & !is.na(dat$t) # get text entry strings str <- unlist(wb$sharedStrings[as.numeric(val[typ]) + 1]) # remove xml tags str <- gsub("<.*?>", "", str) # write strings to vector of entries val[typ] <- str # return vector of entries val } #' @name auto_heights #' @title Compute optimal row heights #' @description Compute optimal row heights for cell with fixed with and #' enabled automatic row heights parameter #' @param wb workbook #' @param sheet worksheet #' @param selected selected rows #' @param fontsize font size, optional (get base font size by default) #' @param factor factor to manually adjust font width, e.g., for bold fonts, #' optional #' @param base_height basic row height, optional #' @param extra_height additional row height per new line of text, optional #' @author David Breuer #' @return list of indices of columns with fixed widths and optimal row heights #' @export #' @examples #' ## Create new workbook #' wb <- createWorkbook() #' addWorksheet(wb, "Sheet") #' sheet <- 1 #' #' ## Write dummy data #' long_string <- "ABC ABC ABC ABC ABC ABC ABC ABC ABC ABC ABC" #' writeData(wb, sheet, c("A", long_string, "CCC"), startCol = 2, startRow = 3) #' writeData(wb, sheet, c(4, 5), startCol = 4, startRow = 3) #' #' ## Set column widths and get optimal row heights #' setColWidths(wb, sheet, c(1,2,3,4), c(10,20,10,20)) #' auto_heights(wb, sheet, 1:5) #' auto_heights <- function(wb, sheet, selected, fontsize = NULL, factor = 1.0, base_height = 15, extra_height = 12) { # get base font size if (is.null(fontsize)) { fontsize <- as.integer(openxlsx::getBaseFont(wb)$size$val) } # set factor to adjust font width (empiricially found scale factor 4 here) factor <- 4 * factor / fontsize # get worksheet data dat <- wb$worksheets[[sheet]]$sheet_data # get columns widths colWidths <- wb$colWidths[[sheet]] # select fixed (non-auto) and visible (non-hidden) columns only specified <- (colWidths != "auto") & (attr(colWidths, "hidden") == "0") # return default row heights if no column widths are fixed if (length(specified) == 0) { # message("No column widths specified, returning default row heights.") cols <- integer(0) heights <- rep(base_height, length(selected)) return(list(cols, heights)) } # get fixed column indices cols <- as.integer(names(specified)[specified]) # get fixed column widths widths <- as.numeric(colWidths[specified]) # get all worksheet entries val <- get_worksheet_entries(wb, sheet) # compute optimal height per selected row heights <- sapply(selected, function(row) { # select entries in given row and columns of fixed widths index <- (dat$rows == row) & (dat$cols %in% cols) # remove line break characters chr <- gsub("\\r|\\n", "", val[index]) # measure width of entry (in pixels) wdt <- graphics::strwidth(chr, unit = "in") * 20 / 1.43 # 20 px = 1.43 in # compute optimal height if (length(wdt) == 0) { base_height } else { base_height + extra_height * as.integer(max(wdt / widths * factor)) } }) # return list of indices of columns with fixed widths and optimal row heights list(cols, heights) } # Rotate the 15-bit integer by n bits to the hashPassword <- function(password) { # password limited to 15 characters chars <- head(strsplit(password, "")[[1]], 15) # See OpenOffice's documentation of the Excel format: http://www.openoffice.org/sc/excelfileformat.pdf # Start from the last character and for each character # - XOR hash with the ASCII character code # - rotate hash (16 bits) one bit to the left # Finally, XOR hash with 0xCE4B and XOR with password length # Output as hex (uppercase) rotate16bit <- function(hash, n = 1) { bitwOr(bitwAnd(bitwShiftR(hash, 15 - n), 0x01), bitwAnd(bitwShiftL(hash, n), 0x7fff)) } hash <- Reduce(function(char, h) { h <- bitwXor(h, as.integer(charToRaw(char))) rotate16bit(h, 1) }, chars, 0, right = TRUE) hash <- bitwXor(bitwXor(hash, length(chars)), 0xCE4B) format(as.hexmode(hash), upper.case = TRUE) } readUTF8 <- function(x) { readLines(x, warn = FALSE, encoding = "UTF-8") } openxlsx/R/writeData.R0000644000176200001440000004301614656134061014414 0ustar liggesusers#' @name writeData #' @title Write an object to a worksheet #' @author Alexander Walker #' @import stringi #' @description Write an object to worksheet with optional styling. #' @param wb A Workbook object containing a worksheet. #' @param sheet The worksheet to write to. Can be the worksheet index or name. #' @param x Object to be written. For classes supported look at the examples. #' @param startCol A vector specifying the starting column to write to. #' @param startRow A vector specifying the starting row to write to. #' @param array A bool if the function written is of type array #' @param xy An alternative to specifying `startCol` and #' `startRow` individually. A vector of the form #' `c(startCol, startRow)`. #' @param colNames If `TRUE`, column names of x are written. #' @param rowNames If `TRUE`, data.frame row names of x are written. #' @param row.names,col.names Deprecated, please use `rowNames`, `colNames` instead #' @param headerStyle Custom style to apply to column names. #' @param borders Either "`none`" (default), "`surrounding`", #' "`columns`", "`rows`" or *respective abbreviations*. If #' "`surrounding`", a border is drawn around the data. If "`rows`", #' a surrounding border is drawn with a border around each row. If #' "`columns`", a surrounding border is drawn with a border between #' each column. If "`all`" all cell borders are drawn. #' @param borderColour Colour of cell border. A valid colour (belonging to `colours()` or a hex colour code, eg see [here](https://www.w3schools.com/colors/colors_picker.asp)). #' @param borderStyle Border line style #' \describe{ #' \item{**none**}{ no border} #' \item{**thin**}{ thin border} #' \item{**medium**}{ medium border} #' \item{**dashed**}{ dashed border} #' \item{**dotted**}{ dotted border} #' \item{**thick**}{ thick border} #' \item{**double**}{ double line border} #' \item{**hair**}{ hairline border} #' \item{**mediumDashed**}{ medium weight dashed border} #' \item{**dashDot**}{ dash-dot border} #' \item{**mediumDashDot**}{ medium weight dash-dot border} #' \item{**dashDotDot**}{ dash-dot-dot border} #' \item{**mediumDashDotDot**}{ medium weight dash-dot-dot border} #' \item{**slantDashDot**}{ slanted dash-dot border} #' } #' @param withFilter If `TRUE` or `NA`, add filters to the column name row. NOTE can only have one filter per worksheet. #' @param keepNA If `TRUE`, NA values are converted to #N/A (or `na.string`, if not NULL) in Excel, else NA cells will be empty. #' @param na.string If not NULL, and if `keepNA` is `TRUE`, NA values are converted to this string in Excel. #' @param name If not NULL, a named region is defined. #' @param sep Only applies to list columns. The separator used to collapse list columns to a character vector e.g. sapply(x$list_column, paste, collapse = sep). #' @seealso [writeDataTable()] #' @export writeData #' @details Formulae written using writeFormula to a Workbook object will not get picked up by read.xlsx(). #' This is because only the formula is written and left to Excel to evaluate the formula when the file is opened in Excel. #' @rdname writeData #' @return invisible(0) #' @examples #' #' ## See formatting vignette for further examples. #' #' ## Options for default styling (These are the defaults) #' options("openxlsx.borderColour" = "black") #' options("openxlsx.borderStyle" = "thin") #' options("openxlsx.dateFormat" = "mm/dd/yyyy") #' options("openxlsx.datetimeFormat" = "yyyy-mm-dd hh:mm:ss") #' options("openxlsx.numFmt" = NULL) #' #' ## Change the default border colour to #4F81BD #' options("openxlsx.borderColour" = "#4F81BD") #' #' #' ##################################################################################### #' ## Create Workbook object and add worksheets #' wb <- createWorkbook() #' #' ## Add worksheets #' addWorksheet(wb, "Cars") #' addWorksheet(wb, "Formula") #' #' #' x <- mtcars[1:6, ] #' writeData(wb, "Cars", x, startCol = 2, startRow = 3, rowNames = TRUE) #' #' ##################################################################################### #' ## Bordering #' #' writeData(wb, "Cars", x, #' rowNames = TRUE, startCol = "O", startRow = 3, #' borders = "surrounding", borderColour = "black" #' ) ## black border #' #' writeData(wb, "Cars", x, #' rowNames = TRUE, #' startCol = 2, startRow = 12, borders = "columns" #' ) #' #' writeData(wb, "Cars", x, #' rowNames = TRUE, #' startCol = "O", startRow = 12, borders = "rows" #' ) #' #' #' ##################################################################################### #' ## Header Styles #' #' hs1 <- createStyle( #' fgFill = "#DCE6F1", halign = "CENTER", textDecoration = "italic", #' border = "Bottom" #' ) #' #' writeData(wb, "Cars", x, #' colNames = TRUE, rowNames = TRUE, startCol = "B", #' startRow = 23, borders = "rows", headerStyle = hs1, borderStyle = "dashed" #' ) #' #' #' hs2 <- createStyle( #' fontColour = "#ffffff", fgFill = "#4F80BD", #' halign = "center", valign = "center", textDecoration = "bold", #' border = "TopBottomLeftRight" #' ) #' #' writeData(wb, "Cars", x, #' colNames = TRUE, rowNames = TRUE, #' startCol = "O", startRow = 23, borders = "columns", headerStyle = hs2 #' ) #' #' #' #' #' ##################################################################################### #' ## Hyperlinks #' ## - vectors/columns with class 'hyperlink' are written as hyperlinks' #' #' v <- rep("https://CRAN.R-project.org/", 4) #' names(v) <- paste0("Hyperlink", 1:4) # Optional: names will be used as display text #' class(v) <- "hyperlink" #' writeData(wb, "Cars", x = v, xy = c("B", 32)) #' #' #' ##################################################################################### #' ## Formulas #' ## - vectors/columns with class 'formula' are written as formulas' #' #' df <- data.frame( #' x = 1:3, y = 1:3, #' z = paste0(paste0("A", 1:3 + 1L), paste0("B", 1:3 + 1L), sep = " + "), #' stringsAsFactors = FALSE #' ) #' #' class(df$z) <- c(class(df$z), "formula") #' #' writeData(wb, sheet = "Formula", x = df) #' #' #' ##################################################################################### #' ## Save workbook #' ## Open in excel without saving file: openXL(wb) #' \dontrun{ #' saveWorkbook(wb, "writeDataExample.xlsx", overwrite = TRUE) #' } writeData <- function( wb, sheet, x, startCol = 1, startRow = 1, array = FALSE, xy = NULL, colNames = TRUE, rowNames = FALSE, headerStyle = openxlsx_getOp("headerStyle"), borders = openxlsx_getOp("borders", "none"), borderColour = openxlsx_getOp("borderColour", "black"), borderStyle = openxlsx_getOp("borderStyle", "thin"), withFilter = openxlsx_getOp("withFilter", FALSE), keepNA = openxlsx_getOp("keepNA", FALSE), na.string = openxlsx_getOp("na.string"), name = NULL, sep = ", ", col.names, row.names ) { x <- force(x) op <- get_set_options() on.exit(options(op), add = TRUE) if (!missing(row.names)) { warning("Please use 'rowNames' instead of 'row.names'", call. = FALSE) rowNames <- row.names } if (!missing(col.names)) { warning("Please use 'colNames' instead of 'col.names'", call. = FALSE) colNames <- col.names } # Set NULLs borders <- borders %||% "none" borderColour <- borderColour %||% "black" borderStyle <- borderStyle %||% "thin" withFilter <- withFilter %||% FALSE keepNA <- keepNA %||% FALSE if (is.null(x)) { return(invisible(0)) } ## All input conversions/validations if (!is.null(xy)) { if (length(xy) != 2) { stop("xy parameter must have length 2") } startCol <- xy[[1]] startRow <- xy[[2]] } ## convert startRow and startCol if (!is.numeric(startCol)) { startCol <- convertFromExcelRef(startCol) } startRow <- as.integer(startRow) assert_class(wb, "Workbook") assert_true_false(colNames) assert_true_false(rowNames) assert_character1(sep) assert_class(headerStyle, "Style", or_null = TRUE) ## borderColours validation borderColour <- validateColour(borderColour, "Invalid border colour") borderStyle <- validateBorderStyle(borderStyle)[[1]] ## special case - vector of hyperlinks hlinkNames <- NULL if (inherits(x, "hyperlink")) { hlinkNames <- names(x) colNames <- FALSE } ## special case - formula if (inherits(x, "formula")) { x <- data.frame("X" = x, stringsAsFactors = FALSE) class(x[[1]]) <- ifelse(array, "array_formula", "formula") colNames <- FALSE } ## named region if (!is.null(name)) { ## validate name ex_names <- regmatches(wb$workbook$definedNames, regexpr('(?<=name=")[^"]+', wb$workbook$definedNames, perl = TRUE)) ex_names <- replaceXMLEntities(ex_names) if (name %in% ex_names) { stop(sprintf("Named region with name '%s' already exists!", name)) } else if (grepl("^[A-Z]{1,3}[0-9]+$", name)) { stop("name cannot look like a cell reference.") } } if (is.vector(x) || is.factor(x) || inherits(x, "Date")) { colNames <- FALSE } ## this will go to coerce.default and rowNames will be ignored ## Coerce to data.frame x <- openxlsxCoerce(x = x, rowNames = rowNames) nCol <- ncol(x) nRow <- nrow(x) ## If no rows and not writing column names return as nothing to write if (nRow == 0 && !colNames) { return(invisible(0)) } ## If no columns and not writing row names return as nothing to write if (nCol == 0 && !rowNames) { return(invisible(0)) } colClasses <- lapply(x, function(x) tolower(class(x))) colClasss2 <- colClasses colClasss2[vapply( colClasses, function(i) inherits(i, "formula") & inherits(i, "hyperlink"), NA )] <- "formula" if (is.numeric(sheet)) { sheetX <- wb$validateSheet(sheet) } else { sheetX <- wb$validateSheet(replaceXMLEntities(sheet)) sheet <- replaceXMLEntities(sheet) } if (wb$isChartSheet[[sheetX]]) { stop("Cannot write to chart sheet.") } ## Check not overwriting existing table headers wb$check_overwrite_tables( sheet = sheet, new_rows = c(startRow, startRow + nRow - 1L + colNames), new_cols = c(startCol, startCol + nCol - 1L), check_table_header_only = TRUE, error_msg = "Cannot overwrite table headers. Avoid writing over the header row or see getTables() & removeTables() to remove the table object." ) ## write autoFilter, can only have a single filter per worksheet if (withFilter) { coords <- data.frame( x = c(startRow, startRow + nRow + colNames - 1L), y = c(startCol, startCol + nCol - 1L) ) ref <- stri_join(getCellRefs(coords), collapse = ":") wb$worksheets[[sheetX]]$autoFilter <- sprintf('', ref) l <- convert_to_excel_ref(cols = unlist(coords[, 2]), LETTERS = LETTERS) dfn <- sprintf("'%s'!%s", names(wb)[sheetX], stri_join("$", l, "$", coords[, 1], collapse = ":")) dn <- sprintf('', sheetX - 1L, dfn) if (length(wb$workbook$definedNames) > 0) { ind <- grepl('name="_xlnm._FilterDatabase"', wb$workbook$definedNames) if (length(ind) > 0) { wb$workbook$definedNames[ind] <- dn } } else { wb$workbook$definedNames <- dn } } ## write data.frame wb$writeData( df = x, colNames = colNames, sheet = sheet, startCol = startCol, startRow = startRow, colClasses = colClasss2, hlinkNames = hlinkNames, keepNA = keepNA, na.string = na.string, list_sep = sep ) ## header style if (inherits(headerStyle, "Style") && colNames) { addStyle( wb = wb, sheet = sheet, style = headerStyle, rows = startRow, cols = 0:(nCol - 1) + startCol, gridExpand = TRUE, stack = TRUE ) } ## If we don't have any rows to write return if (nRow == 0) { return(invisible(0)) } ## named region if (!is.null(name)) { ref1 <- stri_join("$", convert_to_excel_ref(cols = startCol, LETTERS = LETTERS), "$", startRow) ref2 <- stri_join("$", convert_to_excel_ref(cols = startCol + nCol - 1L, LETTERS = LETTERS), "$", startRow + nRow - 1L + colNames) wb$createNamedRegion(ref1 = ref1, ref2 = ref2, name = name, sheet = wb$sheet_names[wb$validateSheet(sheet)]) } ## hyperlink style, if no borders borders <- match.arg(borders, c("none", "surrounding", "rows", "columns", "all")) if (borders == "none") { invisible( classStyles( wb, sheet = sheet, startRow = startRow, startCol = startCol, colNames = colNames, nRow = nrow(x), colClasses = colClasses, stack = TRUE ) ) } else if (borders == "surrounding") { wb$surroundingBorders( colClasses, sheet = sheet, startRow = startRow + colNames, startCol = startCol, nRow = nRow, nCol = nCol, borderColour = list("rgb" = borderColour), borderStyle = borderStyle ) } else if (borders == "rows") { wb$rowBorders( colClasses, sheet = sheet, startRow = startRow + colNames, startCol = startCol, nRow = nRow, nCol = nCol, borderColour = list("rgb" = borderColour), borderStyle = borderStyle ) } else if (borders == "columns") { wb$columnBorders( colClasses, sheet = sheet, startRow = startRow + colNames, startCol = startCol, nRow = nRow, nCol = nCol, borderColour = list("rgb" = borderColour), borderStyle = borderStyle ) } else if (borders == "all") { wb$allBorders( colClasses, sheet = sheet, startRow = startRow + colNames, startCol = startCol, nRow = nRow, nCol = nCol, borderColour = list("rgb" = borderColour), borderStyle = borderStyle ) } invisible(0) } #' @name writeFormula #' @title Write a character vector as an Excel Formula #' @author Alexander Walker #' @description Write a a character vector containing Excel formula to a worksheet. #' @details Currently only the english version of functions are supported. Please don't use the local translation. #' The examples below show a small list of possible formulas: #' \itemize{ #' \item{SUM(B2:B4)} #' \item{AVERAGE(B2:B4)} #' \item{MIN(B2:B4)} #' \item{MAX(B2:B4)} #' \item{...} #' #' } #' @param wb A Workbook object containing a worksheet. #' @param sheet The worksheet to write to. Can be the worksheet index or name. #' @param x A character vector. #' @param startCol A vector specifying the starting column to write to. #' @param startRow A vector specifying the starting row to write to. #' @param array A bool if the function written is of type array #' @param xy An alternative to specifying `startCol` and #' `startRow` individually. A vector of the form #' `c(startCol, startRow)`. #' @seealso [writeData()] [makeHyperlinkString()] #' @export writeFormula #' @rdname writeFormula #' @examples #' #' ## There are 3 ways to write a formula #' #' wb <- createWorkbook() #' addWorksheet(wb, "Sheet 1") #' writeData(wb, "Sheet 1", x = iris) #' #' ## SEE int2col() to convert int to Excel column label #' #' ## 1. - As a character vector using writeFormula #' #' v <- c("SUM(A2:A151)", "AVERAGE(B2:B151)") ## skip header row #' writeFormula(wb, sheet = 1, x = v, startCol = 10, startRow = 2) #' writeFormula(wb, 1, x = "A2 + B2", startCol = 10, startRow = 10) #' #' #' ## 2. - As a data.frame column with class "formula" using writeData #' #' df <- data.frame( #' x = 1:3, #' y = 1:3, #' z = paste(paste0("A", 1:3 + 1L), paste0("B", 1:3 + 1L), sep = " + "), #' z2 = sprintf("ADDRESS(1,%s)", 1:3), #' stringsAsFactors = FALSE #' ) #' #' class(df$z) <- c(class(df$z), "formula") #' class(df$z2) <- c(class(df$z2), "formula") #' #' addWorksheet(wb, "Sheet 2") #' writeData(wb, sheet = 2, x = df) #' #' #' #' ## 3. - As a vector with class "formula" using writeData #' #' v2 <- c("SUM(A2:A4)", "AVERAGE(B2:B4)", "MEDIAN(C2:C4)") #' class(v2) <- c(class(v2), "formula") #' #' writeData(wb, sheet = 2, x = v2, startCol = 10, startRow = 2) #' #' ## Save workbook #' \dontrun{ #' saveWorkbook(wb, "writeFormulaExample.xlsx", overwrite = TRUE) #' } #' #' #' ## 4. - Writing internal hyperlinks #' #' wb <- createWorkbook() #' addWorksheet(wb, "Sheet1") #' addWorksheet(wb, "Sheet2") #' writeFormula(wb, "Sheet1", x = '=HYPERLINK("#Sheet2!B3", "Text to Display - Link to Sheet2")') #' #' ## Save workbook #' \dontrun{ #' saveWorkbook(wb, "writeFormulaHyperlinkExample.xlsx", overwrite = TRUE) #' } #' writeFormula <- function( wb, sheet, x, startCol = 1, startRow = 1, array = FALSE, xy = NULL ) { if (!is.character(x)) { stop("x must be a character vector.") } dfx <- data.frame("X" = x, stringsAsFactors = FALSE) class(dfx$X) <- c("character", ifelse(array, "array_formula", "formula")) if (any(grepl("^(=|)HYPERLINK\\(", x, ignore.case = TRUE))) { class(dfx$X) <- c("character", "formula", "hyperlink") } writeData( wb = wb, sheet = sheet, x = dfx, startCol = startCol, startRow = startRow, array = array, xy = xy, colNames = FALSE, rowNames = FALSE ) invisible(0) } #' `as.character.formula()` #' #' This function exists to prevent conflicts with `as.character.formula` methods #' from other packages #' #' @inheritParams base::as.character #' @param ... Not implemented #' @returns `base::as.character.default(x)` #' @export as.character.formula <- function(x, ...) { base::as.character.default(x) } openxlsx/R/readWorkbook.R0000644000176200001440000004540114656134061015121 0ustar liggesusers #' @name read.xlsx #' @title Read from an Excel file or Workbook object #' @description Read data from an Excel file or Workbook object into a data.frame #' @param xlsxFile An xlsx file, Workbook object or URL to xlsx file. #' @param sheet The name or index of the sheet to read data from. #' @param startRow first row to begin looking for data. Empty rows at the top of a file are always skipped, #' regardless of the value of startRow. #' @param colNames If `TRUE`, the first row of data will be used as column names. #' @param skipEmptyRows If `TRUE`, empty rows are skipped else empty rows after the first row containing data #' will return a row of NAs. #' @param rowNames If `TRUE`, first column of data will be used as row names. #' @param detectDates If `TRUE`, attempt to recognise dates and perform conversion. #' @param cols A numeric vector specifying which columns in the Excel file to read. #' If NULL, all columns are read. #' @param rows A numeric vector specifying which rows in the Excel file to read. #' If NULL, all rows are read. #' @param check.names logical. If TRUE then the names of the variables in the data frame #' are checked to ensure that they are syntactically valid variable names #' @param sep.names One character which substitutes blanks in column names. By default, "." #' @param namedRegion A named region in the Workbook. If not NULL startRow, rows and cols parameters are ignored. #' @param na.strings A character vector of strings which are to be interpreted as NA. Blank cells will be returned as NA. #' @param fillMergedCells If TRUE, the value in a merged cell is given to all cells within the merge. #' @param skipEmptyCols If `TRUE`, empty columns are skipped. #' @seealso [getNamedRegions()] #' @details Formulae written using writeFormula to a Workbook object will not get picked up by read.xlsx(). #' This is because only the formula is written and left to be evaluated when the file is opened in Excel. #' Opening, saving and closing the file with Excel will resolve this. #' @author Alexander Walker #' @return data.frame #' @export #' @examples #' #' xlsxFile <- system.file("extdata", "readTest.xlsx", package = "openxlsx") #' df1 <- read.xlsx(xlsxFile = xlsxFile, sheet = 1, skipEmptyRows = FALSE) #' sapply(df1, class) #' #' df2 <- read.xlsx(xlsxFile = xlsxFile, sheet = 3, skipEmptyRows = TRUE) #' df2$Date <- convertToDate(df2$Date) #' sapply(df2, class) #' head(df2) #' #' df2 <- read.xlsx( #' xlsxFile = xlsxFile, sheet = 3, skipEmptyRows = TRUE, #' detectDates = TRUE #' ) #' sapply(df2, class) #' head(df2) #' #' wb <- loadWorkbook(system.file("extdata", "readTest.xlsx", package = "openxlsx")) #' df3 <- read.xlsx(wb, sheet = 2, skipEmptyRows = FALSE, colNames = TRUE) #' df4 <- read.xlsx(xlsxFile, sheet = 2, skipEmptyRows = FALSE, colNames = TRUE) #' all.equal(df3, df4) #' #' wb <- loadWorkbook(system.file("extdata", "readTest.xlsx", package = "openxlsx")) #' df3 <- read.xlsx(wb, #' sheet = 2, skipEmptyRows = FALSE, #' cols = c(1, 4), rows = c(1, 3, 4) #' ) #' #' ## URL #' ## #' \dontrun{ #' xlsxFile <- "https://github.com/awalker89/openxlsx/raw/master/inst/readTest.xlsx" #' head(read.xlsx(xlsxFile)) #' } #' #' @export read.xlsx <- function( xlsxFile, sheet, startRow = 1, colNames = TRUE, rowNames = FALSE, detectDates = FALSE, skipEmptyRows = TRUE, skipEmptyCols = TRUE, rows = NULL, cols = NULL, check.names = FALSE, sep.names = ".", namedRegion = NULL, na.strings = "NA", fillMergedCells = FALSE ) { UseMethod("read.xlsx", xlsxFile) } #' @export read.xlsx.default <- function( xlsxFile, sheet, startRow = 1, colNames = TRUE, rowNames = FALSE, detectDates = FALSE, skipEmptyRows = TRUE, skipEmptyCols = TRUE, rows = NULL, cols = NULL, check.names = FALSE, sep.names = ".", namedRegion = NULL, na.strings = "NA", fillMergedCells = FALSE ) { ## Validate inputs and get files xlsxFile <- getFile(xlsxFile) if (!file.exists(xlsxFile)) { stop("File does not exist.") } sheetselected <- TRUE if (missing(sheet)) { sheet <- 1 sheetselected <- FALSE } if (!grepl("\\.xlsx|\\.xlsm$", xlsxFile)) { stop("openxlsx can only read .xlsx or .xlsm files", call. = FALSE) } assert_true_false1(colNames) assert_true_false1(rowNames) assert_true_false1(detectDates) assert_true_false1(skipEmptyRows) assert_true_false1(check.names) assert_character1(sep.names, scalar = TRUE) assert_length(sheet, 1L) assert_length(startRow, 1L) if (is.null(rows)) { rows <- NA } else if (length(rows) > 1L) { rows <- as.integer(sort(rows)) } xmlDir <- paste0(tempfile(), "_excelXMLRead") xmlFiles <- unzip(xlsxFile, exdir = xmlDir) on.exit(unlink(xmlDir, recursive = TRUE), add = TRUE) sharedStringsFile <- grep("sharedStrings.xml$", xmlFiles, perl = TRUE, value = TRUE) workbook <- grep("workbook.xml$", xmlFiles, perl = TRUE, value = TRUE) workbookRelsXML <- grep("workbook.xml.rels$", xmlFiles, perl = TRUE, value = TRUE) ## get workbook names workbookRelsXML <- paste(readUTF8(workbookRelsXML), collapse = "") workbookRelsXML <- getChildlessNode(xml = workbookRelsXML, tag = "Relationship") workbook <- unlist(readUTF8(workbook)) workbook <- removeHeadTag(workbook) sheets <- unlist(regmatches( workbook, gregexpr("(?<=).*(?=)", workbook, perl = TRUE) )) sheets <- unlist(regmatches( sheets, gregexpr("]*>", sheets, perl = TRUE) )) ## Some veryHidden sheets do not have a sheet content and their rId is empty. ## Such sheets need to be filtered out because otherwise their sheet names ## occur in the list of all sheet names, leading to a wrong association ## of sheet names with sheet indeces. sheets <- grep('r:id="[[:blank:]]*"', sheets, invert = TRUE, value = TRUE) ## make sure sheetId is 1 based sheetrId <- unlist(getRId(sheets)) sheetNames <- unlist(regmatches( sheets, gregexpr('(?<=name=")[^"]+', sheets, perl = TRUE) )) sheetNames <- replaceXMLEntities(sheetNames) nSheets <- length(sheetrId) if (nSheets == 0) { stop("Workbook has no worksheets") } ## Named region logic reading_named_region <- FALSE if (!is.null(namedRegion)) { dn <- getNodes(xml = workbook, tagIn = "") dn <- unlist(regmatches(dn, gregexpr("' and '!' dn_sheetNames <- gsub(".*[>]([^.]+)[!].*", "\\1", dn) # Check if there are any whitespaces in dn_sheetNames. # Hint: sheet names must not contain: \ / ? * [ ] wsp <- grepl(pattern = "'", dn_sheetNames) if (any(wsp)) { # sheetNames in between ''' and '''. If there is a whitespace in a sheet # name, the name will be "'sheet 1'" instead of "sheet 1. dn_sheetNames[wsp] <- gsub("^'+|'+$", "\\1", dn_sheetNames[wsp]) } # namedRegion in between 'name="' and '"' dn_namedRegion <- gsub(".*name=\"([[:graph:]_]+)\".*", "\\1", dn) if (length(dn) == 0) { warning("Workbook has no named region.") return(invisible(NULL)) } if (all(dn_namedRegion != namedRegion)) { warning("Workbook has no such named region.") return(invisible(NULL)) } idx <- match(dn_namedRegion, namedRegion) # make sure that the length of both vectors is identical dn <- dn[!is.na(idx)] dn_namedRegion <- dn_namedRegion[!is.na(idx)] dn_sheetNames <- dn_sheetNames[!is.na(idx)] # a sheet was selected if (sheetselected) { idx <- match(dn_sheetNames, sheetNames) if (is.numeric(sheet)) { idx <- which(idx == sheet) } else { idx <- which(dn_sheetNames == sheet) } dn <- dn[idx] if (length(dn) > 1) { warning("unexpectedly found more than one dn.") print(dn) return(invisible(NULL)) } if ( identical(dn, character(0)) ) { warning("Workbook has no such named region on this sheet.") return(invisible(NULL)) } } # Do not print warning if a specific sheet is requested if ((length(dn) > 1) && (!sheetselected)) { msg <- c(sprintf("Region '%s' found on multiple sheets: \n", namedRegion), paste(dn_sheetNames, collapse = "\n"), "\nUsing the first appearance.") message(msg) dn <- dn[1] dn_namedRegion <- dn_namedRegion[1] dn_sheetNames <- dn_sheetNames[1] } # region is redefined later region <- regmatches(dn, regexpr("(?<=>)[^\\<]+", dn, perl = TRUE)) sheet <- sheetNames[vapply(sheetNames, grepl, NA, dn)] if (length(sheet) > 1) { sheet <- sheet[which.max(nchar(sheet))] } region <- gsub("[^A-Z0-9:]", "", gsub(sheet, "", region, fixed = TRUE)) if (grepl(":", region, fixed = TRUE)) { cols <- unlist(lapply( strsplit(region, split = ":", fixed = TRUE), convertFromExcelRef )) rows <- unlist(lapply(strsplit(region, split = ":", fixed = TRUE), function(x) { as.integer(gsub("[A-Z]", "", x, perl = TRUE)) })) cols <- seq.int(min(cols), max(cols)) rows <- seq.int(min(rows), max(rows)) } else { cols <- convertFromExcelRef(region) rows <- as.integer(gsub("[A-Z]", "", region, perl = TRUE)) } startRow <- 1 reading_named_region <- TRUE } ## get the file_name for each sheetrId file_name <- sapply(sheetrId, function(rId) { txt <- grep(sprintf('Id="%s"', rId), workbookRelsXML, fixed = TRUE, value = TRUE) regmatches(txt, regexpr('(?<=Target=").+xml(?=")', txt, perl = TRUE)) }) ## get the correct sheets if (is.character(sheet)) { sheetNames <- replaceXMLEntities(sheetNames) sheetInd <- which(sheetNames == sheet) if (length(sheetInd) == 0) { stop(sprintf('Cannot find sheet named "%s"', sheet)) } sheet <- file_name[sheetInd] } else { if (nSheets < sheet) { stop(sprintf("sheet %s does not exist.", sheet)) } sheet <- file_name[sheet] } if (length(sheet) == 0) { stop("Length of sheet is 0", call. = FALSE) } ## get file worksheet <- xmlFiles[grepl(tolower(sheet), tolower(xmlFiles), fixed = TRUE)] if (length(worksheet) == 0) { stop("Length of worksheet is 0", call. = FALSE) } ## read in sharedStrings if (length(sharedStringsFile) > 0) { sharedStrings <- getSharedStringsFromFile(sharedStringsFile = sharedStringsFile, isFile = TRUE) if (!is.null(na.strings)) { sharedStrings[is.na(sharedStrings) | sharedStrings %in% na.strings] <- "openxlsx_na_vlu" } } else { sharedStrings <- "" } if (is.character(startRow)) { startRowStr <- startRow startRow <- 1 } else { startRowStr <- NULL } ## single function get all r, s (if detect dates is TRUE), t, v cell_info <- getCellInfo( xmlFile = worksheet, sharedStrings = sharedStrings, skipEmptyRows = skipEmptyRows, startRow = startRow, rows = rows, getDates = detectDates ) if (fillMergedCells && length(cell_info$cellMerge) > 0) { # stop("Not implemented") merge_mapping <- mergeCell2mapping(cell_info$cellMerge) ## remove any elements from r, string_refs, b, s that existing in merge_mapping ## insert all missing refs into r to_remove_inds <- cell_info$r %in% merge_mapping$ref to_remove_elems <- cell_info$r[to_remove_inds] if (any(to_remove_inds)) { cell_info$r <- cell_info$r[!to_remove_inds] cell_info$s <- cell_info$s[!to_remove_inds] cell_info$v <- cell_info$v[!to_remove_inds] cell_info$string_refs <- cell_info$string_refs[!cell_info$string_refs %in% to_remove_elems] } ## Now insert inds <- match(merge_mapping$anchor_cell, cell_info$r) ## String refs (must sort) new_string_refs <- merge_mapping$ref[merge_mapping$anchor_cell %in% cell_info$string_refs] cell_info$string_refs <- c(cell_info$string_refs, new_string_refs) cell_info$string_refs <- cell_info$string_refs[order( as.integer(gsub("[A-Z]", "", cell_info$string_refs, perl = TRUE)), nchar(cell_info$string_refs), cell_info$string_refs )] ## r cell_info$r <- c(cell_info$r, merge_mapping$ref) cell_info$v <- c(cell_info$v, cell_info$v[inds]) ord <- order( as.integer(gsub("[A-Z]", "", cell_info$r, perl = TRUE)), nchar(cell_info$r), cell_info$r ) cell_info$r <- cell_info$r[ord] cell_info$v <- cell_info$v[ord] if (length(cell_info$s) > 0) { cell_info$s <- c(cell_info$s, cell_info$s[inds])[ord] } cell_info$nRows <- calc_number_rows(x = cell_info$r, skipEmptyRows = skipEmptyRows) } cell_rows <- as.integer(gsub("[A-Z]", "", cell_info$r, perl = TRUE)) cell_cols <- convert_from_excel_ref(x = cell_info$r) ## subsetting ---- ## Remove cells where cell is NA (na.strings or empty sharedString '') if (length(cell_info$v) == 0) { warning("No data found on worksheet.\n", call. = FALSE) return(NULL) } keep <- !is.na(cell_info$v) if (!is.null(cols)) { keep <- keep & (cell_cols %in% cols) } ## End of subsetting ## Subset cell_rows <- cell_rows[keep] cell_cols <- cell_cols[keep] v <- cell_info$v[keep] s <- cell_info$s[keep] string_refs <- match(cell_info$string_refs, cell_info$r[keep]) string_refs <- string_refs[!is.na(string_refs)] if (skipEmptyRows) { nRows <- length(unique(cell_rows)) } else if (reading_named_region) { ## keep region the correct size nRows <- max(rows) - min(rows) + 1 } else { nRows <- max(cell_rows) - min(cell_rows) + 1 } if (nRows == 0 || length(cell_rows) == 0) { warning("No data found on worksheet.", call. = FALSE) return(NULL) } Encoding(v) <- "UTF-8" ## only works if length(v) > 0 if (!is.null(startRowStr)) { stop("startRowStr not implemented") ind <- grep(startRowStr, v, ignore.case = TRUE) if (length(ind) > 0) { startRow <- as.numeric(gsub("[A-Z]", "", r[ind[[1]]])) toKeep <- grep(sprintf("[A-Z]%s$", startRow), r)[[1]] if (toKeep > 1) { toRemove <- 1:(toKeep - 1) string_refs <- string_refs[!string_refs %in% r[toRemove]] v <- v[-toRemove] r <- r[-toRemove] nRows <- calc_number_rows(x = r, skipEmptyRows = skipEmptyRows) } } } ## Determine date cells (if required) origin <- 25569L if (detectDates) { ## get date origin if (grepl('date1904="1"|date1904="true"', workbook, ignore.case = TRUE)) { origin <- 24107L } stylesXML <- grep("styles.xml", xmlFiles, value = TRUE) styles <- readUTF8(stylesXML) styles <- removeHeadTag(styles) ## Number formats numFmts <- getChildlessNode(xml = styles, tag = "numFmt") dateIds <- NULL if (length(numFmts) > 0) { numFmtsIds <- sapply(numFmts, getAttr, tag = 'numFmtId="', USE.NAMES = FALSE) formatCodes <- sapply(numFmts, getAttr, tag = 'formatCode="', USE.NAMES = FALSE) formatCodes <- gsub(".*(?<=\\])|@", "", formatCodes, perl = TRUE) ## this regex defines what "looks" like a date dateIds <- numFmtsIds[!grepl("[^mdyhsapAMP[:punct:] ]", formatCodes) & nchar(formatCodes > 3)] } dateIds <- c(dateIds, 14) ## which styles are using these dateIds cellXfs <- getNodes(xml = styles, tagIn = "") }) Hyperlink$methods(to_target_xml = function(id) { if (is_external) { return(sprintf('', id, target)) } else { return(NULL) } }) xml_to_hyperlink <- function(xml) { # xml <- c('', # '', # '') if (length(xml) == 0) { return(xml) } targets <- names(xml) if (is.null(targets)) { targets <- rep(NA, length(xml)) } xml <- unname(xml) a <- unlist(lapply(xml, function(x) regmatches(x, gregexpr('[a-zA-Z]+=".*?"', x))), recursive = FALSE) names <- lapply(a, function(xml) regmatches(xml, regexpr('[a-zA-Z]+(?=\\=".*?")', xml, perl = TRUE))) vals <- lapply(a, function(xml) regmatches(xml, regexpr('(?<=").*?(?=")', xml, perl = TRUE))) vals <- lapply(vals, function(x) { Encoding(x) <- "UTF-8" x }) hyperlink_objects <- lapply(seq_along(xml), function(i) { tmp_vals <- vals[[i]] tmp_nms <- names[[i]] names(tmp_vals) <- tmp_nms ## ref ref <- tmp_vals[["ref"]] ## location if ("location" %in% tmp_nms) { location <- tmp_vals[["location"]] } else { location <- NULL } ## location if ("display" %in% tmp_nms) { display <- tmp_vals[["display"]] } else { display <- NULL } ## target/external if (is.na(targets[i])) { target <- NULL is_external <- FALSE } else { is_external <- TRUE target <- targets[i] } Hyperlink$new(ref = ref, target = target, location = location, display = display, is_external = is_external) }) return(hyperlink_objects) } openxlsx/R/WorkbookClass.R0000644000176200001440000040167114672624216015264 0ustar liggesusers #' @include class_definitions.R #' @import stringi Workbook$methods( initialize = function(creator = openxlsx_getOp("creator"), title = NULL, subject = NULL, category = NULL) { charts <<- list() isChartSheet <<- logical(0) colWidths <<- list() colOutlineLevels <<- list() attr(colOutlineLevels, "hidden") <<- NULL connections <<- NULL Content_Types <<- genBaseContent_Type() core <<- genBaseCore( creator = creator, title = title, subject = subject, category = category ) comments <<- list() threadComments <<- list() drawings <<- list() drawings_rels <<- list() embeddings <<- NULL externalLinks <<- NULL externalLinksRels <<- NULL headFoot <<- NULL media <<- list() persons <<- NULL pivotTables <<- NULL pivotTables.xml.rels <<- NULL pivotDefinitions <<- NULL pivotRecords <<- NULL pivotDefinitionsRels <<- NULL queryTables <<- NULL rowHeights <<- list() outlineLevels <<- list() attr(outlineLevels, "hidden") <<- NULL slicers <<- NULL slicerCaches <<- NULL sheet_names <<- character(0) sheetOrder <<- integer(0) sharedStrings <<- list() attr(sharedStrings, "uniqueCount") <<- 0 styles <<- genBaseStyleSheet() styleObjects <<- list() tables <<- NULL tables.xml.rels <<- NULL theme <<- NULL vbaProject <<- NULL vml <<- list() vml_rels <<- list() workbook <<- genBaseWorkbook() workbook.xml.rels <<- genBaseWorkbook.xml.rels() worksheets <<- list() worksheets_rels <<- list() ActiveSheet <<- integer(0) } ) Workbook$methods( addWorksheet = function( sheetName, showGridLines = openxlsx_getOp("showGridLines"), tabColour = openxlsx_getOp("tabColour"), zoom = 100, oddHeader = openxlsx_getOp("oddHeader"), oddFooter = openxlsx_getOp("oddFooter"), evenHeader = openxlsx_getOp("evenHeader"), evenFooter = openxlsx_getOp("evenFooter"), firstHeader = openxlsx_getOp("firstHeader"), firstFooter = openxlsx_getOp("firstFooter"), visible = TRUE, paperSize = openxlsx_getOp("paperSize", 9), orientation = openxlsx_getOp("orientation", "portrait"), hdpi = openxlsx_getOp("hdpi", 300), vdpi = openxlsx_getOp("vdpi", 300) ) { if (!missing(sheetName)) { if (grepl(pattern = ":", x = sheetName)) { stop("colon not allowed in sheet names in Excel") } } newSheetIndex <- length(worksheets) + 1L if (newSheetIndex > 1) { sheetId <- max(as.integer(regmatches( workbook$sheets, regexpr('(?<=sheetId=")[0-9]+', workbook$sheets, perl = TRUE) ))) + 1L } else { sheetId <- 1 ActiveSheet <<- 1L } ## fix visible value visible <- tolower(visible) if (visible == "true") { visible <- "visible" } else if (visible == "false") { visible <- "hidden" } else if (visible == "veryhidden") { visible <- "veryHidden" } ## Add sheet to workbook.xml workbook$sheets <<- c( workbook$sheets, sprintf( '', sheetName, sheetId, visible, newSheetIndex ) ) ## append to worksheets list worksheets <<- append( worksheets, WorkSheet$new( showGridLines = showGridLines, tabSelected = newSheetIndex == 1, tabColour = tabColour, zoom = zoom, oddHeader = oddHeader, oddFooter = oddFooter, evenHeader = evenHeader, evenFooter = evenFooter, firstHeader = firstHeader, firstFooter = firstFooter, paperSize = paperSize, orientation = orientation, hdpi = hdpi, vdpi = vdpi ) ) ## update content_tyes ## add a drawing.xml for the worksheet Content_Types <<- c( Content_Types, sprintf( '', newSheetIndex ), sprintf( '', newSheetIndex ) ) ## Update xl/rels workbook.xml.rels <<- c( workbook.xml.rels, sprintf( '', newSheetIndex ) ) ## create sheet.rels to simplify id assignment worksheets_rels[[newSheetIndex]] <<- genBaseSheetRels(newSheetIndex) drawings_rels[[newSheetIndex]] <<- list() drawings[[newSheetIndex]] <<- list() vml_rels[[newSheetIndex]] <<- list() vml[[newSheetIndex]] <<- list() isChartSheet[[newSheetIndex]] <<- FALSE comments[[newSheetIndex]] <<- list() threadComments[[newSheetIndex]] <<- list() rowHeights[[newSheetIndex]] <<- list() colWidths[[newSheetIndex]] <<- list() colOutlineLevels[[newSheetIndex]] <<- vector("character") outlineLevels[[newSheetIndex]] <<- vector("character") sheetOrder <<- c(sheetOrder, as.integer(newSheetIndex)) sheet_names <<- c(sheet_names, sheetName) invisible(newSheetIndex) } ) Workbook$methods( cloneWorksheet = function(sheetName, clonedSheet) { clonedSheet <- validateSheet(clonedSheet) if (!missing(sheetName)) { if (grepl(pattern = ":", x = sheetName)) { stop("colon not allowed in sheet names in Excel") } } newSheetIndex <- length(worksheets) + 1L if (newSheetIndex > 1) { sheetId <- max(as.integer(regmatches( workbook$sheets, regexpr('(?<=sheetId=")[0-9]+', workbook$sheets, perl = TRUE) ))) + 1L } else { sheetId <- 1 } ## copy visibility from cloned sheet! visible <- regmatches( workbook$sheets[[clonedSheet]], regexpr('(?<=state=")[^"]+', workbook$sheets[[clonedSheet]], perl = TRUE) ) ## Add sheet to workbook.xml workbook$sheets <<- c( workbook$sheets, sprintf( '', sheetName, sheetId, visible, newSheetIndex ) ) ## append to worksheets list worksheets <<- append(worksheets, worksheets[[clonedSheet]]$copy()) ## update content_tyes ## add a drawing.xml for the worksheet Content_Types <<- c( Content_Types, sprintf( '', newSheetIndex ), sprintf( '', newSheetIndex ) ) ## Update xl/rels workbook.xml.rels <<- c( workbook.xml.rels, sprintf( '', newSheetIndex ) ) ## create sheet.rels to simplify id assignment worksheets_rels[[newSheetIndex]] <<- genBaseSheetRels(newSheetIndex) drawings_rels[[newSheetIndex]] <<- drawings_rels[[clonedSheet]] # give each chart its own filename (images can re-use the same file, but charts can't) drawings_rels[[newSheetIndex]] <<- sapply(drawings_rels[[newSheetIndex]], function(rl) { chartfiles <- regmatches( rl, gregexpr("(?<=charts/)chart[0-9]+\\.xml", rl, perl = TRUE) )[[1]] for (cf in chartfiles) { chartid <- length(charts) + 1 newname <- stri_join("chart", chartid, ".xml") fl <- charts[cf] # Read the chartfile and adjust all formulas to point to the new # sheet name instead of the clone source # The result is saved to a new chart xml file newfl <- file.path(dirname(fl), newname) charts[newname] <<- newfl chart <- readUTF8(fl) chart <- gsub( stri_join("(?<=')", sheet_names[[clonedSheet]], "(?='!)"), stri_join("'", sheetName, "'"), chart, perl = TRUE ) chart <- gsub( stri_join("(?<=[^A-Za-z0-9])", sheet_names[[clonedSheet]], "(?=!)"), stri_join("'", sheetName, "'"), chart, perl = TRUE ) writeLines(chart, newfl) # file.copy(fl, newfl) Content_Types <<- c( Content_Types, sprintf( '', newname ) ) rl <- gsub(stri_join("(?<=charts/)", cf), newname, rl, perl = TRUE) } rl }, USE.NAMES = FALSE) # The IDs in the drawings array are sheet-specific, so within the new cloned sheet # the same IDs can be used => no need to modify drawings drawings[[newSheetIndex]] <<- drawings[[clonedSheet]] vml_rels[[newSheetIndex]] <<- vml_rels[[clonedSheet]] vml[[newSheetIndex]] <<- vml[[clonedSheet]] isChartSheet[[newSheetIndex]] <<- isChartSheet[[clonedSheet]] comments[[newSheetIndex]] <<- comments[[clonedSheet]] threadComments[[newSheetIndex]] <<- threadComments[[clonedSheet]] rowHeights[[newSheetIndex]] <<- rowHeights[[clonedSheet]] colWidths[[newSheetIndex]] <<- colWidths[[clonedSheet]] colOutlineLevels[[newSheetIndex]] <<- colOutlineLevels[[clonedSheet]] outlineLevels[[newSheetIndex]] <<- outlineLevels[[clonedSheet]] sheetOrder <<- c(sheetOrder, as.integer(newSheetIndex)) sheet_names <<- c(sheet_names, sheetName) ############################ ## STYLE ## ... objects are stored in a global list, so we need to get all styles ## assigned to the cloned sheet and duplicate them sheetStyles <- Filter(function(s) { s$sheet == sheet_names[[clonedSheet]] }, styleObjects) styleObjects <<- c( styleObjects, Map(function(s) { s$sheet <- sheetName s }, sheetStyles) ) ############################ ## TABLES ## ... are stored in the $tables list, with the name and sheet as attr ## and in the worksheets[]$tableParts list. We also need to adjust the ## worksheets_rels and set the content type for the new table tbls <- tables[attr(tables, "sheet") == clonedSheet] for (t in tbls) { # Extract table name, displayName and ID from the xml oldname <- regmatches(t, regexpr('(?<= name=")[^"]+', t, perl = TRUE)) olddispname <- regmatches(t, regexpr('(?<= displayName=")[^"]+', t, perl = TRUE)) oldid <- regmatches(t, regexpr('(?<= id=")[^"]+', t, perl = TRUE)) ref <- regmatches(t, regexpr('(?<= ref=")[^"]+', t, perl = TRUE)) # Find new, unused table names by appending _n, where n=1,2,... n <- 0 while (stri_join(oldname, "_", n) %in% attr(tables, "tableName")) { n <- n + 1 } newname <- stri_join(oldname, "_", n) newdispname <- stri_join(olddispname, "_", n) newid <- as.character(length(tables) + 3L) # Use the table definition from the cloned sheet and simply replace the names newt <- t newt <- gsub( stri_join(" name=\"", oldname, "\""), stri_join(" name=\"", newname, "\""), newt ) newt <- gsub( stri_join(" displayName=\"", olddispname, "\""), stri_join(" displayName=\"", newdispname, "\""), newt ) newt <- gsub( stri_join("(', newid)) attr(worksheets[[newSheetIndex]]$tableParts, "tableName") <<- c(attr(oldparts, "tableName"), newname) names(attr(worksheets[[newSheetIndex]]$tableParts, "tableName")) <<- c(names(attr(oldparts, "tableName")), ref) Content_Types <<- c( Content_Types, sprintf( '', newid ) ) tables.xml.rels <<- append(tables.xml.rels, "") worksheets_rels[[newSheetIndex]] <<- c( worksheets_rels[[newSheetIndex]], sprintf( '', newid, newid ) ) } # TODO: The following items are currently NOT copied/duplicated for the cloned sheet: # - Comments # - Pivot tables invisible(newSheetIndex) } ) Workbook$methods( addChartSheet = function(sheetName, tabColour = NULL, zoom = 100) { newSheetIndex <- length(worksheets) + 1L if (newSheetIndex > 1) { sheetId <- max(as.integer(regmatches( workbook$sheets, regexpr('(?<=sheetId=")[0-9]+', workbook$sheets, perl = TRUE) ))) + 1L } else { sheetId <- 1 } ## Add sheet to workbook.xml workbook$sheets <<- c( workbook$sheets, sprintf( '', sheetName, sheetId, newSheetIndex ) ) ## append to worksheets list worksheets <<- append( worksheets, ChartSheet$new( tabSelected = newSheetIndex == 1, tabColour = tabColour, zoom = zoom ) ) sheet_names <<- c(sheet_names, sheetName) ## update content_tyes Content_Types <<- c( Content_Types, sprintf( '', newSheetIndex ) ) ## Update xl/rels workbook.xml.rels <<- c( workbook.xml.rels, sprintf( '', newSheetIndex ) ) ## add a drawing.xml for the worksheet Content_Types <<- c( Content_Types, sprintf( '', newSheetIndex ) ) ## create sheet.rels to simplify id assignment worksheets_rels[[newSheetIndex]] <<- genBaseSheetRels(newSheetIndex) drawings_rels[[newSheetIndex]] <<- list() drawings[[newSheetIndex]] <<- list() isChartSheet[[newSheetIndex]] <<- TRUE rowHeights[[newSheetIndex]] <<- list() colWidths[[newSheetIndex]] <<- list() colOutlineLevels[[newSheetIndex]] <<- list() outlineLevels[[newSheetIndex]] <<- list() vml_rels[[newSheetIndex]] <<- list() vml[[newSheetIndex]] <<- list() sheetOrder <<- c(sheetOrder, newSheetIndex) invisible(newSheetIndex) } ) Workbook$methods( saveWorkbook = function() { ## temp directory to save XML files prior to compressing tmpDir <- file.path(tempfile(pattern = "workbookTemp_")) if (dir.exists(tmpDir)) { unlink(tmpDir, recursive = TRUE, force = TRUE) } success <- dir.create(path = tmpDir, recursive = FALSE) if (!success) { stop(sprintf("Failed to create temporary directory '%s'", tmpDir)) } .self$preSaveCleanUp() nSheets <- length(worksheets) nThemes <- length(theme) nPivots <- length(pivotDefinitions) nSlicers <- length(slicers) nComments <- sum(sapply(comments, length) > 0) nThreadComments <- sum(sapply(threadComments, length) > 0) nPersons <- length(persons) nVML <- sum(sapply(vml, length) > 0) relsDir <- file.path(tmpDir, "_rels") dir.create(path = relsDir, recursive = TRUE) docPropsDir <- file.path(tmpDir, "docProps") dir.create(path = docPropsDir, recursive = TRUE) xlDir <- file.path(tmpDir, "xl") dir.create(path = xlDir, recursive = TRUE) xlrelsDir <- file.path(tmpDir, "xl", "_rels") dir.create(path = xlrelsDir, recursive = TRUE) xlTablesDir <- file.path(tmpDir, "xl", "tables") dir.create(path = xlTablesDir, recursive = TRUE) xlTablesRelsDir <- file.path(xlTablesDir, "_rels") dir.create(path = xlTablesRelsDir, recursive = TRUE) if (length(media) > 0) { xlmediaDir <- file.path(tmpDir, "xl", "media") dir.create(path = xlmediaDir, recursive = TRUE) } ## will always have a theme xlthemeDir <- file.path(tmpDir, "xl", "theme") dir.create(path = xlthemeDir, recursive = TRUE) if (is.null(theme)) { con <- file(file.path(xlthemeDir, "theme1.xml"), open = "wb") writeBin(charToRaw(genBaseTheme()), con) close(con) } else { lapply(1:nThemes, function(i) { con <- file(file.path(xlthemeDir, stri_join("theme", i, ".xml")), open = "wb") writeBin(charToRaw(pxml(theme[[i]])), con) close(con) }) } ## will always have drawings xlworksheetsDir <- file.path(tmpDir, "xl", "worksheets") dir.create(path = xlworksheetsDir, recursive = TRUE) xlworksheetsRelsDir <- file.path(tmpDir, "xl", "worksheets", "_rels") dir.create(path = xlworksheetsRelsDir, recursive = TRUE) xldrawingsDir <- file.path(tmpDir, "xl", "drawings") dir.create(path = xldrawingsDir, recursive = TRUE) xldrawingsRelsDir <- file.path(tmpDir, "xl", "drawings", "_rels") dir.create(path = xldrawingsRelsDir, recursive = TRUE) ## charts if (length(charts) > 0) { file.copy( from = dirname(charts[1]), to = file.path(tmpDir, "xl"), recursive = TRUE ) } ## xl/comments.xml if (nComments > 0 | nVML > 0) { for (i in 1:nSheets) { if (length(comments[[i]]) > 0) { fn <- sprintf("comments%s.xml", i) Content_Types <<- c( Content_Types, sprintf( '', fn ) ) worksheets_rels[[i]] <<- unique(c( worksheets_rels[[i]], sprintf( '', fn ) )) writeCommentXML( comment_list = comments[[i]], file_name = file.path(tmpDir, "xl", fn) ) } } .self$writeDrawingVML(xldrawingsDir) } ## Threaded Comments xl/threadedComments/threadedComment.xml if (nThreadComments > 0) { xlThreadComments <- file.path(tmpDir, "xl", "threadedComments") dir.create(path = xlThreadComments, recursive = TRUE) for (i in seq_len(nSheets)) { if (length(threadComments[[i]]) > 0) { fl <- threadComments[[i]] file.copy( from = fl, to = file.path(xlThreadComments, basename(fl)), overwrite = TRUE, copy.date = TRUE ) worksheets_rels[[i]] <<- unique(c( worksheets_rels[[i]], sprintf( '', basename(fl) ) )) } } } ## xl/persons/person.xml if (nPersons > 0) { personDir <- file.path(tmpDir, "xl", "persons") dir.create(path = personDir, recursive = TRUE) file.copy( from = persons, to = personDir, overwrite = TRUE ) } if (length(embeddings) > 0) { embeddingsDir <- file.path(tmpDir, "xl", "embeddings") dir.create(path = embeddingsDir, recursive = TRUE) for (fl in embeddings) { file.copy( from = fl, to = embeddingsDir, overwrite = TRUE ) } } if (nPivots > 0) { pivotTablesDir <- file.path(tmpDir, "xl", "pivotTables") dir.create(path = pivotTablesDir, recursive = TRUE) pivotTablesRelsDir <- file.path(tmpDir, "xl", "pivotTables", "_rels") dir.create(path = pivotTablesRelsDir, recursive = TRUE) pivotCacheDir <- file.path(tmpDir, "xl", "pivotCache") dir.create(path = pivotCacheDir, recursive = TRUE) pivotCacheRelsDir <- file.path(tmpDir, "xl", "pivotCache", "_rels") dir.create(path = pivotCacheRelsDir, recursive = TRUE) for (i in seq_along(pivotTables)) { file.copy( from = pivotTables[i], to = file.path(pivotTablesDir, sprintf("pivotTable%s.xml", i)), overwrite = TRUE, copy.date = TRUE ) } for (i in seq_along(pivotDefinitions)) { file.copy( from = pivotDefinitions[i], to = file.path(pivotCacheDir, sprintf("pivotCacheDefinition%s.xml", i)), overwrite = TRUE, copy.date = TRUE ) } for (i in seq_along(pivotRecords)) { file.copy( from = pivotRecords[i], to = file.path(pivotCacheDir, sprintf("pivotCacheRecords%s.xml", i)), overwrite = TRUE, copy.date = TRUE ) } for (i in seq_along(pivotDefinitionsRels)) { file.copy( from = pivotDefinitionsRels[i], to = file.path( pivotCacheRelsDir, sprintf("pivotCacheDefinition%s.xml.rels", i) ), overwrite = TRUE, copy.date = TRUE ) } for (i in seq_along(pivotTables.xml.rels)) { write_file( body = pivotTables.xml.rels[[i]], fl = file.path(pivotTablesRelsDir, sprintf("pivotTable%s.xml.rels", i)) ) } } ## slicers if (nSlicers > 0) { slicersDir <- file.path(tmpDir, "xl", "slicers") dir.create(path = slicersDir, recursive = TRUE) slicerCachesDir <- file.path(tmpDir, "xl", "slicerCaches") dir.create(path = slicerCachesDir, recursive = TRUE) for (i in seq_along(slicers)) { if (nchar(slicers[i]) > 0) { file.copy(from = slicers[i], to = file.path(slicersDir, sprintf("slicer%s.xml", i))) } } for (i in seq_along(slicerCaches)) { write_file( body = slicerCaches[[i]], fl = file.path(slicerCachesDir, sprintf("slicerCache%s.xml", i)) ) } } ## Write content ## write .rels write_file( head = '\n', body = '', tail = "", fl = file.path(relsDir, ".rels") ) app <- "Microsoft Excel" # further protect argument (might be extended with: , , , , , , ) if (!is.null(workbook$apps)) app <- paste0(app, workbook$apps) ## write app.xml write_file( head = '', body = app, tail = "", fl = file.path(docPropsDir, "app.xml") ) ## write core.xml write_file( head = "", body = pxml(core), tail = "", fl = file.path(docPropsDir, "core.xml") ) ## write workbook.xml.rels write_file( head = '', body = pxml(workbook.xml.rels), tail = "", fl = file.path(xlrelsDir, "workbook.xml.rels") ) ## write tables if (length(unlist(tables, use.names = FALSE)) > 0) { for (i in seq_along(unlist(tables, use.names = FALSE))) { if (!grepl("openxlsx_deleted", attr(tables, "tableName")[i], fixed = TRUE)) { write_file( body = pxml(unlist(tables, use.names = FALSE)[[i]]), fl = file.path(xlTablesDir, sprintf("table%s.xml", i + 2)) ) if (tables.xml.rels[[i]] != "") { write_file( body = tables.xml.rels[[i]], fl = file.path(xlTablesRelsDir, sprintf("table%s.xml.rels", i + 2)) ) } } } } ## write query tables if (length(queryTables) > 0) { xlqueryTablesDir <- file.path(tmpDir, "xl", "queryTables") dir.create(path = xlqueryTablesDir, recursive = TRUE) for (i in seq_along(queryTables)) { write_file( body = queryTables[[i]], fl = file.path(xlqueryTablesDir, sprintf("queryTable%s.xml", i)) ) } } ## connections if (length(connections) > 0) { write_file(body = connections, fl = file.path(xlDir, "connections.xml")) } ## externalLinks if (length(externalLinks)) { externalLinksDir <- file.path(tmpDir, "xl", "externalLinks") dir.create(path = externalLinksDir, recursive = TRUE) for (i in seq_along(externalLinks)) { write_file( body = externalLinks[[i]], fl = file.path(externalLinksDir, sprintf("externalLink%s.xml", i)) ) } } ## externalLinks rels if (length(externalLinksRels)) { externalLinksRelsDir <- file.path(tmpDir, "xl", "externalLinks", "_rels") dir.create(path = externalLinksRelsDir, recursive = TRUE) for (i in seq_along(externalLinksRels)) { write_file( body = externalLinksRels[[i]], fl = file.path( externalLinksRelsDir, sprintf("externalLink%s.xml.rels", i) ) ) } } # printerSettings printDir <- file.path(tmpDir, "xl", "printerSettings") dir.create(path = printDir, recursive = TRUE) for (i in 1:nSheets) { writeLines(genPrinterSettings(), file.path(printDir, sprintf("printerSettings%s.bin", i))) } ## media (copy file from origin to destination) for (x in media) { file.copy(x, file.path(xlmediaDir, names(media)[which(media == x)])) } ## VBA Macro if (!is.null(vbaProject)) { file.copy(vbaProject, xlDir) } ## write worksheet, worksheet_rels, drawings, drawing_rels .self$writeSheetDataXML( xldrawingsDir, xldrawingsRelsDir, xlworksheetsDir, xlworksheetsRelsDir ) ## write sharedStrings.xml ct <- Content_Types if (length(sharedStrings) > 0) { write_file( head = sprintf( '', length(sharedStrings), attr(sharedStrings, "uniqueCount") ), body = stri_join(sharedStrings, collapse = "", sep = " "), tail = "", fl = file.path(xlDir, "sharedStrings.xml") ) } else { ## Remove relationship to sharedStrings ct <- ct[!grepl("sharedStrings", ct)] } if (nComments > 0) { ct <- c( ct, '' ) } ## write [Content_type] write_file( head = '', body = pxml(ct), tail = "", fl = file.path(tmpDir, "[Content_Types].xml") ) styleXML <- styles styleXML$numFmts <- stri_join( sprintf('', length(styles$numFmts)), pxml(styles$numFmts), "" ) styleXML$fonts <- stri_join( sprintf('', length(styles$fonts)), pxml(styles$fonts), "" ) styleXML$fills <- stri_join( sprintf('', length(styles$fills)), pxml(styles$fills), "" ) styleXML$borders <- stri_join( sprintf('', length(styles$borders)), pxml(styles$borders), "" ) styleXML$cellStyleXfs <- c( sprintf('', length(styles$cellStyleXfs)), pxml(styles$cellStyleXfs), "" ) styleXML$cellXfs <- stri_join( sprintf('', length(styles$cellXfs)), pxml(styles$cellXfs), "" ) styleXML$cellStyles <- stri_join( sprintf('', length(styles$cellStyles)), pxml(styles$cellStyles), "" ) styleXML$dxfs <- ifelse( length(styles$dxfs) == 0, '', stri_join( sprintf('', length(styles$dxfs)), stri_join(unlist(styles$dxfs), sep = " ", collapse = ""), "" ) ) ## write styles.xml write_file( head = '', body = pxml(styleXML), tail = "", fl = file.path(xlDir, "styles.xml") ) ## write workbook.xml workbookXML <- workbook workbookXML$sheets <- stri_join("", pxml(workbookXML$sheets), "") if (length(workbookXML$definedNames) > 0) { workbookXML$definedNames <- stri_join( "", pxml(workbookXML$definedNames), "" ) } write_file( head = '', body = pxml(workbookXML), tail = "", fl = file.path(xlDir, "workbook.xml") ) workbook$sheets <<- workbook$sheets[order(sheetOrder)] ## Need to reset sheet order to allow multiple savings ## compress to xlsx wd <- getwd() tmpFile <- basename(tempfile(fileext = ifelse(is.null(vbaProject), ".xlsx", ".xlsm"))) on.exit(expr = setwd(wd), add = TRUE) ## zip it setwd(dir = tmpDir) cl <- ifelse( !is.null(getOption("openxlsx.compresssionLevel")), getOption("openxlsx.compresssionLevel"), getOption("openxlsx.compresssionevel", 6) ) zipr( zipfile = tmpFile, include_directories = FALSE, files = list.files(path = tmpDir, all.files = FALSE), recurse = TRUE, compression_level = cl ) ## reset styles - maintain any changes to base font baseFont <- styles$fonts[[1]] styles <<- genBaseStyleSheet(styles$dxfs, tableStyles = styles$tableStyles, extLst = styles$extLst ) styles$fonts[[1]] <<- baseFont return(file.path(tmpDir, tmpFile)) } ) Workbook$methods( updateSharedStrings = function(uNewStr) { ## Function will return named list of references to new strings uStr <- uNewStr[which(!uNewStr %in% sharedStrings)] uCount <- attr(sharedStrings, "uniqueCount") sharedStrings <<- append(sharedStrings, uStr) attr(sharedStrings, "uniqueCount") <<- uCount + length(uStr) } ) Workbook$methods( validateSheet = function(sheetName) { if (!is.numeric(sheetName)) { if (is.null(sheet_names)) { stop("Workbook does not contain any worksheets.", call. = FALSE) } } if (is.numeric(sheetName)) { if (sheetName > length(sheet_names)) { stop("This Workbook only has ", length(sheet_names), " sheets, ", sheetName, " is not valid", call. = FALSE ) } return(sheetName) } else if (!sheetName %in% replaceXMLEntities(sheet_names)) { stop(sprintf("Sheet '%s' does not exist.", replaceXMLEntities(sheetName)), call. = FALSE) } which(replaceXMLEntities(sheet_names) == sheetName) } ) Workbook$methods( getSheetName = function(sheetIndex) { if (any(length(sheet_names) < sheetIndex)) { stop(sprintf("Workbook only contains %s sheet(s).", length(sheet_names))) } sheet_names[sheetIndex] } ) Workbook$methods( buildTable = function(sheet, colNames, ref, showColNames, tableStyle, tableName, withFilter, totalsRowCount = 0, showFirstColumn = 0, showLastColumn = 0, showRowStripes = 1, showColumnStripes = 0) { ## id will start at 3 and drawing will always be 1, printer Settings at 2 (printer settings has been removed) id <- as.character(length(tables) + 3L) sheet <- validateSheet(sheet) ## build table XML and save to tables field table <- sprintf( '
', tableStyle, as.integer(showFirstColumn), as.integer(showLastColumn), as.integer(showRowStripes), as.integer(showColumnStripes) ) tables <<- c( tables, build_table_xml( table = table, tableStyleXML = tableStyleXML, ref = ref, colNames = gsub("\n|\r", "_x000a_", colNames), showColNames = showColNames, withFilter = withFilter ) ) names(tables) <<- c(nms, ref) attr(tables, "sheet") <<- c(tSheets, sheet) attr(tables, "tableName") <<- c(tNames, tableName) worksheets[[sheet]]$tableParts <<- append( worksheets[[sheet]]$tableParts, sprintf('', id) ) attr(worksheets[[sheet]]$tableParts, "tableName") <<- c(tNames[tSheets == sheet & !grepl("openxlsx_deleted", tNames, fixed = TRUE)], tableName) ## update Content_Types Content_Types <<- c( Content_Types, sprintf( '', id ) ) ## create a table.xml.rels tables.xml.rels <<- append(tables.xml.rels, "") ## update worksheets_rels worksheets_rels[[sheet]] <<- c( worksheets_rels[[sheet]], sprintf( '', id, id ) ) } ) Workbook$methods( writeDrawingVML = function(dir) { for (i in seq_along(comments)) { id <- 1025 cd <- unlist(lapply(comments[[i]], "[[", "clientData")) nComments <- length(cd) ## write head if (nComments > 0 | length(vml[[i]]) > 0) { write( x = stri_join( ' ' ), file = file.path(dir, sprintf("vmlDrawing%s.vml", i)), sep = " " ) } if (nComments > 0) { for (j in 1:nComments) { id <- id + 1L write( x = genBaseShapeVML(cd[j], id), file = file.path(dir, sprintf("vmlDrawing%s.vml", i)), append = TRUE ) } } if (length(vml[[i]]) > 0) { write( x = vml[[i]], file = file.path(dir, sprintf("vmlDrawing%s.vml", i)), append = TRUE ) } if (nComments > 0 | length(vml[[i]]) > 0) { write( x = "", file = file.path(dir, sprintf("vmlDrawing%s.vml", i)), append = TRUE ) worksheets[[i]]$legacyDrawing <<- '' } } } ) Workbook$methods( updateStyles = function(style) { ## Updates styles.xml xfNode <- list( numFmtId = 0, fontId = 0, fillId = 0, borderId = 0, xfId = 0 ) alignmentFlag <- FALSE ## Font if (!is.null(style$fontName) | !is.null(style$fontSize) | !is.null(style$fontColour) | !is.null(style$fontDecoration) | !is.null(style$fontFamily) | !is.null(style$fontScheme)) { fontNode <- .self$createFontNode(style) fontId <- which(styles$fonts == fontNode) - 1L if (length(fontId) == 0) { fontId <- length(styles$fonts) styles$fonts <<- append(styles[["fonts"]], fontNode) } xfNode$fontId <- fontId xfNode <- append(xfNode, list("applyFont" = "1")) } ## numFmt if (!is.null(style$numFmt)) { if (as.integer(style$numFmt$numFmtId) > 0) { numFmtId <- style$numFmt$numFmtId if (as.integer(numFmtId) > 163L) { tmp <- style$numFmt$formatCode styles$numFmts <<- unique(c( styles$numFmts, sprintf( '', numFmtId, tmp ) )) } xfNode$numFmtId <- numFmtId xfNode <- append(xfNode, list("applyNumberFormat" = "1")) } } ## Fill if (!is.null(style$fill)) { fillNode <- .self$createFillNode(style) if (!is.null(fillNode)) { fillId <- which(styles$fills == fillNode) - 1L if (length(fillId) == 0) { fillId <- length(styles$fills) styles$fills <<- c(styles$fills, fillNode) } xfNode$fillId <- fillId xfNode <- append(xfNode, list("applyFill" = "1")) } } ## Border if (any(!is.null( c( style$borderLeft, style$borderRight, style$borderTop, style$borderBottom, style$borderDiagonal ) ))) { borderNode <- .self$createBorderNode(style) borderId <- which(styles$borders == borderNode) - 1L if (length(borderId) == 0) { borderId <- length(styles$borders) styles$borders <<- c(styles$borders, borderNode) } xfNode$borderId <- borderId xfNode <- append(xfNode, list("applyBorder" = "1")) } # if(!is.null(style$xfId)) # xfNode$xfId <- style$xfId childNodes <- "" ## Alignment if (!is.null(style$halign) | !is.null(style$valign) | !is.null(style$wrapText) | !is.null(style$textRotation) | !is.null(style$indent)) { attrs <- list() alignNode <- "") alignmentFlag <- TRUE xfNode <- append(xfNode, list("applyAlignment" = "1")) childNodes <- stri_join(childNodes, alignNode) } if (!is.null(style$hidden) | !is.null(style$locked)) { xfNode <- append(xfNode, list("applyProtection" = "1")) protectionNode <- "") childNodes <- stri_join(childNodes, protectionNode) } if (length(childNodes) > 0) { xfNode <- stri_join( "", childNodes, "" ) } else { xfNode <- stri_join("") } styleId <- which(styles$cellXfs == xfNode) - 1L if (length(styleId) == 0) { styleId <- length(styles$cellXfs) styles$cellXfs <<- c(styles$cellXfs, xfNode) } return(as.integer(styleId)) } ) Workbook$methods( updateCellStyles = function() { flag <- TRUE for (style in cellStyleObjects) { ## Updates styles.xml xfNode <- list( numFmtId = 0, fontId = 0, fillId = 0, borderId = 0 ) alignmentFlag <- FALSE ## Font if (!is.null(style$fontName) | !is.null(style$fontSize) | !is.null(style$fontColour) | !is.null(style$fontDecoration) | !is.null(style$fontFamily) | !is.null(style$fontScheme)) { fontNode <- .self$createFontNode(style) fontId <- which(styles$font == fontNode) - 1L if (length(fontId) == 0) { fontId <- length(styles$fonts) styles$fonts <<- append(styles[["fonts"]], fontNode) } xfNode$fontId <- fontId xfNode <- append(xfNode, list("applyFont" = "1")) } ## numFmt if (!is.null(style$numFmt)) { if (as.integer(style$numFmt$numFmtId) > 0) { numFmtId <- style$numFmt$numFmtId if (as.integer(numFmtId) > 163L) { tmp <- style$numFmt$formatCode styles$numFmts <<- unique(c( styles$numFmts, sprintf( '', numFmtId, tmp ) )) } xfNode$numFmtId <- numFmtId xfNode <- append(xfNode, list("applyNumberFormat" = "1")) } } ## Fill if (!is.null(style$fill)) { fillNode <- .self$createFillNode(style) if (!is.null(fillNode)) { fillId <- which(styles$fills == fillNode) - 1L if (length(fillId) == 0) { fillId <- length(styles$fills) styles$fills <<- c(styles$fills, fillNode) } xfNode$fillId <- fillId xfNode <- append(xfNode, list("applyFill" = "1")) } } ## Border if (any(!is.null( c( style$borderLeft, style$borderRight, style$borderTop, style$borderBottom, style$borderDiagonal ) ))) { borderNode <- .self$createBorderNode(style) borderId <- which(styles$borders == borderNode) - 1L if (length(borderId) == 0) { borderId <- length(styles$borders) styles$borders <<- c(styles$borders, borderNode) } xfNode$borderId <- borderId xfNode <- append(xfNode, list("applyBorder" = "1")) } xfNode <- stri_join("") if (flag) { styles$cellStyleXfs <<- xfNode flag <- FALSE } else { styles$cellStyleXfs <<- c(styles$cellStyleXfs, xfNode) } } } ) Workbook$methods( getBaseFont = function() { baseFont <- styles$fonts[[1]] sz <- getAttrs(baseFont, "sz") colour <- getAttrs(baseFont, "color") name <- getAttrs(baseFont, "name") if (length(sz[[1]]) == 0) { sz <- list("val" = "10") } if (length(colour[[1]]) == 0) { colour <- list("rgb" = "#000000") } if (length(name[[1]]) == 0) { name <- list("val" = "Calibri") } list( "size" = sz, "colour" = colour, "name" = name ) } ) Workbook$methods( createFontNode = function(style) { baseFont <- .self$getBaseFont() fontNode <- "" ## size if (is.null(style$fontSize[[1]])) { fontNode <- stri_join(fontNode, sprintf('', names(baseFont$size), baseFont$size)) } else { fontNode <- stri_join(fontNode, sprintf('', names(style$fontSize), style$fontSize)) } ## colour if (is.null(style$fontColour[[1]])) { fontNode <- stri_join( fontNode, sprintf( '', names(baseFont$colour), baseFont$colour ) ) } else { if (length(style$fontColour) > 1) { fontNode <- stri_join(fontNode, sprintf( "", stri_join( sapply(seq_along(style$fontColour), function(i) { sprintf('%s="%s"', names(style$fontColour)[i], style$fontColour[i]) }), sep = " ", collapse = " " ) )) } else { fontNode <- stri_join( fontNode, sprintf( '', names(style$fontColour), style$fontColour ) ) } } ## name if (is.null(style$fontName[[1]])) { fontNode <- stri_join( fontNode, sprintf('', names(baseFont$name), baseFont$name) ) } else { fontNode <- stri_join( fontNode, sprintf('', names(style$fontName), style$fontName) ) } ### Create new font and return Id if (!is.null(style$fontFamily)) { fontNode <- stri_join(fontNode, sprintf('', style$fontFamily)) } if (!is.null(style$fontScheme)) { fontNode <- stri_join(fontNode, sprintf('', style$fontScheme)) } if ("BOLD" %in% style$fontDecoration) { fontNode <- stri_join(fontNode, "") } if ("ITALIC" %in% style$fontDecoration) { fontNode <- stri_join(fontNode, "") } if ("UNDERLINE" %in% style$fontDecoration) { fontNode <- stri_join(fontNode, '') } if ("UNDERLINE2" %in% style$fontDecoration) { fontNode <- stri_join(fontNode, '') } if ("ACCOUNTING" %in% style$fontDecoration) { fontNode <- stri_join(fontNode, '') } if ("ACCOUNTING2" %in% style$fontDecoration) { fontNode <- stri_join(fontNode, '') } if ("STRIKEOUT" %in% style$fontDecoration) { fontNode <- stri_join(fontNode, "") } stri_join(fontNode, "") } ) Workbook$methods( createBorderNode = function(style) { borderNode <- "") if (!is.null(style$borderLeft)) { borderNode <- stri_join( borderNode, sprintf('', style$borderLeft), sprintf( '', names(style$borderLeftColour), style$borderLeftColour ), "" ) } if (!is.null(style$borderRight)) { borderNode <- stri_join( borderNode, sprintf('', style$borderRight), sprintf( '', names(style$borderRightColour), style$borderRightColour ), "" ) } if (!is.null(style$borderTop)) { borderNode <- stri_join( borderNode, sprintf('', style$borderTop), sprintf( '', names(style$borderTopColour), style$borderTopColour ), "" ) } if (!is.null(style$borderBottom)) { borderNode <- stri_join( borderNode, sprintf('', style$borderBottom), sprintf( '', names(style$borderBottomColour), style$borderBottomColour ), "" ) } if (!is.null(style$borderDiagonal)) { borderNode <- stri_join( borderNode, sprintf('', style$borderDiagonal), sprintf( '', names(style$borderDiagonalColour), style$borderDiagonalColour ), "" ) } stri_join(borderNode, "") } ) Workbook$methods( createFillNode = function(style, patternType = "solid") { fill <- style$fill ## gradientFill if (any(grepl("gradientFill", fill))) { fillNode <- fill # stri_join("", fill, "") } else if (!is.null(fill$fillFg) | !is.null(fill$fillBg)) { fillNode <- stri_join( "", sprintf('', patternType) ) if (!is.null(fill$fillFg)) { fillNode <- stri_join(fillNode, sprintf( "", stri_join( stri_join(names(fill$fillFg), '="', fill$fillFg, '"'), sep = " ", collapse = " " ) )) } if (!is.null(fill$fillBg)) { fillNode <- stri_join(fillNode, sprintf( "", stri_join( stri_join(names(fill$fillBg), '="', fill$fillBg, '"'), sep = " ", collapse = " " ) )) } fillNode <- stri_join(fillNode, "") } else { return(NULL) } return(fillNode) } ) Workbook$methods( setSheetName = function(sheet, newSheetName) { if (newSheetName %in% sheet_names) { stop(sprintf("Sheet %s already exists!", newSheetName)) } sheet <- validateSheet(sheet) oldName <- sheet_names[[sheet]] sheet_names[[sheet]] <<- newSheetName ## Rename in workbook sheetId <- regmatches( workbook$sheets[[sheet]], regexpr('(?<=sheetId=")[0-9]+', workbook$sheets[[sheet]], perl = TRUE) ) rId <- regmatches( workbook$sheets[[sheet]], regexpr('(?<= r:id="rId)[0-9]+', workbook$sheets[[sheet]], perl = TRUE) ) workbook$sheets[[sheet]] <<- sprintf( '', newSheetName, sheetId, rId ) ## rename styleObjects sheet component if (length(styleObjects) > 0) { styleObjects <<- lapply(styleObjects, function(x) { if (x$sheet == oldName) { x$sheet <- newSheetName } return(x) }) } ## rename defined names if (length(workbook$definedNames) > 0) { belongTo <- getDefinedNamesSheet(workbook$definedNames) toChange <- belongTo == oldName if (any(toChange)) { newSheetName <- sprintf("'%s'", newSheetName) tmp <- gsub(oldName, newSheetName, workbook$definedName[toChange], fixed = TRUE) tmp <- gsub("'+", "'", tmp) workbook$definedNames[toChange] <<- tmp } } } ) Workbook$methods( writeSheetDataXML = function(xldrawingsDir, xldrawingsRelsDir, xlworksheetsDir, xlworksheetsRelsDir) { ## write worksheets # nSheets <- length(worksheets) for (i in seq_along(worksheets)) { ## Write drawing i (will always exist) skip those that are empty if (any(drawings[[i]] != "")) { write_file( head = '', body = pxml(drawings[[i]]), tail = "", fl = file.path(xldrawingsDir, stri_join("drawing", i, ".xml")) ) write_file( head = '', body = pxml(drawings_rels[[i]]), tail = "", fl = file.path(xldrawingsRelsDir, stri_join("drawing", i, ".xml.rels")) ) } else { worksheets[[i]]$drawing <<- character(0) } ## vml drawing if (length(vml_rels[[i]]) > 0) { file.copy( from = vml_rels[[i]], to = file.path( xldrawingsRelsDir, stri_join("vmlDrawing", i, ".vml.rels") ) ) } # outlineLevelRow in SheetformatPr if ((length(outlineLevels[[i]]) > 0) && (!grepl("outlineLevelRow", worksheets[[i]]$sheetFormatPr))) { worksheets[[i]]$sheetFormatPr <<- gsub("/>", ' outlineLevelRow="1"/>', worksheets[[i]]$sheetFormatPr) } if (isChartSheet[i]) { chartSheetDir <- file.path(dirname(xlworksheetsDir), "chartsheets") chartSheetRelsDir <- file.path(dirname(xlworksheetsDir), "chartsheets", "_rels") if (!file.exists(chartSheetDir)) { dir.create(chartSheetDir, recursive = TRUE) dir.create(chartSheetRelsDir, recursive = TRUE) } write_file( body = worksheets[[i]]$get_prior_sheet_data(), fl = file.path(chartSheetDir, stri_join("sheet", i, ".xml")) ) write_file( head = '', body = pxml(worksheets_rels[[i]]), tail = "", fl = file.path(chartSheetRelsDir, sprintf("sheet%s.xml.rels", i)) ) } else { ## Write worksheets ws <- worksheets[[i]] hasHL <- ifelse(length(worksheets[[i]]$hyperlinks) > 0, TRUE, FALSE) ## reorder sheet data worksheets[[i]]$order_sheetdata() prior <- ws$get_prior_sheet_data() post <- ws$get_post_sheet_data() worksheets[[i]]$sheet_data$style_id <<- as.character(worksheets[[i]]$sheet_data$style_id) if ((length(rowHeights[[i]]) == 0) & (length(outlineLevels[[i]]) == 0)) { write_worksheet_xml( prior = prior, post = post, sheet_data = ws$sheet_data, R_fileName = file.path(xlworksheetsDir, sprintf("sheet%s.xml", i)) ) } else if ((length(rowHeights[[i]]) == 0) & (length(outlineLevels[[i]]) > 0)) { write_worksheet_xml_2( prior = prior, post = post, sheet_data = ws$sheet_data, row_heights_ = NULL, outline_levels_ = unlist(outlineLevels[[i]]), R_fileName = file.path(xlworksheetsDir, sprintf("sheet%s.xml", i)) ) } else if ((length(rowHeights[[i]]) > 0) & (length(outlineLevels[[i]]) == 0)) { write_worksheet_xml_2( prior = prior, post = post, sheet_data = ws$sheet_data, row_heights_ = unlist(rowHeights[[i]]), outline_levels_ = NULL, R_fileName = file.path(xlworksheetsDir, sprintf("sheet%s.xml", i)) ) } else { ## row heights will always be in order and all row heights are given rows in preSaveCleanup write_worksheet_xml_2( prior = prior, post = post, sheet_data = ws$sheet_data, row_heights_ = unlist(rowHeights[[i]]), outline_levels_ = unlist(outlineLevels[[i]]), R_fileName = file.path(xlworksheetsDir, sprintf("sheet%s.xml", i)) ) } worksheets[[i]]$sheet_data$style_id <<- integer(0) ## write worksheet rels if (length(worksheets_rels[[i]]) > 0) { ws_rels <- worksheets_rels[[i]] if (hasHL) { h_inds <- stri_join(seq_along(worksheets[[i]]$hyperlinks), "h") ws_rels <- c(ws_rels, unlist( lapply(seq_along(h_inds), function(j) { worksheets[[i]]$hyperlinks[[j]]$to_target_xml(h_inds[j]) }) )) } ## Check if any tables were deleted - remove these from rels if (length(tables) > 0) { table_inds <- grep("tables/table[0-9].xml", ws_rels) if (length(table_inds) > 0) { ids <- regmatches( ws_rels[table_inds], regexpr( '(?<=Relationship Id=")[0-9A-Za-z]+', ws_rels[table_inds], perl = TRUE ) ) inds <- as.integer(gsub("[^0-9]", "", ids, perl = TRUE)) - 2L table_nms <- attr(tables, "tableName")[inds] is_deleted <- grepl("openxlsx_deleted", table_nms, fixed = TRUE) if (any(is_deleted)) { ws_rels <- ws_rels[-table_inds[is_deleted]] } } } write_file( head = '', body = pxml(ws_rels), tail = "", fl = file.path(xlworksheetsRelsDir, sprintf("sheet%s.xml.rels", i)) ) } } ## end of isChartSheet[i] } ## end of loop through 1:nSheets invisible(0) } ) Workbook$methods( setRowHeights = function(sheet, rows, heights) { sheet <- validateSheet(sheet) ## remove any conflicting heights flag <- names(rowHeights[[sheet]]) %in% rows if (any(flag)) { rowHeights[[sheet]] <<- rowHeights[[sheet]][!flag] } nms <- c(names(rowHeights[[sheet]]), rows) allRowHeights <- unlist(c(rowHeights[[sheet]], heights)) names(allRowHeights) <- nms allRowHeights <- allRowHeights[order(as.integer(names(allRowHeights)))] rowHeights[[sheet]] <<- allRowHeights } ) Workbook$methods( groupColumns = function(sheet) { sheet <- validateSheet(sheet) hidden <- attr(colOutlineLevels[[sheet]], "hidden", exact = TRUE) cols <- names(colOutlineLevels[[sheet]]) max_outline <- max(colOutlineLevels[[sheet]]) outline_attr <- paste0(' outlineLevelCol="', max_outline, '"') if (!grepl("outlineLevelCol", worksheets[[sheet]]$sheetFormatPr)) { worksheets[[sheet]]$sheetFormatPr <<- sub("/>", paste0(outline_attr, "/>"), worksheets[[sheet]]$sheetFormatPr) } else { worksheets[[sheet]]$sheetFormatPr <<- sub(' outlineLevelCol="[0-9]+"', outline_attr, worksheets[[sheet]]$sheetFormatPr) } # Check if column is already created (by `setColWidths()` or on import) # Note that columns are initiated by `setColWidths` first (see: order of execution in `preSaveCleanUp()`) if (any(cols %in% names(worksheets[[sheet]]$cols))) { for (i in intersect(cols, names(worksheets[[sheet]]$cols))) { outline_hidden <- attr(colOutlineLevels[[sheet]], "hidden")[attr(colOutlineLevels[[sheet]], "names") == i] outline_level <- colOutlineLevels[[sheet]][[i]] if (grepl("outlineLevel", worksheets[[sheet]]$cols[[i]], perl = TRUE)) { worksheets[[sheet]]$cols[[i]] <<- sub("((?<=hidden=\")(\\w+)\")", paste0(outline_hidden, "\""), worksheets[[sheet]]$cols[[i]], perl = TRUE) } else { worksheets[[sheet]]$cols[[i]] <<- sub("((?<=hidden=\")(\\w+)\")", paste0(outline_hidden, "\" outlineLevel=\"", outline_level, "\""), worksheets[[sheet]]$cols[[i]], perl = TRUE) } } cols <- cols[!cols %in% names(worksheets[[sheet]]$cols)] hidden <- attr(colOutlineLevels[[sheet]], "hidden")[attr(colOutlineLevels[[sheet]], "names") %in% cols] } if (length(cols) > 0) { colNodes <- sprintf('', cols, cols, colOutlineLevels[[sheet]][cols], hidden) names(colNodes) <- cols colNodes = append(worksheets[[sheet]]$cols, colNodes) # Order by column name (=index) worksheets[[sheet]]$cols <<- colNodes[order(names(colNodes))] } } ) Workbook$methods( groupRows = function(sheet, rows, hidden = 0, levels = -1) { # Validation, input data cleanup / preparation sheet <- validateSheet(sheet) hidden = rep(hidden, length.out = length(rows)) levels = rep(levels, length.out = length(rows)) # browser() # disassemble outlineLevels (extract rows, levels and hidden components) existing_rows <- names(outlineLevels[[sheet]]) existing_levels <- outlineLevels[[sheet]] attributes(existing_levels) <- NULL existing_hidden <- attr(outlineLevels[[sheet]], "hidden") # 1. existing entries: # - if levels==-1 => set outlineLevel to max of existing level + 1 # - Otherwise, set outlineLevel to given levels # - update hidden flag correspondingly # 2. New entries # - Append new entries to the end (hidden and levels vector), potentially out-of-order # 3. Reorder all entries to be in the correct order flag <- existing_rows %in% rows # Find indices of rows that already exist existing_outline_indices = which(flag) existing_outline = existing_rows[existing_outline_indices] existing_rows_indices = match(existing_outline, rows) # Auto-detect new level if required new_level <- "1" if (any(flag)) { new_level <- as.character(max(as.numeric(existing_levels[flag])) + 1) } levels[levels < 0] = as.character(new_level) if (any(flag)) { # Assign the given values to existing row definitions (indices were extracted above) existing_hidden[existing_outline_indices] <- hidden[existing_rows_indices] existing_levels[existing_outline_indices] <- levels[existing_rows_indices] # Append all remaining new entries: all_names <- c(existing_rows, rows[-existing_rows_indices]) all_levels <- c(existing_levels, levels[-existing_rows_indices]) all_hidden <- c(existing_hidden, hidden[-existing_rows_indices]) } else { # only new rows were added, no existing modified all_names = c(existing_rows, rows) all_levels = c(existing_levels, levels) all_hidden = c(existing_hidden, hidden) } # re-order and then re-assamble the outlineLevels object (vector with proper attributes) ord <- order(as.numeric(all_names)) all_levels <- as.character(all_levels[ord]) names(all_levels) <- all_names[ord] attr(all_levels, "hidden") <- as.character(as.integer(all_hidden[ord])) outlineLevels[[sheet]] <<- all_levels # Finally, update the sheetFormatPr XML element with the maximum outline level max_outline = max(as.numeric(outlineLevels[[sheet]])) outline_attr <- paste0(' outlineLevelRow="', max_outline, '"') if (!grepl("outlineLevelRow", worksheets[[sheet]]$sheetFormatPr)) { worksheets[[sheet]]$sheetFormatPr <<- sub("/>", paste0(outline_attr, "/>"), worksheets[[sheet]]$sheetFormatPr) } else { worksheets[[sheet]]$sheetFormatPr <<- sub(' outlineLevelRow="[0-9]+"', outline_attr, worksheets[[sheet]]$sheetFormatPr) } } ) Workbook$methods( deleteWorksheet = function(sheet) { # To delete a worksheet # Remove colwidths element # Remove drawing partname from Content_Types (drawing(sheet).xml) # Remove highest sheet from Content_Types # Remove drawings element # Remove drawings_rels element # Remove vml element # Remove vml_rels element # Remove rowHeights element # Remove styleObjects on sheet # Remove last sheet element from workbook # Remove last sheet element from workbook.xml.rels # Remove element from worksheets # Remove element from worksheets_rels # Remove hyperlinks # Reduce calcChain i attributes & remove calcs on sheet # Remove sheet from sheetOrder # Remove queryTable references from workbook$definedNames to worksheet # remove tables sheet <- validateSheet(sheet) sheetNames <- sheet_names nSheets <- length(unlist(sheetNames, use.names = FALSE)) sheetName <- sheetNames[[sheet]] colWidths[[sheet]] <<- NULL sheet_names <<- sheet_names[-sheet] ## remove last drawings(sheet).xml from Content_Types Content_Types <<- Content_Types[!grepl(sprintf("drawing%s.xml", nSheets), Content_Types)] ## remove highest sheet Content_Types <<- Content_Types[!grepl(sprintf("sheet%s.xml", nSheets), Content_Types)] drawings[[sheet]] <<- NULL drawings_rels[[sheet]] <<- NULL vml[[sheet]] <<- NULL vml_rels[[sheet]] <<- NULL rowHeights[[sheet]] <<- NULL colOutlineLevels[[sheet]] <<- NULL outlineLevels[[sheet]] <<- NULL comments[[sheet]] <<- NULL threadComments[[sheet]] <<- NULL isChartSheet <<- isChartSheet[-sheet] ## sheetOrder toRemove <- which(sheetOrder == sheet) sheetOrder[sheetOrder > sheet] <<- sheetOrder[sheetOrder > sheet] - 1L sheetOrder <<- sheetOrder[-toRemove] ## remove styleObjects if (length(styleObjects) > 0) { styleObjects <<- styleObjects[unlist(lapply(styleObjects, "[[", "sheet"), use.names = FALSE) != sheetName] } ## Need to remove reference from workbook.xml.rels to pivotCache removeRels <- grep("pivotTables", worksheets_rels[[sheet]], value = TRUE) if (length(removeRels) > 0) { ## sheet rels links to a pivotTable file, the corresponding pivotTable_rels file links to the cacheDefn which is listing in workbook.xml.rels ## remove reference to this file from the workbook.xml.rels fileNo <- as.integer(unlist(regmatches( removeRels, gregexpr("(?<=pivotTable)[0-9]+(?=\\.xml)", removeRels, perl = TRUE) ))) toRemove <- stri_join( sprintf("(pivotCacheDefinition%s\\.xml)", fileNo), sep = " ", collapse = "|" ) fileNo <- grep(toRemove, pivotTables.xml.rels) toRemove <- stri_join( sprintf("(pivotCacheDefinition%s\\.xml)", fileNo), sep = " ", collapse = "|" ) ## remove reference to file from workbook.xml.res workbook.xml.rels <<- workbook.xml.rels[!grepl(toRemove, workbook.xml.rels)] } ## As above for slicers ## Need to remove reference from workbook.xml.rels to pivotCache removeRels <- grepl("slicers", worksheets_rels[[sheet]]) if (any(removeRels)) { workbook.xml.rels <<- workbook.xml.rels[!grepl(sprintf("(slicerCache%s\\.xml)", sheet), workbook.xml.rels)] } ## wont't remove tables and then won't need to reassign table r:id's but will rename them! worksheets[[sheet]] <<- NULL worksheets_rels[[sheet]] <<- NULL if (length(tables) > 0) { tableSheets <- attr(tables, "sheet") tableNames <- attr(tables, "tableName") inds <- tableSheets %in% sheet & !grepl("openxlsx_deleted", attr(tables, "tableName"), fixed = TRUE) tableSheets[tableSheets > sheet] <- tableSheets[tableSheets > sheet] - 1L ## Need to flag a table as deleted if (any(inds)) { tableSheets[inds] <- 0 tableNames[inds] <- stri_join(tableNames[inds], "_openxlsx_deleted") } attr(tables, "tableName") <<- tableNames attr(tables, "sheet") <<- tableSheets } ## drawing will always be the first relationship and printerSettings second if (nSheets > 1) { for (i in 1:(nSheets - 1L)) { worksheets_rels[[i]][1:3] <<- genBaseSheetRels(i) } } else { worksheets_rels <<- list() } ## remove sheet sn <- unlist(lapply(workbook$sheets, function(x) { regmatches( x, regexpr('(?<= name=")[^"]+', x, perl = TRUE) ) })) workbook$sheets <<- workbook$sheets[!sn %in% sheetName] ## Reset rIds if (nSheets > 1) { for (i in (sheet + 1L):nSheets) { workbook$sheets <<- gsub(stri_join("rId", i), stri_join("rId", i - 1L), workbook$sheets, fixed = TRUE ) } } else { workbook$sheets <<- NULL } ## Can remove highest sheet workbook.xml.rels <<- workbook.xml.rels[!grepl(sprintf("sheet%s.xml", nSheets), workbook.xml.rels)] ## definedNames if (length(workbook$definedNames) > 0) { belongTo <- getDefinedNamesSheet(workbook$definedNames) workbook$definedNames <<- workbook$definedNames[!belongTo %in% sheetName] } invisible(1) } ) Workbook$methods( addDXFS = function(style) { dxf <- "" dxf <- stri_join(dxf, createFontNode(style)) fillNode <- NULL if (!is.null(style$fill$fillFg) | !is.null(style$fill$fillBg)) { dxf <- stri_join(dxf, createFillNode(style)) } if (any(!is.null( c( style$borderLeft, style$borderRight, style$borderTop, style$borderBottom, style$borderDiagonal ) ))) { dxf <- stri_join(dxf, createBorderNode(style)) } dxf <- stri_join(dxf, "", sep = " ") if (dxf %in% styles$dxfs) { return(which(styles$dxfs == dxf) - 1L) } dxfId <- length(styles$dxfs) styles$dxfs <<- c(styles$dxfs, dxf) return(dxfId) } ) Workbook$methods( dataValidation = function(sheet, startRow, endRow, startCol, endCol, type, operator, value, allowBlank, showInputMsg, showErrorMsg) { sheet <- validateSheet(sheet) sqref <- stri_join(getCellRefs(data.frame( "x" = c(startRow, endRow), "y" = c(startCol, endCol) )), sep = " ", collapse = ":" ) header <- sprintf( '', type, operator, allowBlank, showInputMsg, showErrorMsg, sqref ) if (type == "date") { origin <- 25569L if (grepl( 'date1904="1"|date1904="true"', stri_join(unlist(workbook), sep = " ", collapse = ""), ignore.case = TRUE )) { origin <- 24107L } value <- as.integer(value) + origin } if (type == "time") { origin <- 25569L if (grepl( 'date1904="1"|date1904="true"', stri_join(unlist(workbook), sep = " ", collapse = ""), ignore.case = TRUE )) { origin <- 24107L } t <- format(value[1], "%z") offSet <- suppressWarnings(ifelse(substr(t, 1, 1) == "+", 1L, -1L) * (as.integer(substr(t, 2, 3)) + as.integer(substr(t, 4, 5)) / 60) / 24) if (is.na(offSet)) { offSet[i] <- 0 } value <- as.numeric(as.POSIXct(value)) / 86400 + origin + offSet } form <- sapply(seq_along(value), function(i) { sprintf("%s", i, value[i], i) }) worksheets[[sheet]]$dataValidations <<- c( worksheets[[sheet]]$dataValidations, stri_join(header, stri_join(form, collapse = ""), "") ) invisible(0) } ) Workbook$methods( dataValidation_list = function(sheet, startRow, endRow, startCol, endCol, value, allowBlank, showInputMsg, showErrorMsg) { sheet <- validateSheet(sheet) sqref <- stri_join(getCellRefs(data.frame( "x" = c(startRow, endRow), "y" = c(startCol, endCol) )), sep = " ", collapse = ":" ) data_val <- sprintf( '', allowBlank, showInputMsg, showErrorMsg ) formula <- sprintf("%s", value) sqref <- sprintf("%s", sqref) xmlData <- stri_join(data_val, formula, sqref, "") worksheets[[sheet]]$dataValidationsLst <<- c(worksheets[[sheet]]$dataValidationsLst, xmlData) invisible(0) } ) Workbook$methods( conditionalFormatting = function(sheet, startRow, endRow, startCol, endCol, dxfId, formula, type, values, params) { sheet <- validateSheet(sheet) sqref <- stri_join(getCellRefs(data.frame( "x" = c(startRow, endRow), "y" = c(startCol, endCol) )), collapse = ":") ## Increment priority of conditional formatting rule if (length(worksheets[[sheet]]$conditionalFormatting) > 0) { for (i in rev(seq_along(worksheets[[sheet]]$conditionalFormatting))) { priority <- regmatches( worksheets[[sheet]]$conditionalFormatting[[i]], regexpr( '(?<=priority=")[0-9]+', worksheets[[sheet]]$conditionalFormatting[[i]], perl = TRUE ) ) priority_new <- as.integer(priority) + 1L priority_pattern <- sprintf('priority="%s"', priority) priority_new <- sprintf('priority="%s"', priority_new) ## now replace worksheets[[sheet]]$conditionalFormatting[[i]] <<- gsub(priority_pattern, priority_new, worksheets[[sheet]]$conditionalFormatting[[i]], fixed = TRUE ) } } nms <- c(names(worksheets[[sheet]]$conditionalFormatting), sqref) if (type == "colorScale") { ## formula contains the colours ## values contains numerics or is NULL ## dxfId is ignored if (is.null(values)) { if (length(formula) == 2L) { cfRule <- sprintf( ' ', formula[[1]], formula[[2]] ) } else { cfRule <- sprintf( ' ', formula[[1]], formula[[2]], formula[[3]] ) } } else { if (length(formula) == 2L) { cfRule <- sprintf( ' ', values[[1]], values[[2]], formula[[1]], formula[[2]] ) } else { cfRule <- sprintf( ' ', values[[1]], values[[2]], values[[3]], formula[[1]], formula[[2]], formula[[3]] ) } } } else if (type == "dataBar") { # forumula is a vector of colours of length 1 or 2 # values is NULL or a numeric vector of equal length as formula if (length(formula) == 2L) { negColour <- formula[[1]] posColour <- formula[[2]] } else { posColour <- formula negColour <- "FFFF0000" } guid <- stri_join( "F7189283-14F7-4DE0-9601-54DE9DB", 40000L + length(worksheets[[sheet]]$extLst) ) showValue <- 1 if ("showValue" %in% names(params)) { showValue <- as.integer(params$showValue) } gradient <- 1 if ("gradient" %in% names(params)) { gradient <- as.integer(params$gradient) } border <- 1 if ("border" %in% names(params)) { border <- as.integer(params$border) } if (is.null(values)) { cfRule <- sprintf( ' {%s} ', showValue, posColour, guid ) } else { cfRule <- sprintf( ' {%s}', showValue, values[[1]], values[[2]], posColour, guid ) } worksheets[[sheet]]$extLst <<- c( worksheets[[sheet]]$extLst, gen_databar_extlst( guid = guid, sqref = sqref, posColour = posColour, negColour = negColour, values = values, border = border, gradient = gradient ) ) } else if (type == "expression") { cfRule <- sprintf( '%s', dxfId, formula ) } else if (type == "duplicatedValues") { cfRule <- sprintf( '', dxfId ) } else if (type == "containsText") { cfRule <- sprintf( ' NOT(ISERROR(SEARCH("%s", %s))) ', dxfId, values, values, unlist(strsplit(sqref, split = ":"))[[1]] ) } else if (type == "notContainsText") { cfRule <- sprintf( ' ISERROR(SEARCH("%s", %s)) ', dxfId, values, values, unlist(strsplit(sqref, split = ":"))[[1]] ) } else if (type == "beginsWith") { cfRule <- sprintf( ' LEFT(%s,LEN("%s"))="%s" ', dxfId, values, unlist(strsplit(sqref, split = ":"))[[1]], values, values ) } else if (type == "endsWith") { cfRule <- sprintf( ' RIGHT(%s,LEN("%s"))="%s" ', dxfId, values, unlist(strsplit(sqref, split = ":"))[[1]], values, values ) } else if (type == "between") { cfRule <- sprintf( '%s%s', dxfId, formula[1], formula[2] ) } else if (type == "topN") { cfRule <- sprintf( '', dxfId, values[1], values[2] ) } else if (type == "bottomN") { cfRule <- sprintf( '', dxfId, values[1], values[2] ) } else if (type == "containsBlanks") { cfRule <- sprintf( ' LEN(TRIM(%s))=0 ', dxfId, unlist(strsplit(sqref, split = ":"))[[1]] ) } else if (type == "notContainsBlanks") { cfRule <- sprintf( ' LEN(TRIM(%s))>0 ', dxfId, unlist(strsplit(sqref, split = ":"))[[1]] ) } worksheets[[sheet]]$conditionalFormatting <<- append(worksheets[[sheet]]$conditionalFormatting, cfRule) names(worksheets[[sheet]]$conditionalFormatting) <<- nms invisible(0) } ) Workbook$methods( mergeCells = function(sheet, startRow, endRow, startCol, endCol) { sheet <- validateSheet(sheetName = sheet) sqref <- getCellRefs(data.frame( "x" = c(startRow, endRow), "y" = c(startCol, endCol) )) exMerges <- regmatches( worksheets[[sheet]]$mergeCells, regexpr("[A-Z0-9]+:[A-Z0-9]+", worksheets[[sheet]]$mergeCells) ) if (!is.null(exMerges)) { comps <- lapply(exMerges, function(rectCoords) { unlist(strsplit(rectCoords, split = ":")) }) exMergedCells <- build_cell_merges(comps = comps) newMerge <- unlist(build_cell_merges(comps = list(sqref))) ## Error if merge intersects mergeIntersections <- sapply(exMergedCells, function(x) { any(x %in% newMerge) }) if (any(mergeIntersections)) { stop( sprintf( "Merge intersects with existing merged cells: \n\t\t%s.\nRemove existing merge first.", stri_join(exMerges[mergeIntersections], collapse = "\n\t\t") ) ) } } worksheets[[sheet]]$mergeCells <<- c( worksheets[[sheet]]$mergeCells, sprintf( '', stri_join(sqref, collapse = ":", sep = " " ) ) ) } ) Workbook$methods( removeCellMerge = function(sheet, startRow, endRow, startCol, endCol) { sheet <- validateSheet(sheet) sqref <- getCellRefs(data.frame( "x" = c(startRow, endRow), "y" = c(startCol, endCol) )) exMerges <- regmatches( worksheets[[sheet]]$mergeCells, regexpr("[A-Z0-9]+:[A-Z0-9]+", worksheets[[sheet]]$mergeCells) ) if (!is.null(exMerges)) { comps <- lapply(exMerges, function(x) { unlist(strsplit(x, split = ":")) }) exMergedCells <- build_cell_merges(comps = comps) newMerge <- unlist(build_cell_merges(comps = list(sqref))) ## Error if merge intersects mergeIntersections <- sapply(exMergedCells, function(x) { any(x %in% newMerge) }) } ## Remove intersection worksheets[[sheet]]$mergeCells <<- worksheets[[sheet]]$mergeCells[!mergeIntersections] } ) Workbook$methods( freezePanes = function(sheet, firstActiveRow = NULL, firstActiveCol = NULL, firstRow = FALSE, firstCol = FALSE) { sheet <- validateSheet(sheet) paneNode <- NULL if (firstRow) { paneNode <- '' } else if (firstCol) { paneNode <- '' } if (is.null(paneNode)) { if (firstActiveRow == 1 & firstActiveCol == 1) { ## nothing to do return(NULL) } if (firstActiveRow > 1 & firstActiveCol == 1) { attrs <- sprintf('ySplit="%s"', firstActiveRow - 1L) activePane <- "bottomLeft" } if (firstActiveRow == 1 & firstActiveCol > 1) { attrs <- sprintf('xSplit="%s"', firstActiveCol - 1L) activePane <- "topRight" } if (firstActiveRow > 1 & firstActiveCol > 1) { attrs <- sprintf( 'ySplit="%s" xSplit="%s"', firstActiveRow - 1L, firstActiveCol - 1L ) activePane <- "bottomRight" } topLeftCell <- getCellRefs(data.frame(firstActiveRow, firstActiveCol)) paneNode <- sprintf( '', stri_join(attrs, collapse = " ", sep = " "), topLeftCell, activePane, activePane ) } worksheets[[sheet]]$freezePane <<- paneNode } ) Workbook$methods( insertImage = function(sheet, file, startRow, startCol, width, height, rowOffset = 0, colOffset = 0, address) { ## within the sheet the drawing node's Id refernce an id in the sheetRels ## sheet rels reference the drawingi.xml file ## drawingi.xml reference drawingRels ## drawing rels reference an image in the media folder ## worksheetRels(sheet(i)) references drawings(j) sheet <- validateSheet(sheet) imageType <- regmatches(file, gregexpr("\\.[a-zA-Z]*$", file)) imageType <- gsub("^\\.", "", imageType) imageNo <- length((drawings[[sheet]])) + 1L imageRelNo <- length((drawings_rels[[sheet]])) + 1L linkRelNo <- length((drawings_rels[[sheet]])) + 2L mediaNo <- length(media) + 1L startCol <- convertFromExcelRef(startCol) ## update Content_Types if (!any(grepl(stri_join("image/", imageType), Content_Types))) { Content_Types <<- unique(c( sprintf( '', imageType, imageType ), Content_Types )) } ## drawings rels (Reference from drawings.xml to image file in media folder) drawings_rels[[sheet]] <<- c( drawings_rels[[sheet]], sprintf( '', imageRelNo, mediaNo, imageType ), if (!missing(address)) { sprintf( '', linkRelNo, address ) } ) ## write file path to media slot to copy across on save tmp <- file names(tmp) <- stri_join("image", mediaNo, ".", imageType) media <<- append(media, tmp) ## create drawing.xml anchor <- '' from <- sprintf( ' %s %s %s %s ', startCol - 1L, colOffset, startRow - 1L, rowOffset ) drawingsXML <- stri_join( anchor, from, sprintf( '', width, height ), genBasePic( imageNo, imageRelNo, ifelse( missing(address), "/", sprintf( '> ", "" ) ## append to workbook drawing drawings[[sheet]] <<- c(drawings[[sheet]], drawingsXML) } ) Workbook$methods( preSaveCleanUp = function() { ## Steps # Order workbook.xml.rels: # sheets -> style -> theme -> sharedStrings -> persons -> tables -> calcChain # Assign workbook.xml.rels children rIds, seq_along(workbook.xml.rels) # Assign workbook$sheets rIds 1:nSheets # ## drawings will always be r:id1 on worksheet ## tables will always have r:id equal to table xml file number tables/table(i).xml ## Every worksheet has a drawingXML as r:id 1 ## Every worksheet has a printerSettings as r:id 2 ## Tables from r:id 3 to nTables+3 - 1 ## HyperLinks from nTables+3 to nTables+3+nHyperLinks-1 ## vmlDrawing to have rId sheetRIds <- as.integer(unlist(regmatches( workbook$sheets, gregexpr('(?<=r:id="rId)[0-9]+', workbook$sheets, perl = TRUE) ))) nSheets <- length(sheetRIds) nExtRefs <- length(externalLinks) nPivots <- length(pivotDefinitions) ## add a worksheet if none added if (nSheets == 0) { warning("Workbook does not contain any worksheets. A worksheet will be added.", call. = FALSE ) .self$addWorksheet("Sheet 1") nSheets <- 1L } ## get index of each child element for ordering sheetInds <- grep("(worksheets|chartsheets)/sheet[0-9]+\\.xml", workbook.xml.rels) stylesInd <- grep("styles\\.xml", workbook.xml.rels) themeInd <- grep("theme/theme[0-9]+.xml", workbook.xml.rels) connectionsInd <- grep("connections.xml", workbook.xml.rels) extRefInds <- grep("externalLinks/externalLink[0-9]+.xml", workbook.xml.rels) sharedStringsInd <- grep("sharedStrings.xml", workbook.xml.rels) tableInds <- grep("table[0-9]+.xml", workbook.xml.rels) personInds <- grep("person.xml", workbook.xml.rels) ## Reordering of workbook.xml.rels ## don't want to re-assign rIds for pivot tables or slicer caches pivotNode <- grep("pivotCache/pivotCacheDefinition[0-9].xml", workbook.xml.rels, value = TRUE) slicerNode <- grep("slicerCache[0-9]+.xml", workbook.xml.rels, value = TRUE) ## Reorder children of workbook.xml.rels workbook.xml.rels <<- workbook.xml.rels[c( sheetInds, extRefInds, themeInd, connectionsInd, stylesInd, sharedStringsInd, tableInds, personInds )] ## Re assign rIds to children of workbook.xml.rels workbook.xml.rels <<- unlist(lapply(seq_along(workbook.xml.rels), function(i) { gsub('(?<=Relationship Id="rId)[0-9]+', i, workbook.xml.rels[[i]], perl = TRUE ) })) workbook.xml.rels <<- c(workbook.xml.rels, pivotNode, slicerNode) if (!is.null(vbaProject)) { workbook.xml.rels <<- c( workbook.xml.rels, sprintf( '', 1L + length(workbook.xml.rels) ) ) } ## Reassign rId to workbook sheet elements, (order sheets by sheetId first) workbook$sheets <<- unlist(lapply(seq_along(workbook$sheets), function(i) { gsub('(?<= r:id="rId)[0-9]+', i, workbook$sheets[[i]], perl = TRUE) })) ## re-order worksheets if need to if (any(sheetOrder != seq_len(nSheets))) { workbook$sheets <<- workbook$sheets[sheetOrder] } ## preserve window size and position on save: bookViews <-workbook$bookViews xWindow <- getAttrs(bookViews, "xWindow")$xWindow yWindow <- getAttrs(bookViews, "yWindow")$yWindow windowWidth <- getAttrs(bookViews, "windowWidth")$windowWidth windowHeight <- getAttrs(bookViews, "windowHeight")$windowHeight ## re-assign tabSelected state <- rep.int("visible", nSheets) state[grepl("hidden", workbook$sheets)] <- "hidden" visible_sheet_index <- which(state %in% "visible")[[1]] visible_sheets <- which(state %in% "visible") workbook$bookViews <<- sprintf( '', xWindow, yWindow, windowWidth, windowHeight, visible_sheet_index - 1L, ActiveSheet - 1L ) for(i in seq_len(nSheets)) { worksheets[[i]]$sheetViews <<- sub( ' tabSelected="(1|true|false|0)"', ifelse( sheetOrder[ActiveSheet] == i, ' tabSelected="true"', ' tabSelected="false"' ), worksheets[[i]]$sheetViews, ignore.case = TRUE ) } # worksheets[[visible_sheet_index]]$sheetViews # worksheets[[visible_sheet_index]]$sheetViews <<- # sub( # '( tabSelected="0")|( tabSelected="false")', # ' tabSelected="1"', # worksheets[[visible_sheet_index]]$sheetViews, # ignore.case = TRUE # ) # if (nSheets > 1) { # for (i in (1:nSheets)[!(1:nSheets) %in% visible_sheet_index]) { # worksheets[[i]]$sheetViews <<- # sub( # ' tabSelected="(1|true|false|0)"', # ' tabSelected="false"', # worksheets[[i]]$sheetViews, # ignore.case = TRUE # ) # } # } if (length(workbook$definedNames) > 0) { sheetNames <- sheet_names[sheetOrder] belongTo <- getDefinedNamesSheet(workbook$definedNames) ## sheetNames is in re-ordered order (order it will be displayed) newId <- match(belongTo, sheetNames) - 1L oldId <- as.numeric(regmatches( workbook$definedNames, regexpr( '(?<= localSheetId=")[0-9]+', workbook$definedNames, perl = TRUE ) )) for (i in seq_along(workbook$definedNames)) { if (!is.na(newId[i])) { workbook$definedNames[[i]] <<- gsub( sprintf('localSheetId=\"%s\"', oldId[i]), sprintf('localSheetId=\"%s\"', newId[i]), workbook$definedNames[[i]], fixed = TRUE ) } } } ## update workbook r:id to match reordered workbook.xml.rels externalLink element if (length(extRefInds) > 0) { newInds <- as.integer(seq_along(extRefInds) + length(sheetInds)) workbook$externalReferences <<- stri_join( "", stri_join( sprintf('', newInds), collapse = "" ), "" ) } ## styles numFmtIds <- 50000L for (i in which(!isChartSheet)) { worksheets[[i]]$sheet_data$style_id <<- rep.int(x = as.integer(NA), times = worksheets[[i]]$sheet_data$n_elements) } prev_sheet <- 0L for (x in styleObjects) { if (length(x$rows) > 0 & length(x$cols) > 0) { this.sty <- x$style$copy() if (!is.null(this.sty$numFmt)) { if (this.sty$numFmt$numFmtId == 9999) { this.sty$numFmt$numFmtId <- numFmtIds numFmtIds <- numFmtIds + 1L } } ## convert sheet name to index sheet <- which(sheet_names == x$sheet) sId <- .self$updateStyles(this.sty) ## this creates the XML for styles.XML cells_to_style <- pair_rc(x$rows, x$cols) # Avoid recreating this if we're looking at the same sheet over and over if (sheet != prev_sheet) { existing_cells <- pair_rc(worksheets[[sheet]]$sheet_data$rows, worksheets[[sheet]]$sheet_data$cols) } ## In here we create any style_ids that don't yet exist in sheet_data worksheets[[sheet]]$sheet_data$style_id[existing_cells %in% cells_to_style] <<- sId new_cells_to_append <- which(!cells_to_style %in% existing_cells) if (length(new_cells_to_append) > 0) { worksheets[[sheet]]$sheet_data$style_id <<- c( worksheets[[sheet]]$sheet_data$style_id, rep.int(x = sId, times = length(new_cells_to_append)) ) worksheets[[sheet]]$sheet_data$rows <<- c(worksheets[[sheet]]$sheet_data$rows, x$rows[new_cells_to_append]) worksheets[[sheet]]$sheet_data$cols <<- c(worksheets[[sheet]]$sheet_data$cols, x$cols[new_cells_to_append]) worksheets[[sheet]]$sheet_data$t <<- c(worksheets[[sheet]]$sheet_data$t, rep(as.integer(NA), length(new_cells_to_append))) worksheets[[sheet]]$sheet_data$v <<- c( worksheets[[sheet]]$sheet_data$v, rep(as.character(NA), length(new_cells_to_append)) ) worksheets[[sheet]]$sheet_data$f <<- c( worksheets[[sheet]]$sheet_data$f, rep(as.character(NA), length(new_cells_to_append)) ) worksheets[[sheet]]$sheet_data$data_count <<- worksheets[[sheet]]$sheet_data$data_count + 1L worksheets[[sheet]]$sheet_data$n_elements <<- as.integer(length(worksheets[[sheet]]$sheet_data$rows)) } } } ## Make sure all rowHeights have rows, if not append them! for (i in seq_along(worksheets)) { if (length(rowHeights[[i]]) > 0) { rh <- as.integer(names(rowHeights[[i]])) missing_rows <- rh[!rh %in% worksheets[[i]]$sheet_data$rows] n <- length(missing_rows) if (n > 0) { worksheets[[i]]$sheet_data$style_id <<- c( worksheets[[i]]$sheet_data$style_id, rep.int(as.integer(NA), times = n) ) worksheets[[i]]$sheet_data$rows <<- c(worksheets[[i]]$sheet_data$rows, missing_rows) worksheets[[i]]$sheet_data$cols <<- c( worksheets[[i]]$sheet_data$cols, rep.int(as.integer(NA), times = n) ) worksheets[[i]]$sheet_data$t <<- c(worksheets[[i]]$sheet_data$t, rep(as.integer(NA), times = n)) worksheets[[i]]$sheet_data$v <<- c( worksheets[[i]]$sheet_data$v, rep(as.character(NA), times = n) ) worksheets[[i]]$sheet_data$f <<- c( worksheets[[i]]$sheet_data$f, rep(as.character(NA), times = n) ) worksheets[[i]]$sheet_data$data_count <<- worksheets[[i]]$sheet_data$data_count + 1L worksheets[[i]]$sheet_data$n_elements <<- as.integer(length(worksheets[[i]]$sheet_data$rows)) } } ## write colwidth and coloutline XML if (length(colWidths[[i]]) > 0) { invisible(.self$setColWidths(i)) } if (length(colOutlineLevels[[i]]) > 0) { invisible(.self$groupColumns(i)) } if(ActiveSheet==i) { worksheets[[sheetOrder[i]]]$sheetViews <<- stri_replace_all_regex( worksheets[[sheetOrder[i]]]$sheetViews, "tabSelected=\"(1|true|false|0)\"", paste0("tabSelected=\"true\"") ) } else { worksheets[[sheetOrder[i]]]$sheetViews <<- stri_replace_all_regex( worksheets[[sheetOrder[i]]]$sheetViews, "tabSelected=\"(1|true|false|0)\"", paste0("tabSelected=\"false\"") ) } } } ) Workbook$methods( addStyle = function(sheet, style, rows, cols, stack) { sheet <- sheet_names[[sheet]] if (length(styleObjects) == 0) { styleObjects <<- list(list( style = style, sheet = sheet, rows = rows, cols = cols )) } else if (stack) { nStyles <- length(styleObjects) ## ********** Assume all styleObjects cells have one a single worksheet ********** ## Loop through existing styleObjects newInds <- seq_along(rows) keepStyle <- rep(TRUE, nStyles) for (i in 1:nStyles) { if (sheet == styleObjects[[i]]$sheet) { ## Now check rows and cols intersect ## toRemove are the elements that the new style doesn't apply to, we remove these from the style object as it ## is copied, merged with the new style and given the new data points ex_row_cols <- pair_rc(styleObjects[[i]]$rows, styleObjects[[i]]$cols) new_row_cols <- pair_rc(rows, cols) ## mergeInds are the intersection of the two styles that will need to merge mergeInds <- which(new_row_cols %in% ex_row_cols) ## newInds are inds that don't exist in the current - this cumulates until the end to see if any are new newInds <- newInds[!newInds %in% mergeInds] ## If the new style does not merge if (length(mergeInds) > 0) { to_remove_from_this_style_object <- which(ex_row_cols %in% new_row_cols) ## the new style intersects with this styleObjects[[i]], we need to remove the intersecting rows and ## columns from styleObjects[[i]] if (length(to_remove_from_this_style_object) > 0) { ## remove these from style object styleObjects[[i]]$rows <<- styleObjects[[i]]$rows[-to_remove_from_this_style_object] styleObjects[[i]]$cols <<- styleObjects[[i]]$cols[-to_remove_from_this_style_object] if (length(styleObjects[[i]]$rows) == 0 | length(styleObjects[[i]]$cols) == 0) { keepStyle[i] <- FALSE } ## this style applies to no rows or columns anymore } ## append style object for intersecting cells ## we are appending a new style keepStyle <- c(keepStyle, TRUE) ## keepStyle is used to remove styles that apply to 0 rows OR 0 columns ## Merge Style and append to styleObjects styleObjects <<- append(styleObjects, list( list( style = mergeStyle(styleObjects[[i]]$style, newStyle = style), sheet = sheet, rows = rows[mergeInds], cols = cols[mergeInds] ) )) } } ## if sheet == styleObjects[[i]]$sheet } ## End of loop through styles ## remove any styles that no longer have any affect if (!all(keepStyle)) { styleObjects <<- styleObjects[keepStyle] } ## append style object for non-intersecting cells if (length(newInds) > 0) { styleObjects <<- append(styleObjects, list(list( style = style, sheet = sheet, rows = rows[newInds], cols = cols[newInds] ))) } } else { ## else we are not stacking styleObjects <<- append(styleObjects, list(list( style = style, sheet = sheet, rows = rows, cols = cols ))) } ## End if(length(styleObjects) > 0) else if(stack) {} } ) Workbook$methods( createNamedRegion = function(ref1, ref2, name, sheet, localSheetId = NULL) { name <- replaceIllegalCharacters(name) if (is.null(localSheetId)) { workbook$definedNames <<- c( workbook$definedNames, sprintf( '\'%s\'!%s:%s', name, sheet, ref1, ref2 ) ) } else { workbook$definedNames <<- c( workbook$definedNames, sprintf( '\'%s\'!%s:%s', name, localSheetId, sheet, ref1, ref2 ) ) } } ) Workbook$methods( validate_table_name = function(tableName) { tableName <- tolower(tableName) ## Excel forces named regions to lowercase if (nchar(tableName) > 255) { stop("tableName must be less than 255 characters.") } if (grepl("$", tableName, fixed = TRUE)) { stop("'$' character cannot exist in a tableName") } if (grepl(" ", tableName, fixed = TRUE)) { stop("spaces cannot exist in a table name") } # if(!grepl("^[A-Za-z_]", tableName, perl = TRUE)) # stop("tableName must begin with a letter or an underscore") if (grepl("R[0-9]+C[0-9]+", tableName, perl = TRUE, ignore.case = TRUE )) { stop("tableName cannot be the same as a cell reference, such as R1C1") } if (grepl("^[A-Z]{1,3}[0-9]+$", tableName, ignore.case = TRUE)) { stop("tableName cannot be the same as a cell reference") } if (tableName %in% attr(tables, "tableName")) { stop(sprintf("Table with name '%s' already exists!", tableName)) } return(tableName) } ) Workbook$methods( check_overwrite_tables = function(sheet, new_rows, new_cols, error_msg = "Cannot overwrite existing table with another table.", check_table_header_only = FALSE) { ## check not overwriting another table if (length(tables) > 0) { tableSheets <- attr(tables, "sheet") sheetNo <- validateSheet(sheet) to_check <- which(tableSheets %in% sheetNo & !grepl("openxlsx_deleted", attr(tables, "tableName"), fixed = TRUE)) if (length(to_check) > 0) { ## only look at tables on this sheet exTable <- tables[to_check] rows <- lapply(names(exTable), function(rectCoords) { as.numeric(unlist(regmatches( rectCoords, gregexpr("[0-9]+", rectCoords) ))) }) cols <- lapply(names(exTable), function(rectCoords) { convertFromExcelRef(unlist(regmatches( rectCoords, gregexpr("[A-Z]+", rectCoords) ))) }) if (check_table_header_only) { rows <- lapply(rows, function(x) { c(x[1], x[1]) }) } ## loop through existing tables checking if any over lap with new table for (i in seq_along(exTable)) { existing_cols <- cols[[i]] existing_rows <- rows[[i]] if ((min(new_cols) <= max(existing_cols)) & (max(new_cols) >= min(existing_cols)) & (min(new_rows) <= max(existing_rows)) & (max(new_rows) >= min(existing_rows))) { stop(error_msg) } } } ## end if(sheet %in% tableSheets) } ## end (length(tables) > 0) invisible(0) } ) Workbook$methods( show = function() { exSheets <- sheet_names nSheets <- length(exSheets) nImages <- length(media) nCharts <- length(charts) nStyles <- length(styleObjects) aSheet <- ActiveSheet exSheets <- replaceXMLEntities(exSheets) showText <- "A Workbook object.\n" if (length(aSheet) == 0) { aSheet <- 1 } ## worksheets if (nSheets > 0) { showText <- c(showText, "\nWorksheets:\n") sheetTxt <- lapply(1:nSheets, function(i) { tmpTxt <- sprintf('Sheet %s: "%s"\n', i, exSheets[[i]]) if (length(rowHeights[[i]]) > 0) { tmpTxt <- append( tmpTxt, c( "\n\tCustom row heights (row: height)\n\t", stri_join( sprintf("%s: %s", names(rowHeights[[i]]), round(as.numeric( rowHeights[[i]] ), 2)), collapse = ", ", sep = " " ) ) ) } if (length(outlineLevels[[i]]) > 0) { tmpTxt <- append( tmpTxt, c( "\n\tGrouped rows:\n\t", stri_join( sprintf("%s", names(outlineLevels[[i]])), collapse = ", ", sep = " " ) ) ) } if (length(colOutlineLevels[[i]]) > 0) { tmpTxt <- append( tmpTxt, c( "\n\tGrouped columns:\n\t", stri_join( sprintf("%s", names(colOutlineLevels[[i]])), collapse = ", ", sep = " " ) ) ) } if (length(colWidths[[i]]) > 0) { cols <- names(colWidths[[i]]) widths <- unname(colWidths[[i]]) widths[widths != "auto"] <- as.numeric(widths[widths != "auto"]) tmpTxt <- append( tmpTxt, c( "\n\tCustom column widths (column: width)\n\t ", stri_join( sprintf("%s: %s", cols, substr(widths, 1, 5)), sep = " ", collapse = ", " ) ) ) tmpTxt <- c(tmpTxt, "\n") } c(tmpTxt, "\n\n") }) showText <- c(showText, sheetTxt, "\n") } else { showText <- c(showText, "\nWorksheets:\n", "No worksheets attached\n") } ## images if (nImages > 0) { showText <- c( showText, "\nImages:\n", sprintf('Image %s: "%s"\n', 1:nImages, media) ) } if (nCharts > 0) { showText <- c( showText, "\nCharts:\n", sprintf('Chart %s: "%s"\n', 1:nCharts, charts) ) } if (nSheets > 0) { showText <- c(showText, sprintf( "Worksheet write order: %s\n", stri_join(sheetOrder, sep = " ", collapse = ", ") )) } if (aSheet >= 1 & nSheets > 0) { showText <- c( showText, sprintf( 'Active Sheet %s: "%s" \n\tPosition: %s\n', sheetOrder[aSheet], exSheets[[sheetOrder[aSheet]]], aSheet ) ) } cat(unlist(showText)) cat("\n") } ) ## TO BE DEPRECATED Workbook$methods( conditionalFormatCell = function(sheet, startRow, endRow, startCol, endCol, dxfId, formula, type) { sheet <- validateSheet(sheet) sqref <- stri_join(getCellRefs(data.frame( "x" = c(startRow, endRow), "y" = c(startCol, endCol) )), collapse = ":") ## Increment priority of conditional formatting rule if (length((worksheets[[sheet]]$conditionalFormatting)) > 0) { for (i in rev(seq_along(worksheets[[sheet]]$conditionalFormatting))) { worksheets[[sheet]]$conditionalFormatting[[i]] <<- gsub('(?<=priority=")[0-9]+', i + 1L, worksheets[[sheet]]$conditionalFormatting[[i]], perl = TRUE ) } } nms <- c(names(worksheets[[sheet]]$conditionalFormatting), sqref) if (type == "expression") { cfRule <- sprintf( '%s', dxfId, formula ) } else if (type == "dataBar") { if (length(formula) == 2) { negColour <- formula[[1]] posColour <- formula[[2]] } else { posColour <- formula negColour <- "FFFF0000" } guid <- stri_join( "F7189283-14F7-4DE0-9601-54DE9DB", 40000L + length(worksheets[[sheet]]$extLst) ) cfRule <- sprintf( '{%s}', posColour, guid ) } else if (length(formula) == 2L) { cfRule <- sprintf( '', formula[[1]], formula[[2]] ) } else { cfRule <- sprintf( '', formula[[1]], formula[[2]], formula[[3]] ) } worksheets[[sheet]]$conditionalFormatting <<- append(worksheets[[sheet]]$conditionalFormatting, cfRule) names(worksheets[[sheet]]$conditionalFormatting) <<- nms invisible(0) } ) Workbook$methods( loadStyles = function(stylesXML) { ## Build style objects from the styles XML stylesTxt <- readUTF8(stylesXML) stylesTxt <- removeHeadTag(stylesTxt) ## Indexed colours vals <- getNodes(xml = stylesTxt, tagIn = "") if (length(vals) > 0) { styles$indexedColors <<- stri_join("", vals, "") } ## dxf (don't need these, I don't think) dxf <- getNodes(xml = stylesTxt, tagIn = " 0) { dxf <- getNodes(xml = dxf[[1]], tagIn = "") if (length(dxf) > 0) { styles$dxfs <<- dxf } } tableStyles <- getChildlessNode(stylesTxt, tag = "tableStyles") if (length(tableStyles) > 0) { styles$tableStyles <<- tableStyles } extLst <- getChildlessNode(stylesTxt, tag = "extLst") if (length(extLst) > 0) { styles$extLst <<- extLst } ## Number formats numFmts <- getChildlessNode(xml = stylesTxt, tag = "numFmt") numFmtFlag <- FALSE if (length(numFmts) > 0) { numFmtsIds <- sapply(numFmts, getAttr, tag = 'numFmtId="', USE.NAMES = FALSE) formatCodes <- sapply(numFmts, getAttr, tag = 'formatCode="', USE.NAMES = FALSE) numFmts <- lapply(seq_along(numFmts), function(i) { list("numFmtId" = numFmtsIds[[i]], "formatCode" = formatCodes[[i]]) }) numFmtFlag <- TRUE } ## fonts will maintain, sz, color, name, family scheme if (grepl("", stylesTxt, fixed = TRUE)) { ## empty font node fonts <- getNodes(xml = stylesTxt, tagIn = "") borders <- substr( borders, start = regexpr("", borders)[1], stop = regexpr("", borders) - 1L ) borders <- getNodes(xml = borders, tagIn = "", stri_join( names(attr), '="', attr, '"', collapse = " ", sep = "" ) ) if (!is.null(type) | !is.null(password)) workbook$apps <<- sprintf("%i", type) } else { workbook$workbookProtection <<- "" } } ) Workbook$methods( addCreator = function(Creator = NULL) { if (!is.null(Creator)) { current_creator <- stri_match(core, regex = "(.*?)")[1, 2] core <<- stri_replace_all_fixed( core, pattern = current_creator, replacement = stri_c(current_creator, Creator, sep = ";") ) } } ) Workbook$methods( getCreators = function() { current_creator <- stri_match(core, regex = "(.*?)")[1, 2] current_creator_vec <- as.character(stri_split_fixed( str = current_creator, pattern = ";", simplify = TRUE )) return(current_creator_vec) } ) Workbook$methods( changeLastModifiedBy = function(LastModifiedBy = NULL) { if (!is.null(LastModifiedBy)) { current_LastModifiedBy <- stri_match(core, regex = "(.*?)")[1, 2] core <<- stri_replace_all_fixed( core, pattern = current_LastModifiedBy, replacement = LastModifiedBy ) } } ) Workbook$methods( setactiveSheet = function(activeSheet = NULL) { if (is.character(activeSheet)) { if (activeSheet %in% sheet_names) { ActiveSheet <<- which(sheet_names[sheetOrder] == activeSheet) } else { stop(paste(activeSheet, "doesn't exist as sheet name.")) } } if (is.integer(activeSheet)|is.numeric(activeSheet)) { if (activeSheet %in% seq_along(sheet_names)) { ActiveSheet <<- which(sheetOrder==activeSheet) }else { stop(paste(activeSheet, "doesn't exist as sheet index.")) } } for(i in seq_along(sheet_names)){ worksheets[[i]]$sheetViews <<- stri_replace_all_regex(worksheets[[i]]$sheetViews, "tabSelected=\"(1|true|false|0)\"", paste0("tabSelected=\"", ifelse(sheetOrder[ActiveSheet] == i,"true","false") ,"\"")) } } ) openxlsx/R/CommentClass.R0000644000176200001440000001617614374150317015066 0ustar liggesusers Comment <- setRefClass("Comment", fields = c( "text", "author", "style", "visible", "width", "height" ), methods = list() ) Comment$methods(initialize = function(text, author, style, visible = TRUE, width = 2, height = 4) { text <<- text author <<- author style <<- style visible <<- visible width <<- width height <<- height }) Comment$methods(show = function() { showText <- sprintf("Author: %s\n", author) showText <- c(showText, sprintf("Text:\n %s\n\n", paste(text, collapse = ""))) styleShow <- "Style:\n" if ("list" %in% class(style)) { for (i in seq_along(style)) { styleShow <- append(styleShow, sprintf("Font name: %s\n", style[[i]]$fontName[[1]])) ## Font name styleShow <- append(styleShow, sprintf("Font size: %s\n", style[[i]]$fontSize[[1]])) ## Font size styleShow <- append(styleShow, sprintf("Font colour: %s\n", gsub("^FF", "#", style[[i]]$fontColour[[1]]))) ## Font colour ## Font decoration if (length(style[[i]]$fontDecoration) > 0) { styleShow <- append(styleShow, sprintf("Font decoration: %s\n", paste(style[[i]]$fontDecoration, collapse = ", "))) } styleShow <- append(styleShow, "\n\n") } } else { styleShow <- append(styleShow, sprintf("Font name: %s \n", style$fontName[[1]])) ## Font name styleShow <- append(styleShow, sprintf("Font size: %s \n", style$fontSize[[1]])) ## Font size styleShow <- append(styleShow, sprintf("Font colour: %s \n", gsub("^FF", "#", style$fontColour[[1]]))) ## Font colour ## Font decoration if (length(style$fontDecoration) > 0) { styleShow <- append(styleShow, sprintf("Font decoration: %s \n", paste(style$fontDecoration, collapse = ", "))) } styleShow <- append(styleShow, "\n\n") } showText <- paste0(paste(showText, collapse = ""), paste(styleShow, collapse = ""), collapse = "") cat(showText) }) #' @name createComment #' @title create a Comment object #' @description Create a cell Comment object to pass to writeComment() #' @param comment Comment text. Character vector. #' @param author Author of comment. Character vector of length 1 #' @param style A Style object or list of style objects the same length as comment vector. See [createStyle()]. #' @param visible TRUE or FALSE. Is comment visible. #' @param width,height Width and height of textbook (in number of cells); #' doubles are rounded with \code{base::round()} #' @export #' @seealso [writeComment()] #' @examples #' wb <- createWorkbook() #' addWorksheet(wb, "Sheet 1") #' #' c1 <- createComment(comment = "this is comment") #' writeComment(wb, 1, col = "B", row = 10, comment = c1) #' #' s1 <- createStyle(fontSize = 12, fontColour = "red", textDecoration = c("BOLD")) #' s2 <- createStyle(fontSize = 9, fontColour = "black") #' #' c2 <- createComment(comment = c("This Part Bold red\n\n", "This part black"), style = c(s1, s2)) #' c2 #' #' writeComment(wb, 1, col = 6, row = 3, comment = c2) #' \dontrun{ #' saveWorkbook(wb, file = "createCommentExample.xlsx", overwrite = TRUE) #' } createComment <- function(comment, author = Sys.getenv("USERNAME"), style = NULL, visible = TRUE, width = 2, height = 4) { if (!is.character(comment)) { stop("comment argument must be a character vector") } assert_character1(author) assert_numeric1(width) assert_numeric1(height) assert_true_false1(visible) width <- round(width) height <- round(height) if (is.null(style)) { style <- createStyle(fontName = "Tahoma", fontSize = 9, fontColour = "black") } author <- replaceIllegalCharacters(author) comment <- replaceIllegalCharacters(comment) invisible(Comment$new(text = comment, author = author, style = style, visible = visible, width = width[1], height = height[1])) } #' @name writeComment #' @title write a cell comment #' @description Write a Comment object to a worksheet #' @param wb A workbook object #' @param sheet A vector of names or indices of worksheets #' @param col Column a column number of letter #' @param row A row number. #' @param comment A Comment object. See [createComment()]. #' @param xy An alternative to specifying `col` and #' `row` individually. A vector of the form #' `c(col, row)`. #' @export #' @seealso [createComment()] #' @examples #' wb <- createWorkbook() #' addWorksheet(wb, "Sheet 1") #' #' c1 <- createComment(comment = "this is comment") #' writeComment(wb, 1, col = "B", row = 10, comment = c1) #' #' s1 <- createStyle(fontSize = 12, fontColour = "red", textDecoration = c("BOLD")) #' s2 <- createStyle(fontSize = 9, fontColour = "black") #' #' c2 <- createComment(comment = c("This Part Bold red\n\n", "This part black"), style = c(s1, s2)) #' c2 #' #' writeComment(wb, 1, col = 6, row = 3, comment = c2) #' \dontrun{ #' saveWorkbook(wb, file = "writeCommentExample.xlsx", overwrite = TRUE) #' } writeComment <- function(wb, sheet, col, row, comment, xy = NULL) { if (!"Workbook" %in% class(wb)) { stop("First argument must be a Workbook.") } if (!"Comment" %in% class(comment)) { stop("comment argument must be a Comment object") } if (length(comment$style) == 1) { rPr <- wb$createFontNode(comment$style) } else { rPr <- sapply(comment$style, function(x) wb$createFontNode(x)) } rPr <- gsub("font>", "rPr>", rPr) sheet <- wb$validateSheet(sheet) ## All input conversions/validations if (!is.null(xy)) { if (length(xy) != 2) { stop("xy parameter must have length 2") } col <- xy[[1]] row <- xy[[2]] } if (!is.numeric(col)) { col <- convertFromExcelRef(col) } ref <- paste0(convert_to_excel_ref(cols = col, LETTERS = LETTERS), row) comment_list <- list( "ref" = ref, "author" = comment$author, "comment" = comment$text, "style" = rPr, "clientData" = genClientData(col, row, visible = comment$visible, height = comment$height, width = comment$width) ) wb$comments[[sheet]] <- append(wb$comments[[sheet]], list(comment_list)) invisible(wb) } #' @name removeComment #' @title Remove a comment from a cell #' @description Remove a cell comment from a worksheet #' @param wb A workbook object #' @param sheet A vector of names or indices of worksheets #' @param cols Columns to delete comments from #' @param rows Rows to delete comments from #' @param gridExpand If `TRUE`, all data in rectangle min(rows):max(rows) X min(cols):max(cols) #' will be removed. #' @export #' @seealso [createComment()] #' @seealso [writeComment()] removeComment <- function(wb, sheet, cols, rows, gridExpand = TRUE) { sheet <- wb$validateSheet(sheet) assert_class(wb, "Workbook") cols <- convertFromExcelRef(cols) rows <- as.integer(rows) ## rows and cols need to be the same length if (gridExpand) { combs <- expand.grid(rows, cols) rows <- combs[, 1] cols <- combs[, 2] } if (length(rows) != length(cols)) { stop("Length of rows and cols must be equal.") } comb <- paste0(convert_to_excel_ref(cols = cols, LETTERS = LETTERS), rows) toKeep <- !sapply(wb$comments[[sheet]], "[[", "ref") %in% comb wb$comments[[sheet]] <- wb$comments[[sheet]][toKeep] } openxlsx/R/utils.R0000644000176200001440000000264714656134061013635 0ustar liggesusers#' If NULL then ... #' #' Replace NULL #' #' @param x A value to check #' @param y A value to substitute if x is null #' @examples #' \dontrun{ #' x <- NULL #' x <- x %||% "none" #' x <- x %||% NA #' } #' #' @name if_null_then `%||%` <- function(x, y) if (is.null(x)) y else x is_not_class <- function(x, class) { !(inherits(x, class) | is.null(x)) } is_true_false <- function(x) { is.logical(x) && length(x) == 1L && !is.na(x) } pair_rc <- function(r, c) { # Assumes that there can't be more than 10M columns # Excel allows 16,384 # Google Sheets allows 18,278 r+c*1e-7 } do_call_params <- function(fun, params, ..., .map = FALSE) { fun <- match.fun(fun) call_params <- c(list(...), params[names(params) %in% names(formals(fun))]) call_params <- lapply(call_params, function(x) if (is.object(x)) list(x) else x) call_fun <- if (.map) { function(...) mapply(fun, ..., MoreArgs = NULL, SIMPLIFY = FALSE, USE.NAMES = FALSE) } else { fun } do.call(call_fun, call_params) } # sets temporary options # option() returns the original values get_set_options <- function() { options( # increase scipen to avoid writing in scientific scipen = 200, OutDec = ".", digits = 22 ) } #' helper function to create tempory directory for testing purpose #' @param name for the temp file #' @export temp_xlsx <- function(name = "temp_xlsx") { tempfile(pattern = paste0(name, "_"), fileext = ".xlsx") } openxlsx/R/asserts.R0000644000176200001440000000442714374150317014156 0ustar liggesusers# Assertions for parameter validates # These should be used at the beginning of functions to stop execution early assert_class <- function(x, class, or_null = FALSE) { sx <- as.character(substitute(x)) ok <- inherits(x, class) if (or_null) { ok <- ok | is.null(x) class <- c(class, "null") } if (!ok) { msg <- sprintf("%s must be of class %s", sx, paste(class, collapse = " or ")) stop(msg, call. = FALSE) } } assert_length <- function(x, n) { stopifnot(is.integer(n)) if (length(x) != n) { msg <- sprintf("%s must be of length %iL", substitute(x), n) stop(msg, call. = FALSE) } } assert_true_false1 <- function(x) { if (!is_true_false(x)) { stop(substitute(x), " must be TRUE or FALSE", call. = FALSE) } } assert_true_false <- function(x) { ok <- is.logical(x) & !is.na(x) if (!ok) { stop(substitute(x), " must be a logical vector with NAs", call. = FALSE) } } assert_character1 <- function(x, scalar = FALSE) { ok <- is.character(x) && length(x) == 1L if (scalar) { ok <- ok & nchar(x) == 1L } if (!ok) { stop(substitute(x), " must be a character vector of length 1L", call. = FALSE) } } assert_unique <- function(x, case_sensitive = TRUE) { msg <- paste0(substitute(x), " must be a unique vector") if (!case_sensitive) { x <- tolower(x) msg <- paste0(msg, " (case sensitive)") } if (anyDuplicated(x) != 0L) { stop(msg, call. = FALSE) } } assert_numeric1 <- function(x, scalar = FALSE) { msg <- paste0(substitute(x), " must be a ") ok <- is.numeric(x) & length(x) == 1L if (scalar) { ok <- ok && nchar(x) == 1L msg <- paste0(msg, "single number") } else { msg <- paste0(msg, "numeric vector of length 1L") } if (!ok) { stop(msg, call. = FALSE) } } # validates --------------------------------------------------------------- validate_StyleName <- function(x) { m <- valid_StyleNames[match(tolower(x), valid_StyleNames_low)] if (anyNA(m)) { stop( "Invalid table style: ", paste0(sprintf("'%s'", x[is.na(m)]), collapse = ", "), call. = FALSE ) } m } valid_StyleNames <- c("none", paste0("TableStyleLight", 1:21), paste0("TableStyleMedium", 1:28), paste0("TableStyleDark", 1:11)) valid_StyleNames_low <- tolower(valid_StyleNames) openxlsx/R/openxlsx-package.R0000644000176200001440000000013614374150317015734 0ustar liggesusers## usethis namespace: start #' @importFrom lifecycle deprecate_soft ## usethis namespace: end openxlsx/R/writexlsx.R0000644000176200001440000000440114656123677014547 0ustar liggesusers #' @name write.xlsx #' @title write data to an xlsx file #' @description write a data.frame or list of data.frames to an xlsx file #' @author Alexander Walker, Jordan Mark Barbone #' @inheritParams buildWorkbook #' @param file A file path to save the xlsx file #' @param overwrite Overwrite existing file (Defaults to `TRUE` as with `write.table`) #' @param ... Additional arguments passed to [buildWorkbook()]; see details #' #' @inheritSection buildWorkbook Optional Parameters #' #' @seealso [addWorksheet()] #' @seealso [writeData()] #' @seealso [createStyle()] for style parameters #' @seealso [buildWorkbook()] #' @return A workbook object #' @examples #' #' ## write to working directory #' options("openxlsx.borderColour" = "#4F80BD") ## set default border colour #' \dontrun{ #' write.xlsx(iris, file = "writeXLSX1.xlsx", colNames = TRUE, borders = "columns") #' write.xlsx(iris, file = "writeXLSX2.xlsx", colNames = TRUE, borders = "surrounding") #' } #' #' #' hs <- createStyle( #' textDecoration = "BOLD", fontColour = "#FFFFFF", fontSize = 12, #' fontName = "Arial Narrow", fgFill = "#4F80BD" #' ) #' \dontrun{ #' write.xlsx(iris, #' file = "writeXLSX3.xlsx", #' colNames = TRUE, borders = "rows", headerStyle = hs #' ) #' } #' #' ## Lists elements are written to individual worksheets, using list names as sheet names if available #' l <- list("IRIS" = iris, "MTCATS" = mtcars, matrix(runif(1000), ncol = 5)) #' \dontrun{ #' write.xlsx(l, "writeList1.xlsx", colWidths = c(NA, "auto", "auto")) #' } #' #' ## different sheets can be given different parameters #' \dontrun{ #' write.xlsx(l, "writeList2.xlsx", #' startCol = c(1, 2, 3), startRow = 2, #' asTable = c(TRUE, TRUE, FALSE), withFilter = c(TRUE, FALSE, FALSE) #' ) #' } #' #' # specify column widths for multiple sheets #' \dontrun{ #' write.xlsx(l, "writeList2.xlsx", colWidths = 20) #' write.xlsx(l, "writeList2.xlsx", colWidths = list(100, 200, 300)) #' write.xlsx(l, "writeList2.xlsx", colWidths = list(rep(10, 5), rep(8, 11), rep(5, 5))) #' } #' #' @export write.xlsx <- function(x, file, asTable = FALSE, overwrite = TRUE, ...) { if ("matrix" %in% class(x)){ x <- as.data.frame(x) } wb <- buildWorkbook(x, asTable = asTable, ...) saveWorkbook(wb, file = file, overwrite = overwrite) invisible(wb) } openxlsx/R/sysdata.rda0000644000176200001440000001172214656123677014517 0ustar liggesusersBZh91AY&SY¥;Òt±ÿÿÿÿÿÿøcPÕÄ€ø@0” T¨%I*ª ” ‰UR5PP€ ¢´Td&`˜&0À€Ôð¡P€&`˜&0À€“Õ))¥M   HI’i§”ÓLŒ†4šdÀŒ G¡¨ h 1< U@A4h “Tñ6…6ˆÆHÓ(Ñ 4ÐÓC¦€ ï+ê ?’úê"µ)þƒ ‘U œ ¨t`èf`gm ôýÙˆ=³†ìðA©DU}±]Á¨;^ñ{ïñÓ—<Àº0…S  @7UtA”H‹±ƒjfÎDS¹$è¼8€Ê »€:®¾çïñ\ ;«'SEbˆø~OZÁ¼µâ­ $‚¨l$˜Vsɬ»D°’šðuªY‚Š2•$Dãe¼(á°AZ<'"­6IDŠ"Ìd—„\`‚CA°j„†--XÝ]P¢ÈjŽ:a¤E&“«l4]I!A©)X\0ÊÕ'iVyì‰bT¬ ´v­®X¨½lK2Ìß-ÌÌÜÌͱ)-kYÙˆ‰bˆø"²éŸÔìu’Å…Qî:Ým.¿Óßnn›ÚÈÂb!€Çí}wÝ}•9¾¼ªìRý·ÚaµƒL[VPÉl°~µqÁu~ÎŒYÛ]vÌßø¿3÷õ73Qƒ%³ØÙ÷0bÁ¹D¥‹ >Û5–YöÔd»7&ºF¾ª³{ª(–Õ¾í•YgïÎÕÌÁ±‹J¸´ho6¸¬É¡†[dÁ<Ù¹YòáÃ9ض‘,qÅHÝÌÏïbÁ»•mK5ösª®S–S͆N*74N,hÁ¢ê2¿E±bh»&K¹[Ò»‘÷Ø0]&8YÅf qÖ›¦6e›jåãH¥«ÆUZx+¥f)—ÝÍÁ›{v9­Lœ9ý>Ì彑®Ü} #Ý ‚Àªåª"! J&‚¨Š`JZŒ $@B%[P .*‚’ #"„ 0,$€«(¢Ã$ «é÷Cük@0é`ˆnú<… €!€•`"aʪÙ}ÓIX¤5¢Ø¶65©›!µ±kµ­XÔQ¨ÖDh4QBÆ4 „% *"B’ª°CJ 0€ÿW©Ÿ4‡!W)Ö9„0ùd( ˆ0=à¿î@ •Y”†|Q@• €„ BR!` ” @XH†=TÖE=€pEQv$g|ãÌö½”‰•Q);¡2^ˆ^z¾„Ç1Ìkåo1ÿ(*È"#é>éž9Ôò ðÎÅ–KÝzå8J”ú*GÄþµU.÷Q/ƒTå[´V±{Y70]ƒoÓ™ª¬ï3E_ºLâ¹f-Y6.%&ö,Ú¯šcú”UšfØ¡ŠÊ2PŹFÖ«—1Å4QžYªúUÉ‚Ì/UZ¬ªRÚ³¹6*]f ê•JÍŠ1d•ÖmUbÅu‰nf̹ƒGÊ«1vMWfØÅ‚í¾Fj4oЮէs@sŒƒâžOLó@DSÃòšê™”Ò–l‡ôuøëÇNºuEK\®çk·.nUÙ©#XfRš¼ßÕuå¾ÚmÇ;j'9¥\7lV.·#$–5J™¡®Ë`†D&V £lxspæM½·m„¬(•L®W5Ô×]ÊÔ›»­\mº¯nèZ”JkÎÈe¡’¦ Ä\"! ˜2PãSpq’uiscyu»js’KÛ»eM±[Å®¡¤S"˜Ha;Í:°2Q’ƒl  $BeM³j‘" XÀN ,°Æ N8ÚÒœà>×ƲÂÃ7QD1A<«0âSMfR£”Ë ëXƒoŽh ¦' I`Å()KU¯M®ecW¥Zã ›cf¦lÕMë©I1¡ÄÀL 3ªÍ0FœÛA‘…ÞÿnW¿¸Ån]Y–°(QÈ¥`"É^ ‰Lî¨j+ ¥¦Í­½6Æ×mTei¦Ô–š™­@FÙ8‘2rÞy‚7ÈѺUV”ÔR•“iç[¢Vj4I#R¥)-‘ˆáD!@KšÒhŠ`ªT JC…N+´*dD’´¤²1K0UC 2G8JáÁœù–Ž´qµ¾ e™±†€’F É«o#JÙR©®è¨×wxìT³ÆÕÉ›$hki-•0Ì m` „µ#L´¬Rš‘±Y™9JöË]• áàÑi4ZŠS€¥(F($ 1‘“–m¶í•S9*—wAΓ±j‹Z–©5©-M’Æ”[6’C$8G¶„tDS<m˜fRÎrÓµòÍŒ”%!,@››0ª[®ÛguÖ$2™*„‰s iD*“\&FÙ¦ÒTÙ©²jJh£F«Dñ‰‡ò4NßpÒdTûÛtØÙ4Ve Ò)i$)Š¡¥bX`%ß›@è¡-B44A±6ÖŒüo]¶·„Û4›j6…dÕ 4©,Ûà-t7=ÿ {’é%>ϯrV™µŠš”ÈR69T"YŽSJÊ I˜Ö9 3H*Y¥J¨¡h ’+L¤SE"Ñ#D± $HE¦;ëO6&m™.ÏåLÄr9j3DmÁ¾éĮКb!$M@d&„1böõylh ÉR"2Q(¥R¦T 8)“JÒÐ5ƒe„¨Ù25)©’%!L[+Ÿ ÷ûvöfñÌ‚Œ“ˆ"¢‡[kGÅ¡†«š¹­]n:ÔÈ´¢–Ö•†«®ÚÛ’š”‹6šš*I›-DšËh.÷ôóÏ;Zlܼ^{qï=¹J=NÚ¹k–Öh¥R–×5JRY-k ^Ë\‹XK²mL™5•…¡¦°’e^&ñç’”)δš5cÆñÆÙ<e€eWJªé³c*˜¦·6”E1¥"+h¶×vµ»Íebm#i²R[)¦*é›Ýåy¥X=7½¨½ø­ˆÛ6và8j$Û1 É”g,`±­,«™d%ŠÖ[·[sa¤³eLe†hÔÅ“Zj&–æ®ÚQ‹Ýx÷]o—zïuÞzö W*©„h“Jj(il¥Ír»5&µ¦Øµ¢LÒ-J”ÑSY&Ôi¦jR™ &€ šßDoœe†ÛNðE o2eŠšx£QµW¥­½hÅXÚX(ŒU$ÔÔÔÒÊ‚½3yæ¼a©¸4oÆf\q°Z7)\™ê6”½ª6*£VõTQ±dY¢­ªíh²6¾Um]û*6}¦çߌó9‹£ƒìÑ1Fn ÚØ§ŒRÁ&j8è~zÉ6’É*¿ ‹3u$©±±w*실¢1o.àÍuX1p}W{¡‹ƒF¨Fn–ä·ºX78®»ƒ ñ"æŒ]oS•ôaält³EîAئ× ’‰t2IÅÌÌîdðfëlPÊ©—RŽ”`Íš%\¬’åt4<«:—PYµÒ”¢;…Ø*ކ¥Ê–nQèh»Ê³ÆÖö=Iïž”CR7= :[jФ«‹‘bPzð~óÐä}gòºÑnv"*äÉAéw¹#£7;™ÅÔ»{¡åx= (v¸.àQGî³jÑd`ð»U)IœŸ‚6TdçQêI›z‰4AF‘¤Y±E\‡+ÔÂË÷Òeà«uS3œÒpšüIY-Ì•P”\Ák§²jQ ©FÅVhõ7¬–l "e){ñ*R‚R*Ú͉TC{P÷Þñˆ²3JI›zŒ›Ü[X!ÈÑ‘½½±eš.Áà¡ï%\‰jŒ›T{ë®’¦lYDQ$,ŽæÆóçKÐȳ%'aØ’u¢[›ŒŠ#ƒ‚®”~Nç•©W‘ð½Ó½2œ½Ç;¬º2r´u‘ÒåyÕy™û¸/bë¦d¸hR Õïvb•)Þó-µ’Q"P•¢~rªžáÚï{ŒX7Xêv³lJÌ!F”z%_FIw<ŽÅØ´4$I©F¨É&LݯÆEŒX9”Iº3L*¢¢…jÁvåÞÖ…×µér¨ï|[‘“‘:(šQH¢ToK•“âͯ+’v2böº†Æª.Œ^‡Œ²äºPÕÊ{Oyð¾‰è\ÅÊÜïqIµÈõ9Ôt5ls9Y ¯¸Ú‹ž$|ŽÖ¯[{Dd ¤oUÖØÚ(棩J9õúîÝÔ¤Ù)ïšO¶fBóu0*ÛÑÚôˆ‚îÇ’«Ï9èsžÌí—8E•Kè%G+«¹Võ˜3F$®UT•h²"¥–yÔ`&L0``JU,¡EQbŠvº[X±%âbˆÅ›2Š¡µQж]IYUR¢ƒr7™à¥¯JVd»r;’ô¾yì9Ñ(†Ô|L^Å^ñÌ£Ÿ‚È=亗Q¢†Ç¨£•ªÊ »sGá{_Q±‚_ÜâÕ›7¾Íó|Üë’ÑC¹D·ˆÉÌDbê;NEŒî† ÅÜ‹»^7+¥/+áy>{ò8w{‰È`å:Yµ>nC «i+®ò£7Uö?«±ÿ}RqE…Tä{®Ô˜;ÃFä¶$ñ,”%ãb£Ö”Yð¨£ÌÍEVbK.Ѝ¢ëœK”]î Ø]‚E•Öí*ä!éU“òª­cç>5ÛÜRÍ´EÞlÉjQ½åzHä1÷'¾=3ê—b¸µx”jÆÆ*(QFô£5PÁ*¥(”£F¡ÁL>4Ä,ª#Æðv,ùïê2#‰/R­]NV ²|Ê·8°QÎÞÑÄÚp%}‹(ÉTª•’ª‰\â‹:^¶Ö/;c­/™æZU¤6ÍSBJÕ)wª©jG‰0»z†) 1Pªë®‹±`Œ Bü©åU½¼²7;—l,C¡‘wZWr0UÐÐÄØD_TÃV­X3]D²*ÉS' `Ûñ,w73f5<«£Èó>“kS#sâUàÀ6ªQÅÚÌÌGÆ—9&Q+¢ÌÕP¹ç86$³U’îd6·yðñÙU>÷°ˆñ"¾Dd‘˜¾çÏ1àØ¹ÍGnC»£-(`(0‚%Œà¬ˆš`Mi6º_Yò@Bƒÿþ™‘ûÇB‚É ªv ÐL!áAE~Yºû` )*ƒÒFE$à{huÐ@?»{"‚&UM‘NÕCïÈ_ Œ…SÀ4|#À»î¦VZµj¬²l²Š¤ÔÖk½Ñ¨­¡Î¡úØ’Ö‚n@ÒRˆ“ @‘‹É@O‹"‚x,ÎÒéže”sÌà=G[ÿ¯üX5ŠŠ JÛM¶4ÁQG ª¾üü€"uÅÚXÔm²írÉhµ[X°)*²D)ˆ &‘=÷Ç ô‡J‹×A\ìP@”SL HÀbŠñ"!Do‰zý~Ú‚ Þ]ÿâîH§ §zAÀopenxlsx/R/openxlsx.R0000644000176200001440000001162714656134061014353 0ustar liggesusers#' xlsx reading, writing and editing. #' #' openxlsx simplifies the the process of writing and styling Excel xlsx files from R #' and removes the dependency on Java. #' #' @name openxlsx #' @docType package #' @useDynLib openxlsx, .registration=TRUE #' @importFrom zip zipr #' @importFrom utils download.file head menu unzip #' #' @seealso #' \itemize{ #' \item{`vignette("Introduction", package = "openxlsx")`} #' \item{`vignette("formatting", package = "openxlsx")`} #' \item{[writeData()]} #' \item{[writeDataTable()]} #' \item{[write.xlsx()]} #' \item{[read.xlsx()]} #' \item{[op.openxlsx()]} #' } #' for examples #' #' @details #' The openxlsx package uses global options, most to simplify formatting. These #' are stored in the `op.openxlsx` object. #' #' \describe{ #' \item{openxlsx.bandedCols}{FALSE} #' \item{openxlsx.bandedRows}{TRUE} #' \item{openxlsx.borderColour}{"black"} #' \item{openxlsx.borders}{"none"} #' \item{openxlsx.borderStyle}{"thin"} #' \item{openxlsx.compressionLevel}{"9"} #' \item{openxlsx.creator}{""} #' \item{openxlsx.dateFormat}{"mm/dd/yyyy"} #' \item{openxlsx.datetimeFormat}{"yyyy-mm-dd hh:mm:ss"} #' \item{openxlsx.headerStyle}{NULL} #' \item{openxlsx.keepNA}{FALSE} #' \item{openxlsx.na.string}{NULL} #' \item{openxlsx.numFmt}{NULL} #' \item{openxlsx.orientation}{"portrait"} #' \item{openxlsx.paperSize}{9} #' \item{openxlsx.tabColour}{"TableStyleLight9"} #' \item{openxlsx.tableStyle}{"TableStyleLight9"} #' \item{openxlsx.withFilter}{NA Whether to write data with or without a #' filter. If NA will make filters with `writeDataTable` and will not for #' `writeData`} #' } #' #' See the Formatting vignette for examples. #' #' Additional options #' #' "_PACKAGE" #' openxlsx Options #' #' See and get the openxlsx options #' #' @details #' #' `openxlsx_getOp()` retrieves the `"openxlsx"` options found in #' `op.openxlsx`. If none are set (currently `NULL`) retrieves the #' default option from `op.openxlsx`. This will also check that the #' intended option is a standard option (listed in `op.openxlsx`) and #' will provide a warning otherwise. #' #' `openxlsx_setOp()` is a safer way to set an option as it will first #' check that the option is a standard option (as above) before setting. #' #' @examples #' openxlsx_getOp("borders") #' op.openxlsx[["openxlsx.borders"]] #' #' @export #' @name openxlsx_options op.openxlsx <- list( openxlsx.bandedCols = FALSE, openxlsx.bandedRows = TRUE, openxlsx.borderColour = "black", openxlsx.borders = NULL, openxlsx.borderStyle = "thin", # Where is compressionLevel called? openxlsx.compressionLevel = 9, openxlsx.creator = "", openxlsx.dateFormat = "date", openxlsx.datetimeFormat = "longdate", openxlsx.hdpi = 300, openxlsx.header = NULL, openxlsx.headerStyle = NULL, openxlsx.firstColumn = NULL, openxlsx.firstFooter = NULL, openxlsx.firstHeader = NULL, openxlsx.footer = NULL, openxlsx.evenFooter = NULL, openxlsx.evenHeader = NULL, openxlsx.gridLines = TRUE, openxlsx.keepNA = FALSE, openxlsx.lastColumn = NULL, openxlsx.na.string = NULL, openxlsx.maxWidth = 250, openxlsx.minWidth = 3, openxlsx.numFmt = "GENERAL", openxlsx.oddFooter = NULL, openxlsx.oddHeader = NULL, openxlsx.orientation = "portrait", openxlsx.paperSize = 9, openxlsx.showGridLines = NA, openxlsx.tabColour = NULL, openxlsx.tableStyle = "TableStyleLight9", openxlsx.vdpi = 300, openxlsx.withFilter = NULL ) #' @param x An option name (`"openxlsx."` prefix optional) #' @param default A default value if `NULL` #' @rdname openxlsx_options #' @export openxlsx_getOp <- function(x, default = NULL) { if (length(x) != 1L || length(default) > 1L) { stop("x must be length 1 and default NULL or length 1", call. = FALSE) } x <- check_openxlsx_op(x) getOption(x, op.openxlsx[[x]]) %||% default } #' @param value The new value for the option (optional if x is a named list) #' @rdname openxlsx_options #' @export openxlsx_setOp <- function(x, value) { if (is.list(x)) { if (is.null(names(x))) { stop("x cannot be an unnamed list", call. = FALSE) } return(invisible(mapply(openxlsx_setOp, x = names(x), value = x))) } value <- as.list(value) names(value) <- check_openxlsx_op(x) options(value) } check_openxlsx_op <- function(x) { if (length(x) != 1L || !is.character(x)) { stop("option must be a character vector of length 1", call. = FALSE) } if (!grepl("^openxlsx[.]", x)) { x <- paste0("openxlsx.", x) } if (!x %in% names(op.openxlsx)) { warning( x, " is not a standard openxlsx option\nCheck spelling", call. = FALSE ) } x } openxlsx_resetOp <- function() { options(op.openxlsx) } openxlsx/R/openXL.R0000644000176200001440000000622514374150317013675 0ustar liggesusers#' @name openXL #' @title Open a Microsoft Excel file (xls/xlsx) or an openxlsx Workbook #' @author Luca Braglia #' @description This function tries to open a Microsoft Excel #' (xls/xlsx) file or an openxlsx Workbook with the proper #' application, in a portable manner. #' #' In Windows (c) and Mac (c), it uses system default handlers, #' given the file type. #' #' In Linux it searches (via `which`) for available xls/xlsx #' reader applications (unless `options('openxlsx.excelApp')` #' is set to the app bin path), and if it finds anything, sets #' `options('openxlsx.excelApp')` to the program choosen by #' the user via a menu (if many are present, otherwise it will #' set the only available). Currently searched for apps are #' Libreoffice/Openoffice (`soffice` bin), Gnumeric #' (`gnumeric`) and Calligra Sheets (`calligrasheets`). #' #' @param file path to the Excel (xls/xlsx) file or Workbook object. #' @usage openXL(file=NULL) #' @export openXL #' @examples #' # file example #' example(writeData) #' # openXL("writeDataExample.xlsx") #' #' # (not yet saved) Workbook example #' wb <- createWorkbook() #' x <- mtcars[1:6, ] #' addWorksheet(wb, "Cars") #' writeData(wb, "Cars", x, startCol = 2, startRow = 3, rowNames = TRUE) #' # openXL(wb) openXL <- function(file = NULL) { op <- get_set_options() on.exit(options(op), add = TRUE) if (is.null(file)) stop("A file has to be specified.") ## workbook handling if ("Workbook" %in% class(file)) { file <- file$saveWorkbook() } if (!file.exists(file)) stop("Non existent file or wrong path.") ## execution should be in background in order to not block R ## interpreter file <- normalizePath(file) userSystem <- Sys.info()["sysname"] if ("Linux" == userSystem) { if (is.null(app <- unlist(options("openxlsx.excelApp")))) { app <- chooseExcelApp() } myCommand <- paste(app, file, "&", sep = " ") system(command = myCommand) } else if ("Windows" == userSystem) { shell(shQuote(string = file), wait = FALSE) #nolint } else if ("Darwin" == userSystem) { myCommand <- paste0("open ", file) system(command = myCommand) } else { warning("Operating system not handled.") } } chooseExcelApp <- function() { m <- c( `Libreoffice/OpenOffice` = "soffice", `Calligra Sheets` = "calligrasheets", `Gnumeric` = "gnumeric" ) prog <- Sys.which(m) names(prog) <- names(m) nApps <- length(availProg <- prog["" != prog]) if (0 == nApps) { stop( "No applications (detected) available.\n", "Set options('openxlsx.excelApp'), instead." ) } else if (1 == nApps) { cat("Only", names(availProg), "found; I'll use it.\n") unnprog <- unname(availProg) options(openxlsx.excelApp = unnprog) invisible(unnprog) } else if (1 < nApps) { if (!interactive()) { stop( "Cannot choose an Excel file opener non-interactively.\n", "Set options('openxlsx.excelApp'), instead." ) } res <- menu(names(availProg), title = "Excel Apps availables") unnprog <- unname(availProg[res]) if (res > 0L) options(openxlsx.excelApp = unnprog) invisible(unname(unnprog)) } else { stop("Unexpected error.") } } openxlsx/R/chartsheet_class.R0000644000176200001440000000265114374150317016006 0ustar liggesusers #' @include class_definitions.R ChartSheet$methods(initialize = function(tabSelected = FALSE, tabColour = character(0), zoom = 100) { if (length(tabColour) > 0) { tabColour <- sprintf("%s", tabColour) } else { tabColour <- character(0) } if (zoom < 10) { zoom <- 10 } else if (zoom > 400) { zoom <- 400 } sheetPr <<- tabColour sheetViews <<- sprintf('', as.integer(zoom), as.integer(tabSelected)) pageMargins <<- '' drawing <<- '' hyperlinks <<- character(0) return(invisible(0)) }) ChartSheet$methods(get_prior_sheet_data = function() { xml <- '>' if (length(sheetPr) > 0) { xml <- paste(xml, sheetPr, collapse = "") } if (length(sheetViews) > 0) { xml <- paste(xml, sheetViews, collapse = "") } if (length(pageMargins) > 0) { xml <- paste(xml, pageMargins, collapse = "") } if (length(drawing) > 0) { xml <- paste(xml, drawing, collapse = "") } xml <- paste(xml, "") return(xml) }) openxlsx/R/workbook_column_widths.R0000644000176200001440000001645614664166646017311 0ustar liggesusers #' @include class_definitions.R Workbook$methods(setColWidths = function(sheet) { sheet <- validateSheet(sheet) widths <- colWidths[[sheet]] hidden <- attr(colWidths[[sheet]], "hidden", exact = TRUE) if (length(hidden) != length(widths)) { hidden <- rep("0", length(widths)) } cols <- names(colWidths[[sheet]]) autoColsInds <- widths %in% c("auto", "auto2") autoCols <- cols[autoColsInds] ## If any not auto if (any(!autoColsInds)) { widths[!autoColsInds] <- as.numeric(widths[!autoColsInds]) + 0.71 } ## If any auto if (length(autoCols) > 0) { ## only run if data on worksheet if (worksheets[[sheet]]$sheet_data$n_elements == 0) { missingAuto <- autoCols } else if (all(is.na(worksheets[[sheet]]$sheet_data$v))) { missingAuto <- autoCols } else { ## First thing - get base font max character width baseFont <- getBaseFont() baseFontName <- unlist(baseFont$name, use.names = FALSE) if (is.null(baseFontName)) { baseFontName <- "calibri" } else { baseFontName <- gsub(" ", ".", tolower(baseFontName), fixed = TRUE) if (!baseFontName %in% names(openxlsxFontSizeLookupTable)) { baseFontName <- "calibri" } } baseFontSize <- unlist(baseFont$size, use.names = FALSE) if (is.null(baseFontSize)) { baseFontSize <- 11 } else { baseFontSize <- as.numeric(baseFontSize) baseFontSize <- ifelse(baseFontSize < 8, 8, ifelse(baseFontSize > 36, 36, baseFontSize)) } baseFontCharWidth <- openxlsxFontSizeLookupTable[[baseFontName]][baseFontSize - 7] allCharWidths <- rep(baseFontCharWidth, worksheets[[sheet]]$sheet_data$n_elements) ######### ---------------------------------------------------------------- ## get char widths for each style object if (length(styleObjects) > 0 & any(!is.na(worksheets[[sheet]]$sheet_data$style_id))) { thisSheetName <- sheet_names[sheet] ## Calc font width for all styles on this worksheet styleIds <- worksheets[[sheet]]$sheet_data$style_id styObSubet <- styleObjects[sort(unique(styleIds))] stySubset <- lapply(styObSubet, "[[", "style") ## loop through stlye objects assignin a charWidth else baseFontCharWidth styleCharWidths <- sapply(stySubset, get_style_max_char_width, USE.NAMES = FALSE) ## Now assign all cells a character width allCharWidths <- styleCharWidths[worksheets[[sheet]]$sheet_data$style_id] allCharWidths[is.na(allCharWidths)] <- baseFontCharWidth } ## Now check for columns that are auto2 auto2Inds <- which(widths %in% "auto2") if (length(auto2Inds) > 0 & length(worksheets[[sheet]]$mergeCells) > 0) { ## get cell merges merged_cells <- regmatches(worksheets[[sheet]]$mergeCells, regexpr("[A-Z0-9]+:[A-Z0-9]+", worksheets[[sheet]]$mergeCells)) comps <- lapply(merged_cells, function(rectCoords) unlist(strsplit(rectCoords, split = ":"))) merge_cols <- lapply(comps, convertFromExcelRef) merge_cols <- lapply(merge_cols, function(x) x[x %in% cols[auto2Inds]]) ## subset to auto2Inds merge_rows <- lapply(comps, function(x) as.numeric(gsub("[A-Z]", "", x, perl = TRUE))) merge_rows <- merge_rows[sapply(merge_cols, length) > 0] merge_cols <- merge_cols[sapply(merge_cols, length) > 0] sd <- worksheets[[sheet]]$sheet_data if (length(merge_cols) > 0) { all_merged_cells <- lapply(seq_along(merge_cols), function(i) { expand.grid( "rows" = min(merge_rows[[i]]):max(merge_rows[[i]]), "cols" = min(merge_cols[[i]]):max(merge_cols[[i]]) ) }) all_merged_cells <- do.call("rbind", all_merged_cells) ## only want the sheet data in here refs <- pair_rc(all_merged_cells[[1]], all_merged_cells[[2]]) existing_cells <- pair_rc(worksheets[[sheet]]$sheet_data$rows, worksheets[[sheet]]$sheet_data$cols) keep <- which(!existing_cells %in% refs & !is.na(worksheets[[sheet]]$sheet_data$v)) sd <- Sheet_Data$new() sd$cols <- worksheets[[sheet]]$sheet_data$cols[keep] sd$t <- worksheets[[sheet]]$sheet_data$t[keep] sd$v <- worksheets[[sheet]]$sheet_data$v[keep] sd$n_elements <- length(sd$cols) allCharWidths <- allCharWidths[keep] } else { sd <- worksheets[[sheet]]$sheet_data } } else { sd <- worksheets[[sheet]]$sheet_data } ## Now that we have the max character width for the largest font on the page calculate the column widths calculatedWidths <- calc_column_widths( sheet_data = sd, sharedStrings = unlist(sharedStrings, use.names = FALSE), autoColumns = as.integer(autoCols), widths = allCharWidths, baseFontCharWidth = baseFontCharWidth, minW = openxlsx_getOp("minWidth", 3), maxW = openxlsx_getOp("maxWidth", 250) ) missingAuto <- autoCols[!autoCols %in% names(calculatedWidths)] widths[names(calculatedWidths)] <- calculatedWidths + 0.71 } widths[missingAuto] <- 9.15 } # Check if any conflicting existing levels if (any(cols %in% names(worksheets[[sheet]]$cols))) { for (i in intersect(cols, names(worksheets[[sheet]]$cols))) { width_hidden <- attr(colWidths[[sheet]], "hidden")[attr(colWidths[[sheet]], "names") == i] width_widths <- as.numeric(colWidths[[sheet]][attr(colWidths[[sheet]], "names") == i]) + 0.71 # If column already has a custom width, just update the width and hidden attributes if (grepl("customWidth", worksheets[[sheet]]$cols[[i]])) { worksheets[[sheet]]$cols[[i]] <<- sub('(width=\\").*?(\\"\\shidden=\\").*?(\\")', paste0("\\1", width_widths, "\\2", width_hidden, "\\3"), worksheets[[sheet]]$cols[[i]], perl = TRUE) } else { # If column exists, but doesn't have a custom width worksheets[[sheet]]$cols[[i]] <<- sub("((?<=hidden=\")(\\w)\")", paste0(width_hidden, "\" width=\"", width_widths, "\" customWidth=\"1\"/>"), worksheets[[sheet]]$cols[[i]], perl = TRUE) } } remaining_cols <- !cols %in% names(worksheets[[sheet]]$cols) cols <- cols[remaining_cols] widths <- widths[remaining_cols] hidden <- hidden[remaining_cols] } # Add remaining columns if (length(cols) > 0) { colNodes <- sprintf('', cols, cols, widths, hidden) names(colNodes) <- cols worksheets[[sheet]]$cols <<- append(worksheets[[sheet]]$cols, colNodes) } }) get_style_max_char_width <- function(thisStyle) { fN <- unlist(thisStyle$fontName, use.names = FALSE) if (is.null(fN)) { fN <- "calibri" } else { fN <- gsub(" ", ".", tolower(fN), fixed = TRUE) if (!fN %in% names(openxlsxFontSizeLookupTable)) { fN <- "calibri" } } fS <- unlist(thisStyle$fontSize, use.names = FALSE) if (is.null(fS)) { fS <- 11 } else { fS <- as.numeric(fS) fS <- ifelse(fS < 8, 8, ifelse(fS > 36, 36, fS)) } if ("BOLD" %in% thisStyle$fontDecoration) { styleMaxCharWidth <- openxlsxFontSizeLookupTableBold[[fN]][fS - 7] } else { styleMaxCharWidth <- openxlsxFontSizeLookupTable[[fN]][fS - 7] } return(styleMaxCharWidth) } openxlsx/R/setWindowSize.R0000644000176200001440000000410614656123677015316 0ustar liggesusers#' Set and Get Window Size for xlsx file #' #' @param wb A Workbook object #' @param xWindow the horizontal coordinate of the top left corner of the window #' @param yWindow the vertical coordinate of the top left corner of the window #' @param windowWidth the width of the window #' @param windowHeight the height of the window #' #' Set the size and position of the window when you open the xlsx file. The units are in twips. See #' [Microsoft's documentation for the xlsx standard](https://learn.microsoft.com/en-us/dotnet/api/documentformat.openxml.spreadsheet.workbookview?view=openxml-2.8.1) #' #' @export #' #' @examples #' ## Create Workbook object and add worksheets #' wb <- createWorkbook() #' addWorksheet(wb, "S1") #' getWindowSize(wb) #' setWindowSize(wb, windowWidth = 10000) setWindowSize <- function(wb, xWindow = NULL, yWindow = NULL, windowWidth = NULL, windowHeight= NULL) { bookViews <- wb$workbook$bookViews if(!is.null(xWindow)) { if(as.integer(xWindow) >= 0L) { bookViews <- sub("xWindow=\"\\d+", paste0("xWindow=\"", xWindow), bookViews) } else { stop("xWindow must be >= 0") } } if(!is.null(yWindow)) { if(as.integer(yWindow) >= 0L) { bookViews <- sub("yWindow=\"\\d+", paste0("yWindow=\"", yWindow), bookViews) } else { stop("yWindow must be >= 0") } } if(!is.null(windowWidth)) { if(as.integer(windowWidth) >= 100L) { bookViews <- sub("windowWidth=\"\\d+", paste0("windowWidth=\"", windowWidth), bookViews) } else { stop("windowWidth must be >= 100") } } if(!is.null(windowHeight)) { if(as.integer(windowHeight) >= 100L) { bookViews <- sub("windowHeight=\"\\d+", paste0("windowHeight=\"", windowHeight), bookViews) } else { stop("windowHeight must be >= 100") } } wb$workbook$bookViews <- bookViews } #' @rdname setWindowSize #' @export getWindowSize <- function(wb) { bookViews <- wb$workbook$bookViews c(getAttrs(bookViews, "xWindow"), getAttrs(bookViews, "yWindow"), getAttrs(bookViews, "windowWidth"), getAttrs(bookViews, "windowHeight")) } openxlsx/R/openxlsxCoerce.R0000644000176200001440000001272014656134061015467 0ustar liggesusers ## #' @noRd openxlsxCoerce <- function(x, rowNames) { UseMethod("openxlsxCoerce") } #' @noRd openxlsxCoerce.default <- function(x, rowNames) { x <- as.data.frame(x, stringsAsFactors = FALSE) return(x) } #' @noRd openxlsxCoerce.data.frame <- function(x, rowNames) { ## cbind rownames to x if (rowNames) { x <- cbind(data.frame("row names" = rownames(x), stringsAsFactors = FALSE), as.data.frame(x, stringsAsFactors = FALSE)) names(x)[[1]] <- "" } return(x) } #' @noRd openxlsxCoerce.data.table <- function(x, rowNames) { x <- as.data.frame(x, stringsAsFactors = FALSE) ## cbind rownames to x if (rowNames) { x <- cbind(data.frame("row names" = rownames(x), stringsAsFactors = FALSE), x) names(x)[[1]] <- "" } return(x) } #' @noRd openxlsxCoerce.matrix <- function(x, rowNames) { x <- as.data.frame(x, stringsAsFactors = FALSE) if (rowNames) { x <- cbind(data.frame("row names" = rownames(x), stringsAsFactors = FALSE), x) names(x)[[1]] <- "" } return(x) } #' @noRd openxlsxCoerce.array <- function(x, rowNames) { stop("array in writeData : currently not supported") } #' @noRd openxlsxCoerce.aov <- function(x, rowNames) { x <- summary(x) x <- cbind(x[[1]]) x <- cbind(data.frame("row name" = rownames(x), stringsAsFactors = FALSE), x) names(x)[1] <- "" return(x) } #' @noRd openxlsxCoerce.lm <- function(x, rowNames) { x <- as.data.frame(summary(x)[["coefficients"]]) x <- cbind(data.frame("Variable" = rownames(x), stringsAsFactors = FALSE), x) names(x)[1] <- "" return(x) } #' @noRd openxlsxCoerce.anova <- function(x, rowNames) { x <- as.data.frame(x) if (rowNames) { x <- cbind(data.frame("row name" = rownames(x), stringsAsFactors = FALSE), x) names(x)[1] <- "" } return(x) } #' @noRd openxlsxCoerce.glm <- function(x, rowNames) { x <- as.data.frame(summary(x)[["coefficients"]]) x <- cbind(data.frame("row name" = rownames(x), stringsAsFactors = FALSE), x) names(x)[1] <- "" return(x) } #' @noRd openxlsxCoerce.table <- function(x, rowNames) { x <- as.data.frame(unclass(x)) x <- cbind(data.frame("Variable" = rownames(x), stringsAsFactors = FALSE), x) names(x)[1] <- "" return(x) } #' @noRd openxlsxCoerce.prcomp <- function(x, rowNames) { x <- as.data.frame(x$rotation) x <- cbind(data.frame("Variable" = rownames(x), stringsAsFactors = FALSE), x) names(x)[1] <- "" return(x) } #' @noRd openxlsxCoerce.summary.prcomp <- function(x, rowNames) { x <- as.data.frame(x$importance) x <- cbind(data.frame("Variable" = rownames(x), stringsAsFactors = FALSE), x) names(x)[1] <- "" return(x) } #' @name openxlsxCoerce.survdiff #' @description like print.survdiff with some ideas from the ascii package #' @param x data.frame for input #' @param rowNames rownames #' @importFrom stats pchisq #' @keywords internal #' @noRd openxlsxCoerce.survdiff <- function(x, rowNames) { ## like print.survdiff with some ideas from the ascii package if (length(x$n) == 1) { z <- sign(x$exp - x$obs) * sqrt(x$chisq) temp <- c(x$obs, x$exp, z, 1 - pchisq(x$chisq, 1)) names(temp) <- c("Observed", "Expected", "Z", "p") x <- as.data.frame(t(temp)) } else { if (is.matrix(x$obs)) { otmp <- apply(x$obs, 1, sum) etmp <- apply(x$exp, 1, sum) } else { otmp <- x$obs etmp <- x$exp } chisq <- c(x$chisq, rep(NA, length(x$n) - 1)) df <- c((sum(1 * (etmp > 0))) - 1, rep(NA, length(x$n) - 1)) p <- c(1 - pchisq(x$chisq, df[!is.na(df)]), rep(NA, length(x$n) - 1)) temp <- cbind( x$n, otmp, etmp, ((otmp - etmp)^2) / etmp, ((otmp - etmp)^2) / diag(x$var), chisq, df, p ) colnames(temp) <- c( "N", "Observed", "Expected", "(O-E)^2/E", "(O-E)^2/V", "Chisq", "df", "p" ) temp <- as.data.frame(temp, checknames = FALSE) x <- cbind("Group" = names(x$n), temp) names(x)[1] <- "" } return(x) } #' @noRd openxlsxCoerce.coxph <- function(x, rowNames) { ## sligthly modified print.coxph coef <- x$coefficients se <- sqrt(diag(x$var)) if (is.null(coef) || is.null(se)) { stop("Input is not valid") } if (is.null(x$naive.var)) { tmp <- cbind(coef, exp(coef), se, coef / se, pchisq((coef / se)^2, 1)) colnames(tmp) <- c("coef", "exp(coef)", "se(coef)", "z", "p") } else { nse <- sqrt(diag(x$naive.var)) tmp <- cbind(coef, exp(coef), nse, se, coef / se, pchisq((coef / se)^2, 1)) colnames(tmp) <- c("coef", "exp(coef)", "se(coef)", "robust se", "z", "p") } x <- cbind("Variable" = names(coef), as.data.frame(tmp, checknames = FALSE)) names(x)[1] <- "" return(x) } #' @noRd openxlsxCoerce.summary.coxph <- function(x, rowNames) { coef <- x$coefficients ci <- x$conf.int # nvars <- nrow(coef) variable not used tmp <- cbind( coef[, -ncol(coef), drop = FALSE], # p later ci[, (ncol(ci) - 1):ncol(ci), drop = FALSE], # confint coef[, ncol(coef), drop = FALSE] ) # p.value x <- as.data.frame(tmp, checknames = FALSE) x <- cbind(data.frame("row names" = rownames(x)), x) names(x)[[1]] <- "" return(x) } #' @noRd openxlsxCoerce.cox.zph <- function(x, rowNames) { tmp <- as.data.frame(x$table) x <- cbind(data.frame("row names" = rownames(tmp)), tmp) names(x)[[1]] <- "" return(x) } #' @noRd openxlsxCoerce.hyperlink <- function(x, rowNames) { ## vector of hyperlinks class(x) <- c("character", "hyperlink") x <- as.data.frame(x, stringsAsFactors = FALSE) } openxlsx/R/class_definitions.R0000644000176200001440000000675514374150317016200 0ustar liggesusers # Workbook ---------------------------------------------------------------- Workbook <- setRefClass("Workbook", fields = c( "sheet_names" = "character", "charts" = "ANY", "isChartSheet" = "logical", "colOutlineLevels" = "ANY", "colWidths" = "ANY", "connections" = "ANY", "Content_Types" = "character", "core" = "character", "drawings" = "ANY", "drawings_rels" = "ANY", "embeddings" = "ANY", "externalLinks" = "ANY", "externalLinksRels" = "ANY", "headFoot" = "ANY", "media" = "ANY", "outlineLevels" = "ANY", "persons" = "ANY", "pivotTables" = "ANY", "pivotTables.xml.rels" = "ANY", "pivotDefinitions" = "ANY", "pivotRecords" = "ANY", "pivotDefinitionsRels" = "ANY", "queryTables" = "ANY", "rowHeights" = "ANY", "slicers" = "ANY", "slicerCaches" = "ANY", "sharedStrings" = "ANY", "styleObjects" = "ANY", "styles" = "ANY", "tables" = "ANY", "tables.xml.rels" = "ANY", "theme" = "ANY", "vbaProject" = "ANY", "vml" = "ANY", "vml_rels" = "ANY", "comments" = "ANY", "threadComments" = "ANY", "workbook" = "ANY", "workbook.xml.rels" = "ANY", "worksheets" = "ANY", "worksheets_rels" = "ANY", "sheetOrder" = "integer", "ActiveSheet" = "integer" ) ) # Style ------------------------------------------------------------------- Style <- setRefClass("Style", fields = c( "fontName", "fontColour", "fontSize", "fontFamily", "fontScheme", "fontDecoration", "borderTop", "borderLeft", "borderRight", "borderBottom", "borderTopColour", "borderLeftColour", "borderRightColour", "borderBottomColour", "borderDiagonal", "borderDiagonalColour", "borderDiagonalUp", "borderDiagonalDown", "halign", "valign", "indent", "textRotation", "numFmt", "fill", "wrapText", "locked", "hidden", "xfId" ), methods = list() ) # Sheet_Data -------------------------------------------------------------- Sheet_Data <- setRefClass("Sheet_Data", fields = c( "rows" = "integer", "cols" = "integer", "t" = "integer", "v" = "character", "f" = "character", "style_id" = "ANY", "data_count" = "integer", "n_elements" = "integer" ) ) # Worksheet --------------------------------------------------------------- WorkSheet <- setRefClass("WorkSheet", fields = c( "sheetPr" = "character", "dimension" = "character", "sheetViews" = "character", "sheetFormatPr" = "character", "cols" = "character", "sheet_data" = "Sheet_Data", "autoFilter" = "character", "mergeCells" = "ANY", "conditionalFormatting" = "character", "dataValidations" = "ANY", "dataValidationsLst" = "character", "freezePane" = "character", "hyperlinks" = "ANY", "sheetProtection" = "character", "pageMargins" = "character", "pageSetup" = "character", "headerFooter" = "ANY", "rowBreaks" = "character", "colBreaks" = "character", "drawing" = "character", "legacyDrawing" = "character", "legacyDrawingHF" = "character", "oleObjects" = "character", "tableParts" = "character", "extLst" = "character" ) ) # ChartSheet -------------------------------------------------------------- ChartSheet <- setRefClass("ChartSheet", fields = c( "sheetPr" = "character", "sheetViews" = "character", "pageMargins" = "character", "drawing" = "character", "hyperlinks" = "ANY" ) ) openxlsx/R/wrappers.R0000644000176200001440000046504614745234534014353 0ustar liggesusers #' @name createWorkbook #' @title Create a new Workbook object #' @description Create a new Workbook object #' @param creator Creator of the workbook (your name). Defaults to login username #' @param title Workbook properties title #' @param subject Workbook properties subject #' @param category Workbook properties category #' @author Alexander Walker #' @return Workbook object #' @export #' @seealso [loadWorkbook()] #' @seealso [saveWorkbook()] #' @import methods #' @examples #' ## Create a new workbook #' wb <- createWorkbook() #' #' ## Save workbook to working directory #' \dontrun{ #' saveWorkbook(wb, file = "createWorkbookExample.xlsx", overwrite = TRUE) #' } #' #' ## Set Workbook properties #' wb <- createWorkbook( #' creator = "Me", #' title = "title here", #' subject = "this & that", #' category = "something" #' ) createWorkbook <- function(creator = ifelse(.Platform$OS.type == "windows", Sys.getenv("USERNAME"), Sys.getenv("USER")), title = NULL, subject = NULL, category = NULL) { op <- get_set_options() on.exit(options(op), add = TRUE) ## check all inputs are valid if (length(creator) > 1) creator <- creator[[1]] if (length(creator) == 0) creator <- "" if (!"character" %in% class(creator)) creator <- "" if (length(title) > 1) title <- title[[1]] if (length(subject) > 1) subject <- subject[[1]] if (length(category) > 1) category <- category[[1]] if (!is.null(title)) { if (!"character" %in% class(title)) { stop("title must be a string") } } if (!is.null(subject)) { if (!"character" %in% class(subject)) { stop("subject must be a string") } } if (!is.null(category)) { if (!"character" %in% class(category)) { stop("category must be a string") } } invisible(Workbook$new(creator = creator, title = title, subject = subject, category = category)) } #' @name saveWorkbook #' @title save Workbook to file #' @description save a Workbook object to file #' @author Alexander Walker, Philipp Schauberger #' @param wb A Workbook object to write to file #' @param file A character string naming an xlsx file #' @param overwrite If `TRUE`, overwrite any existing file. #' @param returnValue If `TRUE`, returns `TRUE` in case of a success, else `FALSE`. #' If flag is `FALSE`, then no return value is returned. #' @seealso [createWorkbook()] #' @seealso [addWorksheet()] #' @seealso [loadWorkbook()] #' @seealso [writeData()] #' @seealso [writeDataTable()] #' @export #' @examples #' ## Create a new workbook and add a worksheet #' wb <- createWorkbook("Creator of workbook") #' addWorksheet(wb, sheetName = "My first worksheet") #' #' ## Save workbook to working directory #' \dontrun{ #' saveWorkbook(wb, file = "saveWorkbookExample.xlsx", overwrite = TRUE) #' } saveWorkbook <- function(wb, file, overwrite = FALSE, returnValue = FALSE) { op <- get_set_options() on.exit(options(op), add = TRUE) if (!"Workbook" %in% class(wb)) { stop("First argument must be a Workbook.") } if (!is.logical(overwrite)) { overwrite <- FALSE } if (!is.logical(returnValue)) { returnValue <- FALSE } if (file.exists(file) && !overwrite) { stop("File already exists!") } xlsx_file <- wb$saveWorkbook() result <- file.copy(from = xlsx_file, to = file, overwrite = overwrite, copy.mode = FALSE) ## delete temporary dir unlink(dirname(xlsx_file), force = TRUE, recursive = TRUE) if (returnValue == FALSE) { invisible(1) } else { return(result) } } #' @name mergeCells #' @title Merge cells within a worksheet #' @description Merge cells within a worksheet #' @param wb A workbook object #' @param sheet A name or index of a worksheet #' @param cols Columns to merge #' @param rows corresponding rows to merge #' @details As merged region must be rectangular, only min and max of cols and rows are used. #' @author Alexander Walker #' @seealso [removeCellMerge()] #' @export #' @examples #' ## Create a new workbook #' wb <- createWorkbook() #' #' ## Add a worksheet #' addWorksheet(wb, "Sheet 1") #' addWorksheet(wb, "Sheet 2") #' #' ## Merge cells: Row 2 column C to F (3:6) #' mergeCells(wb, "Sheet 1", cols = 2, rows = 3:6) #' #' ## Merge cells:Rows 10 to 20 columns A to J (1:10) #' mergeCells(wb, 1, cols = 1:10, rows = 10:20) #' #' ## Intersecting merges #' mergeCells(wb, 2, cols = 1:10, rows = 1) #' mergeCells(wb, 2, cols = 5:10, rows = 2) #' mergeCells(wb, 2, cols = c(1, 10), rows = 12) ## equivalent to 1:10 as only min/max are used #' # mergeCells(wb, 2, cols = 1, rows = c(1,10)) # Throws error because intersects existing merge #' #' ## remove merged cells #' removeCellMerge(wb, 2, cols = 1, rows = 1) # removes any intersecting merges #' mergeCells(wb, 2, cols = 1, rows = 1:10) # Now this works #' #' ## Save workbook #' \dontrun{ #' saveWorkbook(wb, "mergeCellsExample.xlsx", overwrite = TRUE) #' } mergeCells <- function(wb, sheet, cols, rows) { od <- getOption("OutDec") options("OutDec" = ".") on.exit(expr = options("OutDec" = od), add = TRUE) if (!"Workbook" %in% class(wb)) { stop("First argument must be a Workbook.") } if (!is.numeric(cols)) { cols <- convertFromExcelRef(cols) } wb$mergeCells(sheet, startRow = min(rows), endRow = max(rows), startCol = min(cols), endCol = max(cols)) } #' @name int2col #' @title Convert integer to Excel column #' @description Converts an integer to an Excel column label. #' @param x A numeric vector #' @export #' @examples #' int2col(1:10) int2col <- function(x) { op <- get_set_options() on.exit(options(op), add = TRUE) if (!is.numeric(x)) { stop("x must be numeric.") } convert_to_excel_ref(cols = x, LETTERS = LETTERS) } #' @name col2int #' @title Convert Excel column to integer #' @description Converts an Excel column label to an integer. #' @param x A character vector #' @export #' @examples #' col2int(LETTERS) col2int <- function(x) { if (!is.character(x)) { stop("x must be character") } as.integer(sapply(x, cell_ref_to_col)) } #' @name removeCellMerge #' @title Create a new Workbook object #' @description Unmerges any merged cells that intersect #' with the region specified by, min(cols):max(cols) X min(rows):max(rows) #' @param wb A workbook object #' @param sheet A name or index of a worksheet #' @param cols vector of column indices #' @param rows vector of row indices #' @author Alexander Walker #' @export #' @seealso [mergeCells()] removeCellMerge <- function(wb, sheet, cols, rows) { op <- get_set_options() on.exit(options(op), add = TRUE) if (!"Workbook" %in% class(wb)) { stop("First argument must be a Workbook.") } cols <- convertFromExcelRef(cols) rows <- as.integer(rows) wb$removeCellMerge(sheet, startRow = min(rows), endRow = max(rows), startCol = min(cols), endCol = max(cols)) } #' @name sheets #' @title Returns names of worksheets. #' @description DEPRECATED. Use names(). #' @param wb A workbook object #' @return Name of worksheet(s) for a given index #' @author Alexander Walker #' @seealso [names()] to rename a worksheet in a Workbook #' @details DEPRECATED. Use [names()] #' @export #' @examples #' #' ## Create a new workbook #' wb <- createWorkbook() #' #' ## Add some worksheets #' addWorksheet(wb, "Worksheet Name") #' addWorksheet(wb, "This is worksheet 2") #' addWorksheet(wb, "The third worksheet") #' #' ## Return names of sheets, can not be used for assignment. #' names(wb) #' # openXL(wb) #' #' names(wb) <- c("A", "B", "C") #' names(wb) #' # openXL(wb) sheets <- function(wb) { op <- get_set_options() on.exit(options(op), add = TRUE) if (!"Workbook" %in% class(wb)) { stop("First argument must be a Workbook.") } nms <- wb$sheet_names nms <- replaceXMLEntities(nms) return(nms) } #' @name addWorksheet #' @title Add a worksheet to a workbook #' @description Add a worksheet to a Workbook object #' @author Alexander Walker #' @param wb A Workbook object to attach the new worksheet #' @param sheetName A name for the new worksheet #' @param gridLines A logical. If `FALSE`, the worksheet grid lines will be hidden. #' @param tabColour Colour of the worksheet tab. A valid colour (belonging to colours()) or a valid hex colour beginning with "#" #' @param zoom A numeric between 10 and 400. Worksheet zoom level as a percentage. #' @param header document header. Character vector of length 3 corresponding to positions left, center, right. Use NA to skip a position. #' @param footer document footer. Character vector of length 3 corresponding to positions left, center, right. Use NA to skip a position. #' @param evenHeader document header for even pages. #' @param evenFooter document footer for even pages. #' @param firstHeader document header for first page only. #' @param firstFooter document footer for first page only. #' @param visible If FALSE, sheet is hidden else visible. #' @param paperSize An integer corresponding to a paper size. See ?pageSetup for details. #' @param orientation One of "portrait" or "landscape" #' @param hdpi Horizontal DPI. Can be set with options("openxlsx.dpi" = X) or options("openxlsx.hdpi" = X) #' @param vdpi Vertical DPI. Can be set with options("openxlsx.dpi" = X) or options("openxlsx.vdpi" = X) #' @details Headers and footers can contain special tags #' \describe{ #' \item{**&\[Page\]**}{ Page number} #' \item{**&\[Pages\]**}{ Number of pages} #' \item{**&\[Date\]**}{ Current date} #' \item{**&\[Time\]**}{ Current time} #' \item{**&\[Path\]**}{ File path} #' \item{**&\[File\]**}{ File name} #' \item{**&\[Tab\]**}{ Worksheet name} #' } #' @return XML tree #' @export #' @examples #' ## Create a new workbook #' wb <- createWorkbook("Fred") #' #' ## Add 3 worksheets #' addWorksheet(wb, "Sheet 1") #' addWorksheet(wb, "Sheet 2", gridLines = FALSE) #' addWorksheet(wb, "Sheet 3", tabColour = "red") #' addWorksheet(wb, "Sheet 4", gridLines = FALSE, tabColour = "#4F81BD") #' #' ## Headers and Footers #' addWorksheet(wb, "Sheet 5", #' header = c("ODD HEAD LEFT", "ODD HEAD CENTER", "ODD HEAD RIGHT"), #' footer = c("ODD FOOT RIGHT", "ODD FOOT CENTER", "ODD FOOT RIGHT"), #' evenHeader = c("EVEN HEAD LEFT", "EVEN HEAD CENTER", "EVEN HEAD RIGHT"), #' evenFooter = c("EVEN FOOT RIGHT", "EVEN FOOT CENTER", "EVEN FOOT RIGHT"), #' firstHeader = c("TOP", "OF FIRST", "PAGE"), #' firstFooter = c("BOTTOM", "OF FIRST", "PAGE") #' ) #' #' addWorksheet(wb, "Sheet 6", #' header = c("&[Date]", "ALL HEAD CENTER 2", "&[Page] / &[Pages]"), #' footer = c("&[Path]&[File]", NA, "&[Tab]"), #' firstHeader = c(NA, "Center Header of First Page", NA), #' firstFooter = c(NA, "Center Footer of First Page", NA) #' ) #' #' addWorksheet(wb, "Sheet 7", #' header = c("ALL HEAD LEFT 2", "ALL HEAD CENTER 2", "ALL HEAD RIGHT 2"), #' footer = c("ALL FOOT RIGHT 2", "ALL FOOT CENTER 2", "ALL FOOT RIGHT 2") #' ) #' #' addWorksheet(wb, "Sheet 8", #' firstHeader = c("FIRST ONLY L", NA, "FIRST ONLY R"), #' firstFooter = c("FIRST ONLY L", NA, "FIRST ONLY R") #' ) #' #' ## Need data on worksheet to see all headers and footers #' writeData(wb, sheet = 5, 1:400) #' writeData(wb, sheet = 6, 1:400) #' writeData(wb, sheet = 7, 1:400) #' writeData(wb, sheet = 8, 1:400) #' #' ## Save workbook #' \dontrun{ #' saveWorkbook(wb, "addWorksheetExample.xlsx", overwrite = TRUE) #' } addWorksheet <- function(wb, sheetName, gridLines = openxlsx_getOp("gridLines", TRUE), tabColour = NULL, zoom = 100, header = openxlsx_getOp("header"), footer = openxlsx_getOp("footer"), evenHeader = openxlsx_getOp("evenHeader"), evenFooter = openxlsx_getOp("evenFooter"), firstHeader = openxlsx_getOp("firstHeader"), firstFooter = openxlsx_getOp("firstFooter"), visible = TRUE, paperSize = openxlsx_getOp("paperSize", 9), orientation = openxlsx_getOp("orientation", "portrait"), vdpi = openxlsx_getOp("vdpi", 300), hdpi = openxlsx_getOp("hdpi", 300)) { op <- get_set_options() on.exit(options(op), add = TRUE) if (inherits(wb, "list")) { wb <- wb[[1]] } if (!inherits(wb, "Workbook")) { stop("wb must be a Workbook", call. = FALSE) } # Set NULL defaults gridLines <- gridLines %||% TRUE paperSize <- paperSize %||% 9 orientation <- orientation %||% "portrait" vdpi <- vdpi %||% 300 hdpi <- hdpi %||% 300 if (tolower(sheetName) %in% tolower(wb$sheet_names)) { stop(paste0("A worksheet by the name '", sheetName, "' already exists! Sheet names must be unique case-insensitive.")) } if (!is.logical(gridLines) || length(gridLines) > 1) { stop("gridLines must be a logical of length 1.") } if (nchar(sheetName) > 31) { stop(paste0("sheetName '", sheetName, "' too long! Max length is 31 characters.")) } if (!is.null(tabColour)) { tabColour <- validateColour(tabColour, "Invalid tabColour in addWorksheet.") } if (!is.numeric(zoom)) { stop("zoom must be numeric") } if (!is.character(sheetName)) { sheetName <- as.character(sheetName) } if (!is.null(header) && length(header) != 3) { stop("header must have length 3 where elements correspond to positions: left, center, right.") } if (!is.null(footer) && length(footer) != 3) { stop("footer must have length 3 where elements correspond to positions: left, center, right.") } if (!is.null(evenHeader) && length(evenHeader) != 3) { stop("evenHeader must have length 3 where elements correspond to positions: left, center, right.") } if (!is.null(evenFooter) && length(evenFooter) != 3) { stop("evenFooter must have length 3 where elements correspond to positions: left, center, right.") } if (!is.null(firstHeader) && length(firstHeader) != 3) { stop("firstHeader must have length 3 where elements correspond to positions: left, center, right.") } if (!is.null(firstFooter) && length(firstFooter) != 3) { stop("firstFooter must have length 3 where elements correspond to positions: left, center, right.") } visible <- tolower(visible[1]) if (!visible %in% c("true", "false", "hidden", "visible", "veryhidden")) { stop("visible must be one of: TRUE, FALSE, 'hidden', 'visible', 'veryHidden'") } orientation <- tolower(orientation) if (!orientation %in% c("portrait", "landscape")) { stop("orientation must be 'portrait' or 'landscape'.") } vdpi <- as.integer(vdpi) if (is.na(vdpi)) { stop("vdpi must be numeric") } hdpi <- as.integer(hdpi) if (is.na(hdpi)) { stop("hdpi must be numeric") } ## Invalid XML characters sheetName <- replaceIllegalCharacters(sheetName) invisible(wb$addWorksheet( sheetName = sheetName, showGridLines = gridLines, tabColour = tabColour, zoom = zoom[1], oddHeader = headerFooterSub(header), oddFooter = headerFooterSub(footer), evenHeader = headerFooterSub(evenHeader), evenFooter = headerFooterSub(evenFooter), firstHeader = headerFooterSub(firstHeader), firstFooter = headerFooterSub(firstFooter), visible = visible, paperSize = paperSize, orientation = orientation, vdpi = vdpi, hdpi = hdpi )) } #' @name cloneWorksheet #' @title Clone a worksheet to a workbook #' @description Clone a worksheet to a Workbook object #' @author Reinhold Kainhofer #' @param wb A Workbook object to attach the new worksheet #' @param sheetName A name for the new worksheet #' @param clonedSheet The name of the existing worksheet to be cloned. #' @return XML tree #' @export #' @examples #' ## Create a new workbook #' wb <- createWorkbook("Fred") #' #' ## Add 3 worksheets #' addWorksheet(wb, "Sheet 1") #' cloneWorksheet(wb, "Sheet 2", clonedSheet = "Sheet 1") #' #' ## Save workbook #' \dontrun{ #' saveWorkbook(wb, "cloneWorksheetExample.xlsx", overwrite = TRUE) #' } cloneWorksheet <- function(wb, sheetName, clonedSheet) { if (!"Workbook" %in% class(wb)) { stop("First argument must be a Workbook.") } if (tolower(sheetName) %in% tolower(wb$sheet_names)) { stop("A worksheet by that name already exists! Sheet names must be unique case-insensitive.") } if (nchar(sheetName) > 31) { stop("sheetName too long! Max length is 31 characters.") } if (!is.character(sheetName)) { sheetName <- as.character(sheetName) } ## Invalid XML characters sheetName <- replaceIllegalCharacters(sheetName) invisible(wb$cloneWorksheet(sheetName = sheetName, clonedSheet = clonedSheet)) } #' @name renameWorksheet #' @title Rename a worksheet #' @description Rename a worksheet #' @author Alexander Walker #' @param wb A Workbook object containing a worksheet #' @param sheet The name or index of the worksheet to rename #' @param newName The new name of the worksheet. No longer than 31 chars. #' @details DEPRECATED. Use [names()] #' @export #' @examples #' #' ## Create a new workbook #' wb <- createWorkbook("CREATOR") #' #' ## Add 3 worksheets #' addWorksheet(wb, "Worksheet Name") #' addWorksheet(wb, "This is worksheet 2") #' addWorksheet(wb, "Not the best name") #' #' #' ## rename all worksheets #' names(wb) <- c("A", "B", "C") #' #' #' ## Rename worksheet 1 & 3 #' renameWorksheet(wb, 1, "New name for sheet 1") #' names(wb)[[1]] <- "New name for sheet 1" #' names(wb)[[3]] <- "A better name" #' #' ## Save workbook #' \dontrun{ #' saveWorkbook(wb, "renameWorksheetExample.xlsx", overwrite = TRUE) #' } renameWorksheet <- function(wb, sheet, newName) { if (!"Workbook" %in% class(wb)) { stop("First argument must be a Workbook.") } op <- get_set_options() on.exit(options(op), add = TRUE) invisible(wb$setSheetName(sheet, newName)) } #' @name convertFromExcelRef #' @title Convert excel column name to integer index #' @description Convert excel column name to integer index e.g. "J" to 10 #' @param col An excel column reference #' @export #' @examples #' convertFromExcelRef("DOG") #' convertFromExcelRef("COW") #' #' ## numbers will be removed #' convertFromExcelRef("R22") convertFromExcelRef <- function(col) { ## increase scipen to avoid writing in scientific op <- get_set_options() on.exit(options(op), add = TRUE) col <- toupper(col) charFlag <- grepl("[A-Z]", col) if (any(charFlag)) { col[charFlag] <- gsub("[0-9]", "", col[charFlag]) d <- lapply(strsplit(col[charFlag], split = ""), function(x) match(rev(x), LETTERS)) col[charFlag] <- unlist(lapply(seq_along(d), function(i) { sum(d[[i]] * (26^( seq_along(d[[i]]) - 1))) })) } col[!charFlag] <- as.integer(col[!charFlag]) return(as.integer(col)) } #' @name createStyle #' @title Create a cell style #' @description Create a new style to apply to worksheet cells #' @author Alexander Walker #' @seealso [addStyle()] #' @param fontName A name of a font. Note the font name is not validated. If fontName is NULL, #' the workbook base font is used. (Defaults to Calibri) #' @param fontColour Colour of text in cell. A valid hex colour beginning with "#" #' or one of colours(). If fontColour is NULL, the workbook base font colours is used. #' (Defaults to black) #' @param fontSize Font size. A numeric greater than 0. #' If fontSize is NULL, the workbook base font size is used. (Defaults to 11) #' @param numFmt Cell formatting #' \itemize{ #' \item{**GENERAL**} #' \item{**NUMBER**} #' \item{**CURRENCY**} #' \item{**ACCOUNTING**} #' \item{**DATE**} #' \item{**LONGDATE**} #' \item{**TIME**} #' \item{**PERCENTAGE**} #' \item{**FRACTION**} #' \item{**SCIENTIFIC**} #' \item{**TEXT**} #' \item{**COMMA** for comma separated thousands} #' \item{For date/datetime styling a combination of d, m, y and punctuation marks} #' \item{For numeric rounding use "0.00" with the preferred number of decimal places} #' } #' #' @param border Cell border. A vector of "top", "bottom", "left", "right" or a single string). #' \describe{ #' \item{**"top"**}{ Top border} #' \item{**bottom**}{ Bottom border} #' \item{**left**}{ Left border} #' \item{**right**}{ Right border} #' \item{**TopBottom** or **c("top", "bottom")**}{ Top and bottom border} #' \item{**LeftRight** or **c("left", "right")**}{ Left and right border} #' \item{**TopLeftRight** or **c("top", "left", "right")**}{ Top, Left and right border} #' \item{**TopBottomLeftRight** or **c("top", "bottom", "left", "right")**}{ All borders} #' } #' #' @param borderColour Colour of cell border vector the same length as the number of sides specified in "border" #' A valid colour (belonging to colours()) or a valid hex colour beginning with "#" #' #' @param borderStyle Border line style vector the same length as the number of sides specified in "border" #' \describe{ #' \item{**none**}{ No Border} #' \item{**thin**}{ thin border} #' \item{**medium**}{ medium border} #' \item{**dashed**}{ dashed border} #' \item{**dotted**}{ dotted border} #' \item{**thick**}{ thick border} #' \item{**double**}{ double line border} #' \item{**hair**}{ Hairline border} #' \item{**mediumDashed**}{ medium weight dashed border} #' \item{**dashDot**}{ dash-dot border} #' \item{**mediumDashDot**}{ medium weight dash-dot border} #' \item{**dashDotDot**}{ dash-dot-dot border} #' \item{**mediumDashDotDot**}{ medium weight dash-dot-dot border} #' \item{**slantDashDot**}{ slanted dash-dot border} #' } #' #' @param bgFill Cell background fill colour. #' A valid colour (belonging to colours()) or a valid hex colour beginning with "#". #' -- **Use for conditional formatting styles only.** #' @param fgFill Cell foreground fill colour. #' A valid colour (belonging to colours()) or a valid hex colour beginning with "#" #' #' @param halign #' Horizontal alignment of cell contents #' \describe{ #' \item{**left**}{ Left horizontal align cell contents} #' \item{**right**}{ Right horizontal align cell contents} #' \item{**center**}{ Center horizontal align cell contents} #' \item{**justify**}{ Justify horizontal align cell contents} #' } #' #' @param valign A name #' Vertical alignment of cell contents #' \describe{ #' \item{**top**}{ Top vertical align cell contents} #' \item{**center**}{ Center vertical align cell contents} #' \item{**bottom**}{ Bottom vertical align cell contents} #' } #' #' @param textDecoration #' Text styling. #' \describe{ #' \item{**bold**}{ Bold cell contents} #' \item{**strikeout**}{ Strikeout cell contents} #' \item{**italic**}{ Italicise cell contents} #' \item{**underline**}{ Underline cell contents} #' \item{**underline2**}{ Double underline cell contents} #' \item{**accounting**}{ Single accounting underline cell contents} #' \item{**accounting2**}{ Double accounting underline cell contents} #' } #' #' @param wrapText Logical. If `TRUE` cell contents will wrap to fit in column. #' @param textRotation Rotation of text in degrees. 255 for vertical text. #' @param indent Horizontal indentation of cell contents. #' @param hidden Whether the formula of the cell contents will be hidden (if worksheet protection is turned on) #' @param locked Whether cell contents are locked (if worksheet protection is turned on) #' @return A style object #' @export #' @examples #' ## See package vignettes for further examples #' #' ## Modify default values of border colour and border line style #' options("openxlsx.borderColour" = "#4F80BD") #' options("openxlsx.borderStyle" = "thin") #' #' ## Size 18 Arial, Bold, left horz. aligned, fill colour #1A33CC, all borders, #' style <- createStyle( #' fontSize = 18, fontName = "Arial", #' textDecoration = "bold", halign = "left", fgFill = "#1A33CC", border = "TopBottomLeftRight" #' ) #' #' ## Red, size 24, Bold, italic, underline, center aligned Font, bottom border #' style <- createStyle( #' fontSize = 24, fontColour = rgb(1, 0, 0), #' textDecoration = c("bold", "italic", "underline"), #' halign = "center", valign = "center", border = "Bottom" #' ) #' #' # borderColour is recycled for each border or all colours can be supplied #' #' # colour is recycled 3 times for "Top", "Bottom" & "Right" sides. #' createStyle(border = "TopBottomRight", borderColour = "red") #' #' # supply all colours #' createStyle(border = "TopBottomLeft", borderColour = c("red", "yellow", "green")) createStyle <- function(fontName = NULL, fontSize = NULL, fontColour = NULL, numFmt = openxlsx_getOp("numFmt", "GENERAL"), border = NULL, borderColour = openxlsx_getOp("borderColour", "black"), borderStyle = openxlsx_getOp("borderStyle", "thin"), bgFill = NULL, fgFill = NULL, halign = NULL, valign = NULL, textDecoration = NULL, wrapText = FALSE, textRotation = NULL, indent = NULL, locked = NULL, hidden = NULL) { ### Error checking op <- get_set_options() on.exit(options(op), add = TRUE) ## if num fmt is made up of dd, mm, yy numFmt_original <- numFmt[[1]] numFmt <- tolower(numFmt_original) validNumFmt <- c("general", "number", "currency", "accounting", "date", "longdate", "time", "percentage", "scientific", "text", "3", "4", "comma") if (numFmt == "date") { numFmt <- openxlsx_getOp("dateFormat", "date") } else if (numFmt == "longdate") { numFmt <- openxlsx_getOp("datetimeFormat", "longdate") } else if (!numFmt %in% validNumFmt) { numFmt <- replaceIllegalCharacters(numFmt_original) } numFmtMapping <- list( list(numFmtId = 0), # GENERAL list(numFmtId = 2), # NUMBER list(numFmtId = 164, formatCode = ""$"#,##0.00"), ## CURRENCY list(numFmtId = 44), # ACCOUNTING list(numFmtId = 14), # DATE list(numFmtId = 166, formatCode = "yyyy/mm/dd hh:mm:ss"), # LONGDATE list(numFmtId = 167), # TIME list(numFmtId = 10), # PERCENTAGE list(numFmtId = 11), # SCIENTIFIC list(numFmtId = 49), # TEXT list(numFmtId = 3), list(numFmtId = 4), list(numFmtId = 3) ) names(numFmtMapping) <- validNumFmt ## Validate border line style if (!is.null(borderStyle)) { borderStyle <- validateBorderStyle(borderStyle) } if (!is.null(halign)) { halign <- tolower(halign[[1]]) if (!halign %in% c("left", "right", "center", "justify")) { stop("Invalid halign argument!") } } if (!is.null(valign)) { valign <- tolower(valign[[1]]) if (!valign %in% c("top", "bottom", "center")) { stop("Invalid valign argument!") } } if (!is.logical(wrapText)) { stop("Invalid wrapText") } if (!is.null(indent)) { if (!is.numeric(indent) && !is.integer(indent)) { stop("indent must be numeric") } } textDecoration <- tolower(textDecoration) if (!is.null(textDecoration)) { if (!all(textDecoration %in% c("bold", "strikeout", "italic", "underline", "underline2", "accounting", "accounting2", ""))) { stop("Invalid textDecoration!") } } borderColour <- validateColour(borderColour, "Invalid border colour!") if (!is.null(fontColour)) { fontColour <- validateColour(fontColour, "Invalid font colour!") } if (!is.null(fontSize)) { if (fontSize < 1) stop("Font size must be greater than 0!") } if (!is.null(locked)) { if (!is.logical(locked)) stop("Cell attribute locked must be TRUE or FALSE") } if (!is.null(hidden)) { if (!is.logical(hidden)) stop("Cell attribute hidden must be TRUE or FALSE") } ######################### error checking complete ############################# style <- Style$new() if (!is.null(fontName)) { style$fontName <- list("val" = fontName) } if (!is.null(fontSize)) { style$fontSize <- list("val" = fontSize) } if (!is.null(fontColour)) { style$fontColour <- list("rgb" = fontColour) } style$fontDecoration <- toupper(textDecoration) ## background fill if (is.null(bgFill)) { # bgFillList <- NULL variable not used } else { bgFill <- validateColour(bgFill, "Invalid bgFill colour") style$fill <- append(style$fill, list(fillBg = list("rgb" = bgFill))) } ## foreground fill if (is.null(fgFill)) { # fgFillList <- NULL variable not used } else { fgFill <- validateColour(fgFill, "Invalid fgFill colour") style$fill <- append(style$fill, list(fillFg = list(rgb = fgFill))) } ## border if (!is.null(border)) { border <- toupper(border) border <- paste(border, collapse = "") ## find position of each side in string sides <- c("LEFT", "RIGHT", "TOP", "BOTTOM") pos <- sapply(sides, function(x) regexpr(x, border)) pos <- pos[order(pos, decreasing = FALSE)] nSides <- sum(pos > 0) borderColour <- rep(borderColour, length.out = nSides) borderStyle <- rep(borderStyle, length.out = nSides) pos <- pos[pos > 0] if (length(pos) == 0) { stop("Unknown border argument") } names(borderColour) <- names(pos) names(borderStyle) <- names(pos) if ("LEFT" %in% names(pos)) { style$borderLeft <- borderStyle[["LEFT"]] style$borderLeftColour <- list("rgb" = borderColour[["LEFT"]]) } if ("RIGHT" %in% names(pos)) { style$borderRight <- borderStyle[["RIGHT"]] style$borderRightColour <- list("rgb" = borderColour[["RIGHT"]]) } if ("TOP" %in% names(pos)) { style$borderTop <- borderStyle[["TOP"]] style$borderTopColour <- list("rgb" = borderColour[["TOP"]]) } if ("BOTTOM" %in% names(pos)) { style$borderBottom <- borderStyle[["BOTTOM"]] style$borderBottomColour <- list("rgb" = borderColour[["BOTTOM"]]) } } ## other fields if (!is.null(halign)) { style$halign <- halign } if (!is.null(valign)) { style$valign <- valign } if (!is.null(indent)) { style$indent <- indent } if (wrapText) { style$wrapText <- TRUE } if (!is.null(textRotation)) { if (!is.numeric(textRotation)) { stop("textRotation must be numeric.") } if (textRotation < 0 && textRotation >= -90) { textRotation <- (textRotation * -1) + 90 } style$textRotation <- round(textRotation[[1]], 0) } if (numFmt != "general") { if (numFmt %in% validNumFmt) { style$numFmt <- numFmtMapping[[numFmt[[1]]]] } else { style$numFmt <- list("numFmtId" = 165, formatCode = numFmt) ## Custom numFmt } } if (!is.null(locked)) { style$locked <- locked } if (!is.null(hidden)) { style$hidden <- hidden } return(style) } #' @name addStyle #' @title Add a style to a set of cells #' @description Function adds a style to a specified set of cells. #' @author Alexander Walker #' @param wb A Workbook object containing a worksheet. #' @param sheet A worksheet to apply the style to. #' @param style A style object returned from createStyle() #' @param rows Rows to apply style to. #' @param cols columns to apply style to. #' @param gridExpand If `TRUE`, style will be applied to all combinations of rows and cols. #' @param stack If `TRUE` the new style is merged with any existing cell styles. If FALSE, any #' existing style is replaced by the new style. #' @seealso [createStyle()] #' @seealso expand.grid #' @export #' @examples #' ## See package vignette for more examples. #' #' ## Create a new workbook #' wb <- createWorkbook("My name here") #' #' ## Add a worksheets #' addWorksheet(wb, "Expenditure", gridLines = FALSE) #' #' ## write data to worksheet 1 #' writeData(wb, sheet = 1, USPersonalExpenditure, rowNames = TRUE) #' #' ## create and add a style to the column headers #' headerStyle <- createStyle( #' fontSize = 14, fontColour = "#FFFFFF", halign = "center", #' fgFill = "#4F81BD", border = "TopBottom", borderColour = "#4F81BD" #' ) #' #' ## style for body #' bodyStyle <- createStyle(border = "TopBottom", borderColour = "#4F81BD") #' addStyle(wb, sheet = 1, bodyStyle, rows = 2:6, cols = 1:6, gridExpand = TRUE) #' setColWidths(wb, 1, cols = 1, widths = 21) ## set column width for row names column #' \dontrun{ #' saveWorkbook(wb, "addStyleExample.xlsx", overwrite = TRUE) #' } addStyle <- function(wb, sheet, style, rows, cols, gridExpand = FALSE, stack = FALSE) { op <- get_set_options() on.exit(options(op), add = TRUE) if (!is.null(style$numFmt) && length(wb$styleObjects) > 0) { if (style$numFmt$numFmtId == 165) { maxnumFmtId <- max(unlist(sapply(wb$styleObjects, function(i) { as.integer( max(c(i$style$numFmt$numFmtId, 0)) ) })), 165) style$numFmt$numFmtId <- maxnumFmtId + 1 } } sheet <- wb$validateSheet(sheet) if (!"Workbook" %in% class(wb)) { stop("First argument must be a Workbook.") } if (!"Style" %in% class(style)) { stop("style argument must be a Style object.") } if (!is.logical(stack)) { stop("stack parameter must be a logical!") } if (length(cols) == 0 || length(rows) == 0) { return(invisible(0)) } cols <- convertFromExcelRef(cols) rows <- as.integer(rows) ## rows and cols need to be the same length if (gridExpand) { n <- length(cols) cols <- rep.int(cols, times = length(rows)) rows <- rep(rows, each = n) } else if (length(rows) == 1 && length(cols) > 1) { rows <- rep.int(rows, times = length(cols)) } else if (length(cols) == 1 && length(rows) > 1) { cols <- rep.int(cols, times = length(rows)) } else if (length(rows) != length(cols)) { stop("Length of rows and cols must be equal.") } wb$addStyle(sheet = sheet, style = style, rows = rows, cols = cols, stack = stack) } #' @name getCellRefs #' @title Return excel cell coordinates from (x,y) coordinates #' @description Return excel cell coordinates from (x,y) coordinates #' @author Philipp Schauberger, Alexander Walker #' @param cellCoords A data.frame with two columns coordinate pairs. #' @return Excel alphanumeric cell reference #' @examples #' getCellRefs(data.frame(1, 2)) #' # "B1" #' getCellRefs(data.frame(1:3, 2:4)) #' # "B1" "C2" "D3" #' @export getCellRefs <- function(cellCoords) { if (!"data.frame" %in% class(cellCoords)) { stop("Provide a data.frame!") } if (!("numeric" %in% sapply(cellCoords[, 1], class) || "integer" %in% sapply(cellCoords[, 1], class)) && ("numeric" %in% sapply(cellCoords[, 2], class) || "integer" %in% sapply(cellCoords[, 2], class)) ) { stop("Provide a data.frame containing integers!") } op <- get_set_options() on.exit(options(op), add = TRUE) l <- convert_to_excel_ref(cols = unlist(cellCoords[, 2]), LETTERS = LETTERS) paste0(l, cellCoords[, 1]) } #' @name freezePane #' @title Freeze a worksheet pane #' @description Freeze a worksheet pane #' @author Alexander Walker #' @param wb A workbook object #' @param sheet A name or index of a worksheet #' @param firstActiveRow Top row of active region #' @param firstActiveCol Furthest left column of active region #' @param firstRow If `TRUE`, freezes the first row (equivalent to firstActiveRow = 2) #' @param firstCol If `TRUE`, freezes the first column (equivalent to firstActiveCol = 2) #' @export #' @examples #' ## Create a new workbook #' wb <- createWorkbook("Kenshin") #' #' ## Add some worksheets #' addWorksheet(wb, "Sheet 1") #' addWorksheet(wb, "Sheet 2") #' addWorksheet(wb, "Sheet 3") #' addWorksheet(wb, "Sheet 4") #' #' ## Freeze Panes #' freezePane(wb, "Sheet 1", firstActiveRow = 5, firstActiveCol = 3) #' freezePane(wb, "Sheet 2", firstCol = TRUE) ## shortcut to firstActiveCol = 2 #' freezePane(wb, 3, firstRow = TRUE) ## shortcut to firstActiveRow = 2 #' freezePane(wb, 4, firstActiveRow = 1, firstActiveCol = "D") #' #' ## Save workbook #' \dontrun{ #' saveWorkbook(wb, "freezePaneExample.xlsx", overwrite = TRUE) #' } freezePane <- function(wb, sheet, firstActiveRow = NULL, firstActiveCol = NULL, firstRow = FALSE, firstCol = FALSE) { op <- get_set_options() on.exit(options(op), add = TRUE) if (is.null(firstActiveRow) && is.null(firstActiveCol) && !firstRow && !firstCol) { return(invisible(0)) } if (!is.logical(firstRow)) { stop("firstRow must be TRUE/FALSE") } if (!is.logical(firstCol)) { stop("firstCol must be TRUE/FALSE") } if (firstRow && !firstCol) { invisible(wb$freezePanes(sheet, firstRow = firstRow)) } else if (firstCol && !firstRow) { invisible(wb$freezePanes(sheet, firstCol = firstCol)) } else if (firstRow && firstCol) { invisible(wb$freezePanes(sheet, firstActiveRow = 2L, firstActiveCol = 2L)) } else { ## else both firstRow and firstCol are FALSE ## Convert to numeric if column letter given if (!is.null(firstActiveRow)) { firstActiveRow <- convertFromExcelRef(firstActiveRow) } else { firstActiveRow <- 1L } if (!is.null(firstActiveCol)) { firstActiveCol <- convertFromExcelRef(firstActiveCol) } else { firstActiveCol <- 1L } invisible(wb$freezePanes(sheet, firstActiveRow = firstActiveRow, firstActiveCol = firstActiveCol, firstRow = firstRow, firstCol = firstCol)) } } convert2EMU <- function(d, units) { if (grepl("in", units)) { d <- d * 2.54 } if (grepl("mm|milli", units)) { d <- d / 10 } return(d * 360000) } #' @name insertImage #' @title Insert an image into a worksheet #' @description Insert an image into a worksheet #' @author Alexander Walker #' @param wb A workbook object #' @param sheet A name or index of a worksheet #' @param file An image file. Valid file types are: jpeg, png, bmp #' @param width Width of figure. #' @param height Height of figure. #' @param startRow Row coordinate of upper left corner of the image #' @param startCol Column coordinate of upper left corner of the image #' @param units Units of width and height. Can be "in", "cm" or "px" #' @param dpi Image resolution used for conversion between units. #' @param address An optional character string specifying an external URL, relative or absolute path to a file, or mailto string (e.g. "mailto:example@@example.com") that will be opened when the image is clicked. #' @importFrom grDevices bmp png jpeg #' @seealso [insertPlot()] #' @export #' @examples #' ## Create a new workbook #' wb <- createWorkbook("Ayanami") #' #' ## Add some worksheets #' addWorksheet(wb, "Sheet 1") #' addWorksheet(wb, "Sheet 2") #' addWorksheet(wb, "Sheet 3") #' addWorksheet(wb, "Sheet 4") #' #' ## Insert images #' img <- system.file("extdata", "einstein.jpg", package = "openxlsx") #' insertImage(wb, "Sheet 1", img, startRow = 5, startCol = 3, width = 6, height = 5) #' insertImage(wb, 2, img, startRow = 2, startCol = 2) #' insertImage(wb, 3, img, width = 15, height = 12, startRow = 3, startCol = "G", units = "cm") #' insertImage(wb, 4, img, address = "https://github.com/ycphs/openxlsx") #' #' ## Save workbook #' \dontrun{ #' saveWorkbook(wb, "insertImageExample.xlsx", overwrite = TRUE) #' } insertImage <- function(wb, sheet, file, width = 6, height = 3, startRow = 1, startCol = 1, units = "in", dpi = 300, address) { op <- get_set_options() on.exit(options(op), add = TRUE) if (!file.exists(file)) { stop("File does not exist.") } if (!grepl("\\\\|\\/", file)) { file <- file.path(getwd(), file, fsep = .Platform$file.sep) } units <- tolower(units) if (!units %in% c("cm", "in", "px")) { stop("Invalid units.\nunits must be one of: cm, in, px") } if (!missing(address)) { if (!is.character(address) || length(address) != 1 || is.na(address)) { stop("Invalid address. address must be a string and have a length of one.") } } startCol <- convertFromExcelRef(startCol) startRow <- as.integer(startRow) ## convert to inches if (units == "px") { width <- width / dpi height <- height / dpi } else if (units == "cm") { width <- width / 2.54 height <- height / 2.54 } ## Convert to EMUs widthEMU <- as.integer(round(width * 914400L, 0)) # (EMUs per inch) heightEMU <- as.integer(round(height * 914400L, 0)) # (EMUs per inch) wb$insertImage(sheet, file = file, startRow = startRow, startCol = startCol, width = widthEMU, height = heightEMU, address = address) } pixels2ExcelColWidth <- function(pixels) { if (any(!is.numeric(pixels))) { stop("All elements of pixels must be numeric") } pixels[pixels == 0] <- 8.43 pixels[pixels != 0] <- (pixels[pixels != 0] - 12) / 7 + 1 pixels } #' @name setRowHeights #' @title Set worksheet row heights #' @description Set worksheet row heights #' @author Alexander Walker #' @param wb workbook object #' @param sheet name or index of a worksheet #' @param rows indices of rows to set height #' @param heights heights to set rows to specified in Excel column height units #' @param fontsize font size, optional (get base font size by default) #' @param factor factor to manually adjust font width, e.g., for bold fonts, #' optional #' @param base_height basic row height, optional #' @param extra_height additional row height per new line of text, optional #' @param wrap wrap text of entries which exceed the column width, optional #' @seealso [removeRowHeights()] #' @export #' @examples #' ## Create a new workbook #' wb <- createWorkbook() #' #' ## Add a worksheet #' addWorksheet(wb, "Sheet") #' sheet <- 1 #' #' ## Write dummy data #' writeData(wb, sheet, "fixed w/fixed h", startCol = 1, startRow = 1) #' writeData(wb, sheet, "fixed w/auto h ABC ABC ABC ABC ABC ABC ABC ABC ABC ABC ABC", #' startCol = 2, startRow = 2) #' writeData(wb, sheet, "variable w/fixed h", startCol = 3, startRow = 3) #' #' ## Set column widths and row heights #' setColWidths(wb, sheet, cols = c(1, 2, 3, 4), widths = c(10, 20, "auto", 20)) #' setRowHeights(wb, sheet, rows = c(1, 2, 8, 4, 6), heights = c(30, "auto", 15, 15, 30)) #' #' ## Overwrite row 1 height #' setRowHeights(wb, sheet, rows = 1, heights = 40) #' #' ## Save workbook #' \dontrun{ #' saveWorkbook(wb, "setRowHeightsExample.xlsx", overwrite = TRUE) #' } setRowHeights <- function(wb, sheet, rows, heights, fontsize = NULL, factor = 1.0, base_height = 15, extra_height = 12, wrap = TRUE) { # validate sheet sheet <- wb$validateSheet(sheet) if (length(rows) > length(heights)) { heights <- rep(heights, length.out = length(rows)) } if (length(heights) > length(rows)) { stop("Greater number of height values than rows.") } od <- getOption("OutDec") options(OutDec = ".") on.exit(expr = options(OutDec = od), add = TRUE) # clean duplicates heights <- heights[!duplicated(rows)] rows <- rows[!duplicated(rows)] # auto adjust row heights ida <- which(heights == "auto") selected <- rows[ida] out <- auto_heights(wb, sheet, selected, fontsize = fontsize, factor = factor, base_height = base_height, extra_height = extra_height) cols <- out[[1]] new <- out[[2]] heights[ida] <- as.character(new) names(heights) <- rows # wrap text in cells if (wrap == TRUE) { wrap <- openxlsx::createStyle(wrapText = TRUE) openxlsx::addStyle(wb, sheet, wrap, rows = ida, cols = cols, gridExpand = TRUE, stack = TRUE) } wb$setRowHeights(sheet, rows, heights) } #' @name setColWidths #' @title Set worksheet column widths #' @description Set worksheet column widths to specific width or "auto". #' @author Alexander Walker #' @param wb A workbook object #' @param sheet A name or index of a worksheet #' @param cols Indices of cols to set width #' @param widths widths to set cols to specified in Excel column width units or "auto" for automatic sizing. The widths argument is #' recycled to the length of cols. #' @param hidden Logical vector. If TRUE the column is hidden. #' @param ignoreMergedCells Ignore any cells that have been merged with other cells in the calculation of "auto" column widths. #' @details The global min and max column width for "auto" columns is set by (default values show): #' \itemize{ #' \item{options("openxlsx.minWidth" = 3)} #' \item{options("openxlsx.maxWidth" = 250)} ## This is the maximum width allowed in Excel #' } #' #' NOTE: The calculation of column widths can be slow for large worksheets. #' #' NOTE: The `hidden` parameter may conflict with the one set in `groupColumns`; changing one will update the other. #' #' @seealso [removeColWidths()] #' @export #' @examples #' ## Create a new workbook #' wb <- createWorkbook() #' #' ## Add a worksheet #' addWorksheet(wb, "Sheet 1") #' #' #' ## set col widths #' setColWidths(wb, 1, cols = c(1, 4, 6, 7, 9), widths = c(16, 15, 12, 18, 33)) #' #' ## auto columns #' addWorksheet(wb, "Sheet 2") #' writeData(wb, sheet = 2, x = iris) #' setColWidths(wb, sheet = 2, cols = 1:5, widths = "auto") #' #' ## Save workbook #' \dontrun{ #' saveWorkbook(wb, "setColWidthsExample.xlsx", overwrite = TRUE) #' } #' setColWidths <- function(wb, sheet, cols, widths = 8.43, hidden = rep(FALSE, length(cols)), ignoreMergedCells = FALSE) { op <- get_set_options() on.exit(options(op), add = TRUE) sheet <- wb$validateSheet(sheet) if (!"Workbook" %in% class(wb)) { stop("First argument must be a Workbook.") } widths <- tolower(widths) ## possibly "auto" if (ignoreMergedCells) { widths[widths == "auto"] <- "auto2" } # should do nothing if the cols' length is zero if (length(cols) == 0L) { return(invisible(0)) } if (length(widths) > length(cols)) { stop("More widths than columns supplied.") } if (length(hidden) > length(cols)) { stop("hidden argument is longer than cols.") } if (length(widths) < length(cols)) { widths <- rep(widths, length.out = length(cols)) } if (length(hidden) < length(cols)) { hidden <- rep(hidden, length.out = length(cols)) } ## Remove duplicates widths <- widths[!duplicated(cols)] hidden <- hidden[!duplicated(cols)] cols <- cols[!duplicated(cols)] cols <- convertFromExcelRef(cols) if (length(wb$colWidths[[sheet]]) > 0) { existing_cols <- names(wb$colWidths[[sheet]]) existing_widths <- unname(wb$colWidths[[sheet]]) existing_hidden <- attr(wb$colWidths[[sheet]], "hidden") ## check for existing custom widths flag <- existing_cols %in% cols if (any(flag)) { existing_cols <- existing_cols[!flag] existing_widths <- existing_widths[!flag] existing_hidden <- existing_hidden[!flag] } all_names <- c(existing_cols, cols) all_widths <- c(existing_widths, widths) all_hidden <- c(existing_hidden, as.character(as.integer(hidden))) ord <- order(as.integer(all_names)) all_names <- all_names[ord] all_widths <- all_widths[ord] all_hidden <- all_hidden[ord] names(all_widths) <- all_names wb$colWidths[[sheet]] <- all_widths attr(wb$colWidths[[sheet]], "hidden") <- all_hidden } else { names(widths) <- cols wb$colWidths[[sheet]] <- widths attr(wb$colWidths[[sheet]], "hidden") <- as.character(as.integer(hidden)) } # Check if any conflicting column outline levels if (length(wb$colOutlineLevels[[sheet]]) > 0) { existing_cols <- names(wb$colOutlineLevels[[sheet]]) if (any(existing_cols %in% cols)) { for (i in intersect(existing_cols, cols)) { width_hidden <- attr(wb$colWidths[[sheet]], "hidden")[attr(wb$colWidths[[sheet]], "names") == i] outline_hidden <- attr(wb$colOutlineLevels[[sheet]], "hidden")[attr(wb$colOutlineLevels[[sheet]], "names") == i] if (outline_hidden != width_hidden) { attr(wb$colOutlineLevels[[sheet]], "hidden")[attr(wb$colOutlineLevels[[sheet]], "names") == i] <- width_hidden } } cols <- cols[!cols %in% existing_cols] hidden <- attr(wb$colWidths[[sheet]], "hidden")[attr(wb$colWidths[[sheet]], "names") %in% cols] } } invisible(0) } #' @name removeColWidths #' @title Remove column widths from a worksheet #' @description Remove column widths from a worksheet #' @author Alexander Walker #' @param wb A workbook object #' @param sheet A name or index of a worksheet #' @param cols Indices of columns to remove custom width (if any) from. #' @seealso [setColWidths()] #' @export #' @examples #' ## Create a new workbook #' wb <- loadWorkbook(file = system.file("extdata", "loadExample.xlsx", package = "openxlsx")) #' #' ## remove column widths in columns 1 to 20 #' removeColWidths(wb, 1, cols = 1:20) #' \dontrun{ #' saveWorkbook(wb, "removeColWidthsExample.xlsx", overwrite = TRUE) #' } removeColWidths <- function(wb, sheet, cols) { sheet <- wb$validateSheet(sheet) if (!is.numeric(cols)) { cols <- convertFromExcelRef(cols) } op <- get_set_options() on.exit(options(op), add = TRUE) customCols <- as.integer(names(wb$colWidths[[sheet]])) removeInds <- which(customCols %in% cols) if (length(removeInds) > 0) { remainingCols <- customCols[-removeInds] if (length(remainingCols) == 0) { wb$colWidths[[sheet]] <- list() } else { rem_widths <- wb$colWidths[[sheet]][-removeInds] names(rem_widths) <- as.character(remainingCols) wb$colWidths[[sheet]] <- rem_widths } } } #' @name removeRowHeights #' @title Remove custom row heights from a worksheet #' @description Remove row heights from a worksheet #' @author Alexander Walker #' @param wb A workbook object #' @param sheet A name or index of a worksheet #' @param rows Indices of rows to remove custom height (if any) from. #' @seealso [setRowHeights()] #' @export #' @examples #' ## Create a new workbook #' wb <- loadWorkbook(file = system.file("extdata", "loadExample.xlsx", package = "openxlsx")) #' #' ## remove any custom row heights in rows 1 to 10 #' removeRowHeights(wb, 1, rows = 1:10) #' \dontrun{ #' saveWorkbook(wb, "removeRowHeightsExample.xlsx", overwrite = TRUE) #' } removeRowHeights <- function(wb, sheet, rows) { op <- get_set_options() on.exit(options(op), add = TRUE) sheet <- wb$validateSheet(sheet) customRows <- as.integer(names(wb$rowHeights[[sheet]])) removeInds <- which(customRows %in% rows) if (length(removeInds) > 0) { wb$rowHeights[[sheet]] <- wb$rowHeights[[sheet]][-removeInds] } } #' @name insertPlot #' @title Insert the current plot into a worksheet #' @author Alexander Walker #' @description The current plot is saved to a temporary image file using dev.copy. #' This file is then written to the workbook using insertImage. #' @param wb A workbook object #' @param sheet A name or index of a worksheet #' @param startRow Row coordinate of upper left corner of figure.` xy[[2]]` when xy is given. #' @param startCol Column coordinate of upper left corner of figure. `xy[[1]]` when xy is given. #' @param xy Alternate way to specify startRow and startCol. A vector of length 2 of form (startcol, startRow) #' @param width Width of figure. Defaults to 6in. #' @param height Height of figure . Defaults to 4in. #' @param fileType File type of image #' @param units Units of width and height. Can be "in", "cm" or "px" #' @param dpi Image resolution #' @seealso [insertImage()] #' @export #' @importFrom grDevices bmp png jpeg tiff dev.copy dev.list dev.off #' @examples #' \dontrun{ #' ## Create a new workbook #' wb <- createWorkbook() #' #' ## Add a worksheet #' addWorksheet(wb, "Sheet 1", gridLines = FALSE) #' #' ## create plot objects #' require(ggplot2) #' p1 <- qplot(mpg, #' data = mtcars, geom = "density", #' fill = as.factor(gear), alpha = I(.5), main = "Distribution of Gas Mileage" #' ) #' p2 <- qplot(age, circumference, #' data = Orange, geom = c("point", "line"), colour = Tree #' ) #' #' ## Insert currently displayed plot to sheet 1, row 1, column 1 #' print(p1) # plot needs to be showing #' insertPlot(wb, 1, width = 5, height = 3.5, fileType = "png", units = "in") #' #' ## Insert plot 2 #' print(p2) #' insertPlot(wb, 1, xy = c("J", 2), width = 16, height = 10, fileType = "png", units = "cm") #' #' ## Save workbook #' saveWorkbook(wb, "insertPlotExample.xlsx", overwrite = TRUE) #' } insertPlot <- function(wb, sheet, width = 6, height = 4, xy = NULL, startRow = 1, startCol = 1, fileType = "png", units = "in", dpi = 300) { op <- get_set_options() on.exit(options(op), add = TRUE) if (is.null(dev.list()[[1]])) { warning("No plot to insert.") return() } if (!"Workbook" %in% class(wb)) { stop("First argument must be a Workbook.") } if (!is.null(xy)) { startCol <- xy[[1]] startRow <- xy[[2]] } fileType <- tolower(fileType) units <- tolower(units) if (fileType == "jpg") { fileType <- "jpeg" } if (!fileType %in% c("png", "jpeg", "tiff", "bmp")) { stop("Invalid file type.\nfileType must be one of: png, jpeg, tiff, bmp") } if (!units %in% c("cm", "in", "px")) { stop("Invalid units.\nunits must be one of: cm, in, px") } fileName <- tempfile(pattern = "figureImage", fileext = paste0(".", fileType)) if (fileType == "bmp") { dev.copy(bmp, filename = fileName, width = width, height = height, units = units, res = dpi) } else if (fileType == "jpeg") { dev.copy(jpeg, filename = fileName, width = width, height = height, units = units, quality = 100, res = dpi) } else if (fileType == "png") { dev.copy(png, filename = fileName, width = width, height = height, units = units, res = dpi) } else if (fileType == "tiff") { dev.copy(tiff, filename = fileName, width = width, height = height, units = units, compression = "none", res = dpi) } ## write image invisible(dev.off()) insertImage(wb = wb, sheet = sheet, file = fileName, width = width, height = height, startRow = startRow, startCol = startCol, units = units, dpi = dpi) } #' @name replaceStyle #' @title Replace an existing cell style #' @description Replace an existing cell style #' @author Alexander Walker #' @param wb A workbook object #' @param index Index of style object to replace #' @param newStyle A style to replace the existing style as position index #' @description Replace a style object #' @export #' @seealso [getStyles()] #' @examples #' #' ## load a workbook #' wb <- loadWorkbook(file = system.file("extdata", "loadExample.xlsx", package = "openxlsx")) #' #' ## create a new style and replace style 2 #' #' newStyle <- createStyle(fgFill = "#00FF00") #' #' ## replace style 2 #' getStyles(wb)[1:3] ## prints styles #' replaceStyle(wb, 2, newStyle = newStyle) #' #' ## Save workbook #' \dontrun{ #' saveWorkbook(wb, "replaceStyleExample.xlsx", overwrite = TRUE) #' } replaceStyle <- function(wb, index, newStyle) { nStyles <- length(wb$styleObjects) if (nStyles == 0) { stop("Workbook has no existing styles.") } if (index > nStyles) { stop(sprintf("Invalid index. Workbook only has %s styles.", nStyles)) } if (!all("Style" %in% class(newStyle))) { stop("Invalid style object.") } wb$styleObjects[[index]]$style <- newStyle } #' @name getStyles #' @title Returns a list of all styles in the workbook #' @description Returns list of style objects in the workbook #' @param wb A workbook object #' @export #' @seealso [replaceStyle()] #' @examples #' ## load a workbook #' wb <- loadWorkbook(file = system.file("extdata", "loadExample.xlsx", package = "openxlsx")) #' getStyles(wb)[1:3] getStyles <- function(wb) { nStyles <- length(wb$styleObjects) if (nStyles == 0) { stop("Workbook has no existing styles.") } styles <- lapply(wb$styleObjects, "[[", "style") return(styles) } #' @name removeWorksheet #' @title Remove a worksheet from a workbook #' @description Remove a worksheet from a Workbook object #' @author Alexander Walker #' @param wb A workbook object #' @param sheet A name or index of a worksheet #' @description Remove a worksheet from a workbook #' @export #' @examples #' ## load a workbook #' wb <- loadWorkbook(file = system.file("extdata", "loadExample.xlsx", package = "openxlsx")) #' #' ## Remove sheet 2 #' removeWorksheet(wb, 2) #' #' ## save the modified workbook #' \dontrun{ #' saveWorkbook(wb, "removeWorksheetExample.xlsx", overwrite = TRUE) #' } removeWorksheet <- function(wb, sheet) { if (!inherits(wb, "Workbook")) { stop("wb must be a Workbook object!") } if (length(sheet) != 1) { stop("sheet must have length 1.") } wb$deleteWorksheet(sheet) invisible(0) } #' @name deleteData #' @title Delete cell data #' @description Delete contents and styling from a cell. #' @author Alexander Walker #' @param wb A workbook object #' @param sheet A name or index of a worksheet #' @param rows Rows to delete data from. #' @param cols columns to delete data from. #' @param gridExpand If `TRUE`, all data in rectangle min(rows):max(rows) X min(cols):max(cols) #' will be removed. #' @export #' @examples #' ## write some data #' wb <- createWorkbook() #' addWorksheet(wb, "Worksheet 1") #' x <- data.frame(matrix(runif(200), ncol = 10)) #' writeData(wb, sheet = 1, x = x, startCol = 2, startRow = 3, colNames = FALSE) #' #' ## delete some data #' deleteData(wb, sheet = 1, cols = 3:5, rows = 5:7, gridExpand = TRUE) #' deleteData(wb, sheet = 1, cols = 7:9, rows = 5:7, gridExpand = TRUE) #' deleteData(wb, sheet = 1, cols = LETTERS, rows = 18, gridExpand = TRUE) #' \dontrun{ #' saveWorkbook(wb, "deleteDataExample.xlsx", overwrite = TRUE) #' } deleteData <- function(wb, sheet, cols, rows, gridExpand = FALSE) { sheet <- wb$validateSheet(sheet) if (!"Workbook" %in% class(wb)) { stop("First argument must be a Workbook.") } wb$worksheets[[sheet]]$sheet_data$delete(rows_in = rows, cols_in = cols, grid_expand = gridExpand) invisible(0) } #' @name deleteDataColumn #' @title Deletes a whole column from a workbook #' @description Deletes the whole column from a workbook, shifting the remaining columns to the left #' @author David Zimmermann #' @param wb A workbook object #' @param sheet A name or index of a worksheet #' @param col A column to delete #' @export #' @examples #' ## write some data #' wb <- createWorkbook() #' addWorksheet(wb, "tester") #' #' for (i in seq(5)) { #' mat <- data.frame(x = rep(paste0(int2col(i), i), 10)) #' writeData(wb, sheet = 1, startRow = 1, startCol = i, mat) #' writeFormula(wb, sheet = 1, startRow = 12, startCol = i, #' x = sprintf("=COUNTA(%s2:%s11)", int2col(i), int2col(i))) #' } #' deleteDataColumn(wb, 1, col = 3) #' \dontrun{ #' saveWorkbook(wb, "deleteDataColumnExample.xlsx", overwrite = TRUE) #' } deleteDataColumn <- function(wb, sheet, col) { sheet <- wb$validateSheet(sheet) if (is.character(col)) col <- col2int(col) if (!"Workbook" %in% class(wb)) { stop("First argument must be a Workbook.") } ## internal helper function which corrects columns > col (reduces their col ref by 1) updateFormula <- function(x, col) { has_formula <- !is.na(x) & stringi::stri_detect(x, regex = "[A-Z]+\\d") if (!any(has_formula)) return(x) xx <- x[has_formula] forms <- stringi::stri_split(xx, regex = "\\b(?=[A-Z]+\\d+)") x[has_formula] <- sapply(forms, function(form) { cols <- openxlsx::col2int(stringi::stri_extract(form[-1], regex = "^[A-Z]+")) repl <- ifelse(cols == col, "#REF!", ifelse(cols > col, openxlsx::int2col(cols - 1), openxlsx::int2col(cols))) paste(c(form[[1]], stringi::stri_replace(form[-1], regex = "^[A-Z]+", repl)), collapse = "") }) x } a <- wb$worksheets[[sheet]]$sheet_data # t: if a shared string is used or if the string is a value itself # v: the shared string index or the string itself (if t == 0) # in wb$sharedStrings we find the values of the shared strings by index + 1 (0 indexed!) # check which elements to delete keep <- a$cols != col # if there is no column to delete, exit early if (all(keep)) return(invisible(0)) # delete cols in cols "col", move higher cols one down a$cols <- as.integer(a$cols[keep] - 1 * (a$cols[keep] > col)) a$rows <- a$rows[keep] # reduce the shared strings pointers if they are not used anymore ss <- data.frame(old = numeric(0), new = numeric(0), string = character(0)) if (length(wb$sharedStrings) > 0) { ss <- data.frame( # the old index 0 indexed, as used in a$v old = as.numeric(seq(length(wb$sharedStrings)) - 1), # will hold the new index 0 indexed, as used in a$v new = NA, # the actual strings string = wb$sharedStrings ) } # 1. remove the values from sheet_data (a) a$v <- a$v[keep] a$t <- a$t[keep] # update the shared strings map (ss) with the new indices # v_this_sheet etc are the indices that are still used v_this_sheet <- as.numeric(a$v[!is.na(a$t) & a$t == 1]) # get all string indices from other sheets, so that strings used in other sheets are not deleted! v_other_sheets <- unlist(lapply(setdiff(seq_along(wb$worksheets), sheet), function(sh) { a <- wb$worksheets[[sh]]$sheet_data as.numeric(a$v[!is.na(a$t) & a$t == 1]) })) idx <- sort(unique(c(v_this_sheet, v_other_sheets))) ss$new[ss$old %in% idx] <- seq_along(idx) - 1 # 2. remove the values from the sharedStrings object wb$sharedStrings <- wb$sharedStrings[idx + 1] attr(wb$sharedStrings, "uniqueCount") <- length(idx) # 3. reindex the values from the sheet_data to use new shared strings indices a$v[a$t == 1] <- as.character(ss$new[as.numeric(a$v[a$t == 1]) + 1]) # update the shared strings for all other sheets for (s in setdiff(seq_along(wb$worksheets), sheet)) { a <- wb$worksheets[[s]]$sheet_data a$v[a$t == 1] <- as.character(ss$new[as.numeric(a$v[a$t == 1]) + 1]) } a$f <- updateFormula(a$f[keep], col = col) a$n_elements <- sum(keep) if ("data_count" %in% names(a)) a$data_count <- length(unique(a$v)) # adjust styles sheet_name <- wb$sheet_names[[sheet]] this_sheet <- sapply(wb$styleObjects, function(o) { if (!"sheet" %in% names(o)) return(FALSE) o$sheet == sheet_name }) if (!is.null(this_sheet) && any(this_sheet)) { wb$styleObjects[this_sheet] <- lapply( wb$styleObjects[this_sheet], function(style) { if (all(style$cols == col)) return(NULL) # only in this col if (!any(style$cols > col)) return(style) take <- style$cols != col style$cols <- style$cols[take] style$rows <- style$rows[take] style$cols[style$cols > col] <- style$cols[style$cols > col] - 1L style }) } invisible(0) } #' @name modifyBaseFont #' @title Modify the default font #' @description Modify the default font for this workbook #' @author Alexander Walker #' @param wb A workbook object #' @param fontSize font size #' @param fontColour font colour #' @param fontName Name of a font #' @details The font name is not validated in anyway. Excel replaces unknown font names #' with Arial. Base font is black, size 11, Calibri. #' @export #' @examples #' ## create a workbook #' wb <- createWorkbook() #' addWorksheet(wb, "S1") #' ## modify base font to size 10 Arial Narrow in red #' modifyBaseFont(wb, fontSize = 10, fontColour = "#FF0000", fontName = "Arial Narrow") #' #' writeData(wb, "S1", iris) #' writeDataTable(wb, "S1", x = iris, startCol = 10) ## font colour does not affect tables #' \dontrun{ #' saveWorkbook(wb, "modifyBaseFontExample.xlsx", overwrite = TRUE) #' } modifyBaseFont <- function(wb, fontSize = 11, fontColour = "black", fontName = "Calibri") { if (!"Workbook" %in% class(wb)) { stop("First argument must be a Workbook.") } op <- get_set_options() on.exit(options(op), add = TRUE) if (fontSize < 0) stop("Invalid fontSize") fontColour <- validateColour(fontColour) wb$styles$fonts[[1]] <- sprintf('', fontSize, fontColour, fontName) } #' @name getBaseFont #' @title Return the workbook default font #' @description Return the workbook default font #' @author Alexander Walker #' @param wb A workbook object #' @description Returns the base font used in the workbook. #' @export #' @examples #' ## create a workbook #' wb <- createWorkbook() #' getBaseFont(wb) #' #' ## modify base font to size 10 Arial Narrow in red #' modifyBaseFont(wb, fontSize = 10, fontColour = "#FF0000", fontName = "Arial Narrow") #' #' getBaseFont(wb) getBaseFont <- function(wb) { if (!"Workbook" %in% class(wb)) { stop("First argument must be a Workbook.") } wb$getBaseFont() } #' @name setHeaderFooter #' @title Set document headers and footers #' @description Set document headers and footers #' @author Alexander Walker #' @param wb A workbook object #' @param sheet A name or index of a worksheet #' @param header document header. Character vector of length 3 corresponding to positions left, center, right. Use NA to skip a position. #' @param footer document footer. Character vector of length 3 corresponding to positions left, center, right. Use NA to skip a position. #' @param evenHeader document header for even pages. #' @param evenFooter document footer for even pages. #' @param firstHeader document header for first page only. #' @param firstFooter document footer for first page only. #' @details Headers and footers can contain special tags #' \describe{ #' \item{**&\[Page\]**}{ Page number} #' \item{**&\[Pages\]**}{ Number of pages} #' \item{**&\[Date\]**}{ Current date} #' \item{**&\[Time\]**}{ Current time} #' \item{**&\[Path\]**}{ File path} #' \item{**&\[File\]**}{ File name} #' \item{**&\[Tab\]**}{ Worksheet name} #' } #' @export #' @seealso [addWorksheet()] to set headers and footers when adding a worksheet #' @examples #' wb <- createWorkbook() #' #' addWorksheet(wb, "S1") #' addWorksheet(wb, "S2") #' addWorksheet(wb, "S3") #' addWorksheet(wb, "S4") #' #' writeData(wb, 1, 1:400) #' writeData(wb, 2, 1:400) #' writeData(wb, 3, 3:400) #' writeData(wb, 4, 3:400) #' #' setHeaderFooter(wb, #' sheet = "S1", #' header = c("ODD HEAD LEFT", "ODD HEAD CENTER", "ODD HEAD RIGHT"), #' footer = c("ODD FOOT RIGHT", "ODD FOOT CENTER", "ODD FOOT RIGHT"), #' evenHeader = c("EVEN HEAD LEFT", "EVEN HEAD CENTER", "EVEN HEAD RIGHT"), #' evenFooter = c("EVEN FOOT RIGHT", "EVEN FOOT CENTER", "EVEN FOOT RIGHT"), #' firstHeader = c("TOP", "OF FIRST", "PAGE"), #' firstFooter = c("BOTTOM", "OF FIRST", "PAGE") #' ) #' #' setHeaderFooter(wb, #' sheet = 2, #' header = c("&[Date]", "ALL HEAD CENTER 2", "&[Page] / &[Pages]"), #' footer = c("&[Path]&[File]", NA, "&[Tab]"), #' firstHeader = c(NA, "Center Header of First Page", NA), #' firstFooter = c(NA, "Center Footer of First Page", NA) #' ) #' #' setHeaderFooter(wb, #' sheet = 3, #' header = c("ALL HEAD LEFT 2", "ALL HEAD CENTER 2", "ALL HEAD RIGHT 2"), #' footer = c("ALL FOOT RIGHT 2", "ALL FOOT CENTER 2", "ALL FOOT RIGHT 2") #' ) #' #' setHeaderFooter(wb, #' sheet = 4, #' firstHeader = c("FIRST ONLY L", NA, "FIRST ONLY R"), #' firstFooter = c("FIRST ONLY L", NA, "FIRST ONLY R") #' ) #' \dontrun{ #' saveWorkbook(wb, "setHeaderFooterExample.xlsx", overwrite = TRUE) #' } setHeaderFooter <- function(wb, sheet, header = NULL, footer = NULL, evenHeader = NULL, evenFooter = NULL, firstHeader = NULL, firstFooter = NULL) { if (!"Workbook" %in% class(wb)) { stop("First argument must be a Workbook.") } sheet <- wb$validateSheet(sheet) if (!is.null(header) && length(header) != 3) { stop("header must have length 3 where elements correspond to positions: left, center, right.") } if (!is.null(footer) && length(footer) != 3) { stop("footer must have length 3 where elements correspond to positions: left, center, right.") } if (!is.null(evenHeader) && length(evenHeader) != 3) { stop("evenHeader must have length 3 where elements correspond to positions: left, center, right.") } if (!is.null(evenFooter) && length(evenFooter) != 3) { stop("evenFooter must have length 3 where elements correspond to positions: left, center, right.") } if (!is.null(firstHeader) && length(firstHeader) != 3) { stop("firstHeader must have length 3 where elements correspond to positions: left, center, right.") } if (!is.null(firstFooter) && length(firstFooter) != 3) { stop("firstFooter must have length 3 where elements correspond to positions: left, center, right.") } op <- get_set_options() on.exit(options(op), add = TRUE) oddHeader <- headerFooterSub(header) oddFooter <- headerFooterSub(footer) evenHeader <- headerFooterSub(evenHeader) evenFooter <- headerFooterSub(evenFooter) firstHeader <- headerFooterSub(firstHeader) firstFooter <- headerFooterSub(firstFooter) naToNULLList <- function(x) { lapply(x, function(x) { if (is.na(x)) { return(NULL) } x }) } hf <- list( oddHeader = naToNULLList(oddHeader), oddFooter = naToNULLList(oddFooter), evenHeader = naToNULLList(evenHeader), evenFooter = naToNULLList(evenFooter), firstHeader = naToNULLList(firstHeader), firstFooter = naToNULLList(firstFooter) ) if (all(sapply(hf, length) == 0)) { hf <- NULL } wb$worksheets[[sheet]]$headerFooter <- hf } #' @name pageSetup #' @title Set page margins, orientation and print scaling #' @description Set page margins, orientation and print scaling #' @author Alexander Walker, Joshua Sturm #' @param wb A workbook object #' @param sheet A name or index of a worksheet #' @param orientation Page orientation. One of "portrait" or "landscape" #' @param scale Print scaling. Numeric value between 10 and 400 #' @param left left page margin in inches #' @param right right page margin in inches #' @param top top page margin in inches #' @param bottom bottom page margin in inches #' @param header header margin in inches #' @param footer footer margin in inches #' @param fitToWidth If `TRUE`, worksheet is scaled to fit to page width on printing. #' @param fitToHeight If `TRUE`, worksheet is scaled to fit to page height on printing. #' @param paperSize See details. Default value is 9 (A4 paper). #' @param printTitleRows Rows to repeat at top of page when printing. Integer vector. #' @param printTitleCols Columns to repeat at left when printing. Integer vector. #' @param summaryRow Location of summary rows in groupings. One of "Above" or "Below". #' @param summaryCol Location of summary columns in groupings. One of "Right" or "Left". #' @export #' @details #' paperSize is an integer corresponding to: #' \describe{ #' \item{**1**}{ Letter paper (8.5 in. by 11 in.)} #' \item{**2**}{ Letter small paper (8.5 in. by 11 in.)} #' \item{**3**}{ Tabloid paper (11 in. by 17 in.)} #' \item{**4**}{ Ledger paper (17 in. by 11 in.)} #' \item{**5**}{ Legal paper (8.5 in. by 14 in.)} #' \item{**6**}{ Statement paper (5.5 in. by 8.5 in.)} #' \item{**7**}{ Executive paper (7.25 in. by 10.5 in.)} #' \item{**8**}{ A3 paper (297 mm by 420 mm)} #' \item{**9**}{ A4 paper (210 mm by 297 mm)} #' \item{**10**}{ A4 small paper (210 mm by 297 mm)} #' \item{**11**}{ A5 paper (148 mm by 210 mm)} #' \item{**12**}{ B4 paper (250 mm by 353 mm)} #' \item{**13**}{ B5 paper (176 mm by 250 mm)} #' \item{**14**}{ Folio paper (8.5 in. by 13 in.)} #' \item{**15**}{ Quarto paper (215 mm by 275 mm)} #' \item{**16**}{ Standard paper (10 in. by 14 in.)} #' \item{**17**}{ Standard paper (11 in. by 17 in.)} #' \item{**18**}{ Note paper (8.5 in. by 11 in.)} #' \item{**19**}{ #9 envelope (3.875 in. by 8.875 in.)} #' \item{**20**}{ #10 envelope (4.125 in. by 9.5 in.)} #' \item{**21**}{ #11 envelope (4.5 in. by 10.375 in.)} #' \item{**22**}{ #12 envelope (4.75 in. by 11 in.)} #' \item{**23**}{ #14 envelope (5 in. by 11.5 in.)} #' \item{**24**}{ C paper (17 in. by 22 in.)} #' \item{**25**}{ D paper (22 in. by 34 in.)} #' \item{**26**}{ E paper (34 in. by 44 in.)} #' \item{**27**}{ DL envelope (110 mm by 220 mm)} #' \item{**28**}{ C5 envelope (162 mm by 229 mm)} #' \item{**29**}{ C3 envelope (324 mm by 458 mm)} #' \item{**30**}{ C4 envelope (229 mm by 324 mm)} #' \item{**31**}{ C6 envelope (114 mm by 162 mm)} #' \item{**32**}{ C65 envelope (114 mm by 229 mm)} #' \item{**33**}{ B4 envelope (250 mm by 353 mm)} #' \item{**34**}{ B5 envelope (176 mm by 250 mm)} #' \item{**35**}{ B6 envelope (176 mm by 125 mm)} #' \item{**36**}{ Italy envelope (110 mm by 230 mm)} #' \item{**37**}{ Monarch envelope (3.875 in. by 7.5 in.).} #' \item{**38**}{ 6 3/4 envelope (3.625 in. by 6.5 in.)} #' \item{**39**}{ US standard fanfold (14.875 in. by 11 in.)} #' \item{**40**}{ German standard fanfold (8.5 in. by 12 in.)} #' \item{**41**}{ German legal fanfold (8.5 in. by 13 in.)} #' \item{**42**}{ ISO B4 (250 mm by 353 mm)} #' \item{**43**}{ Japanese double postcard (200 mm by 148 mm)} #' \item{**44**}{ Standard paper (9 in. by 11 in.)} #' \item{**45**}{ Standard paper (10 in. by 11 in.)} #' \item{**46**}{ Standard paper (15 in. by 11 in.)} #' \item{**47**}{ Invite envelope (220 mm by 220 mm)} #' \item{**50**}{ Letter extra paper (9.275 in. by 12 in.)} #' \item{**51**}{ Legal extra paper (9.275 in. by 15 in.)} #' \item{**52**}{ Tabloid extra paper (11.69 in. by 18 in.)} #' \item{**53**}{ A4 extra paper (236 mm by 322 mm)} #' \item{**54**}{ Letter transverse paper (8.275 in. by 11 in.)} #' \item{**55**}{ A4 transverse paper (210 mm by 297 mm)} #' \item{**56**}{ Letter extra transverse paper (9.275 in. by 12 in.)} #' \item{**57**}{ SuperA/SuperA/A4 paper (227 mm by 356 mm)} #' \item{**58**}{ SuperB/SuperB/A3 paper (305 mm by 487 mm)} #' \item{**59**}{ Letter plus paper (8.5 in. by 12.69 in.)} #' \item{**60**}{ A4 plus paper (210 mm by 330 mm)} #' \item{**61**}{ A5 transverse paper (148 mm by 210 mm)} #' \item{**62**}{ JIS B5 transverse paper (182 mm by 257 mm)} #' \item{**63**}{ A3 extra paper (322 mm by 445 mm)} #' \item{**64**}{ A5 extra paper (174 mm by 235 mm)} #' \item{**65**}{ ISO B5 extra paper (201 mm by 276 mm)} #' \item{**66**}{ A2 paper (420 mm by 594 mm)} #' \item{**67**}{ A3 transverse paper (297 mm by 420 mm)} #' \item{**68**}{ A3 extra transverse paper (322 mm by 445 mm)} #' } #' @examples #' wb <- createWorkbook() #' addWorksheet(wb, "S1") #' addWorksheet(wb, "S2") #' writeDataTable(wb, 1, x = iris[1:30, ]) #' writeDataTable(wb, 2, x = iris[1:30, ], xy = c("C", 5)) #' #' ## landscape page scaled to 50% #' pageSetup(wb, sheet = 1, orientation = "landscape", scale = 50) #' #' ## portrait page scales to 300% with 0.5in left and right margins #' pageSetup(wb, sheet = 2, orientation = "portrait", scale = 300, left = 0.5, right = 0.5) #' #' #' ## print titles #' addWorksheet(wb, "print_title_rows") #' addWorksheet(wb, "print_title_cols") #' #' writeData(wb, "print_title_rows", rbind(iris, iris, iris, iris)) #' writeData(wb, "print_title_cols", x = rbind(mtcars, mtcars, mtcars), rowNames = TRUE) #' #' pageSetup(wb, sheet = "print_title_rows", printTitleRows = 1) ## first row #' pageSetup(wb, sheet = "print_title_cols", printTitleCols = 1, printTitleRows = 1) #' \dontrun{ #' saveWorkbook(wb, "pageSetupExample.xlsx", overwrite = TRUE) #' } pageSetup <- function(wb, sheet, orientation = NULL, scale = 100, left = 0.7, right = 0.7, top = 0.75, bottom = 0.75, header = 0.3, footer = 0.3, fitToWidth = FALSE, fitToHeight = FALSE, paperSize = NULL, printTitleRows = NULL, printTitleCols = NULL, summaryRow = NULL, summaryCol = NULL) { op <- get_set_options() on.exit(options(op), add = TRUE) if (!"Workbook" %in% class(wb)) { stop("First argument must be a Workbook.") } sheet <- wb$validateSheet(sheet) xml <- wb$worksheets[[sheet]]$pageSetup if (!is.null(orientation)) { orientation <- tolower(orientation) if (!orientation %in% c("portrait", "landscape")) stop("Invalid page orientation.") } else { orientation <- ifelse(grepl("landscape", xml), "landscape", "portrait") ## get existing } if (scale < 10 || scale > 400) { stop("Scale must be between 10 and 400.") } if (!is.null(paperSize)) { paperSizes <- 1:68 paperSizes <- paperSizes[!paperSizes %in% 48:49] if (!paperSize %in% paperSizes) { stop("paperSize must be an integer in range [1, 68]. See ?pageSetup details.") } paperSize <- as.integer(paperSize) } else { paperSize <- regmatches(xml, regexpr('(?<=paperSize=")[0-9]+', xml, perl = TRUE)) ## get existing } ############################## ## Keep defaults on orientation, hdpi, vdpi, paperSize hdpi <- regmatches(xml, regexpr('(?<=horizontalDpi=")[0-9]+', xml, perl = TRUE)) vdpi <- regmatches(xml, regexpr('(?<=verticalDpi=")[0-9]+', xml, perl = TRUE)) ############################## ## Update wb$worksheets[[sheet]]$pageSetup <- sprintf( '', paperSize, orientation, scale, as.integer(fitToWidth), as.integer(fitToHeight), hdpi, vdpi ) if (fitToHeight || fitToWidth) { wb$worksheets[[sheet]]$sheetPr <- unique(c(wb$worksheets[[sheet]]$sheetPr, '')) } wb$worksheets[[sheet]]$pageMargins <- sprintf('', left, right, top, bottom, header, footer) validRow <- function(summaryRow) { return(tolower(summaryRow) %in% c("above", "below")) } validCol <- function(summaryCol) { return(tolower(summaryCol) %in% c("left", "right")) } outlinepr <- "" if (!is.null(summaryRow)) { if (!validRow(summaryRow)) { stop("Invalid \`summaryRow\` option. Must be one of \"Above\" or \"Below\".") } else if (tolower(summaryRow) == "above") { outlinepr <- ' summaryBelow=\"0\"' } else { outlinepr <- ' summaryBelow=\"1\"' } } if (!is.null(summaryCol)) { if (!validCol(summaryCol)) { stop("Invalid \`summaryCol\` option. Must be one of \"Left\" or \"Right\".") } else if (tolower(summaryCol) == "left") { outlinepr <- paste0(outlinepr, ' summaryRight=\"0\"') } else { outlinepr <- paste0(outlinepr, ' summaryRight=\"1\"') } } if (!stri_isempty(outlinepr)) { wb$worksheets[[sheet]]$sheetPr <- unique(c(wb$worksheets[[sheet]]$sheetPr, paste0(""))) } ## print Titles if (!is.null(printTitleRows) && is.null(printTitleCols)) { if (!is.numeric(printTitleRows)) { stop("printTitleRows must be numeric.") } wb$createNamedRegion( ref1 = paste0("$", min(printTitleRows)), ref2 = paste0("$", max(printTitleRows)), name = "_xlnm.Print_Titles", sheet = names(wb)[[sheet]], localSheetId = sheet - 1L ) } else if (!is.null(printTitleCols) && is.null(printTitleRows)) { if (!is.numeric(printTitleCols)) { stop("printTitleCols must be numeric.") } cols <- convert_to_excel_ref(cols = range(printTitleCols), LETTERS = LETTERS) wb$createNamedRegion( ref1 = paste0("$", cols[1]), ref2 = paste0("$", cols[2]), name = "_xlnm.Print_Titles", sheet = names(wb)[[sheet]], localSheetId = sheet - 1L ) } else if (!is.null(printTitleCols) && !is.null(printTitleRows)) { if (!is.numeric(printTitleRows)) { stop("printTitleRows must be numeric.") } if (!is.numeric(printTitleCols)) { stop("printTitleCols must be numeric.") } cols <- convert_to_excel_ref(cols = range(printTitleCols), LETTERS = LETTERS) rows <- range(printTitleRows) cols <- paste(paste0("$", cols[1]), paste0("$", cols[2]), sep = ":") rows <- paste(paste0("$", rows[1]), paste0("$", rows[2]), sep = ":") localSheetId <- sheet - 1L sheet <- names(wb)[[sheet]] wb$workbook$definedNames <- c( wb$workbook$definedNames, sprintf('\'%s\'!%s,\'%s\'!%s', localSheetId, sheet, cols, sheet, rows) ) } } #' @name protectWorksheet #' @title Protect a worksheet from modifications #' @description Protect or unprotect a worksheet from modifications by the user in the graphical user interface. Replaces an existing protection. #' @author Reinhold Kainhofer #' @param wb A workbook object #' @param sheet A name or index of a worksheet #' @param protect Whether to protect or unprotect the sheet (default=TRUE) #' @param password (optional) password required to unprotect the worksheet #' @param lockSelectingLockedCells Whether selecting locked cells is locked #' @param lockSelectingUnlockedCells Whether selecting unlocked cells is locked #' @param lockFormattingCells Whether formatting cells is locked #' @param lockFormattingColumns Whether formatting columns is locked #' @param lockFormattingRows Whether formatting rows is locked #' @param lockInsertingColumns Whether inserting columns is locked #' @param lockInsertingRows Whether inserting rows is locked #' @param lockInsertingHyperlinks Whether inserting hyperlinks is locked #' @param lockDeletingColumns Whether deleting columns is locked #' @param lockDeletingRows Whether deleting rows is locked #' @param lockSorting Whether sorting is locked #' @param lockAutoFilter Whether auto-filter is locked #' @param lockPivotTables Whether pivot tables are locked #' @param lockObjects Whether objects are locked #' @param lockScenarios Whether scenarios are locked #' @export #' @examples #' wb <- createWorkbook() #' addWorksheet(wb, "S1") #' writeDataTable(wb, 1, x = iris[1:30, ]) #' # Formatting cells / columns is allowed , but inserting / deleting columns is protected: #' protectWorksheet(wb, "S1", #' protect = TRUE, #' lockFormattingCells = FALSE, lockFormattingColumns = FALSE, #' lockInsertingColumns = TRUE, lockDeletingColumns = TRUE #' ) #' #' # Remove the protection #' protectWorksheet(wb, "S1", protect = FALSE) #' \dontrun{ #' saveWorkbook(wb, "pageSetupExample.xlsx", overwrite = TRUE) #' } protectWorksheet <- function(wb, sheet, protect = TRUE, password = NULL, lockSelectingLockedCells = NULL, lockSelectingUnlockedCells = NULL, lockFormattingCells = NULL, lockFormattingColumns = NULL, lockFormattingRows = NULL, lockInsertingColumns = NULL, lockInsertingRows = NULL, lockInsertingHyperlinks = NULL, lockDeletingColumns = NULL, lockDeletingRows = NULL, lockSorting = NULL, lockAutoFilter = NULL, lockPivotTables = NULL, lockObjects = NULL, lockScenarios = NULL) { if (!"Workbook" %in% class(wb)) { stop("First argument must be a Workbook.") } sheet <- wb$validateSheet(sheet) # xml <- wb$worksheets[[sheet]]$sheetProtection variable not used props <- c() if (!missing(password) && !is.null(password)) { props["password"] <- hashPassword(password) } if (!missing(lockSelectingLockedCells) && !is.null(lockSelectingLockedCells)) { props["selectLockedCells"] <- toString(as.numeric(lockSelectingLockedCells)) } if (!missing(lockSelectingUnlockedCells) && !is.null(lockSelectingUnlockedCells)) { props["selectUnlockedCells"] <- toString(as.numeric(lockSelectingUnlockedCells)) } if (!missing(lockFormattingCells) && !is.null(lockFormattingCells)) { props["formatCells"] <- toString(as.numeric(lockFormattingCells)) } if (!missing(lockFormattingColumns) && !is.null(lockFormattingColumns)) { props["formatColumns"] <- toString(as.numeric(lockFormattingColumns)) } if (!missing(lockFormattingRows) && !is.null(lockFormattingRows)) { props["formatRows"] <- toString(as.numeric(lockFormattingRows)) } if (!missing(lockInsertingColumns) && !is.null(lockInsertingColumns)) { props["insertColumns"] <- toString(as.numeric(lockInsertingColumns)) } if (!missing(lockInsertingRows) && !is.null(lockInsertingRows)) { props["insertRows"] <- toString(as.numeric(lockInsertingRows)) } if (!missing(lockInsertingHyperlinks) && !is.null(lockInsertingHyperlinks)) { props["insertHyperlinks"] <- toString(as.numeric(lockInsertingHyperlinks)) } if (!missing(lockDeletingColumns) && !is.null(lockDeletingColumns)) { props["deleteColumns"] <- toString(as.numeric(lockDeletingColumns)) } if (!missing(lockDeletingRows) && !is.null(lockDeletingRows)) { props["deleteRows"] <- toString(as.numeric(lockDeletingRows)) } if (!missing(lockSorting) && !is.null(lockSorting)) { props["sort"] <- toString(as.numeric(lockSorting)) } if (!missing(lockAutoFilter) && !is.null(lockAutoFilter)) { props["autoFilter"] <- toString(as.numeric(lockAutoFilter)) } if (!missing(lockPivotTables) && !is.null(lockPivotTables)) { props["pivotTables"] <- toString(as.numeric(lockPivotTables)) } if (!missing(lockObjects) && !is.null(lockObjects)) { props["objects"] <- toString(as.numeric(lockObjects)) } if (!missing(lockScenarios) && !is.null(lockScenarios)) { props["scenarios"] <- toString(as.numeric(lockScenarios)) } if (protect) { props["sheet"] <- "1" wb$worksheets[[sheet]]$sheetProtection <- sprintf("", paste(names(props), '="', props, '"', collapse = " ", sep = "")) } else { wb$worksheets[[sheet]]$sheetProtection <- "" } } #' @name protectWorkbook #' @title Protect a workbook from modifications #' @description Protect or unprotect a workbook from modifications by the user in the graphical user interface. Replaces an existing protection. #' @author Reinhold Kainhofer #' @param wb A workbook object #' @param protect Whether to protect or unprotect the sheet (default=TRUE) #' @param password (optional) password required to unprotect the workbook #' @param lockStructure Whether the workbook structure should be locked #' @param lockWindows Whether the window position of the spreadsheet should be locked #' @param type Lock type, default 1. From the xml documentation: 1 - Document is password protected. 2 - Document is recommended to be opened as read-only. 4 - Document is enforced to be opened as read-only. 8 - Document is locked for annotation. #' @export #' @examples #' wb <- createWorkbook() #' addWorksheet(wb, "S1") #' protectWorkbook(wb, protect = TRUE, password = "Password", lockStructure = TRUE) #' \dontrun{ #' saveWorkbook(wb, "WorkBook_Protection.xlsx", overwrite = TRUE) #' } #' # Remove the protection #' protectWorkbook(wb, protect = FALSE) #' \dontrun{ #' saveWorkbook(wb, "WorkBook_Protection_unprotected.xlsx", overwrite = TRUE) #' } protectWorkbook <- function(wb, protect = TRUE, password = NULL, lockStructure = FALSE, lockWindows = FALSE, type = 1L) { if (!"Workbook" %in% class(wb)) { stop("First argument must be a Workbook.") } invisible(wb$protectWorkbook(protect = protect, password = password, lockStructure = lockStructure, lockWindows = lockWindows, type = type)) } #' @name showGridLines #' @title Set worksheet gridlines to show or hide. #' @description Set worksheet gridlines to show or hide. #' @author Alexander Walker #' @param wb A workbook object #' @param sheet A name or index of a worksheet #' @param showGridLines A logical. If `FALSE`, grid lines are hidden. #' @export #' @examples #' wb <- loadWorkbook(file = system.file("extdata", "loadExample.xlsx", package = "openxlsx")) #' names(wb) ## list worksheets in workbook #' showGridLines(wb, 1, showGridLines = FALSE) #' showGridLines(wb, "testing", showGridLines = FALSE) #' \dontrun{ #' saveWorkbook(wb, "showGridLinesExample.xlsx", overwrite = TRUE) #' } showGridLines <- function(wb, sheet, showGridLines = FALSE) { op <- get_set_options() on.exit(options(op), add = TRUE) if (!"Workbook" %in% class(wb)) { stop("First argument must be a Workbook.") } sheet <- wb$validateSheet(sheet) if (!is.logical(showGridLines)) stop("showGridLines must be a logical") sv <- wb$worksheets[[sheet]]$sheetViews showGridLines <- as.integer(showGridLines) ## If attribute exists gsub if (grepl("showGridLines", sv)) { sv <- gsub('showGridLines=".?[^"]', sprintf('showGridLines="%s', showGridLines), sv, perl = TRUE) } else { sv <- gsub(" length(wb$worksheets))) { stop("Elements of order are greater than the number of worksheets") } old_ActiveSheet <- wb$ActiveSheet wb$sheetOrder <- value wb$setactiveSheet(old_ActiveSheet) invisible(wb) } #' @name as_POSIXct_utc #' @title Convert to POSIXct with timezone UTC #' @param x something as.POSIXct can convert #' @keywords internal as_POSIXct_utc <- function(x) { z <- as.POSIXct(x, tz = "UTC") attr(z, "tzone") <- "UTC" z } #' @name convertToDate #' @title Convert from excel date number to R Date type #' @description Convert from excel date number to R Date type #' @param x A vector of integers #' @param origin date. Default value is for Windows Excel 2010 #' @param ... additional parameters passed to as.Date() #' @details Excel stores dates as number of days from some origin day #' @seealso [writeData()] #' @export #' @examples #' ## 2014 April 21st to 25th #' convertToDate(c(41750, 41751, 41752, 41753, 41754, NA)) #' convertToDate(c(41750.2, 41751.99, NA, 41753)) convertToDate <- function(x, origin = "1900-01-01", ...) { x <- as.numeric(x) notNa <- !is.na(x) earlyDate <- x < 60 if (origin == "1900-01-01") { x[notNa] <- x[notNa] - 2 x[earlyDate & notNa] <- x[earlyDate & notNa] + 1 } return(as.Date(x, origin = origin, ...)) } #' @name convertToDateTime #' @title Convert from excel time number to R POSIXct type. #' @description Convert from excel time number to R POSIXct type. #' @param x A numeric vector #' @param origin date. Default value is for Windows Excel 2010 #' @param ... Additional parameters passed to as.POSIXct #' @details Excel stores dates as number of days from some origin date #' @export #' @examples #' ## 2014-07-01, 2014-06-30, 2014-06-29 #' x <- c(41821.8127314815, 41820.8127314815, NA, 41819, NaN) #' convertToDateTime(x) #' convertToDateTime(x, tz = "Australia/Perth") #' convertToDateTime(x, tz = "UTC") convertToDateTime <- function(x, origin = "1900-01-01", ...) { op <- get_set_options() on.exit(options(op), add = TRUE) x <- as.numeric(x) date <- convertToDate(x, origin) x <- x * 86400 rem <- x %% 86400 hours <- as.integer(floor(rem / 3600)) minutes_fraction <- rem %% 3600 minutes_whole <- as.integer(floor(minutes_fraction / 60)) secs <- minutes_fraction %% 60 y <- sprintf("%02d:%02d:%06.3f", hours, minutes_whole, secs) notNA <- !is.na(x) date_time <- rep(NA, length(x)) date_time[notNA] <- as.POSIXct(paste(date[notNA], y[notNA]), ...) date_time <- .POSIXct(date_time) return(date_time) } #' @name names #' @title get or set worksheet names #' @description get or set worksheet names #' @aliases names.Workbook #' @export #' @method names Workbook #' @param x A `Workbook` object #' @examples #' #' wb <- createWorkbook() #' addWorksheet(wb, "S1") #' addWorksheet(wb, "S2") #' addWorksheet(wb, "S3") #' #' names(wb) #' names(wb)[[2]] <- "S2a" #' names(wb) #' names(wb) <- paste("Sheet", 1:3) names.Workbook <- function(x) { nms <- x$sheet_names nms <- replaceXMLEntities(nms) } #' @rdname names #' @param value a character vector the same length as wb #' @export `names<-.Workbook` <- function(x, value) { op <- get_set_options() on.exit(options(op), add = TRUE) if (any(duplicated(tolower(value)))) { stop("Worksheet names must be unique.") } existing_sheets <- x$sheet_names inds <- which(value != existing_sheets) if (length(inds) == 0) { return(invisible(x)) } if (length(value) != length(x$worksheets)) { stop(sprintf("names vector must have length equal to number of worksheets in Workbook [%s]", length(existing_sheets))) } if (any(nchar(value) > 31)) { warning("Worksheet names must less than 32 characters. Truncating names...") value[nchar(value) > 31] <- sapply(value[nchar(value) > 31], substr, start = 1, stop = 31) } for (i in inds) { invisible(x$setSheetName(i, value[[i]])) } invisible(x) } #' @name createNamedRegion #' @title Create / delete a named region. #' @description Create / delete a named region #' @author Alexander Walker #' @param wb A workbook object #' @param sheet A name or index of a worksheet #' @param rows Numeric vector specifying rows to include in region #' @param cols Numeric vector specifying columns to include in region #' @param name Name for region. A character vector of length 1. Note region names must be case-insensitive unique. #' @param overwrite Boolean. Overwrite if exists ? Default to FALSE #' #' @details Region is given by: min(cols):max(cols) X min(rows):max(rows) #' @export #' @seealso [getNamedRegions()] #' @examples #' ## create named regions #' wb <- createWorkbook() #' addWorksheet(wb, "Sheet 1") #' #' ## specify region #' writeData(wb, sheet = 1, x = iris, startCol = 1, startRow = 1) #' createNamedRegion( #' wb = wb, #' sheet = 1, #' name = "iris", #' rows = 1:(nrow(iris) + 1), #' cols = 1:ncol(iris) #' ) #' #' #' ## using writeData 'name' argument #' writeData(wb, sheet = 1, x = iris, name = "iris2", startCol = 10) #' #' out_file <- tempfile(fileext = ".xlsx") #' \dontrun{ #' saveWorkbook(wb, out_file, overwrite = TRUE) #' #' ## see named regions #' getNamedRegions(wb) ## From Workbook object #' getNamedRegions(out_file) ## From xlsx file #' #' ## delete one #' deleteNamedRegion(wb = wb, name = "iris2") #' getNamedRegions(wb) #' #' ## read named regions #' df <- read.xlsx(wb, namedRegion = "iris") #' head(df) #' #' df <- read.xlsx(out_file, namedRegion = "iris2") #' head(df) #' } #' #' @rdname NamedRegion createNamedRegion <- function(wb, sheet, cols, rows, name, overwrite = FALSE) { op <- get_set_options() on.exit(options(op), add = TRUE) sheet <- wb$validateSheet(sheet) if (!"Workbook" %in% class(wb)) { stop("First argument must be a Workbook.") } if (!is.numeric(rows)) { stop("rows argument must be a numeric/integer vector") } if (!is.numeric(cols)) { stop("cols argument must be a numeric/integer vector") } ## check name doesn't already exist ## named region ex_names <- regmatches(wb$workbook$definedNames, regexpr('(?<=name=")[^"]+', wb$workbook$definedNames, perl = TRUE)) ex_names <- tolower(replaceXMLEntities(ex_names)) if (tolower(name) %in% ex_names && !overwrite) { stop(sprintf("Named region with name '%s' already exists! Use overwrite = TRUE if you want to replace it", name)) } else if (tolower(name) %in% ex_names && overwrite) { wb$workbook$definedNames <- wb$workbook$definedNames[!ex_names %in% tolower(name)] } if (grepl("^[A-Z]{1,3}[0-9]+$", name)) { stop("name cannot look like a cell reference.") } cols <- round(cols) rows <- round(rows) startCol <- min(cols) endCol <- max(cols) startRow <- min(rows) endRow <- max(rows) ref1 <- paste0("$", convert_to_excel_ref(cols = startCol, LETTERS = LETTERS), "$", startRow) ref2 <- paste0("$", convert_to_excel_ref(cols = endCol, LETTERS = LETTERS), "$", endRow) invisible( wb$createNamedRegion(ref1 = ref1, ref2 = ref2, name = name, sheet = wb$sheet_names[sheet]) ) } #' @export #' @rdname NamedRegion deleteNamedRegion <- function(wb, name) { if (!"Workbook" %in% class(wb)) { stop("First argument must be a Workbook.") } ex_names <- regmatches(wb$workbook$definedNames, regexpr('(?<=name=")[^"]+', wb$workbook$definedNames, perl = TRUE)) ex_names <- tolower(replaceXMLEntities(ex_names)) if (tolower(name) %in% ex_names) { wb$workbook$definedNames <- wb$workbook$definedNames[!ex_names %in% tolower(name)] } else { warning(sprintf("Cannot find Named region with name '%s'", name)) } invisible(0) } #' @name getNamedRegions #' @title Get named regions #' @description Return a vector of named regions in a xlsx file or #' Workbook object #' @param x An xlsx file or Workbook object #' @export #' @seealso [createNamedRegion()] #' @examples #' ## create named regions #' wb <- createWorkbook() #' addWorksheet(wb, "Sheet 1") #' #' ## specify region #' writeData(wb, sheet = 1, x = iris, startCol = 1, startRow = 1) #' createNamedRegion( #' wb = wb, #' sheet = 1, #' name = "iris", #' rows = 1:(nrow(iris) + 1), #' cols = 1:ncol(iris) #' ) #' #' #' ## using writeData 'name' argument to create a named region #' writeData(wb, sheet = 1, x = iris, name = "iris2", startCol = 10) #' \dontrun{ #' out_file <- tempfile(fileext = ".xlsx") #' saveWorkbook(wb, out_file, overwrite = TRUE) #' #' ## see named regions #' getNamedRegions(wb) ## From Workbook object #' getNamedRegions(out_file) ## From xlsx file #' #' ## read named regions #' df <- read.xlsx(wb, namedRegion = "iris") #' head(df) #' #' df <- read.xlsx(out_file, namedRegion = "iris2") #' head(df) #' } #' getNamedRegions <- function(x) { UseMethod("getNamedRegions", x) } #' @export getNamedRegions.default <- function(x) { if (!file.exists(x)) { stop(sprintf("File '%s' does not exist.", x)) } xmlDir <- tempfile() xmlFiles <- unzip(x, exdir = xmlDir) workbook <- grep("workbook.xml$", xmlFiles, perl = TRUE, value = TRUE) workbook <- unlist(readUTF8(workbook)) dn <- getChildlessNode(xml = removeHeadTag(workbook), tag = "definedName") if (length(dn) == 0) { return(NULL) } dn_names <- get_named_regions_from_string(dn = dn) unlink(xmlDir, recursive = TRUE, force = TRUE) return(dn_names) } #' @export getNamedRegions.Workbook <- function(x) { dn <- x$workbook$definedNames if (length(dn) == 0) { return(NULL) } dn_names <- get_named_regions_from_string(dn = dn) return(dn_names) } #' @name addFilter #' @title Add column filters #' @description Add excel column filters to a worksheet #' @param wb A workbook object #' @param sheet A name or index of a worksheet #' @param cols columns to add filter to. #' @param rows A row number. #' @seealso [writeData()] #' @details adds filters to worksheet columns, same as filter parameters in writeData. #' writeDataTable automatically adds filters to first row of a table. #' NOTE Can only have a single filter per worksheet unless using tables. #' @export #' @seealso [addFilter()] #' @examples #' wb <- createWorkbook() #' addWorksheet(wb, "Sheet 1") #' addWorksheet(wb, "Sheet 2") #' addWorksheet(wb, "Sheet 3") #' #' writeData(wb, 1, iris) #' addFilter(wb, 1, row = 1, cols = 1:ncol(iris)) #' #' ## Equivalently #' writeData(wb, 2, x = iris, withFilter = TRUE) #' #' ## Similarly #' writeDataTable(wb, 3, iris) #' \dontrun{ #' saveWorkbook(wb, file = "addFilterExample.xlsx", overwrite = TRUE) #' } addFilter <- function(wb, sheet, rows, cols) { op <- get_set_options() on.exit(options(op), add = TRUE) if (!"Workbook" %in% class(wb)) { stop("First argument must be a Workbook.") } sheet <- wb$validateSheet(sheet) if (length(rows) != 1) { stop("row must be a numeric of length 1.") } if (!is.numeric(cols)) { cols <- convertFromExcelRef(cols) } wb$worksheets[[sheet]]$autoFilter <- sprintf('', paste(getCellRefs(data.frame("x" = c(rows, rows), "y" = c(min(cols), max(cols)))), collapse = ":")) invisible(wb) } #' @name removeFilter #' @title Remove a worksheet filter #' @description Removes filters from addFilter() and writeData() #' @param wb A workbook object #' @param sheet A vector of names or indices of worksheets #' @export #' @examples #' wb <- createWorkbook() #' addWorksheet(wb, "Sheet 1") #' addWorksheet(wb, "Sheet 2") #' addWorksheet(wb, "Sheet 3") #' #' writeData(wb, 1, iris) #' addFilter(wb, 1, row = 1, cols = 1:ncol(iris)) #' #' ## Equivalently #' writeData(wb, 2, x = iris, withFilter = TRUE) #' #' ## Similarly #' writeDataTable(wb, 3, iris) #' #' ## remove filters #' removeFilter(wb, 1:2) ## remove filters #' removeFilter(wb, 3) ## Does not affect tables! #' \dontrun{ #' saveWorkbook(wb, file = "removeFilterExample.xlsx", overwrite = TRUE) #' } removeFilter <- function(wb, sheet) { if (!"Workbook" %in% class(wb)) { stop("First argument must be a Workbook.") } for (s in sheet) { s <- wb$validateSheet(s) wb$worksheets[[s]]$autoFilter <- character(0) } invisible(wb) } #' @name setHeader #' @title Set header for all worksheets #' @description DEPRECATED #' @author Alexander Walker #' @param wb A workbook object #' @param text header text. A character vector of length 1. #' @param position Position of text in header. One of "left", "center" or "right" #' @export #' @examples #' \dontrun{ #' wb <- createWorkbook("Edgar Anderson") #' addWorksheet(wb, "S1") #' writeDataTable(wb, "S1", x = iris[1:30, ], xy = c("C", 5)) #' #' ## set all headers #' setHeader(wb, "This is a header", position = "center") #' setHeader(wb, "To the left", position = "left") #' setHeader(wb, "On the right", position = "right") #' #' ## set all footers #' setFooter(wb, "Center Footer Here", position = "center") #' setFooter(wb, "Bottom left", position = "left") #' setFooter(wb, Sys.Date(), position = "right") #' #' saveWorkbook(wb, "headerHeaderExample.xlsx", overwrite = TRUE) #' } setHeader <- function(wb, text, position = "center") { warning("This function is deprecated. Use function 'setHeaderFooter()'") if (!"Workbook" %in% class(wb)) { stop("First argument must be a Workbook.") } position <- tolower(position) if (!position %in% c("left", "center", "right")) { stop("Invalid position.") } if (length(text) != 1) { stop("Text argument must be a character vector of length 1") } # sheet <- wb$validateSheet(1) variable not used wb$headFoot$text[wb$headFoot$pos == position & wb$headFoot$head == "head"] <- as.character(text) } #' @name setFooter #' @title Set footer for all worksheets #' @description DEPRECATED #' @author Alexander Walker #' @param wb A workbook object #' @param text footer text. A character vector of length 1. #' @param position Position of text in footer. One of "left", "center" or "right" #' @export #' @examples #' \dontrun{ #' wb <- createWorkbook("Edgar Anderson") #' addWorksheet(wb, "S1") #' writeDataTable(wb, "S1", x = iris[1:30, ], xy = c("C", 5)) #' #' ## set all headers #' setHeader(wb, "This is a header", position = "center") #' setHeader(wb, "To the left", position = "left") #' setHeader(wb, "On the right", position = "right") #' #' ## set all footers #' setFooter(wb, "Center Footer Here", position = "center") #' setFooter(wb, "Bottom left", position = "left") #' setFooter(wb, Sys.Date(), position = "right") #' #' saveWorkbook(wb, "headerFooterExample.xlsx", overwrite = TRUE) #' } setFooter <- function(wb, text, position = "center") { warning("This function is deprecated. Use function 'setHeaderFooter()'") if (!"Workbook" %in% class(wb)) { stop("First argument must be a Workbook.") } position <- tolower(position) if (!position %in% c("left", "center", "right")) { stop("Invalid position.") } if (length(text) != 1) { stop("Text argument must be a character vector of length 1") } # sheet <- wb$validateSheet(1) variable not used wb$headFoot$text[wb$headFoot$pos == position & wb$headFoot$head == "foot"] <- as.character(text) } #' @name dataValidation #' @title Add data validation to cells #' @description Add Excel data validation to cells #' @param wb A workbook object #' @param sheet A name or index of a worksheet #' @param cols Contiguous columns to apply conditional formatting to #' @param rows Contiguous rows to apply conditional formatting to #' @param type One of 'whole', 'decimal', 'date', 'time', 'textLength', 'list' (see examples) #' @param operator One of 'between', 'notBetween', 'equal', #' 'notEqual', 'greaterThan', 'lessThan', 'greaterThanOrEqual', 'lessThanOrEqual' #' @param value a vector of length 1 or 2 depending on operator (see examples) #' @param allowBlank logical #' @param showInputMsg logical #' @param showErrorMsg logical #' @export #' @examples #' wb <- createWorkbook() #' addWorksheet(wb, "Sheet 1") #' addWorksheet(wb, "Sheet 2") #' #' writeDataTable(wb, 1, x = iris[1:30, ]) #' #' dataValidation(wb, 1, #' col = 1:3, rows = 2:31, type = "whole", #' operator = "between", value = c(1, 9) #' ) #' #' dataValidation(wb, 1, #' col = 5, rows = 2:31, type = "textLength", #' operator = "between", value = c(4, 6) #' ) #' #' #' ## Date and Time cell validation #' df <- data.frame( #' "d" = as.Date("2016-01-01") + -5:5, #' "t" = as.POSIXct("2016-01-01") + -5:5 * 10000 #' ) #' #' writeData(wb, 2, x = df) #' dataValidation(wb, 2, #' col = 1, rows = 2:12, type = "date", #' operator = "greaterThanOrEqual", value = as.Date("2016-01-01") #' ) #' #' dataValidation(wb, 2, #' col = 2, rows = 2:12, type = "time", #' operator = "between", value = df$t[c(4, 8)] #' ) #' \dontrun{ #' saveWorkbook(wb, "dataValidationExample.xlsx", overwrite = TRUE) #' } #' #' #' ###################################################################### #' ## If type == 'list' #' # operator argument is ignored. #' #' wb <- createWorkbook() #' addWorksheet(wb, "Sheet 1") #' addWorksheet(wb, "Sheet 2") #' #' writeDataTable(wb, sheet = 1, x = iris[1:30, ]) #' writeData(wb, sheet = 2, x = sample(iris$Sepal.Length, 10)) #' #' dataValidation(wb, 1, col = 1, rows = 2:31, type = "list", value = "'Sheet 2'!$A$1:$A$10") #' #' # openXL(wb) dataValidation <- function(wb, sheet, cols, rows, type, operator, value, allowBlank = TRUE, showInputMsg = TRUE, showErrorMsg = TRUE) { op <- get_set_options() on.exit(options(op), add = TRUE) ## rows and cols if (!is.numeric(cols)) { cols <- convertFromExcelRef(cols) } rows <- as.integer(rows) ## check length of value if (length(value) > 2) { stop("value argument must be length < 2") } valid_types <- c( "whole", "decimal", "date", "time", ## need to conv "textLength", "list" ) if (!tolower(type) %in% tolower(valid_types)) { stop("Invalid 'type' argument!") } ## operator == 'between' we leave out valid_operators <- c( "between", "notBetween", "equal", "notEqual", "greaterThan", "lessThan", "greaterThanOrEqual", "lessThanOrEqual" ) if (tolower(type) != "list") { if (!tolower(operator) %in% tolower(valid_operators)) { stop("Invalid 'operator' argument!") } operator <- valid_operators[tolower(valid_operators) %in% tolower(operator)][1] } else { operator <- "between" ## ignored } if (!is.logical(allowBlank)) { stop("Argument 'allowBlank' must be logical!") } if (!is.logical(showInputMsg)) { stop("Argument 'showInputMsg' must be logical!") } if (!is.logical(showErrorMsg)) { stop("Argument 'showErrorMsg' must be logical!") } ## All inputs validated type <- valid_types[tolower(valid_types) %in% tolower(type)][1] ## check input combinations if (type == "date" && !"Date" %in% class(value)) { stop("If type == 'date' value argument must be a Date vector.") } if (type == "time" && !any(tolower(class(value)) %in% c("posixct", "posixt"))) { stop("If type == 'date' value argument must be a POSIXct or POSIXlt vector.") } value <- head(value, 2) allowBlank <- as.integer(allowBlank[1]) showInputMsg <- as.integer(showInputMsg[1]) showErrorMsg <- as.integer(showErrorMsg[1]) if (type == "list") { invisible(wb$dataValidation_list( sheet = sheet, startRow = min(rows), endRow = max(rows), startCol = min(cols), endCol = max(cols), value = value, allowBlank = allowBlank, showInputMsg = showInputMsg, showErrorMsg = showErrorMsg )) } else { invisible(wb$dataValidation( sheet = sheet, startRow = min(rows), endRow = max(rows), startCol = min(cols), endCol = max(cols), type = type, operator = operator, value = value, allowBlank = allowBlank, showInputMsg = showInputMsg, showErrorMsg = showErrorMsg )) } invisible(0) } #' @name getDateOrigin #' @title Get the date origin an xlsx file is using #' @description Return the date origin used internally by an xlsx or xlsm file #' @author Alexander Walker #' @param xlsxFile An xlsx or xlsm file. #' @details Excel stores dates as the number of days from either 1904-01-01 or 1900-01-01. This function #' checks the date origin being used in an Excel file and returns is so it can be used in [convertToDate()] #' @return One of "1900-01-01" or "1904-01-01". #' @seealso [convertToDate()] #' @examples #' #' ## create a file with some dates #' \dontrun{ #' write.xlsx(as.Date("2015-01-10") - (0:4), file = "getDateOriginExample.xlsx") #' m <- read.xlsx("getDateOriginExample.xlsx") #' #' ## convert to dates #' do <- getDateOrigin(system.file("extdata", "readTest.xlsx", package = "openxlsx")) #' convertToDate(m[[1]], do) #' } #' @export getDateOrigin <- function(xlsxFile) { xlsxFile <- getFile(xlsxFile) if (!file.exists(xlsxFile)) { stop("File does not exist.") } if (grepl("\\.xls$|\\.xlm$", xlsxFile)) { stop("openxlsx can not read .xls or .xlm files!") } ## create temp dir and unzip xmlDir <- tempfile() xmlFiles <- unzip(xlsxFile, exdir = xmlDir) on.exit(unlink(xmlDir, recursive = TRUE), add = TRUE) workbook <- grep("workbook.xml$", xmlFiles, perl = TRUE, value = TRUE) workbook <- paste(unlist(readUTF8(workbook)), collapse = "") if (grepl('date1904="1"|date1904="true"', workbook, ignore.case = TRUE)) { origin <- "1904-01-01" } else { origin <- "1900-01-01" } return(origin) } #' @name getSheetNames #' @title Get names of worksheets #' @description Returns the worksheet names within an xlsx file #' @author Alexander Walker #' @param file An xlsx or xlsm file. #' @return Character vector of worksheet names. #' @examples #' getSheetNames(system.file("extdata", "readTest.xlsx", package = "openxlsx")) #' @export getSheetNames <- function(file) { if (!file.exists(file)) { stop("file does not exist.") } if (grepl("\\.xls$|\\.xlm$", file)) { stop("openxlsx can not read .xls or .xlm files!") } ## create temp dir and unzip xmlDir <- tempfile() xmlFiles <- unzip(file, exdir = xmlDir) on.exit(unlink(xmlDir, recursive = TRUE), add = TRUE) workbook <- grep("workbook.xml$", xmlFiles, perl = TRUE, value = TRUE) workbook <- readUTF8(workbook) workbook <- removeHeadTag(workbook) sheets <- unlist(regmatches(workbook, gregexpr("(?<=).*(?=)", workbook, perl = TRUE))) sheets <- unlist(regmatches(sheets, gregexpr("]*>", sheets, perl = TRUE))) ## Some veryHidden sheets do not have a sheet content and their rId is empty. ## Such sheets need to be filtered out because otherwise their sheet names ## occur in the list of all sheet names, leading to a wrong association ## of sheet names with sheet indeces. sheets <- grep('r:id="[[:blank:]]*"', sheets, invert = TRUE, value = TRUE) sheetNames <- unlist(regmatches(sheets, gregexpr('(?<=name=")[^"]+', sheets, perl = TRUE))) sheetNames <- replaceXMLEntities(sheetNames) return(sheetNames) } #' @name sheetVisibility #' @title Get/set worksheet visible state #' @description Get and set worksheet visible state #' @param wb A workbook object #' @return Character vector of worksheet names. #' @return Vector of "hidden", "visible", "veryHidden" #' @examples #' #' wb <- createWorkbook() #' addWorksheet(wb, sheetName = "S1", visible = FALSE) #' addWorksheet(wb, sheetName = "S2", visible = TRUE) #' addWorksheet(wb, sheetName = "S3", visible = FALSE) #' #' sheetVisibility(wb) #' sheetVisibility(wb)[1] <- TRUE ## show sheet 1 #' sheetVisibility(wb)[2] <- FALSE ## hide sheet 2 #' sheetVisibility(wb)[3] <- "hidden" ## hide sheet 3 #' sheetVisibility(wb)[3] <- "veryHidden" ## hide sheet 3 from UI #' @export sheetVisibility <- function(wb) { if (!"Workbook" %in% class(wb)) { stop("First argument must be a Workbook.") } state <- rep("visible", length(wb$workbook$sheets)) state[grepl("hidden", wb$workbook$sheets)] <- "hidden" state[grepl("veryHidden", wb$workbook$sheets, ignore.case = TRUE)] <- "veryHidden" return(state) } #' @rdname sheetVisibility #' @param value a logical/character vector the same length as sheetVisibility(wb) #' @export `sheetVisibility<-` <- function(wb, value) { op <- get_set_options() on.exit(options(op), add = TRUE) value <- tolower(as.character(value)) if (!any(value %in% c("true", "visible"))) { stop("A workbook must have atleast 1 visible worksheet.") } value[value %in% "true"] <- "visible" value[value %in% "false"] <- "hidden" value[value %in% "veryhidden"] <- "veryHidden" exState0 <- regmatches(wb$workbook$sheets, regexpr('(?<=state=")[^"]+', wb$workbook$sheets, perl = TRUE)) exState <- tolower(exState0) exState[exState %in% "true"] <- "visible" exState[exState %in% "hidden"] <- "hidden" exState[exState %in% "false"] <- "hidden" exState[exState %in% "veryhidden"] <- "veryHidden" if (length(value) != length(wb$workbook$sheets)) { stop(sprintf("value vector must have length equal to number of worksheets in Workbook [%s]", length(exState))) } inds <- which(value != exState) if (length(inds) == 0) { return(invisible(wb)) } for (i in seq_along(wb$worksheets)) { wb$workbook$sheets[i] <- gsub(exState0[i], value[i], wb$workbook$sheets[i], fixed = TRUE) } invisible(wb) } #' @name pageBreak #' @title add a page break to a worksheet #' @description insert page breaks into a worksheet #' @param wb A workbook object #' @param sheet A name or index of a worksheet #' @param i row or column number to insert page break. #' @param type One of "row" or "column" for a row break or column break. #' @export #' @seealso [addWorksheet()] #' @examples #' wb <- createWorkbook() #' addWorksheet(wb, "Sheet 1") #' writeData(wb, sheet = 1, x = iris) #' #' pageBreak(wb, sheet = 1, i = 10, type = "row") #' pageBreak(wb, sheet = 1, i = 20, type = "row") #' pageBreak(wb, sheet = 1, i = 2, type = "column") #' \dontrun{ #' saveWorkbook(wb, "pageBreakExample.xlsx", TRUE) #' } #' ## In Excel: View tab -> Page Break Preview pageBreak <- function(wb, sheet, i, type = "row") { op <- get_set_options() on.exit(options(op), add = TRUE) if (!"Workbook" %in% class(wb)) { stop("First argument must be a Workbook.") } sheet <- wb$validateSheet(sheet) type <- tolower(type)[1] if (!type %in% c("row", "column")) { stop("'type' argument must be 'row' or 'column'.") } if (!is.numeric(i)) { stop("'i' must be numeric.") } i <- round(i) if (type == "row") { wb$worksheets[[sheet]]$rowBreaks <- c( wb$worksheets[[sheet]]$rowBreaks, sprintf('', i) ) } else if (type == "column") { wb$worksheets[[sheet]]$colBreaks <- c( wb$worksheets[[sheet]]$colBreaks, sprintf('', i) ) } # wb$worksheets[[sheet]]$autoFilter <- sprintf('', paste(getCellRefs(data.frame("x" = c(rows, rows), "y" = c(min(cols), max(cols)))), collapse = ":")) invisible(wb) } #' @name conditionalFormat #' @title Add conditional formatting to cells #' @description DEPRECATED! USE [conditionalFormatting()] #' @author Alexander Walker #' @param wb A workbook object #' @param sheet A name or index of a worksheet #' @param cols Columns to apply conditional formatting to #' @param rows Rows to apply conditional formatting to #' @param rule The condition under which to apply the formatting or a vector of colours. See examples. #' @param style A style to apply to those cells that satisfy the rule. A Style object returned from createStyle() #' @details DEPRECATED! USE [conditionalFormatting()] #' #' Valid operators are "<", "<=", ">", ">=", "==", "!=". See Examples. #' Default style given by: createStyle(fontColour = "#9C0006", bgFill = "#FFC7CE") #' @param type Either 'expression', 'colorscale' or 'databar'. If 'expression' the formatting is determined #' by a formula. If colorScale cells are coloured based on cell value. See examples. #' @seealso [createStyle()] #' @export conditionalFormat <- function(wb, sheet, cols, rows, rule = NULL, style = NULL, type = "expression") { warning("conditionalFormat() has been deprecated. Use conditionalFormatting().") ## Rule always applies to top left of sqref, $ determine which cells the rule depends on ## Rule for "databar" and colourscale are colours of length 2/3 or 1 respectively. type <- tolower(type) if (tolower(type) %in% c("colorscale", "colourscale")) { type <- "colorScale" } else if (type == "databar") { type <- "dataBar" } else if (type != "expression") { stop("Invalid type argument. Type must be 'expression', 'colourScale' or 'databar'") } ## rows and cols if (!is.numeric(cols)) { cols <- convertFromExcelRef(cols) } rows <- as.integer(rows) ## check valid rule if (type == "colorScale") { if (!length(rule) %in% 2:3) { stop("rule must be a vector containing 2 or 3 colours if type is 'colorScale'") } rule <- validateColour(rule, errorMsg = "Invalid colour specified in rule.") dxfId <- NULL } else if (type == "dataBar") { ## If rule is NULL use default colour if (is.null(rule)) { rule <- "FF638EC6" } else { rule <- validateColour(rule, errorMsg = "Invalid colour specified in rule.") } dxfId <- NULL } else { ## else type == "expression" rule <- toupper(gsub(" ", "", rule)) rule <- replaceIllegalCharacters(rule) rule <- gsub("!=", "<>", rule) rule <- gsub("==", "=", rule) if (!grepl("[A-Z]", substr(rule, 1, 2))) { ## formula looks like "operatorX" , attach top left cell to rule rule <- paste0(getCellRefs(data.frame("x" = min(rows), "y" = min(cols))), rule) } ## else, there is a letter in the formula and apply as is if (is.null(style)) { style <- createStyle(fontColour = "#9C0006", bgFill = "#FFC7CE") } invisible(dxfId <- wb$addDXFS(style)) } invisible(wb$conditionalFormatCell(sheet, startRow = min(rows), endRow = max(rows), startCol = min(cols), endCol = max(cols), dxfId, formula = rule, type = type )) invisible(0) } #' @name all.equal #' @aliases all.equal.Workbook #' @title Check equality of workbooks #' @description Check equality of workbooks #' @method all.equal Workbook #' @param target A `Workbook` object #' @param current A `Workbook` object #' @param ... ignored all.equal.Workbook <- function(target, current, ...) { # print("Comparing workbooks...") # ".rels", # "app", # "charts", # "colWidths", # "Content_Types", # "core", # "drawings", # "drawings_rels", # "media", # "rowHeights", # "workbook", # "workbook.xml.rels", # "worksheets", # "sheetOrder" # "sharedStrings", # "tables", # "tables.xml.rels", # "theme" ## TODO # sheet_data x <- target y <- current nSheets <- length(names(x)) failures <- NULL flag <- all(names(x$charts) %in% names(y$charts)) & all(names(y$charts) %in% names(x$charts)) if (!flag) { message("charts not equal") failures <- c(failures, "wb$charts") } flag <- all(sapply(1:nSheets, function(i) isTRUE(all.equal(x$colWidths[[i]], y$colWidths[[i]])))) if (!flag) { message("colWidths not equal") failures <- c(failures, "wb$colWidths") } flag <- all(x$Content_Types %in% y$Content_Types) & all(y$Content_Types %in% x$Content_Types) if (!flag) { message("Content_Types not equal") failures <- c(failures, "wb$Content_Types") } flag <- all(unlist(x$core) == unlist(y$core)) if (!flag) { message("core not equal") failures <- c(failures, "wb$core") } flag <- all(unlist(x$drawings) %in% unlist(y$drawings)) & all(unlist(y$drawings) %in% unlist(x$drawings)) if (!flag) { message("drawings not equal") failures <- c(failures, "wb$drawings") } flag <- all(unlist(x$drawings_rels) %in% unlist(y$drawings_rels)) & all(unlist(y$drawings_rels) %in% unlist(x$drawings_rels)) if (!flag) { message("drawings_rels not equal") failures <- c(failures, "wb$drawings_rels") } flag <- all(sapply(1:nSheets, function(i) isTRUE(all.equal(x$drawings_rels[[i]], y$drawings_rels[[i]])))) if (!flag) { message("drawings_rels not equal") failures <- c(failures, "wb$drawings_rels") } flag <- all(names(x$media) %in% names(y$media) & names(y$media) %in% names(x$media)) if (!flag) { message("media not equal") failures <- c(failures, "wb$media") } flag <- all(sapply(1:nSheets, function(i) isTRUE(all.equal(x$rowHeights[[i]], y$rowHeights[[i]])))) if (!flag) { message("rowHeights not equal") failures <- c(failures, "wb$rowHeights") } flag <- all(sapply(1:nSheets, function(i) isTRUE(all.equal(names(x$rowHeights[[i]]), names(y$rowHeights[[i]]))))) if (!flag) { message("rowHeights not equal") failures <- c(failures, "wb$rowHeights") } flag <- all(x$sharedStrings %in% y$sharedStrings) & all(y$sharedStrings %in% x$sharedStrings) & (length(x$sharedStrings) == length(y$sharedStrings)) if (!flag) { message("sharedStrings not equal") failures <- c(failures, "wb$sharedStrings") } # flag <- sapply(1:nSheets, function(i) isTRUE(all.equal(x$worksheets[[i]]$sheet_data, y$worksheets[[i]]$sheet_data))) # if(!all(flag)){ # # tmp_x <- x$sheet_data[[which(!flag)[[1]]]] # tmp_y <- y$sheet_data[[which(!flag)[[1]]]] # # tmp_x_e <- sapply(tmp_x, "[[", "r") # tmp_y_e <- sapply(tmp_y, "[[", "r") # flag <- paste0(tmp_x_e, "") != paste0(tmp_x_e, "") # if(any(flag)){ # message(sprintf("sheet_data %s not equal", which(!flag)[[1]])) # message(sprintf("r elements: %s", paste(which(flag), collapse = ", "))) # return(FALSE) # } # # tmp_x_e <- sapply(tmp_x, "[[", "t") # tmp_y_e <- sapply(tmp_y, "[[", "t") # flag <- paste0(tmp_x_e, "") != paste0(tmp_x_e, "") # if(any(flag)){ # message(sprintf("sheet_data %s not equal", which(!flag)[[1]])) # message(sprintf("t elements: %s", paste(which(isTRUE(flag)), collapse = ", "))) # return(FALSE) # } # # # tmp_x_e <- sapply(tmp_x, "[[", "v") # tmp_y_e <- sapply(tmp_y, "[[", "v") # flag <- paste0(tmp_x_e, "") != paste0(tmp_x_e, "") # if(any(flag)){ # message(sprintf("sheet_data %s not equal", which(!flag)[[1]])) # message(sprintf("v elements: %s", paste(which(flag), collapse = ", "))) # return(FALSE) # } # # tmp_x_e <- sapply(tmp_x, "[[", "f") # tmp_y_e <- sapply(tmp_y, "[[", "f") # flag <- paste0(tmp_x_e, "") != paste0(tmp_x_e, "") # if(any(flag)){ # message(sprintf("sheet_data %s not equal", which(!flag)[[1]])) # message(sprintf("f elements: %s", paste(which(flag), collapse = ", "))) # return(FALSE) # } # } flag <- all(names(x$styles) %in% names(y$styles)) & all(names(y$styles) %in% names(x$styles)) if (!flag) { message("names styles not equal") failures <- c(failures, "names of styles not equal") } flag <- all(unlist(x$styles) %in% unlist(y$styles)) & all(unlist(y$styles) %in% unlist(x$styles)) if (!flag) { message("styles not equal") failures <- c(failures, "styles not equal") } flag <- length(x$styleObjects) == length(y$styleObjects) if (!flag) { message("styleObjects lengths not equal") failures <- c(failures, "styleObjects lengths not equal") } nStyles <- length(x$styleObjects) if (nStyles > 0) { for (i in 1:nStyles) { sx <- x$styleObjects[[i]] sy <- y$styleObjects[[i]] flag <- isTRUE(all.equal(sx$sheet, sy$sheet)) if (!flag) { message(sprintf("styleObjects '%s' sheet name not equal", i)) failures <- c(failures, sprintf("styleObjects '%s' sheet name not equal", i)) } flag <- isTRUE(all.equal(sx$rows, sy$rows)) if (!flag) { message(sprintf("styleObjects '%s' rows not equal", i)) failures <- c(failures, sprintf("styleObjects '%s' rows not equal", i)) } flag <- isTRUE(all.equal(sx$cols, sy$cols)) if (!flag) { message(sprintf("styleObjects '%s' cols not equal", i)) failures <- c(failures, sprintf("styleObjects '%s' cols not equal", i)) } ## check style class equality flag <- isTRUE(all.equal(sx$style$fontName, sy$style$fontName)) if (!flag) { message(sprintf("styleObjects '%s' fontName not equal", i)) failures <- c(failures, sprintf("styleObjects '%s' fontName not equal", i)) } flag <- isTRUE(all.equal(sx$style$fontColour, sy$style$fontColour)) if (!flag) { message(sprintf("styleObjects '%s' fontColour not equal", i)) failures <- c(failures, sprintf("styleObjects '%s' fontColour not equal", i)) } flag <- isTRUE(all.equal(sx$style$fontSize, sy$style$fontSize)) if (!flag) { message(sprintf("styleObjects '%s' fontSize not equal", i)) failures <- c(failures, sprintf("styleObjects '%s' fontSize not equal", i)) } flag <- isTRUE(all.equal(sx$style$fontFamily, sy$style$fontFamily)) if (!flag) { message(sprintf("styleObjects '%s' fontFamily not equal", i)) failures <- c(failures, sprintf("styleObjects '%s' fontFamily not equal", i)) } flag <- isTRUE(all.equal(sx$style$fontDecoration, sy$style$fontDecoration)) if (!flag) { message(sprintf("styleObjects '%s' fontDecoration not equal", i)) failures <- c(failures, sprintf("styleObjects '%s' fontDecoration not equal", i)) } flag <- isTRUE(all.equal(sx$style$borderTop, sy$style$borderTop)) if (!flag) { message(sprintf("styleObjects '%s' borderTop not equal", i)) failures <- c(failures, sprintf("styleObjects '%s' borderTop not equal", i)) } flag <- isTRUE(all.equal(sx$style$borderLeft, sy$style$borderLeft)) if (!flag) { message(sprintf("styleObjects '%s' borderLeft not equal", i)) failures <- c(failures, sprintf("styleObjects '%s' borderLeft not equal", i)) } flag <- isTRUE(all.equal(sx$style$borderRight, sy$style$borderRight)) if (!flag) { message(sprintf("styleObjects '%s' borderRight not equal", i)) failures <- c(failures, sprintf("styleObjects '%s' borderRight not equal", i)) } flag <- isTRUE(all.equal(sx$style$borderBottom, sy$style$borderBottom)) if (!flag) { message(sprintf("styleObjects '%s' borderBottom not equal", i)) failures <- c(failures, sprintf("styleObjects '%s' borderBottom not equal", i)) } flag <- isTRUE(all.equal(sx$style$borderTopColour, sy$style$borderTopColour)) if (!flag) { message(sprintf("styleObjects '%s' borderTopColour not equal", i)) failures <- c(failures, sprintf("styleObjects '%s' borderTopColour not equal", i)) } flag <- isTRUE(all.equal(sx$style$borderLeftColour, sy$style$borderLeftColour)) if (!flag) { message(sprintf("styleObjects '%s' borderLeftColour not equal", i)) failures <- c(failures, sprintf("styleObjects '%s' borderLeftColour not equal", i)) } flag <- isTRUE(all.equal(sx$style$borderRightColour, sy$style$borderRightColour)) if (!flag) { message(sprintf("styleObjects '%s' borderRightColour not equal", i)) failures <- c(failures, sprintf("styleObjects '%s' borderRightColour not equal", i)) } flag <- isTRUE(all.equal(sx$style$borderBottomColour, sy$style$borderBottomColour)) if (!flag) { message(sprintf("styleObjects '%s' borderBottomColour not equal", i)) failures <- c(failures, sprintf("styleObjects '%s' borderBottomColour not equal", i)) } flag <- isTRUE(all.equal(sx$style$halign, sy$style$halign)) if (!flag) { message(sprintf("styleObjects '%s' halign not equal", i)) failures <- c(failures, sprintf("styleObjects '%s' halign not equal", i)) } flag <- isTRUE(all.equal(sx$style$valign, sy$style$valign)) if (!flag) { message(sprintf("styleObjects '%s' valign not equal", i)) failures <- c(failures, sprintf("styleObjects '%s' valign not equal", i)) } flag <- isTRUE(all.equal(sx$style$indent, sy$style$indent)) if (!flag) { message(sprintf("styleObjects '%s' indent not equal", i)) failures <- c(failures, sprintf("styleObjects '%s' indent not equal", i)) } flag <- isTRUE(all.equal(sx$style$textRotation, sy$style$textRotation)) if (!flag) { message(sprintf("styleObjects '%s' textRotation not equal", i)) failures <- c(failures, sprintf("styleObjects '%s' textRotation not equal", i)) } flag <- isTRUE(all.equal(sx$style$numFmt, sy$style$numFmt)) if (!flag) { message(sprintf("styleObjects '%s' numFmt not equal", i)) failures <- c(failures, sprintf("styleObjects '%s' numFmt not equal", i)) } flag <- isTRUE(all.equal(sx$style$fill, sy$style$fill)) if (!flag) { message(sprintf("styleObjects '%s' fill not equal", i)) failures <- c(failures, sprintf("styleObjects '%s' fill not equal", i)) } flag <- isTRUE(all.equal(sx$style$wrapText, sy$style$wrapText)) if (!flag) { message(sprintf("styleObjects '%s' wrapText not equal", i)) failures <- c(failures, sprintf("styleObjects '%s' wrapText not equal", i)) } } } flag <- all(x$sheet_names %in% y$sheet_names) & all(y$sheet_names %in% x$sheet_names) if (!flag) { message("names workbook not equal") failures <- c(failures, "names workbook not equal") } flag <- all(unlist(x$workbook) %in% unlist(y$workbook)) & all(unlist(y$workbook) %in% unlist(x$workbook)) if (!flag) { message("workbook not equal") failures <- c(failures, "wb$workbook") } flag <- all(unlist(x$workbook.xml.rels) %in% unlist(y$workbook.xml.rels)) & all(unlist(y$workbook.xml.rels) %in% unlist(x$workbook.xml.rels)) if (!flag) { message("workbook.xml.rels not equal") failures <- c(failures, "wb$workbook.xml.rels") } for (i in 1:nSheets) { ws_x <- x$worksheets[[i]] ws_y <- y$worksheets[[i]] flag <- all(names(ws_x) %in% names(ws_y)) & all(names(ws_y) %in% names(ws_x)) if (!flag) { message(sprintf("names of worksheet elements for sheet %s not equal", i)) failures <- c(failures, sprintf("names of worksheet elements for sheet %s not equal", i)) } nms <- c( "sheetPr", "dataValidations", "sheetViews", "cols", "pageMargins", "extLst", "conditionalFormatting", "oleObjects", "colBreaks", "dimension", "drawing", "sheetFormatPr", "tableParts", "mergeCells", "hyperlinks", "headerFooter", "autoFilter", "rowBreaks", "pageSetup", "freezePane", "legacyDrawingHF", "legacyDrawing" ) for (j in nms) { flag <- isTRUE(all.equal(gsub(" |\t", "", ws_x[[j]]), gsub(" |\t", "", ws_y[[j]]))) if (!flag) { message(sprintf("worksheet '%s', element '%s' not equal", i, j)) failures <- c(failures, sprintf("worksheet '%s', element '%s' not equal", i, j)) } } } flag <- all(unlist(x$sheetOrder) %in% unlist(y$sheetOrder)) & all(unlist(y$sheetOrder) %in% unlist(x$sheetOrder)) if (!flag) { message("sheetOrder not equal") failures <- c(failures, "sheetOrder not equal") } flag <- length(x$tables) == length(y$tables) if (!flag) { message("length of tables not equal") failures <- c(failures, "length of tables not equal") } flag <- all(names(x$tables) == names(y$tables)) if (!flag) { message("names of tables not equal") failures <- c(failures, "names of tables not equal") } flag <- all(unlist(x$tables) == unlist(y$tables)) if (!flag) { message("tables not equal") failures <- c(failures, "tables not equal") } flag <- isTRUE(all.equal(x$tables.xml.rels, y$tables.xml.rels)) if (!flag) { message("tables.xml.rels not equal") failures <- c(failures, "tables.xml.rels not equal") } flag <- x$theme == y$theme if (!flag) { message("theme not equal") failures <- c(failures, "theme not equal") } if (!is.null(failures)) { return(FALSE) } # "connections", # "externalLinks", # "externalLinksRels", # "headFoot", # "pivotTables", # "pivotTables.xml.rels", # "pivotDefinitions", # "pivotRecords", # "pivotDefinitionsRels", # "queryTables", # "slicers", # "slicerCaches", # "vbaProject", return(TRUE) } #' @name sheetVisible #' @title Get worksheet visible state. #' @description DEPRECATED - Use function 'sheetVisibility() #' @author Alexander Walker #' @param wb A workbook object #' @return Character vector of worksheet names. #' @return TRUE if sheet is visible, FALSE if sheet is hidden #' @examples #' #' wb <- createWorkbook() #' addWorksheet(wb, sheetName = "S1", visible = FALSE) #' addWorksheet(wb, sheetName = "S2", visible = TRUE) #' addWorksheet(wb, sheetName = "S3", visible = FALSE) #' #' sheetVisible(wb) #' sheetVisible(wb)[1] <- TRUE ## show sheet 1 #' sheetVisible(wb)[2] <- FALSE ## hide sheet 2 #' @export sheetVisible <- function(wb) { warning("This function is deprecated. Use function 'sheetVisibility()'") if (!"Workbook" %in% class(wb)) { stop("First argument must be a Workbook.") } state <- rep(TRUE, length(wb$workbook$sheets)) state[grepl("hidden", wb$workbook$sheets)] <- FALSE return(state) } #' @rdname sheetVisible #' @param value a logical vector the same length as sheetVisible(wb) #' @export `sheetVisible<-` <- function(wb, value) { warning("This function is deprecated. Use function 'sheetVisibility()'") if (!is.logical(value)) { stop("value must be a logical vector.") } if (!any(value)) { stop("A workbook must have atleast 1 visible worksheet.") } value <- as.character(value) value[value %in% "TRUE"] <- "visible" value[value %in% "FALSE"] <- "hidden" exState <- rep("visible", length(wb$workbook$sheets)) exState[grepl("hidden", wb$workbook$sheets)] <- "hidden" if (length(value) != length(wb$workbook$sheets)) { stop(sprintf("value vector must have length equal to number of worksheets in Workbook [%s]", length(exState))) } inds <- which(value != exState) if (length(inds) == 0) { return(invisible(wb)) } for (i in inds) { wb$workbook$sheets[i] <- gsub(exState[i], value[i], wb$workbook$sheets[i]) } invisible(wb) } #' @name copyWorkbook #' @title Copy a Workbook object. #' @description Just a wrapper of wb$copy() #' @param wb A workbook object #' @return Workbook #' @examples #' #' wb <- createWorkbook() #' wb2 <- wb ## does not create a copy #' wb3 <- copyWorkbook(wb) ## wrapper for wb$copy() #' #' addWorksheet(wb, "Sheet1") ## adds worksheet to both wb and wb2 but not wb3 #' #' names(wb) #' names(wb2) #' names(wb3) #' @export copyWorkbook <- function(wb) { if (!inherits(wb, "Workbook")) { stop("argument must be a Workbook.") } return(wb$copy()) } #' @name getTables #' @title List Excel tables in a workbook #' @description List Excel tables in a workbook #' @param wb A workbook object #' @param sheet A name or index of a worksheet #' @return character vector of table names on the specified sheet #' @examples #' #' wb <- createWorkbook() #' addWorksheet(wb, sheetName = "Sheet 1") #' writeDataTable(wb, sheet = "Sheet 1", x = iris) #' writeDataTable(wb, sheet = 1, x = mtcars, tableName = "mtcars", startCol = 10) #' #' getTables(wb, sheet = "Sheet 1") #' @export getTables <- function(wb, sheet) { if (!inherits(wb, "Workbook")) { stop("argument must be a Workbook.") } if (length(sheet) != 1) { stop("sheet argument must be length 1") } if (length(wb$tables) == 0) { return(character(0)) } sheet <- wb$validateSheet(sheetName = sheet) table_sheets <- attr(wb$tables, "sheet") tables <- attr(wb$tables, "tableName") refs <- names(wb$tables) refs <- refs[table_sheets == sheet & !grepl("openxlsx_deleted", tables, fixed = TRUE)] tables <- tables[table_sheets == sheet & !grepl("openxlsx_deleted", tables, fixed = TRUE)] if (length(tables) > 0) { attr(tables, "refs") <- refs } return(tables) } #' @name removeTable #' @title Remove an Excel table in a workbook #' @description List Excel tables in a workbook #' @param wb A workbook object #' @param sheet A name or index of a worksheet #' @param table Name of table to remove. See [getTables()] #' @return character vector of table names on the specified sheet #' @examples #' #' wb <- createWorkbook() #' addWorksheet(wb, sheetName = "Sheet 1") #' addWorksheet(wb, sheetName = "Sheet 2") #' writeDataTable(wb, sheet = "Sheet 1", x = iris, tableName = "iris") #' writeDataTable(wb, sheet = 1, x = mtcars, tableName = "mtcars", startCol = 10) #' #' #' removeWorksheet(wb, sheet = 1) ## delete worksheet removes table objects #' #' writeDataTable(wb, sheet = 1, x = iris, tableName = "iris") #' writeDataTable(wb, sheet = 1, x = mtcars, tableName = "mtcars", startCol = 10) #' #' ## removeTable() deletes table object and all data #' getTables(wb, sheet = 1) #' removeTable(wb = wb, sheet = 1, table = "iris") #' writeDataTable(wb, sheet = 1, x = iris, tableName = "iris", startCol = 1) #' #' getTables(wb, sheet = 1) #' removeTable(wb = wb, sheet = 1, table = "iris") #' writeDataTable(wb, sheet = 1, x = iris, tableName = "iris", startCol = 1) #' \dontrun{ #' saveWorkbook(wb = wb, file = "removeTableExample.xlsx", overwrite = TRUE) #' } #' #' @export removeTable <- function(wb, sheet, table) { if (!inherits(wb, "Workbook")) { stop("argument must be a Workbook.") } if (length(sheet) != 1) { stop("sheet argument must be length 1") } if (length(table) != 1) { stop("table argument must be length 1") } ## delete table object and all data in it sheet <- wb$validateSheet(sheetName = sheet) if (!table %in% attr(wb$tables, "tableName")) { stop(sprintf("table '%s' does not exist.", table), call. = FALSE) } ## get existing tables table_sheets <- attr(wb$tables, "sheet") table_names <- attr(wb$tables, "tableName") refs <- names(wb$tables) ## delete table object (by flagging as deleted) inds <- which(table_sheets %in% sheet & table_names %in% table) table_name_original <- table_names[inds] table_names[inds] <- paste0(table_name_original, "_openxlsx_deleted") attr(wb$tables, "tableName") <- table_names ## delete reference from worksheet to table worksheet_table_names <- attr(wb$worksheets[[sheet]]$tableParts, "tableName") to_remove <- which(worksheet_table_names == table_name_original) wb$worksheets[[sheet]]$tableParts <- wb$worksheets[[sheet]]$tableParts[-to_remove] attr(wb$worksheets[[sheet]]$tableParts, "tableName") <- worksheet_table_names[-to_remove] ## Now delete data from the worksheet refs <- strsplit(refs[[inds]], split = ":")[[1]] rows <- as.integer(gsub("[A-Z]", "", refs)) rows <- seq(from = rows[1], to = rows[2], by = 1) cols <- convertFromExcelRef(refs) cols <- seq(from = cols[1], to = cols[2], by = 1) ## now delete data deleteData(wb = wb, sheet = sheet, rows = rows, cols = cols, gridExpand = TRUE) invisible(0) } #' @name groupColumns #' @title Group columns #' @description Group a selection of columns #' @author Joshua Sturm, Reinhold Kainhofer #' @param wb A workbook object. #' @param sheet A name or index of a worksheet. #' @param cols Indices of cols to group. Can be either a vector of indices to #' group at the same level or a (named) list of numeric vectors of #' indices to create multiple groupings at once. The names of the #' entries determine the grouping level. If no names are given, #' the `level` parameter is used as default. #' @param hidden Logical vector. If TRUE the grouped columns are hidden. Defaults to FALSE. #' @param level Grouping level (higher value indicates multiple nestings) for the #' group. A vector to assign different grouping levels to the indices. #' A value of -1 indicates that the grouping level should be derived #' from the existing grouping (one level added) #' @details Group columns together, with the option to hide them. #' #' NOTE: [setColWidths()] has a conflicting `hidden` parameter; changing one will update the other. #' @seealso [ungroupColumns()] to ungroup columns. [groupRows()] for grouping rows. #' @export #' groupColumns <- function(wb, sheet, cols, hidden = FALSE, level = -1) { op <- get_set_options() on.exit(options(op), add = TRUE) sheet <- wb$validateSheet(sheet) if (!"Workbook" %in% class(wb)) { stop("First argument must be a Workbook.") } if (any(cols < 1L)) { stop("Invalid columns selected (<= 0).") } if (!is.logical(hidden)) { stop("Hidden should be a logical value (TRUE/FALSE).") } if (length(hidden) > length(cols)) { stop("Hidden argument is of greater length than number of cols.") } if(is.list(cols)) { if (!is.null(names(cols))) { levels <- unlist(lapply(names(cols), function(x) rep(as.character(x), length(cols[[x]])))) } else { levels <- rep(as.character(level), length(unlist(cols))) } cols <- unlist(cols) } else { levels <- rep(level, length(cols)) } hidden <- as.character(as.integer(rep(hidden, length.out = length(cols)))) hidden <- hidden[!duplicated(cols)] levels <- levels[!duplicated(cols)] cols <- cols[!duplicated(cols)] cols <- convertFromExcelRef(cols) names(levels) <- cols if (length(wb$colWidths[[sheet]]) > 0) { existing_cols <- names(wb$colWidths[[sheet]]) existing_hidden <- attr(wb$colWidths[[sheet]], "hidden", exact = TRUE) if (any(existing_cols %in% cols)) { for (i in intersect(existing_cols, cols)) { width_hidden <- attr(wb$colWidths[[sheet]], "hidden")[attr(wb$colWidths[[sheet]], "names") == i] outline_hidden <- as.character(as.integer(hidden))[cols == i] if (width_hidden != outline_hidden) { attr(wb$colWidths[[sheet]], "hidden")[attr(wb$colWidths[[sheet]], "names") == i] <- outline_hidden } } # cols <- cols[!cols %in% existing_cols] # hidden <- attr(wb$colOutlineLevels[[sheet]], "hidden")[attr(wb$colOutlineLevels[[sheet]], "name") %in% cols] # wb$colOutlineLevels[[sheet]] <- cols # attr(wb$colOutlineLevels[[sheet]], "hidden") <- as.character(as.integer(hidden)) } } if (length(wb$colOutlineLevels[[sheet]]) > 0) { existing_cols <- names(wb$colOutlineLevels[[sheet]]) existing_levels <- unname(wb$colOutlineLevels[[sheet]]) existing_hidden <- attr(wb$colOutlineLevels[[sheet]], "hidden") # check if column is already grouped flag <- existing_cols %in% cols # Find indices of cols that already exist existing_outline_indices = which(flag) existing_outline = existing_cols[existing_outline_indices] existing_cols_indices = match(existing_outline, cols) # Auto-detect new level if required new_level <- "1" if (any(flag)) { new_level <- as.character(max(as.numeric(existing_levels[flag])) + 1) } levels[levels < 0] = as.character(new_level) if (any(flag)) { # Assign the given values to existing col definitions (indices were extracted above) existing_hidden[existing_outline_indices] <- hidden[existing_cols_indices] existing_levels[existing_outline_indices] <- levels[existing_cols_indices] # Append all remaining new entries: all_names <- c(existing_cols, cols[-existing_cols_indices]) all_levels <- c(existing_levels, levels[-existing_cols_indices]) all_hidden <- c(existing_hidden, hidden[-existing_cols_indices]) } else { # only new cols were added, no existing modified all_names = c(existing_cols, cols) all_levels = c(existing_levels, levels) all_hidden = c(existing_hidden, hidden) } ord <- order(as.integer(all_names)) all_names <- all_names[ord] all_levels <- as.character(all_levels[ord]) all_hidden <- all_hidden[ord] names(all_levels) <- all_names wb$colOutlineLevels[[sheet]] <- all_levels levels <- all_levels attr(wb$colOutlineLevels[[sheet]], "hidden") <- as.character(as.integer(all_hidden)) hidden <- all_hidden } else { levels[levels < 1] = "1" names(levels) <- cols wb$colOutlineLevels[[sheet]] <- levels attr(wb$colOutlineLevels[[sheet]], "hidden") <- as.character(as.integer(hidden)) } # Finally, update the sheetFormatPr XML element with the maximum outline level max_outline = max(as.numeric(wb$colOutlineLevels[[sheet]])) outline_attr <- paste0(' outlineLevelCol="', max_outline, '"') if (!grepl("outlineLevelCol", wb$worksheets[[sheet]]$sheetFormatPr)) { wb$worksheets[[sheet]]$sheetFormatPr <- sub("/>", paste0(outline_attr, "/>"), wb$worksheets[[sheet]]$sheetFormatPr) } else { wb$worksheets[[sheet]]$sheetFormatPr <- sub(' outlineLevelCol="[0-9]+"', outline_attr, wb$worksheets[[sheet]]$sheetFormatPr) } invisible(0) } #' @name ungroupColumns #' @title Ungroup Columns #' @description Ungroup a selection of columns #' @author Joshua Sturm #' @param wb A workbook object #' @param sheet A name or index of a worksheet #' @param cols Indices of columns to ungroup #' @details If column was previously hidden, it will now be shown #' @seealso [ungroupRows()] To ungroup rows #' @export ungroupColumns <- function(wb, sheet, cols) { if (!"Workbook" %in% class(wb)) { stop("First argument must be a Workbook.") } sheet <- wb$validateSheet(sheet) if (!is.numeric(cols)) { cols <- convertFromExcelRef(cols) } if (any(cols) < 1L) { stop("Invalid columns selected (<= 0).") } op <- get_set_options() on.exit(options(op), add = TRUE) customCols <- as.integer(names(wb$colOutlineLevels[[sheet]])) ungroupInds <- which(customCols %in% cols) if (length(ungroupInds) > 0) { # decrement the outline level by 1, set to visible and remove all columns that are no longer grouped at all (i.e. have a level "0" or "-1" (just in case)) levels <- as.character(as.integer(wb$colOutlineLevels[[sheet]][ungroupInds]) - 1) wb$colOutlineLevels[[sheet]][ungroupInds] <- levels attr(wb$colOutlineLevels[[sheet]], "hidden")[ungroupInds] <- "0" removeInds <- which(wb$colOutlineLevels[[sheet]] %in% c("-1", "0")) wb$colOutlineLevels[[sheet]] <- wb$colOutlineLevels[[sheet]][-removeInds] attr(wb$colOutlineLevels[[sheet]], "hidden") = attr(wb$colOutlineLevels[[sheet]], "hidden")[-removeInds] } if (length(wb$outlineLevels[[sheet]]) == 0) { wb$worksheets[[sheet]]$sheetFormatPr <- sub(' outlineLevelCol="[0-9]+"', "", wb$worksheets[[sheet]]$sheetFormatPr) } else { max_level = max(as.integer(wb$colOutlineLevels[[sheet]])) wb$worksheets[[sheet]]$sheetFormatPr <- sub(' outlineLevelCol="[0-9]+"', paste0(" outlineLevelCol=\"", max_level, "\""), wb$worksheets[[sheet]]$sheetFormatPr) } if (length(wb$colWidths[[sheet]]) > 0) { if (any(cols %in% names(wb$colWidths[[sheet]]))) { attr(wb$colWidths[[sheet]], "hidden")[attr(wb$colWidths[[sheet]], "names") %in% cols] <- "0" } } } #' @name groupRows #' @title Group Rows #' @description Group a selection of rows #' @author Joshua Sturm #' @param wb A workbook object #' @param sheet A name or index of a worksheet #' @param rows Indices of rows to group. Can be either a vector of indices to group at the same level or a (named) list of numeric vectors of indices to create multiple groupings at once. The names of the entries determine the grouping level. If no names are given, the parameter level is used as default. #' @param hidden Logical vector. If TRUE the grouped columns are hidden. Defaults to FALSE #' @param level Grouping level (higher value indicates multiple nestings) for the #' group. A vector to assign different grouping levels to the indices. #' A value of -1 indicates that the grouping level should be derived #' from the existing grouping (one level added) #' @seealso [ungroupRows()] to ungroup rows. [groupColumns()] for grouping columns. #' @examples #' wb <- createWorkbook() #' addWorksheet(wb, 'Sheet1') #' addWorksheet(wb, 'Sheet2') #' #' writeData(wb, "Sheet1", iris) #' writeData(wb, "Sheet2", iris) #' #' ## create list of groups #' # lines used for grouping (here: species) #' grp <- list( #' seq(2, 51), #' seq(52, 101), #' seq(102, 151) #' ) #' # assign group levels #' names(grp) <- c("1","0","1") #' groupRows(wb, "Sheet1", rows = grp) #' #' # different grouping #' names(grp) <- c("1","2","3") #' groupRows(wb, "Sheet2", rows = grp) #' #' # alternatively, one can call groupRows multiple times #' addWorksheet(wb, 'Sheet3') #' writeData(wb, "Sheet3", iris) #' groupRows(wb, "Sheet3", 2:51, level = 1) #' groupRows(wb, "Sheet3", 102:151, level = 1) #' #' addWorksheet(wb, 'Sheet4') #' writeData(wb, "Sheet4", iris) #' groupRows(wb, "Sheet4", 2:51, level = 1) #' groupRows(wb, "Sheet4", 52:101, level = 2) #' groupRows(wb, "Sheet4", 102:151, level = 3) #' #' # Nested grouping can also be achieved without explicitly given the levels #' addWorksheet(wb, 'Sheet5') #' writeData(wb, "Sheet5", iris) #' groupRows(wb, "Sheet5", 2:151) #' groupRows(wb, "Sheet5", 52:151) #' groupRows(wb, "Sheet5", 102:151) #' #' #' @export groupRows <- function(wb, sheet, rows, hidden = FALSE, level = -1) { if (!"Workbook" %in% class(wb)) { stop("First argument must be a Workbook.") } if(is.list(rows)) { if (!is.null(names(rows))) { levels <- unlist(lapply(names(rows), function(x) rep(as.character(x), length(rows[[x]])))) } else { levels <- rep(as.character(level), length(unlist(rows))) } rows <- unlist(rows) } else { levels <- rep(level, length(rows)) } sheet <- wb$validateSheet(sheet) if (length(hidden) > length(rows)) { stop("Hidden argument is of greater length than number of rows.") } if (!is.logical(hidden)) { stop("Hidden should be a logical value (TRUE/FALSE).") } if (any(rows < 1L)) { stop("Invalid rows entered (<= 0).") } hidden <- rep(as.character(as.integer(hidden)), length.out = length(rows)) op <- get_set_options() on.exit(options(op), add = TRUE) # Remove duplicates hidden <- hidden[!duplicated(rows)] levels <- levels[!duplicated(rows)] rows <- rows[!duplicated(rows)] names(levels) <- rows wb$groupRows(sheet = sheet, rows = rows, hidden = hidden, levels = levels) } #' @name ungroupRows #' @title Ungroup Rows #' @description Ungroup a selection of rows #' @author Joshua Sturm #' @param wb A workbook object #' @param sheet A name or index of a worksheet #' @param rows Indices of rows to ungroup #' @details If row was previously hidden, it will now be shown #' @seealso [ungroupColumns()] #' @export ungroupRows <- function(wb, sheet, rows) { op <- get_set_options() on.exit(options(op), add = TRUE) if (!"Workbook" %in% class(wb)) { stop("First argument must be a Workbook.") } sheet <- wb$validateSheet(sheet) if (any(rows < 1L)) { stop("Invalid rows entered (<= 0).") } customRows <- as.integer(names(wb$outlineLevels[[sheet]])) ungroupInds <- which(customRows %in% rows) if (length(ungroupInds) > 0) { # decrement the outline level by 1, set to visible and remove all rows that are no longer grouped at all (i.e. have a level "0" or "-1" (just in case)) levels <- as.character(as.integer(wb$outlineLevels[[sheet]][ungroupInds]) - 1) wb$outlineLevels[[sheet]][ungroupInds] <- levels attr(wb$outlineLevels[[sheet]], "hidden")[ungroupInds] <- "0" removeInds <- which(wb$outlineLevels[[sheet]] %in% c("-1", "0")) wb$outlineLevels[[sheet]] <- wb$outlineLevels[[sheet]][-removeInds] attr(wb$outlineLevels[[sheet]], "hidden") = attr(wb$outlineLevels[[sheet]], "hidden")[-removeInds] } if (length(wb$outlineLevels[[sheet]]) == 0) { wb$worksheets[[sheet]]$sheetFormatPr <- sub(' outlineLevelRow="[0-9]+"', "", wb$worksheets[[sheet]]$sheetFormatPr) } else { max_level = max(as.integer(wb$outlineLevels[[sheet]])) wb$worksheets[[sheet]]$sheetFormatPr <- sub(' outlineLevelRow="[0-9]+"', paste0(" outlineLevelRow=\"", max_level, "\""), wb$worksheets[[sheet]]$sheetFormatPr) } } #' @name addCreator #' @title Add another author to the meta data of the file. #' @author Philipp Schauberger #' @description Just a wrapper of wb$addCreator() #' @param wb A workbook object #' @param Creator A string object with the name of the creator #' @examples #' #' wb <- createWorkbook() #' addCreator(wb, "test") #' @export addCreator <- function(wb, Creator) { if (!inherits(wb, "Workbook")) { stop("argument must be a Workbook.") } invisible(wb$addCreator(Creator)) } #' @name setLastModifiedBy #' @title Set the author who modified the file last. #' @author Philipp Schauberger #' @description Just a wrapper of wb$changeLastModifiedBy() #' @param wb A workbook object #' @param LastModifiedBy A string object with the name of the LastModifiedBy-User #' @examples #' #' wb <- createWorkbook() #' setLastModifiedBy(wb, "test") #' @export setLastModifiedBy <- function(wb, LastModifiedBy) { if (!inherits(wb, "Workbook")) { stop("argument must be a Workbook.") } invisible(wb$changeLastModifiedBy(LastModifiedBy)) } #' @name getCreators #' @title Get the names of the authors from the meta data of the file. #' @description Just a wrapper of wb$getCreators() #' @param wb A workbook object #' @author Philipp Schauberger #' @return vector of creators #' @examples #' #' wb <- createWorkbook() #' getCreators(wb) #' @export getCreators <- function(wb) { if (!inherits(wb, "Workbook")) { stop("argument must be a Workbook.") } return(wb$getCreators()) } #' @name activeSheet #' @title Get/set active sheet of the workbook #' @author Philipp Schauberger #' @description Get and set active sheet of the workbook #' @param wb A workbook object #' @return return the active sheet of the workbook #' @examples #' #' wb <- createWorkbook() #' addWorksheet(wb, sheetName = "S1") #' addWorksheet(wb, sheetName = "S2") #' addWorksheet(wb, sheetName = "S3") #' #' activeSheet(wb) # default value is the first sheet active #' activeSheet(wb) <- 1 ## active sheet S1 #' activeSheet(wb) #' activeSheet(wb) <- "S2" ## active sheet S2 #' activeSheet(wb) #' @export activeSheet <- function(wb) { if (!"Workbook" %in% class(wb)) { stop("First argument must be a Workbook.") } return(wb$ActiveSheet) } #' @rdname activeSheet #' @param value index of the active sheet or name of the active sheet #' @export `activeSheet<-` <- function(wb, value) { op <- get_set_options() on.exit(options(op), add = TRUE) if (!"Workbook" %in% class(wb)) { stop("First argument must be a Workbook.") } invisible(wb$setactiveSheet(value)) invisible(wb) } openxlsx/R/sheet_data_class.R0000644000176200001440000000444514656134061015761 0ustar liggesusers #' @include class_definitions.R Sheet_Data$methods(initialize = function() { rows <<- integer(0) cols <<- integer(0) t <<- integer(0) v <<- character(0) f <<- character(0) style_id <<- character(0) data_count <<- 0L n_elements <<- 0L }) Sheet_Data$methods(delete = function(rows_in, cols_in, grid_expand) { cols_in <- convertFromExcelRef(cols_in) rows_in <- as.integer(rows_in) ## rows and cols need to be the same length if (grid_expand) { n <- length(rows_in) rows_in <- rep.int(rows_in, times = length(cols_in)) cols_in <- rep(cols_in, each = n) } if (length(rows_in) != length(cols_in)) { stop("Length of rows and cols must be equal.") } inds <- which(pair_rc(rows, cols) %in% pair_rc(rows_in, cols_in)) if (length(inds) > 0) { ## writing over existing data rows <<- rows[-inds] cols <<- cols[-inds] t <<- t[-inds] v <<- v[-inds] f <<- f[-inds] n_elements <<- as.integer(length(rows)) if (n_elements == 0) { data_count <<- 0L } } }) Sheet_Data$methods(write = function(rows_in, cols_in, t_in, v_in, f_in, any_functions = TRUE) { if (length(rows_in) == 0 | length(cols_in) == 0) { return(invisible(0)) } possible_overlap <- FALSE if (n_elements > 0) { possible_overlap <- (min(cols_in, na.rm = TRUE) <= max(cols, na.rm = TRUE)) & (max(cols_in, na.rm = TRUE) >= min(cols, na.rm = TRUE)) & (min(rows_in, na.rm = TRUE) <= max(rows, na.rm = TRUE)) & (max(rows_in, na.rm = TRUE) >= min(rows, na.rm = TRUE)) } n <- length(cols_in) cols_in <- rep.int(cols_in, times = length(rows_in)) rows_in <- rep(rows_in, each = n) if (any_functions) { if (any(!is.na(f_in))) { v_in[!is.na(f_in)] <- as.character(NA) t_in[!is.na(f_in)] <- 3L ## "str" } } inds <- integer(0) if (possible_overlap) { inds <- which(pair_rc(rows, cols) %in% pair_rc(rows_in, cols_in)) } if (length(inds) > 0) { rows <<- c(rows[-inds], rows_in) cols <<- c(cols[-inds], cols_in) t <<- c(t[-inds], t_in) v <<- c(v[-inds], v_in) f <<- c(f[-inds], f_in) } else { rows <<- c(rows, rows_in) cols <<- c(cols, cols_in) t <<- c(t, t_in) v <<- c(v, v_in) f <<- c(f, f_in) } n_elements <<- as.integer(length(rows)) data_count <<- data_count + 1L }) openxlsx/R/loadWorkbook.R0000644000176200001440000012420614656134061015126 0ustar liggesusers #' @name loadWorkbook #' @title Load an existing .xlsx file #' @author Alexander Walker, Philipp Schauberger #' @param file A path to an existing .xlsx or .xlsm file #' @param xlsxFile alias for file #' @param isUnzipped Set to TRUE if the xlsx file is already unzipped #' @param na.convert Should empty/blank cells be converted to `NA_character_`. Defaults to TRUE. #' @description loadWorkbook returns a workbook object conserving styles and #' formatting of the original .xlsx file. #' @return Workbook object. #' @export #' @seealso [removeWorksheet()] #' @examples #' ## load existing workbook from package folder #' wb <- loadWorkbook(file = system.file("extdata", "loadExample.xlsx", package = "openxlsx")) #' names(wb) # list worksheets #' wb ## view object #' ## Add a worksheet #' addWorksheet(wb, "A new worksheet") #' #' ## Save workbook #' \dontrun{ #' saveWorkbook(wb, "loadExample.xlsx", overwrite = TRUE) #' } #' loadWorkbook <- function(file, xlsxFile = NULL, isUnzipped = FALSE, na.convert = TRUE) { ## If this is a unzipped workbook, skip the temp dir stuff if (isUnzipped) { xmlDir <- file xmlFiles <- list.files(path = xmlDir, full.names = TRUE, recursive = TRUE, all.files = TRUE) } else { if (!is.null(xlsxFile)) { file <- xlsxFile } file <- getFile(file) if (!file.exists(file)) { stop("File does not exist.") } ## create temp dir xmlDir <- tempfile() ## Unzip files to temp directory xmlFiles <- unzip(file, exdir = xmlDir) } wb <- createWorkbook() ## Not used # .relsXML <- xmlFiles[grepl("_rels/.rels$", xmlFiles, perl = TRUE)] # appXML <- xmlFiles[grepl("app.xml$", xmlFiles, perl = TRUE)] drawingsXML <- grep("drawings/drawing[0-9]+.xml$", xmlFiles, perl = TRUE, value = TRUE) worksheetsXML <- grep("/worksheets/sheet[0-9]+", xmlFiles, perl = TRUE, value = TRUE) coreXML <- grep("core.xml$", xmlFiles, perl = TRUE, value = TRUE) workbookXML <- grep("workbook.xml$", xmlFiles, perl = TRUE, value = TRUE) stylesXML <- grep("styles.xml$", xmlFiles, perl = TRUE, value = TRUE) sharedStringsXML <- grep("sharedStrings.xml$", xmlFiles, perl = TRUE, value = TRUE) themeXML <- grep("theme[0-9]+.xml$", xmlFiles, perl = TRUE, value = TRUE) drawingRelsXML <- grep("drawing[0-9]+.xml.rels$", xmlFiles, perl = TRUE, value = TRUE) sheetRelsXML <- grep("sheet[0-9]+.xml.rels$", xmlFiles, perl = TRUE, value = TRUE) media <- grep("image[0-9]+.[a-z]+$", xmlFiles, perl = TRUE, value = TRUE) vmlDrawingXML <- grep("drawings/vmlDrawing[0-9]+\\.vml$", xmlFiles, perl = TRUE, value = TRUE) vmlDrawingRelsXML <- grep("vmlDrawing[0-9]+.vml.rels$", xmlFiles, perl = TRUE, value = TRUE) commentsXML <- grep("xl/comments[0-9]+\\.xml", xmlFiles, perl = TRUE, value = TRUE) threadCommentsXML <- grep("xl/threadedComments/threadedComment[0-9]+\\.xml", xmlFiles, perl = TRUE, value = TRUE) personXML <- grep("xl/persons/person.xml$", xmlFiles, perl = TRUE, value = TRUE) embeddings <- grep("xl/embeddings", xmlFiles, perl = TRUE, value = TRUE) charts <- grep("xl/charts/.*xml$", xmlFiles, perl = TRUE, value = TRUE) chartsRels <- grep("xl/charts/_rels", xmlFiles, perl = TRUE, value = TRUE) chartSheetsXML <- grep("xl/chartsheets/sheet[0-9]+\\.xml", xmlFiles, perl = TRUE, value = TRUE) tablesXML <- grep("tables/table[0-9]+.xml$", xmlFiles, perl = TRUE, value = TRUE) tableRelsXML <- grep("table[0-9]+.xml.rels$", xmlFiles, perl = TRUE, value = TRUE) queryTablesXML <- grep("queryTable[0-9]+.xml$", xmlFiles, perl = TRUE, value = TRUE) connectionsXML <- grep("connections.xml$", xmlFiles, perl = TRUE, value = TRUE) extLinksXML <- grep("externalLink[0-9]+.xml$", xmlFiles, perl = TRUE, value = TRUE) extLinksRelsXML <- grep("externalLink[0-9]+.xml.rels$", xmlFiles, perl = TRUE, value = TRUE) # pivot tables pivotTableXML <- grep("pivotTable[0-9]+.xml$", xmlFiles, perl = TRUE, value = TRUE) pivotTableRelsXML <- grep("pivotTable[0-9]+.xml.rels$", xmlFiles, perl = TRUE, value = TRUE) pivotDefXML <- grep("pivotCacheDefinition[0-9]+.xml$", xmlFiles, perl = TRUE, value = TRUE) pivotDefRelsXML <- grep("pivotCacheDefinition[0-9]+.xml.rels$", xmlFiles, perl = TRUE, value = TRUE) pivotCacheRecords <- grep("pivotCacheRecords[0-9]+.xml$", xmlFiles, perl = TRUE, value = TRUE) ## slicers slicerXML <- grep("slicer[0-9]+.xml$", xmlFiles, perl = TRUE, value = TRUE) slicerCachesXML <- grep("slicerCache[0-9]+.xml$", xmlFiles, perl = TRUE, value = TRUE) ## VBA Macro vbaProject <- grep("vbaProject\\.bin$", xmlFiles, perl = TRUE, value = TRUE) ## remove all EXCEPT media and charts if (!isUnzipped) { on.exit({ paths <- grep( "charts|media|vmlDrawing|comment|embeddings|pivot|slicer|vbaProject|person", xmlFiles, ignore.case = TRUE, value = TRUE, invert = TRUE ) unlink(paths, recursive = TRUE, force = TRUE) }, add = TRUE ) } ## core if (length(coreXML) == 1) { coreXML <- paste(readUTF8(coreXML), collapse = "") wb$core <- removeHeadTag(x = coreXML) } nSheets <- length(worksheetsXML) + length(chartSheetsXML) ## get Rid of chartsheets, these do not have a worksheet/sheeti.xml worksheet_rId_mapping <- NULL workbookRelsXML <- grep("workbook.xml.rels$", xmlFiles, perl = TRUE, value = TRUE) if (length(workbookRelsXML) > 0) { workbookRelsXML <- paste(readUTF8(workbookRelsXML), collapse = "") workbookRelsXML <- getChildlessNode(xml = workbookRelsXML, tag = "Relationship") worksheet_rId_mapping <- grep("worksheets/sheet", workbookRelsXML, fixed = TRUE, value = TRUE) } ## chartSheetRIds <- NULL if (length(chartSheetsXML) > 0) { workbookRelsXML <- grep("chartsheets/sheet", workbookRelsXML, fixed = TRUE, value = TRUE) chartSheetRIds <- unlist(getId(workbookRelsXML)) chartsheet_rId_mapping <- unlist(regmatches(workbookRelsXML, gregexpr("sheet[0-9]+\\.xml", workbookRelsXML, perl = TRUE, ignore.case = TRUE))) sheetNo <- as.integer(regmatches(chartSheetsXML, regexpr("(?<=sheet)[0-9]+(?=\\.xml)", chartSheetsXML, perl = TRUE))) chartSheetsXML <- chartSheetsXML[order(sheetNo)] chartSheetsRelsXML <- grep("xl/chartsheets/_rels", xmlFiles, perl = TRUE, value = TRUE) sheetNo2 <- as.integer(regmatches(chartSheetsRelsXML, regexpr("(?<=sheet)[0-9]+(?=\\.xml\\.rels)", chartSheetsRelsXML, perl = TRUE))) chartSheetsRelsXML <- chartSheetsRelsXML[order(sheetNo2)] chartSheetsRelsDir <- dirname(chartSheetsRelsXML[1]) } ## xl\ ## xl\workbook if (length(workbookXML) > 0) { workbook <- readUTF8(workbookXML) workbook <- removeHeadTag(workbook) sheets <- unlist(regmatches(workbook, gregexpr("(?<=).*(?=)", workbook, perl = TRUE))) sheets <- unlist(regmatches(sheets, gregexpr("]*>", sheets, perl = TRUE))) ## Some veryHidden sheets do not have a sheet content and their rId is empty. ## Such sheets need to be filtered out because otherwise their sheet names ## occur in the list of all sheet names, leading to a wrong association ## of sheet names with sheet indeces. sheets <- grep('r:id="[[:blank:]]*"', sheets, invert = TRUE, value = TRUE) ## sheetId is meaningless ## sheet rId links to the workbook.xml.resl which links worksheets/sheet(i).xml file ## order they appear here gives order of worksheets in xlsx file sheetrId <- unlist(getRId(sheets)) sheetId <- unlist(regmatches(sheets, gregexpr('(?<=sheetId=")[0-9]+', sheets, perl = TRUE))) sheetNames <- unlist(regmatches(sheets, gregexpr('(?<=name=")[^"]+', sheets, perl = TRUE))) sheetNames <- replaceXMLEntities(sheetNames) is_chart_sheet <- sheetrId %in% chartSheetRIds is_visible <- !grepl("hidden", sheets) if (length(is_visible) != length(sheetrId)) { is_visible <- rep(TRUE, length(sheetrId)) } # #active sheet ----------------------------------------------------------- ## add worksheets to wb j <- 1 for (i in seq_along(sheetrId)) { if (is_chart_sheet[i]) { # count <- 0 variable not used txt <- paste(readUTF8(chartSheetsXML[j]), collapse = "") zoom <- regmatches(txt, regexpr('(?<=zoomScale=")[0-9]+', txt, perl = TRUE)) if (length(zoom) == 0) { zoom <- 100 } tabColour <- getChildlessNode(xml = txt, tag = "tabColor") if (length(tabColour) == 0) { tabColour <- NULL } j <- j + 1L wb$addChartSheet(sheetName = sheetNames[i], tabColour = tabColour, zoom = as.numeric(zoom)) } else { wb$addWorksheet(sheetNames[i], visible = is_visible[i]) } } ## replace sheetId for (i in 1:nSheets) { wb$workbook$sheets[[i]] <- gsub(sprintf(' sheetId="%s"', i), sprintf(' sheetId="%s"', sheetId[i]), wb$workbook$sheets[[i]]) } ## additional workbook attributes calcPr <- getChildlessNode(xml = workbook, tag = "calcPr") if (length(calcPr) > 0) { wb$workbook$calcPr <- calcPr } workbookPr <- getChildlessNode(xml = workbook, tag = "workbookPr") if (length(workbookPr) > 0) { wb$workbook$workbookPr <- workbookPr } workbookProtection <- getChildlessNode(xml = workbook, tag = "workbookProtection") if (length(workbookProtection) > 0) { wb$workbook$workbookProtection <- workbookProtection } ## defined Names dNames <- getNodes(xml = workbook, tagIn = "") if (length(dNames) > 0) { dNames <- gsub("^|$", "", dNames) wb$workbook$definedNames <- paste0(getNodes(xml = dNames, tagIn = "") } } ## xl\sharedStrings if (length(sharedStringsXML) > 0) { sharedStrings <- readUTF8(sharedStringsXML) sharedStrings <- paste(sharedStrings, collapse = "\n") sharedStrings <- removeHeadTag(sharedStrings) uniqueCount <- as.integer(regmatches(sharedStrings, regexpr('(?<=uniqueCount=")[0-9]+', sharedStrings, perl = TRUE))) ## read in and get nodes vals <- getNodes(xml = sharedStrings, tagIn = "") if ("" %in% vals) { if (na.convert) { vals[vals == ""] <- "NA" } Encoding(vals) <- "UTF-8" attr(vals, "uniqueCount") <- uniqueCount - 1L } else { Encoding(vals) <- "UTF-8" attr(vals, "uniqueCount") <- uniqueCount } wb$sharedStrings <- vals } ## xl\pivotTables & xl\pivotCache if (length(pivotTableXML) > 0) { # pivotTable cacheId links to workbook.xml which links to workbook.xml.rels via rId # we don't modify the cacheId, only the rId nPivotTables <- length(pivotDefXML) rIds <- 20000L + 1:nPivotTables ## pivot tables pivotTableXML <- pivotTableXML[order(nchar(pivotTableXML), pivotTableXML)] pivotTableRelsXML <- pivotTableRelsXML[order(nchar(pivotTableRelsXML), pivotTableRelsXML)] ## Cache pivotDefXML <- pivotDefXML[order(nchar(pivotDefXML), pivotDefXML)] pivotDefRelsXML <- pivotDefRelsXML[order(nchar(pivotDefRelsXML), pivotDefRelsXML)] pivotCacheRecords <- pivotCacheRecords[order(nchar(pivotCacheRecords), pivotCacheRecords)] wb$pivotDefinitionsRels <- character(nPivotTables) pivot_content_type <- NULL if (length(pivotTableRelsXML) > 0) { wb$pivotTables.xml.rels <- unlist(lapply(pivotTableRelsXML, function(x) removeHeadTag(cppReadFile(x)))) } # ## Check what caches are used cache_keep <- unlist(regmatches(wb$pivotTables.xml.rels, gregexpr("(?<=pivotCache/pivotCacheDefinition)[0-9](?=\\.xml)", wb$pivotTables.xml.rels, perl = TRUE, ignore.case = TRUE ))) ## pivot cache records tmp <- unlist(regmatches(pivotCacheRecords, gregexpr("(?<=pivotCache/pivotCacheRecords)[0-9]+(?=\\.xml)", pivotCacheRecords, perl = TRUE, ignore.case = TRUE))) pivotCacheRecords <- pivotCacheRecords[tmp %in% cache_keep] ## pivot cache definitions rels tmp <- unlist(regmatches(pivotDefRelsXML, gregexpr("(?<=_rels/pivotCacheDefinition)[0-9]+(?=\\.xml)", pivotDefRelsXML, perl = TRUE, ignore.case = TRUE))) pivotDefRelsXML <- pivotDefRelsXML[tmp %in% cache_keep] ## pivot cache definitions tmp <- unlist(regmatches(pivotDefXML, gregexpr("(?<=pivotCache/pivotCacheDefinition)[0-9]+(?=\\.xml)", pivotDefXML, perl = TRUE, ignore.case = TRUE))) pivotDefXML <- pivotDefXML[tmp %in% cache_keep] if (length(pivotTableXML) > 0) { wb$pivotTables[seq_along(pivotTableXML)] <- pivotTableXML pivot_content_type <- c( pivot_content_type, sprintf('', seq_along(pivotTableXML)) ) } if (length(pivotDefXML) > 0) { wb$pivotDefinitions[seq_along(pivotDefXML)] <- pivotDefXML pivot_content_type <- c( pivot_content_type, sprintf('', seq_along(pivotDefXML)) ) } if (length(pivotCacheRecords) > 0) { wb$pivotRecords[seq_along(pivotCacheRecords)] <- pivotCacheRecords pivot_content_type <- c( pivot_content_type, sprintf('', seq_along(pivotCacheRecords)) ) } if (length(pivotDefRelsXML) > 0) { wb$pivotDefinitionsRels[seq_along(pivotDefRelsXML)] <- pivotDefRelsXML } ## update content_types wb$Content_Types <- c(wb$Content_Types, pivot_content_type) ## workbook rels wb$workbook.xml.rels <- c( wb$workbook.xml.rels, sprintf('', rIds, seq_along(pivotDefXML)) ) caches <- getNodes(xml = workbook, tagIn = "") caches <- getChildlessNode(xml = caches, tag = "pivotCache") for (i in seq_along(caches)) { caches[i] <- gsub('"rId[0-9]+"', sprintf('"rId%s"', rIds[i]), caches[i]) } wb$workbook$pivotCaches <- paste0("", paste(caches, collapse = ""), "") } ## xl\vbaProject if (length(vbaProject) > 0) { wb$vbaProject <- vbaProject wb$Content_Types[grepl('' wb$Content_Types <- c(wb$Content_Types, '') } ## xl\styles if (length(stylesXML) > 0) { styleObjects <- wb$loadStyles(stylesXML) } else { styleObjects <- list() } ## xl\media if (length(media) > 0) { mediaNames <- regmatches(media, regexpr("image[0-9]+\\.[a-z]+$", media)) fileTypes <- unique(gsub("image[0-9]+\\.", "", mediaNames)) contentNodes <- sprintf('', fileTypes, fileTypes) contentNodes[fileTypes == "emf"] <- '' wb$Content_Types <- c(contentNodes, wb$Content_Types) names(media) <- mediaNames wb$media <- media } ## xl\chart if (length(charts) > 0) { chartNames <- basename(charts) nCharts <- sum(grepl("chart[0-9]+.xml", chartNames)) nChartStyles <- sum(grepl("style[0-9]+.xml", chartNames)) nChartCol <- sum(grepl("colors[0-9]+.xml", chartNames)) if (nCharts > 0) { wb$Content_Types <- c(wb$Content_Types, sprintf('', seq_len(nCharts))) } if (nChartStyles > 0) { wb$Content_Types <- c(wb$Content_Types, sprintf('', seq_len(nChartStyles))) } if (nChartCol > 0) { wb$Content_Types <- c(wb$Content_Types, sprintf('', seq_len(nChartCol))) } if (length(chartsRels)) { charts <- c(charts, chartsRels) chartNames <- c(chartNames, file.path("_rels", basename(chartsRels))) } names(charts) <- chartNames wb$charts <- charts } ## xl\theme if (length(themeXML) > 0) { wb$theme <- removeHeadTag(paste(unlist(lapply(sort(themeXML)[[1]], readUTF8)), collapse = "")) } ## externalLinks if (length(extLinksXML) > 0) { wb$externalLinks <- lapply(sort(extLinksXML), function(x) removeHeadTag(cppReadFile(x))) wb$Content_Types <- c( wb$Content_Types, sprintf('', seq_along(extLinksXML)) ) wb$workbook.xml.rels <- c(wb$workbook.xml.rels, sprintf( '', seq_along(extLinksXML) )) } ## externalLinksRels if (length(extLinksRelsXML) > 0) { wb$externalLinksRels <- lapply(sort(extLinksRelsXML), function(x) removeHeadTag(cppReadFile(x))) } ##* ----------------------------------------------------------------------------------------------*## ### BEGIN READING IN WORKSHEET DATA ##* ----------------------------------------------------------------------------------------------*## ## xl\worksheets file_names <- regmatches(worksheet_rId_mapping, regexpr("sheet[0-9]+\\.xml", worksheet_rId_mapping, perl = TRUE)) file_rIds <- unlist(getId(worksheet_rId_mapping)) file_names <- file_names[match(sheetrId, file_rIds)] worksheetsXML <- file.path(dirname(worksheetsXML), file_names) wb <- loadworksheets(wb = wb, styleObjects = styleObjects, xmlFiles = worksheetsXML, is_chart_sheet = is_chart_sheet) ## Fix styleobject encoding if (length(wb$styleObjects) > 0) { style_names <- sapply(wb$styleObjects, "[[", "sheet") Encoding(style_names) <- "UTF-8" wb$styleObjects <- lapply(seq_along(style_names), function(i) { wb$styleObjects[[i]]$sheet <- style_names[[i]] wb$styleObjects[[i]] }) } ## Fix headers/footers for (i in seq_along(worksheetsXML)) { if (!is_chart_sheet[i]) { if (length(wb$worksheets[[i]]$headerFooter) > 0) { amp_split <- function(x) { if (length(x) == 0) return (NULL) # First split the entry before &L, &C, &R => left/center/right header/footer entries parts <- unlist(stri_split_regex(x, "(?=&[LCR])", omit_empty = TRUE)) # Then extract from each entry the justification (LCR) and the content matches <- stri_match(parts, regex = "^(?:&([LRC])|)(.*)$") # The OOXML standard says that entries without an &[LRC] are to be understood as centered matches[(matches[,2]==""),2] = "C" # => convert to named character vector z <- matches[,3] names(z) <- matches[,2] # return 3-string vector for left/center/right content: res <- z[c("L", "C", "R")] res[is.na(res)] <- "" unname(res) } head_foot <- c("oddHeader", "oddFooter", "evenHeader", "evenFooter", "firstHeader", "firstFooter") headerFooter <- vector("list", length = length(head_foot)) names(headerFooter) <- head_foot headerFooterXMl <- paste0(wb$worksheets[[i]]$headerFooter, collapse = "") for (hf in head_foot) { node <- getChildlessNode(xml = headerFooterXMl, tag = hf) node <- gsub(paste0("<", hf, ">(.+)"), "\\1", node) headerFooter[[hf]] <- amp_split(node) } wb$worksheets[[i]]$headerFooter <- headerFooter } } } ##* ----------------------------------------------------------------------------------------------*## ### READING IN WORKSHEET DATA COMPLETE ##* ----------------------------------------------------------------------------------------------*## ## Next sheetRels to see which drawings_rels belongs to which sheet if (length(sheetRelsXML) > 0) { ## sheetrId is order sheet appears in xlsx file ## create a 1-1 vector of rels to worksheet ## haveRels is boolean vector where i-the element is TRUE/FALSE if sheet has a rels sheet if (length(chartSheetsXML) == 0) { allRels <- file.path(dirname(sheetRelsXML[1]), paste0(file_names, ".rels")) haveRels <- allRels %in% sheetRelsXML } else { haveRels <- rep(FALSE, length(wb$worksheets)) allRels <- rep("", length(wb$worksheets)) for (i in 1:nSheets) { if (is_chart_sheet[i]) { ind <- which(chartSheetRIds == sheetrId[i]) rels_file <- file.path(chartSheetsRelsDir, paste0(chartsheet_rId_mapping[ind], ".rels")) } else { ind <- sheetrId[i] rels_file <- file.path(xmlDir, "xl", "worksheets", "_rels", paste0(file_names[i], ".rels")) } if (file.exists(rels_file)) { allRels[i] <- rels_file haveRels[i] <- TRUE } } } ## sheet.xml have been reordered to be in the order of sheetrId ## not every sheet has a worksheet rels xml <- lapply(seq_along(allRels), function(i) { if (haveRels[i]) { xml <- readUTF8(allRels[[i]]) xml <- removeHeadTag(xml) xml <- gsub("", "", xml) xml <- gsub("", "", xml) xml <- getChildlessNode(xml = xml, tag = "Relationship") } else { xml <- "" } return(xml) }) ## Slicers ------------------------------------------------------------------------------------- if (length(slicerXML) > 0) { slicerXML <- slicerXML[order(nchar(slicerXML), slicerXML)] slicersFiles <- lapply(xml, function(x) as.integer(regmatches(x, regexpr("(?<=slicer)[0-9]+(?=\\.xml)", x, perl = TRUE)))) inds <- sapply(slicersFiles, length) > 0 ## worksheet_rels Id for slicer will be rId0 k <- 1L wb$slicers <- rep("", nSheets) for (i in 1:nSheets) { ## read in slicer[j].XML sheets into sheet[i] if (inds[i]) { wb$slicers[[i]] <- slicerXML[k] k <- k + 1L wb$worksheets_rels[[i]] <- unlist(c( wb$worksheets_rels[[i]], sprintf('', i) )) wb$Content_Types <- c( wb$Content_Types, sprintf('', i) ) slicer_xml_exists <- FALSE ## Append slicer to worksheet extLst if (length(wb$worksheets[[i]]$extLst) > 0) { if (grepl('x14:slicer r:id="rId[0-9]+"', wb$worksheets[[i]]$extLst)) { wb$worksheets[[i]]$extLst <- sub('x14:slicer r:id="rId[0-9]+"', 'x14:slicer r:id="rId0"', wb$worksheets[[i]]$extLst) slicer_xml_exists <- TRUE } } if (!slicer_xml_exists) { wb$worksheets[[i]]$extLst <- c(wb$worksheets[[i]]$extLst, genBaseSlicerXML()) } } } } if (length(slicerCachesXML) > 0) { ## ---- slicerCaches inds <- seq_along(slicerCachesXML) wb$Content_Types <- c(wb$Content_Types, sprintf('', inds)) wb$slicerCaches <- sapply(slicerCachesXML[order(nchar(slicerCachesXML), slicerCachesXML)], function(x) removeHeadTag(cppReadFile(x))) wb$workbook.xml.rels <- c(wb$workbook.xml.rels, sprintf('', 1E5 + inds, inds)) wb$workbook$extLst <- c(wb$workbook$extLst, genSlicerCachesExtLst(1E5 + inds)) } ## Tables -------------------------------------------------------------------------------------- if (length(tablesXML) > 0) { tables <- lapply(xml, function(x) as.integer(regmatches(x, regexpr("(?<=table)[0-9]+(?=\\.xml)", x, perl = TRUE)))) tableSheets <- unlist(lapply(seq_along(sheetrId), function(i) rep(i, length(tables[[i]])))) if (length(unlist(tables)) > 0) { ## get the tables that belong to each worksheet and create a worksheets_rels for each tCount <- 2L ## table r:Ids start at 3 for (i in seq_along(tables)) { if (length(tables[[i]]) > 0) { k <- seq_along(tables[[i]]) + tCount wb$worksheets_rels[[i]] <- unlist(c( wb$worksheets_rels[[i]], sprintf('', k, k) )) wb$worksheets[[i]]$tableParts <- sprintf("", k) tCount <- tCount + length(k) } } ## sort the tables into the order they appear in the xml and tables variables names(tablesXML) <- basename(tablesXML) tablesXML <- tablesXML[sprintf("table%s.xml", unlist(tables))] ## tables are now in correct order so we can read them in as they are wb$tables <- sapply(tablesXML, function(x) removeHeadTag(paste(readUTF8(x), collapse = ""))) ## pull out refs and attach names refs <- regmatches(wb$tables, regexpr('(?<=ref=")[0-9A-Z:]+', wb$tables, perl = TRUE)) names(wb$tables) <- refs wb$Content_Types <- c(wb$Content_Types, sprintf('', seq_along(wb$tables) + 2)) ## relabel ids for (i in seq_along(wb$tables)) { newId <- sprintf(' id="%s" ', i + 2) wb$tables[[i]] <- sub(' id="[0-9]+" ', newId, wb$tables[[i]]) } displayNames <- unlist(regmatches(wb$tables, regexpr('(?<=displayName=").*?[^"]+', wb$tables, perl = TRUE))) if (length(displayNames) != length(tablesXML)) { displayNames <- paste0("Table", seq_along(tablesXML)) } attr(wb$tables, "sheet") <- tableSheets attr(wb$tables, "tableName") <- displayNames for (i in seq_along(tableSheets)) { table_sheet_i <- tableSheets[i] attr(wb$worksheets[[table_sheet_i]]$tableParts, "tableName") <- c(attr(wb$worksheets[[table_sheet_i]]$tableParts, "tableName"), displayNames[i]) } } } ## if(length(tablesXML) > 0) ## might we have some external hyperlinks if (any(sapply(wb$worksheets[!is_chart_sheet], function(x) length(x$hyperlinks) > 0))) { ## Do we have external hyperlinks hlinks <- lapply(xml, function(x) x[grepl("hyperlink", x) & grepl("External", x)]) hlinksInds <- which(sapply(hlinks, length) > 0) ## If it's an external hyperlink it will have a target in the sheet_rels if (length(hlinksInds) > 0) { for (i in hlinksInds) { ids <- unlist(lapply(hlinks[[i]], function(x) regmatches(x, gregexpr('(?<=Id=").*?"', x, perl = TRUE))[[1]])) ids <- gsub('"$', "", ids) targets <- unlist(lapply(hlinks[[i]], function(x) regmatches(x, gregexpr('(?<=Target=").*?"', x, perl = TRUE))[[1]])) targets <- gsub('"$', "", targets) ids2 <- lapply(wb$worksheets[[i]]$hyperlinks, function(x) regmatches(x, gregexpr('(?<=r:id=").*?"', x, perl = TRUE))[[1]]) ids2[sapply(ids2, length) == 0] <- NA ids2 <- gsub('"$', "", unlist(ids2)) targets <- targets[match(ids2, ids)] names(wb$worksheets[[i]]$hyperlinks) <- targets } } } ## Drawings ------------------------------------------------------------------------------------ ## xml is in the order of the sheets, drawIngs is toes to sheet position of hasDrawing ## Not every sheet has a drawing.xml drawXMLrelationship <- lapply(xml, function(x) grep("drawings/drawing", x, value = TRUE)) hasDrawing <- sapply(drawXMLrelationship, length) > 0 ## which sheets have a drawing if (length(drawingRelsXML) > 0) { dRels <- lapply(drawingRelsXML, readUTF8) dRels <- unlist(lapply(dRels, removeHeadTag)) dRels <- gsub("", "", dRels) dRels <- gsub("", "", dRels) } if (length(drawingsXML) > 0) { dXML <- lapply(drawingsXML, readUTF8) dXML <- unlist(lapply(dXML, removeHeadTag)) dXML <- gsub("", "", dXML) dXML <- gsub("", "", dXML) # ptn1 <- "<(mc:AlternateContent|xdr:oneCellAnchor|xdr:twoCellAnchor|xdr:absoluteAnchor)" # ptn2 <- "" ## split at one/two cell Anchor # dXML <- regmatches(dXML, gregexpr(paste0(ptn1, ".*?", ptn2), dXML)) } ## loop over all worksheets and assign drawing to sheet if (any(hasDrawing)) { for (i in seq_along(xml)) { if (hasDrawing[i]) { target <- unlist(lapply(drawXMLrelationship[[i]], function(x) regmatches(x, gregexpr('(?<=Target=").*?"', x, perl = TRUE))[[1]])) target <- basename(gsub('"$', "", target)) ## sheet_i has which(hasDrawing)[[i]] relsInd <- grepl(target, drawingRelsXML) if (any(relsInd)) { wb$drawings_rels[i] <- dRels[relsInd] } drawingInd <- grepl(target, drawingsXML) if (any(drawingInd)) { wb$drawings[i] <- dXML[drawingInd] } } } } ## VML Drawings -------------------------------------------------------------------------------- if (length(vmlDrawingXML) > 0) { wb$Content_Types <- c(wb$Content_Types, '') drawXMLrelationship <- lapply(xml, function(x) grep("drawings/vmlDrawing", x, value = TRUE)) hasDrawing <- sapply(drawXMLrelationship, length) > 0 ## which sheets have a drawing ## loop over all worksheets and assign drawing to sheet if (any(hasDrawing)) { for (i in seq_along(xml)) { if (hasDrawing[i]) { target <- unlist(lapply(drawXMLrelationship[[i]], function(x) regmatches(x, gregexpr('(?<=Target=").*?"', x, perl = TRUE))[[1]])) target <- basename(gsub('"$', "", target)) ind <- grepl(target, vmlDrawingXML) if (any(ind)) { txt <- paste(readUTF8(vmlDrawingXML[ind]), collapse = "\n") txt <- removeHeadTag(txt) i1 <- regexpr("", txt, fixed = TRUE) wb$vml[[i]] <- substring(text = txt, first = i1, last = (i2 - 1L)) relsInd <- grepl(target, vmlDrawingRelsXML) if (any(relsInd)) { wb$vml_rels[i] <- vmlDrawingRelsXML[relsInd] } } } } } } ## vmlDrawing and comments if (length(commentsXML) > 0) { drawXMLrelationship <- lapply(xml, function(x) grep("drawings/vmlDrawing[0-9]+\\.vml", x, value = TRUE)) hasDrawing <- sapply(drawXMLrelationship, length) > 0 ## which sheets have a drawing commentXMLrelationship <- lapply(xml, function(x) grep("comments[0-9]+\\.xml", x, value = TRUE)) hasComment <- sapply(commentXMLrelationship, length) > 0 ## which sheets have a comment for (i in seq_along(xml)) { if (hasComment[i]) { target <- unlist(lapply(drawXMLrelationship[[i]], function(x) regmatches(x, gregexpr('(?<=Target=").*?"', x, perl = TRUE))[[1]])) target <- basename(gsub('"$', "", target)) ind <- grepl(target, vmlDrawingXML) if (any(ind)) { txt <- paste(readUTF8(vmlDrawingXML[ind]), collapse = "\n") txt <- removeHeadTag(txt) cd <- unique(getNodes(xml = txt, tagIn = "") ## now loada comment target <- unlist(lapply(commentXMLrelationship[[i]], function(x) regmatches(x, gregexpr('(?<=Target=").*?"', x, perl = TRUE))[[1]])) target <- basename(gsub('"$', "", target)) txt <- paste(readUTF8(grep(target, commentsXML, value = TRUE)), collapse = "\n") txt <- removeHeadTag(txt) authors <- getNodes(xml = txt, tagIn = "") authors <- gsub("|", "", authors) comments <- getNodes(xml = txt, tagIn = "") comments <- gsub("", "", comments) comments <- getNodes(xml = comments, tagIn = "))[\\s\\S]+?(?=)", comments, perl = TRUE)) comments <- lapply(comments, function(x) gsub(".*?>", "", x, perl = TRUE)) wb$comments[[i]] <- lapply(seq_along(comments), function(j) { list( "ref" = refs[j], "author" = authors[j], "comment" = comments[[j]], "style" = style[[j]], "clientData" = cd[[j]] ) }) } } } } ## Threaded comments if (length(threadCommentsXML) > 0) { threadCommentsXMLrelationship <- lapply(xml, function(x) grep("threadedComment[0-9]+\\.xml", x, value = TRUE)) hasThreadComments<- sapply(threadCommentsXMLrelationship, length) > 0 if(any(hasThreadComments)) { for (i in seq_along(xml)) { if (hasThreadComments[i]) { target <- unlist(lapply(threadCommentsXMLrelationship[[i]], function(x) regmatches(x, gregexpr('(?<=Target=").*?"', x, perl = TRUE))[[1]])) target <- basename(gsub('"$', "", target)) wb$threadComments[[i]] <- grep(target, threadCommentsXML, value = TRUE) } } } wb$Content_Types <- c( wb$Content_Types, sprintf('', sapply(threadCommentsXML, basename)) ) } ## Persons (needed for Threaded Comment) if (length(personXML) > 0) { wb$persons <- personXML wb$Content_Types <- c( wb$Content_Types, '' ) wb$workbook.xml.rels <- c( wb$workbook.xml.rels, '') } ## rels image drawXMLrelationship <- lapply(xml, function(x) grep("relationships/image", x, value = TRUE)) hasDrawing <- sapply(drawXMLrelationship, length) > 0 ## which sheets have a drawing if (any(hasDrawing)) { for (i in seq_along(xml)) { if (hasDrawing[i]) { image_ids <- unlist(getId(drawXMLrelationship[[i]])) new_image_ids <- paste0("rId", seq_along(image_ids) + 70000) for (j in seq_along(image_ids)) { wb$worksheets[[i]]$oleObjects <- gsub(image_ids[j], new_image_ids[j], wb$worksheets[[i]]$oleObjects, fixed = TRUE) wb$worksheets_rels[[i]] <- c(wb$worksheets_rels[[i]], gsub(image_ids[j], new_image_ids[j], drawXMLrelationship[[i]][j], fixed = TRUE)) } } } } ## rels image drawXMLrelationship <- lapply(xml, function(x) grep("relationships/package", x, value = TRUE)) hasDrawing <- sapply(drawXMLrelationship, length) > 0 ## which sheets have a drawing if (any(hasDrawing)) { for (i in seq_along(xml)) { if (hasDrawing[i]) { image_ids <- unlist(getId(drawXMLrelationship[[i]])) new_image_ids <- paste0("rId", seq_along(image_ids) + 90000) for (j in seq_along(image_ids)) { wb$worksheets[[i]]$oleObjects <- gsub(image_ids[j], new_image_ids[j], wb$worksheets[[i]]$oleObjects, fixed = TRUE) wb$worksheets_rels[[i]] <- c( wb$worksheets_rels[[i]], sprintf("", new_image_ids[j]) ) } } } } ## Embedded docx if (length(embeddings) > 0) { wb$Content_Types <- c(wb$Content_Types, '') wb$embeddings <- embeddings } ## pivot tables if (length(pivotTableXML) > 0) { # pivotTableJ <- lapply(xml, function(x) as.integer(regmatches(x, regexpr("(?<=pivotTable)[0-9]+(?=\\.xml)", x, perl = TRUE)))) variable not used # sheetWithPivot <- which(sapply(pivotTableJ, length) > 0) variable not used pivotRels <- lapply(xml, function(x) { y <- grep("pivotTable", x, value = TRUE) y[order(nchar(y), y)] }) hasPivot <- sapply(pivotRels, length) > 0 ## Modify rIds for (i in seq_along(pivotRels)) { if (hasPivot[i]) { for (j in seq_along(pivotRels[[i]])) { pivotRels[[i]][j] <- gsub('"rId[0-9]+"', sprintf('"rId%s"', 20000L + j), pivotRels[[i]][j]) } wb$worksheets_rels[[i]] <- c(wb$worksheets_rels[[i]], pivotRels[[i]]) } } ## remove any workbook_res references to pivot tables that are not being used in worksheet_rels inds <- seq_along(wb$pivotTables.xml.rels) fileNo <- as.integer(unlist(regmatches(unlist(wb$worksheets_rels), gregexpr("(?<=pivotTable)[0-9]+(?=\\.xml)", unlist(wb$worksheets_rels), perl = TRUE)))) inds <- inds[!inds %in% fileNo] if (length(inds) > 0) { toRemove <- paste(sprintf("(pivotCacheDefinition%s\\.xml)", inds), collapse = "|") fileNo <- grep(toRemove, wb$pivotTables.xml.rels) toRemove <- paste(sprintf("(pivotCacheDefinition%s\\.xml)", fileNo), collapse = "|") ## remove reference to file from workbook.xml.res wb$workbook.xml.rels <- wb$workbook.xml.rels[!grepl(toRemove, wb$workbook.xml.rels)] } } } ## end of worksheetRels ## convert hyperliks to hyperlink objects for (i in 1:nSheets) { wb$worksheets[[i]]$hyperlinks <- xml_to_hyperlink(wb$worksheets[[i]]$hyperlinks) } ## queryTables if (length(queryTablesXML) > 0) { ids <- as.numeric(regmatches(queryTablesXML, regexpr("[0-9]+(?=\\.xml)", queryTablesXML, perl = TRUE))) wb$queryTables <- unlist(lapply(queryTablesXML[order(ids)], function(x) removeHeadTag(cppReadFile(xmlFile = x)))) wb$Content_Types <- c( wb$Content_Types, sprintf('', seq_along(queryTablesXML)) ) } ## connections if (length(connectionsXML) > 0) { wb$connections <- removeHeadTag(cppReadFile(xmlFile = connectionsXML)) wb$workbook.xml.rels <- c(wb$workbook.xml.rels, '') wb$Content_Types <- c(wb$Content_Types, '') } ## table rels if (length(tableRelsXML) > 0) { ## table_i_might have tableRels_i but I am re-ordering the tables to be in order of worksheets ## I make every table have a table_rels so i need to fill in the gaps if any table_rels are missing tmp <- paste0(basename(tablesXML), ".rels") hasRels <- tmp %in% basename(tableRelsXML) ## order tableRelsXML tableRelsXML <- tableRelsXML[match(tmp[hasRels], basename(tableRelsXML))] ## wb$tables.xml.rels <- character(length = length(tablesXML)) ## which sheet does it belong to xml <- sapply(tableRelsXML, cppReadFile, USE.NAMES = FALSE) xml <- sapply(xml, removeHeadTag, USE.NAMES = FALSE) wb$tables.xml.rels[hasRels] <- xml } else if (length(tablesXML) > 0) { wb$tables.xml.rels <- rep("", length(tablesXML)) } activesheet <- unlist(regmatches(workbook, gregexpr("(?<=).*(?=)", workbook, perl = TRUE))) activesheet <- unlist(regmatches(activesheet, gregexpr("]*>", activesheet, perl = TRUE))) wb$ActiveSheet <- as.integer(getAttrs(activesheet,"activeTab")$activeTab) + 1L if (length(wb$ActiveSheet) == 0) { wb$ActiveSheet <- 1L } # Preserve window size and position: xWindow <- getAttrs(activesheet,c("xWindow"))$xWindow yWindow <- getAttrs(activesheet,c("yWindow"))$yWindow windowWidth <- getAttrs(activesheet,c("windowWidth"))$windowWidth windowHeight <- getAttrs(activesheet,c("windowHeight"))$windowHeight bookViews <- wb$workbook$bookViews bookViews <- sub("xWindow=\"0", paste0("xWindow=\"", xWindow), bookViews) bookViews <- sub("yWindow=\"0", paste0("yWindow=\"", yWindow), bookViews) bookViews <- sub("windowWidth=\"13125", paste0("windowWidth=\"", windowWidth), bookViews) bookViews <- sub("windowHeight=\"6105", paste0("windowHeight=\"", windowHeight), bookViews) wb$workbook$bookViews <- bookViews # Done Preserve window size and position return(wb) } openxlsx/R/data-fontSizeLookupTables.R0000644000176200001440000000053114656125141017517 0ustar liggesusers#' Font Size Lookup tables #' #' Lookup tables for font size #' #' @format A data.frame with column names corresponding to font names #' @examples #' data(openxlsxFontSizeLookupTable) #' data(openxlsxFontSizeLookupTableBold) "openxlsxFontSizeLookupTable" #' @rdname openxlsxFontSizeLookupTable #' @format NULL "openxlsxFontSizeLookupTableBold" openxlsx/vignettes/0000755000176200001440000000000014745235501014150 5ustar liggesusersopenxlsx/vignettes/Introduction.Rmd0000644000176200001440000004031214656134061017275 0ustar liggesusers--- title: "Introduction" author: "Alexander Walker, Philipp Schauberger" date: "`r Sys.Date()`" output: rmarkdown::html_vignette vignette: > %\VignetteIndexEntry{Introduction} %\VignetteEngine{knitr::rmarkdown} %\VignetteEncoding{UTF-8} --- ## Basic Examples ### write.xlsx The simplest way to write to a workbook is write.xlsx(). By default, write.xlsx calls writeData. If asTable is TRUE write.xlsx will write x as an Excel table. ```{r include = TRUE, tidy = TRUE, eval = FALSE, highlight = TRUE} ## write to working directory library(openxlsx) write.xlsx(iris, file = "writeXLSX1.xlsx") write.xlsx(iris, file = "writeXLSXTable1.xlsx", asTable = TRUE) ``` ### write list of data.frames to xlsx-file ```{r include = TRUE, tidy = TRUE, eval = FALSE ,highlight = TRUE} ## write a list of data.frames to individual worksheets using list names as worksheet names l <- list("IRIS" = iris, "MTCARS" = mtcars) write.xlsx(l, file = "writeXLSX2.xlsx") write.xlsx(l, file = "writeXLSXTable2.xlsx", asTable = TRUE) ``` ### write.xlsx also accepts styling parameters #### The simplest way is to set default options and set column class ```{r include = TRUE, tidy = TRUE, eval = FALSE ,highlight= TRUE} options("openxlsx.borderColour" = "#4F80BD") options("openxlsx.borderStyle" = "thin") options("openxlsx.dateFormat" = "mm/dd/yyyy") options("openxlsx.datetimeFormat" = "yyyy-mm-dd hh:mm:ss") options("openxlsx.numFmt" = NULL) ## For default style rounding of numeric columns df <- data.frame("Date" = Sys.Date()-0:19, "LogicalT" = TRUE, "Time" = Sys.time()-0:19*60*60, "Cash" = paste("$",1:20), "Cash2" = 31:50, "hLink" = "https://CRAN.R-project.org/", "Percentage" = seq(0, 1, length.out=20), "TinyNumbers" = runif(20) / 1E9, stringsAsFactors = FALSE) class(df$Cash) <- "currency" class(df$Cash2) <- "accounting" class(df$hLink) <- "hyperlink" class(df$Percentage) <- "percentage" class(df$TinyNumbers) <- "scientific" write.xlsx(df, "writeXLSX3.xlsx") write.xlsx(df, file = "writeXLSXTable3.xlsx", asTable = TRUE) ``` ## Workbook styles ### define a style for column headers ```{r include = TRUE, tidy = TRUE, eval = FALSE, highlight= TRUE} hs <- createStyle(fontColour = "#ffffff", fgFill = "#4F80BD", halign = "center", valign = "center", textDecoration = "Bold", border = "TopBottomLeftRight", textRotation = 45) write.xlsx(iris, file = "writeXLSX4.xlsx", borders = "rows", headerStyle = hs) write.xlsx(iris, file = "writeXLSX5.xlsx", borders = "columns", headerStyle = hs) write.xlsx(iris, "writeXLSXTable4.xlsx", asTable = TRUE, headerStyle = createStyle(textRotation = 45)) ``` ### When writing a list, the stylings will apply to all list elements ```{r include = TRUE, tidy = TRUE, eval = FALSE, highlight = TRUE} l <- list("IRIS" = iris, "colClasses" = df) write.xlsx(l, file = "writeXLSX6.xlsx", borders = "columns", headerStyle = hs) write.xlsx(l, file = "writeXLSXTable5.xlsx", asTable = TRUE, tableStyle = "TableStyleLight2") openXL("writeXLSX6.xlsx") openXL("writeXLSXTable5.xlsx") ``` ### write.xlsx returns the workbook object for further editing ```{r include = TRUE, tidy = TRUE, eval = FALSE, highlight = TRUE} wb <- write.xlsx(iris, "writeXLSX6.xlsx") setColWidths(wb, sheet = 1, cols = 1:5, widths = 20) saveWorkbook(wb, "writeXLSX6.xlsx", overwrite = TRUE) ``` ## Workbook creation walk-through ### create workbook and set default border Colour and style ```{r include = TRUE, tidy = TRUE, eval = FALSE, highlight = TRUE} require(ggplot2) wb <- createWorkbook() options("openxlsx.borderColour" = "#4F80BD") options("openxlsx.borderStyle" = "thin") modifyBaseFont(wb, fontSize = 10, fontName = "Arial Narrow") ``` ### Add Sheets ```{r include = TRUE,tidy = TRUE, eval = FALSE, highlight = TRUE} addWorksheet(wb, sheetName = "Motor Trend Car Road Tests", gridLines = FALSE) addWorksheet(wb, sheetName = "Iris", gridLines = FALSE) ``` ### write data to sheet 1 ```{r include = TRUE, tidy = TRUE, eval = FALSE, highlight = TRUE} freezePane(wb, sheet = 1, firstRow = TRUE, firstCol = TRUE) ## freeze first row and column writeDataTable(wb, sheet = 1, x = mtcars, colNames = TRUE, rowNames = TRUE, tableStyle = "TableStyleLight9") setColWidths(wb, sheet = 1, cols = "A", widths = 18) ``` ### write data to sheet 2 iris data.frame is added as excel table on sheet 2. ```{r include = TRUE, tidy = TRUE, eval = FALSE, highlight = TRUE} writeDataTable(wb, sheet = 2, iris, startCol = "K", startRow = 2) qplot(data=iris, x = Sepal.Length, y= Sepal.Width, colour = Species) insertPlot(wb, 2, xy=c("B", 16)) ## insert plot at cell B16 means <- aggregate(x = iris[,-5], by = list(iris$Species), FUN = mean) vars <- aggregate(x = iris[,-5], by = list(iris$Species), FUN = var) ``` ### add write group means ```{r include = TRUE, tidy = TRUE, eval = FALSE, highlight = TRUE} headSty <- createStyle(fgFill="#DCE6F1", halign="center", border = "TopBottomLeftRight") writeData(wb, 2, x = "Iris dataset group means", startCol = 2, startRow = 2) writeData(wb, 2, x = means, startCol = "B", startRow=3, borders="rows", headerStyle = headSty) ``` ### add write group variances ```{r include = TRUE, tidy = TRUE, eval = FALSE, highlight = TRUE} writeData(wb, 2, x = "Iris dataset group variances", startCol = 2, startRow = 9) writeData(wb, 2, x= vars, startCol = "B", startRow=10, borders="columns", headerStyle = headSty) setColWidths(wb, 2, cols=2:6, widths = 12) ## width is recycled for each col setColWidths(wb, 2, cols=11:15, widths = 15) ``` ### add style mean & variance table headers ```{r include = TRUE, tidy = TRUE, eval = FALSE, highlight = TRUE} s1 <- createStyle(fontSize=14, textDecoration=c("bold", "italic")) addStyle(wb, 2, style = s1, rows=c(2,9), cols=c(2,2)) ``` ### save workbook ```{r include = TRUE, tidy = TRUE, eval = FALSE, highlight = TRUE} saveWorkbook(wb, "basics.xlsx", overwrite = TRUE) ## save to working directory ``` ## Gallery ```{r eval = FALSE, include = TRUE} ## inspired by xtable gallery #https://CRAN.R-project.org/package=xtable/vignettes/xtableGallery.pdf ## Create a new workbook wb <- createWorkbook() data(tli, package = "xtable") ## data.frame test.n <- "data.frame" my.df <- tli[1:10, ] addWorksheet(wb = wb, sheetName = test.n) writeData(wb = wb, sheet = test.n, x = my.df, borders = "n") ## matrix test.n <- "matrix" design.matrix <- model.matrix(~ sex * grade, data = my.df) addWorksheet(wb = wb, sheetName = test.n) writeData(wb = wb, sheet = test.n, x = design.matrix) ## aov test.n <- "aov" fm1 <- aov(tlimth ~ sex + ethnicty + grade + disadvg, data = tli) addWorksheet(wb = wb, sheetName = test.n) writeData(wb = wb, sheet = test.n, x = fm1) ## lm test.n <- "lm" fm2 <- lm(tlimth ~ sex*ethnicty, data = tli) addWorksheet(wb = wb, sheetName = test.n) writeData(wb = wb, sheet = test.n, x = fm2) ## anova 1 test.n <- "anova" my.anova <- anova(fm2) addWorksheet(wb = wb, sheetName = test.n) writeData(wb = wb, sheet = test.n, x = my.anova) ## anova 2 test.n <- "anova2" fm2b <- lm(tlimth ~ ethnicty, data = tli) my.anova2 <- anova(fm2b, fm2) addWorksheet(wb = wb, sheetName = test.n) writeData(wb = wb, sheet = test.n, x = my.anova2) ## glm test.n <- "glm" fm3 <- glm(disadvg ~ ethnicty*grade, data = tli, family = binomial()) addWorksheet(wb = wb, sheetName = test.n) writeData(wb = wb, sheet = test.n, x = fm3) ## prcomp test.n <- "prcomp" pr1 <- prcomp(USArrests) addWorksheet(wb = wb, sheetName = test.n) writeData(wb = wb, sheet = test.n, x = pr1) ## summary.prcomp test.n <- "summary.prcomp" addWorksheet(wb = wb, sheetName = test.n) writeData(wb = wb, sheet = test.n, x = summary(pr1)) ## simple table test.n <- "table" data(airquality) airquality$OzoneG80 <- factor(airquality$Ozone > 80, levels = c(FALSE, TRUE), labels = c("Oz <= 80", "Oz > 80")) airquality$Month <- factor(airquality$Month, levels = 5:9, labels = month.abb[5:9]) my.table <- with(airquality, table(OzoneG80,Month) ) addWorksheet(wb = wb, sheetName = test.n) writeData(wb = wb, sheet = test.n, x = my.table) ## survdiff 1 library(survival) test.n <- "survdiff1" addWorksheet(wb = wb, sheetName = test.n) x <- survdiff(Surv(futime, fustat) ~ rx, data = ovarian) writeData(wb = wb, sheet = test.n, x = x) ## survdiff 2 test.n <- "survdiff2" addWorksheet(wb = wb, sheetName = test.n) expect <- survexp(futime ~ ratetable(age=(accept.dt - birth.dt), sex=1,year=accept.dt,race="white"), jasa, cohort=FALSE, ratetable=survexp.usr) x <- survdiff(Surv(jasa$futime, jasa$fustat) ~ offset(expect)) writeData(wb = wb, sheet = test.n, x = x) ## coxph 1 test.n <- "coxph1" addWorksheet(wb = wb, sheetName = test.n) bladder$rx <- factor(bladder$rx, labels = c("Pla","Thi")) x <- coxph(Surv(stop,event) ~ rx, data = bladder) writeData(wb = wb, sheet = test.n, x = x) ## coxph 2 test.n <- "coxph2" addWorksheet(wb = wb, sheetName = test.n) x <- coxph(Surv(stop,event) ~ rx + cluster(id), data = bladder) writeData(wb = wb, sheet = test.n, x = x) ## cox.zph test.n <- "cox.zph" addWorksheet(wb = wb, sheetName = test.n) x <- cox.zph(coxph(Surv(futime, fustat) ~ age + ecog.ps, data=ovarian)) writeData(wb = wb, sheet = test.n, x = x) ## summary.coxph 1 test.n <- "summary.coxph1" addWorksheet(wb = wb, sheetName = test.n) x <- summary(coxph(Surv(stop,event) ~ rx, data = bladder)) writeData(wb = wb, sheet = test.n, x = x) ## summary.coxph 2 test.n <- "summary.coxph2" addWorksheet(wb = wb, sheetName = test.n) x <- summary(coxph(Surv(stop,event) ~ rx + cluster(id), data = bladder)) writeData(wb = wb, sheet = test.n, x = x) ## view without saving openXL(wb) ``` ## Further Examples ### Stock Price ```{r eval = FALSE, include = TRUE, tidy = TRUE, highlight= TRUE} require(ggplot2) wb <- createWorkbook() ## read historical prices from yahoo finance ticker <- "CBA.AX" csv.url <- paste0("https://query1.finance.yahoo.com/v7/finance/download/", ticker, "?period1=1597597610&period2=1629133610&interval=1d&events=history&includeAdjustedClose= TRue") prices <- read.csv(url(csv.url), as.is = TRUE) prices$Date <- as.Date(prices$Date) close <- prices$Close prices$logReturns = c(0, log(close[2:length(close)]/close[1:(length(close)-1)])) ## Create plot of price series and add to worksheet ggplot(data = prices, aes(as.Date(Date), as.numeric(Close))) + geom_line(colour="royalblue2") + labs(x = "Date", y = "Price", title = ticker) + geom_area(fill = "royalblue1",alpha = 0.3) + coord_cartesian(ylim=c(min(prices$Close)-1.5, max(prices$Close)+1.5)) ## Add worksheet and write plot to sheet addWorksheet(wb, sheetName = "CBA") insertPlot(wb, sheet = 1, xy = c("J", 3)) ## Histogram of log returns ggplot(data = prices, aes(x = logReturns)) + geom_histogram(binwidth=0.0025) + labs(title = "Histogram of log returns") ## currency class(prices$Close) <- "currency" ## styles as currency in workbook ## write historical data and histogram of returns writeDataTable(wb, sheet = "CBA", x = prices) insertPlot(wb, sheet = 1, startRow=25, startCol = "J") ## Add conditional formatting to show where logReturn > 0.01 using default style conditionalFormat(wb, sheet = 1, cols = seq_len((prices)), rows = 2:(nrow(prices)+1), rule = "$H2 > 0.01") ## style log return col as a percentage logRetStyle <- createStyle(numFmt = "percentage") addStyle(wb, 1, style = logRetStyle, rows = 2:(nrow(prices) + 1), cols = "H", gridExpand = TRUE) setColWidths(wb, sheet=1, cols = c("A", "F", "G", "H"), widths = 15) ## save workbook to working directory saveWorkbook(wb, "stockPrice.xlsx", overwrite = TRUE) openXL("stockPrice.xlsx") ``` ### Image Compression using PCA ```{r eval = FALSE, include = TRUE} require(openxlsx) require(jpeg) require(ggplot2) plotFn <- function(x, ...) { colvec <- grey(x) colmat <- array(match(colvec, unique(colvec)), dim = dim(x)[1:2]) image(x = 0:(dim(colmat)[2]), y = 0:(dim(colmat)[1]), z = t(colmat[rev(seq_len(nrow(colmat))) , ]), col = unique(colvec), xlab = "", ylab = "", axes = FALSE, asp = 1, bty ="n", frame.plot=FALSE, ann=FALSE) } ## Create workbook and add a worksheet, hide gridlines wb <- createWorkbook("Einstein") addWorksheet(wb, "Original Image", gridLines = FALSE) A <- readJPEG(file.path(path.package("openxlsx"), "einstein.jpg")) height <- nrow(A) width <- ncol(A) ## write "Original Image" to cell B2 writeData(wb, 1, "Original Image", xy = c(2,2)) ## write Object size to cell B3 writeData(wb, 1, sprintf("Image object size: %s bytes", format(object.size(A+0)[[1]], big.mark=',')), xy = c(2,3)) ## equivalent to startCol = 2, startRow = 3 ## Plot image par(mar=rep(0, 4), xpd = NA) plotFn(A) ## insert plot currently showing in plot window insertPlot(wb, 1, width, height, units="px", startRow= 5, startCol = 2) ## SVD of covariance matrix rMeans <- rowMeans(A) rowMeans <- do.call("cbind", lapply(seq_len(ncol(A)), function(X) rMeans)) A <- A - rowMeans E <- svd(A %*% t(A) / (ncol(A) - 1)) # SVD on covariance matrix of A pve <- data.frame("Eigenvalues" = E$d, "PVE" = E$d/sum(E$d), "Cumulative PVE" = cumsum(E$d/sum(E$d))) ## write eigenvalues to worksheet addWorksheet(wb, "Principal Component Analysis") hs <- createStyle(fontColour = "#ffffff", fgFill = "#4F80BD", halign = "CENTER", textDecoration = "Bold", border = "TopBottomLeftRight", borderColour = "#4F81BD") writeData(wb, 2, x="Proportions of variance explained by Eigenvector" ,startRow = 2) mergeCells(wb, sheet=2, cols=1:4, rows=2) setColWidths(wb, 2, cols = 1:3, widths = c(14, 12, 15)) writeData(wb, 2, x=pve, startRow = 3, startCol = 1, borders="rows", headerStyle=hs) ## Plots pve <- cbind(pve, "Ind" = seq_len(nrow(pve))) ggplot(data = pve[1:20,], aes(x = Ind, y = 100*PVE)) + geom_bar(stat="identity", position = "dodge") + xlab("Principal Component Index") + ylab("Proportion of Variance Explained") + geom_line(size = 1, col = "blue") + geom_point(size = 3, col = "blue") ## Write plot to worksheet 2 insertPlot(wb, 2, width = 5, height = 4, startCol = "E", startRow = 2) ## Plot of cumulative explained variance ggplot(data = pve[1:50,], aes(x = Ind, y = 100*Cumulative.PVE)) + geom_point(size=2.5) + geom_line(size=1) + xlab("Number of PCs") + ylab("Cumulative Proportion of Variance Explained") insertPlot(wb, 2, width = 5, height = 4, xy= c("M", 2)) ## Reconstruct image using increasing number of PCs nPCs <- c(5, 7, 12, 20, 50, 200) startRow <- rep(c(2, 24), each = 3) startCol <- rep(c("B", "H", "N"), 2) ## create a worksheet to save reconstructed images to addWorksheet(wb, "Reconstructed Images", zoom = 90) for(i in seq_len(length(nPCs))) { V <- E$v[, 1:nPCs[i]] imgHat <- t(V) %*% A ## project img data on to PCs imgSize <- object.size(V) + object.size(imgHat) + object.size(rMeans) imgHat <- V %*% imgHat + rowMeans ## reconstruct from PCs and add back row means imgHat <- round((imgHat - min(imgHat)) / (max(imgHat) - min(imgHat))*255) # scale plotFn(imgHat/255) ## write strings to worksheet 3 writeData(wb, "Reconstructed Images", sprintf("Number of principal components used: %s", nPCs[[i]]), startCol[i], startRow[i]) writeData(wb, "Reconstructed Images", sprintf("Sum of component object sizes: %s bytes", format(as.numeric(imgSize), big.mark=',')), startCol[i], startRow[i]+1) ## write reconstruced image insertPlot(wb, "Reconstructed Images", width, height, units="px", xy = c(startCol[i], startRow[i]+3)) } # hide grid lines showGridLines(wb, sheet = 3, showGridLines = FALSE) ## Make text above images BOLD boldStyle <- createStyle(textDecoration="BOLD") ## only want to apply style to specified cells (not all combinations of rows & cols) addStyle(wb, "Reconstructed Images", style=boldStyle, rows = c(startRow, startRow+1), cols = rep(startCol, 2), gridExpand = FALSE) ## save workbook to working directory saveWorkbook(wb, "Image dimensionality reduction.xlsx", overwrite = TRUE) ## remove example files for cran test if (identical(Sys.getenv("NOT_CRAN", unset = "true"), "false")) { file_list<-list.files(pattern="\\.xlsx",recursive = TRUE) file_list<-fl[!grepl("inst/extdata",file_list)&!grepl("man/",file_list)] if(length(file_list)>0) { rm(file_list) } } ``` ```{r cleanup, eval = FALSE, include = FALSE} xlsx_files <- dir(pattern = "*.xlsx") unlink(xlsx_files) ``` openxlsx/vignettes/Formatting.Rmd0000644000176200001440000002742314664364363016747 0ustar liggesusers--- title: "Formating with xlsx" author: "Alexander Walker, Philipp Schauberger" date: "`r Sys.Date()`" output: rmarkdown::html_vignette vignette: > %\VignetteIndexEntry{Formating with xlsx} %\VignetteEngine{knitr::rmarkdown} %\VignetteEncoding{UTF-8} --- ## Formatting with writeData and writeDataTable ```{r setup, include = FALSE} library(openxlsx) ``` ```{r include = TRUE, eval = FALSE, highlight = TRUE} ## data.frame to write df <- data.frame("Date" = Sys.Date()-0:4, "Logical" = c(TRUE, FALSE, TRUE, TRUE, FALSE), "Currency" = paste("$",-2:2), "Accounting" = -2:2, "hLink" = "https://CRAN.R-project.org/", "Percentage" = seq(-1, 1, length.out=5), "TinyNumber" = runif(5) / 1E9, stringsAsFactors = FALSE) class(df$Currency) <- "currency" class(df$Accounting) <- "accounting" class(df$hLink) <- "hyperlink" class(df$Percentage) <- "percentage" class(df$TinyNumber) <- "scientific" ## Formatting can be applied simply through the write functions ## global options can be set to further simplify things options("openxlsx.borderStyle" = "thin") options("openxlsx.borderColour" = "#4F81BD") ## create a workbook and add a worksheet wb <- createWorkbook() addWorksheet(wb, "writeData auto-formatting") writeData(wb, 1, df, startRow = 2, startCol = 2) writeData(wb, 1, df, startRow = 9, startCol = 2, borders = "surrounding") writeData(wb, 1, df, startRow = 16, startCol = 2, borders = "rows") writeData(wb, 1, df, startRow = 23, startCol = 2, borders ="columns") writeData(wb, 1, df, startRow = 30, startCol = 2, borders ="all") ## headerStyles hs1 <- createStyle(fgFill = "#4F81BD", halign = "CENTER", textDecoration = "Bold", border = "Bottom", fontColour = "white") writeData(wb, 1, df, startRow = 16, startCol = 10, headerStyle = hs1, borders = "rows", borderStyle = "medium") ## to change the display text for a hyperlink column just write over those cells writeData(wb, sheet = 1, x = paste("Hyperlink", 1:5), startRow = 17, startCol = 14) ## writing as an Excel Table addWorksheet(wb, "writeDataTable") writeDataTable(wb, 2, df, startRow = 2, startCol = 2) writeDataTable(wb, 2, df, startRow = 9, startCol = 2, tableStyle = "TableStyleLight9") writeDataTable(wb, 2, df, startRow = 16, startCol = 2, tableStyle = "TableStyleLight2") writeDataTable(wb, 2, df, startRow = 23, startCol = 2, tableStyle = "TableStyleMedium21") openXL(wb) ## opens a temp version ``` ## Use of pre-defined table styles The 'tableStyle' argument in writeDataTable can be any of the predefined tableStyles in Excel. ![](tableStyles.PNG) ## Date Formatting ```{r include = TRUE, eval = FALSE, highlight = TRUE} # data.frame of dates dates <- data.frame("d1" = Sys.Date() - 0:4) for(i in 1:3) dates <- cbind(dates, dates) names(dates) <- paste0("d", 1:8) ## Date Formatting wb <- createWorkbook() addWorksheet(wb, "Date Formatting", gridLines = FALSE) writeData(wb, 1, dates) ## write without styling ## openxlsx converts columns of class "Date" to Excel dates with the format given by getOption("openxlsx.dateFormat", "mm/dd/yyyy") ## this can be set via (for example) options("openxlsx.dateFormat" = "yyyy/mm/dd") ## custom date formats can be made up of any combination of: ## d, dd, ddd, dddd, m, mm, mmm, mmmm, mmmmm, yy, yyyy ## numFmt == "DATE" will use the date format specified by the above addStyle(wb, 1, style = createStyle(numFmt = "DATE"), rows = 2:11, cols = 1, gridExpand = TRUE) ## some custom date format examples sty <- createStyle(numFmt = "yyyy/mm/dd") addStyle(wb, 1, style = sty, rows = 2:11, cols = 2, gridExpand = TRUE) sty <- createStyle(numFmt = "yyyy/mmm/dd") addStyle(wb, 1, style = sty, rows = 2:11, cols = 3, gridExpand = TRUE) sty <- createStyle(numFmt = "yy / mmmm / dd") addStyle(wb, 1, style = sty, rows = 2:11, cols = 4, gridExpand = TRUE) sty <- createStyle(numFmt = "ddddd") addStyle(wb, 1, style = sty, rows = 2:11, cols = 5, gridExpand = TRUE) sty <- createStyle(numFmt = "yyyy-mmm-dd") addStyle(wb, 1, style = sty, rows = 2:11, cols = 6, gridExpand = TRUE) sty <- createStyle(numFmt = "mm/ dd yyyy") addStyle(wb, 1, style = sty, rows = 2:11, cols = 7, gridExpand = TRUE) sty <- createStyle(numFmt = "mm/dd/yy") addStyle(wb, 1, style = sty, rows = 2:11, cols = 8, gridExpand = TRUE) setColWidths(wb, 1, cols = 1:10, widths = 23) ## The default date format used in writeData and writeDataTable can be set with: options("openxlsx.dateFormat" = "dd/mm/yyyy") writeData(wb, "Date Formatting", dates, startRow = 8, borders = "rows") options("openxlsx.dateFormat" = "yyyy-mm-dd") writeData(wb, "Date Formatting", dates, startRow = 15) saveWorkbook(wb, "Date Formatting.xlsx", overwrite = TRUE) ``` ## DateTime Formatting The conversion from POSIX to Excel datetimes is dependent on the timezone you are in. If POSIX values are being written incorrectly, try setting the timezone with (for example) ```{r include = TRUE, eval = FALSE, highlight = TRUE} Sys.setenv(TZ = "Australia/Sydney") dateTimes <- data.frame("d1" = Sys.time() - 0:4*10000) for(i in 1:2) dateTimes <- cbind(dateTimes, dateTimes) names(dateTimes) <- paste0("d", 1:4) ## POSIX Formatting wb <- createWorkbook() addWorksheet(wb, "DateTime Formatting", gridLines = FALSE) writeData(wb, 1, dateTimes) ## write without styling ## openxlsx converts columns of class "POSIxt" to Excel datetimes with the format given by getOption("openxlsx.datetimeFormat", "yyyy/mm/dd hh:mm:ss") ## this can be set via (for example) options("openxlsx.datetimeFormat" = "yyyy-mm-dd hh:mm:ss") ## custom datetime formats can be made up of any combination of: ## d, dd, ddd, dddd, m, mm, mmm, mmmm, mmmmm, yy, yyyy, h, hh, m, mm, s, ss, AM/PM ## numFmt == "LONGDATE" will use the date format specified by the above long_date_style <- createStyle(numFmt = "LONGDATE") addStyle(wb, 1, style = long_date_style, rows = 2:11, cols = 1, gridExpand = TRUE) ## some custom date format examples sty <- createStyle(numFmt = "yyyy/mm/dd hh:mm:ss AM/PM") addStyle(wb, 1, style = sty, rows = 2:11, cols = 2, gridExpand = TRUE) sty <- createStyle(numFmt = "hh:mm:ss AM/PM") addStyle(wb, 1, style = sty, rows = 2:11, cols = 3, gridExpand = TRUE) sty <- createStyle(numFmt = "hh:mm:ss") addStyle(wb, 1, style = sty, rows = 2:11, cols = 4, gridExpand = TRUE) setColWidths(wb, 1, cols = 1:4, widths = 30) ## The default date format used in writeData and writeDataTable can be set with: options("openxlsx.datetimeFormat" = "yyyy/mm/dd hh:mm:ss") writeData(wb, "DateTime Formatting", dateTimes, startRow = 8, borders = "rows") options("openxlsx.datetimeFormat" = "hh:mm:ss AM/PM") writeDataTable(wb, "DateTime Formatting", dateTimes, startRow = 15) saveWorkbook(wb, "DateTime Formatting.xlsx", overwrite = TRUE) openXL("DateTime Formatting.xlsx") ``` ## Conditional Formatting ```{r include = TRUE, eval = FALSE, highlight = TRUE} wb <- createWorkbook() addWorksheet(wb, "cellIs") addWorksheet(wb, "Moving Row") addWorksheet(wb, "Moving Col") addWorksheet(wb, "Dependent on 1") addWorksheet(wb, "Duplicates") addWorksheet(wb, "containsText") addWorksheet(wb, "colourScale", zoom = 30) addWorksheet(wb, "databar") negStyle <- createStyle(fontColour = "#9C0006", bgFill = "#FFC7CE") posStyle <- createStyle(fontColour = "#006100", bgFill = "#C6EFCE") ## rule applies to all each cell in range writeData(wb, "cellIs", -5:5) writeData(wb, "cellIs", LETTERS[1:11], startCol=2) conditionalFormatting(wb, "cellIs", cols=1, rows=1:11, rule="!=0", style = negStyle) conditionalFormatting(wb, "cellIs", cols=1, rows=1:11, rule="==0", style = posStyle) ## highlight row dependent on first cell in row writeData(wb, "Moving Row", -5:5) writeData(wb, "Moving Row", LETTERS[1:11], startCol=2) conditionalFormatting(wb, "Moving Row", cols=1:2, rows=1:11, rule="$A1<0", style = negStyle) conditionalFormatting(wb, "Moving Row", cols=1:2, rows=1:11, rule="$A1>0", style = posStyle) ## highlight column dependent on first cell in column writeData(wb, "Moving Col", -5:5) writeData(wb, "Moving Col", LETTERS[1:11], startCol=2) conditionalFormatting(wb, "Moving Col", cols=1:2, rows=1:11, rule="A$1<0", style = negStyle) conditionalFormatting(wb, "Moving Col", cols=1:2, rows=1:11, rule="A$1>0", style = posStyle) ## highlight entire range cols X rows dependent only on cell A1 writeData(wb, "Dependent on 1", -5:5) writeData(wb, "Dependent on 1", LETTERS[1:11], startCol=2) conditionalFormatting(wb, "Dependent on 1", cols=1:2, rows=1:11, rule="$A$1<0", style = negStyle) conditionalFormatting(wb, "Dependent on 1", cols=1:2, rows=1:11, rule="$A$1>0", style = posStyle) ## highlight duplicates using default style writeData(wb, "Duplicates", sample(LETTERS[1:15], size = 10, replace = TRUE)) conditionalFormatting(wb, "Duplicates", cols = 1, rows = 1:10, type = "duplicates") ## cells containing text fn <- function(x) paste(sample(LETTERS, 10), collapse = "-") writeData(wb, "containsText", sapply(1:10, fn)) conditionalFormatting(wb, "containsText", cols = 1, rows = 1:10, type = "contains", rule = "A") ## colourscale colours cells based on cell value df <- read.xlsx(system.file("extdata", "readTest.xlsx", package = "openxlsx"), sheet = 5) writeData(wb, "colourScale", df, colNames=FALSE) ## write data.frame ## rule is a vector or colours of length 2 or 3 (any hex colour or any of colours()) ## If rule is NULL, min and max of cells is used. Rule must be the same length as style or NULL. conditionalFormatting(wb, "colourScale", cols=seq_len(ncol(df)), rows=seq_len(nrow(df)), style = c("black", "white"), rule = c(0, 255), type = "colourScale") setColWidths(wb, "colourScale", cols = seq_len(ncol(df)), widths = 1.07) setRowHeights(wb, "colourScale", rows = seq_len(nrow(df)), heights = 7.5) ## Databars writeData(wb, "databar", -5:5) conditionalFormatting(wb, "databar", cols = 1, rows = 1:12, type = "databar") ## Default colours saveWorkbook(wb, "conditionalFormattingExample.xlsx", TRUE) openXL(wb) ``` ## Numeric Formatting numeric columns styling can be set using the numFmt parameter in createStyle or a default can be set with, for example, options("openxlsx.numFmt" = "#,#0.00") ```{r include = TRUE, eval = FALSE, highlight = TRUE} options("openxlsx.numFmt" = NULL) wb <- createWorkbook() addWorksheet(wb, "Sheet 1") df <- data.frame(matrix(12.987654321, ncol = 7, nrow = 5)) ## data.frame to write df[ ,6:7] <- df[ ,6:7]*1E6 ## Set column 1 class to "comma" to get comma separated thousands class(df$X1) <- "comma" writeData(wb, 1, df) s <- createStyle(numFmt = "0.0") addStyle(wb, 1, style = s, rows = 2:6, cols = 2, gridExpand = TRUE) s <- createStyle(numFmt = "0.00") addStyle(wb, 1, style = s, rows = 2:6, cols = 3, gridExpand = TRUE) s <- createStyle(numFmt = "0.000") addStyle(wb, 1, style = s, rows = 2:6, cols = 4, gridExpand = TRUE) s <- createStyle(numFmt = "#,##0") addStyle(wb, 1, style = s, rows = 2:6, cols = 5, gridExpand = TRUE) s <- createStyle(numFmt = "#,##0.00") addStyle(wb, 1, style = s, rows = 2:6, cols = 6, gridExpand = TRUE) s <- createStyle(numFmt = "$ #,##0.00") addStyle(wb, 1, style = s, rows = 2:6, cols = 7, gridExpand = TRUE) ## set a default number format for numeric columns of data.frames options("openxlsx.numFmt" = "$* #,#0.00") writeData(wb, 1, x = data.frame("Using Default Options" = rep(2345.1235, 5)), startCol = 9) setColWidths(wb, 1, cols = 1:10, widths = 15) ## Using default numFmt to round to 2 dp (Any numeric column will be affected) addWorksheet(wb, "Sheet 2") df <- iris df[, 1:4] <- df[1:4] + runif(1) writeDataTable(wb, sheet = 2, x = df) writeData(wb, sheet = 2, x = df, startCol = 7) writeData(wb, sheet = 2, x = df, startCol = 13, borders = "rows") ## To stop auto-formatting numerics set options("openxlsx.numFmt" = NULL) addWorksheet(wb, "Sheet 3") writeDataTable(wb, sheet = 3, x = df) openXL(wb) ``` ```{r cleanup, eval = FALSE, include = FALSE} xlsx_files <- dir(pattern = "*.xlsx") unlink(xlsx_files) ``` openxlsx/vignettes/tableStyles.PNG0000644000176200001440000007757114155600364017030 0ustar liggesusers‰PNG  IHDR¡/Ó¶ËsRGB®ÎégAMA± üa pHYsÃÃÇo¨dIDATx^í½k°\Õ™¦y&¢g"¦çOÇÄLDOôDŒô™ˆîŠªžÏ t—Ý5U®êövwuÙ.ËeŒ1ØmŒ/€L•1Øm,0`c.%c!c6ØB ! [2BXøÈè !q1WIèº!±f;s³ríwïoí£<©µ¿ý>OæÎoíÌÔ±ý¾¹2•šr„Bé=,„B©/›ïú[÷ÀWß„ò\!„R,›ïþ;÷À×þÀ¹ßmBy.òœ!„‚…àÿú¯œ{æÓ¦,Ÿ!„B ¸|ýÿtnû§LY>§‚‡Ö­§”RJi$.—þ¡sÛþ‹)ËçT OšB!£àBð7;·õÌ$²j£»ýþî'Co_õkwÛý¿.Ž?ï{´ôÇâJqCéî}ÄÝ:ô–âúÒ›ïy¸ô‡wÿÊýð®?¸k]éM?_ç¾çÚÒ›ÎpGf> Oås*ð…ÀÒ‡&­ÉBÈäÁ…`ÉÿíÜ–¿Iòö¢¼Q¬)}ã wôèÀ× ¿ôíUîð‘7Üá׺ǺC…qq‹¿u¿Ûðu·ÿÀëîÕý÷î{õpyÛî}‡K_)ܵ÷ÛµçÛYøå+ot/®=Ř>>ž:ËçT …ÀÚ‡&­ÉBÈäÁ…àòÿ×9yž ì =À ÊÀ)EøÒ·ŠB–¢: %zü¬…=~Ö‚B‰?kÞ»wïÄ<öBp߯ݑ¢ˆ~g@Ê€ì H°Ïí -ß"x­(Rä¶² ¼öúìÛ¢|f@n+w|(\?kñeÇ^ÂM’¼ˆ>: %zü¬…=~Ö‚B‰?kè\!¿E°øÛ«Š/ô?½WÝï.øÖ}îùyÕ}îü¡ç]yŸûbáyW¬t_,½×}á›âJ÷ùËïõs—?‹ãç³_ýû5îš›rW^}ý±‚ðC“$/¢΂B‰?k@¡DŸµ P¢ÇϺWîÔ½~ä¨{]><øúåÎÀ¡ò-‚£e Xzÿ¡÷r_üüûâçõ…_¼â>wÝʃ¥×Þ;tÅAwMáç.[ᾳ※úžűnùÝÏÖíq7üàNwû÷º§WÔ½úÈ1‚ðC“$/¢΂B‰?k@¡DŸµ P¢ÇÏ:¹CPþM‚áß&(ß"(ß&8ZîHà½þ¾ƒƒBP¼ò/ /…×J8·(R®¹÷€»aÕA÷Ó_íw7ß~»åÇ?uOýîy7³öJ·wý©îè¦3àcBŽ‚ðC“æÎS§ÜÔ©w¯!úè,(”Æé¥á®ý—g»WÐm´j (”Ž‹üG7õ…ϸ¢Ûzd-(”:ä¶+¦ÜµWœ oë¤5Œ·lpû/›r‡Ïû°{Þ>†Bðãû6 vŠBà?@XzðH¹Õ?[fw»òö@¸;0(Ï]²Â}§(_Ü~ë/¹ßý°ûö·¿ãvïÞí^ޱí{ànç/Oq‡û8|LÈ‘B>?@´SSî„%O xbÉ Y°ÉBý¾f©„ÒínÿüïܵS¡á¶Uæe!hg (”J7Æý‹ÿ} <é07.YJk¡T†ìG§Ü­7yäø+7ÿó±†ï8Î×ûBðð‡‹`—pzÙÅnšqR…@Þ&Ýa(ÿ&Á#ågævæô… ,׬8P–Ù‚ëî=྿æ ûù/_t—.¹ÜmÙ²ÅíÛ·Ï­]»Îý`Ù·Üók>ìn\¸Bp EøOê¸e!˜Ñïk–J( Á­gÝ>rýÚ“¾Ì´… 5 P*ùR.w'}ø?º¯‡sã”… ´J²·ž_„õGÿÈm ޳LÀP!Øw÷›%`ù-#ÇÞ½ad®ê ÁVn(wÂ2 “൲¬,Ê€¼EP¸RŠ@Q†»Ÿ»|Å  wJ‡…@>Hø½UÝÏ~õª»âêïº+V¸û÷»M›6¹üàî¼/žëž]½Èíô4ø˜­ Á’;Ý’F·ZžÌLyÃq§;uê·dÉ©Ám2_{Bn ׄç‘Û‡§žXâN˜ráݳ„…à÷ÊY0ê?<ÛÝì Üw©_ßönÃY,­¬¡Jü)»·»3¿Pü÷yv!. Êí#;¿çμ™…@¬„RYn>Óm84l«þåÁÌG½aÜvßj½põ¹kϯ{¥²ÎïFœéîûè?wn.æÂóM¿×Ý̆çìo!¸Å(wêC=Þ=˜+  l»Ø f}‡`å#Ëà‹ß\é¾Pþ-‚â§ÿÛÿA ?åíÏ–ÞSznQ¾ô­ûÝ•7­uß»ù.·ô»7¸¸§ŸyÆÝrË-î’K.qïý‹·»gV-jõ7 Ú‚"•Ë0ž èÑB0 ñ¸0Ì–úaIðÁïÍšò',)nŠsÌ^Žoc!@;s׿éî ~´,€Y),éÖP ¥rw@Û †ý7/Ÿ=öÛ/X—vû¿¸ùöáíƒÂBPÿ{B¡4(E@—A\ôôàx\â0.o/_®7‚`~$Ì¥EÀ‹××{[|Ø»#JÀϾ}€øú°\ÌÎßrì…àÖ{7¸Á w†ß>(ß5 e@v®—· Ê‚ƒîZ¿CpÙŠ‘ÝÙy«àë7üƒ»cÍvwå·¾ívìØá^ÙµËÝqÇîÊ+¯tøÀÜ.;É=÷À‡Ýùúbð˜ó*ÃË>„G AY°†»åÒA!ÍëA–Œ‚;eG!>ïè>Yæ^ýϾÒÿa<7´Ü~Æ ¼ìå[í¬¡JQ!yñßÛðU~ùê>. êÅ+ýÍó¼o”ÖBi¶ /û ð¨, ¾Â/Í¿Œ¬‰-ïw®0ôµ · š|u¹€7»ýÛäzT†å"|«áØß2¸÷‘‘· ʯ".Ê€|±ì H|pX†oÈn@X¾}|–à€[¶ú ûîmkÝ×/»Ê}ÿ¦›Ü³¿{Ö=ðÀnéÒ¥î´ÓNs_Xüe÷ä½'»]kOq¯ÿætø˜#…àªS“¿¡P v¹>Þ0¸ÃÀO!(o/w¼Ö Áà÷RþŽB*¡T}Ë  õ ”»#…aXÊ9‚c²†J(Õí„ÇáÌàUùVÃ|n—c,Ãß „RX|HËõj!Wó±ã/åÜÈ}°¨;…ƒŠ /ž[{Ì…à–¢Hx­Ü82ûíƒòUÄòö@YÂ20´,ågŠBp÷¢ ÿŠáºƒîÖŸ®,^IÜâ~ö³Ÿ¹«®ºÊ-[¶Ì}öÙîœ/~Å}íÛËÜS÷}Èí;–¿vت CzɤwâÒÑ‹‚c(íÿò³qès‡`¼ÖP ¥šÏ„!΂³J£… P‚¼á •BníÇŽ© ï{ö~¸C0pö=ÿàsqÈ7íøÙ±îܲbý  ß&(ÿ‘¢×—ÿ.Áç/_1Rü vî¾M Ǹ¥÷ þŠá÷?æ.½ôR÷È#ëÝæÍ›ËÅ‹»SN=Ýݼêywöß]yìßTض ƒ¼|…>ÀÃcA —á¾ÿ?æBP‚¡ÊAT¶ì ‹ÃìZÿC‚tk@¡äß&)#¯êk>#0èÚíƒÒ1û‚² ó,Ãß „R¥„œ ßÁ±Ñ¹QGÂÚï(Ä… ¸žRÊs²”Îî„»¸ öAÈûà?€Xó–/ãü ‚ð_,Ü#ÿ‘"ù›ƒ2phPdw@Þ&(J€ìÈuùŒÁt?úåA·âW/º%—^ìÖ=ühY¾ý­o¹Ë.»Ì}ä”SÝwþÖ-[uÀ}ìs_;öBð­·ÇÚ‚‚òÕyÀƒÐŸÝÎ>ðço;¦BP^;ÿ K–çìI!ßQH%”ÐgFÿ&Á  ¼õ¬³‹ïøÛ‹ãr… ÝP(•úœû 8õÙÛ+a®Ü>rþ¢hÈu‚áoB©Z } „oP¼ àg·ù£‚ðm‡Áýá· %ÀϽ·˜a!ðÎ~–À„ú  <°\Þb¨)âÈß2xó Á=ë]ùï\>ø÷æþÁŠRù[ç^6øâ9߸»ü)³÷Õî›ßÿ…[vÓínéuW»åßü”ûÉw>í¶ÏüÚ­\¹Ò}ý¿~ÝvÚÇÝW¯Xî.½áÊsÿõg¾rì…àê[«/ä8â üŽBP(Ñãg (”èñ³JôøYC]!X(¹Ü|Ï÷Äà_,”ºøÜá.ÀìÎÀŠÅÏÜE×®v?]ó¬»mÙ7ÝuŸ›ûÎ…é.ûÔ»/¾ÿÿpWŸÿ.÷ý¥—»Oœùiwá×®s7?T¬»g¿ûæÏö»úËÇ^¾óÇ&¾ºØ$þ«‹åw‚B‰?k@¡DŸµ P¢ÇÏ:W~xwQ†oø2ðJQ¤ÈNÀì·J¸wð× o\sÈ]wÛ#î¶›®wW~æ-î®k?éî¿þ4wÓWßçþî#ÿÊ]ò‰7»/œñnwîù_q·¬Ùé®/ Ä•w¾æ.¿ã5·èSc(×þÉàÑy‚ÿÚavÈïDþq#ù… P¢ÇÏP(Ñãg-(”èñ³†î‚»žýÌÀ+{Jص§(ßùð`Q®-ÿZá!wç¯^uëCîs¯þ¯½Ð­øÎGÜÏ;Á}íãÿ—ûòGÿÐ}îÿÂ}á´?u7ýlC1À}ëçûÝå?Ûï.W!¸îOÿÌ®üÛû$/äw"ÿü±üŽBP(Ñãg (”èñ³JôøYCç ÁîúU¥ ìÜ=ð)å‡o|wÕAwûºCîî‡w¹SÿØý§³äÞÿ™eîoÏ;Ë]µøCîê ÿÊ}õ¬?s_üÐï»KÎùÏîæ•O•%⊟½V–Ë~:¦B°ôÏœÛV϶³Êc$#äwRünÊßQ %zü¬…=~Ö‚B‰?kè^!øù¯Ü+û¹Wö v|ØQxö¥wvŠR ÿ¦üµÂû7¾æ>sñÜ;þæîC_¸Ù}ò’;Ýg¾ö3÷ñó¿ç.»ð4wÉ'ÞZî\úåÏ»›xÕ}ë®ýå[KŠ20¶‚ïþ¹sOj É‹g¿—òw‚B‰?k@¡DŸµ P¢ÇÏ:XÖ¹K¯»ÕýÝ7ºÏ~åjwú¾^†¶÷ß¾Èö¹¯¹Ï_rµ»áǫܵ·üÒýù™·¹÷öwæÅ?wïÿÂíîgÞâ>záî“ç_ç¾pÆ{Ü>öwÉ×—¸ÏüÝî”s.9ŸxÌ…à†ïÜï>3äÅsƒßËšÞ><0…=~Ö€B‰?kA¡DŸ5H!˜¤Ç\äßxñþº é&Ÿ¼ÿî§w­pÿùܹ÷|é÷Wmrï9çgîŸþ‰ûØWé>þ•{ÝGÎüŠû/g|Ì]uÁŸ»­+>趯<žKî¯Í¿c Ž‚ïaóâÙ…ç8÷ÒgÛñ9çv}Þ¹W¾èÜžóî=Ÿ.¤þÏywñg.öò;ß…üN ×|ïåï‹BÈd8æBpdúô2œå{{ù„»ÿ¾Ÿ¸¿øôr÷® ~ãþä¼íîÏyÔý»såÞóé¢ œù=wÒ'—ºœq®»ñ²÷—Eàå_|Äí]*<ŸÜŸÜ/zî^{ôcP)‡ŠÛl:®o'xÌ…,„BH=)“<æBB!¤žÞ‚·¼å-4#I·A•‰?I·ùÉO~2QYŠºñÆi²tŸ2„¾šf A÷‘.~™“…`Xü+Tz|d!° A>²t‚c<æÂ”Bà_©ÒÉÊB`‚|d!è>/Gu±V <7‚üd!° A>²tŸŽ‚¸ O<Ѹ觡¼ÐÊýÿ‰[¶Ýsáø Áƒî)Y¸ç1w¼}žÞñ˜Û³ç­x‡{¬¼£§Üƒðúäͱlºùwåê—‡×H*,ùx| ÁîÈSîÈôðê±2}ª;|Å÷Æðê89úÃ)wø‡w¯U¯ç@‡ A] O ‚ËØŸc6¨3)µOÓV!à–ÿãñæMÃ[çËËnõ•¸c>M"ås˜Ô-0eEÁôà§ÎqoùÔ¥•ã åS_ýâDï/WËßE2õA^er(O¸¼´Ä½~^ñø¼-ÊCW Á§N¹©©)wÂ’bÉ﹩S/9Ö$š_€Bî„3ƒ5~æO܉ïû ÷Tx}¸Ã°æ3ÃuŸùÀpÍ)nÙûü¹ü.Dx~´3sa›BpÇ !‹Œ|päØžÇî(.ÿBÐüøªó£Z* Ü›ÜÍ\é&³A0xVv#Xòq\… ,rÛy'¸#/ ¯¼±ú÷úê'†×šér!8á„"̧Þãî Ž©)‚rÔ´B0Êâ…7 YB}6¤ozÇ0üçÖÌxp}õ_¸Eþååw¸5åL¨Ìûãry>;G Á0ðkr®<¼HêÁpƇ¬g{ìŽàvþCʵQ!ðÕןØtÿ– A}pW^uoº¹ø?Èáì˫ݕW®v›V_YþŸfi8+·_psqv5˜®› pp®8Ük×—÷3<^<—òñÎÝ6rÎè>¯\½ºøsˆŠQô&…<ž8˜F Á7Ýò÷Ÿã¾¼ôR÷å·ÇK¿è–ßéçåv¹Þt»¬÷× —~ɽåý»§†· Ö <å«ßœ›ë™åï"e‡`6(ýÜîÈì+ó0”£óTB{pûì+úóNuG‡·”Œ¼â/Ö­®+ƒûo.Í÷ÕéB°ä2·ä„©‘@¯ü3S^_ âãs» SG% rþ;ññðzêmÑœ”Šaé˜ÛqˆÏ saYŠç¦ŸÄÁ«ïQ} ƒ¼ÐÕ€œÒ_Ÿ+ƒ€âº\ Á\¨î¨O»C…@B³ÆÑøRâ0`Ã2PÞ4 hŸ Ã`ž»ZÜ><ï`¶ZFfÃs•÷Ïׯ/T‚;^3˜©Þç\I¨î2¯·!äqÅÁ„ AòÚíå+þ·|É=ÜŽ A0Ï‚Áï"™v… y\Š‹à|ºòŠ~.ðkç^áK*eqˆÊDDó}Uo¯ç@}!(ü‰O»¦~Ï-ybp|´ C?. Á®Ü!8R„dl6… ²ÃPw®Pð˜ å9ÉsÓ ÚŽ5t¸ÃWá>ØÃõÃ/ Äðrå•ÿl!Ø3øYÐêãÓîßP!˜ ãÀ0ËP¼²x5í" އEBvæÖÊíƒpoI„E£ r®‘’¢¯FË€ÑÀ¯>þá±ÙE“|Ëc”2„¢`Â;ÁÌH ƒÛ–Ý_XR-É´+#s#ÛúÃÛWK`–AˆGÇÊÐC!_÷–AY6 v_/ÃËS'|ºøS¾, £o)8w™;µ¶@kÆ\´· Â5u\–õþóåNš¹0µ$ïÔ¿ ì}Î>Èg© híñ)÷o©Ìw å«õx„ôH€·Çá-(_–@]?x#¯äËÇ<ºc0x|þ~ÐãÞïð¼#aÂ,\!ðÇXR=ž…`vË¿Rüm¡Ã9òÇTî«ÀB!„üàúHÀßùž‘Ý€ƒ]ƒSï\O/ß*þ9U¸3âüÀ'‹“ÄÊmÁÿìL¼&¼Þtyx®³ß1²~Íك㋖|´¼îfD_ £Ç/ÏIž›Zfƒ¹. Ó AÝü|!¨ß!xÌ=8œ¡¯=>åþ팳”Áz¥»ùfÙE¶úê9 Ó‘Û+á<¸Ï¦Wâ#%E]ž*#Ǫ÷Y2;Ssû„àA>ׂâöx‹î„´Ù!(_íãÇ[¢ÝWBP8 ÿ%ãÙ!x½ÊQõB0å¬L*¯'|¨Ð|A´í>Y¥øÛë6þÁúb^.÷ç? 8gÒã«»+…½úöŒÜ&„nœAh—³ÁíåõaøŽœg敵axG÷¥­ç…òñÏkøøêïsÈð¾®,îcîü#'áú<W!¨|† ü‘óÝy±;E>@‚àz_=Þ…À_Ž×Öÿ-€AÈÏÞî_åÃB0,Ñ.ÄÜß2ÐîËP!?$8ð5Ÿ!¾½€®Ëš©#¯% Òl!(ž[J!gß«÷„>r=.ÁÌAàξʆëâ¢àS?¸ŸÐúÇ'6Ý¿‘B0 öQ‹ ,Cm4d«Ûé«gÃY¬›-®Es£¯èGg *Ú¼^(ß2ÛƒóÌ›]7¼¡ rŸ³ ÊEã[#; Úõy 7¦ùí„ËÀ ÐÝíÌ–„Bþ-ƒT†á=»µ.Âvþ…@ˆBÝOeÁßV¼Â—ë5…@”‚šs)÷e§–;£À¿0û· FÂ?XSèÏ7õz’±V <·ÔB@'ç¼ ÁP!h'( t^¶+$GP!XHYXŽ»“+ÕWè6o='Xò‘… û°ÌW‚Î:¹B Áyü_E›ò-ø6Âäa!ÈG‚î3ùBpø°‹=¶BüÍ€Yÿ]þ­‚6·E¦‚â¹±äçä Yh޽ÐqÉBÐ}&^!;ž‚Ô0Ÿ\!çÖTèñ“…À,ùØXÿ74'k˜x!øôgÎq§~Æh!¸ú߃ô#£ÿ¸Pùwþÿƹ-㞺lðxâ;Ýš­g:WñäA˜?è¯Ì-{p®Ë>6:wÙ;go»ðæºsÈõá9Î9yxlhñ˜þö‹)=ïì¸Ï|â?ºÿõŸÍ‚â95züe!è>,ùÈ‚î3ñBð×§œê:<âßùã`G`ø |‹„qþOžåܶEÅåw¹5Û?å\­2ó§nÙ/ênóëårðŸ]4¸íÖwÞ6wŽ5Ÿ-Ê­rùãE¹ˆÎ½í¿8W<¶s?õ^÷7§½Ë}äÿß౟‡<'yn¨Ð|$ÝFBˆæc-èU*=~Ö …`’N:t¨ÊQ¸öO†EàoœûAø !üËO;÷ÌnÙ_×?÷×Î=û™ÿzæë‚c·IØç*o‹çÂëñe¿và…·ù5…Ï>]<¶¢œü—4Ø5Ç/ÏEž“<·¸B!Ĺ©ƒ¹Ø®ûÓr ÞÝüNwâûÿÒ=µ½xõýôðÕú¯ÎqîùÏ:÷ÂgÝSßz[Ì'¹5Åe¹>ê)ÅüÛܲG†×z’;ñïwOUn‹æjo‹ç"å1ý®xlRÊb0Ø1ðo'Ès’çÆB@!„T™:pð ‹}`éŸ9·­Ò[ŠB [ùOʹÛåÕ}ÈŠà}ésν,žé–} 8ö¨¿úÑA€ûÛ~ö܉_øèÜåÙÛdîD·èêâþŠÛžºº(ø+÷Tår_sså1½xnQ ŠRð»a)xª(Ûä-Ž3Ëç$Ï…€B©2uà@Q"øîŸJ@¹+0Ü¢ÿüIƒpþõçÛyêÜñóNun×€2SÌ?^÷kÞÜ6˜»ð<ÙmÛã5ÁõÇ>àùsœø·fö¾ wî(ÛKE)ƒçÎvîYy{CžÇ§Êç$Ï…€B©2µÿÀûÀ ÿ~ð*[|¾Ö‹€•Wá;‹À•ð}å‹…çefñ˜ÊbP³e˜æ®Ìv”ùÞ©½ûŠ ‘²Å  F)¥”ÒÉ)…`Å}¸§ŸýÛ»w¯Û³gÛ-îÞí^yå·k×+nçÎ]nÇŽîå—w¸_zÉ=ÿ‹në¶íe)õ‚d;Ê|ïÔžâ?bY(¥”Ò<”@—Wü{÷íkUž{þ…r]XvìÜãvîÚãvíÞWœãÕ‘ì/ •…€RJ)ÍÃq‚gŸ}ɽðü÷òŽbÝîâ\AöOíÙ[\ˆd! ”RJópœ…à‰ÍϺíO>ç^xnG±fÏHöOí.þ#–…€RJ)ÍÃqñ™§_r/íØ]œ.û§ä=„Ø´Bp¯;Oþ‘¡óï9>}ÝÉå?>ôÁë6¯8}½û`íÜfwíÉÕsSJ)¥}S+W/(½<^‚§·½à^z©(AöO½²gŸ‹=–Blc!8ÆsSJ)¥Fl*R¼)…`æñgJ·o{Þ½ð⮑ì!¸û‚r‡à¼»×ýŽAhy›/'·—çîøc'^àîÏO)¥”öȺB–ï1ù«±c+ÃË~àîó!‚O¾ÞMÏÞv²»vZÎÃJ)¥TD…•oS!Ø\”qÛ“Ï3»F²¿({‹ £Ž« v|ÈÞ¿eàwÊÛX(¥”ÒÒ¸ [_ž.ÝöäsÅÌΑìŸÚùÊ^»P…`$ôY(¥”RU´C0ß¿eðøoŸ.}rësÅí;G²ê¥{\ì¸ Áè[sŸ H.÷FÎO)¥”öÈq‚MÓO•nyâ9÷ìïvŒdÿ±‚À° ‚}îsâà„ÃÆB0w*¤”RÚg'V~÷â.›VÚ[–¾ê§”RJ“g!ظq[éãòÁ§_Éþ©¯-ù–‹[!ð“ÀË2@)¥”¶Rýž•«Ýïž{¾U!xbë¶òŸL Á7¾q}é¥ß¸Öý×o\=’ýS­]ïbj‡€RJ)¥í”@ßø›Må?,¯øS•20³åÉ‘B°âž‡Jï»ï—î5’ýS¿y|‹‹e! ”RJóP]v^}õU÷Úk¯¹¸ƒºC‡¹Ã‡»×_Ý9r¤Ö°<ôÐÆÒuë~ã6lÜ<’ýSÛžyÞÅúB@!„ãË8 Á#Ì”>öØV·yË3#Ù?õ¥Ë], !„’ã,߹毽É}çúïdÿT9ÁB@!„äÁ8 ÁsÏì(ÝùÒw`ÿ¡ò¸‡…€Bɘ, ÁÔÔTïÔx÷—VöNU'½³wj\³â}½Scñ)7ôN·ßòPïÔ8pÕÛzg w!„ÂB@!„B!„d_Ðûí^šó"Мæ¼4ç/o^ty­4çE 9/ÍyhÎ;_®zóÖŠ@s^šó"Мæ¼óåœoþëZh΋@s^šó"Мw¾,úwŸ¯æ¼4çE 9/ÍyçË\tM­4çE 9/ÍyhÎ;_ž>ã׊@s^šó"Мæ¼Mp‡€B!,„Ba! „BH !„Bò,èxÖÕ@_Üc] ôÅ=ÖÕ@_Üc] ôÅ=ÖÕ@_Üc] ôÅ=ÖɲlÞ¼¹wjlynOïÔØ»å‰Þ©ñòž'{§Æ³ÛvôN™]ûz§ÆÑ7÷΂LÔ@i] ˜ÖÕ@i] ˜ÖÕ@i] ˜Öa!ÈD ˜ÖÕ@i] ˜ÖÕ@i] ˜ÖÕ@iݘì z¿ÝÎu}^# Jô…>Þp®ëóaP¢/ôñ†s]Ÿ×ƒ}¡7œëú¼F”è }¼á\×ç5 D_èã çº>¯%úBo8×õùîd¢F”}Q# ʾ¨e_Ôƒ²/j„AÙ5 ì‹1,™¨Óº(0­«Óº(0­«Óº(0­ÃB‰(0­«Óº(0­«Óº(0­«Óº1,™¨Óº(0­«Óº(0­«Óº(0­3±Bð¥Ë], Áœ(0­«Óº(0­«Óº(0­«Óº1ã,߹毽É}çúïd«B!„L–‰íl{f·‹e! „Bò`œ…à‘Gž*}ì±ß¹Í[^É~B!$c&V.ºè"›RÐúxh΋@s^šó"Мw¾ /ôñ"Мæ¼4çE 9ï|A_èãE 9/Íyh΋@sÞù‚¾ÐÇ‹@s^šó"Мæ¼ó}¡æ¼4çE 9/Íyç úB/Íyh΋@s^šóÎô…>^šó"Мæ¼4çmbœ…àk_VúÕ¯\ê¾rÑ%#Ù?µí™Šf0*w!„<ïÁ¥=ö¤Û¼åÙ‘ìg! „B2†…€B!,„BÉ´ /î±®úâëj /î±®úâëj /î±®úâëj /î±n A&j À´® Lëj À´® Lëj À´® LëÆ°d¢ Lëj À´® Lëj À´® Lëj À´nÌ8 Á=,óW¦u5P`ZW¦u5P`ZW¦u5P`Z7&ûB€¾ÐÇÎu}^# Jô…>Þp®ëóaP¢/ôñ†s]Ÿ×ƒ}¡7œëú¼F”è }¼á\×ç5 D_èã çº>¯%úBo8×õùîd¢F”}Q# ʾ¨e_Ôƒ²/j„AÙ5 ì‹1,™¨Óº(0­«Óº(0­«Óº(0­ÃB‰(0­«Óº(0­«Óº(0­«Óº1,™¨Óº(0­«Óº(0­«Óº(0­ÃB‰(0­«Óº(0­«Óº(0­«Óº1ã,RÆR!„2YX!„ÂB@!„ô…>^šó"Мæ¼4ç/è }¼4çE 9/ÍyhÎ;_Ðúxh΋@s^šó"Мw¾ /ôñ"Мæ¼4çE 9ï|A_èãE 9/Íyh΋@sÞù‚¾ÐÇ‹@s^šó"Мæ¼ó}¡æ¼4çE 9/Íy›à!„B&WnÿÙ=.–…€BɃq‚›o¾«ôÖ[ïr?þÉÝ#Ù÷ÇY!„<g!x;_Úãì?T÷°B!“e!@À³®Æ»¿´²wj¬:é½Sãšïë‹O¹¡wj¼ý–‡z§Æ«ÞÖ;c¸C@!„B!„°B!¤€…€B!,„Ba! „BH !„BX!„’i!@_Üc] ôÅ=ÖÕ@_Üc] ôÅ=ÖÕ@_Üc] ôÅ=ÖÕ@_ÜcÝ‚LÔ@i] ˜ÖÕ@i] ˜ÖÕ@i] ˜Öa!ÈD ˜ÖÕ@i] ˜ÖÕ@i] ˜ÖÕ@iÝ‚LÔ@i] ˜ÖÕ@i] ˜ÖÕ@i] ˜Öɾ4Îu}^#5(ù®Ïk¤e8×õyÔ  çº>¯‘”á\×ç5Rƒ2œëú¼FSP†„s]ŸáA&j„AÙ5 ì‹aPöE0(û¢F”}Q# ʾÃB‰(0­«Óº(0­«Óº(0­«Óº1,™¨Óº(0­«Óº(0­«Óº(0­3±B0³e«‹e!˜S¦u5P`ZW¦u5P`ZW¦u5P`Z7fœ…`ÝÚ¥ÖO»éM3#ÙÏE ˜ÖÕ@i] ˜ÖÕ@i] ˜ÖÕ@iݘ‰í ŽÐTúDj!è©… O¤‚>‘ZúDj!è©… O°d A‚*,UXª°Ta!¨ÂB),UXª°Ta!¨ÂBP…… J' \®æ¼4çE 9/Íy=áå:€ŒÏŠ@s^šó"М漞¶…Ë‹@s^šó"М漞¶…Ë‹@s^šó"М漞¶…Ë‹@s^šó"М漞¶…Ë‹@s^šó"М漞¶…Ë‹@s^šó"Мæ¼îdJÊóåAîTáAîTáAî°d A‚*,UXª°Ta!¨ÂB),UXª°Ta!¨ÂBP……  A¦°Ta!¨ÂBP……  A‚**}SC²ojH@öM Ⱦ©!Ù75$ û¦†dߌáA¤‚>‘ZúDj!è©… O¤‚>‘Zú A¦°Ta!¨ÂBP……  A‚*,™ÂBP……  A‚*,UXªt²Èå:h΋@s^šó"М×^®# Èø<¡4çE 9/ÍyhÎëi[й¼4çE 9/ÍyhÎëi[й¼4çE 9/ÍyhÎëi[й¼4çE 9/ÍyhÎëi[й¼4çE 9/ÍyhÎëi[й¼4çE 9/ÍyhÎëáA¦¤<_îTáAîTáAîTá A°Ta!¨ÂBP……  A‚*,™ÂBP……  A‚*,UXª°d A‚*,UXª°Ta!¨Ò©BÐ75$ û¦†dßÔ€ì›}SC²ojH@ö͘‰‚™-[],w¤‚>‘ZúDj!è©… O¤‚>‘ZúÄB‚uk7–nX?í¦7ÍŒdë‚>ÁBP……  A‚*,UXª×‚áÏX°Ta!¨ÂBP……  A‚*,r¹Nšó"Мæ¼4çõ„—ë2>O(Íyh΋@s^šózÚt./Íyh΋@s^šózÚt./Íyh΋@s^šózÚt./Íyh΋@s^šózÚt./Íyh΋@s^šózÚt./Íyh΋@s^šóz¸C))Ï—;U¸CP…;U¸CP…;U¸CÀB,UXª°Ta!¨ÂBP……  A¦°Ta!¨ÂBP……  A‚*,™ÂBP……  A‚*,UXªtªôM Ⱦ©!Ù75$ û¦†dßÔ€ì›}3†;ZúDj!è©… O¤‚>‘ZúDj!è,™ÂBP……  A‚*,UXª°d A‚*,UXª°Ta!¨ÒÉB —ëD 9/Íyh΋@s^Ox¹Ž0 ãó„"Мæ¼4çE 9¯§m!@çò"Мæ¼4çE 9¯§m!@çò"Мæ¼4çE 9¯§m!@çò"Мæ¼4çE 9¯§m!@çò"Мæ¼4çE 9¯§m!@çò"Мæ¼4çE 9¯‡;™’ò|¹CP…;U¸CP…;U¸CP…;,YÀBP……  A‚*,UXª°d A‚*,UXª°Ta!¨ÂB),UXª°Ta!¨ÂBP…… J§ AßÔ€ì›}SC²ojH@öM Ⱦ©!Ù7c²,„B™,,„B™\!˜Ù²ÕŲB!y0ÎB°níÆÒ ë§Ýô¦™‘ìç!„’1Û!þ…€BÉB!„°B!„…€B!YôÅ=ÖÕ@_Üc] ôÅ=ÖÕ@_Üc] ôÅ=ÖÕ@_Üc] ôÅ=Öɶ´¡ó)Ò‡ù”€ éÃ|J@†ôa>% Cú0Ÿ!}˜GÙ„Åy‚r˜ïCÀ‡¤Ì÷!àCRæûð!)ó}ø”ù>|Hʼŀoͳ$Ã|>$e¾’2߇€I™ïCÀ‡¤Ì÷!àCRæ-|h>ûB —ëôÄ—ëôÄ—ëôÄ—ëôÄ—ëô„—ë2>O¨ÇÒ|a@¢sy=–æëËë±4_Gè\^¥ù:€Dçòz,Í×$:—×ciÞÂr˜O È>̧dHæS2¤ó)Ò‡ù”€ éÃ< È&,γ$Ã|>$e¾’2߇€I™ïCÀ‡¤Ì÷!àCRæ-|hž… æûð!)ó}ø”ù>|HÊ|>$e¾’2o1à›@ó, ä0߇€I™ïCÀ‡¤Ì÷!àCRæûð!)ó}ø”y‹ßšÏ¶ôM Ⱦ©!Ù75$ û¦†dßÔ€ì›}3&ÛB°yóæd-ÌkH@nynO²æ5$ ÷ny"Y ó/ïy2Y óÏnÛ‘¬…y È™]û’µ0¯!yôÅÍÉZ˜a!Hpó¯Sæ5,<:^§ÌkXxt¼N™×°ðèx2¯a!àÑñ:e^ÃBÀ£ãuÊ| A‚“˜×°ðèx2¯a!àÑñ:e^ÃBÀ£ãuʼ†…€GÇë”y Ž×)ó¯Sæc²/r¹Îp¦ëóa Æç µëóa ¢syÃ@íú¼F¨è\Þ0P»>¯*:—7 Ô®Ïk„ŠÎå µëóa ¢syÃ@íú|ÌÄ ÁÌ–­.–;e^# Ô-Ìk„š¢…y0PS´0¯jŠæ5Â@MѼF¨)Z˜g!X·vcé†õÓnzÓÌHöó-ƒe^ÃBÀ£ãuʼ†…€GÇë”y Ž×)ó¯Sæ5,<:^§ÌkXxt¼N™™ØÁðç,e^ÃBÀ£ãuʼ†…€GÇë”y Ž×)ó¯Sæ5,<:^§ÌkXxt¼N™a!Hpó¯Sæ5,<:^§ÌkXxt¼N™×°ðèx2¯a!àÑñ:e^ÃBÀ£ãuÊ|L¶… ojH@öM Ⱦ©!Ù75$ û¦†dßÔ€ì›1Ù‚6ôa>% Cú0Ÿ!}˜O È>̧dHæS2¤ó( ›°8ÏB@ó}ø”ù>|HÊ|>$e¾’2߇€I™·ðM y‚r˜ïCÀ‡¤Ì÷!àCRæûð!)ó}ø”ù>|HʼŀoÍg_äržøržøržøržøržðra@Æç õXš¯# Ht.¯ÇÒ|a@¢sy=–æëËë±4_Gè\^¥ù:€Dçòz,Í{¸C@ó)Ò‡ù”€ éÃ|J@†ôa>% Cú0Ÿ!}˜GÙ„Åy‚r˜ïCÀ‡¤Ì÷!àCRæûð!)ó}ø”ù>|Hʼŀoͳ$Ã|>$e¾’2߇€I™ïCÀ‡¤Ì÷!àCRæ-|hž… æûð!)ó}ø”ù>|HÊ|>$e¾’2o1à›@óÙ‚¾©!Ù75$ û¦†dßÔ€ì›}SC²oÆd[ÐWüÖia^C}Åoæ5$ ÑWüÖia^C}Åoæ5$ ÑWüÖia^C}Åoæ5$ ÑWüÖia>†… ÁIÌkXxt¼N™×°ðèx2¯a!àÑñ:e^ÃBÀ£ãuʼ†…€GÇë”y Ž×)ó1, Nb^ÃBÀ£ãuʼ†…€GÇë”y Ž×)ó¯Sæ5,<:^§ÌkXxt¼N™É¾Èå:Ù®Ïk„Ÿ'4 Ô®Ïk„ŠÎå µëóa ¢syÃ@íú¼F¨è\Þ0P»>¯*:—7 Ô®Ïk„ŠÎå µëó1Ü!Hpóa ¦ha^# Ô-Ìk„š¢…y0PS´0¯jŠæ5Â@MÑÂ| A‚“˜×°ðèx2¯a!àÑñ:e^ÃBÀ£ãuʼ†…€GÇë”y Ž×)ó¯Sæc&Vf¶lu±,e^ÃBÀ£ãuʼ†…€GÇë”y Ž×)ó¯Sæ5,<:^§ÌkXxt¼N™g!X·vcé†õÓnzÓÌHös‡ A™×°ðèx2¯a!àÑñ:e^ÃBÀ£ãuʼ†…€GÇë”y Ž×)ó¯Sæc&¶C0ü9BS!è›}SC²ojH@öM Ⱦ©!Ù75$ ûfL¶…  }˜O È>̧dHæS2¤ó)Ò‡ù”€ éÃ< È&,γ$Ã|>$e¾’2߇€I™ïCÀ‡¤Ì÷!àCRæ-|hž… æûð!)ó}ø”ù>|HÊ|>$e¾’2o1à›@óÙ¹\§'¾\§'¾\§'¾\§'¾\§'¼\GñyB=–æëËë±4_Gè\^¥ù:€Dçòz,Í×$:—×ci¾Ž0 ѹ¼Kóî$Ã|J@†ôa>% Cú0Ÿ!}˜O È>̧dHæQ@6aqž… æûð!)ó}ø”ù>|HÊ|>$e¾’2o1à›@ó, ä0߇€I™ïCÀ‡¤Ì÷!àCRæûð!)ó}ø”y‹ßšg!H ‡ù>|HÊ|>$e¾’2߇€I™ïCÀ‡¤Ì[ ø&Ð|¶… ojH@öM Ⱦ©!Ù75$ û¦†dßÔ€ì›1YB!„LB!„°B!„…€B!Y‚Ý{_£”RJéq”…€RJ)¥,”RJ)e! ”RJiáÄ ÁÌ–­.–…€RJ)ÍÃq‚uk7–nX?í¦7ÍŒd?w(¥”ÒŒØÁðçi…à^wÞ‰'ºÅ“¯wÓÁmÓ×<8~âîîà¸æ`ÝÉîÚé¹s|ðºÍp–RJ)íƒÝ*ïŸ!@·SJ)¥}³;…àä“Ý‹Ÿ³¯äï¾  õž‚òxµ(Ìí&x‡…`8ÞÝÑåÙ5£s,‡?ǯ»~®”œïàþ)¥”ÒÚBpþõîZ ÿáÛwŸ?¸|­üôÁ?è~]Ô>ÌË2±ypžy‚Aðû݉ÁýrÇRJi×íP!¸7ÞÁ1 ø²Œ³\,JÃÝQ`£ OÞ!KŰœøûõë(¥”Ò®Ù©B°{úúÁÛå¶ý ¨ÃB0¸<üÞ‘`¯³PJ)¥+³Ûýsa‚ÑÐ.®âÚJÐ7¼eà ÇpýHÁ`! ”RjØŽ‚âzú#… Ð‡³×‡ô`n`¸Ã0Zô9J)¥í@! ”RJéBËB@)¥”RJ)¥”²PJ)¥´0‹B@0û·]ëö¬{oï•?B! A¦ø2pôÐ ½—¥€B‚LÙó«¿tGþnடö×áŸüyBY8X2¥,žvGwü°ð=¶xþÅŸ !„,,Y‚©©©Þ³÷Wÿ¹ÂmîèKß+¼Á]ùÓßöNyÞåó/þäÏ#fæª+z§Æƒ¿½¦wjܾô½Sãòõ[z§Æáû¿Ñ;cX21fïÃáŽîÒ}áZwôÅkÊ€|÷—VöƲÏ»|þÅŸƒüyÄH@®:é½1µ\³â}½1µ,>å†Þ˜ZÞ~ËC½1µ¸êm½ñ¸‚™-[], Áœ1{×K!ØRâUîèóWö³Ï»|þÅŸƒüyİTa!¨ÂBP……  Áx ÁºµK7¬ŸvÓ›fF²Ÿ;Š1ûùOîèk3E(^îŽ>·¤Ÿ… xÞåó/þäÏ#†…  A‚*,UX:ð–Aá\×çcömøEnvG÷uwôÙ¯‚&ÂPíò|YŠç]>ÿâÏAþsq?wŠç]>ÿâÏAþó•žî|eðü‹?ùóˆáAîTáAîTáß2È‚*,UXª°Ta!¨ÂBP…… SXª°Ta!¨ÂBP……  A‚La!¨ÂBP……  A‚*,U:Uúf *}3¥ôM Ⱦ©!Ù75$ û¦†dߌɶ ¯øµjj!@_ñkÕÔB€¾âת©…}ůUS úŠ_«¦ô¿VM-è+~­ÊB©,UYª²Te!¨ÊBP•… * A¦²Te!¨ÊBP•… * AU‚ª,r¹Î0T»wYá’~îÏ»|þÅŸƒüyÄp‡  wªp‡  wªp‡`‚…`fËVËB0‚ß¼ÛÝ¿Å}áÛ…W/X!¸âŠ+ÜßþíߺsÎ9‡vXùÊï’…  A‚*,ã-ëÖn,ݰ~ÚMošÉ~î4 Á´‚mîèKßsG_^¶ …@äž{î^#]G~—ò;í,UXª°T9®;ß#° €…`SQ<ãŽîüqáí RäU¥ç7Þ ÖþNû A‚*,U:UúfÌþMïrG¾àŽî¾ÏÝsYÆ­l59ò5¤üN%$û¤†dßÔ€ì›}3&ËB@ŠBðÛ¢Þ厾úˆ;úÚ£îèþîèß%aSáo 7»£‡ŽM ×_?J )¿ÓC»Ã‡ä¸GÝGçv!¤ ‚LÙÿø;ÝÑ×÷<ødà…åÏmo?f%<>B )¿ÓÝ»ö¹W÷îw*þGztøß(Bi†… S½p¥Û¿ù$wôÈk…û ‹bptwá®Â…; _>&ËW“Å+IjGùÊÿ_~¡øuQ d§€BR`!ȘÃÏ_á<þöSÂãÀש!}!wïÜWüùðð¿M„Ò A‘ðØ¿ÿpàƒî’w¼Ã½cÄOºåO„3¡2_w{Óm5®þ¸ß”󴽯áó¼äÁÊmO,ÿ¤òœ‘áýË对ÕpîØ\}‰ÿ³Á] Á®—÷¸ƒX!i°ô ×^;\S„Ú'Š€C·…6Í¥žcè7¹OÀù”󴼯r^‚µî‘ãÛÜòOÈñ6çÛÞÿ<,þ|–¯ö×ëï/,舄R A‘ðxõÕCÀAàÜXÎàú6wãs¯NϸqÛèÜs¯ì/YUw¹><Ç%k†Ç‹À;£èU#ǃ5…gܸ¦|³÷±ª¸ß3nrO´½¯áü%—|"x.…Åùθñ¦Äs…Ç¿¬ Kxß&aðܶ¹U~>æPù}„ç“…€2_XzŒ„ÇÞ½kÜÅEX-{¼î¶¯ºûf/vñšÁm÷}µ´ð¶¹sÜwñ;ÜÅ÷Éå'ݲ"Ìй_6ÇÁœwô<åÌðþäòËž¬Ìè÷å狟E¡x|xü¾‹‡ÇÎ%Ç÷]\/Ÿ·¿-\?z®êmÃs<.ehx?åeÿgX£Ü_ð¸CY!ó%ËB€¾¸§É¶kr›5Þý¥•­LY#á±gÏàj÷•"¸¾÷ÛàXzÃW°³·Åsáõø²_;ð+÷ù5±ÃÙ3¾ï~;{=¸ß~ßQÞ¶Å}¯èùÝ×Üü}_Þ.çýÊê‘ÛêÏÎÄ×ë.§ÎÅkb›o—ßé5·9ð'wßùù‡Ü5+ÞW«€Ž×™Û¼¨±ø”ZÙvMnó¢ÆÛoy¨•m×ä6/j¸êm­l»&·y1†… Á…ž5P 7™²FÂc÷îýÀaèl^_yIÐËݦÊmÑ\ímñœæEØá»R.Çkå¶âúÊåE1HyLÈ`fSqž¢lúÞ'ÀýÕ+>^·f>sñšÐ¦Û²TAÙdÛ5¹Í‹(0›l»&·yQf“m×ä6/ư$¸Ðó¢ ô&SÖHxìÚµ¸Ú]TÏ ÓÃë÷…à¢Õs—go“¹w¸Óox¢¼mú†O¸wœ¾ÜMWÎñ„»áô¹9ÝÁüE÷Êåè±Êý\tÑ%ÁùÚÞW<ÿ wúEmwt¼òg2º~ð<šæê.‡Ö•…  Ì&Û®Ém^Ô@ÙdÛ5¹Í‹(0›l»&·y1†… Á…ž5P 7™²FÂcçÎ×€ƒðùîtx}¸m^ñÜmƒ¹‹.¼÷/a7º&¸>½ÜîÏñŽKÜŠÙûB·Äß¶â¢Á±Ó¿ûÄàØŠA°Îû¾âùâ|³çN=Wxü™„ç¬mš«»<çôwýŸ±·:#²TAÙdÛ5¹Í‹(0›l»&·yQf“m×ä6/Æd_šgº<¯Í a7Îhó;v¼Ú9[z†{Çé7ºÇÀm}7,舞0LS‚5×ymNH Êp¦ËóÚœ”áL—çµ9¡)(C™.Ï£9î$¸Ðó¢†÷TSÖHx¼ôÒ«ò ÷÷—WÇg¸¿ßˆn§Ü!¨eŠm×ä6/j„A™bÛ5¹Í‹aP¦ØvMnób A‚ =/j @o2e„Ç‹/d!¨‚³É¶kr›5P`6ÙvMnó¢ Ì&Û®Ém^Œa!Hp¡çE èM¦¬‘ðxá…½Ô,UP`6ÙvMnó¢ Ì&Û®Ém^Ô@ÙdÛ5¹Í‹1+3[¶ºX‚95P 7™²fñâ ݳÏî.}þù=´ÃúߣüNYFAÙdÛ5¹Í‹(0›l»&·yQf“m×ä6/ÆŒ³¬[»±tÃúi7½if$ûaâÕ2.½ô2wë­? Úmåw)¿Ó¦fN!uLl‡`øs„ºB°|ùòV¶]“Û¼¨q×Ã϶2uˆ¼ª”­fÚ]åw(¿Ëµî™õ‘é{Üož¼×=þl½:^gnó¢ÆÃ«fZÙvMnó¢ÆÏŸ|¡•m×ä6/j™¾£•m×ä6/ư$¸Ðó¢ ó&Û®îüåSîŽ5[Üí+W•_4:^gÛyÑÿªÎÇ~tg+Û®Ém^”5M†…`Ão‹B°m Q¯€Ž×™Û¼¨³É¶kr›5P`6ÙvMnó¢ Ì&Û®Ém^Œa!Hp¡çE âM¶]#H!øÙ?<é~rÿfСò‹FÇël;/úÿBÕ‰³É¶kr›eM“¾ <¼ñn÷ë™nš…f“m×ä6/j Àl²íšÜæE ˜M¶]“Û¼“}!@Àó†aÚåy¿¦‰0¼Ñ¹¼aÀ·ÿùºgÜ¿ØîþÇò?¹ú?ÿ3÷Ïþéÿæþ×ÿåM#þtÕ¥òKö—ã™ÐùÎû5Mn¾íÎYѹ¼~&\ƒæ¼¹Îû5M®ÿÍ=næ{Ê2ðÿûÿÁý£ôßÂß{¦þ2šóæ:ï×4%:—7 Ó.Ïû5M„A‰Îå ôËó~MaP¢syÃ0íò¼_‚z^ÔðÁjÛ5åü¯ž”‚_>5ëÏŠ‚€”_0:^gÛyQÖ4¹ýŽ;[ÙvMnó¢¬iR>3 oÈÎÀ¦§ïu¿- Ã3V@ÇëÌm^Ôƒ2Ŷkr›5 L±íšÜæE0(Sl»&·y1†… Á…ž5Pˆ7ÙvMnó¢Æswý¼•m×ä6/j Àl²íšÜæE ˜M¶]“Û¼¨³É¶kr›5P`6ÙvMnób A‚ =/j Àl²íšÜæE ˜M¶]“Û¼¨³É¶kr›5P`6ÙvMnó¢ Ì&Û®Ém^Ô@ÙdÛ5¹Í‹1, .ô¼¨³É¶kr›5P`6ÙvMnó¢ Ì&Û®Ém^Ô@ÙdÛ5¹Í‹(0›l»&·yQf“m×ä6/ÆdY!„2Y²,›7oneÛ5¹Í‹[žÛÓʶkr›5öny¢•m×ä6/j¼¼çÉV¶]“Û¼¨ñì¶­l»&·yQcf×¾V¶]“Û¼¨qôÅÍ­l»&·y1†… Á…ž5P`6ÙvMnó¢ Ì&Û®Ém^Ô@ÙdÛ5¹Í‹(0›l»&·yQf“m×ä6/j Àl²íšÜæÅ‚z^Ô@ÙdÛ5¹Í‹(0›l»&·yQf“m×ä6/j Àl²íšÜæE ˜M¶]“Û¼¨³É¶kr›c²/苼a˜vyÞ¯i" Jt.o¦]ž÷kšƒË†i—çýš& Dçò†aÚåy¿¦‰0(ѹ¼a˜vyÞ¯i" Jt.o¦]ž÷kšƒË†i—çýšî$¸Ðó¢F”)¶]“Û¼¨eŠm×ä6/j„A™bÛ5¹Í‹aP¦ØvMnó¢F”)¶]“Û¼¨eŠm×ä6/ư$¸Ðó¢ Ì&Û®Ém^Ô@ÙdÛ5¹Í‹(0›l»&·yQf“m×ä6/j Àl²íšÜæE ˜M¶]“Û¼ÃBàBÏ‹(0›l»&·yQf“m×ä6/j Àl²íšÜæE ˜M¶]“Û¼¨³É¶kr›5P`6ÙvMnób A‚ =/j Àl²íšÜæE ˜M¶]“Û¼¨³É¶kr›5P`6ÙvMnó¢ Ì&Û®Ém^Ô@ÙdÛ5¹Í‹1YB!„L–‰‚™-[]l]!@_íÛdÛ5¹Í‹è«}›l»&·yQ}µo“m×ä6/j ¯öm²íšÜæE ôÕ¾M¶]“Û¼¨¾Ú·É¶kr›5ÐWû6ÙvMnóbÌ8 ÁºµK7¬ŸvÓ›fF²¿Õ Ì&Û®Ém^Ô@ÙdÛ5¹Í‹(0›l»&·yQf“m×ä6/j Àl²íšÜæE ˜M¶]“Û¼¨³É¶kr›c&¶C0ü9 Áœ(0›l»&·yQf“m×ä6/j Àl²íšÜæE ˜M¶]“Û¼¨³É¶kr›5P`6ÙvMnóbLö…}±‚7 Ó.Ïû5M„A‰Îå ôËó~MaP¢syÃ0íò¼_ÓD”è\Þ0L»<ï×4%:—7 Ó.Ïû5M„A‰Îå ôËó~MaP¢syÃ0íò¼_‚z^Ôƒ2Ŷkr›5 L±íšÜæE0(Sl»&·yQ# ÊÛ®Ém^Ôƒ2Ŷkr›5 L±íšÜæÅ‚z^Ô@ÙdÛ5¹Í‹(0›l»&·yQf“m×ä6/j Àl²íšÜæE ˜M¶]“Û¼¨³É¶kr›cX\èyQf“m×ä6/j Àl²íšÜæE ˜M¶]“Û¼¨³É¶kr›5P`6ÙvMnó¢ Ì&Û®Ém^Œa!Hp¡çE ˜M¶]“Û¼¨³É¶kr›5P`6ÙvMnó¢ Ì&Û®Ém^Ô@ÙdÛ5¹Í‹(0›l»&·y1&ËB@!„É’e!@_íÛdÛ5¹Í‹è«}›l»&·yQ}µo“m×ä6/j ¯öm²íšÜæE ôÕ¾M¶]“Û¼¨¾Ú·É¶kr›5ÐWû6ÙvMnób A‚ =/j Àl²íšÜæE ˜M¶]“Û¼¨³É¶kr›5P`6ÙvMnó¢ Ì&Û®Ém^Ô@ÙdÛ5¹Í‹1, .ô¼¨³É¶kr›5P`6ÙvMnó¢ Ì&Û®Ém^Ô@ÙdÛ5¹Í‹(0›l»&·yQf“m×ä6/Æd_Ð+xÃ0íò¼_ÓD”è\Þ0L»<ï×4%:—7 Ó.Ïû5M„A‰Îå ôËó~MaP¢syÃ0íò¼_ÓD”è\Þ0L»<ï×4%:—7 Ó.Ïû5!Ü!Hp¡çE0(Sl»&·yQ# ÊÛ®Ém^Ôƒ2Ŷkr›5 L±íšÜæE0(Sl»&·yQ# ÊÛ®Ém^Œa!Hp¡çE ˜M¶]“Û¼¨³É¶kr›5P`6ÙvMnó¢ Ì&Û®Ém^Ô@ÙdÛ5¹Í‹(0›l»&·y1†… Á…ž5P`6ÙvMnó¢ Ì&Û®Ém^Ô@ÙdÛ5¹Í‹(0›l»&·yQf“m×ä6/j Àl²íšÜæÅ‚z^Ô@ÙdÛ5¹Í‹(0›l»&·yQf“m×ä6/j Àl²íšÜæE ˜M¶]“Û¼¨³É¶kr›cX\èyQf“m×ä6/j Àl²íšÜæE ˜M¶]“Û¼¨³É¶kr›5P`6ÙvMnó¢ Ì&Û®Ém^ŒÉ²B!d²°B!dr…`fËVËB@!„äÁ8 ÁºµK7¬ŸvÓ›fF²Ÿ;„BHÆLl‡`øsB!$X!„ÂB@!„B!„dYпÐd] ´Æºhu5Ðëj 5ÖÕ@k¬«ÖX7†… 5Þý¥•½ScÕIïì׬x_ïÔX|Ê ½Sãí·<Ô;5\õ¶ÞÃB‰(0­«Óº(0­«Óº(0­«Óº1,™¨Óº(0­«Óº(0­«Óº(0­“}!h"œëú¼FjP†s]Ÿ×H Êp®ëó©AÎu}^#5(ù®Ïk¤e8×õy¦  çº>ÂLÔƒ²/j„AÙ5 ì‹aPöE0(û¢F”}1†… 5P`ZW¦u5P`ZW¦u5P`ZW¦ucX2Q¦u5P`ZW¦u5P`ZW¦u5P`Z7†… 5P`ZW¦u5P`ZW¦u5P`ZW¦ucX2Q­±®Zc] ´Æºhu5Ðëj 5ÖɶlÞ¼9Y óhu5Ðëj 5ÖÕ@k¬«ÖXW­±n A‚“˜×@묫ÖXW­±®Zc] ´ÆºhucXœÄ¼Zg] ´Æºhu5Ðëj 5ÖÕ@k¬“}!Ëu†3]Ÿ×ð³©ç´0¯΢syù®Ïk„³è\Þp®ëóá,:—7œëú¼F8‹Îå çº>¯΢syù®ÏÇL¬ÌlÙêb¹C0Pæ5Ð:ëj 5ÖÕ@k¬«ÖXW­±®Zcݘq‚uk7–nX?í¦7ÍŒd?ß2hPæ5Ð:ëj 5ÖÕ@k¬«ÖXW­±®Zcݘ‰í ŽÀB0Pæ5Ð:ëj 5ÖÕ@k¬«ÖXW­±®ZcÝ‚'1¯ÖYW­±®Zc] ´Æºhu5ÐëÆd[ú¦úeZW­±®Zc] ´Æºhu5ÐëÆd[ÚзyB!dܰ$Ûw×Ï“µ0¯!ùø³÷&ka^CòáU3ÉZ˜×€üù“/$ka^CòÈôÉZ˜a!Hpó¯Sæ5,<:^§ÌkXxt¼N™×°ðèx2¯a!àÑñ:e^ÃBÀ£ãuÊ| A‚“˜×°ðèx2¯a!àÑñ:e^ÃBÀ£ãuʼ†…€GÇë”y Ž×)ó¯Sæc²/r¹Îp¦ëóa Æç µëóa ¢syÃ@íú¼F¨è\Þ0P»>¯*:—7 Ô®Ïk„ŠÎå µëóa ¢syÃ@íú| wœÄ¼F¨)Z˜×5E óa ¦ha^# Ô-Ìk„š¢…y0PS´0ÃBà$æ5,<:^§ÌkXxt¼N™×°ðèx2¯a!àÑñ:e^ÃBÀ£ãuʼ†…€GÇë”ù‚'1¯a!àÑñ:e^ÃBÀ£ãuʼ†…€GÇë”y Ž×)ó¯Sæ5,<:^§Ìǰ$8‰y Ž×)ó¯Sæ5,<:^§ÌkXxt¼N™×°ðèx2¯a!àÑñ:e>&ÛBÐ75$ û¦†dßÔ€ì›}SC²ojH@ö͘l úŠß:-ÌkH@¢¯ø­Ó¼†$úŠß:-ÌkH@¢¯ø­Ó¼†$úŠß:-ÌkH@¢¯ø­Ó¼†$úŠß:-ÌÇL¬ÌlÙêbYʼ†…€GÇë”y Ž×)ó¯Sæ5,<:^§ÌkXxt¼N™×°ðèx23ÎB°níÆÒ ë§Ýô¦™‘ìçAƒ2¯a!àÑñ:e^ÃBÀ£ãuʼ†…€GÇë”y Ž×)ó¯Sæ5,<:^§ÌÇLl‡`øs„”B —ë gº>¯j|žÐ0P»>¯*:—7 Ô®Ïk„ŠÎå µëóa ¢syÃ@íú¼F¨è\Þ0P»>¯*:—7 Ô®ÏÇd_R´0¯jŠæ5Â@MѼF¨)Z˜×5E óa ¦ha^# Ô-Ìǰ$8‰y Ž×)ó¯Sæ5,<:^§ÌkXxt¼N™×°ðèx2¯a!àÑñ:e>†… ÁIÌkXxt¼N™×°ðèx2¯a!àÑñ:e^ÃBÀ£ãuʼ†…€GÇë”y Ž×)ó1, Nb^ÃBÀ£ãuʼ†…€GÇë”y Ž×)ó¯Sæ5,<:^§ÌkXxt¼N™É¶ôM Ⱦ©!Ù75$ û¦†dßÔ€ì›}3&ÛB€¾â·N óè+~ë´0¯!‰¾â·N óè+~ë´0¯!‰¾â·N óè+~ë´0¯!‰¾â·N ó1, Nb^ÃBÀ£ãuʼ†…€GÇë”y Ž×)ó¯Sæ5,<:^§ÌkXxt¼N™a!Hpó¯Sæ5,<:^§ÌkXxt¼N™×°ðèx2¯a!àÑñ:e^ÃBÀ£ãuÊ|Lö…@.×Ît}^# Ôø<¡a v}^# Tt.o¨]Ÿ×Ëj×ç5Â@Eçò†Úõy0Pѹ¼a v}^# Tt.o¨]ŸáA‚“˜×5E óa ¦ha^# Ô-Ìk„š¢…y0PS´0¯jŠæcXœÄ¼†…€GÇë”y Ž×)ó¯Sæ5,<:^§ÌkXxt¼N™×°ðèx2ÃBà$æ5,<:^§ÌkXxt¼N™×°ðèx2¯a!àÑñ:e^ÃBÀ£ãuʼ†…€GÇë”ù‚'1¯a!àÑñ:e^ÃBÀ£ãuʼ†…€GÇë”y Ž×)ó¯Sæ5,<:^§ÌÇd[ú¦†dßÔ€ì›}SC²ojH@öM Ⱦ“m!@_ñ[§…y Hô¿uZ˜×€D_ñ[§…y Hô¿uZ˜×€D_ñ[§…y Hô¿uZ˜×€D_ñ[§…ù‚'1¯a!àÑñ:e^ÃBÀ£ãuʼ†…€GÇë”y Ž×)ó¯Sæ5,<:^§Ìǰ$8‰y Ž×)ó¯Sæ5,<:^§ÌkXxt¼N™×°ðèx2¯a!àÑñ:e>fb…`fËV›RäráL×ç5Â@Ïj×ç5Â@Eçò†Úõy0Pѹ¼a v}^# Tt.o¨]Ÿ×Ëj×ç5Â@Eçò†Úõù˜q‚uk7–nX?í¦7ÍŒd?w”y0PS´0¯jŠæ5Â@MѼF¨)Z˜×5E óa ¦ha>fb;ß#° ”y Ž×)ó¯Sæ5,<:^§ÌkXxt¼N™×°ðèx2¯a!àÑñ:e>†… ÁIÌkXxt¼N™×°ðèx2¯a!àÑñ:e^ÃBÀ£ãuʼ†…€GÇë”y Ž×)ó1, Nb^ÃBÀ£ãuʼ†…€GÇë”y Ž×)ó¯Sæ5,<:^§ÌkXxt¼N™É¶ôM Ⱦ©!Ù75$ û¦†dßÔ€ì›}3&ËB@!„ÉÂB@!„B!„°B!¤ ‹B°{ïk”RJ)=޲PJ)¥”…€RJ)¥,”RJ)-d! ”RJ) ¥”RJ»P¦¯w<ñDwbèÉ×»i4ÛäÝ”kÏ»ÜF)¥”öÜ΂^·yäzëRÀB@)¥”ÖÚ½BP8}ÝÉsáï œï`nX^àî ¿m>; ”RJ©A;Yà1„þìÌìm÷ºóŠŸeI×RJ)¥=vb…`fËV;¾BàC~`y<,2ã ÂÉÁî‚?¥”RÚsÇYÖ­ÝXºaý´›Þ43’ý ð–ÁÉîÚé¹·ÂÐT¼áù(¥”Ò¾;±‚áÏæU†×ýgî>_~°ýÊA\λ{³»ödY3(³÷C)¥”öØÎÿʾÔp0ºÝ¿Ð\Â5ü¥”R*æ_(¥”Rºà²PJ)¥”…€RJ)¥,”RJ)-Ì¢B!äøÂB@!„B!„°B!¤ ËB055Õ;5Ðëj 5ÖÕ@k¬«ÖXW­±®ZcÝ‚LÔ@k¬«ÖXW­±®Zc] ´ÆºhucX2Q­±®Zc] ´Æºhu5Ðëj 5Öa!ÈD ´Æºhu5Ðëj 5ÖÕ@k¬«ÖX7&ûBÐD8×õyÔÙp®ëó©³á\×ç5Rgù®Ïk¤Î†s]Ÿ×H çº>¯‘:Îu}>†;™¨ÖXW­±®Zc] ´Æºhu5ÐëÆ°d¢Zc] ´Æºhu5Ðëj 5ÖÕ@k¬ÃB‰hu5Ðëj 5ÖÕ@k¬«ÖXW­±nÌÄ ÁÌ–­.–…`N ´Æºhu5Ðëj 5ÖÕ@k¬«ÖX7fœ…`ÝÚ¥ÖO»éM3#Ùu…€B!“eb;ß#Ô‚·¾õ­½SãÍ‹.ïW½ù{§Æ9ßü×½ScÑ¿û|ïÔøƒ‹®éOŸñ{g A&j À´® Lëj À´® Lëj À´® LëÆ°d¢ Lëj À´® Lëj À´® Lëj À´nLö… ‰p®ëó©AÎu}^#5(ù®Ïk¤e8×õyÔ  çº>¯‘”á\×ç5š‚2$œëú| w2Q# ʾ¨e_Ôƒ²/j„AÙ5 ì‹aPöÅ‚LÔ@i] ˜ÖÕ@i] ˜ÖÕ@i] ˜Öa!ÈD ˜ÖÕ@i] ˜ÖÕ@i] ˜ÖÕ@iÝ‚LÔ@i] ˜ÖÕ@i] ˜ÖÕ@i] ˜Öa!ÈD ˜ÖÕ@i] ˜ÖÕ@i] ˜ÖÕ@iݘ, Á§?ýéÞ©ñî/­ì«NzgïÔ¸fÅûz§ÆâSnèo¿å¡Þ©qષõ΂LÔ@i] ˜ÖÕ@i] ˜ÖÕ@i] ˜Öa!ÈD ˜ÖÕ@i] ˜ÖÕ@i] ˜ÖÕ@iݘì Aá\×ç5Rƒ2œëú¼FjP†s]Ÿ×H Êp®ëó©AÎu}^#5(ù®Ïk4eH8×õùîd¢F”}Q# ʾ¨e_Ôƒ²/j„AÙ5 ì‹1,™¨Óº(0­«Óº(0­«Óº(0­ÃB‰(0­«Óº(0­«Óº(0­«Óº1,™¨Óº(0­«Óº(0­«Óº(0­“e!@_Üc] ôÅ=ÖÕ@_Üc] ôÅ=ÖÕ@_Üc] ôÅ=ÖÕ@_Ücݘ‰‚™-[], Áœ(0­«Óº(0­«Óº(0­«Óº1ã,ëÖn,ݰ~ÚMošÉ~î(j À´® Lëj À´® Lëj À´® LëÆLl‡`øs‚95P`ZW¦u5P`ZW¦u5P`ZW¦uc²/M„s]Ÿ×H Êp®ëó©AÎu}^#5(ù®Ïk¤e8×õyÔ  çº>¯Ñ”!á\×çc¸C‰aPöE0(û¢F”}Q# ʾ¨e_Ôƒ²/ưd¢ Lëj À´® Lëj À´® Lëj À´n A&j À´® Lëj À´® Lëj À´® LëÆ°d¢ Lëj À´® Lëj À´® Lëj À´n A&j À´® Lëj À´® Lëj À´® LëÆdYÐWûZW}µ¯u5ÐWûZW}µ¯u5ÐWûZW}µ¯u5ÐWûZ7†… 5P`ZW¦u5P`ZW¦u5P`ZW¦ucX2Q¦u5P`ZW¦u5P`ZW¦u5P`Z7&ûBÐD8×õyÔ  çº>¯‘”á\×ç5Rƒ2œëú¼FjP†s]Ÿ×H Êp®ëóMAÎu}>†;™¨e_Ôƒ²/j„AÙ5 ì‹aPöE0(ûb A&j À´® Lëj À´® Lëj À´® LëÆ°d¢ Lëj À´® Lëj À´® Lëj À´n A&j À´® Lëj À´® Lëj À´® LëÆ°d¢ Lëj À´® Lëj À´® Lëj À´nL–…€B!“……€B!“+3[¶ºXB!$ÆYÖ­ÝXºaý´›Þ43’ýÜ! „B2fb;ß#°B!yÀB@!„B!„°B!¤ ËB055Õ;5ЗÔXW}!‹u5ЗX—2X2Q¦u5P`ZW¦u !ã… 5P`ZW¦u5P`Z—2X2Q¦u5P`ZW¦u !ã!ûBÐD8×õyÔ  çº>¯‘”á\×ç5Rƒ2œëú¯%:—7œëú¼F”è\Þp®ëóaP¢syù®ÏBÆw2Q# ʾ¨e_Ôƒ²/BÆ A&j À´® Lëj À´.!d<°d¢ Lëj À´® LëBÆ A&j À´® Lëj À´.!d³%½ÌlÙêbYæÔ@i] ˜ÖÕ@i]BÈx@_qßîégçöîÝëöìÙãv‹»w—;»v½âvîÜåvìØé^~y‡{ñ¥—Üó/¼è¶nÛ^–‚°¬[»±tÃúé¢dÌŒd?w5P`ZW¦u5P`Z—2$ÐåÿÞ}ûZ‚çž¡\—¼C0ü9 Áœ(0­«Óº(0­KYôÕ¾ÖÕ@_ík] ôÕ¾ÖÕ@_ík]BÈx`!ÈD ˜ÖÕ@i] ˜Ö%„Œ‚LÔ@i] ˜ÖÕ@i]BÈxˆ ÁÕËRh!@_Jâ çº>¯%:—7œëú¼F”è\Þp®ëóaP¢syù®ÏBÆÚ!@%ÀË‚R# ʾ¨e_Ôƒ²/BÆ*ò–*|Ë`Õ@i] ˜ÖÕ@i]BÈx¨+ò‚° ð3 ¬ Lëj À´® LëBÆCS!Jà‡ '  Lëj À´® LëBƃVø· &¤ Lëj À´® LëBÆC–…€B!“……€B!,„B‚{V®v¿{îùV…à‰­ÛÊ2™…€B1€úÆßl*ÿ dyÅŸª”™-Oާ<ýìó”RJ)í¸w!„’w!ð­…B! !„BôB0³e«‹e! „Bl!Ù¾níÆÒ ë§Ýô¦™‘ìoµCðòÃ_tû·]îÞØy½Û~Û›ŠŸ—»ý/-w»6]5œh !„2Ô‚áÏê ÁEøo¿ë÷Û½Äm_µh𳸾ÿ¹åÉv°B!“a¼…`çõe pW¹Ý/3Åϲ<^›,„BÈdk!Ø~Ó›ÜöU' Ê€Û]þ”ë²K°ô¶UsÞ4p‰wéÀB!d2Ld‡Àí^:œpæ.‡üþŸ/^š#­¬qžx¢;ñÂ5Ãë‚[ä–=5¼zÌ ïcĦó7Ýÿ<Ûš Áý¦œgÜ„B¬2ÞBà?CðÂb·ý—sŸ!p/,u‹Î]Z–“N[êÞºH\â~ÿ½…'-qoúóâç1‚EnÑ¢0ø*SÏÛ4×ò±=µÌ-‚ó)çY¨?B!Ök!ØñëKÜnù¼€Uoì e@Ž-^²ÊÝö¨s·ýr ”y—@\|Óöc.ËÖÁ¹h™d_„r}ø {¸“°æÂÝ¢Ùh^^‘ì8xâó>å–-ò¯ÜÁù–ͽ²Ÿ;þØF( Á…ÅTH°¦pѲ5åã˜].¿ü³hy_„BzËX ŸÎZ|Û  =ëââú° H ]‚¥w9·¤pñÒ1‚"ô$ä97„sÇ%ÀÇŸZ¶h.‹•è£e!$عÍ÷0xƒóŸ8r[óc‹)kq>º£ç Ÿ\<þö÷E!¤ŸŒ¿Ü4(‹Î½Í-þöªrg@ÊÀ¢¢ ø· Fß2XìÞôÖ³ÆRÊË•WÆryîÕôl°¯¼×\XÌÎî04…åhÀ–$½¿?žð2xlálÝ.ˆ<ŸÊãŸï}Bé X–Îîˆr½|‹`¸+ e`IqšÅ79wÖ’GÇTü«ãeQÁ9‹ÎâöÙ - Âl°"¢sÍnÍ—Wî³î¶xNC£òxíðùÔ¾uÒö¾!„ô‰±ùk„å‡ ýÛ¢\—"PZ,—² |{·[´xÕØ ¿>÷!ÃAˆ¢·ÊòPÌùÛäú…^XóvÝ—ÿ2»Ü)Ãwî>Ëí|Òõ ÓTÐãO¹/™ ßÎ@— !„Xgü…`éà¶·ž¶´ùm‚?¼Uð¦ÿç,÷Oþ÷“ÆX F¹ |{Ào•!7ÜîŸÝ:¯WˆïK®Ï[ñÜmƒ¹ /¼÷?úW£sÔ=6ÏÈí…Áƒ“ÏȱٟwÒ}ÉŒv™Bˆu®á/;~W@®ý`àM®,g-Ùî]ühQn;†B@<£;„BH: VÊÏE@þAù·NZìÎúööKuÿä÷¹EçÊÛ ·•ßM0ßB0ûʹÆ~0x;`tw€BIgA „û|Œá!„2Æ^Æ !„2X!„ÂB@!„B!„¨…`fËVËB@!„ØB²}ÝÚ¥ÖO»éM3#ÙÏB!¤¨;ß#°B!¶k!xùá/ºýÛ.woì¼Þm¿íMÅÏËÝþ—–»]›®N´ƒ…€B™ c-oá¿ý®ßwn÷·}Õ¢ÁÏâú£«»¥·­xÓ@ùGJ—Šø|,„BÈdo!Øy}YÜÁUn÷ ÅLñS®ï~aépb”Ý w;ø-… !„2ÆZ¶ßô&·}ÕIƒ2àv—?åºìÌîD»Û·ïf! „BŽ3Ù!p»—–E DvÞúÞ%c(òÏôž8òÏWþÙß±0¼ŸYýùåŸ g|þð>Mϱ鶆ÿôsõ¹iç™Ç}BÉŽñÿ‚»í¿œû {aP{›;鬥å¿n(ÿ²‚GG!Xä- Ci!B*:g ó-ô8S{Ó\ËçÿÔ2·Χœ§å}BÉ’±‚¿¾Ä=ºê,·{»|¨ð­å΀”Ý/N väs»‹ÿØþÂn·êÑíc)ËÖ¡¶h™äRRr}øêw¸“°æÂÝ¢Ùh^Â~dÇA@ç”Bàþ âÙerŽ‘Çƒ^}ûc eöŸ6®™[6÷Ê~î!Ççî«ò¼ ÊB—›øñ­©y~-ï‹BH–ŒµòÙ€ògð™)Ã2ðèöÝî¤Ó»U¿Ü^:–BP’„ü ƒFCjëàøSËÍVn²ÃàÃv´,xFÏY®1º£ç ŸŸ\<§ö÷E!$?Æ^䃂‚/‹fÓ-.]T”‚ÛV¯”—+¯ZåòÜ+ÝÙÐ ^¯¹°˜Ýa¨ ²ø< |圕s„Eˆ[|_àXöþ~ÛžW.‡;ýál]aQŸ_›û"„’ã/Ãï˜-ç.…oH!ŸKo{tŒ…À¿r]…Tj³øP+nŸ ¹"ägC/¦î<áñá9Õ·/üutÎèXíŽBêyã9 y>ÈãµÚók{_„Braá Áp§@>DX¾MðøörG@>D¸xÉmƒ· ŠB°ä¦ñ}îC†ƒ€«¾PÜ"塘ó·Éõ /¼ÎÖ‡ÝèñrË<:Ç1½e óþev¹Sào“¹¹ó–Ûùð¼õÏÓTПQÊ}ÉL¸£‚.B9ž,X!·Ê¿Z¸H Áà3²+ðVñ½ƒ· äóK–Ž»ŒgAùö€ßƨœ ¶µãë#€û)‰ŽÇ÷]"3þþGo“² ÇqÀ ÁÚ"ˆçnÌ]xáà½ÿÑóFç¨{þž‘Û ƒ?€Êã«<¿”û’í2!„ãÉ‚ùk…åw ¼°Û=:|›@vV=ZX”Û ûX ™$£;„B¬° …@vÁ?ØÝqé]ƒÏ ,½éÑò­‚ÅK ;Rf_=Gö‡ÁÛÕÝB!XB ßVw!„É0öB0NX!„ÉÀB@!„½ÌlÙêbY!„[H¶¯[»±tÃúi7½if$û¹C@!„ôu‡`øs_¶>¿‹RJ)¥W8¦B@!„°B!„…€¾ò³û~Qr,Ç!Ýæ˜ ÁáïSJ;jêã8F)í®Â1‚½¯¾F)í°žq£”vSᘠÁK;vQJ)¥´ã ó*·ýô®á%ç¶n†RJ)¥Õ#ÙÞºܳrµ{lú·Ãk„Bé2’é’í­ ¥MÈ¥”RJ»©dyXÄ]/ïq&þ€ÚBrèàa·{×¾‘“µQ¾7ï‹|þ|þèx_äóçóGÇûb®Ï_2]²=$©>ôº{uï~÷ò ¯Àkò¿|þèx_äóçóGÇû"Ÿ~Ï_²\2]²=$©9rÔ>ÿ>ÃçÏçßgºôüY&Ÿ?ŸŸáóçóï3]zþ,€ÏŸÏ¿Ïðùóù÷™î<çþÎu‚õÕ•e)IEND®B`‚openxlsx/data/0000755000176200001440000000000014656123677013064 5ustar liggesusersopenxlsx/data/openxlsxFontSizeLookupTable.rda0000644000176200001440000000662214656123677021266 0ustar liggesusersBZh91AY&SYˆíû6:ÎÿÿÿÿÿøcPÅÄS£§1ŒÇ~梭‘ä-ºžK×3θpê3EÇ2ÌðžbÅ(§-ÞÓAÛ£N®Ï(à[&îùÖ8˜F³›ÏGÑÿJ¡Þ8€üï€ñPUª íˆ,0.ê Š‡“ÏÚgåž‚(oDD;aáÚ­éÞÏ¥âßUž+颓߯‘_©Ñ®aPªy«&XèÉdò|ìÙƒÊýed­ž¸éqv„Krg¨µß&Û †dYkä¯\–û“Û„C ²²* ŒJ-tžØQwßÝ…Ah$´X¶è…—½÷`kG”Ñ«³/w¯}Z$ŒÆÜ‹+¹„U©~i#ÆZªaªéД“nÆ|#–Nua£\w¹Û“Ò30Æ«2kÙíü­²v¥gVÈáZ½ Kðõ¿Ük”5S„xaòSÍY~åä·áö½Œ3ÆRÓ‡=J5¦eÝ0DfŠ@bܦ8쨂âÙIJL-¯ "»ÆráåW¥ìVZS«QºŒ\Èn‚—õÐebÐÁˆ~ùoÕž~Æ<Õ•11f9‘ýÜtÂ(—Ú…´šðÕÉé§Mi)ŽÅu%‰CVc}ØBh—R)¡ Ýlm´p8þ:³Ìgi–ÐIƒîñnX®\)8;KدBª&À|˜LxÑÖ3²—ðvÓòwôéÌóœÑ ‰gc0;ëcTmù*bò÷;2{Wþl)jÌQ6*=Ù% ’Ïšý/†ì8rìs«ŸpÆ{’.H:žLdzJ„KÙìíRV±JPME.©Èeík—ròk3©±ç³œêÈ@›Åq BæY3á¿£›L8òÁD@kÚ¥!¥ _(P•Œ‚"Ú*é«ÎCVi“¾=ä9FOGVë—C MÝI òâUi 4vDtY¯n¤[,"1.¹ºÝŽÎ¿Ç¸Ü,%ï3ê‘ËN¡4eâ޸؞´ÿÀ¨ gu+³{G**(* åfÖ´àc³…©ÆÊ¥tFRÎ0^ªbº÷i|),b©¶ï pÄœR{HŒÅˆe R c8Íý)Ó§,¬Ùè÷¹#‘ibª±YjåŒ,_š‡)Œh館ªlzQÇháâèByN‡w§ÎqyF[7^¥y;3³ Õ›,Bº‘Æ)实Û$‘j…Ó:‹£3/õšÕTgЧÌj¢ Ú¦Ô€•J¶ `Væ¯z²Û¹ëmŽ„’€Àf!°yIƒ¿!L Ês°tIÂA÷x7¥ݤ¥KX&”8-*V6Ëæ·4ÂRÁŒU‹,Œ ¹?¾½93ÝíKŽå”‘¸!1îYƒöí(Ñ 7žˆ4DJ)9L³VÆÒÑÉfÇÔ8CÔ¯ÉáIAP‰8$ç8IìX‹HÜìࢮ·,”‚fúÞ›úü«™Ì…ãy@ Ú2þ©è¹Å)š+ÑÒkœKªQÔqk—dB»6Õ3«m§Œ'½‰MÜ×<‘ö‹Uv ßvto±D/ŽLê› !}uwqtÕi1$ÆDš@binª+ð9‡îOoÒ" %È„T5AéYkc¨ !U=âÏÄœIäcœÔÕË”]ˆ°‚<Ð6d(}YDz§ W‘NÐu¼ú¢û˜ì=ŒW·ÔS¶m‚Ú׋…FaA=”Œp]Ш/ÐÂ×LéÊ*†*R"ç‚5ÅHˆ8jaþvÀˆšlÕDÐ*ŽÀA?Dz‘ ts,ª¾e“fAÛƒ »ÂªÍþ(©K $È @ĽÕøä­ÝȈ›„{ßöi ‰ @Û*…H*£®* `F܃ 0ªŠE”e%‚J2¢'ôÊ(TEl5›,@EŠÀ ÀÀ4 ò¢‡8Ïþ.äŠp¡!Ûölopenxlsx/data/openxlsxFontSizeLookupTableBold.rda0000644000176200001440000000710514656123677022064 0ustar liggesusersBZh91AY&SYXM;Ž9ûÿÿÿÿÿøcPÕÄö8BM3ªÉSHDDZb$y?¦îÎ%ª´NÀèCš*+g4…@c,5Ö›ç—o®÷Îð•C$4„˜¡"rï09 ˜(¥’’#”æYˆÀÒXœáQÃzžQ1^c¿{P=ˈ‰WKäK‰j:ÉÕTRE@Á"ÈèVh¨a¢¤‰fH‰¡™“o†yæ|™á´¯‘Pm¼ÙPòt‰„‰`©A†M”1$TK2RTA TzF¥$ŽN»ïDP4 r…Ä”ªCÔ‹¨–•𩍒™9“K—O8œ'¾îS×rP¦‚Y ‰tD”PSµ- @TPjzáÉXª®Úìë¾®ñð˜{ &RŒ jH©`‚%Š‚`ÐáŸ]˜yuk½çPEˆ ’š™'`Ó‰ F"‚&˜‰Z˜ˆˆ("€šë„uŽ¸È‡UE!7PÐ)Æ„)I*š¢ª¨¢Š&¡’’oΫ¾ûE¤¢¢C¥#Hm42ËPÔDMZžnò1Etu×}rZS¸¦ua‘a) b¨„(dª ¢n±’J8há.“‘Ö:Šf šê¨‰Œ0ƒHRAPU$ÌCžº³ÍåÙ\Ú*PÅLJj•ti!`¢Š]`m¤(jˆM IŠ •Î4޹ߪ$åfd…Ä%:#O=Cs²¦š˜)±ÇƒªR%Ó†'ªœóœ@æÖÇÜóÔ»#¤Ú'HÆ3ÃÕáäPRbÁéáÕPèî9ò,j)ÝuÎb1ŠêÐxuÑȧ>¶Á·1d껚¸òŽŽ‹´éÿz§gC¯k{oÞø¿ ˆ•ˆp0é\°ž=Š"‡….¡žr. €›9¹W¼©Ó!h  ˆÓMáÜ/£ä©ÑÞœ(éß9O¤¾vôÚɤ «àÒsSk¥”4aóp?®Èlüu:OëYˆõvmŸ#¾à%»Êzh«î:gÄšu¸Oe~1 6/ñ(¿)4ÌNù°’WQ;¨ƒ£5ßKv]I ”f±mÍ/„.ÀÔ)›Gn?gÕßVj´Ûˆ4µw1:¢á:—ä Ù?*4TÃè3$h¡6¼k lƒ‡¬›H-ÊH& ¤X”tÿ7o½¼t kÙ>¬%—®g¸ÕDtS…c,@°úiÕY~ZÐ:ÕÜßSôÄã`a¦LÃMzCmJ3ºT}y`„Àƒ38ÁË}„˜Í“3‹îÆRÝSFéghÄ¢µ Ñ,±Ý/ëœÆË3 ƒ7èË-s±ªTÒ(Úr$||!l‚tKíBÚMXhåÏž´¢Cô®„±&rÄÈo»ÉêC53$]©lÜ>d%3ÊÓ¡=I„.ïv9לž ¯2ª&À„\˜H€áö7:aÁûOs»Ãðø§b!!,æØÕ³”uøž*5åísÅõï÷°¤>µšQˆ6*fìPeJ2ä¿<#»¹½wBá›Ù¢T½#ÊUŸ¼Šf¸«w‹¬EõDa€XÏ3O´oëR>±ê×c’Mû•t H´ÍM² †…³xÇ[X7 †$žrH€ú^¡Ù†µ9ù…@†¹`ˆ¾ªÚíËJ0Û‹ uÎ#NªÅ¢CšÚ.y’^‘ ‘ !ºyê)³êx;jÒiQhE²Âq’ë™> öpíþo¹V4x²è"”pð±ÇÌìª5_ðºq”¡n  2”W6î·=^¢¢‚ ¬ÍÔæ¾=M3ÍÓ9QTš 7=£È ™ c:‡›Ès6;7^¥x»r¶«&9¿ÖV5'Ÿ\»­¥'r…®ÑU`Ù:Ó,§j,J[ø"J"±ªñXgªÑ, •XŠÃX °çœ­Ü<“ë»Tä>!™ÄGQPÒE(( q'h ú¼šV ôjÍ[Ü'`Òåv«Ä‡³•˜,n8®>jéábk^}§y•2!Zy¦ïwq‘¢§ð†Ã<²°†|re¿(vvSІø¼_¿ÇÇ+ßšþ?ìk€Ë`$ØÄI³‹^Fü±q a«eØ.ÿ'T{f¨žãŶófj$y"Qˆ™¸ú¬XCxƒQöàqúCý‚#ÑYj©¹Ì•-*hz ºænÕGüfmô3"uP >æh@Æ@hp¡Q¨<ô³iˆC‹§ùE)'R ŸË·¾Þ´VÖïˆ@Y oW鈛‚í䦈ÓÑXð Q –¥®ì(\–%±~| ÌÍ%»„;7{ÔÒþÍ^Œâ^/7K>8º~–:ËâÙm¥˜¬¸XTöÊåz¹–èüß¹¸ÇN…øýcÒ¶Q‡¹Wsœ*jQö±2‡(¢3-6£P ]ûß]D¶Îœæ 0ä°ž´~L Š„HIIJQ¢ ³ŽÄ÷?i€ºžl²ŠFúà›úü+‘9f"ñÜ¢nýtw®QJd‹}bê”|Ü\õÙ8WfÚ¢ö×¶ÓËod'nsàP{eˆÎU~ßvTwI£|ø²ªlˆ…WÕãâé*Òi(fœ’DdÎí*f"Çæus1U ¾ˆô9‚›LÄnr  ãi{ do not edit by hand // Generator token: 10BE3573-1514-4C36-9D1C-5A225CD40393 #include using namespace Rcpp; #ifdef RCPP_USE_GLOBAL_ROSTREAM Rcpp::Rostream& Rcpp::Rcout = Rcpp::Rcpp_cout_get(); Rcpp::Rostream& Rcpp::Rcerr = Rcpp::Rcpp_cerr_get(); #endif // calc_column_widths SEXP calc_column_widths(Reference sheet_data, std::vector sharedStrings, IntegerVector autoColumns, NumericVector widths, float baseFontCharWidth, float minW, float maxW); RcppExport SEXP _openxlsx_calc_column_widths(SEXP sheet_dataSEXP, SEXP sharedStringsSEXP, SEXP autoColumnsSEXP, SEXP widthsSEXP, SEXP baseFontCharWidthSEXP, SEXP minWSEXP, SEXP maxWSEXP) { BEGIN_RCPP Rcpp::RObject rcpp_result_gen; Rcpp::RNGScope rcpp_rngScope_gen; Rcpp::traits::input_parameter< Reference >::type sheet_data(sheet_dataSEXP); Rcpp::traits::input_parameter< std::vector >::type sharedStrings(sharedStringsSEXP); Rcpp::traits::input_parameter< IntegerVector >::type autoColumns(autoColumnsSEXP); Rcpp::traits::input_parameter< NumericVector >::type widths(widthsSEXP); Rcpp::traits::input_parameter< float >::type baseFontCharWidth(baseFontCharWidthSEXP); Rcpp::traits::input_parameter< float >::type minW(minWSEXP); Rcpp::traits::input_parameter< float >::type maxW(maxWSEXP); rcpp_result_gen = Rcpp::wrap(calc_column_widths(sheet_data, sharedStrings, autoColumns, widths, baseFontCharWidth, minW, maxW)); return rcpp_result_gen; END_RCPP } // convert_to_excel_ref SEXP convert_to_excel_ref(IntegerVector cols, std::vector LETTERS); RcppExport SEXP _openxlsx_convert_to_excel_ref(SEXP colsSEXP, SEXP LETTERSSEXP) { BEGIN_RCPP Rcpp::RObject rcpp_result_gen; Rcpp::RNGScope rcpp_rngScope_gen; Rcpp::traits::input_parameter< IntegerVector >::type cols(colsSEXP); Rcpp::traits::input_parameter< std::vector >::type LETTERS(LETTERSSEXP); rcpp_result_gen = Rcpp::wrap(convert_to_excel_ref(cols, LETTERS)); return rcpp_result_gen; END_RCPP } // convert_from_excel_ref IntegerVector convert_from_excel_ref(CharacterVector x); RcppExport SEXP _openxlsx_convert_from_excel_ref(SEXP xSEXP) { BEGIN_RCPP Rcpp::RObject rcpp_result_gen; Rcpp::RNGScope rcpp_rngScope_gen; Rcpp::traits::input_parameter< CharacterVector >::type x(xSEXP); rcpp_result_gen = Rcpp::wrap(convert_from_excel_ref(x)); return rcpp_result_gen; END_RCPP } // convert_to_excel_ref_expand SEXP convert_to_excel_ref_expand(const std::vector& cols, const std::vector& LETTERS, const std::vector& rows); RcppExport SEXP _openxlsx_convert_to_excel_ref_expand(SEXP colsSEXP, SEXP LETTERSSEXP, SEXP rowsSEXP) { BEGIN_RCPP Rcpp::RObject rcpp_result_gen; Rcpp::RNGScope rcpp_rngScope_gen; Rcpp::traits::input_parameter< const std::vector& >::type cols(colsSEXP); Rcpp::traits::input_parameter< const std::vector& >::type LETTERS(LETTERSSEXP); Rcpp::traits::input_parameter< const std::vector& >::type rows(rowsSEXP); rcpp_result_gen = Rcpp::wrap(convert_to_excel_ref_expand(cols, LETTERS, rows)); return rcpp_result_gen; END_RCPP } // isInternalHyperlink LogicalVector isInternalHyperlink(CharacterVector x); RcppExport SEXP _openxlsx_isInternalHyperlink(SEXP xSEXP) { BEGIN_RCPP Rcpp::RObject rcpp_result_gen; Rcpp::RNGScope rcpp_rngScope_gen; Rcpp::traits::input_parameter< CharacterVector >::type x(xSEXP); rcpp_result_gen = Rcpp::wrap(isInternalHyperlink(x)); return rcpp_result_gen; END_RCPP } // write_file SEXP write_file(std::string head, std::string body, std::string tail, std::string fl); RcppExport SEXP _openxlsx_write_file(SEXP headSEXP, SEXP bodySEXP, SEXP tailSEXP, SEXP flSEXP) { BEGIN_RCPP Rcpp::RObject rcpp_result_gen; Rcpp::RNGScope rcpp_rngScope_gen; Rcpp::traits::input_parameter< std::string >::type head(headSEXP); Rcpp::traits::input_parameter< std::string >::type body(bodySEXP); Rcpp::traits::input_parameter< std::string >::type tail(tailSEXP); Rcpp::traits::input_parameter< std::string >::type fl(flSEXP); rcpp_result_gen = Rcpp::wrap(write_file(head, body, tail, fl)); return rcpp_result_gen; END_RCPP } // cppReadFile std::string cppReadFile(std::string xmlFile); RcppExport SEXP _openxlsx_cppReadFile(SEXP xmlFileSEXP) { BEGIN_RCPP Rcpp::RObject rcpp_result_gen; Rcpp::RNGScope rcpp_rngScope_gen; Rcpp::traits::input_parameter< std::string >::type xmlFile(xmlFileSEXP); rcpp_result_gen = Rcpp::wrap(cppReadFile(xmlFile)); return rcpp_result_gen; END_RCPP } // read_file_newline std::string read_file_newline(std::string xmlFile); RcppExport SEXP _openxlsx_read_file_newline(SEXP xmlFileSEXP) { BEGIN_RCPP Rcpp::RObject rcpp_result_gen; Rcpp::RNGScope rcpp_rngScope_gen; Rcpp::traits::input_parameter< std::string >::type xmlFile(xmlFileSEXP); rcpp_result_gen = Rcpp::wrap(read_file_newline(xmlFile)); return rcpp_result_gen; END_RCPP } // get_letters std::vector get_letters(); RcppExport SEXP _openxlsx_get_letters() { BEGIN_RCPP Rcpp::RObject rcpp_result_gen; Rcpp::RNGScope rcpp_rngScope_gen; rcpp_result_gen = Rcpp::wrap(get_letters()); return rcpp_result_gen; END_RCPP } // markUTF8 CharacterVector markUTF8(CharacterVector x, bool clone); RcppExport SEXP _openxlsx_markUTF8(SEXP xSEXP, SEXP cloneSEXP) { BEGIN_RCPP Rcpp::RObject rcpp_result_gen; Rcpp::RNGScope rcpp_rngScope_gen; Rcpp::traits::input_parameter< CharacterVector >::type x(xSEXP); Rcpp::traits::input_parameter< bool >::type clone(cloneSEXP); rcpp_result_gen = Rcpp::wrap(markUTF8(x, clone)); return rcpp_result_gen; END_RCPP } // loadworksheets SEXP loadworksheets(Reference wb, List styleObjects, std::vector xmlFiles, LogicalVector is_chart_sheet); RcppExport SEXP _openxlsx_loadworksheets(SEXP wbSEXP, SEXP styleObjectsSEXP, SEXP xmlFilesSEXP, SEXP is_chart_sheetSEXP) { BEGIN_RCPP Rcpp::RObject rcpp_result_gen; Rcpp::RNGScope rcpp_rngScope_gen; Rcpp::traits::input_parameter< Reference >::type wb(wbSEXP); Rcpp::traits::input_parameter< List >::type styleObjects(styleObjectsSEXP); Rcpp::traits::input_parameter< std::vector >::type xmlFiles(xmlFilesSEXP); Rcpp::traits::input_parameter< LogicalVector >::type is_chart_sheet(is_chart_sheetSEXP); rcpp_result_gen = Rcpp::wrap(loadworksheets(wb, styleObjects, xmlFiles, is_chart_sheet)); return rcpp_result_gen; END_RCPP } // getNodes SEXP getNodes(std::string xml, std::string tagIn); RcppExport SEXP _openxlsx_getNodes(SEXP xmlSEXP, SEXP tagInSEXP) { BEGIN_RCPP Rcpp::RObject rcpp_result_gen; Rcpp::RNGScope rcpp_rngScope_gen; Rcpp::traits::input_parameter< std::string >::type xml(xmlSEXP); Rcpp::traits::input_parameter< std::string >::type tagIn(tagInSEXP); rcpp_result_gen = Rcpp::wrap(getNodes(xml, tagIn)); return rcpp_result_gen; END_RCPP } // getOpenClosedNode SEXP getOpenClosedNode(std::string xml, std::string open_tag, std::string close_tag); RcppExport SEXP _openxlsx_getOpenClosedNode(SEXP xmlSEXP, SEXP open_tagSEXP, SEXP close_tagSEXP) { BEGIN_RCPP Rcpp::RObject rcpp_result_gen; Rcpp::RNGScope rcpp_rngScope_gen; Rcpp::traits::input_parameter< std::string >::type xml(xmlSEXP); Rcpp::traits::input_parameter< std::string >::type open_tag(open_tagSEXP); Rcpp::traits::input_parameter< std::string >::type close_tag(close_tagSEXP); rcpp_result_gen = Rcpp::wrap(getOpenClosedNode(xml, open_tag, close_tag)); return rcpp_result_gen; END_RCPP } // getAttr SEXP getAttr(CharacterVector x, std::string tag); RcppExport SEXP _openxlsx_getAttr(SEXP xSEXP, SEXP tagSEXP) { BEGIN_RCPP Rcpp::RObject rcpp_result_gen; Rcpp::RNGScope rcpp_rngScope_gen; Rcpp::traits::input_parameter< CharacterVector >::type x(xSEXP); Rcpp::traits::input_parameter< std::string >::type tag(tagSEXP); rcpp_result_gen = Rcpp::wrap(getAttr(x, tag)); return rcpp_result_gen; END_RCPP } // getChildlessNode_ss std::vector getChildlessNode_ss(std::string xml, std::string tag); RcppExport SEXP _openxlsx_getChildlessNode_ss(SEXP xmlSEXP, SEXP tagSEXP) { BEGIN_RCPP Rcpp::RObject rcpp_result_gen; Rcpp::RNGScope rcpp_rngScope_gen; Rcpp::traits::input_parameter< std::string >::type xml(xmlSEXP); Rcpp::traits::input_parameter< std::string >::type tag(tagSEXP); rcpp_result_gen = Rcpp::wrap(getChildlessNode_ss(xml, tag)); return rcpp_result_gen; END_RCPP } // getChildlessNode CharacterVector getChildlessNode(std::string xml, std::string tag); RcppExport SEXP _openxlsx_getChildlessNode(SEXP xmlSEXP, SEXP tagSEXP) { BEGIN_RCPP Rcpp::RObject rcpp_result_gen; Rcpp::RNGScope rcpp_rngScope_gen; Rcpp::traits::input_parameter< std::string >::type xml(xmlSEXP); Rcpp::traits::input_parameter< std::string >::type tag(tagSEXP); rcpp_result_gen = Rcpp::wrap(getChildlessNode(xml, tag)); return rcpp_result_gen; END_RCPP } // get_extLst_Major CharacterVector get_extLst_Major(std::string xml); RcppExport SEXP _openxlsx_get_extLst_Major(SEXP xmlSEXP) { BEGIN_RCPP Rcpp::RObject rcpp_result_gen; Rcpp::RNGScope rcpp_rngScope_gen; Rcpp::traits::input_parameter< std::string >::type xml(xmlSEXP); rcpp_result_gen = Rcpp::wrap(get_extLst_Major(xml)); return rcpp_result_gen; END_RCPP } // cell_ref_to_col int cell_ref_to_col(std::string x); RcppExport SEXP _openxlsx_cell_ref_to_col(SEXP xSEXP) { BEGIN_RCPP Rcpp::RObject rcpp_result_gen; Rcpp::RNGScope rcpp_rngScope_gen; Rcpp::traits::input_parameter< std::string >::type x(xSEXP); rcpp_result_gen = Rcpp::wrap(cell_ref_to_col(x)); return rcpp_result_gen; END_RCPP } // int_2_cell_ref CharacterVector int_2_cell_ref(IntegerVector cols); RcppExport SEXP _openxlsx_int_2_cell_ref(SEXP colsSEXP) { BEGIN_RCPP Rcpp::RObject rcpp_result_gen; Rcpp::RNGScope rcpp_rngScope_gen; Rcpp::traits::input_parameter< IntegerVector >::type cols(colsSEXP); rcpp_result_gen = Rcpp::wrap(int_2_cell_ref(cols)); return rcpp_result_gen; END_RCPP } // get_shared_strings CharacterVector get_shared_strings(std::string xmlFile, bool isFile); RcppExport SEXP _openxlsx_get_shared_strings(SEXP xmlFileSEXP, SEXP isFileSEXP) { BEGIN_RCPP Rcpp::RObject rcpp_result_gen; Rcpp::RNGScope rcpp_rngScope_gen; Rcpp::traits::input_parameter< std::string >::type xmlFile(xmlFileSEXP); Rcpp::traits::input_parameter< bool >::type isFile(isFileSEXP); rcpp_result_gen = Rcpp::wrap(get_shared_strings(xmlFile, isFile)); return rcpp_result_gen; END_RCPP } // getCellInfo List getCellInfo(std::string xmlFile, CharacterVector sharedStrings, bool skipEmptyRows, int startRow, IntegerVector rows, bool getDates); RcppExport SEXP _openxlsx_getCellInfo(SEXP xmlFileSEXP, SEXP sharedStringsSEXP, SEXP skipEmptyRowsSEXP, SEXP startRowSEXP, SEXP rowsSEXP, SEXP getDatesSEXP) { BEGIN_RCPP Rcpp::RObject rcpp_result_gen; Rcpp::RNGScope rcpp_rngScope_gen; Rcpp::traits::input_parameter< std::string >::type xmlFile(xmlFileSEXP); Rcpp::traits::input_parameter< CharacterVector >::type sharedStrings(sharedStringsSEXP); Rcpp::traits::input_parameter< bool >::type skipEmptyRows(skipEmptyRowsSEXP); Rcpp::traits::input_parameter< int >::type startRow(startRowSEXP); Rcpp::traits::input_parameter< IntegerVector >::type rows(rowsSEXP); Rcpp::traits::input_parameter< bool >::type getDates(getDatesSEXP); rcpp_result_gen = Rcpp::wrap(getCellInfo(xmlFile, sharedStrings, skipEmptyRows, startRow, rows, getDates)); return rcpp_result_gen; END_RCPP } // read_workbook SEXP read_workbook(IntegerVector cols_in, IntegerVector rows_in, CharacterVector v, IntegerVector string_inds, LogicalVector is_date, bool hasColNames, char hasSepNames, bool skipEmptyRows, bool skipEmptyCols, int nRows, Function clean_names); RcppExport SEXP _openxlsx_read_workbook(SEXP cols_inSEXP, SEXP rows_inSEXP, SEXP vSEXP, SEXP string_indsSEXP, SEXP is_dateSEXP, SEXP hasColNamesSEXP, SEXP hasSepNamesSEXP, SEXP skipEmptyRowsSEXP, SEXP skipEmptyColsSEXP, SEXP nRowsSEXP, SEXP clean_namesSEXP) { BEGIN_RCPP Rcpp::RObject rcpp_result_gen; Rcpp::RNGScope rcpp_rngScope_gen; Rcpp::traits::input_parameter< IntegerVector >::type cols_in(cols_inSEXP); Rcpp::traits::input_parameter< IntegerVector >::type rows_in(rows_inSEXP); Rcpp::traits::input_parameter< CharacterVector >::type v(vSEXP); Rcpp::traits::input_parameter< IntegerVector >::type string_inds(string_indsSEXP); Rcpp::traits::input_parameter< LogicalVector >::type is_date(is_dateSEXP); Rcpp::traits::input_parameter< bool >::type hasColNames(hasColNamesSEXP); Rcpp::traits::input_parameter< char >::type hasSepNames(hasSepNamesSEXP); Rcpp::traits::input_parameter< bool >::type skipEmptyRows(skipEmptyRowsSEXP); Rcpp::traits::input_parameter< bool >::type skipEmptyCols(skipEmptyColsSEXP); Rcpp::traits::input_parameter< int >::type nRows(nRowsSEXP); Rcpp::traits::input_parameter< Function >::type clean_names(clean_namesSEXP); rcpp_result_gen = Rcpp::wrap(read_workbook(cols_in, rows_in, v, string_inds, is_date, hasColNames, hasSepNames, skipEmptyRows, skipEmptyCols, nRows, clean_names)); return rcpp_result_gen; END_RCPP } // calc_number_rows int calc_number_rows(CharacterVector x, bool skipEmptyRows); RcppExport SEXP _openxlsx_calc_number_rows(SEXP xSEXP, SEXP skipEmptyRowsSEXP) { BEGIN_RCPP Rcpp::RObject rcpp_result_gen; Rcpp::RNGScope rcpp_rngScope_gen; Rcpp::traits::input_parameter< CharacterVector >::type x(xSEXP); Rcpp::traits::input_parameter< bool >::type skipEmptyRows(skipEmptyRowsSEXP); rcpp_result_gen = Rcpp::wrap(calc_number_rows(x, skipEmptyRows)); return rcpp_result_gen; END_RCPP } // map_cell_types_to_integer IntegerVector map_cell_types_to_integer(CharacterVector t); RcppExport SEXP _openxlsx_map_cell_types_to_integer(SEXP tSEXP) { BEGIN_RCPP Rcpp::RObject rcpp_result_gen; Rcpp::RNGScope rcpp_rngScope_gen; Rcpp::traits::input_parameter< CharacterVector >::type t(tSEXP); rcpp_result_gen = Rcpp::wrap(map_cell_types_to_integer(t)); return rcpp_result_gen; END_RCPP } // map_cell_types_to_char CharacterVector map_cell_types_to_char(IntegerVector t); RcppExport SEXP _openxlsx_map_cell_types_to_char(SEXP tSEXP) { BEGIN_RCPP Rcpp::RObject rcpp_result_gen; Rcpp::RNGScope rcpp_rngScope_gen; Rcpp::traits::input_parameter< IntegerVector >::type t(tSEXP); rcpp_result_gen = Rcpp::wrap(map_cell_types_to_char(t)); return rcpp_result_gen; END_RCPP } // build_cell_types_integer IntegerVector build_cell_types_integer(CharacterVector classes, int n_rows); RcppExport SEXP _openxlsx_build_cell_types_integer(SEXP classesSEXP, SEXP n_rowsSEXP) { BEGIN_RCPP Rcpp::RObject rcpp_result_gen; Rcpp::RNGScope rcpp_rngScope_gen; Rcpp::traits::input_parameter< CharacterVector >::type classes(classesSEXP); Rcpp::traits::input_parameter< int >::type n_rows(n_rowsSEXP); rcpp_result_gen = Rcpp::wrap(build_cell_types_integer(classes, n_rows)); return rcpp_result_gen; END_RCPP } // buildCellTypes CharacterVector buildCellTypes(CharacterVector classes, int nRows); RcppExport SEXP _openxlsx_buildCellTypes(SEXP classesSEXP, SEXP nRowsSEXP) { BEGIN_RCPP Rcpp::RObject rcpp_result_gen; Rcpp::RNGScope rcpp_rngScope_gen; Rcpp::traits::input_parameter< CharacterVector >::type classes(classesSEXP); Rcpp::traits::input_parameter< int >::type nRows(nRowsSEXP); rcpp_result_gen = Rcpp::wrap(buildCellTypes(classes, nRows)); return rcpp_result_gen; END_RCPP } // build_cell_merges List build_cell_merges(List comps); RcppExport SEXP _openxlsx_build_cell_merges(SEXP compsSEXP) { BEGIN_RCPP Rcpp::RObject rcpp_result_gen; Rcpp::RNGScope rcpp_rngScope_gen; Rcpp::traits::input_parameter< List >::type comps(compsSEXP); rcpp_result_gen = Rcpp::wrap(build_cell_merges(comps)); return rcpp_result_gen; END_RCPP } // buildCellList List buildCellList(CharacterVector r, CharacterVector t, CharacterVector v); RcppExport SEXP _openxlsx_buildCellList(SEXP rSEXP, SEXP tSEXP, SEXP vSEXP) { BEGIN_RCPP Rcpp::RObject rcpp_result_gen; Rcpp::RNGScope rcpp_rngScope_gen; Rcpp::traits::input_parameter< CharacterVector >::type r(rSEXP); Rcpp::traits::input_parameter< CharacterVector >::type t(tSEXP); Rcpp::traits::input_parameter< CharacterVector >::type v(vSEXP); rcpp_result_gen = Rcpp::wrap(buildCellList(r, t, v)); return rcpp_result_gen; END_RCPP } // write_worksheet_xml SEXP write_worksheet_xml(std::string prior, std::string post, Reference sheet_data, std::string R_fileName); RcppExport SEXP _openxlsx_write_worksheet_xml(SEXP priorSEXP, SEXP postSEXP, SEXP sheet_dataSEXP, SEXP R_fileNameSEXP) { BEGIN_RCPP Rcpp::RObject rcpp_result_gen; Rcpp::RNGScope rcpp_rngScope_gen; Rcpp::traits::input_parameter< std::string >::type prior(priorSEXP); Rcpp::traits::input_parameter< std::string >::type post(postSEXP); Rcpp::traits::input_parameter< Reference >::type sheet_data(sheet_dataSEXP); Rcpp::traits::input_parameter< std::string >::type R_fileName(R_fileNameSEXP); rcpp_result_gen = Rcpp::wrap(write_worksheet_xml(prior, post, sheet_data, R_fileName)); return rcpp_result_gen; END_RCPP } // buildMatrixNumeric SEXP buildMatrixNumeric(CharacterVector v, IntegerVector rowInd, IntegerVector colInd, CharacterVector colNames, int nRows, int nCols); RcppExport SEXP _openxlsx_buildMatrixNumeric(SEXP vSEXP, SEXP rowIndSEXP, SEXP colIndSEXP, SEXP colNamesSEXP, SEXP nRowsSEXP, SEXP nColsSEXP) { BEGIN_RCPP Rcpp::RObject rcpp_result_gen; Rcpp::RNGScope rcpp_rngScope_gen; Rcpp::traits::input_parameter< CharacterVector >::type v(vSEXP); Rcpp::traits::input_parameter< IntegerVector >::type rowInd(rowIndSEXP); Rcpp::traits::input_parameter< IntegerVector >::type colInd(colIndSEXP); Rcpp::traits::input_parameter< CharacterVector >::type colNames(colNamesSEXP); Rcpp::traits::input_parameter< int >::type nRows(nRowsSEXP); Rcpp::traits::input_parameter< int >::type nCols(nColsSEXP); rcpp_result_gen = Rcpp::wrap(buildMatrixNumeric(v, rowInd, colInd, colNames, nRows, nCols)); return rcpp_result_gen; END_RCPP } // buildMatrixMixed SEXP buildMatrixMixed(CharacterVector v, IntegerVector rowInd, IntegerVector colInd, CharacterVector colNames, int nRows, int nCols, IntegerVector charCols, IntegerVector dateCols); RcppExport SEXP _openxlsx_buildMatrixMixed(SEXP vSEXP, SEXP rowIndSEXP, SEXP colIndSEXP, SEXP colNamesSEXP, SEXP nRowsSEXP, SEXP nColsSEXP, SEXP charColsSEXP, SEXP dateColsSEXP) { BEGIN_RCPP Rcpp::RObject rcpp_result_gen; Rcpp::RNGScope rcpp_rngScope_gen; Rcpp::traits::input_parameter< CharacterVector >::type v(vSEXP); Rcpp::traits::input_parameter< IntegerVector >::type rowInd(rowIndSEXP); Rcpp::traits::input_parameter< IntegerVector >::type colInd(colIndSEXP); Rcpp::traits::input_parameter< CharacterVector >::type colNames(colNamesSEXP); Rcpp::traits::input_parameter< int >::type nRows(nRowsSEXP); Rcpp::traits::input_parameter< int >::type nCols(nColsSEXP); Rcpp::traits::input_parameter< IntegerVector >::type charCols(charColsSEXP); Rcpp::traits::input_parameter< IntegerVector >::type dateCols(dateColsSEXP); rcpp_result_gen = Rcpp::wrap(buildMatrixMixed(v, rowInd, colInd, colNames, nRows, nCols, charCols, dateCols)); return rcpp_result_gen; END_RCPP } // matrixRowInds IntegerVector matrixRowInds(IntegerVector indices); RcppExport SEXP _openxlsx_matrixRowInds(SEXP indicesSEXP) { BEGIN_RCPP Rcpp::RObject rcpp_result_gen; Rcpp::RNGScope rcpp_rngScope_gen; Rcpp::traits::input_parameter< IntegerVector >::type indices(indicesSEXP); rcpp_result_gen = Rcpp::wrap(matrixRowInds(indices)); return rcpp_result_gen; END_RCPP } // build_table_xml CharacterVector build_table_xml(std::string table, std::string tableStyleXML, std::string ref, std::vector colNames, bool showColNames, bool withFilter); RcppExport SEXP _openxlsx_build_table_xml(SEXP tableSEXP, SEXP tableStyleXMLSEXP, SEXP refSEXP, SEXP colNamesSEXP, SEXP showColNamesSEXP, SEXP withFilterSEXP) { BEGIN_RCPP Rcpp::RObject rcpp_result_gen; Rcpp::RNGScope rcpp_rngScope_gen; Rcpp::traits::input_parameter< std::string >::type table(tableSEXP); Rcpp::traits::input_parameter< std::string >::type tableStyleXML(tableStyleXMLSEXP); Rcpp::traits::input_parameter< std::string >::type ref(refSEXP); Rcpp::traits::input_parameter< std::vector >::type colNames(colNamesSEXP); Rcpp::traits::input_parameter< bool >::type showColNames(showColNamesSEXP); Rcpp::traits::input_parameter< bool >::type withFilter(withFilterSEXP); rcpp_result_gen = Rcpp::wrap(build_table_xml(table, tableStyleXML, ref, colNames, showColNames, withFilter)); return rcpp_result_gen; END_RCPP } // write_worksheet_xml_2 SEXP write_worksheet_xml_2(std::string prior, std::string post, Reference sheet_data, Nullable row_heights_, Nullable outline_levels_, std::string R_fileName); RcppExport SEXP _openxlsx_write_worksheet_xml_2(SEXP priorSEXP, SEXP postSEXP, SEXP sheet_dataSEXP, SEXP row_heights_SEXP, SEXP outline_levels_SEXP, SEXP R_fileNameSEXP) { BEGIN_RCPP Rcpp::RObject rcpp_result_gen; Rcpp::RNGScope rcpp_rngScope_gen; Rcpp::traits::input_parameter< std::string >::type prior(priorSEXP); Rcpp::traits::input_parameter< std::string >::type post(postSEXP); Rcpp::traits::input_parameter< Reference >::type sheet_data(sheet_dataSEXP); Rcpp::traits::input_parameter< Nullable >::type row_heights_(row_heights_SEXP); Rcpp::traits::input_parameter< Nullable >::type outline_levels_(outline_levels_SEXP); Rcpp::traits::input_parameter< std::string >::type R_fileName(R_fileNameSEXP); rcpp_result_gen = Rcpp::wrap(write_worksheet_xml_2(prior, post, sheet_data, row_heights_, outline_levels_, R_fileName)); return rcpp_result_gen; END_RCPP } static const R_CallMethodDef CallEntries[] = { {"_openxlsx_calc_column_widths", (DL_FUNC) &_openxlsx_calc_column_widths, 7}, {"_openxlsx_convert_to_excel_ref", (DL_FUNC) &_openxlsx_convert_to_excel_ref, 2}, {"_openxlsx_convert_from_excel_ref", (DL_FUNC) &_openxlsx_convert_from_excel_ref, 1}, {"_openxlsx_convert_to_excel_ref_expand", (DL_FUNC) &_openxlsx_convert_to_excel_ref_expand, 3}, {"_openxlsx_isInternalHyperlink", (DL_FUNC) &_openxlsx_isInternalHyperlink, 1}, {"_openxlsx_write_file", (DL_FUNC) &_openxlsx_write_file, 4}, {"_openxlsx_cppReadFile", (DL_FUNC) &_openxlsx_cppReadFile, 1}, {"_openxlsx_read_file_newline", (DL_FUNC) &_openxlsx_read_file_newline, 1}, {"_openxlsx_get_letters", (DL_FUNC) &_openxlsx_get_letters, 0}, {"_openxlsx_markUTF8", (DL_FUNC) &_openxlsx_markUTF8, 2}, {"_openxlsx_loadworksheets", (DL_FUNC) &_openxlsx_loadworksheets, 4}, {"_openxlsx_getNodes", (DL_FUNC) &_openxlsx_getNodes, 2}, {"_openxlsx_getOpenClosedNode", (DL_FUNC) &_openxlsx_getOpenClosedNode, 3}, {"_openxlsx_getAttr", (DL_FUNC) &_openxlsx_getAttr, 2}, {"_openxlsx_getChildlessNode_ss", (DL_FUNC) &_openxlsx_getChildlessNode_ss, 2}, {"_openxlsx_getChildlessNode", (DL_FUNC) &_openxlsx_getChildlessNode, 2}, {"_openxlsx_get_extLst_Major", (DL_FUNC) &_openxlsx_get_extLst_Major, 1}, {"_openxlsx_cell_ref_to_col", (DL_FUNC) &_openxlsx_cell_ref_to_col, 1}, {"_openxlsx_int_2_cell_ref", (DL_FUNC) &_openxlsx_int_2_cell_ref, 1}, {"_openxlsx_get_shared_strings", (DL_FUNC) &_openxlsx_get_shared_strings, 2}, {"_openxlsx_getCellInfo", (DL_FUNC) &_openxlsx_getCellInfo, 6}, {"_openxlsx_read_workbook", (DL_FUNC) &_openxlsx_read_workbook, 11}, {"_openxlsx_calc_number_rows", (DL_FUNC) &_openxlsx_calc_number_rows, 2}, {"_openxlsx_map_cell_types_to_integer", (DL_FUNC) &_openxlsx_map_cell_types_to_integer, 1}, {"_openxlsx_map_cell_types_to_char", (DL_FUNC) &_openxlsx_map_cell_types_to_char, 1}, {"_openxlsx_build_cell_types_integer", (DL_FUNC) &_openxlsx_build_cell_types_integer, 2}, {"_openxlsx_buildCellTypes", (DL_FUNC) &_openxlsx_buildCellTypes, 2}, {"_openxlsx_build_cell_merges", (DL_FUNC) &_openxlsx_build_cell_merges, 1}, {"_openxlsx_buildCellList", (DL_FUNC) &_openxlsx_buildCellList, 3}, {"_openxlsx_write_worksheet_xml", (DL_FUNC) &_openxlsx_write_worksheet_xml, 4}, {"_openxlsx_buildMatrixNumeric", (DL_FUNC) &_openxlsx_buildMatrixNumeric, 6}, {"_openxlsx_buildMatrixMixed", (DL_FUNC) &_openxlsx_buildMatrixMixed, 8}, {"_openxlsx_matrixRowInds", (DL_FUNC) &_openxlsx_matrixRowInds, 1}, {"_openxlsx_build_table_xml", (DL_FUNC) &_openxlsx_build_table_xml, 6}, {"_openxlsx_write_worksheet_xml_2", (DL_FUNC) &_openxlsx_write_worksheet_xml_2, 6}, {NULL, NULL, 0} }; RcppExport void R_init_openxlsx(DllInfo *dll) { R_registerRoutines(dll, NULL, CallEntries, NULL, NULL); R_useDynamicSymbols(dll, FALSE); } openxlsx/src/read_workbook.cpp0000644000176200001440000004440014656165607016277 0ustar liggesusers #include "openxlsx.h" IntegerVector which_cpp(Rcpp::LogicalVector x) { IntegerVector v = seq(0, x.size() - 1); return v[x]; } // [[Rcpp::export]] CharacterVector get_shared_strings(std::string xmlFile, bool isFile){ CharacterVector x; size_t pos = 0; std::string line; std::vector lines; if(isFile){ // READ IN FILE ifstream file; file.open(xmlFile.c_str()); while ( std::getline(file, line) ) { // skip empty lines: if (line.empty()) continue; lines.push_back(line); } line = ""; int n = lines.size(); for(int i = 0;i < n; ++i) line += lines[i] + "\n"; }else{ line = xmlFile; } x = getNodes(line, ""); // define variables for sharedString part int n = x.size(); CharacterVector strs(n); std::fill(strs.begin(), strs.end(), NA_STRING); std::string xml; size_t endPos = 0; std::string ttag = "", 0); if(pos == std::string::npos){ // NO INLINE FORMATTING for(int i = 0; i < n; i++){ // find opening tag xml = x[i]; pos = xml.find(ttag, 0); // find ttag if(pos != std::string::npos){ if(xml[pos+2] != '/'){ pos = xml.find(tag, pos+1); // find where opening ttag ends endPos = xml.find(tagEnd, pos+1); // find where the node ends (closing tag) strs[i] = xml.substr(pos+1, endPos-pos - 1).c_str(); } } } }else{ // we have inline formatting for(int i = 0; i < n; i++){ // find opening tag xml = x[i]; pos = xml.find(ttag, 0); // find ttag if(xml[pos+2] != '/'){ strs[i] = ""; while(1){ if(xml[pos+2] == '/'){ break; }else{ pos = xml.find(tag, pos+1); // find where opening ttag ends endPos = xml.find(tagEnd, pos+1); // find where the node ends (closing tag) strs[i] += xml.substr(pos+1, endPos-pos - 1).c_str(); pos = xml.find(ttag, endPos); // find ttag if(pos == std::string::npos) break; } } } } // end of for loop } // end of else inline formatting return wrap(strs); } // [[Rcpp::export]] List getCellInfo(std::string xmlFile, CharacterVector sharedStrings, bool skipEmptyRows, int startRow, IntegerVector rows, bool getDates){ //read in file std::string buf; std::string xml = read_file_newline(xmlFile); std::string xml2 = ""; std::string rtag = "r="; std::string ttag = " t="; std::string stag = " s="; std::string tagEnd = "\""; std::string vtag = ""; std::string vtag2 = ""); // find sheetData size_t endPos = 0; // If no data if(pos == std::string::npos){ res = List::create(Rcpp::Named("nRows") = 0, Rcpp::Named("r") = 0); return res; } xml = xml.substr(pos + 11); // get from "sheedData" to the end xml2 = xml; // startRow cut off int row_i = 0; if(startRow > 1){ //find r and check the row number pos = xml.find("= startRow){ xml = xml.substr(pos); break; }else{ pos = pos + 8; } pos = xml.find("= row_i]; int nr_sub = rows.size(); if(nr_sub > 0){ for(int i = 0; i < nr; i++){ row_xml_i = xml_rows[i]; pos = row_xml_i.find(" tag and end tag endPos = cell.find("", 0); if(endPos != std::string::npos){ pos = cell.find("", pos); v[j] = cell.substr(pos + 1, endPos - pos - 1); has_v = true; } // find tag and end tag endPos = cell.find("", 0); if(endPos != std::string::npos){ pos = cell.find("", pos); v[j] = cell.substr(pos + 4, endPos - pos - 4); // skip and ", pos_f + 3); // if(endPos == std::string::npos){ // endPos = cell.find("/>", pos_f + 3); // f[j] = cell.substr(pos_f, endPos - pos_f + 2); // }else{ // f[j] = cell.substr(pos_f, endPos - pos_f + 4); // } has_f = true; // do we really have t if(pos_t < pos_f){ endPos = cell.find(tagEnd, pos_t + 4); // find next " t[j] = cell.substr(pos_t + 4, endPos - pos_t - 4); } }else if(pos_t != std::string::npos){ // only have t endPos = cell.find(tagEnd, pos_t + 4); // find next " t[j] = cell.substr(pos_t + 4, endPos - pos_t - 4); }else if(pos_f != std::string::npos){ // only have f // endPos = cell.find("", pos_f + 3); // if(endPos == std::string::npos){ // endPos = cell.find("/>", pos_f + 3); // f[j] = cell.substr(pos_f, endPos - pos_f + 2); // }else{ // f[j] = cell.substr(pos_f, endPos - pos_f + 4); // } has_f = true; } /* since we return only a data frame, we do the preparation here */ if(t[j] == "s"){ auto ss_ind = atoi(v[j]); v[j] = sharedStrings[ss_ind]; if(v[j] == "openxlsx_na_vlu"){ v[j] = NA_STRING; } string_refs[j] = r[j]; }else if(t[j] == "e") { v[j] = NA_STRING; // exception from loadWorkbook }else if(t[j] == "b"){ if(v[j] == "1"){ v[j] = "TRUE"; }else{ v[j] = "FALSE"; } string_refs[j] = r[j]; }else if((t[j] == "str") || (t[j] == "inlineStr")){ string_refs[j] = r[j]; } /* preparation is finished */ if(has_f & (!has_v) & (t[j] != "n")){ v[j] = NA_STRING; }else if(has_f & !has_v){ t[j] = NA_STRING; v[j] = NA_STRING; }else if(has_f | has_v){ }else{ //only have s and r t[j] = NA_STRING; v[j] = NA_STRING; } j++; // INCREMENT OVER OCCURENCES pos = nextPos; pos_t = nextPos; pos_f = nextPos; } // end of while loop over occurences } // END OF CELL AND ATTRIBUTION GATHERING string_refs = string_refs[!is_na(string_refs)]; int nRows = calc_number_rows(r, skipEmptyRows); res = List::create(Rcpp::Named("r") = r, Rcpp::Named("string_refs") = string_refs, Rcpp::Named("v") = v, Rcpp::Named("s") = s, Rcpp::Named("nRows") = nRows, Rcpp::Named("cellMerge") = merge_cell_xml ); return wrap(res); } // [[Rcpp::export]] SEXP read_workbook(IntegerVector cols_in, IntegerVector rows_in, CharacterVector v, IntegerVector string_inds, LogicalVector is_date, bool hasColNames, char hasSepNames, bool skipEmptyRows, bool skipEmptyCols, int nRows, Function clean_names ){ IntegerVector cols = clone(cols_in); IntegerVector rows = clone(rows_in); int nCells = rows.size(); int nDates = is_date.size(); /* do we have any dates */ bool has_date; if(nDates == 1){ if(is_true(any(is_na(is_date)))){ has_date = false; }else{ has_date = true; } }else if(nDates == nCells){ has_date = true; }else{ has_date = false; } bool has_strings = true; IntegerVector st_inds0 (1); if (string_inds.size()) st_inds0[0] = string_inds[0]; if(is_true(all(is_na(st_inds0)))) has_strings = false; IntegerVector uni_cols = sort_unique(cols); if(!skipEmptyCols){ // want to keep all columns - just create a sequence from 1:max(cols) uni_cols = seq(1, max(uni_cols)); cols = cols - 1; }else{ cols = match(cols, uni_cols) - 1; } // scale columns from i:j to 1:(j-i+1) int nCols = *std::max_element(cols.begin(), cols.end()) + 1; // scale rows from i:j to 1:(j-i+1) IntegerVector uni_rows = sort_unique(rows); if(skipEmptyRows){ rows = match(rows, uni_rows) - 1; //int nRows = *std::max_element(rows.begin(), rows.end()) + 1; }else{ rows = rows - rows[0]; } // Check if first row are all strings //get first row number CharacterVector col_names(nCols); IntegerVector removeFlag; int pos = 0; // If we are told col_names exist take the first row and fill any gaps with X.i if(hasColNames){ int row_1 = rows[0]; IntegerVector row1_inds = which_cpp(rows == row_1); IntegerVector header_cols = cols[row1_inds]; IntegerVector header_inds = match(seq(0, nCols), na_omit(header_cols)); LogicalVector missing_header = is_na(header_inds); // looping over each column for(unsigned short i=0; i < nCols; i++){ std::string nm = "X" + std::to_string(i + 1); if(missing_header[i]){ // a missing header element col_names[i] = nm.c_str(); }else{ // this is a header elements col_names[i] = v[pos]; if(col_names[i] == "NA"){ col_names[i] = nm.c_str(); } pos++; } } // tidy up column names col_names = clean_names(col_names,hasSepNames); //-------------------------------------------------------------------------------- // Remove elements from rows, cols, v that have been used as headers // I've used the first pos elements as headers // stringInds contains the indexes of v which are strings // string_inds <- string_inds[string_inds > pos] if(has_strings){ string_inds = string_inds[string_inds > pos]; string_inds = string_inds - pos; } rows.erase (rows.begin(), rows.begin() + pos); rows = rows - 1; v.erase (v.begin(), v.begin() + pos); //If nothing left return a data.frame with 0 rows if(rows.size() == 0){ List dfList(nCols); IntegerVector rowNames(0); for(int i = 0; i < nCols; i++){ dfList[i] = LogicalVector(0); // this is what read.table does (bool type) } dfList.attr("names") = col_names; dfList.attr("row.names") = rowNames; dfList.attr("class") = "data.frame"; return wrap(dfList); } cols.erase(cols.begin(), cols.begin() + pos); nRows--; // decrement number of rows as first row is now being used as col_names nCells = nCells - pos; // End Remove elements from rows, cols, v that have been used as headers //-------------------------------------------------------------------------------- }else{ // else col_names is FALSE for(unsigned short i =0; i < nCols; i++){ std::string nm = "X" + std::to_string(i + 1); col_names[i] = nm.c_str(); } } // ------------------ column names complete // Possible there are no string_inds to begin with and value of string_inds is 0 // Possible we have string_inds but they have now all been used up by headers bool allNumeric = false; if((string_inds.size() == 0) || is_true(all(is_na(string_inds)))) allNumeric = true; if(has_date){ if(is_true(any(is_date))) allNumeric = false; } // If we have colnames some elements were used to create these -so we remove the corresponding number of elements if(hasColNames && has_date) is_date.erase(is_date.begin(), is_date.begin() + pos); //Intialise return data.frame SEXP m; // for(int i = 0; i < rows.size(); i++) // Rcout << "rows[i]: " << rows[i] << endl; // // Rcout << "nRows " << nRows << endl; // Rcout << "nCols: " << nCols << endl; // Rcout << "cols.size(): " << cols.size() << endl; // Rcout << "rows.size(): " << rows.size() << endl; // Rcout << "is_date.size(): " << is_date.size() << endl; // Rcout << "v.size(): " << v.size() << endl; // Rcout << "has_date: " << has_date << endl; if(allNumeric){ m = buildMatrixNumeric(v, rows, cols, col_names, nRows, nCols); }else{ // If it contains any strings it will be a character column IntegerVector char_cols_unique; if(all(is_na(string_inds))){ char_cols_unique = -1; }else{ IntegerVector columns_which_are_characters = cols[string_inds - 1]; char_cols_unique = unique(columns_which_are_characters); } //date columns IntegerVector date_columns(1); if(has_date){ date_columns = cols[is_date]; date_columns = sort_unique(date_columns); }else{ date_columns[0] = -1; } // List d(10); // d[0] = v; // d[2] = rows; // d[3] = cols; // d[4] = col_names; // d[5] = nRows; // d[6] = nCols; // d[7] = char_cols_unique; // d[8] = date_columns; // return(wrap(d)); // Rcout << "Running buildMatrixMixed" << endl; m = buildMatrixMixed(v, rows, cols, col_names, nRows, nCols, char_cols_unique, date_columns); } return wrap(m) ; } // [[Rcpp::export]] int calc_number_rows(CharacterVector x, bool skipEmptyRows){ int n = x.size(); if(n == 0) return(0); int nRows; if(skipEmptyRows){ CharacterVector res(n); std::string r; for(int i = 0; i < n; i++){ r = x[i]; r.erase(std::remove_if(r.begin(), r.end(), ::isalpha), r.end()); res[i] = r; } CharacterVector uRes = unique(res); nRows = uRes.size(); }else{ std::string fRef = as(x[0]); std::string lRef = as(x[n-1]); fRef.erase(std::remove_if(fRef.begin(), fRef.end(), ::isalpha), fRef.end()); lRef.erase(std::remove_if(lRef.begin(), lRef.end(), ::isalpha), lRef.end()); int firstRow = atoi(fRef.c_str()); int lastRow = atoi(lRef.c_str()); nRows = lastRow - firstRow + 1; } return(nRows); } openxlsx/src/helper_functions.cpp0000644000176200001440000001467414155600364017014 0ustar liggesusers #include "openxlsx.h" // [[Rcpp::export]] SEXP calc_column_widths(Reference sheet_data , std::vector sharedStrings , IntegerVector autoColumns , NumericVector widths , float baseFontCharWidth , float minW , float maxW){ int n = sheet_data.field("n_elements"); IntegerVector cell_types = sheet_data.field("t"); StringVector cell_values(sheet_data.field("v")); IntegerVector cell_cols = sheet_data.field("cols"); NumericVector cell_n_character(n); CharacterVector r(n); int nLen; std::string tmp; // get widths of all values for(int i = 0; i < n; i++){ if(cell_types[i] == 1){ // "s" cell_n_character[i] = sharedStrings[atoi(cell_values[i])].length() - 37; //-37 for shared string tags around text }else{ tmp = cell_values[i]; nLen = tmp.length(); cell_n_character[i] = min(nLen, 11); // For numerics - max width is 11 } } // get column for each value // reducing to only the columns that are auto LogicalVector notNA = !is_na(match(cell_cols, autoColumns)); cell_cols = cell_cols[notNA]; cell_n_character = cell_n_character[notNA]; widths = widths[notNA]; IntegerVector unique_cell_cols = sort_unique(cell_cols); size_t k = unique_cell_cols.size(); NumericVector column_widths(k); // for each unique column, get all widths for that column and take max for(size_t i = 0; i < k; i++){ NumericVector wTmp = cell_n_character[cell_cols == unique_cell_cols[i]]; NumericVector thisColWidths = widths[cell_cols == unique_cell_cols[i]]; column_widths[i] = max(wTmp * thisColWidths / baseFontCharWidth); } column_widths[column_widths < minW] = minW; column_widths[column_widths > maxW] = maxW; // assign column names column_widths.attr("names") = unique_cell_cols; return(wrap(column_widths)); } // [[Rcpp::export]] SEXP convert_to_excel_ref(IntegerVector cols, std::vector LETTERS){ int n = cols.size(); CharacterVector res(n); int x; int modulo; for(int i = 0; i < n; i++){ x = cols[i]; string columnName; while(x > 0){ modulo = (x - 1) % 26; columnName = LETTERS[modulo] + columnName; x = (x - modulo) / 26; } res[i] = columnName; } return res ; } // [[Rcpp::export]] IntegerVector convert_from_excel_ref( CharacterVector x ){ // This function converts the Excel column letter to an integer std::vector r = as >(x); int n = r.size(); int k; std::string a; IntegerVector colNums(n); char A = 'A'; int aVal = (int)A - 1; for(int i = 0; i < n; i++){ a = r[i]; // remove digits from string a.erase(std::remove_if(a.begin()+1, a.end(), ::isdigit), a.end()); int sum = 0; k = a.length(); for (int j = 0; j < k; j++){ sum *= 26; sum += (a[j] - aVal); } colNums[i] = sum; } return colNums; } // [[Rcpp::export]] SEXP convert_to_excel_ref_expand(const std::vector& cols, const std::vector& LETTERS, const std::vector& rows){ int n = cols.size(); int nRows = rows.size(); std::vector res(n); //Convert col number to excel col letters size_t x; size_t modulo; for(int i = 0; i < n; i++){ x = cols[i]; string columnName; while(x > 0){ modulo = (x - 1) % 26; columnName = LETTERS[modulo] + columnName; x = (x - modulo) / 26; } res[i] = columnName; } CharacterVector r(n*nRows); CharacterVector names(n*nRows); size_t c = 0; for(int i=0; i < nRows; i++) for(int j=0; j < n; j++){ r[c] = res[j] + rows[i]; names[c] = rows[i]; c++; } r.attr("names") = names; return wrap(r) ; } // [[Rcpp::export]] LogicalVector isInternalHyperlink(CharacterVector x){ int n = x.size(); std::string xml; std::string tag = "r:id="; size_t found; LogicalVector isInternal(n); for(int i = 0; i < n; i++){ // find location tag xml = x[i]; found = xml.find(tag, 0); if (found != std::string::npos){ isInternal[i] = false; }else{ isInternal[i] = true; } } return wrap(isInternal) ; } string itos(int i){ // convert int to string stringstream s; s << i; return s.str(); } // [[Rcpp::export]] SEXP write_file(std::string head = "", std::string body = "", std::string tail = "", std::string fl = "") { const char * s = fl.c_str(); std::ofstream xmlFile; xmlFile.open (s); xmlFile << ""; xmlFile << head; xmlFile << body; xmlFile << tail; xmlFile.close(); return R_NilValue; } // [[Rcpp::export]] std::string cppReadFile(std::string xmlFile){ std::string buf; std::string xml; ifstream file; file.open(xmlFile.c_str()); while (file >> buf) xml += buf + ' '; return xml; } // [[Rcpp::export]] std::string read_file_newline(std::string xmlFile){ ifstream file; file.open(xmlFile.c_str()); std::vector lines; std::string line; while ( std::getline(file, line) ) { // skip empty lines: if (line.empty()) continue; lines.push_back(line); } line = ""; int n = lines.size(); for(int i = 0;i < n; ++i) line += lines[i] + "\n"; return line; } // [[Rcpp::export]] std::vector get_letters(){ std::vector LETTERS(26); LETTERS[0] = "A"; LETTERS[1] = "B"; LETTERS[2] = "C"; LETTERS[3] = "D"; LETTERS[4] = "E"; LETTERS[5] = "F"; LETTERS[6] = "G"; LETTERS[7] = "H"; LETTERS[8] = "I"; LETTERS[9] = "J"; LETTERS[10] = "K"; LETTERS[11] = "L"; LETTERS[12] = "M"; LETTERS[13] = "N"; LETTERS[14] = "O"; LETTERS[15] = "P"; LETTERS[16] = "Q"; LETTERS[17] = "R"; LETTERS[18] = "S"; LETTERS[19] = "T"; LETTERS[20] = "U"; LETTERS[21] = "V"; LETTERS[22] = "W"; LETTERS[23] = "X"; LETTERS[24] = "Y"; LETTERS[25] = "Z"; return(LETTERS); } // [[Rcpp::export]] CharacterVector markUTF8(CharacterVector x, bool clone) { CharacterVector out; if (clone) { out = Rcpp::clone(x); } else { out = x; } const size_t n = x.size(); for (size_t i = 0; i < n; ++i) { out[i] = Rf_mkCharCE(x[i], CE_UTF8); } return out; } openxlsx/src/write_data.cpp0000644000176200001440000001214314656134061015557 0ustar liggesusers#include "openxlsx.h" // [[Rcpp::export]] IntegerVector map_cell_types_to_integer(CharacterVector t){ // 0: "n" // 1: "s" // 2: "b" // 3: "str" // 4: "e" // 9: "h" size_t n = t.size(); IntegerVector t_res(n); for (size_t i = 0; i < n; i++) { if (CharacterVector::is_na(t[i])) { t_res[i] = NA_INTEGER; } else if (t[i] == "n") { t_res[i] = 0; } else if (t[i] == "s") { t_res[i] = 1; } else if (t[i] == "b") { t_res[i] = 2; } else if (t[i] == "str") { t_res[i] = 3; } else if (t[i] == "e") { t_res[i] = 4; } else if (t[i] == "inlineStr") { t_res[i] = 5; } } return t_res; } // [[Rcpp::export]] CharacterVector map_cell_types_to_char(IntegerVector t){ // 0: "n" // 1: "s" // 2: "b" // 3: "str" // 4: "e" // 9: "h" size_t n = t.size(); CharacterVector t_res(n); for (size_t i = 0; i < n; i++) { if (IntegerVector::is_na(t[i])) { t_res[i] = NA_STRING; } else if (t[i] == 0){ t_res[i] = "n"; } else if (t[i] == 1){ t_res[i] = "s"; } else if (t[i] == 2){ t_res[i] = "b"; } else if (t[i] == 3){ t_res[i] = "str"; } else if (t[i] == 4){ t_res[i] = "e"; } else if (t[i] == 5){ t_res[i] = "inlineStr"; } else { t_res[i] = "s"; } } return t_res; } // [[Rcpp::export]] IntegerVector build_cell_types_integer(CharacterVector classes, int n_rows){ // 0: "n" // 1: "s" // 2: "b" // 9: "h" // 4: TBC // 5: TBC size_t n_cols = classes.size(); IntegerVector col_t(n_cols); for(size_t i = 0; i < n_cols; i++){ if ((classes[i] == "numeric") || (classes[i] == "integer") || (classes[i] == "raw")) { col_t[i] = 0; } else if (classes[i] == "character"){ col_t[i] = 1; } else if (classes[i] == "logical"){ col_t[i] = 2; } else if (classes[i] == "hyperlink"){ col_t[i] = 9; } else if (classes[i] == "openxlsx_formula"){ col_t[i] = NA_INTEGER; } else { col_t[i] = 1; } } IntegerVector cell_types = rep(col_t, n_rows); return cell_types; } // [[Rcpp::export]] CharacterVector buildCellTypes(CharacterVector classes, int nRows){ int nCols = classes.size(); CharacterVector colLabels(nCols); for(int i=0; i < nCols; i++){ if ((classes[i] == "numeric") || (classes[i] == "integer") || (classes[i] == "raw")) { colLabels[i] = "n"; } else if (classes[i] == "character") { colLabels[i] = "s"; } else if (classes[i] == "logical") { colLabels[i] = "b"; } else if (classes[i] == "hyperlink") { colLabels[i] = "h"; } else if (classes[i] == "openxlsx_formula") { colLabels[i] = NA_STRING; } else { colLabels[i] = "s"; } } CharacterVector cellTypes = rep(colLabels, nRows); return wrap(cellTypes); } // [[Rcpp::export]] List build_cell_merges(List comps){ size_t nMerges = comps.size(); List res(nMerges); for (size_t i =0; i < nMerges; i++) { IntegerVector col = convert_from_excel_ref(comps[i]); CharacterVector comp = comps[i]; IntegerVector row(2); for (size_t j = 0; j < 2; j++) { std::string rt(comp[j]); rt.erase(std::remove_if(rt.begin(), rt.end(), ::isalpha), rt.end()); row[j] = atoi(rt.c_str()); } size_t ca(col[0]); size_t ck = size_t(col[1]) - ca + 1; std::vector v(ck) ; for (size_t j = 0; j < ck; j++) v[j] = j + ca; size_t ra(row[0]); size_t rk = int(row[1]) - ra + 1; std::vector r(rk) ; for (size_t j = 0; j < rk; j++) r[j] = j + ra; CharacterVector M(ck*rk); int ind = 0; for (size_t j = 0; j < ck; j++) { for (size_t k = 0; k < rk; k++) { char name[30]; snprintf(&(name[0]), sizeof(name), "%d-%d", r[k], v[j]); M(ind) = name; ind++; } } res[i] = M; } return wrap(res) ; } // [[Rcpp::export]] List buildCellList(CharacterVector r, CharacterVector t, CharacterVector v) { //Valid combinations // r t v // T F F // T T T // F F F // T F T (must be a formula) int n = r.size(); List cells(n); LogicalVector hasV = !is_na(v); LogicalVector hasR = !is_na(r); LogicalVector hasT = !is_na(t); for(int i=0; i < n; i++){ if (hasR[i]){ if (hasV[i]){ if (hasT[i]){ // r t v // T T T (2) cells[i] = CharacterVector::create( Named("r") = r[i], Named("t") = t[i], Named("v") = v[i], Named("f") = NA_STRING ); } else { // r t f // T T T (4 - formula) } } else { // r t v // T F F (1) cells[i] = CharacterVector::create( Named("r") = r[i], Named("t") = NA_STRING, Named("v") = NA_STRING, Named("f") = NA_STRING ); } } else { // r t v // F F F (3) cells[i] = CharacterVector::create( Named("r") = NA_STRING, Named("t") = NA_STRING, Named("v") = NA_STRING, Named("f") = NA_STRING ); } } // end of for loop return wrap(cells) ; } openxlsx/src/write_file.cpp0000644000176200001440000002205414672624216015573 0ustar liggesusers #include "openxlsx.h" //' @import Rcpp // [[Rcpp::export]] SEXP write_worksheet_xml(std::string prior , std::string post , Reference sheet_data , std::string R_fileName){ // open file and write header XML const char * s = R_fileName.c_str(); std::ofstream xmlFile; xmlFile.open (s); xmlFile << ""; xmlFile << prior; //NOTES ON WHY THIS WORKS // - If no row heights every row has children // - If data only added once, sheet_data will be in order // - Thus all rows have children (all starting row tags are open) and no need to sort/find // DEV START IntegerVector cell_row = sheet_data.field("rows"); // If no data write childless node and return if(cell_row.size() == 0){ xmlFile << ""; xmlFile << post; xmlFile.close(); return Rcpp::wrap(0); } CharacterVector cell_col = int_2_cell_ref(sheet_data.field("cols")); CharacterVector cell_types = map_cell_types_to_char(sheet_data.field("t")); CharacterVector cell_value = sheet_data.field("v"); CharacterVector cell_fn = sheet_data.field("f"); CharacterVector style_id = sheet_data.field("style_id"); CharacterVector unique_rows(sort_unique(cell_row)); size_t n = cell_row.size(); size_t k = unique_rows.size(); std::string xml; std::string cell_xml; // write sheet_data // write xml prior to sheetData and opening tag xmlFile << ""; size_t j = 0; String currentRow = unique_rows[0]; for(size_t i = 0; i < k; i++){ cell_xml = ""; while(currentRow == unique_rows[i]){ //cell XML strings cell_xml += "(cell_types[j]).compare("inlineStr") == 0){ cell_xml += "\" t=\"" + cell_types[j] + "\">" + "" + cell_value[j] + ""; }else{ cell_xml += "\" t=\"" + cell_types[j] + "\">" + cell_value[j] + ""; } }else{ if(CharacterVector::is_na(cell_value[j])){ // If v is NA cell_xml += "\" t=\"" + cell_types[j] + "\">" + cell_fn[j] + ""; }else{ cell_xml += "\" t=\"" + cell_types[j] + "\">" + cell_fn[j] + "" + cell_value[j] + ""; } } }else{ cell_xml += "\"/>"; } j += 1; if(j == n) break; currentRow = cell_row[j]; } xmlFile << "" + cell_xml + ""; } // write closing tag, post xml and close xmlFile << ""; xmlFile << post; xmlFile.close(); return Rcpp::wrap(0); } // [[Rcpp::export]] SEXP buildMatrixNumeric(CharacterVector v, IntegerVector rowInd, IntegerVector colInd, CharacterVector colNames, int nRows, int nCols){ LogicalVector isNA_element = is_na(v); if(is_true(any(isNA_element))){ v = v[!isNA_element]; rowInd = rowInd[!isNA_element]; colInd = colInd[!isNA_element]; } int k = v.size(); NumericMatrix m(nRows, nCols); std::fill(m.begin(), m.end(), NA_REAL); for(int i = 0; i < k; i++) m(rowInd[i], colInd[i]) = atof(v[i]); List dfList(nCols); for(int i=0; i < nCols; ++i) dfList[i] = m(_,i); std::vector rowNames(nRows); for(int i = 0;i < nRows; ++i) rowNames[i] = i+1; dfList.attr("names") = colNames; dfList.attr("row.names") = rowNames; dfList.attr("class") = "data.frame"; return Rcpp::wrap(dfList); } // from openxlsx2: // similar to is.numeric(x) // returns true if string can be written as numeric and is not Inf // @param x a string input bool is_double(std::string x) { char *endp; double res; res = R_strtod(x.c_str(), &endp); if (strlen(endp) == 0 && std::isfinite(res)) { return 1; } return 0; } // [[Rcpp::export]] SEXP buildMatrixMixed(CharacterVector v, IntegerVector rowInd, IntegerVector colInd, CharacterVector colNames, int nRows, int nCols, IntegerVector charCols, IntegerVector dateCols){ /* List d(10); d[0] = v; d[1] = vn; d[2] = rowInd; d[3] = colInd; d[4] = colNames; d[5] = nRows; d[6] = nCols; d[7] = charCols; d[8] = dateCols; d[9] = originAdj; return(wrap(d)); */ int k = v.size(); std::string dt_str; // create and fill matrix CharacterMatrix m(nRows, nCols); std::fill(m.begin(), m.end(), NA_STRING); for(int i = 0;i < k; i++) m(rowInd[i], colInd[i]) = v[i]; // convert numerics to dates Rcpp::Environment pkg = Rcpp::Environment::namespace_env("openxlsx"); Rcpp::Function cTD = pkg["convertToDate"]; // this will be the return data.frame List dfList(nCols); // loop over each column and check type for(int i = 0; i < nCols; i++){ CharacterVector tmp(nRows); for(int ri = 0; ri < nRows; ri++) tmp[ri] = m(ri,i); LogicalVector notNAElements = !is_na(tmp); // If column is date class and no strings exist in column if( (std::find(dateCols.begin(), dateCols.end(), i) != dateCols.end()) && (std::find(charCols.begin(), charCols.end(), i) == charCols.end()) ){ // these are all dates and no characters --> safe to convert numerics DateVector datetmp(nRows); for(int ri=0; ri < nRows; ri++){ if(!notNAElements[ri]){ datetmp[ri] = NA_REAL; //IF TRUE, TRUE else FALSE }else{ dt_str = m(ri,i); try{ // Some values are incorrectly detected as dates. This regex determines if they are numerics. // If so, they are converted to Dates. if (is_double(dt_str)) { datetmp[ri] = as(cTD(dt_str)); } else { datetmp[ri] = Rcpp::Date(atoi(dt_str.substr(5,2).c_str()), atoi(dt_str.substr(8,2).c_str()), atoi(dt_str.substr(0,4).c_str()) ); } } catch(...) { Rcpp::Rcerr << "Error reading date:\n" << dt_str << "\nrow: " << ri+1 << "\ncol: " << i+1 << "\n"; throw; } } } dfList[i] = datetmp; // character columns }else if(std::find(charCols.begin(), charCols.end(), i) != charCols.end()){ // determine if column is logical or date bool logCol = true; for(int ri = 0; ri < nRows; ri++){ if(notNAElements[ri]){ if((m(ri, i) != "TRUE") && (m(ri, i) != "FALSE")){ logCol = false; break; } } } if(logCol){ LogicalVector logtmp(nRows); for(int ri=0; ri < nRows; ri++){ if(!notNAElements[ri]){ logtmp[ri] = NA_LOGICAL; //IF TRUE, TRUE else FALSE }else{ logtmp[ri] = (tmp[ri] == "TRUE"); } } dfList[i] = logtmp; }else{ dfList[i] = tmp; } }else{ // else if column NOT character class (thus numeric) NumericVector ntmp(nRows); for(int ri = 0; ri < nRows; ri++){ if(notNAElements[ri]){ ntmp[ri] = atof(m(ri, i)); }else{ ntmp[ri] = NA_REAL; } } dfList[i] = ntmp; } } std::vector rowNames(nRows); for(int i = 0;i < nRows; ++i) rowNames[i] = i+1; dfList.attr("names") = colNames; dfList.attr("row.names") = rowNames; dfList.attr("class") = "data.frame"; return wrap(dfList); } // [[Rcpp::export]] IntegerVector matrixRowInds(IntegerVector indices) { int n = indices.size(); LogicalVector notDup = !duplicated(indices); IntegerVector res(n); int j = -1; for(int i =0; i < n; i ++){ if(notDup[i]) j++; res[i] = j; } return wrap(res); } // [[Rcpp::export]] CharacterVector build_table_xml(std::string table, std::string tableStyleXML, std::string ref, std::vector colNames, bool showColNames, bool withFilter){ int n = colNames.size(); std::string tableCols; table += " totalsRowShown=\"0\">"; if(withFilter) table += ""; for(int i = 0; i < n; i ++){ tableCols += ""; } tableCols = "" + tableCols + ""; table = table + tableCols + tableStyleXML + "
"; CharacterVector out = wrap(table); return markUTF8(out); } openxlsx/src/write_file_2.cpp0000644000176200001440000001340314656134061016006 0ustar liggesusers #include "openxlsx.h" // [[Rcpp::export]] SEXP write_worksheet_xml_2( std::string prior , std::string post , Reference sheet_data , Nullable row_heights_ = R_NilValue , Nullable outline_levels_ = R_NilValue , std::string R_fileName = "output"){ // open file and write header XML const char * s = R_fileName.c_str(); std::ofstream xmlFile; xmlFile.open (s); xmlFile << ""; xmlFile << prior; IntegerVector cell_row = sheet_data.field("rows"); // If no data write childless node and return if(cell_row.size() == 0){ xmlFile << ""; xmlFile << post; xmlFile.close(); return Rcpp::wrap(0); } // sheet_data will be in order, just need to check for row_heights CharacterVector cell_col = int_2_cell_ref(sheet_data.field("cols")); CharacterVector cell_types = map_cell_types_to_char(sheet_data.field("t")); CharacterVector cell_value = sheet_data.field("v"); CharacterVector cell_fn = sheet_data.field("f"); CharacterVector style_id = sheet_data.field("style_id"); CharacterVector unique_rows(sort_unique(cell_row)); CharacterVector row_heights; CharacterVector row_heights_rows; size_t n_row_heights = 0; CharacterVector outline_levels; CharacterVector outline_levels_rows; CharacterVector outline_levels_hidden; size_t n_outline_levels = 0; if (row_heights_.isNotNull()) { row_heights = row_heights_; row_heights_rows = row_heights.attr("names"); n_row_heights = row_heights.size(); } if (outline_levels_.isNotNull()) { outline_levels = outline_levels_; outline_levels_rows = outline_levels.attr("names"); outline_levels_hidden = outline_levels.attr("hidden"); n_outline_levels = outline_levels.size(); } size_t n = cell_row.size(); size_t k = unique_rows.size(); std::string xml; std::string cell_xml; size_t j = 0; size_t h = 0; size_t l = 0; String current_row = unique_rows[0]; bool row_has_data = true; xmlFile << ""; for(size_t i = 0; i < k; i++){ cell_xml = ""; row_has_data = false; while(current_row == unique_rows[i]){ row_has_data = true; j += 1; if(CharacterVector::is_na(cell_col[j-1])){ //If r IS NA we have no row data we only have a rowHeight row_has_data = false; if(j == n) break; current_row = cell_row[j]; break; } //cell XML strings cell_xml += "(cell_types[j-1]).compare("inlineStr") == 0){ cell_xml += "\" t=\"" + cell_types[j-1] + "\">" + "" + cell_value[j-1] + ""; }else{ cell_xml += "\" t=\"" + cell_types[j-1] + "\">" + cell_value[j-1] + ""; } }else{ if(CharacterVector::is_na(cell_value[j-1])){ // If v is NA cell_xml += "\" t=\"" + cell_types[j-1] + "\">" + cell_fn[j-1] + ""; }else{ cell_xml += "\" t=\"" + cell_types[j-1] + "\">" + cell_fn[j-1] + "" + cell_value[j-1] + ""; } } }else if(!CharacterVector::is_na(cell_fn[j-1])){ cell_xml += "\">" + cell_fn[j-1] + ""; }else{ cell_xml += "\"/>"; } if(j == n) break; current_row = cell_row[j]; } // element has the following structure, where most components are optional: // // Handle one attribute after the other: xmlFile << ""; } else { xmlFile << "/>"; } } // All remaining grouped rows without content (ie. rows beyond the entries in unique_rows) need to be appended if ((!Rf_isNull(outline_levels_))) { while (l < n_outline_levels) { xmlFile << ""; xmlFile << post; //close file xmlFile.close(); return wrap(0); } openxlsx/src/load_workbook.cpp0000644000176200001440000007614414656134061016303 0ustar liggesusers #include "openxlsx.h" // [[Rcpp::export]] SEXP loadworksheets(Reference wb, List styleObjects, std::vector xmlFiles, LogicalVector is_chart_sheet){ List worksheets = wb.field("worksheets"); int n_sheets = is_chart_sheet.size(); CharacterVector sheetNames = wb.field("sheet_names"); // variable set up std::string tagEnd = "\""; std::string cell; List colWidths(n_sheets); List rowHeights(n_sheets); List wbstyleObjects(0); List outlineLevels(n_sheets); List colOutlineLevels(n_sheets); // loop over each worksheet file for(int i = 0; i < n_sheets; i++){ if(is_chart_sheet[i]){ colWidths[i] = List(0); rowHeights[i] = List(0); outlineLevels[i] = List(0); colOutlineLevels[i] = List(0); }else{ colWidths[i] = List(0); rowHeights[i] = List(0); outlineLevels[i] = List(0); colOutlineLevels[i] = List(0); Reference this_worksheet(worksheets[i]); Reference sheet_data(this_worksheet.field("sheet_data")); //read in file std::string xmlFile = xmlFiles[i]; std::string buf; std::string xml = read_file_newline(xmlFile); // ifstream file; // file.open(xmlFile.c_str()); // while (file >> buf) // xml += buf + ' '; size_t pos = xml.find(""); // find size_t endPos = 0; size_t tmp_pos = 0; bool has_data = true; if(pos == string::npos){ has_data = false; pos = xml.find(""); if(pos == string::npos){ pos = xml.find(""); } } /* --- Everything before pos --- */ std::string xml_pre = xml.substr(0, pos); // sheetPR CharacterVector sheetPr = getNodes(xml_pre, ""); if(sheetPr.size() == 0){ sheetPr = getNodes(xml_pre, "(sheetPr[j]); char ch = *sp.rbegin(); if(ch != '>') sp += ">"; sheetPr[j] = sp; } } if(sheetPr.size() == 0) sheetPr = getChildlessNode(xml_pre, "sheetPr"); if(sheetPr.size() > 0) this_worksheet.field("sheetPr") = sheetPr; // Freeze Panes CharacterVector node_xml = getChildlessNode(xml_pre, "pane"); if(node_xml.size() > 0) this_worksheet.field("freezePane") = node_xml; // SheetViews node_xml = getNodes(xml_pre, ""); if(node_xml.size() > 0) this_worksheet.field("sheetViews") = node_xml; //colwidths std::vector cols = getChildlessNode_ss(xml_pre, " 0){ NumericVector widths; IntegerVector columns_with_widths; IntegerVector columns_with_groups; CharacterVector column_hidden; CharacterVector col_outline; CharacterVector col_hidden; for (size_t ci = 0; ci < cols.size(); ci++) { double tmp_width = 0; std::string tmp_hidden; int min_c = 0; int max_c = 0; std::string tmp_coloutline; buf = cols[ci]; // If either custom widths or groupings, get column index if ((buf.find("customWidth", 0) != string::npos) || (buf.find("outlineLevel", 0) != string::npos)) { tmp_pos = buf.find("min=\"", 0); endPos = buf.find(tagEnd, tmp_pos + 5); min_c = atoi(buf.substr(tmp_pos + 5, endPos - tmp_pos - 5).c_str()); tmp_pos = buf.find("max=\"", 0); endPos = buf.find(tagEnd, tmp_pos + 5); max_c = atoi(buf.substr(tmp_pos + 5, endPos - tmp_pos - 5).c_str()); tmp_pos = buf.find("hidden=\"", 0); if (tmp_pos != string::npos) { endPos = buf.find(tagEnd, tmp_pos + 8); tmp_hidden = buf.substr(tmp_pos + 8, endPos - tmp_pos - 8); } else { tmp_hidden = "0"; } // If column has both a custom width and is part of a group if ((buf.find("customWidth", 0) != string::npos) && (buf.find("outlineLevel", 0) != string::npos)) { tmp_pos = buf.find("width=\"", 0); endPos = buf.find(tagEnd, tmp_pos + 7); tmp_width = atof(buf.substr(tmp_pos + 7, endPos - tmp_pos - 7).c_str()) - 0.71; tmp_pos = buf.find("outlineLevel=\"", 0); endPos = buf.find(tagEnd, tmp_pos + 14); tmp_coloutline = buf.substr(tmp_pos + 14, endPos - tmp_pos - 14); while (min_c <= max_c) { widths.push_back(tmp_width); columns_with_widths.push_back(min_c); columns_with_groups.push_back(min_c); column_hidden.push_back(tmp_hidden); col_hidden.push_back(tmp_hidden); col_outline.push_back(tmp_coloutline); min_c++; } } else if (buf.find("customWidth", 0) != string::npos) { // Column only has a custom width tmp_pos = buf.find("width=\"", 0); endPos = buf.find(tagEnd, tmp_pos + 7); tmp_width = atof(buf.substr(tmp_pos + 7, endPos - tmp_pos - 7).c_str()) - 0.71; while (min_c <= max_c) { widths.push_back(tmp_width); columns_with_widths.push_back(min_c); column_hidden.push_back(tmp_hidden); min_c++; } } else { // Column is only part of a group tmp_pos = buf.find("outlineLevel=\"", 0); endPos = buf.find(tagEnd, tmp_pos + 14); tmp_coloutline = buf.substr(tmp_pos + 14, endPos - tmp_pos - 14); while (min_c <= max_c) { columns_with_groups.push_back(min_c); col_hidden.push_back(tmp_hidden); col_outline.push_back(tmp_coloutline); min_c++; } } } } if (widths.size() > 0) { CharacterVector tmp_widths(widths); tmp_widths.attr("names") = columns_with_widths; tmp_widths.attr("hidden") = column_hidden; colWidths[i] = tmp_widths; } if (col_outline.size() > 0) { CharacterVector columns_outline(col_outline); columns_outline.attr("names") = columns_with_groups; columns_outline.attr("hidden") = col_hidden; colOutlineLevels[i] = columns_outline; } } /* --- Everything after sheetData --- */ size_t pos_post = 0; if(has_data){ pos_post = xml.find(""); }else{ pos_post = pos; } std::string xml_post = xml.substr(pos_post); node_xml = getChildlessNode(xml_post, "sheetProtection"); if(node_xml.size() > 0) { this_worksheet.field("sheetProtection") = node_xml; } node_xml = getChildlessNode(xml_post, "autoFilter"); if(node_xml.size() > 0) this_worksheet.field("autoFilter") = node_xml; node_xml = getChildlessNode(xml_post, "hyperlink"); if(node_xml.size() > 0) this_worksheet.field("hyperlinks") = node_xml; node_xml = getChildlessNode(xml_post, "pageMargins"); if(node_xml.size() > 0) this_worksheet.field("pageMargins") = node_xml; node_xml = getChildlessNode(xml_post, "pageSetup"); if(node_xml.size() > 0){ for(int j = 0; j < node_xml.size(); j++){ std::string pageSetup_tmp = as(node_xml[j]); size_t ps_pos = pageSetup_tmp.find("r:id=\"rId", 0); if(ps_pos != std::string::npos){ std::string pageSetup_tmp2 = pageSetup_tmp.substr(0, ps_pos + 9) + "2"; ps_pos = pageSetup_tmp.find("\"", ps_pos + 9); pageSetup_tmp = pageSetup_tmp2 + pageSetup_tmp.substr(ps_pos); } node_xml[j] = pageSetup_tmp; } this_worksheet.field("pageSetup") = node_xml; } node_xml = getChildlessNode(xml_post, "mergeCell"); if(node_xml.size() > 0) this_worksheet.field("mergeCells") = node_xml; node_xml = getNodes(xml_post, ""); if(node_xml.size() > 0) this_worksheet.field("oleObjects") = node_xml; // headerfooter CharacterVector xml_hf = getNodes(xml_post, " 0){ List hf = List(0); node_xml = getNodes(xml_post, ""); if(node_xml.size() > 0) hf["oddHeader"] = node_xml; node_xml = getNodes(xml_post, ""); if(node_xml.size() > 0) hf["oddFooter"] = node_xml; node_xml = getNodes(xml_post, ""); if(node_xml.size() > 0) hf["evenHeader"] = node_xml; node_xml = getNodes(xml_post, ""); if(node_xml.size() > 0) hf["evenFooter"] = node_xml; node_xml = getNodes(xml_post, ""); if(node_xml.size() > 0) hf["firstHeader"] = node_xml; node_xml = getNodes(xml_post, ""); if(node_xml.size() > 0) hf["firstFooter"] = node_xml; this_worksheet.field("headerFooter") = hf; } node_xml = getChildlessNode(xml_post, "drawing"); if(node_xml.size() == 0) node_xml = getChildlessNode(xml_post, "legacyDrawing"); if(node_xml.size() > 0){ for(int j = 0; j < node_xml.size(); j++){ std::string drawingId_tmp = as(node_xml[j]); size_t ps_pos = drawingId_tmp.find("r:id=\"rId", 0); std::string drawingId_tmp2 = drawingId_tmp.substr(0, ps_pos + 9) + "1"; ps_pos = drawingId_tmp.find("\"", ps_pos + 9); drawingId_tmp = drawingId_tmp2 + drawingId_tmp.substr(ps_pos); node_xml[j] = drawingId_tmp; } } // conditionalFormatting CharacterVector conForm = getNodes(xml_post, " 0){ // get sqref attribute size_t tmp_pos = 0; int end_pos = 0; std::string sqref; CharacterVector cf; CharacterVector cf_names; for(int ci = 0; ci < conForm.size(); ci++){ buf = conForm[ci]; tmp_pos = buf.find("sqref=\"", 0); end_pos = buf.find("\"", tmp_pos + 7); sqref = buf.substr(tmp_pos + 7, end_pos - tmp_pos - 7); buf = buf.substr(0, buf.find(" 1){ tmp_pos = buf.find(" 0) //data validation node_xml = getOpenClosedNode(xml_post, ""); if(node_xml.size() > 0) this_worksheet.field("dataValidations") = node_xml; // extLst node_xml = get_extLst_Major(xml_post); if(node_xml.size() > 0) this_worksheet.field("extLst") = node_xml; // clean pre and post xml xml_post.clear(); xml_pre.clear(); /* --------------------------- sheet Data --------------------------- */ if(has_data){ xml = xml.substr(pos + 11, pos_post - pos - 11); // get from "" to the end // count cells with children int ocs = 0; string::size_type start = 0; while((start = xml.find(" tag and end tag endPos = cell.find("", 0); if(endPos != std::string::npos){ pos = cell.find("", pos); v[j] = cell.substr(pos + 1, endPos - pos - 1); has_v = true; } // find tag and end tag endPos = cell.find("", 0); if(endPos != std::string::npos){ pos = cell.find("", pos); v[j] = cell.substr(pos + 4, endPos - pos - 4); // skip and ", pos_f + 3); if(endPos == std::string::npos){ endPos = cell.find("/>", pos_f + 3); f[j] = cell.substr(pos_f, endPos - pos_f + 2); }else{ f[j] = cell.substr(pos_f, endPos - pos_f + 4); } has_f = true; // do we really have t if(pos_t < pos_f){ endPos = cell.find(tagEnd, pos_t + 4); // find next " t[j] = cell.substr(pos_t + 4, endPos - pos_t - 4); } }else if(pos_t != std::string::npos){ // only have t endPos = cell.find(tagEnd, pos_t + 4); // find next " t[j] = cell.substr(pos_t + 4, endPos - pos_t - 4); }else if(pos_f != std::string::npos){ // only have f endPos = cell.find("", pos_f + 3); if(endPos == std::string::npos){ endPos = cell.find("/>", pos_f + 3); f[j] = cell.substr(pos_f, endPos - pos_f + 2); }else{ f[j] = cell.substr(pos_f, endPos - pos_f + 4); } has_f = true; } if(has_f & (!has_v) & (t[j] != "n")){ v[j] = NA_STRING; }else if(has_f & !has_v){ t[j] = NA_STRING; v[j] = NA_STRING; }else if(has_f | has_v){ }else{ //only have s and r t[j] = NA_STRING; v[j] = NA_STRING; } j++; // INCREMENT OVER OCCURENCES pos = nextPos; pos_t = nextPos; pos_f = nextPos; } // end of while loop over occurences } // END OF CELL AND ATTRIBUTION GATHERING // get names of cells if(ocs > 0){ // may be a problem when we have a formula, no value and we now write t="n" in it's place sheet_data.field("rows") = rows_cell_ref; sheet_data.field("cols") = cols_cell_ref; sheet_data.field("t") = map_cell_types_to_integer(t); sheet_data.field("v") = v; sheet_data.field("f") = f; sheet_data.field("data_count") = 1; sheet_data.field("n_elements") = ocs; } // count number of rows int row_ocs = 0; start = 0; while((start = xml.find(" 0) { heights = heights[!is_na(heights)]; heights.attr("names") = heightsRows; rowHeights[i] = heights; } outlineRows = outlineRows[!is_na(outlines)]; if (outlineRows.size() > 0) { // If a row is grouped, we need to preserve the visibility flag, even // if the cell is visible and the flag is NA. Otherwise, hidden // rows/columns would be shifted or saving would break (Issue // ycphs/openxlsx#138) outline_hidden = outline_hidden[!is_na(outlines)]; outlines = outlines[!is_na(outlines)]; outlines.attr("names") = outlineRows; outlines.attr("hidden") = outline_hidden; outlineLevels[i] = outlines; } // styleObjects std::string this_sheetname = as(sheetNames[i]); if(any(!is_na(s))){ CharacterVector s_refs = r[!is_na(s)]; s = s[!is_na(s)]; CharacterVector uStyleInds = sort_unique(s); int nsu = uStyleInds.size(); CharacterVector uStyleInds_j(1); std::string ref_j; CharacterVector styleElementNames = CharacterVector::create("style", "sheet", "rows", "cols"); for(int j = 0; j < nsu; j++){ List styleElement(4); int styleInd = atoi(as(uStyleInds[j]).c_str()); if(styleInd != 0){ uStyleInds_j[0] = uStyleInds[j]; LogicalVector ind = !is_na(match(s, uStyleInds_j)); CharacterVector s_refs_j = s_refs[ind]; int n_j = s_refs_j.size(); IntegerVector rows(n_j); IntegerVector cols = convert_from_excel_ref(s_refs_j); for(int k = 0; k < n_j; k++){ ref_j = s_refs_j[k]; ref_j.erase(std::remove_if(ref_j.begin(), ref_j.end(), ::isalpha), ref_j.end()); rows[k] = atoi(ref_j.c_str()); } styleElement[0] = styleObjects[styleInd - 1]; styleElement[1] = this_sheetname; styleElement[2] = rows; styleElement[3] = cols; styleElement.attr("names") = styleElementNames; wbstyleObjects.push_back(styleElement); } } } // end if(any(!is_na(s))) } // end of if(has_data) } // end if is_chart_sheet[i] else } // end of loop over sheets // assign back to workbook wb.field("worksheets") = worksheets; wb.field("rowHeights") = rowHeights; wb.field("colWidths") = colWidths; wb.field("styleObjects") = wbstyleObjects; wb.field("outlineLevels") = outlineLevels; wb.field("colOutlineLevels") = colOutlineLevels; return wrap(wb); } // [[Rcpp::export]] SEXP getNodes(std::string xml, std::string tagIn){ // This function loops over all characters in xml, looking for tag // tag should look liked // tagEnd is then generated to be if(xml.length() == 0) return wrap(NA_STRING); xml = " " + xml; std::vector r; size_t pos = 0; size_t endPos = 0; std::string tag = tagIn; std::string tagEnd = tagIn.insert(1,"/"); size_t k = tag.length(); size_t l = tagEnd.length(); while(1){ pos = xml.find(tag, pos+1); endPos = xml.find(tagEnd, pos+k); if((pos == std::string::npos) | (endPos == std::string::npos)) break; r.push_back(xml.substr(pos, endPos-pos+l).c_str()); } CharacterVector out = wrap(r); return markUTF8(out); } // [[Rcpp::export]] SEXP getOpenClosedNode(std::string xml, std::string open_tag, std::string close_tag){ if(xml.length() == 0) return wrap(NA_STRING); xml = " " + xml; size_t pos = 0; size_t endPos = 0; size_t k = open_tag.length(); size_t l = close_tag.length(); std::vector r; while(1){ pos = xml.find(open_tag, pos+1); endPos = xml.find(close_tag, pos+k); if((pos == std::string::npos) | (endPos == std::string::npos)) break; r.push_back(xml.substr(pos, endPos-pos+l).c_str()); } CharacterVector out = wrap(r); return markUTF8(out); } // [[Rcpp::export]] SEXP getAttr(CharacterVector x, std::string tag){ size_t n = x.size(); size_t k = tag.length(); if(n == 0) return wrap(-1); std::string xml; CharacterVector r(n); size_t pos = 0; size_t endPos = 0; std::string rtagEnd = "\""; for(size_t i = 0; i < n; i++){ // find opening tag xml = x[i]; pos = xml.find(tag, 0); if(pos == std::string::npos){ r[i] = NA_STRING; }else{ endPos = xml.find(rtagEnd, pos+k); r[i] = xml.substr(pos+k, endPos-pos-k).c_str(); } } return markUTF8(r); // no need to wrap as r is already a CharacterVector } // [[Rcpp::export]] std::vector getChildlessNode_ss(std::string xml, std::string tag){ size_t k = tag.length(); std::vector r; size_t pos = 0; size_t endPos = 0; std::string tagEnd = "/>"; while(1){ pos = xml.find(tag, pos+1); if(pos == std::string::npos) break; endPos = xml.find(tagEnd, pos+k); r.push_back(xml.substr(pos, endPos-pos+2).c_str()); } return r ; } // [[Rcpp::export]] CharacterVector getChildlessNode(std::string xml, std::string tag) { // size_t k = tag.length(); variable not used if(xml.length() == 0) return wrap(NA_STRING); size_t begPos = 0, endPos = 0; std::vector r; std::string res = ""; // check " while( begPos != std::string::npos ) { endPos = xml.find(endTag, begPos); if(begPos == std::string::npos || endPos == std::string::npos) break; res = xml.substr(begPos, (endPos - begPos) + endTag.length()); if (res.length() == 0) break; auto itr = 0; // check if we have either , , or . We have to avoid // while ( res.substr(begTag.length(),1).compare(" ") != 0 && // res.substr(begTag.length(),1).compare("/") != 0 && // res.substr(begTag.length(),1).compare(">") != 0 // ) { if (itr == 0) begPos = begPos + begTag.length(); if(begPos == std::string::npos || endPos == std::string::npos) break; Rcpp::checkUserInterrupt(); begPos = xml.find(begTag, begPos); endPos = xml.find(endTag, begPos); if(begPos == std::string::npos || endPos == std::string::npos) break; res = xml.substr(begPos, (endPos - begPos) + endTag.length()); ++itr; } // if we have we need to find the matching closing tag bool closingtag = false; if (res.substr( res.length() - 2 ).compare("/>") != 0) { // this node has temp_endTag = ""; closingtag = true; } else { temp_endTag = endTag; } // if we have a closing tag, we need to reposition the endPos. Previously // it was at the end of . Now we search for if (closingtag) { endPos = xml.find(temp_endTag, begPos); if(begPos == std::string::npos || endPos == std::string::npos) break; // read from initial "<" to final ">" res = xml.substr(begPos, (endPos - begPos) + temp_endTag.length()); if (res.length() == 0) break; } if(begPos == std::string::npos || endPos == std::string::npos) break; begPos = endPos + temp_endTag.length(); begPos = xml.find(begTag, begPos); r.push_back(res); if(begPos == std::string::npos || endPos == std::string::npos) break; } CharacterVector out = wrap(r); return markUTF8(out); } // [[Rcpp::export]] CharacterVector get_extLst_Major(std::string xml){ // find page margin or pagesetup then take the extLst after that if(xml.length() == 0) return wrap(NA_STRING); std::vector r; std::string tagEnd = ""; size_t endPos = 0; std::string node; size_t pos = xml.find("", 0); if(pos == std::string::npos) return wrap(NA_STRING); while(1){ pos = xml.find("", pos + 1); if(pos == std::string::npos) break; endPos = xml.find(tagEnd, pos + 8); node = xml.substr(pos + 8, endPos - pos - 8); //pos = xml.find("conditionalFormattings", pos + 1); //if(pos == std::string::npos) // break; r.push_back(node.c_str()); } CharacterVector out = wrap(r); return markUTF8(out); } // [[Rcpp::export]] int cell_ref_to_col( std::string x ){ // This function converts the Excel column letter to an integer char A = 'A'; int a_value = (int)A - 1; int sum = 0; // remove digits from string x.erase(std::remove_if(x.begin()+1, x.end(), ::isdigit),x.end()); int k = x.length(); for (int j = 0; j < k; j++){ sum *= 26; sum += (x[j] - a_value); } return sum; } // [[Rcpp::export]] CharacterVector int_2_cell_ref(IntegerVector cols){ std::vector LETTERS = get_letters(); int n = cols.size(); CharacterVector res(n); std::fill(res.begin(), res.end(), NA_STRING); int x; int modulo; for(int i = 0; i < n; i++){ if(!IntegerVector::is_na(cols[i])){ string columnName; x = cols[i]; while(x > 0){ modulo = (x - 1) % 26; columnName = LETTERS[modulo] + columnName; x = (x - modulo) / 26; } res[i] = columnName; } } return res ; } openxlsx/src/openxlsx.h0000644000176200001440000000563014155600364014762 0ustar liggesusers #include #include #include #include using namespace Rcpp; using namespace std; // load workbook int cell_ref_to_col(string ); CharacterVector int_2_cell_ref(IntegerVector); // write file SEXP write_worksheet_xml(string, string, List, Reference, IntegerVector, CharacterVector, string ); // write_data.cpp CharacterVector map_cell_types_to_char(IntegerVector); IntegerVector map_cell_types_to_integer(CharacterVector); std::vector get_letters(); IntegerVector convert_from_excel_ref( CharacterVector x ); SEXP calc_column_widths(Reference sheet_data, std::vector sharedStrings, IntegerVector autoColumns, NumericVector widths, float baseFontCharWidth, float minW, float maxW); SEXP getOpenClosedNode(std::string xml, std::string open_tag, std::string close_tag); std::string cppReadFile(std::string xmlFile); std::string read_file_newline(std::string xmlFile); SEXP getNodes(std::string xml, std::string tagIn); std::vector getChildlessNode_ss(std::string xml, std::string tag); CharacterVector get_extLst_Major(std::string xml); CharacterVector getChildlessNode(std::string xml, std::string tag); SEXP getAttr(CharacterVector x, std::string tag); CharacterVector get_shared_strings(std::string xmlFile, bool isFile); List buildCellList( CharacterVector r, CharacterVector t, CharacterVector v); SEXP openxlsx_convert_to_excel_ref(IntegerVector cols, std::vector LETTERS); SEXP buildMatrixNumeric(CharacterVector v, IntegerVector rowInd, IntegerVector colInd, CharacterVector colNames, int nRows, int nCols); SEXP buildMatrixMixed(CharacterVector v, IntegerVector rowInd, IntegerVector colInd, CharacterVector colNames, int nRows, int nCols, IntegerVector charCols, IntegerVector dateCols); List getCellInfo(std::string xmlFile, CharacterVector sharedStrings, bool skipEmptyRows, int startRow, IntegerVector rows, bool getDates); SEXP convert_to_excel_ref_expand(const std::vector& cols, const std::vector& LETTERS, const std::vector& rows); IntegerVector matrixRowInds(IntegerVector indices); CharacterVector build_table_xml(std::string table, std::string ref, std::vector colNames, bool showColNames, std::string tableStyle, bool withFilter); int calc_number_rows(CharacterVector x, bool skipEmptyRows); CharacterVector buildCellTypes(CharacterVector classes, int nRows); LogicalVector isInternalHyperlink(CharacterVector x); // helper functions string itos(int i); SEXP write_file(std::string parent, std::string xmlText, std::string parentEnd, std::string R_fileName); CharacterVector markUTF8(CharacterVector x, bool clone = false); openxlsx/NAMESPACE0000644000176200001440000000514614656165566013403 0ustar liggesusers# Generated by roxygen2: do not edit by hand S3method("names<-",Workbook) S3method(as.character,formula) S3method(getNamedRegions,Workbook) S3method(getNamedRegions,default) S3method(names,Workbook) S3method(read.xlsx,Workbook) S3method(read.xlsx,default) export("activeSheet<-") export("sheetVisibility<-") export("sheetVisible<-") export("worksheetOrder<-") export(activeSheet) export(addCreator) export(addFilter) export(addStyle) export(addWorksheet) export(auto_heights) export(buildWorkbook) export(cloneWorksheet) export(col2int) export(conditionalFormat) export(conditionalFormatting) export(convertFromExcelRef) export(convertToDate) export(convertToDateTime) export(copyWorkbook) export(createComment) export(createNamedRegion) export(createStyle) export(createWorkbook) export(dataValidation) export(deleteData) export(deleteDataColumn) export(deleteNamedRegion) export(freezePane) export(getBaseFont) export(getCellRefs) export(getCreators) export(getDateOrigin) export(getNamedRegions) export(getSheetNames) export(getStyles) export(getTables) export(getWindowSize) export(get_worksheet_entries) export(groupColumns) export(groupRows) export(insertImage) export(insertPlot) export(int2col) export(loadWorkbook) export(makeHyperlinkString) export(mergeCells) export(modifyBaseFont) export(op.openxlsx) export(openXL) export(openxlsx_getOp) export(openxlsx_setOp) export(pageBreak) export(pageSetup) export(protectWorkbook) export(protectWorksheet) export(read.xlsx) export(readWorkbook) export(removeCellMerge) export(removeColWidths) export(removeComment) export(removeFilter) export(removeRowHeights) export(removeTable) export(removeWorksheet) export(renameWorksheet) export(replaceStyle) export(saveWorkbook) export(setColWidths) export(setFooter) export(setHeader) export(setHeaderFooter) export(setLastModifiedBy) export(setRowHeights) export(setWindowSize) export(sheetVisibility) export(sheetVisible) export(sheets) export(showGridLines) export(temp_xlsx) export(ungroupColumns) export(ungroupRows) export(worksheetOrder) export(write.xlsx) export(writeComment) export(writeData) export(writeDataTable) export(writeFormula) import(Rcpp) import(methods) import(stringi) importFrom(grDevices,bmp) importFrom(grDevices,col2rgb) importFrom(grDevices,colours) importFrom(grDevices,dev.copy) importFrom(grDevices,dev.list) importFrom(grDevices,dev.off) importFrom(grDevices,jpeg) importFrom(grDevices,png) importFrom(grDevices,rgb) importFrom(grDevices,tiff) importFrom(stats,pchisq) importFrom(utils,download.file) importFrom(utils,head) importFrom(utils,menu) importFrom(utils,unzip) importFrom(zip,zipr) useDynLib(openxlsx, .registration=TRUE) openxlsx/LICENSE0000644000176200001440000000006314745234540013146 0ustar liggesusersYEAR: 2014-2025 COPYRIGHT HOLDER: openxlsx authors openxlsx/NEWS.md0000644000176200001440000004447414745235160013254 0ustar liggesusers# openxlsx 4.2.8 * Fix the docs for `setLastModifiedBy()` and `getCreators()` (@PBfordev, [#505](https://github.com/ycphs/openxlsx/pull/505)) * Fix an integer overflow in `setRowHeights()` * Fix a coercion warning in `get_worksheet_entries()` (@philaris, [#512](https://github.com/ycphs/openxlsx/pull/512)) * Fix a bug in `deleteDataColumn()` (@DavZim, [#515](https://github.com/ycphs/openxlsx/pull/515)) # openxlsx 4.2.7.1 * It's now possible to insert a hyperlink image by passing a URL, relative or absolute file path, or mailto string to the new `address` parameter of `insertImage()`. # openxlsx 4.2.7 * Fixed warning on `dataValidation(..., type = "list")` ([#342](https://github.com/ycphs/openxlsx/issues/342)) * Added optional argument to `loadWorkbook` to decide if empty/blank cells should be converted to NA_character_ (the default) or left blank as is * `saveWorkbook()` now succeeds when called after the user has set column widths for a range of columns (e.g. 1:2), saved the workbook, then set column widths for a new range that is inclusive of the previous one (e.g. 1:5) ([#493](https://github.com/ycphs/openxlsx/issues/493)). ## Improvements * Improve detectDates ([#288](https://github.com/ycphs/openxlsx/issues/288)) * Preserve window size and position, also `getWindowSize()` and `setWindowSize()` ([466](https://github.com/ycphs/openxlsx/pull/466)) # openxlsx 4.2.6 * Fix external links ([#410](https://github.com/ycphs/openxlsx/pull/410)) * Do not add unnecessary sheetPr node ([#409](https://github.com/ycphs/openxlsx/pull/409)) * Add support for `namedRegion`s having dots and other special characters ([#338](https://github.com/ycphs/openxlsx/issues/338)). * Add type blanks and not blanks to conditional formatting ([#311](https://github.com/ycphs/openxlsx/pull/311)) # openxlsx 4.2.5 ## Fixes * `openxlsx_setOp()` now works with named list ([#215](https://github.com/ycphs/openxlsx/issues/215)) * `loadWorkbook()` imports `inlineStr`. Values remain `inlineStr` when writing the workbook with `saveWorkbook()`. Similar `read.xlsx` and `readWorkbook` import `inlineStr`. * `read.xlsx()` no longer changes random seed ([#183](https://github.com/ycphs/openxlsx/issues/183)) * fixed a regression that caused fonts to be read in incorrectly ([#207](https://github.com/ycphs/openxlsx/issues/207)) * add option to save as read only recommended ([#201](https://github.com/ycphs/openxlsx/issues/201)) * fixed writing hyperlink formulas ([#200](https://github.com/ycphs/openxlsx/issues/200)) * `write.xlsx()` now throws an error if it doesn't have write permissions ([#190](https://github.com/ycphs/openxlsx/issues/190)) * `write.xlsx()` now again uses the default of `overwrite = TRUE` for saving files ([#249](https://github.com/ycphs/openxlsx/issues/249)) * `as.character.formula()` exported to warn about potential conflicts with other packages ([#312](https://github.com/ycphs/openxlsx/issues/312), [#315](https://github.com/ycphs/openxlsx/pull/315)) ## Improvements * `options()` are more consistently set in functions (see: [#289](https://github.com/ycphs/openxlsx/issues/262)) * `Workbook$show()` no longer fails when called in a 0 sheet workbook([#240](https://github.com/ycphs/openxlsx/issues/240)) * `read.xlsx()` again accepts `.xlsm` files ([#205](https://github.com/ycphs/openxlsx/issues/205), [#209](https://github.com/ycphs/openxlsx/issues/209)) * `makeHyperlinkString()` does no longer require a sheet argument ([#57](https://github.com/ycphs/openxlsx/issues/57), [#58](https://github.com/ycphs/openxlsx/issues/58)) * improvements in how `openxlsx` creates temporary directories (see [#262](https://github.com/ycphs/openxlsx/issues/262)) * `writeData()` calls `force(x)` to evaluate the object before options are set ([#264](https://github.com/ycphs/openxlsx/issues/264)) * `createComment()` now correctly handles `integers` in `width` and `height` ([#275](https://github.com/ycphs/openxlsx/issues/275)) * `setStyles()` accepts `halign="justify"` ([#305](https://github.com/ycphs/openxlsx/issues/305)) # openxlsx 4.2.4 ## Fixes * `write.xlsx()` now successfully passes `withFilter` ([#151](https://github.com/ycphs/openxlsx/issues/151)) * code clean up PR [#168](https://github.com/ycphs/openxlsx/pull/168) * removal of unused variables PR [#168](https://github.com/ycphs/openxlsx/pull/168) ## New features * adds `buildWorkbook()` to generate a `Workbook` object from a (named) list or a data.frame ([#192](https://github.com/ycphs/openxlsx/issues/192), [#187](https://github.com/ycphs/openxlsx/issues/187)) * this is now recommended rather than the `write.xlsx(x, file) ; wb <- read.xlsx(file)` functionality before * `write.xlsx()` is now a wrapper for `wb <- buildWorkbook(x); saveWorkbook(x, file)` * parameter checking from `write.xlsx()` >> `buildWorkbook()` are now held off until passed to `writeData()`, `writeDataTable()`, etc * `row.names` is now deprecated for `writeData()` and `writeDataTable()`; please use `rowNames` instead * `read.xlsx()` now checks for the file extension `.xlsx`; previously it would throw an error when the file was `.xls` or `.xlm` files * memory allocation improvements * global options added for `minWidth` and `maxWidth` * `write.xlsx()` >> `buildWorkbook()` can now handle `colWidths` passed as either a single element or a `list()` * Added ability to change positioning of summary columns and rows. * These can be set with the `summaryCol` and `summaryRow` arguments in `pageSetup()`. * `activeSheet` allows to set and get the active (displayed) sheet of a workbook. * Adds new global options for workbook formatting ([#165](https://github.com/ycphs/openxlsx/issues/165); see `?op.openxlsx`) # openxlsx 4.2.3 ## New Features * Most of functions in openxlsx now support non-ASCII arguments better. More specifically, we can use non-ASCII strings as names or contents for `createNamedRegion()` ([#103](https://github.com/ycphs/openxlsx/issues/103)), `writeComment()`, `writeData()`, `writeDataTable()` and `writeFormula()`. In addition, openxlsx now reads comments and region names that contain non-ASCII strings correctly on Windows. Thanks to @shrektan for the PR [#118](https://github.com/ycphs/openxlsx/pull/118). * `setColWidths()` now supports zero-length `cols`, which is convenient when `cols` is dynamically provided [#128](https://github.com/ycphs/openxlsx/issues/128). Thanks to @shrektan for the feature request and the PR. ## Fixes for Check issues * Fix to pass the tests for link-time optimization type mismatches * Fix to pass the checks of native code (C/C++) based on static code analysis ## Bug Fixes * Grouping columns after setting widths no longer throws an error ([#100](https://github.com/ycphs/openxlsx/issues/100)) * Fix inability to save workbook more than once ([#106](https://github.com/ycphs/openxlsx/issues/106)) * Fix `loadWorkbook()` sometimes importing incorrect column attributes # openxlsx 4.2.2 ## New Features * Added features for `conditionalFormatting` to support also 'contains not', 'begins with' and 'ends with' * Added return value for `saveWorkbook()` the default value for `returnValue` is `FALSE` ([#71](https://github.com/ycphs/openxlsx/issues/71)) * Added Tests for new parameter of `saveWorkbook()` ## Bug Fixes * Solved CRAN check errors based on the change discussed in [PR#17277](https://bugs.r-project.org/show_bug.cgi?id=17277) # openxlsx 4.2.0 ## New Features * Added `groupColumns()`, `groupRows()`, `ungroupColumns()`, and `ungroupRows()` to group/ugroup columns/rows ([#32](https://github.com/ycphs/openxlsx/issues/32)) ## Bug Fixes * Allow xml-sensitive characters in sheetnames ([#78](https://github.com/ycphs/openxlsx/issues/78)) ## Internal * Updated roxygen2 to 7.1.1 # openxlsx 4.1.5.1 ## Bug Fixes * fixed issue [#68](https://github.com/ycphs/openxlsx/issues/68) # openxlsx 4.1.5 ## New Features * Add functions to get and set the creator of the xlsx file * add function to set the name of the user who last modified the xlsx file ## Bug Fixes * Fixed NEWS hyperlink * Fixed writing of mixed EST/EDT datetimes * Added description for `writeFormula()` to use only English function names * Fixed validateSheet for special characters ## Internal * applied the tidyverse-style to the package `styler::style_pkg()` * include tests for `cloneWorksheet` # openxlsx 4.1.4 ## New Features * Added `getCellRefs()` as function. [#7](https://github.com/ycphs/openxlsx/issues/7) * Added parameter for customizing na.strings ## Bug Fixes * Use `zip::zipr()` instead of `zip::zip()`. * Keep correct visibility option for loadWorkbook. [#12](https://github.com/ycphs/openxlsx/issues/12) * Add space surrounding "wrapText" [#17](https://github.com/ycphs/openxlsx/issues/17) * Corrected Percentage, Accounting, Comma, Currency class on column level ## Internal * update to roxygen2 7.0.0 # openxlsx 4.1.3 ## New Features * Added a `NEWS.md` file to track changes to the package. * Added `pkgdown` to create site. ## Bug Fixes * Return values for cpp changed to R_NilValue for r-devel tests * Added empty lines at the end of files # openxlsx 4.1.2 * Changed maintainer # openxlsx 4.1.1 ## New Features * `sep.names` allows choose other separator than '.' for variable names with a blank inside * Improve handling of non-region names in `getNamedRegions` and add related test # openxlsx 4.1.0 ## New Features * `deleteNamedRegions` to delete named region and optionally the worksheet data * set Workbook properties 'title', 'subject', 'category' ## Bug Fixes * `pageSetup` fails when passing in sheet by name * matching sheet names with special characters now works * `skipEmptyCols` being ignored by `read.xlsx.Workbook` * zero column data.frames would throw an error. * `read.xlsx` on files created using apache poi failed to match sheet name to xml file. * deleted table re-appearing after save & load. * newline characters in table names would corrupt file * datetime precision # openxlsx 4.0.17 ## New Features * `getNamedRegions` returns sheet name and cell references along with the named regions. * `borderStyle` and `borderColour` can be vector to specify different values for each side * `dataValidation` type "list" * `dataBar showValue`, gradient and border can now be set through conditionalFormatting() * options("openxlsx.zipflags") to pass additional flags to zip application e.g. compression level * `getTables()` and `removeTable()` to show and remove Excel table objects * set column to 'hidden' with `setColWidths()` ## Bug Fixes * `skipEmptyRows` & `skipEmptyCols` was being ignored by `read.xlsx` * date detection basic_string error * multiple spaces in table column names were not being maintained thus corrupting the xlsx file. * openXL fail silently on relative paths * `headerStyle` failed when writing a list of length 1 using `write.xlsx` * `detectDate` for `read.xlsx` issues * some Excel column types causing existing styling to be removed * `na.strings` no longer ignored for `read.xlsx.Workbook` * partial dollar matches on 'font' and 'fill' fixed * maintain hidden columns and their custom widths in `loadWorkbook()` * overwriting cells with borders sometimes removed the border styling # openxlsx 4.0.0 ## New Features * Reduced RAM usage and improved performance * maintain vbaProject, slicers, pivotTables on load * Read and load from URL ## Bug Fixes * Fix date time conversion accuracy issues. * Allow multibyte characters in names and comments. * Remove `tolower()` over style number formats to allow uppercase cell formatting * Stacking styles fixed. # openxlsx 3.0.2 ## New Features * "between" type for conditional formatting values in some interval. * `colWidths` parameter added to `write.xlsx` for auto column widths. * `freezePane` parameter handling added to `write.xlsx`. * `visible` parameter to `addWorksheet` to hide worksheets. * `sheetVisible` function to get and assign worksheet visibility state "hidden"/"visible" * `pageBreak` function to add page breaks to worksheets. ## Bug Fixes * `keepNA` parameter added to `write.xlsx`. Passed to `writeData`/`writeDataTable` # openxlsx 3.0.1 ## New Features * improved performance of `read.xlsx` and `loadWorkbook` * `writeFormula` function added to write cell formulas. Also columns with class "formula" are written as cell formulas similar how column classes determine cell styling * Functionality to write comments and maintain comments with `loadWorkbook` * `check.names` argument added `read.xlsx` to make syntactically valid variable names * `loadWorkbook` maintains cell indents * `namedRegion` parameter added to `read.xlsx` to read a named region. * `getNamed` regions to return names of named regions in a workbook * `getSheetNames` to get worksheet names within an xlsx file. ## Bug Fixes * `convertToDateTime` now handles NA values * `read.xlsx` rows bug fixed where non-consecutive cells were skipped. * `convertToDate` & `convertToDateTime` now handle NA values. * out of bounds worksheet fixed for libre office xlsx files. * `loadWorkbook` now maintains `chartSheets ` # openxlsx 2.4.0 ## New Features * stackable cell styling * `getDateOrigin` function to return the date origin used internally by the xlsx file to pass to `convertToDate` * Auto-detection of date cells. Cells that "look" like dates will be converted to dates when reading from file. * `read.xlsx.Workbook` to read from workbook objects * `colIndex`, `rowIndex` added to `read.xlsx` to only read specified rows and columns * Excel slicers now maintained by `loadWorkbook` * fill styles extended to support `gradientFill` ## Bug Fixes * Encoding fixed and multi-byte characters now supported. * `read.xlsx` now maintains multiple consecutive spaces and newline characters. * `convertToDate` & `convertToDateTime` now handle NA values. * multiple selected worksheet issue which preventing adding of new worksheets in Excel. * `zoom` parameter now limited to [10, 400] and documentation updated. * `write.xlsx` colnames parameter being assigned to rownames * Handling of NaN and Inf values in `writeData` # openxlsx 2.1.3 ## New Features * `conditionalFormatting` type "databar" * `asTable` parameter to `write.xlsx` to writing using `writeDataTable`. * extended `numFmt` formatting to numeric rounding also added option("openxlsx.numFmt" = ...) for default number formatting of numeric columns * additional `numFmt` "comma" to format numerics with "," thousands separator * `tableName` parameter to `writeDataTable` to assign the table a name * `headerStyle` parameter to `writeDataTable` for additional column names styling * `textRotation` parameter to `createStyle` to rotate cell text * functions `addFilter` & `removeFilter` to add filters to columns * Headers & footers extended, can now be set with `addWorksheet` and `setHeaderFooter`. `setHeader` & `setFooter` deprecated. * "fitToWidth" and "fitToHeight" logicals in `pageSetup`. * "zoom" parameter in addWorksheet to set worksheet zoom level. * "withFilter"" parameter to writeDataTable and writeData to remove table filters * `keepNa` parameter to `writeDataTable` and `writeData` to write NA values as #N/A * auto column widths can now be set with width = "auto" ## VIGNETTE * section on `write.xlsx` in Introductory vignette ## Bug Fixes * Fix reading in of apostrophes * Styling blank cells no longer corrupts workbooks * `read.xlsx` now correctly reads `sharedStrings` with inline styling * `sharedStrings` now exact matches true/false to determine logical values from workbooks. * fomulas in column caused openxlsx to crash. This has been fixed. # openxlsx 2.0.15 ## New Features * `writeData` now style based on column class the same as `writeDataTable` * Vignette "Formatting" for examples focused on formatting * Customizable date formatting with `createStyle` and also through option("openxlsx.dateFormat" = ...) * Customizable POSIX formatting with `createStyle` and also through option("openxlsx.datetimeFormat" = ...) * Generalised `conditionalFormat` function to complex expressions and color scales. * `writeData` border type "all" to draw all borders and maintain column styling. * Deprecated "sheets" and replaced with "names" function * column class "scientific" to automatically style as scientific numbers * `writeData` now handles additional object classes: coxph, cox.zph, summary.coxph1 from Survival package ## Bug Fixes * Invalid XML characters in hyperlinks now replaced. * Encoding issues when writing data read in with `read.xlsx` * scientific notation resulting in corrupt workbooks fix * Multiple saves of Workbooks containing conditional formatting were corrupt. * Latin1 characters now write correctly. * logicals written as 0/1 instead of TRUE/FALSE # openxlsx 2.0.1 ## New Features * `write.xlsx` function to write data directly to file via the `writeData` function with basic cell styling. * `writeDataTable` now styles columns of class 'Date', 'POSIXct', 'POSIXt', 'currency', 'accounting', 'percentage' as Excel formats Date, Date, Date, Currency, Accounting, Percentage respectively. * Data of class 'Date', 'POSIXct', 'POSIXt', 'currency', 'accounting' are converted to integers upon writing (as opposed to characters). * `writeDataTable` converts columns of class 'hyperlink' to hyperlinks. * logicals are converted to Excel booleans * hyperlinks in loaded workbooks are now maintained * `borderStyle` argument to `createStyle` to modify border line type. * `borderStyle` argument to `writeData` to modify border line type. * "worksheetOrder" function to shuffle order of worksheets when writing to file * `openXL` function to open an excel file or Workbook object ## Bug Fixes * conversion of numeric data to integer in `read.xlsx` fixed. * `readWorkbook`/`read.xlsx` should work now. Empty values are now padded with NA. Many other bugs fixed. * borders on single row and/or column data.frames now work. * `readWorkbook`/`read.xlsx` check for TRUE/FALSE values is now case-insensitive. * sheet names containing invalid xml characters (&, <, >, ', ") now work when referencing by name and will not result in a corrupt workbook. * sheet names containing non-local characters can now be referenced by name. * Invalid factor level when missing values in `writeData` * `saveWorkbook` now accepts relative paths. * Non-local character encoding issues. * errors in vignette examples. * numbers with > 8 digits were rounded in `writeData` openxlsx/inst/0000755000176200001440000000000014745235501013115 5ustar liggesusersopenxlsx/inst/doc/0000755000176200001440000000000014745235501013662 5ustar liggesusersopenxlsx/inst/doc/Introduction.Rmd0000644000176200001440000004031214656134061017007 0ustar liggesusers--- title: "Introduction" author: "Alexander Walker, Philipp Schauberger" date: "`r Sys.Date()`" output: rmarkdown::html_vignette vignette: > %\VignetteIndexEntry{Introduction} %\VignetteEngine{knitr::rmarkdown} %\VignetteEncoding{UTF-8} --- ## Basic Examples ### write.xlsx The simplest way to write to a workbook is write.xlsx(). By default, write.xlsx calls writeData. If asTable is TRUE write.xlsx will write x as an Excel table. ```{r include = TRUE, tidy = TRUE, eval = FALSE, highlight = TRUE} ## write to working directory library(openxlsx) write.xlsx(iris, file = "writeXLSX1.xlsx") write.xlsx(iris, file = "writeXLSXTable1.xlsx", asTable = TRUE) ``` ### write list of data.frames to xlsx-file ```{r include = TRUE, tidy = TRUE, eval = FALSE ,highlight = TRUE} ## write a list of data.frames to individual worksheets using list names as worksheet names l <- list("IRIS" = iris, "MTCARS" = mtcars) write.xlsx(l, file = "writeXLSX2.xlsx") write.xlsx(l, file = "writeXLSXTable2.xlsx", asTable = TRUE) ``` ### write.xlsx also accepts styling parameters #### The simplest way is to set default options and set column class ```{r include = TRUE, tidy = TRUE, eval = FALSE ,highlight= TRUE} options("openxlsx.borderColour" = "#4F80BD") options("openxlsx.borderStyle" = "thin") options("openxlsx.dateFormat" = "mm/dd/yyyy") options("openxlsx.datetimeFormat" = "yyyy-mm-dd hh:mm:ss") options("openxlsx.numFmt" = NULL) ## For default style rounding of numeric columns df <- data.frame("Date" = Sys.Date()-0:19, "LogicalT" = TRUE, "Time" = Sys.time()-0:19*60*60, "Cash" = paste("$",1:20), "Cash2" = 31:50, "hLink" = "https://CRAN.R-project.org/", "Percentage" = seq(0, 1, length.out=20), "TinyNumbers" = runif(20) / 1E9, stringsAsFactors = FALSE) class(df$Cash) <- "currency" class(df$Cash2) <- "accounting" class(df$hLink) <- "hyperlink" class(df$Percentage) <- "percentage" class(df$TinyNumbers) <- "scientific" write.xlsx(df, "writeXLSX3.xlsx") write.xlsx(df, file = "writeXLSXTable3.xlsx", asTable = TRUE) ``` ## Workbook styles ### define a style for column headers ```{r include = TRUE, tidy = TRUE, eval = FALSE, highlight= TRUE} hs <- createStyle(fontColour = "#ffffff", fgFill = "#4F80BD", halign = "center", valign = "center", textDecoration = "Bold", border = "TopBottomLeftRight", textRotation = 45) write.xlsx(iris, file = "writeXLSX4.xlsx", borders = "rows", headerStyle = hs) write.xlsx(iris, file = "writeXLSX5.xlsx", borders = "columns", headerStyle = hs) write.xlsx(iris, "writeXLSXTable4.xlsx", asTable = TRUE, headerStyle = createStyle(textRotation = 45)) ``` ### When writing a list, the stylings will apply to all list elements ```{r include = TRUE, tidy = TRUE, eval = FALSE, highlight = TRUE} l <- list("IRIS" = iris, "colClasses" = df) write.xlsx(l, file = "writeXLSX6.xlsx", borders = "columns", headerStyle = hs) write.xlsx(l, file = "writeXLSXTable5.xlsx", asTable = TRUE, tableStyle = "TableStyleLight2") openXL("writeXLSX6.xlsx") openXL("writeXLSXTable5.xlsx") ``` ### write.xlsx returns the workbook object for further editing ```{r include = TRUE, tidy = TRUE, eval = FALSE, highlight = TRUE} wb <- write.xlsx(iris, "writeXLSX6.xlsx") setColWidths(wb, sheet = 1, cols = 1:5, widths = 20) saveWorkbook(wb, "writeXLSX6.xlsx", overwrite = TRUE) ``` ## Workbook creation walk-through ### create workbook and set default border Colour and style ```{r include = TRUE, tidy = TRUE, eval = FALSE, highlight = TRUE} require(ggplot2) wb <- createWorkbook() options("openxlsx.borderColour" = "#4F80BD") options("openxlsx.borderStyle" = "thin") modifyBaseFont(wb, fontSize = 10, fontName = "Arial Narrow") ``` ### Add Sheets ```{r include = TRUE,tidy = TRUE, eval = FALSE, highlight = TRUE} addWorksheet(wb, sheetName = "Motor Trend Car Road Tests", gridLines = FALSE) addWorksheet(wb, sheetName = "Iris", gridLines = FALSE) ``` ### write data to sheet 1 ```{r include = TRUE, tidy = TRUE, eval = FALSE, highlight = TRUE} freezePane(wb, sheet = 1, firstRow = TRUE, firstCol = TRUE) ## freeze first row and column writeDataTable(wb, sheet = 1, x = mtcars, colNames = TRUE, rowNames = TRUE, tableStyle = "TableStyleLight9") setColWidths(wb, sheet = 1, cols = "A", widths = 18) ``` ### write data to sheet 2 iris data.frame is added as excel table on sheet 2. ```{r include = TRUE, tidy = TRUE, eval = FALSE, highlight = TRUE} writeDataTable(wb, sheet = 2, iris, startCol = "K", startRow = 2) qplot(data=iris, x = Sepal.Length, y= Sepal.Width, colour = Species) insertPlot(wb, 2, xy=c("B", 16)) ## insert plot at cell B16 means <- aggregate(x = iris[,-5], by = list(iris$Species), FUN = mean) vars <- aggregate(x = iris[,-5], by = list(iris$Species), FUN = var) ``` ### add write group means ```{r include = TRUE, tidy = TRUE, eval = FALSE, highlight = TRUE} headSty <- createStyle(fgFill="#DCE6F1", halign="center", border = "TopBottomLeftRight") writeData(wb, 2, x = "Iris dataset group means", startCol = 2, startRow = 2) writeData(wb, 2, x = means, startCol = "B", startRow=3, borders="rows", headerStyle = headSty) ``` ### add write group variances ```{r include = TRUE, tidy = TRUE, eval = FALSE, highlight = TRUE} writeData(wb, 2, x = "Iris dataset group variances", startCol = 2, startRow = 9) writeData(wb, 2, x= vars, startCol = "B", startRow=10, borders="columns", headerStyle = headSty) setColWidths(wb, 2, cols=2:6, widths = 12) ## width is recycled for each col setColWidths(wb, 2, cols=11:15, widths = 15) ``` ### add style mean & variance table headers ```{r include = TRUE, tidy = TRUE, eval = FALSE, highlight = TRUE} s1 <- createStyle(fontSize=14, textDecoration=c("bold", "italic")) addStyle(wb, 2, style = s1, rows=c(2,9), cols=c(2,2)) ``` ### save workbook ```{r include = TRUE, tidy = TRUE, eval = FALSE, highlight = TRUE} saveWorkbook(wb, "basics.xlsx", overwrite = TRUE) ## save to working directory ``` ## Gallery ```{r eval = FALSE, include = TRUE} ## inspired by xtable gallery #https://CRAN.R-project.org/package=xtable/vignettes/xtableGallery.pdf ## Create a new workbook wb <- createWorkbook() data(tli, package = "xtable") ## data.frame test.n <- "data.frame" my.df <- tli[1:10, ] addWorksheet(wb = wb, sheetName = test.n) writeData(wb = wb, sheet = test.n, x = my.df, borders = "n") ## matrix test.n <- "matrix" design.matrix <- model.matrix(~ sex * grade, data = my.df) addWorksheet(wb = wb, sheetName = test.n) writeData(wb = wb, sheet = test.n, x = design.matrix) ## aov test.n <- "aov" fm1 <- aov(tlimth ~ sex + ethnicty + grade + disadvg, data = tli) addWorksheet(wb = wb, sheetName = test.n) writeData(wb = wb, sheet = test.n, x = fm1) ## lm test.n <- "lm" fm2 <- lm(tlimth ~ sex*ethnicty, data = tli) addWorksheet(wb = wb, sheetName = test.n) writeData(wb = wb, sheet = test.n, x = fm2) ## anova 1 test.n <- "anova" my.anova <- anova(fm2) addWorksheet(wb = wb, sheetName = test.n) writeData(wb = wb, sheet = test.n, x = my.anova) ## anova 2 test.n <- "anova2" fm2b <- lm(tlimth ~ ethnicty, data = tli) my.anova2 <- anova(fm2b, fm2) addWorksheet(wb = wb, sheetName = test.n) writeData(wb = wb, sheet = test.n, x = my.anova2) ## glm test.n <- "glm" fm3 <- glm(disadvg ~ ethnicty*grade, data = tli, family = binomial()) addWorksheet(wb = wb, sheetName = test.n) writeData(wb = wb, sheet = test.n, x = fm3) ## prcomp test.n <- "prcomp" pr1 <- prcomp(USArrests) addWorksheet(wb = wb, sheetName = test.n) writeData(wb = wb, sheet = test.n, x = pr1) ## summary.prcomp test.n <- "summary.prcomp" addWorksheet(wb = wb, sheetName = test.n) writeData(wb = wb, sheet = test.n, x = summary(pr1)) ## simple table test.n <- "table" data(airquality) airquality$OzoneG80 <- factor(airquality$Ozone > 80, levels = c(FALSE, TRUE), labels = c("Oz <= 80", "Oz > 80")) airquality$Month <- factor(airquality$Month, levels = 5:9, labels = month.abb[5:9]) my.table <- with(airquality, table(OzoneG80,Month) ) addWorksheet(wb = wb, sheetName = test.n) writeData(wb = wb, sheet = test.n, x = my.table) ## survdiff 1 library(survival) test.n <- "survdiff1" addWorksheet(wb = wb, sheetName = test.n) x <- survdiff(Surv(futime, fustat) ~ rx, data = ovarian) writeData(wb = wb, sheet = test.n, x = x) ## survdiff 2 test.n <- "survdiff2" addWorksheet(wb = wb, sheetName = test.n) expect <- survexp(futime ~ ratetable(age=(accept.dt - birth.dt), sex=1,year=accept.dt,race="white"), jasa, cohort=FALSE, ratetable=survexp.usr) x <- survdiff(Surv(jasa$futime, jasa$fustat) ~ offset(expect)) writeData(wb = wb, sheet = test.n, x = x) ## coxph 1 test.n <- "coxph1" addWorksheet(wb = wb, sheetName = test.n) bladder$rx <- factor(bladder$rx, labels = c("Pla","Thi")) x <- coxph(Surv(stop,event) ~ rx, data = bladder) writeData(wb = wb, sheet = test.n, x = x) ## coxph 2 test.n <- "coxph2" addWorksheet(wb = wb, sheetName = test.n) x <- coxph(Surv(stop,event) ~ rx + cluster(id), data = bladder) writeData(wb = wb, sheet = test.n, x = x) ## cox.zph test.n <- "cox.zph" addWorksheet(wb = wb, sheetName = test.n) x <- cox.zph(coxph(Surv(futime, fustat) ~ age + ecog.ps, data=ovarian)) writeData(wb = wb, sheet = test.n, x = x) ## summary.coxph 1 test.n <- "summary.coxph1" addWorksheet(wb = wb, sheetName = test.n) x <- summary(coxph(Surv(stop,event) ~ rx, data = bladder)) writeData(wb = wb, sheet = test.n, x = x) ## summary.coxph 2 test.n <- "summary.coxph2" addWorksheet(wb = wb, sheetName = test.n) x <- summary(coxph(Surv(stop,event) ~ rx + cluster(id), data = bladder)) writeData(wb = wb, sheet = test.n, x = x) ## view without saving openXL(wb) ``` ## Further Examples ### Stock Price ```{r eval = FALSE, include = TRUE, tidy = TRUE, highlight= TRUE} require(ggplot2) wb <- createWorkbook() ## read historical prices from yahoo finance ticker <- "CBA.AX" csv.url <- paste0("https://query1.finance.yahoo.com/v7/finance/download/", ticker, "?period1=1597597610&period2=1629133610&interval=1d&events=history&includeAdjustedClose= TRue") prices <- read.csv(url(csv.url), as.is = TRUE) prices$Date <- as.Date(prices$Date) close <- prices$Close prices$logReturns = c(0, log(close[2:length(close)]/close[1:(length(close)-1)])) ## Create plot of price series and add to worksheet ggplot(data = prices, aes(as.Date(Date), as.numeric(Close))) + geom_line(colour="royalblue2") + labs(x = "Date", y = "Price", title = ticker) + geom_area(fill = "royalblue1",alpha = 0.3) + coord_cartesian(ylim=c(min(prices$Close)-1.5, max(prices$Close)+1.5)) ## Add worksheet and write plot to sheet addWorksheet(wb, sheetName = "CBA") insertPlot(wb, sheet = 1, xy = c("J", 3)) ## Histogram of log returns ggplot(data = prices, aes(x = logReturns)) + geom_histogram(binwidth=0.0025) + labs(title = "Histogram of log returns") ## currency class(prices$Close) <- "currency" ## styles as currency in workbook ## write historical data and histogram of returns writeDataTable(wb, sheet = "CBA", x = prices) insertPlot(wb, sheet = 1, startRow=25, startCol = "J") ## Add conditional formatting to show where logReturn > 0.01 using default style conditionalFormat(wb, sheet = 1, cols = seq_len((prices)), rows = 2:(nrow(prices)+1), rule = "$H2 > 0.01") ## style log return col as a percentage logRetStyle <- createStyle(numFmt = "percentage") addStyle(wb, 1, style = logRetStyle, rows = 2:(nrow(prices) + 1), cols = "H", gridExpand = TRUE) setColWidths(wb, sheet=1, cols = c("A", "F", "G", "H"), widths = 15) ## save workbook to working directory saveWorkbook(wb, "stockPrice.xlsx", overwrite = TRUE) openXL("stockPrice.xlsx") ``` ### Image Compression using PCA ```{r eval = FALSE, include = TRUE} require(openxlsx) require(jpeg) require(ggplot2) plotFn <- function(x, ...) { colvec <- grey(x) colmat <- array(match(colvec, unique(colvec)), dim = dim(x)[1:2]) image(x = 0:(dim(colmat)[2]), y = 0:(dim(colmat)[1]), z = t(colmat[rev(seq_len(nrow(colmat))) , ]), col = unique(colvec), xlab = "", ylab = "", axes = FALSE, asp = 1, bty ="n", frame.plot=FALSE, ann=FALSE) } ## Create workbook and add a worksheet, hide gridlines wb <- createWorkbook("Einstein") addWorksheet(wb, "Original Image", gridLines = FALSE) A <- readJPEG(file.path(path.package("openxlsx"), "einstein.jpg")) height <- nrow(A) width <- ncol(A) ## write "Original Image" to cell B2 writeData(wb, 1, "Original Image", xy = c(2,2)) ## write Object size to cell B3 writeData(wb, 1, sprintf("Image object size: %s bytes", format(object.size(A+0)[[1]], big.mark=',')), xy = c(2,3)) ## equivalent to startCol = 2, startRow = 3 ## Plot image par(mar=rep(0, 4), xpd = NA) plotFn(A) ## insert plot currently showing in plot window insertPlot(wb, 1, width, height, units="px", startRow= 5, startCol = 2) ## SVD of covariance matrix rMeans <- rowMeans(A) rowMeans <- do.call("cbind", lapply(seq_len(ncol(A)), function(X) rMeans)) A <- A - rowMeans E <- svd(A %*% t(A) / (ncol(A) - 1)) # SVD on covariance matrix of A pve <- data.frame("Eigenvalues" = E$d, "PVE" = E$d/sum(E$d), "Cumulative PVE" = cumsum(E$d/sum(E$d))) ## write eigenvalues to worksheet addWorksheet(wb, "Principal Component Analysis") hs <- createStyle(fontColour = "#ffffff", fgFill = "#4F80BD", halign = "CENTER", textDecoration = "Bold", border = "TopBottomLeftRight", borderColour = "#4F81BD") writeData(wb, 2, x="Proportions of variance explained by Eigenvector" ,startRow = 2) mergeCells(wb, sheet=2, cols=1:4, rows=2) setColWidths(wb, 2, cols = 1:3, widths = c(14, 12, 15)) writeData(wb, 2, x=pve, startRow = 3, startCol = 1, borders="rows", headerStyle=hs) ## Plots pve <- cbind(pve, "Ind" = seq_len(nrow(pve))) ggplot(data = pve[1:20,], aes(x = Ind, y = 100*PVE)) + geom_bar(stat="identity", position = "dodge") + xlab("Principal Component Index") + ylab("Proportion of Variance Explained") + geom_line(size = 1, col = "blue") + geom_point(size = 3, col = "blue") ## Write plot to worksheet 2 insertPlot(wb, 2, width = 5, height = 4, startCol = "E", startRow = 2) ## Plot of cumulative explained variance ggplot(data = pve[1:50,], aes(x = Ind, y = 100*Cumulative.PVE)) + geom_point(size=2.5) + geom_line(size=1) + xlab("Number of PCs") + ylab("Cumulative Proportion of Variance Explained") insertPlot(wb, 2, width = 5, height = 4, xy= c("M", 2)) ## Reconstruct image using increasing number of PCs nPCs <- c(5, 7, 12, 20, 50, 200) startRow <- rep(c(2, 24), each = 3) startCol <- rep(c("B", "H", "N"), 2) ## create a worksheet to save reconstructed images to addWorksheet(wb, "Reconstructed Images", zoom = 90) for(i in seq_len(length(nPCs))) { V <- E$v[, 1:nPCs[i]] imgHat <- t(V) %*% A ## project img data on to PCs imgSize <- object.size(V) + object.size(imgHat) + object.size(rMeans) imgHat <- V %*% imgHat + rowMeans ## reconstruct from PCs and add back row means imgHat <- round((imgHat - min(imgHat)) / (max(imgHat) - min(imgHat))*255) # scale plotFn(imgHat/255) ## write strings to worksheet 3 writeData(wb, "Reconstructed Images", sprintf("Number of principal components used: %s", nPCs[[i]]), startCol[i], startRow[i]) writeData(wb, "Reconstructed Images", sprintf("Sum of component object sizes: %s bytes", format(as.numeric(imgSize), big.mark=',')), startCol[i], startRow[i]+1) ## write reconstruced image insertPlot(wb, "Reconstructed Images", width, height, units="px", xy = c(startCol[i], startRow[i]+3)) } # hide grid lines showGridLines(wb, sheet = 3, showGridLines = FALSE) ## Make text above images BOLD boldStyle <- createStyle(textDecoration="BOLD") ## only want to apply style to specified cells (not all combinations of rows & cols) addStyle(wb, "Reconstructed Images", style=boldStyle, rows = c(startRow, startRow+1), cols = rep(startCol, 2), gridExpand = FALSE) ## save workbook to working directory saveWorkbook(wb, "Image dimensionality reduction.xlsx", overwrite = TRUE) ## remove example files for cran test if (identical(Sys.getenv("NOT_CRAN", unset = "true"), "false")) { file_list<-list.files(pattern="\\.xlsx",recursive = TRUE) file_list<-fl[!grepl("inst/extdata",file_list)&!grepl("man/",file_list)] if(length(file_list)>0) { rm(file_list) } } ``` ```{r cleanup, eval = FALSE, include = FALSE} xlsx_files <- dir(pattern = "*.xlsx") unlink(xlsx_files) ``` openxlsx/inst/doc/Formatting.html0000644000176200001440000032054714745235500016674 0ustar liggesusers Formating with xlsx

Formating with xlsx

Alexander Walker, Philipp Schauberger

2025-01-25

Formatting with writeData and writeDataTable

## data.frame to write
df <- data.frame("Date" = Sys.Date()-0:4,
                 "Logical" = c(TRUE, FALSE, TRUE, TRUE, FALSE),
                 "Currency" = paste("$",-2:2),
                 "Accounting" = -2:2,
                 "hLink" = "https://CRAN.R-project.org/", 
                 "Percentage" = seq(-1, 1, length.out=5),
                 "TinyNumber" = runif(5) / 1E9, stringsAsFactors = FALSE)

class(df$Currency) <- "currency"
class(df$Accounting) <- "accounting"
class(df$hLink) <- "hyperlink"
class(df$Percentage) <- "percentage"
class(df$TinyNumber) <- "scientific"

## Formatting can be applied simply through the write functions
## global options can be set to further simplify things
options("openxlsx.borderStyle" = "thin")
options("openxlsx.borderColour" = "#4F81BD")

## create a workbook and add a worksheet
wb <- createWorkbook()
addWorksheet(wb, "writeData auto-formatting")

writeData(wb, 1, df, startRow = 2, startCol = 2)
writeData(wb, 1, df, startRow = 9, startCol = 2, borders = "surrounding")
writeData(wb, 1, df, startRow = 16, startCol = 2, borders = "rows")
writeData(wb, 1, df, startRow = 23, startCol = 2, borders ="columns")
writeData(wb, 1, df, startRow = 30, startCol = 2, borders ="all")

## headerStyles
hs1 <- createStyle(fgFill = "#4F81BD", halign = "CENTER", textDecoration = "Bold",
                   border = "Bottom", fontColour = "white")

writeData(wb, 1, df, startRow = 16, startCol = 10, headerStyle = hs1,
          borders = "rows", borderStyle = "medium")

## to change the display text for a hyperlink column just write over those cells
writeData(wb, sheet = 1, x = paste("Hyperlink", 1:5), startRow = 17, startCol = 14)


## writing as an Excel Table

addWorksheet(wb, "writeDataTable")
writeDataTable(wb, 2, df, startRow = 2, startCol = 2)
writeDataTable(wb, 2, df, startRow = 9, startCol = 2, tableStyle = "TableStyleLight9")
writeDataTable(wb, 2, df, startRow = 16, startCol = 2, tableStyle = "TableStyleLight2")
writeDataTable(wb, 2, df, startRow = 23, startCol = 2, tableStyle = "TableStyleMedium21")

openXL(wb) ## opens a temp version

Use of pre-defined table styles

The ‘tableStyle’ argument in writeDataTable can be any of the predefined tableStyles in Excel.

Date Formatting

# data.frame of dates
dates <- data.frame("d1" = Sys.Date() - 0:4)
for(i in 1:3) dates <- cbind(dates, dates)
names(dates) <- paste0("d", 1:8)

## Date Formatting
wb <- createWorkbook()
addWorksheet(wb, "Date Formatting", gridLines = FALSE)
writeData(wb, 1, dates) ## write without styling

## openxlsx converts columns of class "Date" to Excel dates with the format given by
getOption("openxlsx.dateFormat", "mm/dd/yyyy")

## this can be set via (for example)
options("openxlsx.dateFormat" = "yyyy/mm/dd")
## custom date formats can be made up of any combination of:
##   d, dd, ddd, dddd, m, mm, mmm, mmmm, mmmmm, yy, yyyy

## numFmt == "DATE" will use the date format specified by the above
addStyle(wb, 1, style = createStyle(numFmt = "DATE"), rows = 2:11, cols = 1, gridExpand = TRUE) 

## some custom date format examples
sty <- createStyle(numFmt = "yyyy/mm/dd")
addStyle(wb, 1, style = sty, rows = 2:11, cols = 2, gridExpand = TRUE)

sty <- createStyle(numFmt = "yyyy/mmm/dd")
addStyle(wb, 1, style = sty, rows = 2:11, cols = 3, gridExpand = TRUE)

sty <- createStyle(numFmt = "yy / mmmm / dd")
addStyle(wb, 1, style = sty, rows = 2:11, cols = 4, gridExpand = TRUE)

sty <- createStyle(numFmt = "ddddd")
addStyle(wb, 1, style = sty, rows = 2:11, cols = 5, gridExpand = TRUE)

sty <- createStyle(numFmt = "yyyy-mmm-dd")
addStyle(wb, 1, style = sty, rows = 2:11, cols = 6, gridExpand = TRUE)

sty <- createStyle(numFmt = "mm/ dd yyyy")
addStyle(wb, 1, style = sty, rows = 2:11, cols = 7, gridExpand = TRUE)

sty <- createStyle(numFmt = "mm/dd/yy")
addStyle(wb, 1, style = sty, rows = 2:11, cols = 8, gridExpand = TRUE)

setColWidths(wb, 1, cols = 1:10, widths = 23)

## The default date format used in writeData and writeDataTable can be set with:
options("openxlsx.dateFormat" = "dd/mm/yyyy")
writeData(wb, "Date Formatting", dates, startRow  = 8, borders = "rows")
options("openxlsx.dateFormat" = "yyyy-mm-dd")
writeData(wb, "Date Formatting", dates, startRow  = 15)

saveWorkbook(wb, "Date Formatting.xlsx", overwrite = TRUE)

DateTime Formatting

The conversion from POSIX to Excel datetimes is dependent on the timezone you are in. If POSIX values are being written incorrectly, try setting the timezone with (for example)

Sys.setenv(TZ = "Australia/Sydney")

dateTimes <- data.frame("d1" = Sys.time() - 0:4*10000)
for(i in 1:2) dateTimes <- cbind(dateTimes, dateTimes)
names(dateTimes) <- paste0("d", 1:4)

## POSIX Formatting
wb <- createWorkbook()
addWorksheet(wb, "DateTime Formatting", gridLines = FALSE)
writeData(wb, 1, dateTimes) ## write without styling

## openxlsx converts columns of class "POSIxt" to Excel datetimes with the format given by
getOption("openxlsx.datetimeFormat", "yyyy/mm/dd hh:mm:ss")

## this can be set via (for example)
options("openxlsx.datetimeFormat" = "yyyy-mm-dd hh:mm:ss")
## custom datetime formats can be made up of any combination of:
## d, dd, ddd, dddd, m, mm, mmm, mmmm, mmmmm, yy, yyyy, h, hh, m, mm, s, ss, AM/PM

## numFmt == "LONGDATE" will use the date format specified by the above
long_date_style <- createStyle(numFmt = "LONGDATE")
addStyle(wb, 1, style = long_date_style, rows = 2:11, cols = 1, gridExpand = TRUE) 

## some custom date format examples
sty <- createStyle(numFmt = "yyyy/mm/dd hh:mm:ss AM/PM")
addStyle(wb, 1, style = sty, rows = 2:11, cols = 2, gridExpand = TRUE)

sty <- createStyle(numFmt = "hh:mm:ss AM/PM")
addStyle(wb, 1, style = sty, rows = 2:11, cols = 3, gridExpand = TRUE)

sty <- createStyle(numFmt = "hh:mm:ss")
addStyle(wb, 1, style = sty, rows = 2:11, cols = 4, gridExpand = TRUE)

setColWidths(wb, 1, cols = 1:4, widths = 30)

## The default date format used in writeData and writeDataTable can be set with:
options("openxlsx.datetimeFormat" = "yyyy/mm/dd hh:mm:ss")
writeData(wb, "DateTime Formatting", dateTimes, startRow  = 8, borders = "rows")

options("openxlsx.datetimeFormat" = "hh:mm:ss AM/PM")
writeDataTable(wb, "DateTime Formatting", dateTimes, startRow  = 15)

saveWorkbook(wb, "DateTime Formatting.xlsx", overwrite = TRUE)
openXL("DateTime Formatting.xlsx")

Conditional Formatting

wb <- createWorkbook()
addWorksheet(wb, "cellIs")
addWorksheet(wb, "Moving Row")
addWorksheet(wb, "Moving Col")
addWorksheet(wb, "Dependent on 1")
addWorksheet(wb, "Duplicates")
addWorksheet(wb, "containsText")
addWorksheet(wb, "colourScale", zoom = 30)
addWorksheet(wb, "databar")

negStyle <- createStyle(fontColour = "#9C0006", bgFill = "#FFC7CE")
posStyle <- createStyle(fontColour = "#006100", bgFill = "#C6EFCE")

## rule applies to all each cell in range
writeData(wb, "cellIs", -5:5)
writeData(wb, "cellIs", LETTERS[1:11], startCol=2)
conditionalFormatting(wb, "cellIs", cols=1, rows=1:11, rule="!=0", style = negStyle)
conditionalFormatting(wb, "cellIs", cols=1, rows=1:11, rule="==0", style = posStyle)

## highlight row dependent on first cell in row
writeData(wb, "Moving Row", -5:5)
writeData(wb, "Moving Row", LETTERS[1:11], startCol=2)
conditionalFormatting(wb, "Moving Row", cols=1:2, rows=1:11, rule="$A1<0", style = negStyle)
conditionalFormatting(wb, "Moving Row", cols=1:2, rows=1:11, rule="$A1>0", style = posStyle)

## highlight column dependent on first cell in column
writeData(wb, "Moving Col", -5:5)
writeData(wb, "Moving Col", LETTERS[1:11], startCol=2)
conditionalFormatting(wb, "Moving Col", cols=1:2, rows=1:11, rule="A$1<0", style = negStyle)
conditionalFormatting(wb, "Moving Col", cols=1:2, rows=1:11, rule="A$1>0", style = posStyle)

## highlight entire range cols X rows dependent only on cell A1
writeData(wb, "Dependent on 1", -5:5)
writeData(wb, "Dependent on 1", LETTERS[1:11], startCol=2)
conditionalFormatting(wb, "Dependent on 1", cols=1:2, rows=1:11, rule="$A$1<0", style = negStyle)
conditionalFormatting(wb, "Dependent on 1", cols=1:2, rows=1:11, rule="$A$1>0", style = posStyle)

## highlight duplicates using default style
writeData(wb, "Duplicates", sample(LETTERS[1:15], size = 10, replace = TRUE))
conditionalFormatting(wb, "Duplicates", cols = 1, rows = 1:10, type = "duplicates")

## cells containing text
fn <- function(x) paste(sample(LETTERS, 10), collapse = "-")
writeData(wb, "containsText", sapply(1:10, fn))
conditionalFormatting(wb, "containsText", cols = 1, rows = 1:10, type = "contains", rule = "A")

## colourscale colours cells based on cell value
df <- read.xlsx(system.file("extdata", "readTest.xlsx", package = "openxlsx"), sheet = 5)
writeData(wb, "colourScale", df, colNames=FALSE)  ## write data.frame

## rule is a vector or colours of length 2 or 3 (any hex colour or any of colours())
## If rule is NULL, min and max of cells is used. Rule must be the same length as style or NULL.
conditionalFormatting(wb, "colourScale", cols=seq_len(ncol(df)), rows=seq_len(nrow(df)),
   style = c("black", "white"), 
   rule = c(0, 255), 
   type = "colourScale")

setColWidths(wb, "colourScale", cols = seq_len(ncol(df)), widths = 1.07)
setRowHeights(wb, "colourScale", rows = seq_len(nrow(df)), heights = 7.5) 

## Databars
writeData(wb, "databar", -5:5)
conditionalFormatting(wb, "databar", cols = 1, rows = 1:12, type = "databar") ## Default colours

saveWorkbook(wb, "conditionalFormattingExample.xlsx", TRUE)

openXL(wb)

Numeric Formatting

numeric columns styling can be set using the numFmt parameter in createStyle or a default can be set with, for example, options(“openxlsx.numFmt†= “#,#0.00â€)

options("openxlsx.numFmt" = NULL)
wb <- createWorkbook()
addWorksheet(wb, "Sheet 1")
df <- data.frame(matrix(12.987654321, ncol = 7, nrow = 5)) ## data.frame to write
df[ ,6:7] <- df[ ,6:7]*1E6

## Set column 1 class to "comma" to get comma separated thousands
class(df$X1) <- "comma"

writeData(wb, 1, df)
s <- createStyle(numFmt = "0.0")
addStyle(wb, 1, style = s, rows = 2:6, cols = 2, gridExpand = TRUE)

s <- createStyle(numFmt = "0.00")
addStyle(wb, 1, style = s, rows = 2:6, cols = 3, gridExpand = TRUE)

s <- createStyle(numFmt = "0.000")
addStyle(wb, 1, style = s, rows = 2:6, cols = 4, gridExpand = TRUE)

s <- createStyle(numFmt = "#,##0")
addStyle(wb, 1, style = s, rows = 2:6, cols = 5, gridExpand = TRUE)

s <- createStyle(numFmt = "#,##0.00")
addStyle(wb, 1, style = s, rows = 2:6, cols = 6, gridExpand = TRUE)

s <- createStyle(numFmt = "$ #,##0.00")
addStyle(wb, 1, style = s, rows = 2:6, cols = 7, gridExpand = TRUE)

## set a default number format for numeric columns of data.frames
options("openxlsx.numFmt" = "$* #,#0.00")
writeData(wb, 1, x = data.frame("Using Default Options" = rep(2345.1235, 5)), startCol = 9)

setColWidths(wb, 1, cols = 1:10, widths = 15)

## Using default numFmt to round to 2 dp (Any numeric column will be affected)
addWorksheet(wb, "Sheet 2")
df <- iris
df[, 1:4] <- df[1:4] + runif(1)
writeDataTable(wb, sheet = 2, x = df)
writeData(wb, sheet = 2, x = df, startCol = 7)
writeData(wb, sheet = 2, x = df, startCol = 13, borders = "rows")

## To stop auto-formatting numerics set
options("openxlsx.numFmt" = NULL)
addWorksheet(wb, "Sheet 3")
writeDataTable(wb, sheet = 3, x = df)

openXL(wb)
openxlsx/inst/doc/Formatting.Rmd0000644000176200001440000002742314664364363016461 0ustar liggesusers--- title: "Formating with xlsx" author: "Alexander Walker, Philipp Schauberger" date: "`r Sys.Date()`" output: rmarkdown::html_vignette vignette: > %\VignetteIndexEntry{Formating with xlsx} %\VignetteEngine{knitr::rmarkdown} %\VignetteEncoding{UTF-8} --- ## Formatting with writeData and writeDataTable ```{r setup, include = FALSE} library(openxlsx) ``` ```{r include = TRUE, eval = FALSE, highlight = TRUE} ## data.frame to write df <- data.frame("Date" = Sys.Date()-0:4, "Logical" = c(TRUE, FALSE, TRUE, TRUE, FALSE), "Currency" = paste("$",-2:2), "Accounting" = -2:2, "hLink" = "https://CRAN.R-project.org/", "Percentage" = seq(-1, 1, length.out=5), "TinyNumber" = runif(5) / 1E9, stringsAsFactors = FALSE) class(df$Currency) <- "currency" class(df$Accounting) <- "accounting" class(df$hLink) <- "hyperlink" class(df$Percentage) <- "percentage" class(df$TinyNumber) <- "scientific" ## Formatting can be applied simply through the write functions ## global options can be set to further simplify things options("openxlsx.borderStyle" = "thin") options("openxlsx.borderColour" = "#4F81BD") ## create a workbook and add a worksheet wb <- createWorkbook() addWorksheet(wb, "writeData auto-formatting") writeData(wb, 1, df, startRow = 2, startCol = 2) writeData(wb, 1, df, startRow = 9, startCol = 2, borders = "surrounding") writeData(wb, 1, df, startRow = 16, startCol = 2, borders = "rows") writeData(wb, 1, df, startRow = 23, startCol = 2, borders ="columns") writeData(wb, 1, df, startRow = 30, startCol = 2, borders ="all") ## headerStyles hs1 <- createStyle(fgFill = "#4F81BD", halign = "CENTER", textDecoration = "Bold", border = "Bottom", fontColour = "white") writeData(wb, 1, df, startRow = 16, startCol = 10, headerStyle = hs1, borders = "rows", borderStyle = "medium") ## to change the display text for a hyperlink column just write over those cells writeData(wb, sheet = 1, x = paste("Hyperlink", 1:5), startRow = 17, startCol = 14) ## writing as an Excel Table addWorksheet(wb, "writeDataTable") writeDataTable(wb, 2, df, startRow = 2, startCol = 2) writeDataTable(wb, 2, df, startRow = 9, startCol = 2, tableStyle = "TableStyleLight9") writeDataTable(wb, 2, df, startRow = 16, startCol = 2, tableStyle = "TableStyleLight2") writeDataTable(wb, 2, df, startRow = 23, startCol = 2, tableStyle = "TableStyleMedium21") openXL(wb) ## opens a temp version ``` ## Use of pre-defined table styles The 'tableStyle' argument in writeDataTable can be any of the predefined tableStyles in Excel. ![](tableStyles.PNG) ## Date Formatting ```{r include = TRUE, eval = FALSE, highlight = TRUE} # data.frame of dates dates <- data.frame("d1" = Sys.Date() - 0:4) for(i in 1:3) dates <- cbind(dates, dates) names(dates) <- paste0("d", 1:8) ## Date Formatting wb <- createWorkbook() addWorksheet(wb, "Date Formatting", gridLines = FALSE) writeData(wb, 1, dates) ## write without styling ## openxlsx converts columns of class "Date" to Excel dates with the format given by getOption("openxlsx.dateFormat", "mm/dd/yyyy") ## this can be set via (for example) options("openxlsx.dateFormat" = "yyyy/mm/dd") ## custom date formats can be made up of any combination of: ## d, dd, ddd, dddd, m, mm, mmm, mmmm, mmmmm, yy, yyyy ## numFmt == "DATE" will use the date format specified by the above addStyle(wb, 1, style = createStyle(numFmt = "DATE"), rows = 2:11, cols = 1, gridExpand = TRUE) ## some custom date format examples sty <- createStyle(numFmt = "yyyy/mm/dd") addStyle(wb, 1, style = sty, rows = 2:11, cols = 2, gridExpand = TRUE) sty <- createStyle(numFmt = "yyyy/mmm/dd") addStyle(wb, 1, style = sty, rows = 2:11, cols = 3, gridExpand = TRUE) sty <- createStyle(numFmt = "yy / mmmm / dd") addStyle(wb, 1, style = sty, rows = 2:11, cols = 4, gridExpand = TRUE) sty <- createStyle(numFmt = "ddddd") addStyle(wb, 1, style = sty, rows = 2:11, cols = 5, gridExpand = TRUE) sty <- createStyle(numFmt = "yyyy-mmm-dd") addStyle(wb, 1, style = sty, rows = 2:11, cols = 6, gridExpand = TRUE) sty <- createStyle(numFmt = "mm/ dd yyyy") addStyle(wb, 1, style = sty, rows = 2:11, cols = 7, gridExpand = TRUE) sty <- createStyle(numFmt = "mm/dd/yy") addStyle(wb, 1, style = sty, rows = 2:11, cols = 8, gridExpand = TRUE) setColWidths(wb, 1, cols = 1:10, widths = 23) ## The default date format used in writeData and writeDataTable can be set with: options("openxlsx.dateFormat" = "dd/mm/yyyy") writeData(wb, "Date Formatting", dates, startRow = 8, borders = "rows") options("openxlsx.dateFormat" = "yyyy-mm-dd") writeData(wb, "Date Formatting", dates, startRow = 15) saveWorkbook(wb, "Date Formatting.xlsx", overwrite = TRUE) ``` ## DateTime Formatting The conversion from POSIX to Excel datetimes is dependent on the timezone you are in. If POSIX values are being written incorrectly, try setting the timezone with (for example) ```{r include = TRUE, eval = FALSE, highlight = TRUE} Sys.setenv(TZ = "Australia/Sydney") dateTimes <- data.frame("d1" = Sys.time() - 0:4*10000) for(i in 1:2) dateTimes <- cbind(dateTimes, dateTimes) names(dateTimes) <- paste0("d", 1:4) ## POSIX Formatting wb <- createWorkbook() addWorksheet(wb, "DateTime Formatting", gridLines = FALSE) writeData(wb, 1, dateTimes) ## write without styling ## openxlsx converts columns of class "POSIxt" to Excel datetimes with the format given by getOption("openxlsx.datetimeFormat", "yyyy/mm/dd hh:mm:ss") ## this can be set via (for example) options("openxlsx.datetimeFormat" = "yyyy-mm-dd hh:mm:ss") ## custom datetime formats can be made up of any combination of: ## d, dd, ddd, dddd, m, mm, mmm, mmmm, mmmmm, yy, yyyy, h, hh, m, mm, s, ss, AM/PM ## numFmt == "LONGDATE" will use the date format specified by the above long_date_style <- createStyle(numFmt = "LONGDATE") addStyle(wb, 1, style = long_date_style, rows = 2:11, cols = 1, gridExpand = TRUE) ## some custom date format examples sty <- createStyle(numFmt = "yyyy/mm/dd hh:mm:ss AM/PM") addStyle(wb, 1, style = sty, rows = 2:11, cols = 2, gridExpand = TRUE) sty <- createStyle(numFmt = "hh:mm:ss AM/PM") addStyle(wb, 1, style = sty, rows = 2:11, cols = 3, gridExpand = TRUE) sty <- createStyle(numFmt = "hh:mm:ss") addStyle(wb, 1, style = sty, rows = 2:11, cols = 4, gridExpand = TRUE) setColWidths(wb, 1, cols = 1:4, widths = 30) ## The default date format used in writeData and writeDataTable can be set with: options("openxlsx.datetimeFormat" = "yyyy/mm/dd hh:mm:ss") writeData(wb, "DateTime Formatting", dateTimes, startRow = 8, borders = "rows") options("openxlsx.datetimeFormat" = "hh:mm:ss AM/PM") writeDataTable(wb, "DateTime Formatting", dateTimes, startRow = 15) saveWorkbook(wb, "DateTime Formatting.xlsx", overwrite = TRUE) openXL("DateTime Formatting.xlsx") ``` ## Conditional Formatting ```{r include = TRUE, eval = FALSE, highlight = TRUE} wb <- createWorkbook() addWorksheet(wb, "cellIs") addWorksheet(wb, "Moving Row") addWorksheet(wb, "Moving Col") addWorksheet(wb, "Dependent on 1") addWorksheet(wb, "Duplicates") addWorksheet(wb, "containsText") addWorksheet(wb, "colourScale", zoom = 30) addWorksheet(wb, "databar") negStyle <- createStyle(fontColour = "#9C0006", bgFill = "#FFC7CE") posStyle <- createStyle(fontColour = "#006100", bgFill = "#C6EFCE") ## rule applies to all each cell in range writeData(wb, "cellIs", -5:5) writeData(wb, "cellIs", LETTERS[1:11], startCol=2) conditionalFormatting(wb, "cellIs", cols=1, rows=1:11, rule="!=0", style = negStyle) conditionalFormatting(wb, "cellIs", cols=1, rows=1:11, rule="==0", style = posStyle) ## highlight row dependent on first cell in row writeData(wb, "Moving Row", -5:5) writeData(wb, "Moving Row", LETTERS[1:11], startCol=2) conditionalFormatting(wb, "Moving Row", cols=1:2, rows=1:11, rule="$A1<0", style = negStyle) conditionalFormatting(wb, "Moving Row", cols=1:2, rows=1:11, rule="$A1>0", style = posStyle) ## highlight column dependent on first cell in column writeData(wb, "Moving Col", -5:5) writeData(wb, "Moving Col", LETTERS[1:11], startCol=2) conditionalFormatting(wb, "Moving Col", cols=1:2, rows=1:11, rule="A$1<0", style = negStyle) conditionalFormatting(wb, "Moving Col", cols=1:2, rows=1:11, rule="A$1>0", style = posStyle) ## highlight entire range cols X rows dependent only on cell A1 writeData(wb, "Dependent on 1", -5:5) writeData(wb, "Dependent on 1", LETTERS[1:11], startCol=2) conditionalFormatting(wb, "Dependent on 1", cols=1:2, rows=1:11, rule="$A$1<0", style = negStyle) conditionalFormatting(wb, "Dependent on 1", cols=1:2, rows=1:11, rule="$A$1>0", style = posStyle) ## highlight duplicates using default style writeData(wb, "Duplicates", sample(LETTERS[1:15], size = 10, replace = TRUE)) conditionalFormatting(wb, "Duplicates", cols = 1, rows = 1:10, type = "duplicates") ## cells containing text fn <- function(x) paste(sample(LETTERS, 10), collapse = "-") writeData(wb, "containsText", sapply(1:10, fn)) conditionalFormatting(wb, "containsText", cols = 1, rows = 1:10, type = "contains", rule = "A") ## colourscale colours cells based on cell value df <- read.xlsx(system.file("extdata", "readTest.xlsx", package = "openxlsx"), sheet = 5) writeData(wb, "colourScale", df, colNames=FALSE) ## write data.frame ## rule is a vector or colours of length 2 or 3 (any hex colour or any of colours()) ## If rule is NULL, min and max of cells is used. Rule must be the same length as style or NULL. conditionalFormatting(wb, "colourScale", cols=seq_len(ncol(df)), rows=seq_len(nrow(df)), style = c("black", "white"), rule = c(0, 255), type = "colourScale") setColWidths(wb, "colourScale", cols = seq_len(ncol(df)), widths = 1.07) setRowHeights(wb, "colourScale", rows = seq_len(nrow(df)), heights = 7.5) ## Databars writeData(wb, "databar", -5:5) conditionalFormatting(wb, "databar", cols = 1, rows = 1:12, type = "databar") ## Default colours saveWorkbook(wb, "conditionalFormattingExample.xlsx", TRUE) openXL(wb) ``` ## Numeric Formatting numeric columns styling can be set using the numFmt parameter in createStyle or a default can be set with, for example, options("openxlsx.numFmt" = "#,#0.00") ```{r include = TRUE, eval = FALSE, highlight = TRUE} options("openxlsx.numFmt" = NULL) wb <- createWorkbook() addWorksheet(wb, "Sheet 1") df <- data.frame(matrix(12.987654321, ncol = 7, nrow = 5)) ## data.frame to write df[ ,6:7] <- df[ ,6:7]*1E6 ## Set column 1 class to "comma" to get comma separated thousands class(df$X1) <- "comma" writeData(wb, 1, df) s <- createStyle(numFmt = "0.0") addStyle(wb, 1, style = s, rows = 2:6, cols = 2, gridExpand = TRUE) s <- createStyle(numFmt = "0.00") addStyle(wb, 1, style = s, rows = 2:6, cols = 3, gridExpand = TRUE) s <- createStyle(numFmt = "0.000") addStyle(wb, 1, style = s, rows = 2:6, cols = 4, gridExpand = TRUE) s <- createStyle(numFmt = "#,##0") addStyle(wb, 1, style = s, rows = 2:6, cols = 5, gridExpand = TRUE) s <- createStyle(numFmt = "#,##0.00") addStyle(wb, 1, style = s, rows = 2:6, cols = 6, gridExpand = TRUE) s <- createStyle(numFmt = "$ #,##0.00") addStyle(wb, 1, style = s, rows = 2:6, cols = 7, gridExpand = TRUE) ## set a default number format for numeric columns of data.frames options("openxlsx.numFmt" = "$* #,#0.00") writeData(wb, 1, x = data.frame("Using Default Options" = rep(2345.1235, 5)), startCol = 9) setColWidths(wb, 1, cols = 1:10, widths = 15) ## Using default numFmt to round to 2 dp (Any numeric column will be affected) addWorksheet(wb, "Sheet 2") df <- iris df[, 1:4] <- df[1:4] + runif(1) writeDataTable(wb, sheet = 2, x = df) writeData(wb, sheet = 2, x = df, startCol = 7) writeData(wb, sheet = 2, x = df, startCol = 13, borders = "rows") ## To stop auto-formatting numerics set options("openxlsx.numFmt" = NULL) addWorksheet(wb, "Sheet 3") writeDataTable(wb, sheet = 3, x = df) openXL(wb) ``` ```{r cleanup, eval = FALSE, include = FALSE} xlsx_files <- dir(pattern = "*.xlsx") unlink(xlsx_files) ``` openxlsx/inst/doc/Introduction.html0000644000176200001440000024200014745235501017227 0ustar liggesusers Introduction

Introduction

Alexander Walker, Philipp Schauberger

2025-01-25

Basic Examples

write.xlsx

The simplest way to write to a workbook is write.xlsx(). By default, write.xlsx calls writeData. If asTable is TRUE write.xlsx will write x as an Excel table.

## write to working directory
library(openxlsx)
write.xlsx(iris, file = "writeXLSX1.xlsx")
write.xlsx(iris, file = "writeXLSXTable1.xlsx", asTable = TRUE)

write list of data.frames to xlsx-file

## write a list of data.frames to individual worksheets using list names as
## worksheet names
l <- list(IRIS = iris, MTCARS = mtcars)
write.xlsx(l, file = "writeXLSX2.xlsx")
write.xlsx(l, file = "writeXLSXTable2.xlsx", asTable = TRUE)

write.xlsx also accepts styling parameters

The simplest way is to set default options and set column class

options(openxlsx.borderColour = "#4F80BD")
options(openxlsx.borderStyle = "thin")
options(openxlsx.dateFormat = "mm/dd/yyyy")
options(openxlsx.datetimeFormat = "yyyy-mm-dd hh:mm:ss")
options(openxlsx.numFmt = NULL)  ## For default style rounding of numeric columns

df <- data.frame(Date = Sys.Date() - 0:19, LogicalT = TRUE, Time = Sys.time() - 0:19 *
    60 * 60, Cash = paste("$", 1:20), Cash2 = 31:50, hLink = "https://CRAN.R-project.org/",
    Percentage = seq(0, 1, length.out = 20), TinyNumbers = runif(20)/1e+09, stringsAsFactors = FALSE)

class(df$Cash) <- "currency"
class(df$Cash2) <- "accounting"
class(df$hLink) <- "hyperlink"
class(df$Percentage) <- "percentage"
class(df$TinyNumbers) <- "scientific"

write.xlsx(df, "writeXLSX3.xlsx")
write.xlsx(df, file = "writeXLSXTable3.xlsx", asTable = TRUE)

Workbook styles

define a style for column headers

hs <- createStyle(fontColour = "#ffffff", fgFill = "#4F80BD", halign = "center",
    valign = "center", textDecoration = "Bold", border = "TopBottomLeftRight", textRotation = 45)

write.xlsx(iris, file = "writeXLSX4.xlsx", borders = "rows", headerStyle = hs)
write.xlsx(iris, file = "writeXLSX5.xlsx", borders = "columns", headerStyle = hs)

write.xlsx(iris, "writeXLSXTable4.xlsx", asTable = TRUE, headerStyle = createStyle(textRotation = 45))

When writing a list, the stylings will apply to all list elements

l <- list(IRIS = iris, colClasses = df)
write.xlsx(l, file = "writeXLSX6.xlsx", borders = "columns", headerStyle = hs)
write.xlsx(l, file = "writeXLSXTable5.xlsx", asTable = TRUE, tableStyle = "TableStyleLight2")

openXL("writeXLSX6.xlsx")
openXL("writeXLSXTable5.xlsx")

write.xlsx returns the workbook object for further editing

wb <- write.xlsx(iris, "writeXLSX6.xlsx")
setColWidths(wb, sheet = 1, cols = 1:5, widths = 20)
saveWorkbook(wb, "writeXLSX6.xlsx", overwrite = TRUE)

Workbook creation walk-through

create workbook and set default border Colour and style

require(ggplot2)
wb <- createWorkbook()
options(openxlsx.borderColour = "#4F80BD")
options(openxlsx.borderStyle = "thin")
modifyBaseFont(wb, fontSize = 10, fontName = "Arial Narrow")

Add Sheets

addWorksheet(wb, sheetName = "Motor Trend Car Road Tests", gridLines = FALSE)
addWorksheet(wb, sheetName = "Iris", gridLines = FALSE)

write data to sheet 1

freezePane(wb, sheet = 1, firstRow = TRUE, firstCol = TRUE)  ## freeze first row and column
writeDataTable(wb, sheet = 1, x = mtcars, colNames = TRUE, rowNames = TRUE, tableStyle = "TableStyleLight9")

setColWidths(wb, sheet = 1, cols = "A", widths = 18)

write data to sheet 2

iris data.frame is added as excel table on sheet 2.

writeDataTable(wb, sheet = 2, iris, startCol = "K", startRow = 2)

qplot(data = iris, x = Sepal.Length, y = Sepal.Width, colour = Species)
insertPlot(wb, 2, xy = c("B", 16))  ## insert plot at cell B16

means <- aggregate(x = iris[, -5], by = list(iris$Species), FUN = mean)
vars <- aggregate(x = iris[, -5], by = list(iris$Species), FUN = var)

add write group means

headSty <- createStyle(fgFill = "#DCE6F1", halign = "center", border = "TopBottomLeftRight")
writeData(wb, 2, x = "Iris dataset group means", startCol = 2, startRow = 2)
writeData(wb, 2, x = means, startCol = "B", startRow = 3, borders = "rows", headerStyle = headSty)

add write group variances

writeData(wb, 2, x = "Iris dataset group variances", startCol = 2, startRow = 9)
writeData(wb, 2, x = vars, startCol = "B", startRow = 10, borders = "columns", headerStyle = headSty)

setColWidths(wb, 2, cols = 2:6, widths = 12)  ## width is recycled for each col
setColWidths(wb, 2, cols = 11:15, widths = 15)

add style mean & variance table headers

s1 <- createStyle(fontSize = 14, textDecoration = c("bold", "italic"))
addStyle(wb, 2, style = s1, rows = c(2, 9), cols = c(2, 2))

save workbook

saveWorkbook(wb, "basics.xlsx", overwrite = TRUE)  ## save to working directory

Further Examples

Stock Price

require(ggplot2)

wb <- createWorkbook()

## read historical prices from yahoo finance
ticker <- "CBA.AX"
csv.url <- paste0("https://query1.finance.yahoo.com/v7/finance/download/", ticker,
    "?period1=1597597610&period2=1629133610&interval=1d&events=history&includeAdjustedClose= TRue")
prices <- read.csv(url(csv.url), as.is = TRUE)
prices$Date <- as.Date(prices$Date)
close <- prices$Close
prices$logReturns = c(0, log(close[2:length(close)]/close[1:(length(close) - 1)]))

## Create plot of price series and add to worksheet
ggplot(data = prices, aes(as.Date(Date), as.numeric(Close))) + geom_line(colour = "royalblue2") +
    labs(x = "Date", y = "Price", title = ticker) + geom_area(fill = "royalblue1",
    alpha = 0.3) + coord_cartesian(ylim = c(min(prices$Close) - 1.5, max(prices$Close) +
    1.5))

## Add worksheet and write plot to sheet
addWorksheet(wb, sheetName = "CBA")
insertPlot(wb, sheet = 1, xy = c("J", 3))

## Histogram of log returns
ggplot(data = prices, aes(x = logReturns)) + geom_histogram(binwidth = 0.0025) +
    labs(title = "Histogram of log returns")

## currency
class(prices$Close) <- "currency"  ## styles as currency in workbook

## write historical data and histogram of returns
writeDataTable(wb, sheet = "CBA", x = prices)
insertPlot(wb, sheet = 1, startRow = 25, startCol = "J")

## Add conditional formatting to show where logReturn > 0.01 using default
## style
conditionalFormat(wb, sheet = 1, cols = seq_len((prices)), rows = 2:(nrow(prices) +
    1), rule = "$H2 > 0.01")

## style log return col as a percentage
logRetStyle <- createStyle(numFmt = "percentage")

addStyle(wb, 1, style = logRetStyle, rows = 2:(nrow(prices) + 1), cols = "H", gridExpand = TRUE)

setColWidths(wb, sheet = 1, cols = c("A", "F", "G", "H"), widths = 15)

## save workbook to working directory
saveWorkbook(wb, "stockPrice.xlsx", overwrite = TRUE)
openXL("stockPrice.xlsx")

Image Compression using PCA

require(openxlsx)
require(jpeg)
require(ggplot2)

plotFn <- function(x, ...) {
  colvec <- grey(x)
  colmat <- array(match(colvec, unique(colvec)), dim = dim(x)[1:2])
  image(x = 0:(dim(colmat)[2]), y = 0:(dim(colmat)[1]), z = t(colmat[rev(seq_len(nrow(colmat))) , ]),
    col = unique(colvec), xlab = "", ylab = "", axes = FALSE, asp = 1,
    bty ="n", frame.plot=FALSE, ann=FALSE)
}

## Create workbook and add a worksheet, hide gridlines
wb <- createWorkbook("Einstein")
addWorksheet(wb, "Original Image", gridLines = FALSE)

A <- readJPEG(file.path(path.package("openxlsx"), "einstein.jpg"))
height <- nrow(A)
width <- ncol(A)

## write "Original Image" to cell B2
writeData(wb, 1, "Original Image", xy = c(2,2))

## write Object size to cell B3
writeData(wb, 1, sprintf("Image object size: %s bytes",
                         format(object.size(A+0)[[1]], big.mark=',')), 
          xy = c(2,3))  ## equivalent to startCol = 2, startRow = 3

## Plot image
par(mar=rep(0, 4), xpd = NA)
plotFn(A)

## insert plot currently showing in plot window
insertPlot(wb, 1, width, height, units="px", startRow= 5, startCol = 2)       

## SVD of covariance matrix
rMeans <- rowMeans(A)
rowMeans <- do.call("cbind", lapply(seq_len(ncol(A)), function(X) rMeans))
A <- A - rowMeans
E <- svd(A %*% t(A) / (ncol(A) - 1)) # SVD on covariance matrix of A
pve <- data.frame("Eigenvalues" = E$d, 
                  "PVE" = E$d/sum(E$d),
                  "Cumulative PVE" = cumsum(E$d/sum(E$d)))

## write eigenvalues to worksheet
addWorksheet(wb, "Principal Component Analysis")
hs <- createStyle(fontColour = "#ffffff", fgFill = "#4F80BD",
                  halign = "CENTER", textDecoration = "Bold",
                  border = "TopBottomLeftRight", borderColour = "#4F81BD")

writeData(wb, 2, x="Proportions of variance explained by Eigenvector" ,startRow = 2)
mergeCells(wb, sheet=2, cols=1:4, rows=2)

setColWidths(wb, 2, cols = 1:3, widths = c(14, 12, 15))
writeData(wb, 2, x=pve, startRow = 3, startCol = 1, borders="rows", headerStyle=hs)

## Plots
pve <- cbind(pve, "Ind" = seq_len(nrow(pve)))
ggplot(data = pve[1:20,], aes(x = Ind, y = 100*PVE)) +
  geom_bar(stat="identity", position = "dodge") +
  xlab("Principal Component Index") + ylab("Proportion of Variance Explained") +
  geom_line(size = 1, col = "blue") + geom_point(size = 3, col = "blue")

## Write plot to worksheet 2
insertPlot(wb, 2, width = 5, height = 4, startCol = "E", startRow = 2) 

## Plot of cumulative explained variance
ggplot(data = pve[1:50,], aes(x = Ind, y = 100*Cumulative.PVE)) +
  geom_point(size=2.5) + geom_line(size=1) + xlab("Number of PCs") +
  ylab("Cumulative Proportion of Variance Explained")
insertPlot(wb, 2, width = 5, height = 4, xy= c("M", 2)) 


## Reconstruct image using increasing number of PCs
nPCs <- c(5, 7, 12, 20, 50, 200)
startRow <- rep(c(2, 24), each = 3)
startCol <- rep(c("B", "H", "N"), 2)

## create a worksheet to save reconstructed images to
addWorksheet(wb, "Reconstructed Images", zoom = 90)

for(i in seq_len(length(nPCs))) {
  
  V <- E$v[, 1:nPCs[i]]
  imgHat <- t(V) %*% A  ## project img data on to PCs
  imgSize <- object.size(V) + object.size(imgHat) + object.size(rMeans)
  
  imgHat <- V %*% imgHat + rowMeans  ## reconstruct from PCs and add back row means
  imgHat <- round((imgHat - min(imgHat)) / (max(imgHat) - min(imgHat))*255) # scale
  plotFn(imgHat/255)
  
  ## write strings to worksheet 3
  writeData(wb, "Reconstructed Images", 
            sprintf("Number of principal components used:  %s", 
                    nPCs[[i]]), startCol[i], startRow[i])
  
  writeData(wb, "Reconstructed Images", 
            sprintf("Sum of component object sizes: %s bytes",
                    format(as.numeric(imgSize), big.mark=',')), startCol[i], startRow[i]+1)
  
  ## write reconstruced image
  insertPlot(wb, "Reconstructed Images", width, height, units="px",
             xy = c(startCol[i], startRow[i]+3))
  
}

# hide grid lines
showGridLines(wb, sheet = 3, showGridLines = FALSE)

## Make text above images BOLD
boldStyle <- createStyle(textDecoration="BOLD")

## only want to apply style to specified cells (not all combinations of rows & cols)
addStyle(wb, "Reconstructed Images", style=boldStyle, 
         rows = c(startRow, startRow+1), cols = rep(startCol, 2), 
         gridExpand = FALSE)  

## save workbook to working directory
saveWorkbook(wb, "Image dimensionality reduction.xlsx", overwrite = TRUE) 




## remove example files for cran test
if (identical(Sys.getenv("NOT_CRAN", unset = "true"), "false")) {
  file_list<-list.files(pattern="\\.xlsx",recursive = TRUE)
  file_list<-fl[!grepl("inst/extdata",file_list)&!grepl("man/",file_list)]
  
  if(length(file_list)>0) {
    rm(file_list)
  }
}
openxlsx/inst/doc/Formatting.R0000644000176200001440000002712414745235500016124 0ustar liggesusers## ----setup, include = FALSE--------------------------------------------------- library(openxlsx) ## ----include = TRUE, eval = FALSE, highlight = TRUE--------------------------- # ## data.frame to write # df <- data.frame("Date" = Sys.Date()-0:4, # "Logical" = c(TRUE, FALSE, TRUE, TRUE, FALSE), # "Currency" = paste("$",-2:2), # "Accounting" = -2:2, # "hLink" = "https://CRAN.R-project.org/", # "Percentage" = seq(-1, 1, length.out=5), # "TinyNumber" = runif(5) / 1E9, stringsAsFactors = FALSE) # # class(df$Currency) <- "currency" # class(df$Accounting) <- "accounting" # class(df$hLink) <- "hyperlink" # class(df$Percentage) <- "percentage" # class(df$TinyNumber) <- "scientific" # # ## Formatting can be applied simply through the write functions # ## global options can be set to further simplify things # options("openxlsx.borderStyle" = "thin") # options("openxlsx.borderColour" = "#4F81BD") # # ## create a workbook and add a worksheet # wb <- createWorkbook() # addWorksheet(wb, "writeData auto-formatting") # # writeData(wb, 1, df, startRow = 2, startCol = 2) # writeData(wb, 1, df, startRow = 9, startCol = 2, borders = "surrounding") # writeData(wb, 1, df, startRow = 16, startCol = 2, borders = "rows") # writeData(wb, 1, df, startRow = 23, startCol = 2, borders ="columns") # writeData(wb, 1, df, startRow = 30, startCol = 2, borders ="all") # # ## headerStyles # hs1 <- createStyle(fgFill = "#4F81BD", halign = "CENTER", textDecoration = "Bold", # border = "Bottom", fontColour = "white") # # writeData(wb, 1, df, startRow = 16, startCol = 10, headerStyle = hs1, # borders = "rows", borderStyle = "medium") # # ## to change the display text for a hyperlink column just write over those cells # writeData(wb, sheet = 1, x = paste("Hyperlink", 1:5), startRow = 17, startCol = 14) # # # ## writing as an Excel Table # # addWorksheet(wb, "writeDataTable") # writeDataTable(wb, 2, df, startRow = 2, startCol = 2) # writeDataTable(wb, 2, df, startRow = 9, startCol = 2, tableStyle = "TableStyleLight9") # writeDataTable(wb, 2, df, startRow = 16, startCol = 2, tableStyle = "TableStyleLight2") # writeDataTable(wb, 2, df, startRow = 23, startCol = 2, tableStyle = "TableStyleMedium21") # # openXL(wb) ## opens a temp version ## ----include = TRUE, eval = FALSE, highlight = TRUE--------------------------- # # data.frame of dates # dates <- data.frame("d1" = Sys.Date() - 0:4) # for(i in 1:3) dates <- cbind(dates, dates) # names(dates) <- paste0("d", 1:8) # # ## Date Formatting # wb <- createWorkbook() # addWorksheet(wb, "Date Formatting", gridLines = FALSE) # writeData(wb, 1, dates) ## write without styling # # ## openxlsx converts columns of class "Date" to Excel dates with the format given by # getOption("openxlsx.dateFormat", "mm/dd/yyyy") # # ## this can be set via (for example) # options("openxlsx.dateFormat" = "yyyy/mm/dd") # ## custom date formats can be made up of any combination of: # ## d, dd, ddd, dddd, m, mm, mmm, mmmm, mmmmm, yy, yyyy # # ## numFmt == "DATE" will use the date format specified by the above # addStyle(wb, 1, style = createStyle(numFmt = "DATE"), rows = 2:11, cols = 1, gridExpand = TRUE) # # ## some custom date format examples # sty <- createStyle(numFmt = "yyyy/mm/dd") # addStyle(wb, 1, style = sty, rows = 2:11, cols = 2, gridExpand = TRUE) # # sty <- createStyle(numFmt = "yyyy/mmm/dd") # addStyle(wb, 1, style = sty, rows = 2:11, cols = 3, gridExpand = TRUE) # # sty <- createStyle(numFmt = "yy / mmmm / dd") # addStyle(wb, 1, style = sty, rows = 2:11, cols = 4, gridExpand = TRUE) # # sty <- createStyle(numFmt = "ddddd") # addStyle(wb, 1, style = sty, rows = 2:11, cols = 5, gridExpand = TRUE) # # sty <- createStyle(numFmt = "yyyy-mmm-dd") # addStyle(wb, 1, style = sty, rows = 2:11, cols = 6, gridExpand = TRUE) # # sty <- createStyle(numFmt = "mm/ dd yyyy") # addStyle(wb, 1, style = sty, rows = 2:11, cols = 7, gridExpand = TRUE) # # sty <- createStyle(numFmt = "mm/dd/yy") # addStyle(wb, 1, style = sty, rows = 2:11, cols = 8, gridExpand = TRUE) # # setColWidths(wb, 1, cols = 1:10, widths = 23) # # ## The default date format used in writeData and writeDataTable can be set with: # options("openxlsx.dateFormat" = "dd/mm/yyyy") # writeData(wb, "Date Formatting", dates, startRow = 8, borders = "rows") # options("openxlsx.dateFormat" = "yyyy-mm-dd") # writeData(wb, "Date Formatting", dates, startRow = 15) # # saveWorkbook(wb, "Date Formatting.xlsx", overwrite = TRUE) ## ----include = TRUE, eval = FALSE, highlight = TRUE--------------------------- # Sys.setenv(TZ = "Australia/Sydney") # # dateTimes <- data.frame("d1" = Sys.time() - 0:4*10000) # for(i in 1:2) dateTimes <- cbind(dateTimes, dateTimes) # names(dateTimes) <- paste0("d", 1:4) # # ## POSIX Formatting # wb <- createWorkbook() # addWorksheet(wb, "DateTime Formatting", gridLines = FALSE) # writeData(wb, 1, dateTimes) ## write without styling # # ## openxlsx converts columns of class "POSIxt" to Excel datetimes with the format given by # getOption("openxlsx.datetimeFormat", "yyyy/mm/dd hh:mm:ss") # # ## this can be set via (for example) # options("openxlsx.datetimeFormat" = "yyyy-mm-dd hh:mm:ss") # ## custom datetime formats can be made up of any combination of: # ## d, dd, ddd, dddd, m, mm, mmm, mmmm, mmmmm, yy, yyyy, h, hh, m, mm, s, ss, AM/PM # # ## numFmt == "LONGDATE" will use the date format specified by the above # long_date_style <- createStyle(numFmt = "LONGDATE") # addStyle(wb, 1, style = long_date_style, rows = 2:11, cols = 1, gridExpand = TRUE) # # ## some custom date format examples # sty <- createStyle(numFmt = "yyyy/mm/dd hh:mm:ss AM/PM") # addStyle(wb, 1, style = sty, rows = 2:11, cols = 2, gridExpand = TRUE) # # sty <- createStyle(numFmt = "hh:mm:ss AM/PM") # addStyle(wb, 1, style = sty, rows = 2:11, cols = 3, gridExpand = TRUE) # # sty <- createStyle(numFmt = "hh:mm:ss") # addStyle(wb, 1, style = sty, rows = 2:11, cols = 4, gridExpand = TRUE) # # setColWidths(wb, 1, cols = 1:4, widths = 30) # # ## The default date format used in writeData and writeDataTable can be set with: # options("openxlsx.datetimeFormat" = "yyyy/mm/dd hh:mm:ss") # writeData(wb, "DateTime Formatting", dateTimes, startRow = 8, borders = "rows") # # options("openxlsx.datetimeFormat" = "hh:mm:ss AM/PM") # writeDataTable(wb, "DateTime Formatting", dateTimes, startRow = 15) # # saveWorkbook(wb, "DateTime Formatting.xlsx", overwrite = TRUE) # openXL("DateTime Formatting.xlsx") ## ----include = TRUE, eval = FALSE, highlight = TRUE--------------------------- # wb <- createWorkbook() # addWorksheet(wb, "cellIs") # addWorksheet(wb, "Moving Row") # addWorksheet(wb, "Moving Col") # addWorksheet(wb, "Dependent on 1") # addWorksheet(wb, "Duplicates") # addWorksheet(wb, "containsText") # addWorksheet(wb, "colourScale", zoom = 30) # addWorksheet(wb, "databar") # # negStyle <- createStyle(fontColour = "#9C0006", bgFill = "#FFC7CE") # posStyle <- createStyle(fontColour = "#006100", bgFill = "#C6EFCE") # # ## rule applies to all each cell in range # writeData(wb, "cellIs", -5:5) # writeData(wb, "cellIs", LETTERS[1:11], startCol=2) # conditionalFormatting(wb, "cellIs", cols=1, rows=1:11, rule="!=0", style = negStyle) # conditionalFormatting(wb, "cellIs", cols=1, rows=1:11, rule="==0", style = posStyle) # # ## highlight row dependent on first cell in row # writeData(wb, "Moving Row", -5:5) # writeData(wb, "Moving Row", LETTERS[1:11], startCol=2) # conditionalFormatting(wb, "Moving Row", cols=1:2, rows=1:11, rule="$A1<0", style = negStyle) # conditionalFormatting(wb, "Moving Row", cols=1:2, rows=1:11, rule="$A1>0", style = posStyle) # # ## highlight column dependent on first cell in column # writeData(wb, "Moving Col", -5:5) # writeData(wb, "Moving Col", LETTERS[1:11], startCol=2) # conditionalFormatting(wb, "Moving Col", cols=1:2, rows=1:11, rule="A$1<0", style = negStyle) # conditionalFormatting(wb, "Moving Col", cols=1:2, rows=1:11, rule="A$1>0", style = posStyle) # # ## highlight entire range cols X rows dependent only on cell A1 # writeData(wb, "Dependent on 1", -5:5) # writeData(wb, "Dependent on 1", LETTERS[1:11], startCol=2) # conditionalFormatting(wb, "Dependent on 1", cols=1:2, rows=1:11, rule="$A$1<0", style = negStyle) # conditionalFormatting(wb, "Dependent on 1", cols=1:2, rows=1:11, rule="$A$1>0", style = posStyle) # # ## highlight duplicates using default style # writeData(wb, "Duplicates", sample(LETTERS[1:15], size = 10, replace = TRUE)) # conditionalFormatting(wb, "Duplicates", cols = 1, rows = 1:10, type = "duplicates") # # ## cells containing text # fn <- function(x) paste(sample(LETTERS, 10), collapse = "-") # writeData(wb, "containsText", sapply(1:10, fn)) # conditionalFormatting(wb, "containsText", cols = 1, rows = 1:10, type = "contains", rule = "A") # # ## colourscale colours cells based on cell value # df <- read.xlsx(system.file("extdata", "readTest.xlsx", package = "openxlsx"), sheet = 5) # writeData(wb, "colourScale", df, colNames=FALSE) ## write data.frame # # ## rule is a vector or colours of length 2 or 3 (any hex colour or any of colours()) # ## If rule is NULL, min and max of cells is used. Rule must be the same length as style or NULL. # conditionalFormatting(wb, "colourScale", cols=seq_len(ncol(df)), rows=seq_len(nrow(df)), # style = c("black", "white"), # rule = c(0, 255), # type = "colourScale") # # setColWidths(wb, "colourScale", cols = seq_len(ncol(df)), widths = 1.07) # setRowHeights(wb, "colourScale", rows = seq_len(nrow(df)), heights = 7.5) # # ## Databars # writeData(wb, "databar", -5:5) # conditionalFormatting(wb, "databar", cols = 1, rows = 1:12, type = "databar") ## Default colours # # saveWorkbook(wb, "conditionalFormattingExample.xlsx", TRUE) # # openXL(wb) ## ----include = TRUE, eval = FALSE, highlight = TRUE--------------------------- # options("openxlsx.numFmt" = NULL) # wb <- createWorkbook() # addWorksheet(wb, "Sheet 1") # df <- data.frame(matrix(12.987654321, ncol = 7, nrow = 5)) ## data.frame to write # df[ ,6:7] <- df[ ,6:7]*1E6 # # ## Set column 1 class to "comma" to get comma separated thousands # class(df$X1) <- "comma" # # writeData(wb, 1, df) # s <- createStyle(numFmt = "0.0") # addStyle(wb, 1, style = s, rows = 2:6, cols = 2, gridExpand = TRUE) # # s <- createStyle(numFmt = "0.00") # addStyle(wb, 1, style = s, rows = 2:6, cols = 3, gridExpand = TRUE) # # s <- createStyle(numFmt = "0.000") # addStyle(wb, 1, style = s, rows = 2:6, cols = 4, gridExpand = TRUE) # # s <- createStyle(numFmt = "#,##0") # addStyle(wb, 1, style = s, rows = 2:6, cols = 5, gridExpand = TRUE) # # s <- createStyle(numFmt = "#,##0.00") # addStyle(wb, 1, style = s, rows = 2:6, cols = 6, gridExpand = TRUE) # # s <- createStyle(numFmt = "$ #,##0.00") # addStyle(wb, 1, style = s, rows = 2:6, cols = 7, gridExpand = TRUE) # # ## set a default number format for numeric columns of data.frames # options("openxlsx.numFmt" = "$* #,#0.00") # writeData(wb, 1, x = data.frame("Using Default Options" = rep(2345.1235, 5)), startCol = 9) # # setColWidths(wb, 1, cols = 1:10, widths = 15) # # ## Using default numFmt to round to 2 dp (Any numeric column will be affected) # addWorksheet(wb, "Sheet 2") # df <- iris # df[, 1:4] <- df[1:4] + runif(1) # writeDataTable(wb, sheet = 2, x = df) # writeData(wb, sheet = 2, x = df, startCol = 7) # writeData(wb, sheet = 2, x = df, startCol = 13, borders = "rows") # # ## To stop auto-formatting numerics set # options("openxlsx.numFmt" = NULL) # addWorksheet(wb, "Sheet 3") # writeDataTable(wb, sheet = 3, x = df) # # openXL(wb) ## ----cleanup, eval = FALSE, include = FALSE----------------------------------- # xlsx_files <- dir(pattern = "*.xlsx") # unlink(xlsx_files) openxlsx/inst/doc/Introduction.R0000644000176200001440000003774014745235500016500 0ustar liggesusers## ----include = TRUE, tidy = TRUE, eval = FALSE, highlight = TRUE-------------- # ## write to working directory # library(openxlsx) # write.xlsx(iris, file = "writeXLSX1.xlsx") # write.xlsx(iris, file = "writeXLSXTable1.xlsx", asTable = TRUE) ## ----include = TRUE, tidy = TRUE, eval = FALSE ,highlight = TRUE-------------- # ## write a list of data.frames to individual worksheets using list names as worksheet names # l <- list("IRIS" = iris, "MTCARS" = mtcars) # write.xlsx(l, file = "writeXLSX2.xlsx") # write.xlsx(l, file = "writeXLSXTable2.xlsx", asTable = TRUE) ## ----include = TRUE, tidy = TRUE, eval = FALSE ,highlight= TRUE--------------- # options("openxlsx.borderColour" = "#4F80BD") # options("openxlsx.borderStyle" = "thin") # options("openxlsx.dateFormat" = "mm/dd/yyyy") # options("openxlsx.datetimeFormat" = "yyyy-mm-dd hh:mm:ss") # options("openxlsx.numFmt" = NULL) ## For default style rounding of numeric columns # # df <- data.frame("Date" = Sys.Date()-0:19, "LogicalT" = TRUE, # "Time" = Sys.time()-0:19*60*60, # "Cash" = paste("$",1:20), "Cash2" = 31:50, # "hLink" = "https://CRAN.R-project.org/", # "Percentage" = seq(0, 1, length.out=20), # "TinyNumbers" = runif(20) / 1E9, stringsAsFactors = FALSE) # # class(df$Cash) <- "currency" # class(df$Cash2) <- "accounting" # class(df$hLink) <- "hyperlink" # class(df$Percentage) <- "percentage" # class(df$TinyNumbers) <- "scientific" # # write.xlsx(df, "writeXLSX3.xlsx") # write.xlsx(df, file = "writeXLSXTable3.xlsx", asTable = TRUE) # # ## ----include = TRUE, tidy = TRUE, eval = FALSE, highlight= TRUE--------------- # hs <- createStyle(fontColour = "#ffffff", fgFill = "#4F80BD", # halign = "center", valign = "center", textDecoration = "Bold", # border = "TopBottomLeftRight", textRotation = 45) # # write.xlsx(iris, file = "writeXLSX4.xlsx", borders = "rows", headerStyle = hs) # write.xlsx(iris, file = "writeXLSX5.xlsx", borders = "columns", headerStyle = hs) # # write.xlsx(iris, "writeXLSXTable4.xlsx", asTable = TRUE, # headerStyle = createStyle(textRotation = 45)) ## ----include = TRUE, tidy = TRUE, eval = FALSE, highlight = TRUE-------------- # l <- list("IRIS" = iris, "colClasses" = df) # write.xlsx(l, file = "writeXLSX6.xlsx", borders = "columns", headerStyle = hs) # write.xlsx(l, file = "writeXLSXTable5.xlsx", asTable = TRUE, tableStyle = "TableStyleLight2") # # openXL("writeXLSX6.xlsx") # openXL("writeXLSXTable5.xlsx") ## ----include = TRUE, tidy = TRUE, eval = FALSE, highlight = TRUE-------------- # wb <- write.xlsx(iris, "writeXLSX6.xlsx") # setColWidths(wb, sheet = 1, cols = 1:5, widths = 20) # saveWorkbook(wb, "writeXLSX6.xlsx", overwrite = TRUE) ## ----include = TRUE, tidy = TRUE, eval = FALSE, highlight = TRUE-------------- # require(ggplot2) # wb <- createWorkbook() # options("openxlsx.borderColour" = "#4F80BD") # options("openxlsx.borderStyle" = "thin") # modifyBaseFont(wb, fontSize = 10, fontName = "Arial Narrow") ## ----include = TRUE,tidy = TRUE, eval = FALSE, highlight = TRUE--------------- # addWorksheet(wb, sheetName = "Motor Trend Car Road Tests", gridLines = FALSE) # addWorksheet(wb, sheetName = "Iris", gridLines = FALSE) ## ----include = TRUE, tidy = TRUE, eval = FALSE, highlight = TRUE-------------- # freezePane(wb, sheet = 1, firstRow = TRUE, firstCol = TRUE) ## freeze first row and column # writeDataTable(wb, sheet = 1, x = mtcars, # colNames = TRUE, rowNames = TRUE, # tableStyle = "TableStyleLight9") # # setColWidths(wb, sheet = 1, cols = "A", widths = 18) ## ----include = TRUE, tidy = TRUE, eval = FALSE, highlight = TRUE-------------- # writeDataTable(wb, sheet = 2, iris, startCol = "K", startRow = 2) # # qplot(data=iris, x = Sepal.Length, y= Sepal.Width, colour = Species) # insertPlot(wb, 2, xy=c("B", 16)) ## insert plot at cell B16 # # means <- aggregate(x = iris[,-5], by = list(iris$Species), FUN = mean) # vars <- aggregate(x = iris[,-5], by = list(iris$Species), FUN = var) ## ----include = TRUE, tidy = TRUE, eval = FALSE, highlight = TRUE-------------- # headSty <- createStyle(fgFill="#DCE6F1", halign="center", border = "TopBottomLeftRight") # writeData(wb, 2, x = "Iris dataset group means", startCol = 2, startRow = 2) # writeData(wb, 2, x = means, startCol = "B", startRow=3, borders="rows", headerStyle = headSty) ## ----include = TRUE, tidy = TRUE, eval = FALSE, highlight = TRUE-------------- # writeData(wb, 2, x = "Iris dataset group variances", startCol = 2, startRow = 9) # writeData(wb, 2, x= vars, startCol = "B", startRow=10, borders="columns", # headerStyle = headSty) # # setColWidths(wb, 2, cols=2:6, widths = 12) ## width is recycled for each col # setColWidths(wb, 2, cols=11:15, widths = 15) ## ----include = TRUE, tidy = TRUE, eval = FALSE, highlight = TRUE-------------- # s1 <- createStyle(fontSize=14, textDecoration=c("bold", "italic")) # addStyle(wb, 2, style = s1, rows=c(2,9), cols=c(2,2)) ## ----include = TRUE, tidy = TRUE, eval = FALSE, highlight = TRUE-------------- # saveWorkbook(wb, "basics.xlsx", overwrite = TRUE) ## save to working directory ## ----eval = FALSE, include = TRUE--------------------------------------------- # ## inspired by xtable gallery # #https://CRAN.R-project.org/package=xtable/vignettes/xtableGallery.pdf # # ## Create a new workbook # wb <- createWorkbook() # data(tli, package = "xtable") # # ## data.frame # test.n <- "data.frame" # my.df <- tli[1:10, ] # addWorksheet(wb = wb, sheetName = test.n) # writeData(wb = wb, sheet = test.n, x = my.df, borders = "n") # # ## matrix # test.n <- "matrix" # design.matrix <- model.matrix(~ sex * grade, data = my.df) # addWorksheet(wb = wb, sheetName = test.n) # writeData(wb = wb, sheet = test.n, x = design.matrix) # # ## aov # test.n <- "aov" # fm1 <- aov(tlimth ~ sex + ethnicty + grade + disadvg, data = tli) # addWorksheet(wb = wb, sheetName = test.n) # writeData(wb = wb, sheet = test.n, x = fm1) # # ## lm # test.n <- "lm" # fm2 <- lm(tlimth ~ sex*ethnicty, data = tli) # addWorksheet(wb = wb, sheetName = test.n) # writeData(wb = wb, sheet = test.n, x = fm2) # # ## anova 1 # test.n <- "anova" # my.anova <- anova(fm2) # addWorksheet(wb = wb, sheetName = test.n) # writeData(wb = wb, sheet = test.n, x = my.anova) # # ## anova 2 # test.n <- "anova2" # fm2b <- lm(tlimth ~ ethnicty, data = tli) # my.anova2 <- anova(fm2b, fm2) # addWorksheet(wb = wb, sheetName = test.n) # writeData(wb = wb, sheet = test.n, x = my.anova2) # # ## glm # test.n <- "glm" # fm3 <- glm(disadvg ~ ethnicty*grade, data = tli, family = binomial()) # addWorksheet(wb = wb, sheetName = test.n) # writeData(wb = wb, sheet = test.n, x = fm3) # # ## prcomp # test.n <- "prcomp" # pr1 <- prcomp(USArrests) # addWorksheet(wb = wb, sheetName = test.n) # writeData(wb = wb, sheet = test.n, x = pr1) # # ## summary.prcomp # test.n <- "summary.prcomp" # addWorksheet(wb = wb, sheetName = test.n) # writeData(wb = wb, sheet = test.n, x = summary(pr1)) # # ## simple table # test.n <- "table" # data(airquality) # airquality$OzoneG80 <- factor(airquality$Ozone > 80, # levels = c(FALSE, TRUE), # labels = c("Oz <= 80", "Oz > 80")) # airquality$Month <- factor(airquality$Month, # levels = 5:9, # labels = month.abb[5:9]) # my.table <- with(airquality, table(OzoneG80,Month) ) # addWorksheet(wb = wb, sheetName = test.n) # writeData(wb = wb, sheet = test.n, x = my.table) # # ## survdiff 1 # library(survival) # test.n <- "survdiff1" # addWorksheet(wb = wb, sheetName = test.n) # x <- survdiff(Surv(futime, fustat) ~ rx, data = ovarian) # writeData(wb = wb, sheet = test.n, x = x) # # ## survdiff 2 # test.n <- "survdiff2" # addWorksheet(wb = wb, sheetName = test.n) # expect <- survexp(futime ~ ratetable(age=(accept.dt - birth.dt), # sex=1,year=accept.dt,race="white"), jasa, cohort=FALSE, # ratetable=survexp.usr) # x <- survdiff(Surv(jasa$futime, jasa$fustat) ~ offset(expect)) # writeData(wb = wb, sheet = test.n, x = x) # # ## coxph 1 # test.n <- "coxph1" # addWorksheet(wb = wb, sheetName = test.n) # bladder$rx <- factor(bladder$rx, labels = c("Pla","Thi")) # x <- coxph(Surv(stop,event) ~ rx, data = bladder) # writeData(wb = wb, sheet = test.n, x = x) # # ## coxph 2 # test.n <- "coxph2" # addWorksheet(wb = wb, sheetName = test.n) # x <- coxph(Surv(stop,event) ~ rx + cluster(id), data = bladder) # writeData(wb = wb, sheet = test.n, x = x) # # ## cox.zph # test.n <- "cox.zph" # addWorksheet(wb = wb, sheetName = test.n) # x <- cox.zph(coxph(Surv(futime, fustat) ~ age + ecog.ps, data=ovarian)) # writeData(wb = wb, sheet = test.n, x = x) # # ## summary.coxph 1 # test.n <- "summary.coxph1" # addWorksheet(wb = wb, sheetName = test.n) # x <- summary(coxph(Surv(stop,event) ~ rx, data = bladder)) # writeData(wb = wb, sheet = test.n, x = x) # # ## summary.coxph 2 # test.n <- "summary.coxph2" # addWorksheet(wb = wb, sheetName = test.n) # x <- summary(coxph(Surv(stop,event) ~ rx + cluster(id), data = bladder)) # writeData(wb = wb, sheet = test.n, x = x) # # ## view without saving # openXL(wb) # ## ----eval = FALSE, include = TRUE, tidy = TRUE, highlight= TRUE--------------- # require(ggplot2) # # wb <- createWorkbook() # # ## read historical prices from yahoo finance # ticker <- "CBA.AX" # csv.url <- paste0("https://query1.finance.yahoo.com/v7/finance/download/", # ticker, "?period1=1597597610&period2=1629133610&interval=1d&events=history&includeAdjustedClose= TRue") # prices <- read.csv(url(csv.url), as.is = TRUE) # prices$Date <- as.Date(prices$Date) # close <- prices$Close # prices$logReturns = c(0, log(close[2:length(close)]/close[1:(length(close)-1)])) # # ## Create plot of price series and add to worksheet # ggplot(data = prices, aes(as.Date(Date), as.numeric(Close))) + # geom_line(colour="royalblue2") + # labs(x = "Date", y = "Price", title = ticker) + # geom_area(fill = "royalblue1",alpha = 0.3) + # coord_cartesian(ylim=c(min(prices$Close)-1.5, max(prices$Close)+1.5)) # # ## Add worksheet and write plot to sheet # addWorksheet(wb, sheetName = "CBA") # insertPlot(wb, sheet = 1, xy = c("J", 3)) # # ## Histogram of log returns # ggplot(data = prices, aes(x = logReturns)) + geom_histogram(binwidth=0.0025) + # labs(title = "Histogram of log returns") # # ## currency # class(prices$Close) <- "currency" ## styles as currency in workbook # # ## write historical data and histogram of returns # writeDataTable(wb, sheet = "CBA", x = prices) # insertPlot(wb, sheet = 1, startRow=25, startCol = "J") # # ## Add conditional formatting to show where logReturn > 0.01 using default style # conditionalFormat(wb, sheet = 1, cols = seq_len((prices)), rows = 2:(nrow(prices)+1), # rule = "$H2 > 0.01") # # ## style log return col as a percentage # logRetStyle <- createStyle(numFmt = "percentage") # # addStyle(wb, 1, style = logRetStyle, rows = 2:(nrow(prices) + 1), # cols = "H", gridExpand = TRUE) # # setColWidths(wb, sheet=1, cols = c("A", "F", "G", "H"), widths = 15) # # ## save workbook to working directory # saveWorkbook(wb, "stockPrice.xlsx", overwrite = TRUE) # openXL("stockPrice.xlsx") ## ----eval = FALSE, include = TRUE--------------------------------------------- # require(openxlsx) # require(jpeg) # require(ggplot2) # # plotFn <- function(x, ...) { # colvec <- grey(x) # colmat <- array(match(colvec, unique(colvec)), dim = dim(x)[1:2]) # image(x = 0:(dim(colmat)[2]), y = 0:(dim(colmat)[1]), z = t(colmat[rev(seq_len(nrow(colmat))) , ]), # col = unique(colvec), xlab = "", ylab = "", axes = FALSE, asp = 1, # bty ="n", frame.plot=FALSE, ann=FALSE) # } # # ## Create workbook and add a worksheet, hide gridlines # wb <- createWorkbook("Einstein") # addWorksheet(wb, "Original Image", gridLines = FALSE) # # A <- readJPEG(file.path(path.package("openxlsx"), "einstein.jpg")) # height <- nrow(A) # width <- ncol(A) # # ## write "Original Image" to cell B2 # writeData(wb, 1, "Original Image", xy = c(2,2)) # # ## write Object size to cell B3 # writeData(wb, 1, sprintf("Image object size: %s bytes", # format(object.size(A+0)[[1]], big.mark=',')), # xy = c(2,3)) ## equivalent to startCol = 2, startRow = 3 # # ## Plot image # par(mar=rep(0, 4), xpd = NA) # plotFn(A) # # ## insert plot currently showing in plot window # insertPlot(wb, 1, width, height, units="px", startRow= 5, startCol = 2) # # ## SVD of covariance matrix # rMeans <- rowMeans(A) # rowMeans <- do.call("cbind", lapply(seq_len(ncol(A)), function(X) rMeans)) # A <- A - rowMeans # E <- svd(A %*% t(A) / (ncol(A) - 1)) # SVD on covariance matrix of A # pve <- data.frame("Eigenvalues" = E$d, # "PVE" = E$d/sum(E$d), # "Cumulative PVE" = cumsum(E$d/sum(E$d))) # # ## write eigenvalues to worksheet # addWorksheet(wb, "Principal Component Analysis") # hs <- createStyle(fontColour = "#ffffff", fgFill = "#4F80BD", # halign = "CENTER", textDecoration = "Bold", # border = "TopBottomLeftRight", borderColour = "#4F81BD") # # writeData(wb, 2, x="Proportions of variance explained by Eigenvector" ,startRow = 2) # mergeCells(wb, sheet=2, cols=1:4, rows=2) # # setColWidths(wb, 2, cols = 1:3, widths = c(14, 12, 15)) # writeData(wb, 2, x=pve, startRow = 3, startCol = 1, borders="rows", headerStyle=hs) # # ## Plots # pve <- cbind(pve, "Ind" = seq_len(nrow(pve))) # ggplot(data = pve[1:20,], aes(x = Ind, y = 100*PVE)) + # geom_bar(stat="identity", position = "dodge") + # xlab("Principal Component Index") + ylab("Proportion of Variance Explained") + # geom_line(size = 1, col = "blue") + geom_point(size = 3, col = "blue") # # ## Write plot to worksheet 2 # insertPlot(wb, 2, width = 5, height = 4, startCol = "E", startRow = 2) # # ## Plot of cumulative explained variance # ggplot(data = pve[1:50,], aes(x = Ind, y = 100*Cumulative.PVE)) + # geom_point(size=2.5) + geom_line(size=1) + xlab("Number of PCs") + # ylab("Cumulative Proportion of Variance Explained") # insertPlot(wb, 2, width = 5, height = 4, xy= c("M", 2)) # # # ## Reconstruct image using increasing number of PCs # nPCs <- c(5, 7, 12, 20, 50, 200) # startRow <- rep(c(2, 24), each = 3) # startCol <- rep(c("B", "H", "N"), 2) # # ## create a worksheet to save reconstructed images to # addWorksheet(wb, "Reconstructed Images", zoom = 90) # # for(i in seq_len(length(nPCs))) { # # V <- E$v[, 1:nPCs[i]] # imgHat <- t(V) %*% A ## project img data on to PCs # imgSize <- object.size(V) + object.size(imgHat) + object.size(rMeans) # # imgHat <- V %*% imgHat + rowMeans ## reconstruct from PCs and add back row means # imgHat <- round((imgHat - min(imgHat)) / (max(imgHat) - min(imgHat))*255) # scale # plotFn(imgHat/255) # # ## write strings to worksheet 3 # writeData(wb, "Reconstructed Images", # sprintf("Number of principal components used: %s", # nPCs[[i]]), startCol[i], startRow[i]) # # writeData(wb, "Reconstructed Images", # sprintf("Sum of component object sizes: %s bytes", # format(as.numeric(imgSize), big.mark=',')), startCol[i], startRow[i]+1) # # ## write reconstruced image # insertPlot(wb, "Reconstructed Images", width, height, units="px", # xy = c(startCol[i], startRow[i]+3)) # # } # # # hide grid lines # showGridLines(wb, sheet = 3, showGridLines = FALSE) # # ## Make text above images BOLD # boldStyle <- createStyle(textDecoration="BOLD") # # ## only want to apply style to specified cells (not all combinations of rows & cols) # addStyle(wb, "Reconstructed Images", style=boldStyle, # rows = c(startRow, startRow+1), cols = rep(startCol, 2), # gridExpand = FALSE) # # ## save workbook to working directory # saveWorkbook(wb, "Image dimensionality reduction.xlsx", overwrite = TRUE) # # # # # ## remove example files for cran test # if (identical(Sys.getenv("NOT_CRAN", unset = "true"), "false")) { # file_list<-list.files(pattern="\\.xlsx",recursive = TRUE) # file_list<-fl[!grepl("inst/extdata",file_list)&!grepl("man/",file_list)] # # if(length(file_list)>0) { # rm(file_list) # } # } ## ----cleanup, eval = FALSE, include = FALSE----------------------------------- # xlsx_files <- dir(pattern = "*.xlsx") # unlink(xlsx_files) openxlsx/inst/extdata/0000755000176200001440000000000014745234534014554 5ustar liggesusersopenxlsx/inst/extdata/stack_style_testing.R0000644000176200001440000001037314374150317020757 0ustar liggesusers# nolint start require('openxlsx') wb <- createWorkbook() addWorksheet(wb, "Sheet 1") writeData(wb, 1, head(iris)) ## What we expect # yellow fill and bold test rows 1:2 cols 1:5 addStyle(wb, sheet = 1, style = createStyle(fgFill = "yellow", textDecoration = "bold"), rows = 1:2, cols = 1:5, gridExpand = TRUE, stack = TRUE) # yellow fill and bold test rows 1:2 cols 1:5 # red fill for row 1 and italic addStyle(wb, sheet = 1, style = createStyle(fgFill = "red", textDecoration = "italic"), rows = 1, cols = 1:5, gridExpand = TRUE, stack = TRUE) # ## add a bluw line at row 5 addStyle(wb, sheet = 1, style = createStyle(fgFill = "blue"), rows = 5, cols = 1:5, gridExpand = TRUE, stack = TRUE) ## non-intersecting # ## Now borders and underlined around rows 1:3 for columns 1 and 5 addStyle(wb, sheet = 1, style = createStyle(border = "topbottomleftright", textDecoration = "underline"), rows = 2:3, cols = c(1, 5), gridExpand = TRUE, stack = TRUE) # # ## Now blue border only on top for rows 1:3, column 1 addStyle(wb, sheet = 1, style = createStyle(border = "top", borderColour = "blue"), rows = 1:3, cols = 1, gridExpand = TRUE, stack = TRUE) # # ## no stack! Wipe all formatting and put all black borders rows 1:4, col 3 # addStyle(wb, sheet = 1, style = createStyle(border = "topbottomleftright"), rows = 1:4, cols = c(3,3,3,3), stack = FALSE) # # ## cell 3,3 red bottom border # addStyle(wb, sheet = 1, style = createStyle(border = "bottom", borderColour = "red"), rows = 2:10, cols = 3, gridExpand = TRUE, stack = TRUE) openXL(wb) wb$addStyle ## Now not stacking addWorksheet(wb, "Sheet 2") writeData(wb, 2, matrix("abc", nrow = 4, ncol = 5)) addStyle(wb, 2, createStyle(halign = "center", border = "TopBottomLeftRight"), 1:5, 1:5, gridExpand = TRUE) addStyle(wb, 2, createStyle(textDecoration = "bold", fgFill = "salmon"), 2:4, 2:4,gridExpand = F, stack = TRUE) ## STACk == TRUE addWorksheet(wb, "Sheet 3") writeData(wb, 3, matrix("abc", nrow = 4, ncol = 5)) addStyle(wb, 3, createStyle(halign = "center", border = "TopBottomLeftRight"), 1:5, 1:5, gridExpand = TRUE) addStyle(wb, 3, createStyle(textDecoration = "bold", fgFill = "salmon"), 2:4, 2:4,gridExpand = F, stack = TRUE) openXL(wb) ## TEST NUMBER 2 - BUG REPORT #203 wb <- createWorkbook() addWorksheet(wb, "Sheet 1") writeData(wb, 1, head(iris)) ## Make a red block addStyle(wb, sheet = 1, style = createStyle(fgFill = "red", textDecoration = "italic"), rows = c(2, 3, 4), cols = 2:5, gridExpand = TRUE, stack = TRUE) ## Draw a yellow L around it addStyle(wb, sheet = 1, style = createStyle(fgFill = "yellow", textDecoration = "bold"), rows = c(1,2,3,4,5,5,5,5,5), cols = c(1,1,1,1,1,2,3,4,5), gridExpand = FALSE, stack = TRUE) # addStyle(wb, sheet = 1, style = createStyle(fgFill = "yellow", textDecoration = "bold"), rows = 5, cols = 1:5, gridExpand = TRUE, stack = TRUE) ## Now borders and underlined around rows 1:3 for columns 1 and 5 addStyle(wb, sheet = 1, style = createStyle(border = "topbottomleftright", textDecoration = "underline"), rows = 1:3, cols = c(1, 5), gridExpand = TRUE, stack = TRUE) ## Now blue border only on top for rows 1:3, column 1 addStyle(wb, sheet = 1, style = createStyle(border = "top", borderColour = "blue"), rows = 1:3, cols = 1, gridExpand = TRUE, stack = TRUE) ## no stack! Wipe all formatting and put all black borders rows 1:4, col 3 addStyle(wb, sheet = 1, style = createStyle(border = "topbottomleftright"), rows = 1:4, cols = c(3,3,3,3)) ## cell 3,3 red bottom border addStyle(wb, sheet = 1, style = createStyle(border = "bottom", borderColour = "red"), rows = 2:10, cols = 3, gridExpand = TRUE, stack = TRUE) ## Now not stacking addWorksheet(wb, "Sheet 2") writeData(wb, 2, matrix("abc", nrow = 4, ncol = 5)) addStyle(wb, 2, createStyle(halign = "center", border = "TopBottomLeftRight"), 1:5, 1:5, gridExpand = TRUE) addStyle(wb, 2, createStyle(textDecoration = "bold", fgFill = "salmon"), 2:4, 2:4,gridExpand = F, stack = TRUE) ## STACk == TRUE addWorksheet(wb, "Sheet 3") writeData(wb, 3, matrix("abc", nrow = 4, ncol = 5)) addStyle(wb, 3, createStyle(halign = "center", border = "TopBottomLeftRight"), 1:5, 1:5, gridExpand = TRUE) addStyle(wb, 3, createStyle(textDecoration = "bold", fgFill = "salmon"), 2:4, 2:4,gridExpand = F, stack = TRUE) openXL(wb) # nolint end openxlsx/inst/extdata/silent_worksheet_entries.xlsx0000644000176200001440000002316314745234534022623 0ustar liggesusersPK!¤Ïéq˜[Content_Types].xml ¢( Ä”ÏnÂ0 Æï“öU®Sà0M…ÛŽÒØd‰¡iÅÁÛÏ 4MQi—FmâïûÙ=oj“­! v¶dý¢Ç2°Ò)m%û˜½ä,Ã(¬ÆY(ÙG·7ÃÙÖfm±dUŒþ‘s”Ô çÁÒÎÜ…ZDz î…\ŠðA¯wÏ¥³lÌc£ÁFÃ'˜‹•‰Ùó†>ïHdÙdw°ñ*™ðÞh)"‘òµU¿\ò½CA‘é VÚãa0ÞêÐìüm°{£Ò­ ›Š_EM|cø— ËOç–Åi‘J7Ÿk ÊÉUM(Ð +€X›"­E-´=pŸðO‡‘§¥ß1H“_¾cðO‘îðô¼¾IæLâ·°ëߟDÏ9W"€z:´s€ŸÚg8¤0rRÑUí¸GÝSþÔ?Óà<Ò$ p9ÀaT4ѹ'!QÃqX´5ÝÑ‘¦ÐÕC3ç¨ožæêèÿÿPK!µU0#ôL _rels/.rels ¢( ¬’MOÃ0 †ïHü‡È÷ÕÝBKwAH»!T~€Iܵ£$Ý¿'TƒG½~üÊÛÝ<êÈ!öâ4¬‹;#¶w­†—úqu*&r–Fq¬áÄvÕõÕö™GJy(v½*«¸¨¡KÉß#FÓñD±Ï.W ¥†=™ZÆMYÞbø®ÕBSí­†°·7 ê“Ï›×–¦é ?ˆ9LìÒ™ÈsbgÙ®|Èl!õùUSh9i°bžr:"y_dlÀóD›¿ý|-NœÈR"4ø2ÏGÇ% õZ´4ñËyÄ7 ëÈðÉ‚‹¨ÞÿÿPK!o pvÚxl/workbook.xml¬U]o£8}_iÿâbóÔd´•ÚQ•fÛYi¤‘ ¦Xœ5¦IUÍßki;­²Û7ÇçÜ{lÎ?íšZ{¢¢c¼ëø éms^°öa®ÿ¹ÎŒ@×:IÚ‚Ô¼¥sý™vú§Åï¿o¹x¼çüQ€¶›ë•”›Ð4»¼¢ éÎø†¶°RrÑ Cñ`vAIÑU”ʦ6-„<³!¬ÕG„Pœ‚ÁË’å4áyßÐVŽ ‚ÖDý®b›nBkòSà"û‘óf÷¬fòyÕµ&/Z.È} ²wØÕv¾ü0‚Æšv‚¥£­– ÞñRž´9’>Ò‘‰ñ»ìŽsp’c úÄT ¬„÷AVÞË{Ãè—Ñ0XkðJÉû š{àfé‹ó’Õôv´®F6›Ï¤Q•ªu­&L &i1×}ò-}7!úMܳV­[3Ý\ì|-´‚–¤¯åŒ<ÁC ²l„T$#ª%-‘tÉ[ >ÜëúUÏ ØËŠƒÃµý»g‚ÂÁVhI’ûîšÈJëE=דðkÁ·mÍáP}}ãFrlýÿàG’+‘&¨™ŒÏ?*B"œ„ZC™'øœÔ9X_uæ £ñ\мìäâzpØA‘fŽRÛ5œ`fc[ÆÒI¬ÔõÓ$]UHõZÿËq08½oËŠ¹$„·ÔŠ–1éÀrƒvx¾%»A ùµ 'Ùáà2â\çB®]'ËÔÍ^É*ù實ÀþM‰ìáØª;ŒCÕfûÙÃd9Nìëùît†«DUfÿï ¼õ5=18»=1pùùj}ubìeºþv—]ÅItz|´ZE­Ó/ÓæO:\µƒMÍÉ&‹ÿÿPK!þiêW Ìxl/_rels/workbook.xml.rels ¢( ¼“OKÄ0Åï‚ß!Ìݦ­ºˆlºEØ«® ¤Ó¦l›”Ìø§ßÞP±ua©—âqÞ÷~<2ÛÝg׊w Ôx§ KRèŒ/W+x=<]Ý Ö®Ô­w¨`@‚]qy±}ÆVs|D¶éIDG ,s/%‹¦Ä÷èâ¦ò¡ÓÇPË^›£®Qæiº‘á·'žb_*ûòÄaècòßÞ¾ªƒÞ¼uèøL„äÈ…ÑP‡YÁ8~‹YAAžgÈ×døðáH‘gŽI"9nò%˜ìŸa›Ù¬ ctk¬nÜÜÌ$-5r»&Y°|á/€fy æfUÚxpÓ‡¥qþ‰—'7X|ÿÿPK!Ã8ÝW/xl/worksheets/sheet1.xmlœÒ_kÂ0ð÷Á¾CÈ{‰Õi±Œímìß{L¯6Ø$%‰Sûî»Væ¾È …&íýéíÞÔä|ÐÎæ”÷ú”€U®ÐvÓ·×ûdLIˆÒ²vrz€@og×WÓó›PD‚‚ 9­bl2Æ‚ªÀÈÐs X|S:odÄ¥_³ÐxEdj&úý3R[z2‰áÊR+X:µ5`ãñPˈõ‡J7áG3êÎH¿Ù6‰r¦Ab¥kJ‰QÙãÚ:/W5ö½ç©Tdïñx~Òtûg™ŒVÞWÆÊìXóyû6aR¤óþ/bxÊ<|èö)ñ¿’øðd‰_lðOltÂÚßå³­.rú¹\¤ãÉ"IoFZ,茠‰VéÝÛ(1¸M”Ô3&δjbIìü<й–&Ðf]æ™óË ¹RbX*ø¡ëùæÏ«Þ»[ŹS{dKrcó—ËåóóÐÌ)–Óí¤þ(l׃­~`j7jëÿ­>À³êµÂ‘…7 ˆÑä|ÝlµÛͽ…,8;tÂ;ͦßæðѰ.=Å‚'j_¬Åøch Ê&H­S²À3ˆâ^ª¸DC*S†×JqÂ% ûa@èÕýpûo,Ž.Ik^ÀDî i>HÎMU×{Z½äå7ß¼xþõ‹çÿyñÅ/žÿ Ñe¤2U–Ü!N–e¹þþÇÿýõwè¿ÿþÛ_þÉ—eü«þþÕ·ßý”zXj…)^þù«W_õò/øþ_:´÷ž–á‰NÈ%zÌcx@c ›?™Š›IL"L- n‡ê‘Š,àÉ3®Ol>e\Àû«g׳H¬uÌü0Š-à1ç¬Ï…Óõ\% OVÉÒ=¹X•q1¾pÍ=À‰åàÑ*…ôJ]*±hž2œ(¼$ QHÿÆÏ q<Ýg”Zv=¦3Á%_(ôE}L&™Ð©H…Ð!Á/kApµe›ã§¨Ï™ë©‡äÂF²ÀÌA~B˜eÆûx¥pìR9Á1+ü«ÈEòl-feÜH*ðô’0ŽFs"¥Kæ‘€ç-9ý!†Äætû1[Ç6R(zîÒy„9/#‡ü|á8ur¦ITÆ~*Ï!D1:åÊ?æö Ñ÷àœìu÷SJ,w¿><W¦Tˆþe%¾¼O¸½×l‰+ËôDleמ Îè诖VhÂð%ž‚ž|ê`Ðç©eó‚ôƒ²Ê!qÖlǪ¾Oˆ„2I×5»)òˆJ+dÏÈ’ïás¼¾–xÖ8‰±Ø§ù¼n…îTÀbtPxÄfçeà …òâÅi”Gt”‚{´Oëi„­½KßKw¼®…å¿7Yc°.ŸÝt]‚ ¹± $ö7¶Í3k‚"`&˜¢#WºËý…ˆÞWØÊ)·°má(Œ¬z'¦É늟,¿üyjŸVõ¸¿K½³/¯^«röá~…µÍ¯’SÛÉnâº-mnKïÿ¾´Ù·–o šÛ‚æ¶ q½‚}‚¦¨a ¼)Z=¦ñïíû,(cgjÍÈ‘4­ ¯5ó1 šž”iLnû€i—úy` ·ØÈ ÁÕo¨ŠÎ"œB(0]Ì¥ÌU/%J¹„¶‘6ýTrM·i>­âc>ÏÚ¦¿äg&”Xã~OÙ8´ªT†n¶òAÍoCݰ]šV놀–½ ‰Òd6‰šƒDk3øºsö~Xt,ÚZýÆU;¦j[¯À{7‚·õ®×¨gŒ #5ú\û)sõÆ»Ú9ïÕÓûŒÉÊ­Å]Ow4×½§Ÿ. µ7ð´EÂ8% +›„ñ•)ðdoÃyt–ûî?p7õu§p©EO›b³ ­ö‡ðµN"×rKÊ™‚%èÖx‹ÎC3œv½ôá2N!x¤~÷Âl ‡/3%²ÿ6©%R ±Œ2‹›¬“ù'¦ŠÄhÜõôóoÃ%&‰dä:°t©äB½à~iäÀë¶—ÉbAfªì÷Òˆ¶tv )>KÎ_øÛƒµ$_»Ï¢ù%š²•xŒ!Ä­@{wN%™«çÎö™¬ˆ¿k;Sžý­C®"c–F8ßRÊÙ<ƒ› eKÇÜmmPºËŸ ºkÂéRï°ï¼í¾~¯Ö–+öÇN±iZiEo›îlúávù«bµXe¹ûzÎíl’ªs›x÷½¿D­˜Ì¢¦ïæa´óQ›Ú{¬J»Osݶ›„Óo»õƒÜõ¨Õ;Ħ°4oÎËgÛ|ú ’ÇNW,;íf Ü™Ò2=Æ·S>_ç—Lf‰&ó¹.J³Tþ˜,_u½ÐU9æ‡Çy5À@›šVØVÐYíÙ‚z³ËE³»ÎÊØkõª-¼•سn…MkÑE[]mNÔu­nfÖËžÚ¤ac)¸Úµ"´É†Ò9;ÌÍr/ä™+•WÚp…V‚v½ßú^}6¿ÝU굺_i7zµJ¯Ñ¨£Fàûáç@OEqÐȾ|Ãi[çß?˜ño âÍ׫Ü|ãP5Þ7ß@áþo À‘@+õ°*ƒaЬÔÃa³ÒnÕz•A؆=Ø´›ãÞçº0à ?ŽÇ°Ò®î÷•^¿6¨4Û£~8Fõ¡à|û¹‚·ss[À¥áuïGÿÿPK!Oö(Ò©W xl/styles.xml¤UmkÛ0þ>ØúîÊvã, ¶KÓÔPèÊ ì«bˉ¨^Œ¤¤ÎÆþ{Ov^:¶Ñ~‰O§ÓsÏÝ#]Ò«V ´eÆr­2]„1UꊫU†¿?Á#먪¨ÐŠexÇ,¾Ê?J­Û ö¸fÌ!€P6Ãkçš!¶\3Ií…n˜‚ZI,ÍŠØÆ0ZYH ‡á˜HÊîf²üIÍó¦ J-êø’ îvF²œÝ­”6t)€jh‰ÚhlbÔšC’Îû&ä¥ÑV×îp‰®k^²·t§dJhyBä÷!E ã³Ú[óN¤1l˽|8Ok­œE¥Þ(bQ߂ٳÒ/ªð[ÞÙGå©ý‰¶T€'Â$OK-´A¤ƒÎuE%ë#®§-z Æè[SÉŮߋ½£“|,9àÄ“Ù,âB©Åž8ò4t̨ho?íà àºõ0]Ü?¢W†î¢8 ]Â<]jSÁõ>5åàÊSÁjD _­ý×é~—Ú9¸yZqºÒŠ _Jr4 œ’ ñèŸÀú »­‘ÚÈBº»*Ãð˜|&²7{¼~áñ‡h=ö‡aQ[Ÿãâ€öéczäEÏðƒ³®Ï-7\8®þ@0«öÔ‚Ð+àüûëšs̨XM7Â=73|²¿²Šod|ŒúÆ·Úu>Ù÷^©hìs°ÖÝ[¸^ðEÃ3üëvþeº¸-â`Î'Áè’%Á4™/‚dt3_,Ši‡7¿Sà3 Zy ¯kfL ³/v_âãÉ—áÁ¢§ßÝQ =ä>Çáu…AqFÁhL'Ád|™EÅ‹ñh~›É€{òÎY’(ê§Ž'ŸÌ—LpuÐê ÐÐ "Áò/Eƒäô¿ÿÿPK!$ì2FŸÂxl/sharedStrings.xmlDŽA Â0E÷‚w³·©]ˆH’.O ˆíØšIÍLEooDÄå{Ÿß´Ï8©f‰,l«R—ú@ƒ…Ëù´ÙƒbñÔû)Zx!CëÖ+Ã,ª´ÄF‘ù 5w#FÏUš‘ÊrK9z)˜ÍsFßóˆ(qÒM]ïtô@ui!±Ð€Z(Ü<þØΈ»-Îè|…ÿ ]>¸7ÿÿPK!Owú•©xl/calcChain.xml<ŽA 1ï‚swg׃ˆ$YPðú€M ™,™ ú{ãÅKCÑPÝz~ç¤^T%60 #(b_–ÈO÷Ûuw%ÍñâRa2ð!Ùn7Ú»ä/ÁEVÝÀb ´¶žÅÊN†²÷æQjv­c}¢¬•Ü"¨å„ûq<`î°Ú«jà<Šý¨ôK´ÿ#ö ÿÿPK!ŠPBkdocProps/core.xml ¢( Œ’]KÃ0…ïÿCÉ}›~Œ)¡í@exá`àDñ.$ï¶`óAíöïMÛ­nÎ /“sÞ'缤œíd}uB« eIŠ"PLs¡6zYÍã[9O§VP¡=84«¯¯JfÓ–V°^€‹I9ÂL…¶Þ‚±c[Ô%Á¡‚¸ÖVRŽvƒ et8OÓ)–à)§žâ›‘ˆHÎF¤ù´Mà C”w8K2üãõ`¥ûs WNœRø½ qOÙœ âèÞ91Û¶MÚ¢ògømñôÜW…êvÅÕ%g„Y ^ÛzI•vÑ£h¨®Ä'J·Å†:¿ _ àwûßæKC ÷E<ð(D#C‘£òZÜ?¬æ¨ÎÓ|gYœOWYNò‚7ïÝûgó]ÔáBRüŸ89'u‰/¾Gý ÿÿPK!ŒXŒ&docProps/app.xml ¢( œ’MkÜ0†ï…þ£{VÞm e‘¦%‡–.x“œy¼‘%£™˜ÝþúŽmâxÛC¡·ùxyõhfÔÍ©õY ] …X¯r‘A°±ráXˆ‡Ã·«/"C2¡2>(ÄPÜèÔ>Å9ÀŒ-¢!ê¶R¢m 5¸âvàNSkˆÓt”±®…»h_[$7y~-áD*¨®ºÙPLŽÛžþ×´ŠvàÃÇùc`­n»Î;kˆ©8›"Æš²¯' ^ÉeS1] ö59:ë\ÉeªJk<ìØXׯ#(ù^P÷`†¡íK¨UOÛ,Å”¡ûÅcÛˆìÙ 8…èMr&c ²)cß!%ýÓ 6„J²`*ŽáR»ŒÝg½\ ƒ „—ˆGðg½7‰þE<2L¼NÙ¬—p3fÙL KèqüüîbÛ™pæÆ}wáºC¼3o3¾,ª²1 *^˼ƒ¹ îy¼É&»Æ„#Toš¿ÃEô¤½èìÙÝãå͹–Þ3+´ŠY8 ˜*×…Pû˜}{H3æYäªàR+ˆÙ,»Y½[ž´9dZå”IeÈÙ:œìïxk:Ä[mÄ‹VÈå.7Zʘ¡9^«Qù¿"»vP<³½óü$T¡O1£]ÞÜOîú$ ¬hÓÑlÜûnAì+ŒÙ,œGÌCžÝ·ƒŠÙ$ g¥0]‡Â©“g z­E ùo:r;ëOO¹º—aK•λ‚*; …ž…™$Æf!(`îŠÈ!ö0ÔnNó†ò}TD!l9(?é‚ Ö„v¿.çjo@"'’à [X8ãG‹î¼*Ijºÿ¥&)2~œ”˜w4"f?ÞO£i2›FƒhŽa¸ >ŒÆ“AºMS\²IæéO’•C]Ð/éè[4ôÜC¹»ÐjÏÄÖáöœƒ\;f>%wÿŽ ß cõ PKÒ§u|ýuPK¬óP xl/styles.xmlíX]OÛ0}߯°ü>’”P`JƒS§½Lh iÚƒIœÄ‘íBïßuœ¦ …MêV¤>Ù÷äžããk[µ›\¬GT¦ä GG!FTf*g²œáÛÅüãFÆ™®$á†|‘~HŒm8½©(µ¤™áÊÚúS˜¬¢‚˜#US _ ¥±ê20µ¦$7Ž$x0 Ãi “8MäRÌ…5(SKiÁF!ß|ËœÆy¹+•ƒ•¯TRM8Ò$èÒ¤Pr£c¤‰yF„ƒHèÒ%ÔÇ—šy…‚ÆNUD˜§µƒx©ý¡·+ã¼/Ó{ Mjb-Õrêú‹¦†ZKX|/Óæý%»Ô¤‰&'BÛÀ¸÷Jç°Ù† í!”3R*Iøm=Ãá†âú¢žäLN š••k­ª'b­ÐYsÜÐ^¹ïÀðåüÆíÜ»b3ûDWÅöN“mÂyïº^© H]óf®œˆÕKÚŸÛ”tÉY)}‘x­•¥™m^ § Y'¢Jiö ÒnËn£»sjYæ ?_Œ,]Ùʯžž4©öEd2o†o¦ÒL>,ÔœõŸ¡Luoq•=Ð|m²b9P™ÁªxQ©pS§h×:u>_j+µÞïÇÌä`æ 3;Ÿ­ƒ™ƒ™ƒ™ƒ™ƒ™]ÌÄÇûôKG{å&Þ+7“}rsþŸÍÃ뻿ÌîñÑ®×øU±í|èç­¿ƒ;}Еrð@êË:ʧæ w¯p>¨Üý’qˤ‚m•‚¬ó£“áøMúþêIÓiú*i©5•YÓsNGœøOœÑXg#Þék¼kª3Xƒžr>¢ø§ï¦˜lþ0IPKò–²ËuPK¬óPxl/worksheets/sheet1.xml½VQs›8~¿_Áðpo5˜ØNšÃtRû|íLZgêô:Ó7£‰8IØM~}W` ™\nîÅF»«Ýo¿}Šßý(™w©¨àK: }x*2ÊKÿëýæÍ•ï)MxF˜à°ôAùï’ß⓪Ð&àjéZW×A ÒJ¢&¢Žž\È’h\ÊC * $³›JDa¸JB¹ï2\Ë×äyNSX‹´.k—D#á«‚VÊOb[áNz9eä'‘!ìœ0è«Èv ¿VÖ¯ïÅZwÄA³9‰3Š +ž„|éßL¯×3aþ¦pR½gOâ´Aœ5#ªMgIšÝRhÕ²nŒ_Äi%Ød‰ï;¾ƒAÒCo!×]JMö;`jÈúû¶µfXd÷Xîëd“šiË ÙÚˆxésC+Ô¢2%VÀ˜iÓ÷Rûó/f¾÷$D¹K C’¦aØ[¶Û‡VCç-yµ¥¥ñšwe/ă1™¼¡’íÂÐ[ó^5(| õÍû·ýµÛê©ì@Ð×ÍË$î?·£ÙØ7GÝ0,|£™.×t²ç³ÅÕå¼ã §ò çèŽ&øÞ?á4ZKÿpDßÂÆcä¯6¬`l-˜@#©Êþz©”`“4­•eƒÌ¨ YüÙ²¶fI~,ýÿ)·ÿJ?š²]š(œÌ†¡ÿ¶ä¬)yñLIätÙ¡¸f-k¢IKqò¤Íâ ;^ºZgÊ \ô 3°õGíaצœy™•ÀÍæd8&a À&âý8búkÄzuöÕ5½Ð\´˜Lÿ¥97„×÷p] zG̽#æÏ÷vñêÁ¹6^1·é ½]Œp-žÇ5ûqÍF¸.œ#®œ#Þz zN%)×ÛÊÊ›W ` .Ÿæp—¡E®û°…¤O‚kÂV¨™ {Ç ¿¦éØ8¥üDäbaf%(œ\ÚãR:öÚ%žÜöâáó^hä·[VáΡ¹º·:=®+” äŽ>êINN¥ÒFX>×åÜ1bµ»=Ë›ewxûžI»•¶v&Nü¾¾Å^qÖ’b«öº°ô+!µ$EgÏHúpóoÕÝuÀË$éIoŠ´¥¹w(£žmµ‚ÍÝôuEñ2´lŸ-©¨¨™ÞÔpáØÚX޼Œæ9N„k›ÿ ©5o³ìÏãù0Ib‘eîB‘üNÊê•ý½‰ƒ³Ý„¸ìMˆAíÙÇ;×8ã —Ý]/ù PK; Ó¢¾/ PK¬óPxl/_rels/workbook.xml.rels­‘MkÃ0 †ïýF÷ÅIcŒ8½ŒA¯ýøÆQâÐÄ6’Öµÿ~.[ eìГÐ×ó¾Hõê4êˆÄC ª¢…ÁÅv½ýîíáVÍ¢Þàh%°«¼Ø€I/Z³ó8Y.bÂ;]¤ÉJN©×ɺƒíQ/ËòIÓœÍS­[´n+P»sÂÿ°c× _£{Ÿ0È Ír‘3ÑRbà+/2ômùå=å?"Ø#ʯƒŸR6w Õ_fïz o Û­P~ìü$óò·™E­¯ÞÝ|PKOðùzÒ%PK¬óPxl/sharedStrings.xml’1nÃ0 E÷žBàÞÈm¢de4d*–cQ®(íí£dh·B#ÉÇÿ–¯ßa&ö‘zxÙ5 l<]z8žž?@p64˜9öðƒ ý¤˜³(¯Ä=Œ9/{)ÙŽ ïâ‚T..¦`rÓEò’Ð <"æ0Ëצy—ÁxaãJ¹h‹u%ÿµâñw¡{­’=/ÆwIaL‚Æq»¾uJf­äûh«ÛÎUηu‰äÚnªsw­›‚­bÃ@¶Î­£Væ‘õœ, Ð7PK÷j÷äÒ?PK¬óPdocProps/core.xmlR]OÂ0}÷W,}ߺl¶‘¨áI ßjwÕ­kÚÂàßÛml òàÛ=÷œžûÕxv( oÚˆJ&ˆ!ò@ò*2OÐz5÷§È3–ÉŒ•„Á YzsEy¥áEW ´`h™ e)ìQÁUiOꃃ°®ë µR×?Áo‹çe;ª/d³*(OP®YÈá $Ò¶^ífmTÙ0zcôö5þ PK6”TßézPK¬óP[Content_Types].xml½T;OÃ0Þû+"¯(vË€JÚÇ•(32ñ%1²ÝÒþ{Î)TU )ˆˆÉ²ï¾—Ov6Û¨&YƒóÒèœLè˜$  #¤®rò´¸K/Él:Ê[ >Á^ísR‡`¯óE Š{j,h¬”Æ)pë*fy±ä°óñø‚FÐ! ‘ƒL³(ùª Éíwº'Éõ®/Jå„[ÛÈ‚,³Xe8﮵8r—~8£ˆl{|-­?û^ÁêêH@ª˜,žw#^-tCÚbðº̹ ÷\a{ŽI8O—Ò¦aoÆ-_ŒYÒþkïP3e) ¦X)„Popák€ Ú®Tq©Oèû°mÀ­Þ’þ y ð¬]&›ØóŸð±÷áþiô¾æÄcpø¾ŸÀ!wŸÄϱ¿7ñ™;¢S‹Dà‚ìý^©ÿœâ[ ¾j2Ö~”ÓwPKöå6YWPK¬óPfª‚·à; _rels/.relsPK¬óPÒ§u|ýuxl/workbook.xmlPK¬óPò–²Ëu Sxl/styles.xmlPK¬óP; Ó¢¾/ xl/worksheets/sheet1.xmlPK¬óPOðùzÒ% xl/_rels/workbook.xml.relsPK¬óP÷j÷äÒ?9 xl/sharedStrings.xmlPK¬óPæ§ê§eÛM docProps/core.xmlPK¬óP6”Tßézñ docProps/app.xmlPK¬óPöå6YW[Content_Types].xmlPK ?²openxlsx/inst/extdata/build_font_size_lookup.R0000644000176200001440000000314614374150317021445 0ustar liggesusers# nolint start options("scipen" = 10000) ## loop through all fonts fontDir <- "C:\\Users\\Alex\\Desktop\\font_workbooks" files <- list.files(fontDir, patter = "\\.xlsx$", full.names = TRUE) files <- files[!grepl("-bold.xlsx", files)] files2 <- list.files(fontDir, patter = "\\.xlsx$", full.names = FALSE) files2 <- files2[!grepl("-bold.xlsx", files2)] font <- tolower(gsub(" ", ".", gsub("\\.xlsx", "", files2))) strs <- "openxlsxFontSizeLookupTable <- \ndata.frame(" allWidths <- rep(8.43, 29) names(allWidths) <- 1:29 for(i in seq_along(files)){ f <- font[[i]] widths <- round(as.numeric(read.xlsx(files[[i]])[2,]), 6) strs <- c(strs, sprintf('"%s"= c(%s),\n', f, paste(widths, collapse = ", "))) } strs[length(strs)] <- gsub(",\n", ")", strs[length(strs)]) ## bold ones ## loop through all fonts fontDir <- "C:\\Users\\Alex\\Desktop\\font_workbooks" files <- list.files(fontDir, patter = "\\.xlsx$", full.names = TRUE) files <- files[grepl("-bold.xlsx", files)] files2 <- list.files(fontDir, patter = "\\.xlsx$", full.names = FALSE) files2 <- files2[grepl("-bold.xlsx", files2)] font <- tolower(gsub(" ", ".", gsub("\\-bold.xlsx", "", files2))) strsBold <- "openxlsxFontSizeLookupTableBold <- \ndata.frame(" allWidths <- rep(8.43, 29) names(allWidths) <- 1:29 for(i in seq_along(files)){ f <- font[[i]] widths <- round(as.numeric(read.xlsx(files[[i]])[2,]), 6) strsBold <- c(strsBold, sprintf('"%s"= c(%s),\n', f, paste(widths, collapse = ", "))) } strsBold[length(strsBold)] <- gsub(",\n", ")", strsBold[length(strsBold)]) allStrs <- c(strs, "\n\n\n", strsBold) cat(allStrs) # nolint end openxlsx/inst/extdata/nested_grouped_rowscols.xlsx0000644000176200001440000003320114656134061022430 0ustar liggesusersPK!HABÊq°[Content_Types].xml ¢( Ì•ËnÂ0E÷•ú‘·Ub UEË©ôÜxB,Ûò ߉y¨ªR©lb%ž¹÷däÜô‡‹Z'sð¨¬ÉY7ë°La¥2“œ}Œ_Ò{–`F m äl ȆƒË‹þxéê6˜³*÷À9Ô3ëÀÐNi}-Ýú w¢˜Š ð^§sÇ k˜†Fƒ úOPŠ™Éó‚¯HzìÐä¿ÙâÍãÿfð ÿÿPK!µU0#ôL _rels/.rels ¢( ¬’MOÃ0 †ïHü‡È÷ÕÝBKwAH»!T~€Iܵ£$Ý¿'TƒG½~üÊÛÝ<êÈ!öâ4¬‹;#¶w­†—úqu*&r–Fq¬áÄvÕõÕö™GJy(v½*«¸¨¡KÉß#FÓñD±Ï.W ¥†=™ZÆMYÞbø®ÕBSí­†°·7 ê“Ï›×–¦é ?ˆ9LìÒ™ÈsbgÙ®|Èl!õùUSh9i°bžr:"y_dlÀóD›¿ý|-NœÈR"4ø2ÏGÇ% õZ´4ñËyÄ7 ëÈðÉ‚‹¨ÞÿÿPK!a ¾Ž Vxl/workbook.xml¤UmkÛ0þ>Øúîú%޳˜:£Ë l£t] #P[‰EeÉ“ä$¥ô¿ïäÄn^ ëZ“È–¥{ôÜÝsçóÏ›‚£UšI‘`ÿÌÈŠTfL,üëzâ|ÂH"2Â¥  ~ |üp¾–ê~.å=¡œSÆ®«ÓœDŸÉ’ XYHUSµtu©(ÉtN©)¸x^ä„ ¼EˆÕk0äbÁR:’iUPa¶ Šrb€¾ÎY©´"} \AÔ}U:©,J€˜3ÎÌC ŠQ‘ÆÓ¥ŠÌ9¸½ñ»h£àÁß÷`š“`é䨂¥Jj¹0gínIŸøï{®ï„`sƒ×!…®¢+fsزRÑYE-Vô æ{ïFóAZµVbÞѺ-·ÎŒÓ›­t)ˤ°™âq¢Í8c†f îÁT®éÁ U•_*Æa5èôƒ>v­œ/Êè‚TÜ\ƒx¨Œ(ê]»„qÁ U‚:”€w~½Ws5ö0— ptEÿTLQ(,Ðø #Ic2×—Ää¨R<Á¿ãÙÕ¬®3®73&´™ÑɈ!³=m’ÓBøu’Ôºì‚Ï[^ÛçcÿžŠ^…ày:úYøIVÈ|¶+Ù)Ýï܉TÅþÝãhÜéN&ÞvƒÐ £‹Èé{~Ç{“ÞÅ0 {=ÿ œQQœJR™|—n àÐ ôxé;Ù4+¾W,{¦ñèí.ÇÞ†fíÉ:lÛ £ký, ;E›[&2¹N°ãàÔÃát]/Þ²Ìä ¬¾Â–í»¯”-s`ìG¡}iÈüʶ¬w=˜.˜‚HÙ¾;0"©a+zMæb ¬ >`?Ú²ŸÀåØá€½»G¿n·àF}G¢.ÍŠ’Sd47´T²*¡ßC£·ê a¤b{¨šf¾ È æ9Ë2*^²÷¬ƒcëJ‹Ùã…Ž€º¤Y‹Ý»¥ÐÝéƒÙí™AÄZæá?ÌlnÏëìÖuî6¡K O¡-Ø› $ :‹‚êQn¤lìÔ'¹Í'qðÿÿPK!=X€zîxl/_rels/workbook.xml.rels ¢( ¼”Ýj„0…ï }É}º?-eãÞ”ÂÞ¶Û:YM$3ýñí;­–ôF¼ L†œóå ÉáøÕµÑxlœU"-\ÙØZ‰·óó݃ˆ´-uë,(1Šc~{sxVBÓô±ŠE% Qÿ(%:±ëÁr§r¾ÓÄ¥¯e¯‹‹®AfI²—þ¯†ÈgšÑ©TŸJö?=;ÿ¯íªª)àÉïXºb!Ñhå+y¾²°ö5³í˜‰…¼³YæÓù š@~·Q¹³ ÁÜ/š -vŠd¬CöÙÊYd!˜te˜4³_†ø)Á4—±”ãdØ­È.Ève˜íŒœýRù7ÿÿPK!’—Q·xl/worksheets/sheet1.xmlœ“ÛŽ›0†ï+õïƒlv»(dÕvµíJ«ªêñÚ1C°b{mrhÕwï˜l«ÜD‹ÀÀ þæûgz·1:Yó mÅò4c X‰µ²‹Šýüñ0zÇ„­…F Û‚gw³·o¦ktKß„„ÖW¬ ¡+9÷²#|ŠXÊ4èŒôêÜwD=L2šYvÍP–í¥»„M£$Ü£ì Ø°ƒ8Ð"~ߪÎïiF^‚3Â-ûn$Ñt„˜+­Âv€²ÄÈòqaщ¹¦¾7ù•ÉÆÑYÐ5Þ—âg•Œ’=6!%2ßi>oÿ–ßr!¤óþ/ÂäWÜÁJÅ <¢Š×IÊ'Vq„_ »>Àâr¹²WuÅþfÏLjîy²ã°Ïýc³i­h‡cW‰ƒ¦bïóòCÁøl:øç—‚µ?yN|‹ëONÕOÊ™‘l\C#zbð#j¤Õ¥ ŒO$£ þþ šïRhøMªÉþ}=G\ÆñË,ågUcuÉ\x ¿UÚˆ8T> æéä&çÅäü†ëÏ m )EzC ìƒ&ñO°MYŠ¿Œnˆ Ž+ëí=xI¿ L‡u¡ÖhEhLŒŠ¿29Xl¨QêèYÚ‰ Ùû€f¯ùe¡87¶<ÿÿÿÿÿ²)ÎHM-qI,I´³)Ê/W(²U2TR(.HÌ+²¬€ìüÒ’œÌ¼TŸÔ²Ô°d…¡Ib²UJ¥Kjqrj^‰­’ž‘’M2H¯#PP¤È/³3´´Ñ/³³ÑOb Ùp ŒÈ±@h­ÿÿÿÿ”ŽßJÃP Æ_å ¯dm§Ò Û‚(Ãǰ¾À™ÍÚàzrHS{zÛã¿ ë…¹H _¾/¿ÌÛŸ¬Ôä:³ÇæÏÒEz½<©¡º™Ò”}É,¾™§?5X¶¬Êí9¥A[¡L|Ú1ë”ÙÈ[¢öÞxëQJ:bK0,„N­»<‹Š%Ów¸"ét3ØÖ}»“0Íp~äá~ÿà)‡«8óŽ¢ôz²¾}’®R‘qU=ôâ¶þö>tx¡;³ÆƒyæÖºËR­«¬TädÆ]ýºÇ ¯Ìÿ•HŠ&86!î›+ú‹XÞºQ‹ÿÿPK!j༇xl/worksheets/sheet2.xmlœ”ÛŽÚ0†ï+õ"ß“3»VvÛ•PUõxmœ ±°ãÔ6§V}÷Ž“Â²â­”ƒ3“ùæŸÉ8“‡ƒÞ´áªÉIä‡Äƒ†©’7ëœ|ÿö4ÏXÚ”T¨rrC¦ïßMöJoL `=$4&'µµm†Õ ©ñU z*¥%µø¨×i5в ’"ˆÃð.”7¤'dú†ª*Î`¡ØVBc{ˆA-ê75o͉&Ù-8IõfÛ˜’-"V\p{ì Ä“,{^7JÓ•ÀºQJ™wÐxÄx&§4ý*“äL+£*ë#9è5_—?ÆegÒuý7a¢4аãî¾ â·IІgVüKÞ»;Ã\»t¶åeNþÉ|>?> ŠÅ¬¤i ÆI˜f³Y8*ŠqÏGÉtRrü®*OC•“Y” ¦“n~~pØ›‹µgjµÿ y¹ä à0â—PÑ­°ÎX(¡°»h´ª]Be "'Èó˜s=£® þ­”üʨ€Onjñ(Ä7é+¥6.§{3Dq07sÅÛzàcŠDó«ÓëÖ¨68˽\Ÿ¤?u»ã³öVÔªüÉK[»´gùÆÈÞ‡IÏÎ/jÿøº¶û÷èP[+°KØ@/Ú_Û×Ùº±ÍÊã Ã}„Eù±“‹í@mxõ$wÿÜô€ÍÁ.ôÒPYÍËz'Û«äIõëT.º'ö,lMÇÂûVtQ¦´5€ýí‚NÉ?ÿÿÿÿ²)ÎHM-qI,I´³)Ê/W(²U2TR(.HÌ+²¬€ìŒÌ””Ô<°p~iINf^ªOjYjX ÂÐ$1Ù*¥Ò%µ895¯ÄVÉ@ÏHÉÎ&dŒ#P/P¤È/³32°Ñ/³³ÑOb 5p»Œ(´Kn’1ªIÉù99‰Å©)¸Ý Ô«ð=ÿÿÿÿ”ŽßJÃP Æ_å ¯dm§Ò Û‚(Ãǰ¾À™ÍÚàzrHS{zÛã¿ ë…¹H _¾/¿ÌÛŸ¬Ôä:³ÇæÏÒEz½<©¡º™Ò”}É,¾™§?5X¶¬Êí9¥A[¡L|Ú1ë”ÙÈ[¢öÞxëQJ:bK0,„N­»<‹Š%Ów¸"ét3ØÖ}»“0Íp~äá~ÿà)‡«8óŽ¢ôz²¾}’®R‘qU=ôâ¶þö>tx¡;³ÆƒyæÖºËR­«¬TädÆ]ýºÇ ¯Ìÿ•HŠ&86!î›+ú‹XÞºQ‹ÿÿPK!¥Öa#/ xl/worksheets/sheet3.xmlœ”YÚ0Çß+õ;D~9¸#`µhWZUU·Ç³q&ÄÂŽSÛ\[õ»wœKË>Еr8öÌoþ3gt·—ÂÛ‚6\•cµBâAÉTÆËÕ˜|ûºðÄ3––ª„19€!w“÷ïF;¥×¦°J3&…µU† ©i© J\É•–Ôâ§^¦Ò@³ÚIŠ Ã^ )/ICHô- •çœÁL±„Ò6 ‚ZÔo ^™M²[p’êõ¦ò™’"–\p{¨¡Ä“,yX•JÓ¥À¼÷Q‡2o¯ñŠñnŸÂÔóW‘$gZ•Û’ƒFóuúÃ`Pv&]ç&ê¶Ümà *~›¤¨{fÅ/°öa½3Ì•K'žÉ¯^Úž¦i4õçÓ´íwâþÔÜOc?ÌÓ¸?[t£~ï7™Œ2Ž;ì²ò4äcr%CLFuÿ|ç°3cÏj÷Aóì‘—€Íˆmléò 0 5"^9ÝëŒR%V˜= AŒù>+%ŸðÉ5­@¯M\£/•Z»Î2Dm¦;m”Y¾…šÏ# c~ÖrÝÅgµ—ã“òE}8>koI  ¨<³… {V{1µºý°ÅÝóâµû|UXt‰[}\P+°°«uÞ—sˆ«çê®M²Ã Ãc„Iµb'ËÚðéIî~x 苃U8J»PÁ6Æ*yÒüwpçÛðRçHB¯.%þëÙ?zâèè‰Õ)x–A#ðT ,|¿–‚V¦i·wu5þÿÿÿÿ¬SÝ ‚0}Ùd.Jæ ±®z‰1?P)ά޾//6] ¶s¾¿1] …g}{óúŒÄÓPwiL¼ö:4µ‚ ŒÐLà=…LËGZ‚2²ÝP™|qHÆç‘Ó€ù#g¾Ä…ÚÆ€®0È‘l Âeýp…~d£ÄÆ`Êî4)]vÖd‡d[>›Þä^8à{h¸[ »9ïì·FæøÖF¹u8;`²l–¸fU]– ¦úm¢|3/û¿)\%Ù6è4”Ÿç£ðíyÿÿÿÿ”ŽßJÃP Æ_å ¯dm§Ò Û‚(Ãǰ¾À™ÍÚàzrHS{zÛã¿ ë…¹H _¾/¿ÌÛŸ¬Ôä:³ÇæÏÒEz½<©¡º™Ò”}É,¾™§?5X¶¬Êí9¥A[¡L|Ú1ë”ÙÈ[¢öÞxëQJ:bK0,„N­»<‹Š%Ów¸"ét3ØÖ}»“0Íp~äá~ÿà)‡«8óŽ¢ôz²¾}’®R‘qU=ôâ¶þö>tx¡;³ÆƒyæÖºËR­«¬TädÆ]ýºÇ ¯Ìÿ•HŠ&86!î›+ú‹XÞºQ‹ÿÿPK!rOë; xl/worksheets/sheet4.xmlœS]o›0}Ÿ´ÿ€ü äkE!ÕÔ*[¥jš¶n{vÌ%X±1³MHVí¿ïš$”*{ˆŠÀ6×¾çžc/n÷J;0Vè*#q‘*®sQm2òãi5ú@ëX•3©+ÈÈ,¹]¾·hµÙÚÀˆPÙŒ”ÎÕ)¥–— ˜ u ÎÚ(æð×l¨­ °¼KR’&Q4£Š‰ŠRs †. Áá^óFAåŽ $sÈß–¢¶g4ůSÌl›zĵªb-¤p‡”Ч›J¶–¨{Oöß¿ñ¹L¿¨¤7ÚêÂ…ˆLœ/åßÐÊxt©ÿ*˜xB ì„?À¨äm”âi•¼€ß6ëÁüv™´yFž£Ó3Â>öM4Šbß ž¿d¹Èž°W(2ò1NWsB—‹Î??´v0l©ÛOFä¢4#Ú8‡‚5Òùà–wƒÜF‚úþh­¾s&á‹7©DûG¸Ä{­õÖ—ð+#äbA÷ v;¸‰ËŸ’^Žß=?Fr´g7Ÿ™®ºËðÕkfIý¹+}Ùží ‡Óy4Ž“i?ùM·ŸAlJ‡)I8Ç Ý8‰‚agQÖëÂu±Î¥i~¸ËñÚ ¨0ñtq;¶þú£ëÙ¾ëÛµ‹a1¿æ˜Ìĺ]&ô2ycVgµ¯)z~C¤É ûë8ÐNÄ?ÿÿÿÿ¤“] Â0„¯RrÛôW%-h£O^¢Ô€Bi¥©Uoï*’d-Bß’|Ù0³;ú¤Ô «¡*Dßݼ>gœyúRµVë”yÝuhέ:¨Q5oxçqU¯©t­Ú!gÁ"d…¨_µ(† û±„?¯?lë2ŽYé²3é²³Ë2Ã|°bü„S~NúnüDÄËbâÇe ñã²åwÍÑÍPl4¯ˆf—q2 A2!‰ ju<':PldsÚki³¤ÝFÐÆéN°îÉDÀ]+óGä²ÿßÛÃ]ûƒo¿çÿÿÿÿ”ŽÝJÃ@F_e™ ¯¤I«’“€(â"ÆÝi2Øì,“ÑBŸÞtý«`.œ‹]˜ïÌ)#¶t‹Úr܆ÖVA>+–Åéê`–à”Ûn*3‰ÌgùÙ¢øž±ò$fÒÿ•t„žtâÒZĦ¬.÷¾ Ùkt#iÃ;ª`N”)K¨ Šš"¸nÜïd 6W‘+8Éspo¤ÆÏ›û¡tn×¥x“ë#ìãùezá‘{Üm݃ôŽÃàQ=¤x¾HßE™ý´÷ Oæ@ ±‘Kû„ûòÊ~kf[Ñ—¡#²úÿÿPK!ÜúÛsxl/worksheets/sheet5.xmlœ“ÛŽÚ0†ï+õ"ß“J¬P¶+­ªªÇkã ÄÂŽSÛœ¶ê»wl–,+zVJbglóÿöxrw"Ø6\5S’„1  aªâÍzJ~|¿ï} ±´©¨P LÉ ¹›½7Ù+½15€ И)©­mó(2¬IM¨Zhpd¥´¤õ:2­ZùERDi#IyCN„\ßÂP«gP*¶•ÐØDƒ õ›š·æL“윤z³m{LÉK.¸=z( $ËÖÒt)Ð÷!É( Ÿßþ9_e’œieÔʆHŽNš¯í£qDYGºö&É" ;îð•¾MR2èXé ¬ÿFذƒ¹íÒù–WSòg4Ùb^öúišö²Q1êû‹a¯,Ól”-’a<.þ’Ù¤âxÂÎU a5%ó$/3Í&¾~~rØ›‹~`jµÿ¨yõÈÀbÄ2®`E·Âº`¡„ÂÝÅ s½”‘¢¿'¥ä7F|vE*°ücœâ {©ÔÆ¥p3cÔb@s%PlvP€Àé2Ìo¯®HrüCuQ'ï²–zïoÃ,©Tõ‹W¶vy;¹Á$Œâ~’ºÁ¯jÿ øº¶¸$ G8 ¶V ãGØÀQôõ:†8óešWÇ Ã{ƒ®B/÷µá7ÜÝ,{zðíþYÚ…ŠËdnÚíVb^¿Oú?+k^Upâ³­±Jž¿Vë¤^B³g(¶7Èq‡+hkÍ‹‹¼»ÿÿÿÿ¤‘M F¯Òp)-«†’hºô&iMAª·wl ¢ñgáx ß›A„ **)¿VKO©Â¬\ÀU×ÊŸ¢!Ýà™q¥;s hp±'õ®!Rè[í‹ñ$à>ÉZÐ$Õwv(ËŒblÎÆ¼2{œŒ·¥>k཯ȳFû¢Q2þ^£ýSƒæ†øajo­š˜Ï£ÅÇèã—®ÿÿÿÿ”ŽßJÃP Æ_å ¯dm§Ò Û‚(Ãǰ¾À™ÍÚàzrHS{zÛã¿ ë…¹H _¾/¿ÌÛŸ¬Ôä:³ÇæÏÒEz½<©¡º™Ò”}É,¾™§?5X¶¬Êí9¥A[¡L|Ú1ë”ÙÈ[¢öÞxëQJ:bK0,„N­»<‹Š%Ów¸"ét3ØÖ}»“0Íp~äá~ÿà)‡«8óŽ¢ôz²¾}’®R‘qU=ôâ¶þö>tx¡;³ÆƒyæÖºËR­«¬TädÆ]ýºÇ ¯Ìÿ•HŠ&86!î›+ú‹XÞºQ‹ÿÿPK!X7éNÀ xl/theme/theme1.xmlìYÍ‹7¿ú? swü5ã%ÞàÏl“Ý$d”µ¶ìQV32’¼%9õR(¤¥—Bo=”Ò@ ½ô $´éÑ'ÍØ#­å$›lJZv ‹Gþ½§§÷ž~zótñÒ½˜zG˜ Â’–_¾Pò=œŒØ˜$Ó–k8(4|OH”Œe nù ,üKÛŸ~rmÉÇØùDl¡–I9Û*ņ‘¸Àf8ß&ŒÇHÂ#ŸÇƒÞ˜+¥R­#’ø^‚bP{}2!#ìo/Õö)èN¤P#Ê÷•R¼Ž–B,D—rïÑ–3ŒÙñß“¾G‘ðCË/é?¿¸}±ˆ¶2!*7Èrý—ÉeãÊž“OV“AÔÚ+ý@å:®_ï×úµ•> @£¬4µÅÖY¯tƒ k€Ò¯ݽz¯Z¶ð†þêšÍíP},¼¥úƒ5ü`Ð/Zx Jñá>ì4;=[¿¥øÚ¾^j÷‚º¥_ƒ"J’Ã5t)¬U»ËÕ® Fwœðf ê•LyŽ‚lXe—šb¹)×bt—ñ"IO.fx‚F¿]DÉ'Þ.™Fx3”0Ã¥JiPªÂõ ô7Q´…‘!­ìKÄÚ²Ç#Nf²å_­¾yñìÙó‡OŸ?üíù£GÏþ’Í­UYr;(™šr¯~üúïï¿ðþúõ‡W¿I§>‰&þåÏ_¾üýש‡ç®xñí“—OŸ¼øî«?zìÐÞæèÀ„IŒ…w {7Y tØøé$†"–Š@·Cu_FðÚQ®ƒmÞæÀ2.àåù]ËÖýˆÏ%qÌ|5Š-àc´Ã¸ÓWÕ\†‡‡ódêžœÏMÜM„Ž\swQb¸?Ÿ½—Ên„-3oP”H4Å –žúbìXÝB,¿î‘g‚M¤w‡xDœ.’+‘r¡C\.!Ô–oön{F]«îá# ÛQ‡ñCL-7^Fs‰b—Ê!Š©éð]$#—‘û >2q}!!ÒSL™×c!\2×9¬×úU`wØ÷è"¶‘\’C—Î]ʉì±Ãn„â™Óf’D&ö3q)мLºà{ÌÞ!ê‒á¾M°î7Á- WӤϾ«ì`Wb]Av®ªç ìéºf"w‰°RvOÙ{ö'ˆg’ñMš¯AÔ­Ô…SÎI¥×éèÐ^#PøA¾8r]€#¹û›´Þˆuv©gáÎ×·â÷6{ öåÝÓîKÁ§–bkß µ&Èfˆ ÀpÑ-ˆXáÏEÔ¹ªÅæN¹‰½ió0@adÕ;1IÞXüœ({§ìq0gPð¸¿O©³‰RvN8›pÿÁ²¦‡æÉ 'É:gW5çUÿ¿¯j6íåóZæ¼–9¯e\o_¤–É˨lò.îùÄ[>Bé¾\P¼+t×GÀÍxƒº¥{’«à,‚¯YƒÉÂM9Ò2gòs"£ýÍ 5TÖÍΩÈTO…7c:FzX7Qñ ݺï4÷Ø8ít–˪«™ºP ™—ÂÕ8t©dŠ®ÕóîÝJ½î‡Nu—ui€’=Æd¶U‡õå DáuF蕉M‡ ¥~ªeW®ÓVQWn^Ô[~¤dhÆAy>VqJ›ÉËèªàœi¤79“š%ö2òH7•­—§V—¦Ú[DÚ2ÂH7Û# #xβÓl¹Ÿe¬›yH-ó”+–»!7£Þø±V$r‚hb2M¼ã–_«†pŸ2B³–?Ž1|g;B½u!:… —‘äé†f™q!{HD©Ã5é¤l‰¹GIÜòÕòWÙ@Í!Ú¶rá£5® ´ò±A·ƒŒ'<’fØåéô>å ç¯ZüÝÁJ’Í!ÜûÑøØ; s~AŠ…õ²rà˜¸8(§Þ¸ [Yž'¦ŒvÍ«(Cé8¢³e'ŠIæ)\“èÊý´òñ”­ºîƒ©:`ßûÔ}óQ­À4CcɇŒSàïq) ”ˆ¥çÎ㎬ÞhÉxLåd4–pç+ƒûT>=n‡K)(h¬´õ©ü’«ìü,! "j‘RY‡Ð\+E»œ¦‘oãÍ‹oñØî5-èŠj€à¬šŽÇ å´A)v¾ÃÊÙ\ŠÍkÅ L—2KÈdIÈîTâ¶õ]»ƒÖ¿‘ˆE±íÒE¢B–¨côI±žôIÁH>e*F FJ–gÃHÉTùŒÕb¤`¤d$Ÿ³<ŒŒ”Œä—ý<Û«>y0®±ð‡ë7â`È<[`öÿCZ›ªdÊ»Îs,»ÿ^6‰zúø@­n¾Ößßþï}lØà6øš“Eߊ’Ûõ#FÅ}ÿÿPK!fÿàE‰docProps/core.xml ¢( Œ’ÉNÃ0†ïH¼Cä{ê$Je¥©XÔ TBâfìikHËv··ÇqÚ4= å0›¿Ìü3ÙtW•Á´µœ x¡$«¹Ë z+fáÆRÉiYK˜ =4ͯ¯2¦«5<ëZ¶LàHÒ¦&he­"¶‚Šš«.¹¨uE­sõ+Ê~èpE#\¥œZŠ`¨:": 9ëj­Kà C Hkp<ˆñ©Ö‚®ÌÅ>Ó«¬„Ý+7Ó¡Ý>›³6ÙUïŒè ·Ûí`;ôm¸þcü1zõ£†B6Z1@yƱ–gød:ˬ¿¾Ù6Ü9.Á4P[ëü„\Õ%ic,@{Â1Ý€9¦…²ng-ç,à6SRcçn‰ ünù·ªY©†hN!f¸ïº¿zõÚ.NÒªw̼ïŠÊ“(IÂÈ}i‘$$“$ýl&8{ßèÓªC›ÿ!ŽŠ8!ñ IG=âà%/©\®ÝaåÂÛ ׅüDç7›ÿÿÿPK!‰Õ–ÍèdocProps/app.xml ¢( œSËnÛ0¼è?¼ÛRÜ&( ŠA´È¡E XɦVŠ$¸kÁî÷ôOúc%­T–› (râ>†ƒáî_ï;“õP;[²‹yÁ2°ÊÕÚnKöP}™}b’´µ4ÎBÉ€ìZ¼ÇWÁy¤³Ha±d-‘_æ9ª:‰óض±Ó¸ÐIŠiØæ®i´‚;§vXÊEq•ÞÀÖPÏüHÈÆeOo%­Júð±:ø(Xð :o$àù)¬ISéDËcÂo¼7ZIŠ#ß´ ]CÙç½Ãói“ǧ¬A킦C☦|­¤Û¨B4Ò ðüTà÷ Ó„WR¼§eŠ\ÈPÿˆ3^°l#’ö’õ2hi)¾!Á†äÄMØ€&ܘ_?‰ ð<¢†Î1œ^˜Æú£¸<bpLƒšØ8×Yi2€ß›• ôŠì˩죆Aô uÜd½F½‰ç6¸#˜ ¥?c[]×`ÿ ív†t"¶ÎÎ, A=^ÀWÉÿý&[¼˜ëq_ÉMç3ùªí>øÊÝ%³=/þ¼È×­ PG¯ŒÆ ü>î<˜DrÛJ»…úæe#Ùôqø¸ââj^|(¢'5žŸ¾¨ø ÿÿPK-!HABÊq°[Content_Types].xmlPK-!µU0#ôL ª_rels/.relsPK-!a ¾Ž VÏxl/workbook.xmlPK-!=X€zî xl/_rels/workbook.xml.relsPK-!’—Q·Y xl/worksheets/sheet1.xmlPK-!j༇àxl/worksheets/sheet2.xmlPK-!¥Öa#/ Òxl/worksheets/sheet3.xmlPK-!rOë; +xl/worksheets/sheet4.xmlPK-!ÜúÛsLxl/worksheets/sheet5.xmlPK-!X7éNÀ ] xl/theme/theme1.xmlPK-!½öèäÛ Ü'xl/styles.xmlPK-!Þøò3G«+xl/sharedStrings.xmlPK-!fÿàE‰-docProps/core.xmlPK-!‰Õ–ÍèÐ/docProps/app.xmlPK˜Ó2openxlsx/inst/extdata/loadThreadComment.xlsx0000644000176200001440000002613614155600363021066 0ustar liggesusersPK!Lž¸ð¢K[Content_Types].xml ¢( ¬•ËnÂ0E÷•ú‘·Ub袪* h—-Ré¸Î@"ü’Ǽþ¾CP[Á&VlÏ=×ãɤ7Xk•,ÁceMκY‡%`¤-*3ËÙ×ä-}f a ¡¬œmÙ ×›l`BÑsV†à^8GY‚˜Y†V¦ÖkèÕϸr.fÀ;'.­ `Bj Öï`**$¯kšÞ:ñ %ÃíÆš•3ᜪ¤ä”/Mñ’îEÆ=XVÈã KZ¹`§ÓJBaåB“ùŒâG^¬(QG5ú8`gìƒrï«’±ðá]h:'_+¾²~þmí<;-r ÿ\¢ó ,‚VY3-*Ó$æ?nF‡îÔç‹Â->ðø¼ÞB”ibØ(À[§=ж‘Ká¡ø ž*êæ~k·øV×õ·¾òF·õÆë‚…b¸³A—ÿgâ[SXKPY{&ÛQ´ùv<£ö mÄ©£Qß{뚟‡Ëë«énutêH|¨`ßß}Æ{"5Ϋ êÖL×r€Í㯠ÿÿÿPK!µU0#ôL _rels/.rels ¢( ¬’MOÃ0 †ïHü‡È÷ÕÝBKwAH»!T~€Iܵ£$Ý¿'TƒG½~üÊÛÝ<êÈ!öâ4¬‹;#¶w­†—úqu*&r–Fq¬áÄvÕõÕö™GJy(v½*«¸¨¡KÉß#FÓñD±Ï.W ¥†=™ZÆMYÞbø®ÕBSí­†°·7 ê“Ï›×–¦é ?ˆ9LìÒ™ÈsbgÙ®|Èl!õùUSh9i°bžr:"y_dlÀóD›¿ý|-NœÈR"4ø2ÏGÇ% õZ´4ñËyÄ7 ëÈðÉ‚‹¨ÞÿÿPK!m½óg7xl/_rels/workbook.xml.rels ¢( ¬RËjÃ0¼úB÷zíôI‰œK)äÚº äõƒX´êÃ_a·µ irñE0»hfvw¶»/ݱôÔZ#x–¤œ¡Q¶lM-ø[ñ|õÀiJÙYƒ‚÷H|—_^l_°“!~¢¦uÄ"‹!Á›Ü#©µ¤Ä:4±SY¯eˆÐ×à¤:Èa“¦wàç<_p²})¸ß—ל½‹Êç¹mUµ Ÿ¬z×h  ÐwqVH_c|ÄIôÈá¸üfMùׂ“úax³S²5=|Z 1L>þJC礙ÛÌèVyK¶ ‰²ÆSÄd÷¥ËCƒ‹q³fÒ1ýÔOmâfÕ04Òcù|Ìú<óò¯XÄ=ÿÿÿPK!µ—xdaxl/workbook.xml¬U]o£8}_iÿò;ó‚JG!€¶R;ªÚLûX¹`Š7€YcšTÕü÷¹vBÚNG«lg#bcßËáßcsúeÛ6Æã]Œð‰ Ú¼dÝcŒ¾­r3DÆ IW’†w4FÏt@_ÎþüãtÃÅúóµÝ£ZÊ>²¬¡¨iK†ÞÓ"-‘0ÖÐ JÊ¡¦T¶åØv`µ„uh‡‰c0xU±‚¦¼[ÚɈ  ‘@¨Y?Lhmq \KÄzìÍ‚·=@<°†Ég ŠŒ¶ˆÎ;.ÈC²·Ø7¶®þ؆ƙÞ¡¯jY!øÀ+yÐÖŽôýض0~·Ûkp’g úÄT ¬DðIVÁ+xÃöo£a°–öJ‹÷I4ÿÀÍAg§kèíκéû¯¤U•jÑAf%“´ŒÑ †|CßMˆ±OFÖ@cl‡È:;ØùJ%­ÈØÈy‚‡Ä ˜;¾Êc,IEG$]òN‚÷º~×s{Ysp¸qMÿ™ °±À_ ZRDäa¸"²6FÑÄÈú6€xëï¶gOTJj¥tXKÞ[oœI>nƒÿàMR(Á(Þ±ÚÝÿ¬ȉhòߕܟ§Pƒòº—û {®–ܽï áûÛuà \æf6Ëæ¦ãz™¦®cÎÝÌsœ0ɽÀûbDœŒ²Þ[AÇÈóº$Û)‚íhdå+{ÿ3UÿS3ž+ÁêX»et3¼ÚB íëJ¾‰‘ï êy:ŽÃÞ±RÖ1rBÛ;ÌýEÙc ŒñÌS“`Å,F/É,™…c›™ï¤ ÛKÌÅ"ÍÍÜMÙÒ]iæhFÖJújº7:múu¨b8©U¯"Rïç%ÖEœ+HS€ÉU§Cl;s•A·òbº1 ‡={1³çžig®ozáÜ1Cê³ôR'ógYš%¾ªúDÿÇ1¨mM_Ų&B®)Öð=º¦UB0ÔNð}K6ñÃÄv¢—ãÜôðÜ6“$ðL?Í]†Óeæç¯d•ü꓇Phé§)‘#lPµ7õ8Rm¾Ÿ=LV»‰}Þí½è:Uë¾úßo@}CLÎoL\~½\]™{‘­îïrm¤_ªµt5T«=dM5<ûÿÿPK!\W8Èœ·xl/sharedStrings.xml4A Â0E÷‚w³·S]ˆHš.O éØšIÍLEoo\¸|ÿóx¶§Ù¼¨HÌÜÁ¾iÁ‡‚x@ã<í-£6† ‹ n%‰mWjŽFªøXH VèTú,dÇÖÏ+/l^3ñi’]H OÞЋMÌZô† :U®=ÚÁU Õ”ÝÖ¸…… ©Ë¤¥«ÉAتŒ_ŸŒ¦Z¥É)Û5˜mMêüÛÏ ã4 *QzãÍÚXC{U­ÁÍÄÆX[¡Å®'¾ ¿/“;)¢Å¤B®}µë€§>©ù2ƒwz‡šã”ˆ×n÷f8k<.´ #a ¥%œ…m"צ?$†:Ž›­SAÕÙ*_rtÌË—½š`ãû nlX‚ϼ¼âÛúÑŽ£ÿŠ4-”Èõ{øe¨¾k}$Ü?xeÿâ¾vU]lL¤s‘žÍE2ÙxŸÎßùrP¯îšùܲΫÛÒzžHrPßñi•„H0ÎÞ¦ÆEÿd‡PH;²‹¿Êi‹YþÛYýÿÿPK!:Ì2T#xl/worksheets/_rels/sheet1.xml.rels¬’ÍJ1F÷‚ïîÞÜIi¦ ‹Ð­ÔÉ:I†ÜXíÛ›¡ˆÎP]¹›Üœ9_’õæÃâH‰û4(Y `£ëC«áuÿ|ó‚³ Î 1†1lêë«õ &—MÜõ#‹B ¬¡Ëy|DdÛ‘7,ãH¡$MLÞä²L-ŽÆLK¸ªª;L?PϘbç4¤»±?åÏ ¶ïmŠ›,mô›¦·UÝ£ªæ`Ì]"ãÈ=Eï)ä4©¥¬AÊeÆË’¥àe·Õ/nzŸ·Ñ¾M êc©1E<Óûþ©¡þSãè‡m2ïåþg"îØúîÊvã, ¶ËÒÔPØÆ ì«bˉ¨^‚¤dÎÆþûN¶S;´l£Í‡èt:=÷Ü‹ÎéM#:2c¹VŽ®BŒ˜*uÅÕ6ÃßÖE0ÃÈ:ª**´b>1‹oò÷ïRëN‚=ìs ”Íðιý‚[öJ“ZIl͖ؽa´²þ’$Ã)‘”+Ü!,dù? ’šÇÃ>(µÜSÇ7\pwj±0’åâ~«´¡T›hBKÔDS£Æœ´Úg~$/¶ºvW€Kt]ó’=§;'sBË _‡%$Œ/boÌ+‘&İ#÷åÃyZkå,*õA¹ Ç@Ô§`ñ¨ôUø#¨po•§ö':Rš“<-µÐ9(d.òE%ë,n©àý²¦’‹S§nïµÕîí$‡Ü{+âytlF~ÂÁÙn2\aû»t¶¦;-鋾zØv±Ï…Û)òºÂ1£ 8E½¼>í!* ܱƒ£Zo =Eq2º@Z‡yºÑ¦‚sN³Ïh§ÊSÁjñ¾ÝùÕé=üo´sÐTyZqºÕŠ Ÿ¡ó^€pJ&ăTßë ì¦Fê éî« Ãóô¹=‹H/vxÝÆãÑ:ì7⦾ÄÄí ÒOî‘o£ ñS@@CöhsàÂqõaÀ¬š!m×8ÿ¢Ûä$ïßEm¶¶p iå\2fE5·cÝBƒo mjîpiJf[<ï?ª ]Jj>—6ú”%Q¬H8Ø«˜8ž} ø”tS“i½í6>ã#q¶ßÐá¸prO TL7>æiõ ]Œì¢qz›~Ò>’q OZý”¹«P':‡‚ï”û¢A–•çsÌ»;8a~JÁ œ%43îez•”;žDF6Û–wCî‡ÿ÷Ã$ÝV,A”żö‰±=Zx#i0}F·¼„OÜ”²±DAÑË/(1gÞc§ÛÎÔbFI¦Óõ°ªð7(æ±}…ÖnX`‘”\œþ/1a×Yóœ÷=b—ŸVòÿÿPK!Á¾NÆ xl/theme/theme1.xmlìYÍ‹7¿ú? swü5ã%ÞàÏl“Ý$d”µ¶ìQV32’¼%9õR(¤¥—Bo=”Ò@ ½ô $´éÑ'ÍØ#­å$›lJZv ‹Gþ½§§÷ž~zótñÒ½˜zG˜ Â’–_¾Pò=œŒØ˜$Ó–k8(4|OH”Œe nù ,üKÛŸ~rmÉÇØùDl¡–I9Û*ņ‘¸Àf8ß&ŒÇHÂ#ŸÇƒÞ˜+¥R­#’ø^‚bP{}2!#ì •J{©¼Oá1‘B Œ(ßWª±%¡±ãòBˆ…èRî!Úòaž1;â{Ò÷(~hù%ýç·/ÑV&DåYCn ÿ2¹L`|XÑsòéÁjÒ ƒZ{¥_¨\ÇõëýZ¿¶Ò§h4‚•¦¶Ø:ë•na PúÕ¡»WïUËÞÐ_]³¹ª…× T°† ºàE ¯A)>\Çf§gë× _[Ã×Kí^P·ôkPDIr¸†.…µjw¹ÚdÂèŽÞ ƒA½’)ÏQ «ìRSLX"7åZŒî2>€R$IâÉÅ Oв¸‹(9àÄÛ%Óo†&`¸T) JUø¯>þ¦#ж02¤•]`‰XRöxbÄÉL¶ü+ Õ7 /ž={þðéó‡¿=ôèùÃ_²¹µ*Kn%SSîÕ_ÿýýÞ_¿þðêñ7éÔ'ñÂÄ¿üùË—¿ÿñ:õ°âÜ/¾}òòé“ß}õçOÚÛ˜ð!‰±ð®ácï&‹aûñ?Ä0BÄ’@èv¨îËÈ^[ êÂu°íÂÛXƼ<¿kÙºñ¹$Ž™¯F±ÜcŒvw:ચËððpžLݓ󹉻‰Ð‘kî.J¬÷ç3 WâRÙ°eæ Š‰¦8ÁÒS¿±CŒ«»Cˆå×=2âL°‰ôˆÓ%Cr`%R.´CbˆËÂe „ÚòÍÞm¯Ã¨kÕ=|d#a[ ê0~ˆ©åÆËh.QìR9D15¾‹dä2rÁG&®/$DzŠ)óúc,„Kæ:‡õA¿ ãû]Ä6’KrèÒ¹‹3‘=vØPsXÐa3Ëç¹ÑW"`•ìJ¬+ÈÎUõœ`e’ªkÖ)r—+e÷ñ”m°goq‚x(‰ߤùDÝJ]8åœTzŽMà5åä‹Ó)×è0’»¿IëYg—zî|]p+~o³Ç`_Þ=í¾|j ö·öÍQk‚¯eÎk™óZÆõöõAj™¼|Ê&ïòèžO¼±å3!”îËÅ»Bw}¼ÑŒ0¨ÛQº'¹jÎ"øš5˜,Ü”#-ãq&?'2ÚÐ ZCeÝÀœŠLõTx3& c¤‡u+ŸÐ­ûNóxÓNg¹¬ºš© ’ùx)\C—J¦èZ=ïÞ­Ôë~èTwY—(ÙÓaLfQuQ_B^g„^Ù™XÑtXÑPê—¡ZFqå 0mxåöàE½å‡AÚA†f”çc§´™¼Œ® ΙFz“3©™Pb/3 tSÙºqyjuiª½E¤-#Œt³0Ò0‚á,;Í–ûYƺ™‡Ô2O¹b¹r3êkE"'¸&&SÐÄ;nùµj·*#4kùèÃ×x¹#Ô[¢S¸vIžnøwa–²‡D”:\“NÊ1‘˜{”Ä-_-• 4Ñ¢m+W€>Zãš@+›qt;Èx2Á#i†ÝQžNáS®pþªÅ߬$Ù½½:ç7¤XX/+މ€‹ƒrêÍ1›°‘åùwâ`Êh×¼ŠÒ9”Ž#:‹Pv¢˜džÂ5‰®ÌÑO+OÙšÁ¡ë.<˜ªö½OÝ7ÕÊsiæg¦Å*êÔt“é‡;ä «òCÔ²*¥nýN-r®k.¹ÕyJ¼áÔ}‹Á0-ŸÌ2MY¼Nʳ³QÛ´3, OÔ6ømuF8=ñ®'?ÈÌZu@,ëJøúÊܼÕfw¢¨î+zLdƒ¯ÄrQн µõûJ<ï.?‹‚| .x¬ÄIÜé‹Oj“BÄĩȞ*Ñ2Ç•”dZ쀹ís§ ©ÎiÚËÐ4Öà}0oz–Wey+ñÀèk¬/ãÉPLŽ«žÿ×´fࣗÝ1f`­¾Äè¬ίÔOÖ¤@¡áâ Œõ¨-¾ :%ç2•9·hÞ’å£.•œ§jkÀá:Ð 8B%? êaXßl"­z^õh8¤‚쯼À+Qü¬=$ ž3à ›’1v‘8é!½R‹È¤dLÅ1œkç±½ÑËQƒsá`0äÆ9âβCúÞl ñ?ˆ—sâ‘aâp¶ß4sÎ7>9OúÃ{ºþ˜§è›õ¯ôwáß×y^TÛÖùNë>ÔcÞdrƒÉº¿Çú]ówc8ƒ—éÖõòvQ^—ù_g5%?®ZÿÿÿPK!”¦³IudocProps/core.xml ¢( Œ’QKÃ0…ßÿCÉ{›´s"¡í@eâ`àdâ[Hî¶`“†$®Û¿7m·ZÙ|Lι_ι$ŸTíÁ:Yë¥ Ah^ ©·z_Íã9Ï´`U­¡@GphVÞÞäÜP^[XÚÚ€õ\HÚQn ´óÞPŒßb. ÄMmóáh·Ø0þŶ€3Bî±Ïó ·ÀØ DtB > Í·­:€à*P ½Ãi’â_¯«ÜÕN9•ôG:âŽÙ‚÷âà>89›¦IšI#äOñÇâõ­«KÝîŠ*sÁ)·À|mË`:^0+!ZÊ=x9Éí*+æü"l}#A<¯N\ºÂ]¥þ!QIûJge=yz^ÍQ™‘ŒÄi§w«”ÐIF³ì³ ñg¾ Ý_¨S”§SJȈx”9¾ø(åÿÿPK!M¬pxl/persons/person.xmldQKÃ0…ßÿC¸ïmÒnÝÖ±vèÊ@™âƒâsÖÜ®&)¹qnˆÿÝÈözî¹ß9œÕúdvDOÚÙ ²TCÛ:¥í¡‚·×m²FAZ%g±‚3¬ëÛ›ÕœÝi ,",UЇ0.9§¶G#)5ºõŽ\ÒÖîºN·Èiô(õˆÁ <Ù‚‡þWB]m ¸ð–§+¢ÑƬÎy#¥Î®xbÆÔê¿~Liy~–&–Di“'é5²}ĘV|•ó|ZÞm'I^6›Dˆi“”ó¦I6Ó{‘"+ÅL|û ôÑ¿(&…˜´]Þ©ý¾Ì `£wG­.×wm•û$¶‹ÀëÿŸªþÿÿPK!µÉ¦Éxl/comments1.xmlŒRMoÛ0 ½È tž-'u³Ä‹´A(vêCуjÓ±P}’;ößG/ñ€ —ú ”ùøôøÖ›^+8¢óÒšœÍℚÒVÒìsöóå{´dàƒ0•PÖ`ÎNèÙ¦˜NÖ¥ÕMð@Æç¬ ¡Í8÷eƒZøØ¶h覶N‹@©Ûsß:•oƒV|ž$ ®…4ìŒéò3 Z¸CÑôVù.• §X t™=íuâ]ÑÞÀ½»Ö²tÖÛ:ÄÄm]ËoøÍRîð(eX±‡ÐXçÇ eþ;]Üí¶óÕc´Úîî£ûyú-“e´MWéün‘lÓÅâÏšŸ[‹1 Œ‹xÏÒ‡ÿ 8¬sö0cpþÿ©ÊmÃ7¢ÅKÜ»ì ©ü¹ÁD:`OBñúÒ Úc—ÉoÓÉtòËܸ{°5ìú¥lçád,‘„Fz:®!¾Ac;$ë|aN€•$3P‡ ÐI¥`ºµ=ÒTYS;B-A æªìð–E Ï(œmf0xË“¹ö6¾Þ\Ý)i>øf8I˜å×d5O‡§mÏî̦ ïvãÃלág]øE *\-dÌ|ñÿÿPK!ö8F'+°(xl/threadedComments/threadedComment1.xmldMnƒ0F÷•zË{㟂&J ‘ºéŠÁba«MUåî%iºh³iôÍ›™—oÎæ„Þaö£³óˆa¶uÝh¿Õ’bäCc»æä,hü oŠç§¼fh:èJg ØàѲ^ã!„)£Ô·˜ÆGflgç]¢Öêú~lúé:ë€`NT0žÒpÇ-©ÿð²óÑM`—]½›M|äæã%Ô4£ÅEþ‹½_‰fè5ÞrŒºZcÁ#\.kβXfq­Ó¢ÃÙ—Nã/µRm+"TUÆdEÔºªH)wŒÇŒ+–° Fã5+“Õ¾jGT¹I,ä–¤;–.Y%Å*a¥L’Ëõ&8‡â>ÐýלÞ:Kù«´ÈéÉÅ7ÿÿPK-!Lž¸ð¢K[Content_Types].xmlPK-!µU0#ôL Û_rels/.relsPK-!m½óg7xl/_rels/workbook.xml.relsPK-!µ—xdaV xl/workbook.xmlPK-!\W8Èœ·ç xl/sharedStrings.xmlPK-!Ì“ãqW€µ xl/drawings/vmlDrawing1.vmlPK-!:Ì2T#Exl/worksheets/_rels/sheet1.xml.relsPK-!‘œ3{À© ˆxl/styles.xmlPK-!ëÀw:ùsxl/worksheets/sheet1.xmlPK-!Á¾NÆ ãxl/theme/theme1.xmlPK-!Â^YbdocProps/app.xmlPK-!”¦³Iu(!docProps/core.xmlPK-!M¬p¨#xl/persons/person.xmlPK-!µÉ¦Éï$xl/comments1.xmlPK-!ö8F'+°(æ&xl/threadedComments/threadedComment1.xmlPKñW(openxlsx/inst/extdata/cloneWorksheetExample.xlsx0000644000176200001440000001625114155600363022001 0ustar liggesusersPKTT‰O _rels/.rels­’ÍJ1€ï>E˜{7Û "²Ù^DèM¤>À˜Ìþ°»™Œº}{ƒˆXY¥…æ–dæ›o†©¶ó4ª7Š©go`]” È[v½o <ïV· ’ w8²'J°­«'QrJêúTfød  wZ'ÛÑ„©à@>ÿ4'”|­hlIoÊòFÇŸ 8fª3wn jt ››¦·tÏöu"/ %~Ed2Æ–ÄÀ<êwŽÃ óPd(èúJ-œEÁÍé‚7¯'t(¨-GZ…˜³£ôyÔߎŽíc~NŸg[^_rŒ4 yGîO áK³ÒGÛRPKXÒ<‰ítPKTT‰O[Content_Types].xmlÍ”ËnÂ0E%ò¶"UUºècÙ"•~€‰'ı-ÏðúûN@jUÝÄI–Ym¾‡^|b¢.xUQ‚@o‚í|«à}÷ró‚X{«ûàQÁˆ›õê{Íy…\IdO s|’’ŒÃAS"úüÓ„4hÎcjeÔf¯[”uY>È4õ€sO±µ ÒÖV vcÄÿx‡¦é >ó1 ç ò+¤=9DΦ:µÈ NÉÃSÙäe˜úÊ0õÌí’0œwñä0ÅÙƒÜ-É@<ö¹\'ˆã<¿h¼Ó í§Üü)ÅTþ…‘gõ_ÿPKKúlÂíEPKTT‰O'xl/printerSettings/printerSettings1.biníWmnà ý¿Sp>ÌGŽÓÐqÿ# žI¡ÛÚ’5R'ééÉqŒÛ‘Ø(¤L ¶…mš‡8F‚5< L`×Ý-Þ`­AŒ…2{dp©ù9R#ƒ>7ÛÞXu…¼–ê‹/µX¡ŒHI„|× ‰µr)¼œ„\ñVA8Ú2dFfqÉñºó˜I]]o 5`?‡<͘›¯6uA ¬ ÍÚ¨ZÂŒX‡Õƒ zLŠuEËw®9±–gZY6®jì"Yáì7î^!ôY”v’E$!BÔ’E˜Ûu¥@?ÐÃ>&Ùð!„ ƒ¶ìöŽÞ¶•ê쉉Cpk#@iöe[ã;éÓþæ w»úZ¨aç ±Š¥;⥟±ì{Эòן˜ü…üŸ(ð?@ýà‰‰‰‰‰‰?AéòkiÓq9wL_PK­±](7”PKTT‰O'xl/printerSettings/printerSettings2.biníWmnà ý¿Sp>ÌGŽÓÐqÿ# žI¡ÛÚ’5R'ééÉqŒÛ‘Ø(¤L ¶…mš‡8F‚5< L`×Ý-Þ`­AŒ…2{dp©ù9R#ƒ>7ÛÞXu…¼–ê‹/µX¡ŒHI„|× ‰µr)¼œ„\ñVA8Ú2dFfqÉñºó˜I]]o 5`?‡<͘›¯6uA ¬ ÍÚ¨ZÂŒX‡Õƒ zLŠuEËw®9±–gZY6®jì"Yáì7î^!ôY”v’E$!BÔ’E˜Ûu¥@?ÐÃ>&Ùð!„ ƒ¶ìöŽÞ¶•ê쉉Cpk#@iöe[ã;éÓþæ w»úZ¨aç ±Š¥;⥟±ì{Эòן˜ü…üŸ(ð?@ýà‰‰‰‰‰‰?AéòkiÓq9wL_PK­±](7”PKTT‰O xl/styles.xml¥“Moä †ÿ âÞ!í®¶£$=¬©—½´•z%2¨"`ª¤¿¾&d¾ÔJ­Ô\€×öƒên2@^¥ÚÙš–›‚i…ëµjúôØÞü¥$Dn{ÎÊšÎ2л¦ qù°—2ØPÓ}Œãޱ öÒð°q£´hQÎñèF/yR¶-Š?Ìpmi&ìŒøÄpÿro„3#ºÓ ã¼°Ž˜©üÅ?’ŒÞ§â#™SJ ù1¡[v˸ ÄˆÝý`ç`É ‘6•=˜ÖÄ@„;ØXÓ%¶jM¥œ=›Jš|§7òÊ•’²¦œ'~èjÚ¶Åò%Ùr#³Û?ºó:‰Š s–·IXJYýŒÆì’Èò5Ë’²Ð§,¶4 M…O¥·-ȺœG,ÍbO3fñûÂ{ð|.·¿/–ïíœïq†.ëÏRST¼öindÉ#ö¡©zÍg9$ä1bÝ VH€‡4iÏêŠ=)’þ¾O} ©úãZ·“‰IËìcɤ®ù'ôrÑý¤’ÔïšþOS g颶Ÿ$ŒÌ~R“—¬ç_°yPKÓÓi,±ÆPKTT‰Oxl/theme/theme1.xmlíY_sÚ8¿O¡ñûùcSÒ)™ Ú›6m&ázÓÇÅ[‰ly$‘”oë¿X`’‡› `I¿Ýßîjµ^›OðQG4¦äwÌõFN¤uúÑuU€Ó þ)Mpm%d ‡2t—YÆÜíu:7–8$˜Žœ« (™g*ó?ùTêŸrüJ´:lj€ËÛ 'm Uðå}7©špI€d[ŠÇ9ý­ÂAi\9üã¸çŸÜB¨çÚ"ÞåŸR4¨˜{¹¨ µlwæ}¸¬Yz5Ë>t:N¦ÝZk… @Ç»{po6ìŽ+Í Pq¹¯~Òñ;ž‰7)ú{"gãñØ?3Dú[ o?ì ¼‹ž÷ ß‹ñÅd20Dü-Å`?ûp6ðLü ¤ˆ8Kî÷²M®÷ª†¬ÿÒ "|XeEÊÜFâ*} c¸r†˜jÇA³„èMJW zñB2@¦bBc±ž TÛlFMT YªGÎ…„…Ó@ÍYLùNɈ!iúBòÙBó˜!‚Û±SØïàè˜&aúSây³`?¯ï »o#¹Ö¬û5Š ì•|,¤Í»¯iÓ»uZ­ë&ôàÁbÄÕ„N×)¦ ³(žDÔ0ùšC¢!¤ Õ$[÷”¶Kþb̈÷ ¤Pb¥É/FÆÀlAš³…n—ûÂbܲ XsÁˆÖÕO2ÜBrIL0`h¹E1åFl?ÃZCl³bÞY ¾ÝÈÀØ¥1BÊ™.©R±rc˜þ° ØòâŠob,5»·€¿M𥸟D§6ûY5á«{Ìg ×BÛ¬æ¹ÊƸEʇŸŒêg†Xµ'Q¶²––SD…y–7|´¢p÷KhÌ’'J*gXS_¿¤^`¡æÇÒÐÿyù¼„urM1 ß«ç{õ|¯žGUÏÕà­j¦Q#Ýf›Z鋵­+Æù­ÞpúMUeV¡ÛËÎçÍr.Z·Ëi„—e·¼År¡„|H¤Ðÿ2ÝF"_·¢ Õ–#T$ »uÇJ’-`½×Åœ_=¼!ô•XÓýæC]­&…j‡«Ÿé8–¯ÿád¾n=’°ë·úOºfdñÀ<©¨pÐ+ ÀdN—ÙNÔiSíÕÛmŠ`I˽붺ÖíËáÓ¡lžõO&àa2r-£ ÁnÚs¸ÛiBiünI¥Ò— ¢B6_­Þ‘$çµ#=ßË‚ójž´—´ƒ¶4ãÚv2çE¶cˆÛ²åtµ¢¶O3[„Xk*o£å#Yðµ¼tÃ+RqÉÞ“zÕߌù^™¥fáèÔß}5Ó©—€§”EnXäG•…P5¬í©&Lƒ]»O'yÙu/ý·ôÒpñÕü³9÷Šže‡[öþ²z^Ã.EÉ2~ä©#å.X0“ØÚTqEKñý¬ÎŒ$\$ù¯¤F™,4Õ•5Œô ‰dX^u$)½Ö¥ÿ:wȪ²ÛkÞõ+Eµ·†õ*ÅKü]ÐÊçYidÑqHTÕ¬òt§¥HËÆº–£»gÍBÿÒZò¦}š×ya³åòžÓ6yeê‘;ÑÙÉf<³èµ;ÞóŸÙ¤øPF²/¼c0pšewø¹¸Áœ u3L0Uÿ–·ž\ åÆ—™ªs£i8˜§îÿðô>ý™ï[ÿ$ãI÷[âîï†}·]Ë»‡Øm<¡å£½¿¿Äâé/ñ p͵ÊŶ$Lª'P»=ÿPKŒ˜Q£PKTT‰Oxl/workbook.xmlPÁNÃ0 ý•Èw–¶ÀÓ²]b7$;g»Zk’*ëö÷¤ªUBBœbûå=?¿åúlqÂÀä‚|–@WzCî àsûz÷‚£vF7Þ¡‚ 2¬WË·ãÞû£HtÇ êÛ…”\Öh5Ï|‹.!•VÇÔ†ƒä6 6\#FÛÈ"ËæÒjrpUX„ÿhøª¢_|ùmÑÅ«HÀFÇdžkjnÎÞƒ0:bþœ=(¨tÃrµì‘/ÂŽoûVœwäŒï¤û/“ºÊ™X§tîóâqœ½!ê¨`žgiVQàøÑ7Ðté„[½ï»´VNöŒ¯pÚ¦T¦ÈSÔ}±1i×{L؉˜ö ‚ J@ؘ¼—üM/&ôâz18mÈ1‡ÕPKĈD  PKTT‰O#xl/worksheets/_rels/sheet1.xml.rels­’ÏNÃ0 ‡_%ò¤Ù!´l— iW·h(1…½=Aˆ?¶i‡Ÿòù³ååúcÄ„¹„H´l@ ¹èužw7w [òvˆ„öX`½Z>â`¹~)}HET=sºWª¸G[dLH5ic-×2w*Y÷j;T‹¦¹Uù?æL±õòÖk»}ÂKرmƒÃMto#i¡|¶ïu®Š´¹C6 åÏÛo¨eÅ‚:n³¸¦MÊó2 ̬²ÃZË—@§$§êEÍŠÛœÛÛ_®åô½:5»ŽÕ'PKwGXðßdPKTT‰O#xl/worksheets/_rels/sheet2.xml.rels­’ÏNÃ0 ‡_%ò¤Ë!´l— iW·h(1…½=Aˆ?¶i‡Ÿòù³ååúcÄ„¹„H²ä¢ÔxÞ=ÜÜ(lÉÛ!Øcõjùˆƒåú¥ô!QT ôÌé^©âzm‘1!Õ¤y´\ËÜ©dÝ«íP馹Uù?æL±õòÖ/@ìö /aǶ 7ѽH|¤…òÙ¾×¹*ÒæÙ€”?o¿¡– 긾¦MÊó2 ̬²ÃZË—@§$§êEÍŠÛœÛÛ_®åô½:5»ŽÕ'PKÇ$²ßdPKTT‰Oxl/worksheets/sheet1.xml¥SÁnÛ0 ýA÷Fq»nK`»(t °òí®È´-ÄJ‰Û|ýh;é2ô |¢øøH?åÏ® hÑ2›Í¥o°²¾)äï_O7Ÿ¥ˆIûJwè¡/åC™÷H»Ø$Áõ>²M),•Ц§ã xÎÔHN'†Ô¨t5¹NÝÎç•ÓÖˉaI×p`][+4{>M$N¬>¶6Ä3Ûsu_EºçIÏz.$®¦Ì+_öá Ÿ³†0bfÝIÚÛ)jñßœÎ\#ÌiÚíà nk;›^FR8³\7Io;þ,L› •Ú¼C'3•"¯,/wðƒ ¨ ù˜IŧãÕ?úXþ‹Åàƒ-ânëªlŸ#¢Û=ˆËæŒc‹ý²Õ7ë’I‘ôv˜Õ€U™« öS«§q?HTPë}—~bÿlÓ&.¹g›ª“Œ•NºÌ {AY™›!xÚÒ3>”Y®ÜÃðÇ÷Îݦ ø®©±>Šj®™Ï>IAS§1NÆè^Š-¦„îŒZÞ Ð€î¤¨Ó¨‰wiDÐhc¼…H–;¶)‘¶‰©øüˆœèVÁònX¿ÊdÍå --oŒÖÕí¸´×GXþPKooÛÇPKTT‰Oxl/worksheets/sheet2.xml¥SÁnÛ0 ýA÷Fq»nK`»(t °òí®È´-ÄJ‰Û|ýh»iSô |’øøøDåw® hÑ2›Í¥o°²¾)äß?W_¥ˆIûJwè¡Oå]™÷H»Ø$Áù>²M),•Ц§ã x>©‘œN ©Q1èjLrºžÏ?+§­—Ã’.áÀº¶Vhö|šH:X}lmˆ'¶Çê"¾ŠtÏžôœI\M'/|Ù§w|ΈuštÏÒÞw¹P‹7}:s‰0§i·WL¸¹­ílz5JáÌrÝx$½íø=X˜6g*µù€Nf*E^Y6w˜APò>“ŠwÇ«ÿ,ô±|Å0[ÄÝÖU!y|Žˆncô .›3Ž-ößÈV?¬”LФ·èÀ$3T™«3öçR£¿HTPë}—~cÿlÓ&¦¸YÓCé¤Ëœ°4—¹‚û¡L!=ãC™åêÀ5 /¾wª6%ÝÀOMõQtPsÎ|öE š*qÂ0F·Rl1%t'Ô²ƒ@º‘¢FL' &Þ ¤}A =² ),Oî8°… H‰´MLÅûGäƒnl!oãøW&kÎwhiÙ1ZW×£i/Ÿ°üPK+ÅKÚÇPKTT‰OXÒ<‰ít ¤_rels/.relsPKTT‰O´”#leò¤&[Content_Types].xmlPKTT‰O°=ù­¤ÌdocProps/app.xmlPKTT‰Oõ'¾ö¤·docProps/core.xmlPKTT‰OKúlÂíE¤úxl/_rels/workbook.xml.relsPKTT‰O­±](7”'¤/xl/printerSettings/printerSettings1.binPKTT‰O­±](7”'¤»xl/printerSettings/printerSettings2.binPKTT‰OÓÓi,±Æ ¤G xl/styles.xmlPKTT‰OŒ˜Q£¤3 xl/theme/theme1.xmlPKTT‰OĈD  ¤Åxl/workbook.xmlPKTT‰OwGXðßd#¤"xl/worksheets/_rels/sheet1.xml.relsPKTT‰OÇ$²ßd#¤Rxl/worksheets/_rels/sheet2.xml.relsPKTT‰OooÛǤ‚xl/worksheets/sheet1.xmlPKTT‰O+ÅKÚǤ£xl/worksheets/sheet2.xmlPKÐÃopenxlsx/inst/extdata/loadPivotTables.xlsx0000644000176200001440000006324414155600363020571 0ustar liggesusersPK!*›RÒÒY [Content_Types].xml ¢( Ì–Ýnâ0…ï+í;D¾]S¶­V+B/º»—mÕÒpãX$¶å(¼}'†–ªÊò× åbŸó1ñ‰§=¯Êd³™8O»"›;mì8OÿŸ"ARV«ÒYÈÄP\¾õ‡ ˜ðj‹™(ˆü/)1/ R˜:–ïŒ\¨ñ×0–^å5Ùëv¯dî,¥ÕbÐÿ #5-)ù3矗$JÉÍrbí• å}irEL*gVré¬R^ç`a<~g !ê;ÿ6X­»ãÒ£!¹WnUÅr^Ê&ÏÎMÒÍ" ”n429h—O+®@Š>€ÒXPU¦qL+eì÷ÿ8eÎ[©ÿ_Þ“£w"?N„ãâD8.ÿ‡73G7Š_ r}Éi7ÖÔ1n{Û6ylÙÁ„» ñxx+ƒCØÖÕk;l-Wïxx»Uø,?¿þ £Ì–Ç…´(Û>¢è6çBÐøÔnà£öRÏ\‡¶ÃEw Ìp ws¼>JŒ£òA8GÉÅá8m•ëºoª7@÷ÁyäV0Àþ‘yëõêÕÏBÈÀ{·×Ô5½;rùåŒBݨjÐ Þ26ƃWÿÿPK!µU0#ôL _rels/.rels ¢( ¬’MOÃ0 †ïHü‡È÷ÕÝBKwAH»!T~€Iܵ£$Ý¿'TƒG½~üÊÛÝ<êÈ!öâ4¬‹;#¶w­†—úqu*&r–Fq¬áÄvÕõÕö™GJy(v½*«¸¨¡KÉß#FÓñD±Ï.W ¥†=™ZÆMYÞbø®ÕBSí­†°·7 ê“Ï›×–¦é ?ˆ9LìÒ™ÈsbgÙ®|Èl!õùUSh9i°bžr:"y_dlÀóD›¿ý|-NœÈR"4ø2ÏGÇ% õZ´4ñËyÄ7 ëÈðÉ‚‹¨ÞÿÿPK!+ö}‹3=xl/_rels/workbook.xml.rels ¢( Ì”Moƒ0 †ï“öPî#@?ö¡B«&õºu? Q!‰â¬ÿ~Óʪì‚ÐŽ¶“×lëÝl?Ú&8E©UÊâ0b¨\RU){=<ÝܱP…h´‚”u€l›]_mž¡Ž>a- ¤¢0eµsæsÌkh†Ú€¢J©m+…¶âFäGQO¢hÍío –4ƒ}‘2»/¨ÿ¡3Ôùom]–2‡ÎßZPîB îˆ HPØ \Êúð;‡Êøe†Å” ïÚ±pÇ9…¼¯,|0·SÂyÒîQоvPJ%¿6:p U~éaâÃLfž™&žÆ{Më³@/æjæ™­|ד/MgX Å‹³är8œû(í£YÎ<š¥æ~Òɸ®!‡?;$öñO{>2ýìÿÿPK!JRPP xl/workbook.xml¬Vmo£8þ~Òýõ+5&@J²* ÜUjWQ›m?F8Á[À9cšTÕþ÷;o¤Ý[e»[¥Û3g?3NÿÓ¦,Œg*jÆ«‰/mÓ UÊ3V-æ—ibõL£–¤ÊHÁ+:0_hm~þùGÍÅÓœó'ªz`æR®B„ê4§%©/ùŠV°²à¢$†b‰ê• $«sJeY Ƕ}TV™[„PœƒÁ –Ò1O›’Vr "hA$„_çlUïÑÊô¸’ˆ§fe¥¼\ÄœL¾hPÓ(ÓðzYqA椽Áž±ðñáÛðpö;ÁÒ»­J– ^ó…¼h´ ú]þØFŸP°yÏÁyH.ô™©3êG Í#«2¾Öª¤^CÛ…áZ/>²LæÓ鵿þ¡l™Cĸë*C’J8Ù)™ƒ™JÁQqÌ×ĉ=Û÷Æ–ÛIFØb+JßržG㮣ãC­uß…@õÛ¨t­0Á aêM¸iˆPí ®3¬ò{k;¥qÙò€â:x8o=àX6 ·–=¤q°ïüŸývÜrƒ;èàæþØ v8ä´Üté¢= P⬢™ê@Ik´#f¶)ªòr–0Uèc(•9©©j$))îզ肭r–eTÝ›æpŸí_W8¼øû÷Q *âtS@J¡Ù¨—澇m'P¹iŽGîQí8K˜R¦~›uÿÔ¥eÕ&­«ËózÀM-‡}xC;a +ìÚW];p-;îx–Û «çvkäŽApÝxGžª2u߇¿ãÖÓ]-ÜÿPdäDÈ© éüü¸£‹XWäªÞq¶ƒ¼^dw D7Á‰åâÀ¶¢Èw-oœt¼.b/9«X^|ðÎé!íM‰l «V¬Ç¡z&»ÙÃäb;±“ÑI ïÆ*‘÷ ï!û‚žiœ<œi8ú|;½=Óö&žÎÍûw³Ýž†zj ¡ýÿÿÿPK!%º¥  xl/worksheets/sheet4.xmlœ–YÚ0€ß+õ?X~'‡Â!Âj! îC¥ªêñl¬MâÔ6Ǫêï8@²¬v<ãof<3V&‡`7H"?ù=‰g’¡ŸI3Î.Œx$¢^(Áˆæ’¨ ŸVk@ºü¼ÀÉÌ;Có+dùµl¶†!šÁ†Ö2X†Òz¤}áª'÷…YWˆq_¸î ÃÇ‘@ÚG¢°sÔógbEb Xç7„&›t×=™º$«8uS¿»îþjpv«ÙP]÷´÷Lݓث›šæ¡ £°ýh±oEk ×h7‡euתN]8Ò:ËŽÖÇVe-Ãiu£\éô±+¬Ui{X ¤­´Õ«ž8r-í¬'†Ì%e Àº}œúòZX…µ kMÎÒ@Ì‹X5ÛÊÞÈìug£×r“wx¦°–gVc, ¤m9Œ;?v,°ÕE™%N1AfÜ,p8‰î+¼6±›CÒ¼«r ~(já”t¯8()7g ï½d:øRuœ0 ÇØíé߀òï»ðnÞ3&oê n¿*?ÿÿPK!"è²ÄG)xl/pivotTables/_rels/pivotTable3.xml.rels„Á Â0 †ï‚ïPr·DdÝа«è„.ÛŠ[ZÚ:ôí­7ÁcÈŸïÏWÖi3…hkX˱q­å^ÃõrZí@Ä„Üâè˜4<)B]-å™FLù(ÖG‘)5 )ù½RÑ 4a”ÎçMç„)¡WÍ {R›¢ØªðÉ€ê‹)šVChÚ5ˆËÓçæÿl×uÖÐÑ™ûDœ~T(og—˜ß;RgÙ¾2COIƒ”ŸÙÌ: ªR}éW/ÿÿPK!"è²ÄG)xl/pivotTables/_rels/pivotTable2.xml.rels„Á Â0 †ï‚ïPr·DdÝа«è„.ÛŠ[ZÚ:ôí­7ÁcÈŸïÏWÖi3…hkX˱q­å^ÃõrZí@Ä„Üâè˜4<)B]-å™FLù(ÖG‘)5 )ù½RÑ 4a”ÎçMç„)¡WÍ {R›¢ØªðÉ€ê‹)šVChÚ5ˆËÓçæÿl×uÖÐÑ™ûDœ~T(og—˜ß;RgÙ¾2COIƒ”ŸÙÌ: ªR}éW/ÿÿPK! A êÄG)xl/pivotTables/_rels/pivotTable1.xml.rels„Á Â0 †ï‚ïPr·Ý<ˆÈ:ŠàUôB—mÅ--m}{ëmÁcÈŸïÏWí_ã ž¢u¬¡”bãˆÛõ´Ú‚ˆ ¹ÁÁ1ixS„}½\T0壨[E¦pÔЧäwJEÓÓˆQ:Oœ7­ #¦<†Ny4wìH­‹b£Â”õŒ)ΆpnJ×·ÏÍÿÙ®m­¡£3‘8ý¨PÞ>]:`~ïH­eûÈ| % RN?³¥Ì: êJÍôëÿÿPK!Çmƒ#¾4#xl/worksheets/_rels/sheet5.xml.rels„Á Â0Dï‚ÿönRD¤i/"x•úkºmƒm²Qôïͱ‚àmv‡}³SÖ¯iOŠl½Ó°–rÆ·Öõ®ÍiµÁ ]‹£w¤áM uµ\”1å#l`‘)Ž5 )…ƒRlš¥ä²Óù8aÊcìU@sÇžÔ¦(v*ÎP}1ŹÕÏíDó9ù?Ûw5tôæ1‘K?"T°OŸ¼”©{J¤œ­y¦·2ÿª*ÕW×êÿÿPK!Á¾NÆ xl/theme/theme1.xmlìYÍ‹7¿ú? swü5ã%ÞàÏl“Ý$d”µ¶ìQV32’¼%9õR(¤¥—Bo=”Ò@ ½ô $´éÑ'ÍØ#­å$›lJZv ‹Gþ½§§÷ž~zótñÒ½˜zG˜ Â’–_¾Pò=œŒØ˜$Ó–k8(4|OH”Œe nù ,üKÛŸ~rmÉÇØùDl¡–I9Û*ņ‘¸Àf8ß&ŒÇHÂ#ŸÇƒÞ˜+¥R­#’ø^‚bP{}2!#ì •J{©¼Oá1‘B Œ(ßWª±%¡±ãòBˆ…èRî!Úòaž1;â{Ò÷(~hù%ýç·/ÑV&DåYCn ÿ2¹L`|XÑsòéÁjÒ ƒZ{¥_¨\ÇõëýZ¿¶Ò§h4‚•¦¶Ø:ë•na PúÕ¡»WïUËÞÐ_]³¹ª…× T°† ºàE ¯A)>\Çf§gë× _[Ã×Kí^P·ôkPDIr¸†.…µjw¹ÚdÂèŽÞ ƒA½’)ÏQ «ìRSLX"7åZŒî2>€R$IâÉÅ Oв¸‹(9àÄÛ%Óo†&`¸T) JUø¯>þ¦#ж02¤•]`‰XRöxbÄÉL¶ü+ Õ7 /ž={þðéó‡¿=ôèùÃ_²¹µ*Kn%SSîÕ_ÿýýÞ_¿þðêñ7éÔ'ñÂÄ¿üùË—¿ÿñ:õ°âÜ/¾}òòé“ß}õçOÚÛ˜ð!‰±ð®ácï&‹aûñ?Ä0BÄ’@èv¨îËÈ^[ êÂu°íÂÛXƼ<¿kÙºñ¹$Ž™¯F±ÜcŒvw:ચËððpžLݓ󹉻‰Ð‘kî.J¬÷ç3 WâRÙ°eæ Š‰¦8ÁÒS¿±CŒ«»Cˆå×=2âL°‰ôˆÓ%Cr`%R.´CbˆËÂe „ÚòÍÞm¯Ã¨kÕ=|d#a[ ê0~ˆ©åÆËh.QìR9D15¾‹dä2rÁG&®/$DzŠ)óúc,„Kæ:‡õA¿ ãû]Ä6’KrèÒ¹‹3‘=vØPsXÐa3Ëç¹ÑW"`•ìJ¬+ÈÎUõœ`e’ªkÖ)r—+e÷ñ”m°goq‚x(‰ߤùDÝJ]8åœTzŽMà5åä‹Ó)×è0’»¿IëYg—zî|]p+~o³Ç`_Þ=í¾|j ö·öÍQk‚¯eÎk™óZÆõöõAj™¼|Ê&ïòèžO¼±å3!”îËÅ»Bw}¼ÑŒ0¨ÛQº'¹jÎ"øš5˜,Ü”#-ãq&?'2ÚÐ ZCeÝÀœŠLõTx3& c¤‡u+ŸÐ­ûNóxÓNg¹¬ºš© ’ùx)\C—J¦èZ=ïÞ­Ôë~èTwY—(ÙÓaLfQuQ_B^g„^Ù™XÑtXÑPê—¡ZFqå 0mxåöàE½å‡AÚA†f”çc§´™¼Œ® ΙFz“3©™Pb/3 tSÙºqyjuiª½E¤-#Œt³0Ò0‚á,;Í–ûYƺ™‡Ô2O¹b¹r3êkE"'¸&&SÐÄ;nùµj·*#4kùèÃ×x¹#Ô[¢S¸vIžnøwa–²‡D”:\“NÊ1‘˜{”Ä-_-• 4Ñ¢m+W€>Zãš@+›qt;Èx2Á#i†ÝQžNáS®pþªÅ߬$Ù½½:ç7¤XX/+މ€‹ƒrêÍ1›°‘åùwâ`Êh×¼ŠÒ9”Ž#:‹Pv¢˜džÂ5‰®ÌÑO+OÙšÁ¡ë.<˜ªö½OÝ7ÕÊsiæg¦Å*êÔt“é‡;ä «òCÔ²*¥nýN-r®k.¹ÕyJ¼áÔ}‹Á0-ŸÌ2MY¼Nʳ³QÛ´3, OÔ6ømuF8=ñ®'?ÈÌZu@,ëJøúÊܼÕfwÏ­.aBNãí±…ë5(m„ö}g÷Þ²cœ¤“ápa‘팭AÙ—|¼˜ŠLòƃ£Vìøõ¦…ßñØ/²Z°½ÑLb(#ÈyáT\ÊGTÿoÍvßÝ©RùuN¡Ž0 /Cä4ñÆ âOÑFì l Éúï°¤oÎøo8MXÛÊã{)öZñQPER§ä`¬ø !¢†*XçPb_,k·¼ćÁõÍ›ü=øØ©·åðŽœ´ù–¨ZñlüºªñÁCÙü?9BÉ "Ť ´Ñ5]ié¬ ‚e˜Ó½„‚>1Kv^è¿Ñ`Öýµ2aþ=æ xQ!—cPâÇÏÆÃ‹‰=OÉ%B׃&Àþ{ç¼hŽÌù=lî`…~ÚšR€`Žï>´”_° Ñ€â¼Â_ðØã“=Õ9 pªæ ë¤ßžszÿÌkÑ©ä¼ëò:@äô2~À çx!ÄóààY‚/é¬Èé÷럖›û2 ÑzÌny,Óõ&Hgwëͦ\FIt÷ç¤q¼¡m }¤ÏVNBs±§`O!>^l9LF÷‡tÛSß—É[ß§e:ñ=}e{‰Â8:Ÿ®¼P\Ë×îo§V ¦ÿDøÂDxùQüÿÿPK!’K`ÍX‹xl/sharedStrings.xml|S=OÃ0Ü‘ø–'¨Û ¡ %©J,-bŒÜä%±ð~Niÿ=¦,•vÌÝ=Ûïî’Í÷J’8Fçt2Sº2µÐmN?6/w3JÐs]si4äôHçÅõU†èI˜Õ˜ÓÎ{ûÈV(Ž#cA¦1Nq>]ËÐ:à5v^I6˜âBSR™^ûpïý„’^‹ï–ÿÈtF‹ E‘ùb –K²Ýú.c¾ÈØ~Ê}Š:¥ÞÀŸûçÇÖ*_´®ZT<&¼Á=:Zi\¢>_  &Çâ­²”ÇÍK¥Ù¬ïÈF kÁ]˜6õ¡ yaÙ¦;íchQƒ£›nèè˜hBd"žV&Q>‡¾$û¾›²â[I:7ÛàÞ×müŠW<%ŠSK#{¥Ï·ññˆiÈ¥òÈ.u*r…Ÿ©øÿÿPK!ঢ¾4#xl/worksheets/_rels/sheet4.xml.rels„Á Â0Dï‚ÿönR=ˆHS/"x•úkºmƒm²±Ø¿7Ç ‚·ÙöÍNyzƒ˜(²õNÃV ÈßX×i¸×—Í't Þ‘†™NÕzUÞhÀ”¸·E¦8ÖЧŽJ±éiD–>ËNëãˆ)±SÍ;R»¢Ø«¸d@õÅ×FC¼6[õrò¶o[kèìÍk$—~D¨`'Ÿj| ”©;J¤\¬y¡w2ÿª*ÕW×êÿÿPK!äeˆ« xl/pivotTables/pivotTable1.xmlœVÛŽâ8}_iÿÁò{:’p0 ÐÑ´ÔZµ¦{gžM‵N9N7hµÿ¾e‡@ ̨w_ .—OºØUó/‡’£w*&ªö<Œh•‰œU»þó-u&5ŠT9ᢢ |¤ þ²üý·yÍÞ…z#[N7´`S€¬jx¯T=sÝ&ÛÓ’4¢¦ìB–DÁRîܦ–”äÍžRUr7ð¼Ø- «p‡0+³Ï€”DþÕÖN&Êš(¶eœ©£Á¨ÌfO»JHÍo²>Èà’eR4¢P䊢`½á燮¤ïLG  ä¬eùÿQ<±3 WÎhÆÎ4ÜŒ©7ö¢4Y…£É?U¤/ç€ebóñ#R×üøG[n©L»-0äÁˆWBæwÄ©¨Ôî QŠÊêFžp¶«JzçÄ–«ýWÊvû šQNY“Z§t¿ÞBÒQ[ƒ˜æßûZ‰!ʬúF I›½ŽóygÊ MZ%:*Êà2EËÉ*õƧP( Ë ®`Y•YÑ*ÎtÝæé{ä̺l¹b5§)£ ‚i¼ÁZp­á.»:7&”‰VóŠÀ„)#6Ñ2_³Ù‹„ÃiMD;|>ŒOt8aëm½Bm©_M† ?®ÏÚ3Ï µgAúöÞÈÒ´0ÇÖ–EejmYм…gш‡–c6#KÏ·ì¶ÏÖ¹à YÊiA B´I×äþ/Y³28È™•qô™«,ÝK*íý"?–Wv¬8ùVp­°ÿ"áV”, Ü»uÈ®I[ñB÷¿EÜWý ׺ÌO/޾o}•ÛéFÔòëBþœeÑ,çR|Ø×Ýó…~côU5QvÏ:FýixË Ùåü`ÊxÃ'z?ÝwV½Àän(0”焞 †{mÒØYÎ3Á-‹šÓæúå\?à·Nœ¥§Ž”@ß';ŠD^iM8z¦ÕNíá©äЙ 5íV Eà1#*F[Òt®QÐ+ÍE/4ƒ‹ÝÓý2«:rúTbØ ðYw:‰N>TA÷ŠÃ!MhX$¯9=×ÜII³¸†ø«Sz©Zoy2Å]—/¯—YRäp±K³´þlœêZž,¿ÏEï2àýAÜ8Ñ>Jø³áßi·i®+;åiRUq¨ ðlò˜Uú˜qÒyRùOrC\³¤o)+àÕ•ýc!‘yç˾:s~ÐÙ¢sÆÒU._ÓýZÿ7 -âÚOÑ, íÇÙƒçZ³‡y¸y¾cùöv9ÿé›Õ>… 3VZIký,ŸI ››UÓ@¥ô½ê}×êx÷;ÍhRSØ„èëÏ]Q¼0ÃopÉ—UcÀ\ÆI¾Ñ'šeký+óêŸfö¶0»=úßÛý¢¦§-µ]\ѧ"û;Ý×'ØÎΞâ׬þ­xÿJÓ㩆« àΚg¹ÿ i•@×B0†Ý1 ã:Þ¬Êâ]ƒ`‘\bvœÈÒX¸Y%ÌôlÁU¼Þ6þÊ|ƒP=ö±@Æžú±d0”@"ƒ[ ´e0’@GŸ%Ðí@hwÜ¡ã&sÛŽ;™#ò¸@ìí&_Žk r!ˆo«ÿÁ9fbµ~½k4;8“Ùí0; Ä윖Ý5ÇM³„vN }P…[3´<~åúYŠÆû~aÝ;¨ƒí0u ÄÔÝ–:BØW|Ë Ãñë®k¡Ãñ,í]%Õy~Y°&+ø Ï9Ù¹aKÕ¼€W›AÕýѪ·fhy$vñ•DH± TæÞä†ÛáDH NÄ¢MBÀ@sj+-ˆ„'•¬´ÿY˜Õ“É‚í0Ù>h£þ{ò8YÜàü2TÎm  ‘ðƒi)´ªLN½Eí0Õ>¨Põ¿O•_&Þ†fâ ¯î— ÜAl‡‰÷A…x ˆx‚s€ 3º—TûHøQ'¶ÚU&e¦ë0&Ë\u¨ÂP&_œîÝP  çmw]ÑÂQŠ+…ÐK 4·8YzIzëæêš|ŸTPÆçX ¬»±ðâkˆ«Ü:ó”£,1Tç{4]2ªòha@¤½RQ!xaɱm‡`á%G=ÔrHC)¸G˜‘Qe&¡j« …ïѰª¡¼¸1ÓZ;µ„cH+VÝSÔ¹Gž1㑳ÞGÕ…æðè?ÖB—ÝRâK“8ë78š) ŽÜ#á˜ñHBú¨š¡¯Ò_âò˜ž+-£(e@S”üMTó½..ÍUL»¢®‹¼ýu‚W³^+YÜ4EQ·?Øë°îeïæÿÿPK!0=?î xl/pivotTables/pivotTable3.xmlœVQo£8~?éþƒåw N (ÉŠMжRuªv{{+LbÁȘ6Õéþû !dWí½„Ì0|óyüyÆËOÇB ¦j.Ë&wF¬LeÆËý ÿùœ8!Fµ¦eF…,Ù ¿±ZÿþÛ²â/R?Ó`[–ó’k@VÖ+|кZ¸nXAë;Y±ÞäRTƒ©ön])F³úÀ˜.„;ñ¼™[P^âaQ¤ï)¨ú»©œTÕ|Ç×o £"]<ìK© ¿>ªðQ]4¡ 2¦0â@FU"#dDƒŒx3‘Õð§þñg‰€â~%ÿƒyÇŠ©×K%_Ç*'17G«W¥ÛÇØð‡+ ¯—G+AÐ,üE/š]°N»WC‡Ý.ë@Ày¯`Ô@âŽIió¬—©¿ h÷Òícløˆ -à‡Þä:>ýI걩Xïíº~ ³•î’9‚%~VîõáGQ@³Ðÿ¡éÔÍNKM¡Ð6£­Û¶f› ±LҮøçÌÝѶcø›~ì¡ÌåpÞXç£éï vÛ µM°m¿F² ½KD}ÓŠW¦IÃ(ê¢.]´ÖðqS˜«ƒ9®ì¨kmŸ¨QÜŒÈÙä> ¶Ä 6ñÄñÓhê„÷‰ïl?'ÁÆ üi´Àˆ´‡Å‘øÿo<{‘µØaâ/n^N8‘5”íµ7¸õÿÿPK!S„x.ݨ xl/pivotTables/pivotTable2.xml¤VÛnÛ8}_ ÿ@ð]‘hKò¶ ŲÐÁ"h³ÝÇ‚–(›XJ(*±QôßwHɶ|IݾęáðÌípF³Ï»B ¦j.Ë9&wF¬LeÆËÍÿõœ8cŒjMËŒ Y²9Þ³^|úcVñ©ŸéZ°˜å¼ä€•õoµ®¦®[§[VÐúNV¬„“\ª‚jÕÆ­+ÅhVoÓ…pžºå%n¦Eú‚ªšÊIeQQÍ×\p½·XéôaSJeâ›ã:ïÔpÁS%k™ë;režó”]ÅG|W±nªPjÚðlŽ®Vñè> CÇ—'Ž|ÏGÁÐIV!^@î½8ü…QI âéX°!F)…Ú<Fõ¥U%ö6Åš©¤­ÑC¬ú^ªì†:‘¥¾²}¢Z3U^é#Á7eÁnÜø›gzû…ñÍö„F0ʨ¦KZ™–Îñw*h:j*P³ìû+!T™—_Y®X½5u>ž@~MÍ¢FË6mɸ\³âIñR?s-t)á–—kk -¸áXvÿÇœ•‹Fh^ –p&²„ È =¼˜ ™!€Šås §«F9Wµþ¬cê«|µVeð¬bÐÙÅR cá.Zž[5Jecâ K«FtÇÁ¯ù 0ðZ¶ò5pÝDb2>Þv ´3‡€mN`YÐ3–SÈÌœ»ö:üž¼yî¹:‹´Ãï.ØLš¦]žb«€™í$­¦ý÷c MÚI4|ç|ç;û0»y¬Jë@…d¼Îläx¶EëœoX½ÍìßW“ͤ"õ†”¼¦™ýD¥}3ÿøaväâAî(U Ô2³wJ5SוùŽVD:¼¡5<)¸¨ˆ‚[±ue#(Ù´FUébϋ܊°Ú6S1ƒËé’çûŠÖÊ€ZüåŽ5²G«ò1pûf’óªˆ5+™zjAm«Ê§÷Ûš ².!îGÜzðÅðó{7íÿ/ô¸üÝ‚j Ýó¹Üã¯Úþ*¬5‘ôŽ—¿ØFí`¯Ì†d_ªoüø™²íNÁ¿„ª{eºyZR™C“k79/®VÅôfƒ#ízì !Ok*ÕŠi$ÛÊ÷Rñª÷×Ac(Ok kgŒ‘Ž6G­9¬½oì (ð"<$è@À¢ ߌéj‰À1ÓaoÆH; X¯F—Ó”5Ô×E W'õåAâw„…1!A–¯)îQ@¸>$(°áòžJ£¾ÔZ踫±{¦/1áÍiuÍömŠ%Qd>ühÁ¡ Å’ Ñ#Mõ©ùÚî‡m¯UZ·µ€ .áˆ:Ì1š¹8vòNåTNÃᡠޗУ]jÝ̆ë€]x4¸¥:Ž|ÆIÄ~”'zg  µF3кç â F£gÄI£›kúz  ¥GкçNymërk4 ÈIì‡8 Š£ Fÿa7šÖ=g€ñEŒJ;(Î2­_Àƶ—Ö½pã_¸1*CªÓ0}ö¹Hµ™‹¦Ù²¥_ˆØ²ZZ%-Ú©”…{ž²âžu±ž \ÁäêïvðÚG¡ý=š»à\õ7zö/’óÿÿPK!ñ^@z*xl/worksheets/sheet1.xmlœZmo£Fþ^©ÿñ=`ÞìØJr ਧªÒ©êËg‚q‚Î6.äNUÿ{g™Á/3ØË^Ôž“}†ñ³Ëì<;wŸ¾m7Ö{Q7eµ»·=gb[Å.¯VåîåÞþó§›[ÛjÚl·Ê6Õ®¸·¿ýéáçŸî>ªúkóZ­vͽýÚ¶û…ë6ùk±Í§Ú;@ÖU½ÍZø³~q›}]d«î¢íÆõ'“©»ÍÊõÕz]æEZåoÛb×¢“ºØd-ðo^Ë}Ó{ÛæcÜm³úëÛþ&¯¶{pñ\nÊö{çÔ¶¶ùâóË®ª³ç Ìû›f¹õ­†ÿ|ø?迦ß´-óºjªuë€g9ËéÏݹ›åOrþ£Üx¡[梁GWþQò¢ƒ/ÿè,øAgÓƒ3µ\õâ­\ÝÛÿzÑ, ü©ÆÑò& Âè&~¼ o¢Çtö”̣ċ¦ÿÙw«î°š•Uë{ûÑ[,#Ïvîºú«,>š“ß-ÏUõUŸá{&à¢)6E®"ÃÊàã½HŠÍæÞþÕ:Í?Wõ;¸t>Oïý?u1ü¥¶ž³¦HªÍßåª}…Í{eU¬³·Mû{õñKQ¾¼¶0:…¹ª`Y¬¾§E“C”ÇW_“Wð ÿZÛRí6²ì[÷ùA.='²­ç¢iŸJå˶ò·¦­¶ý7’¼îPw9|/÷¦ádꃓ+Âô» áóG¾7¤Ëásà{G’†øìÎmàOo˜½‹‹×ݨ4k³‡»ºú°`ÏÀ"5ûLe oÞÔ=€Úà=€ÅW—<ªkº+Á¸@y˜Ü¹ïpïs²ˆ¥…wn‘H ÿÜ"•Á¹ÅRZ„ æw˜$ÜãÓI^œßMhê]u“ŽqÜwfl"89Œ\Šãž3g¤ËaÙ¢aºjƒÜ“«tƒŽnè„“³ÎÍÇG=ÁÇaÛ1î@ìÀ}:Ìbg4÷—šÅŽú(Üéã’ Ùq»»”â(äÆhéV¢4óèBàxàðhÇñˆÓJqÜsn]ࢣ ‰r4Ý)Ñe±㸤‹ã¡3¿T)šÉÅjöÇír¶#gìgƒa‚£ß§ އb©qÜsŽqÛE̘èȪCÜØýxKKÍ0Æñ€o©Ç#g2?ûa,S4ãûˆéÂdnÀ}NÜY4Æ8ΓŽÊ˜ÆqŸï%0Ñ‘Ug‚Ñ+ ÆJz¦<#Çø<"¾ÝRä>T„´¤™„^—N¯#ñ0Œ=ø"Ó° gäæ@О‰ ‚±ZçP®32¦é ©+HaQ„tÊâ™È"+ÒâVÇH?\¡Ù‰d'…]ñӯЉ‰ †‰ã[ ^Ô<qÞ#@l¼”€5>ÕÃKkl"ˆ)"?[Æ ìH¼"â³Ié 8më?€>¸MtÒë…ŸT ‰í!‰ðT/C<ycÌ),ŠcBˆ'd7:èy"4SñÓåEßD4ÁçÀÏ'HÑ$€Ý¦”†EŽ_*:º-ê›H&w:Ï2 d½Äj99'BÅN;£’²WP~°òIAyIÙ׎bÑqŽôqb¢ŸÐØJã4,OÝÈÐ&@fEÕFÒ†¶‰\ú(—3®Š1<£Ð°< 0#ªHÕ~ßkèëBÑlè I$à^Ý—uF`Â¥©i×ÙD2ý¾šd˜±Î$±¬½CÖ—¤%úíg"—þpIÃÚFÙ‰½H%o'}¡cÌØ¬$Œ ðù) ! à5FJÀ@Î!•¾‰T‚1’æDŒ ½8Ѧd/Õ]ÑÑ%éÀDÁËž¤ 9Q ¤ ôÏNµñÂI00ÑF0Æuæ{‘]_0!;™OùDñÓå“ÀDÁXÍa&:®ø¼\O˜òãRJ€¬Í!]mµ]ûúR4Z©Ó*úRà37»U)Ñ2B!U¯~|¯RVòà‹^Ÿ ¤0%`€ôˆ‚20ÑH0Æ}y½“Èz ²(&@ž¦?mˆ›HfÐW™"·P§•ÉÞãG™”€eQc&¢ Ƹìº }V„NßpåFÈóÀN¥óRv4‘ΠoÆŠMz©KWÈ*“©CèuÈD:”™h·Ïùx´ô}[‘YúVìõG)Kð¬ÍŽ¡‰–‚1ÊÒõ,&;ÑþI{–€ dµTüt{64‘V0FYâGä} @<:L àÝ{EG'J¡‰’‚ñpƒ‚€uî+Mñ­¯4é•fh¢¤`<|¾%@v$øÁ7%Às¼óçV¼‹¨øéÎŽ¡ÑƒÌ^X£«OqbpŠ:ËË:⯈÷:šè,+nòÁ7²©H€|ôM€¶©¨øi7€‰Î†—JSž6dc”}Kô¤M”6D¡” Ÿ^+Ѱ<ý _ö½ÜÐDgÁx¸ !@žà ÐuLS²“«â§ÝÂ&²^zøIÀ@ø_¨qSºBFÈnd"»`Œ’Å«Aä} @ËEÞ†Òù]!·_¯>‰ ÉøÒ4ÁC!Ž€âV¿§Ö)DHä3.á±5Q\J‰¶†ÖàŒeÏJRkˆ—i'CU9 wÁî[ð$y~#á@àK(¯âXP —ýoÑ2ØžŸ¶ÇÈÀZ}ޱqÖßR?8›†Š²c§€uöå`¡QrjS̹»OŽŽ:WrºTkXñº2 ‚’/ u¦oßÚ¸„Zu´ìÀRHºßÜÀ…È~„¬IÎxbÀÞ6,Nq‘’þÒ3Ö„J²aHžÂ©w»úúdààÒØ@X¸DÜ:j¿Wk“è âë)ñ‰aàp\rt#g/üŒ® 4…ežŽÝÞù·÷žÅaÿüŸÏâU‡NMç»þu»Uh£ñGÆè›óÏø·áΜô2©6µIPò Œ>&Ô=¿ejú"«Úø”gÏk¡ħá·éùÍ,ÿódMrJ¾ü+ýÿÿPK!ŒO#t±xl/tables/table1.xmlœ”Qo›0…ß'í? ¿»Ø`ÀŽšTl©R5Mk§=»ÄI¬FÆiSMýï3I–¦í6M{ƒküùÜ{¾¼Úumô Ýhl?øH÷]š~=_ï$¤ ½ê—ªµ½žƒ'=‚«ÅÇ—^Ý·: »ûq6Þ³8›îÔxa݇••uòáÕ­ãqpZ-ÇÖ¾kã¡<î”éÁ0ëštÊ}ß°±Ý ¼¹7­ñO{ˆºfv½î­›TÍÁÎE;—þ‚ïÜ;xggG»òÛÕÊ4úFLb§Ì4šTúŸ¬üÄ ºÌ2Ì:0Ýl;=þàB–‚Ñ ŒrXÖ„ÂRÔæW’£šQŸAÔ«.4w7õ˜€hiÆ¡UOŸ^^ÍA‰g" |o½jÇ/öñvcƒ½ÁÜMpA»Pªw«ëp4‹KµõVšÖk½Ú~’—à¬&1ÈëŠAÉ APPËjŠÓ:眠g/¡¨l»íú1jì¶÷s…öa9Ô_zOÍ'ŒÒœVfœSHR £8‡YdFê¼erjþVªnt¿ö›7'îÉa.Áù#9åXbF” ePJRÂ2RZT¢Â©¬3ñ†üÍ,žÒt'¨À"Í%Ä¢ °ÌI )G%$„ TV¨¦( äè×g\ø‹drN®PŽs”ˆ–AŽ'É$•°.‹’\d ’oÈ”œƒqID•03V—Aí4åŒ È‹$M /XEΦ<èÆ„?=XŸy7¼õO­¾îWö<‘ûâYo< WFœ4nôÓ÷Ñ›j7ê]iЧwfÐá ™¾:l:UÑ‹ŽÅOÿÿPK!ÔÞ$xl/pivotCache/pivotCacheRecords2.xml”•ÍŽÛ Çï•ú÷Å&»qg­*õZµÀ:$±jÀeß¾'žÙ$N¼–,a?fþóÁòõ¨šä ­«. £I¤®ÌºÖÛ’üýóó‰“Äy¡×¢1Z–ä]:òºúúeÙÖã¿‹j'ËÊØµKI»’ì¼oiêÂŒŽšVê0³1V >í6u­•bívRzÕ¤³,›§JÔšô„…Â0›M]ɦÚ+©}±²>øávuëÎ4UMÁ)aÿíۧʨ6 Þê¦öïJU-~mµ±â­ þí|¼¶SÕ•5Îl<  ´7ñÊ[ö’Zy¨;ÁIR™½öA÷‚¬–vµ<&‡’d$½=ÒÝ,ã”eøaÝò~ªxÛšø=>‚pú\|x€Ï_~ÜÍ£GüÙ™1Š-æ1.‰Ä8ºM„c£«gEø¨ÅùÀmîX üèêIV æ3^|Žn}CBRü1ˆúÞÖà&1§£PñÔGQ~4¬× êx’ã‚2‡ 1î§ð]8=«$øä !þ“ò4÷u”b¨²>©!‹ê÷Èùx8`¡$î˜ š±µ;ÚrÀBß©4tÎþqrÀö>C3{”Ç +Mqe£63©ã E¨€9Å™åÀ&õ´Um>Þ†9tœGJŒ€•€5Òñ÷¢=ö•­Qá’èÞþ×Å=Ñ!Ò« }õÿÿPK!â+{Á32xl/pivotCache/_rels/pivotCacheDefinition1.xml.rels„ÁjÃ0Dï…þƒØ{-;‡PŠå¹çim‹ØZ¡UBü÷Ñ1¡…‡aÞÌ´»Ç2«;%ñ 4U Š‚eçÃhàÒ¿¾AIÆàpæ@VØuŸí™fÌ%$“¢ %ˆ)çø£µØ‰”Š#…â œÌE¦QG´WIoêz«Ó+º7¦:9éäPýKóÿloéÀö¶PÈTèèïœ÷XæÉrrRà˜FÊ~YMU¦ƒîZývµ{ÿÿPK!Ê‚a#Á32xl/pivotCache/_rels/pivotCacheDefinition2.xml.rels„A‹Â0„ï‚ÿ!¼»MíaY¤©‡Á«èx$¯mØ6/äÅ¢ÿ~sTö8 óÍL»¿Ï“Z(‰ç``[Õ (Xv> ®—ãæ”d 'dàAûn½jÏ4a.!}U(A Œ9ÇÖbGšQ*ŽŠÓsš1™Ñþâ@º©ë/žн0ÕÉH'·uyÄÒü?›ûÞ[:°½Íò‡ ýÂù˼3YNN Ó@ÙÀ›ÕTe:è®Õ/W»?ÿÿPK!ÞŠüìz 'xl/pivotCache/pivotCacheDefinition2.xml¼V[£6~¯Ôÿ€xçb0!DIVI&©RµÕjw»¯#œÄlmÒD«ýï=†Ü™Ùít¤- ŸóÏçfÏß]yé\¨T¬ ù¡ëP‘W§…ûç§7u¥‰(HY ºpoT¹ï–?ÿ4¯Ù¥Ò’Ÿé=2Á48&ÔÂ=k]Ï‚@Á"'ʯj*`åXIN4ˆò¨ZRR¨3¥š—A†“€&Üa&_ƒQ,§wUÞp*t"iI ufµêÑxþ8NäCS{yÅk€8°’é[ ê:<ŸíO¢’äPB®²¾>çÉY.+Uµ@AGñÙn$½0sב3V,\¹/¼Ó£¤•b}[¸¿R"¼ß‰dÔyÏ.Tkj)Ü T0FéÄÇI¦I#œB¶rˆ¬¦Åç>§ËÊþÈ™øÐ¹3ÛVb£žW²ØTÐPìVÎCò Þí¢lm<”mÅxå­ãyÙvµ×›i–m&_Ýå<7uñ±jdN}«é_•|hÓ «Ãû£ìzá®Ðìâi’áVsáBÝœ&”,ç…ùè`ÇhY('½ßö³#·ª¦9ƒ’uDÃw\ïa!è©3‘´ØkʹÐPzj]ñû…v€‘Qt.@­ %£†7D,ãžVëÒfõèž)-Þä÷Þ?A¿@.©0Z>k¦òªåÓŠwpþvPãå} 1Öç{Î_Ãò£–í`€)ñRغ@þÑð…΀HB}&e‰ˆ±odríåÔO3ûI‡¸#“IaßÁ®{›]öÂd?z‚5è%~6êY&Ð5Öw?±…¨¥¡ýÄ£^j½ú0Á¬ÇÖ²¡Sß‚†|ÛèilÞP{mv ZÿÉEZß~ìTGR?tð·ZåX²º¦òÇÖc_´{¡)4Õ“Ef|Ž%вé¿Ó>TÅí9uú ô}ÂQ–&6cŒÃ¶3»Ám&Èc³€ÚÐq4 ­Á°2ëA@¶€{Å †G¨çQÈ,¡%:2°Õ&ð_'«¢×7Õ‚b|µ“óדr¤½ð ßBÝÁ³œÓ«þMéößi$ƒ2’Õ6Zm½ gÈÃÓõÖÑ{x»ÎR¼ÛÄá®?»˜¼êþfAÖÝ—–ó+³—îb¦á€_÷Û² ^R[þ ÿÿPK!°ÓU{C$xl/pivotCache/pivotCacheRecords1.xml”W]oÚ0}Ÿ´ÿù½• èæI{¶S¢‘8r¢ÿ~Á†Üb{R%·æ~žsÏuׯ—ò¥n Um˜à3É*W»¢zß°ß¿¾?=³¨i³j—U%7ìC6ìuûùÓº.ΪýšåùSæJóT5vhÛú%Ž›î¦Ì®jYu7{¥Ë¬í~ÕïqSk™íšƒ”myŒ“Ùl—YQ1ëáEOñ¡öû"—ßT~*eÕZ'Z³¶«£9us÷VæSÜ•™þsªŸrUÖ‹·âX´Æ)‹ÊüåÇ{¥tövìê¿è»ãË8ϲȵjÔ¾å£Ø¦8ªV¤±–çâÚpåêTµ¶l»ÖÛõ%:oØŒÅÛuu=%üK^ðùõLß SÜYÞEo`¾nÜ05÷ÆÔœÐ4¸(ø¡«EŸ„ù›; ª`Î)¡'ã‡Z0 ÊS¾¦”:1)¹Kšsc`ú‘B"nИ æÀg«ÁgÙ'Bå™ /se‚SyØr225W7:›îãšIü¡¸X>8êñoS†ò'riåá°·w¦l¥‰Né Â.ÀjA$çÀÓ"yÔÔJÖÈHdä$G¨ °î{99Twuü¦ ÄW—[ÊñzOÐæo(e^ÆQ¸fHر6©‡ŠY!˜¤ Äé%ô(ë Ž¾È9#÷ƒoùéæî$5§ÄS@ÄO8Íõœ“fYŽxfÈ-AÂã±ÈÍ{€ÚÃ\R°”§Ží1«o(iäyiÜ?×2Ч° ž"ºcû¤ N\OƒˆÛ˜ø4qr¨j̚Р)/=Eþ`ÒD剘à¸#VÄr«¯î…“ŒÅ) z»gÐpÄ£“Mà¥â}ÛRcšúÁÆYÅáyxÁ 2Ç'â=­p7føp ,l¥Òô©u||ËSðJ+£66 øDñM´˜Äš¸Ë9 ô”×%Ò5†1ÛhY©/%úƒQ~ š³à#?0k™ç°¤¨‚óqD2ŒG¸H‹ ëoSvÁ1” @;‹IDð¯×Qöê@§ŒœJºcí;âŽÙ‚÷âà>X9›¦‰š´‹áóü±|yíª†R·»â€ŠLpÊ 0W™â˜—ÌHVrÎA†Gr»Ê’Y·ô[ßHÇ«—.ÿFW©DàCÒ¾ÒYyOŸÖ T$q‡$ YÇ÷t2¡Éô³ ñg¾ Ý_¨S”ÿÉŒNSšÞˆg@‘á‹RüÿÿPK-!*›RÒÒY [Content_Types].xmlPK-!µU0#ôL _rels/.relsPK-!+ö}‹3=0xl/_rels/workbook.xml.relsPK-!JRPP £ xl/workbook.xmlPK-!%º¥  í xl/worksheets/sheet4.xmlPK-!Žh#hnš /xl/worksheets/sheet5.xmlPK-!"è²ÄG)Óxl/pivotTables/_rels/pivotTable3.xml.relsPK-!"è²ÄG)Þxl/pivotTables/_rels/pivotTable2.xml.relsPK-! A êÄG)éxl/pivotTables/_rels/pivotTable1.xml.relsPK-!Çmƒ#¾4#ôxl/worksheets/_rels/sheet5.xml.relsPK-!Á¾NÆ óxl/theme/theme1.xmlPK-!L"Ò¨JŠ r xl/styles.xmlPK-!’K`ÍX‹ç#xl/sharedStrings.xmlPK-!ঢ¾4#q%xl/worksheets/_rels/sheet4.xml.relsPK-!äeˆ« p&xl/pivotTables/pivotTable1.xmlPK-!‚Žhá1º*xl/worksheets/sheet3.xmlPK-!0=?î 0xl/pivotTables/pivotTable3.xmlPK-!S„x.ݨ -4xl/pivotTables/pivotTable2.xmlPK-!È¡¸ú¾4#F8xl/worksheets/_rels/sheet2.xml.relsPK-!t¡EçH E9xl/worksheets/sheet2.xmlPK-!ñ^@z*Ã<xl/worksheets/sheet1.xmlPK-!¨œõ¼%#9Exl/worksheets/_rels/sheet1.xml.relsPK-!wÕÇÒ°6FdocProps/app.xmlPK-!ŒO#t±Ixl/tables/table1.xmlPK-!ÔÞ$ÂKxl/pivotCache/pivotCacheRecords2.xmlPK-!â+{Á32Nxl/pivotCache/_rels/pivotCacheDefinition1.xml.relsPK-!Ê‚a#Á32-Oxl/pivotCache/_rels/pivotCacheDefinition2.xml.relsPK-!ÞŠüìz '>Pxl/pivotCache/pivotCacheDefinition2.xmlPK-!°ÓU{C$ýSxl/pivotCache/pivotCacheRecords1.xmlPK-!TTÊcVb '[Wxl/pivotCache/pivotCacheDefinition1.xmlPK-!o½Þ1LuöZdocProps/core.xmlPK y]openxlsx/inst/extdata/ColorTabs3.xlsx0000644000176200001440000002361614155600363017447 0ustar liggesusersPK!$k6øi [Content_Types].xml ¢( Ì”ßJÃ0Æïß¡äVšlDdÝ.üs©çÄæt K““Ííí=Í6©›²Þ$¤Éù¾_¿C2¯“-! v¶`}ÞcØÒ)mg{™>ä×,Ã(­’ÆY(ØGçgÃéÚfTm±`uŒþF,kh$rçÁÒNåB##-ÃLxYÎå Ä ×»¥³lÌc«ÁFÃ;¨äÂÄì~EŸ7$ ²ìvs°õ*˜ôÞèRF"K«¾¸ä[N•é ÖÚãa0ÑéÐî|o°­{¢h‚VMdˆ²! ±2âÍ…ù«ss¾_¤ƒÒU•.A¹rÑP}©°ˆáiæÔvÇÝåOÅ“à’ÚëH-8ú—¡m²õCïmÚ)iêŸ8ö¶›Ix_êƒÂqùG‘n;ˆ4ß’$s ×ðÔ—.‰r®eõ½‹'ø¬½ãé}½ÿÿPK!µU0#ôL _rels/.rels ¢( ¬’MOÃ0 †ïHü‡È÷ÕÝBKwAH»!T~€Iܵ£$Ý¿'TƒG½~üÊÛÝ<êÈ!öâ4¬‹;#¶w­†—úqu*&r–Fq¬áÄvÕõÕö™GJy(v½*«¸¨¡KÉß#FÓñD±Ï.W ¥†=™ZÆMYÞbø®ÕBSí­†°·7 ê“Ï›×–¦é ?ˆ9LìÒ™ÈsbgÙ®|Èl!õùUSh9i°bžr:"y_dlÀóD›¿ý|-NœÈR"4ø2ÏGÇ% õZ´4ñËyÄ7 ëÈðÉ‚‹¨ÞÿÿPK!TÜÛ xl/workbook.xml¤Umo›0þ>iÿñ‚y A%SS‚©­ª5k?V˜`02&¡ªúßw†@“fš¢%6¾;?÷Ü‹Íå¶È•-á5ee ¢ CUH³„–›@ý½Š4OUjËç¬$úJjõÇìû·Ëã/kÆ^(ë@Í„¨|]¯ãŒ¸¾`)A“2^`K¾Ñ늜Ô!¢ÈuÓ0\½À´T{ŸŸƒÁÒ”Æ$dqSRô œäXý:£U= ñ9pæ/M¥Å¬¨bMs*^;PU)b¹)ÇëÂn‘£´~.ü‘ƒ9xÕ‰«‚ÆœÕ,­÷¤OâG†ŽÐQ ÚÓœ‡dëœl©¬áÈŠ»_dåŽXî2þ Aku½âCò¾ˆæŒÜLuv™Òœ<ö­«àªºÃ…¬T®*9®Å"¡‚$:%Û‘#oªyCsК¶‹&ª>Ûùž+ Iq“‹4ò'Ãu§¦#-[îɾ\÷exðÜCɾ;—€ï=¿-BÛ°¬ÐÒsbhöÄ@šg-®´©cFÞÕUä9®õ©á®3܈l’Ä TøŸ¨nq;há74ùðÿfìMΟ†A÷.ã‡÷‘’]ý¼\*í-¶ëBy=xßuâ'šˆ Òa!ȆÒË~ºÉ€«‹ áXÐ-Yá5XIî¦$¨GÄžX&‡#bú³î¶†Ý¬”]…y'‘)'Ü—ø2A2°CÛë óCc8µ£±ùÙ8£IBàÐVw÷ (ë 7[r³>ЋqCçÈ©£4E†éI ÒŠ›Zt³Òp i˜;Þܰ¦¦fG(Òl45´ùܵ5'Œ,g‚Âë…Év·ªßJÄô‹‡Åӻ݋†Ã­ Û­}9F{é(L{Á>ÅG·Žÿ+ìú¾ßý/ÃøjääLãèñLÃë»ÛÕí™¶7‹ÕóSÔÕæ¯ÑêP¨ÛP}øŠÍþÿÿPK!Þ ý(Ôxl/_rels/workbook.xml.rels ¢( ¼“ÏjÃ0 Æïƒ½ƒÑ}q’ne”:½ŒA¯[÷&QâÐÄ6–ö'o?“Cº@É.¡ƒ$ü}?Чýá§ïÄjU%)´¥«ZÛ(ø8½><ƒ Ö¶Ò³¨`@‚Cq·ÃNsüD¦õ$¢Š%†Ù襤Ò`¯)qmœÔ.ôšcéuyÖ Ê±´h©­3"à¯Û2ß9Õàd4ËÒtÎŒP-= wÃÖµ’ðÕÊÞ@NZÌß7ªó#ÍÈ{pF¸]ßM¤5"6J«ð:@)1²x޶։ƺ|&$9:|3ü¦c˜aÿ&’QÒYoë ™r¾-ÿ=0!ϤÛúïÂðs°Wñ/¨ì})ñüÌÊ.°é;aó3,—+zU•ôoúöLpåQ¤1ÚþÑÕ²Rxñ*â .ég^|É([-‡þù¥àà¯tÛqcí.ž1LŠdl "pÙô.éšcGÿ˜¨"‰×úHø»#Ô¢×amõoU…‡…'³,ÿ´àYNGë{øjÛ4ç.­FJb„G4Χ Ô']£ª âR"{¬ƒ¼ANîÑmv…@}D$Ù"çù<ær `Cÿÿÿÿÿ²)ÎHM-qI,I´³)Ê/W(²U2TR(.HÌ+²¬Œ”ìl’A‚ކ@V™¡~™~2TÔ "jÕš7È«A #ËìŒÑ ‚ˆš ¤pÿÿÿÿLŒA Â@ E¯r;PD„NWn]õ£¦`mBš*ôôN…‚»ÿÞ‡×hèšlài†‘z'ã!ïÛEöˆpwyí”)=È6ªzß¡j›­Û‘/ š”¬ã•"žĘ&OÎ2ET1·ÄŽ‹_¥ãE9b›ÌùþgJ¶úˆ=çLäíÿÿPK!¤‰å¼·0xl/worksheets/sheet2.xmlÿÿÿÿœ“]oÛ †ï'í? t­e§ÚÚE«´‹j[»Þb|l£€ñ€|TÓþûNãFÊMTdcïyÎ{0ÎovF“ 8¯lWP>M(NÚJuMA-'W”ø ºJhÛAA_ÀÓ›ÅÇùÖº•oABç Ú†ÐgŒyÙ‚~j{èp¥¶Îˆ€C×0ß;Õd4K“ä’¡:º'dk%áÎʵ.ì!´èß·ª÷š‘çàŒp«u?‘Öôˆ(•Váe€RbdvßtÖ‰RcÝ;>’ì^)Þ‡4ÃüI&£¤³ÞÖaŠd¶÷|Zþ5»fBޤÓúÏÂðs°Qñ¾¡Ò÷Yâó‘•¾Á.Þ »aq»\¶VUAÿ&¯m‚O»d’ðصt‘çäÁ-ò Ê[«­#®) ºÄ•”-r6j*…Ç!nqPô3Ͼ¤Q1žlýÑ;AâOÐ  !NI°ýw¨Ã-h]Ðç¯KœŠÇ»´vcïQ•DGCLL"dPxÕ/ïPïÿ ‰Ÿã`tƒ.M,‡ŸâÁ‘ j±ÖËû­ªÐ¢>¥óOW<ÓÃê»ýªi.Ïþÿÿÿÿ²)ÎHM-qI,I´³)Ê/W(²U2TR(.HÌ+²¬Œ”ìl’A‚Ž@Ñ[¥b ¿ÌÎÀF¿ÌÎF?*ç„,g—Óš7Ô«¡@Q¸¡Fh†"Ë£ªp5ÿÿÿÿLŒA Â@ E¯r;PD„NWn]õ£¦`mBš*ôôN…‚»ÿÞ‡×hèšlài†‘z'ã!ïÛEöˆpwyí”)=È6ªzß¡j›­Û‘/ š”¬ã•"žĘ&OÎ2ET1·ÄŽ‹_¥ãE9b›ÌùþgJ¶úˆ=çLäíÿÿPK!€ßÎ>xl/worksheets/sheet3.xmlÿÿÿÿœÓKo£0àûJý–ïÄ@’¶ *4EÛÛªj{w̬øAmçQ­ö¿ï@”´R.Q%ËßÌàñìá ÙóÒš‚&£˜0ÂÖÒ¬ úöZE÷”øÀMÍ•5PÐOðôa~ók¶·nã[€@P0¾ m]Θ-hîG¶ƒ3uš|ukæ;¼iÅÒ8¾ešKCBî®1lÓHK+¶L8"˜¿oeçOš×pš»Í¶‹„Õ+©døPJ´ÈŸ×Æ:¾RX÷!™pA¯ïñ)Ìðý"’–ÂYo›0B™s¾,?cãâ,]Ö“L˜ƒì7ð‹J–R2=[é6þ!v{Æúßåò­¬ ú÷îîq‘ŽË,ZTeMªx-Ê,î—Õøi²|J²xúÎgµÄî«"š‚.’¼L(›Ï†þy—°÷߯¤oÇ•µ›~âÃÄ(xP úÆ ;x¥ Zbeþc0qˆ ;‹ßÇ'½ø#54|«Â‹Ýÿ¹nž–).ÿÿÿÿÿ²)ÎHM-qI,I´³)Ê/W(²U2TR(.HÌ+²¬Œ”ìl’A‚Ž@Ñ[¥b ¿ÌÎÄF¿ÌÎF?*ç„,g —ÓšT…°ÿÿÿÿ²)HLOõM,JÏÌ+VÈIM+±U2Ð3WR(ÊLÏ€±Kò À¢¦J Iù%%ù¹0^FjbJjˆg¬¤–Ÿ_ãèÛÙè—çeg¤¦–ØÿÿPK!Á¾NÆ xl/theme/theme1.xmlìYÍ‹7¿ú? swü5ã%ÞàÏl“Ý$d”µ¶ìQV32’¼%9õR(¤¥—Bo=”Ò@ ½ô $´éÑ'ÍØ#­å$›lJZv ‹Gþ½§§÷ž~zótñÒ½˜zG˜ Â’–_¾Pò=œŒØ˜$Ó–k8(4|OH”Œe nù ,üKÛŸ~rmÉÇØùDl¡–I9Û*ņ‘¸Àf8ß&ŒÇHÂ#ŸÇƒÞ˜+¥R­#’ø^‚bP{}2!#ì •J{©¼Oá1‘B Œ(ßWª±%¡±ãòBˆ…èRî!Úòaž1;â{Ò÷(~hù%ýç·/ÑV&DåYCn ÿ2¹L`|XÑsòéÁjÒ ƒZ{¥_¨\ÇõëýZ¿¶Ò§h4‚•¦¶Ø:ë•na PúÕ¡»WïUËÞÐ_]³¹ª…× T°† ºàE ¯A)>\Çf§gë× _[Ã×Kí^P·ôkPDIr¸†.…µjw¹ÚdÂèŽÞ ƒA½’)ÏQ «ìRSLX"7åZŒî2>€R$IâÉÅ Oв¸‹(9àÄÛ%Óo†&`¸T) JUø¯>þ¦#ж02¤•]`‰XRöxbÄÉL¶ü+ Õ7 /ž={þðéó‡¿=ôèùÃ_²¹µ*Kn%SSîÕ_ÿýýÞ_¿þðêñ7éÔ'ñÂÄ¿üùË—¿ÿñ:õ°âÜ/¾}òòé“ß}õçOÚÛ˜ð!‰±ð®ácï&‹aûñ?Ä0BÄ’@èv¨îËÈ^[ êÂu°íÂÛXƼ<¿kÙºñ¹$Ž™¯F±ÜcŒvw:ચËððpžLݓ󹉻‰Ð‘kî.J¬÷ç3 WâRÙ°eæ Š‰¦8ÁÒS¿±CŒ«»Cˆå×=2âL°‰ôˆÓ%Cr`%R.´CbˆËÂe „ÚòÍÞm¯Ã¨kÕ=|d#a[ ê0~ˆ©åÆËh.QìR9D15¾‹dä2rÁG&®/$DzŠ)óúc,„Kæ:‡õA¿ ãû]Ä6’KrèÒ¹‹3‘=vØPsXÐa3Ëç¹ÑW"`•ìJ¬+ÈÎUõœ`e’ªkÖ)r—+e÷ñ”m°goq‚x(‰ߤùDÝJ]8åœTzŽMà5åä‹Ó)×è0’»¿IëYg—zî|]p+~o³Ç`_Þ=í¾|j ö·öÍQk‚¯eÎk™óZÆõöõAj™¼|Ê&ïòèžO¼±å3!”îËÅ»Bw}¼ÑŒ0¨ÛQº'¹jÎ"øš5˜,Ü”#-ãq&?'2ÚÐ ZCeÝÀœŠLõTx3& c¤‡u+ŸÐ­ûNóxÓNg¹¬ºš© ’ùx)\C—J¦èZ=ïÞ­Ôë~èTwY—(ÙÓaLfQuQ_B^g„^Ù™XÑtXÑPê—¡ZFqå 0mxåöàE½å‡AÚA†f”çc§´™¼Œ® ΙFz“3©™Pb/3 tSÙºqyjuiª½E¤-#Œt³0Ò0‚á,;Í–ûYƺ™‡Ô2O¹b¹r3êkE"'¸&&SÐÄ;nùµj·*#4kùèÃ×x¹#Ô[¢S¸vIžnøwa–²‡D”:\“NÊ1‘˜{”Ä-_-• 4Ñ¢m+W€>Zãš@+›qt;Èx2Á#i†ÝQžNáS®pþªÅ߬$Ù½½:ç7¤XX/+މ€‹ƒrêÍ1›°‘åùwâ`Êh×¼ŠÒ9”Ž#:‹Pv¢˜džÂ5‰®ÌÑO+OÙšÁ¡ë.<˜ªö½OÝ7ÕÊsiæg¦Å*êÔt“é‡;ä «òCÔ²*¥nýN-r®k.¹ÕyJ¼áÔ}‹Á0-ŸÌ2MY¼Nʳ³QÛ´3, OÔ6ømuF8=ñ®'?ÈÌZu@,ëJøúÊܼÕfwÿÌñÅþÄj¾—ñ9ê ?h×Aäøb?y¥¢Ôç`­{²0^°¢½á9þù°ø0[>”q0 Ó`rË’`–,–A2¹_,—å,ŒÃû_£»þ†›Þ=MEÆÜ xÌPìPâêâËñhÓÓïfh¹Ïâ4ü˜DaPÞ†Q0Ié4˜¦·IP&Q¼L'‹‡¤LFÜ“W¾!‰¢þmñ䓹㒠®NZ{A$Øþ¥rR‚\Þýâ7ÿÿPK!;—kó± xl/sharedStrings.xmldÏÁnÂ0 Æñ;ÒÞ!ø);TJÒOÀ ´†FjìR»ÞžLÓ„Ôÿ?ë;Ø5<˜;N’˜<춤–»DWß§ãæ Œh¤.Lèá‰MøX95eKâ¡W÷ÖJÛc޲å©\.<å¨%§«•qÂØI¨y°ŸUUÛiy&õPƒ™)Ýf<üup’‚ÓÕàìOüÂy íºf^Z_lýF[Þ /ÿÿPK!a43ЉdocProps/core.xml ¢( ŒRÁNã0½#ñ‘ï©“P`eµAZ'èŠÕÞÌxÚzIlËžú÷ëÄ!mW¸ùÍ{ó4ó<‹›¶ÉÞÑmÍ’•³‚ehÀ*m6KökuŸÿ`Y i”l¬Á%Ûc`7õùÙœëñÉ[‡ž4†,:™ À-Ù–È Îl±•a&’kë[Iú wÞäyUW¼E’J’ä½aî&G6Z*˜,ÝÎ7ƒŽ ¶h(ðrVòƒ–зáˆ9R¶šö.î4Ž{ì­ ‘“ú#èIØuݬ»ƈó—ü÷ãÃó°j®MŸ « ij°^ðÃ3¾Âîõ/¥ò"%YŸˆ ĘßpßY¯BdNPìQÀkGñóRßI!ªè1þæZ£ú¹Oÿ×¢Ìã»î/ HÁYš US)³OæåâönuÏꪨʼ,òêjU•b^ˆùõŸ~ó“þ>•ThÇ™¾éX‰j.ªË#ÇOƒz8DI¸±~Ü&4ܨ¡x$Ï$i7&ö‹Òñ%×ÿÿÿPK!›]‹ïŠdocProps/app.xml ¢( œMOÃ0 †ïHü‡(÷5HšÒLãK\&8ŒÝ£Ôí"Z;JÂÔþ{ qäfûµ¿¶ÙŒC/Nr ¬å²ÒRzjvµ|Ý?.n¤ÈÅaãzB¨åYnìå…yI!•Y0s-¥ÄµRÙap¹bYi) ®pš:Em<Ü“‹ºÒz¥`,€ 4‹8噸>•ÿBòŸþòa?E6lÍ6Æ>xWøJ» >Q¦¶ˆ‡ÑC/ž±Fýî1;‡®ƒdš£;¢Ã‰KsôÄøÄÓo·. r&ίµËU¥¯µþÚò]3êç‰öÿÿPK-!$k6øi [Content_Types].xmlPK-!µU0#ôL ¢_rels/.relsPK-!TÜÛ Çxl/workbook.xmlPK-!Þ ý(ÔÏ xl/_rels/workbook.xml.relsPK-!\™i»Q xl/worksheets/sheet1.xmlPK-!¤‰å¼·0xl/worksheets/sheet2.xmlPK-!€ßÎ>ïxl/worksheets/sheet3.xmlPK-!Á¾NÆ cxl/theme/theme1.xmlPK-!®4r—= âxl/styles.xmlPK-!;—kó± ¤xl/sharedStrings.xmlPK-!a43Љ‡docProps/core.xmlPK-!›]‹ïŠG"docProps/app.xmlPK l$openxlsx/inst/extdata/gh_issue_288.xlsx0000644000176200001440000002157714656134061017712 0ustar liggesusersPK!A7‚Ïn[Content_Types].xml ¢( ¬TÉnÂ0½Wê?D¾V‰¡‡ªªº[$è˜x’X$¶å(ü}'fQU±Á%QlÏ[&ó<­Ú&YB@ãl.úYO$` §­rñ=ýHŸE‚¤¬V³‹5  ïïÓµL¸Úb.j"ÿ"%5´ 3çÁòNéB«ˆ?C%½*æªùØë=ÉÂYK)ub8xƒR-JÞW¼¼Q23V$¯›sU.”÷)±P¹´úIêÊÒ ]±h:C@i¬¨m2 3† ±1ò g€/#ݺʸ2 ÃÚx|`ëGºã®¶u_ü;‚ÑŒU OÕ²w¹jä ó™sóì4È¥­‰-ÊZeìN÷ þxe|õo,¤óÏè ž1ñy½„s†iÝÞºíôs­è ñôV7ðû”ŽÔ88œÚ—wa‘®:õ  ìCrhØöŒù«ÛÝ¢Aà–ñþÿÿPK!µU0#ôL _rels/.rels ¢( ¬’MOÃ0 †ïHü‡È÷ÕÝBKwAH»!T~€Iܵ£$Ý¿'TƒG½~üÊÛÝ<êÈ!öâ4¬‹;#¶w­†—úqu*&r–Fq¬áÄvÕõÕö™GJy(v½*«¸¨¡KÉß#FÓñD±Ï.W ¥†=™ZÆMYÞbø®ÕBSí­†°·7 ê“Ï›×–¦é ?ˆ9LìÒ™ÈsbgÙ®|Èl!õùUSh9i°bžr:"y_dlÀóD›¿ý|-NœÈR"4ø2ÏGÇ% õZ´4ñËyÄ7 ëÈðÉ‚‹¨ÞÿÿPK!>”—óºxl/_rels/workbook.xml.rels ¢( ¬RMKÄ0½ þ‡0w›vÙt/"ìUëÉ´)Û&!3~ôß*º]XÖK/o†yïÍÇv÷5âõÁ+¨Šzlï;oÍóÍbí­‚Gìêë«í šs¹>’È,ž8æø(%‡£¦"Dô¹Ò†4jÎ0u2jsÐÊMYÞË´ä€ú„Sì­‚´·· š)fåÿ¹CÛöŸ‚yÑó I< yÑèÔ!+øÁEöò¼üfMyÎkÁ£ú å«Kª5=|†t ‡ÈG)’s墙»UïátBûÊ)¿Ûò,ËôïfäÉÇÕßÿÿPK!y êÔxl/workbook.xml¤SËnÛ0¼è?¼ÇzÀÁRÐÆ-êK`4irñeM­,Ö|¨$UÛß•T%A}IÑ‹–K®†;3ÜåÍI+ö —Ö<™Åœ¡¶’f_ðï_®>pæ˜ ”5Xð3z~S¾·/¬µ fáø\èô··½UJÕ[ükÕÿÿPK!;m2KÁB#xl/worksheets/_rels/sheet1.xml.rels„ÁŠÂ0E÷þCx{“Ö… CS7"¸UçbúÚÛ—÷ý{³eÀååpÏå6›û<©f‘,Ôº…äch°ð{Ú-¿A±8êÜ -æÙI‰y0Éù‹Ьªjmò_´/Nµï,ä}Wƒ:=RYþìŽ}¢H9ÈEíò€bAëwöžk}¦mÌËóö ÿÿPK!ƒ¯êããxl/theme/theme1.xmlìYÍn7¾è;{O,Ù’c‘K–â6qbØJŠ©µË˜»\”ÝŠäX @Ñ´è¥@o=m$@/éÓ¸MѦ@^¡Cr%‘Û‰þÅl‰ûq8œŸ3Ü«×d !)Ï›Qõr%B$ù€æI3ºÓë^Z‹T8`ÆsÒŒÆDF×6Þï*^W)É‚ù¹\ÇÍ(UªX_Z’1 cy™$‡gC.2¬à«H–ÜŒ--W*«K¦y„rœØÛÃ! êi‘ÑÆDx‡Á×\I=3±¯Eo†Áª!DzÍ:ĬÁ:~Ô#T„– 4£Šù‰–6®.áõrS æ:óºæ§œWN,›5EÒŸ.ZíÖW¶¦ò €©y\§ÓiwªSy€ãvjuqeÖºkÕÖD¦²çe·+õJÍÇ;òWætn´Z­z£ÔÅ 5 û±6‡_«¬Ö6—=¼Y|}_km¶Û«Þ€,~uß½ÒX­ùxJÍæÐÚ¡Ýn)} r¶„¯|­RÂg(ˆ†ité%†Aå‹pÿBߣ|—@ÎÌ“è;þ~ÇßÑž¿åòųöŒ¨Ãguº©Ú³…Eû2¶¯ÆŒÜ”¦n—p< º0h ÓUN›¸"…e‹àáÍ$¸úˆªt?Å”øUÓ‚&²HTp •¿6Í09!Û´· {Ó©Öuc™CbµÃvxÅíU§bL皘~x²ÐŠpÖÅV®¼ÝbU«ÕB³ù[«Õ )z[›n|8¿5œZêÕXy® ´îÐ aFÚî¶Ÿ¸E/}¡.’)ÒGzßó>ª'MbeFé¾ó9«5´Ø·Xí,Nr—«-Xnâ½·ñÒ¤ÙžyIçí‰td¹›œ,GGͨQ_®G(ÆE3B› ³¼.u©‰YwU±6ìOMf®3o6ÂaY…›k÷¹ {‰= îס ûP ÷!†ô¸ÚÓÖ6|r.“νP38;ŽY‘â’nuŠN2ÙÂMOu0߬¶F=Ø[Pw³¹óoŤümÅ ãÿÙVôy+ín–F:_›*åÀBEJ㮀k5Ã-p= !¨à~ÛüäPÿ·9ge˜´†>SíÑ ç‘J!»@K&úNV-Ï.+’•‚LD9êʪÝ'‡„õ4®ê³=B)„ºa“’ îdüùßË ê'ºÈù§V>6™Ï[èêÀ–Xvþk‘šCúÎQО}¦¦šÒÁkösµ–±æv¼\?óQ[À5Ü.+ˆ‰˜Š˜Ù—%ú@íñ=àVï>ly… ª/ÙÂi‚´ô؇ÂÉÚ`Ò¢lÁRV·^FÁ yYéN×…,}“J÷œÆžgþr^.¾¾ú<Ÿ±K {¶v+Ý€©!iO¦¨.&ŒqŒyËæ¾ãýûàè-xå0bJÚ— àRº ûÒ’ß:×LÝø ÿÿPK!¾y¦Ï© xl/styles.xml¤•]o›0†ï'í?X¾§²$ª¥)R¥®šÔNÚEo0‰U cºdÓþûŽ¢Nk·å"±¿çÃN|¹—=3Ss­\ø1•ë‚«m‚¿ ‹ >?±‚7r1x}æÏÚ¶ˆŸÆ·®©‚™;ƒíím w ~Qcx‚\¯>,Ö×YèÍýÕÜ›NXä-¢ÕÚ‹¦W«õ:[ø¡õsôÀüÇóÒ>ƒÐ?ÁtY x„LlâýÉ–àѤ“ß^'=Ö¾gþÇ(ð½lâÞtFçÞ|6‰¼, ÂõlººŽ²h¤=ú7íO‚ {Ãøhi¹d‚«c­Ž[¡H0ýCäX rúIÿÿPK!`/Ó(Mxl/worksheets/sheet1.xml””M›0†ï•ú,ßHBvYE¢æP©êöãlÌV0¦öäëßwlšhÕÝCz²ÉðÌë÷ȟϺcG°N™¾à“(á zi*Õ7ÿñ}û°àÌ¡è+Ñ™ ~ÇŸW?ä'c÷®@F„Þ¼E²8v²-\dèéŸÚX-¶¶‰Ý`ATá!ÝÅÓ$yŒµP= ™½‡aêZIØyÐÐã±Ð $ý®Uƒ»Ò´¼§…݆iô@ˆRu /Ê™–Ù®éeGç>OR!¯ì°yƒ×JZãLáâQèÛ3/ãeL¤U^):·Y¨ ¾ždëWyðç§‚“{µf(Êè@"TgÞþÒ˜½/ÜÑ­„ˆ.x¢¨Žð ºŽÀSJð÷ØcêÄ·¯××nÛØWË*¨Å¡ÃoæôTÓ"µM£”,ðNdÕeNRÔ: º¥éˆAW¦•%rPœG­ªÂ–VÓh>OOs?Rï*•àp«<3yphô¯¿åAëH Š7Å*·æÄhR¨Ú ÂÏÝ$£õ»¢H/]ûÚðuqäÓq•äñ‘/éG¼Ô;u/Ô×|piš.–Qú>töP_ë•zi:Ofÿ ÇèF#ÑÀaÕ;ÖA‚xâÌŽY%­Ñ >oxi¬½îZz¬ñѱÚ¼nh<<÷ð00c^­‚Æ¢ ©C¦hà쮚„„n‚ÕÿÿPK!†;JadocProps/core.xml ¢( Œ’Ënƒ0E÷•úÈ{06UZY@Ô‡²j¤J¥ugÙ“Œe;¡ü} $”¨]tiÏã3#§Ë¯º `lÙ¨ ‘(F(ÑÈRm3ôR¬ÂXÇ•äU£ CX´Ì//R¡™h <™Fƒq%ØÀ“”eBghçœf[±ƒšÛÈ'”/nSsçf‹5Ÿ| ˜Æñ×à¸äŽãꉈŽH)&¤Þ›jH¡‚”³˜Dÿd˜ÚþÙ0Tfɺtö3uçl)Æâ”þ²ålÛ6j“AÃûü¾~|F KÕïJÊS)˜0À]còWnS<;÷»«¸uk¿æM ò®ë#eÕ·{»ƒCŠH—.]öºv!Åp£ç¦3Ø–¡ŒàFøîå»ßÏ=97÷|6"|AŠí+r¼‚ËFä÷ù„:Ou²œ5¢€( ˆ¢€( ˆ¢€( ˆ¢€( Ì¢À-ÿÿPK!ÞAÙŠdocProps/app.xml ¢( œ’AoÛ0 …ïö Ý9Ý: ¬bH7ô°b’vgM¦c¡²$ˆ¬‘ì×¶ÑÔi{Úä{xúDI]:_ôÑÅP‰å¢kö•¸ßý¸ø* $jãc€JŵþøAmrLɰ-QZI‰¶…Îà‚åÀJsgˆÛ¼—±iœ…›hŸ:$/Ëò‹„A¨¡¾H§@1%®zúßÐ:ÚvÇÄÀZ}KÉ;kˆo©ïœÍcCÅ÷ƒ¯ä\TL·û”u©ä¼U[k<¬9X7Æ#(ù2P·`†¥mŒË¨UO«,Å\ ûËk»Åƒ0àT¢7Ù™@Œ5ئf¬}BÊúwÌØ*Ɇi8–sï¼vŸõr4pqn&ÎwŽ<à¯fc2½C¼œ ø¦3ç|ã•ù¤WÙëØ%Ž,œªŸ.<â}ÚÅCð¼Îó¡Ú¶&CÍ/pZ÷i ny“Ù!ëÖ„=ÔÏž·ÂðøÓ×Ë«Eù©äwÍ”|ùËúÿÿPK-!A7‚Ïn[Content_Types].xmlPK-!µU0#ôL §_rels/.relsPK-!>”—óºÌxl/_rels/workbook.xml.relsPK-!y êÔÿxl/workbook.xmlPK-!´s›´ xl/sharedStrings.xmlPK-!;m2KÁB#ã xl/worksheets/_rels/sheet1.xml.relsPK-!ƒ¯êããå xl/theme/theme1.xmlPK-!¾y¦Ï© £xl/styles.xmlPK-!`/Ó(Mxl/worksheets/sheet1.xmlPK-!†;JaûdocProps/core.xmlPK-!ÏàG´Â,'|xl/printerSettings/printerSettings1.binPK-!ÞAÙŠƒdocProps/app.xmlPK &C openxlsx/inst/extdata/conditional_formatting_testing.R0000644000176200001440000000632014374150317023164 0ustar liggesusers# nolint start wb <- createWorkbook() addWorksheet(wb, "cellIs") addWorksheet(wb, "Moving Row") addWorksheet(wb, "Moving Col") addWorksheet(wb, "Dependent on 1") addWorksheet(wb, "Duplicates") addWorksheet(wb, "containsText") addWorksheet(wb, "colourScale", zoom = 30) addWorksheet(wb, "databar") negStyle <- createStyle(fontColour = "#9C0006", bgFill = "#FFC7CE") posStyle <- createStyle(fontColour = "#006100", bgFill = "#C6EFCE") ## rule applies to all each cell in range writeData(wb, "cellIs", -5:5) writeData(wb, "cellIs", LETTERS[1:11], startCol=2) conditionalFormatting(wb, "cellIs", cols=1, rows=2:12, rule="!=0", style = negStyle) conditionalFormatting(wb, "cellIs", cols=1, rows=2:12, rule="==0", style = posStyle) ## highlight row dependent on first cell in row writeData(wb, "Moving Row", -5:5) writeData(wb, "Moving Row", LETTERS[1:11], startCol=2) conditionalFormatting(wb, "Moving Row", cols=1:2, rows=2:12, rule="$A1<0", style = negStyle) conditionalFormatting(wb, "Moving Row", cols=1:2, rows=2:12, rule="$A1>0", style = posStyle) ## highlight column dependent on first cell in column writeData(wb, "Moving Col", -5:5) writeData(wb, "Moving Col", LETTERS[1:11], startCol=2) conditionalFormatting(wb, "Moving Col", cols=1:2, rows=2:12, rule="A$1<0", style = negStyle) conditionalFormatting(wb, "Moving Col", cols=1:2, rows=2:12, rule="A$1>0", style = posStyle) ## highlight entire range cols X rows dependent only on cell A1 writeData(wb, "Dependent on 1", -5:5) writeData(wb, "Dependent on 1", LETTERS[1:11], startCol=2) conditionalFormatting(wb, "Dependent on 1", cols=1:2, rows=2:12, rule="$A$1<0", style = negStyle) conditionalFormatting(wb, "Dependent on 1", cols=1:2, rows=2:12, rule="$A$1>0", style = posStyle) ## highlight duplicates using default style writeData(wb, "Duplicates", sample(LETTERS[1:15], size = 10, replace = TRUE)) conditionalFormatting(wb, "Duplicates", cols = 1, rows = 1:10, type = "duplicates") ## cells containing text fn <- function(x) paste(sample(LETTERS, 10), collapse = "-") writeData(wb, "containsText", sapply(1:10, fn)) conditionalFormatting(wb, "containsText", cols = 1, rows = 1:10, type = "contains", rule = "A") ## colourscale colours cells based on cell value df <- read.xlsx(system.file("extdata","readTest.xlsx", package = "openxlsx"), sheet = 4) writeData(wb, "colourScale", df, colNames=FALSE) ## write data.frame ## rule is a vector or colours of length 2 or 3 (any hex colour or any of colours()) conditionalFormatting(wb, "colourScale", cols=1:ncol(df), rows=1:nrow(df), style = c("black", "red", "white"), rule = c(0, 100, 255), #If rule is NULL, min and max are used. Rule must be the same length as style or NULL. type = "colourScale") setColWidths(wb, "colourScale", cols = 1:ncol(df), widths = 1.07) setRowHeights(wb, "colourScale", rows = 1:nrow(df), heights = 7.5) ## Databars writeData(wb, "databar", -5:5) conditionalFormatting(wb, "databar", cols = 1, rows = 1:12, type = "databar") ## Default colours fl <- tempfile(fileext = ".xlsx") saveWorkbook(wb, file = fl, overwrite = TRUE) openXL(wb) wb <- loadWorkbook(fl) conditionalFormatting(wb, "Duplicates", cols = 1, rows = 1:10, type = "duplicates", style = createStyle(textDecoration = 'BOLD')) openXL(wb) # nolint end openxlsx/inst/extdata/loadExample.xlsx0000644000176200001440000132174514155600363017734 0ustar liggesusersPK!‰K¿T„)[Content_Types].xml ¢( ÌXÁŽÚ0½Wê?D¹VÄ춪ª ØmíªK?À8qqlËö²ð÷8° 6KbÔ½„dæ=çÍØÝmJ‘¬ÁX®ä8½É†i’©œËå8ý3û1ø’&ÖQ™S¡$ŒÓ-ØônòþÝh¶Õ`´–vœÎ鯄XV@Im¦4H|³P¦¤Í’hÊVt äv8üL˜’¤¸ÊG:}ƒ}.ù¾Á¿k&s.ÓdZWASªµàŒ:$JÖ2?¨Å‚3È{,ÑufµšÛÀ•"Ó†#¢yçp`6%˜5,O@yY‘ö/šm Ûè.ZúÁØ‚kûÃõ «êÍë‘ØÙýÂ)4<‡äž÷“–/²äI™Õ\©UvÞI×pú°f%årÏû ¾ÿع‰L¤ŸwÜ‘ÇíáññðøôŸxh¾VnJ±lÃ-V.y¥óØéÒ„Ñ’9 S&·×£·¸„Û!z±“‘Vgù^€,_F›¸'‹ÜòŸýž+¸ï¾7JcVºØï‰+ëFG`‡ç]qÓîòÏzªƒ‡òlâ:&ÿÿÿPK!µU0#ôL _rels/.rels ¢( ¬’MOÃ0 †ïHü‡È÷ÕÝBKwAH»!T~€Iܵ£$Ý¿'TƒG½~üÊÛÝ<êÈ!öâ4¬‹;#¶w­†—úqu*&r–Fq¬áÄvÕõÕö™GJy(v½*«¸¨¡KÉß#FÓñD±Ï.W ¥†=™ZÆMYÞbø®ÕBSí­†°·7 ê“Ï›×–¦é ?ˆ9LìÒ™ÈsbgÙ®|Èl!õùUSh9i°bžr:"y_dlÀóD›¿ý|-NœÈR"4ø2ÏGÇ% õZ´4ñËyÄ7 ëÈðÉ‚‹¨ÞÿÿPK!ç’ -`Àxl/_rels/workbook.xml.rels ¢( Ì•ÁnÂ0 @ï“öUîkha°M´@“¸nì¢Ôm#Ú¤Š36þ~¦h´H]*´cœÔ~znœùâ»®‚XTF', G,-M¦t‘°Íëà Р‰ÊhHØ-Òû»ùTÂÑGXªÊ¢1a¥sÍ ç(K¨†¦M;¹±µp´´o„ÜŠx<M¹íç`éYÎ`%Ì®3ª¿Ù7TùïÜ&Ï•„•‘Ÿ5hw¡wÄ”PØ\ÂÚå1…Êøe†ñ _Æn±pÇ)„¼Ýû`fW`j%­A“»Pšš]ÌÎ5s¬H’] êQGÐ Cw«%¾±–ا%º1Œ×ÌtH˜FíŒkûµ‚\iu¸u]çº]~é ßÙ Ò¤¨ä²ªw ù:÷øody{Ñhna),dïÎÒ ÅÞ=ì‡}Ò&7þÝ'>˜çA͸}EÌiHc»þ-ÏÏÞôÿÿPK!žñ’¹Û…xl/workbook.xml¬UÉnÛ0½è?ìY‘%Ë‹ Kl'¨"0²^ 4E[¬)R%é%(úïQ±­Ä=¤ËEä ‡óÞ ©áå¾àΖ*ͤˆ‘ÑBDfL¬bôpíö‘£ æRÐ=S.“†;©Ö )ףܘràyšä´ÀúB–TÀÊRª0ÕÊÓ¥¢8Ó9¥¦à^Ðju½3j„z†\.¡I6¦Q”cé뜕ú€V÷ÀX­7¥KdQÄ‚qfž-(r 2˜®„TxÁöÞïaz]0¢¤–KsP^ä_¿åù~M9.§µì.Ë\T§päp¬ÍUÆ ÍbÔSîè+‡Ú”£ ã°ê‡aÐB^r,ÅLy§ÜP%°¡c) Èô"ð¿Jb±Ç¹„8·ôû†) u¯”I†ðÅd€z†MîlÑx0ÐÀpžrºŸO¨^YÎoK%¿QbôÜv×û9ÚÌêâóÒý¾˜T’x Cj=+I2¬z÷‘Ñ>éW™Îþ‰‰Lîb7á¹1ßY÷ËL£ ìеï3e«ÜĨuÁ‡‰a[zP ›Iã Ûûp ak>ULßá¢ä.Zu7¦Ui‘£ &jšY”æ ׳Þk„Õ¡Íð¬à^Á¡«Žàíóè1D;3¶•¦±'hì -­—Œ.™ YÕÀÀ¬a½ð»ãÐ/êë]I ƒ·#ùtã¥C¯zA0'3åTƒÕ¤ö­e•Ôà ' ˆW %;2ëTYþ.¨©m×Ry…K÷æ‹6ÉFèc££Ñ•ŸFÀMS¿í†aŸÂl2výnxÝOƒ~EþÏSÿ†÷:´"/:<{?h«ÛíωfÏ28ßàAþM½èºF½®ëOÒŽvý¾;òÞŽ'Wá(ê´Óvÿÿ“8ü$ìËT§T}­ÀÞa1ùÿÿPK!óÏáX xl/worksheets/sheet4.xml”VÛr›0}ïLÿá=€¸ù2ƙФyèL§éåYa4ÄHrœô뻲ƒˆ[;ùW 2 {£À™ÂO¥ÐÄç%Jþ3t"7˜[ÀQ`;W–3´kˉŽN˜éBa/§«À@i¢ñˆ§q†Ú¦Þt ®ze¡‘— p6¼FJ,4Lœ·Yb é—‹Qࣘt$Æ8˜À P:¼F]°Ñ^:n„å¼ø­}˜ƒ—ÓWà#ý鈾qöôQâ¡%Ñ46÷hDßBCu'£ê[þÄ‹Ãøtg-1ð×\.Fµ˜Á0n‰Á[¢ Šãi8I¦iŒþš•…>;¿,ô¥ Ó(¼W`P¨ÙáÿKÄÅeºWàSAÂ!˜l§Wåâ£ÑºÚjVëÐíÁ¤ùiÓÊ2ÙKÆóùl†4ÒëzŸÍ˜†Ù†&;›:0ÔóÙz¤Í˜†Ù†&;ÛìCÙz”͘†Ù†¦>[¿ÏöûF‡·ä+æ[Ú §&¥ÞC¡¼ßdÞ%ëÔΪv¢ “°W¾*8ÿh`àAeJÆäá:«â>¹ëœw„?Ò?pì*ŒSØ©õ's;Æ%ÇTºNö? õº£™°)Á9NÒ|`°Ç{8Ì9|NáÔÀŠ~NoË¿ÿÿPK!ʱ7ÌÈ#xl/worksheets/_rels/sheet1.xml.rels¬’ÏNÃ0 ÆïH¼Cä;q; ií.iWT ¤nÑüQ{{‚:1*Ƹìç³üù'Û«õ‡Å–"ï*(e‚œö­q}ÏÍãÕ=NʵjôŽ*Øú¾¼X=ѨR.âÁÙÅqCJa‰Èz «Xú@.g:­Jù{ J¿ªžpQ·z@=ó›¶‚¸i¯A4»;ÿïí»ÎhzðúÍ’KGZ`R/#eC{JH9)<=¥Ì°€Ç9çäh£zÏž‘ì5Æ}p’¦<'M0[Ÿš_£9ÈŒ‡ø$ÖÍXÖèèÙwIjoqÚÓ×~îæ'€<æÆÙX&‰÷©ïî8»¿úÿÿPK!“;‹/ )0xl/worksheets/sheet2.xml¤šÛ’Ú:†ï§jÞájæ"`Ëç®nví Æ ÉÌ\N9`º]Ì6îÞ~–, ÉZì“Ü$ÝZ¶—IK²ûv< ¾õ¥¬NOCsd Åi[íÊÓóÓðßÃ7þppiòÓ.?T§âiø½¸ ›üýo_«úóå¥(šD8]ž†/Ms~/Û—â˜_FÕ¹8Á_öU}Ìøµ~_Îu‘ïÚFÇØ†;>æåiÈ"<Ô}bTû}¹-¦ÕöõXœ¤.y÷y)Ïí¸íî˜×Ÿ_Ïo¶Õñ !>•‡²ùÞŽÛ‡èùTÕù§<÷7Óη"vû ,·uu©öÍÂÙâgÆÁ"Mw%<Mû .öO÷äacùÃñä±MÐÊâëEùyÐäŸ>‡bÛ;xOÃÍÿ§ªúLÁ$ƒ6£¶a›ÿu=Øûüõм¯¾.Šòù¥ <}¬‡Ý÷iqÙB>!̈84Ò¶:ÀåáßÁ±cü´±áÊå®y­‘gåA˜í륩Žÿåhï„hïgš7ùä±®¾àðÓ9§†!¦÷gw—¦ð[Jiµ·D•w\±¯Ê)3¤„\aFãD^Á~O|yÉëb7do!"}ž¼Íñ¥¤y¼ÿ=›þó_ãýäñË„ŒLbšžçÀµM˰ƒÙò8þÉßò»^¢ØxÝ/cd¹Äò‰ßö—øn7HÜ+ˆmzeû¶ Áˆï;ÝIæ(/LÛ3-þ'³7V7LÚëVˆgx6 ÇòBOKJÖ/ˆk¾mX„XØ2Æìsõu—‡( r¥‡¸âI!e†”+mmÝYº‡n½gÞ‘eÁ¹¶AÏ×’»ìÄò}Ï7 Ãs ~t´äƽ‚xoøŽå¹®Aˆ7£¹¥ßã8ÐÜ÷-Ø®E<ËÓ¼Ò+ˆëz†IHK@ˆéf7HÖ+ˆi;qÇr-Û²@v ŽY`ĺcÀ¡t×,\QÌ‚”RB®(f±l–`ä¸ešÐ‰LìâB_ÔÇ–a` 7`p"Aà¹íë4ÏŽ‚ø®¸ŽO_4«uÏ%=‚À`i×wÁ'¦cÚVà¢J{Ý‹gºÐw,‡¾j30 í²~A\ÛñMp­o[–m[r´ìÆÿ; Cé®a¸¢)3¤„\Q ãô]Lbx¾ãú¦8&J´©¨WèЖé{.ÌC!G÷ øÐ“Ó$1`·µù,é÷80›ÑaÒ÷ ßôa~ÕF—^Aà{f¢À7aˆ™D]úÝ x †9 Æ\˜ð W&¶c÷.³Pºk®(fAÊ )!WZ³tn ªŽwiG`,bÚµòûQÙEÃ@Ã@N™L±Ú*³ü¦H™!%äŠy1 ?ZcÒB,AÊJU:OG×"jíȪØ­@›—rûùmEËÚ›×V¼…böŽNé§¡R2A)@™ kË™N„:1׉…ND:±Ô‰X'Hu"Ó‰•N¬ubĶxê¼ VŠwd±ÅŸ†ò½¿ãŠð¦\‘®›!&DÌ1 ÄDˆY"&FL‚˜1bVˆY#fÃø.ÚÔÒÖûÞ“VŠƒçe{×F +6Ñæ\‘™ž!&DÌ1 ÄDˆY"&FL‚˜1bVˆY#fÓà¼Þ·î„4¯ª]™¢Ú•)ª]u&äq$3犌³@L„˜%bbÄ$ˆI“!f…˜5b6\¹e×û–b&[CuìÊ$Õ®LQíª3!$™9Wdœb"Ä,#&ALŠ˜ 1+Ĭ³é¸a×ûV-t[F³+ST»2Eµ«Î„<ŽjWY &⊼Ö11bĤˆÉ³BÌ1®Ü²ë}µ=Ý!ÓGW&©veŠjW y Õ®:³@LÄy­%bbÄ$ˆI“!f…˜5b6"7ìz_l²úU]™¢Ú•)ª]u&äqT»êÌ1WT»ê׊“ 8)b2Ĭ³F̆+·ìª—ó··kÅf)ÝNÕíÊ$Õ®LQíª3!¤ÚUgˆ‰¸¢ÚU¿VŒ˜ÅI“!f…˜5b6"7ìª/$~WŠw‹¦¨veŠjW M™sE-t&BÌʼn“ &EL†˜bÖˆÙpå–]éZ¡ÿ޾ɖb€Iª]™¢ÚUgBHµ«Î,qEµ«~­1 Š“"&CÌ 1kÄlD:°]‰¾ÔºkÝ{ý”B£ÐÏ6Ê·.©S¸¤¬fÛË·Ÿ~ÄŠ"’¤æ˜Z`*ÂÔS1¦L¥˜Ê0µÂÔS!áu.¹óƒ[ÐNB¿-ÁÞ—‰ù'{Gtcæžoa¬³Zƒ´{'ïÚ°9!¥)–fX ±4ïH5)|¼ë>ùV¦’"÷ñº‘ï«àN»/u;2Û–â KI÷b·6ÇL§çöïFSÂ÷´ntÓ_ÚžºvS6€®þ!vwsJãÊ®<’ìÊ!–æXZ`)ÂÒK1–,¥Xʰ´ÂÒZHíÓ}ú4Ó‡îHì~¬Îí.à·¯9gÿ_çœo„Éψ3Ø¥vtäæK($Ù!ç\bßö[.¸dË—ai‰Æ‚’ãn‚¥7ÌÄ}Ɇ+!ÉZsÉm óî×ûvû`ŸuTÝÄœq•„rÉ‘¾¹dIiÎ%[¦}©HH2üR4”RŒ&B’/'’Ì^&nU®aV‚’ÅZ<ã„êû|?3§O-¶ý×É!“e à”%ïuÎ¥NYC[Z7 ås/EC5‡¼¡²§/(Y’¥8VÆ%GR+ÑP~gX‹g¼‘û¦æ)L Ô”d1©“,&u’ŤN²8%mñð–š,NI)”Ì_Â%[ú&”LiÆ¥N²ø}©ÉâÏx#Y:˜Hªˆ„~Ø‘0 ÊéIûD=åP'Ѭ]'ÑLê$šIDsIu%—dî—üŠJîc.ÙÒ\ —™¯T4TÍoUu%¿¢šh&Ý*;U$ú¯—«êèbUfT;Ç3åP'£¬]'£¼@Tû9—¤<–%ai)$Õº<–j].©c%ºbÆcu¬Ë([Í(“ne´Sþ¤u§`Ôý™äÈž JÞØK ,EXZb)ÆR"$9¥˜Ê°´’ìk!ÝèþJ[äðЦ)¨Í§²4’šON){t˜Z`)ÂÒK1–,¥Xʰ´ÂÒšKþNÖ²&º×“°æß¢¡,ü…8bQÒF*é¡™¤;B,ͱ´ÀR„¥%–b,%XJ±”ai…¥µÚaŸ§ì¸+;^z,êçâ]q8\Ûê•e¥‡È®êõ-œI€ì#Ý~  `ü—)qèš~§•— 'cO»’:Îìˆm'¦—?Ú³¼ì)@û÷¯‡bÐ|?à â-Ü[tvßöì¼îà\—U ŽÛÕ œ—®ó¦‚ÏpJº)ê/ù‰ž‚¼¯‡ŒÂ¤ ~³¦mhzèôÖL_àšõ¡<}†S¼×ŸE`Ø«J84\G»Ö2ˆC_‰ÖAˆß^ ˜ Õ¶=ƒý4œÛò˜þ·¯óm{*›æ5‡¥Óµ9 üw6§uõµ9<ͽÍ;7ÕååC~<Šü¥ì®¼œ9¼”®~ã!è¼&¯¬âP…Ý Ã6 ÔwsΟ‹4¯ŸËÓep(öí lZjvDÛѲ€®gá'xÎOUç¬Åo/pš¾ÃÀYâá`_U`ö Ü+û¡h^ϰœìæ/ç\ÕM—’¾v:ßÕùWjàkR™ã¯‡ü'ÿÿÿPK!ñZ& ›*xl/worksheets/sheet3.xml”ZÛnã8}_`ÿÁÐûТ$ß‚8ƒqäKœ] ±½3ïjGI„¶-CV’éþú)‰EÛ<Å­<ÅuŠEò¨x9$oÿ{·í½çÕ±(÷Ó@«0èåûMùTì_¦ÁŸÿ_ü6zÇ:Û?eÛrŸOƒù1øýîßÿºý(«ïÇ×<¯{aœ¯u}¸é÷›×|—UyÈ÷„<—Õ.«égõÒ?ª<{j í¶ý( ‡ý]Vìá¦ú•åós±ÉÓró¶Ë÷µ RåÛ¬¦ö_‹ÃÑFÛm~%Ü.«¾¿~Û”»…øVl‹úG4èí67/û²Ê¾m©ßë$ÛØØí~WlªòX>׊ÂõMCeŸ'ýIŸ"ÝÝ>Ôƒ†ö^•?Oƒ?ôÍcý»Û– ¿Šüãxñ¯áû[Y~o€‡§iRˆC¶Ï{?¾¨Õôí‚^]þ“?×÷ùvK£ —mêâ=ÿBnÓà[Y×å®ÁÛ/Z“é¹*æû¶Î|›“/5¦‰é8S‹ú§&]þo›·h?ñ—ª÷”?goÛúåÇ*/^^›6 ˆ²†¹›§i~ÜÐ'£–«hpêgšÕÙÝmU~ôèóSŽT?%“¾ÑôÃ_ôîvÓ8ÿÑtx‰‡÷»ä¶ÿNmÛ06»Ä.v‰ ],½ÄF.6¿ÄÆ.¶¸Ä&.¶¼Ätè‚+Ô.øà€‘ ®0vÁG<“Ó'¢OlS~t`;jyŽ ‰3cïU¡·)Û‘…¹±Ç ¨[p¥j_Ú TU¯ ?°?Ph¬;huH‹;‘ûI3f$ÍX%il¤»$+Uãdþ’#T|® ‚¬±?°f¬ÈZÖ’N¬%†µHÁ(›j¾7V‚wjìscŽÕØYpµ*Ö“Ë?»äêÆjcaÅ b¯uííÊ#ú:$Ò\Úa¼8õNÀäc÷’hìZ$Ÿ±Ç Y_X Ò‰C#LŠw¢’$¼øCJÙ (5VÈÖ5× 3!Fp(v¢tØRªÇ V†™€º{cÅ$ÈaptÎÙ_iLL $ð)—6’ÏÁñìµ®9<ðf¬çyÂámÔ‰·ÑgãÙ8žU'¡_IÔ¸M€¬¹1Ó¬SÜÂHïòÔcÅäóvå‘CŸ"8$6;ë_ßíŒMòMôkfÏì>)Üâ0á¼hìâ, Ò#„Z1Ä+g¬¸š Õ!nÒ‰¸‰!n$V qìî!ŽAœ±{ˆ³€ Ž#ÕØ™"1ÿØ h4V¤ÑX‘F´:4jÒz]¶Ûâx¿ÓC_kõŒÂ6~8²9 ðC¤ é1tjέ20ã.I²´ÁF×›¹b?œ"ýæµm n³M_ÏùïÜQÏh›©0žf¤…¼”³—RŽ%)5€R‹Œ ú%W¯i.¹œC\¬ÙOPjcƲ·P.Ü ÿœ©»‰rosv fMFD–²âðe)Ç’”Zõ"³Ô"#ÜDÚ†}ÅvA¡WÕ¬Ù[PÈÕ~Ba7 £Y„b#Ɉ •Àª”ý£—l (Ü«/¡Ï‡RÆ6k¤&‚C¿˜á" YFáȾªgt7ACîmz84ˆàåØ;r¤71s l¨$röÙ¸“´-¤U¥!C"%M,¯NÔ;îDÙMÚЩRKg"6âŒ:M’n³Röb±òœdŒ`Ô 'ŽÀ#œ9"ê/gMA¯WÌÍüZA*H“”KLĺ•Db?Ï•ÓyîÕc#ÛÈP…úê¬ê×N\\̪Ü,L_ âŸw“O˧ —\´Øk<’;EÂE‹H`¾]ØXbœ/m°!»Ý_1„ ¿ß¼¶U‡¶Mþy4ê¦Èý“í<#‚C!ŽùS$Á¡UA⎋Ä*‰WÎ¥–64 P$Ô+„¸&¥­ eÑ÷ ¡/uXÓÄØÖYdA(K‹î¤Ø?Jpe V(+'dŒ»QF4m[Qc2$’Ò/lÈáÕ+ž¨›@"÷6)åÉ#‚C–¡àÐÞÏíUØ.qt›‘8I)îËÎW?|Å!£^µ¶"£Æû“ã⨛\"÷†ÑHŒ #¸±yh)ÛÅöÓ†‘ÛOF4m£®òÓ-ÐõeÞÆƒeÞo^û»÷(¼Ýu¨›x¢»÷–\X"flÔ²Œ‰Bœ"R.1!:·‘h¢t»½°u+-F5 y’!E2œ¤T(xãà[Ù-/²¼àØ‚ =…ý`à…vÂÆ’œàSrÛ ÃèHÉJn@Y–Úšáµ`‰jj–glµ„ªO#>´Kö kˆÂ†œñ‡Z1¢ÍF´ùˆ¶ÑÊN‹+݃SÙ›kT™OjÎ Ê,žÎÃÿš†ˆ[ÏûÅÓ£ÖRžQq}ÓQOŒ¿FŽŸO¿˜ày»ß~ö ê‰ö×ÈÃöštäßïµ:ÿÿPK!Õ-1œÂ%xl/charts/style2.xmlìZmoâ8þ+‘@ôh)j*u[­t½­öVºÏ&qÀ»Ž³ÍRúëo켓„—-ÐÂí7< ¶ç™ñ3ã™Ü†jN±Ôë#ÞKÂ8T€¦Z§CßWá”$X]$4”B‰X_„"ñEÓø‘ÄsÊ'~¯ÓíùËYP> ®Í"RÂa‰XÈku!䤘#a0KçÊO0åÈ£Q€`Rtw ÛÃ/T}£š;bü+‰á…—uoE1e¬&$qLB]Wð¥0¡\HX­šäIï'fÒ/fmWŸ`ÂTÑ{ÙàAÃ8³±JïgˆRçä”é‘1r£á³ |;ÌS e’2ÚcX±Ây.aûÍ)Ä*Áš(ïî·]>nuž>Ðþó—˜@V×ÁJÚá¶ÜYOâìɰön˜ÓMHzƒþu‘‘HeÉàšÃNÁmšÂ_kὩ„í KH÷ÜÀêß5tmº·‰/[ ­Ñžd¶(GxÑÉS‹d, •© P•¢¯$@ýüÊPþç*I,qr‚®[É¥à¹.P¿ox|Úw²‚ ¸M̬Mò¾·×f‘˜óO¸xu§6iÑ/Þ8ö¶_V6ÑÓjëÓ9ËkkDR¤ÍÁôåŽ5¦9ô¡(K(nr\\Ö%Çx¸>ðV±„‹·Gõyã;ïìŽ%«mk"Æa,á!ŽÈ$PuèÜœîRИR,7?º ƒ,ö ÿ@êœhH2NR´”˜Êëq«'ïx›ë47o,M:—xNéHü¯¢ÇŽU°]HÎÅ’àˆÈß9@ûÌlM2!<:“OK9•-uL™Ð'×0|SlÜZª\>žT›£ªG^ÄRDR¢N½Õ¶¹Qµ¢g6üMiû¡´4õ9µ¬ÿ0ϱm%Tצ­`ec¬ˆÉœóž¼9aKõµj7O÷Uä,úþ‡¯wo:}PÜö«ßTcK¡÷òˆÕ4ûf@-Ô£ÐyÙí7[èÀJø>@Çqoß@´„È]gé©T©Z†eIñWJMoù®¡ñ¾»>u™‘óz®šsè^˜‹çŽ¥Šlï†"–[ÝýÿÿPK! qMÉ xl/charts/chart2.xmlìZYo·~/pÿÃt` …–Ñn!r!ꢨÝ±Û ô¢Ô %³æ’²¥ýï÷ã"y$[^’¦h‚øAîçžå;‡yõݲàÑ UšI1Š“z3ލÈdÎÄ|ÿryRÄ‘6Dä„KAGñŠêø»£ÿ|õ*fWD™‹’d4Â&B³Q|eL9l4tvE ¢ë²¤c3© bÐTóF®È-6/x£Õlön“8l@Þcƒ‚0±^¯ž³^Îf,£™- *Œ§BQN $ ¯X©ã#0—C“Ãf'º!|7ã†íäDÌ}µ_.|§’ ‘Ó<•J@Œ•ùE6sC•ÀV©§>‹gIª êzQÖ2Y” nÊ83+G.ÄÞé•ÑúvÁÕ£8K:kAàóž( –)©åÌÔ±cÃKa}vÛ~cÐh…û³Ig¨ÍŠSÏPÒlYn›s '„ó)É®­l*“7SïÆíÂ]aØU%»‘æB.TFmS‚ýK’¿$EÉi}Éõò÷¤¢=·“¿v¿—dÊiûU#,ÁÒYa~Ì+ÒÇÐÎæNÕì)daä%3œN(§†VW…E'…Ñòаß,_n)ƒ.ÏÕÑ+2Ô’³ü„qîVñiÊ•ŸJ² ·ž8ÑíÌäÂÎÒ®´’%CßCg3š™Sml'ÄêNɆV(ÎCϪ˜JجÕK›t›ßMXó¨v2ØåÀ´Þû“äÀ©Ø'ÍAÛ{OA‹**å­‚K3V”x—¸’ ««ÙpJTjCBøž°`™äž×9\e ßïu7ã ïHs?xCÔ*•\n¹PܰWú]ã“*§aûà›ÍÒ{!õ†Îì×ìè›ªÛøæëƒãƒÄZ”ÕF¥¶êŒÜ¤pá&8:OMi"i¿qs4Fˆ$sÉYT”s»Í3ÏÜZ+ÝlçŽ|¢þQOÁh5?Î~¦s„›àÀƒ”2â®ôîÓø 5<tŸ–UPá]Yu¶Å—„™aööMh… ƒg 8ðgèÂÇ¢xäöÁÖq…-±(6*àJ*szôE'Üqï`‹ëµ¡ªª&{XoõêƒÃfåïIY´šõfÒ«þ=%œ¤[OzI·=è„_·ÔñŽ5 ƒP¬ÎZ1Y ‘dǶBX¨ØVèyÚ¶Ò°­3&¬]ÝšfV|XþbV:ÕÔz‹ô#›URï&­ÃêßS.¦Uﵞ2¤v=éßS¹÷4€G*¦zž6ɇ˜Y~dÓqŽàt å¾»~1MgbMgò‘MJî"ù]|¸ÛõÎÞ8µÉÝz§Õy$²ù@ê£Q'?r#õ•¼=¥s*òŸèj;µÂȯ$ä8¹ØÙ)1?#C¼7÷‚ªûÏ)òÊ5²«ìs¼˜"}¼`ïª[è isRþ—åæÊŸÔJ=*”@Vœ”¾·Öêû^²\'žI¿Ónö{ tš­®ÀAU¨ 3vØuï>:#°Ù"©rµ OEÁÄY†°21w©í–¤Èò\†úÄÔg‡Ô0ºC?£8À}\R~ÊÄ5ÍQò ò‡T—,»>C:º‚"ebÿ Á"\ü†A—æRnç@›dØæÂÑí(>춺q”‘rÏP ÁgQ‚-æqDø«Ì(`ÆÇSX³´À{.Š3’ý¤ ]¶§»î׳™gf°î¶oÊ»ä|Ëÿ¹’Ï3’v³ô%‚©ÌWç*RÒŒâZ/XD\f'LisJ´9' Õ¯$¶µ8ó?3.!Ê9*RLû~Ôt¤zG·ÊŠD¿]E! ‘¡ÛË"4Rƒ¶»3ð§Í…-ä8fKËqHGr:{ªô;ˆ¦6݉˜û]„ÚjŠ]£î'ä…ûŠ#”!l¥#,!šB51n¥—_Cïákh?ïlÍNDfUÒŠ£øÛBÔ¸ñ·JÉÎ%~ Ó;™å/wÛABpMö^¬”lé×±.ûA? J—áÙ+F1µ5="ë6æÆh0=[|úª ú¶µ•xò)C³CŠ íö…Ç)‡ŽjºNR½îÛ˳7ìô†Ã¶¶‹_·Ðÿ©Ð÷÷û—ð;wñƒb¹Õïóƒd?ûÆíßgðßìR_Tpüâ»*u܇BÈgì»*Æùµ‡}—:¦æ–Ò௦¾ÐÈÆñ¬kœ[ñýÊhëÕ’£ÃŒ®øè¾6˜"8KÒveð;ïK‚-åÝ刀_bøçbÐ2¾Ñ,«o¿2ýZð GçL—ÇÀ×zâ9R…€b‘ LlncÑ0ùN8^WÆŸSðŸÎ÷<}~ ØCðÇ!ªGÚ/Çd¥bÂ\P”8wèãŠ<œH‰w‡«JÔô‘ÊÌ™ÐþÖûÈ7ì{o½G€Ðî_€vü‹¿Ü¶Ú1’&»‹olöÂa‹Ò?ÜÝ; ^õ¬ÛÂW´PÚöɸÝïöjiç¸Uë¤ã´v8éõj“ÁñdÐk÷'Iﯿ÷Q×=¾.Ýk7ˆÁ3o®dùñ Žªh´2ˆÔ›ÎmöÔÞÛCe„²g-Òóýë4ÌŒ!¯¬mXª¶é„qBjq¯åˆ®»ÿpôÿÿPK!ƒEÒ¨¡ôxl/drawings/drawing4.xmlœSËNÃ0¼#ñ–ï4iPDM¢*âR8À¬§±ÛÑÚ´éßc;-$ÔK´ÞÍÌìŽ×«û^¶dÏÑ­ :¤”pÅt%Ô® ïo››%%Æ‚ª ÕŠôÈ ½/¯¯V}…ùÁ¬‘8erw,hcm—'‰a —`&ºãÊUk¬;â.©ŽZ¶I–¦óÄtÈ¡2 çv=Thäƒ Ø$EËЙ=èGÞ¶Š5‡TZÓm™®?À/u]fËÙbvªùT(£>”‹âÃ1çëËônž}•"PŸô¬>éNÿΖóôálþ»òl1{uM”G½B×¶AœH`¨ ýQû§³âk´ˆm÷¯HDUÐ[J”Cô±´$£IaûèòaÚß ûçëº&}AÝrý× ç½%lH²1¨FPlßÿÃ5X (.Ø æçpórÊ*9l“]~H—£i9úåöçŸn>óâkùž¦•+Êå轪Ž×ãq¹yO÷IéæÇôÈk^ì“ þ,ÞÆå±H“m=i¿{“Ét¼O²ÃH­p]\²FþúšmÒ8ß|ìÓC¥)Ò]Rþå{v,›Õö›K–Û'Å×ãÕ&ßa‰—l—U?êEGÎ~sýøvÈ‹äeûþ.‚dÓ¬]ÿÁ–ßg›"/ó×Ê…åÆJQ¾çÅx1†•no¶ì@šÝ)Ò×åèN\?‡b4¾½© ôG–~–÷Kž•Àãv9šHÑ1“½¯íý[álÓ×äcWý3ÿ|H³·÷ núËm\oÄi¹ûÁ2®Ê•6ù~þwö™tØò½þü̶Õ;|n8›øÄ—´¬î3¹äÈÙ|”U¾ÿ…p)µˆ‡‹Àg»ˆ&S¹Æ™y>΃ÏÿýÇ\>ù_¸P³¶|6køî< ƒé|v~ 3œ ŸíÌ ¶§­þEølæ-Ü æ-p|6óæîLL¾AQ^=iøÒN½h“âä%ð¥xál^ûÉ™g,ç_š¹÷ÜܱòÑÚåã¤JnoŠüÓ¨¿^ƒÄµÔI:»¸§'t:CþŽ/×¹“ Á"`DX¡„3úíVÌoÆßà mP&ê“Yè2«o¢ËÄ}2B—Y÷È´ËŒa÷'€5ôŸófŸ^½µ©½©qÏ‘ý¨ñÐõÉÔ¸pÉþ× ÍÉ€dΩérä·µ6õuºó½©>j ÑôIÉ£{ÖÀVgÍs, é׆ Ü`¢ý£vUbÄ+5*˜UÕ8fâ  Zk2û"Õ«‚à ‰< ˆzf‹Ð%FÔðéŒþü“†{€/ºÿȃxÖ¤Wèj[3>Äj ãÊ‹‰«QÏ…ô¢ûs¥Äˆ b5 LGLŠ :´Tš˜žüØŠ(ÓÏ=×ïj&ȩԤýÅyC?iÒÓ‰¾ö„xâ³&-Äq[½µÇÔⱄÁEû.ÙîJ3ŒÕ¸pÉ)^ƒ6ƒÏBjJž9u(‚¡KÌ\ÍMˆô£& 7МžH?iÒ‹£Ï Õ>ÍÞS+{OÑÞ$GjœÛ[îâlÌŠ•?  ÜÉüÄÏ¿HÅi"áûej;ïêAÂÈ£&-Bâ O:¦f€oÅ‘ ­øœkxÿV/Äô´­µV?³ûV, ÒÊÒô@"`êǯPާ'ð¨"4Eߊ'AZnbÆ^ àÑÀ )Íbx '52u|+¦iezöŠcˆ+q†`)9=sWúV\ ÒÊ͙à W²2g0RŒèÑú‚2Ó·bKVZŸïÔF(Ç‚ß ^+#ÀS+© ÑÍ­ÈÓo*Oa°MÈå}"1=†¿ îô­è¤•áM¯õ†ÊP\ çÕžšÑ³‰.‰Ͼ‰‚tðø2ÔéżòD€’ÔÈHHV$ê+Rd¯N"àúu˜¦%LÎvŒ3LÙÎäŒA2°bUVAò|U¡k ­àxËG_P^@²É‚´â'šÎ ÀŸìZAŒ}9 õ1±S`Å© ­ OûôXº©>Ù›à¦údZ_P}Vœ Òýé.¼Q€OóàAß·Ó£TÐtp+Ši3óï‰"”ã‰%=>ß4v™Ï_À¸ã‚tÌD€¿/@€_AÀØp” ãCå*> +x׿€kÌZ[qn ˜‘~hõ„Ã<FÀlø :½ã‚tY‚Ïè0µSc”ãU¬TÐxŽ­8zÊ@Ϩ{cœa~phEÀ ­¸‹æûð'{O73ßJ}LÇnóZ´~Aú¢Šr<ÛG€„ú‡yÊ)ÕÌõÕÅbuËò˜¼¥ÿHŠ·ìP:»ôæL\8<…ºU\¯òc= Áì%¯à>pó×;\øNáj%d,#ç5Ï«æx³+×ý=­>ŽÎ19¦ÅïÙ_pÏ|!/2¸š\ßè^ŽŽyQIVÁ­Nÿ+`3¸à9G׫lÓe·Eò ·×â:Û.GÅãÖ“o)+yû·¤¨Jg“È›ÏÒÞ§ÑVÚ¯ßi¶â·7é÷êײª?~úï»ùlFw‹« œÞ]Ûäå* îý«»ÕýÜŸ¯„'âõ:—Åÿ«âõùÛ¸Óq]îàæ{ñk&uiÿn5jÍ©äÔ‡·èÍ&Ƨ{û·ÿÿÿPK!°†9/c#xl/worksheets/_rels/sheet2.xml.relsÔ”ÁN1†ï&¾Ã¦w[‰aá‚&¼(žMÙÎî6»;m¦EàíQ¢ˆ1!Qn™öŸ/Ó¿Œ–m“¼ë0©ìˆ0wÆb™‰çéýE_$!j4ºq™XA£áùÙàùP¨¬ «`ÈD£¿U*ä´:Hç¹R8juäJåu^ëT·Óé)ú®!†[šÉÄd‚&æR$Ó•çÎ?k»¢°9Œ]>o㞪b%j,Ö,ª©„ø!˜P.lm=«×¤ï‘Cn[Ýl¶?8Ã$wË„œUû‘oމlH/ø2¾€¥TŸ¹°Yt%OùM÷O8!ZÛD7/8og@¿ezÊð½cÂ{²È¶{‚ÙaË;5µ§rfñ=®Oï}]ýodµõ5ßÿÿPK!IuÒ³#xl/worksheets/_rels/sheet3.xml.rels¬Íj1€ïBß!̽™u RĬ—"x}€i2ûCw“‰­¾}Zè‚ÐKOóÇ|ó1›íeÕ''‚7°Ô(ö6¸ÁwNÇÝó+(ÉäÁ³+ l›§ÅæÀ#å²$ýEŠ}Îq(¶ç‰D‡È¾LÚ&Ê¥LF²Ô1ÖUµÂô›ÍŒ©öÎ@Ú»ÔñËå¿Ù¡mËoÁž'öùÁ Ìô>rRê8ÐúÖ‘[¨u‘|ì±üO—è«|xfrï Þ“—œ½ºùÿÿPK!ý ÕÂ#xl/worksheets/_rels/sheet4.xml.rels¬ÍJÄ0€ï‚ïæn¦[DD6Ý‹{•úc2mƒm2qußÞ\ÊZXðâm~˜o¾™ýá{™Õ‰³ø ìtŠƒÎ‡ÑÀ[ÿr÷J Gs là̇îöfÿÊ3•:$“O¢*%ˆ©”ô„(vâ…DÇÄ¡v†˜*5Í#&²42¶Mó€ù7º S|t-¨þœêæ¿Ùq¼åçh?åÊ t™¾êeIyäb@ëµ&kp¯«2àu›ÝÚ$Š¥§÷™7B—²à%nW-Ü|¾ûÿÿPK!Êz!Óxl/charts/_rels/chart2.xml.rels¬±jÄ0 †÷BßÁhoœd(¥œsC¡pk{}á(‰9Û2–9.o_g)Íѱ£$þïûÑáx ^])‹ãh kZP-.ξÎïO/ ¤`Ñs$+ ‡Ç‡Ãy,5$‹K¢*%Š¥”ôªµØ…JÉb½Lœ–:æY'´œI÷mû¬óo ;¦:òiìA×TÍwìàlfá©4–ƒæirv£vÝžªí‚¹¼±çüYVO•†y¦bÀn;é›Zôßîî?ÜwZÙZüXõîÃ7ÿÿPK!&íꇻ%#xl/drawings/_rels/drawing4.xml.rels„Í Â0„ï‚ïönÒö "Mz¡WÑXÒí¶IÈFÑ·7àEAð4ìûÍNÝ<–YÜ)òä†R ÈYßMnÐp97;œÐu8{GžÄИõª>ÑŒ)ñ8™âXØRØ+Åv¤Yú@.;½ ¦<ÆA´WHUE±Uñ“æ‹)ÚNCl»Äùrò¶ïûÉÒÁÛÛB.ýˆPvĘ2ã@Iƒ”ï ¿¥’ùYP¦V_åÌ ÿÿPK!"è²ÄG)xl/pivotTables/_rels/pivotTable2.xml.rels„Á Â0 †ï‚ïPr·DdÝа«è„.ÛŠ[ZÚ:ôí­7ÁcÈŸïÏWÖi3…hkX˱q­å^ÃõrZí@Ä„Üâè˜4<)B]-å™FLù(ÖG‘)5 )ù½RÑ 4a”ÎçMç„)¡WÍ {R›¢ØªðÉ€ê‹)šVChÚ5ˆËÓçæÿl×uÖÐÑ™ûDœ~T(og—˜ß;RgÙ¾2COIƒ”ŸÙÌ: ªR}éW/ÿÿPK!Ô.»¬É­#xl/drawings/_rels/drawing3.xml.rels¼Ëj1 E÷üƒÑ>ÖÌ,JñdS Ù–ô„­ñ8?°ÝÒü} @ ».%qÏ=høñ‹øæ\\ zÙà £qÁ*ø8½m¶ J¥`h‰\¸Àa\¯öï¼Pm¡2»TD£„¢`®5틞ÙS‘1qh—)fOµÙb"ýI–qèºÌ÷ ˜âhä£@œ.©5ÿÍŽÓä4¿Fýå9Ô'è|ën@Ê–«)ѳqtÝòœØ>÷èÿÍ£¿yàÓÇ_ÿÿPK!€ÜÒxl/charts/_rels/chart1.xml.rels¬ÁJÄ0†ï‚ïænÓìAD6݃ ìU×é´ ›dÂLûö¦±‹G3Ãÿ}?s<}¥¨>‘%P¶`ºfOcȳ…ËëÃ(©..RF + œ†û»ãFW[H–PD5J K­åYkñ &'Ìí2'WÛȳ.Î_ÝŒúÐ÷š3`Ø1Õy´Àçñê²–f¾a§à™„¦ÚyJš¦)øjÌžªý⸾P$~¯kÄFs]:`~ïH­eûÈ| % RN?³¥Ì: êJÍôëÿÿPK !€iÜÉaÉaxl/media/image2.jpegÿØÿàJFIFÜÜÿÛC     ÿÛC  ÿÀ1ì"ÿÄ ÿĵ}!1AQa"q2‘¡#B±ÁRÑð$3br‚ %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyzƒ„…†‡ˆ‰Š’“”•–—˜™š¢£¤¥¦§¨©ª²³´µ¶·¸¹ºÂÃÄÅÆÇÈÉÊÒÓÔÕÖרÙÚáâãäåæçèéêñòóôõö÷øùúÿÄ ÿĵw!1AQaq"2B‘¡±Á #3RðbrÑ $4á%ñ&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz‚ƒ„…†‡ˆ‰Š’“”•–—˜™š¢£¤¥¦§¨©ª²³´µ¶·¸¹ºÂÃÄÅÆÇÈÉÊÒÓÔÕÖרÙÚâãäåæçèéêòóôõö÷øùúÿÚ ?ú ¬grgžƒ­¶¢„‚~dãéR´Ÿxuþ`ÕÇÌÝ{±³AFÌq»$z{ÓX§f¦¨>_”OÔž´’ÆíWêfåmP¢L>”yqMQ€úÔÂ0çþï÷håÒä«õ táp¿…ZŽ>eeõÇ­Gche_˜àqެƀ0ƒÖ§ÌÓ•É‹Œ+|§ÔÑ9/„<•È ~í4e¬…e0pM&1ÁÜ{Uo9AòØý Šošªv»£šVHÍÊ2e©_`Uúcõ¦É$*6×8ûÕ]$f Y󎱅bÅÆß›'ŠR]JM1æUWlôÎqíNÛæ€ã¦Þ¾œÓF$RG†úzRÊÅî1¸qÅO™|¼¤Œ±…Û›9ãÖÆ€sÉì;R#yŒÂín3Ž´ÌCž¼ƆŸQ `K3‘‚OzFq»æ‹€x8äñéO%sëó¼S| ÎÛŠà~¾ôomÜ~gË"±Ûó|R˜Ü¦Y['¡ÿ&•—<ùŸ_—¨§º7ʹ?{ßóª¿c(ÅkqˆX"ß6Jÿë .@zuÆšSX®>˜#­>;±7oâ4rÈ®kt'U“ :†¼{w0ÛÛ]îÝ_{7Ý>”Ö•¼¹=š—)<ñL™¥>_ȧ“׊îl…ÛùUQ¹› .¸5=£;ô¾½©òéqsshÉóÉ$Ÿñ§í*›‚› ¦/¨?L„ãš9mO˜… »ü©v MĤd S™\ã­f0KÛ«å]CìÜŒ¨.7~Táù½3òÓ[hïúu¡e*6Ûï®[îÎ?Ù©ýNßSŠk;më÷}*Hä+ûÂxéNÆÑåámÚ¿u¦…9ùSp<7½HÈÄ Íò“»åôÿõÒdŸzžSXÂN\¶+¼Q–#hÏzaU_¼=fBwê9¨&àr9ªQ0”#©^DE?êúýÜÔ/³ïÿ®GÕ4̀ʻºAU¥r^¿Þ£•¾ämÞÊÊ2Ç»éP>Å@¡Fïfè)í!i9]ß.7 ¹Þ>î _-´1ßäFÇ8Š1÷q‘ŽsQºáw|Íý¦•Ê•Oà Œ,§þýïþ½ Jüܨd$¨È\ŸïÚ”Ä3ÎÒ õ#¥I¡îÀnéïVÛo […þ÷z|£Q÷tЄCÝ•[åþïë@µg †5ËpFÞµj%àîRß79þpœ Å“´ž*•= nìSÒ2GO»ØÓŒK6Õü†E\[tÎHÆ:mïA‰G;y9hóe*o¢!Š0˜ŒÇùö©ÄH¸!âÅ=bè6ƒÔ ÿ LÑ¡nìú ™G¹¬i•dŒ—V$õFÆZ,wŠ·ä©ë'jcB¥þs»æûÛyP£Ø9o±FP¼«ë¹G_Ji·Ý¸•UþènÕzK`²|€)^víëÍd޳ƶâömêf5»`ê½íøSØ”Œg#õ­fÓó÷S§8ü•Fú{3{sÁ©Ó©>ÊFoX„b¿/Z ¿ 2äÕï²Jœ«ºG=¹¦´+J8^™éš9:¢½Êɬ¿ìõäÒD›Ž¶ÕïŒT¶6c–Î;µ4KÀŸcG/(ûÚŽ 0Cý)ŒÊÇ;Tîo—å¥ ÍüüúœQ€w3°¸Ç^Î×h®REÁVQŒgw¿jGFAó(û¹ûµ)0DÌP{j9§°«»ùUrÞÖ&VŽˆ¯ UÇõ¨Ü“Ñz~µ$¬1÷>ÜÔnØ ~c5.<ºA¬ªNB}ìŽ{ÕvB͸/Ì«wö«\2•_çQíÜìùï÷ lÓ"EW¶' îrÛzæ«ËÈp9úÿi¹ ½ê)m£Ÿ×­¸ÉØÊt Ë*·ô¨% ¸õ­W±\r[lUilØË´;|½j‘¡›,+÷‡¥A%³/Zўϒ®Í»»TFØã'׊¯#*”Ô¾#*âÑ\ò‹òñœt¨%³ Øã–Úµ°öj£îj¼Ö{:nϽRg4°ï¡Žln uéÇéQIKØüÊp7tæ¶E¡,xã¶i’Xñ¼Ž±G6¤}_K˜FÝ€XóÓåâšVeû±qõ­É,˜ ¿ÝÇ«ÿf¼`,“ŒñUhO±; ÊÃ%0Ǧ»å¿—Zr¨Ï%¶ûJ±àø#Œ{Wš¬·=I+è„Hc/’>]Üz¾‘ñ»>äàÕXö°Çlƒýê°Æìüߥ>^b×»¹2Qyüy£<òÝMa#ýõš3ÎXî?ívª)j„™Å7ËY–OËëNÇÊÆ•Q¾ïÝ«Š–è-Ø$)—Cõ©3“µˆo¥5TõÇçR*å¾\U/0QÉám«µW‰Û×ÿ¯OˆÉ¹A<¼}ª(€8Üqµ©åË+#8Î*ÏÐךQz¾„;Ù»å<ÜâØhðÝ辕_vB”|烊9l¯Ì1…ü8§btåÜ›ÏfÂòîëÓSÉ,ØvóóÓ Ïå²ü¤þ8÷0_$}æÇÌ1Ž*{ )|HDجwƒÏÞÚ:RÈ>]ÈœÆæjWr©‚ß\ö¨ž]ª #æ(ú²FYe‡Ê~éã“BNl8n{æ¡Yp[!¾£?• Ÿº îéów§~âû7DÂg“™?àU$e\ü‡vNáÒ¢M«Ë/Íë´ñÿêþ´¡Ì’,ƒ!q•Qëš/Ìï¡4RH¯Þþ/×44…—ß3vÅ5Âyç¯ÍüU"FÎ?ÙÆJ•¥m@Ü«+²ãýœQ²G]…Fáܵ=b9]ÉOUbrÑqG(/1°G]ãoÓñ¡>pe¶ó–ïAþ.OËž7véNS¹TÈÛ{{ÐöÇqpda½T?™¥ ÏœPÂY#ƒê6~oºy]¼ 9d¶O3<†ÉÏ¥Š‘‘òãñª¾h\0—‚2mÏ´áí§æ9É¥f˜s(OöwÊ’IIæH¸Êô'¨ô¨ìU°0»¾_j`ÊžøëƒÜÒÕ‡™6æ—3D>U`t4ͪünÛÇÌ´ÕÜG:¨é×½HûÏ!úvíÿꧮ̖‰"Vc—-׎ÕbPy5ƒ¿æ>ù«1d/ÜÁ#øi‘N= 7§AëÚ¤ /U ¸5Qs¸/áƒSEoãÓœóþ½5æn”[Ø*w6ïÃÖ£šI ù—üX ÁÔ•w¤œ+žyæª/¹¥8É:FÛTH[» µ3QAë÷jVŒ¨m¼súS¡‹r¯àÑÌ)‰Žé6Ÿî•©îýÚ¹Ïó¨ðàd}N;T…y+Bhõ4™ V®ß•:yc6z·µ3Í*|ŸLŒf…äîlç¦CSËs^n_ƒaebË• øÕ9C3íO©QÚ­;ÉŒ×Ú ”€zÕGC®SZ•$PüÐà|½ª´Ñíϸ«Œ_07Þéô¦Áê=úV˹É8ó= o(+0ã*OÒ£òs…ÜÛ³†÷üªÿ|ЋnàázÒ  gQEr•ÿU)¶*rˆÍórš»äªs»Õ›¢ ¹óÚ§á'ÙÝ_b¢Y7#­J /ómê9а $dý?ÏåJ"è£<žôY5sHÅ= $}~l7ZSk“Œ¸ÝW¼­Ç!röïH'Ì¿áS¡~ËÞ+-©EÛòôôïJ±nœÿ“W>Ï·S¯éMxXïúÑv_³*ˆÛ=7™¥+±÷LTâ݃mQ¼ñÚœ!æN~´â×R½DŠëÎ }ß~”Õ‡,8n:¯Oj¹ä(<€3Ö”ÅùÏ^ÕOÈÓØ´´+$¿‹iõô§%±+´~^¾õ3 WÛ·¾¨ÀÆsNµ•QåÕêB Þr£§ ÔÓ±ÏòiÛqÝ÷{m¨Üà‚§RÝ8Ý\§<"TÛ’ «nàZ¡ldtõ¬Ì]5Ës9àòÆHÍC,f3Ï>ù­ #*X/NþÖÚ:B§©Ç¥Qœ©÷3þÆ`Æß0ùO­FÖ¤ "îö^µ¤¨²2†_ÁOCéQÍoŽœdSDò#5â€~nMDmóÕ hÉn¨rËŒŠŒB@à_»IèÖòå4š6=ñßMHfc±‡O¥H¡ˆ ß3½óS£Ü(ƒßžkÐ\±c~dèFxÿõêtu',Ê®îj"ìÀ©áUW§Ö»†×O˜ýìóš¿„W÷‹ àŠyëÒ¤PHÛƒÕ$Ûs¸åx©T¡X7Í“šmõEÇÌ‘ßcl?‡hQŸâ?…"‚>gSÿ§¢1v{~TsKf\bäÅP;‘ô©V2xe8þïJdLAÆÏ£SFÌÇf{|¼ûÕzG™;g*0œ~Tª²oùXq¼:ÓÝd öí¥1¾s½ó›oéOádÊò“K*ùlË‘Ýy§GµxÎþŒ‡(Ø [>ßçš’v’ß6@ÝÞ£RyyGÊ# ;æö=½i¾aÈÃýïŸ9S;±ƒ» “ìÊB‡»zP‘\®$$‚rXž0Ç®)²6ã]½jÇÙØ7 >fÀ¡¡ÿ.~nFXUgÊDKîd'®FzÓÄYoÞ¯çÚ¦X>b˜ã¾Ö4èáþS¿äþÓŠ} y‚8#îL¯ËŽÂ²}ì¶{TÑÅ E¸˜ý(ƃ#¯U56ÔÒ4T¢ kʨÝßÚ·Ÿ4;íïM”íRʾåi9—mßÝ_CN1'H’ïØs³«Æ¡i¾mª¡zŸ”=ª&»(ÏÝëQ¼Ä9i ?6*¹{™Ê\ÃÚã‚F1÷¸&…•ä6?½×" y ùW;¿­6YÊ¿ËÈïœóEº˜óì…Â>ÝÞÝ A,¿*NJõì …ÎPËŸA»¿¥$!Ù˜y¹l~\t¬Ìܹ‰£aŒ1Ά¤Lq»ñôæš‘‚£rmcœ柺3ò¹ó…£ä5{ØEDeÁã¶?­9P”Þå8nøö§à¶#@Ê3Œíâ§Ž ϘË7]ÛzS5åºÔ€¢îÜŒ1Û¡§ˆK¶…Æ L-Ø*³ÆÍ¹¿?z™bùmüj¾ÍÊtúÅ;Uà<ôÿ?¥X‚5ÆXŸûæDýèåííVÜ6ݪÚ>§Ö“r4=…ŠÙ“G"§Ž"LS£„/;²Ù©¼sYÊG¡q‹Ð‡Ëó.;Seˆg€ßNJ0ä÷¤£®ON´Š(N üÁyéÖ¢XX .Bïv«ˆ§oþƒÖ›Àõþ.¼Ö«c’ZI¢5Ü­µ[çFữn[ñ¤”¶xéQ´»ÎÖ/Ò3=¬”);°sƒŽµ sêÆJ®×[1>GOéB1Éaü<zûÑiš<·CüñÁ#ëQ¾z³}ÖÇÖ‘²ËßÞ£y—œóв¥Ôw³Ï?Þ4Ê)¿+ çîÓ·n<ów®>Dk¸)'ü*DÉáG?ÃùSGÊpNzTé ŒxÝI½Flq à7cNò[fàvŽê*eF…ù‡¯|Ô¦Œâ¦÷6q×ЀFp,3Mò™›nݼäUÅ·RŸ8ÚËÚ¥ûŸJ®h³X×R+Ówcüé$…› •<ñúÕ ô8¤ò7ŒpßJE­Š»<žÝøѵ³„“Ú§x•ŽdFãîîQL gzQY‚ÐhØ[s·ãýi„s´Ž¿¥K…Ažz«T{ çw^*ã½ØÝú ?)b½ÏZRvñr½è ®C/=ffKÖû¼sëPºn-Sì=+FHYÝ„gè¼ñL6x;˜œõ?/ZÖ;XŽ[Æåí݈?Î¥çîsÇÊ»Žãõô«_esþ°õãïu©’ B)ŒFõ«õ§Ì®gµ›–ÚlcÒšm ¾õwVÜkUmœ®$ûÌzœþ´ŸeØcÓŸ»úR¹¯±÷nd›W1üå@ÝÁn«Mû ‡`Î?‹ ­F¶âEÍ1­pH1øô©ѳò(Gd†\)ÿ¾¿ýTÔ·u'*ÙþU ðº¦réïMh$óqê¢òŽŒq…äÚ*J˜á$ݵ‹×üi†<·ÝËÞµdÄpSïj‡d›¶öë»ÿ¯UäW*Rüˆž3œÿëS*NÖ5XhH`H÷Öœ"%9úö­¥ŒéÓæÔÍk#æAùûÒ›P@]¸\6Z®µ°ÆÕS·wÝ¡­|«Ø|Ùi{¡ì÷±–öƒ<·C»•öéQ­“s˜O^ÕyíÀmÄ,ÝûJV„ñå‡Ï@?¥L›¨¹nAò„,äŒtñõÅ4³µc;™³»Ö”H«.w éþE4¢Þ8çnFkš:;œ’•Ö¢9V'åF{ÔÑ!q;„ÓDL˹U¿ÄUˆ"Á‡Z{Ý2yX!Øv[vjDæ“ït Ó–5Üÿè5$qû ýìý)ÇcHÆ\ÚŠ"ɹ”àqÖ ?q Üp=êÄ\DC¨ù¸-éNKyUÿv¬FÍô§±Ð»Fƒp×€¥Kã ü9úSųmÞr¿ÝÜ*U·!ÙÑŽ~*¯Ñìâú YwOû½(6Øo-Á^s¹{Õˆ-ÆrË· ß½HmÑ[æ]Àÿ s»­OÚ±q¥îs"œ0 ü¯#|ß½¬Å’6*ã# ¯jžA<¯?ÑRA ܹÈSÐþ´hTiìú­©-ˆ_îÓ–ˆlÀ\}jtÁ:r)ùVPpÇœÑä_'4SEv„Îî¥'’ŸuU¸^3S´`¾øÿëÓ±ò).>cÓÚ«epö|Òh„Ûn]ÃñÿõÔY(IàŽ¡jÁ”g%ztSÞ‘¥DPÁwyAéG¼govélD¥×œãzFe*Àûå¿ZaÈãw#šÍ$nã国W+»…r7¼å»Ô.@f$aN7œû¶§ÞŸ§µ4ìÎY³ÇUª²2ŸB"Ê[pfoOzeÄ¢<''Ö¦,nAÇrW¨_æ\íç­lX2õsº¢p2ûáj_%ÃR§o\Í zœîÏ9£c.Y7`w;ŸçRC ¿Å޵,q1 ã'Û—§¶)ñÂÛD„åSË&ThûÞ`ªëóH‡ùàÔËŸ”ñÐÔ––“ÞÌ-m"’V ±ÆIÇJç~&|løð.ÂM_ã'Æ_è1FÄI ßÇ-Âã¨Ø`ýH#ÐÔJ­:_þ½¬.Š›T ßä½[Ñ}çL°¨Uo׎jôú[é°-Þ¦Ñið¶›PmÕ¾ža¿à9¯ƒ¼]ÿ»ƒÇ¿føKû þÏž%øtÅkqáøÙ®'cǘ÷ Khû’Æk¤ðWìKÿý¤<@Þ8ý¬ÿhÈþØÝ¦'ðßÙö·$dä$º¤ï!ŒôË,`µãTÎ!*žÎ„\Úz¥­½_¿íç+žý,› ‡ñ5R}–ÿךVó>³Õ~&üðЙ¼Qñ³ÂzLvã3I©kQ‰ø¶§çRøâ/É«pß þ#h¾$†Õ”Mu¡ê q“œ ëÆMxN•ûÿÁ,¿cÙÿá-øˆž]b<ÏqâŠ^&‹TÔdpÖ´»a³ýÔô¯Kø#ûVüøï&‡ðöÿT³·ÝÿM7Â÷6ú`ÛÙ.$‰ý¶“]Tq5ù’®ãÞ‹›Wò²WòM™â°´!éR’ó“µþVý~G¥lØ0o—æ§®Å(Î3ÂŽô‚Fh?ðr0ç?0Á®÷±çû(’(Ú¹)úÓ€\9¦7?(-íÍ9™ ãÞ³5ØJŽlôå¡ËœöëM8pŸþ½”T£b)#ƒ¸îëè*´„ª‚ cø}ªiƒÝ•üëQ8…!†?*ÑlrÔ÷™9é·ÝFrz§8©7lRÑž:)’Ýô«Œ¬c/†Ãwâô4îhp1†^‡?w­ ›‡¿Z­¦!»j’sùÓKŸq½©áIêqÏôô€ò }îù¥î•öHUrsß µ"’ ñݽ*QjÊmäT¢ÑòIR¡ï@ùn®68âÉî5j4 6•?7ØmGA޵j(ŠmïS©ÕJ—I!±Â§ª·ýõOû(t+“LÔª…>\÷§»¡öâ¡ó<‘å±ÇÎ1úÓ”mp=(9Ú¿9­ºç‰&dÒlÕ£þ>.®.-Ç«Êä*þ&³œ©Ò‹”ݒݽ „eRJ0M·²JïðÔÏ òàÐPtÅwÑ|Ò™&¡¨|lðÄmþøZÜ ÑÞMÊ£¨õ®\ñGìëáß ]~Ù c¼„ŸµZÞxÂÒåÎ1æž}±^Lxƒ'•GÕ»]“ýbŸfÕý‹_5þdP8íCF¬2¾žµgKx¢Ê;¯ |eð­æ)eŠËÆ6nåGV?#ük/ÇÚ·ü+;õ躿öt¿sVÑôkNÔð[HäU?\WbͲÝåV+ÕÛó±œò\Òù¨Ëî¿äX)ÈB? Ô3²•Ú}ëšÓþ9|Ö#g‹âŒp|½Adµ“Ÿö&UoÒ³5_ÚwörÑÙ†µñ»Ãöf<–Yo9?@?…uGƒ©µH¿ûy™É,6:û)[ü/üŽÐ2çÝòÿ‘Xß|{ðãá7‡dñ‡Å_èþÒâkíjý-ãeÞrÇÙA5óíIÿ‚øðCÁW׿¬.|k¯X±…­ì — +¸V3µ-ê5ù/ûD~Ðÿho^ü]ý¡üy6µ­Íëky¤t\mŠrVç =ÏzóqÙæ îÒjròz/W¯Ý÷ØÓ –â*»Í8¯M~W?Y|[ÿ²ý…t qtm WñV½›±µ=/@)m»ÔÞ6aî»ï†_ðRߨ›â•êéºWÆì‹ÂX Óâº×¡µ“Êkˉ™¼‹pøÜª|¹ˆçj-‘ñøØ¶º1×$0èþ$·›þ%—·Ÿ –ùí¥#‘™Vçk¶;é­ÝTc'Nx#ÿÕ_Ö|=Ä™etóLŸøzšÆpwNÚ4Ó³Œ“ÑÆIJ/F“?Ͳ\Ë&ÆK¥*u"ìã%éòiôi´÷(­›(9éü©SOy ÿRjÉVÚ>SƒÁ§Ù¸Ž?J÷=íÏ3ØÆ,§ª¦sÉÉü3N0©]Û[8ËUƒœ¥"ÄñNýJ²±Û•ä+zŠE¶ üXíòÔÀ0P@È=2i]v¯ œ÷ ¥b´‘(l0&¢òx)ÎìòÝ*Ó&Fñüª‡Û¸–=8 |±µˆÊGå”nõ ¢ˆ±•ÂóÀéïR³÷o_Ι&Ö_›å8 —W©F@»v}H¦®ÀÅÛ¿ÞÇòÿëÔÌ¥Žþ?ÝÛLpÁp'§JdÊÛ‘9ÜBŸûå{~4ÉHe Ë·ÓßÞžàƒ¼œ–9úqM’ »}Ö©oaX‰·|¬FÜ/ôƈ¾Ëßð© ’I½wQ" Ü?‹ØÔÊám,Êûc‘B«¸ÏÔæ=à>¿Jj ãЭTEnÃw(ü¸¢E”ÿ{ޟ匎â”FÇ’ß{Õª”}Ñý¢«[‚û™=ÿÏò¦4hNw/ýöE[0¶>§súÓM¼-ËÇŸ|u¬ÝßQ{%-L˜mXþð2ýÜc¿j›ì{Ê^„f­Gk··ãR,­¼›sßÈÇêñêSû9À@¼úuÅM ©'k&Þû·sV#‹,B¾µ")BɪpñZ‘EhÅöªä MJ†\sù{Ôé§ÌÜÙ$b¦‰[`'oϪÜѧ.†ñ§Ë±·cóì =­:(T!P™j²! ê<ÕÛµŽvþ”õ!øcòõqN+Ý4ö|²vІ;v›9ö=½êF€îÞA+Ÿ»éR&×ÇîùÇÌqÔS·îã?ðÅ!ÆÄ1Û®[®f§* c8ﻹÿ>”ó»vÈ•w~Ñå.v»ýÞõ\¨>Ua¶_w¡hkä½Å80,?ˆô婯+ Ñ…oǽ2]ÇdÄ2Ÿøõ"ÌËŒü½Çz‡Î!²Ë·åû»© ÆäÂwdr:Råw¹2ŒdîÉ÷~^7„ži’;2®ãì¹ïQ4¤ù—sŒb˜÷$>.ŸXNQ¶¢ÊU>\ýâ[4ÙîH?ºû½@ÿ=꼌ĒÝ\ûÿUG$äª[Ðç¿¿ò­"¯¹Î¤ãtLî€üÛ¸éMY6GÁŽîùéQù²0u=G¯°¯'ýªnÙßö2ðú_üeñi}RhÌ–>Óÿ{}u×(â%?ß|(“Œ"å'dµ½öów"4kUŸ,Ûè{´RNÿ*·©nßSô¯1ø¯ûiþÈ_uìoŠ¿´Ÿ„ô»ÖbÅ5!<˃Èd‡qCìq_’¶—üKö‚ý§Íׄ|+}/|#š.‹tVêå=n.ƒÝW·5ñÏ‹5Í2þ9o"Sö‡“?+eqŽI-’NkæñœI…¥&¨Ç›Îö_-.ÿ#èð|/ZµgË~‰_ï?¢¯þݱÄ)V/ þÖ> –bÛE½Ö²–Ò1¦ÙvšôÝSð׉có¼+ã]VVþ-;T†nÿì1¯åbYX¾íäó×5¥áÿxÇÂ×+wá¯jz|ÊÙYlo¤…õÊ‘^D8Ò<Öº_£_©ëTà•k¯ßø'õHú%ú|¦Ö^¿/ éW0k¦ÒO›…_~N+ùÃð÷íåûdxwJ]3þ¯Çª¼·&¸û¿ÝûÙ¯høðþ ÓûsOçü/øoñ7Ä2}í{ĺ­Íž›³8$\Ý:FäwT.À•Y§ˆ?“a>±Ž¨©G«©(A}íÿÁ8ðü™â«rSJ_áM¿Èý¨ñçÇ‚ ,ÚoüZЭYYQmmïÒâåÛ?tEf?•x¯í3ÿný‡fm"‰¼{?ˆuI¡-ýiûBd‰\”ç”÷+Æ+åŸÿÁ»?µ»xº—íGûiø+áÖžÊ Æ›á;T¼¨Nè“?ílzW²x'þïÿoøc¼ñ>‹ãϋڬ'tÒx‹^6vŽÞ¥-V3·>®xêM~I›}#¸NŽ!ÒÀ¹×’[S„šO»”¹—ømn¯¡úFKàÎsŠŠ”°íßíMÚ?üß#柈ðXø(?üO^¸ýœ¿`‚z ž§pI48Ù¯D]3=ÖU CÔäžæ½köoÿƒw¥´„üdÿ‚™|j’ñ—÷ÒønÓV6¶¨O'Ϻ«Éß+þÙ¯añ—üçá‡ìÉioû;þÅ¿<5á»ë£äØø7á‡RmBæN€Éä¡bÞ®çÜš‹Bý‡?jïÚÞëþŸÛsâ5ç†t[¥/…týCíZŒ¨y ,€˜`Ï€‡¨¨Èø»Œ¸Ïað­pùÀa^•)iF÷;²~o›9¯Ûðy^c*§^¢„R·-5fûÝì¯Ö1^’?#ÄfTcZ_U§ÊŸ}]¼ÛZ¿7Ôù£ö{ÿ‚F~Âÿ³æ¥ŠOÃy\W‰,ʦ¥±Tì¿™j›ý>vò=H`p¸ˆ~毽ü²VûšÑý×±úzAˆayìÔÓ÷T¯ ±¯“ÿeßø-7ìUûLê1øZçZ¾ð^ºÐ‡k=}?ÑÜàgdã‘þ×ÖV“iú„z¦™ ÕœÊÞêÒe–)®UÁëQ¯G:n矈ÂÖ£.Z‘kòʤm*vã FˆzqÓl çn{ +·;úõ±ËË)+>Ïæÿ7¶Ój·§áZØùÎêp´ç‘­NŒ¤g%£íÊ®={w¥~Ü:Ó0dßÃÇ«n¨:sëS~Æ‹ 8Y îóמõ*ÛãŸZ¹ö~7…ý*Anãå#@à ­ÃêÝ Kj¹û½MJ"ç9«fÁÎ?Zê§©ëAp¢–èŒ.ÓiÂ3ׯ5 ·<ô§7 ÛqG)´}çd4(aš‘-Ë¡Ø6°ëš‘!PIÂàT ¬q·ëS˦†žÌƒÈd9 {èx¯#×>~Ù~#ºk¸¿n /EÛ3>›k¥|#³¸N¾P†òâ\°_hbsÓ¥{Ü!ãæÛÇ4× W~›{W3/¡Ž‚…dÚì›IúÚÇV½\,¹©JÏËò>nñoÁø+Õ¼çPøqÿƒ¸¸`Àÿeë m-a“•ßlÍ·=2×ñgÅ_ðY-G–ÇãÀƒŸ´9YÞxNÂòB›ºbXÃç®Ò}«ì©1÷AëÏ^•ùÑüË#÷IâbxO/¯X¶¼šŒ×Ï™7÷I<÷0†²—7«þ—Þ™ð—…>0ÿÁ|Wsoá¿Ûþ "Ÿ¼E»Ë¼ºÒâ¼Ñ-’LòË5¡v“Ðñ_\üý„ÿà›¾.Ò­üUû8|døÕ ØÍ‡·_|yÔÖ>È'aùƒï]† –ú­³XêöÐÞÛ¸"K{ÈVTaèUãž4ý„?gOëð•øCFÕ¾k„’5φڳé2–ÏÞx£ýÄÜÿ~6Í~KÄñör¯Ã¹µ·~ÊqJ7íEs/ûyË×MDÉxã…jÆ4ó|$¿çíÞžtæí~î3Šþéô?ÿ`?Ùëã‚áðGʼnÿ¼MolÁ¬ï!D«âkϧÝÉk9eó"$oVçz0äýÖí^Yoð¢ãÁ÷š…§‰aÒµ¡±e›T’2ê²÷h¥u€<iÜrI§|hý¹~?üoø¹¬|fø«Ú.»â 溸ŽÏMU†&áT"óÐ*Œäž9&¹õñ·ã)¦½ñ^¸Ó¬ŒÇv<¤vã –§\b¿¥p1ÅKMײŸ*æIÝ)Ys[E¥ï­—¡ù>#ØÑ¯(Ów‹nÎÛÅ==4·rðø•£Çy‹§Í ² nšF1¤#=<þ|úWß_ðAÏ‹†~!üDø=¨Cl]°µÖ­fŽ&ó˜Ä|¦Œ¶q´+£ŒåÚ¿:o!ðæƒ»Y!k ÙM­¹cã¯ÉÏãÆ;WÙßðB¿‚?|YûH·í—w¾ðîŸsk«k7ѺÁ},±²­´Lø2¶×b8@£qäWæ>9a2ÜW…¤1ÓPŠ‚”[v½HÉJœVºÊR*J÷ocí|5­ˆ£Æ¸9Rƒ•äÔ’W÷d¬Ûò[ßÈýf–;û¡ó[¶ÞŸ{¥G©Éu§Yy„ǤyfÏ_Ö¹Oˆ?µ-ÏáÏ>Ô¼s­¼·GÇÙí‰ÀÝ$ÇäÐ}«…ñ?ìû}üjÐd?¾ ØxNÍã?lÓtÈ’96ÿwÎv-Œ¨<ãÞ¿„8Án;ãjpÄP¡ì¨Ié:—Šk¼V­¯;[Ìþ¡â8k‡§V~Ò¢ÿ—p\Òù¶ÔcèÝí­¿à«ßðP_†_ > êÿÁµÖµíbŠ==Y[ìŸ8o<–VùXg¥tßðDÿø*=¿íG Ÿ²ÅKÙÅZ^š×^¾¼˜3ßÚG÷íK7ÉaêP6~íyí7ÿ„ðÍ´¿Ûv”7šÃm-ö­Ie˜ns>çc€F3‚0}kä þ/ý¾=i?ðÝ´Únµá=r+ëY “ko‰òW¨Ý®P¯ñ#ã5þ‘ø5áä¼/ÈV …G>y9Ô¾ÎM$ÚW²VJÝí«Ôþ;ñŽèñ¦xñœ;¥§,-kY6ÕßW«}M‘ý½¸X&1÷©¯óÊî¬ß‡?|1ñ§á¿‡þ2xùn4iêr/ðo@Z3èÈÙFœ©­fIËÿ ýú>Gæ.6n,®èÊxZ@†1×ðÅNñ»òÝ¿JiˆdñžqZ2yc¿•´`äÐѹÀæï¶¬¼[FNåô]´Æ´n›Iã57Cä×B›‚¿(n¼Ô׈…N§µ[ʪz.ÖÆ{ñ¦¼8Lï‹u Ý”CWþöIôö¨Z,gŽVƒ[î 0'ÓŽi? ŒQ' {·Ñ΃&ÝÆ1Ö¡hŸ9N›³Z HÙA¸î皌۳傖ù¹ÛëDv$YŸöaЗ§Ó~Ä®v’Û»m -Ø›~´øâ#,S×ß½l8Ó÷¶3Ê&hÀRzmíN{8Ú5•aQócoLþµ©a™ ù¿‡žJCfHÚêïœÔ¹Fâžúw2´ùyÇ¥'Ù€l"ü¸þ!Ž+_ìK‚ óéÞ¡{GUËÜ;éíT¤‹ö|¶F_•llÿw$Ó–ç çÓ‘ZØmM’*·¯­FöŒ>R˜ûÝ*“‰‹¦÷3Þwˆ‡áô¦ˆÊñåƒèUºÖƒÚÈ7ÌîÎ}¨¾>@øÿg £Ý5§LÊØ ­ž3ž”«q·¦åÏÖ´(Ôˆ ²EõÉ¢fn>ö –êH;xfêÔÿ,(é¸nm)Ü {{ÓY·™»#<úUÇ™êÆ£äI—sò"ýÜzÓ–Pv…^ÿÄzTh“  zzS‡ÝPSoëô5V[ vdñÈÃŒ–9äÔÑÜàb«Däzûj°a>_öqÖ§—¸íhŽ9\ó‚Þ”å‰ÈÙ¼ü;ˆâ£B¬T‘Í8“æd±îxíSfc¼²Ë°úÔ‡åä»B<¸*An?*F‚ˆê@ç,*½ä fÉÝ(8ü±ÅW‘ä.?Þ§Í,k6±àœv¨X€žz‘õ§ñ ^ð¥ä^º}ÑM.cûýú¯ëü©ÎŠÑn µºŒ÷¦y=_knÛÛ½W»¹Kóh‡’›¾T^WåÜ@¤WÈÛ' 6¥+FW•Fû‡<Ò´d€G N~žÔ­Ü‹rûÌk#ÈÇqû½yå©>ÈK1a€IbÇŒ9ÍX0PJõ\të]dž4¼'§ÿmj![Rš<ª°ÿE# ÿ¦‡¹ì8ù¯Š¾*pï„|+<ã4|Ò~í*QvZ–Ò1½ì–ó›MF:Ù¶“únàüÃŒ3e„Âh´s›ÕF=ÚêÞÉ]]öWk†ñ‡ÁŸŠz÷…¯4 üD³ð~«qjÂ×Q“Iût°1éòEÔqìkùÏý²­þ&x+ö‡ñ§ƒ>.xÆOø‡I×'µÔ5i¦Ë]0'Ôíc ð¯èïãÆÝàßÂß|YñUúçøwIžòáäoî.Bû’F=M.¿¾%ë?|g®üGñD¾f©âMZ{û£!ùƒK#9ü9WòïÞ/ø“âÖqšæÜã 5J”!NM»)[žmA{Îr“»Vå^éû‡ð'ðnU†¡ƒ‹uæÝäÛr”RÕµ{-Z²I-ÎJÿP¼’Wv~±Áâ ·žÜ˺ùZDÀ­ŒÓd¾’Nf£vF s_¿J¬œ¯{úŸ!v­÷f“Ãïa#Åo:Ý?v¡†Å_æj¥¢—¸TX÷pª;šŽ•YîSŠR«í$œ’Ó²°ãX´›ùŸ¹?ðKÙöý›ÿfï~КW‚t¼I¥¥ö¥â[-ÆáÉä[Ù[8Ûæ§ÝiÜ$¤)Áúcâoí‰âëm)îüsñ2ÇÃúl+Þ^%¬J¸ì zWóƒá?Œ?< [x#â^½¤Fßz-7Vš?‚0»ãxöõgñwŒ5mbv8VÔ/¥¸r{¼“øWâ·„u3Ìþ¦cÆsó=¢äÔVÑIÉE%ékê–É~¥”qö[‘e¡†À®tµ“’Õõwåmz+}úŸ¬_´—ü‡àóu¤ü4’ëǺ³/Æ+n™2°ÌƒýÑzâÿf‡ðRßø+µÓkWž.ÿ…[ð”\ì¾Ö´ËVƒí(Ͷ’á±ÁmÁ럻RÁ(ÿàƒúçÅ'ÒÿhÛs@ºÒ¼*Ñ­Þƒà™·Cy«¼t8h`<œ;ƒü#¯ìŽ—¤i:iáÏhÖºn›cn°Ùéö0¬PÛÆ£ ˆª_ªp_„¹8Æ­*V¦¿åä¬å/úö­Ëýþ_ðÞüËó¾-ñS>ÅÞ’«¬¾Ì[QWþgw)…ÊÝûIû'~ó‡ìOá%ðçÀïªß\|Ú¯Š5B'Ôµã-$Ç÷ =+Ö’6qóÍïSH>ã5 =ò+úÁå´4cÙ~mîÛêÛmõ?ÄVÄb«:µ¥Í'ßô!XùçÞœSoðþU0·fÎê1ö}ˆL|t§*’r¥òÁ|ïJ±+¸÷ =œ¯b4P£æâœ@a‚”à˜?v¤HßJz²£KR+Ó&©ø—Ã>ñ¯†ï<㯠iúæ‹©BaÔtZÕn-îõ Ž>Ǩê0y­O'?*¾ÞŠž¶ ýâ?*žHÊ<²WOpöo›Cò¯öíÿƒ|ï#¼¸ø·ÿ÷Ô&ËÆï}ðßTÔ1"°ln$âOhf!»,‡¥|qû;ÿÁH¿lïØ#Å—Ö†¡–-%µÇ‡|@%…í%\â9b˜€Üà¨8û¬3_Ðè·)ÌMÏv⟶Çü¿öký¾¼&ºGÆO ­Ÿˆ­`+£xÛK…VþÏ#„‘¿åâ yòäÈôÅ|Þ3'Äa—Þë^KïèÞÏÉéæk˜Eû˜›4ô¿o^èðØ×þ ‰û:ü|ð徟ñ¹­<#â%UI>ÂÒO²6íÞ¼óßòæ¾ÌðoþüBŠ;ø÷FÖÃEæ*iºœr>Þ™(áøÐŠþwÿooø&·í=ÿòñ“O®iÿÚzÈ[Jñ^™ kk¨G##âSÈýO9ðgöøÖü; ¦‘ã]GPŽ V͵՜fI |ÞY#•Fvä+t f¸ð\UB¥ãUÚIÙ¦šiõMZé®Í-ÓÙØÞ©Óƒq–©ÆÛtvnÍy¯š¹ý-Éi4G÷±2s÷]qøPö휕í÷Oc_‰?¿àº?´„l—ÂÚ?í9y¨[Z£-üwá4ÔÕ•ˆJåî9ëµ¥8Oï^ ÿ‚ó|oYb¼×|?ð§Ä–~YyþÅ5Λ(_e3IƒõO½j\A—Ô³wWòoò¹æTÉñ|­«ùè~ž-¹q¶iÑ[ÅHù¿Ïñ‡†?೚oìúÀ-5d0oYƆDÇo–Ôq“Ç9<ެÿÁN~*øˆI§øTÓ´ÌWín”s…ÜIšádAÜrPî:¹ö[Kí7è˜é䨩Yè–×m~—gÝFÂn6ÆØêh6¤ðTÿÀ«òâ'ü¿öŠÐ5{¯ø{ö˜ñRÉùlÃÇ$M°üûVH‚cwÝéÓµ;àÇü§ñ3Àºô:GíðÂÛÅú/‰µ->ÝtÝR(óÕQäÈqóa”ÓuE ÁT~òiwvý*Y]NnXI7ä½ÈýxáWk(ãÒåÀNù^+Éÿd¿Û÷ö?ý·tõÙûãƯå .<)«‘iª@1ÏîþðïF\}+ÙžÎXج¨U•±Êô5îS­N²¼]ÑæËR„Ÿ2i”ü´=COJÁ߃ëïR‹v-÷1O0(g¯\SØ9e-Jb1&B§ÍØw–pËÏåSùJ_¦Óô¤£»ÿ‹­_»²+ÙÜ€ÀžÕ3«ìG¨«F2FÍ#BB¸n=©r£;H¤ÎÀüÑûT'çëùUéb!6œûÔ&Жù}ê••>dáNsíMTfr{ÛŒÕõ¶\eÇoZ#¶$eyí¶¢üº¢£O•”×Ìb'*ÝxúWþÕŸ°gì÷ûbIk∞ŽÏÆd/âë r”&~1q ÏÜ“;s•+^ßЍ`ÇÞ§µÑno#k¤…V4<ÌÇåÈì?¼}‡ã^cr<·)«ŠÍê–š¼§9(Æ+»“i'Û[½•ïc»ƒÇb±P¥…Œ¥Q½Smü—ãÑ-ìç öŒý˜5¯_µoøÇIe½Òo%ƒ Niù[>„ŠÂøsû6ü`ý£ü[mðûᧆn.'ÚVIP”·¶\ýéð€‘Æ~f<('ŠýÉýµ¿`¯€¿´oˆ!ø­ñÃþ £ÃÔBºTžîÕ4»P‚¦O,'ó¯µÿc_Ù³ö-ý—~Ø^þÊ? t¸¬5K8®¡ñÓ}®öê6@Êí,™`N~èÚí_ÌùˆXªbaÂxˆÕ… òJ¬ÓK]c%MòÎJI;_‘6¥®šþ³_„qhÕÎ"×:ºŒ$›Óx¹kµ~Š]4íùCûÿÁ²rC§é>6ý¢té5ËÆ+s%Ž¡3ÚiÑ ¾ÍÉïûà žëŽé>ÿéø?£x_KðŸ‰Ì—z~—06º6“izj`œ µ·vtà瑚úNoZÝ–,ÌÇ9î}«“ñ¯Šo"C´r+Fá yú ú‡Ùf#npå¯xʳRŒý;¤’§OÕG›kɛˈ±”pï‚J…7£T÷æÛœ¼Ó—/d;¹ð·…üdtoxZÆÂÎq 6vÊŠ¸Ï$®3ýq^[ñâ<6ö2XK+›¬(&>‘d€_ËqÀ9pä1ší¾ x’K‹¯²[y»Æ[dR™„dpG®9çžÕâ5ýA%”]2Gö€Ø’á_i8û»°G çÔ_ªàðôiÅ$’I1Z¤’}Ï—ÿlO‰-¥éwZKjSZÇ4Û¡k¸UÕÆ fóew a[ 3œ+óWãÏÄk?M%u䛵¸ËKxF^™'wS»}—ûvøšÍ|55ý„6ö¥æc#Gl.<Ò2 äŸ–2>ë0Xú üöñÅÜ;ÕŒerr˜Èäð—ùõ¸zqŽÈüÓ8«íóEMl¾zþ‡êgü÷ñÒ?|"ñ—ìÙ©]„Z¾Š²HK-¥Öå‘OfMÀ™ï_5§;K7^»kñþñ$è?·„~»½òáñ?…u cf¼táWž§0œ~5û\Е}¾f}k§ >zjÏc±Ñ÷S–û}Æy²">ýtTDÜæ÷ïZ – þÎ{S^ÆGJèæctRFkÛ;|êœm§$>]?‡ûµxCw!ö;©%S€ûªy¥aF4®ÊÚ¼ѽ)²[ù¼Å\pƒ¿cߥ4®[úsG1R£Í©DÙo½»Ôâ™öMãzŽçµhíÜÙ4å…B³`ýÞ>Zåb¡EDÊ6d!;~ï±ÐS#³aÔeqÈ5¨ÑBU¾”Ö´XÆIÝSíVaìï©–mq\ö{­8Ú9__–´ ”®3ÎqøÓ„%_—¾G>ÔsìÍ™ñÃ×)óþô·ÉèÛÙ«mÎ1·œî©>̃çỞƦR.4â½ã=¬ 0äzÓ^e'ôÇZÐ6ĺí ëòÒ=©~ÞÿÝ¡K¸ý6æSØE¸‘×h³†J\Ú–ÁÇ8cœÓ‰BäÇ¥D˜o§÷iꛆÕ^ãúÓŒõ/Ù˹#Jï'ëRG/'þŠ®Ê W§"…2nEÿ?áUÍ­…ÊÑaÙ·àÀçæ§nóT|­…\€W­FïpWnyÏçS@ÀL-òÜ¨ÓæÔ“nBäëH¾`/,ïÝ©éžUñŒr`qNKGeÁn½G—™^Î[D7•MÜß{¥G,h¨Ûa´zU¨àÚä.Oå³p¼6}ù«\¨=Œº³ÆŒ»ØüݾZoÙÀ ¸ž›½h=ˆÝ’™þ´ß±åv?Þ^£I£:‘èR†ÙrĶÞ>^3Žié aƒ$ƒÎ\†ÇhÜëéÛ¯µN!©?Ÿ·52zèLiË¡JÞËåù¢?1ojš;M®ƒ‚Ù5iUsÈÝèAëÅ9£ùr‡Üýõõ¥~…ò®£ô;xb×­n'E+ …†Wå.T©ÅjøŸWHËËs»ssë]o‚þ Kã‡Sh-云&´ºN§ålwú{ןx¿Á?´ öü)¯e…~Ùž[2…Îí§¯¿5þqý.8?8Û0¸¼»:ø<=H¨ki¹ÊU%ËÞ^ìn–ª1]ê_q\;’äîž*¬iÖ©>gÍ¥Õ’ŠæÛMtv³lü©ÿƒŒjÍWMÒ|3û%xSW’Ùuhÿ¶s-õ½Ý“"Ì&éžÕâ?ÿ`¿Úáäß¶ƒe¬YÛ³‰®ôå¸XÂŒ³0á•}ÊŠý“ ÅÜ;޲¥ˆŠoD¤¥ßkMEß˯Càëäùž-Λ²Õµi$»Þ-£Å諺߇uÿ ]}‹Ä5ÕœÛr#¹…‘ê29MA'¥}_5š<Û¶¶–îe··‰¤’F h¹,Ç ¹¯Ü¿ø"×ü‡@ýŸ<3¥þÕßµƒ ¾ñæ¥n·ð¾©j²Eáø]AIåFÈ7dàÝ?‹8ò/ø7ëþ C£øž×Oý¿ÿhÞóMŠáÏßÝG½nfж¡*ž ##Sœ²—?usû 4“ÝLòË–f9f5ö;‘GþӉ鯆/í>í*躽vµþG;Í%)<='êÿOëòÞ–IdßrìÌܳ§Ehˆ2¤Ž)‚¿¥L¨á¶³}~Œ¶²>Z4¬îBö˜VÂçÔÕ€0ÞGãW2pÄ·½+@…¾TÿëQä9S²Ô¤aÜ5lÈâ£9áJgû«üêü–ëŒ*Fµ^¥sž»¨'ÙûÚhQòžOœ¯»N0€¿(ÿ{"¯-²ç†íÜT‰f„n)•Ëö(ÃjÍ׊‘mãn<½µx[¨ã+BÚ¬gÌ’“î?a¡LÛ”Sí÷zT‚§hÈü*ÚÂåQîi>Π°#ÿ¯ZsH—GÝÑD[ ‡šîU–qòçZ`CŒŸû戶÷3öf'Ä?‡^ø¹à‹ï†ÿü5o¬hº”F;‹Kˆ)þÚ62®;0çðâ¿ ?à®ðE~Êšíׯ/€ÖjÞ ¼¸y<›xòöœn*@+Ÿ—£•=T~ù„ÁÀ‹#§JƒZðþâëÂ~*Ò¢Ô4ÍB3 å•Âå$Cüˆ8 ŒpA¯•â>§šÇëV©â"´—I/åš[®Ïâ‹ÕuOé2<æ¦[/aY9Ñ“Ö=bßÚö}ZÚKG­šþ?Öi÷*ÃÓŠïþéºÞ¯gͬÒý½½£C/¹ºpFGçŠûÛþ yÿu¼ý›ïn?i/€š4—»”¾¥o üÖý÷†ÅÐ0Ãc;«ãOØòòî_’õÙ¦µŒ–4ϨÎ(Æž U¤ù¡$œdº¯Í4ô’Ý4Ñô‡ìõðKÇ~òu¯jºµ¬;CÚ´zzK¿/ªØ, õÚ9éÇ5ÓüUÔ4ë9aÔìü_6™u4ñ‰¡Y†âç÷ #|²~|˜ý1 Ëÿ OñÃ7kàÏü:žÏOšay ­-ÀƒcL%Úß4ñ¦ÂÌqU8Î0+—øµñ¶ßÆVU$Õ´Ù,¤µk»«\Ám}Äic ÐI¸ciXØapì¤ãÖ|ÒwoëÌù‡È£h¶õóþ´Ó¡â~?ø…⻽TÔï+jìÇûyø¢ÖÇXe†ÓŸo ÛÅzÀ[m@Œ*Hx qÀsĘ'qüOŸVÄLÆ—sËc· íÏ^j‰»rÜsYÑÍ%¨¥Iü»žÅL¾ž*›Db—s[Éä1]ËÝXè0AîcÜT-lQJ°^œýkóþ úÿ‚Âê¿<=kû ~Õ>.[sÃúH_ø§Q™¯lâûĻv9;¶~é'õ>êÊD• ‘J°bOcþýú×ÐðÏáxŠ¥|4ãìñ4ªSnöŒ¯ÉR/NhM'Ë$´’”¥ %áç#+tç~jUã$¬¾(¾Ò‹jêû4Ö7š`çn?‡Ò›ö)ޝ5 mvÿSZ&?5}o1á¨ÙX ¶ÎOÞSOòw|¾OsVL›-•úW‡ÌßÊú‘É.†|¶ãÙqÕ;Öœa23×ïzT_g,£äþ,õªç{é_ršÙÇ(bòlnª­Þ›°+32ÕÏ## îvÿZî>|Iÿ µk·Mµ—ÂËŸµÈ;öSÇ­xùæy—ðþWSŠ“P‚½’»o¤bº¶ô_’lïÁeõ±ØˆÑ¦µró~G3áÿÉ}hšÖ³ Yu½ºŸš~~÷ª{ðOn9­Ë{ìmŽ!_¸©µQsŒÐ õ­SÁñ@®ÆÝdÝÇ–«Á¿ý]«ñU‹Å]ÇBÝPíÙö¯ò3éÅ!øƒšO›Ttðt›tpп,«žOþ^Tµœ¤ÕÒæQQ¯ýÁù~[‘ÐPëԕ¹¦÷~K´w²Zuwgšx§DFȇÈ»]GF_ÿ]|×ÿÿý¬4…~#Á>©¼´i£Y$›vvõÅ~GÁDüQoû.Áh´‰÷Z:Á¦êþ ±’êcbêÏ$Lì¡”lʪeÎ:ðIZßèkœâ0þ!b° ¿gV„›]¡(¸·æ¢æ—]_ËÒñ¢–ANNÍÆk_&š§Ü~ÀY|E»»·DHJÆÇts6=pwÄrjˆ`NÓú6©¤~/+FJä¾<ºÓü/ªê^.ñ/‰µgŽkAküËhQ7}€3çœ@89 WÎÿ¾8Yxw[šï[×-¾Ë :¹‘^Cäìów„`êêå˜d.ÃAµhаBu­K¿.K†ŠÕu ÒG20ØClo-P±ðŠüÙý°>;j–ÓÝhú/¦³–u[—°µÕ<ÖŠ}Þc˜œ3•s+ò’¦2ä²ú1™ãæ„pÑ÷ug±þÐßüñdð_†-ôMr;ëU]Þt]9aÆÙ$ñÁ8àžÁ>2µ}>YíîBUZݱ¹6ÜcÔ~•Ékß¾!__µ×—™ûÅšda"ï9g qËH<óY6ž;½7^Kɸ•fV~QÿÝã‘ã¥zØ|UqämÙúŸ3[/Æâ«}bI'Ù5·É™õ'ü£X“Aÿ‚Œü"Õ'›k?‹RÚf rÍ‘c<ø¯èx±3êNOµ4Ÿ³'Æ ;á§ÇüXÑIáiº…í¸ážî¹¸(ï_Ó£%µÄÿk·}ÑωaaüQ°ÊŸÄ^®¤lùuÿ†EÂ2Tí%k7úI*gb(úUwelØÁ§Ë“œ6y¨Ø#ð§¾>µÖä?AMË»½ýêdónw¿¥8"ƒ·?‡¥PoöH횆×0㈰AaõúRHÌ„;½x©ž-ª.{æ£ t!³»œÒæ`£»’~b*XÕŠ0'ŸáL>68íS"|ý}þ•-—¾ãV'ê}~Z‘-Ù“zóÎ1¶DÈëÐæ¤ÜQKm?(ãÖ—5ÊŒ|ˆò†û»}:SE ##ùTÆ@P’Ÿ.ìŒ7JInºsÒ“–…*|Ñ»öxÊüÎî´Õ‚§T/9Æ7qº£ûN9WÎ{ÔßAE}¦‹&8@Ç^þœSXFW•~V¨Mø‘œþtÃqòlÝÓžjuèW7,¿AÓlp7s‘ùÕK°2§ëRÏ:(ŽÚ«-âž?ð*¨Ü¹:|ºÎÅs¸àZ¬ïƒò~«š’{¨¸ÀÜÝ÷UU°dÝóuÝë[ÇmŽY²‚[¿‹8©RFXcæéJbv?+}Óô©Uí­Ðõ5t9=Ÿq±îCNœÔ‘-–#®iÂU;²qÓÒ¬Ãlv,…[ŸÃ<ô£™-Kp×B rÍ!ùjt„ç~yèvôÆzâ¦HñbOs –8™‰žß7nj¹‡znB-·ÍƒócïU„¶gÎ>ñ=@§Ãc'uÜÞÕjÞÉÊínßÖ…Qr»‘Gm´ç¨ïNXO_¥Z¶±f“GbsV¢Ó1÷ŽïÒ¦UbŠŒuÔ£¶9+ÿê©¡¶ÜÙTúf®Çc#ƒéеƒ‘’»•fêô4XyJÖ2¿³Ü™zTmf¨>N¹ã°úVóX¶Ò@Ëuú{Ô3Ø’0F=Ïz¯mbe‡R{­m÷Vô¤%Ø?*Ñ{w?Âì½*1`TÛùU{DC¥}ŠIŒ |¾Õ{ÃÚø“[´Ð°onÑ è ù¿LÓ¢²o3YÞ5Ó|-ÓÕ|ug&v˜ÒGSÏ\Ç¿5†'èá§5ºOòÐx|?´ÄF nÒüQô/‡ô-:+²±M±Â¾\q®0v¨Ÿ¥:}Αå¶ÝÇï7r¤g·ù7†džÚÑP*íf?37~çé[¶lbŠ)- Hs·wo­~])Ê›mê}ôcͱÈ]xNÂwóo­#ò3òÅ·å#‡rsY÷^ c†ìà‡vÕi£U|~•zS[iHæf¤UãxT×#â½:ÎùŒ—sË£~î8úóœ’}ª¨Vö’ÕJ<›³Í¼Mð÷E»³q©xD[8Ô†1Ú¬ŒËŸöç5ñWíÓû2ü ø…¤Ýx: ]ãS·ýýÕŒ;&RÌÅ1’OlúWÒ_´Äè?€>ÛÍy¬\ÉûëÇ_Ýéö§;î) ‚¨ƒï1ç€Æ¾iñ«_øƒSk½Bù§¼<\^ÜÀà`Ó½~/ãGŒ9Oa%’ac¸ê°½¬œhÅü3¨¿™êá ö”­”ÿTðÛùqf)c1’äÃS’½¾)µöWhô”½RW»^ ñötøñ+áõÏÂox@ÖôÉ#[qquÃ}jØÚ²AsÉY Áã5ùÙû ÿÁ¼iûMþÞÚ÷À¯­Ý€¼¨­Ï‹µ™>ü¶LäÛÛÆËò™¦QŒƒ€¡ØghôÿÅÖ¶Lum!%…¶¤7P€ª[¾áéž?3]?ìcñM>üfÕ¾ë©kâù–h¥†1û«à˜P[©Rœ`Ÿ”ŒWâ>ñu<·‰#—fUä°Ø†“mééfµ´y¾;&®›øOÑüfáŒ>;'xÜ®’U©-yRNPûKMÚÝ_]ì}Máÿ øsÁ^Óü à ßIÑ´kìô2Î Û[Æ¡QG@5oÉ}Ÿ0­YôöIJçsߊm[gÝü+ý,¢©Ó¦¡MY$’]‘üQ*R¾¥8`9åþ*XÓhÄiÚ¬GfÀï qR5¨«Ûq{)š,Ûùç¡ý~´:Û†Ý鶬½¸_º§¦j'‰Á<:aËÐj/u¡”†ëÇJP›T/â(ÚÀv‘éK›R@늕@Å1±RGÓ¾jxH/ëúÑÌ\b–ƒnüBŽM/–Bä Ø« o˜ðŽ:Ô±Gò·h¨ç±¯±¼JÁ ¶æz{ÓXÇh_Z¶-Ö6]ã9þ%¥E,#nä öÛéÿÖªS÷„éé±UûÍ·¯½4€O¦*C ÝU±úÕ){6ÙÓ¼a æ¦E%°N;-:Ga»yéŸz½ ›°©Ûü©Jh¨ÃÈÅñW‚ü'ñÂ:‡Ãïè0ê:.­hÖÚ…•ÄyWVϱîQ­?_¶ÿìâø%Gíõ“n.%ðŽ!¹¹ð¸ !nÙÀM …{«£sœWôU¸ïONõâðPŸø'ßÂ_ø(ïì÷'Á‰…Æ“ªi÷FÿÁ¾(µæMÿnÐÅå¤.>Y#ã )0|Îq•ÐÆUXºqýìU¿ÅÞϽµµö»¶îþ¶^W†”½ÉknÍ«]vé~ö]ÀþÑøsPµðåíÑŽÞ’BÖi\È‚o¿,[]dÚ‰‚6a° “^AñkâŽ}«µï…üG-äqÛÁuf¶·2.YØFî’<3qaŒö4ÿÛGöSý¢?c/‹—_i? \išÍ˜/kp¬ÒZjVåŽÛ«iHX˜ç 9!€`ExËòrÒ¾;ŠörqŠÿ;ž¦ +§Ê¦äßätmñ/]ŠFm6Qf¬¸’aµOËÐT mÀ` ½S]mZF¹º…|×f- u9è9ÆJ΢¼ùb«KFÏ^8j4åx«w.~÷çMæŠ++ênn|9ñÿ‰~øëJøƒàýFKMKG½ŽæÎxÛYNqô=¨¯é‹þ kÿðgí‹ðƒEÓuÅ6¬¶1Go#\,smùì¦ÿiN|²~òàs_Ì zìóûJ|aý™|umãÿƒþ2¸ÒïmæGhÕ³ûXOqìGb+æól¯2–e†ÎrŠªž/t¯ðU§&¹èÔµß,­tìÜ%ï%}W¹–怭–f4Üðõlî¾*sÃRÒëi-££{×dÐ2îR1ót¨ü°ÄïÅxoüÿöâÑÿà¢ß±îû@ .+ zÖâM+Æ:\2n[]B|ã¾ÉP¤‹‘ÁfÃ_A-˜îýÚýûŽŽ;Nº‹2NÎ×M­®®¶vÐü—ƒx|D©6š‹i=lìô}»÷ï­ÑDZ¸;BÐ-_ŸÝæ´¾à»iÍnãƒüú×S¨gì"ôLË’#ãgjgÙÙº ~+_ÈÇþËLxqùÿ ¦„ûwáßx»Ä–¾ÓŽÙ.¥ù¤ ‰üOøkêM3ÃvÑ-´M*.ÞÒ!J½€þ½Ï½yïì¹á£·ÔÆibüú{«ùmå¯sìr ,pô}§Y~]?Ìç5k08'ZãuÏÿjÆm̺‰¦î:ýs^…ugæ¾à>jÏ¿ÓÈhV?½Óë_ÌiÁÔóªsUbœw[ó-íé}ü´>ëŽxy+ny:x-®.£v|µáUW§=s_“ðs¿ƒ| Έßo\øã=S]—T‰ïC<Ë?“ ŠW.>RÄŒ«à6°$}â|sźŠÇ<–s]Ç#ý„+ ¢«r>rü7Πç…`w{ò£ tÚµµgÌáñUñX®{ßEoëî<×RYRÛý*àïá-6OºIHÛ¸g¤î€zítÕI'³@ë§Äë¶EòÙñ”rÃg9<ŽÝÈéZ7ibæÖÖöIZ8|ß2FªÁ”ð<›°>ø¬_6v@HiS*«ùÕò¸9ï×Ô“Éæ¼Ÿ»•×ü/³ÿ/.ºŸuCÞŽ¿åÛ§ùùôÐÔÓ5y—,ac·¾n¹êzο©OÙ¿ÄRø×öaø_ã+™ͪ|:Ñ®&l]¬¢ÉüÅ+ú ­Þ³¬Ûiv´ß\,…R]ävÚ¾y#ßé_Ö/ÃÏ[|>øOàï‡Ä#ðŽ›¦ùJ0Ãkl0:r¦½¬ž´¥'~ßæpæT£Û»*;‡¯áL2 fÿ>µvdPç¡`¥Ô¡æ½îk£Ëqbe^~´ÇbØqß§Z°É9 Û’j9#*3ÇÝäb§ rôEwÎpÇm2C»êYbloÛótÍ1íÉNßš åìBòóT‡¹n?»ŠcÂKr3Ÿn•/îÃó×­/‰䉞á%±Í5æe8'…A*È8FlãÒ .Ãi;†1‚ôƒáµË†ësof—æëPÍ|ƒ…#ð©Ë4­÷‰ÀÏ5^F—f6Ž{Ñ˵ʕF¢^7ïÓ+ÿ׍ޣ€É+°Ç…R–Y#r¤÷íPÈdl¼`ðhåDó3J=L«ª£}ÑŒÔÓ_Q„£·'?a™gü\~”é&–?•øùˆÛéUËäói±¥. ¦1ì³UeÔ '#ûÝ9ªor0]÷n6ôª×áºõwµi˸½¥Ë«GÑ[ÔTªÄ§ TñÔþ½Rv'‚qPyîŸ*Òž¤ó\Øm.F;#íßjTÓ$ÛŽÿZéáÑX7Ý%¿‹¶jÊè…Táõæ¹%TÞ4ÔæFÿÞÇáÿ׫qhîS ­¶º84Idà知h[hi .î1YÊw)aåÌrñh’:0»þMX]S‡+ÑrËë]dzTh¼ÇÛÓŠS§®ìˆýê9ås¢4cØæ­ô…5éþEXI@Ïn•®ÖâÄT°Ù™[O™îO±‡C&%:î9íïW!Ó^Ww­l.™@qÎje±IvñQÌi죻1F–îŠ<z™tÎ3´Žz­¨ìãFÚPuõ©~Ê¡vñÒ—9´cØÂ}:BªØõâªÏ§0C}}+¤òp¨Ú ŸòÅW31pWÐåÛM+É ÎêNÈÞ}k£kæ9dçýžÔŸÙ«ŸÝ¯Íýê9ÁS…Ž~;Íþ¯œu­ÏBöþ)·¸ .Õ={p*dÒWï? ’à6h×qå[î«gnã?•sã%|$ý¶ñP²êZмH·W Ö¥Z(c ¿/ñgŒú×A«"\D±‡fŽ"ÌTñ!#úf¾~ð_Äé/®RÎ̼vÑÞ²Hß1Un¸ìôõêþ×§º·–y“lýd ýÿº§°ÿ øyRº>ªtù@¶–;{uY‹M»“vÓŒœûcúW‰xûã<Ÿéÿ|9Ž5›XÔ6;T½ly÷s¯$Œ ÛÐ üž8Åp âkåÉKÈùtºƒjÑvÙɽbž‰')/…?{%ËcÅSU¾ýëúÿ#Êï´]'EÐ×Â:4·0’I¤¾¸lÏs#31y¹9À^_ãOƒ.šæQo§;Âӳɻ«lm„/b~f9?ÝÅ}¤ü;¸Õä7ªIä•f_â!Cgÿ­øClM©²‘³-Ëm ¿Ê»†v‘ÝÏr+üɧã ë0«šcå*•k¾iNm·)hÝïï^Í%Öí-Oß2üû ’ÑX|*J+t¶ù[¡ñ7‹þë ~¢-6Òâ'jÄå~o¾Àu= 8ÇJçßö}¡ÃÌóFÞdRî£uÏÁþUõwŽüfa_³D"’8Àf†ð7vçpú×&š K1…‚‚Wåǯ5Õq’›õ_¯õ¯™í¬8jÑ»y·ð[¼ñ7í¶I7Ökök¶aþ±—£~#õ®‡ì`À~U“à;?ìËù!hŠ%×SþÐèkª—NtÊíÉÖ¿×/ø³Å^àëãezôײ©­Û”4Mõ¼¡Ë'ݶ#q¦[‡ÀñeAZœŸ4WD¥­—’wKÈÊû8 ’¤Pð2¯ Z"Å€û½(û2‘¸€~½«õÈÔî|·+2Ê'@Ÿýz†KTDÁ8ù»ô­)-ñÂŽÕVX .ÞO"­K©œ¢R’Ü`< bB‹!F飼"݃˜Õ:óR‹v'nüžçš®dfÖÄij¾f1•o¦*ÄvÁ¾`•bTM³ð Ô9G£49E²¬v‡oãwzq€TŒUå·}¼% nÍÓÿ×PêZ<¥ låEB,äb@ë\YeŽGçKö˜UŠŽâŸ´‰¾ñ‘ö-µ~ï½=,÷vþuª,ø ¯Ò‘ ;¾TÝÚš©Ô;í±J 0}*ÊÛn?)«pY—ù‰ÅYŽË÷{Ô{MKŒ)Æ6E(혜î\³Nkt\gùUô´PA þ”³YªÃúv5Ÿ´W){¨ðßÛŸö ø ÿø!sðC㎙åÜF­'…üQn¿ézÙKþ$<Œü®£Ô?–¿ÚëöYø£û~Ðþ&ý›¾0é©o®xkPh$’Z¸OÍÄGø£‘ ºŸF眊þÀš-‚>¼WÂÿð[¿ø#­—ü«á]¿Å/ƒ6–6_|§´z\’â1âK r,&ð$S¸ÂíÀ%•°ùœ÷,h{zKÞ[ùž†_Œö59e³þ®3g#ƒEu¿~ é?›à‰|/w£ø¢piš>© C5µÙ—Ë1Ȭ2¤75ô@ø%ð¯á½²øQ¼iªÞ[e/5mB2ævè̪Oȹû£9ÎkòÌã<Âäõ!NiÊr»I[e»wjÚéݾš3ô Ÿ#Åç\Ò¢ÒŒmvö×d­{Ÿ'Ñ_GxŸàWÂÿX\®¢®—xy‚k9_hÀàlf+‚qžõó¾£fúuüÖáš™‡|V™^q‡Í#/dšqµÓ]ýFy®M‹ÉêF5¬ù¶iÝƆG£­t^ð„„».d’>…¾_~•— Z‰ç21û¤õ®ÛÃi/ÚSæÛ·Ç'šúÜ· ¯šjèù<Ë:0jÇéWüõûP[~Ê_î¾ê—Å<)âázÜr0Ç !c¹Á?y 㪖ôûÆúhFÊ!†åeä={ñŒWòíû/x€øwÆvº˜o—ÎUm²|ÅqÈÇ~µý#þÂ?¥ø×û1xwÄZ_i± :ù¿¼Ñ…Øäú”#>à×Õañ+_Ø­WGÌáe,F¹»´ÿÿÌô6°.¸e\ŽDÖNÕÛÇæ+y­G–ʉÉç â {&@_Ãø×§A^Å-™‡ö`¯å c?ýjlcGÝŸA[ri’e‰\ž¹³ðÛÂÿÛ^6°·š,Ç ùò纡Ïþ…ŠŒF:|<ª¿²›ü )Quª(-ö=‹Àšð¿„,42Zqæíï!ù˜þdÖŒ½3œsR2’ÔóŠüO:˜Š’›Ý»ŸuN1§²+<%òqŽ*´¶»3<˜ùG¡"ÿרçŒ4 ¹ëüUââ²øÔM¾ŸŸC¢51Z”±XöîÉaŽ˜¯ÿà²ß±Œ_¶×ìCâ/‡_ežMWI5]KX–I¡’¼µ8 æ=ê Á9ûþŠg¦+ÄwA O+ª†•wnû¹'ý|ûWÀæ”ç©ÔݧM©&»§}¼š¿ÞÇ¥J1­ j¤šüâ+Ç:λàoˆ,[½]^Îå£Õ®¤¼23ÎŽw|̓‘€‡¶Pãƒ^ÑðÓÇV¶‰‘êßérHWløùCñ†?Þ@@ã$’qV¿à³_ õÿƒðRoŠ^ ñuÏ“%LjôaTm÷².QqŒŒ d‚KO‹üñmö›© > Y¡“"H¤Y6ã$óÊÿ¼¼Ž½kúC…³o¬Q¥VÖU#[{]'oDzô?1â,¥UÁ¶¾(7;?CÜ5»÷Ô$šÀJÓ4“ Ò¾N·x’Ùv$¦1^_â½k:²žáK¬XÜmú OÚ¼mq¨M6üÄôé_ÊoìÁñ¯Sý›?i?|}Ð …¼'â«-JHíßïÁ«æ§Ñ£ÞûÕýXiZö‰ã]Oñ¯…¯VãMÖ´øoôû„l¬L‚Daÿ"½ÌŸ–”o­ÿEþLãÇGÚZM“ÀrqÏ­ELOó­I,”“Ö™Ž;ùÿëW¾¥¥®ynšÖСöw+‚}©Æ ÌÓšÐkE;p6ÙÊš°mC>åªñóg½L¥Ü=›»1þ̬rWòæÓÀ?(ÏÕkcìAF_/×½H,c#¥gí cGÌçe°F;HÇ¥U}/æÊŸÒºWÓ£?(LnªÓiïÜÊhLhÅîs³Ú´`0?U–Ø8'glWCsjȘ#w=+:êØŸ•Z9–ÆU)¸êcÉPPúg­DÛ6á¾oNzUùà8£$j›ÂîX²ôûÕqqhÆQ‘Rh÷H$)ÇVÏz‚xTpýõZ[4§;WåìiÇO0ÿ€‘K›—BãNRцðŒã“þÊšF´‘ÉLsšßþȈ7+øTÐéªW_âÍ?imCØÊög0mds±×¿>ß§§I•ÛÌdãŠì"СvÜȾ¼ÓdÐ×w¿áSíµÐ¿ªÊÚœiÑåí\ö¨Ž“)lŻ쩮ÂëHüû³þõgI§²¶ÐŒ~’ýjý·TD°òGy–¯€N1Þœšpn æ´ðOZp"&UÛŸ¼+‚ö="{£qNf«I^1D%Hç0 yÛÿÖ¨ûA}-Àä~5E¸óÑjÐù¸ÿ¯A‡ ü£üióh/BŠØ…`@üªÕ¥’îàTÉËÀûµ,+‚yÏAK˜i_úô-p*{S×O—$š·olWw1ô«Ãr£wãXóÈÚ6jÍVĄɯ=hkEéÇøUÃ7Ί; D·ÈÚÍŸ÷{ÑÖãåŠBÔÛÇÒšÖÒnÁ8­8ìö¹lô\Ô¦ÑåXÏÉÅ8ÔŠ"qlÇŽÅ€T6ê’=5™²#Qžõ¯öEfUXðzôéVí´ægÝ ¥*ÖWÒf]¦‹æc b¸ÏÚ_Qü.›ÄP[ïš;€–ñ®0d*vçÚ½fÞÅ@È?…yïí¢½×ìãâ+ø`F—MŽ;Ø÷ýßݰÏáŒþuÁV¼§»§ùxXû:ÉžðŸÇßÙöðßO©Ç©Í Š!UlRÎÄ‚9ä౟/µ{ÍÿÄ­3áÇ›Ïkól[{’YœÊØ$õéÏO¥|7ðKÆÚm͵åÏöB{Ùí#Bó$k'Àvà_œzè¿k¿Ú;Ã>=ü?ÿ‚|éQÜM«ø»X±µ¹¼¶¿Å`òÊv²(_Þÿ¢—Œ €øÎ8ùŠøŠ8Zs­?† Éú/êöÞÇÐÓ”jE7Þß>‹ñ_yõ?üàî¿ã}_Ä·ßÄi£þÒñ¥œš7„m!‘˜[h±\gÌlž$šTÜGeDï>¡½ðüOyöùT|Ì¡½NOÏ7Ã/†þø/ð·CøEà-=m4ipØé¶áÉk´d÷=ÉîM;YÕmãÜ[æôíÈ óžœWà|U‡ÃfrU±«šmóküÏK-þ”VŸ W¿_ ÂJ¥7hm·ÈÏ‹NµÓÒ2‘G³`R̽¾E?˜5æÿî,í‚ÜÀÑÉ'Ì„gî ìÝïÁl}=« ñg‹<›]Í*|³¨;qýüzú£~äúîµq3nŸnIèݸ<þdŸÆ¿;Æä8,Â1¥:+’:¥m¶Õ.êÊÞžGµK:÷6¬£âûÖ–GýàeÜNØù¯Ÿ?sobå€ óúÕíEæºZÝ‹îÁ?xmú}*¼®÷K/ÌEÃþy¯™Ì8/ ÌÚŽöþ¿SºŽmW¹n%{Xã™$Ç̧‚r­wzT©¬XC~›X2ãvÞ¤W I ,æï~é®§À7$I.šüîUxÿ®? þð^¥NÇËô…Uªí(ìþjëî>+Š¡e%[¬_à÷ÿ3Mì€mïž•^m(ºœ õ­Ó ±ùS¼æšÖжWnžqÓŠþ™U™ðr¦¤´9™4¼¾]W:3ã>_ø³]Q°ÞÜ"ûn©!Tïv5¯Ö,Œ%NW8õÑÊ‚Bô4ïì·~ï½u“i±¨Û´6îâ„Ò|¿‘âŸÖ£Ô•O±Ï[é›iÅZ](¿ Eoťǜ¢Ö¦lYÂÇŠÊX¾Æ‘§#ŸHÆ éóiË£¯Êœúþ5Ò®œW¢ÑýžÒc¾k/­³OgÔçL=úS×L,òÛ§U^•¿.˜ªCmǦE dŠß(9ö¥õ¡{ÝŽu´äeÁ¿\ÓN“±Æ@lñšÞšÄ2œ 55lâáÑzqŸJµˆdrõ3­ô¤ãt{MOöœFŠ>lµ]\Ìyíº•‚HFÔúVn´žåE(èŒáf¦L#¯ãL}:|`.~¼Ö™Ef]êO×·µ2êØ<`èß(õ>”*®á¹ŸöøÂ|Ê>]ÔÄ´h‡žæVìGùÿ¼mÝX;?o—ÛŠo*þab¾žÕ~ч»sâø*—üáïí­¨é¿µ¿Â»ôoŒÞÛ©ÙËgf†/-«$«eu’¹”ì*“•É qÇO×¼5ñ7WмC¡M¦ÞÃrË5¬Ë‡¹ù ûw¯ê Àºtw:¿Ûd¶Ýøº×ùŠüÿ‚èþÃ:Ï…>0ê?>xŠk-/ÄβȱYÆÿg¼êÑ‚G ÝGÔŽ+ðŽ:á\Û7âÈârùCÙÆš„£+Å©9s]I]5Ê×4ZVvqnòKôîâ|C“ÕX¸Í§%$ãg¢VÕ6­®ÍyÝ“+×À¸ñªV1ŒC sæ?P WÌâ;­gQwŽ/žiK6ÑÀÉÍ} ñwàeõÆ¶Óø—Äz†¤Ñçæ¸%U=@P0¿‡ZóÛï ÙhHÂÅWoμxO—Ór®×4­{v[%þoî<<÷Žp¹î!*)¥“óêí¸ÃÑôÈô¥òdÆåù˜ã©ô­í 4· cS—mÙP8úš¥qÆûÁc»»/&´´©|¹—d¹a‚sô5÷xz*”l‘ñت’¨œžç¦ü,ÔÓÄûj·Œp{ƒë_»ðCŠÓ_ø?Uøm};:ßY¥õª—#Äv0žJ°>ø¯Áß…qË{¯[ùÍ’ò?1Áè+õ£þßñ= ö‚ðîŒ6ª][´*ç•üy#ò¯'5Äˈ¥Qt’¿£vƒ9ò:|Õ*Si?Á_óGë甌ß7åÒƒjŽp¿j£HÀ3|§}èÉå?:ú_{¡¿»}vìʼpw¿t…Š;ÍmeØA{OêGå\×J˜ïf½áÕ€Óüc_šX̯ŸW%¿­|ÿV•,¿—ùš_%¯ù¦WNœ±ì¯ú™¸ÎEƒ÷iŒT Sù¶×ç·}¤å$.@õNþæ=¾[;°õÅIys±N×ê+æùšPY·±ü¼ÿ]pãëISp‰¥5êľ¾;.^aË3}Ñ׊åk-oæûùyÎ.ZËMOÀø:¯áȰý­|ñ†‘[Ä6—©öP±,ÖòŸ¸û‹8Û #(FæÎkóÂÚ¤Úf©ñß¼ù±ƒëžÕúŸÿBj¾£ã/†2I©Ü5ŒzmÜRZH«å¥Â²þñû™w»ò©ëšü¬Ð<µÔc’lí݆Ûïšý‡‚ãZ–K…Mꕯä›Kð±óY‡³JÊÚ]ÿÁün}¤ß®³d–ŽŒ³HÀÍù 1V-ÎO¯*~Såö9&Ž­ï—,pÌZa¸Äeħå`ç•eÈV8pAÉS†'Ž 8,Æ&kq¼Ó¨ç…'æõbQ8vÆ ®‡TƒûLȺì7ê†Vh÷,…\ 9Ê埡çp8ûUV§fõü×õýXü†£ú®"ëU¹ÿ[ÛUÔòÿø~ÿK¸–ËP†Lm]ë"ýÌÆ¤2·uåqž›—­r:‹k¶hŠ·ËeQÈöþx¯F×ìîÒËû+ÄS<¶òyRèCûà`©ŽÃA¶ñÚ¸]^ÖÒÚ\Ù•eó ¢¾FQ‰Àü|vãæy~?5åþLû,¯Í¥¯šÙùùv¶ýû‘Ò ÐFÌ«´«3q–þœþ–?à†ÿᢿà˜?u-Já[TðŒsxcR‰aöFÛ =zÂb'ß5üÍGz~gÍ—ç?Â3ÇÝ«öÿþ 8ø.§ð_ã'Á äSý¯iºÍ¸fù‡Úc–'ãÓ0/çF]_ý¡$ôjß×Êçv"—îZÕÕƒh»I)øTd@@Ç¿JÒX²>P{~50^#=k鹺[º™žÖHÜcŠrY…ÈQî¥^I» Oû´¶üÈ úTóYêU[uÀ]L¶ƒnA«‘ÛÿuwçR%«c*£ó¨•M45”mæ\öª¼2ñŠ«qe¸|¿…nOj<°Ò úqTe„ÏåN3¹ Ý7vd®Ó¶³n¬¤Á%GÔWI=²±*? Õ›pªFßl¯j¾a>Ìç'±Þ8l`Ug°*HNý«zâÝú°yþ,u¨ ©`ÊF}*¹™¬Ç~æP;t©àÓsó`ƒþ*ÐKlôÇæ¦òˆ,ÚëJý PŽšlg :]Ê6û` –=4©Ên•© ¹Ú_ñ«(?JNE(nú™‘Ú7—¨©…¤-µØ{¾m“ÉÜ}Çz€XhÙ}ÿžcE“Fuå”NÌ ôïYl¾syqnµÑÉ$E«:â6i‰R)Ä™EGS¢PøÉ¥aÆþý»SC‰¶õÆwÿJ¯+î<¹Ý޵œwÔÏ¡4w ¬XápjÌWAð§åÍcÉ) ´úÔ±^ÉÆß÷y¥-nl£ž¤Æ—ÎÀà}+6 ™œãîŒqW-”º Çžù©°t¹a˜ç4‰àôêi°À£Ÿ/n*hSoAùRZ•|É2äÈ#`;úÿ*±nÊÉ…øíSGyÎ?úõnÕ·nÜ[ïVr‰Ñn¥‘”àþåµrOíÚܯÿ†¦rCažµœ¥Ñ ÜÛ‡“åÇó©¡„:nsÇ¿z…Y6°^½NjÌK埘ûÖRÓa¥Ô’ HÃdv«pD#¥E 0sÅZŒ‚¿Zæ©&ià»ký¤c2~Î^:bŠÛ|+xê¥s–X‹ÔWd#Ãrò¯6ý³¼S'‚?dŠ(µ*²[x&ÿÊÞ>]Í QŸÅ«:|®´oÝ~hÒ>ôËOÙ;⌇Ʊ©6ÎÂŵMVK¹Q ÁQ´r¿/?S]çüá>~Ó_ðT~ÑzÍæµ¯_h:Üš —š[ÙZO,ŠumÌÌË4cp÷ŒqÆkå?„þ>×t:ø”4_2ÛKðsiú-½‹…’;‰I Kãhd9ÆsÇ×ÖŸðiW†5ÝOIøÁñÓRð´‘iú†¡g¥hº”³Ÿi–YãUôÞÊKwÚlŸÎ¸®·Õò9Jö攪M6’ZíÍ-ôG±•Íb+S·æ…“ûícö’òïxfü@sõçúÍÊën'h•Š ‰w½Øªù9ü…tšåé¶µÝmÝxî@Î?:âæ»òa–a2±ò‘áfO™\Ê1“Ûî~µù-j5sLd.›I?Oë_ÐúŽháé=lq~,2ã<ã“\µí¬‚æ9åš»êqÕôxv¦¯‘ݯËGòÕúžm\}ì¯ýt3-÷_ŸríÚ£û¿0ô© Ý$¤¬¹eî8Ǧx ½¹ŽHö³ü‹µy'4‰lðƢл–ëŽkš¦M²‚º]?½íøôãye¯õÿ´cÁóò½Ú¯èWé§ê°Ü#gka¹ãŠÍ³Y%³_5ˆmªXÎ=jän¾c`|ßÄ1^ŽW—â08˜Ô³º³^©Ý[‰¬«Ók£=Qvd>Gá ÇzÍе9®tØÚQó/õ3Z+! ­ž¼WïxzŸX¡‹í$ÏŒ”}œœ{ Ñ)Â0ÃqM_Þ63N$(7ÓšÐ]5b`>ñãÒŸ$¶ìå l Õbܨû㯓°rÅ;¢HmÐ/Îy©RÝzcÿ­K …?/¥M§÷kšRe(»^㢵7/Ö‰ m<Ո¨àõ©“ɱAP¼×7<¹‹Ž…ic-Æ?Ž*œ¶ÅFàÕrk€âªOv6`ƺ©óÊ\ºM±cl „I¸óÔÑ5ÈÜTÔ+r¹lü uÆ.Æ2”e+¢eÂIÁå½: v]dÜ­D“«nebãµJˆNvçq? +]ØAVBç¿zY œóÖœHà÷ª'‘Tço÷TnT£Ë1’GϘ$Ïo­PÖ¯,4m2ãYÖ¯c·³²‰¦º¸–@«œ’qüù<k+â—ÅÏ|ðóx“Ç:ÁˆI”±±¶‰¥º¾—CüÎǧ¹&¼ÿÁ6¹ñÆqñÿö¨ðòø/Áú‹­ÃZ¥Ñ2*qq|•–|RÊ¡ ‚[æ˜ÜÕahk7²ý_[ÃntapX—4´Wþ^g½|6šþãÃê÷Öa[ˆÌ«ÆÁrð~ÿv÷Àì+ç/ÛªçÀŸ>j^ ¹7k$.»–åw+ŒÔü»Xƒ»×Žõã´—ü“â/Å;6‡ág…fÑüü}6]Üø‚ò8¦6’#Œá‰b|·â/ŒK}§]jv¿/¤Ô¦ÓíÍÄ1¯”`’Yfa)tiHB¥€iÈÌ>%yËâ“»õz¿Äö=µÁ§²Vÿ/]6?>ÿkkü-ø‹¨|=ñ–“5•õ¼£ó:Mt‘NpGëšù«ÄwŸlsåœ/;~\×èOí—ÿGdž7Þ×.d_hwRÜèúì¶ðÉ*\2!]:Yñœ««¦GFÃ0RÇóÇ_Ñï4VãI×­ «F+q ±mŒ2÷r8"¾Š„Ji5f|lptpøÉNéÿVùlb°&uY®•p ý*ÖyeÊ™.•I8ؙɜUYm!Ý•\‚£wÈ~\Õ«;5B® |¶9ÇÐú{{ÑË(ìz9];;ž‘ð·T¿¼×`R,à è|çòãë_¤_ðKk¦Ñ>5h7fRÞ^§nÍ2°ãæ‰ôg¿A_›ÿ ÌQÞn•¦i<¿Ý´l1œ¾‡¶?oЯø'…íì¾;ÒîìƪP*m€Ü‘’F1××­|¯sG Üzk÷jgÃþÏûA[½­ä~ë=ʉY»7+éÓü)Î6üÍ'Þ䯠®gῌ­üoà'Åsn[‹}³lâT%sŸUoé^à[hɯ⪿¼§K²oïÓô=Ìš¹çÞËî×õäç&¢yÔÞzsÒ§!ýã+.úña/.Õ}M|l”£©îó.R®»å,æmQÏèk—Õõé!Žbž]Áv¯~ƒõ­ vý&‡,ÊËnn¹À®ĺÜëlc‘¹ec÷¾­üÔþUçâ¨Ô•+ÇÄÆ3ýç‘âO82ÉÃqʨ^Ûz}+ȧRŒ}—Këø;yßo_3è0³U5ô?ÿàç­V{_†Z ¬«ö‰/®aV„`¥U¾|}àHùAÆÈé_”ž €O¬¨•QÔ ´r1¸íŽõú×ÿFÍ GáÏ…2êl5f¸¿•lYÎ>͵˜:—àœöu¯ÉÀ­«ÆÑ]me˜yl;õþF¿aà7:™.ëUu¿i5óØùœÚÑ•{=Ûü‘힇T¹ÒDóEå‘Kœecuzþí3Æ Vë]šP0Í`ö oq÷¤UElä©ã(^2zàñGÂZ$ú†ŸofŸh¸ýÑýÎÑèHn…~ñ県gÛ}RÕvÃpŠÐÉí¼‘Föl‘†Só:ãœýË-§Šß×üñ,Ë(Öm5¿}¿Ïþçž%жé“C.—žs’ÃbÞ vúr dcšòÏè±·ï¬m¥HÕ'\–TÚ7dóœf¾ÖôË=‘ÓìòÝm"öl8þ¸Î=kǾ"øf=45ý²¬sÈ›œ+a#æãцàhÎ0 FëoOëúg±Ã™²•NKë—õþG—:Åç¹·`ªSîõ×êwüqã«m/öØñßÙï%Vñ'Ù$Š0>I$¶º‰ù÷ïƒ_—‹é×?g*¬jëŸö—§ùô¯³¿àÞ¿Šðªÿି 渾†+_I{¡\4ÎÊ\ZȨ¼w2ÆxÏ\WÆáܨâ—tÿ§ê~‰S–­èþš#°GÈ~\ô¨d¶n@.ìm"®J13A»XƒùÒˆC䳓_ZªugʹyLï#ÌùpFßÖ¤K&È#ó«Õ•Ëç£2n?ÚåQ™(ûܬžÚÂl¨ô®Y93t½Û\Y&6½~ZʾH•·('·~òè§½ÊÖ]ÝË:’@ÍmNö&§Ã¢*K±â«O!”š•ælmþ•™a—ý+¢äÆå)ÉlÌ»Eûµ.ÐÅs·ý®õ¢ÇÍ ä…6KT ‚¢ž¥Jš–†`eSŒT¤.î>•aìGßUÇûUvn£PåbcMj™—i,ßZžÞaË7ãïQË ±«õ\Ìñ»OšûrÊéš>pÛÀëQÉiv5êiA&ÝØ÷e©ÖM«´Œš§‰BÃoó©^î$Aè:V[ì#F !UòÃdЯ“¹›ïʨöðGsßšônÊ‘Sìäµ¼Ëз;ºU¸äÅd[Þ8Þ>S€}ªÂ^Æœ‰9ÇJÆTõ*-š~a$õë^ ÿCžFÿ‚x|^Ž+Õ·’OÍs íbTÏÖ½£ûNò´Ÿwµx¯íôÞñOìõqðïâ+5Æ™¯êP%Öš¹úÞæÈŽÙ"œ’>PsÖ±©û˜ûIim~íCJq•YòGw¡ø¯ûCÝxŸá¯ì%áß…šˆ--õ VÜÉv"Äw7j# %*3¶9¤vË` weô þ ñEýïìSâÏ_h÷¿g³ñÄÒZ^M'îdFŠ"ÉöÛžz±~ZÿÁC>=Ý·ÄuŸÀW÷K©XêÒ :yØH¯ $KGT>äe9HÁÈ ™ýŽÿƒd~ø£áWü¦úóÄþ‡G:ÇŒ§¼³XØ2ÍÁo™>óCoR¤ä4g ü§kSÃ䔡Q¯>û)7§_øcÝÉ#|ÁÆj1·ä¿=OÐê­¸1nþ%_lŠäuRëlÏ›d1Ç9å±ú–­-wTžúÔHbeß"– 9?.qùµaø¨º±Bϲ#/˜½°å1×б¯áY{YF]?àÛôG¯˜û©Ü浫Ø.õ)‘TF»³îö£ó¬-]Õ-¼¸zðŒÌ¼nmÇ·AÅM©í–_!?vYUAÕX©*yÏ b³õ9HX×Íi#Y@ÝÓvÐqüsù×ìJiû¶>f¢»ælB ̉íÏ™…9àçõ‘Ï$¶Þlr|¾CÙ{r9üªî ì ùŽmØèsƒøô§@‘Â>΋Ò5]Ê?º2séÅuÇ'¹ó¸ÿKc%ˆ©²e³K,-ë.•yúô«ÖÆ6NàX㼞:ÕX®UÌ`ÛK}ìõrÙwîBWhû¾¸íUýŸ…o™ÇËä_µ©'‰üyáÅ,¿k}?í°ÛÜ_Hwoæ¾Ägô]ä.z Ã$u4Z¤xIVQåºåYNC çuï蟾x“áGˆ¡Y,|E¢ÜØL­ØK@ßPp øöýº¾!þÌzí×ìaûaÉqwsá]u´[oK––Þ Ûmžlòbe(Cöx¯W ˆ£BJŒ••›ôµ¿ÏäyØ›ÆJOKé=ÿ¯Èý%¶ÔÆÕ>ksþÕZ‚ýNݬ*æÄ›ÂË̬×NC{ý*Í´›y-^´¨E«£™ÔšÑÞwëý*h¯{dW>×L~ãQïO]GcaŸ¾õŒ¨©ëfu0]/ÍøúU„ºUÁÝŸzæmõxÀçJ³±<Ëí\³Ã³X˱Ћ¶¸¨æ¹ ïÏ8ëX£V6Ú¡m_<éQ,·+u5®n8Ýž;ÕîÕò\ûV|Úꔿ=;Õ u-ã½ýk®žV9ëK¢4å»R2Ì9÷íM[ñÚ£rýkí N#$ý –E\#ýk¦4bÎk=ͤÔ8Ú$þ.~cœÕ¨oÇðcsþvÞ§ Kã‡Á?ýzRÃÝó8ìt&þCò—Ú­ÇÖ¹Ÿø÷PÓöGƒôÕÔ59·6âbµQÝñÉ=pžÜà vµ«]A§ì¶ºX^Vòãs’ÎØ?pt$z’¯?þÕŒÅwa¦¢þúI šFª¾jýÓ9r¹·÷ˆ=Æ~\øxìb£/gK~¯¢ÿ7ýy¦*Ö©Wn‹«-éÓ5oMâ/Ï&¡©FؽhÉwòÔ«.ë¶43vÉçæOÚ÷ã½ÿÄrÇTÐõ'ÃmüÖ6þFÝq ™Dê6¾ùepй*0ÎÒÃÙûYüIÔþþφ‹ðþG‡Ä"˜ÙG›Fg¸M‡Ì¸VàáT˜· ëž3_ xç[ÖtÿG}¯xT‡Àpøfe]?Nš;‹ÆšD…ž˜ Ý»2Ë)B£æ†òaÌ弟WÔõ+NéÛeåÓú±Áëß𱮆§¯ß|#’ûQ¾¶‚9Nk;qvör9"üoð=¯†¦ð_‚ﯵ}ÈŵãkR÷×zž¨ð¯Ò;d‹`/åÇ+¦Õ¶¶ÞƒâÇí!{ñSAoøFñ>¹¤ëÒ4ñé7”P´wOs-Õ¸Fžæ0¶Ïq 2×D£ä¿‹Ÿ|eªéz†—g§éÁºÕV%œ¦C{ñœŠ¤ub -­.¥M°´wa—%I#¨#%sžÞõíÇ–*öÿ?ëcÆXzžÑI=VÝ»ô{}ú·ÓÒõO ,kµ nù}NXñÀߥiE ùÑùrÛœ‡fás“· êqœúnkiÐY[µºH×Ö¢V[‘YtÉœ¼ûñÎ8æºkVЭuµ‘n,äo†“('ã‡8ÏqƒŽµiE¢q5«AÙ'åýnŸËsOá»­ž©ÛHU—‰U¾nI u8ÇoZûkö=ñ\> Xõ¯´Bš™¶Hʃ‘ÔF<äñœ>-Ðo Žñn6 -\~èn`q‚«ÛŒƒÎNM} ð‡âÖ½­œ> kx‰Y.Äh¤•$ã#ÛwLõÅx9¶ âáËmËñ_Úm®ž§ìÏüÿãqñü¿>j·0¿êÖÚ¾Ÿ NšÎò2±’xž)3ŽñÓ5õ\B T’ …~CÿÁ?>,Ïðïþ ð÷Ä7¼6¶,±¼ðƱ ±)to1-£óÁ+s &GËÇ _°mŽFÝÜ¿Q[ds”0*Œ·†Ÿ.ŸôUªF´½§s_áæ¥a¥xž=cRŸl6öììño”W®YjZ¥¢ÞØ\¤²†VŒæ¾nø‡©>á[‹”“hwUëמ•Wörøúþ¿“FÖošK[oÍ“°újñ3Ì=\V:NòÅ~¬ö2ÙFŽk»gÓ7rÉäü‡ýMckÓ…°ò (òÔ;“WÞþÎòÕom¥WŠEÊ2ta\¿‰/¢–?,Ý}äÉù°7Ó¥|â¡*’²= •9bÙ—âmH u†=»œ}-‘úŠó¿k35¤³ËUÚï/Ÿý˜ŠéUýj¼Ð2m*Ÿ/j˜Î2´Ô‰¦ Ù'zû{ÔMqœŸ/¾x4Û¢rIõÏÒ¡i£Rq/F?ÃúbµåÙ‚ÞîNÿ¼qïTn! v©ü*oµ3¯™Yp½:SŠq)HÀ`žù¦µª“– ô­xt±'ÌÞ˜©ÛHM¬Yp£ÚE1ròœÙ·ÛÀ\R<'€Eo\è®FÕþj•Å„‘ÿ1U‰‡)–P/Q·oFüê{ˆp2 ­+8 Z©) ”‚áã9œõª“EÒIú/¥:êá÷¶ÒÝqÀéUL¹9-¸Sµµ@·*Ý[¨Ûï…5s+ew~bµn¤Þ» ¬û…*¥ºûQi Ûb˜ºx·n?w;Aþ,TñÞ)_•7{¶k2õf/Àoòjº\]¨ù^zÕ¤O7+ØôYn+vúÖuÅÑ_—#е2âýWï}ãÖ³¦¾ß8ãïXFïQJ_yzyC Øß(ûÔØæËq޼Õ1&ḓ»9ðjH¤\ppjŽi8óhlZ\(@Ãè:Ö…ÙÛƒ\Ú^aøo»ëW­uÇ8è8§Êi’¾§@· Ç~~´áp¸æ±WP Är}jdÔƒA¤éÜÑU5Ìà ’;£æ5—ë:~ì⤎í‡R?à4ýÇí;šëw°äÎ’M@3Kf²^ì/Þj훑ž§ìú³9T–š |T Çá§›§<“Y #ýç=*T›¾}Åí´±¯¤ëÉ?…Iý ÄíÏ¿_ZÇ{–eá©éx¡@ÜÞüÔº}Šæƒ•e¿‚ÚyäùfÅ~}ÁSþ:ëþ(ðn¯¦xRþù›O‚f“Ëf1Ѫ}•Nà¡d;D‡|¸Îq_{KeewáÍCVÔË5•´ dŽ9y1Îôõ=+òcþ iûGøÅ—§Á/ é°ÛZy4˜µ%“ÏVºó˜ÉˆÐdÆ¢îÈ™ñs.jׄ6Žïúò=.žêÍÙ½õëÔüÎøãã ƾ'Y5EºÝ}â‰#¾kÉšÒ8ZÑ¡…~f]¼Q –ê>bØÔüCᎳðö øcð×ÄQµå¿…m縵¤2L¢i#<’Ì$”±$’¦¿’ø»JÐþ#jú^¡<–ö-?ö …¾o06"”£8ûç Žpkú¾ÿ‚IÏ­Mû |/ÅV“ÛÞZxJ8/¤¾›t…€|’w»W-“’Ä×â~%ÆU°¸jzüM[Î×õÚúmÞÉç ÇÙÖ›Ë{ü×Ë]¢æŽÖÎÑïmevÜ?ŒØö:Ã×$t*­ŒäH­ü_9çò­hß‘kq-ß—$“\4ˆ×h“„õÄcë\ÿŠoa±€¤ó’ÍÃ7°bÃÿAp¦¤hÇݵ¿+èßÊÌß2©Iêr:‚,:„tŸòÛ*@áN0GëŠçomgX$;DkõäàùšÖ×/îgº2no;s än$¬vfw/19ùPßÅŸ˜×ë˜:Q²¾ÛIt±Ä‘ÛØHe,¹î<ÁúàSbÔ$IrìÌȧj÷$ÐÕ6¾:6>ìj›T—-Ðûb£»½†6}…ƒn!FÓÝÅz2\ªæ1Šæf¼@¸Qò³»û¼ä§jÔ‚Xå þ¬dÔV yŸý%üß/Cϵ´ò¨Ì2À6KÇ+™Ê?¤£)+v:o j2ØÞFÒ"Ýó.îœ×çü·àõÃoøöœÑì|¸üQl4 ra÷^aóÛ»c¿,¹'¸¯Ñ-W|rH>m¹l÷ö¯)ÿ‚¥ü ¶øÿûøçÑAÞXèí©é­6HŽæØy¨Ã»ú×)ûЭ âÓù=ûµùÖ§ípÓ¥Õ«¯UªûöùŸŸŸ°Ïüõ~ ®™ð{ö¯{›ï É"ÛiÞ*Œ™ntµáBܲD?¼>e È#šýPðGüñÂöž8øwâ« sGÔ!ÙêZmÂÍ ªGb¤þ¼æ¿–okÒϬÝXÍvÒG7ï›=•þl~f»ÏÙCþ ûXþÂûêÿ³ÏÄ]k6ûº¦é´ë¾~bbÈòÛĤúש‡ÆTÃèõ_×õcçð¸­y&ïÙŸÓ‘c=⣖ë'ö½ëó§ö@ÿƒÿdŽRZøCöÐî¾x†UUk»ÆûF—<½ÊÌ£1äÿ|©¯¾¼ã¯üHТñWÃÏéºæ›p›¡¾ÒïhÝ}r¤×­CF¾±æzQQþ¿¯øâ\»XžÙ¤þЕX½*„Ó¸|•Æ}i¿jÝÅu(Ü™M$ÒF¢êŸ&I#w¢{òß0‘”úT û—âæï§È‰æ—RËI½r[·zF|œ±+UË“ß55ºnl‘œv¦-e+Ã÷xï×<*ÜÉ(Üßw·E2Ö¥Æ?»Š·oÈËj 7DUÉ>جgʃ‘˹Мö Ôöúušêw±yŠÒ–ù_›ýì°ÀüÉ­»[}*¸Ÿ[½HmXÇf¬gÁù3ýã^aãWPÔo$šò õ†8NèÓ©ç%>b{pF=+ÉÅã¥(û*OÕÿ—ùž¦nz«äÿS'âïÆýîí|/¥ë[²éîí žV 0Q×wÝnÝ Ùê3ç¿ <¨kW±øž{)"[¶(o£™¡Œ2•}¾wÞe9ÈP@äæºÏüðž«‹ßÉ¥ÛÎåÃgϰŒ*1˜ þìm Éëž—ÄbÇÃöÓ"CÙå·’M±¶iÞ©ùUAã±>‚¼‡F1VG«~I´|•ÿø¯.«ãs¢ÚxYo¬ü5gz”$in²ÏšŸ2üÜ’Êœ–¾/ñŸŽµ];Ä·ºï‡|]¨i:Í®‰©.— ¶¤'_-±¼C"Æa€¬eQÙŸæØÜƨ {7íKâõÝwPÖ¬®5Ï.mdšö; °Ü;3GäI?ë_óò5âñÝyQÜ 2±xa‡å+óýæÀëè:òtº=æª<ˉ5K×3;î#>YÜ•$p ‡¸Çm{{ej³çUY¦,d‘Fý¹ùIÏL‘¸V÷‡µ´¼k¸™¤¸`Bî˜ã;¹#“Ôr@5të9|OúýN|n>ɨ¥éýlz„ 5ÄZ…ÎG6Ù&à ”ZImåʳâGE¶Ê2* .â7+c«Ò¡…çWùŠ­5/×»e÷ØõÇø |-{câ#H{-C·ÑêVFY Ÿ:ÚTž9ÎJqž‚Úþ…>|KÐþ3|+ðÏÆ8khVº¥®vÑ«•ϱ%OÒ¿š¸õ-FúݤÖ`·HUžHôù@äï¸îË7ÊÍ’¹Æ@þ¿Á><^|AýµoƒZÕ×›¨ü7ñ¶ö[›sfÝ¿ IçGí°Õæý[êøË­¥£õÝC“fXæ¥-Ö«õÿ3ëOÚRŽF¦ãøN ã§×šñ¿ ëRC/Ûª}߆•wŸµ¦¹%—lE´›^K§M½9⼟áíïÚQI|˜úŸëÏÖ¼ì#ö™¶%5ð¸¯ü–/õ>º^îŸÿ6}Cð_ãUÅ”qh:»f㑹Œúý9ý+Ð5íb ›!U£hÁ]¿ÅÏ\ÿ*ù›A¼s´¡*ʪcQž¾ŸÖ½ÃÞ7¹žÑ4ÛÛ¦ÛSžƒôËøS­—SöžÒ Ô|Òq³fï‰ïeY¤çÊ«cžüôö漿_žK›ßõË*:ð2S]7ˆµyV d,HmùÁäþ¼×!y8”¿™!TV*9éÎ+xà9©Û©‡¶œL«ùË\È ¹?2)¦Á]¿­`Ý,2+ºÆxvR9Œ~kBùÝL‹æ•]Çœ¹Î?¥b_^™bfŸt!œ£|¿{üŠøn$Èþ±%&•¿Ÿð}Ì.;Ù£â/ø.Α§û ëZÔrH·š~£lö)·+!2yn¥yÏîËŸ¨µ~|4Mڪǀ»¤AÃa^³Ö¿£_ÛƒFð¿ˆeÿÃâ½4ÝXÃá»ÉÙBå—Ë‰ŠºàdÔ{×ó±ðú-ž!ž9.Ô,7M!vr…CÔú©$í]Ü1„ú´au–ߙNj­Í÷ê¢ï÷¯ÂDZxPÝe ní¤µe|™" YÍŸSò²‘œ€5OûM¬nYÕ·*»÷rq‚3øV.Ÿ¬Ïkâ[ÿO*ªùÊcPìÁT|»Wv~PÇ ã°«¥ÔMÐN ²³,yXKbö•ŸÉëú³GMÔ×RÝl'¾÷–«Œ÷ÇQ‘Ws*Çåü[E3~óir ½J3ÜV¼æÎÒëPÕá±Ó£Y®0À` ·)XmçÖ¦!›%Wˆ®ž_xóÛ¼µ.ÇrŠvÓ†öæ¬ Ìð‡§?v¨ ãÀÃZ‘&hïåÇ÷ªùt½ˆsÒåÃ4‰.ò;â¤K½‡ƒ_›­g‹†fؤüßwoj’"\gêx§ÈÄêCcJ;â@Rv±éÅOÖ/ÓިðÏÝ5XŠ6QN1Ô¥&hArÉÈ­ZŽmɸzqYÖ»Ë|½sÅiéÖÅÏÏFìóF†œÎÈ]Œ>RªÊ[?™æ´ µR¿tº:KUÛ†Vü¨æîTJ p1š<æ,[¯J–hÕ~âþj6ˆ–ûÞÔùU´¡Îãž• ‘Ø”Y+Þ”†<<ŸJW[[ø˜_«y0þòA‘ÊŽqøÿZ‰{ºŽ)ÊI.§ƒÁO?lh¿fßÙòohÒÿÄÓRÒÞ]A¡¸XÚådM¹=XïA´`€Å»WáŸÄÿŒz׋‡Äÿ†\ð=ÏuD›XºÐlçÔÞMÑüɹ@?ì©QÇŒ×ã|k”ûLb²½›kÓOÔý#ÆÊ¥Ê]b¯ê¿áÿè;Gw¨Ã*+I» # À_Ì‚àUÍxÎþd¿id”²…o¯AùîÍU»”!·¼ŽFó<” TýÐ Àýk/^¸¸Ô šHefu¶e?6pÀêM{?•ÊÊKRñU”ªhgË'”„ù‹Ÿ1G˜ËÛw'òþu—wxä¹áTƼ0‘‹uïŠ5»Ç[%dS67ºÝ9õû¿…Vµ°šV7÷× Äż³Ó¿æJû tùU‘Ã)2+[‰$…¢dù¼ÍûøÎÞËüªÊˆç]÷D|àç“Aÿ¡¥ªÄé@îò”»6>^¹ëïü«cHˆ¯–î73ǹ€ÁÎjëGݱå­ËpZ±uFU;6•ù‹×ò­>ÝB £hÜO8?U…šB½UW×¶ M¦JÑnŸLW°ï–Ý·W¥Í"eY$ÙcÇÌ¿^•­ã=øZð}äj±jºLöÝFãæFËÓÛ5›¤A5¼–yìØà{bºhm Ü®È<Å]ÑŒa¿?óšçåŒgf)'Ìš?‘ÿŠ>Ô|ñ“ÅŸµˆœO¡ë“é̲.1JÈ8ú Ž1f#häu ͵}7_MÁsþx§áüÇÇæáÛˆô5¶­kq«ù!¥L>N0ðÝy¯øû"|ý ïÓá×ÃÛ‹œŒý¢c²†ð .xïœz š˜Šx{©ÊÖv>g”ërÅ_ÓËCÌŸÂú>µo,ÒÀ<ålHé[¿h/ÚgöP×?á&ý¾6k¾–7ß5­ãy¿ Ê0úŠúëÿðCÏÚ†â_´êž,ðí•ÏÚ„h­+±xðrÙsÇ?ðBŸÚÉ£†ßþ-ð­äw“u4’4ar|òk˜a/víçgùØé¥‚ÌéËán=ž¶üÿC°ý—ÿàæ¯ÚÂ1A¢~Ö?tÿX© úç‡XYÞ(þóFrŽ{ñ·5úû,ÿÁa?`ÚÌäx3㾃®NØñRýŠãq?qKŽÝc_‹_à“_¶ÇÉš%øa.µj Óh³,¨s׃úW’ø‡öFý¢t…yu¿€^"µXXn’]1×ËlØôç5ÙC9© Z¢’óþ¯÷›J2Œ­85÷þºþ6?©ÅÉÍ×—)$l °õu§neÇ é_Îì­ÿgý¼¿b#m h>½×¼7jÃ…¼dxD`ò±ÈÇ|^Ø8•úãÿøÿ‚Êøö㿵ð~¡û;xëúìË–»µÐç¼Ò‹2~Ô‰µO¿Ž¸ä×½C8ÂÔj5+}ö~þ˜ÂRÙ_Ó_ëæ’>Ó‹gócÐu¯0ø×ûcx à»IÕ£²ÆÎY.Êûq’¾úâ¾`øÍÿ3Ô¦²š×À}šf"ŸhL±¼ùÞÇðŒž7~}ürý¦u¿k÷Wú P¹U’©RyQÏßä’IÆTâ¼Ùζ#ãv]¿Í•[…ÀÇOz_ÖÈýøMûrËñ‡âªG7ˆ¼>ÊGn³­•S÷»àÈ=ëÜ<;ñS_ø±ã¦Ò´-n—A?s†ªðvp ‘»` ó_‘?±ÕŸŒ¼aãŸèVpBÚ]Ƥ Ô˺I§hãg—’r‘çåçå&L Šýžý| 7|/o£é†ßR¾‹}õÃCb¶\·”  U`½Ç9l÷®Òi¯óÓo#Ð|;áM;@ð²ÇorÜ*yJª¦CÎ3ÉËlàœ*ù«öŸñ—е¿ ÞéÔímäkUhâæ4h‚]CÛÈfP¼Å\œgƒîßþ"èžÐRkA ̬‘[Ãb^yØ+ÝrÀm-•l¨æùçû]|V×¼Uâ{7Å0hÚ®£¡é÷­uq$qÙ›r™¸Tnoí1‰@ÉÍrêãw¡Ý)S§Ï™~2x¯Tºñ.¯ex² 1.TÚÛù…,¬&’HÏÙ¥F’LºˆOÈ7)o,üÄ‘_*üHñFáKÝOF´ïn'¾¶{}OMqG‘ *1Ó÷xóT(½ãÆz½ÝÔr\øŠâò©_³MvÑn-ü„³t7#ʑIJLJV;ä`ŒŸ–¼k«A&£ýµðÂ+¥¸Ôšé¤ŽkV‘’Iʦ6ç2(•À(…¬y'ýãW>ÔbÕ¡µ´² è$’I$lÆ Ëzdy뻳RPÖ¦/#c4)¶0Ãå*„äû’ úw®yF1Ó}×ÏGúÛúÓÔ§Íéµ½>ÿ+¯»Ö[kÉVy/'š7p>lƒåʱÁÿkïjÛÑc®-d³WÝ2ˆ“ûòå²ã#îä˜Éô¬u–Æ&f¸~hþUf•Žü µ[Þ…gšWšEvò&{5“#sÜd¦@c¶¶ÂÓ“¨¢ÿ­^žg>2J4œ­ý[ôëåSÖ<+¦ec¶²‘U®$y#–;Íž@òÿx»ÈÃ1VÛ¹¾Rá±Ö»«M´è[fç¸YóöˆÔcqŒ*˜0$u8FpkŸð|eÐÍѱ‰¤’Ìý–kfPªŠüoá÷îažHÙxR±µÔÖæê%ûT2î]ËÈ!0sêv×ÚaèZ úþ¿Èü§ˆ•JÍ=¯ý]Í«-â+hôÙZkèÌn^ÞÈx¤ž•ätÇLŸ^~Úÿ‚ üV¿nKï„ÒHbÒþ$x^æßìò¹õ Rna<Ï—ö¥À%«ãؼK§ËašÙ$2Û$7³qÈ#ƒŽwrqÚ½'þ ±ã¯ |7ÿ‚‹|$ø™ãÛé:-Ÿ-ãÕ5 ÆÛ$èðeØœ<À ðîzsæØ9K )Å{ÑWÓË_ÈÛ#ÆÓ£šQ´´”’wìýßÔý‘ý¿`MÂ: «ÈÑ,Ú„›qìȪ»WÛ9<ž˜¯øcª ]OÊw–L+p;t<ƒƒ^åÿV†_|$ѵT™bUÕ$›=¶‘ïòñ_.|×aº·‚$w\(äã`Zø –§¶Ì±’þôôÜO×±_»¡J>OÿJgÐþºG‹ÍŒ}ÿ+ÐzÖå¶«ä+I–eÛ÷W<õÿ?ˆ®/AÔåòü•“ø¶çŒþMoÚj ç vQ´®ñ·«‘ãò¯¥ŠOSžæýÝÒ_’å÷HûœŸ~qY:›*ÙÉ‹† ß1Vúÿõ©ÆF[u‰@P±ü«Ž™Çéš«1i¤V ­†Ë3zr?]Q‰œäÛ3¯ícòÖâ`²àñëøÖ5Òý·l7 ·r)ó>„þ¸­©î ¡<“–ÛüŒ“Ç_|Õ-V—-ì˜ÝÆ0xÏó®\Vë]¿­ŒÕNY#ξ7xEñ·Ã{ÂÕ¿™c©éSÚÜ«HUZ7BHè9ä×óqã¿k?~;k ¼CjË&¨Í–äfX¾l ŒðF¡ÅM~0ð¤'Яü7¨Ja·Ô,æ·wÈ*®¬¹±ç?Züÿ‚º~ÌZïì¿ûU¯‡î¯.o4ÝOEµº±Õ&bòIó2É–$Áã=Áï_11ÁÔRеšvü×§O‘TÓž#•Û–qië×uóÕž?$Â×ÄV7Æ <¹$h^ge`äî #æ\óëŠv¡©K5¥Æ° òç Ç·Ö©ß_›¨^úöâÞH®n­äTbH‰püò¡Á#òr:ÕpL¶²J[æf%†O¯§Ò¾žGí$“ßü¿§ó<ÈÑO–RÝiøßü×È;Ô<«×,pÂEùƒmè}qÇÿ^¦ƒÅ­ip°Ëv̈Ë$E¾m®‡5G]ò¢BBT˜®ª6÷â%#oÏÊî óO¯|~µçTÄÔ£WGç±ìÇ Nµ4Ünu‰xÚŒ ªÛ\4̳çìøå‹1Þ@ç9÷…s·SK ÙY|»XbÜW¾A´Ÿ¨ÅXÐgk+‚.¦ŒÇ7 xRrüô¬ öÅGâk)ô»ç²k¥“ÌXæ[Œ†ÁgQü8Õjš#œ¹äî楅#`¶+en[" íK"–Úqº­$ŠÎ»O­Sá |½¨ŠãŸõœsÛô¬d¯¹Q×sb sØQ"" „ê=*šê5Ûß§_Ƙš¤Rü­ïÒ¹Üdõ4Ù–Ò9>cž¸éëU[F.r‘ƒëO[À§%×ð4ï3ÏýâÁô­-%°>ƒŸO•\d •·ãŠ–í^Ç*üÕˆw7AU”„nç{N¶iN=? ™K±¯%‹zu¬’09ÛÏ=ó[v6ëPYÃ_*ãwoʯDÙÆÕ¬\¬W/DX…T.íØS&l3iß12V/¸~<êæœ¯Ù¢¬Œ7dŒóÅI¸c’)†7SósþÕMû¥¿¥_7b6&‚ÕXl ÍxOüÛã¶û1þÆÞ.ø…¨ësYÞI¦<[ZÆI.adð “Ø ÷ë-¥•{uç­~7ÁÐÿ´î½/ÄþÌžñ2Ç¥¶•&©ªXF ³:ÊR'fô,²ázïYU©ÉïoëOÄÞŒe}kþÕþãòÛXø¯s£kpø“UÒ쵆ûcOu§ê›Ú†'%_c#$ç†Zí~_izý»kÙ6v 1Ckmá''b†f} üDáTgšñOŠÞ0OÞZ=¿†´%--VÝaÒauYˆë,…Ý™änìO°¦|.¾¶O® bTT“Ì›;sÜã,p@` õàáq’­˜É>–ûÏ76ÀC•C•Y·©ÍüYMž!Sû„ÙÒ<UFæ¡8îrKJþ™?bŸ=×ì—ðóʇá !ò¡)ˆ1“·§sÚ¿™í^Ã[ø¥ñ×EÓ£_íMST†Ò]± ’FXÐq€Š¿/' É¯éƒöSÓì¼5û3øÃzE´‘Çeá{5…d;夰ã’Ä×…œSöØËÇ¢´=¬§šq—m×ljà[9 vÆÄÈfí’? ýj¥ÍÅеŒ–3æb2Y•O®zàVõô‘̺]µ¾cÙ1››Ž>˜Ïzž=BïýwßYî9ÚC[Q^ž_MÓ¢“éÿç]IBR¼K걫µ­¬ÛV8ʬ{~_¹¸óëÅWžñ[H[³.ݶ²÷²Fõ¬û‹ëƹ 6æg!T}Õ ç] ~uWQÔ7 Ü>Uùßüšö#èsJ\·o"©†O3k4,Ò/©Àür+nÒX£—È,¬ch”Üf°£òXFîÿ*©³Õ²£§Ê±»3Û—ºä†â¦¥£«&›Ôܵfò#Qòüª3ëÁŸ´í jL®¥Ka¸'§Jʶ1<‘¢…ð6ûEkic•¶Ù&öŒ;>ܯ=3\µ¥¢<ÒчáŽ%…ÎÜmrO#Óô5Ò\´ÐÍÆWËä<ñéýkžÐãÜ#7Ê8߸qÉ­ù|¿)UÛ |ß69ÿë׉R_¼¹Ó„ùoöæø]áox—O¼ñFƒm} öæ†å ô=ëËü ¡ø_ᾘtß è6¶ªÇt6Ѫ(ç'^Ñÿ×n<û:kí,..¥ð´Ðß\Gn„¸·ß¶_¨I5ó]Ž­¼yàÛmKK¹*ú…ºÉ«üà ~F¼lΜ£Šç_i'óZ3¦J|¼¯t¿¦¾ñ†£t†M+M’åcÉV·p:çŽkSÂ_ün·O§¦/öjǼ7ü´f#¡°kŽø3¤|DñŽ_À^ðüúƒüé®ea½¢÷i$l*/Ôäö½‡Xø‡ûü Óå·øÏñ`xÃT±5î“á†h¬¢ÇÞS(ù¥ã%H<Šç…óHʇ<Œß jמ;ÕãƒGðÝýÕÇ™„†ÆÝå ’Ï´¼úãë]·>h~·ò>:x×IÑwÙ´÷:g÷>^@‘ŠÄv$àkå¿Ú?þ yãïi÷ß?g¯‡Zo‚4´ý8ÐÈ{r¾ÄŒcœõ¯†>&ü}ñ—õ©¤ñ/‰nšëP’W¸¸¹Ì’±-–~z`7N彸ö0¹%Nnjïä¿ÌóñYöX6Ï¿ügñÓþ ‘à-IdÓ>i¾2kí±>­£Å2´Šs´eûǨ§ ÿ‚¦YhËxgáþ“¤ÍýŸ=Â*‚Ðéðª¦8ðª ùBªŒärkóhYm²ë§Ïúî}Gñgö´ñ§Ä²ÚÇŒ<]¬ÈÐÛùÖšm¼­åÛnbTɰͱ‡¡pO¥x‡>0ÚøN†ÃÚœ-wp¢[æUY¤cAèÁïÒ¹Û?Úm'ÀÚ…¾¿áÿ2e›m­Õ¼ß»¹žVY.Y0̱ÄEÎ>ï‡ƒßøòïÄiy¨ »y'MC-+Ì"i€Q.y‰Çç½ztcîêxøÌÊU,âîúèô=CTø¥©x§SÔ<9¥ø»Ëš=²4¦aå¡eÚ§p'Œ G¥s7ÏáÏ}ŸS½×æT’õ"ó‹2)ݸ ã€ßÍÁøoð>?ë¶r\kÚæ§nš|1ÝFC.ó¸zá‰ÜO÷zf¼¶oˆþñ]¬6ÚÌ÷F+©%ûGØíW¼¹Ë‘Ì RA-ò‘Ô“ÇZ§´½¶#‡“jrW{úmÁ-¿hÍ7^ý§­>x3úeµ–‡yq$·3³ùë´,YŠ2…bp¿_Ú? xæïCðf­âÍGQ[½ I3[]}—oÛ`ÆîTòØo1¶ç-µp09üÿ‚0ø>ëÅÿðT/¾‰-¬–v:& u¶šva$QZ8„* ¶ñqµ@É=3ûûE~оð'„,¼dÆ;¦¸7Qéå=˱&Ø<°î]#†,$æºr©ˆ’{&¯÷#í²Ê‘§–§æÿCÏ?jŸÚ€ÞøŸI]:"“R¹ºs’I$a»pUÁû«œîUPðÿÇïkvþ Õ£QÆœöw¨Ð˜\g‰© ñºùh¨IS—æØ|@øw®^kšMŒ¤Ö#†ææ$†kx¶dHTŸš@î1æŽ1 %ƒgç¿øÊïYŠÆëPï%’I#ßo¦yVÅ&êSi‰JRø?*ªå³Õkúf?¹Zµþ¿®‡/ñúo±kº§ƒ/ç›AKk JÎáµ Qd»ˆI ®ë‰ˆE¹röϾd%Ø¡àíóÏ‹o´]5,tø|-q5åë·ÙZ÷S3[YB$xÐÇq ¨’9J¹P /ùs¹«xÖã^mrêßHºðþ“ªÚÿ`Agâ4Ké—s—?&ß005÷ÇË3 9-\Þ­âëËXøÏVÖ–a©xzÄØ<Új¶Ö·„Ç䯒¿î:„ʺáI+Ó´_/õéúž7/4›’ÿ‡õO³¿¢û¹ÝsT™üA©j ,VYuI’Þßt;Y˜P€)R[•Fçµs÷Í,Ú$é$ví«4³«»nÜÃ,ÝB–(àdâ»­Oðoü%2yWͶ™Ðmk9mdÈPðÈé‡Ufó@Ä´D· q÷Özm¤?aŸPòâºmåŒM"†+–YY‘µ ÆuÇšÛNOëúþ¾F´eSÎéü¿áµÿ-ÎA~Ò÷D^ÝýÖ{y”äG¹ÞCŽÇŽ^j'¸ŒIºÚÊ8üØ­Ï™‚pLeIÿÇ‹}V¦†îíBÅ íqº?õÅ™¼èö€2zœn-ïÚªÝÞGuqoºÈ·ìÏ–¿*¢uÀZ󜢣x¾½~KŸ¯Ü}c)KU¥º}ûyØ’Á!Õ&K[X!¥ aT’Íò®{õ?1÷Íz7ƒ´}:=.®Ÿý*ÞéE¼ž[,†6<"“–>^¬œð p¾7Z{I¨E±ž 3¦Æî ýЬIíÅzñð¯‰#¿Õo–;x ½ÝÄË0lFdŽB¨X‡ýZ‚rG\`^®WNúµþ_Öþ–<\O–/n‹wåµök»wØô{;+Í#EžÁ%0ß)­T!Ë‘P²g‡Îòp0»ø#v*mS6²µÐ™¶dÇ’ÊÀö=x8 AÅfëÐ<ßèP´ŒaŽCÊmc#2¢DÄ..|¶9Áaž2*¾©{ocfPíŽ6™@Œ°?3( êlFOBxÍ}dªF2K¥Í=‹¬¯{Ýÿ[ýçQwãHlê5Ü«•Y>e9ÛÊä÷QÛ¶k%¼Lº¼–Ú«ni0ˆ¢?º=ǰóÅyïˆõó5ój&ï¹@­Ðw8>ž¸ì}‰‹DÕoU…×l›–8Ud›§£oâŸ_µŽ©bw[ÝÎî>uaЩS´Ž„ú£ö3ý¢ Ÿ[[WAk$jZúÔHvžþOðúvõ¯§“ÿfæ•jÓþ[;viY¯KZÇÚáóï­P¥ ¿.Ÿígþ~zŸ«¾» Ä»”m»¾¦ºaÚÏ>0v¶à ¨ÿëu⼟áOŽ-|A¤[ê6—Jþda“çSÁÇCÓþuêmÐ þÞ2Ûé8ê{P—1µö†‘Tf;Ww?w‘þ41 $B„.GÍÓŒŠ†# ,hHù±ÉûÝúÕj[²Ée ª…=Mk *ΫÛ„Ûûϼ±¯EÁÇZ©47—$§ ÅGâ3øŠ·Ëv¬Õ®;t㯸ÿ.m¤Žš5(ó|ë–ô úb¶Œ6w9êjŠWVø+n>öyçñ?üþ Ý«þØ¿¤ñ_€µuÅ…îôÛ[Ž"¾Ux‹mi€\×Û7í,m&_)#s»¨ÿët¬»ÉÄ–Ì’@ÄùU€ägô5Ç‹ÀƯ½Ô›óíÓU§T,wš•ö›=߇õý1¼øî É|¥³ðy?u› ÿkB.r'•«÷U³‘ŒŸå_mÁj?à–_ "ÓápËmpÒ|Ò u nG8>‚¾-ˆÁ9f'l|•ù«ÈÀÆ´kJ3éd½54©VœèÆIkö—g¦Þ¦àŒ”goðöþu½á‘¶±?7Lõ®‚ò£›+(c»– G×üñYZ¥¼¯3É@ ÿuXqùߨVÊz&ºžkfKmi ÀÛ=¶wÇ”eoº½r1ÔƒùýkRæõo‹øã->ŸvßhŽLüÐ3A9è²cß{V.“<–ÏäKËÑ·c#éïZº-Ìv:šÇ3FÑL­±È¹ ¬1Ï^@éîÔÑTêAyèÿOÄÏÆW]5_¯Þ¿Ì¥ax'¸c"†V‰žHÕ}óéï_Óü›ûVEûDÿÁ1<;àíSSYõ¿…º„¾¿Rù²‚e²r=<–òûÿª=+ùŠ4}NâÚêÝÙQ^/’le‡ ÎÒ{zýBÿƒThíGáßíãÙÆæ÷n™ñÂ2]Go&?ä!§Ÿ1 ÷Ã,àô׫ S÷‘Œ»ëý[šÊ1’|»4¬@SjAùV<ÕY5î$vÀæ±çÕ.\ó÷ER}BBvãéóWÒF„mcÍ4ï50ÍäÖ]ö§`c÷ªµÕÅÃü£#ŸZÎ{K©fÞOË×ïkhÓ@Z—P‰ŽL™ü*1w6ËþíCufì|ÈÓ'× §"O7×¥hBð jF¿‰FZFéXSÝάɻ¨÷öªÒKu+0iN1UÊK—c~}A~b÷i-u ]]XzÖže·O½Ï5¡¦HLƒ~yè}}ª\B2Ôé-.eeܬ­ÞÃ’?­b­·,9=ª÷’ `-E×b·ڂᘱªój°Â™,i÷ve(œšÄ½±½g#iÁéIòÜ64ŸÄ1µdÔQ¿8R.Õ’º5Ì…Ú¤MUl¾î¼í©J:¢¹G×!G9íR¦½K›×½gñ–-ŒÒ.ETµ%*h5zmk¦¼«’ØÅiZé—%Kz6+^ËJSò½ÝpkF 7Ê1Ø`­uÊr8ãE3´9GÎvíÇZž ¥‡NÄu­ï±8 ¸Ç~Õ5½²’:v©ö’f²£̘4DÏÝÿR1U¶zzV»( ’¿¤ ¼ŸO0ý¢e¦•¶PcÃW,`Ž/›»Ógq ÷ÉZt2¸E‡§ËG1\±,+’Á…X†tÎÀqéT^Ls»¯j‡ÎÄ‹ƒÞ¦C²7 £®?úõ Î0Àö¬ÿ¶»Ctô¨Þï'nßÄô¬ö t.µÁè?ñê–ÖTwÀnŸz²âBÜ|ß[´ºòÏÏ!üOZÒ2dJš”È&–4i,`2\7ËoŽ^R@EüXø×òóÿ\ý¤¯?joø('ቢàM¥éúÃx@UéˆûbÜPŸ»ž8Èæ¼ IQ©R¬–öµûj<ÂøÅyhø¯«êWmw$mn!¼H o,å9˜àw.yÇZ­âÛj 5EêH¾twW«,rŸ˜ ¤.2C 0ê{ñé^­8S„Ttþº=ŠÇâ±UoO»þõ¹ÓÞ|A¿Ö¢¼¸Ó¡f’IÅŒ“pêˆóÓæ#œõëYÑjÞ$ñŽ5­Q•®ÎÞ;x~ÐÁLA¶üù !ƒtÇ^µÆ|<°ø•âĸÔ4ùE¾ž·*‘ÞK&ßß8T%ˆ.s´u<ƒ^­ZøkÀ?…¦ñ£j²êiª__Ø2ù"5fýËDù;×åù2O šr©Ó©Ÿ³{tß^ïþ ^KYºðÕ¦‘¤i·Ƕk›«‹Xw£¢°f@Ê9Üàg¯Nø½â­7ÁújèPë^^|ä¬.¢Õ¶©àósž½Çzó_x€ë¾$߯êVÞþnåˆ|ˆHí÷¶©Ç«žµ®4¿x—âV¡=íªÝyòù¾^¨Vë¸n ¨e³÷z+—ûn‘¢™5Ã^A&gd „a•F0Þù˜ãž•Û§*³9)Ó§iF×nÎë¥ÿ#«ñwÆ[gÔ®„ïVÉl#Xte˜þÐvy·,Íʶq#Â8ÁÏœXêwº ÷«©ÜL×’ªhvQ]2e‘ЉdÁ’_¹<úV}î£j°µá‹|3ÈU—Ò&ìù(GÞÏ›Œt®Óá'|Wñ!âÓt_Ç}y«jñùzÙęޙaLçˈ|»ä8㜑^tšæµöMߦÝàß{ôg¹NŒhÓÕnÒó~K¯­½/®Ÿ«ðGOÍð¯á†½ûDë0Ý-ι§Éc¢Å&¸b  šêdfWeùWkIœc#rí®«ö‚ñø‘2è2j7šœÖн…¶›ä¤0î‘Wj;gpUFÁÃgtƒ:ßÀÙ{ágÁ]\1ø’×M{}zÎI•müùçÿK˜BAÊǹöî*+0¼|Ûñoâ´úÄÞ$Ñ´Ò[Ü›{«Xï«Fª¶ñÍf*«5Ԍ記6HLR§¥=/yk÷í~Û]:ëÔŽrÒÚ[¥úÛïÑtù~)ëz¿Šä—º¼qÛêÁjÖ÷Mn¡ái^]É)ÎNÌ ®FíÕâ?¼K·,W–¶µc¨Gy3_If¿hk˜ì¦?)cdWóefÜL®k¨ø‘ã+Õøƒ}¨Ø[ÞGyj.¤…mlÄCu#JóGVE^Ò6$±ÄOÓxÎüo«ë\éà¹|BͦßÍûÅE® Áyc*dŒ°`âÙk!aå/yœôª~÷õ¡àb1•ìú»é¾Þž}ìŽ;ÅZ‡/õ;^éPèöv:íÒéð³I2Ä6ÄÉRì˜fʳ–ÎI9ç|3á[ïxL‹D»–×OXí`’{©<ÈâlO2Fþ^|ÙYVM«…Ë•¹©|k¯§Ü¯„¼@mnŸK±-+Y¬[ më”g6Æ*yˆÆ`h>#Óm¯bÔçó$ÓþÇ0†Æ;§Œ”I 9~b3Ç@Cs‘T×_Ëúþ´*Ÿ´öm%ýkoë·SYüu6§ñ?Tñû±<“(n4x¤µ_™Š #8Ç K1ÉÝ·;€¸oê‘ÚY%¤‘$Þ\±½¼Í›FJ€sÀõÁÜ ë]&¬Òèú-³xâKåßme%ЛÏ ³½2Yb n·À?/‰¼C6§*®¦É1 ·Ì»RTÜN3´"äõÁëÖ¦µOcE¥ýLïÁÑöÕÔ­¢¶ÝmÕ>¿—«ÐÆ‹zù¥n0»•׿ù‹p¾ }(³†Y—Éóev‘Ù²FÑ“žüöúÕm¦MÒF›óó}ßá©íV-™Õ$–ãÌt%U·só û|¤} x´å¯ëOøoëCée&lxvÞY5X-¥€34ȳ'æËn#ÜíÀ5ßxNóFºÒ.ôS+]X±§ÊÆ÷ Ì»úȸa£÷® –MGθ‡÷Êðı7ʨv” žÄ•žüæ½Ã+«ê3ééz#ò¥šÝÖHÙFÔs¸¾ Œ,Äî0ã9?S–Ç¢^KKõKòÑï«è|¶q/q7§]íÓ§}lúmÔôqy­ÜÒMz²,²4ñ¬“†7ÉQ#º®ì33«þ °=GñÅz?…þÔ×ùÉÈ;¨gùsèsÃü¹9«Ú¦«–"ÏF’uµšÝ%¸µ„ï’©3EÝX>NÃÑ~NÕç¿õKýO\µðôöoŽ›öÙ¼¬²JÈf•8hÕ¤!Iä#°èæØ·GÚÝè·z¿òµÿàŸ9“åѯŠ6ËW¶Ñý^Ú_ÖÆm®³¨\,ZÆ¡)fq$lÄCsé軳Ü6+MÔäŽäKn­·Ës1ùrÝÇ!»ûIÏÊMzÖ‚âêÕþX^ehávGmß2ŸaŠÖ¥ˆFQ¼»…T2[̸\•Ub}06{õ5àáëJönöÝüÚüZgÕb°ñ’Ú×ÿ€ÿUúž•áëµDbÌŸ»Ì[ï€@ÏÔzžMoiZ–¥¤êøƒÃ7“YßG'îä„u=ÁÁô ƒÞ¸7P1G»ÿxÉ…f+îO§>¹â¶4­I!™£–óÉ{‚üà0:Óp øûwúJu!Z²>3…œj9Åê~Œ~Áÿ·ž—⻘<㳟¬BÊ%ÂÇsoõŽØ‘ô¯Ðïx’ ^žÆàH²€$mÜŽžøü÷ØM¦N°Ë’A4,²[\[>Ùa9ûÊANGé_pþÁ¿ðT¯ø@¤±ø_ûFêÛ-ÚQŠäÎÓ’ûQè‡òÓ¡ïƒÉƵyö}½ÌörÜÑ ¦Œý`ÒøO¼—®Ó’8?ýj”]˜ãTV'æÆ÷oóé\¿„Mäwª:\[Æþ»Š©Fzöïø%Çí sû1þßß ~2(ÿ@‡Å–¶ZÆåùE­Ñû4ç<òVo_–¼O]’Ù´ë$ ùqÈÑ®Â~ñŽ~ÄuèjŒ3Þiâ4µ¹ÚË"Ìž[¡Tœ©âÿíïžÿŽ»‘‡þ VòײvüìšæÔ,òF„•Ýò÷ã·éQ6áÀ®[öOø¡§ürý•~üh±”H¾&ð.›}&üµktƒÉçÌ :×{$qOÆÏ½ÇÒ¾²_h“8gO–Vf4¶JËÃTMe‡Ë×–Ò8òF=6ÕW@NNqÛŠÓ™ßBm6[@¬@5VêÌÌ£+Ôu­;€3€µJâR´¿Q;ÆÞf=ÕŒ,v01Òª<:õÛííZrEæaS×v*;rŽÿ6y§ÍeqòóãÒÎAühXé­)£©£HÒL”ƒž•¡enÐ)”ª[aòYܹ§Úp¿û5­i ¼ 4­úTZ5¢™·“ÇL+§±…Y`5ÃR»Z#HÀËO 09úÒ§‚’Gà|¿çÚºxI‘U€­KKXت 㫊œGqæ±Ç¯Ñú¾Mx*.¢&ÍzZb9åOJö:•á r¬ÆQfÞǪ<Ê犫…\`Õ6ÐÙú¶çšõ žÌqY³øqLŸ/ðÚžaõ3tåÑb²³ÙÛ¨«Œ­À#hªÖ$gwé÷ºÕͬüÄ×¹ÎÎuäyvï>ÌiѹC’z}Ú‹Êf`†F瀤ԱÀ¨0ëKžÒ IO˜ý)²ò0ÍÚ¤HÃtNŸZ†âÞ|îTÏj¯iIRWÃcåõÆÚMà0`­Œsµ©ÆÆå¤æ,óDÚmÚ íe_Zjq}@kJ äýMCq0ÊŽÝ©ÒE8ýÙÅL–Üã,:Ñ-ÀtYc‡û½ªCm)ÛïŠ}š*€ÎFìã•¡”8Nî‡Òi­Šå2¼§AŸ›þù¦¦ÆX· ¾µ¼!…ÀR}i§I3¼pÛc͸‘b…±Àv` Ÿ¡9úSí#ûÂQ”Çïø9¯ö¬Õ ømðÿö7Ò®<¹5ýboøš8äù¾Ëû-.7Î7s{4g­~t~Îÿ²v§ñÇÃz—ŒüA<Ö:6Ÿ2ijF¼ÝÎNYú*‘’;‘^¹û`x³Yÿ‚£ÿÁY±K8v(POw8ûÌpK¤ý|ÜW¶Å7-ºüÝÚ^WnÝmdgšb=;AÚÝ~GÍ ?g­Gãí3â_ ø[ÃV×/Ãÿƒ> ÔîVâ,Çj«a%½»(èdó刯|‚{WÈ7–z§Šõ?ºh™äf;ai¨‘$q“ò õ$ ×í·üköÖ¯ÿfŸ‹_|[॒ßâ§‹mtM µôq}¥@Æß*ç‘\LÜôc~+òßö}øq5‡íû§ü5–Â9އ¯ÝC4,W0ÈÜzŒªõë\µm,,ê÷›KÑZ+ïp“ôù¥‡ÂÂß‹û÷×ç#öSöøK¤|ø) ø>ÂŽOìØàK&ïß”HØ6î=s_Jøbä3}ªGb²nÀÉèxü8­xŸ€'ýżsÝç§ ž{œ×­è«m”‡åURÛO¿¿¶kÒÀÓýÚ]—ü9Q´b´;+=JPXÉ9XåË/_”`ëZsÞ@!HšM¡²vòpœV•{¶uáP$|u9Ï>•÷дÂÈ]Ú<vá¸fÿõþUèF>ó4Rv4n5HÄjànóæ!¾fm»‰ü€‘4ËpZ58Wq8ààŸæiÚ´¦1#Ìå‡R3Àõã¬ÝNå¥ÑJà´q¡8Üzdûq[}–fîõ=Ãc·îßq×ä(·½³µÐ<2¿îæ¨ÜêQVÝò¨Û2‘çR$æw’8¡GeØ…Kc×õ®÷.:‹r3ZÎÇË>FæqÝú~•ÜxZáb-ó¬ù› –çùלØÞ²M Ê¡W0ˆî#<ãnHÿ ÚÓüO2ßÁ¥i6_i¹™6ü¨1ñœ61¸g gœW‡Ž—,[ìzx8ÅèÏRÓl,oA¨,`IÜÌ~­Ÿ`9¯Ë_ø,Ïüæ +}_öBýŒüf»äW³ñ—ì$ùŽÙ,í_=ÆUåz ¡ÿÒÿ‚¯ÝøRÖçö8ý˜|c·R™|A×´»û•Ú?Ðc•R ó ໞµøí©ßI3ù›™—,ÊÙbsœš¬¿%ûÚ¿%úžvi”¤ðô«ý?ÍüSźë$M>§%À·Ü ó¥."ù‹¹è l¤šîg¯ 7ÄïÍ{¨üÍa¶e±äe‰ÜXvè½xýÆ 'Úð·ÍïïíÖ½à—Äø5Ü3›øÖ)·6ùóê3šõ%)T÷QâTÃÆ;µ¯è}i¡xKÁ²hšíÌ34—_k[‰`#+’¼àŽz cžsñÄ(5m"O2;‹†¸¶¸ÃTŒÌvíÀØã·|ÏüC¼ñWˆî/õKÆ_ 8ÛÁ,í=:#§n+ƒÑ5‹—žaw¹•ËQóI¼¶á°wbzöÅL)ò»³8Òö‘n:rÛñþ¿CÓâ_Œ5+-á'DµÒ%o²Æ1[œ•›3Éî5Œõèmwê6ïih×ÞQ’Iîÿy -óŒcvÖb=§ÁèZ•ŽŸ~Mí•ă÷†;[Y°Þfݨdô°Hc^ñX¸¾µ´Ñ<;¦[ýžÞ ¿gV¸i$ É.ÝóœãøVœÑ§²°¾«RU-}¿ÖûwØúCÀ¾,Ñ|IãßC®ø{Ä‹¥ÜkGr I`p |Cào¾¡¤®ŽÑøúê8åSogá>80p«#|Ÿ18T#~¹¯C»¹ø%f~ѪþÏ?µk«™¡C©êRÄ×8‹3à®âÌ\vžjókV:W·ü³MQ§/6ï¯üý3–øíðç[ð>¿ªZøÃG¸·ŽÊù¶Ý_øšÍlȳì‹ì í¦Ø¸qÔæ¼ûH‘f¸ÕRâ5…£FŽkÖ)ÆŠóËß–ë‚M}àø'í­ûRøÂÛDýž¿aYÛêŒ-åÔtË–‚%vr3=Â$Hó’>çZú“âüçûrþÈÞÒüuâ_ÙÙ~!^-“K¨>‹« Ï쮡bü­pÁy a8ºÖ’ÆÐ·/5ße«þ½lZÃÔ¦åR)Ùù_ñ_×u±ñ'ì¹ûüSý£¼_ íbÐéÿëP¼S ´ñ–Çç…^Iô¯ÒÏ‚?³oÁ¿Ù{D›Cð-ë f;KMSÄ—êÓIåǵܪƒ˜ãí^9ž¦¾fÒmý_à¶³ÿ_Äïê^“I²òcÓõMM=ÑÀÿždkê/Ù÷âͿń|=¦X\=ÔŸØšzßù¸š5i ®¸ÉÈžçÉ”«b«ÆH7¯µw/‘Ý…©JSrwnݬ’ì–ßçø¿Æß‹®›ãg°kË‹¦Ôšºm[{Œ$‹…Œ1Q³|ÌňvTeð_kz妅• ––mf¾µÕÖêõ–]FY•Fõ…æFñ3ª9Œ‘…€;ßäŸ~âX¡žRçPwÖm¡µÇ‘2!s8>c©…REøCŸ)ñN±bÞÁ¶4:ÔW1Û\êšÔŸjŠÝ£{IíÞ@ÙyZW“·k$¬YÈãè#OšÓïý}ßçØñ1i' 7ååt¶Û}ÿà˜º¿‰ôM"5¼/pëqm5¥Ö°­æÜH]‰É ¸†óÞO_¾O#㋹ôï:þÚÍmÚÝd—K¸i2D¸DqÈ\nùTa¾UÀTV^"×cÒtÛO쥻Öma¹¸¸7SE4Ër÷_u”Ì=Ëå±o™˜à çY…ô/Á¦Àÿl—íRÇ$’B¾U´Ó!b#ûÂFÂÆÛÁ ó í5Ó‡ÈâŒeí<×o_ë×¡Êø‹S·Ñ®­–rÜÙ[ÿj[ÅtD3LÅd+"è‹+ÉÞŽMdêVm%‘myŸ±¬Ó+,eXÆ~Ppp÷ü1RjÒIªKqâ½}âºmRòdŽá¦ËæÆª¼§X“Ðð1UµŸ°G]XÛÉs%Ö—h²-ÄÛDDv°Cóå°Á9¯¥r)tßóþ´ZìiËÝèÿǵß_Ð_êñI i-s¬Q¤2G&V?/åi Éè©ò¢žù=yãïÿÒãšúfRòlxIQó.â§8ǰÀÊ´./[W†Y|¸à ¬ mìvñЖîsòjÌ,“]# f1]ŠÀ˜îã°ëÛ¥pâªû_F¿­<¯ø£ÖÁÐö·^¿×¶è>9,šÈ‘q´~ì€Xì$gž›ÿ )¤°¸ÿ]æG£.åኌãùþ´ß&¤[Ÿ1cp7÷ÀÁõ=qíN·O–r´›˜7vBÿQXÅó4šóÓçø–Z¿ÌÐKôIdä]³I#HrWŒqëóƒÿ5èÖ‹awtÉoaÉs«]Áeo2·ï7ªùkòýÂKÇM¬Ê}kËT¬q¢&v®L…½wÄãðÅv,s4~›vË$×Å.îq¼:bxvp{¯k-ª”žŸËýyßüÙâfty£9mËËk[ñ·™é6һꙵD2GnËjZ0²Ý.À¥K¯n0Ç?x’ÝEy‡Äy,4ÿa,fi/&Yè°Pbmë"€2§;”‚1îŠì,|T–¦C§Oë¶ò«A¼ÞNÜd+†Ë·#>ÕÉøÞÖÖëUÔ óÞy—¥»2ÙŒc ¬ àc<×nmUVÁ%]?-®·þ­n·<\¢Œ¨cŸ´ÙÆÝu×[ÛÍüÝúZÜì­t¶ÍmÌò#}‰¡T$°Sº'Î6ƒFrO\q[–ºª§üLб’âà¶KQ÷”r?ýx®~Û͹²dŠñž%ùp ‚Þ^훾¨_LV¶œ‚êõ#„Ú›cXøÈÈÁÇû ±÷÷¯~k®¶þ—ËógÒb£[?;þ…ÿÍ)Ä6fÜ\7ÊΓ®[wðÙüp:p:w­EñÚd•`¾a÷¹ÝóðÝ99öÆy¬8î"EŒ%®B‡>Tk–‘±ÔóÔœ¼f™¨Ësx†Ýƒ2¹}ßyI8Ï'ÿúëÜ…nHéÓúÿ‚xsÃÆ´ýî·7ôÝ`#ƪå·6vHG÷r{ãÓŸ­t^§Õ«µÔ‹!aü\3üÏjóÝY‚WtÿY'ÌÊìŽ=øýEt’D«š5™f*vò¡€äg¹Ïþø5ÓCÌqcp=-cë¯Øoþ ;ñ/öGÕíü+â7¸×¼5›Í5¦->˜‡«ÚîþÔÄ~RG&¿_¾þÑ? ¿hÚ|BøYâ{M_K¼ŒçŽän†7C‚Ž;©äwõ¯çkIÖ¾ÏoûÕ]é¼:Ž==ùú ôÿÙgö¸ø×ûøñü{ðŠþ6³¸mš×‡¯$&ÒùsÎzì»"àƒê2+ov6åÕvíÿÈxÿ„Çáö«åßÙMgC¼‘EÞ›!êsÊ’F×)üW¯A4L×È›|äw'w8úb´]9OiJHÜ–àFîPc*ßw=8Î+Äû!´’Vœû3nÉÆCøÖ† ¢(–#!oÞm?1÷ëŠç÷ó¯Æ_ø4ßâä’üfýžïo¥ëöH×NQ¥·— ߇-ÛŒö¯ÙK]éW;â1_Q€Ÿ67{i÷iú8‹{où¯Õ›wåP›€ÜçëVN—p ‰½W–ÊU9XÚ»”⑜µH¯q#Â֪ݬ‰|ǯ54‰ ?<_ÃÇ^K;«¾6ö曓è²2®!mùÜséIk Ú’/ùíZ ¡ÎeÌ™Ú}J·o¢ÂìcJU9PãØ¡ »,‚=½ëZÞ—¬Ûh“°Y#µÀõjÕ³ÐÝŽ&?…sÔª¬Z²èC¢Êþg·Þ®³H|ÃŒ~BËH… ŒV­¼PŽ yõd¤Šè^‚&a—^Ÿ­jØ[1]Ü©Zȹ\šÖ¶–&ÚU⼺җB”eËrå¼ óв"9CPZȸÿëÕ¥.S×›RLè4–Ä3Až‚ª¼ »!:ó÷kAБ٨Nàq±©ÂZh&¹ugË–÷R7îál¶ö­[}*þEÎ}…w?€ µ‰¯Þn¥knÛÂpÆ›E°æ¾¢Xå}ÎOgw¢<¸è·…¸Ï>«Š¹mᛳÿ,]±ÎTW¥'ƒ“wü{öã5zÏÃ0Çò´ éµk)æÝ2£FR<îÃÂM0 èÁ½=*Ñð4…K+vé¶½/[©â˜h1ÈÛ\²Ìuп`º£Ì[Áž@Ë«në÷zñP]xnEL¬gé—:HzUWðÌnvß5¤qè=ŒzOuáÙwïãµV}çkþ¹â½Z÷Âê‘äÅ×¾+Sðñ…÷,gmvSÆsìÈ•%»8DÑv?·¸«鮫·oø×Iˆ.ÖBËýÚÒ·ðݸt}Î+G^Äû3‘³Ò%!fµáÿðT?ÚçöGý…þ#ü_Ó/–ÓX±ðÒhser—× Y[R$ºó?í‰ï_YYønU®ßOJü‘ÿƒ«>35¯Â‡ÿ²G†ëÏøÚ9n¶Ž–ú|C1ÿÀ®5ÿ=«)b¯vº&ü´èýMhòF\獵ÅðI‚6¾øM¬|r×,ñ©kR›=&iç[T'Ì çøß¿}ŸJëÿh-+]ø“©è¿>Þ ñÞ½ƒ¢ªÀ\™Q¥p¼²¨1ÇES^¿¢x^ÏáïÃm?ÁÚT 6Y[Åò@ÜwÈ'>õôGüsöK¶øÇûYMûTø¶HÚËá.›ö-ΆÉu«è¿y3cŒÅn¹ióÆ+È©VxZ ÃãkOñ=É^ïÊ,ó­É)uw~‡Ñÿ´ÀDøûYü%øo{oetÒÒáNÅU´¸¤cÌcwÇRM~4|<ø;¤ëðWߊ~;Ñ<:`Ñt냪é/·j£ÝùsFxìC±Õû™ÿ%´…¿dmyn.<“&©¦¤r-ro#qî¡KùÔÿô›OÚ‹â‹4;Pš†‘¡%¼Öxòä-Ì~` ýÖ*Jÿ²ˆSŽ4â´J+ä’ü]ÎêÑæV]mý~ Ÿàég·“ËŒü‘ÄK°]ÄõÆ=ëÑ4;ï9ÜDÏ#dȬ{ã;r:?yׄ]mÉp1÷U³Ðçÿ×]¯†EžT§t’nÞø_×ùW±…,RLå{ž§qwòºÇ»1žpjó­¯’dŽõ36:Ÿº?Cú×=á»û°,sL¯"²£Ý{þJÖšò!l¶öÉ·ÌeUVlz’IíÂ×¥.Tÿ¯@Œ´°šŒÐ4¾hP¯'-ÕW“øäô¬-b)LŸ¾UýÊù±¶1AÏNI«LÍEX3ò•êUY‡9ïÉ?…W¾¸’Yò_p–fdÜ9 ¿ÒªIrê‚RIêÌÁ˶6vM±£²4™Ë7P}Gj’{—kæÆÅ·‚¾OS¦}­C¨Ïk,p•ÛifÈ—}9ϵÛ#qÔ›‚ÇÎáß< óçcHµ¥Î€êÑGr×’O·s1 Øã’Aü|“ÿiÿ‚—ØÏá Ÿ ~êñ¯Äo[”·‘fÌš=‹ ­rQ!ÁTÏ×°¯Vý¤i~Ì õ¯Œ^7uk=éh$æîV]©ÿ¼Ä}:×óõñ³ãßiŒ:ÇÅ¿‰š£^jšÅÑ–F’±ÇÑ#_EUàW“QBUý¯s¦3’Œ”~~Kþá÷×^ Õu+«Böõ¦šiŒ³I4›šVc–f'–$õ&ª½ü’Ü}•åå°Ù Q”vA$jØ\nÃ'œ—0Ç#Ç’fU$Îxõ­ã'mYÄ¡{"¼3DÆDy2Û³†ïÏð5©q©K°Í ¼Š»¶+FÃrǧ\Öæd˜“7Þ¼ô<çò«‘Ïn¢+‹¯/ËÜ̲K–g0©è=ë5YÆéT£Z[ÿ_ð ϵC£¼?½™ƒIpsˆÕpÞ=FIéíYòêÖð_Á5½Þß%q%ò.ñ÷b¸ÀÏ­:ÆÎÿÆ:þŸáÿh÷Ú¶¥{qµŒqœÊåÀHÂ/RÌ@Àæ¿U¿àšÿðm¿|u%¿ÆÛâVÑt‰%Óüa&/'ù³‰Xq0@¹ê *˜‰J^Κ¼»Áéæÿ#*8U¼¿¯ëåèÏÿàœðIÚƒþ /âˆoü%¡6‡à>ãÊ¿ñ.¤»mÐd³äöŒ‘_ºŸ²üõÿîø¦YÍ®xþ-bÙdÔüBÞprF X³å¨ü+èï†>ð·Ã¯ Xøáß„ìôM‰b³ÒôÛqh c 'Ôõ5èÚø°Xž1JxJƒuewÙl¼¼ÿ.É|´¿–þ¿¢ý^¡ð³öuýžþÚEkðóàχt¸áM°ý“I†<ÁEw‘xGÁ3´SÉàí-ž/õlÖ’¿CŠÏÒnXÆ ŠÚµ–B nûµâb#Ë#ºGÊ’4¡a ±Æ¿uBùTr²²l {ÔBWœRK+È"¸Ôct:®JÇ”þÑ_±‡ìÁûSè7øßðcD×"ºËq`†UÏup7î ~ þ×¾øaû#kZ§ìçðJÂãOð…ü]pln$˜ËÕÄži+#m%0Ø@Á"0¹ÃWïÆŸˆ-ð·áO‰¾&-³\>…¡]^Co¥‘#%ä¶Ðrkùäý©>%[ø¯Åwž ›Âz•Ÿˆµ}{íbâHMÇš¦ÒcÁhسºád4Ax ½Œæ•åÓo™ãæ<´©¹GFþ÷÷5âýJKDox`µÕ§‡5Hãî.¦·ŠY$qn PŠDr,EñÈÜuó¯ÉgáïÌ`¿»Ý¤Â·7š Reó•bYXºo,¥œr6n”àÉ)âÝOH†ÏJ‹W¸·Š;kç7[&*ÐÝ*Ž]®HhÔ… ƒ’RE †å¼GâI[W¶ðÿ“’ßGqk¥Ín“‡í<ÐË˾K79SµJWÑFÞÎÇÇûÎ|ÍiÖÝ4ßîü½s]·ÑãÕ­´½N¸šÎÞ)4–†?³˜¡ó˜c$’âXã ıb©jÚ…Äsê:µ…Ä7’EñnÌ^Pp ØO”î@èk[R¹Ó.îZòm*õ;;µK<ãÌ‘|¸y pر!TªžyÍÕ®­¬d“J¼´‰gÒìd†I&˜HÏ !B©åXÚ3Ç©ç—5ìÿ¯øc×£Å-.úëÖúìúèaÝ[6¦±[i5weÂÈ<¡ °ÜIï“ÈÀÈÆÜdЇS⼆ò$S ™£mŒÊGPpHú€>nœÔÚCÞHÐÜͧÍ$V¿½2F¾b‰Še•‰ùA Ï>¸ÅcÌÍsmss<¤Ì­ó¬œåyÀÏ#éÏ•—ãúÿTz´¡ïYì¿_ëäþò¿Ú®c¸[”M¹·³( ÂDùˆãáаÆ*1¨¤„ÝÉ ,º‚¡GÓ;½ÿZzD •c¸}£dÌí¸’ŠÀnÕJVfMÑ>hgù@À óªNqë×òíø¤#tþ¿«‰35¼wQ'—&d^Ç’GãÃ¥>+…˜6ù–‘•S€qÇê ¶f…­æX—ËŽb®J¨?EQ©ª[R ˜H_12J£ÉÆ~¼Tr{;4÷·égýuLÒ2ç½×õýk÷tûY®­~Æ¥–W¸D9`à(õ9\çÚº]®4¹í¦–?ßMomwF"d}ËŸS°‚JæmƒË'ú3l“lh¬Ý+‚ßáõ­ÏI=¾™åZÈX½¯ËíÁåß´¯ü $*=þ•è`š„ﮉëéåÕëøÝ~62”=zzùöÓðûúÍ:m2ãE[²Ån#¶BÅÁòæFÝ;¶ìB{ŒšÌñ¬ÓÇ«7ˆ7-´i èxIÕ£em½ð@üýéö·ša>k·V7–Öþv`1€1ê¬'ý*Œît§º’+Rÿ2‘nûˆ‰ {dð+ÔÅÊ2Â4Úº³í¯Oë©ááé8ã6zß~‰ÚëúóìcßYÅ ß „ò 'Qýì>[b“å¿n;Ö†™‰#EÈ«¹cƒ­œþòžÇœt=« ø'ðÏÇÿ¼1«I¤[yšv‡?j6ƒ'œÀîŽ xnâ½ñÉç+ì ¥Ê†ÖÛm½É 4ž^ãa&~e¸16üò3ôÚEx˜:Ôê^Pzu]¯ú_Uø÷©^§,9îº÷¶×ó¶{µeÒñ^á§#TŽDЧrgŽ¿Ž=±Uo/'¸‰ZT2D#çB3Ðt'¡žµbH’Fû8ZÙö¢ÜÛÜb6]ë’ô8Ý€xïAK}F ¥¶°fòdÛæ[ÈdmÄ#1€¥²ë^4¥¥ý?«tþ¶1³Ž¶ü¿Vd]]üÆu“ËrYî?G#êqŠÑ‹U‘!„ÝF[Îó$ ž1·†ÿk#>ŒÞµ^ãL¸ûMÅÇÙÃ4 e”É!FòÆŒž£z{Pa•`U½E>~V9=>Qê;zïœd¥Q7ýu:¥ìªE]?¦oCâî ¬¨G™·åÎwqìó®‹MÔ#·³KŸ?Ê,»›jƒŒ’ úão_zà­g™Ún±HCòà@à~y­½êK¨ˆk…ÛmvÈ>WbI'ƒp¯C‰Õw<|f<šm×úûLøgñKÇ¿ü{gñ_à׋dÓu‹<òdÛÊLr¨ :9SžÄ`àØ/Ø'þ %àOÛáç™ Äz‹´ˆc(ÐL™hØ’¾|DýøXŒïÆAá¹æ¿4M[í)!ÛwU\·_nœé[>øÁãïŸtÏŒ¿ /¥Ó5=.\ɘUo#ã|3ŒÆøä™ã Çg¶ö~üuOuú¯?ÌçÂÆ¥:Ž”žÛ?ÓúØþŒ$ÖcœG4,˜VÿX®­œŒõéÛ­r?u*™£ »# Ü“ƒ^;û*~מý¤~éž;ðÅèn£d¾µi—ͲºkÛÈB0p7.zí¾!ëM¦oµe`Ì—Чèrk²§/³æ[3ª5½£×~Çä7üWmoöӎѤ]šo„l!ÌROÎe›z¬èkæ H$V¦)“¸q·òïÖ½»þ Oâ3âoÛŸÆm:ÿÇ“ZY}üÿª¶žx¯ ¾’3¹çh8ù±þx¯›§e&º¶wÓ¼¹=ûõ9½B&IX²wqMŽ(Ëluó9À©o#"c¾¼¹RsßëKgɯ¦ìâŸjðÝ>j縥jeØ,g¸>LlvîØò,g É=;á—Ãk#kždPªC¾òà\1Û L²îŒŒê>´Ó'•²B±²ˆˆù[×åztç§Oz±}i ¾Õ¦¶Žkqok6ñLmøBÐztÍvJ ž/ÏðÕé÷5çs‚R“¼_U÷=þÜŸÈÅÖ®b¼ÔÚ÷ye¸ $ŽÀ³¼þ š‡ÉòÆå•XŒ…t÷ýh‰Và|¯ó7ȱ/Rp:}ê#µiÙtr*ª²ŒwÈ?¥y|ÜÕŸ[¿ëäzKÝŠŠéd~Á³n¼ÿfð—†n®V¼gáýSA¸Y$À—|hŒsÔù&~•ý7Eàùbc½xïÇC_Çì3ñ¨þÍŸ¶‡ÂÿmÉ„þ iZ•Ä,ÁKt¹ŒÊ¼ýÜǼgœf¿µwÒ-®ÿÓlJÉ Ê7SÃ)ò®Èâ儊÷¹…J~Ö Ijp_ð‰3&XÿãµÏ„Æ ƽû öýÊŠ}+'éDs7}Ì>­+Ysà¸Ýˆxºœ³mïQCàp™O'øŠ“^˜Ú A±å-0象ÉL~ÑÒ]F‚ާŸ'‚¹#¯µ[´ðtq¦0;ð+µ:j Cbˆ¿pzQõùɳW»9Q¡C {B«Ë¤H¹"^žÕÖ=¢2‘Š£uj‘Œ€*¡ŠwÔ%£›˜F$'pôZb\…l"1ÛëWucÓwôª@&â§ŽßZìå;Xµë*†jÑÓoœm¿e¢DÝOj½hÑÆ2ÍÒ±«òìij‘½gvç·=«BŸ—8õ¬}ASo ÿZ·¦rWæÔ¢ûemnk‹¯—híJ&QÃüz¨%ÖõËSÖi\nTÏáXªj!R\˹ZßNŠ1÷÷«QÙ+ŠšÞØ“ƒZVÖ‰Œì¬']ÅÆ s=4ÞÄš±o¤©l•çéZ‚ÛÀ\}*An€n \¾ÚLµ=4• ÷6M7#ˆëUUTd~T¢ãpñ¨öÒ[²”yŒ9tÌ”üMB4´\²Òº·Bpš-£•¤kÊÁ*N+S›ŸK$` g^øu&Ü.k°–Ò6Ú* tàà nï[C(³9G¡Ã7„•NáÕ›}8Ð#-uØ;X¢:rÉ\WW×e(êÌcMÄÆK;->//>X­âi¥o“ù þoÿà ¿eý®¿à´Þ ðešƒmÃD¶í¹iš]F@;e‰Iÿc«úý¹<]/ïÙ'Ç^ ²œÇqq¢¶jû¶°’é–Ü`ö?¼<öëÚ¿˜ÏØ J½ø¯ÿñgÅF 5¦“y|Éqæî ¾_&!“É0ØöÙGÞÀNOíIFÞ–wü ¯°EÙôÏ=Í|Gÿšýš.~:~Ñz‡ÇÿÄ?áøs|‚Åd‹wÛµfMÊ œ°«+Ÿö™=ëõ1Š?ï:äן^«­ŠºÚ/ÿ&ë÷->ôZ|´ùŸSåßø+"Ýh°wÕÚO#¨?_è+¬ÓÉ‘VùA¶·aŸëXúõ„ºuëNÃþZzcÐqúÕ­;Rdfù•FÞ9ä×¹­ÃÌà­O’¦½ËN½ŠÆù¢V1Ÿ-vƒÐ'ŸZÞ¶¾ÈòßxVeÜÝËlÇ>ßá\V—uç\F³|Ëüo»°SÛÓ5¯¥#©†7ÿ–ªOËòƒ´þgšö)ÔÞc.^Vt2™OY—äÙózóÿë¬íBXä¸Äònå“×'úS†®~ϱFâ³-“Ô qíš§3Ë4í2É…*0­Œ(÷­¤»ÆQÙ™wò[‰Vy1ûÏ‘›œŸAøÌ“WKi¦…e_—hÚx«š´¯ÛU;™cA黟Ó5埾%Y|%øa­xæöàÆt6Iq!ùˆŒ® WhûÖîW<`œ»n~oÿÁtÿkY~ üHÓfß j ö?³\ë^[af¹“î!Ç]‹ƒÏvö¯…ôøåòÂýæQóÉŽƒ{ÇŸ5ß‹_µ‰>'¹ó.µmBK‰‹¥˜à~Uö™U¤ËíŽF8õÎ1_>ªF¥G;é²ô_æz\’5¾ïÕôù->Eµ8U1¾ /¹Í3ûFEÅo¿ÌáT.IõßZÍ7 7’òòGËÓŒ…C5äˬØ,½\áÕ”ñ\«CHáS&kÿ³§› Ï8ÇüôlôìŠú3þ ×ÿîøÿÿ ø£'…~ZGe£ÙÉü$¾,¾Œý—MVÎ礇 çè9®þ ûûügÿ‚‹üx·øeð×Jk}2Õã—Äšã)û>—g»‰=d<í^¤úMJß²ßìÇðcö8ø9§|øIá…Óô].Ä×'ýmäøù畺³³däôŠó¾µ)O–çýwü>gWÕù´k×ü¿ÌÈÿ‚tÁc¿ØsÂú‰ü9á¨üaãI¢Y.¼iâ t’X¤àŸ³GÊ¡‡e½ëìðZLÙ•77ºÕ¯ƒ‘-÷ÃÍ:sno˜ z€ä=s]t6(+]ôñk CKïÝú³ØôKC“¶ðtp6ï*µ-t%Œ‚õo.ždÔÐéуó(+XÔÇN[³HÐåjæ]¥Ÿ“È¡ý¸WK-²îÚ¢‘mps®Ó\ó«í¦ŽŸ+÷Gm™N¦ifYÒ§ 6ÿ*d…ÜGç\ÅEÛsæø*ÏŠî<5ûxƒEÓìþÑ}âK«}6ÖÏv ãŸ"u˜ápqØšüøÕãføŠËÂÓÉe«jZ,6ecHæ‚rfc&í‘•8;PŽköSþñÞ£áOÙ×Â:F2\^k×27ÚH¬bÒTݼX ¥NU‚’¯Å‹:œ^5ñ~£®›&k¿í+Ë›‹©µ5`Œ¨óò°Îá ³mE8Läž»—Ã÷jVþ•ÿ«žqZ?zÿÀüÏÕ/¼3&±y®Û[ÛÙÉw#ZiñIµg2¼kmƒ·bªÆfbNN 9ÈÈø¿]ºÓùÀÉ·BqëE8ÚèðãÞŽúoù—‘G\¶Ö´­6+6¹ŽÖ bÚvpÍe ÈŽ±ÌÏ‚ÙXQ¹$…u#Ò¹?ɤiÚýÎÿhE¾\†›ËfFäÆÝJœýEtÍö)?°õ&Öï/õ;K9¥¿[}<ĶOÍ•V„Ç*¤¸Pc÷Èãî`–)ã’ÿzI¶6–_™ÑÎ2=·nÈãïXÊo_×úõ=L=7ZO§N÷ï¿EçúÆCz—Wͪ«»•9~9àž úu¬+›× ¾\r2e£h¬@’0V m#êkRêòÑçxt»f¸“æˆù¸#j³–e`–9Ï'Ž•”bµ7QÛÑÙšO:ìd–\•Ï<`(8÷®ZÒæ·/õ²ÿ†ì·è{xò¶ßoó×帗K§])¸Qåùœ/ÍÃH,Øì¥XޤS'´†iÖ0Ç2¤“dqÏ9M¸ÇÔÍMhÆ5­·ù}ý.UJTïý\[-E´õ" ÙÎÙW*ƒ·s“œûV‡†ïæ±·wµ+ænPªÈ[tŠß/êùúY‹åB¾d·ÈÑÆ¬»sógªþó[>šü=Äztê²GÊFG?+£çøŽÀ1Þ´ÂÊ\Ë]¶]vþ¿á¬eŠŒ}›Ó{^ûÞÓ|˜Òœ›Á,‘Ú¢ýÀYʸ-ýÕyÿlãÖ³|~šœF[˸Éf;U÷ §jlb¸ì:ƒ×šÚŽK,#û-º«ùR+A!ä10Ìz–<äÒ©Çá/ø÷Æ'ÃmÝä½×uhí–Ãn’IO#ón?N¼W©Ž³À´¼š·{+_ïõd3y3c– ½ÉÆO8éÅw??nOÚká­¾Ÿàëo'ˆ<9g*´~ñ–›±§À"ºWòˆ£x"½fO~ÁŸ´^¬ÑüiøK/Á=n÷›?xκЖ^ßi°”´Ð¡bxdm£ø1Óèpø¨Ö4]»§·N»}ñ^«u½jnENjïËÑëå&|ê&MN‰oZãr°’ËP?¾3ÀWþ#¸çýz˜ÄuGY&¸Sof­åÇä*JA“?¼÷-ü\ãÜרþѰÇßÙóÂzoÄ=zÊÇľ×aY´x^ïíºeÌlå­Â±‹ »$ ÙÏäM¨Nëö™å’aùr]' ä(qЂ;óÀ®å'[ç¿õ¿UèsòÆ_Ã{ymÿ§GêKä\ˆ|È£ó ÑH©o›hù‹^1ó{ ‚'½`Â7>nϽ·’[Œàƒ¯üzÖ‚]@nU5%Ý#±1ÍnM§9•`m= ŽI©Ë-Ð[Ø„‹ÆË4‹ mÝIÉànÀRO=Aî*•º[^› 2—5šùÿ_w®èŸO¿q"LˆtxY,\“ëþ5«.²·–Mnªžc7ï$‘FÕÁç×ükŸÓ'·”¥£ÉÜ€,Š žœÖ†möÙf÷I ™nëצ}ë¶M,™Ïˆ£MKšKcÕ?cÿÚ“Äß²OÅ 5ŒÉqá]od$Óö’qqçå’>Çø†W¸¯ÔÍâΗã}?MÕ<9¬Çy§Þ[C5Ä2nIc`mèú×ã=äwfËq³}Ùå ýßs^éû~ÒÚσ5+_ž8ÖlZäIáû™‹Y·n0gûŒrWѲ^6cO²ÿÿó9qö”ÝeñGuÝ.¿/Èò¯Ú[Åv¾1ý«¾"x™dR/¼a~ñ1VLlÏ–FO¸É祟7»²}?ºz³ž<×Mõqý__Dg=¢‹‰Ïû©°ÒGƒµF8ã¸ÓdK›sæM3Gl©þ_Ê®ZXIä˪ÛÊÒ,2Hª†*ÁÔžÅJ‡Î?ºj;‹mï$“;4>w^F[Ž¿\ÄãömÆékòþ¿Ë©ØªGš×,izŠZ¥Ä¢ÝšImL+#äl|†Ü1ì1ǵhðI¿ÚÓöµÿ‚oüøæššÞ]ê^ ´¶ÕæÜýºÙ~ÍpÄ%‰ëø¹¶w¶sHYYYP3ck`güû×ôyÿl~ÕKãÙGâ쉯kM&¡à _G³‘óåé×Àîÿ².#•¡˜zÖèÊXu.ÌÓʪµßô?d šž‰PÜZ)M¡kAP‘šI`R2دžW¹×(ÜÆ–ÉéUgÓ²8_¶$‰²Wš"ÐkhÖ{8ÆI#[QÙ;UYЯ­‹˜ÁÈ Y·=ñ]”ªk©Ï8Ù™wºnùOËYZ…ÃtœqÇzÙº€ƒµŸubHÂ-zTåÎYó-ŽnòIe|úUsnÊÕÑ.‰$£çަ_FGÝ®èâ£gË)#ž‚ÖvÀP·•ÁÀ<ûÖô(Û´V¢Ñ°üEYÔÆG¡1§+Ù6št¹Æ†¾Íu((rÜwãµZK ±îÝùŠÇ7Œ>@OÖœ·2:íñ©• 2å6>Ü š‘/Q¸ÍeG&&ž.;Yû=4Q-M”“?-Y·û˜¬½>d?.êÔ¶“1` å«Qwö@ãTF.pµ` Ž)Ѧó´œV1Ÿ)Õº½ŠâèËQË8OZ¿öpNK~”jÆ?Z¨ÔÖäJ›} ·Ž{UIÁQÖµå·1T/mþò«Vôêt2tíâOø/'Æ{_ƒ?°V¡¬ÉÈfÔšQ ƒ(ÿgµžU ßiGÓÚ¿ ÿà“>µÐþ\ø¸éÂm[^Öƒoýä‘ dP¼ø~™ÿÁÜ¿ ðŸìaᆻ‘n5íRg]ÌrZã ¿ášùsþ 3ðQgñŸÂ‡V°|—:¶ˆÓ/–Š™EäÙÿgj7á^õZ‹ •ÂkuËñvü'¥S º´¾åÿð?lÿcÿÙëLý˜?f¿ üÓí;»[s®L-q¨N|Û‰ Ndb¢…^ŠAέi-ÌÒ»cÜTMdm ^U{:j/ïïÝü÷= Esh|™ÿ¶Ôî?àšß´ý'{Ë«[Hlüµ$‰ê-§¡Ç=ëãÿø gŒµ¥øùâ/„Úý¿•cqðîháµ`w º€6z. düÇ=kîø+RI§ÿÁ9>+_Cqq °ø|<3ZãÌGó£Á\÷Í~dÿÁ5iôOÛÓÁú¤2¸»´ûðíÕ›\‰Œr•\óª¹#<¶OjèÆ(ÖÊÜ—Ùiÿà2„¿%ù÷8e.Lκ¤ŸÞ×ëøS~Ò_—Â>=¼ÑJlŽ ãÚ8`rÃùƼ²å'±òYC}ÖR0«“ïô¯°ÿm/ ¹ÿ¶¾ÈYՔ̱®>Lg>ý+ä{ëM‚id•“tÌrÿÝŒ×~§,—™¦"^ñ6‘yÇ–—îÆW ““ï[‘ßÀu%Tʤw*®z~¹kÑ.–Û?¼™•·F¼”ç?•iKr–÷\æ3mãÛ&¾†Œâé¿/ëò<É[šÖÜéìnÕ[vàí,x$“UÓS’i&S¹v¶W”cÛês$!9óŽ8>SíÅX´½¢"2ü¹ÏLt®Ÿ¬'VÖß×õaº´âY<÷–“÷$1æ¾)ÿ‚ÔøÌx/öR¾ŠÒõ¡“ZºŽÎC/–û×Ú“Ý4ÛH”ísÇç?~}ÿÁ}‘­ÿgïFcÚ?·Ë6ÖÏQé\uêZ…Iy7øh)SŒªAy¯ÆI3òf—dåÝþµkP¸c·ÍL1^~\`ÕP©Þœ¥BÎÌ6+ñõæ¾SÚ{8Xú.E9\Í•A~óu?ZöØgö'ø¹ûyüxÓþ |0±e„ȲkZıŸ'LµÏÍ+Ÿ\g Ü×—øÁþ%ø‘ã-?Àþ Òå¿Ôµ+•†ÖÞ8òÒ9þƒ¯Ò¿¤Oø$·ìKàÿØköx·ðºi‘MârÝn¼M«ˆvÈÒÄ'ý”í^}jÒ›ä‹Õ¿ÃúÛÌÑ|\¿õæ{'ìkû|ý…þÙüø'áèíã‹jš£óq©\mÃM+w$öè1^Ÿ{w<4ÍlYpi«y.×1F¡Ôe÷wëÅfx‡T»¶±T·ò¢Ýæû~î žœÖøz|ªÑ4—*¡ôßìþƒþ¹þ¬üÅã f'‡Jîb·z~5Çü‚;…>¶ˆùÄÜ.9a“úšì ˜‚+)sr¦c.H!çšp‰{'åK¹qÁïJ_ Ô{ÆÑŒVÃLQ“÷y¦º„<ŸÎîiŽFüÓ£ÍT|¸ýj½ÿv?Ʀ`À•G ,ÜÕÇs›–ú›¿ð^±§ÞÜx7bÉsªhºåþ›¦¤–wi «$g÷lŠ AÜ20kñ¿Åþ0Õ¼5£jç„­Þž+¥¶½³IU&rʲª¨Ã!ŸÍæw)&¿Oÿà¿:¦§{ûUi¾µñ%Å‚ÃðÒÜÚùoµ|ßµÎìO°P '©¯ÊÏŒZ¿†¢ñ ®—sy®KquçIyw5º•E_˜®Ý¨á2e‰ëÐWÐàáeù™ó9Ä¥í-?ŸOéä^5ðΉáÍ ïèQLU¢µ‰mõ"¢h&³iQÑ@2ÎÛŽF6Ž„nå<^ZM{P·Ö"-yq_gO.5óÔ*a˱D|`rvàu¯Rñí¼vsêz펖.,ìî"ºµP€»“ä9ù¡–ùe°¥Þ,rå:¾m>¾ºÖ•¥´Â;…þÊÓî,Ü¥®’1ÂM²°žƒ‘Þã$õßô<ʲÕh•Ó×­Óþ¾{®uVÂð^œ®²fYd ÷D¡JŒ ûœ®Ao;‘Î+ ]’ËÄ­Ž”—ÍÀ‚Þâk¥XQegmò;s¸žç¶é]W‡t};@Ónέmysy ÜqGk Vye»Tç{¿È„"Œ¹,6àñ~!ŠçÃÓêté-¦›ç‚F‰W› Ñw âœ•¡wóþ»úõ;p¶•^XüŸvôoñ)ëšýÖ­¨O¨}¯ }z×2ÚFªƒˆ“hé‚ Œú×5 lå1¯į̈ǃ»Üäþ»*ÛC®]ý¦ÑY¼Ê«(XáîrÝsŒÜ“\û™.|ËËkP«#e¢UùSæAôãž¼ŠóqNÒ]mu×úþ»ŸA„Œyl—gÓåÿåÈòÙ‘™7~óqÃŽýÿ ¿a!¹†Eòßì啦¸Ú~V%B =3T¤òMâÛ »”årÈø?KlóÂ|ô,7±en€áºß­cFRŒßtÿ/ø©ÑR<ÑÓúþ¿ÂÝÉlúŒÿ+HÒy†5U*’pÝ}GëL’äîe¼lÞw&TúÏõ¡u²ÈÆB‘2GçÇ*Â$ÁÛc<‚y÷<ÕE†Ñm¤{‡‘U¥Ç79$žqœ€íÍo*ræi5«Ö¿Õˆ„ââ´}?­"¾Ìì›c— XŽW==úV§‡ì>Û"ÝÃ"¬p¿˜cà~ì3>=ŽzäU/´E|þmÂÇn³H|æÙèEçܵhèúd2›ˆtèÚo:ã³USÌ̓||Ãüœk†Œ}µãf¿Ö›ùz÷#;RwÑþŸõØêô{Ǫj+%´Íj±¬aŠo4¼õlî#Óµ{§ü¿áv™ñö½ºñF¸¿áÒæ½µU8ýöUÐ1úþ5àúÍõæ•o4#L’$ŤG…‘@aŽœî9î>•úCÿˆøI¥øöh¼øœë»Zñf£!½y#å"…ŠÆŠºrXú’=+Ü©F5ª*K¦¯î²ý-è|äjT…9NÿŠÝ¯wúßÕ¿âÝ5o®‚ª}ç#õÇõ¯¨?bÏÙ¹>8þËß¼-™£Õ~ßiPí\“4ÊØÇNwí×½|û}i²ío÷Õzí'‘Ó½~ŸÿÁ |—û?kZÕ—ü„µ_#ÌuÇ™D8?ð)¾'4£x¥>ÌöòøýbŒ©¾±kïÐþ;<;ku¢xšm>höOo3à eèÊØ#óØx­Î«£)w*å—Œzõ¯ø,7ìâØ›þ Cñ3á5þ-­Çˆ¦Õ|;.ÒâÂ匱²ñÈ™¡B+çëÍVi,Ô$ÿ»ä4yæŒE. 1e‰©JºÞËïê¾ýÕ/ø!Št¿þÄ> ëq[jÉ¡øÊ;¹´=b#%¬ÖW–Ȇ2½ƒI‡åÁ ÙšñÛ÷þ ³áÿø:óö—ý–þÛ&“c$⟠MfÐýÙQ³™­Ëgæ<¨ •ÿýüQ¼ð×íÓuð¥Zßì¼!}¦´wWíw\ðÍû—@;ù‡ÿ šÅ®§à zB,áš5Y-.té#ß í±8xe~e+Ÿ¦=ENWYÓ“¼OåÛUþ[?S£EK–¤t{_£õ?4)-ÞçȽy TVû Û¹|ð2bnÕž}ÁÛSé²ÝjBÝÙ@ Œþ·C\Ò„¤½Õ¦ÿå§ÜÚô¿S¦2哿zú^vùØŽ;«‘Z;rÉ»c°!xíø×èüUûV7ìÉÿføcy®=¶‘ñ $ð~±™û¹šë×wAÅÊBí¸×çÄ‚K‹¿-[sªã¼ñíÇ^õ·àÿø‡Â(Ó¼[á{†³ÕtBÍ2êÙʼWH²FêG †PGz›{Jr‡Gä_»NQ—êxQî ‚(`Ƽ×ö5ý¡tOÚÃöQø{ûHøuÙ|gá;-L+uI$ˆyˆ}ÖMê}Åza8¯™jÚ¡Åžƒ‘erãÞ­“šŽTÁü()Ÿq?uxéT®-™ÿ•kOF­Uh¹ùjÞœŒ%c{0Ò¼šhÓÔV´ñÞ…´k§Û5¢2ö2ìeýG S—LRp«ïÍk `u8BOÍSí¥b½ŠŒt2ÓMnõ2Ù¢3WŒàӾ͸Ör­ÜQ£hܧ°/Óð«QÛ`eV¸YrjÄu•JQP\»¢8âRœŠ“ì€ HeÀ§¨ÈÀ^œu¬®kó3ÂíDÒª°5<ä9ɨL,x9¯r-}£Î¿QÂççM23I)éi“R%«¯n´/glæµ%²‘•°[ð­›;ÉŒÖ,188Æ*ý“2þÇZ<ÇE6ã+›0³c¥N¬?„ ÝÎj”3© H©O™˜W(ŠZh[ßÇ Ÿ¥#÷±Îj#©õ§™ƒsõ¨JJÅ)+j6y ?7áT®Fy"¬ÊùíUæË•Ç?Öº)§¹2ê~ÁÙž)‹Ç_´÷Á€åd›ËŽy!Ûü,ìÇ<÷ÜŸ‘¯lÿ‚ü'‹Å?µsx™íü»OxjK¨Ðt7²Ä§ýÔ2cÒ¾:ÿ‚Êü@¶øõÿä¹ÑRýgµðn’¶–±íÈŽHÕQ€ëÎå-_¨ð@ïÛüPø£ »m¿ñU¾‹o4‘€Y,â.äw’äçÝ}kÚÎ9¨áaIohEúÙJK攑áÐŒjær}¿KÿÀ>øX8çñ§yqç‘V„@šÙAÍxþÑç/Såø,®•â}cþ ±ñ;ÃÞ Š5-ON·³¶ŽâMŠZKˆ×ïvõ猊ü’ý‚©¯¼·"Ö馾M3ùÈ7Käybvÿwg??O°¾Õï`Ò4»I..î¤Xà†%ÜÌÄàs_¢úïüßãâMö†ÓWIeó®´ÙÈ¥ÈÚqÁ ½+è?Ø¿þ ð'öwפñ®­syâÏiðï·“R¶U·‚`Ä£"Žà¡ä“Ú¾>§´½žûu=Ïo_qkç§ßÿä_ðH?ø&¦û=ø[MøûñFƼ]®[¸µ†eßý’¿)Wûä’zWéç­Cí·Žt1°îS&ìóŽ¿Nž™¯øqo}i} ’«Ä¾av†‚űœö ezW°xRk{+¸ì-WËRûU¾E8^?­\;ö—{ÿV9òÇMS¹ŠòÖÑä)¹¤Xð¨ÙÇÓò®7T¸ŸQ¼"º;RIEh¾gM§(±sTÕ¥ÔuHôÈÕŒsIºé™ˆÚ£¦>§¥V¾ƒûOÄ °Á/™2¥ºÈ¸ªdÁÀ럛A×Þ¶b¼ d¼U;[f´´†ÝŽ|¸Õr=†)ÙU8Ç?Z8Ê'7Và+é°²ýÌ}ä|~i.jõ¦§›êŸnõý"kýX‘Ì>SÍf“æÜysC0Ù-¸JX,*IÊáAá5«›í[Pþ¿s$p9 Am|ƒ )ò®Qœ€§ ú’z¿ø‚ãZÔ4ÏÞYišdÖvVóϤþôA<ßcžâMåY‹;´Á>n '•\ã™k½7HðصMR{8,Ôo¾†Eóõ Ë™RAò¶Á”Úí$’wFK—úÜóãFI&ž¶Û§ëòïÙµMR ?]j n4縛G¶šXÉ›a™BåŽï›îŒ•nƒ5Âø§ÎÒå†Hïä·º}ógg\*î ÎÀà c$·5ÐjR‹H®¬­5ï´­àhµEo¾ÓÚWj°`—t!‚œ1/žµÏxž}HÖ. K4>Øa¸†FòßÊr‘Ÿ’Î1ŽÜÍO…Ý¥ýHôð‘^Ñr¦ü­øo~ïþΫd$¼ó"¾ó^âFË6àü;a›#èx'ôª¬V9¶[ÇæfK} ®v€7ãÔõúÕíFÞöÒYÑ&†]Ìmw«öÀÆ}Íe´¿½ŽGfGef•ºá[Ðzà×ZÑ—õßþ Ó>–åÿ¯ëATF#c,{JìÛ&î9=ztÀÅ]„Û§ùXäócˆË6ìàpsÉöªÝJ™‚_ݱ*¨[ ?ÈʯEu¶ÛsGµ¤R·ñ¶ýŘúŒ÷¢ŒµôüÏ êÅÙ :1ºh.Ž K™dzî(ÿ9Ï&‹ãB8ceÜQŒÍé!o™N=1€¯¥ÚmŲI;J%hßø½yb߆9Í6æÚð†[q Ä»–ØTR ï$õc‘Ç­k.hÞëúíøZ™Ç–V³þ¿¦:=:Y®Öád Q¼µá@›ò™®³ÂúÒîº,kyTn„¾üpzŽ[=²§½rº{}ž]Ë/ ‰¸¯Gþ= ü+¡ˆéïo5Õ¼Ó.Ø¡âi>r»@,=72ö\•ßQŒ¹×Kõéºü¿^‡aÍRgnžvüMxtY¼_¬h¾Ó¦¸¸Õ|A¬Gkk φ + VoL‚¸€5ûw¢xOÃÞð~—ðóÃÑCg£é¶öÈÖñü¿*(Ïû_SÍ~jÁ)~ Ÿ‰ÿuŒ~&²I4¿é,,®š0K^Jß»a~`»Î{cƒÒ¿LR}BÅ®ç‡l•Uä0È ÈÈ9ü+ÞÂS¼gV]t^‘ÿ7#ç±Så”i.š¿W¯Ü•‘OIÓZïRHV$ÜÒ/ü Ÿçjýˆý‰¼?eï é¥6Ëuj׳û¦rØüˆ¯Ê_‚þ»ñÄ .ÒßÎi®£H×l±À?‰Å~ÍøoMƒÃ^Ó¼5ÜÓì"·\wØ¥|.v¿}eÜú¬¦>΋oñ>ÿƒ€¿àŒ:üàJøóám¼<k$žº‘‚¦© kO`Ç[ø[Øœÿ)< ã_…~5Ô¾|FðíÖ®h·iªi—‘l–ÞU8*Ãüñ_ÝÉ•³¸b¾ÿ‚¯ÿÁdßø*©ñ¥àoüF‰qŒt{e-rá.cáf_s†š¼Êz+3­®JŽTÕÓÝy÷_ªëº×åoöZøã7ìÛûGøãÍ«Ê<#âk]FâÞ&Ã\B’2 Úzþ5ûÑñtÍmãÿJÓh¾!±ƒSѦeÁšÖtFÜQ‡{Wð3þ Ä´Ò~#[jŸ´'ídº¯†ío7Í¥è:9·šî0r¤v`€÷ÀÎ:ú÷öêý›<ð&ëJðÃ}ãNðÝ—†àƒC„þñ!H Ž2[ ޽=êå´úvÿ€*’ö”\RkÔøÍ-ô{=+PðÇŒ48µÏ 뵞µ¡ÝÉwoóqí"®í¬>`q_˜ðQ?ØUý”~#·Ž|Ρð×Ä;¼7«ÃXÌÙcc/ÌJËç†#=GêmÆŸ$W#ǸîÛóHHéœòxçŽ=kÆÑ|má-Ká÷Ä=ÛPÑuÈL•Œò•ã ¤’DûÁú‚=8¯J“‹¦¢ß£íÿö<¸ÊTet¿àùyzŸˆ¶7®²™Þõ3K{¹è ÛùÕï6eR& ¹~Qú¶\çpçå9ÇËßðçØ¿lߨcÇ_²î¹7‰ü,nuÜHÇ[EÜÖ»Ÿ À_¸ÙÆü­‘ÎNˆ‹–»óßÉ_1~Ño Æ?x3ß9$t÷®Šu%uÿÃÿ_yÑûºÑç†ß×õÛðfÿ…ma²Çó $ƒ€9ë“þ}2y­¡Ônn.¬, Žc¼—sH—U(-ÔŒ‘Óæ°'»Ì o4ßváŒ*­‘ž3Ó¨c‚rb*=ï ç/ &z»zO_cù׫N²Q±çË*•ÛùM]ËîÒÅl7Æ»¤æD^A`ʹÖi ¹g|ª³Wû¦·çÔdI~Ëí¥—¾?ŸMfÝX‡œÇæ,Ÿ¼ù¶?3ÜR­)UJÝ6:°ÍAµ.¤2ÏkqîÑš@ åT(÷õ§—í‰S+¶ÖaŒ.3ѱ߾* §·H'ˆåeŽE ¥q¸zýzwZ\Ë›;3²Ç—ó`œc<Ðßü+†R\Öoúþ—©ÙËîÝZ­D‘}–ÖeEÉ yŽ~î2ǸýãNÓÔÜøfòÑ¥U[©%n}åÃ'èH#êEAì2Ÿ´[3*ªË+*Æ?v»6©ê'Þ¦±·–?ZÏ4,¾b;ÛÌ­ÇÊãr7= dñŽGãSNQœíº³û´];Ý£*ŠÑMèî¾õwøY?ÄŠêyÌ-w0‰RhàŽ]ª0Åv€Ëè§Ó›s ³ÝBìí Ü˶Lªð8`H'<ç9=+S]·tè@¶µÚùí ŽÝ°žLy dûÿq·gsÔšÍ fmážïvä´ŸuQ‚Œ pûºö­jS—=›Og­÷½ÿ7·ÅJ¤eÒ¶ëð·éø§ƪÂßËfO2OGËql~X©l厇8|oNs·Ž‡ÜTW^m°’ ˜–|À£o(3ž=àþ4ÀßéXOõžÇ9®E.YýÛÿ]Nž^hŸÔOü#ûBjÿà™WßµËá5ÇÃ_ÞiöªdË­È[Èôå˜eö¯ÕÊ õüàÁ›?´Å¯‚¿loˆ³>³¨ùø÷ÁÑêzU¹cµï,%å@ÏÞ0Ï!úGí_ѼîÁ¶–ükÃÆQäÄ´¶zÔg)RL˜Ê™ûâ˜f>Vÿª‡¦~µ"¹a’+šQåØ×™ô¶þBU[­JÎG$ô¨µŒ­©YrÛ±RaQ‘!n*eVÇ_Òœ½Ô‡ä4©-ò­9û¯µ8 sþÕ9¸ô©r÷lMú°;FdZ°éžqQ4aA"ˆÉ[PLHÜuf©#!ߪ»!WÆê’sÚªQ-Ê,6¶1•úPÒ©9-QHÀä‘P3jTй$*[“ÉEùš†¹Nâj½^€ô¯QFLòïдCw§³äVq¼ÇCÿR6 À’c) K•%Æqš|ráùjËûQ's>;Ô‘\óªö.ÂniXÛ†ã4ÁR~-|dš÷pþÒ»‘¦“¢©œ3}°zzq_ÑßüÛátÿÿa‡š>°¿ñ3Ö´·ñ¦L[XÍ#]a‡ª¤ˆŸð þs¿à’n~8ø’óNo4\xÿâ¾™qqÞ]MåÊÙõ #µRvPXxNµðþŽž]®Ÿkµ¬ÜŽ5«ø]¬¾¹Ž²{9Kï|±r—Þy¹uáÏ7ÞßrIþ(èâ¹ÜÛI§€+Ÿ]K-ÉýiãPcÆÿ¥pýVW¹ê{m5>ÿƒ‹5mNïöNðŸƒü%ioy®ÞxÁ¯´í:æL$ëmi3¹+‘»h`Ýzô¯Î¡iqñ/áâX|EñÃxR? éZõõœYûO™nɈƒŒíû4ÍÆ0I"¾Îÿ‚Ð|PÒuÚ/CÐ×Äê²x'Á÷2¦—-¹š®nÙî^ØÛ-œ׃^ ¡è·¶~Óm5 Ôî4<}•l‚#¨·¹Ú’»|¿3yÒHϤ׻…§jq§µ–¿6¥¯þo¿CɯOÛb\šÓk}ßðO¼?àŸ_|1ñgþ Õá½SÞ ]AtG¼Ò¥™dÞñ=½Ó…F<ó³Ëo¡å¿¡s}4W*YÚmÛW×?®kcþ«áÏè³þèš|vÐi¾2ó^ÖpG³· KC±+Éf§øÕøÅs̶?»šF;Y‡;½³É¯;F„¡ü²’Ó·3Kð±é}ˆ·Õ/Èð¿Ai,s(h݇ðþ?ÈֵРoo ´ »ð†üy®ãÅ:xˆ0ç· Ê­Žß⟭rWPÜϦÄÖ/-”“ó7;IÎ;ç8+Ô§-U¿­çÖ§ïhsÂ9!š6uܲ6|Âs±sÇ¿ÿXVƬEJþJ”—h è 絘ûmÈB˜b¸]Ü‚z"jAvö0§Ù­ÃÅj Ÿâúu®¨¾UtÎ=åèoè÷ET±„F!ÚY¶œ³3î=¹ãõ­«‹iµ­IfVP±…ÿuˆ'=+Âê Ùö‰JùŠÏ¸`åùýkJ)LWì­´yÌùQ•“nÞ™Ï<Ô¶ïsh—.¬¡¾lN|³–C1;1°ÁîE ·žÚÊEr­óeš7ÈÆK½êáš[KµI–È·Ëæ`Ëž‡#>ãŸÎ¤½²]\}˜Ü;EæŸ64IãŽsÒ¹e£:!'rÖ¢Þ ë‰ì.ý¦O6Ûý^pÏë]†™{.oÚ¶HÌ›Xœã'·Eü…q6𦙥ÛXµ¼â&™a#yÞœ±ç¶ë[Qk?jÔ­µ 1$f™Õ[>g8e$ð@?…pI8ÉÛsª<¶Üë£Ôog•¦µ&·UgžFÝæ.àvŒuà¦k¨øb‘k?t &Ufšâò7Ž7ãr+†p êxü«¸ÕÖþÖÛR²»cuXEòüÇß§é_²ŽŸqâ¯ÚwIeµó-t}âéî?»!eŒ.?k_áFL©{ÊÝϯ®ãéžµ\(-œÕé¢ßósÍTdØsŠÎœÓV3”}áLÿU")ß’iAç¥R(µnªF[ð«Qª¯Þj„dŽÿZ±¤Oç\Õ#Ô¥.…åd?Ö¥WBà8ªqHÒðBœU«gæ<âëÒ¹¤Ÿ.¦ñ”U’?žßø*ÌñíïñVæëQ»º¸·ñsÝ-äÓDÑYí±vP³C‹]¿)ó’x¯‰õ¯Oák›-<ÚÛÍ®XÄu)® Ÿ=%PÑó÷”aK”¨Ù‚Iâ¾ÿ‚üPÒ>)üñÿŒJk{³âkë=/P™KÇ?—,‹’xq)ÚËÊO#‘ò®·ªE<š¡¶-p’\_ù7ŒÍå± ùºã‘‚@;†>júÌ59(£á3*°x†¿«z4ýZÞÞÞãFÕÖxn•fŠÆ)ˆ¹ešEhÐ1¿È©Á'85ÍüN½°ŠçPð¿‡/|¸Öí¦’âgÇ<©ÆQÂw’M§pÏ^t5{²Üh±Åm$·i¹0~éU•@å‹ó´¶Ó“ó ôy¾¼°\Ý1š[U6ð©WæT%öâgç3×Õ%±8^YIIùþ?¯Å }{ a`–ŸcÓÌÒ+Ín72à€XÉÎÒ=Ç똸y$O´N[ËhØ|ÊmËœC¸ŸÆµ%°‚êÖ8Ô)ööU…b“•º¹=ÀϤsÖ¨ëÖÿ`Ó—/!‘U–YC|„±$ã;rx9>•KÛÑ_úù~gµ‡QŒ¬ž­Ûúùßî1ãa?“öHÏ™»fïâfÚQÏ>æ ”Ç Ä3eUÛª)Ý89÷àš£k5[7H\É+<2gb€síÎF:ôéQ\^ÛAtÒZYl†HvE»$•ÚÊóÔç'Ò¼¹Ir§~ÏÓðþ®j?Šÿׯõ©7-!{tÆ×,UF3Œž>™üX²º†?=fl¾QŠÛiùT±ÃÈ}N?<Õy¥Hei·ofo›'ŸL ~5cK{hÞb²³2«þójŒ±Ãû€»‡üVp¼²vëÿ ç×äiSøwk¶ßÖÁyCíÑ£–™b2ðß+sÇ®94è­™¢i&tS#*«7Ý «½©=ãŠQ½[ÙX¥¹i<ɺÌÏÓ¥X·³7vÓU/$Cìa‰+“À$.ãíõ­­T|¿¯›·â×ÜfÜ£M9iý/ò¹gK´:Äp­»HÉ ›Ü*ó»>Ã'ñ­0£HÒÞæE•¤“|{œü­òzõÉ,O²ãÖ£²UŽÙ|¦Ün‘r¶Ì ¬»Hÿ|çßõfêÞæù¬tX¶§™x‰º¡óÝ““Ôò@¯Z5 .[ÈòêÔ稢þ¿›üOÔŸø&ïÁ«/„²n“i¬­Ïü%Å5–8›z·,«÷‡ ‚Çñt澈I"·ÊØÜ»dØ Œp:ûô5É|/]Cøqá¿Xè­mý›£Û¬vêØ0°„omõÇZé´«ènŽÅ*¯Ê«sóä猟þ¾k豎 £h’>c zõ›—Ww÷Ýþ§ÑŸðN¿‡²xãΑ¨Of$‚ÆCy3бe>ÿ>ÏοK—Q‘äÝŸ¼käßø%÷Ãdм¬øòöæ^I¥«9*£s} Ú? úºÞÄû×ç¸é*•äÞ§ÜáàãF1ò&If™¸?•LªÌ˜Å:ÞÅõ«Jñ¶¼ÙJÛq‡2)4NëšùÛþ Kðñ¼Wðj×Ä·ËÓo Se¶Ÿ.a·®z}."ÏQ\ÇoEñ à÷ˆ¼Ñ«5Ö›!·f\"Ê1Sl§û³ñ›Äzx†þKo³–c7 òó·¿Q\ý͆é–áì­Ã#ѳdƸÆÇùÅw_4»_ís¬$pý ††ðªó¹„žÇ9<ú×+4‹ f …”uùzþ|×§GáŸÈ!šcqûÄXÈÝO zŽzq^+û_ü)ðÇŸ‚—Þ×ìV@)¹ðýæÐ$‚ðª23µ[£ŽàŽã5Òᢶæ0¨ðòs{uþ¼Ê˜§zÜÛL²G_ ߆1ç”ÿyO#Š“ÈØ‹wtLÌäùkýðz0ÿ{u\G­hZ·¼G¨xCÅz<–w–7ÍÄLNëyÐàƒê8?QҗϹ¸™¼óÏñqÐ’±àŒu'fªKï¿n—þ¿­ÏBQë»÷_Óþ´4"ÔmT´QÁ¦ì3Écïøã¥V›Q[‰U#Òù_•Y”qùûÕu›Ë$¤YÃ/ÍÝø öéþŒÖ§ØN¼«rolœ²•SŽç©ãùW|g*‘´~íyFy/™‡q<–òH<¦ùÜKrzýsM´…åÃÚÏ–!¼³òàÉ pO×ò§jE ïÙndóp¸Ýà7'ÿ×PÚÂòN!U\®)'ÐõÖ¹*ÊrúÑåöwDwi4ñ]°Æ­µ·n$äœóéë[ºhÞÖÚêì´_c’ávci–%|#g # úç½a^4­ ‰s nòã*ÍþÏËïý+jÏOó!µºšØ±Û$1[ñ¹Û’6œŸ› c½N ^³²è¿ô§ÓÓµßbq_ÃW}_þ“þfö£h››T±Ô<óqqÚ,õ0¬aFV›¶èÙ¸çi¨nô樂ך Žy<–f…bf;¼˜Ñ¾u<2¶ç¸"3×8«šNs¤ÞZé÷¯åÜ]}¢;XøpË2b.ä2ä{2±ç¥Pº´´Kqj.-ï.~ÌdfW€Ãöv2ÎY_r“Áè[Ž•îV§/ggÞÏ£µözuÕw¿¡áÑ’æIKD´kK«ÛuÙ-é§™Î^>¨èÆãiÝ“æ1ŽÏ?.8¦B²,’G¶3+m’EÀÚOsìHúTúŠÁn±$VèR×äšhÁÛ#çp<ç°ÇáMiTÜ-˜¶‰RIVFY2nÐ:ŽG|û׋8¨ÔzÞÖó=ÈÊðÑ_ðÇÜðn¿Ä™þÿÁb> 2‡ZÖ®4Y¤ Œ¥Å¬©·¶AbŸ—ýr:¹?½?5ÿðNŸ‰?nß‚ÿõ0E¡üVЮn®<Ò»"û|A²pxOoZþ×.J³n_ªŸZò3/ãE®¨ì¯?ò!§æ&§‚08+Þ¢¦¦F‡ÍÛŸzó'.ˆèûH $ç+MkfÎÒ¦§OCC?9¬îÊå [cŸ»OdAÈõïN/Î1šk;”ïÍ÷b1‘¹i¹ç$öíNi>l¨™†ìÒ"Vè+ך¤ÏQ$ƒj68­a£@òsšošÀü´×lö¨¤Æ6[(©#)J¤äâlŽM¡äÕ6•‘x=é¿h_â5\¯¡>ÖGÚÀ'ÔÔ‹{p_¯¥si$‡’sS¤“µsÍ}°ñ‰åêÙ¼oTü¡zu¡¦fû£ó¬û5žG_Öµ!¶r»É®kF&Ò§îè6'Ÿ‚}*Ä%ˆË ôèà”qŠw’ýqÿר”£ÐÏÙÉjH²azóV#ífª¢ªŒ0ÅIçLƒYTŠ‘¤#Ë"Á¸Úh7K‚AéTäº qÍB×€ð¼Rá)Ç¡n[±Øñ_ÿÁ{þ/·Â_ø%ÅMQ.Öµm> .Ý‹rLÒ ¨÷Ú­ù××>~ñóWäçüÇñšO ~Æžø'g}åÉâŸIyuñÆúóÅ—¶ëi¨j*ÚzéZ”†Vi£;¦’8ÏÊ¢A$'BZfãW‘ÿÁ>ÿgÏ^é|Fñç‰&³]6Iu5UÉ‘C[i¦ÁÀØC:cž¢¾Œð7ÂïŠßüu¤ø{Ák“*ÝÉ}5ÏØC%«L¬áå<ù†(Ü3‘1UàD(•wN3¯uk¶®º¥eçü»?KXz|Ö¾íkë»û‘ôgü'àìžøu{}¤ÛZɬk“7“ Ù²áàd†ó;cœv®?öÁødl¦ƒQ²ŸÎó¾iÇǘ%Ø@ü~uö…ü1§øCÃ6žÒÑcŠÒÝcZíÜÛ@-S×ñ¯4øûðù|U¡ù¾e¾§&Y¹Q•û³€>¦¼Ì§ÍŒ~Õ»M»ßÎïðØÛNÔ×/Oøçæ³o>ï²ygÍÃ,ªñàíÆë\޵§ªÛå—æhÁ]Üàcƒùæ½/㬠áÛÙšHü–†gó†ÑØåÇù=«Ï<@lNš®³,’FžbíèNÜcó5ô8Œ7Õkr}Þ‡“Í‘ô8+™£mSÎWmª[ËPɃ×ëR»µ8çIFñ·ÛŒÑ#ɮпEó3åòÅBñôùW†X¡žKeŒí‘·I6ÿ•UGøþµ1—~ÿðÇ4»š|SLâãíë´CËUŒü§æüÆ1ÅlOvž|“Ü?–ŠˆŠžƒ;˜þŸ•pí«ÞÈåí`eKrRB²uÁaõ?¥ki:ê]ëmk—*‘¥n ÜžTž)ÊqÔpæ:Û+»'´“Vµ¼/)i” ‡ :çè+UÞÎÎÑ$‚]øhÕ¹uÛ3ߌ×2.-c·’Xb‘d?êáÛÄ.qŽàНi¬EipÞÇ'˜Ï’³Éç`Ï<YK£×õýlmËSBìêÚUä-ä%äùÒHòF]˜,ª§¢ö>•&‘r¶ÞLpÝÌ«ª7Ÿ»]цãŒñŽ:×~!^j^#›A³¹‚ÄÀÌöñ£’H|¼6ó÷Wæa“ë[^Õ®ïoí.Ž›t¶öÖknÐÍ l}`uâ¸jZR·õÓþ ¤dãn§ É=ì³Ã¾žÈ–»ZF—,¼¹ïÀ<ýkêø'o„–ŸxâíÎ’h,­\ì({|½nnO¦+ä”Ö-¦ÓÁ[ï-o¶ Ë‚G {…}åûè«¥~κN¡,An5K‰ï.i&B¯¢…wî¨ÿ_ÖÇdRæ±ëŒ»Øáj¼¶åÉÔË&:RßÁ®x˔ӕ2™¶+Ö—ËÇbDbųU¥V&º!3¹]…6üØÍHö¨Óx"FÇÒ“WÔ–Ù*JŠ2¢²¾%x–ÓŸ Ñ4pù^xVòK*Œy¬¢£í]Q§3Q¹üâümÖô_ë)k¨47ójËlÓ.š‰öDy7e6Ñ 0Ú­òË!eÉÈòMPÐô¯Câ›}Õ¯oõ s wÂCj&bbóÕW”˜‹€ÁÈ#½oöˆ¾ððñóÁ iðùwÓHö2Ý•ºÒÏ1Éhûp†\•ù‹¼‘¶¼³Åš¯„înä`+“Ïdÿ­6ù·cÜÂò)4½oæõroî),R,rEæeZæûØ`¸äŽsõúTS?šâ1¦XÛj³›h­_Ö÷zz*¤©Ó¨×Dþçî­|ÝÏÒ_ÿeCªÚè×Z6ÙšgÛ¨,»›2½:ô§>µÛx?Mº¾Ô-ìÒ%-ª FÎ[8ÀüÁö5Î>§Î–ÒÜÜ¥ÔÑÿǺ½Æÿ/yùB“ž§ç€xï_±7ÂÉ~)|{Ðt+¸ÕöÝ›@« XfÝ}Mvg=”e'ÓS)§)THýøðñ>üðÿƒV6Y-ôô{­ËÏšãsÃ8ü+¸·µ#¯ëS}ˆ—ҬGAkóyÔrw>Þ‹v‡Œƒõ©'a–'ó¥Pª>fëNÀ9®ysÆ*; #sÆ(1’ÛdMÊxaê)ÞhŠË g.¥/3òöÓøG7ÿ‹Þ*𕽳Ãoöç¹±ÙîÒ È€t9ÝÇJùÎõoml£º’¸d\GŸ—rçÇ=9#šýÿ‚µü6¸šÇDøŸc f´íJHûc牉íÎE~yxº9ôØa—o˜³‚!e)ÎÜ•*zþ8çšõ0²¼QáâéòÊÝ´9ëÛÝ2ì7“7™5ªíhyPÌNF üq\~¡=Ô"ÓKTù•÷ R_§ÿ¥nÜI’iÖH¼íÊ“FýY0A'®xJÀñE¬ðÙÛˆ¥ŽIä—7ðÇÏËÇ~¯JÒg)]j|¯ûv~Êú?Äoêü%fö¾*ÓlÖçP±·„±Õ£8Räè<F{â¾°»Ùv×hÊf9Ï,§‚:ö¿c5 ÂêScr/’¶î]™ÁÆîëž¹¯Îßø(_ìû7Á¯‹ ñÃ:CGáÿÎn`Û´,W%ãÀèÁ½aSš/Ú/™Óƒœ¿…-ŸÃëÛúÿ#ÂÍÅÜÛ,gÌËܘÇÇëÏaÇcQê.~Îö²áŽÒÌÌÏ®;€úÔI¨!…|µÊ²b2¬rGM¿UýEOjäÚ™LL¨0¿Þúçß’0OéÉ7žÒ6LïåäÕ¯ëúþ®A¯Gr'3.Ò[ ÁzúÔL¶äàÀj†Ü6ç¶AÈ9¨5)ÍÄË+–û¼îûSìî¤àR¸*Ì@úœV~Ò2­(®¬èŒeJý .™m ˜DãæÓ:Kø_ºm/ÂWÚ‚dñeœò4z~¥3·f_ž?1#;Ie<ç§¥aÏADñ©S$3‡]¤=F3ÏmÍô¯bý—õûøMãÍ]Ð&¿³ž>i–5,#ò„Àä:Œ>\W©•áÖ#ì¤ìœ^ºÛH·þG›âåƒËÞ"*ü²×Wy(ÛüŽR1+éS\]ê~uŠÆÓJÉå™­d”yÐL7|Ì7³«IÇ…«Eqf×\ùM$Â2$†O•Š£m Ï7Fã=V¾Í äÚKjfšKHìC7Ì’˜ì ¯Õ\î»sÐŽ+õ㺺ŠãI+Ú7F¶ ¥R,€ AÁû¬Åþ^ÜW¡^jTâþV¾Ömi×khõ»v¿ÙåÃEƬ¶·§£»é«O]¬•ìþ*WüYÈ¢àF®ÌñBca÷›×”%×pzÖ[Íu<¡o$Y£~V¸Î;dsÈ©ïB[;hÌÑ’È ÁR¼þU]í·[ªC@‘ˆÚr«Çÿ[5áV”§+.žo^ßÕrŒcúùÚf§} j–ºÎ‰,Ÿj±š+¸.~d’2|c?A_ÝÃ_[x×ῇ|aiv.!Õt+K¸îþZ !GÝøæ¿…¾É5­Ìå¤,B®Þ6ã³øñ_Úwüóâ?ÿà›ß|sopÒ‹ï†:>çf–KT²G}Ê*ó³-TZÐéÂÝs+ö=áÌjy‚uœTHìqÖšXÿz¼¿gÕ¶\IóSoLsYêäu57íYÊ.;¯‰ä#¨nÔÆ|އµFóêj7—ssB‹¯p•Á?-F[œƒDœôæ£$†à~¼aX—)FVc„œóMgÀ'Òç ¦³’¸j6a*‘¶ƒ&ŸhàÔÝàp´éˆ)ÁïUe ßÃUÌsÊïQÆbj7w' *n[<Ó€ rkhû¯Bo.‡mdŒÄaOáZé*ñúSíã‹9ÙõÍ^“=×Ò½J•gÐåQe¶Ó#†ŠÐ‚Ð…ØÝ8b*ÄR'Pk†¥IÈÚ;ê f…·‘÷{Ñ%¤oÑêQ(éÀüiAÍcÍ#b¬¶Š5 ‘ò…éW?þº†e#âìkHÔ’Ü™#6â µÙ_9'ñ«Ó!4‘Û‘÷Çç]>×–79Ý(¶TŽÕÔàžµø-ÿmxìkß¶OÁß‚«rZ=;ñ\ÞF®>S=Ë6qþàûû º3íÚüWó#ÿx›Vø•ÿëñW‡ tž¶ÑìmmÖ2Û6éð>Ü{³þµ­ CöU¥ýßÎQý.gZ°í¯ëF×âÝø$ÂÙþÁ7~Á¨Ä«{â "_Þùjs_L÷ ŸqÆ¿ðúa-¾CX<*¾ø3àϘ1¡øCM°Ú¼bµDZЙ#UÁjñðsŸÕa}Ú»õz¿Å¾Î1÷{i÷ bÍŒW”~Ý~ _þÇ5Òß:ønhà_3o™#áU3êIÇã^²AÝŸjø§þ ñ¤ø à?†~ÇÒÂ_â5¶u·c»vݱð:í’?ÙŠî¡){e/å×îWý—,`Û@o¦sŸÂ¾rý ô–µÔôýZÊmìÓK !Àòß’8ý=Å}Î:Š–w‚Vôëø~'ƒ)8Ômlÿ¯ÌÇ]JÒîîK†,'˜ÌË€N þx¬Æ›1ÈŒL3=ÉùŽ)n.oa¼hUPFÉ÷˜|¯È8úö¬¸µ(íµ&²;+G¾MÊO=?Ö¾g›úù#K³NæúÊ Y$HåùcÊ…{žŸ…X¶Õ?sÛÄÒy?+$j2Xóœ~5‡§ÜçMŽmFS‘– 6U£ rxõ>¢¦T‚Ë&ÊeæF“o™Ï Aôïj9¤µ+£¤ÕµŒX5ôR³H“(Œù€cÀ…sz׊LwÖþ-°Ònu –Öhc¸Ûe¹Ÿ‘ŽÜâ°õ nÿX¹’ÏY¹Ž9>ЫÆß,‹WÓãð«ÖòɯC4{墫ɱX.p¥J“ôük*’ævù=#°ñ2ê^2ífŽÖᄞu»¶Æe yÃ}þzúÅtÏ­k3ȳ\ÚÉ¥Æß»ó7f §çÄgšó;8Äšûk´–÷V¡¾‰{s´PåO?÷Ï=Eu©¦êÞ!·ûvª·0Ão Vhñ²DÎã®HÍqsnú¿Çoó-IÞÌô Ù\xÿTÑü§‰ãTÕ!¶³µ·š^@ÁÇ@¯A_­_ü)eàOé ÓcÙ—§Åm÷¨ðïüËà|Þ2ñíÿÇjÞ6Óô5h4¿v[™çr1ÕSlñ_|AùOç\ó—4Cw›¹"FŒ3­HaSÂS`WÇ֤˄ܣ‘Ö±Öæ¤-lçßð¨^GÊ*ÓÉ´goÒ£V÷±ªŒ¤&¹¢@°7Þe«6ð±lmëR*£®GJ’2 m'ò¥)É…8®kŠÜ.8ÿëWÇð]kþýŠ-—Cðå®­£ã++mRÆù¿sö}’¹•×xŒ “n>ò-}Ø×Àðqö~§û'økÂóë?a¸¼ñb´S3mFb"D,p*øÜHgš¼?3¬¾‘x‹SÃÉŸ…¿õ„ð÷‰µ/è÷öJ5,u-6òÕ–YŒŒÛ%3»yŽWqF!жpkʾ$_ý«QñD÷ú¢=¯™(·´{©î+o—Ê™f8wa°°Åv?ôÏëq5Ž¡¢FöÐ[LѵŒ²ÜLì|¹†6¦UBŒåFàp@¯Õt\-׊5-:ÆóÌÔnî&´XV#‰”¨UR¯•x%‰9UN2QZþ~שðK–Sm»yyÞûüßàµ2üX¶ZV¥¡§Ú]ÛˆãxÄ7±ªÉ»™1Æ bÉ|òqÓÖ«4šu¾–ÚÿF³P%¹lîbBPpÌʼ¨í†ÇVö½¯‹ß'ÃÍfì–ê&kˆíD~[H‚GFÀ%Øo¸ÆIΰ³|A£¨hÖðÊRêy¿Ò¢Ÿ ·â¯ÀÛ³ Ol°Žºré§cº”šqrVë¿MmÒÝûnr÷W:Ž“+X\Ŷ|ù±~Œ¯ËOq¿§rk:{G†¸”íºŽu|°) v óœõÆqÜŠè¼M§I’ΑÁ¤(Û–pÅ#Û(÷bX{uïœekËqy¨Akyi6ø¤–)ÌŠ0fl³UþÎy'¯jã­³¾–·ßù­_¦›íëá«FQM[[ßä¿//;í¾.ÉY#Tò’EÈhÈëÏ¿<úæ•¢ch’^“d‘…__— ¿Q…%ÇÚfGK›i7}¡V}í˽3ø1ü~”æ1»¤––o™ºUÚİPOÝ'é×£iþ}úúhz\Ïú·õÜŠyfºH渖CåD±.Ñòª*äï“Û¥]‰g»¸kx¼±ï`»Xì.dn™dŒ÷ª–›k³€¾cªí‘Wqù»sÀÇÌsêjä3Äæ9ñ­ãû“4™oÝ£.Ð1Ø ÉÏ5­&®ý_ßmöó×ÔΧ7E¶ßžËúèSžÍÒ#öi²ªÃh|g>¹Æ{Ž+sMÒ/w4pGxLi3ƹe@~cÁúO¯^Æ+Y¤+q`í]F°¯üöÜäÇá¾+àoXi^7ñ­›M \Ëanã|lS÷¢@â”2ԃ߸¯×ÏÙëáô? ¾ è> P|Èl„×YëçHK¿ä[…y|UW–š‚ûOÓE¹êpü~*¥ŽÛp^¥ßÇËùTo * N™Êâ¾–ÇÓ{EÌJep6âžïUårW?¯Zh»Ú2Ǿ0´ùoИԗ1¡¹ºæ€ä÷ªkv§åùÓáºSÈ?ýzžCoi’ý¡þÛ|iø7®|?¸ˆ4צKÆVá>d#=ò+ñÇâ^ªApÑk0"ͧÜÍFé™!oâ\ã±ãŽk÷'ÚÛÁäs_˜ðS¯Z—ÃŒ—‰´ë]ÄÁ¯`¸…~X¦nrqŸŸ£VÔ,¬ö8qiT×õý‘ñoˆï±ý†(Ö9·´K6ÀÛr;žqÇðk)“PÕ5•ÑžÌù[…fù–E$àñò‘Áãük{X²sªµ®£ ý™`*ÂI‚«¶G$ö9Çäj…Ž‚úuŒ·7H6Û–Á!WŽXu?–zW±NR{ëý#Çj:›I±ÓtdÒ¬ [UE0åAÂrJÿuFºf¸ïŽÿtŸ¼ó¦*6mÛþïݹ¶\]J)Ù=¯}:hÿàk®ºœ9.*¦3 I]ÅÙ¾þ¿+>ÛiÛa%Ìò .?,€³´¸ û‚œç‚sógÜÔQ]Oiq,veTìhË d¯LûÖ†¥-¶ëbš;\ošqFcó2ð20µ˜ëÚÙP1Ú¿veÚO·cï_-YrÔÑë¦ÝÞ¿¯üéé>hê¿­¿¯Ì¿ Ùkæ@1ÆŸº¸qÇáü«úÏÿƒh¾,Z|Sÿ‚4ü-‚=Af¹ð¬Úžƒx¼ˆÁ{3F‡þy&â—«K~6û‚TýÔŸuùÇô¹ý"_ÝÇö¹F± ôªït½Ú«IyäòZH¥…Î2+ztcN)X%+ÊäÆç,0ø¯Î?ø.ŽÛÁŸþëZŠßJºÙLÇlI2fàs‚À ^{HØÁ¯Ñ³åÛõ¯ÏOø,ƒ§xÓö¥øOà³|bitk«›‰6†XDW $dƒÜ¶à=Hª÷iÉÇGoÕL™sòÙ>«óG¨Á)>xž Nx›ìñ¦“¤E …²Ý$ò'š ’핊€ÅG@Àû â^»q§éÛ­þiRh˜/b çÿ¼Cþ ÍmáÿüþÜ¿Ôa“R¸–yîNÀ¬¢Œg[fÂÇûÏÛ¥w¾(hÖ±\YÌÞd‘ªFÎËòù†0qõăõæàèË‹æQvóò²û­ÐîÄrÓ%ö<¿â‡Äácra¹”• ¡Œm‘³Ìdl{`Šð?xò{˹¶ÎæÚ¹vœzðq[Þ8Õ"¿¾Ú’£F›aâL¨Û–c××ã¾-Ôî%’O³:¬›òßÄsÖ¾óþÎxx©s+‹ãh¯®&µžñœ·Ï¼Œ|¬zgð¯3ý¢õt_ +ILEÀÄjÞøÂúuÿõu«zÍÅ‹ÈÚlPî’D q´Gêkø¯«=冞ºŒÛ^K¢\4€¨Qœ“ÓŽ•Y†*QÃÉ[§èpÆ7z™z>™«Ü$2Íg+,1ï+$ÿ¼VÏñ}3êiÚÔ/ ÇumŸ2# ¹ÊúøšÒÓ¯£]#ÉÜ̲Œ|Øúÿ,VeåÕ¼ÊÈ·mÈʹþ,/þ5áÓ§S_×èjåÑ”/µ,ÎÓÙÚɆ›a$+60ü³Ò±5K»˜,üÐŒá“sÌÈ»“€@õþug_Õ£míoí ªvÉŒ†Úr@'8Írþ+šXæ±Úçio´2¯µ@ç:’+ž¦úÿ_ðEv7xš(µX&´‚O2@Ï F¤6ÝÙ#éŸÄV¯‡µÙޱusw!X!Ë"†òö¹#†>k‘X'ɽ·±7ÕcV‡<òÄuÍhj×ÚW„—QÕ,á†úîwX#Y7‹‚ñ»c½pÞ_e•‘åw.ßx…#I,¬îdŽÎ}²4Ÿ6~mÀú/ajêþøÆÿZ«wj¡kÙœò•®ÐØ®°>ý:;ô“Ud@œæ£+ŽC×DiÆZ‘Ì÷4SRÂýì×ÁŸðptsê_²¯…-¬4‹‹«™¼Y(Ûkv‘°…lfwÈ•ãܨX0=H¯¸”Œ?ñ}+óßþ¸Ñ¬|ðª ^Í&k=VçRÍóGm mi$M˽\ÜŒ—íE8Æh¿?ÐU9¥FKËü¿Œ7ðjÚ2êZbÏP¸Žââòâ}ó d·þYüÛTà€êó—³{I.®|=}¨Å|׋y„÷–j»P¸Ü1¸ÊŒ€¥zÄ=~æûÄ·³X_Fš=ÅÌÒXi7nŒ™KüŒª±¯‚à0n<óÄž¸wæ©oö_)#6ú|¸[™dbàaJ¨ÎÃŽYp0q_IEÊ1åoúþ¼‡—,¥¾ºtÿƒÔ‡Ç'Ãq|A¢‹¦žçMÝò]<‚K¨®]c‘˘Ð޹nù®>âÜê’H°jW6öšK­ðÙ ’l·Tw$p5èþ"m_ÃZ•÷…õÿéq¶2[Þiv1ù^S¤lFÖ,X’ ƒ 0r×%­ØêzÍ¢Ý^‰‘–ù5ím.#ö¶Ò:«; X;Ÿ›# æº=Ëúý7ûÍ(ÔqÑü›ÕÛúï·}ŽOÆqŨꑴÐ,w†lù'hFa/—´mG=zs’k†ýd]¦îA~j¥Ò©ÎæË7_¼Wå·©â©'•¦7±\5Ô¬²Å3IŒBÀÄ~^Û›ØzÉÔ­cÓn¦²µšãÍeV3ˆDdà‚r[ké·¾kxÍÿOËïkòzYžö¹Œ_ËË¿É'×Ív+ÝJ÷7Á³C#y¶û”/R#Ï8á ñUõ ­­^3jò>è@ýâüÃøNßN‡Z°Ð:Ù¬pÆÑ¨Né–%Зaørj‰žù¶²Ë+1 sÆO‚S^}IJ:u~]|RœSÛeýjMk9’VŽŽ@v´!×@鞸ž8«V÷‡Fv´‘c”´l…¼½Ë´ųž›ºÿ»éUÅѶYÚuO25I¤XÇÍ»ªŒt^¹Z“N²Óï&¸ŠˆÖ¬ÈògåDVr¿RvsZÂOž)=u×§~ï·ËORgËÊÜ–Ÿ×õæhAm·0ÜÉ x­äÿIç—›kzc‡Z±µŒ–¼‹'lª}ô ŸáùWu¥¼·7Z‡Úüß&Isþ¨!Æ댷§~s]Øj¼èòqe rÿÃkž0Ž)nµ•¼µWŽI¢·É<廎;riמÖõX#ŠÆþ5Ý/Ÿ$Í ûÈ'•=xçÒ°RÓJ¾>Uô—c2•“nWÁçÄ’¤qšßÓüem¦"¶Më´– ·hQÎyÆIéÅz1å”npóÛFÕ¿¯é‡‚¤Õ#²’çcZÅlY®#d ·)Œ¸Uà€r@ã_ÚŸàÅÄÚ]ö¯Ö‚°~âÕæÎÙb#•\‚ œòF:â¾ÅÓürÓ]*,ꛥ¢Y8ð·íû;xƒáN³Ÿ½¤Éml»Ih.*Aþ쨆jQ©EÇKî¼™½*ÊE5ÓñWÕ†óZ³Í¶?%›Ö/â'¶=yíW4»fx–<°f“£}ÑóíL×4-gÂ"¾ð®¿e%®¡¥ÞIkyªUâ–6*Ê}ÁUý5|Äò]Ôgqe£çñíßç¥yÙ}8Ê£—_ëCÜ­+SVzw°K$I.ßÜMó3nSˆ•°0qéÜý;W¢~ÊÞ)¶øyû]x'ÅE™ícñ‹M-·)p8û£ûøÆßñ®âÚÕq§År²«C31KlÝxÜ«ýÑÐgVÏYÕt½oOÔ4ëϳºÃm:yrð& º‚¹ÁçÐ+ÒößWÄB§XÊ/îÿ‚yÒ§õšRƒûQk¶ý~äÏÙß?<ûPE?†ü_§ÚËok᫱§þöH.-îržTŠAXŠ•,ñ•`0y5ù3ñKá—‰~x–#Uµ–Æufý®8ÀߎpFî€1¯Ø„:†§â¤¶[ÝWO–ÖM fÕ!··2o¸hðRç”`KmÁÁã=+áÏø)¿ÁŸèšùñ¥‚¯¤ÓG¸ŽãÉòÅ•¹ØÂ£ª–°é˜sŠý>ÀÑ«‡uÒw]·kÎÝ¿àr¼el6* ìÎéÞÖ½´z÷ÛÏcâ]Imm¯7 þI"Cn¼íHÛiÚqÎfSÐð+>åÅäm1—sÇÌŽ0«ƒÜ`]¢4û­)'H<™ÜÛ«K€.T)㜀‡w\Šæ&RˆÞhó3‘ºèØÆ?1šü×S–›K_òþ¬~‰…—Ò€ry¨Þáznª¤H§/LË–Å5MtaÌË?hB9¦¼ ÕwR¿vš¢AÉ­}šŽ¢u%ÍbÁ9&šÅ@ùzfô®~bGÓÒ…²•€^*-ì (}ÄmÍ4!ÝÕ´U‰’–ñ11œÔŽ8–Á¸§nÒSåE#œ:¼r±;þéõ§Å©DÒpÿ¯%O‰0DÇý)ëV#ø—ÄbérÜîÝÿ×®ÉF1êW³vØõ¸5ÔmÆjXµ8ÉÆþµæ¶¿¡*¬÷ ϤƒüjÄ_l#;šlà|ÇÌ—³ŒµºY¡oqæ=/á “ð¯?±ø…§¸ÊÝ ¾¤Õ£ã[6­ÒôÏÞ¬%F2+Þ‰Ú˨&pY mE?ŠEü늟Ç0ù®Tþ5JoˆG¹äúäb´ŽÄûÏSÐcÔâÝãÛæ«±j ·æq^Uÿ â#nY~¹j½eñ |×#8þõML:½ÇïDô_ít†e“wF­~<Á,¿f˜üÿ þÚßROô_ ]\ˆL‘ã÷ÚÝÚ^ŒeŽQôjýB¾ñݬKæ<¼uÝ»½xgÿ†žø9ñ‹âÿÆý+SI5O‹^&²Õµvٴí„V°ÃœòÉ>²*aù°ÞÊêÜð“ÿ·­¾eÆûúþŸä{ìÞ%ÿ×ÿß5wM×Õ˜ôüëÄ.þ&B& \=ö¶­^Ðþ* }¢r7rs^„ý†É™ÚMh{šëA†©ÿWÅðRé·´‡þ!êO `ð%̲LO–.ž}±<Ÿì.\žçŠú"Óâ4s'7QôÎw ù7þ gã{[Ûk›ñ]6áF•mÔŒÈÒ7—$€vSÇ©Üqí 7“¾ßúT_éóÝj{×ìëâ­7\ýŒü5 x$Ónµ­ µŸ:eHÜݲƭƒ÷¤Ø[ Åfü\ñ¾«çßiö1 z²É2¡;€Ûçßåëšó/ÙÀ^-økð7Lñ%ߎ®µEšÞÖæÖuæKŠ#à|‹<ŽFXŒòj×Ä¿½³Lt-— %äp¬ë *ÈŠY™¹êd'ß"¯&¡Ë‡‹z·wêÞ÷õz®×#4µØÂÕ“IѦzq‘­Yç’é¼Âß*.3׿"¼£ÄzÄVK}$Ⱦj³¼ÑÿÏ=ÙQƒíéé]Š5Yž6A/ÉogûÌ‘¤ð¿\漋Çz ÓldÞîÍkjì«·vü˜îrÕïI(ÇÓþüÉ©QèþEiüEr·~]­Éhwe`²ädø}sŠÀñeÌÚΡ­êG$qÛîY’wî‚;*®¯âØìa_&’mˆÛr7˃ïž}+[ñ-¸½’å#1yªL‘´ƒ;óÜ~W‰«í)”¯¶Žª_Ťè sûµ‹néןËÒ¸sâ¤~(šÝ¯<¹ ¬h̤FsíÜb¹üAi4›é •dÜ HfaµG\à{ŒWµÉ*ܱ彎zµ×M|ÏR»×F©¬ý¿¤H\N éß§ò¬g_xµF„j»¥FùcÚ£¯â+*hg¶vÉ>íÀ®Gð85FauÝCc2±“LËrãOL{ 㜽íY2­)SÐît‹åÕµ8`Še†7]Ä8y÷â¶.­æñOŠ6­„$0§ØÄÇ1¢€Fy+˜Òµ¸uhã±Ð-£òcÏÚ%XI`òç \W¥xBÞ-MÙ©ÞÇ%ÔѨFëéÄýk8ÇÚI«Ô}èït©?à—_ ­4ÏÚ.±bðMt·’Oy<Ñ–a…9Pz÷çÕúÀoã'9÷¯ÍŸø' õ‡|n¾!žVÞÎHšb  ¶8ô?Ò¾Þ‡âþ‹ Ùö¥ãûÍUŠÂ^Qå]?¦zØ9ªtÙèZ‚´=fÝjÁ7W¨|ZÑÕ?ãñzöjçuŒZR– wÔãæaSGïjtN´¥±éƒ\…¤Úd«‘j«‘µ¿ZðõøÅ¦7-úíÿz·´oŠVWj wËëþ°r+¦xZ}1‹©ÌîzÐÔËgkTsßdguq6¾;´•‚´ã>ÍS]øÖÆ8¼Ãp£Ý›ÿ¯\ÿU´Š»¶¦ìú£#òj¬+7 ©®'Qøƒd¬wÏßøMfÉñ"ÌÝÏ–ôÜ+º8xÛRoÜõ 2cª_Cg œË _§½~WÿÁÄ¿mì'øÇñù¼S­ÞÍn>"ÚØÁÿ–ÖñªNT²îRà¦Ð<³Œ®H8ëÃR›úäcºVü_ϱªFžzêÓ·þÿÌø›S¼:–‹¥éwº-®Ÿk§Ý ¯2áa¸˜F/EMÌwpŽ[ ¹#o5ÉjøNëÅú««[­Ž› ™µt’fB$’ #dàc`'sŽÌElxS\°¾°Ö<=q©5Ʋe¹º¿Ó²í–¢(r‡vÃaBdŒk™Õ§ºµÒfžÀÜI{¥YÏ ýÔ‘«¢ï¹p nŒàŒ¿“œö¯r‹¶‹ï>7U-á¿®å[´q©I£©¨àµòcÔšI3½·Ç¼Ël,ZB­´òÄw5ËêPøQ§ûN¥®ÝXÂú¼PG™žAf‘̬äð2 .p{TÚ«j6¯#C¨ïV·yn$‘›k¾ÃÇQóon9È8àqXž*ÕžÛD±K$’/±DÅ•†T³¾Cz6rä.=ki>X?-oýyxhÊu#g¾ž{>¶ûʾ%¹Ôç‚ßO¤—Õ"µ‰w*‰Li¿qôUÝžrsœÖT—WH¦Ý$+ Gf*eF™2:³ù„û µâ;[û Ç0É9i%kWI£ ‚ÃÍ+Ž:’Î8ãÚ².5,¾Õ îc$Ͷ@7*•TèxôÅpV”c&¶·åý3ÜÃSæ§·üßùþ¯¦‚_"´PßÞ]ÃæÜHËk¤H6î'ß?ݪ’ˆ  lñmÛA·°$œ÷ïš}Ý›Ãq©çZ¨¸¸‘·äÛW ûõé¾>ÒôÒ׺¾³$wN'’Þi­Ü7ÙÂîtó¹ ÃoA·<``WØ`ðÿWÁÆÏ}~ÿëð>nµIT«*½ôû´×Ôûþ÷áë[}Å2‹Nû>Ò¶j¤}Òevl}v¾ҹÔÊrWÅ¿ðMm{MðÀëé%º’(ïµ%xÖàØ rFîHÉ?Z÷kÿL£ËŽô`ú¿Züã6¢ªf•$ÚÞß‚>û-R†œWkž“w¯(“7¿ZŠyÉSº¼žãâ¥Ã—ªäüÜѧ|Nµk…FŸ9ì² æö”w:ìô¹íVZ’¹†>­VF£ßþú¯8Ñü}m"(Yx?wsV¬¾>Ócƒd³®åéóWð±l®n^§_5æ2ßΪJ?7i#þúçÞ!øÏ¡hÈEÅúžáQ³\݇Ç}.úõ•fUÿyª©ÑˆŸ4v²¼@¹…h%ÿ¢×—øâFŸs°»_ø×Aoâû&Mân:ýñ\õ0¯˜¥%mNÇíË–Ü2aƒô¯Í/ø*_ìsàK­CöƒøáW}ýŒÞ,±´¨µbT¼”c†8)¯¾®xÃöpñZéz圗> ]ôD ýâFÉ1²¯uÏ¡×=j~Æ·µOÝ{ù?ògµÆ{H¼=O‹§šíê¿/C•³‰ÍÔ2,êÒ4ñ©gm»s¼IcÇÔìj-9u]_I…åyKV„+HÝ,æ:u#è{Ö]RæRog 1¶ô;N ÔcžsNÓ®Ö÷EŽ9ù ½¶í;w¿¾áÓÔ}EL«R”•¶½íßXôûοgS–]í÷{¯þûAû>ø•´Ï†z?‹4íFòK Ù^ÿgµžéZÉœ à®Iàó\Ÿü:ýüMû;ÜëÚŸÚhV+ˆn–HÊ*Œî%†C`äçÖ¼ãáŒõ+Ù÷Aðž¿â¹µ-B=6Õ´…y|¸­Ô“ ¢2…¾éÚ:ñ]íKñW¾ ø{%”ö—²ê¬7P¶c”IÁWÀ »c)8ÎÖgÙ£˜ŸßµWàä6Ò s7qÞFÿd¹‘ le—+ó|ßbMtZöŸzï9¸?=¼²ŒNí»˜Œü$)ç×Î_<mÊ“¶F ´…\g#Ÿþµ~a˜.k7úëß¾Çê¸ûþŸ×ê$2Y5¤‚ifV_)‚nwµ,¯-`òÒIfÙ !v|ª=s•ÿÅbR_1åS½È'ã5¡bûE»Iþ®I£Vþûý=«“QÆVvþŸ_[Ûîísªµ5(ÿ]º}×?ª/ø6Ãöбý¨¿à™¾ð>·â&ºñ_»É|;­Csp­7ØÃ,eÆù "ä“rkô=C'­;ði·íAkðçöŸø‹û8ḛ̂øÛÁéªY«(ÛöË yýègsö ~õXxöÚAþ¿u0w”¬º“œÔâü¿#Ðí[Ãñ¥7h>ñæ¹HüU §ÌëùÓn|Uœ‰”÷«Ÿê²¹§9ÓOv ECö¸‰Éjã/ ÂôþõUÿ„â5m¢ç=þõuC %¢%s¾ûd`g?… ¼^‡µpÃÇQ·+7Ô¦Mãø“´îÝÏ GÔår>-ïíè~]ø÷¨ŸRˆ/.?ïªóÙ¾!F‡>_z­7Äu(?‰íUÜ/mÏC“Wˆ”®Þß5ê±3`ù×™Ÿˆ÷oÍ©bøˆ†@ ¾ªõ¯ÔÃÍž¢·ÈFå­kž¼é¾"["ÿ¬aôj‹þRõäAKê¸'yXø*ÿö†×ü¥–FﺨàuªIûCø¤²‘7=9c\˜cÇ'ï’ XÔ¶õûÇ€Ò¼Í'y6tsN*Ë¡ß[þÐ;YWÊ%\£o<_çW?á¡üh‹ílÜãhï^wåOr#VfmбÇþÊŒájðµ„*»n,¼r8¥ÛFÉwZHîm?hG6VþEô]ßÓÒµ¬?i¿ÛŸß]1ã8a^fcòÒlÔŠ#s»>Ý{Sä}ÊöW_Ú«ÅR¢³ZƒÐu¤oÚsÄ—-´ÿû]+Ë!#}à“ëÚ–9M•Nzvª´­»ûÊ„í-OV?´g‰ ; òýí§ŸÎ¢?´oŠCbdÝü]ëÏU•Bÿxç½,öä®èãù†Iô²Œ¥¿3Ôè ÞÍûExÒrUµéþM`k_üSª¸óu @ïóu®q¥y&irÙXÁà})ÞAî*5²|¯{˜KÞZšö¾*Õ®eÙö‰[8;•9íZ6^*×m ˆ¯_Ÿï15¦…óp8ý¡Åk1ééÆi­z—Z:š­ñÄVÛOÚæÚ3µU«Çþ>ŸüSÔ¯,íµ÷ÓfºÓã·MRhÙ­¢Ž7Ý'š3Ôoóô±ë^‘*« W#ù²G?JðÿZ—â¯ꚅδÐÜGªO§Áj.Z8ØÜ ´XŽ n•¤ÁèцåS³v]ÿÐÊ´o¾§Û?¼-7…¾iºMŽ´×úLvú=þ™s$ƒoÙM´Ÿfˆ¨èËßÌɯ,ø‡«Eo¦ý¢Y#UiPFË63òry5é>µ¤xoàŽ‡k¡x¦ÛP·G³´­Ûþ>–ÆÌZ<å$gqé^ñYMSGµŽÚc*K$'ìÝ€pG9õëÞ¾“%§Ë„º¸ôÖÎÛ_Öÿ-Ž Â^õ»Œ¼Y6—PíŠEuxd§ùˆ\~¿…y‹>"C5£64r²æ4•¾ì›\‚q‘Áo~ÔxÏı$Yß±ÃΣÌ1bVgߦ{W¯jyµh#ZÈægqÆÕ¦"µ½Öÿ¯ø‹%;¢mOÅ:~—y©ëÁWý÷r4…V0O;†1‘ü«‡×|iÙ³‰co26e8åþ|ùW;ñǺuÍ—ö%íòÀØ%•¤sòÝÔ®=óšäíì ¾·V¾™—ljÖòE+6óž}‡ÿ^¼¯iïyœ¸Š×|±:M?R–í^ö87£¡Y5Ú­ÇëYº^‹4QM1tû\#Ç;G…‹¾Ü}9êjK–1¯Û,¢¸e…·[.ðŽÐ ûŸÒ¤³Õà•Õo,ä[{‰ eVÉSÀéÔçßµe/{ëúþ¶9¢¹lÐÝgM¾òÚÒØ™–ÄÍ!!Éàg¦3Ú¶¼1¢Émi6·cf‘Ý´~_“&Fãæ{þ• •Í‚ÝÇá6¹û;#±–ßæq2âÏ@:w­ÛK´¸–x,“ì÷œ-®s^=ÎF;b³äŽìé§ñhË>ѵ)u²¶Ñf…[‰¦Gã8Çn¼ú×±xgAÓ4£7Ûd¤µ·Œ(—¡'Ôöü+™ð¬“iö±ÈdŒ2®àt'ù×QáM6ÿƺÔ:[éêÛ¯"æ ç€ÙäzVÔèëyŒcÉDúcàέ©øáÕ³@X\_;J[fЩÐqï]…¿ÅoÓñŸâ®vþ@6Õa³b‰Tp8¨âw%· ×ŸŠ¬åSG¦ß×Ìú =gE.§Zߵɓ-tß.?‹ÿ¯U®|y«] Ïpy÷®}*í|û{þ5 Bm¿_oþµsûI÷:-GÄšŒ®13ŸqW4Ÿk|ß»¹eÛÏ Xqü£‘´íþoÝñ韭K©RZ\9c¸ãGˆíã .›vÜä·Ojuׯ­~î;gÌ$â¸5JA¹G9þ”«)RT'>ݩƥH­Übõ±Õ\üNñô½e^óQ'įù§fcÓÎù¶G/ÍNxÌiæ¨ùGz¯ÚTµ®G$[>ý‚¼_¨ø“ãmå½õçè­¶.ÍóŽ ~µø5ÿ(×¼A¡þÚŸ4漎îê?ˆ7’ÝM$ß'”ĺG&>”¼sÈÆI¯Ü/ØôY|xÎ6´ÚSEÓï|àþ•øQÿÔìüÿøÙgáÍ.¦·ñ\†ââ1ºÙò#,dRÜ8. ²v3Åm…R•VúÙ~§—š(º1õüÑà×5Ký NÔ¤†µI~Á³íÑI‘³™N⃪d6FÐ3Á©ü ã?‰rZ-åÕÕŒ×Êú­Ôòʺ¤ŸjÂ?Žë¹ž<8”$Žpp<+5µ—„f»Ñgó•õf–ÖkRÛ¡•"8«RWŒg’kдKcM¸¸M;Æ’Úý£N¶··O±‘®oâÜždʱ|­²1›ƒ Œ×»GšJÞ¿ƒ>Rr…9__Ë×ò<ËÇþÕ¡ÕáÒÚ$ýÔ‹—%«yˆxÌò™‚*ÈŽÞnÖ$}ÞO¼é­X’ÙûM´agŠÖâm‚YTlÇ£`¸Èþ,7jô_‹:ç‡åÒçðއ6¸‘‹é¥u8c‘ã*ÓùJ®y gÔ`ê¤à×›ë²Q¼¸Y„“MV¶‹¢ @årÍëšé©-qÚÿåëýy¸8ôO/×Ïï¿›Ó&ëRÔæÕ¤¼¸½kˆÖF’Kͧ÷ÎÌbèÇ¢JÌÔâ5ŠïÊÜa†8Ã?xüþµ6±%Ômåcqs _—iŒT ûã½,- š¦£ù‹ Þ\Jë÷·#lúëÞ¼Š²”¤àÞÏîÿ€¾ý¢§g$—ùÿÃýÞD³iRͶr8¢’e–ââAÊo\{çqüy¬xâòeŽ`7M¿+c§ëаf´i6ƒ$ÌÑ«Iæ1Ú_ïã=±éT„[%hIo1dÃÀ==ë’½HÊIÅ~7ÚÞZÿ]Žš1’‹MþypÙÆ—òB¥¤òä!¼¾wŒ·Ó#¯¥\´ºŽâç÷7 Ä"9|×ùWn= cþ;Öte‰Ñ£XÚO¿&Nx 5¥¥_YZ´‘ÚÄ"¶lßhÜdÝ¡'°-õÅi‡Ÿ½mµ¿ü7Êþ¿3:Ê\½ôþ¿®‡I¥x-äŽù$[T[dU’$ÜÞ`$m}æ;»=+Ù¿aW´Ç­D‹J’çG·¸Yu…VçÉYFð}ÌsèM|÷Á¬ÝãÓ¦X·ª³ù@ -·n:ü£©ï“Î+ôïþMáh4x›Å±éJ©qq2j,ã>fÔQè2£§_ZúÌž_ZÅBz%w§õÛô>k4§_*ÖNß+]ÿ_3îОøIc‚¼7§C¦­ðao¬t¥*>öÀæì1Ò¼ÿÅjzµõÄú¾¶Ä­’Çka<›P¹s‰ƒópH­ßø·^€ÞZˆ¢e¡É$qÕ²G9ô®cáN¥iñkÇú^‹a­¥ÅŸÛn¶É¹·nhÎxèzûlEhr¥ýiý\ùØÅʪ„WoÎÈúoÂ÷7^ð>ƒá{%û?‘¥ÆÒ$gÌþ^µlx»X€mûC5WÕç{ÝFgP«·• úFƒjþ‚ª`ÛY‡ø¾3*ø¹ÔOvÿà§áéF•ÅtI'ÅzÄÇé—w<1¨ÿá'Ö`“r^IÀùK1ª˜º¿ÝêjŽiœ¯¹wù–¹ù¥µÍ9Rz#©Ó>.x–ÁQÞ‡ÞcV.>4øšâ&C3þ-¬zW\ØdÝþî)›˜Žÿu»ÑÍ.â’VWFÞ£ã½_YŸ}ÕËdz7_jŠ/jryÑJùËÕ*/Ï÷—=;ÒnPpÄœœ©£šKfÆ—4uÜíôzæœÜê?Úë[IûF]<µó·7 ¸æ(®Í¹_c}sŠ›#%Èÿ{4¹ªtùcsЮ>=ëÒ>cÜ=‹U‹ÚŒ$Ò¾G¡¯1>b¹xó´qŸZi™¾vü)ûJ»©1rDõûC^ª¶F êÊùßöˆý“>þÔ—ùÑ­àðvÇoy1ÛË'ódànºén|µÎzv¦Ãtñ:Ï›^6 `çŸz¯iVKÞwò3•*U=É+ÜüýøÃû>|^ý—üs¨x â·„æ·ºÓÜÛÃtIËýä`9\jÁð—‰RÚxæ¹|ù-‹y‚íÚ¤`óþy¿Q¿j›9ÿh¿€«ñãJ·½Ôô»u´Ôâ’B¤m'%HÉôæ¿6;ñŸŒì¡£Ð÷oøh‹_ùý¦êt?´LR·Î=~s^9XìÖò …m͵”}äoj¦f–Cò¾HÉàzÖ];\6>_Ú&PßnaÿÁªò|z·vÏöŒ¾ÿ0â¾u}JòÝ2n—œsëUÍ̲üï!ÿ¿‡üj£Œ­Ñ‡4KÖÜ@±¶Ö]ÞÙ§åG)ÛŸ¥A§o0UÎÖÁ«)XòŒ®_ž?Q\‘³-³À“–'#Õpv«œp}}j“y‘–_—sNžøôÿ i#V,oð|iu¢»d“vÝÄç;sÇáC}Ï1\{z†Ý¤,_;FÓ»åç5.Æ–=¾h]®‰dVXT"ƒ× äb†`„…·.KÉ»¯·áŠ„†Â†r~nx¡f•W÷rà‘Âúþu7è_ÙE¨o‡šÑ32¯±«ÓLÏƪ¿s?ï Ëh†[ç¾jÕØAåÜ>åëŸj9}ë•¶¬X”1îù[ØÿZl såîàÿµïšt‘F‡ÌFcáeéM ¹rJãÏzŸR¥Í± }Œ_£gî®x«±ê3"ìF_”uÿ&¨ ÚGòùº~i6Ú|mÏZ«v òȱæ³ÊªvO ØW™øûRðÇ„5 Ûø›Ásk–ú—ˆ¤žm2ÖOõ²l”ëÔ¸Úˆ c>`=«Ð™Ö¥ymŽ2ÞÇŠð{oÛEñ•¼W©x½ߟoÕ,ææB>Ë,SÊB’Af³•Tž†Që]Xnog7»Ù.·{ˆ—$còý³µè<3eð‹FÓt[XaŽÇMa2 ÂÃ$ÒÈòCçå‹*§Üt¯Ÿ~#ê;)%ûc,‰qL–ã÷ŒÛ@zŽk¸}fþ &ÏM½¦•tÙ.ä’5Uó$¼—í¤í±%Eÿ€×†üHñå·Šo¤¾òDkqWmÅ·…-†Ç@GzúÌîðq~_ƒ[üÏWšM£‘ñm½®‹°Þ¤‰$‘.¥Ü6¢ä¶Ò;õæ^)½³¼Ó¤Óô˹ƒ3¶r¶KžÄ¯éWþ'xÓþu¤´°ÛÉy Ÿb‡ÏÚò’@àwû§Þ¸õ‹F—B·³´Ô:ÿ¬…~VbG=pxä{ç­rb%ÏO3Çi|+ÐåìtÙõi5[!¶‘¶,̹bÝ *GúVµ¤r¢ÙBlš·™1o |®ƒ¿‰Á§x‚õ†f– ›V£ò­h™L/Æw òAý WÒõK™$·Ôu«›E¸U;–Þá€WÙÎãæ¹=›VG¥»] / Ä+yt$/Æ;[w”m'q$ë·?•ix‹HÖ¯.|ý(niO”& „2€ØýqéŠËº³¹ŸÌœÞ4~\­"«Cò©PC ãüæ›s©&µ ²ÃÙÊa ‚@¥W·üX?Â9ùMHƕܺ“M¹è½2ö—öo½¼«$ë ´‹ó·<çž1]WƒôNÐý¢ø+I —ˆÃ¸ç85á]:Ëû1u F(d™A;£o›ãŸC]†’ꊪÆå•9ÉÖªf¤Îˆ®Y3¿ðjÇ Kq¨C¹Ú"V c¥{oìߢI.¢Þ.ÔôõòìmÁµp~ìÌNWð+Å<)‰­ŒÖòyJdž•õW‚|9má/ Úé¶ex‚i¶ð œãéF*Q£EÉn{˜^Ö²¾¶ûs#M+ÈKs’qN»½~ñ¨c· µ5f9عýkÁw>™Xµç*þï'æçéÍYI‹¾nÝQDÉ?A¹•*N#&Îzmô5’YPòcoP8ÏãQ›“ò”NBàûÓà™QX)åzuý* $(ÇkîÝÅ\R ßrdq–<žzTÈáˆ#ê¸÷¬ø¤‡9/øóV"ºÊ€ßÃCHWrê…tl7ûÍý)Ê+);wpvÕD¼1Këü#­H·ñ¢ÿ²[æô©Ù–º»¹ûjßÙŸ´»9å›xVã9ùxþµøWÿbñ¿ˆoŸŽ’øE-n-GÄkÉn•¡!×Ê‘#?7ûD²ì<3_µ5CiñwI¿ ìIU‚Ÿ›>Y=»àWá¿ücÃÐZ|~ø¨ÙË“þ­DÞ\ZÈG›3L¯‚Ù%€òsŒ‘í^ž]MÉó'åø\ð3¹ES7uý}ç‰ü>6Zmõ÷ƒ#¹—Ñç…|À±åJîÁÀ †Â“‘Û­}Ká/ø~×Âñøâj^.Ÿáx•õkåY–s=È\ư2/”±Ç¹Æò|¬åw.|2_j¿ü+¥xU›M[¹cû.©g2Y¼Â¡™Üð‹¹wã'à+ï?ø_MñGì÷â/‰)º÷OÑã8Ýæ¾¸Y„•ŽåYÃÌ]K²³qªIôðñ·åí¯¥ÿÌðªR•JnnÝnº4¯sâoŒqéZ-Õ¿†âÑ£Vµ‡ËÕÖo ÒIço18bÙÚ#ŒvÛûÌààWëZJÁüW—ñÝL@d„fgÆÎ>Œ8à)¯~ýªdм3ã[ï ø ;«;85(#µ¼Ô¯ óÜ4V¨— ų‘,…|ÅOÌsƒãz•«]j—6Z¶Ÿt°Çu º[9•ãZCäýhæ,kÔ•5:|²ë}ú/ò¶¾Ÿ3ŸRTåóéÖÍ/Çm:­ö8y4»½Jâá7BŽætc‡`.3ýçeopsTµ»Yc¡¶¹imlÑTHc÷aŽÓîK3W_âíãJ?cÙV×QE’EU'w’ªá½‰Ï¯Jã§‚+›{utˆ$…Q¥“€yà™ûËÏÖ¼œeIJ6×ü­Û¥÷üϦÁb=¼TÓÓM?_[vûŠÖjÏÆj²í;‡9a–n½” {Š.L72´¶ì°¦£ÊôUáw`u#,q×4ÛG½™Jì_1w ¸äü¾Y]£¶6ƒƒíUÞxä<Æ A]ÌÙ¨ùxúqø×̹U–ýôíçç¯K¢‹sþ¿®ž¢üÒH±®j³tàgñâ­iv÷7¿ÙûV,øíS—U%¸>§ÍVµ¸+s›’Iä¯NAØ5­¡Yï´„ÛÍ3HLR¼¬A ²ão¾NüÕací*'÷ôÓEo]|¬»“^^Λþ¼î^¿´Ôû5 š{x¶˜dfùw1+‘Î@`½ú“_¢ðJ¿ à®­áÜÚ›èæ]FæK«¦‡÷;×qÚ¿x £‘ŽN^=,d1ÚÜ[Ál‚?Þb« :ƒžëó‘õ¯·?àžžñ|_µ?h^'¼û—./ôm>Õ$žõƒ††8åˆB nã;HéÍ}–P¥ W2ÖËîôÛ§}t¶çÇgR—°ŒWókÝû¯}¯ÌúæmÆz„Iw­Á¡}L<©7‚U£†å¸<×®þÇZŸmâk‰ìRÝcÐt¯6U·@¡îpçÕ‰$ú’I¯½Ðá‹P³ƒNÒ¦eT™¥“T³d ¶:«díÀ +éÏÙûI |+šõlÚ95«î)’8ò8q»ùW­›â¥‡Ëç7ÕYz½,Ÿí1ÑOdï÷XôºBVFüx¦Í2S>ß+cž—Ì¿+ ŽMA5ñ™™›ïcŸÊ¿+ÚÇé<ªQÔ½q4#…ulõ?ãPK;/1²žø—=ì®wùÀ©<⟠Ñn ~bˆº“¹z¤.®ìnãƒOYÈPHÇÌÕª*øùD~Ù©W†G>½¨½Šû)"ÑŸz–T^GåQ<˜,Î8ÿg½@’‘”*GûÔæPëÃwðÐû•®¤vcÚßøJa»ŽI1?A×h¨˜íG¦xªò9å#$tå‡z”ÂÊ; yÈWÍdiã®k:kæŒmCÀ=é|åt>{{Іè…oûézÕ_MIø•“긅öÁ4¯~XªB©ÝÔsUá}ŒT}Þþ´H’?Ço­frr_ ÛüñäZ'‰%ð®«-ºéºì-k{ö¯š8ò¸IöoÐ×ËŸ·Wìäß 5ûû¸,dY-î–o:Ï5ÎdA“´ví^Ç$LWc9_î•ÆA¯R×4¨?hßÙÁôñ2x“Ãе¶£G¹î,ÝJ¬Ý²S¯á[QŸ½Ëý_ðLkQúÅ'¿sòÂ/Šßgñ=õ·‰Õ–í^I#€©‰³Éè)ÇQë^Ò¾4|=oøQãþе„Euqî1°å[§Œ€99ö¯?øÿðöãÁ¥å…Ô’\]ØÝ {¤EJ’ß¼=p¤cƒÐÖ/À/‰s|ñÈ¿¸"ÓïÂÙêÂ<ànç!}º^kÐŒ5SÍ,«JGJ®Ýÿ_ó)ø­<[ð÷âkÇákëRbÔ­åT“È—ÌÒ+ýÏ00la”׎{\²Ô®dÖì5oǽô³FÚ—— Íšn>x1ð’–9Ç xë^ßñŸáÔ^ñ ç‹4 *ÊYµ´I&¸[–+$* N7t'漺?‰ž ñÔ§†dÓn­îÊåuKuÌY¶°ÿV[Gb=½¬ hÞÏÌñ³ +§'ÌöéÐóÝ^M$vž*Ó!kžÕ¬Æ%ž1µÔÈ ¨<÷&®~ÕÞ0Ð"O/ípƲé±Ã×ø7çH Ñ—‰9ßž1šäYÉmgµ¼ô×¹á>+Ñ5]V¸“U±K;„_:=²ðÊ0ß»e%]H9Ü>†±|Eh­go43ÊñÌŽcóæ*äŒTÖš—|¶ÓòaÜÑFÌvÆÍ$x÷bÝ亞ßL¹ž+xÚ|ÅLª!$Ç¢œ×ÎòÇNK¾Ÿ;­öóZŸ¦ÃÚPq¿M~Vù½4ïó9{ku/Æ«3˜ÃK&ð9ôH°Iy¾V‘˜•ÁãÔŒVî•á!m⩼7v<ÃåÊl[vå JgØð=Ž*”—K ‹{{r°ãi ŽMxëËê+tkÒÉôé{õÝŠÅFs´5Ñ5èïo¾ßƒ-øGR“GÖ­/¤Vó,®a™Yq÷’E`}ñéÞ¿¡Ë]jÛZµ¶ñ“ùÞYÃ<,z2ºò¯çwMÏr¶÷NªòL‘¬ÂIöí_µßðM_‹ñükýü/7›#j^ôM`Lû›|'÷mŸCCõÏ¥N*ºR]4ÿ‡þµ"2^ÙÇ«×þ÷W¹ó*Û±ü>ôÆrT#Ê¡»*·øŠz$)&LÊ¿N¾µ ܶÉðús^7»©§-÷"šW9á²·#\•…NýÙû¥~lûUåyåVÞ\JŒ\2ãj+.*|ÊÚÖ.5ëHŒåsŒ•Búïƒòöíü©ò9x÷ :€GJ£<Ô«·pÜÛxÍO2è÷H.<öÚ[§§8÷«,øŒBX/÷zóYö²C Ë"¾Þzíëíüè¸ÔVW*§w<íôôR½µ JMY–tû[½VîK;Y£YŽ6ly˜ê½Wû{†òóóÒª’QB­ëô¨Ä¹p«ÇRy¦¤œvØÊü¥©¦•¶HˆÄs´f©aàýÚÿ:±tÄÆ#R ãµš,¤rJúÿw­ñê>]N‚;‚‰´}÷~U5¥âጟ+và÷Åd-ør°¨ÁVþçß'ùTê@OðçôéSÎËæåf¤×Éåî-óQÚ£‚í&”¼½N;“T®w.Ðÿð [½>ш…ÂcN¼Òææ°öÑ›“FŽKƒµˆ)ö÷<}9¬ýI¾ÈŠÅU‰çeW‚ëÎb[øN7týh÷·åq±'Š#ø‹a®]¿„4)!ÛK=ËG!Èe;Xƒ×þD÷È® K’-Úÿð6þ¼ÙáÆ³rnOúþ‘©â¿&§«IöÌ…á•¢ú#ëYzn·¯[O ÖPÚÞD²yS\Iòã<’p1èMRðŽ‘Úš=BOÞFÇÌa»>6O¨4óâxu¶Œc…NÒ·Œœdg#¿ô¯:U+¹Ý£hû>]ÿ¯ëC¨³ÔnîM2ÙI„§Íòãæþ.{çZv‰¦Çw÷ÂI&·—ry0Œ‘Œ{qYZv¥° òîàÆT};f´×QUqüñ\~G¡̬L’3ÿ ãsL‘ óŸ½éJ<ÅMμmã5Ëæ6w©ù»ö¢Þ蜭/˜èï FËÆì6>jxfYrr gêJÉ)ïsòÓ´Éeƒ1œqÎsô5žú•Í;2ÄçÊ0ç#ïTÖî x=*0ȨÙp¿Ò 4½¥xþ/j«ôcךëbyc,7ù›œžø¨L»>ûséR ãtóUû¿ÅL–4­žwrhe{§WðNñÿáih©ùŒÒ*‘Œî1¾+ðëãÕÞ©©·‹þÙa ÷Úµ[Mfßk3Ⱦkˆ›žNHôþ Wí¯Ã'—þŽÚt±ùßn]®íµFAëßø¥ûBëÚMçíñrÞK[¤ÓÓÅú…Ý´vj7 rF_ŒœbûB½Œ¶*P~R_—‘óÔQ#MvƒËà1FÚ[j±ù+ö+øm­x—ö±‹[Òo|»X}²ëPk6’‰1ÐÀÎå@ç8!x_×¼?Ú ³ŸíýšKËÍ3ûI",b]‘à–M’FÎ0kÒ¦­Š›É/ë×î8)Ó”ðªV{|î߿סñÇmNãÄÞ,›ÄÞðö©nZÖÙZ-co•oqŠŸ0l(‘©V·H ÷'ÊçÐÒÝ.µ½KX’M9£ÿLVRf—ËT}ä2ä`ðü­ž2>Æý¤þxkHÓY¿Ñ¯¦“\³´Ò!t‘X5»]39‹Ä|¶Éßþ‘ˆøûòdtïaù+Sºw³·ÎÏF’Û£ïÓ©áKÚáëJ/çéu׿Uó¿Krz†Ÿý³ig œ²­ä7Ìc±Ÿ"ÀK`¶2CåðON1ÆkÏüC¦Ü@!k‹I¼õ ºÕ°R?›Êã„}Iß\ÝˤëVú.§ep\߬ònó6BàÕ™J¢îþð$W¯jx‚ãþ’hašmû›a‘¤òÆqÐ=2+ÌÍ9jAÅ&åv­ÚÖ×UÚϵ™ïe>Ò3»iGG[è­¾·]ÓF£%¡™B—“ÊØŒ­ònU]½=x5 ÞÄ»‘–6hfgòCuéŒþý*c »é«m)ÛrfWjõVÈ9>Ø\}MC=„ÐÎCÿG\É»¶ðÏS_)YJ×K{?G®ñü«§Ê´¾Úzúh¢ÐÎÒÉ,Šªèß*ÁA$œaú×Ag œú-ÃIª.èda9“å,j~X“Ø}ª·…ô!µÕÍÑýãi’\¸íX ôÜÌ1íZÓÕ…ÅÄÓYµ-ôÅfÂQ¼ìª¯\’¸9À5é`¨Ô†™ù鯟ŸOøÏ;Z3­Ë÷ZôÒÞ]¯×];¢Æ¡ Œ÷WÏ ig4Í:­‘/–Æ4üÛô$×ÛßðK_hÚÇÂÏ|3½ñ²šþ9žŠ0ªA…a‘‚Oœq‘Í|©¿öuÙ#Y$ŽM¥ãuù£T=:³Ïá_pÁ-¼=§éÔ|U-’Í>¤²‘ã;¤å.8#=}+èòšŸð¡k-›zyù~^gÍçŒ01m¿‰%÷=þë_­‘ögÂêþ&Õô_ÌdÔó­$‘ªà U2àppTŸ¨¯ª54·²òôÍ5ÿÑlmÖúüÄ\}[&¾}ýìä×¼Wªx¢êÕc‡I·û5Ÿ“ØOe‡ô"[´è>o•TÁÅîj ¶Jï×§äzÜ3†QºÖÝÙw·õrˆyT®Æl·¥#eœgžÂ­¤QùãwÞõ¥hCÇåú×Èó'-§ŒZ‰“–O¿OÓÞ§ŽÈ\g•ÅKäɄ㽠ûØ<•ç$]Ç G׆ùˆÇ´«Æ)<割çosÇ"›oqæ»ya·uÀæz—ukŽyA‰fÏaY÷ŽN#æ zúÿZ³«ß[ÙÀÂîh£àæ`cÿ¯\–£ãß ØÜy2jQ³nÁ\޼qQ)Æ+pM½6:»{ÑòAÜ1òÔ.ÎîYPdz¹Vø·áìæ¹Žù‹•¸KDøÁ¡j7-¯brßyYÿ• P–ÌR’†´Ñ¼Oæʬ¼OΩ^M,½fUÈûÙëùÓfñ=œÖÞeÍꪨ”ö÷¯øÑñâãIÔÖÃJUK|§ø~¾¾ÔÜ»˜V©4ù›ÿ3Û-šIŸ?å_âÛÇ^•2)Á“æíšñ‡?´6ql«ª^4.\~îI1ø÷¯XÐëzº®­cŸØ×ŒÊE7’3œíè:äùwãÿö…þ"k^,7ö‘t·ñZjÒGµc–Hˆ "ò™XnQ…íÇ5FêÏÄz&¡eñÃ7Œ—LÉ,ðòâÉ—rTàmÏQšö¯ˆ×ú_ÇÍñ& U^â-dÖ4{ˆRH¯.d àŒá¸\Çzï…éË›£ëØðåSëÒ{Ç}µJÎÚé¡óo‰<)kã/‹Z–‰¨k 5Çök½­ÔWЍaTʆ#‚I*½}³Ågx\¾øð Þëî!ÑâX†•öž ²»FâBrIVeüªÞ»áxCÀ1üA×g†ÎêÉíîôe†3ö}:ymƒ«àU%1[>8›ûâ&“ñgÃú"Yh:·†ÚÂÞéœ4LñŒ)å$)á°F:ñ^–Ò«5¦œËÊ[7èûé©Ç^S§EÓ¦îþ˾ŠPÕ­¾Òkn½ÏÕ­b±Ô¥±vo-&híä¸?:®X`‘ÔíÒ­Y]ý®ÑììmVAå4—{º '?‡Þéê)Þ {ÝwX–_&ŒÍ½P Ùàà÷ãëÁ›+A§=Ò´ÛfAû¹#?,œA²1ǵyò“£+¯‡_^ÿ¦—ôì}¬¶£þ+/>ßÓó: êM: ¥m+í–öòEå¼M¹¢br0ݲÿ9¬¿ÙÁq­ÝK£Çº¦ìb8²O㚆{»­ö[K ˆmãxc# «.s“ÁäÛ±«ÞµÞ’u´CºÝáRMÌËžp=±šÖ¥HÖ¢èMÙ­zt¾ÝmgmWM4±œ)Joo¶]u½·]ïÛ¾¥SsRÀêØŠ;°®rcå\ýG'ó¯¼?à?´æàOŒÚ×À}{SHô¿Fn4Ù¦ÈTÔ _¸¿ïÆOÔÆzø.Á£–å`yþVa;¬Ì¥Ž=ŒW£þÌ_u†?µ'ƒüqm ½ñ±ñL-šÂYdi]ª=Hb¡5ÇQª”dµi-´y¿/-dÕôOæ¿Íú£÷.ûZ1ÉåÄvüÛ›[í­{3(mÙ\¤~_Z—Äšlv²ÈæØÃ¹w[ï&{ýꫤÉ$VÛà@ûÌÝGá^‹æ´™ÙÔ™ E}¨¬s¼ç§­,v÷Ñ·”YW—p½ý}é œ1‘£nzîýéѵ×ÛY–FU^ n§ÿ×S).kt >U¡jxàû) ïò®{ûúW?qt<ÆuP˸/¥jkm8·Pÿ.3òíëžk*Æcg7˜$ù[åe#r°ô#½gMYGfV‚匂P‹+··¥h]Þ-ìËsql¾qR$‘8Þ}HõúT˜vD›yü©žc‡œV>9¹ªÖÖDEr¶CrîQ„¡¶»P©V•CHØûÜ míÂçË„#ÈÒÛÇ.ï™v¯]Çø¨ºv÷dÑu¢D´ß#1fçØ ÍþÐòNÌ·^Ù«SÅq< Ú䚪–öʸyžüÿõë9F¦Ñ¹¥Ðº’€þrmûÜ.:t«Ý'—*¸gÆÜüØüqô¬‹Q$ŽJã,¡G>õ¥}ha}‘\,‹Û‘Ðÿõ«£–×H\ÜÚ¢ÑrJewdr­éL‰ž?0ǹþ\gŸð§Àî9$…|´þòNÜzR=Ü¢Xî ,Œ¸Æ}Ò³ýÜc¹§ñ5fŠY™cWs–¿yXóõS%âÙúœa»œÓm5v”ù¶éå©$mëØc­-Æ¡0I§ÍŸCÇÒšøueiÍqòiÒóÓÓ÷¨-⸲“ý"<èGCL‰š4*²FÊyÎãŸË~h‡Ù|ä›æÚ®)iÍu¹JòV!¸u–&Ú»6Ÿ˜§ó«€rcs“÷rzU]7£÷ÀáúÔÙdkl«äuéíZ%Ô›š« œ´m"îÛÏËíÍ>ÚE†edû÷XW;> a¹óVeUÿkœŠÑÒµºbóüùFÛëڈ˚^€åË¡§{:O\ Wn2ß(4˘ª1¸ªñþ5%ÄqC»î‚xm½*µÔßf›m‘FË ~oo|Õ|ÃOÄð?Ú÷ÇRx?â7„t{ˆ#ºƒRºþÕÔ4ø_÷ÂÆÐ-X•I¦`¾»bcŒWš~ÅZd¿þ%|Fñg‚4{ÅÑôøìôÛ‹©mH!D¬Ï—àïlœcÚ½Gã_ÂŸ.>'x[YÓfšÕa†ÊûRò᳎þáJÜ9Œ6öáÓóçµ{×ì%û>øcÁŸŸáï‚àÓ®íín.uo^³¹ §|#@eÎrW ¨g ØŒöayy£í_åwÿ¥iå×e~ZøyÖÅ]ì¯oÁ%ù·¡æÿ/ï Öï4Vf-qqF¬¥q‘œdu×Þ¾oøÁ.¥$#EždÛgwå+FÛ™22™ÞÚ*úĪòͨj¬¾lm!¸Úß.ðX†¨] W†|U×­¥·¿¸Òo-wµµ³ßË4Û@›kX?…sƒŽ:Šû*”Ó§¯Ýý|’Ì&ìÿ¯ëcç_Úëâ¼_|k¤hºÊÜj’1ŒÄcèÊã?{¡ÝÇZùwMøã/Ä ã[}M¥YÖHƒHÄniW ´g®GoâިߔGXùšK›–è[ÉNà#“ø¿…©ð;ËySrCÞ¹û(¯#}×q‘AŸ\Vöš±£Â'ÎÍý;cÒ¡Jìš\Ò÷ŸRÂÚȱ+¸;XÚ`þS)õü]0þÿuÊy1•ù[nGéYþ%3.žíd[róÕÆáO™K¡·+èÎƒá©ŽßÆúMÈ?¼Žù<Ÿ”ã5ø?ñ£T½?ü_su©´Ö²x“U»Ì™ ™YÔ1`pÚHüë÷3À3Û¦µ¦Ì$TÈLŒGÌÏJü?¶øwuñCãCxCOšÕ¦ñGŒ<%æòKE%ù”1ÀQ€pIã>œW»–Ê*Œäú‘ò¹äo*0îÿ7}5ÿÛð=øðëx“Uð‹Cwâc-qu ·YR0„„©\Í™È9Í}°Íá_ ü7±¸×ü}m¤é–º“ê­­5ã47véÊB€F0%H§åS½Ö$ |ÅÇÏÿ²%µ§ˆ5O‰ÚŽŸméúŠ£Ð´[u¼ÚÇ-qíÎdVØ1Ï8ô‡Çm_Ãs~Ï^"Ó×Å_ö ÜK¡á•­mH»û*Ož°²^O$hrÓFÍŸÜ Û 'RMF×mùë²íÛn¾GE8ý_ ~‘_ð~ëþçí“®zñüi¤ÚéòǤ>­^Ø«››©åÔ§h<ÖœnÞ(Üã”0óÜ—Zv—Й'ž8D¯ʲ#:=²¸9ù¼§MÃ9æBÞ¦ºÏ|Eñ‹oïQ×Úù&·[õº¹™ÚáíüÛh¢R7a"å^2ò;7xßÞÍus©4*,ì¬5Ͳ\™CäÜÅÄjß ë!ã€CsÏeÓ¥Fÿ+­_W¿’²×ODì|5jØ­uO]vµ’µ·»mZÞ½Ìm^ ]&k;ËûY-³ehía™”‹y¶ç‘‘!cüN¹9Ípž"°Ób¸¼Ñm5«‰"Ómz)eeu]Ãê[utíÍÑÒ­l5ÍÄææã}×ü{?—2²2ö¹ø÷®.ææE¾—ìz~ßôx£X׿ùyf'>§8õ¯ 1ÄFQQ¶þ½¿+«[º·‘õY^q¼¹¶ô·Åç¯W÷ÞýéêÚt¨É|8V“k6ݪŸ(bÏ^´$3j å s$sD±Ç4Ÿ.4}ÌÇÿΡ¿º¹º½Ê£l’+¬9ʯ?áÅlØMZ"‚¾ÕVŽÞeÃa×§OʼÒ§ˆ©>]<Ÿã¿Oó^Wú“qrûûÁÿ#hÚØEöˆ­%…ŒŒ“ÍeVhâ”$pDo>¸ÕnÒ+kaöiCHC‰ã–RÒ+ug q„ÍGe hºŽ©1UhltõI&‘p¶Ÿhul¶<å}¨¸µ»µŸGYS÷ÒiÑý¡ 6ùs”Éç *b½˜Z2æK×ï·ã+ýÍïsç¤ù´½ÓÙÿÛ·_tm¿uÒÌÍÕ-£—L`¶Ÿg¸P‚Fi0Ì|†^Ù#ŸÃÖ¿Deûáìý k1 îï¤ÒnöZÛ‚©s$’°¿…QîOzüÿ]2êçÄGmoij^ª´7Mò’ÍÔûe!_¥ÿí,¼e{ðßà•«ê6·ÒZÙÛíh-mŠÌ3€Iýö¯[-§U*T—D•ß­ÿÇÎ*J³£Fí¶íæùRóï÷ù]~Ï>Ö|)ðOŸ]Ó>ëkCíÚ•¯˜Éb0‹‘Á!q“êkÐtátÜI–ÝÛuR—V‚Úä[Åùi…}piG$lˆá¶“×¹ð¸ìG×1s¯7»ÓÓ§à}þ <.c¯*Kúõ$žèv°Çz~4ëmD§‚ ãÕ]î#Æ¿‹ÛŽ*´›fÚU›w?0Æ+•rújv•“5þݱþò?›øqœSO—œ|Ëódtª2ORlpW©Ýš…îå‚mÑÉ¿œoz˜°—-·5n †S›c» ôjM/ìª'mø‘*±YQ\ËqæFûßtv¥˜É‰2È6²þ?‹ÐŠråÖ×<¿ö‚›Å·Ñ4:Í,&UÈPrkç]kövøýâ›åšß\’1¾îÒHǧá_gÝ]ÀÄI4~a^OÊ0 V‡Ä–sªµº«žcQÛÜûÖ?V£~i\´cZ^ó²>5oÙwãn‹¦´üó|¸ù™°G¡Ít? >x÷ÃAnﯯ$^›·7 éŽÕõ§Û­¯¡ÝQõù›Žif¸´Š/*ÑÓwVqZ(ÓRИàéÆWMéæÏÓü3ã½Ë ò!o—ÎàJºŸ¬µ%i5ÇWº“…ßAŸÔW©Hî$fÝ¿v~U]ç_j«‹f"yfÜÀݨÇëYË–/CEN4üýYóÅOÙ§]ÕïaºÑHþÉþ­£Aíϯ_­v_ >xÃGÓc†þášT9}¹ý3ë^­ªZˆÛgÝo›pn8©týIôض˷…ÇJ©Û–îæ4ðÔý¿´¶¦m¾Ÿ~Œ²Ý[2˜Úzþ}«FÆÊæ¹G»;·u¨bÔdÔ.Y%F1¯ÍßùÖâê––Ö ›U¶ç î•Leè¶_©ÑÉÍï2/ ø‹WðljíõÝ2SÅžM¼Ì9BÀŽ;縯ڗösøoã %ý¬‹´Í¥æ[®/®ÄecC×=s¼óÏ ­¥–êöý„ Çä-'@8®³á†‹gâŸØøâöÞHõË¥´eŸæ “»ØðkªNOy=ÌÝ(b!Ë$¼¼ŸsñgÅ~2›ÁvŸlñg]'Zk=bI0<Å•7Æäq뜜db¸_ÙÏö±ÓþüI³ÿ„Œù¾ÕÕíu:5ÇÀýÓ†`ãšÝÿ‚¥h_ü1ûBxóAø‡à¨ô­B?ïºû,‡c"å"m¹û®‚6óÍ|£qª¬Ž»wò¢º1ꑊåZ4ŸßýXñrܪH¹Íê›^–_™÷ÏÄ„¶ÞÑ|K§x¦òïÄ>ñ˜—Õ¬¢iSq˜’•@å¶+…$d TuÿjQüÓ_ìÖÍ­ Ç-ÞŸy2•†Û"àf6!O^ ¨àœ<5ñ_Áið߯}y¯xA¤—EHïd]Ö çwð¬q8AÏ:æ¬iÆ:m®áJÚ6šJó̆ã÷(ú|—R•Ž«ÁÅ}FKˆkv’Ko5÷µw÷'Ÿ`êaKK6Õ–‹õÓÏcãwœÃq6”¶Ed‰Qwptøï~½*éÔl/ KChªZ6o;wÞ8è9ëÈÆ9®ã?„-tˆO«Û•‡Mºýôrùdó¼«ÇpGn¾Ù®CJM6òdÒî#1ÜEpÑ«/ü´RÜ2;ƒ\2öÔ+:o«²]ö·M.ºù]Bµf5ã{Zú_G×î{ö+kÉm套úM¬˜pÒ(,Œç#¡žŸRð¥Ôö~ ³ŽÚX£i®#C$ÙÚ™qÉöÇ_jûWö,ýƒtÛGàÚ뾿û>µ§êɤx’Ö,Ÿg‘ux›†ÒËón\üÁ;ùâ×Â|øƒ¬x ÅÚMÄ7ÚN¥=¤¾t%w<'æë×å*ßFäâ¿sŒŒé½WNÝmßfwájûjR§R6½Õß[i~Ý/ú÷š$–÷²ZCy³HÛcòúJÂVOÝ·¦ñ¯Yýžþ'ÅŠ:_ÃÿëÿÙzæ ÓÂ;'ÝþÕ¶;⌰9]ÿcŠñíx"†)îÖDÌ™c—nvþï€?àG?zìÇwªxOö«ðDÒ_Ûy6¾2³ž;©ç ³È€‚ýÏ~=«²•HºWŒ>+.öº¿]uMëéÔʼeí#Kk¾×¶;i¡û­O¯aXÛë÷°ÍªÇ§Æš¥Üq•I'7²Ž¸-“Tìï#¶³hÜ7Ëʳ·~ÿÒ®ë²Ç¥êR âÛZFùˆ.RÔÐÛ«­Çæ/0Ùí^¹§}©JQm§ýt4´ …¼‰ƒˆýIÛ‘ÅTþÖµ‹S»,‹»-ŸJ¯£ß>’ÞTj­–Ãdp=±ëRßèðÝBײN±’Û·oýª=ÛjýJujJܽ¼K­»€–‡(Íò£¦x¬«8î&lÀ¹éI|ùK¥½zûÔÆöÊÂÛ33H0»T}êqæÑ39ET—4ºXi·WåÖ5ãªî>õî—qç}æ*1ƒÅ\´¼s§ý¬]ìùpcQ†?Z5‰–îÒ7µÍ¸’¸Ç×ÿ¯S düŠ’J+O¸Í³JŒÍÆGAøÕ¨#µ~¹ÆXð§ëßô¬´µ¾ºÔvŒì8Ë–÷ííWu†ÂÙˆ´…½1‘ùÑÍÉ$ɧÍ-{êwÈ’}–;‡Þ_^+®®‘ŠÉtc9?*¦îþµ$Ú¯‡´· Õ­íÚ^‹$€j­WL½—í7ðIûŒ²ERš„µ3“”Ÿ»-N§û5¬âY—†\S\àŽçå¨ ýÅô«fé÷³ƒÊ‰Úæ ‰'#\w©“”“±²i-‰-„ðÝ,@d3wÿ¯W¦Ž1&%CŽ~ïÕKå”y™ùº¨5tE…Y\0mß{Ö¦Z•Nñ½‡@`†-cfs÷÷pªrG5ÄŒèÜí«ä(¶î1–¦Ž9¶ù_SCò"5Š3 *nÞ§¬z °×èÂܪ·~œTpœ|êÝñ÷zÓ~fÛý*¢å¡Z^ã¬g¸µm‹.ìgò¦Í$·ÌÎìTô?/_óùУ›÷ÔÓ£TI #uJrîVœ¨YÚMÝ›~\â¡·ŒÚ¸Û›i9ô§YFF~SÔQ“'ï7Õ- åL½÷3ü1oösÖ‹x¯à»Qßµ·#ž½j¬Sʃx?v¦RG2²¶ÒÄ`úRû6lŒ÷oÙûà§Ã_‰ZœOˆ"Ñî µŒ×1ØÞ|Ï©ÞRÌÀŸõp"ƒÓœg¥s^ ñ•ðÎËÄÿ¾ ÝhúŽç{ªßE*‹tiC &~qxg­|Ùûqüiø‡û8|¸ø­ðï^û-Ö³w“xc·>gÙÌR|ªÊ Q¸–aÑÜWÊ^ÿ‚¨ø¶ÎöóÇ^øX–þ³·:t±©ò—hY6«¨',UÔçÈ$÷5éàHYÉ]]5åm:5ÙµæïëŽ7N•¢âî•Ý•÷Ðö¿Œß´Ï I¨sW‚ÖÖk+Ù¡ÜÇ íøÁQÆxÅ~üký°®þ*j–Ö~ µ¸´Y­ÍÆÑºg Ÿ\‡é\_íû[üEøóâï%šhlmàU¸d–fgè_¼ïÂòǦêVzòªCŸ˜ºsÎGC^Ö;2•YòQÑu}:“>vl§[¼ã½wü-øŒñ.›qis›ªÌÛ•¦Ú [¨€ ôø+—í…áÚkã4:æƒày´ûíÙí.­ã?¸…IáãAèxçÖ¾-³ÅÜsòÆá¾nø®Èb«aä­»·sÅÅe¸<Ê2jö[>½þîÝÑúÉû8øÃIñ,‹©,›EãFÜãå Ô}?ƾÌÒ•ôß YºBѬ–é$‹Ž ÷¯Ë_ØûãÃý+OÓŸTñE¸ûVÙ.c¸m»fÝ’¿N¿•~°ø^÷Ã>,øq¡ëZ4±Mms§DàÅ&B‚1€}3ŸjöóD*`Òo{5oëÌð²Ëë§'¬nŸÞ¿ÈM&êÚ{´Z£2²±ÆÜ}~•Œú­ËÞ‘$o›,¦==¸­c³c[¶*µZ8ÇÝÏN*Ͷ ØdÚÑîËH9c_/yòÛï>¯Nšu¦º¶Qg¼^[…ãÖ¹ÍF=x@ÓAjÙ\î+ŒÿžµèºV…ganÓê<žž¸ªÙšv¥ª¤ Ñ`±_ºyôÍG4ªJÍ4Ѥ¨Æ1\Î÷üñ?í!®ü;Ô–Ê]>y·0O1FTdñ“ØW¢x[ã@ÕtÈoV ‰3Ó>µÑxÿà…îVMBöÚ¸Þ¾X8lðEQѼ ¥é¶žEVJ'NQM¹ñ†"Fœ´ôªü^ÑôöŒj Wpç9úq[šG´MGOY`™·tÚWµaxŸádž|Cj"º•mÄgçdb¶* |.M5×ÊÕddÙ÷än÷ý*½ø®k¯ÈÖ.§´j÷GEqâ[xÅK±ÆæfíÇj½g#jvþtN>QÎ+T°[;D&í˜]ǯ±úV–¬é:V›Ò[e±ó¶ ÷æŸÄìÍT“žæ’´ÖÄÆ.N0cv<ûûTr_]J̪F~é^ôÉ£k¢—6®$ø—­’ÆÑDó2³©ïíõ¥{t¼Ò±ÆøâBj¿SÁÒj1ZOö;¶†GýVÈ‹žÀSŠü¡ýž>!h¾øÙáÛ{k×·hu¥k­bÕ‰khœ“8 ~gð v¯Ö‹zF…¢x[Ä8µÑ漺O êCkegæK<’[ø ü$ŸÛ6ž1½ðõÄšÜv³jí/“‹ ¨;NIߎ ×µ–ÅÏ (ÞüÍþJËO™óåOgˆ§)ïU—šßÒÌýý‚Fƒ©xgXÖôÝ^ãC×5Oˆ××>ŸcM, • ‹T)‹cÁ›-Ó#ÒÿÁb~9§ƒt;ƒÑ|Y¼·ñ>†ïÅš-îž]4û™ç+½¨p1#E$ÓWwÌY‰:ðLëñ—UðÞá[ ‰//ÏJðý¾¡âmCV—v\NÂÈÛÚ#ùI;¯ø£ûü8ý¢>\xëáçÃ[Ï ø¯AÒ¡¶·mBEòb-%Äìù¤~™<“ŠÎX¼<åÓ—+üîõ¿ü cU*Û+Ý_®‰%¶n¿©ùé 4×ÖöÚmå”’+C>««©Ngtb.{(ô÷>Õ¾–í©ý±¦.×m§–}ª%™¡!÷yÏÐV|6Ó-ìnÓHÚyû<7×yÇÚŠœù+Ž«Êg¿­hjÚý¯†ìn–ÂuûWÙ|Û¹ ›¿}+dÓî¨ =3^Æ÷tß3Ó¿Weÿ»÷æõ~N"R©Y{5«ÛÊï¯ßkZérö²á/‡u?üAÑ<¦³Mu}¯«Da‡sù[€wéÑ@géÐWë÷ì{ éš‡Å½bþM?³ø_E¶‚ÏXµE_´ÌÅÕ×p ‹’žì+óCþ ¾ö£ãä—ÚÄ>_Øô†%¤UÝ. ílðN0ë_ª¿n`Ѿ.§».5)Ëm›ýb q×ãžp+jÕ–‡ê×oY{«ò·æûè§íø‚4´§«û®¾Z¯™ëš…þ‘æ©3,Ýb>õGc¯Kzßè3G4YÇËŒ~ y÷Œ…¦«eoâ-{Ä¿c³ÏËÊS®¿Jé¾ø‹Ã_Ø¿iЯacb²31‡lÿJüþ59ä“_{×î>ÂRýãW_/ò:›½F;7ò\F¥òzç=ªŒ7/wåB›ÚNNÓÏÒ¹]câψÈȯ~aóÿ*¡ª|DÕôÝI¯ôø³M»Œ€©>¾Âª¥[jFQ·Ï§cªñÄMÃ×°ØßHÞs*2ár*XõÓ©[¬öÑmÉ ¸Ž‚¼_øƒÆ:Þ«ªipË%¼œ[ÇtHsž«^™ xšãû1*[ÀÒrвQYÆRrwÓúï±4êÊ[íÓMýNâÚüØZËwqµWoñå}Z¹¤ëjVÿhû8PÊøáyç?JóµÖ|I œ‡NÕc’IÊÁŒ~Ävªö^.ñE›¥‹ÆŠJ«Ÿõ;wÉæ‡?~ý¿¯ÌÑTq¬ÏNoìÛ¦dÀo› ÊߥsÞ2×ü1àèšmNïÉUVeVô×!g©xæk©eµO›gʾmÙû¸è>µåþ:ðOÅ¿‹zƒi¾ šK8ÕþWŠ÷úóøÖžÑÉèaR¥Og¤]ÿ×¼#ñ‹Á ÖµP±ÈŽfùQO§5ÔØ-ž¯ª2ÙÝC$`e[Ìz}+å-wöXñ?…’мhÖ·Ǽ,’ù8Ûžx?¥2þÚ3Á:7Úôﻲü‘ï·O›Ž¤çå¬ýîfíÀÊ8ŒE=*Á½zßTxóÅÖôÖ–êò »rYyÆ=ëšøñ_Áÿc&×Wr³nòûb¾=ø‰wûax¾Ë:Ÿ“åí'÷lÜ{•=~‚°¼§üiøq{žëpo5&!VI„jyêª:~4rÔÅ÷iþfRÌ'íy¹ZŠïæ}Çñâ?…ü/§½¬:ÜrL©–ŒÌ7uö¯9Öþ;jZeö–m%²‡Ä*_pö>•áqü.ø±kâÑâ_Ouu—‘’ÊþÌߥwRø»_…m|&š,Ó\7Ëþ¨¨EÇh~4›¬ýÑûyI·+ÇÑ_ô=[Fý£­—I†MNÕ`’DÜ©3|Üä`ûUæø§;Mö—)$-%xþð_OzùÓâÏÂÏŒž0!Ñõ1nªÛ[hØ n¤}j_| ý¨®­¡´‡V¶‚ÇËĈNÑêzóíIS­+õÓúþ¿¾µˆ•Kr¶ºmÿCÖþ-ünÖ-<>ÑøGM’K¤FѰà qõ¯/ø1ñ§ö–·øÍá?jVǧh&²¾ÔðÒ[$€Ê€¤¦G¶kÓ¼ ðâ‘e4ÚʬÞJ……c„ílûœ÷ë\ç†>üMbúêÿ}¬·8U@á?‡ñÍE8Í=nØëF¥Z¤¼•¬¬iÁÄŸ²ÏÃ_ÚCÀúí{û>Ü[éçW€Ë«Çy'”º´ŠV8Õ óCeBp8äæ¿¼M§êš^±&•®[I öªHäc/0E~É~Ûç]Óü=ðß¿þ#E7‡|=¦ê-†Ö2$ÎÛâ”0Œ€ Éç¶ |ûzüðì~Ñ~7øAFd†ÇYšÞÚO.Y¶dÊò7ñçåǵuEÔ«FNJݯ›c§^4ñ®)hß–í-~g”þŵO€_´FƒâË+4ºµ¾¹M3Vµ‘sçZO",Š=ñ‚=Å{×í!m㿆Ÿ´\ž Ô¥¹µ±±i¥Ó÷(bñ´Ù1«ÉÜäb¾5Ó£™®àSí¸i—ÉeÎålð}¹¯£ÿhŒ~(†òÏDø—hÚ†©¢@š}Ƭ·,­©ÆªAr8Á=ð5ëd¸ˆÑ‹SvI¦Ÿnÿæy|EƒxšPÜ“VÓko®ý ¿Œ^.Š(>Ñ«[u S$ž›qî®Ðá ¹SÔLäúŠò-.ÚHuofM¿hŸÌ…·r­¹€=Ž1øÖÖ£â;Äí‹íjNdmràºÀyÛ“÷°sïÍsÿiþоµðÞ‡$’Éq2À®Ãq;œéÓð¯O‹£*ЬŸ2[-/}?®^ãʰRÃaÝ%7¾ö·ü?«¶›#ô'þ ïûC[~Ê¿-|1wk5ƧâKØõ&Ž4Üc0`tÆ=óŽ+ þ àÏ~ÔÞ-±ø‘á/†˜Öã•O%Y Ômòù’ €\|œõÂãšúKáßìcð¿à”úv»«K.¯y§ÙÛÂdhyÕp3Óœñ^¯sáM}jcÐ’3¹Z%òÆ¡çúWÏÖœªby¹µ¾Þš~Ÿ­:xf¹¥³Ú×ZßÓusð†âÓTðíÄš³cqk7ÚÁ‘&‹n6’§ƒÏ\ûqSÜ=íƒG¬Ø‰jMnCqæ!êGç_±ßµü¿à/í<Òx‡]´zÓÃ’YØêK¶8'ó<ÈåuR<ÎK)³zâ¿4þ6þÄÿ?g+O›â„‹¢³Keuk6øÁWhä…Èû§8õWã¾+ ËZ. úwþ·õÐôkV+Jk׳¾Ÿ-–ûj}ñãÚGâŸ> xsâ´°M¤Z^hö×k3¤A~@†â~SÔW²|/øßàmá}¿‰-ü@·Ò,?zÜÆ2pã^/û0~Κ?‡¿fO ¿Çø\µµ†O³é÷SÊÊÖn¤*Iœlt,ÁvŸùfë]rüøuáï†Ð¾‡tÑÙÛnk[Vl™sëœ \Ø‹S”¬µ¾«{-:ýën‡ 5ˆŒ¥4ÖËw¯¯“g¦h´ûùV+“ïÈÌŒ ŽÇZä¾6üU—Âú óÿÂA Mæ/ʮՕ§ü>ÙXÏámz;U´d™#+ÃmèHÈÅgø¯ö8Õ<{g$Z¯‰IÖ<žcm ÉûKòÛçý_©u"¥6’üàÿV:Ÿ†ÿ¼âØ4ÿ Üx®¾š%8ܬߟ֤øÁñOJøkâk{;Y/•° ‘ÆXêOø^£þÆöúv»çÙxžÊ3o&È&ŽbFÉ~.•ìÞý™u¿ Eö­sYŽE¹ùRêY·ÉE<ôö«÷¯Ìšùoþ_3:rÅVŽÖóÓüú›–ÿ¼)s¡}¶[¸Öá¹û)fÊžý«”“ö®ðÄןٱ]4¾D›\B>UúšÀño¾xIµ)|Kã× d\,,ï"Ž}úšòû |ñï‚/´O‡ß5m#Tv\}¹@’-Ë‘ÁçžÜT6䬚þ¿__¸ÍÖ¯ªûŸAê?´×‡íçŽ×M´iDd±¨nƒ×8[Æ¿>Õ/B.ï´4{ŸqÏW“ê_µÆ®¶:]ÇÅ/ h©x±ùÒI  ôwá½vã§jáüMñŸGñž·>µ¤~Ó:ºÆÍµ£°ðÒ¬1·]‹ÀÈ=ëIBqøZ_Òþ¶õ9â½¢´"îºÚÿ‘ú«½¸>sÔð²O"îñÂÕ‘q[›vÒyÍ:fI-|ÈYƒg·4nþGµ~æÚ4vê¹ÇÝçµ"]E¸çîó·ü+jLÖëÍÍŒnõ© •%ÛÌUÛýî¹¢ìµ.m•$`Bbœa%ÿyÿêªPK4P‚"Ü5'Ÿ:üò¬¿ÂÔh>bÛVUVÿëPÌ‘«+/N•Iõ¶â>QüóQM|l®3p?vËòºö4Éçêi  ç¨ãµ,§•?£Ü®ø÷&Ï™×¶9.dD2I#FňUl¸•.QI¹š-KDûü5G4sÁÝ$%—ã½Tk÷¶µûDónŠL©å}êݶ£u¥ÚYɨÈÞ\Ó'ruBäzòOáNMrÞß×õø„r³bC;I•eþî:R¤Åää7w&­jWš‘qq¦Ú\‹‰#›|3F¹Y"nü.ÕJÀj—–ööòZÍkjÍc´J€ü3YórüF’ìž§™~ÜvZ§Ž¿eørÖÏt¶2CËœì8rû§ò¯Í{DZøGT›[{ûˆþÀ!³·†ójHfйBXä‘‘šýwñ·‡´=wÁ·Óç36­¦¼¹+•#'Ü“ùWæ×Å¿„6~ð&³ðÎâÏíž)Õl¬#·ºWòöÊ +®<¤Á΂3ŠîÂÖŒe_ºözþ'›Ž¦ê+ú+Ÿ ÜÎd¹håŸp䃓üéßÚÐ]Z‹+ßÝÇ·²¨Ï¡¯¾?iŸø ŸÅ?…_ 4¿Ž³¯Æ­7ân‡} qyáûì—Ï‘íö–g+'2tsŽ•ñÅ_ƒÿ>ëZ‡†¾%øP³»Ó.)d’ÍÖ1ƒ‚Á±‚¤ô5RœêSUaª’ºkUo=nº«5tôg¡ì⤢ü¿¥ÑýæoÂ߇¾ øÓñGCøiá«v’û]Ô¡³…TdÌoÀeÒ¿~¾üð÷ÀŸ…¾ø;àõa§è‰f`s$ƒæw8xž~¤×æ—ü»öz¾ñgí ®|P×´&TðÞŠƒO[˜HÍÍÁ ޹-IÑýëõ£Å"k]í’¨I£L«nÆæÍy´}ê’—U§ùþkñ6©+ۦ߅ÊY³»šàmA¹Ž$ÎAÈ5Æ|V¿ºðÂkPHZßKíæºÛå£cœöÉ­;-rðÊÑ,II÷•p0G_zÍøÅ¤]럢©èÚ>“l“]\H–ëý×`0=}kž2udšz{8Æ;:^µ$³-­å–]_hïŸÓÖ³~+ø[NñÆ‘ “Eqm4,]dŽ,|Nðç‡þ'Þx~mkÃ1åtÛs%Äí$ßgT†dˆ)˜ =²0+Éÿখš_Á¯Û;â'ÃÝm6âïIñ"¬2[Ænb-ä‘$jòÚˆÍ÷Jä¾{ õŸø"”:·À_üNý¬¬ôèæº êª$ž[h÷Kj.èI‚ae-ùФ…g ÉðY­ø§Åº‡Œ5nã\ºÕ¯c¹Ö5{Ì´ÓÝK—nbI$–ž¤^†_R­(Ê£oVí½ïÝ.¿§ç–*ޤ•8ÇEgåm_=tÝôî¶üO¨XkÚ^¡6¹©ÝG–· h 7Úo…  s~€u5Ëë“_êš²ÝJ~Ï Lͪäóñè>N>‹NƒTyín…ä«'™tL6ëÔ¶1œLV§Ã?ø¿ã_Ä-á®kq4ÚÖ«¹òc,çsæYà+¹`šíÄW§ZNúþK¿ëñ0Ááe‡|ªÚièš[wÛWøŸqÁ:?à˜ý¢¾iŸ¼Jû†¹¬^ˆ¬ã•PGJÑ¡õ'ÌËqÐ ûûá7ÀŸ…³–‡ü#þÓàÔ4ûŠ ¯,ŒÈÏ [œ{šæ¿gmkà mì~ |4Ð!Ót]?³YC ¼“ó’Ý l’}Mixßâ•ÂßxWÄtš­¯>m±ê›±¸qÇ í^#0›¦é¯’ÛúLìÃѥ̫EjÞîïnž_#Òìí/¢±ÉåÉ;E2œ†*Š»°Ú1ÑA¨|eáÔ³¿…/¥V›É·–hW­ærÙ>] yäºF§u£Ü®¥e$3FÙ‡Ëì}k®ðïÆâµ’ÓÅVŸjVo7ÌŽ5/#„ œaAçŽâ¾³ajÒTë®Wßuý\ññ.3ˆupòæÛ¶ÏWÓ§ùýì÷ïÙ7ÃÓßk×¶ÐÜj·¸ ¹x6Ydܧ®`ãžkôËàΣà½OÀÚ=þâfUm-%fU-ºW剦IÎ;f¿-¾'4A±îäµ*­½Ÿv7óÏËú×êügÄ~&øùû0h:•ˆìí¤ÐnîtÛˆö2vGßsв²ôî*s¼ÎŽ#-§‡¥­¥}K?5Õë}Lòܯ…Í*bj}µdŸF­o+Ytô=¯Y·Ñu[i,|yâ›Ì-å®Ò ¨?xËšæüaw­|9ðkÄÅlBæá—æä™Nz¼Õ=z?Ú o‹Ðø~lÑ,ö‹ËÙ£U\‘·'ŸÆ½£Uø)à›=$ÞK+B²F$¾’Þ2289 Cô¯“žq’wÛ§—›ßNǽJøˆJ<­[FöoÑþ¶<‚Þ?¿Ó,üSÄ«¸~ÐÛ|ûÀo¡­Èþ üAÓìî_Š—Óù‹¹ xÂÆë»;×}aàÍ!~!Ùè~ ñ¬ÑÍb«qok4yŒŽŒ’:ã¥u—öt¿Eoâ(tû­æß6²G|©7+ãœg½?v¬•Ö›ï"©á)J7å×môüÏ–üðã}—ˆoæÓ¼Qk r(ÉìÿP+Ñ5Ùûãf§àèWIñÛµìüÿ£²†‰‰ç*ßwë^ñq®ÙëÖf ¼,¶7v×9# ®8~?‡Žs’+6ßÃÚ‡¼Cs©øzè|Þ\· ;~ï•è2>`JJ1—õo¸>§BšI]­zÛÏoëÔó[oÙO㇀ÿ²uËï]\[4?éÛgجF0k®o‡eSíÑë“E¹ G$ž¾ƒ‚9®íµ}qï ¼²ÉynWtp‰Ž€vóÆzãƒÅgh>)Ч½k”å?{¶—Óóîgí"â¥mÛïë§Ÿõcºñ…æŽÙmtvXäÉûE®Ñ—9äôâ³´} ÅzD’ZÃ|ÑÏ3nHäÁ*=·Ó5ÍXþÐÿ|5­h6Þ!ñYÒuÍrim,ˆ‰…gd8lœn ÷⸿þÜŸ>|i¸øy­k…NžÞV±¨Øæé¤# ›²Ã‚TtÍcõŠz©]>–wÓN‹úò*R£ìÔï~–óü×ÜxšËÄ׺eœ?ÛBáÏœ½¤=pIèjKhüùn#X—C¿Ë-·#zkå¸à§±ö§¨Éà‹/ˆšòê^î?´4ÆŠxñŸ0± ×µcËûGé>#øÓ½ðßâìÓévp®ëKÍâÞÉ_*/™xÏó©uï¯-½o¯Þ·_›±Ô•ïçf¼ÍoÚƒÅz7Œu]kIÔt›©t ØÀ|W®CkçŤ<ïû¤‘Fd*x,Ê¥TH¯iÿhšìõâ?…gź~¡ý×Û×Q´µo3H¡1H‹®77,@cš÷ïÛö°ð‡ÀCñþ·¬iö±¯M-ÏÛ<'o ­y”âËP‚b<„Ùònpì@8^8üýý¡¿h¯ ükºžO‡¿ ìüoqpnµ ;M˜}žyR bÚ¥¸^&ºã8í®«úWý59½J²ç‹Ù«½-òéùúœoÀm Ö|CûDê¹ýuoéòxvö J÷G‘cŸH"X¤a嬙TžFz×€~аj6_¼Eo¨j77§2­Åõ©Ž`»ÈU‘Nv¸Ï$zZÓ—³Ã8[Vï{zT§)æP›z(»/?éœ '½{/üÛá“üZý³>xUíÖ°øŠýAY‚¨¶¶o>BO¦Ô¯t1±R+ê_ø'÷‚íü7áü|¹žò;ئ]'Gòã"=¬»î$fð<´Àë¼×[…NgÓóÿ‡;±5£Fƒ‘úiûXêÞøõ¨i_´O‡ôŸ ø5–i¬u+›’ÍrÙ;6ã'8Àæ»è?hÿ‚>,†?ˆñ %ŠGº[É£*b^€á°F~+äÛA¯%¯Ù>ÝÝ´Áîäm[T°Tâ‡v$÷5Ÿ èsh~eÛøvöÖML¶Ÿuay®Šâ):6Â8Áä1Ž´*‘ö¿Ÿß³ßÐð~³‰¥)$ïëv×ktï²Gqñþ A¥éºçöÎᕼÐìõK«ç¿TóSv>PÄnŽƒ“Z—ßðQë/I.©?Á.•e² 6âåax·q–}à~¼w¬_à‡ìý£ø²ÇÂ~0ñW„ïæµÒÆÝHö›iH ÄžíÈ\úýk#Røkð÷Ãz´>Ö4»(/®åŠÞÖÔ˜,°Æ>cŽK®j~ÍZOä×èí~ßð ZM§-nïªjëïõ±§©iv_üW.£}âN)#ºŽi ’á0ÇÉCµëUü5àÚŠ/êž1Ö¼Pº–›cp¶ö: ŽÍ· qˆW$gŒ|Ü×ñá¦èËá7QV½ÖµE‡íZt/ !Sþ³x\tÎ0=kà„|-ðOÄWÏyo®ZùrÚj\êïqÑåÄ{~ü qÓ9¨„éF<ËÏ}›íó3.^iZK¯ã¥¦üñkQÐì¤ÐücðÿIÑõi×2Zµò²ZD.ì¼Ý{šóïŽ_~*_xJúÓá§ÄEyo 7WG÷%¸Q¸EÀç¯/›^øs¥·Ãû/Êͬj+n¿è7%§´m \“»@zÕ¹> ý“ÆV:–¿s|ëoo"[¶—pÓE!<qŒn¯§sJU=«³WÓ]þåd¯ýz2•YA[Óò9/†>ø·CÕî4Ÿk—~.‚cZ­ÌÒyp´c%Ò%'9Ç~j_¿·ž¹ðóÀ_„lþ'i6zòÙG&¥ö«9^kbÄâ4‰{ã’[¥zÇ‚>üxÓôßµÉá+[?°âõWK¼HäIÀ7.ÍÇ,쨬ÿ~Ë>—GoŒ|¢øÓRÐá¸þÍðÝ¥ºÃo¨Ï(Í–éÊ’‰ØÍ禚ÕuJßu•­¯ù>¤ý^PŸ¾œW¢Z~¯äÙòŸÆÏþÓú¼Ÿôo‰÷ÚjÜ4—ž(ñEݲ@‰mà(NAcÇ$uõ³ð÷¾ø4º—ÄkO6~ÓïíJ+xƒmô×›1·`Q¼#*ýkè¯þÎÚïįß[|dýž4øfù–=×Ã3[²ˆÀÉWhÃ,ÄìAÇ#ÎÚÿÁ=þ jŸõí_â'Š|Û8müágdH…3mmµG˜ÁŽX)õ­ª5NîéiÙžïk_r½žÑ³ŠóÝýöùgâ/ˆÿ¼i£èÿ¾,hZÛÝ KZ¿žëlß”NìÛë|#cã϶‰sûCéúoÙfXïc‡LÚ×`@“œ î8ªÞð4¿o.$Y®$·ký?D’1q_™£ó@\†Ï lã5sâGü);‚óüYø©ð÷ÅÚUî“7¡ÃktÃìÓg"2ʦ5f'°HöâŠåµ¶O]5é²¾»w9â£-é¥ÓõWïÙ~'Žüyýš¾ i7Ú'‡´_Ú&;MÃEöÖžVÖ5 §$¦ç ë•Çó®Gø ᯥƣ/íàÛvûK#-½ÓD´¸)óô¯¼?go€_²‰¿gø_þÐ!êVyŽ íSíÙ“‰Z@ÊI`K.UAÇ5‘âÙömøwy‡üuð¦ÇQÕšÝ.o.'™Cno è¤u檤ùbÝG·“ß¶ëúÜê´èÅk§—wÓð>²“TŠEK4VÎà6“ùýj½ìŸÙò‡MΦAò¯nÜþuCQ¿j6Ñ°ß ŒyÃþYóŒõêÍÍ€žëì‹rÒnåÙ[AÛ¸¢ï«èu|DÒO Åö›h™dŽ`ûXü¯ßô©/Ï•®eC; ›Ê£ßÞ°ÍÍå¿Ù¡XÝ®./ÓÈgá¤Ý·>Ùâ¶o'¸ÓfºÑoìLwVÿ9ÚxUïùT¥.oë»_ÑJZ]š¾~Ÿor ‚¸^¿¥V{ǽF}Ü+a7 Aoæ (ã¹ ¾EÊŽ¹ëÈô棰[™4æ†_•C|Ãw^ô&­§õýX¦Ü‹ZUÅ¼× Ü»Ž7{UíGš[Ù.âKr%³¯Ì<6N0çðª:l릲ÝOkö‡“)å©Á〠~5cÄZËZ̰¾ X#ûCL­·ÎˆÇ^yǽ8ÆMïý_ðwv1»èUÕ.-4­Nk=.i#’Ef…[8•G§lÖ®¤ïZ†ŸþµŠ0dg`öàEfjðMgGˆ-Ñn嵚&Ëzƒê9üóZÏâ/9‡M¹Ž5œ!>dÑ•1ŒðHÿtJ\ܷ޽øv4¹õºòþ¿2¡Çw¦Þ !iÉÛ—àqSC¶êÄhþ ‘dµ‹r@ÝY9éëߊMW—FÕ&»Ô£Ý5Æ<Ï)p Ý‚yà`‘Rø^q¨Åywâ‘BÜyí PK ŸSŠŸDÿRãgmmÓÈ«¦YG ïqjŠÛ£9UBGe{ä÷¨âž}ZÊêÊÚÝ–}Ž»$V<`ätõ©ôÐÞ-ŠëÅžÔZ;4ºϽxIëôùz×R׺‡…5kxôï&f™BÜ+“¶HÙA HèzùTûKÆëWý_ž÷*1OG¶Þ§75­µ½Ì6¶×.—q¼o¶"»¸Qœg¿jü½ÿ‚‹üg´Ö~(Íæ\Ë£kw¿öœ6³pV7hü·“±œ($‘ƒœçú‰}¦¿ŒS×®ZÅä“lRíÂïÂqŸáÎ+ó›ö°ý…~>þÒŸ ø2êo k-ô]OOQpºn¼ÞCKç(ÍòJ>aŒk²\ÓµÝ ’öÝn¬uH^5dËbDa€ÙÁÎr;_‡Ÿÿl>)ü(‡ž/Ñe¸›K»ŽoÞ4›ä°„eM±cüpxï[Ÿ²—ücã×ìÍâ­?YÒµÙµÝL«7†õë£5¼‘Ž¡2wDG8#>¼Š¹GÝ´vé×ïÛ½®éÔÆ|S…—ão×ð<‡öŒðåç…¾=x³Ã7P4RZë×,rHªù‡h$qÓÈ&‹¦£{Y+§§c‹ƒM6é$öÆ¿wñ¯¶¿àŸŸðTÿe¯…_ð¤üið¢}KImUïW³˜,ÐHÛÃ<óÒ¼çàü7ö¥ø©â‰<9«xU¼%g¬·®»ˆÕ#n’"g2'«.@îk¼ý ÿ`²ç†5¸n¿lOí/ˆ\1MkáÛKAS+.[n!¸éƒ]èáç%þ[þõ9±U¥ÈÚv¶Îýÿ®ÏÐý(ø[ûf~Í?´Ç‡f¸ð/‰Z+©-Tùw0äñÈôlà÷8ïŠí¼ÞÖ¬[AMV;©,ø‘—·qÇÓ½~ x+ã׋üöòh%º±šÒO2ØÆvm9õõ>ùÞÛããn…¾Ù¾(ø’ÖY²dX#etÏñ *©aiÆIª©Û¿ëÙüŽ_®c£.YRæó]Qû‹§•µ·mNÞX|˜d_.BêRtèLþUŒìüY­Þè¯æØÜYɈZ)‘ø ‚~\öÿ ü$¹ý³¾)Ë¡¶kãÔªîÔ˜.žSJwÁ/ÛwãÀiþ0øwñ&êfµ¾K™´ÍYZh. Ÿ¸àŸºFGk–¥ò· ‰½íµü®ÿ3ª|dì§G•zßðJËçc÷âöîûWјßD«2ZÈÉ;Ô£Ö¹íOÓï at³F7}’`váˆÉSÐüýøyÿÌñ6¿o=õÿÂHa×ï§X­áÒô.[Œ äú~µézwí¿ûDüD¾—]Ò4i4».!R–ÝOÚ[rü‹ŒeÆâ:óøW4½¥8k½m·}Ù¤±ÔcSfÚéoÌû Íâ¸äÔ¯ØÆw$pù@üçÃ@ÁǨ¯<ø©ñ{@ðŽ¿}s®ëMu¤2-Ô¬<È>^—°Ï¿zðÍö£×4K˜åÕ~4^h2¬pºÏuÆ·eÿtØÜ¡r2:ã¼Qñ—ÃÿÃxÖ,¯g³sï“ïÇJôŸ…_þ2üwƒMѾ*ê×#ÑíäFM6úÅ•ìŠqóq“Ú½£âg¾ü,ð×…gÕnô}E¼A +jñùK”“å}> ïÈÏ5鶟⢶ÃÎy®iB·+œ_–>íB—3勾úm¿—ü1íÉû^x;á÷ìý©x£ád·Ïg©è²[‹]JÅ£žÆiC¢ÆÀîù°¬ß0Á ~0j•ÍÄ2ç!vì#ÍÀ+øõõÇé_®_ðRß„ðø·ö*ñGŒ|/«èwš¦ygy2Øê1‰…ŒlÅÃm9“c¾v’kò^ÆêÏUÓ.š[(Û`-,‹×'.[Ó=ºšîÃע嫿Tÿ-¿­ ær¬ê½vÛD¾^gëGÄ/Å¿²güûEñ_‡ô øvÆëám¾e&‹­E;Þê¼¥®®® %™ÐMØQ–3íb©¼þF´Sé7J눶ÿÌ^²c“QœWKñOãÅ‹qh:'Ä¿‰7º•–‡e®›o?0ØB¨¨ª¨ s±Tn?1  ’®^×[º†ÚòÎàÛ]5ô?>ûs=¾$WßÏÊçfÜœðÄqœÖÔëû¨É|6µúy¾öþ¶ÕFu=îû¯Ÿ§kî[Ñ´ýbûPµðΑ¦\I¨\̶öö‘&e–g8©$ WÛÿ±üÓâ—N¥ñ#Åÿtÿ ë–k%ŽŸ¥Ã¨+ÜÅæÆžd“lÈHÊ—plô®Cö;ý®eÿƒ^×¼iñöXðÝGš^­¥ùÒÜiÑü±:ýªGÚ’ÌÊÀå‡÷q^‡ûøÃá/?h}KâoÄŠz¦—âk‹‰5;{=oRŽ=7Q¶ÚKZ– …œóµ¤%N¤VÕ#ˆ7Éð¤µvwOÑù[^«æy•q”¥%M­[ißK5çóºÖÖgÑ¿~ øïÂÿ muOxÚßXšòâHÚêÚçÍe“v$œ€Ã§ÿª»ÝáÏÅß%çˆ5ý"Katõhî/¦ÝªGÍÈáHôàÖ½ïÄïZéW6>¾Óü/xº_—oá[=BÖkO?qq<¨˜•pvœã8Åý mþx]UÍ¢Z´öóþµ<ÿá?…¾1üTÔµüS“E¸ðÌwØÙÏcqþ”u'øX|Ýùàæ¾Sÿ‚Õüð÷Âÿ‡ÿ uŸZM%®©y«Ç}|±ºÆ×ýœìãœ1<„×ÖŸ >0|ø…aãcÁßµ½Íѳß0Ñîô84”²dæG(êÇ* ‚rzƒÔ|³ÿjý£þ þÐ_ 4‡? ÿicÇønú+ÿ'RÑ×L³…Ú.tXó7ú°Äpår ­iß™FèÖÏK/¾zNxhòÊrMÝ[TÞ®Ýïcó¥U¤?3p)™éRM8ÆÕjŒéR{ ¹8ŽæÇi¸´dó¢Ýt?2ž2=º×éü÷}¤k:/Äë6^{Xêšmý¾ÖmÑoY‘ØcÝõ~h$SF™Ÿr¯Ub8¯qýŒ¿lÏþÄþ*¾ñ‡--uõË8íõK íɹc“zd9éБ޷…7%gÓ¹Í^Q²v¾¾·?d~!Ýüñ¯ÄHtQi¤ÚxJI•!»[Ö†ñ£ï± 9q^•§Yx‡bxBIšHÖÙ¼ícj<$(Æ[¶3ÁÆxíšüëñ¿ü‡Ã3Ñt=WLøG­Xêº|ÊuÍ5µ(e±¼¾o)¶Œü${Õ-'þ áð Ç‰çø³á_Œ´Áq<Ïy¥xwıÄí²¢?׿.yàñRèb%Q(§¯[þÓ²^‡#ÄF4µß[߯m‘ö÷t¯^é:‹\ø·MÕ&[éa·Õ4uCµ2B)ÇqÀ#¯µqú·íR4\h:§‡¼Awq¤Ú³_cZ¤Ì„60PØ=G±¯˜¾þÛ³…ô쿃áøkx×Þmå¾µ¤Í,wŃåÉ€²«˜òn3^ÁûD|sý•~xf?Šþ9׬5 CRðíŠC®h“³]M4„…Ê ÛÉì{Ö5©ÎŒ•´v]þûµø˜Çå%-U·×îO[ôØö ?â—ÃÍwÂñøFøëš^©}Ôc½¸€ÂË ù$uÞ<~dÖ…÷Š<Š|/à ïˆÿhmjê+[y¼¯9÷mX›Œ< æ¾4ø£ÿ ý‘5}{þÇ®kZæ—§Æl-ãÂÂËåí;žbItÇ$àŒà׃xëöˆøSe¬[ø÷ÅZ?õ{¯:;»»G\‚=>‚ƒA´¼„¡9ƒœtéSO RW僲¾®þºm§®šü‡S0”m ýSk¢µ–¯ï±úͬ|Kðÿ-|Wð·áé¼Óõí1ÒÞ6•˜¥“9ܽûLWÆŸ~x«þ áã-cö˜øƒñÒÏþïj_aÖt[É7Ÿ:L2Ëòä#$p=+çoÿÁDï×â‹ã? øù|9™ö«5ÔŒs^¨$«¬ŠC#r:ŸZÀý¢koþÕ Sáì? Òíáù×´²\5ÂÛ&3µCd1;s‘žw§ƒÆ9YÆ÷[Û_¿òüŒ*c¡%IY§dî´×¶Ÿ5×o3õOñ]¿Ä?i~ ð—ôÖ¶¼™‹Cp$VB ±WR@þ^µñ‡í}ÿðÿˆZÏÇçÅ:…ö3[ÜkN%»¾ßõk´‚êq´±# ÆzWËŸ~*~Öÿ~Þüøk6‹}™4ÐØ§ÚJষ|à ¾À#¼>ýƒÿlŸŠW~}×ÃMB×WŽ&¹u;£×°ì23…˜ì¨BX·?…:ymh>jÚC¦»ú½tòÓRªfÅ{°jëvž¾V]/߸û;ö{ø«¦ü[øacñ§Âõ&í†çÃze¬—wÝ(’FØÿ»9'€ ’kGâÃÏxÃZñ&«®] i¯/¢½¾›MŠH®£€aVóÀBÙà*ö¯ž¿gߨ‹þ ð.ÃRñ¯Âßéþ†öÝ&Ô­tßZÞ-’ʯˆ%)´pÄ‚8çú¯í5?‰¼I®|?ýªµ/êWöàÙMh· x™s»í 6ã´0ÏÊHÆ<`ÜrøGTôò÷ŸÝ¯êcZ´þ Û]omš¿k›´ïƒÿþ(Gãkâ5õÓjb=-Jâ\DÊÄ,ÒªDÁcg#­z×5oˆ¶¿³.“ñ#ÄßæÔ-îíÿykk ÜGgjX3­¼[T«àªoaÉ?Zù¿ÃúÏìëáïêמøâ-kOÓšÙÎÿG³‹ì·3!'nùYÕLmòÔ€ÌP0évº‡À?ÙW_ðƽ[Yâ‡öæ›ýšØéÿc²ÑÑ•ž[i˜ò)S¶2«Ÿ½’pjªR£ìâ£+´úGwå÷îúÇÛs55eµÞ›½,»ùjµZô>“øcñ>?þÍzoÆÚ?âÝ÷ÀßÙø“þ(xYPj¾$Šð C·ä]Í’ápqô&Ü?µOÃïþ3ð¿‡<7ûRÁâžây§ÑlìQ®j7”Ò4ªÌW$/*7ÕE|QûD~Õž øÕûEÝ|k߬ëÐÃYi¿Ú¡­b±ÚÑÒÞpÌ…²rÛ²¹Èæ¸Ë¯‰ß³æ±¥øfóFøk™âÈ®å¸×¯´9äÓ¢µ¶BJÛ*’UË.w9°ÂûÔG7u¿N¿7ÿÇTª{þêiF×êôï®Ö[måßôËDðÁŽÖ°ø×Æ3ÛøšT¸•4{‹Í@t{Í鱞ü’0;ö®kã'€?dÿ„Ÿ¼I­|EøgjÖº†¤ÖºÂÚjñ Šx•DVg'ƒŒ|!ñ;þ %®ê?|%ð—ৃcÑ¡ðŒ’\6¹p©=ö§r_"YT/”¨ˆ0¥xÜrO⟌)ñÖ¤ÚÏÄ]fû^¸i ö˦ØÏê{ãéŽkXòÇâ’Im§o¿ÔÛÙâ*ErÁ'ÕüµÓæÖ¯§žŸªgÅø$¾•ŸâökðmŒZn›ÝÇö¤ÐÞ^]Íp3>܆É*ÍÇË^µ¡ÁD¿e¯†^¸‹Áÿt»y.$²2\xH´°†F™d’m·3á$·=OË’0?<9§i÷šþªlôý?MU»·Ï™¸XÆs“ÆãŸáSÜŠ¡âïj>!¹i¤¹S¹B2à ÄTüª¨¼(Æ8·L³dýÚÓÓüâíYU´Ï]M¹ .#ÊŽ§éŠq3n”5êõoïþ­Ð¯gNIm¥Ûÿ2Œ)·YÛ‘ r?:ûö~øâ|·ñfƒñöËÂñ*Þµæ“$2É%´VŽà•í— Ãœ_-Ùü2ñ嬒lŽ'†#+G$ – I$“èîkÖ>üWøÅà=xgÅöñéV+$+Öím,ÇqÆFå%·9“È®¸añr§É¥{ooëäyØìVÅK™;yéøi®Ÿ¡ê_5-OãoŒ¦Ò|5ûBFÖ¾³–7^#½ŠÅïw1º&QÆI=±šú á_´ÍQ iumI^×<@× µð~XP,…# 98¨føˆŸ´»è´½/áÞžI5Ρ%ç‰áä`Y~Ì›·3·ÉÀÆ9𿆾+ê>7O³IkymåÝ|ÏtòI\}ãœíÎ6œ‹PÞß\É­—»‘ty"lÇ5½«!I1åueôéWG.ö”õ’qè’jÛw——‘LUXTåönK[ÊûÛ]Ÿ‰÷Œ?jx?Á—+á¿„f¸‡OKwoâ›y&‘ò‘( #ÿ,Ê–=95Â|)ý¿ôÍ'Ä:œá@u]uui®·ºlª©·]Èb;dÉ 9+ךùz]~[k&¿¹½ÝtC4Syž\ŠÄ‚QQ@Ú¼úàóW´ßˆ­©é?ÙÚ¬×ÖRMt³µÎÑ*¬mŽ2>aÉ9ÝÉÖ»a–a/¯¦—]üß{ÜåþÐÌ9\¢Þ›;út¶«N×>¤‡þ Ëkyãû‹Í/ö<þÏHô;­=nšàyÓÜ33m½NpEiißµÞ‹ãµ§Žü®x^öÚkWðíÄ Û‹$;dsÎì1ÏldŠùTø­f5Ù#OýMwdŽy£‘ßk(ˆÀR{æŸ7ÆOƒv÷Ú<‡Ç8Õ>ÏtË«C¦èöðj…XIeÚÛ¹åp3ÜÖÙùe8µ)¾Ûùô_𠥊Î1VP…—£kç§šûÏ¡×âÆ„ú¿ˆtŸŠß£I$Ž]ZÞêò!%ÄÝ>bŒB!î¸\€ì ÿhO†èëañâ$my$Þ}ͽƑu2Fb-ä@‚F+÷Ts…ÜIèkâXþ*h7Úë_xKá¯5 vTWÆ¿ »•ÈRXÅnî ǹ«W_ÚöÂ×D°ø[ Ï©Iq-²Mw,÷·eÎÅ »aÀwÉäý)åy|¢¹^k×Í/ë±Ï^i‡©ªá÷é$ÖÝеý±¿g½j?ÃWÿn­ì µK»ËHtYÔ¼æ"‰æˆåe,¨yõ¸Ï~аœš·†ô›b­/™y~ÞFñ‡Ø$’ÛÔdc£|£žkàÍÆž;†í†Ý.Æ FCÚyrº(Æ ’=‰àô5¦šŽ³{46šÜúdV­40Ý\éöl$E#Íò×v8'hêÍLrš<ÍÆRµõÕo÷_ïí±Ñ<Û)r_Êúþ?—Þ~‚üGý¨eß^ÞMâÚ ñ´>Æ-:ÆÎ;iVêçî¢!Q†}—'žôÍsã×À«Ý6ÎÛUø™áæðÝáK•Ž×QH®c$£$ª´‹ä 2 .¬p+óîÛNÖµKs¦E“z#¶gmkP–tû.ý§~KQ’1Q†’q[6¤Íö­+Zøuá{¥’ñÝÚMRó¬P¸.€I¹‹c×–EÂãƒÙ1Œ¹UGø>Ëñùù þÖ¯¹5uºëòm¾ú3ôá—ÆOÙÏL—U—Sñ…†™t;­/û"úÖfP3æ1wÂî\¸6Gеmñ§à6­c øëân/¡ó#ó¤6š?5ÊÍ .ÛHËcÈ_žÖ¥Ü—IðÄ×3Ån¾uÅî¥é+¹Ûª• Ãa·`€0*µö‰¡x†ãíÖWvÚ|+q¤2£ä"ï,‚ýý€Æ1Æ*哯¤Ÿ4Û^koÖäȪÂ6åZvnú÷?O<;oªA®u;{{«]JÇ0IJlÚ¥?ÅGàkbÓIùáñJ.šo³é®»Y\.v+öldŸá÷¬"ûJmGñ‰,b¸Ôí®›Ë´¸å¯6Œ¤6vŒŒ(SÇÉÍ7_IŸEšòm)¡Ó¦¾i"Ôôö B2B!Èà•RFC r |Ü}ëÝî½vZ»i¦‹ÖïµÏª÷cn÷·©=‚Ùkvú¦‘«Y\IwçDmÔ«4Ë·æ`:#Åkߨj/5ý*_Ý^ÈÒ¡Ô[’ ¹ì@Àr*(.­mî,~øoÄ‘[Þk’óZaæÇ7“æ.ìcË‘HÝŒ!Ÿªh‰júlÚíž³¤ÅåÍsÜû×Î!L±!Ülsàlô¦2æ÷¿¯+~š÷ìŒb»'ßÓïÑþ…‹ù´kyá†ÛS–4Ô-Dz|-P]íùÆþ@ÏËŽGݨõm+UÓೋ[Ô¼›Â¯An¥ØÈœ”‘W$™oB>•£câéw c£é·Öv7ÚúÆÕ†7K#":dî!v‡É¦~»—þñnã}ÄzV‘©[Ï¥Á¿Ú­.¢ù®·ù-÷‰/‰ ‘Ç'U‹[[ðè»õݯ[;ìí)múíò^FL7z®”t¸f·KÈõ¨ÇÙeHÉ0·v»ƒ›¾ïj†¬šÜvz¾®–­ghéæ\N|©ºñœñ’'ûÕÔ]G¬jº•Ì~‚úk}IMÖ£™q‘4¥ßJƒÐ€pÞ VKÝ\øŒYøÊçÄZg“q®‰­ô¸t¶…ç·ØB´‹‡;7 ‚¬œà·9ÆQåºêŸž«Weßen›u.Qæ¶ž‹¥¶òêG«éw¾,Ñáñ6‹;Èö±âO*uÞ«òʤôØÇ {šÔÖ5äñ€›SÖõ+Xï-áÀ¼ó1æ*·~ßï× æ±loWK‚ÿÅi7±ÙêWGPÒo#Q$†‰Ó÷lCŽw0K&Ò8¬ýìv:¶Ÿâ›)$³šöèÛ[éúrƒ•Œ!f‘\*Ë"ñ÷²ØÁ­9ùŸ2wZôµí}4ëoørt§=Uéýz›—wºŒš‰ØÜ_Û4)ö«{8Ø´_w ŽÀô¹àgŠ/õí*ÓY¾°Ñ®co.Íg·º¸¸n6ÒŒ‡æV\í'½1S^ø×ÆÚNŸâ RMjk+%Œê÷P¢ÞÉF9f50Ê€Nl)¬[k_±xÂÛź¬1ëZZȶÃt£—í&iÎ3å¼d€Ø?u‰ÁÈ©Œ¥)i¯[mv­Ã•»šT¶Úöo²òµûÿÃ"üï‰-ô ¬ôÏ Þ2ÜOj¬ú|‘€ãÍ*R@q¸(Ã;gÚ£Õo§ðÅÄ0jÿítŸ·\Mmꑟ&ó?*F®N7oo—Ôuªø‰á_‹Vún» øò[Âí~é©ÛéÑþóO¹Œ2î+·ÌxÁVùÀäe«I¢éž0žo &}Bk«Ä¿Ñ…ýžÎå TßÛÅ ‡ÌáÔ°nAã9wƒ\ßðZ]›³ßk7{Ùk.K—™+é£}~Iõõ5ôø—Â-ªøCÇœšÔ’-ÄöëUž8@Rª3û>é+ά wã×Å{soâ]ážµg£ÛØÉkc­iÍÃÄW2Âù*1SëÉ­½kG¾ñÎ>¿wª5«Ç«G“­f¢KÉ£C ÒÄw/Ýl`†\³ f«Û\|D¿Ö,<{­ßF΃C±Ô`ÛïdÖnJdž|‚ÅgS™E»[«ò×UªÛ¾ÊßyMrÙ&þ_­ÿ+£Á~$?í‰ñ›Äzǃôø|M¢è·Ì’¥ÕÕŠ3]º:« ç÷aY¶–ítù“rhþ"Ò5[t“Ì8’)#þ%ÏÞãÞ½ëKý¨ÿh/x>ßÁ~)ñÅÍŽ¯ïÞã%gãj¾åäH¼`œqÖ¿@_†ögQû7|Up׆믚e?ìägóÎ+õêÙ?öf½ð—‡þi—÷Æ—W—wZ+¤º„30XÅ´¡B¿—´ù‚=Áƒ/ As_ý?dÿø Ô7ÂVÔìÕ£Õ4¹,^ÃìʈÁc–VÀ;s¸‡'$dUSÆå‘—/#¿N½žªé.úôÝÜæXLt)ÞŒlµ²³ù7vöí±øúžµÔoäÑ´ë™cÓa›åšòcèYv‚NÎ08«÷¿á³Ó ÔÞhõ(üÓ3G1Líþ¨¯×_ˆ¿²ŸìE§Ë¤hžðÿ„ã¸k¯µ­C\™I Ë¡EÙ°§šB‚(X’Õ{?€±‹[®—sáÏIncu†hu»U‚+”ÂJ¢~’º69ÜHV+’:c˜eüªrƒ×º[n­¯àc,>;›‘VŠ·[îì¯vµÖþW?)4c膥jžhmŸc[£µ\Ÿ”nQŽ{Æk¡Ó>xéÙ-lo!XÖ&hÞa¸1l”©ç#¯zý,·ø!û Úønú;}?Â1êâÜK PøŠÙá2ä³Fc.Y”npx` ™i¡Á<¯t‹-/Ķ>Yí½½•¬9®Ÿq+æ˜ä*˵†H$¨\0ɺiæxov›%ëýXá­„Ì·–)+ôR~›k¶ÿ©ð.‡ðkEð†§å4þLÞo™k47XxÆ*0z‚ v†ËÆš¦Ÿbo>'øŠóPðùb4û]EÕm”DÄf#yÉÇ\×Ù^¸ÿ‚ZjÖ­s¬i~òo–å¦(c€ŽÊÎÃyUÁQò€Cš±5ÏÁ.^óVÔtŸ[ù¶:‡™o§éº}ØŽöÔò#nÑ€üd°,£n:VË0ÂÖ’½ ?X®¿¡Å< ^Nybáwç­—o3åÜÛüB–×Dñ_Ûµ ¬cßk%õÁ[ Ž\ðGçDZ'…¬-Úæ “Cn°,×1–]¥yD•?tö¯¦5oŠß°ž]NÏàUºÚýl66þ‘çŽâ`ŽUÙ¥‘ aQøryÉ&ÛöýŠ´½VïOÑc®/£¤´º¸`UÆO>Væh u'Žœbº>¸½šq¡/NT¿_ëSšXó8Ë{s;éÙ+ôÿ‚|Û®Úèz¤ÖzÆŸ,qcQ’¡··Àçh# “ϯZô}ã·Åmi.4ûok×ÓIYKÉ bCaó÷íVêø¯_Õ~4ü9Õom|=¤ÿÁ85ˆîõMo±Ãb²»jéÉÞŸ¸(Ä,¬?h/Eáyá¯üV8ãŠhílÓVÑ..&lœ™ qÈEÚX`dóŽ2–"”£oc¶¶|º-û½ÿCoìùE¯Þ·ÓHÉ]é®­/ŸŸfqž6øÑñ#Âþ“Iмu¶ñoWíQêÏ=¬ è¿)á¹ä`ã9ãó§Æï‰´ÅçÄæñ¿ÃÏê6÷Yý•ï4ýP¬ÏÇÌîs&xRIqZZ§ì;ûo|CñmÆŸìßâO;Z¿VÓìæšò’Â6,Çs»#Xžœz‡ÂïØWöÃøu8¶½ø1¦xvk‹I?´.¤–;›Cý⤎Ze“ï¶0ăŒŒe:U?w4’}n“µïç{±Áâ0ñöÉsµ¥šº×¾«oéŸ/ønëâǃ|a'‹¼C¯^\ȶïö…ûwšÓM"Ê8~ÊÇ ƒ‘õ¯/¸¶Õl¥•­í$Ž& a•GÞäŽøçšý¼ÿ‚pü|Õuhü1׃Òio&[Èáñ mÞ[’æ9Y?Õ•ƒ ®x"¤‹þ AñcÄw’Zø“WðÝ›jcÙÆñJÆávç¹…Žr»T‚sÁÈÁµ<¦’šµé×MûZß-Nü-lÂG)Pºi-4Zy]­ï×ÊçæÄ²ÝÛÊc’FV_”üÝ¥6k¹n8¤D»Wæ>¹õ÷í_¡Gþôt_Ááøý-帺H®—‡fºf'‹tl€ìc;Ë–M€6WŽw¼=ÿsð 6 â|g·Ð­÷´7–káø®¤´—h} ¥Ñ/•+rC0ÂéÑ‹IÕZí£=uŒ—üúw^i~§æö™¨i—m˜n~ôk’¬+¬¶Öü]â«¶H¼*ו·I,Ó»86ô¯Ð›?ø&¿À…6·Z§ÄOÚ Bk §•´;¼—ª›ä‰cÇ™«ÄT,2 ‚qðþ ÕáKr¾"ý¤<@“Gz±ìÛˆ¦’y +¬‘¤HÆ QÔí`wJŠXwîÁÔÃFñi[Ê/_Á÷ìyøÊÕ¥4åJ ôržßrýO‹ü9ñ_ã6,v7:Ó ©£X ŠHRV˜á<Òr¸Q€ÐzV絈ú—ƒãÕ4˜5ë;ÍŠc¹¾Ô"x¤G \ *IW¹Áë_UxGÿ‚r^jKƒ¾3|Dº³ÒUMä°ø}d[¹¼•XЙ-‘¡báŽNì&Ô šáãÏ„ô_xáïƒü1{&•¯^[ÿoy×Ûé­Îm™²›¡–'Üp2HÊkÒ£ìkhœÝüš¶Ý¿/ó>{½…E)S…Ö¾î·ùYhüÛêõØù>üfÖî#½{(fžóÌ‘£mB7`e™1n™==ë7Pð.½ðÆúeñeÞŸÏÙòtéÍyz ¥zs’k鉿›ÄZ‹? ß4ÆÓɽ”íb0¡‚¨¨·r w®?Ä¿lu}BûÅ0|,Õ¶ÎË)˜Y¼¾YiÞ@£hláÆB¨šÆ¦_F+š½÷oüº¸|ëR\µahÛhÇ_-[ÛåéÜð|Ciqr±ÝxvÎU]»|˜–68©@3ÿÖ¨[#i´Õ„1l²çƒÆ8'¥{Ÿü3Þ§¨í]7á~¡ Ц vÒô»±çÏ·”¯r¤…læŸáÿÙâ‡t÷Õü?ð_]ÕÅ¥Ži­t™Dq4^U˜í Ç98`:W'Ôë$ï(ééøõîz”ó*.JÔ伿§cÀ'̬Éo²=ÛVNO¯_ÃÓÒ¡]‹•~5õV‰ûxï^Ô$Ò|-ðâßSº›Ì‰´íhnÞ ~숙äS—U ápxÝZ—ŸðNÿÚzÇN ¢þÌ÷ʲ[‰n#†kwÆd{‡2âÐ;ˆfP~€ã%„¥'üHé¿—ÊþLÚ9´¤½Ú2zÙvó×Ë©òbZê¾K^iðÝ4i$‘ÆØRs€HõÅ\±¶ñœ›ÛC´Ô†èÕ%XUËö8ý+í? þÀ_´£êK¡øwà¼w’y+. ’kš™°|BÐ}£-&Ðv©œy¥'ìKñÏà k}®|>m;Û8ç·gÔ µ¹†5s‡!¥ùNååÊ¡½O=ðxk]V_&qVÍñ‹l3~nýúécâ/áïµ)wYøbën4ETzò{ó^© |,ø“â MoÚÚZ´0ªXÜ\LWŒ6Í›nr;æ¾ ö-ý¢u2çIøA$Öú•¬µ-7\‚kImÙãÜżß/vJrm%P@ÒÕ¿c¿Ú€xûMø{i'–Ò}–Hü_b-ÌQ…e˜NLŒ§,Ëœ®îx®Ì=ºŽªªoÎKòG›‹ÇfØ«/aky7¿fûú>éß<+>­w¦ëz®¦Ë4Iæ^jÏexùlcåV'#¸SÚµ4„ºO„´3e… ßÜ-Ò´Îöª>XmS(>Z… œõ 5ôÅ·ìã½C×µoéâÞêÞêÜxvèr^I©Îcýì0\—Ž(U\&(ï!!”dæéß±·íqö‡ˆ>YÙÝéú|“\M}w¿ØmòˆÑ̪ÌÛ•æQœ±›`k¢ž#-”Ÿ$•Ö?Ïò<êØ\î0I©Yë¥ô·¦ß†ÇÏvÿ ¼!£ë+?öž¤.mö»5½ºÆÖÌ[’B) OQ޵§¥øoCµÔ£’ÇÄZÓ5åâ-ärê^p &v’‰Œ1y'yÍ{¯Å¿ÙâÁŸÚø¯ân³à½'OºÕ"Ò¡¼Äy²ÊcyòÄLLa"XœsÇÊÕ‡ªþÆß´$wú^¿«øËEŽÎûX†ìô]*{‹¸ãwòÚYeUE‚v+#;lP Ç̱¹z‹q’ºßgý~dÓËsj•9'´ü??Èó/øKÁ.¡%{Ù5]JŠñn5 cX£,^QˆÎ8Á9ÝY?¼}ñWÃþ5„xCÀ“¢+«ÃªùÓ SÕØ,2 `gÓôÁÿ‚xücÒ´‰¼ÏˆúÙ/'’o²èwS´‘E±bŠyXCº5y©Ü ¤„Ãf¬'üã•΋áûh ª_-Ì7×Qê­ìßÌEH”íóG2.FÀ»Tœâ2jjbp¶çKú»èôïù›ÓËsITU%EÊÝ^I/‰j½Oaø«-Íçü"v 5á Å´h-ã¾XáW$0D!@ªäv žs†¤Õ¯ô¯]½¿¾ I¥Ü=¬›o¯Úk—*y6dI"€zƾ¶ÿ‚]üEñL’xcâü fÚ/™m5Ò´—q\ È›ŒÑ.Ò»bVÊA’IÓl?à—,Óµø¬§øÓ¢ÿkCg4È4}&[çkUó69‘Šª$ÄÅ1—eä²õ¬þ¿„æ´ªÝö²ÿ/ÊæÑʱQŠ•:<·ëÍoýºïU³^gÄúìññSHžç@ðÜúE­Ä—ÉÓ6Û‹• r7UòÀ,Ç=Hǵ\Ö~|tŽòÏOÔÆ‹á¹tó¶ûM_ôV‰‰Ø¿h@K?eSÊ·@+í­þ ¿âk½ZãUñ·Ç.Э¦u±µ³I$µhbVŠ ²Üï ÒN>T ‘’pH/ÃÿðMë{?Ý|,³ø¥yiycuæêø~[‹kxÔsæÎñ£É™>êáÔ#|Œ£rÌkåüÏ–NÉ_¯®–:%G6•½¥8Ý»'£ò×[ÿÃl†üEð.êÏÂ4ñUµ¼ó-Ây Q°V+åíφ1ÀÃg¥6o…:•Üvvžµ¸†ÏÉß5ı¡ØÚ@v Œó‘Îp0~þø%w|Kâk¤µøÕ~¢úø¥…õ׃.]d±6¥å¸{…•£Ù—"ƒ#?EÚ7™®¿àžö:?Ãù5Mâ©ñ/L·Òã}SÔÚÛIHµ ŠysÜ4²ÈÍ ³Ú0w¡@~còeŽË#QÆîí/²×].ÚµÛ¾í^ÆÑÁgŽŠž›éªjÍtJOEé»_/t¯…zÝž„Óhz Œ¢i$E‹O•#¹nré¸08U%‰\tä4´ÙÿZÔ,mõAðÎ=WNžÜe´ŽI¦´‰Ne’|áS`l¶ÓŒa†GÌ~ÀŸöjøùãÿxkSø‹á‡úo‡ôm6òf›Ãú–Ý#Y»Á-™w‘„F‘.\fx¯ö[ý¸4?èž𿉼)o ÜF·Þ ŽÓZYi sy µÜg ¥I…Q‡þ=”A¹å™áÜyc {6­mº_×î.8tª^SÑõMßÿJ·£>XÒü ðÞ>ÚÊ÷Âêhõ†ÞÆóÎKPÄí%•p¾@KË tàÖN­ð«á'‡õG—ƾ ¸³¶›QXÙ´÷vh£ù·ãfù” e›#ð¯²<ÿÕ·ø·-î©ñdøƒáΩ¨ÞÝ}K‹i}5¼²ÉæŒvŸ/(Ñ.™bwJu—¿ðOÏê3_/ÄJ±è·–•Àµ¶·kXþg¸8ÜULÒÙ•¸)FrÇ`T½ô¯Ú×·wªJÊÿðû 8Î1N5%ÿ5Ónº»nÕ¯Õn|iðçÀÚŸ„¬®¼;à]·%n—T¼ûlÞ\±ïQ#o“’FH銫«ü%øP`ŽÉ£Kº‘âXvÏ,ò»c <¼í ¶yÈÅ}³ð÷öxý<{â_|05ûxF[9¤„âž)dRÀ:[K€É„y$E/:à Ä/_â¿ø&‡Â9µ¸þ"j¿u+˜õ•¼k…׬E½ŒE@ŒEe•’"¨S ï.a‡,f[–Ÿ8þZvÔštsiÉÎ54ßâ+ßuù­O‡¬¼+á¯jŸÛ>ðÿî|¶°·K.%¸[†Âœ³9+÷ñ»©à dá×vVzµÓxrKÖHíäÞÑ’fÙ!f Q@?(T/œ‘Œý±}û þÊÞµÒuSÇš¶­§¿*¦£tñª±}©nV(#ÜÇΉ”3”˜aUËÏØ+öGмoká©eÓáKµŽ+Ï-µŽ«"?î‚\D%•Y€òFÌyˆC̰‹U{tÒÝô³³òÙ.ÆrÊqSÖs‹jÚó7Û]¼ýOo<:Úiû}¦ŠÑî!$xöù#åݰåáPzqœÓ"×mèüé’Ýè“øcR—N‘!™YãÍÀP¬(ùù”ðÛHèY³ŒSm—ÃÚ¥œ¦êX­bY­ã,Â5Viµ#RÄœHõ<ÑOüø!à]f…ú„4™-uHÖàé÷˜¾ÒnV!’)^HÀA³rmýáp Ê/5‰¾øWDµ¹ðo†ô ÚÇyÒ4 5šâÞä›3Í–óKHaV>Êr+í¨órÊ=õ¿nߊ[¯=Ò%‘Ê7÷ö·KÙýý•ïoø?œcLðÆ­ª\ý§@Ðî–ò6ŽãPó.ªœÈ )éü9ÏNy«ÚÁàÙ!Ö´›Òn#µ:jCˆò±*d¥7éÈ ŽCþ~Î~×¼U.…â.ýôFÐ?…-VâÖ ŒR"ÛÎÖ±mó ¼€¹Èd*§*j—ˆÿ`€µ¼~2¹øeâÑÝ].5½7ÆäÛHÉ:É"¸ݹ#“kì[ð3|.‰éé¯Þôwò³*y.6V´´óm|­ªÓ»ûôË;ï_éöH¶o-ÅÂ%ì××ÌaÜìWÌ’GæÀv,¿6J}Üõf«á-cBÐu 4¾™:Áw%¬zµ²¼ðÜ4'amß(ebWkuö+ïÍ3ö?ýž´£o¬[ü"±¹¶º‰M¤²x‚çeøŠâ190ù›¡ˆœ)e|€ë´‚¤5KÿÙOöiÑü[uðPÖ×xµ]ÓÉu”mœ©EM¡;1NåŒò´–qCšÑ½­å¯§½ÓÏϱ”rZü©6–¿ÞÙy[nßä|#.›s­ùÖö—šrý…ZâíïåkX¦òǘ#*ƒçr8É`Œ7'èš‚Ùê“)ÓÙ’â+3 bò*aUÚ>g y8ê+îùÿgOÙÏLñר´Ÿ„:§o"É.¦ÓB!Bº–3刢ڪѳ«*BØÉû«Ï¿©ü*ý™ô]×Þøsáö‘®¡û ˦‰--VˆÌB˜„RN\]Ì\£œQåK•ëä´éºo>6½O%©Ìù¦´muwô»Z/Ïsó¾óíú†©q¨9·‘l#šâæÆHq²3˜ÕNâv…. Çyr; á™$¸·Õu­ÇRÔ·}–+»YÒkWå`c´•%‹Q’8÷çôƒNÓ|!aá˜ï-<gkc¨*ÿijÚ^…rI„b0 BLŒH‘H-·$ûE¯I®]è1é]è·‚ÃÄRkz^µåÄÂÞà3攕~ïX·Êçkûr:(Â÷ó_•º}þW*Y )ÿËË?(ÛK÷R¾·mtèôz~{ÿÃ4x÷ÅXÚxÛÀ¾0·Ð®&Ã}yÄÏ c3œ4 K¼T¡!î {þŸûü>Ô4}=4¯‰V¿fÓ-¡º³“B±‘­¥¦c/.Ör œèXr}®ãOðþ‘¬/ˆ¡·µºÕmï.´Í68le†;è„["ˆFà¢È‚mìɆÃn;vÞñî¾¾²¶ŠãN¼òVHÚK? XÝa3îžâ“*ÙP ”/rk…擺©¯—_Áö¾Ë_™ß1tª®uºM'óéßϦ®÷#ŠïCñö•x|/­é÷óhvb.?é7 §s#+<*…Oï#·ü¹\&1œ57Z·ÖnüWogâ]X.§¦ªÚÈÓG2C(Gxäˆß*ŒªƒÜAZ#ÒuŸ†“øJÇU’ßEfk>âÎú9í5ɦ•­‘–(1ÿ:]¤«çrŠ«¨éºµÑ¹ŽûÄñ\_k-¥Õ¬‹ Í2brKK/˜¯›7FD‡s$Q¶á¼æÂ~Óšòôw¾š.–¿ó5}ßKYz’÷cªÛ{h·mw½ôù}楆‹öÍ7LŽî8ui#ÖîVIä¾2)”‰†]N¦ÍÆüô$ÑÖ¼-w¡èZ¥•œÒÝhš=ì6s\g‰î¬.FS41C1P•BFzGâÑl#“—Ÿl*êñ]Ãs¨«G{«I!-8”Å¿…óÈPÀsS^Káßêc×í£xák[«éb’îIPd>ad/å²ÇÌœÎw’dÛåoFÿVô»}ý7}D¹uvÿ5§å}õètž!ðn‹®xÖ/Oo£i÷PÜ­¬v·Z¶ùf·Ä$9BY¼Áæ(ˆ.ö ®£ÃvzÅìíáíSâ—Ÿ¦Þ^³j×6rÎoc“w‘uOc( oÆÂÃsTjºWˆôjÿ¡¾¸Õ¢Ômæ¼Ôõ P#”Ë&–ÑâW˜•Y7u³ ‰añ&›âO h2ižº1Ǩý—J² `n`†æEŽHãŽGa·°èEÅ*mrò%³Vm>×ÑõV}ú.¶eòC—úÙiÖÖiy¥äkxu.Å’[ÛøÖÎþÕu!ñ§ƒµ|O ªÃoâ(škíF9[Xä…¢Ädu%€ªï“‚zuÎ.5Ñø’aìïoÕ¾Ë7• ¸œ…WG1„•÷«ædXÙ‘XàØ¾×<}-”ž2ÑXÔlܹðãYë¶÷þÕ×Ãv—L-5;ZÎY¼¸žââ‰Ê4ŒX´^[9 æEJÃñ&ƒ¨hß<;cþ•}¦ÃpÚÔ0M©G¨@ò·œû¦râÓÈ…Œ ÁÎäi‹‰,´ë7Å?ü`š]æ“yØ|;áýAo`ÎIûAÚ w\. EpA¬ydÕ›¿5½5_=]µºÝÊæ¼ñ§x¥¶¶¾ºvéÿ ºÜÚñT6Všö,Ñbéú‡ˆ#–ÛìV‹zb« ·2Œ41ì—ýVíÊNB»J¿7úΡâ}sQ×5(õk ¸-î|elbÓ<¨÷Åq;½­ÆÙcùЄ… ‚Õ'‰4ÝDÒµ=RñΩ«i~k^Úèzmט¥ÚDz3)•Y,Ç`ÆMMgÅdêWw×ÑÂ76ÆÁv°ÿhÞi³,h‘%Û,xg+*;$q ‰L“Œ —ï'wóß{¤»ovšk¦»ªŒùdïo—NíßGÛ«.ÃŽ<',~Ôín/ìluhäÓüö_-$ö]yÏlâë˜Â©`’1ÁBκ7š&‹qâ}'SÒìZÿZÖfÓî4u\^Y²£°0Mtò†¶UˆD®T ÿ+«¦5¤ø‡þÈáñ&£%¦«½­Õµ¿Øî£óu&wˆlÅ¿(…àFEÄ^Z(IÍ;Ã>½šÞòöYt…ÒgóïuHî#¶ÒÞæÞ[YaóY[Ï,Ó#2íB’Bƒº³”cÍx½Z·á}5·®ÍߥF¥×*_-4Ûw×å²$š|Öá4ùìÃM{‹˜ï­5è½­Ô©ˆÆÀÉ0byŒœnA¸’ãð”>ð”úÒøGO†öñZ}GL×õ}·zdʱ4ò, ‚‹…22…vÚ‡bãq¡³s¨ë0鿼WåÛèVŸéRi%-íïbûDj©¸*B‡“Ì%—Ì]á‚¾ŽŸâÝgJñ…Ÿ†¼ã°¿ÐáŠóûCÄ:WÖÖO42-UšÕ$U‰U3¸‡pKæŠ~䯗{?/V»«}ÏP&œÖí£]|ôüíø34äÚËk€ü}}3Ic¨Ù_ëŒ÷ m ,H!. Cå°ÜØmÏpäÉâ=1 ï&‹ðŽâÂk•ó4ýkPmŽçɆ"…OÊc/s*)Ù½—pÁj¡â-:-KŸðˆè¾ñE¦Ÿ·ö‡ÙoK;°u"RÀÂ@ˆíÎzàcO[Ö<)y®ÜøªÝ5øGâ™lí­þxæŽ8É3Ù”fy"v…¥ ì4JWïTÆœ¢ì¯­×O—Þ¿áú—Q+;ékw_š~nôRxÃwºî…Æ×O¾XuQ[#ä’6p»@ ²å¶±ËÊ–#u-KPðW‹ÖçCñ­}&£ê·º|ÖWÙ^\Çä”0~ñdŽ%ecò9 À±}„ŠŠÃY[Z\xŽþóGÔ5+ˈN”§}Ôm8 ×SØh¼´XÈ‘ö–„%EËïxBIõ)î<9ÕÄš´Òµõ¼gN?.òÊPä4HFví|«’¼gi.ÕnÖÛÙt½­f÷脜žªÝšåëkÿH›RƒÀþ5ñ>¡x^ÿMÐw¥¤šf¥ ´w(°°xçÞ»¥’?,ŠX–òÊK(Zþ+ðþwàÕø{™ × d‰¡ªÝ^YÇ©I ê'’gÞÞIlɲ\nnåaV­|[©x£ÅÚ%¶³¯éú<fê+-kO6í-úÍ eýÌQÆÅ—æß"$d€¡†s|Câo øsF‹Løƒ¦^XMØÿ`ègÎY<–‰Úm¨d"%@‚àWÝÔºzogv–›t÷mòï¹)Ç•¹jþWµÓÙ½µüž½smÿg?…×Ö—“üJ›TÔ®4¶ÚqÒ~ LÑÚÆæûdqH>Ä|Á*˜pQ䆬öý”ÿgmoâ5ó|Nð·Øõ¨õxåk_Z¿’ÚúÕDÊ\Gwr$;ÑO˜ì2>`͇ Ø\]êúÇ„î¼3©ø¿AµÑî,dHîµI'š÷XÔI%’&Fap²*ÀnqŒˆa¼ÕMѼA¯A§Ýë{Zí-#@³µ»K“XôÓ²3Åy’A¾Y.@RÇ á):r䛿µ·ù|¯mVëÐÇÙaýÛÓ¯}–¯óv¿ºû#Ñ¿c¯Ù¶}Gþ8ôKíYìtô…ïÈŠfeòäeMeòÈeg`­æ€ÌKàÅqû þÍÖi¶¯á Y¿°gò5+ 5Û&îâ$ÖèŸ9‡Ü±ªí ¾ðítùôMkÆ:‹u]15Ë«FÞKÛMsTžkÇLP¤—“È1 %c(dV_›b´aêj:§ué¼Q¨è7¶7K¡ÝCµÒ-ä6òºl‰b»;ˆtTVÉ]änù†A=×)8©½meª×Töw]ïÓ¾¶!PÂÆ.^Î>¶éÓ¥·ó¿‘Ê\~Íß³¦˜×ž+ÑþÙé“jò(´ðËXÏæiw1£š0_cpFE†Ãn5Òè³÷ì§á¯ K«Ïû7é,ø†oí-q˜Ý––6ÏXrñù¾XH‚»&6žp+«Ó¬Uæ¦øu~ÍuÉ!q e äôufÊîܨ0r| ðçá7ˆô¨õÁ~Ó솬¾]ô±i’Ýð¨TØW(êÂ4[€É9&O ü?Ó¼S¨jÞ.0èQé²j“Eyq}"ÃnêàÄ’K&æ‘w$cã`Nÿ‡üG£êŽ¥â+»…Ô.­ã†}7R’ÕV;8T;¿˜v˜Â¿Ë Ë!SÃ1ʶ"·,åyKñ}µ»èÞÿƒ5£N¤yì­~Öü5½´Ðµ¥6“7ƒìW]ÄVöpÇý“.ž·0ÇSýÔÄ·y%†$„ù¥UYˆ©|/àË»O ÿfÜx¿ÃöþµÕ-OŒ&‰Þ$Н*@¸™67îÙ—@©È—¬è>¾Ó¬ío´KNÎðï›VZ½–ÞÎõ. OonH1ΊòÛ×;ˆ@Fjõ†§e§ë:}öŸá½BßG.õ¾›(šþMBÝO.mª‘¬Ø8MÊY,ß|UóV”U›î»uë~>w¾âŒbžº»%Õèý-£{÷^D6:õ¼ú6—«.­ý±},-á»[©®®žÝabcIb+´c‰#Wc"ÉäÓ­üU¤øJãš~ƒ.«.«ÉtšN—#Ï #s “xä›k,„¢ r½Oˆõ¯ˆ¾'Óî£yo¯.´7Ñ}Ž(ÒÚ6eÛ Ü F•Ùƒ2²«##/MŒÕå×´_ i3øWW¾{i¯¿³õ 6úÍ6Ú4Ùg”M–B¡_Ýçyc»iÒrŽëTÿ+é§o-u¶æ³©Êô‹ÒÏñ_{[K#£Ô¥ñu‡Œíî›QÒ¬uÝÖAgc¥ø•-嵿Âï Ž²9qöÄa™‰ ¬XøCR×üA{àm69¾— ¶Ÿ¨^E=çž~Ì’Ç/“++°¼˜;ÿx>RÒÈ÷žñ„wÚséš_ˆ,|Ue%­½•µÄ·í·>eÝõËe@À@à‡bÅ…OxC[ñque 6¬öö­6’š†¡k'‘)š4wWQóå#p°Ü¿(¥Rœd¾å¶¾[ëeªÖÄÉ9^*Ú;¾¿wžË¦¯¡³oµ Ýh—Z‹ãÔ,|#¥¶¡4×ß/Ù7É"\¿$%•6B¤y»~bûŽCC£ê^ šÏÆrx~úïû"Iô{ÉàòíÞÖ9üèÚÜ]ähÝb0®`›•oRgÄ2ëÚ,wv¡u¼:-ÅøÿHV™‰Ž ²ª>d•J»9À<–±¦x‡^¹Ö¼]>§á½GR¿Žk=5Ëu\IÀo·ÍòB"V‹ËØ)T"ŠPRJOT÷o¯®›]ßä–†’ç•å[Ñ­5]]»[®ï­Î_Á>2×ÿ´-|i¢jri°¬rXj̳Å`Ö mâŒ?—‚#-¶ày€ï „eo˜/ \½ð6“iàÿ%æ¹â==¦ÔtýCE4Åà G–ÈD*èrIJ‡*€m¬Û¿x=/£¿´ƒO¾»™MºÜ7„exšÕ¼ mj&Ú&4d…°¤ ½?Ä÷¶º~—¤ëw·OâK‘ö{K˜fºX®$ÂMäBU£•Ù bCÆñs¤£gË×¶ºy§«é£ë¥Ìc*šë¯ªòóß®«üÍMÅ*‡Qº¿ñÍŽ“e©iÖ²é…èÞ‹©›†^ŠÎD{v´²‰NèWAl¼5®\éš>¡…tY-õ *À¼ªÚ%˜6‚á„mk#ÆÅ¸Êç2ÜaCV^£uwñoÁºóøľ"Ñn®g'×µï¢Úûî–‰ì·*P”uôë}5ôZ~F6— èÚŒ:·Œ5]y­VÏR‚(mmt±-ÍÁ‰£Œä²Çʛ݋»3$ ‹{XƒÀš‡‡ìü?â[ÿ3R¾ð¼Ú]­¾©×(×Q¸pˆ³-£0fR‹’Îß{iŽûÚ÷ÄëûKÏÙi²ÞjP…¾¸Ô­cµÜ ‡Œ«‡Œ,ñEê¸fUfÉÂ4-®VïCñìË=– ½¾¥ K%ÊÜÈñÝ»È4í¨Þ¡ÎKeät)èÝío¿_]mç§­îf£.nT–»?ÏmoÓËð(Ýü3ðŸÄ}'YðÅÿ…~—C¼·1Eyª]Bmì­­žëì&+iÐÍ\y[W€°¤Ž+öjý›ü1àj^µÖ`±±Ö/.u-?þÝ2-3I¸Úňѧ‘®·DÀ©æ".6‘œƒèÞÒü)àˆSk>=ðÖ¡g"h«©w^uçžaͼp—‰òGî7pÅJÀÅ{­WÂ~ÿ„gVñGöšI¢‹‹I®í £< r¬#U)¹ˆuG X”Ïz*T©§$¾{ëåºoe¸éƾ¯k÷üon×]té{:7öviwáßÉyªGi¡,…~Ç|ûK ­ÇÌXÔ0xCDOÉ—ef8"ÇÄw¾ ‡TÖ¡#Ï«nXüÉ<·¼©$܃÷N9 £|RÕ5Šž&ñ߆¼:<>Ï5½½Ä—VçT“RucžõÀ]Æ$ýßuŒe‚“—ŽSRõ¿u¯}lþ§N1ŽŸ×e÷ôì¿«˜Ú^ã{åñf¥àßÝ\x²ÎHu½PûJA£I…ܬkæÎ©RÀ³ÁŽ4ôïZÙ|Õü-¡É§¿Û4ùtû‹xuX¯â³xMÕ²§ÙåLL6Ê¥Af¼Dvqf[aq­Éâ›]zÇEÒôûVµYþË›Ëû¯-¥i„(v…¤lÊUÚ…9Úί©é‘_øãGð³hø‚á§¹¸Ð¿ysvŒ…+dˆoToâer1•QóDmpŒzl¯ekÛÍ'gµ¯¥´ér¿3mÛuÝë·mߦúj;À×_ðƒiz}†«â¿jÞ$šE´­Ä²Ç1™7܆b6«þí†æ Ûp£#/ᾨê–ÚO޼1¬<“kÚľN‹ªj†º¶ŒhÞ{—1ÈàÜÜmVppQ· ø›Â–“®i1]Ãâm5¾ÝªjqL“©A˜Ê$Çp(>øà.BIÈËð4––¶6~.²Ô®´{[ëyú;¤%¹ÔCåɶáL7|€9ë ­Ï}.íªJý’·­•¿[‘~ÎJÎêÝ:y·ßKY÷6¢ÓlŸGgƒ/mõ£uurÖ7šßš›. ™pÊÉ…‘Ì*S6r+š»ñOƒ<7¦i¿ ´/ÀuHìá‹]³Ñõ™|—-¤•ì'XÑ™a.¾c«¨eüÁ³¯xZÇÄÞ(Ñÿá&ðµý›]ؼz}»_/fRÑ»¸Œî1(nr9æ¸ß¿³‡~^ë–þøáß_ÞÔ³k>*‡R†h§±%™± ÷ vï1ä&8–ã€æ=.¹oáÝoW›JñEóy<ãºÛKûO›$d •ð€ Ë)U*Ûvžk ^Õ¼E§xÖãÅðO¨\x\±˜^\h«µ¼¨äU™¦Öÿx’Ýòn5—*ŠÛKê÷ü__R}šæO­ÝìÚÓÑl»éÿ5ü?ðËÞ&›ãÖƒðÀ¶­âYöÛ]OjdÔ’N© ³lT¹Ž5ÚÇ(!†r Õ› ?îx‘üU¦-Ÿ‚.nßPÐô}SYûUü+H]c‡ËÁYK„à¡e~A¡ã\höZn¥o­é6 ÕtJÆ'ŽîXX•˰.ÌqÊŒ8,3WæÉ´Ô²³Ž)ÉB¸ó‚¼Ì§}9«J\Ë_[hôë®÷-/ÑO%8Å©ylÚõÑYtë}]÷*êž×tß __ëz^©k«jZI>"¢F²[a•-ÊÊR䂌¿uÕ ð3NÉ´_ë‘cøR}kV›JyìtË«Qekks4mö”™I_4Ø# FÜ–Æ‹­smjÚ™§ÊÑZªKw4zÔ’M¸—‘Ìqp6|ÇqÇÊÜç¥A<zF™alþ.¸¸[Í]£šÞåd{‹UHˆ,­ } œñÅUâ䯻ÕYmnŠ×}5êö¹\Õ#¬m¢þ¯çw§EØÅÒ52oß_éöQÞë3ÉâK{É$š(Í(æ9wd#•HÁ*ãWÄ—º6¥âÛé¥gÕ–Ï÷w· tðì¤Ç&äUa; °|Âp9U«fîÚßž8¶_øOMÔì'µÝI§ÝGÕ²²$¿¹CaûÆÜq€p~õgºå¾Ý]´Û]5Óe~Ú´£w•¶W²¿M—km¯ù•ü]¯ø¿ÄpXx[Ã:MŽ‹%„‹©Ü\ê¾–vË6ÐÑ,D•1HQ íämÆy fèú†ußYjúùº[]RÒ ­OX£ž WýâF’49PŒF“†(‚#ñm—ˆt‹ÝÄÚMµ½Ôš­®—gjmã#òü†rÙm †Ü¯cÍwÍâ ¯ ñ¬·Z¦½ Ÿö>kª« *F‘4‘삈BÆÄ“¿“ÀS© 2å[»úß¿¥÷wÓ^ì¨^§3w²kÓT—›VÛæs7¾ø›ðëÃf÷Àz¦‹.‡­öÏGoyöœq¢lž¾i0ìA[|òrÇ8±ã¿ x‡B¶ñUý¬:-ŠÞèc[º‚i4ûËiïäU‚…ü¹Ã±ËÙˆMM5ä@ñð¦•q¨ë‘骲\õa·¸ŒÆsFef;”ÇLõ5FöÓBÔí4OüJ¸¿XuaúÃÅ u#]A ²É2¢}̶ÅÈ`As“ë•E(ÍM4µ×Me¢ß«µ¬žŠÉ+rïQöj„¢ÚkvÝ—M<¼–ïSѦðÃÝ2óR¿ñ/‰µË)mæ±¹hüˆ°¸2ù¥Lï—Ãì‘@C€ì‡um%߉>é^Ò¡»ûEÕš˜aµ³2Ų«%Ìw—]α•o-CmeS¸ ×¥~ÒŸ>)x¢óáv¯ã>ÒòõžÚÆñ¸’@WË0m;Ty<ší´Ÿ‰šìú®›ãÍBI,u‹¹‚îd¶ia0λ6… (.žÙVbsÍt©sFî/]lúõZÙnô¿§VrGØËHÉy4¬üô¿æÿȧc⻽>úÓS¶¹³Õ­ô½JK‹‹ûm –;…ò‚„¸ó‰çkd)^ÃͰÐm¯ti.¼-;^é×ZlÓhl.ÉDýãª,ad Í#bB‡<¶Ü×V5ýCDð4žÕ…½†“ Ë$ö66ëçË€ÕŽáÔ’÷Š­îõRêÓB×¥´ÑìáFÒå_-šú ‹ƒË~TAÉ¥'e$šÛª·ml·×K7£}.9Gš›¿àïo•¶ó^Fn­nÞ ¸ðì0éšzÛêß&ÝgQÙÆp™Ô¨@Ï…`øÉ2gåÁ¯‰c°Ðõ+o x+FÓoLztwúµæ“íó09Œu¬R|Êr3ÎJÃдۋt#_°³¸°kE·ÔVêû˸FóÎÅHŸ*ÀŒž¼µá³üŠ_ä â_ûÛÿéh® Uÿ“eÓìŸë¿ú^”Q\ØáËåÿ¤£\GûÔÿÂÿô¶z§Äïù|Qÿ^ºþŽZæ~-ÉÌxŸþÅù¿ôŽ(¯#þë/ŸåÔÿz_âÿ䎃â_ü‰7ö½ÿÑו'ä…øWþ¸Üÿè«z(®ì7Ùÿ¿SLWû¥_ð¯ý)œo€¿äxgþ¸ßÿémµ_øçÿ"e÷ýu¹ÿÒáEßSøÿü¤xóþ½þØ7ágM{þÀÖŸú>*·ã¿ù¼;ÿcÿé(¢ŠàûÂÿ·¿3Ô©þïñCò-|Kÿß…ÿìU¹ÿÓŒôßÈÙgÿ\n¿ô[ÑEzÿx«üÑ_à¿—äy¶½ÿ&Õoÿc‡þо®»â'ü¶õéáßý+¸¢Šã©ö?íïý.&øb]øyÿØfOý(޹¯‚_ò ºÿsTÿУ¢ŠÚ_Ä_âûiO÷—èÏ[øcÿ$ÿCÿ¯ÅÿÑsV×äÚåÿ²‘'þ‘%WÙ_á—å#Û¡ñUôœ Ïÿö ÿDÝW/â?ù5”ÿ²¡'þšÒŠ*°ÿ}_å!b¾7óÿÒ¢4ÿÈ#Vÿ±.ßÿIÖ¹Ÿò·ÿz×ÿI(¢ª[/—þ’;þbßõÕÃÏõÞ ÿ°Þ—ÿ¢Z¹ýþ=u¯û4¿ý被ñü£ùböñßü5ÿ;þÆH¿˜¯Ÿ|Uÿ¾6ÿ°Õ¯þ‰J(©ŸñŸøöô]Oà}ßûiÙþÐ_òhúWý‰þ—ËX~.ÿ’ÔßõÂËù5TPû_ö÷å uÿ莋öÿ‘ÏÅßõç¤ÿèèëjóïÉÿb3蛪(­~Êô”N‰|Rõ2¥ÿ’a¥Øä¿ú"å<3ÿ#ÿ_cÿGMEX†?×FaSá—ËòG¥ÞÿÉð?ý”­KÿBZußüŠúçý—_úPh¢¼|?ðë××ÿ¥3¦_ïT¿Àÿ#ŸøÙ÷tûãþpÖ§‰ÿäHð¿ý{ÙèPÑEkSøT}WþÜe/÷šÞŸäMãùÜ×”úO%bü)ÿg…ÿì?þ’ÑEo-ë]eþñŸæbøƒþK·„ÿà?ʺŸ‹ßò)øþ½-ÿšÑEuGâ¥éú«þ^zþ†lŸsIÿ¯h¿ôkÕ›ù%Ú—ýƒuýh¢´Älý4þèÿCßý}×ýyÉÿ¤ñWIðÓþBÒÿØ ÃÿJÅW-M—¢üÙ×ö_«ÿÒYÏ_ÿÉYÔ¿ì?þŒŽ¹¯ Ç¿‰¿ëÐéL´Q]oáü—æŽxü1þº3¸ÒäRÑëÙô\Ç|-ÿÆ­ÿcE¯óz(©«ü9zGÿJfXÏãGÒ_ûiÝüuÿ’ð·þÇ/ýªµÌé?òK>&ØÂŸú¢Šu¿…Eÿ¥DÓþfÕþC~ÈÝ®ÿ×î›ÿ£+ŸøÓÿ#å÷ý~Mÿ£žŠ+XÿåÿÈ‘Sá¯þÚu~ ÿ‘“Á?õÍôžj·áÿøõÑÿì%qÿ¡­W=O÷èÿúïñ'ü‰×ö,Ü9ª¿€¿ä‹xSþ¼oô¢ŠÏ¢ÿþÚÊûRÿ ÿÒ‘3ÿÇæ±ÿ`Ý3ÿF ñë/øûñý„­ô8袺2¿úÇò gÙÿê{o‚äu¹ÿ¯ÿ¢ä¯+ÖÿãÖúõ‡ÿE½WEµè¿4s÷õÿäMëùï?ìP›ùÇðwúÙÿìýVŠ+?ùv¿Àÿ6:Ÿkúîeü.ÿ‘…?Þ¹ÿÑË]v¯ÿ$úãþ¾.?ôUVØÏâ|—ê,?ðßÏòG‘ÙÈßà/ûì¯^Ýÿ2½ÿ]¤ÿÑFŠ*±¿îŸ7ù™ávŸ§èaüJÿ/ŸûÝÿéEfhßò7ÛØ.Oý*¢ŠÆ_½%ÿ¥H*>¿ûj;-'þ@÷ŸïŸý+Ë5Ïù¯?ëò÷ÿ@¢Šˆ|Rõ¨/øƒl¿ä©ÛÿØýoýkô+Qÿ‘²ûþ¾í¿ô¢Š÷±_Ãõö ra÷‡øWè;ßò;kŸö ÿÚ†µ|ÿú?ý±ÿÑ¢Š+ÉÃý¿Hé'màÃÕþlâ¼cÿ%®ßþ¹ýÕ£áÏù4?û&ÿÐÚŠ+·þëð¯É˜Òþ2õ_úR-ÿÍGÕ?ë´ûN±|Aþºúæÿú:J(®n±ô"_ÃÌÿÙPK!&º¼8 xl/pivotTables/pivotTable2.xmlÌVMoÛ8½/Ðÿ@èîÈvìlmØ.ܸF¤‹ ÍvÏŒ4² P¢@R‰‚¢ÿ½¤,ù«íè!I‘ogÈ73{Wç’=’6BóhpщJE±™GÿÞ¯{o#f,/R.UAóè™Lônñæ¯Y)•½ç’V”‰BX0€fm­-§ql’-åÜ\¨’ üɔιÅPobSjâ©ÙÙ\ÆÃ~ÿ*ι("Vð^îZðˈ%87)ØEŒ—¥|þ§ÊH¯Ü<eo~¯tzƼV…=™{Ç­%]œØ—RlŠœÎ¬øO¤vû‘ÄfÛ¡PÊ-¿æ¥Ûý<úÊe…ø°ª„™Ò¯»°Ž#–‹â3ešÌÖ…¬ýƒíU†–•UŠõq®°”ßiQØ{a%!¦°%ˆÙ¬(Rõ1P••Â¥3›ïÈùq^I+JIkA2] ‰½K¶\7ûq3©îS©)›GËÁtò™ÐÆ~DÂHVO~¡79|o€ËÖp­¤ƒŠáˆx—†%ªr<·?:ÞîÃç¿ßÞÀð†œÁÏn™óàa³DÉ_ðéœv’Ÿ@èÒ¿=BL„[uDË™‡ŽcÛ’‹ÜðhOG{°rkmTr Ýæb*cy¹Á”I\jS=Xe9î3"öÀM¸üþž¹‘óÔ\´cÜO¢p˜O¶„t²—Âñúp¼þ \Üïôê 4{ö iA¤|‰1!-‚Œ67z 1eö¹„`:­f6ê†#x§Œ¯j΂³Gi”Fê´lß ýÃ’y4NF“«¿ñ„¸6š‡ð‘¤Ò |Ú½ Å-*D§ó°S Çß{›;ˆÀ™¯W¶S_ þøNQ9_ÝNÃU~yN÷3 UìZ«/öYÒM‘©ý¾Èo]#2¸ µE1TçÐ'8¥G>6aÖ«Eé®S‰0ëØtËÅâ*wí +ŠTÛ[cý›UÊõmr5ü°¯½ñõrØ%“ËÞÛëQoõ~=¾îG—“Õð{šÁi=4„¹H´2*³‰Êc•e"¡Ó–pOBS¡Œ¦gέH)t]»>Ä· ÓÚvÔ…žuJuBûý§«$Øpxúm‡‚uÔè.~ÿÿPK!ª{Uƒ<4 xl/slicerCaches/slicerCache1.xmlŒ‘MoÂ0 †ï“ö¢Üi€Ih ¶6Mâ2M‚'“º-Uœ"ø÷s[˜¶Áa·Øoü¼þÈ—GgÅ#™à 9ÉÆR ×¡2~WÈ÷ÍËèQ Jà+°Ác!OHrYÞßådÆøzÏXoÓ<rŸR³PŠXt@™3: uÊtp*Ô5—*j"BE{Ä䬚ŽÇs5WŒ—eáô(4èÙ¢ÑA¢,ÄWÄ϶1¸d¶Æštêh3)œ^¬v>DØZîüxáÿƒ½ênvî̓cغŸþcÝ 6¼A¡_íœ,óÆBÚtöô3 ¶«Š·-Å@{ûþ7‘ªÌÕ¯º ”9—´¢è¥~ëa*ËÜ$t$th}*äC—yëÏQU4A O ­“”5’Uæc¯Ö©»üÝdú|@7N¥ƒÕíò¦®A÷­>÷×ÿÿPK !–ÄI  xl/media/image1.jpegÿØÿàJFIFÜÜÿÛC     ÿÛC  ÿÀ0í"ÿÄ ÿĵ}!1AQa"q2‘¡#B±ÁRÑð$3br‚ %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyzƒ„…†‡ˆ‰Š’“”•–—˜™š¢£¤¥¦§¨©ª²³´µ¶·¸¹ºÂÃÄÅÆÇÈÉÊÒÓÔÕÖרÙÚáâãäåæçèéêñòóôõö÷øùúÿÄ ÿĵw!1AQaq"2B‘¡±Á #3RðbrÑ $4á%ñ&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz‚ƒ„…†‡ˆ‰Š’“”•–—˜™š¢£¤¥¦§¨©ª²³´µ¶·¸¹ºÂÃÄÅÆÇÈÉÊÒÓÔÕÖרÙÚâãäåæçèéêòóôõö÷øùúÿÚ ?ù™UÉ$·ÊÄóíÛéR#1@á³Ü6Þ2ÙéO²±RÜÕw½H–à¦^%;‰ÜµùùôQ涤+h¶¾ZEo½»¥¨nhþï¯j“÷ŒAŒyg?2·T‚/4ì?ðÝ>¿J/Ð9eÐŒDæ Jná½*_'+Œgr³uZz"2ù …8Æ:õ©ËؾFïÇjC”ŒÀˆÃ³`c¯JŠì5²oQòŽØàÕ¶‰·«"{·#Ž*½îÜ‘¹äíÇõ§äiÍ$cÉaº¼¨Å‰%‡§Ò¹ýVò¦[hXî+ “Ä7SÃ.àÃnx_aXðÌÍ>ÕŒ2·!—ø}©Â=hü) ªOo ¥!—~n>ŸJÊÕU¯I®…fëÖ¶´ëx¥‡ÉWÝÓåî*RÃì°23çnqòýÓ]1~ñKòœ­ÊB›‘!]ØÃ/\Ô†æàT¸sò¨Û×ðªÚ­Ä–r™ždÚæzô¬çä“ÍX›åþ]<ºê¢ØÒ…Œ÷+-¼ÀŎ橺Ϊmà nÀ,½ª¤‘‰p¸S· Å2{xçÉ~WúÖ”ý *‘êWsß‚~^Ÿ/—íô¯OøyjñF·.v·U^2Ƹ{M*Â1—sæ3pÍ»^à«;Xd†Ü–c´Äô¢»ýÙÉ­ÎêÆ/´F%(£<°#ôÿëÔžD`‡d]§›>½*Å­‘Ž z®q»õ©I6ì=W,»z~5ä½Ê÷ˆ~ÍÁà_»òªæ£1gÝ¿peíÓéW$‡+›æ§%£Èª=¸nËœŽÔ RºÛï*RO›©*1¸zTÚ~ŽóܱBb~m«ó~/”ʘ“hÚHfǯ¥\Òl]'+§ãÓ½±”d…­Ë”2Ƚi\Ò‹i®—íO^=·ÿ^½{À6žñ]´>ø›mr°ÌÅmuHmCInÙáIÝCÎ+Ú4/ø&Þ½w£Aâ ܯˆ4ÛŒ%¤GrýäÎBûö­cBUŸ2”c¹ñú隌&Þ6å¦ÿW–#&¬Oo«ZI,+†‰¿|dŽ+ôÂÿðL|ibt][O¾ÒuM5–âÝ~Îø•G%rÀøW˜xãöñÿ5íyÓžÇëÓÚº›ßÙ£P¸²‡RðÅ­åý¬äÒ5бS€Z9@?ùWè_Ã/Ø;ÂÐ~ËÞÓ¼Ke êóùÚÃùfC2ϧA´ƒ·éÍoCRµÕ¶ÔÆu£NÚŸ˜px\ø“Â2_iQ²êJûË~›Çºÿ*Ç6ë C;nS'·QùW¾hŸ U€ª}›=xéÖ¹½¾dŒ®çjYs^É«ø*?ˆ‹á[9]>—Î "ãïJàâð¶Ö“\ý‘×ìòyrzîéŒÖu)ÉNå&s.dy¥þCü%ºv§5tç?/AØV§ˆ¼;ý¿ÚÇ$™ Î?¥Q[ V$¹TÜXaœú«9EÅŒ¦ aåÔn?Ÿ½8H òH ̹ȩ'µÚÅò°SÉïúS°Ÿfi${H9àý(A©F¤·Ì¿{Jçš[„Û€ï·w©bŠ6<¸ùG÷ºûÒn„\¯EeûÔ RÞü˜ßœcÿ뤀;ÅäH«¹¹i9céôþµ;,ÇoõU,0)Sx‹fßáÆ‹>½(ùŒ‹ì×B²Iן»ŒŸÿUhèÚ|Ó]1÷ÈËT[=Ì©Éò¯Ý‰þ•ØxKÃâââ61 Ì~U¡ë¡tãÍ4ox3Ã_kXöÚï'½{‚<&ábWMݸSǵex ÁÄcƒ›Ÿ›¡¯dð?„|…Sä'BUs´úÖr] LŸÃž1¢—´VÚ»X WAo¢­¤Amí¼¼ýæcšØÓ|?$pù†6ÛýÔQÀôíV¦°š>w(<ã ƒëJ1=--©ÏÉ¥–›,¥G-´6ÞdÛ㻟¥iÝ,°7– *·,·zÂ×µ„ùþêòXÖ5°~ÓXœµ”m¡›¯êj–ÇÍ;›hU_jòÿˆZ›¦ï$ü»zÿ…v:æ²/Q‘ÙUñzõ«Î¿Õ–âôÅ¿à·\{Wcñ#Es#Ïi¶7¾èãðÍyî©oª/˜ì¸›pì{hÖ§ÍÉ©SCؼ7Ø«¿dKûxn¤^6€Ê‡¯k⇇Zãò\ÁýÙË.Ò2+É‚J²¹çÉ{ÚžL9o–F'{6<ÃØWoákf¸rwß*žÃÃ4NŒ#܃`·ô®¯Â—RÀ74»•‡Ê àþf–iáôèuÑšŒÕÍ/Ù6õu…G¹þƱâX4{›o?3¯ÞúWyð¶ÒÝaq û²gžâ²ÄIû;g…ü§Ä¡æó=qÒº/ì]:ÉÖ;2Í´çvÞþ”hs[´q"²²†'ýÏÿ]Cy­ÛÛ_M •eVùvñŠøÌf"~Ѥz¸<zšPˆìOÚ'Îr~_Jv¡âëu·U‘ÓtŸ'Ýù€ö®sSñ´rn[<üÍ\Æ©â)\´ÒH¸QŸJãÂåõ19¦zU±pÃÓ剽âßX4MÃÄcðϽy®¹âKy§hã„|ª rNÓþkúܺƒIæ±ÝÀ+¼ÖÓ&æßÄË_eƒËáI&ÑóøŒLªÊäW2EtÛÄý¢Àc5I£ŽFlíቧү˜7€¼g9tëUº.Ü#e¸ozõ’åÑu4QGÈ«8*»~îåþ"j¤J þŸ*pô­)­Á.†Mß67ƒÿ¯U%GHÛt~fTúæ‚yylg\ÄøÈHR¿-EåFíåÈèB¨ÛøÕé-œFS·°ÀÍU’Õv© [¯¹Z=Òµè*ÄÂ%U· ÿÝfÅJÑÆ‰¼(Üdz~ÓŒ0²ì ’9ùÍ:ÞˆIFÞ>^§Ò¹OpABУ.v»M*À † ú2úU…‰%ØB*¿ñr8 ¬“3˜òþõ€ÅDRwªz.á“I'n|¬|Ü â¤ 'îå1†\ñRº ýÙfN¹©”ï\†Ïàk7ÄK$6ûQþr~fSÒ¶"GiqËŒ}­eøˆwŸ/Y .’4§xóm]u ËÆHä~2v5CðäÞj¾ö ÛAÅk\YD!ó[ Çô6‰sl.âób9-·Ÿ—Þ¶R÷OW–Ö.Xi‹§œy[›îŸ—¡ª:…ü1[I À<Æc÷C]¤¶±ÏeæDY_ŸZãõ=*áei èNÖÛëE=îÉ©¦‡øžÝïnË2¼ýî€Ô6:&¤\¡Woeé]•ÞdÛa¾Uè>µKìC#¼÷yô®îudq8õ0 ¤¸$²ãíéYó_yNÐbA·¿RG¥nMq «Ç?-×§JÉ¿I÷#'-ò¨^µ¥;ÜÆ¥¬7FC$Û5bÇ8nµê^²ógÜÊr«»çš6žxÚesçåQÏÿZ½Gáå“ùáN>ö~jÏýÛ#œî­íM½¼~S/Ê1ÆjR’4m_›®*ÜV-9[d·góîñþqô‡³¸[9àa&ß”0ûÞÕåòÝ•¶æ\Vs6Ù6«6qøÓš 2值÷§éß4_Û-¿ü&Z[é÷’e¼V,“Œâ½ûáüEŒ²}²ÃüΧºû×Ùþÿ‚H?„R üBÕZïK¼q"²Úîòeþ¹yï àšÂ?[øïÞ!+}k*¸·Ýû¹T uãÝG-­)«¯SžXªj:3ðþ £©Ãà¿¶ëZ}Ã^H¾Ë}ˆ‹ã³qéÜW×ß> øcàæŽ·qX­«Q´‚ùíø×}q©ézmº]jWpù@ó€ØW„þÒŸ·w‚?g}J=?Ä7ÛN$Xdÿ–d›$cîSÂáðÚœNU«>SÚ5}Ãon >&·µcƒ‹*ä}3Ú¨&•©]jR&¶¶·š\‘îŽáToÓŽßN¹¯ƒ.¿à¯_®(°:f§áv©ùu_@Þ•çÚ·í+ øSPÑì|Asygi¬°ŽÕ¿µó$#…à|§êEUñÇí}47ÒønÓÁó›l[êK©+ý¦0¿3,‘“µãžôKØÚí~Tjw;þÅÿ¼ uqýƒ ÿ¯æHf—zúç¨é?°÷ øâoh­oö•?k´UT¿QÒ¼'Pý¸ü3á ßÅš‰5·ÓµtŠúM]˜È‹ƒò9 ÓÁ=kè„_´—ƒ>;ø6=wÃÚ´6mp¸IåqÓ#…Lc…’K•P« ™¯¨~Ͼ¾·X"Ñ,æ\¦×ˆq<®G§jìgðý¯ö,Z%©hb„F"1õP„?Já|ñãÀZ¬w–Ð_ÅZÜY˜m2ɸ®áê Ez"jV…«:²±Àeoâô®šp§òõ9äª\âüGð áî½âvñŒú«_ÌÊn$’ wñŒûwö¨ü_ðûÀ^4’óÁž&µŒÁ5ŠÅövèG÷¿•7Ä¿4…ð߈u_¼7k¡Ìa¹d“;]~ð#ÔT>ñOƒ|y>…ãÛ„XŽ©bc‹{aKgîŸJÂTè¹{¨¯Þ(Üù—ãì…´·'¸ítû™¦;È6É2ÐL~uSâwì§xká=³ê/c\ÞÈÌÌýqù×Ñ¿üG„¾'éúÖ©áów§ZÛŒIÃ&x>õ“ñ»âo‡|EàØõ¤ÓÚê“lÖª»¸õ#½pÔÂS6šìuÆ¥GÊ~fþÒ>ÑõKØõ¯XùÑÛlŽå éÈ>ù¯+ñKµ ¯±}‡=kôQý“|?¯øsÄz͵ì‘\x‚šÆÉ—nd •ì8¯€5Ïk7šåÆ•5¥Â¼220eû›Ié^&"”©êú±’{«@c1_•¾f9éŠr(˜o Ž2ûÕµŠÒZÞº€M¤kæ¼ šËxãÒ4‡»\’ÙU‚r6~ñ^ÿZ@‘ïÂÁ·rŸ˜çò«/k“æ+|£¨1+F6«|¼¶ã÷$ymU!É”|ƒ\kÛ7ÙÑ‹Ú~^yÆjзr<É ç§^¦¥µÓšY9 ÛyÇ¥OáÝ;ÍuR˜}Õ¯^ø{áF7²ÁÎÜnZå¾øHݢ éµ~í} ðÿÂQº$†ÑcVïŒQ)hzX,?3»7¾ø$Fº³3gæû ÿJõß x[Ì j¬„0ÉúVw‚|,©ŽH°­Ñ·pz`W¦é: [Æ7Ƨf6°QòÖ|Òæ=êqQ‰™„¡X„ÚÄÿCTõ; 2Ï"ëíè+©¼³ŽžØû½? çõÍ…¼® ùzûÖÔɨqÚÔâÅ#ܾ^>µç¾/Ô%ѯðämo ®÷Å/•&%ÛÝ}ëÉåLssÀÝXÞ8Õ@vy;}ë‡Ë ±ÆÕÝ•ÉÁÓ­M÷<º•ùYÒø»L[ñ ‡î;·t=«È¾#ø¥‘µ X™YIfÅzâáå1‘Ùw½žØíQê¶ð^s—V\²–È=kæ°Øš˜:ÞÎ{Õ¥°æ‰‘ðnòåcþ̸ùѪ…nØï^›uc©a%œÀ¾èþoÄW—Ûéói:’]Y†^Ì:ã¥zg…u¾³ÞŒ¤ìÌžþßz5¥ïsÄòêFÛžão ?‡µé-O-•ã¯=jþ‹k±˜I’7+7AÇJõO‹_N³cý¥l¹žùX7æ+̬´–¶LHŒ­ægoNÔb±©„Ôʤ•‰onÙ-¾G ËÞÃÖ¹ ¨Ù¦g-þëy®«R‘QV-ØU'vzW1,pÁÆæÝŽ1Ío•ÆÔM©ü7‘3ËÐ.EêyëICË-†ÇÞù½»Ô‚4„¨çÛ´nÏåNBüùm§-Ž3Þ½>¥Hˆ©`Éåüª{ûÓdFqä´[ƒ(ÛÏJœÁÊÁ²U¾î3ŸjDC1màŒpʿΫCD®m„k„PHS·suìj(c“ïÇmåü»vç­X‘qó£;~ïëK¿å>iÂËž¢‚5*,27&Ñ×{Tq¢Nr¼ÆÌÜ·'5ybbí&ÍÙãoJŒÂÅ•Ê*àãÌnüôý«,bGhbŒ`6K3cšR«ü?1`9a¼µŸË#-ôÏz®¢mò+gøjw»‹ˆŽÖ ‚‹Ò¡kmÌ[c/÷vöæ­2ïÀy~]Äy~¢¡ž"±ù[ö 1ó¼‡ B~öp«Á¨g‡jyè¸ÜpÛ{žØÍ\Ø÷_hÆþ£°ÅFGï ºgøOqô5E2ªWnÍÝ2Æ)À _xò[ ½²=êA™'%°»x-Äjÿ<*w#`íÈüè_¹GXÚ®#ufeþ-¼çÚ»Ÿ Cö6X‡ ¿îíéú×;á«u‘™–² aójô øJêà©X~ö „}+ÏÇbˆ~îÅ« 5iZO/ ·åã­s7º•äw³<¬YwÝ‚»ÛÏ ^éö¹òde#›­pZõ¸Id‡åûĆþ†¼Š8Hb'ÌÏBŽ2T騭q­æ&a*·'éXº¦¦îZ dܬ¿u¸éƒÍ’ ÍüMü¾•š¨Ò­'ÌÇv=8õ¯ Ã`áDä¯^U$F-‰šAÆzÄãši]Äæ¸u¹ çü*¨;mp ä“»ÖŸ5ª±1½ßú¾~^qÏùúWm­±HÀd‘U~ñù}EEqnr¬>\ªÕ×·ùüÙѸn{cÞ«Í B[#váÑMF[O‘¶32°É^8'µUk}²gæÛ»?\u¤Ðòª­òã-ÇAUeŠ'ÜS·c­lL£rŒñPȪ¿ìõªRÀÁ·¢î ëŽ+I¢ódÞÍœÕK¦†)LnvãÖ¥·¹D1Æ?vw|¿6æÇÿªÏ™$O—¶áӌ⤠Ÿ•û±ïR,{>gQò¶9ý+—µ`H ùjÒEþ°}✖§2…F$œ¶@¥LEË;}O"œÑÄŽ[j²…á·~´Ê##6q¿"žÜ{S–B®Æ]¨yÿ¯NUÚCÈåJÿ«_Z|•Bv2ä/¥°Í¨üÝxàV½#ŘÃd¶FÜñ[Ó²Á4ØÛŒ®Öï\½ú«¶Žìž­ÔóGÙ:pñ»0¯Öe‰–%îK(ëÿê¨4‹kË{èßw\ÚÝ3Ô×IªéöÖò †n¿/éYÑXÚ¥ÓOîòØÁp:UÂG¡-ÍÛÉ„~\ò¸}Þ:zÖn©ª­´’&ðNÐØà篽eês²9’qêŸ1ÅgÅ$š„80·œ½O¯5¼)õ0œìÆë&H¡c"ùŸFÎ s:žµ-éUó[Óø‡¥uáav¾mÌm»©ïéTÏ„ôôœ‹Ò-…^1[{¶2³g'¹¥ ÁBýâ3PÙ_ÈÃË™Ãlë]–³á½>Ú.)¼¶nZŶðN­qp²Çc'“¼p±’«ø×U7cŽ®†‡„î¬åÕ"´•WrʹÚ?:úá·Â¤ñt˦x‚ÎFù°?–+Çþü4×o>!C A¥Íqt¬¥ †A˜×'®kõ‹öÿ‚|øwãg†?¶|Qøç®j×Þ.ø³ñ~óAÒìÙV :;p‚|œ Š~fü±[ÇØÓÒ æŒÞ³zö>¤¶øÕñ>âæ ©>Áýš’2êS[ß,òAESœý@®ãÆ/éïÿ WÂÝZéšÆLÍc$©å\Ÿù猒ÇÙ@Çzã|aã{Ï[¥õ÷Å=xMa1ŸìZ}ÊÏtêø#ÎŒ&zàu5ʯí±â}DóaðÿŠ®‹ZÉ}áÿ#ì˜?ë6Ç–‘yÆà8ïWí\£vÇìy^‘GUâÚ'á¯Äû­?Mñ„~$ðߊ5M-[í–ú\†ÖDZUÎzœ}+SÂ^ñî­¤Ühßtï øËûB·ZõšÛÍmŽUä'×Ô\nµûqéúÏ/µxJØËnÂÞëOÑró0Îè⵼ΠϭyoÀßÚãá?ÅŸEw¤\ø›MûL†Ö-{Å:Ìï#ÇÀÏlã#Ö¥Ô÷¬Æé¹FÍXí¿hßø'·ìݪIcñ{AÔ.t;¨ ß}¡xZè\Ãx3œ€àˆÁóŠñ¿|Uýž¼5¥¯þüP“÷ÊÖ¥¾Ñ5›öY$£ï½1Šëøƒ6¹àưa«éú¤Œ·69sœ«ŽxÈ«„½àõ?K>þÕ¿ [Â$ÛÍrÒêMòÞnùL»{É©¾|{Òä†îëÂ^^hðÇoik5ÀÚ© ‚@çµ|—ðßãlŸ [Ħƒqoye­iÐÙGg4 Ïc:ƒó~ð ׂü-ý¥õÿøÅz•έw}q$Ãìö°I„ŽE”…sZsrÚþfvRLýšý¬>&*ø[D¼ðî«ûÉWÌ¿…váSoVÉ㹄sÚë õk™æˆ\O'™ÎÀ}Ïc_™šoü‹Æ¿~xËA¹ŠãûRÛÃÍco ¹!<Ž˜â½Ïö;×þ;x‡á­•ïÅŸµéðéz /y|Ì/·ù½¤Ÿ F<‘µÏº-|yâ3¥­ˆc“Rżg 8éï^YñóöMЋö6—êÄŸé¶öɾܖã oçZ¿³7Œ‰×Þ%ñ½òØÙÅc– <¸Çq]|z®»¨ø—PøËa®ìÒã‘–áÞ2Ç`ÎrMsÖ¥Nq³E)8ÔºzüWøO¦|ðî¹§êP¤wWVû¡‰¾ñùúõÿ9¯Õt9-­á½‘›mÌ{í«ìOÚö{ñ¯ÇŸŠkã=.Òê×N¸Rû¦Rp1ÜôÚ¼GâÂËé6þyÛíV²6Ù¡R?ƾv½9FêÛlzýãÆÖ«}ヺ¤”ØUSµ k¢Öü9¦hpÿ§_¥ÅÖ8ŽBñ¬Q ¼óøšçòBžÃpÊG̪~ëu&¶<#¢hJ¥¢ùxs|ÜwVÞÝüåÙýâ½wŸô :HŸ6Þ:cýj‹4iNŸ3±è? |"äG.6ýö7~]kÏ~è‰WËR6˜Ÿz÷oi"%„lPvüÁ{ÔnÏ ÃÓQ‰×x[Ãkj‘°åÇÍž?ÏØZié¸Âð}…WÒl¼¤Y Ú§®áéƒúÕÉîdDvíéÏqUmu7æ2uo25gÝá\ˆ®|¥‘eúÇžs]&³¨$*UÂüÃåç¨ï\GŠ5;¤C´¯%›¦=½mM-‘2‘Åø³P$\“÷•º}kÇ|{¨gvÖ![Œúþè>9ÖZ8Ù”üÃÛŠñkIduºW<ñé]J6Øà­Pà¼exåȸܫ»{šóýZà™ZV|.sÏ~5Ôø²ù$ùk.IÚ}k‹Ô'Š«Ï¾qYÔ<Š·–¥‹I²·̸êÈÅohúØšåläöÆErvâ$E\³1àõ­ m·ñÆFì¹í_?˜`}¯½F³Œlz=Ÿ„ÛP³QmÍó&ØS4Ë+Ï êkks+Éàû§=¥v `‡RµŒ$‰Ìyå°ŸJ½ñÂЋo8ù—*Ê{׆­Z2tªõ$¤M¤[Ey•püÁ„ÝÉ ^OñwÉáÏ´–Œ¦1´®0¹Ï±®¢ÇÆ’i°®™4»Z5ãæäVÅ=f wOŠWnŒýà¹Ï½EuSÛ(-Ž:‰s#ÏµÙÆ<¡–Ú>nœûÖ(„€¬ŠŒ·<Õ½Jå%;kzÔ*¨…_×üàWÕ`éû:*'dcÊŠÑÛ³;Nà±þ.xü=)Z Øg–OJ³4$ÆdpÜ0Ý·Ÿÿ]ZÑŒ™Îß›åÉé×5Ò‚QD3[¸M¨eû¸äõ¡-Êü/Zš5NgæQòûçÖ› A0/?(éþMPrö ‘$cû·pAôZˆÂFäUËFÀÕ¤¥9'¾|ÃN‚&±UÝýî;}(æåÕ™Í[r¯‘ o/qÏ÷¶ñš€®ì+ –3²àŸoJÑš-v˜[ï`Þ’êÏtX‰w/¡þÅsG K”…+’Ãq®ýÍØ2¶zöÿñ ˜CÍ—v࣑‘F€gÝ[JŒ¬NÜýÕæª\¥Äo¿5£+`ùcpÜ¿+R$nË€¿½)I!|ß™XmÂö©±#¨åo•±×ëG> "ñŸ•iêŠy’F;O!EržÊ$óO–ê»öü¨§®)È’nf;võ—­+â/—qÆï•»ŒÓág˜²Ÿ½ßŠJUYŒëýጠ“Å$p³qØ‹héMˆF#Ês·¾:•<çGŽUÝÎâݨR¦»%³@c*Ý[rç5ÏÌnw*óׯµâkÓgfØë·û½k‰Šòâ[œµÇÝÿgG)Õ†F–µm!P±n^q…ÆMcA¨Îòl”;m#Ú¶åòo•`‚žƒF™áU1É%Ëa}7tæ´§n§d·ÐÊ:L÷X—Ûµ,6W¶Ù’5ù½U:ŠÕ¿»¶³ÿGY>îH,§ŸZc_ÌbQ´F½)õþ•ÓJÚ³‹æ0µ]Fê5²m<ùƒ¿ø×-ªëwÑ#\úsµ;œ×¥èÞ³ñmÇös_@Žç æuÍu:Oì!ãÌ|9{ \.J¯E|Æ®š»ØÎRQÚùâwíÝ 7ˆ®-ø‚ÎÿÄ -‡láVšÎßs¼Š¶A#ÍgíSèµêt}_‘ûÎþ‡UðÛÇ6«ã}Jãà^»ðþâÚi&{=ÏBŽÚÞßoü·¸œ y@<ä’zš›ÁÞ8Õ¾(ø¿Tñ>¿á}&}VÂ=²kÚ…³g ÑùŸ1Æ7dœp+Ìt¯Úö`ý›t'Ð#ðÏ‹¼A4Ѳjz´60ɑɷI aH8®FÛáÏÄ™n<¤|³±Òu(ÞçQK›ë†Ô°&d¶P²8÷¬ïÒæÑîÐß^(ø‡¢ü\š/Ÿ,æþГn£©Eª }JI1ˆÜæ>:Îz×¢ø/ÆZv¡â 3¾Ž?øŠ+6:Ž by#™ñóî9dúã=«Í´ÿŒŸðN ßÛÚèšûÅOøõÒnñfÀ 3Ë+aO\nÚz¯âŒ~ ´> ømðk]kí@2ǬCâ«ÜXçæýãç±=ª{»ŽRm^Ç¡x¿ö]º¼×Z÷ÇÿaÔ¾Ïv×ztš´Òù_&"ÄÎ7`“Xß¿fxB›Kðf±o£ëÞGŸ Œw‘Çç²ô(ápŽI¹¯>ø­x“á¶»£ñbûRº™còtøï.£½a"ŽYÊH×ׯ¥x^·ûaë¾!ñuÆàoÉÅœ…çxäŽVºô^åzã›åÚÂé¹ë—Áèm®ä·ñGìá¥Í3ZçP׎¢'f:e~è>ž¦?Ç?þ\[øàþ›¦ê:jÁösIÕ­cÿG\eb†#÷°9ÝÔ“Íy©ý¬¼IyzÚ]Ž‘¦X^2í ë‹¡$°õ(ÜŸ¨Õ‹ýkáö²â¡>«&µæƒ iª(µV+€Ê©Çâj”» rì}áï|>ø¿¥G⟈þ ¸³—P‚hŒÉö&s·&ÐûÕÄø¯áú~ƒkð›Ç7BÙÜb–éŒÊ½ãfþ1žä×ÏºŽ­¤ê>-]KâŽoî»™-Ù56•Ðç•]ƒhã·Jï´Ú‹áW…ãQð‡[¾¸»ó3©lo›À˜Úsè>¹§~är{Ç]ãhw‡ Ó~-Økþ#[‰<Ó7ÙrÖ²c&Eeì}ë•×|)ðçŽÒmü:º¥„Ѹ·¸“sH„u*G_Ö´<ûWê^/Ö¯<+®éú¥Ôц³‚Hdüç;@»Ú™â?†:§Ä¸ø…ðkÅòi:½¸Æ©áF<Ù;´gî•«R3”:)h®¿f_ÚKøËðÀ]6‹¬XÜYKä\“ä†BªŽ?Ùj‡áGÅ»?êWš·Œ¬!Óõ'ó´írÝP¬7‘ù_Ù‰Á÷¯~À_¯ì£ŠçÀ÷ÂâÞ_6h­ìË¥Û¯P3Íx”¿ µ/…Zøzâ_øŠ÷þ=eˆ‰,Ëvõ<ñíS+Úöþ´Vv ´½Sâ [ÙøYéfSuou81´qõØÞ»kåÿŠŸð¶ì¾-ø®†wò.—¥³É«MÃË·ÛÊ–`pO©¯·þü'¶ý›ü[—¬Å5÷‡õ¹ã@Ô!ÃÌ3’c`>îþµò¿íKð³âÇŒ~;7…þxj}/Ãþ þ×¢¦!i/—þZÎÍ€ÄðA'©FöîL}ÝYä_~9øÞoxÊÛÀóÜCu¨BRök¨LfI‰ÿZØã¥}{ÿ¤ý¼þ"økIOÙÿÇ×Þ$“ľ}µÛ_†“ɉ•ôËwúWÆÿ<ûf| Ð øk©xfâ×íº„M¬Ih«8Úpeã¾àq_yèß4ÙJßMŸHð…ÂøÉ|3Z޵wx«a2Ïʲªî æ€ØÆ8£Ÿ—áÄ}åÆ?ƒš‡†­|oâ Oì³x3J]ûJFÛ™¤$kŽ­ÈÅ}QûÎ|ð[N}]mã[xZÏË!9ÁaôÇZü}¹¹·ñ™uã=ÅR\è¶«««–µ1õSh(€rƒ©öì3ÿ øoðñ¦øi­Ýj«©ibâ]Ko̲Áü#šÒ2‹–¨‰F\¶GèeþŸàx43áf³BUD‘Â9Á=I¯›iïØo¾4ÑõÏhS-¿ÙàÞ¿. ÛÏ–?ƽcÃ>)ðÿ‰ä·ƒUÖü=­#¸¶’¶¼£?Ä¥tš÷ÄokWPøRm>òhd¸U’e„ì_v>•j4ëEóYtA T§/tüoñŸÁÿxlË«êúż-+ÚH°g¯¿Ȳ4gj…þ÷Bµú©ûp|?ð/Ž<0¾Óôuk/÷-j£!½Å|ñgà¾ðùbŽ$ºó6ôe8=}½q_7ˆÃÊŒ¬ÏZœH¦Ï9ðî˜Ú…À m·ø•NG·Zõχ:‘ yWëé\O„ôy÷«%¶7u^Ÿ•{GÃÍEä`¶ÕûƸï¡éah¾k³Ò>èQ˜Qû¾]£¥{WƒlU’>_—†õ¯;ðœ`U[¨î“¸ükÕ|;n‘X+ªn]£ËãJQÐõãwC¡·›d (VÛ÷vŸÖ›¨Þ)‹j7ýò©¼Íh–Ûfßj(„Ž[œ÷ÆkE¢3uÛ‘°xÙ˜6oJóÿj¦6}’²¯ÌsƒéÖºoj!i¹A™¹æ¼¯ÇÚéȱÊß{çR¹ÁÇZé§–¤š8ψzôr9ØUþlý=«È<_«}¡·›­½OËé]GüLÛÚHØÌCyå^kân=’!]øàl?:è•—SË«>iXÁ×ïFó+nä}kåyQ³/ðá»ÕË«ò¼l­†ç,ß­GBxû§«c‘ï\u$®sË]L-íOàÆìqD~e´ÂdwÉË*ájaÍÃç“ÎÞ¾™¦”Cûß6+'(“ËÑðãÆ3i¯Ür¼ •FqíÏN+Õd½²ñfŠö®+ź9:ìü¾•󆋪ϦÜùÓ«l'k{¨ïÿׯKð?Ž!²U´iTÇ2ü¬•ôÏ­xXÜ+Œ½¤ åM´IâO Ý\B×0®'Œc Æá\n©nÖ÷;™W•_Ä׬¶µg¨Û°E`Ñ®7Œe½Íyÿެí⺒öùdûʃÿ¯\tj{JÖkcÍq—µ³<ÊòŽf2;|Ý1üª5ÜÃå} 7Ð~sQ…¾ÚäȬ¡¸ã¥PuFýëÉ…ç ¦¾¢:Eœcî“$b(Œ°¶ï˜îÏûS‘Âqž»qÒˆÛÎP° Á¹`zTÅI»#ÌÛ‚Ã÷O¥2lS•LíæüÃä•3îuÚk gßÚ¤[uóYŸï/n™ª÷ âO1 n?2õ®lT¹iŠ "2ÈûX—Ö4Qmò"ùƒ/ÍUb§uUm®~öW¯°®ŸÃ^“S]ÓÆßôчµx¸i~òò{r¦sL¼¼ÇÙw8ÚËœvþUwOð%ì«þ•ˆWwËÇNkÐô¯ ØYB1Ê«ÎãŒ×wðëáš¿†u/ˆþ#ãÐô–¶Ç“<­÷c@~ó*õ¾´êJÐDË™ksÃßáŒD·—32¦ÖØ6Œ“Ÿz«qà[-!'·–;œæ¾…ð÷Á}oÄ^x›Äú[iö²ZË-¥Àùá…pg¸ÛשfÏ7Ñüö‰ŠGr»‚óåÖµçÂýJÊÈM%¦Ñ2á>^[Þº¯øSþ5·ñÍ÷‡4ë –K[¡ü¥C!8ߊúCFý¾$ø¾ÇÂö7-ÄBKE–àí>J*»9½·=xí[QúÅDô&U9w>#“áÞ¥£³M$?*¶7ÿ Ïõ­ / *•K–þ9þŒãé_Q|Eø5-ćAÑgd³½ºí%®$FÚÍŒrkÏüAû>ø…<~ɤãs6ÔoO¥QÔ­n-%ò.ìÚ9#b<½üÇÕ[ü7Ö¼CãdðÄz/öZ²ù’*ÂÅ‘@Éo˜äñÏ>´ï0éÚWÄ)´½)6Ãk pFq¹¥`ƒ,Ø÷­ý£vm(F' ¸óY¶Þv«¥6TrÌUŽý§œç·A]Ö¿ð¾ûIÓt˜¯­dûuõŸš¯ï›{á@½ÏS\Lí$’›p§ql.Š©EÇC6ˆ¦;JàmP¹l¯·LýjŠf-;0ÃpWwO|Õ‰aec·n{ŠlÑÍ ¿£}ÞFHìj}Iå)Ü/ï·«á‡hþJ®ðdªä¯÷‹u5jáYÛÍu_½Œ¯ðŒzÔS¯—+ù»}î¹ïDEÊPxºXnýß§¥FÌQÊ2n#ûÕjU%šAÑ´m(Ü ®mÒf,bÇl–ëO™­˜ùLØã,Yìw K±2*KÛ,ëÒ–åÕWiÀŒ¹¡7ÂAtÚ»³¸þUË{²b7?; ò×’¥IÈ8Y0Û3#cŸjj™AUR3›=3Oe‚9ôú†Œ# ¬Z58+– Ôû}*De¶ÝÇå8ÛÁǽ6¸c ÉeÆ}£F¨Å[?xÿõ¨øtƈmwÆ]Ûp ¸nã>¸k‹ˆéž_™UÍvž!‘Ãʼîè:uÅs6úT×—bah]w|ËØþ½íÃ붺šî5‚4hùÉÂôükRÞü@¾6¯ÝÝ’yèjO³C§B†R˅ü©ì2k&XÞæW{v;ˆë·üjãïlm+ÇVIs§¾¨|Ûlª¯Þfn¬íBÒþ8÷Îdeäm Õ«¡³ðõÜ¡aSxUn^µû<þÍ>&ëÖöz&cqMµ¾Ô~÷øìap’œ¶<\V-Jê,t0iš¯Ø4;ãòð<˜+Ìþ=þÓ74ÆÒ¼áÇ×üC#íôû52ÇûÅGsâÿí ðËÀÎþ»i¯¯›™­,XîÕØtξ?ý¦?l nÞÁ¼ðçK·ð=µá2Üê³mšhÏRJœ€}+²¶#“H´e‡Ãó{ÒGuñ[ö²ø£àïCÅú ÅÖ½ç(·Ð­6˜ËcþZ¨€æ¼—F²øÍûOèmâO/†ô&Úí¤Ö¤Š×õå:'íû;øGRk‹ø5I§Æò^j—·¡,9Â!$û Ëñgí «üqÍ÷ÄøNŒ^¾išf…~`6“„fÈÏ= rÆR–·¿—ës²É+GOCëÏ| ø+à/ i~:k…h’i¼CqûÈbÎHÉ#9ûª ’kæÿÿµ…´ÝsVo¯*üF´µÆRÇjÑå$†âK‡óA=0\¿øyñ'TŸìŸnt&dòWòáš*į#ù×ÏßðÒ¿ì5¥–Iy'?g³†Tíœ"ã8îOÉÿjÿø"ý_Çß.´¿5·\YØÎ<ç\ò$ëÁôªó3q‘õV‡ð¿ÂÞ €Ïs­YkzôŠZk{sæA EQÉÏs\Ž·£hsø®ÞËÆš­•ÕÔ2ne‘¤‰ Ç@n+’ðí‹¡øÃòY|ñ6£çîÞË H&<{ŸÂ¶|9ûG]ø×RAø…¢ëR^ ¾êÐî`?½õª÷-ª'›”ô|)k{k4þÑcºo'1¯ÚO”çéŒÿJà¼Kgñ×+ïƒ5@þh´ÛPàÜ"º[=cÀ–—$Zx“RÒo”åb¸L¢¯ûà׫|8ø§â¯ikw>²5¥¸]ÑG«[† ÷ÏËôF7#Ú¾‡€ø7ÄZóxÎ]âv³¤l$†`΃ÔzŠúá7„¼Mã­BßÅÿô8u+[MÑë+ÜGÓqN¼w«ZΕðÛâ´_ÚÚ^‰o¤ê1°xÿ²” ÝüCç5Vãáo‚íÞî_ÜMqoh/ÌA¦ŠCÔ¯ öéWìú¢ý§s¸Ôåø¿ð£L_Ÿ´ööãìÚ‡†¦2«Ÿî²ä {\-Çí«üZðmÝω´Ôã[Yß‹`Ì?Úbݯ¥y´¿ZoÄókàŸíanfßq 볤Ñã·8ì1^¡aाѴ·Ð>ø‹T†Xݵ8`D×$ó¹,V²ž§E9Dç|MàiÞ‹ÁéãÔ5‹]NÝ.æÎCºì &}r1Xÿ·ŸÚlôÍKYñObðî˜×?mÕ.‰’ê|ãý^WåRÄõçšúKàLº^ƒáýsÆß>^E¦ÉÅ£Í5“;›À0Á í_ïgò¯í¯à-ãÄÞø¨u dVk©5 +Ok9mnJà!R6Ë0 g#[+úÔ4›>~Òk¿ Ù|{·ñ—Ã_x¯ÄZ«>—áû†Í­æÄÚ‘y<åxÉÏZúãöŠý°/­ôm;Ǻ¯ÂÝ+[ñíÏÃèî|BñXm‡Eºxx‡ƒ‚èƒkâÙ/öKþԵѵ[›ï¶j2YØí·+"Lä¢9eÈ#œäW×þ&ø#kû;®¡ÿÝñ7ŽäÖüâ+ÅÇgh6Y[É(l<Äz'¦{ÑîÙù™ûÆ'ì%ã?ú-•Š~Óÿ ü!ñ;Oý‚|à=Ç ÞZŸÝkú*Of—Ð01$RŸ”l|Ø, ·­eü|>,øñ¯|×|O£êñëÚ ·7Öz.VKk¤}Á׌.…Òª1¾ßÓ&Rj÷>’ѼUý…ðëE´ðv¶×ÚÃ[FÓ[MyÄ‘¢‚d\ó·ô¯Bøqñ—ÆÞ3×môí3Q{·Î¾¶óëô¯•þ8øÅžøkáŒd›:é´Ø@¯™=±ÍrŸ þ+k·}Æ­k­®–.¶Â÷…‰•ÐppAYÖ•¤’èuaÚåÔý-´ðî‡,Pø‹Å~%¦™p¦9m…s´‡ìó |WðRø^ådºVó#d„n+é^ðCã9×|©x^ÊîidÓÔ2Ktß¼uüké?ٿ㿃u} ×ÃÓL¢ûýR¼Ä[Ò¹*SOw¹Õ#ãÍkà×ÃMmn‹4ËÃFz­zÂý:Ö„w1#^¦¾Ãñ§ì¹á/Š JúeŠëvá,_t×â/Øóþ;sy¡êËÛhUÃW•S/ÅFòQ÷Qèas /7,¥fp^Òía—i@wzWq¥„¶·_•[ûÉý:è<1û<ëShqÝÝLRãû­Ž•f?„þ$Ón9ìdtI#éŠÎXjÑŠ“‹×ÈîŽ;'nu÷œÝÜÍo,U·zÖ\ÖÒÝ~ñQUOŸµu#ø}âMɯMƒH>có/_s\mŇŠ'1ØÙØI,RÉûÄXÉÚqÖˆÂQ•¤‹•jsá$r><¸‚Ù¦K9ÉXþëg€ï^+ãßJ187mÿ9¯ u¯†ž0º´’GðìÞ_–U¤hÉ9¯Ÿ>'xÇZ)“ÎÐ.$…dXD~^yçé]KÝèpÔ«h™â¾8Öw–F* 7Ë´ôö¯6×u3,ì\Ÿá%}85éÿ¼®FS¦i7lpñ¡‡'§Ƽ›\Òµ›;Ì_éÒÇ‘…Þ§ŸÂ±«-t8%&2΋±>f9lžƒÒµ¥ÓþŶY-ƒ3¯ä+KÃ~GÑXž-¯%AL†ôâ›i÷›¯® ¬2Û~Qí\²Ææ,p·ÚêÇnÒ aA¦¬&a½ÐõÊ(ö®ƒÄz4QZ[jVsy‚N& ¹ÚÃک–³ª£;C·øCY¨ûÖ`ãÔÊerr…Pßœެ[j7Ѝƒt?y¾nzðYºÒç·…ÝÔ½¿MíJ®ÇoçÇøÑ(ó+2lu^ñ4ÅþÃ爿*–çó­ cÎÔ-Ù’×ændÉëÅrþZ\&Iøu'Waip€‹r§ç\m^ƒùó^zq¥‰ºêyõ½Ú·<çPˆFD‰8êËד%«À¸VÉ OÍõ®£ÄšsÛê2D¨ÃsnùV±n,ËÌÁ<¾f-Ô×µû´Îè¯våœ1“½:ñV£É¥QÂöÇzwØ&È ü,[§ëW´ý:èÚÉr¬ÅUŽV1Àª§;è;2£'Ì Ë““Ï44)'Ȉ͆ÇÔÿ…Y…÷c ¸öÑGW#nÕÏÏ£Ð\¥v…YL¨Œ­´¸p*Ü +ˆ¬ØÈltï[V–—7ìÉfÜqµÓx#ÁÞšåá(‚ðÆÏòý—il÷7çã%îÙ8ÜÄðçƒ7"ÝüŒçÝè;‘í^—ájW:vë(æÈwSŒõ®‹á_ gÄ^5³¶ðΙ$p_^,6ö·“*±ˆ¬gí¹é^½â?€ö:WŒ5o_Y3hvöi—c´n¶SÁU#«yI¯?ƒ­ZW·[û«sËtß¾+“ÃÇ[ÕôˆþÚ¦='`¥Ÿv1× ž£=+ëÙßྩ‚×Ñ<í¥·“«Z˵Ò6eݾ2F7)ÛïR|<øyk¥|Óüu©ßIk$S´úu® œ[Hc1Áfç’ÀžëkHøßàÙÓá|~ñÞ³%ã3jRXF#2ÜÈwÆ9àc9õ¯³Ë²Štýé­ÑÉRNWQ$ð÷ÃU³ñ<ÞšÇíWZÄ+ .4ÑFÀ—Þze”.èkjŸ±¶oá[éÒ#GpÑ4Ò*âH¢ –Ú}X u­ï„|)†5/‰ÚÅ„1…oc·I8‰·PÌw`àvãÖºo|}ÑõïÚøÛÅSÙéo«^ˆ-4øî’I#ÉáXƒ‚ØäÓ§jö!€Ã%ïò•K« ð÷ìíðÇÃ÷qøÓ\ðµ¼—–Q…¤]ÛP´‘üOïÍtÖšg„|=Æ¢÷_g[ÉžqçgägAœgÙqÇL⼫ãgíy¦ü;mÞÒšêûS»©¼}¢ƒí2¶ã–;y¾µæ>&ý«¼®[ø÷\µÖVòo XµåžÝAÚÞÞFŒ,»òJ³n8XñŽ ÷®¥OOD–„û9É]³èð÷ÁF(u]:kFŽÂñ€¡oß¹îÉlóL²ýŸ¾êQ[k §¶ÿ2Au,Ðyop­ŸŒ «è ø¿ögý°üUã}#þOƒ ÛMÕ®ˆ5‹ÈüûùKË#Hß*cøW rJõ~Ó>,Ó´©¼*¾gÌRyw:uŒ2LfÀ¦–`¾YV"(° g­J§…©¯*û‡*2§+\úR/|>øk¦gÃZ¥‰še+"B#©Éà¹ê}k‰×¿i_‚žðž­ ^üTÒo.¬íä7Ò-Ò?“2qÁ<í¹ó?í'âOŒþ4º69‡IÒín<,·¾mBÝ$} rÉ®mÚ@Ä%ð9;¶ŸQ_,øã[ðw‡tË_izE”–,²%¬žd‘êÚÌÛ‰åÈ µ‹|£i Ï9朥 zAX¸ÓSõãã÷Áý?À:?ˆmM:LÍé-tbQgé·‘ž0F*®‰ã¿„¿´ö~ž Ó4bw=×ÙVHÖ»¹\»ûŽý2+òcáÿíaâ‹>.o‚~6±Eð¯†Um5 }b9#ŸU¸˜H»`™HÚ1–6êúçöøÕð‹Á~ ñ‡Â_…š—ö”2Jú?ÛæQï 3Ã&_;A8Èä®Z˜Ë›I*4ãmÏ¢~!~Á¿ õU¼ñ¶¬ú]î­cZÔYD’ÍÓ*§($ƒù×Ë/ýˆüáψKªøvçXV½FÒEýüVh‘Îî‹2´.p:Œ×©ÝÁJ|1o,:ˆ,¯/´7•Ò®¢óÎÑ´m·s1<€qךóïŽ?‰ü>º¯á­6Î?í(ÚÇEkqÓe@pÜ~ÍÉ%œt2qXÖ£‡’\¨)Ƥe©·ðÛö{ø!â!wñsâ·Ä¯Ã}0’ÎêÖ=DIˆå ª !J68Êâ¾ký­?dm'àŸ…tü>[«ûzÝ\\® sÂEzã ž‡Jëü=}áÿ xfÕüqenš]LjÒkÈ%ͼtc¤ÜþRxùŽ;WÒŸ uíCöøuà/éÖ—i“4ºMíƒCö˜¢!˜4Ðcî•Ú õ?•a,4*Si«ðësòöo \xfëí>2Ó¦·ÛÉ“HIzmÝýÅîsɹ¬»Æº¸•µ)P1Ê©ôÕöçůØâ Þµ×®4 êöá›ì—sß5ºÅ8FG;¤8è­…³_$øëÀÚ¾…®]iÓÞÃq$‰žÝ³^Ààsì+Ç«Ft÷ØÚ2•‘ÇËa<Æ,»¾äݪ²Áö€ÅÃaG_­k=¼¦'6û£…•ZEä#ÇÕ3FØ(­¹ÊyϽcÖÆœ©ô3nbgE([oEôÈõ¨Dlo›¸eéW„n/®q÷E2ÞÞéÕ¼’ƒæçzÒæ'Ùö0‘Är—DÜÞ¥±Ÿz ŒÍœüßN@§}‚°ã‡zzìÞDÚÚ+xíéq"Qµ¹]¿/ËüêIT;ª†eìÓ 3zJËýîød‘'ÆÐßÝÏC1±ïm»{î?1Kj‰¶(ÛqÉéÒ¤I„ŽÎ£|2žƒð¥Û¶&/´±‚š7an†.´þe±tŽ>éÇåÇCUô˜Ê ûNØä<Vç•sVI|‡FIøî¬Ÿ³LmVWŒŒgnGJÏSÖÃÅF|A¨@.vÊZL™Øõ§iÖöÍr’]¹xüجýJ ©.>ÒQzaT㟥uÞð=Ư*ÜÝé·W7 µa‚ïëŸÊº©«lMIG©Þü ´ÑüCªÁc>²¶,dD¶ªÀŸÊ¿Cc Üø!¡¿Õ¼o£€²n·Ž=5D„{œw'Šù—ötýâ×îí|Câ- ìpBêcO;sÈ}Å~™~ÌŸ³ïƒ´Èb×.´Û!O*…û¼u¯S JM¤Ï+R0Ùë¾ ºñ¶¥¥,ú´vð£GûƒÕ˜z*·¾Ë èWj7ó´—I±äYˆÀüø¹}âm Kœi­¨ÃF¹hـظêkæÚ¿ö’øKà­E´{û«­PeÝöî¶Fƒðê+Ö­8Ó§Êž¾§‘B3©RöÐã¾&|FðN—¡\x{á>›o}â+™JI{¨±Xáäó¸ýò=qí_ ~Õñü+ø¯[ë¿>!ê0ñ33y–:t¸·‹=˜ûW¤|bñ·Å/ŽI©§…%Ñ´íí“ce:Ú§Ê9šW8Î==kãýWá÷Àoøêã[øÁñ¾êᢔ´Únx×R3znhüëÏ“¹ê8Æ:XÂø—ñÂßCÐä‡A¶‡J›X™„0+o’+d?{Ûqüx® /|lø­`ºÍæ±qá/ ,žeöµ«Ýç UsºFb8ÕÖøöØýŸ<7âKØþ |ÓõmBET][Ä’™:m^ƒèyŸÅŸÚƒâ¿ÄíB;|H·ÑlíS)—§®Ô‹×š¨÷fm{½Ž›Å:d’ØÚèð“\Ç¥ ) ÚÙ¬1•þü—íÜǾÕ"¸oü/ýŸ-¿yÝæ¥qŸ¿[[âѱç!Ÿh_N‚³­µ?ÃxºŽ©§ëþ'¼+¾­rçl@{ËÏJËÐ|_ã/‹ºÕÖƒá*×CðýŒŒÚÆ¡ ´‹ÿ<Ôž™íZÆ>f<Ý-~è:ö¡u©®µ¡è:6žÁš->6’Y÷ZCÉoa]—ƒ|_‹™í>X\ÚÙ¸Šñ­Ä-#ãýa–L|¢¹ÿŒüð’ÂÏGÑ›O¼¸··ÿCÓ,lÖŽdsþ½+çO|gø•ãÛ¹ZÇíçqûö!G°VŠ=úPñßÂ_‡Zójin¾ ׌Œ÷Z•õÞcWé…üÜ×+ã/‰çÄ[É5mJöåárÃE„凹ϼKáÿÁ߈_µy­SSe™WÍšy$ùaòIè+¸µ²²ð³¦…¢ø¶ê_!‰½¸·õ¬;éNPå $_ººø§âm+áïn¬F*ͳs/©f=3è*m;àuæ’«©üN†ùnääé6òù×÷Æqù~ ~О)ðµ×“¤\†8+æH ¸QV|7ñâ-Ö¨.|1f.&™³4źNsßšzØ_sÕ~xcVò¡ƒBð¢è¾g6òÞ/•$J;ó÷} ðïâf‘à[U±ñæ­&°Â<ÇW¦xïán¿46žðÔrE$~c%ä?½ŒçÐóVO„¼púÅ׈ÿá#þÑ·Ž?2 &DHTqÀ¿Ò®xCáoü[ä·‹tSE¹†x² øí^³/ìw¢øæi,]bæÙvÇok3D¹úzÖÑ„äŽoi³å½wâïŒ|)¬cÄÚci¶÷nó-a`ÊaŽ+Ôü ãÿ x‹Â¶·©ñ[^†I•ÄlÊžlG=vœn­{Vð‹ÁþÖ­ìþ3~ÏzåòIhf—tñƒœ1Óñ®oãÏ쿦ø·Ä~(øGàÏ/K´¹ó&šÚ#[Œr»;óMQ”z‡´æÐÒø+ð¯Æž1¶ûnñS@ñ´rMÌšœ©c5¬]Ã,„/ÎkèOÙ×á7ìݤèúìö¿,n.4ø¦kË«{å‚;iø4É>fãÆåú×Å~>øàÍÄö|uñ.§á=6îÚi±ÅÍÛï(ÀPqÕ«†ñ‡Ä¯ ü*µ“Nøeu¯ÝXɺ!6µ…Àò× ÷ŽqŒ÷¥)rÊÖ7¦®gý²ÿi¯Úá¯ÄôÖ<%s«XøGO¶) ¬Jnmâ€/úÐàrýù¯Œ¼Eâ/ÛâßĨoþüZ¾Ö,õ¨üÝ>ù—|0¦ïdY3{ Šï5OÚ Æ¼o+xïûeu%Λ{&ìä’C)û£Åu¿²ÅzòãÄz7İè~Õˆ€G4äInÒ¾d*Êôã¥aö·:c+&­?aO†þñ‰ü;«iÓuMKÃ0½Æ©ãEµkh§’ûÏ, .@à|Ç¥xí¯ûWÜßx£Åž4øƒ¢hZV›â}NêÕ$ø¨i·SIðv‘uxѳ Ÿµ\ eä –<ž•ÄþÆÿµT>ý¢n|qñ"[jûŇîcŠè·Ùá-–cÞ¦ÿ‚¡~ÙüVÚ‰ô›vðƒ4Z|ÞY¯ËÔ(|¤(è:WÉ?¾*üFÔ¼s¢é¾ð|?j]J9'¾T%™AÉV=…iKs/h–Œý¯±ý£4?Š^†_[^ÙØi·WfH!í’ßñ±!Tñ\Ï…¾5x>óÄ0øÒ Ùè¾·••4Ò Ér£9úq^!©|qø[%Õ÷Ãoë/qu=²]\[Â6Ç#•8ëƒë]?ìS'€þ'xúo|DÕ#þ͵“ÌQy1óY8ÉÈÕKÝÐúŸá7ÄøãÄÍâOé÷b\‹Ë“…u=ÇjôùÿfOxoU‡â‘ñXm£ýä6ç/“Óùמ|%ñ_ìýá_ˆ·žÕ¯ÒM&ÚEs67/ &¾Çø)uáÛµ6w6]iw ²Êé£%SÓšä¤JÑ…Ío |gøà¿iþN“y$²¸_Þ¡fÇLñ^õámw]×|4·ºö“åI"‚—Û©«ð¿Ãé¾4µÔ-õ kÍ&5ýå¼ÑŒÆØàסxƒZ‹ÃöÂæM6I¡oõÞHÎÑô®Š*\®MÙZœ8‰ÆRŒb•Êþ½ñdwÍmâíü–¶’þFºhØ|‡p¬û;­'V±‰ ù£š<(Ç@GéUaºðÿ†À·›aVÚŦ/µcé]tåìâ®î»Üá”}¤´Vf£ÂnÈžÚ?FëUíô]L›|V£Ès¹R›¦ëvZIx.Ñ£F Ün⣼×ô˜ôÉ5ÔâÛ³r³8§ÍM®e«ókò«šKmm$;Z炤jŽ«áo jmkªh–²Bßyd„\.¯ñÒ'ÐÕ¼m õä’²n’p±!^¤µbÛüp¸ñÖ»7†m¤ŽÕ¬ôƸ¼’€ÊqÔ®:XÔÄáùlÒmùÓÂb»XìÓà·Â BçûE<§ÈÊ6nòF+Ͼ-~Ä?³¿Ä+˜n5/ ÛØ¼Yýä( ½ð³ân¬xFaaãÛ|yÎ#i÷žäþ5áλ¤x–ÓVÓ¯üa&°a‘y¸P¦-Ýüâ¸êKR*. çB£Zœœ¹ž‡ àŸø'çÀëM>hm‚Ý[»0(a^ ûYþÀšÏ‡,î.~é15«’c†ÝyÀçb¾À×¾ xkàݯٛI‘VB­ˆrÀ)8,}oMão kd:òêÉhÑîÛ·%ó\òÃájQåZHÖ51Tês=S?u¿ ø¯ÁËi¾#³š-ÜyrFF;VMÕ¯“3,p´Š ÛÁ¯×ï|.ý>(é×~,ñf‡cr¶›–eòÀh{qÞ¸›ØgàGÄkhuZCžßx,`æ¼Ùeõ¹Z™Ö±Š÷“Vzö?0tw˜\à7îÛ¬:qTõk –é–Ø± Ü3/ÿZ¿N4ïø&gÀ„¾‘®õ²+æX#qÇ=­+ø&7À­JÎhlžefáfî ËñSøPKB/_Èü©›ý@‡;£nXZê¼/%¾¥|`ñ5öðwáUljü+©Gqia¬x¹žY¯0‘Eäº>匢‹dggNsB”e`Ö2×þúsÃþÒ!Ôlü;û¤7z]¥Ôšv¹«]ZĦՆFãM ±›®à®¢m87ÅŸé>ø×£[hØ v-¬Í \Û7Íuuºî7¶U\íXÕFÝÙÍYÒ¾!_ü9øK&‡à߆ñÃ>µ§ÚÙ_I¦Ûù?g£´’Åög<õ'rs^Uñ›ÁšµïÅ=càßÁo è~ú-ŒzÇŠ/.;­V1ƒo )i`‹!Ë1ÁÉëÐV·C9/zƯÇÏà?já¿Ä†pø“]ºŽ;]_â/‹Òg‚ÆR¶¨¾rN1BÑíë’HËxKRýþ"xƒÃ:Ä*oˆõF¹‚ßÅž ðíÕ­¾™mî‹ÜIv‘¦yó[ù*0F{o þÉ_ í$ƒâŇìÝöCZØø‚ãVf[‡ÈVŽY¼£ã—ù°1Á"½ KøOûXø¯þ§ŠôhšòXËá¿ÇÎKG6ñ¼‹¶FwÊâ!´ì@ì_ûŠ9<6¥ðÛྣuñSYý³äðê™ 7ÞÒôÉc\++­–åS1ªÙá²1 WÔŸµ=ö£Ë¦xgá—„-n|Q¤„ƒKR„Íkdœ4pH¹Á`«#+0;"¼»öá¼ø#ñ_OÐ<q*YëÃæ¾­§Æ"†vÀóãF!‚°ÚX:ýk9J1ÔÒ––*ü*ñ‡€ÿiߊºå¼Ÿ Ök=;ìïg¯hzÅ´z‹Ûl ¡ÀE;¾b£,3ÏJáÿi_Ù/ã¼?´Ç‹'»’ãÃÍ n¾ƒE–âHT`¡SlÎ&ïFPrÄqQü,ñ—ìíð²õ|QÃxvæâ[¹­k‘·AÃ#· à†–Îx­¿ ~ÓZ×˶ÿ¬lµ-kI[«tPñø·†æÞê=¬ñàT¨ÈÜN4sEÅ&hã(ËÝ0?iO‡^?ƒÄñøÏGÕ´ë]3IÓÖuÓ<]oÙgÞe]…Z7Påa¸Œã5ôWì£ûHü2Ó>)OðN‹KºX!…õoGW†5¸xUÄ1£fYTä±8;°: å~8hWß4+¿ ]ü/Ò×̘ͮIu'Ímo&pq»÷HÀ[ƒŽõ_áf·û8ÞüK²øcâ„éþ<±±·Šâ[75”©Kti[b«•# ¥tÁ{ÑÕBx^[Š_£³º´Õ¿±tÙ% -å¾-îÇîÙ‹JcÓ\|©‹Ôäu¯˜¼{¡é–׬kMôÏi-ëŠÒó¹©jy^£aâeµ}Fëû7ÌtvöëÌqã¹®ƒá¿†¬Ùy !e½o~á=«‘:ÌwV^Uì’"ãîÀ›Kzä×[ÿ ›S¶¯^Þƒhó$oãö·z›̶– ûaÈÝŽMV‚W9à·‘¦·ðúJ½HwdwükÑ|#Áo»LÔ®ôÝÜ:Úa3Ÿ ®Mc_‚O6;H­ãòÀÚ¿úõ¥a©xN5[×Ðn ÞZò‡Ü z月öm(xnÖ&¤Ÿn“?1›ïçüýkѾøÖûíz ä6þwD²>¾Æ¾sÑ>'ê÷ŸøFnc\9’zôW³|0Šm¿µõo†WÖ¶¶ÃuõÕÓãDÇP{ý:ÔÇ™³ >çÔ> øùñimt^þÞòÂfãûg–ѯMÊ¥} ðçV—À·_ðØx…m­Î$û=Ñg ô××̾ ~Ï“YäøHÃ’(XnuFÜ®ÙåWû¿{Tþñ~«§Ã­¶¹a>›·Û¬Ÿê@÷×N2ßsŽr×T}¢þÙÿnmmãñ‡‰ôVf]ö_h¹Úb9ùWÆ?*ô/ ~ÚºŸ‰çºðV‘¢ZÙëW–-_ì(ÐÆ6ýàÛvõèHâ¾}Ã\Õoþ—jÓÚ®é?ÖgŒdãÎj¿?h¿ É/„|%ðÂââÞa÷­î‰ý–qÆßÄUJs[•7cî;¯ÙÊ_Ú7oƒ>3|[‹Å—WWÁÚ;K䑬ýá‚pAŠøþ q<ñRk/‡>»ÂZÛ5­¬Ìªì‡d˜þ&>µÕèÿ¶Äƒz ÿ‚|¶+ñâÜÇq-«*ÛØFWî+“‰$99¯*‹ö…ý¦u‡º•üþ$Õõ›{­ºš¤Ñ´n®À|ÜsÐâ¹å.cxû§)û5øëâNŸ§|G×¼w§Ç5¶ýCJûFÖVLrU[§<ƒ^“ðgÇ:/ìõáËÏß¾[ø£KðÝ‹YhðêWŠº}”îrõ•ƒ ƒëô® CøµñÓÆ1_[Ûéö±j0½®—šÌïc™dnyϯá^Eû]X|MñW ~κnµu¨\YË%þµ ›(à+Ê{KzsS˳.2Ô_¾"üzøƒá¯Š^*Õ-áÐluqug¡Ç[C6ì¯Ê?ÖcóÀ¯¢5Ïx>oønoÝ»x‰|3.¥ã ƒ’‰lÒÉ*"ǪH#Ü•ó/ƒü3àï ø«Áö~.·Õî4Í.Ìÿcéò&T¸ —zF=k™ý²loé_&ð/€¥‡EG··ŽóU·µK‚#Ëc×býÜJÚ4ã%cž¥IJNæ·íñ&ËâïÃKáE¥‚ɨ z+ûF“£ïlÅTŠôOx'á¿ì/û=i¾#ñÞŸ%׌5ɤšÚEŒ2Cß”W’ø?DÐ<kÆŒþ"[½[Sµf±Òì£(Np#r;sÍ?VÖ|UûLxTÔ% §Èßev`YŸä+GµŒî›¹Òü$Ôô_g\ñ†µöOX;­u)#ù÷qØ}+êÏÙÄ¿áYMª[Ïqciµ+8ö¹_¯¥|£ð—Uð¿ƒ,æøUñÁ¤žÐgvË´°aú×Ù°ïÀχß´½SB¶Ón¢Kk$º…v´Þ›Hêkž¥âuS÷¤´>Œøû8|)øçâ _Åâ ëu·ýâµ›€Óý~†¾ÐøñŽÇà‡†bøy­xBúûJ·ei/ÚÛW +1ú×ûé¿ ¼1à/„< º”:m§Ù®d¸™V{wµ¾÷­v~'ý¢|<Öu][Â6þ¸¸Ò`¹–Ô\5ô’ŸÝ¢…’H¸æ›“гè8ž³_Õ|ð·ÅMTÒ¢ðO„‹­ÅÔÆg æ Ã’Ì3œþ•Çëžñ·Ä?Ý|>‡Äsn· :‹{¦>|xʯûö¨eoƒÞ+øgð÷â¾µ47ž'¿ÒÞäÛý£d…¤ÿ2ÛÈã—âo[h[ÄÞñYxøÞfú;†àD§;[i7vIÿHÓÝ”—n‡]ðâ 7Áÿ zL~dvzB¾wIýéXžq×Ü{×ið{à÷öGˆüG©j‘[éå›ìZ]Ä-•š60z}3\.§ðÓXøÏ᠛ЧÞiV~n£©Oóý®y1hðwmãgÀü2ý¥ügwã-WÃ>šãÄš?…Þ8fkèš …ì@0Ê’~`y ¨Ç–^Fræ•ììú˜þ=ðpøcñCžðÚ¯u >ÿ`Kõù,«œŒg=+Ð?d¯ L>jšN—â9ÛÄŽš“^Ý_ÌÁ¡™XåI<‘Çá^Vß|=ðCã=ÏŠ4ë­ëÞ6škÙµkˆZO%V,´h>P˰mVç‹mcGµŒ‡Om"çI­¬Vê)0óÈËÍÎ:Ö’÷:#Í*vþ´=ÃÄ÷þ#×!ðþ·ªüKkXÿ³.#’8cW.ÐÇ#;Aˆõ¯øWÀº^³m©YêÚ\v¬×óN)'T{Áàj†?´½.ôø’ÞËUþżG±¾4aÄoº`Áö½œ–¿ðjRZ£èdÓ5Á¨k¾-¯Ú;HÚúhä>tïž§Jë<7ûBønÕõ¯ø—ÚÅj†Hîïc$–çï^_á=â?|á&ø«-­Å½übûGŽb|ͼþñ³È—­ñ;žñÄÙí­®tµÓmlKësÉp$mÃîñN@ï[ÁÊ”¹¢Îj‘¥ZКùžÙuâx¢¼DuØ[I’ cž9>õ¥áç3iâèß™–O™[9ÀíúWÉ©®øHYš8uÁcaŸ³m³“ì{?¼ÀŒ`•Úiß¶_ƒoü/ƒ¾ëPê(†?³vígRxeÆ?*飈¶æ‘ÃW(Á(÷>Š,Ò:ì*V¡¼Ðô}N?+QÒíæôÖ ßÌWÏpxÿã%¦»¦¯Œ.J鱓&¡}kQmžDmýâ+Ù|1âtI­­¿‘dÒk4²ö„ÇÞÁéÍtC›«œÕ0²£¯1ŸâïÙÇàÏ‹ôù­5OiêÓ)_´Cn×=Á¯>×àžŸõ].=> kˆD}dÎê÷)¢ûTf+„ùÜš£wã iºÒørï]´Žù£ß¬“ì½È“SW€©¬à—àȧ[´‹lù5?à–šD^0ÑëKýŸ1£/Þü>µ³yÿàÓmuŸGÕ×l‹ûÍÊ2­ê+è?üWÐ<”fŽk'ÏxCr°Ž¯ôÍ¿ÆmFÓÃã¼µÔíf” 5±CÉ=žkΩ•åq÷ugU:˜Ê‘æüÏ<ðìm£k3^ëüsZËg°ÂÊN9ÝÛ‘ëšä?j?ˆ6? ü5§|7ðmÕÂÝYß3^+Ú‡ùT nUqÄrõWS¯þ×zƗ㡤]ØÝ?Ÿ2¤}ºe£ls¼ã^Iÿ3øoៅºgíá]>×4iuËh$´8Úw9ìiÑÂá(_Ù+*u£%*ºþ‡Ï¿´ÏÄ¿|RøG}׃n¼IöK›ûÝ6²& u$]¥¢lä*’Tp¯uïßnüm§ñ3ëRéka5ÖŸ ó"xœù{×j\cÉ íZv™á ;ÄZ_Œþ:ZjÖö¾(ñfŸŸg¦ÌÖëo¨1tÙ8RH…òŒÅ~nxèMyíið_Yðwíiqðcã•ÿ…´_hú¤šíŽ›§ÚÈlåÓ~u‡ÏŸ>D&68g+êk²*V¹iKC{ã„eÖ ÖþØþÓö·„ÿ±Öïľ×,ÅÂÛêr*eNPùHˆÑˆÔaweNMtŸðOï„ÿ³Í·íáu_¶§ßZˆ!Õ•Ÿ´•ì¥JÜýý¢moh~ ˜xfé|e¡ß]Eau¦ib=?|ìsæo±S¸¡Aò3Lðÿí_ñoâ׃­t?x>_‡úJÛ¬q®’Ën×ÃvÙ"’íÏ™ÈÃm#µ|Ùâ?Œ>x;Åú¤1ê¶V6ú†¡g¥Û™­ÃÈBëu6ÅÊ#…m¡ÇÌÜd>sñ‡ü2k8bð7‹ô¤Ö4¹®$ŠÃöl¬"#â”3a¹êFÕ9Êû“Çdª¾8þÒ>4ðƒuÏü;ñ…еMh/‹¯¼O©nŠH6Èí˜1}ß»]Ò™·p9ñý_ö™Ötí>ÎßÄ7Óì5Hä}Bò} e–Ò;©1µfgå*Ê;õ5ã:wïxÃÃ27€mÚûK’áfþËñ§‰­ìnS÷‹æn`ŒýÓÍk|2ðL×ß³|o¡êߨrXÝOûJň±Š(KIåO€e WnpIŸ5õ*ÚXû[àí¬üCð·†þ|eø{ wº´7mkâ .vÝoòÅ"£±ó!r zv¯@ð—Á u¿]|ø¢Gy§Úß}£Mº±/nê…ZH&L§E„`3$‹^ÀIÆ éO×?l¿x/ã_…ínf¾ðåôÉkekqû– (YKÅ·j«8~@ç°àjõhÂ=Ñ7ÁOÚJµøÍ¨x2=G\ÒõBå-/µ¶Hí/­žMø.íè¹98Á÷¯ÐO†’xÄz Ï£øšöÞÆÚõºÛÄWÌ…F~‡q'wôkáÏ>=ñŒ5=cÅ>ñ†›k§ß_Iq§kºÂb`P|Æ*Ÿ%у‚UÁ=®—Ã_´¯Š´}_À6_Ûš³xšïMK_NµÔ‹Ã 3¿úó€79  œÕAò»”ªY½ñ:çÅz¾¿Š®|}}«h·³u[…ŠËP–ÕFvùãxÀž8¬Œ_õ‰ ¯Äh¾é+á™-Ö§y%°–õfÏ,6ŒœžJäf½µüKy¨üPÒdñ­„ÑÙ .c¸‡åYnH)4n§ýbª«IžªqŠñ¯xeõŸŠ÷^ñ¾©â+O³‘æÓma½_±ê 0pTGûÌ„Á ƒ‘ÐVuéFKRi½œ?i/Ù'ÅZÝÌ>#ÓüA¯km½ŒfÞ6ÓÖÒ(¢Á$¤}€/\d×ÎZ¯ÁE)¹—Áú…œ/+%¼&UÇ9aÉçœW앪išÃÛû_j’Xý†ÒFm¾Ò l1ʪïhÓŒí#JòÏ‰šž…«éÚ:iz‚øªòÞ9Rú{[*ÃÊìá˸dòãÚ¼ÌFîtF´¹š±øã‰|ÒpøGOóëRÆbóvnå£Êîè C] îá¾oº=*m‘Æ7${—h ž¦¼/3ºèãoÈwŸï2Ôªw?ï_¼t©£NR–ö=º’³±Äü.ýœu^úßÄ.¦¼Óáaö}=$ùdÿxW×þDºÒ-ü¦Y6Ÿ¥ÇÿAÒ×iaºvòk=t/xvâhººUUó$»¼m¡½½sÀú{x?òjf?I7 „Ä!™G®O|W³N6Ñt¬Ÿr¬:ÂO‡šm½®—à$Ô³è¤fõ5‘ãKïˆ_f†ÏTÔ¯-ìá—?e’ ©ì;úÖüÿÕ­ì4M«]í+ý ÖûGÔ{ÖׇôïÞøvæ]VÍm$™X¹™÷HIõôý+xòËDôòV9êZ:=Ïši_ü@ºÒî¾ü,ÓÚâàXï$‰y‘‡ðƒøó^ÿ ÙñƼþ(·³·’gÂÚÆ7H¹õ¯²¯ï|ðçJ“IÒ¯’óX¸¸ÝtWæ ÏOcŠä¥ñ§â½fââé-t½:ÛöÛ¦Ú™îInµ§*”µf2´Qñ—Œg}rïSK‚ÁÞ8ÑEÔq޲žk´Ò¿d« ÁÍgãB;;Y<Öþ`\çþz7ðƒéÔ×°xÇöøCðÕ¤ðÇÂ7þÍy¥&ûZ›þ= lõ_§­x¯Œ~.ëºÌó]k0ŬÞrÖºzIû˜Ž ÄÞæª1Šf2ÕGÄOÚÁ? üÿ‡Á» {4Ó#Ž+¯}ŸËPØû)ê}Xóšø£â×ÄŸˆž3ñMÆ«oqusöœ™/n$ÜÌ3Ðzq^Çñ/Hñ£àû;­bÑ•¤¼gû;(ý䇒ßîŽÕçvÿügã=cÌŠæXmUƒ *«ê¢¤¥Ì’F~êÔñOøÓJðê«^èÁ®¾ÿW»é\&©ðÓÆž6ÕO‰ƒG œÊ6ÈŸêãöõ'ÿfß i÷é&²ËpË. ØeT ¿mðÃÃàµ{{EkÛyIß5½µtS‹3”Ïð§Àß èžŽ­¨|² ïñ¤f±uëïª6áÍ×™¥èqë]ÿÆé®µ(­íí®×O´´gL^Ãëšñmb_ h´7³4+ÿ X ûU5Êìg{SñŸ‹¢ÕZ];N…™—åiP½?Jàõ ï­ï­RVU`Y¿•oÄÿ¼?}xÚG†´å‚Ö6ù›»ðsYÞ¾¡xÚ¥Õâ›pr±ôͶmø¦ïWmÚ„yXY€Û·¥Oà«íbÒ_´[ß}—æù¾^¼×Ei}§ÝÈÖw62²¾7<ŸtPtbó¬TñÈßòÍQ7`ÑäÊrÐõ_ƒ^<Ò-Ú?êÚ}ÂÊGË=¸R¢¾ƒÐ>ø{Æ—–ú¢ø¢K&åpÖ¶·@F„ê?­|}ᯅ·Òj+«ø¾kˆ"Vù¼˜ù#é_G~Ï3xÁ¬šuëK‰F·‹³¸ÉëÍi[Øä¬´º>ð/ì£ð²âhôÝÀ×qNÑ™â¾û;Ù‡^z õ¯ |Ô´KVÕcûdpÛ€nC„ Œãž?*‡áwƯ‹0_ \i·zIt‘Jò—ŽœUï‹ÿ ñŠGáí7NÕµA»÷Ói÷F5FôÀì?Zì³Q¿_¸à|Ò–¬çït ø¦ÚëNÔâÓìækÖ°¼Û¦›ú{Wüj»øƒ¥èW?~B±Þ2ÖgP´ ÷ëœWucew§\][i¾¹¸ÔÜ…ºû 4‘“ü9kËüYðkáç‰-/-¾$kþ0ÒµYÑžIY|‘*ƒÓy\*ç ¬çcH÷>\ñOü.+»ë¯ øƒDœµ¼›f¼´‡ýc7B×eãígÆ¿²Àˆn|=< ãK6VšK¯3Ê·$fr§ø‰á{µÓ[_Õ­­þƒ ‡†tùŠXÛÞj1–™Ôÿ¬r\±ë’x®ãßtûòúïíQñ_J³þη٦¶™x«#ÅDkŒlÇëXÇÞèlû”cŸ7^ñõ¿Ä?‰^!tÝ3MÙ@ò`Mw6ßë[Zh>ºøíñ_ŽQ×.'ºfýååªI¾;P3²>3Ž¢¾pøñAÖÖm_à׈¼©.aKEðæ±…qãtLFaÛ®kÓ¼c¡x§ãç¾ü=Ó|y%ÔZ¼šn¹¤GtWaERôÚI'¥iÊÈu7$ý¡?käøý Ááí#Âþ!›u®‚¶jV;+u!Jz&àÍë\/Àÿ„þ,ñU§Šþ4èæðYÝ$I4§lNØë»øÀ9®7öÃøqᯃÞ;ƒáœ÷c™šà¬»·³¹»¸Šê<3ã}Z?†m޳ Ggcq$k¦†;WhäõûØïžõªŽ†R‘Ù|nñ^Œü3ÓílüSc%Æ›cOgyj«-ßL 3ÄsÎßZÖøûVë´«eãÝ7Dºîu?öµžŸ™£¸² °Î^©Ú*¹a{XMÍlÏÑ/>.þØ?ð†Ýëš‚ÚhpÍmâÕ®ÄR¬{v,±ªäå[.3ÅZ¿ð×¼_áí/Á9»*4Y#‡OÕ£¸M÷éBêý[‚Hö«? ìì<[û@ø¢…º–“&¥â8’MFúL/–ó!’°§¶œ“šÕýª¬¾üøíáÁñ&4¸eû{A*±’8Ç Ô|ÌrpIÏ5<·Z‡6Ñ0j¿Ú+Å ~Ýxf+ë?G>–ëwu¥Ý¯ûYh?>.Ùi^.ÓeŽÎËÃÿf¶¾Òg k$ÄašGcóm`@Çá]¹âø ðó@øÕáý:ãSñgÄMvæòò×MUg‰¾ÎŠ›‡÷>~ؾiý§¾(ü7ð„|3ªxïë¯,w-ŽŸu·MÙä’4›GÌ9êk¢Ô¿à¤^ðÁÍXOðâëKðìvÑXÚÙý•^à½Â|û&9Ùn\•ä zR6ÅKI&v^øµàOŠ_ìþ1øòÖ M[G·¿â¶v©bK&py“×uY¶Ò´/ÚŶ?$×–òûAÖ^KaÅXîBJÈpW÷ˆ;WÌÞ6øéàÿ„ÿü7ðÿFº³ñ$Ú}êµ–¥;Ö{;œ;Ã$˜åÕAB^µèŸ ~9êúìË7í3à-ßC¸ñ‡‰|=ÕÈabÅ’NÕDÁcÏZŽIH#QEXé¼uû/YþÎ?ÄoøÒ {µÐ@T<¾9Åu·ß4kÅÖÿ4ßË·ywǤGx2WhØV#À»qŠç~=xOöyøÃâ«Ûÿé71kÖ:?Ù´«ÌÍ**ï*Ž#h@Uý°y¯/ø+¡ê¾'×5oxÂÓiv¶‰5–¹âKë½ÓÚÄÍ„ »†2F8ÀÍJøu6ææ’>„ø•cñ¦ÞÂÇ^ñçŽ&Ðôë«çƒR‘®#XíYÏ2ÎBöÍtŸ îÿfß‚ uøkRÔ¼Ex²‹{íByî/%rWvÆ9*¹ŠðßxĶqÍ{ûBøžæ#ÃweðÌ-yæ4ÐÈÊ#•Pœ NXàFG­Sø™mañ“ÃÃZÞCÛÍL–ÚR ÜO™Ÿ¾‹–ÇJvÛ¨·ß¡íß ¾#k¿´5¬Þoƒ>(ƒD±™á“Xº¸1ý·p8@§°œô®o↯àïÙM4ÿè e×5k9ÓGƒODj¥¤3H>£⹿|cý¨¼dÖžðUÔ~ ðïÚ`[ØÄVâêç>dÊ$ÎHeùprk¢¶ø÷àG±ñC—6—·fšFÔ›Œr‰@èqÞ—*^¤©Jíùð¿âtßþ§ˆ<®èqÏ}`³ÜirOûÈ%x6y'‚+KIñæ£â]'Iñ‹n<‹[@ÞDvjv°\eˆ_~+Ìþø'Bøêº†«á†Káù¦ŽH´WíÃç…—€ˆϱ<гà-\²ð}÷ƒ<}ã+[kØIΨ×Þ_AÜ«¸pY^¦´Roøs>XÆM·Ð÷»?ê—V¡â SR‘ZÎkXšM±³J)=Û§á^+øÕá][ãU‡‰eÛæizl²êMå Ìè0Us×­yWÃßWþ=Öîì%¾×5=>qMÙ¶¸W‡o–ȬJœŒuò*çŠuï¾7ñÖ‡ðÃFðÝÕž­§-ÊÆmï g²<²gG8=(ææŠÓ9_¹ô=ÇíðÄŸ åøÿo%½Ôvq‹9$ò÷+ç×铌Õo|CÒ4Ùtˉ5 +GÐçÑÚ_±´ÊÁ}86ø³Ç']ÒÙ5{?²h7“\‰#y6qÇLœuí_>x£Sø‹â'¿·ø‹¬}›V¦¹Òt¥i|Õ !•I>Xb3žn9¯Aø¥àý;öSø[¸Í¤ÝÜYêB[É,ÌŒ±óæ,Lv€Ö¼Zý«í¾$þÍš§Ž4I­´¿ë Ÿˆµ}6õ;[×—æ€;FOÙÜ.åÎåR¥ÒûZV\±iãM[Â÷Úv™ñòÃÄòÛͯÿië1]f[”+|ÿDZgQŽ„öaœWñoö˜øGñËã?ÃŽÿõÖf×>KáOIåœYj›,mžUÆHõ ׂþÖ?´Îµá¿iz׌üi¨x“KÓî­ô ´›ÅAäB·1Íy–ŒÒIó`ž|-Ðîuë¯ x—Åך±òn£ÑíØ·‚‡aÉ 7I’OCn¦‰hgø«ãÇ…<=àïíŸxŠÆÚ}:?"K;ÈÛËýçÇÞËdäjóÁû_ørû^³ÐõÝJ?M{„óšÖXÖ HèG©Àô®êÛáßìõñ¦ÚO ø_༚E×”¥eЦ–ÛÌã…™7Pz‘Ôî¦|)ý•üaàߊ¶º¹ð6k=|ñ«Mä/ÍŒ¸1Ì0^{ñUË"#8-SâÇÇ„3øTÕ|uáÙ’2æm7O†Sq=äQIP#©*üÛrŠñ}sâ/üV¸ÖdOi—WÉ”ºŽ+Y?t]Ä·ô«ú‡‚¼Sà]1<=®Ì±ÍÖèÖ6ÝöV#’äºqøj†ûõ>üøwá_ŠzŠ£|-Ô|;ªZiá·á–¾6Iœ„‘ÊüÁŽsÓŠöxgÇ_³f½ðóâî›áU·³ûuÚkVö°v™bŽû¹ÚÈ›N>ë©ÈéŸÎ?µOŒá š-sDŽöëÃ-u&•ãsjÇ pFâ@9ã"¿@ÿa¿Ú;Ãß·7Á}oöPñ=å­åõ¿šþŽkÉak™™|É,7€Jü¨]FXexêjÒ"QšW‰Âøãö»ñŸÄÏZøm­ZÊå²/¼GöwŽúç’‰ö¤ @Éõ¯fñ§‡¾$k^>Ó|[ð«ÄóIâmÁ6‘]é:ÔË,ww kæyÛY؆!YøGÄ:óØj·£yš•ˆ Å#wVcµd=#$|@Ô4/‡Ú½Ž¡â‹*â8íY£†)eÚã9áAÆÆààÈâ¾áøñûhü>ý™¾[|WðŸÂ%Ô?µ^sÓ'Þ¹O ü+O BÞ"ñ5þ²³kñ¥Ø–ÎÞ·wäx>†¾xøyûQxßÇþ›â_µ+ýFi&ÄzMÒ”‡FuQÄ‘ächÀ†½Ný¥¬¢²X¾6üI¸Öî·µŽ$í²Üø—ü›°@'Žkž¤”¤tS.í™Qa[̉•øÚií+HÄíÏ^)ŠðÌòîãùÓÃ"£ ¨¸Ú?ˆô¯–:5%3²Å†l·§<ÔŠÆ(vº2mþðíUÔy€Rû¿ãVUÙ÷onnÄìKªò²®Þ¼ùS-`7ƒìöäÔADžbFÃx_—æÂçð§øGB¸ÖõÿIû4*G3}Ú‰^ÖGf 7¨t^ðΧ¯Ïoc-ã,jså§ñW³Z|Y²ø]¥CáÏÝA ÃG‹ËÄPY;zòöñ&—¢i§Ã^‰šYÙ¯ ä¹Éé^ƒðOà›4‹â߉ÚâÇH$‚ĶZ^ù5¦We©ëVVg¯ü%ñN³¥hø«[{«†¸9Nw¶ˆûW£x/ÇRø÷Äi·zƒ-¬m¾é¤åPœç¦+Çu^)׎‰¥éék£Ûâ6òò§`ãõÅj/ˆ5‹òÇLÒ¤±²òÂB±ü²JG\â»#/²Ž~HÚïCém7öƒøYá ¡¤øw]‡R¿^ŠìX}pOZÖ¼ñìÚΑ$Æî5{æÄkæ Ò¶1ùW†ü ý<_®iOãoè˧ØÃ†·)2ʽr>µ¡®iÞ;Óµ¦¸ðÜ"Þ5Üâl·”=½ë²2—/¼q?fÞ†ÿ‹<)ÃÍ*Kéõ+uÔ&-$²ÎU˜ÐŸç^Mñ'Oð5¿‡¼Ïx¶ëPžç-œ2w?ìŽ+S[ð½¬B¾ ñ/ˆ&º˜É’÷×Ûé\O‹´m^]WSÕ¡¹ÛR6pß§jÒ&Råg/cáôÙ-ü?köfùYYFXöÉö¬vÓü1àß´MgoÓ¤¿™ ã“ùR|Uø¥¦øbÎÎÕ/’9u ˜ã#ÓI¦ø_C“Ã{âÛö·¸ÔdY¾ÄÍûÃò7÷Tõæ´ŠŒ¶èrÔ—+95‹Ä?o¡Õ¤²ØÚÄYZi¤qçžäÖgŒ~/XEc Ú«IûÁ Ë÷r7qÚº}:×^ø›©ý‹LðÝÅ®‡h†+Uóñ8À¬ÿ|=K¶OíO É µ¤!,¬ÃtÁûò‘ÜÖÑæq9Ü®Ï/ðAqãxŸmª±fêL‡û¢®j+!–6|žTPÿÄ·O·zú×Uâ=?Á׺g—­êQCšîk[s…,?ƒ•á>2kº¼žø{¨Á¤Y…+6£"…Èîªj¾HårgñçÄ7–w÷êÆ&¼¾“6ú}»gt݃Æ+濈Ò^Ũ¥ž¡+þ+xÎàŸ^kWâ·‰/ü/~Ïáÿ=ÝÝÇË&¡<™ÇûµÂY]@åoµ9¤ši9”îêkhûѸãîètðo…õcç_Ûì›_/¹õÅv:€Ñ.|è4ç‘cá7ä©®{Þ ¶‚ º]„qH¹-+žkSJñ¶´nM»ê õ“v? E/$u á½vùÚÖóMŽ;3üQã=+cÃpxoÁò´0ÜL>ûÈœ-\øyªiz¬‹¥,ÌŸÆìÿ(Ç\WxçáD¿gó|éøS%érìÂRîyþŸñÄzåóYZiË®w<”}+zÏXÒŠÆÉâ{µñ²9mHR}+«³ð®™­§‘§ø^H¶á°¹ÿôß„_>iV‹âh|çåóö…âª4ï±IÆ1#øñkâÕÁ‡O–Á§K”ÚBy‘úæ½ÃŸ#o/ɘK'—îÓiácµ}Mð«ö Õµ[}Hø±]M{Õoáê"Û°˜ó÷I^ À~Õÿ¼ áo»ð½öË­>Ý—Y¼°`{9E¨Œ×Ž|:ñÍÏÈuK9a]·Vø`Ùù˜t½¹Œ®Yý¡<{ÿ _Æ-CTÓ ;.ÞI\¶vž¼žæ·5ˆxÓÂñ}‚âv›ì>]ÊGÂH Œz¨æ¼žIÝÓLÿzG,Þùæ½àÖ­Ç~·•Dñ©ia¬˜ç9«•¹lL·:χ¾’Ñ­ÌWpÝGq.¤“;Q=½}[ûü ¾$K¤iºE¤6°Ø¬°ý«å7êF{ÖWìßû0Þügð¿Ûmô–´V˜>ÈÀU—™¯¢¼Yð/âo„!Óõïì9®ít•_³Üi¿¹•vr>ðŒ´WhÒ7r²=“áìé#xþCÁ^(·mFÀŸN…D‘8'åI#<?¼9®»Nø1â~Ñ~ø£à2Ú>±q%ŒÉu 6‘Êîü²3åîn?Ãýƒõ/ |jñ\Úg…üSoaãæ`º`»Twrç?^+´»øWûZéÿµ ñ'ÆVsèš^µou,ú}›ÛªÆ²½d#nà+Í­(ó&úž¦œ¹öŒý¿i|8Ô4tÝ?OÑïV=.ÞÆF} 2$FÑ ÔW¥xÓãÇÇØ¿Å×—íz­à­%lþØÐíXå+uc‚â=ÊqÍ}âÿx3ß´K|@ÿ„›Ã:–õ¾´]/ÑaŸMn¿ªeïPÌÌDm9Rà¼ô¨tÿÁ<>6|"»ÿ„sYƒF:nŸkkã»@W¨eR7v–9Êæ¾ý“?f?‰_ õ_|¿ÕãÐí|C¨I©ý«Pa|©ˆãó*Êà¨íÕ6´®T}åª>žñwŽ'º¼>$ðŽu¤Ý u[ûË8ßʸi`«Ã’ ך>3xIø³ð§Oø‡ákõÍböÕ¥±º6àÍ$N›$‰#ë˜Ë¸ç "¨ßxBÏXý ü'ðŽKO‚ûÁóh:}»¹„¿“jÒ\(QòžX=òEyÿ„¾|wñ®ª|3Ô¼ycáoxv4ûf¶¸Û,‰[;²½¢•£aþ"ñW€ÿgÿ‹ö?¾#øsÅ×Ú,7rÂA{oÔ"àÚ•–ÞXß‘¹a†ô_ÃÒþ%|:ðÏÆï _~Ì:¦«&Ÿáýb_êZ––?²[Å'–šL.Hþ çbëþÒ>x+I²ø²–ú‡‰¡ðVš¢ý¸Ü]Í4¬ÅõãkœŽ}{W¢|SÓþ4hþð†½ss¦øÇÏû wO1¶´QMžäÇ<÷ªŽÄÊZÙŸž¿þüeýªüMb²xâÖ]Òã횇͛]=´`´l]¢5 œg,ÕÌju/xF߯vóÞÿÂà5[¯]j6ïvè—Çä.ïõ’‘ÁeôÍ}ãám;Ä¿³—ŒuŸ‰–ß ÖY®|ÞŸ¦évñΚ$bþŽÌ“ ¥kÌþøöÛúg‡ü}ûIÝHÚ?Äûag¡|;þÏ ÷2-ög‰9ynâ–Äòóu<Ÿöcý‘uo/Ñþx¦/øG<kª]kú•­Ü1Ã`¹eg”“Ë*H## ®wöþÒµoÚ{âÂÏÙ§öÓõ[ ø_Àz–¯qrá-ä2GtaÜôÛ•×o+íŠ^ðׄ>jZ&}o}7Û[̾ÒÕ ’ñ'l‹`¨ß6ÚÍÓjã9®&ØâwÃýëâÿü&1ø}uë{g¿7–¾\³ÆKHcp0"ˆÉólä‘·=1U¶ÄòÉÉ3ä_iÿ.uíËáÏí‡Nm5®!Ñ­]KOxÍ·a•Ál19\/| Üø#á¿Ú×àç‹5OkñÞxnÎ;Ck£hÚs<åd •Œ‚`O=O<×Ñ²Ž»ã¯€_uoŒÿc“Tð/ˆ¼9>‘£ù6ây&Û¹ÏÊ73óóÎEeø⦟àÿ‡ú§‰I‹Á6~,×>ѧÛÝÞ¦»¶‚Fܹù³è+6ýÔÍ"¹¤]ø?â ~ÏŸüIãÍOÀ~.Õ¼W}{%¨Ž=H>ûb¡Øä¨éµØ·c´sŠ×øGûO|!°ðþ¿ñ’Âá´ûÙš£µ’Åž;]°*)÷ I0,O¶y®Çö[ø}}âÝoÄßôω3k:qµ¦˜ê&Yl®D±N¨Ç¶´|0üÜu¯’nÿcÿ ÿÂ/cñ3â7‰5 è/‹.u e®徺2‘ q¡$¸'O,MÏNýš~øgãF•âOÚ·ÇŸu¯Ggâk˜ô}jGŽ&‘Ucó‚¨Çßè@u®WP×¾%ër/to/‡VëQoIª:‹$Ü“ |øpGâ1Í}aðKšM熴Ÿˆßn-m|3%™‚i$³hc·e%Þ@§‡‘ÉŽÜN1Šùÿâ·«þÖ·>øIà>Ïí¾µ¹šmnÖàZ¨·i#ù˜/.õ@pr1ïO— s¢xÓÀZÿŽ|ðoÀþ7Õ/´ÿéS_j&Õ÷šæ¡åçËmÃ<@’à~ ×¾$þÖæðï¬#þÔ¦Õlc,“Á*4dHäŸ$‰APH á—ÅkïÙSâzë—Wø¢îÝaŠ?ûím¶Ø.ƒï`ãœéµ_SøsRMÙx!uèf¼ñ½ž–¢ÚéÙX‚1+%¿Šœ¼É^GÓ>øÿâ†è <2¿ð’jiwI èz„Ooi6ÜŸ:å‚£¨ë×½TñjO®xwPøÑñ³Åv6œÖòÜxr’ÖÂ#åPÍ1çŽqšò_ƒ?µGìðáµðø}¦ÞÛé—ZlË£ÜÏx²‹»Î„’Ÿ3’Ûy÷æ¾yð—ÅۯڻÚ—‡à–òóÇ—ZÅÜVú…æM½Ä* «mþ¡¶€¥5®Á)ugÐÿkm/á÷…›À³&\øŽê5×ÞÑcå~W¹,¬;ŽA­Ù·áwÀíTÕ>+ëßu‹u[9oÌÏ%Ýã8P6 7f¸? èz^‹àÏxsÃ> Óµ/xmî­üYui…ž)„@¦1ÜqÐ×øoãÞ§£ü@ñ-ô»Û]*Òõš=^ú14¶ü7 áP(¶½Éæ[3í?Œž9ø›àÛx'Yø%kqá]Zcaq<»n-ËG漬ƒcg Œñï^ð[U.øâïZø†ëP›IÓdFÒâÓV²æ=‘ç'-´‚}}«Ç|qû^k~9ø{¦ë~ø¡7‹4û-Rkž¸ºqö[ˆbÞ=Ø8*Bœò{VŸ_âÿÄÿ~ñ'†ü9§xgOº··¾ñsjŽK<”Á$ åGcŠ™Jû¡ÆZèt_¼ñŸö×ôQ×?´4{xVVû+4dLr:­'í)ð{F±ð6—áŸI¼ÖwMyâ°Î°G§GH–Fçøœz‘R?Æ/xXñ§ìûð«Ã×wZ¦»®K‡n£2ǵÊîG9ÆO8õ¯øýñösøã/ Ø_/ˆwx²Í%|&øûñ+Ä ~#ø Ã>!¹¿Ô/ÛÃwLs³hw ’-äŽw,h±¹ƒ Ÿjùâ ž×~0êÆo­é¶~wÙu{=AwNQB«üÀr<`t¯^âoŽ<=áû_| øeki¤ø‡Zk]SIJFÚŽ«?¼„¸9U#;P£9¯øñð¯â_„ÅÎø.ôbP®O^ÇkÒ„m±äÊW’¹÷‡ìÖžøyûÇ¡Âçµ’5¶Ô/®tV±0¦«g:ý’!<¥ Û°',n<üðÂ_|?¦ühøÑkkmo¨F°èòxrK‰¡¸†Ö76íty?C\üçÅÅmé7>0Õn'Ó<%¨ÛkþµÑ’uº·»Dño/øQû6è? ¼}iiñ[}vÊJâò=zÆ`ÖñÛ#q²ÆxR«Él×»ø‡Äþ#ñÞ¡ÿ¯…Ñ´½&ÖÕîmfµµ`°)û©óœðÃ5¤~I“ÖÈÄñ_ìÛà:}¯…ïü=}¥ÛZê K;¯>ÖKyÀ Èb@ ­ÎN9µqûñƒŒü ©èÚD3(ƒRûNбÉ5ÀLû€rXgÆFk°øÅ©xƒOÕÛK³ŽÏO‚ÖCäÉt¬òKÇ.O|ŸÿUsº?ÃøÇIºâ$öòMyk•¸òÈ.Ëó+'ò'Ö°”£¡òÇÅañßĺ@¶¾ø«mw%ÃlCinxÏÜGÞÍìkμâß|%Ö×Iño†$ñ“Kˆ¯­n.8Z8`8ÜO<ŒWÒŸþþÉ_ õSñÆgZÔ®¼¼YÛßÎ[»áAŠù«Æ¿¾øÇZ’²CœJ5µ¸L·l’Nj4:!)3¦ñ?ìÿ¡ñ=;Á9ŽÞÖò>‡£Él.læS·Ël…gÛòØ`ÊG8­؃ÆsþÎÿíü?âí+Rðýö‹x·Úoˆ<²Íku™WqÇ,Œ£’ŠÁO G⯅Úô=vu›Ã:Ì–rC*˜ÙmæÌŠ œ†ƒã‘÷ª÷…þ,éš”MáOˆz:x’ÉC"Ï4ÆBÅõrõƒý†È­9¬Ty¨¿à¦_<-âïÚóþ&__xsIø›à›{ûxcV.QR9Ú&, .åÝ‚9Šó„e¡|XðŒ.ÞxƒI¿»·xmRfXµ 6°ÐJ>Pê1¸=T×´ø*/€þ(ðկĭSOñw‚ï5Èóy¥ÙÙÁ«æHɆß-¾lcšßøyãÏj~1ñwÂû/h°ÇªÜ.­§ÅŸf[¨gØ¡f<ä¶0¦kKCŸOÓ,…|à[í/O•þÇzŠJmC1Ê#?y[¯#š™)-¥9J:õè~cmMÅ”³/O½R:œ…'ofÝü]*¿vv K.~m«ÓëSFáWr²|»¶ç§§ç_"tsw%ˆí‰•cÖ¥‰sòr®2XóQÇÙûÍ‚¦¬Þ¯™+/˜¾¬ክ;12Z@–~}Û|«ÁUçpô¦­Î¯©4:uœ&}ØÙ}ïJ†sÅ„n«ó|Ù­ï j0iì· î1·R{ ç­.‡³•Ó½æz7‚°XËümy嫘¡^Nx®òÜëzÍÃÏát“~îær«c½yŽâxÃV[½GPöéþ¨? /`¯½zÕ†‹ãoøCÛB¾XüÒwM"ýáè kNQZ$z3‚’¼™ÖxGNÐt6Hº¾ÚæÃ“¿^¼×¶|øqá/ X/þ!Ý­åÃ.ma‘x^~ê¯Lã½xÂß„“xqWÆ9ÖcqÉ¿kÉÌÇ=«¤ñ§í /oã’Ë)!cµp ®?­zêrÅ9-{5)¹éÐúÿ¾&Ò5kï7Ùã™|»(›å¿AÇ‹cðRÖI- ]\7/.s׊ù³DøÙâ^4šÿ—gh Gþ ~´í|eâýBW:~œ²³)(÷é]<ÞG²roŒ—¶­døm'ŽÙ[9U'?ˆâ¼«ÆÒõ-+f‘pfLÝ\M/ñ¯Dñþ¿§ÀuŸK­¬jq ír=9¯øuâ‰3¶à˜î-¡™°L1˜zýkHǹJ‘އ6Öß ô-zÖhl¿á"ÖA°ÚZ8¹>ÕÓhZç‰|Oâû‹ÃV®›T^^ÍîŸÂ¹ÅMð÷öo“áΜڧ‹øu¡®£áýSì6³šúé·M>=3]1Œ–ú2’èkj ¼36¿¯êÂÖâñ@šfeQ*:"ñ·'­|ù¯üS²ø=Æ•¦ø†I4Èf?h6ŸG]ÒvJ—Ä~)ð—Æ¯É­®^^iñÊ~Ñ3³m :¨Îy¯Ä¿Ž>OðçᆡÓôKuòÚF´¼òIêI«æ}61W8OÚGö•ðÞ‰k/€>xb3û½—š¥Ó—g=ðkå¯x§Z×nV=Bá§^—ÎÑøW¾x¾ÓÑZ´o m4ßÅð¾Üדø‹F…o§mÄ#Uýãí)¢:»„•1ºølšìÁËLù¹^>”Ôøk1®æm£Ì­+ï}ŠiôøµTšFû̬~_`j½´~Dé&§«³y|² g=+b`®ô#áv¬¿.û̯ÞSÓžjÕŸÂ=Yeó®nvœî-ÓÚ´.|Y{oÇbÍó uÝŠ’ËUÖµ¶ø‘Ù»z~;EIu4<(-ô™ÎõÃÿ+G“^ÉððøzÞXõ+ÝV[#l2FÚòÝÂ)˜G%¾³1ÎîqŸë^•áÙcâ׋f†m6HãM»·:à}(¼¹´3©Ê·g«ˆþ ³³e½ž í÷|¸Ç‘⟈ÞÔ4Ÿ±ÚÛÌÃlŠ»€ì?»¦~Åu Vx™@ùXdzõ¯†ß±þ“àÅûN½¨[FW Þknú´ŒjÈ唩¯3ˆø1ð£Çš•¤WÑx~Þ×KšL™ÚBaïžÕ»ñQøc¤Ücê:N›æYǹ-á¶7\u®ûâ¤÷š~™„ü1tmívþòçîîÿv¼'ãmúx#Áí¥šL÷M´ÞHAsïë] ÑŽŸ3ŠG†ümø·âxO‹|Ou§éPÊIÑ4ÏÝ QÆöcï^gñÃ7n¡?‹5!tšm°Ä’n–FÇElÕ¯Ý½Ž¥öB'“P,>Ï–êOO¥sŸþ&Ùéïeáßî’8ãSsûÎ3õ©/@‘á8ñ׊|yñuoÜ]Ék ˆíf™›Ë‹ ùu¯­¾%~ÒZGÁ¿–~ø5âí5mN(ã‘m­Äg€ÝƒÜûŸZùRñžŸiâ9µ‰ôõ¸_9Š*Ÿ—ÛúUcÆú§µY/õ+…UÛû˜ûF=o­´$ï¾"ø†ç¶vúÔ—V—š„æ 0%‰þ#ï^7ªÜjs¼Ò¨ #vö§jWÒÞ\æ]̫«‚­xgº§‰µ˜4M*ÔÉqráb^ꢹP½Mo†Þ»ñ–·k¤XéÒÜ4³â%ÉÇá_qxsöƒÂ¾µñ~™£\¤sF«xÓdÄv­oÙ#à6ð+ÚÍïƒdÔ5»¶ qHŸ¹R:Ö¾žÑ~+xKAסӭ`Ôd¸’ ÿd¼>l{ºî<` \×ÜVr3ÿf¿‡?e°±ð5­œöù…½¸Y ²’8b}ášú ãŸü3²Ò~èúΡ«jšä*òL×eºãÀ‘ON¹5â? ÿl-3Ãþ.¹Ò|Aðg\Ôn®¦1ißÙpˆÔ°dp:£/iÎröÈ=kè†’ë¾øO@Ò«¤Ü^!žú;¬Ã2¿š®óªçýZ䔜ŽúSŠêŒjÊZYõ>s4?ØÀÏw¨hk™ö]Hmï§ åŽG–c¹[·5ÅßxÓQð‹eñ'_±¾‹\Ô­/´ØôÍßjµµ·oß61…n€äí }AûP|/¾øéðþþ-*Õ,æ±™ÕôøÌ¾&C,Y —Yo†+¹Í|+¦kŸu¯?ðª¾"xù¬æÒ-àXÎ¥‹k;y1†!'z178!„ŠÜ‚ S‡,‘0©Íëj³GŠ>1èúÍ߆䓯ÞµµM#P·…d[l9˜¨á·ÇœžIWñ/öwø}ðcâN¥ûR|EÐõ/\xRkûíB}A–H!½M­ … „Ø_AÆ? OÙ«ÃZ7ÆÚmhO‡¾Ñí¾éÑèÚ•ÅÅâÍ´Á¤„‡Î;6ȬÇ'Ô~ÓÇÅž/ø»¨x»Dñ¸ðì·–z©`¶NÊL¨óÊH?} ˆÀb:ž*¹9µdóZIDàuÿ‚~$ñÇí1¢]ø%# ë±¹³ÖÍáµÕ aö—‘Ê*þô(*FJîUÆM{§†fÒn>ë×Q|GÔ.m¢0Ø_k“YˆçŽ8ÜňÔ¹IÀçæºŠ?t]BÔt…Þ´›ÇRø]íÞÍôùÇsœ×é¸íýÞÆÛò÷—¨9ƒá­cÁÞø+àOS𨷽Ԭd´Ô´øî~Ñöf{v–I sÑÉÆózq§Ë&‰ærI4îx·í ñN;ÄZÇÀ |+ñ&Ÿkºæ+Ýi” %ŸÏÁ&?å¤[Ã`=*Ù;ö{ðf»â+¯ŽÿôO¶G¡øil4¹/hg†8îfžîxÃ1ÏÊÑ –É=1ôgŒ4‹ÿ |8µñŸŽ< ªºtwm&©p#¸·Uüˆü³Ì¤£õõïW]Cš\¶gÏÞ)øUû8|=ñ| ðgRº×µ½B lìíµ©£H¹tVNAÚ>cÜp;ëøëÞñç€u3»×]Êsæ‹qZ£áÙ_Ä¿hšÛ⎴ý.óÁÚÍ—‡t´ÿ2Þ®ÁùÓDç|{ñR|5ý’ìþ6i_ð¬>:þÑÖºn™oý¥ªiööQ3[™[yˆ6òŒàcé ø‡á]Ã:χ0xGö|Óìü;­k¸Ä^+ñ,z@ûˆã´1 \mCŸ+h—9$ ñYÆŸ5¬i)J:YñWÆÿ²—Âÿ…³Y~É%‹Gÿ„3M¶²ÔòÁ¤‡]†`Ð#72HYØ™0J•â“Äÿ²OÅ?ðøãÇÅ_i0ü7ð&‡q®Zè÷ìÞF¡)Ù<È—Nvü§'ó5å?¶WÃ_‡Ðxƒûெ7iú]Âéþ³Ôu‡Xoî|ýòH! A~­‚£Øú·ìÅÇÿ_kÞ,øÛñWÃvº&“á‘a¥ØØ_y¶_lÙ0ãv í;1œ ž š<Ú‹•òèyíñßžøKá­oÂÌ’\ØÍö8thã[ßß\1‹;‚!ŠàásžqWü ~ÎZRøâÜú-Ëk¶­âë-&Há»{//>Q^‘Ç$Øn;Nµç^2ŸOñŸí öé7^.½ð½ôVvVæÎdI5<,ŽÑÈà*C»Í}ÛI8äE}-«þÍiø…à/ì­fO‰Ÿ µIRm&ôÜG¨] -ôò[/÷ã]ÛsÛƒXzoÂï„müQãmSÇíÇ‹‡l£×MƒÎ׳Ȭ²ÚÄ$m«dzàcšõÏ…_³WÇ=GIñ&‡¡ê:jÉ©ß^@kE†eÛVï#d•‚r5Ïêþø‹ðoCKøqñWA×4öÕ­àñF¶aŽu‚ŸÝ2 Ú¥¤ÜW=NF(r¶èÍÆú#Ã¥ð‡~ |;Ô4ý5¯®.¬Õ5K84™6[[F&Gž’óú€sŽzc›ðWâŸÀσ .¬—ÇûüQ}‹­úÆÏ;c‘¿4jÃ;²$ŒG×xÑþêŸ ¼e7ÄY¶‹ª´öKâM>ŽÖ-ÛwÂλ²ÎªãÖ¼[à§€#ø»ñ@ø½uqk¦è·2hÚX»³Þ–6ÉÔ2»ÈBê#99©Z°WŒ»N‰ûSCû9øÄâøio«ê^&¾–?ÜùìÀM• òlÊÈ»\2ð9ã5sÞ$øIàƒÚÖ•ñ.ÖkWÐGz×VæÜ9™Žà§RUÛŠÀøçð¯á©máh^0mÂßVšÒÛÁ±jÒꪥst›pc“$‘Žã¥b|`×¾!ÞjÍá_ᯅ|O ÒÅ-ãa.RU!c"Rv9ž¤õÅW+êRÜòÏ|!²øQáßþÎèéc§Ùø°V†ÝÚa3á•å#åuÁðxü+»ðvâ¯xò×IÔüV|Ey¥ÈÓjš‡™åâÙcP¶NfÊ+sÇÄÞ(ñ¿†ux…×Àþ Ž(µWV…g±¹UP±°C™:ä¶yïÇkÏøÿö”Ñ~|ñ³G©$šf§yn¤´Í$#¢¹‰Ú3G*d¹4{_ˆÿk ;áü;ªx>ÆAìô¸µáe[“¼²“±åóƒæ6qŠðŠüsðãXýž´-wPuÖôÛ‰õ)年FSåHØÆâ[?(­u ükâχ?¼Uâ]_NÐï“ûBÛK…–Ä¥ÄQIqƒ´>C³gœ•䟾‡º7Œ~2Ïâ­#P56‹M…R5ß•¤#ïõ% øÃÇ¿e_j^ðŠLî×QͧÆëóŽ?1XÆø'›Xv5Îë?%ñMŒ7·±jvþ ·bTX‘ãž,`Ç$ož:ãê s¿5mgÄ^<¼Ôu›‰å¹¸3}¡òW?ßAW­>#A¡hŸØÚô9<»äêû®Þ¿6zÏJõT}ÓÍûGÑŸ³O¼=ðãÇž×ü?¦\-çˆmLµÌ-=Ô*¾^äb:šýøËð‡ÄÞø©«|mÔôCJÓo´‹mCTÒeHÚî×Ë*V$ʆ(ç!›øE~aCûbxïÄz&‹§èKe§_xvÅGö ·Ež5V'l,TŒŽI#9Å}[û8ÿÁGƒ§Jðì߈> Š=Iì4ýB&ºx%³ðäÞbGAË>88ü*¼v²ø£Qh¼rò+Z³¤Ñóm¥–ì'Ïή;ªb±“õEÅgˆ._âT­£xïXo|Æ?øH´Ó¼ãÙ£f ÃÔàÅpº·ìûñZOíŠPÚë/2É>”³´‘Ľ3¸=v¬”£Žàã°â¹ð+À?6ø‹^±µº‚Õ°²^jMž~øP>aÍ{GÄoüð”ÚÉv· ‡Ê·ó<Âíÿù²+Ä+‹UfÙmæžß1ìA‘öO—¡µ97¹¢¿¬¼9ð£Ä—>%WP³6±Â£-óžHn>éê–Ú¥ÅεG.è·Û´@F˜JªËƒÁ\çŽ,|ømðÃãoì«~ÍúG¤Ý£øÊÞ}û_I1In\0a¾pɸd¶â¯| ÖÆÿô?_²i£º¿Ô?á&Ð.‰ûBZo%g²‘~`ŠegÛȉ#ÓþøfÙÁ—€Æ°ÚÅß‹4{Í?IÕIN‘$¼”¸,Bù¥0±ààä·ŠÞ/C–¤eªÖ§o7Ào‚–¾ ð§‹TxwDñ£Cq¬F¢îÓP3Æ¢IÞ>p7DB)¨#¡<ý]ÿáø¿©ë>0ñ7†¦×­î-õM.âKhô¨<©"À;&XÏÞÁ8'>+å¿…~ðˆ|)¯|<þÕÔî³¥Í=ÖŸ ˆÑÝ´#Ìó"l’#­rE} ÿÜ×4½'â,gà#¯…²·¾µýäÉ"FÌùCýâØàð=j"Ú™½ïýl}o£þÎ߀|9¦ëwÚ¶Ÿª ˆ#M6hâÿN’9gÞê[>gËÁQœ àq^·ñGá߈4KûEðÇŠ-tV¼®î£kR¡÷± üCæ~`s†cήNox»ö†ðž‡ñÏá÷Œî4='M¼òõ9-âD¶ç2ÂsÀetçƒÚ¶<_ªø§ö¦òî>ê²i‘xfæãOº²›GI¿Œ”38 ¼Ä©#ò­ãÝÇN¤©É;íþGæH>ñˆá›§§ §[³‰æÚcã?—áÖ£‰‘a0ö³Æ ‘]!~V=/oë_SmîJÌ ¨‘?‹¯¯½L#ÈݘSÊ¿­@™Û¼¢ž­V6š-Î@#åíŠÅ]Üs d¸Ì‰ü=N1œT]ʰù%¾mÜgÒªÉ1HÊ$m"“‚Ź;VÞ‘¦iºIªêç\0Ý {¾éúW-K:š»U—Ç“ zoÁojž.”K®Ê¶vø-¹¶³þJõÛOü=Ó5%‹Sñ46ä*Úùœ6=«ÁOмkw£}ŠÖXáóÛs2| /¾;ý+áþ‘áý>äëZ¬ßj’6fóŸÊºi8¥h¯¼Ò\Ìõ/ˆŸ“]ӾϠX?–œB¤| îæ¼ÏNðëj7ºT÷Žì·±‚{V§‰¾%ÚësG¥xZÂ_»µcëÍoxÅ6?l¿¶5ýP}¡”yvë”úã¼eÌîöFU;#zøÛMðülÑÚèðÌA˜HG™jÒð߯mSÃt?èòMä.Ù¯.åsëšó[x³â6«q«ëWFÖ7Ùkn’ŸŸü+°M)|'£ý¯VÔc[‰W)n>fõô5ÝFNJèó«F1vGu}ãM;Å:zÏâ-.IY98Ö±o¼k­Åoöèði¶±«¯ šÍÒþ-iú.›z¼k c÷“JûrqèkÅ~+|eµñþ§=Šø®K{9?v¶:s`©ÓÍÈïs |&çÄï>Óîµq¯®#mÞB¶àX5ã¾&ø‰®ü[ñkzo%³_’aRÙQ]fgá xx¦Ÿ¥G,“)"K• Y¿­c{'„ü??ˆ¯ç·¶•–ÚÞ4ñŸlS\Òë¡ÉSâÐçüyâ[ÍGøI0Ý‚ÝIÜ·\r€úúŸZòVðÕ¦˜6·©…ºcòûWC{âïxŽêêÓB±•aóyÍçñÅ?üQªyz‡ˆAY$åwt^.W±•úO¯ =.$–òòk¯›å…;×%⯶ÝÀÖ¶ZoÙ­_øÍ_M¯Âo èÖ­6¬cy£çj¨Ò¼âֻộZÇB†<¯7n+xóxf³à"ÊU·¶F3HxÞ™ªvþ ¼¸º[M’0Võ÷«þ>ñzRÈcÔ£gÇ\ýßóô®×â_‰ ¼iÿ¼ÿyk¦+AEòÏCÒ.´{GHnÔ™ìô…rü3¸¿ŠÊæÜ²õi9àú漇Ã:мQt±?´K2€U—N•ê~ðž¡áØ àUšuÉËa‡°©ó:¹y¢{×…¼iû7èWqÛ,-q `>SÁ¯zð'ˆ´››X¯|1$6ö»ÕÈ3ŸjùOáÃ_.ísQ´†i2•:úKáv·ðïÖ÷–*Í·.ûŽÕÿ8­#Í¥ô8+rúž½ko©L±Ý,~côò•xôíKÁºæ®F£©iÒ$¦Udà3uéšÇÐhí?Ïéz<^Dkþ°’?.µ›ñö›»ÔìÚÁ#òÕW1¨íÛ'·=>ç-¥±ÏüLÔ´-ÞkÍsPI.Uwï–.?JøŸãGÄmSÆ^(’óMñ][Ú¶#…¸Ž2=»óÞ½[ã]ç‹uûk¡cyþ²O›-ÔÕçvÿ -ìü1s«Üéuà °Ç·—o§Ö°ö’”™¢$nÏÑìukï_x·XÿJhUš?3£?l ò?ˆ‚ûVÔ¤o‘$­+1XÛß§Ò¾²ðÿìÅñgÇëâGý•¡[Ócåù@íÒ¾`øÿ¦éÚGÅ;Ë /O·•—Α÷4ƒ¹ç¥kw3–¬òol"±†ÏÉL'¹¬+k™-ÎPƯø‹U¹ÔõIf–v“ … šccÎ1]HD‚å¼Ï8دbý|)¨øËâíœ+òƲ Ͱ±\žÕÇ| øU/ůÃáxeQæ03mëÅ}ÁðövñÏì¬ó\ø³ÃÉ%Œ˜6º„0–r{öÆh"Zè}Ið?à·†~üO]Çím&šÑZÖÆfó$œ…à0Îñ­ÝOMñßÅ/ˆsëž ñw…ô»}ˆ¿# ιä݈íY¿±‡€ü;ûL|rü]à›åÑôøÃ_êl¯þ‘ϯ¥!XǤø†=š´a„Á©G¸•‡aÇ9ןêž*øàßZøÇÿá±›ÄÑ,ú‡‰´õHmlò6€¬§p\€Fx;²y­ý3Æÿ¼5ðâ?ËãK‹è4©#Ô´Ë}0˜Ú)¶•,»>íŒ0lžsXÇ•?xÚ«œ£îèw¾ ø+ðcBÕ&·ðRéò\iú´yÒ)IcµÜO—Çß\’«»Þ¦ñ=‡‡¼Añ&ojue×´ÝO¤ÍgpcY¬dmlì1È}˜ öSڸ߇:«qûExëÆš…ž›u0’a«Ø–ÂE;Z#_–HØ€ÁÏ#;½ëß< ã¿¶½®IñÂúu†šÙÓµëoõz…œŠ ã'*Û—æÛ‘œæ»)ò¾‡M%u©òþ§©xÂÖwš¿ÂŸ‰Úì—:lËb¶÷ŒLS³ ‹õÈ\ç ýkâWˆ<­xŽ/‰çà-…÷‰¬î¡]vûRµLA©ìòä‘°ß1(P~Q°‘Ö½ãZ~Ì~"mS_Óô]JÃVÒm¼ûg·²Ž8aÝ’%äbLI‚Cr;g5⟾2^ÝüQ»ð¯Ç?ÝYø‘¤†ÏP–+µ‚êAx§f~­¹Hm¹RãɬeshòÆ7±é²ïí1à¯üÔ%üR ñÆUiú~¥omqªÄ‹pÊh“%y8,ßxcJ¡oðÏÀ_³wìñk£k:U÷ŠfÔ-o/ï5˜”2¤Ûw•gÎ3£¯q]¿ìùð×á&Ÿâ _ xžãXok]KR›|kŽ!±píòr‹'ÒC¢Éâ+­&×B²Õ­51 ¥»+ì–;¸'b¢…Üq‚Ç­U¹b¯¸Fò©dÿCŒÕ¡â|ZÇŠ×týjMK^6ÕîR[‰[?º’çåI°$ÂèKŠŽèq•â­Ø­â[|¼yᯄwÖþÕ.#] É™̸òÏÚ&rå™Ý•Œ„É< ù»ö¸ðÃËÉ<-ñ»ÄzW‹'Õ5Z-?Ãþ¾×¥»d‡;„d0ŽF*}‡&½Óö£ðïÆi¿ þ ÛÍý¥u} ’_fµ«èìBàÌøÎYùmÙÀâ²?jÙJûÃ:n‡â¯ü@mcû ÖKû;È#ûIbUv *ÈR»cåƒNO2ôè8ÚG•x#ãOŒ~!Auâ/øwL𦅈lõF[’åA‘Œ –°7Ê1žkÔ~üý•5Œv?¾ü[Òµ 'IÐb3XéwRÉL" b˜ìÒmÝC ô¥øIðá¾¥ðþ×_¼ðÍ·„ü;©iñßêÛZÑË0eÛ²ÙL¬©»#¾HÉ'Ó“øuû|Uøyû@ø›Å?7ÿ„³R²›(H¯˜Ý„‚ã'Ú¾DÑmôŒ¦‡>¾Ô!†úöi#›Uù¼ÅÎåd“9/Œ©íúVÔ’–èç«.]gñÿíã©ü ¥øgAÕtÆ—‹u®%œÅüi± «zÇ?Â1^Aÿ '­Äm>ø·Ãw—šM®—¶þÎUæ+½ò3Üö¶8Ô-u"ð‰þ|&Ö¿µ|Oáãyj©Ð-ºÉyr _›Œ©Çñ}êüÅ?³.ƒñ‡LIﯮ5»­:úAq´ZˆR?.WÏÞ‘È>ëÇzÚ1Šz#ŽèóoÚ#á%ƃâ7UŠÌ6Ÿ6$¶÷ÖºªóÔŽ{ׄË,O6Ä´òFìä‚Í_LþÖþ$¾ñýÆŸàV8t/ ÚÉcq•ŽR©™ÔŒœ³\ü4Ñ´Í>?xY|@¢Ïì× ¦î†ä¶Ì—-¸dqÀÏší„´8Ï:ðo„<;bfÔ¼S¬Éj±¨“OÔ`ƒÎØòȽ@9î0x®óBø±¦h3^\xóÀZ­.Ž«{᥷–)8;²)žJ÷"­éþø3yg|ßþ&ÞÙéßg7?ðëö«)¹˜q±6ç‚ \óžàöê>ü)ø-ñÒãÁ2x–ëÁ®­jR]Q ÆšÓÿË7‚a™!¸d;€¯Û¾àjXþÞ¿?iBðÇ-Qµ-kº‘—Â:´+åËio†-jvã÷!p»µkë/|`øuão…v6žðœvZ¶¼ÛÞ[‹Vžg†2 Øv`c20W Þµñ_Â?¾,ðgŽ-õ6K­PŠ[¡ +¼³4/¡Ú:€Fìçzˆ ~!þÍß´-¾¿ðÛÆ^©g$>g…4ýKPòL0Ëÿ,YXvÁd#89ç5”¹nTd}—pþ;ñU´šö©¨A2­æ‹k|òÇb#'1ã³.xçèoûIêþ„¹ð\Þircš÷ÏeˆçpÜZ9x ô\äÿgÏÚà׎ô{/‡5+_øÓO²ß¢øº8DH»¾k9±•m¼ ‘žà€köÔñ–«Ù¶‡âOÚêº|šYšÛ\Óõ‡·žÎEùKìWÙ26 FlZŽV•ÑGñöñøy«^M}à=zM=š¸$óô8¯†~4éBÒHõ¯xíu++©+4~TѰ<«.:ãБï\m†£âÚë¬ÜF§ïˆ³t¥-[:#‡èóxÇá}½¹xõϸ# y²¿µM{ñᎎ7ßxÆòÎ8Õ‚ZÃ6wñÔ¨ë_è^.×l­Þ4Õ¦’f_™šRxüêô:ÅÍôî¦iŸ¡¬½Ÿ+:#G¹õÇ?l/…–voƒà}2öà.Ô½ÔlÕ¤<{W„øßö„ñ//dAö[bk{`«ú(íéÇ­pöR­ý»X^GæG—åû´ë2ïM¸’1ºîùcnéŠRÐè…8ÇcCWÖõÉc¶– «æhÂy¬~î;ŠÔÑlµsý§bÒÛÜýõãߚςßY“VŠ{/ôx—‰VÆ? ½ƒöÃ6£¯Ip¾êœŽ:`cÖ¥úšŸ¥™,×Q³Ód’Þ5ÚÉÆï­}û"éút¾;Ñ_[ÓV{w¸†Þ6PL-+¤lwÅXñßð¯ø{â+KKK‹ mÖW’6I!‚‘ÿÏ8¯Jý‘|wwà/Ž6:‚ÞýŸGÒfKû¯:ÝLb8[qÉ`yê>¸¢?¥'ËcÖ?h ï´o‰k¡|4k{[ÀšõÖs£šØKþ¡ÁàáUNr+Íþ+x£ÇºèøÏ¦Îd¸¸Ä&ÐÝ7[cþz.r6žÌ1´ãšÚøûñ*;_ŽÞ ÕfðÖ!×${Ý?P²S+Ëß:†ÁP«ƒƒŽsØÕφ¾øfæ=CÄÐØìÔ—ì7žžMÿhÇñ ~ì¼òp1WS™ÝSWF¯Âÿ†SG&—ûAü1Y6Æêúͺ¾^FóŽ'RAaÆAȯ¶dùtñ•¯Å­.ÎÏT𿉴٭®!jÉ`ÐÀÄ¢²òÍÛ…=xÅ|™ð+ãÊ^[Lð¶’º=æ‡y7Z}­¹ÆÄ¹ŽDFN2ç ƒž¢¾Çýš|1gàŸÅáøàÑu»$¿¶`¢%“r´\÷¿|v¦ÄÁ¥HŽÐsü¾†¥òù>Ñ…nŽ™ëPĉÂy=ÇñU«Xâyòѱ;H]ßZ6*:É!öÖÁ#2Èz/úq[¾øs©Ìu_ýîÆÍ‚GãÒ«é×–½ßÙšGSû¾3j…u»íJ]Ú•Ó*ïùmÂþ•ÃxºŸiJŸ³ÃÆ'Q¨ë¶6šp°·¸mã;wn<÷5‰©øæÿQ ¤øtnRqˆx$ûÕ «!t2 6çµ&–òhR1µZMÙ_oƺ¢ù£ª1«x½·KÕ'ðFœ·•›R™v¢¨å8ô«^øeãoj1ÞxƒYû;LÙE ¶ÕõÀïUü3 Œ±ëwò´×(#sp¾µÒ_üDм9{6³©jÛŠÆ« jÄ.~‚·…“3’´n{rMð×ö~ø^ÚÙãÔ¯¡‹?6N[ξSñÏí9ãÏëWzv–˹±¶åO§Jå~?þÑþ¹­C¡Úß»[¬`¬ sŸ­lü"Õ'´ÑàÔäÓ¤gáyϵuªŽR²<ú‘å OÃ|smk©ë/t«3|¶Ò1^Õµkà{/Ù-™Ò|ËÆûÍŽO~õï¿~k^ Òãñg‰“ËV6ö±¯Ýü*ö¯á Á¾²Ñ£’Hãù¦‘{þ5ÕN_ðNW.‡Í0øwÅú®¡§ª&Õ8†ÙTóþ5¿sð‚ó[¾]GÄ>jÇŒ,`ôâ½Z=.+%þÒÕí#šX¿ÕÇ;8ÎkžÖ|u~,æ¿—Ne1ebR?Q]1„b¬qÏI\–Ã@ðå´z.co#7úæu½~•柾+éÚlâ6˜¢Çò´Š8ú(§øÓâÔSOy1¸¾¸'l)ØZñ·‰|gx³Þ¦L‹û»XúÏSéOÉý«™¾8ëž&¹¸Ò¼/;Gef¸o½ÿê¯ñö¯ukgöMy.î¦cþ¯'æ¯_µø/{ª\\Z1khšL±îø­à>•üL.EkV‘F\zÒ2 -餰dgËÏAé[Pø’ÛYÓä’Eó nÛŽëyþ&¡yåd,1/F^6ŠžëÀþÒ´äÓá±–IšLmør:ÑïDÆRMÝQuªÃ¬jËb—«›°£ÔVçˆ.ô¿ ´w“ÙLÑ[®|Í£Ú»)>xÃ7 ¬ÜØÆ×*»‘X‚Êkø›-…Ü sªMäÂòíŽ8×ïÒ§]É”œ:ø›ñ×âW‹´¿øGm>Ï¥é-yq¯ßqZøân®xŽðjZDÌ>UÿX}kêÚSÆZ¥¬z~’Ѷá›ëùæ¾`ñæ§âm[P–ÇÈò¡ë4êq·ZÖ2¹,ò=JÆMñ⼮ϛ¥fËòßxÖŸ‰.lîuK<²Æq¸ÿõ¦øg@}sX·³Tm¯(cÓ5Õ‰>Áÿ‚[|Ò|mãÖ/n¡µ’ÕD‹s2pÞÞõ÷§Æ_x¢æÎÏÀi°µ¼’¬vóB¡¼ÃÀ |FøYiñ:Æ×Æ·ÿÚ¾8º·–át{éQð"Žc\íaÐI>•í­ñwÂüL±øâî4{4µDš;9%†3‘ÌW¡Ï^õ{öý…ü £xêã㦓z./4­P‹5ÐnÚueaóY²GÞ pÔ¨êNÝ´=Zt½œuGÒ~ñ7Ž>%j?ð‘üPñƒ¦øfÞÅ.-­d…SÎx`»‚‡‚½E¬|Tð7ŽþëM/…­umUº{9"vó–Ï‚¡~ãòA!FyÏzôÿ |±ñ%šèÞ4ÒaÔ´³½¬ÌY 1!Jd‚y<€:Uï |ðׇ ™¼º¶·ŽÂëÏkˆmÅ´sŒ©'#qׯzÎ4e"åZ‘â~øÎHnt/ ë>Ô¼'.ж6Wºxž[ ä”nY+6Ý;ƒÐfºï|1ð6•âéz…›XÖ¼+3½•†¡£Åfû&BY`“€êyÚÄ:`×°Yj¶#[½Ò4½)M¼…§ût3*Fû¡còǰ'œüÜf¹Ÿh–VZ½Üv6¶÷M$—ͨ:Ë-ºáÛ,GEã¹ç¯5«„aC/iR¤™7^û[¶ø?£hˆ4{Ë]²jR›˜ƒ²àDÎî¤Ç*Ã@5Àü½øÓð³_ñ'>3ø¨ëÚ@–K­«wŒÃj­¶X‰eÚá«yc$†VS€sêþ ×<)â­bçR´žðÍt Þ}’5ýÉN‘;óu8#œ{×9âв|=ø©/Éü¨5Æ¡o,úÑö„ºùXWlùD©Îx#<]¥{-yls~+×>è><³Ðtý ÎáµKx®|?kq‚× !h:€r ç׃ÅyÏíwÄíWTø[ñZÙ´ýoÃ:,×Ú5½¼~[=¹ÊÞü噯 xôsöéøãŠ¿¼;­øGO“Ãþ'²Ô 6ú¥­ÑiaM§ÍW ÓGWW¥jß ~!x§ÃžñÃÃ}âøGgÓu›É¤U™¶¤rÆÛˆž[ê+;snÍ4¬¯¡ÊhŸ´WÃ]9G‰¼oª.½káû{¼s*,z¼ˆ¡ÙƒpL¨¨@9Ç8çv+˵í{ãÄ?Û/ÿ?µãÓü;á›Èáñd0«­³µÄnÛXãæ:ŸQ޵ôüÐ5ÿèZÌWº]­ŠÉ4SiwVb‰¤kfUŸHø90$w¯Ÿ< sñ'⯊u‹OKͦÙÜÚëÑù‡ÉyÁÌQ©# S;€9* ¨÷®®í®§~ x»Å>:ø˜–ªi~û3_h©2ª¥Í°Ar8Üò‡'¨ Ž3‘s\Ó|%ð¯âV©«Ü¥ÆŸáÝ&s,1n‘u'W”‹É—b6â#Ö¼ÇölÔ|Q­xSFox²êÛÄ ÞâÊæK™¶Av%%çó°+,aº‚˜Ý]j¶žø„Óèºt×—~Ž¿gÓnÈ>jMt§Ìºí9`Ç¥m)GOS8ÅÝÙÛMIÖ´[_ki®i–š¡ƒG>†àmX~qæDÄ8zWŸüQoŠžð—ˆxöïDå}EN6m1¿ ¾4x[ÅÉ©Ýê¿fÕ5‰¬Ì:µˆyU¬-–/Þ»v)Ê€FÝÝÈ®Óá?ÅÏ…> Ñâøáÿ…Ú”v¯%ž—¤$×Ád•dXòŒÅŽGÌÌ@õ8Íbüñ寱âßx«À_³…Ö…'‰gÚtsDf†3µZL±‡Q’9àšôïê^ð/†^ø“ðçKðü×V-Z.FK²í¸Ä¤p@;º Ê+ž1–鳦R_ ·ó2þ%ëÖÚ}ÍŽ£®ø%gÔ¼PÖÓM¤´»¼ö7(‚ÝŠŠÌrp˜É9'ãž™ã ü@Ѽe¬|HÓôÿkšôÒØé­p&–ßM„‘ VhE Ø3ÉZ–^:×¾%ørmMµ·}J×RKxuýF]Íg¥Ç†ó+…’VÀ £$‘Çjà?h$ñoÂx“^¼Õ5-NâEÑïllÚßl’6BîA¹bQÉÆO5N\ÁI;l#üHñ·Å? øÃ\ñ€æñé¾"Y¡ÐF’aºWŒÒb@<×|®V0JŽ b¼ÿÃ_~Í?´g€Ú„—ÏMÓDyýš>§pèö.F|µÉ$`†'=+Õþ(ë?>*ü1ÿ…Eðsöyñˆ-ôMU§‡ÆðxaÊK"ù¤n%ò«´÷š’…Òv+ÚGc;ãìËgðûÁWZŒ~(ó5Í>Ý®ã…d_:úá‰1C +ÈD( ,Tg×á_Úönýªÿhi:€¾è^3Šû÷z•­ÇŠ’=RÉ7dLöó²0w1ci<•ìÿ¾$øóOø€¾(ø¯®.‰skf$ºÓÚoõa­Þ'1ƒÊî :O3\ŸÅ_ÚãáO‰>\XüÖn¯µ\†HìLÓiqBœ+n‹¸’IÁ¨¾¢åÒ÷>|øy{â„Z§Žþ hZ,ÓÂ?²êZ‰ ÛÅjç™Ì/—ÉÎ:IÅp¿¾kÞ9ø%qûAü&ñkx‡íÖ’C£øq-<«ˆ œ3ùjNãž„ ÜôkꯀšÃ þÎÞ$ý |Qðâß\ñ–§§\éºÅõæ§ö²Ùcr1lä±àzWξ×´iw–³ß„úêâ}‘ÚÜ\2;FœŸ-‹ ËÔeq»¥lˆå¾ìò?3ão‚ô>~Ò†ãDÔ¼AáF‰·,²|¤)aÀà€GZø·â;ê_ üJöúv©2ÜXNbÓM¼§ËHñïô¯³>0|8¿ñÿÆ(ü Þ CÄ0®¡©i7ÛŒv“ÂÂÄï`Fz“õâ¼ïƹøŸ¢ëÖw_aÓl<,ÖÐýžIK|¢ÌÒ|Å ’ö­¨Ôå–§5hIÄ󃟼Sàÿ®¿ñAµÖ­|S¥47-¬fDhÊ•Ult#Å{7„ÿhO†¶_¯¾ÜxCPÐÕ]mb±Óm^hDìÙ2‡ d(èMxÆ ^ü×¢°ºÕíµHmY>ÏöÌÇ$„)Èô­‡ß´H;¥¬ø‚ëÌ·ó..zìˆÀÙѤèó®Ïf¥ï#—ÚÌèlþø³Ä6ŽûÆsó][[´vù; wå€?Űç§zwÅý;ঋñùüó^Â?|Æ7ºÇ”bÉÔ‡nF:}+N‰ºv³&«Á#%Å®¡´^aófóUǺ‚Ö¼ÇRø—¦øâü~;²ÐbÔ®.mš/²HÇ`“-±ÇVÇ#Üæª>ó2+]ü'“ÃÖÞ×|O«G¦Ûë~v§&ÝÍ,P‰¼µlqó8ÉÍ[Ö¼AeáoÏ¢Ûx/ôÝBu–Âú8ÿtUQŸš7þG­z/ÄmSᬿ 4ÝÅ7rÛßhú \\A§á™¤go³E!cŸ•¥ÝîkÂü1á Í[Â:‡Šô[ÖžãL`ËuùÆÙ1ZE\5>ÃøŸãOjZÝ®½áÿZ\xvÏöx«O»ÓÕ/"³æ4à‚êî œ‚GƒñCâ'Ã/‰ÿ¬|¦ø=µ‹}ò}JÝ/Ì··uùD ‚Ðë(ܸdU‡´W…>8x>ëàÞ£¦fk‚ÎÙn5RBí©È›?vScÃ.ŽØæ øUáÙ|5ñ^çÂv×0鯫7•et±æ wsäÜ(8ÛžøãÖ{ÐøWÃúGÇo®“à I!ÕtøæÆÇÄê#–RýÏš§÷œ +ýkˆÖÄ=kÃÖö´Ó×ÄZlÓ¤šbø¢H~ò#o3,€çøF~•é>ÖõüH‡^8‡MѵźQg©<[Bd-ÊT=†ñÇ=*o‰~m'Åú…ÏÄM i¯'†Fkíªv6Ó‰!uûÙ>ùö¬õÜÒ3±óOÄ߇Kâ?ƒ÷7Ðt©,ï´½oþ'ú;6Ñ¥LoPy(Y°'ÅxÝ„7—7C3tòÇSøWÒ#ø]ãY[Nµñ§x'\¬·Ëµ8Ú›ßån†³|#û-Y|@™­ÿ´“«BY+ˆæaÏÞ^ú9Í Ûiž?¤‹øaxŸ"H£×iÌ’Gê¿í£ëX“ø›Ã~С’ÎÂI®“ÌÇ {ý+¬³Ò‘fûV‡â)m6¶dd꣱%íÿõR±ë^ ûMÜåýª8¶Fþ":Râh¹Œßß[^\IªZjN·VJÑÃPÅ—j^¦¶¼>|q¬øëÃjÆ;­A£ŽMNGÚ±ÂJ±éÉð¥¤ØÛè: Ó»Z£M´DÓY®R0sÁ^ÇúW3®ß^ê~e¥Ç‹dh›{~‰=‡•.ý åV:­{â ð·‚ìôÍ:ëûCÄ:H0d) nˆ€òH?ÅÛµy†âMrçŰý¢ÊXL×*æé2\Iœ†É嫳Óô­Æš[hž*Ô @îÖLMj;::ûu¿ì±âEñ®”Ñ]ÜMo4‹$:„*^T˜t> àÑÞìÆ³Œccè/…Þ=Õ| â6Õu;K@j3\aW)Œ’Ç¡N1éß5ú=ðSÅÿ ¿hŸ€:7߇ڽå¸hf02ɺéžßÉñ\åPýêüý²øa⛦[¯ ÚÍÄ»¯­Uw+p:èz­z÷ì³âŠ>[ß hš„qøŠÇRŠÿG‰mBÈÌœJ˜Æèý9âˆÔ”eª8exî}ã¥ø[Iý ~i?ð—Í?t}Yt»ëììþÕ`€ÛÎF8i"Ân |Ë_>ê? ïþ|@ñ…â-;QÑn&ÔþLÖ§dÊË‘"1XŒ•î;WOû6þÒÞñ—ÅáŒZmæ•uup¿cÕ­²‘Å"8hÝÇQ†ëɯ`ý£¼{ûBü*ñŸ¨xCÀo¬G«ZºÍ$jn-ÃE#aãÀ;w,ƒ#º+g(Î)£8Þ2?:¹lIøÃ<óVcŒF7î¨<ˆVŒ¤å€ÌœSâòÞ\2•NÛ†N}ëävÜДHËpFåMX„hîToõŸB™<Ǹííž´ì„ÚZO”tw梬¹bÙׂ¥í± Íu ¤~Dcå •`Üš¡Ü3HÍŸßoàqÒ±u=Zx'ŽÞÛæ2qÐñSø~Ù­nZòFi2xܼ å£NúŸaˆ©ÅCÈëᖴ̱å™Fã»ëN‚K(7<ãå^¡óéÈ!E6Óò⦵²¸¾+¼y’C‚ÍÚ>µÔ½ÝÎi##Wñ^¡¥A'Ù™FV0ÍÏç^y¬ø›Ä𿩉e´²H¿»sÉs œÐW¨è–SêVqéþÒ¤»¾½—ý*îA¾¸ô«z§…<3ðøÍöÛ8ï5i÷J>b®z~µ\Íü.ËðùŒù’Ëà>¡¯Ö|O©-¼’I»Ë<;ýGÒº Ÿ„ÿðŽèŸm¶³XÛË!YðY‡åÅ{·†ÿgMuÞOxõdV•„[ç‘Ú¹_‰:}åŒ3]ê0,6ÈO‘qǽ8ǹ.'ˆJÐì[S׿DÎ|¸ý³×ë^gñ+âm¿˜Ú^“hâÑ‘Ž2+ªø…«é7ó\]j·­åDZ¤ÃŸZñßøßEHžLI¤eù¤þêç¹­¢¥Ð†s>#¾ÕÊÝ ³XÖCÆÞâ³z-Êë¡ÁDšN§2j+I¹·êGø×;ñcÂút÷Ö×ú|1ùpýÕaò¯×Þ½  ÛCk¾Þ¸/ÌXô÷®âÕ¾©ghñ-ÊœôXúšRÒ7dý£æ_Œ> Ñõ}jmoP8æÝ3'P|ÛûAkZ~±eqgá ­ì×åóp\ã­}'ñY6\i“ȹ•ÈoVS×5åž,ƒÃ2éžE½´rD­ûÅeùª)Éö7”y¢|›?†.´Øãšò5Q'*§¨æ½#à׆4 ÝBÞÖÖ ´¦‘D;—89ëjêµýº›Çz~Ù#f“•ü«è/ø&gìÕáß|r[¯-Âùqÿ¡Í™‘UÏLñÒº¹¹‘Ï(³ô»öGøE↟³f‹ã™¼hÐj–ztnó\Y†WÈà*ŽãÜb½¯à¯Ç'Ñî~7ø›ÅÉ«Z«4š?‹yNCªàvã ­/ kÞ ø?§G.­«A©ÁecåÛÚºçLFGQÁõ­Ÿ‹?´·‚þ|%ÓõøsO—Vm$v•Ò͇åÊÆƒýq\؊ܲºìzxZ/”ŇöÔ—âOíãWÿ„‚àIioy¨¹m¡n<œ0Žõô7ìKà‡Þ¾ñ%÷†l¯,íu+͵¹k[ˆÁÂK'ÜÜ3•#<ŽN+ä¿…~Ðÿ¼S'<àXtñg¥‡Óô‹]!$·™ä#ËØØyú×è×ÀŸ_xGᆛo“¦Íqg ³ØˆWtS-ç¸àW5iԹш”iÑåêt/¥ÚÜ:i÷ww/xÉÃo2ƒj§ëœm=yìzWãßi>8Ñî¼7{ðå5u²ºò®´Jé;ˆûL¿)W‹§jþ&†êÇUºŒÃu&ã‹íeÜœmÆÓߊãäðoÃ;mFMfk­6cVŽòM&&’âÞhÈ]Ÿøp¼ħ8o³ðW†uË-Kꦩ²i¾H¸ûPáTœ†#€AÊ‘žk'à÷…þ%ëÚ<É.›¢øºÖasmxê³Ù^ˆËÖC‚U”©ç¡ªº”®‰ååÑÿ×~,x—Høùð‹X¿Òï~ÇâO yQÛjK ˆ—,ctŽàm œÉÇ#¨íY߱ǀþ1ü1ø â ë©æ©äSYÍ,À¼ÓJ¼ žH ËÉç±®ãAðï†ü=ðÇþÇ‚'kÍCE·]KWc¶f‰× ~À$)=v×—x‡âïŠ|[áÝGÂ>Õ´ÆÔõï*[õå‰Rào^¦«Í‡»¯N§¤ü:ø]ãÿx¶O ëž²ŒêÒO.¥u}xÒ£‚ªâEëµ@0{•¯BÖåð„Þ=Ó|Wm2Çâ Bê->¬×¤+&dB:`O°ÀÆ*ÃkÖZׂõoxVý5mi´õÒílXy²ý¤Œ+ÈáJOsX¿ þ!߯tíÄÞšmAtÓm¥ÚíŽK¬9ƒž6 T^3†<Õ(Æ1±œ¥)Jï¡ÃkŸ/[㵯‹%|JÐ|Q`¿Ùºl—‘è6SÜ_-ê_<©è6ž7Ò®.uM7Pó³Ñ¢Õu-?NƒævÉ[s.ï»!#û«“D›•ÜYQŠI).‡U'Äÿ|Aø›'‚ükáÕ³‚xã¾Ó¼3´Q‚$XšT8f W;GL?JŸâ7‰üEá_Ø jU·…Ì6©®.#·…îŽ p1na¹ÏÅUð÷Š~¶½«øöòæ$šÖÎHôÝZ©ekY’"¬ììÈr@ÇS\¶©ðÿö€ñŵæ«á_ÚëSi2GHÚRdÉb>ñ8n@ï\·ÃO‡_´?…ôMcáu„:bÞî:¥½õ¬‰~mÚrñ…¼Öi[åËF ¿€HòïhµÇûÛ1¬ø:ßÄ–sëW“ZÛÿm<Í*ÈYY!+˜Ñ~â¡ Ù¯ ¾ÝþÔ³øÎ/üNð6ïÉ C°Ô$¾}xùÖ÷ËNXŽ‹´±èëOÞQ±Ñi÷~ø#{¤Ëñ1õWñwŠá‰^ÓGC$Py6èÂ1))ÞÀàÝN*çʼn^&ð•ÖŸã]P“jÖêš‹qâi.Ú}Šâ8Z6m¡”1™†â71Îp¢«è3øŸÅpjW:w†­uOZÝ]Á£jwÏ*­˜é!“€¨«ó È+ȯøåð5¼_ã¿èßµâ¶fÉoáuÓd2O4O´½ÉÙ&B‡ÆYÆIàp*ò*RW>~ýªu |}ý¦mn¾ hl¶:½Ä>,ºÖoKOU•b…Óv7Øv’p=€Åv¶úoŽ´Pð“ûãJÚz\G¬²ý/YáÛ;ع'%€ÆsŠôŸˆŸðOŸì‡/øO¤. º^¨÷W‘Ãxck¹É%$yœí•”tŒd¦zf¼3ãwÇÚö…ø…áßü †êÖuÒ%´Ô4]>K­Jd—"=$hÀÛ¤®3ÎD´dÛ™YcûOüø'ðLöHñ¯ˆ¯u7PÝ<Öú~œÞ+²Ÿ1bÄ+|ä ¨6Nxç‰ðg‹~ ÿ¦?Æ¿ê~¯bÒ <;t®Ïl¿êƒD62ÄóÈ'¹ûNþÍÏðúKíKâ÷‹t]SÄ ¥´º·‡<庛Oº+µcyS+† ùJwr*‡ìûû;'­?üjð”wó5ìLÕ-]§c›ñ`á•z7x¥îòÜ^óÐóïx‡à”²ß|]øé®´×Z}”–þðÕ¤óC©O1¼~ŒÇæ$’*¸ðOÃψ´·…ü#ã½Y—Ã^2³Ä:¥­»†}£ŠMÇ2o¼N9&¾Œý¡ÿfÙÇ]ðݦ—¤[ý¹bÕîð†±&´é­}§I¶Ô'q cÌQ¶Æª9g<) u4'.Y-Ñòí¡û7øÇöø»©Äum9¼€ÐÚ°Š(ÕŽÓþÈÎOS^ñ2ÏþÖìüCá}%aµ¸ŒÞ}–ëéîÇÝüÈÏZûƒö‹ø«®x»á>¡¿à‰mo¼CfÒÛGo1• Ùeêp>SíÍ|_¬xƒáÝï„ÚÛÆ1¬Ú£B#´ž1Ä ½=ÓÒ»pÓ”´}?ÆWE¯ø—Á~9°¸‹S²šÒýµ&´šÝvÆÂ%,Pç¦@8÷Å;ÅÞðŸ‡ZO[x†5hcÇæ)–1$¨J¨#61‘ØŠóy¼]s ^Ggáé£{uÚë½AËzè§ñcê¸Òu½6¶¸"y£‰ÿv’ªü¤ü¹«©ÆÎèåæ8ß^K¯kú|·RÄ#Q#M÷›j»éœÕ øŸTðž¯o©è7¾h¼»‹qÒE<ÇùæŸ7˜÷7ZÞŸqn¶kdã.QåÙŽç9÷¬ë +SK»Kãi#FÒîVÚyPzÖ{ž×à¿éu»/ßZG kZK³ßÛ2ªÎÈyór}€ÎÓœqÅu>,ñ7Ž´Mu ñ&†‘¼ ¹µÉ/v¸<F9=€¯-ðž‰+|FxcOþÒÓî$w¤}›X€X7§Í‘^ù¡ëZ§Ä ÜYO¡Á¥kb 9­òÈ>u$õ ONµMYFׂ~&ø‹ãÁù4/xUu­CFÞÞÎò`Ò 6ûÄã‚9+Ó<¬köž ·¸¸øeuf¶qÛÛèÛï{ywØIݵ€8 åN21^Qû>ÝÍiâÆÔtý ÞÞM˜†HnwFì0IþYï]ö«àOø‚âátw³Ó®²Íuà‰pç’Œ§ãŒ0ëYËÈ®SªðïÃÍuý¯ñÇ;ä¸_ßEã½|û¨þÏßTMöí¯~ÏŸ&âãþZ/¨ïøf¿Dî¾x“ÃÖIm©AÖš9s>Ù­ í–ßJ“Âʾ[îWóW‡|×Ô¿¾|;ñõ“[6«Ë3F·¸?)‚:ûWƒxçáÅÂÝNkmo˜äÃgŸ2Ùôãµc.mŽêu=§©ÌØxY­u©.®teùJôÀlõ8ê+¼Oxk[Ñ'ÓµŸ ɧÜ&;¸ò7pG5Ïø;Ä®¢á¼ihÖñÍÿë ·bºOüCð•£»Kë—Ž,Å< wqÐõÊžÈÒQ‘ÊøƒàG‹,ì$[m·ŸèàÃäMW×9ý+—áDÖ–ú‡ˆu {y·ÚHË;:õ_®M}UàËÏx§ÃK¡ØÃt«—t-e+5ºŸâeϯ¥sú×ÀÏk:Àðæ§¡š™–9#Y†Xƒ·yI™—²3úǽª>s¹Ò­‘ô©#¼¶R—æŸÓ¦kÜ¿e‘ñáTkªÁ¯ü·ÜÉgwÍ–ÝHŸ9Ôcˆ®~ÛÀÖ~,½›Â¾3ø{>š!Çúd*Á³÷qŽ Ÿ•zç|#§­ÒáI5彜b÷©i¯N}½úw¡ÆPÑJ±œ¬z‡‚|1àMvš]_TðΤY¥¸ŠÕšæÂE9ç÷‘uû¿0ô®†ßágŒt¶·ñF–²jQí!õmãsÂÈ~YFälcsо,kzî.âÿ iú¬ðÉöˆ®Õc¹î–Ü n;}s‘ׯdðmýªx^Ç_ðEµž¯ õ°Y£ŠìÂmŒd€rä~•T_ò±Ú]t>#bK1-Œ@ÅHQ·©s»éÛŠj/$%~l½¿:šßs¾r+âõ¯–¹\²ì(bíoÓµK1†;}Šß0çùUvž{|M/ÝVû§Óð¬»ýAö8‚O½Â–<×>#XØ÷2J+ÛsH[›ˆæ˜šÂÝ"Ž•Ê™^Ð"óæ#˜/ÝéPêšýÄ–fÑdÚYvíVù±ŠÞ[ðr‹±ËxãÅ×p_¾«#³H7*+Ëø{ækšÌwzÃoiÌþü}+VOM®Ý¨X˨0ûß6+Ô~þÊ~+ñn±&“7ø Ì¥} .o²‘¥”o#Ò~| ѼWsnòÚ´Î#\…¯zñOÀÏjÓXé>ŽX­âLJê:{W¤~Í—ᦗomªZ¯˜Ø °ä¯ëé#Lø™w»w1ÂG¸ {çÞ½=rë¡çרµløSTøwàâßOÑË3a®&u?S\;øKÇ7Ö­ô;oµµœ'ý"ëßú?¯øoáö³lÖCnÍÈ1©SŸnkÌhôÏièZ 0ÚEÅÅÃ/Í“×Þ±<;†§ñCxŸQQ2ÛIÖAÔúó^¯ãÿ‚Rëö[Ì6¡!»ôúW“ø§ÀÒøÀYjllÅ›æ$7Ö›m½N>NR¯Æÿ‹ «[Èú}Ìj¶ÿêÀé_(|kñ¿Œ|a§L ¾u3æð½›ÅÚ/öö¢ºN›г6Fs¾ÕÄ|Wø}„<qm23\MÂÆ:¾{*9¤â÷¶>Gñ„úƪ[NµfŽ8׿‘Š£ð/À/xîöD¶‘VFÍÕÄ ‘°×¯øgàö¡y©Bu»_ÝçsB‰ÐßÞ½Ï@Ðl|3¥íÑlU>Q´²¸ï[Ræ–‰˜ÏEsÍ< ðg¿ !·Òlôÿ¶^íÄ’``qÍvjþÐçó.ï:³zS5ÏCá«9®š%iF'$sÛÒ¾røáñŠK¨¦Ñ<1¨m¸™Žé¾c]±”i£©T‘íºÿí3àÝ;P.w¾i8u^ÙïÿÖ®ëá¬Ô"þÕžÕ^VùÙœüß•|_ð#à|c⸵-^ôEj¿33gq÷Í}¡à/Úh˧i·m#žëùÕÆR–­KÝ•‘ì^¿„[”´ÒWɇƒ¹GÌj÷ˆ$x£R±Ót½.ûèU™Õº©n¼àñ_|(ýŸ|5âmJ×KñÏÙb–ei&wV#ž=«ôÿÿô‡³Æ›ðÁ>.³þϾa-ã\@$¸¹È#ØÞ¤ö­¥.Xܬ=7R©ç¿ð¶>üfðý÷ƒþh¶q¤s¾„ï“<3£žž½³]‡Ãü6ñœÖþ°ðÕ¯ˆµ eZÅúÚ»Çc ðª¸ùzŒçZ¯eûYüÕ~ßâk};P çZý˜Ç2¨(’nví^ùðIÑô/KðãàÃûïÙëW(÷Z®³}¼|·¾eûZó×4¥f{ÿ>kÃ²î›¥Ûøæ×Tð|WCMŽÝíá1Gjv'|žçð¯^Ô¼aý¡{«øGRÐ&û,Öá–[Ï– ˜~o-‡9ò1Ú¬ø.i°/‡¼¦ßG,[c’êÞŶJØå÷0 Œ÷?†kÁÿjÏø7Åþ œü37Š48Ù[Pdw„©lŠsŽ ý3]\¾Æžç ”qUµV;Ïj¿<ài4߇þ$½¿µcp¶{&vÄŸ0òIïóqƒ^/á?Ú'ã›{}àÏŠÿfÑl-£Äk¼Žu{\J6yØä+¾ý™´_x/GMZðï†"Ò¯![‹cµi$–äÎòà|¿6NTm'­s?µ‡Šï5½ ãÃÿõ­Õ-ÁšÞi!Ž(WùÝ·áÆÀÎy’幤c.n]ÓêÏ4ø[ûBh?|eâ‹ÿ ü9Ô5 *Í_F±7s¼K"2.èår˜3Ó±®ŸÄ3x×Ç~Ò|1à_x~== ¾“!·šÒòÜŒÿ¬WLàò¹Å7ÁŸ|ðßà=­ú|-ºµÓÍ­Ûj‘ØÝE}æ$غ±xØz¨k7Á¿Ͼxl|E¨YøWP™mlïuE->ŠçМ“!X¾AcÒQL©JþG;ðsâ.µâ‰u¿üIÑt;ãâ bâòc™#¼Ž$aÔpÂLƒœäV€ø'§|W›ÂÞ#×\yó$^T…—íÒ¶ZX‰ã,¤|ëkƒñGƒ| ¥YGà_ˆój:Ž<#¬6³k¬i0Ǿ·bÙ"HÉÉ•Hç®Aã®øWÃÏímð£Ãþ!ø{§Ç}¡øšy¡¾ŽÜÃçF¤”’"èæ ´¬7V‘Kc9JMÜÏñçƒ|Iñ╇˜Ýi]¾§5¦¡&Ÿ )IÑ¿r¥‡dcžÆ½Gá_¼eñWPñW~(Á‘áÝÒ;=ιû*Í«G«°ï.Ic±¥|ñׇuøWLñ–—q Ü_ÙêÒ^;ye\†—rw9Ía|H»‹Äß-¾ë>=Ònôk‡FÑÚÖ$ì ·»øœ'Q×>Æ«‘F&NR”Ž£öEñ¯<%ðËÄ—ŽŒÖ²j>&šÛûRáË-ÂŒîROü³ä`÷ºXøÒMJǺþŸma¯\‰`¸·P¿b‘a%žÁŽ^¸Ï5æŸSá—ƒü5®ø>÷ÄCUþdž ç²Ò¶µºÇ÷ÿËBÄ@s[ž.ø©àÕø[gð×IÓ/﵉4(n?´g›næ 9ÊòzàôíŠNÝKå–ë¹Rëöxøýð_â&‰ñ;Tñ»K¢Øè+©…ÀgžGùö ì’ÇûØí^ÃðWÇ:Ÿ…þ ëõÈFµyaðΛ ab HŒc?¼vå›Ò¾Fø©ñ/âæµÞñ¿$U¼ž5ŽÞ7d†ÂÇË6z³|ª=s^åðÇËám\|?žÎoøFôËHmå†=²Ã¯’²õ$±äž*ùd)¿g«¾Çu¡~Õ¾ñ­ÊÍ}¬Ïk¨ÜèñËxö3 –ñõû¤œzùwßµO‰´Þ¯ñgFy®<;á®4½.˜ÿ¤]H›šY èz^+oâ?Ào‡ÿœsŒÕk+“U-OD}?L²´øÕ kŸg¾’á®uÝKR³ù­#é¶"ÿ(¨ldšç~ ~Ðu$¾ðp]B÷E¯ÙéÛæšþLE$³gs6Ñ€Ž5ûhüQø½áïÙí~êŸ týZÞñ ÞM§³Ã’nÁ‘±÷Цq’'Ú¶?e[½WÁ~¾²‹CŠëº…ª]Á:Ü‘F`TúmUÈ’ÄçÞ§—”Ú2r×±ê lþ¾qiñ»µi4ûxauýÙ˜–TØ =xÇ8ª^!ðíñ3âEŽ›àŸ‰V~ðþlóêšFšë Ì‘²6ÈßoÍ€Hcïõ®Ká¿Å={ÅÞðu½•¦±«´‘èãXÛ$ìÑ Ý(#åÿß9ï[³·Çï kþ( ¤ékâqäkÚ»HÛ¦·ROû¨Y±œtgŠÎ;ÞF’þéÅŸ,gèæýœï5‘yu›oy}yxdšI[vG›.àªNãqã¦sÚxkÇ~8¿½’ãž][Cµ&IüD¯¾æão,›@R€~¸MCà$Æ÷Æ|câMmúùïíU¤fÕИ- ÜárÛ{œ“Æg†>$xÿºV±¬øsPtšœgIÓÖÅ<ù’eÄBà(#%‚ŒŽ™¡w°´JÅë/Šÿk/¨Õ~ êÚMá·Ñu(ãÛ"9+¼ åÇ#Ž+Õþ2h‡Á[Ø|8Öäµ¹¸±‰õíKPº/äU Ã~Ná€Øç'Uþ|KðÞ©á[?·VÖ‘ÉÌ——z…Á ,Ñ‚e+Ÿ•Ÿ˜ dNxߊþ5ü-ýª>4Ýk×i¬kÚM¯ÙìeŽY-ô«‰wIÝ÷†WƒzVŠÖw2ÕIElƒÃßõ™þ)x‹IðŽä]RÒØE/Œ*wK3¹[r¯¼ã­QºñåÖ™¥jßìt;'ñ’ÈÒjë J“C§’ÿ} ¥‡þ='Jáÿi3âíÊc|*ðþ“á?K³Ž;íBßM9˜dHv©bÈ›‚€Nì¹â¹~Ðw>Ò¯>\|>¾Óä¼µžãÄä:l»µ8#³Dåf'T`AÉÉìV›ž§ñ3â¾1þÎóYü#µð–±¨C¨¢h"7Å1Y>b©Ç;™I$ `WÌþ!ø-ÿ=ðöað©'·ð•·‘,ú¤Z-ÜVöP´Š2æa….@œ{šóß Ýü2øŽuŸ‚ÞøâÏè:|¢îÞë\V³û:«³J[ìë<‰3‡aÁ$×ÒßÿfÏø_ú7ůünÕ¾"x ¦3µÄs¬!Yz,©/ÍÁÆNÞ}¢QRz¢bÞÈù ßöKñ9ñ^Ÿð›IºÕ¼G¨jRís\PŽh_@ Â0qžO5õ‚~|IµøAeðÛÃ÷×iûs[^iS]/— |²ñ'…|Q¨\5¬÷ÚörÝÍ#;»þí­d¡YFàÅ€ÎyëWzjrÊ|ÌÈýˆ>é_µö¥ðÆïO³³–ù³#ûe÷Í¢æ¸ÈmØÈñïüGö ø‘ð+âÒü6ðÜI©h–3I ޱB4½‘Žæ+ìšûà´^ ð®§ãxkãZ=µÞomsûÙ—£s÷‘‡@ äšñ¿ÛcÄ^%ñ^‹g |3¸Öµoé¶ñËâ ~pV¸cȉؗm£Œp=ÏnŠ3´ÎlD}ÛŸÍðWŰiüoá˃m2þîâÍÃùDw8þ´í:M3Â^Õ¡ºÓÅäRƶíóÑsŸJ¸~"ë‡TÑo5Ù%³¸‘šÚ™È䇡èk†Óu‹™cŸKÁhîW¯>õèF2–çÜÐ6£u¦ZÛØèÿ¹’õTÍ»ä•Îvè~õ{_‚5ø^=WÃ?´öÕ‘lE¿ö^Æ–œq‰z’:ñ\ÏÃï‡0j~Õ=òíä¸!4ûÈwÙϖÿ¯løW²M#PÕ$•¤µ’ÎX¬Shómd|eÕF ÓŠ©âÙ§áçŽ~xgãÏÁ½^ÆÆAáÈÿá.ðä×_9¸‡1Í$>‡p Ê2H9+?ö}ѵ¯Iyo¤_,­Òû6é6$áˆëƒÈö5Ï=YQ=á/ìå{¢x=Õõwƒþ|)ñÄM¯§„äÓ/7Q›R³F¹ÆvúcÖ¸‰¿³—ÄM7þ& Õ>×"»8]4¬"Eêƒßêþ¯%i%s5Y-–µñâ?†z¦¥eo›ÿ É…ûW9>YìQޝ!ðö’-ìMêAwk¼gË/ûäFïœTÞø™àÿüP´Qաѯá„ZÛ_ZÆ`‚é¾zøŠÒ›èrb,{–ƒâïxÃñø—÷žÖî/ü‰ôýYÿw€rŒ„žÇ¡®ëÀ>Ó¥X¯ô[¸¡µ¾Õj¤OQýì}9æÚ_‡~ø›ÅúŸ€•¹ð¿ãįÙJÖ÷ÁÑáškÉ…Ö­ÔL~Í1¯¦_rk¶ðþ·wâ]xµ;Ù,õé—ìËs™Ž9K0 ÖN{zW'ãÆ‹lªút· ¤`º¶YF ë×ò­ÿií ‡”+·Ê¨{zTúl€‰’Þ3À üëZÏì\=©]¬zg½tSg5HÞ¥îSÔ¬£½Û*.×C–Ûú×1¬é½ñ6×yv—ÒºýM>Ädšr¨˜û¹êqMð>¿á85µ½Ô#ŽâDeؾù­/¨rê{·ì—û2iÎ={Æñn–\Imè1üëéKoøOá½¾û 9Ì«?™¯/øYãýNðºêšŽØÖ8ÆÅfÆÑç\Šÿh+xšK{K¥X!þØüñ]˜tå²9ñU#N6¹ïšßÇO_Åö··S÷¼Ìüf_~Ó·³[.“¡+–N Ä×µx?Ä/ŒÞ¶²Wt‰†dÁ_oʹ{ˆ2Ç­…ò[ÂÊBã;˜g¯^µßZV<Ù׋>ÏøSñf}V/;Z¿\3i ˜Ûø×®h<#¬LÖj Ì‹ò³0É=«òÿâ'í/©øKI‡ÃúeË\4ζÞy¯~ýŽ~(MâhËx’vUrdwÆÞ+¦¶±Ç:‰ËCì7WÓ5nžà‚ÊÅ(àŒòkž5h’ø³í7Z¯‘ns¹¸Ó?áziwž “þ¬*åZã<7<Ö߉VÓÄ>’ÛJºR%Éb¯­g(µ¹Ô½ÓÀ_QѼ+3_Ý[ùÓF¸B võç¾8–x¢=_XýÕ¬Q1Ž¼Ú½KVðq²¼ºžîÙ"fÛ»¡¯$Õìõ¿ë6QmxùW޽+ž<Ò•ÙRåŒ,Œm&Xõ}y¡°´ùPaJÿõüëSÆ:£hÖ`W*û~fÇOþ½vÞøqoà? >µ¨¨iš3´1äŸjùËãW޵™õK‹»¹ pFÛJ/«¶8ù³•ÊW9oŒ^.ò ¹k›ß,'·JòïøOž$Ö¾×±¤šI1½Àç½cx¾ÛżQå[´Ën¼nÉà èlçÿ„&‘§Ãþ¨¹>øêhŒõ»&Q¶ˆö»K  hqéz:í!pïœc?ýz·à][ÄÑk8ŸU`²±Ç–9ÿ òí/TÕu¥ŒßêFÞ8Ø6çnd#ü+мªh6ÐþêY$`ÙóOÞcéJèKõ9e í¤xƒZ+5ýÛLÛr¿7?ýz}ï‰o¯JØ[¨Q–þæ|=my«Â'ÎÑ·˜‘´šèü?á:Â?RՔŎÖâ¦Uœ´F¥Õ™ðx;ÄíóÞ-ó,>X+†?—ç\ÿ‹¼9c¡Î±ëzÏœzý_?Ê»xÓNðö‹ö=%ÃI"ñêkÉn“U¾w×oÙË3«'§­'(ÇmEÊõCumZfXqq_çYKcc©y·-Ðn`ÃøÖw‰|Gaiåv~ZâüAâMdZ²~ógåïíYJ F¾¨â/ÄÙ¯õ™ ió |.Ìc¯µp¶ºî©¬øž;¨M‹'Ê«ü\Õ‹QÕ%iüæŒÿ² dÐð{âû]&ÞEÝæ˜ŽOµcí57öq³>Üý‚þ¾«ã?Æqh­­­®<ÝQIx'ääñÚ¿B>k^øg jþ*ÚÙÞ]BîÚ,Œ¨b†DS´)-Õ¸íŠù{à‡…¯þü/³žãÂWš…åź¥­­›nÝ»¦qÐó^ç«Aà‰5 ü>øçá;‰¡žâ;‹¦Ú©%„(¹Øì§wÞ#“Û5ÓV£Ù3\-.ÍOÿ >-~Ót¿‹Ÿlµ-2Åož÷KÑî¦+ÔXÌeW98ÎGT’Äd.Hãµq>&ñ‡‹îõ¨ôoƒ7óü`µ^Eåiö€Q•÷é]Æ¡ãø~øWPÖõ 8ï4½ßϹŽÅšêI$*Iç9'æéÓµeO—o3zžÕÿ—cCRø•¬iú|z9þÉžø» Xé^;øÂ/l4ý$8×µk9é£<È…7.ÐJœàç¥w_´–«y<Vþ%ðï‡5In-Zã@¼·³­¤ËÃ%ÜXgîà`vï_9ÃkáoÚ/Á÷ñ†§yá;Y-‘do I'‘7Êeû9?+†œv¬zÙ+k³áÿÅŸ‡ ücÿ ûoûAÉâR…›BµÑôR¾e¬yß);z· î댌Ô_?j[=/ÃZ®‹e§Yé×_jŽ#䯘—\ª# % O$`Šî5ƒ#ø^t7á'Š<9â"ÇKxôýa¼>¦úÞe ¸3I`I+Æ; ó c¤XüEšßÅCIÕõI :•µ¢³[17€Ãåa×Ikk‘){º#Ñ<;ðþoxsÂþ$»ñŠjvþ…%ÓÖËt’yr;0c&%û„8ϵUýœ!ñ¹ñžóÃÿ¼Iw§éךŒ—–º=­Ÿ™ ð‚Ѱ ¼mBÈN0Ã"½V÷áÆàûÍ&O‡Z­Ž›.À´Ôƒ-‚¿ Ë‘ýðr;T¾üñÅÏŽ.5ÝgÄK§[èÑÏ$óF´ÊÝÜ€IV>¤VÔãÜ瓸ÝSQøðÇİÂñøƒE¾’K †³c±¯O˜Ûmõ®ö‡ýŸ|%àÿxb/†ú¬š]dž®:óråç7Ìß{í8ùF8¯`×—©m-ކ!kƵ?f–÷þYÍŸâ‘Èé^Gñ“W×¾%ÙøŸÀ5Y´›¯ØGpº²D lj3ÝKÇß5rZ®¤qþèš%Ö±áx†úo·ë¬×³]ª,–ÌÛaþéf-“Ô RwÄÏñ‚ëáïÁ¸lâ³ðýìvë•Ò´Û®7ì s´c¯zä_úgü+áüFñ¤–¶·Q\Ⱥµ«—)"€°ïUìá}룃àoþxþ?TÕ!7‘ _جaÖé†34ŸÞséÛ¥sZçTZR4l9¼ áÙôŸx—]¾µ½¾™5_iðùž]²²ª/NòúnÏéÞø©üDÕ´8|ᯰxU­Mü×Gkâ0‘Æ>g#óÍpöÞ"Ô>#|*šãã…êY¦ñÒÃåMä˜Õ€c×9#=1\•ï­¬ü;càÏ„^hv׿»³±šCºlÒ’GÞ$IFM“)rÄöø‰5Z_Úx&âëK›PÓj ¸F °c¿8|ÞõÏø ÓÀ>Ô.<7¢üPµ³ÔµýFòâÒæAµ¢gŠeKu •‰èë‰ðÿíñ2óþ"ð5σîšù4tš+y$ ˆÇ'pïçZÿ n~ø?þÿÆ?Šú_}l·’j:n›–Ä’ñÈàŒ’ÇÀ­m¡•õÐá¦ý¦~>ø€ê_²‚ô?^[Ƹ°ñE檿(·Œòoí‘þÞ~Í>øµâ‡º¿‹¿i{áá‡v-¦gµ(#ÈÂwBÀúzÉø‘&“ñ7âåÅ—€të-HþÏC=ÆŸÍ|ÎIØÏÜã÷ãšôÏSh^ðž…áßY´Ö^ðÜ2-Š3K%ÕĹ`X}Õƒ;q˜SÝÍmkàþ¢ü'Ô|Oà]{Kµ[+!qÿ T¢¸4Ÿ4jüªF}ÏAšÇ›À¿ü7û9_ßj:Žˆ³\lmAã?l&qÞŠG^sŒô®nÃWð¿ˆÅ‡Šúxô`ëO¾Ù}¬ ǧñ8bØãzÕ=+Ä_³m¾¥6¯âk­sÄÑÆZÏEŽrÐC2Ï!=b8Ý“ŠÏfi£ÐÝø5ðçà ¼7/€~#ü`›ÄÚöln·Qîc`ÙgòØàÌ}€¬OÛüEÖüK‹<4’^øwTºk{ÍZk‚—7ªnŠ«ÀnO ÍlMâßþÒÖözÏ‚|/רnàÕ4ÛË•U½íùcæ¯zèôë½FOƒÐüø+áË«éJ¿¾æG±öœü¹€z àD»"cw© hž/ý¢ôsÁÔlôÝ6‚ÏAº¾Ô—ì,ˆûÝ à±`wub =q]?Ã/Äž ð]׃š×G¼Òü7}æx“_û+ŘĚ&på\n$€ªÅgüHñž›ð'öÚ,¾4†?hóFúÆ£2$wq¹£q’Ø`¥ýs]gÄ o…ß~ 7‰o¼BÚ>â(ÖÞãPÔ5Cq$“8lq‘‘ГÀÎ9âu-R–æWŽkÂð‚üNе|a¢C(¶Ö­tKMcé-àVv 9aœHf¼Óá¯Å~ÑŸo~éë°è:6öÕµ·Ó¡Žè³( #3#äÝõ=HÊ~Ðÿ~6þÍ¿µ=_à®™ªIáJâ/>·û+¼kò™£LŒ÷·`n<šçÿd?ˆ>6ø[ÿ…µ›½r+yl_V’êÇ÷‚Ð…Žêv?/%æbqÞ”œ–„ÇÞÕšµ/Ã߇¥—óǩkÚL¶Ï,6o%•´Ø$Ou1áñüJ •ç¼–ÇOø­áKLøGñƒâÍŽ«kªi/ªÛØhz|¿a{4äÅyŒã•ç÷Ä0»_[™-|#¬Ä`ºµ‰÷oṵ̂ÞÌ|–>™ÝøÓ£~ÒZ®kà /㧆m¼§Ý%XaŠÞâÜc%‰]Áð3òàco8§ø†ÃÃß´/ÂÛ4¿Üj> ²(òx‚uE‚B´ ìG+¼–ùOVOŽgïüWšcá×´Ï Ü4aÕ–îø´Z˜H°`p[ “œ³žÝ1R£- ¯¡â¿þ?ßßx'@“MžÃMÔ [øÂi«Ã*&àì¿0*›xÿZùîßâ¶»ûFk’xCAð³6Žd’ÎÎ+ÛŒnaÀ; Ç̨ãæZô‰žÔ–ÖÒkßÛ >×VÐôÛU·kD2(cæ¡ß6í¿y¹«É_Yñ§Ât{Ÿ„zåÄš=ž¬©kao ‹dvÙæ9rIÝ×⺙ÂܹŒÚà÷ÃÏkú7ƒ~Zêëqu3G¯Åö¥’/#âXä•N_qÒºÚ/â%ÿÂOØÕ| †!™µ XàHa“-s#)%ÇqÎïâ&¼ÏâÖ›¬þϺ+û-µ¼~0v†ÚêQŸ#É–ŠV†}üÊG©ÍWÄfDð¯íoñáÍŸ‰í$Ö¡¼âwòÑÖÏ ûÌ ðz ÷'Æñ8šÞKe„°?e¸¦3’Ý‘èE|¥ðÿÁš‡õûZÕáþËÕ® ‚;†ù­&õì{˜®×EÒõÿø£íÚ'ˆ-MõåÏúF¥ç:¯–zÚp*£R¤BPŒµ=–k/xêÚM#UÐ!¼†lEæMó,L~ëÔr^½kçÿŒß±~¬·O¨|:Ñg‘äÁu¦…-o¸Œå³Ø×¦è:ýåž¡u¦C↖ú?.i·FÈN7˜sëÅz^â{ýnÊK c\‘®<µó¤ÆÓ0þÇr»©£DGž›f_|Õ®øsâ uêr\Zj̱kwV̧nî.!”g%@ç<_O~ÉÚf±oðͼ/áK¨j æò&GûS/Eáa•e#šn<ѳ'™n›¾Iª|4סø‡ð{ÅÃg¨+K Ž¤Ê’,›¾xX1Ã+ìŸÙ3ãý…ÍÜÚÇŒ¾Çg§j [PšÎeÚqÑ?—µyn½ðÀÿô+í{ᯆ$Ðõ»[¦ ð^¡œÛÝÆ?x`8ùã#$/\Œâ¼ÇšÄïًĺ?Œ¼×?Ù÷¾bX‰7)]Ãt%OsÈÍsFR£RÏS£J‘ó?T¾(ü.Ñ|%¡iž<ð’yÚ=ü2̺µ®5–BvÂpzæü¬Ik§´&[e¹b$ºP¶Ü · ÇžÄuÕŸð³ã–£¡é-þž×Þ×§Ö?¾&^xËTk{iZHöåŽ8¬ 5¼†Ž&efl²6+œðEäú­Š\DŸ{'Ìë“é]…„—\y’(ÚÇæ\w¯.RªÓ>†´cC ’4tÝQx3kFûÍÞ­hÑÏjÍ•§*üÀV¥®§Z—´‘Wj©«w¬ývò”ÝÇ,goZê¤ÞÇ•5ÑËüRñƒ­·Ù”©eS÷[§Jâ|­\Ãâõ_•OÞcúÓK‹uë;kx2Ò÷ÅÒ}½ï¦¾“æÇ» ø/Çš—ŠÒ%¸[{uû¸Ê¯5ÑþÊ>Ôl4›=7T± 4ª¡·DA¯²¼/ð/F·Ñ 0ZªMq22¯Ìz‰û=îU*R©äx>^ê…®ai¦gݺNØì=«°Õ®ˆÒìùZEÉlöò¯í…ðE|[¨Éœ»6‚-Ì9æ¯ÚEFåË %©/‚¾$xqßKÒïf8ó§Wîzó^óðòûP×¾Ïg§O²Ý[÷Àw{{WÀ¿¼ãÿ øêßMxæ6q·Ï1Î?ýu÷·ìÑq/›öh­×Wï)cÒœe‘ì`¯#¨ñ÷†¦M-æ¹µÛ‘äŒv¯1Ò¼/d&–hmȃHʘ-Îqï_Lx‡Ãòx£Hk3ÛüÒtÍx_ÅðÚ§ü#Úñ¯K²…¼Ù…?'‚>ZxNúKØQY¶å›o¯­g)ûÜÒc'î£_€º7ÿ }¡¡ˆ\4;·íã5à^%´‡I¹¼×oãWòÙŠû{â¾·ø¥¨‹­) ¹¸-µ@ÛÐ(¯"ø“.Ÿ»åUûÌ;ƒéÅ}ðËáîžšŽýJÙ…¼+µ?Zµð£áf£h™‚ÛË}ÛU½N:þ†»? xjž=£s·ýõïNU›´"f¨ý¹ëÚmÏ™c¥éžTk·ç8¨ïa½Ž–º/5Òi‡N‰§šËø~ößAÔgö£â LFƒd ËíïÍkµ¾¦rhâ§ðþ£xL–Ûd“Ô¶qø×?ã+ jÛM[I÷½d ÔÖ½·VÐcÐtf‚ÑG˜Wåb¹â¸É|1u{'›síÜûõ«©>C:qöŽç‰ jZÉcrwF§+žõ‡¯øzk(ñ±›'gÐq^×­øe ßa´å^оõCQð"Ü\I ±-Oʬ:q\r¨uFž—lðÛÞ¢ù²ÄÛY‡Ê¿çšõ/ÙSà¥ÿ¾'ÚÜXésIg:Íö{—Ï䨫־ú¤v‹íQ†Ü¸ã×§5õÇì[ð}-ÒkïèMý°UE„’FB‰?ç¦{*)®jˆ8­Ï¦¿fïÙêßÇÃeÒ4Û=/MÓ|Éüð˜/*¼Äçµ]ÕüaðgGñwˆ.5³}âKíBú;K‹Æ…-ã.íªÝzŽ˜=>µÄ|A³ð¿ìåy¬=ÅòÍâ­wGY®&’…V'xQ‘Þ¾ÕäzwÂýÅ·š}—Š´ï,ö+.«uiu1HÕ±ÀÛ¥¸9÷®¥.i<±Œî¤<ðª_Šú>¥ñ;Á-§›Éµ)|ÅØ~ªÜ+n!]F8 qéR|Oøé?ÃoÙØiV[5i#h`Ô!EHšC÷̱¸Ä›WpHéÔüø;ðëFð彿à VóOP²Goµ]ºÈžb6ò¿•3âïìèo­$×á‹ýÎGP yÄÛs[ÒlïJ™®ÕäW^%³Õ.†¡qGþZDão™y==+èo_³Ž™dá!øv²C§Þ±ŠÝ®3þ“)8Þ¡½?‰FHÇ¥|×ã¿^Ÿ^M)<0‘jVz°°½¸i~]„äc¸ÈÇb;q[û4ÑÏ)ÍHú#à ׆¼Gð\ÂAñI#ñ¼ë¢ÞCб£|åDk‚ÇgGCÖµ“À¿³ïü Í'ÂßjW:³Ü³®¼×R=Ŭ˜ù€Œ¨ßCµ‰ç¥xާ¢øÃÂ킵Å2ÛÌTè¿c>Pßî¨Û çkß¾xgÂÿô¸4Ý*ÚóÎ’2cœ¨™£FÆàr¬ã :V<ª&Ѩå¡Äø›Å_>þÍ7|öj²M'ö†“¢êIÆã´Ü"y`§#% 8"£ýšEƤ°üHø•ðU¿¶4Ÿ.]CPŽéa¼½·Vpmó£ ãæÁæ¶§øm¤|0×'ñ%‡ÄjËPûTóê·m¿œ° 1ð>P™,NzEwŸ¼3ãÉ|%·Œ¼y©c«Bßbº‚Ü?ôÓ*:ã·oz<ÑW“Ñ%Þ¹áÇ«ãMÎü!¬F>Ùk »}¨e·zî8L_ht‰BzƒZßݽŒ¶1üKð‹Æ ñv„ž.×mÓšvÔ˜ù>T³Æ?4uÃ|Ã=«Î¼]ðGÃß|Kqwã]fk_ ÚÏ:iʺ€hõ81 ç'ò? úWâT~øÿ¤·Ãˆú%Å©³ï0ϲ7ãW®Lø5á? |ƒH¼ðö¡y¥Û\5¶š¶²nžhËÙï‚ÙÉô¥)E§`§µ¹â?>xÀ¼UàŸØÚêk†it{Kûq$zväOÞäsÍbêñ·ÃH4ýSâkKs§Ç¶ÒÃéøÞr ™@éø×бм¤XÝYü:µÓš)‚6MËÆFþñÀÍ꺧ìÀ꾑Óü[á]gÇz·Ã¹l¯¼=anUü?,6`é‰$:däSøwœ§šø›Æ_ >|3ÀÖtô¾ÒT5·™†q!oùlqŸSÆ~•ÊêÞ.ðߎôÛŒ^.’òç]ukmKFŠfŠ9cÊþõÉ< \|Ü «ðOönð¶¥âsEñ7‡5×f¸·¸¿¿ó%ºŠ6Ê’¹ÈþuWÅ¿4Žvzí#Gÿ„wSÝ5œ×0mU¹—ÍÛÝ£Ug¡ ÔhÙQ´VˆÏøñðÓÄ>)·ŒÏˆ,ü7à}MŽ=6 .Õ£ŽkuŒ;²XãÌnNxÃOþÏž ñEò|%¹ÖþÒ¿dÔ>*ø§ã¯ƒmwÂ¥¯à…xä¦wÉÀÀ§'½VÔ­~YxcOøÅñ[ÄÁlìc’;6i÷6©t_HÐáqŽ2zÕ»/Úῇdµð§Ç=>; èzC^êP­«>Ðß>Ä rÎ2qíS©K–:þ x3âV‘©xëáO‰ï5Ï5ÔW2ñn¥$s¼çizµ…ë.—lÿgƒGÔÔ^M-Óü¢GUÊFïÏQŽx{ÚÇÃz÷†­uo…ß³ç‰4¿Ýë?hódÓ•™³ß”3³UNs†ÆáØ×aàˆ?—XÔï4¿é©k׈,àÑå#¹~h¶82ž(âɼyt>ñĺ?Åm>?‡š®»¬´óÃ4²^C\ÅS–˜°AÇÇLWŽüKø\–¯á½3ÀÞ)Ó|U ÃÅÞ¯¡Í¦ùS‡K+"6V›NAíY¾øÍñ¯ÃÃÆžøsà›YÁßO¼Ô¶.%)€«Î1¸’y<¸O‹Ÿh/…ß³Â|<ð×ÅYõxÑ|íZæÍ•¦1¾H­ÕãåàzVœ×f? Oø‘ªxÛÆ>8oü"ø1 h3ù2@#ÓìÚóÍI›‡FJ¨VÏÌx=ó^‘áo†~+Õþ^ÿm|"Ôd×cm·~.‘Ò(6üQ8fÛÙ( ÷¬Z|Kð'ÃËtÑ<]m£ßiöÛMÓc\êScýS¬ÏެIÈW²xsÆß~-ü$ñÃëínx5HìU¼™¬å‡Ok€£åŒ¾fÛÆF+=z§[³çŸx¯â¯ÁXøsH´i<>Öíoâ [KK:æéÉrE£³ª y£î±=5“©øwàƒþ,j>>Ôu_]ø?ZaogokoV6¤œÉ Ix* Õíz‡Àψþ-ÕæøÃàÏèöòØX¬ºþ—®jÑÎùI´¬*7ßà Ž~lžkÅ>0|-ñwÇŸjÒêI“OÙpu-Û˵´y`6&åÿ–„íª¶Åö‘íü6ý›¾>|/°±¹ø¯â†i–;8t+_³™cFÚÄ£e°r2ç¿üã—ì±à(oo´êúÜZˆ¶•,î­tùÙùjNõW8y ¹lòÙ«ñÕ Ót$Òl4ÛC^¼‡7[éá6ªvnÇ'=ëXÏ”Íìy†¾ i:߉“ÚėW“ý¡mà·Ž¾o£ç²þy¨uo„wOˆ$Ôí"Yíà‘ÑìíÛåM§¦Iç5ìß ´ŸxgÚ_Å-oZâT†kÏ—¤Löç­àÏ„zÄ7mþùí㺵ûWÚ­¸heÆâ?Úò¤æå°lsöQø×SÒ4›Í'VšÖÞETº¶k囤ƒþèÿ&½ËáÁ·Ó¦ƒÆúÅÕ–¯– XÂì9ÇÌ=y•ÊxSáþÐe¶û1¸¸K…2H§tŠy j÷¿|ºñwƒ^ŽU]IìÕ%óå©ÎÓŽõ­½{nz—ÃßÚ@×¼-©x Y¶[;Ö³Y#[y6üÈÛ°óµ‡nÕƒ¤_j>ñ‹è—Ñ‹Í?S¸ý•¾o%ˆÊ¸þé—OYøâ Hô™¬¼/%Ç—n‚ëQ·—îç»Vdžüx-.W[ºð’Í™£·e†Óg;{öâ›æê+ÄÙ½M~ËÅNõ¯tùf]­ç9Ï·òî_ ´}Q¾}&E™~a™°éæ"ü¹í‚¸®kǾð?Ž>év³j’hw÷Ú{\ØÜGï"xØŽ~‡µix?Å7_ ln¬ß]‹X³XÒâÎE·1¸ddÈèF{UFœ¢õ7º{¦àö×43ÆÚ^oi¨[©þІݽI{z Åø©«xƒÃqÏ{áä·VY¬õ+E^"=qÈèißÿj_ xÒÞK/ÙËö»y¸¶™U£) ´wõ¨üKµO^x[X³C ÜYHö“ ðÐ7R…yÊúVÿtêf›æÔçüEâ¿x¿Á3&ŸwÖ—©Báæ÷’ÙÏ˦Oämè |Ç«üC}'R½´¾×m.æÓíw,S&øÕ¶±%¹èz@=p3]Ä-,|ñ/Ûµ_Go¥ß/™|ª„¤ÝOn„W‚|rÕM¶·§ø¶áf¹†Îñíµa”mÞOüó`ÛNr·r”mØÒ<±7ükðËÁ´W€®®<96—eªZ«KktÊ–qÁ™1™à•\ñ‚l¿³ôè- rjVË‘M&è.]Xü„äw\×úW‹g_Œöºö‡{¨h¶wvw,Taó!ÇiÎF? ÷OxcÂ>O²³y~Õ¯$¶¾«éS3 20ipOÖ¬üNøQãKK7þ (uÍkxí-¯ü®ÂÄZ+€ÃûøÚ{š—`çÔÙøû`躊WOø‰áe¹Y­Ò!¯ZZ;c¶ÂÍ!fM½p ë€Ö?h‡k&•¥‘|±ˆ÷ÈvûqYzwˆ-¼Zaµ×åVW ³Æß0ç¥|GâÛH´ÔÖÊ=R…\+lmÌ0k¦ð¿Ç-WÄûÚá¾Ëçe¦YAR¹”n'8Ÿ¡ý›|-âÉÖ‰iªT¤Ú?:Ò°ð-Ïà NH­¿vŒÃæU÷¬_Ø÷ö•Ñ$ð™Ð’é‰V•±žžµëWšBøºÞIâ_1¤lÂ۳ǯ°®ˆÉ(œÕ#jŽ«á¶ƒsâï ´–»™·7­y—í!ð€ÚYµä“†#Äz׳üµÕ¼WF¼Uu?wrðsï]ÆÿÛë>eK%i$lüÙãéøR¬ãR7AF\²³?>n4+aª`Ú¢§ËºLv­&øw§6·N;ŽÍÅU~ñÇ_¨­ÿx _ jó4ŒËæHI‘¹'žœÔz$ kp4öÔNÖöÀ5çsK™)Ÿ-£txGŒ>H.$ºÕæÝžvã¥`i_ޱ/•e˜ŒÜ¶Üo#¿á_CüAð?öÌ¢FmÙm ð£×Ö¶~|ŽÆÁ¤ûð>û/¿é[©tG5Hû×ø?p¾-ì<4×Ϲ¤ÝŒ8ÛócükÙ¼]ñóèz_ý7R·[øo6I¦^‘Œ¹¸ôÇPOÕ…ÖòfŠ|’ŒÌðïšïïí~ÉðçÆºbø“û/>"½¿PÓGînHð® PÓ¾+üaøƒq¤ßx¥¿²[Eµ´›P›Sòä’0»™GÊWŽs’>µé¾"ñ-Æ£¬ëÔ>hpÍ}êßnÜ×¹a¸•àëê[øð»ÂZv—®|LÔä1éú5̉¤n…ƒ<Älo0Ï•Gãší¥cž³åÔñÿŠ¿ðU/~ÆÓ¼¦iV^#º¼gÿC±W–y[qTòÕS,0+‘ðü_⎟ãkSñ£Â—Óg|\7P¤mU)» ÷9æ¼OöÀ’ÿâÅ][QðC¦… éû,õ¿V™¦Tùí-ߌ(9,W<ñœ W#ð#öWý‘>.|/ñ#øƒâ½æ“¬XÉÚ.­áǺ]W{cßlŽpÆ3ÎiR£Gl£N4Ò^}n~£[ühøû^|?†ÛC×à[‰§Ycµ·›=ÂÂPªÖuÃv¯7ñìãâwøƒq¬øÂõotýAc–îÚî}ÒIŽ]d•RTœ‚¯Ìxãïì{ûPøv øêmÃú­â]?R°µà)ˆÿVÝGuäE~»ü^ñ•¯Š¿fËÍJÊÜÞjÎ1¿O›oï¸nüõéžýë¢õå—C(•j|ÐÕâ¿|eÒü wc¤Ïc M&«i¨Gûô¸…;A ÀpßÖº­KÄš—‹2Ñ<¡é ô]SûkRQ&—5¶Ò–øë–Ž×½z‹Åà‹ßÚGR-ç˜áUŸpw#’sÃ:Ƹ |>“_øyâ^,kgd--šÚî_öÁç5­)¾KHÇ››r? ^ê×Zçû] ;‹ëxc¸Ö5kÅm°‡Ø;zô©u_x´ø²Õ ½Œhw…¤Òíã¶`ѹleHè5Ï|eý§¼;ð'^›Àz½¬PˆÑ®/.$Vy“6ãë^oyÿKø¨j~Òô;¨n”À³ùª¦ÝшÉÉéX¹-#t“hè>*øsã&“ñöoi^%Æ—c¦»ÛÇy!š&˜ íÚzó]‹¿´Œu=GÄúÌÚdMp¶ÂÚ#·Ì“ŒH õ®»Å_´ŽƒâßÝkV~ Ž8î,nVHß®H`âŸaûQx+⌭|3á¯Ǥë6j./&m‹}“€éøóDZ‰R”œly÷‹¾ƒòëc_‚K©5ïôv–ó.—¸_9Of~UÈøsDø±ðOgÅŸÜoY‹Èìí·GòDðHìqÆkèÏ|>Õ~:øPÒ×İXê:­åÈä6ï7ã95æ¾´ñ7Œ~Ÿ†Ÿµï±ÙéÓmP±Áû@\á˜÷«ó#ÐáÿjøC|eâ? ë6Ÿ«G?™nÆ^+…uËsÃg½s¾ý¨|oñ^“à×Ã!ñ&”Ò[6±©ü­qðȌÀU°OµzV¯ðz÷_ø[¨ß|*øc®MᨅƋv­—1¯"ÝýŒ{×+àm‰>‹ÆÚ¿‡—E¸Ô…ÈÕŒŠ!xÜð@#’IcÔÕ·'™Ä³7€ÓSÕ†¹«ø“Oû.¨/öÔÚ~ D‚(л"òA9ë’ñ<žøÂÚ·ô責uHs£ÜC§2ÛÆª¸ BÀ(úl×Q¬xãàóø&×ág†eLÔµ{Á Ö›¿™4¶ÑާŒy‡ß§S\¶¥añÞˆ×ðWˆìn´­7G[h¬míBÛÛ³}èÓvW#€qR‘z#œâEÇÀŸ†Òø“WÒfjJšOƒ®cŽ%‘F ærñÚ¹Ÿü4Ðþëþ(ñç.oîµ­jC-åõÕóyhd(äö8ÙxÓöR—â}ÝŽ¡ãï6öñi ·š…šÙl#^B£wv#¨©µ |7Ò<ÄH¾)h÷ž³žIIº¹. +õ&CÛ¯°¢Ö3r’\Œ`b¹´øàêW_oü]s Å–‰0³Òmî‚Rˆr7cr3ÀÀäö¡¨ßB9¹P°ý»3óOSZŸð’x‚ïZ‡Ã~Šy¼cö“Ý5ª]F̸>F×w<€Ozå,?gßÚWñƒYø;Â÷º¥y¬¸ÙâKu–&“9- ªÊ€pœcò¦¢O;¹ôOìûáãeáÅñþ‡wŸ.”`-½o¾ûR ¶C•1p>b~Q´_FüG¿ð—ˆþj^&ð]…ž‘ys£µ´ÑGooökÐS$ ¹°G'>µáZÃë= ÃZ,?´ˆ-lÚÏK’ÃÅ/{¯Aö{’€°Ÿì)û‡W  ×…~ÒÞñW‡|7†¿e¿ˆþN…mþŸf¶íæÌaë!UŒ*¡nêÇ€x¬Û×Cu~UsÅ~ øÄúWŠõI¼ªëÚ]®¡­O&¥o¨$hØ0£÷ OÞïÉÀ­Ú Nø«¨üN²h'TðœsÅmŸ}aµæÝœ8râ§æòH8ÇJí?b?ÚóÃþ/ñ\ÿ µušê4À·ÒýšÕ¯\¸ƒÍ]À íž8žž¯ûsxNð÷Âãφ5ýb×Ä67’Ég¤i»ZHÔ¾×/˜ß8µ1—7BåF÷>-ý£?eKˆ¾k/ø2Fñ.ó[ëšm²¤pÀ ¾Ðg8Î#šñƒŸ/~x¥F£¢M­fÂÂêãT¸yVÚ6à¯÷‰úÚ‡Çw¾&ðߌ¡ðuž±g¯Iõååñ™nÎJ²®Ð¬å=F®]<:5ÏŒúîƒâÝÏÃq¶¤†{9m·;ö¢ð~ë‡#ž¼Òµ¦äsÔQ<Ÿö¶Ñþ#]é¾2ðöŽšmÔha²Žßã’¿¥?Áß­ôm~òëÂÚäzŸ‰šÍd¾€:ÙDÝTÆîzv¯Wøð'Àø¯©x¹ìf“Á LìâPKQr¨yÏZñi´ÍFodx#ÄpÇú›ê23Ç$ìÍ•8é]JZ²9ÏÖ?ð“Úi:eÅÂJÑ_5­Ö¡¸ˆ­åÀãšë<ðSRðmûéײL³]X«ÃqGM¿*ûUïüƒSð iø¡j÷|sAekƒ†#9#œö>µÝxPº·ðÆ—á™üAo>©§Ú¸œLÞ˜ÆÓÜcŠW[/xcáTšŽƒÚÖFxãÇt[vÓŒíÅzgÁ ncçxFó̸½kWº·i¾Qòdþ|T¿ ô†ñ<bÖ´u…d`‘Þ+uxcʳ&³Ó¼ãÈvk2\\Z6ñÃù¹åNOpjíÊÓ2zŸK|.KÏìû_C+]>eºTL¨ Çç^sñáª=®/Ù#‡Rº–FŠh× Hù£'ÔŠè~êšõ–«áßm¶¼ÓæXíf@c—Ì‹+Ïð•⣒VЗSåÿ„Ÿ<3áµö£®(ï"0.¯¦Ê$ˆ0|…çîºzǯ´¼%âÍkÆ~†ÓU½Šâi¬GÙõ;R˜ä°†þµó_ÿb#Fø…?„µ=ž¼Ö­£›Eñº‡ŠiÎw$N<¶ÿ|sÆ+×<[ñ—öJÖ"ÑõŸ[ƨ‘Ì$±Vhå v¼†#ò˜ÏS³‘ž”G÷q÷¶ >}е—Æ|+Ðu?ü^øg7ˆ¼?r¥¬|G¢·ÌƒÁÓ¨až;WË:'Æ_†òjvº®—®ÞÞè·Ö­õ­Ò¿î¢e*Äöã¨úWÝÞ'øÅ£|N³‹ÀŸ| ½­õª=Ÿˆ5&™r<ÀH$7®=3_œ?´ÁÝSÁ¾7¾Ón o ‹T™lu.óí}Âòr?‰ÕOLÔI.dâîU>Ìì¾$Cñ>×áŽþêók¾Ö#ÿ„‹IiÁ{p¡Rtï¡yëZß?h¿ þÏŸ#ñ†üGrš±©2Þi·q1ŽA"|ÖÏžÞʱôú×Ï ¿j_‹ÿ¼AcšN¨ÝC“’[ÿ£êöÝ 9B7Œƒ^½¤øïá7Ä}+Uñ^ðŠ;)®. ‡\ðéÔ¤x­“–K¸3ó.Ö!àíO›Þº)G£>Þø¿ðÿàÇÄÛ{_ü=ñšøo\×´´›AkÐÞi–°9R;Wªk?4…š+üHÑi4‹ï°ø-fÌ"&‘£I×oð”AíúW â™|YªøÂ7^ ´’x,}ªÏOšáYŸq홈VÁã!ˆõ®÷â£o5†™ñFÉ|ýZÒF­i7ÌDÀl¨“eÑ·Ýǡȭ–ä¨ÛC̼sð³HƒÃ$ÐþÔÐÜZJâC •÷FþØùyÆ29â§ð_®l<'¥ø–m5¬uÍ.H×\f*ðÈ0dÄc"µ>8xKSøs-¯Žt÷¸ºÐu6â×í‹Ia3”Uóà®Ó»²šõÏ„ú$2¼±›PšÞñ.tÓe©Cê|¹¶öŽÇë’¤uhÚ™ÀxF/è÷:µ´öM%¥Û©A…c2`•W õ¡ç­}{û1Á¥k:<þ Ôîcš9æ†çIy3†9ØÈßÂù2=Ex÷…|=«G¨­¢i¸Y!ØöÒFÌ\mÇ»c§½vþð7‰| §^Øiº›Kdº|ZŸ†äyŸ ÑHDögŽõÉ –;}އØGá­·Å? é^=ÕŒPëÚ^Ô}EX Ôl¡ÇO0£¿5å:…¥ì36—ñÃi¨^ZÉ"Á4ŽÛ͹c³$žÿJï>|@Ñ|Q§øË᷋ȵ³-g>™u ÖŸkO0N¾Ë6G«¬»ð•‰´Ý?þÝkPT´³Xf¾Ðôõ–Õí/}¤õÇ©5Ñ.Z‘\¨æå•6ßCùhý™¯oîµß2lìVÆÞùÍ}×ðÊK…Þ=±É´ð¯˜g/é‡U[‰l•wù+_WiI›iØ©eP6¶ßÌWÇ繪Y£d4:7gQd«“ Á»wøÕŸ ÛJ Éi;†Uù£¬Ý6ö[²¸ Üna·Ÿ¥vº”Zî å°céÏÇÒ¼úWö{—Šq•m Ÿjl-Z)ãe‘xÇô®[L°}rO2\*†þ Ûñ³Íss”‰£+ü[zýM ³3D<Ôû¿wåïë[9ZÌ)®j–1ü[ks¦ißg…Ùã?)ôõ¯k_ Ûê[‘£U‘˜å”ô¯·¾ iS‹i"—•?9ç·é_þÕÞ=³ðñžÅ™ZMÅN;ÖÙo4ñ #LÂ1¥†|Ç”|ñÄŸ näŽÞïdjß¼f?{šõ»¿ø(¦¹¤Ùý†ËQgŒ`,jß|‹­øŠ÷VšB϶6cǯ5NÝ™ÜÕö¯‰sûYFO•Ÿ_x'öº»ñuü—7:Ã@[¬,ØÍkxçãåıÇÓ2˜ÿxÈÙ×¥|áùÚÒðHœ{â»*êþä"¤…caón“ŠÆxziب֨tz§Œ5­c_[:Y ù›¦eÎÏJúOá·ÇÉtO Ûøn,Í$«µYOÌ+æûûöµÓÃA†6™‡ÌÌ8_|ú×Qð³P as©Mö«‰9fnpG ¬¥N66…VÙú)û<|rÓ!Ñ­®‹M#)šMÇå_O­~¢~Å_´é¶zmÔ‹¸*ŽNKp+ð£à_‹|A¨ê‹%¡A4ª$ ÑGZýý>+Íà­dI–2>i2ý1\•#méTjV?`ô¿iNÜCß—ïmïWõÛjv+œ´|:׋üýª4ßÛGa~û~_•·{WºhÞ ³Õ¡IànV•:˜yK•èEhV§.e©ó?í%û4jšÆŸw¨iQ~ð®åÀ¯˜ôo‡^#ðö§4:álÇÁܤr?¦+õæÖÚò3ñ++v"¼_ãÿìóg¯hwwއ˶Ø×¯+Ÿ—Ê’u#¬NücŸ»¨|½à‰|5 FçP1îβ+WZñÿ…lWìzjÅ÷ˆb½û×—ßxKÄžÔ.´íaC3*g‚µÌØC©6¯ö›ùûígÝ<~®(×q‰éT£j{Tš®­ÙŸ±¹ÜËÅWO C2}¥_r¯c\¯„õ‹).â·ó6…~[Ž1Ú½.ïÄšFá–¾i#óîù» Ö5y¢Ûèaì­drš§…Òæcü$ãÿ8¯!ø•5š;¤×ãËS…^ù•Õx‡ã z¸™auTS½3ÿÖ¯ñn±.³©ïiYÕ[;3…>ÿJã­[ÝÐé§FÅõ©¢™•0«»æS­oòÀË+züǧ5F(æ Ë·­Ki ’Ê«ymß7Í¿ã\<Ïs¦1µ¬z_ýN-FòÞwmY'©æ½óÀV°Â<ÙGúÂYV¼GáO‡šˆœ©Üß{é_Bx;CŽ97\LSx5ld{VrÄK›•• '4nÎóឆÓ_±£4Ä[Ì™%ر’§=«Îþ3i¾Öt[­/PðµÅijcí–³m•£ÏŽ>eÎzu¯e±ƒÄzgÃíÂör_\ÆÒ*\«l ‚>}¼žÜW‡üp¶›XÓt[kŸir_Y‚ú;ì«Ðí^àÜ×ÔQŒ£J(ùœEES9®ö0üá]sÄVëàŸ†ú.µ©Gn .¶,‘ÙÇ€NÖl°@p:ä’@®ßöÕ|Qû#~Ê>*ñ׈ìmo¦Óô §ÓäŒck¦ˆ…Ìg;¶rût®óàÇ‚~üðÌš—†¯/ç^·Y®"¸²ÌxæCŒŽøîÅxÇü^õ¯ÙŽOØÉÙ®<+}$Ñ«¨d  a‘]³¢ä™ÖÄFZo÷j~:ø#öËд¯è°üu¶¼Ô´=:ÚKË›;k…ÞÒm9f?1î+©ð?üOáŒ4‹Yü;ðýt¸.7®o>A¹\ a@'â¿?üQã[ùü;ªxVæY¡…¬Äg‚0HÇ¿5ÈxCÅš¶‘ðýlžp7+"+COR¥<+Šïó&µÔÅ)_dôéÐûöªÿ‚xóã/†ôÿM«é·z¦‡¬ ÑÚ1ç|² ¨uךýVýƒ¾$|Tøð>øÛÂsYë0ÿ£ê–Npa•̽:cŸ¡¯ÀßÙ>;ïþÐ~±2h,õD½™FYT#xõ=>¦¿¢¿ØßáŸÅO‡Ñjÿ޵{[mS^òõk‹1þ‡£÷q9îû“îq]r§ÍIN{•ƒ”¾±(AioÄì~ü.Òüã;Ÿx‹Ã_a’ÚÎæ{9¦á í*>þqƒŠªÞÓõ©uû jéóZjúˆ¾Ô#ÏŸ#)À?îò=«Òµ *oȳý¥ckKÞÇ4Ÿ¹å¹Î~îGqȯ1ø­¯Ûèz¥÷‚ôÍ?ì¦HÙ­õ‹{ÆÁCãwq“‘Þ³©¤´9æ¿zÓ=×ÀgÁ^„ø“Uš{.so¹ÿ× ÆzžIäzÕÝgÅösÁã9SPq´wÐyac‡%P© ÎyÏá\÷„ìcNTzô?ügá›ë­cÆÖ©g¥,杻A@Æ@Éäñ_ |pÿ‚ºYøcëkâ qt»0²Iý¡ a®3U9î?Zù“ö’ý¹ïô Â2úµÜ’ÝÊÿhÓV/õÒ;Spè:~ñ}×…>)~Óõ΋âÍê´™ßMJà YûÙî2kZtçV^ö‰rÄF]ONý¸?o_üN—P×<¬_µX!XešF?!ëô¯œü-«ü_ѯmS^ñ<–÷7 ´Ò×GkœäƒŽ™9¯¶~Á.áø¤Ú¯¼H¶±ýœÛÙÏo'ñT°ôé^ÝàÏø%ÏÃÛÍM±ñ†ˆ§ !ž)½SП_ZÚ<‘ј?i=n|AãÚÛã5—†mcÐ5k«5‰–›{iËyݱڽ“àgüWZ>.³_ŽMukÿá“u msŽkÓ?h_ø''…4•¼ñ·ƒ/Væò%Š&ÒøK’ôÀ¯“þ!|Ô~|F·ð¥Æ›lÑw}ØÎv9«TbÕÅ*²‹IŸ¬?±×í¥ð/⮇†õˆ’C|fÛt³O´…‚Oz÷=KSøc>¥6‡à?ZÍÑ0··ƒä`àä÷¯Ãž<ÑõO\h†Km6ê6Xἦ)Ç-êGzý&ý›|3àÏ Ác㸼Y ÖqÀ«5¬÷EÚ9xû¸êsXÔ+ÔÒXËcÙ¡ø ñà„¯4Ÿ…ww”>$º’îé`›‹i”åFïîçô®wãgÅÝFO„ðÁâø-lõO¶FÓýž@ª>l>?,×¢ø×âV­à8lío<o‡=¡º“LEùÎN1‘ØW„|EøY}qá[ïxwâúêͬÝ-¾›c5Ž ;òvg¾~Õ<×hÝÅî­;GðÌI7ˆô Õm{R±JÞ@–æåÏÈÜNÙ×m®ê61|=·Ót)äÑäû:Üê—WP˜Ë1`=3Ó'šáü¤êð^ƒÇ¿ÞÉâ ­tkKo,¬yVoîã&°>!§ü,X­4ÍÄ7Vz3k ÃI!f› ÊŒŸ»Ç$Ôĉi±Óø×ö‡Ô¼qð¹Öëˤ¬%­n.¾Ïº+›R¸8#$¹\àõæ¼.oøTþø[}q¡Í}u£»2}‚â3çDÄÿ¬9ûËŸJÖñÅý@ñ6¡f¾$±[ YVÒÞIJíÀ3‚=zšáþ0xü_¥èµ¿Í·jÁoc%Ï’_¨]Š;ê*ÔLe.mÎSJðgÄû/éúÖ™o$×\Üê:LqïfeáBHc¸ô®NïãçÂ^ëKøv,î/#VÔ P­$ÿ øVßÄ¿øÛÂÉáφztZ·ökÜ$Hýf9?P¸9ÇJLøG§xSŧŒüU$ö§} Ëb§yXl( w2EZNZ™Þ'™|jøñàiõí|äìcUÔ›ÉÙåŸp÷Ž8Ïlw­Ÿ€v>ÔÒÖ _\Mg"Æ,mæ¾-ob§žQÛÿ¯W)ñŽ¥â;½ËNmÈ.••”«ëÁëô¯iøYð‚oE§ÝxGVŽá£Xà–á­Õvgûƒg¦y5Qr÷t+_ê4´†ÇKÖ5k{ë4i"Wk¥ ´…>ñ9îF­u_¬þI«ÃŸŒõ[95 IšòM-‡Ú%dï'‚<óŽ+ÐÏìŸáv/h¯sg|Ó!º¼º‡|­#vs‘õ÷­_ö4´J‡RÑ,¦i ˜­ü÷RmØò»ÎXvïUÉÔŸyFåÏÚáω4;¼eð‹ÆPÅ/Ø]$ºÕäHþÔv|„É÷£$ñœý+Á4ÿˆŸµ…ãÈ|KáÿéÚ}••ÌrkSÛοm¹B‘T19Võ¯`°ñ6ðÞî?ëÞÛg5ÃZ^i°±hš,`2†ç<ôèqŠÌø“¥ju}'ÃômìµMH4û‹6_µÀÇ“¿ ‚Hå ™N; =_Aø;ñÄÚ?ÆÏÝ_jÞ'ûLÍaâ ݼ¶‘KHŒƒ'n9ÉíÈ«þ=ñ…#øW}ðþ{]'MצÒÛQ—PÓ$Ù¨-lªœãh>¸¹ YØx#_Ö4½[¿†Hdû6¡¥êE#G¹‚îŠ|„F%rsžÞ²]~Árüo±¸ð>ñÞÍtë•Ô´ÿìƒsêVänå˜àއŽNMg³:7‰òüz&—ã=f×V¾Ñ¿áñ½Ä7z«Û¬RÙó­£Ûž¥w“Œƒü\ý£¤ø_Åß?eH<àï‰+¥êÞk%ý†£!ºa!Œ±#0ˆt¯þ1üyºøãMCàþ¹ð½­ü?àS ¥íÇ“½ÍÂ8ÄFP¿ *«ÜçõÇììü<¹øCªø;Ãþ5¼‡PÕ¬XoVúkmÛ”IÁÈgÅŒíEr“¼u>Cø§û=êV ÿ…mðÞâëíš}Á¹¸’ãRŠÝÅË}༑Ç#ƒšð­A5¿ø»VÔ5ínê-æ´Ó¯%Yá ɾCÉåyn ×ÝŸf­3ÁJø"ïV½½/"ºÒî.£y$u•‹±nl׈Yü>›@ðÅÖ·ñ;ÅvV·jEo£˜6ƒ2 ÈÒŒç½iÔÆz?Ç¿j>µÒÒßDÓõY5+d¾¼šbÓ*µ•Ob¸¬ü7Ñ/,æ”ÂßgÖ¤êKt‡p“ xñÓ#·cYß¼¯øó[µÕáwY%ó#M¤•TnÊ?„cò®Û\ðωtO…¾Ò´ÍU­k[ˆ“ÌméÂå»sŽ+kÜçÒæ_Ã/‚V>¸¿³“Xkˆ`¾Sû¥Ý!MÙ+ÉíÅaÝXÉ£xÅm5-&Aqgxd³‘Ë<ùÁ> qŠÍÒ<}ñW¾#ºU‘.-c’èÚ ¼ç;‰õÈ®;Æÿ®ô]kí–6×NÑÍæ4Ó1`ÀóŸÂ³•H¢£3ë‡Þ5º‹G¼ðß„¤I¼»£å, º@ŸyG^çp¬¿šuÆ£w6¹¦Ú¹{4’âÍndÆï˜Žx`+å›_þ.2h÷^}uxÓÜ"¦ÖvßÔŸJöOx|Iá6¹ð­Ä‰¨]-¥ÎåÂ’UO¹«kî¥(ì} û8x{SÕ|&Ö^ñ_C 3®éµ³QÐjñíSÂÞ!Ðu©ë½Œ—º´0Û^DøŽæà\Ä2~O”œz‘]Ïì<_ uÝRÕ`ýòéÞo”Íòò7¾ÑìI®³öðOü,o†RÃe ]^E¬CuvŠwyˆ Å2ޏ9½®˜Æðº9¥u+g‚ü_ã¿ êžñŒÉuköÉtíM¥O.EãbϰF9ù»W­h¿µ?‹ýǾ+´K­?V»ÿ «uY­n•ü©7P7 Ÿc_1éRÃÀvúgÄ$¸¼º·Hàºd˜´pÞ™K{àc¸õ¯Gø;à†Ÿ´-Šøjë@û<“^5Þ¨E1.¿FÚFÑ›–&R‡2Ôú·Çv_¾:jÑøÄþ Wš9‚îÂáf*Öí†ut åºcñ¯0ø‰ð»Rºø_waâOi÷–ö(Óéó]Z ‰#FÎFæë•Æ@ü+šðoŠþ0ü;ø‹k¨k±4º=Öw–Z áùÀ yU#Ô­í;ãf¹¢|Lðω×S‚ãÂþ!ŽK r;ÉX¬YUò¦Êã=zu®„ùµ1Qå•âÏ5;¿øÛÂ+e}àÿ2KMÇ-¿ÙÆäØ[ÊhäŒåGo˜véÅx‡Šü=áï|¾ø‰á'‡PŽêÆ·ø_W€ ™ÌLUR>b?ç çÞx“QÓþ ~Ùwþð§ˆu]:ò÷Ròíü;2†·¹WS&UÞBv®K[øïð‡Å~:¾ð¯ˆ4›;V¸!VâÊE1ÛÜ ²«(Ú %HW—Z§²w}ÏBŒ}¤WsåxOÃVöš&·à_Úŧýºé$ÓorÓØK´1A“ƒƒ’=A¬ø®ãÃ_ìo|Ip±ÛÌ«̱±6ï”ã‚@r¡¯¥~%ø óÄúM¾›¦é0>¡ Ëimq³”Šhñüd ã¾kÃu ÞÓÂÑx{Æ¿†n£–îÞâVmÅO,¸ÂêÄ;Š”•ЬâìÏ^øYã7Æ_#øq¯O47“4ÈÜ…e図}Ð:g+êÏx#Nø¯ðïÄ^ †k[Ûí.œÆ„«ÝÃ|²d€D˜Ü[×p>µòGì¹®øSÄ´½â~€#Ô4Ý>x¬õËTÚʨ¸ýx ƒ_`þÏð“hŸÅ‘¥½ô6¶öò´Öó+3ÛÊþ[sÜrüÄV—F9koÀÏèž4Ñ5/ kÎÉ 3Ei$wº7mØŒ6{6ï(Ÿö…zÁí&]â›u¦Áö]#XŠÛíñîß´’l¼pã'ƒŠ·ð÷àý‡‡i¯x ÚSuáÛ‹i.<édmºYQ1ëµ[t#=«¯ø=áØ4ψ¾&ðÔò¯Û,õ»™4tßÍäg2¢6z¤céXÔ”´}M©Å=F_Íi{sq·Ù ºsk2ýåuù–EîÈÈA*KÏéÐêº-ÄšLRÛYêR-÷™a²`sØ|ý\×y¡M¤_x'Kñlo ÐYjP[]ÂÒ2Ó~àÙ üË:ôÛŠñ_¶©à‰òxwQ„^išÔ*â2wrÙÀ$ÿ Àû òñRt䤺žž ^캭¡Mo«Câ àæۤ—kp1׿zgì³ãÿøçÁPü;ñšÛ麄–ò­ü`ʘc„9ì0qìkË|#¥Øøc@ñv±q©³ùÌËå¿ÊÌ»’@¼ÿ{òkÇ>j~2®¿{iâ›}ÒãPÍ¥¬‹”è¿^§¹úPñ^ÆQ¿Rã…U.‘ù‰á j~@lÛk2þõcéøb½×ÂZD¿Ù1 Óäaó7nMkøáÔÚÒÚ­ŸîÕ»Ç÷Ezÿ­´+nâîÇæ+ájbf¯¹ú^ìé¹Ehr>ÒÞß6ߺ}¶+§¿µšK›yËwÚW𨴠{•ž+v£gp®’{d–Óy…˜7}½+¶ôRpß7S\5éÔŽ¨ê¤éŸ]üÒ$±Ù7Û•X`ùjzñÉú×Óßµ‰‘rc™TSŸÿ_ô¯þë÷O{ ù»Wwc×Ú¾’ð~¨ñÛGsyF7F¹>¸®S£NecìïÙ¿â>­sskgöæ;X(fùvóÎ}•~„| ñ¤§KŽ=C•[­~cþÎúÌdPÞjp¬'ƒ–n£µ}ð£â­ÚXƶIº>€ÝGå^|ãË+ž…9F¤,϶´Ma5CF?Z»4ÏGVŠñ†ŸõIï!hä “º ö› Œ°+ü×­—cxû9ëcÇÅaÝ]lxŸí#û3YxßL›ZðÜj—ФˆöðÕðOÅoxÇáΨl51£Ã²àFy9ö¯Ö†Pß)Jó_ŒŸ³g‚>+éò%å‚GpA+*(ûÞõϘes¿´¡÷¸,ÉS³©÷Ÿ™žñoÙ\Ì®Ê?å›0M?Åu}UÛH~í¿ºy#úW­|nýŒüSð÷T’âÂÆIáÝò´}ué^ã-XÐõ-àxßË ¸àWƒ9TŒy~óè)¸ÏÞZ˜ÚÖ·%‹µ•¼²7™ÈÜÙØ?ƲÚõб`ÍÎ6ªžWÒª¼’\LÓJù°À¶3ïøÓV, Áfè7wõ®Fî΋"ÄRÆ8I1´vôö?Zè¼  É}z³×nàžså\þ™e=íÂÁ;›%¶ñø×¯|7ð¼W0Ç ;_«óþŒŸ.ÇNŸ´•ÏBøyáÉ­ÄsIhf™—¯>«Ö´+8Ô µ?Ƨ̑±øÿõ«•ð~—äÚx›;?ô évº†¨¶éí"*ïÚ9fÿdz¬ }¶1&zXïö\¾RLè~#ø‹EÑ´›{x59/5 b?)4ù$x¶a~ò„þ9ÎkKá§Ã߆ "SÕ¬ ¸Ôš&–1% À2 ù2–-Ó>ݨÐõ½'RñݤÃÃW $6ì,U­×|*Ìœç-œ/¦ k|mºñF­áÖM£g'˜¡‚Fñ ¼•ä–ÈãŽkìšå»]6??^ý ÖVy÷Ž5ßütºÒä»Òõ Þ[Þ:ÃiC|©÷° á=Øsí^1ÿEÒµxÇTð“ǦŸ¥Üismo2Yâxñ·åx8=r1]¦‡ñâ3ko}ªxO¸·XäHZk‚÷’m;J`8Îî¼×ã¯é~?еŸÉ¢êZ%ÃNßiµÕ£f€8\|„ž§¯?JR´¦ÑÕFQ¡U3ù½ý¬;é²]ønâémWíú´ÑÛ·–Y9ŽÜ·M¡°Ì{~áxsJ±ðËJúI.¯—f£"¶¶Î:xÅ|áû2O­xÁWžðç€áР¸ m<6§l›sÄõÏJö].]Wšu½Æ±©´–lÉ™æ>a'Œw£ÛJ¦¶Ðõ)Ð¥…øßW¹ë¯áûφߨ¢F’EW{†`¿hT'tYèF9ãšòo j2xŸFÔmô­-BóOV‚oÝZüæ"@ÜŽGÌ?Zöψ1x\|Óü‰¦]BûN’çM¼V1n˜© ¹Æs‚+Ì< ð—Å¿ôåøÕ®ý¹¬ìX\ZßI–FÛÐxf‰Û”ðù¥*­ù˜ž7ý <ðÏÿõ-½°Y.-¤Ô™‹A8*¶?•~|þÖe¢ê—W:ÇÚVÆÚðy+°$mü9_Jåÿg¿Ù½õÝkPñ¿ÅíNâòùuÚ|MðÞ©âm[Û%±·…¿ä+q*B>]¤žµÓ~Ò¿­üJ·0²wó-ÙD"õ`?•|{âßë¶Ú¥Ç‚í¬ êWú€yî$›ï*ôt¥(s-I„¹‡ìÇìÏñ|dý$ñ_Ž5{KÍCCo.ø4‹¸ªõUÿf½#Tø¯àÏ|Š x¦ßL¿†ÖdÓ®>Ä6Æz‚¿Þ<kóûöñnáo Má_ƶ÷ÚÖèí£ûQÛ!µ[ WCK8Ko3½æý€Žwy'¯'ŽÕËx³öÊýÿf6›ÂöZͪXIòÝLÆBÊI]ÇéךñÚ ö³ÿ„3D>øa+ßkz«¬laÉß&9ç¶Ñɯýœ?dÿüqøÿ âF¶×ZH[Ve@Ò.Hû‘·$ÜuÇ­(V¬ôÑw.¬¨aôz¾ÇÖZ¯üoÂ{ã¾Óô+˜mÕ‹JÖ¶å°3Ô69÷ô¯Oø%ÿ\ø'ñ=ä†ÓÄÚ^nëz­7šëÈ8 ~μ«Mý‚m,ì®4¯ øÜ[Ûãþ%wRÌRAû²WOÏò‘èkâ‹|Gáj>ñ‡‡ã ³o¨iÑùIx§îùˆ0¬¬ù€È&´­NX´îE:‘­uÊ~ªüVñ¿ƒ¼yá—ñç„®tyõI¡‘æ¹kù<ÈÐrØŒ‚¹—v}ñ^­~Ðße¼Ò|ª^^‹Æ}¬[I2ÄääI¿¢q×=1^}ûkÞ)ñ_ÀÝzïY‚K˜l­Ýï-Y²cddŒå[Ÿ~(øO⧇æÒ>ê6rëÚfcg¯Z‘qÎpHaž8·Lé¯kkâ¨Ôå=ãáoÅŽÚ犵­MøG¥x¾“$wmu§…¸‚V@"”) \÷#wAž+»ý> ÇãÝ5¼EãoÇáßÜG46Q¦¤E¥Üj¸<.'\r3Áàõ¯+ÐüCàOjP|FóxwÅ azõÄןfhǘ¨«ËáÁ9Ûï×¥tÿ¿i+ï…ZÕÿƒ<-¥7Š#i¤“YÝbÌ-¡c‡elÜÃæÜ07zÔT(éÊûŸ>øÎÏÂ~µã/ÙïÆšåÔË«ø¢9µûírÜYÜ XãW2‰²|Àw`pN8÷>Ñû#x;á߃-_^øK«Y^jš1ßÜÛ¦ µ$DWݶF‹xù1–“ÿCø]qsáÍö®øqàÉ ŸÇVv—Äz¤(ŸfXãXš2Žy _ròÝÀ®¢Çã'‚¾~˶–þƒL³ñ&³imý½«G 1ó"ËGn¾Pùc8'® ¨÷¥¡K–!ñïãv«ñ³ÆÚ‰¥øŠÞ×R‡e­áBcŽhùÚ<+ܘé\ÿÅŸÙÿá–¥ž½¥ø5-nV’{ï•–8Ù”%rIðÆyâ¹¾5»Xþ.k6p¬‘²Mt×Þ\‹+Ê¡±÷¿ýUìZ¯Ã}Wµ×¬¼%¯Ý]\FßèÍå,{2¡Dx'æù¾mÞkJjÛ™T³‰ñï|-wàk;[‰t­Rñ§î®#$J x<üªÆ¿>£„,~ZØZ5ŸÚ’K‰®–@̃uç#­u—þñžã9¼­}²á¼²ÙÜ ™p (öŸ©Á{­ø†=S]ÐÖÓÍ…VæÜœáÂíÉ=­ŽUËsÂþ*CEÖÞ×ÃvË…úÓy¿4‡¡ wÇ®kÇŸ¯ÛÀö×_ni®#ÈUXð]=õúפ|Zð¥ç‰ÌšW†lÚám· =•¾dÎ2ÃýžsóO¬ü3Ò–çY¸M@ÝÞ´QÀß7•Æ3Þ¸ê;PÛCÁ|7,¶zäfñ^‰vE‹ó:ûW«|=×u}-£ðäìY®ocš5fÇNÙ÷Íë^Óu}bKÈÓmÂå•£õÎy¯Xøaáø’ãJººù®a $ÛÉܾÔFHÑ©5©è_ü[âï†?,¼A§Ç–7Ëö{¨.# å±ãÛ¨¯ZøËñ_ÓüMáøWLk‹k[«ˆõ‹{xpŠ ‚‚21ëšç¯üg»R¶ˆWv!‡C]¿‚F­gñ ×K›ÃÑÝiú”HÐMÙ‚)ܨ9ÏÖ»iɨØã”lÎ KÑ>øÓ≾\kÒZ¶©§ý¿O„ÆœÞܨ$üWµþËžÔ¶Íàh/­EÖŸ|ö· &í®QOïAÉùX`ñÆ~µó}–™%·íâÂ’XÚxW]G2V€¯*½÷œÔWÖÿ³³xâ ÿ4é:÷ÄŸ èß<§Ci6ñø‹KÉh®SåyƒœŽ ó^n#–¬Y݇—²³=ûG·µñÇø¼Qoäß^Y­Å¬Ñ±Fv‰Û(} {Tþ^üUøA£j&FFµ’æÖKÍÊ®®dWn8ÎNàzùyîkË?f¿‰ºß„ ò$–ì™;.y7y‘8toPd{××?³}ŽƒñZ¸ðˆÊXÁ­if]"y:-ÀgùHï”Êæ¸°µ%ŽœŽìE(Ê*q>cøYïƒuèl¼M£µå­Ô2 “?4r Øn0-ÜŒ_g~ÉžÕ[áµàêvwiÚrèúÒ±y‚™lrÝ~\ƒÓ¼ß]ýž'ð¦±q§k-Y_”hYxeÉùÓ=ˆ…}û"ø+ßÿi.8ä†ß\ðú¥ÆžìL7ÐÌ£„ð®®{Wm*‰ÔÔå”}Ó¥øh— øÉuq¨|·š>­¿U„*HL_¼Û×p*O°>™&­ø§Â’ZxÇW¿ŸEYMÕ­®-î!oÞ¾ÕÚáH#1]ØÑ4¿ÝëÚíëÛÛÜ[Ýo¨·Üe,bÃz7 Æø‡áÛÿø^?øOuÅÒm¸³~íåÛ÷ƒŽaƒÛšÇS’.+u©¶Ÿ4“é±Üiv ˆÞøKC¼–?øJ´xõc‘Y£=pq’O£ûו|L½Ñµ¹õOè'·¸2Ü<¶W µí¦ŒcÉLŽ„.9Î kø7Å?Ú¡ÅŠ«}cg%›ÆÛHW²Øù¸ex«ßÉá¿Mª^ÚÃ$ñ_ù°4ÙÛ¸¾ËÜöÇzñqˆ¸­:ÛÐö¨Q÷®ÿ­Ovøÿ©j¾ø[¢ZÏ`Òj^0ò5 …-¹c†2:aŸÂ¼ªÇ⃾\Ý/޼'ý»«j™'…§Ûö$_º‡Äı#°ÇJéiÿ‹úçöW‚ôíæ8lfðœós*±’@ãqÎ91^­ÈWW¸–uišVÞeÏßÏ9äúšåÅb#ÚaéþïSÓôo†Ñè·r[cÿM#ã<Ÿþµdø»O‡No)06.pÃí^íâ/E ì|Ìò}«Ê>$hS;M2@ʪÜîç¾"Ÿ3š?\­à Ò<ÞñãUÄžìÒÝLm¬Vê;ÂAÓ¦MP×_ì“Æ’ŹU°ÌJ­¨]íÝl?à%z}+èhÿ 3ákkY£¯ðfûÀÒù±ó(è+øÑ~Ö6çd`§j©Åox3Zm£5ó*» ®üŽ=O­yïíã >îÚao&vóÛi¬åüK•8Ú…î|‡û\ê×:—‡®<‰Á+™\ÿ1_j14WòÄG"CüëîŽ×‹aup~ñ\Ž¿_Ö¾;ñN’°ë3ª>lüµõ¹,£ m!Ä4e[–K¡©òË·ðÕy8lVüiòü¬¼0¬›… r+ÞŒ¹–«MA+ÑEg8ªGzè|®6“¬G&ïâÆÓҹюõ=£˜eV¦QæVîo€Þ2±kideÊó‘ýk醾<·ŽXUeb»G;°¾ýŸuå¸ÓÐ;6ÕeU½ú×ÐÞñV¡bñ¬GŽªÁ¾`lW‹Z<’=Êñ¹÷çÃ_ÙÞÛG%àVF`zŒçé_[þÏÞ*Ò¤Ó£²óº®ÝÛ€Èôúâ¿+¾|hÔmÕ<ÜmVMØ?S_T~Ï?´$wF8..¼¿-pÞ[;gÚ¸êÇšW±Õ‡•·?M~êZ|Ìr ¼Æ ¬Â¾•Ònb¹²Žeî¿Ò¿8|ñ’;iín¡¾Ü¿)fVý+éo†_µme¤·‘³¹HÀ¬p¸‡…¯y#|fצœO¥7À¤<“\·ƒ>#éÞ$J¸És].Ž"Ñ<:”jQ•¤ŠÚ¦‹c«Û=­í¢H¬¸ù–¾`ý©¿bÝ;]±¸ñ…ìÔ;)ó# ÛõI•Uð_ŸzmÅ´Wi²XÃ+}àÕÏŒÀÐÆE÷7Âã*ádšzv?¼yð“]ð^»6‘y¥˜Õü§¯Zå®lo-ïˆÙp½YGúÉñ·öLðwÄP÷ñiñ­Â¯æk㿱‰¼-%ÍŽžÒG»+åÿõëä18:¸[ó'cë0˜Ê8«r½{ðûí$«?’[o,Ìxúc5í~ÑZÔ¬ž@UèÛ}ÏùÅcxáåÕ²¬–»J·ü´^Aî+Ò42=:ß2¦ÖfÃŒW•S¹ôØ:qŠ:-6`´TŽ,7ÌS]/†ôùÐË4rL²b¡§Ú>Üâ¹Ëáƒ2ª°Ï¸ŸJí<' k¥™gFù£QÉã¸ÍzY->jíœ\IW—£Üôφðׇï¤ñ¾˜M%´{®ü÷—ÁÂî'ýjòÿÚ7ö¡ðnƒâ+}:ÿÂÖ/yöõ0ÞFžlòœ8þŸ›9é^™ñ7Æ×:_ÃËCI»U’×M’XÚÜn‚à`ó1Î1Ò¾ð7Ä‹‰~Öµ]zãßn†âS§Ýëši2-‚ Ád9û¥ŽÒ}«ê¥´‡§ó]£èˆ~1üMø¹ãyçÒ¼mjÖ0‹‹º–$Ev7£09KcŸJòÚ#Iø³c£ÛkºÌþÕ®éæ)ª ssƒto3žü«CÀ^ðíì^‡_ÓŽ›=ã,—Ö¾#âîgRª9R‘Â<Üã­Gã[­ ÷DÕ´­3IðÖŸy`¦ÎÎóÄ÷3I"X©å’Q&Ù¿‡€sŽƒšªqêoQý–xþ§á[T³·›Ç—vÖòG‰tí-Œ‰lvgb.™Æ2Ǧi–^Ѽbž"¿•Lš|‘°·‘@‘Ø08à ÉœW5â?Ú ÃVv÷Ú-Ÿ‰-àò´ñqy™bët½¶þðÉ<{>ÕÄø³â—€ÿá“ÄÞ$Ö¼I}=Õ¢&Ÿ£µÀ‰öÿ¯™”~ëhþ-¸8À#­nãäsF³‹µÏ¡5ˆ­|9ceáÚßë·wRË©_KîÖ1»=F2ëW¾xŠ÷â/‰!ð¬¤ÒI%Äjû3nWPpÆ"OÐw¯…´?ŠWŸ‰×Oð®•%ÄkjííîÎÙðÁœåUG\òN+í_ø'µÖ±¨|HµÓ|i¦Ü^Ú¸ž„‚Ò¥‰•b¼¹úTÆ/©¿Öl¬™ì¶g ºñ7ÆCÁæMU›Yò ™¥XþÅ ãÌ߃ÎxÀÉÏ‹ÿÔ¼9áÝ3Kø_k\i‘‹qö~d–2¼±cÒœ©èŽzr÷µ>#ø+à>»«|D×ôÝ©L­`Ûˆ(£îœŸn½Ë׺uþ‹3¶³ *ĘøûnÕç÷ڵŭ¯†ôk•‹KUâ’hþdÇ¿¡¬|AÒfljzÝ®½¦\ÙÁ¥3}¢63M´€=ëåߟ³fâ .ûƶ/5½åš“nÑôfëëß Ç+øj[í"(¦[ÌRÞjåµo X|E²¼³™ ŠÛÛ±ýÈùCã’EVÔ“ã¿ÙŸPø‘¯üS±¿³×âþÍðý™MxÀ2¯ñ/5úáoÚ‹Á–úEŠx/C¼µ¼Oòmn#o—Ì$‡”„^µñ~‹ð¿ÀŸ|pÚ‰îµ)!Ö·$ðÚå‘G©ö5럯/µu _ܾž-íó¥Å%Ÿ˜Ì™ê?ÕËR1r6„œbu-ñ›Wð爿´‡áö·´– ¾µÔZ9$ïÁìAÚ¹_ˆz7!ñL>2ÑüO%òÉ´_[Ë–Ç*œ+£ðf»¢üOÕ.®ì´‰-îåo.ïíÀˆåÚ¼˜ñíëB‰2Ÿ1>…m«Oà­Cá÷Œìc¼²ƒIŽâÈÜ))Ê"ãÛV„´h~%êÚtÂn¤;mõ† N6¯ãÕÔø_O°ûmî³u¥êWšNqµc¶‡;äu¨Þ¿Ó­uÿ³®©?öŬ~ð<6vPÜKÄ×L¬Á³Ó=}h÷Y¥óH†ãáuŸ„µ3¨iZ s¶J·Uc?_é\ßÇŽZ€þß6½l¶j¶ìRHá8wÇ Ç©â¾”ø‰¦éWv^Ú2[ù0«Kä©ùÛÐqƒí_'ü@_ ø³ÄWøûöº–—ök…[[Ø á—ùÁä{ŠÏþ^(ôg±N+Ùsv-Ù‡å]_íAûJ~ËŸ!ÛM¤éVí>øÛY@^êoâ/‘ÉcÜ`dô¯Jÿ‚2üEÒ®þ[鬋o£tb³7 cÝœn'²äúdâ¨þÒ_ ñ=­—ˆ|3g§ëÖö{4û]Zñ„L£ædÈ;°¤‘Ê’WŽk³ýþ#x»Fø»wâ›vÓÿ¶M–íÙ±·¼Ø­¸ì?òÌÓ­g8êaJ§CéÿÛ[Ã^øÑ®Gû8]Ý]²i÷Ki}o¨j†ê3Î’Àþ¨ì0'å=ù¯Ÿ|s¯§Ã=ëÁvz]O¡ÜBðØ]0Á{n&Ì $d`Œæ½’Ý|lð–£{?‚®…­xiÒæÞD¸Òfhî-ÛïíùW%E&n­Ðó/ éZUçŠ%¼.¿¸™£•Q°Ï'écÒl~!ÿfÍhÍœJûf³ü[àÈ­â‹Åºd Ü6û…+ÐW]ð@]CU¶Öl£!£©f_¼¢¦š÷‹”®}{áˆ.ôï±Áfl›¾Z£¼‹ªhö/m'—ö©$7*ÜÆ¥GËžÃ*?:ï<i¨O©CÜ[¢hö«*ç™ü*Æ¿àUÓMö‹rv¬Ù’ÖU\wÏœ×[—-Ž}d|ëûcÛxÓÀÞ-Ñ~%|?š8.,n–mFÓËÏÛXÿã9®óáÇŠtßü_Ð|uàÍ ,´]kNöØÌZ8æQ‰¢ ñ…|⺈z>2ðü°Ýucm2³TùƒoóÅs¿ <7<Dz Vž;–2ª³só‘îšÊ¥OÞs"éÓæÑŸLèú%•޽ªø¿ÁȾV¿aÅþšOɹu÷èÖ¹_iš§‹5]CÃÐø‚ãíßgŽêM>Aó$Èr³Ež ê9 f¦ð7‹×C¹Ñ#‘ßýï˾ gu»œ…ç°ç#Ú«þÕ¾¿¿ñí®¿áKã¦Ý[Ú-âê vÑŒ’P—¿Jô©bèó[cš®ÙÖ·sãÿÛ[á$zW´]gÅ{0™¡³häÛ—"¯˜ýœTúq_;é_ µ 6MSá¯Ã 2é¾_¶Ø¬q ÌPñ´zŽ¥z‘Ÿzû3ãgÆßø·àÕ·„µMZ×ÃúÌÖ¾ ±ž]·Zu½Ä~m¤±¿vB`é^7ðãDñ—‡>+iþ&ð†ò;xK­ÌÊpЕÿ[ÇRA$ŽÕÏ]Ç™ºoþ¥%îÉ?ájþ {[_xU,¯5E…®&‰@[yw`°Ç¨ àô¯ª¼áôðƱáý:öèG&ÙæÓä‰~WlazUÈÿ~¯|gø'áxûMñ~„fŽÖk¹¼´U*4ASz{åsô5¡yáRö(,µ(0¯jÍg{XˆÓ§§©¯7ýDÑèaãí#ÊÎÓâôCÅžÐü_â+•å†5mÜ–<‚?AÒ6‘=¿‚|/âŸ~îââ#io08T¸†O_áÝò‘øÕ_ìë?ˆ³Õç„5™á‹WÓõa’áˆÜ»Bî\w8N*o€’ë1èz§Ã¹àûdv—ÞÚ³ëèÛqõð©úű =FßW‹¢åÛsÚ¿h_ÍsðŠÒòdXÿ¶K¬Ke£FŒn|Ùcìk‰ðôº-¯Â}7H]wÌŽÏPôù¶ñŽTÆÝñšõ¿x×O»±·‚p¿gÓÚ.¬ÀÞpñ`ÇŒ}ì㎄>;×Înãð-Λ/…Ft[Éášõmƒ–÷‘ëÒŒu^[Ô_0ÁÓ^fŒüma§øú×Åv1µ·Õ浸òù+üî÷8'ŸJã~7i×ÚgÄ}BÁk;›Ÿ6Å£'dˆÀ`?Ïñ—qiÐÍ"²µüSÃ*gçGWÁü±Ÿq[߈£‚+íQæßRÓc!²ð2†UôaŒã¿å^êsůŸè{¦•ŸÈ›ÆW0xÏá®›LßhðÔ’ZærPØÝï^sxr¢VË"ímÃ¥vž ¶hãÖ4YeÝÕ“\A2¶C´6=²3ÇZäÕ#ÜÏæflžO¯IsZFÔ×,œO³u«!q$¬ñ1RÌ7cïóïèé$s6Ðóô¯Rº$²Ìåœò¸\síë^{ñîÊ-5¼±·å'ÜõóT5Sõ O¹E³ç_ÛE³äϵS?0_­s>"Ö,Ùb]¡FæûÕ©ñ W'P•¡g~1-yî»­\\ÈÈåÇÞ=I¯ ;ÓGÀTª¾°Ù£­ø­l2³¶ó÷G™ÛŠòˆÞ$™™„Ò1`ÄmçšÞñ¯ˆä†Ë˘°ÿk§ÿ^¼ŸÇäÁí2|Î>PßÃU\ÌëöÉ+oñzê+Å‘&+µw½út¯˜þ!ÅAcÚsÒ½ëâ±,°È'Í÷~^þõá>6mÓ0Œ/Íڽܶ<²¹ãfu=¤N*WbÄç¯Z¯#1>µfî"’øUy×ÒÇcã*_šÌŽŠ(ª9¦‰ˆ#"¡§+ö4ì5ø`•RYYx ýM} ¥ëÏ K.áß–ÆkãßøˆèúŠ·™´g;½+Û´ˆãP³Î¹]»0Øojóq4åÍs®Œ£k3Ý´?‹rÆ Yr |Íòšôï„_u#RWŠìãŒ'§5ó†Ñ¬ý–ßþ=™¿x¦NžßJö /ºD6‘Á Òíݼr8¬cÇU¥Žª”éÖÐúûRø—¥-Üq-Êmc†Éï]7†õÛmbÇη“pþUñ â¸+qÁfäçJõ_€_ÅúÙIr§sá•›§¥tQÅT¥YI½ɈËãì}Ãé°U†ãøÖn½á+_·1ÞÙÆäýÖeµ6XÝ[¬©>7 «/zšßUpvº‰øY5ì:ØzÑ´õ<• Ôeu£<‡ÇŸ³•rdÔ4h–9:ü±×‘ø¿áî«áù<‹«vQ»jñõ¯±D°K=ýk Å>Ñ|I-ź³2üÕàãòXÊ<ôôYoU¢ù+ê‘m´èÔ6·²m‰¸ÉëÒºèlü==„ZkO ÑB6nÏ#&º/ˆµ Ÿµi¼°ùÚd~>•ç§ö}§‹ ÒÞÍf‘FZ†ù ƱÊéNŒ¥+™Æ*ž.1”%¡gâõâÞü!¾Ó§»’8­­Ë]Ü[îóYF@Uç“ë_\ïøN4Y~ éV÷š.¡}hüòó¢“ò‡E!—p9êkëí[[“ž&ÕtÝ;\ºÓOÙQ;HT¬d«ŒŒ×µ|}ûiü<ðµïÅÝ/LÓ?´dá‡ì·7Q$o擃&ÕùC)'Ö|âßCûè5;·6襇!Ó!°á õ¯:øÃ­k­tøâ]£êž¼ó¯µ ­RbªÌû”þïåÞ§<®Fs“LñçÄ~ðü¾;Å^ ²ñ"ï¾ûÔ«c.Å%„Ñ¡ÚûW»Ž§Ö´Ž†u%}Âü?ÂO ¶³â¿ézØÔKhÚÞóÌšÞ’ ¸CF9,½¹¯˜þ+~Ñw·­öMCLÔtÝk-%äa¢xÕ€;dÆr7=+¾ýœ ïŒþ"j–¿ ¸ðþ-¾ßu%äÞL3àüÊ!ÿ–˜cÆÜ â´><§‹®|/²óUðÖ­k>£(]RÑYEÆGÝ dv:ðpA®ždr}«WÃ_‰>¸°±Õþüo¶þϵ¸^l<¡@cc»§'ä×è7ì“û^xá‚ô)u›‹«&úþÎ8¡˜þ®FŒžïÔüäпf¯[ê ©üø¯oá]âòCA›Fđ̤^›М¥}1û5x3áÿŠ5 :Ë@“TÓ5‹+¦ß¿Vaöó! •HØ" œ£ Ó],‡ܳþ x•u¯Œ ¤Éý¤·Wî5 ‰8šÕ³¼ëà ô®ö”øªüCø«¬}“Q·X`ºû1·cÏ–¼d~UôÏÀï ÇðÿáµâhVzjézkÊ××âVÛ”ø±ùWçWÅ϶±ã[½i¯vµåÃ4L’cw9íIüV] Œ½ÖÙÐj~.³±ºm"öH¼˜U•7u9=ñ^O©^yú­ÄŸhFÙVã·µYÕõxVõ%Š?1cR[æÎN9®oÄþ"±–O*8ÚÙdç!qÞ«–ær•´9ëÏÛè­>ˆ÷K&é7+0û«éZš°Ò'úyÊ‘…h×8÷¯=ñÆ»e.­qof¹c÷Ž3ÅC£xÊîÎEO¶-¹Ûµî´K©ŒBºÖ,,îÚÞFûOœ¸ié\ÍÖ¥~ak(X#a´7¢¥]»ÛË}tÊiÎÞwçm¼Ke©k­aq ‘Ûíù˜·ZÑ»ÇBvf×ü$:uÝ‚iöÉ5ÃOó37O¡­ 6ØLí¦­ôŠ­•‘¤ZÀ±[[][ýq »f%ÏNzסøqtKQåêR‰¥òÏEûÍíK[ƒîG¤Ûϧ¦ÍúGŠ×†Úä{ŠÚÑu»È ]5´å ~Ûf˜›i§>ŸasØ4›I-Ù—uÁ pxÏZ£`ÖŽF•c.×F;™‰ùj¥¢$Æñæ—áïx‰ìµ«{?ì¦eFšuÜê÷k’øs{àÝOöŽ“BðƧq"³F!~R8QGO¡®‹Å´Õ¯&Ò¥×a’]»†ùˎÚåtéžñpÐFŸhÚ¡…Aó- L@<ŽÞõÈß¾mËû»›_´'‰4»ÑégSŽóPŒ¬Çm·‘[éÜVNƒñÃ>Ö/¼¢Êöú„7Êãü‰‘Èfí×¥sß.Î‹ãØ¼Gk ÷‘Æ7jLÊ„‡œOaÚ³µ;ÂßoôÝsFuÑïî¥i.¯šM× í·2ÓûD­±Ó> x¯Ájz%ÐÒÖhd3É%à òçåã¹#¦=kÐ~iz~™ák;} 8¡¹ ¸’YÎg›¶+“Ð-¯üZÒî4ûy™ÖÞúhÆA$£«¾_ñÇ„5ÿ‡ôšf¤‚Hw¢ÝÃóG2ö!ºg«ô·ÅšÔçÃñøSâžkªik"ùÖÖ»•p>Ɦßʾ|ñïìëá/Ý^EàÿÜZصÃK¥Ãy‘„Ü3×ЊÚ8¸µi•0u=§4“ì|BÉ0–IÖ?“nþõꟳ_Ãÿ|sñÕŸ†tÕš7ÎS©_ÃèÇN‡Nµ*Óû ìÒ4êoSD}û,|8‡Bñ•ý®•tš6‡¥"Xè‘Â>ê® $|ǯM{ÚëÞ×µ cEÓVÛÃð\¬ñêVq‰O–ƒkBqÁ¦ ÜExÍŒ#—Á‘ß[|KžO üß»µ³Û2ËŒ1߀[È<‘ÓÞ¨øf×Á^ñâÍgRñèÝ4ŸÚW2°k­¸#b8n8ÓšÖš•5ªÜä­R5§¦ÈôÏ‹ßnüAðûMñvªnj‘Le]sP³Ùº©Îù7qÀÎkÀSÃ>ñ#xr=RÆÆÿÄ–§íšÖ“k…‚,òØrXðzpF:×¶|p¼·½±·ñ—k/‡t «‘u6¹mw'Ú¤ŒŸ+ÊŽ8ðyãrž9äq^cñ—â7Â?xŠ÷ÄÞ´šhÚÖßN·µ¼ù%·™T(VhÝÓ©ëW{˜r¨»£²¾ømaá¯xŽ÷^ºÔ­fšKK;»H‹y’Æ ‚~ø`ÊÜâ²nþë+øQý¢fº…šo:ÂHÓ›k®r¬¨qŽüt5Ãø·Çúσ¼3àÈ~ø¹¯´]{té*û¯9÷t9ìIÁÎy"½á¼A¨è? føKg:Ç{¤©ßqj]ädlIƒÓåBÝAÏj¯w˜ÍÉÛC”¼ðjx‡àż—úÍý­¸±ªù‚<v“ŸL÷?Á_Œ— 4}KÃ/y0Ô$±C ž„2A{“¸{ÑáÖÍÝÀŠâÞâøGº×QU„¬Ë‡ã¶pÖmß‚õ{߉-¯k÷rͪD"ûÇoåGã™’2~Qž¦§MÑW¾ã Ùu™­Y5YMòÎÍn«×™” ™é‘\¿Ç;ýOQÑaÓm¬•®//Uci$ç ·#îóŠìµ í|gö¡oçMo?Ÿ4è¥H N{â¼ÿÇ¿ üK{ã}CÄzg‰®$µ‚:Æ 6Ê3/òl(nQBŒnaüIðz|4¹°ñ Ö°‘ý¢Í~Ûn¿68Æ~ àb¼IÕtí&ÓTñµÅÖ`»¹awµÖàW¯$ÚGŽ,¿±¼y5Ã2D¬ª‹Ê1©=ÎyÍg'Á¯Û ím#–M.Yx¿Õ9Á'ßšÂ_Ó5ŒNÅž/xáÒôË%y#½µ;dÙ÷{€ î¿gÝFö'6÷P³G»rÉåãð«SøGF¿±kmFÆHÿ±Ù£ƒ÷`1ÿ?Ê»…ºž–aXU‘~`ÄžeMsH©>T{ŸÃ=vÃO´†æéÁmÛV6o_ë^—¯é6~!ÓW²Uó••v·9N¿Ï…|§øÊæO=†›}!U|ù~„úKàŽ«ãwÃRy±·Èq»Ðc­+{¦˜h©hÅ×¼d5Xõ(âXÕaýâãÌöÍrº·‡¬4 ÅÒwv¹cb­Hdvà׫K¥‹Új ¤óóÍr¿4.¼7ouey–*ËòñòžGOzå•KÓinu{ZŠG9}§2óX²Öè\"3+|©NqôÊ×}s§Ûxÿà”‘^ÛÉpº|2¤Œ§æ å¼å^¬ê—¶Ú©°[†ŽI6™‡¤›sÏ®Gó¯cý—|_²ÿPÐu¼Øj†>ceP†8ö4`qQu]>êÄãpïÙ).‡Ëמ›Mñ‰¾×¤}ºÇĺ……Ë3Gñˆd „ÿy{}+¬ø!ðbËD}CÅjò.Ÿkµôû,–X …s·º‚Ý»W¶|[øGe£ëz†• Š¥¬».ìž?ùc"3r¦â¡øY=Œúˆtó*Ü4QÆØ%xÈ+ØñÓ½uCÝ—+9%h©.¥ øn×QÑãÑî-üϰÌVË ¶¸9ÿõV/‰´2M:×Äê¶o%µì3‘±—½Gá^½©ø+IЮõCeuö¨mc…´‹ûØÔàí¿)I" òçæVÊãäa×ï‘úaQÇ íØñoˆ-·¹–Qg# Xd¨íô5ÀϪ_%Ô‹çü¼}õÉ5kRiŸSpÊq»ò¬øŽÃNŒÊªW+÷•º¶?ZúE E$~ÍÍQ¶fx«Z¶‘©]Þaó77Zò¯‰)µ`È›YÕH,yÝ[>,ñ"Ý[íµùdÝ»æn9ë^kâkíîѳ)àí5­:N;›{^edr¾2¹ûE«,‡ûË÷…y/‰ Ü–FÏ>µè^*Ô[Ë1¯ »¿¥yΧ35Ó–^§è+ÔÃÇ—cƒQKC—Õm]XìÇÊÕ—2¹ÒjV¦Uܾ+ñ œvö¯b”®|ö*œV¥E/ÔÒWAæ…Q@ŽO/æZØðÿˆ.ì§X¼öÛž›«'½Kk»ÎA©”T£f Øúᜭv±Üyç?)mÙ¯ ¾˜áâ¹;U†ÖRA>¿…|×ðvù­à„Ü¿^sÅ} àFËnËSºN­nد*¤#Íc®2|§Ð×ÓL·Ž8æÝ´r7g>õÛhŸu«—O·F9bÞŸZðýPXÒ9Ë9ÚÙÁl+·ð¥}5è¸#imÛ¶öÀ¨qŽåÅÙè{×…õ½^3ç}¯vÅ ¹O^k­OŠº“Èš]œí¹ygÝŒšòwñRÚéël¹ºü¬8¬½#âϪ›yU£`|ÍÕ„ã¢%§Òöµ :/±ÌûAf-úW¹þÏ9kè㿹¸ò˜•ú×Â:Ä{“p±ÙȲ±`_l…}û7|CK]=^ò]»¸1ù=k–q÷F[Ù6~†xwãtmñL~X³d‘ŽÕ×XüYán’uUèÌ[§·zø6Z—ö»-œß»BíÜ^£á_‰—7Ú"°»Ü̸ڇ¯4¢ä•úš8Ó¨ì}§¡|K·½·W%\gl˜çšÜÒõ­P“ab²7÷\Šù;ŸÞÈG·e[«c¿ë^…¡üS´ºŠ»K­Ì­‰>nŸã]ñ5#©ÉSN[ë¬øBÇZ€Æ×÷H Ÿõsšùã—‹Oø«~£âY¶cò§L6OsŒ×¾x;⥶ ¡ù¾_—sWŸþÐvÂæþßZ»¹!U°T0®©TÃÕiÅkÔåŒqo ?tù¯Á> Õâ-Þ«iâ-RêÍ-f‘¼ÅšÜŽyöó¯Ç¿Ãoñ;Vø§ié&û?5ÛZi”\9îqÓrIý+îO„VúE¦‘¯x‚7¼du’êE8*:|µðÏǨn´ý[Ä:ޝª½ÕõÔîöö÷Š“°äEöϧaZr¾TG4}¦‡ÂŸí>#k7Ö‘]Ý5ÝØµ¹³µ¸"Ö=«³DÙ2XîfþØæ½7áÿìgãù<-…,¼s¯èºn©¤ Ëèôí@MßÏ”©#m ?ˆîÜOcÒ»ÏÙ»á'‰àø¯yñcÅþ …´[ö9¡·‡ÎšÁž=îàä’ÀrO^AÏJ¹ã¯Žöþ/‹Äß| ­Ë ^•­´ÝílešFu\ ÙRpOLÓŒ¹Q.*F~¥©ø# ‰u?j—k ^Gn°]iÆÎæèƒØ‹ï) œ.:òkCBð&­ñÑlþ èë7…nu#%´ÕíäŽ0£•¸ˆ;¯Ãq#5ä?íÿh¯ZÖ¡âŸø†84Y$Y¬áU¹C2€8<ñ‚;WÓo᫄ѵ/‹·PÞ5£"é:|rKk2îÀf’B¯N¸É­ãddåìcø·àĽ¤ZÜjÞ~ “Ég£´¥0>V™u Tsžµî?ÿcûÍB_üh²ÓÆ“¨H‘=‡-lLRDý?ˆnLž„œ`ôwöyø!ñçCÔe³»ñ%‹j¥»ßªi²o‘­ËeUÓ•'¦3È÷¯¶>x[Åoâ :Ê;¸#]Þ1y¥bc¸™™AgQÐ.N:b¦\ÑšŠ6¦¢©·-Ϙञ2Õþ~Êšo…|N.4›íVáRfº˜ øä®W‚µ~bÉây.µU„ÿv3ä…?.ûëþ!ñ³ê‘xoÀšŒ^]­®ùË,™,}q_”º·Åï FѪÌÒIn›UU¾ö*ávìcSš1Zo©êW¿.4ûI&–8đˈÕX|Ã5Âê?âÕ®§žêo%ao™ˆjò?|akÆò,Y•ÏÌWv1ÏÖ¼ïRñåòÚ}ŽçRæI7H¬ÕºŽç=õ=‹Å´95°\îó †ïÒ¹WñÝõ¼íäÍŽ:ò£üŠña®\Ûjÿl{Ï!7c“ú×^u U`_²2ω¸É$}E=@ö-+∆Å-ïïËÜ<µÝÓô«©ã­W»–¨]IÜGs^%/Š#···]BíY³÷GQZšˆlâd60þòY0¬¿ZQqˆ|n·¿‹W‘L·lFNüõ¯Pøwwey¨ùv’yŒ=zWϾÖÚÆF÷(»¹|=v_þ'&™y·L¼Æ“æv_SV»{Ƨâírò­!®#‚DÿV@f™õ®]·ñM¾%õšmóŽÑ€é×'5Œž;²Ö/®nîïlÍò®î¿àkÄþ#Öu[c¡iwÿ&2!2cvx✾zŸÄ;;][ÍEVñ*¾ùx~™5ôÀ øÆú`øµ¢Ù.¹¦Ø°˜n*zÈæ¾<ðäšØÖî­õ ¥…·l;W{œœq_ex/Io|9Ó¯tû溆òÝc’MŸ¼Y:rµÈôÖÆ’Ò .üuø»¤i=š=+LyµfÔYÞÖá|ÈâØ®1ô®gLѯ¼[ã;_]ëðéVk"Eö}+î£gï¸>µÕþÐÿµø–÷ÅZ©}¨k1?g6áQw-À\VÁ{½Zñ¯ˆµÛ[8íc“ÉÔ,à”?šÇ£pOÒ—˜#Ü?hïˆÞ*Ñþiþ±•õ¶šáYdŒd¦@SìÓµy¯‡¾#xKh´as4Á¯®—sÆaÇ÷ˆÀÇ嚇ã=æ¶R1¥ë—]XÈ%³·û@GXrNÑÙ¹ìx¯3×?h­_Ä^מ!˜­º´~p±ýò·8YüØÇ¶ O³æ4of{%·ÇícF³ûf†òy?h1´¯mù[8Èã¾8ëš÷x·Ãþ5Òá¾ÕbÓÒémy•²~p2§'§<šüü?î[? j>)†ÎÄ’ð^Å÷`“Žqœß^+ÐþüEŸÁš´6×þ!Òõ+9Ø#KÄÛ#ŒzqÖ±9£¢8ˆÊ'מ2øoeãÿ‡º]Ūͯ^M,òyØò£ÚØ9Æpxݨ5ËZü;ñ‘£.µ{¡¨Žòf··O2H»v«Û98Éþ\~=]x6þ :I'[;Œµ¥û\fŒ“„Áß¿5êÓxÿÇÑxvO鎗6ûìµ+Ö gqŽC`30)=TS>nõ‰G©ŸjƒI–[1gç_y3ZÃo·›9ç x#ðÅ{§Á‡z†­-|I«êCP[ð ¬nŽáÙáÛÁ8à`òk?á«ë)‚ÇÇ>´ðn±¨}Î’úƉ®$?ÃŒãp©ÿ 6_…Sk·¾-¨jöÇkë´¶ ýʧI çæöÅvÓ£M-NzµªT=sÁ¾ÖtUkëo éò}¢7š–Ýî$_—ï,LØ÷ÛòŠ/>!øÇÄ2iöž<øo¡Úý¹~˧ÚÞͬíÈÍ1ÌyêÅpAl ÕÏxÖÇÇ:F¡ª>‹gáùa±=.܉.7);ž8÷2E7ãµ|Ýñ;á­çŒ5ˉw^† ¯6iìíä’ËyÉÚ¸_Ýî €Ö¦¬£% S‹[£éx¼à‹»û;;»M'LÒmTÁ5‹4rÉ&CÃFÍ÷ÄüÄ1Å|Õû\øwÀ_>'èQøWGÔ´­oô›Ë‰$ÜĈ;z|½ý+§µý¡üO®iWš ðN—g‡u 4½J–h²RM£?3I¸ü§¿UïÚk½oá“^éš ¼Ú¥Ó6¨m³6óBäpû~î2Ø?^+8ìev˜S^ñßÂ_êÚ^£ª]]hªÐ[ipÙ\%Ð…C|ˆ>e!HËœý1_Yx³DÔ|MðcOñ•—Šï—P¼„µÝÄp‰ Q¨(,r1Û×Äÿf€/eâí{áN±¥Ü5ýã,ñ_,>bÚ9žq†^sŒcÞ½³Å0xÏÀÚ·ví%Õ¥ìðY[ÛÂÃj¢å&(C’kHÇve.Å‚±BÐÛ[ÔcÓ~×ËÃ`î÷ÆHÇ==«°øÉâ{/ôÏxjïµ-2k{¸aFG/ÈP®I|Êx鎵ÁühðÉð=ׇô­a^ÂúFŽÞÝfŒª[Z’6!+üMœý+KÅ:6…ãŸÿ¿MuT\hܬIŠEÏ,O# çÖ¥ßaû·¹—¨'Š>&A¶D¸Ñ籉ZîÖ,ë(9<òyÍaëÿÛžžKhVH-d®dÈÙŒ?Úí]‚¼[‡5KÂÚýÚý²ÎÙ¡Œ9\íwÍX]"é--cñ5ÏtÛ[?{ççŸçQ~hØ«%-¸Õü%âGŸIÒ|R-äºUkxÚM´ìãﮇáÄ óBa}oö{{{Æ2-ÁÜÓvÉ'Þ¹ 3á'†´¿ÜXê–÷V÷º©]2è«mÝ»”$tÁ5kÅ^7Ñ&M"ãÃYÛ-ÀGŽ$ûà}Hæ¹õ] c.Ç­_iúï‡Ú+‰aß<'ŸŸ¿Ç{â³mo,ü)áû‹Kh£ó¾Î~~¼zþUoMÒIðá¶¹Fóa['åÈ~5…ñC¶ðÿ…¦Õo¯[i‡ýg™×ŽE]Ëšâ«ðžð×ö„Òto‹Öþ UVSåûÿŸ­~~Ì_4ßxaæÒtü.܆Uý=ù¯Ì bÏÀº†¯ý²²L,w.~óuÉ5ö¯ìñ»ÂÚnƒ5Ä\µšª\ÏFËÃË•ŸGøÊãPº•µ(a1ºÆF~P=~µKÃZŒZÅœ–÷×+4s[œcåÁ±]—Šmô¯éÒý‰¶å3º2Fy„/ás’ÌoÝý+Εã;žÌyNÇŸ|dÑ,4m}çŠú4vUùdÀu{ Úø/}n/#Õc¸Ìp†I<Ÿ˜ ÝN*OÚÁWW[u˜JÊÒ@®Ì½€ë^ðÿZŸÂ7r4óˆãš=»§é^d*}_v´gTé{L=‘õOÅ$‚ëÁºÕ­–é¬Û ¥²ÒÁ…ýW'ƒØ ùûÁ÷ÒhºÎ¡gwvÖ°¥Ó^y™3¸ç¶@Çzö¯ø¾+ý:· ,°ÄÞc|»Z>[èAÆ}kÅþ0h'ÂÚ¶©¦[Àßgi¥F‘~b8ÇäkÑÅTÄLóðôùeìÚÿ†;}{ÆW^5Ömï4›Æ†òãGdýÓü¹U*~è?aEà­?â•Jw]iúÕ´z²ù»wÛ¿%ÈôV>™®OàÇ‹ŠøïEÓ¥¾Å$i$Lß0—³ê5µ¥xšóÁWž8ÓFDÉ¥HÖåñ ‚çéµ³\>ÛÚEJGtiºråE_|F_ï/&“u¾¥{)p­…ò²U†{(ByõÎøÏY½³ñÆ¥uyk ’Öêâ(Ò8ñ…FýÜœuù óß­rþ¼”] ‹vÉ.cÛ×$b¶nÞÓTšßXÕ¯D×SEö{Èíù €KvBþUÉí%*iyÊÒWìlø»P 4 :IêmQõÆäÎØ†sÕKcß5[ã.½­â!3®ä»Òá1„o”2ü¥½÷-øÕ+}{HÕ¦N¡ C±¶²šß­¸8ê23ê+#Æq¼:ñËyÖðÆ!·`ß+FŸ(Ç¿·½*“ýßܼPk©îSÍ–Tn1µz(ôÿ=i¡HU;~n£¡õ xy‘2¿yGJ°JۤɱŒw®m ˆY|Í®võn0‹k{„R˜Vç;œÔIË ŽW=h·‚]*‘·=ꢵ :ŸAx–ñ ²k˜YV >ös·ß¼kâ¾®÷v%Á+³'wÝÃù×Wâ/²Z=¹FòÊÿÓ¨¯ ñ†©,ÑIòáYºóÍyøZw|ÇÛf¿wÈ ñ¦°të©%.[¹nŸJò¯ê-}û¨.þêîÉè+°øÁy5­Ór§çãyMþ§æ+~ó±œWÑQøUÏ•?y¦sú†«4SHfÏÊ¿/=kš×µEŽ×ç‰~ïÊK~µgÄú²$ìÅ\Ž¿•rÆ£6¦hʯfÆ+©{Æ?‡=®êÂK†ÎY»åk˜ÔãFŸxƒô­Íz)mÇžÈ2G Ï"¹iïVII%¿ î§m>³÷µ*êh™‚rµ†Ð5ÝÊZÂæl[²þïtšµð¯Ãïâ?ZÙÆ›†ìüç=ý«²2ötÛgŸZ<ÒQGkàÏÙ{Rñ.‘öµ·f,™ùV¼ÿâOÂ{À‹Cui'“» Ûkõ/öeø=£ÿÂ)^YmÝCƒŽµÁ~Ö²í•þ—=í¾œç ·æ•ÏÌQÒk~+’êÕ¡µ»h×Éí×Þ¹ùµ‹V[Ù2ümfãÿ¯RiúL×®X9廃òŠÞÓü3l›"bÇwO»íF…)XÅÐõßɨy~iÃr¼ž+胾9{ /ʽ¿&E+׿+É´Ÿ }¦f¼uXÔsÓû}{þÐE©éº5¾ù|Í¿)VÆ+ ŸΊRê{þã]Zõ¡³½i7zp>•ë_ ¼qimiö{Û€²/[8#Ö¾?ðÄ}åuºÚßÝVÀ ^µexÕ­&Ý!¢ÿôö¬åÍ-Žê5:ŸS\øÂ1d·wjËÕU»~+oÁþ;Ô,™a†mÇz³ ǯÿ«ò.‹ñ»R‚ýRa$jì£Ï÷¯zøj·:ïÙõ6õ—+ó*õé\²÷e¡ÙJ¤jUøÆ:uåÔ3Jÿ0åB±Sœu®ƒâ¥ÜZ–‚·6²s³)ù±Ç^sšð?6¿¡ë0Ü4ÌÃ<åúû×eâŠÑŦ¶–šg_–Áaíñ­(V÷‰­Fû"ÿÂohšN¬xv{ˆÐÞ|–`²²€zg¨ã¥|mû[½ö¥ã«Í°]X¥«,Ë%ªî-€3»’¤ôíï^Ù¨è÷xÊÇÅFêHä½¢Š2»¼¶ëž:1ø×›üeð–“àx$»ñ~¡¨^Zê‘u/ú¥ »r}»šö#)8ž ãË&y5œ^<øû4K⯠·“}âŇæ½ò­måq¸Éó6 g8ÀWÆÞ6Ó4oi·7¾+ðº[]Ö#·Ò5 ‰K,Ó³6é Ý8ÎqÜ ×Ù^?ñÖ|­œsM¥ÚMM8A»– 8l¹²kå_žñŠþ.Gá ééªZYëª#³Ðã ›€¥—s0 ÇÎqZ(ÇK™¾n]ë^+ð½àoXøOྂ±ÞxR+ÛÑ4pÇ©4k†Š+ÄjrI^¸Æ{×±~Âþñ¿5ë?⎶&µ†ò1y¨\\2]ÞÇ[".GŸ—§¹'á:Ò-ÿÆOðιâM\i³Muuub«ö$;#Ã9û¤î8@rkô;öø~$xM§Ñ¾ Cwqå¼­q¨é 2;·DxØʃAö·µ2½Ï®?gƒÚ>•f|W¨øbÆ ÿļ=¾ù ûžc|Ì£·jõmjk ?Iº¿½Ú#‚&‘äÝŒ`g­sz Ö¿á?ZÛ^ø?í^Zˆ7iwYÝÛeÚyÇbkÃ?à¤ßµÖ“û?~Î×Twúž©Š k…+"du>¿PM>hÆ%Æ©Q#òƒþ íñî‰ÿõKÓ­Ks‹<0³MÐŒWæ¶½ã+ h晥O1˜«õë^¥ûWüxšúïPƒU‘äk™O;oMÇë_(xÃ^»º²7vFI]•‹m^¬i©Dê¯.e ßü@Ö^æFûVÅVÌl¼1ük!°EÑ´Åo³¢#£cæô©´¶3Ò´y'Ú¯d;yúûWYàψºœr\yþZ²áY»W…è¾-†Ö èž`o½»¨5£ÿ £=›]™ÊDI?•ið™.i;ž÷ÿ \Ù5ÅÚ¥ÆïÞ>~ÿ¥T¶ø‡ªÛÝùí~Ây0o0¾ÞÕà—¾*Ö®4Žì(Vê à•Ù|<³ÕuÝ^ßO›Pó·ù2rå.ÝO«>ønm_Ķºü—*Ë»¾h$œú×Övº7†õ>ÒÂÐIjÏ ’HþÝþ±€êÔWͳïû¿ Ø5¬z’ÍrØû4Ì§Ëæ¾€ðáÍRƒSñ^¥oy,ggÙ7~ò6ì‘É5Î6x§í“áïÂQ …ž–ÍcÍy$$“uã¡÷¯Óü߆ï©M>š¡ `,ᙤ¹ÈûÜô¯ÑO‹`ø—à¶Òÿ²ZÞ›3O3í`ðŒsõæ¾W×¾kÚ‡†o4Í3Ãö“5¾ Ë#N†1c€Ùq–/ÕÆ¤.þË$¾dWËæBr§®F=+—¹±Ñ>xœ6¯ÙmmTÉûæÍu íû¼®3üDÕEØ-±ÕÇû/êñøVMFì\_¶©7ú=ÇØb–8¸áyÎÐtªþý›¼Mð×oˆÌ'®PLäsë^Ïû>üWøsxßmµ; ;Ë©Í&óAŠKpγ°ƒŒ‚}«šðÿÂ-X°K–;ívé­Ùä¼Óu¤ŽÅãì ÎÇE ¾æ±ôÐxjöûJÖ<=5ÁÕ6O¤ØÃ4_hoœm1Wæœcµ/‡aêϦ¯¾#\EácPð-—öV•á|Gsqô ÏŒyÑòN:æ²t¿‰Ÿ¾+xE~ÞÍco§Ciö‹^X­ÍÔ[þfòìLqœ ñœä׉¯Àˆ¶>Ö¡øáï?˜ì´ubг>Gšœ¼ pr3ÁúÕYþ1üHðń֟|¬\hòiPÛø¢kËYcŽÞã~w c¸|¡z dsW);ØQs¸ðfµà‹Þjþ1ø·$Ú-nš9àŽéGF•€±^ù¡x£âNrßWƾ¼X·dK[!¶’}½£W<Žyé_>øSÁ_ >#ëpYØxŠ)šò5A©I|°Âó•Ë[¢É_Øp1^ÀšŽlü=¢èö?4ýjÇEÔ™muË U%€õÚÜ|Ã8úV6Þæ¼ÇW­x7MÔ-të—vö·X½Ô¡xÌ2Ïîþ@ÁHNXté\ìöšÞ¨ÒA¦Üií{ \KwöÇ0±_ö2 $Žx5ÖÙø›Ã´)4ïxz塱SÖŽ¶8‘ö¾ò"<€Ÿ¨#5ÇëwfÿÆ–úž»rÚm»ï¶Ó!ŽûÌYc8 ýÜÀÁŒE37-Mïi~<×üLþ!Ò5]>K‹_ y.tbyÜçæ”ž¤áëês]e·‰ìËA¸Õ&†ñt•o#ºrÌK/™!›`SƒÔGJËø[¡Þx7Ä-—û2kÍ.i’ßNhX,*Ûˆ;s‡ÜsŸ~kðf§âX/® ~ºµÒÞk¥·†w8”‚ÛU¸ÝXõ|Ö‰?×xÏZÔ~/üJ“]MF ¦±ºWòC!6çˆ8eÅh|HÒÛOÕ4½OÃw¬3îKû…>I2)SÐ}ïáöëÖ¹Ù¼+âX<º¾‹®­pÂòêç|ySŒ6:ò{gÖ^§âíW[Ó.ê,’é÷ÐÀ[rT=K‰ý üU‡ÆÚ?ˆu;ˆ®.”ß3e”à‰3ØàW{&§áß|@¿:¿îm-ÉK7†b#9;q֣߯½ð¯‡¯üö$·ž ²[¯?%•¶áHþAJãü/¬]ø2Hõ‹­íWµÔ—«’ª |¬@ç§5 r½M:þ¡âûK/ío ZèW §Ã4§MX¥!¼Ò7nuëÍak(ó‡†ç†æö{]Ê÷Ñ\®gWéóŒrhÜèß¼k´¿µ¥—ÚV‹3! ²m'ì­n[øO@žñ“BÕî&ºÓæ 2ÞE‰£Éé¥+šF(¿ãÿjöko¯è–è±É,ûF7à}x7íñÎÿRøg-½”&ßÈbn7t<õ¯føéâ(´¿ Éy g1Æ¢O'îîÆ3ì+ãßÚcŧZðöáÖËjõoñ­)Ö´¥¡áþ ø£yñ3Ä_Ù÷áŽm²2ž£5öÇÀ/ ØxzÞoKÕ¶¶Õ;Wq¯Ì¿‡šÞ£áMBiKýŸs0euÆã_D|ýªum6 4K»æXU³’VÖL­k³ÿ³wÄ-+Tц‰¯Ý†»x¾U=qéX>#Ö4m7Ç·n ÿ(•¶nãåí^û xÞãÇ—+♵_;ÈU9‡µk|ñÔšWÄeÕ.|à’?ÌYNÑŠâÄÁrÜô°õžÌ÷OyÖˆÐ[Ü+[ˆÆÏQ^ãËiLjSN´—trU%zW­|#ñÖ•ã®o4-#€«†>ŸþºÃø£ð·R²¹’íáxÜ7˜žõâch½${XzœÊÄZ_Žï´7Ð-gÝ"I}$wêÇb„U>ØQšé~>]Ãeã{]_Jýö—«Ú¬—öìƒÀ)ol`ï^wäÅ«êÖ¶îÆÞâk}֬ܯï‚Oc[Ÿ¦ºµðÞ…©†Û¦›Y|²y 9ö¬ý¤ _ºdòþò,£iðþ÷I¹ºÕ¼!æjê¤Û€Û¤‚SÀ üóUü_®,:…Ì·r+Mz’[]yOŠBœŸ_›5Ÿµ¿ ÛÚÇfÍl× ç]$ üÈ8Uob9¬Û÷ÒonfÙæ[ý¡·²í ¡¹:·SÍ~)kïu{,QÜü¡³ƒõ¯3Ôõ9ƒe §šé¼Ox—ü±f9,Þ¾ÕÅë$ Ø dcµïB*1I¥Í+œß‰/wç¸òY}+ 1hÕ[åöQÛÞ¬ë@»´‚f§­fo•å—§8êy­ºÒær¹•ãQK¿îŒ)­pýì’»½»Wg¯]Ex­àyÃ*ã=+”šÜ K*÷€è}+»+Dóqô´2ï;_JöoØ¿Àrë^-[ö¶óɵ[×Ú¼zæ$uŒ)Ë6wzûkö ø`-ï%µb[}êqÕ•<>L©Su+#í_„úÑ|/olÑûµàu?ÄŸÛkZ$‘ÝA¹¶0RÝ0+ ÓmMº[Æ6ùh>R¥‘C24.͵‡Ý÷öö¯r|çÓÆ+Ù¤~iþØ?-Úiîí¬W;Ž6¯Cë_$ëÕ4÷Ü-˜®qÒ¿Zh¯…öú••ÅÏÙ÷ãvÐ=y¯ŽVÒü%ªßݬ+lËž§i¯¢þü#’U’H?ˆZè¼3ð“NK’ZeY¾]ª;ZõŸh–š‚£;N>^ z•1—‘ãÆ‹Ž¦D¾M:V8×o$Œâ«¿™öH8Æ7yö®Ò{x.Êòwo™™y©-<oßo–V6Ú½qó¹KSnT–‡7¥ê78WÜÌÊ£z-uyn.Ü?Ëž>˜ÅlÙ|(¶‰Yî Ú?‡ŽŸ…jiÞM2EÌ6ß—Ž~•O¹rîa$1+·w võ©Öf²`° ¾FЬ®™}10ÆØLÿãð­B‚T¼bIˆØçŠ—¨¬YÒ­5+»u¸¹}«÷vöÝëõª:ö“zÓ²DbxbÀsêk¨Òíȗ͹]«ÕG\ÿ’*âZÙ_‚Û'»•éùv¬åÊl£¡çv: õ½Ï˜ˆÛ[(ÎEz·€àÔæ³[YdcòðßÄ º-¼a–Ùw*ãî§åV´NnÙíåû¬ ^ªyuÑšS‘±{á™üèî’f?áÛÐWÐ_³ÏŒtí6Ê;W»%”€Ë¶¾o¸Ú^í¶È¼îþUØ|.Ó5 §_²ÜHlnemü+–¦šž–^ö‡ÙÐkÚ_ˆcV°»XÊq%À<ý¬FM6+åKò•¤“ï?©ÍyÜZÞ…¦ù¶·*¬xù—‡éÒ½CÄS<Þ:J/ÊÓ}ÎGaÕè+Íõ? §Š´6ѼYª\^I½Š«M²%cÛ Ò½ì;¼5>oTbxǸ®äqËá±è¿³_Á¨§ðö¦N¼¼¸¼ÓBhº\s,ìA#ýÖT\àg®xÅ~…Á;¼/‡ü'g£Ã§É$ROªk 7˜Þb…Bs´,pNOZø»áïÃ{?!ñ‰5VŽ×ìå8.ŒlÇfq‚3ØçÔ×Mð—WЭ5í[O°¿Ö,,,å··³µmFXØ}¡²¯´6ÖàñÖ·½‘”Z?U<7âËmqÚv¼ŠEivÚ(È=H±_¿ð_OÚ‚óÅ$ð6«,Ö:-¯“"º²gæükïŸk2xà‰¾2ë6–±Øèú=ÄË$È<ͨ‡øÓn úWó5ûUÿÁEuŽõýCO°–u¹Ô¦t~OÊ\㯵E¥SNÇLyiÇ™nÎ_ãÏ‹­õ†·’ãçhðþfMxdÞ<Õ4—¸´‚PË"”]Ã¥[ñgõmNášöVÇË»9®WT‘%u”Å—æù{×d)Ç–ìå•JšÜ'–[§óe9f犅\·Êª~µÈèië)5¡ˆö‚“̲XLv'’i„»˜m  özŠAÊŠ™ïÒá[Ébýê£".ìŠm›°?*½m¨ÜBÿ»“nßJ¼«uiwP2;·ð¯¨¾ZYß5¼d˜î•sÏj™'T®ì}%ã sÃ3识æºÓlåi´Œ|Ù•êÐômgJþч@‰uk_ô¨mmü¨¶úg¶9=ëXÇMEÜù_öšø1á ü=‡ÆY6­=š´WÖ+¨}—É=2ç°Èn™òÏÄÿ„:σ.m|Ig¬Úß5Ü+qcgyoçÅ´òË0p1×½~ª|Boɢ鷶׫›s!Šêb!#6A$ò |uûoü¹ðf‡qª|1·Ô,ídº­´ˆ9å]Ib6Ÿ “§¡<Ïf|¨hº¦‡gŸƒ.Œ:…ОçRÒm¾U·ÚK6ÔÎÖV=;Š'øÓàKéþƒá}ÅäsjHñEÂî™Øû¶Gä~#9­Oj´¯†îìWÄe±ÐÚE_;FUŽåXŒn%vîK ózŠóOŠß> øOÄÛZøCKkHîÖ[Cy7ü’>Õ»•èwþ2ø…ñÆ—–ñë¶ñIEþŶ‡0­Ì@ଛ2GWià¯ÚøiiiàCàøílíAžçP’ÝËÚF«œ+™=²Ep>¶ø‘ã+)>!x…ìn•æÏö|q‹y.#dù•v€Ï õÔÞü)ÔáOêƒx‘´)ÖYVÞᥟyPX®þw!Pô©©èÚ—íááψÞ&µŽÊêëí©i/Ï“~Ê’HÕf^rsÇJí|)ñSÆ_> 7‚¬¼.uK½Fe §ï&–ü¸Úzv"¾ø_ãíB×ׯÇÅ’jš’İYépدÙîÂpI'žÀŸZú‡öko|oÔ>Ùy©ßZǦéwK ×2JŒª›IcŽ)Ë}JŠv=2_ ø;Wø8·~/n­¯šOøGõ+5Žq!a¹œa¸aÇ_Ê»o…õ¿êÞðž±gc¤¦þK{ƒç/™´\oÀçËøÃÞ"¹øw/ˆüUqcuš©·ºÔ¾Î©›yüù^z ×ðÚæOˆßu$´ˆà˜,?ÙÝ$}ìã!ºýj¹E¾§°GñÆ^'Ön¼U{2ÚÇ$lV%·m‘¶ä ` ã$æª:hqxúÇ\ñþ³$-cuç[IJív”âÉ=O½«À Gö…õ«³5ͽÄâF,©"gËluWÀnzã×â àËßBö3\„uˆzW‰ µñ m…][Z׉vc•È<dŠÒøu£kì­´ÿÜÇ.ŸkØI’)ǘÙ]Ê{Çy?øLá5ø§o-œÓ­œpÈö÷JßëUPEØ€ÓÏ¡õ¨”»š(«h{‚~,®¡oy¢Ý³&›)O3Í]Áœ€®‡8ùÖäÔ´?\ÙÿbfÛ]êIiäCóaµ‰÷Òþ?Ã+=*- Äšfµå%ÄW6âÊh!d“Ë-òoÁ8'޵džu|C{/,Y¦‚Q'™˜` ‹ž„ «óXKC)>!jÚW‹nü9-öËHìÁšHØ™FGÉq[©hW>%¼Õì54ŒêZZCn’ÇÆqœûäι=j(î~"fŠ#[·šXÒBœcÐzV¤·vÚƒèÚÆ¡gÙì.–3ÂÎÞ‡¶1ŠÉ¾…®ç7ᯠjÞÔ¯R-BÞI.Ûí θ‹÷xõí[ú®µs°Ú¶Ÿ¢,3_â)¤+Ãí«GÅz=Í—‹æðü£í7/öt‘|ª¹`@'²àGµjêv©$7ÞÖt52Yɘd‹øŽ9 ô¨åÒÆ·¾¨ù¿ö¡ø§wáÿ_i7N¾máÀEê=«çïøsAñ/ƒ¤Ôµ=}wFŤ„È>bk ý¬üa}¨xëPÒc_2+vر¾ñô¯–`›ÇðxÒ]MûTv7sû¦¶ŽÆ‡mñGà.‹â[Y/ôKµW ]¶°ÿõW—¥Ùx2ãJ¶—mÕ»m.^{W¤é*úmäzd×J¦hpÞwU>µ…ãß…§ÃºÚÜW-2Ë>éWßœzÓì“æ}SÿÁñæ¯á»«]âöCÛ×7?Jûgã…|)â F²mù$)ükàØ)tmwCmN;öŽêÒAå«gv¯½u_è~#ðªL²\F»d­cRPgU–™Àü ð]ÿÃÏj,Ò5¬Såw1ùGµ}3¯ëzoŒ|*·ë¹S+»’}«Ãl´Ï8Ç‘rd‘¾ô;_\fºÿjm§jQè—¶ý¤ãyÿõW›:|ÑågµN|²L㵫I•gÓòk;­öry\ò¿§ëS½ý·Štð/RC¸åKÿ¨dFÜëõ¶¾"øv6´ºº³·ûÈFÜŸ0Ÿ—úŸÂ¹Xu¶ÐuM%f uŽf‘9uú^/,¡¤ŽïviXçu©g½¾¸½’PË+Œ¿t¨ÅÚˆÛ¹ÜqÀ®–çT-€ß»û¼ô®[ÄW°>dVùHÜ[±þµ×nmNirØã¯/@˜ää9]µ…©ß´i²ÚÍÎ}MO¬‰#}èNâ§o=Ed\: ŒõRÆ»"¶gi¸ìT’V™Û¹Ý޵—{ºÞO)‡¹ÛZ¡Å®du9Û†Çpk+Q¹Kö­ã&pÉu,xB›Ä^2²²_3æ^½ÿJý>ý<¡A4–ämŒ’Uzcðoì‡à§×üf—ÿgvÛ Ç¿5ú‡ð‹@:'†cy‘¼1Šó3JÜÏ—±Õ§Í+:‰·2º©ÝÛdê)‹r˜a f\gîž´—‚üÍïÆy¨]¦nûTíç¿LׇªÔõ¹­¡™âÁ®ÀÖÆ?0ùyØË·¿ë_9|`øGtn^â m­¿!¶üµõ"8yÃ+÷Â÷ü«'Å~³Ö¬ä‘¶îOËÈ®šrå–ŒäÄQUU‰…¥Æ‹vÐ]ŵ—ø°p?Ïõ«¶—³–Ë6Õ=o½z—Åoƒ“[šn_8f^TúW›Ùh×:mÞÛ¨Û9ÃÿëשF²–ç^ƒ‰­£ÅÛ,·zmçúפxVÒÚ%$[›n78ÏørÖÜÚ©xÔÿ²q]v™dö誋÷³ëÇã[óv8eq,,Ò˜(íµ²sX·¯f×!‹nÞTv>ø«jóL[ر\/ËZ:.-ðâ¸6ÜÖœäò™‘-Ä…"…G«|Ü ÜÒ"˜©}ªv¼¼f´eðeÁ‡&=¬ÃåÙÔb­iÚ Ö­öyc,Û¾òöükO´$Cm¥]^ŒœüÀ=«®Ñ<3YïÚxùME¢è(Óˆâ>†Lžz¿…|9żqÃýÐOV/ÝØé§fyœþ- &~Ý;úU+áUýÎÉ£µhörW×ükÚí¾¬·±´ªvŽ|¹=ë·ð·Â¨.p«8ä·Fæ¢R‰´h{Ú#æ{Ÿ…—Pì‘  +|ªG&½àõ„>»Y¯…“%Y²Jý+×õÿ„VI Žcù‚}åí^QâM]2âGµ—b£ö™®*•"ÏFS‘ï6ö>ñV¯3¬qùdá¸ÝÇZómkE±°Õ• *͈¡øùûƲ½éN<º£Þü9©è2Û\\íòaÛmƼãÄz„ºMÌߨë3>Yä“nàqƨüñMÆ­q:¥îØšUýÈ<··ùô5Ýx“C{{á{jñÅ dzæ½lšÐñ³ó.txÌÍåÜÞ0¸ºe¹‡6éh#Ä›±Äõç'å®?áÕ˜Òü[޵] 4y5EkI&Þ÷™s´wéϺ‰WÚ†uɵ=GQXmd›23¾Øè=xÆ+ðÜÞ&ø‡ l4æµÒÚáJÜ]HU™Aê™Åz‘–§•=Ž£ã¯Žµßx¢øD´Ý2ݾРv¿kÞ^Ü»t$z ç¯Jû}_Âþ"¸¹ãÃ2}©R¸ó$žD` ¬x=3ÇZ±àoƒŸ ïüYcâ¿xêêàÇ# hã”ÇØ1—œzyæ½ËSøUàOC³ñ¿‡|)`Úl>dV;¡&K‰rÏÉîöã°­†V8ÿþÔqüOý…¾,|'Ð/oîõI<-uöv…Lp&#$㎞•üÿüøâJÖãÄWV;T–]zàÿ~÷| ¿øK¤iš•ÿ‰,lí“\YI *I•W€Ä“_œþ<øQ­| ø½â߃ºÆˆ°ÛÙêrI§Íÿ=!rYØŠiË硆ŒekŸøãáÏÙbe½Óß#¨+ŒŸ­y?ˆ|=u¤\3-»ã¶¾ÜøðæYà{¹¬Õ•"¼Æ_ ö"ÆøþeÛÐUÒ¨×RñTãScæöŒžE0©^k«øðÏYð,ÿkh Z9ùdQ÷}rÎÎOZô£.hÝL¢âìÀ“Ž4ÝçwÌ´¯Šu¬s2ÃòÇY"¡g-!`Òk~ÓÁeà ¨¸\·ÏX×ñ-­Ó¡ pØâ@!Tµb£sµ¥ÅWÞÝTu§[Ã4¯û sG5·YKc²ð CûEC§™ÈïÒ¾¬ýž ë6Ò·îÙXmqÖ¾;ѵ½SÂó¬óÛ·–‹öWì¨?ÄŸ[ÙÄÑì‹æ‘¶ò}gQ¦®ƒ–P~ñö×Ç6>$1Áâ!¯ žl6øùe_N+éÿ‚Kk:φ¼Cáë>foÝHX”g¸<òy'‚ü¥Eâ›6Õ|;寓·íVìC/Ï+éïxcL Øøgâw×–³#¦—p‡nyÁäb°Äi5§„:Ôn´(õ=&Ñ£ŽgŽÊâEó®Fw ÇãõÅxí.-¿±µ KĶ'PÒ[ʶÒc‘šâh÷rˆ7a™ÜTÿhç×´½-´õº˜Åwyk*À’¥ry§½`øŸÂ’x[Öüqwâ /hw {c:F[bÀaq׸£Ú\9m­Ï‘ÿh…?­¼!>§}iª^é7‘DÖ÷V¶qá#ÝÄsD9ŽQ‚ ã•òv³o¦Z]^éMô–¾q+wq.Ð_-Ð÷ ëÇ'ž•ú™¨k?⃎JÎ^L¨ü8Óü-¤|7“Ųx¶ÞKdV–yÞK»9ñ÷P!ásÆ0F8<×£~Ï^;¼ñî•dšn+Iyq5•Õ͹ݾ2ŒB{WÑ¿²W‚oâ¸ðÕ´ž$k¯®™9¡Fˆ.Ðv¿Lu*È ¥q¾ñ…ŒÚ¶µšDÚÍ­¤í#=¿Ï•dd‰ê§ºýkÐüWe¥xgÁ+ñ+MuY<:Öí£Ã´Ç#E!è}Oÿ)}«…åËcºý¤ì¯þxQð‡´ÿ-—NŨ¶ó­ä>qòôàŒcWŸ|øG¤ü?Ö`ø¹¢Ý$zn·km.æÈ°±H*A9ÇÚºïx÷Ä_,.o¸¹†Ä,Â80 اsqÀ,N3Qˆ®YX›ÀšõÍíæ·¬ëqÜ-•Òñö¸†2§“Æ8®ÓÄÓiºŒlõ›-Nk(åÝnÑ–- ›;‡¿Q޽+Ó-›FŽÀYA WÒ|«¢0ˆöäþ•ÔM£j°Y5ö|e‰¿pÍ"—wRc' ù‰?OZ¯²Vænµk MªéíáéähYOÚ÷) Û{ŸL}ï «_µ k¾ ðçî-ôÖ†oµFßë$ÛÉ㎢¹mJÂH,î¤Õ.¼–½™ãh|ìa[°=²8â©xí~Ï­i·WZᣎÖø›äÆHïÏ?•g))&ŠŒdtÖߥ´×4ñªÃæíUcx[¹} ó¯M“Åeƒµïkšœ?lŽ-ðÈîñÐ×÷×qhv,Ñ/ÙÑ!yG;ˆéÏ^‡ñ®/ö‘øíeàO…ÓxRMMZâëýhsÊã‚OÖ³„¤äT¹RÐùã‹ôMâWˆYrÜï§Z[jøÇÃKmà©®ô×’k,za$#ŸÇ>µà‘éÓiÚÒ3º´¶§!úýå¯lø_ãû/iK¦é§Ì]žVß½†þñ>ãùW˜|^Ò5 x¦I…«ýžDt›å9‡óÅy9…7̦‘ëájsFÇod¿6W Ïz{FÇæö¸ÀíPÀ“`ÿ¥ÆvãwûGÐU¥t*L¾îßÊò<Ï@®I”¬I#ŽK/J†U ë)›ªáp¸®´L«µSæUË6ìþ"¢hØ+bFíŸ0uãÖð@F•º¶¦`çz–;²¼ã5`ǹ7*û±Ï¥$±+²©ˆ®ñ€"h]ãmªx|ì_¼>”±ؤÇ÷s–ÇZ™×Êe‰¤]Û27p~”Р¯–ñüË@•wÞ ÚÇŸ—±íM–Y¿~ÿwÌCÒ¤òÕeR±:ñ½€)ÈV2D¥¿à<Ñ *ø»[•ãháŸå#^[â]:[«³$ vƒóµÇZî5 ågh7cv~ñ¬{ÛwÑ(_›Â»¡û³Ò”ePóÛÛ #ƒr‘¸ÎZäïíL„¡fÞ¿Ãé^£­i^]£HŠª2GÞã5Á_[,&Ýß{+¹OZÚX¶sÕ§ÊqÚŽŠdfÃ.JžOzæ.4é #&FãÈ®þò•Ëc•=ÎkVÒAòÈøU®Êsº8êS¾§#ªùs±ÂnÂg·µs·Q²È}†ÝµÑ_Z}£slnþ÷Z§ámkÅvöP§Þ˜gŽ+ªœ¹bÙçÔ^ñõçìðݾËܶഛKmüÿûãO´K-)-UPÑÐã5࿱O€#Ñü9ovö›YcVÜ«øWÐÒ¨D‘ŠýÕûÃ9ïÞ¾w9T¨ÏG ZfiˆngÈcü;¿‡ŠŠmÒÍÖê§T÷÷*¨ÝÝiZH¾O§-ÓŽ•ͧ˜X÷*í¸ô«VìÁšO,mè Ehaió7ýóž•-±Ûæ(ºnííNÒZŽ,¡â?Ùë–ÏЮæmÌvŒô¯ø•ð˜iS4ðG»æ<÷ú׿Ù|ãmßxnÉ·5ŸâÙjðHÏ8`p½ãZS”£©Éˆ£‘Ñ-ifçN¹û*+pü´ƒ¥uÚ.©!_*EN¬Äàc¡ñ á当³ÀŒ 9ÚXç´¹ÞHíåo›ßjôèËš;Ÿ?Zœ w:$>zùp2öî;×I§I ¸Sk˳û¼Ÿzãt‹è *J8ï—Û“]‡‡Œo€ ùTùºWB0Õ&d&‰J3ýß»èj5Ó."ºmÜéþ5µ Ån‘’ò³*¯ëWE›ÜJ¤·nv¨­u°(ûÅ_ÛëÈ7gå>µê> º‚Þ8â1•“oÊ»²G¿µqÚ/…Ú[•™‹`|¬¼ ý+®Ó줵ÃÄß2®Ðqú×<¥©ÛN<§¦øQReŠéDcŒ5zïllãµ@±|ûNݣߊò†0Íu0s‘º.NrµîˆAf±ýÖo¼¸®Z’èzxér}oÂvš…®ÿ&E“iËnàþäž;øM Â8û¶\¶åB1_ChVPßÀ£ø—»©þ0ðŬšc˜ Fm¹%qŸ¥qɳ®1æ>6¿ðíž‹oöK»fVÝ”bOóÍp>-µ¤0@Ãýa}óÁö¯¡>,øhYA»æÚ1Ôà|?à'½Ô¼ëû©æc üG=«JrÒÆu¢~êÒ”¿œH­#+!ç€;~µëž4ÑnfÑšÂÚÜÉ:¦onµ©àû£[Gkam‰6çÌÙòÆ¿ãZ’ÌβãmR7läžõQ­ìd˜ýŒjSqgÆ< ßÜkzÜòÝ\Fÿ'ÊÆG÷GåÏZÀðç‹4íJtðô?¹šFònB’øíŒWдûôÓ·a¡_ãËûÙæ¾hº‡J°ñÄwñ‰<²^CÆæÈ¯ £YTŠ‘óXŠ2¥7kâkº‰dðö•-ºYÚÈ­NC4€ßþ°+Ó´ËmkÄqHž%ñÊÛYÚy?cÓ®ŠªCó1Då]ËÁbI;°:f¼‹Ä:ý¡Ñ vtÙp" ³GÓöÍuºN·¯^x&†x⺚à@Ñ«mU…@Ë18(üÍm®c›–\×G|jø± xÄ‘%Æ”°ì¸Ý¥¨ -ÂÄõ=ëÁ¿o¿ÂWà]ö°ðMê^Gkn,uk{i71 ÷]óÜô5ê¿´…4K­;R¾1Íq#Ãæ—‰•ZA¼c§¯øâ\Öæýœõ_ \K£kZkÁx«n8ärHrç¦8÷¬âýãhÉÇSçÍö—ÿ…£mX43"Ÿº?Æ»_ èZ>±"\•€,W‚Mp^8ýœ¼_û.|`½ðçˆ4“O Ö7†2xI௯Þ|ñG‡o/ü7¼ø_ã[Ÿ\üÑ«†AüKšýøáñ'ž-e ô"á­XFñÉÐz}káOÚÆÅ×vñÜ®f…˜,Ì>úæº(Ôj¥Ž|M+Óçg˜gst®“FðF­{gý¡§ÂOËÊzW4#v%×€µ£¦x³_Ñâh4ýFHãa†Uô®é_¡æ†³>§guö9%}ßņ¨cÓ.$U2Ÿ™¾è«ZDm¨^o™™™Û–#9®ëAø~nöHɹGû8ÅsN£Ž‡U:”nqV~»¹8X‰ì1]Ÿ‚>O©L¦á 矖» o éö¨òí_› é[~×ô½"÷Éi1l®åÆ+šugkTãȇÅÿ4;Ü%ýÂ$žQòÙ±‘Ž•ô/üÛáÔÚ\—šþ¦U#’`!‘ÁÁ¯œ~+êÖ^;Õlô­T™”È»íÔàû›ö(vø]à{&–rª«6ÂÁÔS§ÍêF"1œ¿þEáMJö;$×àK‰!)öY”|ËéÏ­zOƒ´ø ù6ÚqùÍ嵯ߙr=ExΓ«ø^úÂ-jÃÃñÝ46ÛøPU²3ÁÎwW+ãÏÚwÂ>md×/,X[—š;%¢§ÿÔjöÜæ¨¥²=;Æú¬ºR¶—â EB5Ã$y¡ʸ>€žý«Æ~'øÛÃÎ.4?ë–w±ù;Ú†‘@ÏŒ¯JóþÕzÄ>âæÖô?‘ï.åó8 Ðñ\ ·ÕµÍUeº¹Y¯­PÍu‘óòBz·šÆU5О[FïC¼¹ø™á}U,tß XGj¶pãŽLLXñ׌äs^=íMâx¿XÓ/4䚊³x~öa°¶2줹äqŠÐÕ>ë:~¯kâýâët‹»R†’ÝNí‡ï¨Ç${r+bëá‹âÿ½½¾Œ±jhñ Û‰G™¸í,qœ rz¨ÉØ›.¦ˆ|Mqã éþ$³ðïÙmõâÒ%Œ7F=’GУ¯<ÈÎìƹfƒ[’Õ­›R°×´9<ä¹µ™'ó¹UÐ`0#åéÏq]ä¿´­iµÿ„úÆ Ö?aµ1èwÎËå\ sÔ ¬ ä`‚Zóo„^ñ焼Q}á][T˜ÝÜÙ¼r[Ë"ù‰"7îÛ<ƒÈÏ_çC–¦_Šþ ø7WÐmõ¨tùV*Ñ· k$Å‹‡•PÙ!zÒ›¬xÁ7ÿï¼Si¨éú¥ŠÃå]y…’ßçR˜8ÎAÈÉ=ñÞ©Ã^ñ å­×….~Ýu =â]IµZpNvö#'ŒŽ†¶<¡Å«øQ~®›ö{ëÿ9懀· ÛpÀ#=pj/}Êøv1¿gŠZ/„®­|‹H·+‹©®a/¾óÓ=õÆmwLôÛÆK§’êÚ(#ЬXFÌÛñýÞqÿ¯to†Þ~¢Þñ›q}B3k²£ƒ†BGÝÉÁæ½æçOþÙÒôínÒÒ=6ͤ³’EùPÄv<[ŽqÉNÝM ŽV:ËŸðãK¼³ñÄšuóÍi.žíx«"ªçr`“Â]ðF«y­x~ãNÖ4…¾µ¸mïfѪˆÊ˜#Ü}kÁuÛ­sÇcû/[Ô$Ó&·³a«šùJ‘ßv3é^ͪüPºÑ<§èÖ–·Ú-c7W1¨ ·bŸ3ÔŽ£¥5!J6ØÖñ¿€ìÏÅX<;¦[WP±I´ýJ)‰1*••¡cêc½s©u¢xÛãM¦‚$[]2MQ…µÁ‰¾I »<džA® ßx¯ÅN·v s%¼-%¨PÈÁ ksž€8êA5ÏâOe©ÛZë¥mÝ­ŠÁçIÌ×8ÀtÇ×Óµ;s´‘¡áËñ"Þ]ròêêãLwòdƒPJ”* œ0:VŒ¾;’[ˈ,¡†Î(dò¯HÈóI Y‰ džœTž Ö|Q¤êmâ·‰nŒNyn¡¶Ç¼ðÍÎyôõ¨¡³»’ ­¤ðº}žòñ…Œ1“¸Î„“3·÷AÇâijµF‹]οÁ"/ˆ„oµ)´Û[)&™Y6²sÛÇ8ü«{KŸS»›E°¸ä€¥¼ÞfBÄå†î¥€çØV?ü-­iÚ|Ú¾«¬éðÝ_Y²]Gi] þ§Ö°¼GñxnãO°Š5ß§é‚×ËŽF_˜±;Ç #¿CÛ5N\±»"Ý ñ%•ïˆ&¸ÖQ%òu6{k]Ńª‚œŸN}*²[Oâ-XÖo`uÔ&¼%|Œ,‘Æ #·Œ ÂÓ¼Q©ëúåÄz^†ÓÉ÷EÛŒ4x\¹ížp+®žWÑí`¸Xü»‹äÍòÝ  +žRæfñÑî¹ykàÏ·Œ5 ñ#왼æËqÆÞ}½+àÿÚ_â}ߌ¼Utús}ºÝ¥ck"(ùŽzõÛcöŽñE“]øH~ËoiHŽZEc•Å|áû5]üLÒmõ+}*Ùq\/ÞUŸã iš%õç„üK¢¬:”su%¿*Ü×a⟂^ ¶Ð4ËÏêáŽ×}â±û­¶¶–¨›Xn¥ñu,!ðîì“\E‰›wéŠ×‡Â·:î¯&«§ÛG¾é~l}î«áìò²ËŽ|G|Ò‰&ao?QÛò®Êâ=SGÕKxN&iónvÁíS¶€sÞ0uø}¡Ca{4³HLݳøÖ­¯…í|oà˜dðþ€× »|ÓM€©ÆrMEãßøkǺŒvZ¼E^4Ýrû3å¨åŽ;œTú¿ÄûÛ¶ám,cP–qyƒ{Œ}æ=ÉëG‰áïÇðçÀ#FÒol·*ù·žD 2øà9'¨þøÄzž§qã(Òi[nY¤É'Šñ¯†ú‚øÒìÝnáÕ£›ˆ÷nÈÇÖ½÷BñdÔ-|'&”"‚â<<zΤy£©ÑOÝW>ºý‰~-ÚYélb@.¤`]sÑ¿:ö/_EñWÅ‹asÅ2ü­Ær+óÇNøù§ü ñM½¾Ÿ6弸vý{`WÛµ+¿iúoÄ=Q+$Š"îûË\u åW÷†£Œ®Eñ3àóø>õ¦y•~l¯zठÒÅpwmm¬W¿¥} ñ‚Æøfþ$ýØù£}«Áµ=&h%x‚4mŸâî=ëç1TÕ*Ž)ÕûHܨbVMò8 Ü!þí:c´y@ú|Nkhâ}ªÝ?†NçëDÊÌy!{.}}kŸc`X‘ʳmf=¥Bð–>Y 0¿{w&¬"/–6Ï T¦Ï†ÌpWø»S@B°Ç#°å£ùrÝ1OtYa›íS£Þ¨~3¹Ã4øá%~ó {O΀"ò·ùìM CÔ„ïÈ;¾Ucßš|{TÏ– Çÿ^¦ÖâûõuÔ9*›ùöªúŸ“.Ñ ùW‹ßšŽ}TÝ;N>bË‘JYšÛÍ–&ÁÀÊõ®©{§±JÅ-nÅ.ôÆB§9ûµåúÜŠ.$i†~l ôwX[5°Ûµ±·æ<}kÊüMq'Û$f_½!Ú­ŸÎŠ|ÄbyJ7 ®ó&ÞÊÕÊøƒÍ`w²á~ï½m;m“Ëq¸±û¹5CW²‰‹nUéùW¡ÄóªZJÇ­\Å n÷·®¯ö\ðÁñ'#šX· ¸Ï~•Æø–FŒI+·v1_C~À>ûF¬·ÓCÌ’­ÖºjK—ÙåÍ~òÇèÀ Zé>Jã1¯;q]ŒêUvÝýãõ£ÃV"ÇA¶³h²V>ÿJ–â7Œ*"Œ†Ž6Žàú×ÏKÞ•ÏRšåŸy’±Øúu¨BR]Âóò…ïV™aêá’™ZŒ@É˰mê_ÛÓ\¡èFee€zíã­*Æ1åm¹àÿJ²mÁÅÍ»oãÖ‡‰DùF?{œã‹3#Š!~ñ~aÏJ°ˆ%“ #n8?J¯•ÏÞøZâÅ·™[wÍ×úÔÊ]Mbº"¿Š´«èim´³¾8¯~6|3m]žÇWÓdU0¼<¿Ö¾á𞆣R+*êðk„ý°>ÚM oiV¥¤^]—=þ‡šôrÜUß,;2©Ǚ#âíKð†Ÿg$·ww´Š»¼Ë\„QîZÛÒõ–m?IñE´y(‘§ÙåŒ!êzÖ°ükᙌ÷W7-µýP8Ï=À©­­¡ÿ„n=COy>Ѭ{S%[#’~‚½í󺣌ø×ðÇPþÀ}I¿‚´äM{´–òÔä¢ãÛ­xÏÀo†>Ð>*Øëž"ø…¨3­Ù‘´Ý>Ü‘¾Tç=kéë›<[£Â=¦GûÕµhüÉYLŽ[Iô¯Ñ~Ýü6ñ6—¬ÇáðO˹¼ºŸÉ·ƒ J³3|ÒÔŽƒ¥8ÇÞ ©¾;þÈÞý°>FÚ§ƒÛMX¡Ù7w…š>:ôúWåǯØã—ìÃ㫽^+u;0ÿ¹¸³9ù}H¯Ûï~2µñÿ‚-u95—¼TB­·ú²àuÎyéô¯+ý¨ü|Omr‰ÙÏ'çù³åšÚ¤m£L<ú3ðâ­þª°}ªïN¸šïË §ùWxÃB×|AmÒÙºÍùbÙÎÚý(ý¡¾M´—úM£Mæ1,c$gé_,xïÁšõ¾­ŽÍc‡vÃÈ5:ܯc²¥Z6>NÔt}GLœÅjѶ8ZKMòð튥«Ú¼IðvþãUÞDí*±“q^:Õˆ~išàû=ôF ­Ày‘¯ë]‘ÅsFÇ ð<ºž]à½n©9û¯Ó5ïÚ¾±ð¿Ú…’Eù·ÁÃÏðX±½’ãL…d‰Aòä_⨠ð·Ší`K}GN¸I»bœœVr’“½Í£xFÇ?ñGÇw­©dض`VÉdþ,SMÕοeoªiS(ºŽ=­y5Ñh¼]~ÿiþÅfóæÚÞaû¹ô¯lø)ûéº5ÿö·‰µ–‘xo!0Ì=x¢R§Ë¹Ÿ,¹®q²gì÷ãoxâÞ÷ZѤhLža“cŒ ý"Óµ}#à—…aŠ_CqoJ%†5ù˜ãž+Ëüg¥ø1‡íš&Dù%+ŸÏ>¿¥n,Ú—ˆ¢¸ƒY‘Ûr1>ksʵރö.ÚœçÅŸÛ¯KðŒqÏðÎæM6aqjXí+×8õìkã¿ÚƒöØÔ~"êðê1ÜIâÌ<÷CÉÏ_LãŠìÿm ˤÁý¬›Œ{–ãjᔞùA¯ñÉ´ýrÒöFvZ¢7â¹Ú_Åéû/„t{µLê«"±ùcîExv«âéFÇO—NšÅnXm™ó†?ZqÖ!séëᇶž›¦]I ¿-#ghúU_…´"ͧÞ.‘¡}ªâàæEdè1\7¾<_k\Ÿ ¼rÑÜZÛ.wm+›ø·ªMg*Xøréš;uù›³cµI¡üF¶ÓÚKû™$’òórªªã¯^•_â=ÅIJZÀ¡æ*rr) eo„6š¾®W^´uûD7÷^¿0¯«FŽÞ-±±ÔutTû=¿ÎëÎ:WÊ~ñß„,%ò­í/î—gú׺ü*ø£mð¶êMbO:ã~võÂÒµ÷mXÞø™àÉáXüS§NÓ\Y¶dF¿ú+öøócâ] |%=ëFËXa“òkæÏ„¾:ðï‰öÓX%md‡æY|Uß \ê_ ¼U‰¼'#5ºÉ–HÎxúcÒ¹*]jŽêR±úgð¿Q„I/…õÛ¸ŠÈ?vd~k—øÅðý4k§½²™Y¾ò¶G<×Ì^ý©/µË¸uk9¤_)”4{ˆUÁèkë¯k ñáwöõÉi›hüxÿë׈¥Ðô=\-n]qæ³~ïæwÍÉâ”F“(¿7VVäÕýZÝ“S™ýáãYòÌ«î±÷²71õ¯—Þlõ"¡}±ŽG%}£"A»hR¾P¤Ž9£‡åæÚOÐúúô ´"$tÚ«·~(å¾å_B$ƒsy&åÛ—^Ý3ùÔŠbBÒum­ü>Ôý‡d2îì¸Ï$1™l°Ÿ½Üñš ˆÄµw^Wo÷T0â–2n–"Ùû¸NÕ`ÇLÈíÊÈî}è{HdU,¼…îñ—.º+ðœ¹v¹–B0ÚëÆq[ÈЋ/1pÒrqë\F‹©;B!˜±³÷ºÖŽ£©O§Ú V^ƒvîœ÷׈¦ù¬va*EÓE_«#3BØW/pkƒñ$*Ò1qónþ,út®¦}U¦Ý¾PÌÍò±=}ë˜ñ<Ò™$$îeçÀ¢‹*£SF%ݹT[–p¬ Ö³õ¢KvS*–q•ÀÆM]–)-»ªƒü©Ú—µk½µ{t‘•c-¹W§¹®ˆË]NJ–Zžcâ¯ßÝyB0¥ÛiÚ¹¯ºÿàŸž’Î]£qUÆÜdWÃv6ój>#·±º…›|ãåï_§¿±„â²ðý¬Í‰J¨\cŠÓ'itbåXú ­RÚÕ|¥l¤a{pj«DY˜f*¼.0M^½ŠA&Á.û½r*Œ†LfF+èjòyOCÞETù™wEŽëT€2‚¥1ûÎø:,œ+.ÜzÓ­â!vîo˜’wv­:1òæÜOÊB)|…Öáþ^¸nµ5°uC(]À–éHrPß(lï ÕC؃³ð‘üÊw)nµbÒ6Q¹˜g+’1MŽ<ÈË3rOÊÞ‹Wím‚"ªPw7qíRg)sÃb#TR[Õ·`múýk“ñåÄ3±@@\íéšéµ­F 2ÂIžã µ·n£ükçïŠ?†Ÿ3(ºm¬ß:«gmiM9HæÄK–Ø’ï^%Ǩì+sN»·*¿¹]Ê¿{¨ úëÈü7ñ/.<øäóOR9÷®³Oñ;Çl¤îꣷ¯K¡àËs½ƒìó͸Íå÷ÂŽ•­er@§ÌûËØÆGô¯:‹Ç1Ÿ.2¥OFl+®ð¶¨·“¨’}Ëþ×B)2ågy¡iË"¬¥™P³ÒºbÀN¿Æ³ü7oðß"ýå÷ÅjŽi0°íÉÁ÷5ËRÑ=%­6Îîúëän?…¹û×yá;ë="Žû¤Sëšä¬¤H¡Ý"*…áqÔÒ^5E¹ù—‘óu?JÂGtQï^ñRIqî+»ÎO>ÕéžÕXÆžZ6;q׊ð_†—S]ZO˜7^yõî^»´XÒ)T*õßëô¬dmÞÇ¥xb[–Y×ÌŒàíºqZbâòçìÉ*[«v‡áýbu†?ݯ›=…vš%„W%§XnùO¡®w.†žìÇXh6—*‹2îò×§¨®wÇ ¿žÒA ÿºÝ vÐm¶‰‰ÇGNÒºÙ›ÞÕ_Hû,vöé ×Ç~ëxFåç.yþUâß´2ê¾ ŠòÅÀÔ.‹6÷>_Ùàdàdmõï]úê—È­æÌYRƒ»æ x"ªø£@µ×|#öy`Xä¶·ù¼ÇÀQÛ§L×_Kœ¶w±ïŸðNÏx{Äß ŸL¶³‚1cÈ`·c‰ ÷Áê àc9ëÒ½â.¯¦LÒÚ°“k$‘@EöSÜ×É_²wÆ]á7Š×H¿×cUÔ$X‚¤1N˜QÙGû{×Ö¿5 ­^ËK»Óîn£_Ýîä)ïõ5Ò½êfq¼jXù ã'ÂýX¸¸´‚Ͷ¤FI¦dû¹ä­|ŸãŸ…0¾­#®ŽBÆÛ|Ç~Ÿã_¡ÿ´Ÿ²ZGpñ”p~Uë·êq_+|[ÓŽ¥®¬v–îMÛ•xÎ:WXrêzç#äÝ{áôW‰*IlÑîRôàwÌŸZ@†ÞÖrÍŽ=kèíkÂÒÏ:ÝêypÄ0ªW¨ÅqwÞ ¶Ô­¦Õì¡%|ÌFŽüÖ7ihtÆ­ôg‡Þø)Œ¾X»1Çå‘ÜñRCàkÐɳ;§kï^¬žu‰Äа[¿6ÜàžµgJðÎ÷k{„,ÄÇ´crõò©æ}ʺ9?ü96Öð$Í&ÿ9YwMzƒ Ç£êj¦?õpï XŒ óVO‡à}?í+&ÕŽ<«3|ú-lßKk¤pÌ‘+¶á÷¸û¿.i7©”§ÐÜðW…â¶±¸’ #–9I IÇ_áªþ6’ßA„ÝJÒ~ÿ>LüÛ›)€zJX‚ÛK‰’VŒ[Gº?GÉ<~¥yßÅ߈“ÿÂ-u«­†.­W̸´Ýă=Wý®:Ö±‰ËR¡å¿´‡Šô‰|5p¾!…®$¸Plî­ãù<’>ëñœ¥|Kâ ðêÓÙiîòZn›NTƒØW¾|nñíçˆtù5mVi£\–µ“¤‘·Sá#¡y|7&³öm/›-Ìì¬Ãälp§Û<~5ÙJ\‘8åïIÃ}åoÖÛHÓÚâo3Ëh}þ‡Pkê/ƒ^Ôí^ÛÅZBKúB›Ë;©1 a”dr88Æx¯,øo¤ÛÛÞ}»G´šã*V<„a×?ã_DÙO©á«=WÃúXIÖ-ºœmÜ®'®GÓƒ\õ¦äÍ#FÇ­èž)·’Ê=GJÒ£ºÓÔù7­k ”‚qŽªOµPðψ.ô¹5MbÖÒéD1È—wL%Rß»aŽÞÞ•ÃÞx»Pð1‹XÐl“ì2Û„šÞH«ïá‹{¯Q]uÍÞ“â±,K­ª=ä²) Ão?¬îºãÔçu_x‹\1êsZYjÑÊEÔQ¨Oºv«)ï€pF•y_>(øÓ_»‘-,ÜysÔ¾ÊÞbîîÉÿë{W]ñrá,±ªè1=¿Ùg,¿òÝvá¸önõævö­ úä^GšI‚wÿ^Håˆöô5Q×qÛݹéµ- â½åþœú£é÷‘²I.åba“»ø”àñ]ޱ¤ÝPÕò“tñ²ò³HªÊ»§ sÎ:ö¯/øñm5mG@‚â_1ÒáL{VŒñÆ0zõÞEª Køü= Ë,ÖwO4WG&VÞI02Ëè£?i±»ÐàíÖÏ^·¼ÓàOµ,ztk3ÉÖ³|Î㿃Í=õíEµ¸±×c¸š;8ÖÚÖ&…£ á·aÎïØñOÓS^ðT­.•¨Ãr’(ŽKym÷*¤žþ¿Î«ÝéŸÛ“O=ôË ­…är[ÛÀå™ÞAÊ·l›Ç½F#~ÉâmGâ-ç‹tQ¦ŽÞÁnXÜ”ÿÆ3éÚ½ ËÄž,Óõùu»=JÙ ³· q?˜$, ù°xÝÝr~GöÞ™áuÍôPLÖëµ’=ÿ0翵zÇ< ø÷Wâ6òWÊV±eÜ$vôÏ ‘¥ í‹ÝZ±¿ þ ]øˆ\jâÑ–µbd¸ù7Æ\£ßþUê—:¦ßdñT–Í wšMÐÈCGÜmã±õ¯9ð·lîç»ðî‰c¹µ¼ŠêÕg›' û]° z÷æºËý?ìž,Ã^¡mý§Ú«Ý(aå†9'8‚j‘Ÿš8›FOüNûN§3G.¥Ûc[xˇþYƒú`qÒºK{tÔl?á$Ôo­$¸æ¾f´Ž0Æ1Ï8¬ŸÉ xƒâuÇÄ•ºk‹!EÒ¬aå!P»UOû#ß5Î\xÛI—B0x¾É˜ÄìmÌã{7§AYóF:3XÅËSoU’ëÅ“ß.iånòæó–LAÆ~žµ¡ðïOuˆtå“ÌŽF’i—„•UrqïÍm|ðäÚž‘oª\ªEuy¸I¹ ãß Ãáo†Z¯ˆ.uZ;†·³™ìÑœn ~8©QêT‘kÄŸt/>ÔüI¶9!h þ çŸNM~xü@ýªuøÞKOÛItÞc˜î7gËFbzûWIûfüxÕ1ð¯Œð§‰o|?çÙ—I‘¶·—ÆkžQ;)¾m uï†Í£ÏöÏ ¸{{ƒ¼¬${×Ó¿²OŠõöð*ø~@Ä“‚ÌÜد’| âm{ÀúLrxÃSC§Ë‡çú׸|øŸ{yy ÆèY÷'eúW$£{ÔåËcÕüs¡Üèº×›<Å·|ËÏAX•Æ~ë}æéôßkáõí)dÔB™Yw ½†9渴O—l᳆ô¯OÙT±íRŸ4E#r—w2àîn´¾J˜°r­•âšNï#ÂŽG®} qBÖûÚO}«œ0þ•‚ÔÐsä¾"l…aý)ÈÍ7̈¥±ýîŸäÓw«"·Î8Ú«ÇOZ ìÆï,œÐ4>߬¨«Èù~aŠwnO”µºÓ”HLjXãûØæ¤ çÆ­µ°8È⋸‹ž1?2ô‹¹$]Û[¸WÞ·%p"d¹t¶Fëß'¡ýš Ž$^>ïͦ¬ë…›pݸ²rêÜ ô± º†˜9(Ó2µ/‘ñóvr¤qíV4ê'Õ-ô˜,ÚF›nÃòó]ÇÁ_…xÆ0ÒÚ´™“uÍ}Uû<üðÕ¦¹o6£f¢|ÆÓ ¬cJVF“¯q¹æ?ÿà™~%ñ~Ÿ­{¤IåœbM§ Ï^+Ô-ÿàœº¦™ákí2Ê×rˆØòÉ>ãšûßáf¥á¨¼3o¡ÛBª¿vSgn:Wg}­x/ÞƒíööòHÊÆTãq÷­žFÍ3“ëÓsùãñgì¹ã‡Ÿÿ±u].HQnwC•ì{ô¯ÐoÙ‹@mÃÍ4!v'*sé^Éûdüð×Ä­VøcJÍÄl#ù€ÏN•Ïh~—ÁºØ®m¼½ªî\••yN[ôЊqŒj]¿¸1•‚íÈù5›&ÖfGó.w{ûÕ›ÉË }w/z¨¥ ôlíÎâ¸Ç#¥s@# Á¾ïoS"sÿ cÎÖëZ©ç+e?60Ã=*xcÿKtÍ4OÂY‰N6íù¶þFšvJT„ÚBíoCB¹‰ÊHÍ‚0¨;Š~îFŒ:lÎiìD¤Ç[ÀŠw ÄsØbµ-Yc}Ç•^y>•^Ú&uS–cÏÖ£×õ¦Xy¥b üÝsøÑÔµ8_^/2À’*vç¥|;ñïâL—Z¬––—˜òÛæ±œW¹~Ò¿a³‡ŸoÞùY³Í|gã_[V’ieÝæ6~íwa¨õgŸZ§<¬zÂÿŠ.ν+aG­}á}õ¸#ÚùA;‡9ôúWÄš.£.›~%†M¾[vú×Ñÿþ#@no:° –Ï~•Ý(ó5¢¢{ö…¡Ovâi |Àô_—éÖ½ Â<6‘pG9÷W%áýfÑ­D«(lãå Öº½;\·P H½OCùV2¶Æ1Õö•vÿgÙ ·{ÛúÖö“q+°OÊßy½+Òõö;v²‚¼ ¹9ãšê4­mU-å;›î¯­qÔõ= G`ÑË(m’¬g«#wçÖ«ÙZ‹[Á,×Ä6ã•ê?Ïֳĩ(U,Q·cænI⑵…‹næÂ·ÞÛØw®w¹×Ú>ë(#ŒF¿/Ý‚MzF‘®\n¶*ÿçô¯œü-ã™-fT‚&mÌ0_µé:#‘£ŠI°U~ffý+)Eò4ç³Ý|-â)¯nQ|ß•°>_º=¿Ù¯fðƹZjÁ,û°~l×Íþ×¢’UKSžìÃø~µì¾Ömì-üÛ¹|¸]è:×$—&Æÿnv:Þºð€ŠUxÉÚk½Õ¦Ô.Ö#óòØè eêþ,…ÞI”î=•nõ±ðãI]V6Ô_9‘‰oZæ’”½ÓhòSÊwv¯s!ݪô`Üóè+¿øce´1ˆ×óíYZ΀°Çæ7á8üþµÒx2ÎæÞÅOÝèqŠêÁÂKèrcêFXou—þ!øvÃÄÚ–WöêÊѼ÷Å~p~×?îü«ËzúkI Åž=¹ãŸnkô‹X¼ÁXÙ¾ïA^KûGü1‹Ç¾‘`òÄÍÕܽ=ëÛö¼³Ðñ¨ÓN¤~TßêÚ´qËhm ´ŽtŒaž„šÍÒ5æëÚ•ìLÉyjVVÈSëíÔà{ר||ø©ø:æIœ’•bdÁǘs_:øÃUÔí|A—“µ¬ϵ™º•㯭wF²v9*Ó”YŸã jú?Æm?Æz•ì­g ¡³†ƒhîGL’x¸éÍ}ðgö±Ð&ø×QŒ&èí•’Õ˜cæÀVú~¾µ¬xoMw™šxÙ§r͵ó¹€'üý+I8ËcJuÌñ_CÚ²¤“îŒ/•%sÊñÈõ®bëÃvÚt×Ú}¸SÿŽƒÛ’=ë±×ôKˆ¯<Û™CyW2±ê9à~Uƒ¬¥ËÞ»•Ú­jÛ—¦x$ëÚ¹dh¦qºw†b“ŨíXãœÁÎOz­q¥ÊÚ¼7v#dr[¶øÂÿw ö ŠÝÔ­¯-ôýöè?xÑîÇb*(üÁzŒL²4(Âu~…‹¸÷+Y?ˆÚ5 Ñ’º"Ü#DÓ*gi\Œæ´<3¥Zëú´~iXo&ƒl·f¦Ôto;J‡RµXËyƒ7ÀÇ|Ö>¹ñ3BøwjºŽ§srmw·™9ÎJ|º‘*škú­¦Í¥"C ½ÁŽàI÷QÆ?×Ì´ÿÅ}KÁþ5¸o ê_lÓf˜I,g>@ÊqíšÏý§¿iÏéþ"¼Óï&…&XZÝTõÊË~ªá¥xþ…â¹µí2àøŠ÷Ì·º±H®$ÛÊIÑHô9ý3]P§ox唯#kP‹Oñ†”Öúh’ÞÞú\Ã,œa¶ô?‡æ=éßü)¥øzöKyR6Ù,lNÉN?¨5sá_…n¿á$ âÅkÙÝ£Î×0 ž†½+Áþ¶ÕüCý¦‘Gö{øÈi•wQÐþ@þ4¥; Fúš^ð̺-¾¹ Gä­½¶fòÇ"_¦yÇ­wþ ñˆ5[Xõ‹VòZ9–Ì oeîxî2>¾õ¡_h>‚ôÞG¶Þóæwßw¹«zhÚÃa+<×®#Qþ­NJ‘þ¥a9\«šþ:N¿ð¶‡wj–÷ M˜qœ¾2Npp:*Æ»ñ=힀Öb&Ï'÷—nŽx®vïÄz‡‰ /‰N‹é,Û?×yßÂ1‘ó{àÆ¥\Ÿ²sö£ªI¤.¢.­ìîÉ. (%Ç<®œzŠÃÔ4òþ-]³f–ÆÙöØ*ÙŽÿ…M‘«\Ln'BHÙ Ã0`„cÍs·ÓëzÅs¥Þ\3,N‘©ùÇL};Ö±eY‡ƒô­B¶ ¶(dÄv«–‰õõäšô+©`ð]÷“¢5´—ÊÆêîÔþò$çnàÇø‰Áú ç| âÄ›Ju{˜bF&‘bÝBü£ë‘‚O¥q¾*Ô5ýùŒ–‘ùÒK#É'•¸ Û>ƒ9úÕzÓæ;]ËÅÚ¯‰$7Ò£Úý¡e‘gd^Èõ®çÃÿ µJì%³Žžî7Hp¯Üç¹Ï¡èkÀü3â¯Éyo\Í ²ÈÇžv*ÿ}%ð3âíµÿÃJ÷Wy&‘绦nSqùNÜÓîµ+ø/Am ;={EŽòò‹I£R½[hÓÛ§'95éZ}†‡¤ÚGe­I¹å¹sunÇýZ…8<îÜOzà[VÓ­µ]>×Yó帙Hf“,0ûñ¸vÀéЊÜñû^]ë2_¹[kˆÔÇt͆{†ÇʃÓÖœd£©-´Š:”6Ðk—ÚÖƒ{y$6°„š5›h•_F`r{cÖ›âMwMм¶¢ FÍnVø.$/»vÏôª3Çö=:í2á-lWoÛ$‰K3Ì8íêsÀÏAZŽ÷QÒãÖøbÓÇ"mÏÅûVAºY¤$•~ñ=²kß üAÓaÑuK)&Tï%cë^w}eáÝ7ÄÂZ -û¶-qpsÈ«¹ð…fðå¬úŸâHçš6mÓàð•Çx§[Ò¼ â?7Q $—?/êsP6µ:}gÇsø ÃO©øgÁìÍ$;>ØËÓÞ³|3â={ÆÐC¨h•½h‰hW «þ¼Õ|m§M ‘gµŒªÃn«Ëý+Ð~|Õ¾Ó7gÐŒ1ÃÙH,¼Uå<«xsâÚçö†Ûã6õœžkÐüEá¿ xŸ[¼½ñô®ÙrŒª~l*¿ô=6ÇÆvZ–‰>Û©Oï WÃUßEñ~©ãY.õ‹èílã¼VÎqïB÷Cu±ç:ÖµqáÍQ´_Ú4vó>Ö/!kѼà¸ü9¢AâË2I$ŠZÞI=ý¯GÒí~i6 qyá¸ïWt’0·{W’I—ã/Èö²Zií#Ó;U=èô# øÁñ¯–ª’¬Ë ;[Ë?ÅëZ~9ép_®™«Ú•K‡ù‹f¸mOá\Òø’ê×H•n¹ýØsÔqSi2]øý]ðËe[b²¯#5Œ´6§¡é?üW©ø“ÄðYÙiWXî ¬~éç¯ëßqö¯0÷å܇Ð{ÿúÍ^‚Õ.„i8ÝÈY9?ökYÚGV;Àúö¹¶¼×¡´–Õ|²6³ŸQ_O|fÐæð›Ã«øC8GÚV?ç_?~ËÞBÓa× UÞɱUX=Í}áÍKí)us®^ lÑU76xçò­(ÓŠ‰çש.gÑ¿g¯ŠvÚ5²kaDÒ!Ü»ºg€*Åç‹[Uø¥%ž§}'Øš±¬Ÿwi5óÝ׌´í_kËUÙo庶`ÿ:‹Å´V—.©vW˺%Æìýþ:WW³æWìÎu[Ùè} áߊþ?.¼+v±½½¸Ù³gvÚgÇë->P·šfÍ™V_.¾EðŸ5‡ñºë"VÒ;´Ôç·ÓŠú _Ëâ G5ü¿yAûØ$•ljîþgf·3±ÊÞξxyy]ÄqÞ«›Èà}Ǥuê£ü)5k¢’~ô–;vƒþMS¹˜>w#n+ýÞý¿ óŽït¾Ò(á·)fvœµ>ò I#Ûyõ¬Dž9ÌVo‘±Çý}jÄ7 À©æ|«üYçùS²3ö‘ìj‰ƒ#— ü]E[´š!1Ôn-œûâ²äs™îv•ëóÚ®XÝ –ŠL¨çhëÛuÐŽncz ŒÆ¹?,cæ^æ¼ÇãOcÒ¬æîHݳæÎÑŠí¼A®+GóAPYNß®+ä¿ÚcâKÛG5º0ó‹'ñ­)ÇšHʵNHžûC|L—\¿’0¸G8lûWŠK¨y×nÀ3(å»ö­ï\]ê—²ás–èÊN}ë.]['š’¶æ= ×­îÂ)1‹“¹«êiŠÑIµ•¾îy®‹á_ĉ4­R$’i<ÀJîëô®SSÓŒO$“¤Ÿ—rÿœVꯣÝ-çß/øñZSW"¤4?A~üQ]bÕ@¹Vá@ÜÝ+Õô]`³„-¸òzWç¿ÁŽï¦ÜE\àù€ya¶ñ_[|.ø¹³l­ö…ù”wÁÿ Ui8œKF ´-N<.ÔeýÞâÙ#±]%´ûŠ y·yít¯,м^¹Ž)È­·iÈÏéÖ»½WµÇ(ù~^U{~Á(TävVË4Â0³nc÷qÍkÚXÎWÍEw9îÞ¦²4;ë1éÕƒc*¾g¿éŠèmõh£ƒdCŒtÚ?z×?/s®2ìOa [þöWmÇ»;Öþ‘«\‰ó3üʧoÌ}±‘\…î´Ñ rv³rØ'ŸÆáY¦¾IY2ÙÃ|߇çÍO.†‘•™ô¿ÃÉ ¶ŠäÉPBúz×?ˆntËQö‰Ûs› ùW•|:ñŸg§y’¹‘Uq´ŽþŸS[:Ïm/îÚ9c^ê½®Z‘æGu:‡u£j÷ZÖ¡aþRß.îKs_@x(´ý4Ÿ÷gÛšùßàÊkêqÜ…eŒ7ÊÞµî÷šˆ°ÒÔ´Êʪq´uâ¹4¼k%í#ÊtÉe|-qæ|ßÄz×Ka§¦?¾‚Ó¾0j j/*¢ÛÆVêX„%÷&¼÷Y²¹›[Ý-–Ô Â ±üÈ;¶N9ïøÖ ÅÊé¯ý‹c,ù™¤ÁËcÔ÷Ïzê~hØâ”}íV¿ñ6Ÿwkû„-4ÑÈç=0½>••¬\Ç6u¸E–I ^Áùæþ¼ÕÅÇ“«ÈÅZëî¸%‰ÿæºßM%¼ÒY4ʰòÊ~÷AŽ>¦‰Jº½ŠºÇ‰´˜^;(f-$™ûÌJÈ·ñ~‰µÄ 7I¶™ÇO®sXºÕµÃÄÐÆ˜X¦¸m¿6=×¥yÄ?_ÛÙɧécËhB‰6õÞ}O°Í W©G£üEý¡ü?áÇo ® Û„~oŸq»óŸÒ¾Pø±ñ—Å~-ñÚQy‚[#4%¤èßÖ¡×­ïµ N(nîZI›kíÝò†ÝÁ>ÀfªYÛ½Â^¬¶Øò˜¢»|ÇËÝØÿx×U5’ÎrÊÎóZ±IuÛìµõÃF°䜀¤ŽÄâ¶tŸ ±˜iíj<µºRëØ*ñl×M¥|?Ó/|'oâd¸òä…–VÝ‚»·§_¥jiÚ#>›$3O¹¯/¥‘Wæ$¶vŽüÿ*©T^§e ø~Ï ÛÙhÉåO¸šeæ’TûƒúW |!Ôt¨5Ô uÿI¢[RØT.ìLã§½rÚn›†oãÖ.dSµ0I¿9+޾˜Ká-= Äv²^NÑB/<ì»q€¿©#Çð®kè t;ßÜiú׉/4‹˜ZÌ’\Mï®1žzg¦*mO_Õ´ögŒüцups´.TF?à*+Œ³×¿´b/ï6hPÌÚ\¶ž\Ó)I$Ý· QøàS|1cª4wš]öϲ¯$e¾S€9ëþMu(ðdž¯d[%dЬ²>Á$ ëì+“Ó¯,t->ëQ·´M׎Ñ6CáÉÿgŽÏÖ…ªlz^«Ùé6¶úޝ fežF’#˜öŒm_ë]´šŸŠü-k¥ÜZn[Ë©¥¼·U' XÇüñ\…/$ñÆŽ¾'½‘ãcòmíÓ óp°®ÃH¼ÖôZVÓµiPXÆÊAË+{š9’ÑÒŠ:Ðã²Õ,|5st¢Eå¦ñYÉxà šäþ#~Ð:'„†ÊI¢‚WÛ ¿ ?ÚÏSÇÿü%ð¶É¤Õµ…ŸT¾·qoÿ¬UfûÃÛü÷¯“?i/‰rjš›xJ}Rá|ì®àmny¥iNŒ§#9TŠG¦kÿ´¶•ãMvo éVEZ9^kfàƒ’GÁøãâë>+·ÓVÛ§é÷–3'úÌ®2Oµr 5¯ x;N»–4k«¥…ˆ·&B8ǵ`j‘¢‹Ïøø½vvÍ?w¹ö®ÅÇDŒ¹¥mEñ%ޝã¶m% ‘Vmò³0ËsÒ¶u "ëU¹“ÄZƤ,­#Â,põeW!â[˜ô}Zy{Œ{¤eçæúÓô=kXmQ$»†âvÄ/îÁõÅiË ‹Éák=bKë;. Iˆ~ý³[šÝß…´-JÖö8®äÚ[Ë\vÍ6÷GÓ®òâ9c½óCon~‚–ÿÄÞÓf‡C›M’âîBM´p(ÔHîßáÃÿøyƒ%ÄðÇó3®áÉëÍRWØÐÓžO XYÉoqx\>ÎcœSügð¸øïL³¾ðÖ²· ±ÛºÆGsMð•—¼EâvÕük¦Gk ’ÿ¥:°ùÜ ãó®Ó@×4絸Õ|;o•ÔÂÞÞ6ÊôÍèpÿ¬|máÝB; áoÖoßc'o©Å}¨|o“áÆ£g‘y;½Å®ëÏ0|¥P>•âw^$¹øUâ« xfbÞpË\y®çÄÇGÔ<e®xƒW·¸½…IŽÞ5÷~MOÙУ£ñ…õïév¿|=`Ït×ÌláW?ýj§­kgÅ^¿ÔeÓfi¬¸mƒ—nãó¬Y¿j sOðxcEÒRä;[åË7¿Öº¯‡·Ú$Ëoî°°™ÔI5¯‘ýóÞŽÀW°×î|KðÚ=;L¶k[øÔ-†¸ÍyüOâŸk¯‰4—’×íX‘˜gó^µ¤k× ã=KZžÉc†Õ,÷ ;¸À8kœð浦k­tž&0ÂVá¤hÊ›šž¡»¹³âŸxf ëwÂíå\qçC"cx«~ iRxA5[J¥|;zç¥qzö¡àm{_ó-ßkBŸ»]ÿ{©²|Bð“Â:Î’í XõÇcD"ø¹ ]^C¡‹XÕøÉà{VŸÄïi¥¶Ÿá{–ó¤c¸Ä¸ž*¦•à…¾Ñ®u[õVºhɆ=£ïcéXÿ ¦¸×|Onñ®èE×ü´=>•Œâ¹®tSø¬Ï¯¿`ßÏ¡ëðøo^;Œ‘©Ü{~5õçÄ謚έ –MÊ‚ŒžE|Çð¿àÄš5µ¿‹-þfh×l|gùzWÐ’ÎO5a#E%C|¬ Bäbš¾XbedÝæ{c¦R#±·Ì»AÍx|ÑŠ¹êKÞIHöG³ÍÜËómnþÕrÊÞa´…*Û³òö¨­P\Jé¿åÝò+'-ëZ1Á¶)!Ú»±½+†¥_i;#–^ö„Û’ÉvÇæÏzŽ&KˆÃµÇ—ùŒÔw-ØòÂ7¯ËI,ëÐdÛÛ±^…|±.å?6<[©Á§rØóû¿çÖ¹ñŒ÷7%l”þîePF ~}+ ñ›Ý?|©ˆöžñV×ì­û;k?]"m"Ò#´eFÓò–=+HÅ'o#š^òW=?áÇŽRýá·kÐÒn&Efééþ}«èo øŒK¡G‘¤_ÊÄþµòÀïjz—Š"”¸XÚB$]¼.?­}7§ÙÍm¹LÞåã§gcÓÀÓzÈÓ¸ÔžIÄŽsœüÀÔ^¼OÊß/ËëôªMrªì¹çÜ>”á.Ö<нË/jà‰èI]¢º—c‚ò£µX‚ëΈ˿¹oaXÑ]pÀËÂà–^æž.Y–™xãoµ= M¤¸‘°“8ár6à|Çÿ­Zšd‚Õ Îõ›~ökŸµ‘ŸaV0Ï)Óð©5ýr-LmÒ¦í¿xu 6Ôå>0üIk(.îã Š{ú ø«â‹/*‰’Y”ì:öé󘙘Ÿ˜’¼óÅö&æ&1G–Û÷‰¯[ö<üDoÎìõK­?R¤åFáÊñšú_öoøŸ$â+io÷c†³_4knûÈþ,VÏÂÿÝøoXŒ,Ûz×£8F¥=µáSSôÏÁZ÷›kÂLæoîþ5é>ñ*®d^½_"üøÃ%ôqB×+&WÜöÍ{§„µâÕ‹Œ Ï ´­u¶«Lvüœ+v÷­»-z'ØÑIÑ¿½€x÷¯$ÐüAu-¾MËüÝBÿµuzV¯²#üÛwmÏC\Òø¬tFZÉÔ–åUü¿›ø±üýªöƒqåʪ…NÓ†`A÷®*ß[2þî ¦'Û9ô5ÒønGœíkœ|¼üßwÚ£âÐÙJç¬è>"¸Khã„?‰”õ÷÷­;^âîõU·}à3Ÿ¼+‘Ò/lôË K.1Ù{Õ­'Ä¢MA` ßëæõ« Äè§RÚ3ë€3Çggt 9-ó8é^…â¿Ã²ÙÀ‡-È+Æ>xŸÈÓPG:)ëÇn?­jë^ ¿¾ÔÓÍ}»Xlö®9ÓÒÈï§+ž¥à½@Ùɳºþñ²¿0ã§ÜXë—W„F·o÷5ãñMw>|µÏ¹5èþÕÀ ºýîW<Õáá(³,D®o_ÎÓ&[d×Ú¹Oj;WzÈ70»{ÿŸz×Ô5‘Y£*vœ|ÕÍßIÔÞ[¦år­ÐúÞZ3žœ¹´9½rl À7Ëê¼ZÍÑ ¼ºy>ÐÁ>b3“ø×E©Ú%Üø·Âªü§ W-4 ‰!Š+˜ÂÆÍ’Ìy­°ôý¤®…ˆ©tÑåß4§2¡ÞŇÞèÙ¯œ¾.øO¹&RË–çcqÏzú¿â>‰ke–Ѳ¿ÝÉÝŠñˆ¾±¹xâˆËÛ¶kØwTxU+7Ôù;Äÿ ö#L îíeÛ×ß5åž2øW$r\Iní¹F/lr¢¾ÈÕµå?|'yc4;UÈjÓêôí¡Îë{ÇÌ£M¸ÓuušxÊÙŠ5þ¿åYz¾¯$á¥ÿÜå»ßç°®óÆ>Ž=EL äî?y˜kŸ¾ð•«Ú˜¬ì•×Ë!œô<óüê]6ƒÚjrókýžYÙW÷ª#ÿyGÿ^¼çÆZF—2Zº(Y$YfÝÓïþ5ßë¾­÷ý­£0òß7~•ãž7¿žmKÊši<¾w2÷PzžõŸ+lÖ22/|¢Å©\kwB2· ÁcÏÝãƒôÎ+*ãÂW«¥Mme¤·ï6³Èëן_¥G}wsª?Û.¦ ™›ºÓô«—>Ô„ÆÒRâ2¹}1ŒU8Ê(9£rM/ÂòGáøôù¤E†cA†B·?7ã“V´[o}owpc"†ó·¦ øô®ãÆ:”³µº2ª‚~nzZѲñxV%qµcÃH­íÒ§–L¥#Ðõßi3é«Aþ±•w/=AÍrÞ=ø‰ý©{e–p¶ÛF®õãçé\¿ˆµë–—K›ïýá×=*°¸¾–Ò 1î·™¥ir°ä}i¨Ü£¯Ñ¼K¨èÒC(¹ÝÕ«yŒÙÊŸ…\>)ŽÖÙRÂãå’=­,ÏÉ»Záïuë+!fns.>\ñZšU¢\i©ç^æ/ÌÚã@Ÿ'QèvZ—#²´[8ã‹Ìû>øî6ü¹ÇR+Ÿº¹,«sq+ÊbýÜmF÷öúÓ…ìv =”É'— ˜dÂÙªaç¹±Kéý!®Š‚ç/NOÔúG ëWPÞÛY%êÛ­™¼¶oÉÁvoZé4¯ jWWWú|Û|Î-ʼ:ãqïYÙÖQßšMÌ»FâÇü*õïŠm|9æ@ueó£ÜUD˜}}óZk!óDôï_Üx,ÝjÄ%h¶2,q²  c°æ¤‹â:uÍÖ´ñÇ4w_èЕ fç…ãÓ½xŸÅ¿º¦XÝ[^7™5Š‹Ï/Ò®Tã×dX¢ÎÞyçŸozÃð÷‡¬µãÔµÝE–9¦"E¸\œÿ³Û×èkÌõïŠÚGˆlíu x¤Hmfw¾™IùHôõ5&‡ñÎÓS[]CK·XÓí&}¿2 3ïWìgØ¿iLú#BŽ-#Æ6ºm£"ÚÇjD0£ ìÕÅŽ~ÚI/Œ¼N#šéw­œ»¦+ؽ½Í|‡ãx¿Äþ*¸˜ês.žªâ?.r­À×s=íÞ¹—¸ùÒ*2»$zW:¿¼c)÷ÇŽšGÄmrÃÆÚmŒ‘lŒÀ‘ÈÇ;TõöÏWœø³Ç·~1ÖÿµõÌþZ¨UùAÚ1]'ƒþêž ñci–-q›?ÂTžxïYþ9ðS\xžh­Õ-ã¶**ýÐ=}+ºÎ:#Z5Ƨ=ËGn· ²)Ç–¼×o¥|ÕB꺩,ð³ÃÙWaƒÒ³ü ØxvîKíSVYÊ®ØaS’MzG‚üK¦ë±I¯x²ñ^ÛK³xáxÉÇLQ=ôN?Ã~‡LµXha…W–¸¸ì=yªzþ¥dg[o {‰$ÂÉ·å'>µ'Ž£ñç¬"¼ÓlÙ¡ÌVÐ!åsÞºiPÙèÖóë±ÇöÈS1ô=÷£¥Å£9?]ŠçÄañeþß³à78ËzVΙð’_ø‚m[K¾š×hÝkæGò°«OÆ_ |;&©k­Iun·WgtËçt?Jì|£héoq§Eâô†UŒ-¹‘»žÂ— u8íoFñ¶·àEÐ4míÃw²îo/Ó ®£Â¿ëán­µŸ¬’\]ùþgœ70ÎzWs¯xÅ•ž«®ëSÜ:•ûCgdJk`ØÚ>Óõ[»YuË厬NѤ˜ÞÇžjo‹>ñ{}#À‘Ãknß:ÆÛIÀëNø¯¤xÂz>žÞñö¤‚ÜM1†BLdúÖ÷Ãï„_¦øi?ÅÏk‘Éoï'µgù‚ŒÒò "?øoCÒ¾ÜÞøµ?âyj<ÆYù%­cYxëÂÞ,¯4?\K5¯Ë#.vôëíYÆ¡ãŠW2]ÆÎÔ$ŠÊrøí]Âo Øx2[‰ur%ó¿åƒ)}¢ãn¥¿ÞxR;›Gñ±ûÞfÅ?®§\ðt÷‰mu]+]†Çt»…Xt=8ë‰ñψ4]fú×Nð¥¼9I1q!¬ýòÃQøo3_»-™ q›×§}Ƭz‚Û\ørì¾£u$ÍÌÍÐéX>=²—‰lΓgåý²[o@ØïïMñÅøüS#ÚÛY$œEuȵ·áÝRuŽÚþæ6’Eù)ý›—Ðâ¼%àûŸ |AÛã÷ÚÈÁ‘º ½ë£øúžð•힯áÂ<˨”dzT¾$Ô¤´Ô¤³ÔfY<–æFǸtñ–«k’G«Y,–ð¶ÐïÈØÒè —˜~‘ñFñ Ô67ªÑÇ2…w{æ½Eð-ׂÞ×]ÑÕ¤´‘”™~^}ëŒñ‡|«éßnðÔ(«j›Œ™ôí]ŸÃ/ŠW kf,›£Ü¹éþ”õ:!+Nx ãg‰4aci«DVȨXÙº_Mø[Ó<[àïlîCHª7æ+ó•~4MânÏÂÅ|¿²q÷º×Ù_³BkÐøQ“P™¶²þå[¡5çbãzg¡„—,Îí#]û]x Nâ:Ô‘JO%mþ÷½Q¿¹’ÜÈy6« ʽùÿ~š³ÌŸé2?Ùâ¾W{YJܾ鯧 óUÙNÜ–l×ó«W·2R„ùc–,xÎjŠÊãkF›v¨žÙëDrÉp¾j®ß-ú7ó©Âáù}éM©"ÔNÒJ¯¿ieëRKj&Áo˜Ž¼æ™m$aXÆ”¯7"¥%QÆÜqé^®ocówOð'ˆ|U{‡¦éòI‚Ê¿t{×è'ì»ð«Cøðq¼I«Æªñûïó~u›ð3ö{ÒþZͪøÚV?:ù‘àô¯ý®ÿj«ï-ׂti˜Y¾FèØà)5ëÑ”¾+8¯Ýês?¶oí$þ$ñéÖW,awÎCc¼?Ä_ït ¶“®jK*É *¬ÙŠç~%ëPø·Ã¿jŠsçÿ nW‡øÃ^ÕäÝauwƒxP{ó^…:^î§*—‘ì^ ø¯<¡ô€Ì©$m»oÝäàWaðÛÄ>ðÙ¾±½‘7H»·?Q‘Ú¼[á=õ„:[&£:«ufþ,U¿ JúÖ¯u6ö0‡"6=G=êgÓ“m#ëÏÙ“ÇڌɆÙ&q·ß­}s;ÝF.%;xBƒ_~ËWRé¾1þËYnoåýk쯵ºZ p{4l½½|þ2\Ò>‡X\šYÃÃæÜðzÒÕKmr¿/*Çü÷ªÂr~Upêܧ¯Ò·|àÙ|I~‰.B³ ÊË×Ö°V±´ŒË8æ½+º#ó`ü¤€jâiµºùÏa'”y ´ô"½OCøc¦hâ;›ÄŽ0[#Žžõê~ðo„5Ý,Z´píHþcþµ¬iÊF|½Ï™t¨Ùs½öãq^˜¯7øÓãˆô{)gã¸8ÉÇqë_S|Møe¡iÖÙù^\g;WˆÏ×­|OûGx{Y}I¡û<‰6@oO¯õ«…;KS×åÐùçÇ> ¾×5¦˜É¾=ß—ÿ A$¿—w¢î>ÕÛZü8‚ñàÇÓ“Óò÷§Ÿ«.ï³²)Uò5½JÔíÊVWâ9OX¾qå¸ ŒúVóË9S¿•lŸ~k­Ô<#zïˆ!cØuöªQø&îi<¯/,H÷ì*!*qØë•:–Ôâ|D±ËÊ î^wv¯5ñ<6òn…de+œr:zŸZöxVæÎ9 ЕÛÛšò?[=µÓ1L7¢Ž:Wm©lsT§(îyï‰,"ÎÝÇžOµr7¶¯e8u=+ºÕÊÌX<{ð®GZA*zƒóôð²w³<¼U8Ê'§üñüjPXÏ7ºg­}›ðË^‚îÊ9~Õ† FoǯÎO]ß[ø†!fY²Ü__üñ]ô6Q¤û¾QÎïºƲÅÓŒYçÐægÔš>½moçmÁ¹öϵmXøºâp¡Ö$©ýçoÖ¼{@ñÜ¡mämn0ÜíøWI§ëÈJï0¤uäÔ‰ØSÑüHË?•lNébzþ½«½ÐüBÐDËo¹óþâÞÔ™có…'©¯GÐ.bEKÌ }îžÕŒb÷)Hô+oK(Rã÷küF§ð¦±q6³µ¥ÆæÊüă\Ôs³˜ÄŠOôüê}Z“û^5´}ß09ÛÀç×½g%®¦ñ‘õwÃoyTh“…ڿĽxé]e§‰-ï$Vb|Æ_¼½«Å|+¬É‚á¶ÿuCd©Ç_jí<+¨ßÌë);—9fnõœ£cº5/¢=sÓ0ÔXDÎßwçcú׬xvo.ÅT¡Ý³?{­x—†uKˆâI@]ÃqÛïšõZIlP4‹»…ñJ’÷š Ïݺ/ê:¼Ñï‰þVê¼už·èÓ+‡;s–*y[V›íWLèv¤w×éK¥Ø¸Æ þOo­/ÍdE.åûHn&¸Y­ÿyl·¥^¼º)®2TÀ⥷šËÃÚs]ÝŸ&<óÇJò‹¿µŸƒ|+}-Œ²ª¬jB»`)¯gF4áyN2¤ªJË¡±ãÛ°]4,k9FØ ò rþ8î.!ÔŽéÜ­ŽOÐ׌|jÿ‚ƒü0Òe‘—WÅÎp¾S[Ú¼CÇ_ðUOÅ+iÖÚLÓ6Ì4‹ lW¥íhé©åºu;JëÞ%’Âù¥†âM½ :çšó?ˆŸ"¾âäÅ÷Šÿµþòïà§¾’÷ì·²+È£î¶{Œzךë¿ðQ«+9 Þø^îxAÏž«ÚCdO³Ÿcèï%åÃ&¡~ÐÇÈ\ŽçµsºÿØì- †ïttþ#ù×Îzÿü3Â:Ì)"¥­¡fÄžt…˜ ä|_û[[#xní™]±‹|œ.z–íš—È–ç­üCÖ?²¾ÑhcŽU$y’óô¯ñ·ˆ¼7 [™u™UH‘‘øôü«ËüñORÔ|Æ2^ܱlùhÊ‚}Åy_мCw­ÊѾ 7HÛ8f,«J4SØÒ2zÜöMCÅÞ[ÌA­ÆËµˆ]Ù~kOG4í$ÐÅO2fÛë^%aáK+yɵz·™Ž* qe³acr“o_õŽÒgò®ˆáâô¹Ÿ4–§´ÜøŸJž/²é÷bæY² ^8÷¥Ò´´·RÝÌ£ø·¾¯Ó×5+oô« ¤7oéš™a­°Fr¹é^!ñ=Š-õ¾§ .ÝŠŒNî;Ö*|E²Y„cP“krþçÞ¼Ú}CQÔ¥Úd‘Âò~µÕÍÍ× …qW4JöŒô¤øi{:Í$Ë•m¿.0= wúgÄ? D#´’ê5tPfUäÇ^µóµ”.ò•7s´U‰â¼2´W…;mVÎ=ª%„„´¸F¤‘ô ×ÇO ÝG%·†µÄcËT™v“î3Ö¸­Kãî°–7V„Ç¿hQ ª‚x<“^TYD#'²±™ÿ ¡áIà²g÷P•X½Øž¸¨að†±¦x–ãHÔ$2´k»ÌŽ=Ãñô©ŒR½ÁË›rmìñÙÉv×Íþ0¸l“ïá¬6»Ötû«b¶–6V]²²ç5ѯ…‘?{{*”7$žØÇjÙðv«êÞ[êZ|2Ch»¼ÕmÛ?ZQåQbõŸÄ;Ï›ŸÅ ÇÚ'¶Ø¥“•_¥KðÎM+Çiy.¾$“e¦~ëÜâºþùÞ“]Ô“~÷Ì–+ˆöþï9¬[/Ú] }+À^T¼íšEùTsÒ§B¥Ü£à†Z-Ö£pÐÜ\™£‘žxþqÿßñ‡té<my¦£m¹Íèl ÃÓëOºðGÅ xºÛT×-‚µîÐ^Ù°°‚8ÚxÏàrÜü½X¯ ÅÿÛ£*¾fiñÞŸRWsÑ>+Yéú2éÐéËPÝ\(`À f¸#ƺN±®6ù&¸UŸÍººÚ_·µF<2¾Ñ?á×n&gef·„¯$û×WᯠxÂ^·Ð´é­îµmN%ÛJÃmºç××Úª<¨“Ð5ïíïê7^𿘑«¸’é‹…u¹z_Fòëk¯™µJtJôË鞎øxgM·tš!¤èKw"§Ò|­ÍðÖóÅam¬æbc’é‡<ÿ RÜ[A“KÔ<2Òx‚úmFùíÔ,21>Xïœ×iÁTÕ4 W¸‰¡±ž6{y›€äƒÇ·ñk4zׇd·¸Iœ#šú/áŸÅ _ø[§øYðê­ÆšÌ±~f9ÌÔȨÜñ[…6z›ökkùdGlÞI7÷{šö/†6ð‘àɼ e¨M4s[Ÿ1C`nôö¬}OBÔîõ…ÒŸE’ÖæË-ÂíØ‰÷®â¿‚4߇7Ÿeðþº²-ìAJ‹•°x·Æ±xR-’ø\‹vf $l2íëÅqVÿ ¼Wâ“7ŠÌ˧ì2ìݺk6p|5MÞî;™ò6Ü–öÑ|6ðÆ·¡|<“Ä4ÕþËcŒÛ£¶ÝüP4ãÔòßx]}Ö6Ö3Çç]mRv®Š_ƒÚÅŸŠcþË–Fké¶ü­ü9¡/u]ví,ôaR6•š=œ÷®ãá|>()uë•Xí÷,ÈxÎ=i‹©“âÚø#ÄÑxgNyxaS PËb=«Aou 2UIÞHnTãÌf9ø®vçÅú#ê×m0’FfÛ#r+kÃך׋îQÔ´¶‘¼¿—ž·B+MûŒd*í&ºïŒº†›{¨%öÏ2& û½Û‡N¿Zä4ø{BÕ£¼ÒaÌÜüªqÁê>µ“5‹¶‡[¦èvºG‹!ÖZ£ÌÎ?}Íû>x¥õ[ÄÔù{[ –lµðNŸã›¯jmiÒZÇ$¸ŽE^Ö¾Ðý”u­:ÃFKInÖA媪žMqâ#î´egsÓ¯î‘'%s·§ëÍ\Ó.Ljäub~^ß­r>*×ËZýÛ|¬ÇÿõªÆâ4,i’Y°Þ |oµ¶i•VR•C¹•£1y™——Ÿ§¾X¶ùNsž½yªº}ûM) û—oqùûU­¯ *_Ìù²9Îk½ZV±êPø (¨ãzá|¾â­€b>[(Àû¿(5N7;*ª²p[°â¯'ïöÏéÍ^‡AÔ~ÙšõŒ^ —NðÚ¬3/bv#­~fübðÁ×V{ívñœÉ1ÜýN= ýñÿ‡5ÝoÃÒ&²fY®"=yžõòGÇŸ†Wº_ŸɵJýèýû×µN\²Gˆu*jÏ>2j^ðÖtI†èúüÝMxÕΡâKo·ËÖݹ³Ò½köˆøQ«X«jZ}ä“FÍÌOœW–hvwqZÉi{ s†OêS’ä»<šœÑ•‰ôýZøÚ­¦UŒ6Þ§5í¼yáÉõ|›3þ¬óÇS^c¤xi¢Žö=øõöWìSá}"÷OZœŠÍ ÆÖoé\¸‡Ì½Ó£Ô*'#ƒø¶¾;hî–E˜ Þµ÷ƒ¼¬ø¼C ¾å ¤¶ÓÅ7á—ì k>7_ÓQQ^PÍå¯Ê?úõöÇÃÏÙŽËÂ6¿i0p|ÊùŽ:b¾v¤e-õTýå¦ÇͺìݪÜ’ì0f8éÒ»/x"ßÁ×_eiw4#›Zô­sT¼ð¾¶tv¶XÛwÈTns^iñY¿mrR7›öŠªtÁÎ1ÐYÔá¼Ô$µivÇü»NwSo¾ éžÓñý °ªÂ_vìßçŠæp·*Ãîü½«Ó‡‡!µµYÒ,²·5â cO´Ûº~Jãæã¸þ±.‡»5ºx×òAv©öK¦†fÍÄÍIõ®Êu½³8kSTÞ§ñÐüD×·i24üÒ|ÝOõ®'Vð/Ä ´ZrÛ¼‘Œ«\M´É^Ýð£Âž±]wÃWm,“cÌ·žßiBG^kƒñüz¤—_jÔ­c¼ŠÞ~çåaïžø¯BœNJ•.´g—_ø^ÞÊâ;½bK(õ +˜~RyÉ5ã»j:Jè7VqGuòÇ"`³sÚ·¼má?k>¸¹Ò¼XçPTvk+†Ãã°Së^càÿŠÞ.ð Ö·dw+ÄpêP¿ÝÝcc&—ÓadXÙsîjMs]Ôí´ÿìÛlëÓîßsqu!ò o@;ÕûÝLÜÒ9}CWñ7ˆmµýYqþÒ{pqv:NšºÓ[ßÛÞ[a¾XâÎáïÍz¯ëw­pðG5¯—·ý`ùO®8®Ä¿ñ>²/b¾Š×t„,Ò6%›ýÕêé[S3r¹‘®GÿýÆÝ6êâO2²3÷ֲl,í5;øì|Ù$’FÁic5é —Eð§†ZÚûìòÈU|Ï3ýh?LZDZÓtìW\Ñ7ÉxT³(ŒíQéžÔïËÐW9Oh'F¹[=KWe~ê),*†Û×VòjGQ ôÝÔŸJè$ðÆs<âØ¦“ OÎIîOSúU_xJóLo±Ùiy1®|ìü¤}sU^Áskî™SNˆlçtŒÝ¤‡ÃÐíQí4Ú•›dr°“û¼g4ÉíæÑõ?³<á›#Ìe;±š×“\¶ºCg‡­ZIŸþ>þeÿ ÖOjO¼°øqd’HòÓÈìc>ù¦¯Ô“6ÿGÓ¬ßSi¡“Ì\˜weÉú•µ¤øYÔ´Ùµ›].ÞÞ‡ cÌzg‡að®›wqfÚtòj §-å³*úâº;]OOñÍ­¿‡tëïìøÛmíË0V‘ñÈßʲ•ÃÔåt?™´Ë‰uyÒ?7#t‹ÂûÕ_x~ê=¶ºÚI#6}=ë[âÔ£íðiº}®ÄX¡¸ ¹xäã½Gà][Fð=¯ö­×‡þÕu##¸ À«Iò€ÕѵÍ7F²¸™¦b$eRzqYº^…âM+Äíou¥ ‰x&rzûWMâÞ ÖÒÝ´½ -~Í÷"µˆˆÇ=X÷?¥MàOŠ6“Q“H“ÃPÌ×ìb{‰"8LûJ:‹`t.ƒãk=%µ ivö–J¼´AT3wÉ= äuøO¯üK.šuÛX¤ºžhãÛ•úסKð‹Å~µ’û\ñ)¿“uŽ›otcPç±Ï—áO†1x—Q—PñŠÉjËòÛÛÚÝ»þñ5 ñ•ñ†'ø}¡C6»â8æûT›ã†6.Íê 5½ðãÆºÎ©ªXiðÌpÅ$ÙšàÚ–ÛêI5Ök?,µX7é¶Ò¹…«:™w¯LÖïŸx‡áݤ‚ÒêW[ŒªØÍjCsßs`ô¦ÜlUˆ5¯\xãWo‡žÐf¾œ_ê7 ²$#°ö§^ü>ºð–§ –—y xÔK4–põoîƒS|@‡Å:Vƒ&—¥ø~&K³>=Û›œçŒ×;ð7LÕ¡¾¾»ø…®kCj»ñe™‡=p?CSk­vuÞ3ñMõÿ‡c¸ ûËy˜íß$˜íY2Ýø—ŰÇãZöãM±i¼¸÷ü€•¶?ZžñMލòøWO²Ý<̱ɨ6fTéÓÖºŠ¿ƒGÓ5­RÎKÍ.>d]ùº–TÔF>×<3ªêÖ?ÛúEÔ—Ë?¼k}Å—<àûÕñ—À^”hºÏV{Ø ‹æqŽ‡Ú½Vmcá¾¹ie£i%¹ÓahqqõCŽ™é^?¯ø7FÐüA{â¹–i®ç1YM2–*ƒø¾¹5¤Y/MŒ_|@ð/‹®?¶!ðåÅœ¶¿2ØÚö<úZÞðÿŽ®üqµ·‹üqw¦ÚÂÞ݈¾ã¥G'ƒuM5Z*ÉtÀCæc|„÷#°­-Ã~&Óõxtû{²Vnf[drRj¹¢M†|^×­õ=2×CøIá÷·Û<¶êÅ™8ô—ð—Wñ¯Â{Í.íâîöò}ëegŽzšïl>.è_ "Õ,¼/á+/|³—{|Çg=‡·5ÆY|Mñ·ˆcñúKÝÜH?woD8=sÚ¤­Tø‰áOÚ7â·&¯%§Ù-bµóä‘c;†GלhþÖU®.¾(j›ahX†ˆÏ5¡wûp|rMn{}A"‡M]¢hZ> {ÖŒ?<ñ²ÂKo\I Ì«û·Ž?•[< ›jRh¯à/øOZÖeÕâÕ㸱±µ?g³Q÷¤è oøÛâuŠË­ê‘®›¤‚°XG Q·œœw銆ÿá/†´;i®—Å×}šÚîk¨b!Kb±~Yøbþ+‰5‰mnŒV9BòÆ‚’ØÐ×´M Fk}É™mò˜÷qaë5×®õ›[e¹òÚfvÔïRÝZhõÍÕæ´dÓíþa&[÷˜ç>µÏø›SÑ|Go‰u«¯±YÇ6-laS¼¨éJ÷Ü%e±ÜkVšOôówãc¾ºš?29!9ÚOjI>"A¥xr|)Û‰¾òŠÉ¾ñŸ…üWá;{=Ð'A#ÛAëøÖƒ´Ëßxéã´¸X¬í׿ÜxÍ)>ÅCÝÕž‹­Ásâý¬Û,W÷Ó0³{W«ë?‰£¼[Û·´ÝÄ’+ÑÞfX÷,_u°ÊݽúU˜.¤„ögÛý+^¥_¹÷ï‰g?‡Ú–—ùøPà Û¾Cý±¿eÛ6u¹Ól#šÞAЦqí_nëØ¶Óæµš}¬ÜŒ¶÷¯.ñ7ƒ5¯¨Š(¤¸…¤+æF €=yë]q©(»ŠTãVÊo_²ž¥dñZÚd*Ÿ»;«ç»ÿÙbÞw¸·šÃl°·Þ¿mü{û+ø[Vð¹¹)^íʦФ×Ë¿eû+ÌÕF‚ƒl‡yîç­wG-–Ç•[(ÇD~|ø#ö{ŽÞ94kÛ6ë÷ÿZ½/àçÂ_ÁºƒÕV^›yô_o®µ6ŸNÒ™™›àw£á‚¾0Óõ£Ú<²)l3m5·71Ã(ÔÚÇ©~Ë¿¯4ù㲿uùÎG'+íøšßZзù ûå+zb¾IðÀ-{CÔaÕ'°“É«giö¯§¾øZá-b·TeÝ2q\xŠktÏ[Z¤}ÖG㯆‹®Lú­¥²2˜ùb¿0â¼wÅŸŒ:‹Eª³*–mËÊŽÕõF·k&ƒá¶’êÝ[rúr8¯˜~&üL5ä‚(BïÎé$<ŠçŒe#Ò•H¸·cÄ~4x.þöÉlÌ mÀÅ|ãñÇÆº‡4 ­bl‘©àü§+ß>6ünÓ/4ùR$ FUºûׯÿü}§j÷³[_K j$-ºfùúõÕN,òñc}%ƒÅºµæ£qw NûØìYj»á]WX¹ñ s¬Y1¶pµã_‰~Ñ]­4ëèåšL±àâŸð³Æ—ÍøšH 8½kzœ´é˜Ó‹«.T}aà ½B^ÈØÛ˜×ò®¯Á¾ ·Òîv¤;[¯+÷³\GÃ/,6qƒ.S*ŠïS]X \M'ÞçŽÞ‚¾G>i;m•Q8®b\Ç¤é­ Mò²’öæ¼'âŒ~ÌÒ:¾í¸Û^¿âßÙê:t,à2‚UqÞ¾}ø˜É4výâ+“ µ´‘íb>Ř:į0Égq õòóú×”|VñE¾£)òåRpÛ”Õï^Ëi#Êp¿wÐyG‹¼I4âHDó/ã^æÍQIt<\F"TãË#/Sû …Þæãå}kGáɼAâˆîZÜH €»OÆM=äÂÔ)ÜÍÐM}Yûü1›TšÖêX~븯ô¯b¤GÊÔ—´©cëoÙ3áÕ¾¦Z³Û(ùq¨ÿ&½£Ç:lz¶žÈ‘n`¸;ÖoÃßÛhzvIÞ2ÜWFÞ\¢¸¾NúW‹)¾cª4íLù3ãש|ù.’6Ü#ÔW‚ÝéW¶Zƒ@å¾ÿÍ»ù×ß_¼ý´³ p»ú.:v¯™þ%|>M+P’ ¯~y•vP¨ïfpV§Êqþ´xm×t9ÝÕ¿­u’ªEæ~e8Vú×;§²Ìij øUïí#$Ÿ¾~:s]R1È»f‡âÎÇbX Æ ýzW…R¶sê1]_Ä?‰¶¢Ò;»+……œdíÆ9öõ¯:×YüAk5Þ‰¨¤‘y$½«Ë—´­SÝ[·4hÓ³g„øïÄÖº%ÎËfn~Ñå¯Aôõ¯øŸ«µõ˜ºÒ.^8e“ ’|¢3ë]ÇÄ}gâ…†¹soc¨Csk †9$hÁRÝÆ~•Âéÿt_ŠÞ$¸ðÔÚ.õ²Œ®!·Û¹‡SÎ=ëÓÃEÇsÇÄJ3{œ‰l~*kšÿËå­´EæÜئkç?‰?!ð¼óiÚŸ…5o”·—ûÃå?çÔWѶÞ9ŸÂ×Z´7úkZiq‡@Í–™ÔtükåÏ‹:ø—â9•½à_ˆ×Ÿu›OF×+u æ;%*´Oc]¼±kÝ8ùŸSÛþ"økRøs¿‡> xöEK15µ‰aG{×hŸl-µ›'I×tèôÖù“^éÿ4‹ì=jß‚—Pý©~-éž¹¾ºšßPºÿH’y¾d,rr}VÔ¾i^øÝ«x{ÃÚe®§eg+Cn&ù¾pvôö4£Çâ*üÆôz?мygp<á™ÞmËk¨o/zÎÑX:À¯‹Ò¢j)gkorüZùÒ+cø½€¯AðOÅëßhiÚå”wVP˜á´óÀR=vü)žø•âŸêí¡ÛÝÙézƒa!ŽIá9'æ'޽i6ÖÄû§sð;K£'ŠõÛ‹É#ùæû:—ÞÞ€}«'@³×îã¸ðµ˜mÁ&â9áùÈõoAõ¯|±ðLjôAk}g­YÇå±=¥ÆùÎK»ãùի߇W9‘µëÍJÇOÓ`\嶯Û{±<}êní¨;xËÀþ ·Ô-ôïíµºšýô •záG§½Y²ðxª(ô¤ÖZvÿ[8X°sêI®‚Oâ­{Rž[%¼Ùp±­ç §M¾Ëè{šôŸøoâÃ[ËË-{K]7cˆté•%™²1ÆAÛëÅ5° y êþ¸ÿfI´˜ši­Ù•Èì8â¹_k¾!Õõy¯Ž• qÄh£_—o¹ì^'¸ñÅÝ”þð|n·ŠÔ .Û\Û²/¹½Y±Ð/ôï 6›Þ^_ÌFœ|ìÃÖ®=ØXÇð«à™¼Co¤Ç0Û%ÅŠùŽ£éë]ü'ŸôK™b¶ñÔ×ú|qì³·’2¬2:{sÖ¶uÿ—RÝÉs ZØÇÈ’)EÆ#Ž¢¯j³Ç„•<Ñž Õ>ÝjöãT“È’é°“/tÏÝç©®ÇÆ_¼{­ØI{ð®ò!bäù6±"î9îqÈ5Êx“ö\Ö#+¥YÜ}ŸmªN²Íòä-Ï ü,:cÖ®\Øx¯àµ´Zt»Aqq!xn°Ç¹9ôíG»Ñ‹¦§ ®|øá½RÜkš~ØÊ“5×™÷Ÿ©Áöþ•GÂSÝkþ36bêÞÏ*°²â0Vbx5Òx§Å?|a©üŸhÔíb‡ËbðºGîÇnµ³àxHÐN‘ã[-ÐßH±Ãm¦¨Ý1Ï$·aUwÔ^‡[oâÿø?Á×úí¿ÃÔÕ/g‡ËÓÕaRñ×v5ä¾¶ø‰¦Í©x‹P±¸°†âÕ¾Ïаåséž½«Ò®¾&h>Ön¼=¤ü'Õ®-®¢o±[\gzƒJÛøq)ñŽuáoh~‡q}nw]koq×!7c9#š˜»GQù^‰ñÀÚv™ýã}JãVg¤¸Žë-}:‹Àÿ ü)â/¶­c«^Og$Ÿr;¢Xç¶h|Rý›<-௠m¼ø¤Ýk—Yo²éˆÔí–õ®OÀ~×|7%®¥àëÛéÕšY-xhÛ ýEW»mÇsÛ,þ&hŸü@ºF¦H‘Ú©+Ô›YøêwZä> þÖ'Ž5Èí|?¡]M}n[¸î *üAzVœuŸ³ïˆ¼e«j³GâÍhü¸n2¦æÜ¶ì÷¬#öcñ7Ã:ßSÓ'ßZÒXGr2Ç(4f¦1A©‹cñÏã«â¨£Ó$kÇP#‚mB1µ}ˆÆ+ÔüaûWø§Ã“Cø±ák[{émDPµ®š#Á#®@¯шþ_Zϯkžl—W[y#%P‚ƽ«Hð:|x†mKM¿mSmºÿ¡ÝGò«œ©ì=é¿tv¹äþ4ø‹áíÝ>ûÁ·PyÞ^û—lådÎqZÖß¼Câ2æóÄÍ ¹ÿF’6;‹w8ôÅuÞ1ø5ðSÅþ<'¤-ˆ,ÚH/ìÖLï•_Ʊü)áD´Ô¡Óuû«Š!‘£Ly#=ÅèÎá7À=3㇅æÕ ñGöd–HL03mk‡ëÍO¤x3ÃzN o>-k og¤0[EÖáþ¦«YøBóÁ7žg†># ­.52³)!‡¶+‰ñç/|a­ÛßêZÁû ¨Üöñ§úÌõ&§ÉBÿçÔü¿Â¶>J²,vvq¶çPz+‹ÔüWñ–_ÛÙëòMo0UE[…ت½¸¯PøK ãu¿xZ×KŽêmö÷׌ e±[Ÿ´·Ž~j7K¦è¶ë} ÉoG×Ò«™GDƒÌæüI¦x¿Oµ´ƒÁÚsj2Û»ºŽÊ£ükÀšÖ½‹aðGˆµ_.âêèæ~hÔåZžñ¯Èš{=~_³¬j¿gýc`p¿…sÞ&ÒÜü<±ø/ˆ¼_{‰îù¡ìr¾-øÅ&¥ãmO\ÐK¤Žá–—î¢gY•rüU§è~(‡û+Mk[vòö zÕÿŦ}–mFÿÅÞKLßê¢<Žj üs¦|BXìµÍFÐó òÆï¥ZÑn-ôÛ{¤Ó|7[Éò£È2Gÿ^Ÿ»kæaëòAkã:;¹.#`ª·C9®Áüy ønKi¢½’K†e »þçNkŸøyö][Z•59R&\¬-Þñ—ì~œßXh¡a’£×ô®jŸ 7ŒµGºx¡-íY<¸òòo={V׃"(’²õÇ5Ÿªé2L–ò¼¹*¸ó¸ÏÒ´|=&Æßx½|-XÛ%n§¡OÞ’:¶xvÑŸ½Üô¢3r#aÏð·¯z®×\›ŽæÝc–1º]±×17ü'c¥m†aªß,kòõô÷ª÷ßïu»ÙJ½Œ|y{ºš“Ãm©øšw²Ötöl™Ye1Ò½IS扌%(˜_ðÏšÿަiñ¡ Ê£>OÓ"¯hŸ±”ºŠËaâSË.N>€û×§ø?ÆÚ'ƒïcÑïncÛ3aq&qõ¯E—ÄZ0}®KØÕzý+jz2WnÇ'ˆŒ¹cŸ6éðN¿ è×bö×Ëb² ¶» /ØßÀÊï4è¼Îw0@¯H×þ)èº~œoìncG?+g#Ú¹)þ"ø—[ºK1ÔFÜ…Î? ªOH¶Ìéýr®­%êf_þÍz1²K;;dM¹_–1Ò©Ûü ½Ð<¹ì-rŽìÿ:ôkúåÓ˜µx9õ šë „Á沌õ4ðñ¯y)[ÔΦ2¶\­'èxŒ¼©êzY½¡ßÐ¦ÚøóöŽøO%¤3‰´ö…•öçaç'ùWé¼ñiS&dy®?â7Á?‡Ÿì¼­_O‡rsæmæªXY-SNÆ´³ë&®:ÿµ–™ã­{“¡oÛ’0§q¯|R¾*Ô"¸ݤіÜ|Óóg¦zþ—¾:Á)¾üD‰µ+)Q$êv¨Á¯›~+Á¼#­øvâÛJ°¤ù¶·–2’r§ñ#XÓ…xÞ-3ùÚ¶Ñï¡ñ—{$ÌÛ³$ò=k胚m#kH |¹<óïÚ¾ø»ÿƒ}>"Zi†ŸæGæ…¶vô©¬?à“Ÿ¾ë‘Ek¡¼¡ˆ Œ¼c¡¬1¡k˜*>ÂzŸ;ø5ïl£R°²†lçóö®¢\‹R±þðu÷Å}¯þÀŸ|(‹,¾fYH  žõÆë±WÄÛ›ÿ+KðåÒ’ÛX4xÏÒ¾~¦¤ªZÇÓSÄR=Ïœ|Cñ–l$»U›kÀןüWšö×Lͳì†Ft`þUôgŠÿà]×Â7M×,ËùyéU~$~Å?¼+àk ^ðÝÇ›'ú¶òú6+ªŽ•jŒ*cõÑŸx£]mO̶€–‘—žIÅyÖ­¤Þ+•½…ÁÈ# zW¹ø¿öBøå¤xª6¶ð]þÉ%ùdò W±h¿ðMÏ‹þ6ÒmZ÷“6<,žYã¥z˜zj1÷O3‰ö’HøÛá·‚.5¯FÏjÌö¯|{×è‡ì›ðâ I†Y`nIf^¾ÕÉü3ÿ‚t|Qð'­ìu¯ÈѬŸ+þ=kíëÙÆ~ ð„¥¶–å| J¬~Õž#ÛTé±ÃMG˜æè*±¤gåYUKì*6þîÚŽÃÃ:õƧ%‰Ó¥ÝWžjóx?^†<.—*§#;kÎå“ÔêæåE{¦Šê"8_—ïq^[ñSÁ_E$ª»X/P¿¥zƒé—ªVIí$UTû§·jž­¡ ë=¾WÌÝN9§NFu¡Ï£ãïxVãLËÆÛT|Ÿ/ÍXN’®ÕP?;}+êÏ| }{Mb,™ZD%WŸjðü&ñ>‰pñG¦Èv±þÐW£ JÚž\©ò½NoM_³:´‰ó ¬­Êû×aá ˶RBYN¹ï\í§…¼Dˆ&›O¸Ä||Ñžks²^ÛÈ¿h³t|¨Q´óOC9jað˜íÑæ+÷p¡qÓük¡Ón®muÈÊ)·iž>‚¸Í2æå­aao°¯RÙ=«nÆ÷Qظ…G’Á¶žõZ"¹}Ó×<3«'˜ÈU˜þ`cšômÔ­¤ic1oŒ†ó>î1é^[ðëÅžµ°[ÿ]-³õm7õ®ÂÏãß´ø¤kÉ#hU?rÍü~ⳬå%duáãûÍžcñNÓµ Ë›oÈñÛ37ÙÑJò7ö¹½ÒVëÂÞ ‹t+ä>:é^ÃãO|ÑüEý²Þ!T¼¾„¿Ùæ#`S_;~Óÿ<7sªéÿð¬^Þë^Ö²¶6qÿªŽXñÓTh(¢+ÕR–ŒÇ‹¾"¦Ó´˜Ùa¸i¤ÓÒãsNÀðqšäþ#k—Ú]¶¯ j·>Õ.˜mü…ØÈ{1ÿׯ6ÿ…gã?„¾/>3ñW‰¦Ðõ <ņÕ!.¬Ã‚Hô¯$O|Yø¥ñ‘þCãù.,U‚5Ôqð«œç8¯FwFyò¬ã¹ï:§Ãý[ÄÚøüepói;¥ºkû_*ÞuÆHÿj¼—DÓ>2xËÅm{igöëÆKkÕ˜ÇÜñ·'+ß?áLëá+}'Pø¾55¬Yöéí¾xGFQ×ñ¯3ñ—ƒ|Câ¿ ØøkÀ>,’Y´Ë¦˜ª¯’ó!€3ÔzWm4g-eÌ®lˆ¤øu6µ¤êvÖ:žµ%˜…5&Q'“‘óÇ|z×ÌÿtÒlZmç¶­Ü—®âÜžÜ×­k t½.}7Äš†­©ZÝ}Éó+*¼ƒ#îïŠÙ¿ðF—â}9üE§i§OÆÂâ;ÿÞG6ÑÃ)×Jîs[[#|3ø¬ü3ñ}¯‹´[‡Žkf%v¶3Å:×â/ŠcñÃxÆÂêCy5ÓK·–ÞXäƒëšƒÅ?l³Ö/­$ÒÒ5 ¿êxž”ÿ 躞¤³ø’4hí4À­s4\2äàcÞºmtfúšþ'¸±¿Öîõ[Ûi,ï.-üÆÎo–Oörsø›áv­øïż†iÔþûP¼ò‘T¹'œzW©üý–|3ñfXï|yâ“§i­™µ@U¦•º” ÍX´oÃφ ÔâC®µ­ºÂÑiv°¶é%ÛǘØäj\¢ìŽ‹H½øŸý‚ÞÐ|G¡Ú«7”ÆIŠúäu>™«Þ3ø)âý“ jZ¦µ1š1ö«É®P€{㨅yOÀ¯Œ-𖹓¥[ÚOÏÏÚ¡ Wž¹5÷…ü=axñë_uhâlV{ÂØPŒŽ¹ü+ž¢hÒ<½O#ðÇ‚¾Xé—²ñ5ãI ¶¶wGËŸhÈó Pztë\.·¡iñ„Ïñ&Á¤½bck»‡)Hæ3°àžÔßÚgÅú-·Ž–×àÝ´Úm®¦Í­â©_4µ›'œgŽÜæ¹] à¸×«qâO\Ü4*&¹¾†ø8e?Ä?ÙÍiN7äC=›áÞ±â+'û_Á~±›ý?ɹ·’C‘ðÉŽª{ÖÇÄÏÙ®ëâF½jÞ;ø­‡afÊ+­+t«62 ²ŽTôɪ>ð?Ä3áúÉáoÙÞ4r/©n"y!qµA áˆëëŠÌø¨úÖ“{Ãè¼_5ö·o ™žó{46²JR õ5->aß¡“âM ÅüGoðëÄ‘o}²öÿh›ÌKœ)ãîWA¦ÚCuy£Ùi:f¡áý^l Ìl[ͺ¹ï…ž'´¹Ñ >.ø“åjVë²Y5kÎ1<èlü¡]iÏ©økÅPê÷ŸgšãíQͱ•Ð’T)<ñè94[Ý'­s_²O…ךt~3gñ-¼«äŸ'Îk¤R~Pœ¹¯?ðãoÌux£K´š îÞ×øÚô>էᯉ³lüSý£zúö“$‹q äj¢V꽎x¦|tÒ‡Ä;}?ÇZ&µu“7ï®tøí¼¦y°26èS6ôy5ÍHÖ5–¼oì8Ù&º“oÆÔŽ4Æryt¬¯|=øac¡ê^!×t £¼µÌ³ÓüÀË#ŽGLW+ñ?â.‰¤øyn´Øä³YþÇl7ÉmžíþÙçÞ»8tMÀßS]ðÿ¬õD¼”¡³™ËŸÞ¤“øUr“Øó¯‰þ6ÔüA£ÚÙYxˆM,—">ÓNVó¡rAã ûþ‹£ü ø±ñ ãd×Öº•ªµ[¤(×’NsÁú×Qû8jþ&ÖµIµ­+š}ÔúlRºß\F|»cïÆ+¼Ò;xŽm¯ü6tÆcFa›‰§vsŒazþuèÚOÄ?| ÑuøOÀ²\y‹Ü:½ò… ÐÌ«ž¹ÍQñbØ|@ñävÿå:oö¹/i$Ã|–lvÍzå¯Á/‡ú‡Xü`ø&¶6ÿgÓïf‰ÙÀà;Aªß`<®Óöûñ=Þ™¨éÚì㺼¶e’i”¸é÷ˆ‡Z¯û=|FøŸñG◦뗃û6ßt³LËòF™ËœcúUíOà<¾ŠöOèø‚O!¾Ïu¥ÆÌ³Dàã<|µ_á£â¯†Z4×o…n¤¸hZ+èmíÃTúŸZZèßµ^…ðÃ]Õ„ÞŽ5¾hV ™¼ŸõjqøŒ“õç>ñ—ÆO€Þ:þÀðŒ—ú\Š‹nvÈéœs]1ñ·ˆ¼Qªµ–á‰.‘mÑ®-ä„yÛ‡V5ÖMãŸ^|=Ž+θ„3U·]Èþ}*9бÄ뺎µâêeð‚ØëY$Ìm$Qæ±ëÆp cøƒÄW¾µ_Í5•äÖ³<ð0ÝµŠ§?áM¹ñ„âñDž(‹Q’ÚkÈx¦>øV7Æ=BoŒ6+­Ét©%šýž—Â*½Ͻ5ñSá-t«»ë½zò{ÈþeU‘ŽÒONþ´ž*ÓÖõ94ùüJÂâáv5Ôø ãñ­Ïèÿü/  }O^†K·lư·Ìì=jšßÜC«èÖ·]Hd[Vä®:dŸzËøã?øûɼÖm~HfU†&çØW x¿Wð¶­jn!¥¸Çn¹+Ïsë^sâ‰M0† ôtV†à„>_,=hZÞÔõo†ž ÔôŸ 5”¾[uhTI* Û8àŸzó?xºû]…Æ›5ÍÐvÝ ŒíUö¯Bøk5Ä#x¦ë\·K"ºµ’O˜.:Tü3âï…^ø³ ¶»?ö–•©g{y?s=ª~ÐýO1ƒÅ~(ñ&›g¤.ŠÑéš{ofò¸?S^—àý;Nñ7…—[¼Ñÿ³tÛy°Ñ¨Á›ó]GÅmš]´xu™¬î$i济0ÏáÈOãýBðMæ›=“ù—,v6kÑy5RÕX#¡ÑÛiß^H4èmÑ~Ñ8Aœãs\§‡m<8×K¤Jn.—·ÞÛŸzÜУ Çâ-BÊ8tùcyù£NõOžÒ|Mw&½à=VI ·‘WËVɓֳ½Šåf´^Ñô-Iu |Ëy¶%Ç—Jgïì.4Ÿ‡¶·ö¶>7vw‡¸ÌC÷Mëž+Î-.5» ¹´«+´–F‡>KÅw >"i¾ð•Øñvœ$‘¾D£#Þ•‹Œµ<Ïã„îüâÿíBÖ¼sÐÕÏüEþÞø{¶­¡³ÉŒoò†oë::x‹Á“jëªÇp³]&6“,¼ô¬¯=æ’$Ò¼Cb“BOÊ›zS¼EÊúls> Òî|E4v~…íûÈ#þf½iôO èÞŽsTVºUÈ ØÃ{Ômô--¯ÂÉa’pU'ᬟø^h´æf»ó¤fb»»Ôé)Ò±ëŸ m<ãù7G%Ôi¶<·'«ºøáïø#P™ä¶¼q´zWÏnåÐî–]JðGµ¸]ÃÒ¾œðŒtÝCK³±·V¸™°Þb‘•úÖ5 csÜ ™¿±¡¸yq¹¹ö­mê9ùda´ÌËÔúñXz&‘ªÍ£ÆJVþüÅnAjtµEÃnoáa_/Ž¢£‰æ=ŒæHÖûZ够”üËÖŸæ¨ $˜çîâ¨=ÈÞ«ƒ7ð‘É^õ#^ÞQŒýîš¹öÜõ Y¤#÷½óè~•"O÷†7 ßÞÅg¤ë+816ì¯øS¼ï•LE+ó;æ«™Æ$ÊïcÿÙPK!­ÎY’°xl/pivotTables/pivotTable1.xmlÄUMoÛ0 ½ØtOÏb iS¯Å‚!hºî¬Út,@– In] ûï£d;ßÈa;ìb[ÏÔã#E‘Ó›*ä ´áJÎhïªK ÈX%\nfôÇsÔùB‰±L&L( 3ú†Þ„Ÿ?M þ¦ì3{°€”Kn‘€ ™43šY[L‚ÀÄäÌ\©$þI•ΙťÞ¦ÐÀ“Ø\ýn÷:È—”H–£—Õ–¼GIÌç1™QÔÆŠB||/óWÐQM·ƒo•NÎÀ‘’öÄvŬ-Oð¹à™Ã™?yb³à›ldžâfÙ+\ô3úÂD‰ù!e0$/mZG”ä\>AªÁd.eÛ?460/­ª¥XŸwäåò•æÒ>s+sê9;¢å2A±>ª´‚»#BËæ{âü:/…å…€ˆƒH".0v¤ìÒp*TÌüÑiHgôkòíš’”kcð€@?©wÏî!Ççt±î”p>‚°. ïÂX•N×]øJñ°Ï–ÿòªL¦Þçwwwÿ3Vq̉{bˆXô;qáÔÆ6¦!ÆäR5q·‹¾ £]ø˜üÓ@ÊðÜÿÀsá{—–ƒ… §Z½f±‡SwtÎåгlm¼ù㉾pZyg(?É[#5ÀU x¹ (q£ñ’£Ÿv[€(gk¾˜Í9C+]§l_óïO«—œ…¶í,Öü€_7ïßU!DF¹6Ô|ãp%D[4fn@K‘ó"-}/ÂະEŒF‹å|þYP–3éFk~I§ŒV=x;¼©‚jªØ¬” C%bS‰MpÀèäèQ‰tÚù"¢|¯¬’EŠúœ+:‡:†ÛHç!欗y(‹ò `rNPÈ’àÛœ÷ͽ°{hQ{~õô’ìÉEÈú¦òôiES)š#Íð‹í@“)œVÇKe¾ok¾¢1§‘`¿r6N¼[Ъõ*¡0J&x™€£7pŒ²Î'P¤v' ©Œ¬$’ÙÈŸþSÉËWaI{’Yúò†EÜÇÙkm'ö[ãšÝ£íã6¿ÿ)öCueèéêÿ’6ÅΦÝyÖ`nùqwž\Gí ú§M‹…G¾PŠn<ÈD,lqºý²P3æ6ìMÁ§”³Öã-ùPÎnrCÝ =¦jÎ4íìS¤l·eó€ ¿WóÿÿPK! µŸÞÒN xl/styles.xmlì\[ÚF~¯Ôÿ`ùõÅ+ ì¢FÚ¦Qw+õÕÓõÙC©úß{flƒ/ø2f! R6ØxÎ|ç:·ã3ü°slî«åÈsG¼t'òœåšÞ¹«ÿ×ë¬7à¹î°=×ñ{+à?Œýeà½m½¬- s@ Füã̓ æÚrŒàÎÛX.ü²ô|ÇÀp鯄`ã[Æ" [E±/8rùƒcV!âþÛvÓ3=gc`4G6Â{J‹çóáÓÊõ|cnÔ¤fL›^dÈ;Èô½À[â; 'xË%2­,J]Р4.=œém]<â5 Mzxxs½oîŒüŒžƒïÜWÆ;/Œ‡¦g{>ç¯æ#~6é‡Üv Ç ›6šûˆÜ\²÷ám™Ü žsðGn Li<Ü’§r:Ä  „$²ìl!øWÔig\Vì8ð%9ŽÄ¬²é“j6Õ"Û>X›J nŒ‡`õØòÝ\pÑ÷×ý´ì‚ƒ†–AŸ;óôÊ7ö’¬Uox6Z«iÒ˜gð©}Í£»°vÖbÄ÷©@„`b¶UÀö \#â{â¦ÃGè}YH¢: ŒÔA@€”çž¿€ðwðê°Þmk‰ÁÐ}´Z“ÿ±·¿scãá+Ï5lâŒq‹dKˆ›"G¼c-ÐÖ²a8é$ÕGÅv€¦˜4vQ‘8•*j'hšJ¿Ž†c¡Öæøftè£"ºÐ®Ï›uCtÔKsÑ2“Ãk˜°Ä¾Å¥>¢…Ž\Ü„…³¦~žÑ¬ç²ÂÐ@Èmüµö‘Å&®ZÃF2^ZÜ–‘ƒ²ë Ž¥tÈg.ŒÓQ6G¡•ÚUz%b™Q.•SºÂRS€•OD¶w•óUÇé;®ÜÚέʠ^~$(Csãÿ¶Xc2—ùÉrj_¥kÎw¸§sQ'³ýt¡ùg™à~Ȩ úºì±L ×¶ïÖÓ›ã;­;Aîã㳂eõõùìm ƒ‰Åä[ñ9Õ=L‹FÔstneg…•”Jwâ®p“ÑÚ¼C¿ÒÈô‰Üí½…‘ï&çPU &çèÜÆô£¾4Þ5h4SiÕ$“ŠvÛAîI§=Ç ¢«ñØík˜>TQNÅGº>“×RB»3tFv~. †q ®—ÓQ第ý²KÃ~4 O˜ä†YsM͞ќq,´Îf›åqüŒ°`¡hnÒLÔl”" §¦eÛ/$5ôïå!íTCß-9wëÌü rg!Ÿ$xÇ_!i6úf˜†à E$hŸßˆ36{ÿyëÌ-F“óioô.I*>^Mhjìñú£V®cÑ\>$óÅ÷°ebúòM’Ü…¼&ؼ'iÌõùävË6 Ç­CÈ$SŸ$ê‡W žHî>dá‡,rkÏGßáQ’ÃOSšx°[6’x>€ííGÚ“yî¨r@}B‹*,f&V}å ®˜¡£4íºÔRH3ÔBÓb‚Ti‹Ä{”©Ê”o Ý™†2´[iˆ¼¿¹Uä­l)¥ýŒLj?ƒ»•Õ÷™j¶×:Ó~†v+íÃk]­‘–Œ1!íÒ8S4Bµ‰—)ßÎxL¥poÂgù<÷Í76¯ÖŽŽ¬…²èŸˆØ…6談'[x}„¼jG”C!ëá« 93‡FlÀ–KÑPSƒ­HMM5/Å]ŠÌ~të Ê¢dð¿ŠëPHÉìâ‚ )™•\EÉX{A%cô;g¡¤qŒj=è§#)3ê·š;I%q¼Áà&·žß¦˜•K"kt­×Gitl5+³Õ¬ÌV³ [Í*l5«°Õ¬Âvyª´^Ÿ¦ìNa»|RZ¯ŸÒèØz…ÂÖ+¶^¡²õ •­W¨l½BekÆ*ã= ¶^¡¶ö `ï¸C%g˜m·’&Îx¯&Mœñ&SšxFÊ w™T¶‘He‰T¶‘Hc‰4¶‘Hc‰4¶¡CcØ4¶‘Hc;>kå^Aà¸'qÆ•:á:œ q¤ðшÿ êÖø6rßâ0œùÙPä…œ÷ h夸´,jó™YÙ‰­›Dƒ“(À±Ø¥ÏØà:®™”*ɤO¡&S˜ÞÕU:­µµVN ßLï§OôX(¯Â@»¢ò•â]F(¾…‘IŽ™ÂƒaÈŸƒ=Ç?= Õ­ÈF!øfr#’#o.EGpÿlŒ–ûg#ÀψTç‚gƒµ}õfˆÔÉá9Rq ŠyýAªÜd)JQ‘¿ !LŠeÑãȃª ÕÂZ[¿~ñÇï¿Ó‚6à•ÑS_Ⱦ&%1âߟIÕ‰Êøy È üÏm}4âÿ}šÜëO3¹7'ƒžªXZO×&=MNgº(‹Óÿµ»ZTî¢Æ`«URê{ù³ø—㽟¸áSqì$v]î‹5IìÍQê©}cÐô­7Ó$ù±¯Nž´™–À®5Ã.‰‚$…åÑxí#Ç_‰uk(y”—%L±&„cù¶ñÿÿÿPK!!ÛOGõ%xl/theme/theme1.xmlìYÝsÚ8¿™û4~o Ð)éíMš6“ÐÞôq±…­"[I$å¿¿•d@ ¢IÚÌÜWyH°üÓ~ïjW¼~ó­ää–JÅD5HÚ/[ ¡U*2VåƒäÓtòâ8!JC•$+ª’7§¿ÿöNtAKJp¥N`Z×'*ÅeP/EM+|7²2?È$Ü!Ý’¶Z½ƒX• J$ûq>g)%SC29]s|¬´2 )—7†4 vXl¶h„Z©—äø A>™¸›Òo:!”ƃ¤e?ÉÁéë8i6q½g¯·ob?;fC¶8´Û0mO:ýWçúÀõ.n<Æí = €4EM,>ÍÎä¸=\Óô@îë.íQ«Ûê„xþÑŽÌýápØí7²8¢ä¾vvðÇ­^çì0À[ÃwwðáÙhÔ ðäð½üäU¿× ñTpV-vÐÆ¡“IC}™ þ. ?Føq«oQ ›è2,æ¢Òûb­„¯BN`€4«ˆ^Õt)FñÊ™d`À ï[JÕÎ’áET*Y­É™„YâA¦¬¤Š| wäZ”P9"ÁŽwt&Ÿ¶cZ v@´#¤Çº€VÀc¸!­rŸàg‰¹¾]~ d½)äR³ç‹¢ €—Bð¡Q\^¾É–Ug.—>îà6Æ{•òqãeEgíÓÀö£‚b^q¨4ä´¢š˜wbAiD»/Œv½d©JÌ5ùÂÈXÔ$S6ÃJ¶´í¦w¬D¿¬b:£«Û\~&CÁcZŸÓÛ hE~Jy`Æ·°ÔPÆHN¡ä¾ÄïA1!oV2 ®4z:§\qF•Šíù(Q_Ï€éuû%_•!Rj¶ˆÑ|BøÈs±PÖQ™YUøØ?ÔCÈ•Ð1ø¥3Ä<£ ÚëîÏŒî~¸|by Ò6@Ì›¥Œøò-a>®ø¨­2XƒBW²ê{U3,{ÏVõΰ„Æbï~­Û‡ûV¸sXVWƒÊžA•ùUà~¸ä?_àöåòó—µm%Ã"·íôlßWîmûæŒó½âô½²ŸÂúMpѶ¤v.ÙŒu_›&3Àåì"…þ“é⦀»Æ¶brÕΩ…ÂiÅ.ÛqŠÞ£m$†£uº¦ v•C¾™[>ò§ ;ûäv¢Z3:2ËìèÕÏ1k;©öš-T­mE³E1Pm£2úpW5\ÜX‚íZ¹‡C§‘»mà43vw“àÚ-†õ³ºHÑÆGFï]µ­“Ö±²£ˆÌäò€»ÎvkïýŒ—ÖãÚÖK&oï¥#¯üää¹$ýîa7!)ÔƒdŽƒ~-kôº2½ðo;R-]Ø?˜Ì6\·ÞìÇò³·³ûŽÂA¨¥Òç  öU¼²c¥•ÿ°‹f}.\¤ÿ€GÇ ›hÇеt>§©öí­Ø©ÛšR*–šÊ›"»#3¾”×€î7¡ŠúdLá¼m+‚yÀË!cmû*,ÎMÒùW2çÖ×4åÖ¤è:“ÜæñFû䤵â¡nQÙ­rOWŦü3©â‡ñÿLsžà”¤x7)˜|$BêB`ª –N$^ÛØÚÑ‚Œøƒ oHíIoÍ—sކMkÄô5ˉdxéBRz…eÉFßÄÚÍÙåHò†(O\U;±gô–ò©©=s¶'¤ÀP·Õ¤)w?þÂç&ƒf¹irþ©Kæ§¶¦;p-–ÛÿÈ^¤ã}ï(èGÏ>ÛSmÊÁwö'µ®bíh|Ø}ôQ[ã= 1ðüc2åîºÝ¨Sqµ•àí¹k¯Fõ ×xS ]yœaãä]0R®aiºÛgo£ð޵ét7|1K¤Ó}¢±7ÍYÈ.ÈÅïwŸO3vcáÀÖ~§15&íý5íÑz±Ž±¿Óø?¥ˆÙWtô9^Z/¹Vî²úÞºá”ᮽ1ùsíÖÓ¿ÿÿPK!²Ö½öÁxl/charts/chart1.xmlìYmoÛ6þ>`ÿAúmˆm½8NŒÚEê"E±t ê´ö–h› Eª$Øýõ»#EËv#G}°nmG"ÇãsÇãsÔÓgë‚wTi&Å(Œ:½0 "“9‹Qøîæòä, ´!"'\ : 7T‡ÏÆ?ÿô4fK¢Ì´$ @‰ÐÃl.)‡Ý®Î–´ º#K* o.UA ¼ªE7W䔼÷z§]«$¬/PP&üxÕf¼œÏYF_ÈlUPaœŠrb½d¥ǰ¸œ÷ÒàŽðQØ »ØÈ‰X¸*NÞM]£’+‘Ó|"•wä‹lxÁ UTM¤00[µÎ¢RQ·«ò$“E ÆÍgfcÍA÷d)aÁ[úaÅÕ£0‹R<~EÁ2%µœ›hì:¼7Pí {Ö+Àb£t¨Í†S· ¨ãj»Ûy­ —„óÉn›á­hÝÁÀQÖýø`˜áÔ>¬ñW±l9~J†3™o®U ¤A'ºÌ.™ÒæŠhsMÄKbôš7ð3çò~RÎÁ‡L»v@Aªap¯H9 õ‡Q4 ˆÈ 3Ê¿L ¼G¸F2äÚLqéö¥Ä–òZៜÎß‚5ú#ˆ¦=°gf­böw5 lÜ.ŠÝÂVrjŸÂà‚†Èv V|F4å ·TüI†Zr–_2Îí î:áÊ¡oÖ‘•á«âµÌ]Ûi¿ꜽ«âÍ|îšßÜ•^ 8î` w˜MIç°Gᯅ8áÆ©£ä ƒב郎LÛ ðÀØi*¨,^ ÀÂ=^ñû… ÍøšÂÑ$cG8Q\ö¡|° ’]ª°Ü,FS‘c8 sæƒYÀƒ]Qð`l€q²‘+cwµ„Ø×½®«e‰.q( 4qÛŠ¹m¡ó9ÍÌ•Fe ÞÄi\Ìüˆ`L ßa·ˆ)çcŒ)Ÿ½ÈÊÈ|yA95´Ú«ÕñQri.%î(ÙÆŸÎˆcb‚ǩͤîݦ ”˜'^Ãi@•;rîˆÚL$—{Ç „…­” Y¾Þ‹e©rZ%’ÊÝ\1ã³þ fH%r›ivâÞžoÛ<Wν)fX:>c*ãÔ™­ÙÇê8éW Õ.;–ûH–ÁÁi3ó'IÌšÞûfÐF-ÇW®­—µyO 9gC±*ÞÒ9>ÍǯÓSR”œþòäÅ“x?ýÓ€íÉ $le-šÈœŽ_R` ˜A¬n}¥™™0¹¾€GÝ1‘ ïÆQçGÞÙlSÚˆ)+<%°§×‰›DâJ$êô›D’­ÈY“Hú¸ô‰3÷´IËi%ÒhìÀ t,¦-ùìqcÏ76Â3øä"î1xxx ÚâÛèFï1-߸ŸïýktZäñ>âûÈCÞk†<ª1O—PƒÞèþ¸½Ñ½q›®cºy.z¯“6n:ª2Û°n”¨QnD'ö(ñDìQ>¶™=ÊGV•x”„mÒå¤Eh'5ÊMZwâQ>²ö¤E4'uî½û¯1å$5ìîK<ìZÒù$­óI´o\#viíƒFãRïƒö‰!õ.‰›…ôóóMÚb'¤;j™ÆRï¡fôëmq çf}&»{”ã?Ýu!¥Yî(äôŽ×äW3®-C[Êû+º†ø=¨ hÂ~-mb~'EÅ~< ƒö)U¶_S…´ç=ÏW³§Ó-‘²ªÀ­idýª"Ñ`Ãÿ³Ôq­ƒŽ$SU,üxÛ…­‘ucJº@(¤b`§½‡Ëú[}Q¥ñ)+òÄørmüªdrŸŒo?yCÝÎÝ~·lò µùtå®q+Jý!W*&Ì”øh´°´|I \*_B©D•eª%Yàõ‚ m¿ŠuðJ¿œvaŸÖì_üˆg;Üp|KB8P‹{Ùê‚ÉV¥«O&‡øª¿<ÿÿÿPK!CŽòê xl/drawings/drawing1.xmlÌVYoÛ8~ÿ@è¹±.;Ö ‘‹¬ÓŠ´X§?€¦¨ˆ0EjIúH}‡‡|äØM³/û"‘CÎ7äßðêã®ãhC•fRTQ:J"D‘5Uôãþö¢ˆ6XÔ˜KA«è‘êèãìüìjW«r«o¡K˜VQkL_Ʊ&-í°Éž Xm¤ê°©zˆk…·Ýñ8K’ËX÷ŠâZ·”š¿<ü´3ÍÜÉÌVÎ)çׂ´RyQ£dçGDòYqÛØ¡S€Á·¦™¥ã¬˜î—¬Ä­*¹4ìpÙõ,/ÒÌkÀ’ÓpÈsF̦ùkv§—ù+†³ü‰å4I’Mî[Fnî(ê0Q²Š‚ÄæóÑâ÷à"r·ù®««h!ZU4o±2(âp‡»'Š w×}p×(ð9.eÓ ]Ar=Ú/(á’î "^H©ƒ”ÂñíÞ0¼Á£µbïÈ bï—'¥…,#ïF oJz¸=#ôF’uG…ñ™¯(ÇjN·¬×R¥õºúR§Ö9ñÉçÁÛÇ‘ á °­ƒ†ˆ¼P'"Dkf®uA]ÛZ ™qZ&“—Ó5¿Lÿ˜$¿U'Ådš´7ÔÉ¡NÊsšŒ‹×ìfé¾ OË$ÏóAçIJ-“Ž”×ÜP%°¡s) ø0D¶{SntX­Öý‘]á\2ÎÌ£ ðžÇÒñ³ë”¢–^ì³c`FPN“80œnÞJÈôý{Í…hát"õÊ;Ê{ÑS€ÒÿßåýïÓ¼¤À1šÓÒOBAð޼@‚G^úÍÒŒ÷!t¹v‹9_b²ògÛ³±î÷ôŒ ð"gbuDÕ‹þ9A•z‚> ߇KÝ•d¥‘÷ö Ê:»ã×òî6~càíºvvpù„µÇy:.²‰ãîÊ8ŸNN<-²¢HàD–dzI6Na·§±ªWÚ|¦²CvDG‰%c\âÍWmüÖa‹kÉY}Ë84g\Ú…9Whƒym[fh?ÙÅÚÚkþ³úƒ¢TíåÈÒ’Ö°ÚèüìüìKƒL {äkÔÁë®a^ D±‚Þá.gH6ꃅa^y+Õj)å Y}7§“Ün 8¼5wJD°Ò %EkMë‘mlƵ3ðŒÁ-. G»‰¶R(›¡Vüì)K¿±ë9DûLýÿÿPK!K˜rëPíxl/drawings/drawing2.xmlœTÛnÛ0 }°ôÞú’K[#r±%è^†6hÖàd91&K†$$N¿~”d'[–ía/6EêQ}+É^ÛhÅhv›R"×U£¶Œ¾}{º¹§Ä:PH­£Gaécùñâ¯Lq°+C@Ù—ŒîœëŠ$±|'Z°·º £µ6-8\šmR8 u+“âYõ 7=›¦$½„žGQ|x„ë$ïqÛݽä÷zâÛî^#Yä8Ĩe \2díV Dqp¬éw° º|Uü·A­ZU¬Ýˆ¥é· WÝs-ûrÿx÷PËîNÖ@2Ë\<Ü÷«Ô£ÊRr±V|ÛˆÖöÒ¢fÄk*ÙŒt&š‡Ñ_ ŠíZ8Q§ekáÞY&ö«±C„¶ZæøO8[2?MVS²šÄ$½,çq:IÉm“xFWtõ×í¦q¶5ŽÏêu'G©Òø…Xɵ2ª´W\5A?÷(~˜›’À‹íXcâ‰ó£Ç!t ¹YÕÂòÊ…%÷wd?Kx¦ä:)›ÎÝ1Ë¥¡³ Æ@‡§QD#:Çè®<šÑ0vøqÈG”Ìæ ÷MÃq±S§ý,Tƒ\\Ã8ž\¶nûÁÆß¹,¡b }S«=ÒÌémâ÷yÇ«Z÷„0Îá~iß²î*Ö/C5Ôçvãvx\Ïžº#’'¤§À‡Oê組îkf٨׷x³\x‘Ã8œ&Ó r|]O,„ÎÉ”¼ÚB Ö‘h^@“ó’Ä`“j–Ïs˜epáÅ„ ŒXèãѧ¾½å‘g¦¿3éqñFð³Øs¢ˆqÞÒ(¢i¾+ÅZ3!|„\;5é=Wè'á>6ÏC'æ‹øQ†©ìb<¸/’k¢T|ž‹½Ò,·7,³û̼†&Qþ"½ ŽT¯uL¸4'×I°|“/ÜY*œ?œTG¤¬GVïÒT1ªO½+÷vO«¦g:ü ´~(­†¦ù•ºÛŸlt꺥·í@8Ù”hj3ç¬}owØZ}£€ÚíӾ꡽Tãìm€7SÂÞ É ´iˆž§× ôJ?H“œ«­i]°¾#hNöv]¢#D¶èºHN¥ ÕÙ[Üï‰=òרÚý¸µ²Ù¥¢÷¼µR5ÔºúGsÊÞ².“®ÝòáúÚí¿ÿÿPK!§¨ýnxl/charts/colors1.xml¤“AnÂ0E¯ùq ­"¦ëŠ'MlbÉö Û¥p{œPhC!Á;ûë¿ù$/ÑWHšÜ&µHFÛøàkÖ†°«8÷Ø >5 y’!E2œ¤T(xãà[Ù-/²¼àØ‚ =…ý`à…vÂÆ’œàSrÛ ÃèHÉJn@Y–Úšáµ`‰jj–glµ„ªO#>´Kö kˆÂ†œñ‡Z1¢ÍF´ùˆ¶ÑÊN‹+݃SÙ›kT™OjÎ Ê,žÎÃÿš†ˆ[ÏûÅÓ£ÖRžQq}ÓQOŒ¿FŽŸO¿˜ày»ß~ö ê‰ö×ÈÃöštäßïµ:ÿÿPK!í=ÈJü'xl/pivotCache/pivotCacheDefinition1.xml¼T]o›0}Ÿ´ÿ`ù=@iB©š&‘*uÓ´vݳk.Á¶‘m²TÓþû.¢f[ŸÊ p¯}î¹ç~$×;Y’-+´JéÐ (Åu&Ô&¥ß׃)%Ö1•±R+Hé Xz=ÿø!©ÄV»[Æ XB.”p@LÙ”ÎU3ß·è”Ìzº…ž\Éþšo+,³€“¥Á•/™P´C˜™·`è<–š×”ë@ ”¬ab QYJÌLd)5wÙ¿!7€³ÅKJoJØõLKæ0·(œ„¡w5 ã0Ž¦Ó˜Ž4dOƽK}£êk‡ÏžK8zFÍq®Mv«kåR:è<áhº6ˆ{©0ðOm~´Z ÷ø½?¡˜Ä lHýyâ÷®ï±ÖÊ̾qÑšIwÿ*V’{PWP¢j¹–î¥iøØ‚ÈîÈC9¬ƒ})>‰dH+Šmqt9Ó6GÏô¹–Ï€5C•Qˆ'VÖš^œ=zÙnïxñ)›–i?™3ÖßEön¤Ã>Ç  ð7Ê_À½·ÐêG]¯¼ÉÿuíH¾§®wÆ2ôÆo¨~\àºùg»¶c5jº˜lSºfƒ»ˆ³½µXpÚž~ÛMÇu©M¿×ú‡ÉÚ¶³n²æ ìܽuí›ÔF¤ô×$ß¬Â›Õ Žâá š>Ã`.¢A´ZÄ“h}; ¦ÑïÃ:Û £W M n´Õ¹ó¸–~·Ë^¯ÅØ»Å8Odvq鞌ÍDwK cBÚþ¥{ó?ÿÿPK!+5èÿFYdocProps/core.xml ¢( |’]KÃ0†ïÿCÉ}›´Õm„¶Ãvå@°¢x’³­Ø¤!‰vû÷¦«!79ï›ç¼çl¹—uð ÆVÊQ€â¨Ô6G¯å*\ À:¦«9:€EËâú*ãšòÆÀ³i4W *oéÃc¹BEB⛤!™—ñŒ’Mn?º¶gï»`CAŽÍÿ'ÎC²“yIRêÏñ(2|ñŠÿÿPK!-Ó^exl/tables/table2.xmllRÛNÂ@}7ñ6û®mÅ{(ʉŠ0´C»É^êÎäïݶ!ÙÇ9gΙëtþk´Ø¢'ål.³ëT ´…+•­rù½Z\=JA ¶í,ær$ç³Ë‹)ÃZ£jK¹¬™›ç$¡¢Ftí´Ù8o€Cè«„PRÈF'7izŸPV Uær"…ÜWiˆJE†ýÇèq“Ë—ìù}’ÊÙZv ¥½8%’ÙÐÙ«Ó­±$ ×ZƒeAÒ·<}Ùl,kšJ v š>Ýn kÔ¡—.–ç~½ìf”û(œ¦›"fp;ÔQún¤KÓß »(ý0Ò?„ELN:¬{K1úi¤ÁÄè,¼È ¯|4ã¸Øüúd³‹ÖÜ?µ½wrr:è‹÷ßìÆþD.UUsWžj·[(O<3—l ÿPè¡K ÷üb¯ _z€ÑM»†FfÿÿPK!ñà/¥Æd$xl/pivotCache/pivotCacheRecords2.xml¬XÛn›@|¯Ô°xïñÞ¸E¶óЪPµ€l[²ÁµßÍbùÌÂâà(yâbv‡9sæ Y=þ=¯eÓêjIÑ¢¬¶õîP=¯£?¿~Ë¢EÛÕ®8ÖU¹Žþ•mô¸ùúeu>¼ÖÝ÷b»/•ÛºÙµ »RÕ®£}×–ËÖÞ9-Õç²²wžêæTtö´y^¶ç¦,ví¾,»Óq©„H–§âPEý Íœ5ꧧöüQo_NeÕõ‹4å±èì{´ûùÛú¥ê֑ʣͪ٬ªÅ«=‘Ñr³úûv(ÞŽÜE™À±äcMùõ7ŠI®gðp`qóvmi÷ÿY3†”#ºƒ¢ìŠÕQÒ!ÜUwœëëVš2ÞW‘–9þñ#2£c¨!ÎÇ´£jPÃú^m«&%Š÷ÎÉ!€Ž=·ñà.Ö;]z}f^£x >š$“¦-ˆw+BáöñÔ3Q9#( ¿fŽ0rŽ•­3 ‰6‚$sr×F]•7‰T¨'R“ÿì6ŒQ_É4Íý!™''ö{A%¤Ç+9¦¸*{è}fè@ÂiÎÝ0'öm »ßñã!E9~=]Û•ºž JS ³T£Å€-†7h¶1¨4u7SºRÀ©ç1#À’„I@gÏ´ø=¯ÎÐíúŒu=|G¡Õ\ß6&£<ëó,( -c@&h„Öf¯[+†ÖIÏ©¡N©Å‹êù0@­ n,ÁôbàN… [“í+F¡Èà `ÆZŸ3܃I14¿áxÓXEÀ÷\:L1hŒ@KÒŽUSFðÃÛ0F^­/™fЩ ~žM±TÞÙ‚ D™P9½ï˜ÁìÈnÙá8V‚ø]s®ƒíu–e9À>.dX]!K¿•bb€0N%H9†V ”¥¦½Ò%”1öÛ®0ºaƒÔšP ÓˆŽ'2ÑeÌ$cH:8HìV\ ƒa&‡˜œÌÜÉ1v'L#ÐP"Ó¼™»ÛŒýÎb)±Ðü+¦ìHZ˜*Uöi-çh8žì9£6døº" uK îPº˜éy ]/%fȼ˜b©&ò¿m²w£Lö!By iƒð¦c¦F%L†g–¶ý­é dÐc!!uóGP }%=uÃW«"¤ìâb3@8ux‰1èö4LkyLŠ=ñx¸ýÍÅpÖêDG¼ì¿ï/³Ü^†¤gþìeÅÉ;sÐ.GÿÙüÿÿPK!…§Äã²v 'xl/pivotCache/pivotCacheDefinition2.xmlÔVKÚ0¾Wêˆ|'OC"¬–ÝEBj{èn÷n’¬Ævj ªúß;Ix„eÕÀÏñ7ߌ?Ïðb# g Úp%S¸>q@f*çr‘’ow“NŸ8Æ2™³BIHÉ ¹}ü0,ùZÙ+–-áæ\r‹4&MJ–Ö–Ï38)˜qU gæJ f±«ž)5°Ü,¬(¼Ð÷{ž`\’ÆÂ@¿Æ†šÏy×*[ ¶1¢¡`³ä¥!Žð<%zš؆¹<1oSrYÀ¦5tÍ,úFÃ8 Ý^@ý¨÷¢~?&N†8-ä÷{†º­]íAÁå׿6+à0UË3¥ó+µ’6%aBFìbíV­tŽÝ–xòO¥¿×dà졽[!™Àw•Ùˆx£¡×Ú¾³5áPäÆÉš3‚`F=î4D¹ Ž\‰‰°SäÄÇ5fÉ4äS ¢Ú+-ÀÜ‚àŸùò;†¡Ä|8LY]gEkèËJ̃…ô"÷¬X!ÔÀw)öÙf×"79¯1µqïðeÛâMñí½˜J ‹˜OcÊ兀%é¬SÒ«¨[ôÐê×NµHÜÇæ)snÊ3Å Æ›œ´¿i¾åÛb}>Ýð4ƒº/ãÍ5³gb7tã^u“ÖÕ|*ü?Ï/p»Axý6Ø®KCê·¾:£Uy úÙ¹Ôƒº¨±Gõ@E~…z¬QìßPÜžOVÄ#ÞàåLeâ?»¦ß.> Gn11þæ£×7°–èF,þA˜3¦gïècõz^ËæU©ßøÝml]M3ÂÆ~2¶þwVš§äWv/oÂË›NB“ Cû3èŒÃ1íЛqÓÉUä÷éï}eµ èƒÚJðL+£æÖÍ”ðš²êa…–xIS£†hdðXýWU'ˆ¯ù­Qz-ýÿÿPK!Ê‹Á£î²$xl/pivotCache/pivotCacheRecords1.xml”WËŽ›@¼GÚ@sßá×+ã=l”ˆ’@x¼F2`kmþ>xpèêÀ ˜Ó؆¦»ººª½{û*ÏÎU5mQW©ð¥'Uåõ¡¨>Rñû×çá´]V²s]©TüQ­xÛ?}Û]ŠkݽgùIýTyÝZ§Tµ©8uÝåÕuÛþ—2ke}QUÿ˱nʬë?6n{iTvhOJuåÙ ‹\}¯óÏRUݤQç¬ëëhOÅ¥N^V]*bOìwÍ~W9×T$2îýÈÍxŽe8ž}¹½¿n÷{·“Û?ý/@$#]#ÐÙ“ÁÍÿ?ZÉô8य़Ò9Ç™>Ïg†¥…R¿jx\b€siÉP·~Drk*Ùbë„tÂêKGßcxn ïõx[vˆ¶âtåCqÐvÂ&03K\ ±XRX8ψ%À1¾ŸƒAÍ`W xke&ʉoDÓ:1€Aw|hµ=!¢þx ‘c/'`ఆ̺Çö±cL‡Iƒ` 8Í,“CÑ4ù«›~‘´ôƒÈêY'ª‚½A²’TÝi³4·«‰bã&’’±×äÀü ‹ÀnZz;ŸZJ~¢ö¬±ÐdÎ4—Ær*ð8·$; èZW–atÅ61è4ÚÞî2Oß[9ãÄ€|ÑìX­€‘€áH¹,Èé¯Å‚W÷eÃöÒðŒsAÿÀøYE”¨µ"³¢SKm9³á‚¬ :OU œ4jñB:æÅˆùÃÚÕ5• äü>4q‰ ³Ll1ZùÜ\™ܨÌÌ·˜êbçñÞ0Âü`E5/4hüý+¥7t‰òò¥ÏW?âÏÌŠ›ö2Üÿ8-øð}MšôˆI'Œh“ÕnžŒP£¢b<¶3àk©ýÖ€àšnÛè³l]&‰}$?¬6€Ø#ïÌÿ$ ÀtFgÅÅüËÜÿÿÿPK!Ê‚a#Á32xl/pivotCache/_rels/pivotCacheDefinition2.xml.rels„A‹Â0„ï‚ÿ!¼»MíaY¤©‡Á«èx$¯mØ6/äÅ¢ÿ~sTö8 óÍL»¿Ï“Z(‰ç``[Õ (Xv> ®—ãæ”d 'dàAûn½jÏ4a.!}U(A Œ9ÇÖbGšQ*ŽŠÓsš1™Ñþâ@º©ë/žн0ÕÉH'·uyÄÒü?›ûÞ[:°½Íò‡ ýÂù˼3YNN Ó@ÙÀ›ÕTe:è®Õ/W»?ÿÿPK!â+{Á32xl/pivotCache/_rels/pivotCacheDefinition1.xml.rels„ÁjÃ0Dï…þƒØ{-;‡PŠå¹çim‹ØZ¡UBü÷Ñ1¡…‡aÞÌ´»Ç2«;%ñ 4U Š‚eçÃhàÒ¿¾AIÆàpæ@VØuŸí™fÌ%$“¢ %ˆ)çø£µØ‰”Š#…â œÌE¦QG´WIoêz«Ó+º7¦:9éäPýKóÿloéÀö¶PÈTèèïœ÷XæÉrrRà˜FÊ~YMU¦ƒîZývµ{ÿÿPK!¼Ûù à'xl/printerSettings/printerSettings1.binìSKJÄ@}IÆn¼@ðÆAÜ‹É"’LB§f;š†tèDžÉ¸t9Gpá ¼„¾ºŒ¸p#XMÕ«î*^EU…5BHÚ‚7…ýžbŠ'Ô1ñ&Ø~Á$ŽçuÏìÖÄ},|Ÿ¸ðÚŒ\ýÀhG™~ð>RúT‡o”M†8ͰfuÀÃáóÓw?l Á_¨îŸâ¯vàs®\ýkj•ËKçàÕÆžäи†åžtÔÎöøî„ˆ™©qG7ÿ"©â,üÑVuÎ+—­²•¾WÈ)ÂjÕôË^›e!¤8O%„êÌêvx‹Ëô,ŠpaVÆæ¦V˜ž^µíW}ÿÿPK!å kFgxl/tables/table1.xml|Q]KÃ@|üǾÛKª•&EÔB¡ˆØŠÏg²I.wánkÛï&ÑÚàÇãÍÍÎÎÌNg»ÚˆwôA;›@<Š@ Í\®m™ÀËz~v"²¹2Îb{ 0KOO¦¤Þ ž¶!Ѝ¹‘2dÖ*Œ\ƒ– çkEüô¥ G•‡ ‘j#ÇQt)k¥-'0aUÍêëV”_¹QûÇè±Hà6¾y˜Ä È‘2áÙmW•Û²sö]ñô ÝÆNÕ†Ü\B/ŽÇeÚû¿sfSÛ 2·±”À„'º\=Þyã]½·6ʈ%Ú’* CôÄWÿÎ;ÿ|BŽðàÅø§àäà°ÁLó}Øœ<Š>C­hopa w\v.uYÑ5š»œk¨ÏßµÚbKõj›'¯äësE-«: Ñ·ôÿÿPK!ªVåÙÖ0xl/calcChain.xmldÑÍŠÂ0ðû‚ï殩ºî.KS‚Ð/Oú!m!% ¢o¿9XY¦Çù üg†É÷£Ù}œ°^eÀÐ*× ö&àr>.€…(m'µ³(à‰öÅâ#WR«C/ËR‚ úÇ_΃êÑȰr#ÚÔ¹:odL¥¿ñ0z”]è£Ñ|“e_ܤ(rż€rlð L§M€¿¸šx‚šBC¡¥pšÁçkÖÚRh(Ô* å ¶dJE¡¦ÐPh)œf°¡·Ph(Ô* å?àï_ÿÿPK!?¡“ ZdocProps/app.xml ¢( œ“ÁnÛ0 †ïö†îÜ.†@VQ¤:`Ã$íΪLÇBeÉY#ÙÓ¶QÇi{ÚâOýøHJêúÐø¬ƒ„.†B\.r‘A°±ta_ˆûÝ÷‹¯"C2¡4>(ÄP\ëÔ&Å9ÀŒ-¢&jWR¢­¡1¸`9°RÅÔâcÚËXUÎÂm´Ï ’WyþE ”P^´“¡Wý¯imχ»cËÀZÝ´­wÖw©9›"ÆŠ²o ^ɹ¨˜n ö99:ê\ÉùQm­ñ°fc] ä)¡îÀôCÛ—P«ŽVXŠ)C÷—Çv%²GƒÐã¢3É™@ŒÕ—‡!ö-RÒbz€PI.“C8¯Çn©—Cç…½ÁÂÂ9âΑü]mL¢wˆ—sâaäq~$‡[Ó´ž‡pbœ"$Æ»ZCÖ¤³Ö¦k ­YÊ6®‹ô¦÷aœÜÅ+îŸ.<á}»‹·†àe/çIµ­M‚’W9ímJ¨;^Iò½Éº6aåKÍ[¡EãWÑ—Ÿù§œÈ,§äéSèÿÿPK-!‰K¿T„)[Content_Types].xmlPK-!µU0#ôL ½_rels/.relsPK-!ç’ -`Àâxl/_rels/workbook.xml.relsPK-!žñ’¹Û…‚ xl/workbook.xmlPK-!óÏáX Š xl/worksheets/sheet4.xmlPK-!ʱ7ÌÈ#xl/worksheets/_rels/sheet1.xml.relsPK-!“;‹/ )0_xl/worksheets/sheet2.xmlPK-!ñZ& ›*Äxl/worksheets/sheet3.xmlPK-!§¨ýn 'xl/charts/colors2.xmlPK-!Õ-1œÂ%P(xl/charts/style2.xmlPK-! qMÉ -xl/charts/chart2.xmlPK-!ƒEÒ¨¡ôí4xl/drawings/drawing4.xmlPK-! ŸDÓ ü/Ä6xl/worksheets/sheet1.xmlPK-!°†9/c#Í@xl/worksheets/_rels/sheet2.xml.relsPK-!IuÒ³#=Bxl/worksheets/_rels/sheet3.xml.relsPK-!ý ÕÂ#PCxl/worksheets/_rels/sheet4.xml.relsPK-!Êz!ÓfDxl/charts/_rels/chart2.xml.relsPK-!&íꇻ%#vExl/drawings/_rels/drawing4.xml.relsPK-!"è²ÄG)rFxl/pivotTables/_rels/pivotTable2.xml.relsPK-!Ô.»¬É­#}Gxl/drawings/_rels/drawing3.xml.relsPK-!€ÜÒ‡Hxl/charts/_rels/chart1.xml.relsPK-!Dôß¼%#–Ixl/drawings/_rels/drawing1.xml.relsPK-! A êÄG)“Jxl/pivotTables/_rels/pivotTable1.xml.relsPK- !€iÜÉaÉažKxl/media/image2.jpegPK-!&º¼8 ™­xl/pivotTables/pivotTable2.xmlPK-!ª{Uƒ<4 ‘±xl/slicerCaches/slicerCache1.xmlPK-!ÙŒ?¤ò‚ ³xl/slicers/slicer1.xmlPK- !–ÄI  1´xl/media/image1.jpegPK-!­ÎY’°ƒQxl/pivotTables/pivotTable1.xmlPK-!œ+#êÚüÑTxl/sharedStrings.xmlPK-! µŸÞÒN ÝVxl/styles.xmlPK-!!ÛOGõ%Ú^xl/theme/theme1.xmlPK-!²Ö½öÁexl/charts/chart1.xmlPK-!CŽòê (lxl/drawings/drawing1.xmlPK-!K˜rëPíPpxl/drawings/drawing2.xmlPK-!åF;0åe Örxl/drawings/drawing3.xmlPK-!ž¼u¥Ú&ñuxl/charts/style1.xmlPK-!§¨ýnÀzxl/charts/colors1.xmlPK-!í=ÈJü'ð{xl/pivotCache/pivotCacheDefinition1.xmlPK-!+5èÿFY~docProps/core.xmlPK-!-Ó^eü€xl/tables/table2.xmlPK-!ñà/¥Æd$“‚xl/pivotCache/pivotCacheRecords2.xmlPK-!…§Äã²v '›†xl/pivotCache/pivotCacheDefinition2.xmlPK-!Ê‹Á£î²$’‰xl/pivotCache/pivotCacheRecords1.xmlPK-!Ê‚a#Á32ÂŒxl/pivotCache/_rels/pivotCacheDefinition2.xml.relsPK-!â+{Á32Óxl/pivotCache/_rels/pivotCacheDefinition1.xml.relsPK-!¼Ûù à'äŽxl/printerSettings/printerSettings1.binPK-!å kFg3xl/tables/table1.xmlPK-!ªVåÙÖ0«‘xl/calcChain.xmlPK-!?¡“ Z¯’docProps/app.xmlPK22J…•openxlsx/inst/extdata/namedRegions3.xlsx0000644000176200001440000002411114155600363020161 0ustar liggesusersPKܘ‚Q _rels/.rels­’ÏJ1‡ï}Š{w¶Dd³½ˆÐ›H}€˜Ìþa7™0u}{ƒZ©¥I~óÍ7CšÝfõŠœGŠFoªZ+ŒŽü{£Ÿ÷ë½kWÍ#ÎVJ$cʪÔÄlô ’n²0Ø\QÂX^:â`¥¹‡dÝd{„m]_ÿdèöˆ©öÞhÞûV‡÷„—°©ëF‡wä^F9ÑâW¢-÷(F/3¼OÏDSU N»l/wù{N(Ö[±àˆq¸T³Œ˜¿u<¹‡r?ç„®þs9¸Fþ¼’MéËhÕÀÑ'h?PKfª‚·à;PKܘ‚Qxl/workbook.xmlµUÛnÛ0 }ßWxB^Sß7 âiÚ Ömh»öY¶éX«,’rÛ°-'™‹fY1l‰DR‡‡)zt¾.¹³¥™1ñO<â€HeÆÄ<&_fÝq´¡"£\ ˆÉ49¿­¤zN¤|v/tL cª¡ëê´€’êY@K.UI ŠjîêJÍt`Jîž¹%e‚4†ê->dž³.eº(A˜Æ‰N F¯ Vi2åŒÃc“C«ê#-1ì)å)qÇû°?+'¡éó¢šáé˜ä”kÀD ¹ú”|…Ô`F”sâdÔ€æõvG^¸O" *kÅ#ƒ•þe¯EëñZ*öM Cù}ª$ç11j±eÃ@ KYîë‹z ‰Þ)×OLdr,Ѧµ_ÙíËLŒÂAo§»6/LLþY@C“»ú¢bÒ÷–3¥%±^(f²ä«%LÈmedk¶[a/Ô"½:T\o2d¶}bдdš%#VC†u“µÇWh¿…Ž Ãƒè … {Ña Ý;‚îD÷ZèþttµÐÑ]°,ÑŸÚ2ìî>ƒœ Èên~)9ùBØ.Üwqãi/6Ì×VyGÅUË›7…l¡ö½?nB{ß™tüaç¢ãÜÉß0ÞnþÄü6.ë÷Ój÷Òûÿ>|;}ø[z÷e±ÑŠóŠPØ)S¹ødýú +Èoe†~'˜öÖ¾l+_7õ‰çùuGÁÚ|ÐÆ®ÛÉË%î_M_Îͼµ£—8 Åbòý4 ¢é ºÁÄ»¾Õï^„½~wv5›á ™^NÏf?p [¯CüM›ðµQøM¹ƒü~ƒ£pÝŒä‰ ÉÅSÍ¿ÌÝMÐñOPKJ“çߌžPKܘ‚Q xl/styles.xmlíXÝNÛ0½ßSX¾IK)cJƒS·ÝLŠ4iÚ…I¾$þ‰lž~vœ¦ ÐM*“ÖJ¹²}òã“[u¯8C 4•b†GG!F ™R‘ÏðíbþþFÚ‘&ÌpŸÇï"m*7€AVAè.Œ)?N àDÉ„}’Iʼn±C•ºT@RíHœã0œœPãH,ùœ¹ÆÚh!ä›o©§Œ¼Ü¥L­•/ @†ƒ8 8ʤØèœ`Ä‘~B„Y‘Е ÂÁ/õ á”U; )ˆÒöí<­žÄKí ý+MS×DäðªÈÖLêÆ¥OkÓcÄQIŒ%æv€šþ¢*í'vMy™ºî/Õ¹"Õh|Ò!Ô÷NªÔ®áîúñJ)É¥ ì¶œáŒ0 ¸…>ËG±ãˆAf¬°¢yáZ#ËÀ‰#¹í¬9nj¯Üvìô 0vã6Älóö¡]e/°¨vŸ9ïM×+5R–¬šK'bÔàS]Òƒ.͇g…WJHL½Ÿk8ŽÈºRÑ'+í>`Þì·ý Mäß#+s- ñ*ÖÓ£"å‚mˆT¤õÄö™.÷ 9§ícSÙÚ@L&÷®Mõ"ëT«ìYRá&§Ñ®95>ŸÕ…»I­—Áá˜f¶˜Ùyo f3ƒ™ÁÌ`f3“ã}ú¥œŒöÊÍd¯ÜŒ÷ÉÍÙ6tïþ0ß9ÇïzŒ_e/wý¼Ñú¡éßÛ¿ûàÚdHmkjA³m;ÆÛ-<ŹëŽþî.’X'¸»%e† ? ^.%çd]?:鎷ÐÏðWKšöHÓWIK¥@$UË9íq&âôæúÐã¾Æ»•ØoÐRÎzͲ Ó6w~ñoPK@‹B©8PKܘ‚Qxl/worksheets/sheet1.xmlUÛn7}ïWû§F+9v|ÉJ#WMÇ2,§úF-gµ„¹†äJ±¿¾Cî5vQõƒ,ÎgΜ¹(ûø³RlÖIÔód6™& tŽBêÝ<ùv¿z{–0ç¹\¡†yò.ù¸ø-; }p%€g Ý<)½7iêò*î&h@“§@[qOG»K±ÀE|T©ôh:}ŸV\ê¤A¸°¯ÁÀ¢9\a^W }bAqOô])ëÐ~ŠWá Ë”jÇgDñªñôx³ãx•Ì-:,ü$Ǫ¥ö2Ëóôü—<«ü5Ä*njó–€ %·•JúÇÈ1YdüÖ²B*ö+ ªKÁ•ò¾ƒ øo&úý=Þ’¡s§‹,m/2!IÂPvf¡˜'—³‹O³p#^øKÂÁ¾3WâaEüjÅ]Z)®¥²z[·Æ;<,Q}&!¨³ÆŽ¿ë VîJbx …ï!=ßn@AîAŒß­k¯(Èæ±Ú¢ê¼V>P ph;ûžÏäT‰&„X‚R!Í„åá'Äj“sE"ͦÓÑù&>n r^óG¬£,­7 Ãñ!˜î4)fä5< NË"aœ¬{Ø çæ)s?Ú‚ õ Àãï]iV±c¨Ô­¤Âw)|I¼f““³ó³ãw§'½NT•Ï4'÷Ñ„û‰ªÑYZý±úö è~$4¶Q„&¿ô-Ÿ+îù"³x`T‹ tíÄ¿”B€îÍíÿ ÙPõ7.ôG×ôy´t1*=vdÝ/¦Yº'¦y{ãÓ˳þFJ¬»¬š4Œ•Ú¯M\-¬¤^¦u0ôþnèûçš¿®K´ò µçjIû ìÀ:,]/ó—Ž´â¯Üî$Vq:¦“Ó³PIÛhÓ©©âÒ>9:íÿH×-zòßOšeÓ5_{ì»-avmcl}_‚^“T_+I€¸Àç‰Aë-—4%[Åó‡K-¾—Ò÷û‹Ñº튜ff‰Uø%paÜ5Ùj«ç캾ëkqeäÎüpỀ½}l‰û%ñ«%³\0~2‚_ du¦n7¸_ üLBPg?ë FlKbx …ë!Û¬ABî€? ³ª¤(ëûjƒ²GàP°Z:Ïâ¡éì;¢<•×S&jcRú<ã(÷w¿P€w‡qô€X­s&I¥Ùt::_…çO­^ÏKvuÐ¥õúiØ Þy“Çú*…4¼¾šùÉiYÄ#ë6ùyÙ_mE†‚yàñ÷®6ËÐ2TëV Rá‡à®$^³ÉÑÉéÉáÛã£^'*Ëgð¢“û`B“ý@åè,­ØØ} ;t?Û(B“_òˆ@Ëç‚9–¥÷ÕÂ+][‡Us©1Ä/ç zGsû„ªždÚ ’¥¹çµ´!*=¶dÝe‡i²#¦y{ããóGý„XwY5ih#”[é°[¢’š™öÁÐüÛ¡ñŸZh»N,шTŽÉ-,0£¶¦­ëDþÜ‘4Sü•™­ À2ŒÇtr|â+imº#5UØÚGÇýéºAGBþŸ§ 39ˆntNú Rkê[ f- HfG3RcŸ„«ºÚ„çq³mºæk}·Å‘‡]™›ã^Ý– V¤Õ× lðy¬Ñ8ÃMÉF²üî\ñ¥pý‹h_–EN3³ÀÊÿX?îŠlµ…åSv]ßõµ¸Ðb¿õ™tE,9j¡KHŒF®e)â¢(¨PÊ…§Î¼âüßÝÐÎYŠœ7;0{Í*ý~>_ÿªÑ½¿¥ík£+Ú¬7X1õÏ liµšÆîÍ¿ó4`:7O#û=T¤)GÒ×`ü½«Í*´ ÕºU‚Tø&¸+‰×l2ŸžÏßœžô:QY>‚ÜGšì*GgiÅÆFèK؃¤ûÐØFšü’GZ>̱,5xˆ¨^éÚ:¬šK}ˆ!~)8Õ;šÛ¿!ØPõ$Óvh,Í}8_Y¢ÒcKÖ}6O“=1ÍÛžß8ío$ĺ˪IC¡ÜZ‡Ý•ÔÌ´†æß ÿÔBØub‰F< rL.iaµ5m]'ò玤™âÏÌì–a<¦“ÓPIÓhÓ©©ÂÖ>9:íÿH×-:òWž2ÌäP ºÑ9é7H­©o5˜x€ ™ÍH!Œu~®êjžÇͶ隯=öÝGvmBlŽu[‚Z“T_#H€°Á±Fã 4%[Éò»sÅ¿•Âõ ,¢}=Z9ÍÌ+ÿS`ý¸+²ÕVOÙu}××âB‹EüϤ+Â`ÉQ ]Bb4r­‚HEA…R.8uæ5çÿî‡vÎRä¼ÙÙ+VéwËðùê{îÝ-m_]Ñf½ÁŠ©¿o`G«Õ4Îpovþ§Éã2†èE‰Â÷ëÛb¥É8O:ö¿îÙOPKq‡ “!PKܘ‚Qxl/worksheets/sheet5.xmlUÛnÛ8}߯ôЧֲݦ¹TV‘:õ¶@qÚ}£Å‘E„â°$e7ùúR×$‹E°ypÌòÌ™3§ÿT2Úƒ±Õ"žM¦q*G.Ôn¿]½9‰#ë˜âL¢‚E|6þ˜ý•ÐÜÙÀE ì".ÓgIbó*f'¨A‘§@S1GG³K¬6ÀxxTÉd>¾O*&TÜ œ™—``Qˆ.0¯+P®1 ™#ú¶Úvhø‹ð¸aJµã3¢xÑxz¼Ù»gx•È Z,Ü$Ǫ¥ö<ËÓäôQžUþb3wµ~CÀš’Û )Ü}àgi¿6Q!¤ó 9Õ¥`Òù4ÛÁÜwüî¯Éй“,MÚÇYÊIèË(ñùììÓÌß~8ØÑ÷È–xX¿Z2ÛÁãßFðK¡€¬ÎÔ­ñK”_HꬱãbÁˆ]I /¡p=¤cÛ HÈðGaÖµ“es_mQö VKç9P<4}O”±òzJÂDíc,AJŸgåþîW ðþ]= V›œIRi6ŽÎWáùS«×ó’Ýcti½~¶ˆwÞäq§¾J! ¯¯f~rZqÄȺ‡ÍpnžFöw[‘¡`xü½«Í*´ ÕºU‚Tø)¸+‰×lrt<};›õ2QU¾€×œ¼ó öU£³´Zc£ó%ìAÒýÀgl£MzÉ£ø- æX–
Ä¿œƒêÍíÿ ØPñ$Óvè,Í}8/¥ Qé±%ë>;I“=1ÍÛŸžß8ío$ĺ˪IC¡ÜZ‡Õ•ÔË´†Þß }ÿÔBó×5b‰F< rL.i_u5-]'ò玤âoÌì–a:¦“ã“ã£vd†#õTXÚGóãþtÝ¢#!ÿÍS†‘ D7:'ý©5µ­³$³£)„±ÎÂU]mÃó¸Y6]ïµÇ¾ÛâÈîMˆÍñ nKPkR€êk ø"Öhœa‚†d+Y~w®øÏR¸~E´®G»"§‘Ybå ¬ŸvE¶ÚÂê)»®ïúZ\h±ˆßúLº" –µ€Ð%$F#×*ˆqQT(åB€Sg^sþy?´s–"çÍ Ì^±JX†ÏW¿ktniùÚèŠë VL½¾mVÓ8ýÙ<ü;O“Æ#6dþ¢% ߯l‹•&ã<éØÿ¸gÿPKZL@Õ PKܘ‚Qxl/worksheets/sheet6.xmlUMoÛ8½ï¯xèikYn´©¤"uÖÛÒ8ˆÓ-°7Z¤,"‡%)»É¯ß!õ™¤(‚ú`‹3Ô›7o>œ~üQËèÀ 2’Ìæ$âª&Ô>#_oׯߑÈ:ª• xFî¹%ó?Ò#˜;[qî"P6#•sú,ŽmQñšÚh®ÐS‚©©Ã£ÙÇVNYx©–ñb>?‰k*iÎÌK0 ,EÁ/ hj®\ b¸¤éÛJhÛ£ý`/Âc†1՞τâEëð’·ÏðjQ°PºYuGíy–ïã÷ò¬‹—«©¹kôkÖ˜ÜNHáîG’§üÚD¥Ž›/À°.%•–£OÓ=ßr÷U¿»…k4ôî8Oãî埜¯ÂëO­^ÏKzMÐ¥óúiØÜy“Çû*…4¼¾šúÉéXˆ¢õÀG6ã¹}5²ß»ŠŒóÀÓç¾6ëÐ2XëN Tá›`®B^Élùf™,OËA',ËgîEG÷b†“ý€åè-ØÐ }É\âý@hjÃm~ñ#Ÿ êhž8FX ¯tcÔí¥!Ä¿Œq58ÚÛ¿ Ø`õ$Õvl<-|8¯%vÆ ž‹ÖCžÌÓø€T‹îʧŸ\I†+1òîójÑF(·Ña»D¶3n„±ý÷cë?µàö½X •+\YÜL÷®ÅsGÜÎñjöË0 óÙé»Óe75ãÛ*ìíåâtø ²;p(åϦ‘¼¡uƒV Š,‚JèvP=ƒ×ãþa»fQ?ãÈ}¸âä` o”c ½7[J8q—iƒ*œtÚN܇­í©áâÄ{¤ežWÔÎ3 ¹Ê$‡–=´ãÅà²u× Ÿ´8O¨üÔùˈ.$rÛ£gð½ÏBÐÛíË{¶×öä$¢ÿü–îk)b˜ebLìc–1Ì:1fÃT‰1ëæ11¦Ša6wýÌ’[l_¼ “iþ§çåÌ¢¦WóªùPKŒŠÙóæPKܘ‚Qxl/sharedStrings.xmlÒÁjÃ0 àûžÂèÞ:IKÅqh }m`­1Ärj9¥}ûy;Œ†Ž²~ÿE¦„YÝ1±ÔA½­@! qôtíàãý²yÅÙÑèæHØÁzûb˜³*_‰;˜r^Zó0ap¼ RÙ|Æ\.cºj^º‘'ÄfÝTU«ƒójˆ+åRÛ€ZÉßV<ÿ>XÃÞšŸ’/n(ÝEaLwûVk£³5ú;ôoð$ ÖR±–ŠTl¤âN*î¤â^*î¥b+Û¿¢.÷d¿PK MmËPKܘ‚QdocProps/core.xml…R]Oƒ0}÷W¾C)Ëæl€%jöä“a4¾ÕrǪPš¶Û¿·À`S—øvÏ=§ç~5^ªÒÛƒ6¢– "Aˆ<¼Î…,ô’-ý9òŒe2ge-!AG0h‘ÞÄ\Q^kxÖµmÏIC¹JÐÖZE16| 3SHGnj]1ë .°bü‹€£0œá ,Ë™e¸5ôÕèˆN–9-ÕN—AÎ1”P´“€à³Ö‚®ÌÕs¡¬„=*¸*ÈQ}0b6M4“Nêú'ømõ´îFõ…lWÅ¥ñ©Ê50 ¹ç h_n`^'Ù¥Q…>!~4ÏÈ”†3:!ï1þõ¾5ìãZ§-{.ÎÁp-”u7ìÉ ‡K&‹[x ÒYw’1Õž²dÆ®ÜÑ7òû£ó¸’:ªN¹GŠü0ÊÈF”Ü^Œ4t•5ìEû÷ÒhÖUqÛ¶Ù}|·ýL#p±¶„>=„>dú PK(—”)iÜPKܘ‚QdocProps/app.xmlKOÃ0„ïüŠÈê5±Ã#T•ã „8U‚C@Ü"coZ#¿do«ôßc@j{æ¶£Y}»3|=;[ e|OÚ†‘ ¼ ÚømOÞ†çzIªŒÒkiƒ‡ž!“µ¸â¯)DHh W…àsOvˆqEiV;p27ÅöÅ™Br‹L[¦É(x jïÀ#½f¬£0#x ºŽ' ù#®ø_¨êç¿ü>cá >€‹V"NÏãPÚÁ8í]WŒ“ä1Z£$–NÄÆ|&xù=BïÖÜ4íbcü~?–ÝØÝV c ñ )c‹Ç½±ºn9½„qzîM|PKºžn8ì|PKܘ‚Q[Content_Types].xmlÍUÍOÂ0¿óW,½šµ€JŒÙààÇQIij©ë«¬i Âo;”œSâ¢;5í{¿¯ÞK&kQF+0–+™¢î£d¦—ó=Înã 4÷’ÙFƒ|¯´)*œÓ—„جA-V¤¯äÊêüÕ̉¦Ù‚Î ûýÉ”t ]ì'×Óe颛µÞêz8Š®¶}A*ETë’gÔù2 UR‹3PÚàJ²wñ»3ì‘U-¸¶'_+h9?à"$ ïõˆ õªà1÷þ» gM©qwTøò’Ürž:¥uI^•Y<+µÀÍß^£¦òœgÀT¶‚­6@™-œ(qubA¹üFߺM ¶mõŠôÉ+€%Õ1hÙÄŽÿHÃŽø8íˆ³Žø8ïˆÑ?ùØŽ¥ýyñG#ÊÔ{pÆï¡Ö'Å>w“Ÿ¥­ß`Ž7ñ‘; cí‰À8Þ<¢vŠžúש!ì$ì³v/!ÕB¿PKÄñGoÿPKܘ‚Qfª‚·à; _rels/.relsPKܘ‚QJ“çߌžxl/workbook.xmlPKܘ‚Q@‹B©8 âxl/styles.xmlPKܘ‚Q6»n‘ Æxl/worksheets/sheet1.xmlPKܘ‚Qþxω xl/worksheets/sheet2.xmlPKܘ‚Qˆ5œ‘!lxl/worksheets/sheet3.xmlPKܘ‚Qq‡ “!Cxl/worksheets/sheet4.xmlPKܘ‚QZL@Õ xl/worksheets/sheet5.xmlPKܘ‚Q~¯1A”#òxl/worksheets/sheet6.xmlPKܘ‚QŒŠÙóæÌxl/_rels/workbook.xml.relsPKܘ‚Q MmËxl/sharedStrings.xmlPKܘ‚Q(—”)iÜ docProps/core.xmlPKܘ‚Qºžn8ì|¼!docProps/app.xmlPKܘ‚QÄñGoÿæ"[Content_Types].xmlPK–$openxlsx/inst/extdata/namedRegions.xlsx0000644000176200001440000002002114155600363020072 0ustar liggesusersPK!bîh^[Content_Types].xml ¢( ¬”ËNÃ0E÷HüCä-Jܲ@5í‚Ç*Q>Àēƪc[žiiÿž‰ûB¡j7±ÏÜ{2ñÍh²nm¶‚ˆÆ»R ‹ÈÀU^7/ÅÇì%¿’rZYï @1__f›˜q·ÃR4DáAJ¬h>€ãÚÇV߯¹ ªZ¨9ÈÛÁàNVÞ8Ê©ÓãÑÔji){^óã-I‹"{Üv^¥P!XS)bR¹rú—K¾s(¸3Õ`cÞ0†½ÝÎß»¾7M4²©ŠôªZÆk+¿|\|z¿(Ž‹ôPúº6h_-[ž@!‚ÒØPk‹´­2nÏ}Ä?£LËð Ýû%áÄßdºždN"m,à¥ÇžDO97*‚~§Èɸ8ÀOíc|n¦ÑäEøÿöéºóÀBÉÀ!$}‡íàÈé;{ìÐå[ƒîñ–é2þÿÿPK!µU0#ôL _rels/.rels ¢( ¬’MOÃ0 †ïHü‡È÷ÕÝBKwAH»!T~€Iܵ£$Ý¿'TƒG½~üÊÛÝ<êÈ!öâ4¬‹;#¶w­†—úqu*&r–Fq¬áÄvÕõÕö™GJy(v½*«¸¨¡KÉß#FÓñD±Ï.W ¥†=™ZÆMYÞbø®ÕBSí­†°·7 ê“Ï›×–¦é ?ˆ9LìÒ™ÈsbgÙ®|Èl!õùUSh9i°bžr:"y_dlÀóD›¿ý|-NœÈR"4ø2ÏGÇ% õZ´4ñËyÄ7 ëÈðÉ‚‹¨ÞÿÿPK!>”—óºxl/_rels/workbook.xml.rels ¢( ¬RMKÄ0½ þ‡0w›vÙt/"ìUëÉ´)Û&!3~ôß*º]XÖK/o†yïÍÇv÷5âõÁ+¨Šzlï;oÍóÍbí­‚Gìêë«í šs¹>’È,ž8æø(%‡£¦"Dô¹Ò†4jÎ0u2jsÐÊMYÞË´ä€ú„Sì­‚´·· š)fåÿ¹CÛöŸ‚yÑó I< yÑèÔ!+øÁEöò¼üfMyÎkÁ£ú å«Kª5=|†t ‡ÈG)’s墙»UïátBûÊ)¿Ûò,ËôïfäÉÇÕßÿÿPK!+ó—iXxl/workbook.xml¬T]o›0}Ÿ´ÿÀ¬¼RÀ…&E@Õ’L«4MU—µ/yqÀ+Æf¶YRMûﻆ²ÑVš:m/øóŸ{Ϲ$dž;ߨÒLŠ'>r¨(dÉÄ.E_ÖïÝr´!¢$\ š¢ªÑEööMrj¿•rï€Ð)ªicÏÓEM¢OdKœTR5ÄÀRí<Ý*JJ]Sjîaß?óÂbõ YU¬ KYt fQ”ôuÍZ=¢5Åkà¢ö]ë²ibË83=(rš"¾Þ ©È–CÚÇ ‘aúºa…’ZVæ ¼ä‹|ß ‚!å,©§wCÙÒ¶ŸHc_áÈáD›UÉ -StKy O6T×^uŒÃi†ØG^öKŠå”´"7ka„‡‹Ñ)ÆØÞ„¤.¹¡JCs) Ôð±úÿZ¯;¯%¨ãÜÒ¯SLaË–%ð%EL¶ú†˜ÚéOQo´®bsëæ²¤›Þ/\7“2“—þE¡Ia3ö åÖ0ž~–Xß1zп i—Îñž‰RR-ñ0™úí{Vš:Ex¾˜Ãù°÷²]m ÞøQo‚ÝûÞèGGôz¶½@ƒÙñÚJŠ3˜¨ë2èéa ,´´>ÉêÊ”9åeê»Y>É7¹ùÇ0ü$.~}ðÚ6È48ŠgËÙâÙËSÀ¿ ¼·Ú¡O;ÂQÐçKæ£6Y#…¥è{ú—sÿ‚fÄ/°NàÙ„¥1p›NËãƒÝ˜–k•JPŽI\'A1˜½6™v†Ò¤»½4Þ§p›.F4Ý—¦±ÑCaLJU‰à ÒÔ9B´íÂ8cv<Äw…ëPÄ¥d&Úî‡`ÕÕ /Ÿ}ÿòÙçå³Ç'žž<øéäáÓ?f¶ŒŽ;(™ê_|ûÙŸ_ìüñ䛾°ã¹Žÿõ‡O~ùùs;&[xáù—{úøùWŸþþÝ# ¼“¢>$1æÎU|ìÜ`1ÌMyÁdŽÒÖc!bô@ض˜î‹È^] jÃu±é¼[)Œ xy~ÇລsA,#_‰b¸Çí²Ôê€+r,ÍÃÃy2µžÎuÜ „Žlc‡(1BÛŸÏ@Y‰ÍdaƒæuЦ8ÁÂ‘ÏØ!Æ–ÙÝ&Äð륌³‰pn§‹ˆÕ%Cr`$RÑi‡Ä—… „ÚðÍÞ-§Ë¨mÖ=|d"á…@ÔB~ˆ©áÆËh.Pl39D1Õ¾‹Dd#¹¿HG:®ÏDzŠ)súc̹­Ïµæ«ý ˆ‹=ì{t›ÈTC›Í]ĘŽì±Ã0BñÌÊ™$‘Žý€BŠ"ç:6ø3ßyq@ÉÆpß"Ø÷ÙBptU§T$ˆ|2O-±¼Œ™ù>.èa¥2 û†šÇ$9SÚO‰ºÿNÔ³ªtZÔ;)±¾Z;§¤|î?(à=4O®cxgÖ Ø;ý~§ßîÿ^¿7½Ëç¯Ú…Pƒ†«uµv7.Ý'„Ò}± x—«Õ;‡ò4@£ÚV¨½åj+7‹à2ß(¸iŠT'eâ#"¢ýÍ`‰_UÑ)ÏMO¹3cVþªYm‰ñ)Ûjÿ0÷Ø8Û±V«rwš‰G¢h¯ø«vØmˆ 4Š]ØÊ¼Ú×NÕnyI@öý'$´ÁLu ‰Æ²¢ðw$ÔÌÎ…EË¢)Í/CµŒâÊ@mX?9°êj»¾—À¦ Q<–qÊ–Ñ•Á9×Hor&Õ3Ë ("Ý’\7NOÎ.KµWˆ´ABK7“„–†ã<;õ£“óŒu«©AOºbù64Í7k)"§´&ºRÐÄ9n»A݇ӱšµÝ ìüá2žAîp¹îEt Çg#‘f/üë(Ë,墇x”9\‰N¦18u(‰Û®œþ*h¢4Dq«Ö@ÞZr-•·Ý 2žLðHèa×Z¤§³[PøL+¬OU÷×ËžláÞÆÇΧ7¤˜ß¨JŽ ‡ jæÍ1Í•ùwª0岫)ªÊÚE(¯(º˜gp%¢+:ênåí.Ÿ38tÝ…SY`ÿuÕ=»TKÏi¢YÔLCUdÕ´‹é›+ò«¢ˆ¬2éVÛ^h]k©u¨Ö*qFÕ}…‚ Q+3¨IÆë2,5;o5©ã‚@óD°Áo«aõÄëV~èw:keX®+Uâ«Oú× vpÄ£çÀs*¸ %|{H,ú²“äL6à¹+ò5"\9ó”´Ý{¿ã…5?,Uš~¿äÕ½J©éwꥎï׫}¿Zéuk÷¡°ˆ(®úÙg—œGÑEþñEµ¯}€‰—GnF,.3õ¥¬ˆ«0ÕÚæ0ѹÔ­z«”ZõΠäõºÍR+ º¥^6zƒ^è7[ƒû®s¤À^§zA¿Y ªaXò‚Фßl•^­ÖñfßëÜÏ—10óL>r_€{¯í¿ÿÿPK!Þ#òÓ…± xl/styles.xml¤T[o›0~Ÿ´ÿ`ùhÈ’¨– R¥nšÔNÚ«&±ê ²M—lÚï1„ªÓ6­/øœÃñw¾sszs=1c¹VŽ®BŒ˜*uÅÕ.Ã_Š`†‘uTUThÅ2|dßäïߥÖ»ß3æ@(›á½sÍ‚[öJ7LÁŸZI¨fGlc­¬¿$‰ÃpJ$å ÷ Yþ ˆ¤æ±m‚Rˆ:¾å‚»c‡…‘,·;¥ Ý  zˆ&´ÔHµ²î¶Ê0Œ©/ÂI„D±Çë?Fë±ß ‹õK|@Ñ~Aúù~gø³ß“3@ mË…ãê7„³:\Jú8?Ù]qÎQ «i+ÜÃùg†/ò'VñVÆg¯/üI»"ÃùÎw*šúìàî,Œœ¨5<Ã?7Ëóõ¦ˆƒY¸œ“k–ód¹’Éj¹^ó0W¿F‹ö†5랃<…ÅZXËh†d‡ï/¶ ”ž~7£@{Ì}OÃIÅu“)³éuI¯§“å&)’÷äÿ¸G!‰¢þ-óä“…ã’ ®N½:uhl…&ú‡$È©äòÖæÏÿÿPK!EJ»4öÆxl/worksheets/sheet1.xml””Ko£0€ï+õ?X¾“wŠ€Uía¥Õ¾îŽÀ ¶©í$Í¿ß1(¥Y)=D²™áûÆž éó‡jȬ“FgtÅ”€¦ºÊèŸß/kJœçºàÑÑ38úœ?|KOÆî] à ´Ëhí}›0æD Š»È´ 1R«¸Ç­­˜k-ð¢{I5lÇK¦¸Ô´'$ö†)K)`kÄAö=ÄBÃ=ÖïjÙº M‰{pŠÛý¡}FµˆØÉFús¥D‰ä­ÒÆò]ƒçþ˜Ì¹¸°»Í'¼’ÂgJ!Žõ…~>ó{bHÊÓBâ µ eF7Ód»¦,O»ûù+áäFkâùî4 <Ø&JÂõïŒÙ‡Ä7|#Ñu È…—GØ@Ódôu‚=uï$¬QÁÇx}ñ½t-ûaI%?4þ§9½‚¬jâ^A¸‰¤8oÁ lª£éb(|Ë=ÏSkNÛ9EqËÃpÌ’ùÿÞÌSr7˜Œ0‡ç8æqÊŽXšÀ¢ÚïçaòÀ› ¼ÎµǦ·]˯¸0ypÍ®\ãØü¶kõ&®Å•k[Þv…ÿóÝ=ÁäÁµºrcë+W?`ý,´¼‚ïÜVR;Ò@Ù Öiû‰Š£P³ií°-;ã½Q—]ß Àሣ%¥1þ² C<|òÿÿPK!ç?æ˜A]docProps/core.xml ¢( Œ’QKÃ0…ßÿCÉ{›¦U7BÛÊžN&¾…än 6iH¢Ýþ½i»ÕÊ|ð1÷œûÝs/)UG_`lt‰H’¢4o„Ô»½®—ñEÎ3-XÝh(ÑZT×W7”7žmcÀz . $í(7%Ú{o(ÆŽïA1—‡â¶±Šùð´;lÿ`;ÀYšÞaž æ‰è„|DšO[÷Á1Ô @{‡IBð׃Uîφ^™8•ôGv:ŲÄÑ}pr4¶m›´y#ä'ømõôÒ¯KÝÝŠª Á)·À|c+çaËt'¥î|5s~.½• î£ëR ¬>ú…0tˆ~V6ùÃãz‰ª,%³8Íãôv¥4Ïi6ïÿêï uÿO"¡dNofâPøâCTßÿÿPK!À§W³ÐdocProps/app.xml ¢( œSMoÛ0 ½Ø0toä´Ý0²Š!ÝÐÃ>‚ÆíΪLÇBeÉX#Ù¯e¯ŽÛîÛä#ž)q±omÖCˆÆ»‚-9ËÀi_·+ØMùñäË"*W)ëì‘]ÈׯÄ&øˆQ¸X°±[qu­Š ‚!µ­BJÃŽûº6.½~hÁ!?Íó·ö®‚ꤛÙȸêñI+¯“¾x[:,Åû®³F+¤)åg£ƒ¾ÆìÃ^ƒ| R·ý d.ø<[­,¬‰XÖÊFüXW ’ieB”¢ÇU}È¢ùN¶³ìNEHr Ö«`”C’•ÚÆdˆm1Èo>ÜÇ£àÔ0‡pÞ;͹\ ü±qäú¢Z¨²kåvð/Oœýú‰¤qœ•Þ~êBiÐBüZoTÀ¿™2H-Un“ãX?-˜ÌXƒ¥Ý z‰žþ.Õ¥ý=³wØMñL÷Ú·r¦è“q÷ñ¦+ý¥Bx¼†§E±mT€Šhº–© ®è‚M$ë&í¡zìy ¤Û½?¨\¾Yäg9å¬&øñ+ÊÿÿPK-!bîh^[Content_Types].xmlPK-!µU0#ôL —_rels/.relsPK-!>”—óº¼xl/_rels/workbook.xml.relsPK-!+ó—iXïxl/workbook.xmlPK-!ЧÉ6Ãf… xl/sharedStrings.xmlPK-!‹‚nX“Žz xl/theme/theme1.xmlPK-!Þ#òÓ…± >xl/styles.xmlPK-!EJ»4öÆîxl/worksheets/sheet1.xmlPK-!ç?æ˜A]docProps/core.xmlPK-!À§W³Ð’docProps/app.xmlPK €{openxlsx/inst/extdata/cloneEmptyWorksheetExample.xlsx0000644000176200001440000001615314155600363023021 0ustar liggesusersPKÙU‰O _rels/.rels­’ÍJ1€ï>E˜{7Û "²Ù^DèM¤>À˜Ìþ°»™Œº}{ƒˆXY¥…æ–dæ›o†©¶ó4ª7Š©go`]” È[v½o <ïV· ’ w8²'J°­«'QrJêúTfød  wZ'ÛÑ„©à@>ÿ4'”|­hlIoÊòFÇŸ 8fª3wn jt ››¦·tÏöu"/ %~Ed2Æ–ÄÀ<êwŽÃ óPd(èúJ-œEÁÍé‚7¯'t(¨-GZ…˜³£ôyÔߎŽíc~NŸg[^_rŒ4 yGîO áK³ÒGÛRPKXÒ<‰ítPKÙU‰O[Content_Types].xmlÍ”ËnÂ0E%ò¶"UUºècÙ"•~€‰'ı-ÏðúûN@jUÝÄI!ÄÞÙÑŠ ¬rº·]ƒžÚ]yŠ˜¤Õrpt„ˆ¶‚+à!8!õ‹ ±±Aû”<Ã8ª=«,Û¬¼¹`dÊeè°—ê]v€W„¬±$µLO´Ò/8tâ1å/ŽÔjAú0Ì­0 `À¦ˆiEñ¯7A0ñßYYœ‡Ø/®q«±ž}ù"Š_îïçãËÞNA*@‚kÅT™\ ¤6ÿéðïŧè"ãY:úœþò\ßܶ;$V„nJº*ɦ¥„]­Y]¿N¬³yÁñù»ÄPK>Z¾öPKÙU‰Oxl/_rels/workbook.xml.rels½’ÍjÃ0„_Eì½–íþPJ”\J!×6}!­-[Úíß¾"¡©Áô`r;bg>–Ym¾‡^|b¢.xUQ‚@o‚í|«à}÷ró‚X{«ûàQÁˆ›õê{Íy…\IdO s|’’ŒÃAS"úüÓ„4hÎcjeÔf¯[”uY>È4õ€sO±µ ÒÖV vcÄÿx‡¦é >ó1 ç ò+¤=9DΦ:µÈ NÉÃSÙäe˜úÊ0õÌí’0œwñä0ÅÙƒÜ-É@<ö¹\'ˆã<¿h¼Ó í§Üü)ÅTþ…‘gõ_ÿPKKúlÂíEPKÙU‰O'xl/printerSettings/printerSettings1.biníWmnà ý¿Sp>ÌGŽÓÐqÿ# žI¡ÛÚ’5R'ééÉqŒÛ‘Ø(¤L ¶…mš‡8F‚5< L`×Ý-Þ`­AŒ…2{dp©ù9R#ƒ>7ÛÞXu…¼–ê‹/µX¡ŒHI„|× ‰µr)¼œ„\ñVA8Ú2dFfqÉñºó˜I]]o 5`?‡<͘›¯6uA ¬ ÍÚ¨ZÂŒX‡Õƒ zLŠuEËw®9±–gZY6®jì"Yáì7î^!ôY”v’E$!BÔ’E˜Ûu¥@?ÐÃ>&Ùð!„ ƒ¶ìöŽÞ¶•ê쉉Cpk#@iöe[ã;éÓþæ w»úZ¨aç ±Š¥;⥟±ì{Эòן˜ü…üŸ(ð?@ýà‰‰‰‰‰‰?AéòkiÓq9wL_PK­±](7”PKÙU‰O'xl/printerSettings/printerSettings2.biníWmnà ý¿Sp>ÌGŽÓÐqÿ# žI¡ÛÚ’5R'ééÉqŒÛ‘Ø(¤L ¶…mš‡8F‚5< L`×Ý-Þ`­AŒ…2{dp©ù9R#ƒ>7ÛÞXu…¼–ê‹/µX¡ŒHI„|× ‰µr)¼œ„\ñVA8Ú2dFfqÉñºó˜I]]o 5`?‡<͘›¯6uA ¬ ÍÚ¨ZÂŒX‡Õƒ zLŠuEËw®9±–gZY6®jì"Yáì7î^!ôY”v’E$!BÔ’E˜Ûu¥@?ÐÃ>&Ùð!„ ƒ¶ìöŽÞ¶•ê쉉Cpk#@iöe[ã;éÓþæ w»úZ¨aç ±Š¥;⥟±ì{Эòן˜ü…üŸ(ð?@ýà‰‰‰‰‰‰?AéòkiÓq9wL_PK­±](7”PKÙU‰O xl/styles.xml¥“Moä †ÿ âÞ!í®¶£$=¬©—½´•z%2¨"`ª¤¿¾&d¾ÔJ­Ô\€×öƒên2@^¥ÚÙš–›‚i…ëµjúôØÞü¥$Dn{ÎÊšÎ2л¦ qù°—2ØPÓ}Œãޱ öÒð°q£´hQÎñèF/yR¶-Š?Ìpmi&ìŒøÄpÿro„3#ºÓ ã¼°Ž˜©üÅ?’ŒÞ§â#™SJ ù1¡[v˸ ÄˆÝý`ç`É ‘6•=˜ÖÄ@„;ØXÓ%¶jM¥œ=›Jš|§7òÊ•’²¦œ'~èjÚ¶Åò%Ùr#³Û?ºó:‰Š s–·IXJYýŒÆì’Èò5Ë’²Ð§,¶4 M…O¥·-ȺœG,ÍbO3fñûÂ{ð|.·¿/–ïíœïq†.ëÏRST¼öindÉ#ö¡©zÍg9$ä1bÝ VH€‡4iÏêŠ=)’þ¾O} ©úãZ·“‰IËìcɤ®ù'ôrÑý¤’ÔïšþOS g颶Ÿ$ŒÌ~R“—¬ç_°yPKÓÓi,±ÆPKÙU‰Oxl/theme/theme1.xmlíY_sÚ8¿O¡ñûùcSÒ)™ Ú›6m&ázÓÇÅ[‰ly$‘”oë¿X`’‡› `I¿Ýßîjµ^›OðQG4¦äwÌõFN¤uúÑuU€Ó þ)Mpm%d ‡2t—YÆÜíu:7–8$˜Žœ« (™g*ó?ùTêŸrüJ´:lj€ËÛ 'm Uðå}7©špI€d[ŠÇ9ý­ÂAi\9üã¸çŸÜB¨çÚ"ÞåŸR4¨˜{¹¨ µlwæ}¸¬Yz5Ë>t:N¦ÝZk… @Ç»{po6ìŽ+Í Pq¹¯~Òñ;ž‰7)ú{"gãñØ?3Dú[ o?ì ¼‹ž÷ ß‹ñÅd20Dü-Å`?ûp6ðLü ¤ˆ8Kî÷²M®÷ª†¬ÿÒ "|XeEÊÜFâ*} c¸r†˜jÇA³„èMJW zñB2@¦bBc±ž TÛlFMT YªGÎ…„…Ó@ÍYLùNɈ!iúBòÙBó˜!‚Û±SØïàè˜&aúSây³`?¯ï »o#¹Ö¬û5Š ì•|,¤Í»¯iÓ»uZ­ë&ôàÁbÄÕ„N×)¦ ³(žDÔ0ùšC¢!¤ Õ$[÷”¶Kþb̈÷ ¤Pb¥É/FÆÀlAš³…n—ûÂbܲ XsÁˆÖÕO2ÜBrIL0`h¹E1åFl?ÃZCl³bÞY ¾ÝÈÀØ¥1BÊ™.©R±rc˜þ° ØòâŠob,5»·€¿M𥸟D§6ûY5á«{Ìg ×BÛ¬æ¹ÊƸEʇŸŒêg†Xµ'Q¶²––SD…y–7|´¢p÷KhÌ’'J*gXS_¿¤^`¡æÇÒÐÿyù¼„urM1 ß«ç{õ|¯žGUÏÕà­j¦Q#Ýf›Z鋵­+Æù­ÞpúMUeV¡ÛËÎçÍr.Z·Ëi„—e·¼År¡„|H¤Ðÿ2ÝF"_·¢ Õ–#T$ »uÇJ’-`½×Åœ_=¼!ô•XÓýæC]­&…j‡«Ÿé8–¯ÿád¾n=’°ë·úOºfdñÀ<©¨pÐ+ ÀdN—ÙNÔiSíÕÛmŠ`I˽붺ÖíËáÓ¡lžõO&àa2r-£ ÁnÚs¸ÛiBiünI¥Ò— ¢B6_­Þ‘$çµ#=ßË‚ójž´—´ƒ¶4ãÚv2çE¶cˆÛ²åtµ¢¶O3[„Xk*o£å#Yðµ¼tÃ+RqÉÞ“zÕߌù^™¥fáèÔß}5Ó©—€§”EnXäG•…P5¬í©&Lƒ]»O'yÙu/ý·ôÒpñÕü³9÷Šže‡[öþ²z^Ã.EÉ2~ä©#å.X0“ØÚTqEKñý¬ÎŒ$\$ù¯¤F™,4Õ•5Œô ‰dX^u$)½Ö¥ÿ:wȪ²ÛkÞõ+Eµ·†õ*ÅKü]ÐÊçYidÑqHTÕ¬òt§¥HËÆº–£»gÍBÿÒZò¦}š×ya³åòžÓ6yeê‘;ÑÙÉf<³èµ;ÞóŸÙ¤øPF²/¼c0pšewø¹¸Áœ u3L0Uÿ–·ž\ åÆ—™ªs£i8˜§îÿðô>ý™ï[ÿ$ãI÷[âîï†}·]Ë»‡Øm<¡å£½¿¿Äâé/ñ p͵ÊŶ$Lª'P»=ÿPKŒ˜Q£PKÙU‰Oxl/workbook.xmlPÁNÃ0 ý•Èw–¶ÀÓ²]b7$;g»Zk’*ëö÷¤ªUBBœbûå=?¿åúlqÂÀä‚|–@WzCî àsûz÷‚£vF7Þ¡‚ 2¬WË·ãÞû£HtÇ êÛ…”\Öh5Ï|‹.!•VÇÔ†ƒä6 6\#FÛÈ"ËæÒjrpUX„ÿhøª¢_|ùmÑÅ«HÀFÇdžkjnÎÞƒ0:bþœ=(¨tÃrµì‘/ÂŽoûVœwäŒï¤û/“ºÊ™X§tîóâqœ½!ê¨`žgiVQàøÑ7Ðté„[½ï»´VNöŒ¯pÚ¦T¦ÈSÔ}±1i×{L؉˜ö ‚ J@ؘ¼—üM/&ôâz18mÈ1‡ÕPKĈD  PKÙU‰O#xl/worksheets/_rels/sheet1.xml.rels­’ÏNÃ0 ‡_%ò¤Ù!´l— iW·h(1…½=Aˆ?¶i‡Ÿòù³ååúcÄ„¹„H´l@ ¹èužw7w [òvˆ„öX`½Z>â`¹~)}HET=sºWª¸G[dLH5ic-×2w*Y÷j;T‹¦¹Uù?æL±õòÖk»}ÂKرmƒÃMto#i¡|¶ïu®Š´¹C6 åÏÛo¨eÅ‚:n³¸¦MÊó2 ̬²ÃZË—@§$§êEÍŠÛœÛÛ_®åô½:5»ŽÕ'PKwGXðßdPKÙU‰O#xl/worksheets/_rels/sheet2.xml.rels­’ÏNÃ0 ‡_%ò¤Ë!´l— iW·h(1…½=Aˆ?¶i‡Ÿòù³ååúcÄ„¹„H²ä¢ÔxÞ=ÜÜ(lÉÛ!Øcõjùˆƒåú¥ô!QT ôÌé^©âzm‘1!Õ¤y´\ËÜ©dÝ«íP馹Uù?æL±õòÖ/@ìö /aǶ 7ѽH|¤…òÙ¾×¹*ÒæÙ€”?o¿¡– 긾¦MÊó2 ̬²ÃZË—@§$§êEÍŠÛœÛÛ_®åô½:5»ŽÕ'PKÇ$²ßdPKÙU‰Oxl/worksheets/sheet1.xml¥SÑnÛ0 üAï“vÝ– N1 è`†eÛ»,ѶK(fnóõ£¤ËЗ}ã‰âùŽ>-žB§þe±Ô³ÉT+ˆM©ý|¼ù¨Ufé0B©Ÿ!ë‡Õ²GÚ倕ÌÇ\ê–9-Š"Û‚ÉL¥S#é)r"0n ]q;¾/‚ñQt Öµ·°F»ùHBÐõ¹õ)ŸÙžÜU|ŽL/NÏz.$®¾Ù»W|Á[ÂŒ5O,†“´×.çÅü?ŸÁ^#,ÚíÓ'1WùÎóó¨Q«`›&"™ª“ÿ!ÂŒ½Piìt ÓJ-—åyPu©?Ít!§ãÕßú¼úW«!ânWj‰Ï1l­Äͦ‚s‹ýgòî« A™iŦÚB–Á ¸X-‹ öÓ§Çm|'å 6ûŽ`ÿ|Ó²ŒÜKL‹“Œµa#u2 |3Ôø˜UµÜšN>hElj±fLcu¯U…ÌΨ•M èN«‘ÏàÄ»Þ'•LÚúƒøšk…ä%cðJ˜Œg¡’óJ£['_ê»aòºØÛËZxqNw;šyL«¿PK É»PKÙU‰Oxl/worksheets/sheet2.xml¥“Qo1 Ç¿J”÷rЮÛ@Õ$Ô i“¦±íÝä|w—8rÌhùôóÐ1õ©ovÿòÿ;Îüá)tæröK;­Áè¨ò±)í¯Ÿ7­É±‚Ž"–ö³}XÌ÷ÄÛÜ"ŠÑú˜KÛŠ¤YQd×b€<¢„Qwjâ¢)7ENŒP E¡+nÇã÷Eí‘0ãkT×Þá’Ü.`”#„±Qõ¹õ)ŸiOÕU¼Ša¯NÏz.$.;/¼É»W¼àS¦ZFŽÂIÚk—ÓbúŸÏ஀·»t£à¤æ6¾óò¢°vЋ›Œ5Ï-í?³¯¾úˆ:(k6kìÐ Åb^\ÐOW=ÝøÎ¦Âvü ýôM+Џ ULJ4ø ¸ñ1›k=5}°†C,”†èÞš ‰P8g­v¹Ï‰äœœ¸k”]2 òÚÔ×Ôb¯8 ^i±0xQ”®H7ºeò¥½ë ¿K¼»\á™W缪nó/ŸiñPK+0—»PKÙU‰OXÒ<‰ít ¤_rels/.relsPKÙU‰O´”#leò¤&[Content_Types].xmlPKÙU‰O°=ù­¤ÌdocProps/app.xmlPKÙU‰O>Z¾ö¤·docProps/core.xmlPKÙU‰OKúlÂíE¤ûxl/_rels/workbook.xml.relsPKÙU‰O­±](7”'¤0xl/printerSettings/printerSettings1.binPKÙU‰O­±](7”'¤¼xl/printerSettings/printerSettings2.binPKÙU‰OÓÓi,±Æ ¤H xl/styles.xmlPKÙU‰OŒ˜Q£¤4 xl/theme/theme1.xmlPKÙU‰OĈD  ¤Æxl/workbook.xmlPKÙU‰OwGXðßd#¤#xl/worksheets/_rels/sheet1.xml.relsPKÙU‰OÇ$²ßd#¤Sxl/worksheets/_rels/sheet2.xml.relsPKÙU‰O É»¤ƒxl/worksheets/sheet1.xmlPKÙU‰O+0—»¤„xl/worksheets/sheet2.xmlPKÐ…openxlsx/inst/extdata/read_failure_test.xlsx0000644000176200001440000002267114155600363021155 0ustar liggesusersPK!A7‚Ïn[Content_Types].xml ¢( ¬TÉnÂ0½Wê?D¾V‰¡‡ªªº[$è˜x’X$¶å(ü}'fQU±Á%QlÏ[&ó<­Ú&YB@ãl.úYO$` §­rñ=ýHŸE‚¤¬V³‹5  ïïÓµL¸Úb.j"ÿ"%5´ 3çÁòNéB«ˆ?C%½*æªùØë=ÉÂYK)ub8xƒR-JÞW¼¼Q23V$¯›sU.”÷)±P¹´úIêÊÒ ]±h:C@i¬¨m2 3† ±1ò g€/#ݺʸ2 ÃÚx|`ëGºã®¶u_ü;‚ÑŒU OÕ²w¹jä ó™sóì4È¥­‰-ÊZeìN÷ þxe|õo,¤óÏè ž1ñy½„s†iÝÞºíôs­è ñôV7ðû”ŽÔ88œÚ—wa‘®:õ  ìCrhØöŒù«ÛÝ¢Aà–ñþÿÿPK!µU0#ôL _rels/.rels ¢( ¬’MOÃ0 †ïHü‡È÷ÕÝBKwAH»!T~€Iܵ£$Ý¿'TƒG½~üÊÛÝ<êÈ!öâ4¬‹;#¶w­†—úqu*&r–Fq¬áÄvÕõÕö™GJy(v½*«¸¨¡KÉß#FÓñD±Ï.W ¥†=™ZÆMYÞbø®ÕBSí­†°·7 ê“Ï›×–¦é ?ˆ9LìÒ™ÈsbgÙ®|Èl!õùUSh9i°bžr:"y_dlÀóD›¿ý|-NœÈR"4ø2ÏGÇ% õZ´4ñËyÄ7 ëÈðÉ‚‹¨ÞÿÿPK!>”—óºxl/_rels/workbook.xml.rels ¢( ¬RMKÄ0½ þ‡0w›vÙt/"ìUëÉ´)Û&!3~ôß*º]XÖK/o†yïÍÇv÷5âõÁ+¨Šzlï;oÍóÍbí­‚Gìêë«í šs¹>’È,ž8æø(%‡£¦"Dô¹Ò†4jÎ0u2jsÐÊMYÞË´ä€ú„Sì­‚´·· š)fåÿ¹CÛöŸ‚yÑó I< yÑèÔ!+øÁEöò¼üfMyÎkÁ£ú å«Kª5=|†t ‡ÈG)’s墙»UïátBûÊ)¿Ûò,ËôïfäÉÇÕßÿÿPK!ÎD™düxl/workbook.xml¤“KoÚ@Çï•úV{~(²°£Z©¥… H\–õ¯Ø‡»».ðí3¶CƒÊ%U/ÞÙ‡óøÏŒïŽJ’ß`0:¥Q/¤47¹Ð»”®–_oF”8ÏtΤÑÒ8z—}ü0>»ß³'Ð.¥¥÷UŽ— ˜ë™ 4ÞÆ*æqkw«,°Ü•^É Ãa ˜Ð´#$ö= S‚ÃÔðZöÄ‚dÃw¥¨Ü™¦ø{pŠÙ}]Ýp£*Dl…þÔB)Q<™í´±l+1íc48“ѼB+Á­q¦ð=D]WùFaE]ÊÙ¸žº²VUs¦/’Éœÿ’ yJ‡¸5x;À l]}®…ÄÛ¨ßCd¤x´•ƒŽµ,…[¿jDI«¥_¢8g·ˆûq´Çk‘û2¥qx;@±º³»Ò§t4à?žmM¿¦ôÓè¶ åÂS;è±]‰n»b6Ÿ®~.ÏäûùòáÛ3d3C³®Al"а³ûóó³¬6Ÿ¾e¶'0ƒ%—À,V¡vxΠ,ö‹` Ö¦ h3ø²}}¥ˆ"K³H41vk!¨j¬7ÄCg1uÞBïML²? êzkjj¬¾+)ï„7UaÀ˜öÞн6 ´"§UÔÇ­Q+ñ£.ñWèÃñ±äO%/N¿ç;þòíÈOûId÷<ãq(f=Fd:Gþ:ë1Þ2uqËåï…"}AÿÿPK!;m2KÁB#xl/worksheets/_rels/sheet1.xml.rels„ÁŠÂ0E÷þCx{“Ö… CS7"¸UçbúÚÛ—÷ý{³eÀååpÏå6›û<©f‘,Ôº…äch°ð{Ú-¿A±8êÜ -æÙI‰y0Éù‹Ьªjmò_´/Nµï,ä}Wƒ:=RYþìŽ}¢H9ÈEíò€bAëwöžk}¦mÌËóö ÿÿPK!ƒ¯êããxl/theme/theme1.xmlìYÍn7¾è;{O,Ù’c‘K–â6qbØJŠ©µË˜»\”ÝŠäX @Ñ´è¥@o=m$@/éÓ¸MѦ@^¡Cr%‘Û‰þÅl‰ûq8œŸ3Ü«×d !)Ï›Qõr%B$ù€æI3ºÓë^Z‹T8`ÆsÒŒÆDF×6Þï*^W)É‚ù¹\ÇÍ(UªX_Z’1 cy™$‡gC.2¬à«H–ÜŒ--W*«K¦y„rœØÛÃ! êi‘ÑÆDx‡Á×\I=3±¯Eo†Áª!DzÍ:ĬÁ:~Ô#T„– 4£Šù‰–6®.áõrS æ:óºæ§œWN,›5EÒŸ.ZíÖW¶¦ò €©y\§ÓiwªSy€ãvjuqeÖºkÕÖD¦²çe·+õJÍÇ;òWætn´Z­z£ÔÅ 5 û±6‡_«¬Ö6—=¼Y|}_km¶Û«Þ€,~uß½ÒX­ùxJÍæÐÚ¡Ýn)} r¶„¯|­RÂg(ˆ†ité%†Aå‹pÿBߣ|—@ÎÌ“è;þ~ÇßÑž¿åòųöŒ¨Ãguº©Ú³…Eû2¶¯ÆŒÜ”¦n—p< º0h ÓUN›¸"…e‹àáÍ$¸úˆªt?Å”øUÓ‚&²HTp •¿6Í09!Û´· {Ó©Öuc™CbµÃvxÅíU§bL皘~x²ÐŠpÖÅV®¼ÝbU«ÕB³ù[«Õ )z[›n|8¿5œZêÕXy® ´îÐ aFÚî¶Ÿ¸E/}¡.’)ÒGzßó>ª'MbeFé¾ó9«5´Ø·Xí,Nr—«-Xnâ½·ñÒ¤ÙžyIçí‰td¹›œ,GGͨQ_®G(ÆE3B› ³¼.u©‰YwU±6ìOMf®3o6ÂaY…›k÷¹ {‰= îס ûP ÷!†ô¸ÚÓÖ6|r.“νP38;ŽY‘â’nuŠN2ÙÂMOu0߬¶F=Ø[Pw³¹óoŤümÅ ãÿÙVôy+ín–F:_›*åÀBEJ㮀k5Ã-p= !¨à~ÛüäPÿ·9ge˜´†>SíÑ ç‘J!»@K&úNV-Ï.+’•‚LD9êʪÝ'‡„õ4®ê³=B)„ºa“’ îdüùßË ê'ºÈù§V>6™Ï[èêÀ–Xvþk‘šCúÎQО}¦¦šÒÁkösµ–±æv¼\?óQ[À5Ü.+ˆ‰˜Š˜Ù—%ú@íñ=àVï>ly… ª/ÙÂi‚´ô؇ÂÉÚ`Ò¢lÁRV·^FÁ yYéN×…,}“J÷œÆžgþr^.¾¾ú<Ÿ±K {¶v+Ý€©!iO¦¨.&ŒqŒyËæ¾ãýûàè-xå0bJÚ— àRº ûÒ’ß:×LÝø ÿÿPK!Æ—h,µ xl/styles.xmlÌV[oÚ0~Ÿ´ÿ`ù=ÍB%™Ji¤J[U©´W“8`Í—È1tÚß±C [ËʶnÚ ñ1>ßùÎÕNÞmGT7LɇgFTªdr™â÷¹7ƨ1D–„+IS¼¥ ~—½}“4fËéÝŠRƒB6)^SO}¿)VTæLÕTÂ?•Ò‚õÒojMIÙX%Áý(F¾ Lâa*ŠS@џ׵W(QÃŒ3³uX‰bz½”J“ª›pHŠÛ Oà+´jTeÎÎWUÅ ú”åÄŸø€”%•’¦A…ZK“âÑn#KšGô@8D/À~–H"h+_hF¸Ýò­b«~ÂéŠÆ·-DtT}|ÄÖϵÀ¦£ë Å•FL–tCKpÊ<¸p©ÖšQ}{g­õ¡Oˆõ¡ÛHüìShï#,.# ¸Ä8ßg4²…,Ê2TË´[ßok¨) MÐzîνpz©É6Œâž‚ï fÉBé𮫥,·[YÂie Øš-WökT ¿ e Th–”Œ,•$ÜVU§±[€;åüÎ6æ§ê;¯6’k‘ s 9†·õØ-Á‘ݲÅkÀ?¦‚þQ%¿O¡%Ôãr~þ:´©ž'e™¼èÉ^‘ºæÛ›µXP»©-‹ÛÝ Î–RPÛ×6¤ÑJiö6l»”¸dnªüÏTGãs•¬ýbÃNÌÖòóëa|*­WŽÌ!c'3x¾x^—×pòÿsÝ ýÛ›,ßÍ•}³#{e¤øÆ¶‡;w×°h±fÜ0¹oßçPÔ©„®Zö§Àp¹9Œ2w¿{»»!·§ÅTÒŠ¬¹¹ßÿ™âÃú-ÙZ€‘Ý©[ö ŒƒHñaýÞNÜpdÐyßÀ _`Š¿\ÍÎ'ó«<òÆÁlì 4ö&ñlîÅÃËÙ|žO‚(¸üÚ{lüÁSÃ=‰`¾„ÃiÃáA¢wÎîÈßöRÜZú.~@»Ï}‚‹8 ¼|„ÞpDÆÞx4ˆ½<£ùh8»Šó¸Ç=þ=îaà‡aûž³äã©a‚r&»\uêïB’@ü‰~— ÿðÞ̾ÿÿPK!¬JÔs-xl/worksheets/sheet1.xml¤Wßsâ6~ïLÿßc[æ7Ü\I¹KšÞÜmïYšØ–GVB’¿¾Ÿ$°Í¸@y@¶µûi÷[íJ;ùô–ÄÎ+“9éÔ%^à:,Äš§Û©û÷_‹»¡ë䊦k‹”MÝw–»Ÿf¿þ2Ù ùœïSÒ|êî”ÊÆ¾ŸG;–ÐÜK1³2¡ ¯rëç™dtm”’؃ ï'”§®EËK0ÄfÃ#v/¢—„¥Ê‚HSûóÏò-‰.K¨|~Éî"‘d€Xñ˜«wê:I4~ئBÒU ¿ßH—F%¶yiÀ'<’"åη†6}ù#H³‰áá»t@6ûF¬±Ôt†˜Rt5±O×ì­§nwàú³‰_èÌ&k÷uÌÉ6S÷3?…D‹‰8Ûç'Ï—,f‘ÒXÄu>„H–Ù7žß^‡t%ijV€`S2š2çm™£ù~|T"{b5g1~ ]‡FŠ¿²ïИº+¡”H~ðíN™ ¤ðm#ÅK•Æm¾ÆŸº€²¢ÚƒÚœEÒ+Ó<]çÀv d딋…ÙŒà|Í6ô%V?Äþ+Ó&µŽ×Óø‘ˆÁþ„ë„À> ofÜóµÚi¦¼ FAOûõ®÷FÇu¢—îþ,D b Æ¢wDhѪÑÃX.=ðºao0$áqm¸b¹ZáiÁëxK¼[` cÌÂX„ް×ëö‡'”À¬SúÆ£k½AйͳA‡ñà™{¤×¿‰)”<ã"Æ#^=èíŽ Œ%Dÿ,K =íFÔyZl³®w;gä°³ñp«—¤ÜÛúáÉ3Tµ»éÛ¬3µëž*:›H±wpÀ¶§ ë5ð€íkw–Mf#£8 <±“ß!@‡G9‹4êg “¦úÃÜ~À–P±×Ùpâ¿¢„D…Ê}S"¬Jü^Jè"¢AM•NUåKS¢[•øZ}°8K{U•ǦD¿*ñGS‚T%žšƒƒ„ؤcr k#acÚ1”wH0¨Ñ>·ó0çàRBíU¼–Ee3ªüjÔ|i®T×{¨àÕÔ+“ŽW3ö© ¾Â+ŠþÿâUëëƒI³Ò!$¨:·óÄÌßu½n%s‚Ú.¼¯H“AƒãÊ|ÒròÂ:¥5cjYòX™>CjÛRQ:¤y[OŽe\Ô}@Ö·w»2óJ œZWjè+ùuVáºRC8תԫµ¹Wµòkjúu®s©Ñr}àÉõ‘'ׇž ö /BŒÿ[*DX/B$[¤lbêl‡¶Pñ—êH•nPäÔ{†{q*æ"-zK}ÖftËþ¤rËÓ܉qŸG‡áé;£´Wpû‚VÀœéöbowt 'j€+:Vª|)0—L½dè$2&—ü ƒ !9úCÓNÝLH%)G'"Çʇµi–vxaómú“«]a¢îtGqhtgÿÿÿPK!é€áe‘docProps/core.xml ¢( |’]kƒ0†ïû’{M¢íÚµìƒ^­P˜ccw!9me%IgûïmuîƒAn’óžç¼ï!ñòXÞh“W*A4 È%*™«]‚ž³•?Gž±\I^T tƒ–éõU,j&* ]Õ mÆs$e˜¨´·¶f±‡’›À)”+n+]rë®z‡k.ÞùpHÈ .ÁrÉ-Ç-Я"º ¥õA@ ” ¬Á4 øKkA—æÏ†®2R–¹=Õ.ÓÅî˜-Ź8¨&„MÓMÔÙpþ)~]?>uQý\µ»€ÒX &4p[ét{0W6Æ£·v7víV½ÍAÞÒÛŽ1þýÞK7:WdêfN}wÂYF)›.¡oC_/ró»¸g =€ãö•—èþ![¡–G|ú!ÍhÄ& 6™9Þþ6ÐX^ÿK¤3ŸÌ}e„0w¦“±¤éïŸ(ýÿÿPK! N€1Ñp'xl/printerSettings/printerSettings1.binò``P`ðaHd(fHe(bð’%@C T`‹gÉb /€Á¨YXï0LásþßÀÎÈÀÉ0‹Û„#…‘Ÿ!‚‰HG01IG yÔŒP£@4sÿÝO¿P%   SÏÝ©VSñ¹€*É‹¡f=0jÔ  6† ¯GǦ&dG3DsBƒ+ƒïhì†ÀhŒ†ÀhŒ†Q!À¬Sœ1ë”Ñà Ñ Ñ9!ÿÿPK!Ìu»docProps/app.xml ¢( œ’KOã0…÷Hü‡È{ê´ÌŒPå¸Ñu$MA,=ÎMcáÚ‘ï%jùõ8‰()°bwGÇŸ-f»­Mh¼ËØx”²œö…q›Œ­ó¿g,AR®PÖ;ÈØÍäé‰X_C ˜D ‡«ˆê)ç¨+Ø*ŵ‹›Ò‡­¢Ø† ÷ei4̽~Þ‚#>IÓ_v®€â¬>²ÞqÚÐwM ¯[>¼Ï÷u–âw][£Å[Êk£ƒG_Ròg§Á >\ŠH·ý íe*ø°+­,\FcY*‹ øû@,@µ¡-• (ECÓ4ù y‰±MXò_!´8kT0ÊQÄje}ÓÕ¶F òÁ‡'¬‚~Ø•Cí°6?ä¸ÄâXØô qqŒ˜²€·åRú‚x<$îzÞçßÍ|½Êï“ëÛ›|qõø‰´»|<óÃ)WÆ=áºÎý\¼¥x<«J(bð‡”±ˆÛš\VÊm xÓ|^´o~ßl9þ9JÏÓøœƒ™àï_X¾ÿÿPK-!A7‚Ïn[Content_Types].xmlPK-!µU0#ôL §_rels/.relsPK-!>”—óºÌxl/_rels/workbook.xml.relsPK-!ÎD™düÿxl/workbook.xmlPK-!—ûFâÄ4 xl/sharedStrings.xmlPK-!;m2KÁB#H xl/worksheets/_rels/sheet1.xml.relsPK-!ƒ¯êããJ xl/theme/theme1.xmlPK-!Æ—h,µ xl/styles.xmlPK-!¬JÔs-_xl/worksheets/sheet1.xmlPK-!é€áe‘docProps/core.xmlPK-! N€1Ñp'¤xl/printerSettings/printerSettings1.binPK-!Ìu»ºdocProps/app.xmlPK &}"openxlsx/inst/extdata/inlineStr.xlsx0000644000176200001440000001176414155600363017444 0ustar liggesusersPK!8†Ø>[Content_Types].xml­“Ënà E÷ý Ķ2$]TU'‹>–méPÇ(3I“¿/¶“H­Ò<”nŒÌܹç‚ÑdÝ8¶‚„6ø’Å€3ð:ëç%ÿ˜½œ!)o” J¾ä“ñÍh¶‰€,7{,yM¥D]C£P„>WªEù7ÍeTz¡æ ïƒ{©ƒ'ðTPëÁÇ£g¨ÔÒ{Yçí>H‡œ=õ–Ur£³ZQ®Ë•7¿(Å– rg§ÁÚF¼Í.ÚÊ߀mß{>™d °©Jô¦š¬’&èi eÖ‹ã.b†ª²²Ç²É-Ú@L³%$²°Ï|”­C‚Ëá»3j»Ï$®DÚ8À«GŘ@¬¨q¢7=A¦|Ÿ ÿ¯æw6'€_!->CXü÷°í*eýüNŒ²[®Ÿúg½ÿ.‡ìÞñøPK!òŸIÚéK _rels/.rels­’ÁNÃ0 @ï|EäûšnH¡¥» ¤Ý&4>À$nµ£Äƒîï‰@ iŽqìçgËëÍ<êRö ,«Ë·ÎÀËþiq* ‡#2p¤ ›æfýL#J©É½YHÈz‘ø u¶=M˜+ŽÊOËiB)ÏÔéˆvÀŽôª®ïtúɀ愩¶Î@Úº%¨ý1Ò5ln[oé‘ía¢ gZüÊ(dL‰yÔWæ¡*PÐç]V×»ü=§žHС ¶œhS©NâËZ¿uÛ] çÏŒKB·ÿ¹š…‚#wY cü2Ò'7Ð|PK!åD£Õ,xl/_rels/workbook.xml.rels­‘ÏŠ1 ‡ï>EÉ}'3 "bÇ˲àUôJ'ógÚÒdw··(º+ˆxð~ ùòAVëãЫŠÜy§¡ÈrP䬯:×hØï¾> XŒ«Lïi‰a]NV[ê¤n»À*AkhE‘mKƒáÌriRû8I16Œ=˜†pšçsŒÿPÞ1Õ¦Ò7Uj7z…í뺳ôéí÷@NœÀ_ÜI‚šØh¸µÏ¥Èð±Ìô2’véOä/ͧ³w:°Œ}zèMâ’¯çñîÉå PK!~MµÞŸŽxl/worksheets/sheet1.xmlSMkÜ0½÷W º×rvIŒíeCí¡P’6×¢•Ƕˆ¬1Òl½ý÷•ìÆ$$z1ófô>ÄÈåî4Xø>r•¸Èrè45Æu•øùãöã•€ÀÊ5Ê’ÃJüÁ võ‡r"ÿzD†(àB%zæ±2è2ÑÅIK~P¡ïd=ªf& Vnòü“”qbQ(üÿhPÛ7¤:^DÛâ¨:ü¦|g\‹mϳÏü²ô¹fçêRÀ8îø õÑ}B1VKÄO ½­õWªÿPK!ƒj%H&xl/workbook.xmlQËNÃ0¼óÖÞij#Z5©ÄKTB€DiÏ&Þ4V;²Òþ=ëT)pã´3ãÝÑÎz¹:6Š}¡uÒè’I ui„Ôû>6×7ÀœçZpe4æpB«âjÙ{ø4æÀh^»jïÛE¹²Æ†»‰iQÓKelÃ=Q»\k‘ W#úFEigQÃ¥†³ÃÂþÇÃT•,ñÞ”]ƒÚŸM,*îi{WËÖA±¬¤Âí9ãmûÂZû¨€)îüƒES¢¦Ç?‚íÚÛNª@fñ ¢âòÍ2ï”ßÐj£;+¦i:C×Vbï~†eÇÔÂô9¤SºìidÉ X?à¾&!‹çí å¾ö9̳,æÑ/÷á~cez÷pBÿêšö'l’€]‹dpÇJ®JJÊИNgÉXÕ)uGÚ«~6|0Cc’âPK!?Øï!±Sxl/theme/theme1.xmlíYMÓF¾ó+F¾ƒãÄÙY´É&ÐÂÂj7PqœØ{ÈØcÍLvÉ­‚c¥JUiÕK¥Þz¨Ú"Ô ý5ÛRµTâ/ôõG’ñf²da«A‰gü¼ß~ǹrõAÌÐ!’ò¤m9—j"‰Ïš„mëΠ±e!©p`ÆÒ¶¦DZW·.\Á›*"1A@žÈMܶ"¥ÒMÛ–>lcy‰§${#.b¬`)B;øØÆÌ®×jM;Æ4±P‚càz{4¢>AƒŒ¥µ5cÞcð•(™møLø¹D"Çc'û‘SÙebÖ¶@NÀä²ÃRÁ¶UË?–½uÅž1µ‚V£ë矒®$ÆõœN„Ã9¡Ów7.ïÌù× þ˸^¯×í9s~9û>Xê,aÝ~ËéÌxj âr™w·æÕÜ*^ãßXÂot:o£‚o,ðî¾UkºÛõ Þ]à½eý;ÛÝn³‚÷øæ¾y£éVñ9(b4/¡³xÎ#3‡Œ8»n„·Þš%ÀekÙUÐ'jU®Åø>}äÁÅŠ&HMS2Â>àº8 Š3x“`íN±åË¥­L’¾ ©j[§*byõüÇWÏŸ¢WÏŸ?|vüð—ãGŽþl ¼Ž“P'|ùýû)úëéw/eÆKÿûOŸýöë—f Ò/¾~òdz'/¾ùüÏàÛuø€ÆD¢[äíól3 Cq6ŠA„i…G€4{*ªoM13á:¤ê¼»€ xmr¿¢ëA$&Š€7¢¸Üåœu¸0šs#“¥›3IB³p1ÑqûšdwO„¶7I!“©‰e7"5÷D‡$! e÷ø˜Ù=J+~Ý¥¾à’ºGQS£Kt¨ÌD×i q™š„PW|³{u83±ß!‡U$f&–„UÜx OŽã˜éÈ›XE&%¦Â¯8\*ˆtHG½€Hi¢¹-¦uo`èDưï²i\E EÇ&äM̹ŽÜáãn„ãÔ¨3M"û‘CŠb´Ç•Q ^­l qÀÉÊpߥD­¬ïÐ02'Hvg"Ê®]é¿1MNkÆŒB7þÐŒgðmx4™Jâd ^…{ïž${rýCßýÐwßǾ»ª–×í¶‹kësqÎ/^9$(cjÊÈM™·f J}ØÌ9Ñ|&O#¸,ÅUp¡Àù5\}BUtáÄ8¹„P–¬C‰R.á$`­ä')Ÿïy³3  ±ÚåA±ÝÐφs6ù*”º FÆ`]aËo'Ì)€kJs<³4ïTi¶æM¨„³ƒ¿Ó¬¢!c0#Aæ÷‚Á,,ç"န1rŒ†85ÝÖz½×4i·“¶Ntqî qÞ9D©¶%{¹YR]¡#ÐÊ«{òqÚ¶F0IÁeœ?™5 ̤mùª4åµÅ|Ò`sZ:µ•WD¤Bª,£‚*¿5{u’,ô¯{næ‡ó1ÀÐÖÓ¢ÑrþC-ì“¡%£ñՊŲ¼Ç'Šˆƒ(8BC6ûôv‹ì ¨„gF}¶P¡n™xÕÊ/«àä+š²:0K#\ö¤–ûž_ÏuÈWšzö ÝßДÆ9šâ½¿¦d™ ck#ÈT0Œ²m[\¨ˆCJ#ê÷ ¹,Ð AYd*!–½oÎt%‡‹¾Uð(š\©}"A¡Ó©H²§J;_ÃÌ©ëÏ×£²ÏÌÕ•iñ;$‡„ ²êmfö[(šu“Ò9îdÐlSu ÃþÿxòqWL>§ AîYfWkúÚ£`ãíT8㣶n¶¸î­ý¨Máð²/hÜTøl1ßø>DÍ'J‰x±U–ß|s:·4ã2VÿîµAkE¼ÏsøÔœÝXáìÓŽ¹³=ƒ¯½Ó]m/—¨­dòÕÒO|xdïÀAi”,Þ&=€£fwö—ð±¤[þPK!¯Î]ÃR xl/styles.xml½Tß‹œ0~ï_òÞszÜõ(……B[n }50I$½¿þ&FÝ]h9èC_ÌÌ73ßüp’üiÒÀÎÒyeMÁÓ»gÒÔ¶Q¦+ø¯Óñãg…iX# >KϟʹÇäK/%2b0¾à=âð9I|ÝK-ü¤!KkHªë?8)‚4$ÙápŸh¡ /óÖô¬¶£Á‚g+Pæþ•PY)Oʼ¶`C¢§:Ä-£ÇWªr*€­Ð ægX*Zý´2Ö0‰â·JþG®åð¤n›% Ì(9’ÂVù4”ÞÐà#Íâ÷ŽwçÄœfŸ®–ƒòVÖ5ô£·Ì)ß 2Ù"8ÕõáD;$Áˆh5 5å± D[K€—° ¿Ûî©efÔGßš‚ÓZ…î7‘ ZÅH•À͹¯h³¢eS»óÿ-:}?š‰a€ùhcQûª3Zn-‹Me½uê•\ÃÔȸS»¶¸w·ôz3·eaå þ3Ü ¸ª£ 2˜q6Óe\‹EEõ& q4²#ài7ü"ÿõãîõ¬ÎW¯‹ü=,Kz¿Tpy Ê7PK!ûKÂ$PdocProps/core.xml’ÍjÃ0„ï} £»-É)¥Û¶äÔ@¡.-½ iãˆZ?Hj¿}e'qÈ) ‹4³ßÎ.*—;Õ%à¼4ºB4#(ͺ­ÐG³JQâÓ‚uFC…ðhYß•ÜÜ8xsÆ‚ |AÚÜVh‚-0ö| Šù,:t7Æ)âÕµØ2þÃZÀ9!XA`‚†G`jg": Ÿ‘ö×u@p (ÐÁcšQ|òpÊ_-˜”3§’a°pÕzg÷ÎËÙØ÷}Ö/&kÌOñ×úõ}5•z\T—‚Ü ÆÕ%>¿ÄÅu̇u\ñF‚x¢~åí0ȾDû¸GåsñüÒ¬P“œ¦„¦ù}CI¡ßcË‹úPšÜL<ö¹/?AýPK!^º§ÓwdocProps/app.xml’ÁNë0E÷|Eä=uR!ôT9F¨€XðD¥XgÒX8¶å¢–¯ÇIÕ+²º3su}2¶¸Úµ6ë ¢ñ®dÅ,g8í+ã¶%{ÚÜÿc’r•²ÞAÉö€ìJž‰Uô"À,%8,YCœ£n U8Kc—&µ­¢TÆ-÷um4ÜxýÞ‚#>ÏóK;WAuÆ@vH\tô×ÐÊ랟7ûò¤¸Á­(ý¤üotôèkÊnw¬àÓ¡HAkÐïÑÐ^æ‚OK±ÖÊÂ2ËZYÁ¿âT¿³•2¥èhÑ&34iks–½*„§dŠF9bÛ¡´ HQ¾øø† ¡àcsSïT› Y †$N|IúqcÈ>Ö+éâbJ<0° ãºç+~ðOú–½ômP.-êÁ¸7| £Žë[Content_Types].xmlPK!òŸIÚéK o_rels/.relsPK!åD£Õ,xl/_rels/workbook.xml.relsPK!~MµÞŸŽŽxl/worksheets/sheet1.xmlPK!ƒj%H&cxl/workbook.xmlPK!?Øï!±SØxl/theme/theme1.xmlPK!¯Î]ÃR º xl/styles.xmlPK!ûKÂ$P¨docProps/core.xmlPK!^º§ÓwûdocProps/app.xmlPK > openxlsx/inst/extdata/einstein.jpg0000644000176200001440000014613514155600363017076 0ustar liggesusersÿØÿàJFIF,,ÿÛC (B+(%%(Q:=0B`Ued_U][jx™jqs[]…µ†ž£«­«g€¼Éº¦Ç™¨«¤ÿÀ (´ÿÄÿÄ6!1A"Qa2q#‘B¡±3RbÁ$CÑráÿÚ?òÐ[¡v0Lä†ÂÀ/acÓH5à›ØYQûؘ}!1­‡ŠÆ¬™=’5¶ Wb´ êƒùè+ÈtàUò!€6$ÆØ¬k`Õ"vRéPÒ‘°±ÞÊ´-0]Pí!®ƒÀXXåL—ô»¿»bŒ_#ij„í 7ð]Æ1®ÂNØ»ªméÕo`Ý=lúk¶±¯€zÙ>lkk@߀»]ƒ ߀¥ý}4TqJOF¿Gmì-UPäévgßbºCN;!ºV©’ÞôbòL™Ä€ ü´H$Âô4ÕŠ]ƒIP¼‰­ o¡ò¥ô ƒL} “àÇJÄâ !Kd8´:¡¬ô7%ðMˆhlŽº H¤ÂÁ€ÇÐy)o¡8¤%:aâÊLC_Bn÷@Õ0­Å‹¶=WØšÁ7ä~àTêÇ Ålvʺ@Ÿé!WÀU"~CøÐ#zþiôJÐÖƒ°úûA¿,OèVì¥ Kö£e‡^ãH¨ÅÓØæõi™¹·ü‰w±HMZÓÉ¡2Æ›ò²[%±lv€ÓÁ‚ØÓùü Ÿbv ‡]………Ðר%±RÑD¶Û®Â›cZØälMx[òMl:aØ“.†˜]ö/!ä%Ù;.Álªªìc‹*(ÑÕZÚ=tC~š`Ò½ - Ý‚ë°mU ½ !‰h4ô:­‡Þ´AQò&éÚí”—Øüh.†Ýù/$ôÊìOìÐ"KocøK¤öMö}#LXœ»Ñ²Ã»{”cûPœ¹ ü½ŠNú#À)ì.ûÒ%§ÛoÁ>B´-Š]blF­ ·cKcµ   vÆK[Ð4 «bè/TÀ:ö4’AöƒÈy±ÝŠN´!*±ÐXžÉðbÀVšBÆ.‚÷¡­‹ÈÀ¸AÓ~99y¤‚2¤T­x"·Øµ°°Tö‡ª 4AI:±­½Œo¿‘U‡L)ö.û)ê6èüØ–ÞÁÇbj†›*ÀÜ> ¤$¡¯Ð!öCL-¥±òli[7†$£¶i)R¡J{¥Ð´ÉnØüô'Ö….¬V’Ñ-Û’}‚v¾…{±t…àVD„¶7Ð"ºÙ,§Þmì›{Ç`¶  KȘ !…&ÄÅö:ò=WØ•x Øû˜˜ÜB‚•Oªk±=… B°5¢V‡z7@ƒe]è–4h¨ÅÉÑsÒ«2½—@»Ð¤©Š6[Оû?A&T_ÏCqÕ®ˆ¶;`š+• ·aav;ÐvZ±Ò®Â’ÚT šøW‘¹»ÛAà}^ÂÇëÉ¢Ã'ãF‹ jØEÅ6¨³9KÝÙIº ÿbò6øï±rЛ¾É«B%°±Xr¿"l²Dú$fÍ_C­C¡=…‹ÈõØ’ 4•Õ»X&Swà^´&µ¦ ×T%i±$ ¦mÕPÉkb}1Vˆ ½ØÛ]‰>Éì(: ¦;5£LrãlMÝ’/ÀáØJ7tŰo}‚ }AC“ZKÀ”«¶4»ñ®¬LchCMt1Õ¯°bñB¦žƒ Lr[þHzzØm†Á1Óo£hà|lÒ* ]m eoFRäØù>ü•l2B*Ÿ’¥h¤Ó²[Тéì¹Sè–ªÉvÅm1"–ÉNƒì‘¦&ô'bÍÚ¢’´?]é ü n4=V‡ãdô+Ø11Ä¢®Ð“Ðé4-I ¬‚ö I èaa"_È—` x%üƒÚ4Çé²dê,Ùzs•ÿ nH‰aÇù!JbòÃÆ;ìmy%¥B±Æ­Xé[ zB[ciø|è¨WbRÝCò?½ÓècÕk²v:­„–Á“{¤&­û¾‹Ñ¼Ë”ßåõpô«ñà[ù<ìž§&I[“Ù“““)ÅÒvSzNˆnüÐxù%±¦ÚÄç$´.ròÇÈjuüI-¥Ù.Uà× Œ¶ü*äoL²Å;§äÖñâT÷#XT–Õ/€ŽÉé[:°ú6¥oH錱Áñí”瓨ÄUê%ÿ:’_¿6ÿ’?i¿Ïkù!ñ…?ͯä¯ÉKü݆X§N3VDà¥.¬åÍú|´é˜?ANù ÿÃo©#7èóEéY2Ã’ÜLå­‰k»ï²o`Øxz ÙV.Z‹’´k,i¨ýÔ:%ÊÝ”©öɪtƶ銸¶h´•+ÿ¢ãMJ¨--‰? Ñ _ªû‰­ Šè,M’ß‘7b† dbª&ʰ_`ö {Äô)*ØXÛé‚* ÄúÚ^F• ý …A´6í "½ŽLI^„×ÀS±÷ßH‰mèÓÓay&›ý¨ìõž­B -/£Î·)}šÃÒdɺ¤oIŠ>édè¾~—Ź|óaªxÖŒyb“uTúT ÁÇ­™Ë‹ZZ솚dÐÒêŠür{Še(NZj¨:í— m¯kìÖ–iÜôl±´©3l^šÕÊÍ–.zÔbŽŒxc{ao䌹œbÿ$”cðŽwëെþYŸþfW-ËúEG>Y½uöÿ“¶c•r¾,Î*WMš'.Ú5„¹5îªæ\šR½ù=CŒš•²ù,º3Ëû©"VY½BOF‘Ë‘º”lÑþÆç þ åé1d_ãŸdÿàqŽí™ÏÓF ÝŒ:¶D¡Zã¢T_+¦'iôRƒšê‡øÒ[-4’¤)M7ä›Mì;¶ í•:¤$ö ü‚ßAwØ8ü¾(t‘7öTòÃ`¥A%ðO@Ø®Éod¶&ÄØ À,b1l*É­‰iÙW`âHKe_„ è*Á¢Z®‚µAC½Œ]X$à:Ó  ¡%ò0mùVÁŽè¤ª<ˆ¶ k±àÄòåQHïÉ(â‡ãÉçM¼“oþË„áur4—¬œ´™2{œ‚|TRLÆßJMätO$ÙT/#m%Ø&ŸƒXÎ1TÒæ«KV>pRM»*YeíFø±8I*ºòt;rç6”R+ñÊWfÞù§ÿ£LXš§#—×z×ðÅ/äó¥ù3>Sn¾ËŒikHÑpî;£<¾¦_ñÑÏ,³ï“4Ã9KwTo’¼48zl“¨ºùfØý$ÿå4—Êe/Kéà×,–ѧ Ų¡,2ý±ÚÖ9iÃdy\¿¤F|•KÉÎÓr)|5Ðãä}ÑôWÕ™Ê2‹ªbêÞ‹ÿÖ‰n5¢cÇÉp„nÌäÓZ!èu{4QIW“«Óã¤çVh¤£HÍržW'´Žœxꦿwƒ·ÓbpMÍíù4›j—ôqOSü¹ž¾>NUê'•þ8GŒ>ã‰cƾK‚´äµ#5…6Ü¥f¸±Á{áþNŒ8¤ãµ¦_(â|1«oɇ¨Á“$®ô(zZ–Ú)b§¦’}„½<\½¯ý„ðÍ®1¦eA9=ý QÛ-àŒuM™¼x—îƒiñúd­¶‘ŸâÃ&ø4É”% Ê:ù"áò‰qOqtV<¹pÉK´vaõª[a“,î×¶F2ÇøÝN*¼ùeÿ§ÙŒÜ¥Û3ÐEÓ¶ Û²T·fŠVi‰´Ñ[.5ä²xôiZ¦fÕ17B{Z&öb`ÄÄ&`RÐ'cºC‹½ƒÛÑ- ¤‰]–Ÿ· @šWaËTM«ö6© u°cTÚ@ÝhAbºckÈ²¢ë®‹Rwpt”ìÏŒ›°ÛlNÞ„­0WÉÕƒÚö(ÅòºèÃ*呱ÅkìM6˜á‹ù"ïMйðzÙK3j¤ˆ´úrëÀš¦–êÅ,½h®v•Â/­¡¨xKûT¾ÙÑ)¼8Ö8½±~î1]ù6į"‚þÙÛq澎ŸÝ¥ÑÏ›%ܼG£ÎÉ’RÉsv¾ ±Ë§]˜ú¼žþ7Ù~›’vôtþ(ñ·Ñ¦ rÈ­®0F™³E.1tŒ±äŠÿ±<­¶ˆ“wMÕ‚Œ—r5ŒTž­Žy±b¥{#óÉ·(ºD?U(ÿɲ£ë$Óz°ÿÍ|R¨±¼¸ò..(ÆX¡h×X6£'¯°Ëé!‘Þ9+ø9§ég¦„½<ªù¥õbŠÅÔŸFŽn®‹Ô©.9$eê=7þL{‰ÍO±4ªÉ×È›¡¿m!5à"š)»ú„=tV»úè|¾‰m݉ì–Kt'¾„ û C ìjÿuÐ5òÁ=PÓ®‰ Ò øzþÉ-+¶ÑW­…ØR`ÕiÞ†¼X5°¡S)/ž‚¶> +EcV™¦X.qïÉœdÕ‰S¥Ó¢ã¶„—'`»ìèÆ"ïŠhä““f™uÇL$œq_m™Çö6ErV„­: ‹ $KŒš¶˜¢“tÓE~4´Ø”7W¢”8tάj/'Ù8aSršö¯&R¹ælÒ1pÚ~阒‹^YÙñù}šrQ†ŽS'àåxâê¾ÛÈÛ¥Ò.”ä§%ÑÑÝë^Ó|crвÍO⾌%†Ó¦þl$£†oäçŒå9\PI¨7)»’ébŒ²ÖL¯ŒæõÓÇRù1¥ï|Œçê7¡òy*2T¾MV)F7Ú0Ë •­Ç#G^,êQ©’VÓŽ‰ŽyÂIÇÁÔ§ÿ•n¦yþ¡OJ¶™ß}• ´é2²BTç×ezU$Ôe¸³|þ•qü˜Ý£Å/àŠ‹zt>>k¢%M‹ÉQ–Í#(9mÇÅýÓ¯“ðàÑ6&KB˜]ƒ À!ˆíiìV:Щ B_Æ7c«D8Ðô»!÷Ðq½’qû%—ÞÁ B݉Á‡*} ªc©&Sj=öʵƅ´<Ü¢´ôÈÇQnÈkcæÚ§Ð•§ [gJµŽ- ÛÊ“é™Ïù¨Yõ- 3å8J¸Ðâ¡2d•è–«þE·QêÙZqò˜¡‰Ü^…)4÷Š’¿&nÓÒѤcÏkÇfÑ©C^ ¥ ¢ü˜¬:´^nÛ’èÛO*MiydøRíü n”SfN mÁíø0Ʌ⌴N9Bš£©EF*ÛgF,qÃ)müdÏ)´ã“’nNØO/»Šz1õWåèÆpýš4†$×åË·á%,®ò>0]!O.8¤±*HÍÏÓMü• >Æ÷Èpôï,\T—Ѷy!í«¡åô¯'¹FŸ”bý­ª1ÿÇxåu j¤ââéù3PJM;Cħ Üágw¨ÁU‡šIvyÎ.š'nËÅ6§\»ðW¨Çÿ(kä=7¨p|$í3_Q%Î âÎ' è|ëÛÚ A5qÿFmü¡yÐùXÜ›KcO–¨—BòH/`ݱ7½ ¿ƒ˜,h0;šV6•ôGö&·Ø;½ +l\¨µ\~ÄݲZÞ‡l?€WBÚØmè}/²›Z—Ÿ"smk@›Û½‚w!ÚoeFIvD“nì@¥GTÒÉŠ.?Ù ުХ J«6'ŠêÇ%rUÚ5ž,jiù1ý’”cýšF\—Ù2Ä»[2’’Ó%Gçf¸”ŸƒX¥NüæûŠèÉòoÜ$ÓtiñZé›úl\Sûv,ùÌ’ý©uè¼qtåãèÓbàåÓ6Uä÷£“,¥ù£'ûNœ^çÍ­–ÿÍ¥’ìÉFߪ£xB8ÒÕ²e‘Eû¼˜¹»tºEËšìn ïË#4ØáŠ1v•³T¡ò:9òMd“~<$dðdœ­-âôWô0òìÖ>’k–¡MRÐIMuуš÷* à¸Ò'ÿ‹DKd­¥kàçχŒ_LËÒNx²Ô­Åöeëe,Yt´Ìyãr×ðÀÚå uä¸98SívŒf½ÉôvzOP«„÷}^5pZg,ñ׹ɮ…v&’T%Ù®¿%o²#Ø©±&Â×BlV …` GzÖ˜›¶J[ -Ž«D¾ô4©ìÐÔoÎÆÒ]²i°þÊ“JÃ÷t 46’èqÔ_Éܾ‡äÙiÔÈâ«ÜÅ%ÓDîþKi%dÕÿ"ï^Má-qùY”ã#T×ôNOù0ñjÚéž^M,[§BÅšpUzø4üÜž¼öB94ÖÂMã%ý1ŸåÁǹ.Ž^N3ã$1.<¢Œj•ŠÓÒ/m|¢_îhhRÚ' X Kb@À} Æ1 tv¶šùaTÄßÏc­[c­X¤ÓÒ%ZeF[ mƒú&©Û‘tW¯ìTK[ nAtw#\”ã´O£m$ŸeN©ÖÌ×ÈÔ+ßàÙ¬ªxí½™ÅÓ{-+\£¿”$›´¨”¹þ×LjMƯh%)(«ð5•ÚׂÜÕ‹#I§Dsi‰þFí+2N2~Þ‚Y'ËqÓ7Ç‘U8ÿc’„ÿi+$íÑÅëeÆQQjZfNU4ÕšÆ\go¦jš’¯7¡EKÝÓ*Qåµò£Ï,+ýQM$)§åæJJ«L·^Ç ölÓŸ0Rã/™2rË’ÿÙ”¤ãM"ð{¥¾ÍÔ[{èªNTÖí×µh!Ö™´b’ßa9;[¢%9m¢.réìçÉ$²[ z9?t§É½>-6Ç* 4­—ÓÊm;¢–9%VOánÖì˜áÉNÚ)­|2ñeÉ“|“7r„ŸS³Ÿ7¡ŒîXé}sÁ,.Üte’VÔ µäŒ“m¯`Ÿ ŠÙ§­[Y#ä^“*rã5ièUEµ¯<’HÐáû»tÚ$רv&ü L,LLCÐ0ð.ÇC°Lì¿ Wz {ûi|…¶¨e*wd½ mXlM°ßû*šì…&©ÅñL"­}ƒØŸØEy¢æÓH?ã°[_A §ô òÒCrj*> ýßÉXíÜ_ãáö ”-Yª„[ÛÙ2Åøå|„Ô[±ÂÞŸL&¿’îÄß')oÊîØá‘­=5Ó/ò)ÊžŸÈqm¸ÿÙŸ)AìÛ”R伕 zz4„båw¤D¡mÒ2áãɼãË~ˆ¦¦©Ö1Ê´þM”m_LÏrÉÖδš¶—+FY"äëņH§ôß’¤ï¥¶ñ¦©—¨&É0kt™WQ¢ éYŽLÍZfj9ZM½—Æ5)v?j¤›P’«š…%bíZ€øÍ¥í âxæåÞŒåÍ:±IÍÒnˆœ¦£WÉx%j¦ÕN¤”›i¯( ÒÆf²¬©ÆÏ?/¢”bÜ6¾)cmoÁ\d¨ë‚Yqñ“ÚèÇðËímy)¤Ò¤»1É­wÑ R?rìŸà?ÉÚL°þ›ɰ j€C†vµ_ÁJ+À5Dz+Ë!j…M ;tÊKt'kDÐ趃`¢j›p¢R¡Jš´$ü'UMÓÙIÜZd«ºF­ëŠ]öJöé-ŠÛ–ÐøîÑJ2[]•;µ$ºìs”rBÒ¦»&4ÒwÑR\­^ŒÔZuຮË^èÓÙ‚}xM®‰áÊéÓ*·O³GS¥¿ÇÔ„ðrmm¢^•l¥†k}¢ã‹$¹x3_»ìè„S1þ’wÑœ£S»¤tµìTe$ù/£|rå%qø`çY*‰½½ TþL²¶Ó¾ÌâüÉ*Š­Û­$ ¨ûŸôTdå¿ Ñy}‰Ê*­ìœ™”c÷ðc~æ»5I¨·&8¤×Vb×CŠ‚øQ¯‘~I%¨è‰e›ñFR›îöòͺh§+ñ°åª˜¥£¶am²éÂwâŠÅÅ©9v–Œ';v»“TÙª›oA>M—'+_èM¨·j‰‹wK¢ù÷D:¢¥Qä¼ tÿÙ‹î'N8§ ö jÁFžŠãÊ;Ó1ÓßC–4ºÑPK‡‘„ð6ÚKbXçï¤iŽq’ã/öÝ£HÉ~ÙiHÔ[ïDúy)cø4œ”xÚ´Ìe|Ûäã®Ä­Ay'$wdcƒnßÉ®FÒUÙQöÄ™®zf‘‹ŠIt9Ê’3ä¥|S““]œk¢ªWQ\‹Œæû×Â4‚¨í½ü”£è¶ÒT‰“µ¢eHž0Kµd.P—$•ÎråÊ´'‘?Ü‚ .ú4|tÅÓîÂx¹ªq9åG«‹. M{â¥]4\3¼R¯ø¿ è’†|mk‘äçåƒ/¾/ÓæÇtãI™æÅ†åÙ2]T“þLòŵtg®.2Õôe%N˜ŸÀ«à{HB`Ø„0°Žé= ÆÕ“ô>­‹à®U¡m°wàIÐ.ÆÕyvèE/ÒâZ=¬Uïn„Þ© öT_¸nWz-¤èRŠRÞÊœ“HP’H8Æî‹JrB^î–ŠŒ/OC\S¤Í2¸:MhçiFVŠæ­/5çÁ-Ž2û$­)q¦ÚvT_×b;4IÖŠŒ]Û躽¡6üíÒa$åwòf¤Òp“±c‹»ø6MF_ÈdŠ”×Áq“^L#XÝKÝ^š\P×Uõ¢b“tü Qå-t:]v6“[ðíþÉq‘*Ñ­kfM©;ð…Ž·$‰žI+¢aÉ«“ﲡõýšþHÁkr)IÊ7- òEÉ%e<¯¤¿ÐEZ·/覹F“£/ÁnÜ‹á®ÛýXc$žŒå‚ŸÑÅ$©cÞ™nr´âîŠrŒ•N&Á%4ñ smVHÔŠ„ÜZh×$qç‚æ¶qfÁkÑšW•¥£¾zãM N\%h3bkª’ú2q¨ÛìÍÕê«àUð!=` ° uBþ†;Ð î®M‡$ÏoBãa~:+K[¶%Úl×cé_dí«Mè¥×l%•²Vÿ’“¿kï¤ØN2DÓº¡ì´•ö'"\›6à¥)AGO²ž5Æïl¨àöÛ £¤ÌÜ’è}¯ˆ•ÊðT"¤ûŽ ¹qh‡6VŠR\J]]”’jÚ*1û6M¨"ԥѴ’øcPvî„é:“j…“Ší·ÁéØûiÑ.ÔµäµrZíî¾Ó./Œµ»B”9&É…ÕYuÊ>P”R«}ÅVGðÍx¤…I4Ðî›±ø®ÃNȯm$ R£9AËHOÇcu Uq&üM{)°J1I”›i¨ôı˗eð•[zBQsZM“¿:šê†òÇ5D~DÿåE;{U²'Jãý™ñNœXÜwbŒ¸Í'þÃ4VYj¬åÉ Çå48fœrÚ5dŠ”trä¸ËFSŒï”m|‚IÓqä¾Qn1qö¶Œ’m¸Îšù9ç‹‹ì–ŸDÐ6ˆ}‡€ZX ‚ ;ЊÙMêŒë`ûКNZkWcK[&Iv R"ØäÒ_c‹ÖÂ݉¹t*¦TS“º/ŒVûd¤îÛ¡9¨Å®ÈŒÝô9O—‚£Nûb):vT.´Í"œ»* BéÛ4Rm&ÌåIü¶KZ¶¶8ËTÅ$þtEIx-O‚ÚѤg}ÇC–8ÉZFR‚[hÖѪŒ_]<•Åš+Q¦àâé6_“%¾ôŵ§±*¯ì%µ]ñ¤­„cZð1C”g^ “§t8»vRšzª£} 6ž‡%å‰ñÈl*ú‹ãh¨´ãö18ü -lM$KVµÑ<>¾¥ÈWºe'$›CRir’ßÀÔ¤’th¤ùuC¿€¿ i7´ o¡qU]ÛòŒòaRéq0ž,«qÝ øÉPWpcm§R¦‚X?"¸kèˆV?lÕ2sásÇ´a©ÃñeUâÎl‘ÉéÝ­ÄU–I'Â_ôkš9yòŽ|ü›åìÁï®Éä6¼‰ÇWà–"¯Bt0XÐÐ4ðB©!7àŸå‹h­}Ž=;bwçúO°¾-êÁ6ļ°æî‡ÉV»í$5ÿ‚¥$•ä“ÐI·¡O@•v;¦>¿D¦¯®ÇeZ%ÓÒªÕÒ%½‹_ÈXÛeI(½ö/ËÆ5[ðO)7oE);§z/]¦Ó*¾d%-jÿS¹y-6ö˜6é&;¥¡9_Èã9EÓèMÂWu³'†Ã¿€àäªZ~ &ó`kV¾ñåÇ•{é¶ZÅI¸=|þ£Ò©¦ëg+å¼rV—VräôÚr‹¦ŸF¾›:kñæÜ_Ÿƒ/S‹ñdö»ƒ9døÉÿÑ.ž×a#ïBœxºx Ø2F=9E™¿’kÈ%½‰­ØŸÓ)?nÁ;\…MÌr´þÉd¿ài=£n‘¤›ã]#5½²etö“½Xm¥eE[¯“•A!ã¹õeqVöþ–Gã£>roLnRŠ»)f½IlžR»)¾Zºb·kÜi-‚ré “­5hNjÓ!A&Ñqm*KEbÈïëìÙÎ-×ÔXâÓiµ£h߇¢—uÐIRºÙ7zi^„“eW‘®Ã¡7J‚6¬®OÈ•´*Ù\t›Ó)ЪÕ!¸WòNÁ/ìt¿¡R±5î´U6Ct¬jW¶„©Ð?ÝôåW+òÁÁ^•t-nÄã6í2%’QÔžwÒèÓÿ!Å/hãêŸT[Ì—ül¥.VÒBü’ZjWݙ˽ʥÎ.Ô¬¼yúRjÍSSŽèÂ~›¹A‹YGSÿg\\rªOg'¨Ã»_¹Ùñs5©y8e¦“ÓùXJ)m¸³ãöÚÚ1òWeS‹DÏr±XxŽÀ@1°C=9ÊÌ¥·¡µ¡="^™ mNÇÑqI¤Wšø&ï²f­Ú&†ßHÑ5W¶B“•§ÐêèrŒ{&M:T(þãL—•R of²ŒT»3–gUÉ×cŒšTúcÇ•µ¡¸òÿ¸6öj°¶»Š‹\žÍ?ÅÆÐEÇÆ„ä›i1m-쨵«Ñ2»ê‰NºïÉj•y²ÖúѬ^å±¥NªÍ"«Ckàdÿ@þe%Z? èTZðúìÈú}Xm¤7B )Ûì*…I¯€t”mØ8ªûMtOМ_k±+òRñ}¦ _ò*ß@ú¦ˆÚt6¢Õ=™J àj.˜¸ëÛaS]·D©NôÙ§ä›v¶k"—qØø¬’jëè‰á”L³`SVžÑ–<™1ºg^SjN™¼°ãÏM&r{½.Z׆t)¬Ñí_Ɇ].[}3Ìõp“’ðF/R¥ Où߃ ØñÆ^×i™R_ÁOU] %i¢Pb v €ØÐéÉ#;¡ø%ü…Ø¥V…æÆ—%a´¾âþE-‰7_@ÒIªÓH™Yq^Ë~Gw%½ŠÇ¹ÓÊÓn’@œ"ßš*y9âI*f-V¼—I¤U7~IêüoæÍª›Ð,²ð»nǶétiŽ ¿ß¿ÉÆ’²“å³>JR äÓ«l¸A¿ñ…-•I!ÂïEÚ“wÐ{žºcÕl>ƺûÇŇ‘ñ mÑIPq°Q~ I¿ªð@ÓK²vÖØ- Ž2§C­Øhm¡$™ S´O}…««Šö&öþ4DŸÑ1jÍ8ûL¥ w°Œš¥$T¤çã „vÖÊó¥ØÒüùišÝÆßhË.7˧ða—q©Æ¥òsd„’µàÓÓzÙbj-ÙßΫUz9'‹&í~Ôk ¸ócJ{g7¨ÇÊ)ßÁã䌱ʤ©“ɪ·°ÿò1Ü]ÒTqÑ hh<… ?€³Ó’óà‰¦'«DIî­‚ÛØîºèj^>E»ú‹ª¢]=yÜŠiØ6é/Øv ;¢øÔw¤D§ãÀ“²ã*wþ…mÊE¹%\B)ÊM6>*.›°Ûè\­µVF‰^Ù¤"·Ë¢£þ Òÿš¥òe<µíAÞÍTS]B =š§’C»óBÐK’IDxàÚ¹L¯ ^ß@ÿèÝ>‡ªÓuc´—bäŠSKÅ¡ó[T+AÉ·¤Ú&ü‹”¾CŸÑIÅýqù+LMãäUCÿÐ*bi ñ´%½¢'‹vˆŠš½ ]ïû _½Q-Yœ¡(Ž.K¢üvK¦ö„┕2®7®Çî¡ñù…ùÚRJÆ4!Šºg.LSÄí«G.L0›ä†RÃ%î=(熚oÊ9§ƒñ6ãÐ¥ïŽ;ÕG›ÚèáœReEjÅ$›²:ÆäŸ`¢ßíØƒÀl±‚ôê4üôCI°uà–÷¢e{ ¢“@Ó{^ T×ÀÕ=|ÖØ×_cQ|­ƒó] ZWàªIïC[dæ–êÌ’mŽéÕž¶\{UÙªÉ|ŽpŠÛfNQ­zxó´õH¬x››ofümÒ¤‹§é·fŽ E´ŽQ‘ÍñNŽƊþ ¡V»*·±öú)c­²ã¢Ô4 RЭ_`™V;M‰÷®‰¥wä~–é— âÛ±ð-Îé‡]‘¨Z%ÂÞ…Å­¡¹Ix8¾ËIWÉ..´gmi¡ÝØ46ÓМ“ì*Ý¢ZúTÀOïbßIh%¢1-6ü(Ý%±ÝK³DÓÕ•æÐù4l¤×ö6ù.¿ÙÉê0Æ®*Ž)§ºt×ý—‡Ôp¦´üž”'S†üùG¼y9*ø9}L%ëhà̼Çfp“ŒÓ+%5¯`ƒÀã'‚ïÀ%ð' ØÐÀ=iìž™/»¡.­‘5²xÒ)U¡¾Ú¥±­ ¤¿’b©l´þI“®‰NôÍ?jћܗ“HÇܾÉÍÁ÷fkcÕ}“_’I$58EZD©ÛÓìy£+þJÅé¥W-}X¢£JÍÖ8»Þ‹Ã…FÛ³e_G¬õ;xáýœøã«fÑO£D¼³Etº.ž¬ÙcQBr„Aäøoäû65Œ¿Çðû‹H•ò.»CIiPm vúwôR~¯ä6ß`ÛÁ-Û£hŽ2qtZÊâêk_%.Z±²8‡šìM/ì[‹¸”¤¤·¦KŒ¾,:d¶®Åoú)Á>™“µôRIý(+´K[設öZ’èqiØû×C¢—D´«{LæÏƒ¶qþ8ÞŸò^,³ôÏ»™øúœ 65î]œ¹e)bt¶5ÇŒß.™Ï’<'ômíÚ0]t Av€u@¡ gªôÙ y^Hbºvö ¬t¼¹m ÚðìOö‰­z®ÇÿhÚ·îaqKìpNœŒä¹;ƒÖ¨#ðŒ¢ªŒÚj=l„õL#jZ:⚌e/Ü‹‹rÛ4ƣߟN(NkKÉÑ´÷³›Öú¯ÅíÿÑçÅ[r—gF8ûmšB/'J‘Ó 4‘£ŠJÙ/+N¢º&¥=¶TqÑ¢Ç]ñø)cIi KÊ*ƒ†‰qTRv;aÀKÖ7z Ð8ñ¥пÆáô/Ƕ )ºzãO}‰ãtÄ¡@â«bâ«dÊ ‘Ç]‚É8½í¥=jÁÀ™/”*OhN5уNÐ)¸½–â¤dÓOa§±GRþG8ÚÑ)ꆘ§Ó&)'f›lqâº[µ±Eñ×ÉIÛvË‹¿kD8ÓßG¨ôÏr‰Ï’5òmúvt±µIšæÇÆOÂgŸê1)v‰ü°^Dó×JÅù§á ÎlJSNƲNÇùŸT'’_ì?$—h¯Ìë¡~gð5™¿ùä–¿,å´Y‘^O’ÓŸVKœü1©Ì®y(?$¹m+ùBü²Ž»sÇþHÒ.ý­ú%ªèž6)BÌÞ5_8w²”×L—ÜG)=ö9*F2«ml¨ÔÓ3”Ú þ™j[¿ƒ6©”Õ¤ÇtúYI¦š ¿ô'µ`´¾GË‹Wä·i)-¯(†¹'Zú0ÍI]mG„œÎ™—o´sú¸Çÿ—Áå·®$rµÅ™IS!¢F© ˆ Lv&¶4 )3Ó–Ý!=*€µNû3kÊ&¾GH¤Øõä#§ô;W¢\Zwb’O¡)(Á¤·òziùRi웽ÛòÁ>Of¾™Eʦôe9'&¼!*Œ¬9Þ¨¬q”“4Ž ¾ÍÓw¤o§˳|oT‘¤^¶Å9ÆäüV|ï>_¯Œ[uÏKÓze§.ü•“6ëþEnå»6Œ#óŒzÛÉ'ÒS}±ð¾Ø(%º%ÒSJË)ª[}k¢x„QT (V $×BÒé•h|m»q›ì[~’}ƒŠbüi®ˆ–Úbÿ$¥¢£Ÿÿ²+òG´ÇÊ-‡}ã£9Büí*LOjúcYé¨ÉhÑÅ5®Œ^¿£8¿+F‰Ú¦L–ôG&›¢ï’TªhST´L]ªc_Óúu.‡vZ¤¯É2¶®†ŸÃþ‰œZi‘’\VÛKä× ¤âü¢pbiº•Æ_ôFlW .Ó<ŒØ¥éò&×µ™zˆqjQé‘=¤ÈCƒX ŠAàhaäC£Ô^Z &ØœtKA$¼V×L–öR§ØßWd®ïÉmëdÊIÅ(鍸ªìš)8ÕIlž¥HÕ`•oK䵋dOÓ¸ÜÚö¾Œ`­é6l±¤¶¶oßCp¿àèÁ¦ëeF;ði)qèR›Óèãõޢ⡿'6Óû=IŠ0)vT²Ë,ø­DÖãØK2ê"JríšÇJûl¤¢ëcPÐW_âRc qÑ-5B¦>?aLL8Ž©öKJÅ[ŽËÒé ¼PÔ~„à -yO±;OÉQqªbqåtÌåðfàÑ<$–™QË(wº5†Xȧ‚%%Ò3œUl Üwzø.”âÚ#ñ¢âé”›lMx¢bö×Eyü„ÓOBŒ·E'h—[ý»)4ªŠ[m?è™Â¶†½Ê™œ¡q£…¹áÈÒzø:ý6x·§OÊ6œT®õgŸëc%‡Ü¹DãÉäÁ.LNO´d1ïB€Ð è4zTÒ²žú5«%½Y-ì:Ût$ÛÑQ×c¿h“\i Þ…(¾ÒÐcqvžŠqŒÞŸöLŸqé‰dŸ$­×Áªw¹ºåÕ7¯,åJ5fË{.]¹¥’7‚U¯䜜’û/¥î쌹c ºz<·ï›g£èð.<ä‹É>ráDqqÇí…Ï#ïGF<:èÙc­—¯=É'ØÔ­uÐ&ôØø¤»ö¾Ëáli¡rEr_ÐÓAÉ rŠ%Î åR‰j˜ÒV­Wan¾EΟCçR”$©4)’àKŒ“&¾I’{¥¢]Z±Ã+ÆöÛFðɯäM|™Î&tÛàíBJBÉ’Fã/£H´Ñ›…HWL©|¡Giý(ñØÓfi½±88¶ûDÕÿ‘}QMÛ3•ƨ¤Ô×Ã1õXSJTp*Ç–íž„3+P“ìY±=ñÚø8—§µ(­?ƒšxßšÚ8¥Z#ÈáÄ`:cHl@R=W¡IìØ–Œ§®ˆ·ÙIrv?¿mùbäÄ»qÿF{N„äï²–YR§Ñ<®VSM+ù½É?%âNN¢ˆ›jUÛÚFø±ÇäöÍ^FÉ|å³£XÕÉÝŽSä©:CÇ&ÕxE6õ]3ƒÕd÷Wcôx$ÎïQ“‚X¡¯“5J)-³LxäöΘEE~XÅ dœ´–‚0“픡²’He>¾EERòG¾•t !jÁ+Øq[ã°KN˜ª]¢ýÕØýß ¹Ö†Ó}‹…öOºù#Ôf’ïe,É4Õ²\U’ñª!¢]%MY*..ã£Hæ]IÚkFn×ö5²)Å›©¦—ÉŽUNèÍ>2T]öÉ¥±FúmнÚþÁ»Ñ;Hm8Ô“£XK–¤Æà”mÔ©šU;ªQÒ¦dÓ‹²›Y1ÓÙçú¨qi5äœòüyqý^ªRÇ8¾È†Ly’•ñŸ_ÉË–ðÍ©Æãòsdô¿’å…ßš9§Åñ’jHÈÄAü€ z^ÃBŒõdјÖÅ(ћ蔒NÇÐ)V™VŸ`£KÚìÆn¥ö5Ô¥ðeöBº7Å%(ñ—ô8ÇŒýÝÔá6¢¨#Ü¥$hß&”bZÃR÷aî5¸ÆãäšmìnI¾Æåµú쬳㊑çB.Wðz8ë+]™¨ÊräÞÙׇŒUö\çf|ç>´qÁVÍU$¼­ +쥂¾5äO¡=*ì#¶WBìÕv5T&þ‰Õ‚«èOoCUeZV1¥ôzèJ,:þ š#‹HŠó@£] Sœ:èqË{5Œ”Ÿbpµ£7\wD¸¦M¸;[Fœ–O¢x´»]öC¸ÊÑ®¥3”N˜é:vú3iÿ šü„[ªfsRÇ%%Ѷ9óVŠqRWä"ü1ÞƒŠãdE¨I¯ ŸQŽ9"púìUÂWÑÓ.3ôª÷£ÈÉ'éôtÃÔ½)ԢבäôíÅeôí¥ßƒž9S‡©‡»Ä¼œÙ}3º/’ùFBð] €h¥´6…@Ð ÏR[t* ­Œ–Ýý-™ËTRV':ìQ“]*jüù+ª^šŽôÆ¡ËMdÏ];eaËzG¡ãÉé[—î‹ð5\{ø1y$åQV[É£ýÐá 7rm•8ñW¥lšöß“HÅF7.Ìå5%ÅRKȱGÝo¢}d £Q{¬8¹5v+y'JèïÁ†•¿Ïê#l;1Ç9r›³¦=t\cð>³EÒO¤ZOäNÖ¬KHjë m¯`ŠU±1UhN/qò<Ç•sŽŽYEFÑ4!ƒØ kE7hV6ÂЀ£Ô㻑yÚJ‰z³9v?+ÁJKùQw³9ã”Q1–š«²j,…mèÖ1ŸQ{*©{Ñk+ðk MEû®Íc žÑ´`š¨Æ¾ÊK$Í¿ØNL7WÁ4 ­˜fÊÛÑÓ“³FßíLç©O:OÁ¾|—%ôŽŸK†’”•YY½Gü"¿²1âå+}xñÒ/l¸-£¡Æ:þDôú²Ò¿à+u@Ñ2B§ð@-^Â]‚ß‚þ…)l9¤?Èõ¡ó×AÊOÀ7+ì^÷ä=õØr’9ÿAù¾PÖEäji…ZˆœHâ“dJ6´gÆôˆWÝ×Ém)«]½?¡Ó}Óƒú4‹ä‰“h‰Û*TÅ$ªü[ÑIü ƒ|“tïà¨ïÈÕù[-+[TÑP’}H·×’U­3KR(Á¤õÓBÉ8q–þÌ1¿Ç/ÆÖüÞ¢ËÝZø<Îéü›ã”`œ&îÌeÏö¿k,±N§Q}ýÇòc|ñ?öŒócåµßþÎg§ðQIh–46…@;=g¤O‘¾‰¼‘'z&¿èµ~DµdÓ6Ç•$”¶?'|¿Nã÷¯N¡ãÙ ØúÙp¹ÉhëXÔREþZã‘CåF2õ±‚×BÿÏ“kÛf±õœÝE$,¹i¤öÌ_½»fr‚K}Š.‘UQnÌ0¾.S}›zL–|ŸÉÕŸ/ñÄœ8ù;gZÄ‘³¨¤BÉZÌ’HpÊš²–MZCSmô_4­±¦žÆ¨} Ð¥M>Dع‚£@Ý¡+¶¿°QV=t4´­Ž‘)¦=¾–‡ÆÇV&—Έi_BqODþ6¼‰Êq²£™>Ñjiü8Ù›M ¤û!ŵô(MÅׂ䔺ØF¤¹+%'k£Oܬš»Ö¼·Å¦]'×DJ<]ø·¡}x í l|t¾¢“²”]ÚÚ4JÑœnf—Ëbu_cÇ4ÚO²s÷]˜9K©ü””fã¸äÏxó]WÊ8³Æ.Wt›9òÁ-½ O”8Ù—OF˜²Oº.âûG[ŠÉ“ M®âsç„rÇœ5/19©­0@ÑQ,–ÂÀ<ëÍÛ²ÚìU¤Kd6JÉoì9vKm¢]ü‡9G¦\3NÒ¶Ó6ü¯h”ܵZ:ý>7ÇKû;ðà‚&ýÆ~¯ÕÂÌ}ù8ç8dW’TÎ|‰§PýñK&öfç%ûVÊç5C-¿²²6⨘µý•êXkσ j*(ë…áÆ«÷1E9K}ø`’+&XÃÚ³7)M”±·LÑbø.8Z4áCQH$·öŠèaü“ÇÈž´ ئN¨¥T4µb{T‡Tí1=ÿeRþåõØ)IõÐß‹ìI×H97¡KŸH=ËÉ1å[cå!þMí2”ã­ìm'öfñ¦Ì¤œeír´ªF¾Ù/iFnÓú%¥Ý„_EÆ7bWÐä¯D¯dªÍ+Ve8“ŽOöù5âšÙ:Ú²[¸‹¤RÚÓКI¤üôÍ1ºÓ.¾;"q´(Z«4ã}dN_ì¸ÍJ'6~X÷Ú"MðR^6‹ƒ¬ÇVlr¹Âzqëìæ”ïMmx2š§qЖ݄d×}AËK:?ò"çS]¯““4%mi™:½ @\h`دäü ëµà™"R¡¾‰hÎJ—Ø“½Ý~âÚ|yV‰Õ¹:F˜â“M£uJ]Ó:0úvß¹RÿÙèC púŸYÅñƒèæÃ4äü„ðÊW'¤º§åŽßc“rN¾JXúml™F[BŠqM´%)^ͰÅ7bõiꞎ|RNk—GZ|ääú]`6Ú-ä“Mcþ Ç/t»5Œ¾‹©A¥à¥%£hÍMhªÑ-‰É4i¢®iƒdÈ4)µTJKÉW@­t?èiyb“uª•¾Â1³KI Jö…cìr”b—Èœâý¿%iDT‰ãð´6'|¯b¹G°Œ£&×’eôFàôÍñ¾HÊq¶ï¢4ÒB•.–†šK@úÐ7k}ŠKÉXçÉqo š2ªvkÉW’Û'qT$õt+VöÍÇÃ4jÕ;¦j—O¡ÉVêÌ&Ú’Ö™I¸-ím5ò™Œ$ñÊŸF™¢¥£™âqŽÿk9¥é³Zzø:3cÇë1òǬˆñsBXòST×d×ÉI= µT5)F(êôùµÉ>-Î0õž©³ÎËŽXÝ4@ÐìmˆÀG²ÈrØWAàš¾‘U£:Ý„«Ê%/³I?ñEÓl"©è¶ê:ìèôxýêsÚ}#×ÅÅrž’<ï[ë¥)¸EÔNLx'¹º³¥Éz|j1ìçŽi<Ž£Y×ÃȰÅÂ)É·^HÈþÈrI ›IvvbÇøüYÇë;{9àÚ¤z‚J?Ë%T#¶Í°¥»>Oj•›ãš]³,þ®0•#Ÿ'®QÚZ3Åúãž“iXÿR妎ˆúˆd'±òQCŒ­ÝèÖô6ìWBn…wàkDʬ@–»—cOài°!¶•ïÈ)/,Õ“—*M+Ø”þE,éhqœù"®.I§Ñk*åZe&¤ú(_Ø6¯±4eKÓb©©ÉUteë³ÎRüxåíG%)ÇN䇓”_T?Y4ý«°‚X°r­³_I'%'(®>“œ÷û~IÍûz1Ë7vLnM>ŽÌPã³®6ýÏ£Ìõ©óµÓ2ÃÊ‘éI¬qm‘éžG?ùçKOG›ÔÎõ¤`ýdÛ´ØGÔ¹Ísfñx¦ûe/O·£\xZvŸ]—2DIt“!µ{"IÅòˆá)K^LòEe‹ŒqǨÉãÈ·à†Ô2'Žâü£hÊ\î.¯´G¨_‰rRTú,çËÛ“ý¢ &œ]¢—TêË\e¥4ˆœ% ÅôW©ŠÉ‚9î]œv40P =N]+±–¶KD=Þ‰} ~ÖV¶Þ¬êÁéã)/vÎÈòŽ)>=\íA¹vÙ„¤ãù*¸¥#¥ZÂ’òtz-G¥}³?UêLü ½±ìô=4\p©J™Ïêjy½#›'ù%K¤K’®£¸o¿±nUø7à¸ûœ>®* Vìíý> ¾O£ªk¾KG,ùUUGÁ?ŠRj‘×Ò¥·»7‡§ŠUA,Û@¢ÜxËeÅj)­ E=ûG”*ÖÆ•ÿ$ÎÉ«AÞŠQZ[ &QÑ)^Í/°¤‹ãí] GìÏ4]ë¤bã)v©ý1ØèÁ6_š‡ªÕú#¶ÐšD¸ŽハŒÜeÆ+G_¥Šƒ½ó£OË%Š,æË5Å<‘M·‹$¯‹[/4qÚKǃ®áqIm#LM¯O).ÞŒñàI¹5¶Î¹Ê  ¼˜ËŒbÓ«H䌔§kE¥îVkŽ6ÙÓ‚Ž;ÝšJ7GŸêí*<ù5ã³Ôý>>ËgD×-Þ‘›Š•*ÙÑ‹ kh·€ÚkÍš:®´D¡¾Á*+¦RVìqb”¶i€~ ZD5nÅN-ôWþ‚ë챸Ø5§fq^ :@™Wj;è—Á5}’Ójº…$‘\ÒI »HL†Ýª &½È¸ËwAÉm2VÞÊÕqìÆ¸dAž7Ä÷Ä»ª÷٤ᢦZÙU«friʉ밖º!Ø*htZ¶ôi&ëÉ¢tеDÉ|ËçÉ!¤ä©ƒJ»Ù—sqb»ÓZZfqöÉ>ÐfÄ—ºÜú8½NÉÉShÎIçôöéN=¯’=<§áßÊ:%†3+ÓZ8ŽF›',~*ˆ¶ŸeÃ,“§µöiÊ)ôjøÎ[9ä¶*bh‘0#Óª>öÀ¿ÓT$¶Å@£åŽI¬Éœ"Óäü¸²5Mmº%e©¸ÉÏ&)Ú”uDzhzw5vŒó¼Rõ-+«;3¨ÇŠ:1×áÆ—Ob‹ç’QéGȸ¹åI=#S©4Œ#ŸE¤Ü´vúu~N—MR"Z‹­ž~s£þD[GK³T­$Ѧ<{s¯àÚ.£ö 7ÐK«z¡5LmhO Œ¯¾Ëº‰+}šG¤RäÐ’4cªnÇÐ:kfµì®Év;Þ„ÚwL/È“¶\|”ª‰•ô„ÝÅ Ié¦7²\Dâž…›q`Ö¿ô(É-2­?³<«ã±'Ï”¦¼&ZðO±ô)?u4iiPœ«²’bí¼ ¥ý£çÀI+ÖÂ;uäÒ-'´ii‰¯€¦—Ñ”žûìÏ¿"éw`ÚKJÂ9<4´/Þ¯¢~šT4©5vüù±Ê/šþÐGÓcÌžL.¥^蜙!o”rÓF^—3Œ¥ î-—ë½$“ü¸÷ÙËóƒ‹í5N€išFM!Ê.K’#ab`g¨ßл{º´'¡ v/ ÁsII_FÎg\Õz4ïi˜ðnpšÝ­˜åŒ¡'KÈý<®vвbÿù‹]6wúˆ7éb—f³7Õ"¹G:ÜöÚŒ¯äçÎâò6ŒVGͤ_%]¶uzxÜm›'Ë wT™çåöJ^vqEòÏg©‚6ìè¶–•›Cª+;ð\ïÀN|´‘ 5üƒi’ÖÊÑ-º¯‹möh‹‹¾×@õü…Z²ºè^v>Ǫ &D7Oa{ú_Ø»BÑKÇ‘¯ožÊ»`ÚèOì-Ò°NÄ¿q^ë@ÕöôKZ×e$»é‰»2‹qÈÕhÉ·ùtiLzãü ½ V›+—$ ª‚QN¨]:b‹©S)¥É1y#6Mñ}Kqä»;û5j•Ñ“VFGjèU´J÷?¢eŠM>/²c–û2Ë /tHÇ•¯ÿé¯+ˆ“¹Sì¹õháÍ'§Ëù1ÊŸɦîYjò_'¬ÁRy1'öý6u,KFéèäσ#½˜OÚ]‘¡¦4è¨ÍÇ^Jö‰êvéŽ*˜¦÷D´Èy%ñ½£+÷vVGkÿõ1S«k¶\dåéeo¦Ÿ3ÜlYòIÌx^7Þ™ªqY×ÃgG«Ê“‚GFX©à‚'-<ÑŠé!6Ÿo£“#·bŠ«~B vvb•F¬Ú-(ü>ž¥(á½ͳÖôé¬~ã¡t‘®8>;òZî‡ôCm!r_Ã+zhJ{ª.ùx²[ù%:4‹kÉ|õ¡Ý«e&™L(,cð¢[¡rL—+Ñ7ºèßÿ¡ô ­Ø)±óKCSNþFäÖû$ãm‰N(qi‡Oùب”÷B­Ù;µð »èÏ#êHÊS·Éy4mҧɶ[H™§^ЦúÐ×oEUjÉžÁÓŠ~Gqؤšv„Ý=‘(¤ìÓSz/¢f©éhÏ$_p¯²”Sì— z!ÆÝ‚’Ò9}Nø-|㓜_•îŸf±jiò]8Ç$xËÇLå‡/KêÖѯ¨Œr/Í:}£‡4}¶ºú/‚õ^™'ûáäâ”%ŽNFU±¤Súpìø%‡€=_#SðÉl›cò2àé?ƒ -Ú/’–&ÎtêOø5ôÕ,Y!åôDcømËlœ’çLŠâôάKœâþìøùJ5F˜½îQ^ |¤ü¡Å¯ÆþNyRds·ÅAU¹:£¥n|H3IE|g¬›qf~tÏ_Q_&ÑËø6íDËLÇ$è…5+oDJN;‰?–¥oɬ2¤èÑI ]k¢5@y4Sö„gf¸åf ˜¼”¶Ët.¿‘:²X¤‰ÿ¢£¡7òDɪ3åL?"äû%åq陿U¬¿Ì’\¯“HfRªfŸ’õwFŠ~ UÄ™& ëû•tEÞˆ’þ‘„ô¸•jí°‹ñàÑiÕ >Eÿ"—ÞɓڕàJ=­(ÜS[è˜Ã‹¯Šù/줿ì™c—‚b”¢×LO¯àiô,‘O¯&Nì´í|œÙ!øçù ¿”`§ÉßÇhÑ7ÚzcåÒÇÉuh˜òÂÝ.Qø1x±äO$?mî?xáÃ2iܘexñdüY¢åµ/ƒ‹ÕãüsÒö¾¤sØyÖµöòO„zÒTF¨@ú%| è|Šrö³ÙxåìiöÌêòhxOD瓾öN6ŸbÜ´tÆN0‹J¾NùIÊ0•U†9¼NS®ôa’rYŸ%a”–6š³EÉ•Æ.¼¢ºvoéåM¿“UmÚòNg©=£ËõS¶oèW²ÏSÒf¸ŸlÙíh‰JŒ[”í.‡(¤¾þÌ®6ÖØ'ª”$éŠX´š•—¸«ì¸´> »3”ZNú"2²¹Rú5Á$¼)¦˜EìºÐý’"ub½hIŽö+3Ÿf2´ì…ɤGG;ºñt¥?ôCôØÓ¶ÙkÓ­Ô©2%&/Û¸—‹:_¹ìèŽNIQÑŠz¦ii“'«tŒ¥Mû²9S¦FEtÑ1–ßòmÉ8ö8ªeÞÁl–·hk¯°iY>~K{I™Þé—V¨˜·2—¹7'ö ÷4Õ~֊䌲A'É2M}Šq´ë³'}|×(»JÌTTšqº93aJ|“":zëà¹:jH¼Y+iÿ(ÛŒg¸Õ>ÑÃ6ã¤ûG'©ôÒŠnO¦gó`xò5ùa×ÙÉVàÿX)Gá‘–ò{±/èç’©|®Š´Æ¤žÇàšÕœˆkBñd·±]XÓ±¿¡JZ£>ÄÝ=–ü³$êV\¡É6Øc„#4îËn+%Æ*ñæç/¤uÇݤgê[ŠKË0R”â“íÁj£Ù3U¤ÿ‘i$¼‰U8V›kÆ1·uðcêmJÏ34¯&ÏCÓF šòz ö/²ðöm“TsÎ\¥]"ÓŽ:mœ¹s9ÉñèˆMÝtj–“'¾‰qiZâäºwe-vkž¬©F–öŽyBº1si4ÊÅ•&‘ÝŽVù)KÀíx%²yP”­ö&Ó6V‚í’ÞþGi"då"x¢fÖ:¶g,®]= =+VU«¢”VŸ^6Õ3›>Ê=X¥[Fسq›M­¾ÅèIGjŒrGW[%¦Õx3Zm#UÑQOÉqÛbº_cÝ¥CtÑšš¶Wí­è™¤ö,r¾Ëÿ²v™ki5¦Šjéù“颖þj¶e5%¸Š9.”´Ëž>JÓÚ0œd¥k²' '®Õ튜Z[9Þ7 %.ŠÒ—B‡3IIcŠ¢¡ê#'SÿfÍAÅí8³ƒÕzWŽk$U×”pz¼'ù"«äãŒÜÃ4œã‘mT¾LšhöRt_¶QÚßÉ.z%;ÐßFm†ì.¨¤õöKvKd½2\·DMÔ9ÜvLqNü>™òTÏB¦¥£Y%É4´s¨¾w~ÓLMÛ¦DåM“Ïè¼;÷3±=W”Vlê_szÉmü[·ôý2¤C¼j1RØó?oµí˜Ê¢ªösäʪ›³ 6·t ÔEx¶T}d×PüÇæ&ðφjï‹øf–Ý5Ð'm¦;âÓ: ù-‹&5ÇÚpe\g³'tw`ÊÚGJvî¨MZ"[&(ªùtC•‘Ïv ¹U ©^ÁdQt×öc“Õ¥i/ìæü²¹‰ÁnR¦tBX§-Í,PoRM²–­‘8ðÓ3jôú3ž(¥i]5Ëpívuzl{d©I§fµÚde_ìrnöŒÚÚÑ¢V´\[º}|X£ocR¶+ì%¨™¦ž™¤ZãO°í _ØCª±ÉZøhÆœ²Óä¯È“·^G~¥-lëÆ‰É= Ç9BùlÑÔãÉ39EJ-y9\wuR#§$¿“g–3JÖч“)§ý¥•%äÉÆ½¯²yÎ.“Ñ®WmÃ"ÑÓ<²ãâ©3Éõ¾‚X¶£kåtàâÄŸö‚“è6´L®GsØIëDÐU ½žÆÙ%ü™»°’µb‹¦iK±I¾‘Ñè¢Ûgw£¶ä›é‘ê=ÒI:Wg>Y/Ú™XÕGLŒ¶\!ÖËÆœ²%Z:ß¶—Éqé·ÙÃêr’8ÿ/G§éöâC_‰¢ðÕlÊSQ”¿èæÏ?m·³‘äIü³L~Ÿ&~ôŽÿMút9lí^“ _±dÇé"ö‘Éê1úi¦¢’—Ñ–%<+Û.kàßã•|Ká“Ê¥ÆFØgHèR³‹ÖŧÍY%qLëô’ä¢wDÓÀë@ٜ߀J‘M¯&9&e)hJû}Ã%}“)»»1Ë9OÛ²\]ËFn9rjeÃôßQ–¯_ɤÿKÍŽ-ÆVsGª„õÈê~·?¤\r>Oá›cýKx«öËɤæ©4ÅËʱ¨58ôûEËM?øß$)ëLIµªïtfÝ®©’í»/ñe5îMݲ–Ò¢ÙQµ°•¿àÁ¯zW³kã¿ö4ÿÓÑ){­úëcØšâË‹Œ…%Z%Ó[2’•ý ä”JŽU+ä%&¯ôm¯†g8Rº9²ÂQ\¢¿”e(ÉãçµÚ?Sí^cñðm5‹’ø3‚ö? ë.¥©.™Ž\m=œ¹nÙ¶îuê^ ¡ë£¼yÖÑ—©ôx³Ã–=Kàñòá–9¸µTE¡ö´&R=.7tG†CÕ Ø'°{"™›dØr´ VØ]ìv¼ötzw8$Ó=/K ”åòŽlÒ¾QZi˜J;M³t•kª1{—Ѷ:åvi‹Rléq¶¤º¢ßøð¶û<öûOlâm¬µöz~:R­jW£E%NÝg¯Á}ÙçäÈÙ·¦ôÎU)y=Œ8ãѼi#Ïõþ»‡¶~O/«““Ý™äJÞÎMêštÎÞ+'º¤^ §ª¤ºb©ã—vðä·aêÚ–ª<«öKàéô-¦¨ôá³jT'W¢&/¡«3šnçôKO㢓ñD)ñì‡rn­!S]mšáôÎr¹ù;±â„t¢´NQ ÙåúÔ¤Ó§[9—ê->ìŒþ¢>¢\Ÿdaô³Ë?ñéü³þ³ÚŒÏ+>b›LÍ‹¡¦h*‚—Éê=´L•¢^…c€™lÉÆ»¾ú-F)Zwdñn_GVÉ4zÞš8“ù<ÏS'ÿ“(­lrkþ‹ÇûLáÊäSttcNQIy;aIU¤Ny.<||¿s9o1ëbuŽ:ðoíTVUÊ£òŒ=TxãQ]?†O"K¦wþÚKÁ݆ZAŸ' R]Ÿ9êr7¶û9¶{£zI—ÿ;\¼[83Â8ýT¿ázg£é]ñ=Gé±ä‚Õ}œ\”3Ê»9bÚgo¦Ï(5$ú;ózEê!ùWîk£ NX_ ¦vcv“òl¢êÐ+Œ¬ÚívD›O訴ݶ ¦©8¾Å{*Óvh–¶LãåŠ%ªØ¹øCŽÖÇrkÂN1mŽjQßdî.×_©&¶ RZt†é/äQÛÑžERÙŸ:Wà¶ùÃ}3'Žú%Ú×ÀF/¢ÖHºRè©b„•£ C‚kŽƒ8«~¬c‰¸é“Þ:{³ÁÃqtËMd…§R]œ^¯%ËàåÇ)c'£\Ç’-Å«òŽd厜^ޏd‡ªÇÇ"÷®ŽSâ•x1AÓ ô¤êÌäÉlMè‘‚c&ZFL†>ŸZèèüµŠš_ɯ¤ƒŒe7ý¶?üHÉý³Êœyå–Dî»®üšã]IEôg’I~•ÇÛåŠN0¥äçõ‰¨&qÅÛëf5þ]3ÓQ¨F¾ —µ/€‹sÈ`åª!rÚv¢ž¶_§ÈÚ6ÌÜñ8ü£çóÁ«_#‹¾JQòÑ®)÷Ñìz%(§àô²åP‹Ùäç|¥ÊîG^<®xÒ}в%O&Ï){¥I—§IE0h¤+Øûò&ëÀEý‘颽=%öjöD£c“$/ä8¤ïFŠ-Ü]Ž ·ô\íÄðýv9EËÉåO¶wbý[6?G/MIÅê߃†í89GÐú8¨à¿7¯Ãù2'¿b‹JžÍWÄÒò)_ÈI*cÇVÍWte9nˆÓ¯ òÖÖÁ½Ú3¿à\7i–ÿ€Ž­¢±-ºé‰ÞÐà»L{Z%ß¶•ø*è÷¶%¿äÅ®ÂiÕ”¾´U>¯F2Ç}26•5¢ ÚÚoø/ò&Ò—EE+×H矵¾Ð&×BŒù>2ØN2ÆÕuò9µ$¬âõ8\Ns´ü–Ú«ƒþbD}³Rƒ;¤ãŸÿËàóçtGˆ`z2½‘/ ™vK ØÂÆ´‰“3d¥lO°¤Ê—gN,É*ªŒ|›÷íëášöz~ÿ©ääOGŽ=¶kQQý¨ˆIþTm•ÔwÙÍ‘§KÉÕém5ðzwO£×Î\’ða .F|o'$wÊU¯£|ná±ãM?“\­A«z92e¼šeò&¬Xùc×hÞ9"ãMörúÏNŸ¾ }£Ï–z[!z9ÊZ‹=oMé ½2„ ¹§vh±ðz#,žE[TF ¾OfÊ-J—ƒ“×dÒ…ÿ&^—É3ЊK¢ÖŠŒ¶Wb@)/†fõçf˜tlÝQŽfÚ¨œïµ/"w]†<¹T/L¸ÊQt¼¯Pú‘Çë$¹¹%i­žN\*Mµ£‚i__#lj³¿ÓbRš„zœê)'¤C;³LuðTáùPÞëZATËÓC´.—}™Ë¾´ÃÀã-=lM¾—Bã«°Jÿ:Ù7½½nôËNÙP|d¯ä2{gôÇZµØ“º¶6é´Kz£=©7Ø]­v>^ͱ.÷²d½ÖƒU•6¥;!é*~%D§]RšÖ™œÖL^å´8N9W¶FH‡véœ^«ƒ¸ôÎIÆVŠ»÷GûFØsT—ý—êñ¦–H«³•4МP¿‘žƒfmÑ"&ÇzÙL™tC[º¶ )ù;½¦‚Ns×ҨÏÂ|qõäÇÓ·“Õ/ç£Õ–G(NMU=vk^²Þµ³5>YžËR\âÑ´ÓqMù1i¬šF¸›ä•ñm58ý\›ÉD¯þ'cô±RÈ“;³E8•‡QèÞ1¨)3›ÕdäôqIIû‘¶,ÜaE¬öÍ-r_,µîö.0NøèÖ?ÁjQ^IË‘Eof/$ÓðάxÒŠÑãEÊê$œò¶ßlíôé%½thºÐëýŽ˜¼ß@ô êŒò/‘Ç´¬©)]1h™I/³)¦¤¨¤’VèNN)¦ šRz2œ­Ò݉úXJ6–Ç /ðþØãè¡ìÑbŽ8ûR%ʤvõ³Z¥üÏ¥àjZ¯“N«±}•µeWÈx&WªÑ)»è6ÖŠ¡EéèÏ-èI^‡ZCJ¦¯¢ò*k}•“ö¦(§.…Ƙ>ÉšMwד9v.\]t:|®®ü‹Ž¾‚ßü—úš[ù#λ-5/DÊ<î»û3q”P,ª2¦t¬—»FS‡rŠ|­:³<¸ü¦qú„ãîF¸'Ñá/Ü–¾Í”.åd–ÿ·g«ÀárðrÁï±¶Ó³»ÓeYqÍã’N줢՗»é—)TRKÝòƒ¾R5Œ”JY¸Ý³ƒÕzÉ:½.Î×3»ÓFãvvF+Ùj"i­Øž·c»D訪lηeÂV©“‘oF.ü1Æô‡(ùKd7$×%br䟃.=l¸NxúVãž ÿ僃]ž^lOGJv¨¬sx䤻:½\.(æöqtRjÇG{f3"ô+‹A.¨‰i$8GÌ9JuzK¡ÎT”"û쌯JëÉÓÞèô?Mj<¦×Ò;5<ù+ÿ§Gú„eŸkg:iE8]ãׂS÷%/Ê©ÚbÅ'$ß”wãzvëg¤å–Íš¸šcMR:œŠ'±ñðDß<ŸVt "¤Y’÷6?Æ«dÁrt×E¨oEG[{E¬m»éâ­} ½]t™Ëê'(A»ÙÁ&û}²`®G£‹ÛŒèƒmÆÐKB}Ðvн”ºÑM«]Š)õEZjŸƒA&þIi¤­²”T›obü1{"X)ö WDðOBŽ'ËJ‹ãMê‡Ú áJ—aq¶¼ø)$n“ú†iŽTÍ9l9&‰´–„íøì#vVIêÅbu_É-ÒØ“H¸6î¶WqI•à‘9qÉO¦mJ™3©=«Fj|¶„Ò{]‚•¾2Ó\?q¤%­=†>i{‹¸½4D ž“3jqñ¡·¿Ÿ±ÊÚ×F9¸Å®]3Áá—(;”uBqÉôe’ 2ä‚W(«ÅÖHé£<%‹:ÿë#¾\ª9¤Ú䑆x,ðµû’8jŸð3«ÒË”%‰ùèçÉ3h’“ÑÙ#)2Ø×e¥«[jô…ÛNþq¨G²O¾‘‡>þÉâÜ©lö18ãÇ‹U:¹1b“~¦m=QÇëäßàæµ ´Ëo“NÇ•ò¦‡†©ÙÝéçÂÓ[£‚Jò6¢Ý-hëÁ Û:8{˜ÿÏèÎNuðvbèÑ«_D7¤‰«J‡røÙ¢ÅQEÔ~IsIvD¥ÉÒcímÕMÕÑËê¶Ýœ’vÊÀ›š=§KZ:1‘i D^Hkë¢99Nª‘M×µ£MÙN;°jú&Q½ª4c8SÖIÇVk #DâÙ<oÁ/Ð8ü"eÖÂ0e8¤Å\„Ý6MßA%­‚**1Mè׎ˆ’­ÐÒ]ŽRUDŨØ=¤KU Úh§²gîÓ ®ö‡‹÷×ɤµ* }ГVg7¿°›´¤»A¡5$ßË)E5MS#,”}¾HåGŽC%x¥ívŽŒyyý?Êï]„dï}—ÍôÖ…%jÖþˆ¯‹A’Ég*„°N¥¸²”¿î;Léâ¥îÌé)qoF£šG ƒRP’ûL슓‡] XÛOæŽ ^<–ŒýN.²G¦sšâ›„ÓFž®>þ^‡‹·#ø2d´HÓÙ¬z¡I¤«É Õ²m±ü"òËQ‚ðB‹“×FÞšýDb·½ïük&Iæôó™o¶_ê0IE/ ©iìuq´^7ªò\•¯±7Á¨š~EøøÞÌ÷vuBJ‘݃£¢\aooÁŽlœ‘RŠ~NLÖ…‡<âÒ{Gd}Dz‘¯¶{LU8ºOD¼Ž/e)òè©SDÍ)Æ™ã«OÇF˜$Òßð<ÐÕ®Îyrtüœ¾¦-5(ü‰çÉÊ-;^QÐÛ{Gª‡–ŸbÆùÅã—ž¾Ž9§4ÁqK/§ïq9ÚjШ铦È{‰˜/“| ûŸ„Œåîm¢[Ñ+²áû¯àµ7tž¡.WÙÓ—kk³ÊõXêtG§–Þ9y1É ¸°Ç*’5Î’®¤¬Ë£¢D2[$y6ÀÕ4ÙœžÙ#EÊZQ%EÝž–âzoÎÿ|µÎE+R›íôbÛ“l×"£)]I.rM¸ÃÇrd~ë^BÓŠEáŠY’}2½Rüy\SÒ"î(• òwú+œ’}Ó©IA®ŽÜPPÆFG)½t8Åq¯‚ãÅ9+¤·¤9-P¼k°«{I"8r³d©$MÔ{<ÿW“ÚÕœ0‡9Q߆¿ƒt¾PãûŠwñÐ[¯¯²Z¶ÈðþDª½—Ò+ÂèwíØÓ.'ñ¢×eR®Œå7Ðã,mïh-qª"ÚµE-®ˆÿ•6RUög8rv¢ÜYi+×l|õ²%þ‰i*^IàÔ­3HÎÕ0—òg7þ‰WÙoö“*«{£¥ØæÔ³6›*:Ù.[úv·¢›‹JVôgÉ·u¯î®…Qø1ʪ\Ó¶ 9JèÚú-? t—Ùœéx#ÓîO‰®IT_.¾ŽiC¿m9x8a.9ß6¿ƒ­ÃÑ8½KÕcŸGkJ[KÝØ£îÓÓ/þÉpøµü%q³ ‘äºè¨Kòâq}£ŠxÔ3W†vIrîÎ/Q‰d.š<Ì‘pÈš4õPåŽ9WžÎeÙ¶Ov¿¶‹rÖÉl–!¡p{¢Z * Ç.ôméñó•¾–Ù^¯,²Îž¢—µséaiû‘X•òmè¼¯Ãø9ÚÐà­×”TdŸ©…ü££õ|Kª×M&q):)t$öwz)qNVz^ž*räÿ“¡ÉÍÒéF4®´ZKL‹«U°Q²ª­ÐVþ…«_’¢·¾ƒ6EoÁÏ’iãR¾Ñåg“œý6Û;a%Õíh\ZØ×HZ=+ò+§­ÖÛE'hÖ4ÕW’Üui jìµ+J†­"­Òc¿ÞÃucJÕ…"d¶*М-;?’—Z&q¾¡§f‰^ÒtCV‰é‡Õ¦däá*¡Í)-t‚ò 9YP|S!ɹm®ìRª¶fò&h%‘qLSÉj¾z-iE/É®-˜äÒTû!Jý·oÉÑŽ)#E:cpUÑœ¢a•Ë‹#ÓJjØgü“Ò"+ñT›·åߨzgÏi›ú ª~×߃oSé\×(¤äˆôÙß.3Ó;n¤»[_`ã÷BJô»)*…d\Zø— rŽÓìŒÐNQ’VV)nPhÃ%~YCÃèó}DjMŽ/'¥”|­œ-8Ê™¶'ËâBè¦+'Èè *)Øä• J•QQûc,¹R:³F8¡øa/wmœÓ“kÜöˆQ\Û+ \•|—>* DÁÉëaÉÞŽßGs§/ÝåÙf¿-Ulíýf-¬3ù‚<ÈïF*%-ŸÂ=¸$±.:ma#Dÿâh•-“ÇwòL_¹¤T¤£m mÚØïD¥nü *Òt´ašJQj[8³d“N´‘͆y-ôwcŽ×ÁÒ¢’ÐV´:¥m„W’kÜLÕ4)¯mÿ¢wÑ/KA wðhžÑ¢fØö‚¾ŒÝ®‡_òZ•!éö5®‚ƺ˜4è#µ±?®…ò:®uNÃô%qa&›ÓØ›BjÌ“q—ÐM]4fÛ_мƒ[b^î´ÆÓèK»l$øÝ¢z[èÎn•ä|£x'­vViqta›œÚQø2Ç&,Û}žž8Ú7Š­Œš³Ÿ«Òð|ãòmé¤å òhÕP¦®:ìˆ7þ*ÒtgšFQnÔïCŒx¾ ùÑ*-fmf~»â²G¾Î[ñS^HôrÛLçõ0¬²OnM|¢¦ìr%±ì¥Ðliì©Vš{EFÜ’«³³Šô˜ùw9ÑËù²rl&á9*ÒòDÒzL×’„޾Ly6õÐ¥Þ†¿oGéñ‚Å“$»ŠÑçM¹MÍüž—¯—Ñà’wQ<تanÊèêô*ò${XÚrªëFÑö¾?&Šº•ʬmニlWÏQtذÜ!Æ[£KÐGZt¾Ìç>&nZ]^³'½cöoéáPVtAw¢’‘§Å•li/£¢$­í Ć©ÝÏve qm3h´ÿ¢¹l×G)lèM6 àÉGŒŠm^Óò?`®¶R~õ]аMôÁõÑŸ6¥O³Tü…h™m’×c{BþL¤•²Sí2d¼²e*H"í}…qß‘_¦êÆÒãL‹M;2$ìÅ»CÁwgdWoàæõ ÎqKäîÇŠ<¶F|Víâ\Q²iö>Ì¥³›"|ÒðtIT5ðx¾¯6Eê\NÏHÞOOiÝ#ÆTßg'®À£ëSBôI¬MG÷ÁÿÑêó`OWG9¸gJ©’OÁ5iÑŸ:.7HË=«<å\dªÙ¼W)r펮bõOG›ê"¸/ŽŽK xrK‡´FhVG#® K%¶K -}™çÆŽ\˜Ÿ¾ìÓÓݾLÒù¾²ÁKG—ê!þ7®74%kÉÑê/O }|u5ü›æƒç(ÅöKb´mqòÍ'Ƕ­³ç*Š4᥯w–fñ¨KÜÓa<—§Ò&.ØI\©(þ8mm™r ;¢Ý%äëŒxa”9lã—î`–Š]zwR=ü°éíôo…*¯,¹+’E1%äRkdy»Ðßþ‰ûѤa¤rþ§“ñzv—“Íý=r“mvz¸âk~ÑÁi ¥bqV.5ä²ßTg-ödû£9*‘~kt7¯èéÃ7Jͪ¶‹Œ“ÐÚ×d5ð(wò M·ð} ßaÜB=Sv…å0kd®Ù9Ul˲nÓþ í¯6,×´udw…OèÓÿMOTGm0K²3*‹~LMYfj.ô\[å 뛤qfŠjk¶Ï-¼wå:5Ëÿ…y¯³ÐŒHF_GÀ¤W£§ X¡&ûkG4¤äïÉÑ"Á¯{2œå/uÑù%±«4‹]ù'òI¿vÆà𵨔QÄÛHÖiCK²c'Óòe‘{ÁtRêËÄöŸÙîúgqŠú;q$¥ü 7ùðÉ´éQ›m›‹Í‡lq‰¥Ñä~¯7-xG?éÏG«fÉ\vZÓE%±µä°¥Ñ4LŸÙœ©­:·fi>KඨžqJº:qI³G§¢âÆÐ˜©0JÕ0ªxbMù)SCð'ØÝx%hO]é¦ÉðL®¶Ì´´%«3}¿¶OüŠ}íöoÏc]W‚îw¢f¾ŒÒä')›Á%5àÕwl:þÎÜÿ"jôMtËŠÿDe¥`®0ßl!§Ëÿ·fßµéçÅî¿5Ư ÆŠ‚jây_©àå´Ž_C‘æô¹0·N;G§‚_—Òqí¥LéÃÅðh¿ì—¹´´c•{lÅB“ÒìÍ)~k_&ûzÞι®Poèæš·_]žNd¸äQùÙnŸé¿hò[ÙëzúhÙåÈB yðRTÍ!Kln[)EA_“9IÉÛ&ô5m¡&R{MÚy7it\cÿ):úóR¨›«}‘Êçl¼¿$àxw4kÒ+Šw´Žüm¨91Áê¼”ŸÑ.Vþ‰•ޞĺßc}W‚’¢º2õV87tyYï66ÞÌ=¿Òû=L.ÝJV\dŸE^ÆúÒ Q2Ó3—FmìÎ~v(š(ß{ºÑœ—¸ÏfØæ”Uvo|£öžÍ“@Òb è^A OÇbhOÚ8»ìrè[ã¡+nòg§aý&¾ ¥©•¥lÂwÚÕ-ב¯ø§Ù¤ª¨•WØ%îm½Ê[i£QÈÒ*k%³u%C®¾YÛ A"'»¢Òø)hçÏ}"%‘)F,Ý$Ö™j¥ò.< âÈÂ5å¶”—ÙÏê¡©*í?£‚Åëšù»;}Ç6Ew´zPU*•««Ý³,éÕï"Q*+œ“LÎP¸÷äí¥økèæo«<¬‘Ÿ,G(8ú oÉäÖèõ=[ôê¾O5ˆT"“èÒ5.ô¾ŠN£ÈÎRmö$Øíx*+M“%°¥B¦Ðâ¼ÏÂbW&4®F™†-=³«f¹¯à˜õe^™X?z³ÙôŽáJìïëû)ŸýŶgûeöUhi|”„Ýy<Ÿ_Ÿ–u %×èæ®´vú|š[;qÊãh¸:Ñ¢‘Vßð¼ È—'ä™34ɒ䊌iíGª¢º£9Ei™dZ'“£®[*kƒäŠÇ;òj˜Ø€ kvú•ª*ï±Ë­ = Ih—´- íSèÎkDÝ™do’¾ˆM7ÄÖ*•±6%æÉ“V™/»¶‘)U¯÷7³d×É®”­ø:\Õço²•2ã¡Éª³›$®uðreŒå58=ÇÁÙƒ#q_'LºÊ’§hÊu–ºdÆ|¥UÐó»#Í–%ÿ™ .=Õ®Ó¦zqª¡µ£%NCzvG¨ý©£‡ÔGüv¼Ñòü‘^#¬“øLìOüÑϵ³Ï˼ÙÙyRéÿÙäJ*ìõ= ?þ^:âÞôTµoêÉŒ­¡JäÍR¦‘qEu _BfÛ£ÉýO ¹òŠ9ý>_ødìÓÔàJ*PfóSJgn)¤ÓOGv9Ú¢íX9;¡¼› røn_DÉÆ=˜dÌúÇÙ—?U)W@°úçæC'«ÆÒœmYÙP¥ª¦j¥Évc™Ñ*_gdvTBQRM4sÆoøµ£ª3M!ô%'¯’¼ƒzÓv)lMè”éý îB»Ð·['òÆ«+É”“±KÁÑ”{L­ÕwFwjšV-©m‹ÿÈ2=W¯“XÂÒU£¦8éi“}æŠJ×fžÜJË$ŽG'’þ&øm´Öã(åNÓ82à–)ʽ$ùEâŸhè„ê_Ž_ÑOº9Û”ri•‰ÁsSg7QrZ«5ý3ÅÏËgzèY?kFJ•DÎn›6•<<쪮Q{LÇEùå;ñMþµ×©‹VÑéz)sôÑëA9Tr?þ¨ñbß>œ¤oú¤ï„~"yÊÝ#Ñ¿ÇÆëG!¾‰`PØIꉶeGn˜åŠKÃÒr—–5_-ñe.1ÛÛ'›wF¸1O.«_'fG R~ =FyçÉrÒðsÍø?i·§ýDZéê“:2.3Edé?¢#-2âý…ÁyìÑÄú&R£ïdN KäãËèá9]Ó1É‹$!ÆíYñÔlœ¡ÃÚú=<Ô¶™Ó‰­;'}‰Kì¥%òe—;N ­—‹²ÔæõðvC!¥ü(ø]šBÈ£$s¸BîŒå'&Dc,“ßGT1F*ëf‹Jü°ºT8ËLÏ,.,Œ3¯l´tŦ††Â¾Á,V/"½ƒ×AiPû8òâ™Jεû$II§äÊO}öRh–ü%DM6ô9*½tLß-PCyNÎÜpѺ¤:F9•¢!5ÌnY¥ðV8Òìœ ÂWòtäR‰¤sc©vqåÃ9Oñà&<¸eJ>Û8r5~ÞŒ»e&kéÿùìa’ãU´tÏÃònÒhι¯ šÅSÑ´je®¬øƒ,“§M]™eSi(¤ñUíìrĤî&3Ç=ÚF}6)âiºgOÓÕûY–<9pÊéèéÃêšiJ'Lr©t™¹hÒy5äÞ8"·Æ˜ù(i¢œ®5D)4Ò_Ã)7c’µÝµ} aMÛvj—¤ ¿è¦Ö¾ }ÙkK¡qmç‹K”{F˜åkàÙuØ•!7hWðKèË,åœSeÅÚN©”þœSk}º&I7anƒ–¨Îµ³4®mx5‡·ùþÉ›ioaàRÞ†ãHÎKeúHûÛ£ÐJ—ÀÓ(Ç:ÑÏòï£|qQþ¡¿cÜSk³yKŒ•º.:èÖkœÊðKnâûFq‹.ÿlŽ‹J4qç·;['"äÔ[힦¨ÁEt‘¡ƒ(ÊäÌ3:ÉHß¿LöpIÁA¦þŽ6ÿ¨Œàk9rÈã}³³qS~ ½MxG"å %OÙ^LòGÛfrÆògÃ^ÏW¤¨Œ§½¦N%äÇ2©¶_§j~™¸ê:jœ¯ù9¿'-µæ}„Ùc]hûèkJ†Óét5ÖÅ.ÉodN©èÃM»²W:f‘TÛÿ±É’·!ºmýw±3 ‹ub…EQÑàÒÆú1Ë*[0R⌥“œ´ÃnVô‘Ó“,a Šða9I?&Š¥$ã¿ ÕTIšáÍÜ$c‹3ÿèÇž)K”zb{TüèàíÉ—DI‘7áG?ª’Wn¬¯N¸zJù<ïPÛçüÞžœÒðG8âÿÉ•'-§ç£>X«Oity>§#”í½³Óà¡ygTº3õYž\áòB`RØE\‘¤¥Z°»_f]6TvW$‘·¦ýç·éWøÛðΈ­¥àÃÔ$¤×É8•YÑ…r[ðS“Nü.6L×µ6û3R¤Òd<´’}üEÒäвÉq_/ecŠã½¦kª¢g¥h—R§ð+®Šäë¡7%ü0[{1’÷Ix+FŠ+两¿’[àî´¿åà‰(ó¾Zf‰*Oä\jVŠâ™.Ñ–Lr[Š&®¬¨ÊRñBšœ_Ÿ’£(ËMX²E½'سÂQ‚pÕ‡'(ýšÇ]ö/¡6¼ ÆôBïEEÒùò;&OdÉëFrlÉýÝWɪm‰ËÂI_ŽÑ)R¯ÅÒ1¾Y­£Ñ„.M4û* ùè»ÑÏ—n‘Ï“ÛD1+–Û+ç’NM¥<÷’QQÐ~9Ãö¦ïZ*1xjvû³E-&û+IÝ'KÊ&¥ÂNþ ‹Ru[FÑ|#®ËVÓÙ›:}”âÝãTŸÒ<ÏÔ%ðü— “~’)œ“’¾,ÓÓái9¥£¢1mÙªÉÃQܼ³ÍÉ5 NRÜ߃“d—'¤k—*‚á3vÅm ªb ØÖÁ¶i…oä©ãi=Jô†±;÷i’N“"ì×ïG»é]búGRýëâŒ3{¥Ñ¡$Ѿ ~ê§&ôƒ“Q¶´ËšsЧ£+“¶n£ŽTÒ¶¼„Õ]>ôJÆœ.JÚÒ/ä©x+÷:­“‘»¥Øœ]w²tiZ¶$­U'd5ïJ­²šwT8&äïǃG¥¢m=4)Ũ©Zz¢à®Úð;¥½QqëdKË‹Ù0Èçªh\<½1¸R2ÉÍ6•´ü|^ü¡ªºª4iÎfÄ °bÀ€À<…€Ò.ùD"ël™ÍVŒÆ\¹ߤ’‹Šm3ÐÇîM™ORÒÙŒ®.ü£LkNENU…§³(doH×ø%ä¸Ç÷^Ò#Ô¦ïHÝÚ¥á˜'S•;HÖ®Q¯=šÎ—zHÉeƒ•Ë/):WBÄ¥(ÉÉèÒ¦iT´g7.=YqU]±'('{¡G/8ônQ´èPµö\~Ì¥ÛÙ£öB›Ñ8çi¡ôÕ>‚Ny#Q×ÙÓrM÷f’¸?…òTmxNü†’i™å|"ÚìÎ8߸mT£½+†»0ʢ椹[Ñ´r%àÒÕØ©‰_a¯ö àCðì–ÿ²4ÙŽDìÊZvG{Z~K“¥ecêËJå²_}ëÉ’1Èß5GG§¥º£ÐÇ‘J=„·fúþ T—'fy¤¢­éãž8Gœ¤ŸÑÏ›ÔâÌø¹ªø1^ŸòI¨ÓþŽ_O8dªfø=,[RkŒO’‚NØùZÓ%¹^õCæßHjR}-Žsin“1Ë$±ßlóå>mËàx2pt¼ø3Jqj: Í“$`Ýôaƒ4²åjô»9QÏÅûÙç©É½½<².ôRU¶0¥äÐ’¤Kèà(k²GÚj¶ z±S)FÕ"£QUdM»"€ ƒ©'ðzÞš|œYëàwàÊuù-|“ê!þNMö‡i–WK£5qãznѦUÂ[uðk ªVPi:òËîþ ÇŽ1RwØ¿"Q¥óEÊ<ãOý˜¼j ­¢ÕJªŸ“L²ÅËáËÝ^ rQ¶úBSUo¯§ùV‹ÔUµnëÚ\ZñÑ–l—¨í•Š;{lr’“àÐJ*0w£‘¾4´ÝBqWú—¹SïÁs’åÆOøuit‰Ê¹ÁÓß‚iË=ë³<Rm¾×cÏ2ƒOW´jäùUj…’j3ÿ„•?¦fç<1jùGÃ+©¦¹jûËÇ+Y*Q}2?'½×íÕËŠ–™QÈ¡…ɪ§DæF0å[^ÿ+DäžÚè˜ç¤”ôͱú‹“Mm|.lŠT“¦,¹¸(ßú"%µ%í.xË՚ 9SlT±·,‘®[G<óM匣þÜ£,‘⪖è¾-ärmmi’rrjþüó¨K„_'Ý• œçžIN U¯¨¹+ˆc’œøWòm+^- IÅ|£<‰©&ž™xÛ­ìqmIƒm…ùb«v6ô'Ö»Ð;ø'ŽŒÞÖŽ|жžÇ‹ÌŽŒjö‘¥{Lúi‘7~ ÚMlŒÏŽ-3žé¯„qå—<­µhÉäŠ%³$@Äaö6 ŠÆÃÀ-º)M±JM’´>Ái†ï¡?à®/±;Ð.èmè[%’ð:Ø€ca¡/°ü —ÔÓ=¼ Ë†Ž¸6²/²}J­Ñ%L쎴¶޶̧‰ñq}±Çø¤Ó^Ùva•~<”ÿkZfY']ù1U‹"|lÖ®Xò8¥Q~Ë™ñn{‹2ÓžOmsåqrïàÎp”£Ï—ü—ÀíÇ&³§,¤ñ(¥äç¨òÜzø2U:*xø¥(m2ñÅsRrÓì=Bü¹9rj7àSÃÏ+©j(Ö2ŠŠJ.Ή5Â-í™CÙ9K~O4³J=7öe—,á“T´JÉ9Gký¼ËŠM¸ý•/òãüqÉWå˜áŽƒ±Á¶»7áÊ{ð^¨·}KDCÓ¨å¶ìÞ0îÂX’•ëg7¨ôË÷/P䤑ºÀÚ¸Ýxîœ À¹ÊI3W Õl©GØœ•’ šØ,|$ÚýÌÏ"Yf•UvOºjô¢íÙ¸K§ºÑòcô¸ù/tž­ø >¥ËÂÉoÉÒýFYTb¸ïH×6Vë¿ä¼8é)7gKIöK—ÕhŒm;|j™¬ZîÊ}*%ö=4†Õô$þ†×À¨–Ñ„¤ÓÑ„ä–UG^5Q¿“Zuÿ‹fSk¶c&œ’¾‰›â¯ÁÚuMº)ÊO²Gaäb± ` [ÃèíÐÇÄ™;Çʬ+cT$­´6šb¿’ d݈R—B€t%€€géÓwÆô¶{QiÆ×“X®Pßgu§$¶™Ñé§ù#~N¸ü•bvc86É7GK‹à•,kñòogš–nÙébRŒ7Aÿ*­†]$׀ж›íš$%5=W@ݦ¢Œ¥)%JѲN+UL\ÕØñáŒ_·²ä÷Õ Û×h\\~›"XÛ“•º`¢­É\¯G7«ËKÚýÇ›“,åç³dÜý2„ªÖÑ·¡Ç’2¾‡ÓMI/†ŽˆÚ×9q[oäÃÓOñäàþONåÑ@ÙëäÏèåõŸßÍx2ËQÄÕœž‹ r–Wáéœ+“·-ÆÐÒK½Ž¹hPÃÆ_&Ž)^¨ÃÓËÆ­›J Ú]Ýh¾>l—Ul Ÿü]¶÷¶4¾‹mZ"ëVy~§ü™lÎiÛèÚ8?$’Hô±ÅCÆiŽkjÆææÒŠt><&¥zø›r䞉Í+#Lãꕉ¶ÿ“6þB4˯úë¢ddô´Ì=Dª,ŸG4äÖÙÜ£J¾DÕÚmÙ†F·örz¯Sø!Imž<ò<’m’‚ Cúìºè;„4´0²X!Ž´.ŠMo@¯¡x H;¼¡Å]#Xããã³e¥³’]ØŠ]ÃÈÄ1 ƒDˆ`1§³Øý7?8ÅKÆI7)J7ø8}T^9,‘Z;=,ùb´öÍíÐôÑ–IñZBƒä“hÏÔuG™ëä£oez—¦ªÛ}«®ÊŠj= ¯m‹ÅWFØ«¶ˆžJM¦gùg’:Wö ¢íi¾Ë{{t$­ü•z2jõ}BПzí•×&fø¶÷³›ÔOŠtrB>ÆüŽ8œãg¦Æ±ÅZÛ5xÔ¤.£¦”RЧýµLR]ãºF­¥¢Ù›V4h–ûR‹¿iœ®®Î<뜸ÝYׂ —Á½^Ìœ½Í|I¯„qú¼±ÅVx™òË4ÛlÎ!±lCKcÞ€h^@IÖ‡ùTÆ›B°]Èü XÒÞÇÛt*~Ai½l:&­è}ÁiIXaöÍ??“Ìd°ÀÀbòd€ ^/ãÈ“è÷a4Ôd¼xݪ1õ”âãá­Þ‚N ÁøÑèEÝloè—z•*g…úîix6ý.\±8ž„cH­¥V6ª4ÌÓ½ù4ˆÈ“M%Øñ¥ô ,9Òå{ð5¨ŽrI#.¥³{|n­è‰Êú2çàçÌܤÒèxø¨¨ÕßgN8Å.¾bYxãrÙµ }òÛ²¶m£KòDŸÙ›ðËIY¢ú°ˆ{þÊÒ‹ùG69däöޏ­ýî1ø2zW#—Ôú¨ã…tÑâzŒòË'½Y ƒøŸÐyy‡€V6HþÁÓzè^A€Ò „ÓcVìptÆßkÁ ÕÒRöSj•viy‘½\R®†ÿÉ%ªû6©cööylB`0€*ÈÓÝžÏéÙÿ&(õ0ÏJÖß“LŠÑæg¼9c5ç³ÑÃ.PM¥cª–UhùïÔ-ei›þ‘+RLõ"ÛÐé¯#iÕ²RVš¸É¯¥ç±p­µ¦L1Åõ¦‡–:Z 'Ûé˜ËÝî]–ìß÷(Å]£Xâ\]ÑÅžmΔj¾ %+ÖÑ?›ÒvͱàXþÛ4UÕ–•EBö[Ñ/½˜ä[ú2î:1­Ó!¯“:÷R5Jʭ諤.‰ÒVrú‰TT}&>8WÞÍ’¤e•»ú8½g¬†$×m&lóË&Û2HiÐK²h((ié±± 4+ ÐyÐPÔw~ ŠUd¶ 'òèÙI¯"Oa¶Ûÿb5Á‹œ¶tËûWA 8KKý^¤¿nÉÍ)9¶´yL†40ð«:=w‡*øz=ìT’Vu©vszÌ\ñ:«[D~Ÿ›”x¾ÑèD¿¢&´x©Â³7áš~“(Ÿùg®£¤Ëü¾_Ñœ¢ÒÙ-6µÐNÔRòcÍߺ͸9Ã÷QŒTñ»–Ím«NŸ‘ÎWQ½#&—‘XwVލÊ7j5^Žò)R߃‹"p›¾ìçr¹ñ^{;1ÁEZß”J¤Õù4íè×}¤ Ñ7m‘“èÉjV¼›EßEÙœº³4ýÆÐWàºk±ì<Ó"m4öqNòfPø;ñÆ¢—ÁRù<ÿ[ë#…4öÏ>W–nFC`!øÄ4ªV*-Ð»ØØÒ´>• ÈZ+“ªHŸ¡¿„*ú)ªÑ=iƒì4?B½›bÅËÜú:1MF\U#E/Ç.^>~Md£(¹A]ô‡é—'4S”[´êþö&!Ò±€V€€h…@  w»=_AêJ-žÆ:¤÷Fk­d¯ÒúÝ/lÏWµ% ôLÝÅžê¯üº9½øç[>‡tÚ:e4 ™I¬š³(Ê›‹)É·Ö…$©ZçQN(ä‹}"!‘©(·×É|['¶dÓü¦k‹ößfÒ¸¥Åh™gXáIÕ9r\¯¶ÌðÆó[èën¿’zVƞͱƎˆ¯ú)ý ô$…%f.”é#h‘–EÅvN7oìÝh®ÅØ|‹ÁÏž\‰ô±äœ÷³±i~¿ÕÇÓã{\ŸHùÌùe–|¤Ì¬}€†@ t]”é*%Ø’ùèI†ô´'¯¶"­µ¡ÇnŠu­ì™}“z *:*1·ÿìÞ>"þMd’•5_fÞܘø&´TWã¥m4Üi½x T­;%ˆ† Ð,aà(ÀLØaÈñÎÑôƒÔÇ$jöŽè¾G'êx¯È»‹7ôSç…;:Õƒ¢ZGƒúÆ>9,óð+ËÖÏ£ÁÆ®FÎ<£BŒ+MQŠlph©G’×G4­6¯^ àÚ…5¾ÙŽXß¹i ¹qM¯ùד£ ·ü-6«ÁÁê8;I;O³’q­Ù¾T94SB禮iŽºkgF5rÙ¢þFŸ€­Œ—ôe$”ú4Šº¢ú0Îü¶»µÑºùÈ”¨äËyr(.™ÝŠ Q]úßWM¶÷á5ê=D³är‘ƒ¤ƒ^1д»Ó°Ø- °«`äô7»&ÇwجxÛÓ*•ŠI ö^8JOèìljRIa%mòÛNž[‹éG;¿£xÉ:Œ£×’òÊÚ„V¾IŒZTä¬ñÄ ø ÆÃˆèLš±¿§gá‘'äú‹ÒZ‚_GZØŸ9¶’&q¥C”W«$¦Ô\kù9ÚnT·æÍ&ÚâØ¹&ÚHÍIß¡ªy4«GF¹yªfãÊ›èãäú‘ŽgðoÇWÉ-ö‹ÅvuB’uÑj)t)ºWdaš›lÞ­‡€&qºcC}ž¡»£l1¨#d†+"LÇ,’V/I»œ‘?¨zèúXÒÜšÑóÞ£Ôdõr“³ð.ÇÐiXËبhw¡ -”–Çn6–Ëå«¡ÒUü+¬L+ìVÇ«)ÓuZ&]ŽäÒ:–E&ºù7ÇÉ4µÖ̲qü›³« +xGf”Þ¸èÍBòIIèN\uá/rM.Ï[)FÆ¢ hMO°€02FTeŧö}' Î§‰4î‘ÝZ<¹?üÔ;¥3Ö„­|Ž]öÎ/ÕUúwô|âiJþÑMË _ƒº wz¡ÊsNׂs•²¤ý»ìðrù1ɺt;M+Û²eþ9Ýh•þOwÀF¹ÝöoI+WDeÊß·¤c)&a§•'³¡Í¹éhPNÝôάxÖ‹„šuà¶èË"ä×ÀðÁG¤l¾@ì?5£“*¼‰}PÒZ/¡“-Mùg.FòäPCõ~¶>“þïÏgÍ<Ór›¶È@û& ll(j‚…ä:±ù äbð%ò[•tÓÝì– $®Ä­l.Яä}¡ê…Ðäí‚M´o:öììŒÆ—oà„ž6å%rA<“üFÑÎñõ òã””ÒtC–9%îDËŽÝl1ÂJ;’ZKÜÏkô™rÃÆú=\oŠIô\"Ýè•7z"RÕ4aÊRTL}²û~ ”xû‘½»þG$¿‘c…O]¸šá]¾¡T®4qMí#¦1X±Ò^ç»&-·KÉÑ zhÕ:TRìuÐø¦»ÑixExÛCiŠ…4èå‚啾Ψ¡ƒÑÎ|ùSÙæåõ«¸îOþ76Ye—);³>ØØÚ\l›°† ­¡’ì¤ ?‘5ð4…C ¦ ¡46*¶:IèO½ ¯‘Â#¤tãÅJZ£¢0ŒcÉj09¹r¤×’reK#×z£D¸Æê£ð‡\ôšþÙŒ±Fl1Å<•tm'TÒbQ‹»~O"¶5ËŽ?“N:¡V…T*ØÒŒä‰¦É` ìT1@ P“Œ“]ŸKú~É…;ß“§4?.'í_¥dpœ±? õ»£,ëž&ŸM-êÒþOCô™%&÷ð{´“6ŽJ"}Ò{ E¤ïg>WÂ_É0Ü­í—‘4©èË2Ò$§¤kù6çI¯>Y'³™®ycHèÉrI.Ѭ1qT\ìÑ*Dñ·t]{B+l´¼ô0@14FWÆ ™zeq¶tLË$ÔbÛ}­õ¯$Ú‹èóå&Þû Ðt†˜¯@šè°ó° •èMn¬H¤¬n*®ö&þ;®Â_ÈÓð'§c(U`EØé·¤9-­³« w³gî•Q¤ZãOǃLvª/KÉ‚–w'´rJ)¡J+štmޏÃ$ÝäíÅüåÃdçI‘+Æëµä‹Ú8V$»-Gà( ­Šš`ÓhÎKb!ˆCx€`±hg鞥áËMéŸEŽJqN,òòÿƒõ$úŒUJÒØÝñvFMª>gõñõþEèrpξïá•Çøðt-Æþ Jãö.IÅÙÇ›÷_‡ÑP§Tr«ÿfšqI„*¸ ã Л۶èÃ+⟑zz–J:Üz-7.úJ#Šo³D’_óÙIhilby9ó¾ME>Ù¬#Æ)ô'ÑžIqGú­m¸B]vy;lO½1ÀhøÐaÐ"–¼ŠÁ‰lmWí×b]-ØêìOHO]CZb¦öTi=ƒÚÔII°Eñe)ñv·&oŠOKtZ¶í2S\˜å©5®‡ Zìsž•vŒ_»t\"ÚßE¶â’—FYVbß/ÿ±¿§U*¦o öÊM=$ )öÍ`¨o®Å^J`ˆœ’Ó0Çy¯Â:hu³ÉýK×kñã{òxÒ|±Uv) ;CAÐ%à+Àè<`Õ¤$•‰‡‘‚V4¾Jét+ta_!¡/–èk¡·ªžÁ¦Ðx >´U'5^M¡‚I¶ÑÑŠ»²TøÏ[GTfç%ÓCá;—í3ËÎ^ÓL“Æñ~5û‘ŠƒŽDíÒ]—•5£iqÇ5wo£,™d›]ÙW튫ù1•JMñ&‰Ø4žÄOØÒ¦&¨‡½‘$¬šÿD½h–&H¬cð!1 w~ê98KIù=ŒñYý£z´q~•™Å˼ÇqM0T»8ÿSÅù0ºWGÎN.2i£§ôì¿7ÑïbÈ¥LÚ2mÒJË”=»ìÇ*òBjÒeNŶ¹ê0ìÉÊÞÞŒd×:m!9º]1„’¦x|¡]”¾+ÀxÐÖÐèüy tŽLînI®¯gF(¨ÇF„ÉÒ¶èò?RýA$ñcËG‹99;b ;% AÐÓ¡¡tÆûö¿ þ‚Á=ì@•±½h™QûÙ-ü !¥z–û ëe(è™ Š¾ØêûQ)¢ðÇåYÓ6«¤>Z»¿&øñ¨Á9-H¯o$ ¿ÐóÅÇ©vG¦Œ±Ç”ú³G;—De’¥lœO„Òq³£6X·oµÑÎäž[¾Šçø—[f•½¨„žÈì<Áý Á-lOD:!’ÖÈb²D1ø ¡ iÑìþ™ê ¢Ý¤råøþºëMžÞÅ?•£DÛ¢¥»<Õ=?ãŸ$´Ï>2q’kÁîú,œâ©­£»¹hßwwÙÍ’M·hKÝÒ߀’vÛØâåñ¡Ko³)N£Ú0í·ßÑßé±q¾ÍÒÇAÐü k v ²ðŒ«”Ò7Jå%Ûtx_©þ¤ç/Ç…Ô|³ÊåwdЂ—‘?ûì¶­Z'ÿcvçC {dÐû‰ö4¬Òl)ÑQu²dÛanƒá”ºØ:“o Zzì?tµÑ.pC›Útt¬Q„­'F±ŠâÚ[íY¾ò¨ñŽÊËä±ÍÒÿÐñAAû]ÿ"Îá/eXNIb©#<)d䛽š„þ ·)j™QIʨJçmiåRË•kDJ_@»`Hh@|ŽÁ+ì¶×H*ÖzÜž¢m¹kàå{{7ðù ò'Aç`ôôÃÅ ¡X­!¥lmºª­]領$“±W‘©×€r¿ÓïÀVÄÝ? nüø‰·e>:!Ê[èëʼnsâ´uþ*®/Hqƒ“mµE_ª‹L©¸¾5·äœ™Td¹B‘ŽYûµ´úFŠ >øéÖÉǹ4ßfŽpŒjöÙ-¾F­EbTûéþ£Ç)$ׄB’Œq×ÈŸ»]18¯!+`µüƒM¢R§ôZ®˜i0’°KÀ©¦Õ‘5H†«ÁŸ‘5¢$CØ€Š´:Bh‘€P&Óµà×$Þ_sÛFþ“Õ-wGÎeÆñͦ½¨x3k¦{‘Ÿ$¤Ú.â˜,¯QoEÊN5ÓTg9qF.W.=YÙé°(Bü³¢ºB«c)v1ø {2Ë%mèóý_ê8ðŬnæÿèñ3ežY¹IÛfièV†Ø„ þƒÈèLw¢¼}IZ²âÔBJºvØÔ¸F«fnNˇŸ‘F¼ñDò7¯±>S잺 ¿“uß‹:&Ÿ&ŠÆýÎß}&mùÔ¢Õ>¡üZê‹‚m§TLœ¥‘Å­ÒŒ£ŸÚ®)›îsò“NQ–2¨J*.®¬çÅ%%-ĶºwÑ9£”¯”ˆŽYKÂëÙ£9eiÒ£GÐJ•P¶Ç(‚ªÐÚÑ;}ø }“*3›d%bš£9" / 0!y ‚`ЬL:)µvŽïCêxµàöqN©§išòIž_êž•J?’ ùЛ‹]it´Jtì;‘ÐUy ¥ö*ÓVÑ׃Ý-ø;/eµ´%nœz]Ž8“ÛMWAË›«Ù´°ñ‚š­ö…Žÿ"·¢}Nu4¢­è=?&)¹Ou¢p©ÕK»Ðò¹M$ûiEZ¶\cÊ Ž—“,ïñ{VÌå&×[?uÕfjS´`Þôwßdê…{¡¦ïc”i_9{t…aU¢º]þÈŸtJN/è==J¬†ˆb b h:à(v1ÄLiÓ³Õý;Õrÿ»ðz‘’mÒœ\Z]7¬ôRRrŠÑçÊ‹Ú*9g›7‡¬É]›cÏ›#â“ÙêzFÿù2íü’Z¤‚|Á?ÈôÐÁ‚ÐЮŽUë1úx\žü#ÀõÞº~¢]Ôlã“m’ÅäjÄû €Ø€ÀŠJÖËTGô¶ÆÅl®Æ˜šCðZ °]ŽõÐqÖ…Å‘/¿¡Ûc¶>UötcÃ]­›B-(mù:dçjM/)—l½t^HÖ'^ q+÷8›ä~ÕZù3o×-³—:’ÃÝòtzI8Ʀ¨ÙJ.ßFs»,X$žE«aêSÇ*…¤öLmÍ[}åÈ¥>J5DJ)í½ýÊ[J+ù3kgoo@¯úŠ¥ M»Òh”—ÈM'Cq2ŸvÉ"'Vg-²dìÎB ‡a`€/@ ¬60bkD€!—ŠoÔ“èöý©Y rJVºù)¥%òc—Ðb˺¦eÑàök‹ôŒIÛ:ñz\Xº‚:"•tW]/V-±­X 0o]“)%Û£ÏõŸ©C\`îG‡Ÿ<ó;“Ù‹zb]C«¨¥¦)]Žº4+ð$ö[ØF6ô7IhW CþGwIÒQ¥Ù7Ð¥AzÐÜœ’UÐ¥±P¿ ¶táÅÁ)ËÁÕ/|9%·äqiBÒ÷œ¥ §öÛÇr{CyõU¹ Š1u¯²%v¯ÏA™Âê0÷UÛ3ôÑrÝÛø7†7O¿J-·«~JP“J?³§''Wá†Y¹Årnþ/kùøåi#’mÚãÑ?µ=ìÊÙèqØšÕ®„¢ÃËZð6ÓECt¬t¬nâb“{ñFrܺÑ3ïø2–»!²o`Ä$1=!‰€Óú¾¨†€Lb:=.Ycž™ízlë&3tîµ´\gâZfœœZKɪ–¶?WòþA‰é`Kì×À&ZŽoQ¹É#Çõ¿©JmÇ×ÉæÊ\·²bû4¾FÅwØxì} ‚mض1üYO÷h–í…}†¬iYwý†RCýª„Ø&©ªìM&ŠqB­Z'°¯‘k{šF¸áhÝŤ”‘·¦÷7õÙÓ–Æ£*[yI;}ŠJ\W¯-†< Mõ+ø4J±K¡_ ŸM¹qœº2Ï9¸^ÑPÃæÈùÉÊ:ðMÇ&Os¤Ž|‘pÍÍJÕèÓÔäYÜr7OªFpz0äÖM~ÒrË“´ŒåW¥Hô¯Ûd­È«i}˜ží‹ù^;*–Ês¿ÎN•‰}tœL¤ÔfËlÎR±XÉ0Øy ´!…Ь–„ޝIêç…ñ]3×ÑJ6ÞÍõi²£%'qfêêû3¨’ÈÔ£«ìÚë®ÝY<ÈŽDæ•”çÝÈï°´Ùi¦Uè|’VpúÏ_]Jåðx^£ÔÏ<ܤÌ^Ñ"‘5LLy ° L¦íØ‚ÃøVUÖÝq_"µT*Ùt- ¿àÖnªÃŽˆnÙJMtöJ©v\1ówÙÑmx£XFÔœ¥Ó5ÇŠp´Í2ûÒÁx£AÛ²r¸¹*mE—Ž_‹f¹e†î߃žÔSÉ7WÑœq¼“s忇9dÇî,1+‹’t8䌵-PýDž¥ WäÆ “oÉK‡Ë<§ÊõF<ŸöÅ'W²²OF_H#MßA.™춺&¶ {†ÐÒj?ÉùoÀäÒVµg>LõÑ„¦äH¼€ c À ü ù ‰iˆ @wz?\ñ¾3\—VzXýBq©:ø4Ç7òuG"qú%¿qK#N¼¦š×Á>Þ:#Pë°­]è”ëEEí³U%V)fŒmévy_¨~§qቿ¶y3É)»“¶H[ [@É  tÁôP>þ†‘Jºèz‹¶MýÈÄ®¨tì8¿‘Åx±4ÂÝPš_°nÊŽ›¾…9Ê—GV5øæ¢ÑÕ7Ý#'*Ÿ ÙÁþ4ӡ㋌-«û7Æñvûøðr{z}â±~õhå”ï"QO‰¾YV/àœ.«’ès¹G]21û}¼²8·&è™dQJ-hsš[Ž“èÆM­ËWÑ”²V¬kŒ¥itc•©NÒ%4Wãg|Â1¥²ZmÛÐ’|†ÝÏh—½¢¢íj»\—zFrÅ&Ë).ôdíˆbøl`º1 <†€;5ö @&­“T.„tïàèÇê\³'7Q;±úŸk©hèÅêuO£x挢éÝv5>JÓè¨ä|¨¸ÊÛÞÁÉvÈy°yΊŒÒògŸÕãÃr¶ü?©õ™2Úº‰É{aàk@»l(C¡y P4/"¨Øã!¿jÐ6Ø»{*©íØXÓ¿½‚ùC_(Mßò*±0¿ —l¸ÅÉãÆKGbŒ¥5Ê=m–‹N]x qäÜœtZÕ&ý¦ÐiJÓö¯œ£W¶ÄœÚª¶k8Jp§¯ƒŸOÇ“)J_•]´uCqR¾ü ÉW(I)?j1r“åÇö®Ð¡·Î}djQn+®Œ''5MíÓ“¥àÛÚ±?0KtŽË©iü—'­¥¡9:%6岪×Àãkù&MEo³ž~£ÛÅíØ/±ˆ0êÅ`à,CBüŠÂöh§¿ƒ:—B¤ú4†yÃÉÑÔ'µÅoVT=sNÖŽœ^½8·&kU5%fŸ™5©-™Ï2i'¯³9z˜ÃG<ý|£rO$¦í²/@ ½l1Ð/²^„aäa°ß‘x Ð7l¨£G$¡K²ZnD¤Ñi[R&ÐÒöØÔ[@âàëȘŸWäW¡¤‰qÞǶwz\*›’éñÔ¹7KÁpsƒråàÛ”§·î£LSJ—dÍÆM¹yø1óš‚Ò4œ¿ §HÎ<§'(ºCŒÜ§ÆO¢=BiwÛ„”—¹—“”b¸ªfkò+”—fŠN+ÛböÆIÔ›1Ç÷K^„®ú¤c·?n‹P§oÏfy¤¥;HMZ´8&•†Î¹EÐA·bQÕÚ¡8§µàȧ’8ã§lãÉ‘ÍÙ“b@†Ø‚Zð&>À6`‡àAcJÊŒ}É#Jnúø\2ƒ§½x9Øá9¨®ÙßÓ²8õ³›7¤É‰î/ù0i®À 1%)S;±údJ¥Ù_ÿ ZvôœÜuÑ+ôÏPƒÿáþ¥/:5ÇèýGÏJ¼œ~¦*®\ŸÑÏÛB ø€`˜Äö ° ð Á;±'¡Æ6þ†-1¤äUî˜ôªŸaH§Ù-Û_#NÂ,Mòó±; ìBmŽ;ÕìèŽ+héã']y5«‡»itMTÕ-®Ñ?’|½±¦tãrÉ}®Ðœ}Ü«Aù%jm5Ç¡Jo6}ë]Âß·ÚÑpÅ»qßÉ—«½×F1Ï($öt9~Hso£7››©2³qŒbã+^QT$—ÙÏ“—(¦D›“j;dÅ%ɨÃG;ïé— >¼ßP4Ûì•·CÚix i„GG>LþyIÉì@ C$B}‚èò ì,C€P¨ÐЂÄi¾ëFð¯ÉqJ)-YPMFR·tVHrÉ7¸¯&h8:gOéX?'¨·Ò>“5[[+'¦†HÔ¢¶y>«ônM¼ló3ú ØžâÎW5M 6žŽ¯KëOg±é}n<¾kù;c4þ(¸»2õ9áéáÊuü'­ýNyý±öÄà»Û ØPt>ö+ÞÀ<…x`¨Aªû[- ªeGè§l%O  ±ÕoÈù .šò¸ªì@ÚþÄÓ–’:½>%tûø;!%ö&)8ÂtŸŽŠPŒã§C“X^ãɾ‡ŠžNOª$”Ý:o« JRViÜ7Ýta.Ku¶K–Lt÷²¡êe mKdâ—ä’rý¥åÇ ÖÓ+ FY186ÖÙƒiÊÛ¾|t\ž(ʹ]ª0Œ’›Kýƒdÿ³ Ò¹“vº5ŒÄšì«åì¥ 5n¶…M쥤š"R¦ÙÏ—;i¤a° /#BèC@&Ÿ±Û5]WÙJÜg×Á¶8î³Íõ«'¨~÷ý± PÄô¡´€^G ð Ð^ö²®• =Žmt[%E¦¨TÇZ*I(§{~ TŠë]ƒÓ¯ ¥lHßkGoãRiô™y"Ô}ŸbŒrûx55äÛŒ„žÙS¨Eoñ,|y²'8<Šïd5röü—ŽMÎ夊õ1´šªl#jöœþµE5°mU ’Ž5}øEc›”•x:!Y9%*’9' {Ò{/Œ$´Îl‹i¦dí7T4øÚ‘Î÷"–ÓѶ7ìâì(ª.ÒíÊbœÔ#®Ž<¹\Ÿf#»Ä Lbòº0 y¡ 0°ìCгXÅ­üE~IGŠI¥dEÉô“Môu¹EeuxÚAÉ8¤ôÒ´×Læô˜_¨õ)5çgÓàÆ£ªøÒ³,Þ¯Ý-ý9VtÿJ;'«Ï“''6|õûÙÍ— ËnQ§òoúWéÐË™Ê{Œ|‡¨ýÓeMÅpG…ë=4}6gÍOø0½l]°§bò1PyAü€^ôð4"¯CLžÊZAÛt›Ø0H§ªI![Ð%±´×`ŸÂ åçù ;I%Ð¯ËØ»`è¼xå.ŽØ(B¼¶k:t“¢ò'IF­¼~êì–—'9+3¿ò-ª~ ¦ø..¢Øg¸ÂÙÆÅØ0O@¶4è<(X ìਨ­£kìRvÐ=±¤Ø'CŠ·ô&«ø.65&ºMº°mµ¾ÁÜWBŒ˜îßzì|nTtZŽ8Á-¾ÎœPã$ŸÇ“|oM5e=Ti$e}Ù8ðÂozcɪ{ÿÙ”£Å¶üšjpã] czÖþBI¨þ7+f”áQ’4ħ8µ-+ð'&í3Ç,Üä½ —ãÉkö÷f®“i*-6ÚhÊ~]Y [\»ð/Q$«äQ‹”)vg‘´¨Ë#‹i¡'mQµ%E«Ù´W»KGBT¼³Èò1Š‚‚€C6/!V10%aäck¢Gà@&KZCŒ[Õy:ð`ŒdÜ­(¯û-G"ÃÚ’Ÿñ¥Æ-Å¥Óøñ·j}µòaéñ¿Uêá+W³é=vxú/IªM*Š>b\³drk¾ÙÓ‹·¢åm;cÅ7ä9R÷iù³j¢rËÝØ¼@„Àk±€y òˆaàK°­¡¨ù`´è§&õðK¶!×’à嶺dÿExÑi%¢°‹ zh)7ÝÛi||“%­ê…äé[:£‰ãJO·à¨T²r–¨ß’oÚÇïZttäË%h ùK¦èœ“ã+]ü Ê}EßÙÍžoò^ÑpçÁ¸ù6„šŠ·ª3ƒSr~EšiÍ$ºìÒTq¾¬ÂRäªR´o\~2Ä¡)=>Œ%(ǵù5ÂÓÇw£ s¶Þ‘›‡,›{øÒÒ’Ú>­=™ÏÛ+èçnäÍ1ÂÝ¿‰ÞŠŒvtB;LÕ÷@©*gäcª4* ,€†þt1P¨`ƒ°0¡>ƗѦ5Oìß/%7\U³\N|eS^ç´Í2ÓŸ*â»BŒªŽ|ÙÔ]-œŽn]±Bþaªûé„·±+¡º€! }ìhùð$;Ø'ð&ÿØ6Ø5ð?Ð%MØ&4X’½•ª *S쯻e.…NèSm½*Z{/-¾ŽìXT*¼"t½­}‘ _>übŸ9Æ2ý«äÓ*ƒÉíeÇ O”§H¯ËqÛOÉš’‚åðAÉI¶’9sÉãÉíé2ÓŒ¤§×ɼãµ+å}9ðRqÓÁÛM½š¬°m³™\›Qt‘žsr­|ª*Q©8Æê)Ù8ñÆ/&O”¦>P¥·òfø]Ч*Za&¸­É*«³)/}ã*²”5iìèÃå¤eê=KW´Î[v¡gÿÙopenxlsx/inst/extdata/namedRegions2.xlsx0000644000176200001440000002404514155600363020166 0ustar liggesusersPK!¨˜©Ün•[Content_Types].xml ¢( Ä”ËnÂ0E÷•ú‘·Ub`QUEË©ô\{ ~Éc(ü}'ªªJA¤nb%ž¹÷xâ™áxmM±‚ˆÚ»šõ«+ÀI¯´›×ì}ú\Þ±“pJï f@6]_ §›XP¶Ãš5)…{ÎQ6`V>€£™V$zs„\ˆ9ðA¯wË¥w \*S«ÁFÃG˜‰¥IÅÓš>oI"dÅÃ6°õª™Áh)‘ò•S¿\ÊCE™9ð†0ïthwþ6Øå½Ri¢VPLDL/Â_þéãâÃûEuX¤ƒÒÏfZ‚òri©†Ba¬©òZY¡Ýžû€Fž—þ…AÚóeá9ÿÄ‘èÞÏÏóK‘eŽÓÆ^ú÷gÑcΈ ÞR¤½8ÀOíCt'ѤNŽpzö­Úf—„ & ßÍÚué¿i œ]vhçŒuª·\bòölû­L‡9ÏCuôÿÿPK!^¾eß _rels/.rels ¢( ¬’MK1†ï‚ÿ!̽;Û*"Òl/EèMdý1™ý`7™¤ºý÷FAt¡¶zœ¯wžy™õf²£x£{v–E ‚œfÓ»VÂKý¸¸“rFìHÂ"lªë«õ3*塨õ>Š¬â¢„.%ÿ€uGVÅ‚=¹\i8X•rZôJª%\•å†ßPÍ4ÅÎH;s¢>ø¼ù¼67M¯iËzoÉ¥#+¦DÎYøÙBêó5¢V¡¥$Á°~ÊéˆÊû"c'ZýŸèïkÑRRF%…šæùì8´¼¤EsÜ™F|ç0¼2§Xn/É¢÷1±=cÎWÏ7ÎÞ²úÿÿPK!J©¦aúGxl/_rels/workbook.xml.rels ¢( ¼’ÍjÄ0 „ï…¾ƒÑ½q’þPÊ:{)…½¶Û0±‡Mlc©?yûš”î6°¤—У$4ó1Ìfû9ôâ#uÞ)(²ºÚ›Îµ ^÷OW÷ ˆµ3º÷ŒH°­./6ÏØkNOd»@"©8R`™Ãƒ”T[4e> K—ÆÇAsc+ƒ®ºEYæùŒ¿5 šiŠQwæÄ~ Éùomß4]¾~Ðñ ɉ “ Ž-²‚iü^Yyž¡\“áÃÇYD>qW$§K¹Sü3Ìb2·kÂÕÍ ÇT>:¥3[/%s³* }êú±+4Í?örVÿê ÿÿPK!"Ád‹2® xl/workbook.xml¬—mo£8Çߟtß³VÚWL€$¨a•r6í¶ÛÜV•*U.8Å*àœqšTÕ~÷“æa¥zw/jcÏß¿±ÇöpúiUäÆ3ãeá´LxÊÊÇúg:2;Ȩ$)S’ó’öÐ ­Ð§ðÏ?N—\<=pþd€@YõP&å<°¬*ÉhAª>§%Ô̸(ˆ„¢x´ª¹ $­2Je‘[ŽmûVAX‰Ö ÐÑà³KhÄ“EAK¹4'ð«ŒÍ«F­Htä "žs3áÅ$XÎäK-ŠŒ" Æ%ä!·WØ3Vþ|øÇ6\œ¦'¨:êª`‰àŸÉ¶ÖÐGþcÛÂxoVÇc §äZ‚>35‡[*áÿ"•¿ÕòßİýÛjB«Ž•ïÕ¼-›ƒÂÓËé·uèd>¿ …š©9©dœ2IÓjC‘/éÞ ±˜,‡ZÜÅŽ¬pΗÂHéŒ,r9…@nä¡¡ïwOµ„Àèç’Š’H:䥄8Üøõ»1Wk3n|¥ÿ.˜ °° ¾ÀW¸’$ Õ%‘™±y ƒ;µïþŽÏïv‚‘GþO„#I”8¹Y?: <"hBîR žÇцýš<Ã$ÀT§›5:V£lß—‰°­~÷¯ÆmŒí®Ùõ¦ÛöÍŽ7j™í8jGƒ‘û¾û<~p²Ùf’•~µðªÎɪ©Áv°`éËkÝ+\Lõppiê¾+¯ÕvöÑeõªh¬nX™ò%øÑñÁ³—¦Ï˺憥2ë!§e··ïÎ({Ì·ÛqUà GQõÐë ë`¿Ó‰L/öú¦ëFžÙwھ鶢aŒG¹qMcíàÔ›&`Õw£¬ýZm¤áPÍIBaŸVoÔxÃÞ$Õ›§Xyvdc¸m ÏÛÖN=ûMw°XISµ° óÒáAgj%$¯yTï6 ?Â}üëÃàƒ{jíhè bÖzXOdÆùÏPµÞ¥Úî@¼o3¾ºž¡Â~ïö Z_¡ÐÓm{ ʺÂQ<öJ[d¤¸õ[¯¹u\ÝD÷Ã[dd,M©Ê6Öý`}[ÕcGßVűÖ4*êѵ6ôèöZ›yt{Ĭ|µç­gk_íóz¶6îÕ>­gëÁn‚Yg"'ýi|=ý|4‘ú¶‡Ã¢µ6'ÓsBÂªÛøüËÅôlRYk™¯mC¬»\(6_S|ú%êÓMÞì :#};PØÒD‚Æ?.e}ˆ¶{xÀqGNÙšºÕ9F»kcHöTùœ§„¤\\ht%'•¬ï:18…±k÷Ûv×5í¸å™n§ë˜·å˜C7rb‘xà©D}ÛÿG†_gpAóѤ¸3"äTä >µ¾ÒÙ€TÀ\ŸÖðBÞÕP[UøÿÿPK!À‰™; xl/styles.xml¤Tßo›0~Ÿ´ÿÁò;5Ð%P5M‘*mÓ¤vÒ^0‰Uÿ@¶“‘Mûßw†$uÚ¦öŸÏæ»ïî»szÓJöÌX®U†£«#¦J]qµÉð×§"˜adUZ± ˜Å7ùûw©uÁ·Œ9Êfxë\³ Ä–[&©½Ò SpRk#©ƒ­ÙÛF+ë’‚Äa8%’r…{„…,ÿDRó¼k‚Rˆ:¾æ‚»C‡…‘,¥ ]  ÚFZ¢6ššµæ¤ó¾ˆ#yi´Õµ»\¢ëš—ì%Ý9™ZH€ü:¤(!a|‘{k^‰4!†í¹—çi­•³¨Ô;å@L êK°xVú»*ü‘wö·òÔþ@{*Àa’§¥Ú ÒAå:¢’õ7n §Â_ª©äâÐ;cï >àq±pÎ…8‡}$pä)èä˜QlÐÑ~:4GAKõ0ݽÜÞzˆâdôéæéZ› ZxHüäÊSÁjD ßlýêtßµvdÎÓŠÓVTøTz³é”LˆGßæßê ì¶Fj' éª ÃÀø"œLHähöxýÆãÑzì7â¶¾ÄÄí ÒçðÈ ›áÏ~.´È­w\8®þ@0«v(Aèp~ƺ✣@%*VÓpOçà ö'VñŒÏ·¾ð½vD†û£W*šú¬u-´¬hgx†Þ/?ÌW÷EÌÂå,˜\³$˜'ËULî–«U1ãðî×hÒß0çÝÔ§0A +à50Çd)>¾ 6=ý®Gö˜û<ž†·IÅu“)³éuI¯¦“å}R$#îÉ+߃DQÿ²xòÉÂqÉW'­N ½ lÿ’9)A†W?ÿ ÿÿPK!žsñ 6Áxl/worksheets/sheet2.xmlœ”ÛŽ›0†ï+õ,ßsH²«ì¦Q÷¢RUõpí˜!X‹1µ“ª¾{Ç °U·ÑJll¾ùç÷˜üþ¬Zrc¥î !%Ð ]Én_Ðo_·³%Öñ®â­î  °ô¾|ÿ.?iólGÐÙ‚6ÎõcV4 ¸ tÎÔÚ(îphöÌöx5|¤Z‡á’).;:2s C×µ°Ñâ  s#Ä@Ëê·ì핦Ä-8ÅÍó¡Ÿ ­zDìd+Ýe€R¢Dö´ï´á»ó>Gs.ÈÙàcK®a†÷¯"))Œ¶ºv’Ù¨ùuú)Kéuþ7a¢93p”~_PñÛ$E‹‰¿À’7–ÌÛe²ƒ¬ úëñÃr‰m5[¤ëål¾ ׳4 £Ù:ܦëM’¬Òxý›–y%q‡}VÄ@]Ї${˜SVæCý|—p²õ‰/ÇÖÏ~â ÄH°Ð‚ð…A8>Žðm‹ 9VôÏ‘9ÙD,ó—þ•¾ ø³!Ôüк/úôä¾qxZæA¼ÀÌ|idÕeV`Mbì öB…n‚w¢$ž-4Tñóð<ÉÊ5Mƒä¿ßu[éy”ˆƒuZýç#Oa#fи᎗¹Ñ'‚µ‚žÚžû“g~³þ§Ãû¥¸ù=9–QÎŽ‹ Iλr+×N¸ðÜè਴ç{øÄÍ^v–´PÖÜQbFûÂûN÷Þ°Áí0÷ë¨Á_ ö0@ñµÖî:ðžL?ŸòÿÿPK!Á¾NÆ xl/theme/theme1.xmlìYÍ‹7¿ú? swü5ã%ÞàÏl“Ý$d”µ¶ìQV32’¼%9õR(¤¥—Bo=”Ò@ ½ô $´éÑ'ÍØ#­å$›lJZv ‹Gþ½§§÷ž~zótñÒ½˜zG˜ Â’–_¾Pò=œŒØ˜$Ó–k8(4|OH”Œe nù ,üKÛŸ~rmÉÇØùDl¡–I9Û*ņ‘¸Àf8ß&ŒÇHÂ#ŸÇƒÞ˜+¥R­#’ø^‚bP{}2!#ì •J{©¼Oá1‘B Œ(ßWª±%¡±ãòBˆ…èRî!Úòaž1;â{Ò÷(~hù%ýç·/ÑV&DåYCn ÿ2¹L`|XÑsòéÁjÒ ƒZ{¥_¨\ÇõëýZ¿¶Ò§h4‚•¦¶Ø:ë•na PúÕ¡»WïUËÞÐ_]³¹ª…× T°† ºàE ¯A)>\Çf§gë× _[Ã×Kí^P·ôkPDIr¸†.…µjw¹ÚdÂèŽÞ ƒA½’)ÏQ «ìRSLX"7åZŒî2>€R$IâÉÅ Oв¸‹(9àÄÛ%Óo†&`¸T) JUø¯>þ¦#ж02¤•]`‰XRöxbÄÉL¶ü+ Õ7 /ž={þðéó‡¿=ôèùÃ_²¹µ*Kn%SSîÕ_ÿýýÞ_¿þðêñ7éÔ'ñÂÄ¿üùË—¿ÿñ:õ°âÜ/¾}òòé“ß}õçOÚÛ˜ð!‰±ð®ácï&‹aûñ?Ä0BÄ’@èv¨îËÈ^[ êÂu°íÂÛXƼ<¿kÙºñ¹$Ž™¯F±ÜcŒvw:ચËððpžLݓ󹉻‰Ð‘kî.J¬÷ç3 WâRÙ°eæ Š‰¦8ÁÒS¿±CŒ«»Cˆå×=2âL°‰ôˆÓ%Cr`%R.´CbˆËÂe „ÚòÍÞm¯Ã¨kÕ=|d#a[ ê0~ˆ©åÆËh.QìR9D15¾‹dä2rÁG&®/$DzŠ)óúc,„Kæ:‡õA¿ ãû]Ä6’KrèÒ¹‹3‘=vØPsXÐa3Ëç¹ÑW"`•ìJ¬+ÈÎUõœ`e’ªkÖ)r—+e÷ñ”m°goq‚x(‰ߤùDÝJ]8åœTzŽMà5åä‹Ó)×è0’»¿IëYg—zî|]p+~o³Ç`_Þ=í¾|j ö·öÍQk‚¯eÎk™óZÆõöõAj™¼|Ê&ïòèžO¼±å3!”îËÅ»Bw}¼ÑŒ0¨ÛQº'¹jÎ"øš5˜,Ü”#-ãq&?'2ÚÐ ZCeÝÀœŠLõTx3& c¤‡u+ŸÐ­ûNóxÓNg¹¬ºš© ’ùx)\C—J¦èZ=ïÞ­Ôë~èTwY—(ÙÓaLfQuQ_B^g„^Ù™XÑtXÑPê—¡ZFqå 0mxåöàE½å‡AÚA†f”çc§´™¼Œ® ΙFz“3©™Pb/3 tSÙºqyjuiª½E¤-#Œt³0Ò0‚á,;Í–ûYƺ™‡Ô2O¹b¹r3êkE"'¸&&SÐÄ;nùµj·*#4kùèÃ×x¹#Ô[¢S¸vIžnøwa–²‡D”:\“NÊ1‘˜{”Ä-_-• 4Ñ¢m+W€>Zãš@+›qt;Èx2Á#i†ÝQžNáS®pþªÅ߬$Ù½½:ç7¤XX/+މ€‹ƒrêÍ1›°‘åùwâ`Êh×¼ŠÒ9”Ž#:‹Pv¢˜džÂ5‰®ÌÑO+OÙšÁ¡ë.<˜ªö½OÝ7ÕÊsiæg¦Å*êÔt“é‡;ä «òCÔ²*¥nýN-r®k.¹ÕyJ¼áÔ}‹Á0-ŸÌ2MY¼Nʳ³QÛ´3, OÔ6ømuF8=ñ®'?ÈÌZu@,ëJøúÊܼÕfwÇ¡`Ä{¦*Ñ79þþmëÝcd,í+Ú©žçø•üP|ü”Þ›–s‹€Ð›·Ö)!†µ\Rã«÷ð¥VZR SÝ3hN«1Iv$ ‚;"©èñDHõ- UׂñbÉ{;A4ï¨ý¦ƒ¹Ð$»'©Þ)9b':a_G(F’¥ÏM¯4ÝuàûÆ”¡³†'‚±¸l3®_í$ÓʨÚú@&“ækû+²"”ͤkÿ7a˜h~®€o¨è}’ÂdfEo°Å;aw3Ì—N¢ÊñÏõzý”Ü+oY&‘?­·^¹ Bï1)ƒ0LÖ‹åê.²J@…+¤yãr‘–1&E6öÏÁOæwdéî+ï8³ö1rí¹SjïŸa)p©ä*w;¶ç‹F¯é¡³_ÔéMkûQº]áÓêuà ƒŽ’Í26ÔÒ"Óê„ x`Ò Ô]…(u§÷¯Ä"c.´„X@°y,¢ŒAƒ¤ÿbgÜâ/ÜdzR:І¦º½A¯G7KŒôä8ðáݪÁy\‚õ²VÉˬ…»ËA{àƒøZ){™¸ƒÿÅoÿÿPK!US޵xl/sharedStrings.xmllÏAŠ1Ðý€wµ×´"2 I\ x=@¦»ÚtªzRÕ¢·7" ³üïó Êí¯y4,’˜<¬W ¤–»Dg§ãaù F4RG&ôpC}X|85uKâaP¾¬•vÀeÅRmz.9jåle*;5vÓ4;›c"0-Ϥ¶`fJ¿3~¿rp’‚ÓðKÁ~í¬gôäž¹²QÖ8þßmÞùyéÛúB¸ÿÿPK!Ök3, ©docProps/custom.xml ¢( œ=oƒ0†÷JýÈ»cc Ø6s‡´;“ Å6ÂNÚ(ʯ£~íOïÝsÏ]±ûЧè¢V7[S‚xƒA¤Ì`ÇÙJðºï ‘ó½û“5ªWåÀ®z~*^V»¨ÕÏÊEa\ ŽÞ/[„ÜpTºw››LvÕ½åz@všæA ;œµ2Œ34œ·.¿8ðÅÛ^ü‘£vîm]‚nU|ïѤý<–à&ÒVˆ§HÞÂÇ ä Ï!f“†´¯åDË£™€Èô:œ~«)ÍY.(Ä)Ŧ$œg1Ì™¤8Ék3që.~{ZÞ_«›Ä„Ô¡ðXBÚɲ¼é`—ˆZ²Àë²ü^ ¿‰ýÈVúûqõ ÿÿPK!ÝWEodocProps/core.xml ¢( Œ’]KÃ0…ïÿCÉ}›fu¢¡í`ê®NïBòn 6$ÑmÿÞ´Ýje^¹IÎÉ“s^RÎöªI¾Àyit…H–£47BêM…^V‹ô%>0-Xc4TèÍêË‹’[ʃ'g,¸ Á'‘¤=å¶BÛ,ÅØó-(æ³èÐQ\§Xˆ[·Á–ñ¶<Éók¬ 0ÁÃ-0µ‘‚Hûéš 8†èà1ÉþñpÊÿy¡SFN%ÃÁÆNǸc¶à½8¸÷^ÆÝn—íŠ.FÌOðÛòñ¹«šJÝΊªKÁ)wÀ‚qõ4ÉCò๠¦Ä#­cÃ|XÆ‘¯%ˆùáÜ~n‰ô®Lÿˆ$Æ£}™“òZÜݯ¨žää6ͯãZM%9’÷6Á¯ûmÜþ@sü›XLiq5"žu‰Ï¾Hý ÿÿPK!LùyžÃ2docProps/app.xml ¢( œTËnÛ0¼è?¨¼äSN £0(…Ó"‡>ŒÚIÏje‘H‚ܨv¿¾”„Èrâho»;ƒáp´”¸ÞÕUÒ ÚšŒM')KÐ(›k³ÍØÝæóå–“Ce fl]Ë·oÄÊ[‡ž4†$J˜±’È-8ªÄÂ$Â&"…õ5Plý–ۢРo¬zªÑ¿JÓ9Ç¡É1¿tƒ ë ý¯hnUë/Üoö.–â£s•V@ñ–ò«VÞ[Pòi§°| ŠènêÉkÚËTðq+Ö *\FaY@PðÃ@Ü"´¡­@û EC‹YŸý;Æ6cÉlíd¬¯ÁP´ÕÒú¦«+ÈËŸÖ?†‘‚à‘лrÌ×z&¯:B,Î{­oPcžü³Å9bvúˆÖc×xöq M†ïÅ <e>¥³ÖGÒ»\·$¿4•Ip bÚ‡0†ª#MOB/.Þ=€÷Xœ:Ç8¡WXû7½×ÐQN/’YÚÚÙLJê‹6áÎmì >ïÛñP¬Kð˜ÇöqˆÛ¸j¾jE–eû¥ógÎk }÷ý/@Nç“ô}4üðØåÿÿPK-!¨˜©Ün•[Content_Types].xmlPK-!^¾eß §_rels/.relsPK-!J©¦aúGÚxl/_rels/workbook.xml.relsPK-!"Ád‹2®  xl/workbook.xmlPK-!À‰™; s xl/styles.xmlPK-!žsñ 6Á7xl/worksheets/sheet2.xmlPK-!Á¾NÆ £xl/theme/theme1.xmlPK-!¬2j)ûR"xl/worksheets/sheet1.xmlPK-!US޵Sxl/sharedStrings.xmlPK-!Ök3, ©:docProps/custom.xmlPK-!ÝWEo“docProps/core.xmlPK-!LùyžÃ2"docProps/app.xmlPK %openxlsx/inst/extdata/load_xlsx_testing.R0000644000176200001440000001201714374150317020424 0ustar liggesusers# nolint start require('openxlsx') unzip_xlsx <- function(fl){ wd <- getwd() d <- file.path(tempdir(), paste(sample(LETTERS, 10), collapse = "")) unlink(d, recursive = TRUE, force = TRUE) dir.create(d) new_fl <- file.path(d, basename(fl)) file.copy(from = fl, to = new_fl) setwd(d) unzip(zipfile = new_fl, junkpaths = FALSE) cmd <- paste("start", d) shell(cmd) unlink(new_fl) setwd(wd) return(d) } zip_xlsx <- function(d){ wd <- getwd() setwd(d) zipfile = "a.xlsx" files <- list.files() flags = "-r1" extras = "" zip = Sys.getenv("R_ZIPCMD", "zip") args <- c(flags, shQuote(path.expand(zipfile)), shQuote(files), extras) res <- invisible(suppressWarnings(system2(zip, args, stdout = NULL))) setwd(wd) } ## Get loading files # devtools::install_github("awalker89/openxlsx_testing_files", force = TRUE) ## To install from CRAN # detach("package:openxlsx", unload=TRUE) # install.packages("openxlsx") test_file_dir <- system.file(package = "openxlsx.testing.files") ################################################################################################################ ## All Features wb <- loadWorkbook(file.path(test_file_dir, "All_Features.xlsx")) openXL(wb) ################################################################################################################ ## Budget Template wb <- loadWorkbook(file.path(test_file_dir, "Budget.xlsx")) openXL(wb) openXL(file.path(test_file_dir, "Budget.xlsx")) ################################################################################################################ ## Chart Sheet wb <- loadWorkbook(file.path(test_file_dir, "Chart_Sheet_Test.xlsx")) openXL(wb) ################################################################################################################ ## Chineses Characters wb <- loadWorkbook(file.path(test_file_dir, "Chinese_Characters.xlsx")) openXL(wb) ################################################################################################################ ## Excel Diet Template wb <- loadWorkbook(file.path(test_file_dir, "Diet.xlsx")) openXL(wb) openXL(file.path(test_file_dir, "Diet.xlsx")) ################################################################################################################ ## Empty Workbook wb <- loadWorkbook(file.path(test_file_dir, "empty.xlsx")) openXL(wb) ################################################################################################################ ## Encoding Test wb <- loadWorkbook(file.path(test_file_dir, "Encoding_Test.xlsx")) openXL(wb) openXL(file.path(test_file_dir, "Encoding_Test.xlsx")) ################################################################################################################ ## Libre Office Test File wb <- loadWorkbook(file.path(test_file_dir, "libre_test.xlsx")) openXL(wb) wb <- loadWorkbook(file.path(test_file_dir, "libre_test2.xlsx")) openXL(wb) ################################################################################################################ ## Load Example Workbook wb <- loadWorkbook(system.file("loadExample.xlsx", package = "openxlsx")) openXL(wb) openXL(system.file("loadExample.xlsx", package = "openxlsx")) ################################################################################################################ ## Loading Pivot Tables wb <- loadWorkbook(file.path(test_file_dir, "pivotTest.xlsx")) openXL(wb) wb <- loadWorkbook(file.path(test_file_dir, "pivotTest2.xlsx")) openXL(wb) wb <- loadWorkbook(file.path(test_file_dir, "pivotTest3.xlsx")) openXL(wb) ################################################################################################################ ## Excel Template (Sales call log and organizer1.xlsx) wb <- loadWorkbook(file.path(test_file_dir, "Sales call log and organizer1.xlsx")) openXL(wb) ################################################################################################################ ## Whitespace - maintain whitespace wb <- loadWorkbook(file.path(test_file_dir, "Whitespace_Test.xlsx")) openXL(wb) ################################################################################################################ ## Weight Tracket Excel Template wb <- loadWorkbook(file.path(test_file_dir, "WeightTrackerTemplate.xlsx")) openXL(wb) ################################################################################################################ ## Schedule Excel Template wb <- loadWorkbook(file = file.path(test_file_dir, "Schedule Template.xlsx")) openXL(wb) ################################################################################################################ ## package Example File wb <- loadWorkbook(file = system.file("loadExample.xlsx", package = "openxlsx")) openXL(wb) ## write jsuts a date wb <- createWorkbook() addWorksheet(wb, "Sheet 1") writeData(wb, 1, as.Date('2014-01-01')) openXL(wb) wb <- loadWorkbook(file.path(test_file_dir, "pivotTest.xlsx")) writeData(wb, 1, iris[,1:3]*100, colNames = FALSE, startRow = 2) openXL(wb) openXL(file.path(test_file_dir, "pivotTest.xlsx")) # nolint end openxlsx/inst/extdata/readTest.xlsx0000644000176200001440000217253514155600363017256 0ustar liggesusersPK!wK)H¬_ [Content_Types].xml ¢( Ì–ÁNã0†ïHû‘¯¨qË ¨)v9ì{ÚXulË3@ûöL T«UiUQ _%öüÿ7)þÇ—‹ÎUÏÐ߈Q=xŒõ³Fü}¸œ‰ Iy£\ðЈ% ¸œü8?,#`ÅÕÑÅ )Q·Ð)¬CÏ+Ó:Eü˜f2*=W3GÃá©ÔÁxP¯!&ãß0UOŽª? ~ýFòh½¨®ÞöõVP1:«1¨|öæ?“A˜N­ôSÇÒ5ÆÊ` @«c²ì˜îˆC!×z&p¸›é{W5Wf0lmÄCný‡~åó®Þënùs$k ºS‰nTǽ˅“/!ÍC˜×›EvMQÝ)ë?¸7øçÍ(óm´g¾¿,¼#ÇQ!? á8.„㤎ÓB8~ÂqVÇy!£a) ¥üQGßõK%Ž óõë³È2[Τ¥Ü÷‰šE·9·*¹'&³½ü«½…C+§¯Z>ý÷<„•î&Nkw)Dä@˜`w€ôÕW" A" «üµ.Ǭ9M~¹cè㪳Æ[æxóõ§ÖW¾®mò¼RðlÔGÚ](Á¿Œ=b ༨´¸”õ)äÝÉj≿ #fcÒ8ï $]È»§  Fe¸Á‘³ Üž%Ùži`1¥pBÓ0"Ó%kõTÊJ×·O‘ Ý fTGnøÒÚò'³L³ ½•Ki!{sÖÏ8îïYš¤ñ32èH1…3L3§`ÖaÖd£FµÝ©öËO¿8üÆõùÙ>´ýÿÿPK!“?Txþxl/workbook.xml¤TMsÚ0¼w¦ÿA£{bì˜|0˜LJÚi.Lš‹/B~`Yr%9ß'¹sH§°d-«}ûö1½ÞV’¼‚±B«ŒÆ§#J@q]µÊèÓã·“KJ¬cª`R+ÈèXz=ûüiºÑf½ÐzM@ÙŒ–ÎÕ“(²¼„ŠÙS]ƒÂ“¥6s¸5«ÈÖXaKWÉ(Î£Š E[†‰ù‡^.‡[Í› ”kI HæP¾-Em;¶Š„®bfÝÔ'\W5R,„î-RRñÉÝJiÃËÞÆãŽ—êJp£­^ºS¤ŠZ‘ƒzãQÇmɳéRHxnm'¬®°Êß")‘̺¯…pPdô·zû(Â4õ—FH<Ó4Ñh¶kŽ!,Y#Ý#6¡£G`’&ɹGbQ7ÒQÌÁ\+‡þuÿý ÜóRcwÈün„ …·m6ÅoÆ'laï™+IcdFç“üÉbùù„m~ vít?ÔFÿîlâ#í6ʺ¼g=öõÌgÜ»¡ ­ÔvýÞ’ÙÔûYÀÆîÍõ[²}ªÐ›Œ&)Ê[·K±/›pò" W¢ãã3˜öÝw«Òet|•à;Æx…G¶@’ ¦wW˜ ¼3<‰ ™øéç%Æ!ôÏ;ßvÌÀDàÂܱg “×;t¸o€&g=8Nû~v”œ¤}-}úô8kÞkG×vüããx ýß/6$¸/ÿÀ¬bÇ|ñž9>€b;èåz€õ×¹}u{FéûÖ„Ñ<ã§_ÜE>h¥Gâû͉Ûðt‰áLrÿ'cÿ[®oŒÁ1ŸãIFƒ¦¨ûëžýÿÿPK!ü7ÿMxl/worksheets/sheet4.xml”TMÛ ½Wê@ÜרÙ|l,Û{ÉFÞC¥ªj{'Û(, Éæßwl6iCR)¹1áñæ1Cöú!;´çÆ ­rœD1F\1] Õäø×ÏõÓ FÖQUÑN+žã#·øµøú%;h³µ-烲9nëSB,k¹¤6Ò=W°Sk#©ƒÐ4Äö†Ój<$;2‰ã9‘T(ìRs‡®kÁøJ³äÊyÃ;ê@¿mEoOl’ÝC'©Ùîú'¦eÑ wI1’,}o”6tÓAÝÉ”²÷\ÑKÁŒ¶ºvÐ/ôºæ%Y`*²J@ƒíÈð:Ç«YZ&1&E6ô[ðƒýg¿7Zo‡÷*Çc*¹Ê]~7¨â5Ýuî‡>”\4­ƒÇþ¡Œ´:®¸eàÐD“ÙùÒu´ÈŒ> x ȶ=^všBÜ>YdlÈ]Í  }1ÉȾÈûDß<:¿D×7Ñ2D È8k™?¢e>jy´x4Ôr-CôBË0wûÉ`²õî$IhÐ˸± º‰–ý[À…¨å#¢–ã­ÓÀ Î- –ýèâ‚ì¡u‚‡yû„C9·³‡Á¹$ñæøñð]ÝÓ†£¦Ê¢Ž×cë/02~6âÖN÷Ã@, ó7Ú9-OQ ߇6£gŒj­Ý)€i%ç°øÿÿPK!ˆ ÃðŸx xl/worksheets/sheet1.xml”VMs›0½w¦ÿª3½…/Å®M&)&Î!™N›¤g„ÍE²ô×w%aˆ{ƾؠ]½}û´ZvzõZäÖ–Ô,£å y¶‹,RÆ4ÉÊÕ ==F—Èb— ÎiIfè0t|þ4ÝÑú…­ á ”l†ÖœWÇañš˜Ù´"%XRZ˜Ãk½rXUœÈMEîø®;t œ•H!LêS0hšf1 i¼)HÉHMrÌ?[gÛ£ñ)p®_6ÕEL‹ –Yžñ7 Ь"žÜ­JZãey¿z}ï±åËø"‹kÊhÊm€sÑ9±HÁ4É !»U“t†®½ÉÂóL¥@ÏÙ±wÏÖ?J‹ß1\ÆÔ½>sµ(ÎdI鋨|—Ì aÉI,Ô±0ümÉ’ƒ÷ Ø_!¨ÓF}ÿ¼gÉSüY[ Iñ&ç¿ènA²ÕšCÉ’Ôc’¼…„Åp*Øö%jLs€€_«È ¼† *~•ÿ»,ákØíÙƒ‘ÛóÀÝŠ7ŒÓâOc¤Ô~I-ÄÓšî,¨ØWXT7= ßkpJ ´Ø¾;N-ä7æÃ<ÒÍ¡a¾ÔÍsÃ<ÖÍ‘fö\üÖ0à ÃÜ; C+†Žà b,¥ž¡„h5<¸:W8¨žëy Np8}‰Ø÷ݾ¯;Ü6ûy i€zp0=¿¬o¸¨¾[Èz\g MTZc”k:ÌBÁ â9ÀBnøÞ=;î—ÖW“«wŽ\à|L®PÙDìmðõá龋'ën®ì­D†Ú‘à¡Id8,:üðë}rò±)a-3ïô[ÎG A›qd¡Zõì^߸ ªMÔØ ZZ¢F±,ÔþCBj鉖uò¥ç6=#ÞÍ@µ# µãèqF"¼LCtË÷÷ºÚé¼Àù(¯¡äÕ3Z…>i4®¹‚je7öE‚ÖA¾£sø‚óQ¾£ƒý¢Yµ^7WH-]£ˆ"Áê}•ôºýšÚb9µ "á¬vj ãs$磒Œ•Vج'4W@­"£‡ RùÎA#ïÁÌvÆ×¼Ò(ÙpÍo ZŽl3»û¸z®Q£‘ä¦%Ñ»žÄ9Ÿô”O£c†ûeß¼ `0´ì< 5ÿ¨!£Â+rëUV2+'©œg ÁÆg0ø™`ü³¬Üä[Hß)aìVçÙò.‡C¶Ýæ–¨xÌÕ(ÏÐpérÞÞBþonë´]tï£ÕØ}Xÿ,\k›ï_ð=VlX Õ±y;Û› ÛéH—fsºÑÜT²nüžÑ•ञÐÕCk- ú€të”ÂsRw<ÛüûfV-A0fGä?"x%SêLÝ>‡Ñðâé&¶ §œø 6^#ÿâ/ŽÑÛ‹cß­GÓ‹cäýæÍæAºi‹äÂÓ²ö§Š'¤ˆÍ1B¯¼›“óœt(š+.§ð|”Ë_™§î#žn샇<ÛÞº‰^Ërаì[KŸ#„è“vë…sRQ¦¨x¢YÌlÛµ?æ³_éóÓíßì3’㊩»ýÃu÷IF+½ÑúLï¥2!êîoôǰ7Öõ™lÕM _°pµª‚†è¿ëùÛéò:Øw>±GCâÛS¾´ýÑb¾\ÆSwà.þï=ã°ÈjAÃâf%ƒ#¥¢YlCþ¶“…¨7¨é›îh÷¹Oc÷½ï¹võë¶ ÏÑãýÏééîêªS§–ùæßþç矾ø¯÷¿|úñã‡o¯|õ¿»òÅûßüáÇúöÊ‹ç·.þxå‹OŸß}øáÝO?¼ÿöÊÿ¾ÿtåß¾ûû¿ûæÓ§Ï_̽>}{åÏŸ?ÿå_¿üòÓ÷~ÿó»Oÿðñ/ï?Ì•ÿøøËÏï>ÏŸ¿üéËOùåý»>ýùýûÏ?ÿôå׿ûݾüùÝ®|ñýÇ¿~øü핯¿úúë+_üõÃÿù×÷×ýé«ß_ùî›O?~÷Íçïþë«o¾üüÝ7_úëo¿|¿ücüòûøåŸâ—?Ä/ÿ¿ü1~ù—ó—ÿøñ§ó·ï>¿;ßýô×øñ¿?þòÃù/Þ^<¾xvñæ¼pýâöÅ‹×wÎ ×.î]\½xtñê¼pgt{.Ü;/Üš ×/î_ï”Ròxäº]?ljš¹ßÈyÜ›|c½Î; üv–16êÍŒñvFyœ;øfänÛ7³ºE¨_ÍßšK×ÎGݽ¸³ä$¶öÅÌárî‰ ŽÀí¾QääaŽñzÞÈŽ„0\·º6b‚/掳$Î×}`egÏCÏyTLð‘ÿžE Íðh&÷`–$u9z93‰ ¯ÖË>º¸z¾ÕÓ™õY”8çs–æaRÚïÍÌïx†[óºsFræOgw.îŸîÌæeSv¯/mu?ßêåÜqwÖ*uæ™Wµt9Ï¿jGR|(™Ç¹µ7fÙÌ’\Ïy¼œ£v#÷Ã1¸:ò;ø|IÕèëóQ÷æ‚£f‚ä>šs‹xk†~Ó4õ“¹ðpæªïÆ,ºõ aQ›ý»™çüÅÌüñlT‘’ëó²—9Áûó¨ó°PáT¾óŠìõ\˜%Ì%y;;x× 9×êíü÷ó%VwÙ§™GìùË¥u¯çžß‘¶½¡ôßÎîx³sðGK·Ïa;/Œz™…¿Zôî,!kçãÖl¥rE»‘H-út–cf‘kemn€ úíù\Œýx8#0Ä·R¨ïÍ{½H¡¾?¼lz÷Ù<êù<*–äÕÒ$#¨ç¯-9‘KàÔÞnÂðzv½hÖ¼ªð×kÏߦPÏYZà $ñÖÌâuSúT+ŠŒý˜šnwjŸ5Ý~cfñ,EôÕü¿ÃwwŽç¹µ#83Å1‘iRïÎZ½HI|C»Í© {2³ƒšûq}V—l…\A•·gøP2WÇx]Îð!W·gŒ§Ôåùº·×9¿ÕÐís¯¡%æ«Ø¨›38ƒßÜC7|5êb¦‹xcu{¥€‰A®[j†{#@¯òuáÐÛ388æÑ F±‚v¹ƒ/F)Ñ'qÇÓu: .a&ÌÅØAJ†©ˆ >™µº1¯*ãþÚA?¹ƒ°Ï‹|+šúþÌ=Îù“%»×Re\ÎÚ¾™»BJ(±Ûs!¿¿Ï¬oîÇ9hÏÛ"7Ðö¼ƒ³Ä/ ña_5ËIá?aòÎG][ÇùE³œ#Ðͤ^³­ÍžÛo¶0îúü7ÙŠµº¿ŽÁƒÔ»`Œ’:Ð1fbíbîùË¥üÂi¸5Çÿùlo(ýËáé Úçí,»°öÚò¼î¦\æÀAqªo¬QŠo0s.Å"çQù›ÀWÈëÁÛŽ1žqàâs­ÜÁ]Š rÛÍ(1`óS.ð^å/æAír­^-ÈYÌÕyÌå¬pÀÁÇ30M39ÿ1ÅÁa¸ äDŠ’kwg8 p®\¥!‰hJÿ!ÜÃ%"ƒ‹­½:ÿoC¬ìåÜ;HóéC‘ÝXšzx–4ÂDôMîù”æ=ï€CmV‘Ä׳/;êØ•rõ4o3ŸŸ™ŒŠMe ËŒ.ÍsN!¿Î­½·ð´Qܘ§ó¨€ƒ÷–fï+Ç Ð9/Ü]’Xø’gËw?'õ.éj£Â(€§Í+"<ÀWü»ÐpË[_ÏÁ_róéŸ~Ñ`Ëóå–¹œ,åZhCJ Ak5æw4ò~>êá’Ü!ÄÎ x%»XN-‡iP@¾.08–ê¼0îÂB 1Û³„wô”vñyîÄ´„²|±Ïà²óQOç1lqâ ™Ù•œÇ³£,âëµì×Úàø«ºwA‰f&˜ùòVTëR4ç[¡DÆBåádVF¤SûÜŸY«8QL*ù ½ûtþØÄœ EêQJø×O—(íàØ¬Ð%°.®:^“ñx¶*î@ÔÐYqay³$qá΢&ÇS=W÷ùÌÜ~„Þeý_Λ…ÀÍœçç‚d-l4zŽquæ hßT›¾B†ÅÁ ”*ãÍr¯ 59‚3£ÚðØ<Ëk5¬ëŒ2¤éùVhûÐhª ìîŠóøÈq¯ =szÀDÐX©Æon\–ÚAµƒÈûQû7ÜG®.žsºäñb¯†ùÉ™;…£hÎ ðÑÈVì¹cÃÅ xsfιŒ1™<ÈœÃ]Þ #S\Ë›389ŽSëB·_DBÆûçá$¾¢uY°j;n0þ\«'30R6¬^t²†w±‰ófç£ÐÝz ¾qbæÂ„xòp¾FqäëÞZKRèèd´0ï|„¨É®Õ-‘†ëK¨3Œ|ÌÿÙx>JØiø•´µ¨8£ì ¼;Jö|nMwxUJ¹°Îÿ›aA‘ã fPoæ£xƒlN¨Œ›Ën¾LǼù1¨¤× 3ð>(³À%{ðaÎ%¹?BÑÅ~›W Å@T¸¦pú5®{š"žÁ°Kç¼+‹…ï²Q18Ë)´z>C_΢ÄqÞœAyÞàqœ'òáA98ÂÌã­†ÿ_<\ì Lâx†Zâ(¾i'êÚ,;7 –Ä缇zÅ1ŒÕHÙ!–gkã|Ðo³è)%Wg ½YÁ>BnC5æ©E5Òiؘ™Þ8Ê)‰sæ•c d&ß+Tßóù™üÆÖn¶¶8£‚ K ¤N²tfúêrÇÑDz#~ÉnÌ\€G€2¶~«Ábn¸B‰sbô¯6ÙÅ”™s¼¦Ç™‘ÇÊ`²Å¼ŠN×îELÑãp¡¦ž6‹uF`‡ù˜—}‘«‹0Å.•0àícìNîǤÛ4|5˜ré†Ðí´•Aè’ 8‹0<­•5º9Ó“"‹¿9lñºo—cRXÜ9)»+æ |Z ¹rþ¤-ÄëŽs<ó(ÀËŽóŸC¨)Ê=—ý­%Ÿ1B—кog”|göïn5Œ%Þ d¯t›õLÉž<¤óÂÆàÃtžä^QÈ1A”,eŠl”ÅrÃãàç{ÍG=™­¥ª‰û\¹ó­¤FpgBÚ!dKo5f^·ð»à×$ÐÒõådL”÷üÖ R¨Á—ÑÓ-‰Íæñ؇0Üo©*9EÔ·Õ*ÈRnMIå’WccuIúÃ9qœ'c ÚÍ ÞŸ¡Ÿƒ©)W´âÄYÎ ×æÿïÏ¥Ø(МïRÂ#Â`Å U¬&càð9¸ÿã-n8•1Åyùd¨ %Fb òàÀÇ#عµR¿ †cq.¡€ólšµÄqœ©a4ru¥üíÃaàI•·’ç4yB©–-þ*f…s“ck'Æ0kUôî$©txî‚ ñ-š±ª`€’…tg„A2i¼®¨ ÍPì‡E,¹œcL—µ wÈ”âMlê>”%¬ 3ÄàœêiîðW‚Àpà¼Ì—¸íMŒZ>wÇ)ì]hu𦵱ƒÎ ÐÕyåâTÓ£%3“䃄À éɨ i¿¹lí¼Ù9¸€)B¨, n°XN<œHuèRbðxÔNÒÌ›ŠŒ .j‰ŸÚ–€Û%ÿ1¥äÎüì…cæ;©pŽç9¸H8¿3–‘‰ä´LÔô‹×#CÉ6~—[R0hÎi_MƒS]ÔÒË¥ Oͱ¼Ÿ€Ê MBàdPü1¸¡×8œÐ•f›eö*M*Ý#2‹éá&Ê<ø¨%3“w.«8p vB|ÅÃ%1üÊüç©á«#L€.ÅGÚÛ$…6ÇÄZM‚}*H±dMÒÒ£ŽS‘1¿Jí3ÁÒYö;¹ºp>_¸°²f»ÒŠÐ¾V9–Ý€âQÈ ÐPÁ­’дóÛBà”!YcÙwRI–o½$Ððk6•¤wµ/%¯o²j¸q©HI ¬Ëäâ)|;P™hÜO¦VH!¶vÛÿ’ï³Z8€³¸~ˆ¨Hƒ¢hÅR@¼ÌЈu¼ÕÎÄ)õQœDùmE®våv¨WÂù…¤”ä½Ä²ÛE’c  M¥L÷QÜ>˜¯&¥ûyq§05Ò±$È J¹(g¶¦£¼ùE…êRº€S;h‰f@GS»–P¼ÀJŠM|%ŽSr?(dÈU0>J ý\™ayÏ1„9°ÅÞÙ†aqÐst\DaˆÃwøÇ Cœd3 :ŠUã\–~.²"ûx]„éªÜ>Ç` ,K8q Cµ”•!E¦SœZNu_ñÚ<¯åÆrkBJ`W)7±Юd‡x]€Å‡5P<\k~´T°$±VÀ9¡ññÿ«ä\DÔÀo$ñ„Kî ´÷UúŸÇê6 >æ³’pTˆ%Ñ´A¤øçèþ1)íÌvÑÔð®“K¢õÆÊóÎÃ)p80ç¼Àÿ´(º}ÉH‹m‹¸&;¥v ®¹b=Ö?ïxË#š= ¹bÎ2AnøõDá8K‡­”É`)‘Q¬Ïb¤Ú<ðp% ¨^}\ÒóCC}ûÎ¥Êt—y}>Jˆ¡gPÀB QLpJUçž’µÙ’Áqm‚lh8Õµ5ý½Š“) YfTiÁƒ\—ÎÁ%(ËŽ-ê@2åK[Ò÷6{^ÀÙ=±ˆ´¨­*jIzd üªú ¥'ÈZ‚  F8@*ÿÜ$Kf¿˜b)[~óìHœZ\"Ãl”.S’UB-wÂ% ðjNG)&/Ñ %pú¼Îòº‚¬…€¸76pÜ«Æû °›ŽÕ½É¿i'ŠÑ&%…)k‹Ê Ay‘qÇ=aP¸(_:¾Déy&½Ü© \"v/…™(¿+{.óQËί…<ﺧv"ÆPöÆ-:q—…”,`gGÎ1ï%m–ˆ †¬$M1"°…I•ËYÒñQ¬«Œ&𢯛WÄv'NÙ-B½c¯¦ÉÀÈ…BB»LTÊ®€©ÖН°°bØAù(v½0wÀb¹ìX†)aLÕ‡Ù.‰r(*v-T8Eºcõ»>ÅF‰ª¡ôB‘)Ðô ¤³»ÒBÎ×¥ø–X+¤¯ hè'ú+5X ìKçÈ!vFÜfþy¢ÿ’ÃÂexØ=s'i# ¤üïšAlñ`ÄšeÁ³[ àçëÚ?Í·ŠøpúÊáÔÑÑLâuÿ–9˜%$$|†CÆý)€^…biG$×Õšaw-ÉÜ»0}<îsæh*ñ¥P}lW?ìù ¼ÀŠç£œ é§Á—H5泄NÜ6mÀS½ fNæKb±êÒÆGr¤gPk:]ÏJŠ ð\:ãqx+ׇ#C·"›ôœy§ÒOõ‡xj¨>8ß1ˆÕ¸—ÍQ^U\¾™{ݘù¯kl_M;¢Ð>2qYœP¤SÒ—j2„S| dö<äêךèyÅæèË<+Ù zÊ•TàÕ[~=ÅG(SBÈ[+|‹È-‘ûzwwt(É_ìRa£voª’·›¢Õóu¡>›‚–-È ò&䔨ÌP"v1Í„Ÿ ÉFQ°1s®’Þ"¥®%[¼muðUŒŠ{¬ç7ID€jâ†Ðí›Až\§ÀQ2"~q8ñ‚Å?'‰¥Ó”Ìy/±µ òÄ£ OmÞª8ÑÑ"í†.=~‘¥%jGܹØs„EA2;7zLñ¹V;0RîÐ!euÀJºëkŠ›!L5>^b½&ï¼€ûSŒ Œ½XtÉ @äÌÁttzæT€²z¬h©•Y9ú³ƒ%g_RüZ~—4ÏØZ1úÊõíæt%Ò ¯ßf•¬¹Ë%mE[[•zW dSɪ‘5Úgñà ª±µŽ^½¤‚ :ø×]ê° ³-þ˜£ÆAvtŠ­õÿE…;45AyUpaϵÒ(ˆ†f€|–g”w<á?¦IUüP”c@›Œgt>Šg€< #LÃÁ}ÅÛ–Wnr^©Ø˜‡JU?¡Û)€U„‘`[C¢a!:k¬4¨÷¼ Çkµù>/È/ í#MŽe IDr(£-qÖ¶xd}AÂT2» ] ®@ÍAXÚGü#,ýÆÔÇ~H¤ÀsÆÖ¢d©ŒRÁùÒ1 ÇÀ¢—™/B02¬Z¨> ·ò©BõqÃ…x]! ³¸}¦WŠåv¸frûÎe_ ×çŽ5ØÈ°@ú»óNéÖ#+CÈ­¸áÖv؆spd¤¦œO Ä£l”|Î’`&­§ØÓ=”YÜ¡´=²‹pZÝ Ï×VWÈr%¼¬„¯B™ýEYn‹ûa÷$`ÇDÌ«8X¿~u!™¦(ls'«˜mMó ý)Ne¦HS—)„:×JÀBn!ÔUùÏ¡¯¼jmt©²`¬Æ²/ð²¤7Áå-yKR¹d¥„\ù:§,V—2^½£Î1xÛ°{É#Cq”¦ ;ghˆóQ\W\jL·½<Âó{œLè«Ý²¢@QT|ÙAþDÉ4”¢6 *¡Ý‹ˆ @½+õ‚B)ÑȉE\ªuF‰µ’Ó'¹%À„£éLßÙþ•”0ª6Ó¾þ.ië;M-9Â*ÝBµ¬’Ëz×îIp‰yÀì´uñk hiI,•Òð!>;RT|^­÷ŠÕ•1aö¡úÌ[l"„Áa®ß•Á|àKÂEf"œõBïXôé‚uJûN*,¡x 2R#TFiMÒ®¤¿s Á{z7€\Í1Ï;¨oG' Ç’³«ûbé’’¥ç©H\Ô'‡7ÞJé© Báw5¡y¾.ƒ…ŒGí¯ü”¯ZéÍPûÖr°4+ M­nBÒFŒÁÁ…Ê´Šbru¡ŸÒû“[Y[Íñæ«\ ïÔïʰ‚c„ˆB«½ÙùV ôòŠc ô»:œw ©5%  â>éç,'¢Ô«ÉñžNç¢2rkCeH(p8ãQ0ܪ±=ÅsF¤„Ó dJÃÅîf¥;¾\Q2¤Dúå¢ÉÏÁå¯VÿCÙMùÚ ™ÒY­5n\á^-¨ç!KŸzçå~˹íÆ©•ž´"çiöէ༰‚ï… „n§–xRñºë;[ܲsŒÅ‰Îà ï£`e¸µÄ%‚H¥±ûö?Jè×&)*ˆ ­Pú_ApÕç¢t¦„¼ºïƒÏMSó(Â?Ç *Úˆ Ž€tîpû¤‹K7Ýîl°kÅ}•mPø+P ·]²&£î›e,”…|ê’@C/T_MâêG’ªOÊø€ç<µ¢ç¥¦šø¸£¸È»UP있† )íV/ú@T)ûÇ!„âQ§^wq¢V–ì,d€ n»ãóÐôGaáÂW=U/Rd§–bìã­€‰÷:gŽñͰÂ:ëH6Ìóy~E’N‘DDX)¢ÙŸí*}îàö%Ãd¨ç(kµ:Ê6¾ VÃÖ"jŒG0Sgƒ8jŒŠ¬Ô˜9àkSëƒ#á:bkW™®Sx®.Fµþ9/ ¼ZcÙÅá*²þ¬E4J¹Ä¤b‚[‡3þK\)íxE±$P»„±X]‰ÃøÚ8µ’eZsgkK¢œF(+ùô\+u¹?ç”' ÇœãKÂ7 ’ ä‚ú¤k”È(X`Ï‹ãÎvÎH¹ç`mI9W <ïXÝôS·ïÜÚTOTöCâþ¸1Áõ©Ý™{ØÁÕKîˆÃ ¹b:K‚€KÉýPUB–sÎ-¹8«o¬U ÞsáJ¿>õŸÌpLP­Aí0aøbH‰Ê@»%Å|š{n±>7ÊgpÖ§8Ó2,e ÜPb^lTù¢çîQPð.‹ccuFê‡×íšÉáprgBÐ`• ׊ÀÇ«bXÃâQ^Á­s­öw6&\|^®Nd‰Ð“ÛñÂ2“½)¬¿kíÉ9¸ƒ)\S0õN] Ô·‚êœýóQPÉÒX‰Kà«òm§ÝvÈûóŽÝ@µDÅj×·bÏ;(fK²ãƒ¥“§¯¸rãbÙTŠ?T8Ed¦¸Üĉ2HViuWZK)]µ|ˆ{Ú¾€;eiú‹…\ç ÂµÜÆ®$žèª¦¹èvò>‰ìçëòÏWùb 5+ù ‚N+úsÞÜùêmØZÙÊucÙ}id eiW±”+¦¥¤¤­´Ê/m”$Âû¬6×L÷y‡ý¹\H'¼ZIcß-Þ‚\i¬Ø#¨ +D£÷*qÎU5²X¶–Žo›ƒï~5 ø’.Ñ&îÐ!~}s*¥»[z4îE—™ïo<µ>ØÁ H¹Zí…›ûªÆ¤¸¯¾%\[ì0ÀB1sÝáL2GYØÁPK«_Í<ª¸áXÑÂl­©*á¹TjeJ²Ñîüš„rÜâ¨1*£IZÊÿþ$cŒ±êEçJ–Å.-,%vWxjþüŠBž;¸õÕ(ŽT¯ˆ°òuâcŠA±.J„§z> ˜_&:/lÛ\¢¯’\ 3!$«±¤!‚ÚS’j 8t’ƒ;OÕŠ.•ÂB¾¹0`u°TñÄ9 $„ñâPú¡dœX/\XƒÝRª8 v¼Ô`9júžÇZq¯V€ ×J-`ÉB²ÌQÌœ[YÛÍ›EM¿æàÜNÆI/ù»j9VþNÊ•‚¼2A0‰û!‡é]P†Xji½AF°AïXYU±$»¼¾Òm(ºÒˆi§½Ð¥ÞUë]0œ|;½&ã|˜÷ú,óù(üf"œñvÁß0,Î8”QB¿\µb竪áœo DW:ŒðìIn-›SR)€E{§¹£uK¯ûýuàòÁ2Ù¥’šã|ð $Єˆâwå`GQç¯Â¤jEÄñ #µ™¿¤ÌšØZSíK¨×ý½¢òQ›_{½®¨ë›l\ÇÀxp' Ȫ¹¯¬øT2Ö¶È.ñÑ,nÁ‚§8¼®ôÅç”7‡S6#Ï(–Äÿ¸bX`äbRÿöyÞVEG÷”¶Jbjr‹%Ï»xô%ÿ<¬wL=@X5`Å£Bàœr›ÂÏ(‰rÒË¥F„êÃv‡@áø.ýtK0 ãU3Rä4JdiÿJ¡ç®%/d¿* ¸ûL”RD.ƒÃ¶'juC!;œLQØóMö—ªN‡%‰EäŽñ'@òQÙÚbXµH‰áÈbq„ôT;•†Rb¥Øag…×îb8¯ÒdÑ_ÚþDÄô1;_W.Cí_‚ÞQêÕ'>ÖGçòQ;Ë"ÖJ–%k3·NHÓ „ôôÿ.T¼Tê„ÕFIJ-ªv Î'"í¡vƒúQL9A9÷…*Fjùüz98¢ƒ¥é:¬„¸`†]lªO¤Ú…Œ%òV¡Ûeõ‰6”8§¡Ë§¨˜:f"–D„~ui:—DkèµH Ä[‹*:±œDÁ:.–Ý·Lã G2âJpr7å) ‹¯ð­¯tŸó dчˆn·oˆï¼CL¦ô€pÔÖ×Ix,囓D‡‹È}•Ñ'Ê©EH—àËn1\âƒôUéê¨æn¹?çëòíÖ÷„Î 3J:´¨b.o’c bk÷é(M(¡pÁ—8Qx>y^E—h6[Ú­ð„õu.öƒÝ,=Ï4þ-ì‡BÄÒ²B¤ºšTBÍ.e‚Žs)ôô²«Ïfap»†HŽ„’—€Á½î/A”lCð_˜بÝò¨|J„–†b?à¬A)¨ '^—Wkµ°Ð<ª¤Ce«§ez,šß”¼WyN5ƒNÇŸ÷±¶PÊ[kÇw=<$ņ¦VÐÄg©º„;ZâÎ\ÞR•¢I²ÐlI ]ß*h««J+û·%˺Z[•ÞÝÊêKX+µEõ}˜mÕµù•SËLL* ËꞘJƒ¼L½‘O±jªV‰DÚsS,Q=ÒdÿcûQñº,s•D¸r}Ïô\¹˜¤´x”y“ÅÐíà¿ØOœ( n+ÎÞ‡óS©{3‰ »ø¤|Å!ËLÄë2ÁªÃFInY™Å)>âÎ…ÅYýy«peDÕ´+-Ù" gñ ?¥ÇQÛß´*i »3n©–UC'3£ÐTºï”sÁ‰Óa?$2±µ4Â-ÎÊÚÞ˜‡ná q5JŸö)'JÎ}iC­¤Ìð?6³ö;•S«­º”€„ÚŽ”@®@ão4O0.,§¨~‘öÝö§a@‚w"НD5†ÓàÌ.{Ê®³•7y^ÀDA ±ìÜW:±DLp,5sY÷B¤¨w^ߪÎÁúÒYõæ ì„Ä"Ú‹JK)\ÝëÏ1h]ç°düb e!n·zM%VS’ÒE©«E—Ê›h ØÚ¥ ^äXr`Þk·jãQzaR ‡L”ö´R {–z±‰±")> WÙÚݦXN‡s}>÷4˜þ) Zކ‰¢uuhŸýa—òV;A°4 ”Õ'tŒRúʇ —ÁKXËÜ•°Û±æ\D3))‚»jbÊÓÏ;¤-¶¡Âu¬Ï(µÈ´ØZ‘Ã\Ý™Xèspâ©ÕuÜ¡dC4µ0Â"Û…š4o¾AȼúžžƒcK¨äB4ÐÒ\]Á£(t´\çZ¶©{©¯å\A¯!%ÂN+=â|]º‡Ù.œ ÍPú½þ­_k±£J±ðÔt¨¦aÕ¬­ ]Q0@ÁíöO!BœuâÌÄž+WñùªñÂQŒGíÓâs2DàvØZ.Ÿ$åÐ »L‘vµö¼–¥­O}œ%#…§Z|N%S*xÞ¡Ý#ôèUN*' ¿r—ËgçÉájƒŸšÁ+ÝHô Ó§¼.J¯ˆ(>Q©Gèv.2õçƒ9_ ñ™º³y§òaBÕ”e±ü‰R±Oyiˆ®Š•Í•,‰?× •tóÐÛW¼íõ©¤´ÒêŠRÐ /•TGwJ¹„Ïv“PP  düšwù\;Õ*¿¤ð¢Ë æá¤`lmœ¨]à2pâ\DT¦¼ÔPú›C.,§°ÈúŒãù¨Ý¦¤4¢E)Ì œ?þGœÚýµ‚’"8©eóÿ¥R‹ö•}¾³½|¯ó‚/`ÔOúî¾_%¡‰‘@™†\¡¯ØZþ ª8„—è“A%0(´ú|áàl €ÏR:ÐðÿÙÚ8œú¶É´ˆ×íäÝ‡Ò—î§æ0¤d}öh&Ž §;k%Šl.°€wkŠ©äŸ3ïòÑYn K*œžf$ãu%Éy³Ø¨Í'f:Åž^¥Ð‰4n(HŸó³œŸwˆ›K nÇ‘€¡dvP¶Ô,Æ‘{ŽáÐ`Ãc?Ôpc­Xÿ•n”*ƒŠ÷=ç±`W ××J$^F ÊÚ¥åJÚô3|êù(Ù"Tl9jr'¹î¼ÃFY«¢ƒKJ& ÿ_Œ%Þj[ÁÒ¯m(]5ÔfŠâp*á_ Tr­„-ÊQÏëW”(%S ã%äg(¡-k[•Ñp¼¢ØóÕÇb.²d;\ îlHu(,§¶&å;¼N cÀ¡S(2ì.ö£äÈU/Ž»þs"3ñºŒ°÷ ¹²äR¹beé‹ÊÄÅ?*¬Ýv© —"_ò©W“ÝVô…—ZéI„!ŽØ ù•Zd®É”þ%Ø_ª‡Óë–D9‰Cå›H08Ú»ØA¶¹@÷WÙ‹0¬ï·ÍjÅq¦*k€”eêC…sàV‡ÑT,TIÆãPK=™s1pÂ!W)T@Ø(h—`‡øèçè”À!öªäL ƒDžãQ;7ºô*V´‰=¯ ü°b5E⃗ì,‡SŽPùxîê¤;»ÂÀ¦übu%Më÷Zˆø"PØÁÉe˜)Ʋk.ˆ.’ÇYúðÔVJSÚóíIJ;ÂN…\¶ˆ¥oíÈgèÒ÷C}‚ˆT,»¯y­4ó­ÖgÔ箢ôU–|•z–=î0ouBФk!¢>ÔDzۦ(O8ȳ-}X”y ›†n_ŸàlgP,\)bHâR{s! ï‹`ÜcŒ]1Z¤„‚A–n=òE ™¹Ê“f³B‹ò»À’ï!—€‚e¸x®}Ê<î\]ß®eÏK´#S(‹­^KÌ‹@Ë“ aXUÅ#'1A<ªxQLpãÄBË Ó* L‘FšõK˜€„t(2E…Õ•QšÍЇ”à ŒQ’[œ’è°ùNé¹ìÊW‡ãó‚c°òÛÎ ;Š\€°VÁ>DÎcV õ|”åºe£µòU+l°ºC€þ E&hac£xεÊTcRdWYHùLÔN¿˜Üs‚º#FB_ñ›¥y„´£–Wû|”ì+|Fè+_1³'Uðø(A¬îΟ«ŸvY\TÊ•àŽUrîèÝR+à _”Û9Уfª>—ZŠO@œa±R›J¤ˆT—2(Ë.Fâ³s£Ë7¬îêSp¾ZÏð!p\Q{^b©rûKÿ+íÀЬáAîÏ› &;_:¹¹$r G9€m\jì Î’­óáÛ8Ž{ ðÈh„úJ(J,ýÎg¬¿vÌ$WàŠ£¶šå4h­VaÚ9AºÊ×e Òç­•ŒFqjÉõ¡Eù7[ì eêc N5ï.|Î4Ðíº~¬–„íD-65¥D¯žÒuHöƒ8gÉDô*@G „N\QцKœY­|»ÎÔܽ¤‘ìn¬…b7Kñ‰¸˜±…÷ õ*£wHòóŠãÌhצUëƒNHjj¾Á„˜ÓÜ!'KMû´Çä´ç…–Í +,ÎÇîÒ<Ôç£ðD2ÜJj„~$¥mŒÝSþa@ËN7.AMÖµ.Ìîð¤Z2ïÒ6åêÇÁQl$Ó» }Ü]ÑW²?¹…¡WöW Wú¹Êr‰®-Ø´µÂç÷Æ–>wz„4à ŽAµL¡&éÐÒ8Ž>¬”–͵,Î(¯¨4åѱW|Hžv­íC‘’P}tPc,ûî<\Zæ9Ì0ŠIE‹ \Kñ¡G‹å¤òáÄ8œè AÊëb~J@zÇ j+-Ÿ+uw˜s,KÉ0•Ì]dW3Ôõ=ˆs‚”%ššµY¸ú¼cs}åœk?…b Ûœe êù¦7ý’(£R,vPMé`¶?+UòÈôÊX݇Él5Sª—ׇ¨~+W­„°¢ë#ç"&õsp«ý-YL“º[ó†fðbNr(ýKŠ0È¿v@cÑ«iNÚúÁõŸã„Àý÷Ç_~xûõùœ—ï~ùªüÖþïËÿýþüíÝùÿŸ?|þðþüá?Îþ|þðcy•*¿ý¡üöÏñBú"Öàûù1áOç­ÿóÿ?|ùéÓçïþOÿÿPK!Á5¡Üîsxl/worksheets/sheet3.xml¬}[¯Ç­åûó=ÆŸú~lÚ{ë`3ÈeÈ›"˱Ë2$ÅNæ×Ïê꺒ÕüHtï\œØ¬êÚK,öj‹ëÛÿçÇŸžýúþó—Ÿ~þîy{kž?{ÿó»Oßøùoß=ÿóŸž¾Yž?ûòõíÏß¿ýéÓÏï¿{þ¯÷_žÿû«ÿþß¾ýíÓç¿ùñýû¯Ï0ÃÏ_¾{þãׯ¿¼|ñâË»ß|ûåöé—÷?ãŸüðéóÇ·_ñ?ÿíÅ—_>¿û½ôñ§]ÓL/>¾ýðóó}†—Ÿ5s|úá‡ïÞ?|z÷ïþºOòùýOo¿bý_~üðË—0ÛÇwšé>¾ýü÷üòÍ»OÁýðÓ‡¯ÿr“>öñÝËÿüÛÏŸ>¿ýëOø½ÿÙoß…¹ÝÿaÓüðîó§/Ÿ~øzÃt/ö…òßy}±¾ÀL¯¾ýþ~ƒ ögŸßÿðÝó×ÓË7Kß/Ï_¼úÖAô>¼ÿíKö¿Ÿ}}û×?¾ÿéý»¯ï¿ÇŸÔógÿïÓ§|÷v[Ý2fÿ÷÷ä?ísûSúë§Oß&ûO k¶é_°ùŸÜŸÒÿþüìû÷?¼ýÇO_ÿðé·ÿxÿáo?~Ń0µû}_~ÿ¯‡÷_ÞuLsëÆm¦wŸ~ÂñßÏ>~€ûô@íí?Ý_ûðý׿{>t·vh&X?{÷/_?}ü¿ûßoýè}ÜàÇá¯~\Û=ö×÷_¾>}Ø– ÆÔî¡økÜÞæ¶YûK9Éä'Á_ý$ëmèÆyiëK±ÿæȇ·_ß¾úöó§ßžÁƒ1Á—_Þnû¡9!È6Û×›±ûõðK~Küúªm¾}ñ+þ„Þy“‡ŠI[šîÖ$Ô•Â„Çøå…¤ÝÅ)È›lžÚTÛ;Ó€Üf]CnÇÊmá-èWɃ{ʆÑöúß¼ãÑÿ²Óžâ(¿ Ó0lÞú´Y+` ðzƒïеӒ¶qƒGo^`D^„OqJ#¿ÚÓi0Ú¬QîÒîãF]7M휶¡ Þ¼Àˆl¹§8¥€‘_íiŒÀ mÖ÷1È/ý°Ñë̺y\úšò60dž§8Œ_âi`L·õÌÒ1šeŸ;£vÖ ÷¡ŒÚ‹gó:ÍÛ·GàŠ4@ódtOùtœRÀè¢tto¢ÓÎZ¥Ó~\üÈ»¡™ÓG>ý4óæÅ£d:NyŒQXíY Ô›¸´³V`D¹´_bkÓÍkú6£/1o^`D¹tœRÀÈÀ¥¥“žÞD¥µ#J¥ý¸ˆÑ€/Ž6}—Ñl¬7/0¢T:NyªÃjOoô&.í¬ Q.íǺ¶æ&ËY“€äÍ (—ŽS ¸´ø>ëMdÚY+@¢dÚ‹_®c;¶Kzé3OÚùp¥ÕqJa·]D«{­vÖ÷1ê(­öã"F˲ŽBjÖ›QZ§0ºˆV÷&Zí¬QZíÇŒ–auœS³Þ<Çh ;N)`tÁîMÛY+0¢Û‹-ó’g‰hÄ›Q‚§02lñÍfâ×(ìÒœu”iûq‘! ë2,ãaÄ›Q¦§0ºˆi÷&¦í¬~D™¶™v?·Ó8cÄ™ö@™vœRÀè"¦=˜˜¶³V`D™¶1Z¦©S¹}¯yóÂ(ÓŽS¿üÃjO3¤ÁDµµ$Jµý¸H#—q„—¿7/@¢T;NyìHaµg?GÕvÖ Œ(Õöãâ§?ŠÎúŽ¹Ïž/¡;N$ sQIÈ`â×ÎZ å×~\úàÇû¾kóEÞ¼Àˆòë8¥€ÑE¹êÁD¯µ#J¯ý¸ˆQ;/ýœ>ÔhNÍ›Qz§0ºˆ^&zí¬ïcÔRzíÇņ¤cË2²Þ¨@†’ê8‘€ÌE¤z0‘jg­@†’j?.~x ݲ ù|ožc4RR§0ºˆT&Rí¬QRíÇEÂØ4ø6;®aôæF”TÇ)…½T‹_ùƒ‰U;kH”Uûqé ¶oqŽ#Í©yó$ʪ㔂#]Ī«vÖ Œ(«öãF#û.}ÁÒ,o^`DYuœRÀè"V=šXµ³V`DYµýE3Ýšüˆ {ó#ʪã”Ç…Õž%Œ£‰T;kF”Tûq£~ž×fŒ´ˆ5zó#Jªã”Få¯G©vÖ Œ(©öãâ^ë–fÌî-PzíÍ Œ(½ŽS ]D¯G½vÖ Œ(½öãuìœçǘÍ0Úyq¥×qJ£‹èõh¢×ÎZ¥×~\FQÁÏá9ë‘’ê8‘€ÌE¤z4‘jg}™†’j?.Ò¢©i§õø4Ö›ÞCéuœRÀè"z=šèµ³V`Déµ0êq¯Ëè5{›í¼8Çh¢ô:N)`t½MôÚY+0¢ôÚ ucÓ®Cv펢yó#J¯ã”Fz-å¬G»vÖ Œ(»öãâÛl‡9+þd~Ä«ChùÚSœRÀè"v=𨵳V`DÙµ#u¿"g’E”]{óÂ(»ŽS ]Ä®'»vÖ Œ(»öãFóŠYpÇðC™£7/0¢ì:NyŒQXíYv=™Øµ³V`DÙµ÷ÚÔ÷8C;L:zó#Ê®ã”F±ëÉÄ®µ#Ê®ý¸èG8«^²{hôkß›Qv§0ºˆ]O&ví¬QvíÇŒ–aÇŒÑJ,o^`DÙuœò8mV{ú|h2Ñkg­‰5c(/4âF~7Ì}8½ž(½ö ÀŸlìP@oÚ‡5žC&z=©®1âl•¶©(¯1®Û»lNïé'ˆLá>”^{£‹èõd¢×Îú®÷L+¥×~\J„¬È§¥Ûzô•ïÍsŒfJ¯ã”Â3Ðk13;™øµ³V€Dùµ¿Ópv/|xó$ʯã”Âf»ˆ_O&~í¬Q~íÇEî8YÎ Ú†óë™5ˆÙmÄÍv¿žLüÚY+0¢üÚ‹›­™‡u³ñ‡bÄkBfʯã”Âf»ê6£ë;£nbଠQ‚íÇEÚ®ë‡T\DßlÞ¼Øl”`Ç)7[XíÙ7Ûl"ØÎZ%Ø~ÜŽÑt››iÅ¿ÃÏÈo|úJ”bÇI”îQl×5ìÍܾ|Óº S´8A¥²KQ[¶)’R³‰Š;kš”Šûq‘fâBÄ<¥4å Þ¼À’Rñ8¥€¥†Šw[G¹m‘k%£ß•ªÖ"ÓJ©¸{Jj-‚›5ÍØ%.Eû7/0¢T؉´—XIÐǧqÝñ•Zÿô:JÕ½MþfdÍÄ4™pH±¶†u†ÎjWwýy~}…Ê‘…ru÷”¬uMß´h”Slî)@¢\=N)ø—†«küËÄÕg©ûH†åê~\L ·Ú¸¦‹I #ž _(WS i¸º#UŸ=ùe{pëÐ’aÄ÷íãF}‹CKpõðCk¹ücr?Z(U÷6 «Ùƒ#UŸ¥òí #JÕý¸HÕqV0.4™â d(A Þ£!èdL}–ŽdÈP‚îÇ^Õ¢ãH“øy¥áˆP D)zœT@ICÑ(-¦¸³>âKJ”¡ûq1õÝ‚®¤‡{Ì›Q†§<Æ(¬öì[L ÝY+0¢ ÝÛ1ênëÒ'ˆ8C÷ ”(C“ (i’àO21ïEê6’yeÞ~\ô¤oKÊ>ÑÃo^`D™wœRÀè"潘’àÎZáI”yûq1ù´4`Ç=ǼyeÞqJ£‹˜÷bbÞÎZ¥Ø~\ü‚›¦iÒ× =ÜõæF”bÇ)Œ [úÊÝešñêöL¶{JbØHL(Ÿ<¼úïÍ Œ(ÃŽS ]İÃvÖ÷ýh¦ Û ~´â~äÜ$?¢—ÿ¼yŽýú{ŠS ]İÃvÖ Œ(ÃöãFÝÒŽ í ùè d(¯Ž Èø¯€Óï|¯^t¼z¦¼Ú‹o³fç)U¹3ïá)ð•2ì8¥€ÑE {11lg­ðʰý¸€Ñˆî«m•þè :N$ s«^M¬ÚY+¡¬Ú Èà 66 e@Þ¨@†ré8Ñ12ag÷ÕjâÒÎZ åÒ~\d@íŒoúãÜ£7/0¢L:N)`t“^MLÚY+0¢LÚ ß¸|z¹óŽ¢~@åÒqR¥‹¸ôjâÒÎZåÒ~\ŒÐš¢V2üÐíÍ Œ(—ŽS ]Ä¥W—vÖ Œ(—öã²o²®®Øxó#ʥ㔠#š®«ÕD$1]½šÈ´³¾ÒDÉ´AZ‡aîÒ!%s$ž®¦'âOqJÁ‘."Ó«‰L;kF”Lûq#\©E}Ûñ=$ož;JO‰HœSé"6½šØ´³V€DÙ´ßmÓ² #ýrõæ%H”XÇ9."Ö«‰X;kH”Xûqñó~ìq2fNd!A æ~>î„ÓzûÒ«3W)C^ÅÌÚ^®q—¡¼Š1ó¨ó¸+hÎCßfúH ­|C“nç %TŒ™kÔ#Ã’Ï{•™{ÕÆ»P1fN$¡üõ¶ì‰V8zË8ºFD2,ù•£{9Ç{Pq9ÉBO²½m‘ª«\Rikš’´!ÄkõÎô棧 ÁF•h¹£ük#碲dª„ãÊ’DZr]çe\RJ¤*4‹KjÔ%Ã’Ï»“¦‹“T4eÞ…ɹ_@<Å'‚}Ï;FÓ5"“aÉ硲ÑtQg2ƒŠÑôBh²¹áfx›ßc9o_BÅhzEi’ª«hºÓkÔK'‹Z“T4}Žó„Bô¶Ð²‚¿£ÆÍ+“Ÿ«¸¹Mc$BÏ÷ ÆÍ •Éæ6á]7g%Í,@UD&‘;¦é»ŠÌ$ƒJ¥3©ÉšÛt&[Qh2ƒŠqs¢49l1©>ž§\*R“-m_ µòw‹)—°äÓÊ)2êw(7™AŸ9Ñ›l{0óUøŒ©N¢:yÕÎàe¨®ÊšÛD'[Qu2ƒŠqs";‰W¤ßŽÏÓÃÊXŸ¹By2.ù¼WÙ¸¹(>™AŸ9QŸÄñ^7 YV˜~ÆT„(ÛŽqs…%"ÜEy›%Â…*¬35Ê00&òºuÁ§ÊqÊ¥¢G‰ N¶9Gçaýªü¹M“áBËŸUÊužV´J ªPt¦P–#Ǫ‹jZZ›Hån~?=Ü3ŠNe*›¦ï3Ñ â áAE¬êE¯(Ur¯º*“î´ o@]Ñ8S­Dœ)x粵ϾfØ»·/¡b]¡\ž|¾Á¦]‰p¡Û€Œ¢õÊ­œ ½v{ï…•P1¶®°ŒK>ý´IX¶¢†ezöŒ­Ëv++›ŽÅÎÃJ¨[WèXÆ%Ÿ‡ÊVã"JYfP1¶N´,—·ê‡”y¡%ø`]<‘׳LºBÎ2Ìt~Ú-[QÑ2ƒŠ±u&iÙC¯‰}ùU”,[÷žÂ"Ä÷žJÌRóåg³lE5Ë ÆÑ‰œe¿,Tö(ݬ¨X¢¡åPKö¶ =¿ÙlÌ\T²ÌbÌœHYâ4u1çPU²æ=cæ 5˽¸Ìy¨lYsQÐ2AÅ-ñ)\ƒiíqs|9:Ø—!œ1s…¨e˜éª½ÍìÐçÉÒ¢)Ç@ú<áŸê=!>˜ãEÌ TÆá‰&4B»^5Ø×õÝóT&‚¬¤~<ÁFö¿aï÷$IØ„0÷VE÷I|ÇH<‘ÂÄjˆ>¥¾Wwê]bÅH¼B 3.YÜ«+éfuëd%õ$þPÓ9<º>-/_w®ö?Âá±Ò¼÷SÊÜJŠ nܯY}?Ç_ mÆîj™áÉ*“1´ÕɈ‚™ãîßèE󛨅E¼ë r ÂzxA=Ø—îÆØ½B43Ìt*›lf+êffP1vO„3ûnhGé󺢜‰’[J8*Ú™Œp¨Ä35;Ó&žÙŠê™TŒÝSùÌ~Âg£P}UÑÏ„ ƒJ‘‹WIhª ²U°‹"šTŒÝMlRœ%1væíË Èrñ IMD8EÖT•­NFTÕÌ b<ŸÈjv}‡Ú+VJ[QÓÄ €ùÒ^C#~……ž~!Ú5$„TMãùDS×#ç)+g` ÀЍfK_ŸÂrd¨4x•/Ùx¾¨¬™ bÊšˆ.Å{§_h¨‘¶£•M¼(™W)2ðaÉç½ÊÆÞE©Í *ÆÞ‰Ö&4ÐÅæ¸?K[ÛD·•¢–=,ù¥Y¨TœšmgSàDÐAŘ9Õà| ù­ŠgKo[*3K>ïU6f.*qfÛŽ1s"ʼn›|ýÌz¡¨LŒŒ+48ÃLç?ˆm*œ:_b|œèpâ‹d„‚o_n;ÆÌRœqÉç}É–Õ83_b̼ãœn ^ñ‡÷ @€¯øËÁ+Ô9ÃLø•›‹ ,&ЉøRps|æ5S˼*œ¸ùMßw iÎð¼ ²1rQ3ˆ1òBž³½¸[3·5ªÔÂ0aÎV¡Ìl.€ÈÆÄEqÎ "ÆÄ‰:ç´ô}—• QAô½çÛmbL¼"ÐÉnA„%kb“|ä`ÓèD2RÇFʼnJ'¢ø4gw%9}ªPq¦Ó–#~µ„%Ÿã6*.jufnŨ8ëıTŽÅ:*nÅH¹B¯3Ìt~Ú;[Q²3ƒŠ¥Ë‰f'jaš%?u¦çóÑÎvbér…lg\òi¯² wâÖ¬n2RN¤;Q¥»Ê ŸJÌÄrä ÉθÎóøØ˜¸¨Ú™¹câD¶sÁå#Ôa·›¨èv"­N©B¹'få lÚ­(Þ™AÅ89QïDÓò~Km†–®Èw¶ãäOvH¥RðÔ| Û<#t»Žqò(½¹ßP^QÓàßá‡No_|¾0=ϰñµ§RôTAec䢦gô*|—”[å‚Ô%#çì¥×4Ü«vû*ÆÍºžáɼölÜ\”öÌ bÜœj{NÝ—€²Ê⊸'Zí²X¥È–‡%Ÿë6Ž. |fP1ŽN>‘…Ba#cæaO|í0€9ò°ÐóÙr䢺g#æDÞsFà ¤61¨Ðq&ë žê·°Í =Ž‹Òž@ŒŽmOôx™æ¬w;ÅóöE\bêžè}¢€Js“TÂmúž š·j©i' ŸÝ¸ŒÓ’:'°:ƒŠÄg;3:®ùŒK>íU6™O TŒŽBŸÍ eé3ŽÒ‰AEç™h„R(}Æ%Ÿ‡ÊÆÌEÏl2fNT<{ì”Ew¤ªÈx¶4ä?µ !Ï`sžؤ<[/ YïÇ‘AŘy!æ9ÜæyhÛ¾’´«¨x¶3cä ϸÔóÞdË’Jyn¨2ˆ# ›;#Ö~ACÝã—ŠjgKåeàMû‚ÈÈÃ’ÏCecä^.óž71åNÄ—‚‘#aö” b/Þ¾|ó1F®Pï O¾`ãÙ¹(à™¼jaŒœ(x¢ÒÙÂmwo_@Å4<µI`©à°äó©`§u©/©…<3¬%²›ûѪ2oÆÈRÁ)Ï–iy"|Ý'T*5O¡²‘sQÏ3ƒŠ‘s"è‰Ã…yî…¤TEÛ³]X‹BÝ!”É4x•t…4ƒŠÑôBá³¹è”.ÄõJÖœj¥"®+hzÐ$=×m"ŸøQqOZNð†R0Œ+=[y Veˆbä\¡ïz ÛÅQQâ3ó%FÎ OøÒ¦Ì˜•–³¯ãŠÄg»0r®ùD\»hÛ9µLý¶u>3¨9'BŸ æhp–¶ã¥Ïvais…Ö'âÚUPÙJËE¹Ï *FΉÞ'ºÈƒ{¦²(Vd^ülFÒ’ŸmXòù h#é¢êg#éDö³C½o—µN`9—Šî'ªóè×±Bù³ K>•¤{ÅÍ{$‰"Δ$½Aok\„9,®È¶”ú?¥Y…L^Xòy¨l$]ÔM^Å4@g ¨:ÐÔ¹ñUT@Ñdy•"m–|*[Ú\”Í bh¶8ršhá(B¥ eeis…h˜éüŸÓÕ4¼÷Tõ,ìĪlî2O=:D ¥åÞ¾`SL4Í*m»«˜¹MABE7iRP•×?]ò®Kg ü½Waæ+«gQÈ„Æ%ŸÞv6¡P T,N¤BÜÔÃÁúqª³¢Š;4B)tCã’ÏCeãè¢th¡G§Ú¡PÅM´ãzE<´]GWȇ¢‡ÓEÄÓ& ŠžH:¯b½ÅçLƒ{´¾þ1L_F(ÆÌÊ¡q¡ç}ÉÆÌEñÐÌ—3'ê¡ë¸LÄ:ÎTäCÛ•1s…€h–|*35D3¨3'"¢h©?®ô£¾T),_W¨‡†™.h®aÓElPí6& F1žy™;ä‘â=Z÷*÷Ëš+DDã’Ï;“‹:¢É™hÓCK„D·kéMÂ¾ãµæàìu§ äaÉ硲rQM4ƒŠr"'ÚMè§ rp¨5SÑEžA¥Hš‡%Ÿ‡Ê–45E3¨XÒœˆŠ¢'îð³œ]EK± EEKXèy€l-¢žhK•‚¢Í­G[XÞë­""ÚQE•'ä„uâã›N­ëË7ø³Â„8ÂhÓ©uÕ7BPÀ,ê¯ÀÝü¨‘R†$åëa`̤¯X?ê†b}°Ïc=Z§K³Æ%‹N7íMy¤&@{Ó#Tº‚&8º?'õKšô¶YÓk‘žúû*Ê×Ó¬T¾®‚ÊTð‚hrÀ öžSøçè9åêSáï3ü¿MÖsj¤G2aÆH-ú/KZ̬Jä(‘OsIÈiRì*äLDqFà^sè45Ò €BÇ/…ÂXti<|Kû*JäÓ¬T~Éç÷£‰È#zè ¢D> ¾4Lý„3t*N黆Rú4«•¦‹Ê«L)öÎ —EùäUL‰4 Œ:]?£_ˆò¼2Ú,Êßïã—|Þ«LŒwT^5Ò:˜00¾·+~Óq­^°/6 Ó$M³J^å—|*£Gݦ*ÊèÃÀäU艇®óGŒ>Ø—PQFŸf• òK>•‰Ñ#\è ¢Œ> PýØLK¢Yü ȫջ–rû4«•&Ù®ŠU&np¡ƒŠrû00†õf˜Ðƒ_ˆU<ÙÞÑ{ðOiV *Mµºª-×c ïÎ\Öy÷Të”]Íbê‘·/7 #ïqVª°äÓЦIÚyÐú!sö¤Éö00@…NêøÌ9Î>û*FÞš¤qÉ硲‘wQ“4ƒŠ&ÛgüñNAÑÑ@Ñ2˜`UÄ8ºB‰4Ì$'HUÛÎÆÑE%Ò šlGt)šÇ©™3µ#zy-Ø—P1Ž®P" 3]•£‹J¤TŒ£%Ò"qmû˜"T”H»–qt…) ng\*¯²qtQ‰4AÅ”HÑS¸ð*t¾ióFôêQ°/½Šqt…"i˜IåUb/äsm/>IgФûsR*féVèÑ^Áª@ˆé¦¹¤×ÝUÔÜ©têsU¢iæLŒšRkEŒûŽñMo_BŨ¹B‡EWí;5uH3¨5':¤¨ÿì×þ¸?‘ûK¨5W膙.ˆæ6j.êfP1jNtHq߯ipz~¸WU¨yGë`:…$i°9•M’E>ª¯Ú°ü! ŒÚuóÒÍCúŠaPU$I;&Išfb•J’Tóâ³I’v¢$iæUŒš’¤ó –1Õ_Oüò_xT¹9Wˆ’ÆEŸ&ç6QRmêüŠ‘s*J:¸'’’žô0<¨„ŠÑô8«äWW¥Òm¢¤(Jšù£éD”t\‘nSÒ“Ñto_BÅhºB”4.ù¼WÙhº(JšAÅh:%…j9D•™*ï@FÓ¢¤a¦ »¦‹¢¤ *&JŠ®ÂMï¦_ÇŒzV¤HAæi=Î%m;_ÅsÞ—lÜ\”"Íb t"E Bˆ^èÇI;o_l;&E¬¤ëÉÁæ_Ú8¬ž¥{íÏ{I)&EÚR¤Ý ½ß†>;뫽ùvv]‚ÅxºBŒ4<û°l<ݫދñt"F:vð*ÔG]é*b¤ÐÂ`[ð~yL˜é¨l<]#Ͷ ãéDŒtÄñ¢y„ŠU*xûÒ«OWˆ‘"Æ]ôõg#EÓRŸbb¤a`,HÆy¡užÁªˆ%Τq¡§Ã¹ñÔÇ(Q‚4ó%ÆÎ‰i?Ï#J„¯A²ŽS&A¬Äp–|*[â\” Í bܼ o ØÆJïD¡ DŒ“ÇÙr !Õ|ëÙDH;Q„4ƒˆqr"B í,"¤|0û|©È‘¢vq…i\òyo²qrQŽ4ƒŠqr"GºôÝ’w†eo_Æ(ÆÉr¤]Xòy¨lœ\”#MP19ÒŽÊ‘.+®úI1ªRÞB™þSšUÚ€W±s›Èh'ŠŒfP1vNDFGTö/Ðð?|V Ö™ÈhXNÎi›—¸dWɧ 6‘QÄ 7`"£a`Êá!‰.åZüƒŠ80r®K>¿mäüPdt+hÎÜŠ‘ó¨úéÏŒáQ+kR‰wþâc ¢ÁJæWUµ8 NÒUµ0Qœ)diƒñ†ò´NHÛ®ò©çG”ÞÄH¹BC4<ûü÷‹MC•sºÇêZˆ†èÜ͸í—X«E¨hˆvLC4,Gô+•†¨†PÙ4DÑ P£çDCt9Ç5îã¯âІhÇ4DÃrd¨®*Jw ›ú-(jˆf1ŠÑs¢!:ã3wÿ¢[±^EC]Š)÷Thˆv* Q•WÙ*\D Ñ *FÓ ÑþÖ¨O…•®¢'Ú1=Ñ`%ûÕUuè6=Q ÝdDê‰BhfmYŽ¥¢"ŠÒ~æM÷»0Æ…ž&NcÓ°ñ¤û¤É›˜Š(âK‘2ŸšM{ÀûòÍÇ’çqVž«TDUÏ–<UD3¨=§*¢èe’N!œWè9SEÔòTW•¸8µNƒWéØyËJ\ˆŠèÖÞlR1«—ª¨ˆB!’mÀ}9r„òK>¿mì\TÍ¼Š±sª"ºuåȤ hÿÄ%ÎÓ™Šh°’¡ºŠ§;µMƒWéx: Ó NE¬B«ý¶iÙWqEE´c*¢i.iÛ]•0·©ˆ‚÷¨ÞvLE4 Œ7 ““ެ~êTs¦"šf R©ˆj‚¹MEABãæDEt†bQöÍWª’:g*¢a9â¶S©ˆª ²¥ÎEÑ,B1nNUDÜŽ{Ÿv=ÑŽé‰+ª«ÊZlz¢:¯bܜ艢ÿ"Z)°·]EE´Yâ\¡"zúmçT8õ!\TÍ|‰ññBE´¹nKÖ ‡½í*¢Ð} Ä@¡!Ú…%Ÿ‡Ê–85DTLC´#¢8ÜzÉgƒ+j¢¨ÿdP)î…†%Ÿ‡ÊÆÌE5Ñ *ÆÌ 5Ñæ¶@÷§Ÿ:ˆAœ91-Ñ`%Ç¥«ø¸SÚ4l;o'Z¢ €_õ¨h‰"wÅ|‰óqv² Òõo;ùdÁ¦%Š(¡ŠáLK4 L—Œ{”3–é§/¨SMsIÔé*î48 Τ£á «`! ¢ó4CáB(Ÿ®(ˆâ­Èœé~¯„³ýÏôt`²)ˆv¢‚h˜X²œ(ˆbÛA±ˆ·VtC;¦!¦°Ðó™ú,"6è6£áT7˜ó>§´sxP¹íXu¹BB4.ù¼Ñ_‘현èÞi»­%D(•„¨æ‹Å&!Š ¡ó*Fà Ñö†¢1â‹zQTÓ¥‹>ô«½ì^¾é]}-ŽoÒ ÿÔÐÊ&7ŠÐ¢ƒ•‘w"7оgë´ Y½ŠÜhÇäFÃrdÔ\]ý¨\C$ý;R”›Gz¥§<ì—Ò%H\«Å™²pqÍ?¨ŒkŒ¼+äFÓåeT6ò~(7êûQMÓË×@®_·~TÓ˜õ£ha'0 ™q¯¥…³ÓbǯÂï™išU x~¯ÂpcÈw“øý:S¡±s·ÀÄw¨ºyëÑÏòRÆlŸöîH¨tHUÙ²ì¢i˲ÒnY¡‰(Ô6zûb?2ER3Tz¯‚ÊV .*’fP1zOIÑA¯©;<­(’vL‘´S(’›ó¡Ë¦HÚ‰Š¤TŒÞEÒçRgçð Ò«X©ºB‘4.Yd¯¯²)’"\Ü!ƒŠýB‘tºAk "`•ʪŠiÇ”HÃ2DΖz"Á•H3ˆÁ'J¤8ÜþØÆ«(‘‚’QΪP"íÂ’ÏCe«•H3¨Á/”H¡o;7ËŠ¶y‡÷*ФxG2¨öï Ù«40ªg+UI3¨i'Ф} U¨¬ 6«×«(’¢ÄA¥¨…Q)’ª ²eÜEEÒS$Eœ)Η·ª…ñü°ßnE‘ÍÐTŠŒ{Xòù h#í¢"i˸ER©±Yn^Q$ÅA•¢F¥Hªò*7I3¨7'‚¤¨o ÍVþêˆFüp‚É+9Bi*`TÙ¸¹(Cšĸ9‘!Gt oS™,ïU*`˜ )bãæìpB%Cê¡’'l:¤ˆ*EUÂÀxí¡_‡9Ûwì˜Â?¨`œL‡4Í*|«tH5neÓ!E”ÐAÅÈyÔÝ¿‰´jFéçqI±·/¡bä\¡H—|:š;½N}ú@T$Ív #ç…"éz[ѵdÍ VhzE“´cš¤B“4Øœÿè³i’v¢&i£éD“t“âžùÖð Ò¯MWh’Æ%Ÿ÷+M5I3¨M'š¤h‡†é,-UQ"í˜i§P" 6ø’œ‹J¤@Œœ%R‘â ·Ð1¨¢DŠ›§”F)”H;•©*œÛȹ¨Dš bJ¤ˆ.9G?4aL½¿Ù•ÛŠ)²~ *9W)‘ª ²‘sQ‰4ƒŠ‘s¢D:ã6Û’U{°Ë4%ÒŽ)‘vqV$¨”HUPÙȹ¨DšAÅÈ9Q"{$¦Ä=ÙùsE“ÒÁÌ«)ô°äóÁÜFÓ½Th½ÇK£éD“thq½:ÊW4I;¦IŠèu?…–|*[ ]Ô$Í b)tªIŠkܱ;îËáí ŠÀ4I½Pi*d4ЦIŠp¡bé3céD“tÂ×1¼êªŠ&)ò4t*4Iã’O{•SìÔ³tQ“4ó*ÆÒ‰&é2âß’ÈK)T4I;¦IŠèuß«Tš¤*¯²¥ÒEMÒ *ÆÑ‰&é ݬ¡á‡QPo_n@ÆÑ꤈pûF8ïU6Ž.ª“fP1ŽNÔIAÐP^òª=^BÅRé uRô…¾ *[ÕI3¨['ꤛNȘ$°äKE§´c:¥ˆ^Š xUý‹M¦áBÖ™Li˜òTSÛâ6Døá±ªÒõ…VÕ<¥Y –|~ÚØº(Sš¼ŠÉ”vD¦tXÚfÝrUþ‡Ç*^æ`ÙP‘JWÉ”ªÂº­‹2¥TŒ­™Ò u}`ìÇA™ÒžÉ”vqVÉ«®Jª;9OYªØ3¨['2¥Èèá2`‚Š}VKqy‰y•‚­«KU^ecë¢`icëD°•ÁPjõ*Ú¥¸›Ã R°õ»Ú¥[­œ*ìÄiµWíæG¢FT”­‡ñnªew#‚UNz¦Cšæ:Þvq¡gƒ9v½ ]™ Ó!ÝŸ“ê>WôP^ðñw̃} ­gO³JPiZ¾¨|ÉÄÑ$trô00^VÆC“éÒc¿`_BE9zš5AEýâ’5^%ûaÛÛÜJ*hÏö%éûs’[ î¯Cp üÐäg°/±¢$=Í*¹ÕE$À•T¤žAEIúþœL~5ÃsŸ *Þ.I@ÍÓ¬T‘ôÞI‰¢¹Ž¤3åÑý99TèŽÓ$¯¢—qƒ}éU4¥žf• Ò´fT+IïEåÑäULy4 Œj~¸¤4ç P¤œ#ØP1åÑ4«ÕEµè½“5x•g¼Û¯üö¾/?¾ýüþ{lbW¿ÿb;UG™½·þ°?'“âFÞr]Ò¹;÷ªýA%T4¥žf• ºˆ¤cÿÛb•ޤÓ€*Ðé½DaDÑ N™/ñz—žé¦¹$€.ªEGõ® ]¹ í§€ÊŽ/¨¬€POªL Ç3Á¾ô%JÍÓ¬T%Ò¡}f‚*ˆwÞÛvŒšû!BAl%Ç|ûº¶Æ¡noc“ÿúª§ež‚•TplNŸº÷6½ÑÝüþW íýó¨úMÄ6«¦—`_BÅHºBo4.ùô÷ŒÓîÔsQo4{ï1’^èNè×ú”xe"“û(Áb4]¡=fºÀ¯l,]ÔÍÀb,h¢}ú”Ÿ%³håíK¨KWhâpãšT:"€-ZéX:íz‡-’Þû›JY 2 ñ;™±ôŠö(îR–®Ð O¾À«L…/½¨=š¼Ši†Q£…j1m³ÿ¬J_bܼ¢8J¼øM\èùeãæNŸô~8g‚£½壧 M…èaL°*b‚£i.„…žh㫆 ®cä´³+6Û>0RƒÒËñ{°/¡bŒ\!8fº`³Ù¹(8šm6š6GLñ‡qŽÝ ØŒÈ¢*ÍuÈ,š8OóJ~u;w¢¿Ò±sÚ‰~U²sÇ ƒÇÙÓnUÄ8¹Bh4<ï¼7Ù„F!Š­Jq2¡Ñ00¦8Ñ6W8â[Ž¥8+B£=M³ ¾¤Õ$XlB£½(4šmHÝã!ŒŒ¥¡Ë0ÌØ¥á‡}UDK{&Zšf•ÀÒ”ÈèÀ²ÕȈª¥9XŒé²¥Ím^ðÝ$ƒý;+¬È—ö=ãü ùÒ^%_ªËFúEýÒ,Æú‰€)6•×”½¡HÓž ˜ö Ó`sE8³%àEÓ,Fû‰„)4æ&9k×W$L{ÚÚþ)X‰ç…* SgÙx¿¨ašÅDLo²´ ŒwÍ„þìÇÇÞ¾ ðŒøÇY¥˜¥©”Ñecþ¢Ši£þDÆtûqÄ¥’ã_ù`2¦ˆbþ@Kó  Ë–šeLs°hI;âMæYÓ ¥j˘ê´k¬%S\Ĥ• %Óðì+¢–Ü‹R¦9\ŒÝ-Óuk@‹îãᇖµMž¬`ª¦ÁJŽZšì¼Î·lÅ3^E´~a7‹¶ƒÉ—Q µ}Ë*½+ô~`ô^¡jž|gÙdM{QÖ4‹ÕÏ]Ó­Ÿ*Žsõ]Ӟ隆õˆž¥Ò5Uy–MØQC8×ÈÁbÙz¢lÚ¡Ì]j§žT¼™²i°’ÁºŒÃÛ¤M{QÚ4‹qx¦m ½\8F<Û ´´¢mŠ%àÚ¦qÍç¿„¨>#!Š›æ`1_¨›Ž7\[B‡«ˆU_ù˜®¨›öLÝš–÷éCXõpÙX¼(ošÃÅX<Ñ7q˹üMøau4¥Óž)"Ž)ÀÒT»ë¢–ÅÝÐj…dÓ:í‰Öé åê.Kw±“ko_F-ÆâZ§áÉW¼m,^;ÍÁb,ž¨ârΊ$‹àYÏÔNÇžu‹·É"jèÞ‡Lï4ŒŒ6ma³t‡—oÃýI…g1½Ó4kúäaçaͪ˜%_frÊ¢†/U½ç®ÅH<‘<ÅÙ25)hñ}X!ñLòaLáZ—‘x›æiïEIï’x&zFÆò?H›!Á|œÔªÈŸöLþ4Í*|M‡5ŸÚôOÑWA¹‰÷#X]Ó"#Å> +²§P´¤+Î%@¤’=U½mº§h}¦„ˆQ÷Bøt½¡yJdt¬,?¢ V¬Ð&Î+Áuyw£úX%jŸæ±Š‘w"~ºÕE ´êc_‘<í™äi°¿oÂJ/Øt¶´»¨yšCÄ(;=WˆJe_ƒì@§" )g¶ý„=¬ù°l„]Ô?ÍÁb„½@mqXˆœV­À´"Š—‚²«$PuÑÊFÙE Ô .&‚ŠÌq‘šp™WŸYhEµg"¨iV)V]–xwº£†Xåéï½ïzIù§ žÕ¶Pï>LŽVQ{&ˆšf•ÀºŒ²ÛQ7tïA&‰FîTa¹m*–Ù°Z¢¡"ŠÚ3QÔ4¯—_õqË–xEQóÈ8»˜Õ€«˜èeuœÄªè£öLqì>gk¾,[â=¨Þ݈,ñNRq§÷V9 ­¤Û™.*¢—"ÍeUU`· £"Z(·cêDu€–e3w O*H(ÓH V"ÃRi¤êÀ²5•ERóÍÇ8;QIE‡0tž¾½} cì •TÄ·ýøüæs"¢ú· (“šƒÅ;ÑI»v»³zL*:©=ÓIEìbÛåbT:©Á³ä\ŒM)µ•Rs´y/¤R›Úô¡Ufv×NT„R{&”Ö#Vʇ5_¹²  ö¢jŽcï…êz›çijœ½¢| Ñ%ÊÙãlB~/¬õ ”l¤]Ô>M(¡ü½ü½ú(Sº_îÅýèswµöe¸byöŠø)ßÒ~gÚí‡ò§[»”-–h'2§hâäÌp¼}“9ESÄ+ k¿ƒ–­^&è‡Þ¡V¨Ic¾•×Ë h~‡nzU4O{Ú±î L–…´ßAËÆÚEÕÓÜ·k'²§HôáŠæ±b3b”áô-v™µ"{Êw¢%Ó~-m…Os´m/”OqgÂ.Y;¬©’­hŸöLû´¯hŸr¼,^ÆË¦~Š^Ï*Sº‰üi×NÝ0¦B?v!ÑÛ—ÞÅòîùS†VXóoE›*b‡-Fâ ÔæÖ¢GÃô1Ì_bĨ{œK`*ýSuú zî.* æ;qw":"ß77é«¥’+¨8ΠŒ(}‹¼û‰Ie•:ª*jÙäQ{Q5ZŒ½S}ÔÝi²`ìjaEµ_{Wè£Æ5Ÿ§6Ô^HÍÁbä½PHmnÝ8¡¦“èTTQq‡¾ª¨q¥@d»ª*Ê¢æ1îNtQÑ ª›Q|XæîíËÍǸ»Bµk¾,[ÍŒ(ŒšƒÅ¸;QF…º%\J¸PÑHeïÖ'4u»ØÃš/ËV3#Фæ`1îNTR§-Ç@Oh‹xîŠi£+1˜«´QuÁÜÆØEqÔ "¦ŽŠ(“±ªö†t;ô®O¨¤®*ú¨=ÓGMó ¼J¥ªƒËÆØEÔ.ÆØ‰Bj —rúà-ÐOçŠB*ú¢°À®`ì*…TX¶”»(‘šƒÅRîD#uE;04;þt®h¤öL#ÑK«.cìNBTÏØE‘Ô,ÆØ‰J*DÐÖ6%e8«ª0v¦’ ý^X—1v'4jKÉØg–p':©Ø‚¸’“ÂKÊTtRÑ«…mCEÅLv=ÿ´ ¥îÝ”ŽºÜæžÅø:QJuÝ’éM”Ç0Áª˜>j°ß‚AÒõˆlu2¢@jcéD!uXºMµÒ' ë…Ôž)¤"vÝß|wR}G­µ}ù˜p;îhG­µ5tÔrR£úm*Š©æ°2f_¨©®·Ç¥m iµ=Õ~eÜ^¡§Ú«ôTäý¦Z®©“.e^ž&?ìÝ£RW-´'@ÓW˼úi¹QY¼BG5<ïÎåBD6F(¤ê{i­ÃË׈ñÎŽ¼ÌÖY+륅£Gz¤H$V§aF šPŽT‘Xí™Ä*ŽÙ;XuŸU…¢ô‹«¸0æ;iá™UÇ£Kb7.Âù«Rér,Iï­äwƒªÎF–ò‹*«9XŒò™UÈTá\QHOxû,0Ê5â¬Â÷‘JfUÂl”_ÔYÍÁb”Ÿ­.Ϊ³$=Ópª­Lhg"Šm¨¢ü*ϲÙÙÒú9l¶ å'R«ë„[ÒY; §üxE0ÏRP~•Ԫγl56¢ÖjîYŒò±UôT†\CºûËZNVÄV&¶ŠD…g©*lž…0€§©™Än~Hù3Ï¢”?ŒŒwáXKG¯G«2RÑÄ|šë8Rŕʔ_‘‰ò#VH‡>D”ò‡‘¢Ñ¥rR MÑû,š¢O³J`©JãU`™RôˆJ°(‘##X›4fvé‚–×û,JãÓ¬X~Íx–)EX¡‹¦èÃÈxãiØ>'»û,JèÓ¬X~Í€e"ôƒÓhÕD*ÊÛÃÈÈãŠúq_¶`_‚EËkÒ¬XWñöÁ&»º›+Àbº«ad ŠKíÖµçè¤,Ø—`QÞžf•ÀºŠ·£S´í(^jMž)¯îʵ¡23-Ç]Òƒ}S^M³J`©ŠkTÞÄÛ§Ôªñ,ÊÛÃȸ n|ˆžÅüζK°h/É4«ÖU¼%ê6Ï‹k2Ï¢¼}PæYèéºÒv‡Áª„ˆ²õ4—‘*A¯ò'[¼ŠêAó™ "ÊÖÃÈàO3öÞˆ¾äGÅZÁ¾‹&èÓ¬X—±õ-/f`ëÎ\³ù[÷#X[6WëqQmã¨I ãíqV¬°æó„y`XJÞÎ4X÷ ´ùpG WR Uè ö%XŒ·ÇY%°.ãí6Vhé¨(mmõFÏBUü´éûÆr®ìK°oWh°Æ5_àY6Þ.аfÚ5 `…"/á7âRJv剗B„%\Œ¹+tXÃLçSñPV·mD±0> ñŒ¹%Ö¶EªªÊ<îË)Õ¢¦¿¬¤k¿ÁF‘xÑipj¦ú<Œ¨Àš¹“`Ý”é¤`û¡">n?z¨ìK‡b„½"ÆJ/:…™.AËÆØE9Ö-ši‡ØšOÆí×h £ ‹Q¼þÿ³v6;Ö+½u¾•À£LÜÞú×>ˆ §ûýf8ßDOrûY[뇫D‘èê ßÀ§T»‹Zb±ø iª² y®ÐÙFþàQ1¡~!P…!Y-l4~-vfîÔÓÀÊ•OiæßŸ<¯e¯ˆT°WL«›XÖÒ§H«W\VÔß¾À^[,mÕȱ¤ÚÓ¬–µ"ªýÁZ1Ù~!QŸ½‹d»³â5^ÊvW܉fI¶7­¼#²Ý¶V ÒŠØáSWDi•'S–}ûܲ¸¿d!ãëHºýZù.tQZåüæÁZ1ánrZËH ÷T=£;÷oäcî? ˜VÜØ×q¾i%ß’5»´èƒµbwÔZZ‹2îŠÔŠK]È2X¾u~#Ô¾EʽÁlekE2îÖŠIw“ÚZZ‹Rî Ûº£v ™ºä[·ØÖ™°­ˆdt8ÈÖŠ¤Ü¬Sî&·µ´)wnpýÕ“Zg5p­hÞFû+dØF‘LûƒB%2ˆ¾ØNÄVyRbûŽò˜-Kèƒä_ï?Rî b+[+’j°VL¹›ÌÖ£4½ë{¾žLy†m€ö0b{Cü5Ïj¨,YsØÓð/õQe¿‘¦úÎÁmBÀ „íÄs|å[ÄoͳZÖê§àcXVDçN$¯¸¬€T ¶Óò­†‚'.«¬ÇVYý| Ì:_$Ôgß"Ÿª§ÊZæåÓ¹ç>ãw¯}‹|ƒÌÊq«Ÿ‚¡Yç[4ëQ+sXD`•'ÓQý®Gq@_À—ñµµHÁ_ë1}ËÇ_½Îtì(°â ŹIÁ_Ofk½° MÚ°âã[+ˆ4«·dÍ¢ü'õçþlká[¤à¥AËXàjuußÜ °ÎD`•Q¶oõSðÃ4`-gÑŒ~{}Ï ÁŠ+ã¸fß"ß@°¢Ãù–CÁ 6¶‡ożÍ`-|‹¼b°îû‚»ñ÷XѹÁ`‰Á*£lßê§åŠiÀ·œZž ¬ˆ9u^yÛPÚ@Õ ô*ضäQ܉†Þ„‚‹íáQ1o³W³Géï8ì¿:÷ÌÜ„3èûÒ¢k|õ&$öjžÕŠíý²ð»4àQ—~ªÜÖ™X«Î¿dZ¹÷ru&äjžÍ²R?å~ MVr*÷‘”»b®¢kºg¡äúæ²4"×5sUFÙQªŸr?¨¥k™wZ‹HÊ]AW—aÛñœv åg®ñõ$åÞ€®r¼ê§ÜcÔÕÙ¦®Ö¢š™Šºº¬ k寿¸ZHŠ¡Á]‰»*+2½ËÇ]ui÷x±Ã§ÝõÌ·idc5’öDqEsëúé`¬˜ ·!®…±H·+ˆ+ÊOœËêÛ të¼Qª¾nåÍ×M­àÓ€?™E7…‰(U_‘[__û0,[>çç$EƒÛŠNÃÖŸ»JÎB›ý½?Ű­`D[‰úÂX¤Ö¶¸iÅÞw•_ªÂºÎ(þ‘Qæw Ûê ë1jëlS[ c‘ZWÔÖ}OúXíG¦¯-D½m¥½çƒ¶º,“è6³µ°ItÅlÅ5•W¤ïÏ}ÌÖ™˜­]ϱÜÇlu+&Ö…Ú®8-ŒEb]1[q¯—ƲJ ´BƒÙ:³¡Ëa¬sL‡¿³uþ飱H¬+fëû= ƒ.»Åæ;…u½ùH¢§¹Œd‚Ôêò§˜D·I­ÙŸˆÔ:W¤Ö÷`3åu‹V-sƒÔŠSZýêKóZæê&ÒÔ©_'ؤÖÂ\$Ò™ÔºâÚô}Û5¾ò-"µ"z9¶_·¬{ŒÔŠháÓ Dj•'¥²fÙ^(y¡¾kþÚD”kOÔWËŸºIóŸúÇi"’æŠÏ VùRôÓÄĪFJø¬2Ê–RÝDzŒÏŠXá4‰ôÄQ=?úVD*dªî›“^ãkÏ"‘î ³¦5ÿ^¤Ç謳Mg-"‰tMgp]‚åôt֙謲Ó³dÍŒK©ÛtÖÂX$ÒuðõW¨*:ÙjpZgâ´ÎN«Œé ªˆ©ÿhsZ c‘^WœVôž^÷1gõ¨º´Ái5©úz£?¿}œV¾: ¦c]Ú÷I‚j®ø÷¬8­Ã„>Z‹qXÓà´ÎúÍ c9ôºÓê2V,¹nsZ Ï"½®9­NœòAgaÄÖ™ˆ­ˆbÏê–\?`¦Ï2o³fc±ñæú×:߆Ãk]vÂùɨúHj=Íe¨+¥ÕåO±”ºMi-LDj½¢´Ž_¸¼³áòaúk\vjpZq¼£?nÒ¼–¹ºéõtð(§^×J±JÒßWg¶÷JnÖM7éœVÜa!cqRn [Ö%ì.1P+Â…Oê¬u>)_7*<ôçõ ª¶ÑYóTÆÅ_YhÅj`uúôò#<ë¬ñ¬+пÖ×rÏŠÖ¯äPœUg‡ŠÔÀØã³"Z8Š»â³n oqÿ^þhû]ãkߢ"˜4«á[>RëÚ¬“ì6ªµˆí$Ù5ªõcªµ€Ö™­ZÏ áÐz>rDçvõ~Ë(LDB½Â®¾¾|6ΨUœ;ëMç@­¦•þþÃ/†ZEŒpî9J§'<êõÊÛp_ä_y”No@Wç7Õ¾8 «iÍŒ“ç·ÐÕà "y®ØªH§Ÿê—Û> ¶êLlÕÙÁV•1¾’8©_LÙlÕl,b«"ÊTò||£s«.Žÿ‘Qu 'yî ªÊL=L“ç6Qµ0ÉsETEm*0²;Q¦¸ATEÉE*G2ÝGTõ|ËHÒ€?9Ź®§ûF”©ü Ú`ü´‹”?6Ö9¾ô¬…ˆªyVãKF(°"U¬âÅ&ªžEiõЍº½–mß êPãÃïz¢6U¿¤y-suK¬PÒ€o9ëºô¾%Šúz â˜ô ìÛòëSu!¦jžÕ2V¯Zuì·±ÎáUµj™.OÊwßöдõ¾û¡Œ¯=KËô<ë½±Òš½bÆ2ÛÍQ«ôó‡ ”ýˆÑ+ƒj éê—<•e!šÉ×—ƒ‘p'ÍTXH‹ôó‡ }®=£ßܨ’ñµ±´\ϳZÆrµ‡t+Tý‚Pá“ëúÆÕ·<){Íž> UÉ(£ji‘žç²LÔ«æe9ȨºòÑO9}ƒ&’l÷ÏÙ>]ïq—2¾6–®~ɳZÆê•C_b Õs¸#–HUž@{ ”#Õ)êkci¹žgµŒÕ«öe‰TÏáci¹.O¦NýðÕq›Ÿ’ñ•±¤šgµŒÕ+—ŽkÚ±ŸS®ë›ï؆µ\ŸÇU>EŽbVC®:—žgµŒu­¹ƒJÉu4÷…uÝIƪSéà ã~WRÆ×ž¥ÅzžÕ2V/±Ž´Q̳œb}ÑU0çw™Q3|º\:e%ãkcé¤zžÕ2V7±~ðFýoCÁ“>½ 5¼ä{IðSù²ÁMIÔ¡ÉŸÎËøÚX$ÖÓ¬†±dͿ߆1¤*Ê1œÛĺBª~(Vk‘ßÓ)ù¥ÚX¤ÛHÕ´æÆ U­/6R5ëvBªÊ“ò6DwœnÝgŽe|m,Òí¤jZscÅtû0½iVK§Ù—„>=·á83Xt•ÖÍ*d|m,RðiVkvSð1 êraQŸ¥Óìò¤´hÝнïUtàæä•kÅ´ý-tõ쀅kðè€uTµ~Ü~ƒÛc±E¬Q3'¾ñHõnØ6TsïF¸»Æ×NG¢¿Ac¥½,ÿ2.§ûÿý~þù?Ó‹ê_þëÿþ¿ûøŸÿö_ÿúO ›…6Œu“X£¾W cI‘úÕ£×û»è«_¤ ëB0Ö<«ñ"•5w0V¨¶f±Y¬…±Hô+ë¾ õÇP€ÈX|iu!*«¬Ç”h²æÆ ]ZE<±ÙXe•'%ö£ü0ýü(výR½ Iò7 ¬¼ ]iû+šÙÛ0&ùm&ka,’üŠÉº¡¦{(˜ ôí}¯ŒELVd;K&eŒ/ôÛÆŠ‰ÉZ‹Ä¿F²â4hѵ8?ˆJ,ÑÄ*£ìÍç’ü.Š%ëmka"’ü‡uþ‚<,Ï÷Fzâz¢ö(ýi^+°»D¿Ë\±t½ b-ÌE¢_X‘ËA³¢\4IIÕˆ"C¹!‹MÛ•—+]ïR^1+îŒ8#;×$dêu©i¬7ÚšË/Õ®EªÞbMkî êc Öű¾Eª¾±hÞð»±±Ö…¬²SÍû¬>ŸŠ©yÀZX‰*l€õÓSm*:PÓ—bÀº€uI³áJÖü{iã¯"`87 eêuBOéõÓ¹ö¦­´üR½)SŸfµŒåÊÔ{bûA9õUÛøÕ³H´+üê:B…j¸ôþ/ µ@Ùù4—e"WvÞe¢˜T’iû6›ˆ˜«3ÕóŠ.}h’”znÐWAkЯ¿4«e¬nRý`œüÉìé^‹¤º‚¯~:lH7Ýo>n j9Ë!ÕÛ!RŤúEF½9&+ŒER½b¯‚5J`†· .–ƒu!«Œ2E»¬¹ƒ±b¢ý£>‹D»B°øD‘©áYÜgf!+`ÓÏ²æÆŠIö‹xúl,’ìŠÀºâôñ÷6 +¬KÛ%;¥dÍ¿7V ÀЍá #)ö ÀŠK†¯÷øÒ8´™¿’ ]•QææóAW=ïÀs±Âi"’é‰úù¨ í2ß&sU~«6UÖ8˜«iÕ<*¦×mæjØI¯WÌÕO/V$âóQ…¾@ß:“òµ±(Éî ®ÊLV²Ô/lâja,Ò늸Š;™‚ÕíÕÄ%£D\•QöFì¦×cÄUèGçF$½^W'@ÓFœÿ4¾—¤Õ…H«²ÛHÝû4 x”3¹N¤Ut­;6ßë¥+ç±é•ðÄWÍs:]˜°"T,¥nóUó¦Ó¸ˆïEñUG´Þy¡]Ãí_Xd-|Uùå*¦Óm¾ja,Ò銯Š|ú§SÃíÅÕå_…sâ«Ê({óuK®ðÑÀæ3ëi c‘NW|UÜCu·!=|UPȳ:ÝÇWu骘N·ùª…±H§W|Õ××øš'CõIiƒ©ºSuIsY‘*’P7ϳbLUÄ ß˜ªòd*Ž|½v\»¯Ïj0U]Uÿ'ÏjËÇTõøSŒ© ±ÓX¤ÓSuy£½J´äO7à‘_ª#©tS5­ù÷ïÀS±Âi,R銩úž@h~÷VLU u¤r0UÓš;+V c3U‹HE*]1UQ}…f}÷kŸX¥]UF™ï@]Õµ c¥06]µ0©tEWZâ]VöQʸAW]ˆ®Š(öœ«’5wð¬X~ݦ«fc]Ý¢ëü:àªk± éë5¾ŽY”_wÐUå—;HÑ3Qóˆ™*OÊÛ[pëìþ0âú¥ÊXÄLͳZoC× V×6Œévá>Ü3u¹žÌÒwíÇ|Á‰®Î5˜© 1Só¬–±ºéöƒ@ê×í·ÌÔ£5V± I·+4êô¹ãû‹*ÒhTÜ=§·¡C·Ëš;Ĭ˜n·Ñ¨…±H·+4êöFGäÑø|n QñIÆrä×eÍ¿7V N®3fQ~½B£Î_h#†N£ù঑½jÀQÝÆæ¬È>8ª'jtQÿF´á¨…o‘†WpÔ ÷2÷Á(:nÀQÁÑ־倣"Öÿ‰;øV,ÓnÃQ c‘†WpÔ7 ñ2ÔÐ 8*ŠBÈDÏýÛẙ(¦Üm8ja"Rî Ž: N¼òm{ªžmÀQ©€›ïÔ÷öæë–_?È¡Íç̯ëÖ{߈2•Ý>ÍîǼùØXÊ‚£æY Éàƒ£º"UL¹ÛpÔäYÈwÖÆRʇ\[qq•$CŽºè¶“ð,™Õ2V·Ê˜ƒð,ŸrôŒ%5,×ò h€â’/«QCpÔ<«e¬nÊ=GEÔpI†A·Ÿ…±Î'E¹Oü:èó—j <Ö5¾úÌ!8jžÕ2V7å~pFžå˸ƒþMÛ°î=ƒ”y. ”mh`R‹¡·¡C¹ еƒ`ˆ)wAŽ>|ºQ6ƒµÆ«çpÇ[«òdz nh½f´Þ–ñµg‘rw WÓš;xVL¹ÛÈÕìYºMè÷ª«ûkÝÆ‚'ª02¾2ÁWó¬†d5w0ÖGÖúŨ _-ŒEÊ]ÁWñÜq %mC]©† c¼ ¾*£ìmØM¹Çà«ë;}L$|Už<·áò®ÐŽ˜ ÕZïÃFÞ]ˆ!j=WŤUwð­PÞ}½À§Ïæ"í®ð«85Å…LÞ~\ò¾Ž¤ØøÕ´Òß›(U]/ˆé³‰H±'üéyÿ©ct1²nÈoÕÑŠ4{«ªkaÒª;˜+–m·©ªE´"Í®¨ª¨òô¾‘ø0hEš=Íj„vYscÅ4û-Tõh‘U‹4»b§Ž(ŠAõñíõÁNEïuŒ*£ÌÐîc§z)bìTÄS?e݉*O– 7} cqù;°Md¬çš˜´æžÓî6;µð,Ò$2:ÔÞ·"]¯ñuÌ¢¬{šÕچݲî|Ô¯°lvj6±SÑò¾8}Þ¾ GQ“B|ãΜõÆòGÇ_ zêJôÔ<«å[Ýòî®4`¬K ?E­‰Ô»¢§"À£ûZ.Ncc5Ô;qTÇ®ÿ–±º©÷C0–3ﮂ߀Wž…]8Œú’ÍŒª6ßDÙv;Ufê±ùbŠÝf§±Š»b§Žh@ºl`çÈŸNÊ4Ø©è–HoÁç:vTxõÊ`ÅЩˆ>É 1ƒßòdºh¿x æHEÙöë—jÏ"åÞ@§’r—5ÿ^2ÄÈ©8u‹”{ENÅõ$l¾·>ñû‘ùk‘^OsñÉÇMõHЃ)êO66µØ|¤×6uú4Ò´ŽºØÔ•°©«›*c:Dª6±ÂéO”kWØÔuG#‚¢¨7_C¯ë÷éYùq#kî°ùbzÝÆ¦žEz]aSw„©HÏ%E €êª•Œõ\Ã.czxV¨†GŸ>Ï"€ª<)aëq©ÎùëHEÝMM+íàO± » HŸdçH]aSG€@Ýy&â¦+ÁRe”½åº)óƒ$æNe®¿ü!DCŸÇ[¸‘„ªã{¬³Œ¯ü‰`©yVëÍ×M™$Ñ€±œÊ\ç”`,¥Ì‘KÀu¢{Ùy¯EÝK•_îŸb݆¥æ`>’FW°T”-.{]¸Î,UFÙÛ°›FÁR5œÁœòë – œ®ÄÓgñ5ªö'Ræi.cóù`©Ùƒ¥®6,µð'Ræ,Xç|ðeDªk|m,ÒèTjZóïß|kÔ©lTja,Òè •Š"˜÷8ß| T*Z˜èd*u•5w0V¬ÆF¥Æ"®P©Ó¼O VÝWX5P©+¡R×4«µ »ÕÃÄP©hÂäŒT¤Ñ+Têë mèp¸•u¿ù¥zRN=Íj«[N=†L]Dú$@ ™*O&>nÓK‚üȨÚD¤Ñ~Õ2Q·úõ£Q R9óè„L=%å*ctY@_£Ø¿LEíEªç~0òË4ÕA& Ë©Öu Â7¢L•.âýB"ùÓ÷e|åY„LͳZžõ¤ÖÏæW˜ë¯lG%.:átÿßþþ_ÿþ÷ÿüŸÇÿÿïðýͯÖ\õî([¨Ò]ÁUß°(úfmTË\UÖcJU\fü—Ïç™ÕëìÂðÁK#?Æ4Òõ ®:}zÔ½î[½Ÿ ûת}rï̪ÌdoX—±b˜UÄ—›·åÙ ÿü¯¿·£¶õãôœk-Û`U¦”7ÃÅQÒùè5Ú௢§©{×(Óå\üUŸcå4&V;|ÙѤ¿â¯¢û톲Òûïîk|ír$ýüÕUÖlªYŸ±bå4&µ4IÍ_w˜*çç©R²Á_]‰¿º:ø«2¦ÇþŒI“¿Z‹¤¿â¯¢Èeñ]y[ÝÝ௮Ä_]Ó¬Æ ÕÅ_õyV,=oòWKc‘ôWüÕBí=ß÷ãA|âŒñWe”³<Òßg¬XzÞ䝯"þ*J*©6íÓ<éž’?2ªŽT$ýÔU™©Çæ‹¥çMêji"JÏ_O¦Z¶÷V­tjƒººu±ë¹*DÖÜ!¬t±_v™ÔÕÒXTB£¨«8ÉØåK•ÔU\Ñ'Á V¤ò$ê}›/Ô $l#IQ‹½¢®¢݈n¹^ׇ4¨«+QWe=v¤ò\]õ+–¨7©«¥±HÐ+êê„Re$ŸïÓ_ ê*`ÉäYŽbuÕe¬uQÃéY”¨¯¨«H +¸DÔ‘ AZ]‰´*«0ýÉEZõ™(¦ÖMÒjéO¤Ö+Òêð5 3Öº6îœ4«¨ÐÕ~ä ¬"®9в|FŠ©t“°Z‰Tº"¬¶ ¸î-tû¤ÁZ]‰µŠ˜õüîs±V}ÆŠ©t“µZ‹Tºb­‚l…ÃÄ ¨ w_ƒµºên³Æò$è}ÆŠ©tá–6ó3¥±H¥+ÖêŒÞöSnqAÄqÄ%VéÄZ•Qv¬ê¦ÒX©_U™¬Õl,l/Õñ¦Réã0Á­4zHFU*«y.CKÉJ/ÀÇX«ˆNc‘^¯X«ø¤¥€~¹—¢ Ò*%jÝî ­¦5w0VL·›¤Õr’n¯H«Û×Ç>¯L/i}æ4X«+±VÑúá9Ä»X«¾Sî&kµ4)wÅZqb^3÷'7 Ö*Z¾“o9”»¬¹ƒoÅ”»ÉZ-EÊ]±V‡Z´–ç\:ku¯£•Ö8X««¬¹ƒ±bùu“µZ‹X«ˆ8•rßQܽxœS@,m°VÑl…]“g½7VZsc…jÙ+|Ÿ9ú÷<)ÆBåñ»šhÉ ãkciåžgµŒÕK¹# Ä<ëRÁO }?Æ’LøÙKlÛ¦7Š=’gévF2¾6–VîyVËX½”;Â@ÌXW}ø£±´r?¨è{þ<{Ño[_ñµ±´rϳZÆêUÓÂ]ÌXVÓ™2fiå~þPi¬h ÷MBd|m,]“gµŒÕ+ç¾Åð©çpG€'|ª<™bÖ‡ÛXàõ8fq‹H4ôQR4ÏjËÓ~Æ#E·>õî1–Vîòäi¬ákyÍà>óe%WyaSól–‘zeÚ©‰m?g¦]ßgG`¯3íûÊϬ12ª6‘ίç¹,õRé[ –z÷ø‘VéòäéGó׈¦XŸ¾ ×ßÖò(n"³ :מçµÌÕK±cÛÇ<Ê©Øk?Húò5£‡Lq§dl™‹kbP{KQê9Û.¿ýûš˜³Ï‘_³_€Ò6~©xÿé¾.ßçgœ¡N8¼Ë\Éøz+’fwSe¦ÆŠiv˜ZKgÛ7LÅÅïWåÕi ŒªMDJÝI•™îMt¶ÆÂ8´Æ:*m?ÇÀ£j…ìo…@Ú¨&Pµ4¦ÎÆŸ?T@ ±ç–)]èTŒ¯ÍJšÞV•™å_ÆNK¸-”œß.®éÍû`’†Xàˆ×Á ÆR×VÀ‡Ð´ôîö¸Œ¯]Ž$¾ƒ³šÖÜÁX¡äK—Ï º¡.w‘k.®ªÒ§ò5¾ò,¢©æY­˜ÕM­Çhªˆ>µN4Uy2•;¼– Aþ¶Œ¯EjÝÁUMkî³bjÝ䪖1‹ÔºæªîÛøÚî;¸mqüg©EIù4«åY®&3ž·aŒ«Š¨áô,R뉀z~î#° E£5Ú† ®ê¦i­d=æÛÐÅU…`{¤ L*¤ÛM®jéY¤Û+®*ú¦à6aìmÐÅÏ¥Õܨ}âŒU™©Cˆ1V7“±Zš‹4¼b¬¾'4äyå‹`ôÁÓ`¬nÄX•õؾÕMÃǫȔ;7"ixÅXA®Çiâ}ˆ¿Æ×Q‹4|šÕˆZ.ƪo#Æ4¼ÉX-=‹4¼b¬./$C—âÙ³øú*rÍ´ Ÿ‹àëÎÿÀ¿¸Rÿ§´ÉX-ŒEŒUÄ›ZimË å·÷ŸÒ Ú*¾'ÉXÏEðòË=bVLÛ´ÕÒX”gW´ÕeÑÑ/{¿¹ÝÌFÜUD±çTŸ¬¹ƒgÅ4üEO}ÔðÄ]EÉ{áY(€3½ãÒ~£âz¢ŠZD^ÍóZQ«›Š‘W7|!žÈ«òdJÓìÈ=ìù Gù⌯E*ÞA^Mkîà[1o’WËH*^‘WQ*‚*Üü:¤„rƒ¼J¦Žœ»¬ù÷ÆŠ‘W7œžE*^“W?µ"Ÿj$©ÜÒ©åƒu›)ûî`°¦5w0VLÅ› ÖÒ³HÅ+ë<áeø6Þ‡ ë¦ ÿl«Œéð>Œ1XšrzixÅ`E~}MÙ³è}Ø`°nÄ`•õ˜ÞÅ`uÉÒbêWZ&ƒµô,ÒðŠÁ:/àÊájJú£mx~-Ôž4¼ƒÁŠíÞK–ƬˆNÏ" _1Xg4!EJ«¡®aµHº;Ыi©BU,ýn¢W ‡"ô*ÂL%ÝQ]º ûÌýe”k|m,’î«ürP“îõQ„a¦2Ö<ìˆëù~]h@Xñi¤¿sÒ¬†•5wð¬˜t¿PªÏÆ¢ô»‚°o¼u…óÏvªü‰Ð«2ÊŽæÝäz ¨º œ´}¹)ŸÒPUžLWP€€¾/æ»~©6Éõ„iµüÉU ïIDÒÀ«Ï¬…/ŒEr]Uјrã»ù_‹’î êvé©b@UÄ ß«¸©ò¤x ø¶¡›… Z*ºëøä ¥¦•þ>>(Q¿?Ù´ÔŸH¤+Z*N8ñÿŒthƒ– 7ë,„1#•–êÙ|n4`,§H×÷k¾7EKÅM¹ €{ÝÙ ¥nDKͳ‘J¯<+V,cÓR Ï"‘®h©3þÍË>FTYÔ ¥nDK"å9Ã磥º<+–h·i©…±H¤kZ*.x”wv(ÑÞ ¥nDKEs«[¢ý¶¡Ù'2‹h©ˆ7•Ñʯ̇²g5î¬ê›°ò¬Ö6tÝYuyVL­ÛÜÔÂX”hWÜTPÍ/TÌÜÞkpSñÒ¤ïH´û¸©.cÅÔºÍM-ŒEj]qS?±}ó§ eaÜÔ¸©ˆbŽmØM·xÒÀ6t¦Ù_TÚ®¸©Ge{q8Hß n*.íg=wA¤ë•…9 ¢c9uû‹t»â¦B‰¾¨nögkÐR7¢¥Ê([]u+‘‰ÑR+|j]ëðoyRÔ:ºÿ¾p0~Úà¦nÄMͳaÝÇMõDª.ê÷'››ZD*Òí7õõ…Êt(¿ï凨tüg©¾‰Ÿ*£LÏòñS]ÆŠÝKµù©…±(¹®ø©3*dÐsí^·7ø©ñS»žÃºŸê2VL·ÛüÔÂX¤Û?õN3en>ŸüÔø©ˆbcuK®˜ÒÀ6t&×uÏ=Ĭú"ê:N£Y]‘`hðSÑ:X¿Ó¬VÌê¦ÛcüÔÍæ§Šg}¾ŠõETÅOÅ×{kãVŠ^ãë˜EYö4«e¬nº=FREÔð¼ ?2“ŒUgÙqÂ5Lo«Q C$UYà]=g\1+¦Ûm’jáY¤ÛIuÀ¡ü¾G ’êF$UD1GÌê¦Ûc$UD §g‘n¿ž5ÍÃk\îá òKÕ6$’ªŒ²=«›n‘Tt‹t»&©®ZïR~©6åÛ$Õ´æß§üb$U|™8Eå1Фº|ê=ÞÆINƒ¤Šž'úmè ©¦5w0V¬<Æ&©1‹¼"©î€w€Sà$U£ÉXŽÌ»¬¹ƒ±b Þ&©Æ"_‘Tñ¹3Ó2ækô$JUœý± ÞÇQõ¼ Ȩ_”ÚÕÂX¤àGuXçy±.æ48ªèÇBÆr(xGÕe¬XæÝæ¨Ƣ̻â¨:¼£ô£ÁQL†Œåȼû8ª.cÅêdlŽj6qToªÌ;ŠÇiÍ…WT,Úà¨âj+ËQâþÈQ½úfmË_ÿZ Ëü4šu߬m ôÍ:À¤ ëÔúšçõÈT™T†MÎu[ƒ¸ŠWÓ‘™÷WgÇ•°£mSÀD—Z¶‹D^ÈdéÏ!E\űëˆm2Ñ9¥¾ˆ³zöšú´…0¾}œU—‰b­fn9«W·¬mÿëïý(‚ý8øòé–µm¹[lG‚_X‡RC[øAŒ3„„]•Q¶í\2ße»X¼]]®NF0Éü »úzn™@¼º/ìn@WÁߦ½è¨‚—5ÛbÌc¬t¡Ã’ù…±Hækèê†&–rm@W)¼ý‘õ˜žåƒ®ºŒ“ù6tµ0Éü„G=/þã0Ì\ƒÔ@­n„ZÅ%–ç„„¬´ƒ?ÅĽZ-LDâ¾B­Ž_˼µ“Ï}ÅÊ Ø*€~zû¥y8º<*– ·a«…¹HÞ+Ø*vÞ0¾óu_:wm`W7®"z9|Ë• w+&ïmìja,’÷ »º¢#é¢ ï>õi.ËŸ\iy—‰b¢ÞÆ®fvq¦RŸ8C›ª8j Vq'Ÿ¶œCÊûP«.ÅŠhlÔja"JÆ+Ôêôz¡O0 ô`ç×d"‡@—•vâ±¼ÀJÛ½0 tX^ë¸ÏÆyE°º`qÊ•\)x—?Ťº X-ŒEŠ\VQ¿ Á ¯ºþ¨‚­ZEyy–£tƇZu+¦ÍmÔja,Òæ µºO8.Cƒ ùãmØè3C¨UÄ.‡g¹Šh<ÆŠ¡V5|Ú\'Ë¿åÉÔrðåôwr° ¯ý)a[÷°ê2QL‘Û€ÕŸH‘+À*H…hð›¿õèzx° ž Ë¡Í}€U—±bÚܬÆ"m®«#.¦îC>Òac)õ*ó&eî¬"¾{à÷ïÀƒ>êORÙ€ÕÂX¤Ì`ì½á…«ðòÇÆ:õtm,J¼§Y­mØM™ôÑ€±ÌÒ™ÂX¤Ì`U3ÃTt-¢Ï˜`u#À*¢ØsX÷V]Û0¦ÑmÀj6Vo*>âÐÖ…î„UÍsYþä*˜q™(¦Ñm¬ja"ÒèVõõõ› W-ÍÇ3H:PXw¨uTÕe¬˜Z·¡ª…±H­+¨*Ð ¸`:®ñe¤Âi5Ë¡ÖeÍÂzL­ÛPÕÂX¤ÖT•EHVÒÙCªŠC 2‘C£ËJ;˜(¦ÑPúôõGPUWñi@ãöw¡©¨mªºT5ÏjEª^Þ÷›ï~Û¹½ð'?—'“F_÷}5Îçe|½ù´ZϳÞ+­ùמ…Í3–Ùý0–Vëç=Üq?‡ ·a]Æ×ÆÒj=ÏjËÕÍÝÖbÆ2/¨ÆÒjýü¡À„ÎÈ:Þõ'’ñµ±´ZϳZÆê¥Öbƺ”ïcÌÒjýü¡ÂX8Äš@‚¾Ë+ÈøÚXZ­çY-cõRë{ ªz÷Ä,­ÖåÉÔ¤aÅeÞOçÌëOºËøÚX:£žgµŒÕ+£¾Ç ªçp‡±ª*O¦6Òë§%kÎ…²±X·ãê¡’yVËX½t;NlšÅ/9féKÊßçåmˆ=ˆVúÓFFUþDHÕ<—e"Wy»+¬‡Ô: <}I=BªÊ“âOïgÈù¨¿ð~d|m,­Öó¬–±zåÖ÷\õîÙ|Z­Ë“§±Þ_ø´™ ¸êúóÏúhKž¨Í¥•{ž×2W¯ÊlÿØö3 Ü‹í§³ëçú =Å×éþꄌ¯¥+_ò¬–±º)÷ƒMêWî6Zµ0)÷A½ õh½ñ~{‘p¿Æ×Æ"åžf5Œ%kþ½r?(¥c9•ûBÊ]£U?ð—âÜFr!¨Ñ!ü>rw@Ve¦‡VEžC§î6:µð,Rî rz• ¡] p^†gqžè_d=VMUZsÏŠ)÷ ZzÓT­0)w…NÅ¿8Úö[Æâ<û>rw@TwYsc…*`p†ç¤Ü5+ÝQGo?s¬Tœøh1šfµbV7å~ÀF1ëRÁOß„ÄJE¼©óX(×[4÷òGFÕaôºƒ*3õˆT1½nRóæ›už›­2ÑçxkÑœ.˜¨‘]'.jžËò¢nzý@Œ¼È©×‰‹ŠØRŸÖ¬ïá=ÒW_ƒ‹ºë„p™Ë2Q7•~€E&2/¡^D*]qQ?W*ºò€¸Ã’`$eî ¡ÊL=6ZL™Û4ÔÂD¤Ì e±ï‰¾]®AU("*„Ä㩨Œé`¡Ýc}¯6Ý8ý[žLI©á= º3½ÚhÇ5`¨».ãû“g5vœ†êQ˜1*„ÓX$Ç  ¼i,Žh45O~©ö,’ã,jZóïES ‹ºÛXÔbï‘WXÔåõ©y¹¿É,¿T‹é,jZscÅäø…!}”ã#‚m(¥ã×·Ë õTšUö#£j‘wÀPe¦‘*&ÂmjáO$Â5 õ…B•â–)} 7`¨hãExšÕŠTÝDøAõk†šE0TtÜ+äÓò…âT¾Ï÷Aä‰Ú·H;p¨2Sߊ r‡Z˜‹¹Â¡Nèï¿ï9ƒÇ¾Õæ„CÅéγd5wˆUð-§4ŸtáË®p¨óöB!Õ}=£Œ¯<‹p¨yVk#vé1*â†O2UžÌ‡~`MÆÙûõKµ±H®;p¨iÍ<+&×mj± I®+*ޱÆ9×~êJE¼¹L}×úbÔ¡ÜeÍ¿7V ‡ŠJ|§gQ"]ãP_;³ß·“_ª=‹éiVcúp¨åáî6µð,Rîõõ5ân2|ë¾æ_‹”»†šÖÜÁ³b%06 µ0)÷ †:ͯõz¹¦!8Ôp¨øXz~ʪ;˜+¦Ýmja.J¥+*²0¸‰tß…Š32ú-ûGF™ç>ªk#ÆT¼C-ŒE*^áP‡Ï!M¾x«ëaök|½IŧY­¨ÕMÅÇp¨»CÍÆ"ª<™ªÇýi‹ªU¼.ãkc‘†OUËXÝŠ`V¨_–Ú8ÔÂX¤á=ÇwG‘‰Ê ¨ˆ]ŽHÕ-©~F&r*w‚ â¨½ø*Ü¿†iEýYÎõµûùDåQAÍóZÕM»Ç ¨g'#G APåÉT34Ïãºå3RJ÷]xÓÚX¤ÝÔ´æoÁ˜v·!¨Åö#í® ¨ ɺm¢yC°ÏTùâ ŸÊL÷I†³™Æýõ0fà÷Ÿ^?«jf…ìofµÇ©çpã‘´WŒT{dåsܧ¤|ƒ‘º#UÖc* áºÚŽ·>·µ:û+ùƒšÍH-¤½b¤îoœÍã>ªüÑqOƒ‘º#õ\¾ÝàJÆ<$º\ÆŠIû[FêÙà Mþúû}”ê~œ~ƒÓc­eƒ+}øGªóÖ}C÷›áS¬kÀSw‚§æYƒžê²bLñÛðÔ-µºÒÊ0V­Çü¼N9QÁû³¡øõ‘÷Ÿ<«e,WÙ»ËX1ÅoÃS c‘â¯à©¯/pAq¡>We±gq#™]—PÀXÏ—TeLýº¤Špb%u²±ˆ¢*O&É&)¯âûˆjºU\VчŠjZs‡ÈËÚÛÕÂX¤øE9i|å iÿEI~2–Cûû(ª®mËÚÛÕÂX”µWUô³ÅeœÓ× ÷Ou'žªŒ²5…Kù»Œº®Š¨á܆TZ“ȧçqì;íE/C6V£Èf!åï੦5w؆1å/lÒvÁ_áY¤üOuZq³bÁùÓŸà žê®KŸàY{OÕãY1ž*¢†Ó³HÚ'êéYj΃nÛÉ/Uß”DV•Qæ6”5ÿÞ³bdUD §±HÚk²êë…O‚¾ÁSE¾Z‡õ4—¡®|78ªH…Q`wèuGÕe®˜^·9ª…¹H¯WÕõ ¯>Ж‘zâ§î~ªŒé±c:]X¤Oo?â§"ÒTY«išq5ç¾ç¸Œ¯6 ñSó¬Öt]SuyTL§_|Ó›Ó£H§+~ê4nÃ++O>zmTw"©‚kø|T&kþ½ôŒ‘T-œ¡túõdn0V‚nEô#ó×þD55i.ß|üT?Åø©»ÍO-ü‰Ô¹â§¢Ñ,:wäÏ>’ž ~*>ªu8O³ZÆrµ•q+¦Óm~ja,Ò隟ŠäËkÎíj)±×à§‹IÆrTÔøø©.cÅtºÍO-ŒE:]ñSg4öqvÛƒ§ÁOE;(2–dí-Ïê¦ØcüÔýâ•>‡uR슟ŠÄe€¨Iu‚¦Ê(ó›FÚ!–Ç’ê645¹ ‘ëÿðß2êl úpéïï4 ©»î'ù'Ïj¹S7™ƒ¦"T¸^|;ASåÉôâGbÔ•$ð§F ¡Ró\–‰\e4®ð“æ6*µð'’æ •Š-8ß´G(â„¡Re”½ùº¥Òc¨ÔÝF¥Æ¢TºF¥¾á¥,Â5¨ÒQÄG•EØê¦Ëc|TçŽ#]®ø¨ëˆÞX\ÖÑùók|m,*¢qðQÓšËc|ÔÝæ£îDº\ñQAÏÛÞзÕ >êN|TYéY²æÆŠ5~´ù¨…±H¡+>*H²oT*ÜW½7ø¨;ñQ÷4«Õ}|TOT?à¡þ̧ÍG-ŒE ]ñQ§À´¡Ã†7z´ÔLsY&ê–?QQQÚãŒT¤ËuÆU&¨Íû“¾u'*ª¬ÇÞ|Ýtù ø“Ù4¦ð'Ò劊Š+ZÿßÄ4¨¨ø¢&ÏrÔ½ø¨¨®Í“è65‹¨¨ˆ2•Dß@”˜ cQ.¡AEEi<Kfµ¶a7‰c"jø¶!±NåI‘èŸÄÔŒ[˜·ú³A=Ei<ëÿ³vv;Ó븕¾• G9é·Ë?U¶ƒ¤ ÷·ç¬='¹‰=¹ýYv™Å¥b‘Øz̉¥òÇ-Ñ‹Å'GQOC++'Ö…%ú%ELLÎßàoÔÊ:ÐÓþ,{éäÑïçUEÜÓ:›·¢†‰ô‹'šðU±z´Ê¶²Á›¾Ðùíõ¾¸• ÐéN Sx¯ï©aaµPU¹<º:U¾ŠôºNs§Å©¤ê€NwÂ{Œj÷Ù~9Ð)¼EÐW‘^'Ð)®¨¾œÞ˜Ðén›ý.ïãJ†è4d¬œ^÷A§je‘^7 Sh«é¡ ”$î OѶÀ:öòt!OCÆÊeÔ}ä©2éõyúøy.í¡¾‚¤Ü;ÀSò„XYŒz x2V.£îO•±H¹à)¨ó4©ý6w€§ôm…±uyç?îà/vhükèO•±H¹à)òU@»:z;èÓݪ6+ Üå+§Ü}ôi5¡OáoåŽjÆù¹:]í;T´ÿ%ŸPî1jhæj`|ª2ÕÀê ýž€X’?ªXïàPw¡‹}—1jÈX9åîãP•±(Ínp¨ëŒ|ÃQK- þ‰Óì„C•§|é0LÁ_¬Ð„Ï *x›qú þ¦Ù†Ðîh´K}‹:Ô ¨u.'ȉAPCë)§Û}ªZO¤Û õÙþPü ^O˪A…ï l¾aº=A…¯ˆév‚ ÊHÉ1l3¦@`}Ì1tp¨;áPë¬ÎÊŠáP#+ëb…Æ7ŸCU+‹t»Á¡žeh &|γwp¨;áPq‘õûÊŠáPCÆÊév‡ªŒEºÝàPqöòœqoKþ(Õw?ß$f‡ /0Ö°Œ{‡Š²àà6$Ýnq¨¸¸yh‰ûùÖXT À¡–wþãR4‡C…׋t»Á¡"‡u¶ˆüätp¨Tñ»¼+b8ÔÐ6Ìév‡Z·!áPáoZÝþÄ%f{ þ—<Õ®'Rëe.Ï­˳_¬Ð„[æÙm9Ôo¸™Õ˜ÕžË>Á¹Ÿ×ÆÂó6´)³zÆVs±Bƺ•ï·<»­®ƒ±tžé˜é…ËZN;ºõ jÕ3Ö0µ~QCÆ ªu[· cµjÇ èµÀ_>¾UŠV&´žYö5äŸrjÝÇ¡*ÿDjÝàPŸ ÚÐib—=’èàP¡B“dÂ(µŽÍ_ ¯§÷ãÆ(cÙ,»Œ,m–ZÕ"Êó­§²uëuÖÏ›¯¼ó– Øü9cÅn•Ò…ßÞ?Tq]¸0‰´›ˆQJ¸ g6_Ë3Ѩjõw£ÄzºõîWgn5úû‡PðD¸#OžjW‘­…©sy&¥Ì±ås«(¨Ìí*¬"É}ËEîcÏ«ûÏ–8Ê󭱬2¯³zÆúV ón}…¹Ðúê*Ô=»í¦õþÏñÖWG’ú~<âɬ†—‘âÉà°qE·Hxº¤$Ï·fµU3uVϬ¡þû÷ÖWïÎK‰m»Š›VæØþýCÊ“­ jC>w^ç[cY5_gõŒRó!c¥rïÇÅTí­¬wë+üßÑúêª}=ýEj}E—“±“[™2Çä4R–ç+GµÎêY1$óCVL%埣zHë+\ ¥%×Êü3f\ŸÏóå—ZcYŽª<åÅØå}¥2VêzêqaW?:3e,[V##ËýpÄDh–o”«<ÕšÈÊü:—·žBÅï!¥dþq¡V#&²2_FÖ+ô@\.ŸóÌò|k,[ü^gõŒ’ùc]`Ѹ¿i_–©õD2¿PNï¶DÀz@˜}L÷ó­±Hæ—YcÉ;ÿñÍ—c§7«ôý8e,›”—‘ee@6n5{c{äùÖX$øìÔòÎŒ•JÊ£ó¥—:UÆ"ÁoØ©§’ÅIëÇãù¥ÖX$ýˬÞÊ IÿÐ6ÌIŸªŒe“ò‡a§.Û´Ÿ×PÊŸuð÷ó­±HúØ©òË_Z4„Œ•jÿA\Y$èvêöóz& Ò‚\‰+¿Õš‹$}€žZÞzÀFL¥åÑ­7f.¢§ÊHñZË‚ûH}ɉ‡û—Zc‘¤pTË;0VNÒûÕº‰£zŽê¶=ìCÚ~|Wõ ŽjËóUÃôzŽ£ ¢Dp=‘^7Õå9!+ÿ¹ˆF~©YODT•§\½.ï<`=åôúÍ2ý*l»âßб¼9ð^@_ßÏ÷åäùÖX¤ÜlU™i„cÏ)wŸ­ª6)wÃVæç4ÛŠ_ ö^&mMDz=W•™˜(W…¯n>Òë÷È·3_žÛD«š"ì|û:xÕƒðªòFîö‹áU#R!‡W=|¼ªZQ¤Ø ^Àçíi3¿dþvE‘N@UË›þq•ƒªâjipE‘N7PU$6_g\ó©•…üRk,Òé¨jyçÆÊétªªÖétUE6 rÊùöÝÏ·Æ"À«â?Éû?ðcåtºWUÆ"nðªË¶"·P˲HxvðªáUỾž·Ê3#{N¥ûxÕj,«‚Dß…ªJ5s²ÇÎðYïçÛ•E*=W•™F+§Ò}¸ª2–-z? \¹uôÿL±’çc\µÎêèõ\5ô <x<Åw#R¿JP‚«â“׬¬Ë[½‰IÇÔ÷ó­±(¿^fõŒuÇ|VN¯ûpUµ²(¿^0¨75ûìØ ú„Q$Ø«¶Hþwx±€Ï–i¿È£‰•å¶™QÆ"½nઢ˴ÕL;;øŽr'¸*ò„c Ë´çઇWUÆ"ånઠÀ{›jtA+ë~¾Ý†”iÀUË;ÿñm˜ƒ«b5ÄD©]¿ÉHÉY¡XdÚ´„<ß‹|®ZÞy€±r™v®ªV)ø®ú@äuy‚c/t,ÑA«„V…û¾ chÕÈ×ðâŽÆ}–VUÆ"oЪhÛ‡[¾õXÂÞñ=:hUœ&Ú¢­2«ó5Œ¡UCÆÊ)x­ªŒE ¾A«>Á8ž—zóèôŽFb™“3 eÚpU™i€,ÍÁU®ZÍEpUùöZÏ\ÇU”zâÕIÎÜ¿Õú-Rñ¼jyë~+§â}¼ª2©xƒW·íB«Š§z·ûùÆXZ…' ø­aY÷hž#öE$ЪŒ,·ç^û´NuuÙ{¾ò|k,Rñßêù­a*>‡YÅ}· ±HÅ ê[Å/ÈôNª«;eñ+eݘÕòζa.ëîcVÕ6$o0«/¬ª³û§ÛsR°‹'âª<å&”åÿ¸±rÕC˜¤ßêelžü7ùÞ†/€ìO[ÕsúŽ‹ïTqIß ˆÂgu6bŒ¤°4®¶|’ªZ[”·$Õ}F|ø¹•ÃÑ!©â¾ëû5V™i€|¸h¢ c3ñLEµw›¨NaS×XÉÅw€©Së¬ÞÊV1sqLÆr‹åÕÊ"o€©hä8ôçÆ‘h?ÖñZ¤ãˬž±†eâ/âhÂXÁŠ[‰¯%9ó÷÷ðD´#¢þØ$DžoÅ©ø0Uf± s™x˜ZWSáošm8Íh‚=k±:ÀÔƒ€©uVoe +¿h¢‰•å^hUÆ" o€©óŠ“duzHY­0õ `*¼Øw ¦†¾†¹L¼LUÆ¢Ê L}m3ZáÛâ¢&õ LêQæòÖÓ0å~qFë)¨Ü'Rմ(²³mÒð븟o<aRå)WŒ Úu€Í)w“ªÖ)w‹IÏëùú|A^‰¿„I•§|c Ë¿ç0©ð±˜p¢ü»Á¤¢pY¿zÍ„ÔÕý|»²H·—YmäF:U‹òï:=Qí§.œºê SB§Êûø+kØÕÕ:^#æ³*#K†ô¼öå]]í S{!ö÷:«·²†éö‹*šØ†AÝNèTø›&ÈÁy!ú]}&ÄÈóÍ×À©uVÏXÃrï4a¬`îýAº½§>~öu›Ð¼îc(ø'ÖYP•§üm8LÁ_\Ó„±‚ žªð7møüÀ±ŽÍuý’§ÚõD÷2—·ž†ÕÍ\LÑ„‰‚u3¶ÅÇoð2ÊDðëÌq‡–Š^¸ôé ”ËÄh©Q•£¥>-µ~ú$× -H—ŠÝKÆŽ¿ä—ÚEr=ÀM-ïüÇÁ7õð¹©ÊX$× 7u}œWLœ‹©n*šbØ•খw`¬œ\÷¹©ÊX$× 7™”·è?—Ët¸©èBÆ ”Ëĸ©¡m˜+x÷¹©ÊX$× 7õµ½Ð¢Ý‰m:ÜÔƒ¸©ðbßó{òÎVV®\Æç¦*c‘\7ÜT\õz¢äóUŠBõ „*øjc “ë©4þôªÅXHض¡úÚpH?×¾<”é TÑ•…¶á÷.ïðtïcÀÊÊ•ÊøUe,J³ß#K7¶ IB¨¾;3ýû?7ß@B¨ÊS®î”7`¢\rÝG¨*‘H7Uœp=Àû|ÆÕA¨"ÉEëé-À}c}éw÷¬×ö¯ÿg$«„ðÿÿå¯ÿù·¿þÇßý ÿó/¿ÃO&Úgåh«p+¡°z³ößd¤,½zÌO§C¼J½ððo TÄË;»‹füóyªù÷ÿú¿¿þôßå?ߟÿñ?ÿû—ÃÿóOÿø÷~woJ8µ˜²§þš0–VöÐùPÒæô2ê€Wq7ƒa@â ,ö+^E”+ënŸµ=þõ¯Xõçÿ\õÓÙ?ëu¨þYè¨l¿ Ézme';ÑA²â¢µ5c™Õ‰&CHÖК»x¥ñ5ç"Yaµk‘¯(U&ño¬¸½‰Jy§m`Éz’®ð»ê!YcÆÊ‰ɪEâß YQç6ãVâç®48ëApVø·€±"¹ú˜±râß…³jc‘ø7pÖyL¸ñú9RêÀY‚³Â¿ŒÉÕÇŒ•ÿ:íVjc‘ø7pÖm~ÍçF”?JXtà¬ÀN“Ï ˆÿœ5f¬\ gUÆ"8+üM›~FOš' £òG58+n1’±â_ÞyÀw2'þ]8«6‰ÿ{¤(° wƒ_êb]³ëÀY‚³Â‹¶a$W[Y¹0À…³jcQÐÀY‘«Ç=» çfòGaeÒz¤^,`¬H®>f¬ÜmWž~óYi…¿i¶!Ž­¡0>ãäù&À$HkÕÓY‘¬}ÌX¹jÒªWUÛHëþÂQ,ÝQéYqÃŒU@ÐË‹þqG•#³ÂU8¡¢¶ÉvCfŹþ„´Îç½×!³Df•÷qCð™5´œ.li\¶»dVm,’í–Ìz]R¡_‡Çzë»{ ñXc&ʉu—ǪMDbÝðXÑBΉ>w ëa]ÝïG€Â*ÏøÅÊ1å$ºKaÕ&"‰n(¬èò@‚æóÑt‡ÂzìTN °Â«²¨1cå$ºKaÕÆ"‰n(¬øÜè¬jëo;ìՃثðS-ÉÊÇL”æ.{U™ˆØ«ð-JÌ?Ï}EZÞ½ßÔ¡¯D_­ó:š D_™+'Í]úª6IsC_E[M´.wÑtè«8¨µò @_…‡¶ýrÒÜ¥¯jc‘47ôUpjqNM ªÃ\Å.%¹¼é•äB2ý&ȉ¹ ?ÓrÜiZp,ð9.îÐW¢¯ÖY½Í7L_øÒ„‚ò’íz=‘ 7ôÕ—ÇWÕØˆ{§üè«ð]Ç)yª}¾"¦Í‰¾*#Ë1Î×0í—¯C\=ˆ¸ZgrVSˆ¸3PŽáäWõj"=nˆ«èƒ¸B’¾Ý!®D\…çú¾šBÄÕ˜±rÊÜ%®jc‘27ÄÕõ1-‹>†OºÌÐ$ˆ¸*O¹‘ž¼ówê9â*ÀÁ­GÝWW\G†6ß{þÖD¤ÌœÕò¦L”Sæ.gU¯'R憳úD14Àÿ|ÒÐá¬%Ïˬž§¦Ñ/diü»çrV•±ˆ³ /Óˆ„Ù“†Ïi–ûùveQò<@\•_ 爫@vÅ6Wed¹€[L›=“ú%Oi®ßªÎhµ¼ê€Ý—æ7þ´ß!R/(æ´ŠÞ³Æãc±hÖ"^¦õ¶ß°¤yŽ´ o\QtEÕVgÜœÀšr¬ÅÍe`-ªu/ÓzÖ&Ò/jiÂYEº-"þ fi#šÇŒ¤5B¶„ZyÞìDÊ ¨«2Õ÷V§+À¿"l®ûùOô*½m½ -­qiS·V7”Æb¶úEMüyÕÿÃÞëtI›y·UµÍ¬t¿ªR ƒAoÍêÀì"+ŒÍl¼šØµY„ÆÑï§[HÚÌk6£mfüýSÕfgô¼Û+»¿ÊcÆR¶ü]MçZjT ~/•a¿ŸìH+ßËPÙ‘è¹<^ª+Qòe€±™Õòjb×f£òìø½”œ¿ŸØÌêù2ôm³õM4FtçÛNeˆ±šõjj×j£d=~/•{¿ŸXà«e¨¬´çWÃöÏ·-Êc3«íÕÄ®Í"uñA?–JÀãý‚úÞ^fþ­ }Û 4°6«kw¥½­µñVÕÔ®ÕF%âñ{)Á?YiVñ—¡e¥­Ëë¡bH›;-ŒÍ¬æW»6¥úñ{©Ôüý|ÄfV÷—¡å;€IKÙŽ2ë)ÿÉ*5±k³QÚ¿—*™¹ŸØÌ¦èËÐ~O¸â£î™Ûr¬2À¬3«ÿÕÄ®ÍFåé'Ü&É)3Á›~;zrPè©w÷R‹VJYÜoÔÞöÁÿ’uÆZ&+åp¬øé î·Šàû :õ¦5,ë<ÙÅò”YR,ö Öú¶¤‹eš*]«û¶ÿÕi¨¶µä¶>VTE’p½3–b± °–ß²¤’bß±jK±Ø7$VœÀ>÷ÃØA±âßÎb?cŸqbÿ¢™fV—×]RÛŒÅ~d=~Àì[gÕŠ³'Áî!f¥±Ø0YO§7¨S%ž‹eUV#,ëýS5GóR´n«\–`0+fa±@³–_²;“bߥ³j›Ùr¼uÛ¶8‚}}¾V´ëŒP­jbONÈ‹ðýI©ïâZµÍXê¯\±Ù]gounlÆR¿LìÚlœÔ¿¨§LñµË¡­ÃA‰$ºÔË<Ñ“ú¶íÍïjb×fã¤þ…AÍØ,˜è·M¹OÑfúw4þA¦¬†â¬6¸×ñXêP®å×Gø³Ì¯,ʱ]ßa³çú@¹%BJ§1s`ö&‹þ2±·ÎB@×XÂ'GtÅ¿#(ú-Xà´™”Ô¼E?>ó<æ™—Æf¬ÿ€×úâ¾9Ä+~:˜ì·äŠÓf­þ_ÄI¸Îùé¾]`lÆ‘@€óZ_|„Í’‘€‹zÕßMŽ ëu:Ù4êTœÓ=Ø+þí p¯§¦i/bjâà_µÍ80ÈW”¥LÓRÏÆ;6{Kw³Î8P_Ï«Üãl–Œ\ð«²_ñÖ¦ßü„ú‹…cà+Ʋú _ËoùZ&Õ¿K}Õ–bõo±¯ Æí‰Ž,ïÇÚ5E¸×òœWnXb©¤æw‘¯ÚR¬ùæëòƒ¢fÜÝ÷®qœŽŠJ4QŸÏª?~-“ ±Z2Áï²_µÕ8Áoá¯Àj^ž‚íÐ_a3Nðø¯°Ù8ÕŸ#Àžn$V µp‚ß0`w´=8œ¶êå·ÌîdÕÀÀÖ , sS%>×óCëÊ¡Æî¡ïC‘×Ïw†TÖîáø=ÄXu™ÚÓýòê#¬–,òÁü§ÿ±ùÜCKaÔüÂÕ´"amù!¾÷c3Öýeb×fߊ|ÞM¾Î_=»|]¥Çg¿£Ùtù:ˆ·ù:½IrYƒë¥ÎeÙ º‚ìðìy¥ËTͪ‰]‡jƒæïݾîfS ÁëÒdõ'ƒƒƒ“Ý6KÖšûæDQ‡'‹æ !@”½ÿ¡ØMþFŽÙ,Yô*ûnû…w[Ͼ_W ð¹°m¯6`ºñ—Õdç”kµïà' ÅöO8·v/l άšÎ]y¡°!fÅdØà²fa3éúE¬YüÓtذü ݶcñÉ_§Ÿtb"‡Þl™lÈÚK†.rV[CÜ]ÐHgyÕd¸í¿pº³Ž,&êlyÎ&äÅGì×d0á’gµÍ8˜(ØsO®h©ƒ&sïPï~°]_+‡êìé#Á|lW&C<«mÅ!„!Ïž%µQDÛ=ÀØŒCˆ|6 …1›%k„\þ¬¶‡@»CƒåXt—)t´Óƒ´0Ç÷«¼å¡~,G¡Å+»ÊûsPáž¿“¸*7?PÕ!|xÜÁÐâ8€€hë‹ðc9-~Ú ”Í8€00Ú z89ðlöþ-³79€({*C^|„Í’1Á Šýp3LÙŒo 4LÚõg~âš/Šïî¿îW ƒ¥Å6Ž ÊÔ®ÕÆE94íéP¼PUY£§=O P”ì­4¾ü‹ਠÀ§­/>b¥%£‚ û}¥ñÑaÔ>Q‘¼¬u©u~¦ÎJŽžÆè°n1šuÿýÜ[Óý9Þ-^9¨û x[†¾mµü Àn©Z¶ŸÏ¾­]aD½US»Þ?tO8æý“1ÀÍ£ý•ùöôA·Tç_h §2z1ÁoÕÄ®ÍÆäø·x?÷ò@U³À-C¥PapÝ5ŠÍ8Ö¼ˬ3Ž8Üúâ#¾˜É3ÁÌ~‹›ˆˆ{ú¢fRv:j>ÛH9œwà¸е(>/»ël\ä╃rËÐz·»wpÿ–Yg(¹õŬ³'?ŒRî²ÌÛëáÏuP¹xްÜúâ#l–Œ\^®R³¶1j2 0÷‰^Ÿª1ª]˜Ø›b.þ—|P&ööfš‹š.¤l"£ábsµÍ8°Ü\„™Ól’‘§¥zyâå–ç|]"æ-•Ìû»Ì\m)Öýš‹›<Û¤n ð•5â¼€›‹qãtŽœ{:‘î‡Øj?jçŽlóþ¸ayQFÇfïÆó³þ/»;rœþ¿8³™Óÿ/Û ö´Y{ux™q*·}nrY´6#œ®šØµÙ8õk36»EôUö:ø aêîèâ…s2u$׋4;XÝ ;štY™ÚµÚ8ýŸãåž%¸;¹¨°mïÚŒçü|.îîì]ÞXÿ ¹õÅGhŒ¤þíוÆ'œ»"ɸ©ƒ“Η³wy˜Ð¹0G¤(Ï Åæ9z.¶FLÿ¿’[†ŠþíË(™gv0¹˜…õ”[_|À:Ë¡rOwÜ›¬ÿ ,wÇ9Ó F™üñ:ëÐrñ¬ÿ¼Üúâ#l–Ôÿ>2·ä3pŕԆaæϳ›ãç~ãøgr·ü/Yÿ°¹e²õyy6ñåôɹÊf¬ÿ :wA—TÔòl:iê°sñoç€=ãÆ\pÙŒÍb'hÚÂ묭ýŸžš*ü†+€:]üÛ9(h^OkÄ(º±o@ò€ÏÑ­ëŒ8º§'jòf nz.ª‰׳wHº˜…#2±k³q‘À…£Í¬³`$`Émˆ O÷ÌfÈÃ}®íuA¤çZ R·üú–<ð©ºjq$`°ºXd3ʦ¼ïfï€Àº§‹ ÔÉ‹øn&k|¸®²Ç†®ûBÏh8ëø³^@|ÝÓÅEl6®èBÑföf¬—#øО¼Ö鹫s:n‹Ðîboò9@¡÷ºþlÜ9@º{º“˜¦µ|\ø3ƒÝÅ2à DÏŸu¸»˜…ã€2±g³z7ôÝ̱wñÊÁ8À.‡Ófm!´XE§fƒøÞfÄ‹Y8 xë‹ðg×6±7}¯òg/ðÎg#9'Þìyñoç8 ÀæÅ¸q7.tmÆf±›/ûy;×Ù{hé _†þ.Î}° ³p@ô–_¡5.ÞmÆfÁ8ÀʨÓfæ0þ(9£ˆ©ÃéÅXVÿRoùÍ!–JªÖ[w$ÁzOÿÓ¨ÿiE»Ú™ë :ˆ^ŒeÍ_¦sýý8Í1l3k*¨ùmx®©6ûº#j˼زCêÅmvÖüVoùõ!«+©ù}\¯Z]¬ù ¯÷X_ØÆNœÔA÷Âfœû/»ël\îÿ¢äfÖY0÷OüÞÓÿ4;òxMgKr§^ªCð…Í8÷_&vm6Nóç(¾§;‰éW›:=÷f«ùÑœð³{ßÈ^îŸH¾jb×fã4æ{º“ Í¸úÿZjÌð¤zaÔtˆ¾go:+Óy–ŠA}CJÿBÞ&v¤õU^Œ3þ†ë‹¦A ö±¾ïà|a)Ö÷ ïéó†U`_¼ÛŒ¥Üþ?ÊR¬ï Ôå×gg 'ÇÓ¡úâßÎú¾Lì®®qú>GöÅ+õ½=Ɔï2lßJpK®Ø¬³Îz?ö袠ßúââÈ«aUfõ½-˜8mÖêûz¿l;ªÓwõî÷äWMç®®qu>9ÎïéDb^ž@¿e¨xyÄ>ÑzÅéŒÑAýbVúØo}ñ«KZžO´Ë5ì}’s¹ub4÷aCEêämÿ¸¡ààœâóýüÇ™ÊPÈÐòµ8æõ@!Uù³4`EubÇ™•a³\SQxï lFÑ ›=Qs¢ÌçØS›QœP'vmŠ"n >!¹ÎÜ8AÙŒâ„÷O)pÑŠÚZU«GÕÇ2ÀØŒâ„:±k³Pœ³YîF0ÜIpQ= •u¶ž‡tjoRÝ™ 06£s€:±k³P=PÌf¹›èˆ´ÕÉÐâÏP „2*ÏŸu"dì7 NìÚ,1Äl–;À嶘͘ ,Cå–+Z(­gå¯S±-CÌJ£˜¡NíZ-t:³Z®+(TÐjÈPYi`”âÈÉÉ@Ê€ÖfL®»6 4$ùpÀú°­~C¸6 @í1Ù~‚¿ÊcÆRÔé\K…Îb«+ÀWÕÉÐâÇpHp¶P,MôX—uê€p}ŒýX@ô—¡Ër¢¢KßË{€±Gœð$/>ÂfÉÀÇ +›q`pÂÈ.ââ¡Óyjêá„q–tY',“ ñgÉ'¬lÆúßà„÷«b»f4øÔä`ÖëÿNxŠá„CßË Ê›Ðe>N¸ÚŒqÂPaþ?›B`wòŽìtB[_^]2§,äuGìȤê÷qÂÊR¬ú Nx[÷×ô¬Å?ÕÕ+þa°ðT&vm6Nõ_HÞÌê ª~‹%„êoÀÂ0äwÔcðêzÿB»&\§s-u¿îˆÕ•Ôú>LX­.Îú˜ð<íÏ—º-×±Y/ëÏ0a´‘ Ä”1˜pÌw%µ¾V6c­ßÀ„·$cÑÉ«„GPýÔÏ.«£úÎûGpÂ2Ùˆ¯d'<ù8ae5Vý Nøùƒ«¬`úg¾=œðdIÅ¿#µ(G ÞþŒá„CkíBñ&<™VVcÝßà„·³·P_¬ÖáM–‰}ZM.»VWû“dO7·÷k4ÎŒ`Zîà”|žë}VÎúôÁ3‚ëÄ®ÍÆÕþ\|ÝÌJ Öþؾ™åû.2Æå¦“ÓäddïæëÉÊ¿LìÚl\æÿ¢îfl¬ýa0|Q{–‰³uõ¢¥GƤgËÄ®ÍÆÕþ\,݌͂µ?L†'jm¶=ÑyÐÓ³÷³Î8ˆð€åׇ|;“1€Ï®_Û€÷Ü›í½àWQf[^*–¹[^]‘|Œû^žÒ8³º‚ÊߦNK½‡¾=?´x£ê5¨œ‘íñ€'æשÝ=9. ¸0¹«kìÕûÓjm™?80è8È•= 0nóúŠhÿ8¶¾’Úß§«ÈÚßP€a%œ×*©Ž²è)¦O °<4Â{%)Àp#±ê•™•¿¡ãûx frªWz`ªÚƒ‚P€Ë‹ˆË“`8‘ ÍX÷ ðº!*·[àñïÇÚoãÊYþû·¼îK%³ü>ûWíHÎò7ìßÇÏëxÍ~Ízü‹ž$äÅ"ä_x¿÷â6Kfù}ò¯²gù ù÷D¿€dåíÈÎ}à‰É¿S„ü+ ñbÉ,¿OþU6ã,¿!ÿ2оRû«“óaò¯<çŸôÆÈ¿¡¯e’ü;ùäßj3&ÿÊP‰ÃQ}“9We€ñg¬õ#äßòâ#öfRëûä_e3Î÷òïŒ^Ù›½™yzþ^–ŸÉ¿òÜ—Õ5.ËqªÕ'ÿ*KQçøŸ&’D#^´®¬µ=\GphW“ëÄžÒ‘c;2™ï÷É¿ÊfœïoÈ¿Ÿ³YНéd¤GûÅ©##J_^wÄ>L*ý›¬û5‡8±Òoh¿3ª:H½–OäÞËò÷x¿ó~§ïWñ•Lò~Q%Ó­k}Ãû]V”]ãÉÇ®Åò[fOrmO„÷[^|ÀJKò~'Ÿ÷«ö$k}ÃûÀ`]v¯N¥ÇûEÚÞoyñ6Kª~Ÿ÷«lƪßð~¡ùÑLÖ»­t0ëŒU™Øóý1ÞoÈ÷_ÜÄ÷Òçý*›±ê7¼ß'”Ø¢Úˆpz÷‹~÷¼Î"µý1ÞoÌfIÕïó~•ÍXõÞ/ÊǸà,Ïý˜Y]œ×/Ó¹«k\^?Iù…‰y~¦üÊТõ—¥*¹J›±ÖÐ~Ë‹ðbI­ïÓ~ëêbÚ/î½µ· gÛ]¯Fõ‹[:¼##~yñ6Kfø}Ö¯²«þ†õ{ü †à¡êž=]viWÓ~áÚ5+òê#¬–Ôý>íWYuò¾Ow‡ƒ&á®´^Ï‹#€í÷Ýt ×EGØ,ø´_e3Žˆö‹[J‹Ó‡NƇi¿òœ“Ë‹´ÙÝ× ³¡¯Ù|•Ÿ^¶¯Hô5ƒ7ÉÖùh`e` Á÷½(Ñ0 ÌÈÚЀêzhàÉö£ÂÁ@ ,}Y”¯@_³w[­„ˆóÑÀÊf,40°øOï%=zhà‰ÑÀïÃÙ/Ç“&òâþFŽÙ,,|DßΦ׌g¸å{îƒíìp†•îpÆØ`Œj>Á(äÃ¥:ƒ.ÌÇ„‰6X&²“Ç>6x+½Îl3<l0î‡í>-îQƒ'¦×ÙÜ…ªŠ-¼dôàSƒ•¡8z0Ôà ÌàyöjªzÔà‰©Áðy¥£Çl–¼ìSƒ‹Í´Òõ\\m}Ð WÓí”8öº˜ ÉqD„,¿>dC&ãˆýû!W©lÆg†Œ"ÑeQ}»8²¿´6cjðT&v÷fèô ¶Î’qÄÍçýn3Ž#jðãKG N|¸®Žºcf°<÷åCúžlÈ:KF>3X­3Ž" 3~ÿ@íS#z0댣ˆ3~0rÖ[gÉ(Âg+›qAÌ`pUÀÚùnö¢fOf°<4b%™Áháå’”Í80(hß»§È•8½¨zÌà‰™ÁòNþÞ” r“ÌàÉg+›q``˜Áó‚’!nx,¿`v$ŸDHÁåuGX*ø¤`e)>;0¤àmC'Ý!„A´õ)¸®3&O†Œ;Áûtv¹¼ÿøkÙ#eÄë,rCX^|„?Kªÿ›ÊûUÉ2)x2¤à”°jœ3÷)xbRpØSÿòâ#l–Tÿ>)X­3Vÿ† H0>˜î:ë©&ÃÅ"ó)8¶7“êß'+›±ú7¤`´mºŠŽÌï­Ö`R0kÄfãÔ’ wû0)X†–¡/¬24"ü\Ó#OL ®»{3Ô!4´Î’¤`¸“ ÍXý7¤àíg}l8Þ­Åɽ¾+ß ú DXÁåÕx´$+xòYÁjw²þ7¬`œ¥GZ=÷‰è±‚qýŸm¹',/>ÂfÉHÀg+›q$@¬`ôzz‘@<1+|Ó€G‹±‚c»3 Ü\Þïjƒ#à žŸO\·PŸª%í±‚'fÃÉEl6.H²‚áN‚#à ^yV Ïì ª»{Ôà‰©Áòœ ȋ؛ÉsŸ\÷&Sƒá‰šƒ9h |8«Úèø³^¯ æ׉½/§¼ø›%#›Õûuo2?ž¨±Ùs?½ª‘+´?…!ü ˆÔÉ‹°Y2ðùÁjq$`øÁXgÇa¯­Ÿ;²§ÿ™,Ï}Ù‘ã²ÿIj0œHÌ‹15X†–®;Z*j0Ÿ2õ¨Á´xuEô¿¼øˆÕ•ÌþûÔ`µº8ûo¨Á€6ûæÕÃßÚ˜‰©ÁS™Øõbãô’ '\g¬ÿ 5´Ãuž½Û‰=~ðÄü`y'oÆøÁ!U–äO>?X­3Vÿ†¼¾Ð¼EÑ;ŒŒƒ?ë‘„'& Ës_lê³YRýßÔÞï_KVÿ†$| ¹ZC;¹ÆIxb’0\\@ÉÊ‹ðgI’0jŒƒ{“Õ¿! ?ÑåxÛ¼šÈ{€ñg|! —a³dÐÍùý¾ÎXý7$áégÝg|6{YŒK¤?ú^– =ß//<ÂVIÕﳄ«c–0ÂfIÕïã•͸úÇàŸdÿ£j îFxhö$Î¥ØfÕ//>ÂfIÕ/¼Ý>³CÙŒUƒ^~pš9ãƒYŽæº»³ q9[-rCǾ˜É€¨à»löÏçq%ÞŒ†/jvçî¦×K±”ûé©s ¶ËÄ®Gwp¡s'š>X­4Ž øç¤ëÌ8ÑcÏÌÆ<•1,€ƒÀïÅmö~þ##LÙŒ"ZOMžû¾ÖíId€ñh”ÿ¯;물ø÷hpI›¹ƒ”Í(xÿTåÝ¢¨ÐŠÉå1c)Êú×é\K Óýp IKÝw¾ú~ÒýïŸR–:·#ZDË_guuêæÕÿÔ‰]›…:E ù™ ŒÖpMl‰âbœøR½§`}%iÀ(ú1Îõ0ÎÈ7¸±Ï÷ðå·ŒÍXÿGhÀåÅGØ,©ÿ}°Zi¬ÿ —ÛÖïG¿ûhýû?Kq®?–ÉF¨þ‹Ÿ›Pc>XYŠU¿aÏgÏ3F}¼³´Úµ’Í8×aËdŸmv÷=Ãgß³«èøì÷´Û¾gx Ñ÷l¾8ºCË_‚t3À`tЀ×ãTGŒ+Ķà Nç}b˜à=ÐíìÝb+c©``À˜à÷OÕ”ãÙ  >ȳ90(üa×f¡À f³d`ð|w;CÏ·³ÛÙU|®þãìv†½êvzŸm®„Q0YÑø@u>è$Aî­=&\'ví bö<ƒ€Ìtƒ†CºƒÂ6{• µÈà¯oØ nú°± …RìÚì~qÿc³Y2hð±ÂÊf4¬0ÊÞ7&˾å á`lÆAC+  b6K >VXÙŒƒ†+ŒdÛ•Ô-1*áž{Pa|¬ùû(’ɾH•Í’Pa€Y=!¬lÆáC~ü "+͹Æ/¿eÖ¤pyñ{3‰FqÐf<4Ha¬³բ긘“m÷c3"@áòâ#l– | °Zg<ÜCË7ÇÅȵ9¥= ðÌ@adìî²÷ a³dÉÐ ïýPö®lÆaDð 쥚lî…ö=¤0úrG‹ …á ‡}’HáùÆ÷~·¤0NJNRº|õÂ`²Í-CË‹Xi¹KU1ÆHaZÊE7ÜáG[øÏk)<ÛðG{¤pyñ6KF >R¸îNF õÇí¸J~†òÇÇT=¸0øw¼Î—äׇ¨d$pã~¿îM† Ã56ÃÕ¯íé*´ZÝ™Øf2±û $ÑÂp'Á½É‘€A £®r:MÐä·ZµÁayν˜X^|ÄÞLF>dXíMŽ dø…/Àóé\†ëê$à2,Ï}±Yè ! $!Ãp'ÁuÆ‘€ ŸÀCWÅÐqh2 r,íÍd¸¼ø€u–„ ÃmÆ‘€ oØ™i9Qz7<3nXÞÉ_gòâ#l–Œ|ܰڛ XÜð~œ$'èá†gÆ ƒ‹ˆb¸áØÞLF>nXÙŒ#ƒ~É}‚>ä³A÷ó à8 ‚žåÅG¬³Ü¥a¸“àÞä8Àà†…ÚỖõY7 *û³Hà ÇÖY2ðqÃu1nž¨Õ´è±¼ªÖà Ú=À¬3>-ˆà†å×GhÚ î›Ènû¸ae3>hpïŸ×òÚ^=ˆ\VGc0pXžûâûÇ$Ã`8Åö¤­ZĹ¿@ƒBÌT|?gÎzÀaÔ‚óžŒèÿp8¶'“'>pX­/Öÿ8 ÐüKqt = —Õ[g|P&öb¦z8f³¤þ÷ÑÃÊf¬ÿôðãç˜f4Œ«ð|A±Æ5 ^g‘“yñßË$xxöÁÃÊf¬ÿ xx}¢?y ™:§t÷€Ö÷Û{ ÈEÀÃåÅGØ,yeØ+›±þ7àán'nG…²Æè‡Ñ’ÖY< ?8,?{ñxßK<¬lÆú߀‡™¯hƒæä{àáÙÞ®:×YDÿÇÀÃ!–ÿ›¬ÿ xø‚¸ÚŒÄðDþG`¾¯sguõ® ۻȧ¥"W†åuGX*™ý÷ÁÃÊR¬ú xx[ÖUã`ùRg< Iž?’ý‡c;2™ý÷ÁÃÊf\Ô€‡qnŽndº]+Ùvý¬ØfõÃÇl–Tÿ>vXٌտÁ¯/äþ!–äZSÍ÷€V•1vXžûâùÇÕ]4ÞŒÂp/+›±ú7ØaØkÆþtŠ»{Øá™±Ãs™Ø‹˜¾b‡¯.Q¡u–$ ÃÄƃտ! ¯¸¢šŸ³Îz$á™IÂòNþ:“𠸻‰uæ“„Õ:cõoHÂÿó±Õ dü è‘„g& ÃÅ2Ù1’pl%³ÿIÂ×ÒV6cõohÁ¨i9pÀQe÷ãÏø:A„<Ë‹XgÉì¿O V6cõohÁ à.ÓZ hùÐÏ †‹‹¬³qU@O7³7ƒÙÛy™FÆ-Å- o@<38¸Nì}bààØÞLª\Ö>‡T§mÀÁË´LðgÞÞìŶ')â€8X‘ý¿ »™uæ¶R6ã8À€ƒa°Ý2­Ð¤G ž™,Ï}ùXŽKý_DÞŒ¡b©l5^\méϸªög|„Ù£ÏL †_‹8±q¥?D7c³XéÏjÛ`ŸN¬í €+üXÇR½„ÿÆ ÿ#X~sÈ6L&ü}F°Ú†,ù #øl¨½=¼BŒ{@++˜-¸®3¦φ ÖÕö:ܽٓüL ®»ß€q׃/ˆnÆŸ%?ӂቚC—A+äËç=F0j]xGFþ1Fpìk™LøûŒ`µºXó7Œà¥Q`ê¨&ä¿þÔñýo¡Þ~/™ ×Pý1JpÌjÉ”¿O VV㔿¡£Énÿz)ÿ%xfJð¡ËCC¾—IýïS‚•ÍXÿßCåÓò˜ Ì\-Û+øgJ0 º#ël\Á’ ‡û^Z”/ôC >¯K£Îy“õþã½ÙcÏÌ®{¾_^|À÷2Éž}F°Zg¬ÿ #——Ðô¸¦9åßcÏÌ–wò5FŒòg:7ñ½ôÁÊf¬ÿ #ø…C’‡ê™Á1SŒ65ôåŒ0‚á‡iÙ‹¯›±Y¬àž²e†üBë{uõ·SŒ×cÏÌž#Œ`yhÄ7 Ɇ; ú3Öÿ #øõw°r…Ñõ®K÷(Á3S‚å­¾ìÎPçÐØîLF>%¸îN¦Ã5j7åvÔü;Iÿ{€Qh\ò_&v¿ã"€«Ufw#¦¿[f)^À¿¶)+²þ=60z°‹D16plu%#Ÿ ¬VG† üD¶~w)=JðÌ”`¸¶€.“ÿ¨1¤Ú¾¡蕘½ pañ/ýÏ¿ýõ?þþëoøŸAªiß2Ð’Haxœ˜Óc¤° áûz¼VÝ[©óqí0R¸NìnßH}ÌyÑþþ_ÿ÷ןþ»¬þ?ÿãþ÷/ÿ†ÿçŸþ~÷ïF\™í«Z7 Røìü„*ùœ\ë!…gF ¿ÿ §_pm b6K"…á{>¬3é‰v<Ðm¹ê}Ï}0]=ÑöCõD[m¾„Á è´á¦ôçÛ‰=Ü0<(9Æ2±gÏn8hÏäÍ7 ëÝ ÀÕž+6“Ÿp1­/”Ë›q Ñà #\c›Ej‡äÅÝà+h³dí‹Ö6ã@Âà†Q>úÜ€ñþ¼o{¸a´f›En„pÃA›%\ܰ¶7Œ ÿ±«.%uÖ»9`ÏóñEŒà†å!?Ú,ysÀÅ k›q Ñà†À ¯ûè1ùëØ¬wÀØa¸¸€h a‡ƒ6K†.vXÙŒ±ÃðDMqà¼ê¨e}ÛÖ=ì0¾Á¼7#wBØá Í’w\ì°¶×ìðþܶI%zù6l;Œ|:Û,P„°ÃA›% ;¬mÆEƒÆÞ\Ð"ú¼Ø#t0zhÂU¤‡Ùf‘€"Ú,y àB‡µÍø@Á@‡QÖ‡\’W߃/.(Š@‡gyñZ#y àB‡µÍ8F0Ða,à>l=€ç"¬txaè0\\ä0,F€{ÀïÅãª÷óŸdÚft‡@†J,гd0°úQ`ö&Åub'(/þÇ×ÜCÒf^A‘¶(¼J¥’8­^Ñ‚ 06£8 NìÚ,rƒ8äÏà’6óðÃÚf¼ªÚì<¶:§#š 06£8 NìÚ,r ´Y.€;qòDÚfÈÐ î }9wd€±Õ‰]›E Š‚6ËÅ ¹mFq€ }Ûìù³" P°£^ÿUb¬F=„êÔ®Õ" A«å"å†ýö{<ª•ÆbZz‰NÛºÖ‹d|t%ŒÍ(¨»6‹(m–‹– Xør2€X†Ö/ç’2•Éc­¥;\§s-¹F´TNÿ/¦8b)Òÿ2ôm©íg[ÇZS@[çO†«QP§v­öd4ˆI~1½S½')xÿTýb®îæ3ºG3–"Ý_§s-5ìlõÂIKygÚR¤ûß?¥-õzmª(žr?2ÀØŒ:Õ‰]›Óý™7¡û…äÛEk›±î¿‡ÖîÑèëïj‹{€±ëþ2±g3yñº?‰ ^\±¶ëþAü‚xƵ ÕÜÝæ1ä·ŒÍX÷GÄåÅGØ,©û]±¶ëþ@¼"÷Eöêyüxxað0zÏ}Åå¡? Fž&¦]mC¼ßÎO“]q¡ÿ¼žþ1O&Ìúb½_&v÷ä8½ŸãftÐf¬÷ï¡âÇpz»œ5‰M‘ò[Æf¬öËÄ®ÍÆ©ý$xx¹éÁ_Õ>ƒ‡ehµð¦“ÓÍK›±Ú/Dc×fãÔþEÎ|/½ò!åÇ< OÔìÍýÓ“½+³î¿´6cðpصÙ8ÝŸ£olo2xX†Ê:CÕíµÙŸ‹•e€±«þx¸¼øˆïeRõ»àa½ÎXõðð²£úÊ–oü§¢S„c{B"ϹÕ-òЯeRõ»¸am)Vý7üÂ19Ž|kí(«±ÎõefÕãXá½-¬®$xYÓàŽdÕ߀‡Ï“¸uzyÕò[fG²ê`‡Ë‹°Y2Ûïb‡õ:cÕo°ÃOÜRYÕµNªÖ[îÆf¬ú#Øa™lÄ޼ཉ¯¥‹Ö6cÕo°Ã*Xžª_(«²{€±gû#bøÁq{3™íwÄÚfœí7âÇä»*”¢ÓK¸®ëŸilÆê? –Ɇ¬³d¶_ ½ß²Ì^ S%¡+.B;S. ;Ów³L쩲]8–½È¼™½y‹èo6cºðR Àï*ÆT ;ßÍ{€Yg¬þ#taùõ!ë,™ëÿH¾êÇkå'„Cƺ{<€ÝüX]&Z›1A¸N쮳qêÿ¢ïfÖYPý3Ax) ß÷:ƒû‚MäÙìý[Æf¬þ#aùõ!ë,©þ]‚°úX0&2@– ŒF¾ýáÙ¬,DÂòëCl–Œ\‚°¶Ç† ¼!+»?ë•ØŽ>ëÅLê4i” i“aÜÊŠdž ŒÔÿþzROBù³#YýG¸ÁåuGX*©þ]n°^]¬þnðþƒ^q‹ª\ìž]öÈÁËÂú?Bke˜–½€º ßï’ƒµÕXÿrð1óô²²=rðÂäà%B–‡Fø± §›±Y0û¿°þoÈÁŸ ÍÐà‚(‹Ñ£/L ^"´`yhˆ¥’ªß¥ëÕÅ9C ~í¨ÂF>Vþ8Û£/L ^ÊÄž“áÇ’>.-XÙŒiÁØ~Mþù²oõDßϪ?B –Ɇ¬³¤êwiÁÚfTëÿÓæüÑ÷pxG¾k-ÅŒà:»ºÆiý‹Ã›ñ]A­ÏŒ`øŸÆRÏmŸ¶—sËK›±Ö/»6»_|ÄŽLj}—¬Wgú-#øäÄŸqå§V.ذ|3‚å9?ç//>ÂfI­ï2‚µÍXëFðÉnUJ¶E>ÎIzŒà…ÁòÜ›Ëù#+”ªð¿žTßͬõï¡r ‡¢#'¦¼˜½Éª¿LìíMyñë K#g³`…¿=B~ý”ª(;ãptÀ‘?bjÊc3Öüeb×fã4ÿ…ÎM|\F°Þ›¬ù #]ãpÍËËÅþÖÎfçz\·Ò·ÒèQOÎÎö¿ t©ªah¤'¹‰É ·ßË?´d.nšÄÑ‹$ƒÀÒöÇ’èEŠâc1‚fãnE 1‚c¹Ø›±YPó÷¬ù#xíሾ¥ª€µ†ÅôÑû_XÀRJ䮳v?:7c³`Å.˜Ø÷¦\Ƚòרð¯?œÅ°ÁPr”ó¿'vmÖ®âçàëflÌù3#xPŒà RàªÝßΑYŒ`àxØf›¾òë-Ô’ wË‘u¬þŒ`œ•#ÄÔt\ Œ¦4l¨ÀõÞûm[|,wMœY\AñÏ€`¸Ÿ‡øŸûnDsUO`X‰~—‰Ý ÙNüÜ܌͂ÅýºŠuwbçÐS”mô½_w>üõg¡¨eÈSbè¤íîúej×jí ýrnÆjÁBÿŽåÿŒÞ´¢}K”i–[`4ËáýIö‡ Á1‘‘„Ÿ}®@ÇÀ<V0<ª ÉLa[˜à1ÁòV~Ø$|ã^í ç&Öš‹ ®ällj… î±hp5Ú ,LðÀ˜`šrö|uAÃlè‚6ÅÊ{÷§^wAÉ.hC’)|>Y–/(¦p‡n|_ýßX‹$<0IXž{YŠ¡Ê >Ðûìl¸•YŠÁ(¡ã(áAž>{à %ï?ë6Å5D},¸6èžÚûX„XÂXzïãàCr²ä'Køê~† Ñýl< ‚÷õêÑ ­î~¦/[âóûà Ÿn_|jÞ´¨Ñ/gZô!‰†å÷_qÌ¢É3—4 ûIÿ3& Ù=„þè¡ïÝG¿¨UÈQD„9,¿ÞÄfÉ3—9\ÛŒ£ÅÆeôµ)N…šÅFoW^g‘€"ÄîÜd@á2‡k›ñ}ásâxÙ%ž0w§R0uÍç"ßPHÛÉó—:\[ÏuxAgªYöï©uŠÀ¬ayîå{ #b–Jž"²×®€¬ü‡Š5<ÎhvP/0:á³Xó†‡kXjáÇ’¬a¸/RÙŒƒˆkxûÌ`ÎT^l³ö¤E˜6,o寴m8æÉ’´áÁ¥ ×{’ƒEFeÚu¼¿E˜6,ïôb³Ð9BhwÞ„ÚuiõÍ8.P´aЦ¯qÊb 3߈0†‡c8¸º’7\Æpm)Ž c¨Éq®îðó- ‹1<0c®-ð•”÷ÃúØêJF‚ê}õý\;¤ÃË‚ªWt#ü]Ém1†f ñEl:=ˆÙ,©û]ÆpYgÐYÏÏ¢%ÅžêÁ™Ë ¡ž—2à©û™1\&ö¢Oyñë,©û/ð;Ö÷÷rÐmcw›=k‡s[ëþ|âbᆑq"ÝOìÚ,TE[gIÝ¡}ßmƺÿ¦Ÿ'{{}Z­1ø4Ô Œ†‹‹ìÍvª?‰†; é²qÃ2Tª;fÜãü] yýÖso2x¸L쮳vúÿ€öf†{ŒPíMÖÿ <ŒËœà’^̺'À¸aÔƒGVW¨v(´#“¸a8‘àêbÕ¯pÃh¶¸(Ü|Öná†Æ Ë;ùú5„Ž©²$nN$h3Öü„îq½ÎËøX¸apÈóGpÃ÷‹7øZ&qÃhé´k~…F¯£yª:D³ç·pÃã†å^ÖY»SƒÂ›ðb.n¸Ve¬þnxíÐÿ`-w,Œ½yªzåùùL ‚B¸áàÞLª7\یտ ƒšõEOUÏŸYYÆ Ãž!ÜpÐfIõïâ†+›1nžè‘õq#ÀQÊ‘]©ÕŹþ{:OWÈë¶ðbIÍ/ÔÞ—Ø{â$îçõÜNÏv8¬Ã´O›1nXž{ñbí4ÿÁàÍx±K:¿ÚŒ5ÿ7Œ*«õ}þ×ÒÊô3lxˆÀ†å¡¹ØÔ›±YPók†&bK^¶ÿ¿Ò¿‹cK 6ŒÎB¬0"¥CBIn±7“96\{1Öü 6 <óŠÛON9Ç5@íM.ŠÀ†A5>¥Q›%aà ®mÆê_Á†ÑŽd‘’óµ´`ÃÆå|‚ Ǿ–IØðà†k›±úÀ†ûjfÑ*ª,3ëœÄ £•íÎ{jïË ­–ìêâ†k«±þW¸áqšºÞC4ÃyY_NÎþGpÃ2Y‹¯@7<\hß×lã†eèÝ])Ç*‘­SE8ùµpøÊë,’ý—oáÑ’úßÅ ×ëŒõÿ7üEeÁÖM!†o[[°a’~(º½'v÷f»ìÿêM¨ 6\ÙŒaÃðDý?u_°†½.ŽlxÐÅn³ÈÝyñë, ½÷MÕ2lx¸†ÞwîÆíÑ•–sv™6Þ›‘ªŸv8ø Hfÿ]ìp½Î8PØa0‡û±ˆZMeÚý™ 0vXž{Qí²ÿI’0ÜI,oÆ$a*ëlD}*3U{ýÖSÕ2I¸Lìú³vÙÿƒÖ›ñgÁì?“„á‰þla±ªw°HÂèšÆ{3rpMÖBk$IÂp'ÁuÆ‘€¢¸£؉ X´àiÁòNþތтCg'D7±Î|Zp9ebZðð ¯è–®»M6X‘€Å ˜\¦övgŒ³Z2ðyÁ•Õ8P¼àmúð÷y¦Å ¦ƒR¨{b×fíNÖnf¥¹÷*›ñI€â÷øÇ¢­/eh¯Ç”ïgý¡Ãÿ5ËhðÜŒ¥Ü»Ã•¥Xÿ+JðÞ°GAÞ}ïŽmfåÿ™ ×ÈÿÇ(Á±™Ìÿû”àb3¦Ãÿ<¾—ýˆë'+×–Yl`*&Ú÷aDõÇØÀ1K%U¿Ï®,ÅùÅ^úyôö]¬ú-60V#)‹{b×wµËÿÈÜÌŽ æÿu©!rÙŠ õºý]g±Gf—‰]›µSý27c³ ê×%­»ÍêËÃÈb í „‡c3£æd6p™ØµY;Õpu36 ª~]0½Ûì©úû •,Us>Ï´ØÀ#³ËĮ͚åÿáàŽã6;ŸÿyC³òg¤úe¨D—øVb{:•,2à¡0pªýY™Ø±Ùýâæî!i³`õ¾òîðËíÞ³†8,'-&)KQοLçZªY?œBÒRÁš}Áh·”´õ9-5¡£Ní§Ò—Êf”ó/»6k¦ôá’6 *}-áw›Ijþê}3¯¸ºäôÙ“Êf¤ùËĮ͚i~8…¤Í‚š__”Üm&Òüª*î¦/ ¿sd2@ÙŒnú–‰]›5Ëùß7ãùÝ~AÅó3øü©ÒÿlEâµ/É R²2@ÙŒªÊĮͮoáùsêôyÀ•ÍHýËÐ;‹%†ÂOQÊcOK1¸LçZª™æGJ/¹#ƒš_#‘÷y½-5}g4õ<¿‘éu£„¿ª‰]›5Óüc’|>Ðbº½Ån³§æŸ{Ô¯xúU¨uF5?eb×fÍ4?n?&×YPóëN+»Ížš‹ ,ýï{K2@ÙŒ2ýeb×fí4ÿ~ZÑüÇó‘uÆšÿzW@^,³SÈlWb  iþ{bÏfòâ <’ w;ѽ£°ÎxÛ»bt…CU2@­3Vÿ.ðýâ-l–Tÿ>¸úZRž|pq:2mœß[Ójå%C”ÕXÿGÁ2Yƒs8_&wgPÿ3!øü©º/íŒúOÿ_ä_e3ÖÿB°üz›%õ¿O®VåüÏÞX•–Ý›¬ö‹B(›±þ‚e²&6Ëåüá‚b Á2T¾ÛŒ›˜kù °ª½~KÙŒõ„|¿øOv5?Ã{ó³£ yoþ4êægx Ñü ,ÌäF¾Ô÷[ã„ÏŸ*‹u.ý¸–jº¼#žfœp™Øý̆†1ÐÐë켕J}œpÙÈŒ>ªØl9›%ÿ>¼“Êf(»6 … 1›åš¡›ê|5AÃ{´£ôwßÓÞ ÿªª õÕÞeË3¤@ ã§/°Z¨á‘QÃe:׊¡@"fÅd ᣆ'i|†nÅúbϨPÃ=ºÁOsQ+†ÍŒ«Ã#£†ËÄ®ÍBDÈfIÔð裆+›q ¡PÃ@™®G×é+̧K*ò[j·r A ß/î‹â˜Í’‡>j¸²]VøqÔ¾aGVy‘JÓd€²Ô°Lö"Ub6K>j¸² 5<#™4f®ËX{#"¨a™¬‰Í’a„®lFCðDuÔð„¦„¿Ëùd€ZgFDPÃ2Y›%Ã5\ÙŒÃ…î— _ ï`¡†GF Ô°<ÔÄfÉ0âÂúþ¸¢RlƨaPSªu¶|Vô&¯+mÿü•ɵÒ8ˆÀ†e²&VKÆ>l¸²$(Øð,Ô–ÊQRh×€§Í6<Þ{jC^¼Å—s—̉Øàû¾¯4º<€½‡G›7T¯¥£¯¡6ÎÊfD`ÃòëMÖY26ðaÃÕ:£†¡ðE›ujó4?êÏNS–⃄bX&kb©¤þ÷Õ¥Xÿ+ÄðŽèéª~ÑÆê²ô?#†ÇbXja³$b÷o¼Re3Öÿ 1 ˜éwKª’µì5@­3ÖÿØðýâ ¼ØAàMx16\ÙŒõÿ6ü©a[¿St6;e3ÖÿÔðC ‡ô5<ú¨áÊf¬ÿjxAûˆ­Jïr©‚…5,ïä^M¹_¼Å:Kêÿ ðûþµdý¯PÃÈûà‚¢ƒ-èðÈÐayîÅf¡2¢Ø:Kê:\­3Öÿ : ´ÝŠ>N‘:~¸Zg¬þ~½ªæZk{ÓºDÀøa¸¸È:kwp ~3úÌ-(ªlÆq€Â÷hï…<нθÐÃÂŒú9b³vçIü0®ÈÅâÆËлB7ôõ9ïM ?<ŽDðÃ÷‹7ðgIüðx¡~ßýÇ ?Ü£ÊVsò³×õ à8 ‚¾_¼…Í’ç>~¸Ú›(ü02 _¬3ç»iᇠ7ÓÿL–¡¢1V¬/œe:1“Å™=\&ö|Œ=òýIö0Š‚6cý¯ØÃ¸ê3­h¸ô;d±‡ÑD“|„=|¿x?–Ä ì÷ݱþ×8áï¸fŽÈ-œ0<[Jn'»«+t‰8¶º’ª_˜¼¯¾‹Uÿ'üý ’¬Èr—Œ3?L q¶™”¹6k—ýO„áD‚;’Uÿüýôüs…¾åHé ¾‘|‰ ‚ ¾_¼ÅŽLª~\¾‘Œ †ÿy(صÐ/µfìMKõë=Œkž\°<ÔBWÝD†ÑÇW6ãì¿ÂCu¸|íyþSÍ?×ã‚áâ 6† Žù³¤ê÷qÁ•ÍXõ?pÁØ›à¬ÍˆÊï?ª—º(›qö? †,¸²«~ A`Eþß¹KaaƒGÆsYgí²ÿr7³7ƒÙÿ/k~… FÐVooZU@Œ † ŽØ¬úObƒG\­3®z`ƒçîxö[Uh`E—6ˆfR÷ÔžÚˆaƒC-‰ Fb0¦6tO)ÜÌQØàé²NwÿEež \¦s-j"³T2ëï«õŪ_Âa© @éß‘’… Æç‚WWDÿǰÁ1›%õ¿ ®lÆúÿ î?hSrX1™U•mƒéa«E"€88fµdÞßWVã@ƒ‡µ,nLnƒÑkšmh ÿ×Le<ÝÄÓß6ƒ°§{s <#Îüö^‹¯k€Rfœ÷¿'v=Z»¼ÿÝÍØÌ½\ÙŒ#îЛ¼Ÿ½¨É †“ ¨ !7P³t7c³KH¿d4z} nÿ^>ëæy¾ÀTülˆ)žëŒÁÁebwµ‹’à`¸“Æè,C :`ù.‹×Í .»6k$ÁÁ(ÚŒ#ãxiqÕ†0BXÞÉÏÿË‹7Ø›I„0ÜIÐf(„0–"bóRÊY !<2BXÞÉ·Y !ÒI„0B Í8ÿ¯ æøÜoÍYaT’Öˆ „ïo±Î’‘€®¾› („ð4CkŒ•¬¥,…:m‰äÅ[Ø, øáÊf („p÷E7¡ªÆ€³Ú×õÝä8 ‚cáØÞLÆ>B¸²Ç!ŒÒ¯~+÷š¸–å lÆq@! ?Ø,8» }æ#„‹Í! OT,tgÖ£”3ZY '™ÕQ€¹;­» .S»Vk œÝÌî ÆšÆº¯4IÚ_­¸qݨFÉßN+Ð •Ý£EN^ÂÒ"mÙÐ"m:Ê“÷ÖP3µH[¶L‹´$}Þ'&‚5$Vôá­CÙèV´HÐYôá‘éÃeboQÆèÃs¤EZ’>|öñz/èF %Üôáï§›æuÓa,âðÈÄayαbÄᘥ’áÂOâ°4F[{4F›Ž*á}õ/Gc´µ«£õÚkí+O‘ æ · J —ùY4âQ{ZlíXz+1{&C ŸF¼H‹´žiÄh^ø++zb®ÖW3@ö5xP^%î‰ÝÝ**ŠÙ,Jø4âÊfJ(1Zlb5–P‚ ±,1®:’À‹Ðˆá#¡DÌfÉ¢"ŸF\lÆ4bx©Ç:C½Œ'5bшч‚m&»ë,t¤³Yò*O#®lÆG ŠF¼GøKEpæf£xd1\\àH!F#ŽÙ,Hø4âÊf\T¤hÄ€Ó¬Ó·ÃðµE‹F<2°"6 )Äl– $|qe3.*º†Þ¼¨ }Ùu÷üVðÀ byîE}„‚‡˜¥’ …åk‡\•¥ø A1ˆ÷ ±Kç$X â‘Äpl‘Õ*% Ù,É †ñâÊf| Ä3 ô8pB{‹A<2ƒXÞÉ_g1qÌfɆ¢>ƒ¸²Çñ—{6\¿.Á=+Y‹@<2Ž-°Îbâ˜Í’‘O ®lÆ š@¼°å¯3«¡¨>q…úˆå¡ê?I †; îM>HPb-oK•ª4Ö™¥þõÉþn³HAQŒE[gIõ/Hß×o«ÿ‹xúlŽ’«O€•v»†Sˆeè©ö‡Ï4 ^äXgú/Cù#ªâõ¹D ¯Þb}%•ÿÅ~__¬ü‡ݾèòîä/,ñÄbÀY">¿™ò‡[ÀïÅ}þùüϬvµ'IùËЛF¶÷¼:¥j2àñõS¯³2±“ó¹_üï_gpI›¹%D•ÍHùŸ?U`)}q]å­OOd€²••‰]›….D|?ÜCÒf×Ü7EÆDâó§*›-@ 覽¢pÁÐû ðê Éd ô>œBÒRA½Ïâó§*|Z®ÂT¿¯Üɵº(Û_&vWW³l?œBÒfîâjG’Þ?ª²꟡÷lf4š¾”í/»6k¦öÁ¾IÚìJš¿íHæŸ?Ul²Ç¶ ôÏÂn ÖeûËĮ͚eûá’6sˆÊ:›HõŸ?Ul†¦ÛS?”Ì5*É€§Í˜H\&vmv½x‹¯eNõOVøU•1‘X†Þ (–Þi¸!”Íè q™ØµY3ý÷\gAýÏDâó§*å: à¶Pœ©°[(›‘ú/»6k–÷Ÿ’Dâóù€’e"± ½×8±Ûä`*d€²‰ËÄ®ÍÚ©ÿ]¯dÔÿñ|Äf¬þ¯¡b3\RÁ' „LTÒ(Ï )›±ú¿'öl&/ÞÀŸ%‰Ä“O$®¾¬þ‘‡½¨+sð’ò[Êf¬þ#DâûÅ[Ø,©þ}"qe3ÊûO"ñDb\ (êLg\”Í8ˆðˆe²qÀÁòMDæû÷ý»Iyÿéz_"C³½µêG§ä2@ÙŒã€{bwo¶‹–oÆfÁ8@÷_üËF’ógá(º+ô(Q£xüzLYŠÕ„B,¿Ùdu%Õ¿O!.;’)ĸË_åúÑØeFI@usŒ®ZÈe3Vÿ ±LÖÄfIõ€ˆ_K O×Ð[aôÃwZŠ’¥œ¿ xÚŒÁÂebwG¶Sÿ(8³#/ýe2X½5ëlèö{N5† P6cõOìÚ¬ú?P½›տ{1IÑŸ^ c]–©3ü™•ûgŒp™ØµY;õ°}36s¯ TþŒrÿ 9=Öîõ¯3Ž’~6ª’j±ú¿'vmÖNý'1“®lÆê_a„Ñnk}ͱÙ5@ÙŒÕ#|¿x%{ xëÌÇW6cõÿÀ´’ÞkXq27]C”ÕXÿG@Â2Y‹/çáÍX-˜ý×Üx4†øa¾ìNª0Êf¬ÿ# a™¬‰Í’ç>H¸Zi¬ÿH'ÀîéÜKõÿ5@ÙŒõ$Œ´æyxÝbw&Ï|pe3>Ð ámÀÚs 2¸Vfä3$,ϹµòP“u–Œ|p±ƒ„aŸÇ—sБÝ3¯jq$Á˯7±Y2ð1Â•Íø@a„!h7@d¼/§ÑJtbŒ0È × OmÄ0¡àÁ›ù#Í/Ü¿ÏH뇩äoÀ9à¹ÎŽ"aùõ&ë,yàc„«uFUÿ“Â#£½g½ufEŸD€ÂòëMl–«š| pe3ŽPx‡UãðÄ9×¼¨uÆ‘@(|¿xƒïf( wr~²ß¢ô#FV-k,ºü–²G ðýâ-l–¬òÂÕ:ãH@…”2"‡æè³k€²Ç ð ‡¾I 0ÚØ×Ÿ( 0p3PbÎÞ´€ÂDõ@÷ÄÞwS^¼Å:KÆ>P¸Zg( 0@ò*§J‡Ên[@á‰ÂÓ=±k³vqÀãMh (\ÙŒã^:`t-,N™,ŒðÄayÎWÿòº-VWRýûáb)ÆO #¼®±]Ù‘¬Ê,Œð¤ÃŠ¿`Û@í¿<ÔBatÝÌê Vé`JVa„ÃE¥±WÑba„!}Ù‹EÔ #óü»ÂÎØ,¨þ# ÿóH¸²ë@Ú£sgY÷$|6áÚ &½¯@ $úr&A“®lÆú_„q@¾+æä€,ð¤æ¡Ð" áûÅ®³«D3´ù¨ÅÞÛA­ºH4Cƒ/ÉIŸ:\˜ƒEÆÍ”}o<[‡L>ÿ ¯‹2ty` 4C;{q%äœO.6cêðùSÕuèß¡:4àåë·ÔG– "Ôaùõ—lÌfÉCƒŸÔá«-Ú4Îh‹†ó,ß}l{[4¼p݉ÄõÇ8E)®'-"ñÄDâ2±ëC¥E1{&C ŸH¼ÝmÑ:ºN —ö )[A_'g‰'&—‰]›…BŠ˜Í’!…O$®lÆ!ŃHŒ&†À]9„¡Îš“Å#ž&>Pˆðˆe²&û6Rø<âÊf|  xÄ{# t¥¦´›Å#0‰å]à2ñ$¯ëË»ÐêJòˆáD¼0¢²#\C%ŒÀÞú®úð i7‹B<1…XžóE]ŒB³TòðÀ§W–âàAQˆ»aDï OsXb´ Õ¡ã¿K¤¸#f³dðàSˆ+›qð (ÄÃ0LsU{Å1xb1ÜY "/ÞbG&|qe3{oë™v7e”Á0…Xž{Ù‘¡#ƒØêJF>…¸²GŠB¼ß„]Ý+Ä…}:xGÁûµÛ‘ÉßB\lÆbøŸ‡CòeÞÑÔ5à0…¸Lì)0yñ;2øâÊf\:¤(ÄÝŒÂ>ÝlpÿFZCÌ–ç^vd;} y1¦Ï®,Åú^±‡ç—P• †¿· †t‡$>"ìay¨…V=¸½›¹W*›±¾Wìáa…¸ß<}o±‡'fñE¾‘¡«1ÏŸÔ÷ç÷Ç‘Ae3Ö÷Š= è :9,|C¯%³‡å¹—½º:²Y’=ŒªÅ˜Ò×Ý}pÌò`#ŽÄþM7ˆ³xÃó†Ëtž¿ñ†c–J*}Ÿ7\­.VúŠ7<#»†úï¦TÈíZ«‹•þ=±k³vJÿò&¼˜O®lÆJ_‘‡‡®ƒç/%|ìù-òðÄäa8¶€‹‘‡cë,©ô}òpe3Vúò0®X×­G«Ðûòwé×{bwµÓüŽ7³ÎÜë•ÍXó+îð´Œ=h€ÞÞ´2ÿ̆‹‹¬³vš?ÉÀ/äùqÊô\»çjþpDͽ̸`ÈâOºû(TY„;|¿xÍŸäÃmÆš_q‡q…%»oØÌRÿÌ–wòFŒ;ógÉìþ~Se(kçuöÌîoh]3VMö¸$áú­glÉÜa¸¸ÈÞl—ÝOr‡ ®3Vÿ×PÉ¿ËÐ C)I0lf 1wXÞéeµSÿIî0ÜIÐf¬þwx¿ýÔƒ,ÆÞ´Ô?s‡å^lÖNý'¹ÃèÀ´çùwxÌ eVN‡ÅÆ×–´Æ=±§5bÜá?Kr‡'Ÿ;|kN'tðÝTÜá#á¯k1Y´á‰iÃe:×RíÔÿáM¨2Ÿ6\YŠÕ¿¢ w{£ˆ2Ýz·™U$Ä´ayÎß‘1Úplu%Õ¿O®lÆê_ц¡ûÜp¼˜EžVÿÚð£ Çl–Ìøû´áÊf¬þmx˜œV:Tk8,#2_8ã¡ Ëd-ò‹IÚ0ÜIÌó3mX†Þ-p`±©*z䯥ÅÆöü‘ëòâ Ô’5< ²×¾\WÖ³†eèm3ÔäŒU[rÃf–úgÖp™Øý´ËýÞÌ7À½.PÙŒÕÿƒ5¼|€*ÝhµÙ°hÃÓ†áäú?FŽy´duO®¬Æúÿ*+mízdK&ÛXi–þgÖ0Št#6k§ÿ“¬a8” Gcý¯XÃh°¸tú Ø®1,ÕÏ„ayîEc´SýIh0ˆ.AK±êWÐ`t%G“¥rÚ˵c4xbh°¼“o³48´#“Ð`8‘ Í8û¯ Á8¿ìÑÃÅÉ0Zøà‰ñÁòN/6k§ÿ¼nÂ÷ÿÄ_U±ÿ°÷6ƒ®gD0®ž\Îæ¢/ð^ößBOŒ.{ßKyñãÀëflv%Ñ_5ë…îq}›½Æ7"”,ÒeD0*Î ÒÂfIýï#‚«¯%ë…^wÑìÕXˆà‰Ápq¯e ógÉŠ\lƈ`x¢ÇÞ\¶[¸ìMn€o!‚'F—‰Ý½‚Äl–¬øñÁ•Í8û¯ÁèÝW,¸úp aÁÈUÝŒo€ ž øÄ`Á1›%ëý}Xpe3>P°`›¨-._¹ è ü7 ŠÀ‚Q'ßLÓ&aÁ“ ®lÆq€†£`\€û€õÙ5@ÙŒã€,ø~ñqÀÙÍìÍXœU<`Á;œb@Ú¬|79¯a¡‚'FÃÅEöf»* $*î$ö `T° ½Á1#Ä(J ~Ÿš_¿¥ÖŸDÁ÷‹·XgÉ8ÀG—½©‹ÂöïæóŽï€~±¸6í4?³ÁøÎòw3ÄÁ±o@² ÈGW6ãs… F^c-ÁÓÆ4Ía›ENäÅ[¬³ä)€®lƧ×Ðû&zzù­ð¯½‰ú4¶Yä †Ž­³ä\ÙŒOèàÕ³zÆ•4­uÞdÁƒg†# ù 4‹°9ð{ñ/çùüO Je5:¡²ÒP©1 Lï÷î”j¥Q$P&v"ûÅÿþÝ ‘´YðD@_ ù¾Kû¥¯¸~Û&º:[S–¢[e:×RÍÎà’–r›…V«‹ôÿùS¥ÇÈÒ/Àm–‚vÒÿ2@ÙŒô™ØµY3ý§´Yð€áÁçO›}6Ì•##-+”ÍHÿ—‰]›5;˜“ðàóùˆ#ý/CO/6|\@7ù[ ß/C”Õ¨¨LíZ­Y€RüäJ FŒ>ªÂãŠÎXÕ¤H(›QP&vmÖì$àlY•ù^ï0>øü©ªk.þè÷óŽŽ xÚŒñÁeb×fÍN朱ٕP;Ùd|ðùS ÷‹›U@5í2@ÙŒ"€2±k³ëÅjŒ«ýfÛÛŸ¥Éhû„¦$ÿô/ÿç_ÿåŸÿíÏÅÿþ¯¿ðÆK¢ýÙœd ŸÏܳ†e¨ˆ8µìp$F©ÐÜQP¦sÍ9,€*û¿ÿïÏ¿ýûýBÿðŸÿñßÿô¿ñþÇâ|vÚÊ,Åàa†ÏŸª úW»×$Æa®±ëÀªLìÚ,"Älv€w6;ž·V×Õôlî¾{Ó³£ x_ýÝÞô ÿªªéa8!…¯iÿÏ‚4Éowx P[›Ã‡{bÏžòrÇ =“áƒK†õ¤8FwÚmö ÐxØÆr•L­­?ïÊfHDèÃòë~ÑrÐfÉ@Â¥×6ã@Bч‡JepšëÁ­!»²ú°LÖÄfÉ@Â¥×6£ƒx©G¡¶åô²ïç!Ÿ P6ã@"B–ÉšØ,WP„L™“¯mÆ„¢oh ¼ðÑžü‚²úðýº-¼X2xpéÕ¥˜>Œ¢äju Ôí7bïÅe…\×e5"üaùý&ë+w€0»üáÚjTH$CïòîqëpŠ|.Y\¿õ´ó‡ËÄî÷2>}ÿ®ª3úà j›ÑÅÃ!âB¾ÍµÙ9@ٌÇX~½É:Ë ÌDؾz]ÛŒdè}ae·YU­À¡ýõ[ÊfÜ`cwµ‹ ’üatÕŽù~¯ÝuٳŷHV–uÆñÔ5@ÙŒcƒø~ñ_$xvùÃõ:ããÅ^Ð ‘߇Èò[Êf¬ÿ#üáûÅ[Ø,©ÿ]þpm3*$Âõ‡?[÷ÛêÞ< lÆú?B–ÉZø³$}x¾H¿ïþŒõ¿¦£È»×ttDJ×cÊR¬ú#Ìáûu[¬®¤êw™ÃõêbÕÿ`°†¡ÁK—YÔáY€ÿŠP‡å¡&ë+©û]êpm5ÖýŠ:Œ˜M„¼XÉ¢Hy¡{bï{)/Þb¥%#—:\ÙŒ©Ã Ì<üØ2 ÚÝ€î8·ïÎs€Ú¬ÿ#Ôa™¬É:Kê—:\ÛŒõ¿¦÷=d™Óv×YŒ<S‡å9÷2™<ÔÄfIý~_}?S‡á‰”þÇ5⪠’c¦kÀs1u¸LìîÍ+pi±7“úߥ×ëŒõ¿¢ÏûÉ;.úÈ+\”ÍXÿG¨Ãðƒ§oa³\î˜Çôÿ@D2ôŒ™ºüf%•m~9­Ó#€wø~õVKr‡á¶ƒVã@q‡q𴌚Žß=¦Öëþmø~Ý–Jê~—6\ïIÖýŠ6 +UºHð1¨EžõÂ….‹Ð†å¡¾?Iž]Úpm3ÖýŠ6¼—ôa99l‹6<3mXÞÉÿ^†hñ|ÙAêMäË\Úpm3Žm¸ßó{|‹1<3c5á×ç×ûJÊë¶Ø‘IÕï2†kK±êWŒaœ(=úºp©•Ež™6<ß»6‹ WWRõ»´áÊfL†ÿy¨±=÷bƒ»ÖŠª,ÚðÌ´á2±k³HÑPÐfIÕ/Ð^³¦¶«~EÆåámÔM4öo¤¥õ™1,Ͻø®v¹þü›ñ]Á\?3†áTn í/ÑæPþ8o} xê f —‰ÝÕÕNëè݌ͼKÃõêb­¯ÃÀw èáhýk€²kýcÞ¯™Ö?è¼›µ>3†áëlCÓŸ­*[¡Kv2@ÙŒ•~„0,“µÐbIÂ0ôfLé3aX†Ê™ÒÂîò8g—a·f)G! ß/Þ@a$ óK®÷&k~EFù;›Þ×Ò" ƒ‰È6 \¾_¼…Í’µ>.a¸¶k~EFwò/ ¤…q P{“³þ÷ÄÞ7 DŽ)Œ$aí1‚{“5¿" w=>ZcAaX\ᙹÂòœ¯0äu[¬®¤æwQÁõêbͯPÁ „í¤¦ûkÉQø5@­.Îôß»««æ?0»‰¯¥‹ ®lƨ`øŸg¦[VÜÀñ<¿•é×EDÈ\DPÁòP“¯eRóÿDï-Ðj›±æà€—Úk I^1™•M´€Àèe¾?pY€šfºì€îfVZPÿ3¾è™ëÇÇÃÛç€çîd p™ØÝíôÿÓÍØ,¨ÿ;Öÿ Œ»ÂhPn¾rÌdgÏ °<Ôdw&sý.¸ÞœëW@àµCy)¹XÃfV¦ŸÑÀèÖÈ–…ÐÀ1‘DÃÄ4FÇ™~…Fæ^¶âÔúX`U‘?»'öö¦¼xµ¥‘ª]<žÿu3§^g¬ÿ¯¡w½gúau½šãÌk€òg¬ÿï‰]›E. ×YRÿ»àÚf¬ÿ$xìæjÖ¹SbA‚g†ÃÅöf´Y²êÇ…×6cý¯ Á¸ÆÙ}õ‰7ô¿ ž,Ïùú_^·ÅŽLê\[Šõ¿‚£%Õ^±HYk Ǿ+Ð >¯™;ˆ¹ ]á¢+K1m§ž¹Øé;¬SiÞÅ'J™H¶™Lìú®v™þÄ›±™w=¸¶«þxû ,.±åw²T¿… Æ ¶ZDõ ոŞÜÅpÆjAÕÿå … ƈï¨õèî½,­Ïp`yîÅ{µÓúI80ÜHLƒ}Yë+8p·ÁÑk@Ân)ë¦/#å¹KµËðØÝÌš fø¿¬ð5‰žu.éjµuw›Y Ÿ‘ÀòÜ‹ÍÚÝôM"á:‚«‹¾F£‰ÞøõnóZpà™áÀòN¾ÍBpà˜ò:Àº‰uæÂkÏ _ÁÁPF»ÖxžY×GÀ³¼n/ŸD\]¬ë¸GY:h­¤¼,0¾¢ô=Œ€€ï×ma©¤šwAÀõšb5ÿ`¹çóïVZ(à™QÀs,µÈé$QÀpÁõÅÊ^¡€;”V£¯¯óž6€åM^|V;eŸÃy„,…ÍÓ¸é¦À¨¥tÁà›nWpxOF”½¼x‹=™Ìç»à²'¿ºìn3‘ßgÓ·½Í8ȬN%â5à¹Î\&ö¢¡8ømLêz\ÛŒuýÍé=mÖy‰«s’k€óæu&Ç®ÍÚ)ü$xvÀµÍXák0z¥¢É,{1Ká3öWÞäÅ‹µSøIì/œHЋ±ÂרßaÃ=JwuY Ÿ±¿òN/6k§ð“Øß³EÕ{>ú«ûóË)ìï^;ŽfÙ´º,Øḭ̈ß2·C°ß˜ïJÂ~á:‚«‹u½‚ý¢ZXÚ9‰´°¿3cåüÕ%/þó)MË–MË–£Þx?’î©iÙÒeš–%Á¸W40‡Š O¸<î|P-F0€Oôq¸'ve¤7(Ìh_vôÌJ›.#¸þ8p` ÁÈÐ`ôt‹<3#øìûµ÷EsmvÕ'ùÂ-f³dÂÿ'#XÚ—-#Ú—-G5ð¾pàvt3«Ú—}5~iw‡’½¿DRÜ=îþþ.f·øÁ3óƒËÄ®=CÁCÌžÉ .?Ö»Ú—¡ø‚‚‡kh)E‡Ú sýq@oñƒgæÃWŽçBüàà¾M.?¸¶ \CK›¼uØ4Ý)Èë±gÈÀÔ`yîe·† €b«+2z×¾*Q­.Ôàõ3àx®®ÿ·P,jðÌÔ`¸½Èú  1«%¯ûºÔàz}qР¨ÁãwøV@F³k€Zi| B †ÿ‹oÆl–,r©ÁµÍ8|PÔàq_%·˜Á æ²æˆ”ýÈË6ø~&™Á³Ë ®íćŠ ¼ pÓ)ǰ˜Á33ƒå|/bÇü}’ âiÛÊ‹qð ˜ÁÀ^=ÊË8ಘÁ33ƒå^l*û íÇ$3ÿРÍ8PÌà%ÿKu=šË ,fðÌÌ`y§›µ‹’Ì`¸“ Í8PÌà_Ë·‹~ëW‹Œò*ògfðýâ-üY2p™Áµ?ãcÅ Fµ­zËŸ±Î¬fÃÅôEˆôgIÍï2ƒ+›13žèú§]ð²à²o•ão¤Å†‚#/áß/Þ`G&ùÀp"A›±æW|`4¨_»*/fØìü-µÎ¸$(¾_¼…Í’¥þ.¸þF²æW|àµï\÷u´˜Åž7>ˆðÑB´YÞ"Éò!¸ÎXó+>0T8ú¸œÑ¢£«%ïÈóMüèH^·ÅêJ*ý‹Àûþd¥¯¨ÀãŠxR«d]-ðÌ,`yîÅRírúIðì²€«}È,`z_SÂý^ o}Ïù ‹Œs^]}//Þbu%õ½Ë®mÆú^³€¿{ô]ªôøÄbãÜ„mQú!p,Ž<¹‰óK—\ÛŒ³ûм¬Èî¯ÞÙÑ5àñ\˜ ÇP­!pÐfI¥ï²€k›±ÒW,`tÀC6±²s£Å&ˆ .ßß{ú5ÄÚ,™ÛwYÀµÍ8·ÿ`?:"}Wï\×"/LÆ‘uÖLóckà÷â{ó|þgiP‰Âuþ»R}Dá8.ëéÿ­Åd€Ú›¤ùËÄÎ:»_üïÿÀ=$mÔüL>ªàä¶qÁè²Î(¶”Êf¤ùËĮ͚åùá’6 æùõ£}É-Ü«æ¢ ²wÊöd€²iþ2±k³fšî!i³ æg&ðùSeíIþq/¥½þ¨Q¥ P6#õ_&vmÖ¬îgI2Ïç#þŒÔ¿ ½5íwpä¶ebe€²]ù-»6k,I"ðù|ÀfL–¡b³eú‚NæÄã2@ÙŒâ€2±k³Ð•ßH®lùæâ€óùˆÍ(¡w=´Ù‚ò¦Ÿgp2ài3&—‰]›5«òY’DàóùˆÍ(¡b34“B'A'v’Êft1 LìÚì ^®7ÅÖY.X(pÄfÈ놬Ÿúú:¾¡5Œ+ ã~ËĮ͚eüQ¢Ÿün3þŒû=ª"Oã\ MýuÆ_S«‹2þe:×RíÔÿÁ·M¨ÿãùÈꢌ?h7õ¿ ¨ßJGý_”ÍXýß{6“o þnÆfAõÏ _Dâ›õßuX«¯%ïÈk€²«ÿÈW~½…; ¸›Õ¿îáõÿù.Ÿ½TÕ!c6ê;eˆ²ëÿÊW&kbµ¤þ÷Q¾%6×Ýëv«I’þŒ™ÆaÙq«¿k®e€²ëÿÊW&kb³\ö)ˆØ9‰î’¸ÛìYۢŠ7Ln›ñWà lÆú?õ½_¼…GËÕù€¿³C}eè­ÿ§ê¾¥Ö“r2@ÙŒõé{¿x ›%õ¿ô-{S´íëìy1 Y6hÙßõ±2ài3Fú–‰Ý/g;ýàp3_KF¿Uùëþ»ÍΡwÌ„o]_ê/ç9@ÙŒõé+¿ÞÄŸ%õ¿ô­Öëÿ›¼{~@YÂ=W¡Yú_C3ÿÂŒ@Å<ÔÄfIýï#}+›Ñ9Ò×…6hmQÝ1ä…ô]zŽ"H_ùõ6K"}é[ÙŒ#…ô–…SÞ7à ö&G¤ïýâ ¾7áÏ|¤oe3ªý÷ªÖÙøA&cÁ /ù³ «2DYcÔW&k²Ò’'>Ô·²Uÿ, ê»0N(þúy“P(›q$ÁûÊdMl–Œ|¼oe3ªþ/Rq:gU‡A> °à¾h§ª«ÊÄžÚo±;“‘€÷­lÆ' 2¯ßœfÏàqFVëŒ#ÜW&k²Î’‘€÷-6c¸ï¢à¾Øh¬öó–„ P6ãH ÷•ÉšØ, øpßÊf| à¾{ÁÁ°8ðªÅ‚û¦Æ{3P$“5±Ù®¶3_Î`$Àp_x¢‡?Þ]6è¦<ö\]Œô-Ó¹^ìzÝ^,©ÿ}¤oµºXÿ+¤/êó–~-çLœÏ°¾Ë@w|1ËõŸÀµY»üÿÃͬ®`þŸ‘¾ËÍÝ=c¦uE§M¿Ïͯj±þ}å×[ìÈ$ÐN$–Xÿ+ /ÈyÈ›Uä:=±Ð¾°3y±Ú÷~ñ{óÀâ&Ö™ö­ö&ë…öíPü?ë¨ñO´'1*þúÊsn¥±<Ôdu%5¿ô­,Åš_}Q’¾,å#r è»0ÐŽ-àÅb@ßÐÉoè»ø@ßÊf¬ù5ÐßȯF\î«ë ”ïb¥úÞ¯Ûb&•¾ô­,ÅJ_}qo …RWÀßH è»0Ð÷l°õÒIj²#“Jßú›1Ðþ§R` :®ô¨`,¥ÿÖ‰œ…ô%Ü2‹÷Ôž²Wÿ¹Ò®Vg˜mouv$ï-žFÝê $ZÁ‡äD®Ïÿ­LÌâÿö}¤šC49ßíÿçs+3 Xž{ùP„ŽÆ@«³³¿Væ“ ˜|þT)ÝÀ!ñT_§£+)2@ÙŒnİ»(C!BÌfÉA€ºt¬rµ:ƒ{B«³õ¨rÞ÷Á´·:ÿ¾nu¦ÛãÈEQ‚ѽvšªÖqtL({rø¡Ëd/®1fÏäñÁEäýqlº[1%.íœÎ8tGï˜ê lÆáC„,¿ÞÂfIJ0Hh^øPٌÇæ+­"†àÃßWÉä·”Í8|ˆP‚ï÷eKh%)Á8 ÚŒÃE ÆxÜ0Õ¢ãŽ6…\÷Äž¯“oa³d áS‚«uÆ„¢£°‘^hoQ‚ñf›E‰%8¶Î’‡>%¸²ŠŒ[žcÕÒV_wBHañ‚æËs¾‰ñ‚c6K†>/¸²‡Š ²2>›î:³tÝÄq„,5ù$C Ÿ\lƼ`x¢Çw³‡;Ðféþ£Ò5@}øð  –_ob³dŒàó‚+›qŒðàŸ·‰»ÒÙ×HP¼`4èÆ*ÁËI‹¼0/XÞéå+:Hˆ­³d$àó‚«ÝÉ…DÄ ÆÕ ¦F.×cju±þP‚e²~,I †‰iY¦ËP)훆/î”kwÔA(›±þP‚ïo eÂn"×qyßw$ëE €bìÐÛý÷÷Ò¢/úþ 4F„,5YgIýïS‚«Éú_S‚{d‡pøwñE ^˜ Ç8HˆQ‚C^ìÀèfÖ™{¸²ëÿ㧪ëP€íoÇf֑󂉨,t8f³¤þ÷yÁ•ÍXÿ+^0úH ŽDå¬,rðÂä`„›…®Çl–Ôÿ>9¸ØŒÉÁðDOý«ðiž?;¨oëÿ{bO•É‹·ø$õ¿àwí’øÊf¬ÿ9x~y(©F‹ çu˜ùi5&Ës¾.‹‘ƒc+-©ÿ/®ïë—“ÉÁ ‘ƒQ:6–èœO ,†ð á2±»ÒÚéÿ$C%¦Ð˜!,CïËÛÐwÕ¼¡Ð¬‹L.»6k§ÿ“4áå"ü¾¯3Öÿšðüùv(ð(YíÁ:$µx ó„å­^vgèRqhw&yÂÈCWŸ(žðÎCå‚S~eñ„Ñ´2÷ÄÞJ‹ñ„c6K¶òyÂÕw€cÅÞ€h“ˆ2fOxaž0\[@eÄxÂ1K%#Ÿ'\YŠ#Å'ô˦d?f‘…& /²°<Ô"j:˜¼‰À' W6ãàAFc4ÔÆà(Ù‰,®0Ú›ðŽŒDòâ ”Y’+ 'ôb(®ðÐÃj›w | PºŒ¯Ü»^¬]$ Ãlvâ¹Pm à ¿ö@‘zëÌŠ˜0\&vmj$ógÉÀ' _{s·GŠ0ŒRôC.açe-Â0îðÞŒäÿc„á˜Í’úß' W6ãFBŠ0 \šºýo|NÉþÜ›L†‹‹|7Ûéÿ$a§CÁ½ÉùEÆM¨ý|ÎSe–þgÖ°¼“¯dåÅ[|’ùŸ5\­3ÖÿŠ5<â~?îšÜ ®žº¨uÆ'÷Ä®?k§þ“¬a¸“à:cõ¯YÃ8šÛŒæKkÀòb÷tž¥b¬áK²†Ñ.5h)Öüš5ŒÊ¼ÕU²kxaÖ°¼“¿#_YÃÿu–Û¾£p—$>ø|þgêjG²úWøàn¾{+üßW{,|0NÙyEòÿÂ=nàÅ’øàÅÇW6cõ¯ðÁË†ŠÆ¹´*áö.>xa|°¼ÓË:k—ÿ?0¼‰ˆé'>øXÚ•ÍXý+D0„?ιK*›U™…^ Pòâ-ÖY2ÿï#‚‹Í OôÈÿÃèôî\¶Áh¥Ì{S&v¿íÔÿäͬ³«ÔÞÍÿCýkz"&…AÍäÊÕ>g²`Á ÂËÄ®ÍÚÝ80»›]"úÕf¬þ°àïgBÓÂïTЦ f©FÃÅEöf;õt36 ªMÃÜ×™Üö=ë³ñÀ-¯-š… ^V¾A˯·Èš4ÝŒÍÜkÄ•?cõÿ@ÏŸÿ­>›Vöߣ' {´Pžð”– ¾Ip0JLÕj²!Vš/Z|UMËùlÎ/ .{-EIpð⃃«•Æ‘€o{EûæÝ³ÀÁ ƒƒå|…&/Þb%Ï|ppe3Žààþƒs€ñ;Z{Ò£žöä=¡»¾B ØúJÞðÁ•­8PÀ`ˆTË–ü?«Y ¼00®-ðÅ”o±¾’@>0¸²G Œr;ÑÉe_ž¹õElÖ.ÿpt_L\lÆÀ`x GX.5Ëmª,`0:éóÞŒD1`plo&óÿ>0¸²çÿ0 ~{t]r2:å|l³Hþ?†ŽÙ,™ÿ÷ÑÁ•Í8Pèàa›Á+ÒŒó²:Ê„m‰bèà˜Í’·„}tpe3Îÿ+tðÖ#­¬?ƒaïˆkWõ“ÉÄ,ƒeè\X¿3¡:wY-tð²±ê ƒïoðµL¢ƒáD‚6ã¬ÿŒ{L;ØcµÔ˜… ^,ïâ+Wyá¶JÖúøÈàj'²ÚWÈàŸ{ûèßuÿ×€§²Ðg*¨û ƒå¡±øAÒM( \ٌվB#ÌDÒŸ³c(ùnòóPð‡ü| ç܉¬õ àîÎËÜ—n„¹'­z†Ë[½ìÉvùþÑ›Y_‘jäau±² ¼!¡ØéÂcÜŒ¶ ÁèMÃë+¢ñ…qÜÂ{%³ü>4¸ìD†/×а7ªj|Œ=iÕø04¸LìÅß1hplO&5¾ ®lÆ_Aƒ{ôm©.“èõ³¯3£Æ „×YDãÇ Á1›%5¾ ®lÆ_Aƒ7´Oê*Ïw|-h0¢O¶YDãÇ Á1›%5¾ ®lÆÿ î?¨¤h­}ÿ™¾ßÐûë—óülðÙ¥ û-(Ú`ư ½¹#z¤V‚—ìdÀCð®ZîýµÇdï¾_Ü_”s ÚÙ}+c³`q3†ÏŸ*—6qùUîÎEW lFÍÊÄÎgVzÙÈ1›åŽà{~H߫ء¥Æû>XöFhxá»ó‡eÚ²qÄ2U7íôU  ìI¡D™ØµgèØ fÏܱü’J,ç²ßmF¡„ -¼Ü´À7åg±• P6£keb×f¡@"f³Ü±\MÐftl CÅf¨ù˜PÐý»dT(›QHQ&vm:6ˆÙ,R¬¯øç÷¡¬3æËP±j¹ûý€Jþè” P6£cƒ2±k³PáPÌf¹‰ÅØ:Ó÷Èÿ€ÃåñÔÑØ±êƒ eïŸ÷€§Í˜?\&vm*ŠÙ,R¬¯8²Î(¤¡wb·ûÿ¬½M¯5=ŽøWµšMß>'ó|®Œ®·jcØ€§½ñn>lÌÎ@Ù€ÿþ3¥L‰©KÂzn4hežxx•"))Рoš”Ðfx}ÀùŒJŠóÅCŸ….Å|–+)Ïç•õÑãÛ¼}qÐ~^¶¢2¬>à|FÅùâ¡ÏB1Ÿå ¬?AŸQAQ=r äº ÿ•·-ëÎgt€p¾xè³Ðµ¡Ï,ÿËÔÛøÈ·IŸòèñmÞ Bÿ4é8Ÿà|ñÈgø„!©Dü)ª¿ôô&nÒAB}ôðÙóŽosè3¡D€~s~‹ä|ñÐg¥¸™á³dP4÷$|:%âÇÏmÁUÈ&=[$õ7Ó¸ˆ(חͨ¬6ßD5:V"nfWN‰;q¸¥|º£@yÀùŒ+ˆñ§Ÿ1Ó’•ÀX‰¸ñWN‰ø¾Z6ü:E QlFñ×8\øTà3|–¬ÆJħÏX‰kQwh}Ý!¤6h»ZpóŒ+ˆq}Ù”o3Y Œ•ˆŸÑáÂÇ+¿0Ñzäe(3Ñÿ¨3y²ü–óçÿýáøŒ/2™ÿõ‡›ÙÅù¿×¾¡kPCê>S ¬?Œ…-°w[ÏðY2ÿë7>ãüßéqƒÄÕõ¾™Òþ°þ0Ž¿">›—ÿ'õ‡±?«™œÿwúÃÏ8ìÖ0úU«¥úkîëä ¢@|@Ÿ0Ó’ ÄŸ±q3Ó¸èˆÑØåA¬Û IIý-ç3®"úÃð>KVcýáÆg\8ýaÐc‡–¶ÿË(ç(Nú#¢Ãhè±3•Üþ‹7Žâ¤ß‰ß±W¶Ü¬¬XÛ?ÓùŒ“þãÅ£#&:ÚÆØ{…ÒXt¸ñ'ý^tøõÄå«“gGì§þ,œôGD‡ëËf$°›`oÆgîA§ÏXtøãD‡A²{>?ç}[Þ–-¸yÆIDt¸þúŸ%“þ±èpã3Núè0˜ÖÛúÞ|”Ô0nNRIy¼nøEÎKú7ýßÌì*{çš-ÜxŠ7ýÔðçõBÎ.‰•ÿ­~v±èðçxñÐgøŒ•?™ôE‡ŸqÒïD‡L®çxåWI?‹ca $°ø Ÿ%“þ"ðûkqÉ¢ÃØDl¶.–Ÿ7R²zäüü£Xû÷GÜLãmÿˆìpýýëXRv J,ígÙáúèQ’cŸÊa×=#êÎgœôGd‡àfZRv Ë‚>㤿“^@¯^ÚMma+ bt4§8p¼z´¦Uè3¼–LûÇÄÍšÆi¿“ †6áëÑ”J|É@IX‚ø‘ ®ƒ¦|É `,AÜøŒ+'AüzÞ–ÊÍõ?ŽJŒø³r#þTà3æYrÛ,FÜøŒ+'Fü€ôgš¿ß…«ý&ðíç Š¯¦ƒçJøÃŠÀç‹G™kL8öuZœ™iÁ]~VÆZÔe®¯§UGgæÊ×T”"0Ô]yídûUÊxF”Lîò›yÆ»ü"ðççþÃúì¡´çPxŠº’5ë¸q]Y¡ÏðZ2ßk7^ã|ßiß܆òüìï(M`PÁx~Eòý w‚§’šÀXFb¹+k×GêÈë !´³ë ¯cå·úµÿÉù~Dø>ÃgÉ|¬ ÜÌ.Î÷½&0D:’ v-”&ð‡5±´2³ |†Ï’ÙþX¸ñgûN}[n_ƒ_¤Rþ°p7^»bJÀ¡(™TÆ"ü"9ÛwJÀH_QOžý!8ï/¸/’÷ó#JÀð³+™÷•€›ÙÅy¿S^ø÷^•ð‡•€?%à:hF» ä&²±±ðé3VÆúÓecëkÅTôN­¸yÆYD ¸¾lŠÏ’YÿX ¸ñïñwJÀ·Ÿ7ºT=†ûÕJ)Ã8^<Êúc:À±õ,™õu€Ÿñݧ yV\ïÝPT:ÀÐBaŸE²þ |Æz–ÌúÇ:ÀÏ8ë/Y–¦Zg×ÿøYy ÿ6Yï‰dó½I`4ÖÅÍçü0®Y?О ¹Õ)2Yu³‡U€+¦_ryú“*ÀXN‚>ãÝ~§ š¥Eƒ»J˜ÎƒqþQ>€Oø67™ÜDÜ«7ß&gÿ ðã牳ƆkÿV7{”"0šãЊQÆJ¸ÿ¹gx-™ÿ¯qþïq7`yânÏ5ÝF)#p°Ï"ûþø Ÿ%oöŒŸq%àÁå}ß} šIéX¸Ž¯c¿ê—Ngx:A“Ñ:<}|§3 Èt:KŠcÍ .z\,8Ñà}þ拹U1}_|4‘ >àŽ'à'Òß,)¼7áú½ßöbûo ›ÜN*øµBõêuî>rRpi—Ç‹GénÕ8žá³d‰p)\û›½^èojj™ýß­¿ÙëÙô7û°Œ0–¯®äZÐ=ãèÈS‰X<ø|ÝЋ¡‹A±™—,ÆâÁßÚÕ ¢<óú£ˆ<Ÿ8™ºN€Ëoõ3ѱ.à |ÆÌK cñàÆg\48ñ`ÜÔ³ùuݲüSp>ã‹AÇ‹‡ó,T4ÄæYò `,ÜøŒ‹'lÕ”dX,P¥Â› "’Áõe¿l}„<•” Æ"2Šš§¸Tp’Áïë½áåó¶¤þ°xpÅ4NKbâÁ1Ÿ% ÆâÁϸTpâÁ‹ 7ýA¹$UâÁþ/}‘1ñà˜Ï’…BÕàÕT°Æg\(8ñà/nfã‹›—ó'%ƒ?Ež÷wŸqÎï$ƒß¯Û½id,®k—úü•%ƒ+¦_¾Ír¯iBΟ” ÆrËÊX2¸>zP3_hHÀ"+S—ƒX2ø|ñpžÍËù“’ÁXN‚>㜿“ ¾ý çúƒŸ_qW‚ÁXùÛŒ\Š ‡Ö³¤`0–“ Ï8û÷‚Á&¼ã/J!Z*™`t!$O¯Í®˜LpÌSÉœ,ܬüœó;™àMòŠë>ÙJ& ÉÙg‘ËA1™à˜Ï’9ÿX&¸ñçüL0Äâå›ÞâœÉ*¹àË"rÁuÐŒz|SÑMC傟qÎïä‚Ë"Og®-•\ð‡å‚±°ꤘ\plž%³ÿ±\pã3Îþ\ð²@©å6jb£ä‚q;ž¿ÍH·Ï |B†‘” Ær[ùY.¸>zh%à²ã½¡äsö¯ä‚qý–}VËŠa ˜—ýo*º™o³$Ñ¿íaøbç&N.øõÆÍ*ÓB,ÿñ¹‰’ þ°\ðùâ¡Ïæeÿ›ŠnÆg%‰þÕgœý;¹àû ÅÙˆ †Œ)Ï®È>L$8¶Š%÷ùÇ"Áç*æ7²lvõà÷ý Q‰Q?Áò@_'±\ðùâáìš—ó'傱ˆW1ÎùUߢÄU‰ï÷ü"¹¡’ þ°\pÅ4®-+ð +R.‹HÐgœówrÁ·ðNÖ» h*±à‹W$cOÅÄ‚C_ä&´›X»ÆbÁÍÉ9¿ ¶6o¨*ר”X0*´ŠEÄ‚±úE.Å|–ÌùÇbÁÏ8çwbÁÏ;zeàzÁuŒT²Á– þDdƒë 9R6‹Hð‹äœ¿“ éÐX'÷ó¾ïö”ÜÊÏÔ€ãÅ£•¿Ÿ±Š%sþªÂûk^Á9¿ ^ÐÐ@µ~P¢Át…× =5oŸÓÒͬbÁLŸEƒ±þtûüwÜ E#•Áýò€›]œé/úl^¦¿iéf|Ìôýå/äbN4øû~¢ <}&¾HÑôu^ùëU¡¡Ïæeú›–nÆgÁLßßC4Ÿõw{ÀC½Y4Xù÷ºyöeÑàóÅCŸÍÛçßäv3> îóû[®æ³>ç‡fðmm¤]Ä<ûü_– >_<ôÙ¼œSÒÍø,˜óûÛÔæ³¶Ù'ò×=üõ~ìY+¡à/ Ÿ¯z*Dˆäbø °Ç=µ¿¼çyæb¬ý[­{à¾HÚç?_<ðÙü?¯À¢ôÙ°éOã3Êù÷Ÿ:µ n_õüM9¡æõõì•¿ã†ÕQ}Ù„¬KAÒSWŠ¿ÛíïÆS”éï?Õ¨$ã~É­©½ÅìÚËÍ.ºú¾x8»Bmýc_dîF‘X¦Ïª¾õÑúE¾ßË m®[îÖœÏ(Ó?_<ôÙ´»=`”&çÙð^3Ï(Óßêœg|fXñ¯)&õç3ÚÝ?_<ôÙ´œ¸“> æü¬ê»ÿT³ŠÝ]Ú«8ŸQξxè³i9?¢¤Ï‚9?«úî?Õ¬g/$ü¾E­ü*Óg-ßóuCOMËôÑN é©`¦ÿ¤=ýý§NOáj öªÏ/’nZÔúÙu§ÝýóÅCŸMËôqz“ôY0Ó÷Óæ/˜6m¦¿¢nÀ.‚TX:_Ñíýó…C_MËð¿›&o&o fø¾_ŠùªÏðqµúeLéËJ²>à|F7yÎ}6/×·Œ.“ëoã¹¾ïËŸ•GOÝã:?Œ2‹ò€óçúÇ‹G>«À'äúI ßïXÃ÷Ì,üµ&óY½z³Ÿ8skè ¼>à|Fûû狇>›¶¿ÿÝÔoßæX÷ñgý†ïíÇÄДÅßIßýùOÎSœëGt{ëËfÔGIÝÞïX··ñíê×G÷/jÇO´×åÚ¯”{¿¾ãªÊˆrï}Æ7™ÌöÇʽ×8Ûwʽ š­Ÿ«þ/ži‚Ï‹ n¿óú=^<ü&çeû›êmæ› fû¬Üûuʽàß¿ñß B*¸¯“³ýˆroýõ)_g2Û+÷žóÌwÕµµ¿åì¾~À×ÅEþc¦©æÎõ‘Þk¬â{¾z8ÓæeþI_,(±ý Vñ­Ö,ã ‘èõvºMDÌý·œÏ8ó¨øÀg¬hÉ̬âÛÌ4âïb-êÏßÞ·×ÒÜK§õç3®"*¾õeS¾Î÷;Vñm|F÷zê£g6‹ëQ¨ êÂg‚ÉûeßóÅÃos^TñýŽU|ŸÑ½žúhõÙ}Á™å™o0Ϧ>àæW ßø„o3©áûkø6>ãÝ~§áû]Ñöçì^ã÷ó±ûSp>ã ¢á{Ÿá³ä¾ÿX÷ñWNÃ÷þü¾¡F<ø6•œ/:ÌP†‘óýÆä|Cûþ›Êm"CËù6>ãZÀÉù~—ºñ}&8½_¯´ƒJ "ç[͈I9_üCƒ¹W^Î ¹nÏ¢þ–û6¹ˆÈùÀg|›É}ÿ"û+×’å|Ñ|ËåÖÑžJ&¥á‹¦7üA®òןœ2¹’éÿXÃ÷ü ½´Ò§á‹þ[ËËß²å^mö³†ïùºQZQáΘR–Vg–®`Êïoæ›§öG¢È÷yÖä¼Ù_è?CÖð=_<ôY~é³Ò· o³¾eÛ=cô-CŸÂþ—ÿøþåßýëÿÿïÿ°•òè[†ÖIO¼†¥9ØÝZAÃo:C «;@,ø{¾xèàÈ ÜùO¶Gú¯ÿé?ÿñÿåX'þéïÿýýó¿Åÿú‡¿cÓzo›•™”Áüݪ9«C«FÔ"ãë&%ŸDä~믗¼˜Ï’r¿¸_qOK3 °fÛ^ûîÖÁ €Ûf,\_{4¦]ž(áêΟ\;D¤€Ôpa ú3ySh( ïmÓ~ýBµŽøn;)àÛªÓçeÐõ)•FÅAa7"\}ÊLÖC!àÖg\;x!à÷ëùm¶Ý¨gÞW Y¸Žß³ªÀg̳䡡pë3®œðwøVôI¸dž•0qî#BÀuДy–ãÚÁ ?—÷ûËwD¿JøËBÀuÜ/³+rv\Å’ÃP¸ñ cýé+†8NÖ ¨üÇ;mJøË’Àç‹GÙG>ã‹LCIàÖgÔëOç3HÛ‚ € [ÿ£‚KIƒãÃ+€P}Ê™,#†’À­ÏøÎ“†·@ÒúL°$0¶òÇγßÊ»îü6“•A‘ßÕÕ|ë3>9ð’ÀhÔ‹Æf<»T=ðàó‚ˆ0V¿=ÁœñE&Ï †BÀ­§ø¼À £Ö±3«˜:/`I`,l‘Ù9/ˆÍ®¤$0‘ÁþZë3>/è$Ÿ?Ï7Î›Vé³þgýQàú„™¶Éé&*Ï¡(pë5Îú;QàÏÖ°w+­ ½¦¸, šl`®Uè3¼–Ìû‡¢À­×8ïw¢À÷;ÎÛ‡gJ•EÌãÅ£Õ?$ü>“yÿP¸õçý<ðÛ„O3Äì%gš:5`©àoD*¸š‘gl2»™ïstjÐz3'l· Ÿ T_çfJ*{œ<Ó½€ à<-z&¥‚q / X*¸>zðİ—.Ï (¿åâ D„‚à3V´d 0 næ c-ê릷Ñ|0ÏÔQ Ÿ/®h‘ÛCÁ-YT½]ÉÙo}Æ5€ ÆÜ :\Æ™­ þ²P0®ÒG"ç¼`SÏͬg£ÓÖg\tBÁ7ähl†–ƒy¦ª– ÆñÙ¼j`ÓÑÍølt:ÐúŒ«' ¢Åú©L@¬zóE¿ž±`p7Þ Ǿͤ`ðw(ÜúŒ«C×w¿ ÿ^p¢2ê¤TËùŒkˆ`ð|B Øttól(ÜúŒk'¼.h†ÔÜR£~pXºÔ<〈`p}ÙŒülSÔÍølÄn}Æ•@'ü{ÿñh¦Ìj•x01ó°Ÿ}¼z9CâÁÁ¯3Y Ń[¯q-àăŸ¸uñm‚ߊWâÁ_Oå3Ÿº‚ÖASfZò `(ÜúŒ+'üZhm|f|֤ăI^Þ|©*ð+Zò4`(ÜøŒÅƒ¿Nßæþ[} `ý_,q‘õlÞ À¦›ñYì·ùÛtüáME‡;n(Õßï›oET±úM;ÇÜ´s3žŠíû¿}[uË1Ú¾AßtÀx?Ï]²ÌÌÔÎ?+Ÿ¯~“ój€¤0–‘Ðé/v&h~9à÷º™ -×JøË ÀÓ8^†€cyÙ&Œ›˜iCàvíçÀ)£ãŠ{™ƒs¥ŒK£´öG€¿!à Ï’w€† À­Ïxçß)ã;ºjóεÒýý²î/–¶ÀŠÒý z*™õu[OqÖßéþ~Ñ›e¨‰ZÇÊ#.NrŸÐˆð·BŸÃn:»™o2vóçíE”°ú; `l ®¸˜=ZÇTç Ö>_,ó?ò1>#QÀè`ËëX„:\ÏðYr¿¨ÜúŒ÷ûðóƒÇç™÷‹x©nþ°0¹ÈŠ6/ïOj‡À­Ï8ïwÀŸ=C›M3á3•÷³pÅÔæ® +¸ͳ¿þ»ÿH®I`ôƈ%f,\=š-¡PZвþÇÅRù­>°ðùâsANË”¿9-¹÷?Tngïý;`påV¨Q€ë&¥ŒRžW4>NËT¿8-)Œ»ÁÁ™Æ%€“¶ ta\2S‚À_®˜ÆŸgH¸&i¿9-y0Tng×Nø“¹†‚î·Àq¬¿¬\Çýâ´Ì)ÀoNKCIàÖi\8I`|˜ Œ.(I`PÇèó’ÀüyVà3ARKJðóäzÀk£ÔáFŸ§â°&pÅôËL+À§8-yýg( ÜÎ4>p¢À¦NAø=_‰YË¥ib¦eˆ¿}žÉz`¨ Ü8U±uõžŸ£™¶?àR®ŽRŽ |ÊLKEª÷·Cô7Ëc5꜆¯ 7gÏ©ÆÉ­’Fë^Ó¸ 3-Sü6Ó’wªÐîo'o®œ.0ÎÐïëg ùU Á_V®ã~YÓ2'¿9-yh(Ü~ž|à$‚Ѭáóü:ùÈIIY"Ë\ ô¬À'”ëI‰`ÜuO¿£Šm!'ü~Ý:G­‚”D0êð×¹’Žm@&%‚÷^X¿_qAß$:pÁÐuz?›‰ÆóL‰£1<ùìxñh+-$ôY²Š·ß&—N,W4Á;94ŽJ,øËbÁXãßæ¯bÁµOÚ÷þoþ¶Ü¶ÛÉÖò`¡>iß{¦OڦʛØß* ·æÒÁ) ¯XúÖϹïÆ' JYøËÊÂX#ÝZ"}Ò’ÊÂ{3¯È‡Ì•C§,üýA©^Ϲ½«N”¶ð÷Ë' máú8dļ–,.µ…k§´ïãßü ¾ËìK@³5Nk:¥¡‡>/5û· ïŸN±Ù-^)ƒÀÍKb„MPÿ13ü˜¬&ŠÊïEb¼Öize_õՄ駯¯Ñ)©RÆleŸEN*ð>KE>øwŸñéB§<üøy?Ÿ¯ÛyáOª†”GÚÌ6<Ùk‘ó… }†×’ÕDþÝk\M8íaä³ÏgDðåóøŒu Ž–P5[å’ÅDþÝg\L8ía»#P8¸¿VpóŒo/ú,t¼óYòt¡(ÿî3>]pÚÃot F¯¡Áy©P!Æ<ãbâxñÐg¡Ó…€Ïly@Ø çmeüeÒD_LîÇXŸÓ½k®I Æçñˆ›i¾œh^}íµúÿöŠf DÒk#bd¥»èÛ“NþR~ªv¸}ý<ðq¶ÌŒ?þÑŸd8¯ù;FÍ«‡^ /ÄæZêxø†,ƒÆk¾F8­G¦è–†­!´ô1ñãç3¼Ð¼xè³Y5‚-É™6<]h|æk„òS¾îb4ÙëºêxÀùÌWÍ‹‡> .ÄæYªB¾á]£Æg¾ 8ÝçÙýgA7 ô08šfr]u<â¼æëæÕC¯…Žb^KÕÀ7ì3tzT‰Gϯs¹-¯ë.ÓÇÎg¾h^<ôY>#¤êಠŸùzàx´úlÁ,[šæLžÕx<ÐûŒô‰›}:\ˆÍ³T5|%©Ög Ï|5p›‘*ññhõÔýu[Í)©˜]Ì.^ÐiÓ՚͋‡>›Uà÷R5@ñ™¯ŽG«Ï¼­­H¥¯5Üék€æÅCŸÍ«6ÑÞD °øŒk€òhõÔŠÑlôºÃ¦Ô~™ÉùŒ+€ãÅ#ŸUàVþœ:1þÁ €Ô‰G«ÏÐ)÷™¯;Ì8ŸqþÈ}6/ÿÏ©Ûr2:ìkV~Îÿ:ñóþÀÁyÃ1 <à|Æù@§ø>cž%óÿ¡NqSiúæy¨41áÂÉ{>Ð9YxŠïáYÎúÚÄÇoþÂø å›®of fý¾5£yªÝû¿ý|@ù|¤ŽÜìâœ? M|¼lŠÏ’9ÑþuÇŒ´‰ÚŸ€cÐÜ]ãh)´‰ñÎùÚÄǯOñY2çj7_$iu¡ìŸûíq­Ép<ÐÏ3R&n^<\ùçåü9eb[Nb+?)Ñrù¼Ÿð"ç/¿à<å÷ý›× =5/çß´|3«ØVpÆHß2ÛV±–O|ÿ¹¡½ÛCmX”qÎUœêdˆò!&Sý¡ qû!rª_=6,–Î}Þ‚-8Ÿqª¼x8½æ¥ú9blË ¹ÍôâTÿP .-…î÷7üË{·Ço9Ÿqª!>OHÁr2Äøé`ªïU&ðIv2ÄÏL±ÏG~“B~OsŠ>ÏðUr‹(?Ü~“œâ;ùáå)4´è:þ£-~!?lûŽ´eÆsó¶øsòÃøéà¿×ȱùµ?zlóàN6-F>SÉ>É7/­cøŒy–ÜâÊ·óŒ·ø;ùá÷v$ ô1jóo0¡FN÷ÄÇËfDÌMï7‘\ ˆ¯‘±­Eý]x댰øFÈÇ0·æs’¼n8¿æmìo½O7öIØV ÎS`ôàžÏ0Nîô>#-âæÅCŸÍKò7½ßŒÏ‚I>i㟶?º¯c+šáCrá¼O&®á8¯q¼zèµy N`Ø–‘XiDÃÇ£ÇæëÇ´®›~1Õ&? 7/úlÞ&ÿ&Λ™iCÖÀ™Å’À0þim+¡Ûºm?ïÐdÜHhAå,ãwÖÀñë3ÖþœÀ0 3>=ç.á¡’¨ÿñVOù-÷mræ/D„=êÊ2†”¼+yÏg¬"ÜL4O(?uÞ¾@;4(]w‘;pNã  "|¼lÊDK–cáÆg\8atÅüúhlõé`9ï?Þ6ZÅbÒÁ¡ ëMv7±Š¥ƒGñÕ'ŒmD°}x×BÃS¼µ ¶5oT²ýMž7ã©àÖ¾OšP!9Á`8q ê<¢>S¹>I7/ήy×y6E݌ς×yH:ÿ´>×·LèÙ{ÙíxÀ-]œõ/úl^Ö¿Éóf|Ìú}égó¬Ïú?¥x4̓|Ã¥ãÞg$ܼxè³yYÿ&»›ñY0ë÷› æ³6ë‡Öý·—ø¨²<à|Æ9@:øøõ)!2y±g,|®ü~3Ë|Önòß~Ö;î@½®eÃŽœÏx·? "|¼lŠÏ’»ýcáÆg¼ÛïD„á®h¯——ûñÏT9?‰ãZJº›Œ dVàâfND‡ýÁœáÝ~'"¼b5kN*±‡Í‘Sˆgýáú ¯%“þ±ˆp3Ó8éïD„ñu¾ÞFK§:¼ sß$§úá`xjÞ…žMO7±ö…ƒOqªï„ƒ_¸ °®£+ÃB8ÿvÎúÂÁxnÞnÿ&¹›ñYp·ᬿ~ýÜ‘ö·M\ÔYoyÄÍ4®ÂÁðÚ¼ 'lËHl—Ìß@ÄtÂÁhÿÆ‚A6+„ƒñÞí?^<ÊÌbÂÁ¡ú2' ÈÁ €„ƒGs%ì`?½Ô*q! #çý¹àîŒ?y¥g,|®c$l+P·Ûÿ^ð?ƒ^ŽÇýIrÁÍ‹‡³k^Þ¿IífÖ±`Þï7pì‹ìóþ¸kÛî†ãåþ€óçý¹àã×gä°9¹`[Db«ØÝ“zGËéOEšÓqÞƒ-¿å|Æy@.ø>ãÛLæýUu÷7ºÈó~'ü~=±ò_“zméÚþ>Îg¼×¼xømλ哓 Fï‹`Þï¹3ø6\ðW0po{p>Rp>ã¬? |Ÿ0ÏrrÁøéà-Ÿ;gýN.ø‰î]ËãlPΕ’ ÎÿrÁ'ð>KnõWÍÝ_¿MÎÿ;¹àÛºŒÀmgþÏ{?B,ÿvÎÿbÁxn^þ¿ í&âæX,¸É58ÿwbÁ+ú=š›LêbÁÖ‡Î.bÁxn^ö¿u©Êø,˜ý{6¤­gýÕþçMß×MÝÜzÆÙ@,øxÙŒ\cÚÍø,˜ý“X°­D]N‹Wæ £ sžâì? |üæµ§ö>g6Ðúœmí÷¬»ÓÃõ9³ñ>g¶‚äøøc=áóó½1ã×é ¿h}£‘öA.§´W( /7R.ÿ;j¥#ø8L<~ïsf+HÒgÁRáÆŒ_§,Œ–IÏvÔê¾aaÁöç?õ“’”…q¿ø¬Ÿá³äÁ¥²ðÞå ÿ€u9;¾ƒ'¾ûWµ]În\F8Õa´»£{×hª+C¤:lpÊšqÎA¾ÊS.sð—«›xof=Þz-[n\Gt²Ã¯»ÈÑÌA4ºžª$H‚nã[CÂm¡J"æ¶œ±-7£’µq!8 bô-}!+>¾](Bƒ¸”Äì´˜qÐiÉô»ü‡ÿqI¨nœÆµDyô ;}ÞדïÙ–an™ã âxÝ(4T¸–¹œð0þºCJpã)® :ááÛú/oÜr»¾•Vp>ã " ;|Ÿá³$%x,;ÜøŒ+';Œžwt‚„S!;Œ;WÙa<ª B)HNvØV‘àÉ|';üø è ¿åæWÇ‹‡ßfèQÌgIrðXvø˜gè\à„Â}ñzÝQCœß&ÇK!;Œ·p->~ý—ª+æ³dyP$~/Õϸ<ð²Ãès¹Æ „ }FHUÉWï½53‹€C)xgr>×å±âšÊá6*D…1fŸ%$ˆáØo 6Ó’g EGø÷™Æ5@'AŒýÊNÖÓg"™U Û"G…ß!ªÀ'̳œ±-(¡Èù"âãÑšËâ줞óÞ•×¹;è#' 7/­h1âÐ<Ë _,ÿyñ ìW:bøìñ¹Ÿ’PÂgûo9Ÿq% >Ϙgɳ„±q³žq%àˆq·cµ˜kN"Æ¿+!EÌ…fLŠ8Vhn½‰M±qã4.:-âÛuˆ³ƒ«ëÝH¡D §q)P"ÆsóJœ1~:V @(‘ÒZ§D -ܿ奿 sŸ$Çë†Ëؼ`“åÍÌ®áÂ9»HNvta¬a _¤XÆöœÏ¸8^<ôYˆB[ú“ÀX¸ñ^øöÂåîFÔƒÒ²ò@ï3Ò¶•-bTà3–þd0Ön|Æ€Ó~¾M~ø¤sŠy¦ÒÒ¶…-â³yç9ùaà^%j|Æéy´¦eÏïã ÅQ¸Tg$?|`—LøŒy–LÿÇêÃÏ8ý÷êÃO´r9ïú3\êÃ8­á«DÇ‹‡ëYæà_ÿÓ¾”¹Kç1`,>ÜøŒ÷ÿø0.+ HÑ.„ø0óþÿñâ‘Ïbâá°éûf|Lÿýt@úï´‡×嘳7(ÓÈ„ö0ÞÂéÿñâ¡ÏBT‚˜Ï’éÿXz¸™gœþ{éáºB/£õLHÃgœþ éa.ÍcÒÃ1Ÿ%ÆÊÃÏ8ûwÊÃï63üv+V±2Ìeœó¯ήy9ÿ&Õ›ù"ƒ9¿Ožì‹l/}Vè%6í"dk!8Œ÷pþ/‡Åüš—ÿo2¼¯óÒ¶¨»B„ãñºŸ;³œ—•ÜLãü_è ŸÍËÿ7Iߌφâó›$¹a[:Ÿ-võö5\ÇTã ’n^<ü:çlоŸ•4ú·­lRÆ?­¦ée+û¹@xâÅ C(B=wÏ–3éç+ÊEîýŸþÓÿس.†tݶŒÃÂŽqÿ÷6N¬a%çGJfoûŸǸÿ¶ýŸÿßÿõ÷ÿúÿb©Ø¯?nRSãœ?'0 Èû–ÿ¶Xý?ÿð÷?ÿ “†lÈÈöWaÃeÍvÜ?ýý¿ÿ¯þ·ø_ö^ûòråH‘Ãí¡íYëi3hÞfм͠56-™ÁµÙÚ~½¥‡æmÍÛ ZcóÐ’‰b‘tí¡íÙXÍÛ š·´Ææ¡Yº’XÇŠjmOyzhÞfм͠56-yÿ¡èŒöÐöÌ¢‡æmÍÛ ZcóÐ’»ŒE̳‡¶ðš·4o3hÍCKnæaÍÚ'{hÞfм͠56-yd^ô+{h{0ì¡y›Aó6ƒÖØ<´äÖT‘‰ì¡í ‡æmÍÛ Zcë¡áFIê ÝÇÿùO-4¶ýaŠè[úzŽû«°ý­·yh¹h€Î­î'ÿ‚×s4`›AãhÐÙ<´\4¸­ÃÞk xœAãhÐÙ<´\4ÀAŒðGgÐ8t6-  †  q4àq£AgóÐrÑà^äñú?(GgÐ8t6-  ¹$¼ÆÑ€Ç4ŽÍCËEô¥Ð8ð8ƒÆÑ ³yh¹hpßÔØüºÆÑ€Ç4ŽÍCËEl”¯q4àq£AgsÐ6 ­x¾†c\†F6D²Ù Z›‡–ŒEþªûBÉfи6`›A»¬ îIå«}¼›kEyª ï<μ&¢Akó^KFƒ"ëÔ{MDgÐD4hmZ2õ¤šˆ4Π‰hÐÚ<´d4("E=4 hœAÑ µyhÉhPD†zh"Ð8ƒ&¢AkóÐ’Ñ ˆôôÐD4 qMDƒÖæ¡%£A»é¡‰h@ã šˆ­ÍCKFƒ¢)ÓCÑ€Æ4 Z›ƒ–”“ÁekŽdÃ’K6@#–ÜÖæ¡%£AQJé¼F6ƒ&¢Ù Úu4Ø´C1´hôÐDm@ãÌk"´6ïµd4(’=4 hœAÑ µyhÉhPÄ5zh"Ð8ƒ&¢AkóÐ’Ñ ¨YôÐD4 qMDƒÖæ¡%£AQ£è¡‰h@ã šˆ­ÍCKFƒ¢ÌÐCÑ€Æ4 Z›‡–ŒE”¡‡&¢3h"´6- Š€AMDgÐD4hmZRbà^ÚùwÐȆ%—l€F6,¹­ÍCKFƒÒ4¿‡&vŠhœA;E­ÍCKî•ô=4 hœAÑ µyhÉhPZ¾÷ÐD4 qMDƒÖæ¡%£AéëÞCÑ€Æ4 Z›‡–Œ¥ËyMDgÐD4hmZ2”.å=4 hœAÑ µyhÉhPzv÷ÐD4 qMDƒÖæ¡%£AiÝCÑ€Æ4 Z›‡–Œ¥¹tMDgÐD4hmZ²ù4ú’sm@6D²Ù Z›‡–Œ¥erç5²4QÍ ]×É–Ê÷Ò™¸‡&¢3¯‰hÐÚ¼×’Ñ ´ÿí¡‰h@ã šˆ­ÍCKFƒÒe·‡&¢3h"´6- JïÛšˆ4Π‰hÐÚ<´d4(½k{h"Ð8ƒ&¢AkóÐ’Ñ trí¡‰h@ã šˆ­ÍCKFƒÒ0µ‡&¢3h"´6- J_Òšˆ4Π‰hÐÚ´dKRÐ%8 K.ÙlXr[›‡–Œ¥Ëfç5²4 ÈfЮ£ÁÖw2±STúTöÐD4 qæ5 Z›÷Z2”v=4 hœAÑ µyhÉhPZ3öÐD4 qMDƒÖæ¡%£Aé…ØCÑ€Æ4 Z›‡–Œ¥A`MDgÐD4hmZ2”.€=4 hœAÑ µyhÉhPZÚõÐD4 qMDƒÖæ¡%£Aé-×CÑ€Æ4 Z›ƒ–ì*²9G²aÉ% ‘ KnkóÐ’Ñ 4Cë¼F6ƒ&¢Ù Úu4H6K»—Æd=4 hœyMDƒÖæ½–Œ¥µWMDgÐD4hmZ2”6[=4 hœAÑ µyhÉhPºYõÐD4 qMDƒÖæ¡%£AiÕCÑ€Æ4 Z›‡–Œ¥éRMDgÐD4hmZ2”ÞF=4 hœAÑ µyhÉhPZõÐD4 qMDƒÖæ %[ ÝK§žÙ°ä’ ÐȆ%·µyhÉhPºæôÐĹ3hâÜ µyhÉsƒÒw¦‡&¢3h"´6- Jw—šˆ4Π‰hÐÚ<´d4(=Wzh"Ð8ƒ&¢AkóÐ’Ñ ´6顉h@ã šˆ­ÍCKFƒÒ¤‡&¢3h"´6- J£Žšˆ4Π‰hÐÚ<´d4(­.zh"Ð8ƒ&¢AkóÐ’Ñ ´è¡‰h@ã šˆ­ÍAKvœ¸—Æ 4²! ÐȆhÐÚ<´d4(Mzh"Ð8ƒ&¢AkóÐ’Ñ ´!衉h@ã šˆ­ÍCKFƒÒ ‡&¢3h"´6- ¿‡&¢3h"´6- ѽ‡&¢3h"´6- Q½‡&¢3h"´6- m»‡&¢3h"´6- Sº‡&¢3h"´6- !¹‡&¢3h"´6-ÉE¾ .2Û ™mˆ×\ä{’‹¼w—ú‰clÐÄN‘à"wã¼×’Ñ@p‘ïd3h~åÇTp‘;›‡–Œ‚‹ é_·hм͠‰hpÍE¾o\àÄi‹à"ïïhÿÈͯüMDƒk.2Z{äH˜‚‹¼¿ÃCó+¿AÑàš‹|߸À¯ù$Lâ›×ü8ƒ&¢Á5í½“^ó+ºAÑ€lMDƒk.ò}ãg¼æWtƒ&¢Ù šˆ×\d4NzͯèMD²4 ®¹Èh¦‘‚¶ï—\¶ýaM:Ü‚òWaû[oë×µeãÇÿ ûxkgи6èlZ.,‚‹Ì6óG¶™×šqZ.,‚‹Ì6ƒÆÑ€m­ç¡åj¨ÁÒÛ G¶´fœ‡–‹и6àq6×8t6-W Ÿ½€Æµ3h :›‡–‹èÉ) q4àq£AgóÐrµz h xœAãhÐÙ<´\4@+ £3h :›ƒ–ä"ƒëÌЙǚà"w6-·Sâ€&¢à"ó³X<®¹È`uäb(ñ‰ÿ‚×óNÛÌk¼SÔÙ¼×’Ñ@p‘qM™j¶4® :›‡–Œ‚‹Œ;sšˆ‚‹Ü=ë¡%£à"㇀Ƶ³¹ÖŒóÐ’Ñ@p‘qš( qmÀã Z3ÎCKFÁEÆÖ¶€æm6×D4¸æ"c$ù…Šh@cd‚‹Ì6óZó>ïµd4\d$ýÂkÞf^Ñàš‹Œè‘óšà"ïïèKd¶šà"w6çµ œ¨ î`¯ .2Ãôš‹Œÿ¿¤×üŠŽh@cÌ5ÁEf›A»® 6.pÆk~E7h".23h×µÁÆÎ@µqŒÍk".r7Îϵd4\dM‹¹&¢à"wÏzhÉh ¸Èh×* ‰h ¸ÈݳZ2.òB6ûƒŠh ¸ÈÝ8- y!›AóQÃÖ5Q\s‘— œù Dm@cƒ&¢à"wãœ×’\äEp‘Ùh‚‹Ì6,×\äeã'¼&¸Èû;\ \dgÐ.o˜.8MDâ›×ÄN‘à"wãü4Y.2ä—xñ\dg^»Ž8ã5 ˆcl^Ñ@p‘»qÞkÉh ¸Èü^Ñ@p‘»g=´d4\ä…læ5 ¹ç¡%£à"/d3h".r7ÎCKFÁE^ÈfÐD4\änœ‡–¬ 2b®‰h ¸ÈݳZ’‹¼.2Ûà5ÁEfk.2${s ¸à"ïïpÑ@p‘yœA»ŽI.ò"¸Èl3¯‰h ¸ÈÝ8ÿMFÁE†ˆ-Ï5ÁEæqæµëh°qÑ@p‘²™×D4\änœ÷Z2.òB6ƒ&¢à"wã<´d4\ä…lMDÁEîÆyhÉh ¸È Ù šˆ‚‹ÜóÐ’Ñ@p‘²4 ¹ç¡%£à"C“U|¡".r÷¬ƒ–ä"/‚‹Ì6xMp‘Ù†Åãš‹¼l\àÄâ!¸Èû;\4\dgЮ£A’‹¼.2ÛÌk".r7ÎÿA“Ñ@p‘²4qŠ,¸ÈÝ8-yn ¸È Ù šˆ‚‹ÜóÐ’Ñ@p‘²4 ¹ç¡%£à"/d3h".r7ÎCKFÁE^ÈfÐD4\änœ‡–Œ‚‹¼Í ‰h ¸ÈÝ8- y!›AÑ@p‘»qZ’‹¼.2ÛMp‘Ù†%÷š‹¼l\àD4\äý..23h×Ñ ÉE^™mæ5 ¹çÿ Éh ¸È Ù šˆ‚‹ÜóÐ’Ñ@p‘²4 ¹ç¡%£à"/d3h".r7ÎCKFÁE^ÈfÐD4\änœ‡–Œ‚‹ :Îr™ÇÙÚ<ë¡%£à"/d3¯‰h ¸ÈÝ8- y!›AÑ@p‘»qZ’‹¼.2ÛMp‘Ù†?è5yÙ¸À‰h ¸Èû;\4\dgЮ£ÁÆÎ@çÄ16¯‰h ¸ÈÝ8ÿMFÁE^ÈfÐD4\änœ‡–Œ‚‹¼Í ‰h ¸ÈÝ8- y!›AÑ@p‘»qZ2.òB6ƒ&¢à"wã<´d4\ä…lMÔ‚‹ÜóÐ’Ñ@p‘²4 ¹ç¡%£à"/d3h".r7ÎAKr‘ÁEf  .2Û°ä^s‘—¤Èü>Þñ ˆclИ}Æ6ƒv 6.p".òB6ƒ&¢à"wãü4 y!›AÑ@p‘»qZ2.òB6ƒ&¢à"wã<´d4\ä…lMDÁEîÆyhÉh ¸È Ù šˆ‚‹ÜóÐ’Ñ@p‘²4 ¹ç¡%£à"/d3h".r7ÎCKFÁE^ÈfÐD4\änœƒ–ä"/‚‹Ì6@\d¶aɽæ"/I.ò>ÞEÁEæq¸$&¸ÈÍ{-yÃTp‘ÁEf›A|ƒk]äeã'•à"ïïp•à"ó8ûƒ^Ÿ"'¹È‹à"³Í暈‚‹ÜóÐd4\ä…lMDÁEîÆyhÉh t‘ÁEf›Í5!ìÚØ<´d4ºÈ‹à"³Í ùaЮwŠ’\äEè"³Íþ ".r7Î{- „.ò"¸Èl3¯ùa^kl=´5ÉEÞÇ÷K.ÛþÀÅQæ"³íoý8-w§hºÈl3h\°Í ]ÖëÆŽ/¹ûxï5fŸñ¸¿GƒÎæ½–« VÁEf›yk¶™×.£Áºq3^ã¦û;ú@Å6óšÖ 56ïµ\4X™mæ5Žl3hÍ8- VÁEf›AãÚ€mí2¬?8óõ+ú_ðz>7`›ýA9t6ïµ\m° .2ÛÌk Øf^kÆyh¹h° .2Û ×l3h×Ñ ÉE^™m€&t‘Ùh׺ÈëÆNÌ5ÁEÞßáÁEæqí:$¹È«à"³Í¼Æ;El3h—ì³uãg¼æWy|¡‚‹Ì6|¡‚‹ÜÙÜg°ñƒ3ÐD4\äUè"³Í¼v 6.pš_åÍkÞfP „.r7Î{- y\d¶Ù”kƒÎæ¡åjƒUp‘Ùf^ã"¶Ùô²6X“\ä}¼ËיǙ×|„0h×Ñ`ãgæš_åm®y›yMDÁEîÆ¹?h’‹¼ .2ÛMè"³ ^»ÖE^“\ä}¼ûƒ .2ÃTè"w6ïµÜNÑ*t‘Ùf^Ñ@è"wã<´dm t‘WÁEf›yÍGûƒ^×I.ò*t‘Ùf^ã"¶´ëh°ñƒ_¨à"¯‚‹Ì6óšíº6ØøÁh~EÇâ!¸Èl3h"\ë"¯?8MÔ‚‹¼¿·ý’ š¨ ®u‘× œæWtóš·Ù\µà"wãü𬠄.ò*¸Èl3¯ñNQgsÐ’\äUp‘Ù¯ .2Ûð\s‘×$yï¢ñŽ šØ)ºÈÝ8ïµd4ºÈ«à"³ PÁEîlZ2.ò*¸Èl3h"\s‘×$yïÿ ~å·?¨ˆ‚‹Üó^Kî .ò*¸Èl3¯‰hp­‹¼nüàĺ&¸Èû;\‰,¸È<ξÐ뢜&¢à"¯‚‹Ì6ƒv]lüà 4 y\d¶´ëÚ`ãg ‰Ú@p‘W¡‹Ì6ƒv½S”ä"¯‚‹Ì6|¡‚‹Ì6@»æ"¯I.ò>Þ-B™Çá ºÈÍ-I.ò*¸Èl3¯‰Ú@p‘»qZ2.ò*¸Èl3¯‰hpÍE^“\ä}¼ÿƒŠh ¸Èü¬ÍµëÚ`ã'¾PÁE^™mæ5 ®u‘ל&jÁEÞßëpÁEîÆù¹–Ü)\äUp‘Ùf^µÁµ.òºñƒ3^Ñ@p‘÷÷z¯‰¢k]äuãg ‰h ¸Èû{=4Q\ë"¯I.ò>Þ}¡B™Çá*t‘;››kI.ò*¸ÈlÃ’+¸ÈlÃâqÍE^“\ä}¼÷š8E\d~Ö ]ŸlüàÄ\\äUp‘ÙfP ®u‘ל&Î y¯û ¹ççZ²6\äUp‘Ùf^ÑàZyÝøÁ¯‰h ¸Èû{½×ÄNѵ.òºñƒ3ÐDm ¸Èû{=4 ®u‘ל&¢à"ïïõÐD4¸ÖE^7~pšˆ‚‹¼¿×CÑàZyMr‘÷ñn]ºÈ<ŸÐEîlî Mr‘WÁEf¢à"³ Kî5yMr‘÷ñÞk".2?kЮ£ÁÆNÌ5ÁE^™möÑàZyÝøÁh".òþ^÷.r7Îϵd4\äUp‘Ùf^ÑàZyÝøÁ¯‰h ¸Èû{½×D4¸ÖE^7.pšˆ‚‹¼¿×CÑàš‹¼nüà 4 y¯‡&¢Áµ.òºñƒ3ÐD4\äý½šˆ׺Èk’‹¼wëšÐEæqø „.rgs_h’‹¼ .2Û ™mXr¯¹Èk’‹¼÷^Ñ@p‘ùYƒv 6~pb® .ò*¸Èl³?¨ˆ׺ÈëÆÎ@Ñ@p‘÷÷ºÏ@p‘»q~®%£à"¯‚‹Ì6óšˆ׺ÈëÆÎxMDÁEÞßë½&¢Áµ.òºñƒ3ÐD4\äý½šˆ׺ÈëÆÎ@Ñ@p‘÷÷zh"\ë"¯?8MDÁEÞß롉hp­‹¼&¹Èûx·® ]d‡Ï@è"w6÷…&¹È«ÐEf¢à"³ Kî5yMr‘÷ñÞk".2?kЮ£ÁÆNÌ5ÁE^™möÑàZyÝøÁh".òþ^÷.r7Îϵd4\äUp‘Ùf^ÑàZyÝøÁ¯‰h ¸Èû{½×D4¸ÖE^7~pšˆ‚‹¼¿×CÑàZyÝøÁh".òþ^MDƒk]äuãg ‰h ¸Èû{=4 ®u‘×$yïÖ5âcÉ\d¶a]»æ"¯I.ò>ÞCcµ‡/Tp‘;›[<6.pâ*¸È«à"³Í  öÙ5yMr‘÷ñÞk~•·?¨`Ÿ ]änœ÷š­î¯‰h@cƒ&î .r7ÎCKFÁE^™möÑàZyMê"ïãýÔ¯òæ5o3h"\s‘פ.ò>ÞCó«¼Aó6ƒ&¢Á5yMr‘÷ñš¸a*¸Èü¬­k×wŠ’ºÈ«à"³Í¼&ø‚‹Üë?ƒG’‹¼ï½Æ¶? [À\d¶ý­ç¡å¸ÈÁEf›Aã¦l3h—ì³G’‹¼÷^ãÚ€Çý08t6ïµÜ¢‡à"³Í¼ÆÑ€mæµK¾Á#ÉEÞÇ{¯ñ"g^óã Úå¢ÇÆŽª}¼‡æWyóš·4ŽÍÿAm…Î@ãÚàA¼cƒÆÑ€mæµË¦$yï½ÆÑ€Ç™×8t6ï5[3^ãÚàA¼cóšgи6èlZŽoð\d¶4Žl³?èå ÓG’‹¼wP¡‹Ìãà5¡‹Üٜג\ä‡à"³ ^\d¶Ák×\äG’‹¼÷^Ñ@p‘ùYƒv¹SôHr‘÷ñ×<Îþ ¼SÔÙü4W<„.2ÛìʵÛÌk×Ñ ÉE~]d¶4 ¹ç½–Œ‚‹ü\d¶Ù”kƒÎæ¡ån˜>™mæ5® ØfÐfœ‡–ŒÄ'þ ^ϵÛÌk"\s‘I.ò>Þ¡~å7¯‰h ¸ÈÝ8çµ$ù!¸Èl4ÁEfþ ×\äG’‹¼w^\d‡?èÿOÙåJŽë@v+ƒYA§oÚNÿ¿î^ÐìFª>®‡@ÇoTÈEr²$ù”€EÞ´žµŒ>{‹ì𲿼kÊÚÜ Â{‘ßÀ"»¦Ð`m,òæëY »°Èo¸Ù5Ö3‹üYäåïs ÖÆ+4XÌ,ò;d‘—¿‡æ;EîShÐ fù²ÈËßCƒµÜ‹ìcõÌÝ d‘ßp/²kz `m,òæë¯A¸6ù ,²k*¨ŸlZ -d‘ßÀ"»VYÙµ*èÌ"¿CyùÛ\Ù}•5`‘7­g-ìÀ"¿EvM¡ÁNÑo­‡î‹üÙ5…kƒ™E~‡,òò÷‚ÂN°È>Vsm^|Yà`cXä7°È®)kÐ fù²ÈËß³ÝXd«¬Í;E!‹ü†{‘]Ó¬ à^äÍ×_ƒpm÷"¿EvM…µÁÌ"¿Cyù{Aam,²UAç¢E~‹ìZXd×*´™E~‡,òò·¬‹ì¾*(°È›ÖæZÈ"¿EvMYƒµ°È›¯‡v`‘ßÀ"»¦¬A7˜YäwÈ"//(t`‘}¬æÚÜ Bù ,²k*(싼ùzAÃ"¸ù ,²k*(¬ ~k=´p§Xä7°È®)487˜YäwÈ"/Ÿk°S÷"ûX͵ñù²ÈËßCƒn`|²²kƒ™E~‡,òò·Ð€Ev_…,ò¦µ¹²Èo`‘]«7Xdת 3‹üYäåïYƒs`‘}¬B›wŠBù ,²kÊ싼ùzAÃ"¸ù ,²kšk°Sô[ë¡eß½EvMYƒn,òæë¡…ÝîE~‹ìš²Ý`f‘ß!‹¼üý5€"¸ÙÇê5˜wŠBù ÷"»¦‚ÂNÜ‹¼ùzAÃ"¸ù ,²k*(tƒ™E~‡,òò·‚‹ì¾ XäMkY Yä7°È®UAEv­æÚÌ"¿Cyù{Ö ‹ìcÚÜ Bù ,²kÊt`‘7_/hØ à^ä7°È®i®A7ø­õÐÂn,òXd×ìÍ,ò;d‘—¿Ï5Ø)‚{‘}¬æÚ¼S²Èo¸Ù5Í5Ø)2M¡ÍÝ d‘ßp/²k ºÜ‹¼ùú\ »Ü‹üÙ5Í5è3‹üYäåos Xd÷UhÀ"oZËZÈ"¿Ev­ ,²k5×fù²ÈËß³ÝXd«Ðæn²Èo`‘]SÖ ‹¼ùzAÃn÷"¿EvMs ºÁo­‡v`‘ßÀ"»¦Ð Ì,ò;d‘—¿Ï5èp/²Õ\›»AÈ"¿á^d×4× À½È›¯4<7€{‘ßÀ"»¦‚¹ÁÌ"¿Cyù{Aa§îEö±*è|n²Èo¸Ùµ*(Ü‹ìZ…6ß‹üYäåoYƒ{‘ÝW5ŸB›yƒE~ýȮ)kpn÷"o¾ö„,òXd×t`‘7_-ìp/òXd×TP迵ZØ €E~‹ìšBƒn0³ÈïE^þþ@7€{‘}¬^ƒ¹„,òîEvMs ºÜ‹¼ùzAÃn÷"¿EvM…n0³ÈïE^þ^Pèp/²UAçn²Èo¸Ùµ*(°È®Uh3‹üYäåoYƒ{‘ÝWyÓÚ\ Yä7°È®)kÐ €EÞ|=´ðîE~›¦Ð ‹¼ùzha7€{‘ßÀ"»¦‚B7ø­õÐÂn,òXd×tƒ™E~‡,òò÷׺°È>VoèÜ Bù ÷"»¦¹ÝXäÍ× v¸ùmšBƒ"¸yóõÐÂ"`‘ßp/²kšk°S4ß‹|†,òòïs͵¿×þíß]Û³v~YàÿþÕßò÷Ðü¦pŸBë>…6® ÎE^þšï¹O¡ù¦›Ö³–uƒXd×TPï®)k#‹|†,òò÷¬ù7EîSÖ¼lZÏZÖ N¸Ù5eÍO‘]SÖ~ùzhÙ)ò ÷"»¦Ðz‡PÖüyÓzhÙ7E§ñÄÿ«¿ÒO‘]ShþMѦõвnp½Ȯ)kÞ \SAÇoŠÎ/ œü®õ_teÍ×®)kÞ 6­e-d‘O¸ÙµÊÜ‹ìZem¾ù Yäåo?Æ+4ÿŸ)\Shs7YäîEvM¡ùÚÀ5…6žœ!‹¼ü=kÎ"»¯æ°È›ÖçZ¶68EvMYë¿ü ºÁÌ"Ÿ!‹¼ü=ký—_¡A7yóõ¬…ÝXäXd×”5迵ZØ €E>MSÖ|màš^ƒñù ïE^þ^PÿÂÔ}ÊšïmZÏZ¶68'®n÷"»¦Ð üÖZh!‹|‹ìZXdת 3‹|†,òò·‚‹ì¾Ê°È›Ö³–Ñg'°È®)kÐ à^äÍ×C ×À"Ÿp/²kÊšó›ÖC »°È'°È®)4è3‹|†,òò÷¹ÝXd«×`^„,òiVY›»AÈ"ŸÀ"»¦7ÖÀ"o¾þ„ÝXäXd×TP迵ZÈ"ŸÀ"»VYÙµ*èÌ"Ÿ!‹¼üm®‹ì¾Ê°È›Ö³v`‘O`‘]Sh°S4³Èç—Ö¡À"¯güΤ ;EÀ"o¾žµ°c\¿k¦)4XÀ½È›¯‡î‹|‹ìš êç›ÖC ×p/òiš²;E¦é Ï ÎE^þþ†B7ÙÇ*´¹„÷"ŸÀ"»¦¬A7yóõ‚†ÝÀc½°S,²û”µñù Yäåo5,²kÚÌ"Ÿ!‹¼ü=4870î¸ÞP`‘7­4d‘O`‘]SÖ`m,òæë¡…k`‘O`‘]SÖ`m0³ÈgÈ"//(œ‹ìc5×~íY »°È'܋욲Ý`¾ù ïE^þž5?EvŸBƒµÁÌ"Ÿ_8ø—°Èëí_æShpn0³ÈgÈ"/Ïì‹ìc5׿sƒE>'®n÷"»¦¬ÁÚ`f‘ÏE^þ–5`‘ÝW¡‹¼ií YäXd×ê'Xdת 3‹|†,òò÷¬Á)2°È>V¡Íç!‹|‹ìš²k`‘7_/h¸6ùÙ5Í5Ø)šYäóË¿kÀ"¯g´ß5`‘ݧ‚Î;Eá½È'°È®© °6yóõ‚†çÆ×ïÜ‹ìš Ý`f‘ÏE^þþ†B7ÙǪ s7ïE>EvMí¿üÊtƒ™E>Cyù[Ö€Ev_…,ò¦µ¹²È'°È®UÖ€Ev­ :³ÈgÈ"/Ït`‘}¬B›»AÈ"ŸÀ"»¦¬A7yóõ‚†ÝXäXd×4× Ì,òùeƒn,òzFëæSh°6˜Yä3d‘—¿Ï5X‹ìc5׿¢E>EvMs N‘EÞ|}®…ß‹|½Ȯ© pŠ<ß‹|†÷"//(ìw¬Ð Ì,ò²ÈËßBÙ}°È›Ö ²È'°È®Õ\Ùµz fù YäåïYƒn,²Uhs7YäXd×”5èÀ"o¾^а‹|‹ìšætƒ™E>¿,pÐ €E^ÏhÝÀ| ºÁÌ"Ÿ!‹¼ü}®A7ÙÇj®ÍÝ d‘O`‘]Ó\ƒn,òæës-ìÀ"ŸÀ"»¦‚B7˜Yä3d‘—¿º°È>VÏ BùÙµ*(°È®Uh3‹|†,òò·¬‹ì¾*(°È›ÖæZÈ"ŸÀ"»¦¬Á¹°È›¯‡ž‹|½Ȯ)kpn0ß‹|†÷"//(œw¬Ð Ì,òùeƒn,òzFëæShÐ fù YäåïYƒn,²Õ:wƒE>EvM¯t`‘7_ Ân,ò ,²k*(tƒ™E>Cyù{A¡‹ìcUй„,ò ,²kUP`‘]«Ðfù YäåoYÙ}UP`‘7­ÍµE>EvMYƒn,òæë¡…ÝXäXd×”5迵Z¸6ùÙ5…Ý`f‘Ï/ t`‘×3Z70ŸBƒn0³ÈgÈ"/  ‹ìcõ†ÎÝ d‘O`‘]ÓkÝXäÍ×çZØ €E>EvM…n0ß‹|†÷"//(t¸ÙǪ c7¸Byù÷Ð\ûûpíÐþݵ½ WÈ"/Í¿)rŸBsyÓzhÙ¦—ñÄÿ«¿ÒwŠ\Shþ…é¦õвnp‹ìš ê;E®© #‹|…,òò÷‚úÚÀ}ÊšwƒMëY˾)º€EvMYsúÌ5em…6²ÈWÈ"/ º°È>V¡çWÈ"/ÍYd÷)k¾6Ø´ö|Yàà ù2MsÍy×”µñ Ó+d‘—¿gÍé3÷)k¾6Ø´žµŒ7¸€EvMYóoŠ\SÖÆµÁõe“‚ö_ùúÉÙ5eÍ¿)Ú´žµlmpÁ½È®)ký—_¡A7˜ïE¾Â{‘—¿Ï5_¸O¡ù)ò¦µ¬…,ò,²k•5`‘]«¹6³ÈWÈ"/˰È‹¼i=káÚXäË4eÍwŠ\SÖænÞ‹|‹ìšBƒµ°È›¯g-Û)º€EvM¡A7yóõе1Æõ»fšBƒµÜ‹¼ùzha7ùÙ5½°6˜Yä+d‘—¿¿¡NŸ¹O¡A7˜Yä+d‘—¿‡k`‘}¬ÞÐñ ÓëË=XäõŒ}WÒ5e ºÁÌ"_!‹¼ü-kÆ×k,²k•µ™E¾Byù{h°SdÜqe XäMkoè— ,ò,²k vŠfù YäåïYƒµ°È>VwŠÂ{‘/`‘]Ó\ƒn,òæë »°È°È®© °6˜ïE¾Â{‘—¿vŠ€Eö±*è¼6Yä îEvM…"¸yóõ‚†k`‘/¸Ù5Öó½ÈWx/òò÷‚ÂÚXd«‚Î;E!‹|Á½È®UAEv­B›Yä+d‘—¿e îEv_XäMks-d‘/`‘]SÖ`m,òæë¡…çÀ"_À"»¦¬ÁNÑÌ"_!‹¼ü½ pn,²Õ\›wŠÂ{‘/`‘]SAam,òæë ×p/ò÷"»¦‚ÂÚ`f‘¯E^þ^PX‹ìcUÐùÜ d‘/cŒk±gš ;E¦)´ym²È°È®)487y󵹲ȗñÄ•5`‘]«¹,ò¦õÐôïúààÀ"_¦UÖ€Ev­ :³ÈWÈ"/{ Œ;VhÐ LShóNQÈ"_À"»¦Ð`§XäÍ× î‹|‹ìšæœ"Ï,ò²ÈËß çÀ"ûXt>EYä Xd×TP87yóõ‚†§ÈÀ"_À"»¦‚ÂNÑÌ"_!‹¼ü½ °S,²UAçn²È°È®© Ð €EÞ|­ !‹|O\ÝXdת À"oZ-ìÀ"_¦UÖ€Ev­ :³ÈWÈ"/›kÆ+4è¦)´¹„,ò,²k º°È›¯4ìÀ"_À"»¦¹Ý`f‘¯E^þ^PèÀ"ûXtî!‹|c¬7vŠ€EvŸB›wŠBùÙ5Í5Ø)yóõ¹î‹|‹ìšæìÍ,ò²ÈËßçì‹ìcUÐy§(d‘/ã‰k®‹ìZe XäMk Yä Xd×j®‹ìZemf‘¯E^þVPãŽtÓÚÜ BùÙ5…ÝXäÍ× v`‘/`‘]Ó\ƒn0³ÈWÈ"//(t`‘}¬ :wƒE¾Œ1Ö ÝXd÷)´¹„,ò,²kškÐ €EÞ|}®…ÝXä Xd×4× Ì,ò²ÈËßçt`‘}¬ :wƒE¾€Ev­ ,²kÚÌ"_!‹¼ü-kÀ"»¯ ,ò¦µ¹²È°È®)kÐ €EÞ|=´ðÜXä Xd×”587˜Yä+d‘—¿Î €Eö±škó¹AÈ"_À"»¦‚¹°È›¯4<70Ƹºi vŠLSÖæn²È°È®)4èÀ"o¾žµ°‹|‹ìš^è3‹|…,òò÷׺°È>V»AÈ"_À"»VÙµ mf‘¯E^þ–5`‘ÝWyÓÚ\ Yä Xd×”5èÀ"o¾ZØ €E¾€EvMYƒn0³È×—‚€E^Ïø]de ¾)yóõ¬…ß‹|Á½È®)kðMÑÌ"_!‹¼üý5€µ°È>VoèÜ BùÙ5º°È›¯4ìÀ"_À"»¦‚B7˜Yä+d‘—¿º°È>V»Á²ÈË¿‡æÚ߇kÿ€öï®í½Cyù{hþ…©ûš³È›ÖCËxƒXd×”5ï®)kãNÑýeÿûOîò÷¬ù¦îSÖ¼lZÏZ¶StOü¿ú+}màšBó¢Më¡eÝàÙ5Ô×®© ãNѲÈËß êÝÀ}ÊšS´i=kÙ)ò ,²kÊšw×”µñ›¢;d‘—¿gÍO‘ݧ¬y7Ø´ž5ý'ohÿå×kàÝÀ5…æ¼Á¦µÐBùÙµ*(°È®UAgùYäåoÙ}•5`‘7­g-ìp/òmš²ÝÀ4emî!‹|O\sÍ4…æç®)´‘7¸Cyù{A¡‹ìcÚ¸St‡,òò÷ÐüÜÀ}šk¾6Ø´>ײ¢Xd×TPß)rMY×wÈ"/Ïšaê>eÍ¿)Ú´žµlmp‹ìš²æ_˜º¦¬ßÝ!‹¼ü=kÐ Œ;VÖ Ì÷"ß!‹¼ü-4ãŽ+kÀ"»VY›Yä;d‘—¿‡kãŽ+kÀ"oZ›k_8hïÀ"ßÀ"»¦Ðœ>Û´Z¶St‹ìš ÝXäÍ×C ×À"ßp/²kʬ æ{‘ïð^äåïs º°È>V¯Á¼6ïE¾EvM…n,òæë ׯ׿V»AÈ"ßÀ"»VÙµ mf‘ïE^þ–5`‘ÝWyÓÚ\ YäXd×”5øÂXäÍ×C ¿)ùÙ5e Î fùYäåï…s`‘}¬æÚ|n²È7°È®© pn,òæë ¿0ùÙ5xƒ™E¾Cyù{Aá S`‘}¬ :ó_8ø—°È7°È®)kÐ fùYäåïYƒn,²UÖæn²È7°È®Õk,²kÚÌ"ß!‹¼ü-kÀ"»¯ ,ò¦µ74d‘o`‘]SÖ ‹¼ùzha7ùÙ5e ºÁÌ"ß!‹¼ü½ Ð €Eö±šks7ïE¾EvM…n,òæë »1Æõ§i Ö¦)kóÚ d‘o`‘]Sh°6yóõ¬…k`‘o`‘]ÓkÝ`f‘ïE^þþ@7ÙǪ c7ø„,òòö÷áÚ? ý»k{A?!‹¼ü=4ÿ¦È} ÍO‘7­‡–Ñg`‘]SÖ¼¸¦¬çŸE^þž5ß)rŸ²æÝ`ÓzÖ²sƒ°È®)kþ…©kÊÚØ >_ø¿ÿSrù{Ö|§È}Êšaºi=kY7øOü¿ú+ý Sך¯ 6­‡–"€EvMõnàš :® >!‹¼ü½ ~Šì>eÍ»Á¦õ¬e_˜~à^d×”5?EvMY›»AÈ"€Ev­BÙµ mf‘?!‹¼ü­ À"»¯ ,ò¦µ‚†÷"€EvMYƒn,òæë¡ekƒ°È®)4?EvMÏ >!‹¼ü½ ¾6pŸ êç›Ö³¦_è O\?¹¦)k¾6pMYÏ >_8 ­ÿ¢+4èÀ"»O¡kƒOÈ"//¨ï¹OõoŠ6­4[|€EvMuÞÀ5emü¦è²ÈËß³æk÷)kþMѦµ¬…,òîEv­²,²k•µ™Eþ„,òò·¬Á½È‹¼i=káÚXä°È®)4?EÞ´ZØ €Eþ˜¦‚B7yóõе°È`‘]SÖ Ì,ò'd‘—¿Ï5X‹ìcõÌÝ d‘?À"»¦‚úN‘k mîá½È`‘]Sh°6yóõ¹v`‘?À"»¦¹kƒù^äOx/òò÷¹ÝÀ¸c…Ý`f‘?!‹¼ü-4`‘ÝW¡‹¼i­ !‹ü1ƸþQdZÍ5`‘]«×`f‘?!‹¼ü=kþ…©û”5è3‹ü Yäåï¡ÁN°È>VY›×!‹üÙ5vŠà^äÍ×çZ¸6ù,²k*(ìÍ,ò'd‘—¿ÖÀ"ûXtî!‹üÙ5º°È›¯4ìÀ"à^d×TPèó½ÈŸð^äåï…n÷"ûXtÞ) YäÜ‹ìZîEv­B›YäOÈ"/ËÜ‹ì¾*(Ü‹¼im®…,òXd×”5Ø)‚{‘7_-\‹üÙ5e Î fù²ÈËß ;EÀ"ûX͵ùÜ d‘?À"»¦‚ÂN°È›¯4<7ù÷"»¦‚¹Á|/ò'¼yù{Aa§Xd«‚Îçá½È`‘]SAa§XäÍ× žÀ½ÈÓœÀ½È›¯…²È`‘]«Ð€Ev­ úÛ×CËnÂü‹ìšBsÞÀ5…6þÏŸE^þö‹ì¾zCEÞ´žµ°À½ÈÓ”5Ø)‚{‘7_-Ü)ù,²kÊìÍ,ò'd‘—¿vŠ€Eö±škóNQÈ"€EvM…"`‘7_/hxŠ ,òXd×TP87˜YäOÈ"//(œ"‹ìcUÐùÜ d‘?À"»¦‚B7y󵂆,òîEv­B3_XäMë¡…ÝXäÜ‹ìšBƒoŠfù²ÈË߿܋ì>…;E3‹ü Yäåï¡ÁN°È>¶^ƒß¾^а‹üÙ5e ºÁÌ"Byù{Ö ‹ìc•µ¹„,òXd×ô†B7yóõ‚†ÝXäi vŠ€EÞ|=´p§Xä°È®i®ÁNÑÌ"Byùû\ƒ"`‘}¬æÚ¼S²È`‘]«‚‹ìZ…öÛ× ²È`‘]Sh°6yóõÐÂSdã‰ëHXd×j®‹¼i=´pm÷"LSÖ`m÷"o¾ZØ €Eþ‹ìš²Ý`f‘?!‹¼üí 5îXYƒ"ÓôÌÝ d‘?À"»¦Ð ‹¼ùzAÃn,òÇ4…ÝXäÍ×C »°È`‘]Ó\ƒn0³ÈŸE^þ>× ‹ìc5׿n²È`‘]«‚‹ìZ…6³ÈŸE^þ–5`‘ÝWyÓÚ\ Yä°È®)kpn,òæë¡…ÝXä°È®)kpn0³ÈŸE^þ^P87ÙÇj®Íç!‹üÙ5º°È›¯4<7ù,²k*(œÌ,ò'd‘—¿Î €Eö±*è|n²È`‘]SAáÜXäÍ× žc\ÿ”4M¡ÁN‘iÊÚÜ Bù,²k°È®Uh3‹ü Yäåos Xd÷Õk,ò¦µ‚†,òXd×”5èÀ"o¾ZØ €Eþ‹ìš²Ý`f‘?!‹¼ü½ Ð €Eö±šks7Yä°È®© Ð €EÞ|½ a7ù,²k*(tƒ™Eþ„,òò÷‚B7ÙǪ s7ø²À¥,òXd×”5XÌ,ò'd‘—¿g ÖÀ"ûXemìOÈ"/ÿšk®ýÚ¿»¶¿OÈ"/ÍYd÷)4?7Ø´Z¶Sô‹ìš²æÝÀ5emd‘ŸE^þž5?7pŸ²æÝ`ÓzÖ²¢Xd×”5ÿÂÔ5emìOÈ"/ÏšŸ¸OYó/L7­g-ë°È®)k¾Säš²6~aú|Yàÿþ“»ü=kÞ Ü§¬ù)ò¦õ¬e;EñÄÿ«¿ÒO‘]ShÞ 6­‡–­ `‘]SA}màš :wƒE~€Ev­BÙµ mf‘ŸE^þ6×€Ev_XäMk YäXd×”5èÀ"o¾Z¶6x€EvM¡ù¹k*èÈVsmî!‹üO\íXd×*kÀ"oZ+hÈ"?À"»V¯°È®UÖfù Yäåo5ÆX¡A7yóõ¬…ÝÀcvŠ€EvŸ²6¯ BùÙ5e vŠ€EÞ|=káÚXäXd×ôÀNÑÌ"?!‹¼ü}®ÁÚXd«‚Î;E!‹ü‹ìš k`‘7_/hØ €E~€EvM…n0³ÈOÈ"//(t`‘}¬ :wƒE~€Ev­ ,²kÚÌ"?!‹¼ü-kÀ"»¯ ,ò¦µ¹²È°È®)kÐ €EÞ|=´°‹ü‹ìš²kƒ™E~Byù{Aa§Xd«¹6Ÿ„,ò,²k*(싼ùzAÃs`‘`‘]SAa§hf‘ŸE^þ^P87ÙǪ óNQÈ"?À"»¦‚ÂN°È›¯4<7ùÙ5vŠæ{‘ŸE^þVPãŽ+kÀ"»VYä'¼yù{hpŠ ,²Uh#‹ü„,òò÷Ðüÿ)r_XäMks-¼ùÙ5Î €EÞ|=´p§XäXd×”5Ø)šYä'd‘—¿vŠ€Eö±škóNQÈ"?À"»¦‚ÂN°È›¯4Ü)ùÙ5vŠfù Yäåï…Sd`‘}¬ :Ÿ„,ò,²k*(œ"‹¼ùZACùÙµ Xd×*k¿}=´ŒE~€EvM¡9}æšB›»AÈ"?Æ×v °È®Õk,ò¦õ¬…k¸ù1MYƒn÷"o¾ZØ €E~€EvMYƒn0³ÈOÈ"/ûñ0îXYƒµišks7YäXd×t`‘7_/hØ €E~€EvM…nð[ë¡…;EÀ"?À"»¦Ð`§hf‘ŸE^þ>×`§Xd«¹6ï…,ò,²k5×€Ev­B›Yä'd‘—¿eÍc…ÝXäÍ׿Zx/ò,²k vŠ€EÞ|=´°‹ü‹ìZ½À"oZ-ìÀ"?À"»¦Ð Ì,ò²ÈËßç¬ €Eö±z æn²È°È®i®A7yóõ‚†ÝXäXd×TP迵ZØ €E~€EvM¡A7˜Yä'd‘—¿Ï5èÀ"ûX͵¹„,ò,²k5×€Ev­B›Yä'd‘—¿e Xd÷UAEÞ´6×BùÙ5e º°È›¯‡v`‘`‘]SÖàÜ`f‘ŸE^þ^P87ÙÇj®Íç!‹ü‹ìš k`‘7_/hxn,ò,²k*(œÌ,ò²ÈËß çÀ"ûXt>7YäXd×TP87yóõ‚†çÀ"?À"»¦‚¹ÁÌ"?!‹¼ü­ ÆWÖ€Ev­ :³ÈOÈ"/ Î Œ;®¬‹¼i­ !‹ü‹ìš²ÝXäÍ×C »°È°È®)kÐ fù Yäåï…n,²Õ\›»AÈ"?À"»¦‚B7yóõ‚†ÝXäXd×TPè3‹ü„,òò÷‚B7ÙǪ s7YäXd×TPèÀ"o¾^аc\Û̦)4870MY›Ö?e,òÿVPÐþíÐþݵ-kõGѹÁͺøš±È»ÖC‹XäzTÿ•ÿhÊšuДµ‰E®?ŠºÁÏš}a >eͺÁ®õ¬E;Eõ¨þ˯¬Y7M¡ÙNÑ®õТ/LëQýW^¡ÙNh ;0ݵZÔ êQý]¡Ù¦ )4ë»ÖC‹vŠêQý—_¡Y7M¡ÙNÑ®õТ¢zTÿ•WhvŠ šB³¢]ë¡EÝ Õåší¦Ðlm°k-´ŒEþùËYdÐêwÍYdÐêwmd‘ëÂn`…6wƒŒE®GÁN‘iškݧ‚B7ø­õ¹vg‘믄n`šBƒ¢‘E.{¸60ÆXs ÖÎ"ƒO»AÆ"×£ ˜¦‚ÂÚÀYäÝ× vg‘ëñ°Sdš Ý`d‘ËvcŒUPèÎ"ƒO»AÆ"ÿüå,2hUPg‘A«ÐF¹þ(\O\Ys´*¨³È»ÖæZÆ"×£`m`š²çÎ"ï¾ZØ œE®ÇÃÚÀ4e Î F¹ìáN‘1Æ*(¬ œEŸæÚtŠ\vg‘ÿ<£õPg‘Á§ÐæµÁ—VTÎ"×㡘¦‚¹ÁÈ"—=Ü)2ÆX…sg‘Á§¬M§ÈõGa7pùÏ3zAa§ÈYä}lCÃnà,r=ºß‹ >emî‹üó—ß‹ Zý®9‹ Z…6²ÈõGa7ð{‘ÿ<£ÔYdð)´‰>«? ׯ×kà÷"ƒVo¨³È»ÖæZÆ"×£àÜÀïEŸBƒnð[ë¡…ÝÀYäú+¡˜¦Ð`m0²Èe»1Æ*(¬ œEŸæÚÜ 2¹;E¦é …"g‘w_/hØ œE®ÇC70M…¢‘E.{Ø Œ1VAamà,2øTÐùÜ c‘ëQpŠlš Ú}ÊœüÖZA3ùç/g‘A«ÐœE­²6²ÈõGa7pùÏ3Z7p| mî‹\‚µ³Èà«‚:‹¼k½ áÚÀYäz<¬ œEŸ²6ï}Yàà_¹Î"×㡘¦¬A7Y䲇ÝÀxâúñp4…;E#‹\öp§ÈYä?Ïè¯tg‘÷±}®…ÝÀYäz…6ï}YààwÍYäz<œ˜¦‚¹ÁÈ"—=ìÆ+kÐ œEŸ²6wƒŒE®GA70Mo(tg‘w_CÃnà,r=ºß‹ >emî‹üó—ß‹ ZeÍYdÐ*´‘E®? »ñÄ5×ü^dÐê5py×ZA3¹ÝÀ4e º³È»¯‡vg‘ëñÐ LSÖ Œ,rÙÃn`Œ± ÝÀYdði®ÍÝ c‘ëQÐ LSA»OYƒµÁo­4\8‹\%tÓtƒ‘E.{Ø Œ1VA¡8‹ >tî‹\‚nà÷"ƒOYƒoŠÆ{‘Ëvg‘ÿ<£-öœEŸ²6vƒWÈ"/ÿθö÷kÿ€öï®í¯Á+d‘—¿‡æ,²ûšaºi=´ìù,²kÊšw×”µ‘>{…,òò÷¬y7pŸ²æÝ`ÓzÖ²nðÙ5eÍwŠ\SÖÆnðÊîE®Gy7pM¡y7pM¡kƒ×—þïkƒåïõnà>Ô»Á¦õ‚fÝà,²kÊZï ÍO‘7­‡–"¿€EvM¡ùÚÀ5tVsmî!‹üÙ5Ö~/òîë »°È/`‘]SAáÜ`f‘_!‹¼ü½ ~Šì>…kƒ™E~…,òò÷Ð`mà÷"WhÐ ~k½ áÚXä°È®)kÐ fù²ÈËß²æ÷"ÿ¸¯B3_½¡3‹ü Yäåï¡A7ÙÇ*´‘7x…,òò÷Ðú/ýxw¬¬ÁÚà·ÖæZÈ"¿€EvM¡ÁÚXäÍ×C O‘E~‹ìš²ç3‹ü Yäåïõ/LݧÐ`m0³È¯E^þœ"‹ìcõÌkƒ/ ¬¨€E~‹ìš²Ý`f‘_!‹¼ü=kÐ €Eö±ÊÚ|n²È/`‘]Ó ;EÀ"o¾ö††,ò Xd×*4`‘]«¬Í,ò+d‘—¿Ô¸c…;E¦)´¹„,ò Xd׬ €EÞ|½ áÚXä°È®Õê÷"ïZ-ìÀ"¿€EvM¡A7˜YäWÈ"/ŸkÐ ü^ä ºÁÌ"¿Byù{hÐ ü^ä Ö¿µ^ÐðÜXä°È®© Ð fù²ÈËß³ÝXd«¹d÷"×£à›"`‘ݧ¬ÁÚ`f‘_!‹¼ü-kÆ×ï°È®UÖfù²ÈËßCƒµ°È>V¡ÍÝ d‘_À"»¦¬A7yóµ74d‘_À"»¦Ð`mà÷"ï¾ZØ ü^äz<ì‹ì>tÞ)ÊîE®GÁ¦À"»¯ÞP`‘7­g-Ü)ùeš çÀ"o¾ZØ €E~‹ìš²Ý`f‘_!‹¼üýǺ°È>VsmîÙ½Èõ(èÀ"»OYƒn0³È¯E^þ–5ãŽk®‹ìZemf‘_!‹¼ü=4èÆWÖ€EÞ´ö„,ò Xd×”5èÀ"o¾Z¸6ù,²kÊœÌ,ò+d‘—¿º°È>Vsmî!‹üÙ5Î ü^äÝ× v`‘_À"»¦‚ÂÚ`f‘_!‹¼ü½ pn,²UAíY O‘E~‹ìš²ç¿µZxn,ò Xd×tƒ™E~…,òò·‚ú½È?î«ÐÌWYäWÈ"/ ºß‹\a}ö[k Yä°È®Õ°È®)k3}öeƒ½\`‘_À"»¦‚B7˜YäWÈ"//(t`‘}¬²6wƒE~‹ìš ÝXäÍ×çZØ €E~‹ìš Ý`f‘_!‹¼ü½ Ð €Eö±*èÜ Bù,²k*(ðÀ"o¾^а‹üò{‘+487ð{‘wßÚ²È˿Ե¿\û´w­‡–ýχñÄÿ«Ç{7pM¡y7Ø´Zö…é,²kÊš¯ \SÖÆnp„,òò÷‚ö_y…æ;E®)´ñ ÓãËÿ÷Fµü=4ïîSAýÜ`ÓzA3úìÙ5eÍ»kÊÚÈ!‹¼ü=k~nà>eÍ»Á¦õ¬e;E°È®)kþ…©kÊÚØ Ž/ œÌµþ+¯ß)rMYóµÁ¦õ¬eÝà€{‘]SÖ¼¸¦¬¼Á²ÈËßæšqǰȮUh3‹|„,òò÷Рw\yÓZA¿|p0×€E>€EvM¡ù7E›ÖCËvŠ`‘]SA¡‹¼ùzhÙ¹Á÷"»¦Ðú/¿²Ý`¾ùø²ÀIAýÜ`=ã÷üShÐ €EÞ|=kÙÚàÙ5…æç®é ¿):Â{‘—¿¿¡¾6pŸ êç›Ö³–íÀ"»¦¬ùÚÀ5em<78Byù{Öœ7pŸ²æ;E›Ö²²È°È®UÖ€Ev­²6³ÈGÈ"/˰È‹¼i=káÚXäîEvM¡A7˜ïE>¾,pð»,òzFû]ƒ{‘ݧ‚ÎkƒE>à^d×4× À½È›¯4\‹|À½È®© þMѦõÐÂn,ò÷"»¦Ð`m0ß‹|„÷"/C¡w¬Ð Ì,ò²ÈËßCƒµÜ‹ìcõÌÝ ¼ùÙ5½°6y󵹲ȰȮUhÀ"»VY›Yä#d‘—¿îEv_Í5`‘7­g-ìÀ"À"»¦Ð Ì,ò²ÈËß³;EÀ"ûXtî!‹|À½È®i®A7€{‘7_/hØ €E>€EvM…n0ß‹|„÷"//(ì‹ìcUÐym²È°È®© °S,òæë ×À"À"»¦‚ÂNÑÌ"!‹¼ü½ °6€{‘}¬ :ï…,ò÷"»VÙµ mf‘E^þ–5¸Ù}UP`‘7­ÍµE>€EvMYƒs`‘7_-Ü)ùÙ5eÍO‘7­‡îÁ½ÈÜ‹ìšBƒ¢™E>Byùû\sÞÀ} ºÁ|/òÞ‹¼ü=4èp/²Õ:wƒE>à^d×ô@7yóõ¹v¸ù0M¡ÁN°È›¯‡ž‹|‹ìšæìÍ,ò²ÈËßæ°Èî«Ð€EÞ´–µE>à^dת À"»V¯ÁÌ"!‹¼ü=kÎ"»OYƒµÁÌ"!‹¼ü=4X‹ìc•µymðeƒM,`‘`‘]SÖ Ì,ò²ÈËß³ÝîEö±ÊÚ|вÈÜ‹ìš^87€{‘7_CÃSd`‘`‘]SAa§hf‘E^þ^PØ)ÙǪ óNQÈ"À"»¦‚ÂN°È›¯4d‘`‘]«Ð€Ev­²6³ÈGÈ"/+(°È,ò¦õ¬…;EÀ"p/²k ºÁo­‡® €E>€EvM¡ÁÚ`¾ùïE^þ^Pø¦îEö±škã¦GÈ"/ º°È>V¡ÍÝ d‘¸Ù5½¡Ð €EÞ|}®…ÝXäXd×4× Ì,ò²ÈËß ÝXd«‚ÎÝ d‘`‘]SA¡‹¼ùZACù€{‘]«Ð€Ev­²6³ÈGÈ"/+¨qÇ Íÿg ×ÚÈ"!‹¼ü=4X‹ìcÚü…iÈ"À"»¦¬Á7EÀ"o¾>×Â"`‘`‘]«¸yÓzhṰȰȮ)4Ø)šïE>Â{‘—¿Ï5Ø)ÙÇj®Í;E_8Xì‹|‹ìš²Ý`f‘E^þž5èÀ"ûXemî!‹|‹ìšÞPèÀ"o¾ö„,ò÷"»V¡‹ìZemf‘E^þVP¸Ù}5×€EÞ´žµpm,ò÷"»¦Ð`mð[ë¡…k`‘`‘]Sh°6˜Yä#d‘—¿ÖÀ"ûX͵ym²È°È®é5€/LEÞ|½ á7EÀ"À"»¦‚Â7E3‹|„,òò÷‚Â7EÀ"ûXtæ Â{‘`‘]SAáÜXäÍ× ž‹|‹ìš ç3‹|„,òò·‚‹ì¾ XäMkY YäîEv­ ,²k5×fùYäåïYƒµ°È>V¡ÍkƒE>€EvMYƒµ°È›¯4\À½ÈÜ‹ìšæœÌ,ò²ÈËß ;EÀ"ûXtÞ)ú²ÀÁ?ÀE>€EvMYƒn0³ÈGÈ"/Ït`‘}¬²6wƒE>€EvM¯t`‘7_ Ân,ò,²k*(tƒù^äŸE^þ½ ®ýýãÚ? ý»k{Ö~Â{‘—¿‡æô™ûš³È›ÖCËÖ?À"»¦¬ù7E®)kc7ø YäåïYóSd÷)k¾6Ø´žµ¬üÀ½È®)kþ…©kÊÚ¸6ø ïE^þž5ïîSÖ|§hÓzÖ²µÁñÄÿ«¿ÒwŠ\ShÞ 6­‡–ü‹ìš êß¹¦‚ŽÝà'd‘—¿ÔwŠÜ§¬ù¦›Ö³–uƒºÖþÿþŸÿ×Có/LݧмlZ -d‘ëÞe Xd÷Uhæ«‚Î,r]àYÕÿGÑò·¬Á½ÈîShÐ ~k=ka7¹n¤k™¬×À4…æ;E›ÖCËvŠêz$((t`‘}¬ :~STwo„í¿òõ»fŒ±²ÝXäÍ׳–Ô&Yƒn,²UÖÆµAý¯ÄaÖú/º²ÝXäÿOÙ¹$Knë@tK–KŸÒüÙÞÿŽòÒƒKäA„sšR#ªÐ uZîShã¹Aý™ahýW^¡ùlàš?7Ø´^Ðì ÓúÿÝ  Ð €Eök•µñÜ þ£ 0kÐ Œ1Öcàç®)´_¾–µE®ÿå³fZ…,²kÚÌ"VeÍxâZkÀ"»Vk XäMëY »°ÈÅz7€ï"»OY›gƒE. ÝXd¿V¡ÍÝ d‘ëmiÍÏ Ü§‚úNѦõ‚†ÝXäzÅ êçîSÖæn~¹Þ-¬A7€ï"ûµ mî!‹\t`‘ýZ…6Ï!‹\;ìt`‘ýZ…6wƒE®í f`‘ýZ…6wƒE®ÙÃC3­º°È®Uh3‹\M,ëð]äußó‚BówŠ\Shã;E•Ñ0´þË_ Xd×êw XäMk¿k!‹\÷‡‚B7Ù¯UÖæn²È`‘]SAa6yóõ¬…ÝXä°È®© °S4³ÈŸE^þ6"w¬¬ù¦®© s7Yä°È®)4Ø)yóõ‚†³°È`‘]SAa§hf‘?!‹¼ü½ Ð €EökUй„,òXdת À"»V¡Í,ò'd‘—¿e Xd÷UAEÞ´¶ÖBù,²kÊœ‹¼ùzháN°È`‘]SÖàÜ`þ.ò'ü.òò÷‚ÂlßEökµÖæsƒEþÀw‘]SAa6yóõ‚†;Eð]ä|Ù5Î fù²ÈËß ³°È~­ :Ïáw‘?À"»¦‚ú)²k mž ~Xà`Xä°È®© pn0³ÈŸE^þVP`‘ÝW¡‹¼ií1Yä°È®UAEv­ :³ÈŸE^þž5Ø)‚ï"ûµ mÞ) Yä|Ù5eÍß)rM¡Í³AÈ"€EvM¡Ál,òæëk-œ Œ1®aÏ4…ݾ‹¼ùzha7ùcšBƒÙXäÍ×C Ï €Eþ‹ìš~<àÜ`f‘?!‹¼üý …"`‘ýZ=s7Yä°È®© pn,òæk Yä°È®UhÀ"»VY›YäOÈ"/+(°È,ò¦õ¬…;EÀ"€EvM¡Á)òÌ"~Xàà_À"¯{´ý5ó)4˜ fù²ÈËß ³°È~­ÖÚ<„,òÇãê¦é1€nßEÞ|}­…ÝXäi º°È›¯‡v`‘?À"»¦µÝ`f‘?!‹¼ü}­A7Ù¯ÕZ›»AÈ"€EvM…n,òæk Yä°È®UhÀ"»VY›YäOÈ"/+(°Èf>…6Ÿ„,ò¾‹ìš²;Eð]äÍ× î‹ü1M¡Ál,òæë¡…ï‹üÙ5N‘çï"Âï"/_kpŠlܱBƒsƒ™Eþ„,òò÷ÐàXd¿VÁ|n²È`‘]ÓZƒs`‘7__ká¹1ÆÕÞMSh°Sdš²6wƒEþ‹ìšBƒn,òækY Yä°È®UhÀ"»VY›YäOÈ"/{ €Ev_=¡À"oZÏZ8‹üÙ5…³ÁÌ"~Xà`6yÝ£ÍæSh0Ì,ò'd‘—¿f`‘ýZ­µy6Yä°È®é1€ÙXäÍ××Z8‹üÙ5Î fù²ÈËß çÀ"ûµ*è|n²È`‘]SA¡‹¼ùzAÃ7LEþ‹ìš ç3‹ü YäåoÙ}°È›Ö²²È`‘]«‚‹ìZ­µ™Eþ„,òò÷¬Á¹°È~­B›Ï Bù,²kÊÌÀ"o¾^Ðp6ù,²kZk0Ì,ò'd‘—¿f`‘ýZt~Ã4d‘?À"»¦‚ÂN°È›¯4Ü)2ƸþnšBƒÙÀ4emî!‹üÙ5…ÝXäÍ׳v`‘?À"»¦ÇºÁÌ"Ÿ!‹¼üûcàÚ_õªPõoÐþÙµ=kgÈ"/ÍYd÷)4§Ï6­‡–Í'°È®)k¾Säš²6vƒ3d‘—¿gÍß0uŸ²æ³Á¦õ¬eÝàÙ5eÍO‘]SÖÆÙà YäåïYónà>eÍwŠ6­g-› N`‘]SÖ¼¸¦¬;Eç üßçÐåïYóÙÀ}ÊšŸlZÏZ¶StOü¿ú+ýÜÀ5…æo˜nZ-ë'°È®© ¾Säš :¾az†,òò·‚‹ì¾Ê°È›Ö²²È§ñÄUP`‘]ShÐ fù ¿‹¼ü=k>¸O¡ùNѦõ¬eç'°È®ÕZÙµZk3‹|†,òò÷¬ùN‘û”5Ÿ 6­g-{§èÙ5eÍwŠ\SÖÆÙà YäåïYós÷)k¾S´i=kÙlpO¬'ºi ºÁo­‡v`‘OÓTPŸ \SAÇsƒ3d‘—¿Ôy÷)k>lZËZÈ"ŸÀ"»VYÙµÊÚÌ"Ÿ!‹¼ü-kÀ"»¯²,ò¦õ¬…³°È'°È®)4è3‹|†,òò÷¬Ál,²_«‚Žo˜ž!‹¼ü=4èð]d¿V¡Í³Á ü+XäXd×TP˜ fù YäåïYƒn,²_«¬Í³AÈ"ŸÀ"»¦ß)rM¡;EgÈ"/ÏÌÀ"ûµ mî!‹|‹ìš²³|yóµßµE>Ev­BÙµÊÚÌ"Ÿ!‹¼ü­ ð]d÷Õ ßEÞ´žµ°Àw‘O`‘]ShÐ æï"Ÿ!‹¼ü=kÐ €EökUй„,ò ,²kZk°S,òæë g`‘O`‘]SA¡Ì,ò²ÈËß ÝXd¿V»AÈ"ŸÀ"»¦‚B7yóõ‚†³°È'°È®© °S4³ÈgÈ"//(ÌÀ"ûµ*è¼S²È'°È®UAEv­B›Yä3d‘—¿e Xd÷UAEÞ´¶ÖBùÙ5e Î €EÞ|=´p§XäXd×”587˜Yä3d‘—¿f`‘ýZ­µy6YäXd×TPØ)yóõ‚†çÀ"ŸÀ"»¦‚ÂNÑÌ"Ÿ!‹¼ü½ °S,²_«‚γAÈ"ŸÀ"»¦‚ÂN|yóõ‚†çÀ"ŸÀ"»¦‚ÂNÑÌ"Ÿ!‹¼ü­ À"»¯ByÓZÖBùÙµ*(°È®ÕZ›Yä3d‘—¿g Î €EökÚ|вÈ'°È®)kþN‘k mž BùÙ5…³°È›¯¯µp6ùÙ5=0ÌßE>Ãï"/_k0‹ìת ólðÃûkÀ"ŸÀ"»¦¬Á¹ÁÌ"Ÿ!‹¼ü=k°S,²_«¬Í;E!‹|‹ìšØ)yóµÇ d‘O`‘]«Ð€Ev­²6³ÈgÈ"/+(°È,ò¦õ¬…;EÀ"ŸÀ"»¦Ð`§hf‘ÏE^þž5Ø)Ù¯UAçn²È§1ÆuèhšÖtÓÚ<„,ò ,²k f`‘7__kál,ò ,²kZk0üÖzhá)2°È'°È®)4è3‹|†,òò÷Ǻ°È~­ÖÚÜ BùÙ5­5èÀ"o¾VÐE>Ev­BÙµÊÚÌ"Ÿ!‹¼ü­ À"»¯Ö°È›Ö³v`‘OÓ”5Ø)yóõÐÂ"`‘O`‘]SÖ`§è·ÖC ß0ùÙ5…ïÍ,ò²ÈËß×¼a ,²_«Ç`~§(d‘OcŒ«‡š¦µo˜š¦ÐæÙ d‘O`‘]Shpn,òæëk-<7ùÙ5­587˜Yä3d‘—¿¯587Ù¯UAçsƒE>Ev­ ,²kÚÌ"Ÿ!‹¼ü-kÀ"»¯ ,ò¦µµöÃ#2°È'°È®)4˜ fù YäåïYƒÙXd¿VgƒE>1®ß5Ó´Ö`60M¡Í³AÈ"ŸÀ"»¦Ð`6yóõµÎÀ"ŸÀ"»¦µ³ÁÌ"Ÿ!‹¼ü}­Á¹°È~­ :Ÿ„,ò ,²k*(œ‹¼ùzAÃs`‘O`‘]SAáÜ`f‘ÏE^þVP`‘ÝW¡‹¼i-k!‹|‹ìZXd×j­Í,ò²ÈËß³çÀ"ûµ m>7YäXd×”587yóõ‚†³°È'°È®i­Ál0³ÈgÈ"//(ÌÀ"ûµ*è<„,ò ,²k*(ÌÀ"o¾^Ðp§XäXd×TPØ)šYä3d‘—¿vŠ€EökUÐy§è‡þ) ,ò ,²kÊtƒ™E¾Byù÷¬¹öWýGÕÎ"»öÏîÛ×Ú²ÈËßCsÙ}WNŸmZ-Û)º€EvMYó"×”µ±\!‹¼ü=k>¸OYó¢MëY˺Á,²kʚϮ)kãlp…,òò÷¬y7pŸ²æ§È›Ö³–ͰȮ)kÞ \SÖÆ¢+d‘—¿gÍg÷)kÞ 6­g-Û)º€EvMYóÙÀ5emì× üß»Áò÷¬ùN‘û”5ï›Ö²²È|ٵʚù*4`‘7­‡–}ûìÙ5…æß>s­ :³ÈWÈ"/+(|Ù}ÊšïmZÏZvnp‹ì𲿳kÊÚ¸St…,òò÷¬ù¦îSÖ|6Ø´žµì¢ Xd×”5ß)rMYgƒ+d‘—¿gÍß)rŸ²æ;E›Ö³–ͰȮ)k~nàš²6î]?,pð“ ,òºÇïL*4è¦)´¹„,òe<ñÿêöÐ à»ÈîShã¹Á²ÈËßÖ|Ù}µÖÌW¡Í,ò²ÈËßCƒÙÀ¸c…³Áo­=?,p°Ö€E¾€EvM¡A7˜Yä+d‘—¿g f`‘ýZtî!‹|Áw‘]«'Xd×Ú<„,ò,²k º°È›¯¯µp6€ï"_¦)4˜ LSÖæÙ d‘/`‘]ShÐ LShs7Yä ¾‹ìšBƒn`šB›»AÈ"_À"»¦Ðü"×ÚÜ BùÙµ Xd×*´™E¾ByùÛï°È\`‘7­=¡áw‘/`‘]SÖ`§XäÍ×C gø.òešBƒÙÀ4tî!‹|‹ìšBƒ"`‘7_ÏZ8‹|‹ìšÖìÍ,ò²ÈËߘ €EökUй„,ò,²k*(t`‘7_/h¸S,ò,²k*¨¿S´i=´ìù2ƸfÓ”5覩 s7Yä Xd×*4`‘]«Ðfù Yäåo°Èî«‚‹¼i­ !‹|‹ìš²ÝXäÍ×C »°È°È®)kpn0³ÈWÈ"//(ì‹ì×j­Í³AÈ"_À"»¦‚Âl,òæë g`‘/`‘]SAa§hf‘¯E^þ^P87Ù¯UAçÙ d‘/`‘]SAa6yóõ‚†ÝXä Xd×TP87˜Yä+d‘—¿Xd÷UhÀ"oZËZÈ"_À"»VÙµZk3‹|…,òò÷¬ù;EîSÖ`§hf‘¯E^þì‹ì×*kól²È°È®© 0‹¼ùúZ g`‘/`‘]SAa6˜Yä+d‘—¿f`‘ýZtž BùÙ5f`‘7_/h8c\ÿ7M¡A70MY›wŠBùÙ5…³°È›¯e-d‘/`‘]«Ð€Ev­²6³ÈWÈ"/{ €Ev_=¡À"oZÏZøN°È°È®)4è3‹|…,òò÷¬A7Ù¯UAçn²È°È®i­A7yóõ‚†ÝXä ¾‹ìš Ýà·ÖC g`‘/`‘]Sh0Ì,òõÃÇgÀ"¯{´£Zó)4x§hf‘¯E^þþø¦îSh°S4³ÈWÈ"/ N‘Eökõ„Î;E!‹|‹ìZ=¡À"»V¡Í,ò²ÈËß²,²ûª À"oZ{BÃï"_À"»¦¬ÁN°È›¯‡î‹|‹ìš²;E3‹|ý°ÀÁ°ÈëíÇÃ| Þ)šYä+d‘—¿¯5xÃXd¿VÁüNQÈ"_À"»¦µ§ÈÀ"o¾¾ÖÂwŠ€E¾LSh0‹¼ùzhál,ò,²kZkÐ fù Yäåïk º°È~­ÖÚÜ BùÙµ*(°È®Uh3‹|…,òò·¬‹ì¾*(°È›ÖÖZÈ"_À"»¦¬A7yóõÐÂnßE¾LShpŠ ßEÞ|=´7ùÙ5ºÁÌ"_!‹¼ü}­A7Ù¯Õc0wƒ8è¡À"_À"»¦¬Ál0³ÈWÈ"/Ïœ‹ì×*kó¹AÈ"_À"»¦ÇvŠ€EÞ|ý1Ï €E¾€EvM…sƒ™E¾Byù[AEv_…,ò¦µ¬…,ò,²kUP`‘]«µ6³ÈWÈ"/Ïœ‹ì×*´™> Yä Xd×”5èÀ"o¾^а‹|‹ìšÖtƒ™E¾Byù{A¡‹ìת s7Yä Xd×TP˜ €EÞ|½ ál,ò,²k*(ìÍ,ò²ÈËß ;EÀ"ûµ*è|n²È°È®© pn,òæÛ z‡,òòïYsí¯kƒöÏ®õÐ2úì6žøu{ç \ShÎlZ-;7¸EvMYóÙÀ5emìwÈ"//¨Ÿ¸OYó¢MëY˺Á ,²kÊšŸ¸¦¬ïÝ!‹¼ü=kÞ Ü§¬ù¹Á¦õ¬eç7°È®)kÞ \SÖÆSä;d‘—¿gÍg÷)kÞ 6­g-Û)ºEvMYóÙÀ5emìwÈ"/Ïšï¹OYóÙ`ÓZÖBùٵʰȮUÖ~ûzha7ù†ï"»VYƒï"oZ-ìÆW£Ù5…æ§È›ÖCËvŠn`‘]SA}6pMO‘ïE^þöc¬Ð ‹¼ùzÖ²SäXdך¿aêš²6ÎwÈ"/Ïš¿Sä>­5ß)Ú´žµl6¸EvMYós×”µq§èYäåïYóÙÀ}ÊšŸlZÏZ¶St‹ì𲿳kÊÚxnp‡,òò·¬‹ì¾Ê°È›Ö²²È·ñÄõ“ ßEvM¡Ál0³ÈwÈ"/Ïšï¹O¡A7˜Yä;d‘—¿‡³°È~m­µ™E¾Cyù{hθOYó¢Mëk-ìÀ"ßð]d×Ìów‘ïð»ÈËß³ÝXd¿VgƒE¾Ev­~×€EvM¡ÍÝ d‘o`‘]Sh0‹¼ùúZ »°È·i º|yóµÐBùÙµ Xdת 3‹|‡,òò·ÇXd÷Õ ,ò¦õ¬…³°È7|Ù5…Ý`þ.ò~yù{Ö ‹ìת ól²È7°È®i­Ál,òæë »°È7°È®© Ð fùYäåï…n,²_«‚ÎÝ d‘o`‘]SAa6yóõ‚†;EÀ"ßÀ"»¦‚Âl0ù¿‹¼ü½ °S,²_«‚γAÈ"ßÀ"»VÙµ mf‘ïE^þ–5`‘ÝWyÓÚZ YäXd×”587yóõÐÂ"`‘o`‘]SÖàÜ`f‘ïE^þ^P˜ €EökµÖæsƒE¾EvM…"`‘7_/hxn,ò ,²k*(ìÍ,ò²ÈËß çÀ"ûµ*è<„,ò ,²k*(ÌÀ"o¾^Ðp6ùÙ5Î fùYäåoÙ}°È›Ö²²È7°È®UAEv­ÖÚÌ"ß!‹¼ü=k°SßEökÚ|вÈ7|Ù5e Î LShól²È7°È®)4˜ €EÞ|}­…³°È7°È®é1€Ù`f‘ïE^þ¾Ö`6Ù¯UAçÙ d‘o`‘]SAa6yóõ‚†³°È7°È®© 0Ì,ò²ÈËß ³°È~­ :Ï!‹|‹ìZXd×*´™E¾Cyù[Ö€Ev_XäMkkí‡þïï€ßÀ"»¦¬Ál,òæë¡…³1ÆuÚbšBƒn`š :wƒE¾EvM¡A7yóõ¬…ÝXäXd×´Ö Ì,òýÃ'k­ÿò« Ð LSh0Ì,ò²ÈËߟP˜ €EökµÖæÙ d‘o㉕58E†ï"»O¡Íï…,ò ßEvMœÀw‘7_{ BùÙµ Xd×*k3‹|‡,òò·µ,²ûê1yÓzÖÂs`‘oø.²k Î ~k=´°‹|‹ìšBƒ¢™E¾Cyù{Aa§Xd¿VkmÞ) YäÛãúñ0Mì™¦ÐæwŠBùÙ5…o˜‹¼ùúZ ß)ùÙ5­5xÃô·ÖC g`‘o`‘]Sh0Ì,ò²ÈËߘ €EökµÖæÙ d‘o`‘]«µ,²kÚÌ"ß!‹¼ü-kÀ"»¯ ,ò¦µµ²È7°È®)k0‹¼ùzha7ùÙ5e ºÁü]ä;ü.òò÷‚B7€ï"ûµZks7Yä¾‹ìš ݾ‹¼ùzAÃs`‘o`‘]SAa6˜Yä;d‘—¿f`‘ýZtž BùÙ5Î €EÞ|½ á¹°È7°È®© pn0³ÈwÈ"/+(°Èî«Ð€EÞ´–µE¾Ev­ ,²kµÖfùYäåïYƒs`‘ýZ…6Ÿ„,ò ,²kÊ싼ùzACú XäXd×´Öà Ó™E¾Cyù{Aû/¿²ÝÀ4tž BùÙ5…³°È›¯4œ €E¾EvM…Ù`f‘ïE^þ^PØ)Ù¯UAç¢E¾EvM…"`‘7ß^Ð'd‘—Ïšk}\û´v­‡–Ñg°È®)4ÿ¦k í—¯‡–í=À"»¦Ð|6pM¡Ýà Yäåïõ7Lݧ‚úl°i=kY7x€EvMYós×”µq6xByù{Ö¼¸OYósƒMëYËfƒXd×”5ï®)kã)ò²ÈËß³æ³û”5ï›Ö³–í=À"»¦¬ùlàš²6vƒ'd‘—¿gÍwŠÜ§¬ùl°i-k!‹ü‹ìZe Xd×*k3‹üüðÁÿýølù[Ö€Ev_e XäMëY »°È°È®)4?7Ø´Z¶Sô‹ìš ê³k*èxŠü„,òò÷‚úN‘û”5Ÿ 6­g-;E~€EvMYóÙÀ5emœ žE^þž5?EvŸ²æ;E›Ö³–ͰȮ)kþN‘kÊÚ¸Sô„,òò÷¬ùlà>eÍÏ 6­g-Û)z€EvMYóÙÀ5em<7xByù[Ö€Ev_e XäMkY YäXd×*kð]d×*k3‹ü„,òò÷¬ùN‘û”5è3‹ü„,òò÷Ð`6Ù¯UÖæn²È|Ù5f`‘7__ka7ùÙ5fƒ™E~Byù{A¡‹ìת ól²È°È®© Ð à»È›¯4œ €E~LSh0‹¼ùzha7ùÙ5­5˜ æï"?!‹¼üm­w\YÙµZk3‹ü„,òò÷Ðü­s_e XäMk ¿‹ü‹ìš²;EÀ"o¾Z8Àw‘ø.²kÊìÍ,ò²ÈËß ³°È~­ÖÚ¼SôÃs(°È°È®)kÐ fù YäåïYƒn,²_«¬ÍÝ d‘`‘]ÓcÝXäÍ׃°‹ü‹ìš ³ÁÌ"?!‹¼ü½ °S,²_«‚γAÈ"?À"»VÙµ mf‘ŸE^þ–5`‘ÝWyÓÚZ YäXd×”5èÀ"o¾ZØ €E~€EvMYƒn0³ÈOÈ"//(t`‘ýZ­µ¹„,ò,²k*(싼ùzAÃs`‘`‘]SAa§hf‘ŸE^þ^P87Ù¯UAç¢E~€EvM…ÙXäÍ× ÎÀ"?À"»¦‚Âl0³ÈOÈ"/+(°Èî«Ð€EÞ´–µE~€Ev­ ,²kµÖfù YäåïYƒ"`‘ýZ…6Ÿ"‡,ò,²kÊœ‹¼ùzAÃSd`‘Ó싼ùzháN°È°È®é1€Ù`f‘ŸE^þ¾Ö`6Ù¯ÕZ›gƒE~€EvM…ÙXäÍ× ÎÀ"?À"»¦‚Âl0³ÈOÈ"//(ÌÀ"ûµ*è<„,ò,²kUP`‘]«Ðfù YäåoYÙ}UP`‘7­­µE~€EvMYƒÙXäÍ×C g`‘`‘]SÖ`6˜Yä'd‘—¿f`‘ýZ­µy6øaƒ"`‘`‘]SÖ Ì,ò²ÈËß³ÝXd¿VY›»AÈ"?ð]d×ô@7€ï"o¾þ„ÝXäXd×TPè3‹ü„,òò÷‚B7Ù¯UAçn²È°È®UAEv­B›Yä'd‘—¿e Xd÷UAEÞ´¶ÖÂï"?À"»¦¬A7yóõÐÂn,ò,²kÊtƒ™E~Byù{A¡‹ì×j­ÍÝ d‘`‘]SAa§XäÍ× î‹ü˜¦Ðà S`‘7_-|§XäXd×´Öà Ó™E~~Xà ½‹¼îñ{ý)k°S,òæëY wŠŒ1þ_…ÝXd÷é1˜»AÈ"?À"»VYÙµ mf‘ŸE^þöã,²ûj­‹¼i­ !‹ü‹ìš²ÝXäÍ×C »°È°È®)kÐ fù Yäåï…n,²_«µ6wƒE~€EvM…n,òæë »°È°È®© pn0³ÈOÈ"//(œ‹ìת ó¹AÈ"?À"»¦‚B7yóõ‚†ÝXäXd×TP87˜Yä'd‘—¿Xd÷UhÀ"oZËZÈ"?À"»VÙµZk3‹ü„,òò÷¬Á¹°È~­B›Ï BùÙ5e Î €EÞ|½ á¹°È°È®i­o0³ÈOÈ"//(ÐgÀ"ûµ*èÌ„,ò,²k*(ÌÀ"o¾^Ðp6ùÙ5fƒ™E~Byù{A7Ù¯UAgú,d‘`‘]SAû/¿²Ýà·¶ô²ÈË¿g͵¿>®ý Ú?»ÖCËXä/°È®)4g‘]Sh#‹üýaÿûºü=kÞ Ü§¬9o°i=kÙlð5žøõW:oàšBóÙ`ÓzhY7ø‹ìš ê§È®© ãlð Yäåïõnà>eÍÏ 6­g-› ¾À"»¦¬y7pMYÏ ¾!‹¼ü=k>¸OYón°i=kÙ¹ÁXd×”5Ÿ \SÖÆnð YäåïYó"÷)kÞ 6­e-d‘¿À"»VYÙµÊÚÌ"Cyù[Ö€Ev_e XäMëYËXä/°È®)k¾Säš²6Îß8hTÀ"¯{즮)kÐ fù²ÈËß ê;EîSh>lZ/höNÑXd×TPß)rMgƒoÈ"/ÏšŸ"»OYó¢MëYËfƒ/°È®)k~Šìš²6î}Cyù{Ö|6pŸ²æ§È›Ö³–í}EvMYóÙÀ5em<7ø†,òò·¬‹ì¾Ê°È›Ö²²È_`‘]«¬‹ìZemf‘¿!‹¼ü=k0w¬¬Ál0³ÈßE^þÌÀ"ûµÊÚ¯k{AÃÙXä¯i*(ÌÀ"o¾ZØ €Eþ‹ìš ³ÁÌ"Cyù{A¡‹ìת ól²È_`‘]SA¡‹¼ùzAÃÙXä/°È®© Ð ~k=´°‹üÙ5…³ÁÌ"CyùÛZÙ}šùj­Í,ò7d‘—¿‡æ,²ûZ÷)´y§(d‘¿À"»V°È®)´y6¿‹üÙ5…æç®)´¹„,ò¾‹ìšBƒnßEÞ|í Yä/°È®)4˜ €EÞ|=´p§ÈãÚú3M¡ÁN‘i*èÜ Bù ,²k º°È›¯g-ìÀ"EvM?Ð fù²ÈËß×`§Xd¿VgƒEþ‹ìZXd×*´™Eþ†,òò·¬‹ì¾*(°È›ÖÖZÈ"EvMYƒ"`‘7_-<7ù ,²kÊìÍ,ò7d‘—¿vŠ€EökµÖæsƒEþ‹ìš ÝXäÍ× v`‘¿À"»¦‚ÂNÑÌ"Cyù{AáÜXd¿VwŠBù ,²k*(œ‹¼ùzAÃÙXä/°È®© 0Ì,ò7d‘—¿Xd÷UhÀ"oZËZÈ"Ev­ ,²kµÖfù²ÈËß³;EÀ"ûµ mž Bù ,²kÊÌÀ"o¾^Ðp§Xä/°È®i­Á¹Áo­‡î‹üÙ5…;E3‹ü Yäåïk vŠ€EökµÖæÙ d‘¿À"»¦µ³°È›¯4œ €Eþ‹ìš ³ÁÌ"Cyù{Aa6Ù¯UAçÙ d‘¿À"»VÙµ mf‘¿!‹¼ü-kÀ"»¯ ,ò¦µµ²È_`‘]SÖ`6yóõÐÂÙXä/°È®)k0Ì,ò7d‘—¿f`‘ýZ­µy6Yä/°È®© 0‹¼ùzAÃÙÀãÚ)‚ï"»¦‚Âl0³ÈßE^þ^P˜ €EökUÐy6¿‹üÙ5f`‘7_/h8Àw‘¿¦)48E†ï"o¾ZÈ"Ev­BÙµ*èÌ"CyùÛZÙ}õ‹¼i=ká;EÀ"á»È®)48Ež¿‹üýaƒwŠ€E^÷øIf`‘7_ÏZ8c\¿k¦)4870Mkmî!‹üÙ5…ÝXäÍ׳v`‘¿À"»¦µÝà·ÖC ß)ù ,²k Þ0YäoÈ"/ÿñ€wŠ€EökµÖæ7LÃï"EvMk ºi mž Bù ,²k°È®Uh3‹ü YäåoÙ}µÖ€EÞ´ö„,òXd×”5˜ €EÞ|=´p6ù ,²kÊÌ3‹ü Yäåï…ÙXd¿Vkmî!‹üÙ5º°È›¯4ìÀ"EvM…n0³ÈßE^þ^P˜ €EökUÐy6Yä/°È®© 0‹¼ùzAÃÙXä/°È®© pn0³ÈßE^þVP`‘ÝW¡‹¼i-k!‹üÙµ*(°È®ÕZ›YäoÈ"/Ïœ‹ì×*´ùÜ d‘¿À"»¦¬Ál,òæë g`‘¿À"»¦µç3‹ü Yäåïú Xd¿VyƒEþ‹ìš ùzAÃÙXä/°È®© 0Ì,ò7d‘—¿f`‘ýZtž Bù ,²k*(ÌÀ"o¾½ oÈ"/ÿž5×þú¸ö7hÿìZ-c‘_`‘]ShÎ"»¦ÐÆ7LßE^þž5ïîSÖ|§hÓzÖ²ÙàÙ5eÍ»kÊÚø†éûÃÿ÷M¬åïYóÙÀ}ÊšwƒMëYËN‘_ã‰ÿW¥wךŸ"oZ-› ^`‘]SA½¸¦‚ާÈoÈ"//¨ÏîSÖ¼lZÏZvŠü‹ì𲿳kÊÚØ ÞE^þž5?EvŸ²æ³Á¦µ¬…,ò ,²k•5`‘]«¬Í,ò²ÈËß²,²û*kÀ"oZÏZvnð‹ìš²æ;E®)kãlð†,òò÷¬9}æ>eÍwŠ6­g-› ^ã‰ë'×4eÍÏ \SÖÆ¢÷‡°Èëûi‹kÊtƒ™E~Cyù{Aý"÷)4ß)Ú´^Ðl6xEvMõwŠ\SAÇ¢7d‘—¿gÍg÷)kþNѦõ¬e;E/°È®)k>¸¦¬çoÈ"/˰È‹¼i-k!‹ü‹ìZe Xd×*k3‹ü†,òò÷¬Ál,²_«Ðæn²È¯1Æõ“kš²³i mž Âï"¿À"»¦Ð ‹¼ùúZ g`‘_`‘]ÓcÝ`f‘ßE^þ¾Ö ‹ìת ól²È/°È®© Ð €EÞ|½ ál,ò ,²k*(tƒ™E~Xàà_À"¯{´y˜O¡Ál0³ÈoÈ"/[kÀ"»¯ByÓZACù5ž¸~×L«µfšBsyÓzhál,òkšBƒÙ¾‹¼ùzháN°È/|Ù5e fƒ™E~CyùûZƒ"`‘ýÚú]›¿‹ü†,òò÷Ð`§Xd¿V¡çoø]äåï¡A7Ù¯Uhs7YäXd×ô@7yóõÇ ìÀ"¿À"»¦ÇºÁÌ"¿!‹¼ü½ °S,²_«‚γAÈ"¿À"»VÙµ mf‘ßE^þ–5`‘ÝWyÓÚZ YäXd×”5èÀ"o¾ZØ €E~EvMYƒn0³ÈoÈ"//(t`‘ýZ­µy§(d‘_`‘]SAý"×ÚÜ ~XààŸ’À"¿À"»¦‚ÂNÑÌ"¿!‹¼ü½ pn,²_«¬Í;E!‹ü‹ìš çÀ"o¾þ„†;EÀ"¿À"»¦‚Âl0³ÈoÈ"/+(°Èî«Ð€EÞ´–µE~Ev­ ,²kµÖfù YäåïYƒ"`‘ýZ…6ï…,ò ,²kÊ싼ùzAÃs`‘_`‘]ÓZƒSä™E~Xàà'Xäu6½›O¡ÁNÑÌ"¿!‹¼ü}­Ál,²_«µ6Ï!‹ü‹ìšÖÌÀ"o¾¾ÖÂÙXäXd×TP˜ fù Yäåï…ÙXd¿VgƒE~Ev­ ,²kÚÌ"¿!‹¼ü-kÀ"»¯ ,ò¦µµ²È/°È®)k0‹¼ùzhál,ò ,²kÊÌ3‹ü†,òò÷‚Âl,²_«µ6Ï!‹ü‹ìš ³°È›¯4|§XäXd×TP˜ fù Yäåï…ÙXd¿VgƒE~EvM…ÙXäÍ× ÎÀ"¿À"»¦‚Âl0ù Yäåo5,²kUЙE~Cyù{hþ˜º¯²,ò¦µ‚†ßE~EvMYƒn,òæë¡…ÝX例욲Ý`þ.ò~yù{A¡‹ì×j­ÍÝ d‘_`‘]SA¡‹¼ùzAÃn,ò ,²k*(tƒ™E~Xà`¢yÝ£MTæShð†éÌ"¿!‹¼ü}­Á;EÀ"ûµZkó¦!‹ü‹ìšÖ¼S,òækk-d‘_`‘]«Ð€Ev­²6³ÈoÈ"/+(°È,ò¦õ¬…§ÈÀ"¿¦)kÐ €EÞ|=´°‹ü‹ìš²Ý`f‘ßE^þ^PèÀ"ûµZks7YäXd×TPèÀ"o¾^а‹ü‹ìš Ý`f‘ßE^þ^P˜ €EökUÐy6YäXd×TP˜ €EÞ|½ ál,ò ,²k*(Ì3‹ü†,òò·‚‹ì¾ XäMkY YäXdת À"»Vkmf‘ßE^þž587Ù¯Uhó¹AÈ"¿À"»¦¬Á¹°È›¯4<7ùÙ5­587˜Yä7d‘—¿Þ)Ù¯UAçSäE~EvMí¿üÊtƒßZ/hÈ‹ü‹ìšBƒÙ`f‘ßE^þ^P˜ €EökUÐy6YäXd×TP˜ €EÞ|[AÏ?2ù_ÿ–5ÐþíoÐþÙµZÄ"×­ú®Ðÿ@ShÆ"ƒ¦Ð&¹þ(š þõ÷¬Y7Ÿ²Ö} mêõGÑl𯿇Öù•5ë )´‰7¨?ŠºÁ¿þšÍàSÖ¬ìZ_koP·ê¿üZkÖ @Shvмk=´h6¨[õ_t…f§È )4ë»ÖC‹ºAݪÿ¢+4› @ShÖ v­‡"×­ú/¿B³nšB³Sä]ë¡E³AݪÿÊ+4;EM¡Ùl°k-´ŒE>ÿp´úñp´úñYäú£°O\Ys´Êš³È»Ö³vg‘ëöÐ œEŸ²6wƒŒE®[õ_ye ºiÊšííZÏZØ œE®ÛC7p|ÊÚ´STvg‘ÿ½Ç¶š²Ý`d‘Ëvã‰UPè¦)4迵^а8‹\%tg‘Á§‚N;EõGa70žXYƒn`š²Ýà·Ö³vg‘믄nà,2ø”µé¢óŒEþ×ßþ½æ,2ø*kÎ"ïZËZÆ"×­`60­•³È UÖF¹þ(ìÆ×Z3M¡Ù¹h mî‹\·‚nà,2øTPè#‹\ö°8‹üï=ÚO®³ÈàSÖænðÃÿçóкÌÎ"ƒOYƒn0²Èe»1ÆZkÐ œEŸ²öëÚþ„†ÝÀYäº=tg‘Á§ÐænðÃ'…ÙÀYäú+íÜ4…6íÕ…ÝÀYäïÑÛ)ŸB›»AÆ"ŸO\kÍYdÐê1py×ÚZËXäºtg‘Á§ÐŒEÞµZØ œE®ÛÃlà,2øª ãw‘ëÂ"g‘ÿ½G[kþ]dð)´y§(c‘ëV}ÐZƒÙÀYdð)´¹d,rÝ ºiÕÞEM¡MçõGa7ðï"ÿ{^P;7ŸB›»AÆ"×­`§È4e­ûô„ÂNÑo­?¡álà,rý•0˜¦Ð`6Y䲇ÝÀc=08‹ >tî‹|þá,2hUPg‘A«ÐF¹þ(Ü)2ž¸²æ,2hUPg‘w­­µŒE®[õ_~…ÝÀYdð)kólðÃÿ(r¹n;E¦)k0Œ,rÙÃÙÀce º³ÈàSÖæn±Èu+è¦é1°wŠ@Shs7ÈX亜8‹ >vŠF¹ìál`Œ± ³³ÈàSÖæÙ c‘ëV0˜¦‚Âlà,òîë?a7p¹nÝÀ4Î Fùü#c‘ÿõ·"g‘ÁW¡9‹¼k-k‹\·‚ÙÀ´*¨³È ÕZYäú£p60ƸÓì™¦Ðæn±Èu+Ø)2M¡Á)²³È»¯4ìÎ"×í¡˜¦µ§È#‹\öðÜÀYäïÑþî,2øTйd,rÝ ºi*(̦)´y6ÈXäºÌ¦)4˜ œEÞ}}­…³³Èu{˜ LÓZƒÙ`d‘ËvcŒõãÝÀYdð© ól±ÈçÎ"ƒVu´ md‘ëÂÙÀxâÊš³È UAEÞµ¶Ö2¹n³iÊtg‘w_-Ü)r¹n³iÊÌ#‹\ö°c¬‚B7p|Zkól±Èu+˜ LSAa6py÷õ‚†;EÎ"×íáÜÀ4fƒ‘E.{8c¬‚Âlà,2øTÐy6ÈXäºÌ¦© 08‹¼ûzAÃnà,rݺ|ÊÚÜ 2ùüÿ‹ ZeÍYdÐ*´‘E®? »ñĵÖü»È Õcà,ò®µ‚f,rÝ º| ­_«¬Í³Aö]äºÌÎ"ƒO¡A7Y䲇ÝÀ¿‹üï=Ú?ÀEŸ²6wƒŒE®[A70Mtg‘w__ka7p¹nÝÀ4ºÁÈ"—=ìÎ"ÿ{^P˜ œEÞ¯íY gcŒõã³³ÈàÓZ›O‘3¹nÕùtg‘Á§Ðæn±ÈçÎ"ƒV³È Uh#‹\vã‰+kÎ"ƒV³È»ÖÖZö]äºtg‘Á§Ð üÖzhálà,rý•0˜¦Ð Œ,rÙÃn`Œ± ³³ÈàÓZ›»AÆ"×­ ˜¦Çº³È»¯4ìÎ"×í¡˜¦‚B7Y䲇ÝÀcfg‘Á§‚γAÆ"×­`60M…ÙÀYäÝ× ÎÎ"×í¡˜¦‚¹ÁÈ"Ÿd,ò¿þvnà,2ø*4g‘w­e-c‘ëVpn`ZÔYdÐj­,rýQxn`Œq=¦)4Ø)2M¡Í³AÆ"×­`60M¡Á¹³È»¯4ìÎ"×í¡˜¦µç#‹\öðÜÀc´ÿò+kÐ LSAçsƒŒE®[Á¹i Î œEÞ}½ a7p¹nÝÀ4Þ)Y䲇³1Æ*(ÌÎ"ƒOgƒŒE®[Ál`š Ú}ÊtƒßÚ^Ð#d‘—ï®ýuºö7hÿìZ-› `‘]ShÎ"»¦ÐFùYäåïYówŠÜ§¬ùl°i=kÙlpøw‘ë¯ôÙÀ5…æ³Á¦õвnpOü¿ú+½¸¦Ð¼lZ-ë°È®i­y7pMkmìÇüß_[þ¾Ö|6pŸ²æ³Á¦õ¬eÝàÙ5eÍwŠ\SÖÆÙàøáƒ“¬ùl°î±ob¹¦¬ù)ò¦õ¬e³Á,²kÊšw×”µq§èYäåok͸ã Xd×*´™E>Byù{hý—_¡A7yóµ‚þ°ÀÁZùÙµZkæSÖÆÙàYäåïYƒn,²_«Ð~]Û³v`‘`‘]SÖ Ì,ò²ÈËß³æ³ûZ÷)ks7YäXd×ôølàšBß):~Xàä1ðwŠÖ=ÚO.°ÈîShs7YäXd×”5ß)rM¡³ÁñÃ'YóÙ`Ý£g ºñÉ mî!‹|O\ÿ^Ùµz €EÞ´öã²È°È®UAEv­²6³ÈGÈ"/ûñÙ}ÊÌ3‹|„,òò÷Рøw‘+4˜ fùYäåï¡Ál,²_«‚ŽçGÈ"/ ºqÇ*(tƒ™E>Byù{h0‹ì×*ks7Ⱦ‹\·‚n,²û”5ß)Ú´þã‘íþ]äú+}§È5…³ÁÌ"!‹¼ü½ ~nà>…æ;E›Ö²²È°È®ÕO®ù*4`‘7­‡î‹|‹ìšBsyÓzhÙ¹Á,²kÊšŸ¸VOèÌ"!‹¼üm­ùw‘ë¯ôs×Ú<„,ò,²kÊZï*(Ì3‹|„,òò÷¬A7Ù¯UÖæÙ d‘`‘]SÖ`60M¡ÍÝ d‘`‘]Sh°S,òæëOhØ €E>€EvMk ºÁÌ"!‹¼ü}­A7Ù¯UAçÙ d‘`‘]«‚‹ìZ…6³ÈGÈ"/˰Èî«‚‹¼im­…,ò,²kÊtÿ.òîë¡…çÀ"À"»¦¬Ál0³ÈGÈ"//(ÌÀ"ûµZkól²È°È®© pn`šB›»AÈ"À"»¦Ð ‹¼ùúZ Ï €E>€EvMk fƒ™E>ByùûZƒÙXd¿VwŠ~Xà`§XäXd×”5˜ fùYäåoYÙ}°È›ÖÖZÈ"À"»V°È®UAgùYäåïYƒSd`‘ýZ…6Ÿ„,ò,²kÊÌÀ"o¾^ÐðÜXäXd×´Ö`6˜Yä#d‘—¿f`‘ýZtî!‹|‹ìš ÝXäÍ× v`‘`‘]SA¡üÖzhál,ò,²k fƒ™E>ByùûZƒÙXd¿Vkmž BùÙµZkÀ"»V¡Í,ò²ÈËß²,²ûª À"oZ[k!‹|‹ìš²³°È›¯‡ÎÀ"À"»¦¬Ál0³ÈGÈ"//(ÌÀ"ûµZkól²È°È®© 0‹¼ùzA3ÞàÙ5…ÝXäÍ×C »°È°È®i­A7˜Yä#d‘—¿¯5˜ €EökµÖæÙà‡f`‘`‘]SÖ`6˜Yä#d‘—¿eÍ¿‹|º¯B3_emf‘E^þ¼SdܱBƒsƒßZ{ BùÙµzBý»È )kól²È°È®)4˜ €EÞ|=kál,òašBƒsÓ”µ¹„,ò,²k º°È›¯g-ìÀ"À"»¦ÇÞ0Yä#d‘—¿?¡Î¸O¡A7¿‹\öp6yÝãw¸*(¼SdšÖÚÜ BùÙ5…ïùw‘w_[k!‹|‹ìZ…,²k•µ™E>ByùÛZÙ}µÖ€EÞ´žµðXäXd×¼S4³ÈÇ üËXäuö‹ì>t>EYäXd×´Ö ˜¦Ðæn²È°È®)4èÀ"o¾¾ÖÂn,ò,²kZkÐ fùYäåïO(t`‘ýZt~Ã4d‘`‘]SA¡‹¼ùzACÞXäXd×TP˜ fùYäåoÙ}°È›Ö²²È°È®UAEv­ÖÚÌ"!‹¼ü=kpn,²_«ÐæÙ d‘`‘]SÖ`6yóõ‚†³°È°È®i­Á¹ÁÌ"!‹¼ü½ pn,²_«‚Îç!‹|‹ìš ;EÀ"o¾^Ðp§XäXd×TP˜ fùYäåï…"`‘ýZtž BùÙ5f`‘7ß^Ð?Cyù÷¬¹ö×éÚß ý³k=´ì Ó?EvM¡9}æšBYä?Cyù{Ö¼¸OYóÙ`ÓzÖ²sƒ?EvMYónàš²6ΆßE^þž5?7pŸ²æÝ`ÓzÖôküß'ª?EvMYóÙÀ5emì†,òò÷¬9oà>eÍgƒMëY˺ÁŸÀ"»¦¬ù¦®)kãlðgÈ"/Ïšw÷)k~мi=kÙlð'°È®)kÞ \SÖÆSä?Cyù[Ö€Ev_eÍ|ÚÌ"ÿ²ÈËßCós÷)4?7Ø´VÐEþXdת ð]d×”µq6ø3d‘—¿gÍé3÷)k~мi=kÙlðÊÎ%Krc‡¡[²S©ßÜöÛÿŽQáAqyŽ1ECjš %›ºÖXd×”5ß)rMYwŠ>!‹¼ü=k>¸OYsúlÓzÖ²¢°È®)k>¸¦¬¼Á'd‘—¿gÍwŠÜ§¬ùl°i=kÙ¹ÁXd×”5ß)rMYgƒOÈ"/Ïš¿Sä>eÍwŠ6­e-d‘?À"»VY3_…,ò¦õÐÂÙXä|Ù5…Ý`f‘?!‹¼ü­ À"»O¡Ál0³ÈŸE^þt`‘ýÚz fù²ÈËßCƒÙXd¿V¡ÍÝ d‘?ð]d×ôÀl,òæëAØ à»Èø.²kZk0Ì,ò'd‘—¿º|Ù¯UAçÙ ü.òXd×TPèÀ"o¾^Ðp6€ï"LSh0‹¼ùZh!‹üÙµ Xdת ¿}=´°‹üÙµz €EÞ´ZvŠüÙ5eÍß0uMY›gƒEþÀw‘]Sh°SdšB›wŠBù,²k f`‘7_/h¸SßEþÀw‘]ÓZƒÙ`f‘?!‹¼üí'×ce f`‘7_ÏZ¸S,ò¾‹ìš²³Áü]äÏ lý‹¼îñ;“Êt`‘7_ÏZØ à»Èø.²kÊÌ3‹ü Yäåok͸ãʰȮÕÇÌ"Byù{h°SdÜqe XäMk Yä°È®)kÐ €EÞ|=´ðÜXä°È®)k°S4³ÈŸE^þ^P˜ €EökµÖæÙ d‘?À"»¦‚Âl,òæë g`‘?ð]d×TP˜ æï"Âï"//(Ìð]d¿VgƒEþÀw‘]SA¡Àw‘7_/hØ €Eþ‹ìš Ý`f‘?!‹¼ü­ À"»¯ByÓZÖBù,²kUP`‘]«µ6³ÈŸE^þž58EÙ¯Uhól²È`‘]SÖ`6yóõ‚†çÀ"€EvMk N‘gù²ÈËß çÀ"ûµ*è|вÈ`‘]SAa6yóõ‚†³°È`‘]SAa6˜YäÏ ÌÀ"¯{´Ù¾‹ì>t>7Yä|Ù5vŠLShó)rÈ"€Ev­BÙµ mf‘?!‹¼üí Ù}µÖ€EÞ´ö„,òXd×”5˜ €EÞ|=´p6ù,²kÊÌ3‹ü Yäåï…ÙXd¿Vkmž Bù,²k*(ÌÀ"o¾^Ðp6ùßEvM…Ù`þ.ò'ü.òò÷‚ÂlßEökUÐy6Yä|Ù5fø.òæë g`‘?À"»¦‚Âl0³ÈŸE^þVP`‘ÝW¡‹¼i-k!‹üï"»VÙµZk3‹ü YäåïYƒÙXd¿V¡Í³AÈ"€EvMYƒÙXäÍ× ÎÀ"€EvMk fƒ™Eþ„,òò÷‚Âl,²_«‚γÁ ü+Xä°È®)kÐ fù²ÈËß³ÝÀ¸c…³ÁÌ"Byù{hð†)°È~­ :Ï!‹üÙ5=¡0‹¼ùÚ²È`‘]«Ð€Ev­²6³ÈŸE^þVP`‘ÝWk XäMëY O‘Eþ‹ìšBƒwŠfù²ÈËß³ï‹ìת ó)rÈ"€EvMk N‘EÞ|½ á)2°Èø.²k*(œ"ÿÖzhál,òXd×tƒ™Eþ„,òò÷µÝXd¿Vkmž Bù,²kZk0‹¼ùzAÃÙXä°È®© 0Ì,ò'd‘—¿Xd÷UhÀ"oZËZÈ"€Ev­ ,²kµÖfù²ÈËß³³°È~­B›gƒEþ‹ìš²³°È›¯4œ €Eþ‹ìšÖÌ3‹ü Yäåï…ÙXd¿VgƒEþ‹ìš çÀ"o¾^ÐðÜXä°È®© 0Ì,ò'd‘—¿f`‘ýZtž Bù,²k*(ÌÀ"o¾½ GÈ"/ÿž5×þþºöhÿÛµZö†é,²k ÍYd×ÚÈ"!‹¼ü=kÞ Ü§¬ùl°i=kÙ¹Á,²kÊšw×”µq68Byù{ÖüÜÀ}ÊšwƒMëYËfƒXd×”5?7pMY»Á²ÈËß³Öùšw×ÚHŸ?,ðßÄZþšÏîSA½lZ/hFŸÆÿU¥wך³È›ÖCËfƒXd×TPﮩ ã)ò²ÈËß ,²û*kÀ"oZËZÈ"ÆWAM«¬Áw‘]«¬ýöõв¢XdךŸ"»¦ÐÆÙàYäåïõ"÷© ~мi=kÙlp‹ìš²æ;E®)kã)ò²ÈËß³æ³û”5ß)Ú´žµl§èÙ5e ºiÊÚÜ Bù0žXO(tø.²ûÚ¸St„ßE^þ^PèÀ"ûµ mœ ŽE^þZÿåWA¡‹¼ùÚZ YäXd×*4`‘]«¬ýöõÐÂÙXäXd×ê yÓzha70ž¸`‘]Sh0Ì,ò²ÈËßÖšqÇ*(Ìð]äÍ׳vcŒ•5˜ €EvŸÖÚÜ BùÙ5e f`‘7_ÏZØ €E>€EvMkÍÏ 6­‡–íð]d×”µÞ!Ì3‹|„,òò÷Ǻ°È~­ÖÚÜ Âï"À"»¦¬A7y󵂆,ò,²k°È®UÖfùøáƒƒ9XäußEVh°S,òæëY »°È‡i fÓ”µy6YäXd×t`‘7_ÏZØ €E>LSh0‹¼ùzháN°È°È®Õï°È›ÖC »|ùÙ5…Ý`þ.ò~yùÛO.°ÈîShÐ fùYäåï¡A7Ù¯Õ:wƒð»È°È®é1€n,òækk-d‘ø.²k°È®UÖfùYäåo…ï"»¯Ö°È›Ö³v`‘Ó”5èÀ"o¾Zxn,ò,²kÊìÍ,ò²ÈËß ³°È~­ÖÚ<„,ò,²k*(ÌÀ"o¾^а‹|‹ìš Ý`f‘E^þ^PØ)Ù¯UAç¢E>€EvMõwŠ\Shs7¿‹|‹ìšBƒn,òækk-d‘ã‰kzÙµZkÀ"oZ-Ü)ù0­²,²kUЙE>ByùÛc`ܱBƒn`šB›gƒE>€EvM¡Ál,òæë g`‘`‘]ÓZƒSä™E>Byù{AáÜXd¿VO‘CùÙ5Î €EÞ|½ áN°È°È®© 0Ì,ò²ÈËß ³°È~­ :wƒE>€EvM…n,òæk YäXd×*4`‘]«¬Í,ò²ÈËß ,²ûj­‹¼i=kál,òaš²ÝXäÍ×C g`‘`‘]SÖ`6˜Yä#d‘—¿f`‘ýZ­µy6YäXd×TP˜ €EÞ|½ ál,ò,²k*(Ì3‹|„,òò÷‚Âl,²_«‚γAÈ"À"»¦‚Âl,òæë ß)ùÙ5ÔyƒMk¡…,òa€EvMk fƒ™E>Byù{Aa6Ù¯UAçÙ d‘`‘]SAa6yóõ‚†³ñÄúñ€n,²û”µ¹„,òßEvMYƒnßEÞ|=ka7ù0M¡Ál,òæk¡…,ò,²k°È®UAgùYäåoO(°Èî«`‘7­g-œ €E>€EvM¡Á;E3‹|„,òò÷¬Á¦À"ûµ*èÌ„,ò,²kZkpŠ ,òæë O‘E>€EvM…7Lgùøaƒ—)€E^÷h/S˜O¡Ál0³ÈGÈ"/_kÐ €EökµÖæn²È°È®i­A7yóõµv`‘`‘]SAa6˜Yä#d‘—¿Xd÷UhÀ"oZËZÈ"À"»VÙµZk3‹|„,òò÷¬õ_y…³i mž BùÙ5…³°È›¯4œ €E>€EvMk fƒ™E>Byù{Aa6Ù¯UAçÙ d‘`‘]SAa6yóõ‚†³°È°È®© pn0³ÈGÈ"//(œ‹ìת ó¹AÈ"À"»¦‚Âl,òæÛ ú Yäåß³æÚß_×þí»ÖCËvоÀ"»¦Ðü S×ÚÈ"Cyù{Ö¼¸OYóÙ`ÓzÖ²sƒ/°È®)kÞ \SÖÆÙà²ÈËß³æçîSÖ¼lZÏZ6|EvMYós×”µ±|Cyù{Öú/¿BónàšBé³oÈ"/Íg÷© Þ 6­T¿Æÿ}¢ú‹ì𲿳kÊÚØ ¾?,pZÿ•ÿ«nïô™kʚϛֲ²È_ã‰+4`‘]«Ð€EÞ´ZØ €Eþ‹ìšBó/anZ-Û)ú‹ìZ­5`‘]«µ6³ÈßE^þö„c¬Ð ‹¼ùzÖ²Ùà ,²k ÍwŠ\SÖÆSäoÈ"/ÏšÏîÓZó¢MëYËN‘¿À"»¦¬A7yóõвÙà ,²k ­ÿò+kÐ fù²ÈËß ê³ûZ÷i­ÍÝ d‘¿Æë'º°ÈîSh¿®m Yä/°È®UAEv­B›YäúÄsÖÞE^÷Ø7L]«‚‹¼i=ka7¹¾cZÿy=4ß)rŸ²6îÕÇï¬õ_ùZkÀ"»¦¬ù;E›Ö³v`‘ëkN5èæSÖæn²ÈõɆ²ÝXd÷)´y6øáƒƒJ‹\ÿŸ{Èt`‘·k{AÃn,rý˜!4èÀ"o×öÐÂÙ¾‹\ÿP fø.òvm-;7¨ÿ¬5èÀ"ûµZks7Yäúyh¦U7Ùµ mf‘뼑ý®‹¼îÑ~rEvŸB›wŠ~Xàà ¹Hr_kÀ"»O¡ÍÝ d‘ a„‚ú)²ûª‹¼ií1¿‹\< „ÝXd¿VY›»Áœº°ÈõxûOPÖ`6˜¿‹\o †Aÿ•¯F,²k ÍO‘7­4ìð]äzèÀ"o×öÐÂnßE®3X º|y»¶‡v`‘ëBós÷é1˜»AÈ"×N”?¡ð]d÷ÕZ3_…6³È5ÒdñÄõ‹ìšBƒ¢ßZ+hø]äêÇ5èÀ"ûµÊÚÜ ~Xààw XäZ0¾ÖLSÖ`6˜Yäò‡…n`ÜqýËXd×”µ¹„,òXd×t`‘7__ka7ù ,²k*(tƒ™Eþ†,òò·í㎕5覩 ã;EßE^þt`‘ýZ…6ï…,òXd×”5èÀ"o¾¶ÖBù ,²kšùj­‹¼i=´°‹üÙ5…Ý`f‘¿!‹¼üm­‹ì>…§È3‹ü Yäåï¡A7Ù¯­Çà·¯4ìÀ"EvMYƒSä™Eþ†,òò÷¬ÁN°È~­²6ï…,òXd×ô„ÂN°È›¯4œ €Eþ‹ìš ç3‹ü Yäåï…n,²_«‚ÎÝ d‘¿À"»¦‚B7y󵂆,òXd×*4`‘]«¬Í,ò7d‘—¿Xd÷ÕZyÓzÖÂs`‘¿À"»¦Ð üÖzhá¹°È_`‘]Sh0Ì,ò7d‘—¿vŠ€EökµÖæÙ d‘¿À"»¦Çf`‘7_/h8‹üÙ5fƒ™Eþ†,òò÷‚ÂN°È~­ :Ï!‹üÙ5vŠ€EÞ|½ áN°È_`‘]SAá¢ù»ÈßE^þVP`‘ÝW¡‹¼i-káw‘¿À"»VÙµZk3‹ü YäåïYƒ"`‘ýZ…6ï…,òXd×”5x§XäÍ× ÎÀ"EvMk fƒ™Eþ†,òò÷‚Âl,²_«‚γAÈ"EvM…ÙXäÍ× ÎÀ"EvM…Ù`f‘¿!‹¼ü½ 0‹ìת ól~ù ,²k*(ÌÀ"o¾VÐEþ‹ìZ…,²k•µ™Eþ†,òò·‚‹ì¾ZkÀ"oZÏZ8‹üÙ5…³ÁÌ"Cyù{Ö`§Xd¿VyƒEþ‹ìšÖ¼S,òæëÕ¯qpÚ,òXd×TP8EžYäoÈ"//(¼S,²_«‚μAÈ"1þ«n³°ÈîShól²È_`‘]ÓZƒÙXäÍ××Z8‹üÙ5­5˜ fù²ÈËßÖ°Èî«Ð€EÞ´–µEþ‹ìZXd×j­Í,ò7d‘—¿g f`‘ýZ…6Ï!‹üÙ5e f`‘7_/h8‹üÙ5­5˜ fù²ÈËß ³°È~­ :Ï!‹üÙ5f`‘7_/h8‹üÙ5fƒ™Eþ†,òò÷‚Âl,²_«‚γAÈ"EvM…ÙXäÍ·ô Yäåß³æÚßu8Üß=ú´ÿíZ-;E>EvM¡9‹ìšBß0=Cyù{Ö¼¸OYóÙ`ÓzÖ²sƒXd×”5ï®)kãlp†,òò÷¬ù¹û”5ï›Ö³–Í'°È®)k~nàš²6vƒ3d‘—¿gÍg÷)k~n°i=kY78'þ«þJŸ \ShÞ 6­‡–½az‹ìš ê³k*èØ ÎE^þ^PÃÔ}ʚϛֲ²È'°È®UÖÌW¡‹¼i=´°‹|‹ìšBówŠ6­‡–íÀ"»¦¬õ_~…Ý`f‘ÏE^þ¶Ö€EvŸBóSäMëYËfƒXd×”5ß)r­žÐ™E>Cyù{Ö|6pŸ²æ;E›Ö³–"ŸÀ"»¦¬ùlàš²6îáw‘—¿g º°È~­BwŠÎE^þšÏîSA»O¡ÍÝ d‘O`‘]SA}6pM¡¼Á²ÈËß²fÜq…,²kÚÌ"Ÿ!‹¼ü=´þ+¯Ð`6yóµ'ô‡þïÛÌ'°È®)4èð]äÍ×C gã‰ëßkÀ"»V°È›ÖC »°È'°È®)4˜ fù Yäåïk º°È~­ƒy6YäXd×´Ö ‹¼ùzAÃÙXäXd×TP˜ æï"Ÿáw‘—¿º|Ù¯UAçn~ùÙ5º|y󵂆,ò ,²k°È®UÖfù Yäåo5îX¡A7€ï"o¾žµp6ùÙµz à»È›ÖC »°È§iÊ싼ùzha7ù„ï"»¦¬A7˜Yä3d‘—¿¯5èÀ"ûµz æn²È'|Ù5º°È›¯4ìÀ"ŸÀ"»¦‚B7˜¿‹|†ßE^þ^Pèð]d¿V»Aø]äXd×TPèð]äÍ× ²È'°È®Uhð]d×*k3‹|†,òò·‚‹ì¾ZkÀ"oZÏZØ €E>á»È®)4Ø)šYä3d‘—¿gÍß)rŸBƒ¢™E>Cyù{hpn,²_«µ6ògÈ"/ º°È~­B›»Á Ì¡À"ŸÀ"»¦‚¹ÁÌ"Ÿ!‹¼ü=k°S,²_«¬Í;E!‹|Âw‘]Ó¦Ðæn²È'°È®)4èÀ"o¾ö»²È'°È®UhÀ"»VYûíë¡…çÀ"ŸÀ"»V°È›ÖC »ñĵ,²k ºÁÌ"Ÿ!‹¼üí 5îX…Ù¾‹¼ùzÖÂÙXäXd×”5˜ fù YäåïYƒn,²_«Ç`î!‹|‹ìš ³°È›¯4œ €E>EvM…Ù`f‘ÏE^þ^P˜ €EökUй„,ò ,²k*(t`‘7_+hÈ"ŸÀ"»V¡‹ìZemf‘ÏE^þVP`‘ÝWk XäMëY »°È'°È®)4è3‹|þ°ÀÁ?%E^÷øIº°È›¯g-ìÆW5M¡Á)²iZkól²È'°È®)4x§XäÍ׳ž"‹|‹ìšÖÌ3‹|†,òò÷'f`‘ýZtž BùÙ5f`‘7_/hÆœÀ"»¦Ð ‹¼ùZh!‹|Âw‘]«ÐÌWk XäMë¡…³°È'|Ù5…ïÍ,ò²ÈËßø.²ûtƒ™E>Cyù{h°S,²_[Oèo_/hØ €E>EvMYƒÙ`f‘ÏE^þž5˜ €Eök•µy6YäXd×ô„Âl,òæë g`‘O`‘]SAa6˜Yä3d‘—¿f`‘ýZtž BùÙ5º°È›¯4d‘O`‘]«Ð€Ev­²6³ÈgÈ"/+(°È,ò¦õ¬…³°È'°È®)4è3‹|†,òò÷¬A7Ù¯UAgÞ d‘O`‘]ÓZƒÙXäÍ× òÀ"ŸÀ"»¦‚¦3‹|†,òò÷‚o,²_«‚Îo˜†,ò ,²k*hÿåWÖ Ì,ò²ÈËß³ÝXd¿VY›»Á LïÀ"ŸÀ"»¦¬o0³ÈgÈ"/˰Èî«Ð€EÞ´ö„†,ò ,²kµÖ€Ev­ :³ÈgÈ"/ÏÐgÀ"ûµ í×µ=ká;EÀ"Ÿ¦)k°S,òæë¡…³°È'°È®i­Ál0³ÈgÈ"//(ÌÀ"ûµ*è<„,ò ,²k*(ÌÀ"o¾^Ðp6ùÙ5ºÁÌ"Ÿ!‹¼ü½ Ð €EökUй„,ò ,²k*(ÌÀ"o¾½ WÈ"/ÿž5×þ®ÿ5©³È®ýo÷õв¢ Xdך¿aêšBYä+d‘—¿gÍ»ûþ©0|6Ø´žµ¬\À"»¦¬y7pMYgƒ+d‘—¿gÍß)rŸ²æÝ`ÓzÖ²ÙàÙ5eÍÏ \SÖÆnp…,òò÷¬ùlà>eÍÏ 6­g-ë°È®)k>¸¦¬ç× üßÿ¾ü=kÞ Ü§¬uŸB»Á²ÈËßCsÙ} ÍgƒMk Yä Xdת À"»VYûíë¡…ÝXä Xd×*kÀ"oZ-Û)º€EvMYsúÌ5emœ ®E^þ¶Ö€EvŸ²æo˜nZÏZ6\À"»¦¬ùN‘kÊÚxŠ|…,òò÷¬ùlà>eÍwŠ6­g-;E¾€EvMYóÙÀ5emÜ)ºByù{ÖüÙ}ʚϛֳ¦_ã OüWý•Ð LShÐ fù YäåïYƒn,²_«‚Ž,ò²ÈËßBÙ}•5óUh3‹|…,òò÷МEvŸBóSäMkk-d‘/`‘]«'Xd×”µ¹„ßE¾€EvM¡Ál,òæëY »°È°È®© 0Ì,ò²ÈËß×t`‘ýZtž BùÙ5º°È›¯4œ €E¾€EvM…n0³ÈWÈ"//(t`‘ýZtž BùÙ5ÔwŠ\Shs7Yä Xd×*4`‘]«Ðfù YäåoÙ}µÖ€EÞ´ö„ßE¾€EvMYƒÙXäÍ×C wŠ€E¾€EvMYƒÙà·ÖC »°È°È®)4è3‹|…,òò÷µÝXd¿VÁÜ BùÙ5­5èÀ"o¾^а‹|‹ìš Ý`f‘¯E^þ^PèÀ"ûµ*èÜ BùÙ5º°È›¯4d‘/`‘]«Ð€Ev­²6³ÈWÈ"/+(°È,ò¦õ¬…;EÀ"_À"»¦ÐàÜ`f‘¯E^þž5§È} ºÁÌ"_!‹¼ü=487Ù¯ÕZ›wŠBù‚ï"»¦ÇÎ à»È›¯¯µp§Xä Xd×TP87˜Yä+d‘—¿vŠ€EökUÐùÜ d‘/`‘]SA{‡PÖ`§hf‘¯E^þž5Ø)Ù¯UÖæÙ d‘/`‘]«¬‹ìZ…6³È×lý‹¼îñ;“ N‘EÞ|í ¿‹|‹ìšBƒÙXäÍ×C gã‰kÃXd×ê1yÓzhál,ò,²k fƒ™E¾ByùÛjܱ ÝÀ4=ól²È°È®)4˜ €EÞ|½ ál,ò,²k*(Ì3‹|…,òò÷‚Âl,²_«‚γAÈ"_À"»¦‚Âl,òæk Yä Xd×*4`‘]«¬Í,ò²ÈËß ,²ûj­‹¼i=kál,ò,²k fƒ™E¾Byù{Ö`6Ù¯UAçwŠÂï"_À"»¦µ§ÈÀ"o¾^Ðð"`‘/Ót`‘7_-œ €E¾€EvMk fƒ™E¾ByùûZƒÙXd¿Vkmž BùÙ5f`‘7_/hÆ"_À"»¦Ð ‹¼ùZh!‹|‹ìZ…,²kUÐß¾ZøN°È°È®Õc,ò¦õÐÂn`¸¦¬;EwÈ"/ÏšŸ"»OYóÙ`ÓzÖ²¢Xd×”5ß)rMYgƒ;d‘—¿g º°È~­Bß0½Cyù[hÀ"»¯ ,ò¦µ‚†,òmeÍwŠ6­g-;E~€EvMYóÙÀ5emÜ)zByù{ÖüÙ}ʚϛֳ–í=À"»¦¬ù)²kÊÚ8eÍwŠ6­e-d‘ã‰ÿúºVY3_…,ò¦õÐÂÙXäXdךyÓzhÙ¹Á,²kÊt`‘7_-œ €E~€EvMYƒn0³ÈÏ ôP`‘×=~?Êt`‘7_ÏZ8c¬Çº°Èî«™E~ByùÛ‡1ÆÊt`‘7_ÏZ8‹ü‹ìšÖtƒ™E~Byù{Ö`6Ù¯UAçn²È°È®© 0˜¦ÐæÙ d‘`‘]«Ð€Ev­B›Yä'd‘—¿Xd÷ÕZyÓÚc²È°È®)kÐ €EÞ|=´°‹ü‹ìš²Ý`f‘ŸE^þ^PØ)Ù¯ÕZ›gƒð»È°È®© °S,òæë g`‘Ót`‘7_-ìÀ"?À"»¦µÝ`f‘ŸE^þ¾Ö ‹ì×j­ÍÝ d‘`‘]SA¡‹¼ùZACùÙµ Xd×*k3‹ü„,òò·‚‹ì¾ZkÀ"oZÏZ8‹ü‹ìšBƒsƒ™E~Byù{Ö`§Xd¿VÏ Bù1ƸþnšÖ̦)´¹„,ò,²k º°È›¯¯µ°‹ü‹ìšÖœÌ,ò²ÈËß×ì‹ìת ó¹AÈ"?À"»¦‚ÂN°È›¯4<7ùÙ5vŠæï"?!‹¼ü­ ÆWÖ€Ev­ :³ÈOÈ"/ Î à»È~­B›O‘Ãï"?À"»¦¬Ál,òækk-d‘ø.²k N‘á»È›¯‡ž‹ü‹ìZ=À"oZ-Ü)2Ƹ|Ù5…ç3‹ü„,òò÷ÇN‘EökõÌç?,p°õ,ò,²kÊÌ3‹ü„,òò÷¬Ál,²_«¬Í³AÈ"?À"»¦'f`‘7_{ BùÙµ Xd×*k3‹ü„,òò·‚‹ì¾ZkÀ"oZÏZ8‹ü‹ìšBƒÙ`f‘ŸE^þž5˜ €EökUÐy6YäXd×´Ö`6yóõ‚†ÝXäXd×TPè3‹üü°ÀÁO.°Èëí´Å| fƒ™E~ByùûZƒÙXd¿Vkmž BùÙ5­5˜ €EÞ|}­…³°È°È®© 0üÖZh!‹ü‹ìZe Xdת 3‹ü„,òò·µßEv_e XäMëY »°È°È®)4è3‹ü„,òò÷¬A7€ï"ûµ*èÜ Bùï"»¦µÝXäÍ× vcŒk60M¡ÁN‘iÊÚü†iÈ"?À"»¦ÐàÜXäÍ׳ž‹ü‹ìš˜ fù YäåïÌÀ"ûµ*è<„,ò,²k*(ÌÀ"o¾VÐE~€Ev­BÙµÊÚÌ"?!‹¼ü­ À"»¯Ö°È›Ö³v`‘`‘]ShÐ fù YäåïYƒn,²_«‚ÎÝ d‘`‘]ÓZƒn,òæë »°È°È®© 0Ì,ò²ÈËß ;EÀ"ûµ*è¼S²È°È®© À‹¼ùzAÃ7LE~€EvMÞ`f‘ŸE^þ^PxÃXd¿Vß) YäÇxâúG°È®UÖ€EÞ´VÐE~€Ev­Ö°È®UÖfù Yäåo5ÆX¡Á¹°È›¯g-|§XäÇ4…çÀ"o¾Zxn,ò,²kZk@ŸÍ,ò²ÈËß o˜‹ì×j­Í³AÈ"?À"»¦‚Âl,òæë g`‘`‘]SAa6˜Yä'd‘—¿f`‘ýZtž BùÙ5f`‘7ß^Ð7d‘—Ïšk]û´ÿíZ-ã ^`‘]ShÎ"»¦ÐÆSä7d‘—¿g­ÿò+4ï®)´‘>{Xàÿ¾Í¼ü=4Ÿ ܧ‚ú¦›Ö šuƒ×xâ¿ê¯ô7L]ShÞ 6­‡–Í/°È®© ¾Säš :vƒ7d‘—¿Ôg÷)k~n°i=kY7xEvMYóÙÀ5em<7xCyù{Ö¼¸OYóÙ`ÓzÖ²sƒXd×”5ï®)kãlð†,òò·¬‹ì¾Êšù*´™E~Cyù{hþN‘ûšÓg›Ö ²È/°È®UAEvMY›»AÈ"¿Æ×O®i Íg×Ú¸Sôþ°ÀA£yÝãw‘šï¹¦ÐÆ7LßE^þ¾Ö|6pŸÖšïmZ_kÙ¦/°È®)k>¸¦¬;EoÈ"/ÏšŸ"»OYóÙ`ÓzÖ²¢Xd×”5?EvMYgƒ7d‘—¿gÍwŠÜ§¬ù)ò¦µ¬…,ò ,²k•5`‘]«¬ýöõÐÂÙXäXd×*kÀ"oZ-;7xEvMYƒÙXäÍ×CËvŠ^`‘]ShÐ €EÞ|=´p6ù…ï"»¦‚Âl0ù ¿‹¼üí Ù} ºÁÌ"¿!‹¼ü=4˜ €Eökõ„ÎÝà‡Ú;°È/°È®)kÐ fù YäåïYƒÙXd¿VY›»AÈ"¿À"»¦'f`‘7_{BCùÙµ Xd×*k3‹ü†,òò·‚‹ì¾ZkÀ"oZÏZØ €E~MSÖ ‹¼ùzha7ùÙ5e vŠfù Yäåï…"`‘ýZ­µy6YäXd×TPØ)yóõ‚†³°È/°È®© °Sô[ë¡…;EÀ"¿À"»¦Ð Ì,ò²ÈËß×t`‘ýZ­µ¹„,ò ,²kZkÐ €EÞ|­ !‹ü‹ìZ…,²k•µ™E~Cyù[AEv_­5`‘7­g-ìÀ"¿À"»¦Ðü¢Më¡…ÝÀãÚ)2M…Ù¾‹¼ùzhál,ò ,²kÊÌ3‹ü†,òò÷µ;EÀ"ûµz æsƒ8ø8°È/°È®)kÐ fù YäåïYƒ"`‘ýZem>7YäXd×ôÀN°È›¯?á¹°È/°È®© °S4³ÈoÈ"/+(°Èî«ÐÌWYä7d‘—¿‡çÀ"ûµ m>EYäXd×j­‹ìšB›Ï BùÙ5…ÝXäÍ׃ð»È/°È®)487yóõÐÂSd`‘_`‘]Óc;E3‹ü†,òò÷ÇvŠ€EökµÖæ¢E~EvM…Sd`‘7_/hxn`Œqý£È4…ÝÀ4emž BùÙ5…³°È›¯e-d‘_`‘]«Ð€Ev­²6³ÈoÈ"/{ €Ev_=¡À"oZÏZ8‹ü‹ìšBƒÙ`f‘ßE^þž5x§Xd¿VO‘CùÙ5­5èÀ"o¾^а‹ü‹ìš Ý`f‘ßE^þ^PèÀ"ûµ*èÜ Bù5Ƹ~rMSA¡˜¦ÐæÙ d‘_`‘]ShÐ €EÞ|}­…³°È/°È®i­Ál0³ÈoÈ"/[kÆWÖ€Ev­ :³ÈoÈ"/ fø.²_«ÐæÙà‡¦w`‘_`‘]«‚‹¼im­…,òkŒq=¡ð]dלÌ,ò²ÈËß çÀ"ûµ*è|n~ùÙ5=pn,òæë Ï €E~MShðN°È›¯‡ž‹ü‹ìšÖœÌ,ò²ÈËßל‹ì×j­Í³AÈ"¿À"»¦‚Âl,òæk YäXd×*4`‘]«¬Í,ò²ÈËß ,²ûj­‹¼i=kál,ò ,²k fƒ™E~Cyù{Ö`6Ù¯UAçÙ d‘_`‘]ÓZƒÙXäÍ× ÎÀ"¿À"»¦‚Âl0³ÈoÈ"//(ÌÀ"ûµ*è<„,ò ,²k*(ÌÀ"o¾^Ðp§XäXd×TPà fù Yäåï…7LEökUЙ7YäXdת æ«¬‹¼i­ !‹ü‹ìšBúÌ´ÊÚÌ"¿!‹¼ü­ À"»OYƒn0ù ¿‹¼ü=4èÀ"ûµÊÚÜ ~Xà`¢ùÙ5e N‘gù YäåïYƒSd`‘ýZem>EYäXd×ôÀl,òæëOh8‹ü‹ìš ³ÁÌ"¿!‹¼ü½ 0‹ìת ól²È/°È®© 0‹¼ù¶‚žd,ò¿þ-k ý Ú? ýo×zhoP·ê¿ò¦Ð¬€¦Ð¦¢ú£h6ø×ß³Öåš½a šB›N‘ë¢wŠþõ÷Ь€Oµ¢]ëÞ)ª[õ_tÔvŠ@ShÖ v­‡Íu«þ˯Ь€¦Ðl6صZ´ST·ê¿ò ÍfК½S´k=´¨Ô­ú/ºB³wŠ@ShÖ v­‡Íu«þ˯Ь€¦Ðl6صZtnP·ê¿ò ÍfКìZ -c‘Ï?Œ'®ÐœE­Bsy×zha70žX¡Ù¹h ÍXä]ë¡…ÝÀYäº=tg‘ÁWÝ`d‘ëÂnà,ò¿÷øÝ!ªQ9‹ šB›fƒú£°8‹üï=zh¶S>…6Ô…ÝÀxb­5è¦i­A7ø­õµvg‘믄nà,2ø”µi§¨þ(ìÆ+kÐ LSÖ üÖzÖÂnà,rý•Ð œEŸ²6ÍõGa70žXYƒn`š²Ýà·Ö²–±ÈçÎ"ƒV?Î"ƒVYYäú£°8‹üï=Ú‡ù*kÎ"ïZÏZØ œE®ÛC7p|ÊÚ<üðÁÿy;¦nÕÿ}_kÍ¿‹ š²³Áø]䲇ÝÀYäïÑ ÝÀYäýÚ^аøw‘ëöÐ ü»ÈàSA§¢ú£°c¬‚B7p| mî‹\·‚ÙÀYdði­A7Y䲇ÝÀce º³ÈàSÖæn±Èu+˜ LÓO®í¦Ð¦sƒóŒEþ×ß6Œ;®ÐœE­BYäú£°O\u´ZkÎ"ïZûñȾ‹\·ê¿ü º³ÈàSÖænðÃÝÀYäº=왦¬A7Y䲇ÝÀce vŠœEŸ²6Ï‹\·‚"ÓôØ;E )´¹ü°ÀIAa§ÈYäú+íÜ4…6wƒ8 º³ÈõWÚ)2h í—¯?¡a70ÆXk º³ÈàShs7ÈXäºtÓ´Ö 8‹¼ûZÖ2ùüÃYdÐ*4g‘A«¬,rýQØ Œ'®‚:‹ Zý®9‹¼k=kálà,rݺi ÍN‘w­‡î9‹\·‡nà,2øTÐy§(û.rÝ Î œEŸ²ç#‹\öp6ðï"ÿ{6¶8‹ >emî‹\·‚nà,2ø”587Y䲇;EÆë …"g‘Á§¬ÍÝ c‘ëVpn`š~׺OYƒsƒßZBÃ"g‘믄"Óì,òùGÆ"ÿëo³³Èà«ÐœEÞµ–µŒE®[Á)²iUPg‘A«µ6²ÈõGa7pùß{´g‘Á§ÐæÙ c‘ëV°Sdš²Ö}*(Ì¿µ^Ðp6p¹þJ˜ œEŸ²6Ï?,pð¯\g‘ëö°Sdš²ç#‹\öp§ÈãúÉ5M…ÙÀ4emž 2¹n³|ÊìßE.{88‹üï=ú ÝÀYäýÚþ„ÝÀYäº=tg‘Á§‚Î;E‹|þá,2hµÖœE­BYäú£p60ž¸g‘A«µæ,ò®µ‚þ°ÀÁ‡³Èu{˜ LSh0Œ,rÙÃÙÀce fg‘Á§‚γAÆ"×­`60Mk Î œEÞ}½ álà,rݺi*(tƒ‘E.{Ø ü»ÈÿÞ£ý®9‹ >tî‹\·‚nà,2ø”5è#‹\ö°8‹üï=zÖ 8‹¼_Û×ZØ œE®ÛC70MYƒÙ`d‘Ï?2ù_› œE_…f¾Zk#‹\vcŒëwÍ¿‹ šBƒwŠF¹ìálà,ò¿÷hkÍ| ºÁø]䲇ÝÀYäïÑCƒÙÀYäýÚöd,rÝ ºiÕ œEMkmž 2¹nçþ]dð© Ð Æï"—=ìÎ"ÿ{^P˜ œEÞ¯í wŠœE®ÛÃN‘iÊtƒ‘E.{Ø Œ1Öœ8‹ >­µùÜ c‘ëVpn`š87py÷µ‚f,òù‡³È UhÎ"ƒVYYäú£°O\u´ZkÎ"ïZÏZØ œE®ÛÃl`šBƒn0²Èe»1ÆÊÌÎ"ƒOgƒŒE®[A70Mk fg‘w_/h88‹\·‡ÙÀ4ºÁÈ"—=ìÆ« ðN‘³ÈàSAçÙ c‘ëV0˜¦‚Â)²³È»¯4ìÎ"×í¡˜¦‚¹ÁÈ"—=œ Œ1VAa6p|*è¼S”±ÈçÎ"ƒVu´ í·¯4c‘ëVpn`šBúÌYäÝ×C »ñÄUPg‘A«µæ,ò®õÐÂnàßE®ÛC7p|*èÜ 2¹nÝÀYdð)kpŠ<²Èe»1Æ*(tg‘Á§¬Í§È‹\·‚SdÓôÀlà,òîëk-œ œE®ÛÃl`š ³ÁÈ"—=ìÆ« Ð œEŸ :Ï‹\·‚ÙÀ4fg‘wß^Ð?Cyù÷"×þ>]û´ÿíZ-› þÙ5…æÝÀ5…6²È†,òò÷¬ùlà>eÍgƒMëY˺ÁŸÆÿU¥wךŸ"oZ-;EþXd×TPŸ \SAÇ¢?øàÿ~´ü½ Þ ܧ¬ùl°i=kÙlð'°È®)kÞ \SÖÆÙàÏ>8ÉšÏëû&–kÊšwƒMëY˺ÁŸÀ"»¦¬ù¹kÊÚØ þüდ¬y7X÷èYónà>…6Ά,òò·ÇXd÷UAEÞ´VÐì»Èu{Ÿ \«‚šO¡ù¹Áÿ);»ÝqÙN¥qGÐþ·ß«j¨ç\EªRŒE â5N(AÊ7%¯ò¢ÕвÙ`Ù5…VùtƒžEÞByúkA¡‹ìkÇ^ëYä-d‘§¿†æï¹OYóÙ`ÑjA³Ù`Ù5´þò+4è=‹¼ý°ÀÁ°Èóo”`‘ݧ‚öÝ d‘7`‘]SÖü¤È5…Ö¾aºý°ÀIÖê¯üøG°È®© ~R´hu¯e'E°È®)kÐ €E^|%´EÞ€Evm„,²k£ =‹¼…,òô—ÿ.òø¿„ÙXäÅW³v`‘7`‘]{Í¿‹¼j5´p6yÙ5…³AÏ"o!‹<ýµ Ð Œ;VhÐ Úï"{Ø €Ež£üä‹ì>=íIѲÈÓ_³æ÷îSÖªO¡õÝ d‘7`‘]Ót`‘_} ÂÙXä Xd×”5è=‹¼…,òôׂú½ûš¿S´h%k!‹¼ùw‘/×FAEvm쵞EÞByúKÖ€EvßȰȋV³v`‘7`‘]Sh0ô,ò²ÈÓ_³³°È¾Vmï ¶Ežþt`‘}­BëOŠByÙ5=0øw‘W_ÝkáI‘yüyèÀ"»OYë»AÈ"oþ]äñçýÞÀ5=pRÔ³È[ö]äñça6Ù} ºAÏ"o!‹<ýõ1€n,²¯UAû“¢EÞ€Evm<À"»6BëYä-d‘§¿d Xd÷‚‹¼hå ýჃ9Xä Xd×tƒßZ -œ €EÞ€EvM¡ÁlгÈ[È"O-(tãŽÌ=‹¼…,òô×ÐàÞXd_«Ç Ÿ ByÙ5=¡po,òâ«{-»EÞ€EvM¡Ál`š²ÖŸ…,ò,²k î €E^|5káI°È°È®é1€Ù g‘·Ežþò‹ì¾°È‹V²²È°È®‚‹ìÚØk=‹¼…,òô׬Á-2°È¾V¡ýZ[³v`‘7`‘]SA¡ô,ò–}yüy§È5n‘ý»È«¯f-<)yÙ5e î zy Yäé¯{ f`‘}­öZ?„,ò,²k*(t`‘_-hxR,òæßE¡A7yñÕÐÂn,ò,²kÚkÐ zy Yäé/{͸ãQP`‘]{­g‘·EžþZ½#Phpo,òâ+ Yä Xd×Ü"‹¼øjha7yÙµ±×̧‚ö'E!‹¼‹ìš²ÝXäÅW³v`‘7`‘]SÖ ô,ò²ÈÓ_èÀ"ûZ´ï!‹¼‹ìš ÝXäÅW v`‘7Ót`‘_ -ìÀ"oÀ"»¦½Ý g‘·Ežþ²×€Evß XäE+Y Yä Xd×FAý»È Ç g‘·Ežþš5˜ €Eöµ ­Ÿ ByÙ5e­Î*(Ìíw‘‡=|ÃXäù7~gR¡A70MYëï ByÙ5…÷À"/¾ú„÷À"oþ]䜋¼øjháI°È°È®i¯Á½AÏ"o!‹<ýõ uÞÀ} î zy Yä鯡Á½°È¾VAo²È°È®ÇXd×Fh=‹¼…,òô—¬‹ì¾QP`‘­<?,ppo,ò,²k î zy Yäé¯Yƒ[d`‘}­ ÚÏ!‹¼‹ìšöt`‘_-h8‹¼‹ìš ³AÏ"o!‹<ýµ 0‹ìkUÐ~6Yä Xd×TP˜ €E^|µ ál,ò,²k*(tƒžEÞByúkA¡‹ìkUо„,ò,²k£ À"»6BëYä-d‘§¿d Xd÷‚‹¼he¯eßE¾þ¢·™EvM¡A7h¿‹<ìáI°Èóo”€‹ì>´ï!‹¼‹ìšöt`‘_-hØ €EÞ€EvM…nгÈ[È"O}  ‹ìkUоü°ÀÁ?Š€EÞ€EvMYƒÙ g‘·Ežþš5˜ €EöµÊÚ¯µu¯…'EÀ"oÀ"»¦¬ÁIÑom mYäé_³æÚß—kÿ€ögÕjh‹¼‹ìšBó{×ZË"ï!‹<ý5k~Rä>eÍ»Á¢Õ¬eÝ`Ù5eÍOŠ\SÖÚn°ÿ°ÀÿýÇcúkÖü"÷)kþNÑ¢Õ¬eÝ`‡ï"»¦¬ùI‘kÊZûNÑþÃ'Y«¿ü?ïÝÀ5e­úZÛ öEžþZPÃÔ} Í»Á¢Õ‚f³Á,²k*¨ß¸¦¬µÝ`Yäé¯YóÙÀ}ÊšwƒE+Y Y例ìÚÈšùFhÀ"/Z -ìÀ"ïð]dך³È‹VCËxƒXd×”5¿Evm쵞EÞCyúË^3îX¡A70M¡õÝ d‘wø.²k Íg×Z{o°‡ßEžþš5ÃÔ}Úk>,ZÝkÙ½Á,²kʚ߸¦¬õÝ d‘w`‘]Sh~RäšBkß0ÝCyúkA}6pŸ ê'E‹V šÍ;°È®)kõ—_¡A7è¿‹¼‡,òô—¬w8ø÷°È;°È®)4˜ úï"ïáw‘§¿fÍï ܧÐüyÑjÖ²[例ìšöt`‘_ -œ €EÞá»È®)kÐ zyYä鯅پ‹ìkõ„öÝ d‘w`‘]SA¡‹¼øjAÃÙXäXd×TPè=‹¼‡,òôׂÂlßEöµ*h{o°‡,òô—Ðà»ÈîY3ß­g‘÷EžþtãŽÌ¿µ²×Âï"ïÀ"»6ø.²kÊZûNѲÈÓ_³ÝXd_«ÐúÙ d‘wø.²kÊtÓZ?„,ò,²k NŠ€E^|u¯…³°È;°È®é1€“¢žEÞCyúë^ƒ“"ø.²¯UAûÙ d‘w`‘]SAá¤XäÅW Îð]ä¾‹ìš ³AÏ"ï!‹<ý¥ Æ¬‹ìÚ(hÏ"ï!‹<ý54èÆ¬‹¼h¥ !‹¼‹ìš²'EÀ"/¾Zxo,ò,²kÊÌ=‹¼‡,òôׂ½°È¾V{­ï!‹¼Ãw‘]SA¡˜¦Ðú{ƒEÞEvM¡ÁI°È‹¯îµì ÓXd×ÌÀ"/¾Z8‹¼Ãw‘]Óc³Aÿ]äý‡€Ežã÷£¡¬ÁI°È‹¯d-d‘wã‰Ç°È®¬‹¼h5´ðÞX例ìšBƒÙ g‘÷Ežþò»fÜñ((°È®žEÞÃï"O fø.²¯Uhýl²È;°È®)k0‹¼øê^ OŠ€EÞEvM{ NŠzyYä鯅“"`‘}­ ÚŸ…,ò,²k*(t`‘_-hØ €EÞEvM…nð[«¡…³°È;°È®)4˜ zyYäé/{ Xd÷ÐÌ7öZÏ"ï!‹<ý54˜ €Eöµ ­§(d‘w`‘]°È®)´þ¤(ü.ò,²k n‘E^|å1YäXd×t`‘_ -ìÀ"ïÀ"»¦ÇºAÏ"ï!‹<ýõ1€n,²¯Õ^ë»AÈ"ïÀ"»¦‚B7yñÕ‚†ÝXäXd×TP迵ZØ €EÞEvM¡A7èYä=d‘§¿ì5`‘Ý7ByÑJÖByÙµ±×€Evm<=‹¼‡,òô׬Á¦À"ûZ…ÖwƒEÞEvMYƒn,òâ« o‘EÞá»È®i¯Á¦=‹¼‡,òôׂÂ;EÀ"ûZ´?) ¿‹¼‹ìš 'EÀ"/¾ZÐð¤XäXd×TPxôg‘÷EžþZPx§¾‹ìkUÐþ ÓEÞá»È®© pRßE^|¥ !‹¼‹ìÚ Xd×FÖzyYäé/Ù}c¯‹¼h5ká¦À"ïÀ"»¦Ð࢞EÞCyúkÖà¤Xd_«‚ö'E!‹¼‹ìšöÌÀ"/¾ZÐp6yÙ5fƒžEÞCyúkAa6Ùת ýl²È;°È®© 0‹¼øjAÃÙXäXd×TP˜ zyYä鯅wŠ€Eöµ*hÿNQÈ"ïÀ"»6 ,²k#´žEÞCyúKÖ€Evß((°È‹VöZÈ"ïÀ"»¦¬Á-2°È‹¯†Þ"‹¼Ãw‘]SÖà¹g‘÷EžþZP¸EÙ×j¯õ·Èáw‘w`‘]SAáXäÅW ¾SßEÞá»È®© ðNQÏ"ï!‹<ýµ ðN|Ùת ý;E!‹¼Ãw‘]SAá"ÓZ?„ßEÞEvM¡Ál,òâ[÷Ú²ÈÓ¿Ôµ¿/×þíϪÕв[äXdך³È®)´öÞàYäé¯Yó“"÷)k>,ZÍZÖ `‘]SÖü¤È5e­ ŽEžþš5ïîSÖü¤hÑjÖ²ÙàÙ5eÍ»kÊZ{Rt„,òô׬ùlà>eÍ»Á¢Õ¬e'E‡ñÄÿKï®)4?)Z´Z6À"»¦‚z7pMm»Á²ÈÓ_ ê³û”5¿7X´’µE>€Evmd Xd×FÖ~ûjha7ùÙµ‘5`‘­†–À"»¦¬ùlàš²ÖÞ!‹<ýe¯‹ì>eÍgƒE«YËî `‘]SÖü¤È5e­ ŽEžþš5¿7pŸ²æ'E‹V³–ͰȮ)k~oàš²Öž!‹<ý5kÐ €Eöµ ­ ŽEžþšß¸Oõ“¢E«Ín‘`‘]SA}6pMYkOŠŽEžþ’5`‘Ý7²f¾ZÏ"!‹<ý54§È} Íß0]´RÐE>€EvmÔ| fƒžE>ByúkÖüÞÀ} ºAÿ]ä#ü.òô×Ð`6Ù×j¯õÝ ü.ò,²k*(ÌÀ"/¾º×Ân`Œñø¸i º|yñÕÐÂÙXäÃ4…æ÷®© }7øaÿûKý°È®)4˜ €E^|5ka70ÆX…ÙXd÷)k}7Y例ìÚÈ|ÙµZÏ"!‹<ýåǾ‹ì¾ñ»,ò¢•‚†,ò,²kÊÌð]äÅWC OŠŒ1{Í4…'E¦© ýIQÈ"À"»¦Ð`6yñÕ¬…'EÀ"¦)4èÀ"/¾ZØ €E>€EvMœõ,ò²ÈÓ_ŸP˜ €EöµÚk}7YäXd×TPèÀ"/¾Zа‹|‹ìš 'E=‹|„,òô—‚‹ì¾šùFA{ùYä鯡Ál,²¯Uhý½AÈ"À"»6ö°È®)´þ¤è‡þQ,ò,²k*(Ì=‹|„,òôׂÂl,²¯UÖúÙ d‘`‘]SA¡‹¼øÊGÈ"À"»¦Ð`6yñÕÐÂÙXäÃ4…³°È‹¯†Þ‹|‹ìš8)êYä#d‘§¿>0‹ìkõô³AÈ"À"»6 j¾‘5`‘­4ü.ò,²k n‘E^|5´ðÞÀãñp`‘]SÖनg‘Ežþ²×à»ÈîShÐ zùYä鯡A7Ù׎Çà·¯4œ €E>€EvMYƒ{ƒžE>ByúkÖàXd_«¬õ÷!‹|‹ìšžPèÀ"/¾Zа‹|‹ìš Ý g‘8ø÷°Èóoü.²²÷À"/¾’µE>Œ'¿kÀ"»6²,ò¢ÕÐÂ[dcŒÌÀ"»o<=‹|„,òô—'Ô¸ãQP`‘]Shýl²È°È®)48)yñÕ‚†·ÈÀ"¦)48)yñÕÐÂn,ò,²kz  ô,ò²ÈÓ_÷t`‘}­öZß BùÙ5º°È‹¯4ìÀ"À"»¦‚B7èYäㇺ°Èóo”n`>…'E=‹|„,òô—½,²ûFhÀ"/Z)hÈ"À"»6ö°È®Ç g‘Ežþš5xÃXd_«Ðún²È°È®)kÐ €E^|µ a7ùÙ5í5xôg‘EžþZPx§Xd_«‚öo˜†,ò,²k*(œ‹¼øjAÓ"`‘`‘]SAá ÓžE>ByúkAá"`‘}­ Ú¿a²È°È®© 0‹¼øJACùÙµ°È®¬õ,ò²ÈÓ_ ,²ûÆ^yÑjÖ“"`‘`‘]ShpRÔ³ÈGÈ"OͼS,²¯UAû[äE>€EvM{ f`‘_-h8‹|‹ìš ³AÏ"!‹<ýµ 0‹ìkUÐ~6YäXd×TP˜ €E^|µ ál,ò,²k*(Ì=‹|„,òôׂ½°È¾Víï BùÙµQP`‘]¡õ,ò²ÈÓ_²,²ûFAE^´²×BùÙ5e Þ)yñÕÐÂwŠ€E>€EvMYƒ{ƒžE>ByúkAáÞXd_«½Öß"‡,ò,²k*(Ü"‹¼øjAÃwŠ€E>€EvM…wŠzùYä鯅wŠ€Eöµ*hÿNQÈ"À"»¦‚Â;EÀ"/¾ZÐð"`‘ø.²k*(œõßE>Cyúׂºö÷åÚ? ýYµ5kç üßÏצ¿†æ÷îShÎ,Z -› Nã‰ÿÿ—~RäšBóÙ`ÑjhY78EvMõ“"×TÐv68CyúkA½¸OYó“¢E«YËfƒXd×”5ï®)kíIѲÈÓ_³æ³û”5ï‹V³–À"»¦¬ùlàš²Övƒó‡N~<꯼žP?)rMYóÙ`ÑjÖ²npO¬Ð|6pM¡y7X´ZÈ"ŸÀ"»6 ,²k£ =‹|þðÁAAEžc½mqmd XäE«Y »°È§iʚϮ)kí½Á²ÈÓ_~<€EvŸ²æ³Á¢Õ¬e÷'°È®)k~Räš²ÖÎgÈ"O͚߸OYó“¢E«YËfƒXd×”5¿7pMYkOŠÎEžþš5Ÿ ܧ¬ù½Á¢Õ¬e'E§ñÄã'×4eÍg×”µöÞàüa“ßµú‹®Ð ‹ì>…Öž!‹<ý¥ À"»oXäE+ YäÓxâ‘5ÓFAMSh0üÖjha7ù„ï"»¦Ð`6èYä3d‘§¿Ôï ܧРô,ò²ÈÓ_CƒÙXd_;ƒžE>CyúkhÐ €Eöµ ­Ÿ Âï"ŸÀ"»¦Çº°È‹¯>ál,ò ,²kÚkÐ zù Yä鯅ÙXd_«‚öÝ ü.ò ,²k*¨ß"»¦Ðún²È'°È®Ð€Evm„Ö³ÈgÈ"O)(°Èî{ XäE+AÈ"ŸÀ"»¦¬Ál,òâ«¡…'EÀ"ŸÀ"»¦¬A7èYä3d‘§¿º°È¾V{­Ÿ Âï"ŸÀ"»¦‚ÂI°È‹¯4œ €E>EvM…“¢žE>CyúkAa6Ùת ýIQÈ"ŸÀ"»¦‚Âl,òâ« OŠ€E>EvM…“¢žE>CyúKAEvß XäE+Y YäÓã1˜6 ,²kc¯õ,ò²ÈÓ_³÷À"ûZ…ÖŸ…,ò ,²kÊÜ‹¼øjAÓ"cŒUPèÀ"»OYë»AÈ"ŸÀ"»¦¬A7yñÕ¬…ÝXäÓ4…³°È‹¯†ÎÀ"ŸÀ"»¦˜ ~k5´ð¤XäXd×Üô,ò²ÈÓ_<à¤Xd_«Ç Ÿ BùÙµ±×€Evm„öÛW ²È'°È®)4g‘]Shí™â ¿‹<ý¥ À"»oì5`‘­f-œ Œ'?¹À"»¦Ð`6èYä3d‘§¿f º°È¾Ví»Á œå‹|‹ìš²÷=‹|†,òô׬Á-2°È¾VYëï BùÙ5=¡p‹ ,òâ«AØ €E>EvM…nгÈgÈ"O-(t`‘}­ ÚwƒE>EvmÔ|#kÀ"/Z)hø]äXd×tÓFÖzù Yäé/Ù}ÊÜô,ò²ÈÓ_Cƒ{`‘}­²Ö¿S~ùÙ5n‘E^|u¯…ï‹|‹ìš Ý g‘ÏEžþZPèÀ"ûZ´ï!‹|‹ìš ÝXäÅW v`‘O`‘]SA¡ô,ò²ÈÓ_ ÝXd_«‚öÝ d‘Oã‰Ç?%Evmd XäE+ YäXdׯ^Ùµ‘µžE>CyúKA;Vhpo`šBëOŠBùÙ5…'EÀ"/¾ZÐð¤XäXd×´×à ÓžE>CyúkAáXd_«‚ö·È!‹|‹ìš 'EÀ"/¾ZÐð¤XäXd×TP8)êYä3d‘§¿n‘Eöµ*h‹²È'°È®© p‹ ,òâ+ YäXd×FhÀ"»6²Ö³ÈgÈ"O)(°Èî{ XäE«Y ß)ùÙ5…³AÏ"Ÿ!‹<ý5k0‹ìkUÐ~6YäXd×´×`6yñÕ‚†³°È'°È®© 0ô,ò²ÈÓ_ ³°È¾VígƒE>EvM…ÙXäÅW ÎÀ"ŸÀ"»¦‚ÂlгÈgÈ"O-(ÌÀ"ûZ´Ÿ BùÙµQP`‘]¡õ,ò²ÈÓ_²,²ûFAE^´²×BùÙ5e f`‘_ -¼7ùÙ5e î zù Yä鯅{`‘}­öZo²È'°È®© p‹ ,òâ« o‘E>EvM…wŠzù Yä鯅wŠ€Eöµ*hÿNQÈ"ŸÀ"»¦‚Â;EÀ"/¾ZÐð"`‘O`‘]SAᢞE¾Byúׂºö÷åÚ? ýYµ5kWÈ"O ÍYd÷)4ç ­†–ͰȮ)kÞ \SÖÚ“¢ë‡þï÷¡Ó_³æ³û”5ï‹V³–]Æÿ5þ/½¸¦Ðü¤hÑjhÙlp‹ìš êÝÀ5´=)ºByúkA}6pŸ²æÝ`ÑjÖ²“¢ Xd×”5Ÿ \SÖÚnp…,òô׬ùI‘û”5Ÿ ­f-ë°È®)k~Räš²ÖÎWÈ"OÉšqÇ#4`‘]¡õ,ò²ÈÓ_Cƒn`Üñ((°È‹V úÃ?¹À"_À"»¦Ðü¤hÑjhÙlpO<~rEvM¡A7ø­ÕÐÂn,òešöšŸ¹¦½ÖÎWÈ"OÝk~oà>eÍOŠ­f-› .`‘]SÖüÞÀ5e­=)ºByúkÖ|6pŸ²æ÷‹V³–]À"»¦¬ùlàš²ÖÞ\!‹<ý5k~Rä>eÍgƒE+Y YäËxâñã,²k#4`‘­†–}ßàÙµQP`‘]íYä+ü.òô—‚‹ì>e ºAÏ"_!‹<ý54˜ Œ;VhÐ zù Yä鯡Ál,²¯UAûn²È|Ù5í5˜ à»È‹¯>a7ù‚ï"»¦‚Âlð[«¡…³°È°È®)4è=‹|…,òô×½³°È¾V{­ï!‹|‹ìšö̦)´~6Yä Xd×FhÀ"»6BëYä+d‘§¿Xd÷½,ò¢•Ç d‘Ç—©ÿßÿü_ Íé3÷)4迵Z8‹<>§ZÂUAý"×TÐöy|ƒoüÙ`¢‚ï"Ï¿ñ;“ fø.òâ«Y OŠ€EŸ‚¬A7yY[C »°Èã«'ÌÀ"/kkha70ÆxüSÒ4NŠLÓ^ëOŠByüwžá …n,²¯Uh}7øa“Ç þÊ+k0˜¦˜ zyüWî²'Ôxâ°È®Ð€E^´²×Byü瘼 À"»O¡Á½AÏ"ÿÖG˜5èÆÇXdׯ^ëY䣇¡Õ_yº°ÈîSh}7¿‹<¨I((ÌÀ"ûZ…ÖÏ!‹< º°È¾V¡õ÷áw‘Çûät`‘}­BëOŠ~Xààw Xäñb¤7*ø.²ûZß ~Xà$4èÀ"7rJ¸úñ€{ƒžEW»á ÝÀ¸cýxÀl`š²ÖÏ!‹<î |¯™6BÙµZÏ"C¯,kÀ"Ï¿Qþ) ,²ûZË"i+ º°Èóïþwì5`‘­ôÐð»ÈãŸPPèæShpRÔ³Èc†Yƒn`ܱö̦© }7Yäñ· kР̧¬Á½AÏ"_!‹<ýe5îXYƒÙÀ4e­ï!‹|‹ìšBƒÙXäÅWƒðÞXä Xd×TPè=‹|…,òôׂÂl,²¯UAûn²È°È®‚‹ìÚí·¯4d‘/`‘]ShÎ"»¦Ðún²È—ñÄãàÀ"»6ö°È‹V³Îð]äË4e NŠà»È‹¯†v`‘/ø.²kʼSô[«¡…'EÀ"_À"»¦Ð ô,ò²ÈÓ_~<Œ;VA¡˜¦Ç ï!‹|‹ìšBƒn,òâ« »°È°È®© Ð zù Yä鯅n,²¯UAûn²È°È®‚šod XäE+ Yä Xd×tÓFÖzù Yäé/Ù}ÊÜô,ò²ÈÓ_CƒÙXd_«¬õ'E?,p0½‹|‹ìš²Ý g‘¯Ežþš5˜ €EöµÊZR²È°È®é1€n,òâ«Ohxo,ò,²k*(Ü"÷,ò²ÈÓ_ ÷À"ûZ´¿7Yä Xd×TP8)yñ•‚†,ò,²k#4`‘]YëYä+d‘§¿Xd÷½,ò¢Õ¬…'EÀ"_À"»¦Ð ô,ò²ÈÓ_³ÝXd_«‚öÝ d‘/`‘]Ó^ƒ“"`‘_-h8‹|‹ìš ³AÏ"_!‹<ýµ po,²¯UAûÙ d‘/`‘]SAa6yñÕ‚†³°È°È®© 0ô,ò²ÈÓ_ ³°È¾VígƒE¾€EvmXd×Fh=‹|…,òô—¬‹ì¾QP`‘­ìµE¾€EvMYú XäÅWC OŠ€E¾€EvMYƒ{ƒžE¾ByúkAáXd_«½Öß„,ò,²k*(¼S,òâ« ß)ùÙ5Þ0íYä+d‘§¿n‘Eöµ*h‹²È°È®© p‹ ,òâ« o‘E¾€EvM…wŠzùYäé_ êÚßã: Þ6ÿÚŸU[³v‡,òô×М>sŸBówŠ­†–Í7°È®)kÞ \SÖZùYäé¯YóÙÀ}ÊšwƒE«YËî n`‘]SÖ|6pMYk»ÁýÃÿ÷C¬é¯Yó“"÷)k>,ZÍZÖ nã‰ÿÿ—>¸¦Ð¼,Z -;)ºEvMõÙÀ5´íwÈ"O-¨Ÿ¹OYóÙ`ÑjÖ²np‹ìš²æ'E®)kílp‡,òô—¬‹ì¾‘5óÐzùYä鯡A7Ù×*´öùYä鯡9oà>eÍOŠ­ìµð»È7°È®½f>…Ý g‘ï8øÉyþß™ThÐ LSAûn²È·ñÄã'×4…æ³k ­½7¸Xà$kþ†éü5k~oà>…ÖžÝ!‹<ýõ1ðÙÀ}Úk~o°hõ1ÈNŠn`‘]SA}6pMYkï îEžþš5?)rŸ²æ³Á¢•¬…,ò ,²k#kæ¡‹¼h5´ì ÓXdךß"»6 Ú³ÈwÈ"O)(°ÈîSÖ ô,ò²ÈÓ_CƒÙXd_«¬µ÷wÈ"O ÍOŠÜ§¬ù-ò¢Õ½–ÝÜÀ"»¦½ÝXäÅWC g`‘o`‘]SÖ`6èYäû‡°Èóo”Fe>…Ý g‘ïEžþº×`6Ù×ê1è»AÈ"ßÀ"»¦½³°È‹¯ìµE¾Evm„,²k#k=‹|‡,òô—‚‹ì¾±×€E^´šµð¤XäÛ4e NŠ€E^|5´ìÞàÙ5…æo˜º¦‚öÝ d‘o`‘]Sh0‹¼øjÖÂn,ò ,²kÚkpRô[«¡…ÝXäXd×tƒþ»Èwø]äé¯O(ÌÀ"ûZíµþ¤(d‘o`‘]Ó^ƒÙ¾‹¼øjAÓ"ø.ò ,²k*(Ì=‹|‡,òô—‚‹ì¾°È‹V²²È7°È®‚Âw‘]{­g‘ïEžþš58)Ù×*´þÞ d‘oø.²kÊtø.òâ« ï €E¾á»È®i¯ÁlгÈwÈ"O-(Ü‹ìkUÐþ¤(d‘o`‘]SA᤾‹¼øjAÃ{`‘o`‘]SAa6èYä;d‘§¿f`‘}­ ÚÏ!‹|O…'E=‹|‡,òô×Ǻ°È¾VOhß BùÙ5=Ð €E^|u¯…ÝXäXd×TPè=‹|‡,òôׂB7Ùת }7YäXd×FAEvm„öÛW ²È7°È®)4èÀ"/¾Zxo`<ñø÷°È®½,ò¢ÕÐÂnßE¾MSÖा‹¼øjha7ùÙ5e ºAÏ"ß!‹<ýå 5îXYƒÙÀ4=ýIQÈ"ßÀ"»¦Ðà¤XäÅW ž‹|‹ìš 'E=‹|‡,òôׂÂI°È¾VíOŠBùÙ5n‘E^|¥ !‹|‹ìÚ Xd×FÖzùYäé/Ù}c¯‹¼h5ka7ùÙ5…'E=‹|‡,òô׬Á;EÀ"ûZ´?) YäXd×´×àXäÅW Þ"‹|‹ìš ³AÏ"ß!‹<ýµ 0‹ìkUÐ~6YäXd×TP˜ €E^|µ ál,ò ,²k*(Ì=‹|‡,òôׂÂl,²¯UAûÙ d‘o`‘]ÙµZÏ"ß!‹<ý%kÀ"»oXäE+{-d‘o`‘]SÖà¤XäÅWC g`‘o`‘]SÖ€7èYä;d‘§¿î €EöµÚký½AÈ"ßÀ"»¦‚Âl,òâ« ï €E¾EvM…wŠzùYä鯅wŠ€Eöµ*hÿNQÈ"ßÀ"»¦‚Â;EÀ"/¾ZÐð"`‘o`‘]SAá¹g‘ŸEžþµ ®ý=þctÎ"»ögõ­Y{Byúkh~‹ì¾FÎ"/Z -› `‘]SÖ¼¸¦¬µï=!‹<ý5k>¸OYón°h5kÙIÑ,²kʚϮ)km7xByúkÖü"÷)k>,ZÍZÖ `‘]SÖü¤È5e­ žø¿ß¶LÍšw÷)k~R´h5kÙlðOü×ø¿ô“"ךϋVC˺Á,²k*¨Ÿ¹¦‚¶³Á²ÈÓ_ ,²ûFÖ€E^´’µE~Œ15md Xd×FÖzù Yäé¯Yó7Lݧ¬ùIÑ¢Õ¬e³Á,²kʚ߸¦¬µ'EOÈ"OÍšÏîSÖüÞ`ÑjÖ²“¢Xd×”5Ÿ \SÖÚ{ƒ'd‘§¿fÍOŠÜ§¬ùl°h5kÙ½Ác<±žPè¦)4迵ZØ €E~LSA}6pMmï žEžþZP?)rŸ²æ³Á¢•¬…,ò,²k#kÀ"»6²öÛWCËXäXdךß"»¦ÐÚ7LŸEžþRP`‘Ý7 ,ò¢Õ¬…ÝÀãñ„š¦¬A7€ï"/¾Z8O¬Ð Àw‘ݧ‚ö³Aø]äXd×”5èÀ"/¾šµp6ùÙ5í5è=‹ü„,òô×Ǻ°È¾VmOŠžEžþÌÀ"ûZ…ÖwƒE~€EvM{ f`‘_Ùk!‹ü‹ìÚ Xd×FÖzù Yäé/Ù}ã1yÑjÖ“"`‘`‘]Sh0ôßE~~Xà`zyþß™TA¡˜¦‚ö³AÈ"?À"»¦Ðà¤XäÅW ÎÀ"?À"»¦‚ÂIQÏ"??,pRÐú‹>z(°È®)4è=‹ü„,òô×'º°È¾V{­ï!‹ü‹ìšöÌÀ"/¾º×“"`‘`‘]SAa6èYä'd‘§¿Xd÷ЀE^´’µE~€EvmXdׯ^ëYä'd‘§¿f NŠ€Eöµ ­¿7YäXd×”5èÀ"/¾ZÐp6ùÙ5í58)êYä'd‘§¿î €Eöµ*hR²È°È®© po,òâ« OŠ€E~€EvM…“¢žE~ByúkAa6Ùת ýl²È°È®© 0‹¼øJACùï"»6Bƒï"»6²Ö³ÈOÈ"O)¨qÇ NŠLShýIQÈ"?À"»¦ÐàXäÅW ž‹ü˜¦Ð Àw‘_ -ìÀ"?À"»6~<à»È‹VC g`‘Ó”58)yñÕГ"`‘`‘]SÖ`6èYä'd‘§¿>¡0‹ìkõ„ö³Á LTÀ"?À"»¦¬Á-rÏ"?!‹<ý5kpo,²¯UÖú[äE~€Evm<À"»6BëYä'd‘§¿d Xd÷‚‹¼hå YäXd×”5èÀ"/¾ZØ €E~€EvMYƒwŠ~k5´°‹ü‹ìšBƒÙ g‘ŸEžþº×`6Ù×ê1ègƒE~Œ1'Eð]d×”5è=‹ü„,òô׬A7Ù×*k}7øaƒn,ò,²kÊtƒžE~ByúkÖ ‹ìk•µ¾„,ò,²kãw Xd×Fh=‹ü„,òô—¬c¬Ð`6yñ•ßµð»È°È®)4èÀ"/¾ZØ €E~€Evm<À"/Z -ìÀ"?À"»¦Ð ô,ò²ÈÓ_÷t`‘}­ƒ¾„,ò,²kÚkpR,òâ« OŠ€E~€EvM…“¢žE~ByúkAá¤Xd_«‚ö'E!‹ü‹ìš 'EÀ"/¾RÐE~€Evm„,²k#k=‹ü„,òô—‚‹ì¾±×€E^´šµðXäXd×Ü"÷,ò²ÈÓ_³¼°È¾Vío‘CùÙ5í5¸EyñÕ‚†'EÀ"?À"»¦‚Â-rÏ"?!‹<ýµ ð†)°È¾VíyƒE~€EvM­¿üÊtƒßZ-hø†)°È°È®)4˜ zù Yä鯅ÙXd_«‚ö³AÈ"?À"»6 ,²k#´žE~ByúKÖ€Evß((°È‹VöZÈ"?À"»¦¬Ál,òâ«¡…³°È°È®)kpRÔ³ÈOÈ"O-(¼a ,²¯Õ^ëß0 YäXd×TP¸7yñÕ‚†÷À"?À"»¦‚ÂIQÏ"?!‹<ýµ pR,²¯UAû“¢E~€EvM…wŠ€E^|µ á;EÀ"?À"»¦‚Â;E=‹ü†,òô¯uíï˵@û³jkÖÞEžþš³ÈîShÎ"/Z -› ^`‘]SÖ¼¸¦¬µï½!‹<ý5k>¸OYón°h5kÙIÑ ,²kʚϮ)km7xCyúkÖü¤È}ʚϋV³–uƒXd×”5?)rMYkgƒ7d‘§¿fÍ»û”5Ÿ ­f-› ^`‘]SÖ¼¸¦¬µ'Eï ü߯4¦¿fÍg÷)kÞ ­d-d‘_ã‰ÿº\Y3ß XäE«¡eôÙ ,²k Íï \íYä7d‘§¿Ôc…ÝXäÅW³–Í/°È®)4§È5e­=)zCyúkÖ|6pŸöšß,ZÍZvRô‹ì𲿳kÊZ{oð†,òô׬ùI‘û”5Ÿ ­f-»7xEvMYó“"×”µv6xXàà'Xäù7~gR¡A70M¡õÝ d‘_ã‰õ“ ÝÀ4ºÁo­4d‘_`‘]YÙµ‘µžE~Xà  À"Ï¿Q ,²ûZû†é²ÈÓ_žP`‘Ý7 ,ò¢Õ‚†ÝXäXd×Ìýw‘ßð»ÈÓ_³ÝXd_«‚ö³AÈ"¿À"»¦Çº°È‹¯4œ €E~EvM…nгÈoÈ"O-(ÌÀ"ûZ´ï!‹üc<~rMSA¡˜¦Ðún²È/°È®)4¿EvM¡µ÷oÈ"O)¨qÇ#4`‘]¡õ,ò²ÈÓ_Cƒ“"ãŽÇc,ò¢•'ô‡°È/°È®)4¿E^´ZØ €E~MSAa6yñÕГ"`‘_Óœ‹¼øjhál,ò ,²k*(œõ,ò²ÈÓ_˜ Œ;VhÐ zù Yä鯡A7Ù×êÇ£ï!‹ü‹ìšöt`‘_ÝkÙ½Á ,²k º°È‹¯„²È¯ñÄ£‡‹ìÚØkÀ"/Z -<)ù5md Xdׯ^ëYä7d‘§¿<Æ+48)2M¡õ÷!‹ü‹ìšBƒn,òâ« »°È/°È®i¯ÁIQÏ"¿!‹<ýµ po,²¯UAû“¢E~EvM…{`‘_-hxR,ò ,²k*(Üô,ò²ÈÓ_ êo˜ºO¡ù;E‹V³v`‘_ø.²k NŠúï"¿!‹<ý%kð]d÷Ðà»È‹V²²È¯ñÄ£Q‹ìšBƒ[äžE~CyúkÖü¿Lá>…³Aÿ]ä7ü.òô×ÐàXd_;~×úï"¿áw‘§¿†'Eð]d_«Ðú“¢ð»È/°È®Ÿ\`‘]Sh}7øaƒ9XäXd×´×`6èYä7d‘§¿f`‘}­²ÖÏ!‹ü‹ìš ³°È‹¯þ®…ÝÀcý®Á½°ÈîSÖú“¢E~Evmd Xd×Fh=‹ü†,òô—½,²ûÆc,ò¢•‚†,ò ,²kÊÌÀ"/¾ZxR,ò ,²kÊÜô,òûÿkÀ"Ï¿ñ»ÈÊœ‹¼øjÖ“"ø.òkšBƒ{ø.òâ«¡…÷À"¿À"»¦‚B7èYä7d‘§¿>¡Ð €Eöµúñè»AÈ"¿À"»¦‚B7yñÕ‚†ÝÀãÑ LShpRdš²ÖwƒE~Evm„,²k#´žE~CyúË^Ù}ã1yÑJACùÙ5e º°È‹¯†v`‘_`‘]SÖ üÖjháI°È/°È®)48)êYä7d‘§¿î58)Ù×ê1ègƒE~EvM{ NŠ€E^|µ áI°È/°È®© pRÔ³ÈoÈ"O-(œ‹ìkUÐþ9d‘_`‘]SA¡‹¼øJACùÙµ°È®¬õ,ò²ÈÓ_ ,²ûÆ^yÑjÖBÞXäXdלõ,ò²ÈÓ_³'EÀ"ûZ´Ã4d‘_`‘]Ó^ƒÙXäÅW ÎÀ"¿À"»¦‚Â-rÏ"¿!‹<ýµ p‹ ,²¯UA{Þ d‘_`‘]SAá S`‘_-hÈ‹ü‹ìš ÷=‹ü†,òôׂÂI°È¾VígƒE~EvmXd×Fh=‹ü†,òô—¬‹ì¾QP`‘­ìµE~EvMYƒÙXäÅWC g`‘_`‘]SÖ`6èYä7d‘§¿î €EöµÚký½AÈ"¿À"»¦‚ÂI°È‹¯4<)ùÙ5NŠzù Yä鯅“"`‘}­ ÚŸ…,ò ,²k*(œ‹¼øjAÓ"`‘_`‘]SAá¹g‘¿Ežþµ ®ý}¹öhVmÍÚ²ÈÓ_Có7LݧÐüyÑjhÙlð‹ìš²æÝÀ5e­}§è Yäé¯YóÙÀ}ÊšwƒE«YËNŠ>`‘]SÖ|6pMYk»Á²ÈÓ_³æ'EîSÖ|6X´šµ¬|À"»¦¬ùI‘kÊZ;|!‹<ý5kÞ Ü§¬ùIÑ¢Õ¬e³Á,²kÊšw×”µö¤è Yäé¯YóÙÀ}ÊšwƒE+Y YäXd×FÖ€Evmdí·¯†–½aú‹ìšBsÙ5…ÖÒg_È"O)(°ÈîyÑjÖ²ÙàÙ5eÍß0uMYkOоEžþš5Ÿ ܧ¬ù½Á¢Õ¬e'E°È®)k>¸¦¬µ÷_È"OÍšŸ¹OYóÙ`ÑjÖ²{ƒXd×”5?)rMYkgƒ/d‘§¿fÍï ܧ¬ùIÑ¢Õ¬e³Á,²kʚ߸¦¬µ'E_È"OÉšqÇ#4`‘]¡õ,ò²ÈÓ_CƒÙXd_«Ðún²ÈŸñÄ?ïo˜º6ö°È‹VöÚ üß_Üù€EvM…n,òâ«¡…³|ùƒï"»¦¬A7èYä/d‘§¿î5˜ €EöµÚk}7øa“‚Ö_tí5è¦)kÐ zù Yäé¯YƒÙXd_«¬õÝ d‘?`‘]Óc³°È‹¯>a7ù3M¡A7€ï"/¾ZÈ"ð]d×FhÀ"»6 Ú³È_È"OÙkð]d÷ÇXäE«Y OŠ€Eþ€EvM¡ù-ò¢ÕÐÂÙXäXdלõßEþÂï"O-(ÌÀ"ûZíµþ¤è‡~rEþ€EvMYƒ“¢žEþByúkÖ ‹ìk•µþ¤(d‘?cŒG£2M?0˜¦Ðún²È°È®)4èÀ"/¾ú„†ÝX例ìšöœõßEþByúË^Ù}#4`‘­d-ü.ò,²k£ À"»6öZÏ"!‹<ý5k0‹ìkZo²È°È®)k0‹¼øjAÃÙXäXd×´×`6èYä/d‘§¿f`‘}­ ÚÏ!‹ü‹ìš ÷À"/¾ZÐð¤XäXd×TP¸7èYä/d‘§¿NŠà»È¾Víï Âï"À"»¦‚Âl,òâ+ Y例ìÚ ¾‹ìÚÈZÿ]ä/d‘§¿Xd÷½,ò¢Õ¬…³|ù3MYƒ[d`‘_ -œ à»È|Ù5e fƒžEþByúkAa6Ù×j¯õ³AÈ"À"»¦‚½|yñÕ‚†·ÈÀ"À"»¦‚ÂIQÏ"!‹<ýµ pR,²¯UAûÙ d‘?`‘]SAa6yñÕ‚†³°È°È®© 0ô,ò²ÈÓ_ jÜñȰȮ‚ö,ò²ÈÓ_Cƒ{ãŽGÖ€E^´RÐEþ€EvMYƒn,òâ«¡…ÝXäXd×”5è=‹ü…,òôׂB7Ù×j¯õÝ ü.ò,²k*(t`‘_-hØ €Eþ€EvM…nгÈ_È"O-(t`‘}­ ÚwƒEþ€EvM…n,òâ« »°È°È®© Ð zù Yäé/5îxd Xd×FA{ù Yä鯡A7€ï"ûZ…Öß"‡,ò,²kÊt`‘_Ùk?,pp,ò,²kc¯‹¼h5´ð¤XäXdלõ,ò²ÈÓ_÷œ‹ìkµ×ú“¢Eþ€EvM{ NŠ€E^|µ áI°È°È®© pRÔ³È_È"O-(œ‹ìkUÐþ¤(d‘?`‘]SAá¤XäÅW ²È°È®Ð€Evmd­g‘¿EžþRP`‘Ý7ö°È‹V³ž‹ü‹ìšBƒ[äžEþByúkÖ€7Ùת ý¦!‹ü‹ìšöðÀ"/¾ZÐð S`‘?`‘]SAá¹g‘¿EžþZP¸EÙת ý-rÈ"À"»¦‚Â-2°È‹¯4ä €Eþ€EvM…7L{ù Yäé¯ÞXd_«‚öo˜†,ò,²k£ À"»6BëYä/d‘§¿d Xd÷‚‹¼he¯…,ò,²kÊÌÀ"/¾ZxR,ò,²kÊœõ,ò²ÈÓ_ 'EÀ"ûZíµþ¤(d‘?`‘]SAá¤XäÅW ž‹ü‹ìš 'E=‹ü…,òôׂÂI°È¾VíOŠBùÙ5NŠ€E^|µ áI°È°È®© pRÔ²È÷ÿf,ò¿þ¥  ý Ú? ýYµ%kãŠè³ý54;)ŸB3yÕjhÑl0þTý•ÿ 4eͺhÊZ÷NÑøŸ¢nð¯¿fÍfð)kÖ V­f-:)ªþò+kÖ @ShvR´j5´h6ªþÊ+4;)M¡Ùl°j5´¨Œ?e¼hÚkvRšöZ7Œÿ):)ú×_÷šuð)kvR´j5kÑlðÿ);›$éÈ^elN þ%Sû–t ¹¿ÙÀ+´¨€?˜É·^Îl4ÀL|@ð‰õQýW^µMh Ífƒ]ë¡EÝ >ªÿ¢+4› @ShÖ v­…–±ÈŸ?œE­î5g‘A«{md‘ëOa7pùßÏø}ÿ)4c‘AShÓ¹Aý)ìÆWAE­ ê,ò®õ‚†ÝÀYäúxèÎ"ƒOY›6Eõ§°O¬¬A70MYƒnð[ëY »³Èõ? ÝÀYdð)kÓ¹Aý)ìÆ+k¶)MY³Ù`×zÖÂnà,r}…6ÔŸÂnà,ò¿ŸÑC³sð)´iSôù#c‘ÿõ·öî,2øê^3_…6²Èõ§°ø{‘ÿýŒ–5g‘Á§Ðæn±ÈõQ08‹ >eÍÎ v­}C3¹>ªÿòׇ¿4…³Áø^䲇ÝÀYä?£ÔÎ À§‚N›¢úSØ ü½Èÿ~FÍ6EàShs7ÈXäú(˜ œEŸ Ý`d‘ËvcŒu¯A7p|ÊÚÜ 2¹> f/2ø”5˜ Æ÷"—=ìÎ"ÿûý^ƒnà,ò~mûñÈXäÏÎ"ƒVÿw´*èÈ"ןÂn`tÞe,r}TÿåWhÐ œEŸB›»AÆ"×GA70MßP˜ œEÞ}ývg‘ëãaSäïEŸ²6Ï‹üùÃß‹ ZeÍ|õ5py×ZÖ2¹>ªo€ê^ó÷"ƒ¦ÐàÜ`d‘ËvcŒtg‘ÁWYäúSØ œEþ÷3Úïš³ÈàShs7øaÿóïõQÐ œEŸ Ý`d‘ËvcŒUPØ9‹ >emž 2¹> fÓô …sg‘w_ÿ††³³ÈõñÐ LSAáÜ`d‘ËnŠŒ1VAáÜÀYdð© ó¦(c‘ë£àÜÀß‹ >e Î Æ÷"þÈXäýmSäïE_…æïEÞµv¯e,r}tg‘Á§Ð ŒïE.{Ø œEþ÷3ÚO®³Èà«{m|/rý)ìÎ"ÿû=´>/(k°)Y䲇›"cŒëjZý®9‹ š²6oŠ2¹> N‘MSh°)ry÷õ¯A88‹\³i*(lŠF¹ìa70ÆX…nà,2øTÐy6ÈXäú(˜ LSAa6py÷õ‚†³³Èõñ0ø{‘Á§¬Í³AÆ"þð÷"ƒVYs´ md‘ëOá¦Èxâº×ü½È Õ×ÀYä]kÍXäú(870MYƒM‘³È»¯‡vg‘ëãaSdš²Ý`d‘Ëv/ò¿ŸÑ•³ÈàÓ½6wƒŒE®‚nàïEŸ²›¢ßZ/hØ œE®ÿIè¦)4è#‹\ö°c¬o(tg‘Á§‚ÎÝ c‘룠˜¦o(tg‘w_/hØ œE®‡nàïEŸ²6wƒŒEþüáïE­²æ,2hÚÈ"ןÂn`ŒqÝkþ^dÐêkàïEÞµVÐŒE®‚n`š²ÝÀYäÝ×C »³ÈõñÐ LSÖ ŒïE.{Ø œEþ÷3Z70ŸBƒMÑÈ"—=Üc¬{ 6EÎ"ƒO_ƒyS”±ÈõQ°)2M÷lŠœEÞ}ý^ »³ÈõñÐ LSAaS4²Èe7EÆ« °)r|*è¼)ÊXäú(Ø™¦‚Â)²³È»¯4c‘?8‹ Z…æ,2h•µ‘E®?…ÝÀxâ*¨³È Õ½æ,ò®õ¬…›"g‘ëãáÜÀ4…Ï,rÙÃn`Œ±²ÝÀYdð© ó¹AÆ"×GÁ¹iº×à™"g‘w_/hØ œE®‡n`š ³ÁÈ"—=œ Œ1VAa6p|*è|Šœ±ÈõQpŠlš Ú}ÊtƒßZ/hØ œE®ÿIè¦)4x¦hd‘ËÎÆ« 08‹ >tž 2ùó‡³È UAE­BYäúSØ Œ'®¬9‹ ZÔYä]k÷ZÆ"×GÁl`š²³³È»¯‡vg‘ë㡘¦¬Ál0²ÈegcŒUÐþ˯¬A70M÷Ú¼)ÊXäú(Ø™¦ÐàÜÀYäÝ× vg‘ë㡘¦‚¦hd‘ËÎÆ« 08‹ >tÞe,r}lŠLSAaSä,òîë »³ÈõñÐ LSAáyf‘E^þýÙµ¿>®ý Ú?»¶gíYäåï¡9‹ì>…æ§È›ÖCËfƒXd×”5ï®)k¿|=´¬Æÿ¯>Þ»kÊšwƒMë¡eÝàÙ5eÍ»kÊÚØ Žì½ÈõQÞ \ShÞ \Shã¦èøaÿû“XËß¿Þ Ü§‚z7Ø´^ЬÆë^ónàšBóÙ`ÓzhÙlp‹ìš êÝÀ5tÜÙ{‘ë£|SäšBóM‘k mœ ŽE^þv¯w\¡‹ìZ…6³ÈGÈ"/ º°È~­Bé³#d‘—¿‡æ›"÷Õ×XäMk_ƒ8øñùÙ5…Ý`f‘E^þž5Ÿ ܧÐüÜ`ÓzÖ²MÑ,²kú@70M÷ÚÜ BùÙ5…æç®)´qStü°Àɽ曢õûAk*(tƒ™E>Byùû½æ›"÷)4ßmZ¿×²ÙàÙ5ºi*èÜ Bù0ž¸Ú;°È®UÖ€EÞ´–µE>€Ev­²,²k•µ™E>ByùÛ½,²û”5?7Ø´žµp6ùÙ5…Ý`f‘E^þž5èÆ,+4è3‹|„,òò÷ÐüÜÀ} ÍÏ 6­4ÛÀ"»¦¯t`‘7_-œ €E>€EvMYƒn0³ÈGÈ"//(t/r…Ý`f‘E^þšoŠÜ§¬ù¦hÓZACùÙµº×€Ev­~rgùYäåoYÙ}•5`‘7­g-Ü‹|‹ìšBƒnð[ë¡…ÝXäXd×tƒ™E>Byù{A¡ø{‘+4è3‹|„,òò÷Р‹ì×êk0Ï!‹|‹ìš¾¡Ð LShól²È°È®)4?EvM¡çGÈ"//(t`‘ýZ…6oŠ~Xà`¢ùÙ5}C¡Ì,ò²ÈËß²æïEþ¸¯ByÓÚïZÈ"À"»V÷š¿´*èÌ"!‹¼ü=k°)Ù¯Uhó¹AÈ"À"»¦¬õ_~ºÁÌ"!‹¼ü=kÐ Œ;VhÐ fùYäåï¡A7Ù¯UAçn²È°È®© Ð €EÞ|ýÎÀ"À"»¦‚Âl0³ÈGÈ"//(t`‘ýZtî!‹|‹ìš ›"`‘7_+hÈ"þ^äkš¿´ÊÚø^äúSöLÑò·‚‹ì¾º×€EÞ´žµp6ùð÷"WpŠìïEÞ}=´p6ùð÷"×ÿ$t`‘7_-Byùû½›"`‘ýZtÞ…,ò,²k*(lŠ€EÞ|­ !‹|‹ìZ…,²k•µ™E>Byù[AEv_ÝkÀ"oZÏZØ €E>€EvM¡Á)òÌ"!‹¼ü=kÀ‹ìת ¿®íY 7EÀ"À"»¦¬Á¦è·ÖC Ÿ0ùÙ5…ÏÍ,ò²ÈËß ¼°È~­ :Ÿ"‡,ò,²kúñ€Sd`‘7_/hÈ‹|‹ìš ÏÍ,ò²ÈËß Ï‹ìת ó¦!‹|‹ìZXd×*´™E>Byù[Ö€Ev_XäMk÷ZÈ"À"»¦¬Á¹°È›¯‡ž‹|‹ìš²³ÁÌ"!‹¼ü½ 0‹ì×ê^›gƒE>€EvM…ÙXäÍ× nŠ€E>€EvM…MÑÌ"!‹¼ü½ °)Ù¯UAçMQÈ"À"»¦‚¦XäÍ× nŠ€E>€EvM…MÑÌ"Ÿ!‹¼ü{A]ûëãÚß ý³k{ÖÎE^þšoŠÜ§Ð|S´i=´l68EvMYónàš²6nŠÎð½ÈËß³æ³û”5ï›Ö³–Í'°È®)k½C(4Ÿ 6­‡–Í'°È®)4ﮩ ã¦è YäåïõÙÀ}ÊšwƒMëYËž):EvMYóÙÀ5emìç üß—XËß³æ›"÷)k>lZÏZÖ N`‘]SÖ|Säš²6ÎgÈ"/˰È™¯B›Yä3d‘—¿‡ÝXd¿V¡,ò²ÈËßCó'Lݧ¬ù¦hÓÚ½²È'°È®Õ½ïEvMY7EgÈ"/ÏšÏîSÖ ÌïE>XààÇXäõ¿ÃUÖ ‹¼ùzA³ÙàÙ5…æç®© ã¦è YäåïõÙÀ}*¨ŸlZÏZ¶):á½È®)k>¸¦¬çgø^äåïYóM‘û”5Ÿ 6­e-d‘O`‘]«¬™¯ByÓzhÙ¦'°È®)´Þ!Ì3‹|†,òò·‚‹ì>…Ýà·Ö³–mŠN`‘]SÖü S×êk0³ÈgÈ"/Ït`‘ýZ…6nŠÎE^þš?aê>ÔÏ 6­4ìÀ"Ÿð^d×Ìó{‘Ïð½ÈËß³ÝÞ‹ìת ól²È'¼Ù5}  ‹¼ùzAÃÙÞ‹|š¦Ð`6yóµÐBùÙµ Xdת 3‹|†,òò·{ Xd÷Õ×XäMëY 7EÀ"ŸÀ"»¦Ð Ì,òùÃÿÊy}FûW.¼Ù}*è<„,ò ïEvM÷lŠ€EÞ|½ á¦Þ‹|š¦Ð`6€÷"o¾ZØ €E>á½È®é^ƒn0³ÈgÈ"/ÿ†B7Ù¯Õ½6wƒE>á½È®© Ð à½È›¯4ìÀ"ŸÀ"»¦‚Âl0³ÈgÈ"/+(°Èî«Ð€EÞ´–µE>Ev­ ,²ku¯Í,ò²ÈËß³›"`‘ýZ…6Ÿ„,ò ,²kÊÌÀ"o¾^ÐðÜÞ‹|Â{‘]Ó½›¢™E>Cyù{Aa6Ù¯UAçsƒE>EvM…M°È›¯4<7ùÙ56E3‹|†,òò÷‚¹°È~­ :oŠBùÙ5f`‘7_+hÈ"ŸÀ"»V¡‹ìZemf‘ÏE^þVP`‘ÝW÷°È›Ö³ÎÀ"ŸÀ"»¦Ð`6˜ß‹|†ïE^þž58EÙ¯UAçÙ |/ò ,²kº×`6yóõ‚†³¼ù„÷"»¦‚¦hf‘ÏE^þ^P8E†÷"ûµ*è|n²È'¼Ù5N‘MShól²È'°È®)4˜ €EÞ|ý^ g`‘O`‘]Ó½³ÁÌ"Ÿ!‹¼üí^Ù}°È›Ö²²È'¼Ùµ*(°È®Õ½6³ÈgÈ"/ÏÌÀ"ûµ mž BùÙ5e f`‘7_/h8À{‘OÓtÓ”µùÜ d‘O`‘]Sh°)yóõ¬…›"`‘O`‘]Ó76E3‹|†,òò÷¯lŠ€EökUй„,ò ,²k*(t`‘7_/hØ €E>EvM…n0³ÈgÈ"/+(°Èî«Ð€EÞ´–µE>á½È®UAEv­îµ™E>Cyù{Ö ‹ì×*´¹„,ò ,²kÊt`‘7_/hØ à½È§i º¼yóõÐÂÙXäÞ‹ìš¾0Ì,ò²ÈËßï5˜ €Eöku¯Í³AÈ"ŸÀ"»¦‚Âl,òæë Ÿ)‚÷"Ÿð^d×TPxÂtf‘ÏE^þ^Px¦Xd¿VŸ0 YäXdת À"»V¡Í,ò²ÈËß²,²ûª À"oZ»×~Xàà¨XäXd×lŠfù YäåïYƒM°È~­ :oŠÂ÷"ŸÀ"»¦{ º°È›¯4ìÀ"ŸÀ"»¦‚B7˜Yä3d‘—¿º°È~­ :wƒE>EvM…n,òæë »°È'°È®© Ð fù Yäåï…n,²_«‚ÎÝ d‘O`‘]«‚‹ìZ…6³ÈgÈ"/˰Èî«‚‹¼ií^ YäXd×”5 Ï€EÞ|=´ð S`‘O`‘]SÖ€>›Yä3d‘—¿ž0Ù¯Õ½6oŠBùÙ56EÀ"o¾^ÐpS,ò ,²k*(lŠfù Yäåï…M°È~­ :oŠBùÙ56EÀ"o¾^ÐpS,ò ,²k*(lŠfù Yäåß êÚ_×þíŸ]Û³v…,òò÷М>sŸBsÞ`ÓzhÙ)ò,²kÊšw×”µqSt…,òò÷¬ùlà>eÍ»Á¦õ¬e›¢ Xd×”5Ÿ \SÖÆnp…ïE^þž5¦È}ʚϛֳ–uƒËxâÿÕÿ¤Ï®)4ï›ÖCËž)º€EvMõÙÀ5tìWÈ"//¨?Sä>eÍgƒMëY˺Á,²kÊš?Säš²6ÎWÈ"/˰È‹¼i-k!‹|c\_Ó*kÀ"»VY›Yä+d‘—¿gÍÏ Ü§¬ù¦hÓzÖ²ÙàÙ5eÍÏ \SÖÆMѲÈËß³æ³û”5ÂtÓzÖ²MÑ,²kʚϮ)kã¦Wø^äåïYƒn,²_«ÐÆMѲÈËßCóÙÀ}*¨?aºi½ Ù¦èÙ5Ôg×”µñ Ó+d‘—¿gÍ7EîSÖ|6Ø´–µE¾€Ev­²,²k•µß¾ZÆ"_À"»¦ÐœEvM¡ÿeŠ+d‘—¿Xd÷UAEÞ´žµ°‹|Á{‘]Sh0Ì,ò²ÈËß³ÝXd¿VgƒE¾Œ'®y˜¦{ º°È›¯4œ €E¾€EvM…Ù`f‘¯E^þ^PèÀ"ûµ*è<„,ò,²k*(t`‘7_/h8‹|‹ìš Ýà·ÖB Yä Xd×*kÀ"»VYä+d‘—¿ÝkÀ"»¯²,ò¦õ¬…›"`‘/`‘]Sh0Ì,ò²ÈËß³›"`‘ýZtž BùÙ5Ýk°)yóõ‚†³°È°È®© °)šß‹|…ïE^þ^P˜ à½È~­ :Ï!‹|Á{‘]SAaSdšB›»AÈ"_À"»¦Ð ‹¼ùú½v`‘/`‘]Ó½Ý`f‘¯E^þv¯‹ì¾ XäMkY Yä Xdת À"»V÷ÚÌ"_!‹¼ü=k°)Ù¯Uhó¹AÈ"_À"»¦¬Á¦XäÍ× ž‹|‹ìšî5ØÍ,ò²ÈËß çÀ"ûµ*è¼) Yä Xd×TÐÞ!”5˜ ~k½ á¹°È°È®)4ØÍ,ò²ÈËß çÀ"ûµ*è¼) Yä Xd×TP87y󵂆,ò,²k°È®UÖfù YäåoÙ}u¯‹¼i=kál,ò,²k fƒ™E¾Byù{Ö`6Ù¯UAçÙ d‘/`‘]Ó½³°È›¯4œ €E¾€EvM…Ù`f‘¯E^þ^P˜ €EökUÐy6Yä Xd×TP˜ €EÞ|½ á¹°È—i f`‘7_-œ €E¾€EvM÷Ì3‹|…,òò·{ Xd÷UhÀ"oZËZÈ"_À"»VÙµúÌ,ò²ÈËß³³°È~­B›gƒE¾€EvMYƒÙXäÍ× ÎÀ"_À"»¦{ fƒ™E¾Byù{Aa6Ù¯UAçÙà‡þïlË,²k*(ÌÀ"o¾^Ðp60ƸN[LShÐ LSÖæMQÈ"_À"»¦Ð ‹¼ùzÖÂn,ò,²kú@7˜Yä+d‘—¿} €Ev_…,ò¦µ¬…,ò,²kUP`‘]«{mf‘¯E^þž5èÀ"ûµ mî!‹|‹ìš²ÝXäÍ× v`‘/`‘]Ó½Ý`~/ò¾yù{A¡À{‘ýZtî!‹|Á{‘]SA¡À{‘7_/hØ €E¾à½È®© °)šß‹|…ïE^þ^PØÁ{‘ýZtÞ…,òïEvM…M¼y󵂆,ò,²k°È®UÖfù YäåoÙ}u¯‹¼i=ká¦Xä Xd×lŠfù YäåïYƒM°È~­ :oŠBùÙ5Ýk°)yóõ‚†›"`‘/`‘]SAaS4³ÈWÈ"//(lŠ€EökUÐyS²È°È®© 0‹¼ùzAÃM°È°È®© ÀÌ,ò²ÈËß O˜‹ìת 3o²È°È®UAEv­B›Yä+d‘—¿e Xd÷UAEÞ´v¯…,ò,²kÊÐgÀ"o¾Zø„)°È°È®)kð„éÌ"_!‹¼ü½ ð„)°È~­îµù ÓE¾€EvM…'LEÞ|½ á¦À"_À"»¦‚Â)òÌ"_!‹¼ü½ ð„)°È~­ :oŠBùÙ56EÀ"o¾^ÐpS,ò,²k*(lŠfùYäåß êÚ_×þíŸ]Û³v‡,òò÷МEvŸBsyÓzhÙlp‹ìš²æÝÀ5emÜÝ!‹¼ü=k>¸OYón°i=kÙ¦èÙ5eÍg×”µ±Ü!‹¼ü=k¾)rŸ²æ³Á¦õ¬eÝàÙ5eÍ7E®)kãlpÿ°ÀÿýHcù{Ö¼¸OYóMѦõ¬e³Ám<ñÿêÒ7E®)4Ÿ 6­‡–uƒXd×TPß¹¦‚޳Á²ÈËß ,²û*kÀ"oZËZÈ"ßÀ"»VYÙµÊÚÌ"ß!‹¼ü=k~nà>eÍ7E›Ö³–Í7°È®)k~nàš²6nŠîE^þž5Ÿ ܧ¬ù¹Á¦õ¬e›¢Xd×”5Ÿ \SÖÆsƒ;d‘—¿gÍ7EîSÖ|6Ø´žµìÜà6ž¸~rMSÖ|Säš²6Î÷ 4*`‘×güΤBóÙÀ5…6žÜ!‹¼ü½ ¾)rŸ ê³Á¦µ‚†,ò ,²k•5`‘]«¬Í,òýÃy}F+(°ÈîSh#‹|‡,òò·‚‹ì¾*(°È›Ö v`‘o`‘]Sh0Ì,ò²ÈËß³ÝXd¿VgƒE¾EvM_èÀ"o¾^Ðp6ùÙ5ºÁÌ"ß!‹¼ü½ 0‹ìת s7YäXd×TPèÀ"o¾^Ðp6ùÙ5ºÁÌ"ß!‹¼ü­ ÆWÖ€Ev­ :³ÈwÈ"/ 6EÆWÖ€EÞ´VÐ8hTÀ"ßÀ"»¦Ð`6˜Yä;d‘—¿g 6EÀ"ûµ*è<„,ò ,²kº×`S,òæë g`‘o`‘]SAaS4³ÈwÈ"//(ÌÀ"ûµ*è¼) YäXd×TP˜ €EÞ|½ á¦XäÛ4…ÝXäÍ×C »°È7°È®é^ƒn0³ÈwÈ"/»×€Ev_…,ò¦µ¬…,ò ,²kUP`‘]«¯ÁÌ"ß!‹¼ü=k°)Ù¯Uhó¹AÈ"ßÀ"»¦¬Á¦XäÍ× ž‹|‹ìšî5ØÍ,ò²ÈËß çÀ"ûµ*è¼) YäXd×TP87yóõ‚†›"`‘o`‘]SAáÜ`f‘ïE^þ^P87Ù¯UAçMQÈ"ßÀ"»¦‚¹°È›¯4d‘o`‘]«Ð€Ev­²6³ÈwÈ"/+(°Èî«{ XäMëY O‘E¾EvM¡Ál0³ÈwÈ"/ÏÌÀ"ûµ*è<„,ò ,²kº×`6yóõ‚†³°È7°È®© 0Ì,ò²ÈËß ³°È~­ :Ï!‹|‹ìš ³°È›¯4œ €E¾EvM…SäßZ-œ €E¾EvM¡Ál0³ÈwÈ"/»×€Ev_…,ò¦µ¬…,ò ,²ku¯‹ìZ} fùYäåïYƒÙXd¿V¡Í³AÈ"ßÀ"»¦¬Ál,òæë g`‘o`‘]Ó½³ÁÌ"ß!‹¼ü½ 0‹ìת ól²È7°È®© 0‹¼ùzAÃÙXäXd×TP˜ fùYäåï…ÙXd¿Vgƒ8X3‹|‹ìš²Ý`f‘ïE^þ–5`‘ÝW¡‹¼ií^ YäXd×êk,²kUЙE¾Cyù{Ö ‹ì×*´¹„,ò ,²kÊt`‘7_/hØ €E¾EvM÷tƒ™E¾Cyù{A¡‹ìת s7YäXd×TPèÀ"o¾^а‹|‹ìš Ý`f‘ïE^þ^PèÀ"ûµ*èÜ BùÙ56EÀ"o¾VÐE¾Ev­BÙµÊÚÌ"ß!‹¼ü­ À"»¯î5`‘7­g-Ü‹|‹ìšBƒMÑÌ"ß!‹¼ü=k°)Ù¯UAçMQÈ"ßÀ"»¦{ 6EÀ"o¾^ÐpS,ò ,²k*(lŠfùYäåï…M°È~­ :oŠBùÙ56EÀ"o¾^ÐpS,ò ,²k*(lŠfùYäåï…'LEökUЙ7YäXdת À"»V¡Í,ò²ÈËß²,²ûª À"oZ»×BùÙ5e è3`‘7_-|ÂXäXd×”5xÂtf‘ïE^þ^PxÂXd¿V÷Úü„iÈ"ßÀ"»¦‚¦À"o¾^Ðð S`‘o`‘]SAá Ó™E¾Cyù{Aá S`‘ýZt~Â4d‘o`‘]SAá™"`‘7_/hxn,ò ,²k*(lŠfù Yäåß êÚ_×þíŸ]Û³ö„,òò÷Ðü S÷)4g‘7­‡–ͰȮ)kÞ \SÖÆMѲÈËß³æ³û”5ï›Ö³–mŠ`‘]SÖ|6pMY»Á²ÈËß³æ›"÷)k>lZÏZÖ `‘]SÖ|Säš²6ÎOÈ"/Ïšw÷)k¾)Ú´žµl6x€EvMYónàš²6nŠžø¿Ÿ,ÏšÏîSÖ¼lZËZÈ"?ÆÿïãZeÍ|°È›ÖCËÞ„ù‹ìšBó7aºVYä'd‘—¿Ôc…ÝXäÍ׳–ͰȮ)4?7pMY7EOÈ"/ÏšÏîÓ½æç›Ö³–mŠ`‘]SÖ|6pMYÏ žE^þž5ß¹OYóÙ`ÓzÖ²sƒXd×”5ß¹¦¬³Á²ÈËß³æçîSÖ|S´i=kÙlðO¬Ÿ\è¦)4迵ZÈ"?À"»VÙµ*èÌ"?!‹¼ü­ Æ+4è¦)´‘E~Byù{h~Šì¾*(°È›Ö v`‘`‘]Sh0Ì,ò²ÈËß³ÝXd¿VgƒE~€EvM÷t`‘7_/h8‹ü‹ìš Ý`f‘ŸE^þ^P˜ €EökUй„,ò,²k*(ÌÀ"o¾^а‹ü‹ìš Ý`f‘ŸE^þVP`‘ÝW¡™¯ :³ÈOÈ"/ 6EÀ"ûµ mî!‹ü‹ìZÝkæSÖüyÓÚ½²È1Æõ/Ó̦)kól²È°È®)4Ø‹¼ùzÖÂÙXäXd×TPØÍ,ò²ÈËß¿0‹ìת ó¦(d‘`‘]SAa6yóõ‚†›"`‘`‘]SAa6ø­õÐÂn,ò,²k ºÁÌ"?!‹¼üí^Ù}°È›Ö²²È°È®Õ½,²kõ5˜Yä'd‘—¿g f`‘ýZ…6Ÿ„,ò,²kÊt`‘7_/hxn,ò,²kº×`S4³ÈOÈ"//(œ‹ìת ó¦(d‘`‘]SAáÜXäÍ× nŠ€E~€EvM…sƒ™E~Byù{AaS,²_«‚Îç!‹ü‹ìš êO˜º¦ÐÆgŠžE^þ–5ãŽ+4`‘]«Ðfù Yäåï¡Ál`ÜqÝkÀ"oZûü°ÀÁA°È°È®)4˜ fù YäåïYƒSd`‘ýZtž BùÙ5Ýk0‹¼ùzAÃÙXäXd×TP˜ fù Yäåï…ÙXd¿VgƒE~€EvM…ÙXäÍ× ÎÀ"?À"»¦‚Âl0³ÈÏ œüxô_ùšÞEvM¡Ál0³ÈOÈ"/»×€Ev_…,ò¦µ‚†,ò,²ku¯‹ìZ} fù YäåïYƒÙXd¿V¡Í³AÈ"?À"»¦¬Ál,òæë g`‘`‘]Ó½³ÁÌ"?!‹¼ü½ 0‹ìת ól²È°È®© 0‹¼ùzAÃÙXäXd×TP˜ fù Yäåï…ÙXd¿VgƒE~€EvM…ÙXäÍ× ²ÈñÄÕ¨€Ev­ ,ò¦õÐÂgŠ€E~L«¬‹ìZtf‘ŸE^þv¯w¬Ðà™"ÓÚÜ BùÙ5…ÝXäÍ× v`‘`‘]Ó½Ý`f‘ŸE^þ^PèÀ"ûµ*èÜ BùÙ5º°È›¯4ìÀ"?À"»¦‚B7˜Yä'd‘—¿º°È~­ :wƒE~€EvM…n,òæk YäXd×*4`‘]«¬Í,ò²ÈËß ,²ûê^yÓzÖBÞXäXd×lŠfù YäåïYƒM°È~­ :oŠBùÙ5Ýk°)yóõ‚†›"`‘`‘]SAaS4³ÈOÈ"//(lŠ€EökUÐyS²È°È®© °)yóõ‚†›"`‘`‘]SAaS4³ÈOÈ"//(a ,ò,²k*(®ý Ú?»¶gí²ÈËßCóSd÷)4g‘7­‡–Í`‘]SÖ¼¸¦¬›¢OÈ"/ÏšÏîSÖ¼lZÏZ¶)ú‹ì𲿳kÊÚØ >!‹¼ü=k¾)rŸ²æ³Á¦õ¬eÝà,²kÊšoŠ\SÖÆÙà²ÈËß³æÝÀ}ÊšoŠ6­g-› >À"»¦¬y7pMY7EŸE^þž5Ÿ ܧ¬y7Ø´–µEþ‹ìZe Xd×*k¿}=´ìÜà,²k Íé3×ÚÈ|Byù[AEv_XäMëYËfƒ°È®)k~nàš²6nŠ>!‹¼ü=k>¸OYósƒMëYË6E`‘]SÖ|6pMYÏ >!‹¼ü=k¾)rŸ²æ³Á¦õ¬eç`‘]SÖ|Säš²6ΟE^þž5?7pŸ²æ›¢MëYËfƒ°È®)k~nàš²6nŠ>!‹¼ü-kÆWhÀ"»V¡Í,ò'd‘—¿‡³°È~­B›»AÈ"Œ'þ_}¼?SäZÝkÀ"oZ»×~XàÿþüÚXd×TPèÀ"o¾Z8c¬¬A7Ù}*è<„,òXd×”5èÀ"o¾žµp6ù,²kº× Ì,ò'd‘—¿Ca6Ù¯UAçn²È`‘]SAa6yóõ‚†ÝXä°È®© 0Ì,ò'd‘—¿Xd÷UhÀ"oZËZÈ"Œ1®Óª À"»V÷ÚÌ"Byù{Ö ‹ì×*´yS²È`‘]SÖ ‹¼ùzAÃn,òÇ4…›"`‘7_-œ €Eþ‹ìš¾°)šYäOÈ"/¿×`6Ù¯Õ½6oŠBù,²k*(ÌÀ"o¾^ÐpS,òXd×TP˜ fùóÃÿ^y}Æï"+k0‹¼ùZÖBùcemÞ…,r½ï ÝXd¿V¡ÍÝà‡N Úå•5˜ LÓœÌ,rýWü+ Ihý]¡Á¦Xd÷)kó¹AÈ"×– çÀ"ûµ mÞ…,rý7R=4`‘ÝW5_…6³ÈõàË j…³ÁÌ"Byù{hÐ €EökëkðÛ× ž‹üÙ5e ºÁÌ"Byù{Ö ‹ì×*ks7Yä°È®éÚ;„²§È¿µ^Ðð™"`‘?À"»¦Ð Ì,ò'd‘—¿6EÀ"ûµ*èÜ Bù,²k*(t`‘7_+hÈ"€Ev­BÙµÊÚÌ"Byù[AEv_ÝkÀ"oZÏZ8‹üÙ5…Ý`f‘?!‹¼ü=kÐ €EökUÐy6Yä°È®é^ƒs`‘7_/h8‹üÙ56E3‹ü Yäåï…ÙXd¿VgƒEþ‹ìš §ÈÀ"o¾^ÐðÜXä°È®© °)šYäOÈ"//(œ‹ìת ó¹AÈ"€Ev­ ,²kÚÌ"Byù[Ö€Ev_XäMk÷ZÈ"€EvMYƒM°È›¯‡ž‹üÙ5e­w tî!‹ü1ƸÖ1¦)kÐ LShó¹AÈ"€EvM¡Á¦À"o¾^ÐðÜXä°È®© 0Ì,ò'd‘—¿CáÜXd¿VÏ Bù,²k*(lŠ€EÞ|½ á¹°È`‘]SAáÜ`f‘ßE^þ½ ®ýU  ~Úü7hÿìÚžµ7d‘—¿‡æ¼ûšoŠ6­‡–Í/°È®)kÞ \SÖÆsƒ7d‘—¿gÍg÷)kÞ 6­g-Û½À"»¦¬y7pMY»Á²ÈËß³æ›"÷)k>lZÏZÖ ^`‘]SÖ|Säš²6ÎoÈ"/Ïšw÷)k¾)Ú´žµl6xEvMYónàš²6nŠÞE^þž5Ÿ ܧ¬y7Ø´–µE~Ev­²,²k•µ™E~Xàÿ~Fµü-kÆ+4g‘]Sh#}ö†,òò÷Ðü™"÷UAEÞ´^Ðl6xEvMYë¿ü ºÁÌ"¿!‹¼ü=k~Šì>…æç›Ö³–mŠ^`‘]SÖ|6pM÷Úxnð†,òò÷¬ù¦È}ʚϛֳ–¼À"»¦¬ù¦È5emœ ÞE^þž5?7pŸ²æ›¢MëYËfƒXd×”5?7pMY7EoÈ"/˰È™¯B›Yä7d‘—¿‡³°È~­B›»AÈ"¿À"»V5Ÿ²æç›ÖîµE~EvM¡A7yóõÐÂÙXäXd×”5è3‹ü†,òò÷{ f`‘ýZÝks7øaƒ‹ü‹ìš²Ý`f‘ßE^þž5˜ €Eök•µ¹„,ò ,²kúÀl,òæë_ƒ°‹ü‹ìš ³ÁÌ"¿!‹¼ü­ À"»¯ByÓZÖBùÙµ*(°È®Õ½6³ÈoÈ"/ÏÌÀ"ûµ mÞ…,ò ,²kÊt`‘7_/hØ €E~EvM÷tƒßZ-œ €E~EvM¡Á¦hf‘ßE^þ~¯Ál,²_«{mÞ…,ò ,²kº×`6yóõ‚†›"`‘_`‘]SAa6˜Yä7d‘—¿6EÀ"ûµ*è<„,ò ,²kUPóUÖ€EÞ´VÐð½È/°È®)4Ø™VY›Yä7d‘—¿Xd÷)k0Ì,ò²ÈËßCƒs`‘ýZemlZÏZÖ ¾À"»¦¬ù¦È5emœ ¾!‹¼ü=kÞ Ü§¬ù¦hÓzÖ²Ùà ,²kÊšw×”µqSô YäåïYóÙÀ}ÊšwƒMkY Yä/°È®UÖ€Ev­²6³ÈßE^þ–5`‘ÝWY3ŸBé³oÈ"/ÍO‘ݧÐ|S´i½ ÙlðÙ5ÔÏ \SÖÆMÑ7d‘—¿gÍg÷)k~n°i=kÙ¦è ,²kʚϮ)kã¹Á7d‘—¿gÍ7EîSÖ|6Ø´žµìÜà ,²kÊšoŠ\SÖÆÙà²ÈËß³æçîSÖ|S´i=kÙlðÙ5eÍÏ \SÖÆMÑ7d‘—¿e Xd÷UÖ€EÞ´–µEþcü¿úŸ„ÙXd÷UÖfù²ÈËß³ÝXd¿V¡Í³AÈ"Ev­î5`‘]Shs7øaÿ;UûÙ5…³°È›¯ßka7€÷"MShÐ à½È›¯‡ÎÀ"EvMßPè3‹ü Yäåï_˜ €Eöku¯ÍÝ d‘¿À"»¦‚Âl,òæë »°È_`‘]SAa6˜YäoÈ"/+(°Èî«Ð€EÞ´–µEþ‹ìZXd×ê^›YäoÈ"/Ït`‘ýZ…6wƒEþ‹ìš²³°È›¯4Ü‹üÙ5Ýk0Ì,ò÷‡°Èë3~YYƒn,òæëY »1Æõ"ÓlŠLÓ½6oŠBù ,²k f`‘7_ÏZ¸)ù ,²kº×`6˜YäoÈ"/ÿñ€M°È~­ :Ï!‹üÙµ*(°È®Uh¿}­ !‹üÙ5…æO˜º¦ÐæMQÈ"'®o(°È®Õ½,ò¦õ¬…›"x/ò×4e ºiÊÚ<„,òÞ‹ìšBƒÙÞ‹¼ùzÖÂÙXä/¼Ù5Î fù²ÈËß~<Œ1VÖ ‹¼ùzÖÂM°È_`‘]SÖàÜ`f‘¿!‹¼ü=k°)Ù¯Õ×`>7Yä/°È®© °)y󵂆,òXd×*4`‘]«¬Í,ò7d‘—¿Xd÷Õ½,ò¦õ¬…§ÈÀ"MSÖàXäÍ×C »°È_`‘]SÖàyf‘¿!‹¼ü½ pn,²_«{m>EYä/°È®© 0‹¼ùzAÃÙXä/°È®© °)šYäoÈ"//(lŠ€EökUÐyS¾ù ,²k*(lŠ€EÞ|½ á¦Èxâú§$¼Ù56E3‹ü YäåoÙ}°È›Ö²²È_`‘]«‚‹ìZÝk3‹ü YäåïYƒM°È~­B›7E!‹üÙ5e f`‘7_/h¸)ù ,²kº×`S4³ÈßE^þ^Px¦Xd¿VO‘Cù ,²k*(ÌÀ"o¾^Ðp6ù ,²k*(Ì3‹ü Yäåï…ÙXd¿VgƒEþ‹ìš ³°È›¯4d‘¿À"»V¡‹ìZemf‘¿?|p°Ëy}FÛå‹ì>…6oŠÂ÷"EvMYƒÙXäÍ× ÎÀ"Ev­¾¡À"oZ-ìÀ"EvM¡A7˜YäoÈ"/ûñÙ} 6E3‹ü Yäåï¡Á3EÀ"ûµúÌç?,pò í¿èõ¯\`‘]SÖ Ì,ò7d‘—¿g º°È~­²6wƒEþ‹ìš~< ‹¼ùÚ74d‘¿À"»V¡‹ìZemf‘¿!‹¼ü­ À"»¯î5`‘7­g-Ü‹üÙ5…O˜Î,ò7d‘—¿g x`‘ýZt>7Yä/°È®é^ƒs`‘7_/hxn,òXd×TPè3‹ü Yäåï…n,²_«‚ÎÝ d‘¿À"»¦‚Â)2°È›¯47Yä/°È®© pn,òæë Ï €Eþ‹ìš ç3‹ü Yäåï…s`‘ýZt>7Yä/°È®© pn,òæë Ï €Eþ‹ìš ç3‹ügÈ"/ÿ^P×þú¸ö7hÿìÚžµ?Cyù{hθO¡9‹¼i=´l6øXd×”5ï®)kã¹ÁŸ!‹¼ü=k>¸OYón°i=kÙ¦èO`‘]SÖ|6pMY»ÁŸ!‹¼ü=k~nà>eÍgƒMëY˺ÁŸÀ"»¦¬ù¹Áÿ§ì\’Éu$º•¶^AÅW¥y}Ôû7køe’ð³ò©_§`EBç…kÊÚx6ø†,òò÷¬y7pŸ²æ7E›Ö³– ¾À"»¦¬y7pMYoо!‹¼ü=k~6pŸ²æÝ`ÓZÖBù ,²k•5`‘]«¬Í,ò7d‘—¿e Xd÷UÖ€EÞ´žµ°OüWý“>EvM¡ùMѦõв³ÁXd×TPŸ"»¦‚Ž7EßE^þ^P?¸OYó¹Á¦õ¬e7E_`‘]SÖülàš²6N‘¿!‹¼ü=k~Sä>eÍϛֳ–M‘¿À"»¦¬ùM‘kÊÚx6ø†,òò÷¬ùÜÀ}ÊšßmZÏZv6ø‹ìš²æs×”µñ¦è²ÈËß²,²û*kÀ"oZËZÈ"Ev­²,²k•µ™Eþ†,òò÷¬A7Ù×*´ùl²È_`‘]SÖ À{‘7_/hx6ù ïEvM{ ºÁü^äoø^äåï…³°È¾V»Aø^ä/°È®© p6yóõ‚†ÝÀãú"ÓtÓ”µ¹„,òXdל €EÞ|=ka7ù ,²kz àl0³ÈßE^þö‹ì¾ XäMkY Yä/°È®UAEv­öÚÌ"Cyù{Ö ‹ìkÚÜ Bù ,²kÊt`‘7_/hØ €Eþ‹ìšötƒ™Eþ†,òò÷‚B7Ùת s7ß‹üÙ5º°È›¯4ìÀ"MShÐ €EÞ|=´ð¦Xä/°È®i¯ÁÙ`f‘¿!‹¼ü}¯ÁM°È¾V{m>„,òXdת À"»V¡Í,ò7d‘—¿e͸c…æ,²k mü…é7d‘—¿‡ÝÀ¸ãÚkÀ"oZ{ Â÷"EvMYƒn,òæë¡…ÝXä¯i æÀ"o¾ZxS,òXd×TP˜Ì,ò7d‘—¿ï5¸)Ù×ê1˜ç?,ðÿ…éXd×TPèÀ"o¾^аc\ÇÓœ LSÖæ¹AÈ"EvM¡ÁM°È›¯e-d‘¿À"»V¡‹ìZemf‘¿!‹¼üí1Ù}õ„‹¼i=káÜXä/°È®)4˜ü®õй°È_`‘]Sh0EžYäoÈ"//(Ì €EöµÚkó9d‘¿À"»¦ÇæÀ"o¾^ÐpŠ ,òXd×TP˜Ì,ò7d‘—¿¦ÈÀ"ûZt¾) Yä/°È®© Ð €EÞ|½ áM°È_`‘]SAá¦hf‘¿!‹¼ü­ À"»¯ByÓZÖBù ,²kUP`‘]«½6³ÈßE^þž58‹ìkÚ|S²È_`‘]SÖàl,òæë ÏÀ"EvM{ nŠfù²ÈËß 7EÀ"ûZt¾) Yä/°È®© pS,òæë oŠ€Eþ‹ìš ¿)šYäoÈ"//(L‘Eöµ*è|6Yä/°È®© p6y󵂆,òXd×*4`‘]«¬Í,ò7d‘—¿Ô¸c…7Eð^äÍ׳ž €EþÂ{‘]«ÇXäMë¡…g`‘¿À"»¦Ðàlð»ÖC »°È_`‘]ShÐ fù²ÈËß÷tx/²¯Õc0wƒEþÂ{‘]ÓcÝÞ‹¼ùzAÃnïEþ‹ìš Ý`f‘¿!‹¼ü½ Ð €Eöµ*èÜ Bù ,²k*(t`‘7_+hÈ"Ev­BÙµÊÚÌ"Cyù[AEv_í5`‘7­g-ìÀ"EvM¡ÁMÑÌ"Cyù{Ö€7Ùת ó/LCù ,²kÚk07yóõ‚†s`‘¿À"»¦‚ÂÜ`f‘¿!‹¼ü½ 07Ùת óÜ d‘¿À"»¦‚ÂÜXäÍ× Î €Eþ‹ìš Sä™Eþ†,òò÷‚ÂXd_«‚ÎSäEþ‹ìZXd×*´™Eþ†,òò·¬‹ì¾*(°È›ÖöZÈ"EvMYëßü ºÁïZ-<‹üÙ5…gƒ™Eþ†,òò÷‚ÂÜXd_«½6Ï Bù ,²k*(Ì €EÞ|½ áÜXä/°È®© 07˜YäoÈ"//(Ì €Eöµ*è<7Yä/°È®© 07yóõ‚†s`‘¿À"»¦‚ÂÜ`d‘?d,ò/ÿVPÐþíÐþݵ-kõ'Ýèüç_,üò÷ÐŒEŸB3y×zhÑÙ >ª£ÿš²fÝ4emšÔŸ¢nðËß³fgð)kÖ v­g-º)ªêßüÊšuКÝíZ-:ÔGõoy…f7E )4;ìZ-êõQý]¡ÙÙ4…fÝ`×zhÑMQ}TÿæWhÖ @ShvS´k=´èlPÕ¿åšÝ¦Ðìl°k=´¨ÔGõot…fgКuƒ]k¡e,òçg‘A«ï5g‘A«ïµ‘E®?…ÝÀxâÊš³È UÖœEÞµžµ°8‹\oSdК v­‡vg‘ëã¡8‹ >tº)ª?…ÝÀxbºiÊtƒßµžµ°8‹\ÿ$tg‘Á§¬MsƒúSØ Œ'VÖ ˜¦¬A7ø]ëY »³ÈõOB7p|ÊÚt6¨?…ÝÀxbe ºiÊtƒßµžµ°8‹\ÿ$tg‘Á§¬M7EŸ?2ù—¿ý§¤³È૬9‹¼k-k‹\Õÿû¾ êïEM¡ÁÙ`d‘ËvcŒtg‘ÁWYäúSØ œEþõ¿¹Ú»³È )´¹dïE®‚³³ÈàSA¡Œ,rÙÃnàïEþõ=kvS>emî‹\g/2ø”5èã{‘Ëvg‘}FÏšÍ À§¬ÍÝ c‘ë£àl`š»)M¡MSäúSØ œEþõ=k6EŸB›»AÆ"þ0ž¸¾×œE­öš³È»ÖºAÆ"×GA70­ ê,2h•µ‘E®?…ÝÀce º³ÈàShóMQÆ"×Gõs€Bƒ³³ÈàShs7øaƒ«?g‘ëãál`šötƒ‘E.{Ø ü½È¿>£=¡Î"ƒOY›»AÆ"×GA7ð÷"ƒOYƒn0¾¹ìa7pù×gô¬A7py_Û¿<³³Èõñp60MYƒ³ÁÈ"—=ìÆë …³³ÈàÓ^›»AÆ"þp´úÊu´ md‘ëOáM‘¿ù×g´½æ,2øÚÄ"ןÂnàïEþõ=4˜8‹¼¯mAÆ"×GA7ð÷"ƒ¯g‘w­‡Þ9‹\ÝÀYdð© Ó¹þvg‘}F/(œ œEÞ×ö¬…7EÆ×—‡¿4ºÁÈ"—=ìÎ"ÿúŒž5èÎ"ïk{ÖÂnà,r} æ¦é+ÎÎ"ï¾–µŒEþüá,2hš³È UÖF¹þvã‰ë1p´z œEÞµžµ°8‹\g/2ø”µùlðÃÿî,r}<œ LSÖ`Š<²Èe»1Æ*(tg‘Á§¬ÍÝ c‘ë£`ŠlšèÎ"ï¾¾×Ânà,r}<Ì LSA¡Œ,rÙÃn`Œ± sg‘Á§‚Î7E‹\7E¦© pSä,òîë ÏÎ"×ÇÃÙÀ4¦È#‹üù#c‘ùÛÜÀYdðUhÎ"ïZËZÆ"×GÁM‘iUPg‘A«½6²Èõ§°c\i Φ)´¹d,r}œ LShݧ‚B7ø]ë »³ÈõOB70M¡ÁMÑÈ"—=<c¬‚ÂÙYdð© óMQÆ"×GÁM‘i*h÷)kÐ ~×zAÃnà,rý“Ð LSh𛢑E.{x60ÆX…³³ÈàSAç³AÆ"×GÁÙÀ4ÎÎ"ï¾VÐŒEþüá,2hš³È UÖF¹þž ü½È¿>£CEŸB›oв÷"×GõoùÚkÎ"ƒV³È»Ö N‘E®‡³i ºÁÈ"—=ìÎ"ÿúŒ^ÐþͯРŒ,rÙÃn`Œ± ÝÀYdði¯ÍÝ c‘룠˜¦'º³È»¯ïµ°8‹\ÝÀ4ºÁÈ"—=ìÆ« Ð œEŸ :wƒŒE®‚n`š ÝÀYäÝ× š±ÈŸ?œE­Bs´ÊÚÈ"ןÂn` Φ© p60M¡ÍSäŒE®‚ß™¦Ð 8‹¼ûzAÃnà,r}ºi*(Ì fùYäåßç®ýýqíÐþݵ=kGÈ"/ÍYd÷)4ç 6­‡– `‘]SÖ¼¸¦¬gƒ#d‘—¿gÍ»û”5ï›Ö³–uƒXd×”5?¸¦¬ÝàÈÞ‹\åÝÀ5…æÝÀ5…6ž Ž>ø¿ÿWîò÷‚z7pŸ êÝ`ÓzA³np‹ìš²Ö;„Bó›¢Më¡e7E°È®)4ﮩ ãMÑ‘½¹>ÊoŠ\Sh~SäšBÏGÈ"/ÛkÆWhÀ"»V¡Í,ò²ÈËßCƒn`Üqí5`‘7­íµ>8xBE>€EvM¡ùMѦõв³Á,²k*¨ß¹¦‚Ž7EGÈ"//¨Ÿ ܧ¬ùÜ`ÓzÖ²›¢Xd×”5è¦)ks7YäXdך߹¦ÐÆ›¢ã‡NƒþþW}¼Ÿ \SA¡Ì,ò²ÈËß÷šß¹O¡ùMѦõ½– `‘]SA¡˜¦‚ÎÝ d‘㉫ À"»VYyÓZÖBùٵʚ¿´ÊÚÌ"!‹¼üm¯‹ì>e ºÁÌ"!‹¼ü=48‹ìk•µ¹„,ò,²k*(œ €EÞ|}¯…ÝXäÃ4…ÝÀ4emî!‹|‹ìšBƒn,òæëY ÏÀ"þ^ä Îþ^äÝ×C ÏÀ"À"»¦'ºÁÌ"!‹¼üý õ›"÷)4¿)Ú´–µE>€Ev­öšù*4`‘7­‡–Í `‘]Shý¼ Ðà¦hf‘E^þVP`‘ݧРÌ,ò²ÈËßCƒn,²¯­ïµ™E>Byù{hp6Ù×*´ù¦(d‘`‘]Ó^ƒn`šB›»AÈ"À"»¦Ð ‹¼ùúv`‘/r…ÝXäÍ×C »°È°È®é …n0³ÈGÈ"/  ‹ìkµ×æ³AÈ"À"»V{ Xd×*´™E>Byù[Öü½ÈõOB70M¡¿0=Byù{hþ›"÷Õ^yÓÚc²È°È®© pS,òæë¡…s`‘`‘]SÖà¦hf‘E^þ^PÿM‘ûšÿ¦hÓzÖ²)ò,²k*(t`‘7_-ìÀ"¦)4èÀ"o¾ZØ €E>€EvM…n0³ÈGÈ"/ßkÐ €Eöµú^›»AÈ"À"»VÙµ mf‘E^þ–5`‘ÝWyÓÚ^ûaƒ S`‘`‘]Shp6˜Yä#d‘—¿g ÎÀ"ûZt¾) YäXd×´×à¦È4…6Ÿ BùÙ5…g`‘7_ßka7ùÙ5í5˜"Ï,ò²ÈËß÷Ì €Eöµ*èø›¢#d‘—¿‡s`‘}­B›§È?,pòåSd`‘`‘]Shs7YäÃxâš‹ìZí5`‘7­=!‹|‹ìZ=¡À"»VY›Yä#d‘—¿í5`‘ݧ¬A7˜Yä#d‘—¿‡ÝXd_«¬ÍÝà‡`‘`‘]SÖàl0³ÈGÈ"/Ïœ €EöµÊÚ|S²È°È®é1€³°È›¯?¡áÙXäXd×TP˜"Ï,ò²ÈËß ÝXd_«‚ÎÝ d‘`‘]SAaŠ ,òæk YäXd×*4`‘]«¬Í,ò²ÈËß êïE®nŠü½È»¯g-ü…)°È°È®Õc,ò¦õÐÂß‹|‹ìšBƒ_˜Î,ò²ÈËß sãŽtƒ™E>Byù{hÐ €Eöµz æn²È°È®é …n,òæë{-ìÀ"À"»¦‚B7˜Yä#d‘—¿º°È¾V»AÈ"À"»¦‚B7y󵂆,ò,²k°È®UÖfùYäåoÙ}µ×€EÞ´žµ°‹|‹ìšBƒ³ÁÌ"!‹¼ü=kp6Ùת óÙ d‘`‘]Ó^ƒ›"`‘7_/hø›"`‘`‘]SAan0³ÈGÈ"//(ðÀ"ûZtþ…iö^äú(ø…)°ÈîSÖ Ì,ò²ÈËß³ÝXd_«¬ÍÝ d‘`‘]ÓcÝÀ4…6ß…,ò,²k°È®Uh3‹|„,òò·‚‹ì¾ÚkÀ"oZûòYäXd×”5 Ï€EÞ|=´ðl,ò,²kÊœ fùYäåï…³°È¾V{mž„,ò,²k*(Ì €EÞ|½ áÜXäXd×TP˜Ì,ò²ÈËß s`‘}­ :Ï BùÙ5´we ¦È¿k½ !o,ò,²k ~a:³ÈgÈ"/ÿ^P×þþ¸öhÿîÚžµ3d‘—¿‡æô™ûšÿÂtÓzhÙÙàÙ5eÍ»kÊÚÈ"Ÿ!‹¼ü=k~6pŸ²æÝ`ÓzÖ²ßÀ"»¦¬ùÙÀ5emìgÈ"/Ïšß¹OYó³Á¦õ¬eÝà„÷"»¦¬ùM‘kÊÚx68øàÿ>Zþž5ïîSÖül°i=kÙoŠN`‘]SÖ¼¸¦¬gƒ3d‘—¿gÍSä>eÍ»Á¦µ¬…,ò ïEv­²,²k•µ™E>Cyù[Öà½È‹¼i=ka7ùÙ5…æ7E›ÖCËÎ'°È®© þ S×TÐñ¦è Yäåïõ³û”5ŸlZÏZvSt‹ìš²æg×”µqnp†,òò÷¬ùM‘û”5?lZÏZ678á½È®)kþ S×”µñlp†,òò÷¬ùM‘û”5?lZÏZv68EvMYó›"×”µñ¦è YäåoYÙ}•5`‘7­e-d‘O`‘]«¬‹ìZemf‘ÏE^þž5ç ܧ¬A7˜Yä3d‘—¿‡g`‘}­²6wƒE>EvM…³°È›¯ïµ°‹|‹ìš gƒ™E>Cyù{A¡‹ìkUÐùl¾ùÙ5º°È›¯4<‹|‹ìš Ý`f‘ÏE^þ^P8w¬Ðàl0¿ù Yäåo¡Á{‘ÝW¡‹¼i­ á{‘O`‘]«½,²kõÌ,ò²ÈËß³ÝÞ‹ìkÚ|S²È'¼Ù5e Φ)´¹„,ò ïEvM¡A7€÷"o¾¾×Ân,òišBƒ³°È›¯‡Þ‹|Â{‘]Ó gƒù½Ègø^äåïÜ‹ìkµ×æ³Á \b‹|‹ìš²Ý`f‘ÏE^þž5èÀ"ûZem>„,ò ,²kõ‹ìZ…6³ÈgÈ"/˰Èî«‚‹¼ií YäÞ‹ìš²s`‘7_-¼)ù„÷"»¦¬ÁÜàw­‡Î €E>EvM¡ÁMÑÌ"Ÿ!‹¼ü}¯ÁÜÀ¸c…gƒßµžµ°‹|Â{‘]ShÐ æ÷"Ÿá{‘—¿g º°È¾V_s7øaƒn,ò ,²kÊtƒ™E>Cyù{Ö ‹ìk•µ¹„,ò ,²kõ½,²kÚÌ"Ÿ!‹¼ü-kÀ"»¯ ,ò¦µ'4d‘O`‘]SÖ ‹¼ùzha7€÷"Ÿð^d×”5è3‹|†,òò÷‚ÂÜXd_«½6O‘CùÙ5ÎÀ"o¾^а‹|‹ìš Ý`f‘ÏE^þ^PèÀ"ûZtî!‹|Â{‘]SAaŠ ïEÞ|½ áÜÞ‹|‹ìš 7E3‹|†,òò·‚‹ì¾ XäMkY YäXdת À"»V{mf‘ÏE^þž5¸)‚÷"ûZ…6ß…,ò ïEvMYƒ›"x/òæë ÏÀ"ŸÀ"»¦½gƒ™E>Cyù{Aál,²¯UAç)rÈ"ŸÀ"»¦‚ÂoŠ€EÞ|½ áXäXd×TPøMÑÌ"Ÿ!‹¼ü½ 0EÙת óoŠBùÙ5¦ÈÀ"o¾VÐE>Ev­BÙµÊÚÌ"Ÿ!‹¼ü­ À"»¯ö°È›Ö³þ¦XäXd×L‘×zháÙXäXdל fù Yäåï…³°È¾V{m>„,ò ïEvMœ LShs7YäXd×t`‘7_ßka7ùÙ5í5è3‹|†,òò÷½ÝXd_«‚ÎÝ d‘O`‘]SA¡‹¼ùZACùÙµ Xd×*k3‹|†,òò·‚‹ì¾ÚkÀ"oZÏZØ €E>EvM¡A7˜Yä3d‘—¿g ~S,²¯UAç)rÈ"ŸÀ"»¦½Sd`‘7_/h8EùÙ5æ3‹|†,òò÷‚ÂoŠ€Eöµ*èü›¢E>EvM…ß‹¼ùzAÃßÁ{‘Ox/²k*(Ì fù Yäåï…¹°È¾Vç!‹|‹ìZXd×*´™E>Cyù[Ö€Ev_XäMk{-d‘O`‘]SÖ`n,òæë¡…g`‘O`‘]SÖàl0³ÈgÈ"//(œ €EöµÚkóÙ d‘O`‘]SAál,òæë çÀ"ŸÀ"»¦‚ÂÜ`f‘ÏE^þ^P˜‹ìkUÐyn²È'°È®© 07yóõ‚†s`‘O`‘]SAan0³ÈWÈ"/ÿ^P×þþ¸öhÿîÚžµ+d‘—¿‡æ,²ûš³È›ÖCËΰȮ)kÞ \SÖÆ¹Á²ÈËß³æg÷)kÞ 6­g-›\À"»¦¬ùÙÀ5emìWÈ"/ÏšÏ Ü§¬ùÙ`ÓzÖ²np‹ìš²æ7E®)kãÙà YäåïYónà>eÍoŠ6­g-;\À"»¦¬y7pMYoŠ®E^þž5?¸OYón°i-k!‹|‹ìZe Xd×*k3‹|…,òò·¬‹ì¾Ê°È›Ö³v`‘/`‘]Sh~S´i=´ìlp‹ìš êSd×TÐñ¦è Yäåïõ³û”5Ÿ"oZÏZvSt‹ìš²æg×”µqnp…,òò÷¬ùM‘û”5?lZÏZ67¸€EvMYó›"×”µñlp…,òò÷¬ùÜÀ}ÊšßmZÏZv6¸€EvMYó¹kÊÚxSt…,òò·¬‹ì¾Ê°È›Ö²²È°È®UÖ€Ev­²6³ÈWÈ"/Ïšÿ¦È}Êtƒ™E¾Byù{hp6Ù×*ks7Yä Xd×TP8‹¼ùú^ »°È°È®© p6˜Yä+d‘—¿º°È¾VÏ!‹|‹ìš ÝXäÍ× ž €E¾€EvM…n0³ÈWÈ"//(œ €Eöµ*èÜ Bù‚÷"»V…÷"»V¡ýîk Yä Xdך¿ßÀ5…6¾ ó Yäåo…÷"»¯ö¼yÓzÖ³°È—iÊœ €EÞ|=´ð¦XäË4…ÝXäÍ×C »°È°È®© Ð æ÷"_á{‘—¿ï5èð^d_«Ç`î!‹|Á{‘]SA¡À{‘7_/hØ €E¾€EvM…n0³ÈWÈ"//(t`‘}­ :wƒE¾€Ev­ ,²kÚÌ"_!‹¼ü-kÀ"»¯ ,ò¦µ½²È°È®)k07yóõÐÂn,ò,²kÊÌ fùúaÿ;ºü½ pSdܱBƒ›¢™E¾Byù{h07Ù×ê1˜oŠ~Xà$ký›ÿ¯úxèð^d÷)´¹„,òïEvMtx/òæëAØ €E¾€EvM{ ºÁÌ"_!‹¼ü}¯A7Ùת s7Yä Xdת À"»V¡Í,ò²ÈËß²,²ûª À"oZÛk!‹|‹ìš²ÝXäÍ×C »°È°È®)kÐ fù Yäåï…n,²¯Õ^›§È!‹|‹ìš s`‘7_/h8EùÙ5æ3‹|…,òò÷‚ÂXd_«‚ÎsƒE¾€EvM…)2°È›¯4œ‹|‹ìš Sä™E¾Byù[AEv_…,ò¦µ¬…,ò,²kUP`‘]«½6³ÈWÈ"/ÏÌ €Eöµ mþMQÈ"_À"»¦¬ÁM°È›¯4¼)ùÙ5í58Ì,ò²ÈËß g`‘}­ :Ÿ BùÙ5~S,òæë §ÈÀ"_À"»¦‚ÂoŠfù Yäåï…)2°È¾VS²È°È®© 0Ey󵂆,ò,²k°È®UÖfù YäåoÙ}µ×€EÞ´žµð7EÀ"_À"»¦Ð`Š<³È× \,‹¼>ã÷Lª Ð €EÞ|=ka70ƸîeÍ»Á¦õ¬e7E7°È®)k~6pMY»Á²ÈËß³æs÷)k~6Ø´žµ¬ÜÀ"»¦¬ùM‘kÊÚx6¸Cyù{Ö¼¸OYó›¢MëYËÎ7°È®)kÞ \SÖÆ›¢;d‘—¿gÍÏîSÖ¼lZËZÈ"ßÀ"»VYÙµÊÚÌ"ß!‹¼ü-kÀ"»¯²,ò¦õ¬…ÝXäXdךßmZ-;ÜÀ"»¦‚úÜÀ5t¼)ºCyù{Aýlà>eͧțֳ–ÝÝÀ"»¦¬ùÙÀ5emœ"ß!‹¼ü=k~Sä>eÍϛֳ–Í n`‘]SÖü¦È5em<Ü!‹¼ü=k>7pŸ²æ7E›Ö³– n`‘]SÖ|nàš²6ÞÝ!‹¼ü-kÀ"»¯²,ò¦µ¬…,ò ,²k•5`‘]«¬Í,ò²ÈËß³æ¿)rŸ²Ý`f‘ïE^þœ €EöµÊÚÜ BùÙ5ÎÀ"o¾¾×Ân,ò ,²k*(œ fùYäåï…n,²¯UAç³AÈ"ßÀ"»¦‚B7yóõ‚†g`‘o`‘]SA¡Ì,ò²ÈËß g`‘}­ :wƒE¾Ev­ ,²kÚÌ"ß!‹¼ü-kÆ+4g‘]Sh#‹|‡,òò÷РÀ{‘}­B›oŠÂ÷"ßÀ"»¦¬ÁÙXäÍמÐð½È7°È®)4èÀ"o¾ZØ €E¾Ev­¾<€EÞ´ZxSïE¾á½È®)48Ì,ò²ÈË߸)Ù×ê1˜Ïá{‘o`‘]Ó^ƒ›"`‘7_/hx60Æø¯ º°ÈîSÖæn²È7°È®UÖ€Ev­B›Yä;d‘—¿í5`‘ÝW°È›Ö ²È7°È®)k07yóõЛ"`‘o`‘]SÖ`n0³ÈwÈ"//(Ü‹ìkµ×æ¹AÈ"߯×jš 7Eð^äÍ× vx/ò ,²k*(tƒ™E¾Cyù{A¡‹ìkUй„ïE¾EvM…n,òæë »1ÆÚkÐ €EvŸ²6wƒE¾Ev­²,²kÚÌ"ß!‹¼üm¯‹ì¾z €EÞ´VÐE¾EvMYƒn,òæë¡…ÝXäXd×”5è3‹|‡,òò÷‚B7Ù×j¯ÍÝ d‘o`‘]SA¡‹¼ùzAÃn,ò ,²k*(tƒ™E¾Cyù{A¡‹ìkUй„,ò ,²k*(t`‘7_/hØ €E¾EvM…)òÌ"ß!‹¼ü­ À"»¯ByÓZÖBùÙµ*(°È®Õ^›Yä;d‘—¿g nŠ€Eöµ m¾) YäXd×”5¸)yóõ‚†¿)ùÙ5í5˜"Ï,ò²ÈËß ¿)Ùת ó9d‘o`‘]SAá7EÀ"o¾^ÐpŠ ,ò ,²k*(ü¦hf‘ïE^þ^P˜"‹ìkUÐù7E!‹|‹ìš Sd`‘7_+hÈ"ßÀ"»V¡‹ìZemf‘ïE^þVP`‘ÝW{ XäMëY S,ò ,²k ¦È3‹|‡,òò÷¬ÁXd_«‚ÎSäð½È7°È®i¯ÁÜXäÍ× Î €E¾EvM…)òü^ä;|/òò÷‚ÂXd_«‚ÎSäø¿sï7°È®© 0Eyóõ‚†SdcŒë:Æ4…gÓ”µ¹„,ò ,²k º°È›¯e-d‘o`‘]«Ð€Ev­²6³ÈwÈ"/{ €Ev_=¡À"oZÏZØ €E¾EvM¡A7˜Yä;d‘—¿g º°È¾V»AÈ"ßÀ"»¦½ÝXäÍ× v`‘o`‘]SA¡Ì,ò²ÈËß ÝXd_«‚ÎÝ d‘o`‘]SA¡‹¼ùzAÃn,ò ,²k*(ü¦hf‘ïE^þ^P˜‹ìkUÐyn²È7°È®UAEv­B›Yä;d‘—¿e Xd÷UAEÞ´¶×BùÙ5e æÀ"o¾Z87ùÙ5e æ3‹|‡,òò÷‚ÂÜXd_«½6Ï BùÙ5æÀ"o¾^Ðpn,ò ,²k*(Ì fùYäåï…¹°È¾Vç!‹|‹ìš g`‘7_/h87ùÙ5æ3‹ü„,òòïuíïkÿ€öï®íY{Byù{hÎ"»O¡9‹¼i=´ìlð‹ìš²æÝÀ5emœ7pMYÏOÈ"/Ïšw÷)k>7Ø´žµìlð‹ìš²æÝÀ5em¼)zByù{Öülà>eÍ»Á¦µ¬…,ò,²k•5`‘]«¬Í,ò²ÈËß²,²û*kÀ"oZÏZØ €E~€EvM¡ùMѦõв³Á,²k*¨O‘]SAÇ›¢'d‘—¿ÔÏîSÖ|мi=kÙMÑ,²kÊšŸ \SÖÆ)ò²ÈËß³æ7EîSÖül°i=kÙùÙ5eÍoŠ\SÖÆ³Á²ÈËß³æSd÷)k~S´i=kÙÙàÙ5eÍç®)kãMѲÈËß²,²û*kÀ"oZËZÈ"?À"»VYÙµÊÚÌ"?!‹¼ü=kþ›"÷)kÐ fù Yäåï¡ÁÙXd_«¬ÍÝ d‘`‘]SAál,òæë{-ìÀ"?À"»¦‚ÂÙ`f‘ŸE^þ^PèÀ"ûZt>„,ò,²k*(t`‘7_/hx6ùÙ5ºÁÌ"?!‹¼ü½ p6Ùת s7YäXdת À"»V¡Í,ò²ÈËß²,²ûª æSh#‹ü„,òò÷Р‹ìkÚ|S²È°È®© p6yóµ'4d‘`‘]ShÐ €EÞ|=´°‹ü‹ìšötƒù½ÈOø^äåï{ º¼Ù×j¯ÍÝ d‘x/²k*(tx/òæë »°È¼Ù5ºÁü^ä'|/òò÷‚B7Ùת s7YäXdת À"»V¡Í,ò²ÈËß²,²ûª À"oZÛk!‹ü‹ìš²s`‘7_-¼)ùÙ5e æ3‹ü„,òò÷‚ÂM°È¾V{mž„,ò,²k*(Ü‹¼ùzAù°È°È®© pS4³ÈOÈ"//(Ì €Eöµ*è|S²È°È®© 07yóõ‚†7EÀ"?À"»¦‚ÂÜ`f‘ŸE^þVPãŽ+kÀ"»VYä'd‘—¿‡SdãŽ+kÀ"oZ+hÈ"?À"»¦¬A7yóõÐÂn,ò,²kÊtƒ™E~Byù{A¡‹ìkµ×æn²È°È®© Ð €EÞ|½ a7ùÙ5ºÁÌ"?!‹¼ü½ Ð €Eöµ*èÜ BùÙ5º°È›¯4ìÀ"?À"»¦‚B7˜Yä'd‘—¿Xd÷UhÀ"oZËZÈ"?À"»VÙµÚk3‹ü„,òò÷¬ÁM°È¾V¡Í7E!‹ü‹ìš²7EÀ"o¾^Ðð7EÀ"?À"»¦½Sä™E~Byù{Aá7EÀ"ûZtž"‡,ò,²k*(ü¦XäÍ× N‘E~€EvM…ßÍ,ò²ÈËß Sd`‘}­ :ÿ¦(d‘`‘]SAaŠ ,òæk YäXd×*4`‘]«¬Í,ò²ÈËß ,²ûj¯‹¼i=káoŠ€E~€EvM¡Áyf‘ŸE^þž5˜"‹ìkUÐyŠ²È°È®i¯ÁÜXäÍ× Î €E~€EvM…¹ÁÌ"?!‹¼ü½ 07Ùת óÜ d‘`‘]SAan,òæë çÀ"?À"»¦‚ÂÜ`f‘ŸE^þ^P˜‹ìkUÐyn²È°È®UAEv­B›Yä'd‘—¿e Xd÷UAEÞ´¶×~XàÿŽä?À"»¦¬ÁM°È›¯‡ÞcüW…ÝXd÷© s7YäXd×”5èÀ"o¾žµ°‹ü‹ìšötƒ™E~ByùûcÝXd_«‚ÎÝ d‘`‘]SA¡‹¼ùzAÃn,ò,²k*(tƒ™E~Byù{A¡‹ìkUй„,ò,²kUP`‘]«Ðfù YäåoYÙ}UP`‘7­íµE~€EvMYƒn,òæë¡…ÝXäXd×”5˜Ì,ò²ÈËß s`‘}­öÚ<7YäXd×TP˜‹¼ùzAù°È°È®© 07˜Yä'd‘—¿æÀ"ûZtž„,ò,²k*(Ì €EÞ|½ áÜXäXd×TP˜Ì,ò²È˿Ե¿?®ýÚ¿»¶gí Yäåï¡ùÙ} ÍYäMë¡e7E/°È®)kÞ \SÖÆ¹Á²ÈËß³æg÷)kÞ 6­g-›¼À"»¦¬ùÙÀ5emìoÈ"/ÏšÏ Ü§¬ùÙ`ÓzÖ²nð‹ìš²æs×”µñlð†,òò÷¬y7pŸ²æsƒMëYËÎ/°È®)kÞ \SÖÆ¹Á²ÈËß³æg÷)kÞ 6­e-d‘_`‘]«¬‹ìZemf‘ßE^þ–5`‘ÝWYyÓzÖÂn,ò ,²k Íç›ÖCËÎ/°È®© >EvMoŠÞE^þ^P?¸OYó)ò¦õ¬e7E/°È®)k~6pMY§ÈoÈ"/Ïšß¹OYó³Á¦õ¬eSäXd×”5¿)rMYÏoÈ"/ÏšO‘ݧ¬ùMѦõ¬egƒXd×”5Ÿ"»¦¬7EoÈ"/˰È‹¼i-k!‹ü‹ìZe Xd×*k3‹ü†,òò÷¬ùoŠÜ§¬A7˜Yä7d‘—¿‡g`‘}­²6wƒE~EvM…³°È›¯ïµ°‹ü‹ìš gƒ™E~Cyù{A¡‹ìkUÐùl²È/°È®© Ð €EÞ|½ áÙXäXd×TPè3‹ü†,òò÷‚ÂÙXd_«‚ÎÝ d‘_`‘]«‚‹ìZ…6³ÈoÈ"/˰Èî«‚‹¼im¯…,òkŒñ_õOB7Ù}ÊÚ|S²È/°È®© p6yóõ¬…7EÀ"¿¦)4èÀ"o¾ZØ €E~EvM{ ºÁÌ"¿!‹¼üý1€n,²¯Õ^›»AÈ"¿À"»¦‚B7yóõ‚†ÝXäXd×TPè3‹ü†,òò÷‚B7Ùת s7YäXdת À"»V¡Í,ò²ÈËß²,²ûª À"oZÛk!‹ü‹ìš²s`‘7_-¼)ùÙ5e æ3‹ü†,òò÷‚ÂM°È¾V{mž„,ò ,²k*(Ü‹¼ùzAù°È/°È®© pS4³ÈoÈ"//(Ì €Eöµ*è|S²È/°È®© 07yóõ‚†7EÀ"¿À"»¦‚ÂÜ`f‘ßE^þVP`‘ÝW¡™¯ :³ÈoÈ"/ ¦ÈÀ"ûZ…6þÿ½!‹¼ü=48‹ìkÚ|6øaÿû__`‘]«ÇÀ|*(tƒ™E~Cyù{Ö ‹ìk•µ¹„,ò ,²kÊt`‘7_ûòøa“‚öoô:‡‹ìš Ý`f‘ßE^þ^PèÀ"ûZtî!‹ü‹ìš ÝXäÍ× v`‘_`‘]SA¡Ì,ò²ÈËß ,²û*4`‘7­e-d‘_`‘]«‚‹ìZíµ™E~Cyù{Ö ‹ìkÚÜ BùÙ5e nŠ€EÞ|½ áM°È/°È®i¯Áyf‘ßE^þ^PøM°È¾V§È!‹ü‹ìš ¿)yóõ‚†Sd`‘_`‘]SAá7E3‹ü†,òò÷‚ÂXd_«‚ο) YäXd×TP˜"‹¼ùZACùÙµ Xd×*k3‹ü†,òò·‚‹ì¾ÚkÀ"oZÏZø›"`‘_`‘]Sh0EžYä7d‘—¿g ¦ÈÀ"ûZtž"‡,ò ,²kÚk07yóõ‚†s`‘_`‘]SAan0³ÈoÈ"//(Ì €Eöµ*è<7YäXd×TP˜‹¼ùzAù°È/°È®© 07˜Yä7d‘—¿æÀ"ûZtž„,ò ,²kUP`‘]«Ðfù YäåoYÙ}UP`‘7­íµE~EvMYƒ¹°È›¯‡Î €E~EvMYƒ›¢™E~Cyù{Aá¦Xd_«½6ßý°ÀÁu °È/°È®)kÐ fù YäåïYƒn,²¯UÖæn²È/°È®é1€n,òæëAØ €E~EvM…n0³ÈoÈ"//(t`‘}­ :wƒE~Ev­ ,²kÚÌ"¿!‹¼ü-kÀ"»¯ ,ò¦µ½²È/°È®)kÐ €EÞ|=´°‹ü‹ìš²Ý`f‘ßE^þ^PèÀ"ûZíµ¹„,ò ,²k*(Ì €EÞ|½ áXäXd×TP˜Ì,ò²ÈËß s`‘}­ :Ï BùÙ5æÀ"o¾^Ðpn,ò ,²k*(Ì fù²È˿Ե¿?®ýÚ¿»¶gí²ÈËßCó)²ûš³È›ÖCËnŠ>À"»¦¬y7pMYçŸE^þž5¿)rŸ²æÝ`ÓzÖ²¹ÁXd×”5¿)rMY»Á'd‘—¿gÍçîSÖül°i=kY7ø‹ìš²æs×”µñlð YäåïYónà>eÍç›Ö³– >À"»¦¬y7pMYçŸE^þž5?¸OYón°i-k!‹üٵʰȮUÖfù²ÈËß²,²û*kÀ"oZÏZØ €Eþ‹ìšBó¹Á¦õв³ÁXd×TPŸ"»¦‚ŽsƒOÈ"//¨Ÿ ܧ¬ùyÓzÖ²¹ÁXd×”5?¸¦¬SäOÈ"/Ïšß¹OYó³Á¦õ¬eSä°È®)k~Säš²6ž >!‹¼ü=k>EvŸ²æ7E›Ö³– >À"»¦¬ùÙ5em¼)ú„,òò·¬‹ì¾Ê°È›Ö²²È`‘]«¬‹ìZemf‘?!‹¼ü=kþ›"÷)kÐ fù²ÈËßCƒ³°È¾VY›»AÈ"€EvM…³°È›¯ïµ°‹üÙ5Î3‹ü Yäåï…n,²¯UAç³AÈ"€EvM…n,òæë ÏÀ"€EvM…n0³ÈŸE^þ^P8‹ìkUй„,òXdת À"»V¡Í,ò'd‘—¿e Xd÷UAEÞ´¶×Bù,²kÊÜ™¦¬Í7E!‹üÙ5…g`‘7_ÏZxS,òXd×TP8ü®õÐÂn,òXd×tƒ™Eþ„,òò÷Ǻ°È¾V{mî!‹üÙ5í5èÀ"o¾^а‹üÙ5ºÁÌ"Byù{A¡‹ìkUй„,òXdת À"»V¡Í,ò'd‘—¿e Xd÷UAEÞ´¶×Bù,²kÊt`‘7_-¼)ù,²kÊÌ fù²ÈËß 7EÀ"ûZíµyn²È`‘]SAá¦XäÍ× Î €Eþ‹ìš 7E3‹ü Yäåï…¹°È¾VoŠBù,²k*(Ì €EÞ|½ áM°È`‘]SAan0³ÈŸE^þVP`‘ÝW¡‹¼i-k!‹ü1Æø¯ú'aŠ ,²ûj¯Í,ò'd‘—¿g nŠ€Eöµ m>„,òXd×ê1Ù5…6ß…,r½ãûÿçÿzÖ ‹ìkÚÜ B¹^8 ¡ÁXd_«Ðæ¹AÈ"×!48˜OO(tƒ™E®×hÕ?õß—»ü½ Ð €EöµÊÚÜ B¹ÞYƒ¹°È¾V¡ÍSä8ÉZÿF×÷œ LSA¡Ì,rý?`g5ž¸BÙµ XäMkÝ d‘ëÿªÕ jZ}¯‹ìZtf‘ëÿ0ÌZÿæWÖ ‹ì>…6wƒE®ÿ+ÈÌ €Eöµ mî?,pð‹\ÿÏ+-\æÀ"o¾¾×›"cŒUPèÀ"»OY›»AÈ"“ …n,²¯UhóMÑ œ´ó+kÐ LÓ—ü¦hf‘ëWõá ÝÀ¸cí58˜¦¬ÍÝ d‘ëg¢PPèÀ"ûZ…6ß…,rýfÉC3­²,²kÚÌ"×ð;+¨ñĵ׀Ev­ö°È›Ö¾<~Xàà1¹¦9þ½fšBƒ)òÌ"×µ`˜5èÆ« 070M»AÈ"×9öt`‘}­B›Ï?,pRP8‹\ÿqÖþ'¨ 07˜YäzzÂB70îXí>…gƒ™E.tcŒÌ €EÞ|ý »°È`‘]SÖ`n0³ÈŸE^þv¢2îXYƒß™¦Ç`î!‹üÙµ Xd×*´™Eþ„,òò·¬‹ì¾*(°È›ÖöZÈ"€EvMYƒ¹°È›¯‡v`‘?À"»¦¬ÁÜ`f‘?!‹¼ü½ Ð €EöµÚks7Yä°È®© Ð €EÞ|½ a70Ƹþ£È4…ÝÀ4em>„,òXd×t`‘7_ÏZØ €Eþ‹ìšè3‹ü Yäåïœ €Eöµ*èÜ Bù,²kUP`‘]«Ðfù²ÈËß²,²ûª À"oZÛk!‹üÙ5e º°È›¯‡v`‘?À"»¦¬A7˜YäOÈ"//(t`‘}­öÚÜ Bù,²k*(t`‘7_/hØ €Eþ‹ìš gƒ™Eþ„,òò÷‚ÂM°È¾Vç!‹üÙ5nŠ€EÞ|½ áXä°È®© 07˜Yä?Cyù÷‚ºöwý'¿Qú´wmÏÚŸ!‹¼ü=4Ÿ"»O¡9‹¼i=´lnð'°È®)kÞ \SÖÆ¹ÁŸ!‹¼ü=k>7pŸ²æÝ`ÓzÖ²_˜þ ,²kÊšÏ \SÖÆnðgÈ"/ÏšÏ Ü§¬ùMѦõ¬eÝàO`‘]SÖülàš²6ž þ YäåïYónà>eÍç›Ö³– þÙ5eÍ»kÊÚÿSv6»v$Ç~aÀb÷ÙT–Vó/¼òÐJØ ¿¾3nq€[_;Mœèf*³ú$«ò|ìqn°Byû{Ö|oà>eÍ»Á¡µ¬…,òٵʰȮUÖfy…,òö·¬‹ì¾Ê°È‡Ö³v`‘°È®)4ŸZ-Û,`‘]SA}nàš :Î VÈ"o/¨ï ܧ¬uŸB›»Á üûç Xd×”5߸¦ÐÆ)ò YäíïYó)²û”5ßZ_kÙÜ`‹ìš²æ'E®)kãÞ`…,òö÷¬ùoŠÜ§¬ùIÑ¡õ¬e{ƒ,²kÊšÏ \SÖÆ“¢²ÈÛß²,²û*kÀ"ZËZÈ"/`‘]«¬‹ìZemf‘WÈ"oÏšO‘ݧ¬A7˜Yä²ÈÛßCƒ½°È~­²6wƒE^À"»¦‚ÂÞXäÃ××Zö›¢,²k º°È‡¯‡î Œ1þ¾Â€n,²ûTÐyo²È Xd×”5èÀ"¾žµpo,òÙ5=¡Ð fy…,òö÷'öÀ"ûµ*èÜ By‹ìZXd×*´™E^!‹¼ý-kÀ"»¯ ,ò¡µµ²È Xd×”58)ùðõн°ÈË4…{`‘_-<)y‹ìš {ƒ™E^o,p°7yßãýúSÖ ‹|øzÖÂn`ŒquÓœ™¦'tî!‹¼€EvM¡A7ùðõ¬…ÝXä,²kZkÐ fy…,òö÷ï5èÀ"ûµ*èÜ By‹ìZXd×*´™E^!‹¼ý-kÀ"»¯ ,ò¡µµ²È Xd×”5èÀ"¾ZØ €E^À"»¦¬ÁÜ`f‘WÈ"o/(œ‹ì×j­Í'E!‹¼€EvM…n,òáë »°È Xd×TP8)šYä²ÈÛß s`‘ýZt>) Yä,²k*(Ì €E>|½ áI°È Xd×TP˜Ì,ò YäíoÙ}°È‡Ö²²È Xdת À"»Vkmf‘WÈ"oÏœ‹ì×*´yŠ²È Xd×”5ØÀ{‘_/h¸7y™¦Ðà¤È4emî!‹¼€EvM¡A7€÷"¾žµ°‹¼à½È®é …n0³È+d‘·¿?Ð €EökUй„,òÙ5º¼ùðõ‚†ÝÞ‹¼€EvM…n0³È+d‘·¿Xd÷UhÀ"ZËZÈ"/`‘]«‚‹ìZ­µ™E^!‹¼ý=kÐ €EökÚÜ By‹ìš²ÝÞ‹|øzAÃn,òÙ5­58)šß‹¼Â÷"o/(ü¦Xd¿V§È!‹¼€EvM…“"x/òáë §Èð^ä,²k*(ü¦hf‘WÈ"o/(L‘EökUÐù7E!‹¼€EvM…)2¼ù𵂆,òÙµ Xd×*k3‹¼Byû[AEv_­5`‘­g-üM°È Xd×L‘gy…,òö÷¬ÁXd¿V§È!‹¼€EvMk öð^äÃ× N‘á½È Xd×TPø…éÌ"¯EÞþ^P˜"‹ìת óÜ d‘¼Ù5æÀ"¾^Ðpn,òÙ5æ3‹¼Byû{Aan,²_«‚ÎsƒE^À"»VÙµ mf‘WÈ"o˰Èî«‚‹|hm­…,òÙ5e æÀ"¾Z87y‹ìš²sƒ™E^!‹¼ý½ 07Ù¯ÕZ›OŠBy‹ìš 'EÀ"¾^Ðð¤Xä,²k*(œÍ,ò Yäíï…“"`‘ýZt>)zcƒŸ‹¼€EvMYƒn0³È+d‘·¿g º°È~­²6wƒE^À"»V°È®Uh3‹¼Byû[Ö€Ev_XäCkOhÈ"/`‘]SÖ ‹|øzha7y‹ìš²Ý`f‘WÈ"o/(t`‘ýZ­µ¹„,òÙ5º°È‡¯4ìÀ"/`‘]SA¡Ì,ò Yäíï…n,²_«‚ÎÝ d‘°È®© 07ùðõ‚†s`‘°È®© 07˜Yä'd‘·ÿ,¨k?Ô?8á,²k?¾3kOÈ"oÍYd÷ýXa8‹|h=´ì¤èÙ5eÍ»kÊÚ87xByû{Öü¤È}ÊšwƒCëYËæ°È®)k~Räš²6vƒ'd‘·¿gÍçîSÖü¤èÐzÖ²nð‹ìš²æs×”µñ¤è YäíïYónà>eÍç‡Ö³–=À"»¦¬y7pMYçOÈ"oÏšï ܧ¬y78´–µE~€Ev­²,²k•µ™E~Byû[Ö€Ev_e XäCëY »°È°È®)4ŸZ-Û<À"»¦‚úÙ5tœ|=´pn,ò,²kÊÌ fù Yäíï…¹°È~­ÖÚ<7YäXd×TP˜‹|øzAù°È°È®© 07˜Yä'd‘·¿NŠ€EökUÐù¤(d‘`‘]SAá¤XäÃ× žc\çk¦)4ؘ¦¬ÍÝ d‘`‘]«Ð€Ev­B›Yä'd‘·¿­5`‘ÝW°È‡Ö ²È°È®)kÐ €E>|=´°‹ü‹ìš²Ý`f‘ŸEÞþ^PèÀ"ûµZks7YäXd×TPèÀ"¾^а‹ü‹ìš Ý`f‘ŸEÞþ^PèÀ"ûµ*èÜ BùÙ5º°È‡¯4ìÀ"?À"»¦‚ÂÜ`d‘ëõÅb†÷¿çñÍ´@û´ŸNíÈZ}$>8 ­óÄß»ÇûpZ÷)4c‘O­‡Õ­ú·¼B³¹h ÍNŠN­‡uƒºUÿFWhvRšB³npj=´hnP·êßü ͺh Íæ§ÖC‹NŠêVý[^¡ÙÜ4…f'E§ÖC‹ºAݪ£+4;)M¡Y78µZ47¨[õo~…fÝ4…fsƒSë¡E'Eu«þ-¯ÐlnšB³“¢Së¡EÝ nÕ¿Ñš¦Ð¬œZ -c‘ëÍñý_œ¨ÐL«¯\g‘A«n0²ÈõQØ Œ'Vhö/S€VYsùÔzÖÂnà,rݺi ºÁ{­‡vg‘ë„nà,2øTÐinP…ÝÀxbºiÊtƒñ½Èe»³ÈßîÑþæá,2ø”µiŠ\…ÝÀxbe ºiÊtƒ÷Z_ka7p¹þHèÎ"ƒOY›öõQØ Œ'VÖ ˜¦¬A7x¯õ¬…ÝÀYäú#¡8‹ >em:)Z2ù›¿í œE_eÍYäSkYËXäºì L«Få,2h•µ‘E®Ân`tîo,pð„:‹\·‡½i*(ì F¹ìa7ð÷"»Gû^s|ÊÚÜ 2¹nÝÀß‹ >e ºÁø^䲇ÝÀYäo÷èYƒnà,òym ½³Èu{è¦)kÐ F¹ìa70ÆXßkÐ œEŸÖÚÜ 2y}p´ú^s´ md‘룰O\Ys´*¨³È§ÖÖZÆ"×­ ˜¦¬A7pùôõÐÂnà,rݺiÊÌ F¹ìáI‘1Æ*(tg‘Á§µ6ï 2¹nsÓTP›"ƒ¦ÐænðÆ=ÔYäº=œ™¦‚B7Y䲇ÝÀcNŠœEŸ²6ï 2¹nsÓTP›"ƒ¦ÐÞùúvg‘ëöÐ LSAan0²ÈëCÆ"ó·“"g‘ÁW¡9‹|j-k‹\·‚“"Óª Î"ƒVYäú(<)2ƸÓtÓÚ|R”±Èu+˜"›¦ÐºO…nð^ë »³ÈõGB7ð÷"ƒOY›»AÆ"×­ ˜¦¬A7ð÷"Ÿ¾žµpnà,rݺ³ÈàSÖÞ]ÛC »³Èu{èÎ"ƒO¡ÍÝ c‘ëVÐ LSA¡8‹|úzÖÂnà,rݺizB¡Œ,òú±Èßü­8‹ ¾ ÍYäSkYËXäºtÓª Î"ƒVkmd‘룰c\ÝÀ4…ÝÀ4…6wƒŒE®[A70M¡A7pùôõ‚†ÝÀYäº=tÓ´Öà¤hd‘Ëžc¬‚ÂoŠœEŸ :ï 2¹n'E¦© Ý§¬ÁÞà½Ö vg‘ë„n`šBë>emî‹\·‚n`š²ÝÀ4…6ï 2¹nտѵ֠8‹ >…6Ÿe,òúà,2h•5g‘A«ÐF¹> OŠŒ'®¬9‹ Z­5g‘O­=o,p°{w¹n¿)2M¡ÁoŠF¹ìáI‘1ÆÊœ9‹ >tžd,rÝ ¦È¦i­ÁÙYäÓ× vg‘ëöÐ LSA»OY›»AÆ"×­ ˜¦¬A70M¡Í{ƒŒE®[õot­5èÎ"ƒO¡ÍÝàNžPèÎ"× ÝÀYäÓ××Z¸70ÆXYƒnà,2ø”µ¹d,òúà,2hµÖœE­BYäú(ìÆWÖœE­žPg‘O­4c‘ëV070MYƒ½³È§¯‡vg‘ëöÐ LSÖà¤hd‘Ëî Œ1VAaoà,2ø´Öæ“¢ŒE®[ÁI‘i*(œ9‹|úzAÓ"g‘ëöpRdš {ƒ‘E.{¸70ÆX…nà,2øTйd,rÝ º¿|ÊL‘Ç÷"—=ìÎ"»G›½;‹ >em>8‹ Z=Î"ƒV¡,r}vã‰k­9‹ ZÔYäSkOhÆ"×­ ˜¦¬A7pùôõÐÂnà,rݺiÊtƒ‘E.{Ø Œ1VA¡8‹ >­µ¹d,rÝ ºi*(tg‘O_/hØ œE®ÛC70M…n0²Èe»1Æ*(tg‘Á§‚ÎÝ c‘ëVÐ LSAaoà,òéë »³Èu{ؘ¦‚ÂÜ`f‘¯EÞþsnàÚ˵AûéÔά]!‹¼ý=4§ÏܧМE>´Z67¸€EvMYónàš²6Î ®ì½Èu+Ÿ¸¦Ð|nàšBOŠ®7>ø÷ïÞ·¿Ô»ûTPŸZ/hvRt‹ìš²æÝÀ5em<)ºÞøà$k~R´ïqþUÒ5eÍ»Á¡õ¬eÝàÙ5e­w…æsƒCë¡é[;Éšwƒ Xd×šï ­‡–uƒ Xd×”µþͯмZ -d‘/`‘]«Ð€Ev­ƒ™E¾ByûÛ—°È‹|h=ka7ùÙ5…æsƒCë¡e{ƒ Xd×TP覩 s7Yä Xd×šÏ \ShãÞà YäíïkÍçîSA}nph½ ÙÞàÙ5eÍç®)kãÜàzcƒ¯\`‘÷=Z£Ù} mÜ\!‹¼ý½ ý[^Yó½k mœ"_o,p’5Ÿ"ï{ô¬A70>Y¡'EWÈ"o˰Èî«ÇXäCkAÈ"_À"»VÙµÊÚÌ"_!‹¼ý=k>EvŸ²Ý`f‘¯EÞþšŸ¹O¡ùIÑ¡õ‚f'E°È®© Ð ü½È§¯‡î €E¾ü½ÈõGÂÞÀß‹|úzha7ùÙ5ö3‹|…,òö÷µæ'EîSh°7˜Yä+d‘·¿‡ÝXd¿V_s7Yä Xd×ô@70M¡ÍÝ d‘/`‘]«Ð€Ev­B›Yä+d‘·¿Xd÷ÕZùÐڲȰȮ)kpR,òáë¡…{`‘/`‘]SÖ Ì,ò²ÈÛß 'EÀ"ûµZkóÞ d‘/`‘]SA¡˜¦Ðæ“¢E¾€EvM¡ÁÞXäÃ××ZxR,òåïE®Ðà¤XäÃ×C OŠ€E¾€EvMœÍ,ò²ÈÛߟ¸O¡ÁIÑÌ"_!‹¼ý-4ãŽk­‹ìZ=3‹|…,òö÷Ð`n`Üqe XäCkk-d‘/`‘]SÖ ‹|øzha7ùÙ5e ºÁÌ"_!‹¼ý½ Ð €EökµÖæn²È°È®© Ð ü½È§¯4Ü‹|‹ìš {ƒ™E¾Byû{Aao,²_«‚Î'E!‹|‹ìš 'Eþ^äÓ× Î €E¾€EvM…n0³ÈWÈ"o+(°Èî«Ð€E>´–µE¾€Ev­ ,²kµÖfù YäíïYƒ“"`‘ýZ…6O‘CùÙ5e æÀ"¾^Ðð¤Xä Xd×´Ö`Š<³ÈWÈ"o/(Ì €EökUÐyo½¹nSd`‘ݧ¬A7˜YäëNÀEÞ÷h'àÀ"»OY›»AÈ"_À"»¦Çº°È‡¯?a7ùÙ5ºÁÌ"_!‹¼ýí1Ù}°È‡Ö²²È°È®UAEv­ÖÚÌ"_!‹¼ý=kÐ €EökÚÜ BùÙ5e º°È‡¯4ìÀ"_À"»¦µÝ`f‘¯EÞþ^PèÀ"ûµ*èÜ BùÙ5NŠ€E>|½ áI°È°È®© 07˜Yä+d‘·¿æÀ"ûµ*è<7Yä Xd×TP˜ø{‘O_+hÈ"_À"»V¡‹ìZemf‘¯EÞþVP`‘ÝWk XäCëY S,ò,²k ¦È3‹|…,òö÷¬ÁXd¿VS²È°È®i­ÁXäÃ× N‘E¾€EvM…ßÍ,ò²ÈÛß ê¼ûì fù Yäíï¡ÁI°È~­ÖÚ¼7YäËß‹\·‡n,²ûÚÜ ²÷"×­à7EÀ"»O…½ÁÌ"_!‹¼ý­ Æ× ,²k•µ™E¾Byû{h070,ò¡µ/E¾€EvMYƒ¹°È‡¯‡Î €E¾€EvMYƒ¹ÁÌ"_!‹¼ý½ 07Ù¯ÕZ›ç!‹|‹ìš s`‘_/h87ùÙ5ºÁÌ"_!‹¼ý½ Ð €EökUй„,ò,²k*(œ‹|øzAÓ"`‘//r…{/òék¡…,ò,²k•5`‘]«‚Î,ò²ÈÛßÖ°Èî«ÇXäCëY ÷À"_À"»¦Ð`oð^ë¡…ÝXä Xd×tƒ™E¾Byû{A¡‹ì×j­ÍÝ d‘/`‘]ÓcÝXäÃ× v`‘/`‘]SA¡Ì,ò²ÈÛß ÝXd¿V»AÈ"_À"»¦‚B7ùðõ‚†ÝXä Xd×TPØÌ,ò²ÈÛÔµ–k?‚öÓ©Y»Cyû{h¾7pŸBsùÐzhY7¸EvMYó½kÊÚ87¸Cyû{Öü¤È}ÊšwƒCëYËæ7¼Ù5eÍOŠ\SÖÆnp¿±À¿ºý=k>7pŸ²æ'E‡Ö³–uƒÞ‹ìš²æs×”µw¾Z67¸EvM¡ù/L]Shc7¸ßøà¤ ý[þûº½Ÿ¹¦‚ú/L­g-ë7°È®)k¾7pMYyƒ;d‘·¿=ð^d÷UÖÌW¡Í,ò²ÈÛßCƒn`ܱBƒnð^k}ッµ,ò ,²k Í÷‡ÖCËö7°È®ÕZÙ5tœÜ!‹¼ý½ ¾7pŸ²æSäCëYËæ7¼Ù5eÍ÷®)kãùß‹¼ý=k>7pŸ²æ{ƒCëY »°È7¼Ù5…æSäCë¡e¼Á ïEvMõ½k*è87¸Cyû{A7pŸ²æ{ƒCkY YäÛxâê¡À"»V¡‹|h=´ì_­»Ev­ ,²kUЙE¾Cyû[Aá½ÈîSÖ Ì,ò²ÈÛßCƒ½¼Ù¯UÖæn¾ùÙ5öÀ"¾¾ÖÂn,ò ,²k*(ì æ÷"ßá{‘·¿ºqÇ ºÁÌ"ß!‹¼ý=4?)rŸBƒn0³ÈwÈ"o öÀ"ûµz æn²È7°È®é1€½°È‡¯=!‹|‹ìZ…,²k•µ™E¾Cyû[AEv_­5`‘­g-<)ù†÷"»¦Ð ¼×zháÞXäXdלÍ,ò²ÈÛß {`‘ýZ­µù¤(d‘o`‘]Óc{`‘_/hxR,ò ïEvM…n0¿ùß‹¼ý½ Ð €EökUÐù¤èvïÀ"ßÀ"»¦¬ÁIÑÌ"ß!‹¼ý=k°7€÷"ûµÊÚ|R²È7¼Ùµz €Ev­B›Yä;d‘·¿e Þ‹ì¾*(°È‡ÖžÐE¾EvMYƒ¹°È‡¯‡v`‘o`‘]SÖ Ì,ò²ÈÛß ÝXd¿Vkmî!‹|‹ìš ÝXäÃ× v`‘o`‘]SA¡Ì,ò²ÈÛß ÝXd¿V»AÈ"ßÀ"»¦‚ÂI°È‡¯4œ‹|‹ìš 'E3‹|‡,òö·‚‹ì¾ XäCkY YäXdת À"»Vkmf‘ïEÞþž5§Ïܧ¬ÁÞ`f‘ïEÞþœ‹ì×*kóIÑ ü} XäXd×”5˜Ì,ò²ÈÛß³Sd`‘ýZemž„,ò ,²kz `Š ,òáëOh87ù†÷"»¦‚ÂIÑÌ"ß!‹¼ý½ pR,²_«‚Î'Eo,pò8op‹ìš²Ý`f‘ïEÞþ–5`‘ÝW¡‹|hm­…,ò ,²kõ‹ìZtf‘ïEÞþž5èÀ"ûµ mþMQÈ"ßÀ"»¦¬õ¡‚ÂÞà½Ö þ¦XäXd×tƒ™E¾Cyû{A¡‹ìת s7YäXd×TPèÀ"¾^а‹|‹ìš Ý`f‘ïEÞþ^PèÀ"ûµ*èÜ BùÙ5æÀ"¾VÐE¾Ev­BÙµÊÚÌ"ß!‹¼ý­ À"»¯Ö°È‡Ö³Î €E¾EvM¡ÁÞ`f‘ïEÞþž5Ø‹ìת óÞ d‘o`‘]ÓZƒ)2°È‡¯4œ"‹|‹ìš Sä™E¾Cyû{AaŠ ïEökUÐù¦!‹|Ã{‘]SAᦦ)´ù¤(d‘o`‘]ShpRïE>|}­…'EÀ"ßÀ"»¦µ{ƒ™E¾CyûÛZÙ}šùª 3‹|‡,òö÷Ðà¦À"ûµ íݵ­ !‹|‹ìZ­5`‘]ShóÞàö¡À"ßÀ"»¦‚ÂÞ`f‘ïEÞþ^P˜‹ì×*kóÜ d‘o`‘]SAan,òáëk-œ‹|‹ìš sƒ™E¾Cyû{Aan,²_«‚ÎÝ d‘o`‘]SA¡‹|øzAÃn,ò ,²k*(tƒù½ÈwÈ"o+¨qÇ•5`‘]«‚Î,ò²ÈÛßCƒn`Üqe XäCk ß‹|‹ìš²Sd`‘_-œ"‹|‹ìš²Ý`f‘ïEÞþ^PèÀ"ûµZks7YäXd×TPèÀ"¾^а‹|‹ìš Ý`f‘ïEÞþ^PèÀ"ûµ*èÜ BùÙ5º°È‡¯4ìÀ"ßÀ"»¦‚B7˜YäWÈ"oÿYP×~X®ýÚO§vfí²ÈÛßCónà>…æôÙ¡õв“¢°È®)kÞ \SÖÆ½Á+d‘·¿gÍOŠÜ§¬y78´žµlnðÙ5eÍOŠ\SÖÆnð YäíïYó¹û”5?):´žµ¬¼€EvMYó¹kÊÚxRôzcÿ>tû{Ö¼¸OYó¹Á¡õ¬eôÙËxâïëô¹k Íazh=´¬¼€EvMõ¹k*èø ÓWÈ"o+(°È‹|h-k!‹ü2ž¸ ïEvM¡A7˜YäWÈ"oÏšO‘ݧÐ|nph=kÙÞà,²kµÖ€Ev­ÖÚÌ"¿Byû{Ö|oà>eͧȇֳ–Í ^À"»¦¬ùÞÀ5emœ"¿Byû{Ö|nà>eÍ÷‡Ö³–M‘_À"»¦¬ùÜÀ5emܼÂ÷"oÏt`‘ýZ…6N‘_!‹¼ý=4ç ܧ‚úÞàÐZACù,²kUPóUhÀ"Z-c‘_À"»¦Ðú7¿Bƒn0³È¯EÞþVP`‘ݧРÌ,ò+d‘·¿‡{`‘ýÚz fù²ÈÛßCƒn,²_«Ðæ½Á ü-Xä°È®© °7˜YäWÈ"oÏt`‘ýZemÞ„,òËxâúûšizB¡‹|øú—G¸70ÆX¡A7Ù}ÊÚÜ Bù,²kÊì €E>|-k!‹üÙµ Xd×*k3‹ü Yäío°Èî«'XäCëY OŠ€E~‹ìšBƒn0³È¯78ø^yßã}&UPÿ…©k*èø›¢WÈ"o/(t`‘ýZ…6wƒE~‹ìš²{`‘__káI°È/`‘]ÓZƒ½ÁÌ"¿Byû{Aá¤Xd¿V÷!‹üÙ5Ôç®)4ëüçß>}úúýǯÿüo¿~üë§ÿøøå¯¿üãŸøŸOùú§ï>üKýùòË_ÿöÛÿþúù×7µÐ}þúõóßû¯¿}úøó§/ú¯zÒþòùó×ßþãû¾ÿùéëÿþú‡Ï_~ùô¯¿þòùúî×Ï_¾~ùøË×úþõ—ŸÿôÝ—ÿùú®ìü¿Ï_þû-¬?ÿ¿ÿÿPK!ƪÇCxl/worksheets/sheet2.xml”˜Ms›0†ïé`¸ÇÈ—=¶; ð¡3NÛ;Á²Íâ$ÿ¾ ëiQu <«ìê]iY³oyfìYU§¼˜›öhl¬Hø:-¶só÷¯àæÑ4ê&.ÖqÆ 67?Ym~[|ý2{çÕk½c¬1ÀCQÏÍ]Ó”S˪“ËãzÄKV€eë+©‡”*GJ•+i€”V>Òs>$5÷:jî•먤RÚÙ”t©¤R’RIÍƒŽš¢Fò}ÿúUžU–<ÙpÑøœ´_Äý‚îpÒb—ìïÈÕíÉÖù’y0ºq!ËÐêò6mè²/¾éÃÇ_‘’¥|Þ6rd­¾e+[Ôò€I‡ ˜lب‡å iµ8È(wÅr¶ÕŨơG=,OH,S8™«f§CÖ)ýNØJ¼Tã ‡å µ?Žßñá =^,w±s û¢­£;tøöÅŽâˆe0ŒV쯇å#Ø9†BøvŽóɾÄÎ1äké(‚AË!Ć2œuCq(–CˆcXí²/±è‡³«,ú~½Èë*‡‹~8#Ê¢÷%{XެSÝO޲Œ£–ChÕ«C뵫1OÖ#ëTwè\,cW§Œ}}a¹]z]ÂhEKÔ8ìa)#®NuG0ú’ sAè*Ë8RãUË*tΑ{±ºáþCçWááØ>µãÄð²ï%Êx˾ÇÕ6-j#c›îòª¬ÂÛñž^¶Wû…7 Ïo;¸¬bpQ1Ar7œ7Ç—öBåtýµøÿÿPK!;m2KÁB#xl/worksheets/_rels/sheet3.xml.rels„ÁŠÂ0E÷þCx{“Ö… CS7"¸UçbúÚÛ—÷ý{³eÀååpÏå6›û<©f‘,Ôº…äch°ð{Ú-¿A±8êÜ -æÙI‰y0Éù‹Ьªjmò_´/Nµï,ä}Wƒ:=RYþìŽ}¢H9ÈEíò€bAëwöžk}¦mÌËóö ÿÿPK!/xj^¹Vxl/worksheets/sheet12.xml”“ÁjÜ0†ï…¾ƒÐ=–í$Mcl‡%Kh…RÚÞµòØ+iTI»›}ûŽm¼„¦‡Ô`<ƒ¤Oóÿ3®^¬aGQ£kx‘åœSØi74üç§«ÏœÅ$]' :hø"h?~¨OöqHŒ.6|LÉWBD5‚•1CŽVz V&Jà ¢ »ù5¢ÌóOÂJíøB¨Â{Ø÷ZÁÕÁ‚K $€‘‰ê£öq¥Yõœ•aðW ­'ÄNÎ3”3«ªçÁa;Cº_Š©Vöœ¼Á[­FìSF8±úVó½¸DjëN“‚Év oø¦¨6%m=ûóKÃ)¾ŠÙd÷q?-Aå‹pÿBߣ|—@ÎÌ“è;þ~ÇßÑž¿åòųöŒ¨Ãguº©Ú³…Eû2¶¯ÆŒÜ”¦n—p< º0h ÓUN›¸"…e‹àáÍ$¸úˆªt?Å”øUÓ‚&²HTp •¿6Í09!Û´· {Ó©Öuc™CbµÃvxÅíU§bL皘~x²ÐŠpÖÅV®¼ÝbU«ÕB³ù[«Õ )z[›n|8¿5œZêÕXy® ´îÐ aFÚî¶Ÿ¸E/}¡.’)ÒGzßó>ª'MbeFé¾ó9«5´Ø·Xí,Nr—«-Xnâ½·ñÒ¤ÙžyIçí‰td¹›œ,GGͨQ_®G(ÆE3B› ³¼.u©‰YwU±6ìOMf®3o6ÂaY…›k÷¹ {‰= îס ûP ÷!†ô¸ÚÓÖ6|r.“νP38;ŽY‘â’nuŠN2ÙÂMOu0߬¶F=Ø[Pw³¹óoŤümÅ ãÿÙVôy+ín–F:_›*åÀBEJ㮀k5Ã-p= !¨à~ÛüäPÿ·9ge˜´†>SíÑ ç‘J!»@K&úNV-Ï.+’•‚LD9êʪÝ'‡„õ4®ê³=B)„ºa“’ îdüùßË ê'ºÈù§V>6™Ï[èêÀ–Xvþk‘šCúÎQО}¦¦šÒÁkösµ–±æv¼\?óQ[À5Ü.+ˆ‰˜Š˜Ù—%ú@íñ=àVï>ly… ª/ÙÂi‚´ô؇ÂÉÚ`Ò¢lÁRV·^FÁ yYéN×…,}“J÷œÆžgþr^.¾¾ú<Ÿ±K {¶v+Ý€©!iO¦¨.&ŒqŒyËæ¾ãýûàè-xå0bJÚ— àRº ûÒ’ß:×LÝø ÿÿPK!bNعTxl/worksheets/sheet10.xmlŒ“Ánœ0†ï•ú–ïÁ@š¦A@´ê*j•ª*íÝk°Öö¸¶w7ûö@l«¦‡EBÌÈöçÿŸêÇWkØBÔè^d9gàvÚ ÿñòt󉳘¤ë¤A ?Cäíûwõ Ã>މÁņ)ùJˆ¨F°2fèÁÑJÁÊDiDôd7²F”yþQX©_U¸†}¯lQ,¸´@™Hµ+ͪkpV†ýÁß(´ž;mt:ÏPάªž‡Aî ù~->Hµ²çä Þj0bŸ2‰Eè[ÏâA©­;M¦²³}Ã7Eµ)¹hë¹>?5œâ_1›Ê½CÜO Ï]Ãs"D0 &ãLÒçŸÁ•Ô±_ sŠ ±­ÿÄ+ýinзÀ:èåÁ¤ïxúzMÞ|WÝy QQÁé⬼»ÈÜÊ$Û:à‰Qó º×ËiŠŠâÿŸlk5íÝЂErqlË¢¸­Å‘Ô)z‰vANV®F–3¬ çØbzÑêå_e´‹Ì@?ºç,,ŽóŒâ„~²yOîw˜Ú5izÄçÙ-g=bZꚸüíoÿÿPK!ðìZúŠl>| xl/worksheets/sheet5.xml”Y“Gš´ïÇlþÆý²XŠ’IË%r;ì;Üѵ°” èV÷üú9ˆx=šç-7kn¾o:\‘ù¤Çâä©þ÷Ÿï~»ô7>¾=ÿãå—/½yÿúüç·ïÿúãå'çÿ¹uùÒÇO¯Þÿüê·ó÷o~¼ü¯7/ÿïOÿý_?üqþáo}óæÓ¥c ï?þxù×OŸ~ÿþÊ•¯}óîÕÇïÎóþ¨ürþáÝ«OÇÿùá¯W>þþáÍ«Ÿÿ¼èÝoWN®^½yåÝ«·ï/©áûÿIç¿üòöõ›éüõßß½yÿéK%ÞüöêÓñþ?þúö÷QÛ»×ÿIuï^}øÛßÿŸ×çï~?Vñ—·¿½ýô¯?+½|éÝëï·¿¾?ÿðê/¿ûýÏîú«×Q÷Ÿÿ#UÿîíëçÏùôݱº+_n4÷ùìÊÙ•cM?ýðóÛc>û¥o~ùñrß}8œœž\¾òÓÑÓ·oþøøoÿ÷¥ÿ;?÷èõ«ÏwsrãrûŸw?ño_ ??•¿œŸÿíóÅÛÏ?^¾ú¹º+©¾ùϧrÿÃ¥Ÿßüòêï¿}zxþÇúæí_ýtDàXõŸýûþçMo>¾>Žò±šïŽ-kz}þÛñ–Žÿï¥wo¸œGéÕ?ÿÿٵ˗þxûó§_¼|ý»ë'7NouŸoñ/o>~šß~®ôò¥×ÿøéüݳ/ÿQW+«ÕœÝTEÇÿ«Vtö]wýêÍÏÕäK¯|¹‘?û5½úôê§>œÿqéб¡¿¿úŒc÷ýÉÙ©ëʱŸÿë¾;>‡ütrãÆWþq§×µ|0å£)ŸLy1å³)_LùjÊ7S¾›òƒ)¿mÊï˜ò»¦üž)¿oʘò‡¦ü‘)lÊŸ˜ò§¦ü™)nÊ_˜ò—¦¼wÀõ"îú×$öBŽ‚c®wÐõŽºÞa×;îz^ïÈëz½c¯wðõ޾Þá×;þz`ï삽c°wöŽÂÞaØ;{bïH¬õ9ïœù ŽÄÁ‘88Gâ ñ "ñ,\$ò ‘HÁ‘88GâàH‰ƒ#q‰¼]‘HÁ‘88GâàH‰ƒ#qp$ŽŽÄÑÎÂŽÄÑ‘8:GGâèH'ŽÎG牣óÄÑ‘8:GGâèH‰£#qtž8:O‰£#qt$ŽŽÄÑ‘8:G‘ˆg‰‰“]:'‘È6‰“#qr$NŽÄÉ‘89'GâäHœ‰“#qr$NŽÄÉ‘89'GâäHœ‰“#qr$NŽÄÉybqžX‰Å‘XìÞÄybq$Gbq$Gbq$Gb‰xqŠ#±8‹#±8‹#±8‹#±8‹#±8‹#±8‹#±8gGâìHœE"Vd³HÄœí6Ù‘8‹D¶!)8gGâìHœ'Î"‘t$Î"‘W8gGâ,Ùs‘xòõ y‰D"‘È6‰³#qv$ÎŽÄÅ‘¸8·w^‰‹#q±'6Î牋#qq;–Å‘¸8牋#qqž¸8Gââ¸Ùùà<ñà<ñàf烛nv>8ŽÄÃ$^9æ¢ Gqí·„£'5åù²)MùdÊ‹)ŸMùåxÉWS¾™ò=Ê1mLùmS~'ÊalwÍÏ”ß7åLùCSþÈ”?6åOLùS3nÏLùsSþ"ÊÁÏKSÞ÷Nœ ä€Dï˜ët½£®v `ÅGAäQzÄ;(ø(ˆ> ‚ø£ )ˆ@ B‚d!QHAR‡ˆ½#qp$"œù ŽÄÁ‘88g€ƒH„£ "5ˆDþÑHA$R‰D"ç‘HA$R‰D"‘HÁ‘88燃3ÄÁ9â ‰HÄ Ž"‘‚óÄÑ‘8ŠD4>ŠD "‘‚#qtsñè&ãQ$² ‘HÁyâ舻"ú@. Á\ª* KBP—„À. Á]¼$yIô’ì]dzè¾$}Iü’ü%!LB˜„@0 Áà xI&!(LB`˜„à0 b‚D C˜‘D" ‚ÄTU˜‘ȪD"‰xÓ‘ˆWs‰LéD"‘ÈœU$rš¹ê‚Äk¼Ý ño7H¼Æ6HLU‰©ª 1 AbjC~È!‘!2“–#R%rƒÄ É$žà™Abº"HLBx‚уĦtAb‚Ä$‰I“ Ù˜k:¦ ù˜‚&d š‘)hJ¦ ñG‘ÈÈV$bá7ŠD¶áH‰£Hd"‘wåHE"ÞÚQ$Â}¦ ‘ËÁIëAF„Z2öÒŠWˆD6.)ˆD¼“HÄ5‰D¼“HÄèN"£;‰DvP$²ƒnm8¹ÅáäV‡“[Nn}8¹âäVˆ“["NAâ ‡$HLB˜„ 1 "my"y"y"ç‰E$‚’")ˆD "‘‚#±ˆD^!)ˆD "‘‚HÄûQD"^µ"O„ey"h/òDfÒòD>y"̲8O,òDvPžÈÊaEžÈž‰\žÏnÇ2ËQÕ,ODã³<‘‚¶É´OÆ Î"=ŸE"«ÒVjv;–YëD^¡u"\tÖ:jÖŽ…·« íXX•Û±ÌÚ±0†t;–9Hä±å$r3‹DŽ®›g7;Ï"‘ƒ¨½3³CÍΫő¸hÇ‚'¸hï ®íy…v,<±q{çÅ푈g ¹›X‚Dn– ‘ ú%H¼ÆjÇÂjÇBÁ­牋fgvP³3Ÿ fg šY•Häóp;–E$rHD"{.1¬n¸ºuâ*Oí«<ïùê‰I“$ÞÀ”zÓAb‚Ä$‰ÿ&|Ž^ÿ¶pôz GyÄåèÉ尸ɔS>G97¦Ýµ–óüx3å»i÷`ê¿õ€Ž;QÎîšvï™ÿþ¾)`Êšú™û|lúûÄô÷i”£_Ï¢ãð¼–3¡|åàçe”cJïûðàû!Ì} wB0ǤÔtIê’°˜nôÁ]Jf¼$y©@/ Á^ê`À—„ /‡£ntƒ?:l&!ä?„êÁ$ƒIyÑ…ü7ë}`H#íƒÃà­“$R‚Ä$ˆD¼ƒHdp))ˆD "‘‚HÄ‹9ˆDÌÃHÄ5ˆD¼ƒƒHÄ58Gâ 9„ò¬qSœ$¦ 4HLQg˜ÃÑp1‰ìC"?dú$ò_Ù Ab‚Äôï‚D cx“m˜®Ùø$æp4&fnAbº"HL‚›‹GMÆ`w S–$¦64§pÔõC32;¨)Ï|‰ÌE"Ÿ‡HdU"‘k^Æ[;ŠDvP$² MÍxÕÆ 1á#Ù‘ÈÀO$¢ñI$RЂ‚V„)5K•IkB^$²ƒ“H„SOŽÄI$¦p4¸b?D"žà¤¥!,|‰x´“H¤ Õ!-y»Zò®´@Ä;8‰\AOAb‚Ä$ÈÙsy"… ‘0‰JHg(Abä‰LМ'–˜SãòDô£È\qžXÜ¥ˆDÞ®óÄ"yWŽÄâv)E$²*‘È:O,΋<‘¨<ˆy"·[)òDöCžÈ~È)È!ÌòD òD4>ËÑYžÈÀOÛd^áöɳ#qv$ÎA"×W³['ÎZ'¦/GÍnpÖ:‘Ô:‘c¥u"(™µcav¨ ¯ÐŽ%…£õvy–2‰7`ú³v,l\$²q‘ȪD"‡D$rHD"„E{g¿­$vùËÑÚx y+‰ÝMRRIìN\VS–»W»›Lé*‰)ÞµcÁìòD6® ÛÐy"« ¹öÙùZÚ5;3€Õ:$î:OäZ'Âv­1ì»Ö‰¬ÊlïZ'©w­Ù¸N¶ÙxxbÊ'µNdUá‰<¡ßÓ OdãòDŽ®<Wä‰)¥ª:„'¦´1HL‰f˜„ 1 AbjC$у#ñ$æp4¯ô¿ G¡ô[¾½QÃQ¸ø`ÊÇ(g8jÊ‹)Ÿ£T-QÎE‰¹ŸÍ”咽C”ã¹mÊï˜zîšò{¦ü¾)`Êšûyåx!G9Þ‡'QŽ×ái-g¶÷,Êá¾Ï£ãö"Êñ_F9î³ïÄ¥”.KIàdî©èR¨Ô¥ª»tÅm€Ç>ÀãÏ.ôA^ª*ÐK{©ç_Jƒ¾tEà—„à/‡£îyéŠ@0 Á`ÂÔQˆ)½ é~}p˜ÃÑÚŽas8WЃÄô¨Hdœ*ñú "‘‚HLá¨yPƒHÄ+88‘ˆ—y‰ }‰Ì@E"ÇJ$2m”r¬d…ç…ƒÌýrHd‡¼"Hä‘É$r!>‰IKä¿YÂyÅ$&A³0ó0MÃŒ½‚Ä”š‰)Ÿ s8ZËáhxPc˜¾€ “$&!HLýЄÌDS32‡DS2Q$ò ‘È+D"ƒK‘àF‘ˆyp‰¼B$² ‘ÈÛ‰¼Â‘8ŠD&"ïÇäHœD"«  õ¤%!3P‘Ȩ3<‘0L1;§øN$bØ'‘ÈŠDöC$ROXUȨ§ 1 Ab‚Ä$‰IùÖNAbÊ'ƒÄŽÆ{Μ5HLm‰© 1]$¦¨3HdK˜„ 1 òDÀPœ'‘‡+ŽÄ"™¹‰D ΋HdD¨= ¬¯ÈñFç‰Åybqû”â6*ÅÍÎÅybqžXä‰)­$2)òD>(yb G£ªŽÆúŠI v,ä‰h|–'R'2•'2€Õ>™Ui£Ì$0HäÑ謭2wëÄYëD¶¡u"&ÈYëDf‡Z'²q­y…v,ðÝ9HäkÖŽ…c$r¥?‰)5ÕŽ…ÏÜÍγ['Î"‘=×Ö™mhvF?‘ÈA&‚öUžÈžë<ýØÜyâ&qW›Ö‰0™MëDÜîV=±;Ã]m•ÄîŒm‰o·’ØÝbã•Ä.ým%1g •Äî*«ª$v,c«$v<äØ*‰Øe«$v;XIìN˜þVsjZIÌQg%±»šÂÑ/Ð¥„¹’ØÝàèV;î?¶Jb—¾­ª$v<³Ü*‰9H®$v<ÞÙ+‰©ƒ{%1 û^IìNøU»3<Ú]$RO$p»óÄ]³3³C'ROd쵇'r}µ‡'¦+´Nd?Ü:q×:1…£±n »Ö‰ ’µNäá‰)ÕÉ6×:‘Uéd/Ξ˜¿~pHä‰Ì½å‰hã OÄí´NDU‡ðÄŽš³ðC¬s8ê®ó—£qE G y…HlÂWáèÍo GoÖp”ÇáQÎóÁ(çÉ–)/¦|6í.QÎÙÑü÷›)ßMùÁÔ;ÊÚS~7ÊñVÜ3å÷MùSÿÃ(Ç«ò¨–óßø<Žr<—'QŽçø4ÊÑßgQŽ÷ê¹)å¸Ï—¦¼ï08a4M÷“éCÐ¥”.¨KB`—„5ÚÀsî¼uy©ª@/E„Á^ú~2àK_\}IüRÁ_GÝ )ä‚1¦zA¨zQ˜ÂÑzWùËÑÀs æpÔT5‰lcSj$¦+‚Ä”šŠD&"ïÍ )ˆD "Ã>ˆD<¨A$¦pԸŠuÊÙA!9a G£q¶!/ä$¦É óÏêÖ6’$¦ªÂSjŽ˜„ 1 á‰\VAb‚DV5‰éŠ 1}E$¦´1HLùd˜âÔ 1 Ab‚Äüåh}IOLw¥ 9…£ñh¹b‰ } ÓhRf"‘ù¤Hd>)Ùxxbz‚"‘‰évE"{.yW"WL"‘‚H¤ ¹ ‰èǤ%!­ )hQH!HL¿,™³ŠD˜åž˜ÒF‘È 4HL?ž˜’À 1 "‘w$¦´1HLB˜¢Î 1%ÌAb‚Ä$ˆDLES˜ÃQóžOAbþr4®À” 19ê®9$Ežˆ~y"4Gbq$mPÀnÑ…‚¶(´G¡ OLáhx"  8O,šA{‘'Rp³sqžXÜì\ä‰)~PÐìÌ'(OLá¨YeíX˜jÇBA; Ú±PÐŽOpÖ:‘I Ö‰öY$2s‰¬J$b¬f·c™µNdUÚ±PÐ:oíìv,³v,X¤ÎÚ±°çAbGãѲƒÚ±p¬´caÈ+Ù¸›g‘Èg.ÙAÍμ+ÍÎ ü4;£ƒ‹#qq$."‘ñH¢‹H¤ ߉DÞ®Hdå‰Àg‘'bwn³¸ƒ›E;6.OdãòD Îy"£Ny"‡]žHA$rØ5;³šÁîâÖ‰‹['.nDzºuâêÖ‰«['®nDzºuâªu"?‘ˆµŠD "‘‚Hd¢))ˆD "‘‚HdãŽÄÕ‘¸ºcÄU$²q‘ˆ—s‰xWâ€ÄU§8`w•'²ƒ:Mä:Näíjv†°ivfp©u"£Î ñ*³ÃJbwÆÌ­’˜{µ’ØÝÂ{¾‰éÑJbw‹ý¨$æø®’˜š¨ vWOV»ô×2+ˆù3Ð bÇ%õVA<ÅóÛ*‡9è¬vü£[åð ìlòV ó³Ã.ý•ЊaÎR+†gòJaþ¶RØ¥‚+…ü©Ý½BÈŒ|¯ vº½WÓ—¬{0ÈÜwOYU¸aúm^ß0TÓI"SÃpÃô1i¸a “n˜òÒpÃô]ª[!îîL{× 1Å¢æs7Lɤ[!îZ!ž]nHAnH!Ü0ýéY¹!”δùÌ\ºrÐ 1Å¢q<Ž61/çoFÍú!HÌߌº+‚DRr‰@ô )ˆÄ&|‹ž~[,zZcQž©G9£œ‡D¦¼˜zfÓîåœMùfêßÍýLùms?wL»wMù=S~?ʱ yPËs>ŒrLz¢“ýã(Çózåx¾O£÷ó,Êñú<7å/LùKSÞ÷Nª> äRj8EU`¥èR8Ô%!°KÂêÚðÒA^½”e{) ø’ô¥± üRÁ_º+@zÈôSÂz1Èç![¦~†9 JR,^˜>HL‘e˜‘ˆ6† 1Ç¢†Ý!HLm‰I‰)5$"‘.S,U¥X4öô‰)uU‰D¶!)ˆDÜî$)ˆD "‘·ëHœD"£¾ 1E}Ab‚Ä'‰I“ Ã$)ˆD "‘Ã.)ˆD¢<‘WÈ)ˆDÞ•<B‰D"…˜9ˆ%HLB˜‘È6œ'‘ˆžGb‰Ý¢- y"Û'ò ybŠEã­eÈ)OÄÄRD"‘Ȫœ'7;7;‘ÈS$R‰ÌKµaá£ÕŽ£;kÇB!HLùœv, Õ´c¡  ãDíXõiÈdR$bHf­y…Ö‰¼B;ÞU˜þ§Ö‰ØÌAbú»žÚ±¤X4¼]­)hÇ‚×`ÖŽÏ|‰ì Hd"‘‚Hä£uëÄÙ­gy"ãDybŠEãuf2©ã š)hvfòD òD "1Å¢fݾÈ™~ºc›EžÈ PžÈªä‰´N¤àA&ò ÍÎ)5G›óÄ-HLÉd%1}©·UÓŸn•Äü·*+‰Ý)ÖJbþÓš•ÄÜF/ˆE¿ôF9ø™Ì_¢p®å‰95ø "‘ɧHdÀ)S$mÀ¤† ‘‹²A6ȱ’RR‰D"‘ˆ™{ù‡ 1G¢µç9uB˜®GLB˜BÔðÄp‰IÐ,Œ5j¦ y0Œšˆ)‰©ñðÄ$‰ìù¨É^2‰é MÇŒv5ƒö1HLw$¦T2HLItÈìz “$&A$òvE"…˜˜IÉž˜:(ùÌE"Q$R‰&‘HA$ŸI$ò ‘HÁ‘8‰D^áHœD"†d‰)÷&3‰D "‘ižH¤ Y•H¤ )ˆDöC$R‰D"ÇJ$Rp$N"‘0ˆD "‘mˆDE$RpžXœ'‘ˆÑ-"‘Q¢Hä"‘WˆD "‘ý'2J‰D"ç‰E$ò ‘ˆW­ˆDXx‰X@‘HA$²*‘ˆU_‰D"‘HAû&ŸÚ°¤H4EÌÍ‚DþÅ‘Y;Œî$¦¬T;^¡ £D·c™µcaš§u"€›µNdA"×¢sÈý¬u"×:‘‚Ö‰´NähÈ€Ó­g­ñÖÎ"‘‡"¯ÁìfçY$rE"Û'R'²ªðDþ¢ââH\D"z¾ˆD@½ˆD òD¼Q‹<ýXä‰ä‰Ü:q‘'ây,Î牋<‘UÉ)8O\Ü:q‘'‚ÝEžˆwp‰¼Â‘¸ˆDÞ®›·N\D")‰4;CX5;3ÓìLA³3ÍÎÜ켺Ë*1V«HL‘h,è*ñ¬òDÆ|"‘U‰DVåÎW·w^å‰l\žHÁyâªS>Zâðy‰´¥U§8l\‡‰¬J³3ÍÎÌJÝŽe ùÏÚ¶JbŽ++‰ù‡^+‰ùKÊJbwN½U»[àj«$véOWVó/ÙVOÌ_'VÓ§¥ÄüQf±K™^1ZAä_ÍÜ*‡ÝUv¯rØ2f¬v)‡®véw…+‡9Ù­ÞÄ»¼U ÓïW ÓµÂ.}\!¼Å*ƒ)ƒ®ò·”÷J õòSÞ]‚þ=¼Á Nâ^wH!¬?s¼kyˆ÷~פÌ8OLj¼+Y!¯Ðò‚–‡d…ŒqÜö.+ä²BÞ®¬0e¢±òO™h)5Ú»¬wV˜¢Ï°Â}†æLÔœ´nû÷€/Åž×¥{À—¾ø ø˜Ôïaƒäx— 2AÕ"³Ê°Á̹Ãì]‡ÙÌ\eƒŒ eƒÂSŽè³wÙ`ÊCcDÁfï²Á”‡FU¼]Ù …°Á4ˆaƒ9­m¤ž‡ ¦t3l0 1!§t3&䜇FãðùCLÈùѸv~Sº$¦ÆµI>GâA$¶+¾ÊC»«ßˆÿûŸ~øÇO'éPÙ c|u' ÓÆ(¯‘æïP½cc”ѵ|4Nc”w`䣼·©1š¢WÝ5Ú™£©1JÅ2:5FyMc”Áec”!hc”Jc4e°ê)•ÆhJau œ|jŒRiŒ²§òQr=YF§Æ(ŸOc”í4FyošëÓ4FY[c”Jc”JcJiŒRiŒRi>JÅ2Z£ƒÒ¥Òå^«1Êk£¼7ë£Åúh±>Z£lGs=ÿmJiŒ2ìmŒb>-Ñ”ÑjÅÅ8´1šRZ{M[¦œÖ^ÓÖ£)©Õ5x·KÛ2Q£)“£9­uíÌmç3·õ(•¶¥ÒÖ£)²Õ¤ÌV “Ö¶gb ÚÖ£Œ"Ûz”wÐÖ£)¸Õ°?m=J¥­GyŒÑÖ£¼kËèÜöó¬Í2:ÛõèlÛž‰9¸]ÎÍG9ÖQþ#€Æ(ÆmiŒ¢§KÛ31‰kŒ¦$×q½4Fò6Ma®[‹-ÍG™ 7erÚ|”JóQ*ÍGÙŽÝ3-vÏ´Ø=Ób÷L‹etis=Ç­1Ê Ú®G»]Ú\ÏÚ£Tì\¿Ø¹~±sýjçúÕî™Ö6×3˜ms=sVËèÚeØæzæŠQ¶c]£l§ù(“Ûæ£ÌB£T¬®Q8ÅÚ¥Òöõëæ£{0º¶³'ÖÖ|”w FyZ´¶¹>å¾n߸ŠQ~ÛºŠÑôÓ³b4ý¼m0ÚñûÝ-MYd š“Ù@´cú·¢9cD;~mhþ25=ŨmAhw· 4”„v71ÇlAhúÀ7Íßë ]JXÐŽ?T» éÇŠƒÏô¹pà™„ 3À™ç`30læQÿä7¯[ ÉÈv 2Sç÷ ³K1¯ÈäŠ2ÓEïB3ýT¡Éwcš7ñFïrÏô­®Ü³c lOEw¹gþêñ®ç¿¬*%eÄZˤØ*rÏ«¼7»=¹ß­{îÖ=÷æž7¹gº·æž¹'ßœ]3|Räž)I–{¦¤µÜãšásfìžÜA3|þea]ÃZÚz4‡ÇfÅUÚz”‘][R±û÷cxí0ºmëQưm=J¥­G4¶õ(ÛiëQ*mÏÄþ´=CжåØüܶò<’£éÊŠÑôÃÑQÞµ]Ããx ¼¦1Êž¶=Cj1ÊRz £ö´1ÊÚ,£sÛ31ZoŒ¢cxwÀX¹1JÅ2-QFÑQFÑQÆÊm®g¨ÛemmÏÄ`»5QiŒRiŒ²Æ(•Æ(•Æ(Û±ŒÃãx>¼Æî™–6×sÜš2p¶{¦cxlÖ|‹Ý3-vÏt Íüs C£ÇðØ)m®ç5m®glÙæz´QŒõ1<6Oam>ÊP·Íõl§­G©XFWËèÚÅ;·6F¶6FÐ6F©4Fö³'ŽA;{»°ÚƒÑcx\Ç:ÁÍGyÍG9¢Qr FƒÃãzüøWå*£Ó`´ãŸ÷܂ыÂã/µ¥¿Dˆæ/„Ñœ7¢Ý Ú@ô‚¯‡kwò/¢71jÇðøË=wFÇU!»¼ó*Þô½y'ÃQ{n¿·s{öSÞ™Õæ9:޹€Š=·ßÛ¹=´y'ï­y'ãæ¶å´5(ygŠtå)–w¦È]ÞyAtîÍþÈ;/ˆŽÍ5ÇèØ)šßó÷ƺc}Ðüžb`ÍïDÇq˜Cb”õúÐöI þÐ¥ÒmÊ×ÑñÉ7FÇ'.:6ÂØ…€w{’¢ã¸‚»]‘¢ã¸‚« ]A/vÂn»»ºã„»!äè¸öƒÂ}wÅ'š®±ŒŽšçÓ½5ÍÑq8ËèØe<Ûe@,Mqsc”¡¥å£cCÕ1:6Oá;E>šÚiŒòÞ,£Sc”¨|4ÑQ.¾£¬­1J¥1š£c7nQÖÖ¥Òe;QŽ[c”µ5¥¢¹>…×Q^ÓÍÑqŒCØÆ(•Æ(kkŒRiŒRiŒæè8î ý)QƳ–ÑÒepÛelÚ¥Ò¥"FÓ¯ ‹Ñ¤ˆÑ¤´¹ë"FS@,F/ˆŽ¿•¶e;m¿„µri>J¥­G©´õ(Ÿv[2°³ëѹ­G϶õhŽŽc ¨´õ(•¶¥"å £Ü±Ìb”F³Mר=ÓÜÖ£ •ÛVžQxc”‡Q>…Æ(žÜÜe@l£ÿOÙ™íÈ #Kô—¬ö\ еWµ÷Ýþùþ@)3Æ'~Ž&™¢Ž’TE'ÅÞüÎÄØÌ(ߙTw\ðJ#£'3ŠØdWoTâ;ÓÙŒ²Mü•IuÇ5Me3J«ÕŒÒ6ïLg¿×Óðö;3ÊØÌ(3:­ãt¥‘QÕ§61ªî¸VdrYÇIñZÏ6^ë©x­§íµžFt\ëe‡½‹¬ã È:NJܪî8ÌÁÅŒÒ 6£4:Í(ÍQ3:­ã°f]Ì(ÛÄ÷zYÇYÇá –uVŒ‹ó(î¶êŽ×6ø5£4aÍ(-Ýø»¨¬ã‡w!þöt‰¿=]bUÝqqÀ{ZŒ.<äXÖñ½ÍBƒLÖq)˜·k1:}.F—ç´›‹ÑY([Œ.Ãm-F—Wì­gX£Óp¬<:Î6.DßÒ‡.B¾Ê:^çfœº]„ŽOÙ Ãn/>ßò" Ï…nçµð,z½œo@ œãû•ŒC® Í9Å…æÂðµÐœÿ9Ph¾"KEæpç Ì·`YUÇ5÷4T‹Ë·ô ËqLuQ9ε.(ù¼È6^GçT7“üµX¶ñÚfTC÷Ú>Lh¿#aWÅqÈt²K¡ í¼ÉÞâþóæßìÙÆk;'Úy“mü›=Íá˜7Uqò¦*Ž“Òys½7‡9ÜysÃ6®qhƒ÷Ú>Æéµ}X³½¶á^ÛG›^Û‡ÒkûK½½¶¥×öa÷Ú>¿#a,Û¸f‡Šß‘¨4£ÿ3Îß¶ñ󴟯¶1=¥„°o¿ô´ÀZï§Ô✄K®I¸%á) ï’ð> J˜¶ñ:‰Ó6. ÊçÔÕ—4‰_“ð-uõ= ?ÒþLcüJ]ýNŸԕlã"ŽÆè.* ã†m\½FÙÆióÈÈ1މd#IÅLRi(Ç8MåPË Û8à'Û8ÍÁ§¨4šÜk¨â8ÓpŽC¶›Î Û¸bÃ:®:ä$ÙÆ!É6NmÑ Û8´Ù™QdEÙÆ©&MÛC·Áò(Û¸z£bF©8iR1£4zÍ(Þft–ÍèPœ9§m\×C¥sç0zÍ(Û˜Q*f”J3:ŒÞftÃ6^£Þ¨8NJ3:Ú4£ãèéft(ÍèÆqÕ×çft˜©Íè°?›Ñ Û8Ü9UWÈbª8³³oF‡ÉÙŒŽØšÑ¡DF÷‘Ñ}dTÇéJÍ(žUW*Íè†mœæÍŒrF#£ûΣcvz™˜QŽcF©˜Qäf”mz­ß¨8s ŠãÀŽ*Ž“ÒytŒcFiO›Qnc#£3Ê6ftÚÆ53J3µög3ÊÍ蘃ftôfF§m\QS1£¼žÈèÁŒ²å8f”Š¥bF©˜Q*f”¬ó(í\3JÅŒNÛ8äkU'ÅŒ263Šë‘mx;Æ<*Û8<:®:)fO½*ŽS3Ê6q­?Ƶþ×zÙÆ!+«â8)f”±5£Ã¸ö~» ÙÆiïGiB{?JÅïL4½¥Áçý(-SïG©x?J3ÕûQ*ÞR‰/ñ²×ÙáÿòË6.…WÚŒŽ6ñI¶qÝþð_åO^ëy=f”¬å]0£TÌ(3JsØïLÓ6®+¥bF9N|g’m\½±M|g’m\mhð™Q*f3*Û¸z£bFiÍšQ*f”Ö¬¥âw&Fàw&*~¯§â›hƒ›Q*f”Š¥bF©DFUq\sM{ÚŒ"¿É69þ󨎫Nmâ~TÇ©elf”Š¥™êµ™BÇU×ì°¥bF§mÖU§qÌ({3£4,Í(¸ÖqÕáÙ–mrˆlã¤DFe§6fÏ©Ž«NmÌè´« ïœ{š¶ñÚf£â8äÙÆDÙÆ«²0‚bta½«lã{›Q¢+Û¸ô&Û¸<Ûª8^–è¸êUáÞÿZŒÎÂâÊ£ ß1t^õÚø½£Óž.F‡o[ˆÎZäBt*…è(à-B‡£[€¾¡;\|ŽÓ² Ïe\dá¹<Ð.<‡ \t<œã´èÊŸsÊŸÓ.6_3®Bs|!¹Èǘ˜oXÖÜ\ò°tV½RñŒ&_qÉ‹T¹q„ˆuVu üåätgËñ‰ãÆ’®œ Žë¡eo:°ˆË9^ÛŒqüšDwÖ©“½ÅŸíåWboq ª‚ãµÍ¸ÒNt3uVuµásê¤bS‰Š]%*:7 Ž+rÐËû(_îå}”p÷ò¾á×8XUpœ”^Þ‡ ÜËû†s\½ÑSîå}Ã9wNÇIñkÒtŽS¿&¹ÍßÎñ‹tŽ_¬Î1­%û†s\-øîÝ-øW!8'á’„knIxJ»$¼O‡ð|L§$|Nc|I“øµ$ûo©Å÷$üH]ýL¯$ün”üI‚œãâMTpÈRÁñªl8Ç©·cŠùñlj@>6‘ÃOm$‡ÒL%B©§+m,GoÍåpgÌQÔÛd²ØVÇiF›ÍqÎ ç8õf<±ØÊ99IÎq)HÙrŽ“bD‘úÍ(“¢¥bFé;aÒÑ=tlÓ9®¨é€šQ*Íèð`Í(Û˜Q*Íèp@›Ñ ç8EmFé]›Q*f”ŠÎqŠ ÝpŽ×6ÎqRšÑѦ^o3ºá×8È|»ftœbÝŒǰJ3:¼D3ŠÝ›Q*G7 Žëzè%6£#¶ftÃ9waoF9N3ÊgAÎq DÎq)tÍ(žS9ÇÕ†Jdtï<ÊõOÅ‹<¯òTÌ(gÇŒR1£ô‡;Ž»mF§s8ÐYÕI‰ŒÊ9NmšQƦ‚ãÔ¦óèðSÍ(7¸f”JçÑáÛÆ<ª‚ãÀõ¡½5£CiFÇ4££Lº>t3:ÚDFõ¡ãðüÈ9NwÁŒNç8ÍNdô`Fùf”wÎyŠ>t\Ð5£TÌ(3JÅŒ23ÊÿÅyTÎq˜k9Ç!óÉ9wNÎqjcF§sœ"ˆŒêCÇ©MÌ£rŽSlf”¬E¾ÖYÕ)ïG‘aÞrïG©x?ÊÞ¼Îq]étŽ“âýètŽ«ÍtޓߙNÞ²7ïGùÚßâå¯l'ÅïL˜79ÇÕ†J|g’s\sÀ¨ã;ÓÉŒÒm6£t›Í(çÍŒ²7¯õÓ9®¨éõšQ²cF©˜QŽ_ëå‡ySÁq J:.…ž²÷£Ó9®6ôFÍ(3JOÙŒ²ß™¦s\Lç8)Σlãý(3:ã4ft:Ç9Ç¥L縰RÛ/ótɽ åìÄä)ï8¤Õ›“'ïO'ÏQóëî‘Tu\ãPéä¹Qu\mx:y‡¸øÁA/ðÞqˆí©øá*÷¿Qu\½Ñî~´é~£ê¸z£ÛÛ üFÕqjã¥é§6~QJÞñËôŽ_¦ªã ì—øsO ü ¤¾&•0½ãu ué€ðÚÿç! O©«wIxŸÂý„Iø”ÆøœZ|éID¢ùšf÷[¾'áG~&áW €áwþ$AÞq5½ãRXAl1+‡ØÛ1]Œ¼ã4Î9;¼ãÔ¦‘Îí-¶i(G›¦r(åPšË ï8Íu“¹á§6f“÷§á®²é9Æ“ž®ù¤Cl@§wòØ£Þqµ™ÞqJ—»¾§Ó;®6Ó;.…h3:üÙft(f”½™Qº°f”mÌ(3JÅŒR1£TÌ(•NžÃ oFÇtúJ3:”ft(ÍèPšÑ ïx½§CiF‡ÒYt(ÍèP:/¯óèPšÑ ︢¦ÿ×yt´‰Œªê8p­ªã¤4£ß9®Ø)ä—‚CUÇá.È;NWÕwŽ+jºÊf”Šó(=Ýf”¦ê°ê4;^ä9Žó(Çq¥ÒytÜS3J¼Ò³7çQ*^ë¡È;Wªªã¤x­go^ë©x­§âS£âãUáø*>^ǧÏc<éOV]Æ'›ÏQaÜ|òHJÕ¯¡ñ,wùÇ•"87@ŸMÿøÞæáÙôW…'Ð߼ȳ7'Pl^å¯½Ñ PíñªløÇIé:ÚtÝð«7Þ¹^äG›^ä7>vœzëE~£ö8\jK¡KÜ‹üFíqjÓ‹ü†\m¦œ¿,±_–¦œzóËRò_ý£üjõ±\í– ì[ào-ð7€$œJ˜þñ:ø8V$µ¸¶Àì‘„§ÔÕ»$¼O‡tS‹OIøœ„/iŒ¯- ›|KÂ÷$üHcüL-~µ0üãÂlÿI-äâT{\ eÃHçòÛÓÅÈ?®qØÛ9öv‰J#9œØ[¼Ò†r´i*‡ÒXŽ:bsÉëi0G½r“9zk4‡b6y 'ÓI÷ÖxÒ 6ŸÓ?®;7ýã¢ü㤘Ñé‡qtju)Ó?.eúÇ¥Ð;5£t|Í(Û˜Q¶1£ŒÀŒ2j3ÊÞÌ(3ÊØšÑáÄ6£CiF‡bF9Želf”mÌ(3JÅŒR1£TœD©8‹R1£¼žftÃ?^©ÚðKA>Øw•¿G7üãÔ[dTþqO´ݨ=Nã4££M3:¢ŽŒªö8Åæ<:ýãÔÆŒ²ÅÝ–òÁ>2ªS«S›È¨>vœÚ˜QFmF©DFõ±ã0;ò“â.ª¨8bFåW*ΣTÌ(xÛ›QF`Fy=‘Q¹Çᙓ{œ3Ê»`FeÔf”mÌ(çQ(rCÔª>NŠó({s¥âNWjFéušÑé§Øb=˜QöÖŒn¸Ç!_Ë=NJdTîqeV7£îqÇŒòzÌètCrCæ“{œÚ8N÷8D-÷8)fôÊ=ìÈ=NJÌ£rS›È¨ªSÔq­?:â.È=N˜QÎó(=bçQ:ÁfùZÕÇ•¸•{œÚ8²73JÅŒR‰ûQ¹ÇvªrK¡Gß™NΣô:Í(•ft¼Ü7£CiF7Üã5êêã¤4££M3:ÆiF‡ÒŒ¥J|g:™Ñé§ûcFéÔ7£#‚ft(ÍèPÌ(c3£ŒÀŒN÷8\ªK™îqÝSä}ó8ÜmU—‚§þÜŒ’U§qâMçÈèÙy”^´ó(•øc“Üãš¶ñZÏy‹ïõgçQ¶1£ô•Í(}rçQþG€¥â<ÊÞœGó(3J%þòt6£Œ æQ¹Ç!Ê=NŠó(b“{œÚ8²×zúÊf”mâ{½ªÃʤêã›;rÃÓ(÷¸zÄ‘Q\žFU'%2*÷¸®$êäê)ä¯Ê†{|WúfrWeÔ £Ë+Þ¹bt¡s(÷xíí%Û£ËKä}óxm3>¹[Œ. ò¨ìãµ OÒÉÕu=ˆàZŒÎÞŠÑá¢åÇ3²õµ]h˜\‹ÐYâ[„. ’ð1 Ÿ’ð¹¾ð}I-¾¶€ûñ­ì¾'áG ¸ç?S‹_Iø„?i 9È89ÈR}û¸<\:¿:õfé:ŸÒTÊAN½™Èé §ØÌ$£6”TL%Ì£±dsÉ+5˜TL&¯§ÑޏÙd†“Q›N*Æ“Šù¤b@A$TõÇéžšQô&9ÜS9È)‘šQ̨äÁÎŒ23Š9Ø™Qºf”½9mR1£tBÍ(3JÇÕŒR1£ìÍŒòzÌ(ç 2º3£ìÍŒR1£TÌ(3JÅŒ2j3JÅŒRiF7êWª6äR°«þ8)ÍèFýqjcF§ƒ\ÄS1£ô.Í(ýÛȨä‡mÌèt« æZçW§ÞÌ(Û˜QŽcF©DFå §"£{3Ê5£TÌèt+‚é 'Åyt:ÈՆޫó(çQ*ΣTœG1ׇ˜Gå ä ‡»pˆŒÊANmÌ(g'æQÕ‡çGçW§¨Í(ÇiF‡KÛŒn8ÈánËANWjFyÌ(c3£T"£ª?NT92‚Ȩä0×rèþ8)‘Q9È!ê£rÇŒ²¥bF©DFå §âZ/9µ1£¸?ǘGUx;:"+ã~Trx~t~uRâ~TõÇ©M\ëq­?šQ\äû79È¥Ðë3£|7£ÓA^{>d3ºá Wì-¾Å«þ8µiFÇ8ÍèPšÑ 9]O3ºá §6Íèh_çOñ}^õÇišÑ ¹bìúãÔ›rµ™rRâ{½äÐFçW‡•ƒœ”f”?wÊAs 9)½ÖsFå §6Íèpª#£ª?N×=w±Åß›ä ‡»}v¥·ìiéÝšÏW؇ÉB®çt¨yUžƒi!¯ «Úe!—¨ã^ôæÊÙñ^Ïõ­s(ÿ7äÖ9t(C‡Ò9tÃB^¯gÌuçÐ ¹Ú`Þd!'Å{Q¸Þ‹Rñ^”Š÷¢ŒÀ{Q*Þ‹²7ïE©x/JÅ{Q+[ÈoÿÑB~»ZÈàj·”ÀŸ›“pH±„ñæ“„s.iŒknIxJ»4øû$|H]}L->µ€W¾Ï©Å—7êk È3ßZDß[@Úþ‘ZüL¯$üNcüIáÊB(ÊB.…¶æ>/ 9µiÇaЧ[9 pMä´+Ìÿ£™¤b(©4•ÃÀm,‡b.[ƒÉcwT„\QcòØhrÃõh6µá¤b:‘0õ 䊀Šù¤}4¡œƒˆè£¥ékFq=²+j<†*BNŠe›ÈèÎŒbd!‡;·3£´56Ù›¥bF©˜Q*f”Š¥Ý™Q¶1£TÌ(3J%2º‹Œî"£;3ÊqÌ(3JŌҌ5£TÌ(•ftÅÍ膅¼ò¶Q„œ3:-䢗¥¥bF©˜Q*f”&©e3JÅŒR‰Œî#£:Â:¬²Ãj¦"äÔ&2ª#¬«Í´Ó]0£¼R3JÅŒÒ4£ÓBYìàœîBÌ£‡˜Gf×# 9Ä& 9\,ä›>œz3£ŒÀŒÒX5£TÌè´ÃS¯"䤘QÆÕÖÕ#0£ŒÚy”ãÄý¨,ä4×1ÊBNm"£²ÓÝŽïK²S›È¨,ä›ų- ¹Ú`§* ¹Ú€ftZÈk›ñ¢ž_áÍ({3£ŒÀŒÒÞv¥ÒŒnXÈ)êø&Нò:Â:õ_æu„uµ¡_çe!W< ²SoÍè(·6£¼ f”wÁŒr®Í({kFÇ]0£,¦5£TšÑa’6£Ã¦í<:3Š» 9̨>œ”ftÄjÒÖõÌñJãM*B¼ÉBOðÙy”ö©ó(-W3Ê‚ïÈ¨Ž°Nĵ^Ÿ@™OGX‡\% 9)f”3UrŠ:þö$ 9D "äp=²S›øÛÓ%¾×_âoO:Â:ãÇ®æÚŒ²}N/¸J3:Š_‹Ñå #(F~úîZŒÎ‚æbtEÐÅèò +Ƶ]^ãɺ£ó€ëbtáï½×f”ÿ¯pmFÇQÑÍèšÑqìs3úÀykFç1ÖkV^˜‘®f”Ny3:îidôÚŒ²˜õZŒ.cvŠÑ¡ÜŠÑáïߊÑQÔ}+F‡ï~+F—Wz+FÝߊÑa¢$çV„Ny½ÃÀn>ŸÑ>m>ù5ò[ó9 Üæs|í¸ù¤9wk>Yk>_Óî½è3Îf¯óã#Õ^çÙÆ{Q*^çñ„ܼeïEñ¦{ëu~ZȽçÅSuëÊ]÷“×yŒóäu«ÒSçÐaÓz/еôÉë’…\ h“…œïEÙ›×yÌ,äêmZÈ)6¯óÇ{Q*½ÎCº×ùÿQþ¶þÑB~§X?aŸ„CŽ-ð/ ç$\’pM­¤ˆ§$¼KÂû@Ù‡ÔâcŠêS>§®¾¤Á¿¶Z¿µ€Åæ{ Ü_þH-~¦¿ºßIø“YÈE.DrR #Û˜F„Æ‘¦â)Íñ£do&’Š‘ä8‘ÉÇ¥,䚎±|4—lc0©˜L*MU!Wl¼RÉGÿÑtRi<ljáæ[ÈÇ”‹“ª+6ŽcD©˜QVíšQÚÁf”mÌ(•ÈèÎŒÒ\6£´(#£²;²“bF9Žel‘Ñ]dTrŠ 2* ¹Ú063J%æOYÈ©73JsÙŒr3JÅŒ"WÉB®hÇ4* 9´Ù›Ñi!§6f”mÌ(3J¥Fq3ºa!WlÓBÙoFqöf”Š¥bF©˜Qܹ½¥bFiíÆ<* 9äQU!'ÅŒN 9\„.o°×¸6¡4Á®M膅¼ŽCNrÍ'K¾ŠÐùâ"tyE£¸ e¶V rQ€{p5¡œÑ&tÔn7¡£6¸ ݨA.v9£MèøÔ° ¥nBÙ› ÅûÊÕ„²MÊ'A5ÈuðN äRxšQ~5QrÝD ¹z›òª ó°å¿¨¹žZÕÅè°Äo•ELJ¥å!¯½C¡‹QÝß ÑQ¸\„?º}F?¼GP^fÊrs!‡NrMÅ[:¼å^æÇÔô2? —{™EÕ~]¢·¢rïQS’oq™—ƒ¼¶™çX·BÇÕË<oEé-÷2?\ZoEñ ÈAN±y+Êz™ãô2?oEÙ[oE£ƒüüä竃L{ã!û$Z@–8¦§Ô✄K®I¸%á©ñ. ïSW’ð1 Ÿ’ð9 þ¥ ñµ…á ×ò*L¹Z eýì1 üJÂïÕŸ$ÈA®ÑñØÉANŠaĬ<šÆé WoTÌ#IÅDR‰H>F&å ‡§NrŠÚX2sIÅ`R1™TŒ&W³Ig×pbу\×Cå{T~DÅ€2JňR1£ÓANéÒŒâzvf”ŠErk*f”±™Q*f”Š¥bFÁŠ+6ºèf”JLrSo‘Q9ÈÕ†.­¥ó§äêή¥bF‘«vf”JL¢rCÞUrÈárƒ"9)f”ž¯¥kF鑚Ñé §šÑ 9Ìα÷Gr)˜k9ÈI1£lcF©˜Q*f”JdTEÈ^9È¥à™“ƒœÚ˜Qú·f”JdTçX§y3£¼R3JÅŒBQr¸!‡9ƒœ”¸Ö«9µ‰{O9ÈÕ†nc\ëf”©¥bF©˜Q*q­—ƒœfÔŒ²·Èè!2zˆyô=DFfÄÌ(÷Ȩä4f”ã˜Q(r;rÃ8r“bFñ,ÈANãDFå §6fw[EÈ©M\ëuŽuºž¸ÖËANãÄý¨äÔ&îGU„œb3£œë¸ÖëëêÞ²¥‹•ƒ\½1‚˜GuŽuº3Š{*9Ì›äRµä›äÔ[~…7£ÓA®Þ¦ƒœ3Ê6f”¶e3J7ØŒN¹b›rŠ:¾ÍŸÌ(=y3Êqâ;Ó)¾3šÑ yz£¹–7£rjÓŒn!‡ÎÍèhÓŒ¥J3:3JWÓy”Šó(ýÛÈèÙŒ²73J%2zŽŒª9(¹ð&9Ý…ftÌ[dôlF9;‘Qcž,9ÈIqå¼™Ñé §+ŒÊA\ËANJdTEÈázä ‡;w‰¿=©9EPŒ.o±ÊÈA¾·þœäUyÎ6Åèø$ªÎ±®6t·‹Ñé-£ K/U„¼öÆóTå ¯Êð‰‹Ñ…ÅŸrïmF¥o!Ê/óªùÞâ5/¦}ƒ Î°^ãâ©ÆrW…n§Üãºì­ÖùXáÉÒJ¹Ç5>ž`½*ŒùZt.¼ÌkѹŒ“²‹Îe” ãTòkÓ9Êr›N®"*@.èêF:U€¼¶E±¦“³Ót¸é|ÀŽJ'XWltN‹Îa“NÜêkÁ¹ŒŠî¢sá?r\ Ïùeââs¡u+ó8<î×tDЀc»Ÿ`.B—˜6™Ç•"pKe‡ ÕÖ5måF”èÈ<®qèƒ6¢<ü\æq=>lSˆòDý[ÊgTÞñš<=oÅ'ÏÐÖ÷Þ-:ÇwŽ:9HÃ9ªŸ;uŽc²›Nþ‹œãš:ºMç8ô»—÷Q¯ÜËû'þÜtóòÎ;ã×$*~MbÔ^Þ1o:¾ú~¥ÃiõòŽgWµÇՆз tg½¥ÒËûˆÀË;ÛôtÃ9N×Ó[ÐÚãÙæïÚãÿè¿HÎq ¬iyÂ! Ç$œ’pnËn®I¸%á) ï’ð¾ÜãIøØXþ”Æøœºú’„¯iŒo- ™o{§©«ŸIø•„ßIø“®CÎq…é•s\ ÝÌ}+ TÎqÀT_@NŠyä8H}9õf$›™¤b(éΚJ¶1–ŒÚ\R1˜TL&Ç1štZÍ&]à†“o¥rŽ×yãæà±ñmÌ'Ç1 TLètŽCê{4£t@Í(3J¯×Œ"6}¹"˜ÎqJËft:Ç©73ÊqÌ(3ÊqÌètŽSÔf”½™Qö•s2Å.¦Ï¥ ìÊÊßf”>§¾€\°73JÅŒ"íÊ9®Þfíqnjҷ5£tÍ(]`3JÅŒ²7çQ*f”±9R1£TÌ(3JÅŒRq¥bFy=f”Šå¼™Q*f”Š¥y_ÙGFU{x“s\ ¯4®ô:¾:E`Féþ™QzÊf”>§¥ûgF©˜Q*q­—s\×Ã6f”JÜ~ê È©·¸Uíqj×z9Ç!'ªö8)1Ê9Nm"£rŽ« ï©å=5£l÷¢‡¸•sœ"ˆÛQ_ÚÈ9NJdTÎq˜7Õ'ÅŒÒë5£TÌ(3:ãAdTÎqµÁê¬/ Få'%îGå§6q?*ç8ÅfFñœÍ(gÇŒÒëŒê ȉÈè12*ç8ÝŸøÎ$ç8´‘s\ Ö99Ç¥ÐSŽyTµÇÕ†¾mÜê ÈÕf:ÇIq¥ŸUíqààdF¥bFy¥f”.p|›—s¸>™QöfFåìø‰.p3ºQ{¼Æ¶Q{œ”ft£ö8´97£Ã™lF7œãš7:†f”Š¥bF©˜Q*ñIµÇ^9Ç)j3J§ÕŒânË9Nã˜QöfF©˜QŽcF©˜Q*‘ѳeΣìÍy”Šó(•ø^veΣP䇹–s¯.âYÛ•sò¨œãR°2É9¾+ãK±ª=^9rŽKalÅèø,p!:¾$\„.¬9Õ÷ï£ðbß…×¼–â“Ö¤Lã{‹áÀC(8Ç×…‹Í!šüž¨*Žïƒ?§—Ü`"GË1^/XÊ0®‰g_…åÂiªàxí ;9Æ«0 ãp{e¯Êø|qA¹lœX½¶á?¨ÜxUƹԆ3 rã•ÖkC9>l\PÎBä¢rœ‚®rãuœQˆ\XÎÏ1—Ë3ZÖæ¨Å.07üâûø¬?•]¼ £Àv˜óò‹Ì…åë2‹×ËÞw±¹ ÅpÒân8Ÿñv6œt„ NÖµË*Þž9ÅÅ&=¿f“?´É).Ò²Nª®  ¿ÚlŽ“•0Ù[³9*€‹Íá.w¤‹^dò¡¹˜Ìe:§z²iß…1xc‰‡L%Æk Îqa9þàV\ŽC'tFõ½³‡q‚w/æ„LgT¯mx°ƒ|âUyÁËôbΨ½á$½˜oT¯ã ÅNºÁ^Ì©ôb>>€Ü‹ùpi{1ßð‰+¶é'¥7œÆ©Mo8c…ñËô‰_®>1æg÷„}I8&ᔄs.I¸¶À§6 OIx—„÷IøÐ€Iø”ºúœ„/IøšÆø–Z|oÏÞÔÕÏÔÕ¯ÔÕïÔÕŸÔ•|â@œ|âRè]F¬oò‰« ãHÅñ:;Ci>Ç8túÄ5×¼#Ê90£Ó'½í"£ª0ôÊ'NŠe‘Q}æ8P¥3ªÓ8fs Ï§Þ"£»È¨Î¨NDFwf”KSÌžò‰kdbùĥХu>qµ¡âJÅ9túÄ)gQÆfF©˜Q:zΣô!Íèô‰+¶é‡¨õ™ã¤˜QÆfF©˜Q*f”Š>ñÛ¨dnF‡bF§Oœf'.ð{3ÊÞÌ(•Ȩ*ŒS^åyçâ2/Ÿ8Ý9çÑé‡'K>qŠÍŒNŸ8ô¦ ãR¦O\Êô‰“bFéCšQŽcF©Äݧ*ŒSf™\gT§6Σ¼Ò¸•Oœf42ªÏ§6f”wÎŒR‰ŒªÂ8¢ ã@¢*Œq3*Ÿ8]OdT>qˆM>qˆMÆ©×zÌŽ|âp=ª0N½™QöÕgŽÓ8f”N¨¥{×zùÄiœÈ¨>sœÚĵ^gTW:Õf”ŠýÊÎ-GŽdI²[̺‚¬Ëªî\ 3^‘|¿ÉßÞAôúG7Uº|ð—B537;®î’jFÅŒÒA6£Œ1£Œ1£T"£ò‰£ò‰ñY/Ÿ¸bè7£|ÎÉ'#P…qXùÄa.1Ê'®ÌÎ%¾^âû¨ö¨w£|ât=‘Ñ‹åØÌ(•ÈèÅŒ2ÆŒR‰ßó3JÙŒÒÝnFw*Œ×ììøÄIiFGkÍèPšÑ ãꌪÂ8)ÍèN…q­öô‰“bF§OœbÌ(ÝF3J%~3é˜ãpÿ\ã³^>q¸Taœ”Ȩ*ŒÃ]r?9]Í(èU…qAÌ£ª0Nsó¨ö¨N1Σtãwý5~×Ë'×#Ÿ¸Z‚ΣtãoOò‰S?Í(Kåo1‡±ss1zµºÅè8}¸}E³¥í¥òâ­{þH-—x^¹ÄKÀ{†j‹—À©l8qjoê5_´» ÍQ']d² S…Åë:8ªârlÍ]X¼¨äYÄr‰·>Fñr1y`>“I¼Vwì\L#²G!‘‡q¤>>&áS>'áKêükŠø–„ïIø‘„Ÿ-€ùÃ5Yt3[¡“géþ™F*çnŠyd?’Љä¨$cÌ$C9ýášé§y3—ŒyçÀdÒim4‡;ÛlîøÃkl;þp)x•TqRšÏ¸æ`úÃ¥L8)f1f”Š¥•?F ¨“•?œbÌ(ÇfF©˜Q*f”Š3'§NúÐf”N¸E¦Pqzh9}N¸bèÛ:N¸b¦?œZsþpŠqþpŠ1£Ó®*ftúÃ)ƌ҃5£TÌèô‡ÃõÍ(VN;P§3Ê~Ì(ÇfFcF§?\#à»PdTþpšQ3:ýát¥f”+ç§üô‡«5ÎhdTuÄif”­ùQOÅŒÒu¥bF§?îzaœ3ÊÖÌ(²‹êˆSkñíSþp DuÄI‰/ ª#N1ñTþpXmÕ'ÅŒÒëŒjêÀµêˆKÁ='8)~eL|UqºžÈè)2*8´&8\©üá¤øY{[þp¸³ä‡Ù9Ç<ª¨!ò‡“ó¨Î0Nc3£tMÍ(Ýf3J%2ª:â4êø¬WqÅð{ÓŒR‰KÚ:ÀŒÒ=7£¼Ò˜Gå§¹6£dnjҎŒªŽ8P%8Œ@þp¸ä'%2*8Ü%ò‡Ó"£ò‡SkfYLuÄiÔ‘Ñ‹Åj_"£ò‡S?‘QÕÞ䮵u)tŽÍ(Þ¼/f”Š¥bF©˜Q¼Ç_â7“êˆkÔhMþpRÌ(Ý?3JÅŒR1£AüfºšQ¶¿ëUG\ר˜Gå‡Õ–?œ”Ȩv TÉ÷œüá•?œÆó¨üácFéC›Q*f”smFq—ÈW*8ÜÁò‡SŒE?Ú:ܧò‡S?ÍèØ}¹¥í£2â­±Wt<‹ÐqDnJûNçoMñ×x¹Ã5àÿ×ÿþçßÿõßÿù÷ÿŸÿùÿWîð&°VOîð&ŒŠ‹Mºª!^c%åoKµíô&Ð?ѹś0ÌFÙÃKmqyø“ý—‡´À‹Kî7+‡8LdQ9«±‹ÊY*[TN°¨>lA9÷<.(¹ÄrˆF¬V.$ã(ßBr–·“‡a8”c³ò[Q9·Ä.,Ç–Ë…å8渰<Œm¼‹Ëÿ4B›NoÀívo &n°[9vê.0ÿŹ,0GAvqɪ÷[aù ÙEþðº+8ª‚rlÓ®£Šü<óVG'¥±ŽcaI{\Ä+'ÐíTI¡ Ç!7”¸HÙÃû9AöðZEÜÅ:£x]"ÿ2@ûL—‚÷m4½££YD¸ˆä:Ê^¦i^@òïîÅã¸íuBq¥7|¨|¸ޏ*‹Mæô‡«5*ýß©®ÌÛs¿hŽô‹æŽ?œFÐ/š;þðŒùÕþë7ýá¿–?ŒYx|„cN- ¸š‚pIM]“ð”„[îIxNÂë°Èo’ð6 ï’ð>uþ! “ð) Ÿ“ð% _[@’ùÖVð{~$ágä&t3Í"’Ńa¤/h©œ»*æ‘ýH*&’£6’TÌ$CIÅTÒ‡6–Œ1—µÁ¤b2§?¼ÖgÇNJÃ9bšÎúáÔšùäØ èô‡‹**F”J3ÊQËcSýp)ô›Q>¶äW }Áf”³óØŒŽ±5£CiF‡ÒŒÅŒbvtBq¸OU?\Êô‡“bFA¯ê‡ÃcCþpzh9}"w«~¸b¨8rœA©8…²53JÅŒ’gÑéרã<:ýኙþpRœGÓŒŽzÛft(ΣtgGéf:rΣTÌ謮+þpRœG§?Ø9FFå‡•Ó Åi"£ªN#ˆOyí3îÕ‡ûGþpRÌ(=rçQ*f”õTâ{§N(×#¸<uBq¸ž“eŒ¥bFéj›Q*f”Šó(çQÎŽ¥âëåרé2šQ*ñ»^õÃÕj3JŸ3~׫~8-¾ÊìÈNŠ啚QΨ¥Õ ÅifÏà«åØÌèô‡Ã,¸ä7ùÃ¥à>Õ>ÓaÔò‡“ó¨ö™^1,óRýð¦ÆþÈÅè(.Dw â­-þê.ƒxXG'ƒxÆîÈ…çØ°ºè<üÁjà¢sÔ1Ê"^×È'‚<â¥ð—™Ä¥àž’K\ }Ý¢sØ—Úkz‹‡=œcö‹Í1äBóoSdÃUUÄkÄÃq,2§á[dŽrÑ“FÎ&^½ ÷¸~kaI’TD¼Ú¢}¨¦—2ö9.,ÜÐ[qŒ…Ç&§_ûL/béŸ6˜L²,‡¸ðC–E¼°I²ˆ7aÔ]–c*‹JÖô«†xkŠÇáÊ"^àb’¡‰×pyÅä(y.&™vT@¼:ÿõCT>\K¡xäQÕÚ_z #‹G‹FºÙ2‡·–þ¤×Z4S™Ã#»Ìáp3È^KKs´X[k‹ãxâbqœt\,Ÿ¹Päæò†÷I”5\Bg¼3$ÿ¾EÖpM ûÎÜ6à^4Îã© Çom-½õóbŒÀÏoŽ Ÿßü½üîßå±þ²†W?|J¨t¸Æôó{X¶ýüÞ)®Öh÷ó{´Öï˜Ã¶îwÌk8õÓï˜;ÖðŒùÕþû7­á¿“5„ã‹°¦§“Ï)âÒ_ü’ð”„[îIxNÂë$¼IÂۀ߻ñ¾ ö!ÍÕÇ4»ŸZ@føÜRï—$|M}|KÂ÷$üHÂÏ$È.°¦5œÃH‹³i¦dã8”æq(×ÛPšÈ¡4’Ci&‡b(iW6•#¦±Js9ì×s(MæPÍ¡4›c çŽ5¼ÖtÇ.…EÅæsZÃEÈ´†“bD§5bd —Bóó1ÝTÚZ:µæŒIûÕ)“Šs&•f”oÑÚZ:Ài“­9oòJÍ(gNÚ¼NŒqîÄSCÖpxÐÈN-§Oþ¥“ó'[N TœAÙšS(3:­áõ´†“bF§5œžÏf#8šQ³ftZÃÕÏ,^ÊŽ5œ”f”ßÓ*Ný˜QŽÀŒNk¸Zãõ˜QÎ¥ÅiFAˆ¬áêôÊ.…«=šQŽ 2ª#ˆÃ]"k8)f”×ôG?écF©øY?­á@¯¶–NŠekΣTœG©ÄwO•‡•;™Q¶fF©˜Q¾.;R1£TÌ(3:­át=f÷‚¬áp7ÊNŠ¥ÃánÔÖÒ¥p1ªt8]¥ÙnF©˜Ñi ‡~T:œ3J{ÏŒbvd ‡Ù‘5fGÖpXYÃKa†=7£CiF™Ée §4£#ÆŒòJÍ( Óø¡$k8ä•'%æQYÃ)Æy”+gF9j3Ê+5£TÌ([‹ÏúsdTÖp¸YÃaåd Þd 'ÅŒÒÈŒŒÊN#ˆ_ñÚZ:ÜY*Nc3£´“#£²†ë.Á{¯J‡Ã%k8]O|ÖË®äk•§•3£œk3Ê+5£TÌ([‹yTÖpºR3Ê~Ì(ú‘5ÖT¥ÃI‰yTÖp›¬á0£W3ŠU¸šQÍf”–­Öp€1f”JüfRépµÆ~â7“J‡SŒåÌ(û‰¿9©t8õcFÙZüf’5îmm-]÷)-õ˜Guq[3:ê]›Ñáó5£#¦eIš¬á5Þ)T:\ x“5¼”ÑZ1zuªÅèØû¸ýÖú©²èðY ÐÚám\ãàÂsì¯\tŽúä‚s˜ÉÅ&ùÂ[çtVd ¯Q! ÉÞ„?AŸJ‡7al„ÝXÒÈ.*G©sAÉêTÕ o}üæ ÉQ6+Ox ®ŠÎ^Êð I­ó‡×¬Ð, ç^Ìä¨hÖñÃ[c£ ¶xgáxçØÃÊ,yÄê­xäß0È^ L¹xç(4ýe¯Ç5c¼$WXçï“z+ Ç4¼Ge¯‰GÊSÍðB˜žwgI4™;NpŠi6wœà4¶¦sÄ4žC1Ÿ$Ä€N'¸¨¢bD§bä'%2*'8p­"á¤8eN'8ÀI“1ΚTœ6§œúqâdŒ3'§ÎéW?³H¸>šböÔ!ÃCW×ù“ýÄúè ʧPŽÍŒrf”î±³(3JÅy”Ïg3J?ÑŒÒ4£ôGÍ(3J·ÕÏu*f”Š¥bF©øÙα™Q*ft:ÁÅg'>ßåW çÚŒ²3Ê~Ì([3£\íȨœàpg©H8)f÷©œàt¥f”×cFé¿™Q*‘Q ‡õQ‘pRÌ(û1£tNÍ(3JÖŒR1£Ó ùM›H‡,vrNpÅÐS5£T"£r‚Skfw£Š„+†Š¥GlF©˜QŽÚŒR1£Ó ôjé hé@•œà󨊄ÃìÈ NŠÅ•Ê ë#'8)f”­Å<*'8µfFéhšQö㲃î£ü·ŸÙÃ>íg6w\­Éç~f›¶ŸÙ£µ~¯J¿Wîœ)\#ÀÍòÜï•cýí³S<¯ç—Âà—üž¬ÿÿŸÿï^0>&ᘄS ü¤OÂ¥¾¸µÀ¿ïJÂ- ÷$<'áuÞ$ámÞ%á}ºòIø˜„OIøÜíà$|M·$|OÂ$üLÂÃC+´çÌ"ÃH¥iœvpõ3íà¨\£ò•FrÚÁ1¦¡œvpŒi,GLs9íànmØÁQi4gap[Ã9 ƒcÌ—ÈAäóÁ€;8¶ÖˆŽ±5£T›Ñ¡DF#£Î˜´OÏiÔ3Ç"£‘ÑÇÈècçͱӵ;9ÇNבÑG3ŠŽG'OZÈ1{>:}Ò¦uþä\;²Ÿ˜AÍ(cÌ(-d3JÅY”ŠÓ(¯ÇyÊÑy”Š¥©hF©Ä§úьҼôsJ3Êoâc3:?ÚÙšŸíTüp§â§;?ÞikúùNÅŒR1£ìÇŒR1£\3Ê55£`ç=Æ=›QZ‡f”J3: i›Ñ¡˜QšŠf”Ö¡å¨c=›Q¶fF± g3ʘ˜GÏf”s?”ÎΣ¸çΑÑsdô=;rÞœG¹¦f”Š¥=;2ÆŒÒð4£´çÌ(cÌ(çQ*ΣT"£3Ê3J{ÛŒR‰Œ^Ìè°ƒû®§bF‡cÌ([3£udô½DF/f”£6£TÌ(GóèÅŒ²µf”¹êÒŒ{.2z5£4}›Q>®1^Í([3£XŸkdôjFq7^Í(•ø>z5£4IG©˜Q*1^c½šQš¾ñ'§k|½šQÎAÌ£W3Êë1£TÌ(­w3Š|}uåj›QôóÔŒÎÂà~wáO‘Íè ÌÁS3:vM.FckâbtZ»ÅèáOº¨Åè•OÅè< ·–l!:Êv‹Ðyn:ýÒ"toúT„N'µJ:[+B§R„\·"ô@Sâ©=p¿Ô§"tÎt:GP„þມ±>¡‡±·ozàï1·Ê¢t±n(M„[ñÉ’ç[á9ÌÉ¢sÖç8©¸ØgûšäìVdÒú¿™ÖÌß Í±mv‘É¢næ8¥¸¸äÏj·Âr4UTß½ •ÓÅä0ä ÉQˆ\DŽ]®;e"ÇÝšGúô…#‹Æ FzÛ,¹gôJˆ4! ùeô Àûǽ($iA…ìº ¤aÚù ú^ rû€{3ˆ ïÅàØü¹äÑÏ÷BpTÏ‚¼eî gªäÙ÷„à½äcæ^’´{gÅ?8YΊ¬òî¬8vwn yÜû¹ýWÑï–üëÿ`…Ÿû¹=÷Šn×óÜÏíY!Ü1¸«žûÝr#Ü14˜ûÝrZÂqlýn9-áãßã=‚_-áÃoZ‡d áø²þ––„s ˜µK î>†%„[7Å¿-IÂs^§Q½IÂÛIÞ%á}>$ác>%ás¾$ák¾%á{~$ágd ¯µÝcTÆsŠ1ãŽ%œFp­=E¥‘ܱ„«$ÿ‡†rØ®MåPË¡4—;–pA“9+„ûJ9êfsÄ4œC‰t>D<Ì税T5¡cÑ1¶ftX›fsð•%¨’%VáÑŒ²ŸÎ™Ãª5£x É®~¨˜Q*÷ŽÁ#õÑŒR1£l-2*K8ÍNLžÎž4d>i®šQZÏf”JdT–p=‡h0Çú“裳(¯Çi”Šó(k9›QþÝø±Šê4›Ñ?©ø±N%>×Íèh­Šíì§1ñá~ôÓÖ¦ïTü|§UkF©DFf”+çg<?䩘Ñi ‡w%YÂáN–pz닌#£²„«5ŒZ–pR"£'3ÊÖÌ(3JÅŒÒÞ5£TÌè´„ëz° ²„“bF•%ÖT–pXÓSdôdFù*oF©˜QÚ®f”Ö³¥½Ûyt#Ü×3-áºR*f'3Ê•3£´Í(3JûÐŒNK8ŒúlFq=g3JÛÕŒ²3:-ápoË.eZÂ¥à=D–pjÍŒrf”Šå\GFe §DFe W çÍŒr~ÖSq¥âYÁ[ScT%Ó¼¬à-bxÚÅä?H±·Br”s‘£órl^<òº5Žœ«Ê” ûV0ù[ÁHë¸Q¤!Û$Rh¹_t¥A¼þÎ_QÈ/éU‚‚ôu‹@þmœàm­™ËäoÿFâ^þ…¼$'x5ÅAÜ\Nði8Lå"pÔÈ-Ç©ÅEàÜ*ºÖto¹íþ½YLFðz"òhõ{?­Ç^àþê¡Ù=zî§õ°ˆûr(ñWxÁëMb…Ž¿Â?÷åh-þ ÿ…ÞûþW#øÅoÁ/–Ì_š_–À“pjM[@ê¼´Àík’ðTÂøž$Ü“ðÜrêë$¼IÂÛ$¼KÂû$|HÂÇtŸ’ð9 _’ð5 ß’ð= ?’ð3 2‚q;Fp)´ iºšÆÑZã¸c§~®±ɱÝbŒ™œFpA¤ò!bù¹|ˆ`>D2"šf“×c8©4üŒ‘\™‡u¾Í',Õ§˜HèƒåØÌ( M3Jƒö1­¶Œà°¦2‚“bF9‚Ιä6£Œ1£´nÍ(3:àõ4‚“bF9¶È¨jƒC>V[µÁéqóçcL 1ƒÊNc3£´ˆ#£2‚Óõ4£ã è˜GUÆôslF‡EŸêª s}ôs¶e3:úiFù wlF‡ÝÛŒîÁilG9£ÇftŒ­J3:Z‹ŒÊN«=6££çQεó(m3JûÚŒâå[µÁiFÍ(GÐŒrÞd‡ÖTœ”Èè)2ªÚàÔš¥ kF§œZ‹ŒÊ®öÓ/ ¤WµÁ)&2*#8P%#8ÚŒòJÍ(-ÕfôOdò“¥bF©˜QÁÁ*Á!ïÈNý˜Ñi§ÖœGy=f”sÐytpÐÏú—œk3ŠÖT¼Æ6êE‹Ñqª«Œà-fZ·Åèpˆ ÑqÐneQnFúT€Ž“k‹Oúƒ* Þ†5Îì-:¹wªLàuñ´t‹Í—XʧBsÍ[dò§5•o}Ð${*.ÇÎ…åð¿‹Ê±§vAÉJQÀ[ç´LU ¼–ð^a!9}æBr¬aÉM’Ÿ ȱuvñ8÷H.à l¹KµJ×Ó#,‡•\8òF¹ޣ܏põÎò·Þwüß% “«x†ÓZ<ŽúèâqlC]<Ò–“ÿ:ïDÉÉ*_!EÜŠÇQ.xáˆnä¨. éHÞ È±Óuñˆ©Ràuïbè‚qÇÿ]Èó¸àºh`6ŠšD ý‚9 à­kþÿΊøÿE!–èÞmn]@áß+#²\þï6 V£ËÿÝ_Qù¿+tÈÿ]0Ó|NQþïŠàt4¼î"p”!€¼“T ¼R‡[òNº;#²÷ΈÜ8AþïBêOÆ4…£Ÿ~H8aþ Ç U¼Xç&ò—²ãÿ–ÂÖúErÄøÇw\Ïsüñ]þoõƒ—ù¿iþñcóïTìZ:üêÿ¾üMÿ÷eòKþoˆ8½ ¹…áÿ†ˆkjê©þ-SîIx.ï*¯“ð& o[0ï’ð> ’ð1 Ÿ’ð9 _’ð5 ß’ð= ?’ð3 ò £0ó1*Ǩ4£µÆq(—ØZ9bšÈ¡Üº5ÜÄÍ$ÿ$D…À5Œ1•TŒ%•È¥üß4בLù¿)Ælr†“ŠéD”ÿ[ýPi>wüß •ÿ›æÚŒbÔÚ:Ĩ8Œ@þo˜7ù¿I‰ŒjoèU!pŠ1£ô³Í(^9U\­Q1£T"£*N3•ÿ›æº~©UòSk‘Qù¿)Æ9”ý8‰R1£TÌ(•˜Gåÿ†Õ–ÿF-ÿw);þo)xâÊÿMJ3:ÜÊø`×ÞÐÕÝÊftÇÿM£nFÇõħ»üß4of«p4£TšÑ1j3: ÓŒFFÍè˜ëft(Σ\ÓftÌ[3:”ft(ÍèŽÿ®TþoRÌ(F-ÿ7ÅDFO‘Ñ“e?ñíódFã÷O–"›QÆ4£ÃnFùË›üßpoËÿM³=™Q|joèj 9^þoRÌ([3£TÌ(û1£tyÍ(]^3ʹvÅ,ÿ7dù¿¥Ð6£t÷Ì(Çøy¤Bà43ʘÑéÿVkå¨cU!pµ6ýßɵ7tš73Ê뉌ª8õcF963J%2z6£Œ1£T"£g3Ê3Êõq¥WhFñ¦z1£tEÍ(•Ȩ ;3ÊÖÌ(3JÅy”Šż©8x1£lÍy”Š¥bF©˜Q*1joè4£1Êÿ­¼­Ëÿ-eú¿)ÆŒNÿ7µfFÓŒî¯Öv “ÒŒîW ž§Ú:µfFé6£;…À©µft§8Ì›ö†NŠÅ,ÿ7¬œ “bFé&›QÎå"£ò½W3J/׌rlGÇŒ6£ƒªÎ£4'U\+Ç+5£üß-æÀšÃ§Ê£ŽMþï3ìÆJ£ÿ¢ŸZ„w´åè²×µà±øT)ô€l(ûw‹x‰ÅT ð&ŒRßbs¸¼…æ(M.2‡P`ŽÓp‹ËáV–¬U ð6\šª^g·˜EÎ…äØõºˆB9N(.ÇAÄ…ã¸À¢qœ‚\0F jÃ8ª‚FV¥ËüÝfex¦ãK㨙-‡/[0Žji™¿‹-Üq*þ]ü²h¶çŠÆa;æïºwG±rá8ŒïN“x†¨úwÝ=œ­Æ‘Bá8ʱ G–XÞ Ç1ñ…#w3WõïZ\\Y‹ÓÞ4òpຼaþ®{jì½Ö•g×=8J·ÿ× m½{÷bçjß‹A¤=Y¿k}†õ»ÿïÍÉâoœÌ[ü ßâo˜¬ ÙG?¦Á¸¬ß5ZÎSãGS´ðvá7vg.üø7Úz­û(üøTåïºÁxœß¥ O¸<ü‹ßgÞ®w?ž149¿+ðúåü.eÇù-/"Ïý™³ãü¦Öú’Ïn9¿56Ž:þìþvWåo`:¿SùÕùýó7ß?—ó‹›ìñeŽ-ð§¬$œ“pI}\“ð”„[îIxNÂë$¼IÂÛˆÒ»$¼O‡$|liþS>'áK¾¦Î¿%á{~$ágäü.âvœß¤4Œ#æ[kwœßÔO¹ãüV ½ÍFrø»ÍäŽó›Zk*GLc9”È¥œßt¥‘L9¿)ÆlNç7]éÄSÎoêÇ|âPåoŠ1¡›Å£áÁŒÒÁ4£T:_ŽŠÜȨœß0jm”Ι£ŸÈ¨œßÔšÎoÅàõDÎoRÌ(cÌ(3Ê5£ôß#£ªüMW•óUåoRÌ(ÇfF©˜Q*‘ÑG3ʘ˜Gåü†9ó›3JÓŒR1£TÌ(3JÅOvº‘f”1Σ ÷hF1oÚ:¬©œß4;1ÊùM1Íèð]Í(¯'>ãUù›ú‰yT§§˜˜GµtЉOzmb"£ªü 1r~“ó¨œßcFÁœßŠÁ*ÈùM­Å<*ç7µfFÙ¥â7Pú”~¥bFÙš¥•ó»®gxöÍèPšÑ¡4£ÃÉnFGL3:<îft´ÖŒòžÓÐi}"£r~CŒœßš¬Â9~›Q~¼j èj¾«¿fåoÅLç7µæO$¶¿‘ÎþHânNf”­™Q*Í(×çÕ©Ài"£ªüMs`F§ó›fÔŒòzÌèt~«5¼ïÈùMJ3ʲs3JE[@‡Öäü†9¸˜Qz¨‘Q9¿ÕcÌ(ÄSñ³ž ½˜QƘQ*f”#0£TÌ(•f”wðÅy”1f”c3£Œ1£ô‘G©˜Qþm€¥[ì$ác>%ás¾$ákšÝoIøž„Iø™™¿EÀz0‹T"ŒÚö9µfÙšyÄ3êÁ@2ÆDâV}0’TšÉó·F͘¦rÇüM1æ’£6˜TL&£IÅlrÔ†“Šé¤b<ÙOäSæoZmÊ~Œ(žš2«µiþ&ÅŒ2ÆŒR1£›Ìß°¦*ûMŠek1k>šQÌõ£æo€Šå•vêä'©Ê~ÓŒšQ¶fFy¥f”Šekf”Š¥bF©˜Q*f”ŠåŒFFc•ùI‰yôó¨Ê~Sk‘QÿèUÙo JÛ>BŽ‘Q™¿ƒ÷[™¿©ŸÈè12*ó7]ÅjkÛçt=‘Q™¿©Ÿ˜Geþ¦õ1£xÎÉü]1ò6£Œ‰zÿF-ó7)fw°ÎÿM11jÛç•ùæíŸõ2S?f”¯Ëf”Š¥]kF©ÄwP•ý¦ë‰yTæo¸KTöèUÙoš3Ê+¯¢Úö¹Hd ¯å_ŸFFeþ¦9ˆŒÊü 12KÁ*Èü ÷Ìßp=2“ÒŒòóù܌ՌrlñY¯óÓõÄ$•ýÖ¨§ù[ ãø>*ó7P%ó7P¥²ß4êf”?œ›Ña°Æ¯%•ý¦ë1£œ3J[¸ÐŒ¥¶c3:”f”ìÈü +w1£4$Í(ML3JÅŒRiF¹>Úö9ÍßñÓüM1‘Ñ‹?åÙZ3:ÆÖŒ¥J3:3:Íߺ*ÍèXm3Š·‹ÅóTçÿV?ÈÊ3JÅŒR1£PdþV?´Í(cÌ(M¿ftÇüMý˜QŽÀŒrf”Ƨ¥bF©8R1£TÌ(3JëÕŒR1£TÌ(3JÅy”3jF9£f”Še?f”s`FIˆ¥ÒŒ¾àɰÅèE]27ªÆ¶Ä…è0Y‹Ð±'r%Q˜ñT|ŽÚד& ¼ßmT–Êü]ʸ’¢s§îw á3ñ©ØäK†¶}Þ"F)t‘9|ä“ÕœÚöyuŽ¥—ùFUTŽQ”£ô¶˜vq!9"ŠÈ1‰ä8ܸx=P8ÒP‘ù»VjøŸMã0'‹Æ ÄU÷[뎻Kæï¦ c¶xÜÙõ¹è‚GØ<â®WÝoEà™%÷wSè¯Ëý­£“Ê•<ÖõÖ©’WØ8‚!¹¿‹SŽªó$L9Õý®‡Þ ´ëójŠBãH˶pdÁ·Üß­©±tã8ÝßÕ9ç½ó#§¤p¤ªc×z ûw-íÙ‚‘Öb£8 àÝTû[¼ÃIî—Kdeÿ®ÅÀºªúwØucˆEº÷3(xÍ,›* ÇVÆEá8ý¶Ÿ×ì¼×Ó^cõä/ž’¢à-bÔwRdçE!ÿàH;?oMñ˜v•ÿ®äŽór€kiyíÍá0Ì Ä7]¼–Æ¿à¥ð.¸P¡7ìWI$•ÿ®˜±´?wXÊ럌àÕÚpšã'¹àŠr€“âŸÌò¯ð«ßt€_-cx|„cNI8'áRæ×$<%á–„{ž“ð: o’ð¶/X¼Kï“ð! “ð)uþ9Mû—$|m‰ò[¾§¦~$ágäâä'%Â(8ÅDšÇá²6|}~h"‡ÒH¥™JC9FÐTŽ˜Ær(æO•ÿÖìPi2GkæPšÍ¡Nöc:é¿O*æ“­P*&t:À5T"£Úø9¥K3Šhãç0×*ÿMŠek‘ÑÇȨÊS?‘Q9À3घQƘQ*f”Š¥bF©˜Q*f”Þ°¥bF©˜Q*1‡>Æ$ªƒ‰*ÿMŠÅä‡9ÀI1£lÍŒR1£T"£r€ÓÌ(=[3JÅŒRqp€Š¥bF©˜Q*f”³cF©DFå§y‹ŒÊN1‘Q9À)&2ªòß•bTþ›”ȨÊC~“œ”Ȩà43J'ÓŒR1£TÌ(çQ*fìhãçÀµà¤Ä<*8Í[dTpÅpÔñMôdFéh7££0¸E¾f”­EFO‘Q9À9ÀáJå'Ōҙ5£Tâ÷‘àÕÏð†ý…„7‡³?‘ÀŽàÔZÌ£r€+f:À¥°8ÚŒ‚9Ài®#£r€£*ÿ-…3ÚŒo¸žz3JÏft:À5xQùo)\Ÿft§ü·bè 6£ÃalFwàj ?–È+§òߤ˜Q¶½˜QüÔ)8-2ªŸ‰Úø9Í›?å±>—ft”Zûcž«à¯y^?ç9;þž§mF963 v´ñs JpRœGÙ¥½tem£à0‚«¥¿×yt´fFéšQä·«eŒ¥ó¨þ ÷öÕŒòzÌ(عFFµñsê'2ªƒÓ\›QÎŽå˜Q^OdT?ר¥½FF¯ÍèøK3Š»ñÚŒî8ÀÛ¨ÃÏ-FÇvÂ…èp‹ÐaÛ c‡åâs'VFð6ÞWÜý¸à{›£š¶ÑD’ÿ»õ1¶n0¹uqIKQÇþ.(8ܦ’XPŽI,&wüß­ÿwÍ^tìïŠ`çÅãpŒ Ç1íEãØ7¼`<ÐÏ”¼{q©ú·ú“ãÜ,ºh<Ð\hÓ%,GjçK:‘Å#ÇU8Žƒw Ç蛎,˜¼Žì¢hçô¾dÿn>ÑmyyEãðž‹Æá§v†äÒ• y»Éþ]Ð1¢iäTüÛú»nP6U4HVÑÈ /Y[$Ò×+iÙ…üÿÍ }ÖN‰ô@ Áêßí¢§ù»R .2ì¢ÄÃMÇþ®ye‘0tìïêœB?©9SÅ Ëøeþ®Î9ÜbC#ów] ;o§ù»2"çªdFù»’ÈØ­¹ <¼à€›BþÅ“ÊWkcÛíNŠL¤2×ÿ1Ëkåq9*ÿ­e™æïRø~©òßR±Ný-·‰Ìߤø#Ž-þb$ówµ6ö¥ö׸ÉüÕüýë7Íß¿RùoŽ/ƒpJÂ9 —¦ù»úøqKÂ= ÏIx„7Ix›„wIxŸ„Iø˜„Oiv?·€ÛòK¾¶T¿¥ˆïIø‘Fõ3EÈü-°Ð»ÌßRp%†‘Ši¤b©4;æo€æâSJ#¹cþ¦ÖÊÓTî”ÿ¦yk.GLƒ9”&s(æPšÍ¡N®©éijW{?×õP1ŸT (WÁ„R1¢›…"ó7̵Ný ŒÊüMJdTå¿©3Šë‘ùæMæoàMå¿)¦óæ(Ø5£4XÍ(•N;å¿if”­™Q*f”Šå¼™Q*f”Š¥bF©DFeþ¦õ1£l-2*ó7´&ó7)fý¨ü7ŘQÆDFeþ¦ÖÌ(VNå¿•ÿ&%2ªòßUùoЉŒÍ(gÇŒR‰ŒÊü ù@§þ&ÅŒÒdŽŒÊüM­Å'½Ìß•ùbdþ&%2*ó7¬ÌߤDFeþ¦˜QZ¯f”Šæoõ3Íߤ˜QƘQP%ó7Üs§ø¬—ù›æ >ëeþ¦˜È¨ÌßÓŒ‹×ŒÒâyTå¿iÌ(òŽÌßÀŽÌßКÌßp=*ÿ-eš¿K¶£¿XHÛŒŽRÑf”?Èü]ýð7™¿¥Ð®õGgÇy¼cÕ©¿k™¿iv"£2ÓúDFUþ›æÚŒr}šÑ±>f”;p7£ÃdnF‡ÒŒC¿å´÷s¸íý\ mÇft´•ùÖG§þ¦˜QP%ó7Å8b´÷sAü—ù›æÀŸò´ký-OSÖóŒñ×ü4Óü=O+ÙŒRiF‡1mFiךQ*f”ý˜Q*f”ŠE>ù[s@ÅŒÒ\4£ŒiF‡-ÜŒòÇF™¿if”ý˜QŽÍ?5QñoM´xÍè4klTÌ(3ʘQ*ftš¿ivÌ([3£TÌ(gÔŒR‰ŒÊüM³ÓŒŽs¡›Ña 7£/1ú»õs~_1:6r.DG l:Žð-@¹¦ÊWïô_O¼íÉüÝ"x–«ªWS´Y›M,¿v~^SLo´²çnÉêÂr•C((é"×£Öö}^×Í, GÍuñøŠ×]8òX̧¢qDŒc§èb‘¼>Ї?8¹…â¨ß–õ»VpTЇa‹nÀ*ë·À¦Ø4²pähëç­1šM#’jWïÆ,GsáH§ºi¤+Üi’Žfá8ÎöË&J` Çów]/°xdß9ë…ãØ»»qœÞïÖ÷põ DZÙwá¸ãý®¦FéïöïÓû­å[?¯œ1NýÝþ}š¿Û¿Ó…léB‚ (¹ëÁ½dD!8NŸ-Çy¹EàØ}¹䛇¼ßíò†ËYr7û»ò‡[ò/n´õó~æ“÷»®^1È[Lçþ. @³ ×ýM«ºRâ8A…¿á×ÖÏKuÒù¢ÂßóŠþjgEv ÂßÅ"s¬¼ß¥þ.…Ó,ïw)c#iÿ`„{ZÞoŠñFHg*ü]1ÄOÞo)ìÇ?j&ï÷ïßô~ÿN…¿A8¾ Â) ç$\J˜Þïêcz¿A¸¥¦îIxNÂë$¼IÂÛ$¼KÂû$|HÂÇ$|êÙ+ŸÓ´IÂ׆÷Öü{jêG~¦>äýV'ÓûMJ„Q…¿aÈGþ¦~®­à¥S…¿C¥‘Üñ~SLC¹ãý¦±5–;çþ¦˜sÇûM1æŽ÷›b çô~+O y¿I1ŸŒùcL(×LjR1£Päý†•“÷x“÷›3JÙŒR1£[dTÞo˜Qy¿Ié¼¹ãý¦˜Îœ#ÆŒbå´õsjÍŒ2¦³çèÇŒ2¦ó'ÿ0XçþÖð‹ÎýMŠeŒ¥bF©˜Q*f”ŠÅ•Êû 3*ï7)f”­™Q*f”Š¥ÕÖÏil‘Qy¿)Æy”#ˆŒêÜßÔZdT[?§˜È¨¶~N1f÷¶¼ßwäý&ÅŒNï·b¨˜QŽÀŒ2ÆŒR‰Ïzy¿aÔò~Ãìhë礘QÜ%ò~ìs“bFÁ޶~N£ŽÏú“¥+lF©˜Q*ñY¯Âß]a3J¯ÔŒ2&>ëµõs`GÞoR"£ò~Óš:rlf”³Ÿõò~Ój›Q°#ï7ÄÈû £–÷›”˜Gµõs êlF1*ü]1ÃlF‡+ìO$¶æo$úžþHbÌÿ§ìÜrÜVšf;¥–··½ |@·îjßïö@þñŸT‘ Gr=øµÃIÉ¥¢Äå,6£1SÈýÒñ £r¿t<ȨÜ/kœGå~áSrÄ_KZúÙ5yvŠÑqŠÑ‘£#iFs?Íh\¹_8×r¿pFµô3áìÈýR‚ŒžzÍQ÷<šIÏ£ñÙ–û¥ô<š[kFÓ$ãOy5þÒyCFõÞ_ªÁŸó§þ=?½µé~))FÇ¢ÐÍhn­Í4£™££Ñ¼M/-÷ëQ§'lFÓn£y<çbtì§I?gÊô<š#ÀyT¿pÔøKIÏ£ÓýRM3:Ý/Õ4£YÓŒ¦ymFóì4£™Ô<:ÎuÍ£#iFskÍh&ÍhO3šI1šbT¿ë¼¥y‘û½'»7©!Íhö4^ŒèX|Ù„Ž†ÙžDÿT&r¿kïi Ï—EgÚbÙBHoý]ÇžÙhŽãð왊×\Ž]xêÌC™7’qѵèó}¨©¯c¾'W/ü½Œ3nÇËxÍ⿹£˜ïʼ˜Ä´ƒø:Ïæªjù]Ǘư(Ìö:½ïw•¤ù, 21†Ó.›ÃÝÆšÏ ÄÑ^[$¦“5‰1«HûÞ7•=ÒZòùäë§Õò{Ò iÉç…nŠÔ"qjßµ©¬0Šã…Êf1·dóï55æÌâ¯51ÎŽßu¦rSfqœ³˜ÿ5âj󳬟7?RW£»¾™Ä˜[oæpvü.pBÂô’…à”¾kCÀ<¯²¾Û›:~ïAJs-÷¼Nx°¬Žß5d`óž&ë»ös˜^ø»ŒÏ…¬ï6åêø];Ïskóv&ë»6•Ã5ƒCR×|˜g×óá› Ìànœ÷‚0;qe}×5Üåe7†»‡<-q÷0­¯‰ÈÄ0ŽÕ:d}WMv0Ëú.Zr¾”õ]I:uü®$ÿ—Œ¬ïJF.þÄ‘õuMºÝþ‰3­¯GгüŸ¿oþÒú¾¡Ž_öÿ@p àHÁÉAþç3 ®Ü(x¦à-ï(x_A|b?P𱂸Y¢à3Ä/|­ f…o|¯ >ü?¨â'íüUü¦}Èú¬´pOXÓ0Æ1Êú¦²¾N²¦xÜèø¥±‘Ë=»&n ÅäÆrÏ´Ÿ¢rc¹gª).GM9’"sc¹gÚO³™W®á̤é̳ÓxfÒ|fÒ€fÒ„fÒˆfÒŒF"ë ×TÖ—’f4·ÖŒfÒŒ¦íkF³¦&ÍáB›Ñ¬©isÔ4£YSç¨iF³¦¦ÎŽ_:oÍhn­ͤ¦Ï±Ÿf4Ïh3šI3šI3šI3šI3šI3šI3šI3‰¬¯Ïh&Íh&Íh&Ȩ^ø WnŒªã—jQuüR 2ªþR 2*ëK5=o²¾TƒŒÊúRM3šûÁyTÖfe-÷LI3šn·Ö—¶ÖŒfM3‰¬/œY_JQuüñ²¾”4£A¼:~©Õ iÔx¯?4£yvð^hF³¦MÚŒfÒŒfÒŒf‚÷zY_:x¯—õ¥dô€÷úÞëe}éšâ<*ë 5²¾”à½^¿TƒŒÊúR 2zÄï£êøõÖ¦õ]ÉXÐ$i¹g×Ä\%ëK[kFsø}T/üBd})AFe}]“fçQY_×ÄgAË=S‚?˜´Ü3Õ4£¹œGe}áÈúÂÕ–õ…ÈúRÒŒ¦ÅßL²¾´µf4·ÖŒNë WNË=Ó‘ö<š>¸çÑLÑS3š¹Í­5£™£ù™;£#)FÇÞÅèHŠÑ‘£#)F‡Û-F7¬¯?õñpNÖæ-÷LI1šç@Ö—öSŒŽ§Iüœ©4Å“›s?i ±&ëëdÒÏš2éy4“žG3éy4“~Þ”I?pʤŸ8Å|}îGN™4£™4£é›Ñ¬iFÓÓ6£YÓŒfM3šI1šnWÖØ‘õu#Ð ïÉ\ÚŒf/Ù¥ »kBó º´¯§°¨0ŸCÉž)q‹Îņ3…žZ~ï;Oßm2Çh æÌenÉTNí{ßs\Aißû߃-õûÞÿžªÛ4æj¼—‚1ÏR±˜C-30‰Ù`.ë{Ôx³9ÿÅÀŽ—öšÂ±@±!͹fp(T3ø*U¢|Ó î†K4„c1gC˜›*sçf0ÿ罌ïú” I\æçj ³Rë<¯¥¡6‡ù¿ôšß\|hôšßµ© Œâ”¾« £8l°Q§Ý(ŽæàB1æ*I_­Q2ß(Në»} ¥}í£×w¤Î3ˆ³Ù÷^{®©0vP3aL²¾ëÚ¥û4…ù¡‘õ]ÓNnªîÒ)^ áXœÙ ¦õ“õ]ç)ŧÌ/)²¾Ûóˆz}׿©5ƒ£¥ÖóáØ‡!Üxɯ±ÍfmS8–P³¯kr`æðM^\s¸ñŽßû¶6Vy6Ò±uú®$'^9ß•¤Âó]I@Î÷ž¼xŸt9ß•Œàþò˜>ºà”r¾kkãµÀý h:_œïˇ¿s¾ú÷ÿûÿ÷¿yDOì)8Pp¤àTAþN àBÁ•‚ϼ¥àï)øPAÌ")øTAL’Ÿ$,_*¾¾Rð‚ï¤ó¥ÿ¤àíã7íãñ±’¸—=‹ÃÅŒ9é>y¾ ÇQSÇ‹vçhÑ5#0œcçf3®ñÅd¦•5—ùïMeþÝL)4\Ìcþ{Ó˜Û7‹Cù®Y,·oóß›Â<^3˜4™Àø÷Wó—íº¦o4øÖ}%ì­é1ûIM^>ô¼š¼¹¦óÚÇx°É/Õ5yC_š¼±ó"oô6zcc³·Ëëé˦ë«ñËÕݯæoŒ¸&Å áZjW#8–ˆ6ƒc†0õpM‡˜Âœ$®ÆpvøÖ]9v^Áhà4‰é*kLÙë eILjS›ÃœknuΊâ0.ÅÍæ—”›9Ìÿmq3‡£›Ö¯j óCp3„ùlÿVs`׎E¢ áXoÚŽ C˜+Ôß á›˜ o†p—Ÿ³›1ÿ äfß䑘Ã×x>»÷„¸Ë®àgƒ8n¢ÏFq7m¯aݺuK~'๾6æªúÏýó;=pmLÝ?m†í¥ŸÏøÓæ¹ÚôTðG‡ïËÝ_ÚÞݲ½qž´¡»ÎgÆ(8Rpª`Ø^ïV“á§ †í]§dÚ^ÃöBðÍûÈ›ïw ~T7 Ÿ4Ü_Tñ»‚ô¦•¤}+‡gÜÓˆe{á|ÉöÂyy,7l¯krÔu!¹a{½µ<Ò‚rÔ•¶—¶V\nØ^ª)27l/Õ|Æs𓯘4žyvšÏLИ­‹Ðq!£O5uCŒŒÊöÒQÙ^ªiFóF׌fÒŒfÒŒfÒŒf‚Œ>5£YÓŒfÒŒæý¹ͤͤͤ Þd{á\ËöÂgA¶—dT¶—öƒŒÊöR 2*ÛK5Ȩl/Õ4£ñÙÞ#£{œGe{i?Ȩl¯kòš"£²½TƒŒÊöR 2*Û 5²½” £²½TÓŒÆ9í…3zÀyT¶—jQÙ^[3šckF3iF3iF3iF3iF3iF3AFe{éìà½^¶æÙ^ÚZ33’l/Õ £²½p}d{ak²½”4£16Ù^ªÁyT¶ÎŽl¯“ìmF3iFÓéöo¤øÑqìIinûWRrlFÓ#£²½tp•í¥s€Œ›Ñ4ªÈ¨l/]9dôˆŒ‘Ñc3:m/p ÛK 2*ÛK5ø}ôÔŒ¦oFFe{i?Èè •í¥­õ<šî¸çÑLšÑLšÑi{=‚´°Íh&øs^¶—ާͱ5£¹Ÿf4“f4“btâþU_NÅè†í]dza{á¼›Ñi{©¦Ÿ2MÛK#èçLÓöÒ~ŠÑÑcÜšÒ&ö<šIÏ£™ô<šI?nʤŸ7eÒœ2Á'Nçf4ŸÂ£yµÏÅèHŠÑ‘£#)F‡;nFã.s.FÓÂÊöu¯Ïkz©y4›+e{½µl¯“|HÙŒfOkÍ££ÕŒîÆËƒ=îÒ)šÑq8…hî¿M i@ó¡ûÅ|Î>ßuø)F gîÚhæi4˜yeþ{C™7’¹™ã4ŽñEíbsûF1/‚AÌýÃÜŽ!Lk§ð½c–ÚÑø%I×¢/_±—[2zÃÅš¼Ñ\[àe­ÁïÑ5x»q>®EÞè»5zÙöwõÌ8›•⦅¬Ñ/á»’Ñ0kÇnL`º+ßû¶òa–Œï=HÕn‡ 6„#0…Ãu÷7˸¼5!æ51ˆC›Äìû½Õl˜¯ò]‡—b·PŒYåfƒ¸[¡˜*Ø(i‡Ž5Šãµ¹5¦$®90wnóÿÜ â°®qØcsøoî£fÁ•)öØŽWóšÂñú_Sø*O{aøB9ßõéÈ×…Ëùús“WÝ$îÆù2Šùß nFñMެPܾ02I_'q.Ÿ‹ÇÙâëšÔÎ’¾ënž^_Ò×ßSàÖ/œüÎûÜ¿p¦ô¥­õ/œøIúÎo©Jß)}_ô…`ÿ‚G N éë} é Á•6u£à™‚·¼£à}CúÂp?Vž®ÒwykþâMeð•‚o|§àGCúz¸q¿¨âwSúú§ôu’5ãF‹¯kbÈ’¾p&%}ÄÏíÇ3ŽúRIŽºÜ¾t¤å†ô¥šÂrÔ—Ò—¶VdnH_ªùŒç á̳ÓtfÒxNéK#h@³æ'Ž­Òö£_JžˆI_ WÒ—¶ÖŒNéK5ÍhÖ4£q³—ôõÖ2©yshZdTҗƆŒªÅ—j>`‚ŒJúÒÖšÑ<Òf4“f4“f4“žC3iF3iF3iF3éy4µøÂ5Ý7£YÓŒ¦ÚEF%}kI_'1Jú:‰/Cjñ¥Q#£jñ¥šf4´ͤͤͤÍ•ôF%})AFÕâKçU‹/Õ £jñ¥±!£jñ…ýHúR‚ŒªÅ—jšÑ¸ jñ¥šf4kšÑLQµøÂÙ‘ô¥ £jñ¥dô€ó¨Z|ilȨZ|©•ô¥šf4¾¿IúRM3šj•ô¥­á½^Òj$})iFSíâ<*é ×T-¾”4£¹ŸftJ_omJ_')›ÑÙâ»jÆ«g›ÑÜO3šûAF%}iÔÍhîU‹/QœGÕâKWU‹/í•ô¥ý £GüÍ$é ×T-¾°I_ªiFSíâ½þ„ŒJúÒzÍýô<šÂ¿žðûè ¿žðûè©Í4£³Å×G:[|)iFó4£™4£9¶f4üMÂõ§bt4ÿ££ù·MÛŒfÒŒÆyS‹¯Ï[Ö4£™ôc¦T»ÍhÖ4£™£Cb÷£¦ÜO?kšÒ×ó蔾”ôã¦)}aVV‹/%ýÄ)G]óèÐÛÅèX(»5Åè8oÅèHŠÑ±µbtŒ çÑ ^Ò×ç îšçb4ÒKúº&¾óIú:ÉG‘ÅèX韄^ŠÑ|´¬_A1š×/ft÷_šH3ºËö…‹Ý íìy4› ä}×Ðò ˜ÐTVêô½WLñ{ÿ{ XÙ‡a4SQ̘6Ôé{ß~Š\C™Û1’9™Û1Žùï ã¿÷ñäqÄ€M¾÷Ÿ/CôÁد¼ïæù¿¿8.µù®ë'èÚìÅž^êÍ/ƒšSj»ÝCîÜÜee}×yMmðÞäî=1þ›§Êè½Îq™½ÝXKÛôe‡£œïú ä°€¿«ùâ¾fÄ<'=!ç{ß÷F—ï=È-ƒ2¾kC1¯Þ aÀs3„é7 aÀ,ã»vŸÞ›)Ì^h5ù®óšk›ÂÑ€[÷è¬è[tmc˜ #Èø®§¦5„c­gC˜ONÕä»>ÞyJ áXÚŽ·›Áñ¦b3¸Ñ仿„®†ð¿<@C8nêñ]—pÈyÏ„£1WÂwÕŒ3lw/ÒÞ6‹éA ãn£ÍwíçM|ÔŸë¶œÿA@Æw]ãüb ãë$NÛsṳÞLã»¶6uö~ÆkûçMŸƒ?ï?i|ÿYÆ75ÁKö(8Rpª —“¡àBÁ•‚ϼ¥àï+ˆò‡ ‚¾ ãëÓ>Œï f›¯ƒÑæ Á7ï|¶ùBŪÆ×ÃÆ†û»6•öö±’4pOXS0n_€Œ/¥Œ¯“i|䨋ÈaH É ãë­å‘”Æ—j Ë ãK5æ¨)27Œ/mí3^¹/˜|ÅkÚxæ¹þŽ5 hÖüÄü¤ÍIU›¯ÏNÌ2¾”ÔŒ™/6yjFskÍh&gÜO3š5ȨÚ|áj?!£2¾TƒŒÊøR 2ªE©æ&Íhžƒf4“f4“f4“f4“f4“f4“f4“f4_àMÆΛu¦¤O–Œ/Ì–2¾”4£é‚‘QµùÒñ4£yšÑLšÑLšÑLšÑLšÑLšÑLšÑLQµùÒ9@FÕæK5ȨÚ|©çQµù;8ÊøÂ~ÔæK Σjó¥œGÕæK58ªÍ—jQ_8;ZÔ™dô€ŒÊøzkñ9•ñ¥¤ÍœGµ¨3ïõZÔ™Î2ª6_ªAFe|©•ñ…ã‘ñ¥çQ-êL5ÍhÚ[dTm¾´5œGµ¨³k¦ñ¥­á<ª6_`G‹:Ó֚ѠJ‹:»&Ír3š 2ª6_¸Ú2¾46dTÆ—jšÑ¼rȨÚ|ilȨÚ|iȨŒ/\m_ØšŒ/\ÓÞëÕæK[ÃyTÆÎÁ 3©Í—ƆŒÊøÒØQ_ªÁï£'œGOÍhúVœGÕæKGÚŒÆççÔŒNãK4£YÓŒ¦§.FGp1:\p3šöU›/ŒZÆ—’f4÷ƒ¿ëÏÍhÖàSð…‚¯Äüù­‚ø §Š´Ÿü¢à7z“¯ÏIŒWoòu’2¶`«1#)7ÞäKû9צôuM ÜkÕdRL¦ì{,(GRT[XnH_[¹!}©¦ÑÌãi63i83i:ã“üØxfÒ|fÒ€fÒ„fÒˆfÒŒF¢6_ŸLšÑLšÑLšÑLšÑLj΢¸Íšš5GM3š5ÍhŠïf4dTk;U’¾” £’¾TƒŒêM¾tåšÑ<Èè2ú„Œ>!£ZۙƆŒ>!£’¾°5I_JQ½Éε¤/%Íh~whF3AF%}iÔ8jmgªiFãjkmgªiF³¦ͤͤÍ•ô¥±!£’¾TƒŒJúR 2*éK5Ȩ¤/ÔHúR‚ŒJúR Σ’¾Tƒó¨¤/Õ £’¾TƒŒªÍ—jQI_ªAFõ&_ªAF%}]Ÿ`µùRÒŒfM3š 2ª7ùÒ¨‘Q½É—jQI_¨ÑÚΔ £jó¥dTÒ—jQI_ªAFȨ¤/m ïõZÛ™jšÑÔÁýC)”ıÆÍhn çQ­í ŒJúÒ¨qU›/Õ £jó¥dTm¾P#éKI3Ÿ,I_8’¾”à½^m¾Tƒ÷zI_ªÁßLZÛ™ŽU›/Õ £jó¥±á÷QI_ªÁ¾®IÛŒfÒŒNéK[kF§ô¥šf4kšÑÒÍhÔœ›ÑLðw½¤/ŒMoò¥¤Íý4£™4£™4£)"›ÑLšÑLšÑLšÑLšÑLšÑLšÑLšÑLšÑLšÑLšÑLð©“Þäë+—:¸Í{’ô¥ý£Cí£ãÍÄÅè‹t™ÅèèÍ-FóQ¹¤ï}l»¡ƒ‹Ñ¸m«ÑwN&4ÿn>g§ïÚP¨T³ó:}ïÿ>«¹ÌýšÊ$ÂLÆo´‹‰Ìos<¦1ÿnS¤šÄØïÕNå{?ÞÔf0ÿ½ Ìýš¿”îêô]?>MWÓ7ä£áÙËFr)ßû>^Ç,|­Ù1‡[àe÷j—泦Æé|׿Î=1æ¥(ôrPfoŸáËv|õù®Ï“kü†7yÜ5f`7–v^û‘iÇK~à0¸ž ³OÔ ¦C5ƒùïÍ`zÝB0Å£Œ£^å»&,0£“¸&¿¬(g—ï}cÁg8ÚMàËtìžûÆ›‡Màhÿ5‚CëÁ×í­æ¿4ÝFp7ü»ܽ:Õæë9!O—1oæ•ñ]5£'ÛSán¼·PLM!ã»®ðCŒMÆw%c‘æº-§‰—ñ]5ùeBm¾+ö¿:ÊøRMq9¼nÝ–7Œ¯ÇFÆ÷ß¿4¾ÿR›/û—*È_àœ(8Sp¡_+HÔ+Æ×ÇÁÛªˆ™êï)øPA|Î>VÉ'Óøz¸Qñ…*¾VŠoÄ…úN›úAÁO:Ž_ü¦MÉø®#&ö “‚q£Í×[‹IIm¾”¹ ¼vvÍ4¾NÒi’m¾TóŒû)*7Œ/m­¸ÜXØ™jŠÌ6_ªù\£žÆ—jšÎøÀÊøº&“æ3“4“"t8ôBt$Íh:Àf4“f4“f4“š17Ú|á<5£¹µf4“š57Œ/íçF×Tm¾pMÕæKIMc™hdToó¥­!£ZØ™jšÑ<;=f‚ŒÊøÒyCFe|©}BFe|ak2¾” £jó¥šf4mÏ£™4£ÓøÂõÑÂÎ4‚žGãúhagªiF³¦ͤͤͤͤͤÍ•ñ¥#EFe|©•ñ¥dTÆ—jQ_¨‘ñ¥•ñ¥šf4εŒ/Õà<*ãK5ȨŒ/Õ £2¾TƒŒÊøR 2*ãK5ȨŒ/|‚e|)iF§ñ¥dTÆ—FŒÊøR 2*ã 52¾” £2¾TƒŒÊøR 2*ãK5ȨŒ/Õ £jó…+'ãK[kF§ñ]5Ãëâ/%µùz?ÓøÒQ_ªÁyTÆ—jQ_ªAFe|¡FÆ—’ft_¸r2¾”à½^Æ—jšÑA3š þf’ñ¥#EFe|©•ñ¥ãÁï£2¾TƒßGe|©¦M«ÚŒf‚?éOÍè4¾A&Íè4¾TÓŒÆØd|]“I3šIÏ£™4£™4£™àïú3þ®W›¯GÞ°ͤͤͤͤͤͤͤM«ŠœÎÍè4¾tvšÑtèÍh&Èè¹çѼ¦øäI ;{ly¤øìIÆjd|)iFÓ.6£qÞ´°3|~d|W2Þ'ÜŒÎ6_×Ä·ÛK1:.F³ÕêRŒŽ3ºe|ï#’ØˆŽ£1¡©².4ÒxfÛnÁ*ØÓg*Yƒ™—ÄXæ)4”ž”ï:é£ËwŠÑå»ýwØ®¯PŒ•{ b×ÕÆøµ¸ó}¿SùnŽ_]¾kœ¹!ó—}áR¾«"žH«Ë÷Œç¾Ý.Ϊœï½ä¿<f/{µ¸ó½"%Þ軂ÜTMŽ9Þš³Âìá¾<¹†/7T³b˜¾×¿\nW]¾ëäæQxFÎÞb:ð"0…©L9hƒ-í¼@ȶ`3˜žóß›ÁÌiæfSÇšÀa1{ú ;¯c˜-¾ëóÈÞ À¸Ø78]6€‰ìÍæ¯Ÿ›ÌõÈo`×þ—ç¼æ¿‡~Rð‹‚ßÈù®CÏs¢._'éo÷˜Ãߎ#)7œ¯G§ì±ˆÜXÚÙ5iBo5êLž1)*‡¡|W5þcq9j Ì‘4™¹µO¸Ÿbsl­áÌ­5™4ž™4Ÿ™4 ™4¡™4¢™4£‘¨Ë××4“f4“f4“f4“f4“f4“š4‡ÙmF³æŠÇÓŒfM3š 2ª._:oȨœ/Õ £r¾TƒŒ>!£OȨœ/í•ó¥dTΗjQ9_¨Q—/%Ȩº|aS—/%Íèt¾TƒŒªË—FŒªË—jQuùR 2ºGF÷Ȩ^æKûAFå|©•ó¥dTΗjQ9_ªAFå|¡FΗdTΗjp•ó¥œGå|©•ó¥dTΗjQ9_ªAFå|©•óuMúÛf4“ft:_Ú2*çK£FFå|©•ó…9_JQ9_ªAFå|©•ó¥dTΗjQ9_¸rr¾´µf48ÐË|]ÔåKI3š[ÃyT]¾4jœG8ÊùÒ‘"£r¾TƒŒÊùBœ/%Ȩº|©ÕÒÎTƒŒjigªAFµ´3Õ £ZÚ™jpÕÒÎTƒŒjig`GΗdTΗF€÷úΣ§f4-z3šI3š¹ÎףΤM£×Œf‚¿ëÕå ûQ—/%Íhî§ͤͤͤͤͤͤͤͤͤͤͤͤͤM‹ŒªË×W.kšÑLšÑ W]¾´µžGÓTã³'9_o-•c3š²°M-ˆÏžä|aÔr¾+/ÆyT/ó…Ï‚œ¯·–c+F³sLÎ×5Ù kF‡ÐÒÎ÷š]< P—ï=þØ„Ž•¥ hº]ã™íÊçp¾÷=çˆ f^`c™ÿÞPæe7’ùw™7޹_Ã8ï:¥Ãù®Ë/ ãï†0»¹õFßû†²ÔæµTŸï:£1 Hú®¡fã¬ñË'QWÓ7%}ïÛz•6Øðå[;%}ïc±d³74q±—òÀìžÚšóMßXÕÚ3cÔ¼—Éø&\󗜒¾÷ã~“gʾÎÀŽÁšÁ`_/ô]6õ`͆©Maþ½( ÅjG+qQ˜>Ønxß5Øl®I0Us`ÚÚ¾MÇp á?ñø]¦.ó8 aú‰ßõ1Ë“nó£!ñ{¯ø/¹!ÌwZ«×w«ükqg'¹ûšS®ªÙwÕŒÓR“áX¨ºX½Î5!&¿ZÞyM}qú%~W2„kZÌéAâwÕŒ¤îÎC=÷7È@Fâ×[K%Üwç)~WMz¦çþ™5[ß ÿ¿¯ÿRü¾&ñë`ˆ_/!8V¿0(8Ó¦.\+È?Ï ñëãˆÉû]U ñ ªbˆßU1Å/Ÿ½©üŸ_*ˆ)æ+U|«`ˆ_ï<>`?ª"‚Ÿü¢ÿ¦ ‰_ػį“Ô®ûJR¡CÈŽ#9áÖ ÈQSDnˆ_õ § êùmÕ¤¦,,‡v}5æ†øõ¨s?ŸpkÍfÖ4œ™4™4ž™|Ç4 YÓ„fÒˆfÒŒ¦ÚlF3iF3iF3iF3iF3iF3iF3iF3©isÈâf4kšÑLQ‰_ JË;S‚ŒjygªAFµ¼3Õ £¿TƒŒjygªAFµ¼3Õ £jö…‰_JQ5ûR Σ¿®Éo8îqU³/U³/Õ £{dTâ—¶†ŒJüR 2*ñK5ȨÄ/Õ £¿TƒŒJüR 2*ñK5ȨÄ/ÔHüR‚ŒJüR Σ¿Tƒó¨Ä/Õ £¿TƒŒJüR 2*ñK5ȨÄ/Õ £¿®™â—’ftŠ_ªAF%~iÔȨÄ/Õ £¿P#ñK 2*ñK5ȨÄ/Õ £¿TƒŒJüR 2*ñ WNâ—¶ÖŒNñëšøa-ñKI3:Å/ çѬÁyTâ—¶†Œê¾TƒŒê¾TƒŒJüBÞéK 2ªf_ªAFÕìK5Ȩ–w¦dT;TƒŒªÙ—jQ5û׿”4£)W‘Q‰_Þë%~iÍè¿TÓŒfM3šlšÑLðw½š}=‚Ô‡Íh&Íh&Íh&Íh&Íh&Íh&Èè=#£gdôŒŒž‘Ñ3ÞëÏx¯?ã½þŒ÷z5û;gœGÏȨį·6Å/%ÍhÖà“'5ûoÍhÚ¹f4dTË;Ã~´¼³“ÜZ3šI1º!~×Ö²CIâ×IÚÒ~¿Ñ/Åh>’—ø¥Q›ÑÝиf4—K•øõÐÂËšÐfßU‘ÚÙ|¦Â61{içû†ò ™1"s™fÖw÷i~··_DŽnßío§ùÝü÷Zàyûïæ0·c ƒ‰ßûvÒ~šÀrCž$SÕHün_2uû®¡>¤ÿ4~»áqßе¦/?2¿÷½ü›²†o¬møÆ¦<;Žc/øR“×ܘGXSãT¿ë¤ä1€Ã¸¹sO‹ãeÃf0[=¯ž³gòZsbú>O‰iMa ÍÂ0¨9ÌÔ\’ÕæË´oæpHs8m6‡cEacøOÚ"S8´dQWOêw}œ¦ú]x¦^6…¯²™Ú¾Îsn ³%\ê÷¾\7üf 7Ôï¢0ÿCˆÔïJ^¤G._äÁÄ]~pÔókÚó¼ÅÑ¿«7û®ùä!à’ú]IŽ@êw%ÙA¬uždËgÝŸ‡à-&7ÔïÚZ¾.Tê×IJáþ™Âº¿CfÒß!3Ùº?ÿ©~ÿûKõû©_ö/!8Pp¤àTAÀv¦àB›ºV0Ô¯‡Ÿ§çªê*ÞQÅ{ >T0ÔïÚGŠÜO®HÂ>W€}¡à+ß(øN;ÿAÁO ~Qð›©_Ÿ“¼O˜ŒC¼ê×ûI]\<ŽšrCýÒÖ É¡qox<å†úõ~bú},,7Ô/Õ˜ê—jÍA³™IÙIÓ™Iã™Ió™IšIšI#šI3šr³ͤͤͤͤ¦Ì¡d›Ñ¬iF3©Yscg¸ÚOÍhn­Íämq 2*õK#@F¥~©•ú¥dTê—jQ©_ªAF¥~©•ú…©_JQ©_ªAF¥~©•ú¥dT=¿TƒŒªç—jQ©_ªAF¥~©•ú¥dTê—jQ©_ªAF¥~©•ú¥dTêj¤~)AF¥~©•ú¥dTê—jQ©_ªAF¥~©•ú¥dTê—jQ©_×LõKI3:Õ/Õ £R¿4jdTê—jQ©_¨‘ú¥•ú¥dTê—jQ©_ªAF¥~©•ú¥dôØŒNõë­Å^©_JšÑ©~il8jgªÁyT=¿TƒŒªç—jQõüBÔ/%Ȩz~©UÏ/Õ £êù¥dT=¿TƒŒªç—jQõüR ΣR¿Tƒóè çQ©_Ú2*õK5ȨÖy¦dô„ŒžÑ2*õ #8#£êù¥dôŒŒž‘Q­óLûAF¥~©•ú¥dTê—jQ©_ªAF¥~©•ú¥¼×Kýº&Ÿö5£™4£Sýzkñ˜Xê×I<);7£©ùšÑÙó»¶–ƒ¥~)iFský(4g? MÛC3é§¡ñÐS=¿[&ÅèÉÍh܃õfßûÖv©åÔó{OråR©ß{ÒåR„¦Q5 C/›Ïx¦p1ùw³™çÞd¦B6—Sý®£•k&óóMgþ{³Ä\ŠÌÑö{QZrS™õ¼9Ýï};Óý®#îwóïW³WAm¿÷Ÿ÷\™7…Ù>©¾ßµ¡¬0ƒ£Ö¾J×èYr¬¹ìIr÷%pôKþÞÇ56fþÆ[†ßpÏÆ/?šWã7Œ­ñËÙÕøM™¿ ù»Ž#=« Lv­©1ŒÃµfÆ€P‹>oŒ®žÓ“{VÜÅÔ§¾ßû–òJþ.žÇšÌ&q÷0õïB+M aÌ¿›ÅuŸ7?êý½ÿ=NˆÞö»þ}šd“8l®AÌð›9|•û0‡¯ó°Íáhä5‡ùÿnæ0ßi-ÿ{?Ž|·³^÷»‚<…æpTx"Üå5ײÏëÒŽ7ôšÄÝ8]Fq7ÞP\âÆû~ïûÿ±À4Ž•ªMã.û•e×ΑÉþ®$?‰²¿”ô-:&A½íwÕ䊼Ïý5rÚ_×dÒ_#Ó%÷×ÈLúkd&ý5²“?ìï¿gõïÿ÷ÿþï/Ò›?U§g_A>Ê¡àHÁ‰‚3— ây﵂´¿¤ý­ >No)xGÁ{ >8H’>V“ñ§ â´¦Š/´¯’ß(øNÁ ~Rð‹Fõ›*1)óõX0Nû[[K_[8ÎEŸ±¦€œ¿U“±57ÜÏ3&EåØZa9’âr$ fž&3“F3“f3“†3“¦sØ_<£Íç°¿XÓ„û‹5Íè°¿TóÔŒû‹5LšÑÜZÍ™Ã×6£Ãþâ~šÑ¬iF3iF‡ýÅý4£YÓŒfÒŒfÒŒfÒŒfÒŒfÒŒf‚Œ>õš5ÈèSO¢YƒŒ>õ4š5Èè¾çѨÙ#£ûžG³Ý#£{dtŒîëÎ>Œ12ºGF÷Èè¾çÑãњ˼‚3“&3“F3“f3“†3“¦3“Æ3“æ3“4“&4“F4“f4’C3šI3šI3šI­˜wÄ/PuhFóhµhÞ¿t4dô€ŒQ‰_:O/yÕÈè= £dô€ŒÑ2*ñK•ø¥2*ñKdTâ:¿” £¿Ôéu4^SÍüRÕÌ/uQ‰_ê £¿ÔAF%~©ƒŒJüR•ø¥2*ñKdTâ—:ȨÄ/uQ‰_èHüR‚ŒJüR•ø¥2*ñKdTâ—:ȨÄ/uQ‰_ê £¿ÔAF%~©ƒŒJüR="£šù¥£!£šù¥2ª™_èHüR‚Œjæ—:Ȩf~©ƒŒjæ—:Ȩf~©ƒŒjæ—:Ȩf~©ƒŒJüR•ø¥2ª™_ê £šù¥2ª™_ê £šù¥2*ñ ÍüR‚Œjæ—:Ȩf~©ƒŒjæ—:Ȩf~©ƒŒjæ—:Ȩf~©ƒŒjæ—:Ȩf~©ƒŒjæ—:Ȩf~©ƒŒjæ—:ȨÄ/t$~)AF%~©ƒŒJüR=#£¿t4dTâ—:ȨÄ/uQ‰_ê £¿ÔAF%~©ƒŒJüº“ßé5£™4£™4£™4£©‘‹Ñ´2¿¾¶)~á‘jæw%¹)⥿Í âbtè]3:ì®ÍÉ%ißýücƒfú"å§ù|™¢Øx¾JÍi:Ç¡ gjÍúîW5e4ÓoiÖwo¤>¼˜y¹æ2Ÿ©L‰k&ÓOÈúî§ÎÝ@æ–Èó¸Mï{ÿH†1çŒâÚ&qŠßý9Ëi óÿïu2TŸÜþÈ~à–NC¿ëäy3˜w!•úÝc(Õ ¾ŠõjÇœ®Ì9OüîçÛP›Á-‡ ¥~× Я†p(SC8Înó;µ«)óε4æ³h Ç\±9BÚŽÀËâ8”AÌ…çZ‹b¼ ¤~Òé'ýg{llG@0Êþ®s¤5‹ñÒ­þ`çð©IÌÇw3‰¹LÞLâ¸ç¬I6µVÃx÷kêwÑž—[©Ó=Õj˜‡2ˆÃØÄ¿âm+ù»ÖÏ<‡Aü;e|­‡)Roµ æh¸ôïz¥îŒý®$Toêq¨·ÔxGÁ{ >T0,°/7‚OÔøLÁ ¾Rð­‚a}UÃCð“Îñ«‚8”,°•»2‹ÃΌÚw,°Ï“N¹x¼c©s©«N—xÅä†É3&Eå!`_[^As™Iƒ™I“™ÉG¼¶f3; g&Mg&g&Íg&ßñÚ~`ÒˆæÑšÑH4 ϵnüK 2zhFó<µdÞ±ÀtžZ4ï S•¦2ª!`êôÒ™•¦£!£²ÀÔAFe©ƒŒÊS•¦2* LdT:²À” £²ÀÔAFe©ƒŒÊS•¦2* LdT˜:Ȩ,0uQY`ê £²ÀÔAFe©ƒŒÊS•†Ž,0%Ȩ,0uQY`ê £²ÀÔAFe©ƒŒÊS•¦2* LdT˜:Ȩ,0uQY`ê £²ÀÔAFe©ƒŒÊCG˜dT˜:Ȩ,0uQY`ê £²ÀÔAFe©ƒŒÊS•¦2ªÝŸ©ƒŒj÷gê £Úý™:Ȩv¦2ªÝŸ¡# L 2ªÝŸ©ƒŒj÷gê £Úý™:Ȩv¦2ªÝŸ©ƒŒj÷gê £Úý™:Ȩv¦2ªÝŸ©ƒŒj÷gê £Úý™:Ȩv¦2* íþL 2ªÝŸ©ƒŒj÷gê £¦2* LdT˜:Ȩ,0uQY`ê £²ÀÔAFeÝ™˜’ftZ`ê4£ñ=’,0ušÑœî,F‡·íïASð5£Ó¯+N¹MSYŒæWò²ÀûÑîÜ÷wÓïÁ6—MhZ3mÿ¼*ù«ÝþÎ'Í€n¹Ç¨L°/ ;t{ˆ/ä‚W'݇¶€Þ“!œÍç¸2ã™w—Õ<°fŽ{ÜpÞ™^¯r>ý…æœ ^gŸNxñ¤È ¯—8¿î6–ÛCÎ Ëm¸I/ÛØhØXn9­,+ìW%Ïc,Ç~͵r¦mô™ۘK ¯G™#æòŽÞ#0“cú¸±ü#Ÿ}#9öª6‘ÃJ׊™¯—‰ú×DŽA_ygWhxìõ=5v™á^*ÇÓè•rLoÈ¡y dJé›yÆØ8ŽsÔ"™ÆØ0]]ÆS@šÅqr³8¦p‹Åô¬f1Ý"3¼èÍ)Übqn í7UVÌb¾Ed†]™ÓÁ”ÆüÆÍ0þǪå1·^g.¹ÖLJ¹9ôêŒ×Ë@nc_n¹/É-¾!/¼Îó*ÞÀš^Ktºqm½’ü{§éà•$âÚz%w¦ƒW’âH^ØÉôÂ>ZާöÌܺ?`æÑú&yá¿é…_,/«øá)8U¯ÛSñô\AîRAþ™r0~BÁ3o(xKÁ; ÞW À >V¯ü' >Sð…‚¯|«`xáCþ²ïê'¿(†“h:ØI¼‚ñŽv'íoá8ìoñxÇ ÓÑ.xmWLn˜4”ùH›ÊLËLšËLÌLšÌLÍLšÍLÎLšÎLÏLšÏL¾ã3Ú„f§ͤD^H”¦•¦N3šWÐŒfR‹æ/LçAFå…©ƒŒÊ SÕt0uQmMdT›CSÕæÐÔAFȨ¼0 •¦2*/ yaJQyaê £òÂÔAFå…©ƒŒÊ S•¦2*/LdT^˜:Ȩ¼0uQyaê £òÂÔAFå…©ƒŒÊ CG^˜dT^˜:Ȩ¼0uQyaê £òÂÔAFå…©ƒŒÊ S•¦2*/LdT^˜:Ȩ¼0uQyaê £òÂÔAFå…¡#/L 2*/LdT^˜:Ȩ¼0uQyaê £òÂîÄçkmMGCFµ94uQMSÕt0uQMSÕt0uQMS•†Ž¦ƒ)AF5LdTÓÁÔAF5LdTÓÁÔAF5LdTÓÁÔAF5LdTÓÁÔAF5LdTÓÁÔAF5LdTÓÁБ¦Õt0uQMSÕt0uQMS=#£òÂt4dT^˜:Ȩ¼0uQyaê £òÂîL/LI3:½0uð›'yawâkUm GÓÁ+¹3ì$¾ÂÓæÐNR ö7¡)û«Ðüb³ÍÝfå…÷ólÿJ—iF·—©_‹ÑÜþSÂëªÿÈk3£[껓ÏA1š7™•^WýjN ¯äΘð:ÏÆÅèØf¹}H kF·ñŒšÑ-ÇÈ.^GÇð›6ŒÞ¯m</£9Æv1¡y?Û‹[n›Ï-‹ü°Ÿ³ÜrØkè6¦DÍçTÇæs{›ÏñÌH¯+·6ŸãŒçØXÙtnct×tŽ]kMul6ï ¯,Ÿ±"s<¯žcÚ‹g~/¬Ûï'[D–éhMeîI{5”cÛl3™íj$ó=®Û¯×*‡“äØÛHŽgÑH¦Ï¾™ÈÜh@7ÞOžç ÞƒaüŒc>»7Ó˜ ŸF‡×Ó>7¾ÿzhóèµ´äMˆû¯y Š9hhÓBJ/âb5ÖèðäÍØoF1Ør3‰[þVA‚Þ‡Ú>ÚI Zøý‘ºÖÈ;HÓyjÌw¯î¼:C‘¹ÂÍHnã.Áfr˿ɷZ'_æØl­“ÍÑá@>RÄ+É ±¥ˆW’?±‘"^IŽ¢ëþÁ+;÷gͼêþ¬™"¸éÌNÖœŠØW@Šøåo*â—KÇ{çð‚Ç ÂQ©q¢à©‚XËÎä§/c£ nP𱂡ˆ×둬>W#V†/|¥àß)øAÁO ~Q EìG˜R·X¼3:ìNj¾¢qÈãÂq$ÅãH È‘\êªó ®˜4“Ùi(3i*3i,3i.3i03i23i43ù„´áÌNÓ™Iã™Ió™IšIšI#šI3‰1ð&ELI-˜w6¦2ªûS= £Ú@šŽ†Œjiê £dTŠ˜Ž†ŒJS•"¦2*ELdTŠ˜:Èè•"¦£!£RÄБ"¦•"¦2*ELdTŠ˜:Ȩ1uQ)bê £RÄÔAF¥ˆ©ƒŒJS•"¦2*ELdTŠ˜:Ȩ1t¤ˆ)AF¥ˆ©ƒŒJS•"¦2*ELdTŠ˜:Ȩ1uQ)bê £RÄÔAF¥ˆ©ƒŒJS•"¦2*ELdTŠ:RÄ” £RÄÔAF¥ˆ©ƒŒJS•"¦2*EìÎTÄ”4£ÙAF5:L×ÖŒæÑQ)b:2*ELdTŠ˜:Ȩ1uQ)bèHS‚ŒJS•"¦2*ELdTŠ˜:Ȩ1up•"¦2*EL\G¥ˆ©ƒŒJS•"¦2*ELdTŠ:RÄ” £RÄÔAF¥ˆ©ƒŒJS•"¦2*ELdôŒŒJÓÑQ)bê £RÄÔAF¥ˆÝ™Š˜’ft*bê4£stxuÒ^Hûh)[›ÑLú{ÐÔ°ýEhêÞf4•jšIšCÅft{•ÔŒnyGÅ‹ÝîÜDx¶T8šÞ“±·µÝòþ±ºð:Ø‹üžÖˆnyÛWÝHxurœKÃÃ+÷.D·|rŒètºFtîØˆ¦ã‘ ö¥å+jB·Ü¥ùâUtLÝJû™NIîUtÈ‹ {­J¯£Ya:g…Mè–ñW:ží-½Î3Ä£ w6 C šÏô5Wã9U+hN€Õ:ñ~½C›¹Ù®n/ì§2¾ÞÓý…÷dŒëÖê™Æ×d§m0ïÜ_xcn.½ãÙ2–ÃÁ›Ê¾•#Þ•» \ÍäÂHŽ}ªMäË4¥2Ï!G¼^‘4•Æ1Тû ¯ËÍq]Ã86r6‹w†ˆï¿‚rÄ{0•ëÏyêÓb1'ÍbþöCŽØï|è†ñ¯|Íb¾$‰}¬¼®Z&ïì/íN^r-“c¯èZ&s/yí/½Ž6ö¤îu2ÏÓëäœ#ö›.O­“¹²iéÕÉßSH¯$G¿5G¼’Ü<@sÄ{ò7¾–$^IN˜K¯dì<ÝÉsò·?m¦¼íO›ñYâ¹?m¦ îO›y´þ´9%ñºêÿogôÞeø¯ß”Ä-I¯÷á)8QðTA¬ç †$^W5%±ƒœ™÷¡†×¯`Hb8Ç[:Ô; ÞS𡂸ÜÄ»ìŸ+ò¾Pð•‚o|§à]ÕO ~Q Iìç}Jb'©ó Æ;sÄÔ)ïHbêw$1u®õxòªo˜Wcèah|¥Æ7 ¾Sðƒ‚Ÿü¢@z®WÛLSR0ÞÑÃî¤ü+ïèaê4y´&2“Frêa:OC™¦2“Æ2“æ2“3“&3“F3“OõúdÒpfò;gvšÏLÐLšÐLÑLšÑH¤‡á•Ó 1%Ȩô0uQéaê £ÒÃÔAF¥‡©ƒŒJS•¦2*=LdTz˜:Ȩô0uQéaê £ÒÃÔAF¥‡¡#=L 2úˆŒJÓÑQéaê £ÒÃÔAF¥‡©ƒŒJS•¦2*=LdTz˜:Ȩô0uQéaê £ÒÃÔAF¥‡¡#=L 2*=LdTz˜:Ȩô0uQéaê £ÒÃÔAF¥‡©ƒŒJS•¦2*=LdTz˜:Ȩô0uQéaê £ÒÃБ¦•¦2*=LdTz˜:Ȩô0uQéawRÎ6£)›Ñø×›¶™öÑ2Á)i›iwò<Íh^2*=LÏ2*=LdTz˜:Ȩô0t¤‡)AF¥‡©ƒŒJS•¦2*=LdTz˜:¸ŽJS×Qéaêà:*=L\G¥‡©ƒŒJSÕ퇩ƒŒêöÃÔAF¥‡¡£ÛS‚ŒêöÃÔAFuûaê £ºý0uQÝ~˜:Ȩ¶™¦2ªbê £ÒÃÔAF¥‡©ƒŒJ»3õ0%ø½“ô0uð›'m3íNŠãb4§‹¥‡W'·¼ £ÚfÚ4ýMhNýöW¡s†x-¿Æ×6Ó{2¨BÕˆŽ}EµËô~°Ôš Þƒ¼é¢ö˜Þƒ¡ÔÍç8”ñœcµÆsÜýØtnù¾ÜðzôÿšÎ-o¯)7¼:©µtûᕌ½Ÿ½‚N o:·?Ôüð:ÚPí¦sl«=¦W'çâä†äwÛ¦s{›ÎmøFÓ9;¦sÎ)›ÎÜWnx1*Òl¦‘‘ÞcÓd£™vGnxo¼ÌGo2ÇU™ÌWy¯_“™ Onx#3†«ÁLl,§^o£4Üf2ož*1¼7’b‰á=Ï”ÌXhtx=¼|™Œãß©«Mãxý ãz5‹çÏF1_q‰á…Bj^ƒ8nk·!. âØ°Ù æú­Ùáõ‚ä|rýÏÀ Ž)ÄTøš^ïÜ1Õk·!g Åøã¡ááÅC>]½FN7ìu(¾¯¾Õ9æ€k›E×™7"¸ÕygƒiX o½FæU×9¶ž®52·w–ö™“»µFæÏT4;¼wòò’Ã+ÛH÷_ðøÝ€6˜^¡ûSfnŸ2%‡}´½ý)3“þ”9å°Frøïß”Ã/9ÏöáÄ»êHÁÉA>ŸOtŽs5ò3TC¯ËÍ¿’7j<Ó9ÞPð–‚wôßSã]ÕÇ †öŒÕäs5†v#–Œ¯Õˆàê;5~Pã'¿èP’Ãð%‡))ÇÖÓEã ¦áyy]<ÞÙ`š:|/ftËy-Éáýh÷îA¼’1 kFÇfÑF4•äð~¬q]:U¯›HÐmœ¦Í[Aj{éõ`rgPùᕌ§ è6nµl@§7 ãNË^CÓ5jrx?ÿ¸g°éœʦs?60Sõ›Î¡§µ¹ôzÆp§éœӹ尦6—65éMg^´äð^7ç5›CÜzùÌ{×joéýPÛÌáBMæ˜6™ãY1˜ces9î½l,ó×’Ã~²þy‹ZÍ ïAþ˜âj&Çî¦FrÜ’ÙDŽ9ç"2M³‰ÜÆm”䫬˜È±}µâØ<ŽaXã˜ï m-½Þ(±ˆÊ¯=²YÌ]48¼ž÷|„ºÿðb1¥®YR·XLksþfó‡ 7³8¦zk•Þ´VÉ;~x=]99ksõÔì°Ÿ•4ǵFŽÝ^#³ƒk¤ö–†+3‘ãîáºÿ°ß()k•“ÛµJޤVÉ1^«dÞ¹@³Ãë òF ÒÃ{ò›hK¯äÎÖÒ+ÉEI¯äŽv'ÕuÎ ¥‡}´©‡)éÏ™S»zøå¿§‡õÿÿû?ÿÏ¿òW3 )8Rp¢àÉA>Ñç ò3Y©‡)¸Ñ¡ž)xCÁ[:Ç;j¼§Æ >Vz˜‚Ϥ¦à+ß*ˆõý;?(øIÁ/ ^¿Æ¤XÚ¶`œ³Ãx´ÂqÎc§LÉxÁΓf2ÖPfÒTfÒXfÒ\fÒ`fÒdfÒhfò iÙ/Øi<³ƒ|¾F@_#¡¯Ñ×Èè= £dôP+æØŽ=ôš™Â= £dô€ŒÑ2z@FÈè= £dô€ŒÑ2z@FÈè= £dô€Œ>"£Èè#2úˆŒ>"£Èè#2úˆŒ>"£Èè#2úˆŒ>"£Èè#2úˆŒ>"£Èè#2úˆŒ>"£Èè#2úˆŒ>"£Èè="£GdôˆŒ‘Ñ#2zDFÈè="£GdôˆŒ‘Ñ#2zDFÈè="£GdôˆŒ‘Ñ#2zDFÈè="£'dô„ŒžÑ2zBFOÈè =!£'dô„ŒžÑS3:ô0ýóâÔŒf§ͤͤͤz¯ =!£'dô„ŒžÑ2zBFŸÑ'dô }BFŸÑ'dô }BFŸÑ'dô }Âuô ×Ñ'\GŸp}Âuô ×Ñ'\GŸp}BFŸÑ'dô }BFŸÑ'dôŒŒž‘Ñ32zFFÏÈè=#£gdôŒŒž‘Ñ32zFFÏÈè=#£gdôŒëè=#£gdôŒŒž›ÑTÊÍh|v.FÿÌÛÒ5£cvØ«ÿvÍhœçÒ߃æ=iû‹ÐTÊÅhšŠ‹݆…5£ó^ÂÅè˜P-FÓ¡\Ìè–ûË^Ìè–›¿^ÌèÜsÙŒncLØŒnCšÑ-ËÅŒŽ»â^Ìè4Ñft\€»A›Ð¿òæ¿t4Ìgîª|1žs7nã¹=äYŒçÜrÚxnCv{ \çx9¯ÆsŽÔxncSbã9ì©éL's5œùkƒ«Ù¿FsÜÉ×dæìéÕ`ŽÍ•ÍåØÙXN=ì÷yn] gÊÓb2‡ŠkÙŒuáj"Ç´±‰ÌyÄ«‰#¿&røo9t½‰BÙ@ŽC™ÇœÚ¿Ç|_Mã0·†1Fq3‹ç¶ÃFqìPmóMz«u2}ý­PLÙi§^4¤ç»Åù7£8n0L(ÞŒâx„^ Çsbó¹ÅÔŸ·Zó—5·Zc4üfSýßÌâÔ¼†qüäåf·qÓçZ †^ÏýØEÿV äCjþZ óÖÝ·Z sô¹È³õ÷;½ýsýý~ˆ¿ßÏõ÷;ÜòÜŸ1ó>Áý3À|îϘÙÁϘÏý3urÆj¸þmKjxûM5¼íj8íìá%Ä#=Rp¢à‰‚3— †öåæ’Ag ÞPð–‚w¼§à+jØ0‚ÏÕjؾRã[C ûPü ÆO ~Q 5 'yÝ,¦,l3i3i3i3i 3i"3¹âã¹aÒPæÑšÊLËLšËLÌLšÌLÍL>áãi8³ó;gvO©ab •¦2*5 ©aJQ©aê £RÃÔAF¥†©ƒŒJ S•¦2*5LdTj˜:ȨÔ0uQ©aê £RÃÔAF¥†©ƒŒJ CGj˜dTj˜:ȨÔ0uQ©aê £RÃÔAF¥†©ƒŒJ S•¦2*5LdTj˜:ȨÔ0uQ©aê £RÃÔAF¥†¡#5L 2*5LdTj˜:ȨÔ0uQ©aê £RÃÔAF¥†©ƒŒJ S•¦2*5LdTj˜:ȨÔ0uQ©aèH S‚ŒJ S•¦2*5LdTj˜:ȨÔ0ušÑ©†Ýɤj˜:ÍèTÃÔiF§¦2*5LÏ2*5LdTj˜:ȨÔ0t¤†)AF¥†©ƒŒJ S•¦2*5LdTj˜:¸ŽJ S×Q©aêà:*5L\G¥†©ƒŒJ S•¦2*5 ©aJQ©aê £RÃÔAF¥†©ƒŒJ S•¦2*5LdTj˜:ȨÔ0uQ©aê £RÃÔiF§vgªá•ÜQÃîäÑŠÑy×Ặ˜m“öyÒþ£c“êb4瑤†÷£M1kFç°­ÝÆU›Ñí!ï•lF§~5£sÜ׌ΎÝƼ³ÛA›Ñ´2ÃûS0·–^A~] hJËùw#6ž£a:G`8sLR^x½bc8Ùëç6^e¯Ÿcj÷âõs*{³9ny,/¼®` }šÍmŒášÍárfn‘}5™)¬¥…×és¤]^xOòx5—ÃŽ˱tQ9fz‹Êq—`S™7Ÿ½ÊqWc3¹M3¼?’qÁ^5‡œ5“Ãó“c_iàþj&‡,/&ã{Ðk1™›_ÍdšÈ«‘³ßEdŽœÊ ¯þ!£‰ÌñdÉáõÞŽ•÷fÇÄ­yœŽ²–ÊüEŒìð~–±½s™l ‡‚6c/l9îll_æ9Œãp½µFŽ{ø6)Ó½HæÌüðz†Çè0=õrÜØ‹äß9¸\@æC4ÛO."Ç]‚k•Ì¿Q’Ã^Yó–ÏÅdþªErxuòo®ä°ÿ²Æ»å¹VɱátýÏWFrxýÕOq-9ìÏñì<÷§Ì±­tuBƒ?ã§LÉáužDà¹?e¦6îO™ýiéþ×ÿþ¿ÿþOýçü×ÿú—¿)‡–>:Ч£¤àHÁ‰‚' Î\*ÈßñPp£à™Îñ†o)xG‡zOÁ:ÔG >Qð¹‚!‡ý 9 Á·:T¼Á¾Sðƒ‚Ÿü¢@rØ—•R°Y̤a̤i̤q̤y̤̤‰Ì䊧™ÌNC™IS™Ic™Is™Iƒ™I“™I£™I³™IÙÉ|v¾b‚|J;H¨ä0uQÉaèHS‚ŒJS•¦2*9LdTr˜:Ȩä0uQÉaê £’ÃÔAF%‡©ƒŒJS•¦2*9LdTr:’Ô £’ÃÔAF%‡©ƒŒJS•¦2*9LdTr˜:Ȩä0uQÉaê £’ÃÔAF%‡©ƒŒJS•¦2*9 ÉaJQÉaê £’ÃÔAF%‡©ƒŒJS•¦2*9LdTr˜:Ȩä0uQÉaê £’ÃÔAF%‡©ƒŒJCGr˜dTr˜:Ȩä0uQÉaê £’ÃÔAF%‡©ƒŒžQÍ ÓÑÑ2zBFOÈè =!£’ÃtÕȨä0uQÉaê £’ÃБ¦•¦2*9LdTr˜:Ȩä0uQÉaê £’ÃÔAF%‡©ƒŒJS•¦2*9LdTr˜:Ȩä0t$‡)AF%‡©ƒŒJS•¦2*9LdTr˜:Ȩä0uQÉaê £’ÃÔAF%‡©ƒŒJ»“Ò¶r˜:Åhz›s3šB¹Íí›ÑøÒ]rx]Á¸Gl1šÛW_ŠÑqÿ`3:'cÍèØí؈n[Úi#ºåà“Æ†÷‹·ºÔذ“<šßü_Œè¼®wý5¡c<Ú€¦WÒÌð~acÎ×xކéÛPÎ;#Ãû9îŒ ïÁ0Ù&sK wñê¹Ùp“¹å^ËRÃëÉ`2·!€Mæ6„ªÉÜò^šW“9†v æÌå+5–cŒPjx½`¹9µ±Lg~5•c'fC9€Íä˜p6’cj·Í92ìç>ö‡6‘ù:^MdØkdø>F×"2Ÿ9Þ[2Ãë²ÒÀ^½\ôä†ÝI RPæ¤äðÞÞfrÜ´º&°|÷ö3“³ &2gòo&rüºD£Ã~”y0Z*oFr]#9n”Ü e>39¦£Íd¾‡5;|¹™É±~Þ¼Lnÿ›Ê|Kȯ·]>+¦rHà¢2]oQ9‘Måpù eêÿ‚2ßö·^)ój¥â¸VÊüÛ*=¼°›:–ùƒ éáÕÉ_¾hvVdéá=yÈ_’H¯$ÕµôðJò³‚f‡ä\sÎÛJ»“íK¯£¤?g’þ×oêá- Wwx ÁcñIêHÁ‰‚' ÎtòKç•‚ÏtŽ7ÔxKÁ;:Ô{ >Pð‘Îñ‰‚Ï|¡à+ß*™÷‚ü¤àÒÃ&.Ub³˜IØIÓ˜Iã˜Ió˜I™I™I#™I3™IC™IS™Ic™Is™Iƒ™I“™I£™I³™IÙIÓ™Iã™ ò)=Lì ¡ÒÃÔAF¥‡¡#=L 2*=LdTz˜:Ȩô0uQéaê £ÒÃÔAF¥‡©ƒŒJS•¦2*=LdTz˜:Ȩô0uQéaèHS‚ŒJS•¦2*=LdTz˜:Ȩô0uQéaê £ÒÃÔAF¥‡©ƒŒJS•¦2*=LdTz˜:Ȩô0t¤‡)AF¥‡©ƒŒJS•¦2*=LdTz˜:Ȩô0uQéaê £ÒÃÔAF¥‡©ƒŒJS•¦2*= éaJQéaê £ÒÃÔAF¥‡©ƒŒJS•¦2*=Ldô„ŒJÓÑQéaê £ÒÃÔAFµ­4uQm+MdTÛJCGz˜dTÛJSÕ¶ÒÔAFµ­4uQm+MdTÛJSÕ¶ÒÔAFµ­4uQm+MdTÛJSÕ¶ÒÔAFµ­4uQm+MdTz:ÚVšdTÛJSÕ¶ÒÔAFµ­4uQm+MdTÛJSÕ¶ÒÔAFµ­4uQm+MdTÛJ»“ª¿vÒ¶ÒÔAFµ­´;)›ÑøÊÿ\ŒÞ™^GË9Héa'¹át1::Åh~ë¯Ùáýh[nez1£cÓ΋ó¹ftz[3:ô¬ý+§MèËxÙ$‡÷K²Ó|¦Á¸ÏÑ0ã†s4Ìæ±áýªÆã0™åËe0ï¸áõšü‘s9ý»¹ÜÆ¦ÙærÒ\ŽIß‹¹¼·Ÿ´yIh.Çm}eÎ:_Må4.(ÇøhCfGrx]ØpÓ†rÜ\×LŽ‘ÞZ6ƒÉ«™ØLæûXcÃûeåž¼W39vÌ.&ãËFÙáýPcëæb2%°—˱ÿµ™ÌŸ~H½Ô^,ç}… eŽ|jnØK5^LŽùk39îm$óÑßü×|ΚÈ9l$ÇÞÊF2^"7l¼R)ÉqËc™ÓÑ7™;ìk[i?ay¹¥¼Éù ÍäÐùÒÃ>O*]S¹ý˜ Kéáµð¯Ú[š¹,iwiê™c_ï"3ßù·Z.Ç´w¡™›Oh€x]Á:®år$µ\ [p¾È±Ú‚3ì!C¼® ÿŽÉ¯$-¹ ñž<äë&C¼’±#uÔLÜ5sGêþ¨™IÔ̤?jÒîÒþ¦!þsâxN/Äz¤àHÁ‰‚' Îäç ®ä;‡Ï¼¡à-ï(xOÁ >Rð‰‚Ï|¡à+ßèIüNÁ ~Rð‹b—f°Y̤a̤i̤q̤y̤Ìä‚WH¾¾a§¡Ìó4•™4–™4—™4˜™4™™4š™4›™4œ™4™4ž™ Ÿ2ÄÄ*CLdT†:2Ä” £2ÄÔAFeˆ©ƒŒÊS•!¦2*CLdT†˜:Ȩ 1uQbê £2ÄÔAFeˆ©ƒŒÊS•!†Ž 1%Ȩ 1uQbê £2ÄÔAFeˆ©ƒŒÊS•!¦2*CLdT†˜:Ȩ 1uQbê £2ÄÔAFeˆ©ƒŒÊCG†˜dT†˜:Ȩ 1uQbê £2ÄÔAFeˆ©ƒŒÊS•!¦2*CLdT†˜:Ȩ 1uQbê £2ÄБ!¦•!¦2*CLdT†˜:Ȩ 1uQbê £2ÄÔAFeˆ©ƒŒj€˜:Ȩˆ©ƒŒj€˜:Ȩˆ©ƒŒj€˜:Ȩ 1t4@L 2ªbê £ ¦2ªbê £ ¦2ªbê £ ¦2ªbê £ ¦2ªbê £ ¦2ªbê £ †Ž 1%Ȩˆ©ƒŒj€˜:Ȩˆ©ƒŒj€˜:Ȩˆ©ƒŒj€˜:Ȩˆ©ƒŒj€˜:ȨˆÝIŒß:i€˜:Íè ¦2ªâÕûN£wn<ìóähq1::ÍhîH]ŒŽ¡ãbtÜ*ØŒné°dˆ÷kÛþ˜Ä{2ü©Í/Ê5?¼7rúJwÞƒqvó9¦¤çh˜ÎÎ;‚x?ù6š9ø§}¥÷Ƙø5˜ÛнsÎÌ9Õm0ç”°Ï{Šx½\9ƨùá•ü•ÀÌ1s¬­¥×S“wS4—÷–é”MåŸÊ9ªÚP¦ -(Ç4°Î1ðl(_¦6”c¬ÙP¦#ºÊ4‹2Äë)N%E¼žÈ<»©g÷Š9T·©Ì_'h€x=o™ª›¯dìÄ]XŽNaùúØXŽ=¤‹Êtt ö¥%HEå–\˜Ê1vk(Ç›LÛK{­ÊSc9æ[åØªº±Œïµ½ô:˸ÆrøcS™?‘&^\¤½5•÷,±dnñl.Ç6ü²Ä¾äÜËÙ`Nån2_dÅdŽáæZ/óÁ™CëšÌ±)v¯—s“iz,µ^þ‘/Y“™ÏY“üÝŠÌ\ã4Elšs·ÐÌ7š¦ˆ½.ç¶ÐFsËÃåˆW'(!G¼'s¾¸>læVõš"^qmýasN¯Î)bJî™Ín2ýâ7ñ rÄ<¾„àXAr¢ÆSùK@j\(¸ÒÉoÔx¦à oéï¨ñž‚|¤àŸéIüB¯|£ø‚ü¤àrÄ+Ýà“†1;HãëÆ1;Íc&g¼‚&2;ˆ¤1=Ò†2ÖTf‚X¾n.³Ó`fÒdfÒhfÒlfÒpfÒtfÒxf‚|ÊÓ3Š„ÊS•#†Ž1%Ȩ1uQ9bê £rÄÔAF利ƒŒÊS•#¦2*GLdTŽ˜:Ȩ1uQ9bê £rÄÔAF刡#GL 2*GLdTŽ˜:Ȩ1uQ9bê £rÄÔAF利ƒŒÊS•#¦2*GLdTŽ˜:Ȩ1uQ9bê £rÄБ#¦•#¦2*GLdTŽ˜:Ȩ1uQ9bê £rÄÔAF利ƒŒÊS•#¦2*GLdTŽ˜:Ȩ1täˆ)AF利Ãÿ:BFOȨ1•#¦2*GLdTŽ˜:Ȩ1uQ9bê £rÄÔAF利ƒŒÊS•#¦2*G 9bJQ9bê £rÄÔAF利ƒŒÊS•#¦2*GLdTŽ˜:Ȩ1uQ9bê £rÄÔAF利ƒŒÊCGŽ˜dTŽ˜:Ȩ1uQ9bê £rÄÔAF利ƒŒÊS•#¦2*GLüÎIŽØéˆ)Á¯4ELf4ÏÓŒfRŒÞqÄë<ãžÁȨ¦ˆÝ™w v’Ó§ÅhŽiŠxuÒûhŠxO¶aPÍè–çbFs.T›Lï*Ø„æþ˜rľ°îÁ«!â䨱ñÑtæ$§î=¼jÜ0Øl޽ªfîM+G¼*ç».sËS/^<ï9âõÔç¥n?¼’¼a¯ö˜¦Ä`ÎÒ`nc÷k/žc#q9âýe‡é•"¡²ÃÔAFe‡¡#;L 2*;LdTv˜:Ȩì0uQÙaê £²ÃÔAFe‡©ƒŒÊS•¦2*;LdTv˜:Ȩì0uQÙaèÈS‚ŒÊS•¦2*;LdTv˜:Ȩì0uQÙaê £²ÃÔAFe‡©ƒŒÊS•¦2*;LdTv˜:Ȩì0td‡)AFe‡©ƒŒÊS•¦2*;LdTv˜:Ȩì0uQÙaê £²ÃÔAFe‡©ƒŒÊS•¦2*; ÙaJQÙaê £š ¦2*;LdTv˜:Ȩì0uQÙaê £²ÃÔAFe‡©ƒŒÊS•¦2*;LdTv˜:Ȩì0td‡)AFe‡©ƒŒÊS•¦2*;LdTv˜:Ȩì0uQÙaê £²ÃÔAFe‡©ƒŒÊS•¦2*; ÙaJQÙaê £²ÃÔAFe‡©ƒŒÊS•¦2*;LdTv˜:Ȩì0uðßœd‡Ýi;ì$ÿMoÍdí b:2ª bº‚a4G8‡ÑL£Ï<‚x;Om¬FóÆ‹Ñê,Fk/µݽ ‰";|¿‚çvLß“šU5¢µãÚ„Öб-Ùk>+0žeMg]•á,Ím6ŸÙ1½½Àtö&37ÊÊßµvÛ\¶66—»]ªqß;{ï·¹ì-âæ²·ˆ›ËÚŒl,ëi¾‹ÊT¾qæ¼»6Lß_~N¢]d>žój"멵²†—×=3ýóºeæöcãXŽÛ8–ã^÷Ë0JrÃþaÕksMöºWæÕšÆÜV¬goïa6|£LLå†}QY1Žõ³«go|²øuñXÓÎÃcžgñ˜y½.sQîÕ<¶Ï5õ(aÙó¶&²‡.9¼½Ð’°f²·"Ê–¦² l*óéÞÒÃ÷ó׃vMeKPcÙÏ 6—»it˜õp^ºQÞŒæß©ÍfÍaÍÒùF³5hæIšõðé…æ3û¥é³Ä[¥ì°AÏ·ln•)ášù ôÉhîžÙ/½'Ÿd®ýÒNâ d‡·$q’¾'/R·ËoIþºÞ’š*ž¯™ñÅCvxëÔ³–çkfÜŸækæ$¿ÚáW¿i‡_Ñì°ƒÚ/ Áñ¥ƒøNt¢à¼‚²ÃpU—Õ(;ìF·Õȥ伦à ü-ï(xOÁ:ùG >Qð™‚/|¥«úFÁw ~Pð“Ùaøö˜0ÛÓy†Ç¶ÃÔA"e‡©3L¶¦ÎPÙv˜:Èå‚ù€d> šm‡é ζÃÔ<ÛS}@Be‡éhȨì0td‡)AFe‡©3·Ìxd‡©óˆ 2ºGFe‡é5:¼%iÖ.¾w–ØÒzé{§ÞcYÎÏTÖ쮡LÙp5“õÌ^#Y·&2—Ko/±FN d‹MY96µÛzáJ×4¦hÑjéí²RƒšÆZ­lëPëf™Ë³=:|?yª6m–¾µðÚ4öT¸q¬‘Réa¿ó)9õ™, ˳/ svSzØçIÓn"w/ràÔH–l4’-Íd«^CÙí5•Ïéáí#ÈyÓ¡2§WMe.£—öÏwÌXîêaº Ìz˜î"³d·Ñ¬Ú Íì5›=Šl8ëð­²¶NÎÚ§ 'oof¾e κ°g/8kzzî–‰Ó‚3·i¹´ƒ¥¼^pæ#$ˆ·N /:kHxÑ™²$A¼íA|OžÄ[’»A$ˆ·¤®z¾i¦ìoš™Ì7Í~ñvž?éÄý¦ þ‹1‡—)8Qp¦à‘‚Ë JûªJCðD‡zMÁºª·¼£à=ã)øDÁg ¾Pð•‚o|§à?) †OJ‚˜’1eâÐØ‚˜Ž6<¶ ¦)AL&åRù0XæU—™ ˜™ ™ÄôzÍ„óé|@<OÓµ!¡ÄÔAF%ˆ¡#AL 2*AL¹e¶ ¦ÎÜ4³ƒŒJÓÑÑ=2ªña:2*ALdT‚˜:Ȩ1uQ bê £ÄÔAF%ˆ©ƒŒJCG‚˜dT‚˜:Ȩ1uð>*ALdT‚˜:Ȩ1uQ bê £ÄÔAF%ˆ©ƒŒJS• ¦2*ALdT‚˜:Ȩ1t$ˆ)AF%ˆ©ƒŒJS• ¦2*ALdT‚˜:Ȩ1uQ bê £ÄÔAF%ˆ©ƒŒJS• ¦2*A  bJQ bê £ÄÔAF%ˆ©ƒŒJS• ¦2*ALdT‚˜:Ȩ1uQ bê £ÄÔAF%ˆ©ƒŒJS• †Ž1%Ȩ1uQ bê £ÄÔAF%ˆ©ƒŒJS• ¦2*ALdT‚˜:Ȩ1uQ bê £ÄÔAF%ˆ¡#AL 2*ALdT‚˜:Ȩ1uQ bê £ÄÔAF%ˆ©ƒŒJS• ¦Î0šzvmA죵 vÿ¨ù8Œf2ŒæÑ†Ñ^.íód2ŒÆÑ$ˆáÚ´\ÚIêÙa4“a´Ç‡é<‹ÑzÐñb´´êb´tób´R›Ñ]êHí—¾_[MýÑ\ó{1¡uzšsÚ/}?G5ŒgºÐ‹é¬ÇÎû‡ðÿùÿýïÿÔ~éû9j¬Ù·ÏWù©øîYžÝ`–:6—õ^Ë4¡ÒÃÛ'Ÿè ”áHÍd¾À«‘¬ic™ Q5;|?yM=jxØIþƒº,jÛyšÇ»Ônéí4)œ®æ±vHÇÔmRÄÛçï—i̧Òj·´Ou·lC|oäŸWh€øäø¦ ±ßÇ”­Æ±æJµ]zëÔªj¹Ë?&ÐñÖÉEèÚ.½%%Íäî™ b-u»©Üåz­—v'·(›Ëz÷Í`Ö¾Fˆ·74'H˜äi˜ù`Üæ™,0ó/=äˆýjÚ›ša]dÖƒqæs Þ ÍK[p–p5õP›o–­ÏÍgý톖Lûåäûi@ë9Óæ³‚…gîW¾-Rð‰‚Ï|¡à+ß(øNÁ ~R I ¡$1%cKbê ŽÙ[ÓÑHIbê “¥$1m°lIL³%1uÍdS’˜Ž†tJSù”$¦*ILdT’:’Ä” £’ÄÔAF5EL¹i¶$¦2ª)bê £’ÄÔAF%‰©ƒŒJS•$¦2*ILdT’˜:Ȩ$1uQIbèHS‚ŒJS•$¦2*IL¼JS•$¦2*ILdT’˜:Ȩ$1uQIbê £’ÄÔAF%‰©ƒŒJS•$†Ž$1%Ȩ$1uQIbê £’ÄÔAF%‰©ƒŒJS•$¦2*ILdT’˜:Ȩ$1uQIbê £’ÄÔAF%‰¡#IL 2*ILdT’˜:Ȩ$1uQIbê £’ÄÔAF%‰©ƒŒJS•$¦2*ILdT’˜:Ȩ$1uQIbê £’ÄБ$¦•$¦2*ILdT’˜:Ȩ$1uQIbê £’ÄÔAF%‰©ƒŒJS•$¦2*ILdT’˜:Ȩ$1t$‰)AF%‰©ƒŒJS•$¦2*ILdT’˜:Ȩ$1uQIbê £’ÄÔF[»Ó’ØI ßa´%1u†Ñ–ÄtÃhv†ÑÔ„Ãh ßa´%±¯ %1%ÃhÎ /Fkûôb4ç´cz;O ¦.FK,/FÿH[iFwùÏøš#¾Ÿç¯—6¢¹¼óbBë’ h=Ò×|–>6žu(ÓY/Þ7е¾–>6šõÞûîù̈ïoImjŠx  cY³à¦²¦\ å3–ø~ŽW½aúÔX¦4ñ–Ô”©‘ÜÕSƒd­¾ɲTW#Y¢PžØ×Ö‹¦7¼ÒTšÈR¥ë¦™Ïî5õ^®[f¾e²¤ëºaæåÈž—(ö+L9a"k¨_¢xëÔk4“»œ“—(ög™rÛ·ËÖÁƲþ6D³ÄÄÌóQ¼uj`Ô·ËçD±;ù\ÛÅfm.6›Ï<‰ø~°zzî"3ÿTà6d¦¥2SûfY«äõ(b¿ké\×Í2­ób³ªá¬íóZ6½f—ÕxÖ‚lã™)"Müü™f‰· Ïa8ëPf3ÿªF’Ø×›2|¡Yó ͂i¡YÃì Íg&‰·+Èeú’ÄNâuJ;ÉEÏ Í|x¹VMß;/þÈ£­ßäyÕ’Ä[§Q<¿Éãþ¤UÓ['ÿxìiý&Ï[‡VM»3?j¿HâWüž$Öÿ¯ÿú¿½È]{ )8Qp¦à‘‚Ë ò>LÁ‚' ^Sð†®ê-ï(xOÁ >ÒU}¢à3_(øJÁ7 ¾Sðƒ‚Ÿ<<`2,¦ÒKãÑÇ’ÄØ ³ƒD>\ñhÈäBù€T> –%‰ñ Ì’ÄØ4³ƒl> œHçâù€|>  Hè"ú€Œî‘Ñ=2ºGF÷sÇL­‹Œîçž™dtŒî‘Ñ=2ºGF÷ÈèÝϽ3_2ºŸ»gvÑ=2ºGF÷ÈèÝ#£{dtŒî‘Ñ=2z@FÈè= £dô€ŒÑ2z@FÈè= £dô€ŒÑ2z@FÈè= £dô€ŒÑ2z@FÈè="£GdôˆŒ‘Ñ#2zDFÈè="£GdôˆŒ‘Ñ#2zDFÈè="£GdôˆŒ‘Ñ#2zDFÈè="£'dô„ŒžÑ2zBFOÈè =!£'dô„ŒžÑ2zBFOÈè =!£'dô„ŒžÑ2zBFOÈè =!£'dô„Œž‘Ñ32zFFÏÈè=#£gdôŒŒž‘Ñ32zFFÏÈè=#£gdôŒŒž‘Ñ32zFFÏÈè=#£gdôŒŒž‘Ñ32úˆŒ>"£Èè#2úˆŒ>"£Èè#2úˆŒ>"£Èè#2úˆŒ>"£Èè#2úˆŒ>"£ÃhIâõï%‰1FóhÃhIâu´š$^IIbº‚Ë0šúxÍdÍd­Ib¼‚Åè?óqÃÃhjÝÅhu£å\£ù˜Ó‹ÝÕj3Z3m3Ú–x{¡5mB˕РŸùf.<ó35FíhN§^|ÿLs1šyŠfº`ß;S¬]Ö­3å;g¾ð«¡¬AS3¹KÑ5“»š¿5“»zì¬ï›»zF±™ÜåI¯f2­ÁÕHÖ#yMd®Û½È:”yü3-­q¬‘YÓØŠxýØå,±1­Yâ-¨“›ÆR·¦1t}]4þQ#ÞNò̶é•äã“ dûf#¹ëQb­hm(û³7•-.eO¸—¹Rx¸Œ{ØmqY“´‹Ë?R·šËz²±¬¥ÒƲ·-›Ë^wm0ŸY7½½Ÿ¹´þf2ËÜ.2ÿ‘"Ö¿ËûÝôò™Ibž5Ék:{ÝôVÉ- 7ÓY"Ø÷ÊZi½î•=Gìëª'/6k ·ï—í᛹Pÿ¶ØÌIÿ§Åf+b_[­¡^læ=-6ó‡ýi}׬iáõ{'ˆ·×S–µÑya™Ò A|?Z JSY²wAY«¦ýä`çÍTîjoµ±|Îß/,·ŠßÌ嫜96—m” f[ÐEf Íšá¿™Í]=(Øpþ—¶àL×n8Ki/6ëS^lÖÐ÷Ü,sq¸ï–MÓ°™ÃÝ‹Í$]‚x#°T«ï˜õõ´Ø¬e΋͚Æ]·Ì\ A¼]Aþ¦|Z¿Åó• ޾ɔ֞ßâ-ˆÝ‰OT‚Øß‹jÑôJæÃþU¿øMAü‚1‡WJCp¢Æ™‚G .\)¸QðDÁë„{CÁ[:Ô; ÞSð‚|¢«úLÁ ¾Rð‚ïü à'Äæ§1%cvŽx´Á±1g€lALA²1uÊì •Ät´á²1u†Ìì š-ˆéh§1uO bê  ÄÔAD%ˆ¡#ALÉdT3Ät4dT‚˜:Ȩ1uQ bê £ÄÔAF%ˆ©37ÏàM‚˜:Ȩ1uQ bê £ÄÔAF%ˆ©ƒŒJCG‚˜dT‚˜:Ȩ1uQ bê £ÄÔAF%ˆ©ƒŒJS• ¦2*ALdT‚˜:Ȩ1uQ bê £ÄÔAF%ˆ¡#AL 2*ALdT‚˜:Ȩ1uQ bê £ÄÔAF%ˆ©ƒŒJS• ¦2*ALdT‚˜:Ȩ1uQ bèHS‚ŒJS• ¦2*ALdT‚˜:Ȩ1uQ bê £ÄÔAF%ˆ©ƒŒJS• ¦2*ALdT‚˜:Ȩ1t$ˆ)AF%ˆ©ƒŒJS• ¦2*ALdT‚˜:Ȩ1uQ bê £ÄÔAF%ˆ©ƒŒJS• ¦2*A  bJQ bê £ÄÔAF%ˆ©ƒŒJS• ¦2*ALdT‚˜:Ȩ1uQ bwZ;iALÉ0Ú‚˜ÎƒŒJÓëF[Ãy.ÃhvðB%ˆá $ˆ)Á ½,FK:.FK/Fkuòb´V$›Ñ]NA^Ìh=U3Ä÷׳K½y1£»T 3šÃ\rÄ÷ƒ¥âº˜ÐÀ“#ÞÞÎülÌgjÝBãã5E¼½’<”áL½xñý³¦…fÊßÏñ*þAãb0_†&Ññ½‘3WcÙ+…eÙIâí%æ¸æÕXö€±±,%K¼]ZŽßšÊ\Î}5”©c’©•Mdo{>Ø/0´n˜y$³XâÚ,Ö¨°Yì7Ä0Ö£h%‰·7þEžß8îíëâ±,ü2Ù^Mä®Þz#ùÌžéE@)I쫎äf*k%ýma™óÒ·…å‹´”Ʋ–F/*Ÿ"¾_ZÍ·ʶ´¦²]ð²ÖLûǵG¼Þ³|-ëN™œr[wÊ«†³¼®á¬`ÃY3Ôg^˜á¬wl±Yò~±Yo¿Ù,{¿Ð¬ðA3aZhöžéõ6ç2ïA3ýè ™£µ Í|àýÓB³×3W Èo?9”-G¼Ýœòm“#Þ’/ž_äµgzý†ËG(Ï—ÍvÄþ’AŽø¿éˆÿAŽ‚Ã+Ž+ˆ_³' ÎRð‰‚Ïô:¾Pð•‚o|§à?)#†·÷aÉÀØŽ˜Ž68¶#¦ÎÙŽ˜:ƒd;bê ”íˆ©óßá²1mÈlGLa3;g&H§öLÓyO홦ª=ÓÔAF刡£=Ó” £rÄÔAF利ƒŒÊS•#¦2*GLdTŽ˜:sólGL¹}fÕži:2ª=ÓÔAFµgš:ȨöLS•#†ŽöLS‚ŒjÏ4uQ홦2ª=ÓÔAFµgš:ȨöLSÕžiê £Ú3MdT{¦©ƒŒjÏ4uQ홦2ª=ÓÔAFµg:rÄ” £Ú3MdT{¦©ƒŒjÏ4uQ홦2ª=ÓÔAFµgš:ȨöLSÕžiê £Ú3MdT{¦©ƒŒjÏ4uQ홦2*G 홦Õžiê £Ú3MdT{¦©ƒŒjÏ4uQ홦2ª=ÓÔAFµgš:ȨöLSÕžiê £Ú3MdT{¦©ƒŒjÏ4täˆ)AFµgš:ȨöLSÕžiê £Ú3MdT{¦©ƒŒjÏ4uQ홦2ª=ÓÔAFµgš:ȨöLSÕžiê £Ú3MdTŽ:Ú3M 2ª=ÓÔAFµgš:ȨöLSÕžiê £Ú3MdT{¦©ƒŒjÏ4u🜴gš:Èèã0šöxM<ŒfgÍdí=Ó¾êL†ÑF{Ï´–a4µ"þK¨1\›†ˆ·¤Lð0Ú{¦}´Üv¼­'õ.F+YŒ–q^Œ¦ã’#Þ® 4›Ñ²RrÄ÷NΦÊ߃’Ç&´ŸG¼5êYÁæ³4­ñ,C¾è §MÓ÷«Jµ G|êyÏF3¯1¼rƒùWz:sù*“#¾ªd˜‰·$Ÿ)-Gì$ª±Ü•4–=bl,w93ª]Ó÷ó䳫%‰··2ƒ e*T#™êÜ@æë0Ži讋ƖÄÛ{’ï¼a,{lÿÊ“ûnÙú¦qW{žã.™±?à|³ ä.Ÿ·+G¼už$vw oI ,Ê]’/GìNÊ»…eÞ)äˆ _;âí§"¿™Ê¿ÒÑ.(ËD/(s³€&‰ý~æ¦kS™èÍT>3Hìcõ$±_e¾˜…fÍ ›Íüq¹ùF™;Û5G¼ý€å[i6KÞ.6k(x±Y×µØ,á;læ>ña3ß™a3;¾]î^ä\øb³hZlæ¶mšögÓ’>5Ibø¹Ñ¦i“ž¾ë–ùŒ$¾w^ä”·$ñ–ôÈԈñü&oI¼­Ôö|ÛÖ$þçoJân’8~Þ÷¯ÄÕ‚ã JûPœ©ñHÁ…‚+]Õ‚':Ôë”$öë(I /ðã=(øHÁ' >Sð…‚¯ôÊ¿Qð‚ü¤@’Þ^IbJÆ–ÄÔ9áцÇ<ÚÙ’˜Î3H¶$¦Î@Ù’˜:oðõ¼ÅdÀÌó ™-‰é †Í–ÄÔ:³3xf‚|JÓyPIbê £’ÄБ$¦•$¦2*ILdT’˜:Ȩ$1uQIbê £’ÄÔAF5HL¹}¶$¦ÎÜ@³ƒŒJÓÑQIbê £’ÄÔAF%‰¡#IL 2*ILdT’˜:Ȩ$1uQIbê £’ÄÔAF%‰©ƒŒJS•$¦2*ILdT’˜:Ȩ$1uQIbèHS‚ŒJS•$¦~÷”$v'¾®j˜’a4;Ãh&øTƒÄtža4†ŒJÓ{€ŒJS•$¦2*ILdT’˜:Ȩ$1uQIbèHS‚ŒJS•$¦ÞG%‰©ƒ÷QIbêà}T’˜:x•$¦2*ILdT’˜:Ȩ$1uQIbê £’ÄÔAF%‰¡#IL 2*ILdT’˜:Ȩ$1uQIbê £’ÄÔAF%‰©ƒŒJS•$¦2*ILdT’˜:Ȩ$1uQIbê £’ÄБ$¦•$¦2*ILdT’˜:Ȩ$1uQIbê £’ÄÔAF%‰©ƒŒJS•$v§%1%ÃhKbê £-‰ÝI=Œ¶$†Ž‰)ÁÕ 1\µ$1¼£’ÄNRø£-‰·N ßÅhÌa4Ï3Œf²-½Íñ8 ߯m÷Ì㈷¤VD›ÑÜ;«Iâ{¥œ¯ -}l@_åâjó™£aš$¾Ÿ£Þ1ÓYçð ôeþaÙÌ®²Ä÷sü “YKÕ(ñ½ò²÷MoocnÖ•&Þ’Z-l0ûYųçc fMj”x;O9Iß<[ Ì?{šx;XOû,16l*óYLÆo"Ûo|ü÷¦1ѾšÆÚumË›Æ^élw5Ümû‰Ó²;&²³‘ì?*0“µÓX“ÄÛ;Ÿ?v²ÄþLÒëùvYî²Äæ5›Êš‹5”¹Ùàf&kCòB²dè ™úÒHÖ›&K줔á¾WÖð¯¡Ü•¥6–µþ¶n•ä;ã_çåÍf=[Ølþ*ÖlÖƒÅõ8bßóô Κñ]pÖË\pæCÏog ôguœù³¦}ÓÛUçmYšnÚ7í$~ÃI;Iµ¼n™¥£×-³o¼n™yŸ—&¾ŸçEm¢^ß7kÎy~—Çû¦}ÓÛÑjös¿ËÕÄþ¦&þ“4±ƒÒÄ_9(M Á™\(¸® ÿT„‚':Ôë”&öë(M /ðã=(øHÁ' >Sð…‚¯ôÊ¿Qð‚ü¤@šÞ^ibJ˜ )OØ[Ó ‘Ù$[ÓÑÊÖÄÔyƒ¯ç-&fkb:Ï ™a³51mèlMLäSš˜:H¨41uQibèHS‚ŒJS•&¦ÎÜ4Sw"£{dTš˜ÎƒŒJS•&¦2*MLdTû¦©37ÐÖÄÔ™[hvQib:2*MLdTš:ÒÄ” £ÒÄÔAF¥‰©ƒŒJS•&¦2*MLdTš˜:Ȩ41uQibê £ÒÄÔAF¥‰©ƒŒJS•&†Ž41%Ȩ41uQibêàwOibwZS2Œ¶&¦~•&¦Î0Úš˜^)2ª}ÓÔAFµoš:ȨöMSÕ¾iê £Ú7MdTû¦¡#ML 2ª}ÓÔAFµoš:xÕ¾iêà}Tû¦©ƒ÷Q훦ÞGµoš:xÕ¾iê £Ú7MdTû¦©ƒŒjß4uQ훦2ª}ÓÔAF¥‰¡£}Ó” £Ú7MdTû¦©ƒŒjß4uQ훦2ª}ÓÔAFµoš:ȨöMSÕ¾iê £Ú7MdTû¦©ƒŒjß4uQ훆Ž41%ȨöMSÕ¾iê £Ú7MdTû¦©ƒŒjß4uQ훦2ª}ÓÔÁqÒ¾iê £Ú7MdôÿÙéqmMìód2Œ¶&¦Î0Ë0šÉ0šÉ0š 2*M ï›4±“TˆÈèe1Zjÿ9ô²­MÔ‹Ñ:Ú0š×¶-åkFw9 §Yâû+­ÇFj˜xKr“®<ñ=y•Ï6¢¥jMhM,Ð:”ù¬ýÑÆ³ßAsøb8K­Jo/1Ç µsúž¤y’(¾µŒÚh¦Œ'ÞNRÓ¦&3Ç#µqúù7øj.ëi®²Äþ´R¼šËÚO®iâíEæCƒeM´.*³a(˯šÉœš5‘¹{Ý33C ›Æ„þjóo´q>ö«qìUßæ±žmw»|O d+ýEd=yY¯ÆDÖ¹41ükáô–ämibC™ÎÕPÖp´¦‰ÝIë9X¦ïYXÖp¬±¬ýͦ²ª±ìg ›ËúÜn ÌÚ,½ÈÌA¦xû¹ˆNÔ<ñ=(Sn8klxÁùGÚXÓ¹«G6/Qð™‚/|]Aܰ¾Qð‚ü¤@¦Ø`¥;Üc20fghlSLçÛSgˆlSLa2;e›b:Ú`™á2“3“!3“A3“a3“3“¡3“Á3äS¦˜Þ$T¦˜:ȨL1tdŠ)AFeŠ©3·ÌxdŠ©óˆ 2*SLGCF÷ȨL1 •)¦2*SLdT¦˜:ȨžLLdTO&¦2ª'SÕ“‰¡#SL 2ª'SÕ“‰©ƒŒêÉÄÔAFõdbê £z21uQ=™˜:ȨžLLdTO&¦2ª'SÕ“‰©ƒŒêÉÄÔAFõdbê £2Åî¤ñF3F3F3F3AFeŠáõh ˜dTO&¦WŠ_@eŠé<ȨžLLdT¦˜:ȨL1uQ™bê £2ÅÔAFeŠ©ƒŒÊCG¦˜¼ÊS•)B4PLGCF5PLdTÅtȨŠé<ȨŠ©ƒŒj ˜:ȨŠ©ƒŒj ˜:ȨŠ©ƒŒj ˜:ȨŠ¡#SL 2ªbêàïz SÕ@1uQ S×k ˜:ȨŠ©ƒŒj ˜:ȨŠ©ƒŒj ˜:ȨŠ©ƒŒj ˜:ȨŠ©ƒŒÊCGÅ” £(¦2ªbê £(¦2ªbê £(¦2ªbê £(¦2ªbê £(¦2*SLdôÕ“‰}´üWÅa´M1\Š)AF5PLdT¦Ø6ÅðzdŠ)FóhÃhŽ'£=P¼§—£µ“y1š:K¦ø~´ÝËí“)Þ’:šÍ™C=›ø^©§)›Ðt¢šºš(¾ªVX/<ózMg 'Îry2ÅÛK,n8[ÉúšsÖZ=½½ø”¢F³„°É,•i0ó3‘)ÞΑ›Ÿ}ëìåÇÆ²ÇZe)¹«±ü³ç‰ŸÿT®ëÆ?ËW3™’Öêéí½Ï·kˆ¬™â ü6õ`ó˜‡!W|?Ô«<”yìÏÝ@Öçn kI¹Ì“«Ìgbké´ß“´Î‹Çœ¤”'Þ:¹o\žØtç 1y3‘57-MìKKáh&k.þ¶ ,­¸ ,K» ,j(룹ù^Y3ÝòÄ~ rÏk[¿Ïÿí·ö¯ªøÕoªâW›*Ž«Û¿rPª‚#5N+(U '\üNGÁ•‚O¼¦à o)xGÁ{ >Pð‘‚O|¦à _W‚êß)øAÁO ¤ŠMC*Âa1“v†Æì Ž™œñhdv.Ø$³3Lf2Pf2Tf2Xf2\f2`f2df2hf2lf2pf2tf2xf‚|J;H¨T1uQ©bèHS‚ŒJS•*¦2ªÝÓÔAF5TLdTª˜:ȨT1uQ©bê £RÅÔAF¥Š©ƒŒJS•*¦2*U ©bJQ©bê £RÅÔAF¥Š©ƒŒJS•*¦2*ULdTª˜:ȨT1uQ©bê £RÅÔAF¥Š©3ŒÆW2©bwrýÌ0‰T1tŽÃh«bwZÃUk¨˜dTª˜:ȨPLa4߃a4“a4ü *ULW€ŒJS•*¦2*ULdTª˜:ȨT1uð>*U ©bJð>*UL¼JSÕP1uQ Sï£*¦ÞG5TLdTCÅÔAF5TLdTCÅÔAF5TLdTCÅÔAF5TLdTª:*¦ÕP1uQ SÕP1uQ SÕP1uQ SÕP1uQ SÕP1uQ SÕP1uQ CGª˜dTCÅÔAF5TLdTCÅÔAF5TLdTCÅÔAF5TLdTCÅÔAF5TLdTCÅÔAF5TLdô•*öÑR£­Š¡£¡b¸6©bJQ©bê £RÅî´*¦«FSû£©}‡Ñ<~½ £¹Éy1Z[©£ùOÿRÅ÷׳+‹kFw/Ã4i¨xëä4š\ñ–äã /f´=Ñ—ù®-Bóô Ð|ÏÌgþ۾Ɗï—U£Ë¦³-²ï 5Dj8sÓ®T±_{z\³™³ÖzHñS›Ìæ¡ fï&öͳ^l0ÿ΃™Ë]N|Êß/,ŸF{5–öSŠït>rÅ÷ ö)W¼½_y(#™ÿ»Ì Y­ŸÞN‘ ãøŒ*¾7^¦§6¹-X(¾7ž*ÞØJInóï&dŠ¡aë/ ãîE>×4îjlØ8Ö}Mcë`ãX;×%ŠÍvN =OìNî—6­5‘/²c"û-0’ýH]ß)ûÍ1”»?ó ]Tæ@½&Š·×S›—ײ¦€×²”ëºSÖøN¹ËÛØÍpöè´élì›e?ØÚ|öy hMÃKoïA>o]3Å[R›—¢ùŽjûôÖÉomŸö{Êu1šÆ¢™â­“û$ŠäÑÖM³öR¯ßæÏˆâûÑ^<#Š·äÏž)vgîô¿Šâ¿~SÿE¢ØAþóß+qmÇDã´‚¸³)x¤àBÁ•‚O¼¦à o)xGÁ{ >Pð‘‚O|¦à _WŠîß)øAÁO $Š V Â=&L†Æ<Úà˜Éð˜É™É™É ™É0™É@™ÉP™É`™Ép™É€™É™É ™É°™ÉÀ™ÉЙÉà™ òù€€> ¡ÅÄ2*Q ‰bJQ‰bê £ÅÔAF%Š©ƒŒJS•(¦2*QLdT¢˜:ȨD1uQ‰bê £ÅÔAF%Š©ƒŒJCG¢˜dT¢˜:ȨD1uQ‰bê £ÅÔAF%Š©ƒŒJS•(¦2*QLdT¢˜:ȨD1uQ‰bê £-ŠÝÉdMµ;Œf2Œ¶(†ó‘Q‰bx=Güî)QLçAF%Š©ƒß?Ãh‹b:~•(¦WŠŒJS•(¦2*QLdT¢˜:ȨD1uð>*Q ‰bJð>*QLdT¢˜:x•(¦2*QL¼JSï£ÅÔAF%Š©ƒŒJS•(¦2*QLdT¢˜:ȨD1uQ‰bèHS‚ŒJS•(¦2*QLdT¢˜:ȨD1uQ‰bê £ÅÔAF%Š©ƒŒJS•(¦2*QLdT¢:Å” £ÅÔAF%Š©ƒŒJS•(¦2*QLdT¢˜:ȨD1uQ‰bê £ÅÔAF%Š©ƒŒJS¿j¦ØÅHÃy$Š)AF%Š©ƒŒJÓµñ?†£-Š}´ÅNZÓ £½}zë¤_ÔCФu]ŒÖX­ÝÕè°-ù Q|?O퇕(¾'u0#šÎNSÅ÷Æ3SÅ~k~:½˜Ï|N¥Dñv¨üdLç¿íýŸÿøßÿþOmŸÞ.7§jÍf›Z³Ùϱ5›µ±z¡™’q‘™;˜ æËl˜Ë~â±¹ÜåŠmmŸÞ^džÅ·ÎÚ½í;g>§U3Å÷C¥ö’'Þ>¬^?½¡’㳋ÈÞ?½*óøôíÆñeüÛ¥fŠï‡ª©ÞEc:gÓXËÅ}»¬ñdÓXç0íçc?œÚ<vš)öû—¬™b'=S¼}ðý„bÿü¦ö5‘½,ÙHöâãÅd Tdòf&[yÊžÁ5•»R¸Æ²e¨¹ÜÕ¼³ï•­—Mfíq¿­{eþ‰Î )ÞÞëü ÍoIIdãY›×L±?ìüä h¿RÚïÛB´þþ`!Z{!Zšt!š)#U¼]u>xYªØ$ÆîÉ7ÍÝ33Å['Ÿ± Uì$¶Í_LZ?í;WüÑ‚fŠ·¤&¡ç;gÏoûLUÅÿ¦*þ›T1‡Wò_¸VoΉ‚3\(¸Rp£à‰‚×¼¡à-ï(xOÁ >Rð‰‚Ï|¡àë âÝ7 ¾Sðƒ‚ŸH¬T„{LÆì±38fgxÌd€ÌdˆÌdÌd˜Ìd Ìd¨Ìd°Ìd¸ÌdÀÌdÈÌdÐÌdØÌdàÌdèÌdðÌù”*&vP©bê £RÅБ*¦•*¦2*ULdTª˜:ȨT1uQ©bê £RÅÔAF¥Š©ƒŒJS•*¦2*ULdTª˜:ȨT1t¤Š)AF¥Š©ƒŒJS•*¦2*ULdTª˜:ȨT1uQ©bê £RÅÔAF¥Š©ƒŒJS•*¦2ª™bê £š)v§U1%Ãhv†ÑLð«§T±Ï“_cñ˧ÖOÃ+•*¦•*¦2zDF¥ŠéhȨT1uQ©bê £RÅÔAF¥Š©ƒŒJS•*†ŽT1%x•*¦ÞG¥Š©ƒ÷Q©bê £RÅÔAF¥Š©ƒŒJS•*¦2*ULdTª˜:ȨT1uQ©bê £RÅÔAF¥Š¡#UL 2*ULdTª˜:ȨT1uQ©bê £RÅÔAF¥Š©ƒŒJS•*¦2*ULdTª˜:ȨT1uQ©bèHS‚ŒJS•*¦2*ULdTª˜:ȨT1uQ©bê £RÅÔAF¥Š©ƒŒJS•*¦2*ULdTª˜:ȨT±;ñ Rª˜ü>*ULü>*U W}AFµ~š:Ãh¯Ÿv'%æ0šÉ0šây1Z=^Œþ3磩s´~ú~m=mlFw¹ºUªx뼈-’*¾'ÏÌ߃œ“*¾µýÚ€¦b‘*Þ¹™ÚxÖ¡Lg¹uÃYJÖlÖܧÑÜånZ=©x{SÊÕÍüTô¤bs+˜ÌÌeZ’«±ìYcc™OWÕDñöYҨ‰â{³Ù2Å÷à¯\¦xûtSï‘ñB dí«ëIÅÛ›Õ#Å÷ ‡ÿdŠïA¹{ß/ÿÊË5Œ¯ÒxÆzß c ’ÆZWmÿηÝ0¦Í’&Þ>¨tÁ ÆZS¼`|‘Ø®ŠÍoÜŽo¦qW«¯cûãÅcÚAYbß_@–د4­êB´lDwùëEÅ>ZüðÈoIþLkó´“tÁëWy>^Z–øÞyQW°¾nÖ¨ñs_7±Äýñ{–Xÿý¿þëÿþõâÏøyÜSp à¸‚(¦Æ™‚G .\)¸QðDÁk ÞPð–‚w¼§à)øDÁg ¾Pð•‚o|§à?Wð“a1;c&Cc&'<Ïð˜2“!2“A2“a2“2“¡2“Á2“á2“3“!3“A3“a3“3“¡3“Á3“á3“4“!4“A4dtŒî‘Ñ=2ºGF÷ÈèÝ#£{dtŒî‘Ñ=2ºGF÷ÈèÝ#£{dtŒî‘Ñ=2ºGF÷ÈèÝ#£{dtŒî‘Ñ2z@FÈè= £dô€ŒÑ2z@FÈè= £dô€ŒÑ2z@FÈè= £dô€ŒÑþª? £ib‡ÑL†ÑÜW3Œf2ŒÆ×ÿã0ša´,ñú~ ~û<"£GüþyÄ/ Güzį GdôˆŒ‘Ñ#2zDFÈè="£GdôˆŒ‘Ñ#ÞGÃhþmë0š þ£þŸ£ÞGOx=á}ô„÷ÑÞGOÈè ï£'¼žð>zÂûè =!£'dô„ŒžÑ2zBFOÈè =!£'dô„Œžðwýןñwýן‘Ñ32zFFÏÈè=#£gdôŒŒž‘Ñ32zFFÏÈè=#£gdôŒŒž‘Ñ32zFFÏÈè=#£gdô}DF‘ÑÇÿ§ì\’ÜFº&»•¶^ úë+ɬû7Ë$™|¤ÞoiÚ;èA¯¿Ý á÷–üò 4ötDF=#£gdôŒŒž‘Ñ32zFFÏÈè=#£gdôŒŒž‘Ñ32zFFÏÈè=#£gdôŒŒž‘Ñ32zFF/x®¿à¹þ‚çúK3šÎ¹Í¯G/üe(2zÁ¯C/x=ziF‡%öq~})FsÏK1š‰¼£c¹f3º½ is1£ceÒ‹“þ.f4l¾Ññlašæáb@‡ 7ŸC^Ïi‰×±òÜp¦|ºšÍ<\W£™ÓÜ®&sÈXƒ9ÖEn.Ó׿>±ƒœÿl(ÿɹ¶fr,Gm$‡ö4‘ÿä `šÿ E¼öj¨Uãøw>#Ø4æ,ÏkÁ˜©k¼L}k“ø«I‡½H̽2‰ã šÄ±¸´IÓMâPð‘‚O|¦à _)øFÁw ~Pð“‚_¤š{À¤YÌNØIÓ˜Iã˜Ió˜I™I™I#™I3™IC™IS™Ic™Is™Iƒ™I“™I£™I³™IÙIÓ™Iã™Ió™IšIšI#š 2*IìQ1:’Ä” £’ÄÔAF%‰©ƒŒJS•$¦2*ILdT’˜:Ȩ$1uQIbê £’ÄÔAF%‰©ƒŒJS•$†Ž$1%Ȩ$1uQIbê £’ÄÔAF%‰©ƒŒJS•$¦2*ILdT’˜:Ȩ$1uð,/IìN^Ááy^’˜:Íh\àJ»·&’Ä‹ÑüÚéØŒÆÖŽÍh&Íè”ÄÞƒLšÑÜZ3šb¹M}ÜŒfÒŒfÒŒæ¾5£¹oÍh&Ȩ$1°#IL 2*ILdT’˜:8ŽJSÇQIbêà8*I ÄŸz’˜:xs$I û&IL ÞIÓà’$1up•$¦}ÃqT’˜:Ȩ$1uQIbê £’ÄÔAF%‰©ƒŒJS•$¦žë%‰¡#IL žë%‰©ƒŒJSÏõ’ÄÔÁs½$1uQIbê £’ÄÔAF%‰©ƒŒJS•$¦2*ILdT’˜:Ȩ$1t$‰)AF%‰©ƒŒJS•$¦2*ILdT’˜:Ȩ$1uQIbê £’ÄÔAF%‰©ƒŒJS•$¦2*ILdT’Ø1•“f4¥j3šI3šI3šÓuñzô‚çzIb8’Ä”4£S¯ÎIì$” $±“¾ÅhÎ)»˜Ñ-§6Jï[«¯J;ÉãfF‡’%Þ;9ÙìbD‡>6¡cué4ß¿ùÌET/Æs<¶¹èLùh8Çôß?Ó•Íá•Mæx¤oƒ9,±ÿï _ÜTWj(ÇzÍäP¢FòUšhš9üêAsæq¸kã8Öp6ÃÁŒc"ñâ*gÓÊïÇ*W¾šÄ±»&q<´Ø$çk‡j7‰ã šÄqtMbNÓ–$^¶-'}Å{’Ø1“Ø[Ë'‹K¯Î‹œ”ëarÛÒƒz˜œKDÈi–Mä|±‘œ.ØLÎ×1”ÛXÚTNwj,ǔ؛¹œŽ¶†É\¹þVdã[ÃäK¼ŽuþC–x%Ã9›Î9aØxNãk>çôc:·fBçÑ1¢[¾Yb¿Ÿ8•ËûT\Yâ•ä˜%K¼’|L÷s1š+<£ùÄëçb4×ЮSùx:•ç™D–ØCsœ|d‰ô;ýÝ¿üCKürYâì_9–‚c5 œ*ˆÏü½Æ™‚ W nSð…‚¯|£à;?(øIÁ¯ ÒÍ=`Ò,f瀤ñ¡qÌ­5™4™4‘™4’™4“™4”™4•™4–™4—™4˜™4™™4š™4›™4œ™4™4ž™4Ÿ™4 ™4¡™4¢™ £²Äü¢#KL 2*KLdT–˜:Ȩ,1uQYbê £²ÄÔAFe‰©ƒŒÊS•%¦2*KLdT–˜:Ȩ,1uQYbèÈS‚ŒÊS•%¦2*KLdT–˜:Ȩ,1uQYbê £²ÄÔAFe‰©ƒçxYbwòj Ïò²ÄÔiFã‚L–ظÔTb'é‚›Ñi‰¡#K¼’;–˜’bttšÑt§Íh&ÅèØZ3šf4½n3šI3š[kF3)FǾ£#ÁkPYbà@–˜¼ •%¦2*KLdT–>%šJL Ž£šJLGçTbØëÞi*1uøîÇQM%¦­5£ñ ÖTbw2Á[$M%†£#KL Ž£²ÄÔÁqT–˜:8ŽÊSÏõ²ÄÔÁs½,1uQYbê £²ÄÔÁs½,1td‰)Ás½,1uQYbêà¹^–˜:x®—%¦2*KLdT–˜:Ȩ,1uQYbê £²ÄÔAFe‰©ƒŒÊS•%†Ž,1%Ȩ,1uQYbê £²ÄÔAFe‰©ƒŒÊS•%¦2*KLdT–˜:Ȩ,1uQYbê £²ÄÔAFe‰©ƒŒÊ»3-1%Íè´ÄîLKLI3šKD7£™à¹^–˜ö¿ÕTbwòušÑ4±Íh\Ãʯ­ ³\Œ¦~“%^é\Íè–L–xïl9ALS‰W’ëÌÊïÉ«ü÷Ñœpª¹Ä{c¼ˆM1t1Ÿcöqá™Ïl6CíÎ\_Vs‰÷½ÚÕhæœèkž9Ï׃ç0ÑÅe6Œå˜ƒk*Sƒ_ eþ:àj&ÇâÑFr¬”l"_¥Q7cjó8¦%Çœ¶ª¹Ä‹Ÿ\öjǼä0ãÓ M¼ok,£8Tt¡˜Þ(ŽõÇâ˜FmÇb×Fq˜s£8dc¡˜‹Š9½Õ(æ?nFq<YŽØ>½²aÜr.æÍ4Nßk§m5c}Í$^{0#l"§5’ÓušÉùèaC9;¦rzåÂr¸Û$ÿ“n½É„F3‰×;ÍßÈ;É­Í- ¬™Ä«3•6œÛ0Û¦sË_J܌罙ÄôÓ÷Ð-9âÕùOP%Gì­Å—úrÄæ çþ£/ãèÈ›Þt·ÅèðÊÅhþ(ä¹Nä9^Žx—¹Š‡±“¾˜ùÝÿõ‡Žø/rÄò{ÄWârêHÁ‰‚' Î\(¸Rp£à™‚7¼¥àï)ø@ÁG >Qð™‚/|¥àß)øAÁO ~Ufî“GL˜4ù:c&Íc& d&Md&d&Íd& e&Me&e&Íe& f&Mf&f&Íf& g&Mg&g&Íg& h&Mh&h&Ȩ±¿èÈS‚ŒÊS•#¦2*GLdTŽ˜:Ȩ1uQ9bê £rÄÔAF利ƒŒÊS•#¦2*GLdTŽ:rÄ” £rÄÔAF利ƒŒÊS•#¦2*GLdTŽ˜:Ȩ1uð /GìNú^<ÇËS§Íë´f4“ft:b¿N&ÍhÚãf4“f4-h3šNµ3‰½os&ñJ†9-FGRŒæ—8Çb4—L:6£¹ÍètÄÞëLšÑ鈩ӌæÖðTŽØ‘#¦•#¦2*GL¼•#†O–1%8ŽÊS§ŽöZŽ˜’Gsk8Žj&1m­ÇÑô½=ŽNG Ÿ`Í$¦ï‘äˆá¸i¹iJpÕrÓÔÁqTËMSÏõZnš:x®×rÓÔÁs½–›¦2ªå¦©ƒŒj¹ièÈS‚çz-7MdTËMSÏõZnš:x®×rÓÔÁs½–›¦2ªå¦©ƒŒj¹iê £Znš:Ȩ–›¦2ªå¦©ƒŒj¹iê £Znš:Ȩ1t´Ü4%Ȩ–›¦2ªå¦©ƒŒj¹iê £Znš:Ȩ–›¦2ªå¦©ƒŒj¹iê £Znš:Ȩ–›¦2ªå¦©ƒŒj¹iê £Zn:rÄN¦#¦¤ŽØéˆ)ÁïBµÜ4ušÑ´ºÍh&Íh&Íhšàft:bï[n­ÍN1zǯ­ £ù”]9â½³åâžrÄ++;›ÑíE|‹£©Ä{'uš$ñ ò?jBsuSIâ½1Þ¥ùÜ5ã9ü¦éÌ Î’ÄûkŒ)¸fsXWŸCàÖè™+Ì-góšËá´åðž¦òŽ$ÞßǰàfòŸ8VW#ygÁéuHrš¯ü'þçWó˜³û$‰@9oV’x%ùhÜ«qL%K¼ØÎãkó×W³˜¿K¸šÅ¿ò?bÇÑ2‹¹ŒûÕ,¯l_Çîj2±ßzNå5Œ£bÇâцq“Mã\"ºpÌ…y¥‰½g)° ä–Gìf"Ç ÒÄkkcak39'&Ê)}.ßr,ºË{S‰=~¥w/0ïhb†y jœ¼3•xuò§ÒÄ+ÉßhÜÌæ6Ô²áÜòÑØ7ÓyO¯×ÉNšØï'Eµ¯£©ÄîÄ']šØï4Å®݆@.Fs M%ö^çë£9j*±MQ]Œæà(M¼FŽñ¼â:—ç/”¤‰Wç_[û]ÿ×jâÿ¢§Œ©Ä_Ap¢à©‚8Ðgj\*ˆôµ‚\ ¡‚Öž©ñ¦‚¸ôyK{õŽ‚÷| à#Ÿ(øLÁ:º_)øF›úNÁ ~Rð‹^üá“GL˜4)ÇLLJ2;Md&d&7Üë†2;Me&e&Íe& f&Mf&f&Íf& g&HçâùÐ|æÖÐLšÐLÑLQibqÑ‘&¦•&¦2*MLdTš˜:Ȩ41uQibê £ÒÄÔAF¥‰©ƒŒJS•&¦2*MLdTš˜:Ȩ41t¤‰)iFóœÞŒf‚guib¿N*Åf4“f4“f4÷ÕS‰išÑ|<»KÓÖšÑÜžàõTbú/à)^O%v'…k1šºSO%v'[3šI1šŠTS‰išÑ©‰W'Ÿ§¥§½µ©‰))F‡¤-FGRŒæe¹žJ¼^'oÅhÞ¸I»·ZÒÄ~§1úë©ÄN‚=•˜:ÅhþTO%vôTb:nx *MìNªedTO%ª¤‰)ÁqTš˜ö ÍãÖãhîu3šf4“G3ÁqT N{¯£#ML žëµà4üO¥‰Ä'KS‰ÍN|Y£§)éq4·Öãh*lG¥‰á?'MLïÏõÒÄÔÁs½41uð\/MLdTš˜:x®—&¦žë¥‰©ƒçzibèHS‚×£ÒÄÔAF¥‰©ƒ×£ÒÄÔÁëQibêàõ¨41uQibê £ÒÄÔAF¥‰©ƒŒJS•&¦2*MLdTš˜:Ȩ41t¤‰)AF¥‰©ƒŒJS•&¦2*MLdTš˜:Ȩ41uQibê £ÒÄÔAF¥‰©ƒŒJS•&v'ÎfšJLI3š†®šöMO%¦½ £¼g’&öëÌ©ÄNRÅ6£S»“³ÍcÐŒf‚÷LšJì×ÉIÆÅèxbo1:Ôj1zGﯳ¥0”&^IÎxÓTâ•äcW¥‰÷$‡4ñÜy.ñŒ5ª èÔæ3½ëÅxæ=žžK¼^-×PnãuLåœl,çjÔ)çq3˜ó¸™Ì)±=RŽ´æô:ã¹ÀÅf~˜4ŸØchÊØ)ó7Åî¤6ž[þrF¢xuÆu:4­D±;ù:Ft¨j‰bwr¦q1:Äj1šÇM󉽵4ˆÅèß1Ìj>ñêä_$нµ`TkN¯${"Q ÇMó‰÷äå˜i\góD¿‹â¿ÿPÿ½DqŒ¯äƒäw.œ*ˆãùTA´35.ôWÚÝ[CÃ;C›zK{õŽ‚÷| à#Ÿ(øLÁ ¾RðŽîw ~Pð“‚_ôâÅþ‡&Íb&ì1AšÇ|ò¡‰ÌN#™I3™É3îuS™Z³±Ì¤¹Ì¤Á̤É̤Ñ̤Ṳ̀á̤é̤ñ̤ṳ̀ͤ ͤͤD¢ØŒfÒŒfÒŒfÒŒfÒŒf‚cæc3šf4“f4“f4“f4dô•(¦#ŠŒJS•(¦2*QLdT¢˜:ȨD1uQ‰bèHS‚Œj>1Œ½G%Š©ƒã¨æ»3E1m­ÍN3šI3šW/xv—(¦+žftŠbz?ÍhvŠÑ!}›Ñì £ÅtܚѸ´;£y¹,Q¼¶–¿nÖšÓNâ‚]O&v÷æÅÞ·”}Åè¾Åh~i '¯­åè±ý+Õn1:’b4¿2‘(öë¤Þ®qtl­Ú¹»Í/T$Š}Dãú@¢ØIŒ½ÇbtÌîq4ߎ£Åð?•(v7aG¼•(&ŠÑ1ß»¯\4Ÿ˜¶†ã¨æ»“Ç •(†c Q { 5§¤\îq4n1šÇ@¢>sÅð_КÓÞƒ)ŠáhÍiJðzT¢˜:x®—(¦žë%Š©ƒçz‰bêà8*QL<×KSÏõÅÔAF%Š¡#QL žë%Š©ƒ×£ÅÔÁëQ‰bêàõ¨D1uQ‰bê £ÅÔAF%Š©ƒŒJS•(¦2*QLdT¢˜:ȨD1uQ‰bèHS‚ŒJS•(¦2*QLdT¢˜:ȨD1uQ‰bê £ÅÔAF%Š©ƒŒJS•(¦2*QìÎÅ”àwOšO 2*Q {}AF%Š©ÓŒ¦ÀÅ{&=™Ø[›ó‰)Á{&­9íNîA3šI3šI3:ç¯×¹3Ÿx%ùµ·žL¼'Û«¸ÇÐ|â•ärªÅ+ɯñ%ŠW’ †JïɰÎFth_šÎPó‰÷Mç/{ Í5V%Šýˆ‡›Î1A×pæ5¿Dñzñø·hÑéõ™i8 æQ ›*,ã?¯E§÷Ƙk(ÇsxÍäpçFrLM6‘c†¬ÌyçšO¼þç©–=d¾ÎCR4¾È¤hÌŸ h>±™KÛoǒІq(dÃ8BlÇœiØ«kBñzóiû ã0„†1|3ŒSŸšÆ©\ã–ŸD-<½ŽW~°$ŠW’sâ%ŠW’ß^H»g Í(†±@3нµ”å¦òž(öëĈ|3—÷žöëä m“9—¤6šSo›cær±yG¯=¸ópb'9¯ÜpŽèháéÕɹ¹Å”˜Ï±*„D±;)±MèœlD·|ô¼fûX§Ú-F_¦',FÿŠÿ©f¯­åO‘$Фª.FǾ£ù!•(6U¹oÅhþç4£xï¼ü×ã‘ÅÿùCQüŸ]çPüøjù€ƒCùí_ù% OäÅÚÔµ‚ü„Òî>Sð†6õ–öê]ñ5Ô{ >Ц>Rð‰‚Ï|¡à+Äo|§à?)øE{%Qlâ¦(¦¤aÌηvÂyÔŒbÚƒ&rŠbêÜpk en­©L­ÙXf‚\> ˜Mfn­Ñ̤Ṳ̀á̤é̤ñ̤ṳ̀ͤ ͤͤMÚŒfÒãe&Íh&Íh&Íh&Íh&Íh&Íh&=lfÒŒfÒŒf‚ŒJû³dô•(¦­!£ÅÔAF%Š©ƒŒJS•(¦2*Q ‰bJQ‰bêà8*Q ãÛÇQ‰bêà8ª…§Ý™¢˜’ftŠbw2iF3iF§(¦=hFSÓ6£qÙ§Å´µb4oŒ%ŠWgHßf4Î%Åî¤Ú-FSÓJ¯NjM‰â•ärqÅ+yGT'Þ“íuª]3ºå"YÅ«“wÔÅ+ÚÙŒnyã®Å«“7ûÅ´53:¾®ÒŒâõNsš€fû¸¥¦-FïˆbwR’£C–£wD1¢…§Ä¨,QLI1:Ô.^ˆJ¯­åjG¼ÕÂÓîä¾õ8š7 =ŽfÒãhª÷GS¬ö8šI£y§ƒ7GšQì÷3E±“ D¢Øÿ…¸Ý”(v’s{¢ލD1%x=*QL<×KSÏõÅÔÁs½D1uð\/QL<×KSÏõÅÔÁs½D1t$Š)Ás½D1uðzT¢˜:x=*QL¼•(¦2*QLdT¢˜:ȨD1uQ‰bê £ÅÔAF%Š©ƒŒJS•(¦2*Q ‰bJQ‰bê £ÅÔAF%Š©ƒŒJS•(¦2*QLdT¢˜:ȨD1uQ‰bê £ÅÔAF%Š©ƒçz-<íN\HÃÖ$Š)AF%Š©ƒŒjF1í[3š2Ïõz8±·– ¹Í­5£SÓÖšÑÔÁ}=×o—b4uŽN¼^'¢•(Þ“ñÌI‰â•ÜÅ+O6£cY[‰â½ó*§AÑ20¡c²¯Þ÷K¿û`‰âõöSâšÎ¿âPjáéÕHÍg6‡G-4³QdNQ¼czÔºOÊ °œ¢xm* ÔÓ‰÷`<9ØL¾ÊéÌ6Ǫ×&r¼syGï/>D­q Ó˜·Ö„âõsUdy╌¿ ÆÑ1Œ¹â”¦¯=Nçl·-2©weŠ×¡Ïm™Æ±´°iÌEÍeŠýîƒÓ[ݺç× zDñêä dŠ K®»\·îùÔq™bwÒ×­û˜ì¡r®ül*ç‚å–7Û7s9…l0·q Læ\ÛCåì˜Í-¿<Дb“–Ç­è.:ǪÔEgŽˆšR¼^g$ÆsŠÉÜ”‘Ìiäz>ñú?å±* 30cqkã˜ëäêùÄûkŒÆÔSÒÄ ’<ì…âX×»P¼³ðôÂwÌM6‹ãyÕfq<¹nÝÇ•ëÖ=¿¸Çü½¶Q¼v,?¥Å”Ôû¿¦7þŸÿñÿ÷ÿ”(^üŽB¢ØŸßœh[wî[ÜGH¯NN Õ”bÚZa9rß»çªÇ}ïž2¶îÝÇtÚ¾wÌõbƒÐ7Ã9'›Îù¸ß+ó—3·+ãÓ¡µ§×Œ5¡ Ðü…Dñêä7šRì$[»”Ç {Pˆæs·%н×ñ“(^I~F4¥ØTÈÅhN¸ÖÚÓþÿ¤B.FóWóšRì=ˆÑNkOñZ{z%¹R€Dñž¼Ì_PIûX§Ä¾Çèï¢øÕŠâWkíé8 ¯Ä?õ@Á‘‚Oœ+È« ®´©Ï¼¡×xKÁ; ÞSð¡‚øÐ~¤àŸ+&¿Pð•‚o|§à?)øUAê¹LšÅì4Œ™4™4Ž™4™4™\p¯Éì4“™4”™4•ño~h,3i.3i03i2sÍLšÍLÎLšÎLÏLšÏLÐLšÐLÑLQ‰bŠÑ‘(¦•(¦2*QLdT¢˜:ȨD1uQ‰bê4£yÜšÑLšÑLÑGdT¢˜ö •(¦2*QLdT¢˜:ȨD1t$Š)AF%Š©ƒŒJS•(¦N3:E±;SSÒŒfÇQ­=M[kF§(vgŠâ•Œ¦‹Ñ!p‹Ñüíø¡S}‹ÑœN{(FóþTSŠ÷}Û†Ä6£[þ¾Y¢xu†\6£[>@L¢xïŒyÃF4;)M¼iô è˜hl>·!BÍçxuã¹½H i<·µÒð5­7í$ŽŽ¦SÒcgÊæ;S6ãM‘Ö›¦}ÃÛ"M#v''2÷Ø™ žß¥‡éâù]z˜:x~?áù]z˜¶†çwéaêàù]z˜:x~—¦žß¥‡¡#=L žß¥‡©ƒŒJSÏïÒÃÔÁkPéaêà5¨ô0uQéaê £ÒÃÔAF¥‡©ƒŒJS•¦2*=LdTz˜:Ȩô0t¤‡)AF¥‡©ƒŒJS•¦2*=LdTz˜:Ȩô0uQéaê £ÒÃÔAF¥‡©ƒŒJS=#£z01m •†Ž¦S‚Œj1uQM#vgêaJšÑ©‡Ý™zØI~Š_‚^šÑ”ÀÅhÞÙèÁÄëuòG|šF¼’±Ds]æ Eéá½³‡ ›ÑñÀOéáÕÉŸ¦j½é•ä³f4x%ùÓTùá=¹ã‡÷ °©§WB~xRCHïA2=™xéOMçX‰Úpæ?µàô:ú91×hæEz2ñjääß—xy¬ÌbÞ™^ Å\|]³ˆ¤ùÌ^=™xO†Ñ6‹#èöü_Æ!å cÞ²ÊÇGÓˆW’÷Ò²Ã+O36[®N¦§×»Lùh ó_/7ì= ¾´Ü´e&Fr.…m&ç3† åø2EËM¯×ÉaBnØI.él.·tœ·(ǤÛ(sk5PŽ©Â5P挀[ ”c¯‹ÎAAÑ9¦™×J¹ú­¾PºøÌ§ƒË ¯ã–€Ê ¯$1$7¼’ü‚à¹"t˜æ"ôïœä†ý?MŸ\ß*­£c!êb4—-Þ_çÞs‰}tú”ñ»~ý‡nø5M"^ÁœDì ¿ryOrè>SãRAž1©q£Æ3o(xKÁ; ÞSð‚ĸõ©‚€ò3_(øJÁ7 ¾Sðƒ‚Ÿüª ­ä&˜09bÒ8æ9üj¹i³&2“+všÉì4”™4•™4–™4—™4˜™4™iLÍLšÍLÎLšÎLÏLšÏLÐLšÐLÑLšÑ´’Íh&Íh&Íh&Íh&Íh&Íh&Íh&Íh&Íh&Íh&Íh&Íh&Íh&Íh&Íh&Ȩܰ?§ÙAF‘Q¹aÚ2*7Ldô}DFå†áuä†)ÁqTn˜:ȨÜ0up•†qô€ã¨–›¦Ž£G8ŽÊ ûuÒó6£qR>4£™à^“ˆ}É5'¯$Ð*7ì$§ý£ùÃY¹á½3¦©Ê ¯$¬ç;‰ó‚Üðž¼ÎƒcDó—÷2Ã{cÌk5 yû-3¼)çh˜Î\EK³‡×¦ÒšÍüeºV™¾ÿ¥…Ws— f>·JS‡W#×Ò6–¯ct’†wn(óAVxoä/NF2oµ¸44 dÞŠéÄk¯âžS ^˜$tZYz%ãåkÈÌo7´²ôÞy™?¥—^IÞ„kÈ«k×9æ÷™Ò³‡Ì”Å=dfÒCfJÜ2³ÓCf&=dN%ìc23é!3“23é!3÷OëRÂÞ·Z3†)ÁÓºf SOëRÂÔÁÓº”0uð´.%L<­K SOëRÂБ¦/=¥„©ƒ§u)aê१”0uðÒSJ˜:xé)%LdTJ˜:Ȩ”0uQ)aê £RÂÔAF¥„©ƒŒJ S•¦2*% )aJQ)aê £RÂÔAF¥„©ƒŒJ S•¦2*%LdTJ˜:Ȩ”0uQ)aê £RÂÔAF¥„©ƒŒjÆ0t¤„)AF5c˜:Ȩf So.ÍhêÝft*a¿ÎTÂNâ\¯ÃNr^p1:Äo1š?B•^[Ë¥O¥„W’¿ÂÔŒá=Ž”^I®—¤Ã+É®J ;ÉÇ×õèXÛºnri^)á}k) 4exr©R)á=È›#)ah˜ÏT RÂ{#—„Õœá=È7¢gïÁ%¼‚¸8»ͱVs‘™¹ÀL]k.sB§”°‹ÉÄ9Ç‹Ê-®Î5gxm*%²‘óiMä˜èk Ç Îæ1×´½ÒÍ‘”ð¾WC½Æñp`³˜÷YRÂëžÎÛ$抾 ¸üG™Ä1ñÚ$nãYÊFqü¶[†×«@2Âë’“hÍâö"@‘^Ñ¡}Mã6ž¤k§5c©c󘫿K¯÷’óWÍãx"Õ­€ËZ›ÈíeÎû5’Ûxh²™œ6”ÛXPGI-*½çp»5JÁ_£ä0¸5JÞYTÚ¯“½¾D{P_"¥ñ”^[Þ¹ð¦¸ðÌYÑòÁÞ·àS>x%ù9—^Iþ0]s…ÝÉ9É hùàÕÉï'4Wþ?š+¼’84Wx%¯ƒQùà=y™ç*-*í¤G‚ß|ðëæƒõ÷ÿý¿þ߿̳ücùˆ: Žœ(x¢?Sãâ êp­ ×  à™‚7¼¥àïé}| ÷ñ‘‚O|® hýBÁW ¾U£ùw ~Pð“‚_ ŒI±8<í;EãèŽ#)§Æ×i"‡ÆÎ “†rø`ì4–Ãc§Àï´ÉŒAö¡Ñ̤Ṳ̀á̤é̤ñ̤ṳ̀ͤ ͤͤM«øPG4“f4“f4“f4“f4“f4“4ó§OÍhvzØÌ¤ͤͤGÎLšÑLzì̤Í}DF‘ÑGdô}DF‘ÑGdô}DFq=4£éôp=à8zÀqô€ãèÇÑC3šûÖŒ¦plF3iF3ÁqôÐŒf§M·ÛŒæº)Íh&Åèx,p1:ä[ŒæÍÄÁŒŽÇõÌèœ÷kFS>Œhþäó`Bó~á`@ÓJÌgÞGŒg>¼èh:‡|4œcj­ÙÑ›2™cõgƒ9f›Ë!œåXaÚTŽ7h(Çk˜É¹Œµ™S§dÞ£‰bÙ@ކyÇÄ8±ló~ïhóíhÇÁ2ŠsÕo³¸ ?_ÃåËøÒáXÃåœìÓóx¢s —yŸsÂSú©‡Ë4¤=\¦Yîá2„S—ÃÓµò©‡Ë܃.‡ ¦«û—'.OxJ?á)ý„§ôžÒOxJ?á)ý„§ôžÒOxJ?á)ý„§ôžÒOxJ?á)ý„—OÈè^v>áeç^v>áeç^v>áeç^v>áeç^v>áeç2ú„Œ>!£OÈè2ú„Œ>!£OÈè2ú„Œ>!£OÈè2ú„Œ>!£gdôŒŒž‘Ñ32zFFÏÈè=#£gdôŒŒž‘Ñ32zFFÏÈè=#£gdôŒŒž‘Ñ32zFFÏÈè=#£gdôŒŒ^Ñ 2zAF/Èè½4£ioñ\Á[£ Þ]šÑá‚ëú`¸`'ÓW’k!£¹^ìÅŒnyz1£[®¼z1£[^ó]Ìè– ã^êÖhìAßå^÷õhøœKÝÅw#šŠñbB‡N»˜Ð|¨îÅ€N¼ŽóXâØx¦æºù8aÃ9̧ÙL!r5š#(2ó5 Ìœ%[\Æ]þÕXŽ){ä kàÌMyÜL‡j"‡77ÛǼ5¸ÇüEóÕ4æJLWÃ8žòkóžûjÇ¿Ü$Žõ¦MâP×t—~­»ô´ù1ßÇÍåXNëfóÞLâXgëf·4ý7³8–&»ƹž²iœúØ8Φ›õ›yîÔ<ætî›yÜrÕƒ›Ü†>6’[þúVƒäÐÇ5Hæ÷G·$s …[ ’Iò­É\«àVƒä\6z Fc)ÿ[Ý´ŽÙ?ó¹Õ09ô±éÜæ²Ñµ1?ŸCšÏ-÷í¹Í_¢< /s©é4O.Ï è˜ì½OE.@ó§"Ï5`æjlÏ&tËëbó_ëbü®‚·?TÁÛRÁ1œ?¾v“Q*ȯh*ˆÑùä ú½Æ™^ãB›ºRp£à™‚7ô>ÞRãï)øPA\}¤àŸ)øBÁW ¾UçÝïü à'¿*ˆ÷Ã&ÅbJ®‡vŽ˜4޹Åãxr$Mdn­‘̤™Ì¤¡Ì¤¨ò¶±œ*x}†G§ÁSƒñ¸5š¹oÍf& g&Mg&g&Íg& h&Mh&h&Èè#2úˆŒ>"£Èè#2úˆŒ>"£RÁæ Þé#2úˆŒ>"£Íh¾N3šI™4£™ôè™ 2*LÇ• ¦2*LdT*˜:ȨT0|¶¥‚)iFSÄ6£™4£™4£™4£™4£S{¯§ v’ж*˜¶ÖŒæÖšÑÔºx~?à þPŒŽÅ¡‹Ñ;*xíõXšÙŒŽïH¤‚÷N^ùŒh^vÊïWãáÂ+Hµ*¼ùO3žwLðjÄT&øþ‹ÍæP‚F3v4™y7p4˜Cƚˡoe«£GαW8‡‹5“c¯ŸOìNšè+Çœ`|<ŸËûuâ.L žÏ婃çsy`êàù\˜:x>—¦žÏ婃çsy`èÈS‚לòÀÔÁkNy`êà5§<0uðšS˜:xÍ)LdT˜:Ȩ<0uQy`ê £òÀÔAF婃ŒÊS•¦2* y`JQy`ê £òÀÔAF婃ŒÊS•¦2*LdT˜:Ȩ<0uQy`ê £òÀÔAF婃ŒÊCG˜dT˜:Ȩ<0ušÑéÝɤͤÍÏõ—ftzàµw<°“éW’òCxOÆOWåW’J@x%ùHUyà•ä£aäW’*åbF·1“ÙŒn¹®<ð¾µTòÀ+ÈÕ Mè–_áËª—Þƒ!Ígž«ñéÌ[Ì«á:ÔlŽMͱ)žãɼf bs9Vd6–©®¦râþ*>æ×­ÑÁ Éœ_l"‡k6ùdS‰à}Sc’¶qÌFK›ÓÜ-Ó˜·‹2Á{%WRºšÅñ´`³8&ÙÅa› ÅÜ+£¸å‚éRÁ~'9³Î0Nßjgb§>5ã7ÂrÁëó““o ä\ÚÙDnÞÉ©©ÍdÞÌÞÌä°f2à!ìc–Ó¢}.Ÿ«a×89æ×89žÉ\ãd¢,¼ö`€'sßjœÌ»æ[“C›Ím¬Ý÷í9»FÊÑ1ž[þýV|æï¤‚×;Íßî?Ÿù›w©`Ÿ+âžU*x%ãù½Åg>l@*ØÇ:¾»x.@Ǽä4×– öû‰ÿTðÐÆ¾Õ¹ü_ënü®‚_þ¡ ~¹Tpœå_Cp àHÁ‰‚'yf:W¯¨Må ˆ^ãFÁ3mê ½ø[ ÞѦÞSãCC¯Ãž#ý'ÚÔg ¾Pð•^ü[C{¯"øQ@ø'mê5¤‚ý"±­‡b1F'L¢qÈÛÂñά`ÚZ™ûv¡7úpŤ˜{PPŽwÚTæ4–™—ã4˜©A›ÌL>ÖûɤÙL±ÜpfÒtfÒxf‚|>|ÇcÝ„æÖчf4:RÁðA ¦¤Í­5£™ £RÁô:Íhn • ¦­5£©[›ÑLšÑ©‚ý:SS‚Œ>"£šL[kFsšÑLšÑLšÑLšÑLšÑLšÑLšÑLšÑH¤‚ápÕ¬`ù4+˜dT³‚*Í ¦¤M‹ŒšÑ©‚ý:)|‹Ññd_G=Žæë£ckÅèx²o1šO¹:˜ÑqË YÁûû^׈æ72Á{#ïqd‚÷`,÷l>sÑc™àÕÈÿŒé¯a8‡(5›CUÍáMæØ”Á6—£a,‡s5•¯â£$¼{.“l&Ç,b#9ĵGÍñr,¦mÇîÇ;"xýÏÓÞÆqtÍâxq£8Äu‘˜‡Ä$ŽùÈEbàs4‰Ã›Ä¡§Mâ6v«ÊüNðXeÞ˯A"?¼òÀN⋈Sßýäï]ûö'“¾ÿɤÊ4·xÁy“ù©Ê¦4†C͆á]óá4"L ^pj>0uðd®ùÀÔÁ“¹æS/85ظp’¦/8婃œòÀБ¦¤Oæ1jÉÃ1Ð|`Júdž[kF3iF3iF3iF3Á Ny`ÚkdT˜:Ȩ<0uQy`ê £òÀÔÁ Ny`êà§<0uð‚S˜:xÁ) y`JQy`ê £òÀÔAF婃ŒÊS•¦2*LdT˜:Ȩ<0uQy`ê £òÀÔAFå݉QYó)ÁqT:šL 2ªùÀð~ä)AF/ümg3:=0½N3šß6£™àWž—bt¬²\ŒŽU–Íè6M6£[ê5yàýý '$ì$ÎòÀ+I)¼’\9ùbFçÞº/JÝ[÷EiÂëjt¬mBSGÈï;6æêšÏ±°ñ¼3xm*ÐÞƒa\Íæ˜Œl4Çk˜Ì¡­ Ìøl^=v¦:Ñ|à}¯†Ú4•ã!¿e~Õ_LÆEóµÌFš9}Ù@æ±òÀûî¯jÓÉï±jtÁ˜yàU ²å׫ç;¬;£±:´ÿéI¡x­{ô\éÙ(Ωºu“žOª­›ô|¾¯YÜrqMöÇ:;¦q¬žu3Žcª®qœ»lçT]9Ç6‘Û–ÚHæ-¹4ðúO¦97’[š•ß(øNÁzŸü¢@x•C,°“ôœã°¦E㵡ikÅãØZ9ö­ˆkíuúÇbrtžñ•IÌCa9’âr¼NygmhÜëF3>bÍæ´À´µ¦3·ÖxfÒ|fÒ€fÒ„fÒˆfÒŒF" ì÷“I3š¶ŽŽ&SÒŒæÖšÑiikȨ&S§Í×iF3iF3iF3AFeißšÑÜ2ªµ¡ikÍhn­ͤͤͤͤÍ•†÷# #Ÿ,0%=ަEFeiÑCŸÙóYÍhZÈf4ŸºÛŒN ì}ËžÞeWg¸Þ>ÁÇÿG‚Wg¬ólFÇCcd÷ÎX´ÙˆŽE›M蘑k@S:J﯑ÞO C¯ ÿϦs< Øp޽2›ÃõÍ!hMæéÀk¯b¼Õtàû»«éÀÐ0•w†^øJß?VG#9¬ª‰ÌÉÖGyG¯×Hsk‡O6ã}Æñâfq8k£8Þ‡IÌ­Ö…^»Ÿ­ ½ØM;l‡Ò%5xmj. ½ãáÌ&qo½†É\–K> rÀ+ÉÏɯdå¾ù ˆ4ØøŸz˜Ì9º=LörÀÞ·|&sk=L¦kÆaR˜ŽAŸÊsßúTžIŸÊ3éSy&x¹©¹À´o}*Ï­áå¦0m /7µ&4uðrSkBSOårÀÐњДô©<Ž0uúTžf4dTkBÓë4£¹µf4“f4dT˜ö•¦2*LdT˜:Ȩ0uQ9`ê £rÀÔAF倡#L 2*LdT˜:Ȩ0uQ9`ê £rÀÔAF倩ƒŒÊS•¦2*LdT˜:Ȩ°;qž“¦¤Ž0tä€)AFå€áýÈS‚·DrÀÅs½Ö„¦×Á["ͦ×Á/<å€W'¿ï¾£c­f3ºåE¥æï[«ºÊ¯$d*¼’üɬðJƾ™Ñ1ÿPد“ÇÚŒõ¤ÉÀ{gݺ/Êõ¥ë¾(.…å€×¦âLv5ŸyI¯¹À{#¯kµ&ô l8Ç|Q³™ðÔšÐë5R9šÌ¡H Ìœaj.óžWx1ÙTæôð«¡3”Íäx:q!™{e"ç‚×^Õ°Íã˜$lsFŸð:ˆqñ}5Œi.¥€W#M†QÌ¥r¯u‡žÿ(ºC×¢Ð÷Ù•Þƒ;‹Bûó6g¯ÊTÀ÷ߺք††QœdÍâÔ¹†1? 7Ø_6Ü ã–ËhEh¿Éø j°“tÓæqîY9^ÇDÎ=¨ArØñ$ówZzí[>D] ØIœø´&ôJÆäá$s ÐDàÕIk 5¡äq3š[>/JkB¯Î˜î[7í㑦s˯¤€×ÖîLvû&¼’ü‘‹&ûèd§Í‘L ØÇ:>šì­ÅáùÿSvnI–ãH’ÝÊHo ƒžQY"5%âo¿ù~gþöæ£×?fM˜ò(õ#¾U qÏ5TPˆë(®ÑáÓÍ(_v„|ÆÜm[­ÿÝþø…ðGgáñ“žœðì„'¼:á­>Eðî„Ï- Ó^A}Û‚XÀfH¾wMýP¿ÖúÑ ?9ág'üÒ¿¶ ðº¢ú»»ÆnHþtwþ—‹ ¸®Ž¿CXÀ¥ ÃQ\ Íá¦QìÏÆQìÜæQ”òÂv}»Ù¾5“°k­©¼°€]Ìw¶ æ…\­áÇ;eØdÌÀIeè¤2xRùÍö`eL*ÅШ(ͨ´;Œâ:Q\£C³n¥2ŒRF© £T†Q*5ùkG!°ëõ0ÊÖ:qJkÃ(c:uJÌ0ÊËhXÀ®×Ã([³Œ†l¸Ž=¡b=¡]Œe4ö„v1–ÑØÚÄ„lF',`§ £´LmãMî Ø]Ç2°kmÕ=¡+†æð0JCÓæÑÇy¼ƒ°€×uä¨ßf”«È°€Ïq¥‹QÎbÃ>C¤Ú·•Ý–bGè3ä¦*Q¼Þñ)å¾…§^¤ðäz1>/Â7q8ðpõØz 4< MñðŠLnÀðºCš‘Å¥……å…¼z…™`xÀ¦»ÅäE!ðŠ«á/p=rçÅ£…£ØÉE£ôª`”¦šEþÅ¢\£X”ߣP¼(^X󅢜X\(^›¦ŠD9`¹H”Ó‚Â^jî]°SfíƒÇÿó,~X:Ê£ ØÅØGy”»û(2`°SæQŽ1ˆ2`3rÆ £T†Q*Ã(•y”S™G9•a”Ê0JÅ2°ËhXÀ.Æ2°‹±Œ†ìb,£a»ËhXÀ.Æ2°‹±Œ†lbÂvŠe4,`c ØÅXFÃv1–Ѱ€]Œe4,`c ØÅXFÃv1–Ѱ€]Œe4,`c ØÅXFîµ€2ŒªlbÂvŠ]¶‡ìbì²=Ž®L Ã^ŠlÆl—ía›cÝu†Qö`^xÒ³lF/,àuÙX¹=8{ øŒ9XZðRdÓçbTÜ¢°€W 732àºï´=xèNl}ÆÐtx ,Å.BùÕjì}FÐô x5Å*ÎJ¡üÚ3à3‚+Âp€—À¦ŠMÙȸДch‹LZh·S¬ÈâRvœ.,/vƒ>»ËŸ*vƒ¾Ýp€OA<ãBR\æÊš²és)»ZwΤ [8JÅtÑø5¦"á¯ßóèp€‹l†‹âî7Šüm{YÄ‹ŠÜ¦8,à…"MãBQ»BQ]ËbQkz{‰Ž[ ø¼¼ì«\0ò;ôØ Ú$‚(^Šœ1\8ʾìa¯ÛgÇ*KêѤ:½EäÁÏT¢ ¸:M߸˜¼*v1%¥t¸³$Oxµ&Â%¹*ŒsW ÏŸ¸Öˆš?ˆ2à#~nÁ©'WeÀ«5nø°SšÏ‹Í «oø„¼ÚpQlF4<à:½¨8½(_ †\=@ŠÍ —Â*á/e{ÂüÝþÇzÀÿp°?•À7fNxvÂK Rl.þ暺µÀÿ»>»¦¾iéo]w¿sM}ï"~hÓ®K •?¹ˆŸ]Ä/-ˆ¼F—ϸß\S¿;á׫?Ýÿå"®n©\ î$<àRè?Y¥q¼ð€Ýu^ÝXÞ7‘ÒZ#)Ê»í[C)1M¥øÆ¥(ÍåŹÀu§ø»Ü7™âŒšŒi6%fàD¼:©üÚ£Ceø¤2€RiBe QQšQq,‡QzŒ®×q.p5c†Q*Ã(•Ιҷa”1Ã(•a”Ê0Š_;Î6ìĹÀNFÙÚ0J¥“§8ñ–ÑØ ÚõÀ2°‹FÙ·a”Ê0Je¥2ŒRF©XFÃ6¼…ì”a”žá0ªeÀ&÷†l0±´ëeôÑæÑØ ÚäëÇaT=`ó” x)\Û†\ ¦Êc+hcåQìbì£<Ê€]Œ}”G°‹™G9~Ÿð€ML”;eålmåT†Q*Ã(•a”Ê0Je¥b­ ÝZFÃv1–Ñð€]Œe4<`c ØÅXFÃv1–Ñð€]Œe4<`c ØÄ„ìËhxÀ.Æ2°‹±Œ†ìb,£á»ËhxÀ.Æ2°‹±Œ†ìb,£á»ËhxÀ.Æ2°‹±Œ†\1x2E°Sì’(Ê€MLxÀN±Ëöð€]Œ]¶‡\1ô‡Q-v1–Ñð€+³­(vʼðTxÅ\xÀK9ðûÄ‘À§rpÙðR>ð:Åèñ£SŒªo\Œ²ás1zÈÃÅ(? øìçaŸ]¿·Y±ËvY&ðucQ| ü”7LàÁêÒ¢SœÛ‚“Uw·bSŠz{Y¤eÀõ{Ñt¬ì);;˜bÄ—Ü%5\à5ò¼Ã¢RÊ–+qJS•7Å7.$e{ì"R6¢. e°ŠGÙ$ºp” µ‹FùAFŽnÁÈujÔŸcEëôV0Š7],ÊÆ…"×q"ðºfhï…¢º£Í"-Ãb‘ïb'èu–‹ü~$,à[T¤TŠE5­ FI7Q¼Z“š G-].åÃ’÷òà ’Ø z]çà˜u’¥“$SnXÀ«5þ%¢ ¸î‡#ÝI’o»Â^1LàQ\ ’~XÀKùšÕã'ùË{çIù±{Ñ~a¯ëð­Oœ\ 8ˆ2àê•âó¸°€ëN‘–Â6weÀ¥0¦分\×a/…oG®;ßôïð×_hí,`#<~*A,`#<»ˆ—ðêÕE¼µ€ ukt:á³¾q×øÖ ß9á{wƒ?´ p "„Ÿ\ÄÏNø¥þk R¼.®eÀFøÃ]ãO'üå„°€ë"j;¥a”âØ'w“÷£Ä4¢4¢4‘¢4’pÝë†ò®$²Ø Ú)Íå…\1´L›L‰ùÑ^§Ùºá”û:y?ƒ'•ßl~·ÊÊÖQ*Ã(”Ø ÚŒu”;eekÃ(•a”Ê0Je¥2ŒRF©¼÷ýÐ|F©tæÓveÌ0J¥“ç…\c͘a”Še4,`÷ËYF,£QìZ³ŒF°‹±ŒF°‰ Øü·ÃvŠe4Î6¹*Ê€b Øõ`e±ï<ÚñH ¸ZÃ#,à¥ÈÞÍót§;wö`žï˜§„¼®Ã·aŸŠx­…¨ìÑ\„ò5D|6Åݲ¢øøQf8À§p±ôxó§D›Ò«BS|é"óbèóâ²òz*0ålž§Sê;‹K9-·°”Ò¢òÂ^ƒ‚UÀ×£;A¯—®fy±ôj ÏÛ¨¾þ©ž G9ª·h¼p€Í}‹Ç›,Å3.E(¥n¸YäW¦úYäwÍ"…f‘Nv±H=Š€× ωð¤üv=¶^ÿuÓþïR¸ÿw)\h‡ÿ[ ëyí\3¶^1œgÅQÀ¥ð~&GÒåç¸Ö»ÖìsüÙ>ÇÃÿu­Í\“½¶Ïñ¨v­Ísœ­ÍsœÊ<Ç©ÌsœÊ<Ç©ÌsœÊ<Ç©ÌsJø¿æNÃÿuÊ<ÇÙÚ<Ç©ÌsœÊ<Ç© £T†Q*–Ñ;× ÿ×Ý©k†ÿëb,£áÿºËhø¿.Æ2þ¯‹±Œ†ÿëb,£áÿºËhø¿.Æ2þ¯‰ ÿ×)–Ñð]Œe4ü_c ÿ×ÅXFÃÿu1–Ñð]Œe4ü_c ÿ×ÅXFÃÿu1–Ñð]Œe4ü_c ÿ·bÔÿuÊ0JOÒ®‡Âÿ5­½ £lm¥2ŒR±ŒF põ€«öY5ÀC—·eÍWø¿+Fjíz(¶^1¬êŒm OåØbôø Ù?üßýO£x)wƒbôà¶Q\­ñÞbTl—ØúŒá„:üßSàQáÿ®v¬•¦*‡êqÃ=¥ÑZxr:öïº:†2j€OALÅ^±€´Ð‹°ÈŸµÀ”µÚ­ÀäÂ6Ž^ÃȘ Ë‹"àA´ ”˜‹In†GŸMÉ5ŠH¾Dºõ¢ˆÃ[^£È:×BQmVÇbØ¿ëFxpm±¨5³#þl¡ya¯î˜0—@ÿ²¸”k–rçE¥8ž¥Ť…¤XºEäE°¹òâ8`Q@JDñ(Bá(BÑ(uΣøÉÅ"?)~*†&‘ë’"‘›¡… | CxÀ w2ðÊEÜ£+<॰."<àÊ_˜oG p)˜„\ ]ÛɓȭQ\1T&OÒ…žg9GmžåTæYNežåTæYNežåTæYNežåTæYNežåTæYNežåTæYNežåTæY%<àúå¨Ì³œÊ<˩̳œÊ<Ë© £T†Q*Ã(•a”Ê0Jeæ›T,£á»q³Œ†ìb,£á»ËhxÀ.Æ2°‹±Œ†ìb,£á»ËhxÀ&&<`§XFÃv1–Ñð€]Œe4<`c ØÅXFÃv1–Ñð€]Œe4<`c ØÅXFÃv1–Ñð€]Œe4<àŠQØ)èzÀ&&<`§Ø5QÔ»˜aT=`3á—B?×®‰Â®Z“ó¾“u¶öÝÒÛ¬‰´x]GüÜbôàD3j€ÏÙü(<à¥HEq1ª1ÅèAK$<àÕ—±ôRä˜âž‡âQðB› <àSà<4j€OAv»®ÊÂǨ¾n**€«¿4n{IÄŠ Nqa‹M1{IĦ*{ÒþŽ} ¯ï0,àê/ÛâRö­.,¥ ·¨ä' ±ôy9¿·ò¦œu\HÒÔº‘r^¤sÜ{MNn½H§Ðk"úû£ I±(ÕÄÅ"É x„ä%ÀõW@:ˆ ë§Ò ¯i ¸BpQ¼BèArLoÓˆ‡ |6õ‰×(¥l¸hÔJÛÆQªf ÇCöŽ. xÝ>?Gy/";ÞM!©­uš”#;MJk“&ñkÆaÀÕ7VôNšdL§I~D.ðjé8ª€—"õÁýöˆGðŠ‘Êá¦ó®ÞOåJ9L 6‚^1<Í+ª€K¡£ÛËv¾ ¸ÆKãØº‡…èñ‘^o3ÊoGâ0àÕšT57£üà<ª€W ¿Î ¸Z›dþwø¿¾Ðþ/ç— .p ø?}2³^ZØôê­#˜·[àÇ%îâŸðkê['|ç„ï]w(A®;¸ŒÕÏniMýê.þ›~wÂNøÓ]ü/'„ ¼îPë<¶Â-¢›FqgÇ‹ ]^íušÈ‹ «5uÒP^¸À.¦±¼p+)î¾ÁxÈdÌ=ê×uø+4œò+4ÒëÁ“×>Õv£3„ª ìbšQö-\`.°ëp2ŒÒãF©tÎoteÌ0Jåfûön•a”­uæ¼pÝtî”ËhìZFÙ·Ÿ:­¨®Ö¨ £T†Q*Ã(•I¢T†Q*F¥Ú2.°pKQØ)Ã(þ?á›}¸Àæ_UÀ®oÃ(Æ 6‚®º³Ã(ïgîTšQ9¾·ó(?€Œ W¸0øTä›ópOE*t Q9»&^əŨÌ;Ã^1âö¢²!Ûc!zHYq!ªq!*_F†¼zÀâÈð—‹b?èRUÔ×€âõÀ§Â÷q*ð)p~ýT€Šy\|ŠÃXxб[tб[pŠéZlŠPh^XÁç}Huoya¯ÎÄ K1]‹Jiª¨¡ ”^“"’"‘"§¯Ä?ÿ©pÇ·h”_°`¼¨^× [(òaFà ^ ‡1¬àS¹;hÄÎ"©*¬à#‡ÛIg”W og’%åy 3Æ>Ðc;èºïÇ>УØÅØzlíbæÎÌÊ<Ð9Öó@§2t*ó@§2t*ó@§2t(a¢Ø)3édkó@§2t*ó@§b}F3ŒR±ô(vw:Œ²µa”Ê0Je¥2ŒRF©ØIgXÁu?´¶í¤3¬`c'a»;é +ØÅ £èuXÁ&&¬`§ £lm¥2ŒRF© £Tì¤óueÌ0Je¥2ŒRF© £T†Q*Ã(•a”ŠeôÕ2V°ûM-£a»ËhXÁæ_ÛA;ÅæÑØÚÄ„ì»x+Ø<™Þìâ=¶ƒ®š·Ã(¦:ovñV°ëõ0ªÛA»^ÏkOÖΈ½.F9C·Fœ»„|öààGqQ¼1|{etQ¼bXVp)¼Ÿb”TXÁgçˆa/ÃY€ò­œ\WgHODµ¸BèÓžŸð|‰zà3DN.8eŸèbSÜãBS V‹LzM„ŒåÀg¯þÉ;,,¥©Êœÿ`‰kA)u1)Ž…¤\£ˆ”Í« H1{MÄao¹Óx ¼@aInÑÈ%÷­`Ë·`”c F®wà ^Ñó /¸ÞJ¯Ñ¥Z¶×èR]ÚktñI‹Ç 7x!Aw¦xäJ5Ž^#‰9|l ½V$W‡×íÓ¾."¯ÌàJFÀ;Ìà¥H mAyˆÒ‰RÊ{;QÊöÎ(ÅžDIËw^!±×ó ‰•Ô(ù¥O˜Áu§¼N¿Bâ3Ìà#ʼBbßOÙFºñ¼Øz]‡ßó‡\ `-¡—B;:ÌàúµYv[€Šõ[BW ¯SˆÊ«·0ƒW ?ýˆ’àê›–—‚¤fpµ6ÊßÍàO_hrfp b—€ßô铞ðâ„W'¼µÀ¬Ö“‡‹øì„oœð­ëÕw-`¬¾oY臤$¸QÌàÄ 6Â/î⿺‹ÿæ„ß]S8áϳÿra›[’ैMüØ ­¾¦ñ¢$¸Z£uÙ<^”»˜&ò ®5ƒÒP^˜ÁC“¶±¼8¸bðo 3Ø)MæÅ–Ð.æ§n}ûÙ*Mç…ìF§ù”˜T”&T”FT”fô 6} 3ØŒN˜ÁNFñûc¸;WxÁ§p|`§ уß:‡¼b¤k…èÁzÃ0ƒW ¿¶‰m¡—B‹-Ìà¥ðF—Bß½•Cq ^1ü 7ÌàºÌe ®^«¼î]f°k­•±;xý<ì@*Ò ŸM‰ËXxŠ/Yt^¼š±=ô$c{h#™bk˜vðjŠf{q)Vma)7XTŠPP^ØÁëâüÙ Ién)eâ¤Üyñ(/ù‚,¶‡^½R;xáƒTvðŠ@V7øXfpÏ‹t²[åÅ*¯£pVg•›UÞíu>[å;ßZå»Qð‹o•Z‘:a«üd•Ÿ­ò‹U~æ·é5hü}pð‡ùs®ƒlñ×(4ïíÀÝo”¢w÷ö–îŸl/îTñƒ‡TµŠ}ƒoþ¾Vq#‡V©¨\Õ/žkÑü`ÅãbuißùYZÝ?ú¨Z±}ÔÆ-£6p) ¹jÛ?Âý°+¿ò/·)ßèÅÿçaèåOù0ôJUìF/RéÃF¯XÈ€‡^1‘}”§÷a£#ÿ°ÑËkmôŠ“ì»áé}Øèeƒ“pÅgÞèeÔF/¥^þ([ÒeÔF/¥^6¸ÑKi¯8ѽ¼ÖF//O÷q£àq£ÝxÜ襻å^6èsïã6MÀ÷q£W f›m7zÙmª@‹wæ ²‹õ6Y§«‡8¶MïñoznlûØôjÕoÓ+3ÎǦ÷¡›^õ®›^yáóØô굚ÞCŽnnzå<°Ç¦W+“›Þƒß{>5½²KöSÓ«RÓ+õÑOM¯|óùÔô|ÉõÔôƯý¯ÿüŸÿë?ÿûßÿúïÿóÿþï<5½\#=5¼bƒvæåJè©Ñ•£™›\)Ÿnpe‡ææVüïNºb7µÓЊÍÞÌÊ6²R2ÜÄêÕõ—ÒƒŠK‘1h\u—ênMj“[A–xjV¥o*•ç&•¯KžT)6nN9¢Ïƒ){nLY.ÿ<”røçɱ|ô<9–ŸÝïðû¼?ƒçýTNÏŒۨ½7©\ƒ¾7©ü¯¼7©¬óoRå|ï÷Fõø€‘xoVÕoX¹Ø|oX?ÑhnXVпOj•O &µÊ†Ö[je×'µŠ?©•–îû–Zéx³òOjeÕÆû@«ûg÷»>ù&`^|ñã–÷yñÅôú>é•% Ÿ\¾Sù<àò…Âç—Yìó€ËòñÏÛ‹/úÕóJ¸ntå½âça—õyØÕÍ´{xYdó¹ÙÝh†o~|©o~XßÜ(1ºF‰Á-¯•clCk”Y£ÄÀ%ÆÕ(‘JÁ3"FÕ(‘ŒÁ(‘JQßÜ(‘ŒÙÀŒu$ÓƒÈf "%2Q"˜ÄÃËô:ÒÀR~dIÀ(÷‘Lsé›»(iúæænÓ7wÒF*ºTÅlVµÈzî‹ÖóÐ*^öà*øð*×`EbÅ£G˜ùaVny i¨i°ÕÍ·§¾yõðÂ7/‰Ã;èj͵ÿQ^ùQ†^qÀ7zéW½R¬=ôJƒC¯HC¯Ö^Ï}ÑQÝ襴ÑKiR­\k£#ÿ°ÑKÉÓûàéMßÜüʽ¼ÖF/¥^JžÞ‡^¼xز.ž“vùwx˜¼+Ÿ[xz¶ÌËÎoôRÚè¥S¼ÑK÷ÖÓ›¾¹ùW¦oî¤Þ ß¼¢Ø^J½¾¹ëÆF/mî^6èç Ûd¢Ç¡—ß?6½òQîcÓ{ð{ÐôÍÏû:¸×cÓ+g—¥o¾¢8+~lzu3ï¦W÷ßnz/}óº?ÈlzÅzNß|EŒjzµ†ºé•³˜Ò77 >5½2òé›×ðâJúæKâÚ'}ó%ñKåôÍ—Äòø4ÎO‰ÿ=uêåÏŸÆù#¦q£+­5¹º“wµ&†vs+Ö}c+­5µÒZC«Ûy÷ýðÝFVbšX1ÁØ+ã|MðN¶ò‰@Ó*wÚ°^çë:t&Õ+ãüºoÏ ªXêÍ©Xê)_$¦o~^GN™Hùâ!mó•Gùj$mó%‰7¾-ÆX¾­ÆèWoŽž_=ûéíó6A ‡¼M.lóu_œµ=o6è§·i›Wƒ˜!¦mî¤m‚À¨m‚@i› PòÓÛg?½MÛ¼zH“s› Ð ö„´ÍÍ-§mî¤Yœ‰7¾MØm‚@i›ÞRÚ&¼e¿8KÛÜ Ô6½eƒ½”6z)môRÚ¦·”6z)môRÚ襴ÑKi£—ÒF/¥^J½”6z!½zz_7zµÑKi£—’§÷ÕÓûºÑKoÜ/ÎÒ67°¥m^Ú^J½”6z)môRò¹7ms“`_7zé¨oôRÚ襴ÑËáÝè¥äsoÚænä7z9½¶¹ù½Ò67×JÛÜIžÞ´Í]”µ¶¹ù½Ò6/ Ñ7OoÚæ®ÛÌáÂ6_Qœe¿ ½_±C¯œÁÜôʹi›Ÿ×’ÏxÓ6_«\Ó6_gDi›/‰^ÛÛ,ÎhÞ½ÍâŒËÇ´ÍWƒâ¨7½œ¼¿5¼œ¾5»rît£K'#mó³ ²ßwƒ+{n7·œ¸Þ[)]nje‹é†–žÓÍNvo¬ô­‰7»•ÂæY!‡Ü:ÙŠÿÜ´Ê6¬ÜEøÖ¬Š_Ü¨ŠŸÞ¤Êæã³ c)zsú ¤Û,Èðà»Í‚Œ­5¤òD3*ì4£ÇÁ.Ìû‘šRùU›R.{Ò5?ùåÒ/Mó¥°úzÞˆG;ïÄžwR~Þ ²Æ?Mó³|Ó“¦ù©ðfÓ3_IzÜ ê!Ÿ4©Z6ߨÌ2ïÍj\òïÅiš¯Ü$›µObÕÓ¦'±â¿ô¾½õ¢´½õâo5‰UOœžtÌÎObå›4Í+õóZC­œT=Ôré’¦ùjÎxšæ%Ñ­ž·^² ù¼õbKÓ|5¨Eæ-ñ›„4Í둆ú’@ÝòCšæ%!i߫⴬" ­âê®WÅæÕ üËîXÝžÜw~•k ³" ´" µ2òƒ­ôp¸•\‰rEÚÐåïµ±Kià½2Íkä錽âq{z†^±S7zéÏÆ#Ì šÅæNÚèØ½”6z)yzÓ47ÿ”‡É¶ò ÁF/ ßÉ·åé}ðô>xz6zÙ^ŽÆF/¥^J½¼ÖF/aÛèåó|£—Òä^"šÅæì,6wÒF/íï^tþq£=|ÜèeÔF/%Ÿ{7zy­m¦À½É7zñ{=ns6¸M.ŠÍ×rë¯4ÍOé Øiš/‰ œ4ÍO‰ßn§g~*|U’–ùjNœûfWÎŒ{lv~¥æÕuÌ›ÝËRóº+Ž`³Ëï™]9{*+ÍW{w˜Ó¤c¾$ù’øÍj:æu[l°ÑÕ‚÷F÷3½Ñ•jýtÌ« --óõÓ·orYñÔàŠõÛÜò-ÈSc+|ç\±¿Ú+Ë|áÇ^7²b1²´²YÝô¼1gux{e™¯¾!ƒ<5®W–ùŠáuVÝú¼ûÀ³ÖüºYk¾ŒAZæK!Ykn”æ”ÅDi™Ÿ1üM³ÒüTø>.óú±êzò+?3ÏBó3êŽÅXÏÛRŒ÷´Íx­mvÀ¨mvÀ(?;xÞfü¡¶íþmEÆOÆ·ÙÅmvÀkù¹mš¯1ã~›p4¶Ù¥mvÀn³Hé˜W7è,o³FùÙA:ææ¾Ò1wÒ6;àµüì Í]ƒÛì€ ú¹mš»ÑØèå@môòÕÈF/£6z)môRÚæ¶”¶¹-%¿2ËBswËžÞ,4wQ~nû²ÑËú•Yš×µÀ|:æNÚèeÔF/%ÿ^áÕ¯ÌÒ1¯n G¥cî$Oo:æî¾<½Yhn~”,47ÿ”WŸ{³ÐÜuc£—cèéMǼä ½47z)ùÜ›…æîZ½lp£—ÒFï…cы[NÇÜü^é˜;i£— nôRò+³tÌëZ¸¯tÌ 6阻(¿2ËBó¥ªÄνœŠ¼5½‡¸ÄM¯|œŽùÙ Yäc¾¤¯¸yyÓ+g7¥c¾¢¤š|ÖfÜ:óŠÂŸ(ó’Xvßôʶë3×åçÍ.­›·N¼Ü9:ó³ œÕßf]ÆåæmÖe,OÏülO¤nn¹×XVš¯>°–º©¥Sšžù#­5³œ×ßY.³ÒülM\ûY‘a†‘•æ«ô˜Wþ陯ëȆëViVù*öÖ¨ŠÏÞ¤Jå|ƒ*núpÊÏR²Ò|ý@x¢ßSü³Ð|±-û¨7§òü­AOø6¤bìÒ5_£Š?Xºæ§ÂOÐß›Sºýïóú@Nüž×R)=¯ÄÙmTùF']ó…Æ5]óõ7¢Ò¨Ê'ª®7«²wšæëw’]í'·rï÷É­"Mn?}rëGþR“[EšÜÊÇÉûöÞ‹ö÷äÖ;ò2ï½ømÖûöÞ‹QC­Â=ÔòNšækxù5EVš/‰eYi^QÜü|^|‰Ÿ¾½øÂ¿1MóÕ ÏWOÓ|IÞ4Í+ŠÝØ^|ñc€f÷àkê4ÍWƒ|¥i^ݘL Óü«/5Í¿Z¦9~ËÞRt‡öRp[1¸&&ÆÖ\'†ÖÄÄÈš˜Xãj”V£Ä¨%R‚Q"#%‚éuäéÀŒhdƒR@W$¹ÀÄD*X ¸È¥ ëD"01‘JÁs?Ò€i-²€é[$£¤in.”¦¹“" ˜Nd¥¹‹PÅÕRETEVEX¥ìz£•ß x\ï7^¹_ý,܈¥4ÈJ‡Ù«JsƒÌýP{Uiî¢6nAçý.=î\JÝܡݱ1ðŠw?ôJ]ðF/:Ÿ;´DÓ4wÒF/Üè¥ÓºÑKi£—ÒF/¥^vcè#{èiè½2ÍÍ’•æNÚèeç7z)MÊ•nxz³Òܤ¯¬4wÒÐËyEVš›¿ÃÃF/¿šØè¥´ÑKi£—®îF/%OoVš›Îg¥¹;MsóS¦i^Ò…i^½Ö^vÞçÞÜ¡½~/~.¸å^¤Ê4ÍÝ-o¹—zùN$Mó³AÙB«ÍKÂgµyIøÕïV~cv?´Š4¸ÒÿHã¼®uaœ;iˆeéÝý Ë'Îý0+Ò@+ÒP+×liÞÜ·œª¥q¾îK¤!W¤AW¤aW¤W¤¡—Rmnz˜ÆyI *s' ½|µü0ôÒ6Ëjójˆ> ½5ôŠ4ôŠ4ôŠ4ôŠ4ôŠ4éV¤¡W¤^¤â¬6¯Ñ ´ÑKièå&piœWƒüm£—ÒF/’kçÕ 7vßèÅß<·h¯(6¸ÑËnlô‚¬67•Õææ–Ó8wQ½´¥7zYæ=ôòƒ›<Ú|]‹ß¬äÑæÕ 6¸ÑKûv£÷¢ÚÜü+Ó87¿WnѾ$&óÜ¢ý”N•Æù’¸:Lã|ItìÒ8_ Í,7¯yËMïÁSnѾ¢øB ó%‰§ÞôêÆîM¯ˆÞôªÔôêgM¯t> Îë–ñ_΂óº/Ìo³à¼î‹>wÓ+÷•[´W†7óêK“›Þƒ`§qîlzõ„õ¦÷à&ó³A9v¼áå‹•,9_1¥FW\ð&W$opY|ñÔÜŠÓÜØÊušÚ«’ó³×â©7³²³{#{u¼ù¼ü}j`¥µæõÊ9¿n-s£4¬âu7«WÎùj–k“Ê;Í’óëqKç|µF¾1eÂIç|Å\ç méö¶Ã,ó3J=õm‚@Ów&ü‡åí«A>:²à¼®ÅáÛ&ôïg‚ îøLäZÛNü6Aàµf‚ ÷5¹ÖLDš ‚H3A ”çf ódó’<^f‚ÀwàYpîœ ‚tÃOòdójìfÁ¹“f‚ÀáÍ“Í+ŠžúÐ+;Ž" ½"môr 7z) ½2¼C¯H½Hty²¹ûQ†^ipè•ûÚèånôò¾6z)yz³à¼:OKu£—ÒF/}Ó^J½t@7zµÑKi£—ÒF/¯µÑKi£— nôRÚ襴ÑKi£—ûÑKi£—ßè¥´Ñ 6^7z)mô²AOožln2[çNÚèå@mô^ç&Û¤qî¤^ºã½Æy5H·u£—ö­§7s3YpÑËnøÅYç«A¾[Ê-Ú—$5ÛMïÁ9\çg”|Ç›Æù’øÖ! ΗD+&ó%I7fq&ø,Îè€eÁùj>Rœ;igô’sö3ŠŸÐ¦q~*´oÒ8?±ÔgeÆ*útÎ×…ð gÅù©p•’¾ù©ÈqèuÅ´ž¹.¯ÓÔŠÍÜвr1mó5ødÁùÌu³à|ÅКn`å¨öYázk\¹qœ¯qcßVÎ÷oͪŒu£*t“*%ï ª”¯7§òË5¦W›´¯ûáˆ6¤²!@C*ÌzŒ­mÒ‹×Ré=¯>°y0½ðͯñÉsÍ×ßsc*%åóê€Ò§i¾þüâJÏ«9S|^p¯‡÷FUÎPoTu'öI­²ëû¤Vf†´ÍWߥš{R«Tso©•£>©•gÚæëZRŠ>©•O“÷í½þži›¯ÉfÖ›;iÞ{qwôܤ}EñK¬7_’xãîÕÉæ…ÊMÚK¢_=ï½øMÚæ5†H±i›—DG}àåS#7i¯bƒ¯D ¼üØ)ëÍWƒÛgU°Íÿñ¥¶ù?þ×6?˜#/”6btƒk”[£ÄÐ%FÖô-¶>"lL «i-FÕ(‘JÁÏ¡¼éˆ„`”ÈF‰tP ^ŽD60J$£D.0J¤£D&8•;>"”‚§JäÓZ¤£D¨Öð—ˆ$`”¬77]HÛÜIé'‡i››»Í“Í]ƒMêÝô=móŠ¢7Þ¬Þq>œ¶ùŠâs/ms'5®w?h^Uj`ïäZM¬J¬6ØÌªÔÐê-7µ*5¶wü 6mó^~°Ki#—b4ºÚfWïkà•‘z9¼i››Ÿ2ms' ½ÒàÐ˯–Ó6¯éý\²¥m^Q4Ї^No6zµÑËnlôRÚ襴ÑKi£—ÒF/¥^JC/'{¹I»¨¡Wjèå¡Ìy²y5Ho|èå÷§Yo¾¢DÚèeƒ½4Û‡^N,Ó6¯kñ빡—Ö§m^QH•Yo—»ée½yEq÷›¡—' ¥m^®ˆ²Þ|EqÍñ8ôò›å´ÍëZ4Û7zYö>³ñ«gºÀ™jÚæçµÚ‚i›—įfÆ Î”AŽJŸ9ƒ|°ÐôêîM¯J3màW?3o }›'›×}q ›Þƒß¤m¾¢8—NÛ|Iñ{¥m¾$~À•õæ%ÑQŸ).?KÛ¼®Eóy&¹4ÚÒ6¯(ü‰rŸö’XŠ>ó\éÆLt9ÉËŠó³AÙH¾á•Sԛݫ­ÚÏÖĵnrÅénp¯|ó³5QÛ+ß|ÅÐénh¥µföÊ7_­áa‘¾ùRø5°W¾ùŠ¡ݸrÜr«öëÍ­ÚҬʹçª(MªœˆÞ Š×Þœò¸ÅôÍ×ÒJ‰bœ/¶ùf0}óSºã& Ηēãòhó’8à3Cà{˜ôÍ+êÂ7_’Ö3Cjù™!\ùæîZ3Cà—z¹Q{Eqxg† =œ‚TæÏ .gm^·Œ¿@úæNš‚8ª3C¸òÍ«Az£3C¨™!ˆ¥>3‘f† ÒÌDšËÛr£öê<2Bmîjè½òÍÝh ½2Cï•oîzåSOonÔîz¯|s7½„ÍÓû²ÑKl<½Ypnº‘çæ¾^=½¯3¿%6Yp^ rkò^lôRÚè¥äéÍ£ÍÝ}môÒ_Þè¥äéÍÚÝðnôâWΣÍÍŸ( δÑË7ziXoôÒ¾ßè¥4¹—Ó¶ôÍ]7zÙCOoœ›1LßÜ\+ δÑKWz£÷Â7¯/|s'mô›ôÍ]7z5ôò ›¾ùjP÷oƲàüŒ:8Mß|IÌ¢é›/Iº1«³+ß|E‰>«3)‰ŸÕ—ç雯y|púæ§D[8ëÍ+/ Ò6_AXÞ¤m¾þ".—•¹QûŠaQyƒ+GtÏL)-]ó³5.ØnM­Þ)W|ÔθÜf ·i?¯såš/…÷ÓÀòÁ™®ù#EÓ+gá¹MûŠ¡×ß°rq—®ùÃ'í­QgºI•#Ôg5Æ §$.«Í×ðЕiL?"ïå6íëGŠYm~*ü\:·i7JC*;ù7¤Ì×Yl¾³èÜ£}ý Tæåßg±yý¹.\ó5>tÚS~Nþ>¯ÄóWW¶yuž»´/‰o#ß·EËî·WÜ}L29Á|R«ôpR«ÜפV)ŸÔÊ-Á³Ü|Ý—ØÜ[jåG “Z™Æ³Ü|5ÈÜ‘¾yIø{¤o^G~^|ñïö>/¾˜Ó7_ ò¥@úæK’ÍØçÅ—lá>ìò%[úæ«Á«ÃÍ«tÛçÅ÷ÆHß|Eñ³„ܧ݌aúæu-Ú÷C/?5Ê}Ú«AöpèÝ^oÁ7ÿúK}ó¯—oΗéLJRtŸöRÐÁx~•ÂÛZ í#ŽmŒl)Üãg~Âe•VÓZŒªéA¤„RpÈ¥àŸ Á\'òi-ÒA)ø³E60׉dP ~…È¥àWˆTP ~ÓÈ¥€ƒHF‰<`Z‹4`zYÀ(‘Lké›› ôÍ]T$'5§j›FXQâ/©ô+Ó7¯(€’åæ%á·Mß¼$ñC+Í»û WÚÁ¯”6`é/oÄÒôßdYnî~” Z6¸QKiÖ=nŰpErEtEv€WzÅlzEzÅzEz¥Á^•åæ¶ôÍKºðÍ´Ñ{á›to=½y¸¹‹Úèeƒ½”6z)môRÚè¥äsn–››¿CîÓnQúæ%ññëéMßÜ Ô–y/|sµå^0SÇfêøÀLM¯™š^35½6½M¯™š^35½ÜCT¶ùöPš^ÖœQ™öl…XDeÚÓ„ àsÐKÓ —ziôb×Cªyƒ¦A/Mƒ^š½4 ziôÒ4襩é¥X£ãÍÏ}™xßôš©é5SÓk¦¦×LM¯™š^35½ ,¤šç}Q¼oz­Ã¦×:lz)7éxó¼µö¦—ÿÍH5ßZ z¶Ê´g+þÑôò¾¤š/³!Õ|35½¼e•ißZ5½&!7½fjz‰¨TóÑïÃ÷b¢t¼y¾°Ünzùœ²ÍO++,Õü6]ÌÙ“j~L6Q½6³Ìö^›ñ×je›Ÿí ó^›ñ7n•i?­¬Ã±6âHªùÝÊNmK3Ná¾4“l~÷ǰLÙæ·ÅN>_]%›?÷¦dós·LN’n~›LîH—Z{akyÎE­©ãí“n~n3§lóÛbzvËªŠ´ŸI ˜Ü«1Z Wþ×*ÝüÌó©{5F ¼Wcøfêxóƒï´Hµÿ T+ì^œÚ …© Ý…)ß0Éæ÷Øø÷׺ÓÙægv8),Éæç™R/HM¢í­«#^ò7 嚟 =äš?ߪ ´ç{B~ìPãî}æ˜H4?ÚÑá*[øÑK2KPoÇJ·¥íy)°ª\ó4ñ_…v¬–Bߎ•Q?Ú±²8¯rÍϵÌÔŽ•]iæ§•%”·g%™Ê5ÏVTÚ{Ó‹®UšùiÅ3 ¤™wT¢ý˜žJ´ç0¨HM/|tÿÞ›^ܤT®yvÈ„òÞôâÂ@šùiE§(Í|™^•hÏû¢0Þðšà_ð^Ã-A3ÿåg5ó_îíÜl¿p[.¾)1»ia¢ËÚ&æ6¯ƒ‡S»Œ f6-ŒÚ¿šVKLëÒ[ÌjZˆ‡KXÚ„GH‹kæ‹%üÁb wÜOxƒÅÎ`±„/X,á Kx‚´€ýpiÁ»~àX(<†È6ð|á– '°<iæËङ§ ,¾¦/L”k¾< åšoפòZUjËá–9—f¾™vZ¥™ß­ìÅT‰öm6°a|–g¢íÛCÌò_€Zm¾ÐôÚØšX=¸å¿\š¹á]ËkßÙ}ðòZM/ßåšçkÂ3À›^ËÿnzÍÔôš©é5SÓkJ{Ók¦¦×¤û¦×LM¯ £­™š^35½fjzÍÔôš©é5SÓk¦¦×Lƒ^¼ÒÌšš^ë°éµäõáxù·BÓk­š^»Ö —‚ä —Šô —òì —ºè —ÿâ zy­AïƒfžÓû ™ÿß—f¾<åšo¦¦×Tâ¦×®Uô^Tð¤™gn§”½. ½—)íE¯‹ÕE/õ0m~‚êšócáÏ….uÑ_‹\«_àRCS–ù™›½âÖ¥þâÖ<—Z~:4Á¹#[3uhË™•ežRÔ-n]Ü.n¯'µ<;D©,ó4Q/n/êaïÅíEuPÅÙO‡ü©ågpdïE¬eͱf)`ÍR¼š\¸ÒC(Ëü›å…¬¦½«OYæKoE*‹ðI-?m0×RË®\YæÇB½(}*Î~·aÉå˜ ¯Ó®õâàÚµšb?ÂZ¼_ËÏ›ÂÜ ‰åÇô|ƒ$–ߦîE}ìa­ÄòÓŠ™gË7Ó|ìÁÇH,ß®5̼ÄòlEÓ ¨zîÄòì­:0à×á³欨4{>&wXKWùÙ™:0°kÀ€ÕÍG`ÀatXk×ê°ÖLM¯™:¬5S‡µfô"ü“Xžsˆ”RÌÓ„¸KbyšÈFÓË7Ebùò}6½Öªéåßy*ÍžR¤lz©Q)Åü´âùmJ1ßLM/wt•bž­0½:Ógž®ƒ­:, ë—X¾´ú{ïyY>øØó6Ës6@¡Äòå¾”`¾™Š]ÛÓ”X~ZÙQçM/ßG%˜g+¾é¿òA,ÿóÏŠå> æÜÈ¿~w[ìŸý˜Ýlê¶ ·˜Û¥MLmZš®–˜ØlïÚj‰i]F³šwŠQ‡KXÚ„GXæ-Bö†õOøƒeÔá² –á –6á –Q‡/H vªâÓµÌux‚lƒïP8‚eâÓµŒ:ÜÀ±po6>]ÙO.œÀÒ›ÄòåV%–§ ÞRbùf '°Ü“Äò4Q.R ³o#,V­€‚Äòí–­LÄ.\Åò­ÃÖ‡QÄ^¬Ü#±|AI æË“|-hýZEíÅ_%–g‡p+*̾=¯×;,r_ø÷Ûë@—©ýÍ.?FËs„üá`ЋÁK,_Z©0{š˜_<è…[|+z­‚½ ³ŸM³ozM+OX¶¢øÚôZ}øA/o¹èõgË[.oûÂuÔÛ ¯ÃÛð·ü —·A/3ñ½4 ŸKÓ —÷UôZ9 %˜/Ìë<óA/¿ž—³1èål z)`z©ˆ7½dC æIÓ·›^r¨ólÅôíA/UÛA/[ ßK‰½éå›"±<‡Á_š^þ ¢ÂìÙŠš} ,»$±üx6n¾è<ócb*˜ÌÓÄé-zyB™Ž3?øï³ÄòŸ»^.j•_ž­8Џá¬üòíZ¯åF«.ûiÅí¦_ Þ‹FK1_Z©.û1q'JuÙÓj¤˜§‰w”í”_ž·L½à}Ì/ÏV”p Þ‹«X)æyË Î;pxÊ/O6€¼4¿M&ý»&Œº&è¹ÜÂ’d~®ƒ×G’ùb)nŸÌï6–ø]ÔZ›‚Öî´˜åÏ$*̾Œ­ˆ}J0?cC:ÐüX¸|*\ŸÌOê¾+]ÌOJÙ…ª¥«©œQIæËŠSë­0µÞŠR– d~®B”_~žç­ý+c ¥—ç›ÂçÐþÕÅ{Af?"ŒØ–š~G–ÊÞÑw‰¤˜ß#|11½£~ˆ¤˜ŸV< JŠyš8ÂÐ4¢8")æÙ!M#¶}PÌ—J1OØŽXéDŠùr_RÌ7Óˆ(éŽØ–¦ÛR>±íƒb¾ cĶøÜ|î{ Ÿ#¶e«Ûr#¶e«ÛræGlK1}Ķœ¨=¶Uzùö”½Æ —°í+3)æù1wwÐKv_™I1Ï1½*ʾ¼RÌ·a z©ézi+3ö)»üÜÿ(FYÚCÙå§ ¾Ê.?Ž­忆²Ëï6,š!½üp€§­šìç:«‹Q.ˆ•\~zû ¹ü¶\v®w¯Å(¥¤–ú^rÅ%¹ü\ˆ5tŒyŽ·ÔÚÝôöªfj¯jîc=†Çô£½ª)éíUMøn¯jE×džgplx1s¿7¼ì¿‚öª¬¡ Üò3‡ÜqP=öcâçG¹åÙŠ˜õ˜‘\žb%—ßÕc?&n'I._\~LÜŸ”\~LôˆÊ-OGXì^Ory¶‚C\ž÷õ —û¹ü/?+—ÿåÈåTe®ß-–˜ÝÛb²aLnZ¸£Ñ.áVKÌlöÆo~[èױŴfoœñõNÃ%,mÂ#,w!ç /üÁr?áÒ‚Ø<¼Aö† g°Œ-|Á2¶piA˜ž ¯ƒ„#8m¸ ?8–piÁ“ /°Œ œÀr?’Ë—’\ž&xÉåiÂð”[¾uN`y¯áÒD=w JS8lEý=¾`Û-Zäòe •[¾u¸ûZÄúâY`!¹|›‚Ö;ÔRqØÒ4¸ål¸¦±¾6¹–@ÞèrõµÙµ’^8Ë×Aïƒ\žE;èe«A/å×A/MMï“\¾¼“ªÇž& ©M¯¥7½fjzMd,¯…·RõØ¢$—o¦Þ·A/§w§÷mÐËVM/Ã6Õc_\ŠrËG$¹Éåç…ÕJ¨<ÒYrùyàèMrù±PÕí¼yJ/Xrù5ÅÙÂÔίî}KÑ.N¹‚Szùᔺ|sŠ÷Ajùy»x«íWmíWMæo¿j™ÛíWù‹ÄòÃÖS!ö4qÊV«/ß°ò/^~:ä ¨Bìi¢€ÝŽÕŽ<ïí.úB‰å§C«ÐßÛ]V¿·»èª%–g‡”¢ Ú‹…$–çâ¾$–§ oÄò4‰åÇÄ_M$–w•[ž­8øÞñ²ÄøÞñânâß{Çkü£ò[±üúÝOŠåÑàoý¿YþåÛµY~m ÷ ËÂ¥ÚG·áÁëu¾­×ùÞþ¶Z~¤å2ÈÊBóÝwúOëýü×nŠþ[·Á›ýÏm”ÿ²ÎÁ¿¶nößÖü÷~>¸ŸÿѽÕÿÙmpÿU×aÕ˜ÿÝ3jbyQ…ëüßuFC,¯Fè.Äò­¿ËÓDI)ÄòjE‰}5ÄòuU˳•“ýÕ²UÑúòpxy ƒ?4¯ ?^ Ø‹µ‘B,¯9Œ,MƒYšZnE!ö𠼑[~L>ÂÁ-[5¸üj‡X^×âo …îËÃáåÕŠ°ýŸ½Ã¦×ª’7½–ÔÝôš¶Ýôš©é5SÓû –o†X¾=”·ö´bù6½o;½oïkazC,_‡ÑîÖÔ÷¦×n¹éµVM¯™½á —¦¢÷…šXˆåëÌzá#·¼Zᇗ— Ÿ‹·ò¼æ7Þ½Tß½p)qxùö:„X¾bùö(¾—êû —šmû^Kêôrð#NàµÚ÷Z‡ƒ^Ì|^^÷E½éåº!–§g³¢å-XÂwÑ{Y~Ñ˲y¡•ŸKYÉ÷b÷biÄÐÊs|f*v/®aB+ÏVG—— ž7RËÓÄÿŽC+_;,v/VŒÔòÓŠßµÊÓÂ0µÈµüâ—ë—PÊsf)6¶Ìá¤ò¼#þxByÝ,åõ¢Ö“å‹Ú‹ÿVDRyvÈyB(ωॠZþà2yuÒ£ ûÖ]!k™ãE, ™üôö “‹^Àr#ì½x5½p5½<íƒLž#àÄ«2yrÂ?ŠÔ™<ÛPB$/(ù¨R¿iT¹!eØó‰SuïÕQ¤r ùÕ¤bt¡“Ÿë0Å5tò´PÙ.Nyà}èäùF`Ô¡“'Ûx‘Vž×a›^qÅ©•{ïÕåâ”Oiã§7†ºE« Ì«ç¸wHk'ŠwLKU⽃Ú'mü¼ðVH¾ÃZIä Çß"q|™Øb•|Çå§ Ù/T­|{¡Ê¿Žß UËboT)M7ªpm‘Cž÷ß(U¶iTiiTÙ[¡ú$ŽŸ¥œÝ¨Ò²¢*qüùùDÁõ|‰ãÏxÇ囥@5¡»85¡»|ªYŠRKÅîh–_ö¨¸¾xŒH"O²B$‘'Ùv°yQÊ=†¢ôbVÉãù!ã/ ˜ÞÁ€ýG>‚޽PµߢÞzƒ{íQo½Lòx~Ö)ª…EÚ×õZ’dzC*–#”¥Î¹‡²’dzC¼Qo½Lìpl5‚J»# J?‚|8?G(Ëk`€#ìP–Z†äñ¼ec,Ä(#w(Ëß3?‹^ J#‰|c#N(/oyÐËz¹Á3è¥iÐKÓNïçeù(½Tb›^ú“8¡|{‰¢Þz™äñó¼¬~wÓk5µ½ìpÐK…yÐ Ø"‰¼FÈ[Ûlµ/Ä"‰|{¿¾ z9ÂA/ÿhzm¢½ì°éeÔ#y<ߪôÃ÷r;½’ÇóQ²Ã¦×ÔìA/g~§7ê­o¯^Ô[ß<€äñ!¥äñ…CÉãËDEùÚjø^ Ý;½’Ç÷Iäu-øÃH"?&;OPòøÝáeÙÌÛZ t‡ \DyuÈ9ì][Ê\’ÇÏ0ì”÷Þ·eòœäñÓÊ Ó½—ÉÙ½ f©âE/×’ÇÏ¥¸#y½žÖ[ôÚµÞŠ^›Ã8Ÿ¼f_°8Ÿ|55½¦fÇlyõ$§‰×jzŸäñ­Ã¦×R¾½øxHϧü o¦¦×ž˜R›.Lmt½þ²Ââ½ã–ÆG¯ÀlZG<¶>:šå¹ Qf=Ç΢”@~n‹ï¬ÈÓÄ;î…µ)äي쯗ýPÀ^Œ0¢ÌzvHÉB y^‹šp¯Å8Â(³~ZÙß¾RÈï-J—Bž&ÊÅ#  ©;â|¬ÅøSÀX‹Qo¹£Y«¥ÞÑì“B¾ÝòˆfùÂØ>ààÇZŒ­ÆZŒ÷5è6J Ïò–G4ËVc-Ækµ[ík1)ägVg¬Å(uŽpƒ—B~:4 w_‹E™õ^%ç1óß½at”Qf½^=J*¿E¯g$½n*zm„Ê ÏaPì.z]Ž/z½Ã¦×äݦ÷áLòuM¯iîM¯™š^35½fjz­|ü —Ï«|î‹¥nzñ¹T™õå]VyšØjø]þt1è%lƒ^¾éµ¿Ê÷Ú_Ê Ol(m6½L^U™õ…ye/J#ßZíôÆ™ä5‡Ôã›^ÆúÒÈóZüpÐËȧ}¯•>/z/îæI#?Ÿ;Z°½T0¤‘ßýÙ•Š].¼¤‘ßmìhñ"×ôî—óPÜZñõ-NKojù˜ Ú‡£ÈϨ¹«!üÜEÙ"Ö”áÖ*m¯v„tájŠ{G ü7CåÕϧÿ“F~L&iw¤`'¨wXKLT^ýîÐW/XŸ$ò%àÁêƒDžÃH"?&KŒ/X-Ѿc[þБ'áøV)‰ü¾ÉS…õC¾¥Éo‹ÕD/Z­r@Ñjµ×‹V³”‡}ÉÏKY»h5)¼h5ev¥UIäçN1J"?# ]°>‰ä˨ Õ'‘üàÈë4¨p¸*õ‚rª6;Í)H%‘ç+ÆYhNùΪÈúieÕÜÇ"ŒCïU˜U”Ë0¼IÉϵLî…ŽDòlEŠÆRŒÓ^¸ºÞ‹1›ø}5&‘ü ƒ_"yšø|¯Æx-‰äËlH$O· ÚÇÒñÅYäՊë1ê±cë€Úo¡k•Fž#d‡c5Æa4½T ”F~:äÖeœEž&î¸ÆYäE/?èåÇõó¦—¯ƒDò|Êà0Î"¯ÙÀ›¢*ë9QáNïgÓkÕôR<ølz-W¼é徦Dò{„öƒ¹ÒÈÓDuºé5uzÐKtÐKáºéå.¯Dò3‡Ü‘Hžî‹*nÓË=TUYÏV¼¯Žgy®ÒÈW)‘<Ù Ýôòó(‘<ÑôÚl4½T‚¾5½”4%’ŸkQÒTù1ñ _‰ä›©é5¢š^¾ËJ#Ïaðy5½&ºŽ0ª¸í{­Uû^nQK$_¼Dò!õӦׄ릗o¥ÒÈóZ|Ó˽:¥‘ŸVÜËW•õÄs¨*ëÉ!¿û^UYÏ9(|›¨¦—ºDò<µú¦×Ò¾›^FûÉO‡ {¤’§‰·<襪]ôZ^zÁ˶Dò¼§©Ù徊òÈïVügPiä9K”M]lª³~·â¿zRÉ…Úhkzsqk:pak™ì½‡ÀÄæ‚Ö2¿‹Y dª³~š^ú«ˆ}Ê#¿Û<å‘ßË /\é ¾ŠV;’½`e¼*•üŒšs]¨Zîy‘j¢¨g‘Ÿë˜¥,_$©ä *ŸÐàŒ$“g+šŠT;*º@µê^“Q .NM,-NÉ‚dòó1¿»8e<,™ü¼Aqj~qj×Í){k2ÊÉcMÆÌÕö¬Tdã4ò|v†y{V;W|ÄTšG\@y°=«Ýq{VKZoÏj¿ t\`Y®kŒ5ákd¹4T"ùA–±•dòcâ{(™|ùbH&O—ŒaH&OµðP’Q-5þŽ ø”%“ŸkÑõI&O‡ÑqÁø C&ÿÃÏÊä8‰ä}LoZ\&O ·Ëº ÷ÚÂ%c[¸–H‹-[bbï˜%æ5džÞbZKÌjö† mðÞ‡GH î4ÂÒ[øƒe®Ã,mÂ,O!œÁb _ ®`™ƒð9Üi8‚´€ð á–Ù /°Œ:œ@^çA&OP”L¾µ '°µ '°ŒB2yš8Œp[«p›©X½˜D!™<[QÕÞi}-\í„×âõÅtÜÖ…áA,xy-d½¨û`–Uкà]ÔÚ':|M™äiâ¸4 r9ÂBׇQìú-¼ÞjÐ  ™|AT2yšà•Iž&vXôÚÊ$ß:,z­"½ ­/oŠ2É·‹^FÑë×Ζ4½–Â=èeô —¦A/Mƒ^š½45½–?è¥t½Ó+™üL¯aÞôZþyÓk­½|Ók6½\|K&Ï>Èäi¢ÒÜôšœÜôÚ1àM/Ý—RÉóZøFK&ßLM¯]«éµk zñÅÓiäÛµ†ïåD`¦¢÷²#½‹^+€^ðZuöb× “ºL»ÐYä÷=Yø—KD~·áR[©ä·Å„í¢öŒ' ZnþªÐúÝ›Iø…¬‰•E,—²J%¿{ãÆŠRÉO\©ä·ÅzëH¿H&¿=VZ?ý1v.XMO.V-¾P5¿H5¸@µ™kN-9~p ÷&‰üܬˆoP9­*÷¤´8Aê“B~·avòcá° TK=/PmlêÓä þ\P š¢\ šÞ R`mP)‡¨–,^ Zzwqjc+§j–ÂÔFݘâÉ}t4k%Ó‹SK.N-÷¼8¥/“B~Xänšê¬“ÝRaj5î>F0À ¡,>µJ#¿¯e—J!O[P–¦ p#xPÈϵøùûÁ[`€*è(«v(ËïéçØj4P³¡4òœCÄRÈ7ÓeÙj„²¼Ö H!ÏéåàG0@iº,_T)äQÊBžôr„M/?Ÿƒ^þe0èål졬òœ^v8èåÏXˆÑ4bFo"ðÿ¥‘ŸÙàA°Rȉ_ CžÓ‹‡"…<ï Á‰ò4QÂÛ4 z©?ïôêòez¥ŸÁ[þö ÷A!ÏyËc!ÆVcÛ‹[rc!ÆVûÆ×·±ó…§,…<ï‹3?ö¾°¾Py¶â}Ý/šzûËþh(z/~Ö¤'6œÞ³D÷A/‡Ñô2ŒPy^‹²ê ÃPùÖªè½,qºéåQ yvHý¹C[+HÞ›`”}¤/¯ž ­o¦¬ÃÞãó’B~:´òìí{ÚI!?­¨I!?&J¨J#?&z)äiâOM/‹VèòÓŠ; RÈÉŽozù—ª*­g‡Ä¦è¥ý^ðZûf×jÄ7»Œ¤ßƒ †(…ü¶ðTùiƒqK?mà1¤ßþ ®,òÛÂßf”E~[ø7²È—6ŬUm/dùC¼²ÈOo¼ŸtŠôñs?x ¿ WÓû‹VSÎ Ö'}üŒyù…ª©úM* èòÃWùòì T.e•G~Úpæz〖âÔ2Ù¦pÌÒÇr”  SËînËiÐ9ä9 ÔdÇÞÑk26jÿj§}·åß$ÒÈÏìQŸîÍêݽy@K±j¥Ì‹UË.V¹þüÑžÕî¨=+3’~´gµÚííY-Ǽyå>—Éσ²»jÏj™éíY¹¡¥DòìBýˆ hjßJ·û£¡}:‰ü\ëé$òcâzB ù1™þÜØòc"…ü´â¶®ɳCªÖÍ-lW©õÓŠ¼òc²T÷Ž èe•Hî÷…ü?«ÿqUÈKÌîm±ÄӘܴp“$-wùbj—ëÄ̦…Æõuð8b^s°Ä´.½Å¬¦ž1üAZp?áÒ‚˜?üÁrði[ w¸úðiÁý„3Xî4|Áò|Â,÷ž`[8‚´à~`™·pËì„X,árÔ ùrCRÈ—ÙV"ùÖáà”‰Éá¶V;©J$_ É·¬öRè(ò©òå!J!ÏV EG‘o÷Uĺ&<¥†_̺ ^Ð>*äÛ0¶x ¤g«…|êµÈõÊó…®ßò`."ßÊ —ÂoÄ]ÙŠZwÑkžT ùr˪µ¾ C ùf*zMÞ—B¾]«èµ‰ÒQä ØoÃ×r6½ ùò©ÖúfþØè(ò­Õð¸Æp¹øì¼•ϵdaÕZÏ9d‡ƒ^þ…6Ü.¯5èe«áxá*Ul=‡Á.š^K«ôb¥g‡6½4 z© ï¾W‰ä‹sBž&ªÖƒ^^kÐËûÚ[Ïk±UÑk%tyÂF ø^vØô²Ê“Î"¿;d¼¬Dòs)ÖòþµáµcÔ^3¼&¬»v²x¡Ë°W"ù=<“Ü \Fì:üní+‰ä·…B™rÉs(µ×­’ÉÏ´Rµ-hMˆ.fM¼.d¯§ŠëÛð Y.jÞ‹X+M^ÀšTßÞÖ2Ú‹W.Nuù=:&¨Úúmá:‹ü SSz S³¦–$]ŽÕr‰ R³¤Ü6û(HM¦oHM­í€ÆJ$?/+דE©•2o—ÊÝ1©äé£ñ\•G¾™öpVǑ߭,€“Jž&þ->ÊÓ«Å[Ê#Ï"ÂÐqäiâÂY>¯A/oy„³ìp„³4 z)­zq-©ä lRÉ—7EÅÖ—™W±õQ[Ï) ziôRuô‚([ßîkÐK‰l%ðZ;½Ê#Ïkqƒ^^kÐËVM/•Jž×¢¶>è}PÉ·VM¯]kÐËk­>¯A/9[ äpÐKiµÃZRÉ—™W±õc2ÕµéµlæA/w_Û÷Z‡M¯%:ïôJ%_ŠòÈsðx”Ê#_Þ/©äù~([O<¶Tòc²ã9°hTòÓŠ»üRɉRê÷^ÙD½Ñú·Å¸¤’ŸŸTòíZE/c¥ï¯,Þqƒ‘Ñqƒ=þ^’±¶œTò{|\ÎJ%¿-–qÜ~—VJ&?Ý=Èä§;ZŠ[»PaË•€dò»7V‰ÐqäI¦[¿-OiäglðJ#¿-&î°väwñú”F~zã¬ë±¯‚•k8G~zÃˤ4òÛò Åý"Õj ÷ž—̪¶~ºã…:F°ß/ŠT+*Ü Ú•zI† H2ùyH·Ê­§‰jó •¢r¯Ê(†—‹µ4î^•QÅZ·Toý¼˜<‰ägܦŸ—{åÏÆ?zë€÷Z¨ra¨zëçùñV{뀖ò¬DHiä9l6jÇJ©öG;V«ÑÞŽ•ÿˆH$?ײ\ñæÕŠÒ÷’̦¯5Õ½]+½ÒÈÏ0žÎ#?&þ"©4ò4á5Tù1Y!öFöOÔ´ Ùë©Úz¾\$’S%tù11í_"yššDò¼ï«·ø…DòlÕï6Dò?ý¬Hþ§Sm»ôוî=·ó“{ÚX©¸¶p´¶‰™ÍÞ0}1±‹%æ5-˜×˜Öel1«i-áK¸ƒ¥·pËŒ†;H æ-ÜAZà³Ã¤S8ƒ¥Mø‚ev¤#Op[LP G°XÂ,½…H Ø /ÜO|¶ò:xà ¤‰i8etÉóR@[ÕÖ·kŇkë0œ@š(ãª^°¼Xõ2ç«›ŠVï°pu ºxõ\ñÖ2{_‹X7²n*fýZ­›ŠZ7¶n*n}6¸|(ƒ\bSèú»^`¾àõzéG½T;wz%’'liäiâµ½4 z)Ÿz©3z©ýzy­A/;ô>ˆäÛ}íô¾ zy­A/Mƒ^~ÐËçµÓ+‘<ÿ ’§‰3?èåSô²Ã¦×²Ù›^35½\{¿ z©âz1Q:‘<ï‹­š^CÕÖ·Vƒ^†ƒ^£éµ\ñ^U[_¾)ÉÉ:lzí¾vß«jëˇã׎,Y¼ÃKÅïxÁaï€Á*tÄð¢”J~¾•Vð¼|/K°)—ünÄ-%ÉäÇÇûk¡kǶ¹Ö[˂ƒÉϰùCñ{qkq¾dò»ÕS6ùm1ñº¨åÏ{Akz1k¢{!Ë]+‰äË X»NG¶Og’ŸA¹¹p冑Dò» ÿŽ–H~,Œû‹U¦û¿ª&…·ŸåØ TæHH$?#@Œ(‘ü¶pMªLògLßS Þ…)sK$’/½¦O"ùiƒyÓäEÌ$?J¬å[-½º }Ê$?½Á{~¤\D¤f)H-/½—_Vͼ)廪jëç5fÙ}©äù†sîz Æ_n”M~ZñÕ“Nž&êÉ#& vÝ^Õ²ÝÛ«Zåô±{ÐÉs`O‡’oƒ/`í¯Zéä[«±ãµÆrŒ`´oå-«Þú2‡ª·ž&ܲtò4áZÒÉÓD!·ÜëeEÕ ]+Ð¥lòíZcï€’ìˆ ¨xÝŽplPñû4 ÎÆ —òïØBà0ÆïkÐˇ2èe‡ƒ^~ì#p7gÐË9lzùØgÓk¦A/ÿ5ô>èä Ê&ßLƒ^J—c=FwD´”dGDËV#¢ÅD)›|y”M¾¼zª·ž&~¬Çx­A/[ zi-;ë1&šßË›^Š*߯zŒŽõg~¬Ç¨]Ýj×c=F¹~¬ÇØjì&дï&¨Þúý¼l÷GÙäiâÎçXQAë1¸éäÙ!Mƒ^êɃ^^kÐK%ì&ðZc=¤“çሤ“oƒ» œ¨A/‡Ñ¾—?K'?/5e“UDéäiâ¶ïå¢K:ùiõTo=M:ù11ŽR½õ4ñ¡½ ¥“ŸF ¾”M¾¢]¯šÞ×­Êï)¯I(?ªÇ6Xfv‡ ¦¡ºü¹[ å÷•¸PPBùm1¿¸erª”òÃ&Ç=v ¡´v\x1kc+dM.bMß/`©û}¯–^¸R8“R~ß©º\­z]”)<©ÃDJùA>]ùäçÑá¥øjR-§½Hµªi•Å©.ïÁÎênPù¯¯Ê—wìGoàž~¨¦E¨v²vj©Ò\p½:™<_sf6ª–^¨Ré“R¾Ýl±j·T¬Ú…šUþÎP¬ZÖõð¬l4vº8áÕòo'K~îÉN,猪dÊ&?­LCo`í‰v­Vj¬É¨kwTË]- åg|Ý•Mž#ćKõÖó–y­^“ñ$¡ü´2ñº£Z~ %”g+†+ÈÞž…+Xî'\Áb W°ô®`ux‚eÂ,£?°X ¤oRxÅN`é-|@Zð °´Ñ¡äi‚kS.yš(…† X¦N2ù2 U[_Åk¸€4qUеÍ*wùUm}»Ö •×j\¹É®\ò¼/| •K~›<{ºˆõœëBÖ닳ު õVE­ëÓ…­káÅí£Lž÷õ “§‰ùø…îc.yÎ!¼rÉ7½ô£M/eª¶žÂ+J&Ouܢ׳‹^{(:”|ë°é%Qª¶žsˆ÷K¹äi¢ú[ôzŽ|Ñk!¼½nôR3ôR ozM3nzÍÔôšiÐK}ÐËçÕôÚíåv_¬zù];(ümÐËa”çu6ŠÞFÑkÇÜ+—<Ÿ2µÕ¢÷…KeJ~ZY-ó¦×”æAïƒL¾À¦jëi¢Z?è¥iÐKÝ}ÐKSÓËbsÊ%Ï[æà½ì°£ :Ê%?/¬.ïxÁ¦·fè\ò­Ã¸Bøµcn£H'¿;¤ÛN~[Lü/v¹ÞW:ùÝÆ’ÆÛïhíw¹ƒ!¡üÜ®”Ý~×2ÀÛï2O_…×Ïíâ“,©üXà$UwýÜ•åÂÖNH/jM^ï€ûB:›üÜ-+¼´VW¼˜¥Ð(­ü8iå·ÅñöÔ°‡·ýí–Ñ{áÊdU]¿¯ÃMiåglx›¤• &…êÓ¹äUöÖ¨òyªOUןÁ/R-m¼@åó‘V~è¡n[˜rq¦sÉϨ¼¥–Ò^”ÚØšRŠÊEéÓ¹ä‰"ƒÊ®é‘V~L¬n ­ü˜¸¡õ1ÖaàH+¿;´¿?•Sž&êò#¬¥¦¼‡µÊ)ß®5ÂZ¾nÇ)§<;—ÒÊÓDA|ZùÖaÜ~”Vž­˜m<ʲð? iåÙ!eÙP*-t-’—Vž²Õ (°ŽÀ€ƒG8ÂZ¶a-ñ ¬D}Ók¦A/ñÞÏÖr6½ZyÎ!Mƒ^Þ× —¦A/Mƒ^š½F‡µü&ªòúòêI+_Þå”§‰Úë —zè #TNù2‡Ê)_•V~œž•WÛ_˜(iåÙ!õëA/ïkÐKMy_”élòÅU*§ü˜,-{_”©òú6QÃ÷RaozíZí{ùélò!`‹2NÔX”q¢š^þŸú­éå*OZù6Œ±(ƒƒýÞôò¾”S¾t(­Õ¤ÿö©\¾+›ü°úTr=MÔ´{¯‹»IÉO«§lò4áÁK$?&Ö©PÉõcâlH$?&~”Mž&8‰äÇÄ$É·ZNFA;þà€HþçŸÉÿ|rÉ©>\WZ¸éÛf´߯˜ÙìKê²ðu‹y]ÆÓz,l³š¾T«%&ué-<Áb OÌNx‚Åž -˜ëð‹%åáuij·ûÿ);³dArÝÈnI7ß ~f2™eV•©¥$-¤×ßðL:ø¨o ò‚¤ °ü.¼DòzM‹^êç‹^6£éµQ–H~ Xò2ÁGI$/'M¯u¯®㥄ëW3š^Êß½è(Å’ã¥Xò«C¯Åw½ÜLP,yUȃ‹^Êøã{yT×óƒåÆðoã{¹Ý!‘õ¡×š1ÓSøgÞ`g†^;20¾—ÇÜ%”g ˆ ˆòêCj M¯…z7¼–½Ù5ͻѵLéMî[Þõ§qVfæ Ì…%< Q"nlßdò§ “LþX¸»"™ü±˜|ÝÈrŒRžŸÜÒ×Ö2¿7¯dR2y¶šoÚ´ZxÃú&“gmðU_UËWߤZàxƒJ)Z2ùó õnLM¾nJMŠnH-ú@J-·!5±¹!5KCÊ‹+¿µwe_+ïz}[lšØR¬]ë0jÆkbKéz9WjÆË¹²kjÀf¬©Mkj@Óšp黦<ë°&¶\ôò½½¡ï°kSáE&¿Æëö½’ɯÆ/z_dò*Ås‹^|z’É«û^…”Ï’L^&gH º¡üh[ƒjgÔ·€ò§6+3n•É÷”x=ÇÕnBŸÝ.~°’ʳԟÙãWíªöñ«Ü’TžšÎ¿&/ñäUЦ¥4Ð4¼rí/©¼Þ (K*Oh’Ê«Yj¦´Ü”Tž¥¸"©ˆ_Öñ¦á Ž2áŽç„( Þ'Ü@Y\*?,áÊ‚wø€Ã. ,`GRùñª’Êv+íúe p™Â”‰‚m“êAȪ›Â<zÜu¸€Ë.à2…(;jx%ýŠ'?†^Rùõʬ¿W3릆ÖMM­÷Fcë¦æÖM ®?«ÉuSüÀªy¡Ùu½áõ`ø¦×ÅáE/‚âɰ%•— -ÔÝäÇ—"©¼LÔýԽlᢗ.zYᢗ¥½|VÓëBtÓ릦׶y%•×(S7^ôò¿·èeã—Ïeã½p _½lÆr»<±ü.M‹^¸WÝM^¯ÌÆßô*íz•¢¤Üôº²Ýôº©éµñRÚõz:JRùÑxIåW ½xeIåÇg.©¼LÔ¨½¯ß†Þ·xò¬ÐL‹^V8ôZtýí{%•çgÎÐ]Iåi²œñC/'ôJ»ž¥8]–Tž¦¿ð@ÄÐË”g)SÑ›Þ먙70¼XW”×+ÃÛ(ùzµ¢÷ø^¦z’Tþ”²Dê ïÛåY㨈òÇò¦”e\ÓÛÛâ׿öÃ2Í7·<®òl`×åÅÔখ·åI+ÊXZôf–·òI+Ï2pY_›Xò¥òlË4¯ŒêQHùñ>M«½iÃúvGyö[ШRÃþÚ¤ÚsTÓ½›SSÑS õnL- ½]¬¥EoL-Sy;Ø·ôëÙ£”¢Sî§I+ÏOÒ¡‡Rk]SúaÉÍ×ÜàE+že¿!¥_/Ó‹Vž&:^…”W)ŠÔknÀf¬™-MknúmÍ ØÂ5³e3ÖÌöE+¿zãžÙêšò«£ÖÜÏRHy•¢,»æÌ·æ”Jï¹®)?Z¨kÊW–V~™ÖÜ€ÍXsšÖÜ€²ìšÙRç]ô¾håÕBV¸èe©{f«kÊ«B–ZôR_ô²‹^š½|Ö¢—¦E/;ê^—}_ô²ñkSŸžBÊÓY:ïE/*”V~ Š®)/Ó‹V^Ï¢TºÖeÔ¯gÿ‹»¢ )¯ ©ØÎ ÁTïñ½<é§kʯÆ/zÙ‹^6~ÍlÙ›Þ‹^V¸v¨)¯­°­üz¯{WAZù5Ê‹^¶pÑËW^ô¾håõ,8s…”žMZùᾤ•_¦{]¦ò«Ôò½ø*_¾—¦Û÷þ¾|/K-ß‹î•V^-d©E/åæE/M‹^Ư=1Êè³'öRž_%ÓL+ýzšþÌãC/¯ÌUúõ,eÛ³.ãáSiåUŠÏšug_ )¯R쨵.cÏϺŒ‘ÞËŸ -F½áeÎa…”?eLm 1 ŒžUõð&×Ò¥7¸Ì ­äëO¨RI)O 5禖ƒ«äë -eÝa–­d)ë6±våxk­n^™ÿKå9@”ÇVfÀøÙ´Z–÷ÕîûXÍÔ°Z¾ýY•±»UKWúõ„ØÔ¤Z³,ãH4¨Áè)¦<ûŽŠó•‚ïìÜ2¤•g+¨Ã6«–e}–fTÞ›U.¥•¿“/­ühA³jÙÛU ´nVyøZZy>‡Ú¬ZóFÕR¹/T9| U|}ËËCò¤ÃÚïâHŒ_µó¡•ßó¯ñ«\AK,ÏfX/­9-õáÙï¢0ª¸òª˜+ùzšxè]byšxCby‹ÞX^œc W^ß.Ebùejh¹?"­¼ Á(ùúcZç¤ÿ£Xþéïþ Xþñþï?~XfàÈÃ’iÙáe ºýëX¸+0.Îçü  ø},<_5~o§åŸÎÚþóXàsþËÙÿõ,óßÎ>øïgmÿc,`áŸÏ~û—³¶ÿyöèÿ:ûàŸïóÎÚþõlÁ¿}ðïgm!–7ŠÔËÛDm»1u…uq ²"®¼+¨WÞ&pÿyPåŸ=âʯ/,âÊÛÄÆÿ:Çýó•Bïâ•_ÀÒ´ˆeo,dÙóÍì›Xžïå=ßÔz©…-{cqKÓŸèçE.ßèzðx³ë1ì ¯›š^|nz=„yÑK…uÑëqåݽT©›^‰nz½…M¯›š^¯°éu•ºé}K¾Þç!€¦×;ªéõg5½®£7½žÍ}ÑKQ¹]®W¸èåx5½~ZbÑËñºéýÒôzo,z©ô/zÙ¡—“øËkP,ÔwÑKQ¹éµA‰¸òe*âí{]G_ô⃠±¼+¤"¾èu±ülÆMoÄ•wopæÓ¾÷“uÔ¢—_ôºX~¹ÊH¾~¾òÌ8ɱ¼þ)Ö™1|âPŽï¥2byUÈ$mW^¦?±çÇ÷¾Ä•W)®#ÿz™,üL¸Uby7=qåeâ¡ñËÓÄeõ׆—Áˆ‘~ý*ÓèÚ½çM®Ý->“ ŸIƒ‰ü3i`ÏF`y5ýÐÜZ<|cËUh–gm\&…Xž“ěٗÀòª ßTˆåe¡ßÀZøæ•ü‡XžµY}Óú"–W¶hOkAâªYšTkAƒj‚tsú’=Ûf2zcÊ•[ä_¯2”·gvËž¸¬¼?н *¯ŠÐòê98¶Ë¯vÏÔ–Q‘€½Ú@'°§É¦‘€½K±åkrÀ®÷JGjy?‹ÎäÀ4ö™˜iM0µ¼Ÿåjy›\-?[¸&¬pMØkjKÓšÚRö\“ ˜kr@ÁyM¨mÎ䀧„B-¯Wf÷†Z~uT¨å§i¦¶VáLÌ´¦¶lüšð€ÀÐkÞSÛï‹^FX“°jùÅÆ÷5µeã½å¡×eèµñíníBŸˆ,?‡rÑË.ziZôÒ´è¥J9ôZjî¡×L÷ÔöÇšÚÂFdyŠ«å—g µ¼MT_× ŸyD–_Ýjy›(‰ßôþ¸éÈòóYCïKö뫌ìg —ïeã½ìÞE/ÅíE/K-zù¬E/MC¯eYz­7nzC-¿¾åP˯>ŒÈòÓ´è¥Äºèl¡–w…܉]¾Ÿ^¨å½¿/z]-¿>‡¸¬üì¡×œ×Ì’øš9¸ZžÏúà¤'.+o? 3Fdy•âl?Ôò2YóY˜Y–õY˜™Æ> 3rjy7ƒ¯<û¹¸? 3küLwñyEö|”Å7»\-Å]åÝ<àåWËÎ~®iì.O>‡^žõñàhèåi¡zØËB…».µÎŸ3ßu½ÛHÄ^L²áC+Ô´šöÜ´š–Þ.öå¾òl¨6­¦ø6­Ö‚†Õn?oXyðñWÃjÏiV¹¢üµX¥ô½\+UĵçÅ!×ú"˜×ÀÚѡծ$Z_óª½ôO³çõ’ˆ½Jq C0o^9ó6°ÌËô’ˆ½L¼1óþ(³¯/Æ¿7³$3óút©¿Ï†ÂšÇC0ÿø£‚ùGÊâÜ{ÿøTnŸ–èÚ*ƒ®ž=,á Ê‚Ï:úõ±˜dÝzX¢WÚ¢WKôjÕ†>ˆÿVY\0/ &Má Kx‚£á ŽÞ OpŒOx‚²àçžà(ŽàhAø£Gà ↓²îp‡%|@Yàøã‡u–ˆ.¿^6±w…TYT.nRýÎì…*^K‚ùÑç̯Æ7­.,/\_óê¨ÁüêÞE,Æñs#ëÒw3ë¡Ö ­›šÚWÁüêæÖD¶Ï \¾òMîç….Xì’¨/K-z©/z©—6½ž•¼éõ è‹^ÀÑå×g‰Ø¯ï+±_Ÿk$b¿ÛÊÛ„Ä—E/{cÑËÞXÞ–¦˜x½Ô·½lÆ¢—¥½4-zYᢗ¥ÆérÑåÕQœ~iz?x^X‚y}lÆ¢÷E0?\å—¦÷ƒóM æG÷F"ö‹¨HÄ~a#ÁüøDtùÅaD—ŸÏZô‚¨¸­ü¬pͨè6½öéI0¯ÆSXz-üž+D"öªÐDìÛ÷J0¿eÑK~& –m}f –*~èåìV‚yrøWx æiâÝÃ]^&»4½éý°gµïý0U|èe, æÙ ÞÏ'Áü1qY!½¼ áµ$˜g!žmvy[D—wu„g‚kAßîqúÚ辤bÏGY®ñ×r§7·¼e.¢Ë³6nÈI0/þpÅxCû&˜?e,G{#Ë£ó§ŒIö ¬ÉâÍ+™ÌŸÚÌÒ´šÝ°r(2±Wm<‚Ш¾D—gƒ¤A¥³ÿÖœZÜùÍé·™àò{–d^tS¡R-ƒûjß‹T…nR­PûX&»Œ[ËëÃ×"Í<[nêüò°,Õ¬~ðKD˜7Æ,µ<,õþåaá¾Ý³Ûok~À^Z‹2.×ì–¦5»¥t¿f·4­ù•ö5»}ÑÌÿÍ·5?àq÷{vû}Í^4ózõÞ5?À7'ͼJQÔ]óŠÕ÷Úìûš°…k~ÀfÌüÀTâ{~ÙØ»ñ|å{v+ͼ^™=Ó+ͼJñ½îÙmdc¯R¦ê7½®~ßk³ï‹^öᢗ-¼g·aÞïÅ ×ÚŒÝ;ôRðlì×+G„ù5^a~5Cšù¶4ó2q£kÑ‹÷’f~|•?î]0iæÒ̯ ×Ú ŽHšùUjÑËÆ/zyZaÑËRC¯VXô²—ï¥é¦7"ÌÏñZôÑ‹^6~è5Ønz#Âü$ê^›I3?Ešù@D˜· .%²±·‰êçí{zMh½é•f~x¶ˆ0?ßëö½¿/ßK)xÑKÁÍ€hdcÏf|põ Ík3Ч¿ÏÌÁnŸµ™Ýî>k3&–fžÍ°àóY›ÙMòM/$`žõ1Õ°$óçI÷ÝèZŠ1iæÕ<Ê»3ã5=vf¼v#u£kÂ}“Ë¥­4ó§¼y^šùc±ØïÆÖô練õŸ -¾I3ÏÀÅD6öê ÙØÓÂcï’Ì«SñqD6ö*ÄCëIðÍ+uÈŸ«YšV‹üX‰]äc¿¾™2¿èšÅ#ê›UJ̳‡Ø†2¯¡‡¤˜?…¸rŒtìU†Zú"|K0¯6PâžµÏÀH1O")ü6«¦à6«\¨GŒyáî"ƼžÃÆ5«–+¾Y5»Y}‰1¯ð}Æ·ZÒüaÕ†o|+÷‡$š¾&¢Ì{,ØŒÁ•WgDJöÆ•tï{E”y•2=}ö½ìœÂËJ¢yýŸ¨;{eæ‰æYŠGC$š—‰÷@Ëí ˆ2¯R €‘h^ÿÂѼ¾| ‘’½Ç ûRÍŸR–èܲୢoËÂ]ƒ±ÀkGϵEÇ-oPLï£[ËBw>'zµÊÀÃ…7( ¾ðG™ðG™øsïÞàxŸp‡%|Áa Wpôhx‚£ÕዉáÊ‚¾7PŒvx£¶pe;áÊBµ2|ÀÑ©æe¢hÚ˜ºvÛœº4> *Ä¡0ó«…ª 7«~‰vÃê2|ø€ë½Wo|óú‰¿ÖÈÉ^ò¯9ÙÛDÉ¿‘µ°Ê¸¾ü,ÕÐz©¦ö'bq}ùٽͭ—ZàRÉ^ä‚5©æ×(/vYjÁËãMï'‹q}y? ¥"'ûvädo¥ñåeñ¥H5¯÷â³½T²½”«—§åÿávµRÍôe9[6cy[ŠÁ·»ý²ü-[¸.Ÿµ<.üÆ—årYᢗµèå³–×Å_DªyuM‹^ŽòÐˬ֑“½¿J°è¥ä¿|/ÕåE/åêE/ž%Õüx/©æÇ¿AªùñsP˜ùeZôRB^¾—-\¾—ïµ|/z>r²_ÝûÛø^Þ&Õ<oZûø^»ˆ|ù^6~ùÞÕ<{žâ`\_^ƒò¦šg)»–}è5~èåÞ‚Tó¬Ð¤ñ¦÷âݛÞkFÓK­O¢ùó(SC›]K»Þèš&ÝäšæÙàšNÚÜZ$yckŠpSkW®7´Ì·ùØ‹#Êùƒ,ÕÝ!Fzy¾yéå…E†V|_Væ"ˆdìY™uA;Z»:½IeH\\žµÙ 4§v=ycúrqyÕÆ…LCúrqy•߈dìeÁG—¢T1Q.˜Qû$—×׊á–\ž&~\ßšRÛVˆy¹k6caç>snç*Èü©ƒ.½<Ù¢œ?3»(}ùV¾ðøVËþ¾|+KoµRã[¹Ç"½¼~B”·×Ì€ÏZ3 ð3¯µÈô5¯}Ñ˯f¬y-Ÿ5¾•>/2²÷{qøï™AddïRÔ)×̽ñ}Íkñ^ßgf`jô½*SŒyõuå53ÀxI/?~ÉßÇËò'ô}Í Øøµ*ã³½Tˆ½ì¨›Þï‹^¾ò¢ß—b̯ŽZô²…‹^¶p­ÊhºWeŠ1¯f¶ï7½Ò˯R‹^öÆ¢&éåU!CŒ½4-zYáš×¢7¤—׳(ßóZéåÇ+K/¿ï)H/¯R”ï=éåW©E/ßkÑK {ÑKÓš×bÊûcÑËg-z)ö/zùÊ‹^pøcÑËfÜôþXôò½½dcÑKÓ¢—Zï½*“^~°!½ü JzùeZôRe_ô¢çc~ü¤¤—_¦E/+¼é•^~x¶ßïUÙï‹^ªì‹^šfOÁ’µÏžgîÒËŸ~0m”bÌÓdW”ÏF®G˜U™)ß³*³R³*£ê×—W3¬Â¦—ógéåOÛßôòÇò¦—çûÚmÚ.E…˜?…xk’"Ì«ûðÕÅÝåUˆrpsK•OjùSéè³,Ãwٳ̛Z^`âVóA–µ5±¼XjyÖÆ7m^M{o\m†V #oZmV^š$±¼Æ½½Xå1ˆfÕdþF•ëp‰åõ$Š?3ÇåQ‘Ÿ³8ãQƒÙºµˆðv³¡»ýÇ”^ž­àW&Á¼ÇŸE!æW©Yž™ì;Ë3Þç Åüý;‹Ìo3n0/ þnRÌß¿g)æùRVk^ízîæ•1¿šWžqެìõ>ìºÙGÀ£óêošÆ¹ò2 æ5<×0Àò²‚_ã\­Âµå…i㯅,Mƒ,E"-{µÐЗ܀~’`žïeZú0Ë %˜g)–óã{S”yõ!¾ æ—i¶^î0ï¡Ä·-Á<+äG Á<ᤔ>ØÎC/ÿÓÕËÿtêåeáúǧ²pch,\x…븱pJ{ZÂm‹^- ¿‚±àwzôAø‚² má Kø‚þàè·ðG™ðGÛÂožàèpG™ðÅ‚Zà ”£^ ,p¼áê9èëðU„„ (Ë‹^ž&þ›¤——‰Zo¸€«T¸€ã”–½L”KÔ‰Òl¸€«T³ê²}Ãúª—W…ø(-{™Ð¹Ÿ›W o`=yë-ld½…ͬhh=(¼©µpéå5^pŸ›Û×(ó ›!×°tíô@³ëÏZð²…‹^ÊÛñ;Ø^~%½ü2-zÁ†ôò£7e~U¸è¥Ö»è¥®¼è¥ ?°«7½_†^Ê—¡—3éå6q‡ùÙŒ¡—{³ÒË«BêÊ‹^*úC/×›Š2*´«Y¥——‰}xûÝ/ËñrP½lüÐË}`E™×+ƒ^E™ŽHQæe¢ä¼è¥Ö»èå³½ø¾¤—WGÁé)ÊüèÞ¸Ãü,5ôZä÷ÐkòöÐû––½šÁÞX“6~ÑËÞzí®ïEï‹^žƒÂ ½ôòl!ïCŽ;ÌËÄ|ÚŠ2ÏRöÊM/SÞI.¯Bœ<6¼œÎ+)ûSˆúi\`žË ßäRFW€y5*Âü1YJíæÖ7¶vkvSË“_ÇåRŽfÙ¶A–*öLmAŠÒ±ç«RÂm^©o·¯¥aXe›gb˧4©\kI,Ï!¥Âß^–{2qsùU¦)5á»!%Ù_›Ñ·Øò¤€ïÓˆ¾%c?Ê4¢Ö¶F”{}Š-j³$äMè76%–¿Ã+­<1xÓÊç$­<÷/¿-ÏJ0¥›‘V^Í`©õåþò*õ¦–W á픑½LÀUÑåeâZt-ĨE¯•MkVK©æŒ~ú¶clášÕRc_Ë1>k\+cß¾5·÷Û¬È,ñ“ûÁ­IE—6\µ{%¼Š.¯R0ïyÔòc”]~™½T_׬–ÍX³ZJýk^×,µü êûÚB`…kMÆ ½/jy>ËÎܳZE—ŸƒÔò2QÏ_ô¾¨åUŠï5ôZLú¢—Ç Ö¬–ÏZ³Z¶fµ4Ý qy¿2eÏ5«¥î½fµfïE—ã%µ¼LlÆÐk¹º‡^3-z)±®55ÛE/M÷šLjyÀRkM† É5«¥}Ïj•‘½:Š¥½lÆ¢—½q¯É]~|ËRËËÄ÷ºé•Z~5~ÑËΛ^ed?š¡èòr°è ©åe½R˯R÷šLÙŽRtùám¤–~CjùA”¢Ë¯ gæ@¥Njy½ÅíµKÓZ“Á¥(º<+ä%FŠ.O)º3&êŠûË«”éÞ³£ð¦–ç³,ûÌxñ ýÞðZôûÌxYf¦ &[6ºL¬àò§u–ª½Áµ›»×Œ—²ssËŤұ?b€­ÄòÇÂ\\ -?,Í쟩¯É®‹åÉ9µÛq·”Ä›×?SŽn\yÞB¡åÏsìX@Ãj¡àíiyªòç¬Ëð“Vž`Y²ó!•7·){áÈWj?Ëõ¾Äò|ÐJÆ^_Û73\ bŸýÌŠZþÔgùÉ›TËB>.–k))åõ¶T©Õv_\_Þ¥(´ÎâŒÁ½’ʳ“¨ ­T–›V†>H*Ï“gšVÆ üjZ_.0?¾$IåÏs, ý¤URy¶òú8V‹Ê_Ž•o4¸RÊ•R^|•Y’ñã”Rž¥x¹BËÓij9RÊÓô¦”§‰?')åiz¹À¼L\ãI)¯fPzféü¥”g)Æ=J)χêu#KחרƒXÉäÕí”mY~‡Š+ ­3ÉÿüGeò?§LÎ÷OeÁ'{X¢_ËÂ=Ó½zÔ½zX¢WË“E§%:õh[têa ?P ~ ,€!þZG«ÃÏ ?pXÂo~à°„8j /PŒv8£Lø€£L¸€£áŽÚÂý?¬£Œ’±?&—xã—U&¼‘’±—‰ zsêÂp|ÿÇð)¬üzV£êqÏͪËÉá® ›Vo\=h»yu‰·õRM¬—jd½ͬ›Z¯¦ÖM­7£¹õ>lp=j¿ÉõAit½7š]75¼®ñ7½ö,…•ç(sá"™¼ ¨¹èÅïáËÐkrrÓky$“_ÍXôR¬]ô²C¯5cè5Ó¢—JóÐkZø¢îV2ùõ^C¯iáCï›L^ƒÂW^ôò€Â¢—¦E/¿Ü.K ½¦j/zy¬aÑËg-zù«_¾—:îò½/ÉäGG)¬üðl +/çC¯ÅX/ßËf ½&'½¦¼èóJÆ^-¤à½èe©E/ûpM¨…/ßËg ½LùôÛ=_Ðíåùÿb¼²dò4q÷B2ùcb¬„Tò,ô¦’g!¾p³Kµù·F×®]or©&J$žcj|skqã­37µ¦é6´Ͻ˜E^ò™.PÕžy-â™×R£n^Ñ¡ (O$)é6¬ÌQÿµYåö‰ÊsLÙèEª'`Ï2|æ”qÉŸ27Þ”ZÜxCúvcyÖÆ4£kÞþõM$'^ ØÓ¾nD-i{#úvcy¶šRh#jšf#Ê>Fžmcm³ôâ—¥xò: (^n(H#Oä,¼z–_<• <ŸÅU¼Ê/Ó¸UFvèÖòj—”3)°.·J™yMiiZSZ*ëkJËfÜ“iäÙx ¿§´ßfJk¥Ö”–̤ÀŽ;̤ÀTüµã±€5¥Å_Kå5(TOï)­"Ê«Uáå`Yá=)PDyUHéwÑKÓ=¥UDy_yM hºéUöj!K-z)ýÞ“E”W…,µèå³½Û @TØŸ -{ü,Éxæ¢Ù¥¬xò§6Ê8Ê¿ž g¸ÀÏ™ðRQ·k‘Ù#6˜ <à¾å_ZÁɰDòü(¬7¶&*7µœ+¢<ûªí0Ëç̺ _¢ò¯?µñb,E”?ŠmÊ¿þX•*‘{ L¸ ™¾×âg¢Àuštò|eK¤Þô~°ç•~=K™¬ÝôrWæ·†×R›7»‹O)דx>§µñiDߢȟÚLToFߢÈß Qyòâ¿6£v«ù0 7ýµ}»¡<[Í>hF-H·5•¹å’UyöµÅ—Ïd–®B yrÅ“1Š"O“‰±‹SÀðmM¨Ó®éK­ézIw”W ©Ó®é5ü5`…k:À ×t€¦5`…k:@S{U;)…üêÞ™ð\—ò*E &³À=Pyu/¾å\¿L3àP y•¢Ö}Of¥*мLÜXô¢ç¥Ýû}Mf1Êʹ~=k-Åðñ+ŠüzåE/~kRÈ«+\ô¾(äù™[þÚ=à³ÖöMkÿ€ãµèe ×d–-\“Yêêk)F|m"p(×.XÛ/ yuGy-Å^òƒy)䢺£üJE‘ã%…üh¡òªðE!¿J-z©¸.zùʋޅüø¤_¯¼è¥&¼¶¾^òë•—ïe —ï¥iÑK­{ÑK­û^Š)мZæuGù5Ê‹^öü¢—½qû^)äù,‹ež¥§HRȳgRÈ«BÊÅ÷6˜¢ÈWVùeZ¾—ºú¢ƒ¢(òƒÃß½,µ|/•ÿE/Õø¦×®ÉSùÕóã{­çÇ÷r¾/…<+d¢)E‘—‰ŸÝ[à*ŠôÒùIÏž·R‹^>kÑKyÑ‹¯_)Ök”iZôҴ襾<ûL)¬ðñü–ùSŠõ2½ˆãebÏÏÞß½”¹ïyì÷E/_ù^…éBòêCöÆ=ýÞôÚ¹r¥X?:J’— ÌK¯fP‡½WaÇž—8^&niÝ{ºü*Õô~p/Náã‡ûRøxUH‰vÑK9xÑËÆ/z)=/ßË —ïe©µ ã ,ßËSË÷Ò´è¥|¿è¥éÞC8~õáMïå{ñ9üXô²ñC¯1½T÷$Žg )+IO“eó^«0°!qüàPâx™Ðx¥X?>¥X?>=‰ãW©E/8TøøñÁ*|üjü¬ÅxS‰Äñ*EI}|¯ Ìã{™”JâxVø–b=M\{*|ü¯Ù³dé3ße?5¼Ô/¥?O²HúF—«OEeÜOøÂ=þ²déÍ­Ý@ÝØšìÚÔr¥‹çs¨³7³<„.]ü)cAس&£öÜÀrÂ-]ge”—T;Ð^–såWžc9Ù›Rþ¦”]=Ë°Õ ©©ù)Çtü+÷uyRÊahJMˆmH¹"M¼¾HÊI˹ÂÇ+l/há>7µ¯’øó,Ò‡[먗S‰Ï‹\°öyÐ5ù}صñZð¾HâÇ· Iü@T’øUjèµ³J‹^Êžñ»žÕôÚN’‚Æ«ç1Ê_š^/W) ³‹^Êïñ ;FYAãe¢àÜôz3š^×½›^/Õôº©éõèúE/øÒN×›Ñôz…M¯¿$ž½a'šÞOv@ éõ$ÿC/O×J?z^’øÁ†’«'l<Þ®äêi²ðï¦×’h7¼–á»ÙeH„ôðçA–Æ»ÉµÐæ—÷VKj£”žN†ÆçR*’ ž½`ÑçM­% —kÙÌZ®Ç%‰g7À#(£z6Ÿ¶$ñÇB¨„êYH4¯\(^ü)Ã= Å‹?¦ŒÓ¥ã…ë~Å‹§®EñâÉ#ä!•–Õb¥›Sæ·’$ž-`m)w'¥ˆç›¢ß¾6¦&Æ6¦–}fͨÂxUöh3JÞ/žmÿGñâÅÖ-ͨ¥toF鮾6£vïy3ÊÑ–$ž_#ÌfÔìåK©ôÎL€ÁL’ÄŸ'}Л*^kí°góÀ”ùE/;ê^…}¿Wa’Ä‹yV¸Va<°æ±,µæ±”s×<–º÷ÚC t<ôr'I¼°¡Äºè¥iÑK±tù^6cÑË ‡^»«|ù^>kÑKaö¦÷Ç¢—º÷¢—΄–MÝ:~|•ʨ^&>kÑËŽZ¾—£¼ValáZ…Ñ´|/+\ô²7½’Ä÷¥xñäŒêÇßA’x™À†$ñ4qW]Õ¯ oz%‰W A”$ñ2QU^;`øWJ¿¿|/KݾW’øõ^³#‡’Ä«ßkí€Ñ4;`Lœ+I<+äáXÅ‹§‰«Iâi²dëã{¹äW¼øSÊÚ^†«JÏ'qƦxñÇd/ÕèÚvüìÝÚMÓM. )\üy—á?‡[ ®n-SölP÷uþ RÅŸ6p,tëx¶8+¡zö7ÕÝFÖî0bá*”P=[ÀV7¯‹g«yD¡a¥w—2þ”±\ï·W•0ž}jØgFkØÇ¯Zþú™¼]9žÏâ§.a / _Ÿ…—™½p) ?ÆKÁáEÕÎE/˜—~p¨àðzzC™ÓËÄÞôênñó)8¼*d㽓—ï¥H~Ó+%¼žõ¢„_Ý;ÛÌÒÍ+<ü¯E-h’~½òÍ­tð«{¹XVI¯gáS”^&ŽrÃë±íM¯«–M¯K“íc]mz]µlz=9÷r³àðË¢½¡ððzåü…‡— C©;Å>”~ô¼tðã«ÔâÇ÷%üª°éõAiz=ŒºéõkÔ½øR~uTÓëÏjz_Ãï ½¯E/eÑ æžÏúDÉr|/ov‘žƒ‚V(:ü±Pä’þX¸“žm 2ÛäÒÐÜR9oŸK9µ™¥dÛÄrÕªÀð§]v yå‘IÅ…gÏ`t‰øcaËšUž6hRY¢9å3šÒñ;›‰{ü+•ô”Íjçʾo8Ù¬™¼¨ßÙ.ËL ^äï÷.–þ¼Ìׯm–þcÌ"M%Ot)ü)c:êLØèæÒã“‘Àó9”Ÿ›L»½¼Éä¾›îjã‘l àÅ¢M“à›Mã–ž= _#<¿s¾O»PK¶Þ|Z«›O.C¥€?ϱDðM¨B#jIÐÛy¾¥GÏÅûHÏåb¨e ”=᥼(‹»¦Š¯ñã 7ª\Òêîðª~áÛúíS°¾WYRÀ«Böí^gI¯Rì¨õÛç{5²Ök­Åf¬ß>_yýöù¬ÆÖÇkýö9^kÁEÓ¬¸ìÊù{É%<;ŠÛ‡ßׯuØ¡×J ½ü†¥€×³(›Î¤•WzôJ6cèåþ½bÁëYTo‡^&d’^¥(½Vjè5ÓÐk-\K. ªôèÕ ñkÉEI}Ñ •½úïµ–\/ øñ-K/Ó‹~|zRÀ/ÓÚ/`…‹^JÏkÀêí¢½¡»Ã¢¤€§‰z‡ð4q‚(>n÷-=z> _¸BÁóm-h¸Áµ+¡‡[^¬éU€ùÙÜšbÜØ2 •ð§:®p þX¸Â‘že@³ðÇò¦€?‹¢o`M·ŸuÞÆ•Ü)<9ÁG¨›Ãsˆà¬tsøc1m¼QeÔèÏ&•x+Cz¶€ã³H¥iHe—6©v‚bf¬­Ae÷HÏÆ½à9¨ð¯º4<Ë€m à‰UäE)zû×L ,x¼15å·1¥Ø©(ðü>±yã[MŸoP-`¹]+Ö¥áÙCøÍHÿN€àM~ÍÞ{u6X[ƒjùíT;Ø0>õMÿÎâ6¦ÁÓdG†UnñIÏR#>ÓYNà”!=KÙQ€ñ«ý¼c‘DZÚÅà3¥ï’~4Cxš,yú0Ë{×%€ç×qT‚ôêx©KÃËD­½¡åE‚瓆¥ÿ¨€ÿéïþ þñþï?~ðÜÖ—¶p[´-\¾} ¼Á·³¶ïcáqͱÀü>ϡߛ2üÇÂQ ûÏg«ÿËÙ¶ÿ:´í¿-øïg«ÿÇÙ¶ Ðú—³¶ÿyöÛÿ &šÿ{,ŸÿsÖö¯cÿ6ôõ¿£ x¡hbëPj¦ßº÷tCï ©ù¨VáJ—òùÇ<Ëðz–ÅYÿœRøÄBïR‡ý§³ ?¯L³ Òûsþ ~}é ÞÍ ¤¾˜e… ZöÆMm(àÝ –jn]ôp-wúËËPÀûY|¯a×J ¼–V}èµËŸ‡^3-z)e½<{w†÷ °Ô¢Q(à]ŠèÐK‡ Ò»uó¡×J ½¸=ôšiy[¶ðv·¡€_`G$xšüAÓ릦×3Éÿ?ÊÎ,g˜\G®[ê¯êºo7`4ðÏC{ží…xý&‘d>‘|¨gBJ¥t’))DJôº`-zý(Ùx]»þ}Ñ‹(¤«ñ4-z9(‹^½þ^Ë÷Rн–›|M ¨Š]»YZèš4>äRpAE‚÷ÐÓ"l©Í´h‡Y–dñž, ƒ+6´²£+uëq´ì™ñ³lò¸Y–NMïÎdAÊ& Q› ÔÍ…'KŒkå« › ™xHHàý&T &§ð¡W»<|‰÷¼?QZD¦kàUäoT†E&"…^eLÏ™VFh2uJhàU›iíb“¡,ÞeØ×‚Óò”eN.¿ N «—µÛØEç‹^­¶LöâÓ2² à0ò¡Wm/Qàm¡ª*D¹¨+«ŒÉ’óãgÊüÐÀlfk(p™\o“µbýøñº¡w)´ \&àQà2Q‰]ÓVª¾kÚ ¿ðm<©uÔr¥lÆš¶Òt/µ¾­i+%ë5m¥Ð=ÓVNƒ" üì{½õmM[ù¬õãgG­¿kàjßkM[ÑQ¡«µâõ秦:ô2~íû½9¸¥ê»¦­xåÐÀU þ7ò¡ËÄRkÚÊg­Ez>4pUÈW^ô²½4-zÙ½‹^jûC/x߇^Õ‡^;}°èe ½ìE/K­íš½Té½|åµcÀŽZÓV×À/" üúB?M‹^>ë^t…~øõ}EøvhàmâO:4p™(Ž–mqè5Ízè¥ôñcèåß0Dp5ÿ”ÁËd˧ȇ.5ëµèbϯE_ymÐ$zmí"øÙ Ñk{qE¸JÁ¥D>ô³BÑû&‚‹ |D~õaˆàm²$Ú¢÷HE¯ÏŽ(pUHé\ôz…¢×+½–Â,¢Àõ^å¸"\&*µ¢×ûPôl!‚«{©ª/zù¬ñ½/QàúôØQã{_¢À»e«Ÿ¢×îô×Ë$&?ÇõþÁךONˆÝ—|èÝ<æ°‰8pµ_k\^&»Ö[ärBqà]†Êçx]ÆÐ†Þ…0P¡—ÅîÛµ¦ ZºÕÐÀ«6n߆^þUC/‹e°vƒ¹x5u\¸R5‹(ðn;N°šÚ/OË•ahàÝ£À'¢À»Gi™uA¨¦é‹S»-~fvPBœZ˜¾\,7J#z¿õUQj¥(µ›®E)Ï3†~=g ¥Ö>3uŽðþº¸ŒTèÇ×x£à¸>V Ð3/0á\ ò Ihà 7ßI Z¬¹@%öqKø]Ä€·…o$P_4ðトðîþCWñ Âr©”‡U;Ã0³Y:ÕÀûYT¬#z›¸Ôð6Y>ñ™ÍòBòˆïR<Ô¸šõQHà2¡7"º*¤d=ÌòË ¼Ç‘ºëLf™`3‚À{ ©ùÏž×øáK¸€£¶ðG_§Þ&¬"úY*<@—¢Š¼8ÅÉл¯Ü‰;ÂÛÄ%aJàõ,K5 MTvÔ‰S²”ÀËÄÝàOƒ+§D)÷+óÁkêøk²VJ̺,=Ðr7&’¡«7(œ¶vÂàæ6‚ÀO6†\ú¶”À!‚ÀÏ ^ë¡—}ÉÐ/¢âŽp™(ú½ %ðfƒâ袗êøÐk-z¹¡‘x? —‰rûòµláíl#\=ÿ"_ÍXôÂw¦ÞŸ+Ëó1Ÿ‡^^ûyÑKyÑ oÉÐÏ>z)j¤~¸¯ÏC/ç韽”åzÙ¡—óñ¸#¼šÁ€ˆ/‹Ž‹]æŠp}þP`E.UÓá–⨰åüDÐRh²¬JÀ¢g"\cçú÷3>ÔÒåi)%©,"P)2 SöÊ@Êó‰Ã(å÷…¨ËßÏ»p%Ð{ÙeÃç‹Þ<Ž×UŒãµm¡k)«ÇïRUO¼ü®¥ŸY³X¤þ”âVMêàÅ"—Å­åî¶V›¨5ZÐr1uð§o:x}ÀT”E¬iôãn©xˆW;t \í~vÑJ.uðÂKçÔÁk„,a½XµbÕ¤x¡j$RI~$CïÆQp©Æ/P-ìVœ¾éàïðD,xE†ÔÁŸ2ü¾~ RNØ"¼Ê˜Þ>[ Ýž‰-ò§þ´›šq#x[¨'Ï´–I"z8'!©ƒÜ@8bÁû“¤h,Pím*dêàÕ«ø[ü¯J×—‚«Ý˜r¥þŽw á…÷K2t™XßLh™Ë#’¡w);E0~õïì¤ñ«ì¥«…oBx™,OúÚL ¤=Ž•ÇnR¯ í¾ðYŽñˆQÄ‚w©?)wµtý Þ¥èXR ¯ágÛgãk,PÂÿø«Jøu-8P‹¿VY¸†¾-‹EÎLÔ=ÛµqMuÖýz<'ºµ- )zµ-<ØqZ¢S» Æ/\A[ðÁ‡'h þá úMñÙ„'8Ê„'h Ux‚¶ GÃ<ÛÁGp´:üÀÑ;áŽÄëèëðÇs tÛ0>Ạz'\ÀaI%¼«£À;”Ú Ôƒ©¥òÐcDi}@åÄ"•ð.R ?:6Ò¡·é-üèÀT¯ WºÑT»…è÷ o%è!ÖdüA–ú@\ ~Ž×@kõ¢öƒÓ ¯rýi¸5 zÀµ“ C.ÏI¥^ÏâÁÞT»£ÛÀË åOCï›ÞÏ¢T;ôšÜ½è…ƒI%¼ÙxQ°3¼M¬pèµ;ͽ”OÇÕÚ+/z_”ð«ñ‹^Êø‹^6ãö·©„ŸC\ ~š½|ÖÐK¢>½;•ðƒ¨ÏC¯õüÐË¥u*áQC/ÁŽkÁ»§)‘½Lœ}¥þ<ŠA˜)„?»x{Ð¥J;äºþTFQ{¨¥®,h)IJ”µE, â•‚³|-—ûqxwŒ‚÷àÀ"RíP@¥—ý"NIÕaÊ5f\^M#¤_)ý×1Ê ©…?ïcÓ@Ê£¸¼y¢/>íM…'“_D§…/˜Ld@øÓjS-E'gÿþ”±Pñ5)€/>¹J-¼jÓ©…—…­@i¡/·‚÷›R‰¢¾,wjɽÅ(wÒ2 ¼¾wªñb”Iñ")úAb$Eo ¾ë /ÃS bÔž#FMñ£|/F™±"®ïp䯅2©ÚWAj2´ ¥GΈðrvû÷øPbšbxÿN^Äð6QðGj׉¯É+>× ¯ IJ†„—‰3ï /Àí*ìåPñ´è*E!W¼º =ÀrHR ïfPä²&\¤~•ZK.ªÐ¢Ö$ˆ ¿*·7—!áW)‘ëפ¯…»ÞB±û*†w3À»–^ÔB×5Þ5ye)yY{¯ïfŒŸ5M~mpÓaÑË÷º'¯)†7ó¬pÑ –bx7žõ¢—¦E/+\K/êÿ÷~A\ ~iÑe¢N¾¶ 8^‹^6þ¦7Åðî |摽M ØI1¼K±‹^À–bøÑó)†C™bx›ð^)†—‰ÂGŠá‡?L1¼M€-Åð6Qþ]ôbP2$¼KQxzRyÑÕx¾×Úèb.z)×ÏÒ‹ÿ” ¿zc-½x4`ÑËf,z_ÄðÃU¦~°èå ¬-/6cíyÑ´|/;jÑËQ¾}oäE¿F9CÂ÷Êð61ðwù^J¨‹^*Þ7½)†ŸCŠámÂ(ÿzùeHøñ9dHx›Øø{›6ò¢Ÿ¥½ì¨E/{cÑ #/z?‹s)†Wã'™bx™ÞÄð2ñ€zªáe¢n“1ámâ©ÑË݆¸¼ YÓgÎûÏ Ì¦×%]±k±»ãxy§qªáÝr*B×ÔQ‘k¡ß—ë฼D¿‰ÑËò’½{.7ƒÂŸf¿‰áÅ„í™.à눫Á«6’òKÀ2¹U…?Ïáh$Fï7¥€.Z߂ŸÚì@À°Ê¹VdFï±³+ÚŪ…ÓÏꌭ©\ó§~àwƒëSÂÔ"㫇ðAGnô£ï~‹TS2ªåê§ÜßH=üiE³Ô˪ÔâÔ´úq¯Û<î•lêáõ$êøò®¦ãsåXÊáõJÔÚf«ëE?ÊU»E{¶^äðªÏT-ÎýF5åðö¸ð@¿—[¥ø?“žÅO9¼*d8@Æ…—‰¾&ãÂSÊáe⹊ÏÊí½Œ ïfÀßd\xO4ͤ€ñ^¥¸™™rx›@YÆ…÷³hj-š|vg1È‘½yž!þç_•Ãÿ¬Àp ¶…{Բؕ‰SÆåðªÍŽ„Omœ*Ž… Ó½ÚÏ!ÏcáP´Å Âtm@%<Áñ>á ºßP&~ZmAï„'8,á ú9`!fXmAï„'h z4ÁQ[ø¶ w –ðm; 'p¼Oø€ƒªpG«SLv 7û…ípGÃ37z›0FÞ&ÊÆáº˜?§Þ&t_Êá×{-XYa¸€«Tø€6±Ôâ•ÍXÀ²£†X;0Èò'žrø5( Z˜á=þ›[.äS¯Rv¤`À¥ðñiÈ5Ó k¦a×L¯™†^¶0ÃÆg`x›ÐŸ‡^þ,S¿J ½”¨R¯R&åŠÞÓP‡^+5ôš<ôZ¼óÐk¥†^küÐk¡ëC¯EI½6(ËãÂ{f`x#ÊsC¯_z핇^‚røáR20¼›ÁÃC¯…®½ŒúL9ü©kÀTà Ïõ¦þXÞ«åh]\ ÞÏ,nYBÔÂã~³ðÒ™½ZŒgˆW>cùZ¬|ˆPåüg@åSÄ)W¬q-xµØNˆRzßÔŸ·4õzåä1Åð↑©†?&®šS / ßuü«=i5“å ñ‹åµ/âÓÞV|rîøU|²ïR/B¨·ŠO„N=¼hgÊ“$™½¾üVS¯%©‡?Þ±áÕj–¥v&@˜š¶-NÍ2œ²ÕâÔÚ&N-2[œZ²sqje„©]m.JíME©E‹RF•Ä%áÝ×TñŨÅî‹Q‹hŸ3S¦^ÃÍR^_eÙ¡”Êöüÿ_® ï'ÑýgŠôj„¥Ÿÿ¿…y©Vjþÿü…¦ÞÏ¢|=ÿf¯Ëàð.ÅηjQôóÿçvM\~V¸\ìÞ{Å•zxµÐ‚Þï5×7Qk’rêá]!;jýÿi¸®Ø‹\–ÐuÓ°kûkíE}u­½¨^ Þ?x ?ƒÃË+òB¦Ho|\‡·‰õ¢—rèZ{±”èµ#qM¸žEe{­½ø,Ñ늽èµñJ=üê Ñ뮵›1ôÚnʽazøñé¥~0ŸÁám¢,¿6 ¨¢ß»©‡ŸCêá¢×6i¾‹^ÏZ=k/:½ÔÃW™zx›^ôð6QD]¾—¥†^ÎzR?%S¤wGqglÑû¢‡w²Ë÷RR^;øÌ38üø`3Ez·Êö¢—ÍXôRç_ôÒ$z €‹^6cÑËŽZ¾—-\ô²ÂE/ûpÖ^Ì{’)Ò»£ø¬å{©^.z1(©‡w…x¯ÔÃAÉàðãÓËàðã3Ïémâ>ìÐkáË‹^¶p­Å()/ß‹éAêáÇçðsÑËRkß‹ÏZôÒ$zí7šÁáWo¬åø^ž^N=¼*|¹'\&JÑã{¹$I=¼*4]ôr†•zøSÈ.v™"s¤÷“¨?Μ¾+n ?ž”rxµŠó€Ë6dløSè-6ü±¼Å†?þ>S¯ÚàÞ3GúcaÐmÊáÕl¾êì Ð2³ ÁãnÙ¥âÕÄuáÊC¿)‡WÛøœÕâ¼+·²28¼º<¦^(˜R¾¶8®BÕòš‹T»–]¤še‘Ê ©v;ôxYžÏHAü}Ì3@¼:œd€x±E‹Hå˦ þNPæI¯PƒR)t{åP¤~ŒÒo±Ê5`Ƈ×ág˜zxUÇÛ2>¼^‰ÿÀÊW×Ê  ^m î-XMTÇjÁõC+ç"Þ]Ä–/ÇÊC3-°¼ðkK–D °t^©ˆW3x@)ñ6¡S/Ϥ"^&vT*âeâ¦Oˆ· ¿´TÄ/ÓL xX+ñ*Å‹ç3@¼iÂç›âeâé”Ä ´)IüoUÿ[]Îýÿ?ÛÂß±€ÏèÛ*c[!S†+ë±ðÌåX8e9ÛÝÚ-à÷;e8¸cA„38j gд-|ÁÑoá Ú‚~ _е†pÇø„+h ú-\A[Ð×á K8‚Çb Žð]m 7p´ ¼@[ðц8Ê„8ʤ$~4.%ñ.Eq;|ÀUj8åâ%%ñŠIü¥”įf„¸L«iÑáºXÉ\éÝ ¾òÍkFˆw…”©±TË…¬F³n´v+TJâ=(í…­—·–n,s¥w…ì ‘k›T!Þ¥Øb×K ^o†èµÆ§$~p˜’øÁ|JâÇ(§$~ úyèµàñëR êó¢#s¥f®ô«C/w°?½Ôå2WzUh ör·Ô‡‡^FÎñ«Çãš@<.—1±™+½[Ø2Büê¨E/åwÑûAG”’xcÃAYŽlæJ¯f0CWJâ‰G©S/ þŒ)‰W#ð  ¯¦”Ä %fq‹/ÿ‹¨¥+f_$ñ÷g ¯è´/ƒ+/Z_4ñç),1¤²ÃªEt‹S÷E˜Z öPÊ…\ˆWÿsE›¢x™¨Û¥(^oÄgˆøS†ˆ~™©=HˆòÔ|jâÕ‚#@M± \®¥&^µQÛ ¼¡*ó¥?eÌ"BMÛ¢O,FMa—[åUw©‰W ¨ÓŠRËÔ-Jy6é«\*ße¾ôz{Gœ2¿ÃWqjZµ85­ZœšE˜šE”Úà‚ô-_z9*.<©Y¤¦–‹Q+#F-ûú0Š(%ñúê,bZ~0÷@‰¿ø¯eÂôúì(–ÎÿŸ›B)‰w#XßpjÉÃ×ÿþ,CÄ«B~È)‰·‰ÏZÿ TJâ] î6CÄËd·¡ÏÿŸî)%ñ.E}þÿœ }Ïj¦ñ¬v `<«å˜ÿ¿‰ökÕÅW^ÿŠökÝ…Ué·õÿg÷®Ù+K­Ù+Çk± G‘ùÒ›(Êž÷ì5%ñ§” ˜¢×&Ñ)‰W)fLÈñ®-7Ë´¼5¼K±ñ¢×–/ßE¯›D¯ëÞ¢×åwÑë¥D¯ç¯í6þž½æ­áÇ›’øeZ³WXô²ç×Ú ~¿w Ro¢ø¬E/w‰½øÌSïQ¦L½Ö^4‰^Ò½0½4 ½œ eˆx·¥½Ô½×Ú‹ê뢗ÒñMo†ˆ=ŸùÒ¯>\ô²×Î[¸è6ykx?‹òûÚ9à³Öΰ½ÜB¼w¼2_úÕ‹^¶ðÞôÊ[ûB6c¶½¸Uýc|¯‰‘Ë÷Ré]ô›”Ä»{¹mºè¥é¦7%ñc¼2D¼Mláò½láÚ÷"~ôaJâ—if¦Ì/zÙŒå{©`¯}/šnß›!âÕBž{Îñ2qº›’x™(Hd¾ô6ásÈñ«ÔÐû&‰?¥˜,%ñ²°›†]ž|NI¼Á»òÚðÇdÙÅ…®Ïž§¨¿fÎË€ÏÔÄ«åÔ.SJeˆøQFØšî,j-hy6^4ñêj´³4c«‡ØMü©sÍe„x™˜<ï÷Ì ,}æü,2B¼*4Óš€ˆÔëV¤^&®iSoÅÏñ¬ë=» oâUáXÊñî(*Û3£¥K=¼J™iæ\¦^pÎðCÿ7Uÿ7gˆx[¸Mýñg[¸)$ #ù¢kç„3( ÏkEǶ…ÿè³Ñ­UÆ.(8ÛÚm,á Ú‚uLø‚ã}´¤„+h f£á Ž Wp” Wнƒ¶…'h ¾¦ðmÁ›†#h KøÃnàhAx¶¸Þ°>àhuêáG—¦Þ&¼ë§ðm¢æ>àèÕÔÃ.ÊŒéGO¤~™Âô³ÐŸV»c;|ÀÕƒ«©èëå`9#ø$b]Ù².‹YÛÉù$hýZqQk¹/3cúóÊ^JÜÚ^SêáW©E.Xè±k[yŸâÖÏ¢ö.z­7R?`K=¼+ÄW—zx›ð©¦~™½p1"~ šzxWø¢‡·‰Z®èõW^ôR°]ôR–_Þ–_î–-kÊö8\ˆdÆôî 6c\®iÔ‹^ž[N—Rùx]ØÇíòYêá‡ÈŒée²Üç¢×N^NáSª£Ö—rx=ˆŠ°È¥a¼.¥âqº´ˆÚ=üyþ‹^ Ã8|wKËx[*ãã‡UªÇB•I©¾ˆT ¨f§o‚xuÏ#ˆRKe/HªšjøS›‰õB”—7¥þ”áéóTà ø®L˜^ö¨ðär#Äë9·ÏÃë9(“âï-H1ü½2@¼ÊP<¯Jv9U¤RŸ vS ¯7åsD¨TË¡šD,Fyâ6Åðç9–^Œšä-FMŽ£&_Ë•¾ˆ×‡EÙ!™0ý1jGÄè›^}?õõd4¦ì £¬m&¯¦¡ R ¤M1üyÒóy¤Þ&Jž÷ä5åð*eiÑ©èò¼>ü*5Þ”›f)‡W);û¼~ÿ/rx ˆ]ν&¯Ô†ïÉkÊáÝx–Z“WÊüë÷ÏRkÅ…ïóÛ,¹,†}ýþùÊë÷OÓúýóÐÃüþM_Ÿß¿5c-¼à¿ Þ»}-½0QN9¼»—¦¡—³«”û¼_Fˆ7¬Pôú Ü¢×eã5ye…¢×uè5ye)Ñë¶œ­kùãm™Ò!#Äû•)¯¥UÞE/µáµô¢i-½ø^kòJÓZzQz_K/¶ð^z¥~°–^dc-½¨¯¯¥_y-½(CŽïåÕ !Þ-¤^»è}‘ÃÛé¡ñ™1½+¤^»|/eã{é•â ßë¦7¯ïRlü¢—"úÐËœŒ?èÍñëY‹^>kÑËÞXôÒ´èåxÝ™1½…ÍX;^4-z_äðì”Ã_[Fˆ^4åð6QQ^ô¢!~°‘rx›€hFˆ—‰£œâ]ŠÏZ¾—¦E/`ËŒé]!¥Ü{ã åðƒ¨”ÃîÍñÑ̘~õÆí{®ž¸·jS¯¡|»>¼LœX§^¦¿ñpÀÐËÃí)‡W)Ά3B¼L–g]¾×Ž ÌÄèÏ÷-D¼õ–2ý11ë`†ˆ—…ræÚ;º©‡?…,¨{ü®‰·"—k–Ôë:*ØâÖn¶Rºµ=.h­ĬéÔB–w%eÊôênx¬Ôà ×ï#^¸—_ÂÕB­gžköÐjùîE«]/XM*«Üjû5Óž3ÏœéÏ+Y®w¡Jù83¦÷GO•‚øc2ÅH¤r_&#Ä|V'R-dY¤rs>ñ‘ª®@5UW še¶ð¥ ^Ï¡ð>[] ;ñ~WÖ'T‰PFˆW§²„*}Ðo¡jAêƒ*…üA•ºlÞ ~µ[¨Úéˆñ«v1ûøUn…¥ ^¢oÈ”ée²Øñq¬ÜÕÉñ*ÅÑMA¼L¦zÏœö-@¼]õëÙO°Øñµñ…ÿ`ˆW…ì¨ÄÛ„ Cˆ· ¤§ ÞEÉ~ö˜D%q#‚ø?þUAüë qü¢wÛÂíhY8ZÑ·]†ëñ±àu£g» 'Á§%úµËà{‹nm ¿Þ³Ltêñ¦á ÊB® -ø9…+( õÊpmAÛÂtmèƒpG™pmvá K8‚¶€Çpå-@¼Ë máŽV‡h žN -.ˆ·.9ñ£RïRèÓÄËd‰¶‡S» :|À1|)ˆ_ÍÐ&™9Ó¯f ¬vÉyø€ë½W» {ñJwK1wËÆ/dYJ̾ˆ7L¬PÔºÜ,l]|_Ü‚ÁĤ3gz÷!¿Ð}Ä»0 ¼ÜÌ+Ä»ÔC½TQE¯õF â]!%à¡—ÿó ïRÔ¯‡^†z¥ ~0ŸâW…C/Ýç¡×4åE/µòE/_ù¦÷ó¢—¥†^KV¾<.",— Ø2@¼Áf©E/˜Ï+Ä«-ùÐk-z-¹¼èµòr¼–u^ìrÙzx½åË!—"¥ÀEetx½+záËPû¢‡?e(; YXÖ5¼BõZYD°RsTù."•ŠbêáÏ»PuȤéÅ"°…©S‹R+#H9ÍÎððç9Ö6!j©ñE(gæ©‡×Øp ħiÛÂÓí OÓêON6…§]-<íJiáùTÊŧ]Å->-…¶œ*O?dÂôút0y΄éí) ”‹PÓ¶…è[pøS›…s‹Q&éO=¼FŽj´µ m1jAèb”Žå«}ÓÃßIÌ Ä«m1jo*FÍ2sWªëbÔÀ£p©‡mFYfþþÜžÌ|é÷ SoF(Ø S¿ïyýý©lÏßß”Ò{îšzx¹lSJŪ_V½þþl†ª_ø-\MQÌððî ÑÖ²ï¤Þ¥Ø !ë¥ÖÜ•õúûã»I=¼;Цµä‚ÿÊŒéUÊÒßÿ¼Aü”™»Zîs±ëã%xmºþm&v ÷š»R)]ôâ#N=¼ÿ¢‡·‰®¹+5ÏE/•ÒE/Ÿµèe…¢×S•¯¹+[8öü÷E/[¸è¥iÑKÓ¢—Bô¢—»èu1Í]ñ}eÆôãÓËŒémb÷®-v¯èõ{Ñë‡nzóñÃUfxø[Þ ~|°©‡· ôfÆôãƒÍÄ/Ó¢÷E?¾å̘~µp­¼¨½/z1ïH=¼;Цå{ùÊ‹^–ZôR–¿éÍÄû½¸©·èe3½ìÃE/[¸|/¥òµo@e{í¼èáÝx–º}oêá‡gK=¼M|¯Eï‹~T˜zøQaêál©‡_Jêám¢²½|/z>ÃÃzSoeÞE/öE/…è{æzx3ÏR7½?½ìùE/_yö (G¤^¯ÌµE†‡—‰“äÔÃÛÄžz¹J=¼JQ5M=¼LozøcâöU†‡—…/<ìR)Ëððz’%2—çå,åð§ ÁC.µ­”ëyÔ¢\»¹ZàšL-níNkaË-­L™^íÆ'œ)Ó‹IèbÖ$âYœÁæ âOmv#º€} ¯€çfqÆŽ­o7ˆ×û°6±jòµPµó "ÕFA šL./kµ“eÒµ oÙ§Õ„mqÊ'eºôê*ºâ”Û5™.½›ÀBâÔäkajñ¸W{‡S>Hœr“'Õð§u\Âgºôv¬nödœ›ñáG‡§^¢'×jײ UË(/TyÊû·ü*L5¼gŸ[eB^iÜ*h¤^¥Èrx™èî2>¼L6kR@mx¦´d9ãÃûYpâÞÏÂg¾ô.E¥||«…ŽÏ¤À¹µlüL xÐ&åð/LÇ2_z›¨¯ Ü5þÃÿþWåð¿?r8_9z·,äèܲX‚Æ)Ã]±p‘) CÚ¢cë9vÞn,<)%‹ùÓZÏ!bá Ú‚÷ _ÐL¦Â´è…+h v¸‚~S—ÃÛ‚7 Wд-\ÁQ&<ÁQ&A· Ï ?Pî–…h À/ÐôA8£Lø€£LÊám‘rx·›"ú`ÊÿV^!Þbô2>üzVø€~EY¡êÁÒᮠô‰zmø€~_yáJ½vxµ ðÖRıœ|d”Wˆ?-ôôæñÿºÞk¨µöÁÖž5ÜrÎrøõ¬E.(Ì|éW÷»Œ{Êøð~½¶”ñáÝQ+697ÌØð¢€ª¥|*gš^m£>+ñ>©…¹`:cÃkXFÞÔ´}!ji×Åè[lxQ…Ñþ*Fmî.FËðue«Å(/Fü:Œ²Œ%UþÎõ×a”µ‰Qî æåá5 ä@ŒZä¼µäêb”—¥e¢ôr.ŒºJ-¼L–C}&®–°ûþõ›_?Bflx=ËBÔç×oi»æ×ϵO¦JïÆÃglx›à7¿­_?5ãåR1§M-¼+Ä[W>KÄÚ¬à›uõwýúù^kâJI~M\ÙŒ5q}ÑÂû½à ¾Ý+®Ô«”)èkÍÅŽZ‹.6~M\ÙÂõ÷§J:ô’¨ïkÙE•t-»(Ö.zù¬5q¥¸~O\¿¯‰ë‹Þ=OÓ=qÍTéÝó”x×Äþ$µð~¥ëE/÷=Ö²‹-\ô²7½4Ýôfªô~¯-üðQ©…·‰½±–]òï ƒL•~ø¼=üjáÐËÒÔ»UÒ¡×®í¾7 R ?Z˜Zøc²S>Þ&6cÑKmuù^°‘±áQ?½,53žkÉTéÝBŒW¦J?¾”Œ oK-zùÊ÷¦A¦J¿š±èå{-ßKÓò½Të½”ä½Tн¬ð¦7µð楽lÆÚò¢ ¹føÌS ?˜O-¼Mè¨Ô¡L-¼M|ÖÚò¢ª½|/¿èe3nz36¼›A™|ù^š½láÚ4` ×ÌÞ›y{xw/~©…—‰'—S /1©…—É.z¹ H-¼JY‚õ¡×b¹Eï[ªô§>*£^O¢¨”Zx™ÞR¥?&»Ô[èRRÈÛÃûI«ÔÂ×ÍTéeb*÷_"—»x^̓OËûËɽ–ã”bøSÆbÐZ^vöKÐRL5ü©ŽÇÜ38¼,ð0^½–38ü±pÑ’Áá5æT÷…«å­¦  VnÏþ«v"@¨r;2CÃ~Îí­ÃGvH%øþÞ )†7Xð`^…h¨1\ÁÑá Ž2á ÚŽÃeÂtÛP&üÀÑêpmÁh‡( ÿŽáÚ‚¾pôuŠá]]šbøUj05w85I6|Àõ¬E*µëAÕ¤æaÕžN OÅ;œÀ1RyyøÕÂá• j^~•ZÄbìS ¿J ³&P´ÖC­ Ê`k¥†Û71¼[ÈAr9ßJ1¼{ž¥†];C±à务—ï•bx·’ìÐK626¼À d²ô6á»ËØð~…÷E/+\Ž–BîMo^Þ}È ‡^ y¾éM1¼+¤@}»ÛŒ ¯Ry=ôšj<ôRžü¼\.¾ÊŒ ï²{½`#cßRˆôyÜ.õ¬L–þ”¢®™ZxYØMb—Ñ¥ysxµc5äR¿¸(’‡?•Q ´4Y Û]Rx½$´hÁʪ„*umÊV SêЂ”':¿ˆQ®±S /6˜´-¥ðÇÄY{JáÕ“|ÊXþ”« {@xZð·è$_'Óš&à M Lš|ŸL“^t`°S / 5Ó¤—…±è´ÛÄ…§I âÓRw P®€R ZÀƒ§_…(¾|£&Ï RK­.HMÖ¤ô•ygxõÆ4¥ðâý&F-éú0Ê2bôíÎðzˆQ §£ÖbÔ$w1jãbÔíÇ}’71Ê㇩„—C°»°ç¿O2Kz•"Œ©„—‰+²TÂÛ„áû6ÿ}Æ%eTx—‚ïO%¼Owþû¦ºÏŸáQyix?‹ÎÿíÒðndF…·‰¯<ÿ}káúïó•ç¿Oõ,£ÂëYfšÿ>¶Þ¥¨N¯åMkÖÊ÷šY+gÈßÖ¬•+Zãï5WfI¯Æ3L*•ð6Q]k.*Æ÷š+/ ,¼f­Tqך‹ªûšµ²ÔÐˉz*áÇx}_³VÊÝkÍÅg­5M¢×oW½·.z=gü½æJ%¼Ç‹ƒ²f­4­58ü>ôrÙ’YÒ¯>\ôRZ¿×\~5^ôÚ—Œ JùÍà¢÷õÒð«”èõR3Gx»4¼+d´è5R ïRÔ™½4 ½t©„W…åTÂûYåT»ç)ãïåŒ6£Â»B|Ë©„_ÏZôR½ÆüÑ릵æbãE¯@þ!z}”E¯…½ÞŒ™7‹^걋Þ%¼ã•Jx›Xjù^ÊÂkÇ€ŽïµXâÛ÷fTøÕÂE/~©„·ß€3Ï,émQÞÏ‚[Î,éÇ·œQá—imѲµGËŽZ;4­]ZÊø^.oòÒðz/ÎkS /l^&»å{|/ÉdXøSÊDòq½”yR ¯GY·àåd.ßB\Ò¦þXLfrÈ™Jx¿.õs‘ûþâYàT«()[tÏÅÙ/AËí¥«`%…ðâ>0…ð*Ã7°0>Þ–ï#\¹tÍ[Ãq¬œCæ¥áU†g U†Žüª–Õ|‘ÊwÝ-ø”Ÿ6ð”{&I/H¨ö¥^ŽH)ü±X¬ïøXF·f`x¢v-PIwJáÕŒxJáõF¨Ç¿š =þ•T20¼žÄúfb³HµÛ¼gj`—ƒÏÔÀRŠ‹Uî¥þ>~)…×øÑqe`x½&5^…˜Íï÷xV3 ®v;øxV®×30¼ŸÅþ›Y­uŸVnĤ^Òfžô2QI-¼L„,µð2qC*Ã/ÓxWñÏ<éï,¥Þ£EÙ}°¥3H-¼JÙEä3-à&d¦I¯RË-üŸÿªþÏuq87É?þ,‹¥ü ÷Íd±í§%z¶[ÀY«,tqѱUÆr“Œ…'mdáo0zµjãÞaxƒ~fhá º ÜX8ƒ.µ…/è>Àw¾àèpmAÛÂcž -èp=Ú¨-üÀѶpÇs tmÓpG µ¥ÞÕÁ“§~<)󤯔áÉs|‡èRÔ;©è£¼8üŒÌ“ÞRÈ'Ð¥ø¬peât.µð.…¿î§áÕ¯°üdòâð~+\ȲñÃ,¿Î¼8¼+Ä'ði¨¥§Ï‹Ã«”~ZܲÂ×._ríÂî§a×z~àå‘­Ì“~4>µð6Q%zYajá]ŠŠ§èýàŽsjáÍÝùÐkÏzyt9ó¤÷P²ñC¯U8ôr®›á]!ˆJ-¼Lœ¤g`x™½šZx™,€ZôÚù„—³Æ”»ì—“äŒ ¿úiൠ^*K%ü©Ïž ]+‘ËÖTŸÚx¾;“¤?j±¢ô¥^uA¤±,!^_„ð§*üBS¯Þ¤>/TÙ^JÃ`J‹(åu4_)µ”ÔŸ–YNóA”³öÔÂk0©Æ‹PK.B-Ä[€Zèµø4ý\xZZuÑù^hp§)Þ‚ÓN»è\pröõEp¾……W2[xš,>~žaá…4•NùS~8™"ý(3ˆR£vÁµ å¹ãÔÂk€ïWAjª² 5‹ 5‹5]{eï £T¯Å¨…à‹QKT/F-ẵòr ˜.F-`\ŒÚé1ʽ¿¯bÔTr1jñÝë¿OQsþûÔãS ïßUÒõßY©…÷ï‡ïøR~û©…W):ŒÔÂËÄÕRF…·‰ï5ÿ}R”Zx—bã×*‹¦5k}Ñ»BxÕŒ /“Éÿóã§OùvÏZS ¯ Mð^‹-¶pÍZ_´ð®?ÅŒ oßëžµ¦Þ¥àóÆð6±{¯+²óÿglEjáåú˜›43¤·‰šñ½æJ-¼ZhùLJ^nÕgTøUj­¹^´ð.E!èåŽGjá]ŠºûÐkz­ñ3kµ[ׇ^Ššß‡^3 ½VáÐk-z­…C¯=k­¹¨j½ô‡Þ²½¯¡×Z8k.žüN-ü`#3¤ˆfTx›ÀFF…w…;£ÂÛD}zÑK‰WôZFûÔ»BêÓã{¹¤Í éW3D¯‹µ¢×ψ^7‰^KvŸZøÕ½‹^Jòk›ëE ¿†RôúyÑë¯,z]ð^;l†èõW^»]”ÿozóÆðÃ¥ü¼éͨð£7R ?ȨðË´f¸”Ÿ3Åý*è‹^ªÚ¢×º÷çÌrívêY‹™X»|ï‹~õÆò½,µ|/_y|/5ŠŒ ¯gñDfF…—‰“¥Œ /“%7]û]TÐÇ÷Úeâã{¹›Zøó,»|\/%¼”«fxßR¤W)¦Oþ%xß´ð§;0µðÇb¡ä"—þ.¥ðj—ïþ˜˜=)ƒÂëA˜%¥þX,wúø\ ðžÅ«´–\×$dífòÙ@Àÿ6ƒÂ«Oi¯ý2(ü)cÇ fè_‚õ-Ezu[ T)¥^¤âÌ ð²PÁPm¼ª²˜ÕÕ ñ±\Œ§^m n<œâ]S /äh§ÜvH%¼?=>h8¥À*N-»öpjwÏÜ€’bF…w#()Ï6;o¶Øðñ­ÌLñ{|+Ñ©…½7 ì±j—cý`¡µË·½k†…W1b)¥ð2Yâ÷–[k^¥ÞÂÂËD '¥ð6a@R ¯Oš¿Ï”«W5)…—‰>"ÃÂËdú´°å®zJáõá¼(áeaË—w…ÏÉ ðnK µK*øÿ…ð¿ýÃ_£À¿üÛÿû/vëë‡,ÜA–…Û_e¡6òm,\…Óȳ¶Ÿ²ØŸs,&„÷û0‡Í¿ž-øwó¦øÓýûÓòÆ‚üÇéQøÿtöè>Gá¿LLÚÿëXàþÛX0÷úïcÁhÿéÔö?Ïñù_çûüï±ÀýŸ³Lá:ê ŸÏq!¼KñGB¸L¬pŠ.Š ÃÕ ªÂ?ή!\ÏBÏ~úu›~O…ÝÂÕ š¯|ÖkñâC¬™Yž5Š éz/ híJó›ÚÂÏ÷nMpMY_äòüÄB— »üIE†ôn!u«ÂÛd*äÐˉçç¡×î§z©YDP¸žE|èe ?½©"Cº*¤Ú=ôòGAáê ÀÒÛÄ;iC¿ú0„ð2YNxÁË%^Èàj:#î‡]®ã?»‹=ìrø#$\oÏ:¸Þ ßd„„—ɢυ®Éê"×n¸/2x=‡“šÁ»q{5Dð.eÚîúç3Txýó©œ.T©t¯>+œ>ÿ©!‚w ‰Q¤F?_yf¬?}z¡ÁU![8}z›Á»óB†.uäµÐâ³ÖJ‹úøZj±ç׌•ÒùÌX9¼[hyøç×Ïã¯qM¸Þ‹jæÐkÜÖz ½"¸*¤š9ôZñÐË£e߇^¾rˆà×x}_ë-xŒïk½å"¸*¤iè5‰yèµ÷Zø±|_;Ü Yë-š†^“˜½lü¢—½±è%C¯EÎ/zá" üìÃ{½©ÑÏRk³€°-zn½è¥š9ôò½B×GD9{í°ÂE/õñE¯‹àzMC/÷ã"5ºJQ—ïuÍzÑ‹QŽ€pUÈÆ‹Þ7\¥XáÚà¢Ò½èe©›Þ‹^¾ò½[ðcíð<ÃÚ-à+/zù¬¡—›î‘½zÃUõ¡×`z9Ê!‚_ƒ"¸LÔv½x¯ÁUŠaÉ·ï ü|Öø^ #^ô²…‹^0áêC¶PôÚñƒ¿>¢—KaoŒïåòþçÐKi,Dð®GCo“…v¯ý¾ò¢—ZüÐËYJ„÷³¸T¼M/áe¢†"xbà_äF—‰ xMž¥>¼¯úLºì¿H^e˜-6Dðn©¼×ÔWqk±ÝÂÖbЇÚБ½ÚÀEm„—… á/‹« Y²á]Åik‘Õâ•ÓãÁ«6žìŽ€ð¶P‚¬&¶ «–¡~6·àMCïaÅW*x[XF¤rk0âÁ/ð# ¼L\hE<¸ Q*'ËÃßg#–q®À8Tp5Ã!á  ‰V* Þ£¼" \âi…ñ¬–æ|<ëK@xWhÃ1®•;N¡‚w)îìG@x›¸·*x›¸ \&øêPÁe™¡‚«ñ4 Z 0´•.h9 ‘½ÄÄ8.¥sQËIFDƒw¡µ½ü㯊à ŽfD×–…ß|ôlYèË£cÛÂí“©‹1Y¸ÿýÚµq.3þmÇBÐÏVG¯}ž -ø ã§Õ½ƒ÷ Gд Ác±Ã«áú9ørà tmxÓpmÁÈ…èÚжpÇø„8ZNàh[ü³K¸€® Þ0<@—Aï„8ú:Eð6„ˆ¿Ú"øUápjúx8€.ÅÐèðÝ{4-T©>‡8Þ8Eð6Qpp•Z¸²7¯Ôv°|–ˆõ;Î…ì‡Ý;>ÌZÞñÖ"´µTð[{Öâ–Ý;àš>>äò$ndF×Pò<ðkAé/·¶S¯ñ²¤ÔC¯Eö½üéE4¸Zד"x=Ë’f½&’½Ö¡הñv)‚÷+³…C¯…9½–È|èåÄ!¢Á¯ñJ¼šÁèØÏC/)ƒwRÁ_ôRÐz¹§œ2øS!ç(Ÿ/WK‘½ÊX8½Ð%ƒ‘½Êð\g\Þ¯Äf·|×Á–B´¨¥¨-f©P±‚X>E¼R£­¬kXe]B4~PùqJ#¼:Ó¢¾E)gˆ‘½Ë¼(ᦠQ Ÿ¡VF€šª->-L[xšExZ „§… O+#<­m“Jëái Ý…§…v OSZÅ'c¤F¯ñaÛR ÆÇB‡Ç¡R5¡v{·µÐn!ÊãP‘½ÛF-^ŒšB-F-ѺµäìbÔBâåGM-F-´[ŒòÄéW1jc*FmäNšJø3rÞÕ4òÙH  =¨²áã[C–Bx  ÝÐ-X)ɦ^cñ¢„·Kc#ƳZ#ƳZî€ñ¬Ü!ÿ=žÕqˆåvK*áÕBÎ4S /·%S /¿öTÂËD½6•ð«ÔÌjy¨=R£Ÿhă—…g>R žÄ®H%¼G’ˆ— 㔟Rkì¡„ÿñW•ð?J Ç'][–%¼Ë }ѱe±ÛÞdáÙ®èÖ®“Ï©³­±ð7<ž 9ËD§v«Q[¸‚¶ á ºÕðaáŽ>Gp<'ÁñœÿGÙ¹$‘ëÊy+¯àH§Ï}DØŽPë—ÔÒõûmO½¼~3£$î—ÅAd±È¯P$“èçà›>nà±Ä¥EÇ ôÈác?ÿ¬K_/piÁq]™ã.–ãÚ‚Q8 -èÑãºÕ(#%üfZ”Rà= KQíNcnýå8€Kç)¼ÛÎgpy-…ƒß|@›( pk†q¥èvò¢O©%ü©0p9yÑ«Ôg^ßpî0W8øí½ -]ÇÉ‹>¥0þ ï ٽ斛2_ nÜ,nrÃdtÃdvã>rÃ=¿èEãO^ôéC ‘Co$Ç“Þã'+%ü2”'/ú­Þ¥0” ¿U¸è…/‘~/…ƒ_>=…ƒ·‰?œE/;j¹[ªîö·Ü’Þ_%>)áýÊ/Ó2þйSÞÐ÷‡Ý8¶0è¾ áOëâøÁ€AßÃ-»u¨…<9Ñ«PâëKMyxEŸ}Z©5«Ô‡T>|8åÇRV5Œ²ª!”ÚË×””’ÀŸ®çâí¤Doš"ñùàWpÔX þ<è-¼,ìæA3’˜™qÕ÷ñÛCf¨ÖCf´m|jÄ|™oÑàÏû„Ò=hrºxR¢Wï0Š^ÑàÕ;nEƒ?–ˆ<#­µ})è”r©§ TÁàåo€è¹¼›FË0ô0¢õ0ÁíÃhtÛ 2ó rö eÆ}F«ÑîÑȼ>ˆFmƒhÔvETøûçó1ˆòB½qžÎ #JÝÔóUW’^ˆDd´ç«ÌC! ¼JEÄ·ÿøȼ@¥Î½H¥¤ê?~D²ûÁÅþãÓ*¼:·]jô†ÿøü K¯ ©<)¼»—Šµç«‘Þ|~6 ïgQ±ö|5.D÷|5.)_ -ö¼ç«‘Lí¾ÔR0x·?ß“½M‘ÎÝóU¶PxUHM]x™8×R0x›(XšÞȰ½æ«Tv×j‹²´éeG)¼{ãEo[hz£Âµ9€ÏüûÚ`ã½ø}HïŽâ{­  åɈ>ïÅRk¾J“é¥Kùnzôèe3½<è°èÅùdDŸWf®Õ¿è}‘À{(Ñó’À›^šL/÷  ~q)’ÀoÏ2½Tv$·Ç¦èkz¹V8ÑoîKÁà· M/—ÛÁ§Åìå{1Ê’ÀÛ‹²M/ç’À»…@øÅ¥HoØÞ=Ï.z)K¯=.šL/U–s;ø4`ÿXôrƒrÑKÓÚ+ é¾W `ðvT‘—ïånèò½T[—沈»|/Z¨`ðnM¦—ÇYÎíàÓ‡/øÅéIoõàµWÀ M/cY$76|eÓ˹$ðË÷¥`ð6±7Lo$K7½‘bÝôr# üòI/'0 /u)IàmbãM/c%W)î3HoÓ‹þ˜Þ$ðÇÉÀ‡Ýˆ6º”À^mˆÛ§]NÊNNô*qç.Sü¯Ë IàO¢ÌPËų$ð§ Ó{ëÁËò&?e"²ÛTظ |x£Þ@`mCkDª{k žöç°ú& ¤gHå_ì瀹¼ÀÓ5ÇÉRN”^ƒçP(x ºGx”VÓHÝ=”F¤úP̽ͅžS(ø­ Þè¢Ú?˜ÒI﯋ú¼}k(Âö­<±r2¢w·RPR£ö¬LÌ}.¿9')àõU²†U*¿ìW™pÿ$Dï'1äã$DoSä»·_%¯ ¯®^+2ôºð*±ÖkV0%€w)ü=%€_šq¢·‰AXÀ«T\ØíY·V$?¥¸‰$ ¼,lºç)àÕˆu8 ø_ÿ¬þ×’ÀÑŽÓ¹ËéÛ¶ oO×^,§gÛÂõŒ-œ¥Û¹̵ÌéÖzN0f >Ó«]&%ðKmÇôû mÇtôèñmA™ã ÊÂ÷ñeá’ã8‚²p_÷ø²p§üøË˜?pyÓã.­>^ [Iùq]cz|À¥¯ è¶Q¾=.àfZ”²Ô”òíâ”&ƒÊÙš$ðKOœ«Áoƒ. üÖxÃ1éÇ T©P‘kh´ççÕ¥ÀÞ¢ïI $?¦i˜M“¡µYÊØ†À<Ü~æd]x·Ç†Ü”öÝÏ<{®ï ™@FÑûYÔï‡ÞHÝ% üRJÑÛDÙôr¼$ßJ-7K%ÔôÆEÙ¦—óƒs5øÐË M/Ã’À›CÊí‹^ÊÒ‹^ªþwz Þ½ÁR¦—£, ¼ZáÖC/?J¥D …6>ìrsí÷A7ž3äòlë¹¼žó þ´ nHl_ð§ v¸è7IàÕ9ðÞJˆþX^4ð*ÂÊìkÂWà øÏÕà3:¸|Pe‘*Š §< (!üi4Ž„ðê4jú)çŠÊPé9Wƒ·…µ ¡¡i ¡\Ÿ×=|¾Å‚7Ñá“™ •½Þ‡­>C!¿—“Ÿ\(¼¾*¢3„FFð!4ò~¡ìÅ‚×ûPÔ^Ód+D)·¯¹ŠØ™ò1ƒho¢ñ¢ƒè›þ¼N„h¢¡i¢t,ƒh$8D¹kø1ˆ†e í| ~\è[(x½)Ï ¢ÞoD9 ƒh¤>D#5½ü˜V} ¢üY|[“V†L{ÒÊ_±BÁŸw“ŠÒÁËÅr×MIÑ»Åî5N{ž›Á¯ª1Q(x?‹Òÿúíãß.¼O)yýöñ•}^?ójéàÝ >Ëë,Î ^Íàö—’¢w ©žß'­ßÖ¤•ŠöZlQ›öj+´éµÜb…^oÅç^pE.}¯¸âø„g4I¯Þx ï>¤ò»&­ ^ô²Ôš´Rr]n–Ròò³Tc=ˆ÷ò¤•áßM/5‹s3x÷Ý£tðê¨Ð“Vê#ÒÁ»{Ùk—€¢ð¢—¥Lo$–÷F7Фƒ÷PòÀÀ}«à»ée܉’¢w…/ÓAk»àEïî%‹^n™^ʹ|Æ -”ÞÏB÷J¿™L/\ÒÁ»ÕØE/›±f²…׆M¦—ú“tðÊñ¦—ÿ/éà6 Þ&6Ãô’Céàí`9^‹^ Ћ^Êò½¬ÐôF`ü¢—½±6 X¡7 g«¤èÏ{eöøµað¢ƒw)°!¼Mh†BÁ»ÑQ ¿Œ²BÁ/CùÇò½/:øe”ÿXÛ]Ô¦ïÛ]çfðk ×Ì£üÇ}»KIÑ»7XÊôRZU(x•âoT:x™¸“^&2VRô®CizãÒpÓËu©tðª0ÔsÓËtð*EÑH:x›xÌÀ¾—S,éà] _Štðî z®/O“)+úS(Â|‡ÝÐl×îdtyIú¹¼Ÿ<¥ƒ?mˆ ä—{–ÒÁ/í6¶¼tO±àO¡¸®z¨å޾„ðjܪҢ—_é¹¼ŸC‹—g¬m€¥sT,øóþË ^ïÇ£Xð²€ áÕq,3¬F2÷A5ðñu@åáj…‚¿"Á‹à>‡Sî¼Jï áïíHð~%rÏ"¢ÚœR…ö.|ž”ðçI< üËœÆË§\ŠJ /°,ûeçÊŸá/;×ðí\¹«¤èõ( ¤PðË;ÙµFçÙµF~s»Ö¸6Ü®5®V·k# kQÆñ°k}“ f«P,x™x¦]Rx›(j{bYÌ×¢ ½+)¼+¤&º6gYÊØÒ‰*¼*|“ÂËÄüwÒÂëãA*¼ ŕ瞬í4há¿ýY-ü·ÒÂñʧwËBQðtn—Á‡zú¶-Üÿqm\ÆÙÂS¤®-µð~ý¼k£ç±ÕÓ«ý¦°wp±wPn+oÐüŽ3h úúø‚²Ð›_P~…Ç”…“˜ã Ú‚çOpiõq—¶?páซåx¶`´Ïo«-¹ãº¸Rbô6½hám ºüÒr…ƒ·‰2ùñÝB¼•´ð6±çßu{¯ã.Ýôå82qç@·ƒ—‰¿/…ƒßJظçÛÄrý*-¼ŸÅ>f_µð§Tla*¼MìÃÁ6ÖÍm$a7¸Td¿˜ÜèC£Ëɘ´ðîCrhxãY¦—}(-¼û°é õîd¥…_FYáà ݹéåî¦ÂÁ›CJò¦—¥pðKGI o+\Ζ-\ôâϬÄè݇4™^²¡pðî 8viá‰_ÃïãqßnÊDûA—«/jxüˆ¢Â«m`TQá5 <©iF9oµKåsìQ1Úv¨|Î0Ê Æþޣʌ^¶`}ËŒ^½Ã>WÊU˜î¿ôè0‚ü0µ £‘åüêF•½ZÀFã9Ã(/ÔRfôwO¡°ð²p´‡Q~? Êp{M™ÑËF%‡?–O¼ÌMzx™(P(.¼LqUµý ½&®¢ *¿/¥FïfPæõ¯?.ö¯ŸG…¤‡W…Ü.Rjôê'FHoåëá5;Jïg±ñë×Ïåæ …ôðIhãô¤âÂo_WV8ÜÆ™Ëon¶pÈ,A߸¶í8ƒ.ƒV_ÐôÎñe¡æt\A[€äñey‰ ïçÀGpŸãú9xÓ㺠<ùqýXÎ?«kÃ('péëã.m;.à2 Çôsð¦JÞ…¨OÐ¥¨\Ð& ‘´ð®³diá7Óñm¢0lTCi>à2‚º$üfZ´‚iáݹì¨Å+[¸€å+›XNK¤…ßžef£Ôù{ÝJ-jyhÀØFäúâ– ú—er9½Ö%á7lÌn å‚—Ï2½‘5ÛôFînÓ¡Õ¦7³éR¦—Ç¡•½_™ú´éå¿Hqá—¯RZx›ÐÒÂŒ²R£7ó T6½ÑQ¦—«Å…W…qûЂ÷ÀYɇÝèÛA—Óz]þ4!,nÄ~·‘ý|°¥ö¥ Ÿç0ˆ.¯N€«û}1ûÏX•ý)w@±T¸¤…?e"¥¸yÄáæ•™þÔÇp©áe¡Ú:´F4÷ÀJ"5¼ÚÍÚUÎê^}Ê%¸²¤×€ã$9¼†ˆÇ†Sî¾(Iz•áDk0 {0ÃiˆÑƒi «1e÷ ¦ÜÕø:˜ ƒ)}Ð×Á4nÛLãêõÁ”éÓ%‡?ýÆOHrxõ(þ ,q÷¢4ƒÃ „9¼j£@:r´%‡_Z=¾E‡?e"fz ða4Ê £!9£!9£Ñ63 v>†ÑÈx>ŒÒõ| £ÌEö1ŒÆÅçv¥…a4RâÛ•2â‹Ü‡Ñˆ(÷ߟ'9¼à‰%‘ÿþ‘[{Í]Ñ« ¯ #?ùš»Rlöß?4ÔµÌⳆՔ¨Ö Ù—šðà(uSx½ñ’Ãë3c‚ÂÃÛ„O]iÒÛ„%äð~Eô5w¥ô>ÔfÌþ`›êõp›¥.àÒoÇôs0rÇ\úMjx›(ypiÃcÊ¿£Ôð[©;¨Ê’~y+E†÷kQ®V3‚úx€Ëà*2üÒORÃo¥ÌkäV_ÀR†6±!CÙ0™Ùˆ'_ÐòôÂù{ÝúpaK•¸Í ñ7¶†þ<+v¥†· Ÿˆ"ÃÛ„/[YÒo¦¡7’‘*2¼K eIB=ôÆ©qE†w…è^E†_Z(5üòÊŠ ¿t”Ôð[…Coì‡K ïRð&RÃû•iz³½ì¨¡7BòÞH6>ì¾Å…?Íã¤A)Ò/–7$ïá–"ÉïƒmDµ<÷)1¼ºŽ}0ÌòXÂM`C‡¶·å\bøÓ‚¾\)ì(0¼Z2¹}-O¤K J…ä=°r±¨Ðð!ü%$†Wm/bxYXf@åºXZøS&‚¹ÓuJ£ÌPÊÅ_‡Ò8®06®Jߥ?­~ ¿XL)<²´ð"ç†Rî¬K ¯ñáI+¦º0¼žƒ2Ò«ÕÔ3‡Ò·DéO™ü5¥ø¶> )µV{TNƒ‡QŽ´ðj5¼ŸBëwhoŠ÷0ú¦…Wm<0Œ¾iáÕ6¾Ï0ú¦…×sÀ´ð²ð Á0*ùxÒÈz>ž”ËM…†?Ïáõ ¯ï”}0Œ¾eJ/Bø>Ã(OŒ)4¼ÊÐaJ oeסô3³¼)Uú­”9˜lƒròú÷S&_ÿ~¶pýûiZ3W|} ïÆÓ4¸¦Ä{_iI ¿uïxÕLæ¾f®T=såÊV©ÒûY,5Ô¦à½f®|åµâbϯ™+Ÿå5W ¥'qüZu±kÙÅ‹^Ê“ž „flz¹§--¼ûÂðš¹òY÷™ëw¯»"j|­»ø,ïD©;½ÒÂ/H ¿p¨Té7Óš¹RŸ^ôrOÄ“º]ÞÏ¢‚¾Ö]”“½îŠ+Þ½”E/+\lÆ^]~ë¨ûºK¡áO©OÁᢗꢗäZw±”w ˆBû¬píP&_»Tëïë.]ÞÏ¢à½Ö]Tµ×®K­u׋ÞÏbo,zYáÚ5 ú»|/·ô–ïå³î»º2¼[È ï›]?Lodl7½‘ÞôÒÁJ ¯fpÝ(-¼[ø¢…ߺ×{^ܯQhx—ÂxI ïf€(iá·R‹^V¸f4Ý}¯´ð~›±f¼—兩ºvhÙ ÓËY«Bë¼|HZx™(°H oÕ_Óû^¥ø×“^&¦ƒRhx™¢ñ¦7„|Ó ÖMohü¦7šaz)ÕI ¯®ÛWÿÏ¿ø¿ÿú_*4ü1QlVdxwÆ_Zx›ð½*4¼E“÷XßÚC r»–g”T‡]~þÊ•þ4‚óÿŸÞC€‹—Þ §F<à¾]þŠ«Á½‰€†Ôð§ Ç]jxÕÆ^ð]wÝD^µ±Ì™Ê‡WnËH j£¤¦àðÇ ©á—7Vãúxou±Õ&•` ©ôè ¯PûôVü¹bÃ0"1¼>*уi\[>”†ìéÈ–^M‘k( u ¥§Qlxu[=†¬m×µ]kÄW¦qÂÀó‚¿°Ã)Õ’ÂÛÍà#RhømìXyÒBw†w…Z;ÖÈ¡nÇJÍX¡áU!w'tgx™¸ "-¼Lü•(½L\J ïRè …†—)nÿ¶ke Þ¥X¡§ž Ë ¶ãÚÇrüÀ¥Ž¸ôÛñ—7=N -¹ãÚ‚=. ,\kÐêÉÇtãÐ=J“~iÄðË+I ¿ôªBÃo¦E*ÆBbx7žòïñ—7Vhx›(P›Ö¸Mܸ† m^9uÕ•á·÷2±‘w}}½2¼Oíz MíÚÔÆmâƒm^ãmn£Ô€›)هܼh|ÐM|ØÍW^ðò•½Ôx‡Þx–Äð§Sñ6½q·éjÓå¦7*z££$†w )¼½Ÿ¹h”^¥ ,1¼+ó¿½€Ò¤lÌå£ÐðÇÄ•¦²¤?–ˆÖñ ËƒÚÃë9{E†—…o4Ü2Ÿ™Äð§ ;ÝþXxó´ÄðþâåmËãƒlÈñClˆ½v·œ˜J ¯.¥:¼2·•Ôðj6ãÕÞ&|5RÃo¦Á5Œ‡V®z$‡?ÕÑg*Sz½֏Р,5>¤ri£Ðð=vÐpöpAãÃé[¦ôç9!»§!¡›S Nù=èÞðêÐpùê‡Ó·ÐðúRXÛp-Ny¤Mrx}C”[íW)m¯IÀל Cà ENwR. >†ÑÈÄ=Œ†°<Œr ô1ŒòP÷Ç0àÃ(=™2¥×(€x]þ>>Ãè[¦ôK™ñ¥1rö¥¹a” ¯Ñ汈a”Srx}<`à ÇÔ¾”ÏF9M’^_cÛv¦\ø(Sz•¢Ÿ•^Èq"§Ðð6Qòwš×Cjy¯¹+…Ò5w*Ê”ÞÍ`)ÿý#’Ûs׆öÜõ-4¼ž¦5weox¹Å BûBêÐ^pqr¥Lé·fxîʤœßvœ×gÔð׈ZßR¥Wg³mÃjÜ]>¨FþïuQVP¹JVªôêk ΃)½ÄðFäE ¯ê¨Û¦q<”†È:”ò4‡"Ãës œ;RÏ“þœ"ë6vÜxVv¶n ¯NxË“^¦_žÿcE†W#xba8‹·‡S.º~Ù­òà´ðn9‡oÜj“Û«rHRxÕÇ,Ÿ’ÂÛ‡&)¼LìZIámB)Iáe¢”Þ¥¨|؈âö” ®ø¶cå~”¤ðþ^¤ð|6Þ»³/RøS(Ž ´ëg)üþ¬þN©ãÓoeáA’Óµ]†;Y¶àmOÇ^žsúõb9Ýz±OÐþa®-8ž ßeN§^,Ç”…û½Ç\zçx‚¶†ó»ºôÛñm£ èÆ4ÒxÐ¥(jTЉРïRð”’»…x­/f5B«¸½×Ð"©â»Y7†_ú]RøíY&6„f#Ë_À—a6õî65è¡6MçïU-¤~úe¸} ï÷¢<=äfº¯Rx7ƒçÞÏÑ¡7Z¨¸ðn!¥Ò¡7b~_ôâƒT\xWHÙ}èMm}èÍ0n;ÚPɽ[YÒ»`Mo¨äCïgæÉ‘^ôò„·¤ðÇÄH)á%2”»œ›ëºð*ƒH×…×sø7p¹Öþ” Ë`KÕKJøS†J™”ð²pl—»M%¼F‚€ ±q•ùË]ø¯Ã+O9KžôÐÊ/ áÕ£Tš‡ÕPšÕýR¹BRPxuÞá4nÄLy$R*xõ(œŠ‚ÂßûZ*x>دÃhk£Ì•¦ ðzöÛ0Ê©÷×a” ü¯Ãhô›;RÁŸÄø £\|F™IAáUœ…î ¿2ŒÆ}ÔÃh{B€QP‚ôç9”+?< rîÙµÔa4Òy£‘Î{÷F9Ï” ^½Cev å|å¢W*øS3lK,ôRÁ/-F#©ú0mFyp] Ò‹ªÓÃhôõ0gìGY›ÿý\½ £o Ò‹ˆô÷ŸŸ»ˆŠ ¯R!ü®y+õÌõç§þlPãòµÀ¢ ºVXàûÛZb¡›¾­??K ­ŸBšö*+Lö©>¿æ­l†Z¿æ­,µ–Z\ˆ®µM^lÅIîµÚâ³Qeö¦ÆD*x¢jm×ËÅšdð*õv_x™¸ô’ Þ&žu0¼QÊðF”¹áå¡PÉàõ,î8((¼_™ o\%~Ý? þÔÇ ›bÂ/#"¼ á‹üir9ŒRÁŸBqɸÝîÛ}áO¡· éeaŒm$í6¶ÜüéúU7†?O z  Þ̲¶a–‹ ¥Hž"´7( Œ·åRT7†Wm®WJE ¯!çq_E…?¦È‰?°ÆõßÃjÄ̪Ë>¤òO¥¨ðâ‡BïÊŽSTøS&ÔÍ*ÕÄ/ïÊR|÷P{«‹¢±·ºØc ×) ¦dnßÊ£.RÂëKÆßD†÷çÏ—µo[Ðí[¹o£¸ðzÇÏû]lÄ 9Œ*Mý²c6رr«[Jx½/?f)ámâ‰Ï x:CJx•"ÊRÂËĽY)á] Ý®é] ý¤ ð2ñ›V‚ôn<5mÏ ü¥ ð*ÅÊÞ&J³Ã-Ï—)*ü)´þÆÂÿñÏJáÿøHáqÃì§ßÚÐNß^Êœ®½XNÏ^,§cˉŒláTÁNKda°…Ãn þ2ÇTÛXÛñËqý>ðTÇ´­>žàb9Žàb9~ [RøÅrüÀ¥¶ãÚ‚>8nàò>Ç ô˜¢Ìqݰ}|À¥¶ã.Iá]:NRx›^¤ðËË**üVÊ Fˆ´I mý¸€~ÙãÚD•ü¸€[©ãº…øú$…ßLæõ-*ü2$_L,wåtax—ÂG#)üÖ½†62µ/j9”ç÷ÕÏâù„Å-!Ü8º0äf|·Ñó ÃîkTx·Í0½Ž=ô¦J>ôFšTIáϳ2–|èýBó¢-TŠô®ðЛáØCïgNe%…w…`^QáeŠ nÓ—“½üÑK êãÂPJxY؆A74ò!7ž3à†ª=Ü2Ï“”ð§\ˆü>ÔFm-—BR«ç^”ð‚g†ØÐÕÇÛr¯E·…?µ…j:¸FôòÐʹÌוKp)áÏs"5ø Ê#ê ¯2xÓ¯•z·9¥v=˜F÷P­H#N{}‹¯V³mÃhh×Ã(GNJxQõ¢„—…šò0ú7N؆QîÔ|5£ðïR‹¶`“ ãV#R| ]}å6—Ò£W ¨j£‘ÝójמµRSöl€ªér§ˆF#zyàÃ(Jþ¼é[üçg_{ÖaùëÇO zýøáÈ^ΜžYáeŠÆ *3y|[¤òY÷–”ð~>1)áÝBVèi+§wÊÞ²7üãÜÞž¶Æè^gE©5må‘O[¹ªU@ø­…kÚŠ@áÝðîßÖ´•Òú}¹õm­·ø,/¸BÓö´5"̽äâ¾°«ñ<‚#%¼L!\{ÑÅ Þ½AµsÑKáz-ºXjÑKÓ¢÷E ï¡d)ÓËC R»eáµèb…‹^Jµ‹^JЋ^–ZÛ/Jøå«T~ô‹sÐ]á—òý¾Uð}ÑKÙô2úIJx7ƒƒ²¶ (þ/zÙ½¦7’šÞÊû–î ïRœ4½‘{ÑKtù^x„_Ew…÷ ¼(á)Ö™RÂÛDM{-ºhò¢‹ÛÓR»BêÌ÷-.„wã)’½Ùøñ½±Üý1ôÆRÂûYø)?úÅÛ( üfz#|BJx÷Æ‹~«pmp(—ï¥iíw‘ÃE/uæµáõ¢„w ¹)ºè¥¦¹è¥,¼èEo( ¼Áf3¬Fï ª‘T~H÷PC ¿nsIT…ƒ—­– ^=Ju0åší×¢‘dðªÃýk(}“Á ª¿C)ýÓ¯¡4t}{V&lTu,ôb¶à¾]-ßmáLÑ-à¬Äeð•þ¼ÖöëZæŸüÔöom*ÿÎ|Øÿ~,܆ü¶àMÿ£-è·ÿd œå¾¶à¿¸ ¦ÿõúœÿvµü÷k«ÿÇX¸!þ?Ý6x©ÿu}Ÿÿ}mÁÑÁEú¯£ƒ‰ôW7®9åÆóÉŽ>ØS€6©Ü…:!á×R\ÇédGŸÆS6­Ü ::ø”â{™Wú¯>¥ø^&6Ò­ÙP™Ílô†¡ 9ÞÔÆ1cšÛ0\Æcœ«ÂgPðž«Â§7ðÉŸ«Â¯D-x ›é„Û¦7♽”£ƒc¦lmzé™ÏUáÓx–Z~–Bêл';ú4ƒ-4½壃w©Hñ=ôÆ]Üoôà°Ë!>2x=ˆ1 '5zYøýœ€ð²pMxÂË)ËÛxŸ¡–áŠGïç`útÂËÂÔÖGŸîFØ÷ ^^©Ùþ>¸òôêQÁûEñS9ñàÝhÆ5«½<¨Fï!5´î5”æá4”óÁ4,C)ádE¿½Ï0ú¢‚wjÃh¼é Ñåƒè‹ ÞÏ¡r>ˆrMóuó ƒhèÉWD Þ€ª£‚—%”óA”'VOyýæIkh±kÒÊEãš´RV_Ë,Jøž´Æ³ÖB‹®I+¥î5i¥Ô½ÖZ¬pMZiZ“VåZn±f7ŽA¬{ÃôrötTðÁ†’°é¼Ý¦—`Ÿ[§BŠ»‹^|_'-ú”¢ªºèEo|_ô²ñ¦—̼Ÿ7½‘L}í¤ ~m¼ég™Þ¸üÚôFϯ%»×ô†h½6 ؽkÉEezÑËW^ô²kÉÏ-áW6½¬pÑKl½”i½TUï¾÷ăO ¹µ6¶R¢ø¬¡7%áµä¢ž½–\TU½¯>Í`ãMoÜ~¾6¸Xjípñ½½,µ6 ø^‹^öáÞ£‚_eÑËŽ2½‘üÞô†iÑË ½|åû†Á5s`o¬í.ÊÏk»‹úãÚ0À œxð›3?ñàÃFªàc¢Ô½6 ØŒµÝ…Þ8*øLØBÓÓ¦—ÙxŽ ^Fªò—Kü#‚w#^¢ÁÛDéç¨àSŠçÌnèÙf—“ž“½+俍àcâ³ÌntÓÚ¥å@šÝ¼ŸõrGø¼2¼üQÁ»ß¹ù>èòïzDð*áÄ—{GïQ•5·/ÑàÝðÏÔX‡[þÆ^…"BÚ¬m åÎãO3iÞ‡Ù¼šÀ•ýÁËÂöç†ðn67ÄF¹w( ¯üjNNônË ­Ñ ëË á]Ï6 ª<óös¼lôÛ8YîðüN#}8åºúˆàÝ£xÓ#‚—…ó²#‚7¦TrS®„~ù†Ž>üRS7¥”]M)…ó¡4Dס42¬R¾g=”r½{BÁûB~L9¬¿ÓèíVé0ŽÞOb*ºsCx›¸ãx4ði{Ün5âåíVC¥÷” ®÷”€yOO0x7ƒ»0'-ú˜0òGoSh¯ -`>ÁàSг]k\îå·è>-d…žDÆô5%à{Ý7þÉî5¢Ë‡Üå ‚ú³*ø§RÁ©|ú[Y^TðK™Ó·mI¼-\³ú9©‚w 8 ósè°má·íçððÃX¸I{ÜAµ€û)Ç”…ßïñ]}pœA—A«3hKªàmÁ4åø‚¶àM+èÀ[OÐŒÂqmÁ(?p±7péƒã.ývœ@YxÄñ…ÛÁ« 3VH¿tϹ"üÖ§'¼MœYK¯ Co=. MÔ‘ èf`Êxò¢O) ºDð[…Çt…Tº ¸™®l¡y¥O9Áà]!Õ² >&ʾF–ªË—ó»ð÷ÅІfmj99:yѧ£Ø sãep#xßäF3Œ.ÿ7_Ìnœ1x?½‰à=^à\~J‰àÍ&‘'/ú”Âç-¼K¡£N0øµÂE/Ÿezyþäƒw…¼cK"øÓŒ¸˜zà+¸‡Ý8*0è†Ò=äF&“7Z0ÜFˆö`!ÚCm$lhCQ7³<=0ÈÂUHoߘxQ‘½ÊüF©}h ËÀŠíxÚP­Uê‹'¼Z–5¢Ç‡Óˆ8L£Cif”qÿfe¤W«©±šQê˜ö¦Ty×T 5ðzõìa4⽇їHðî ©Ãh”F#¦Ún”J·Ý({g ­}xïa”ë¡ ÞïÃÞF9›øFãì€åû˜Ñ üŸˆ÷F¹:ýðŸZû0™éý×gòs5x;ìHní9k¨ÙþëÇõÏæ”‡ÏÕàó,L÷¥×ß!¢³×_ýw"Á»T¨£kΚ‘àS 扞³†~ë9kðœ5Zè9kÈþž³†ÉsÖ´÷œ5šá9kÜ5î9+7ONôö¼ç¬‘<~Ðä»çjðþc1òà\ >&öüÐA‘ÒÀ꜋^š½x–4ðž}‚“½MœªIïù1%ÐE/#‹½4-zÙxÏY¹‰÷Ýô†Œ¼èå{™Þ¸ÖÚôRmûnzôèå³Ö&·PLoÈþkÅÅî5½Œé;Wƒß\ʉ¿ý}­¸Øx{Þèy¯¸âuû^:ØïCoÆ#›^neÿ0½t•ÒÀ›^Š´Ë÷2|ø¾_p"Áo‡s5ø<‹ ó¢ãur¢ß¾/iàÝx–2½ñÊ‹^ž#X¾—‚ðò½|Ö¢—¦å{¹Ígz#äò½ìùE/`û±ö xXÀôÆEék£‹˜^®NÜ·º¤÷ªÚ÷2 ã\ >þ2òò½Tνԥחz梗Zìò½\ï»]ÒÀÛ™SU5½‘<ôò( ¼êc¸í oïz•þ”¢{=‘àeán‘$ðz7þX[]܇6ºQÊè†ÉèFøøÚ¡å8]άÿ0º\Ê@ðy/Ž¾Ñ¥Ø% üé Î×þð6-\†$ð§LDëšÛ7 ¼† ¼œ„è3ôÜã7¶¡Ž[¾“4ðz>žs/xYýpÁ˺¹=.OSœ„èý ôø ï.bç ²Œ1þ4;tóA–Ó㓽ŸCÝ|€ Ú«3ŽÄàJî~šÖ¸ ~h}¹¼Yá‡ÕˆyT£ÙCj4nHk‡TnoH/îÁœDðòqóõ7U¨\?K/ù cú"‚׆ù¼j‹òV, ?ƒ7#lÁPÊI×/Ï "zܳ‚7¼»Žúó€¹›ÔPÎíXãRõåXù$£šµ+3žžŒè=êq©ùr¬(;V~ÍÁû7ÿ.¼§ _‰àmÂ`Hð6qB#¼JÅeãv®‘}ÝΕ[–Á«Böü¹|Lp'üöÊ'|L|eûWn។èó)z”¡‚þ³*øçºœºÉ§¿µ3¤Ó»Ëéܶð »-©‚W™˜—Nú¾Ó±—çœ~½´ítëå9§WËò¢‚w™Œo úí¸ƒ¶€Øó×ê¶”ã Ú‚çgp©í8ƒ¶ ¶ã Ú‚¾>®àRæx‚îðxA[жãÚŸsÜÀ¥¶ãÊÂùÚqea– Éà]“ ÞO¢þlL9¬’Á»0M ~éðs=ø<‹bìqÝ ºdðÛ³ +§ _L+×]Š¿tî¹|žÅžØ­”‰ AÛȆxnf¹I/¼_ÈHoÇËØÆ9sû ^FܹɻÍ.7e Þ6ùÞM/ÿÚçzðª0¯ìz3ñùr²”Q‡Þ,ezÙBÉàÏ{e3L/·! ^½ÁœT’ÁS„¼Ð2´ð$DX OY¶m\-Ï0 ¯4 ­<¤@ðj3Ÿ2¬RNV xõÀR x!B‹A¥\9œ†l=˜F°õP‰Å )Æí¤Cï¶Q¶D£Ch„¯¡¿Q˜Bã*ï!4Þgåƒs1x{tÚ†ÐhÛʹ¼žv¡Üp‘^ß{tåT"x•áû £!œ›Qü“ÎÅàzO:ôfm“^ôR7£fíKY›])EÖa”{XÃh\Š=ŒòˆÀÇ0r²½(åña4‚­‡ÑêF£mÃhHêö¢ì{Q¶m¥OV xÂFßÁkLùœa”_ÉÇ0Êo[àåÅÈÿú< áŸ>së§+¼~Ž!u{ʺ¯§¬qû󀚚¥§¬¡ÅªYjýô)ZÛ¡þß²"Á«yÀM‘à7Ó𑊿•bS÷õ”5Ôýa64°oígnœŸ|èÓ *Óž²ÆMîž²ÆYÿþ#€ÿÿÑx¯µ‚ OYƒ(Ãû’}8ä²{Ñ‹¯A*xÓK}Ôô†h½è¥Ò¹¦¬è^©àõ¬7¼Møú¿{Á2íš²òYks€zÁR·\‚í{þ»\o*x½W„{ßéýîWä^pE…‹^ ÿ‹^Ž×¢—†Þp)RÁû[æùƒµà¢i-¸àEÏÍàÍFäwß+¼é¥‚»è¥‚»èEGI¿8ók[‹‚«\\·HoØÂE/ÕâûÖ–Tð[ ½lᢗòó¢—2­}o¼×Úàb…k‡‹=¿¶¸^TðÛ{-zYáZz±×6KÙ÷rúÃôR™>7ƒwÏsÓX*x5>rÓËYùÓ[›kæ@!ÙôF¢oÓÙÆ—ïEoœ›Á§ñÔ\M/=ök³‹ÂªéÛºMo„{›^^¡&¼º7J™^ÎR$ƒ?¥"qøÀË¿²dðz×ÿ’ÁËÄ%æ¹¼MÌ«Hð*ªµÙëf7nÿ6»qKºÙå¢Q2x7ƒ¾Ùååz’Á«E-éà‰‡8¥ƒW·Sä5¹Lk¯Pð§PÜ&>àrÞuî¤CŸ±Âß_2x¿åéá–«WéàO¡H¢njywºtðz'¸&éàÕy”⽉@Ë0Ësù?‡Y~£ÒÁŸç0!íÏ!6îÑ`)š„èU°H¯÷ᛚÖ80´r¿DÁàÕÛ”â× Êþ°ï:¨Ò7+¼ú‡Šò ·‰ÛÇFlûX.¦^^IJøcaìÄɉ޽J1w@äë*¡œœèÝêÝÞìÂè”èÝ? &õÌ Å=3ˆ«²í]C$_Þ•J½½kèÓö®\±+ ¼¾ó®í]£ÏÍ+wy¥…W…ô^¿ì]#}½‰0|{×(噣¤…W3ø[“^¦¸8|Ík©O›Úˆú¶‡Ë¼íaùK–^Í Ò»)x{f@§€ð*iÖ— fl …ÿõÏjá--œ»éŸþÖîK…¹Ó¹U†Žöôm[¸òs8qµ… ¯eN¿v«yNôàôj· Îâx„ËûÐvB·­>þ -˜ywе”ã ʘôã .m;¾ Ÿƒ÷9® Ë`6p^ kUÇ tX¤…_'-üò$…„—‰›¯Ò»åÔŒ *_JZøíYÇ ´éE ¿5Þ°Fôñq—~’Þ&Šµæ•»lÊ‹^¥¸ ¤ð2…Ò¼å{™Ù¡ í[^ô~olCº6·!]Üx/“ûÞ½AÌn¤‚7¼<ºüeèM¥Ùôr¶¯ðn5Û¡7o7½|e…„w…è^iáésÜÙmz),H JEó7bà‡ÝHc>è¾%EžÃ¯îÜ ^-àPRøS&‚»[ÆŒ†e £Ü-’^ß6Ía4rŸ£¼/îÃÎôE ¯Ñ¦´>®”»KÃk´YfhhûQʰö£´ £oá5>œ‡QN?Ær³ôÜ ~meEç@áÕø‚%†¿ Н1ÅÏîcå—õ1ŒrY+1¼|¾9‰á5¦ò÷„•ª¶ú\#K jûÄ-9iámÂØ}[?}<ëÜ >¥(OzÊÆë§ÞSDx7®QYÑÛDõ×?ýÐqÖO! {Ê¥ “é ™ÜôF©E/w!½ÔŒ½|¯µàb…k‡€§ÿ½àŠ“kÁE!-¸ØBÓKÕíÜ Þ}ÏZô²…¦7ÆËôFúxÓË™¿²¢×PÆ-ߦ7ÂÙ×n_Ùôrí|îïgñÇ©ˆðn5cÓËJ o©/ßK‰wù^°¡ˆð[3½TÐ×ÞŸµèÅWyîŸÆsíî{ÏÝàSŠÍXôÑwzÏÝàS!{cÑËg-ß˳ ‹^V¸¶¹(“/zù¬E/;jÑËf,zi2½”'¤…4)"¼Mhá÷Í.eE¿Uxß”•Þr‡umv±¦7”\Ó)¸M/w¼ÏÝàÝ f˜–þ´0B“Þ80ìRP@x½oÜ4ntñ))¼JQô”^¦È|nt)j()ú­”Ñ n„}ÝH¥ntãt‚јz£*ù y¨‡Ü¸ÚÙàÆØn¤Ân¹')üé¿Ï‡ÚHÓmhã¢ñöMáÆF–1$„?…B dy¾HIÑ/d#]ºg”¡½8㙄ÿOÙ™$ ²ãFú*2 ²TU’ÌZ2Ëüsx™ÕóÜ½Õ ´èó7`¸SŸo #ƒA~Åë›>}JZ´FJrÁWª›Õ7!üò Ÿrazû)RãÚrÊÙŸâ4²•‹Sjþ>CG…\˜ÆÍÒv¯Bàs„)?Ö'®eði;A”ò»ë¤èëX©ŽÃÚYѧTÈêv¬<Ìé´èû,jçv¬¶oÇÊ0ênð­‡­‚ϳÞÒ¢¯ç/Çi»ÐŽ•þ½#§º5õìcE‹½#§BîÿjhCq÷šàMßžÇ ©Uðí(ª«^p(;"|+dãí`ÖáSê˜Ò ‚ÿé÷ªàzTð3>ýy,ÜœTïnÙÂs‹k™rû.ªmáBÌ GõëÔÆXuëZðñT¯®Ï)‡°ÐWa[>(‡°eжò—ç”;¸ÔVÞ`-hu9ƒµÀ÷•/Øç må .}Pž`kÛ–#ØÑÆøÔ¬uiu¹‹¥¼ÀÖ†Þ)'0–HÏ]N` áU[ß'QU=0Å£Zßg±ÂrkBçµ ~+UNàòZ¾-„èÄè—!ìˆð)Ê´®/*ø–¢ÉÀ†Ô}K©ÛÈrI÷ù`–Ý{@K“©åä³± =Ûܾ©àóÊ¡L›\ÎÚ};øS*DëŽß 9^†7òé›Þ·ˆðËP¶ ¾Ï¢ðizùO@'FßRèÞVÁׄ¡l|éQ_DoÄi ^ž'u<øS]Dp ]®ð:ü)smD—‹Ûº…mÀ¢6b»-7’>Dp$Œ,ÿT±4˜WÈær³ÔÆÍê‹þ4ŒÜŸîdÊ}]‡ƒOmÔkådãÞiQ!Ê‚4r{‹Ñ¸É[ˆFm"4‚±h„v ÐÆ ñÚ« eÚ€R QF€†šm@Y›}SÀßG»ÃÁgLY›åÇÓáàS.¤ðy £‘{]î4,f”zºÅ×Ó øÓþÃÒáàó‘¢Lß >*Ób”«é¯b”Gb_¯Œ¶>½C!UŒ¾…ƒ?e(Q|£ü—½ïŸç`"ÿ*F¹±ý*FãçT1JɨðKÛÄ(Ïi[v^ð9þm FypÚ øe´Å(}H+àO^¾Õ ø´-ð÷Ïçë}Âo|žÃ¢VÀ8þâÞ ø–¢¢zLø ø›'üH—î ?Däc§Øê ?´Q/Wßr¢oײñÇÞŠ»»û檣ÁoÛ+þp,WäìåjDh;,–òr5°½\Þ8–«¬ðX®Ò$p3ÊÝäFã…nöß—«ýÆáA/[x_®¶¾ôÑï½`£s¢o)ÊÁ½Œ¯Ì|^ßÓþ*pl¶h2½mzã¢ñƒ^ÊqDÀŸLo¼—¯ôü >¯Ì|çD_›ás.-;|JqAþÝôòô½£Á·PÓËI£ð)&ÓË_ëZ¿¼òƒ^ʦ‡ï¥*}Ðû >ÏâÉ}Gƒo3(ßôRØ5½®|§·ð›ïez# ú~TÐ øN/ ø>‹ÊþA/ûÐô’ÃΉ¾R•>θø3ƒéå·ÜÑàÛó<Ÿ<޹XáqÎÅ÷2½ /oüò¬VÀ×lZßW¦éð½hF+à;( ê7Ó½éK¨í{ßðyVo‹Þˆd¼oׂou|a³Ë¼’-ßav¹Ih |J…ölÏW†›]N´¾òϳ¿˜Ý³ÍndY?†ßÌn„Ú›]Ê þ4þíbðÇŠèáw)°ŠÜºnˆãæöí^ði¾Ô,‘qÛ'\,#—ËÏ´ïŸÚàÎZ,\~t(øc¡ºÙ øXðvJôÇÂ#ŒŸ2p< >–|ÆŽÃ ZãßÁʳ¼Ÿ¶QªQÛqÈÅf‹ÔøA òKê{ÁçUùBÂô-%ú{ǵþ>@ýú_¦”jçA)Æ¡𩎚µ( nQÊCÀN‰>ͦÆlÏŠîi|(¥ŒlJ©ìú2÷áWÙûÕ‘íWãöoûÕH|n¿ÊO¢ãÀŸ—úϲ_åýˆ­€O©¸WÝ´Fô¸ýj{Û¯Æôö«o ø4#îÖ>ÖÔ—5UécM€‘l|žu\®ý/ó¯ÿô·5µQjk|L\@´¾& žï©;µ~«Ðó=·Ç¾-|Ào&¯V£ÞY…,^?…DïÕjôƱZ˜ßŽÕ*ÅöcµJ±Ýû«¸=ýX­òY^­FŠòc‹Åñ:V«ÜÏŠÜÌïÕjDó{µ&¯V£…¦7Ò«;-,*¾ôÒtßkµ¾ÂÅ´~3™^®;úrˆ¡ìKÁǺ®÷ZoøVH]÷ —òòA/MÇ^‹âíÞÀ·TïÃŠí¦—Q§CßîeG{-¶ðØk±”éå/Qß½× )Ûôr;Ðø´0L¦—Gؾ¥ØBÓK·Üø”â‚°ð5Q]4½<Ðl|J1ê±Ó¡?&®‡Zÿ~,.HË\ZPÎ`Ëà}ÊŒ…a±å ÖGZžàÒ‚rÛ|5km|Jå¶ F»¼À¥Ê \ZÐ øš¨/—XUcáÆ5q]ƨoߺVÀ·÷ØŒrk‚#íðÇ”2·a }¹œÀ¾+,'°-¤É¼F ·%Ê }ŸÅ_Œ,ãˆ:ü2’}+øVH!þ –&cÏ2·<ËùlpãJs“ËõIÇ€o ©e›ÝÀÆðRêLèSaÜ]mz¹ºëðíCÊܦ7²“‹^¦"ìð§¾P¬Å.ÿëèð§ §å΂>µQʸ.nyÂÓàOmœNZÿ~,¡r ÚÈ[.fßÀ§6¸¸Î‚¾)B³ ,…fñŠ/¾ïŸnËëÀ§×2þ{ƒ8}Ñ¿§Ä‹þ=Êÿf”!ÊmoëßÓeèÖ¿K(Öâ“ëÍáÉŸ;?„g¤,žqO¸ðŒ0sááÂ3R° ÏPÆ…g(ÖÂ3,Âóí6ðé7ö¨<ê›þ=e¨ ϱžÔ0?Äg¨ör¦ÑùÒHf.D¹®û'åqä‡i”£Ñ61ʾnýû½w:üûÑÖ¿ß]A‡3¢ò*F#,Û.³äW1áÒbôMÿÿA%YŒÒ‰wø÷¸*¼b4T{1J©£Ã¿§6þ7`FÙ;r¡Ê-Fãu»PLµ­Ïøð}Ä(}H‡çc1ʵÏWÏö2ZÿžêµÑú÷šøSg{.¦ZÿžRœi;ú˜¸kiý{Mx­o^«ò{mý{KQB>Öª”ƽVåz¤¯ß á·ú:ð1…vëµjÄ5{­‘×ÇÞŠ­×ªq7¶×ª¡kUÝ)Ð÷½h:6XTÍïkÕoÇZ•=ïµ*¿Åof—ÿ~;vYðßLo`sì³ØŒc£Ezajý{;Š:ñA/e݃^ªæ¦7’c›Þˆ¼6½‘Ùû —Í0½Q¡élÛÇN‹Jö}§Õú÷­£Žúãl€&ÓË©üûA/[x,\Ùó¦7zÃôFZòc§Åsšƒ^šŽ›azßÀ§C5?vZ¬ðØiñ¼èð½»õï}Õ[ÓË_ªZŸRTÛZýú:ð¢ðU¶>&.pZ¿ôF+à;§ð•M/]J§@¿•2½üÛ³ðËÐÇ9ßëî{[Ÿ ã~ñ㜀ïuø^Jχï¥n~ÐËQ6½\ØõuàÛQ,uœ°…‡ï…#j|ûezùU¶~éùVÀ·…xåßRT¥Mo\=~¬¨0›ÞPNMoÄ ‹^ꙿ Þ°˜ÝO”üÍnh´b7n+ºoøt5о |?q6Âär‡ÙøåcíËÀ÷§Êmr¹%úÍä†or£/LîÛeàÛB|@þ½½AšŽÓƒü)еÀ|áæö³Í-Ÿ▫õVÀw°(z[Fvø”zK‚¾¦ ü1EömqËϪCÀ·:*ôÆ–j¶°èyïÐØ8QËs™VÀŸ&D”¾Oz+àO™ˆ\±q1»€å¾ò§OàZ~WÞxÐ×_¾ÐNƒþ˜øgX?–è¹Ùˆƒ¬\LwøÂEéH°r ÓQàÓ8|J}ø¡þlTùŸDKà3¬N–»ÛŽŸ2Ç}’OÔQàÓl|æý±p›÷Ë+ƒh¶@åßø~|’Ý+ÃZŸR<ì<èkb¿î•*ؽFøõá^YʼÆõâæ•üÿ:caÀg›2Ð×ø¼2§¼ÖÀÇÄSõÖÀ÷‹Â³: |û&{X~m~«Ð6Ľ¬ 5ÛËÚ7 |¿EôaG§ øßÿ^ üï ­ßLåö])Y˜Rn-'pé‡ÖÀ·Bø¢ÖÀ÷}©U͵¾Rn5¬ü±²ó o ÙŒW¾òÁ+åñXVhbCõ=å³ÌlHÖ†6*4µ¡K×6¯L‡ÓQàÛüûÀàF<·Éå¶·5ð©0î|7»<Ãì(ðm!¸ÓÛQà[ŠB·éå¢ð‹èHoÁÁÔb7B³…nä&¹¡Ý ܳÅm¤æ¶T[z!r“ ÚºÅl”²Ôb¾ˆXnÓ[Z@©Ù¸R6­8±JqÚ¤R7¨´ˆSL)&H™·­cÀŸ·Œ‹Ã…hhÓ"”µµ¾Îëß ÷â“ùæZÊ„Ò->96â“Ë᎟÷¡š,>ß4ð)ƒ~ûŸoø;Ÿâ3”nñj²ù â3uñ‰èhÄY Ðh›DôB4Tk!= ÑxS1­£ ¡èðK_‹Ñ¸ZŒF¯åQkàC"U^1Ëb4þï£ÜW·þ<‡çš_Åh„ˇ¾Å€?µ1ä³5ð±ÀSt ø´€o*FCŸ£Ñj1ú–}žÃ\íKÀçk„ãm ü2>b”Þ¥5ð§ :;||U i$‚÷tÏHÔÁ§Bžtø˜Þ‚À·X$´¾&tE‹àû,Å*\/VCÎöb•‡&ß¼XÆ{±WN‹U¾—«o÷€oGñ•Å*e_/VßDð[…ÇbõEßR÷=û›oÇ‹÷b5¢å½¥Ûk®ÐZ_6€é •îc§Åñ:è}Á/ˆvøÍtlµ(ôRÀ5½!ûšÞÈÅmzß² _¾Êï½”έõVoµâÎqÓ-4½¡íz«â¾é¸÷c«EéÜôF8÷}«ÕAà·Ž:è%¦—ëƒÎ‚>¾/6dÃôòÿåß ñ9tøVHÉÒ[-®SZŸR\*uøåY-‚)‚‘M/_¹Eð-ÅôÒt £ZßW¦ì{ÐËR÷s­½ðl-‚ﳨ>ôR6½‘Hü8Üb©ã àE¿x즗 ÃÀoløÌ[ßñ¢œ}ø^–:èåP|/Óû~éùÁ·…TºM/W¬¾¢}+¤ôkz#ó·éeT_‡O…q£·é¥¢Ñ÷€O©H¹mz©Ÿþ&zé);ü©/w³©ÎÍ.åÓ΂¾íã¿f—Ùz[_‡h: ú˜¸ÃiüÖf—jÁof÷Mßf°ñf—ÿýtø6ãESˆÉò¼ôä?./ ê@ð­’±Ñå/F-„?¥x¸øSäFòtËÓ펿½“¸pfa!xµÔºEíÛ]àO"Û¸¨nõ9Ÿ#f#Þ\ÈÆ ‰Ø°Ø7|¾5þßàs„|Ê€­Áwø{ƒa°{Ÿ$`^ìËÀŸúøOö/¡ú¦‚Y”WRiòQ'ÊåR§BM0¨ø":| ¡|jÿÊ/ì—@ qZ F³Ïø+€¼+WÃ}øŽ{A 2Å@_¾…ø¤Ã¹òg;×Îí\#©¹kð`çÊ£²¾ |ZÙ…•îû¦¬Á§Bî¯û2ð5Q˜ö²–ÃØ"ø”âÞ°Eðme¨Ë Û7ýûR› ¬Ýb6’– Ù·èÏsÞBÀ·³j-^)&‹V ãf`G€?OyÑ¿ß Æ”¥|¼Ž¢o)ПçGžwJQX|âKhõû© î³Åïé~Ì-~|Šà éYpò¼¥Åï©íEü¾†yÛ‰20£ÕïGŸ>¦x¥c®'%ÇB•hs=z¢CÀçYqù¶Q “WªÙì•jHÁ^©F…^©rQÔê÷¥7:|Mx忽—Wª<\ì;ÀwP(ê+UF½{¥1åÞ[…àß\uø6ƒïu¬T)Œ{öçâ¬CÀ·£ØøûJµCÀ§ÅÏV¿ÇÄå^‡€¯‰}hzù9t ôÛ³îû¬ßQ¦êxЋ>ì;À÷Yø”;ú­Âƒ^*Ò½Ô`M/]ç÷ƒ^6ã8 Ä}ì³(Ïû,–:Î0‡ôàÛ4ÝO:ú­Ô±Ïbo˜^¤~?öYìãx€-¼ÓÛ)Ð/ßr«ßk‚?ìèûðýˆØ½¦7®s?|/Éã”ô¶ú½Í ÉôFµéå/b¾§€lz¹eîð-E¡ÕôÆ Û½ZMos‡ZÔ±zi2½‘Ýô†éð½ìãd‹ú¼é¥Óûqœm±£zYáqºÅ÷:N h2½‘:ýX9ð½Loþ÷•ÃÃ÷òDó𽔸Moh潬ð Õê÷eNé;ÀÇáÒ¦—›ËV¿·•vÓš¹é Í\ô¾]þ<*‚èÍ.u ¾|Úáæf7$x³¥Ì.7ç­~ïGÎ!1»ü §Õïm!eg³ËÌÍ­~O©¸oüX7'³ÿ˜Ýó7»Œæû)vãÊl¡ ¶Mn¨š&7L"7DdËÅpÇ€o'Qf7·ÆNƒþ”ŠHoïÑ(üšZ ¿r¹‘B^ÔFß Ú~³oIÐçë À,b9+uøS&îà¯Ñjáqú¢•ßg‡€OÛàZüž"á¾ßK‰ÕCªÜu¶ø=£ŠÚ:|,TžM*ïOéð)D™V FбØÊÍM‹ß—f ÓH[.Lã2taú¦}¿;׎¿´À¾5ËÛ·F*xûVþàÒà3äqm·}khÕö­<ôê,èëøï€}+áoñ{JÅåë‡oe…Ǫ–¦c]ÀŸ(ì[ùÕtø6Œµø=&® Zü^A‹ßÛðR-~oÏS’>ÖTOí_#–Ûþ•?±µú½ß<åy¯ øŸUëß[ʇþ¿WÿÇG§c¬î] fÐêÝ‹¥:w-<…SWuí”áÔU=»ŒGuìZ0Õ¯káWKõê¥LÍ[c¡¯(‡°`TakçåÖ*Ë\ZPÞàÒ£å Ö‚ÚÊ\Ê”+ØVãó,Op±”# c¼Ê\ú ÜÀ¶£P^àÒ¶rk¡¼\N`„Ù©ð5¡Z¿4ï³9eÈJG€ïPðY&5rqÕ0™ÕH?~ÀJ‰¾œÀ…ˆÀo&óÊ9ô³€íƒX|µŸïȶ>͈ wCËÉ·ð-Åî5¶¡W›ÛPï nHô&7ôj¡›©éÍ.t;|å?¦—û¨ÀŸR‘2\ð†–-vC˺‘Î\äò8´õï§å-n¹”nýû)ß龈Z./û ð)ƒîéøï‹EÈÆÅå"6¢œ ,EcñJeZ´‚ð¾üi "õEý~/!J©q‹QV%Bù#^_>CÆßÄg ¦ðäÂñ‹èŒdæ‚3ÂÂgX ÎÐJg„ ÎÐ=g\m816}øàDe\pFH´àŒPeÁ³áh}øûçñ!8ß.p¨³‹ÎhµðŒë·Í'k“#ˆÐàÀˆr±'Fß‚¿§ðµuôKïˆÑPàÍ(G3JåUŒÒé¶þ=-;­åEÿžoŽeì@YFŒ’ªþ~wû_Åhȸf”*·ÅJ¡ƒ¿§ÕT’ÅèÛàS†µÉÆûˆQ&iý{z”µ‰QžÏ·þý”‰4çf”µyª‘û˜ê©õ{•ÙÑ=Õ¿¥@Ú÷)âð=ÕGfo/T#¶úØNal;ú{ŸEóX¨rCu,T)ë[*–òB•î¶õïiǾõï1E ²ª¡{¡é»…*[è…jd˜?ªåoÇB•?%ܪߎÝ>žŽþÞA¡É U^CóÍ ÕPè…*GÙôÆ {,|ߎM[x,TÉÆ}›Õú÷¾2íèï1‘ùÖ¿×Dö —¦û6ëû±Í¢2zl³Xá±Í¢BÐK1ø —’¿éˆlÓáÇ6‹ÞZÿÞž§&mzCä6½<ýlý{…}xœ¼èß·f˜Þàð½ü•áð½$êð½/ú÷4ƒ;°Žþ¾¼×ã.¥õï}/`ÓÑßk¢ÔzfQ45½!›Þˆ?|/[hzC†7½üÍð‡é¨vÓËž;ú{9ÿ0½ÕnzCk7½a2½’ø^6ãNoG_¼MGïP2ìú8Ý¢é~¼õãð½üÙâð½lüá{i2½åN~™n:ú{Ç l§@_OHM/×k­O©6½ ¯ëKÀ§T\¥mzCz6½oú÷V·Ü×€?&ª‚üýX¸bëàï©.âÌÍnH÷f—²nG?2ž¸s Ï£"~Úèòóïàïív¸š–¿Ç½dtC…7ºŒÈûÍèòêξg3ŒnŒþq¾EYèFÞm‘ËÂŽýÞ±ç¾À}Ë>Â&ÛPPmhÜÆ–¯Ûò÷`ÆGÉçòd®S O¾’¡¥,-h#òÚÇ¥ŸB6îó±d¯ïÚcä-¦ÆŸâ5¤láÊFçٱƿv¬!pÛ±Ò{þ²c»¼-v ø=-ŒÎµc<æ^DFr¯ ÞnŸgñä¾µï1ñ³Ö¾×ÓÙÏ/ãÕß[в¸ë[öó-õ¢}¯ _UkßkºißùÃïÔ¾«À?ÿ»ÿ÷ÏŸè}¿|’݇,<áùj ÷Ü×2߯e~\-¿¹mœ›®–_¶ptýxÅ/KjßÛ;üÞþ£ËÀ½ü'·¤üg[°¼ý/¶ Gÿ«- è¿ù}0Ÿý÷kü[ÐÿSî‡þ—ßÏùß¶à}þϵÕÿ×e(v¨9šR¶®´ï"^ißb› ì7›ø,“!ÈF5m›UlUð÷í«ìç2Qþ«‡—7¯¹þ\ŠšØH nd#Vû`–ãehùWRiß–2¶œV*ûù– Yü—šÜ/£ïev¹i,í{›ñ‡Ô¾Çwo ^RX÷OºJ}¾µá£ÿ"ryR·omp.%}¯…¢¬°$â¢6’h Úˆ<³qg¹ÚDlÜ–:¶xMå{^”³XewšT„Š‹S–0¥Ë ijßËMÜý=†øaB€F·ø|‰üÞÚØ4ùÖHo.:#!¹èdÛ*öûÒêŠýÞ¥Z-:ãúqÑÉ[v*öûöœ+¢3j‘ŒÛtƒTì÷¶ µï±Ä•å¢3"¼åL#"Z|ÆŸ”Ý-ÑH?/D™ÌéCn4Ú&/m3£TßÅh¤Æ— ÝÍ(5\OÿT„Å(ûº´ïu,#Fùý|µ¥únšÚ÷úV*µb4BŽÅ(g„¯b”Þ½ŸïŒ@ý_Œ†’.‰ÜÅhèå{™^®è¿ß·YßzÙøƒ^šzÙ Ówa›^N uý·zƒÂ½éå’¦´ïkôRt6½Ñ Ó˨b¿÷YüŸ­b¿Õ >ëØfÓÏ2½YmzãŠgÓ˳àÒ¾·…ü3ª2ŸëûBÏWì÷mP*ó¹L”>z©ÀšÞßKÅüð½ÔôMo„4ô²Âƒ^ J]ÿ­Þ`©ã\‹¯lz™\ìÇá{áÙ*öû6q”ö­ñâ+›ÞÊ»ï­Ìçz+4½<øazÉ|]ÿ½ÆŸ¦7ôèƒ^4£´ï›ï-íûö¬Ê|®¯°•ö½¦‚Moˆ°¦7²‘›^ùÕýßû,^[™ÏÇÄûCJú^ ¼FIßצ›ÝˆÇ6»‘<\ìrÁVÒ÷<*n?ü.>…Šü¾ÑTÒ·„oer#ýºÉåVª"¿Õl†Éë&7s“û"}ëY˜Ö*ò{‹Â®À4åâ–¿•Õíß[ÅSQRì-'hù—be=ß±Ìl ß[聾½ d_â¾·6ŒßOïÏX›xå”_WOmqc¹x ©Z¸F¢tёՂ5ʈUÒVÜ÷¶ 3i ßc‰Ûã jÜ/Pé9*çùVG¡X˜Æ%ÞÂ4n 7¦ äµw¥ŠX7ï¨R§Ü—ò½ÍfŸ"P«¦D»Rž/‹,ãUaÝü½ÍÆüSÒ÷VG=Ú±l¶0}Iy.OÂ!²_}‰úÞRœ—Jù^—õ½¦·íW9WÔ÷µBûÕHho\ù—ò½ò˜¡Rž«…«ŠúV3hòŠ€ç^õ½¥8—ò=&þQZ· aðKø–‰:õ±  éXPÂ>¼+_ËËYþùP·Æß¥þmÐ÷_>ý^áûÓß<®ÿTU=’8O±¯–êÛ-“Â÷å9Õµc!1Õ³[†¿4ʹBláwe G÷Z[yƒi“W”7X z§¼ÁX¨ò”7X ÊÔ¤µµa¾/g°´º&­±ð·\ÁX¸q,OpéÑr[¨–Ø2 µÜÀÅR^`ÇïSN`Ë`íP>`-¹ºö[ô-ˆkáûÒˆ¾/-¯ ï[UÖók©U me=W ©Ì–ØfPÂ.'pka9}/ö†ylî6" Ml„9YN¯ô­ò• mHئ6b´l €¹å÷þÙà¾d=WGáÛ©k¿×ÄuÐg±»ØûÀÅ.ß·"¾çA‘!\äF&r™ÈÅmܪ-l#z[ÔFA·j‹Ù°Ù°E,¥ÀŠøž>qûð¯„+e|ÑJIÚ¬F¾óÄ)…rQJÍ]ŒÒ BY•ùd{åXc`Dg$uœ†àŒ }Á¹©'Ï9+áùvÞ§UïÇûð„®UïÇ£¶ÁɽR]÷½eð…¶êýÔÆOª"¾×B½Upro\×}ïsø>‚3bÁgĶ ÎÈQ.8C?¡Ë‘¾D|O«#†^€†²,B#V߈²¯Åh(åb4®c£/¢÷LOørë¶oùcÜ!ï¹M«„çS†Š³å{¶æý4€_BÅ{of¼÷…ï&”ª® å&”ª®%Õ­yÏ׃ٴ5ï±`Z¬xïý©E‹ÐˆÐ¡‘#]„F†r‘àö /š÷eL(ßÇÓËô†bPm>|/M½|/ÓËŽêºï›jÑ{;ŠÏ:èeG™ÞHoz9e·è½s%»×ôRð¨€oµ*úq²ÅÞ¸¯*àûÚ Ó?)˜^:ØJx® áR*à{M<ÂhÑ{{>¾¯š^.[ôž CH5½o¢÷”âÿ•ð|+dúÚ½ŸRq·àåŒÒš÷S&‚ºn¤'7º!¼{¹Ë#d‘˯®%ïy[ÀW¸·:êõ}ÑК÷ºBŽý}Éû›ÁýÄ! nü„`p㯆ÃíÂ=Õ]ß‚"ºÁ¥Õš÷ u`q9ÃåtC µ-hC³<ï¬\çâ/Ûš÷ÓìÐío) þ´¿ÛËÅ,7u?Å,÷?…,s¨´è=­£H|=BhÑ{ÊP(°qA¹xåoBí}khåߊí=eB\«ô-z?­Ž;Í}Ë÷¨q³»¹¨Ï Sî*Ú{[@‰Ø˜¾hÞë¨0Ù¹F̲@Œæ>èbÄihõ>è‡ע÷Ó:WáÞëùFö¬t4-zX/¢÷8÷Ñ{¼t8Vªëv¬ŒXùeÇúrÏ·++´c¥<öëX°ûŽMv¬?~œ%°ÇY& ½$®#ZôÞ ½[©Î×Û^ÏÒEµè=£EZÌÒµæ=ãÈ2B–É_…,Wh•å|kã Ù¨Í Ù#ý9äî?þ^¹û¨Ít]Õ¯ká¹¥,ÜäV¯N™ˆ%nç²…ké«¥zužCïQ½z±T¯nÛ@rõê¥ÕåÆÂ=`ùµ ¶š®ÆÂãëš®¶ Ð/?°ôA¹­-åîµ ¶š®.Ï)°¬ÖÊlà9å.”X ÊÔ÷¿L õùïø õõ_,-w¯ SBËÝ·Rõõ_Ñr÷åZî¾UXßÿš¨3—XÓ‹Ü}饎ó^Ӌܽ&Vh\#[¹y}Éq¾ÏâB᳉ “‘å™-wo 9(†–>´ã¼o¥Œ-—¡ç½ÝË_ îKŽó+6F—?¶Ü=Ïb.¯Žó~L!º Þ¸“[ìòø¦Ã¼ŸÚB ¹<Êê0ï§LèÐâ6äNaÁ¢6,r°q¿¶˜e¨he8Ÿ¶ñx«õî§Õ‘ÊÛÀƒ|‘ƒÅ€­ø.¾ˆUV%R©Q‹SL)ë¤/z÷bQ]„F8¿\+µ“Jq>=áÉÿO¾ˆÎ¸f^tr ü!:Cˆ6Ô3M'†¦ï!^¿ï‹Åt²Œè ™^tFZtÑÑIùåCtFqÑÉ=\¥8Ÿ÷¡Ÿ­çk¡°.>£ŒåÈ}ˆÐ(#D£mB”ì|ÈòÓóÏÆµžåžôCŒ†è/Fã’q1æžþ)gŠQjºBô%Ãùº"VfD©Ï шù¢C,D#–[ˆ¾Üð}™DZñž„o*D#[¹å–髈m!êµ}‹òž‰‡ QþS7|ïd/ÚQÞSµ}Ïôñ³Â±D¥ í5jtƒgúˆƒ÷Lÿæ½ t¬S©Ozɯu*Ky‘Ò^§rqóÍëÔP¡½N ÜëÔÈcî=U”ò:õ-Ì{:ŠÂE‡y)*ô´Ïô­xo…Ôx½Nå(·â=¥¸øhÅ{›Á ½Nå F‡yo…Þ½N ¹þØ_ñwïû:µ®øÞgE €ƒ^êä½$êØdáËë0ïí^˜*Åù­ç;Ì{Ká½:Ìû2ÊuÅ÷µÔÞóÞ )®ôRþ5½<ÓünzC]÷™×Óæ}à»éeú¾ºâ{KQønz#zÙô2[e‡y߯ë8 &oz#¤ü —}xÐKýßôF…‡ïåx™^.}[ñÞ÷â³LoüCazyÓŠ÷bC©ÙôF)ÓYÂïgYæ½³z¾Ã¼/ãÕŠ÷Åý8èeøA/Q¥8׳¨ ¾—-¼Ÿiµâ=-äGÔŠ÷6žôÒtœP 7½!ò›ÞÈ mñçÓÉå•ûÐô¾\ñ}óæ}qæ½EuÝô²{[ñ¾xÑV¼/Du˜÷eP:Ì{[ˆžoÅ{L‘¬Üô†vmzÃdzC—½<Êî(ï§¡6›Ý¯ÍnÜAíó†µ{GF%WäR,mÅ{»¿\î1;Êû6Š—;ŸJp®gQ 7¸ .p¢RùÍ·¾ø£ÁÜr¾kÁ{Ú·»›Û7Áû)Z¦°K·EmDé ÚÈ\-f¹Êü)d#{·‰eF ÞO³ùSE%7¿}-xïwßÓQÞShiÁû±DT´¥¤k`ù€å–»ïç9<,©ôæû¡±6áÙäEkÈô>BÀÇÔ‚÷´€¿ØÇ2×C+ÞãXH¨F¾v‘Jò;Ê{:›Ê±Oa)Û^Oa‰Ó¸ [œ’úòFx#Aå7>lH¥—¬çÛ?K*ÏeZñž>eašû±¤¥†/NãeÍ)E^/ B@·gÜðö¬¼:¢%ïõN”¡-<ÇyO©øÑáXÐ’ˆc;Æ÷ºoÇ~Û1ªüÇvŒ-<–€¢%WzIÀ¬™ç=ãØŠ÷ø¨ÅûRFÌFh¸‘¥z-d£Œl}S¼§mîUÞ÷{ï¿Á=T½:–8lµ…'Y¶`N(O°µñ/f[¸(¾ZªS·ÕhAuê>‡_†-#׆‘(?°Ïªå.ïSnàÒ‚rKy}œT9Ëø”¸ŒO¹€-ƒ>(0ê—å¶ z§¾ÿË›ÖçyŸúú/­®ÿR[}ûk¡€ZßþVGaø ”¦úö·B€Õ‚÷VH9ùŽ«ã»/ýú¹¾ÿ[ Íj\~mXãnñr·gÕ´u3™WÕ¥Þ·ŽoÁ{*ŒÀåY|h-x_Fÿ³¡å€-xßåÀ[ ÞSŠ''ß}ëy“ùÕ…n¤Ã7ºÌžÚz÷<ŠóÌgÁË#•ð~ Eîp¡ËD\×|ÊÁ¼ÇBo-nCn¶!Ÿ‹Ú·ïç9Ìš\WzO "ã¶;¥M,ßÇÀ¾ÞO à Zðž.€°,VᾈTVeN3­ùû3Ä(_Ä„òé4þkŸ‘^xF÷ Ï(#:Ã"8Cœoiͧà ;Àû±Dm‚3Ò§NªÀ‚3„ Î:–G cÁIÅ 'F®õîAZ¯àŒPi9ÓãÑ6áï#>#Ù·÷‘2B”Ž õî9Lñ­wÏh¿èÝååJï‹c«+½Ç!ób4Ôs1JWÔÞÓj¸¼¯r ìÑñ~Ÿñ~,ñ¯¦ ‹áb4¨ÅhȬb4äf1ª­Däb4¤p1úâý>%}£Ÿ¯b4‚¿Å(§—¼gä^ïËø~”ʺgúЧ™žúô±Hå/žêãânOõñ“ñN¥€êu*Kuˆ÷óÆŸÂt_§vˆ÷”z¼ÇqÜ^§†0ìujDd{ º×©!]{Íð¬¡ëžö¹*jÁ{ß ßû·cŠ¡lÁ{JE·×©ü#£îôÖ³¨O{áä^§Æ³Žuê‹à½ïÅÆ›Þh¡éå?‰×|_™’¼éR¦7â‚z©j›^þ Ð‚÷¾TÓy²½ËЏ`Óˬ&×|Ÿ…Wîïí ž/˜Þ¨ÐôrŠoÁ{*äé[ Þ‰~¨õîdzü–»/€v€÷º ×wv¿›Ý³IãÍnHЇçåðÛóÒ5tVóÛ{™]®|[îÞ¤Hnvù÷_Ýè-oHYØì†T{°ûà½g…»TqÍ.EŒ–»/N¹åî1ñ¸–»·ÔêÍ.ÿÿj¹{ŸÅs³Ãóò½ìy£ñwÏÛr÷<‹ŸÐÃóRL6½oÞË<ÐK“éåìÕÞ¢~˜Þ¸ßüX7ðY¦—g-woo°{MoÄ~ž޲åî ‡-wï³ÀFËÝ—Ai¹{L¡yšÞÈ4nzC¸6½5,zCy¼”ÍZížö…¦mv#É·ØeDj]è=õñGÃßLn¼“É'™Ü¸ ü8Û¢<}KÑýX3à+i½{‡‘‚¼É°z‘7ŽÜP®%eüãl‹t\΄à½ãH XàFJqqÁj–ËÌŸ¢–a#-x?MˆÚÌ,£m[ð¾|­x)J‰ÚP÷mÜ^.f9sv„÷4Dt„÷c‰xq°¼Ÿ2qÓ·€2¯Ô;Äû©Žw7ý®‘§Ý]/Š÷¼*5wÁaá>D`¡j¼H«“jˆ×â”»ï§Õ‘úZœr™×‚÷űµà½`½ÞÓÛÔJ jÈÃ5Trq÷N‹SNÈ×|NQÖ낸Ÿ[¤Ò ý©¨îôÖ·Ç'Ù·†NnV#éùá[á„Zñž·Šë¾í[¹²êÌæSŠGAu§÷š" ¾+?ÛÎl>ƈ«Œ}+Þë¤hòªàMñÞd)aËÑêÌæãqà‹:È{ÐÄ`Õ…Þ"†ÚúA-MWjÿ*jù‡Tg5ŸÖ¹ ½ÿô{Eï?]oóK$)ýô—µðR–¸¤Íô^uë¶€Û Yâ¾[8ÙÚÂOÊÏIÑ{ZÀ º\ÁZð¦å Ö¶Ê<–?rUYŽ`Êpn,GpiAù-ƒV—X ÎË ¬ —¸´ |À¶K¯rkAmå¶6”)°eжúþ/ýVŸÿöåëúü/ÐQÞ—žë¤ækb…õù_ZÑQÞk¢TnRÉc‹Þ—®è¤æ—>ï(ï5ñYånÍ(0&ÎúŸ^)æÀ¤½·BŒðg#òµ™ðjCK7Т÷íYÆ6.ß6· ƒhÑ{;Š?È¥Š.t©Mu÷ÔÇnº‘^èrß×’÷@ñèïÇÙÁÅ-ׯ-yO™É{,|Ž åÞý‹˜ ‹ ]ÄR…ëïyS,R;Æ{)‡¶l\Ñ×ã=µ¡ˆYMÉû)ÁÇ‹SöŒ(e 1JeÛ„âáâ3Bß…gù‹Î±œÜ(}œü®:Ä{:™³ÎÑÉ” ãýâ/2Ô|ªcꜽÿ›ê ïÇ!ÖrªüŸ¸³šÏ°aòï¬æÓ8ŒOg5 y;T0tZóùB^Tïa _U_æ½Ê' М¡!Ë™†,F¹6ï0ï§ QÆž”¶0,éâ”Kö–½§Ø=â4îa÷üϱ§ñûƒ8 éßó?œuËÞ3 xÓ–½§Õ`¤eïÇR¬( ùV”r:³ùÔFMU”òûþ*Jßnóž1e«iÔ&'"º }“½ç9lµåþÊhËÞÓ1J«eï)ÃçˆÑ¸‡Ýs}„s=ñ\9Ê)K¿z²§ìÌæ½ÙW‘ú)‚žj(Çv©¡{¥ЏWªñ,¯Tßdïm<ëÌæc¢wøæ•j„€Û±Æ³¼Råÿ*ç=Ïâã›]k”òJ5ZèÙ?Zè•jÄ^{¥Ê¡lÙ{ZÈ…eÇyoÂùwfó›ÉôFÔ»é_L/—ÙßLo4ÞôÆ+›^þšÖqÞÛx*Ǧ7Ro›Þ7Ù{‰z‘½ÇDgۙͷ5Vï³@ËÞ[êEö¾|°ç½Í€êÌækb3L/QËÞZ÷Þ ÙBÓËeb ßû^l¡éßLohöÇêô~7½‘8þØgñ”ÆôFìõá{™9à —‚þ±ÑbG™^ºÊ¾/ãÕqÞëm_kz©Ûtfó }÷eP:Î{Ÿæ[øÞ i:èÅ ´ð=¥¢…¦—ßr ßÛ VxÐK%ýNoÇyoãù‡€é埸-|_¾Ê¦7gÓ7}ô²½4™^þeÑÂ÷vÖ·}÷ö<ûÐôò×Ò¾·BžZ¾—¿ôRà<¹”EßK1ÕôÆÝ̦÷ÕÙëvì7Ã… ï‘aô_þæ_ÿéo;±ùÓÜv^ó±° F÷M÷ž¾} ó~LÜ˶ص‡ßeÿ™Üˆx7¹Ñ “K_ØÞÓ tjóýJ@n ßcŠn7¹‘¿\äFºÁðÇ¢Q\nõ~3¸Ü·µð½mgšÀ Ô‡¬¾Îû©.™E-OÌZø~ÊÄÕÓ†6²”Z̸­{ïQ[µ!ËßFì±Ü-—˜­{_Ú-d#ç¹7h/º÷S§‰ô~,‘uݸFÿWÒÐÂ÷û÷Þ¡ÞóFp³}¡÷Œë‹ð=µq Ä*×?…êÛ}ÞOmÜBÿ¨!eŠÓËÅé[¤÷ô)%lqyÅï ß÷y/sTn *-wP;Ô{:_y'7‡¡…ï±`ˆ:·ùÔF˱*x õžB|ÙõRå?–´ÔïÌê›î=½Ç•uëÞczÓ½ÇÄ…pëÞ[Š?N½øÆÇqß˾•^ “›_šÑº÷˜BÜö¢€¿Ct¤÷t<€éHï±P´o¹ÍŸ2Ôò[ö k3²ø8:·ù¼Q4ûXP µs5½ÿü{eï?ìÍh»O Opª[ׂ÷­n O˜ª[÷9ÜäÈ £ºukãJÆ–”½÷9tG.ƒ7­N2\¶•#ØàMˬïSŽ`kƒ¯kËÀR~àò¦åËzZ^`-p5a],å¶mè·š¯.oZàÒ¶r—~«ï-¹úü/½S_ÿZ¨_Öש®eïK»[ö¾•:8¥ìM©¯ TnZÿÇø¢?¶­Ã¾çMñ§ kýûý}¾ ÓÈ .L#€Z˜†E˜FmÂ4Ú&L£Œ(`uQ-¥ñ€(¥öUÅÖ¿Ÿ~‹<ôö§X‰}5¤oyÎÇÍñÒ¯Çr•Ò¸]j(Ùv©Mo—úö=ÍÑÔKÖÐ8íTCB>vV”Z½dåiJç9ßf`J웽ׄÞhý{Lq´—¬o?wtôRÈ4½¡I›Þ¨ð¾ájýû2Êçüf:èEvØ÷²AÅ×ô†âkz#ºéW6½qõ´é ÓÞÖ¿§ñô¡ç|L‘8Ýôrf웽·uÓK¯üýð½/ú÷ vHø½=Ï Lo$Ÿ?|/K™ÞÓ7½bZÿ¾ôáÓ¼¦7â™M/ìjý{¿eÊŸ½èùüžR (lýû2^?L/÷­o…ÔÚM/%µ¦7"ÉßKÕÜôFoÜ}oëßËåêÿOٙ倒ëFvK¾×v• 4 Üyx=ÏÝ éõ7I2ôN¤>ê›R)1• ‘2½üiÑÍÞó^<Ê`zyÅ€¿>˾—äÒ¿§‡òX9PÉ>èÅLQžóaƒ&Ó²M/¿Ë üž>ÄÔSà÷`C“éeÂ]å9¿`#ü1Eø´Èø$ÿq¿Öè†x»èÆßK.5ÆŸÇzVò÷¼Åå—{Y?—[.j”弫 ]ÜØò(ªÄïy6ÂØò¨’ÄïC*ÒÆ6"ôÛ8s`j#˜ÝÔÒÙ)Ëù´SNâ÷Ì*ܦ–ÁÿZj#z¡ ©x™éE–›c¿ŸÖñ®{½›eбKl± e9ª‹ ėظÂ|‰ì lX–×Ðv—W’§˜ï§moÚ÷c‰2Kë[’ó™Lp‰’¾gb……•QÈÒ¾ŸB\(Ëùc‰ž[T¹d“öÝNhAåb^Úw—¡€»˜FôbÊ“,¿Óˆá]L¹Û¦˜ï~SªØÇª€ª©WœÊ¿½×EÁË‹®ï¤}Ïè±”IeûL*Üûo/ ¢yǦ,{üð­4 ZÊÎö­!q¾•¥î› ºÚ»û".éö’€ŸiE}w©àÅΕSZQß]*òËΕ*²+7|uµwû" ÌÞ E_Hü~w‡ŠùîÚ0öŠùn Æ^âw׆O±.ön Ö¿¿/Ï1³üÞ*ä{˜uAüþ㯊ßt¢ó¿Û÷@V¬C æèñêÖ©û¶ðgõj©nçp™µ–ø º '”-¥«¥Á¼Ê”#˜¶á9å.½S~ -Ü£(70e0 åÚÂ/I9‹¥|À´ýV.à2ÚåÆRËL«Q[ÍÿËûÔô¿ô[Íþ !5ù/Ýì=¯J­º&ÿå]%~O)*Áæ”Ë.Å|O)ŠÄånÍ0ª‘²¼\À­…åÓGjŸÊ ÜL妔{Í+×eJt>¥¨êšØè #—~/³¯â÷4ž=PË¡4¶D]‰Î§Bêý¸/â÷”âP]î JüA9àe…¦7‚{—Þ>^®G•êüiÃKÿžqDà±É¥Zjp©ñ.·¡³/¶‘†}©å¿´â¾§ëÐ63˯Ì"Ka|®ÊtÞÚaßÝi0,ª¬ÊÞõEüî‡`¤?/¦\À^J¹’úýÔºøzW.†¤~wLE~_j[@)!Kú~ÊðGJÒw×ö"}w´@Êw—A*î»-ÔÄÏPƒϸŠzñ¤c’ðÝÏy¾ÛÂîÅ3öÅ“"–¾»6ð)Ý»{‡ÏY@ßtïKÛQ²#Ùûò¦ëKã²òe4„üe”$Jõ~žµ-£Txt¹÷S&—›Qr°ŒFDú2‰ËÀßOm©ÞO ø³¯¨ïnã—Qþ=Iõî2Tb—ÑD^FC]_F#qùºÐˆÓ^FCŸ5£<`F)÷.£QÛ2Âò~òã}–QnCHõ¾ô›¿÷<•°Œò#Õû©­Îc¸ýµtô^§FfwíC¯÷×>É_{†(ê»[ÈàØoF5Ôa¯UC+÷Z5Vðߢ¾§ø~Iõž>.R½§f†¢¾ÇÇ.Õ{L”ÑýÙgl¢¾»Tœ†öZ•Ÿ>©ÞSŠ-ôZõ-êûöÊþ¿Š´å^D„¹Ù¬ð^«ò¤É7Ó¦ƒ^þôr¼zÙó¦7"ÌzyÞÀô2ã‘n÷î> =Ôô2‘‡’w)ú Ýîݦ¸ÛëU.$¥zÏPR{5½‘ªÛô2/¬¢¾ç½¨æ›^~v”ì|Þ‹'öMoÄo›Þh†éå.–Tïé(jʦ÷õkÓËÔR½»Âx–éå“Tï)ÅW6½anzy’÷ûA/+<èå{™Þ8o`zC{=è¥Fiz#|÷ð½Ô(M/½Tïî(ö†¢¾ÇD%ÚôFãMo„@›Þf6½!ˆ›Þ7Õ{¦;ÊôF…¦7Θ^ÎJ©Þý¬0™Þ”ƒ^êצ7ôkÓË¥ª¢¾§<Š`z©þü8ö Xê —£|ì`.ÿ8v¹P¡Ò_Z(ÕûB”Tï1±BÓ—q/½üå’èýÔÇsÃ?Ín°‡çE_(êû©}«lçm¡Ô»ä†n·ËωTﮎý°Ür#[¢÷S&Ž >—{ÏǦŸdjé/ñ=ãDMÙÔÒ{þ\jCÿ_hßnöžÉMåÝÌFŠ3¹ñõ%P3iÁ—Ù^dß4ï§éôsÊtþX"y QwåY<%:ï.âgSßcz½ÛÄ@4]íݳ†J°ΰäSÄ÷ûLS¦óÆ’M¸+Õû)ó¦z?–PœWž›P¢óaßD©ÞÓAÔœícyÄE²÷¥ëbùÙûµ´R””ìÝœ°»—Uî|HöîB™ßKjh•ÞçÂL—ìýÔF±^¹Î{XÑs’½» ¥YïsQp^Rã^íTJåö¬ÔÀŽ}ØÑ{ƕڶIå+ÙµòIÇz+Õù<‰õëYö„}+¿í¿M+Ó")仟Rù±"à³¼"ˆ,^Dð¶½k@q¬Øö®\ê*ä»QBïJó~ÇOßïøIón õëE62 {)Z´™¥¸¾ÌFÊr/(Ázû˜ž½{ÿ)ˆÞþUÑûϽ¹·þá±p¿×î¿­å%ÑùÔÆ¿N—áÜ®Ü~Jlá„rmð`Õ«Ý6æÿ¬/ÖX0/Ê´…‡ŠÊL´­ü@[¸cWn`,èƒòÓoèër—‘+0-ÀÈ• ¸´­<ÀÔ†~+Ð.[kþ_Æ´¦ÿ¥Õ5û/–šüÓ6ª²5ù/…ñ}3ÕôŸ )QÖü¿ôƒDïËKévï1Qz-pkF¹€1Q•-p3•¸Œ‡"¾oïe^¹ý(Ñ{*doÄ‚>%:ïR\Dèvï1q¼h_DïiÆ‹è}ëÞå6ö÷#½å'“©Øt9(ËîG¦âPÌ÷ÓÂH¿ ë½»ñ\(è»M”8õý˜"|áKÁ—]î=*ê{ÚÕwÉ m{Áå&çgsK }±åˆTïA3Uï¶¼¨ÞË"Ë"–ß,óŠª+¾/M[Zy¶]aßO™HF¿.–R‰”ïRøQ)ß…Þ_qßmÁWFÊ÷c Û.–g3öÝÕQ°_JÙIßÝl¸å<ï&Pà^FCH_FC^^FC^^F¹tPÌ÷ûûHú~Ÿ?_–ÑH齌F Ö±òà’¤ï~åÿe”g~¿,¤!å/¤‘_~!åZ[Òw÷Ga!QXH£ÒHŸ¾ÆûRöÁBJIQ÷|?­æ&Æ—e4nN_F™SB ÏŸÚ˜iSÒwOT¸ Iß%n _Fù¯!é»k{‘¾{(//£Ü+TÂó§Ìî~]HùÍøºòðÚWý™„á«¿þaZLìòÕ¾4‚±íLéb”õ¼»•]´ 2,QQßÝ­”²íMiñ‚5„g¯X¥¨ïîò7ý»MQÊõ-ëy—Š‹ÅïËVéß]ŠÇÝtÙ÷˜(zÙI¯½l}Ó¿§BêÄ^¶F)/[é"¤OGQ…õ²5n÷€UÒ¿»ÂP— ni{Ùʳ8ŠúžQ¦¬krã¾l¯B5÷²5zÞ?[‘ÀÞ[ѽ¦—Ç8õ=Ýû¢Ï{ñ䗭ч½¬Ðÿ\q¹é µÒôFžoÓ*¬é+MoH­^¹ÒµKÿ¾€­¬çC^YQßm¢+”þ=¥^ôï6qçXú÷˜(КÞhMoH㦗!rÒ¿o-<~ºðߢ뾪˦— Êz>Ïb…¦—³ò»éhöÃ÷R¼7½<Ù§ë¾»tDßMoezCã<èŠúžW¦Èmzy®KYϧ{ᥠ}(ýû2Íõ}™æŠú¥Öƒ^6Þ¾—y?L/Ùõ=½Ág™^.ìtÝw—âêVYÏÛÄ€éß3ʘz?LoŸ],uìtQ]¾Ó+ý{ÿ¢߯Ëô’ye=¿`zùý’þ== +ý»MkzéR¤w©H—½ô†Œ¼ðò%ù{ªjÒ¿ÛIÀïË]éßO©Pp½ÜÅú¹äFó .%Héßý ýû±Dh·Ê8¦–Y"~+x}ÔôMmˆÜ¦6âÁ—ÚÈñn—Ë«Ÿ†–ÇJ~Z¦¤QÐw·=.7´4)ãùðB)r¡{±—Yþ˜(ãùScÀKÜ6¾Èò{  ï§ #p%€·…®}-·ôÝ„±Ð—i/°üóüÝTRä^?·š/¯ÜÊ‘üýÔÆsUJxþX¢{–Ö8‡`XyBò÷`‚9£„ç!ù»_–ÒÍÂJÏ&ùû)ó&7%øüò^õXï#PÊ^NãBosJt9 É|9å.˜äï~êÕ×½®ßÞë¢hpÊW½rª˜ïwì•ï|ÆŽOòŠ .÷v -©q¸=+0ý¶gåù‰ßö¬üYúÝM矎Ôï6qZ(ä»Mqû]+îòÝ¥¸]ðÛ®õí¢ï.&»VR.õ»‹qÝK,÷ë¤~÷<ƒS‘úÝÆu{w–e–ØH„~õ¬Šø~žZºW”b ,¥t¯a}4hßÿòWµïéàmî»ø£-±©jK|Om˜…Õ«cIí{,\¿º ݹôºk‰™æÚÐõMË \ú ¼@[ø%+'0•¸XÊ ŒЕ˜`|Ê\úº<À¥¶rcÁ‡§æÿ<–šþcÁûÔìŸÚ°8®É?½ƒVײêÂAMý)Ce¹¦þ˜ð ißSž¤€ï)Eq¶fÿ˜ÐßÒ¾§B–ªùé e;¿ †.ù¾ô’²ß^¹|Àí•Ë Œ‰º­yåZIÚ÷4ƒÝ{'VÚ÷­£ÌlÈ↖_ ]ò}ÿO¶|/s‰Ð .µ¥}ϳ¨éݨÐìò/\ÚwWÈÅ£´ïaƒ~ÔôÆÕ̦÷-åùSaÄ/¼ÜŸ‘øý”áOÁçE7äj“‹>’øýÔ†yðy±åï´ïntJßÝ=T„Y ܰyÑ÷{ÃL+5qÃ' +7<¥}w² –Õˆà^T¹‰'íû©§Ë¥}÷ |ißma÷,¦\rKú¾€÷þ²F¿-¤<õe! Ý²Õ i”YH#À}!åž»´ïç}bÒФÒ¸z!} û~žÃ%;o C‘—Q.!•ìü)óûmÊvÞà _!ñ»_•‚¹)|¯´ï~ËøëO™ÿX¬"Lz!,ñ iı/¤¡–Û—rãSßO³#°Ú®”/dJÙq÷ÕêWõã õã«Ï:¬<´ë¯>C¸uÝwEhâ÷¯¾„ï.Ã5+uj¯Y#÷÷±f¥$ê5kÄ&6Ò‚ûËÏÑ’ðÝ åcÍJÅùX³b $á{ú~E×}·‰a' üžRì(¯YCqö* ²ÉÝ0?Z|/¯Y¹Ï¨ë¾»…a:èÅì–ð=ïõ"|OÏóÈ饴ñÍô† ozy–H×}“á?¹é%6ßM/{^ßÓ£ïô*Ýù@YÙô†$jzC§6½œ¾ûYšnzyÒGÂw—Š˜pÓûø=¥(F›Þ·ë¾o}xìp¼LoĦ7^ÙôF3LoܳmzCë·ïåF¹¿û½¨ÂHøžA!¦—i4uÝ÷”â¾Ñ±_@µô ÷Eøžž‡û’ð}™æ¾g¾ßc¾§B¶ðð½TíMo$d7½¡Úû¬ðX2ÐdßQЦ—‡D%|ß^ùð½ìyÓKÁHéλB.–¾—šÞèƒ^Šé ­ßô2¤LÂ÷€Í><|/ÏK˜ÞÐ?ßKöØ/ H¼¾7Dâ…—9W”ì¼›áÇJ—XvãIF—©.¤{ߵ膨»äF°ø‚mXn¹ÙòÓ?d˜rŠû~™Ý mDHß]®tïqMŒ¿»\%;ïRüÊ(î»ÈúÌ,C—¥{O}ðgÒ½ÛÄ8méÞc⦻™¥è$Ý{JqCþØ@³¿¼^ˆjC‹¹-åûyO"(Ýù8Õ¿ÿ’òýX"£ø"Ë+dùÝe¨ÑXZ¼ƒ@õ{Ƚƒ@õv}¾Ÿ¶Em lÈÛË+Iþµ¸Ò+î{f-UùƒV«],ÝŠ„ï§ÂȰ´F¬ÿÂZ¾wºØÝ‹jH–ÞDÀ)î»Á¿N1â üî™IÉw9˜á唆ºêû©-òn{Úûr ¹—Shð=ãJµ|A mvAØs/B·k¥ÊlÉbŠKøžæq(ìZù$á»Kq3CÂw›Þ„ï6<Ýô=þˆKønSŒ¡}ë›ðÝ¥Þnú¾´PÂwÏJÕK,—M¾Ÿ2ÜÍðÝÊÛ ,·9”ê¼Ë0ðüêX%|÷ÄÀÀ+Õy¿¦Ìß ì‹ð=D¸Ù¾ÿõ¯ ßÿúß‘žõÃm‰ýY[ð£R½:eøGo :¼zuZÀ?‡ësªWç9hAõêXèØÖÂMr]†g}Ê LÛð>å¦ `(/p±”˜Ú0°åÆ’Â÷Xðœrc@å¦xN9€±ÀÙÔÇj,µ¦ÿô(ZP³Z€25ù/}Pߪ)ƒÑ®oÕ¥w”éüÒ8 ß—’ð=¥(õšSîÈKøž×¥&nRéh$|ßšaV©LHø¾½Wù€©Z¿q¥Øòɼr£HÂ÷¼}ïed¹0TÐ÷THY¹>\0$|ßFÙØÆ³Ìm˜p9^&7:ÊèòGV™Î»…\!Jøns3Jø`SÐ÷THmù —¥L/ÃV”ìü©04ñ…7Ò“/»”VM.ÅbƒË¶™[Z[†Z¨Ø²°,±|ˆyåãÊ_3}?ö‘ÿzŸ+ão$}?¥B¬^Z#„{aå¢CÒ÷S×%}7#<_,íû1qßBÏÛB]~A¥€ªŒçONuißÝ8|Nö=ð*åy7–…4Tä…4bž )î¥4á¥4ž³”†Å”ò9‹é[Üw¿)Ë,§ ißïC÷eA ]Þn•›¿{„^ÄïUZÓx¡Å4Ž ,¦q=øb™Í—Ò7ñ»§;n)åŠnúîÉJír)¥ßVàw—¡½òЋÄï *φ”qÈ^P¨]HYÙ2Ê·YDy€ÔŸxe}7P·×‘²YË'ßÄ~U-,±p†N¾lò­Xï§Á‘S}ÙŒÈvïyfC’w;#†›)Ö»M!^û{ÏŸ™¯÷µª$ï®0R®û{Ïß[IÞÓ *Ôö¤o¹Îç½øëäÕjhèÇj³K¹ÎoÍð7?‚‘ýÑçi&å:Ÿ )^Wv¯$ïy/ö†?ýqõ±Z¥ mj¹Ÿ£¾ÇmðܵÝ*¿ ßüù ½Z QþX­R¡>è}‘¼§7Xê ÷EòîRq¹éÄú¦—N’¼/l(×ù¥…’¼§{)Pzµ õ±'$yϳ@”b½/°)Ö{zÌ+Ö»M¡ÉšÞo7½QÊôFvoÓ™ßMoˆòÇîÅk/^#ÊÞôF…¦7eÓ÷‚›^n+×ùô!GÙ¾7ŽC˜Þ8pÿ×’ä}JÓû–ë|ZH©ÑôFŒ­}od-7½‘ÂÛôòß@’w7#L¦7â¯ÿ-t¯b½»Bþ½è†ïyåZÓË%Åzw)nî)ÖûÒó?L/¿zŠõ¾°!É{L<‡`z¹lT¬÷eÂJò¾=ëØàz‘¼ç½È†éc½ÓK1B’÷<‹'%Ž•¾DŠõžRT1M/ç—r_`S¬÷câÿçÂ÷Z›Ý¨—ÝP›nÜÕmtCB_tùáUªón8•hƒËCHºáûò¶Ëm$4_lùÇ)Éû©-tCËë@ê=dâK-Éû2 ”ê¼Môá’¼Ûô&y·éí~ïAÐJóÓ‹æ}«ÐÐÆ Z~e¤yOã)ŽТÒ¼§-—Z®h¤y?…BÕ½þ”Ió~ÊpÅ­hïK¯KônÈ(»›YL^%;ï2”$YzaE{?e"°}‘¥$ñk‘ÐýwÆXb#LÞ\”ݽsÀ÷9p¥òoËt@Ò¼Ÿw¸ò¥5îZ_ËÕ—r?µEb÷Eõ-×yãCvAås¤y7>”`•:HÉÎûA”•í\©Nyó€Úúrʯ§nø~ž·™/¦Üù–æ=oä5·H/¨ü(è†ï‹?ùí%AnÛ»¾…{O…”›í]ßTï.Òö± åá„C<ày‚ãwŒÃkïÊÝ …{w3øK«¾ÛÄPÙ߇wų¤z÷¬¡J¼ÌÒ±Iõnfὤz·…j´÷»€ŸTï.ƒáÐß… ©Þm¡º~Ý”•êÝoÊ>8u'ü½êýç?üEÕ» üÛ¿ûÿöóã󇵠é_Ö™¯e¾­…;RßmáŠÓµñp£[@mÛo[xhÁÏA þýõ}þƒkC™ÿx­í?]ßô?_-ÿÅ8©ÿj àþonA¨Þ3¦¹ÿq}Óÿi &ÄÿºZþ÷uþϵwþïõMKõžfÇm̦”+ÚR½` ø§¯×V”ê=¥B`5©‘HüǽÔO7žró/›xÝッÌ0ö¿ÙôJõžRqS·ÆIJF–+¶R½·£ø^´T¢M-}…{ïx±ÂÿnÏ\~ú+Ü{*ä¶Ä§E—G×JôîBqQ»ÑåPiÞû$ Ûf7RR/»‘ÝèFxö¢Ë×­`ïn·‰*Ø{š`>/·l¶©Å×¶‚½ç1P©YÖe`Y×òÊvî5b½ç]øøyaýÈUViÞ7¶JónáJò (®;¾o–%•ÿ¯%yO \’w["J1åŒR¼§6ž/XLùkXŠw—áþM)Þ3¦T&—ÑHV½ŒÆ­Ï‹(÷—+Ø{žƒÿ²ˆò/¦‚½§wÀU{þ¢‚½/cúe!V/¥Ñ;KiXSn8–à=}f Þm‰{´Ò—;¾» %¶ öžÚ຿,£qhqdïËhˆ/£Ñ¶e44òe4Z°ŒrRz÷ôH¬Dç3¦‚—QŽi%:¿ôNéÝC"çeˆV¬wá?a…zßš¶ˆFüó"úrÅ÷R¼§Ñ”£Qþó}]D_B½gúðMýÕç ,¢Ôï׋ÆiÊÊ–PþJ× ßÓÕìJõ…ÈR½¯¥¼TåiŸR½§Tâþ⇌î/>ÏÔ”ê½-¤íÕj\wíO~ÈÍ^­ÆýÙÇj•ë±Z¥HíÕjHÀþî‡~íÕj\&íÕj_«Uö†¿þ<êUÞ;”ÔʽZÆ›[F“|ó ¤m¯V¹äûæÕê‹ê½Ø°…½”ìMod¿?èeG™Þ€méýÈåå·¥7M½XÚ”ê}ëùR½lÀVÞÛðÎuÃ÷VÈg™^®€KõÞg±Âã_ n°Tï))¸M/]ñ÷ƒ^>Ëôò[ùÝÿZFmz¹nûnz£”éåµßMoThzCÍ7½”ù*ÃùvÖ¥z_ûÐôò¼íwÓÙÔm ýö½!¾Û÷rPÞ·Æÿ0½ü½¬ çS*$àc§€[PÇNVÓËW® çÛBj¯¦—ïUª÷¶ñ¦7${ÓË×R½wê¡çKõÞÒdzyùI©ÞSŠX¥z)n.7½<,^ª÷”ú@5ÿ ~£½¯Í0½ÜN¯ çS*¢¹M/cHë†ïë{™^þ:þ0½‘„ßô†úiz_2œï+ãsSªw›¸p(Õ{,,³ìFø¢Ë•Wå7ß&`–ü\ry~±Â¼·õWƒËT•à¼K½\ðÝÎïÊoÞ®Õ*Î{ºÛÈ í‹è=í~½ÇÄâ½×œKô¾qT¢÷š¨¢›YNŸf64j3™èÍl¨èËltº‘eg”æ½ý„Îýe‡Ë¶—æ}C©2œÏÐSpö柴ÌÒa•æ=CO}ÖÎ6Rx/³“¼Èò¥4ï¡ÿk=-Ï–æ}a¹.øn ôJó _h½lÄK¯“åžTzwmôˆè}{ÓÁÜ­TÊ—Ö¸J|a¥ûªç·Öy‹½½¨¾ÄyOÏ¥æÝ–Í{Z@)Úë%•æ=ÃÊ-§ìîŠóNYf9%>¥yÏsØ8ïÄRØ^LC ÷‚€y#JòžÙJG]š÷˜øûQš÷–â;yAÀ’é½¥0ÿ+ÅùšøZ‡s¥z},gSóž ã<+ƒ+Ò{J½Dz¯‰÷‚€«ÏÒ¼§O»–æ=Xàë‚ï|jÄ×=¯Ò¼» QúÛ"Ë5iiÞóÆš_]kiÞÓj*è‹,—¥yOг^ \%ïUòþðHÞ5øá϶ÐïV§Ž…»k‰KÐ\†¿Ë¶pi{µT§N øa´…ç3Ü6ŽÄµÕåú9üã-7Ðî\—˜¶á}Ê LXÊŒŸórÓ‚ô^ \J9€)ƒçÔüŸç`êku)S³ÿb©ÉßîÄ×ÇêÒêšúÓx šùc¡âY3Dý·¦þ˜PŸ$ï6EîëšüSŠjxÍþ›©¦ÿ˜(¼ÖüŸÆ³B³Ê¨è½¥( — ˜¤®]>àÖBóJw\Þ[!ûÐÄF@ô,€‘ä}ë CK×VÞÛ ÌBIÞÓ‡TÞÍ-U§O—¿Ú’¼»BÆLJò~L1&‹n¡0ºüPKòž'Q5»ü¯»½§”-].Ü*ÈûVfÁ写ï§u!œ[ŠÑ¦–íBKe{‘‹Â—X*ÛË+…’ÏÆ5¾KÆ5â¥kDE/®ü[‘æýtGaYs‹jXL*ƒÐÔèžå”?_ŸÓ(cË‘3¦l)Å›Jòn~_$ï™”ö b¼‡*<çË2Ê)Éû©¿Î’¼/ÏYF£Ì2Òú2Ê'IÞ—7µ[¥o¯ÊÞ1¥´«ô›ÅÈ}1¢(bJýÜpE´Ò›wð € ¥|nByìÀ„²¶%”Ûw•Ý|(àë,¡H¼„ò·´¼»6nKð~Æš›¼ ^§.ö^G‚÷¸xÌ)ÞÃ×Ç¥Hì?O-W~ó­Ï2¥Üp¨Ë½g\ù¨Å”¿vu·÷eÚ}]LÙEþîóe)ÅíÅ4ñÅ”bždïîÕжýÍôþæG…^®F¦òc½Ê×µ;¥ úÕþ4V;Ô0yÅQÖ^±†øz¬X©°zÅÊCšì=}aÀ÷kå7ŸRü®`ï­j®¡ ]öX±‚™Êo>†¼Ô¦d»Ø~äÊ®‚½·B¸DÉÞýõ yØè¾{ï•ß|M/²wÓCizÃdz¹JùfGçLoÀfz©‡U°÷v>x’½§ñ˜É’½ÇDyøøß¢}ÐË¿ÓËi.Ù{žE]Öô²%{O)¾×A/+<þ·Øøƒ^šzi:þ·À†dïYëðÀñ¿Åÿ[4ÿ[|e/¨IöîfDVôcŸ€šÞ¸ˆÝô†É¾7LÇJ–u,e Û}·@²w¿W$Å6½a2½ü ®üæ;^/²÷e(%{O30^•ßüæˆ${ÏWDU°÷õ½L/RHöî ¹¦’ì}™æì½lP?V¶/ÉÞÓ,ezCé?èe©ƒ^>ë —¦c·€}hz¹èúqÐËs¦—«Ï öÞŽâî¥éåüª`ï)Wt›^æ¨`ï.!Ó /ÏÄIõî!‰ Øö¼Tmêbï-…Εð=k ßmâ'JÊ÷c¢“¯hï±P_r¹C_ÁÞ]&Ôíå–û_Ò½ŸD8üRG -ÿÌ+Ø{Çí6´< #Ý»{(.Û6´qÜáîr¥{O—ÃCV°÷š¨ô.—c¸ÐreýÓÌòtŠtïnE\ùmj¹=.ù“îݸPØ]hÙ·•ß¼ËăYþþT¬÷µá&–ªª‰eã–ØPo—؈è^bã–î%–?MÒ½ŸîapKÝìÝ–ÐÊØH ¿¼Fqÿœ±–VÆ Õ½Þ7"+Ôû2Õ-«o²÷óª1vK*cê^ï~Näü^P#|9åì«Pï®'”*»ù¸!JMKi\³»”r¸¥z?oÙ¯—RJMR½» c¢ÒH³½†öºòWL¢÷e‚Kô¾x ‰Þ—OÅïóR¾>vàœ$zϳh:<+üq¥7ŸRцõå^ï)QôÇFس¾zO…qxÁ®•²Hô~ÿpJô~,\ØW ÷Íbb±Ò’èݵQ\_b#Yº‰e™%–òJ¥7ïçK‰Þ—7]bsÄyü«¢÷ÇGôæÊ¬:õb©Nm }GuêX¸ãàÚRôž2\óºLÆyOÛ2Î{,„ßmãˆ_-å.Ï)7ОÙ)/pé·r—7-Ðz¼rcÁ›–h xå.µÕüŸ¶¡GkúOÛ°Ì­OÕX0r5ùç9èÑšûÓ6¸…úTMmŸšù‹â¼§:ªìæcâ÷E¢÷¥ç=&ê«5û§T›kú‰‚mÍÿéX*öåÆÄÆ—˜ )•— ˜ÒT>àÖxóú’Ý|û§L,·FëZïk)3Ëoä§Zö¡©‹Ç-Ï?™ÛP¶\fð’æýôS„¨\^C¢0ïî\þ$Vnó6Å £Ë=ØJmÞ…¸,Éûyÿ?/¸!_/·L”¯ ï§6®i%y?–TÚH¾ÌRQ5±˜u£w?†E×øÀÞ•µÙ½®ÏKkì…+л{? ôî^ V¿°†°¼¬FŸ.ªq»I…Pœw- jä¤_Pù#§8ï§6ø”ºÔ{C )åF‹4ïnõÞ…4ôë…4, )ɤy÷øPu_HÙÕ ó~ÊDBí…4n†^J9¤y÷¤ƒ®l§ŠÏl]é=ä°Ñ )ÏO+Ê»i£|| Š˜PJÁKh Ü-XB9·¥ywÛøJ9~ e"×/v¥ñ‹=)k[DÙÕÇù¶½ ½„rí/Í»iÕÒ¼K¤â>¾þx©Þ]]ýúëÏ¥|Ýé=¥øúz|ý©RûëÏŸ1Åzw3ø{.Õ{^˜Ò­ý)´¤{÷cÄû²Ê>÷§Ÿêö¢ÊºL*‹ø³O,Ý»_ˆR¤Â½›bn°*Ü{JñY¦5lãÊÏ{%9ß‘±Ò½Ç£QÎ=…ãøæEkn‹Vê¨Ç¢õE÷6ùßu,Z_½»·â¤{O…Tz-Cæ¿‹V–º/Z¥{O3XÊØru÷͋֗$ç;(ìy“û’äü†Â½/S_º÷˜Ø½¦7’Òûo+´èƒ^+8èeG™Þ¨ÐôFG™^‘î}éÞ7Ó^…{ÏLyѽ§Bô¡tïéÞÝ{¦9+4½œ_u¯÷Í¥(Ü{ZÈfô²¦7ä÷c˳¦—ÿß_.JâÇ/[è_.†Z~?6 ØŒƒ^À¦pï‹gûnzãÊoÓÑÙ¦—ëµJr>Ïz ÷îfDhùA/µèƒ^šz©EûZ,ezùÛZIÎoÓAº÷…yéÞé#C1¥{ ßéÞ3S¨ôš^v”tï.Aâ½ Jº÷4žezùáî=Ïb)Ó裆 ÷ž÷¢à|l¼èÞó,vÔ±Ñç pï!Цc«‹˜Þ7Ý{Ï LûÞ·pï.ú§éå9yéÞ]Š; ÷~L¦kx#"Øð¾\ì½¢2ºðrg_º÷ÓˆPßÝÈ=¾äR£R¸w×Fay¹ mv±åÚ^²÷Sñ«çmáþ×Ïc¥KQÙÌÆßf–¿À’½‡> ¦pï!‚ÛÝf6Ôw3ÛÇ6üœ1´|™[Ö×áF~jË“Šöî·Š»Àío?*Õ»aFWT†ó+L6©ÞOþõ+Ú»GIõž>§°Àr>ýò&‹êÝÀ²q l¤l_`yØJÑÞýBð|R½Kd+_`ùãøkyÔðÞçÂDW´ww{gaåÚVªwû`Q>XR¹R¬÷S[\»î]|2$zw«)/§漘²w$z¿÷µDï~µÏ…4¤í…4c_!ý½r×W¢w÷e÷e”é:*½ù O‡ñÛbè¤z÷<áï¶Tï™àÀTª÷”âHرòó§Pï©¥ìX™:¢.õÞ™ÌÆ‹jåv¬AÄ})«Pïnaž°c}¹Ô{KQšôRö-Ô»ŸÅÅ€dïæõIö~,Ü4U¬÷û|’ìÝ–Ù»-ødU~ó[mË,çºdï§6þKön [°ÌZ dïü«²÷?vzsêþ ÷n×Bq­:õR¦:µ-ôÇå.-¨N2\ØBßz-S:Ï—ªN ¼GùK™òmáæO¹±à9å.–rcÁ妘²åÆ‚oRy€é78¢rm¡.Tó,){_Æ´fÿX0jò_z´>V—25õÛB‡!Ùûfª©?=F${O)êÍæ4r˜Tþ>~:HÅûÖ¥Þ·¡ýT`ÞøEö¾¡ôæ·W6®<#¡ôæó, ó6ÞËĆÞldy I±Þ.${LÔìM-÷ßëÝ¥èà%{·)¢¶Ü ¦¾[O¡ˆç^pCÀ^pCD_p©R+ÐûyN(´Ë-¥y?eè ¥y?–Pn -=õ2Ë=iÞÓqHnbÁòç6™ë‹õÔÆ,­¼Œì³aå>ØgÃÊ¥³"½‡->ʰÆ=Û kܳ½¬ÂG(Î{¦úgA¥Ò§Üæ]†qý‹é‹äý ùz!«Ûí]Ùö®hó2Ê#×ÊlÞ  Öiß ê.ï)C½w µõp¬Pu—QÊ£‹hˆº‹h¨×‹(÷ ”ؼ_”‹{Tʰ£hô"Ê/Khèô hÄ™›ÏT¼ŸFG,Ÿ‘|ù ËòM[>ù«ñe½(Ýü—4aÚŽÏ?ÞÔŸb°„P¥5oWI!zœÞôEñîLJ±t k©—ÐJýÕ§O–Ü=>‡m0£±²>¾úɯ>_׎4ôs;ÒPÂÔH‰î>ŸdOŠ v¤˜‘_GÊÚüÁ¹Õ{¿ DÅÎôåVï)õ–ß¼Ç#NA×8ÏàåjÇr•úô±\eߎå*z㛽j¨¿^®Æåâþö³7¾ËU (Á{>½l¼Á¥|"Á{¾‰,u€K“ÁPtƒ' nä÷r•{• ôîF)£ËMt Þ3WyžÀôr}ùÍôFô½ÿ³x æ›é “ס Û×RºV~ó›D™^nÜHðPJ‚÷˜( šÞ5MÁ{ZH‰×ô†œlz¹âV ÷­BÓˈx ÞüÝô2{ò›_Øø~ÐËW6½Ü”à}/å7Ÿž§î~ß!à=-„«T ÷­ñ¦—ÓA‚÷”¢înz‰è÷ƒ^x Þóʘ_ßßËW>è}¼§ÂÁ{LÔ;M/w–è==Ï`^û^z ÞO©¼ÜT‚÷Ídz),Ið¾tÔcÑ€>”à}/z‰½qü}Qi6½<ñ Á{ZHýØÞ¢~ÐËR¦—VùÍûYF}lqQA?ö¸^ï©ÒµéåòOÞßez#÷½é s}oH×ëzß⼟F„eÑ%M?—ÜÈa¾àFúðå– iÝÝêãKm¨à -“.Hë~j‹ç,²\Â)µùS&Z½Àò7IZ÷S&Z°¸FÀ¸iå…yÊlÞ,ą즕d’º»ÿšVU„w—zËl>&ÊêÞÛ¬þ¹°¾)Ýïp)¾{ZŽÉ$¥»Mq¸-Ò=-§úº¸†2ì_3겋ë[€w¿Uk㊾“ÒÝeø²Æ•eŒ+ËWªÆõEé~Z¢þâÊÝ)Ý]†Ï¹þ”Ié~ÊD–tïnñMUþ )¼»'&ÇgÝêËMÞÓ×|Îrʯ´”îžÌT —SžÐúí=XŒ”î§6^[!¥»-h›’šw ¨Õ.£\+¼»Ç½#¥»GRò2ﳌF¨¶—q…öBÊÓ’Rºû…Ø/B|ö" î÷"€±Bº{ên…w/¡Vl·Ê5 ïžRlü±à@?`TνyüXPT÷" ²‹jÖK,?sÒ¹{6¡éÒ¹ÛBÅx‰e¤s÷£ÝÊiþ>ôÒ¹/ÏYbÉ¥tî.ƒ±ÎýX¨üm‰½ëÜÿôWuîztnn†T§¶…ŸûêÔ)ƒ^­NmKüª¯%.ز…«Oׯ3hWKuê´šžèú>Õ©ó>©sÏû€üò—>(/0”)'0µáMËŒ%uî¶0KIy€±àMË\Z]óÿòœšþcõ5ûç}0»jò_žSsÿò¦5õ/}]3,Ôƒkæ_ºTáÝc¢ö|ÇTáÝ]ŠçÉt÷­5ý§x”Î=&*»å¦Bš k®åº³~2®‘1¼¾Zó,¶ð–u .Þ=ïÅR³à\:w—â:\9ÍÇÄ ÛP’Û?_l™®DÁÝσâ$ÃbK§Øî§LÔ¶Øò¯U*÷S&t饖§¤r?eâ*îeöMå~ÊpóI‘ÝÝ¥ ø“Ìݦˆ_bÃï/°\7ëïn7f¨‚»ûA\ÌIé’Á¿”îÁ•ZîâYKßÝ¥B6®làA+Äá…õ-¼ûyPôëáaQ›=,%õE5„óE•ý³¤R7·Å$Rt÷Óææ·Å$Wt÷ dÉ5ôä•ÏQFóžD©t÷cD¾˜2UŠ‚»{кû-TL¯Š,¥¬ÌŒ²i‹hHú&”µP*X>9‹ghÓ‹gÜo¾®4’†OžPX<#ê{ñŒç,ž!Ü/Ÿe, /B÷3 ”COú#¥3×qÕxR_<é{•Ïü}(²»‘¦²º|FBõå3Òx›OžzQ2óiFNaÝmŠ›­íFù¿ K¼§‡à)ÖݦPâSþçµeuæ4uî÷),»[ÀƒI ì¾u„Wª!KKU»×ª‘!ݬFÌ·½i‘ÛFjrûÓ¨½ÿTIçž¡eÒ¹gìÅ7Cû¦sO) –tî LÒ¹§ø&+¡ù”b pYÊàrU¥ÀîeªÈÇr•Ï2¸ñÊþþ‡bmrã\‚—«!·{¹Ê3¥ ìz©ßôR`>èe©ƒ^–2½!f¿ZpœÒ¹§…/:÷˜0^Ò¹Çl¤s_8Ô=Þ3”T@z)f›ÞО×ç~dÊwÓË©'{ZÈg-½±¢”Î=ÌSm½¯^¥sϳ؇¦—ˆ*¡ùtåÛc€Í¸o|7½‘µÜôF3Ž%Ÿez£”éå—F÷x_æ²tî1½èÜcâ¡ ÓÍ8|/œƒšÏ €^Ýã}iƃ^*»½Üž:è¥|{ÐKíyéýÈb ì~Zø1î >|/›qø^ª­Ç¢½qøÞ{:Š¥ŽEeéƒ^Šé¥è¤ÀîyæÃ÷òY‡ïeÏ›^ÙT`w?‹k2%4oS´Ðô2VW:w—Š<ø‡ïeo˜^Þösé ]xá õwÙXëE7"ª—\nÓ*›y¿RD /¸Ü‘’Ð=…0ˆJfþ˜Þ’™?–h÷RIÆZ~Ã¥t?µ½)Ý…_p)Ým¡ð»ÀFó÷j›Wn¶(¨»;(BÁÍ+•JéîRqϹy|ôÞ4À¬ù¹¸ò´¤„î%x+e2ïQ‚o‘Ð=­£&kOË}]àÝ¥âÊm{ÚÐÀ—W’¬˜î§¾Hâí_3¼“bºßÉûeZYÆN–“V7x7zÔ³+;oq •w=lhú‹k(÷Þ=` WÞ©¼ŸVGú…5âÀ—U®®Óý>ɤt÷G%2o [mPÙo jD•/¨t ¿Tº)Ý=rTCÓHq¾”2²^Jw¿kóþ5©ëþ–”î® } ˜î¶PW]H#vÜ 7¥{f$ŸdJ) {ðv}÷øžð: ”iûÕPÁíW¹§˜î~V‰ë¾Ö± éX°s½ˆ({¯â(ñ`oxÀae2ï!ÆâAR÷c‰ìç‹l\Åí-/à'©»§--‹,Q’ÔÝÞ“m[dC _d™YERw·€"ø"{œÀ@H÷?ÿU©ûŸ;¤›{óþl ÃKªSÇÂè[øs½–8Cn ÿ láZäZ[uê¥mÕ©ó¦W[ð\ߪ.Ã/iy± måæ9°Ô·êb)0­?å¦ ¦Jy€±`ÊLmxŸšÿmáʳ¦ÿÅR³ÿÂAMþ‹¥æ~[(%×ÔŸ2èšùó>`G!Ýc¤’º/ïªîKwKê¾´BR÷4jqMÿ›©æÿTø"ußJÖPwM+}¤î©Ê´yåÿƒ®ï¾ Ö§ƒXv¯‘å B!Ý]a\©½ÐrW^Jwâ'RÝ)´ý¥–ŽRww?eøï*¥û±pâêæî¶p|—Úˆl_jy\WJ÷SÝšr˜÷«Fï-FPÝ]ŠÛ亹{Lh¹Ôî ~R»/ø}> ¥2\_­\š -ÿ“%xO )]/´)]Z~"ÚýT˜YËÚÐÖ—Y*ÇK, Ë+×RŸ—×Hö¾¸²2ûXÊÐö±ppŸ—VV|”Éüé>Þ–uÙÁÂ"­{Æ-µî §Û»o”YNáL”È| B‘…”óXZ÷S†3OZw[Ø´ƒÐÔºŸ2/Zw7 ƒ¦Dæ…²Ÿ¢ºN<Æ»S*ÀËæ›ÖÝ à°NZ¼às–ÎH@¿tF\¹édçx@ázù¤¨åóËòÉEåâIE]Zw÷ 5èÅp(‹ùS„’º{JQ'µeþH]ÝÝà0#©’˜w}ïPŠÒº» •ÔÝâö›2˜·)´Zõy,NR÷”âû.¦Ìþ"©û)„aýjÊÑ;>ù‹Åôc(Éö¢Ñp»ÑPö½VHðE5>@_—ÕøÊ(‰ywƒ¬”Ä|LÔíOCŒ=>ýTwß*ô®´îËàKë›q|ú©?[ö¡´îႺú±^e õ*KäRr?Èe…¹|¯ƒ\¾×±^å¨×«ÜDüæŸ,&>PLw÷’Òº§çù^¦—é¿™Þ÷>þ´Øx;Ú8Cî-n›JëžrPLï[ó)E¹ØôFŠpÓ!½¦7¢³M/ç—’˜_¦ž´î1Q?襬ºô¦x~,\ùʦ7ÔøcáJ¹øþ·%­»ÏßÅtßLÇ_ÙôFÔ¹é¥j¤˜î™æ<›pø^ÌJÅt_¼´î›é —òþ±SÀž?|/‡Òôò•¥uÏ{aIëÕ݃^–:è¥ð{§W1Ýϳâs£˜î[3îô*¦{*¤&¼ôfVôƒÞ­{šA“éåY’¦—[Šé^´î›ªõAï‹Ö=rPßË Moäm7½ nz)ˆü0½ü:Hëž÷âÞ¥é ÉÝôÆ5×Kodè6¼Qhá}Ëaþ´ã¨ î¶pkÕ~—Š£®îî× ‘Þ‹]Ö·àF ¶»˜Ž ë~!çësC„^h¹£æ—Ú¼UÀ”ÂüRÆÀRìRXw÷O(ÚÇf›Âº»·$v·)BÈ ì[X÷¥íÞ5`/®qŽaiåBAb÷à·®¨îé ø‰ÝcBO(ª{^—RóòÊÈ ‰ÝO¡Èu½¸FV凌NLb÷ XãÊWZ\©”üZ\ãrîÅ•k"%0šÀµ£˜?–Ðõ½}Àc‹+4Kì~j‹ûÎÖ¸Ð{YåúObwC‡©$±»[Í]ÏÊ W%0ï> @nPÉÜ‚9¤Tž”ØÝÏ¡¹˜ò€“ºŸ2aYHCɽBª°îî ä iˆ¿ )?-¿—Qþ (ùLVê»^dž|ï•w>”Á¼œ:øbJ_¢[»g‚³¿·ÊöÙ­òxŒ´îq&ì¾c@ÕÚn5†Ðn•{Ê_ÞÏz ënCá~{×¥{ÀiÝO…tºÒº›>t“ºÛB Ú{^XbIënþYÛ!ÚKlb/±oZw?‡Š¶‰Åú_aÝ´î?þªÖýGkÝÜšÿðçXÐCÕ©cáîÕZâ¼Ë`$ªS»6~ƪSç9\Ь%Ž+ÙBø¯eªSç9˜¶å.oZNàÒoåæ}Ðoå.–òcA Ê\,å¦xÓrS¥æ[øï[Óÿ2 5ûÛÂy\“ÿòœúTÍs@HMý)T3,xiÝ—fKë¾Ô'­{JmiÝ·R5ûÇô¢u_ÆBaÝó,ÊÅåÚ"n}³¦Uër—ñÖ}+e^#˜ÙÀF4óA,›q Ë>4³T Öý´0âÎZþQJê~Êð‡M¹ËK¼ÓBKJRw·žCRw÷?0Šê¾™Œ-ÏTJížá ,ln9ôŠì*(\/·±''¹»Kñ $¹{šAùð°l¡¹åYe1¿½—¹ uÚÜrÅ©øî©ír›š¶¹å_ñÝO…‘­{±eßÚ îîºXÄ~–‡ÁYÌšÏ&OY`YÂN–ƒg^i1®´˜V>ç€2¬Y¥liTQ›ôîÁ1õî¶Pˆ6§Ô›S¦4àýÔÆŸV Þ%¤[3JÖˆR"6¡ìƒ4¤èå3B›O.ŸìTù˜Å3*[— 0ŸìP¯8p è›âÝÊn[Dùk¬›»Ÿ2|ÌŠùþee‰åóEïîvaФw÷Ì¥¤¼xR7^7Ê¿HéÝÍ-7—ÛÝ&ï6E¾o{QžÝUó)E±yåϹ$ï§7C¥xwu!†Û‡R¯‘âÝ¥x*ñ«(†OŠww9B¸Õjw÷sâLÀ)GÐëÕHçî+·„tmw?+nJ·7 üX³1ûÓЇ –¿Ù£F´ðáRÁ¦¢»g)ä«VšŽU+eRsÂû±je)sË­cEww ¹‚Ró6q™ôíþ“¥èî)EÑøøÍz‰îžŽÂ7æ›l¼²ÜF—â=R]?Ö<¡`z#ÏúA/»÷ —*ôA/ßËô2²à›éñ:~¹ˆé¥ø£èî ¹½`^ÑÝ—©§k»§{)]kê®Ko‡‘â=®‹kWšLï[ó®qoÊb>&ô¡¢»§4ÿ\Ôx.šzÙ½½ JÑÝÓBŠÆ¦7®?è峎½îØ›|ÖÝ÷*º{ˆb…¦—®RYÌç½XêØ1 Òxø^t¯ï©¥Loh¼¦—]Û}«Ð¾—ÙA¥xÏt Ækz#o·éå§MẎC ¥²˜_\¥²˜Ï„eG^Ô“z©Bß}ïƒ^Šá‡ïQ?zÙQ½ÊÃ÷²”éå×AÑÝÓQìÃc³‹Ï2½‘ÓÝôrEÿÃôòØ¿¢»ŸfDFò…7$I/vÑ?ݨmÉ8ß7êå6b®ÛÈú½ÔF ÚhÁ2qÚ‹,ÿÛýôÛÛÝmåŠín 5èÅ5âÎMkľ›Ö¸qÝ´Æ=í¦5DrÓaߦ•w$ü\Z#þ}aX³Ê;ÜýtgŒôîž1¤Xzw›ÞîënS$8·£«¼íhÙí¼{A¿nìn ü€¢»û¥¨_yUóKG,¯¨½¼¾éÝ][½6|ÿ•ñ¤€ÿÊ^ôîç9”ö¤w?–¸m}iÈ|ïn±Ëj(á‹*5w?-]}I„íK*?ÓJcþÞ£ î~,\öIï~,!a®Oe …ôî÷Upw÷(Öeô-y·àEïîÞÁSÁÝ—,£Ü0•ÞݽCyÚË€øð)ùSè‘ÜÝ}ÊBöªøXJîîê˜BYÌÛD/¨,æÓLÉÝSŠ=n·J‰â·Ýê›Ü݆éXÀ›ü>–°4Û±l¡Üô”ÜÝÍ ;–Þý˜¸ÞÞÝTPS^b#ê{‰%ÿJcÞ\bÛݼìßÖ«ò»­4æOîO)¶ûbñ*À=½ûÏ¿ªwÿyín {µ:õR¦:õb©NÚø‹´–½{Ê`~V§Ž…>×- [×¶U§vm\©•h ¿;寂9© m+'p)SN`ú œ–˜2¨­\À”·)p±”˜ÚÀiÍÿËøÔ§êÒ×5ûÛÂïAMþ±à}jî_Þ´¦þ´BsMý1ÁíKïžúðFÒ»ÇÄR§è;ÅvO)*¼5ý§`Kzw›"Û¬rÏöSy€yUòr—~’Þ=Í ˜k^ye‡b»§…,eb¹VSó[3Ì,ÿ‰¤ww)fQp÷câ~½ïÇ ; Þma/™Z&•’â=½D0Ìm$±7¸Ñ&7†Øè†Èktù¯'É»[ø–ÍüÒxIÞc¢þjt#5¹Ññ]€!É{˜á³Œ.=£"¼§åV£Ë¸¥4ïR‘§ÝèFnn£Ë¶/¹lƒ¹¥ê¾ØF0þRû"y?­¦J¾Ìò„Á" Ÿ¤øîîðúyyåÓ—V¾¼YåSŒ*, ðî™™ñÝÃ),ö°TŽ—R–QÊ_QJ%’»Ÿ¼]ÛýX"+÷áZ3¾{&,K'úYñÝO꣊ïîP×_2i°K¥¢¼dFÊôÿOÙ™å ²ãHvKYÓK Q@Ä9{ž»Òëoœ¤©Ž¹>Þ7!¹\:¢K2'µdF:y¯øœõ§Q۲ɟukw¿(Çmé|S»_§ÀÇÒÉî\:º¢»{h¨8.œoáÝ]†¢ñÒe–ÎHŒn¼íBù'ºôînCèv¡‘³ÜˆFíBù•àÝÏbT)Þ7“](¤xw)®~¥x òµ(ÿ%XTãnóE•“UùÌ!Öæ+½ÂWûùï—ïnwháþös™¡ï)õ"xOG`š)ÄûÒ}¼ÇD×ßþÐÂíT¹bPˆwWqÁ÷oÿ7ƒËß•μ+ŒgËVª¤—D‚wWHU‚÷¥{%x‰J³Á°kƒâºÁåÒJ×vO ©4{ÙÊS9…xOÏSw÷n+åN¯B¼ç•Yá±r¥L~§W‚÷TÈñòj Zhz™fB‚÷¥…Jg~J ÞÓQÜçôR¹4½3~¬\)ñôÒdzCÕ6½i¾ôþ•‘,¼g¦¼Þ7Ó±é¢înz_¦ï©¥ŽÅ+erÓšÞxåƒ^>ËôF~tÓáä¦7®#?ö]ð‡º¶{\%»×ôRãû~ø^ŠµÇ‘åIÓËžÒ™OÏSv5½o‚÷Lô¡B¼g:P@5½<P:ó©¿Hð¾`#Á{º—-<ޏø,ÓËUˆB¼»Bþó¤ïi<å82 }œs±½×M/¿_?Ž£.öüA/›qÐKz©ÖÇ]l¼éý ›azßï§Cj]xC®\vCâ\ty, ïç9\B)y·€òùr¢òb·>/µ!Ó/´o×v?-àJâç"ˉ#Á»[ÎV|w¿)’}PÀ2‹kD‹/­anXÿÂÖ·[»{΄nXÃdX#ò{a¡XVù)P.ónÄ'6}Qåo Ò»ŸBYÉÝ]·7 ïž×Å“Þ=¥0•~y‘À©$¹ûVÉÝmy‘»KÜ1½´òxPrw·Ž£«dæ]¼ƒâ»=j‹k¨À‹ktëâAî‹+7¡º¶ûiÁ›ÞýXxH k» 7¿|´ÅÁ[V¹êV|÷S[D¥/©Ñê%•Óå×’ÿ,¨tNÒ»ßA•Þ݈`|tmw÷µ¤Å4î—^Jé¶~/¤«½r?¥dæÍEÔ…”û"Åw÷hSÕ^Fãªïe”ßQÉÝ<Ï$w·‰g¿—R.±¤wÏ¢rí5@ä+·[} ïžVðocÿ…•ƒôî.ÅÍão»Õ·ðî.)ñýa±cå&ë·×-@ÌöbËFÛÙ²†––e–÷įå•U™ÖͻߕIó~,ü•ócQ ½Ó¤¾ˆÞOm|ÌbáÅK)×Q½{œÑÏŠñîFÃÍ,¢\$î5Eï÷F/žoIͻ셓-»Âù±pò×ÃIx*;zÙŒüä gÜ”¾pÆHÛ¡R©_:ÙK'[vøR €])—¦“Ó‰ç|=l×F–j{QîYäÝS‡Ã#Ñ{f&¯²šO) ºö¢5nFÃd/Ͱ¥ÓÞÓBv“—¼«M¢wÓÍ^·¥¼¨¾‰Þ=½0%$z¿ûÝáýX"ÚÝŽ”9¿¤y÷ËF຿þÜyIóîRÔ¡•Ö¼M<æ=¥ðVҼDŽ¡ÿæ¯$Ã2µoš÷¥Jk>¯L}ýXºÒdn#@ÙÜr¢ ïyEYsËE¨4ïK÷Jó¾™Ìm¨×æ6î·‹å_šw?‹? òec/]ãîl/]yŠüÍ«€eÓ¥L/C¿™^žeKóž>äöûNï7Ów1ôr×~§Wš÷ ?£ ï ¢ß¯´æSŠôbêé ïi¥wÓÚ°é yÕô†”{l¼(/¾×±ñ¢`ozãÒêcãÅÞ0½œ°ßzÙ ÓË´ß>ëð½¬ð82à ˜Þ¸ÓÎô2E§‚¼gV²£ŽÕÐ;½ òî #$×ôroøã86ÀtP÷´§X÷—‚¼§ºWš÷ÌeÊ«wz¥yó¶+<|/ßë —¦û±4ïéÞÍûâ£t…÷LsöáÝ÷þ0½d^š÷­{M/9T÷4ƒDôr¼L/÷?L/sÛ(È»Ÿ1µK/×/?Þ¾^vCæ\t£¶%7tò72¡/·°½ØFø÷RË.´œ÷ÊiþtO(õ‹läo_bùK½4ï§¶hÁò–u¶LýsiQ0¬q§¶aåŽL)Í…·”æm"[?=ÏÈV.!t÷P‡I-Ñ»Mo¢÷cz½ ]¢÷Tǃzûو쵟eL»Dïnü›4ïf…O2­´,­o9Íû9”¯íbãZkã ï Íû©.®Ü^\#Ÿ÷â²ûâÊé÷˸bÉ#Íûi¯‹SŒw[øK€·dðâÒ¼Ÿ2Ÿ¿Ž•€Kó¾´ÀÇ|Î’jø‚Ê=ºb¼{šcè¤y7§T¶—SºiÞ=rTœ—ÒÈ(¾†–ºFŸoQ^HéÐã}yÓ…4rk/£Ñ¶e42¾/£$Q’wÏoƯHònS¤A÷ –ǹŠñ‡Á~°[åí Šñ¾5ãXÁr5Ÿe·Aò^Dиýj”²_ Ýk€·ïöBh B¼ß½B¼ ŠÔ l„…X,¼$ywmÃXž”(Ļ˰ÕW`%yw¶ÀNÕ“’÷ßþ¬äý·Gò¦¨[ÚNÏêÔ‹¥:u,;Õ©máÆ®:u,(S^ -Ä»¼À”Á›–˜2xÓrÓ6ðS>àb)0ÏÁ÷º<ÀXðœr—¶ÕüŸÑÆ|¨éßnçköOôNMþ± jîO @pMý)T3ÊP¼®OÕ¥B¼§Õpcú¯9å|•ä=Ï¢P^ÓúˆÒpÍÿ›©@›âŽnÃÊMÅgÓZó+ÅkóØ^6±QÊÈF\³™ ÓByâ=Åñ2¶‘»ÜÜÆýÙ7ÂÉMn$P7º<ôTbón!¿ Ÿ oüó`zy|©{¼/ˆJó¾ÌGÝã=ÍÀ´S”÷TH“éåŠF÷xw)n1tw›Bê5½ÔƤy_f¥4ï1±…¦7R”›ÞQ7½¼8Lšw?‹¢ïÂËXîE—ë´/&—ÿ ,¸T¶[Æ’ZxÇ/f–½cd!¬/°|ÉÅõEò€P—YEÃ$y?eÞ$ï¡'ã¼ e]cJ!t)å¿-Šó~* 1|åFS’w7šÏ1¡ @’÷L¡”¼ßqR w· ß4zwÊñ 'úcÙd ³É"‡WE›¥, gôçÒjøÒÉ?B>–N6zé$v¦D;4%ï§3©/œGm7Ê2ëEùÓƒ®ñŸGñõp¢˜T’¼gP×¶K¯'ÊgÑæ6£!^Û‰F¸¹è›ä=Ç|Pœ÷PÏ÷ZRið€/eRYfIåÏUR¼{SY·Å:WQÞóB¨E5îùêo?Õ$)Þ3‘©â›W.ã¤xw)žKñÓ‹â}3ùÛÏg)ÊûÒB)ÞmâÉ„¢¼ÇDMÞØò¤Cyw©šm„W[xw…ÄVŠ÷< £üÍÞ5žuìµ@´Òšw…‘ãÛàF|½·[‘®ÝN6Û½r<é†7âë-`ûæe@ü5`zy:'ÅûÆÆA/8V®Ô'•+…ÜcåÊR½Ô'ïû.)Þ3¨®›^þ§´æã€ïíEñØh2½lnzÃtì»xºq¬ ئ—~CQÞC/[xì»^ïéCʱD`)ÓËù%ÅûVáýÀ@y·[VZóÛ ˜^ÊKñ¾±azÿïá{©Oš^*YŠò¢¨ û.j¡‡ï¥2lzém¤x_¬ï€òﱪå³Lo„<›ÞȤxßwý0½‡~ÐËf˜Þxåƒ^ö¡}o´Ðôò¿!)ÞÓQà —CyÐKMþ8ïzQ¼/ÞFy·‰«f)Þmbæi)Þ)Då…÷-«ùS&2‡/ºqéõ’–—k!y÷s(‹.¶oYÍŸ2!/´ÜõKðî> f»È†¬½ÄF«Ø82^^¹˜QVón5¼¦.ñ~,\ HðîAø|Ã™Æ kÈÚ†õMñ€€¸ïiMëj#¬~Y ¶ÕPÉ—T¤ ï§ œšÒ»{d)OÛÉF*m;ÙЀÍ*ÆIrw·–e5b¥×ÃF^ìe52sÛ¿F÷…•Š’»/ º k>V¾µð]Üý<‡§’»KÔËjt¶÷c/rw×Fa½j¤A_NCº^L¹C×ÞÏs"EÀb!ë‹iȑƔʧ1EJî~G[)ÍÛ1`|”ÒüÝe(ĻLJe|¶¨ïîkL!ÉÝ]åÚ…”_¥4oYÆ•½c‡ÊV/£‘$ÞßæžP„÷8,>É.õÿU°K}S»»Âȃn—JºáÝ¥ø5P„÷˜8^½F\ý±ze?ùûÏC8Ex÷³?¯ïfðòÊÀ;©ÝÍË,¯¡OÛ©b6Kí¾´À jÚËk„q_R»›JªêËëñù¿U»ÿøËŸT»«À¿þ»ÿ÷¯Ÿø£Ì—O7ˇ-<çZ =|[ £U¾»6nJÖe®-øe ýƒkÃ<û»Ë€ïµü[0FÿñÚoÿÉ-%ÿÙ,-ÿËZ¸#þ¯¶ ÕÿÍ<翯…bÿÃ-À˜þO[0‡þ×uþ÷µwþϵ¶ÿ{muxŠ!¬šÒº5¦ \¨ ¼§ÂŸ6¨ñ,“ʱ¨„æÛB@üù§Ÿ…±­„æ[Šÿo›¨¬×x/óïuKÜÄF‚o# ˜ÙPñ m¤-7µÌ¬]ͯƒrçö³Á¥Ì\Þ]aœx×5ÞkÂä)µ{šÁYKí¾–2½qW·é[·z)Vš^†•Ú=-|¹Æ{MTeM/žJíÞRl†éåæºÔîó¥v¯ Þ¤®ñÞQóá½=O­yéåÖ¤Äî)”b÷Xá¼èF‚ôÃÝB"^p)P/¶|Š¡Mµ{ZÆ÷\dÙ7íZ\Yž6Äî~:%`ƒJÙx9ÅCê ïK]f4¥îeèœKh¤í^@Cš=øDmÆ“-X:CÎ=V¨mÙŒ«µMþŒþ±hR_¯ŠÉQÑÝ;ñü+˜ö¨ðÃd²ÍH+owÊÚMªð‹&&`e4ï·áû‹€º/3ãëÂ"®(µÕ¥“[šÒºç9ü©¶îð^·AíÜ.”òÞ½²”åæ¼îðÞg±ív¡/9Í÷Y\Û…rUx÷õ•T~»*º» ñAWR¿.©œ]_íB)hûÓÏç,©ÔçÔˆH÷‚5‚´½b7õg?î 7®¡Ñû³WE‹Öºg("Tøøì³”™å§¸„îõèÀº÷Y˜Ÿ•Î|M,ef)0Vh÷”âò³Ò™o…l¼=kÜ=},Zá§JèÞ÷Âüøvl³¨û,Vx`Ë íaylRȩ́<–üfr#ếÿðX•Ì|,¡Jf>=Ša­Àî¶DÛ¼¼¥¢¿°Æ(˜UæÕþiVÓøÓ¬rËU‘ÝÃêK6ó1ñ6ëÒ¹Û´Q<ç‹jÜ—¾¤FŠv»Ù¸6ûŠj ÝÓå)tß^©’™)B§ídyÁp)ÝCåߥ5âÎíbùCÂ¯ãØ„U:óérÐRÙ̧ €—×ÈYn^)'/¯ íùµ¼r.•Ô=ô³ËkÚ‹kˆí>9€ë¯Èî~N\ʾ~5‚òÕÛ}ªÅç,©t·•ͼ[ﳤFxí‚1Ò *÷o%uϘR^N#ÿøbÊ¿cJêž ‘R÷…’ºÛÐÒh}*[½ŒÆ›.£\¦V6ónÏÖ+²û2ë*°{Êðç/˜Í¤âºgê󦀺»{ÕçéÒt8Uv¸ü'«”îyÇßÇæ 3¬îîžRqÑ»—¯<¹,¥{ú ,¡{XÁ¬¨°îaŸÂ°º(@›V>gieÈp Ý3ºè׺¹{ZͶ-­ô¶•ɼËpö•Ð=oJy~i=~ÝÐýéÏ ÝŸZèæIù§?ÚÂô.Õ©cá‰ÕZ"Àn©ÖBÏUÚÏ¡l^:­æ‡ôZ[uêÔÆÖ“±ró¦ «\À´#^.àòœrSãZ. -\g” 8-p©­æÿXÐ×5ýÇ‚>¨Ù?oŠ­É?–º/oZSÿ2>5óÛÂùPžƒ•Ð=@Õ·¦þÔ‡w­›»¯¥jòO)VX³¿MüéñsMÿizBB÷˜(#›UÎ# ÝóÊlüAë‹Ð=Ý$>›W~i+“ù<‹Gû•ÉüÚ #K0?ÌbnT&óí åA-ol¹G®Læ;^|–Á}“Ëc Ýÿ>0» nx£…¦7tiÓKä+¬{ç ½ïA/uRÓKY©Ì·B ZaÝ7æ%t½TkMï›Ð}a^B÷ÌêÂõæù^¦÷åòî.Å ÝO}ÀéË.”Þ%÷%ª{Ç~XniXj1ƒ¿˜Y*ðF–e–X>eye]K+ûyYeUK*:¬bº×C@~\LáÛ¤s¿vþ‡Å ,¡¡2/ Tö*‹y?&’ˆ/žQ›}+[°pFªn³IivѤҿnÝ,•ûéŠÌË%ûß•YÊþ·7åãˈ‚_.£3—K>f±dÃìFù–ö¢`éX¤ÈÝ=†—‘ÈýXâ¦í%“S¹R˜ÇÀ”‘ÈÝ($d»Ï¸]Úî3¤q»ÏÈ+n÷É%¬DîùŒsm÷ù’ÃüÚøããÏW>>þ|–?þù¾¤†dmTŠdîù°þÛá•Ì݃ø"s_~Yå -ªñÛƒ?úÄñÑ®Ͻ,¾‘å©BÅsï· î·â¹×š+ƒùš(ÑÞwVϽ-d…ÇGÿEæž1K™ÚвïKVÉÜ—¥‚dî1¡{+žûj:>úl¡©\ä¦6Dÿã»Ïî5¶\ÚUó’¹§Ù½ÇN PWó¨l†¿ÿq½ù}³UÌ6ãX²byüíX²R7½qý²éå…uk÷NpŒ—dî™ûTÀMo¤7½üͶ2˜O…qÿöÒûWæù©xî-Åf˜^nî$sOãù^¦7ÔvÓËýÑ÷ƒ^ªÒ¦7JôRؽo¸¾›Þ¸dû —Í86\4™Þè(ÓËíLÅsï4gãM/Õ³ºµ{Áf©c±@þØpa¼$s_|Te0ßg±Ôá{©ÃšÞn6½<-¬[»·”hßKÝüð½,uø^ê°‡ïÅPÖ­Ý×fôR6½üe¾níÞ ù¬ƒ^Œ×cÉ@}ù8.`o˜ÞPözÙxÓË¿ª~¾—˜^†_ý8Ö¹|eÓˬ¬’¹)–Jæn ª“ÌýX"dzÑÐl/uÑ}?ܨm¹å©I…sw âÆì¥6âŽÚí—Ù°,²‘=|‰ aÚÛ0 àË+ã9%s?=ÊßL+œ{Þ”¿,¬¡"›ÕH=oVßdîöH‘ܬ†–mV?±f•ÉñšU~+ƒy¿0?§•À¼-ü~ü\T[_ñÜSáE•ÊFÝÙ=¾#TóãT 3³Ò—O©ˆð]Z™¬²îìž9ÆêìbÙC’¹{ 8¼’¹™ÌÝx¶Šè¾Ì¥_Ë+=Ô/óJicy}¹´ûâ5*¢{ZÀßW×¥Ý3cØ‚…5ägoÈâcw¬ þí^±"º»ÜÃIæ~ŸÍ•À|,XÔÆ]P¹(‘Ìý<‡›£Šèž¥à¹˜F²ê¥”§1¿íSA©dî§x¼¾ÉÜý]amf”­^Fù»‘dîw®%s·…Ï1£|Ž}*Ë>•…ìSy)De/Ÿ©J°~{/ àö©qçº}j$y?ö^ØçIån?7xõÊ?<¤r¿;©Ü 8µì…•Ë“ çT¨KVZVþ"•»ÑQ¹ÛB]zaå2M*÷S†QHånXѧ_Xi •û¯Våþk«ÜpiÕ©caÜ—-<}Z ¿oÕ©][üÌ»º´òS†ÿî­%2¦¸ y¼¶ :µŸÃ?Ë´…cT`Ú†=Qy€± ßÊŒ}]àR[y€‹¥Àå95ÿç}ðœšþ—Ôì¿XjòKËšû—ñ©©?ì`¦ÔÌŸ2ðh5ñ§ Ü Tî1Q^6¥!rÖÜŸn †\“¿M‘…Ú rY'•ûVá*[XàÒR¹Çô¢r·‰ Šº¯{Jqñ+•{JQ¼5°üKå¾õ†‘å:@*÷e$¥rOGarTòò5±…Æ6²†›[nbÎ=Í 6¹˜R¹§…”ÍÍnü•`x6ÓË}B%/ßgÑÅš^.v+yù2Oó —¢§é즗±IåØÂƒ^t”¹§çYª>`3aÙBÓË=¬Â¹§Ôü—ÞE_xù £Ëþ[rߢ¹»¬m¹¥0½Ô¾¨Ü—ºŒ,[¶Ä²²åõEå~žÂª–Uvå’Šª¤rwƒ1‘ê²îN(“K)Ì=žEQ T•¹¼Ë0XV2÷SÛ[8÷c‰të‹'¥YÃÉF/›¡Möý*k³[e™E“ûT g]ÖÝ=@ýýX £—Lþdú±î4’ÇMÒ±hò5íJÙæÃ“¦ÔÝ£FuÜ~Ï‘ÔÝe0 _ÏPcíDy)­{å"ÖN”¢’—ïa+ìDIOÝ×½¥0|ÒºgÒ½hÝc'_íD#jû [ÝóÊ4™Õxå…5./_ZÙ kT¶´r§VÉ˧q¬mießVŽÅÂÊmHe.ߟc\¹_­»º§T˜Ž?…ÎcÙJÓñá§éøðc HéT@÷|q‹ºÇDõù¾l­ÌåS*î™6³\JéîgÅMØf6®Ö6³‘ïüØgaøÐÝÏŠÛÄe+e_»Ø—ÌåÛx Ó‡—åx»-%¥»[Áþf÷å®îk©ƒ^¶ðp¶àØs€cÓE¡ÓôÆ-Î÷M—”îyeVx,[ч èl¨f›.¼—ºçY˜)Rºo&Ó˃q)ÝSŠ-4½LCõýX¶6)݃(ÆëûqLÀW>Î XáA/+ô¦+„iÓ—›Þè Óû¦tOGqP¼éâüªÌå· +¥{: ˆ* {ØàO ½@J÷8=jÖ¦—aR•¹|K€º«{MTŸßKm×ôFœòá{ч èžÞ`3ŽMßëð½”b.Vhz#þúð½¬ÐôrWwuïx±ÔA/åìãÈ^TÝÓ,uø^öÆqÔÅî=Ö ¬Ðôr?!¥»›ÁÄÅ•¹¼MŒ’•ÐýŠdòËnä–^t#g÷’ËÓÈŸ .?»ºŸ„~¹ØÆÅÖKí[<÷S[D`/³µ½ÈFmKlXX~{Ïý´€»Ås?þ*¡»ûSWBw¿ÜNå-Ÿ‘ãÙ³·b´˜T%*œ{èaLj$;7©ÜS(œ»+ŒKÁ—Ô³íf)2Kç~ꋱXR_ò–OïQ]RC]Rãj{Xþ-™»_–ÿ+š»g|¯dîuZ–UvTî® ¾K"w[àN$r7Cð­¹ 4%r_,fM±Ü]†‚õ²‰Ó—U ¼uKw×ö’¶|,Õ%5RT¶Íœ²GÅlŠÜÏ›¾År?j”¹»wÐouK÷XÀÁ凜?®Känv(“.¥$»Ò–O¶À[Ô¤–Ѭ—QúíJ[>ïÿó{xöe”ñC¿—QþÏ*‘»‰çs–Q®…ËÝ^„}`ú"r¿Ï9Er÷´§»’ÆÝ&žaIãnSDWS^u£Hî)ŦÔ¸ýÜ5Býn¬ê^·29…Dî­P(÷;ú¹ÛBñyaå¾úóÂw<Û¡²m†•–…•Û ‰Ü å|ü Dîø³"÷?´È̓õO\,Õ©cãªNmKd\-Õ©Swkɺ· ?,[&—ŸÃ‘p¸õò—÷)0­YåÚÂÏGy€¶ð‡‡òc#®¯T[¸°-0eÐêrSãSóÊ ßjú·…°šýKMþé¸ÁšûScZSÊÀÙÕÌ¿´M"÷ ËÈ=&´A¡ÜS!M§”?kö_:\"÷<‹zjÍÿ6E u9€)…ÑÈ}3• ˜ä+—hƒ¯$rOïR57°t^¹§ìYö¡™ -ú•È=ƒBuÙØ¾ÜÐ}JƒûÊ=½Á÷2ºÜá)gùCÃÙâM/¥q‰ÜÓ L:…rϳ@”Dî ÊY>° …rßJ~–‚èA/ÜÏÓËÍDîiozCP7½‡~ÐKA}éåé¾B¹ŸV° F—ï´äò £.èîʘwéËrû"r¿?}-ÿ0±lغZ| ¾,®¹…•%U>cA¥ZjL©ošR↔b¥EËËýtØËõÜ3”|ÎRöòÉÆ“²ìÒµ-œüÖõÜ·V/šn¿Ê,›ìj;UZMÖe2Ydjä€÷:íãp§¦½RK'›fWJËâ‰ÞíHQF*wƒÃUçJÐÝ>ŠW;Iå~L<TÖò.Ä{“$rÏC/(kù˜Ø>;Ñ7¥qï¸h\ùm'áÅv¢qy·—!Õ‹Vvû²Êܯ +÷Ô èn§H%Ùß>çXµ"Ü´²Ï—V>fa%_R¹{˜"ÔÛ¸þœ–Tî.õ–¶üòÉU<÷”¢þiŸ;¥cÝJ]×^5ò…Ú¸&ÜÐò`FiË»…qôñåg3 mThhÃt|ù©µ_~`¡´åݲu+Æ«îçÞR`æ›]lÜ~íuk¤÷>Ö­lü±neãr Àáh)›ÛÓÆPÞ×­J[>°±BÓËK¾ÙÝÒÿ|7½ô$ŠçžgQ†=Ö­xå聯 |©Ü3ÊT2]FY*÷”¢(}ÐËRÇ® ã%•{¦%zÓ7½d^*÷…^©Üc¢PlzC”>èeãMo¤~?襢~§WiË/ÎAiËouÐËš^~K¤rO…ì Ó[ôòìèð½ÔZ]•Ê=ÍxQ¹g¼^Tî)ç xî6½©ÜS!KÝéUÚò)°•¶|žEÓ±`xQ¹»c]•¶|L¬Ðô¾©ÜÓBjþÇ9Øøaz#½éûÔzù^ÇY0½\>ý0½\9Håî÷ “é¥â(™û)EyAñÜ%$ëe—aô?]Ò$™û©-.Ç^·±Ùëu#ùb‘ÑësC~^h §´åOÛâ¢ëE6’uz+ˆ$swm€R2÷c‰èðÅ•£ ™»Ç‡µyy T×sO ð±RÖòao—Ê®.µîçÞêØ©þþG#Ó¸ Ü>•'?’º»å!?ÔPÁíS#ǸYýGv­a “¯L¨pî§…tARº }§”î÷ù/¥»AÆ,ÿûzU#IéîÚ0 çn |“’–?ê_\ù[†Â¹û}0a¤t·}ªpî~Ž-PºÿñÏ*Ýÿx½»-œhÕ©—2Õ©—2Õ©S†[Ùµ0¾«:µËÄÀeè"m¡ërmìU[@Iù€n,0ïƒ2寂oAy€¶P,08”rcÁûÔüŸçÀÕÔüŸ2xÓšþmaŒFÍþK«kò·…Â@Íýé´º¦þ¥ßjæ!˜]5ñ/)ÝÓ8L•Ï5õçÐ)Ýmz»û2Ÿ *ÿ“Ò=¥ÐãJZ~k|9€)E±¸<ÀÍT.`Lw…s‰¯l^ùoˆ’–O)JÌ&–É5>È%…sßzÞÐò+#¥ûöÊÆ–§®JZ>Ïâß—ŸÝÎ=Ï"6F7®17»Á~ÀË>4½<%—Ò}ÁFJ÷¼¥JÓKg!¥»K…Ž|¸Yªê¦÷-œ{*¤^lzy( ¥ûÖ Ó¥L/W çî ù³Ý—¥—ß)Ý]³KYËÛBÝÜèR96¹´,¸ì¡Å–øBK±ù@éÔ—XY^1 ¿,­ägY¥Á¤‚Ås?FÙÚ˜Ò²”†l½òË)©ûyLäÓ^DßÒ–wÓ(³. ¡™šOtÚÇá\!ç.ü‰HR÷LU”1›ìÐe“Bï¢ Êt=w÷ b0©g/˜‘·ÝdRÏ^4Ù0£É>³3eûRÒq¸ÒŒçîñž‹'‰’ÒÝeÐÏŠç~,!$Û‹~¢ü¼€RN’ÒÝCÍø )Ýãó؈c €wR8÷86¶âp¢TkJѱ ç¾8쯇Å*œ»KEu{ÑÐÇíFé•%uÏ{Qƒ>xeo,°qgºWì /h9®ÈM,;}‰å’AÉËûxÈ$±ûf:>þÔUýñgÇ*yùTHô¾tUHw—btBºÇ„7VH÷x/>ËÜF&ïcéÊ çJ]ÕÜ2æKɡ[VxøW#±{: _…tO…ìùcéÊßxF%/Ÿ9‚é£äå—é£;ºÇÄf˜\~îtG÷LŠÙ¥KSòò)EaýØvQŽ7½<‘Ø=}ˆR»šŽ¥+MÇÒ=/±ûV¡éLއץxjz#¶éìÚ¦—“Hb÷´ˆ~7½ñ,ÓËÕºÄî¡—˜^î5¿›Þ¸¾ûØxa¦(yù­{M/Oa¿›Þ0/öü±T éØxQX7½!â›ÞÈ^oz#èÜôF‚êûÆKÉË/£,±û2^ é…ÚÃ÷R=?|/mÓ×7¾—Âú±f mzém”¼||[hzã2sÓYÃMo˜îÇJ^>}Húð½ìÞÃ÷R=?N»XÊôòÓ¦äåÝ ÊJìn•3‰Ým¢î¨î)Åî]z ¯Äî§{PÉË ×!»KHÚK.—Šé~ÊðGñŸÞŒQÎ]lC¸^j¹¹ÿ¹ÐFÛ–Ù°,²Ÿ½ÄÆû,°q—ôòQò‹kü>°´òG%Åtw_ƒU‰Ý=r˜»~º%v>,eT#­¹Q ñãl–:½Qê‹j¤d7©TÈ—TÞÛ!±»{}¤+º ÿ%–ØýÞ{º¡û±Ð!Jëž~¥Äi ¹=,zýZXùÛ•‚º»á|¥…•ç«ÒºgþS’XZù›…Äî§·VJ]Þäa %±»ûŽÒ¹i¥ei(hoÆøÁÂiÕ}°Å7]Tùoý¯Ã©B¹6¨lÁ±œMµ»;›oºœ†:¼œ’`©ÝOmq%órÑÖö¨”™–Ó7µ»Ù†¯UêòmÖæã-êÉö¨ÔÛRŽÜï…4,Ëè[êò›:Î^iò „ëÅ”.ZwtÄÄSd÷´‚]d¯¹ÁíUcíUßäîñ4ÔãÍÿ18håPyùÊ‹)$w_^YzwOt¹¹“Ô=€þ‘Ô=~œš«h$P?Vª¬ÐŒ†Æl¦ãóOùX­²…þüÇ=â÷õêWÃÊIÝÝ‘¢üøüS§?>ÿü]`‰åIÒ×%–ï»®”†ö-®»?$üÀßýÈ>ïïþÛ5Ý&\÷c/t_´~3µ!ú»OÖ¥tw3"žÚØFù±jeãm$7¶¡ÛˆÂ>¾ûÔ¬ï›,)Ýý^<&—Ò=Ó‘rö-¥scË“?)ÝC4[hl™ @J÷Àf«Vvï±Ûb ílc”½j´ñ¦—ÓG×tTÕ½j»M/—Á ëî #ÒÖô†"lzétÖ=-¤iÒ¹Ÿ2quõB™Ð—ÙЬÙÝ^bVös7]^ùTP÷Ójº*¨»-oå.ï7ÅlRPw[XfQ {“ ÀMj„g™Ôˆ§6©a2©q!¸Iýô"t7ÄÑŒE5ã/ª”¦uI÷S]ÄnûÈ€Bå¢)ÊÕ³UÊ„ºû…p¥ÜåmŠ´æv°Ôû%tÏ4§rnË_•¿ü)ê½ýkÜìmÿr»‰ÅçPZwÏgZ–X~j~-±œ3º¦»)§:½ÀRñÓ5Ý=›ØAÞŒñW€¥52¥V¾½*mð1Ç!,ÊøøÎNÝÍ0µR“Š/ˆ»Ÿ2! Û©RaZR9< ìîPÈ]Nùç¥néîA`Û–ÒHŒm§JÍu!寻û9­ÑHSîý2˜Ïìâ».¤‘*ý8ãb§n•ó±ùâÀÚ­¾vw#Û¤†tîå+“tO÷8(L±ß¦•ÎXJ÷¥””îÇ[û¸‹ªõòÊ#Ev·;¡6íEkó"€–å•û'Ev÷ŒÁ`(²»- Y‘ÝmaÛ–×#a/”îþ³J÷?·ÒÍöOŒ…‡²¶€½êÔ.ù^:µqOµ–¸7i-<¤©NÚè¾m¡pÛØ«nÚVN ŸÃïo9¶ðG¡rÓxNù€¶p•  ¼C¹€© ïS -¼ÊŒejþ·…o}§¦胚ýÓpP“,XDÖÜŸç jê·…üÔÌ,!L×ÄŸÚ(1×ÌŸfS­©?O¢É˜òTSJ÷THE¸fÿ˜(ªÖôoSÜ}  §!¥ûÒŸËŒ‰Í(p]¥0oS\Æm^©$)…ù<‹-4±qiµ‘ Í,ÿR•Ò=ç Ôò•m[›[wHé¾uÔ\¥0¿õ¡Ù¥wû¼ð~Š ²MoDT›^P+…ù4ƒú¦é UÝô†nzy¶¦{º§£ø 0½Ñƒ^–2½Ü-Kéîgñ¿>)Ý3¿(К^Z /–v ì~ª‹LåF *‡ùS>P)ÌŸojSêîÇÃp Ë ÷¢æO]|Ç…•%UŠù¢¥1Å»ëšîçéÜD},¤œÒº»¿À†´î¶PÑ]B#â{ˆïå“ÿÔ|,ž¡õ.”->η‹º{4ù>‹&¿£É]4©ƒ/™”¡—Šq[2£Í‹&Wº¨»gåþ+œÇ2 åîî¾§ñäX/ŸÜ«)²»k£¹„rB+²»§-:T9ÌǧPü]Dy„#¹» …Rj/×Vk®ŠíE#“º½(õЯö¢LŽ Èîn!#ŒÙ}k¼½h¤ï6«ÑŒc À.<–­¬öo,ä%@dm·3{¼YžÊ|]dÙëv§˜³Êcþο"»›$*ñþøG€ûññ§–x|ü1¥ØÝ J’»‡Zô«»§åScû–żKEîóããO©ÖØÆ­ÛÆöí®îé\*ÆÆ6.É6¶ü›@rwWÈÈ ÉÝmâ½²˜O)€¡,æÓBvï±Ý¢é¾t•Ü=Ï"vµœ ìžA{üfgË´} ìîRÔ\”Å|*$l¦7® 7½ÜÉ*°ûR¡äîéCŠ“¦7®j6½×{,]©NÛéF2uÓËI$¹û‚ÍwÓËc?ÉÝCÏ)ŽEWÓÿ˜^ª3Êb~ëCÓúùA/CêMo$S¿Ó+¹{:Š˜ÞÐÏMo¼²éHñÃóÂ9(‹ù4ƒÝkzã Óû&w_ºWr÷˜(&›^¾—»‡ 4^rw›"=áqlð"wO…˜°º«{L]%¦ž²˜w)~¤$w_Àþq°Âû±äî©ðEî¾5Ãôr½,¹ûÖ‡¦—[Þ¦—çÖ?L/Åav÷³¨@Iî~L‘t|áåA½ÂºoÕ-»ô®’»ŸB!¯ßØà7‚½J ë~žr/µq‰÷Bû–ü[Myx‘|äÞ‹Qlö^Œ­^^¹J”Üý´ ,Þ‹Qò_X£mëiC5y}z@‘ÕœRcµO¥Äz=ß’ÚÝÃÃ2‹)SIíî™Båz!»z—Ñn_D¹š“Úݳ˜ýfD©[{ÀS ©Ýã´Øn{Uú3vO)þ«`·Ê!וÝ]Š_yå1ow¿íVÃd·n•š¶Ý*$wÓà{¼¢BÉÝïC¯Àî,JÊ ,×B’»Ÿ2<ßQ"óÆ’-X`)¿*‘y·€B¸…§‘ÜÝïó"w?~(ØÝ¿)äîù³r÷¿\åî¶Äqé§? ÷âÕ§]„C^}:•q¶•qÅ­¬ºôÒæêÒy Árm![RìîÚ¸è+0LçòÓ6Œj¹€K™òÓjÔV`:m«ù?eà†jú_ú fÿÔ²kòO«Ñ‚šûÓjÌ­šúSZP3ÿ±PѪy?ÁðÔ´¿tµ¢º§eК÷c¢]¿M!¹.¥\}Hëž®£[Sÿò¶Šên )ª{*dÛ*—Һ絨?×ü¿õS}±ÆÄÆ׸ÖÚ¼FÞvWhÄò#Ë…´î[oÚ¸òÜÔ†Èll£nÚgƒËõ€´îéyö¡ÙŽ2¼N}ÀKÕðF8µá ‘Ù.6ò››^ži1½üÕVZw¿2Ï‹t]w›¸ Só1Q26½„MZ÷Sê¯üq^Z÷Ì/Šç¦—ÚíÂËHPiÝý$Ì /‹. î‹ÔýÔņ-´ÔÀY ,²¼²;—V¾ü²ú"u?íå3–SJ¶KiÜa½† ½ŒòÏIÝÏóã¦è%4BÁÐxÎòÉmÊÇâ¡àK'ý”¼ÛFAÙlRƒ^4#zyÉ ÑvÉ é~ɤ¼`R‚¾ùaÊ—Y2#â{Ñ ­ÙŒa[6£ÌÂe–ΰ¬# Ëò‘Ø”²êJÇ&¥»= ƒt[÷câé¹”îË@Ýmâ¯Dº­»MÌ3¤æÓ Ò×û @J÷4ƒ/¼œÆÝÑæ”ñÔËihôþüÓ#+ª{Ú7¦¨î6½]ÖÝ·¯»´òOù¯ÇŠ•…Ž%+esûRò·YWcIæ~š·£û»ÿø»Ïƒd]ÖÝ=¶þîG䮑åÙ«dîérê°f–§Ê_Þ¥Bl=¾ûè¿of–±jßÌl„n›Ù¸ýÛ«V®$¿ù»Zöñݧ|¬Zñ-“Ì=ÓôEæž>d)¯Z#üÝ^6FÙàFGÜÀàFšÜP¥½j>ôª5þs0½ÑBÓÚ¨éÈ]ÓË£êï½TŠU+¥Ìƒ^+›^þï£ËºÇ9ñY½¬ÐôFHºé a÷ØsÁ}?ö\ToM/‰’Ì=Î¥Ž=Ÿe§YÏM/]Š¢ºouÐËgôr¼Ž=ÅqÓÉ×M/ƒdîé 6Ãô2¨÷ûá{ÑBEuÏ4§*}ì¹("›^v¯dîq) 6½œDŠê¾5ÃôÆõÔ¦—ßj]Ö=CÉW6½Ì:-™{î•Ì=²7ßKü8áb÷š^J+y?‹ç­’¹§£Ø ÓQÓljÅô2êL2w?‹g5’¹ÇÄW^z‰!û)ñÞËnü†ám®ìåOmÜ)ªû±ð+©¨î.Cñr±åDQÝO™°,´üßð§÷aÔ~Yî¶tU÷óœˆE÷> (ÿô>Œšðu}«¨îç9Üî(ª»[@q~YåçTÙË{LYfIå7]ÙËžÈCnP#Û †^½ ,ÝÔ=œ²‡Ž#Yêýö²ñ¨%•_tu?bЩ²—?–·«º›TLf‰Ü]Röò‹eI¥SVLwwÿ›‘È=ƒÁ'-«”.¤qO! ){zœÂëÒJŠtUwSDIiàö¥5.Êöy·´rÆJã~Zê÷Ò‘ò +÷Aºª»Ç•Šù¢Ñæ‹*Oh~«Ù é~žÃêƒ*æ>8x¹{è(Ö®G Qx9pæå”¿ƒüöÉ…qŸl±m‹)ˆ¹{>°¶¥4ë…”K@e/j‹dÞËh{/£aYF阤qÏŒäþúG&oý £’—O…—íTéò¥qw)~¤q ¬Ð^•²Åo³ò·½*ïÉ“ÆÝcø"q·…ºïzU gR¸» Udÿá¤p÷¸ÓbZYÛÒJŸ!…»ç?WÝ%”/­ÜF* ûÒö¨f ÷VáþãQ¸C%øôÇcៈէ]„_óêÓ±ða-\ûVŸN™”¸§i\¼¹6~rl!öpˆÜ xy€§$®@7ƒå¦Ñð©åº2´¹¦ÿÁókö·…'^5ùÛÂ1kî%£¹§6´ fþ”I»-Ü´Ö¼o IMûËûÔ¬o ? õ œºîiM5ï§ må-¿4â³)eË%q_ºH÷t_ÆB÷´B{Íþ1½HÜóÊ(IÜc¢ÐZ`^™ÚòÒúé-qù4ž}h`C@^b?…ÉÌòóüÙÐòwdIÜÓ pöÙØò7]ÝÓ}ë ƒ9èë“Õ¥˜„H÷°Áfì²{ /?t çžRn4½,¥ÄåÓT/M/âtO÷< ÿbz#-¸éåQ·$î®S\w›˜nRw›¸Úûbzù›ª$î)ÅÆ›^þ ­Äå3”^x)1J➦£Ì¢Ë¡Zp©K/¶”ŒZÊÒ‹,Kž6£¹ŸSG7­(±¬²Ä’Ê7\Nñ†J\þ<<®{^HCü^F#bze¤‚¢¹Ÿçpù±€rs§ÌåO™·hî® ý¯hî.CËÂñÏËf¼Ï¢-X2#¯»Ý*ë%“ƒ°`R¯^0ù2 fHÏK&ÏÌÝCM‰}ÙŒàøõ¥Ç²/ow¾{ æ~ÇP×t·…B§½(Ï,¥q?…âOLJñÖ>4MûPþ…%‰ûy-¤pï‚“—ÂÝ&~^¥p·‰ñFŠåîž@ï)”» ñ¥ì@á*¾.¦ñShhßÇÇ }õÇ?*\Xùìî§á<ÆRÖòé"ÊØKkdU_ZÙáö¤ìº…•Ë]Ð=ãÇÿüÕgŠ Ü]Šg;ŠãnSDIû«"¦¿ú\(myWZª‰ éÓ_}nï$pO§c²Iàuöã«OeÙ_}ž—Hà¾Ux@ËfkV .{*¤ÉØRtPÚòŒ².èžîåŸ^³†mp#tÝKî*ÇÝÏz¸§…ìy¯Y£”é4ó½˜'ŠãžW¦æx¬Y)}š^žŽè‚îñL¬ÐôRmùnz¹O“À=£L™õØqñ½zi2½¡›^z Ü3Í1(º {ZÈŽ:èeo˜^ž»~7½ÑÂcÇÅðÓËŸoÇ=£Ì>4½qñ¸éåBí»éåþSi˧£Ø¦—¿0~7½\HJàž yjtø^šŽójĦ7DgÓËf(Ž{újïq^@Ýö ã¥8îÁ†2ëA/+<èå{ôòY÷󂦗[qÜãˆ^î1á {LlüqÈõ"pßzã8/à³L/I•ÀÝ2M÷˜^î6ñÀS ÷cŠèï…—SHÜO™P«]þÐ!…û)Ãe•î¶¼(Ü%¯۰ŸÞ†Q"]h#¹æ2Yн £*nb©ÒX–Y^CǾ®o¥p_úÀDZüÏ`YïE•Нîæ€­^P#Hz9 Ëb‰Ä—Ò¸‰üXÜâ[¤î õ?—Ò¨o)} á~ª Uw)˜æ¥4®¸^ïöRJ5OêöÓ‚·kåTUw¢ìmϩǗÓxÒr7YÛ¯2Û–®ænLðåWºòv ”°T.ÀÝãJÝGY¬Í»0*'>2`ÛTNý_ j ž7aìí5ÒN!{/¦‘dÝGZøx(_y÷%F;SŠÎ‹iä»^L#æz1åïOŠànâØ‚Å4äõ¥4$쥔Bâï…”K2‰ÛM5ç…”Sõ÷2Ê1ý½Œr7)q»û:”^CÉ»ýåg\‰Û3xì»û—_âv—â\‘¸Ý¦Äýåç)žÄí[…†•ú‚ÄívdÒŸ~Ì …owª“vª ¸^Z¹…—¸ÝãN}iåÇM÷r?e¸¿¸}±,­QÛÒ–¥•ä)|;¼#Äí¿ýYqûo-nóŒüÓ…~½úô1üNkHi»Kð‡ê-Á…ò>ÅïpÿŸ²3Û%Ç‘ë/Õm/Ó Ü}iÏx6{–™ï7‰$#Ô'RõL(S)QK$)YbΓ%\“,t&Õžóùt 5úÇÂÃîý[ Öè ?kô…sa þµ  jìï{€u ý±ðè¤FþXÂYŸ†ukûµ 5ì/µ®Q¿@Pƒ~Ûµ®1¿`Pc~,k]ƒ~»êpú­7…H!úc«¥íK;´´½E¹¹Fþš¨‡ÖÐßÎ`©ûû.–ªÁiô–¶×ÄO6®‘¶Û¼ÒiôÜÛ†/Òöö uy#ËÉûNîýdÖð€–º¼©¥âÒÒö<òIKÛkb .¥•ÎT~{ Ñ¥^×ÑÛÛPüYÂðÒ¹´´}é従{±¡þyÐ l:Sù–¢8jzyZÙÒöv K™ÞÑ6½‘XÜôF)Ó&Óû½=5Œ rÑR¹àeÈÝ'yÛHÚntÙ´"—Ý!náÎ:OùSiþ€`f3OùS‚ú½yeµ„+_"Xá™? U€úI òQÆ”ªª)¥z*H#rYŒFn!z§å MKÛO“…|,>Cqž;-:CÀœo‰Ê§<Ÿ…&ן…fè·^PAšpœŸEæ‹´ýÔìEÚ~ !9 Í—7 Ñ[pF˜¼à|‹Þž°Ñ„gtµø|‹Þž§Q{ ‘JÛ^4´hÊ3˜ŽÞž!ͬ}h܇m™´Åh² ej®–¶w®a-DiD—ó?"“=ýSƒõìO±×”²Œ)¥zí©Ÿÿ§´°½Ÿ''ʵI ÛSˆ­ T#¢Z¨Æ-èžö3p{ØâÏ&••©œÈ¾Ø•†2|ÌøÔxÍj\žíŸÿƒuÜöeZoY{Û]ÛqÛk¢2|¬W)äWf(hY{õ±^-_Í+ƒ[ÖÞïÂpïôäû.Öðp¬Üc[,>ðX¯²††6ò¸{½Êì´ž|+O ÝëÕ¦÷üÏ-uËÚû@~×±Õz‘µolx½ú·½Í‹Ê·¬}iùNO>&ŽÇŽÛÞRTkÝÔc·EeøX¯R…6½‘üÛô†ºnzCã5½¡®›Þ(ezÃtð“ój¼¦—s\ËÚÓ¼ü êÛ±ÛbC™^ªµ-kïát¿™Þˆ˜?Ž (¡›Þx×A/kx?)hY{kÈ6ïâ{ËÚéÏ|žàå4ÿ]ìF¶ÐåiÞw‘Ëà[Ä){´c¶§w( ûd€z¿!ޤ\Âÿ£o’öS†vÄöÀËN°{4çv¯ü‘£%íy-¤\ uÀöS†ðtVò±P¤qToH1ò;+ù€MÅVò׎׾Œû–´ßµãµÇÂj{IÀ»×Ú©Rëxí©5²Ö´§…€PkÚcyѴǪ¡ Õ˪Q7ŸPíö SKkÚ—ï©€.R#øw`ìˆëYÁO;S´[kÚOÝBÄ´3¥^êÃ,ôÏ/P§§à,Néd~‰ÓÐ…)ö/aÊ©º5íçKãæpQ5ð9+u}3ŠuZkÚóŒÈÖ´ùÈWîiŸŽ©“’_FkkÚ;†Ø¯žöãÊìcÑʯ:Ž\ùY^´FôC"`){Õä}^Àv­‘ŽÛ^•j·heÒ°¿zêÇ­iOO¡õ:%ùxU–­~²‰òê)JsÊõQ Û‹cˆ—ß®u¯˜m•b5~\{°®àÞRôÓ%lËDÁþ¯~:¾®àÞRü§ª„m gjÃ&6òß‘-a{·sÚHnjéoJØV²¿nÙ¼7¤w“ËzÅlï»À\¶Ú0…m™àBJØ^¹KؾuJÅlßX¶šýU1Û2Q5½¡(›^î0*f[Õà»LohÞ¦—;áŠÙ¾µaÅlßZ¾Ò’)$oÁ·i‹]Jq²=O£êkp!F [–´T–…,›MÀRY®¼+¯ë·ç;ø(ÊGÉÇòßC n*b[Há~e!ʤº{+†¯¯¤äc QY|†Ú*<#–[tò¨º’’Ï{^îß^ •`¡qÙ"3ê&0#ŹÁDïÔýÛÛ¢¬À¤Þ-0© L–˜/ÛÛ9ìj¡¢²Ø|IJ~kNÑù’”|Ëñx\­ˆí‹o¨ë··¡™Ä¬"¶/„–¬½•î¤äû¸P”íA9wUÄö¾‰Ò¬(ñ-Y{_Wl›R ÑöŸ¬¹'ê¶žû©ÛŠRjמøùA¢”¢R‰ÚÛG©ioóðsìASÓÞÖ¡EœÂU~‘…¯+·çYˆœ(Y¬Pí)Ãu`IÚ[³Pj?J™ÙœF¾qÏõ\Ž–¤­wQ©5© "(I[¥¨ƒs=Úµ"µ·ÔËÛü.ÏõlV#”ø¾R-Iûú.;ÕP  lÜ ~¬TÙ†^©†Tï•*³Õ”¤­†â½R(~¯T#gû±Reóz¥Bx¥yԽ͊ï:öYÔ ïô–¤½ŸZò±R¥F~¬T©[~–¥L/û*R[Õ Dz8Z*µv´lzã oÓû"io5¸cªHm±AÝÚôFRqÓªðq6À‡X2T*rÕÍkz£ò½Ô­}[ÞôFH»éÿ Lo§‡¬†éÌᦗΡnÜ–?%iïÔw1¾—òù}•P’¶ÜßezCK¾Ó[©ÈÅ<õØÃ÷¦¤-)„Û÷Æ%ã½§M/#zJÒ¾9‡’´U >ð8%À‚¥$í-Åeeݸ½&†C–¤½&jQ%i‰Sej%~v»aº!î_ %iÏ{è‚*ùXxbY’öXBžµÜ*×}Û[DT"òýRLZ%ioÝh±q+`CÏ5¯TL…+«æ­äi£ §SiÈ·ÕBÑ^5haÿˆÒ¸ÔÛFp•! ÑXÆ?b4b±(›Íˆ¦¤}#¾¢´5NXJ2(­rï0¡Œ)Hã:mCÊ£xAJi­r/Šy )¼VEio¿Ò"Hu^Š¶Ú‡z©(àr;Õß(4K*À‡T@1^¨Fl··_À»îÙÞž`ÅÅ*d*ù”á`ýés¾G¤†ØísÖÀû/Z¼cø‹ çXJÚó=</I{-”§Å)×6¿Ž5ÀßzŒ_^€ú’´×1RÛ§‘÷ÚœRÚ§\ãUòuÚüž+¦%i_ÆC…iïè¢/H#§ºåOÕ%ißžæiÿEÒ–÷¡8mú’ƒ|Kñ@¤îÙ– ˜T˜¶ÞÅ^ò¢5h/ZCt÷¢•qT¿¯Êß|êÊ/¶W¥ðh¯ ßY9È—0Y’öö¾¶$íµ€¼’´×ByZ´F>qÑáকµie DëË-Û[7/!iø£’ö‡GÒŽ»^?ü>R^ºexÚtµT£nnnmA{W£N*T£Ž…ÑjÔµ,Y8”ÊL¦±,° ¤r…Ç妗Üå.¯©Yj-€¾Æÿca¤@MRÚeý)±P#^Âóïøcá¼Vãþò15ì· Ú¹FýöÆ\ úµ€ô—2•‚\Õl-go³á[+¹JQ­¿5g)Ci¦kèO©})µºe[ïÂìÒrövkXÃMüd£Õ0«‘\°~ànô£q ‰Ù¼†ÉÀòà®Roå¹­äêeøÂ–³·yÙ)æ6¾Ëà¾Ü²½Œ]žÁ¶œ=ÕàaõGÃú¸éå\ËÙó@¦rj9{MTJM/Ó[ΞR¡#›Þx—é “éåßÁ•‚\­A‘×ô†tnz_Rë“)Ê^úÓÊ@>…"ϸØôîB—¢®Àe“ [àWaÚóz*ÊB–ËG WªÖr³lf¡ÊwTŒ)ß.Jñö–³¤"[ˆrxµœý”‰¸j’±øŒ§ ϸ}[t¾Ü±½ýBÍVl†Ê*4#¶\~5,3Tc{UÀÔröÓ:ljq‰n« í)AÑÚ üj .#9¼À ¡_dFÊt¡aÕb3¢á盚=t°o/Šïžhš³Ÿ‡ÅíÌÆ“ª(¨öŸÔC…g„O¾ÇxR_¶ï¤l%{;”^hH¯”UŸüžcÒGÌò1çÃrLù°и Úž“U»"ZÁÙë>à +ëø:£!{Ü j%{‰àì‹A?-d?ÏŠ<ËGüí1˃ƒJ9®9;ˆ¯÷mT Ù»6`©c#EõÓ³|ˆËÇV œ´}{—IptÏòLð_±Ùz ˆ¨Øl™àèZÈÞ… ¿Ë¼Fô¸N9Ö¨€¬RŽë]”õ½F´í^£†‚|¬Qù.¯QCj÷î*‚ó5*xì¯ø»‚½kèé½>›}믲·S(kT*ȇ¥úizC&6½‘qÚô¾Äf«ò”nMïËÚrÁ,ez£¦7òoôRw¾ÓûÍô†žnz>Q±Ùª<»Òô†Zmz£ M/·lßL/‰ª”ã[èJÓÕ0½\Tlö>0rÎ;,¸”ºS[–šéA/8l!{M‡ïåMo\}ÐKùÛô† oßâòA/«aßáè÷óºS[Øð“z©Âô²åß˃»Ã÷RO7½<-i!{:%¢¬}ªÅW ^Š»-c? ‹Ðå¹bEfO™¸Õ[à¾ÉسÚçÞr¡ [Æ~ÊD¼° å1CEfO™È].dãvn/j_dìY耆ºO[ãj±pe`[EfO™È‘î=æ-WÊØ³Ð£+N¹­\ãó~pý¥¡V Òh53Êü²•l|;•¢/‘Ùâš½`F_tìéZÄ(W^-cïz‘±SÜÚ-H_"³/VdöZ(P R.ŸZÆžU:IEf¯äeì)Ã÷Òˆ·OeçUdöV›ê»(å!Xf«M_TìiSZj¤i¨Ä-bÏ·Ræ÷á[N F~rï½Ø¦×½W]¤=5ˆ »½  Tí½×‹ˆ=.Ž}Ý}ýÔ "Ð}<@ÙR®ôMÄ~j©(å‘W‹Ø3ìPëºH{[½P¹Æ/Χâ²÷i£Diä ¤Üĵˆ=„Pª¤¤ê—ÏUÙnf”u3£|Ï!aÑä)ÿŸgw¡óžò™¨Eìuf| ¬ñ.“J-ï—¬¡T{ÁâüáSÙbÁ/ÓŠªW®ñ¥ˆùTu¶ˆ=LRBöa니ý”á‘jå_Z)£Û§bö¨‹´×qÒ"Z™þ¦â²§ ]jåËÑn±ÿôGEì?]Eì±ÄÑò‡ß×ÂS8Yâ®2—áÎK–øÿÑþbg Æf5êÔ-|š,/Õ¨[,”  ½]¹€±ðwÞrkÁ—–  Ç^y€µ EËìÓÐ5þׂñP߆25ú÷{à„jðoÔºÆþ–Á\]CÛ ejä¯ßS,9j௅Òmü5¡ -d_Ú´…ì­8XƒëGq¹æª1qz©»´UЬñùà²Çš©aw• ØjPÕ5®9n^9›u\öVƒ ²‰ -ØÈ2Ã`Çeï'³5 -%β÷»^„ì5±—Ím_\þÞ_ Ço|v\öò·ð--do²†¦7®¾6½‘ÜôrµÛqÙû. ¾¦7b¥z)ošÞÐ|MoTþNoÝ¥}kŽËžÊG.òÃÙR²½q£·à´âb—î¤ã²Ÿ:€ÎO—-$li´ì yZ–0°ˆý®üøÃÍ¢ˆXåKL*J˜S9œ,DÄÃÇÂ"HCÆ£!} шæ¡<ú¬„ãÓao‘ÙOWF\´ðäò¸îÒž§…Ep¾Ü¥½eàs+ḀFë X„&…i‘Iñ[dŽÏ"“»Sôôg¡‚µØŒvœÑÓ¢“I?‹ÎøBxF;_ù¬«´·©ašOj˜æ¦ðDtTöºxX¬œT]í;_tìç-¡Š‹Mjƒuƒ¶|*j&¿ÉŸêí-Ö›üšcš2ö4 ?TpÆEØ¢“¨}žü×¥eìÒ·eì‹Åx¾ÈØOö´èäFÅpò;g܇ó¤Vm:#´ðü£ÅZÆÞi’zä±B¥Îê9ž[œŽÇžrl½Ïñ-cïRƒ ÷1ÇSL=æx¶†çøPÓ*ßu¬P©p›×7{ÛT|õ •QËØ—•\Ýœ­NáÞX…Âí ?.A÷ 5*ïIÿMÆÞ€c…J“=+—ò_ꋌ½mH­Ú+Ôˆ%>èÅtY7gËÁ¢†ßŽ*š·nξµ|Çcok`¤|;è}‘±×ÏSZ>èek˜^vJÝœ­b8t<ö:N>ÐôÒß·Œ½-?X)ÆebåM/ót<öe8TŠqµ!;å —Õ8è%¦÷-ûBï7ÓËáÐ2öeTÖÍÙ·Ê·Œ=¥¸<ìxìË[ÆÞ†¢öxÐKÉÔôÒ³u<ö¾ `WŠñk5Lo¤º¶ï¥,öý8@W~?N¨U›Þˆ¬>|/5øãt€­azùcDÇcOkpËöÝôr1Ù2ö”Ц÷7ö—è kï¶XFìrqÖ:öSžxÔ­Ùc‰æ¸ü½©Ã±Ÿ§q jû±p.épì±P_´qÓ¶˜ …[ÈòûÇžºÁ·ŽýXxTZÆÇÙÏ…k”­añ¢–_z]Ôv@öS7ßBö¥ÒÇ)saʳç¢4¨¼¨e Äht¶ìe›Qþé FIâ1iÉí]#ù¸ }¹4{ZŽÓIe_©ŸRL ?i\ÁmH©k Rj ­cÏpä{)O:{ÜH\§í­¥bQÕ¥Œf­üâÛ<ü S H*½ø–;mûÝWÔ•Ù·2”뽎ކcݼ÷¢Àí£ÊòÞ{Ñâ£v( D)w0-c?µ¦ÐرØ%n’¤Üev,ö”¡$-H#sµ k•}tÅÐ`AQÚ‚4ÄjAJѲҋo­Ñ?-c! ·c±ÇB±ÚŒ‚ĺ2{©BŸv,ö<ú±]éo,tˆX|“§|ÓVzñ«ãŒu–Óäxn û)ÃÏZÂ~,\8|1 ¦#±ß;Ú“<•jÁº»àŒŽ¶çÄÂå«á ™Ò|„ïÞwQ‰=LE¶q#ÊýqKØ[ (´„=¦Ðs½<ìÕæ4âœíCy:Ó‘Øó.v$ö˜Ô‘ØcŠŒížâ£5Ž÷›Ç–Šš¸—§QC/OCŒöò”kë¯Ç¶ŠlxyÊ…fÝ’­†b MnÜwíåiä ?öVü)âXžRq6½¡±š^ž–×-ÙªŽ¨‰Žƒ¨%ì_ü.ÓËñõÍô¶–°—yvŠéN1½•-aï0禗\Ý’­Rì”csÅN96W¬ü±¹b5L/½MKØÛì/Ów›+ôWKØëˆÐ_-a¯ •¯[²Õ¨ÆwÓ'UÇæŠÚ±é劫nÉÖ»X ÓK§×öö2kxÐËO¾Ó[·d l¶á±½âw¾—ªýq4Àš^Ê-aÏwñ ¹SŠ?& pQ|,¬„7Z¬ƒÐHv‘Ka¬ìç=Ü›ÖÙc‰ aKOÝ ö<𦠥·èHì)ƒ/í„âcÁ—vBñÇB`[Á Æ|+Ø—§ ×øÑÊeÛÁÊý!V¹E¬K²§<k{Ç-ähÊu[ÇbïpI û±pÚö´ûGò÷ìbô-£øÔà7 ó†”jH1’[Â~G¾C±÷EØEé[Fñ§^-a¿3ß¡ØSÕn {ÊP!¥„,JC‰¥ì¡º${A“¶„=ÍÕ‘ØÛ<4 Óˆ ¦\²¶„=ÀO5¦ÒZÃ~w­a?z¥Ö°§M©¼ûd€Š¸8åXý)NyhÓ¡ØÏ{"›·0åXýy,þvtý¦üwå§0kµE)·Œ­aOÝ0êŠìm7*Õ¢”[¥Î'>O£ü(Jé{:{ÊPAöÁÕmQÊEWçžF¿ØöpÀ/¤\´†=„`4t(ö@ÊÖ¤ü»©5ìa”O;ÎTù©žóyHTWdï¸{Ó°gHò`¡5ì­Å=é³û¼`˜j‘™Õ½^»³…*/ƒøåå*ÿªë@ì÷ök û»–°‡4lKØ…Çr-a…²Xå¿f-aO ø²RÜö!+-b•ç(-aÏ{ÐyˆHØÿýJØÿý‘°#î‡ßÇÂ_°«QÇwäÙŸZºOãÖPÖ ußÕ„-œŒ®ï©FÝ nÕ¨—ï)p)SàR¦ÀZà5ÊŒ…šjÿ}üV ÿµài5I]žVƒËÀÕØßÞÁ5ö/5¨¡¿ßƒž«¡¿5@Ýjä…Bü-ƒ§ÕÀß n-a_>µ%ì5á[;{MTKkð_jÑd¯ ˜´„=&ÎÊ}Aöí]ån,°&ª¥¦•?(|4®‘óܼr,u ö¥[¾ôcKØ7“™åj¾3ŠoWR?¨å'[žÆ—‡Ž-aß>ÙèR´í@ìÛ» odJ?襞kzy%@gßwQk4½Ü~¶„}­%ì QŸL/Ã&ú‚ìí/VÞôrÝÔö6/åXÓÉÁg‹aÞd?ä´ÒÅ ×-a?êá"—u·üTS 1\ÌRB±|¹x…ãù$Zù(±ÊZ‰TÄ)_.J±xø$FÑð-_?HµQ|¾©×O‘°ˆÎеghÔb3¢†…fXDfÔ@`¾Å`Gl‚KÄSÛ§²Œ¨¤-(ÑËŸå‹|ýTŒ‚· d ;RZDeÈÊÂ2r¦‹Ëüæ›|=Àw}šÑ5b3ºóp ‚E'µKщŽiõz½ ž%8YÄl¢„Фl§I%\d¢g:øÔ ­µë2ûRÆ`²“ª¶gzV@dFsùKn‡Z½žÑĶœ¡x N.¡Z½œØl‚3´pÁÉ"žßù¡f¾¹‰Ïçðϱ ¡=·óÇÀÎ#¾ây€½&jžÛ#••çö=·GicôÜúºIåúè«QX_;ѨƱ“¢Êë•iüp¬L)Q{eÕ8V¦Ü…ÞW¦€=‚ý±¡h­^o)¸î¯^™ò`¿Õë)•?È%6^™†¾î•iTÞŽ•rxç_¯ØyÄ×íà“[½¾ÐÛØk¢äiz#eõÞÀÞæe5Lo¨¡ÇÊ”úºéDצ7L¦—'›€}éÊV¯×ÄÊô²¡L/{¹óˆo§°¿L/×逽mÈ£ÓéÌ}ÛÐôF(õA/0½!½û*6ÔA/åÕ;½­^ï'£¡Z½ÞN¡(kz#Òöð½¬ÆA/ßuœ  5Z½¾°Ñbï ¢øz?èì-Åï:è¥R~Ð Wùýð½4™^.ã:{ªÁdƒ€=¦¥½”ÑZ¼~ Eâo±Ë¿¿;øS†òM߆=¶¬À{qaÞÂ6dmQK÷ÞâõSƒ°ˆÙ¸'[È2–¨ÅëùŒ›¯KHáâ5¢……+۠ïç=Ô`k€‹ÕøR¡ú&^Ï{(Á Ô'§Ül´xý<-Rœ{MKÑßû- æÎ#þ<íM¼žZ³ŒÞb4î>7£Ç­]ÏX Å¾•á‘?|Ô·aÏã(Áú<€š© e†þÖ®8–1¤hìN#> §Úá×3LXF2~µµë©Um{TÇü¥ñAv¨L Ôâõó¦tr?íPÙ­^Ï×R³¨¡ö T®Ðû6ìé=~íÕ™¶z}©7_|š@„å5´ðãtº¶@Äiô«8 mÔΔª²)æ®V¯Ç)Ð"Nù¥­^?eB‚õÁÆP'‚©‹Sþ«Ðêõ»‹éìwÓêõ»Shõúb±3e»‰Ñ£¼Ãà—§ü¸ñÚS~ô¬QÊ VþòÓØ;òàkyÁÊà¸À~JEÝM*/0éøë}{ÐëÕ¨ ×«¬Eë×CÕcÑÁµ¢5’‚‹Öš­<ÿkýz8¦-Z9Uvö0 OüWщ­E+Úlýzžæ6…~ý?þ¨~ý?&›ý~_ ¾¶u,ÜèU£®%õëµ ªQ×Â…·-\ÎÈÂö®F½Ô u,Ñã²p9^.`Ÿ†” ØÖÁÒ±\Àå{Ê\,å.µ.0ê˜å.u«ñ¿–Ô¯· Ð 5ú/ejðo Ч5øÇÂÁ_cÿb©¡¿5€ï¬‘¿ Ç5ò÷q(ÔúõšðE­__šî£9% ­_墳šTF‚¶~}éÀÁ^ÛV*ì¦5òc—ØRè7¯û|Ëw™ØÐådù{€™å6±õë©á["ñ5ñÆ–?Ì´~=¥â–jƒ·T›\*¶H|È#˜Ö¯×„1ß!Ø[yÂfzßnľ|rë×û]€­C°/ŸÜúõÖ2¨éåLë×SêM¿Þr0½qû¶éå´Û!Ø—6ìì1ÑÙ¶~ý˜"F\ðòëÖ¯÷«2û±ðÏË&¶l¹Z–²,!`).WTW°òF•zÿáeñ0JÑۘ ´†ý4UZ3J¡ô@š¯ Åêìç5‘ÅZ|òÚÏr®a¡• ÎPÅfd?ša™!ïŠL~¨À¤¸+—ʆ—T½íNÑÌÇù¦aÏ ãÏ Bó-ø %–œQFpÆO‚3êEgäpö €’¬ð¤AtRœ”6Å& B“2©ÈÄ8ûr¸Mèѓϗ|–=&EwO÷üFaI‘öê/;þz}6ª,0¹ m{À`¥…f”1šüÁ³<ûRh2£@Ç_O (â ÍPä…&—q-a_ž&4CÏ5š!Ûu†É¾3hçÉ3µ¯žÞyœßØÛ}h½À^êâcb(À×cqJíØÓ;`:{Èà±™¢2ëÅ)è¿À²”‰@e/Nù/\çßÖàwÙŸFt/N¹°j {HuÛ³}D‹S~—gü·ìyWÌ{qÊåsçßRÔ"z)8‹S–:èånþ8Àwuñ©F„ß§-aoå)ÚšÞÐÄÅ)K[+ª¥¦7î»>¶Vðu-a_:¥%ìËÐëì)¬Æ±µbË›ÞhÃc5À®<¶V| élগ ü¾ {»’ï:¶VlùckElLoTÃô²S:‡ø¶!IÓ·.£M/·Â€=ï Óý` sˆO)þzÛöÍdz#×¶é´éÇÖ ž­¯ÂÞÊcTvöv%Ûð8óßMoˆÑ¢—aK­`?¯Š°r±K¹µì©¡¿~LÜ÷‚=/â' \ÆZvñy[HØrtøõS&R½ ÚJ³<<íâïµîðëÇAÉ6TUï´Ðw~=ïÁÝá×ïmÐ öÔ­ÓaÏÓxH+TCC©¡m ÔÙ§ìíÎ >½@]W”Æ?‚”rY‡_Ï—²Ý| À/¤Ñ b4R~‹QN×?Ähd7£Ñ¢b4²„‹Ñ¸<[Œ†v+Fã†l1ÊXŒ°Ÿv‹läbô-øzØ¡¤ëÓðÖÁ×Oú¿°‡Êáö§ÌîÐöSèíì±`˜´~=Ìp-_?–Ì}ÜòõåE¢4¤[SÊ_ Di„XÛ•²åD)7|=ýÀ2Þy±M}`…åK_?O‹dàÞy±¿EiÈä¢4Ò„‹Ò¸IÙžukùzêö"_W,cOŠ6è{°§ Ÿæ3+ Ûö¤E)7A-_?ïáf±åë÷Q×òõŒ¾Gò㾞§±Ì1ߣëZ¿æ#õºW«Ñy^­F³8 ¹Ù‹Õ›½X} ¾ž¯b_g«ìôãp•¥|ºÊ^÷R•7´z=]HذRU¬Üfwôõ€‡Û ÄÇ‚~jõzÐQ¯§ ëæV¾G°†šêV4O«×Q7¨×ÿóª×ÿóQ¯yÌTº–T¯×Â##•áif5ê”áB¢u,¼!¤<ÀXb‰áºñï,[ëR«Q/mP`,üžòkAë”ØïA Êì{Pƒr[ £ÿK ÿK­kôoðS£-`»ÿ¥n5K]Ú ÆþÅRCÿR·ùc!5ò/-ÚÑ×—&mõzL¿¡µ[½ÞRTykðﻨ”T¡wôõ” Eù@•Õ(°¥¨†–XkX.àö.ãÊYî£yåˆéèëýdþ`b#fÛÈFˆµ™ mØÐFznSËl'¿ÕÐ܆RnpCó6¹Q £Ë-v«×S æZjõzL¡”›ÞrMo(ʦ7b›M/?¹ÕëCTMMo¤Ú>è…Ïìèëy`d?7½Q ÓËýd«×—†jõz,•]ÑË#›Ž¾~ ½©×;ÈS½~,u?üÝ l) ZÖXÈR!°Ô¢+_"Z©8‹U~ˆI%•§œÓE)J1J}öð¯)^/O°ˆÏˆÿž!‹Î7ñz°@›uúðw`:}øÅ"2ù;h§_œñ=öªÔ¢åT©ùË¥²Ä%{@\òqIƒ¸dŸ™KJä3®˜¡P‹ÌС…&7£Ÿ…æ[üõ{Ï|±¥J+8iœøÎN>}I‰TlRUšTµEæ‹x=/a½ì4Y1ûL–˜¼Å%5jaÉÇT‰ú˜éS¼ž~a‹ ÌHø.2߯Ÿ§‘™¿~Í<|Êp¿!6£b3,bóM¼ž÷ðKå6¹®êìáÓÕ\uüõ˜"Qµ}gtÐÐ.M…WÏî!”{v%÷˜ÝÁv‹×ëó¨†ßg÷¯÷“ù@;ÑÐëíE#)¶ MÖÄÆÒ^›r¥ÞâõÔ0n ÷Ú4¢Ñ½6 ìÇÚðã¯ç]QùcmÊRǶŠmè?4tOùoâõ~2Øñ×ë¨@TÇ_/ØpU½d)Óqʽ| é íòX›Rx5½q|ì¬( ßwVßL/ÿ†ëìáÛ/âõšXÃ^ʵ½/âõ›Ž¿ÞwQ6½<Ìíøë)Å)¼³‡ßØ8èå»zÙ¦—ûç¾{ßÅO>Žˆèq.€R-^_Øñ×ÛPx`Ç_/ó| éåÁ{‹×SŠ“}ö˜B`5½¿ñ]¦— Õñ×[CªÆÇ*"ëA/5[ÓËß¿Z¼Þï¨ìøëÇÄSîÖ® §¨Ž¾~,¡( ݈o¹¦è.pãšmqKý³•ë§QFÔò,£•ë)Ã6ðB–?:Ùxšˆ UÀr låzj@Ö+YôjÇ^OZ¼Íü­\?eBgª¡·‹ÔH´-Pé/;qø¼íÖ‰Ãßû§‡… ¹ å’­•ëK1 ½Åh´wZÔ§½ÕbÝÄhR‹QþiÖyÃg”P!£oFY71JºC¯Ÿ÷0in‡^ÏØ†_ê´ác¡4ë“jb”+±Ÿf$vèõ´uÑ+£­\UhƒV® £Ù;møcùð¦\Oó ~ Rþ ÐÊõ¼ˆe޳¶Ï¡ Ð$L¹òé¼áïCµ#¯/Íà“*6·0%Œ-]ϱnÂ4b¥½ïb+xßE‹0¥ÒÔw_?5`„^ç Ÿá ;oøcáaaß}=`a¨¶t=ï>¿„);òzÚšO¦t~y=e(w S:ÙŽ¼ž2ŽåJ9Õµtý}K×c¡À*Jߤë Ô§½V¥ÈÒÒõSèCôƒ×ªÑ@”ëӆO%ØÜ^©ÆÜÇ¡*?W ¾¥ Ÿ7-ûS6Äq®J“—©\éµpýþM6|€¤$iTC × ËU|Q ×SÕþ«Qe¡Ê%c‡]OŸSžª_­[OWºõßýQÝúïÝš>£Út,LQm:–ˆŽqn¹má&èZ¦Út߃ª6ÝZÓ?˹dáž¿uŸ†ö®á?þ÷PÃ[øÔµ,'kø_j]£,¬u þ}êVc[5¨±¿”©±é¹úca"„ù—ºÕµßƒ/­‘¿ »ùû48¦øc‰”Ì5ð/ŸÚºõåy­[‰;¥ŽºÞRà§£®o¦ýûU¨{G]¯‰B¸YåŸBËL)"Ù_okÀÕtÖð5¡{[·ÞRœ6°¡@›XÎŒ5|[]üÑÌFòrCʺ© ™ÙØr§ÑQ× «apãBo“Ës㎺Þ6dC™]nÊ[·žRümz Û'ÓËOî¨ëí/ Œ¦—g·n½°QH5½”:êz»’¥L/Ùødz£½TgM/S­µnýTƒ ‰º~,Ô [¶žª³æB£î“À¥<,lYgAËwY>JÀ¾¨ÖO}Y+ÁJmZ¨ÒpøXèòæ”e„)¿ÄB~¢T3 è‹j=½E™UxrÐ!×S†Oœ£+6Céša™sl0ù¥Ç"c§ ßÓ·^—/ªõcaãܸìk¯Ÿ|”¸¤ÎmW >L–‘# uZh¾éÖOÍBœQFp¾Å\5ŸM'š uë×ñôÅxBk•÷¤)8)N‹MêÉB­ÜW^¯óÆÛí4YÆ>“™Ô &[Å\âõÂ’Ÿâ‰žÒø1ϧjýÞ_rýLŽÌ¾òzXâ÷‹ÌØSˆÌà–׌„æ&“ï™Q7¹ÍxȤ¥Uëa€UhÕzLüy¼³†ï|Ýw^)â•)º¯C®§ÿ<ìë5ñ]Æ4„_sºú±2_­ZÏ»x(Òw^¯‰2¸½hD™XÉ}5±¼Hæ«W¦ëì•ihø‡;åO^™r9Ó!×Û¼/ªõš0t;køÍä ?rÃ{Æôê^™†Én5’a›Þ™•)÷ëÇÊvÖð¥—:­é€fÓ‘ć¥Ôizù³Ã7Ó÷P›^žw´j=•“éåL×!×ëv‡\éåýã(€¥zÙ¼½l Óû–5|ª©ÁMohÝÞWEjpÓ‘›^þdتõ6/¥éãP€­az¹šlÕúÒò­Zï»0*[µ^…ßc_ÅR½,uì«h:N¨Èš^n[[µÞADÉÝôR$ë¬á[ŠÚë±€e E/]o‹ÖÏó"%¶Ø aXè2ÙZÇ[?O \àrÓßñÖO™¦…í[¸õS†wvÂðyüY‹Ö…ÿØõm×cá&–-*`#%¶x 9[¸F ¶h ‰U°†,+Vßn»ž6 8.R©žu¸õ¥Œ8Z Ó·„áó4Н‚4ds1²¹têf½ýCŒF°Œ¥ÅŒ‚ƒf”¿ȳFÿ˜Q–£ô¸}ÙõŒ,¶¨û¶)£6ZµžaOíË®çEÔ™)n[µžî¦ˆéíhùSvP«Ö3¸ù4AÊ#»V­Ç-RNêxëÇڴϨ¨.ˆÒǯž´Ã­§ <îË®SÄN Ó°ø<€ý`Lc§ Ÿ÷Pš¦¼Þï§0ëȽí"#v¥üÂÛ.Ö@˜¾‰ÖÓßxZ‹Ö…ÿáµhýÎH‹ÖÃ"ÅdXQ2¥ñSÊ2¦­Ó—]OÝh±+po=µ¦"+Hy¸Ý¢õŒTL[¿iÄ3RæÈÿåµjÄG{­ú–0|¨ç’ù—תLMвõSŠ®¤ó…ÏGQ1öJõ-ÞzG?»I¨2ÛB§ Ÿ7aõe×û8öà±N¥4|?#hÝz>— °i¥:mŸ V:àzøâÓL+>©uëý¤¿=øétáS7+Åi¯NÑ:-[óYP­ÿüGUë?jÍ3…ç‹¶ðìOT-:O£¥ZtßÃõ¤,1¿» '0Y¸Æ©6÷p+[m:jÆ5þÇÂHðÿ—v«ñ?ž¿Õðß§¸ý[ßSsÔå=5ö/–úû8èú—>­¡¿m€25G]Z§þ> äþX¸‡®¿½€Ñ]ã~,¡1Ö¸_ mÕzLô>­Zo)*É5ò×¶[µÞ ò]&5"…kðßX£ÿòÅ­Z)TPÓ¾q¥(Óªõ<ç«m½]ÂO6±!Ù¸IÚÌ2­Sç ŸwñǨ¦ö«alCë6·ælp‡ûè»®— v¥Ñåj­£­·+1ZµÞþâ»zñ]­Zï|«Ök¢ôxÐ gѪõ–B5ú®ë5±”éåOím½ˆ²ò½œL/):ÚúÒ†­Z?¦ð /f•V­çqè‘N¾¤e°õcá‰[D-U̲„ˆ¥:-^Ùf¦•¯7«´U>M¤²ˆ8¥ž)JQâóÁ(ä\!²±ÜÚ4‚mÅgˆ£Â3Â}Eç[®ðé~êÆb3Du;V6ŽÐ¤Ún2©h_Éì ¯_Éláú1° ìOÑ&“E„f„Ž‹Í· ¯Ÿ÷‡Epòpû³àŒ°jÁùváõ¥oìE)6 Otg ×ÏÃ(‹NŒÁŽ·~JðQb“±]'£}Ï™Êõx&x¾ñz< ŠˆLªÍö™(!.ùâ’cÉ<¦ú®çSØÆ“”µpýÞÇ-\_,"3B´å6ß„ëwf¿ˆÌ¨›ÈŒ@l¹Í¨Èäš«…ë§\€¶n=íÆÃÁÖ­Çw{vçip§ ŸRÔ„Z·OË[·^ú¯S…o5¨@{vèÝcv§¾kÊuUëÖKås{Ñ·hë-…áÚºõšXy¯MCí¶/`v¯MCû÷Ú44r¯Mãží#÷¸§ûˆŽ÷|&Oø\õÚ4BûïkÓŽ¶^à:ÚzLlÃŽ¶^¢(Çš^vªð} \â7Ó2óA/…pÓz¼éå:ãÛqÀjü.ÓûvÛõe|µn}°*|L< üfzÃt°†¦—»¸Ž¶Þjð“MoˆÓ½,uÐËN1½Q ÓKÍõ›éæ=Öð­[ÏwÅ˦7L¦7²m›^.B;Úz饤}ÐKÁø +šN¾CßezC6½Ì¾ÙºõEµ[ôÒ+w°õS(nŒ»‘[èÒMv¬õ<_+p)J~·qÁ¸°;«E-'»Žµ~jâÅ, kÙú)?Fx¥€™³³„?e/ñb®p¥>Ó±Öó4ÊÉÞca…ß±Öï5è{®§ …-R#ç¸@ 1Wœ†E˜†¤î•,k HCœ£üáà‡Œßb42‹‹Q®”Z¶žv£ÌkFáïúžë§ þ~ˆÑèm11m Fã—ï³X71™ÅÅ(—Ÿk=㔚±åtЪõS&[1Ês V­Ÿ2\ÿt¬õX¨oŠÑPKÅ(ÿ{ëXë©p«Öë1€Zµ¾4‚ $ê>Ø%üòA^ÄÍØö¤”ÇEé›j=,‚„Ÿ¢”ĵj}é;QJ_Þªõ|ñi-ö¤ì{Rö·=)õlQ¡É¢”ã¾Uëñ}ÔE)ÌéPëñT†Ei\ÕlJYÆž”ê¸=)ëfOŠ>mÕzz›Ê½ åoe­ZØ/ªõcù"î)«}ÈV,å•*õ±_ÇJ•5÷J5n¥6¨@«Uëwû’ë›/¨!ìgªüOà8Te7 U.£~ U:ºµÄÓ†Ö¬×7¡£þ*X¹Rî`먴hýXø}[O´P‹ÖS Ý^ž²nÇêz¶§´s•nýûÕ­¿F[…xU£Ž…KÚjÔ±0Wn5êåiÕ¨[&uë±ð'÷jÔ±pÉTºïáø³…­êïÄåöi¨[MS[ æòÛ¢ ¤À–IÝúÒ:5ü÷iøžýcùK þ±ð­ÿå=5ø/–ü—/­Á¿eð=5öׂɨ†þX8QÖÐ_ žÖYÂÇÄÍÖ­ÇÄ‹;Z·^%Rs™  *å½Î¾5ÄWu´õšWßq½&Òºõ­òåö“á7:ÚúÒì­[ßL6”ZË 2m}û®š³ÖD}÷€– %jC©µÜ·t¬õó¦Èèmj¹TkÑzªAîæöågƒËýN‹ÖóÀx—Ñåa]‹ÖÛÅ’.÷¾àz{ŸÂ£Ñåþ¡Eëíê¥F÷M´¾•:Ðe5ŒnèÏF7RŸ ]®D;Ôú©Eä¸ý…-ÅlA˲üI@ÀR™®|”i…^.X©e›UvÎáañ0‘Êz‰SD) b”:® …(*>YBtr5ÿYpF­Ø }ShÆ­×rª<¢û,0#¥¸¸dn›N>„¡g>Û¡‚‹Nþ”¡áågA Z[­ža†f”lf{ÑT«×§À"*ßÔêùz¾F\¾©ÕO™7µz,üLƒÉ&3™à¿Ã¬ç{àe:Ìú±P~µï¤’l×ɇÙsÒ"8ù¦Ý&UÞcÂOÁz¾æE°~¥é‹=&‹MZ<ճޥ)ªæ‰ží):¹büâižjº&k ¯°eƒÊoF´8l9N·h=À/5 ümá èJT€rBkÑzj‰ª(w/l½ð Z´ÞR÷5¦qç´9å1`‹Öó@žwŠð5ñ‹Íj(ÿ·h½ýÁ÷Õ¸R+êû­§TÄ|ÛFÎñƒXVÞ.5úËÛ©ø]Àû©¨†7T‘=ü˜ïÙ•žðCÏ>ÀŨúêµil®½6 áÿØVaÔ¢õö2œu‹Ö—–oÑú‚M[_°iÑzà»îÛª¾ßz«AYÝôòO‚¶ÞjPÜ=Ö¦\mßez#†Øôr|µh}k^Ów¦™^®z:Eøz¶¡é¥âÑ¢õVƒŸlz鈾ÝÏú~ëÛw™Þø“à8€ûjÑz¿ Îá›éeÀz‹ÖS*²l›^þ7ÙÁÖ[Šjñá{©ûÞwV"ü2Rú~ëm(>ð8ÀB§t°õ–œÿÝô†ZjzÁÔ÷[?ä@iÑú±ð™Žµž2 …nÄM‹ÜH.p#Úû+þ léXûjë§n!t ÚˆE7³ð-Z?Oã4ݱօۜ­§ Ÿ&^C.®ü³EëyÚº¯¶~,t-Z·h})#R¹iê«­§ üJÇZOÝ(— Ó·XëéŸÑzžÆZ‹ÑǽÓÂdÞ Âç= Å( iÑzjÀ/5£¬› A݇üÝÀ«YŒüNþÎ[_m=ßÃ_Äh$I£”r;Aøó4þáÖ¢õcá±S‡Z?žé´hýX¨õÕÖc¡T)F#u¸§‰ÑÍÅ(×`-ZO ¨%Û•þö"ZOóP-•'åïz ü)ó'î­ZOø8¯"ÜÛçTø |Pàã„i41åÓ®˜v‚ðK‡ SºßŸÂ”áï¶~žF÷óêJ;Aø”!>”K¤Žµ~oV­gpQa¦Î(L#=¯0Ø>³Bÿt‚ð©õlaJ§Ô § (ÖjÂ2¦”ïñtO‹×ªQmJC€öZ•‹©N>"✽V ÉßkÕšEjèê"•ÿÆ´lý>ô~]Iý%R)xt¨õó´¨HHu‘JM£Eë©xlÍzšŽç­YkÂÜÑšõ€ÂÇyÖ§ÅëS¸…Ö¬§ T¦…*…ROú©XOÍ`§®×ßèÕúí·?¦Ww¿ü¯ÿúËäO¶ðˆSº’/²„¯²ð˜ã›Ë ­¿û=\]\ŸöSê—¿laŸÚ‚iíÛÇô÷×üÃÕò®_ú¶ ­ÿÉOÃàþgYøÛæ¿ÈÂ)å_ý4¼çÿÚ7÷ÿ\7¬Yÿʹοۂ±ð×÷ü§-Ô??^_ôÑ”Fîgw5äƒS|íGƒÊ ÙǃT–2ª¡Ãþpåù]†5„bÓQçõwQ‡?xå'ØÔ«ý@ôãÇY¾ËÌrmùñ€–Ÿlj)O}¶ü»ñ£°Æ5¶ÜÁ·¡r‹ÛHÿ-n#fÛÜRPýhpùß'ƒ¹µ .Ϙ?\bñÉàÒ½}2¸$æÓ.:ø“Áå™Å'ƒ54¸!IܸW[àFærqKã“°…Ïþ$7jõÒLÁXÀ² „k¨Õû(*ÌB•2¶H¥Á ²Zö¯|½8åÏv¯Ð·E)_"F©"ŠPÄ'ÕEÑš¨àŒxh±É©ê³ÐÌèêmüT«eÁg~—¡c Kî=>‹ÊPßíMAÌgQÉ ˆJ–#¥ATÂa•ü³\hHòÂ2S\FÌÌ ®f&3Sd†Ä-4C·ÿÄ—~œ!WkÆ¢ô,:©F NÄ&¾ò‹½&zù‹œ&wp_ä3C÷=¦ ¯ö¡É:‹LÖY`Fͼ,_„fjÕª…|»L¶édÝD'¹ýb:©Ê‹Î °ÞºEH´éd³‰Î¨§w~éDݾŠNº»¯žÛ9Ÿ}õÜŠ©çö¸oùØ=᛾Þ¥_E)µÏcQJñûX”RZ>¥ª_½( áÖn4ò]»(ÐòÕ¼Fܰ¥~,JùÉ^”FÞu/JCö^*¤eo¦¸ÍúzÌölCO÷ñ—€÷S<:û꟎õ«ÑeÐÉW³Ë¿[*ª˜¦7BoMoDQ›ÞHÖmz#›´é %ØôFè­éÍk¹,®Ó¿+S*÷¦7²d›Þx é¥FøÍôÒ=};è¥pkzã»Loä'7½ŒÊývœð]½pyßL/9üfzCM?è%Q½üàØWÁ|;Ön}å^Ó›ÖbƒêßM/Hßß‹±üý møÝô2Ð÷ƒ^Š´ö½\Y}7½ÌõûÝôÆÕÙ¢—Nô»à¥ý.vydû]èrô¹ü•æ»À¥üó]ÜF.qaKñ]Ô†"íu,‰³Ü°|²œÁ¿{Ë>÷‹ñA¿Â5²e‹Ö°ÈÕ²n?¼Í⩨Q¥‚+RiðR–¦.JCÀ¤!‹Ñ(#D#Z[ˆæ]ÖÚãSâ¢-D#ºôãB4,B4öëVë‡(w!Êéç‡ýÿ”Ûr(¹Ž\©Õ3öœŽpL„¶´µ%µïwûCüý&¢€LöJò¡Ÿd±ÀEÉ,¾…høZˆò«ÿ)DSªÖVžó%Dã:d!Êß¿¼ØÂgçË«-DÌ/!JàKŒ†‚,Fv¾IyÔã— ånâ— å^ò— eÂÔ×6 à»n“¾¬0ýƒ…Œ)-Â4þ&p$åsI©å SÆØ/aÝ*L#mÞ˜R`ß¾ý]Ý~yG€È Ó”ªS†‘oGRРޤ”ƒ…)CÏ·7¬àÑoaʉݷ0¥ß¾)¾ßÂ4ÞôJ¿M)¦Eߦ”­¾SúmJ_Ðßžª†²ìm+òL5®ÀöL• ðoúÿð–*-5Òž*#Æ·@eºä·@¤lÊÈôímUJ¾Þ@«ÿ¨ÜÁÿÓ««¸HÚ•Ú¥H%AŠTÎâÿôG<þé¹)ŸsÝ¿úÓ[«TĽáoR¡V¿ü]µúåQ«#Kî÷ßÚÙÕ²ð㺜Úe¸TXN½X–SÇÂE‰,1Y%~2’…KíåÔ~ÿ2]N Ò­áß½†ÿxeÖèŸ2ˆŽkðO 0ÄרŸ2©Vü¬¡?­FlZ#ÿÒ‚5òÇ‚V¯‘?µaà­‘?eR­¾ømüK ÖÈ¿´`üñèA­žQ3]cÿâ…×5øÛé°æ4L5nÀ6©¤áuÿéZ¸ïu€K¯¿®péÜWÓÊ€ûj\CmÝx-¯6ŽþÞˆEô*µz:…ò·™ ×kJÍWSËÝÚR«»wBJ®ž®Äøx5¸QJäò²š×õÍzê‹>¹‘ã-rK®îÚÐ÷¥V·…ò¡¸åY¢¥U÷»F¢±± ýØØ’ÍÒªgˆ K«6)•ÛÈâ6¶œZü0¶\ãþ¶œæýب…újh)ØšYú\Èòe,õmázP«»ûÐ.£JÛ¤²]•º»0%#¢”U R6ØÑ ¢>o"”? ¿‰P qS´øÌäê-ddÑ·àä×ÿMl†Eh†&*2) •\ýôrÈï“’½À¤Æ,.é5aɪ„%•oay«»Á”‘Åe(üâ2/±ž×![`†Ed†›…f”›ÑÑÛ—r­è¤Zzƒó]pR“›Q9©|oíš Ñ%Wϧe5©½o3Ó”«ŸÚrõcàk:bÒeÛWOš!q‹Í²3ù‹¾ð! ‹Î˜M'kSÔŒ¤kÓÉ~3”ž=/EH}wädïˆÎPžE'ß§äê™ÊP­ôç=N÷ç=N¥Þf¥TaMi¨•þ¼‡Ôº}ÞÐÏ T>ˤ†ÔêYid';ŒF©û2ªäê™¶PP÷¬4åYiœ›íYiÜ÷ìYižîÍfø[ïåYi$µ{=ÅyóOð)à”\ÝÞˆ]î[—\=>‡%W¢T7z)ënk*`ó±MN­>Lo¤ oô²…¦7”ì-ÊR5½”$K®žWf)Ó*¬éålãÃôrêPru?‹'8•\=|6Ãô2˜^óÓ"·'ª‘umz©§–\Ý-<ÉÕÓxö²éå駦7ºÒôò‡¤’«§T ïôþ2½‘u½-­0–K®¾ ‡’«Ç„W.¹z¼q«Ç„ATrõTÈ/ÓË­ã’«‡(zCôr©öKðÆñâb7´b¡ËíÔR«Ÿ&äqàc‰ÃÅÅm܉-lã pQG{ Úè[1ËiÇ/Ü(cbÙ{žÆÔêÇ‘Û-\C\­‘s-XCB«! Õ6M*ù¨Ô<=“¥Ž-J¹•û)HÙ=Ÿb46l…(3ø¢™X=PEr¹ çѨM±5ÒÁ½Ð¢b/DÃÕWD?…hhÒB4¼ã¹,B©ÕnÑïT±³R©á–ZýÔÇ] ÑH^öR‹B¤Sº…hœ .Dãîd#Š!Wju‡ôÏ—ÄÅhÈÁb4| F£mb4n…QžZøå0Š‘õå ³\¿¼€Æ— tgA‡² Ò(cH© ÒèTA¿Rî/ø©£ Rþ—õ%H9„¿)ÛVZuGeЧÞ<ß‚4¤Œ×¥U?ωœaAÊ/miÕç/FiÕ%´*AÊ5BiÕ=„©H Ò¸yÛF¥{¶y*ýcL9Ÿû¦¡- SþóíYjøÎ³ÔHû¨üMä[ îoo¨ò÷].P9Ž¿j¤¿ TæÃýéhŠx^ZuD¡X 2ÿ)PËþ4¨¬Í3Sø ¤ê§ü–TÝ bvü§@大¤ê®ª¼·Uͤêßÿ®Tý{KÕÜuÿý·¶0.§Ž…[h²ÄªY–ø1Xún9µŸ‡çÈÂ_<—S§mø‚/§¶%þh°=¾FÿÔ†_£ÿâ·5ø§ j[cÿâÑ5ô§6´z ý±¤T=´müK ÖÀŸ2Ckà­^¿-üýh ü± kà·…¬ñÁøc¡¾¹Fþ¥ë*±úÒ%UO…@ûu þ‹W+±zJQ1_ÚÁÕ8|€)Eݰò_¬’ª/=URõ˜Ë«ys¬7`ÙxÉéF–„W3w[oÐÒóëƒ5§{7l©³oÜR17¸Û*µºŸ~ ÝHÕº¡| ].+K«~ÄÙoiÕÓ*§&72M.Q™Õ]!w¬*³ºM‘ílr¹z)µzxgÂñF.¿ &—Ç¢”ZÝr ¬ÔêÇtR« ½$l©Ê Z ¼F– ¯ˆåCÌëA¬~Ú…Ý V¨Âb•O©|ˆ8¥†.JYÂffõÓ^JûB”J©¥è*>Ru÷"ÅUÁ9Êb3Rq…fh¨"“ó‚’ªŸDq™ç€›ó¿ú¬¤ên~S8=(ÕO¦I‹ÊCbu; O”|† d«BãvpAo/(C'•q¸±$â2¸füà?õu¡IqUhR]š”"8©7n|è´Žš|Êö¹O¥º‰a‘ɉ±À¤a›–¦N=qyª/EfˆÎŠ—§¼êf–²&ûì ç»à$‚•WÝÙýi8éhÃI‹áÄÀyœì±w]‹Í“NÝ®¦Ô+:C‹öw=®w6 ‘ÛkBã”g#ë-×O2u7=žµÍHÑ? *ç?•UÝF =#Ó«=#ò`é§g¤!oK)ŠÛž‘rŠV2õt òjŠrOeUw)î•L=¢+K¦žþ¢íY)·?Lï)«z*¤úºÑ o|lôÂó½,åY)½ñ±ÑË ïô~˜^î~lë)P2ǫ̃ٚÞSVõD vŠé UÙôƹá¦7oz)è|˜ÞÄM/§j•Uý4žÛ††7²Ï /' ¼t†á^ÃKBK¥ïRÞ–Tø`”J=MŠÊ†—=Y*õô?eoò©á#Ê /W«¥R÷³˜«TIÕ)ü$vC=6ºqh¸ÐÍ[«çAQÀ=ÉÔÝ8„´Jª~,q‡øušPIÕ]†=èiÿ%Øî_çP•Tݵ7] ØH¯¡ W®‰>=‹¥Ö(XCíô ¨~ UD¾R©Ÿ¥RÿéºçS˜FDiXi(õb4rÄÅh¸MŒ†Pî%ݦ©AHÛB4, ­ñ>F”ò¾¥ß„hˆøB4$t!-0¢ìS¯ÿ±Îÿ¢‘¦îM*øíKˆFê´ev×—WZ–…hd' ѨMŒ†Ú*F#'MŒòsYIÕñ H•SÝú@ŒrêX9ÕýÕ£z,FygÉÔý*´ÛîâNÉÔO!þÉP2õcáÌûK†E†³)3*¥º[À¼Ü¢)Õ¿’©/µ]×[%SwTÆÐ*™º¿%ÔuG2uû ¾.™º-¬M†î* _)Õç7-™úÒAiØ‚4lCŠ)G¥T7¤|ì_èÏS#oÚ˜ò¬–’©ûQ¬O˜rS½dê§Ì WØ•Q}*ßâ”ëTê.Þ§\ˆVFõ¥Ç½-@ñßß{zUœ2Ì–JÝî¡vë U<§2ªŸ2œ#”JÝoÊÚ<5å!ì•QÝÕQrÞ–U•LݽZ2uá_2u[ð}úS nîLýOW¦þ§kFu[í—WÛÂlÏåÕKmË«má}9u,œ0ʳ ?‡_Éës–S§Õô÷õ}ÖèŸ2èñ5úçMQÛü—÷Ycÿâ5ôÇ„×Ð Z°†þå}ÖÈŸ2àgü)¿­‘?½!¹Fþ¥¶5ò/>X#ÿbY#¿-\µ®‘ß^™ðº†~›¨Í•L=O¢fkL#;Öœr9V2õt%V“®ñ?Že3V˜ ÁweTßoZ9 +™zJ!v•L}3Xnh½šX®u+£z*dã7fÙ Cj¹© Û8 }ã–»Áå~%SwãOG€Ï{±—ÍîI¨¾yÃôÆU̽‚7ziÚ‚,%Ç^J¡¦—sÐJ¬žÆ³BÓ7½qª¸éý/zã&nÁËmšÊ«~Ú–-ÖB•¹T‘Å-$jÙd1Kƒˆ¥.^ù ÑJ?›U¼‡Hå{(IJU¢”­R€ÅJã‡EU•TÝŽ‡‚*:©`‹ÍHÜšÜ]x™!m ÌÈ—!G ˨MTò×¶7A™Óލø–—Pýø†N“”ê…$ÕX!I=Ú¼Ôàç§oß~ô™ Ì«§²Ð£…et§¸<åT?M‹ÚDf 4CE›‘¡ìàyЪŸP)T#·¸™Zõ|¾aœÑ2ÁGS;fRÞœ”Ñ·Ï}ŠÕÝ4ª®b“•mŸzTæ/=}ã=ý,<ãºhá™Øâ3|#>ã0&E͸|Ú|òMÍ'£Àʳø YÞ|R.ß¾îõhÞ݃QYÕ%äûÄô§sž·‰)¦˜uø4‚­ð§=*4¦qÞø61¥Òº-£ø,‡Ñ‰=1åŸ|?Mkh÷Æ5Ò£7^© ;žž’ª/¸R«Ç„PjõÍ´ML©qo+**þž˜†hî5·+©z‚ðª*d}£Ëe|©Õ]!ûëÃÓX®›Þ“Z=ŽÂ§¬’ª§ñ”$·‰)M¦—™%¦—šQ©ÕÓ ZIÕm Þô2/¨Ôê.‚¯éå‘•T=¥¨Ý›ÞHà6½‘}¾-«X¡éå ¾ÎŸµ{ÓË/r%Uw)®ÆK­›az\+©zTÅÍ)ˈSN®J¬î7¥ôímUx§ÄêöÙ†XýÏW¬þçG¬uã÷ßÆÂ YY¸N\Ní2q´™,±ósøK«kã$Ƶ¡mË©Ójr*KÜn ü½ÿÔ†~]c,(³†þŲFþx­^#ÿòœ5òÇ‚¸FþÅ×kàOxt ü± 6®?µá9kà·…Ó5ð/­^¿-Öê±pÖ±Æýcˆ£µ×¸,¤­”ê.C%uû~ µH!ÊW2u?½S·T÷ëðxŠ:÷»„nû}iœüë5ð» :®êÇò°.ºÇS:êÈï1Ò¨ÛÄÝܨÛÄ5§‘‹¼Š¡RG~w…üÓ©Žü¾™6VÙ‡¬|/Ó™Þ®ô¡y úì 7û*•zEÉP̾pþCоðG‰:ù{*¤jéÈÊS¹Ô]Š?Ÿ•@Ý&Î;+—zJµº¥zLW?îáµr©{$°Øå§¶ê§ !¬KªÝ¨/ ^~[v“ ¥ÁÈRp±|ˆxåë‹VÄ*;@¤$êç݉‡)Å,°4ê§•P#J‹ ¥®*@C=Ÿü¥Tê§QFtrŒ¼ ΰˆÍV…æé¢ê¦ =PéÔ~ úŠL õ“º¶"* 7,ß„%•pÇRv¹¤..#kZ`rþMdžò©Ûe|ŽØŒîTçˆÎ¸ÂÚ!”º®ð¤m:áœ:úûi4üùîàɧNæÌÖUÕgÔUÕ¡ ÎPH7©û“Ÿ*u?æ R·aë]pR‹öçž¡Æ Ïðø -Z|†ÄghÄœlµù$ L^yŸqƸøŒ7uôäsÄ'ÕœR©»ÐêR©;àÑ"@ã¸h×&‰ÐмEh”"4.s¡‘á,Bãllú®«dê!‘ ¯§¥Ñ<Ûãbksz’§ûYÜ£ù¹MK)ã:”Fó}Uòô qö¡§¥!»{ZBó6-¥¶îiixÞÓÒx–‘“ÂSùaÉÓ-ú«äéùR2ö´ô$OO…Ô…=-场’© —®§+ª§…b%O·)Ž—6½qz·éS®M/?§•LÝÏŠ‹­Moä>ok*¼¦7Tò;½uæ÷xƒ>4½‘1mzã•Mo4ÞôÆùâ¦7d÷mQæ+›zOolôR26½q¹°éå6hÉÓÃ…fÏ ø|ÉÓÓËø&T6u›ø!)yzLs½¨úê§é{¨=;`Ûo\C-v¹\òôÓ¼È ¹q°·g¯l¶§¯ô°›¿E-ã/A{:òûiuˆÃžpçÐK+BäµÕAžîç°ŒpyÑé4‚5Îm«¬íÓË+ÐSTwÛÐê’§ g\%O_ÊÓhµ—W|Ž ÷£‘-F#ÍZŒž’©çÛ¹Ý ,ôö§e–çÔl‡V¾©åÞeÉÓíkîG{Ëžóꟲ±åLµäé~Ëx{§Ï£¤ÎüîQOQŒò«Y7T?eB„ö½Pòt?‡ª¤åžkÝPÝe(i‹ÑÐ_Å(?F%Owm”š½9Åçxcõ O?µÅ ⊣q‚¸ã(}í j%Sw³±ßRÉÔ…bj%Sw±Œ #Ñièú‚4Nö¤‚7òt·šÎV e¯dês°ªdꮂŽ!…¾ )%`ïSQ’¤®Îün_³6ïS±m^hQ¸¤qß¶ åç¹äéF‘"¯÷©Ø‚ûæÝOýT÷µ?÷¬O”†4,JOG~w»é9QWC‹RnàW*õS[(碔 Þ§›+ö·BihÛøcA^Ÿ§K™5ðÇhÛøS–5ð§mèŸ5ð§ &kà·…[¯ÿXxhØ÷ëðõqz œÇVu××”6Ý•Q½¡‘†¼†ýS&n¡‘Ç»†ýS†¡¯¤é®-¡qùµ=òݵQr¡üÿ¿¤é.CïˆÐÐôEh¤‘‹PþX²ôô5•]#Ê=ƒ’¥»T¸ÎrU7QO)¾”1 ©ØœR£­«¨»ÂÈ"©/!œ‹Õ*»%K_ÆDñÝ¦Š·ˆ –,}qTñ=RuPc·ÅìKˆÙ‚ö%nv\è-°RÉ]Ÿ«§… àuÂw·ú«#+º¸dé®-U鮌‚±°¥˜+jé91ËŽ0±¬KÀ²ˆpe ÁÊ—ªUúyE:ÅN¤,aDa©Ìé³ë:êÇ‚W|ž§ÔéŽ?Ôdgh•bótÆ÷S[ùË€â&xŸ ïâ“›Û%J7íìÇNv‚¿ðl›ødè(Qú U‰Ò¼áëŸ"4R–…hüÌ+D +oºC.zî§¥ˆøÓÓQ S7Q?µÅ•ÒB4j3¢ÌüiFù«d¥LÏwî®{¨ÛÄÝ’Ÿæ”sùÒ¤»¬®¾ÛÄ%]¥LO) êž“Æ!éÛʉ÷œ”‹ýÜÖNdÂsÒèúmNÊg™Ø8ZÝ|εK“žW¦è°z:à»K…hêÈb°ç¤aòœ4§öœ”•2=]IAÝá5Zèø"÷`Ñ)•2=ƒ›»¦7ez¹¨¬{¨§ñøl}˜Þü7zù£À¶¢bWš^*1uÀ÷t%ßËôòO‘J™oÐQ¦7Žñ6½‘Ômz£”éÔbÓËÈJ™îò»Sšô˜¨ªnóÌÀJ“G!¸–&=Rx6½œÕ=ÔO©?¨. ^þç] ÓO™Ð….÷(êê.ƒ®*Eú±0VÂt[E]BýXâÚhQËÏÒ/AË8]§{_jóä€}äÉÆÍ/O06êêç9¡|_'¿Dk¼©aeÛ<9#•0Ý- ~*R#Øk+<§é®ú©ç¯T/½¶bm‚4ô`1m£‘”,F£Œäg1J± …}ÛM…VíE?è-EºÇ-b4þ p\¥º,F95©[¨ŸçÄ›zåÏxéÏþ1£JŸžÀ²m^`±Œ ‰ÒŒR:£ü;©Ž÷îÌív3ŠÑøåýTZ<…wêêŽHl›“­=emÞ—¢€ë)@$2;²Ù‚4Ê6¤/uõ|5è:aÙá”ó¤Ò¤;$ÐA”¿8VÊô9,Ößma³…ééê3ô•2}yŽ0å\¬4é§ Õ¥I7rTw)•ZcŠð[|wÛšt#|J“î`¨VÊôy8Ôßg€+eºË°þÜóM…)3Ò*eú©-.‡ö<•÷†”&ýйE)wÕëxï.D¾½…JáYR_¨Ó½ŸÚâAm¤a1¤ì:ÅRNÈ+_º;ˆÎ¤!±;–bW¾tã DJ’n åeAÊ"b”É•.}¦·éÇ­ÔR¤ÛÕT±Å(;¡é3ñu¶w?‡ »?÷P¤ÿíßU¤ÿm+ÒèÖåÓ¶p…»|Ú~î–SÇ‚h±œÚÆóåÔ±pàðSì2ünØBLea\\N7E™5ðÛB±e üi5Ú¶ÆýÔ†Þ[ãþòœ5îǀ׸¿XÖ¸Ÿ€¹5î/¾^ã~ú'é±À£kÜ_Þtû¶ð7ß5î £Èö_­Qß8­éÇr:×»-pZÝ>ýXBõ¡¡ƒŠÐ°ˆÐзװïçœJ–~,q¬ôö%tÎ5ìÛB}[„r÷ªéný&BC{¡!ŠÐP¾EhÜ¿,Bã`pÊ?Ä+MºÑáê±ôè!‘N]§A‘Rµ)|rczºoº+ägèU¤¾0p—Ý¥þAuR°¾üN¥Iϳ1Jž ):¢Æq[He…[L¥è)d_8u­4é[ í Ý[iÒM-%j¹­_iÒO~|Kî6Ц¢¬Ã* Žª”°U©®›YúTȲaÏ7®0Öƒ"ý¼= ¨l•0å+Rêžb”2¡¥+>O‚ôÓ`.b+Kº_…‚¬àŒÃŸÅf%-4C‘™a˜\&– ý´ c´ôè£ÿK~ Io¢’†••$ýTuУ}þC (O—N÷@¢ê,*CA–a—!û+†Æ‰é"3NYšñ«€Ø¤x(4©:xÂk¥Gû²ôè ªPv…&P9ÒíNŒ³Ê‘>;úÝh²Œƒ&Et£I8fRE÷\”²àŒ<`ѧoσ ÝoÊV+j†„,@©BÕÅÓ=¢(‰ P"U‚t—Á *Aúb œÜ×ÅÓ]†¾Þ>ñ D€†@*BãNj!Êì—¤ŸÄÝÍb4dg1ÊùQ ÒOm¡µ:|rñ%Fã9Ÿ”·Åhäi‹Ñ¸ÁÚŒ2k±ôè§lœ?ìèîR£Ÿ2§é® »?í¼š«´èŽÑÛ’ Ô×eÓ]*“·ù(›¾­š¨{{>ú/|–?óáZçûSÏ_ K‹žÆSTÜÖ÷ˆ¶uÙô8 ïõ±­ð)–z>IµžÆõÊž†ÉóÑØ3phe§ÔñÝóÊ ­.›õa“KÏW~t— ÝÛkýxåm±DK‹¾¹×ôr‹©ò£§øÖñÝmb,--ºM Xu|÷TÈ^6½!n›ÞH$7½á(Ó·r‹ÞÐl oä@ÞP oœmxÙ]%E3@MIÑãBôd¥G·)½ÀBÞ H-t#ÑÙ!—­¸!R‹Û¶q©È‹Zö`Ýý¼j8\ÌòCQRt—¡L.bã9žÐož¤èç9‘Píy+ýæi%oÏ[Ùj¡2¬P ±U¤†åºª*)ºßoZÉÑ‹WU,ãiÞ§ÎîîÚ(­{ZÀ2¯ŸžºRŽ÷²ŠÂ©§®lµC+-ެ´ˆQ~X?Åhœî°ÊV;ªÒ;×µUÝýx4¤uO]éƒëÚª¤è®oêxʶ‰ÑPÿÌ(õG3йJIÑO "ÃÖŒR¾n¤Vrt×”}&ñKŒr{±’£» [í-)>GŒF ´ã(ˈÑ8Ù\ŒÆ©Þf”ÉZ•=ß Ä¤ÊŽ¾øÇ‘”z‡#){U”r›·”èŽË¬M”ÆO ¢4ò¦I1‚¾DéI‰îP襑M,Jã nSŠhUJt{”²©)e ¼À¢E”réUJt?‡eD)ýöí¯=ÛfJY›(s³=Kåf{)ÑOãâ^faÊ€YJôS†SïR¢ ‡P]4Ý€]Jô9ŒÔ=ÓÝ6 »JŽ~,§äèn¤¡… Rª;ß‚”gÔÉÝÝ‚ƒýX"mÚ¡C«’£Ïƒ»’£»6ŠÇž•Ò²íðÿuè§6®êšénUrAÊWRôS†Ã±Nîîç¸6HÑÿòw¥èé“»¹+ÿûocáf²-ÜDzAa9µkã4{9u,œúÉB-§NÛø!tmƲ0Cr9ujCPX#¿-ÔmÖÈŸ2)E·…Ô¯?µ¡ÌøSï³þXÐ?kà_Z½þ<ã{ ü¶pÏp üyü¶¾NcA«×À¿´m üËsÖÀoËoxŸ5ðÇ‚ç”ý˜B;]#¿- ±ÔèÇÂÌ^×È,Œ¿uv÷c‰S½ )ÿÝ®én7ãRéÑ]Þµ.˜îvSA^c¿-ô‚0å7 ôènB´Nœò_Š:»û)Äå:º»]G-Xœ†Œ.Nÿ HlN¹ó_‚ô´›â»Iå¤èÕ¨ÆáÜf5.±6¬ñKÃF+o\ã'óÊIF%H÷{ÅÙ6’±KîR”Ì+AzL)X#ÕÙІ~lhO ÒÓxD‚:·{LÚ…-7+AzÚEVØrà” Ýeøº¢–_+W@[çv?•Åcm.hY™‘ÅËXj•Á è~Õƒ Ý3S¤{,à Há®Ê~JÐ @zt?ƒED'GVéÑ]ÁìMlžôè.C¡Xá4²pf¨«âò” ý<_ŽÒ£›—¿:³ô裗K>;SPr%&©`û{УÏãèMLr·ùMP†ÇDe(ÈÂ2,æ’­V@ãO¡yУŸ=èÑíо´8r²6±y:´» «°Ò®Ø ‹ƒ&ÆÍ»ØäW»¤ûMYÆŸzÊ´¢3ŽÆžq˜µøŒG„F´ƒ&p/AºGk¡‘rnBÙ œü/A„žŽíî°6âi¡qbµ¢'ãMeH7;'Åh$ÊQþšþSŒ†ììøI¥SŒrîQÒ=°(;;~²ÕŽŸTÅhèºb4ò­Åhä[‹Qî3•ÝÁ½]ÉÑíkŒíÊî7Åø)9ºGV$ªûÓg{6§kßN•ÝÏŠämÏF£Ï=;¨j”òl4r\=»š·Ù(e[‡ÔÈøÝb*_·IÏ+S€õl”ë®ÏFãY^éÇyÒ¬üá¸äènF¼ò¶Ø§¢ëØJ¤KŽî ã€j‘ûrJž0ŽWrt›â†gO¸©Xrô”¢{MïIŽžÆc8”=&Vhz£¦÷7`zùI©ãºo>4½qÖ³éå…•=rçÈôrS·IO kzCÓÜ6pKî y¯W¥F?¦¸ãYðÆ‰€b—[£¿„î)5ºãâw¥F·…Š«'­´\×ÿ¥G?µ1BVjôc ý_ÌF× ÙÓ]ÒOm‘ïY;ϳ@^wIwmÄÄóV*Õ‚5Ú&V©¢WjôóÎ ê.énžS‡u·½Pzt׆1VzôÙ×uX÷¥Œ åû”Ý- ¶ìM*ä%oá!ÊIõ§ƒëAŽîFÓ9Þ¢¢ î‰+k»N JŽ>Cõé°z£Ÿ2<ê¥2£»Õt› 8¤R@öÄ•o*D#ŸÛñ”€Q†±/!ÊÁXgu÷û %G7n.…(·+3ú bÉÑ%.³öâŠ-¢ü‘ äèKÛÄhÈ b”×—ÓÂ=q…¯ë*é§œÕT^ôc ÙÛ~?Kn÷ T^t[(y8ŽR“¤‘R.HyU× ÓÂi$Ü Rn»–}iµã(EHAÊý¤oA:µ å›–ý´ ®k¤<£ò¢» Ub¯®(· ÒxŽ åÿ¥F7"ô7ûi¤Üi¯›¤;XñǸR£§ß^^Q/¥<)ªÔè® q¬ÔèË RNÖK>#Rjtw5gAÙÜ‚”ËßÊ‹¾tª!E„+5ºß”ê­ e¢nåE?e¸ Qjt[áJnËAîN=¨Ñ%n²¤añ6[`H©» RrPjt÷œ‡ Ôèü]5ú­FS{øý·¶P`XN2ÜÀ±…Û²ÄÒÑN m˩ӔYNVƒŸåÔ¶„úo ýù]†SÏ5òÇ‚Þ[Z€ÚÖÀ Þg üiʬ?øz üKÿ¬iÁø—¬?­?-€e ü)vÖÀ¿xg ü¶p¡±~[¸ì,5ºM”°ë¸îDz(c§×пø´ôèi8äõ…߬¤Û‚«I }Ô¨Fr°Y“ËW²…¦5r»+-Uº=ˆN,UzÜN­ßÀò·†WË®“»ûQT}lÜÔmf¹±Pºô C_˜Z~êàî.¿#˜Û8¯ÝàFÒ¸É )Öär3­¥‡'Jž°Ü….]zÏRf—ýºOzJQ5»ü¬V¢ô­”Ùå"•(ý”"¥Kº©KÏ‚EàâëùCØÍ¢–ºPÉÒÏSÂbfé!KeXÄÒ`^3Oº_2ó¤Ï‘z¥ŸÔäE)?æb”Ú«¥ú,>©¤ŠÎ8èYp²ëK–~©ÕBótnw—a›f”—qpµ° YÔXRfW@¥..*éQI½VT²*AɪÄ$ß^H†Àn&)þ ʘC㷅и˜[\  ñ[€ã'ev¡‰!^ÇvOxGâªc'Ël¡e9©ˆne7Yfû䣌à¤sÞgXü½§¾*8©ÙûcO‹à IVtždé|QM ã”cú]„ÆQÛ&”‚µ ¥E„r{¤ò¤;B°mŽœ\¡ˆÐÈÇ6¡ü¥ÁxJ¿B”:•,Ýðdéþ@²6#Õ™QN*Sú©Kutw[àÓ¦Ëé>é³O:‚§uôåDiä‘‹Ò¬E)WŠ%L÷û°¢”çÑ”0ÝýÀ¿R¦§‹XŸç£Ñðm Å?®=‹Â=^ò|”3ËŸžòןÛBŠÍ0®‘]ëÊÁTI·7¨¸W¢ô8 ϪDé6q«­”é)…!PI‰2­kä{>ÊáQIw…Üf/eºMq«²¿ü‘Éëðªê}éÿáµÿ ßË‹) ¥L7(›Þ¨Ðô2÷ª¥ç•ù“é#ÌMo¤½­¦€éå?;¦7’²MoÜgmzYê—é%¥LÜE2½œâ”2=ž§ÆlzãPjÓWB›Þ“2ý<‹»È¿oäC‹]nº–2ݡګÈåvl)ÓO™Ð’=m¥ó„mÜ´-jëJ™~žC‘ª2¥Kh¼Bö”)ý”áÿjuhw׆Ï[ÚÝ*í•K”:´»ËP³¬ÁX¬g¡zºFº½ÃMM×.{aEñU˜r{©”éîmò)HéƒR¦Ï=÷éK!ÕÓ¶MŒ†:ïèÊÚ¶à ¡Û“WÊ¿^ñóM¯+þ’¦{ä³¼I…8ªR1VP¡…è)QºpP¦x¾¨WWÔí…(‹8šRF5¡™KÑK˜>óQ—H·…*êHÿêЦ›PSyÒíê«^]±Õ"”Úâ— ¥D(÷¾J˜~Zçr{GŠ-¡'aú©-pO\Ù6Êä¹Ò¥ÏÑíKˆr#²Îë¾”¢\ ”.Ý>à›^£h×}y޶‰QNIê¼î®r¤¥wê馊eÄ('¸ß×(Zºt·€Â«»‹½¸b1eÄhíÖæí) Éb”'w–,ý¼J%K·ß¨À‹Ñ’Åh$V;Š""U’tSE‹ Õ^ŒFZ³? Ähü FyµR%I÷8å?Þ?¥Œ+FùÓIÉÒíQŒŸ’¥ gH%Kw´ Îëni£q³³ã([p£u^÷óœ¸[Œr}P²t·Í} Yú¿+KÿñÈÒda9µ-œñ,§NnÉÂq·œÚe¨c,§Ž…óAY˜~¿œ:e0V—S§m]¶°_¯­^žƒ™ïøcÁsÖÀo 7 ÖÀ Z°þÅkà_ž³þåM×À ¦/kàOm°¬?eãÖÀ âÈømáÚr üyS”Y¿-¼7c üi¾'%KO(?šR¦ªVšô­ÔümâZ§„é)Eõ٤ƵÐkü+Øx³zæ+Ð]!àâÁ×Óï!án¼Rø5°\í—0=§ü¼!Ë÷2³qq´¡å&Q)Óý¬­…m\ml£ŸÌ- {5¸üW¨”éédŒÄW£'­›Ý­7x)“nðÒdxù鬌é TJ /?«?¶(K%ÓðFN·á Üðò·Ê˜R¼Ü}(eº ÑFäVÆô =×àR´6·ï…-‹Z>_ÈÒ `ù ñJÕX´²wÄ*Ÿ!Rù qŠqùÔAJùUˆR3 izÂ2‰Egœì,8Ã"6#ÇVhžNð~ZB«ÀŒS§Åå)cz`ÆûˆKúFXRf•4J WGxwDÇÃHÑ—u¥tae¢2#,£Äe¸Ì`R™‘€-4£¶+›ob“"«Ã'åÊíÓeØÁ‘©ñ>Ç’w‡N>g› â9¢“VØŒäcÁ—0Nª¢þà³i‚34VÑÏ1ž¬M|FšµeÊI@iÓçZ)Óm¡oB©Ž‹Pn‚—6ýÔÆeJ]*Ý.SD(7ÛßEhœå¾}âÿŠA]*Ýc=WÚô9LÖÞçVÿÜ¥ÞhF9á.mºŸYÆþ¼söTêôSŠÇ¿ÕÅÒ…¥N÷“âúhÝy1_Ý,=¥0&ë$ï“Ôéýg0+‰zJ±Âm5Å_P#Ú3Óʽ Š¤xOM£Ô}IUéÓÃÐüyŸš–HÝ¥B+w`åxÿinãÞfÇÖ¸·y ®X·©)EO³ÒöÆ.•Í]VhvO§ys=5”fÓË¡_§yw…œ!×ÍÒmâ*£Ò§Ç„®,‘z*¤i£—Þ0½q÷F/µ­«X¡é¿îôVúôÀ†yLÝ,=& ½Ó}oôb˜Wúô6Þô†*iz9+‘z*<ˆÔ—÷*‘zLè¯:Îû2ôê8ïÛ³¶ÈKÕÛ‘ð–HýÔIÒb÷$Rw¾®ÈeÞ_‰ÔO™‚Åm$< [Æ‹JŸ~j‹C»mÝ6«ð> ©œ•×qÞOÛNùÓP™å¶ùu[ÙÓí¼M‰Ôý|JªÞ`R–Qå«DêËs¼=Å÷Q=‰ÔÍ.Ö2_"”³ë©Ÿ2‘R,BCØ¡q¥³åþ]åÝýF9^„Fº³×Yôµ£(ð-"4R¤EèéRéŽ-ìSÊyX%OwDd ¼KEYÙQ”1‚³ qRŒF°2b”«ÐºTº}À¶‰Ñ8CZŒÆ9ÚþÒSŠ£ÿàs¼Q®+yúi[œ°í(iÕþÔóAþÔS»¤ñB‚ôt©ôùJžn—"øWòôc‰n¤añfBo%OŸÃK©Ô )tAJ% .•î÷AוJÝ”?H—L}vBÉÔ팓’©;&dê‹E”ræPgy÷«‚ž’©Û=l( q]”nÝðW™úå·¿)S¯ÿúïþß¿¾DòÜïc!Zo¶pGM–ØG‘…ó¤Yø#Ì/×}Ê•חŸC´®eþ¼>çß_Ëü—Á0þ~ôørÛB¦_s~ù_\¾ÿÕ½€çü·«þûµ¶ÿá2èÓÿé2hõÿ²0ôÿ·Ë`°þ[Чÿ×xtÉÔã"²²§E)KÓ8‡ùýê‡%S«B*½&5RµjÜOlVÿ‘ëDo½ÿífP:6®ü(¯C½»Bn;¾Š×8ÉZ¼òª•==Íã®ãëg3+yº ñŒ‚¥P$¯3½ÛG„ظÜÙÄÆiíF6t3? lÐR 7µœ£­;¦oCwé­î¥,ilµJQþݰ¥Êklù^+uZ-e?Œm$A[ÿ²ê©âáJn¿\K nKÜ$í Ë÷uåë Z®ÝVò´Þ¢¶™…Á1–®c,ŠˆXv¬€¥¬,\S¡î³„P¥ .PÙ”C TˆÂõo4jÅǨ§‡ñø•;=>FlroéMhêÛsæáŠéi5U]qIVX¢_Ö‘ÞS`(a“¬ê†ä›‘¤ÿ…dä'›I–”‡+¦g¼â«ÿ¦ʙܛ¸ ‹ÀŒLìí³ßMôÌJž¾öîèI5sûæCRvìd™í‹2¦SuËô0H‹âf~¥sê}«ÍQ“Þžqx¸ù¤Ho@©;jb¼ ÑЮÅh(ºb44r1 äbôpËôHjäf”ë3Êþ£¡w‹QJ¢ïf~[ õ0Š˜·êéS–£\»,…zj‹L_C?o (8h¥OO…qà¶¿ïÜ´]µJQDõ´”†•B=¥â^má_è ÃÊ©ýÏm!ÅRÛGžˆ×—¢T¹?¸©õ}`Gz5ÅCiÖÓS*®ëÞÖS piÔb†÷ì4Z¸ÍNÙÂmvJ¶èJ±q›Ò´-ª(‡:Àò7ã•H}ƒm%RËDIÙô†¤¼ÑËšÞ8@{Û 8¼Ñ G-Zàû°4ê«ÉôŽø¾õ±ÑKo˜ÞHn6½ñ €éƒÁMo¤)oô‚¨¥QOã#ÕÛôF>·éãÄMoü+az©<~˜^®ãV"µZHÑô¾à£ùËôÒK£ÖX¦plzé¥Q«ˆE/7‡× ß]èGÝfÙýºÜzXyÔS&%ê¶0V/‰º-qG´‚. ùåI,¦K¢îÚ¢Œ˜ k!ùÍž"ð/ó ’Wõ¼)½ã)BJÔã7òã-B•«å%QOmˆ9K¢ Z½NøÒ"L#+[”ÆiÝ‚”¿,‰zZ@XŒ†¤«øÊiÒ§åàZ7N÷sBj½Nc?Å(#ü§åôòSŒR¢ŒÓ+zš– õÍâY,÷¥· VÄB”?|n¬¡POt!Ч‘˜îpÊ2[4ýësÖ ßó„¾¥Q·…äu¡µò¨/n[|…ñ6…EÓ¶*X¶ *XL(ÅkoOÑbBÙ67-‹Ð¢Eh .Bùûç’¨Û;LYç{O4`«½ÐBD\yÔ÷0VõXø¦B4ÎêvåsE¹u»ò¨ ÑB4ž#Dã¬n!z¸múÃVõÅoë|ï)C¥UŒ†xí(JéXŒR³\·MÏs0¿ÅhdûKŸuׯ©÷·«‘=C屩+‘zFý u`ÇQ¶áú­_|ßúA”òr¢•I=Œ€«¥QOmT•Eiü’ J¹eøí­T>G”FÖº(årvðÝm‹£²E)7á—F=}GQY”RZõÅ;K¢ž1 ®þ¥fÖuÓS±|IÔc¡-J9 X×MOÿ°Œ"é6‚ Q¿ü]‰úåvÝôK[¸)²œ:¦(ÈÿóÛÂÕ¡-ümÒÏáìN–ˆr×,§N«1"—SÛÂlò5ôDzÖпXÖÈo £éøS~[Ê€Ÿ5ð§ ¼³þô(Y,ˆ0kà_z{ üËsÖÀ ¢ÅøcÁsÖÀ zn üéxt ü±P”]#šM)w ý)EáÓ˜òÿ·uã´*¤¹FÿÅE¯kø·)îT^ã¿Mœz¬;§ÕB6~E€‹W&õ˜âmáÊ]ŒR¨ŸúB™®ÜÃXiÔ]&t|áÇ… W®IK ~ZÀ-Ѩ»mè÷¨K´À¸þFu_¼ò²•@ÝÕq—oåO…¨˜×8¡ÝÀÆï&–=Qêt÷,—’ë`ou:%Ù-°R¯4±! ›ØH\6±ü1¨ÔéËp[{ËÄ𨏡YÄRŸ*uº»÷‡ã+5hÇWzBÀ2¢Ô麩N?jÐâõ Nw›Sœ~ l—`=ˆÓçªD*UkʪÄ)KˆR¾‡¥l,BiŸqúy¸ÕXpr&Sât{‹¨ÐäØ)qºýE9Y`†Ô*.ãÈiRÊãÂãußt7Î,qúØ“ë¾é‰,)N?%øp…P>Ãüƒ8}Ž ë¾éi_EP†h¬þ–œÃ•8}éyHžV$Lqºy¢Œ(6Cæuð¶ïÛ×>Åé qú0ÞE'7”Jœ>÷»餜ì¨I)Utòu<'¥.ë˜ÉÊ3Ù€kÌ|WÌd4-múÒ=B4Ôdä¹00¢lµ%WDWöôtu#J¿9v²Œ‚gdƒû O1ñŠhiÓ ¥D#JÕRôè¹uáôÔÆ¹ÖJž¿Å%Mò-ýqçò¤¤é.Å9ÆJŸV…|+“÷hÕÈ@Þ¾ï|åmE…Ü_xNuÖÝÓrúwñ-+ô"Š¿nþô*Š«Â’¦Ç½ìI¯£âèt/¤¸ýµÒ§§Â¸˜z[J±ñÛZŠÍØSiºR綘:HÓSŠ&OM™Z_Òô…ÃuÆ·LT’Mï!}Z] lÖߪ¬3¾eÂw¸¤éná!}zLqgõ¶úç³L/#jIÓý,þ©±Îø¾åmB@ÏoôrSÅôògÑÓýezCd6½qðºéåbgñ-ÏSù7½¡u›ÞÈ‘ÞVTJMo\íÈÉÁÛŠ²£éƒ¼Mïoðüº}º_™[Ž%M?ýObeO·%.’öϹ‘#­°ùÎâ6Žëö6zQ’±  {ÑgñÝoÿx†À~ðÊŠ„â58®»ëòéñ5¬”~‰ÕðµPåSIÓOoóXÔ’¦ 7VJš~,!3{‰Å­PQµ Rf“–4Ý“X„¯uÄ÷X¨pŠÑÈߣq¾õuå¿nŸ¾ùÀŒ¢·Kš>O½Kšžï T^Ïb)‹ÑPy=‹¥jmFÚôӺ͈ÒâI,_Ô•R»ã)-Ûd.¢$%M·Û¨" у4Ý„BöñÇ…{‘E±T|Âg_ž½²ÅÞ ÅS]ú ÔJÔØ4ï ×ÖÅÓ]†÷4¬‹§ÇÂÏ?hžT×ùÞ]§ý¥KwçöÒ¥/ñÉ~â3´yïOQÿŸ‘r.>™ºô%>#qY|ò/•uïô„ZºtWª‘¡T=…è!uºkãl~¥N·%N‰£ôAéÒýI bíÏ<ßÇŸy¾e>ÚJžqÍŸôJ—ž!Ï6lÓS:H˜ÆË^¿ôëæéyY¾’0%ô%Lwç±qÂôpÄ÷í9WLWòô H¾©0åW®„éBª+yzZÚJ˜î÷¡ë/=ca·;Óƒ0Ýmãs„)'¾%Lwð£ê/=+aºæ› Ó-‡ÂôïW˜þývÄ÷K[8‹]N wÀdaŽárê<‡+[8#•…3ÅåÔ®- [À|­m9ujC¿®±ßÎ.רŸ2xÎúSü¬‘?¼éømᯗkà_Ú¶þXðñ\, ~ üKo¯?mƒÖ÷i,‘kàOmxÎømá^ßø¬ß–H?^#܃W­Üé‹·×ß2aè•0=¢âiPùÇq Óó,6cÿ©ªºY%C•;Ý¥wO·‰³œuÂw["mY´ÆÁÚ¢5´lÑ×:›ÖP……kh¿Â5^H¸F¦³p2Â5Îè®q3·pç×xUáWQW*•4=ŒS¾5¯‘½ñŠq¶Nõž Cr5¯ÜkX§zk"¨TÒô´‘¨dé1!|•,=PÒd^y"L%M?¥èÜ’¥g\Cã¯!r‹Wz}]8=µñ•Ä+ ¢õ J?-cÿ9´¦*Ýo ƒI…A ²·Å) ”QzP¥ŸVQÇ¢pÉ›…X(<©p Î8[lrõPªôÓ.®lÞDfè¥3’©ÅåáLïaê·¨|9¨ÒǾ/Uú1Téæ>’|†#(Jøsƒ¿ö|ºŒ+µ>ã¨mC 0Þ>3*eº Çw¬Té¶ð=&Gë›Ã'yÚ¢'td±R©àŒ4Þ-t¦*ݽFAÔïSªôS&tq‡M ÉÛŒ-PÐŒ$gÓI©T1“ÑIá×óQ¾§ð ¯‰Ï“(ÝàsDèáºé™—°&”¯#B¹Mý.B×MÏsØ6ʈPN Ö‘ÞC5—2WB+aº½ƒ2%J7mÔƒ?iQüä¦w‰Ò][äûÓIÑf4ôOC7#ûÓÍ0¦ñ·±¿íqi²—NÑx³ÍØOô“£i¼²ã)õ´¥Û‡‘sî¯|hþ^AE¶—Pq´×P¡ù{ŽÚVQÄÉ˨ÐáYãY—³Ï÷ù^ëâéq§áëâi™*+_ºÝw7oôRPÝèÅwîÃôRMùÿ”Ù(9Ž\©ou» 0¸û2^Û»?ÄßoIFdŸê™P¦’:¢–HJß^ôR 6½!þèeåMo8ÊôÆá禗né½Þ8\<½¦8$\ôr º5éñn\ÝlxÃñ†—s…Ö¤7>QÉ6¼‘mxãÐqÃ9Ñ/xéø×ªŠ&Ã:¨á uù/…N—Þ Ji×ðrYGz«¹PÃN—~ø_ev×NO!®˜[“~ÇhÝéÒ%®¸Üäÿîù?Ö[ü QË×éÒ3壾,fpëÚé)‰ÔÞ ö-b#‘ú:A¨k§·n˜Šuºôø:¶h«·+G‰Ö¤§}ø¡ÊVhMzÊP>ôúŠŠ°8 Y˜rö‡(«ªi(Ü‚4ôe/°(”ŠÑ¨koSQI£Q73 BZ“i£q¶óÎÍ(¿ÔŒ²}¼KÅ6õ2‹u3£ôWÿ|š'±|š*ëv]fýp8¥TùÚ£‚’,F(êHïíÚ)JOHLQú<®[§7ÀÂu ÷ÆWR¨{E(¯Úè\ézø=æY7AJéç—B(5€Î•¬Ð>­I/V4yvʉkÝ:­Rtª9 ksÊo§ü϶³¥§æˆ.-J…¾§Ñâôp¢÷¶e@q§{¨gÝÄéáDïy'-J dê@ïeŽ–ë^jgKÁ”ÅÍ)-êi§üÉ´ô¾ÕÚÓQx§îÞ2Žd¥ÿúgEé¿ÎÞÜšÿíÃX8å)§Ž…—SÇB±¸œºïárÈeà»rê”áÿ åÔ±°'—S·Œ2®6ð÷ÀRk.^k¢ôÅÕõ/–êùû4´BuüË÷TÇߺÁoÕñ·}`©Ž?NÔªão™¥×‚ºÕµOC›VÇ ÷.«ão­þªã_¾§ôÞ* P‹Òk¢PüÂô JO©Ã½Ó· ¶(½ïB›4ªÜßèléõpÃÊ ®Î–~JqbÒ¢ôc W´ÆÓDk\˜]#Õ<ž­!΋ÖxšhtmÑJª“¥ŸÄ}Ø¢5TdÑzÒ¤Ÿ§Žò :y]5=5ˆº‰VEÒ’ô¶*EЭ ©/Z) šÖH‡vTåïÈ-IoGCWoIzMÀ¿%éÅŸÕ0­‘ô,ZùÓH+ÒÓ„ü`ÁÊyP'JOs° ­´Vªåb•Nª,!Ri¨|¹8¥&,L©"›R(Õ5—šNƒ"*_nDQB„ò唲£ð¤R)8Yâ…&DT‘‰µ3,â2äUaòª¨<¥IŸÑû,(™ôYPR)“pf§IÏ[R~ ÿ³ˆ-uÇô<Š%D$®+¦/½«³¤§Z,ãÐyУÏý®õè±Ð/Â2þ!—ŒL­GOŒaÝ:á›>Â{ÊPotàÄÓ:Kúüžºcúö´WÔ„‚ì IÕù5E‡LÖM3T_GL »_'±ý":Y5̃ =€Ðâ¹(+-@O'xŸq«;¦J»B4dg!Êí¤'<!ʺczkÀï¢Ô2[ž÷D! W·=.8èÑcaJ‡öÞ=Ð<­GÕüO®“¤ÇÄ_u;IzL‘ªkHÃäY(w×;IzNûüî1EžñkÕDeÙ¨ÆQƒûîÔÓò«á•ùl=z}ÈjxíйO‘üíÕSHÕ¯å˜íó»×Q$à ¨È&÷ *ÜëÈ·f½f¥T{[Cªtpe5ZžÊG©WxÅÓIÒ—Oî$é1q©õè-…ÎÕzôr÷v’ô>&Ó§c›^ÂÖçwo50 ¨;¦×Ä߯Z^G!u’ô˜ø[R'I?&fÖ¶½ÏcKÞÈÇ6¼q·á -ÝðƑچ—?ŽÖÓª!¸îé­<ÛÄðk/x©¾&@£®˜¾U£õèmIÊ †7Ž 7¼§éyà_X ÁË äΑ~ ôèÇJ¨È%}|÷”ÁÑzôc‰[œ½úç›WÿTª-Wå}|÷ó6`ëÑ…ÚLçH…~óü€*º€ Y¼†Z/\9jvŽô´Q¬ák¯þ©n{qEUS¤R“ïéiªâ4Ž®¦¡T‹RîüP„ XŒÆÁÞb4”]…×°ˆÑ¸eÛŒ‚ªÎ‘P¥õ ‹*­ÄÅh¨Î^öƒø>¿{úßcFYæÊèÏa±~ˆQs}~÷ô–£q´*=êxJªÄ(íéé ©FOx£)Bù,JW|bh5z^BÍÛã?>¥s¤Ÿ2h™ŸÞ’§x}E¡Ú;R|‹Wÿ€óçuGªåèùVMpò†–£§L¤¯{€Žö ‹½ntŠôó".ÛšN¶´édóxoŠŽó ‹ÑɈÓrôôÊ4Ž è¡-GOßÅ{:Ezâ EgÊâ–£§hº_B4dK!b«eswŠô9âü¤q4µ 屬-G<¼d³õèí¾U)‡óÖ£—FúΠ~Ž}z÷Vƒ¢¯§§‘ªíé)ϘiIz«A îÓÓ_¢5¼~ï;Súyϵ­k¦å@ªì•·³tªô4/0jUz,èd­JO¨ï WÞ®Úªô øû ï±ð=W\;UzjÀ2•?§wªô¼³UééJþ¨Òû³ªôßUš“‹rêX¸SN »S9u-h£rêZ¸Ö»–)§NNõË©cáT¿œºvM½ê ‹U Xà{*¬ß`©°_Š÷TX ȪþñhuÿK ª÷¯ï©Î¿0W}-¨AuýýXªç… Óêù—2Õó/5¨ž©uuü}eÃêù[ˆr°)ƒº)±éTé‹Wûšé›©ºÿ¥ýZ•^khVã4nÃâx…€y ­oYzMt”yå²¹ï™~JÅõÏ6$^2·€åFËG˺™WZÄ+ó>Š×ðxfóŠŽÙgx?.ˆƒÌÅ+Å•âõ”*ý<Uà½$S]4®Të:SzK¡?2®‘Dm\9hYz9¡j\ùSgJO©HS6®¨Ä Wþ:ß™ÒÏó¸Hn]ú±DvµX¥d,T£úøîýVȶ"•U¨l#Ê·‹S*À«x¹(å£)›ZŒ²„e[ŠPP©2‹O¸¤ï–~¼HÅTlÒ 2#Y`òç™Î“žv§b+,C|•q~¸ ŒÓ£Bù1 'wžôÙŽž)KŸKˆHºÌc= Ÿg±Zi­KŸCÚg1-#(Ã"*#O]X2D¾†ÎÖ¥§ù¡"3.š‘W,6CáœQFt†EtÆÓDg\žl:)|šN|é—×-ÛtRÈõøNùÙÃûA˜;¼¦£¨Ák: ‹¼_„hxTŒž®–ž€Þ£'azÊP0£‘õ|eô‹åVq ÓÓåèQ3 ´2=c -ݹú1£hŸV¦§UZ™ž÷pW©•é1Eæ­‡öHl~­šÐ}|÷>U7¨‘ØlRãše£§R{馬’_´²†/\éC/ŸâZlÕH)÷*ò× ŠÕðŠA²•éq/ûMß=&.À¿zŠ»—QqW¹×Qü ¢3¥·•¹7º”ÈZ™ÞøÎ”¾T¾•é}E˽håV¦/¶2½&VãE/M¦7Ò|_ôR;5½q9³éC¿Mod››ÞÈMo”2½QyÓ§m›Þ0™Þ0½6ö7Ógt›ÞÈQ7½áýؠ蛥7蛾YzaC [šÞþEÙÓô†ŠjzãêײРùkYE“èåOÌ-M?ŒC Åîéøî)CÁÖóW:BàFÒ±¸å°ð]؆Åët–¦ŸºÅQÜžÄR6÷ á M?O‹v°!µ‹W^âÕ©ÒÏÓ˜ËÒÒôXX7ÁÊ,—N•¾´œ×W µS¥Ÿ2‘D-PùËSß=…¯S†ŽN•~Ê„Ì,HO©ÒO™8ºZŒòGb4Ž#Wxåqß,=>€¯[šžZSbõ* \wªô´¥\1ÊQü‡åx-MŸ{Ö1í£¨¿˜Qr F#ÅܳXú@Œ²7þð=êYì?Oä;SúùPÔ¬•éÇ@Q€Ru¥fë,¤aáÉ¡¬×kc ,òÚ•JiúùH&yþœ\÷áÝŠ¤ZšžŽC]Øã>5^ÁÉÿ&ZšžPDG{Ðÿ _t¥³OïžÊ±A=ä£Oµ4}Ž8)=–ƒ4}±ˆÎȇ6üTá&‹O>­¥é‰øž–¦ÇB¡Ô»T€§¥éinZÄ(}z÷DŠãf”5ð(Ï2Š <\¸3¥ç=üRAJí²•éEž³) =Û³ÓH‡öì”ûk­LÏ»¸‰Òçwé/¬»Hº›Ô¨ÅkiEÏzrÊ©H_.=µàl·¥éõháúDÏMyxlkÓû<ŠÆž›òOÑV§×ƒè}Åôcb-Zž~,¢Zž ë dÙÑZžžÐIÓç®ÑòôX(ª;®^åéù³òô¿ÌÓ©Ü:ž0U^] 7œlÁ×–S§ »a9u-œîÛÂÿZ¦œ:Oã„©œ:r\NÝà=Ö;øÒŠcá_‹¶ F«Š—§UØ€ÓŠkAǬ°_ŠZWØ2¨uE€-ƒ÷T ·Œ«ÿï—¢'W÷_¢nÕûׂQ¾:ÿÅ×Õù·nxO'M¯ ë¤é}¾¨OòÞŠ¬–§/¾kyzMp^'M_¾·åé5Q­°ž¥É°†š,Zù;}«Óó<×WL?&.²Zœ }k\™¥õQ¼Fʰyz­N?/:¥M?þÜiÓS†7¯lwñJÕ³¯˜~žñÊá´Ó¦§n¸-OÏÓ€x§M?–¿3pWº´ï—¾ÀÐòô˜CËÓc õ׸r«åé~í¬é5QÔ4®§¬é­!K ׸åZ¸FýDëé ïq:ä^ÁŠfjyz«–òôùY"• ±+ukÇU¼Ã˜¦<=\Á Hù!b”/¢yúüô O¹ÐZE'KˆM §"3ÄaW‹ËSÖôS±“<=ª½Š¡‘iýðñb’ß)$Ñ¥;kúy?KˆHzÆÁ/Wìä£n@vÖô|<ƱV§ÇÂ× ÉÓÝÒO™Ð eœ’#*)Cµ:=5à?Šœqë·À$45}~Ú¡º¨Ødé¬é³w¾Î8«[pÆÓ3ù Sß-=ï¡6,8OYÓ—2‚3¾ô5…žìÙ(UVï`§/—žIØ£ûA¾ÔZŒžÔéáO£§s¼'¦±ÖfÄwÚôS&4h1ʽŽV§§nôg£T!_“Ñn…>Ç{í½TÝMoÈÝ/zY½| éåvl«ÓmØ(¯Âfz¹CùÍôF’¶Ã.…ƒV§§,Õêôš0wâôš(å¾è寓éåeà}÷ó@ãÙwK¾hqz,”E…nÈ¢"7ò.ÿºï¼éç=üÓå»°óÑEíIœ~žR·˜eWì¼é©ë¼é±ÐÙ6ê&^#;Ú¸r¯½Õéiñ¸ý[¸†p-Z™}Õòô´%zo`&ßòôS&„Q‘r®@ `qYÐÂôt»ô´wNEiˆÝžÆR¥§Ìéç=‘»íu?åvQç‹Ò¸¯[”²×õíÒÓ>èú-O…°+u†Ö§ŸBÜwû!LÇXשÓó"‚ LQÊ™ÎÏcù4o°Q_5êé ÔOõà ½×ŒÂ D)z%<  Üì9µQJåØ ኢ|‹WY´σ@=°êñ2ë,<¹ÙÑõS†»«?_x² ÷In+Ôç®ØÉÓ%.ùŸ‘¾íu¿èÊgŸåý¼‡ÃÏOï¢QÎ~ú,ï a4[¡>¿§ê)sP¨§ Ÿæ½*©b4Ôs1Êbú,ï‰Ô¡)Û»“§‡J¥Þ¨Bïíäé‰S@¤êa‘s—¾_z Q»önºÃ/ÏO™ÉÔúô¾‰Ï3§d®ÏòžRÜàèÌé© û%PÃy•a¹Õéy¿ÉsÓp‘#)÷îûŽéËç¶:}~UgNOÛÂE­M«¨^KÓ…{-M¬¶4=|Ó⟢µX AÔ>k-Vãl±új"dNÿ»?+Mÿ»Gš¦]N ÿö,§Ž…“ãrêZÊ©û4.]½¬œ:eâ/2—áÏJ¶0ÒøiüMÁ”©05à?öKñ´êÿ[_Zý- ±úÿ> ²ºÿåiÕû×;)MïÓàÑêûû´”¦/eªïoøºúþ¥nÕ÷/T×_‡«ç_,-M_^ÔÒô˜â"bcÊã(ZšžR‘kPãéêþSêµn£IÆö]ð__2ý˜8áîã¼§kizŸVZšÞRTÁÍ+ÇŠ6\hbùßG!Ëec«ÓO-¸Èú(dÃë5^M*ÀB6îÔ®ájÊð§!Ë¿ª;yú)sR§Ç§ ÙÈ9²\Juòô¢BáúNl«Ó[ŠÊ¤‰å}¹}¦÷A•ÕĆ0ü ®|—‰åâñ“ˆåo}¦÷´+!`™\ѹÓOúH´²jf}©ÅéçY{[!‹S–¦mzImú1P7£tŠ¥A„òQŠ©ˆ=ŸÄ'«+<©[ŠN”èÔéãw|™ÔSÅ%¥¼¾bzžÿvêôXЈŸ%Áø,&O'z_žæ JÙTHÒ"’u‘|”ˆ¤l, é2É—{¬ç³Ddèï œáÎ(#(O©ÓãKjóÆ’Ÿc.âô&(2ñšÖ¦§µB¡yºaú¹[› Ÿ&8ãi‚ó¤M_Þc8tgNOZg¨ã‚3ôlïÔe=¼´éñ(-Üi¡Q7!Ê–>Ò{ÐaÝ„(už/FPõ‘ÞÏÓ"§Z“cSkÓOžÑÜ™Óc¡Ò­Øß#D9WéÌéñ(èmmúLÈWÅϸÙŒÂ9½}‘¢µémTêª×ãÓ{šŸÚ‰Óc8=Í@‹ µiœ*.H9Iú!H¹LïÄé§ü'ä‡ýhÔNœžï¡Œ*H9ü¡Ð§— ÒH÷*‹zº ý­à°Je¢•éå Ó––¦ÇÄÔÖ¦×ÄZÔ´½@í^œFÚ»8¿<‘å×Þv:{zІlìhJ V”Rͤ,aFS›Ÿ±ˆåxØçzŸkì ÀA›ÞED(µW :yz¢_ã]~£(}&@ù7`kÓÏ{øçéOóÉAµ¥é©?ÈË,VÛa”Ÿ*:¹üi:AZKÓÓçéÑÉhú\ïùTJ¹Â3®Ÿ!‹ÏH¸v¥üë­ÊÙÞ§¢EˆFZµ Õ[§ÔqE£Œe ¼uJ™KÆYà‚ôÊó†”ÞñPOµXr“½ó¦Ÿ6äèW åãCãðð×`Ïê SþlÖÂô€ESZŒ)›H˜ò‡®V¥ÏÝ®UéÇÂ=¦V¥ÇrP¥K¤8;R-ör >ý7aÚ³0=Ý2=5r0}îª}ž÷X Té¿ÿYUúï“0ͬºß>Œ…;CåÔ±0ÈTßß§ÁßåÔµpMé÷py­A9ukÀì÷`¢TN2 %åÔ}|P}ÿòžêûkAp®¾ñhõý­ÊTß¿x´úþ–Á÷TßßöIUúò=Õõ÷i`»zþ¥}ªã_êVŸ†hQÿRëêøû4Ô :þ–¡ÚZ=Mv«ë_Ú¡¦×ÄRæ4®P6¨¡ÑV÷ÈUMçKÏ«â¢b£Ê9f‹ÒSŠÿ”·*½&Ê´¦5²¬k.^9GoQz_E¿X®ýZ”~Jñ®†¥ —Ó-J?®•:ezÊ ö‰ÞS†:»ˆåe‹2=O–-J…¿ˆØÒE,ê”éñ\(Å&6²M,GžV¥/œwÎô¾ ½½Ué +3=¦x× YÊœF–¿X´*}¥eéÇÄ ‰>Òû±p™Ñ²ô´d^áʺ‰VJÉb•Ú¬H¥Á âåæcšªôó¬• =¨Òã-׺ôô…8Ú#{œõì‘¢ß×׺ duÎô¼+Îæv´ã×Ò‰ôd”SªÎ™ÞïB³õl”?¬÷]Ó[Š¿8¢r’ݺô”⬳s¦oŸ,b?p§¨ué} ׸^DÅ ì^EM^FÎÖ¥oïz-¤ø³Àk%EÑÏÑ5á×JŠ‚ðk%žVR,õZòÓdzCç|Ñ{ХǑÔkz¹%Ѻô”â ßLoHñ¯•?¥]Óú­é¥°ÒºôVƒ ¦7R·M/ÿÅh]zˆ®÷ÍôòÿˆÖ¥—y6¥éj¼èe)ÓË—û²é}?Ùô†oz™ÖºôŇ3}éæ­K_ºùwÓËʽ\0wÊôóÏû©ÿ³i]ú±p<íó¼Ç‚±¾ué±`¾Ó)Ó%Þ=‡å qå_-LO³òv©¦§…X‡­lÑÊV¦ŸÇqà»Xüg/±¨nŠÔÈr¨‘„#Nã¦eaú³0 Õ\˜žn›>7x+Ó &6­LO³R¦‘íU½#LâûHïiêÜ^h±nÞ¥Bk÷‘ÞgDZ˜®(üµ0½&¾É rç/œ^P©Y ÔЬjPâåë N)Bô¹ÞS f-Mï'¥6}±\7~ŠS|èOGÓ§ç-ÔE½Ø¢Æ©Y,÷þ= ÀxóÓ“J©‚”¢ñk€:{+€ŸéPʧ‰QŽã8}æºÅéLjÔâô¶'#F9Wï¼ééÜtµ÷XmüüTÊ¥I‹ÓÏ{;oz>•íã@J¥Ðݾó¦ç=Tz¼Öb¯µ(‚{?€eH¹¶è“½Ï_ÚyÓ…§iö¥ÓÛ­XmAÊÑ>Ú{G1÷µåÏ/ºnùwâôó¸“<=_ħyG=¨ó¦§ ÅnaÊC_:kzÐæ{D)3õ:izÊÐ ¦4’º…iœÎ-L™lÖ·MOGáyK–§§ *×âôXÐÞ-N?n²tÊôXÐ:ezž†fè”é c]‹ÓcaÝ„)׫}š÷¥n¢”‘¬Åé(qú÷?+NÿþˆÓœÃ”S×?”S×­EYâ–.Y8Ñ-§ÎÓ¸=TNÝ÷p>b (×€¿=¸ [üúžêúTÏ_ †‡êùca÷ªj,L3­ž¿OCݪç_,Õó×TÏ_¢åªç¯A¡zþX¸¬©ž¿<­:þXÈiuü-ƒï©Ž¿ePëêøk¡Y=L‘éjJãðæ¦¨x§L¯¨[Wï¿Uä†ÎlTéŠöÔ™+¬‰¢l…€1.›~L¡ ×ð“xåÀ×âô<Ž‚­yå‘Y­MOõø×i‹Óó<ºVÄòŸò§§ :z‹Ó…~±vZœž2ÉÄÆÙ8$ÝÌÆÕÚ†– ‚ΚÞ¤œlhé½Ö§uôÖ§×Dò-k}z£Ðkhã¢ê´”U-ýÞòôó*þfÙòôXÀyËÓÓV)O?~«xå— W +ß.Vù‘B•“šúô ƒ8eµ„)UsQJÄ(k%Búô±VŸE'Çv±I}Td¢Sµ<=„±ˆ° ©YT†Ô,(C¸“qr¸Œ«¨_aB°¤D$Åf…P*ÝŽ x‡ˆ¤ž+"ù€‡{ZDd\÷,$Oòôô!„âÏ‚2žf*ÑY> Ë8ì[\Æaß“OSädJjËÓ,(ÍŠÍHgœ'yzžFÉÔtr+:¹ØòôÙ£}¤÷XXkÑÉ ¾ˆÎ€Eg$Oʹâ3ž&@CÒ¡ñ¥B”óª–§Ÿ/ ÙØŒòÇ1z’§/5£è>-OO ø1JA´Ó¦g aûˆÑøÕVŒÆQÛb4rjÅhäèŠÑH¶Uå$¢åé§Ö êvÖôDݸ¤Øã:U¦V§§THОŒF®£h˜êÆÞ¯¯Ù(…k¯žâ^>Å=$gñq^¶Cjhõ^B…鵆¢öûZD!p|õ**”ð×2 ãGß7½(Mž•F =+ ñß³Òj=+¥¿yV¥^K)ôžoz*ç€{VX¿è¥mz¹Êêû¦÷],ezC}ÑK×ô’Ão/zhûDï©F\çmzãôpÓJ¸é+›M/×­No_¦blzCÓ6½q´é=©Óm€è7Óâ¿ée˜ì¬éõ!+ozùÏv«Ó—OnuúÒ‰ZÞR?Mo(á½T8/S‚Z~ÞD±©ô~,‘i-rÙZ~ÊœÔéÇÂ.Òz?Y} ÷”A@kuz,èU­N‘®ÕéË{Dl.`9 è¬éñ`øn\Ù5Z^„XoÛhVáÊïž!`VÑêôó&ƱV§§âpPŸè=‡ ÓyÓãTª¹5”fÏøazÊ›>7Þa*¸0«›)ðiuúyO\_íe?µaÏbéë,¶Õéiú@˜òO²>Ñû)§€ SîŶ:=eø¥Æ”ûÑÆ”Ûu­M¦q‰·1å¯}¦÷T‚ëÅ¥naÊ%U‹ÓÓ[Ñ-NOãQå¦Üa¿m´4=_Êgy&@]ÔꕞÀÙ9=¾jìIEVÏâôô`M„©Îœ^¬á¸+ -NOLd“ Pn߇zOŠ¢Þ©¢ -B#§Zˆr4ék§§‹ðiBô$Nß(hQê›/Fáì>Õ{¸¦úêÍ*¾ÈÓÔ¸BZœ2—®ÅéçE'qúûúTïiVNœrIÙ¹ÓãS–¥üµºOôžþHýΩtœ7üùQúEpQyêíùSzЦ'Œ¢Z› žÖÚôÅ"J¹ÓÙÚô´¾§µéa‘ªõuϪošžð{¼gE¥Û{V|÷¬Ü Цÿø³Úô£M£~åÔ±ð'àrêXbßJ–8sÍ|S9ußK9u,¼…«œºµNmzËF—!%~ÊTÏß÷`ŠPß¿UÇ_ïà=5@­-^ÿb©Ž?ŽwÕñ×o¨uuü‹G«ãï÷ Õñ/­]-(SkYÿRƒêø[µ®Ž¿_Š6íã¼×„*ôqÞcŠÓ·i˜ªóo)´kß4½&Värw±3§·khV¹XëÌé)WCW¨îó¼o•7¯ãû®éuÙû<Öuõ|ˆï ê± -Q?þÞõ¼'Îöœ4²‰=' mØA4Òx='Õ‡ö(õš“RÊõœ4²¿_sRºÖsÒ€Qé!l¿VRˆÝ_=)e‚g'Pç?P½ö¤4ˆy­¦è øá^øñ]¯I)yrlåj /¾`Óõ˜øù·×¤”‚¢'¥ñ.OJC”5½¡C¿VTh”–¨§†¡(›ÞÞMoˆ²¦7îm6½q^µéåL¤öÞRD7½Qê¾¢úöÚàö‰é¥Ù ÔS¸ÒÙô2{-©‡úÒé} 0½q™ökIæ[¢ž21áÛkIE1õµ€¶D½žçnÒk?€ ¨éåq @=dRNgP?¦8¿[ðrãª5ê)ªûdï‰ñðzkÔ…q}²÷c‰lhq7v ÛȺµ‘uíùý-f#ZȆ-bãqËCáZ¤ÞpKÏØÓÙÞO©8Á[¼2'§5êiJÞ¢5îø¬‘ïë•h¡Êl>Û{šŸÚg{uû!NOÔS†YÊžÆRkõ"‹¨§±¬›1À}¶÷SƒSõí>Ûû±0¯­5êùžƒF=Oã÷Ó¸ÃZ˜Æ³+eŸÎ >÷â>Ù{,lî;¥?^a•Ÿä°Ê{ý~˜S*ÿ┃`‹ÔOõ"ÝÕ1•©C*-¯ˆ }òPaq<åÓ<8äPOßY-S_,ž ði·Í€ŸžPÚöj+s¨§¹aðZ ´L=¤ì&B=ŸÉA¨s¨ÇÄ0Ò|O¢ìÕk'J9!ûéþß Fã¾ê×¼þñN›Ô[U¨[ËÔÓ½i¢üƒ³ïžž2”-½Ú¢PäPJ‹wÐO;‡z‚%Uø|šc¯…èüR1Ê9Gß=ýÔ ¤ho¢Ò¢”?]ýò6*Åu‡R~C)k-Hÿv:ƒúÒ¦ÞJ¥¯Å(‡î_fTõéÞÓ>üõÀ;|e­Å(wy:zz7¼Ó"õ¹ß·H= Ûf-×"õ|ee1ÊY\'PÏ{ð¥-R-× Ôó–£q¶‡{×úŸEêßþò'Eê*ð¯ÿþÿýëN¼>ý& ÷©m‡¾\-_máBE–8CH–˜Üøiü!ÉeÈéõ{þMê*ÿÁOsÿQþ€÷Ÿü”ùÏþRøà¿¸ hü¯®zÊ?\_úßdáoÿÝ´Üÿ°œþÏë÷ü¯kÝþ·=Šïù?W_ÿßë÷”H½(²ã•H½&¦ÕéÞ Q Ô*…¸P"µLpëÇo®K}¿~V%P«òÌPþym¨:Þ{KÅ¡ÒÆ5’ŠÍ+ÿÆ.‘Z|•B½&þPU"µJÑf–»•C­OFó× ßkâMö•E-ÛËÜrã¬ò¨UŠî5¹ük½ŽùV)þT`vCÀ6¼ U¥R ʦ¦—É=Ÿî1¶2©E/¾«2©å^Ф¯0ËR¦—{ŸL/¹+™zÞÅ0W2õXâä ±Ë•PÉÔ[s´pÉÔcá‰[ºUÔRÝ5³t‘¥†lbY1Ë÷W¾Æ´R^¬|¿PåçÔ”ª/3¥ãÅ(ÕRJõ¶> ¢½§²©/-\RõX"ÿYd†E`ÆñÐâ2îºvP¥ *.Yic‰Ï•™ŸE% ޥ鳰älJT²¾¯0Šz ʃEå!›úæQI!æ³° [\r»ûVhE­ &ºlö½±äŸ‹T2µ¢ , ¡-‹ÍƒR½.@³}1œh„/‚3Þ#8ãWMÁéÏ‚“ÍSÉÔS·P·Eg$O]Jõ~)ubu ¡É‹ÐЖ…hxGˆ†EˆÆÖ œ‘ /DãÞj#Š~UwP¢}„(ÿ½ú"Dy6Þ!zH¦^FÁN)ÕÛ¦¥Toû¤R½–Tª·“PJ}MLY퇣¾·Þë¨ou;ðSWPËÄw9ŒòL»J¦ÞRL-¬£¾×¬ƒi˜<È3Û÷ëkbJ}Û•Rjõ­ïbcy¤C»=ÔÇÁ瞘FN·'¦‘ÿZS±•¯Ž¬QCOLCsvpå?¥Tß(¥Z&j˜ü#Û÷µ¬QßLodûÞ—U¥To5(‚}3½ü¶ŽúÞR¡Íš^ž\ÉÔzˆªdj™¨›^nÞÖQß[*Þez£”égÓ§e¿æ©¬¼égÓ˜^j‚•L­Â? ^Ë*êÛ/zÉÆkYEiÒôrÄ,¥Z­LQÕôF)ÓË[K©ÞFB®èå­‡•M=…˜¢SJõXøw)Õcᚺ”ê±0éµ”êµPÌ·œ&V6õ–Á¨YÙÔcá ¥²©×Bù_ÌrÜ®³¾§ Çú:ë{¿á¶²©o½­”jõ*ù6®¯•¾ W ¡%ToíøÁÊ!©’©§ Ç–J¦¾x»’©×BÉW ŽúÞ2”b…éA¨ÞºQ@ö,––ë,¶Žú^@\%SoÝR¨¾ÕÀ”R¥q ¹( ÑY”Æ×¢”£]õ=u‹lQJM¨tê)Ã~_:õZ¨8;¨rŸ¥tê%;ÄhQJ²K¦V!º[˜rÔ/z ŕΔ]ÿ§0¥?N©¸¾¢iÈÔêİx­Ãkƒ O(R*´ž }J¥žš¥H½Uf‘ÛFÀOÊ×;ŒRì ! Pnÿ4 ¬³eÓPŽú•I½›Ò±øäbª2©· ¿çºP™ÔË [ÍA”b¯èäL»ŽùÞÐB™QxF^¶ðäÏq•I½uCËýžü½«$ê­…[ñɽŽù¾uÞʤ–‰ò¨å?5%RO!ž«úKŒ†Å{¨”•Eiœ}-J9ÈÔ1ßë ÁÞDM‘zkÍööXGv{¬§»…i¸Ûc=« L£Y)ÝãÝjÑ”3žR©,ê½ÞMM•z;ËÓЈ¯˜–J½O£í±¿Tê)Ãݧºƒz-¬› }ÛP©?üY•úäRsþ·ßÆ’©Ô²àk«ïïÓ¸Ô÷Ó€c9uÊp^QNËA¥Þºqظ>­œºïá ²Tê-ƒùXõü±Têµ ?TÏ_ï€Æêùû=©R¯%Uê}|PãÓÖ艹¿”©Ž¿¾†¥:þXx&quü‹G«ão­ÁAuü-ƒï©Ž¿e¨WÏßÊ1)¶ºþ˜xäZ«Ôû@ê²æ4ì®Þ¿n¥VjRC96ª u­Rï³ò.Îh•úÒî•J­ÒQ5Rí)*ØÈT®±êæy#Ë…Bô}uo Wû@~rWë^ÄŽV©×Äö2·ìm­Ro)êÍ&7.–6ºœ¥||±‹ˆøÑð†7^ôR55½‘lz‰M«Ô¶J½­ GU.õÕdz¹¯Û*õv"¦7Îî½\ýW6õ<ï$SÏ›(Ç]VÁäÒ³÷ T?¯¡lh)-›YZ„,«,`YcáÊ× V¶›Pß*?Q˜¢£2¤)R?NÁË+zš‹ÂªðėוÔSØ"õ´/:~‹Ô%de¹Ñâ2ÄXay©ç=¬C*-ЍTO%]&&i’t™")]&$ù¤ª."O"õ|=ß/&Ãc‚2žf*é1a{‹ËÉfÜVîà [¥žà¶º‘zy‚ß*Ÿúf¡œŠÎ8"[tžTê§naaQÌ<ù=µõXt†²-<ãpsñ÷[ PN¾ˆÐ“J}ùR1º²e›zœ£_Ì(Ë\­|êõ•z3JBÄhèþb”kžV©'zRú£q¨¶%U­RG@*Ÿz-\A‰QfÏW>õö’C>õšxZOù½¦Q=1 ÓkbŠ ðÕÓC>µjHYÞÃ;}^R«÷ÓM¯µÕ\ñÜa© ©U VÞSn|W>µ|Èw½&¦ü.OL9gýê‰ihÛ¯5zG]H½Õmû51e5[ã¬mWn8µJ½³OJ›ž˜† zŸ˜~»OL[¥Þé,…Þû²ªUê³¢£´J½“j¥¯9M¦7R’=7 ]Öô†ÞlzC³7½!E›ÞH7½ÔJ¿™Þ¿ð»Loœ!nzùÔr/hz™bØ*õxž't×…Ôjt½Ê§ï2¨tj! ëÄo™Z¤^4¨1¾à¥Éð†¦kxéÔ[wʽb—éP-R?õãÚ-R?H=Ãë-nG~O’Ô"õL©ýZ,jZ¤>€uä÷¾‡eDlœÑ-`C 6¯q·´yŸm#y]¸2«EêizÁ‹+á:ñ{[ˆeð"‹/ü©ÎŠÒ8§\”†Dé!›z{7k JC¾¤¼¼¾üž§}`i‘ú8ëÀï5qÿµUêè\cj«ÔO! 9uä÷¶5ÊÛF@«ÔÏèŊR éuõ֙⩠å³Ä( ¯­Uˆ×B”E<@‹¶D=~Á³^£?,” ñkâŠ"ù)\8ŠÒ1â“©G?EãLoñÉÉg]E=ßÉ[£>÷ÞJ£Þh„(ÑõD0~7hñFáp ¥ü(6ã\h±IïTõ%æü\Þ´F=#0jÝõcá\©5êñh««¨÷i´xŽÊ{Z£ž^ÍÉaÝE=¦8Ÿ[†Eò—¸:í{kGUÙQ”í J¹—Ýõø‡’®(sÀEiüEà-TŠÊé¥*‘zƒÛλ¨lS ²ë&êÛ÷ˆÒ¸;Úm‰zúboPð¥‡Ó¾/}¸NûÞ6åÓLéA¢~YkÏGÑ -QOD«º‰zkà÷@¢þíÏJÔ¿Ýn¢þm,± ùÛZâ ?Yâ 6Yø´r꼇s¡rêÖ þ®®¿F9Y8ÿ/§NFírêÖmTßê«ã¯lWÇ ÉªŽ¿E»VÇß2xZuüK™¸Öà§:þ~¼SÿâÑêøcÉ›¨U7ôïêøû|Ouü}fÕñׂSÿR·N¤ÞQ†üdEÙêû[Цêü[ |S'Ro) ¥&•ñ¹NûVåYC³giWØf§jZCQ6®ÜKùh^)Cv"õ‚ÄšØÐ×,;gKÔ·F1´!åþÃŽ›-QßÅÜÆ .•Ò:î[B¥Üè†zmv£• o¦þ¢—çÞN¤žOf´j‰zL¿£ò-QoO¡8ú¢—Õ0½AZ¢žò°»N¤^D©…Š^ªü-QïgA&»œ}u&õS†rË'“KØàb|ø$n~>‰ZzÎÌ$ê§f|½€åK„+]&X©DU8Ì Â LY]AJ\ˆ¢DKÔÏ$êÇ@éVpRšpo+Ô-^k.YFX†ª**CítHe %_AI‘ØL¢ÎB’%D$¥kÉ’% $-Š¡'…z:ÑA¡ `­K©§eBS”q‘¸¨<œø½Ý˜5pð¤Å±‘®êsPh…z,ðN+Ôc¡f)8O õS&2…E'õÇ:ñûV·+uâ÷úšu‡K©oï1žTtÅgä ÐлEhX„hœ”.FO õôwôê/Šš¡ž+lÆiäb4Þ#F£nf”ÞQèŒ3Ô;Áh+ÔÏ÷Nü¾ôŸÎ£>÷¹V¨‡·ƒB}æºNüÞ2èÁ­Polåã^óR|Q+Ô[Šr­ƒ(‡öΣžRáˆ×¼”ïò¼4.ÀöèιG+Ô[C@ôõ5/åž—FÊûk^zP¨ç]!({^ÊóxêÄï­a¤Ž{^9Ûìãv÷q®»ç¥!å;´F©×¼lÔ‰ßjJ J­P78î<êK£Ô¥Ôkbi…zJ±o·B=¦ÐI_óRÐ õ–¢®mzC56½q‡´éŠ^ÊFýÔ‚ÙtuÞ÷ÖgÁwõTÄ{íðƒÍ.÷4¿ýC<éÓó.¦î}»<²ŽûÞ ò Ì:î[&*×F÷ënt#³Ýè†úotùY­O¯ Ñú­O/iˆûu#µJ¡†ß.G¥N¢ž6¦8,rãRc™Òâ– Ž-O?ï‰ëŽEíáFê)Ãq¾n¤ ÿ#iyúyO|©˜|h!YÜž ¢võ¼‡M$^ãVn‡Z®;‡zIf»Š×ü…+;jyúy#fçP_ÚA¬2(võS†½s¨ËIž~,üã¬åé‹E˜†l,J¹}×òôÔ€2¦(eräQ‘{ÑOÑÖ”¢½[žïäéaä OXF”rnòC”²}êBêmmÌL:‡zÞC‹)åæ³×ýâSi£”ZžøÂŸÄ( [›~Êð¿Ã–¦‡kþÚ F¹ŸÔÒô™ÞN v(Âz•E‹…C[œ~Æs*~z À‡ Qnó{ügJ Úƒ?k&@á³ŸŠ¢ÔìD)¿zÜGo«S¾çóãLlÇP~‹è䯧?E燸¦ÚA4->9Õjyzˆ‚¦î›À ,zÚ ,Z„'ÃáOá °ñÄÓ:ƒú©t¤Í O†÷V§Ï¾ÕééÀ Õé)C½T|Fv·|cÊÎÛâôôþá×âôšXAʃ:ƒzA´Õéñ5hoTÑ ¢lawu S®ê˜ïíüCJ¥YÆ{D)Ž®c¾·íø=¦”Þñ6UpQª±zª¹¢4moà=ÿvݪªc¾/!¹Õé Ö|š(x ÇàÓ ÔÓ¨A‹RN-[ž\Õé¿þYuú¯:Í/§Ž%Îx”…“Õrê”áÙ¯åÔ±Ä]U.à ®-œðøi\†4º ,åÔ­Z¢:þ~Z¼:þÅoÕñ/–êøkAÿ®Ž¿ŒœÕñ/eªã_ÊTÇßïG«ã_ÊTÇ¿¼§:þ> ~«Ž±TÇß§¡LuüKݪ㯯) WÏS\ÌlJ#µ¶úþ¥ñú˜ïKÍ[ÞRÜ}Ì÷~8iuzMuúVª"Àš(ŸVShÚÆ5=7¯-[Þwñ»îÄö1ß[ ~—™e|èc¾§7*>¾¨=¨ÓÛ(¬¡¹å4­¨·½Xùü=á….«av¶¼,u§·.£lTMoäVßémuú‚h'P_:Ñ'Óçrßémuz@Oîs¾ÓI~,¡4‹ÝH­6º|É¥EàÆÓÌ-Ë[6†¨e3Ë"Š´,"`)\ WôI°R¸ªTà*KS¾\RŸ¢®èAŸ~š˜ÁIÖh"ÖÕÔËuKÉÝgqyÒ§‡XŠíŠ©h­Ï¦*´ ¤ÃÄ$åXŠG‰HºX@R6v¥dœ~. ãÄtÉì»–§‡qÅØ§|…¹ ¤(ا|OßgaéàIÑÖ`R¸™œ#·<=5àÓÄf”œ!Í Î®gX 'ENÅÌ8‚\pFÝL'¿Gx†h+>ã{3)ÚšPúZˆžäé!X1£ôº™Q>MŒ†w®Œö1ßgz¿ˆÑ“<=c½#FC°£\ µ<=5ÀÓZž Âd'PŸ=ÚòôXtZžÞAšªëkhGiyzJ…Ðì‰)³ZžÞR|àkbJ•Ü£{8é>1myzÞ?;¿ÖRüdðÑT©‘¹ìA>n‚özŠÄ¶<=5ä8ôÕSƇN Þïbó¿&¦ü ÁÓø.OL)z}}ML©'zbJZžÞV¦rí‰i\ì‰i<УÜmzckàE/µõ×Ävõ¥;ô1ßÛ^| é uÕô†Þmz£”éå.q ÔS0½æ§ü.ÓK1ò›é ÅÛô†"ozOÇ|¯£‹[¡ÞÊ“ Ó‡ƒ›ÞH 7½‘Nnz©É·B½ÕØ­P/håV¨×D‘ÓôòÚñV¨§Ô)ƒú1ÅmÇ‚7„h±Ë›‹[¢~ž¢©È=ó=•0-Q?–8d[؆ÅóŒÛAý<-:ôü€>²qh¸ˆýƒe ,ÿeh‰ú©õºïж¿óáç‹Ößx+ÔÏ{âO±)îB5Η¾N:úy‡£V¨ÇÙÜú¦qZµ( ÝV!6TmAg“ Ò“B=u£kH©„+ºRHêê‹® ÿºŽz½Ã÷ÒðŽ åØÔ õÔ€¹ +Æi$j›QêêbôZÌ(:C§OOx¡¯Å(O+ÔD¨¸‹Q†—V¨Ï>h…ú±„¢éXJUõ5€ØùšÀâiŸæ@šg|OäÃð§â(%Õ×ô¡Ô®o›?_3Wôé¿ýYúos5Z¯œ:f–S/eÊ©cáü œºe¸îò{ÐâåÔ}Gt? –rê¥L9u,ñ-ðAuüË÷TÇßïAð©Žñ[uüµÀÕñ÷=Òjx Ÿ©Ž¿ø :þåiÕñ· ÞS,œïTÇß§¡ÖÕñ/–êøëDÌêøkA搜¿uC™NŸ^µkS’¬1‹’_œRº|ÊwU÷¿|U Ôë JͶÕù.Õ7­‘·\1`«ÁšW¦X´@½¥ÐŒ}õšXù² >}iý¨÷“ù.SW9Ûð†¹åò¼êywÏ;}úæy£‰Ðf7°yÁK6L/·t[ ^÷Rà4½|W§O¯{˜M/÷m[ ¾´r Ôk¢¢izã¦ì½HE/iëôéçUܖ苨 šNŸ $rãŒq˦ïôéË{^Ø"!YÔêñgd顉W„¿V¨Ÿ·°¹ÍjfP›a§|‡(¥z,F©’ŠPÄ'uHÑIQ×l²ˆÐŒ<éÿOÙ™írãJö—ìò½Ým`príÕ³ï32ß?$’ŒHŸüLhIéˆZ")‰Ì“B==L½[\R<¶O¥t-,Ù.¢’U¶;e^‚’IÄ$ ’‰z‡,än»Q~¤ŒûÒ…dÄ<‹É¸(GPÆsÓ¢2¢®å@ãÇFqi^“ÿŸ¿´#¨§ ð¥A=Ð"6C¸œ¡+:yVß/Q_Êñv´ÜfDC‹ÎZ…çI¢žNéØ^“2ðÕk~¶×¤àm¯IyVˆ†°.¯_*FCˆ£'‰úò¥b4j`F±Øh‰zrÃk‰úRŽÅhìêqÐTfÅhÜl-F#lXŒ†Å”B´¥àíÉa’_^“;SyrKÃ_û(PÒõŒHj}Ç÷:,x¿~‰zL„üZšR”õÒ4b¡½4¥4Ø/Qï;¾ÇDŽ¾Ø§ò¿Ÿ¾ã{R1’³%êÇĸ¨V¨'ѯü,¯L#Ú³=5}Å÷d»ë×Ê”eÙµr'ÑÔÛ]èäV¨/ÜÔÛºp:@½RÖ|Íþ<0¼üIþë ^¦2¼q#·áåÑE+Ôû]ð¥_ oDÞ^ o¯†7tmÃÒð ^6¯áHó;¼_ /º:„z[ƒ¼öU4™^¾™ÚW|ïðb*ÓË‘×W|o*~²é )Õô² [¡^D)Úš^ޝޡÞKÑÔôF(·è¥ìÔQ?ùQ0ì;¾ÇB9Õ›*ЦÞTaZ臨ŸÜ" ÚËW~—ÌMÔFH¶ =)ÔO B‡²‘ÆÄþÂ>2±¼Ô¸%ê§$ÞŸÜõc‰Á_¼2F¼FäµpåÔØ—|?ŕꂕ^¢£¨Ÿ4üÁ¾5ê±PM©ñ ³@ µWœFaʧ/ùžï E=˜R7¦¡… ӈɦ¡ ÓÐ…)ÏZ£èõ|OåZ#¾Ú˜² „i(Þ¢”?ü÷KÔ)ûÔ»ÿƒF=ih£§(êó`hú±ðZû¾à{ú_Úõˆ%DkÔgú†ïÇÂË/~Ø™R!}ùÒÔ¨'·ƒF}±x@%@Œ²^P×ö€ªªeÛxþgÊ$Þf±fÞfÑ"@9 þ ~¼V­ÌΫVÖÚû,¶§Ý(-"”HyÎgK Ðx ]€rY×*õ l ”³Lßò=i(AÚ‰R‹ ¼©UêÉ Ú·|mÐ*õ RŠÇ×ÔV©g(²ÊÿºZ¤~Òü~©ÇðK…hÜ°í¹ž‚³åDÒw|›` Äh<õ,FÃ"DCØöqÜD‹ÔO HUGQ?–¸e\ŒFL¶'zþ_à‰ýóO3J!øÊh‹Ôgª:ŠúLU‹ÔcAÝ:Šúbñz”¶å$×"õ°Ãï1£E=i< Rÿë_©ÿu¢¨yœþáÃZxÜj r®–jÔÍÛWYâ­YxøS:¹Å¯@×4Õ¨“†+éjÔµÀ“ÕÀßrÐ:57­mPÿ’¦þZÐ5ð·uÀO ü±ðøkA­kàon¨[ üM²jà…ËšøkAn5ð77x¿øû¥øžø›ã»þZ¦Eꛩ†þ¥åúê­¥Òü—žè(êKuõš@C‹Ô7“YeË~,°©(zšÖs+WÇ}Ç÷¥GZ¤Þ†båM,wûE½ …îj‘z3dóÚ¸jüE-Æ@ßñ½e±†/n1/µH½ŸL“É¥˜ûÑèò/©~†ú†á _ôb”´H=ò§½¾ãû[‹Ô› -ßQÔ[C`Ó"õv µNÓÒ±é=‰Ôl:Šú1ñÔ¹EêDz²Øøj£ËyH䯽à÷E=5 zllÙ@¢–0³psY&°„A¸Ò XÙ¥F55êçɇ0e‚ô Q?Yá;> P¦žÅýõ´“ #&i°+¥¬m$ñ)ö£,ÞHb®ü$$#¼\LFä³  ‹¨ YYXFìµhDr Ìèh»OʉòžñÔ²Ø ©Óp27ÓIASxžDêgÀ¦¯ù sža-ûíÏB4d1ß#F#×ýõÔ€; 1½mF)á›Q–#F£uÌ(k FC/£\«uõgÔqÔcA/tõ´Åp»P¦‘ ¥RÒõLàñ(ók…–ûb'zz‡ú²"hzL!z¿vRüª×VŠÕðÊ”Çñ}Ë÷–ÅTö§$¯5êI±]j<.^©Œ´D='hi‰zJ \¼.e8ÄOö¡^{]¿5x]ʸâÞî§þçui6{]Ê¡%êí~ª¼^—†6lrãÅk¯KùŒBKÔ[%Ï»4™ÝÈðu€þj‰úVÖ‹]Ì'}É÷¦¢Éì’¢^6Xù×ò”ÍûZ °¬»ü®×® N°%ê©Fôò‹^–ez#–[ôƵ႗A®-Pϲ¨ß ¾Œ Ž ^º'-ryöÚúô“]ˆŸâ–'…ýõ“†çµ­O?ÎcA=iúô¤¡EȆ¢,bé{ú ê'7¶¾ä{jÀ>2®\Ô}3®¼ õé!ž¬õé‹E°†¦-V9ÁuõÔƒ³åé±ï¬0ÈZž~Ò„+RàÖ!Ô—4â4‚w…i\3.JOoPO9¡M)¿G”Fص(¥‹ïK¾ÏÌwõ¹E¿Ë³†¤mJáëú’ï'7J¦}É÷0;„ú±p ¥ñ=‚4úTŒ2ü¾ß ~Ê ©YŒÆõßö§ ±/ùžZ³Ä(¯ònyúü¥-O…b¦¥Êèõ+%K1ЦîK¾·§§ßXþkÔ“æ N?<ûÄéIÂ4žû[ÇP_*à™Ÿi¼Á¢ ïyŸMp;–úa>™™×«ìOù¼)¤c¨§ °@ïG¨Ï êÕ*¥nÏ÷è6/UYiáÉåR‹ÓOùœ2;„ú±„À(®þZà™kà_êVËÁª¿u§5ð7 F~ üMƒºÕÀ¿´A üí´A üK j௵®¿°]Û€bgü5Q·®éi¿­Ðâôš¨ƒ¾8¥*\£SQì4©ÇkT#ú·À~1«Qàö]/ZùÉÆ5^c6¯qí¶å™BGPO5â:q#‘Æf–Ò`GPO†Ü±~4µ¡[¿°e§˜Û¿c´µ8½ÍK“É¥Òâô¤ŠKÈÍ.W< /Oâ?¾è¥‚iz#¸úE/z¹Åéý. ‡§/`·8½&J–/zÁa?@½eÁ-ôß7“è¥ßnqzQ5»¬Ã ]ˆ°&—i.‹¶lUCË^³Lbb©s X&®¬—`e3 Õƒ4ý4% ”tR æB)úê§Œƒ4ý(ó N„& “Ò¬¸<…OFT`M%Õd»TŠÃ‚’_)&™—¤4l"¡&߀üd?zP¦üÉN”Å‹È+‘§ðééJ€ß7|?–Ð’%½ø'¹OÊ}Ã÷äÆ>³ó¤åå;3|zr£º(Ïš¨Ød|6œT™Eg(Ÿ¢“çµ­LOÇ¡K?‹ÎPŒEç)|úÜ Ÿ…gܯ->Ã"@ã©m_*D#79Í“2=#”:·e[›Q*úr›Q1-*FãKÅh„·‹ÑèS1(ˆQZ¾È{R9heú<Z™žÑ/ÕÊôη }Ã÷Ùö ß…1­LonTpíB¹kezR±:zzL!?{j‰Þs;=É»ÒHåei ßwR==5Œ8h{Tæ}ñ$OÒÑÓ“!ÏóZšÞ²øï—¥!u{Yzzz[ž¿Úßá>¿Ø±FíY#Êøµ§Â8ìèé©E{UÊÃ«Žž^4(ƒ]^Ì×ÏOo²†7. ÁKÅõ/4BÞ…'‡[‹ÓOvÔ“=ãÄé' 1úáùži<Ý£Z¿‚´:}ö+:}öEýõŒ6*Í¢3máù;Fh«ÓOnÿ Ê*Ý~zÊ¡–*>Oêô“†§æýõ´¿Ç=ÛZ„þ_Ô¡Ó—^£ñ'€Æ}zÊ„hèýö ¬õõ Õé©5Ëñ,OÅ(gÅV§'7j¶fÞ¨C§' ú´C§‡QZÄ(ŒjuúIÃ×ZX71Ê%Z«ÓÃUp1Jª:tzèõ—Bþû_U§ÿ>÷{ó¼þDZP®F] ždaÛU£^ÒT£Žå N¯…s³Óð?[R¾|O5êZÐ{5ð·uð¥53…¡C5ð×’êôZ[ ü­¾´þÅR- ¸þÖ¹ÕÀ_ Z§þæjào|O üKÿÔÀ¿ôi üµ Ö5ð·øùO?ÖÐß6¥¦mLC#­Á?©x„Ý¡Ók¢ÚiRyºÕ¡Ó›ŠÕ(°ßE¹»<À¦¢´^.`Ml ãÊåt‡NO*F†tèô6 huúVùš«ÖÄTf64mC"¹©®4¶nnCZ7¸cnry¼ÕêôÐ^ØÀ{«ÓÛüÑàE/ELÓËÊwèô–EåÕôr©Ôêô¦¢4iz#•éÛ°M/Ï[ž²8uèôcŠ­ï)tz« Úè²%L.[VàÒ l)Ñ ZJ·B–*°=ˆÓó-´WÊÖ‚õ N?yÑ P™•1å¼ý¢mlH©‘šQŠ—B”j¯¥Ø(<©‚ NÊÀB3äV“IMY`ž^ ^d!‹Kê½r©¬²¨d•%ex;S¶± d^‚’ûQ¶±¨< ÔÏ×G°³¨äî¢êIƒ±×OP?–“@=iØ3"“ù“ÈŒ‡³M&eN‘ÉôýÞç~î'¨§Öè¨K<=,8#˜ÖtR"!õŠÎ°Èkžž >÷\ Ôcá÷ˆÏ¨µňîû½/åØm‚Äž4ÌMŒ²O?›Q榙>$e3ŠÑóÙŒÒ"F£­å<£­Åè)tz¾c®ï÷và%Z ïM±YŒF¯çwææéÏî ±êKÝìACW÷ÜN ¥ê[¼Â·ê1qvïÐé1ÅÍßžÞãr‘Ê‹YûêÉ$wäôւ°¦qñ·j-{ž'F­OOY\é´>½&výkaJ=ùµ¥bGza÷¿¦z ££c§×DUóµ­¢jßÊÿh:vz2ŒÐY“Ë)æëk[…†jú–ák[Eù×ðr«ÓP/†,ËðÆÕÔ†7…~m«Ø†^œò¸÷ëë ˆ¶@½5dË›ÞPòM/ÏÆ¾š^öµ@½e±¯ã~׋^¶¼éåþ³¯÷Þ®‡__ëUføZ°2•é ÚôþBYÔôÒÙ´@½ŽÚµé;¼EoÜ-xÕúôS%´Ö§ ´ûýéÇrzú±„Ú-nÙó==i0 ZŸ~,'}zÒ +úýé‹ÅÈÂ/uôô|)¦²o/wK“€¥îÖúô“5‚–§·[ù­Â5®ð­qÿº`åeg=ýOS UöjËÓÓ«hŸ¾Ü{r£,)NãÖHo¯0f¿‹Ò¸ö[”†¤mJ)ª‹ÒEé)zz˜ç—šÒƒ<ý¤áAjGOŸ‰ë˽§ÊÆ¢4„kQÊeKGO_Ê¥<âú.H#²[ÆEê‚4bØÅhô ‹¥ÔÜòôŒ:L.== ªf”°òôô]1ÊÍy‡OÏ@eš×ùTêÓ3ì3|z2£ ðZ WTG½à‡zþO}z*€)¨ê±°¥E(l?A=IØ”¥x‹ÅŸü½å‡'}.ª;zz³{­XÑ·ªâ“•¾žôÔÇŽnyzškyzÆ.…Dyи9ZtF°=(¥fÑ7a˃þNÑV4,>:e­…'Ű–§gìRLžQÎukÕòôŒ]ÀþÓ‡zíAòôôE7½ø“€=(k`@YúÖ@€†DïYž½}åûùéçK#ØØ‡yzÒ ­[žž^ mFñ¥<=¹Ñrå[ž¾Ô@Œžnö>óÖÏOýÓòôXÌ5äéüUyú8¨ÓÓ§‡½†Å¡Õé P9…(SxÚô“Xûáe^ŸK¡Í~xúgnv¢)MϬÀÏ÷ÔÏÌ„çAšjPŠg}vÌíhªC§‡gx¢V¦§õY1±ùûA˜žÏdkÚ¢ÎB“Äxªgù"ót­÷PöçRZ˜žÏ¤d-çy¦‡ ’“·oõ>Ž›~,Nýäô4ŸÚék½¯6èÀé骲¢3*':¹êk½§ ü·¥éiмâ3ºÁs©~OJƦ“ÁI•Uhb|ôƒÓO«Pä}9UˆßÂò$LEX}2”¬€*k &™DHòó=÷ÓbWŠfþ$&ÂôŒ#&±e1ö¢´Ø‰¦~rzifDT‹L:µŽ›~r ¡[lÒoõÅÞOž¡¶4=v¨è¤ÿù,:Cú¬uÇMO­)¤ŠÏ>hÄgPJŸr›Qk2³ 9[€òòŠŽ›žQÅÑ­…èIšžÖ£ýäôÅ"Fã{Äh\„-Fãw1u3£üu@ŒÆUÜf”ßcF1>‹Ñè91‘õf¹uÜô¹ÝZšžÑˆºõÅÞc¡H*Fã>è× r¶e9žÚÅ:狽hˆà¢”j6=~ŒÑ…6=¦­íJãÖì—/¥üì ž_%Rù„mßê½~–Ýdw³ýiD—¿¥ÌЋÒÁ½› mß‹Ò<÷¢” à¦ç»x®ÝÂôí“=ë3ŠëëkQŠïêk½·)^¥}«÷Ö‚¨¹àb/JãÙc“OG¿¥N_ Ê­F—ÛÁ¾Õ{*ÑʯU…ÓºpÌ­KokÐäU\ŒýÚQtéÍßex#üuÀÊÞxü/S½vT4ÞxÂÜðFóÞx§ü~кô´FÜfýÚQÁ³vÐô¦¢ìúÚRQr4½!¼¾Îà»Z—Þ1ÄC-Ñˈǎ›~…È,vã.p/0Œ;núÉK§Ž›žÉ‡í n¹ è¸éÉß#jOÂô“†×p~3³ñTµ™e@A+ÓO~§ÀéÇñë"6,–§úýêôÔ›¿6׸$\´2¶¾•éɇ˜b5.`ªñr°H S Æ{Çâ”§1ß…i\Ñ-JOÊôP è¿{ Ë/½.aûÕé'·ˆ&¥§k½‡E–#Jy¬×¯NO­©§k]À)¨•é'à ã¦/¹‰ÑÓ«Ó“#µ¯õ Üþw1ÿ!ˆÑ°ˆQF vÜôŒ*£f”š­%}­÷“kðÃKXοΧRš~r‹‹ _Kا' ¿ÇËÊÆ>›b/êô¥n^ O;rú’Æ‹W|Îíxªoö~òî?nÇS­NϨâ÷Û‡23OûÔ2ûbïÌγ~ÊÓC žñað|Y©ã¦§-±öiyz,”8}@ÁTtò?~tzÆ!ÓȃÆ3Ñ¢3,ò ¡'›NN™-Oï±Äg\ .Ê»AZŸrÀtËÓ%â‰=Ó³<Óƒ–§‡7öƒ=EN?i¸†ûy=ªêg§D¶Žòô”Ã6ð1¿ÇGUL#J9—¶<=Ä#·ú ¹µ<}î…–§ W9=øœ¾Ø{rCëtäô¥n¢”ìôÅÞÃˤ$±åé©›9ø³<ýÛ/Qž®ÿöïþß¿ýJÙøkášø“,\|–%þá·Ô•…ßdáÇwY¸Çÿẑ`—ÃÞsnp¿ÿÞµ†å?¸Œ‡ÿèrBžÞå¿ÿÙ¹Áÿ÷(ù¯×4ÿÍià-þûµçþ‡¿ßó?mAÝþ—ËAšÿí4«ÿçÚ:ÿ÷Z·’§·á"Ú”†É˜†¦ùâ-T‘Ó[V<´lRyô^ò´ 34«ÜóUä´•Пn'´`EN_Ë2¯Qy7j›ØxNû?];¿äiUž¿Zn:>¾¨¥.ll#0ÝÜÆÒ/p©þ¿È…Ï)yZ•g*³ËcÛŠœÞTa2½¼ô½äéMÅçºØ[°QP4½,«ôiUž¥é²Lo覗çG¥O«†,KôF¶á¥,v)ÒŠ\¦·,^ÔÒ f)ëŠXxÒ?Ä+ ­4ˆUŒÛ?D*SˆSVW”²ºb”hˆP~‡ød¢°Wд<+tc¡‰ù$0)´Kd%()¦ ÉÃ…Þ™½€„ÅÞŸÿÉ‹Î(ÇtÂÍTÌô–ƒYô³ø !W€F»‰Ðkí2AbÅLO "e­Åhô¶Üfül F£Öf”ò³>£!?›Q¶è•Ѧ·à K˜ÞÖ%LïhLazÓPI£¡îzROazrãþ¶tiù|VNF¢— e½½‡ž½åê¼"¦·~˜`ê:ïµ`tÕmÞ[ó¸õګѸ8ÜÞ”}ñj4~ðj4´b¯F#ØÛ«Ñè*¯Fùßë¯F9–.½ŸÌqVºôšâÁó×^Šj¦g|›•.­²ÐÇ0­²Ð]%LߪQ·y‹4ê­¯]?ål¯FC³~í¥˜ákãŸÂôµòf—®â«ÙXjï¥Bbö^Šg0-zùGÀk/ÅÓÓ1â¦÷fhz#|üuÀ64½ñɦ÷p›·z™Õ¸ï¥ê¹é+6¦7”UÓ{xnú–a ÓSÒ7ÓAÄ/z)SŠÞ` ”.=EÅ«Éb—bdÉÒ“&.˜–× ÁÚKJÌâ–˰’¥§œŸ½4à—ziX¾™Y ÖÞN±µMlD®›Ø¸V]ÄFËXÞ­QÏMoŸGL»Üí!dz1.¨.ô ÿˆªéµP\¬|±.ôÞr(ñ Õ¿£_¿‹ÔêA˜¾|O Ók¡ô*N#h[œ†$*Nù«z…LO9‘›9¥\+N#`Ù{,ŠÌæ”ß#N#ÈYœ†˜í%,{ÁÛ,°]!Ó;ºh¥ñ†¸ å¤%Loÿ°ò©üé£.ô¾µµMazË¡Àêʵb”M ÓÛ¨u…LïpÄìüãuª ÁÒ J©×C€ ›žrB£tô6}KóZ nb”Uó€MíùŸ jWÊN¸L•2=uî¥L¯yÙ2Ϧ(?Pææ5+»Z€Òà)Ÿ™‰ÏÐk} Òôör«§—5|N½8½ƒ&(iz-”*Åg¼E->ã2iñÉ«7*pzÇËŸýÚ`agøS€ò¯¨R¦§ xÚÚû+6Üõà§å’¼”é‹ÛûiDÙ f”zu¢¥Lo9TÍÅ(O±~ú(Ö“Ó7)5žºÓ{Òij΂”!ô¥Low¸R¦·ð=¥L¯…j¶ %V¥Lo,BJ™Þ ­+pz-èŸR¦Ç‡ÌëNï-‡ß#H_]B™þõ¯*Ó¿Ž2Íãì¿å L¯…gBJ˜ÙÂí‹,q]‘kÀEß5M5ê~ϵÕ¨“†÷þÔÀ ©¯?ž3ÔÀ¿Ô þZÐ5ðÇÂó‡øk?5ð×'WÿRN üýRäVÓ`<ÔÀ_ ÒÔÀ_ FW üm7ôB ü­ú´þ¥ Z™^%Æú—Ú}¬±¿•`ªü· kô¯ ô±†ÿ–Eµ¸Æÿ-Ãrk¢û‚M[wzo*nZ™¾4{=9}5؈7±¡g¿ešÙº -_žoeúÖ†/láŠêNïk¾Àeª¹4]®7êÉé-‹gœ­LßzÙô†¸kz¹&nezGæÎ œVCÑ1›^zÙ?L//«¯Èi J¦—ýÕÊô"j­¦¥"§'k.t™BàÒ l) Z„,¿RÀÒ \™•`…ûC¨„é§¹øå”’¼ eó у0=]‚àsáɆb®Ð¤ü,0ñå­K?…££*hzAI]úIqÐ¥ç;hyyÓÔ¥' ÕgÓÈÜìJù1ÂÝøI8²]„# 7? G¦Ž]úòâ14fûNÊßrt>õÐôv%ÿ1“d-(©{¶.ýÔúðÐôÍ".# W`†¶h2© Mª¨b3tOùKÖú³Ü%øÖ¥çKÑn­K…ëbÑê³è ­ÔÎ’åØ[²ñÉ9¹š¾ÕM„F „h¨Âr™Ñ¢b4,b4‚àÍ({NŒF¨» ‹˜QjærÑnb4ä?1Ê?ð[—>…Ö¥KÈöŸ¨Û1Êv«‡¦o¹‰Qy¶.=Þ…rV½3=¦À%U¼ôXâ mAïE{-w†{-1Ö^‹†–íµh< -P£~^ІŠì¥h\þZŠR‡-E1ø¾Ü—¢u÷¶z„f{)zxdzSñŒ¾eé]в†¯¥(·Ú^ŠÒ·,½KQF#¿–¢T¬_Ô²¬×F S_=2­ÊÓôšú©X¿–¢Ôž_KQª­žýñÒª?Ùð†ölxãzjÃu^þ|P÷xo58E5½¡=¿èek˜Þ˜_ôdé]éÓdzyýB=2}íJo¤8éµ,½ôR‰7½qÙ³é “é ÕÕôòl¥eé©'ùºÇ[&J²¦—f­K¯se¶éå¯Ë­LÏ cè›à ÍÚ‹ª¿B—KšV¦gZ¢š-pÓú¢?/Å[™Þ>„Åû)ê܆–ÂÑ7C/ˆ ÚÃUÞS‡¸3\ÈFˆ³ˆexHLOnñà·x¥*ܺôÓ œ3+`z{•J¥`e°]]å½5À˜n]ú)ç¤KÈ}¨¡X‹ÓxÈX˜ò$à»( }U”FQ5¥˜}¥´š^~1 }÷ö KóìQW†{ÛÏ^𾟈Ñпµ*ˆ Ƚõg9b4ž“£ Z—0§VÀô2JITŒò‹b”/TÀôöÊi]úÜÖ­K?–x‚ÚΔ!Ûö¥h/W ½XŒrƒüCŒrfn]zêÆr¼`ÝÄèA—žN@Í^ó?,W?ZÓëa1µ.ýƒ £uéKC Јs üý©¦×…±žöÙ”I<ç3‰§|J¥â“½V!Ó—m]zfÓ?7tËÒ3aQ)ž!>û€B²ðŒw«…gÄR OþøTÓ;xYŽ7XÀ³UéùJP-K¯ C¾"¦·$æçƒS*g> 2îs–cDùEb”WÄUÄôbM%ÙçÌÍç´øà K£bAJ‘¤ué' §²Š˜^ Z´uéñ ­K?:øÖ¥ÇBíW”ò‡ºÖ¥/uóDO•Û”¢O[—žDÍ\”òWŒŠ˜ÞZ»E¡Kø«ºô‡¹Ð›Gé~ ŒªF ¬FÝ4<Ú%.u’%ßšVn\ˆ\ëV:5à¡u¿¹U£î÷€àú›ýZ#-è×ø—rjà…§R5ðÇÂ¥øû=èŸøÛÖð³5ð×G_ÿR·ø[ô\ üK‹ÖÀßïAëÔä4nÂjào9è…ø›¹µ.½‰0XëBoÕŽª¯1+¬Í)ÿÜíˆé-ë Koë±5þ·)€P]è­2•aåê¼uéÍ’µq Õ÷Îk½5­®góšØ¸ÛÈòGùŽ˜ÞÖ™ m¨¾¦–ZÄGcñÈæ–›ízkún]车x¯ÛèrÀµ.½-O¢^ðR¥7½?lz9ì[—^æ1Z—ÞaG­öE/ªÑºô“Š´-Kßò{ÁKqÔðríSzo†œ8Ä.s¹ÔyÅ- ¢–Y‰YD,[M¼² ÑʬÄ*Õg‘Ê┈Rv³e#ŠPVW|òE' b“ ¨È¤.+.i•TYÅ$SØŸRý‘§xéõÁ©K/Å/}I#ÑöŸ„#5öŽŸ„#UqáHƒp<ÈÒO}Ù`vž¬ÖkÆÇÇÛuRz‘§pé§ôJu÷Œì¤6”p-K?¹ñô¥Ã¥ÇBÄåáïI‚µÈ<…KO9hƒÏb3$fÁaÌ‚3j o5³Œrä+ù#Q‡KO­ÁAÝã½ Û—>·h‡K¶,}±ˆÐ“,ý¤‰g1·u‹ÑŸÅèI–žrø¥r›'YzÒÀÕ~6£ÌÍŒÒb×ÉÜ®Œv¸ô¹çZ–ž¡ÍÐg¹Ï¹Å(u°–¥çK1~Z–žŒZ£ü¹»eé' ·–­J?Æjµ*=xкÄ{-à­^— ר*ýäö+/ÆéXé5a w°ô´)-š×y^^oKoíØr¢”D_^‹P È/^„†€ìEhüoàEhDC¿öOÜ-{J¹éi¤Ê~-BQùºÀ{SÅÍÉ÷-TJOYq#¸¡q#´§ü¸Ûùµ ¥øéU(E¸¯¯-Õo¯B9‰|õŠsRÝà­6Ò(½ÍK±ÚäF(·ÉÈë×®ŸŸüÚöSž}­Ø•^„úmz¹åýjzùüa½,­O>(ÒÛ¬¡éØð×öŸÿ¼èeó¾è¥ü:@5êeé­<ÿVé@é­<Ò׊&Óê·éån¨éu]Eú1ñϤǃ¤ÇÝ¡÷¿ ݈â°Ë¥ììeº£ž–žrBÄö>Š5µõ,hé-êo¹vàÝãÖ Þ›*þ³'Ez•‰XÎp­HÏ Ç?ÄktžpeøR+ÒÓáTë?ÐE­HO ¨¬ ÕxBZ¤†¾-POŠôSND=ËÉF$®WhѺÂ{j}R¤ç{¨à^Wß…i\/.Lã±lcÊõ~Ÿ-*LC)¦¡U‹Òx(ZF\¼åe©u…÷¶ÛA‘žþá‘· vÌ(ûÇŒRs£?­HŸIlEú±ðh½é‹ÅÞßÓ‘ÒSNJ+:-H?ʱ¯ƒTdæEÜXëÑS õu/zô¥j"”U ìOþüÌë @ëÑÓÎøL;Qf&<9_üð´ÏÙ¬éýN žr¢<øáYŸM-@ãwʹ¤nñž*p•Û’ôS¹ˆõ„OýT€Rˆô¸}(3Ó\Ï?ëé©ZX<Õ³Oaôþ¡‡+¼§Êš­H?QÜ>¢b؇²nf”Ò®OÐÙ(=ƒ”ò¿O˜› k¿}À4>¥:Ò3J(½ Ñè!z¤Ç#ã{Z Ú­é±Pôõ*-B4^¥£¼u¤é)‡’¸OÐn(=i0´[ Óø€_jFéßþª ýÛ#H³ªQ׃lY"¼D–øÜi¸³q9\ : W×rªQ/µ®F ×Õ¨cᦶ¦¦±p®¿å€Óø[(©¿¹áKkà¯ã»þ%·ø[ŒÈøkAn5𷤩¿Œ”ø›Ù;¨ƒöŠƒzQZe±å½ƒŠ0hï "ûµƒ_MïáEéAð"-GŸGj«Ñ3î)Íݨ¹Ñ á[è2ªµ££/#òëkïOÉÔäFl­Ée-Z‹^)€šÜ¸üE.Uå×î mÛZô”!¾Þ=Á/´½AùØàƽÔv¸ü*qË€Ý~Jân5úbñ¢€•³œ^¿yEÛÄF‹Û߯míö·YnBõkÏУŸÏ¥>ØzôŒ6«˜Ù…lD¬ŠØx8ZÀFTµ÷UÔ½±¢º-Z)5u„ô|)Õ`±zŠž4à»#¤Ç‚AÑzô„.ï›»ÇBÅÕ[}æfP™›W¯lJµ@ Ù ²ÞðS §'=úùÒ¸½\”žôèiQ–#ǘQ¶Ž¥EŒ†ê,FIbëÑS7Øzôô)EO1Ê?W;Bzý0$T3šzô“„ ¶œ)5Òëֿã×Ë¢{RÄ'K1žH!:1p~¼¦þ ޾ÔëµlEo­RŒ~2cùÞXaØ´½å3‘(ÿÇj-z P/8RôÄæô¦wVT¯»ÿŽŽ~Êá"¡Ã£§T'Í&k 6O·vÏh§zl:ÑØ}k÷4-ÞYQó6žÔaí?™›å®¦ƒ£Ï>ê§ý'8èK»'ÍŸqë;»7VZ„r#ÿSî“[§ŽžÆ }g÷”C |fÊxó¢ŸÜ¸¯û)÷yº³{š¯¥è± Ö-EÏ÷PÔõpëØè©-žâ™›å¯`}g÷Ñ–¢§nè얢ψöÝ“z¡c£ËëXRô¿üU)ú_&6_[:ŠÔÕ¨c9HÑc‰M¾sC{W£n9܆¸ôx5ê¤á®°uë~ªQ·nlU[PNûMƒÞ«q©Aû±Ð—׸_ Ú ÆýÖmP-w5ð/5¨¿äV¿_ZÓ¤=žÔÀ_ Z§¦¦->¡þ¶,57í—"·–¢ÇÄ¿CZо”Ôwvoõ¨m×àß )`×èßT”½Mj„2×ø¿tSÇFßjhX¹GëØè­!«Q>`L¼ª¥è1q)ÛRôÖò°‰Pf#Ë“÷޾}²¡ûÁM-÷²-OfúÎî§,þ¡ÜJôÔ‚p‡F¯‰Mhr97vhôv14»(nx¹Wi%zÛ‰ ¬á‹¾ /e’V¢·†Ô”_ðÂô½­Áj¼àÅ«•èIÒ¶áe-ÄîAŠ~r;Hѵµ4ˆYD,Üâ•ÑJƒXe«ˆTì_¡ÎS ) B”ePàù‡ðäwNú-é§Ùi˜P…%e]AIñZH2ÅË›B£6,Þ8R×4%ú]‡FŸ¿Þ^ þ“h¤®lÿ‰¬D#›E4Ò`ÏÉ&6Ž ŸÄc< - éÊ:2úi–е$ÛXLFœµ ¤{ǵPé–¡tšKôÿgš®ÈŒë˜…f¨–b“óW+Ñ µV±yŠŒ~ÒD4µ*e9” µ÷þ”Žå?Cn–ÿŒº шUöÞÿ DÏ÷Ðâ½?¿Çg¦”¨}hÊ4>5!-DÏPDš¢ÇB‰Qþ“ÿLµ=i(xÛÒbFY1ÊÝU ÑO9Ü­µ= Þžãù=bôE"„èý«Bô¿NL4¶?ü6þ²]:–8’…΢uÒðt±us㘲p|W£N²]ºŽ¡kšjÔ­Ú»þæK üMƒrjà…·aÕÀß6Àx¨¿mñ]Ó€Æø[7¤©¿pZÿò=5ð×’BôÖ–ø[ë¢×‚45ð·ÝRˆÞrÐÖ-Do娅èÍ’²1»§kð_jÑ1Ñ—Æë˜è5Á7}¬ñ¿•§éÅ*7}é¢oeW.K[ˆÞTÔ^ïÀ~4±\|4²§Kº· Y–¡= ÑfZˆ¾ehnyZÝJô¤ŠW¶kUµ­Á–¡KSMZ·jÞ_1°:&zRñˆª•èeˆvLôÖÞ×ôrÙÓJôÖ#¥/éÞ ù_ÑËÏR96½ìåV¢Ÿ ¹ ë˜è- ªØeD.ÆÈâ–­ j)®ŠYf%b)vËDzV¢•yXÖJ¤²Vâ”ò¸(e 1Jƒ¥A|Ò :)]‹M*˜"“‚¯¹„~**™•˜¤*"i0´GZìKY¾hĈø$)ìÞ`ì—£ìÔ¡ÃA‡~ lGÁȹÁøÉ®“…ˆÆÓËÑOñ<çn!z,üÕ@@Fy ‰žÜø9b’ÿvHô¤aÛØc¢g> KŠ×ŸÅå)$zº>¶¯èžP6š!‹ÍøÓRlž®è~Ê Á[lž®èž4èí¾¢{¾‡áÉþéè—-*oò¬ï¢,Fcù/FCn–ËŒrÄh\‡.F£Öb4äs¹ÍÏÍ(|0£%ŸÅ(kÐWtOÿP £ñ௜gü¥+FOWtŸGp_Ñ}±ˆQ^áÖBôdÛ¢yúŽî'Qdç•(¯ùk%zJŠ5¦ß=©èHZ‹S\ÆíÝÏv;2zRq$·½eaÎ蛺·òT°_;(þgðÚBQ÷J”ë׎ŒÞ²@_kÑkbŸ¼¶Qð«_ìW#¸Ø+ѸWÙ3~¼ì•h„$¿V¢Ôl½åZ¹ßŽÞ–Çài-ú@kÑË.¦ŸÖ¢7uoï£è.;2z3d*Ó˰ԯ¦÷VãE/34½Ñ¦÷¶¡W¦ÌOð†Úkvã ÅìF[˜Ý©ÅnÈÞF7 ÝßùKÉå5P}éV£·‡©ÁšÜ¸4ZäþŽÞrô“öV£·­F¯‰º©¸e„l‹ÑØ;.z*’úŽîÇB«µè±0˜*Ùh){åJX¼òHµ£¢ŸºÅSו²\kÑëãÀx_ѽÍÍî3®3-F?©âáÊû@:&z:‚p‰ÖÈM°ò¯©¾£ûÉ/@|ªq§µ÷UèÖ~5z:ÐZô’މžŽ :)NC§¡Ý Óˆ£¾bÚ1Ñg¾ ÓÐn…i”cL©  ÓÈÍ;,pÕZô¶¶W¥,L£OEiÜ-Hã÷+£ßÅhP%FãFv1Qª§b”²c¢ŸÖáâ¾c¢K\µìeå[o±R‹žÁͪy @õRˆ´è¿)E_JyMþH㹟å{ê8? (2ŸT|=ë³á1v^±²Í¼»Bùö¡Ô•E'uо¡{—®´½&æ'>¹û!>ÙÞ]Qªñî ¾Õèq,h·‹žº¡w:,ú±°ÏõÔ4åA¹!k5z*ÀÜ„gè­ö To¯´Õèaši®´Õè¡Ô[hÄŒ‹Ð6¢T°_»ª?óÖ7tOS³E(ÛMŒòà¤Ã¢ŸÜBw£q§¶åÿ ?M(Ñ¡ü˦ŸŒžïAšV£/R¡úÉè' w­F…iÄhèÇ>¤¢~lF™›eo·}X= ¬‹Žïý·¿ªFÿmÔhÆøm,që¢,q f 7ä²Ä&N–x¢Ç5@«V£NÝâõ §I5z¿‡ÿ987̦5ð7 z¢þX¨»×À w²5ð7 r«)§þX~EÔÀß6@­kàonhƒø—>­)§þcá#5î73 Sã~«§Tã~›€Ô¸ßfCn-Fo"*Î5ò7%ìúcâ}A÷¥æ-Fo;°5ú/ÍÚbô¦b5Œj(³åö»XVy€mAêïåÆô7–e\ KGEßZÃÀþÊÎ,G²WꨮîÌ dì5û>s9ÿÐ ÒÌãÑõ‘ß„$:õ$—Üœ¿;KŒžRŒ|åÏ*: {JQ§¾C+1zÂKA?Ø®® ·Ü_)-z*d ƒîʳ»Ümÿxù-Wbôt%†¶ÄèanHŒ¾À¦º/ˆJŒ6^Äè1Qq~ÐK3ôò'1úTÈ5«Äèc¡F—†€KßÌ-dj©9›Y¾´L,«2¯|zÓÊŽ «`ÿcP¥Å¤òáÍ)¥¬+¾ÒÝÍŒ¤}Q¤»$Vãù¢HŸ2&5IƒIƒ'UjȆQùd$GÑ}¼b 󈎗}JPÞ54Gºk]¥E¿·aãÈ62yòAÌã’|Íã:»Û<¾Ý}\¦Ä ¼ècY9Î&rÕæYsÝ2I“!Èœ ô$G·(#9º½¦ÅT®S–åÊÕ5—o'tw;èjåE¿ÇM't·Ð~6›Ô‡tcô)³Îû6Ë7ã¹Wó¹ÊÐu/´ ]÷vÑ%›Ñ%-›ÑU›]ÒreܱðM{-SAm¯×²…þ*¨]†Ù•5ðÛÂ>ªßîÏkà Žªq?®!l5î/•Õ¸o Jû¶pYUã~Ê jí4`Yã~Ê`à׸¿ÔVã~‚ƒÚjÜ_ ªq?eà[û)ƒèHŒnWPfô˜¨–Öп4%1zÚ¢îYƒL¬°FÿTHkø 3ªŽè+ «+á·f€.ÅíΟ¡•¡2£o^—&n`?ð#ŸÄè[§„YNû£Êå¡–‡ÈIŒž®‚:¢{Ü ºp—ó!w‰ìAwIØa—ßÓ%Fß8|ÐKM1ô®‹¤C/w£/mIŒõÓÐKIFgt_:åcè]š^îl%FŸú¨ú]*¥&ÃG™Ñïu™Z6bf©R›XÌ+«2­,aVi0©|sÊ6L);ÌŒ²De ([7ž> 'å@£ù"D7,;5ú(ÇJJ×FòEˆ>UÑ`é®adãf‘%Ì"W0™D1\•=sÍÎŒ~¥TRô{´n0~2ŒŒ–a¤Á0ÒpƒQiÑíÞ4¾ÝÝݡGÖf×)Ü™/ùK‰\ÉÏFòí¦èãÛ[ZôÅb*—j,—Bí‰r©Úsål2—Åh®$^³¹”VÃÉ:Ÿ»û” oÏ”+¢¡“ú}Þîü /wZònˆŸój§åñfÿuH}6£/2ôyP—|ûø\Š2Y¯ò)Í'?£þŸ,c>× ×æ“ç(ú<ÎJZÎ[=ýÃ|ò*ѹkí?ÌçòÍ|®ìtóɨäîN`Wg¥¯O¾(¦©Î§!þìöÀ®tÕ| C9Ð=P£4¡ ‚r Ûª±FNÿÌnŸ²]9ÙC)’f·$;÷ã°|EÿHv×ÙíSBÎvŠ˜Ñuøy¾Fñy²0e÷d]Êî1£+«ÜŒRfSôåIÍèê…løƒ¼çi1¢+CüЍdçãõÈÝÊÁAq“ìÜehÉ)ôö?²ïg™ë<ª¹ßç*ÉÎïóŽdç>`G9Ðm‰oÿ«²óïM½äoÿ<~•¶ååDî.C¥§‚:µá™*¨S†ëh[˜;RAí2Ñ*¨S§[8î*¨]†B^ üñdÕÀo '¿øÇÂqû)×jÜÓNû±`þ¯qß~­q?íÓ÷máOä5î§6UL£ËoÊ>…¸§”äðOiå4 ¿ßH\î2ðMâr÷ꋸÜ–1§üœ¨ãµ»ïÐCÊiîÚ(!›Ò%DfEÀ2¦”¿(§¹{ŽeLé¤M)ǾÄåŽ(úç{Ö¨ÀJârÇó·®z~ï9å4·…^gÏÚÌèºî:[xúF);‡QZÌèº <ŒR(£ô:›'ZÌè=oÛ'®ÝƒîmŪ{žO ªæ“úíãÕ¿µåSGJhn •м÷QYè¤ù°„žQ>s³ŽXþ´äÛ#`:)mHZîQ€™@ÒòÅb:—m:)Ûý0¡’–ûIéµé\¹ÎÙK1—=†›¤ånCGÒr[0(¡¹-T(³£Bà”Ð|Êð‡SI˯Lÿ¼}l’²üÞ :]û}ZQBs[¨›Pþž*e¹Ÿ“j§åqR–/íÑ¥>¾×ÿ:H”ÐÜQcÑ¥ÞÑÕN¥’Dù¤FôMYî'e™¬Héu¾ƒk®}jãëÿ§ ]d…R–OmüµSÊr³ó¢,woƒ])Ëm¡JlD9…HYî2xҘѥz›QŽ)ËÍF©”å~R¶cFß ,ÿñW•å?޲Lá«‚:xQÃ~,`®‚Ú–õO{ÊpÃeË:•ÇN²Ôngýó“v8[ÅÂOm`»~·CßjàˆA ü‰ž´þÅëøÓÊÔÀo Ä©?µáIkàOmC5ðÇ‚'­wÓô,5ðÛÂïL5ð§6D´þ¥øcÁ ­þX^¤å M¡” oIËS aPFóôb§ãµ'”1køO)ªŽ5þ/ARFó”¢5Œ‡ÔEk h–´|s#¼ò[¤åñn˜XŠ‹Jh¾5d—|f9SKYž ùÄ¡v¥\[þb¢«ž‡ʽw“ý —¥‚.'IËÝ¿¼ètí1!º:]{€¢)ðòS§š§BŠ…—Ÿ¥-O[¯Äå ¸š§S0¤.7•R—…µ…ÜqùÁÈ—¸| x~4´|šL²¶M,ŸÄ¼Ò_ÓŠ1ýѬÒ]“J¯Ì)Û0¥ìK3ÊÆM( æ“h:YÂl¢Ä'“IíÕ\R4•,a&)LšH<ù'óÈÅEh¤¿·>4KÃÈÊ #ýÊ$ŠªÌ"ë'³HƒY¤¿f8(ŸùðNwÍ"Ý5‹lÃ,²„Yd ³È縱øÉ,²×3W"ˆf‘%Ì"ÅÄÌ’Ðp3GÂ`)qšE2;¢*³H-Ú,R°4ŠèZ¤ý:ÇIY~7˜D¶q›¥,ŸªèîÄÏ&”|6‰ì“È ÞfÅÏ&ÀIY~r“ÈÆKNô”Q|‘–ûE…F‘nQ•¤å×·‘¤åc`‰Ç†è×Ö¥-Ï Ã‚”¶|мHËG¼X%-O+¬-¯i w]áÜ/pDFIË]ÝÛÎÓæ®/Y`®Âï[")Ë]!ÿ_“²<&†â±Â¤óYaRTÓÎ]áºI:+ÌåücgĶœÒ”&”Ôηðf…¹Je…ɺŽÌžN’–i‰™fvÝÆûX_tiËÍ 7ñY^.áû¾7RÒòx޹LÚòtÛÊ sWtù¿µ—oÝ•5tù¥AêrWøvjö˜(ßÝ·S³/|*yy…ÉòkÐ}˜§B‚tùeãkÐ}»Â¹qb}!w=VÈåo ˜ßñ”¾<ƒdèÌìy*Ìi:4{ÂDá×èRîSþò)´.V6¹¿SÞÍûŸzl¸%KºÁyž‰Ž?öô ] ÌóL4™Û%?f\¼Ž¥2wÌé„'Üu²¡]Úx¦[~qÈÜŽ¯CµÃ캫ÙÓ-AÝâ|êãß²*`¯{®å/M’™Om<B2só€ÐIf~'E9Ì]è,S)&Öu»r6M”>Ã*¥\³Êÿ;”ÃÜýÀç1«ü#í»Q嬧[œOmœô$3w À©dæ¶¼ÈÌmŒ’™»ÖfL×WacÊÉÿ{V­l'(öœ!]‡„gáJ¡ÛŒ®£ÍÍ(Óü~eT9Ì'”¿›Q*‰™Q!ÍfB9:8»ù¡Ò™] ƒ³»¥Ç¬XÙc×ò‘‰íP>geº.Þ4 LÿÒÜJ¯=‘rêäìž (PÞç"¥ùRÆ€2×å‡å·O)ÍïÓ‘”æ¶ðy èºä;€²Ìãk>Õ„òTU)Í=²±TÒ|±˜Ñ•ølFW–¬å&©¹G•Ñì÷é[fQªG†”Ù”?³åg;ÙóÓ’M?fDiÍz`Hù±øgÞölÇ.Ý8R;Ï,ÊÚò²§ÒkHןÙýc *‹¹ÛÉ—(ÌÖ?óY”µå»(Ëäc-aÈKkî íHk~§J‡g ß>Òš» •Þ+£Òš» 8ÖÜ–_çQ%1·Ó|#Êá#©¹¦k™GȯRóßÿé/JÍUàßþÝÿû·„ñã߯ŸÆÂ“x>‹Á/©‹[J×…7à7áå»-ë WÆlÉI+(òïmá¼÷bAmÿ1ža,þ'[øüÏ×vþKÊ`,þ×XÎÿ–Ú0®þ»-|ÉüÔDÿçÕ·ÿ |ûß¶ðâ•ÿÐÎÿMXêÜì¡Á:7Û&ô]©ÌcZ ¬fôߥ2»:öϯWßëç)ÅEd©ÌWÓ˜([ÿŒ c¢Tf?2%ÒðºäØË¯*y*\ªp]Âj˜åbªÎÍž )N–ÌìhPß¶+†ávIÚ—/ߺÄÙm‘ »Ú »\Û—Ììy’ˆ†Þõ·NèeäëgWHI6ôÒÊ`¾– ½Üô—ÌìRÀ¦df@E5ô²á¥!èRï4¹lÅÜRž5µlÄ̲ Ë6Ì+º®r˜ûéù€Y¥ kR1CTsWÞ>šR–0£tׄ²qó¹eæéE(ïf±*™¹KP‰4—Ô.M%žã“™¤ÁDRp4[f6/#ÎLJíÔ4²}ÃH #1ŒŒ£ad‰LŸxÃHw #«2Œt×0²¯ #Ý5Œ4F¶a1v>Fv¢§J*ì†UUsw;¯{›/ÃȪ²…ähYÂ0Òà©‘r²YÜ:óÅ]“HöFb’ÝU!º¥3_†H¥0¿Of%4¿õš/þEê³F‘*wÞàˆ»Qä£E¶‘w7FÈg³ÈÀß&ƺ¢ùòèfsC Í]‚â¡YÄ£Ws—@¥3¿wȳ¸eæ÷^¯ æy*Æq«ÌS†U©ÌÓï|zóÈŒœ/yOSè‘ÿDçËKúù‘ç—Æ<ˆ¯;г¼\ùÚY^®ó¹ çÚ—æ­MåÜxòîÄ:»ÝãåH•¹<$0®YY®ìä¬,W^xV–¼¦äeLj;ê¬,W.jV–+mø±²DW•Àì¶ÐÁu#³Mßu#ó˜ÖÅÁ—9KåmÎrŒ=2?¡Ò—ÇÄMg)Ì6Qõ ¸üÍ¡ò—§e²R˜otVþ²™Rì\ö5à¾ÜË|Â%0³NŽ=Nµ¯™YרÙñ‡ò:ÛnyLŽ•ÀìX€§˜o–Âì u)Ì®ŸŠÂ.g Jav[¬0«Pj®yóÓò —N„\Æ¢4f»ŽÎ¯4fÓ„¡P³]§ž½zäÛcÆ¥ï÷wF"û#JµÁv^ml×éÕ™nù´Í<ÃglyªBIÌ&”Ä<Öff—œ±4±%1w;ü-£$æ›Å¸.é×´rz®Læ© ƒºŽÉnË*³2?%1w~þ¯L江’˜‡9Z*-攟cKbžÚëÊd¾ùöøRúëJ²2™§6 Ö¡”q{|)Em†tEÇ®ÁÍè’ÙÍ(SÍêvæéSÆíÊhIÌ  ’˜/ýaF‚Êdž"¤4æi-ùâ@‰Ìó8(¿‚ý0¢ü‚WÙ̃5%k#ºv³—â“Q~z¬tæñš10¢LG©“²Ç7FLjòr–Jgî2\¡”È<µ1nÙÝcZ.‘ù ÊÚŒ(ð?²låód[Eòêçá*•ÎòGñJhvSðBJó .£šmb©À».o¼L‰¨„æ®pýƒdv¹·¬ã²í4O“KEÙÜbäWFóÔEØÐ2F–‹q-­ù#­RšÛÀƃ*žÐ bm°_ ) F”ÏQ‹ª÷ªŒ'7œ”[&…ÍL«ÐHÍ%Ü•ÖÜ(£D˜ÄlU9Í—"’þf.¥JjѹŸL#ë2Œ4FÅ0òÙÍ" f‘вYd ³H‰Ö,Ò`YÕÅ:/»ã²>ÝX¬”æ÷ ©¹ç"ôºYä“›EJˆf‘¦Y„»ŸÍ" f‘³ˆ>¯Ã²ß°Ë~Ÿ>E¶ai0‰/Róëü#©ùX•I¤ÜjD“J¤4Ÿ6“ÈÆM"«2‰,a)ä›DÌûŸM" yq3ŠAóŒ¤æ†”Ìå­g‘Ø|ÊP»½ÍŒ›O 8&±ù¨ÁffdëÆ‘”ÚÜЯìˆXYV™KΫzeÿzz\‡l›Ê¥²ËUÆ\R’¨Œæéœ•Jœæ:²û¾-ª³²§Âu ¶å)¼u óŒþ*É’3Ê£¦¤6Ÿ^bšG%3VìÙÇÚ’]J—lœµåRC*ówêœì Ñ’WxÊ—\© gqɳs%6÷à[ÊfÞæëë0ËÌ0‰ÍS!H—ØÜ¦¥CggÄÏÖu³á#?vF˜ˆ$6,õØ¡+ë´ì)µÎÄ·/w15ô"£õÛ@6Fü ,µy&Dödæ×u›v&Ø•Rÿ€—>àEwImžb4HmnÓJ ~ìŒøÊgv) ©†wåþ†]þîR÷1»>¼ëÈlûþ"7·ïëÂè°Ë]“äæ)Å _¡¨‡ÝuDxØ]Ïev_®en/~ißL.¿}Ô¹ÙC'Ï6ie;Üu zÖ¬.‹:— —Êf‰°˜Y¾w*£¹ˆœKn>´,íÔ­ÌS^×ÁÙmáÜ-¹ù´C‘\róûà{–ôÀ¬.‘ÜÓì:;¤ÒkƒÊ¸UFóø†Ñ'¹¹ãF)< Vô\e4{@l¹¹‡ ¦ï™^i1¤ Nnß³¢ÓFtaðøX §èRµ(¯+–ÚÜJ‚(…Á ŠHnîN@¨%7·S´äæ‘Ò¤ýe‚(БÜܵ¡$77͈֬r(ü0¢/3Omˆ›äæŽ(z»ršo¾Ñ•lDy`¯äæÓÎÊO6¢\#×ÅÌ]†ÇgHnîÚ(ƛѕ£mF—àmF9“ÿÈ''öBÞýüz(¹¹CºÎ7¥L|ª¤æ.Äå]ÝÌ<ø ¹ù4Äêøìé;–¹N¤’››8ŒÉÍM)è‘ÜÜe(‡R]hw¤òÓézžL¤¬-)oSÊÛêíö`¥|ç+kË'Qze*eíÇÛþ×¹ï§)å|YIÍ7L麇;KTJî¡”¾= …oYŸ¢6ÉÍï¯ÉÍï3©äæ¶Pì½}ø‡m•Ò<í£$67‡,B)ž_çQ‰Íí3æD‰Íx±ùoUlþÛ›¹\­Že‹Íma6v…´-ë€2[Ö1TWKujÃ,RA ß‚±p®H;˜_*¨]ßh5ìÇ‚25ìÇßjØOÜP¦†ý¥L û¶ðíTþ-|ŸÔ°Ÿ^À“Ö° ¢SÃ~â†25ì/±®a©­†ý”ÁH­a?°SÃ~b€1TÃþb‘Úç`Ë‹>¸eäî?a *±yE6‚î oØ]7DÞìÊÐKSŸm7à¡Ôæ' ’›‡ D^ró˜¨>è…‡Jl¾À¦ÄæcZ¢·á]ÙÕf—í„\:p©Þš[ÊЦ–á1³àᣉ¥Á¼ÒaÓÊÞ1«4˜TÌ)Û0¥4˜QL( æ“›NÌ&‚¨ÄæÓïh㓹Ä[â“©D›OUCC$uÇI‹yde÷>ÔMãHíØ8ÒcÓHƒa¤[†‘R·a¤¿†‘mFØ0ò9 # 7?Ý`”ÚüÞW†‘ F>‡aäsF #ªRbóñв§a„WR›_Ÿãó ÆºšùRÂ,²ñ¼Ø©a†EZÌ"¥R³ÈVÌ"¢%½ù<"uR³HC^æH.6‹lÃ,²GÌ"¥k³HÃÅ:B»Ÿƒ}hi¸MŒJlž% žð±ê„Å4RÏkQ‘Ü< °_+«S´Û‚§—Þ|Š Ò›drd]’µdöL¢=s…÷%D²¼­ù©NÑv}x?(ÁyVV@¹NÑvܨšM±,ÍyB ^Ö™oγ¤a©¬3ù-²NÑž¶–)ëÌ¥TTã£ç~‹òï«LÉÎ=Û±Ye ßÃJ‘HÎ>ê›Ybòj>‰Î—ðÕíÌ®*ÃyúAW†óTˆ9Q¢s›–üØ ±ÂlÖIÎe&¦‰Î3tûI¢óÄÎÜ•ºû—JpÀ]¹ÊÙ ­Û îjë±Ab§Ü%-?6H«RÏ#S[¬#´¯Áx̲¬ï±?¢ƒ‰&‰Îj$:OOR`ÌËÝ/͹ŸŠ£»ÒpkQêÔYŒ‚N)Χ¡ßÙЃ[LùÊož§¥)Üò»šò›gÐ1 ý¡ç Mn醹]B°±]G[‡ZîÂëm£D׳* °œeϦž¤+Ź;ž}hfùcP¢Ýe˜¦*ÍùÔ¶.76°ëüæ¯ë(+?ðIs>¬2Æu«œåÞÙJqîçÁô¦ç™ùàõmóT‡h›b ©tàñ eÌ)Æ‘ç,[qn ‘âÜŒ×:C{,t-Œ²¶L¬,óøb ߈nɹ}£´YÃQ’ó }ÔB)›Ð%Ñfg'•äÜ|°6ºj3¡LçøaB—lB—@BÁÁ|l¢Å„òÓåìï)zÑUƈ®Ã²(g:F{fú扔¯We8ŸXÿ+Ë<&R'͹_7/šó±,û:*Åù”YÝi” Ò?èA e¦®2œ{VƳJrnÐ$ç.CY7¯}ŒnIÎ]†µ™ÒuWo¶ýô-”ÒbJ¹¨s´ÛþÃ)Éùâ›)%‹Êp>e8ê”áÜJ\¡”10¥ü¥åg¶ÿŒuöÿAÊpî9‰Ñ1¤,â‰t€ž&E%8Ÿf–Óf³XÝØ<ž‘#ºNøÎÚµIp> œÒ›;´äE”ÞÜ£ô×y\zs²*¥l<©³ÖÚ—˜ÕuÍcA§Ioî83ù08 7ÿó_Õ›ÿùèÍ$Ò¶p»T!=–?ø‘(E`©veü®bÚþ"T1mËZ‰¥6Œ‘Ši—YTÅ‚¡P1í2üݧ†üx€‘]C~‚jÈÏ“"5ä§L×5ä§”©!?Ñ5ä§ãv ù±À·óãÊÔ˜ "Zc~" jÌO ºô¼4kз…I 5èÇk*›5ê'<Jnh2¥H¶äæ)EÝ0 ò¯%7O)DBÉÍóXT6kü Ü)¹ù ÉÍcBJn>&î'µùXÖ ÏÆ• e6OØùPáu”`ùç´2›§Bzd×qØav)¹–ßfê®fsž¥57xÎÿŸÆ–Ûé?ƒ-?õ(¯¹Ÿjap¹Õ–Ò<½ˆ"¥¹Müö*¥¹]Òš»ƒ_tæi Ý(y\§tlÙJk>¥þÔÖ=ÍSúWiÍóL¿¾8?fŠeÌ,ŸÕÈ¢g?šX>y¥Á´24f•%B*µþ¨xÆpÊg4¦ ˜!}›O$ÙÏF”Êg4ž(!±ù´Klî®ÿõ %6åis‰Æ?y6¥ÁP"$Ÿ‚$‹d"E|?™H0¤ÌæIx’Ì¡0äà ÇOÆ‘?åGzexãˆEÀ'ãHƒidUÏ‘)³È¸{¾df‘%Ì"91‹‰´æWÞuˆö1 Ï¥5—Öüе´æ÷fî*³ù”¤Êl~uYóÅÝL¿†ý³IdHò2G‰‰:CûýÉo£2›ßKä%ŽÆ31Âp#QJóiƒ{“HƒIdسà¤ÿxsïۼøÙ,Rï{¼´­KBóëÄ(¡ù¨ŠIi~/b¹QÊëÈ+³¹ÆKIJó´Oe8oë·Ôæ)Å ó¾æN_Rs—â·nIÍc¢ïYf2ÏMRó”b,²Ì\ z]'O?vF|®¼½—ZÿØ1†e&À“Ö|œçVXÎ]já÷íÑ—Ç:“Á0°ë~å»®Ê}ìPŸÔæ‰;–R›Û´~Ïþh¥Ó†Ü•3·úÊ-6»ëBi£ËÜ%8Ol)(?È¥jr¹Ú•Ö<ü¢5÷üŦ .ÕK¥ÝT0²Ævý2ðXrR¸~¬9YŸ©]>Ú%igKO)M:s‚_9u”öÍjWú}vG<N:sW¸îI~`Kéð1×R¤4¶ëvåPËoYuYóx±ò¨óþÇt&¥ù¸¾$Ùû|+¥yf¥64…Z=>BZ)Í]!_Iu]³MÔÛzV˜ù–iùÊnžçb„\J¦ßÛ%ÌLß²_¢!—»f‰ÍÝ%ì,ƒË,2‰Í§Ì²Û•ö›mÚÑyÚïµ)ÁùX8û)ÁùXÖIÛY®R65±üÖ¬ç® !±ùXx¿„Äæöí×ÕŽŽÓ>P"­¹û§ôæ‹Å¨®öMêÊí5¨ü÷K§i÷Ó°‚)-¦tEÍò°Yå7w;èº:û(FÇ„®2ÙI±,_Ù &”/[¦Ý€å7·åEln àµò››jø¦ã´»6Z²£¢fjB— mB×Å¿&” å7VÞ±]Gc›Ñe1£\ê8íŽã–M>xS~ó)ó;{!Û|ÖfFyn´æY|Õ¥Ícâª[›ÛôL¤ì¼Ç•&sÊ3l”âÜþñ»¾ôæ6qìKpnê¨NšT¶¤çîóÁ¹k£RA·rœ»6ªç®“ÊC8%8÷ˆÀü+Á¹kCL•ã|,ä^‚ó%:&• §º¸yÊЃ̦ôÀ¤ò§‘Ÿ&uiÄ™MÑÊ^Èlб¢çF„µ™Óu¸1]Ó×?MéÒ¯BóÍ*q“æ<Ì£ŒÅâU’óŒ1¢'ó¶§²}ý Íù4CCšs[ø4YÒúT¡9ÿý¯jÎï{›ùEüoo ßjÒ¶pEV12wÅt,ÜÕÙÂß<*¨]†ï” êX¶èÜ–5‚âž´‚Úe(ÖÕ°ŸÚ0ÃÕ°Ÿ¸alÕ°ŸÚ@I û‰úµ†ýXP[ û‰5âVÃ~b~jØ(SÃ~jÛ¢ó¥jØO´SÃ~b€y¹†ýÅëömaŽk ûK ”ã<ÕaR’è<>À;]Þ<&– §e¸¸úhjùבÔ>eÖÞf–x’¥Á¼R®5­|šUêáF•}P]Rè@í™U`1¥/ºóÌ6(FÙeFtšnDy®¥´çÓÿ,‘øÜѧžj@ù®rOþ« ýùX(èdí!B¨é¤nû˜TQä1§Â’)oÅOF“͘LŒ¨O“²jæR*ãyû³ŒÉdó&“r¯É¤_&óE„îè#*&“ÿ$L¶áÙóE„îŽ6Œ%K˜J4.º‘€†h&_DèS‚É6 $µfóHØ8â9$B¿>¹DèwƒadU7•îÜ!á>^툖id+†‘³HƒYdPÌ"ÃxcQ2ô{P2Kb„ê„íW|•ñü>w|¾Î’:aûRÆÕQS¾s‡l^.×}É0Ó—Ì“ü‰O"ô´Å fÍÉ%É—ÇF‰œ÷Êw¾=WÞåë‘Ã)—ô¡g”ÒùǪSª2ž‡HJÍ•‚…rž»—uJzÈøzß1I†žhÀCÉÐã!µ×ÇÂ|*éy*¤) Ï••û`—nd>¥úš…'8ì®\㻬/ìRëÓ¥Î=Lè^Ÿ|ܹ4=vKtÝä.AÞà2ÝH7:ïøO²nt¾ñòØäSñ¶\TJ†(èy°]'sß±• }ÁVéÎcÂH7: ±U¾óå‘u£ó…MéЗçÒ!Û]zj—úX“RR΢”*Œ„èqm=¸e…÷S¢»Bn$DOœ(ò‡Üõ×@ÈånOBô8A¢¤ç‰.Ÿ+sîº&ú±Ñ§²mxy0¿„èÓÔ: ÜèòPA ѧ /ŽWÖó±pŸª“¶…ÄJˆîÚ(AšÚ%©ÚuI³™}Ëz>í,é6‹Vz`bù2•ݵ¡‡¤Dwç±6ãº|3­ëBlú.BÎÊ<*ï¹# °$E·…e êºVÙœ®ß²|ÅÚERt÷6=0¤‹ƒló1`u±sSE¯Í(ITÞó…ªìóᵤèîS~27£ë`è+£’¢Omë„e3ºÄpO«Kî5£<‡EGm¿ÇZyÏDz ÎRï2å=wÜ0ŠþÑQÛï±–}, ¢»¥ú=äJ~ž~âtf9{H‡îRüZéÏcÂø=®S†}P‹ÙZ:ôxˆ*zÚâ?¦Xºñ –†Zþ[¡4èÓÖ’]Cí‹=þAÞ5³ü0 žßAúhdùæG#Ë5¤I_0°üIãc€eWXf9|Ì4ËÄ¢Û¥KOߢ—$L·‰Sœò¢ÛÄÿ¿$M·‰K`iÓ· Ã,]#K÷,‹˜W ©ìèãR³Šx2©Œ›9¥Á”² CJw=±R6¢¬Ê„Ò@¡ ›O> ñ¤!Ó)ª2œ,a6i0™ŒU¸¤Øj,Ñ…Jn† ÂÉeº§ ”0ŽpK?÷€f‘²­Y¤l{Cñó E¥G¿2*eúè®Qd¬Œ":ä³Q¤Á(Ò`i0Š€÷³Qĸ•.ýþ€F‘Ï‘å(ãþXŽ¢«2Q²ýÌ“”¿Ó$¤á¼×a0Žˆ‹¤ÏS¢yåGPùb)âG–Žˆ˜Ò£g¦emy™S§“0Ý¥–›—ù[zô¼A@¦Ò£§Bj±fóÛ2=¢‡¾d º$á¬A—ülF©ïI˜¾ùžEèzâlœxÕŽ„é®pIçau9X—úüx«³û+8’.=^ð7ðÌŸëFa#Ë­’¥/aÒYÜÓH—,}L+ó×àò£ò×€Ëþjp¹_Prôiˆ×Nêîô.kPæï(7z°ÅÀ’(=‘ é±ÕǘSvô‰¥‚íÊdÏnÿíòçËø–0=ÒdžŸdÜ2Pá–qK™¾…÷1ËR¾L³-7à.SV£ëåû®_ÊôÅy)Óóqï;(¥H7ï”N(Jç /ez¼@Oê0îŠ>¾RÑ÷À»4æÀËèÛcÎ¥†w%…gÛà¥K×ùA@ùÑ=Œ¿€»kƒË±/Uzcdn™u(Yº}`ðL-ËH–î2*ÍìºÌ9ËìX•}j{;ŒûX–ˆj^×=ÂÆueu›Ö%›VJ‹’¥üíXÒÇÂ]»2¤ÛB‘Û¤.á5{(Ð#Yúâ1]¾™R~ÖqÜk÷=)ŒJÉÒÝÛ ß³•¢Åò»déKŸf7z%K·×äÍŒ®ìà0 ß”!ÝE;:Ž»Ÿ='Yú½O•!ݾ±LV±ˆ¨n€î2’ÍèR<ÍèÓ³@t$K÷“¢·ut÷=ÈÞ $J–>eøõF²ô¥3ʹO²ô)ó¹<ººM\7J—¾ø`Jy¤TéS†ç÷è<îñ÷˜K»Ì¥Œ]8eìÌ)¿–)?º}àÒZ'r{ Hªt?è–(Ý<ÒÏÇëŸæãcuW³úè’*}s/¯ÿ¥´çõÏCF”&}éåIw¿Ó¿|–b$Â+#ñX¸2öEšîÀ¾HÓí%}ãú;0‹V¦Í)SºyÒ¦{œ±¡Ìªì%Óºò»M+¿.ÿ4­üR,mz†æ§…‹UÝÝôƒÔéc¡(ªã¹ûIlÝ=lyºÛÁèS®ô±p!yúRÆœòý.yºkËžòô¿þUyú_<ÍoË5´…^TPÇÂ:¶ðstõÒNµ-TéjøO®fbá6ôDµkãûº‚:í€íúãÆC ý±Àƒúmaî@ ýKm5òÛÂõa½ªÆ‚Ô›j¼F/ÔȿĭFþ¥L üK/ÔÀ?¾ÂjÜσ"l5îÛ kÜÏã Lû¶ðWc©ÓS…kCºtCCº,5òOu¿c_®<é¶Pê6¤ë¸ç@ÊÃÎtôÄ”nýyZšÂé:ª: ò+ŠÎæž¶XIÓs Î}LëDo³Ê¯xR¦Çu¶dX¹Ò0ݱë…Cë›2=H`øI™¾t¯]Ø•-bWÿÞ‘•4}œàO³J‘¾ô¼´é%\#û?JšžHP¾Ì̺T×PË×’Næî ù]ZÒô@ö"MßL¡v]*j™0£4éæ=)ÓÓú^—AOpYêŽíÇ̱<|@êtWÈ’§Ç ¶õ—yæY~=øhp?ptK¢¾E÷.†–4êéIv—Ñeʽ$ê !ÿJ{ Km1K‚¥^‡].º%QO[¬0ìRß|L¸ÐJC.Ë\#‘zb„Ú‚-%dSKÅÛ̲}#Kƒ¥_Æ•à ètˆ÷yzePY˜Ò`HÙ+F”mPªêÁá5œ¬ê1«Be4šðW2uwâ–©ß †’Bª‘¤ôj i0è)%PŸÆé®i¤Á0Ò+³È6Œ"«2Š,aÙ†Q¤á†âg£È6Œâ‹L}Bò"SKE†=³%ë2‹”îÍ" w< ŒxFÝÝï§-R¿>ŠDêwCfHTe11Œèvá}ÚXZi&Gnúu[ôLÔ¶Ó#M]…ã¼Ö¹¹–HÝm1½NéÓmâ»VéÓmâ^T"õLàÄó^çêâ‹ ¥¼)‘z‚Á¨çµþ–=Ý¥¸h—H=¾S–¼ÖÝÇŠZ¹NPöô8OÍñ±‰ÂûLÙÓ—GVöô<•ÊûšT2u—âù+’©§B*•fw¥ÿ>–¤èéÔã;Æ‚„ê1!„Rª/Ä5»+=9èR“P=õ1¸F—ªtêSˆë¯)ƒ”)w_ä²ó Rš² ]g±?¦X0s,%vƒËÏŽ_ÃíÊŽ·YJŸ¾¨ôéË Súô˜(Gš[~T–F} ­ûÔ²º,G×ùÙ÷)÷Û[­c¼/ØJ£ž§¢`š)w öOUè|eO_Ʋ§§- ,iÔ .°øfp×…Ûá–“–4êq‚Oen—tœuŸé±buùÀ_!²4`ÿšÚ¥ºZ~<‘FÝ Q›4²|ïè ïS†wmK£>ž%© £…_[¿Øß©g†Wþ‘¦C¼ÛN¹ÓDzò MëÊ6¬ÜbJ¤îvøYרrqð=;(0'‘ºƒÀ`›ÓåA>T‰ÔlJÑÆ”K+‰Ôík ¥ìSÊË'$R·|Ò+¤©ÛÌ&ß )¿ó(wº!¥DHÁDêî9ŠŒù¨J!8;*JÞÙR‰ÔÝ"ªÜéwF•;},[Ô}|REL%SŸRëðïPJ¿³Í‘©»6ʳ™NùÝG'yãì‰ÇB€>,eR9ø•?Ý}θ>¾ÿ³¥Ç„Ê–²€]ùØYÀ®ųõgdóY ý$©ºƒÄ÷›¤ê‰%óºÒ³  ¢úø(õ"UwøX(kWŠ­EåÑ»N.ì»ÐSRª'lë!`Déé)ŧz|OeÔÔ¾ˆÕuŠß}=ÌG*v•¡}“«o-åCEiC»~0³üñVwIŸ†Öß&výR`b™G(¹úÔÆ^{¿·#¹ºËPz6¯ôZrõ)Ãw¦äênÑùGæWp"¹ºg0Ð*¹º}£ÄmXùÕäêSæ±D‚\ýÛ_•«»í=@WAm ûµ‚Ú–õÿ¸-ëÏè”áê7e¸‰|cز–© ¶×/G{·å_à[ ÿ¶ð âýÇÂ_:kìwªoõº4S#¿-„±þ”Ú5ð§c½­¦Ka©q?eÐÙ5îÇ€kÜsYûñ–÷ƒ-WO@©‚ÖÀŸ†¨íÖÈ?&~âP.õ%ÚºMzÂ@­³Æþ4…ׄ’©§½¨Ñ‰„$ëy,–ªñ?R¯ `L,eX¹ƒ“b} -K`]§‹›Ö+ܼòG)Ö§%ÎJ¥>þÆ*Áº{Š17¯ë´oóÊW˜.’ž°R‚7°K”6°ë¬ï».º6±‹°zSuÐG«ûY1kH¬n éðJY\·H^,e^ùÉKiÔƒHVõþ×¥ÜWÞ4§4êt0sëªÐ¼~X˜Øuªx€å׫'NT‰3îTôL±ëNí̱+cú1É2¼Y–rz°]œyvý‘‰–?â ¸üÛ]bõD·ª*•™k¹­RBõ”¬®„êÆšâ£Ùåh”Vý>tÔ÷à3äÒƒ€K}÷Á-j ¶YM-{3Ë&s®›>ÃE”ieÈÌ*KdrŃ˜Ó¥ú4þ¢T&€OBÑHå#šOŒ„O¦“Ñ2›ôËdR4—Фêó$,‘ þêÆéׇ×Ó¯}¥”ê×8êÆécxѪßKGúkù„†ñE«~oÃ0¾hÕ§CbiÈÄ !×0Ò]ÃHƒ§LJÒž0é®ad¬Ì"KEÊ÷7<$ó$[É4IÑ4¢ˆnœ~åAZõ»Á0"\J¨îY}"±ú•_‰Õ=XÙã½ÎgÉüÈ2ªÛæ_é¬ï6qu¨ §ÛÄW¾ÄêcZg‡?Ö¡TnóZ_*ñãµNÉ<¯õåE^ë\íI¬ž Ó¼Ö¹RþòX2º×ú‹XÝÁxѪۋ%H‡Vî;¥U7Ôt³¥åñNÊRª§‡iÊ‚t]Ulj¹˜—P}qÏØ®hc»r°Ô‚uÉÔÃM¡v)¦¦–§+Ÿº§hh×Ùêv¥Zî‘$S}˜Ø¾>˜Åt ™º9ÂP2u[¨z‡Øõ9æN¬.›ÿØTæ×•íýXˆò©2î[³å²\2õ ~12´+=×Ì2R*õ©Ž3)‘zHbCY‰®c²3×ró"•º+äo7R©/ÔJ¥žRè{eRO`ÑeÓÇ´nÌ3¶ëøÂ¬IY›¡åH”D} ÒZL!Ò¨MZ í:¨ÛЮŽz¬MÙQfvý`d¹³Wõ…ˆëž_uÏx îݵQ4­Kð6­¼Kuw+Û¹N°ºfú=ØR¨Û²¤P·… ¨Iåt­4ꡎ$êæäïæt˜~ý’*‰ºƒÀæÓ-æ”'’¨/¾™Òõ¨¦tÝ:™E+ÆÐwSÊãä%QVŽ·!åX•Dýÿ);³ArÜŠþ’³§«»0 Tef-9ÞwûCüýæE¼œC類 )$ꈡРJÙjþ\p…TõS†¿‘):!¥Zéo{ Ñ©ˆëÊ£ÎÚhiH×Áßþ”¢¤Ür©)‰:ãõ‚ºj:MÌÕDž£LÞ”òç ðÄÑ ^p1¤TêË|F]&*¨«BÔÕ)¯\©.H¤Î©Ìþ6«üGÙÔé#Žà5 þkÄ&ñ@ðˆ†•HJ¡>.:ÇM*åR_\®dê*EáØßZüÄÐßU!%à±Å WYh K™×ÈrwPuÎ ½XIÁc• ÔR8:†Qg}— ÙøA-MޝlECËÌÁfvY®Ì*£:9§¶Þ̮ϛÙõœñ¥…W–Rª“LêÀÍ,ßÛÒ¨3€P!v€E³•Rý”áïhÒ¨ ¯4—F]¼²ºëw–Dꜞ”ɽ]Å®6­”F%Rç8˜ˆÔü¬HýÇ#R¯Ýû_~M Ï‘ ¯¦…{÷áÕ´0}.¼ZÏá—ŠŸÃõªŸÃ™Ë0îº üN­V£áÔ´ðgþUµÅü¯þá˜þeA«cö_j‹É_-@™˜ûiù –˜úKLýÇÂuyÌü,Â_ bæ_3ÿÒè˜ùeAð‰™±ÄÌO Sˆ‰_m;ˆÔiZGOÇÔ¿´[*u•ÂxK¥¾´OiÕU!ÕϘþ‰¿ªéÈïj; Åôϱ8hÔYúܤ.1Õ¤®ÄóF•'ç)§úæ#³ÊßM>ÖuEwÓÊEiÔÙ[HiÔ5ðtQãúÂ#÷]M§“±XÔ*«ú)µÚ×È.Õ»‘])øì:éÝÈ®œåxY].ºL”R캉ÙÈ®„ÛF–?'H¨ÎáÀ•N}v‘RªkÚP{V!ësp]Í3³ëòk‡WþT¨”ê /Ê©.‚2ÉÔ·:Äždêê2E{c»’ãí:uÜØ®{³¶}GZ&+§ú6(޵üN“L]¥ø,£Ëƒ•T¥Vzt£ËÀ$•º Q>kP#ºˆ—›„êÇDåäÕèî”êj, .%YGÚP3†F–zp‹—Tê§*ö¾a¥Á¨âá^é­Æô Rç£X¡Ñ]ʼÑå/(RªóYKßnty €„ê§ÐoT·¯ÑVÉÔO™%7¶KÕ5µüÒEÔOu+ͺ¡]—W}*¯™¥Êõm0{Pª³ˆ#ßÌ,'°¤êò8½7>Ÿ¨…úó‰J­®I@¥¶©åî2ªÏ“@ruZX›‘¥Ì%½: QBmbWRwK¾tìwõqG‚ubD5®œOÒ«W6Îq–SW‚uöˆjzóJú¿7¯”&$Xg³ÙãJKãºoZ—O½vemޝì÷¨8àã[ŠãàðJõÙá•’¢Aå×·²ªkÄ1)töwN2 ‘M*ÝðßTlA=hÖÙ² Ñ:M\H´>Ï#iÖIÛíO+8\šubBýaÊ꼎e!/¸ªó¿Ó«lƒ×§ã¿³ŸäU,ÅvGV.)Ö5èlÄØ™b…ãÓŒK³® 9ºþø§¢Ù¼R’hÝEmÒ¬óAüÍVšuµá Y— -—f}+uÝSÕ àE,E)Ë7¾n¦®R¦‡@yì©òY^Çò⢦–ðèvê[+¼ ŠëõÀ:µÛÔ®{Ç;Âò=#Éú<ÝtxNkú¨¡]GÉ7³«³c{€ÕýBæÕtJ¬N2©þšY ¦Äêò8À”jý˜øF“j!ÕúB¬R«ÏóFªõÙáJ­Î2Û›WÞ:%Õz=ªõŸVµþs^TM à—_Ó­÷pkYP&¼š~ú…WÓÂÙ^­Ú¸8lËú­,ë‚…6p6w]ŸÈO[¨ÜEÈ–1NÆü/ j‹é_ø&¦ÿÅk1ûË7˜1ûË‚Úbò—§AOÌý*Äܯ2xNÌý*ƒ9s¿Ê 1÷ÓÂǘûKLýòZ3ÿâ~)¤kª/#$ѺJaîK´~LK¡”RvmL‰œ4ërœ§Äêò+FésÌþl’hýXÖIå1ûëI,Ô¬®›žÍê)¯ºê£°oZ)×)±ºœÎN™×u¢¶å-ŸM캱{ ËQ4³\´I¶~Z¸8oh׉î íÊÈÐ SËýE¥W——XMí:ÛÔrsO ÖÅ5È;¶®&2¶\YH¹®G±íÆXùÕÕajÚæv¥C;Ʈ˖\&»H·¾¹ÂÜ.é×Ü.}×Üò¯gžÏZå#Ҳǃ[Ä]V]~¤ÓYà—ù(ݺºÌR·+7ÜèrÑ®ôêzuf£Ëù¨ôê,Å`"áºZˆ.ë¾ê2„ëªâe£»Õè‚é×p¾6¶lZSKC3˪šX–h^©ö6®¬Ê°„뜶[¸~ |zsJCSJg F·p]ƒ‹ åh5 ìäÀsëÖ…, '*{k4)T6˜x%I·>zR ÖgCGS>£¤¡y¤DÛ<ÒÐ<Të§UÕú1Të#o7¥Z?%¨Ü6|F‡N¶ª' ›Ð€G–hÙª˜,Ñ0ò_…,ñô†‘`u¤äØ6Š˜WҬϓD¢u…Ö¿~¼TëãXIµ>OÉÖÇÁ’l}®«iä¿tº²ú)²Ò¡)Íûµ¾î²ök}.ÞA’KleW?mà:K'§…Šls¹ÊŒO'ŽO£¹Tf³¹ÚíWúʺv¸\)è~¥/qÚ“?æ½›Ò5PŽ™ë;Ú¯ôu¼ùx¥SÖ4¬\ÎKº.Ž1)”]] SÖ6°ëNe¯FyHÒ«ëY®¯^Ž®4e/G—ÈÛܾPÄ’xÏ¢’&ñºúE‘×ëÑ•s<>¤ØøñÕOŽw<â—Ž¿yà Rfî*ɺÏfŒ)6cÐËƇ±¹/H%^WÄâ³L/ÿ2—z]§7½Ü2½ÔÐ¥_gÐ@+$_×£òõ¥Ù]çz{ÌH¼~ª[çU7¹<ƒLIÖÙøA9Öeå€{Iʘڕ‡ÞÔ®“¬ÇWÿ0´ 2:ü¥•c}SÒuzˆªq#Ë} ]U]Õ±yƒX¢r'V—UgËÌ$]ß5€eÓ ,ï»SžuV¸L#ÜK^SŠ‚åØX¥,ÙÈòŸ)þÔÇ„2i×iლX¾j•k]­ƒÓ%^çð³Үf6ÛŸQl‚‰…ÇuxÖFK˽‚ïÍ뎛×uZzãúŸÓ¸®£Ê×u^{ÓºÚÖ°òG=åZ§Gé·\þ•l]Ô!ê@ð<Š‹ãkŸ&WŠŸ^ÈRñög|§|뜔> *kó—>z¤#Á³GKY‹¶¡I]w67©Ìa×ÍÕÙnêô^Ëb(tsõ%¢(ߺF‰JýXÍÒᆕ–±š¥Æj–C{ß ÒíÕÕvvËÑ•)?¼XgÎßëäë›3Æz€ b#ËL>é×çÀ&ýºxÁëDúõ¥ºÁ:Çž…¼”e*û‡—²ü~]¾š¦–Ëfé×·Žo0jïæ–¢²W²+‡{€‹Á—~]m¸J¹.çìó¬ÿ¸ƒû1²ô{ƒË”ì|›ç8K™Z~hé\ðr:K5µ« #ÎR=‹XšÆ†œ. ;[Á•˜$ìì/P’„]…¤a× Ru¬e}^°:CË(üCËx©ØÙrÏì¿V±?ýÍOªØQàïþöÿþîeåþRîì¿ÚO¼µ…¿=¿·e]qÕÎÞo.Ãv[Öí.ØÂ¿ÚÂÄÁ¿wÌÎp«QÛ?ºm°üÓµÕÿ|õοø9èÏ¿º6XþÍeÀã¿» <ú×Vÿg[øÿÁ¹ bÍ_kû×vþ·,+Çõ³Ç= » å #dì«É˜.±Õœ2¬Å á× M*Œ!»'#„ì2-õ¶a]×IÿŤ3LëÊQ7®æÚÜ2Fvûˆ:qsË¡»Qb¡-Õjc»Ôjc».Wnlù+E\jÝMÇÛ8„ìž!ù/[DÒ/-?¶#»ÑD( !ûú¨A-K5µ\~ÄÖUßJ²A3î´n_ÐäP»w¬åeèØÝ- ㎶+yÜávý 0â-ar×á*&—«‚б»…ÔKq¹—:öm¸"»©‘€&þí Øi¡˜ÚÜR³ml5ãF묊†F–†ýµyeGšV¶Ê¬ò!°·×_!þ:¼Â08…Řò_†¦”-kF©Ö7¡44Ÿì~ÓIC³‰‡‡Œ£¯ÄAái ÛTRm&ih"YUó¸eì|8«jYUãÈ~4Ž|Fãˆi÷Ö8ÒW#Þ8nûâĦ‘%Æ-c×Ü]2vØÁF‘†&‘†&‘.¹‘¹×—jÙ&‘*©c$bP¨ØýVX*vYX¦aäcn0†Š]B‘}]FgBÆ. X‰ä늂áH¾î6ÓäÉV{)ºdX¿ÔWÒñXŠb¨#ÿº}Êg9RòN±w‡Ê•eíXÉú:Xòèª÷&t%YÏ'zv¼ÒÙ©ñÅRã•NÓx¥s@6Qè«i]IÂW2vz+â¯Í+7à#»G Í »ªcóÙu®¸¿ŸVï̆‚Ý̲K^ˆrWYwËñ2ŒôëËôˆìë²€£H¾®êÖMÑF–Y0‘|]>Bˆùº;"÷úÚòñ‚Çkà«¡]®0´«í†–Ó-’¯»ÇtÆø‚»þëý *²¯Ë¹(êuZ( …z}ì[3»r”³à% ¯êàô¯oóÇÜâuÕFeöúÅY×·qóÁo}5°õ¸ÃºY¡iYLݯ»ûdbÙ§&vÉûXêÐ ,ÅÅoÍëÒ÷×u.üøjâï¦u%ºZé#ÓÊÏéЮ/¨DÖõÍç!]÷袑v}%Ò®‹~ÒP® JÖæýÕpÇXžÉÚuµõù»‰›³ ,“°â˜ðª n´ëj7&`H×·2+w“Bº®2ÜÖ%j7¬K nX×9îÍê!ëú6vf%¤ë[«ïø!]W!ƒIåK& /è¸'…_i×e¡úz5”ë,Cm?²®ÓÂ?â2ëË€‡r] ¯‘t]âOu‘tÝ&ħȺ.“PBº¾–òvùuÄV*ÞcWŠÍ«zv|ëS÷r€¿ýýpt]bóXðYÞM¥w½X×VøJ¡|ÄWšÆ–λRD½ ´ÙÐò„¯ JácKŠjj×ÝÊÞL]R³ã+OLíº`¢<Úus¯‡vÝ“”&ƒË¿¤>¸_ïàFîuϼQB¼NÓºÿùþáõq]ņv}‰/!]—s'R¯ËÂ.%, ï.vi|wñ_oUŠf–±>Î ¯æaJEêu¹•ŸÁq`x.Em/ C¹îq!]·‰šZ¾ú#ýºæEmï¤Âé‘~}íÕ=؆tÝí»j×/?«]¿<Ú5§}87-ô`ø6-6µiáÒ <›. ±Õ®Ý«ðk–á¶{øµZÍ`å2¨-¼šeÚuÕ†2.ý‰0Pmþª6ÐQ |$#TmèO´ðç‡iá«&‚@Õ #\Ú1 ÊÀ 7y"T0#"T£ÑÑ… Gö­;’®ëAˆO’®ëITPM)?ÌãØðî,K™S¾/"»J­dàA*ht}qy$aw3à¦Ï†•)q»õmtãìðk¿¯ß8;¼ûE÷6±ëOƒ&öµú&ö¤\?®øNjb×sšX~!Evq‰i&Ý:]¾þLÌb¢}6´ëð¦–]Š ìâ#(Ý:ÁÓ?¾Ú•îkhùcÂCËÅt$`÷,ÀhÄÑám¢Ü= ¥HnhW†³¡]§eËfZž%éúá$]×@Ò½†vyÃavý¨5â,+t åÏÒ®3‚´/Ž´<Á*R°«í+mß±v%à7ºëtø&—äÄÁáÕ<£¹EoãØðv:M—Fúu=‰J§¹å‘TëËl”jý˜ø'TëÇÂóR"ý:-÷È¿®á­'ẚQ×ÈR‰5±T\ ,½`^©wW¶Í´r V6 Qe / (QPWvúæ ^?N£ªîªrpe÷Ç‚`eaR?ÇzŠ^Fö¥²Æ‹‹®³ÅåF“%šLJ¬ &K˜K,6ÞšKŒð›±d‘Æ’EšJ¶ËPÂf# CÉV5‘½›H*î’uù§wؤHß@ÒÐ@Ò'Í#›Õ“JqãH¡¸iÄÃ#û cäa_ ãºÞ¹i\§mE)›l ii"ù¿²$ìó«.î¹. =0Þí€2±û5Ã6ËuùÔXR¶5š ÿR°³é‰ñjÇÜŒÄ+ú±PÊ­ì¸äº:ÅŸ·Þýf_ǘ{QÊϵ÷Æ”G½ûÕN÷5¨/ü@€] *ªŸ +—Ò¯ŸBü0“~]/OVçWûÊŒö’”©+‘…Ýþ£À9–¤Ô½›ÙÕôñu°Ë_IØ—7´¼ÖG v®JÀ‘ì|G72°‹Kö¶‰]]IJK㳟Ãá¯( âFv]J=¥ËìÊS÷«~ ¯ßõLü‘~}Ž.’¯ÓB9u¼í¹qä凞A<Ö£TMÚ¥mf©€ŽÏ(x雙徒4ìËLŒ ìžUÔÑÇËŸZ¾Cí:OÛ¡–n—ŽÎe}ã+Š­_Qt†¿¢ø¢Š$ìîŸå¯(ŽãX pô½`¡ûGT$a×Ôfiù‹‚W,ch©úãŸÚò€=’Š]á”ÛZJȆ~Œ]õ!(Evã‡Ñë® 6Âq–-ÈÂG‘‚}íÔ}u %»šÎgyuÀ¯ç8A¼F—Njd¹''ˆg~hÆ âåÖ6>¦Øºñ5E÷Å}î +–&Z.x¤g?î[jdyùªäìzO$ÉÙ5Ô;Ç.+:Lj—ÿX_#ËÿŽ$hç«—’f˃õ%hŸc˜í¬Ú©]b¬W³,d^¹õLj—‡(iF.öÕy÷ª¸ûºKQob—÷bOjv½o8Fv ÝcqÀVYÄ–HÅ®ñ &–½E&v;nw”E}qûu; A;2±Ó´W|Qì;¬4ÝwXã ñn9<™ØeZWf{i°’´ÇÒ€šëØae ÇvMCÀôýÜòw€! °Ôà–]Bef¯ VÊúXÔR1öÚ€­0·ëRosË}Þ¸ûÚLjµìV“»N4¿®¤h×”CÓ%i§‰Ûü’´o¦k1Ä’´ëY`F’v™0"»LŒ‚’´otÙ £»PKJᎸv;ò±ùYMû—P&iÚ—IÓ.†.Nï Áˆ4íj:›àVaD€*EM6"ÀcZ9¾ªàâ&IÚe^’´«BLeIÚebÍëJ„À²[Mì ìS:öeôãBìv!›ÑÔr3UéØO}ëg‡¦v]NÞÔr/PªvÖÆ. jÙ8cK©ñss»2|Ûe1µÜd¨}áOÙØÅÚ'Q;!Ѧ]…À³4í2±TCû³õ”}]ec§i)ƃZ*ƦöM¦–_ Ò´/“'îÃnûå8‹¹£tì¬o{>"-…ëjéÝkYj[dsû;-ÍíúyÂÜR4–¦\°y-ó“¦}ñ¬R±ËDÍ´¹å ÊÄ.ÌX¨±]¾4¶<6J’vÎ_ÖÖÐ2HÒ~ÊЫ’´ Ù{mbCp~m`—ëšWnÄ}Øù.˜^M+bö«a…ØÛ¬ï×&t¿6§”ç›R:³eUެh•—TÍP>Äxn9;‡eËÙrg£I)²Á¤žÜ\¢‡³“<¼¡äÛILÚ¸ »' êj$ñ’˜ý<Í2¨ªy¤<Û8‚à8U¼šµµìçálU³È6‹|F³ÈÍâAËÎ`…V5‹ì`³HƒYä¨;XÒ2–¦x~ÇÊ%–v¬ä"H)ÙOgVŠpÉÔ1)Ú)1…âhñ äp§²²«MãÏú+á:åeŸc¥Díz ùõΟDãVì*µ¼ç×ûR€ï‹R%fW3(¡7¥ËµéºÛowþŽ*UûürP^vZ0K¥jWëhò—Þ‹óÅËéì’c'}>Ö¤xĵØE ,µstšvÎ>ÌdiÚÕ%Vgb×…ÔþZª§‘]¢ûø¢6ìXºŽ1kRÌ%fgã— mh—éþ%¥Äìô 1˜ÅÐK×ÎV,÷º$Ubv:,^&þ^­Ìì-Ê×M-?H”˜ýbŽB܉ÝÓhƱâmbeyÎS+^â{`Œ=Ö¤ˆdÊ˾ôW‰Ù—H¡ÌìJ˜—ßzJÍÎRK±5¸ëJeƒËd)ÛYá:аÁýóQéÙ9S¹]6v«Ø«±@šÛÕ+sËH•Ÿ]Î峯ÆXÂvy?Œo)þkào©å\Ç[΄¸»ŸÅ.ûcŠ.t¼E$‰›±»ÃLQw4¸üZ)Úå@4BâvŽ0ÕT/Z©_·$m׃Xh„[n°Ž¥ëAÛÎhÁæ¸OÚv<»ÛØ®«¶M-ß/ÊÒ®èþ$m×äæMí:ú»¡e2¥´íó|ûndוãY:ÝÈRý>6[é¿{´ý>6®8Š íÊ1of)úIÜ.÷¡·+^Qyô²ý•¶þ£e„Zš´TS´yÉÛÔ¥o'´lùXׂLåk_š>V,4B-5v­@fœ5Þ^§/jùkT\”] ¤—L-4-æïS»¤yS»NÀÔ²W¦v%¼5Uññ)F_ŒEœ+…û­îâ–šisËE`œ5Þ0Q[6¸k¬(Œ]Š·ÊØ®ÆÓQc•ÀA6¼K­6¼ îqÞøõY†—çDKãÎr×.N¿Vhxyò­TîK…R¹Ë/©ÜÔ€M9ž¦uû´ƒ.œ+;c-÷…‚$îj›7¾Ë0•·]¤Qýntù-¢´ílŸŸ…ûO?«pÿ)O§Àð˧²pϲ-ä6›eÖbmá½ÕáØ,CÆÂ¯e‡Â­…ײ…SO¯ —f]ŒµáÒj3ŠXPe0á#äóášY„byÄÇÂí—ˆG¯D ȇ ]Ò°ÅíKƒcúW»€hÌþ¬ Ñ$æ~Ðù˜ùi11ïë!(Ó>‹`ZŤ¿Q²v š,a»ú‰p+aûV¡á¤Š%a»žÅ ç:ÆÛ|®ìïôe¥7¢/\¶+Y»Ïf4¥+GyPJ?SŒ‡ŽžÄdej§hëñ´`Ü%j×x`|%j§‰7÷ÆuÙmbóŒë’Ý›Wþ´¨dí3—’µË*3¥Ç›Ù—uÑwS»7´üJÉÚg—KÖNq}#Y;û„±•ª}'©ÚE‡Tí(Ìö¸+»KQÄÒdbW.¹ã*_õ:c¼ dÊÔÎc<$jWÛijf—ükfùÿÖ`–®0³§4íj_—fv%­7³ûTú†–ºlÜ”]ý]®mj†vý›0B-ÅÔ¦–ÇoHÔ>‡ò´“?Œ†4íœm˜ÖJÓ>ÏCei§…kFv‰ÝM,³Õ%igÛ0k$i_,+W’´Óô[ÃÊmIÚOÌ Iû±pí$I»æíÖ´//P¤ƒ+e寔ÃÖbŽ¿Ñ-jg³8Ð (=Ö|r޼6žÜªÔ!ãé1ª¥M'ÿ7W–öS†oæ¸.»,e›N~Þ¿5ëΦ“J¦Ôí§”qÞšNÎkÉÛÙjÌ%kŸ]­óÆ“4³ '¥d³¹î|< ^¢Â0‚(,70ßL¬Þ?1ißšL¾ˆßÍåþŽžÜƒÐ¡ã‰[Ðp®2 çÊž/|°.•;ãF@iÛ9šÜ.’Ì]Sе£'ȕ̅ÖÁÚ è:>ûþ—Ì]í£äz_¢*{;K­{ ýÂ_9ËéËjûxãÓE_–0ݰ®›Vî-¿e*è“ÐÃÈF8”r@¼H¥ÿLù×?«Ø‚&–¤r·kàY_÷Tê¤sŸ{whw}h„„î§¿_•¼Õ±LËu™Î¯†ã=¤Ôí2Q9mdW±,db×5Þþ¨¢Üj`¹x•Æ}Á\¹Û5yÙ+»D_¿÷y1‘Tî¬ðÆWç_ÆÃÀ²Wc‰Êê¼D]?+4²/«^£®»ÉýeÅ:¤r'0áïkTeoWL¢Âx§V*wÁ„™(•»‹j¦¹Å0Jä¾ܲ”C-+‘»ÈV4¸<°L"wù‚Bñø´b‡G¤e .ÿ¦øfp¹”’Ê]Îà³ îÒîj¹5òÍ;+¿|l`qøÇ×k£Ë£^•À]GØŠk´Û½”èÇ÷eó릀N"¿ù¥Œ¡E4ÓñäÙ#:ÈÌ®4³'Ù»†‰’½™]Ç7³ì“’¹³OIYî¸KöÎh€>Iö~,Kòm^y•‰dï,Cѵi]Ùß ëªÍêAöΞRmTy‹Ÿdï,Þ6©TÃ${?eVÆxƒÊŸü${'%[õ®á†¥1å¸5¥t@CJ¥ºÅKUª÷ótP™C*‹4ŸÀ­Tïì<µmÇS.;N~UJõN8Y[ÃÉý%tç¡ÕR½N±·†“çKõNhØ‚†“sHõÎVSøm8Ì¥zçs¶ê}64šT}GݲwH×øÍÏÁñ‹lJøÎÚhñZ•R½éļ•òýÔÆúÖ|®ŸPbøÖ€.G7 Ìüy÷Zu%(µ*•ÑF”ÿ1JùΩÀ¯)ÇO€(á;G›¿íW>±ßöüGJÂw80Q‚w™%|§‰+0%x_:å×=««Tp§ôîzK9ŒÒ2>¬¨`e*Õ¸®³ÉëJZ÷ŸOj^×u^þ¶bÔuœùxßó·‹ñyOHøN\¨T›X~»HøNŸ/!ÓkÔejf¹"é;ÕêfvÝâ=¨ì“‘å4TzwµœjdWN³¿¬Vjº¿¬V’¹7Ø>#»|ä½€uwõ`–Jº™]çŒO+į†vÝ®ío+îý(Á»<ˆÐ¬|Vs»œÛØ®Üï_VR¾óIKØR©›Ô7¶‚ýiÅý{IßÕaŠÎ¶Ôutrù…AIßiâ…:¹¼Ll¼ƒ-(×ýÛYj%dÝ•·îpËÌißóé^³»¤j^!4)Áû©?˜IùΠÀùóŠ^on×}Þ÷-ÉÞ—7ˆdïÇÄ¥ìî´¯_)_{ýJA´¡å$Pjw>‡jóØ  |=vXÊÈ’f‰ÞÅ K]×°º~ûÒ>Ë9*É» ¢^k`%yWû¨åŽíºÖÀrY¨K¸«ôà¶Ålù¬l)Q;Ø.oŒÝW„MåwW¨` µ49ØÒ»M-ÿΖæ]á…b©ƒíl©é2îª"ð —b©×p…$ï§>žo¡ë¸ÓÂÚŒ-ûäO/¼œu÷S¿ä•Ü}F]‚wDaØÐ.±ÖÐò³DÉÝ· ïQV‚÷…–cUKÇÚu°ùZ Þù¬•c~µ:¾¼  £¼²ý•ÿXÙÒ4V¶ LéÝå ªš÷5‚®ã®~Qãõ×%Þ¦–;FÊî~ªãK’»Ë¹;M+#Ø „•}<¾ÆXሷÀ]ÉÝ·þŽxËï1Ì,ÉÝåv6c,nÙŒ±{@·]¾t!w>k%ãÝ•q?Ðe3Œ.!Trw½1Ð¥Éè®”p£Ë7‚äîšþð¡äîbYrwš8‘u„y2º,½û4$x?&¤+Á;-þ¿x+–Í»nÅJð®î²º£lÁûÓÏ ÞŸ2»#\›–•‡d ·£lá¶N[Ö‘[m¡bnÍpn- æG¸5-TuíÕSŽ…-À!ÂA=Þ‰h¦œD0¸<'bAÕ†p¡ Ê€ðˆD ( 0‰8þaà2Ú.-ˆ P ÕªXF(õ´:ÀÅ£Jô®Bn‰ÞÕWŒDïË@èój9ÅÜÕ ìÊÄgU~ß~¬¢Çº•ûâ %z— ^—è]§Î?xG:Âü2$½ÓÄlVåz—‰ÍÌÒ‡†–_UÊö® )8[® u†ùSjon×Ñâ—ûJ’½oã?ÐeÍî)ß»*¡ºœ»LÔ$ ï9 ïÊ06¼§Û¹kÁšr¾ËDÅyÀË6¼üBÒAæ9$|’Ñ]º|£Ëc®•ð}a©Þ—Y'Ù»\‹ )Ùû1q‡Mª÷cáŸWR½˺+½©]ÿ 4´ëªl3K fÙìÁ,ÖNÊöÎqŒ,ßy:Á<ÝÊê:Ü.»]rxóʃH$z§ë0i$zŸ[ \ï,C´Y]Òv£JP7rçs€·r½ÓÂç4©Ë *µ ‰Þg°^Ô%”7§<ÙF¹ÞOmüñE¢w²MA~, ¶ê=ݹÞéjRÊáÍèAõÎï\ïóÃO>£ád8•èuQWÑsç­éä1õR½Ÿê–²ÜtRt’ê}©Þ…Y(R½ËÊÛn:—äÚtr­&Õ;[MAºé¤ä*Õ;éܪ÷qtt˜ù™³·f“¢{£Iɹɤ´ßñ¡P’wz ím0Y•ƒ'›Õ±“Ú“ï| ¿WšMfµIðÎñg Nž7!Á»|Iqدú%‰6<«C‚w«ó*uåD7žÞóÔrÇ<¼ÊÑBù[€¨k ¼@åÂF'šg·ø÷¥Ž4ÏA¤oØ5ð^ŸRlÖ5Ýù$ª¯ÊõNÓJ¯÷Ûþ xg”ÿ”걄kË_•é]ÃKÍÓÈ.UÖkÓe{x|½¾ñ¿Z~Hñ.±þ®ZâµW§`Êõ®úh‘¨ë@ó››L-ߊÊõÎR\ *×»ø£›L-¿$$y'š{C˦Zö·¡åšék3»~u0²ë߯€¬äîsXÔiæåôHyÞår4\yÞUŠ&C»”uC»´dC»tkהּç;µR»kÒS_5µLT•Ú}‰ߌí:,~[¼u¤vßšÑØrsô›¿ªè܆–³Hì>‡žo#Ðbþ~3³xcë(ó`viìг#Ò¦±@“·±Ë”åÜRPÜRóÜRD5·\½(Í;{Ì?ù”æ}¡]’w/朮ê®RxKó®Rl¼¹¥,&Ñ;ÁB^ÃIÞ·ö5µëôkÙò†v%Ð;Ôò“Zç™—'Øòj‚÷eì[®×$wד8wluœyÎ á×ÍÉÝù¤¥½Ž½Wêɦ–{o’»‹¿ƒÜ¦u3sS»R²ZæŽHS 0³D¥x§“àY Þi¡$;ö]E¤x˜”dÍ,?•â]Mg…C*`…cYËe-"ŒïËÔQŠ÷hh^cE?ù;ŒâÌëA‚÷…èc‹Ž¿r«ï¬o¥7Žo1Ô§ãÌ«Wð ôî[…cÛõ x?¥¸ò‘àýX˜&'ÁûLàÇX"Pu¨eÄWzw 0`ÒaæiZ­¸/t_÷…fþ˜¸ž“ܽBlür{el—Ìll¹þ’Ú]³‡ll—›Œ-—Kº®»*Ä‹Gjw™Ø¯±J`3¼Jྟ’» AÄG©Ý5G0õ¥v—‰Ê°Áå·ŸÔîHVxÿ&“Ú]ÏB¿$wç c"HîÎB•à]&ŠøîÊ>orÇßG»ûY¹û·GîæTߦ…¿ „kÓr¸®»jã¾ÄµLøõR&ÜZÏáúÐmãÛ´-ÔéÕ¹pjYsDƒÇœìˆY„ÀF(H S%"TwÐèiáçyD‚lüqà1po(¢@µ S"‚@=–ˆeÚª68-"@•Ó"Ô€"°Åü¿Xbú_GZw=MÖ]õQø5£<÷CZwUHA3¦5ã u§‰¯w%x—“ØŒ˜ÿUŠšpÌÿ4ñwiÝÕ ŠÌf•{2Jð®R|–qå1LÒºŸR4%u?–•Zm^¹ŽT‚wâM,ײ:Õ¼œÄif¹øÜÌRgÔ¡æÙòÒÌ®™Ùu¼¡å1Kº«û‚¦DîKŸ”Ü]¸ »:Ö¼JQž4µëVfS»äN×¥š7µëDlCËÿ$rW)š7´_åv?…øk®Dîr"¼Tîä0KäN Ë4±ü§O÷Sf)Ù ìôØ¥‹7°ŽÄî´P]u¥âÙˆ®{¤Ñ•LìJÁøB¥tçÌ¢¼kBi!.•ÒsíÌî|[ç)V7¾¦€‚”ît*«kJ—:Þ”riønJù9®ãÌkzcÈuœyš¸æ–Ì]ŽàÐú…Ïîú…¿’ßÇWÿphXù-*™ûiÄúÁo|„åugê™# ‚åu—Ð:éÜ9NðÞWãJ¥½q%ü:Ð6°èlÙø±ve)“K}¼Éå/²ß .w+\¦¡é0ósVbwQÁê¼z¥¨jl¤r_¦ˆTîœWÔƒ›Z¾s¤qWu˜¦:Ëö®ø(ï]b~ Hº°ûÜt ÜÚ±áJ%sl]ÁçJè® irœå?º±»ÚNu¾‘åƒ$î"ö q§‰ggHã®"öýpœ¥Ð%»*¤taf©c{EK]ÜÌÒ2´ôß²lÃX°ÆSJúöÓ'~4Kß~,Œ|’·Z>纜•º}ž JæNËAÛ®±¥ˆ9v[¬/¯Q¢¾id—ÛÈ®«t›Ø•ˆì-¼ª£Ë³ +ÍÛÀ.{”•Ç€^2°K A–¥î ©Ûå@–º¯h?î+Z©Û· Í,wttùmkWêõˆµ˜:ºüttùefKÝNãÔí24©ÛU!ØP.w™(9têvÍJØŽ¶œÃR·/>”¼&þn"y»JCås§‰Ë?`¾M¸ÿYû÷Ìç†ýi!óáݲp3©-ëV¶¶¬wÛBñ-<[mãJÎ-àF®A˵ÑãmažZ„„l‡""BZ¸U¡Z ,#”ßàëU, ËïhtÄ‚,Â/ó·E$¨îÀ9ª6X"<Þ¸QàBNz Æ-b@Y@N„€j5Ýõ Lf)ÜÙ8ZšQ~‡Hß¾øZ˜_üó9@µ#$};Ay6æ=ŠZkÌÿªJpÌÿ*')•»L&ÉÛÕvªìƒUú¶aåϤ’·Ÿú¸¨ãËËéøò‹Å´®”ñÆu©Î+uD©ÛÙ8º¡q}9%qç8±eØúlbW}Fvå-Ùuª¹Ã*f‘¼CÈu»ní¾ ¼®í¾™ -sCtowá‚(¥³Ë MJ¤¦–q:¼¼šÈ$pßL¦–¯)Ü ë3´üAÀ–¡Hâ®cV);ib}-'uzù¥uMí:u½©e,ÿbj¹hVwÿyhl©¹Jä¾´®¡å?¹³ EL#Ë+¤r_Z§Dîœn”>±|TË`ðê(KÁ´y]¹×Æ•~Hå¾0)•;ð”ËýXÖ1å ë)—û)ß.”ËýX¸î‘È]^Ý*w5{ËÜùœ-sg‘Ë}64§üq¡1¥¡!åxŽ¥žîÀŠé(™ûiÅÓ½Ýé0 ™û±¬ÓȽàZµ]YÞ èÊòvDåR¹kÐ(Š6¡¤Z7w'kT™Pª?º¹;½@Ѽù\íÍç’r½\emÍ'¦Á›ñdG;’R ‘ÌÞá0t$åÿº¿û)³Ý„.K#Ê/I%u'VlACºŸo×”òh ÝÉ"§û»Ó_ëþî´PÇmJy¶Å{Sº®¥¾FQ ÝÏs¸£”î´PY5£˜ÝÒ¹sP©zIç.ûêwþÊ}öJu ç~éS6§Ô˜ÔÓÅÝÙ[ªÏ *_ªÒ¹³K ØÒ¹søè¢&•/†w¿ó©¡½ûJçÎ†Ó ÍêÀUþu'™;kÃ7ƒ’¹ ¨¤r§8FR¹Ó´$\¿ó9è:¾ṳ̈tîÇÂT(årŸg’r¹ÓBQÕ•JqÃÊŸ¿6«KƒoTénÝÙ]^ ‚lT©~W>åyÕ•íÞ°Rû‘Â]°" )‹»ð pW)6p,Q©÷\iòûŸ;`º³ûyW¢_½F¥îèï*îºHã®^±Ôø®¢¸lb—$=ˆE¯¤q糸õümìYQßU»¡N<ªlƈ±T²Çn›q±ß¹ƒýeÅMd]Ú}ó†Ñ¥`§“Ë 5öë¾¥tîe:jlaxås׳"wyžŽò²€ÞõçÑèr)¡dîzø”Ê}3`{¹sþPÖôò•Û¦wÝR=–¯™ûB§tî2±Tƒ»Äq`QËv¸¥ePË™Zî„êÂî§y<šL‡—?–“Ì}fvÿÝÈò'éÜUes»5Ñ–¥m9¥t×ì ž=V²Äol½R¨5´ëzío)’Zn;ýp¼å»ìGSË[IÝ—P¡lî4ñ >IÝe¢F0¨¥ö;Â-M·«[·¥ug3ø£ƒ´îj!Åx‡[ž×ô£É]~²V€y¯l±–¦kiòþ+Õé—³^Z÷e^Iì.Žhn×¹õµTPÇî+B£R¹ëI45µÜ·“Ú]ãDÚ‹„•|§V¹Üçà£\îǼÉÝ5 ‹R¹Óô+5|3Ë,:]^bx•Ê}™pJåN·D•Ë]&¶pl¾Ò4–‘±D` Çò–]6¶Ü`—Ü}óáX"§±Ëá7¸ëpuÜõË€./5”Ü}‰’»k”á(ÉÝeÂ|T2wUx» k Š’¹ËÄ qùQ&¹ûâ^ÉÝI<åeÛçe‚‡Z÷?«uÿ‘—uo­ûb ×–…Û`má¯O²ÌúÖu nÍ2ë×6—aXwÛ8?®Ï §æsxaăjF"ÂAZ¸N‰h~ðG0x,”#”s€VD‚ª à,˜í.n‹0PÏr²i[êNž ž‚6G¨–aó¿,ê˜þe¡`ӿߤ®;·›T&Üëžî§6þÁ+™û±¬|æu à^ €Ÿ×æ”Ú|c _›RðöÚrH›QšP`øêe‹4 ŽR¹·¬ë–›ÏuZwó¹téæ“'b)—;-Љåç!S.wBƒîHäÎ2\ 7ž§ËöƒÆ8Twz£¦TîKNH¡Tî§Ìº¦Úa”ϯ~$f7œ«§ çºôÚtÒÆ“¾n>×­ì (_ ¹ÏÓým¬T©Ú7£Ü%}kHùËDî: ¨¢”¿ÒuÒxCʈ#‘ûŒˆnêN †N"÷_‰Üe¥>w忆¹³ ûÓ®ôñ-EMÚ+Ô¥"7¦K®nL—ŠÜ˜ò½­dîôøñ9EÙßSLÝ•ÆýÔÇM&X~ñ·ßöKêw,åM*c™2¹/]jP‰°$đ„Š«ßöÔý¶§†ìhÊ2ciÊ¥)¼ …; ¼¥pŸ§ž+¿”ëRj¾fu]Tî…){kTÙÛë‡ÿ×Fuý†0¾üù Á*i³º’¤ÇÇ?+ŸS´ò¬mÝÍýxöeéØãÝÏám^ù&—ÄìQ ö÷Õ,IÜÙˆ¥ÁŽm*Š•ã{ŠºèX¡R5´Ü¾”ÄÍàɇJãNÓºÃz|OÁïJã®~qWÌÜ®,éæve7¶ü5Kw #}á•Àº´{,è\“K=Kwùâ p—é “Ëu¡Î+ÏRü·Mwš¸Í¯ë¹3&pˆ\ÆLÝÎý”áw’¸ÓBYrìP{ÜR»5·K»5·ŒK:­üÜ>¥qJÔ¾-wtXyúˆ…šZž‘¤4îlf°N*O k˪ù^p¿Úµ5|‡V÷¥Ofv Èf–S[™Ü…3Û>¢-Mfv=ëά’¹kÉÒˆ¶xó(›»&7ÿð–+ó1”Í]ý¢ö8¸¥iÄ[ªßævt=ö¯à(iÜÙ þ%»&7%iÇ[.œubyù¯@åsW—÷͆w Ù†w%œÞu=¶á¥¬ »OϵMc­@=Ýô2¬êÌò|ÖJa7½ ›±²åOޏÔk¼Eh»,4ØE)¥u—›¨‚šÝ*®c±Vf—o:Z~ RºË¹”UÇ~ûÕìòCQR÷%2èÔòzÛ>â.ý4â.åg£»´ó±û •Ù]Î@úhtù/ƒ»/ *±»LtÓˆ»t®ÉåRVÇ–_ƒŽ-¯HC?¸Ëg™]†.%vg…Ü”Ò]~³¤t§‰K1)ÝÕx4CJw5žšµÙe|’Ò¥øá¯Äî4ñWp)Ý—A‘Ò]Ç瀻oýë\à ±ûÏ?+vÿù»Wžá/ŸÒÂXÞ­2ÜÞk çBø6Ëp°ÂµU—žeá}á×jßLng\[˜/NÍÚ˜;á±PΊp49‚AÖÅ·zÄ‚,‚†E$¨"xÛG (ÏÕD¨Ú06jðœˆçÞD ¨l©;-ü½#"@ZèçÕh„¨˜ÿÕh8Gç–W«)ïÆü¯'¡>ÝÑý˜NiÝiá“Lèq¢pª¤îrUaSÊM2IÝ—1שåUáAê.ÒÔ¤¾¬ãµ›Õþ{¦SË/£¨¼îzýn`×…ÚwbuC÷­B3ËM ÞÕBþÐÔ¾A]^î%ñîzLüèÿÜàò—D%w_ÊÜÁÕÑåYˆª§¹å&‘R»/\Hï.ÿQÝäO]Ï}ž’»³¾u<ù—2¸+UÜà®CÒ;Âò/©ÝÙ>zÉ!–}2µ|•HîN§S§ohù?“Äî§ £¿Äîǯ&‰Ýùð%±;;Ä4¯Ìº”ص±«Më:óÝ´b^(©»âß+·)$v?…ÖØM+å2‰Ýg÷HìN' :¸<»JŶIåô“Ö]äÃÛ:¹üf2©ÄQIÝÙY6¢A¥–¦œî§ÌÊÏnP?Q9nPù&”Øíf \ÁÏ«c+¥ksºsºŸÇÐoM)«jH9pÍ( ({bBwJw¶Š4ŸëŒéæsÉàÍ'F—çs(ÿ?egº4J®ÛWâk DDôÙó>Ì—ùAxþ«¤¤L³TþÑ¿®ò°¬r9-Ù|r‹Bb÷S†?"»ÛBiÖ|.!ÞxÒ( »¤Ê8_ÄîFý&±ûb1œTã$v?eøç§ ºÛÂ÷Îõ´8QöŽá¤6¬KºŸ÷ð÷]ÝÝ;ü¿0ŸëZsºdý|òù4#ºÒ؉òÀ¶´î÷ZKën •f3º’lg¡JõÕŒ®Àq3ÊsœÒºÛ­pe!±û1ñ_Jbw[Ð=_®JìîÉ@eØ”gOtEwWn]#%êŠq6¦obwC®3¦ë˜€1å %.ï§aÚ)ž»‡•mÍ·ž‡²6]÷¨›SÊ) ç~^ĉ.ç¾t·9åI«/æ”!©»›JÉØœòó§hî®Á‹Ô}yš9åO˜B¹‡SŠ«á”•3§+A¶9eT•”îKåòÓϬL æîDŽЭÜm¡„›5)kèRîËãÌ)ÙÖ•Ü3WØßùZoʪ”Õ3©+<ÿþìïüDñ“dîÛøå÷ŸùŠä¾5*ÿQë>ìlð/ZB÷ûÌTºòw ¡²•w%VÁüF-u4ÀÒqHæžVQ•ÎêtE«S*ûÇUß@Ës2º”»[ÌçåGŠ; eÕ³@}“¹»Á<'­;¹§sù®`»Î+[V=ÿo*÷Ô‚»†ñ°på¹ß§â·`»ªly V2w?ïEæn 5Æüý/™öØWåó‚-gTh¯dîé$xe+ï Òj—~l[±ÔZ ÝSAê¾Y¬ÎÈš`µø¾ Hî™{ìÂc±À~Êba]N{,ð*…tOgPÁ ¼ôxŠéžf±T¶²h9Ü.%æ°Ë?ÅtO¿S:5»Ü“ÐýZ¹Ò³çJ!ì®(¢{ê@ù— ¸DP2÷ôú‹Ìý˜V£ÂíÛíÜã‚^d{JÁcHæÁf…[þB)ù­wå›?V¹x—dîéxªÒÇ‚¦€Ë‰dî©á‹Ì=M¹’¹§kx_çJæîR„Z2÷¼ëEæ¾ð®üå{¼þ¯ÌýëŸýN™» üíßüÏß~p)þÇ_ÆÂ0ŸlY›Ž¶pÙò%Oƒú ä[,üLÛ²>¸©]̵ÖÊÓP·¿³…«ý¿ÏÓPëH ÿ˜§¡=ÿ”2ø ýsêNþ%<íÿå=àø_S^âßlá6á¿Ç²´î!dkÝcá&ê]kðß±PXýíÚ Ê`î7¡v¥u`ŠŸó@– ¨ëìJJív5(Ç~¿Žz©Ý]вS‰Ý·¬¸nÏX¾*¸rÊV`·K–»ý.ÀWb÷T¯2±+:Ä®^2²”;ëŽîyÏYº”Êbnþ8Àv}ÿ‡_ÅBÿ™‘â‘c»šklWéƒZ¼©"»o¾µ”n›(z†ZþùUd÷”ZyÀMíʧ}øW¾ÊÐ2}eÅu_ëgh¹YÌ]=€TBw›V!#Ëùº¢ûú8ËEF%0ïB–ghå† ëvwSä ­L(YZ÷”â†g‰Ýfh«ÝcZAÍ÷å@ÉÝÓb8·OÆ•AS%vOÏR6­ÜÓ,±»Ëü9ëmXù‹Z‘ÝCëfV¹ôªæî»•À|,¬AX]bww¯ÈîyJıÂ`Ná/>SJ—ØÝ/_ãlHW,¶åïOå/ŸN¦ÌjBWL±åÉ—»g˜1d%vÏ{ЙÙ}æÏ†sµÇpÒ%Õ%Ýý4*7Ù=Pb÷­ çKöò[KãHÙRÃÉãÊŸíH—Ôl8y–¨Äî®ý‰ÝcÁz°®énËJ8n@׺òÁÑuPÂŽ”‚r‰Ý]êF%vO­áV*{ù”¡’jFùµýr,TYèp¢4™Ò%«›Ò%žËTVüºL-¹{<ÈJ´mN¹¶-½{ ñ(ð—¬R¹l«›º»Ô ¥?~«°¸ø’U*…h£º²}Õugz©[ðv“¶âí.âé‡xSZ ëÇKs¿Šµ0®+Õ½q¥«+Í{¦¥QãºÂƒ+u`ãÊL0è®Q>|.åð¹< v—hš…-Õêc@•üíΠ$xyŒªR™»ã©q{°TFå•Ö;¼ç=<·¬ÅÁ.[vWTvØ]->– ìݰËÓWæí)ÄÎÈú–=G¹Ú rôÌ)ÅgcJƒ)¥ô—º•ï&# ?[9ÍÀ–¾Ÿgq׳’š_fB]Ý=†*KúîîG *Î{,PçŠW6Kb7œ+.Úp®§Î%¾ÎGœo?ÆYÒw·”}`8ùëÿÙ^”Œç=¾…·á$êus÷x®ü ç¸M'OðHúnßÏ}¾È„2xô³Ýè›öÝ.‘ç éÊ„ž/>s÷Iü~Çc|¿˺;n”‡]êîîy\¥Ôï~Rcºn™Î2•é[*Ô{Fœ‚y8eÌ)¿ÜÒ¾»à]êîîW>-?T+ü9KÔ•êÛ¤.E:¿TK'Ε§Í*³¹=«ž¿*†ûU¸·KaúUjs›@rå6ˆÕÞ.…™^ßÓƒ¶"¾ÇB­ßÀ®#W^¥~÷ |Q¿ßÑ«ˆï ®u}÷X¨‹WF£Kýî°L~ªø”úÝ«‹%秊Ϋb¾ÝߘN’¿û%Éßmâ¶•äï›éØ fùQü=íâx¬ü±ú$÷éÄ$OåY*Ì.>Ì®AÉvÀJäw,üpüX±£Ž+*±Y¯®xçÃÑâÒ¿»ÉüPWô·{žè±^…;«{¼§£/+úÛd©Ð˕ķÐK…¤’œû]¬aèåt>£ÌÞ½ÜϨ4çî(/½dCøÀö¢_`«4ç®!ßu÷¸u·',ÏF˜Þ¥YÞ5þ—gîfQ9¼¼¾°"À=þܼ ¼œ(RÁû› h¾‡]ÿýØÎB+ü†u…€Û„¬p›ð¥“ >IÓÁ.Ma—q`RÁÇåQܽï¾J¿øµÊvnV9RÁ/½kt¹¢“>oâ8Þý®4ðùž°sCîÊh¿Ëÿß w5ø@£Ë]µŠw-8"!—{5ßC.gIå:Ÿ¤r¯ËU§$ð‹[¨p>÷ñCîºèûNn¥:w‹_$ð ó±f JrWÞï»ÔìÃëÂÖuÞSCî ÔuÞ6±ñº”ð¤_fä°»ÄâcËÞ¸ïÅV¸»÷EŸj°ç½X|ÇëNo³ÁÓ—qO?²Òå«Â.·i+×¹{¥*¼M<µù3ì.ÍòðºèAià³ÎxÁÇÄRa—¿ZÁo¥¯Kiÿ𺘮•ëüÖïu­w›V-‚.çxÝêmٹǂµ8~Ñ^Dð™­|`Ð]²Ðå”üy Ka:n—¤Uø´k)ÝÇŠ•?ü.9~w].~÷»ÁgüÑ•ëÜ=%ƒDð.މàmZyÕx1Ç+ÜÔ ÉÁg¼¨ð²Ôáxi ¼\ZIßï‚ þËïUÁyTð•òö—_Û²‚¸lYûC)Ã}[¨OT×ö{ÖúÓS;uCïU¿ÎÓ¶ ÞÆT¯ÎÓÀXy„¶0§<ÂX0·Ë!Œ•?¸<­ÜA[e}ÈÆ‚É[Îàò´òmá:«\ÁÅRž`úï)G0=о.?0OÃ×­ÜÀ¥LyK Ê \,RÁ//’ >&|>MÂIŸRhmÝî=&þø-¤r®H¿4X2øTþAAà·Ê—˜¢oþ˜[—{·eÝf\¹%(¼ßÄÙ¬ð©Uá»´i#»Ò‰Y.)Þ¯¢®(|jÁ¦vE•›Ú_jù/¼ßÄé^ùÎÇÄOïow¥ò6¸+¿µ¹]×SÛjùaPø "o¥;\(·Úfé+¥?o¢! üb1±K77±Kg6±Kg6°¤¼ROSy|À¸®;ºM+³|Wªói;îp°p•ë|bF0¬o*øÓs«v†•‘X4«\ïIžFˆ¥‚?–•°;–'^¥‚_Pø;Ÿ•î|žF 8|ò=W>þ>é%ƒ_,æs¥–7Ÿo2øó´• <Ž”‡LèŠÙ¶#]ôáG_dðž"TCú’ï|œŸ–o>"~Î7ŸQEÒÁß»A:øcyÓÁg>òç(Ž”é$„÷›^„ð~¥\ƒÊ¯ªtð§ W1•ò|êͧTî—JïÀaKï¶®¬ëù§b¯*|JQL6«+zýX¤R¾/R%„Ï«X*«Ô7!ü6„w`%„ßš•e*{=ËÔ·8ðîvŠç&v]«n`ô.!¼ŸFuÕ~•;@Ÿ2Ü^‘Þ0®0ðFBhpe ò[µ{KT¾)¿UœÒÂ{(–¾dù¹’Þ¥ÖæÅñcEÝ:?VK³+øÁ,Ö Šïj,:ÌÒ—KŸRXIÇäX °T–\½Tô~àJoo7K—¤0ðé\V"Vü5ýv,X©îfÁºDæÃÏ5Éà3IÁ“âÀgÖc–JŸÊSë»ë~ëcK€<¶Ðï’Á§†|WØýKVþØÂ¢4vò+¼ßµx°Ëʇݥ‡].“%ƒÏœd“Ãîº/ýîoë¶owG9ì®ûìÞ¬˜EGÁàû÷ØÐ¢ lPJ:øô%ícC =/!|f2M¡wv›^þ¤IÖ¨MŽ—¯:à¥T{ÀËμÜlø~_+H¿¸5éàÓ…ìÝÀ»nF¿;^)á—Yþ=ðòH“”ð‹wýx¹É¨hðy•ëÃñòŒÄ±KSàåîB]û}Åð€—òä/ÅÚ^j«wåm=ॸx—Ò×K7/-|&%+¸^¾+ô.õÿØ¥ÞzW»BïÒq•.…áƒ^Ö0ô®Kµ×ËA9– ”®¥.«az¹Ë,)üâ¼~*ëxWݳj`%Â.ܤ„Ïìñ ¿ ¿¤ð6qóPRøÅkH ŸRT »Üš’~ñuí·ß…&+ |jHq5ìò/ñgØeö¬J‡>䯘´ðç]Ì %)übɾ,knpyþ§¹]—’ÛÕ¤`ËX'ƒwñð¡‚Á jîá–ëqƒ?¥øw)¼ŸG£®üö b^)|jñ"ƒ˜¨Šê.üRJ2øtõçÃçâC(|H­;ÜrY2øiÉàm¢;V0øÔí ·L¸YW~û]pâ’Áç™#Áÿü÷ÊàþÈàksþ—_Û²RuŽ…{óÕ·]„›éÕµóþÜÙÂcØÕ±]få¶±…?èÕ­SÎұЭWŸÎk€Qù‚¶ÐM”/h Ñ–/˜^Ã(_pééòc’å .Zžàòžr…gË tª¸åæaè‚ò— ” (-0tA}º¦«ÑÐò]iÊÒåæiXuKo©ðÇB¿+|úšÊ®e,‘ôï~«p0J¾&׎:v ¥œ©èÓCè;©ß—J˜Sºe@ŸÇá›*õ»«Gm9 ®«ÊC*ÿX~«yX]¥ ë£Ø¤~÷×ìæuÝÎm^™YU!à·ÇÀrCìRçìÇ„ÃìÊLnf?^îûžÁX)ü©ûJãmfWªl3û±Î7Zn–*üyÑz\˜å&¡äïËÈ+üÒé oþðiTx[¨èǹ2G£ð~?# ïFatþXxøHx—y‘ÀçE4™Ø•¼ÝÀrSIqàý"¸Å?–¥f›×7¼Äs¡•ëͺîÛƒ„¡Þåô”>CKùÓ¸®‹³+ûá“q]’±i]¢µiåÂKøS9n + ¼-îÍê:õgTß$ðçiKÎ5ªëi!xKovôÇÀ:Sž(È"`+à=¹vþóOž0¢khDyªIàÝÍDÊu• ¢T¦C(-t©ææsi¼ÆséÜÆ“K øÓže žTç*c<ßÁß'½Á5ªæÆ“žY x)õtã¹NO R x£C­ß~tiãñ£ìJ]D9П÷¬hï|÷ÙW7úÙŒ.¥=Ÿýuš7Ÿ}þüJïIJYÚ”®ôÚq£ÜõT xÑÒ\³T]Úx>û/ x…ä|õ©Yg¥Š…G]ú=CA­Ø~”˜HŸ±IåÈJï^å “Ê°/&u‰ý&•Ç!¤~7[|O\)üŸ‚À»KÙ=÷?*Ißï“E!àÝTLJE€_ÊÕúÊÚÅŸrË_Òw»8Ô¯F•]'é{Æ•Âh>ø”‚ *+® ðyVô6ñ¡(ð6-­úø«bý²B]¡Þ¡•¾Xâ÷Tƒ5ŒcåºèkÖ¨+Kû±F¥à{ÿ±’ø=Å­“c€hùªZ6+ÐòdAöVPy~¬ø³óõð°<àn¹}¬è3Æ Sâw›XJ9Ð/£¥ð6­-¦øØuŸs¶¬–é`—|Øåÿ’ ÷ôÆ(|*HÓ.Eç Ë?<…€ÏÙ…÷-ißÓñ¬FÐePœBÀ§ã)ÁÝ+} K©úØ`“=¶+{X+š&ð®Xùc‹•¼Üã“ö=SòEû¾xIiß7Ó±@@5>ÝKYôX ÐtÀKûîx%~_æ‚À§ò”±­êâwÇ« ðy kzWøSè]¦cs€çŽ-¾ë —}zéä%~OåÁ¡ÄïéCjð‡çå(Çó²wxY÷À»ºïk[ißSwW<ïÊO}lPàÎ6,-÷Å­ÂÀ/µP&ôqCèÁÙˆ¥ôityýO]îÇ¡½Êƒ~™[?BîÊ@r¹‹ñ#äÒg(|\2•ô»fð#äò䛂À§›¨õ‡\ž¬kÀ]ŠBuÈå¾”ï~×:¿Ë#BÊ„>5从ÝXöÆ.ùX4¼Hßç*é»MKOß]zê±hx‘¾/®KÒ÷¥£$}l/Ò÷”¢ zø]ʺ½@Ò÷ÔsRÒ÷cbÌ–¤ï)Ä ‹j·†—›É¿ŸçñW¢.oËÊZ¬Øë!wÝ¥}¬X½ƒ\ö_Èå¿„Äïî$ŽÇásᜤ}ÏóU—4Ò¾/“DÚw›¸ !í{J¡Ÿ>0ajIûž™€Vô)b¤}·‰gç¥}_À•ö=p¹T“ö}+·{³€öý¿Wûþ‹Gû¦\]ÝÛJÏÕ»SͪÎ ·^ò4þŒÙ²ÈyW±ð{–÷ÛkݪW»Öü_)wÐ~ÊLï =å æiÀ²œÁ¥ßÊ´…ésË´…çÒÊLÝ@k¹‚±€þòS7”)G0e0qË\,å¦=èƒróÔ ¼ÀX0¦å u7E€Ï{PkÉßi‰Ü†t%ݤÜWüw?Ž"h9€jÅåÓŠ6®ùÿXV*öšþ…1R¿» ÛjL—âL—¸lNW.ópºbÝ*7 ”½û{µR¿/8üfVWÔºYåæ˜´ïæ@êþïyÏ/V¦8–ø=#ÈsÁ•ë7…~w)Fd+ô»M+~9Ä.9n•çvtx?péËfvéìFvÅ’Ùuö‰] ËMìJ1nb?¸$ñ{êMu9®u}^ íj’™]YÓÃ,ý±Äïž…<9`d)ÅJûîéN©ØÀ25’.o,ùËt­JÞeà'%}w h1®X}‘¾»M´˜Õ%Лե±›U®xýý¼gE­›Uþ©Iú~ʬ&•›*ºü»ßºýÝO£öP©ýÆ·Ò× ²>™SÊÒY°«)¾²ºü»YÜâ÷ ²s ·…o‰OeÄ¥ÒŠœ² ÷{`Qøwwô‹øÝ–1¡êÏv¦üÑà=ÔW (÷ tø¥Œ]³]rµåoÄïî¸ …_,” uºäwÊÓ^¿p¨ À ó6¡Kz¡”Ò(?¹º¼[Ê“îÊ‚þ˜xŠ[êwW›ðÒõ¢xRž0¤<ø«àï®ÑàcâQ)Ïs)ú{Æp¹~õ¿ä«O-Ô .¹:ëTJéu‰®uÅd_שº¼G‚ç êJ-oPùg$í»¡c­ *ÿ ¤}@€áK|é: `TùÝRôçy\ÌIüîÚQâ6©œ`¿»XƤ®Sq§ëVu£Ê?Ò¾Ÿ­f“ʵ—´ïî:öâ¾ÓŠü5§+;TýøŒ(à{ú‚UÏÇŸû4R½»ÔjÕ±R}‘½o¥âaW úÃÃò$B–+®Ûä®Lü—´+à»gÕÒÃÃRއ¥!Ù{ÚËàR~ ¸{ÝùÝÌç…[nfJö¾ ­\çmZ™ßÃíRÄý+Ð$Ù{h¢é¾3ð-KÖÕ…Wp¿\~£”é|ZEA<ÜrƒQ~ßËÞöƒ+D©ÞÓ¹lðÁ-™¹of)Ú»‡nP~_fDï6q§A‰ÎÇD3äÒ¡)Ñù¥ ¥z¿WP~O!|ÉëÝ…(Íf7‹ri¸]·˜ÜR8·œ½§~¬…¹åw[YÎ/5?ö³X‰c…@QùØzåIƒp»ÆãØÏb7…[NT%9ﯘòpKÏù=Üòx—îû9ÂÇ.,{ãØ‚ºï»¸Ç€»LwI¢‡Ëå~\î’zC.'¸’œO )—Çç®Þ× Šõ¾ôác­ÀŽ »«Éñ¹o~ñìC6‡¾ÇeÀ§éÂï©<xx]–:¼.Ûz—’~ÐËáw…^—Õ8¼.+ÐËR‡Û…×P¬÷ôeàƒ^*¦¡—ÿ?z©õ†^ŠVŠõîj,õ3ôr¦+¿Ç9P‚ ½+øù ÷Eù¾x)ßÓQìÃ^6ùXé²Ôá{YÃ÷²]ÙH Èžª{ÙH`£Ë€? ßýÍ`™\¾(àÒ=I÷îîã$‘ðÝ&ž•ò=¥ð.Iß3T”£.? ’¾o¥p1ŠõžjÀÑHú¾ ¨Xï!K]IßSŠï:–ºÔÒîJ~ì̦†¾ý½Ò÷¯ë ª{Û²¢ŸbáF’-Ü«¯¾}žö¢}÷k¸vªŽ pýá‡ÑÝÚ@f¯«.튡ýå æõX&”#˜>ð–˜2ÕrSO+/ðXøûW>  àª\@Ð/å.}Y`*U`Ê 3ËôkP¤æÿA[jú=S³Ú¡©Éßf2”ô=…¨b‡Nú %9Ÿ¶RA®É?õƒ7Q˜w›¸6‘ö=&j¾atÝ]“¿Kñà·®ù¾=°&›VÒr“º42ÝóÝCE6¬rgD™ÎŸBëM†•Û“’¿§æ\¡Þ7“ýXwƒÈòfvn0³+›y˜åY C»R Ú«hWBzSËsIßO?¬æ»G•ò݈^ðýXV¤rˆ]šiˆ] Á¯J‡b)“è’ÔÄC,?ù¾g&ò@¼+ø”ç|&œˆ”¬F˜¥ünf—Jldɦ<ç=ˆ¬Â,El»$v»‚ë¯NVyΧ­l‘‰]/2±\z+Úû0©Þ3q)^–¦xY~ê¥z?üUb#û¦z·3bË$ÿ ö~ʼå9,«Lh‘ºê{`…èV)áUª¡ŸB*á¬0Õ•ç¼Û³óœÏŒØªw7tßõýn8V[õ~аgÌ( A”MÉB€Ü˜P>ìX@s6 +6Û|.‹ñ\Ó¹Ò›Îmº4gÓ¹­Ç›R£µ3])Ø_Š>0è6z7´Î%¡çËO¡ÜpòŒ½{RsÍõ¢½Û‹²Œ½(Å5e9·ÇBÇR•m5¢+‰dï™×/²÷˜8Fǧl+ÓùÌFø*…{ ¥¤|_ª¡\çmâ&†”ï)ÅæŠò©i]ò©i]ê²i]Š´iåænûn‡I.åû±ðH™”ïöK¬µq]÷¤וÐܸ®–WŽQp…gV´w#Ž®„ïÇÂ\E öî2<o>ŸÊ15« »ù’O>ûÚ¤®º]?ùŠõžIF)Õœ®¸mcº~áJ)E‹T ¸2Û#ÉÞÝß|^8ÅdþjNWd»9]?~©X…ã£QújRy.WÞO½WZw“ÊŸÅywž&ÈÕ’ÖóGÅø[ Þ·noeìã×øÖu•x|ëÊÜßú¬çS ¶ëð­4Å·²’¼/íR¤w›xÀC9ÎÛ´Äác3#¬Pïð§û½ûyÜ­ä=|Ѽ§‚|àñgE 8«õž]+>/Ür›U’w×beîÎr•?Œ’¼§Y|W¶®àü$ywbšJò¾X¸+ÍzÀåJOŠ÷­½—»=ßîÛÝÞý@þ KòÎ0ø’¼§ÜÇ ¸Ôå”ß|H•2ಒ¼g°({ðuÒ¼O0¨Hï›é —M¹/å7Ÿò]AwE;{”©ãsÙâËAV¨÷ …zßFòØÇ⻯ g¢»½ç,xW0ú±¢¥€}_ÑJöBÙOÇ,1 ¼ëVåûæ€â½g$¹ lÁR¤<àE5”àüRyÅ{·‰çà${O5ÐóJqÞ&nž)Þ{…Õ8à¥|‡W)·(V#ð®0æC0ÀRŠó©!xì²Tèå§PñÞϹlQ¸÷cá²E ÎÛ'¤`ï[·Ý•=ྩõãX0°QAw]t¹‹-Í{:jÐáw)Ê]þKóî.õ:èr‡Oš÷”ÂôW´÷eˆ¥yN¬ááw®¢½gPh ºüøKóžw±TÐ]AçÇ^,K]»ÊpÞ bŒ‹]vÓáv1îýå ¶– h¾¡åÞK”跃њþóv8ššýÝa(R“Š€Ïšûm¡n\s¿-üjÕÜ¿T ¦þ¥cjæÏ{Péšø—Hï¾ Þ=†ð5¼g i ³+Õw˜åBåa–ݧHï®F^‚÷cYw›YÜÝe¨¬›Ø}»¹‘]—c›Ø¥üØ•IÞÀ2vKyͧ[ñAØý>s•Øü±ð°¾¢¼»­TÁM+?oJl~ó°Êÿ`e6ŸzSò7¬«v†uÅqV®Äæ3_ƒ"¼‡p|h¤uOõÐ ñ~‡K—zwçQ5«üS”Øý”¡8©K½Ë þ6ª”-%v÷Ó(iÕ±»ßC‹I]'M*ÇUb÷ôéV»»nõ“A¥¦·Ê¡3§¿ðañª´˜Ó·‹½Ÿª­$òÆtE0¥ëÎuSºt`Sú¦x¿ögCÊï¹â¼»ÖT9è’ˆèÒÂ(E‰ÏA£ðùŠèç Ê2YÐbDÙ׺ػ{‡qœ)¾QŠóîɈ ,Éû±ðçR¹Í» –’¼ÛF?g±Ê÷äËÏ–†Qn{)·yÏR*Å»MÜúoº(ÉŠuuk–¬äDŠw¿‹ )ÞSC´KŠw›¨ÊHñž¾(Þ=ÔZM+ÿT¿˜Ö¥ŽšÖFÊ+Ø»_DéÖ¸rE’wO2–1®Üã×íÞ \‚½ß1R†ó®;Õ¸r·[Ο2KÜÏR•k#iÞ]¾È¼.•Ú¼ò»«Û½»Úlªi埵4ï§Ì;³ÊÝ6ÅzwS©ÚšTž/ÐÝÞƒÀR¨wWsÊe "½ûq+9«Ô•3û ª½çyë³J¥üš?+]Uzón—+ŠëÇMÙ' ò¾U<_žÐS˜w—"Ç_Z1ɤzϲ‚Ù Xúõ±`Æ¿®QŒåzGªwWcEùÇ¿Òèfï.Å/Tï6-Í6Ø2™©TïéyJÛñ¯\Jõ¾ô¼dïiÝ€Køð°¬E6®VÔGÈå²H Îß‚ò›ßêtWªòì ,í8ìò`¿œOçÉÞ ¥{‰ývW5Â.†)Áy?ë~ ß3<‰v×»ÂîÊov×ñ€ì P÷ ºH…zOÝY*è’O…zO) ©A—Y‰ë}é'éÞC ü‰tïdnƆÝÕ®ƒ]>0ìòy»TúÃî p»’ï»|àñ×EõýØ  œøÝÝ{º#vW?…]ÎIe9¿L!…{‰•¿ïè^ï§·D¾;±T·‹¯šdïK‹•æü¨ÒœÏ”ä]-Ьa—rdï©%ö°Ë«dï.µ‚³ÃîJì_±>xW©À»{Þuxà宎¢½§òX¥VV)íÆÉR¦5«Kä7«<!Ýû©í(µyןa¥6ï2ì9£ºÂÌê’êRë*a¥{?5 +üßÊ“&uiÿ&u$0¨oÂw×€£`NWÓÕצtÉΦt¥7¥Kv6¥oÂwךª)]·÷RJ»f”{1¾›J»fôíRï§Ì )7£«nft¥7£œÃŸ³V¥ mFבV3º.è6£œY¾ßœ„ïDznÔŽ7e¿Þ”gòõ_êvÜéêî¸ÓuñzÜéÊŸï?U ßãºQC ßmâJø†CÂwwœºrœ?–u¡ôáQ)‰‡Öut>ÿÔbëºÔÚ.ue`¿ºTÅz?õæ: ß µeãÊÝ? ß—2ùú³çî?W öî‘à¨Kù¾Œ„]WŸØ•˜<_ÿå{b7×%Š›V~?$}?còz…{·ÐIú¾P,é{L”Ò*Ù¤}O! ªfuEMÕ·$ç=—ƒê‹ô}«¸Yå’ø«YåS´wWryþ¯(bJúîBðl ÷¾Õ.´®‹Ñã]ù¼¬¸Ù÷5WoÂw×b%17¯+R=î•;%Ò½ûy«ê‡{e¿W0I÷ž ÒfW0ðá^Á‹2œÏ|‡—îݦ%¤ÇÁ®,ܦö¯±PнÞÓ”_6+?XK˜ÏÆÀªÅ±1ÀÜ}óxÈ]óÙàáu ßÓ®á»yçñ€øY.*¿ì§cc€¦ccÞLº÷ šciÀŽ?–4Z<ÁvWöî°ËUƒ„ï™ý”f³ÓJ5èr%­xïA—¢mÐ]9ºãpùë$Ý»ÈüßÃ.u”ïa÷-Þ{Z 4”åüݳ~ºü"(Ëù@È<ÐÅ\P¼÷eö+Þ{LTæÃî »üïQ¼w?p]Þ~°Ëá:Øåø‡]^#¦xï‹«‘îݽË]õ »ôá] ˜‡Û¥‚·»®Ü»K:>v (±†Ý%ÌìR} »oº÷`‰¬,ç—áR–óAƒ‚sü.³ êz¬aàån»Â½§kxW»î;² ÷žÊ³¼4ŽJ÷ÖØ¼Tj£x—$~,Xƒ^Ê¥½/ß—QÖõÞmâ×UßÓ‡`^º÷e¼¤{lT•ïô*â{jÈwž—:ëÝóþ ½+dùX5Àý<\/+è ¬á¡'ÐzW@}è%R¾gP8”½¬a6ØO†—Ù¡tÁw¿‰WYþ4»¼VVÊ÷Sˆÿg¾ 7œ•å¼Ë`"(à»ËÐr8]jÊÁ–'oï=(Q ¶+;ØÒÍHõžÑ` ú\ñÞ¢¥z/a©Ãé¦ò½ÿú÷ÊÞý¿²÷ŠHûå×ÇÀ_êÛ6pãp ¼µúõ)Á]ïêÕÇÀ-•êÓǰÖ`~]ßVkug?‹ ÆÀlnåÞ[Xó¿ë‹‘®Ùÿ8jî÷£PßšùmÀ®y߆-y·ÜÖœï!Ä€ÔŒ +Š£f|[¸eU3¾-/šw[øóS¾-”•kÂO àKk¿7SÞS†ºgÍø6q›YÞS Ãü[Íø÷1èÝ–1™—Þ=]„? ÞÝ$ŠÀÆuUÁ¸òŒÕ—c¹Ê:ËUÖ!ß~Î3)޷΋[¥¿ÓÕÞüî=вÿŽõ*@äûOúÌìJ\od¹Ü’êýÔaDÏçÝ'ѻlj–|þi ®hª2œ7*ÔÝC+'µÂ½§ëø¦,ø&ãJ1RÑÞó8ÊøæuÝpn\W§ÿWT¢óµbŸìº=À.ñ?À.}=Àòt¤Tï™…XØ(Éù˜à¨¾Þýz,XÙƒÇMñ²«ÉA–2êýÿJ9Î/X(ÚûÒ,©ÞmâúBª÷eÎ+Ú{JQö ¸+;vÀå‰#]ì=5¤ÄšŸ¬·pï[åãjWžøl0#É·ã7‹šý±9@Ó/¦â½§]ì¨À»N)›ìÃÛòwµëØ×ß /¿¥Ês~“c…Àçe…Àp?å9ŸáB³${_FRyÎ/]¨xï6­û¢ïº/:ðr¡¢xïÛ»/ãߤ{w)~|¤{‰¢müîºèüØÙ¢„x—hx—éð¼ TÂ÷e*KøžÊS™¼+/ý/%ìÀ»‚ðÍX6ùØò ø¾Õ0ô®s ¡wéï¡—Aóºß{`{Q¾/3Eßmâ7Oßó@ Ÿ¡—÷ )Ñy—âABE|OoPµ ½l²"¾»7_¥|·iiØ¡—ŸJt~«Fè]òvèåü’ò=õ¢|‰M½«É÷}Ye:ŸéÀQ½ë¦îcÝÀë|7~„^®·•ë|Ú…Iôãð½|`襡ˆïKG)â{è¥\zW pèåñ&)ß· j󽔜C/7»³/Ê÷¥¥|‰M½\nJù~Jñ€êÏcÝÀçð²Y‡ëe©û_š„ï®;=Š’ þ ¼üŸPÈw7 nHÊw?oÝÈ}°Ë4»+ ¾Ñ]æMî’ª .ψ+àû½ÞÊt>¢Ï¥|éEùžÖRr¶üÜIù”ðiU¼w›¸Â“ò=&ÊöqºÌ²£xï)•wý_åûö;•ï*ð·ó?»$‚_ÚÀ_¿Ocà¿Ï6 ÷¾Œâ¯6ðLèHÐw× }ýc Ë…ûfòKðö¿s ÍßÛ€ÿÆpµð¨ô;PßJ}1éþÙn‡ÿ‹-ü¥ý×Öÿ«-„éßládüw[øûÔ=ðŸyZú_×§ý·»Þ¯Ôï¡Ó·"¾Û²#– æÿøJüîRÜü(ñ{ž·ÂœM経R¿]Šš¹ ÝYÄF)ÿ̲/Œ)Ï%U–ói+aPwVw£º…lúNJTšsw;5éðJÂ*ä{JQý-Ä®£Ave,³+t?Ðro¡B¾¯Õ¸c[ú·›ÌÑ2¸kŒ+չɠt—¬t—Éè~ððY à·–~¯’À]CÆ›ÝXtW^õ Ëm¬ÒÀçUK´»TÍîâîJNrË^7¹œú•ïÜÁó—÷‰–Þ…^òÏläA…PË}™Á»Ð:xhW´x ]&C»®7³\F• îQ¢jdùÅ)|jçS ÏoìUèw›ø;Y ÏÛÂ9ÿɼr-P Ï» ÏÞ—>êí¦•;5ø=ucƒÌ*¯Àï©5¾Su»÷Ržâ«„çÝ+¢×Œ.é܈.é<>•Ò¬å9´’Ág(¤QŒO%<t(ÙQ–1¢\±• ÞOû•eâN)ëQfnª„çó4ÊíF”W¸TÜw—á±Ð’ÁLJ`’” >ÖÍŒ2åsÉà]æƒÑÊw>¦—|çcZ~¬(Ó+Ѝ÷@Éàó®š{,^)‡^¯%ƒ»Åüå ¬\z•Þ¥¸ übZWˆ²i]¹i]êtþ¯@^Éà®7+×­ƒ{¤Øç–+ƒÂý*Öâøþó¨@®Üö*!Üd íŠf¿¯J¿QûåX·RÄÏ€æ/¦v H ]ѹÇ­ªðË$-)üVõ¯f–s¾â¿»ÐŠA7²\øÕeß~ïün-™üøÝ‚³úh)“gɺënìƒZÊÆùßZqÏ¡–…j9¡–¡£•ü|º‰ô•üÜs‡’·©e¢Ãí5ÙMY·òÜ‚¡åE€ß¼Õ×»§­Ìç®ùÖÂÇ´®h>®TIïÔ–~º´ð6­XîxZª‰uß·ëN•ôà–’ññ¯?÷-ÿZ+£wÀ]QÙ—+¤ºðÛ5Ä@–~­üýw«"À»ÞJ ¿vî±±Å1¸+¯xö ¸À¬Ìç®;µúûæV)á®!«vé¶¾û[|×áp)\«t|Iá·yRR¸M˜Æ%…{²R«Í2ÔTêó)µbŒï æ¼+´9ð.Eþ€—M¼KM¼<­Y1àSyþ4V ¸ xWÒñ¸Ýumú±ËE=ôòwæ{èåáêŠwå©w‡^î¨Uîs—â(ô²É‡çå!„лî?èÅ»J ¿õ|%?wϳTè]©ÅC/0ëÎïy {£¤ð1ñG¥¤p›(ÈôRá ½/ÉÏý@J½Ô zù®Ð»ôîлªz¹ÃSÉÏÝQšÌ|Ñò¿ Vp£V–ðЧV>=ÖâÏ*t­ô³•%ü×ÒÏehåW×Ði-ü,áÁˆÖ}•`Ҵ쳄¡–} ÏѲ¯ñ D«¾ZƒéÑ¢¯Ö`E´æuB ¯ncJC ¯ö(ÊšÎä¬u_ Rj6¡¯y³HéÏ=^>Ë”îgiåŸz¨•˜ ƒW/½3¬ëšG¨á§›WÊ$ï ìÊ-obWù&vEF7²+ {3Ëлóë<4Q,¸É3ïÛÈnn™b$´ð" ¿éÊ~$íL®bÁ]‹¦³Ñå]±àîÛ.õéFw%[otyÙ3´ðÃò-¼V1EÛF—³«/g­%)7¹Ké5¹7)г9*' Ïj7ßµÅjT ô0ß™Û;)üš‡ÕSKw.”ð«ÎúÊy3KçFáà§±Yžå)zÍ  ¢Á« ,1°k¶Í+»:ø5 jñÊ~j¨à‡å2xÙYŠÃ +'(tð«ï„~•ÐF„ž%T®M*ÏNÞ›T¸„ž­áçAñàUÂÔ•âÛ ®nƒº„csºäa›×%)›ÓYmNiÞ›ÓÕ7cºäncÊMû{cºR°Ó›/献:ÆtÉÝÆ”=!<ß…ccJÍ@_þÎ:ë6g»«”zÍ(gç¡…U!<¹¦ mFWkGFšQ ÇÍ(…ã£1U¶Xàë‡Æ•×°”½ ßÆÑ¾êëß'úCÏ11ÛPà÷K]ÑàY²ê´³ Û«XðZì·q]¹Ñ‡y¥fn\W¥¶®¼Ó¤üç5X:Š÷ݨߵÒ(.‡•µ†yŠ/–Ù^o®èå*ÿy½ VjbWˆøØ\Q«6±<ÜÒg¿O–%´ïZXð¡}ŸŠzÅË·¡}ß3Ú÷UB¯^ýö«JJ~î"Þ;,v}fñbÁ°²TªÏVVQàÇl·€vñÇq,@5Òàòp"”ï4è<ï´™¥Sºw¾*n¹•ú¼Þ%Û6³¼ ¥p/+jöãH¶^à†µÛ%–÷i¯%*ó¹gsÑÜ®ðõ3·úä÷ 4E€»\(üXÔä®n r9óM.ž}hr™:5dïï¬"Àý¾ø¬³C«Ôçž^y8´z‡CK½±M.í–"ÀÍÖq Å¢q E5·é]òð8ТøÚô.½¹éå9"À«ó ÞSîó*¢«§p¿ü^(÷y­”ÞMïM¸Äû Ù;ÙX™à›Þ•½é½ùæ·ä[nz©á(÷¹‰¢¶ÝôòG\àUk zÉÆ —=lÿÔ(ü„aÈÞ§ dï*¢†Ùðrc¥p? ¯+dïúi¥ÞÜð®tä /mƒÀ µã/Uà†—÷(ôÉïcƒÃô²Á㉬>ùíqé“ßžÜÙ»¦‰Úv£»‚²ÛðòL@ñß&:õ8Ià³ÆIk tIF£»²4º+º~øº˜ÜP¾Ó¢JÜG³¬Óäò`I1àžwÊØ&—&(´ïôîÀmHßW šP¾kõà·Dà^°J}^Oâh›Ú"áûÍï¾ß|¾)ckb¯‚•~´ A¥Y½jìï}gÁºìÜœ 4¡×3h4WÁúh²f³JøâºËdÌÊd ½€C€,áQŽ @µ Ÿ®*ÕòÏJŒZýU‚:Zü‡ÙÑÚ¯:€MKÿ0­üªƒå£…_½ïZ÷ÕFªeh-´ïÃô„ö}ñpE9Ðý$¼Õ¯A1Uëþ0C!}WÑõˆ?̑Ҡ»AÀýάr3Êw 3Ê÷©ƒMëJýݸR 廆EE¿¥ýŽ@ðÃ{Tt7ˆ…à.Bû®nð4µKànlWØ~sË_˜w &—ŽX‚×Ìóý7»l0ÁkÈ'Íîénx—êÜðò¥D x.*æÍ.ç)´ïê 5ä¶² 0¤ï|õòafa|" üPÉäò<1¤ï«ÎÊ‘ÞÜòòQh߇•Úwö·Œ-³_)zÖY% í l7´+†ÞÌò÷1¢Às°¼ ab—d?€åˆØ¬?€Å£Bþ.Ì)#7°K‘À‚ˆÀëm£ˆ/öØ&–]¡€_µVJš6¶\6 žs‹_¤À¯’; ]n`—˜l`¹[o^W‰q¥`«”èÕkNªq]‚ºqå1]Hà×Hï$ðØÖ5o¦u%r7­+Tß°®‘šÕÓlTW\·I]‘Ø•G°!_#åþìÁ˜.qÜ”’ƒÀ¯Ö–poHW$¶]uÌèêêéѨF,x. ¬ðÀs(››Q†Ö†^‹˜š~»ü < 1Ÿt6ª¡‚—m¢Ü>< ÚÃ¥x>\Xvcø°¬5<Ö^,z¨¼èÕùõ‰ð6¬wái·¨×6¯păס":Ì*~íCÏ'Šˆ¿§âû¶ª¬cb)F*-ºç]û-¶7k‰íâòâaHâYk}æ¼éåÎðoM/ ’¢»‡¼§Ðô®›Þ¥ç7½Tv”ÝÏâ[nz×l´Õ]ùÒ›ÞÔ=ÜÎüp¨{­k™^z!‰—m¥œ;àÅì†$ž¶šji³ËÓÖPÄ Pª¥í-¬hïf—™["¼~LØÁf÷ ŸÕìò¦‡R¢P^Û3>klÏ8ã –—Ì.cœC?Xò¿Ÿ”ݵØÁá粨wh,;4 óÃîœècàGœÆ¡Ÿ56x>TE¼~OРҢûEbÞ#¼Œ¥åqZ h"¼– Ô¡/°}¬0B¯ö0»¡ŠŸŠŒ.Ô"üª4.½_¢ø«ß>?>>?||þøöÛ_?~züÇÇ/Ÿ~þå·ÿyüéù¯/ÿø‡¿¼|ñåçOŸëßÏO¿~ýßo^¾øçÓóóÓë¯Ïÿõø%þúÓË?===ׯÞ~ûêO_þýõ9oÿÿÿPK!r®»úçaxl/worksheets/sheet6.xml””M›0†ï•ú,ßI»]¬6VÝC¥ªj{wÌVüAm'Ùüû¦¤Q¶+eOØšáyç("{p^ZSÑ,I)#l#MWÑŸ?o>Qâ7 WÖ@Eàé}ýþ]y°në{€@`|Eû†‚1/zÐÜ'vƒ‘Ö:Í^]Çüà€7ñ%­Xž¦™æÒЉP¸k¶m¥€µ; &LЬß÷rð3M‹kpš»ín¸VˆØH%Ã1B)Ñ¢xêŒu|£Ð÷s¶äbfÇË ¼–ÂYoÛ ŽM…¾ô|Çî’겑è`l;qÐVô!+VKÊê2öç—„ƒ?;“±Ýk·cà©©hŠ Ähœp|ìá3(UÑÕœØïÈÄ#Ù‰x~žéq@ßi å;¾ÛÃ]p­Íq ^`ÃQ8É#5B×<ðºtö@pxê|\…¬È_{³.Řû€Éóèb_çY––lÕ‰¿áÕE8;…ŠQåzEL>SL/óXÊ+B‹·aò¹Ð?dt¾ZLžÿïhù!L>Ê/z¸ŒB‹ ¡i¦Á ¼ƒ¯ÜuÒx¢ Ó½¥ÄMãO<;Œ3¿ÅUØØ¬žo=~Ê€“LôÛZæË¸q§ŸCýÿÿPK!!¦_ï¶Qxl/worksheets/sheet7.xmlŒ“Ánœ0@ï•ú–ïÁ@š¦A@´ê*j•ª*íÝk°Öö¸¶w7û÷@l«¦‡= fdó‰ÁÇš)¥QàTÌpO+§¥¡q  Úù#gE‘ç…SÆó…P†kØuFÃõÁO $€U‰êƒãJsúœSao4º‘;cM:ÏPΜ.Ÿ{Aí,y¿ÊJ¯ì9yƒwFŒØ¥Œpb)ô­óƒxDjªÖÁÔv «ùF–›‚‹¦šûóÓÀ)þ³©Ý;Äý´ðÜÖ<'B zgŠ^Gø Ö¨ ‰ýZ˜3P\ˆMõ'^éOó€¾ÖB§6}ÇÓ0ýè6Ü‘ðä]¶ç-DM §ƒ³âîRæV%ÕTOŒ†'éÜQMWA–ÿÿ˦ÒÓÞ m X$‹cSHy[‰#U§é!Ú9©\,f˜”òÖâ¼”:ª¾ªÐ™…nö¹ç,,ÂyFqÂq²¼'ù¦„nͺ¼@µçÙ-gbZš¸üÍoÿÿPK!¬Îj†·Rxl/worksheets/sheet8.xmlŒ“Ánœ0@ï•ú–ïÁ˜4Mƒ€hÕUÔ*UUÚ»× `­í¡¶w7û÷@l«¦‡= fdó‰ÁÇš)¥QàTÌpO+§¥¡q  Úù#gE‘ç…SÆó…P†kØuFÃõÁO $€U‰êƒãJsúœSao4º‘;cM:ÏPΜ.Ÿ{Aí,y¿ÊJ¯ì9yƒwFŒØ¥Œpb)ô­óƒxDjªÖÁÔv «ùF–›‚‹¦šûóÓÀ)þ³©Ý;Äý´ðÜÖ<'B zgŠ^Gø Ö¨ ‰ýZ˜3P\ˆMõ'^éOó€¾ÖB§6}ÇÓ0ýè6Ü‘ðä]¶ç-DM §ƒ³âîRæV%ÕTOŒ†'éÜQMWA–ÿÿ˦ÒÓÞ m X$‹cSHy[‰#U§é!Ú9©\,f˜”ÿ å¥ÒQõðU…ÞøÈ,t³Î=gañÍ3ŠŽ“ä=¹ï0%tk6ÐÝ*=Ïn9ëÓšÐÌÄåoh~ÿÿPK!å¨uvFYdocProps/core.xml ¢( |’ËNÃ0E÷HüCä}b;¥/+IÅC]Q ‰ ;Ëž¶‰cÙ†´“¦!¨ˆ¥çÞ9sgädu¨Êà Œ-j•"€µ,Ô.E/ù:\ À:®$/k):‚E«ìú*š‰ÚÀ“©5W€ ?Åo›ÇçnÕ°Pí­ ,‘‚ ÜÕ&»-áàQ¡=^É­Ûø;o wÇÞsY÷œ.ö 2ðAØ)öYyÜ?äk”ńބ„†qœ“9#3FçïíØ_ým°S¡ê‡ÿO\´D2ÍÉ’Ñ%›.GÄ3 KðÅgȾÿÿPK!±ë è'xl/printerSettings/printerSettings1.binìSKJÄ@}Iü!‚!xã îÅdI&1ݳM C:t¢ OáA<„x‚9€'ðú:èf ƒ 7‚ÕT½ê®âuQT (4¨BÂм)Lé÷ÄD8¥Ž‰·…7Á àñ¼ï›½šxˆ¹ïç~@›‘«í(ÓÏÞWªCŸêðƒ²Î§ÓÙ1V¬x}~ºÞôÃöÜý…êþ)þj¾çÊÕ¿¢Š\^9ÿ/k{’Cã–{ÒQï8Ûã»"f¦Æ9ÜüW‰ˆ³ ³F[Õ9¯\´Ê ý¨%R& «UÓ/zm”E%«‹T¢RYÞoq™žG.ÍÒØÜÔ “³›¶ÝÔ÷OÿÿPK!ÿúŸ·8docProps/app.xml ¢( œ”_o›0Åß'í; ¿7†ô¦È¸êÒM™´©‘ í³g.Áª±‘}‹’}úhRØ’<ôíúœËÑË5ìv[ë¨ç•5)If1‰ÀH[(³IÉcþýâ ‰< Sm ¤džÜòÏŸØÚÙ*ðQˆ0>%b³ ÔË jágÁ6Á)­«†£ÛP[–J½•¯5¤ó8¾¡°E0Í! ‰‹?ZXÙñù§|×`ÎîšF+)0¼%ÿ¥¤³Þ–}ÛJÐŒŽMè2¯NáŽÇŒŽ,“BÃ2óRhŒ¾ l¢ÚZ(ç9kqÑ‚Dë"¯þ„±ÍIô[xèpRÒ §„Á€Õµ ‡¾ÖGÇŸ­{ñzFCà öå¸w\«+žÌûŽPM;»„$SÆ\¡ÿP®…Ã#ÈÉ„¹§ˆ ¬#LÆ„ÖÞxÞà§Vtyú±èêŒw}Æ»9êLNÉ'õÓÆgbM>Ä?£_ÚºfÇó‡lõãë£{ýTæÅ?6¹½û­›Š,«„ƒ",êa+[……sº YVÂl Ø÷üotwäiøðäz_ÆaýG£ïWžÿÿÿPK! > LÐ+°=xl/calcChain.xmllÝÏÎ,Ç‘Xñ½¿q÷vý¯2DÍB€??€ý‡ ¨(öÛ; ã1Æ<¿#î­¼Ù§£:ëäïþñýåÏßýÏŸÿöëŸþúËß–ø|ûîç_~úë?ýé—þáÛÿoÿå?Ýß¾ûõï?þòO?þù¯¿üü÷ÿýó¯ßþñ÷ÿñ?üî§ÿüÓþøãŸ~ùnþ„_~ýáÛÿþ÷ùÏßÿëOüù/?þúý—Ÿ™ÿò?þú·¿üø÷ù¿ûçïý—¿ýüã?ýúÇŸþû_þüýúùœßÿeþ€o¿ÿÝOßýí‡oÿuûöÝŸæ¾}÷ç÷¿ÿ·Ëëÿ½üo¾~{áËÜõdÞÿ/çs×ÿÿ…ç·–ù{þÿå_ÿÜ÷§,ÿzGÿþÊž¬#WÎ\¹r%7¸ä׌jÍ=¯¹ç5÷¼æž×Üóš{^sÏkîyÍ=o¹ç-÷¼åž·Üó–{ÞrÏ[îyË=o¹ç-÷¼çž÷Üóž{ÞsÏ{îyÏ=ï¹ç=÷¼çž÷Üó‘{>rÏGîùÈ=¹ç#÷|äžÜó‘{>rÏgîùÌ=Ÿ¹ç3÷|æžÏÜó™{>sÏgîùÌ=_¹ç+÷|垯Üó•{¾rÏWîùÊ=_¹ç+÷|÷Ó0÷|çžïÜó{¾sÏwîùÎ=ß¹ç;÷ü䞟Üó“{~rÏOîùÉ=?¹ç'÷ü %È'7½|J•O±ò)W>˧dù-Ÿ²åS¸|À¿Þ=˜(‚ŠKï~éÝ/½û¥w¿ôîËÆ¥p\JÇ¥x\ÊÇ¥€\JÈ¥ˆ\ÊÈ¥\JÉ¥˜\ÊÉ¥ \JÊ¥¨\ÊÊ¥°\JË¥¸\ÊË¥À\JÌ¥È\ÊÌ¥Ð\JÍ¥Ø\ÊÍ¥à\JÎ¥è\ÊÎ¥ð\JÏ¥ø\ÊÏ¥]JÐ¥]ÊÐ¥]JÑ¥]ÊÑ¥ ]JÒ¥(]ÊÒ¥0]JÓ¥8]ÊÓ¥@]JÔ¥H]ÊÔ¥P]JÕ¥X]ÊÕ¥`]î~Þ­KÙº®K麯Kùº°K »±K»²K)»³K9»´KI»µËƒ^¨ÍPY»–µkY»–µkY»–µkY»–µkY»¶A]ËÚµ¬]ËÚµ¬]ËÚµ¬]ËÚµ¬]ч¢U'ÚV½(šQt£hGÑ¢!-kײv-kײv-kײv-kײv-kײv-kײv-kײv-kײv-kײv-kײv-kײv-kײv-kײv-kײv-kײv-kײv-kײv-kײv-kײv-kײv-kײv-kײv-kײv-kײv-kײv-kײv-kײv-kײv-kײv-kײv-kײv-kײv-kײv-kײv-kײv-k·öµ[Y»•µ[Y»•µ[Y»•µ[Y»•µ[Y»•µ[Y»•µ[Y»•µ[Y»•µ[Y»•µ[Y»•µ[Y»µ¯ÝÊÚ­¬ÝÊÚ­¬ÝÊÚ­¬ÝðôñüW€û€ñ ñËÚ­¬ÝÊÚ­¬ÝÊÚ­¬ÝÊÚ­¬ÝÊÚ­¬ÝÊÚ­¬ÝÊÚ­¬ÝÊÚ­¬ÝÊÚ­¬ÝÊÚ­¬ÝÊÚ­¬ÝÊÚ­¬ÝÊÚ­¬ÝÊÚ­¬ÝÊÚ­¬ÝÊÚ­¬ÝÊÚ­¬ÝÊÚ­¬ÝÊÚ­¬ÝÊÚ­¬ÝÊÚ­¬ÝÊÚ­¬ÝÊÚ­¬ÝÊÚ­¬ÝÊÚ­¬ÝÊÚ­¬ÝÊÚ­¬ÝÊÚ­¬ÝÊÚ­¬ÝÊÚ­¬ÝÊÚ½¬ÝËÚ½¬ÝËÚ½¬ÝËÚ½¬ÝËÚ½¬ÝËÚ½¬ÝËÚ½¬ÝËÚ½¬ÝËÚ½¬ÝËÚ½¬ÝËÚ½¬ÝËÚ½¬ÝËÚ½¬ÝËÚ½¬ÝËÚ½¬ÝËÚ½¬ÝËÚ½¬ÝÛ×îeí^Öîeí^ÖîeíŽß\ñ£+~uÅÏ®úݵ?¼â—WüôŠß^ñãkY»—µ{Y»—µ{Y»—µ{Y»—µ{Y»—µ{Y»—µ{Y»—µ{Y»—µ{Y»—µ{Y»—µ{Y»—µ{Y»—µ{Y»—µ{Y»—µ{Y»—µ{Y»—µ{Y»—µ{Y»—µ{Y»—µ{Y»—µ{Y»—µ{Y»—µ{Y»—µ{Y»—µ{Y»—µ{Y{”µGY{”µGY{”µGY{”µGY{”µGY{”µGY{”µGY{”µGY{”µGY{”µGY{”µGY{”µGY{”µGY{”µGY{”µGY{”µGY{”µGY{”µGY{”µGY{”µGY{”µGY{”µGY{´¯=ÊÚ£¬=ÊÚ£¬=°Ó [°× ›°ÛIÛºß ž°ã [žÊÚ£¬=ÊÚ£¬=ÊÚ£¬=ÊÚ£¬=ÊÚ£¬=ÊÚ£¬=ÊÚ£¬=ÊÚ£¬=ÊÚ£¬=ÊÚ£¬=ÊÚ£¬=ÊÚ£¬=ÊÚ£¬=ÊÚ£¬=ÊÚ£¬=ÊÚ£¬=ÊÚ£¬=ÊÚ£¬=ÊÚ£¬=ÊÚ£¬=ÊÚ³¬=ËÚ³¬=ËÚ³¬=ËÚ³¬=ËÚ³¬=ËÚ³¬=ËÚ³¬=ËÚ³¬=ËÚ³¬=ËÚ³¬=ËÚ³¬=ËÚ³¬=ËÚ³¬=ËÚ³¬=ËÚ³¬=ËÚ³¬=ËÚ³¬=ËÚ³¬=ËÚ³¬=ËÚ³¬=ËÚ³¬=ËÚ³¬=ËÚ³¬=ËÚ³¬=ËÚ³¬=ËÚ³¬=ËÚ³¬=ËÚ³¬=ÛמeíYÖžeí‰ýÅØ`ŒÆØbŒ=ÆØd¬]ÆÝfŒ}ÆØh\ÖžeíYÖžeíYÖžeíYÖžeíYÖžeíYÖžeíYÖžeíYÖžeíYÖžeíYÖžeíYÖžeíYÖžeíYÖžeíYÖžeíYÖžeíYÖ^eíUÖ^eíUÖ^eíUÖ^eíUÖ^eíUÖ^eíUÖ^eíUÖ^eíUÖ^eíUÖ^eíUÖ^eíUÖ^eíUÖ^eíUÖ^eíUÖ^eíUÖ^eíUÖ^eíUÖ^eíUÖ^eíUÖ^eíUÖ^eíUÖ^eíUÖ^eíUÖ^eíUÖ^eíUÖ^eíUÖ^eíUÖ^eíUÖ^eíUÖ^eíUÖ^eíUÖ^eíUÖ^eíUÖ^ík¯²ö*k/¼Õƒ×zð^^ìÁ›=xµïöè垾݃×{ÊÚ«¬½ÊÚ«¬½ÊÚ«¬½ÊÚ«¬½ÊÚ«¬½ÊÚ«¬½ÊÚ«¬½ÊÚ«¬½ÊÚ«¬½ÊÚ«¬½ÊÚ»¬½ËÚ»¬½ËÚ»¬½ËÚ»¬½ËÚ»¬½ËÚ/Ê–µwY{—µwY{—µwY{—µwY{—µwY{—µwY{—µwY{—µwY{—µwY{—µwY{—µwY{—µwY{—µwY{—µwY{—µwY{—µwY{—µwY{—µwY{—µwY{—µwY{—µwY{—µwY{—µwY{—µwY{—µwY{—µwY{—µwY{—µwY{—µwY{—µwY{—µwY{—µwY{—µwY{·¯½ËÚïÒâeÚ²öÆë´xŸ/ÔâZ¼R«wjûRmY{—µwY{—µwY{—µwY{—µwY{—µwYû”µOYû”µOYû”µOYû”µOYû”µOYû”µOYû”µOYû”µOYû”µOYû”µOYû”µOYû”µOYû”µOYû”µOYû”µOYû”µOYû”µOYû”µOYû”µOYû”µOYû”µOYû”µOYû”µOYû”µOYû”µOYû”µOYû”µOYû”µOYû”µOYû”µOYû”µOYû”µOYû”µOYû”µOYû”µOYû”µOYû”µOYû”µOYû”µOYû”µOYû”µOYû”µOYû”µOYû”µOYû´¯}`°€Â H,`±€Æ ˆ,`²ÊB. È,d³ÎB> -d´ÒBN I-`µø»#倕b‹Ì¨->p[| ·øÀnñÞâ¿Å‚‹ (.>p\| ¹øÀrñæâÏÅ¢‹L¨.>p]| »øÀvñîâßÅ‹Œ(/>p^| ½øÀzñöâïÅâ‹Ì¨/>p_| ¿øÀ~ñþâÿÅŒ (0>p`| ÁøÀ‚ñãÆ"ŒL¨0>pa| ÃøÀ†ñãÆBŒŒ(1>pb| ÅøÀŠñã/ÆbŒÌ¨1>pc| ÇøÀŽñã?Æ‚Œ (2>pd| ÉøÀ’ñ&ãOÆ¢ŒL¨2>pe| ËøÀ–ñ.ãÓÞyY §’jÏð|Ïð|Ïð|ÏYªÀóEž*‰ªdª’ªJ®*ɪd«’® <—°JÆ*)«ä¬’´JÖ*i«ä­’¸Jæ*©«ä®’¼Jö*é«ä¯’ÀJ+)¬ä°’ÄJ+i¬ä±’ÈJ&+©¬ä²’ÌJ6+é¬ä³’ÐJF+)­ä´’ÔJV+i­äµ’ØJf+©­ä¶’ÜJv+é­ä·’àJ†+)®ä¸’äJ–+i®ä¹’èJ¦+©®äº’ìJ¶«<—ïJÂ+¯¤¼’óJÒ+Y¯¤½’÷Jâ+™¯¤¾’ûJò+Ù¯¤¿‚ÿjðÑþ|EÖäÖ7 ÖÄÕÙ ÖÄÕÚÖÄõ9TXƒA¸˜Ásذ&·êIø°&®òI±&®úI8±Ó˜(«ÿ\å ”„RJi(å¡”ˆý9ôXóuóþ†¬ÉÅ| ?‡$krQWèÏáÉš¯C˜ôçPeM.Öúsز&u…þ¬ÉÅú@gÖ|ÕC]¡?‡6kr±ÎџÜ5¹XèÏ!Ïš¯¢¨+ôçðgM.ê ý9Z“‹ºB‹Ö|UF]¡?‡HkrQWèÏáÒš\Ôúsè´&u…þF­iPWèÏ!Õš\Ôúsxµ&u…þj­iSPWèÏaך\Ôús¶&u…þŽ­i£ZW°lMN%Ï!ÚšÜÎT[×q@¶5q­+趦ì|@¸5q]PnMƞú5¹­+x·¦]Å|€çPoM.ƞþ5¹]çðoMÆ!³´ÔÒrKS.qH/-¿´Ó2LK1çíqÍ£Ôž·ÃÇ5¹]ç0rMæ<‡”kr±>Àsx¹æ‘Ö9x5×äb}€ç°sM.ê <‡ kÉ`>Às8º&óžCÓ5¹ø¼ÏaêšGFXçà9d]“‹õžÃ×5¹¨+ðÊ®ÉE]ç°vÍã0Ôxq×䢮Às¸»&užCß5ëPWà9 ^“‹ºÏ!ñš\Ôx×ПC6¹XèÏáH›\ÔúshÒfû3Öús˜Ò&u…çí¥M.ê ý9|i³=užC™6¹¨+ðÖ´ÉE]ç§M.êJG8ë gâ¬SœuŒ³ÎqæAΘåŒþµÙºBÚ䢮ПC¥6¹úsØÔfë>ê ý9„j“‹ºB§Ú䢮ПC«6¹­+ˆÕæ„ÎÔj×q@®6qý¼‚^mâ:¬MÆþüÏ!Y›×+0ðžµÉí|À´6qýÜ…km^ëh]Á¶6qå|k×õãÚÄaà9¤k“‹ùÏá]›WV0ðêµÉE]ç°¯M.æ<‡€m^©ÁúÏá`›\Ìx Ûäb}€ç0±Í+?¨+ð2¶ÉÅúÏác›\Ôx%Û䢮ÀsXÙæu&Ôx1Û䢮Às¸Ù&užCÏ6¯[¡®ÀsÚ&užCÒ6¹¨+ðž¶y užCÕ6¹¨+ðüÏoôç7x~ƒç7ús(Ûæµ6ÌúsXÛ&óþâ¶ÉÅ| ?‡»m^»ë|ÀÞ6q]ð·M\ǃÛÄuÃá6q]°¸Í«‚x‘Ûä¶® r›¸®sÈÜ&®óÛÄõó B·yå±u¥ÛÄaà9¬n“‹ùÏ!v›\Œ<‡Ûm^ÝD]çлM.æ<‡ámrQWà9$oój)æ<‡çmr±>Às¨Þ&užÃö6¯¾b}€ç¾M.ê <‡ómrQWà9´o“‹ºÏa~›×zQWà9äo“‹ºÏá›\ÔxܼvŒºÏa›\ÔxÜ䢮Às¸àæµhÔxÜ䢮Àsá&užC 7¹¨+ôçxþ€çúó<Àóýùž?àùÓþ|^?Ï|̵ÔÕ\Ëú˜k™¹–ºškYs-ó1×RWs-ëc®e>æ•yŒ£<Ÿ8Œ£<Ÿ8Œ£<Ÿ8Œ£<Ÿ8Œ£<Ÿ×ü1Žò|â0Žò|â0Ž>oŸ8Œ£<Ÿ8Œ£<5ÆÑçí‡q”ç‡q”ç‡qôyûÄaåùè0Žò|â0Ž>oŸ8Œ£<Ÿ8Œ£<Ÿ8Œ£ÏÛGq”ç‡q”ç‡qôyûÄaåùÄaåùh+0Ž>oŸ8Œ£<Ÿ8Œ£<Ÿ8Œ£ÏÛ'ã(ÏGµq”ç‡qôyûÄaåùÄaåùÄa}Þ>zŒ£<Ÿ8Œ£<Ÿ8Œ£ýùÄaåùÄaáù×Äý–)ïµßæ¾×~˨÷Úoïå½ö[æ½×~;¶÷Úoú^ûí¿Õ{í·L~¯ýöß~®eŽÞkGæüÃ8RCoÆ‘š|ã0ŽÔø‡qdÍL\ÖÖ{ ó‘µúÆa>²öß8ÌG>KÞ8ÌG>›&.Ÿaï5ÌG>ß8ÌG>cß8ÌG>³ß8ÌGðÆa>”‰ {Þk˜°ìÃ|„oæ#¬}ã0a÷Ä…ñï5ÌG¾3¼q˜|yã0ùNóÆa>òéÃ|ä;×Äå»Ù{ ó‘ïzoæ#ßß8ÌG¾‹¾q˜|·¸|~¯a>òúÃ|ä;ú‡ùÈwþ7ó‘âÃ|¤'™¸ô.ï5ÌGz¡7ó‘ÞêÃ|¤W{ã0éý¾FQεÌÇ\Ë8æZæc®es-ó1×2޹–ù˜kÇ\Ë| gŸ±•çs ã(Ï'ã(ÏñŒâý{1ŽòÏF&·<Ÿk˜ò|â0å9ž½/æ£<Ç3¨7óQžãÙ×ä–çs ã(Ï'uUžãYßû÷¢®Êsq˜ò|â0åùÄaå9~ œƒò¿-¾q˜ò|â0åùÄa}”燺Ïûî×üþÛùèoÂo\ç£gƒ½qþfýÆu>úø׺êoêž÷7ú7ãÏoð¼{Þ?ãÏ»warÁóY÷Ƶ®º·âk]u¯Æ׺êá|o\ëª{I&<ïÞ”7ãÏ»'æÍE]çÝ‹óæbày÷M.xÞSß8ÔxÞ£%ß\ÌxÞó,ß\¬ð¼‡hN.xÞ½`oêªýùÄaày÷´½Æžw/Ýä‚ç=õÃ8ÀóžÆúæbƒç=vrÛŸÏ5|î‚çÝ+ùþyxÞ=šo.Æžwoèä‚çÝkúÆaƒçÝãúæbƒçÝ[ûæb·?ÇžÞÉmŽ=ÂoÖ9xÞ½Éo.ÖxÞ=Ñon×G÷X;ëÖUOÂ~ã:Žîã:ÝSþƵ®zæ÷‡qôyûì—Ç8Пw¯ýüày÷î¿q©þƵ®únÁÄçúó <¿ÐŸ_àùÕçíó÷bèÏ/ðüBÞwBfl}Þ>׺Îû.Ê›ÛÏ« <ï;0o.ê <ï»7“Ûçís u…þ¼ï½Æþ¼ï$½¹úó¾ 5¹àyß­zã0èÏûN×›‹už÷]²7ë<ï;l“Ûçís ã@ÞwìÞ?ã@ÞwûÞ\Œýyß)œ\ð¼ï(¾qøÜÏûn䛋už÷Ì7Ÿ»àù…þüÏûnéüèÏû®ê‡q ?ï;²o.Æþ¼ïæN.úó¾ëûÆa£?ï;Æo.Ö9úó¾Ûü5ïE÷y{ß•~ãº>Nð¼ïh¿¹]'ž·÷Ýð7·ëãÏûNúä‚ç'xÞwáßÜÎljþ¼ï࿹<ï»ÿ“ žŸàyon×ù ž×uðæv}œày on×ljþüÏOðüD~‚ç'x~¢??Áó¯Àó:&Àó:±&ýy[oÖx^·×›‹õž×)öæv}ÔQö5~³öuž½qÇßÏëZ{s;Žýyoo.Æþ¼n¹ÉϹàùŽþ¼Žø7·uµ£?¯›þÍm]íèÏëÄs[W;úóºø'<ßÑŸ÷ €7·ë|GÞ³ÞÜ®óýyÏ<˜\ð|GÞ³Þ\Ôúóžñðæ¢®ÐŸ÷l‰ÉÏwð¼gZ¼¹¨+ð¼gi¼¹¨+ð¼gx¼¹¨+ôç;x¾ƒç;úó<ßÁóýùžïàùŽþ|Ï{–Ëü ?ßÁóž!óæb}€ç=»æÍÅúÏ{fÎä¢?ßÁóžÕóæb}€ç=#èÍÅúÏ{6Ñä¢?ïYGo\ûóžôÆaèÏ{fÓ›‹q ?ïYQ“ ž÷ì©7ã@Þ3¯Þ\Ôúóžµõ梮П÷Œ¯¯9¬<ï™ao\?¯6ð¼g•½¹ý¼ÚÀóž‘öæöójÏ{6Ûä¢?ßÀóž ÷æv>6ð¼gѽ¹ <ïx“‹þ|Ï{öÞ›Ûõ±ç=óïÍíúØÀóž58¹èÏ7ð¼g¾¹¨+ð¼g+¾¹¨+ð¼g:¾¹¨+ð¼gIN.úó <ï–o.ê <ïÙ™o.ê < žoàyÏ }sQWàyÏ(}sQWàyÏF\ð|C¾çx¾¡?ßÀó <ßПoàùžoèÏ{öíŒ<ïYºoæ<ï¾o.æ<ïÙÁ“ ž÷,â7®ÜП÷ ä7ëýyÏ^~s±>П÷ÌçÉÅóöž!ýÆáó ýyÏ®~sñy…þ¼gf¿¹ý¼êÜ_s~wyÞ3½ß¸ŽcÏ{–ø›Ûq¬àyÏ0s1ð¼g§O.x¾‚ç=³ýÍm]­àyÏŠs[W+xÞ3ê'<_Áóýù ž¯àùŠþ|ÏWð|E¾‚ç+x¾¢?_Áó<_ÑŸ¯àù ž¯èÏWð|ÏWôç+x¾‚ç+úó<_Áóýù ž¯àùŠþ|ÏWð|E¾‚ç+x¾¢?_Áó<_ÑŸ¯àù ž¯àù ž¯àù ž¯àù ž¯àù ž¯àùŠþ|ÏW2 ÄõûÕH‚çóÒ/€ ãÏgó~sÁóÙŽ8Ìx>›‰‘‹ùÏgs(r1àùll.x¾€ç³ ¹x>~‹q€ç³Y£¹àùl6@æ<Ÿ”‘‹ùÏçÇ@äb>ÀóùÁ§¹àùü`8Ìx> ‘‹ùÏç!csÁóyø…8Ìx>8‹ùϧ±E.æ<Ÿ¦¤¹àù|™Gæ<_Àó<_Àó<˜õ^Àó<_Àó<_Àó<_Àó<_Àó<_Àó<_Àó<_П/àù‚þ|Ïð|AþÏ?àù¿ŸÀóúóxþAþÏ?øýüžÃ7ÓÑu?ÜÄu}À7q]çðÃM\×9üp×õ?ܔƞÃ7¹ý¼‚nâú¹ ?ÜÄõó ~¸)ñ~^Á7qý¼ªËñkâ0ôçðÃM.æýyÝ•ó÷‚çðÃMÆþüžÃ7æ<ÿ€çðÃÍG æ<‡nr±>П×:ÿ~ày]¬oê <‡n>±>ПÃ7¹¨+ôçð~¸ùó0ðüžÃ7í¨+ôçðÃM.>¯ÀóºŠg>Àóº'<‡nâ0ðüžÃ7ÖxþÏá‡4b}€çðÃM.Öx^÷öüûçuy¿q¨«òz8Øá ‡ƒj8˜á †ƒZ8Xá*rÿ‚J¸Úã'1 û)¿«¬ŸÄÐâéÃõzò¿ ‚ƒ ®rþILý<ÅvO˜Ä,‚§=x!˜Ä|óx ìž}ðýìo=paóYô´õî)“˜ÂÚw÷h‰/Xß }ëy“ØÊiÇÝC4&±•S<÷äŽ/ÈÞàzëq!“ØÊ)˜{FÉ$¶rúÔ¼£Lb+§-vOcù‚à ~·3‰­œÂ¸çÎLb+§$îa7_ðºAëÖv&±•S÷XŸIlåÀð¹õÈ¡/ØÜz€ÑDµrŠ^˜Üz¸ÒüY½ûb·':}AâÖó¡&*_zÚÔDõß¾ý3ôm= kþ¬VNY uÌm·ÁÛm¬m¶ÁÙeŒm¶Á×]lm= í ®6¨Ú`j»ËZxÚ iƒ¥ ’68Ú hƒ¡ ‚6øÙ gƒ r6¸Ù f»û¤b6xÙî²V6HÙî²J6Ù dƒ­GF~ÁÆ[Ï©œÄ¬Z˜Øz8欽ËZØà_»ËZØ× _ƒ{ 굞²úñ¼k=ÚuóMÒ58×î¶¼0®A¸Ö³n¿ [ƒm­ìNbï¾­.Lk­õŒà/hÖ`YëÁÄ“ÖB±v÷‰uMþ‚_­G0OT¾)ô@ç‰Ê·4¨ÕzŠô$vÕ–µÐªÁª©œjPªÁ¨¡|jЩÁ¦ÖÄ¿àRëqä•{ˆÔàQƒF 5HÔàPƒB 5ÔàOƒ> ö4ÈÓ®öµP§Áœq¼iЦÁšiœiP¦Á˜vµ¯…/ º4ØÒ®>|†+ ª´«}-Dið¤]e-,i¤Á‘EÚÕ¾‚4øÑ®²v4ÈÑ®öµP£ÁŒ1ÚÕß¡Eƒíj_ '”hWY !|hСÁ†vµ¯… *´«}-Dhð ]e-,h ]ík¯öµW!¾ú@ù*k¡?ƒýìêÃd¸Ï >ƒù Ⳬ¬…ö Ö³«¬…ó Ê3Ï <ƒï º3ØÎ ;ƒë ª3˜Î :ƒç š3XÎ 9ƒã Š3Î 8ƒß z3ØÍ 7ƒÛ j3˜Í 6ƒ× Z3XÍ 5ƒÓ J3Í 4ƒÏ :3ØÌ 3ƒË *3˜Ì 2ƒÇ ³³¬…Ä ³³¬…Á 3øË /ƒ½ìì3d¸Ë .;Û×B\oÙÙ¾Ö2HËà,ƒ² Ʋ³¬…¯ º²³¬…¬ ®2¨Ê`*ƒ¨ìì3dhÊ`);û Ž2(Ê`(ƒ ì,k¡'ƒì,ká&ƒšìl_ 1¼dÐ’ÁJvö2œdP’Ý!|dБÁF\dP‘ÁDùÜcG·NÃ<ñ¼cÐŽÁ:éœcPŽÁ8á|cÐÁ6vts\cPÝYÑ ö,ȳà΂: æ,ˆ³àÍ‚6 Ö,H³àÌ‚2 Æ,³àË‚. ¶,ȲàÊ‚* ¦,ˆ²àÉ‚& –,H²àÈ‚" †,²àÇ‚ v,È±àÆ‚ f,ˆ±àÅ‚ V,H±àÄ‚ F,±à 6,Ȱà‚ &,ˆ°àÁ‚ ¬µ¬…km_»–µ`­ðe@—[dpe@•SDðd@“K¤Wpd@a C„Wðc@w;ä•pcè(gœÜÍuŽs_û×)Î}É\g8÷ÕløˆƒD{÷<î1öØwýuÔcM:è±^ …SÓúoÏ3¡2 Õ{Õ{Ñ{5~ßìçÁŽè¿½€ó»w/Ã4„ƽ{é¥a3†NæþÛËDÙ»—‡²w/ %¤‡pByØ»—€R¾Ã*¬`ƒtK.7¨Í`ƒÀ ­^‚MR ¹„ògÉhQ ü"ÐrÀ¾#™Åoo¢¨-i Úr¶˜-e Ù2¶ˆ-a Øòµx-] ײµh-Yñ2mª¤X­oª¶©2µÊŠµÂ ¼×“â(M+«¨+²(íÛ³i‹-Fût¸í{³Øò”µØyÊÏþ[zö¡pÙÙmÅ%'~|Í=×Ù·w Í> .2»›¸Àì{;ÝJ\ZÖÕwvŠÊš(úck÷5UCQJvSSÙ×bKȾ¨Óç¾ÝÎÔ·t G¸ |ïw×~ùë·§\Ò Àb,Lùí…Üñ¿#ù÷?ýøçŸþðÇÿôËïÿÿÿPK-!wK)H¬_ [Content_Types].xmlPK-!µU0#ôL å_rels/.relsPK-!å*§¬SX  xl/_rels/workbook.xml.relsPK-!“?Txþ xl/workbook.xmlPK-!ü7ÿMB xl/worksheets/sheet4.xmlPK-!ˆ ÃðŸx wxl/worksheets/sheet1.xmlPK-!}1ØXw Lxl/styles.xmlPK-!X/2÷Õ0PÎxxl/sharedStrings.xmlPK-!Á5¡ÜîsGxl/worksheets/sheet3.xmlPK-!ƪÇC¸5xl/worksheets/sheet2.xmlPK-!;m2KÁB#ò9xl/worksheets/_rels/sheet3.xml.relsPK-!/xj^¹Vô:xl/worksheets/sheet12.xmlPK-!ƒ¯êããä<xl/theme/theme1.xmlPK-!bNعT¢Cxl/worksheets/sheet10.xmlPK-!ðìZúŠl>| ’Exl/worksheets/sheet5.xmlPK-!r®»úçaR²xl/worksheets/sheet6.xmlPK-!!¦_ï¶Qo´xl/worksheets/sheet7.xmlPK-!<ÕÖºW[¶xl/worksheets/sheet11.xmlPK-!Y ¸SL¸xl/worksheets/sheet9.xmlPK-!¬Îj†·R:ºxl/worksheets/sheet8.xmlPK-!å¨uvFY'¼docProps/core.xmlPK-!±ë è'¤¾xl/printerSettings/printerSettings1.binPK-!ÿúŸ·8ó¿docProps/app.xmlPK-! > LÐ+°=àÂxl/calcChain.xmlPKiÞîopenxlsx/inst/extdata/na_convert.xlsx0000644000176200001440000002057314656134061017634 0ustar liggesusersPK!bîh^[Content_Types].xml ¢( ¬”ËNÃ0E÷HüCä-Jܲ@5í‚Ç*Q>Àēƪc[žiiÿž‰ûB¡j7±ÏÜ{2ñÍh²nm¶‚ˆÆ»R ‹ÈÀU^7/ÅÇì%¿’rZYï @1__f›˜q·ÃR4DáAJ¬h>€ãÚÇV߯¹ ªZ¨9ÈÛÁàNVÞ8Ê©ÓãÑÔji){^óã-I‹"{Üv^¥P!XS)bR¹rú—K¾s(¸3Õ`cÞ0†½ÝÎß»¾7M4²©ŠôªZÆk+¿|\|z¿(Ž‹ôPúº6h_-[ž@!‚ÒØPk‹´­2nÏ}Ä?£LËð Ýû%áÄßdºždN"m,à¥ÇžDO97*‚~§Èɸ8ÀOíc|n¦ÑäEøÿöéºóÀBÉÀ!$}‡íàÈé;{ìÐå[ƒîñ–é2þÿÿPK!µU0#ôL _rels/.rels ¢( ¬’MOÃ0 †ïHü‡È÷ÕÝBKwAH»!T~€Iܵ£$Ý¿'TƒG½~üÊÛÝ<êÈ!öâ4¬‹;#¶w­†—úqu*&r–Fq¬áÄvÕõÕö™GJy(v½*«¸¨¡KÉß#FÓñD±Ï.W ¥†=™ZÆMYÞbø®ÕBSí­†°·7 ê“Ï›×–¦é ?ˆ9LìÒ™ÈsbgÙ®|Èl!õùUSh9i°bžr:"y_dlÀóD›¿ý|-NœÈR"4ø2ÏGÇ% õZ´4ñËyÄ7 ëÈðÉ‚‹¨ÞÿÿPK!>”—óºxl/_rels/workbook.xml.rels ¢( ¬RMKÄ0½ þ‡0w›vÙt/"ìUëÉ´)Û&!3~ôß*º]XÖK/o†yïÍÇv÷5âõÁ+¨Šzlï;oÍóÍbí­‚Gìêë«í šs¹>’È,ž8æø(%‡£¦"Dô¹Ò†4jÎ0u2jsÐÊMYÞË´ä€ú„Sì­‚´·· š)fåÿ¹CÛöŸ‚yÑó I< yÑèÔ!+øÁEöò¼üfMyÎkÁ£ú å«Kª5=|†t ‡ÈG)’s墙»UïátBûÊ)¿Ûò,ËôïfäÉÇÕßÿÿPK!ÉEðåxl/workbook.xml¤SMÓ0½#ñ,ß·IJ©VQ“tATBhµÚK/SgÒXõ¶CÛÏ8ÙB¡—E\b{Æyã÷ÞÌâæ û>Hk*^LrÎÐÛH³­øãÃç«kÎBÓ€²+~ÄÀoê·o{ëwkwŒL¨x£+³,ˆ5„‰uh(ÓZ¯!ÒÑo³à"”þ5¶m¥À[+z&Ž Dz~è¤ '4-^§Áïzw%¬v±‘JÆãÊ™åjk¬‡"Ú‡âý ™¶ÐZ oƒmã„ ²ñ‘|‹<+Š‘r½h¥Â§QvÎ}ª(΄ø©‘›ŠÏéh÷øGÀ÷îc/e‹Ùlšó¬þeÅg ¶Ð«ø@&œàéâ|–EºI¤>¨ˆÞ@Ä¥5‘4|Qÿõ°—%wØ=~ï¥GjŠ$[½ /ˆ6ábÇz¯*¾,×è¯ÁÄΚc³¾Å°‹Ö­Ïd†KÿAh‰qF”Çgû¿é׋ÔÄO÷á·éÈÏÒ4v_q‰ãÙ~?„Ÿe»ŠO¯¯sʱ/(·]$½‹Sñ3ì¡ï©Æ°23øÉZ¯4+2ôg¾”´ñ«f°+;ý$@ r7-éâž:è…¥á=RΣé¿ZH1?MhýÿÿPK!ˆ›™L´xl/sharedStrings.xml\ÏÁjÃ0 à{aï`t_”u°â¸‡AŸ {ÏÖC,§‘RÒ·¯·ÊrÓÿý!»_ò`.4I*ÜÁKÓ‚!%&>uðu<<€õýP˜:¸’ÀÞ=m¬ˆšºËÒA¯:î%ô”½4e$®ÍO™²×§Ê8‘ÒipÛ¶o˜}b0¡Ì¬õî+˜™Óy¦Ï;¼ƒ³’œUt‡¿à”µ¨ÿ̯á{ a q ô¬¹ÿÿPK!u>™i“Œxl/theme/theme1.xmlìY[‹ÛF~/ô?½;¾I²½ÄlÙNÚì&!ë¤äql­ÉŽ4F3Þ ’<õ¥PHK_ }ëC) 4ÐЗþ˜…„6ý=3’­™õ8›Ë¦´%kX¤ÑwÎ|sÎÑ7]¼t/¦ÎN9aIÛ­^¨¸NÆlB’YÛ½5”š®ÃJ&ˆ²·Ý%æî¥Ý?ºˆvD„cì€}ÂwPÛ„˜ï”Ë| ͈_`sœÀ³)Kc$à6•'):¿1-×*• #’¸N‚bp{}:%cì ¥Kwwå¼Oá6\6Œiz ]cÃBa'‡U‰àKÒÔ9B´íB?v<Ä÷„ëPÄNÉ\´ÝOÁ««Až?{vòðéÉÃ_O=:yøsÞ·reØ]AÉL·{ùÃW}÷¹óç/ß¿|üuÖõi<×ñ/~úâÅo¿¿Ê=Œ¸Åóož¼xúäù·_þñãc‹÷NŠF:|HbÌkøØ¹Éb …?¥of1Œ1,P¾-®û"2€×–ˆÚp]l†ðv *c^^Ü5¸DéBKÏW£Øî3F»,µàªìK‹ðp‘Ìì§ w¡#[ß!JŒ÷sWbsFØ yƒ¢D N°pä3vˆ±etw1âºOÆ)ãl*œ;Äé"b ÉŒŒB*Œ®ò²´„T±Ù¿ítµº‡L$¼ˆZÈ15Âx-Šm.‡(¦zÀ÷ˆl$–éXÇõ¹€LÏ0eN‚9·Ù\Oa¼ZÒ¯‚ÂØÓ¾O—±‰L9´ùÜCŒéÈ; #Ï­œIéØOø!”(rn0aƒï3ó ‘÷”lM÷m‚tŸ-·@\uJEÈ'‹Ô’ˢ™ïã’NV*ÚoHzL’3õý”²ûÿŒ²Û5ú4Ýîø]Ô¼“ë;u唆oÃý•»‡É /ËæÌõA¸?·û¿îmïòùËu¡Ð ÞÅZ]­Üã­ ÷)¡ô@,)ÞãjíÎa^š  Qm*ÔÎr½‘›Gp™o Ü,EÊÆI™øŒˆè BsXàWÕ6tÆs×3î̇u¿jVb|Ê·Ú=,â}6Éö«ÕªÜ›fâÁ‘(Ú+þºö"Cb¶v¯vµ3µW^¶oBBëÌ$Q·h¬! ¯"¡Fv.,ZMé~•ªUסjë¬ÀÂÉåVÛõ½ì¶Tˆâ‰ÌSv$°Ê®Lιfz[0©^°ŠXU@‘é–äºuxrtY©½F¦ Z¹™$´2ŒÐçÕ©œœg®[EJ z2«·¡ Ñh¾\K9¥ 4Ñ•‚&ÎqÛ ê>œÑ¼íNaß—ñj‡Ë/¢38<‹4{áßFYæ)=Ä£,àJt25ˆ‰À©CIÜvåð×Õ@¥!Š[µ‚ð¯%×Yù·‘ƒ¤›IÆÓ) =íZ‹Œtv Ÿi…õ©2{°´d H÷A49vFt‘ÞDPb~£*8!ŽªY4'Î3×BVÔß©‰)—]ý@QÕPÖŽèØÝW†õü™”(!'(c‡|étÁ"„RSDòVóü¸/ È8ì ur˜y¿˜½‘xïùÁp…R0šj›[SÍ²Çæ§aÖÏ_ܬVÓ»‰ÁïQÖoè™?ðr-d {^[w×`¡-BF2¸’n¶ú_‰B[JÁÖ°SŠ7‚c¦‹¨Õ  [(ì–R[š|c'r µ_›éáñŸÀi_Wj·× >¿žßç]/Á!Ó®òßš³ÙÒs CsìD¼•¦r Â؃./YwBBW™Åwyœ«pÚAK¢Ï«ö ¹y¬ ¯è‚ì£ÕØ}Xÿ,\«ÊN±šÁ†t+Ýv4Ú. ¶Á 8ÒQ3n´4[R7¾atÃsR+,B8â롵’~ Ý$ðžH¤8E“¾ä?‰‹GRs:6Uv:ª×'ø.„?´¨Gã\ÿñ þøÃógP¾èáµÙ¢Ëñx ©Hþ£kò?\+oáûì¢V òÿ‚c »çEWõ)þpZ\Ä©»ÿÑøÃnõUª9ôá˜ïõÏ:‰CO`é¯Úý£¯#XÏ…õŽ2Eù‘.0ÓªëKÌ7œÒW ¦c9Xý0%Þ1õxx¡îù3Ié.‡lhfÝÓ'¡ D„ºçOú{Ã3_.pj*¡o‡k'i„þ¿[^ÏVw±oOÝåÔH`Ï‚åÊÆ·ËÕ*ž¹¾{û½wÇñŠs­‚7ž— îAdãlCþ¡“E¨7¨é›ï. Ýç>ó'îMà¹v˜Á¸Â¢ˆñá pr‘ÏÓšnùWª·¢2¨ä„ê÷&é°¨ü³UµG!‡µ²°Îo;øq¸ÿý d¡”=¿¸ Íg-ÿÿÿPK!vh:=?mdocProps/core.xml ¢( œ’_KÃ0Åß¿CÉ{›dC¥íPÇžN&¾…än 6H¢]¿½i»ÕÉ|ò19çþrÎ%Åü êä œ—F—ˆf% ¹RïJôº^¦3”øÀ´`µÑP¢<šW×W·97ž±à‚ŸD’ö9·%Ú‡`sŒ=߃b>‹Å­qŠ…xt;lÿ`;ÀBn±‚À wÀÔŽDtD >"í§«{€àjP ƒÇ4£øÇÀ)ÿç@¯œ9• ­ŽqÏÙ‚âè>x9›¦Éši#æ§ømõôÒWM¥îvÅU…à9wÀ‚qÕ½{£ÛdÁ”ä¦ÀgR·Æšù°ŠßJí…ûÒÙ}•áI —UNÊfú¸X/Q5!t–’»”NÖ„äÓ›œÐ÷.À¯ù.ìp¡Ž1þM<ª_|êÿÿPK!Ošy{üdocProps/app.xml ¢( œ’ËNÃ0E÷HüCä=u ¡Ê1B<ÄD¥XgÒX¸v䢖¯g’ˆ’+vó¸º>¾¶ºØ¬}ÖBBC!¦“\dl,]Xâiy{t.2$Jãc€BlÅ…>8¶c‘½„§­IÎb¬N64}í¤¤_bzÀPI þkǵ;ÕÓ^Àž°3@x±¸t䫹IôñtLÜ3 ¼Ò/ºþÂ|Îç{Þð©YÆkCð•ÜþP-j“ ä°wÉîêŽCK¾3¹ªMXAù¥ù½èÞùyøÌzz6ÉOr~ÂÑLÉïo«?ÿÿPK-!bîh^[Content_Types].xmlPK-!µU0#ôL —_rels/.relsPK-!>”—óº¼xl/_rels/workbook.xml.relsPK-!ÉEðåïxl/workbook.xmlPK-!ˆ›™L´ xl/sharedStrings.xmlPK-!u>™i“Œò xl/theme/theme1.xmlPK-!Ë3|3õ2 ¶xl/styles.xmlPK-!nÜ5%²Öxl/worksheets/sheet1.xmlPK-!vh:=?m¾docProps/core.xmlPK-!Ošy{ü4docProps/app.xmlPK €åopenxlsx/inst/WORDLIST0000644000176200001440000000251614745234540014315 0ustar liggesusersArial Breuer CMD Calibri Calligra Colour Customizable DL DateTime FFC Formating Generalised Gnumeric Italicise JIS LONGDATE LastModifiedBy Libreoffice NilValue ORCID Openoffice POSIXct POSIXt RStudio Rcpp SuperA SuperB TableStyleLight Ungroup Unmerges XLConnect addCreator addFilter addWorksheet apache asTable beginsWith bgFill bmp bool bottomN changeLastModifiedBy choosen codecov colWidths colorScale colorscale colour colourScale coloured colours conditionalFormatting coxph cpp createStyle createWorkbook databar dateFormat datetime datetimeFormat datetimes detectDates dev df eg endsWith english fanfold firstActiveCol firstActiveRow fitToHeight fitToWidth fomulas fontColour fontName fontSize freezePane getCreators greaterThan greaterThanOrEqual gridlines hdpi hh insertImage jpeg lessThan lessThanOrEqual libre loadWorkbook mailto maxWidth minWidth na nestings notBetween notBlanks notContains notEqual numFmt openXL pageSetup paperSize pivotTables png pre px recognise roxygen sapply sep sheetPr sheetVisibility sheetVisible sheetnames showvalue ss stackable startCol startRow startcol stylings tableStyle tableStyles tempory textLength tidyverse topN twips ugroup ungroup unprotect validateSheet vbaProject vdpi veryHidden wb withFilter worksheetOrder wrapText writeComment writeData writeDataTable writeFormula xls xlsm xlsx xy yyyy zipflags zph openxlsx/README.md0000644000176200001440000000530314745234540013422 0ustar liggesusers[openxlsx](https://ycphs.github.io/openxlsx/) ======== [![codecov](https://codecov.io/gh/ycphs/openxlsx/branch/master/graph/badge.svg)](https://app.codecov.io/gh/ycphs/openxlsx) [![CRAN_Status_Badge](https://www.r-pkg.org/badges/version/openxlsx)](https://cran.r-project.org/package=openxlsx) [![CRAN RStudio mirror downloads](https://cranlogs.r-pkg.org/badges/openxlsx)](https://cran.r-project.org/package=openxlsx) [![R-CMD-check](https://github.com/ycphs/openxlsx/actions/workflows/R-CMD-check.yaml/badge.svg?branch=master)](https://github.com/ycphs/openxlsx/actions/workflows/R-CMD-check.yaml) This [R](https://www.R-project.org/) package simplifies the creation of `.xlsx` files by providing a high level interface to writing, styling and editing worksheets. Through the use of [`Rcpp`](https://CRAN.R-project.org/package=Rcpp), read/write times are comparable to the [`xlsx`](https://CRAN.R-project.org/package=xlsx) and [`XLConnect`](https://CRAN.R-project.org/package=XLConnect) packages with the added benefit of removing the dependency on Java. **Note:** `openxlsx` is no longer under active development. The package is maintained, and CRAN warnings will be fixed, but non-critical issues will not be addressed unless accompanied by a pull request. Packages that depend on `openxlsx` do not need to take any action, but for new developments, users are encouraged to use alternatives like `readxl`, `writexl`, or `openxlsx2`. The first two packages provide support for reading and writing `.xlsx` files. The latter package is a modern reinterpretation of `openxlsx` and provides similar functions to modify worksheets. However, it is not a drop-in replacement, so you may want to consult resources like the [update vignette](https://janmarvin.github.io/openxlsx2/articles/Update-from-openxlsx.html). ## Installation ### Stable version Current stable version is available on [CRAN](https://CRAN.R-project.org/) via ```R install.packages("openxlsx", dependencies = TRUE) ``` ### Development version ```R install.packages(c("Rcpp", "remotes"), dependencies = TRUE) remotes::install_github("ycphs/openxlsx") ``` ## Example Explore the package with a simple example: ```R library(openxlsx) # Create a new workbook and add a sheet wb <- createWorkbook() addWorksheet(wb, "Sheet 1") # Write data to the sheet writeData(wb, "Sheet 1", mtcars) # Save the workbook saveWorkbook(wb, "my_mtcars.xlsx", overwrite = TRUE) ``` ## Bug/feature request Please let us know which version of `openxlsx` you are using when posting bug reports. ```R packageVersion("openxlsx") ``` ## News You can find the NEWS file [here](https://raw.githubusercontent.com/ycphs/openxlsx/master/NEWS.md). openxlsx/build/0000755000176200001440000000000014745235501013237 5ustar liggesusersopenxlsx/build/vignette.rds0000644000176200001440000000034714745235501015602 0ustar liggesusers‹uŽM‚0…+àÄŒðœ‚7ƸpÛH•&¥5¥Üyrq€Ö´&.:÷¦_ç#„‡‚ÀCž­¿2> á^fB–X)Êoɱ̵︒"\¼÷]j3PmkªŠmêFæ6úƒ­¬e…*™¶×ζ~àrs;¤ îFìBõÄ@"ëþã7Ò¿9.I¥‡meÄ<8Qõþ!Ít;2y¦)¹žWZÎöäY Ú]JQ'fÙ¢Kö‚Ò¶íû7Ñ…áÊ$2f”c…“«ÔûQ]Fsâopenxlsx/man/0000755000176200001440000000000014701063102012677 5ustar liggesusersopenxlsx/man/insertPlot.Rd0000644000176200001440000000366714627410100015346 0ustar liggesusers% Generated by roxygen2: do not edit by hand % Please edit documentation in R/wrappers.R \name{insertPlot} \alias{insertPlot} \title{Insert the current plot into a worksheet} \usage{ insertPlot( wb, sheet, width = 6, height = 4, xy = NULL, startRow = 1, startCol = 1, fileType = "png", units = "in", dpi = 300 ) } \arguments{ \item{wb}{A workbook object} \item{sheet}{A name or index of a worksheet} \item{width}{Width of figure. Defaults to 6in.} \item{height}{Height of figure . Defaults to 4in.} \item{xy}{Alternate way to specify startRow and startCol. A vector of length 2 of form (startcol, startRow)} \item{startRow}{Row coordinate of upper left corner of figure.\code{ xy[[2]]} when xy is given.} \item{startCol}{Column coordinate of upper left corner of figure. \code{xy[[1]]} when xy is given.} \item{fileType}{File type of image} \item{units}{Units of width and height. Can be "in", "cm" or "px"} \item{dpi}{Image resolution} } \description{ The current plot is saved to a temporary image file using dev.copy. This file is then written to the workbook using insertImage. } \examples{ \dontrun{ ## Create a new workbook wb <- createWorkbook() ## Add a worksheet addWorksheet(wb, "Sheet 1", gridLines = FALSE) ## create plot objects require(ggplot2) p1 <- qplot(mpg, data = mtcars, geom = "density", fill = as.factor(gear), alpha = I(.5), main = "Distribution of Gas Mileage" ) p2 <- qplot(age, circumference, data = Orange, geom = c("point", "line"), colour = Tree ) ## Insert currently displayed plot to sheet 1, row 1, column 1 print(p1) # plot needs to be showing insertPlot(wb, 1, width = 5, height = 3.5, fileType = "png", units = "in") ## Insert plot 2 print(p2) insertPlot(wb, 1, xy = c("J", 2), width = 16, height = 10, fileType = "png", units = "cm") ## Save workbook saveWorkbook(wb, "insertPlotExample.xlsx", overwrite = TRUE) } } \seealso{ \code{\link[=insertImage]{insertImage()}} } \author{ Alexander Walker } openxlsx/man/groupColumns.Rd0000644000176200001440000000256414656134061015706 0ustar liggesusers% Generated by roxygen2: do not edit by hand % Please edit documentation in R/wrappers.R \name{groupColumns} \alias{groupColumns} \title{Group columns} \usage{ groupColumns(wb, sheet, cols, hidden = FALSE, level = -1) } \arguments{ \item{wb}{A workbook object.} \item{sheet}{A name or index of a worksheet.} \item{cols}{Indices of cols to group. Can be either a vector of indices to group at the same level or a (named) list of numeric vectors of indices to create multiple groupings at once. The names of the entries determine the grouping level. If no names are given, the \code{level} parameter is used as default.} \item{hidden}{Logical vector. If TRUE the grouped columns are hidden. Defaults to FALSE.} \item{level}{Grouping level (higher value indicates multiple nestings) for the group. A vector to assign different grouping levels to the indices. A value of -1 indicates that the grouping level should be derived from the existing grouping (one level added)} } \description{ Group a selection of columns } \details{ Group columns together, with the option to hide them. NOTE: \code{\link[=setColWidths]{setColWidths()}} has a conflicting \code{hidden} parameter; changing one will update the other. } \seealso{ \code{\link[=ungroupColumns]{ungroupColumns()}} to ungroup columns. \code{\link[=groupRows]{groupRows()}} for grouping rows. } \author{ Joshua Sturm, Reinhold Kainhofer } openxlsx/man/groupRows.Rd0000644000176200001440000000426014656134061015213 0ustar liggesusers% Generated by roxygen2: do not edit by hand % Please edit documentation in R/wrappers.R \name{groupRows} \alias{groupRows} \title{Group Rows} \usage{ groupRows(wb, sheet, rows, hidden = FALSE, level = -1) } \arguments{ \item{wb}{A workbook object} \item{sheet}{A name or index of a worksheet} \item{rows}{Indices of rows to group. Can be either a vector of indices to group at the same level or a (named) list of numeric vectors of indices to create multiple groupings at once. The names of the entries determine the grouping level. If no names are given, the parameter level is used as default.} \item{hidden}{Logical vector. If TRUE the grouped columns are hidden. Defaults to FALSE} \item{level}{Grouping level (higher value indicates multiple nestings) for the group. A vector to assign different grouping levels to the indices. A value of -1 indicates that the grouping level should be derived from the existing grouping (one level added)} } \description{ Group a selection of rows } \examples{ wb <- createWorkbook() addWorksheet(wb, 'Sheet1') addWorksheet(wb, 'Sheet2') writeData(wb, "Sheet1", iris) writeData(wb, "Sheet2", iris) ## create list of groups # lines used for grouping (here: species) grp <- list( seq(2, 51), seq(52, 101), seq(102, 151) ) # assign group levels names(grp) <- c("1","0","1") groupRows(wb, "Sheet1", rows = grp) # different grouping names(grp) <- c("1","2","3") groupRows(wb, "Sheet2", rows = grp) # alternatively, one can call groupRows multiple times addWorksheet(wb, 'Sheet3') writeData(wb, "Sheet3", iris) groupRows(wb, "Sheet3", 2:51, level = 1) groupRows(wb, "Sheet3", 102:151, level = 1) addWorksheet(wb, 'Sheet4') writeData(wb, "Sheet4", iris) groupRows(wb, "Sheet4", 2:51, level = 1) groupRows(wb, "Sheet4", 52:101, level = 2) groupRows(wb, "Sheet4", 102:151, level = 3) # Nested grouping can also be achieved without explicitly given the levels addWorksheet(wb, 'Sheet5') writeData(wb, "Sheet5", iris) groupRows(wb, "Sheet5", 2:151) groupRows(wb, "Sheet5", 52:151) groupRows(wb, "Sheet5", 102:151) } \seealso{ \code{\link[=ungroupRows]{ungroupRows()}} to ungroup rows. \code{\link[=groupColumns]{groupColumns()}} for grouping columns. } \author{ Joshua Sturm } openxlsx/man/if_null_then.Rd0000644000176200001440000000057214627410077015656 0ustar liggesusers% Generated by roxygen2: do not edit by hand % Please edit documentation in R/utils.R \name{if_null_then} \alias{if_null_then} \alias{\%||\%} \title{If NULL then ...} \usage{ x \%||\% y } \arguments{ \item{x}{A value to check} \item{y}{A value to substitute if x is null} } \description{ Replace NULL } \examples{ \dontrun{ x <- NULL x <- x \%||\% "none" x <- x \%||\% NA } } openxlsx/man/createWorkbook.Rd0000644000176200001440000000212414627410077016164 0ustar liggesusers% Generated by roxygen2: do not edit by hand % Please edit documentation in R/wrappers.R \name{createWorkbook} \alias{createWorkbook} \title{Create a new Workbook object} \usage{ createWorkbook( creator = ifelse(.Platform$OS.type == "windows", Sys.getenv("USERNAME"), Sys.getenv("USER")), title = NULL, subject = NULL, category = NULL ) } \arguments{ \item{creator}{Creator of the workbook (your name). Defaults to login username} \item{title}{Workbook properties title} \item{subject}{Workbook properties subject} \item{category}{Workbook properties category} } \value{ Workbook object } \description{ Create a new Workbook object } \examples{ ## Create a new workbook wb <- createWorkbook() ## Save workbook to working directory \dontrun{ saveWorkbook(wb, file = "createWorkbookExample.xlsx", overwrite = TRUE) } ## Set Workbook properties wb <- createWorkbook( creator = "Me", title = "title here", subject = "this & that", category = "something" ) } \seealso{ \code{\link[=loadWorkbook]{loadWorkbook()}} \code{\link[=saveWorkbook]{saveWorkbook()}} } \author{ Alexander Walker } openxlsx/man/getNamedRegions.Rd0000644000176200001440000000217414627410100016246 0ustar liggesusers% Generated by roxygen2: do not edit by hand % Please edit documentation in R/wrappers.R \name{getNamedRegions} \alias{getNamedRegions} \title{Get named regions} \usage{ getNamedRegions(x) } \arguments{ \item{x}{An xlsx file or Workbook object} } \description{ Return a vector of named regions in a xlsx file or Workbook object } \examples{ ## create named regions wb <- createWorkbook() addWorksheet(wb, "Sheet 1") ## specify region writeData(wb, sheet = 1, x = iris, startCol = 1, startRow = 1) createNamedRegion( wb = wb, sheet = 1, name = "iris", rows = 1:(nrow(iris) + 1), cols = 1:ncol(iris) ) ## using writeData 'name' argument to create a named region writeData(wb, sheet = 1, x = iris, name = "iris2", startCol = 10) \dontrun{ out_file <- tempfile(fileext = ".xlsx") saveWorkbook(wb, out_file, overwrite = TRUE) ## see named regions getNamedRegions(wb) ## From Workbook object getNamedRegions(out_file) ## From xlsx file ## read named regions df <- read.xlsx(wb, namedRegion = "iris") head(df) df <- read.xlsx(out_file, namedRegion = "iris2") head(df) } } \seealso{ \code{\link[=createNamedRegion]{createNamedRegion()}} } openxlsx/man/freezePane.Rd0000644000176200001440000000245514627410100015261 0ustar liggesusers% Generated by roxygen2: do not edit by hand % Please edit documentation in R/wrappers.R \name{freezePane} \alias{freezePane} \title{Freeze a worksheet pane} \usage{ freezePane( wb, sheet, firstActiveRow = NULL, firstActiveCol = NULL, firstRow = FALSE, firstCol = FALSE ) } \arguments{ \item{wb}{A workbook object} \item{sheet}{A name or index of a worksheet} \item{firstActiveRow}{Top row of active region} \item{firstActiveCol}{Furthest left column of active region} \item{firstRow}{If \code{TRUE}, freezes the first row (equivalent to firstActiveRow = 2)} \item{firstCol}{If \code{TRUE}, freezes the first column (equivalent to firstActiveCol = 2)} } \description{ Freeze a worksheet pane } \examples{ ## Create a new workbook wb <- createWorkbook("Kenshin") ## Add some worksheets addWorksheet(wb, "Sheet 1") addWorksheet(wb, "Sheet 2") addWorksheet(wb, "Sheet 3") addWorksheet(wb, "Sheet 4") ## Freeze Panes freezePane(wb, "Sheet 1", firstActiveRow = 5, firstActiveCol = 3) freezePane(wb, "Sheet 2", firstCol = TRUE) ## shortcut to firstActiveCol = 2 freezePane(wb, 3, firstRow = TRUE) ## shortcut to firstActiveRow = 2 freezePane(wb, 4, firstActiveRow = 1, firstActiveCol = "D") ## Save workbook \dontrun{ saveWorkbook(wb, "freezePaneExample.xlsx", overwrite = TRUE) } } \author{ Alexander Walker } openxlsx/man/col2int.Rd0000644000176200001440000000047414627410100014546 0ustar liggesusers% Generated by roxygen2: do not edit by hand % Please edit documentation in R/wrappers.R \name{col2int} \alias{col2int} \title{Convert Excel column to integer} \usage{ col2int(x) } \arguments{ \item{x}{A character vector} } \description{ Converts an Excel column label to an integer. } \examples{ col2int(LETTERS) } openxlsx/man/openxlsx_options.Rd0000644000176200001440000000226614627410077016645 0ustar liggesusers% Generated by roxygen2: do not edit by hand % Please edit documentation in R/openxlsx.R \docType{data} \name{openxlsx_options} \alias{openxlsx_options} \alias{op.openxlsx} \alias{openxlsx_getOp} \alias{openxlsx_setOp} \title{openxlsx Options} \format{ An object of class \code{list} of length 34. } \usage{ op.openxlsx openxlsx_getOp(x, default = NULL) openxlsx_setOp(x, value) } \arguments{ \item{x}{An option name (\code{"openxlsx."} prefix optional)} \item{default}{A default value if \code{NULL}} \item{value}{The new value for the option (optional if x is a named list)} } \description{ See and get the openxlsx options } \details{ \code{openxlsx_getOp()} retrieves the \code{"openxlsx"} options found in \code{op.openxlsx}. If none are set (currently \code{NULL}) retrieves the default option from \code{op.openxlsx}. This will also check that the intended option is a standard option (listed in \code{op.openxlsx}) and will provide a warning otherwise. \code{openxlsx_setOp()} is a safer way to set an option as it will first check that the option is a standard option (as above) before setting. } \examples{ openxlsx_getOp("borders") op.openxlsx[["openxlsx.borders"]] } \keyword{datasets} openxlsx/man/readWorkbook.Rd0000644000176200001440000000513414627410077015640 0ustar liggesusers% Generated by roxygen2: do not edit by hand % Please edit documentation in R/readWorkbook.R \name{readWorkbook} \alias{readWorkbook} \title{Read from an Excel file or Workbook object} \usage{ readWorkbook( xlsxFile, sheet = 1, startRow = 1, colNames = TRUE, rowNames = FALSE, detectDates = FALSE, skipEmptyRows = TRUE, skipEmptyCols = TRUE, rows = NULL, cols = NULL, check.names = FALSE, sep.names = ".", namedRegion = NULL, na.strings = "NA", fillMergedCells = FALSE ) } \arguments{ \item{xlsxFile}{An xlsx file, Workbook object or URL to xlsx file.} \item{sheet}{The name or index of the sheet to read data from.} \item{startRow}{first row to begin looking for data. Empty rows at the top of a file are always skipped, regardless of the value of startRow.} \item{colNames}{If \code{TRUE}, the first row of data will be used as column names.} \item{rowNames}{If \code{TRUE}, first column of data will be used as row names.} \item{detectDates}{If \code{TRUE}, attempt to recognise dates and perform conversion.} \item{skipEmptyRows}{If \code{TRUE}, empty rows are skipped else empty rows after the first row containing data will return a row of NAs.} \item{skipEmptyCols}{If \code{TRUE}, empty columns are skipped.} \item{rows}{A numeric vector specifying which rows in the Excel file to read. If NULL, all rows are read.} \item{cols}{A numeric vector specifying which columns in the Excel file to read. If NULL, all columns are read.} \item{check.names}{logical. If TRUE then the names of the variables in the data frame are checked to ensure that they are syntactically valid variable names} \item{sep.names}{One character which substitutes blanks in column names. By default, "."} \item{namedRegion}{A named region in the Workbook. If not NULL startRow, rows and cols parameters are ignored.} \item{na.strings}{A character vector of strings which are to be interpreted as NA. Blank cells will be returned as NA.} \item{fillMergedCells}{If TRUE, the value in a merged cell is given to all cells within the merge.} } \value{ data.frame } \description{ Read data from an Excel file or Workbook object into a data.frame } \details{ Creates a data.frame of all data in worksheet. } \examples{ xlsxFile <- system.file("extdata", "readTest.xlsx", package = "openxlsx") df1 <- readWorkbook(xlsxFile = xlsxFile, sheet = 1) xlsxFile <- system.file("extdata", "readTest.xlsx", package = "openxlsx") df1 <- readWorkbook(xlsxFile = xlsxFile, sheet = 1, rows = c(1, 3, 5), cols = 1:3) } \seealso{ \code{\link[=getNamedRegions]{getNamedRegions()}} \code{\link[=read.xlsx]{read.xlsx()}} } \author{ Alexander Walker } openxlsx/man/removeFilter.Rd0000644000176200001440000000152014627410100015630 0ustar liggesusers% Generated by roxygen2: do not edit by hand % Please edit documentation in R/wrappers.R \name{removeFilter} \alias{removeFilter} \title{Remove a worksheet filter} \usage{ removeFilter(wb, sheet) } \arguments{ \item{wb}{A workbook object} \item{sheet}{A vector of names or indices of worksheets} } \description{ Removes filters from addFilter() and writeData() } \examples{ wb <- createWorkbook() addWorksheet(wb, "Sheet 1") addWorksheet(wb, "Sheet 2") addWorksheet(wb, "Sheet 3") writeData(wb, 1, iris) addFilter(wb, 1, row = 1, cols = 1:ncol(iris)) ## Equivalently writeData(wb, 2, x = iris, withFilter = TRUE) ## Similarly writeDataTable(wb, 3, iris) ## remove filters removeFilter(wb, 1:2) ## remove filters removeFilter(wb, 3) ## Does not affect tables! \dontrun{ saveWorkbook(wb, file = "removeFilterExample.xlsx", overwrite = TRUE) } } openxlsx/man/names.Rd0000644000176200001440000000113714627410100014274 0ustar liggesusers% Generated by roxygen2: do not edit by hand % Please edit documentation in R/wrappers.R \name{names} \alias{names} \alias{names.Workbook} \alias{names<-.Workbook} \title{get or set worksheet names} \usage{ \method{names}{Workbook}(x) \method{names}{Workbook}(x) <- value } \arguments{ \item{x}{A \code{Workbook} object} \item{value}{a character vector the same length as wb} } \description{ get or set worksheet names } \examples{ wb <- createWorkbook() addWorksheet(wb, "S1") addWorksheet(wb, "S2") addWorksheet(wb, "S3") names(wb) names(wb)[[2]] <- "S2a" names(wb) names(wb) <- paste("Sheet", 1:3) } openxlsx/man/ungroupRows.Rd0000644000176200001440000000077514627410100015552 0ustar liggesusers% Generated by roxygen2: do not edit by hand % Please edit documentation in R/wrappers.R \name{ungroupRows} \alias{ungroupRows} \title{Ungroup Rows} \usage{ ungroupRows(wb, sheet, rows) } \arguments{ \item{wb}{A workbook object} \item{sheet}{A name or index of a worksheet} \item{rows}{Indices of rows to ungroup} } \description{ Ungroup a selection of rows } \details{ If row was previously hidden, it will now be shown } \seealso{ \code{\link[=ungroupColumns]{ungroupColumns()}} } \author{ Joshua Sturm } openxlsx/man/writeComment.Rd0000644000176200001440000000235714627410077015670 0ustar liggesusers% Generated by roxygen2: do not edit by hand % Please edit documentation in R/CommentClass.R \name{writeComment} \alias{writeComment} \title{write a cell comment} \usage{ writeComment(wb, sheet, col, row, comment, xy = NULL) } \arguments{ \item{wb}{A workbook object} \item{sheet}{A vector of names or indices of worksheets} \item{col}{Column a column number of letter} \item{row}{A row number.} \item{comment}{A Comment object. See \code{\link[=createComment]{createComment()}}.} \item{xy}{An alternative to specifying \code{col} and \code{row} individually. A vector of the form \code{c(col, row)}.} } \description{ Write a Comment object to a worksheet } \examples{ wb <- createWorkbook() addWorksheet(wb, "Sheet 1") c1 <- createComment(comment = "this is comment") writeComment(wb, 1, col = "B", row = 10, comment = c1) s1 <- createStyle(fontSize = 12, fontColour = "red", textDecoration = c("BOLD")) s2 <- createStyle(fontSize = 9, fontColour = "black") c2 <- createComment(comment = c("This Part Bold red\n\n", "This part black"), style = c(s1, s2)) c2 writeComment(wb, 1, col = 6, row = 3, comment = c2) \dontrun{ saveWorkbook(wb, file = "writeCommentExample.xlsx", overwrite = TRUE) } } \seealso{ \code{\link[=createComment]{createComment()}} } openxlsx/man/pageBreak.Rd0000644000176200001440000000156214627410100015054 0ustar liggesusers% Generated by roxygen2: do not edit by hand % Please edit documentation in R/wrappers.R \name{pageBreak} \alias{pageBreak} \title{add a page break to a worksheet} \usage{ pageBreak(wb, sheet, i, type = "row") } \arguments{ \item{wb}{A workbook object} \item{sheet}{A name or index of a worksheet} \item{i}{row or column number to insert page break.} \item{type}{One of "row" or "column" for a row break or column break.} } \description{ insert page breaks into a worksheet } \examples{ wb <- createWorkbook() addWorksheet(wb, "Sheet 1") writeData(wb, sheet = 1, x = iris) pageBreak(wb, sheet = 1, i = 10, type = "row") pageBreak(wb, sheet = 1, i = 20, type = "row") pageBreak(wb, sheet = 1, i = 2, type = "column") \dontrun{ saveWorkbook(wb, "pageBreakExample.xlsx", TRUE) } ## In Excel: View tab -> Page Break Preview } \seealso{ \code{\link[=addWorksheet]{addWorksheet()}} } openxlsx/man/as_POSIXct_utc.Rd0000644000176200001440000000052014656134061015766 0ustar liggesusers% Generated by roxygen2: do not edit by hand % Please edit documentation in R/wrappers.R \name{as_POSIXct_utc} \alias{as_POSIXct_utc} \title{Convert to POSIXct with timezone UTC} \usage{ as_POSIXct_utc(x) } \arguments{ \item{x}{something as.POSIXct can convert} } \description{ Convert to POSIXct with timezone UTC } \keyword{internal} openxlsx/man/temp_xlsx.Rd0000644000176200001440000000054614627410077015234 0ustar liggesusers% Generated by roxygen2: do not edit by hand % Please edit documentation in R/utils.R \name{temp_xlsx} \alias{temp_xlsx} \title{helper function to create tempory directory for testing purpose} \usage{ temp_xlsx(name = "temp_xlsx") } \arguments{ \item{name}{for the temp file} } \description{ helper function to create tempory directory for testing purpose } openxlsx/man/pageSetup.Rd0000644000176200001440000001430014656123677015150 0ustar liggesusers% Generated by roxygen2: do not edit by hand % Please edit documentation in R/wrappers.R \name{pageSetup} \alias{pageSetup} \title{Set page margins, orientation and print scaling} \usage{ pageSetup( wb, sheet, orientation = NULL, scale = 100, left = 0.7, right = 0.7, top = 0.75, bottom = 0.75, header = 0.3, footer = 0.3, fitToWidth = FALSE, fitToHeight = FALSE, paperSize = NULL, printTitleRows = NULL, printTitleCols = NULL, summaryRow = NULL, summaryCol = NULL ) } \arguments{ \item{wb}{A workbook object} \item{sheet}{A name or index of a worksheet} \item{orientation}{Page orientation. One of "portrait" or "landscape"} \item{scale}{Print scaling. Numeric value between 10 and 400} \item{left}{left page margin in inches} \item{right}{right page margin in inches} \item{top}{top page margin in inches} \item{bottom}{bottom page margin in inches} \item{header}{header margin in inches} \item{footer}{footer margin in inches} \item{fitToWidth}{If \code{TRUE}, worksheet is scaled to fit to page width on printing.} \item{fitToHeight}{If \code{TRUE}, worksheet is scaled to fit to page height on printing.} \item{paperSize}{See details. Default value is 9 (A4 paper).} \item{printTitleRows}{Rows to repeat at top of page when printing. Integer vector.} \item{printTitleCols}{Columns to repeat at left when printing. Integer vector.} \item{summaryRow}{Location of summary rows in groupings. One of "Above" or "Below".} \item{summaryCol}{Location of summary columns in groupings. One of "Right" or "Left".} } \description{ Set page margins, orientation and print scaling } \details{ paperSize is an integer corresponding to: \describe{ \item{\strong{1}}{ Letter paper (8.5 in. by 11 in.)} \item{\strong{2}}{ Letter small paper (8.5 in. by 11 in.)} \item{\strong{3}}{ Tabloid paper (11 in. by 17 in.)} \item{\strong{4}}{ Ledger paper (17 in. by 11 in.)} \item{\strong{5}}{ Legal paper (8.5 in. by 14 in.)} \item{\strong{6}}{ Statement paper (5.5 in. by 8.5 in.)} \item{\strong{7}}{ Executive paper (7.25 in. by 10.5 in.)} \item{\strong{8}}{ A3 paper (297 mm by 420 mm)} \item{\strong{9}}{ A4 paper (210 mm by 297 mm)} \item{\strong{10}}{ A4 small paper (210 mm by 297 mm)} \item{\strong{11}}{ A5 paper (148 mm by 210 mm)} \item{\strong{12}}{ B4 paper (250 mm by 353 mm)} \item{\strong{13}}{ B5 paper (176 mm by 250 mm)} \item{\strong{14}}{ Folio paper (8.5 in. by 13 in.)} \item{\strong{15}}{ Quarto paper (215 mm by 275 mm)} \item{\strong{16}}{ Standard paper (10 in. by 14 in.)} \item{\strong{17}}{ Standard paper (11 in. by 17 in.)} \item{\strong{18}}{ Note paper (8.5 in. by 11 in.)} \item{\strong{19}}{ #9 envelope (3.875 in. by 8.875 in.)} \item{\strong{20}}{ #10 envelope (4.125 in. by 9.5 in.)} \item{\strong{21}}{ #11 envelope (4.5 in. by 10.375 in.)} \item{\strong{22}}{ #12 envelope (4.75 in. by 11 in.)} \item{\strong{23}}{ #14 envelope (5 in. by 11.5 in.)} \item{\strong{24}}{ C paper (17 in. by 22 in.)} \item{\strong{25}}{ D paper (22 in. by 34 in.)} \item{\strong{26}}{ E paper (34 in. by 44 in.)} \item{\strong{27}}{ DL envelope (110 mm by 220 mm)} \item{\strong{28}}{ C5 envelope (162 mm by 229 mm)} \item{\strong{29}}{ C3 envelope (324 mm by 458 mm)} \item{\strong{30}}{ C4 envelope (229 mm by 324 mm)} \item{\strong{31}}{ C6 envelope (114 mm by 162 mm)} \item{\strong{32}}{ C65 envelope (114 mm by 229 mm)} \item{\strong{33}}{ B4 envelope (250 mm by 353 mm)} \item{\strong{34}}{ B5 envelope (176 mm by 250 mm)} \item{\strong{35}}{ B6 envelope (176 mm by 125 mm)} \item{\strong{36}}{ Italy envelope (110 mm by 230 mm)} \item{\strong{37}}{ Monarch envelope (3.875 in. by 7.5 in.).} \item{\strong{38}}{ 6 3/4 envelope (3.625 in. by 6.5 in.)} \item{\strong{39}}{ US standard fanfold (14.875 in. by 11 in.)} \item{\strong{40}}{ German standard fanfold (8.5 in. by 12 in.)} \item{\strong{41}}{ German legal fanfold (8.5 in. by 13 in.)} \item{\strong{42}}{ ISO B4 (250 mm by 353 mm)} \item{\strong{43}}{ Japanese double postcard (200 mm by 148 mm)} \item{\strong{44}}{ Standard paper (9 in. by 11 in.)} \item{\strong{45}}{ Standard paper (10 in. by 11 in.)} \item{\strong{46}}{ Standard paper (15 in. by 11 in.)} \item{\strong{47}}{ Invite envelope (220 mm by 220 mm)} \item{\strong{50}}{ Letter extra paper (9.275 in. by 12 in.)} \item{\strong{51}}{ Legal extra paper (9.275 in. by 15 in.)} \item{\strong{52}}{ Tabloid extra paper (11.69 in. by 18 in.)} \item{\strong{53}}{ A4 extra paper (236 mm by 322 mm)} \item{\strong{54}}{ Letter transverse paper (8.275 in. by 11 in.)} \item{\strong{55}}{ A4 transverse paper (210 mm by 297 mm)} \item{\strong{56}}{ Letter extra transverse paper (9.275 in. by 12 in.)} \item{\strong{57}}{ SuperA/SuperA/A4 paper (227 mm by 356 mm)} \item{\strong{58}}{ SuperB/SuperB/A3 paper (305 mm by 487 mm)} \item{\strong{59}}{ Letter plus paper (8.5 in. by 12.69 in.)} \item{\strong{60}}{ A4 plus paper (210 mm by 330 mm)} \item{\strong{61}}{ A5 transverse paper (148 mm by 210 mm)} \item{\strong{62}}{ JIS B5 transverse paper (182 mm by 257 mm)} \item{\strong{63}}{ A3 extra paper (322 mm by 445 mm)} \item{\strong{64}}{ A5 extra paper (174 mm by 235 mm)} \item{\strong{65}}{ ISO B5 extra paper (201 mm by 276 mm)} \item{\strong{66}}{ A2 paper (420 mm by 594 mm)} \item{\strong{67}}{ A3 transverse paper (297 mm by 420 mm)} \item{\strong{68}}{ A3 extra transverse paper (322 mm by 445 mm)} } } \examples{ wb <- createWorkbook() addWorksheet(wb, "S1") addWorksheet(wb, "S2") writeDataTable(wb, 1, x = iris[1:30, ]) writeDataTable(wb, 2, x = iris[1:30, ], xy = c("C", 5)) ## landscape page scaled to 50\% pageSetup(wb, sheet = 1, orientation = "landscape", scale = 50) ## portrait page scales to 300\% with 0.5in left and right margins pageSetup(wb, sheet = 2, orientation = "portrait", scale = 300, left = 0.5, right = 0.5) ## print titles addWorksheet(wb, "print_title_rows") addWorksheet(wb, "print_title_cols") writeData(wb, "print_title_rows", rbind(iris, iris, iris, iris)) writeData(wb, "print_title_cols", x = rbind(mtcars, mtcars, mtcars), rowNames = TRUE) pageSetup(wb, sheet = "print_title_rows", printTitleRows = 1) ## first row pageSetup(wb, sheet = "print_title_cols", printTitleCols = 1, printTitleRows = 1) \dontrun{ saveWorkbook(wb, "pageSetupExample.xlsx", overwrite = TRUE) } } \author{ Alexander Walker, Joshua Sturm } openxlsx/man/sheetVisibility.Rd0000644000176200001440000000167014627410100016353 0ustar liggesusers% Generated by roxygen2: do not edit by hand % Please edit documentation in R/wrappers.R \name{sheetVisibility} \alias{sheetVisibility} \alias{sheetVisibility<-} \title{Get/set worksheet visible state} \usage{ sheetVisibility(wb) sheetVisibility(wb) <- value } \arguments{ \item{wb}{A workbook object} \item{value}{a logical/character vector the same length as sheetVisibility(wb)} } \value{ Character vector of worksheet names. Vector of "hidden", "visible", "veryHidden" } \description{ Get and set worksheet visible state } \examples{ wb <- createWorkbook() addWorksheet(wb, sheetName = "S1", visible = FALSE) addWorksheet(wb, sheetName = "S2", visible = TRUE) addWorksheet(wb, sheetName = "S3", visible = FALSE) sheetVisibility(wb) sheetVisibility(wb)[1] <- TRUE ## show sheet 1 sheetVisibility(wb)[2] <- FALSE ## hide sheet 2 sheetVisibility(wb)[3] <- "hidden" ## hide sheet 3 sheetVisibility(wb)[3] <- "veryHidden" ## hide sheet 3 from UI } openxlsx/man/getSheetNames.Rd0000644000176200001440000000073014627410100015723 0ustar liggesusers% Generated by roxygen2: do not edit by hand % Please edit documentation in R/wrappers.R \name{getSheetNames} \alias{getSheetNames} \title{Get names of worksheets} \usage{ getSheetNames(file) } \arguments{ \item{file}{An xlsx or xlsm file.} } \value{ Character vector of worksheet names. } \description{ Returns the worksheet names within an xlsx file } \examples{ getSheetNames(system.file("extdata", "readTest.xlsx", package = "openxlsx")) } \author{ Alexander Walker } openxlsx/man/setLastModifiedBy.Rd0000644000176200001440000000101114701063102016532 0ustar liggesusers% Generated by roxygen2: do not edit by hand % Please edit documentation in R/wrappers.R \name{setLastModifiedBy} \alias{setLastModifiedBy} \title{Set the author who modified the file last.} \usage{ setLastModifiedBy(wb, LastModifiedBy) } \arguments{ \item{wb}{A workbook object} \item{LastModifiedBy}{A string object with the name of the LastModifiedBy-User} } \description{ Just a wrapper of wb$changeLastModifiedBy() } \examples{ wb <- createWorkbook() setLastModifiedBy(wb, "test") } \author{ Philipp Schauberger } openxlsx/man/showGridLines.Rd0000644000176200001440000000144514627410100015754 0ustar liggesusers% Generated by roxygen2: do not edit by hand % Please edit documentation in R/wrappers.R \name{showGridLines} \alias{showGridLines} \title{Set worksheet gridlines to show or hide.} \usage{ showGridLines(wb, sheet, showGridLines = FALSE) } \arguments{ \item{wb}{A workbook object} \item{sheet}{A name or index of a worksheet} \item{showGridLines}{A logical. If \code{FALSE}, grid lines are hidden.} } \description{ Set worksheet gridlines to show or hide. } \examples{ wb <- loadWorkbook(file = system.file("extdata", "loadExample.xlsx", package = "openxlsx")) names(wb) ## list worksheets in workbook showGridLines(wb, 1, showGridLines = FALSE) showGridLines(wb, "testing", showGridLines = FALSE) \dontrun{ saveWorkbook(wb, "showGridLinesExample.xlsx", overwrite = TRUE) } } \author{ Alexander Walker } openxlsx/man/dataValidation.Rd0000644000176200001440000000431014627410100016111 0ustar liggesusers% Generated by roxygen2: do not edit by hand % Please edit documentation in R/wrappers.R \name{dataValidation} \alias{dataValidation} \title{Add data validation to cells} \usage{ dataValidation( wb, sheet, cols, rows, type, operator, value, allowBlank = TRUE, showInputMsg = TRUE, showErrorMsg = TRUE ) } \arguments{ \item{wb}{A workbook object} \item{sheet}{A name or index of a worksheet} \item{cols}{Contiguous columns to apply conditional formatting to} \item{rows}{Contiguous rows to apply conditional formatting to} \item{type}{One of 'whole', 'decimal', 'date', 'time', 'textLength', 'list' (see examples)} \item{operator}{One of 'between', 'notBetween', 'equal', 'notEqual', 'greaterThan', 'lessThan', 'greaterThanOrEqual', 'lessThanOrEqual'} \item{value}{a vector of length 1 or 2 depending on operator (see examples)} \item{allowBlank}{logical} \item{showInputMsg}{logical} \item{showErrorMsg}{logical} } \description{ Add Excel data validation to cells } \examples{ wb <- createWorkbook() addWorksheet(wb, "Sheet 1") addWorksheet(wb, "Sheet 2") writeDataTable(wb, 1, x = iris[1:30, ]) dataValidation(wb, 1, col = 1:3, rows = 2:31, type = "whole", operator = "between", value = c(1, 9) ) dataValidation(wb, 1, col = 5, rows = 2:31, type = "textLength", operator = "between", value = c(4, 6) ) ## Date and Time cell validation df <- data.frame( "d" = as.Date("2016-01-01") + -5:5, "t" = as.POSIXct("2016-01-01") + -5:5 * 10000 ) writeData(wb, 2, x = df) dataValidation(wb, 2, col = 1, rows = 2:12, type = "date", operator = "greaterThanOrEqual", value = as.Date("2016-01-01") ) dataValidation(wb, 2, col = 2, rows = 2:12, type = "time", operator = "between", value = df$t[c(4, 8)] ) \dontrun{ saveWorkbook(wb, "dataValidationExample.xlsx", overwrite = TRUE) } ###################################################################### ## If type == 'list' # operator argument is ignored. wb <- createWorkbook() addWorksheet(wb, "Sheet 1") addWorksheet(wb, "Sheet 2") writeDataTable(wb, sheet = 1, x = iris[1:30, ]) writeData(wb, sheet = 2, x = sample(iris$Sepal.Length, 10)) dataValidation(wb, 1, col = 1, rows = 2:31, type = "list", value = "'Sheet 2'!$A$1:$A$10") # openXL(wb) } openxlsx/man/addFilter.Rd0000644000176200001440000000210714627410100015065 0ustar liggesusers% Generated by roxygen2: do not edit by hand % Please edit documentation in R/wrappers.R \name{addFilter} \alias{addFilter} \title{Add column filters} \usage{ addFilter(wb, sheet, rows, cols) } \arguments{ \item{wb}{A workbook object} \item{sheet}{A name or index of a worksheet} \item{rows}{A row number.} \item{cols}{columns to add filter to.} } \description{ Add excel column filters to a worksheet } \details{ adds filters to worksheet columns, same as filter parameters in writeData. writeDataTable automatically adds filters to first row of a table. NOTE Can only have a single filter per worksheet unless using tables. } \examples{ wb <- createWorkbook() addWorksheet(wb, "Sheet 1") addWorksheet(wb, "Sheet 2") addWorksheet(wb, "Sheet 3") writeData(wb, 1, iris) addFilter(wb, 1, row = 1, cols = 1:ncol(iris)) ## Equivalently writeData(wb, 2, x = iris, withFilter = TRUE) ## Similarly writeDataTable(wb, 3, iris) \dontrun{ saveWorkbook(wb, file = "addFilterExample.xlsx", overwrite = TRUE) } } \seealso{ \code{\link[=writeData]{writeData()}} \code{\link[=addFilter]{addFilter()}} } openxlsx/man/as.character.formula.Rd0000644000176200001440000000074514656123677017225 0ustar liggesusers% Generated by roxygen2: do not edit by hand % Please edit documentation in R/writeData.R \name{as.character.formula} \alias{as.character.formula} \title{\code{as.character.formula()}} \usage{ \method{as.character}{formula}(x, ...) } \arguments{ \item{x}{object to be coerced or tested.} \item{...}{Not implemented} } \value{ \code{base::as.character.default(x)} } \description{ This function exists to prevent conflicts with \code{as.character.formula} methods from other packages } openxlsx/man/writeData.Rd0000644000176200001440000001510414656125167015136 0ustar liggesusers% Generated by roxygen2: do not edit by hand % Please edit documentation in R/writeData.R \name{writeData} \alias{writeData} \title{Write an object to a worksheet} \usage{ writeData( wb, sheet, x, startCol = 1, startRow = 1, array = FALSE, xy = NULL, colNames = TRUE, rowNames = FALSE, headerStyle = openxlsx_getOp("headerStyle"), borders = openxlsx_getOp("borders", "none"), borderColour = openxlsx_getOp("borderColour", "black"), borderStyle = openxlsx_getOp("borderStyle", "thin"), withFilter = openxlsx_getOp("withFilter", FALSE), keepNA = openxlsx_getOp("keepNA", FALSE), na.string = openxlsx_getOp("na.string"), name = NULL, sep = ", ", col.names, row.names ) } \arguments{ \item{wb}{A Workbook object containing a worksheet.} \item{sheet}{The worksheet to write to. Can be the worksheet index or name.} \item{x}{Object to be written. For classes supported look at the examples.} \item{startCol}{A vector specifying the starting column to write to.} \item{startRow}{A vector specifying the starting row to write to.} \item{array}{A bool if the function written is of type array} \item{xy}{An alternative to specifying \code{startCol} and \code{startRow} individually. A vector of the form \code{c(startCol, startRow)}.} \item{colNames}{If \code{TRUE}, column names of x are written.} \item{rowNames}{If \code{TRUE}, data.frame row names of x are written.} \item{headerStyle}{Custom style to apply to column names.} \item{borders}{Either "\code{none}" (default), "\code{surrounding}", "\code{columns}", "\code{rows}" or \emph{respective abbreviations}. If "\code{surrounding}", a border is drawn around the data. If "\code{rows}", a surrounding border is drawn with a border around each row. If "\code{columns}", a surrounding border is drawn with a border between each column. If "\code{all}" all cell borders are drawn.} \item{borderColour}{Colour of cell border. A valid colour (belonging to \code{colours()} or a hex colour code, eg see \href{https://www.w3schools.com/colors/colors_picker.asp}{here}).} \item{borderStyle}{Border line style \describe{ \item{\strong{none}}{ no border} \item{\strong{thin}}{ thin border} \item{\strong{medium}}{ medium border} \item{\strong{dashed}}{ dashed border} \item{\strong{dotted}}{ dotted border} \item{\strong{thick}}{ thick border} \item{\strong{double}}{ double line border} \item{\strong{hair}}{ hairline border} \item{\strong{mediumDashed}}{ medium weight dashed border} \item{\strong{dashDot}}{ dash-dot border} \item{\strong{mediumDashDot}}{ medium weight dash-dot border} \item{\strong{dashDotDot}}{ dash-dot-dot border} \item{\strong{mediumDashDotDot}}{ medium weight dash-dot-dot border} \item{\strong{slantDashDot}}{ slanted dash-dot border} }} \item{withFilter}{If \code{TRUE} or \code{NA}, add filters to the column name row. NOTE can only have one filter per worksheet.} \item{keepNA}{If \code{TRUE}, NA values are converted to #N/A (or \code{na.string}, if not NULL) in Excel, else NA cells will be empty.} \item{na.string}{If not NULL, and if \code{keepNA} is \code{TRUE}, NA values are converted to this string in Excel.} \item{name}{If not NULL, a named region is defined.} \item{sep}{Only applies to list columns. The separator used to collapse list columns to a character vector e.g. sapply(x$list_column, paste, collapse = sep).} \item{row.names, col.names}{Deprecated, please use \code{rowNames}, \code{colNames} instead} } \value{ invisible(0) } \description{ Write an object to worksheet with optional styling. } \details{ Formulae written using writeFormula to a Workbook object will not get picked up by read.xlsx(). This is because only the formula is written and left to Excel to evaluate the formula when the file is opened in Excel. } \examples{ ## See formatting vignette for further examples. ## Options for default styling (These are the defaults) options("openxlsx.borderColour" = "black") options("openxlsx.borderStyle" = "thin") options("openxlsx.dateFormat" = "mm/dd/yyyy") options("openxlsx.datetimeFormat" = "yyyy-mm-dd hh:mm:ss") options("openxlsx.numFmt" = NULL) ## Change the default border colour to #4F81BD options("openxlsx.borderColour" = "#4F81BD") ##################################################################################### ## Create Workbook object and add worksheets wb <- createWorkbook() ## Add worksheets addWorksheet(wb, "Cars") addWorksheet(wb, "Formula") x <- mtcars[1:6, ] writeData(wb, "Cars", x, startCol = 2, startRow = 3, rowNames = TRUE) ##################################################################################### ## Bordering writeData(wb, "Cars", x, rowNames = TRUE, startCol = "O", startRow = 3, borders = "surrounding", borderColour = "black" ) ## black border writeData(wb, "Cars", x, rowNames = TRUE, startCol = 2, startRow = 12, borders = "columns" ) writeData(wb, "Cars", x, rowNames = TRUE, startCol = "O", startRow = 12, borders = "rows" ) ##################################################################################### ## Header Styles hs1 <- createStyle( fgFill = "#DCE6F1", halign = "CENTER", textDecoration = "italic", border = "Bottom" ) writeData(wb, "Cars", x, colNames = TRUE, rowNames = TRUE, startCol = "B", startRow = 23, borders = "rows", headerStyle = hs1, borderStyle = "dashed" ) hs2 <- createStyle( fontColour = "#ffffff", fgFill = "#4F80BD", halign = "center", valign = "center", textDecoration = "bold", border = "TopBottomLeftRight" ) writeData(wb, "Cars", x, colNames = TRUE, rowNames = TRUE, startCol = "O", startRow = 23, borders = "columns", headerStyle = hs2 ) ##################################################################################### ## Hyperlinks ## - vectors/columns with class 'hyperlink' are written as hyperlinks' v <- rep("https://CRAN.R-project.org/", 4) names(v) <- paste0("Hyperlink", 1:4) # Optional: names will be used as display text class(v) <- "hyperlink" writeData(wb, "Cars", x = v, xy = c("B", 32)) ##################################################################################### ## Formulas ## - vectors/columns with class 'formula' are written as formulas' df <- data.frame( x = 1:3, y = 1:3, z = paste0(paste0("A", 1:3 + 1L), paste0("B", 1:3 + 1L), sep = " + "), stringsAsFactors = FALSE ) class(df$z) <- c(class(df$z), "formula") writeData(wb, sheet = "Formula", x = df) ##################################################################################### ## Save workbook ## Open in excel without saving file: openXL(wb) \dontrun{ saveWorkbook(wb, "writeDataExample.xlsx", overwrite = TRUE) } } \seealso{ \code{\link[=writeDataTable]{writeDataTable()}} } \author{ Alexander Walker } openxlsx/man/setFooter.Rd0000644000176200001440000000175514627410100015151 0ustar liggesusers% Generated by roxygen2: do not edit by hand % Please edit documentation in R/wrappers.R \name{setFooter} \alias{setFooter} \title{Set footer for all worksheets} \usage{ setFooter(wb, text, position = "center") } \arguments{ \item{wb}{A workbook object} \item{text}{footer text. A character vector of length 1.} \item{position}{Position of text in footer. One of "left", "center" or "right"} } \description{ DEPRECATED } \examples{ \dontrun{ wb <- createWorkbook("Edgar Anderson") addWorksheet(wb, "S1") writeDataTable(wb, "S1", x = iris[1:30, ], xy = c("C", 5)) ## set all headers setHeader(wb, "This is a header", position = "center") setHeader(wb, "To the left", position = "left") setHeader(wb, "On the right", position = "right") ## set all footers setFooter(wb, "Center Footer Here", position = "center") setFooter(wb, "Bottom left", position = "left") setFooter(wb, Sys.Date(), position = "right") saveWorkbook(wb, "headerFooterExample.xlsx", overwrite = TRUE) } } \author{ Alexander Walker } openxlsx/man/deleteDataColumn.Rd0000644000176200001440000000166114656123677016433 0ustar liggesusers% Generated by roxygen2: do not edit by hand % Please edit documentation in R/wrappers.R \name{deleteDataColumn} \alias{deleteDataColumn} \title{Deletes a whole column from a workbook} \usage{ deleteDataColumn(wb, sheet, col) } \arguments{ \item{wb}{A workbook object} \item{sheet}{A name or index of a worksheet} \item{col}{A column to delete} } \description{ Deletes the whole column from a workbook, shifting the remaining columns to the left } \examples{ ## write some data wb <- createWorkbook() addWorksheet(wb, "tester") for (i in seq(5)) { mat <- data.frame(x = rep(paste0(int2col(i), i), 10)) writeData(wb, sheet = 1, startRow = 1, startCol = i, mat) writeFormula(wb, sheet = 1, startRow = 12, startCol = i, x = sprintf("=COUNTA(\%s2:\%s11)", int2col(i), int2col(i))) } deleteDataColumn(wb, 1, col = 3) \dontrun{ saveWorkbook(wb, "deleteDataColumnExample.xlsx", overwrite = TRUE) } } \author{ David Zimmermann } openxlsx/man/auto_heights.Rd0000644000176200001440000000246114656134061015670 0ustar liggesusers% Generated by roxygen2: do not edit by hand % Please edit documentation in R/helperFunctions.R \name{auto_heights} \alias{auto_heights} \title{Compute optimal row heights} \usage{ auto_heights( wb, sheet, selected, fontsize = NULL, factor = 1, base_height = 15, extra_height = 12 ) } \arguments{ \item{wb}{workbook} \item{sheet}{worksheet} \item{selected}{selected rows} \item{fontsize}{font size, optional (get base font size by default)} \item{factor}{factor to manually adjust font width, e.g., for bold fonts, optional} \item{base_height}{basic row height, optional} \item{extra_height}{additional row height per new line of text, optional} } \value{ list of indices of columns with fixed widths and optimal row heights } \description{ Compute optimal row heights for cell with fixed with and enabled automatic row heights parameter } \examples{ ## Create new workbook wb <- createWorkbook() addWorksheet(wb, "Sheet") sheet <- 1 ## Write dummy data long_string <- "ABC ABC ABC ABC ABC ABC ABC ABC ABC ABC ABC" writeData(wb, sheet, c("A", long_string, "CCC"), startCol = 2, startRow = 3) writeData(wb, sheet, c(4, 5), startCol = 4, startRow = 3) ## Set column widths and get optimal row heights setColWidths(wb, sheet, c(1,2,3,4), c(10,20,10,20)) auto_heights(wb, sheet, 1:5) } \author{ David Breuer } openxlsx/man/modifyBaseFont.Rd0000644000176200001440000000177714627410100016114 0ustar liggesusers% Generated by roxygen2: do not edit by hand % Please edit documentation in R/wrappers.R \name{modifyBaseFont} \alias{modifyBaseFont} \title{Modify the default font} \usage{ modifyBaseFont(wb, fontSize = 11, fontColour = "black", fontName = "Calibri") } \arguments{ \item{wb}{A workbook object} \item{fontSize}{font size} \item{fontColour}{font colour} \item{fontName}{Name of a font} } \description{ Modify the default font for this workbook } \details{ The font name is not validated in anyway. Excel replaces unknown font names with Arial. Base font is black, size 11, Calibri. } \examples{ ## create a workbook wb <- createWorkbook() addWorksheet(wb, "S1") ## modify base font to size 10 Arial Narrow in red modifyBaseFont(wb, fontSize = 10, fontColour = "#FF0000", fontName = "Arial Narrow") writeData(wb, "S1", iris) writeDataTable(wb, "S1", x = iris, startCol = 10) ## font colour does not affect tables \dontrun{ saveWorkbook(wb, "modifyBaseFontExample.xlsx", overwrite = TRUE) } } \author{ Alexander Walker } openxlsx/man/addStyle.Rd0000644000176200001440000000327014627410100014742 0ustar liggesusers% Generated by roxygen2: do not edit by hand % Please edit documentation in R/wrappers.R \name{addStyle} \alias{addStyle} \title{Add a style to a set of cells} \usage{ addStyle(wb, sheet, style, rows, cols, gridExpand = FALSE, stack = FALSE) } \arguments{ \item{wb}{A Workbook object containing a worksheet.} \item{sheet}{A worksheet to apply the style to.} \item{style}{A style object returned from createStyle()} \item{rows}{Rows to apply style to.} \item{cols}{columns to apply style to.} \item{gridExpand}{If \code{TRUE}, style will be applied to all combinations of rows and cols.} \item{stack}{If \code{TRUE} the new style is merged with any existing cell styles. If FALSE, any existing style is replaced by the new style.} } \description{ Function adds a style to a specified set of cells. } \examples{ ## See package vignette for more examples. ## Create a new workbook wb <- createWorkbook("My name here") ## Add a worksheets addWorksheet(wb, "Expenditure", gridLines = FALSE) ## write data to worksheet 1 writeData(wb, sheet = 1, USPersonalExpenditure, rowNames = TRUE) ## create and add a style to the column headers headerStyle <- createStyle( fontSize = 14, fontColour = "#FFFFFF", halign = "center", fgFill = "#4F81BD", border = "TopBottom", borderColour = "#4F81BD" ) ## style for body bodyStyle <- createStyle(border = "TopBottom", borderColour = "#4F81BD") addStyle(wb, sheet = 1, bodyStyle, rows = 2:6, cols = 1:6, gridExpand = TRUE) setColWidths(wb, 1, cols = 1, widths = 21) ## set column width for row names column \dontrun{ saveWorkbook(wb, "addStyleExample.xlsx", overwrite = TRUE) } } \seealso{ \code{\link[=createStyle]{createStyle()}} expand.grid } \author{ Alexander Walker } openxlsx/man/renameWorksheet.Rd0000644000176200001440000000201714627410100016332 0ustar liggesusers% Generated by roxygen2: do not edit by hand % Please edit documentation in R/wrappers.R \name{renameWorksheet} \alias{renameWorksheet} \title{Rename a worksheet} \usage{ renameWorksheet(wb, sheet, newName) } \arguments{ \item{wb}{A Workbook object containing a worksheet} \item{sheet}{The name or index of the worksheet to rename} \item{newName}{The new name of the worksheet. No longer than 31 chars.} } \description{ Rename a worksheet } \details{ DEPRECATED. Use \code{\link[=names]{names()}} } \examples{ ## Create a new workbook wb <- createWorkbook("CREATOR") ## Add 3 worksheets addWorksheet(wb, "Worksheet Name") addWorksheet(wb, "This is worksheet 2") addWorksheet(wb, "Not the best name") #' ## rename all worksheets names(wb) <- c("A", "B", "C") ## Rename worksheet 1 & 3 renameWorksheet(wb, 1, "New name for sheet 1") names(wb)[[1]] <- "New name for sheet 1" names(wb)[[3]] <- "A better name" ## Save workbook \dontrun{ saveWorkbook(wb, "renameWorksheetExample.xlsx", overwrite = TRUE) } } \author{ Alexander Walker } openxlsx/man/createComment.Rd0000644000176200001440000000257514627410077016003 0ustar liggesusers% Generated by roxygen2: do not edit by hand % Please edit documentation in R/CommentClass.R \name{createComment} \alias{createComment} \title{create a Comment object} \usage{ createComment( comment, author = Sys.getenv("USERNAME"), style = NULL, visible = TRUE, width = 2, height = 4 ) } \arguments{ \item{comment}{Comment text. Character vector.} \item{author}{Author of comment. Character vector of length 1} \item{style}{A Style object or list of style objects the same length as comment vector. See \code{\link[=createStyle]{createStyle()}}.} \item{visible}{TRUE or FALSE. Is comment visible.} \item{width, height}{Width and height of textbook (in number of cells); doubles are rounded with \code{base::round()}} } \description{ Create a cell Comment object to pass to writeComment() } \examples{ wb <- createWorkbook() addWorksheet(wb, "Sheet 1") c1 <- createComment(comment = "this is comment") writeComment(wb, 1, col = "B", row = 10, comment = c1) s1 <- createStyle(fontSize = 12, fontColour = "red", textDecoration = c("BOLD")) s2 <- createStyle(fontSize = 9, fontColour = "black") c2 <- createComment(comment = c("This Part Bold red\n\n", "This part black"), style = c(s1, s2)) c2 writeComment(wb, 1, col = 6, row = 3, comment = c2) \dontrun{ saveWorkbook(wb, file = "createCommentExample.xlsx", overwrite = TRUE) } } \seealso{ \code{\link[=writeComment]{writeComment()}} } openxlsx/man/openxlsxFontSizeLookupTable.Rd0000644000176200001440000000105114656125167020712 0ustar liggesusers% Generated by roxygen2: do not edit by hand % Please edit documentation in R/data-fontSizeLookupTables.R \docType{data} \name{openxlsxFontSizeLookupTable} \alias{openxlsxFontSizeLookupTable} \alias{openxlsxFontSizeLookupTableBold} \title{Font Size Lookup tables} \format{ A data.frame with column names corresponding to font names } \usage{ openxlsxFontSizeLookupTable openxlsxFontSizeLookupTableBold } \description{ Lookup tables for font size } \examples{ data(openxlsxFontSizeLookupTable) data(openxlsxFontSizeLookupTableBold) } \keyword{datasets} openxlsx/man/int2col.Rd0000644000176200001440000000046714627410100014550 0ustar liggesusers% Generated by roxygen2: do not edit by hand % Please edit documentation in R/wrappers.R \name{int2col} \alias{int2col} \title{Convert integer to Excel column} \usage{ int2col(x) } \arguments{ \item{x}{A numeric vector} } \description{ Converts an integer to an Excel column label. } \examples{ int2col(1:10) } openxlsx/man/cloneWorksheet.Rd0000644000176200001440000000142214627410100016162 0ustar liggesusers% Generated by roxygen2: do not edit by hand % Please edit documentation in R/wrappers.R \name{cloneWorksheet} \alias{cloneWorksheet} \title{Clone a worksheet to a workbook} \usage{ cloneWorksheet(wb, sheetName, clonedSheet) } \arguments{ \item{wb}{A Workbook object to attach the new worksheet} \item{sheetName}{A name for the new worksheet} \item{clonedSheet}{The name of the existing worksheet to be cloned.} } \value{ XML tree } \description{ Clone a worksheet to a Workbook object } \examples{ ## Create a new workbook wb <- createWorkbook("Fred") ## Add 3 worksheets addWorksheet(wb, "Sheet 1") cloneWorksheet(wb, "Sheet 2", clonedSheet = "Sheet 1") ## Save workbook \dontrun{ saveWorkbook(wb, "cloneWorksheetExample.xlsx", overwrite = TRUE) } } \author{ Reinhold Kainhofer } openxlsx/man/convertFromExcelRef.Rd0000644000176200001440000000073614627410100017117 0ustar liggesusers% Generated by roxygen2: do not edit by hand % Please edit documentation in R/wrappers.R \name{convertFromExcelRef} \alias{convertFromExcelRef} \title{Convert excel column name to integer index} \usage{ convertFromExcelRef(col) } \arguments{ \item{col}{An excel column reference} } \description{ Convert excel column name to integer index e.g. "J" to 10 } \examples{ convertFromExcelRef("DOG") convertFromExcelRef("COW") ## numbers will be removed convertFromExcelRef("R22") } openxlsx/man/conditionalFormatting.Rd0000644000176200001440000002455514646006410017546 0ustar liggesusers% Generated by roxygen2: do not edit by hand % Please edit documentation in R/conditional_formatting.R \name{conditionalFormatting} \alias{conditionalFormatting} \alias{databar} \title{Add conditional formatting to cells} \usage{ conditionalFormatting( wb, sheet, cols, rows, rule = NULL, style = NULL, type = "expression", ... ) } \arguments{ \item{wb}{A workbook object} \item{sheet}{A name or index of a worksheet} \item{cols}{Columns to apply conditional formatting to} \item{rows}{Rows to apply conditional formatting to} \item{rule}{The condition under which to apply the formatting. See examples.} \item{style}{A style to apply to those cells that satisfy the rule. Default is createStyle(fontColour = "#9C0006", bgFill = "#FFC7CE")} \item{type}{Either 'expression', 'colourScale', 'databar', 'duplicates', 'beginsWith', 'endsWith', 'topN', 'bottomN', 'blanks', 'notBlanks', 'contains' or 'notContains' (case insensitive).} \item{...}{See below} } \description{ Add conditional formatting to cells } \details{ See Examples. If type == "expression" \itemize{ \item{style is a Style object. See \code{\link[=createStyle]{createStyle()}}} \item{rule is an expression. Valid operators are "<", "<=", ">", ">=", "==", "!=".} } If type == "colourScale" \itemize{ \item{style is a vector of colours with length 2 or 3} \item{rule can be NULL or a vector of colours of equal length to styles} } If type == "databar" \itemize{ \item{style is a vector of colours with length 2 or 3} \item{rule is a numeric vector specifying the range of the databar colours. Must be equal length to style} \item{... \itemize{ \item{\strong{showvalue} If FALSE the cell value is hidden. Default TRUE.} \item{\strong{gradient} If FALSE colour gradient is removed. Default TRUE.} \item{\strong{border} If FALSE the border around the database is hidden. Default TRUE.} } } } If type == "duplicates" \itemize{ \item{style is a Style object. See \code{\link[=createStyle]{createStyle()}}} \item{rule is ignored.} } If type == "contains" \itemize{ \item{style is a Style object. See \code{\link[=createStyle]{createStyle()}}} \item{rule is the text to look for within cells} } If type == "between" \itemize{ \item{style is a Style object. See \code{\link[=createStyle]{createStyle()}}} \item{rule is a numeric vector of length 2 specifying lower and upper bound (Inclusive)} } If type == "blanks" \itemize{ \item{style is a Style object. See \code{\link[=createStyle]{createStyle()}}} \item{rule is ignored.} } If type == "notBlanks" \itemize{ \item{style is a Style object. See \code{\link[=createStyle]{createStyle()}}} \item{rule is ignored.} } If type == "topN" \itemize{ \item{style is a Style object. See \code{\link[=createStyle]{createStyle()}}} \item{rule is ignored} \item{... \itemize{ \item{\strong{rank} numeric vector of length 1 indicating number of highest values.} \item{\strong{percent} TRUE if you want top N percentage.} } } } If type == "bottomN" \itemize{ \item{style is a Style object. See \code{\link[=createStyle]{createStyle()}}} \item{rule is ignored} \item{... \itemize{ \item{\strong{rank} numeric vector of length 1 indicating number of lowest values.} \item{\strong{percent} TRUE if you want bottom N percentage.} } } } } \examples{ wb <- createWorkbook() addWorksheet(wb, "cellIs") addWorksheet(wb, "Moving Row") addWorksheet(wb, "Moving Col") addWorksheet(wb, "Dependent on") addWorksheet(wb, "Duplicates") addWorksheet(wb, "containsText") addWorksheet(wb, "notcontainsText") addWorksheet(wb, "beginsWith") addWorksheet(wb, "endsWith") addWorksheet(wb, "colourScale", zoom = 30) addWorksheet(wb, "databar") addWorksheet(wb, "between") addWorksheet(wb, "topN") addWorksheet(wb, "bottomN") addWorksheet(wb, "containsBlanks") addWorksheet(wb, "notContainsBlanks") addWorksheet(wb, "logical operators") negStyle <- createStyle(fontColour = "#9C0006", bgFill = "#FFC7CE") posStyle <- createStyle(fontColour = "#006100", bgFill = "#C6EFCE") ## rule applies to all each cell in range writeData(wb, "cellIs", -5:5) writeData(wb, "cellIs", LETTERS[1:11], startCol = 2) conditionalFormatting(wb, "cellIs", cols = 1, rows = 1:11, rule = "!=0", style = negStyle ) conditionalFormatting(wb, "cellIs", cols = 1, rows = 1:11, rule = "==0", style = posStyle ) ## highlight row dependent on first cell in row writeData(wb, "Moving Row", -5:5) writeData(wb, "Moving Row", LETTERS[1:11], startCol = 2) conditionalFormatting(wb, "Moving Row", cols = 1:2, rows = 1:11, rule = "$A1<0", style = negStyle ) conditionalFormatting(wb, "Moving Row", cols = 1:2, rows = 1:11, rule = "$A1>0", style = posStyle ) ## highlight column dependent on first cell in column writeData(wb, "Moving Col", -5:5) writeData(wb, "Moving Col", LETTERS[1:11], startCol = 2) conditionalFormatting(wb, "Moving Col", cols = 1:2, rows = 1:11, rule = "A$1<0", style = negStyle ) conditionalFormatting(wb, "Moving Col", cols = 1:2, rows = 1:11, rule = "A$1>0", style = posStyle ) ## highlight entire range cols X rows dependent only on cell A1 writeData(wb, "Dependent on", -5:5) writeData(wb, "Dependent on", LETTERS[1:11], startCol = 2) conditionalFormatting(wb, "Dependent on", cols = 1:2, rows = 1:11, rule = "$A$1<0", style = negStyle ) conditionalFormatting(wb, "Dependent on", cols = 1:2, rows = 1:11, rule = "$A$1>0", style = posStyle ) ## highlight cells in column 1 based on value in column 2 writeData(wb, "Dependent on", data.frame(x = 1:10, y = runif(10)), startRow = 15) conditionalFormatting(wb, "Dependent on", cols = 1, rows = 16:25, rule = "B16<0.5", style = negStyle ) conditionalFormatting(wb, "Dependent on", cols = 1, rows = 16:25, rule = "B16>=0.5", style = posStyle ) ## highlight duplicates using default style writeData(wb, "Duplicates", sample(LETTERS[1:15], size = 10, replace = TRUE)) conditionalFormatting(wb, "Duplicates", cols = 1, rows = 1:10, type = "duplicates") ## cells containing text fn <- function(x) paste(sample(LETTERS, 10), collapse = "-") writeData(wb, "containsText", sapply(1:10, fn)) conditionalFormatting(wb, "containsText", cols = 1, rows = 1:10, type = "contains", rule = "A") ## cells not containing text fn <- function(x) paste(sample(LETTERS, 10), collapse = "-") writeData(wb, "containsText", sapply(1:10, fn)) conditionalFormatting(wb, "notcontainsText", cols = 1, rows = 1:10, type = "notcontains", rule = "A") ## cells begins with text fn <- function(x) paste(sample(LETTERS, 10), collapse = "-") writeData(wb, "beginsWith", sapply(1:100, fn)) conditionalFormatting(wb, "beginsWith", cols = 1, rows = 1:100, type = "beginsWith", rule = "A") ## cells ends with text fn <- function(x) paste(sample(LETTERS, 10), collapse = "-") writeData(wb, "endsWith", sapply(1:100, fn)) conditionalFormatting(wb, "endsWith", cols = 1, rows = 1:100, type = "endsWith", rule = "A") ## colourscale colours cells based on cell value df <- read.xlsx(system.file("extdata", "readTest.xlsx", package = "openxlsx"), sheet = 4) writeData(wb, "colourScale", df, colNames = FALSE) ## write data.frame ## rule is a vector or colours of length 2 or 3 (any hex colour or any of colours()) ## If rule is NULL, min and max of cells is used. Rule must be the same length as style or NULL. conditionalFormatting(wb, "colourScale", cols = 1:ncol(df), rows = 1:nrow(df), style = c("black", "white"), rule = c(0, 255), type = "colourScale" ) setColWidths(wb, "colourScale", cols = 1:ncol(df), widths = 1.07) setRowHeights(wb, "colourScale", rows = 1:nrow(df), heights = 7.5) ## Databars writeData(wb, "databar", -5:5) conditionalFormatting(wb, "databar", cols = 1, rows = 1:11, type = "databar") ## Default colours ## Between # Highlight cells in interval [-2, 2] writeData(wb, "between", -5:5) conditionalFormatting(wb, "between", cols = 1, rows = 1:11, type = "between", rule = c(-2, 2)) ## Top N writeData(wb, "topN", data.frame(x = 1:10, y = rnorm(10))) # Highlight top 5 values in column x conditionalFormatting(wb, "topN", cols = 1, rows = 2:11, style = posStyle, type = "topN", rank = 5)#' # Highlight top 20 percentage in column y conditionalFormatting(wb, "topN", cols = 2, rows = 2:11, style = posStyle, type = "topN", rank = 20, percent = TRUE) ## Bottom N writeData(wb, "bottomN", data.frame(x = 1:10, y = rnorm(10))) # Highlight bottom 5 values in column x conditionalFormatting(wb, "bottomN", cols = 1, rows = 2:11, style = negStyle, type = "topN", rank = 5) # Highlight bottom 20 percentage in column y conditionalFormatting(wb, "bottomN", cols = 2, rows = 2:11, style = negStyle, type = "topN", rank = 20, percent = TRUE) ## cells containing blanks sample_data <- sample(c("X", NA_character_), 10, replace = TRUE) writeData(wb, "containsBlanks", sample_data) conditionalFormatting(wb, "containsBlanks", cols = 1, rows = 1:10, type = "blanks", style = negStyle) ## cells not containing blanks sample_data <- sample(c("X", NA_character_), 10, replace = TRUE) writeData(wb, "notContainsBlanks", sample_data) conditionalFormatting(wb, "notContainsBlanks", cols = 1, rows = 1:10, type = "notBlanks", style = posStyle) ## Logical Operators # You can use Excels logical Operators writeData(wb, "logical operators", 1:10) conditionalFormatting(wb, "logical operators", cols = 1, rows = 1:10, rule = "OR($A1=1,$A1=3,$A1=5,$A1=7)" ) \dontrun{ saveWorkbook(wb, "conditionalFormattingExample.xlsx", TRUE) } ######################################################################### ## Databar Example wb <- createWorkbook() addWorksheet(wb, "databar") ## Databars writeData(wb, "databar", -5:5, startCol = 1) conditionalFormatting(wb, "databar", cols = 1, rows = 1:11, type = "databar") ## Defaults writeData(wb, "databar", -5:5, startCol = 3) conditionalFormatting(wb, "databar", cols = 3, rows = 1:11, type = "databar", border = FALSE) writeData(wb, "databar", -5:5, startCol = 5) conditionalFormatting(wb, "databar", cols = 5, rows = 1:11, type = "databar", style = c("#a6a6a6"), showValue = FALSE ) writeData(wb, "databar", -5:5, startCol = 7) conditionalFormatting(wb, "databar", cols = 7, rows = 1:11, type = "databar", style = c("#a6a6a6"), showValue = FALSE, gradient = FALSE ) writeData(wb, "databar", -5:5, startCol = 9) conditionalFormatting(wb, "databar", cols = 9, rows = 1:11, type = "databar", style = c("#a6a6a6", "#a6a6a6"), showValue = FALSE, gradient = FALSE ) \dontrun{ saveWorkbook(wb, file = "databarExample.xlsx", overwrite = TRUE) } } \seealso{ \code{\link[=createStyle]{createStyle()}} } \author{ Alexander Walker, Philipp Schauberger } openxlsx/man/saveWorkbook.Rd0000644000176200001440000000223014627410100015640 0ustar liggesusers% Generated by roxygen2: do not edit by hand % Please edit documentation in R/wrappers.R \name{saveWorkbook} \alias{saveWorkbook} \title{save Workbook to file} \usage{ saveWorkbook(wb, file, overwrite = FALSE, returnValue = FALSE) } \arguments{ \item{wb}{A Workbook object to write to file} \item{file}{A character string naming an xlsx file} \item{overwrite}{If \code{TRUE}, overwrite any existing file.} \item{returnValue}{If \code{TRUE}, returns \code{TRUE} in case of a success, else \code{FALSE}. If flag is \code{FALSE}, then no return value is returned.} } \description{ save a Workbook object to file } \examples{ ## Create a new workbook and add a worksheet wb <- createWorkbook("Creator of workbook") addWorksheet(wb, sheetName = "My first worksheet") ## Save workbook to working directory \dontrun{ saveWorkbook(wb, file = "saveWorkbookExample.xlsx", overwrite = TRUE) } } \seealso{ \code{\link[=createWorkbook]{createWorkbook()}} \code{\link[=addWorksheet]{addWorksheet()}} \code{\link[=loadWorkbook]{loadWorkbook()}} \code{\link[=writeData]{writeData()}} \code{\link[=writeDataTable]{writeDataTable()}} } \author{ Alexander Walker, Philipp Schauberger } openxlsx/man/insertImage.Rd0000644000176200001440000000344514672624216015463 0ustar liggesusers% Generated by roxygen2: do not edit by hand % Please edit documentation in R/wrappers.R \name{insertImage} \alias{insertImage} \title{Insert an image into a worksheet} \usage{ insertImage( wb, sheet, file, width = 6, height = 3, startRow = 1, startCol = 1, units = "in", dpi = 300, address ) } \arguments{ \item{wb}{A workbook object} \item{sheet}{A name or index of a worksheet} \item{file}{An image file. Valid file types are: jpeg, png, bmp} \item{width}{Width of figure.} \item{height}{Height of figure.} \item{startRow}{Row coordinate of upper left corner of the image} \item{startCol}{Column coordinate of upper left corner of the image} \item{units}{Units of width and height. Can be "in", "cm" or "px"} \item{dpi}{Image resolution used for conversion between units.} \item{address}{An optional character string specifying an external URL, relative or absolute path to a file, or mailto string (e.g. "mailto:example@example.com") that will be opened when the image is clicked.} } \description{ Insert an image into a worksheet } \examples{ ## Create a new workbook wb <- createWorkbook("Ayanami") ## Add some worksheets addWorksheet(wb, "Sheet 1") addWorksheet(wb, "Sheet 2") addWorksheet(wb, "Sheet 3") addWorksheet(wb, "Sheet 4") ## Insert images img <- system.file("extdata", "einstein.jpg", package = "openxlsx") insertImage(wb, "Sheet 1", img, startRow = 5, startCol = 3, width = 6, height = 5) insertImage(wb, 2, img, startRow = 2, startCol = 2) insertImage(wb, 3, img, width = 15, height = 12, startRow = 3, startCol = "G", units = "cm") insertImage(wb, 4, img, address = "https://github.com/ycphs/openxlsx") ## Save workbook \dontrun{ saveWorkbook(wb, "insertImageExample.xlsx", overwrite = TRUE) } } \seealso{ \code{\link[=insertPlot]{insertPlot()}} } \author{ Alexander Walker } openxlsx/man/setHeader.Rd0000644000176200001440000000175514627410100015103 0ustar liggesusers% Generated by roxygen2: do not edit by hand % Please edit documentation in R/wrappers.R \name{setHeader} \alias{setHeader} \title{Set header for all worksheets} \usage{ setHeader(wb, text, position = "center") } \arguments{ \item{wb}{A workbook object} \item{text}{header text. A character vector of length 1.} \item{position}{Position of text in header. One of "left", "center" or "right"} } \description{ DEPRECATED } \examples{ \dontrun{ wb <- createWorkbook("Edgar Anderson") addWorksheet(wb, "S1") writeDataTable(wb, "S1", x = iris[1:30, ], xy = c("C", 5)) ## set all headers setHeader(wb, "This is a header", position = "center") setHeader(wb, "To the left", position = "left") setHeader(wb, "On the right", position = "right") ## set all footers setFooter(wb, "Center Footer Here", position = "center") setFooter(wb, "Bottom left", position = "left") setFooter(wb, Sys.Date(), position = "right") saveWorkbook(wb, "headerHeaderExample.xlsx", overwrite = TRUE) } } \author{ Alexander Walker } openxlsx/man/get_worksheet_entries.Rd0000644000176200001440000000132614656134061017607 0ustar liggesusers% Generated by roxygen2: do not edit by hand % Please edit documentation in R/helperFunctions.R \name{get_worksheet_entries} \alias{get_worksheet_entries} \title{Get entries from workbook worksheet} \usage{ get_worksheet_entries(wb, sheet) } \arguments{ \item{wb}{workbook} \item{sheet}{worksheet} } \value{ vector of strings } \description{ Get all entries from workbook worksheet without xml tags } \examples{ ## Create new workbook wb <- createWorkbook() addWorksheet(wb, "Sheet") sheet <- 1 ## Write dummy data writeData(wb, sheet, c("A", "BB", "CCC"), startCol = 2, startRow = 3) writeData(wb, sheet, c(4, 5), startCol = 4, startRow = 3) ## Get text entries get_worksheet_entries(wb, sheet) } \author{ David Breuer } openxlsx/man/copyWorkbook.Rd0000644000176200001440000000101714627410100015656 0ustar liggesusers% Generated by roxygen2: do not edit by hand % Please edit documentation in R/wrappers.R \name{copyWorkbook} \alias{copyWorkbook} \title{Copy a Workbook object.} \usage{ copyWorkbook(wb) } \arguments{ \item{wb}{A workbook object} } \value{ Workbook } \description{ Just a wrapper of wb$copy() } \examples{ wb <- createWorkbook() wb2 <- wb ## does not create a copy wb3 <- copyWorkbook(wb) ## wrapper for wb$copy() addWorksheet(wb, "Sheet1") ## adds worksheet to both wb and wb2 but not wb3 names(wb) names(wb2) names(wb3) } openxlsx/man/sheetVisible.Rd0000644000176200001440000000151214627410100015614 0ustar liggesusers% Generated by roxygen2: do not edit by hand % Please edit documentation in R/wrappers.R \name{sheetVisible} \alias{sheetVisible} \alias{sheetVisible<-} \title{Get worksheet visible state.} \usage{ sheetVisible(wb) sheetVisible(wb) <- value } \arguments{ \item{wb}{A workbook object} \item{value}{a logical vector the same length as sheetVisible(wb)} } \value{ Character vector of worksheet names. TRUE if sheet is visible, FALSE if sheet is hidden } \description{ DEPRECATED - Use function 'sheetVisibility() } \examples{ wb <- createWorkbook() addWorksheet(wb, sheetName = "S1", visible = FALSE) addWorksheet(wb, sheetName = "S2", visible = TRUE) addWorksheet(wb, sheetName = "S3", visible = FALSE) sheetVisible(wb) sheetVisible(wb)[1] <- TRUE ## show sheet 1 sheetVisible(wb)[2] <- FALSE ## hide sheet 2 } \author{ Alexander Walker } openxlsx/man/conditionalFormat.Rd0000644000176200001440000000244714627410100016652 0ustar liggesusers% Generated by roxygen2: do not edit by hand % Please edit documentation in R/wrappers.R \name{conditionalFormat} \alias{conditionalFormat} \title{Add conditional formatting to cells} \usage{ conditionalFormat( wb, sheet, cols, rows, rule = NULL, style = NULL, type = "expression" ) } \arguments{ \item{wb}{A workbook object} \item{sheet}{A name or index of a worksheet} \item{cols}{Columns to apply conditional formatting to} \item{rows}{Rows to apply conditional formatting to} \item{rule}{The condition under which to apply the formatting or a vector of colours. See examples.} \item{style}{A style to apply to those cells that satisfy the rule. A Style object returned from createStyle()} \item{type}{Either 'expression', 'colorscale' or 'databar'. If 'expression' the formatting is determined by a formula. If colorScale cells are coloured based on cell value. See examples.} } \description{ DEPRECATED! USE \code{\link[=conditionalFormatting]{conditionalFormatting()}} } \details{ DEPRECATED! USE \code{\link[=conditionalFormatting]{conditionalFormatting()}} Valid operators are "<", "<=", ">", ">=", "==", "!=". See Examples. Default style given by: createStyle(fontColour = "#9C0006", bgFill = "#FFC7CE") } \seealso{ \code{\link[=createStyle]{createStyle()}} } \author{ Alexander Walker } openxlsx/man/removeRowHeights.Rd0000644000176200001440000000147114627410100016473 0ustar liggesusers% Generated by roxygen2: do not edit by hand % Please edit documentation in R/wrappers.R \name{removeRowHeights} \alias{removeRowHeights} \title{Remove custom row heights from a worksheet} \usage{ removeRowHeights(wb, sheet, rows) } \arguments{ \item{wb}{A workbook object} \item{sheet}{A name or index of a worksheet} \item{rows}{Indices of rows to remove custom height (if any) from.} } \description{ Remove row heights from a worksheet } \examples{ ## Create a new workbook wb <- loadWorkbook(file = system.file("extdata", "loadExample.xlsx", package = "openxlsx")) ## remove any custom row heights in rows 1 to 10 removeRowHeights(wb, 1, rows = 1:10) \dontrun{ saveWorkbook(wb, "removeRowHeightsExample.xlsx", overwrite = TRUE) } } \seealso{ \code{\link[=setRowHeights]{setRowHeights()}} } \author{ Alexander Walker } openxlsx/man/worksheetOrder.Rd0000644000176200001440000000260314627410100016177 0ustar liggesusers% Generated by roxygen2: do not edit by hand % Please edit documentation in R/wrappers.R \name{worksheetOrder} \alias{worksheetOrder} \alias{worksheetOrder<-} \title{Order of worksheets in xlsx file} \usage{ worksheetOrder(wb) worksheetOrder(wb) <- value } \arguments{ \item{wb}{A workbook object} \item{value}{Vector specifying order to write worksheets to file} } \description{ Get/set order of worksheets in a Workbook object } \details{ This function does not reorder the worksheets within the workbook object, it simply shuffles the order when writing to file. } \examples{ ## setup a workbook with 3 worksheets wb <- createWorkbook() addWorksheet(wb = wb, sheetName = "Sheet 1", gridLines = FALSE) writeDataTable(wb = wb, sheet = 1, x = iris) addWorksheet(wb = wb, sheetName = "mtcars (Sheet 2)", gridLines = FALSE) writeData(wb = wb, sheet = 2, x = mtcars) addWorksheet(wb = wb, sheetName = "Sheet 3", gridLines = FALSE) writeData(wb = wb, sheet = 3, x = Formaldehyde) worksheetOrder(wb) names(wb) worksheetOrder(wb) <- c(1, 3, 2) # switch position of sheets 2 & 3 writeData(wb, 2, 'This is still the "mtcars" worksheet', startCol = 15) worksheetOrder(wb) names(wb) ## ordering within workbook is not changed \dontrun{ saveWorkbook(wb, "worksheetOrderExample.xlsx", overwrite = TRUE) } worksheetOrder(wb) <- c(3, 2, 1) \dontrun{ saveWorkbook(wb, "worksheetOrderExample2.xlsx", overwrite = TRUE) } } openxlsx/man/write.xlsx.Rd0000644000176200001440000001160114656123677015343 0ustar liggesusers% Generated by roxygen2: do not edit by hand % Please edit documentation in R/writexlsx.R \name{write.xlsx} \alias{write.xlsx} \title{write data to an xlsx file} \usage{ write.xlsx(x, file, asTable = FALSE, overwrite = TRUE, ...) } \arguments{ \item{x}{A data.frame or a (named) list of objects that can be handled by \code{\link[=writeData]{writeData()}} or \code{\link[=writeDataTable]{writeDataTable()}} to write to file} \item{file}{A file path to save the xlsx file} \item{asTable}{If \code{TRUE} will use \code{\link[=writeDataTable]{writeDataTable()}} rather than \code{\link[=writeData]{writeData()}} to write \code{x} to the file (default: \code{FALSE})} \item{overwrite}{Overwrite existing file (Defaults to \code{TRUE} as with \code{write.table})} \item{...}{Additional arguments passed to \code{\link[=buildWorkbook]{buildWorkbook()}}; see details} } \value{ A workbook object } \description{ write a data.frame or list of data.frames to an xlsx file } \section{Optional Parameters}{ \strong{createWorkbook Parameters} \describe{ \item{\strong{creator}}{ A string specifying the workbook author} } \strong{addWorksheet Parameters} \describe{ \item{\strong{sheetName}}{ Name of the worksheet} \item{\strong{gridLines}}{ A logical. If \code{FALSE}, the worksheet grid lines will be hidden.} \item{\strong{tabColour}}{ Colour of the worksheet tab. A valid colour (belonging to colours()) or a valid hex colour beginning with "#".} \item{\strong{zoom}}{ A numeric between 10 and 400. Worksheet zoom level as a percentage.} } \strong{writeData/writeDataTable Parameters} \describe{ \item{\strong{startCol}}{ A vector specifying the starting column(s) to write df} \item{\strong{startRow}}{ A vector specifying the starting row(s) to write df} \item{\strong{xy}}{ An alternative to specifying startCol and startRow individually. A vector of the form c(startCol, startRow)} \item{\strong{colNames or col.names}}{ If \code{TRUE}, column names of x are written.} \item{\strong{rowNames or row.names}}{ If \code{TRUE}, row names of x are written.} \item{\strong{headerStyle}}{ Custom style to apply to column names.} \item{\strong{borders}}{ Either "surrounding", "columns" or "rows" or NULL. If "surrounding", a border is drawn around the data. If "rows", a surrounding border is drawn a border around each row. If "columns", a surrounding border is drawn with a border between each column. If "\code{all}" all cell borders are drawn.} \item{\strong{borderColour}}{ Colour of cell border} \item{\strong{borderStyle}}{ Border line style.} \item{\strong{keepNA}}{If \code{TRUE}, NA values are converted to #N/A (or \code{na.string}, if not NULL) in Excel, else NA cells will be empty. Defaults to FALSE.} \item{\strong{na.string}}{If not NULL, and if \code{keepNA} is \code{TRUE}, NA values are converted to this string in Excel. Defaults to NULL.} } \strong{freezePane Parameters} \describe{ \item{\strong{firstActiveRow}}{Top row of active region to freeze pane.} \item{\strong{firstActiveCol}}{Furthest left column of active region to freeze pane.} \item{\strong{firstRow}}{If \code{TRUE}, freezes the first row (equivalent to firstActiveRow = 2)} \item{\strong{firstCol}}{If \code{TRUE}, freezes the first column (equivalent to firstActiveCol = 2)} } \strong{colWidths Parameters} \describe{ \item{\strong{colWidths}}{May be a single value for all columns (or "auto"), or a list of vectors that will be recycled for each sheet (see examples)} } } \examples{ ## write to working directory options("openxlsx.borderColour" = "#4F80BD") ## set default border colour \dontrun{ write.xlsx(iris, file = "writeXLSX1.xlsx", colNames = TRUE, borders = "columns") write.xlsx(iris, file = "writeXLSX2.xlsx", colNames = TRUE, borders = "surrounding") } hs <- createStyle( textDecoration = "BOLD", fontColour = "#FFFFFF", fontSize = 12, fontName = "Arial Narrow", fgFill = "#4F80BD" ) \dontrun{ write.xlsx(iris, file = "writeXLSX3.xlsx", colNames = TRUE, borders = "rows", headerStyle = hs ) } ## Lists elements are written to individual worksheets, using list names as sheet names if available l <- list("IRIS" = iris, "MTCATS" = mtcars, matrix(runif(1000), ncol = 5)) \dontrun{ write.xlsx(l, "writeList1.xlsx", colWidths = c(NA, "auto", "auto")) } ## different sheets can be given different parameters \dontrun{ write.xlsx(l, "writeList2.xlsx", startCol = c(1, 2, 3), startRow = 2, asTable = c(TRUE, TRUE, FALSE), withFilter = c(TRUE, FALSE, FALSE) ) } # specify column widths for multiple sheets \dontrun{ write.xlsx(l, "writeList2.xlsx", colWidths = 20) write.xlsx(l, "writeList2.xlsx", colWidths = list(100, 200, 300)) write.xlsx(l, "writeList2.xlsx", colWidths = list(rep(10, 5), rep(8, 11), rep(5, 5))) } } \seealso{ \code{\link[=addWorksheet]{addWorksheet()}} \code{\link[=writeData]{writeData()}} \code{\link[=createStyle]{createStyle()}} for style parameters \code{\link[=buildWorkbook]{buildWorkbook()}} } \author{ Alexander Walker, Jordan Mark Barbone } openxlsx/man/addCreator.Rd0000644000176200001440000000071714627410100015244 0ustar liggesusers% Generated by roxygen2: do not edit by hand % Please edit documentation in R/wrappers.R \name{addCreator} \alias{addCreator} \title{Add another author to the meta data of the file.} \usage{ addCreator(wb, Creator) } \arguments{ \item{wb}{A workbook object} \item{Creator}{A string object with the name of the creator} } \description{ Just a wrapper of wb$addCreator() } \examples{ wb <- createWorkbook() addCreator(wb, "test") } \author{ Philipp Schauberger } openxlsx/man/setWindowSize.Rd0000644000176200001440000000213114656123677016030 0ustar liggesusers% Generated by roxygen2: do not edit by hand % Please edit documentation in R/setWindowSize.R \name{setWindowSize} \alias{setWindowSize} \alias{getWindowSize} \title{Set and Get Window Size for xlsx file} \usage{ setWindowSize( wb, xWindow = NULL, yWindow = NULL, windowWidth = NULL, windowHeight = NULL ) getWindowSize(wb) } \arguments{ \item{wb}{A Workbook object} \item{xWindow}{the horizontal coordinate of the top left corner of the window} \item{yWindow}{the vertical coordinate of the top left corner of the window} \item{windowWidth}{the width of the window} \item{windowHeight}{the height of the window Set the size and position of the window when you open the xlsx file. The units are in twips. See \href{https://learn.microsoft.com/en-us/dotnet/api/documentformat.openxml.spreadsheet.workbookview?view=openxml-2.8.1}{Microsoft's documentation for the xlsx standard}} } \description{ Set and Get Window Size for xlsx file } \examples{ ## Create Workbook object and add worksheets wb <- createWorkbook() addWorksheet(wb, "S1") getWindowSize(wb) setWindowSize(wb, windowWidth = 10000) } openxlsx/man/removeColWidths.Rd0000644000176200001440000000145314627410100016310 0ustar liggesusers% Generated by roxygen2: do not edit by hand % Please edit documentation in R/wrappers.R \name{removeColWidths} \alias{removeColWidths} \title{Remove column widths from a worksheet} \usage{ removeColWidths(wb, sheet, cols) } \arguments{ \item{wb}{A workbook object} \item{sheet}{A name or index of a worksheet} \item{cols}{Indices of columns to remove custom width (if any) from.} } \description{ Remove column widths from a worksheet } \examples{ ## Create a new workbook wb <- loadWorkbook(file = system.file("extdata", "loadExample.xlsx", package = "openxlsx")) ## remove column widths in columns 1 to 20 removeColWidths(wb, 1, cols = 1:20) \dontrun{ saveWorkbook(wb, "removeColWidthsExample.xlsx", overwrite = TRUE) } } \seealso{ \code{\link[=setColWidths]{setColWidths()}} } \author{ Alexander Walker } openxlsx/man/deleteData.Rd0000644000176200001440000000212114627410100015217 0ustar liggesusers% Generated by roxygen2: do not edit by hand % Please edit documentation in R/wrappers.R \name{deleteData} \alias{deleteData} \title{Delete cell data} \usage{ deleteData(wb, sheet, cols, rows, gridExpand = FALSE) } \arguments{ \item{wb}{A workbook object} \item{sheet}{A name or index of a worksheet} \item{cols}{columns to delete data from.} \item{rows}{Rows to delete data from.} \item{gridExpand}{If \code{TRUE}, all data in rectangle min(rows):max(rows) X min(cols):max(cols) will be removed.} } \description{ Delete contents and styling from a cell. } \examples{ ## write some data wb <- createWorkbook() addWorksheet(wb, "Worksheet 1") x <- data.frame(matrix(runif(200), ncol = 10)) writeData(wb, sheet = 1, x = x, startCol = 2, startRow = 3, colNames = FALSE) ## delete some data deleteData(wb, sheet = 1, cols = 3:5, rows = 5:7, gridExpand = TRUE) deleteData(wb, sheet = 1, cols = 7:9, rows = 5:7, gridExpand = TRUE) deleteData(wb, sheet = 1, cols = LETTERS, rows = 18, gridExpand = TRUE) \dontrun{ saveWorkbook(wb, "deleteDataExample.xlsx", overwrite = TRUE) } } \author{ Alexander Walker } openxlsx/man/NamedRegion.Rd0000644000176200001440000000330514656134061015373 0ustar liggesusers% Generated by roxygen2: do not edit by hand % Please edit documentation in R/wrappers.R \name{createNamedRegion} \alias{createNamedRegion} \alias{deleteNamedRegion} \title{Create / delete a named region.} \usage{ createNamedRegion(wb, sheet, cols, rows, name, overwrite = FALSE) deleteNamedRegion(wb, name) } \arguments{ \item{wb}{A workbook object} \item{sheet}{A name or index of a worksheet} \item{cols}{Numeric vector specifying columns to include in region} \item{rows}{Numeric vector specifying rows to include in region} \item{name}{Name for region. A character vector of length 1. Note region names must be case-insensitive unique.} \item{overwrite}{Boolean. Overwrite if exists ? Default to FALSE} } \description{ Create / delete a named region } \details{ Region is given by: min(cols):max(cols) X min(rows):max(rows) } \examples{ ## create named regions wb <- createWorkbook() addWorksheet(wb, "Sheet 1") ## specify region writeData(wb, sheet = 1, x = iris, startCol = 1, startRow = 1) createNamedRegion( wb = wb, sheet = 1, name = "iris", rows = 1:(nrow(iris) + 1), cols = 1:ncol(iris) ) ## using writeData 'name' argument writeData(wb, sheet = 1, x = iris, name = "iris2", startCol = 10) out_file <- tempfile(fileext = ".xlsx") \dontrun{ saveWorkbook(wb, out_file, overwrite = TRUE) ## see named regions getNamedRegions(wb) ## From Workbook object getNamedRegions(out_file) ## From xlsx file ## delete one deleteNamedRegion(wb = wb, name = "iris2") getNamedRegions(wb) ## read named regions df <- read.xlsx(wb, namedRegion = "iris") head(df) df <- read.xlsx(out_file, namedRegion = "iris2") head(df) } } \seealso{ \code{\link[=getNamedRegions]{getNamedRegions()}} } \author{ Alexander Walker } openxlsx/man/sheets.Rd0000644000176200001440000000145314627410100014465 0ustar liggesusers% Generated by roxygen2: do not edit by hand % Please edit documentation in R/wrappers.R \name{sheets} \alias{sheets} \title{Returns names of worksheets.} \usage{ sheets(wb) } \arguments{ \item{wb}{A workbook object} } \value{ Name of worksheet(s) for a given index } \description{ DEPRECATED. Use names(). } \details{ DEPRECATED. Use \code{\link[=names]{names()}} } \examples{ ## Create a new workbook wb <- createWorkbook() ## Add some worksheets addWorksheet(wb, "Worksheet Name") addWorksheet(wb, "This is worksheet 2") addWorksheet(wb, "The third worksheet") ## Return names of sheets, can not be used for assignment. names(wb) # openXL(wb) names(wb) <- c("A", "B", "C") names(wb) # openXL(wb) } \seealso{ \code{\link[=names]{names()}} to rename a worksheet in a Workbook } \author{ Alexander Walker } openxlsx/man/convertToDate.Rd0000644000176200001440000000133014627410100015745 0ustar liggesusers% Generated by roxygen2: do not edit by hand % Please edit documentation in R/wrappers.R \name{convertToDate} \alias{convertToDate} \title{Convert from excel date number to R Date type} \usage{ convertToDate(x, origin = "1900-01-01", ...) } \arguments{ \item{x}{A vector of integers} \item{origin}{date. Default value is for Windows Excel 2010} \item{...}{additional parameters passed to as.Date()} } \description{ Convert from excel date number to R Date type } \details{ Excel stores dates as number of days from some origin day } \examples{ ## 2014 April 21st to 25th convertToDate(c(41750, 41751, 41752, 41753, 41754, NA)) convertToDate(c(41750.2, 41751.99, NA, 41753)) } \seealso{ \code{\link[=writeData]{writeData()}} } openxlsx/man/convertToDateTime.Rd0000644000176200001440000000137214627410100016572 0ustar liggesusers% Generated by roxygen2: do not edit by hand % Please edit documentation in R/wrappers.R \name{convertToDateTime} \alias{convertToDateTime} \title{Convert from excel time number to R POSIXct type.} \usage{ convertToDateTime(x, origin = "1900-01-01", ...) } \arguments{ \item{x}{A numeric vector} \item{origin}{date. Default value is for Windows Excel 2010} \item{...}{Additional parameters passed to as.POSIXct} } \description{ Convert from excel time number to R POSIXct type. } \details{ Excel stores dates as number of days from some origin date } \examples{ ## 2014-07-01, 2014-06-30, 2014-06-29 x <- c(41821.8127314815, 41820.8127314815, NA, 41819, NaN) convertToDateTime(x) convertToDateTime(x, tz = "Australia/Perth") convertToDateTime(x, tz = "UTC") } openxlsx/man/mergeCells.Rd0000644000176200001440000000267714627410100015265 0ustar liggesusers% Generated by roxygen2: do not edit by hand % Please edit documentation in R/wrappers.R \name{mergeCells} \alias{mergeCells} \title{Merge cells within a worksheet} \usage{ mergeCells(wb, sheet, cols, rows) } \arguments{ \item{wb}{A workbook object} \item{sheet}{A name or index of a worksheet} \item{cols}{Columns to merge} \item{rows}{corresponding rows to merge} } \description{ Merge cells within a worksheet } \details{ As merged region must be rectangular, only min and max of cols and rows are used. } \examples{ ## Create a new workbook wb <- createWorkbook() ## Add a worksheet addWorksheet(wb, "Sheet 1") addWorksheet(wb, "Sheet 2") ## Merge cells: Row 2 column C to F (3:6) mergeCells(wb, "Sheet 1", cols = 2, rows = 3:6) ## Merge cells:Rows 10 to 20 columns A to J (1:10) mergeCells(wb, 1, cols = 1:10, rows = 10:20) ## Intersecting merges mergeCells(wb, 2, cols = 1:10, rows = 1) mergeCells(wb, 2, cols = 5:10, rows = 2) mergeCells(wb, 2, cols = c(1, 10), rows = 12) ## equivalent to 1:10 as only min/max are used # mergeCells(wb, 2, cols = 1, rows = c(1,10)) # Throws error because intersects existing merge ## remove merged cells removeCellMerge(wb, 2, cols = 1, rows = 1) # removes any intersecting merges mergeCells(wb, 2, cols = 1, rows = 1:10) # Now this works ## Save workbook \dontrun{ saveWorkbook(wb, "mergeCellsExample.xlsx", overwrite = TRUE) } } \seealso{ \code{\link[=removeCellMerge]{removeCellMerge()}} } \author{ Alexander Walker } openxlsx/man/makeHyperlinkString.Rd0000644000176200001440000000504714656134061017202 0ustar liggesusers% Generated by roxygen2: do not edit by hand % Please edit documentation in R/helperFunctions.R \name{makeHyperlinkString} \alias{makeHyperlinkString} \title{create Excel hyperlink string} \usage{ makeHyperlinkString(sheet, row = 1, col = 1, text = NULL, file = NULL) } \arguments{ \item{sheet}{Name of a worksheet} \item{row}{integer row number for hyperlink to link to} \item{col}{column number of letter for hyperlink to link to} \item{text}{display text} \item{file}{Excel file name to point to. If NULL hyperlink is internal.} } \description{ Wrapper to create internal hyperlink string to pass to writeFormula(). Either link to external urls or local files or straight to cells of local Excel sheets. } \examples{ ## Writing internal hyperlinks wb <- createWorkbook() addWorksheet(wb, "Sheet1") addWorksheet(wb, "Sheet2") addWorksheet(wb, "Sheet 3") writeData(wb, sheet = 3, x = iris) ## External Hyperlink x <- c("https://www.google.com", "https://www.google.com.au") names(x) <- c("google", "google Aus") class(x) <- "hyperlink" writeData(wb, sheet = 1, x = x, startCol = 10) ## Internal Hyperlink - create hyperlink formula manually writeFormula( wb, "Sheet1", x = '=HYPERLINK(\"#Sheet2!B3\", "Text to Display - Link to Sheet2")', startCol = 3 ) ## Internal - No text to display using makeHyperlinkString() function writeFormula( wb, "Sheet1", startRow = 1, x = makeHyperlinkString(sheet = "Sheet 3", row = 1, col = 2) ) ## Internal - Text to display writeFormula( wb, "Sheet1", startRow = 2, x = makeHyperlinkString( sheet = "Sheet 3", row = 1, col = 2, text = "Link to Sheet 3" ) ) ## Link to file - No text to display writeFormula( wb, "Sheet1", startRow = 4, x = makeHyperlinkString( sheet = "testing", row = 3, col = 10, file = system.file("extdata", "loadExample.xlsx", package = "openxlsx") ) ) ## Link to file - Text to display writeFormula( wb, "Sheet1", startRow = 3, x = makeHyperlinkString( sheet = "testing", row = 3, col = 10, file = system.file("extdata", "loadExample.xlsx", package = "openxlsx"), text = "Link to File." ) ) ## Link to external file - Text to display writeFormula( wb, "Sheet1", startRow = 10, startCol = 1, x = '=HYPERLINK("[C:/Users]", "Link to an external file")' ) ## Link to internal file x = makeHyperlinkString(text = "test.png", file = "D:/somepath/somepicture.png") writeFormula(wb, "Sheet1", startRow = 11, startCol = 1, x = x) \dontrun{ saveWorkbook(wb, "internalHyperlinks.xlsx", overwrite = TRUE) } } \seealso{ \code{\link[=writeFormula]{writeFormula()}} } openxlsx/man/figures/0000755000176200001440000000000014745234540014361 5ustar liggesusersopenxlsx/man/figures/tableoptions.png0000644000176200001440000000636114627413571017602 0ustar liggesusers‰PNG  IHDR5Y_^³‘sRGB®ÎégAMA± üa pHYsÃÃÇo¨d †IDATx^í½ÊM†¿ƒó$<S#CQA0CÁD1ôÄÀ01ð CM d^®o¿²ì¿Ù}v·½/(¦»«ºº»º»ÞYÅyÿ·cÌD8©c¦ÂIÍ3NjƘ©pR3ÆLE5©=þ|µ˜ÃPŠuOÌyPÚ»ž˜6ͤöóçÏaq°‡÷b^¼·Ûã¤vx/æÅ{»={%µÏŸ?/Ïž=[~üøÑ ö•+W–wïÞýªýŸZû.ìë‹þQNéðlyðó:=zt7Ê[í…¸zõêïq(pˆyœ2[ß³(¥½å-ˆã!¯^½ú¥9;'µïß¿/÷ïß_îÝ»·|ûö­ìR kí»°¯¯ØŸ¡~*Œü(»ìÅZZ~hGçA[k^b«ù ½½ÝâžE¢Í±Ž>ÖÜ›<ös;'µÇ/·nÝZ>}útQß%Ø[.d__‡ ò¾ôö"˾„–Ÿëׯ7çÐâ”â~\Æ=‹D›-b}ŒúܵßCIWß?þ®¿|ùr¹yóæòúõëßm»;¶ó¤ŽÄŸ*\µß¹sçWëŸö¼fóìù¢Žž™ØŸµÄ~Ñ¢µæË‹N¯ß<ÑoAÜ‹Ùw/(Ç8Å=À·ÊHÜP¬ZÔâ Ôã<â\³No>âÜ8Bú’îØ0/íÛeÜ3• D{Ûw½7ñ}ú[?ìšhѱ‘í5fNj5_ØÔ´æƒädǯƊ¾)c'ÿ<Õg_ðcݓָqˆ’°Ö¤²Ö׉öü‡µxB­ Y§}RrÓ<Á–{QŠU+¶@ÜÐ÷â ñM,Ó‹{ô›ÇÕÁ[3GÿùI›ú¢ËR)&]ŽÞ%ËíÙwm\.1c) æúe³å^”bÕŠ­`íZI/;ë)kNèjqå˜å³d­zÏÖÌÇÉýEA¼ üü£M^ÂA§ÎŒo´•jnçRÒZãJ§6ÕKc\[îE\3ÒŠ­’‰Dä}ÉäØ*aB+îÔã8¶Æ“.–¡UïÙšùh&µµbC)Ö=1æ_¥šÔŒ1æqR3ÆL…“š1f*œÔŒ1Sá¤fŒ™ '5cÌT8©c¦ÂIÍ3NjƘ©pR3ÆLE5©•þéMOÌa(ź'Æü«4“ZéK×Äépx/ŒÇIí ð^3Î^IíóçÏ˳gÏ–?~4/Ÿ{‰?7³»|N¦Ö'Î9…±eRËë;å½ú,¢OGõØefvNjß¿_îß¿¿Ü»woùöí[÷"é€q‰¨oÉ.¸ÖçÐsÝ…­“Ú¹ìmèâzhk­Oì23;'µÇ/·nÝZ>}útQ½H°õÛÅ_­Ï¡çº ½½È2Ë^ðqÉ‘Vâö͇¡¤ÆOÌ?þ®¿|ùr¹yóæòúõëßm£ »øÅT.z$¶SÇVºø)m|Åvžòuñ§J«O$¶3~Í¢5çˇN?ëxê˯q­Ñ¾¶Šóˆ´|3v\ß©î…lZD?H\wôËuzcEðQ[«ô%Ý®{k¶g(©ñóîݻ˗/_–>\¼¡=}útÕEŠR]è+qÊØéÀó¤-Ú¬…¾1Ö=Á¾F\RCkSù²÷‚q°kýÐ?ϹT†¬ËkÓ<óZK¶×fŽÏPR#™‘Ôôgh<¸øË5I‡ˆg¬Óº„ÃÑT/ö¨“ ‡°Õ'£v„²ˆ‡Xà›ùc+ÿnluøyFJvkˆ{1"3ìuÚkÈDûÑgöŸuZ'ôlK:„ò.{k¶gøÏÔøùyûöí‹äöõë×?tÈèEnÁa׫ Ö¥(é Õ'Û9¤:¨ø@‰—HÉKãh<#z3A7JÞ‹žÌ²ØÕÖ‚Ÿ8_ˆû}fÿ£:Xc»ËÞšíYõoÞ¼YÞ¾}ûW;2z‘xªÎæëÒëê@äëÑŽq³®4—VŸHn¯ù¦-ê8ЬEI0×#´•Úk0f)æ5)­_Ä9Ç5œâ^H'[ ,ŸÑ?ý£ŸXŽÉ1ËЪ÷laíÞšíY•ÔZ¢CS‚Í)Ž6.eéh« L„Ÿ{QG餇VŸHnç€êÍ‚vù@â:¤S›êòÇGÖð¯îÐ.[D‰².®…úÈcZõš.úGÌqi&µµbC)Ö=1æ_¥šÔŒ1æqR3ÆL…“š1f*œÔŒ1Sá¤fŒ™ '5cÌT8©c¦ÂIÍ3NjƘ©pR3ÆL…“š1f*œÔŒ1Sá¤fŒ™ '5cÌT8©!7nÜX®]»ö‡¼ÿþ—öoZú^ßÌ‹/ŠãŽøY;äñ>|øKÓ'GÝ̓ړ/m–ݨÀ®f?âgÍX „ásò£‰míxfœÔΘ|i¹ð´!ñâSo<ü¯ õèC6¥ÄºŒú Ož<¹x“d<`,æèGÇüĹ‚æ ?”ãÚ4®êsR[i|$Ç$úT ¬vsš8©1\¬xI….¾ ¬ÄÂe%Yˆè%Ê%ߺÔ9ÙD?Ø(Qñ,%•ÞXÔ±/“6#kƒ<¾æUê'ŸŒçËæ4qR;cò¥årÒ&‘.ÛÕtê'ɉ+‚¾–@xJÇs—±°£½>cR“OˆõCèHvµ7Ks8©1ñ²qÉkI¦uI[v=¸àzÛÊ}•xFçT›^²Ë~Zcl¡½­šÓÄI팉—ä†åKÚú©%»ø“lüÔ’o3ÙßÚ±JɃ1ã›ÒèÚ 6þš~‚þ9ášÓÀIíŒÉ—‹I—>êb[îëlifecyclelifecyclequestioningquestioning openxlsx/man/figures/lifecycle-stable.svg0000644000176200001440000000167414627413571020323 0ustar liggesuserslifecyclelifecyclestablestable openxlsx/man/figures/lifecycle-experimental.svg0000644000176200001440000000171614627413571021543 0ustar liggesuserslifecyclelifecycleexperimentalexperimental openxlsx/man/figures/lifecycle-deprecated.svg0000644000176200001440000000171214627413571021142 0ustar liggesuserslifecyclelifecycledeprecateddeprecated openxlsx/man/figures/logo.png0000644000176200001440000003133214745234540016031 0ustar liggesusers‰PNG  IHDR)|Ñü˜ pHYs  šœsRGB®ÎégAMA± üa2oIDATxí{%ÕyØ¿¾sç=³3³ó؉Ø@9¬ƒeË%;à8‘òD(•Š !ñp p9e‘ÿg÷ÿH¬”,P‚ÊJÅ`¡TYNª ±R’%£‚2Q@²¤A°»ìÎÌî¼vvž÷¤¿î{î=}ú¼úN÷½ýø~Ô2÷vŸWŸ>ß×çûÎwúz@T’…§ïŸ„zý‘àËþþ—xfˆÊáQ9žþÜí^_íiÿî/,2`§ï}ê *)€ ‚uïq¼Û• PìþŽ?X¢¨Át¿oàqσG]Ò3Æžƒ½Ó¤Ê)€’³ðÜçð‰ï ¾7™(#°Uß,8³øÙ¯ž¢´()1;¿SÈ?PjH” º¿õþ§µv~‡0€—`÷12 Ê)€’À—õ<¨‚ !ÿ@¹ PžýÜ£žç=žÜÎï2 J)€c]ÖËTÞÁc‹ŸýÏ/QHH¬ìüN!³ ¸(m;¿“e½ìaÐ8EaÅÅ‚@AXxöÁû}ÁüÐËz£#£0Ðß—×R”Wò R9' ;nfÆGGƒï»{»ð³w~îÿ݃Ԡ°âB@ §àtß«ÕÏ@­v¤D­Vƒc³Ç`æè´òüåÕËpaù"쥨È?oH䌬ìüi_èÍÎA½Ö ÿñì·ž<`ùÒ2\\^‚ô °â¼B G¤¾+€ÓýkO\ý¾­ï ·›µ”€šß,¸¸tVÉ?PjH䀅¯ßýO¤iç£À_; Œúv> : žö!ígû¸îó•+[ðÞù÷Ò5 €½û{YÐ{Hô¤Ût]@;mü9ºÀåÞt§›–|ñopš1¥àr` \èY„ï¢?73 }}}íƒÌÁÒ¨>‹ßY¸Z°riV._‚Ô̂Ɨïýê º)€.“?,롽ƒÏ÷]?ÛðÓîîî³òR]"‹ð]´óç‡ñ±ñpºî…ÓõˆsO#Ü6' K:2 Š)€ŒÉbYí|œî£­ßW §û›]pæ©…Z%äJ_€¢\<†&šé*‚Æ8ŠÈ R’…?91³þtCxÙq§'œ ˆÂ¬òüÇW Ôiä2PøÉ,(¤2 ›ðÝ_ðgadd4ÑM³+·t&?¡˜Á{çÏÂÖÖ¤FVÌ>¹øÀS¯‘*¤Rí|¯V?•vøîqßΟš˜òÚ§;g;®:/ =ßQà’Âóã£%òäR)4°õkM;_%Œò3[fÛs_•VWG'‹˜÷,//Cšà¶c +NR‡dṇîò<‘æ²Þˆ?Ý¿fþ„ïå¾›<ñ²0òïú<Ñg¾M˜“®´Ó³V ?°øÖ 5È? ¤:$ ;hhŽÍk®ç‡â €ÊWyåe2>Ùg’0¯ ȘҨêÅíÆïüâTÍ mLJ‚@B² ß…é©p›®j™N‡S mÅ¡KkóòËyleEçúåBΚ? ÿ@> €ÎeGÏQßÎGï>*CÔŽ“×OŒÝÏ1¿â¼ëÊÏë/uB¬ç«ð$A‰‡¸ÀË)+ˆH¥Òð¤cb—t²ò‰]ÄÏËù×7ÖáâÅ”ßFD¿fd…€‚¬ìü£SG[_õÔÖ JÌìéâùäÛmhþ9y6{CNuJ¢`ye™ü]‚€Dá»(ø333­õüÃ^N£úÎñe€æ¼«˜ë¶µ_þn 7jÿEáGß™ÙC  I`ç×kOøOBJŒ ‚?ÒZÖ‰úø9ŽkÈIiÈiåsžå;8¦‹?ÑÍŠ´QE€fÁÆæ¤ýšQ„Ê+€¬ì|\ÏÓ¤0 ¿ósX'¸bº|L“ÖÔÆð_l/ÿC^=ò5bÑ ™™PYUøîÔÔÑ „—/ëµyÔ螃ª4ö‰µnbždàŠ\¯ª ›ñ,åŠp³ ]GaðkF_«ª"¨¤~eǃ' E;bb¦§gšoß Q …mò,§ÓÈéTßetppÈÇqÌV~’´bþò¤F¥@á»Ã-;$v.ÆËé»]eëÒÙ&ú®ÊB•,iMÊ ³‰?¯3Ú?º²Pœ=ûììì@jTpÛq%@V¿²3çÛùøä×…¾Ê/ÎàgÜ»]íØ3½¥G®«­ ]ý&ÁS7•iR ª¦…>ˆvg¼ŸU A†¬ºÿ›ëè¸THÿ@dH¾Û×÷¢ßQ·CJñ×ó˜¦ý¦ñÖ ’Ž ‰”yøgŽ-v_WG¬<>u–…›?½eµÚvlqórZS¶ãIfIº~Uš-8ãhþs)×T—)ŸØÏ¶´ªÏ2¸st¤\¶³½ ià×wÒóúîšüä¯z«/þð{™Ì²ø•øéÙŒ ñé[s ˆwZžê¸NpLƒÒV¶­.]€Î®QýÙéÖ_a9º{­K/¦pö{Îãì}±¾º ë—WSV3p„/&ɧâÐ ‹_Ù;rŽÎâ¯éom:ÝÍiŸ‡LRÑÎÉóuúOÒÕ.Ïo1Ë34zÕÑÀ[ú°l>èí$™#™æ\qAfÆtú2£ymó&ýýJ>~0šp?˜ äÑ,èXd¾;lØjM÷U7 ¤c H«KRzÝ@󙊪ÏòåšÊ·MB’MhÁÐÝsÏ3œ·•¯*OÕf± ×yËxÐõ»éþÊíë´)P–Š`ùÂØ¾šŽ£°YÅ";høË†_}: ±ÈâWvÐÎGÁ;2Þ<¢ÓÀºlz¸ê뤃ZΣ+‡9¶À½Ýª2lt’V¥lŠ Y]¶²ÔèŸÑ®õÙÚÝÉ=P)â6ü åÅ?à܇YÙùã?ÙÚ¦Ûî>µPˆÖ`4­þf¹ uýS$ÜàÍ«nDÚÊ:’³K:qsÈë:Ø“æÓ£zfŠý`»oLÆ]æOörUjÜÆ„IˆÇpµ`cu ¤EÒmÇN “·ïŽŽÂôÜŒ¯Sê ñ²£Ò³¦Îó$™ÜÙêEݺ¶˜P]‹+êOc«ÎÛŽËi\ÔŽ)ŸüYDw&a³Ý;[s¿šÚh— ×V.÷Ì?`gYüÊ·ó};_ÕA.Ï"VK¹IT5@Ä|I…ÝV®ª.e¹¦MZV§óÕyUŸ¹¶ R('ML³‰¤ìíîÁŔÊÁaÛ±Rd¾ëùý1ª?ª©D³ÑD›6Hè’¨_ßiSóœ²^)’P3;fi“Xÿ+_«-F]Õ!€î\³ ~`h7o“*´Öv}*LáÄ®ýæZ¶|.(šÊB×Wê̺6w’ÎpŽ_Ãÿ÷òê%¸ººýH “ ÖÊ,Þ¾;49Ãc¾¨Á`­j}bã"‚Új”Ë­¡ PÆi+ÃX™:F\nOó¨bÆ•ƒ¤'§¢Ý&´1zL±ùºò•u™¢à,íÐ…ëîG뜠0å<.{L÷±Õv¦x-‹e<˜înïBð@=~3Þ1¿ªÍW»a”¢ï¸º¶ Û«)ššmÇ­+ÈÂί Àèìôùv~»BFêà1רí ùš.§ãèÒÉeë “—*OÒc¦ú;nŸ¡Û@6Õ™¤m.yMå%¹OòwÕøHЧQN®m2)WöXvÑß0<ðÍ«—7`ws RCòxY„ïÖê}0:3ýÃÊó}^ †kýÖrlƒÛ€ÞøÖÓEø‚äzN´Q=m:([ÓÎÄi:„—jÛ[aºnÓ99iEk°øJŒ­ ×zSETŠÓøÖ©«¾ðëúrïê\Y¾œ®YÐÜvì]ÿ܃‹~³®ƒ@;ðÈŒL±¦¬Õ¡ßëk6F(T«·W,dzË6TõA‚62CýµèÒÙ­éºum´á"4²‚Sýg'¡ª.—ïî}¨:®k*êœX¾\—©^ŸúÛØÙ¸’º )1ä þðÔx`ç»°Û8^Ý›ºƒºÓT›)òˆitÑ6uŒIÇtÇUuƒT¦)@¼ûðP×ãrLU·ØW¶A,žSõ/#|¿¢§½NU^Ów¢mU·+¬]uOÚߣ#HÝïúøÓ}´Ý·]¶ï<{…º?«Þöý;ëW ܤÕÚùãÇg`dzÂYøìôm¶rE…”µÒFóFÏC,}8ØT7J.“ÅÚÅó» ‹´µòÇë–Ó©¯ ÇAy“€þ´ÑéI˜øÀ1;ü/[u<@;…~À°M×Úp;~àª@Ø^D¼ÖQ­­ü.æ¡<1•î‡3TÃH÷:p±Nñ¸ø ñö5DÛm#Ó ”•‡X?ò˯͎×m€øŒÖ'¿ã×jW½G_÷*u±TÓõEŸ¿^ä8S´MUØ6Oq½ü¸îé¯Iœ1©\µâŽ–-ö#o‹?¥g¯ù£"óì;þø0fAbÀí|¾¬wXöÙÔüÞ¨{}F!Q ³ *]:Ýœ¹åL9°LõªªøÌ‰¦Me%¨ëy@«”†˜^uN÷9ü®Ï/*S±=Ià}/_ßfUß°HoªË©ÍòX‘¿«ŽYÙéÿ¾mpú%Íü·½¶Û¾YT$R8å@;_\ÖKœá^€Zóž¨:Û4pÅ´òg×8úA¡V[™ògU¹IÊ2•§:gÊ—”Në•Óº–¯;f:Þi^]«îcÒ{+~Nb÷»241ý£Ã‰— Ḟ?&­é§ÉNcßx’ œ$ƒ¼“™ ~'éds'MÒìë²`ºÎ=_ø÷SÜü#ÂÍ‚±cGó8Ks__¦ï :mÛWCµz¦ÖÆÆ[¿€‹ßù;hììA/é?2Ó¾Æoþ òüê{çàÜÞ‚ƒ½cÇ;}@s¿|L]{òü¦oŸ®¾1Õo€[ÎÌ…±IûµŒlæt š»{]è‡$¦ùáøÁiѶ4èäÉ~˜'Íò÷ßê¹ð#{ë["Ò]Ë…Ÿü´çÂìn]…ó?z[{~}i¹çÂà®»Õ K­ïQ³Î<ÆTcÓìTU.®`´_ÞÈ•@D% j^Ñ©bëtÙaÆÿÉçùßýÃ. *"ÝàCÁË ¨ˆt6õ~”§q]ÜÕù/lc„ç•‘óñò±ÖÀÄÍ(2ó0äN ØQ»pàÈŠ@×ñòÍ”o´*êo^Q)½¼¡{ªæ —6¢¬šÒ‰×ªsn†Â¹~$— 9”@sIƒEŸâœÈ€cqO¬˜/všßƒ g=ô9Øh]5‹Ì'¼Os,ü¦|œ47!FÓ1i–À z½,^.~Üͱð#¹U” ,'©ƒc}*Ü0ü×%[yžg äùò†¸)‘Ϲüç¶/9Ê1äµûVÞiŒ–áyí<\þeáß9È·ð#¹VH¨ö%À5³xµ ¢iäA)ör: ÈpS_úxí©s^ûSîKþ½Áħ;kãJA¥ÜćIð§ù7˜öìb&”{€N/ ž„Až¦Eo.Ó ¶üTçÍ*e—GÄ)1‚•Çöz^üo¸­Ø–Í ê>‡Š:tøí6Š!üH6Q=8}­Ú_ëóµVxƒ¢7NJÍh¬-ŸG":óè Pyó8¸Š2à[Oú潇ȴ÷u•Ã/âücá+½öXz[u»Aa‚½çûúq±byL•¾½$Úóí¼ùĺ}y"Úñ}yCµr¤îçðZl÷ƒ|ös¸Îo£&€H` cPèlãr0ÃPô"çò8\UKLyž©ðoy†·.¾Z^eÿE<ª¿ˆÂNp0ª „,r›ìD‡©~Ê—¢± !˜äÈ=²úâ&dĨȃ3Òƒ‚ ?R(@f?P,ð Ä­üÝÛYTÇò¨ĘoE•ïöq˜æ¯üYõ]<D96P߇ŽÂÎ8Ü/Ð`j+_õÙtcó‡8È÷S5Ú¾"F¼ê×¼D>xpÌ]ø‘Â+$PL=cÊÉê_x¾6˜ŸIQ}\÷¶%¿õü´³xÔ–ÊKcÒ¢¯û,îàÿEÕ-€86‚§>‹úŸŠN)ç ¥™ÓäŽãÅÒLôCÁ먈¦>|“t´}ÇþÑMÁë-¨ˆfé4¿ÉkéLŸn ^oAE463Õüf›K‰†WøMMœò7 •åF¡}*B“`?øí`±ÐkßÈ0`ƒ¿W€ßèöw€±›?ü‹#ÿzŒT/í±và‘ÎSaÎ×ÎÓÎ?yí|ð_“xa]`p”Ï«Ó7—ôbçÚž Æøù¸Ò™‡áæÏ¾Û¢UA^â5«Û«>ïrmªûØNËZíÁ`ô² >§T3‘ƒæÒŒ¸‘† }4œ¸=xäh»ègQiÄÓò2å¨D¹î$aÌñsLÂ-@~U{T×)¦×ETFó¶ŸŽxNU—üY¬K×Þþvz¦m?¾S¡ŠòTõ¾\hNùË+üHéf"ÜAˆ³¾àI Ä6~€zЊù§³Á4„ ¢f:1Tš×eB=i?™tÍí¾áýþø£çeá÷Ó±¸O>LOß|eð:d_E3Ž•Ö=¯•Pk:r*ˆ†Çœ,àüdë©Ùö‡˜øÊð0¡\†˜Ë‹|–ßçþ¿ª*®¼oÿ5Eòv±X¯²fÑóñ>‰ŸoHStOª;P­úÛ­ˆ¿é©Ý/^¤‡x>Oú¦¾fÕÑhÿŠŠ0z VÁçTFppÀ6ü ª€šº@äA- jø=ü?>‰â‚£z?‹åaÚoÑúųª˜u9-¿f¨A•&Þ~P”Á´JÁT·ê˜ª|ùXtkûA‡¨HX,_¼®àÁÕ|Ni€6ÁŒà V«ûqÕ1Õ÷øŠ?IU0IìôB(·K/Ø^ëˆxÎT®Zé´ÿêúÇô]ÚsáGŽNøŠèŸŸÛv|ûß¿ÿ°£ðg+sGà~_Ëz$ü-Hà°˜œ„¼€ŠHzÑ\@ÁË cR;ÅÀÜÀ¸&—M™Ã9æ˜'ì¹^ÏBò)€œÓp°³ó€è\cÚ*ïÿëIi=E>0¤E™º¼§Ò>€" ¿‚*¯è‚&Œ.PÊ%ª¿›…./¡ƒf9GåÏ嫦™øÑeú.–ñò‡…@ˆ¯÷åÑû— ®‘B8 ¤òŽlÒæNäRyGÛš[ZÁ;$ü…€@Þa’ ça«yvTqh ç¨âôóˆk¼?‘/hPäx÷¼_´#á/4(E&Õj=‘_Hä[xLž PœâA&€ÄÆþ6ä…sÛ«Ús›û;pG Ž+ùi'î$¢øâÏ¿ çwV¡× "zòÝWµç¿üÎÿ2 ^·@Eôô{ßÑžÿ/ï~Ǽ è5¨ˆþôü€ˆâ]ÿ܃‹þŸël Ÿú0í¦"ˆ¼³·½ç—ÒÒ € * )‚¨0¤¢Â ˆ C € * )‚¨0 (ñ¯fþðºã=~ãîy××ÿbéï”ççèÍð{×þŒö¸wÖƒõõ¿ºô–òüoOÝŸ¹æ#0Òãr.ínÀ‹~}éÇ@´¡€Ä¾PõZø‘ùÁ ø£ë~W{þSó¿ÞsáGæÀï}à·´ç?yüŸö\ø‘ÙqøÌ‰ß" )‰ùœ½n[ÇÜà8äÓë¶gòÓΑ¾ ¢ ˆ C € * )‚¨0¤¢Â ˆ C € * )‚¨0¤¢Â ˆ C € * )‚¨0¤$èuÛÉ1½n{ë`òÂòî&QHHÐë¶“a{Ýö=÷Ý\*¢?»ðQèµàQ2èµàA8A € * )‚¨0¤¢Â ˆ C € * ½\‚^· Ûë¶sòøwó¿Þór®ìnÂË߀ï®þˆ64 ×m'Ãöºí;çNæâm¼Óc¾"ú0QHHÐë¶“cp¼¼@¯C € * )‚¨0¤¢Â ˆ C € * )‚¨0¤¢Â ˆ C € * )‚¨0¤¢Â ×m'ÇôÖß<µse^ .C @‚^· Ûë¶¿ñþr!x[]xùÂ@D¡×‚Dɠׂá)‚¨0¤¢Â ˆ C € * )‚¨0¤¢Â ˆ C € * )‚¨0¤¢Â ˆ C € * )‚¨0¤¢ÂÔ zÌíGo‚ñúPðùí+ïï\¢; zÎÝ'>·N„ï¤yò¯’è"dD…!@†ATRQaHD…©Ô*À­G®ƒG·–œ6ö·}óûðÚú;Nùç'àÄàd;ïVÛ[=^ô—³nöÓL¶Ž½¶¶è\¶ ,óÖ# A›9çvVƒrÏï¬9å¿q¤WlK§íÅ>q¹>¹rß%…÷ ¶=ɽ¼qäX+½kÛå|‡m{Þ¨„xèÿ,Xjo¾È¹íUøÖÅ×á…óãß`ý/Ý9wúàmÁg–‡ß|6Œ}à¶ ü8·µÊ~òÝÿ ®`™Ÿ¿þãp›/ º6ã`þÜßøeëìüñ_þðküׯ}Ù©½O¾ûª¶Ü['Z}€<üæ×ü¾0 ÒÝó‰ä¹óo¿ àÒ/¦öß4v¼ÕÈ©Ÿü¹±ÿ‚¶ÎÝËS&PjàÄÐ<ò!ðÝ®0aºÉ Í×oy8xÊ'á+ºO#LѲ¿yë9•}ãè1?í#p‡¯lLmÆYÁ)`¢rsèù“[Ûk*•äyÂAebï(üO¾ûJ$¿+®ýbjÿ˾°‹Ê • ö‰ ±í˜×¦0ŠFßÔ¿¹õQoÒ–ppljýÅ™0àÀCá\žiÃéÛŸ½ÿZðïÕKoÓ虱ր¿øÔ|åÒ[°©ø@|úá?1š›ýPð–‰eãçK{W‚òIJÍÏû—ËoÂnã@Ùf䨿È4µ9è¾Õ¼X.N}kõV›pwõ§±ònò•ÄíÓ7·®ýú‘™ =~þîåŸÂ÷Ûú?—ÿox3^†i¿/Äk}m=njì6öƒôød ûy20KtÁ;(dÜ„Á§óé¿ÿfP†ά°~½òÔïåúÇ÷DÚ‡éžòŸô/œÿ~Ð7?Þ|?¸>Þwü:ßÜ<)ë‡~ÙwømÇþÃØ)€ÊMì¿?üÑóþ¸Ø†¼ÓØ?€ÝÍ-§´¥5ðæ‰öí ç¾_øù_J©Þð}Û"þF0Pˆ_ø‡Ÿ‚O¿þ¤±|Q`/øÓqŒø¹{þ7‚ï(Ø®x;ÂAŽõòÌ…MxÚIø ÷çMÁw|¢¿â+ÓTóœ:˜Ÿÿ߈=…qÚ,ö‚m}xíÙXYØ&œ ðëÂ<¯úJS6ŸPIà›ƒ×ƒ‚”ñ^bþ?~ë±~ÁïßZzÃW ÷¶öý·–^´‹›ü:qv†3YÑÉ3—ί£™KÞ)¥ €"qàá´S%tÞÓ¾mÇÁÄ· ð#8X¿ð³o> «ÊÀúø ÇAŠþ•ðóóüÖŸFÞ6çùTÂÏÁë@Áæ ‚•¨†ìraF¥¥ê/Q€ð‡9u×cƒ+Z^¯®löþ ‚”íÇëûî”`ã·Ú.ôg 4~áîÃ)¥TâÀs½y²}xç±[¬y‚'¡FøEPùˆO>>}æ¦Gsª‰àÊåiƒÊ‡ÎHÌ¿ñêR. ˜ˆ®L¼ž/ õã“TTl²Bú;Eb[û±]÷¼ñdàðD¥Î41õnN ¨TÊJé “x3“ <1-Îlõ²£C¥è<‚õˆÂâêh –½¥%/ÑÉØ¼õ¼­¢Ô»‡d¥ÉŸ¤8}þô5í«B3µ‰ƒ~؇6SûNœí<þKŸh9?CÛ êÔiYJ§ÄõfÄeзÓ.F›T– Ú½® ÎA{\ô>£ÉÒnC²¸ÈœGçi]ò¹m{Œçôßÿy«Ïø“T´ÙqêXϹøÇ™†«yfg;¼Oðž`¹±™KI§þœÒ9Å' GRíJ€OÇÅ™ð)³®ˆ‚ŠÌNùùßÕƒŠA6LˆÓn|ò‚¡½Y ;ÕðIÊ=ú‡ús°Œ¯LÜÛúŽOhtXâ½Â•\­Hr/8¨¸Nýä›ãAÿŒèå/óÔŸS: .¡uâq—ÿLëÍI‹Üq ~Få#ú’0Ö7½ý ¸|ŠO.üÈa§þt,KtÌñU;…æ*Ø·ý¥À`¹t=Ù¬¯hˆË¶¸jTæ©?‡öHˆOJ[Èa„Õ¤hŠÂ++qs(‰‰d§ëèØ{eåmåyœE¡2øÊ¯Ü]ñ%R^¾ðzüXÉ~tÐ$Ä'˜iZyX¡ÝД  uúFœNf|Ù1ˆçÿãÍŸ –`EGŸŒ¿A“†L€" Áü 5À1FtÉé²6]Òé¶É{SW^/ vs7‘u¸rt PêTø?¥Ã•Ÿ…æò]Û‚¾Œê4mœ~"XžsQ E¦t&€¸QCö¶» ªÉž´lqfˆNAq€v¢´z >‰ÅeM\_‚YƒJgN¸QG èB>}B¿b‹öóí~1Ï%ÝR4ʧ|ÁgwÌžt΋ËqI¶‹&)ŸNÑ6îD¾·ÒMß”©ï!mNÝØp¾oA\ 6C%ذtXäØ\mÑ31ôwlŠ›ðœ*J°L”NðP.¹ ÔÇþIë3yéNæînëÑø¤Ÿ’¸6.‚Ód[X­ŽÏ_ÿ±` Û‚€²@Þoqªùôž#$qíÞ%€G_Å™„K¸3²±5’_…¼OÍ.BŒKƒœÀ´HàP,¥\mèð d8˜F6°l@8Ñ!%"!8èDAÛÙE`‚À•á^{ô~ß‘ ~à°Ø¶ùbÿ‰ TÜd”|—îÇÇÐleŽíÂ}ÿ•—Û.+áÒ ¸Ú F –R*¾¶ËA!AAUÙsáK&>–xß7Z¨™âò-Éb .´Tžzb>“@£ð‹!«IBˆÓÛ'Ö­Š˜W¸S-)¸ÃÃûEg—c£²g%ÏŸû~,Ž÷ ÷oã`'¶›³ªìmïÀÆùe§´• ædY€/x­6¤KhÿWWØUdy«m"ˆ C € * )‚¨0Î `÷êvð¾q‚ ò k0ØÛrw„:;·×6a÷Ê6 O?BD¾ØõkeÍPï;çI´ €_Yº W/oÀø±£Ð7ÐAô–}Ùe—ÿ’â gÃSG Vï‚ º N÷¯®®³óN9TÀÎæVð•Àðä8‘=(øÛë›à³FC*@W/¯ÃÎÆù"cpº¿¹´šÈÎ7Qcõ¾Ûý¿_ƒCÂýkg—hµ€ Re Ã{×ý©?ƒWYýªÇ¿/<÷Ð]žOø' È?@‡' ;?‚‹ŒÕXü쟼~•XxöÁû½š÷xŠ V¯Ãàøù¢ÐÎGïþaíü¶ê÷¥ÆþÈ™Åδ6Rxª¤ /üþ‚·ß8å¼Rù ´ó¯¬¬ÃÁî.¤ó¼g Ï;½x÷Ÿ,ÊçÝWáišù¢MšËzÍW=þÙg¾zÆ–ÒIpnxî¡SÌóÍ‚”üdU—Ï·.­¥$ø@Ÿ–í|Kúddá@³``¤ø?I®&|W N÷ûk÷«ì|‰§©^ô?ºÿ<Ž2 ˆ*€v~8·¹© -ë%Ï~HÒö :2~™@e¡—v¾‰Ô¤,ð<)@þ¢Lt²Mׄ×`_j4FO¹ÚùƲ E²ð™Ÿ!³€($™Øù}ìÑÅ{žzR"“yöÂ×ÿà¤Çö_¤eC¢Šd¾›&™ÚYø(¬˜È3WW7Òµóá»i’¹§ Í‚Ú~ã~òe&ímºAøîÞðcY >§k®ö´ý}ÁkÉÈ, zI/ÂwÓ¤ëkm´í˜(™Øù vzñÞ§ž.Ò³Åö´·MŒÁБQ ˆ¬éÆ6ÝnÑÓhÚvL‰´·éúÂ÷R£^{,iønšä"Ü.ímÇdiRt;ßD®âmÓ^6 Í‚1RDGä5|7Mrp†³GüæMÂ!!³€è„^oÓí¹Ýq“…`lvêCƒ@:ò²M·[ä~Ë] EˆD–àtke57Ût»EaöÜÒ¶c" ª`ç›(Üè§mÇDZ¤¾›æ6ÝnQÈÇm;&Ãþî\]YËõ6ÝnQèùïÂs¿»ç5ž&ÿáB‘¶év‹RÀiú¼Z-ˆ mÇå¢Lá»iRX¸íøàQÞ#ä(EݦÛ-JçOÛ?Ð?4£³SdŒ2‡ï¦Ii×Àè׌ª _ÖÃWo§Tâ*cðX··év‹Ò/‚ßðìC²y ˆ¤,<}ÿd­>ð(m;î ´M·{0@ÛŽ»K&ÛtK¾›&¤ mÇÙ’Í6]ð×óŸ| #¤ö¯ ŽTÞ?@ỽ…@BhÛq:d²M·Ï;]õe½¤è´ý#Ã02=Qz³€¶éæ R‡„¶»‘Ų^™·év R)‘ö¶ã2™dççR)’Ų!š#CPD(|7ÿÈ€¦"xÑÿxR hfmÓ-¤2$‹°bTyU´M·xèUø5£]ÿi¿µ²Fể@—(ë¶c²ó‹ )€.S–mÇô+;å€@(ò¶c|#mÓ-¤zHVܸ¿(þÚ¦[>H䀴ý} -³€ÂwË )€±ðÜCwy<‘ÿmÓ-?¤rH¶Søn5 SzõkFhç_YY‡ƒÝ]H€½Ô¨×£e½|B ç„¿fÄ΀Ç>) ÛvLv~5!P²ÚvìÕj¾[aHŒ ¬ØóÍ‚”ü(ôdçWR$mÿÀ¡¡ðÝÂB  À¤½í¸h›nÁ!PÒöØ!;¿,(in;ÖAá»å‚@ÉÈÌ?€v~{tñž§^¢4() _ÿƒ“ÛñÐfmÓ-5¤JNçþÚ¦[HT€¤¿vLv~u P!¬þ ß­¤*HlÛ1mÓ­,¤* újž·@á»Aäÿ…]rw$ÞrIEND®B`‚openxlsx/man/figures/lifecycle-archived.svg0000644000176200001440000000170714627413571020633 0ustar liggesusers lifecyclelifecyclearchivedarchived openxlsx/man/figures/tableoptions.pdf0000644000176200001440000000764414627413571017574 0ustar liggesusers%PDF-1.3 %âãÏÓ 1 0 obj << /Type /Catalog /Pages 2 0 R >> endobj 2 0 obj << /Kids [3 0 R] /Type /Pages /Count 1 >> endobj 3 0 obj << /Resources << /ProcSet 4 0 R /XObject << /Im0 5 0 R >> >> /Contents 6 0 R /Parent 2 0 R /Type /Page /Thumb 7 0 R /MediaBox [0 0 231.75 66.75] /CropBox [0 0 231.75 66.75] >> endobj 6 0 obj << /Length 36 >> stream q 231.75 0 0 66.75 0 0 cm /Im0 Do Q endstream endobj 4 0 obj [/PDF /Text /ImageC] endobj 5 0 obj << /Subtype /Image /Name /Im0 /Type /XObject /Filter [/FlateDecode] /Width 309 /Height 89 /BitsPerComponent 8 /Length 1368 /ColorSpace 8 0 R >> stream xÚí[=ÎÛ8½œ.¡ ¨U¥r‘n¡‚åj°ô,t€m¶ 7Ø”¶Ü4) .‡?"%‘6i[–ão’O&Gšá< )[@ A}ü´!–ž¶"mû‹¤ÝâúëçÆuÁÝß–]…DÂp£‡+ „¢,Š2ñÖÌlØ_0²<×ß?¾ý—M¬¸Ž4ñÍá.pºè½‰´UfúÃÊõ<0G£[׿øçti)iåVÓPïM¤­2‹“æu^"íó—Óé_ÆÓŠ4®fJ]-”@A¦®¢-Ì)´T&Y®,oV§“C—ždZ¨ Ò•¹Fû´ÉÁÉy‘-}H -šYÁUÀU6­e Ìö5YLéú­ûö÷‡OóG‚‹R»QŽJ*ÈÔe®—'EÒ$× ÙMK" >´¦15zâBH0»œiŸ>iµœ<­š@êci¡Ì˜p~—Ù®Äl¥ÙÌbJ×ߺo¿ýX—++PLe3u™º-8T†rVS^ŠV–YÍC£W/™zl¥Ÿ³J[ås™´Xfæß2{Ÿ¼ Þ@¼˜Ñ—_»éÛy”i¥w™üÖ’¶:0;/‘&d 3벤1Òø¤Å2³¤-³‘ãO&íôç_ጠƒAa2¸ÓÔvùatÜ"Rõ?Ÿ4 Þ<í)µ>õº@¯&-š™)ÝE6܋DŽ=…¯bžËˆ©¥°,ê“+£íòH#¥Z+”$Á¯^H£j-iÕƒ@?ja}js{=iñ°­Z!ýltHÌ­y¸•ÁºÆßž@ ‘ƒ×ýµ!^WÚHÚ]2ªÕËîÀ{1ób%M·;âÌ›»)x%m1ع@“¬Ûe’vïÙHËL&ƒ´;*xû¦Å+õnS«xi)º] iÚíF Þ>¤9ÍtMkZŠn—Bšú°•‚· i¾C­^(’u»Ò”Û­¼½IÓ*ž›ž)º]iÆíF Þ.¤Mâ›T<ÿApI·K ͸ÝHÁÛ‡4#^µ“ŠçHKÐí.æÄÁ­¼MIÃßž@ ‘üuMF¨F=eF/LÚ|¯Zh;Úì}L†žݱ’âU½ð^µàKøi)z^ø%djˆgTõ"{ÕBc “v9È›ÛÄϨê…÷ªÑÖ lF0›mÂ3 ÕóêÙ¤ “–"GÕ«sµÿH íU›r3‚Ùlžiˆ˜ž§U¹³¤%‡ÈPõa·%-°W›í7vÕlžièSCzŸ‹¹áJK ‘¡êñ‡iÈ‘½j5ót;—‘ºí3ÒÂzñŸ‘5-1DŽªGR7¡ß´õ^5Yžn§o«· O7Ä=EˆP¥%…ÈRõÈcj-þ%ÊévNIÓÛÖLCÄô<:­Xw‘®ê-ÂnIþöD @ @lЦ’8êÏæh›€ƒ²N=¾IÙz×[µw:‚#bMÚQ’v†º>àç’íTÍT²vFS2º†ŽªtdE ÍAŒoÍ(4«pÙAdìÊÉÚb¨^³øt…=U'êè¢SÝ=C/úÁ7i>:w™²ºÕ‰±zÝù ɺ¥K*].ʬù86¢™™<Ò¦ËÖoú¾djc³È×_ŸdiA³ñNÒ×YêΑ&Kuïü¶"í '$:LÓspöF“ÖCŸoRt4°¡éiHݸw‚‘&¿xô@Z_™\•^ÀGý­¢—¼ŒæaMzNƒæ²Þ=Ž®üäÚöŽ141Ë»ú®‘…®ŠN3$ígÅÿJ×5á endstream endobj 8 0 obj /DeviceGray endobj 7 0 obj << /Filter [/FlateDecode] /Width 106 /Height 31 /BitsPerComponent 8 /Length 1243 /ColorSpace 8 0 R >> stream xÚ­VisÚHýý»v«’ÚìaW*1³F\1·µ1!`Œ!Ææ!Ð-!¡™^IœIœ„8iU©fFOýÔÓýÔ03l^óuCð™a4GZÀ7¸ðõ‘ÌÐôPš{°ø0¶È-Ã<âÙ¡¯3NiÓ• ¤õl²Æj]šwÀaybCXëÆ•••¥.pÔÐUzæV)™´ãÏCQSoûоeçO[õu€Ú6Ö…#ò¤1:PŠ4‰r[E¦=‘D›\¦ô6„²}ª3Š RïGaAæ[-Z¨£Û‡F’…Ýâ öz0à:ðïn5‰@¯ÉÓM“©Ÿõ±$D}žÝßÿ{î‰zþØÛ6.ž—B¾ƒ]ïØÚ«9S0]p„Þ¸ lª~ÂTr¸œ!ï« ß % vŠéÀvú7\±ÈµË³ ‡œ. ”‡f¿ƒS¹á‹žn…‚!ßEŠW‰`ö˜ˆØI±vopÇÊ A†cyˆ& Ôqd÷è}¹¨•WL YíP$$á4O.®á€8wD²™4‘ÈÓ Û—!‚¦ Þκ¢-·e8 ) ±.™Àˆ¦²½²^]SŠõ'f¹˜@CQ0(HS‘„à‘bÞÄð j1Ë᯿dÅÅ|RõŸ>µÔbëÉŠ-ßÀ#äå²­'xLOß0õÏšùn_ÑöTQŒÊ'ZQêÐöñF‰·ËqèwFf­ì«¦4›U¡§îÌŽ«rIø‰@΀ã2ÌEùÄ¥­'ž¾‡Œ'ýz¯zò‡9ß!œD®™#'Q-U‚w'þÆ7™ð€÷DÐÇ FctQµþ¶œ•5ÁJ:M LÅi,H&Â`׳í3¦¤Àà2ÌÞ¦ W |t ÛñY-ÏK_t0oKÄ:Õÿ£z^iñ5/µfKiC5mfS}9DËáä'Çb;«û†Jé~øAÖ„è}JåÞMX¸I\ £Zž†zGgžx ùÌ„\Í‘ŠŸnW!_ dbYw¢§gçÉt2p™žþ,¦·gþl¢ô6ÊA>^Žg+Ñ:ä³×ñdù²pzò®qa~Ò6b> endobj xref 0 10 0000000000 65535 f 0000000015 00000 n 0000000066 00000 n 0000000125 00000 n 0000000409 00000 n 0000000446 00000 n 0000000320 00000 n 0000002022 00000 n 0000001994 00000 n 0000003403 00000 n trailer << /Info 9 0 R /ID [<89e679221bdee51109cf78c857e2cf8a8b87664cf67428090bb2625251705fd8> <89e679221bdee51109cf78c857e2cf8a8b87664cf67428090bb2625251705fd8>] /Root 1 0 R /Size 10 >> startxref 3585 %%EOF openxlsx/man/figures/lifecycle-defunct.svg0000644000176200001440000000170414627413571020473 0ustar liggesuserslifecyclelifecycledefunctdefunct openxlsx/man/figures/lifecycle-soft-deprecated.svg0000644000176200001440000000172614627413571022120 0ustar liggesuserslifecyclelifecyclesoft-deprecatedsoft-deprecated openxlsx/man/figures/lifecycle-maturing.svg0000644000176200001440000000170614627413571020673 0ustar liggesuserslifecyclelifecyclematuringmaturing openxlsx/man/figures/lifecycle-retired.svg0000644000176200001440000000170514627413571020502 0ustar liggesusers lifecyclelifecycleretiredretired openxlsx/man/removeTable.Rd0000644000176200001440000000260114627410100015433 0ustar liggesusers% Generated by roxygen2: do not edit by hand % Please edit documentation in R/wrappers.R \name{removeTable} \alias{removeTable} \title{Remove an Excel table in a workbook} \usage{ removeTable(wb, sheet, table) } \arguments{ \item{wb}{A workbook object} \item{sheet}{A name or index of a worksheet} \item{table}{Name of table to remove. See \code{\link[=getTables]{getTables()}}} } \value{ character vector of table names on the specified sheet } \description{ List Excel tables in a workbook } \examples{ wb <- createWorkbook() addWorksheet(wb, sheetName = "Sheet 1") addWorksheet(wb, sheetName = "Sheet 2") writeDataTable(wb, sheet = "Sheet 1", x = iris, tableName = "iris") writeDataTable(wb, sheet = 1, x = mtcars, tableName = "mtcars", startCol = 10) removeWorksheet(wb, sheet = 1) ## delete worksheet removes table objects writeDataTable(wb, sheet = 1, x = iris, tableName = "iris") writeDataTable(wb, sheet = 1, x = mtcars, tableName = "mtcars", startCol = 10) ## removeTable() deletes table object and all data getTables(wb, sheet = 1) removeTable(wb = wb, sheet = 1, table = "iris") writeDataTable(wb, sheet = 1, x = iris, tableName = "iris", startCol = 1) getTables(wb, sheet = 1) removeTable(wb = wb, sheet = 1, table = "iris") writeDataTable(wb, sheet = 1, x = iris, tableName = "iris", startCol = 1) \dontrun{ saveWorkbook(wb = wb, file = "removeTableExample.xlsx", overwrite = TRUE) } } openxlsx/man/removeWorksheet.Rd0000644000176200001440000000127614627410100016366 0ustar liggesusers% Generated by roxygen2: do not edit by hand % Please edit documentation in R/wrappers.R \name{removeWorksheet} \alias{removeWorksheet} \title{Remove a worksheet from a workbook} \usage{ removeWorksheet(wb, sheet) } \arguments{ \item{wb}{A workbook object} \item{sheet}{A name or index of a worksheet} } \description{ Remove a worksheet from a Workbook object Remove a worksheet from a workbook } \examples{ ## load a workbook wb <- loadWorkbook(file = system.file("extdata", "loadExample.xlsx", package = "openxlsx")) ## Remove sheet 2 removeWorksheet(wb, 2) ## save the modified workbook \dontrun{ saveWorkbook(wb, "removeWorksheetExample.xlsx", overwrite = TRUE) } } \author{ Alexander Walker } openxlsx/man/read.xlsx.Rd0000644000176200001440000000671014627410077015120 0ustar liggesusers% Generated by roxygen2: do not edit by hand % Please edit documentation in R/readWorkbook.R \name{read.xlsx} \alias{read.xlsx} \title{Read from an Excel file or Workbook object} \usage{ read.xlsx( xlsxFile, sheet, startRow = 1, colNames = TRUE, rowNames = FALSE, detectDates = FALSE, skipEmptyRows = TRUE, skipEmptyCols = TRUE, rows = NULL, cols = NULL, check.names = FALSE, sep.names = ".", namedRegion = NULL, na.strings = "NA", fillMergedCells = FALSE ) } \arguments{ \item{xlsxFile}{An xlsx file, Workbook object or URL to xlsx file.} \item{sheet}{The name or index of the sheet to read data from.} \item{startRow}{first row to begin looking for data. Empty rows at the top of a file are always skipped, regardless of the value of startRow.} \item{colNames}{If \code{TRUE}, the first row of data will be used as column names.} \item{rowNames}{If \code{TRUE}, first column of data will be used as row names.} \item{detectDates}{If \code{TRUE}, attempt to recognise dates and perform conversion.} \item{skipEmptyRows}{If \code{TRUE}, empty rows are skipped else empty rows after the first row containing data will return a row of NAs.} \item{skipEmptyCols}{If \code{TRUE}, empty columns are skipped.} \item{rows}{A numeric vector specifying which rows in the Excel file to read. If NULL, all rows are read.} \item{cols}{A numeric vector specifying which columns in the Excel file to read. If NULL, all columns are read.} \item{check.names}{logical. If TRUE then the names of the variables in the data frame are checked to ensure that they are syntactically valid variable names} \item{sep.names}{One character which substitutes blanks in column names. By default, "."} \item{namedRegion}{A named region in the Workbook. If not NULL startRow, rows and cols parameters are ignored.} \item{na.strings}{A character vector of strings which are to be interpreted as NA. Blank cells will be returned as NA.} \item{fillMergedCells}{If TRUE, the value in a merged cell is given to all cells within the merge.} } \value{ data.frame } \description{ Read data from an Excel file or Workbook object into a data.frame } \details{ Formulae written using writeFormula to a Workbook object will not get picked up by read.xlsx(). This is because only the formula is written and left to be evaluated when the file is opened in Excel. Opening, saving and closing the file with Excel will resolve this. } \examples{ xlsxFile <- system.file("extdata", "readTest.xlsx", package = "openxlsx") df1 <- read.xlsx(xlsxFile = xlsxFile, sheet = 1, skipEmptyRows = FALSE) sapply(df1, class) df2 <- read.xlsx(xlsxFile = xlsxFile, sheet = 3, skipEmptyRows = TRUE) df2$Date <- convertToDate(df2$Date) sapply(df2, class) head(df2) df2 <- read.xlsx( xlsxFile = xlsxFile, sheet = 3, skipEmptyRows = TRUE, detectDates = TRUE ) sapply(df2, class) head(df2) wb <- loadWorkbook(system.file("extdata", "readTest.xlsx", package = "openxlsx")) df3 <- read.xlsx(wb, sheet = 2, skipEmptyRows = FALSE, colNames = TRUE) df4 <- read.xlsx(xlsxFile, sheet = 2, skipEmptyRows = FALSE, colNames = TRUE) all.equal(df3, df4) wb <- loadWorkbook(system.file("extdata", "readTest.xlsx", package = "openxlsx")) df3 <- read.xlsx(wb, sheet = 2, skipEmptyRows = FALSE, cols = c(1, 4), rows = c(1, 3, 4) ) ## URL ## \dontrun{ xlsxFile <- "https://github.com/awalker89/openxlsx/raw/master/inst/readTest.xlsx" head(read.xlsx(xlsxFile)) } } \seealso{ \code{\link[=getNamedRegions]{getNamedRegions()}} } \author{ Alexander Walker } openxlsx/man/getDateOrigin.Rd0000644000176200001440000000200614627410100015712 0ustar liggesusers% Generated by roxygen2: do not edit by hand % Please edit documentation in R/wrappers.R \name{getDateOrigin} \alias{getDateOrigin} \title{Get the date origin an xlsx file is using} \usage{ getDateOrigin(xlsxFile) } \arguments{ \item{xlsxFile}{An xlsx or xlsm file.} } \value{ One of "1900-01-01" or "1904-01-01". } \description{ Return the date origin used internally by an xlsx or xlsm file } \details{ Excel stores dates as the number of days from either 1904-01-01 or 1900-01-01. This function checks the date origin being used in an Excel file and returns is so it can be used in \code{\link[=convertToDate]{convertToDate()}} } \examples{ ## create a file with some dates \dontrun{ write.xlsx(as.Date("2015-01-10") - (0:4), file = "getDateOriginExample.xlsx") m <- read.xlsx("getDateOriginExample.xlsx") ## convert to dates do <- getDateOrigin(system.file("extdata", "readTest.xlsx", package = "openxlsx")) convertToDate(m[[1]], do) } } \seealso{ \code{\link[=convertToDate]{convertToDate()}} } \author{ Alexander Walker } openxlsx/man/removeComment.Rd0000644000176200001440000000130014627410077016016 0ustar liggesusers% Generated by roxygen2: do not edit by hand % Please edit documentation in R/CommentClass.R \name{removeComment} \alias{removeComment} \title{Remove a comment from a cell} \usage{ removeComment(wb, sheet, cols, rows, gridExpand = TRUE) } \arguments{ \item{wb}{A workbook object} \item{sheet}{A vector of names or indices of worksheets} \item{cols}{Columns to delete comments from} \item{rows}{Rows to delete comments from} \item{gridExpand}{If \code{TRUE}, all data in rectangle min(rows):max(rows) X min(cols):max(cols) will be removed.} } \description{ Remove a cell comment from a worksheet } \seealso{ \code{\link[=createComment]{createComment()}} \code{\link[=writeComment]{writeComment()}} } openxlsx/man/all.equal.Rd0000644000176200001440000000063114627410100015045 0ustar liggesusers% Generated by roxygen2: do not edit by hand % Please edit documentation in R/wrappers.R \name{all.equal} \alias{all.equal} \alias{all.equal.Workbook} \title{Check equality of workbooks} \usage{ \method{all.equal}{Workbook}(target, current, ...) } \arguments{ \item{target}{A \code{Workbook} object} \item{current}{A \code{Workbook} object} \item{...}{ignored} } \description{ Check equality of workbooks } openxlsx/man/openxlsx.Rd0000644000176200001440000000450414656134061015065 0ustar liggesusers% Generated by roxygen2: do not edit by hand % Please edit documentation in R/openxlsx.R \docType{package} \name{openxlsx} \alias{openxlsx-package} \alias{openxlsx} \title{xlsx reading, writing and editing.} \description{ openxlsx simplifies the the process of writing and styling Excel xlsx files from R and removes the dependency on Java. } \details{ The openxlsx package uses global options, most to simplify formatting. These are stored in the \code{op.openxlsx} object. \describe{ \item{openxlsx.bandedCols}{FALSE} \item{openxlsx.bandedRows}{TRUE} \item{openxlsx.borderColour}{"black"} \item{openxlsx.borders}{"none"} \item{openxlsx.borderStyle}{"thin"} \item{openxlsx.compressionLevel}{"9"} \item{openxlsx.creator}{""} \item{openxlsx.dateFormat}{"mm/dd/yyyy"} \item{openxlsx.datetimeFormat}{"yyyy-mm-dd hh:mm:ss"} \item{openxlsx.headerStyle}{NULL} \item{openxlsx.keepNA}{FALSE} \item{openxlsx.na.string}{NULL} \item{openxlsx.numFmt}{NULL} \item{openxlsx.orientation}{"portrait"} \item{openxlsx.paperSize}{9} \item{openxlsx.tabColour}{"TableStyleLight9"} \item{openxlsx.tableStyle}{"TableStyleLight9"} \item{openxlsx.withFilter}{NA Whether to write data with or without a filter. If NA will make filters with \code{writeDataTable} and will not for \code{writeData}} } See the Formatting vignette for examples. Additional options } \seealso{ \itemize{ \item{\code{vignette("Introduction", package = "openxlsx")}} \item{\code{vignette("formatting", package = "openxlsx")}} \item{\code{\link[=writeData]{writeData()}}} \item{\code{\link[=writeDataTable]{writeDataTable()}}} \item{\code{\link[=write.xlsx]{write.xlsx()}}} \item{\code{\link[=read.xlsx]{read.xlsx()}}} \item{\code{\link[=op.openxlsx]{op.openxlsx()}}} } for examples } \author{ \strong{Maintainer}: Jan Marvin Garbuszus \email{jan.garbuszus@ruhr-uni-bochum.de} [contributor] Authors: \itemize{ \item Philipp Schauberger \email{philipp@schauberger.co.at} \item Alexander Walker \email{Alexander.Walker1989@gmail.com} } Other contributors: \itemize{ \item Luca Braglia [contributor] \item Joshua Sturm [contributor] \item Jordan Mark Barbone \email{jmbarbone@gmail.com} (\href{https://orcid.org/0000-0001-9788-3628}{ORCID}) [contributor] \item David Zimmermann \email{david_j_zimmermann@hotmail.com} [contributor] \item Reinhold Kainhofer \email{reinhold@kainhofer.com} [contributor] } } openxlsx/man/getTables.Rd0000644000176200001440000000117314627410100015103 0ustar liggesusers% Generated by roxygen2: do not edit by hand % Please edit documentation in R/wrappers.R \name{getTables} \alias{getTables} \title{List Excel tables in a workbook} \usage{ getTables(wb, sheet) } \arguments{ \item{wb}{A workbook object} \item{sheet}{A name or index of a worksheet} } \value{ character vector of table names on the specified sheet } \description{ List Excel tables in a workbook } \examples{ wb <- createWorkbook() addWorksheet(wb, sheetName = "Sheet 1") writeDataTable(wb, sheet = "Sheet 1", x = iris) writeDataTable(wb, sheet = 1, x = mtcars, tableName = "mtcars", startCol = 10) getTables(wb, sheet = "Sheet 1") } openxlsx/man/activeSheet.Rd0000644000176200001440000000145514627410100015440 0ustar liggesusers% Generated by roxygen2: do not edit by hand % Please edit documentation in R/wrappers.R \name{activeSheet} \alias{activeSheet} \alias{activeSheet<-} \title{Get/set active sheet of the workbook} \usage{ activeSheet(wb) activeSheet(wb) <- value } \arguments{ \item{wb}{A workbook object} \item{value}{index of the active sheet or name of the active sheet} } \value{ return the active sheet of the workbook } \description{ Get and set active sheet of the workbook } \examples{ wb <- createWorkbook() addWorksheet(wb, sheetName = "S1") addWorksheet(wb, sheetName = "S2") addWorksheet(wb, sheetName = "S3") activeSheet(wb) # default value is the first sheet active activeSheet(wb) <- 1 ## active sheet S1 activeSheet(wb) activeSheet(wb) <- "S2" ## active sheet S2 activeSheet(wb) } \author{ Philipp Schauberger } openxlsx/man/getCellRefs.Rd0000644000176200001440000000106714627410100015372 0ustar liggesusers% Generated by roxygen2: do not edit by hand % Please edit documentation in R/wrappers.R \name{getCellRefs} \alias{getCellRefs} \title{Return excel cell coordinates from (x,y) coordinates} \usage{ getCellRefs(cellCoords) } \arguments{ \item{cellCoords}{A data.frame with two columns coordinate pairs.} } \value{ Excel alphanumeric cell reference } \description{ Return excel cell coordinates from (x,y) coordinates } \examples{ getCellRefs(data.frame(1, 2)) # "B1" getCellRefs(data.frame(1:3, 2:4)) # "B1" "C2" "D3" } \author{ Philipp Schauberger, Alexander Walker } openxlsx/man/openXL.Rd0000644000176200001440000000243314627410077014413 0ustar liggesusers% Generated by roxygen2: do not edit by hand % Please edit documentation in R/openXL.R \name{openXL} \alias{openXL} \title{Open a Microsoft Excel file (xls/xlsx) or an openxlsx Workbook} \usage{ openXL(file=NULL) } \arguments{ \item{file}{path to the Excel (xls/xlsx) file or Workbook object.} } \description{ This function tries to open a Microsoft Excel (xls/xlsx) file or an openxlsx Workbook with the proper application, in a portable manner. In Windows (c) and Mac (c), it uses system default handlers, given the file type. In Linux it searches (via \code{which}) for available xls/xlsx reader applications (unless \code{options('openxlsx.excelApp')} is set to the app bin path), and if it finds anything, sets \code{options('openxlsx.excelApp')} to the program choosen by the user via a menu (if many are present, otherwise it will set the only available). Currently searched for apps are Libreoffice/Openoffice (\code{soffice} bin), Gnumeric (\code{gnumeric}) and Calligra Sheets (\code{calligrasheets}). } \examples{ # file example example(writeData) # openXL("writeDataExample.xlsx") # (not yet saved) Workbook example wb <- createWorkbook() x <- mtcars[1:6, ] addWorksheet(wb, "Cars") writeData(wb, "Cars", x, startCol = 2, startRow = 3, rowNames = TRUE) # openXL(wb) } \author{ Luca Braglia } openxlsx/man/writeFormula.Rd0000644000176200001440000000531714646006410015663 0ustar liggesusers% Generated by roxygen2: do not edit by hand % Please edit documentation in R/writeData.R \name{writeFormula} \alias{writeFormula} \title{Write a character vector as an Excel Formula} \usage{ writeFormula( wb, sheet, x, startCol = 1, startRow = 1, array = FALSE, xy = NULL ) } \arguments{ \item{wb}{A Workbook object containing a worksheet.} \item{sheet}{The worksheet to write to. Can be the worksheet index or name.} \item{x}{A character vector.} \item{startCol}{A vector specifying the starting column to write to.} \item{startRow}{A vector specifying the starting row to write to.} \item{array}{A bool if the function written is of type array} \item{xy}{An alternative to specifying \code{startCol} and \code{startRow} individually. A vector of the form \code{c(startCol, startRow)}.} } \description{ Write a a character vector containing Excel formula to a worksheet. } \details{ Currently only the english version of functions are supported. Please don't use the local translation. The examples below show a small list of possible formulas: \itemize{ \item{SUM(B2:B4)} \item{AVERAGE(B2:B4)} \item{MIN(B2:B4)} \item{MAX(B2:B4)} \item{...} } } \examples{ ## There are 3 ways to write a formula wb <- createWorkbook() addWorksheet(wb, "Sheet 1") writeData(wb, "Sheet 1", x = iris) ## SEE int2col() to convert int to Excel column label ## 1. - As a character vector using writeFormula v <- c("SUM(A2:A151)", "AVERAGE(B2:B151)") ## skip header row writeFormula(wb, sheet = 1, x = v, startCol = 10, startRow = 2) writeFormula(wb, 1, x = "A2 + B2", startCol = 10, startRow = 10) ## 2. - As a data.frame column with class "formula" using writeData df <- data.frame( x = 1:3, y = 1:3, z = paste(paste0("A", 1:3 + 1L), paste0("B", 1:3 + 1L), sep = " + "), z2 = sprintf("ADDRESS(1,\%s)", 1:3), stringsAsFactors = FALSE ) class(df$z) <- c(class(df$z), "formula") class(df$z2) <- c(class(df$z2), "formula") addWorksheet(wb, "Sheet 2") writeData(wb, sheet = 2, x = df) ## 3. - As a vector with class "formula" using writeData v2 <- c("SUM(A2:A4)", "AVERAGE(B2:B4)", "MEDIAN(C2:C4)") class(v2) <- c(class(v2), "formula") writeData(wb, sheet = 2, x = v2, startCol = 10, startRow = 2) ## Save workbook \dontrun{ saveWorkbook(wb, "writeFormulaExample.xlsx", overwrite = TRUE) } ## 4. - Writing internal hyperlinks wb <- createWorkbook() addWorksheet(wb, "Sheet1") addWorksheet(wb, "Sheet2") writeFormula(wb, "Sheet1", x = '=HYPERLINK("#Sheet2!B3", "Text to Display - Link to Sheet2")') ## Save workbook \dontrun{ saveWorkbook(wb, "writeFormulaHyperlinkExample.xlsx", overwrite = TRUE) } } \seealso{ \code{\link[=writeData]{writeData()}} \code{\link[=makeHyperlinkString]{makeHyperlinkString()}} } \author{ Alexander Walker } openxlsx/man/setColWidths.Rd0000644000176200001440000000343414646006410015615 0ustar liggesusers% Generated by roxygen2: do not edit by hand % Please edit documentation in R/wrappers.R \name{setColWidths} \alias{setColWidths} \title{Set worksheet column widths} \usage{ setColWidths( wb, sheet, cols, widths = 8.43, hidden = rep(FALSE, length(cols)), ignoreMergedCells = FALSE ) } \arguments{ \item{wb}{A workbook object} \item{sheet}{A name or index of a worksheet} \item{cols}{Indices of cols to set width} \item{widths}{widths to set cols to specified in Excel column width units or "auto" for automatic sizing. The widths argument is recycled to the length of cols.} \item{hidden}{Logical vector. If TRUE the column is hidden.} \item{ignoreMergedCells}{Ignore any cells that have been merged with other cells in the calculation of "auto" column widths.} } \description{ Set worksheet column widths to specific width or "auto". } \details{ The global min and max column width for "auto" columns is set by (default values show): \itemize{ \item{options("openxlsx.minWidth" = 3)} \item{options("openxlsx.maxWidth" = 250)} ## This is the maximum width allowed in Excel } NOTE: The calculation of column widths can be slow for large worksheets. NOTE: The \code{hidden} parameter may conflict with the one set in \code{groupColumns}; changing one will update the other. } \examples{ ## Create a new workbook wb <- createWorkbook() ## Add a worksheet addWorksheet(wb, "Sheet 1") ## set col widths setColWidths(wb, 1, cols = c(1, 4, 6, 7, 9), widths = c(16, 15, 12, 18, 33)) ## auto columns addWorksheet(wb, "Sheet 2") writeData(wb, sheet = 2, x = iris) setColWidths(wb, sheet = 2, cols = 1:5, widths = "auto") ## Save workbook \dontrun{ saveWorkbook(wb, "setColWidthsExample.xlsx", overwrite = TRUE) } } \seealso{ \code{\link[=removeColWidths]{removeColWidths()}} } \author{ Alexander Walker } openxlsx/man/replaceStyle.Rd0000644000176200001440000000164214627410100015626 0ustar liggesusers% Generated by roxygen2: do not edit by hand % Please edit documentation in R/wrappers.R \name{replaceStyle} \alias{replaceStyle} \title{Replace an existing cell style} \usage{ replaceStyle(wb, index, newStyle) } \arguments{ \item{wb}{A workbook object} \item{index}{Index of style object to replace} \item{newStyle}{A style to replace the existing style as position index} } \description{ Replace an existing cell style Replace a style object } \examples{ ## load a workbook wb <- loadWorkbook(file = system.file("extdata", "loadExample.xlsx", package = "openxlsx")) ## create a new style and replace style 2 newStyle <- createStyle(fgFill = "#00FF00") ## replace style 2 getStyles(wb)[1:3] ## prints styles replaceStyle(wb, 2, newStyle = newStyle) ## Save workbook \dontrun{ saveWorkbook(wb, "replaceStyleExample.xlsx", overwrite = TRUE) } } \seealso{ \code{\link[=getStyles]{getStyles()}} } \author{ Alexander Walker } openxlsx/man/setRowHeights.Rd0000644000176200001440000000335514656134061016007 0ustar liggesusers% Generated by roxygen2: do not edit by hand % Please edit documentation in R/wrappers.R \name{setRowHeights} \alias{setRowHeights} \title{Set worksheet row heights} \usage{ setRowHeights( wb, sheet, rows, heights, fontsize = NULL, factor = 1, base_height = 15, extra_height = 12, wrap = TRUE ) } \arguments{ \item{wb}{workbook object} \item{sheet}{name or index of a worksheet} \item{rows}{indices of rows to set height} \item{heights}{heights to set rows to specified in Excel column height units} \item{fontsize}{font size, optional (get base font size by default)} \item{factor}{factor to manually adjust font width, e.g., for bold fonts, optional} \item{base_height}{basic row height, optional} \item{extra_height}{additional row height per new line of text, optional} \item{wrap}{wrap text of entries which exceed the column width, optional} } \description{ Set worksheet row heights } \examples{ ## Create a new workbook wb <- createWorkbook() ## Add a worksheet addWorksheet(wb, "Sheet") sheet <- 1 ## Write dummy data writeData(wb, sheet, "fixed w/fixed h", startCol = 1, startRow = 1) writeData(wb, sheet, "fixed w/auto h ABC ABC ABC ABC ABC ABC ABC ABC ABC ABC ABC", startCol = 2, startRow = 2) writeData(wb, sheet, "variable w/fixed h", startCol = 3, startRow = 3) ## Set column widths and row heights setColWidths(wb, sheet, cols = c(1, 2, 3, 4), widths = c(10, 20, "auto", 20)) setRowHeights(wb, sheet, rows = c(1, 2, 8, 4, 6), heights = c(30, "auto", 15, 15, 30)) ## Overwrite row 1 height setRowHeights(wb, sheet, rows = 1, heights = 40) ## Save workbook \dontrun{ saveWorkbook(wb, "setRowHeightsExample.xlsx", overwrite = TRUE) } } \seealso{ \code{\link[=removeRowHeights]{removeRowHeights()}} } \author{ Alexander Walker } openxlsx/man/getCreators.Rd0000644000176200001440000000065614701063102015457 0ustar liggesusers% Generated by roxygen2: do not edit by hand % Please edit documentation in R/wrappers.R \name{getCreators} \alias{getCreators} \title{Get the names of the authors from the meta data of the file.} \usage{ getCreators(wb) } \arguments{ \item{wb}{A workbook object} } \value{ vector of creators } \description{ Just a wrapper of wb$getCreators() } \examples{ wb <- createWorkbook() getCreators(wb) } \author{ Philipp Schauberger } openxlsx/man/removeCellMerge.Rd0000644000176200001440000000112314627410100016241 0ustar liggesusers% Generated by roxygen2: do not edit by hand % Please edit documentation in R/wrappers.R \name{removeCellMerge} \alias{removeCellMerge} \title{Create a new Workbook object} \usage{ removeCellMerge(wb, sheet, cols, rows) } \arguments{ \item{wb}{A workbook object} \item{sheet}{A name or index of a worksheet} \item{cols}{vector of column indices} \item{rows}{vector of row indices} } \description{ Unmerges any merged cells that intersect with the region specified by, min(cols):max(cols) X min(rows):max(rows) } \seealso{ \code{\link[=mergeCells]{mergeCells()}} } \author{ Alexander Walker } openxlsx/man/addWorksheet.Rd0000644000176200001440000000777114656123677015655 0ustar liggesusers% Generated by roxygen2: do not edit by hand % Please edit documentation in R/wrappers.R \name{addWorksheet} \alias{addWorksheet} \title{Add a worksheet to a workbook} \usage{ addWorksheet( wb, sheetName, gridLines = openxlsx_getOp("gridLines", TRUE), tabColour = NULL, zoom = 100, header = openxlsx_getOp("header"), footer = openxlsx_getOp("footer"), evenHeader = openxlsx_getOp("evenHeader"), evenFooter = openxlsx_getOp("evenFooter"), firstHeader = openxlsx_getOp("firstHeader"), firstFooter = openxlsx_getOp("firstFooter"), visible = TRUE, paperSize = openxlsx_getOp("paperSize", 9), orientation = openxlsx_getOp("orientation", "portrait"), vdpi = openxlsx_getOp("vdpi", 300), hdpi = openxlsx_getOp("hdpi", 300) ) } \arguments{ \item{wb}{A Workbook object to attach the new worksheet} \item{sheetName}{A name for the new worksheet} \item{gridLines}{A logical. If \code{FALSE}, the worksheet grid lines will be hidden.} \item{tabColour}{Colour of the worksheet tab. A valid colour (belonging to colours()) or a valid hex colour beginning with "#"} \item{zoom}{A numeric between 10 and 400. Worksheet zoom level as a percentage.} \item{header}{document header. Character vector of length 3 corresponding to positions left, center, right. Use NA to skip a position.} \item{footer}{document footer. Character vector of length 3 corresponding to positions left, center, right. Use NA to skip a position.} \item{evenHeader}{document header for even pages.} \item{evenFooter}{document footer for even pages.} \item{firstHeader}{document header for first page only.} \item{firstFooter}{document footer for first page only.} \item{visible}{If FALSE, sheet is hidden else visible.} \item{paperSize}{An integer corresponding to a paper size. See ?pageSetup for details.} \item{orientation}{One of "portrait" or "landscape"} \item{vdpi}{Vertical DPI. Can be set with options("openxlsx.dpi" = X) or options("openxlsx.vdpi" = X)} \item{hdpi}{Horizontal DPI. Can be set with options("openxlsx.dpi" = X) or options("openxlsx.hdpi" = X)} } \value{ XML tree } \description{ Add a worksheet to a Workbook object } \details{ Headers and footers can contain special tags \describe{ \item{\strong{&[Page]}}{ Page number} \item{\strong{&[Pages]}}{ Number of pages} \item{\strong{&[Date]}}{ Current date} \item{\strong{&[Time]}}{ Current time} \item{\strong{&[Path]}}{ File path} \item{\strong{&[File]}}{ File name} \item{\strong{&[Tab]}}{ Worksheet name} } } \examples{ ## Create a new workbook wb <- createWorkbook("Fred") ## Add 3 worksheets addWorksheet(wb, "Sheet 1") addWorksheet(wb, "Sheet 2", gridLines = FALSE) addWorksheet(wb, "Sheet 3", tabColour = "red") addWorksheet(wb, "Sheet 4", gridLines = FALSE, tabColour = "#4F81BD") ## Headers and Footers addWorksheet(wb, "Sheet 5", header = c("ODD HEAD LEFT", "ODD HEAD CENTER", "ODD HEAD RIGHT"), footer = c("ODD FOOT RIGHT", "ODD FOOT CENTER", "ODD FOOT RIGHT"), evenHeader = c("EVEN HEAD LEFT", "EVEN HEAD CENTER", "EVEN HEAD RIGHT"), evenFooter = c("EVEN FOOT RIGHT", "EVEN FOOT CENTER", "EVEN FOOT RIGHT"), firstHeader = c("TOP", "OF FIRST", "PAGE"), firstFooter = c("BOTTOM", "OF FIRST", "PAGE") ) addWorksheet(wb, "Sheet 6", header = c("&[Date]", "ALL HEAD CENTER 2", "&[Page] / &[Pages]"), footer = c("&[Path]&[File]", NA, "&[Tab]"), firstHeader = c(NA, "Center Header of First Page", NA), firstFooter = c(NA, "Center Footer of First Page", NA) ) addWorksheet(wb, "Sheet 7", header = c("ALL HEAD LEFT 2", "ALL HEAD CENTER 2", "ALL HEAD RIGHT 2"), footer = c("ALL FOOT RIGHT 2", "ALL FOOT CENTER 2", "ALL FOOT RIGHT 2") ) addWorksheet(wb, "Sheet 8", firstHeader = c("FIRST ONLY L", NA, "FIRST ONLY R"), firstFooter = c("FIRST ONLY L", NA, "FIRST ONLY R") ) ## Need data on worksheet to see all headers and footers writeData(wb, sheet = 5, 1:400) writeData(wb, sheet = 6, 1:400) writeData(wb, sheet = 7, 1:400) writeData(wb, sheet = 8, 1:400) ## Save workbook \dontrun{ saveWorkbook(wb, "addWorksheetExample.xlsx", overwrite = TRUE) } } \author{ Alexander Walker } openxlsx/man/getBaseFont.Rd0000644000176200001440000000111314627410100015364 0ustar liggesusers% Generated by roxygen2: do not edit by hand % Please edit documentation in R/wrappers.R \name{getBaseFont} \alias{getBaseFont} \title{Return the workbook default font} \usage{ getBaseFont(wb) } \arguments{ \item{wb}{A workbook object} } \description{ Return the workbook default font Returns the base font used in the workbook. } \examples{ ## create a workbook wb <- createWorkbook() getBaseFont(wb) ## modify base font to size 10 Arial Narrow in red modifyBaseFont(wb, fontSize = 10, fontColour = "#FF0000", fontName = "Arial Narrow") getBaseFont(wb) } \author{ Alexander Walker } openxlsx/man/protectWorkbook.Rd0000644000176200001440000000264414627410100016373 0ustar liggesusers% Generated by roxygen2: do not edit by hand % Please edit documentation in R/wrappers.R \name{protectWorkbook} \alias{protectWorkbook} \title{Protect a workbook from modifications} \usage{ protectWorkbook( wb, protect = TRUE, password = NULL, lockStructure = FALSE, lockWindows = FALSE, type = 1L ) } \arguments{ \item{wb}{A workbook object} \item{protect}{Whether to protect or unprotect the sheet (default=TRUE)} \item{password}{(optional) password required to unprotect the workbook} \item{lockStructure}{Whether the workbook structure should be locked} \item{lockWindows}{Whether the window position of the spreadsheet should be locked} \item{type}{Lock type, default 1. From the xml documentation: 1 - Document is password protected. 2 - Document is recommended to be opened as read-only. 4 - Document is enforced to be opened as read-only. 8 - Document is locked for annotation.} } \description{ Protect or unprotect a workbook from modifications by the user in the graphical user interface. Replaces an existing protection. } \examples{ wb <- createWorkbook() addWorksheet(wb, "S1") protectWorkbook(wb, protect = TRUE, password = "Password", lockStructure = TRUE) \dontrun{ saveWorkbook(wb, "WorkBook_Protection.xlsx", overwrite = TRUE) } # Remove the protection protectWorkbook(wb, protect = FALSE) \dontrun{ saveWorkbook(wb, "WorkBook_Protection_unprotected.xlsx", overwrite = TRUE) } } \author{ Reinhold Kainhofer } openxlsx/man/setHeaderFooter.Rd0000644000176200001440000000531714656123677016306 0ustar liggesusers% Generated by roxygen2: do not edit by hand % Please edit documentation in R/wrappers.R \name{setHeaderFooter} \alias{setHeaderFooter} \title{Set document headers and footers} \usage{ setHeaderFooter( wb, sheet, header = NULL, footer = NULL, evenHeader = NULL, evenFooter = NULL, firstHeader = NULL, firstFooter = NULL ) } \arguments{ \item{wb}{A workbook object} \item{sheet}{A name or index of a worksheet} \item{header}{document header. Character vector of length 3 corresponding to positions left, center, right. Use NA to skip a position.} \item{footer}{document footer. Character vector of length 3 corresponding to positions left, center, right. Use NA to skip a position.} \item{evenHeader}{document header for even pages.} \item{evenFooter}{document footer for even pages.} \item{firstHeader}{document header for first page only.} \item{firstFooter}{document footer for first page only.} } \description{ Set document headers and footers } \details{ Headers and footers can contain special tags \describe{ \item{\strong{&[Page]}}{ Page number} \item{\strong{&[Pages]}}{ Number of pages} \item{\strong{&[Date]}}{ Current date} \item{\strong{&[Time]}}{ Current time} \item{\strong{&[Path]}}{ File path} \item{\strong{&[File]}}{ File name} \item{\strong{&[Tab]}}{ Worksheet name} } } \examples{ wb <- createWorkbook() addWorksheet(wb, "S1") addWorksheet(wb, "S2") addWorksheet(wb, "S3") addWorksheet(wb, "S4") writeData(wb, 1, 1:400) writeData(wb, 2, 1:400) writeData(wb, 3, 3:400) writeData(wb, 4, 3:400) setHeaderFooter(wb, sheet = "S1", header = c("ODD HEAD LEFT", "ODD HEAD CENTER", "ODD HEAD RIGHT"), footer = c("ODD FOOT RIGHT", "ODD FOOT CENTER", "ODD FOOT RIGHT"), evenHeader = c("EVEN HEAD LEFT", "EVEN HEAD CENTER", "EVEN HEAD RIGHT"), evenFooter = c("EVEN FOOT RIGHT", "EVEN FOOT CENTER", "EVEN FOOT RIGHT"), firstHeader = c("TOP", "OF FIRST", "PAGE"), firstFooter = c("BOTTOM", "OF FIRST", "PAGE") ) setHeaderFooter(wb, sheet = 2, header = c("&[Date]", "ALL HEAD CENTER 2", "&[Page] / &[Pages]"), footer = c("&[Path]&[File]", NA, "&[Tab]"), firstHeader = c(NA, "Center Header of First Page", NA), firstFooter = c(NA, "Center Footer of First Page", NA) ) setHeaderFooter(wb, sheet = 3, header = c("ALL HEAD LEFT 2", "ALL HEAD CENTER 2", "ALL HEAD RIGHT 2"), footer = c("ALL FOOT RIGHT 2", "ALL FOOT CENTER 2", "ALL FOOT RIGHT 2") ) setHeaderFooter(wb, sheet = 4, firstHeader = c("FIRST ONLY L", NA, "FIRST ONLY R"), firstFooter = c("FIRST ONLY L", NA, "FIRST ONLY R") ) \dontrun{ saveWorkbook(wb, "setHeaderFooterExample.xlsx", overwrite = TRUE) } } \seealso{ \code{\link[=addWorksheet]{addWorksheet()}} to set headers and footers when adding a worksheet } \author{ Alexander Walker } openxlsx/man/buildWorkbook.Rd0000644000176200001440000001021514656123677016031 0ustar liggesusers% Generated by roxygen2: do not edit by hand % Please edit documentation in R/build_workbook.R \name{buildWorkbook} \alias{buildWorkbook} \title{Build Workbook} \usage{ buildWorkbook(x, asTable = FALSE, ...) } \arguments{ \item{x}{A data.frame or a (named) list of objects that can be handled by \code{\link[=writeData]{writeData()}} or \code{\link[=writeDataTable]{writeDataTable()}} to write to file} \item{asTable}{If \code{TRUE} will use \code{\link[=writeDataTable]{writeDataTable()}} rather than \code{\link[=writeData]{writeData()}} to write \code{x} to the file (default: \code{FALSE})} \item{...}{Additional arguments passed to \code{\link[=writeData]{writeData()}}, \code{\link[=writeDataTable]{writeDataTable()}}, \code{\link[=setColWidths]{setColWidths()}} (see Optional Parameters)} } \value{ A Workbook object } \description{ Build a workbook from a data.frame or named list } \details{ This function can be used as shortcut to create a workbook object from a data.frame or named list. If names are available in the list they will be used as the worksheet names. The parameters in \code{...} are collected and passed to \code{\link[=writeData]{writeData()}} or \code{\link[=writeDataTable]{writeDataTable()}} to initially create the Workbook objects then appropriate parameters are passed to \code{\link[=setColWidths]{setColWidths()}}. columns of x with class Date or POSIXt are automatically styled as dates and datetimes respectively. } \section{Optional Parameters}{ \strong{createWorkbook Parameters} \describe{ \item{\strong{creator}}{ A string specifying the workbook author} } \strong{addWorksheet Parameters} \describe{ \item{\strong{sheetName}}{ Name of the worksheet} \item{\strong{gridLines}}{ A logical. If \code{FALSE}, the worksheet grid lines will be hidden.} \item{\strong{tabColour}}{ Colour of the worksheet tab. A valid colour (belonging to colours()) or a valid hex colour beginning with "#".} \item{\strong{zoom}}{ A numeric between 10 and 400. Worksheet zoom level as a percentage.} } \strong{writeData/writeDataTable Parameters} \describe{ \item{\strong{startCol}}{ A vector specifying the starting column(s) to write df} \item{\strong{startRow}}{ A vector specifying the starting row(s) to write df} \item{\strong{xy}}{ An alternative to specifying startCol and startRow individually. A vector of the form c(startCol, startRow)} \item{\strong{colNames or col.names}}{ If \code{TRUE}, column names of x are written.} \item{\strong{rowNames or row.names}}{ If \code{TRUE}, row names of x are written.} \item{\strong{headerStyle}}{ Custom style to apply to column names.} \item{\strong{borders}}{ Either "surrounding", "columns" or "rows" or NULL. If "surrounding", a border is drawn around the data. If "rows", a surrounding border is drawn a border around each row. If "columns", a surrounding border is drawn with a border between each column. If "\code{all}" all cell borders are drawn.} \item{\strong{borderColour}}{ Colour of cell border} \item{\strong{borderStyle}}{ Border line style.} \item{\strong{keepNA}}{If \code{TRUE}, NA values are converted to #N/A (or \code{na.string}, if not NULL) in Excel, else NA cells will be empty. Defaults to FALSE.} \item{\strong{na.string}}{If not NULL, and if \code{keepNA} is \code{TRUE}, NA values are converted to this string in Excel. Defaults to NULL.} } \strong{freezePane Parameters} \describe{ \item{\strong{firstActiveRow}}{Top row of active region to freeze pane.} \item{\strong{firstActiveCol}}{Furthest left column of active region to freeze pane.} \item{\strong{firstRow}}{If \code{TRUE}, freezes the first row (equivalent to firstActiveRow = 2)} \item{\strong{firstCol}}{If \code{TRUE}, freezes the first column (equivalent to firstActiveCol = 2)} } \strong{colWidths Parameters} \describe{ \item{\strong{colWidths}}{May be a single value for all columns (or "auto"), or a list of vectors that will be recycled for each sheet (see examples)} } } \examples{ x <- data.frame(a = 1, b = 2) wb <- buildWorkbook(x) y <- list(a = x, b = x, c = x) buildWorkbook(y, asTable = TRUE) buildWorkbook(y, asTable = TRUE, tableStyle = "TableStyleLight8") } \seealso{ \code{\link[=write.xlsx]{write.xlsx()}} } \author{ Jordan Mark Barbone } openxlsx/man/createStyle.Rd0000644000176200001440000001370014656123677015502 0ustar liggesusers% Generated by roxygen2: do not edit by hand % Please edit documentation in R/wrappers.R \name{createStyle} \alias{createStyle} \title{Create a cell style} \usage{ createStyle( fontName = NULL, fontSize = NULL, fontColour = NULL, numFmt = openxlsx_getOp("numFmt", "GENERAL"), border = NULL, borderColour = openxlsx_getOp("borderColour", "black"), borderStyle = openxlsx_getOp("borderStyle", "thin"), bgFill = NULL, fgFill = NULL, halign = NULL, valign = NULL, textDecoration = NULL, wrapText = FALSE, textRotation = NULL, indent = NULL, locked = NULL, hidden = NULL ) } \arguments{ \item{fontName}{A name of a font. Note the font name is not validated. If fontName is NULL, the workbook base font is used. (Defaults to Calibri)} \item{fontSize}{Font size. A numeric greater than 0. If fontSize is NULL, the workbook base font size is used. (Defaults to 11)} \item{fontColour}{Colour of text in cell. A valid hex colour beginning with "#" or one of colours(). If fontColour is NULL, the workbook base font colours is used. (Defaults to black)} \item{numFmt}{Cell formatting \itemize{ \item{\strong{GENERAL}} \item{\strong{NUMBER}} \item{\strong{CURRENCY}} \item{\strong{ACCOUNTING}} \item{\strong{DATE}} \item{\strong{LONGDATE}} \item{\strong{TIME}} \item{\strong{PERCENTAGE}} \item{\strong{FRACTION}} \item{\strong{SCIENTIFIC}} \item{\strong{TEXT}} \item{\strong{COMMA} for comma separated thousands} \item{For date/datetime styling a combination of d, m, y and punctuation marks} \item{For numeric rounding use "0.00" with the preferred number of decimal places} }} \item{border}{Cell border. A vector of "top", "bottom", "left", "right" or a single string). \describe{ \item{\strong{"top"}}{ Top border} \item{\strong{bottom}}{ Bottom border} \item{\strong{left}}{ Left border} \item{\strong{right}}{ Right border} \item{\strong{TopBottom} or \strong{c("top", "bottom")}}{ Top and bottom border} \item{\strong{LeftRight} or \strong{c("left", "right")}}{ Left and right border} \item{\strong{TopLeftRight} or \strong{c("top", "left", "right")}}{ Top, Left and right border} \item{\strong{TopBottomLeftRight} or \strong{c("top", "bottom", "left", "right")}}{ All borders} }} \item{borderColour}{Colour of cell border vector the same length as the number of sides specified in "border" A valid colour (belonging to colours()) or a valid hex colour beginning with "#"} \item{borderStyle}{Border line style vector the same length as the number of sides specified in "border" \describe{ \item{\strong{none}}{ No Border} \item{\strong{thin}}{ thin border} \item{\strong{medium}}{ medium border} \item{\strong{dashed}}{ dashed border} \item{\strong{dotted}}{ dotted border} \item{\strong{thick}}{ thick border} \item{\strong{double}}{ double line border} \item{\strong{hair}}{ Hairline border} \item{\strong{mediumDashed}}{ medium weight dashed border} \item{\strong{dashDot}}{ dash-dot border} \item{\strong{mediumDashDot}}{ medium weight dash-dot border} \item{\strong{dashDotDot}}{ dash-dot-dot border} \item{\strong{mediumDashDotDot}}{ medium weight dash-dot-dot border} \item{\strong{slantDashDot}}{ slanted dash-dot border} }} \item{bgFill}{Cell background fill colour. A valid colour (belonging to colours()) or a valid hex colour beginning with "#". -- \strong{Use for conditional formatting styles only.}} \item{fgFill}{Cell foreground fill colour. A valid colour (belonging to colours()) or a valid hex colour beginning with "#"} \item{halign}{Horizontal alignment of cell contents \describe{ \item{\strong{left}}{ Left horizontal align cell contents} \item{\strong{right}}{ Right horizontal align cell contents} \item{\strong{center}}{ Center horizontal align cell contents} \item{\strong{justify}}{ Justify horizontal align cell contents} }} \item{valign}{A name Vertical alignment of cell contents \describe{ \item{\strong{top}}{ Top vertical align cell contents} \item{\strong{center}}{ Center vertical align cell contents} \item{\strong{bottom}}{ Bottom vertical align cell contents} }} \item{textDecoration}{Text styling. \describe{ \item{\strong{bold}}{ Bold cell contents} \item{\strong{strikeout}}{ Strikeout cell contents} \item{\strong{italic}}{ Italicise cell contents} \item{\strong{underline}}{ Underline cell contents} \item{\strong{underline2}}{ Double underline cell contents} \item{\strong{accounting}}{ Single accounting underline cell contents} \item{\strong{accounting2}}{ Double accounting underline cell contents} }} \item{wrapText}{Logical. If \code{TRUE} cell contents will wrap to fit in column.} \item{textRotation}{Rotation of text in degrees. 255 for vertical text.} \item{indent}{Horizontal indentation of cell contents.} \item{locked}{Whether cell contents are locked (if worksheet protection is turned on)} \item{hidden}{Whether the formula of the cell contents will be hidden (if worksheet protection is turned on)} } \value{ A style object } \description{ Create a new style to apply to worksheet cells } \examples{ ## See package vignettes for further examples ## Modify default values of border colour and border line style options("openxlsx.borderColour" = "#4F80BD") options("openxlsx.borderStyle" = "thin") ## Size 18 Arial, Bold, left horz. aligned, fill colour #1A33CC, all borders, style <- createStyle( fontSize = 18, fontName = "Arial", textDecoration = "bold", halign = "left", fgFill = "#1A33CC", border = "TopBottomLeftRight" ) ## Red, size 24, Bold, italic, underline, center aligned Font, bottom border style <- createStyle( fontSize = 24, fontColour = rgb(1, 0, 0), textDecoration = c("bold", "italic", "underline"), halign = "center", valign = "center", border = "Bottom" ) # borderColour is recycled for each border or all colours can be supplied # colour is recycled 3 times for "Top", "Bottom" & "Right" sides. createStyle(border = "TopBottomRight", borderColour = "red") # supply all colours createStyle(border = "TopBottomLeft", borderColour = c("red", "yellow", "green")) } \seealso{ \code{\link[=addStyle]{addStyle()}} } \author{ Alexander Walker } openxlsx/man/getStyles.Rd0000644000176200001440000000077114627410100015157 0ustar liggesusers% Generated by roxygen2: do not edit by hand % Please edit documentation in R/wrappers.R \name{getStyles} \alias{getStyles} \title{Returns a list of all styles in the workbook} \usage{ getStyles(wb) } \arguments{ \item{wb}{A workbook object} } \description{ Returns list of style objects in the workbook } \examples{ ## load a workbook wb <- loadWorkbook(file = system.file("extdata", "loadExample.xlsx", package = "openxlsx")) getStyles(wb)[1:3] } \seealso{ \code{\link[=replaceStyle]{replaceStyle()}} } openxlsx/man/writeDataTable.Rd0000644000176200001440000001357314627410100016074 0ustar liggesusers% Generated by roxygen2: do not edit by hand % Please edit documentation in R/writeDataTable.R \name{writeDataTable} \alias{writeDataTable} \title{Write to a worksheet as an Excel table} \usage{ writeDataTable( wb, sheet, x, startCol = 1, startRow = 1, xy = NULL, colNames = TRUE, rowNames = FALSE, tableStyle = openxlsx_getOp("tableStyle", "TableStyleLight9"), tableName = NULL, headerStyle = openxlsx_getOp("headerStyle"), withFilter = openxlsx_getOp("withFilter", TRUE), keepNA = openxlsx_getOp("keepNA", FALSE), na.string = openxlsx_getOp("na.string"), sep = ", ", stack = FALSE, firstColumn = openxlsx_getOp("firstColumn", FALSE), lastColumn = openxlsx_getOp("lastColumn", FALSE), bandedRows = openxlsx_getOp("bandedRows", TRUE), bandedCols = openxlsx_getOp("bandedCols", FALSE), col.names, row.names ) } \arguments{ \item{wb}{A Workbook object containing a worksheet.} \item{sheet}{The worksheet to write to. Can be the worksheet index or name.} \item{x}{A dataframe.} \item{startCol}{A vector specifying the starting column to write df} \item{startRow}{A vector specifying the starting row to write df} \item{xy}{An alternative to specifying startCol and startRow individually. A vector of the form c(startCol, startRow)} \item{colNames}{If \code{TRUE}, column names of x are written.} \item{rowNames}{If \code{TRUE}, row names of x are written.} \item{tableStyle}{Any excel table style name or "none" (see "formatting" vignette).} \item{tableName}{name of table in workbook. The table name must be unique.} \item{headerStyle}{Custom style to apply to column names.} \item{withFilter}{If \code{TRUE} or \code{NA}, columns with have filters in the first row.} \item{keepNA}{If \code{TRUE}, NA values are converted to #N/A (or \code{na.string}, if not NULL) in Excel, else NA cells will be empty.} \item{na.string}{If not NULL, and if \code{keepNA} is \code{TRUE}, NA values are converted to this string in Excel.} \item{sep}{Only applies to list columns. The separator used to collapse list columns to a character vector e.g. sapply(x$list_column, paste, collapse = sep).} \item{stack}{If \code{TRUE} the new style is merged with any existing cell styles. If FALSE, any existing style is replaced by the new style. \cr\cr \cr\strong{The below options correspond to Excel table options:} \cr \if{html}{\figure{tableoptions.png}{options: width="40\%" alt="Figure: table_options.png"}} \if{latex}{\figure{tableoptions.pdf}{options: width=7cm}}} \item{firstColumn}{logical. If TRUE, the first column is bold} \item{lastColumn}{logical. If TRUE, the last column is bold} \item{bandedRows}{logical. If TRUE, rows are colour banded} \item{bandedCols}{logical. If TRUE, the columns are colour banded} \item{row.names, col.names}{Deprecated, please use \code{rowNames}, \code{colNames} instead} } \description{ Write to a worksheet and format as an Excel table } \details{ columns of x with class Date/POSIXt, currency, accounting, hyperlink, percentage are automatically styled as dates, currency, accounting, hyperlinks, percentages respectively. } \examples{ ## see package vignettes for further examples. ##################################################################################### ## Create Workbook object and add worksheets wb <- createWorkbook() addWorksheet(wb, "S1") addWorksheet(wb, "S2") addWorksheet(wb, "S3") ##################################################################################### ## -- write data.frame as an Excel table with column filters ## -- default table style is "TableStyleMedium2" writeDataTable(wb, "S1", x = iris) writeDataTable(wb, "S2", x = mtcars, xy = c("B", 3), rowNames = TRUE, tableStyle = "TableStyleLight9" ) df <- data.frame( "Date" = Sys.Date() - 0:19, "T" = TRUE, "F" = FALSE, "Time" = Sys.time() - 0:19 * 60 * 60, "Cash" = paste("$", 1:20), "Cash2" = 31:50, "hLink" = "https://CRAN.R-project.org/", "Percentage" = seq(0, 1, length.out = 20), "TinyNumbers" = runif(20) / 1E9, stringsAsFactors = FALSE ) ## openxlsx will apply default Excel styling for these classes class(df$Cash) <- c(class(df$Cash), "currency") class(df$Cash2) <- c(class(df$Cash2), "accounting") class(df$hLink) <- "hyperlink" class(df$Percentage) <- c(class(df$Percentage), "percentage") class(df$TinyNumbers) <- c(class(df$TinyNumbers), "scientific") writeDataTable(wb, "S3", x = df, startRow = 4, rowNames = TRUE, tableStyle = "TableStyleMedium9") ##################################################################################### ## Additional Header Styling and remove column filters writeDataTable(wb, sheet = 1, x = iris, startCol = 7, headerStyle = createStyle(textRotation = 45), withFilter = FALSE ) ##################################################################################### ## Save workbook ## Open in excel without saving file: openXL(wb) \dontrun{ saveWorkbook(wb, "writeDataTableExample.xlsx", overwrite = TRUE) } ##################################################################################### ## Pre-defined table styles gallery wb <- createWorkbook(paste0("tableStylesGallery.xlsx")) addWorksheet(wb, "Style Samples") for (i in 1:21) { style <- paste0("TableStyleLight", i) writeDataTable(wb, x = data.frame(style), sheet = 1, tableStyle = style, startRow = 1, startCol = i * 3 - 2 ) } for (i in 1:28) { style <- paste0("TableStyleMedium", i) writeDataTable(wb, x = data.frame(style), sheet = 1, tableStyle = style, startRow = 4, startCol = i * 3 - 2 ) } for (i in 1:11) { style <- paste0("TableStyleDark", i) writeDataTable(wb, x = data.frame(style), sheet = 1, tableStyle = style, startRow = 7, startCol = i * 3 - 2 ) } ## openXL(wb) \dontrun{ saveWorkbook(wb, file = "tableStylesGallery.xlsx", overwrite = TRUE) } } \seealso{ \code{\link[=addWorksheet]{addWorksheet()}} \code{\link[=writeData]{writeData()}} \code{\link[=removeTable]{removeTable()}} \code{\link[=getTables]{getTables()}} } openxlsx/man/ungroupColumns.Rd0000644000176200001440000000103414627410100016225 0ustar liggesusers% Generated by roxygen2: do not edit by hand % Please edit documentation in R/wrappers.R \name{ungroupColumns} \alias{ungroupColumns} \title{Ungroup Columns} \usage{ ungroupColumns(wb, sheet, cols) } \arguments{ \item{wb}{A workbook object} \item{sheet}{A name or index of a worksheet} \item{cols}{Indices of columns to ungroup} } \description{ Ungroup a selection of columns } \details{ If column was previously hidden, it will now be shown } \seealso{ \code{\link[=ungroupRows]{ungroupRows()}} To ungroup rows } \author{ Joshua Sturm } openxlsx/man/protectWorksheet.Rd0000644000176200001440000000474514627410100016555 0ustar liggesusers% Generated by roxygen2: do not edit by hand % Please edit documentation in R/wrappers.R \name{protectWorksheet} \alias{protectWorksheet} \title{Protect a worksheet from modifications} \usage{ protectWorksheet( wb, sheet, protect = TRUE, password = NULL, lockSelectingLockedCells = NULL, lockSelectingUnlockedCells = NULL, lockFormattingCells = NULL, lockFormattingColumns = NULL, lockFormattingRows = NULL, lockInsertingColumns = NULL, lockInsertingRows = NULL, lockInsertingHyperlinks = NULL, lockDeletingColumns = NULL, lockDeletingRows = NULL, lockSorting = NULL, lockAutoFilter = NULL, lockPivotTables = NULL, lockObjects = NULL, lockScenarios = NULL ) } \arguments{ \item{wb}{A workbook object} \item{sheet}{A name or index of a worksheet} \item{protect}{Whether to protect or unprotect the sheet (default=TRUE)} \item{password}{(optional) password required to unprotect the worksheet} \item{lockSelectingLockedCells}{Whether selecting locked cells is locked} \item{lockSelectingUnlockedCells}{Whether selecting unlocked cells is locked} \item{lockFormattingCells}{Whether formatting cells is locked} \item{lockFormattingColumns}{Whether formatting columns is locked} \item{lockFormattingRows}{Whether formatting rows is locked} \item{lockInsertingColumns}{Whether inserting columns is locked} \item{lockInsertingRows}{Whether inserting rows is locked} \item{lockInsertingHyperlinks}{Whether inserting hyperlinks is locked} \item{lockDeletingColumns}{Whether deleting columns is locked} \item{lockDeletingRows}{Whether deleting rows is locked} \item{lockSorting}{Whether sorting is locked} \item{lockAutoFilter}{Whether auto-filter is locked} \item{lockPivotTables}{Whether pivot tables are locked} \item{lockObjects}{Whether objects are locked} \item{lockScenarios}{Whether scenarios are locked} } \description{ Protect or unprotect a worksheet from modifications by the user in the graphical user interface. Replaces an existing protection. } \examples{ wb <- createWorkbook() addWorksheet(wb, "S1") writeDataTable(wb, 1, x = iris[1:30, ]) # Formatting cells / columns is allowed , but inserting / deleting columns is protected: protectWorksheet(wb, "S1", protect = TRUE, lockFormattingCells = FALSE, lockFormattingColumns = FALSE, lockInsertingColumns = TRUE, lockDeletingColumns = TRUE ) # Remove the protection protectWorksheet(wb, "S1", protect = FALSE) \dontrun{ saveWorkbook(wb, "pageSetupExample.xlsx", overwrite = TRUE) } } \author{ Reinhold Kainhofer } openxlsx/man/loadWorkbook.Rd0000644000176200001440000000213714656134061015642 0ustar liggesusers% Generated by roxygen2: do not edit by hand % Please edit documentation in R/loadWorkbook.R \name{loadWorkbook} \alias{loadWorkbook} \title{Load an existing .xlsx file} \usage{ loadWorkbook(file, xlsxFile = NULL, isUnzipped = FALSE, na.convert = TRUE) } \arguments{ \item{file}{A path to an existing .xlsx or .xlsm file} \item{xlsxFile}{alias for file} \item{isUnzipped}{Set to TRUE if the xlsx file is already unzipped} \item{na.convert}{Should empty/blank cells be converted to \code{NA_character_}. Defaults to TRUE.} } \value{ Workbook object. } \description{ loadWorkbook returns a workbook object conserving styles and formatting of the original .xlsx file. } \examples{ ## load existing workbook from package folder wb <- loadWorkbook(file = system.file("extdata", "loadExample.xlsx", package = "openxlsx")) names(wb) # list worksheets wb ## view object ## Add a worksheet addWorksheet(wb, "A new worksheet") ## Save workbook \dontrun{ saveWorkbook(wb, "loadExample.xlsx", overwrite = TRUE) } } \seealso{ \code{\link[=removeWorksheet]{removeWorksheet()}} } \author{ Alexander Walker, Philipp Schauberger } openxlsx/DESCRIPTION0000644000176200001440000000606714745244712013663 0ustar liggesusersType: Package Package: openxlsx Title: Read, Write and Edit xlsx Files Version: 4.2.8 Date: 2025-01-25 Authors@R: c(person(given = "Philipp", family = "Schauberger", role = "aut", email = "philipp@schauberger.co.at"), person(given = "Alexander", family = "Walker", role = "aut", email = "Alexander.Walker1989@gmail.com"), person(given = "Luca", family = "Braglia", role = "ctb"), person(given = "Joshua", family = "Sturm", role = "ctb"), person(given = "Jan Marvin", family = "Garbuszus", role = c("ctb", "cre"), email = "jan.garbuszus@ruhr-uni-bochum.de"), person(given = "Jordan Mark", family = "Barbone", role = "ctb", email = "jmbarbone@gmail.com", comment = c(ORCID = "0000-0001-9788-3628")), person(given = "David", family = "Zimmermann", role = "ctb", email = "david_j_zimmermann@hotmail.com"), person(given = "Reinhold", family = "Kainhofer", role = "ctb", email = "reinhold@kainhofer.com")) Description: Simplifies the creation of Excel .xlsx files by providing a high level interface to writing, styling and editing worksheets. Through the use of 'Rcpp', read/write times are comparable to the 'xlsx' and 'XLConnect' packages with the added benefit of removing the dependency on Java. License: MIT + file LICENSE URL: https://ycphs.github.io/openxlsx/index.html, https://github.com/ycphs/openxlsx BugReports: https://github.com/ycphs/openxlsx/issues Depends: R (>= 3.3.0) Imports: grDevices, methods, Rcpp, stats, stringi, utils, zip Suggests: curl, formula.tools, knitr, rmarkdown, testthat LinkingTo: Rcpp VignetteBuilder: knitr Encoding: UTF-8 Language: en-US RoxygenNote: 7.3.2 Collate: 'CommentClass.R' 'HyperlinkClass.R' 'RcppExports.R' 'class_definitions.R' 'StyleClass.R' 'WorkbookClass.R' 'asserts.R' 'baseXML.R' 'borderFunctions.R' 'build_workbook.R' 'chartsheet_class.R' 'conditional_formatting.R' 'data-fontSizeLookupTables.R' 'helperFunctions.R' 'loadWorkbook.R' 'onUnload.R' 'openXL.R' 'openxlsx-package.R' 'openxlsx.R' 'openxlsxCoerce.R' 'readWorkbook.R' 'setWindowSize.R' 'sheet_data_class.R' 'utils.R' 'workbook_column_widths.R' 'workbook_read_workbook.R' 'workbook_write_data.R' 'worksheet_class.R' 'wrappers.R' 'writeData.R' 'writeDataTable.R' 'writexlsx.R' 'zzz.R' LazyData: true NeedsCompilation: yes Packaged: 2025-01-25 19:28:01 UTC; janmarvingarbuszus Author: Philipp Schauberger [aut], Alexander Walker [aut], Luca Braglia [ctb], Joshua Sturm [ctb], Jan Marvin Garbuszus [ctb, cre], Jordan Mark Barbone [ctb] (), David Zimmermann [ctb], Reinhold Kainhofer [ctb] Maintainer: Jan Marvin Garbuszus Repository: CRAN Date/Publication: 2025-01-25 20:30:02 UTC