From 32c50d684e3563fc7f21ac878062065e015d76f0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=BD=97=E7=A5=A5?= <1366971433@qq.com> Date: Sun, 21 Apr 2019 19:23:13 +0800 Subject: [PATCH] mapreduce --- code/Hadoop/hadoop-word-count/pom.xml | 55 ++++++ .../java/com/heibaiying/WordCountApp.java | 84 ++++++++ .../com/heibaiying/WordCountCombinerApp.java | 87 +++++++++ .../WordCountCombinerPartitionerApp.java | 95 +++++++++ .../component/CustomPartitioner.java | 16 ++ .../heibaiying/component/WordCountMapper.java | 23 +++ .../component/WordCountReducer.java | 22 +++ .../heibaiying/utils/WordCountDataUtils.java | 91 +++++++++ .../src/main/resources/log4j.properties | 9 + code/Hadoop/hdfs-java-api/pom.xml | 42 ++++ .../java/com/heibaiying/utils/HdfsUtils.java | 180 ++++++++++++++++++ pictures/hadoop-combiner.png | Bin 0 -> 14772 bytes pictures/hadoop-no-combiner.png | Bin 0 -> 26526 bytes pictures/hadoop-wordcountapp.png | Bin 0 -> 25459 bytes .../hadoop-wordcountcombinerpartition.png | Bin 0 -> 51673 bytes 15 files changed, 704 insertions(+) create mode 100644 code/Hadoop/hadoop-word-count/pom.xml create mode 100644 code/Hadoop/hadoop-word-count/src/main/java/com/heibaiying/WordCountApp.java create mode 100644 code/Hadoop/hadoop-word-count/src/main/java/com/heibaiying/WordCountCombinerApp.java create mode 100644 code/Hadoop/hadoop-word-count/src/main/java/com/heibaiying/WordCountCombinerPartitionerApp.java create mode 100644 code/Hadoop/hadoop-word-count/src/main/java/com/heibaiying/component/CustomPartitioner.java create mode 100644 code/Hadoop/hadoop-word-count/src/main/java/com/heibaiying/component/WordCountMapper.java create mode 100644 code/Hadoop/hadoop-word-count/src/main/java/com/heibaiying/component/WordCountReducer.java create mode 100644 code/Hadoop/hadoop-word-count/src/main/java/com/heibaiying/utils/WordCountDataUtils.java create mode 100644 code/Hadoop/hadoop-word-count/src/main/resources/log4j.properties create mode 100644 code/Hadoop/hdfs-java-api/pom.xml create mode 100644 code/Hadoop/hdfs-java-api/src/main/java/com/heibaiying/utils/HdfsUtils.java create mode 100644 pictures/hadoop-combiner.png create mode 100644 pictures/hadoop-no-combiner.png create mode 100644 pictures/hadoop-wordcountapp.png create mode 100644 pictures/hadoop-wordcountcombinerpartition.png diff --git a/code/Hadoop/hadoop-word-count/pom.xml b/code/Hadoop/hadoop-word-count/pom.xml new file mode 100644 index 0000000..7d3d29b --- /dev/null +++ b/code/Hadoop/hadoop-word-count/pom.xml @@ -0,0 +1,55 @@ + + + 4.0.0 + + com.heibaiying + hadoop-word-count + 1.0 + + + + org.apache.maven.plugins + maven-compiler-plugin + + 8 + 8 + + + + + + + + UTF-8 + 2.6.0-cdh5.15.2 + + + + + + + cloudera + https://repository.cloudera.com/artifactory/cloudera-repos/ + + + + + + + + org.apache.hadoop + hadoop-client + ${hadoop.version} + + + + org.apache.commons + commons-lang3 + 3.8.1 + + + + + \ No newline at end of file diff --git a/code/Hadoop/hadoop-word-count/src/main/java/com/heibaiying/WordCountApp.java b/code/Hadoop/hadoop-word-count/src/main/java/com/heibaiying/WordCountApp.java new file mode 100644 index 0000000..21a3ff7 --- /dev/null +++ b/code/Hadoop/hadoop-word-count/src/main/java/com/heibaiying/WordCountApp.java @@ -0,0 +1,84 @@ +package com.heibaiying; + +import com.heibaiying.component.WordCountMapper; +import com.heibaiying.component.WordCountReducer; +import org.apache.hadoop.conf.Configuration; +import org.apache.hadoop.fs.FileSystem; +import org.apache.hadoop.fs.Path; +import org.apache.hadoop.io.IntWritable; +import org.apache.hadoop.io.Text; +import org.apache.hadoop.mapreduce.Job; +import org.apache.hadoop.mapreduce.lib.input.FileInputFormat; +import org.apache.hadoop.mapreduce.lib.output.FileOutputFormat; + +import java.net.URI; + +/** + * 组装作业 并提交到集群运行 + */ +public class WordCountApp { + + + // 这里为了直观显示参数 使用了硬编码,实际开发中可以通过外部传参 + private static final String HDFS_URL = "hdfs://192.168.0.107:8020"; + private static final String HADOOP_USER_NAME = "root"; + + public static void main(String[] args) throws Exception { + + + // 文件输入路径和输出路径由外部传参指定 + if (args.length < 2) { + System.out.println("Input and output paths are necessary!"); + return; + } + + // 需要指明hadoop用户名,否则在HDFS上创建目录时可能会抛出权限不足的异常 + System.setProperty("HADOOP_USER_NAME", HADOOP_USER_NAME); + + + Configuration configuration = new Configuration(); + // 指明HDFS的地址 + configuration.set("fs.defaultFS", HDFS_URL); + + + // 创建一个Job + Job job = Job.getInstance(configuration); + + // 设置运行的主类 + job.setJarByClass(WordCountApp.class); + + // 设置Mapper和Reducer + job.setMapperClass(WordCountMapper.class); + job.setReducerClass(WordCountReducer.class); + + // 设置Mapper输出key和value的类型 + job.setMapOutputKeyClass(Text.class); + job.setMapOutputValueClass(IntWritable.class); + + // 设置Reducer输出key和value的类型 + job.setOutputKeyClass(Text.class); + job.setOutputValueClass(IntWritable.class); + + // 如果输出目录已经存在,则必须先删除,否则重复运行程序时会抛出异常 + FileSystem fileSystem = FileSystem.get(new URI(HDFS_URL), configuration, HADOOP_USER_NAME); + Path outputPath = new Path(args[1]); + if (fileSystem.exists(outputPath)) { + fileSystem.delete(outputPath, true); + } + + + // 设置作业输入文件和输出文件的路径 + FileInputFormat.setInputPaths(job, new Path(args[0])); + FileOutputFormat.setOutputPath(job, outputPath); + + // 将作业提交到群集并等待它完成,参数设置为true代表打印显示对应的进度 + boolean result = job.waitForCompletion(true); + + // 关闭之前创建的fileSystem + fileSystem.close(); + + // 根据作业结果,终止当前运行的Java虚拟机,退出程序 + System.exit(result ? 0 : -1); + + } +} diff --git a/code/Hadoop/hadoop-word-count/src/main/java/com/heibaiying/WordCountCombinerApp.java b/code/Hadoop/hadoop-word-count/src/main/java/com/heibaiying/WordCountCombinerApp.java new file mode 100644 index 0000000..8867812 --- /dev/null +++ b/code/Hadoop/hadoop-word-count/src/main/java/com/heibaiying/WordCountCombinerApp.java @@ -0,0 +1,87 @@ +package com.heibaiying; + +import com.heibaiying.component.WordCountMapper; +import com.heibaiying.component.WordCountReducer; +import org.apache.hadoop.conf.Configuration; +import org.apache.hadoop.fs.FileSystem; +import org.apache.hadoop.fs.Path; +import org.apache.hadoop.io.IntWritable; +import org.apache.hadoop.io.Text; +import org.apache.hadoop.mapreduce.Job; +import org.apache.hadoop.mapreduce.lib.input.FileInputFormat; +import org.apache.hadoop.mapreduce.lib.output.FileOutputFormat; + +import java.net.URI; + +/** + * 组装作业 并提交到集群运行 + */ +public class WordCountCombinerApp { + + + // 这里为了直观显示参数 使用了硬编码的形式,实际开发中可以通过外部传参 + private static final String HDFS_URL = "hdfs://192.168.0.107:8020"; + private static final String HADOOP_USER_NAME = "root"; + + public static void main(String[] args) throws Exception { + + + // 文件输入路径和输出路径由外部传参指定 + if (args.length < 2) { + System.out.println("Input and output paths are necessary!"); + return; + } + + // 需要指明hadoop用户名,否则在HDFS上创建目录时可能会抛出权限不足的异常 + System.setProperty("HADOOP_USER_NAME", HADOOP_USER_NAME); + + + Configuration configuration = new Configuration(); + // 指明HDFS的地址 + configuration.set("fs.defaultFS", HDFS_URL); + + + // 创建一个Job + Job job = Job.getInstance(configuration); + + // 设置运行的主类 + job.setJarByClass(WordCountCombinerApp.class); + + // 设置Mapper和Reducer + job.setMapperClass(WordCountMapper.class); + job.setReducerClass(WordCountReducer.class); + + // 设置Combiner + job.setCombinerClass(WordCountReducer.class); + + // 设置Mapper输出key和value的类型 + job.setMapOutputKeyClass(Text.class); + job.setMapOutputValueClass(IntWritable.class); + + // 设置Reducer输出key和value的类型 + job.setOutputKeyClass(Text.class); + job.setOutputValueClass(IntWritable.class); + + // 如果输出目录已经存在,则必须先删除,否则重复运行程序时会抛出异常 + FileSystem fileSystem = FileSystem.get(new URI(HDFS_URL), configuration, HADOOP_USER_NAME); + Path outputPath = new Path(args[1]); + if (fileSystem.exists(outputPath)) { + fileSystem.delete(outputPath, true); + } + + + // 设置作业输入文件和输出文件的路径 + FileInputFormat.setInputPaths(job, new Path(args[0])); + FileOutputFormat.setOutputPath(job, outputPath); + + // 将作业提交到群集并等待它完成,参数设置为true代表打印显示对应的进度 + boolean result = job.waitForCompletion(true); + + // 关闭之前创建的fileSystem + fileSystem.close(); + + // 根据作业结果,终止当前运行的Java虚拟机,退出程序 + System.exit(result ? 0 : -1); + + } +} diff --git a/code/Hadoop/hadoop-word-count/src/main/java/com/heibaiying/WordCountCombinerPartitionerApp.java b/code/Hadoop/hadoop-word-count/src/main/java/com/heibaiying/WordCountCombinerPartitionerApp.java new file mode 100644 index 0000000..a29d78d --- /dev/null +++ b/code/Hadoop/hadoop-word-count/src/main/java/com/heibaiying/WordCountCombinerPartitionerApp.java @@ -0,0 +1,95 @@ +package com.heibaiying; + +import com.heibaiying.component.CustomPartitioner; +import com.heibaiying.component.WordCountMapper; +import com.heibaiying.component.WordCountReducer; +import com.heibaiying.utils.WordCountDataUtils; +import org.apache.hadoop.conf.Configuration; +import org.apache.hadoop.fs.FileSystem; +import org.apache.hadoop.fs.Path; +import org.apache.hadoop.io.IntWritable; +import org.apache.hadoop.io.Text; +import org.apache.hadoop.mapreduce.Job; +import org.apache.hadoop.mapreduce.lib.input.FileInputFormat; +import org.apache.hadoop.mapreduce.lib.output.FileOutputFormat; + +import java.net.URI; + +/** + * 组装作业 并提交到集群运行 + */ +public class WordCountCombinerPartitionerApp { + + + // 这里为了直观显示参数 使用了硬编码的形式,实际开发中可以通过外部传参 + private static final String HDFS_URL = "hdfs://192.168.0.107:8020"; + private static final String HADOOP_USER_NAME = "root"; + + public static void main(String[] args) throws Exception { + + + // 文件输入路径和输出路径由外部传参指定 + if (args.length < 2) { + System.out.println("Input and output paths are necessary!"); + return; + } + + // 需要指明hadoop用户名,否则在HDFS上创建目录时可能会抛出权限不足的异常 + System.setProperty("HADOOP_USER_NAME", HADOOP_USER_NAME); + + + Configuration configuration = new Configuration(); + // 指明HDFS的地址 + configuration.set("fs.defaultFS", HDFS_URL); + + + // 创建一个Job + Job job = Job.getInstance(configuration); + + // 设置运行的主类 + job.setJarByClass(WordCountCombinerPartitionerApp.class); + + // 设置Mapper和Reducer + job.setMapperClass(WordCountMapper.class); + job.setReducerClass(WordCountReducer.class); + + // 设置Combiner + job.setCombinerClass(WordCountReducer.class); + + + // 设置自定义分区规则 + job.setPartitionerClass(CustomPartitioner.class); + // 设置reduce个数 + job.setNumReduceTasks(WordCountDataUtils.WORD_LIST.size()); + + // 设置Mapper输出key和value的类型 + job.setMapOutputKeyClass(Text.class); + job.setMapOutputValueClass(IntWritable.class); + + // 设置Reducer输出key和value的类型 + job.setOutputKeyClass(Text.class); + job.setOutputValueClass(IntWritable.class); + + // 如果输出目录已经存在,则必须先删除,否则重复运行程序时会抛出异常 + FileSystem fileSystem = FileSystem.get(new URI(HDFS_URL), configuration, HADOOP_USER_NAME); + Path outputPath = new Path(args[1]); + if (fileSystem.exists(outputPath)) { + fileSystem.delete(outputPath, true); + } + + + // 设置作业输入文件和输出文件的路径 + FileInputFormat.setInputPaths(job, new Path(args[0])); + FileOutputFormat.setOutputPath(job, outputPath); + + // 将作业提交到群集并等待它完成,参数设置为true代表打印显示对应的进度 + boolean result = job.waitForCompletion(true); + + // 关闭之前创建的fileSystem + fileSystem.close(); + + // 根据作业结果,终止当前运行的Java虚拟机,退出程序 + System.exit(result ? 0 : -1); + + } +} diff --git a/code/Hadoop/hadoop-word-count/src/main/java/com/heibaiying/component/CustomPartitioner.java b/code/Hadoop/hadoop-word-count/src/main/java/com/heibaiying/component/CustomPartitioner.java new file mode 100644 index 0000000..8cf50ed --- /dev/null +++ b/code/Hadoop/hadoop-word-count/src/main/java/com/heibaiying/component/CustomPartitioner.java @@ -0,0 +1,16 @@ +package com.heibaiying.component; + +import com.heibaiying.utils.WordCountDataUtils; +import org.apache.hadoop.io.IntWritable; +import org.apache.hadoop.io.Text; +import org.apache.hadoop.mapreduce.Partitioner; + +/** + * 自定义partitioner,按照单词分区 + */ +public class CustomPartitioner extends Partitioner { + + public int getPartition(Text text, IntWritable intWritable, int numPartitions) { + return WordCountDataUtils.WORD_LIST.indexOf(text.toString()); + } +} diff --git a/code/Hadoop/hadoop-word-count/src/main/java/com/heibaiying/component/WordCountMapper.java b/code/Hadoop/hadoop-word-count/src/main/java/com/heibaiying/component/WordCountMapper.java new file mode 100644 index 0000000..26b6451 --- /dev/null +++ b/code/Hadoop/hadoop-word-count/src/main/java/com/heibaiying/component/WordCountMapper.java @@ -0,0 +1,23 @@ +package com.heibaiying.component; + +import org.apache.hadoop.io.IntWritable; +import org.apache.hadoop.io.LongWritable; +import org.apache.hadoop.io.Text; +import org.apache.hadoop.mapreduce.Mapper; + +import java.io.IOException; + +/** + * 将每行数据按照指定分隔符进行拆分 + */ +public class WordCountMapper extends Mapper { + + @Override + protected void map(LongWritable key, Text value, Context context) throws IOException, InterruptedException { + String[] words = value.toString().split("\t"); + for (String word : words) { + context.write(new Text(word), new IntWritable(1)); + } + } + +} diff --git a/code/Hadoop/hadoop-word-count/src/main/java/com/heibaiying/component/WordCountReducer.java b/code/Hadoop/hadoop-word-count/src/main/java/com/heibaiying/component/WordCountReducer.java new file mode 100644 index 0000000..be96e23 --- /dev/null +++ b/code/Hadoop/hadoop-word-count/src/main/java/com/heibaiying/component/WordCountReducer.java @@ -0,0 +1,22 @@ +package com.heibaiying.component; + +import org.apache.hadoop.io.IntWritable; +import org.apache.hadoop.io.Text; +import org.apache.hadoop.mapreduce.Reducer; + +import java.io.IOException; + +/** + * 进行词频统计 + */ +public class WordCountReducer extends Reducer { + + @Override + protected void reduce(Text key, Iterable values, Context context) throws IOException, InterruptedException { + int count = 0; + for (IntWritable value : values) { + count += value.get(); + } + context.write(key, new IntWritable(count)); + } +} diff --git a/code/Hadoop/hadoop-word-count/src/main/java/com/heibaiying/utils/WordCountDataUtils.java b/code/Hadoop/hadoop-word-count/src/main/java/com/heibaiying/utils/WordCountDataUtils.java new file mode 100644 index 0000000..de04ccc --- /dev/null +++ b/code/Hadoop/hadoop-word-count/src/main/java/com/heibaiying/utils/WordCountDataUtils.java @@ -0,0 +1,91 @@ +package com.heibaiying.utils; + +import org.apache.commons.lang3.StringUtils; +import org.apache.hadoop.conf.Configuration; +import org.apache.hadoop.fs.FSDataOutputStream; +import org.apache.hadoop.fs.FileSystem; +import org.apache.hadoop.fs.Path; + +import java.io.IOException; +import java.net.URI; +import java.nio.file.Files; +import java.nio.file.Paths; +import java.nio.file.StandardOpenOption; +import java.util.Arrays; +import java.util.Collections; +import java.util.List; +import java.util.Random; + +/** + * 产生词频统计模拟数据 + */ +public class WordCountDataUtils { + + public static final List WORD_LIST = Arrays.asList("Spark", "Hadoop", "HBase", "Storm", "Flink", "Hive"); + + + /** + * 模拟产生词频数据 + * + * @return 词频数据 + */ + private static String generateData() { + StringBuilder builder = new StringBuilder(); + for (int i = 0; i < 1000; i++) { + Collections.shuffle(WORD_LIST); + Random random = new Random(); + int endIndex = random.nextInt(WORD_LIST.size()) % (WORD_LIST.size()) + 1; + String line = StringUtils.join(WORD_LIST.toArray(), "\t", 0, endIndex); + builder.append(line).append("\n"); + } + return builder.toString(); + } + + + /** + * 模拟产生词频数据并输出到本地 + * + * @param outputPath 输出文件路径 + */ + private static void generateDataToLocal(String outputPath) { + try { + java.nio.file.Path path = Paths.get(outputPath); + if (Files.exists(path)) { + Files.delete(path); + } + Files.write(path, generateData().getBytes(), StandardOpenOption.CREATE); + } catch (IOException e) { + e.printStackTrace(); + } + } + + /** + * 模拟产生词频数据并输出到HDFS + * + * @param hdfsUrl HDFS地址 + * @param user hadoop用户名 + * @param outputPathString 存储到HDFS上的路径 + */ + private static void generateDataToHDFS(String hdfsUrl, String user, String outputPathString) { + FileSystem fileSystem = null; + try { + fileSystem = FileSystem.get(new URI(hdfsUrl), new Configuration(), user); + Path outputPath = new Path(outputPathString); + if (fileSystem.exists(outputPath)) { + fileSystem.delete(outputPath, true); + } + FSDataOutputStream out = fileSystem.create(outputPath); + out.write(generateData().getBytes()); + out.flush(); + out.close(); + fileSystem.close(); + } catch (Exception e) { + e.printStackTrace(); + } + } + + public static void main(String[] args) { + //generateDataToLocal("input.txt"); + generateDataToHDFS("hdfs://192.168.0.107:8020", "root", "/wordcount/input.txt"); + } +} diff --git a/code/Hadoop/hadoop-word-count/src/main/resources/log4j.properties b/code/Hadoop/hadoop-word-count/src/main/resources/log4j.properties new file mode 100644 index 0000000..4525fba --- /dev/null +++ b/code/Hadoop/hadoop-word-count/src/main/resources/log4j.properties @@ -0,0 +1,9 @@ +log4j.rootLogger=INFO,CONSOLE +log4j.addivity.org.apache=false + +log4j.appender.CONSOLE=org.apache.log4j.ConsoleAppender +log4j.appender.CONSOLE.Threshold=INFO +log4j.appender.CONSOLE.layout.ConversionPattern=%d{yyyy-MM-dd HH\:mm\:ss} -%-4r [%t] %-5p %x - %m%n +log4j.appender.CONSOLE.Target=System.out +log4j.appender.CONSOLE.Encoding=UTF-8 +log4j.appender.CONSOLE.layout=org.apache.log4j.PatternLayout diff --git a/code/Hadoop/hdfs-java-api/pom.xml b/code/Hadoop/hdfs-java-api/pom.xml new file mode 100644 index 0000000..e04cfbd --- /dev/null +++ b/code/Hadoop/hdfs-java-api/pom.xml @@ -0,0 +1,42 @@ + + + 4.0.0 + + com.heibaiying + hdfs-java-api + 1.0 + + + + UTF-8 + 2.6.0-cdh5.15.2 + + + + + + + cloudera + https://repository.cloudera.com/artifactory/cloudera-repos/ + + + + + + + + org.apache.hadoop + hadoop-client + ${hadoop.version} + + + junit + junit + 4.12 + test + + + + \ No newline at end of file diff --git a/code/Hadoop/hdfs-java-api/src/main/java/com/heibaiying/utils/HdfsUtils.java b/code/Hadoop/hdfs-java-api/src/main/java/com/heibaiying/utils/HdfsUtils.java new file mode 100644 index 0000000..16f9fea --- /dev/null +++ b/code/Hadoop/hdfs-java-api/src/main/java/com/heibaiying/utils/HdfsUtils.java @@ -0,0 +1,180 @@ +package com.heibaiying.utils; + +import org.apache.hadoop.conf.Configuration; +import org.apache.hadoop.fs.*; + +import java.io.BufferedReader; +import java.io.IOException; +import java.io.InputStream; +import java.io.InputStreamReader; +import java.net.URI; +import java.net.URISyntaxException; + +/** + * HDFS 工具类 + */ +public class HdfsUtils { + + + private static final String HDFS_PATH = "hdfs://192.168.0.107:8020"; + private static final String HDFS_USER = "root"; + private static FileSystem fileSystem; + + static { + + try { + Configuration configuration = new Configuration(); + configuration.set("dfs.replication", "1"); + fileSystem = FileSystem.get(new URI(HDFS_PATH), configuration, HDFS_USER); + } catch (IOException e) { + e.printStackTrace(); + } catch (InterruptedException e) { + e.printStackTrace(); + } catch (URISyntaxException e) { + e.printStackTrace(); + } + } + + + public static FileSystem getFileSystem() { + return fileSystem; + } + + /** + * 创建目录 支持递归创建 + * + * @param path 路径地址 + * @return 创建是否成功 + */ + public static boolean mkdir(String path) throws Exception { + return fileSystem.mkdirs(new Path(path)); + } + + /** + * 查看文件内容 + * + * @param path 路径地址 + * @return 返回文件内容字符串 + */ + public static String text(String path, String encode) throws Exception { + FSDataInputStream inputStream = fileSystem.open(new Path(path)); + return inputStreamToString(inputStream, encode); + } + + + /** + * 创建文件并写入内容 + * + * @param path 路径地址 + * @param context 文件内容 + */ + public void createAndWrite(String path, String context) throws Exception { + FSDataOutputStream out = fileSystem.create(new Path(path)); + out.writeUTF(context); + out.flush(); + out.close(); + } + + /** + * 文件重命名 + * + * @param oldPath 旧文件路径 + * @param newPath 新文件路径 + * @return 重命名是否成功 + */ + public boolean rename(String oldPath, String newPath) throws Exception { + return fileSystem.rename(new Path(oldPath), new Path(newPath)); + + } + + + /** + * 拷贝文件到HDFS + * + * @param localPath 本地文件路径 + * @param hdfsPath 存储到hdfs上的路径 + */ + public void copyFromLocalFile(String localPath, String hdfsPath) throws Exception { + fileSystem.copyFromLocalFile(new Path(localPath), new Path(hdfsPath)); + } + + + /** + * 从HDFS下载文件 + * + * @param hdfsPath 文件在hdfs上的路径 + * @param localPath 存储到本地的路径 + */ + public void copyToLocalFile(String hdfsPath, String localPath) throws Exception { + fileSystem.copyToLocalFile(new Path(hdfsPath), new Path(localPath)); + } + + + /** + * 查询给定路径中文件/目录的状态 + * + * @param path 目录路径 + * @return 文件信息的数组 + */ + public FileStatus[] listFiles(String path) throws Exception { + return fileSystem.listStatus(new Path(path)); + } + + + /** + * 查询给定路径中文件的状态和块位置 + * + * @param path 路径可以是目录路径也可以是文件路径 + * @return 文件信息的数组 + */ + public RemoteIterator listFilesRecursive(String path, boolean recursive) throws Exception { + return fileSystem.listFiles(new Path(path), recursive); + } + + + /** + * 查看文件块信息 + * + * @param path 文件路径 + * @return 块信息数组 + */ + public BlockLocation[] getFileBlockLocations(String path) throws Exception { + FileStatus fileStatus = fileSystem.getFileStatus(new Path(path)); + return fileSystem.getFileBlockLocations(fileStatus, 0, fileStatus.getLen()); + } + + /** + * 删除文件 + * + * @param path 文件路径 + * @return 删除是否成功 + */ + public boolean delete(String path) throws Exception { + return fileSystem.delete(new Path(path), true); + } + + + /** + * 把输入流转换为指定字符 + * + * @param inputStream 输入流 + * @param encode 指定编码类型 + */ + private static String inputStreamToString(InputStream inputStream, String encode) { + try { + if (encode == null || ("".equals(encode))) { + encode = "utf-8"; + } + BufferedReader reader = new BufferedReader(new InputStreamReader(inputStream, encode)); + StringBuilder builder = new StringBuilder(); + String str = ""; + while ((str = reader.readLine()) != null) { + builder.append(str).append("\n"); + } + return builder.toString(); + } catch (IOException e) { + e.printStackTrace(); + } + return null; + } +} diff --git a/pictures/hadoop-combiner.png b/pictures/hadoop-combiner.png new file mode 100644 index 0000000000000000000000000000000000000000..e75c8b373978cd2829664b630ae9452d63586912 GIT binary patch literal 14772 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 JmuuQa{XZAS8xsHk literal 0 HcmV?d00001 diff --git a/pictures/hadoop-wordcountapp.png b/pictures/hadoop-wordcountapp.png new file mode 100644 index 0000000000000000000000000000000000000000..3bf6b951fdad9f886c51726ae39f363718f37279 GIT binary patch literal 25459 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 Vw)e#O8QQd8Q%zU3RM|HCe*nwioCg2^ literal 0 HcmV?d00001 diff --git a/pictures/hadoop-wordcountcombinerpartition.png b/pictures/hadoop-wordcountcombinerpartition.png new file mode 100644 index 0000000000000000000000000000000000000000..531564123a8e89ffe8ecd124aadd56d27cfba0f8 GIT binary patch literal 51673 zcmeFZcT`i|+V)Eam8PhGGzA3(r79>O5fKojN|zE40hQi+LQxO_QIIAjDoBS=qzFjp z2q;l{5dwtJTLKB`Ik7x@KYPFD{k}cU_|AL&Ib$G>u|gJMt~KYp?%#FYE8f^pm+Rn( zgA5D|TzWTe++ko~$!B0-yv)HyKN9C8uT1~%fcH&nKL!TwuAl!H(`2}X=m!t`Yg_r7 zdb#)qIr=&?n0h|+cJ%Xiw&Ne1VPH7Ppm#&lEI4Q56QFo^@bxl*a)G~IaHUm#MRDHw z3CVW$fU0$WyO-4j=7Nj3-<}V?;le<}H_$7TtPJ++~jBVA16L z=a&y7HQVjbwZ9$FROh}ZsQvc?ww$jM#W|u+{^Ltl$5Zi{R_v(``5R{m0jD1^@$FoX zw>YzOTm|Bd`4(m8p8HM4A}iixLsJ(_(z~cRWR2%~bf7p^Sd8nE{@U?7;Mc z_b(|w5HzKT&47M?AnSt`I;>XQ=dIvn1Glw)$ZNPn92)btL<_OahwyTu4{?9m$ZZGq zRy8nNrL&d+V!%=A6l=hsSJe&gC^APh{x!aqs+G*8j|Kaa4*xpk{f`wMp|%#4KOEF+ zOHc2e?6!Qp=D<5t_N{_Q=v&JuGhm9)f^+YzGP^H!aBIjZPWl4m)hDm*5U>^3Wf%?` z;~UQBPC#|2c17S3Ir}7=g0=VSynIJy+v9H8wuG5r!Q<)McfGT$Ck6Mxc`I-1GwYKp zr!ALHmqAt~j{F*D{)KwU{L;B2*&h=q;@0Mh6CI+kh%Ck{8A6HG-EB1vT*upj{V>sm zp&%>DosYgHP7{0^4#_+Wh*0G~HzE@`)4Sz)2|0UrbTeago0-H=1sN0}G~^{Y(0mTZ zXYN$_M0K}4qpaLdnq3JjJmzWFx;5$e=u8vOagH9pVBq^**s%$YN|BRQc8Q-q{2CJ5 z$h)Z~wy`_+0|V~h5&{EJh8#wiALDh;mi4=U;mh0%?7OvoWtSI!w0lnVx~G*(qg|~w z+#4rN_y82&FSShac>@3%HW^ahbi^oR(*T>wnU}yKb;Qi*mq`d{d@@m z%-S2kx^Pa5I`PG3szoY6329i*0VD0u*)cXJwd&iRtU?28qMEjwc^R}rNf-I4W2upeWg>UVLSc-qo!%#fl9;vjIvv> z8ycQwAi)$Wd@Ew$G;~c&dT6`^c8kKbAcZp-gFfFJ(2?DkSqQg%zbf{6Kl#_lsVjb0 z*tr>Nf7%M?)!XJQ@Z>H3fx%}GJyC^|Ovslz9iRF1Nmn8{Y;_#ZO60-SNI^XktKGgg zSGC_R9?pE)BA?iDF``Nf6i0sYaXIia){#5800&kgGN^X-4)Ue9j&8a6kHN&19VbS^w-@T~PxbNAm0VWmeG9(G-urFR@e|Wd#rRxHG1M3&IpGbtd~cX!brtSCX>j)f3Jz50 zSuM>Q4GpsDZgaj17R=jVm<|#PAZv-x{BYrlYUStAmP*3>>6wJ08#VpJGJ`0})Jr4n z@l~m#E6ZTE>I(YQJ9%x6vpscpdBHB!Zk*@+w+2(di2;5HivIewnlx28U=R_t7z3;& z`&I>Ky9OR|4WJn-Q4;bkLAg^INpn+rv`=@Pg6hq;rzjG?=0EUd;9%lCqpH+)&-`Vg z;HkWfyNo;NYWUW+aRHpQ#%;AI9~|yv2TmvNY`oXRwg~ETRztd$eK;lE zI1$PmoxEP1S7+0dj-VO4952VEdYU}lUl~>Zf|Yp%G_?p8J%6}SE_nLl)f~Xg!A$qm z;$yHRGM}Km@W%0vHcS9q9}9EuH*SU?mh>DW%xdQkfNcTU`~wnkaC7`Mt^D2kUQ|EP zabNz#$2R3z$-OQm)gU`S({r9Trli@&;iWidr9h-e2!#h!LE2JwwHInr1X{7~&L0H0 zuZT(9Zon)gc#j6s?dAdO(%gO2d5VBJ|DGT|GH`)782$tzf- zI3}PNLW@5c#t?FXs7kqgOBp0aN!_hEO6jZ^zC}^4-EPR^I=y_g&{Zfer!QcW`ts-A z_*72scEf5#)$F7IOft?wksG~ma-vl#=G5r!H|J-24twd@L_qGj!VkxK3B21` zoIb*|G5jNiY>sItgBXVU1cO4e)7J=C!dUI$a3b0l?2eu#S`OLB0<wrpU;joLW3+)2 z=YHw8>UL)VamNg&lnzy-RSrXk=(|ZV`}WXU*3)-CM1$Qj7I?v-W9`Uy1nv2*%K<0ODa`{QoA{hOEF!?NV>l? zLhHpWt%4Eu%nY$xed4D+o#pI2tA54ZbU);EFIuISSv7%YQJp1;IWX%5`c$@~z>~bh z#?NAHLd%DjH?`lbgqYHo!y7uWYk2$9aDQ|4Wz2(ym^=~T`}V;%WfC4|j0njN@C08t z1bj#Kzdp&hv`kE^Ygg{yexp^$Ew~K5eE&+Aw{Pg&W{JoMRdW@56a_aLf;Vt!Q(N9q zM;jg9Ou$MuT~9-#!MQ|_l-5|#D&wwCC|Yx=$ayA!Vq6y`GtR?Ds3Evwu3l{;w~!M& zGPovj#4p(IJ1}h{x>VQDtom;_~PG!^> z$}Lq4oCL{7%oWx2!YE2NOaKQ^ux9hhA&}Pxs%DcT+EZfpJO;jT2a zYs6xZFrikXTyR0>)2f};d5>p{QXG6B+Bi)Lgm>#owE)v}$B!2&?~j0*W64^ikrE(q zhDr|L3{#8Lc8z%Cr$@Via_afifT-+k$emv1PG)(7?sf88N5ASwE4%NA1D;ckX1ky*K?}*>JGrVM>yUy<} zP%6)Wuh&x_=iM;p^SXkJqt--2Kz{Y&tGx)S;5#g|Qt}RcThbeu>!(Hq`wQf`pTrl$ zKQDXZPBYVZ%s2w$W%>T1^ZqNqdS}gft6{r#xIovmI`!T?>#Fht^;<38OyaS~0C%Sb z4N>Jm6q}Q~Le+Vz7*_e&qrI+7vxll=j^v+@klazVbyBRlM_{v=*d5+0!1H%$1_`Ad(! z?7Po0&doa^tK$klIKEy}wmK;Qhf7LqqSrIFR<^8R;go7gx4k`S-hUJzXorNRIW7omN<^K#=ZKCF(&$24jvR)j3VGr?_KE$mQA(SC&q_e;zVJN+%$>n{#6_BnLd6Sq$E{6n!rTdHXKGS{S#IoZoyC~nXG3Pb?8)bt<3Ue``$KR-*Ui?Ww1ucwewP7 z5Nc+%|2Ep+CGr_Lz<3epj7VQZDjHh4SX{|FuB}Twb#-^O2r;+3=UxN>$3Q?|s7sdk zO=2)^7`_ff_S!1aa1Fh902Ca6Yk3XmF_Kyxe@a6_k>TL|+YGR-?K>id79fg`A+-rp zveHB~bI!%fftoNo_tD!1BzA+>YZ?8;4Y&%fStojz~4$>l1Q6js`h}!YsFWaCrb9fCn(vm zG&7FObuqUd%SGr9!GcoQGpdaU%yzp5wD6_p8O~9;RaqEvmg4q==Gh68nJ#(wOuE2V+}}CV%R7eJ}5Uk=P4CjnZt7KCTvb++}1P4 zu<666%~?^e=Ywwy<>>cnSagyI?z4qXge#%iNb325Ca}I*cp%bov8Qa(VqL^N$Sh9- z8603_ImXyVBpoS!HvY=rdD=fN_1N9XXN{q;&ej6w54q0XeR~U_ae`@GuSVK4@VwK# z&*_%?3S@Ssn&Ui7G^Ty3fx?!TEl5qugfmnmkZegd0tDmd<9Ns@IQ`1H^!DXIsGTr2 zDh_~*TO=Un5p&x{l3}2DSm><%1hXM;vZzCtpgXULeI)Vq@${ z-iVAb@`i~yvx`a#Zp_f&2 zcfLJldcH9-{2N$9?% zM;G7qsxW*y?E<)4VA9;gdck_A6IbRQF1fShsbKPT&a4nZKJBxS5%yiJkK&%N@Umcd z+tQ%m*h}u?3-Xzsj{Kf}X77QH;LF|+`c3t`_Nu;nwbX=WWSd|#QYbVqG6t$=Ft-MSd8w>$%tb7ZD)|uAkjxC?VZcj~zapp- zJ4Lj$s?ZfLDv{O>qD>0b5sguNWEUUlyy8uVbIopIb% zHsh+&Z-hlimIFoa?t&;}^NVTl51@c)>hxI%-YJbH$j~k-#tLinaBnmcPGpQs9^EZ> znSo-wHureOu||bvB(SO3W_}Y`$pffIFm&Mx%v)K4mO{+o0mSVkEVyn~B=DnmRx4Oh zeR6U}>(Z3&Cc2J*zu`f1doDJD9k2x@k&}ABQ!@GCUnFm{c-AQPhOyQ+M;mI_Jvs-P zTr1);jKd3KzIF$`3q4>8eYP;v`NRI6cWzd3^o3`eNT^HZQTp}kIbRK6*r>{MmNpe} zB~|M>{Hbzc_q&WN2dZ8kBE3Mc<1|5Kv*?6=hXa>)-|eOzoz~jUJ4k7a%(&VGvfm%b zivGgl*is|6`>s9Dp|dA=SROpuf39L#WQoUYy1|X0Pk>Qb!%)do02u*;29t-O=v_Fa zQ@J7dwrvvLoQ#L=6yYVvqX^6QUTw*=gWyNvzoz1GHbO&GHTd$U$4IhoO67D>yPpU_ zwO1ZIO!UEMVlLy|pIA)AMN1RpUcypjGQ5td&=pio$F4(sTSWVGVf!EpLmDb9o;tr| z(g$4w94(&GHK!Hw!S3uG?{829n^VlxEpdogEX@fL&M_x2rP)G~xB|dGNUiLp#UlNj z2|ypRgQ~`*H0b+%F^Wehy_#BG%b_aGIx@E}uND|j4tdb{7~R!#M`-%tIF@M*bC<2t z(?f>1OO|q6$x`p?1^jDjuEhn{ln=I}_%)ruv|8_nZlCs|?BO~)A3J(Qy@55UM(7m% z2`BfC9dG6K)hy$zMHjyFF)6#L7KrLD0jL&Vlvn0;%H_rI#FMq;538EwV}eq*(+HDC zP>tbA1JL0Y^|jH&fa@}F8I0xITl8JD64k5<>mUZv*Z{Pm}nEBg*6F>UUcxfy51H52kqB!L#`cN~hd?5SF_ra2g zF9}n9bo_K-@OhW}t>sPT;#V|rLRn)V!NQvl_fhe0Mdt95vr@&xep!Z59EClypZfJf zgkT1p50(UX{hVgdv#g2&ccWug@gruf>9gPu zQu&#@am?KU{J}C4&wApxqfz_O2al`lq1{3q{5@rCCO!NI+E-h#LwkaaoKW?{tOX6- zxni~;yk;%)v#iLYMeOg6O~TY8o=~bgLYL=IFW6%QRF_ke-qR)7W$&Eeci+GWrog}& zMZ%FQRfa-ZE|cVQeQnj><_WHj4(|ySXf#im)ypn2_^@}Ot{ru&tufSO# zM%=@P{-BgmxGQq1};q32v97uJY0vXbLdj)#M$^ z+C}4?MFMr3y1sgUNb`C46fF`qLp}l<5SFGQjbJ^*23YASv6N#D+Np*=UwZJl=-mfO zpdEN>E}fz!lvxiaQkOr3o5L>|<9N(7m!Kv9v+}WtNhkLu53u)eHCSl!RUh;-Fo^8% zIF_1*EgHaq-(pN~;6nIq<1{Z2c}CS^kB7e)CQWlz1#KM-Af4St>@8%ZzS^E%Rok=P zpZE|_wpLU_l_q*2i4gt0kIMDi8W!semD$Y??F142WG__>lQi%lWLyuDIhW`x4NeQ+ zOrnW19BxePkXPr*dul}#R!^}f2FV@C(T;1p#v&;$_v$d5x_P?l=1n=h>4XA@Gq42a z497)huxXkG-^+}Qt6#b;*NQk!pg(fv8)KgNTb*u636~jmJadLNQ;J*@Q%h z>g1I>W}EG6wW_CBll%mqxH|LGbTDhnc@C^_q-(&ywgbRO$M$mvUfn6i$yze-YMB!& zRv|Un@;>q%=KHtg_}iZ$i#AqqlX_EmM-RIe!TJWyS{d%A;?3cY2IDX$6NTQq&*OE^YwOB6dXU|9r8!%NlT5I%(a(?NxH5Sslc zElXqEEkhe;`rPBfX2f2;IzY0S|isQS&We z_u2@{aU-msIj!P3P$YB57nO@vdcE1{9_}HpVKNCs!ICJ=hIIN0G+4AG^tEg&S9=|K zqgget{|HwIXe>M zw3(PT3gH*yb$Nq&c%Ek5{B5E91qqfv)EYn!HI{>AbPmbSpL*pn%XH)KE>Qvf_3cCR zaN--0sNZ(Z@9#6-wu0SfI^@5w@+=J9PJP|R(xNokiLU>*xXrTOasN%P02U;#O)^A@bd{-mWiE-6=F9ZEm)^#8hc5ab^Ukqsp zguW2B>pR0E1GgGeew*=eDeZ40WMTbHgv(L7S)~vi*7Q!?huf-_ljj9g8PgG#=z10K zlgWGR(;}mnQ_r<2C-I1tVY#ayDfsSHm6%_Ipmp)0p&Szj0J^@lE{M-*?|aIzfyU=XU!V?|#&5mdVBeWv22ZZii=5P6r>Jp|EH? z<~y&@xTwz^7R@CzDA{$Hw0|wgdHf(eM(T3|e@oJG)nSK*oVkx#GD(T}9GQ7n6Z}_=8u@kW1m&FqBKEz0OV4);=yd zqOV}`;CgOM$kI389@c_yIfnPpUaOyd|9(EzDLU58W4Bs3qhb0;DNaaV;flM2&3s4` zb5AzDyrkijMgw**{O(nrst?P0M7e8U@eFOiUM!C+JA?ewMM>D#3AUUNUr&pz*lXa} zZf*guL9bz(t32`sn|!gsLQLyHUq3}tIS~q7Hb;VXna;B>#})AXZC3nH128W$;9KqdoM{#8nij?d^3r-JBK@ezM+B5ILznsS79st=Mi)F zlZwVe#hgl~lA9u&*MLXzcoxbQl``g$*3*`q%%xK!XTy4&CAs8Mazr3X zheO^b24{(+EMFHMKAQre3l>MQ?XwWxWz@Hc){2#Vfm1{+;VFX*UBx}|c13J;;kLB9 zTlA!1Y9%C`J8%GBOXG z{OL0oMRA&CTcReoMzlyt4A!9C_Qakz-AHcuUoIf7MhNaXCo2Koy&Y>=AR9=k8C6$ieu_PlZxDabUwg!`zjqc&mB8@^=J^)IjXKVIdQ0^a&)*K40qBdSLqq17 zvid!uksZxs3%uklP3F%K`m%YUurFh~?}R{Z#fH)@P_DBJY|X6C%)UE*I_54#cNTQv zb5R;Bigsya+exf#D?+QuS+4n$WJOHwSTYms<#H)D{|o_#APJmjbp6rUQ6oQd#hd50 z!%-CMH!zDK65GSW-$f_KwyD~MD7GDUazB_Jc)Sp53NG7IN#e=HtWULaN~qXZe7L(! zcZqEg6&Ri-YW@VweBtLR&2Mzw+XAfr_7UL3=D%Wh!()!UM@Z7+8S6*a;R^mt=V8zV?r%WH`p2xpo7aY6FJm$_H#-~*-gm+_g{3s#g9%oNTzzxT>=ZNA_10n}#->G-?|9#b5I zNX^fp-O4j^xtUL-L+7$Jd;n!!840#rx2x@&U?SNSf}38@E_~aT_xY0Nz|P3z%JJN5 zWs-5>V}Ip(+?|!_60syy0Ib4fG1RgZu)+Ej%h*wt};>JDm$vzA;7--#GQPJFuY1KXJnV_V8ZBPinIzdF99Mv575T zbO71Zn)(aZ+_|Kezf3E|!WihFzgR7E9O+#-;t=(z`Qcda(Fm*s7Gg(&B;aYvWXpJp z>NX^D0FQX~$DR(1>K^RjgRg{dQdeEpbPuSU0>&Zv7^G4ev-u|mR=>lU8Tfb9Q}>`x zEeHW_KxJP?G2#Hv2D4i2Bg2=lF~2w8ON)8|b(wK`EbD zB$N8r1|dlwq3}zFIeM@`{-4srT|NHP#wJTbTla&Jm`^sY77YRg&||c*VVL6(MkcJ` z&Q&k%Siw9}#NLHNF%KDB$#-`Lp5CJFG9RzAyqUR%ct%mJr%9L^Yn-2TwQw^QFzRww z_&i>wJhbl`Y)CPp32uMxh3*)Yk|+7xN&ZzDK@4FneLsW?aNzeuU}CU5aCr`+bJ0$) z6R2PatArF3tpJ*FfQC6*fbk^Mlpy;C{2p`->MDV^op<7Cl*`IM>O#f%UqZDg`n^&N zhEmML6?jeBQ?0>X4#jEs)|z;Z#acsF1PtrmCfZvT*g^LIxXY}a%rFl>1IMUtrmdI? z{BnjTLYnZX--x$sW_ZXWRHi&g*>=1KH`Dt_q%A-$X!wxhEn5)MQdAAx<0ltTx_m&4 zE%tUy zSUb+ioK~_5zHLH)E)u36il{a9Dw8wVo>8@&0Zs(z-ECEhG)1F|NBFWK`P~}Ki&0HY za3+F+Z)NH6%32>2gzrJdE5%|l55GIp+*CE_Y*ZtyJ|8z}M^;{Ih>uA105PxoE5Zd` zG%`yUO$UIp)MN6D=Y}O@86q_~l_;h|)L7l+=O&e4lRC)Sax8ss;A27aK7a(;2gLC5 z&7yUlEaDQIR7SIA=lnPK)VL<6b+}bxN1D@0?}B5d_Y5&RM;qQ9WtTMcx_+hkqXgLW znfxaMqeV}f?^VeeFQFUCpXfWl*tWv;AeC452YM6kivUb~ZN5FUGcJI-BeJF|)#Z+~ zREm`q0WSbc^6BDZ=qdbt|FYSS!lIkBy?Qv?rjd`+izeDg%LRj8a9u>U{XIY$ZRjIc z%?FzCY~%ftbPxRN^vH=K=v%Q2$F0C-Y1)uB#TfhDvQkVEtA|~uSu6NDF+pVQ8c7pgVGxdQruWVo7ayyXWnew%GJnFd^R>MRc%3-&;0X*}tilW<5xJ``#mz1>HT*glW{ts_#3@@|K-1 z*eB2`{JkHWT%TnF!g4(M2tEaC8b$>FrJ{#< zK7DcA4_%c(ISCJ`6>i5jRg}kqY{faXf-kwh8A6PJ&3jzMQ-dbXLYi<;8^FQc{9_D7 zBP#&aYT!7wbvL>mKggzCs zBdbJhy+!jL#h4@+RZ?`!iUDab zf5_pK{#-y~&wYpP5YGCli9%r5sR%k{P+rw6WGG$VD-r zSUQK(%lx#(T)I4}^K7PD{@4TSdZoaxL?5=^^@$$OPmf-=#r!?|2z*YD5V4Sw6K-}r zj!Qapen?rvI$xzJ_u&(p3}_g=K-8rjO`bsJ*Le z{1(0Aui&3Gq(WA35NTRD2B5yXFHTF_PYw~vB+2Dr(RqoN2YR62!AH|ymi){_lA#ZY z2Px0i@7j7j2h;7<98&VG_gCWg*l_#P@A;Fj-gpg393EK(e>^W|nFe~Y3DqI^2tK(& z$|D5z_z@wb#-Y7{HRv614893lCPP|s4;>S|M2W%SFKi?H7lQ0sPrN0N(jJBTZZ3a~ zMq8yZJz+oimk9R8Gf`SF|3wDNF()hzwEY(uyz-X}z8jY&wmx6Hv9Sfmr%pbHb^JaKCS(VIb8~xO@ zGpU#4RY|_?OECM`cv=lxCL8w>RFAEWnA}3S`@%>D%uI7DM)Yb#&X8jL2kZk$hIiT3 zD#Tc+5^(c%-P@Q=*uH`l(_mxV6KBUJzd6zLwzK_UEa$+_v>Fy0LwB-R#kiudr{h(A zt6us>hfJ!E<75y4$7EOP{&AwuXEA8$9Ym#&gsc6O2s1HBk7+k~bj#%fK zNEq@;tsI60Ji{*k20lLQD^Pix`)anMyUJDb8b0!D3>p@2rIGc6Zl8HzW>i(&xmWLA zMi^ivrcP<_EmVDK-*p0I4+@l1!GqcOZwY#c2RLIfmEB(2zGxvr%I1N8i zGu}K(h)K3aM32IG_OO?8Wa>f~(_>tSXv@UvuKkU$%o^IrzSvi?B_>=^>%=JVtGtbQ zFLWJNFGy>?yZxFAcW5Ihi@JK9+HeilnQ%BPT7-oo=hWrax326@m!+F4#csXzDgs?h zmjel60n8^SkYv6`8N{sTM!r=O>@ENns0%zRSi|KE?$cLvwLKx=5s+R2Z&%qfT2)l5 zO_vs>8*1oHs^q~d*;Y|H-Hq!I~m1PlfL=zzEe-@aM|FERK_EJf{+_fjX`Ch zzcic~@c5-x_1D$^FxOTY>Au@fwX3DE+%1#cj}%&=Yq+KlfWv%77JI`7vN|$S9yRXC zH)IGL9W=XWfarCvxiRON(isAb+LYx7_5#vS@KXp|cPaDKi=kBLUD}~Gy2tdcz2yqM zZeTmKF=J4xQMgjpP)ggFqSkpj|RL%?5S$5ku zQZWVGYCJ$t6^1Y{2!9!F{15eRxcMs`^58(j`o7Gys~Sx>zvz=q;=i?Rx+QKs{M0@@ zrrDGFw}@nOfJ;DvCh;!X>ncS^@&c@es*P8pwg0{0JZB+e4%+RjN2oMGX&`y{ zP4o2*Gn&Q5cr`^VD;nd7)~LNJ^I#!9^8y9S<%d7Jp(He$qDrEJH;_n_>_eH%F2hJv!=Q~4hb?#QawmvqiRV#&^%Ktb9O)b#wH z)$Hda`;*-CwiBX9hRXsN#y|Zqkb8X2hmZsesfl~NY`-BZy79p z%_aNJFL^8S1*O2#gH*?!9RrFzp(J7@zT6zp72dGfRu*ED?R*w5Fucbo$%20y%F#0V z4EhSBBsT#nUjtmCc%74`rKy9} zDx7rpCt_(s*S>>`H(bvHo#_n;!1r|DI*PeB9%x3{zu@2sOmBjUAu`(V2BK^10{@Y^ zt?B)nx(!%BTq7v!T>5>F$VTBFE}N@xD9np^?cMZrEeLm>|@_RB|~cAQOD5iyw5ZB?;OSCB!H71p$407&ReVa|!Nf`4Q=;SS+ zG0NMVWYDv$ky7y_AUR2-#!-=wET(NDki z7pp}b;Bge_nYVyh`NkXX9un8IJz`E$@Bk*>4t_}fHXs}b#d~sYK8Xh zT{US)GhYTXWzgg7_M={dU1ej4iB@xT*5^eL<^G~dip*wFwpazj<@Y+Y@9~tTE!c_G z-cy~t+NJhQ+zKxrBJ&P|JA+Y8(uL#*aTaxy4QYkdJ_WDb|INSC-__kU z^1p!ILqOvJV-#exJB%?f;LDqTL%nauJTh*PV81zU738=u)JdorTl$cRXV9_%XaS?+ zhc=KZ_$rZ}>fQjziXZ-+qMXM6YtxPh#Z*3ToS1p-K^r|0$q==9Z=~cQtO=~9dr4!J zc;yrDa2NJ}Ub+rW(W?U0vfJVno$4v{hL`k`ZRghNv-EI@G20B;`n0-Sin<)EgnD7h zQtGFDJ-lBGoVZ00np{53Geb2+LCmRfu2lO)7>26g#q3AxuGN@LJ?uJ(zeG&#P*hBV zii6W=mkfY!fj)K#>tE5^c4NtYG#}AQYrxbCctXM6LUr8D-Bh2~suZ~l6smLxT16Q> z3y{s1cSR`C27?W0eqxrdTMa4ZYhJv-22g-ABF6wem0t+{CJIAQvJJ_V1C|mO!LU0? zMol1l$FLX&b^27CkGj5@W>Sy52NMu(y#|1Whu7m#Tk4diBlap3n<9N0exO~P;49xf zmWRBs>s)~eX;O4->g?lJ^+5Wz40^a1jX9!vLob(pw4G>gZ0IStP7RTUUAi1r=?rlQ zCD$ydKDl$T4q5{0y3oFJpSj(&MmFvb$`t_wzRs}buFL}Pd3iUa9uL1~NITT|E0J1T zS>r0KRa64vT#kU_u$?tThiHH&NZP(XcXX<>bJ%D2nVb!0t2c_)1W)551Kqh9OFcrB`Kd zg8^;pJdV{mx3@Wx+=J8)k-!1I_4L)oQ3R~zgI=HV#hI<4?ISO(>m-uftf8EDusZ0DBaMc=4R zda^o6D(^dCiZc9lB>9Nv^;T{=gQRDvFK#Wd;(SB*b{X1O)#0ZpGVjbmGxWYG+le?T zhTe`cSpM2{5sDQ)3q1DzFl-mINu(S!PEKwD(Ji~W&-yxNfJv#SG>R(lGsTFd3Vk}Z zs)6r36Mw!556&~!dgk7XRtvI?5iM4409p<<`7cD)FFWrR^$P}hai#Kw{3z@gDZm}v zkr^!RlAzgYf9w??VZVA6`VIZR0wm1ISIv$mMcgTE-uQs(faWjXA#_ppK7EM!pGthaJR|8>j`!+c71B1 zm1I@H+_;7E3_YbEKj1~~PrW*(zJI4EG;gQcOZkBV)14g*zZ#ulD^9;kAsd{)g@!X8K zk`E$v@U4Xg6PUq9w)?J-RZ;5ILHXTwvonypR16NvM`P=6P$)&4jKk?J5$gvdHE5IO z(*xVV`MSPpS~J;e`d;2mfyCU{4G)PpA+5C;qHzVR-6K>gBsj?v>9DXT`KmVC2czf@{q2F`Z?Gez4A}VpQ_3e#Okp7fqpU1_bfKxV9`_sGF8(H9`dKq{E z3v|8rC}H{fe+OToD>~Ks#`}=h4ewX+(0Z@o+Z#m~plX9=I!^2$NwBY|AGoVr*R$%j z((9brJX6^Z^QVW`BKFeOB-&sH74UX4#!`~NsBx_4vqYz_y4Qb zf2!61k|VDoC5ipqTAh5)nU;%`pW+po(RxRt=hP=BVqWod|D%;&dW7k*Wha~TZ)z#2 z7!sF+DRHAUVe{nycNx8JB~kPFNC7k8OGC-@*7#>;pZrDci4XT&JOs@(nWf65Z z$pHed_jsBJ0w0o_#l#djwiS`vWqXH1)8_xm0`OQ~5F5o8OfRpYg*18XuBVy=MgQsX znW@u0^|V=Q6x8^`A@KrRI;&e1Lr-=Gf7|uUwsr5MzP4w(0`87*BV^eSG(B0f<*TC? zJKF1KH;^r`Rh6i~xXn5->Z5dmm`#NCwIIWX0X>-BZF;_(Th>+%VpDYW%MGG(E*SP6OLG)qy!_RM4>rgG_c!G0 zo>R{Wz}+JBPhND8Xbg;O3shJe`2d`O<>sG&_!DiN$k%yq?B8gL8j!~nJT2hYaTH+h zvp(G-pF$?@>j#^h{pd&}V(io?2`sYt-}nx@*@2HASQVje>E#XNFI?e!$uByr{`iD5 zyzxuHymm@0@+XXaby%)e3uF7#>4Y|B_ZH>i22upYx6mSdV!GiNeg4w9y;k#P+<%E6 z+|>AY@oIn?y8yFw5XbluMX`s>I5B{0qK8RBSKgrD+Nx8&DU%`kHMzLzSx zSr(Y|jZC@qvkC}_mt{kWy?OG}4BhPRWZDLPy?%hrlp3_K~x8Oj19>~sT597MPwG}uN zZS-Xo?D#A4<}hZCOLSVfI7+_-FHc->=_|ePiE26yeno;@$vH^tMzQ&YB|O9g1lO?X z(4oaw^7w!}8aT%As~@HBjRoyx1Mm>$Aj!cF=sY5zO@QXn4GOk_H?1IfF-Y-T{;8_G(`dGddx-|^ zL&+U9qa+m+zJ47uN>_nqKdS|h>^JjX zIeNJ}l9zZeo$rf9QIdb%?3tJ|kpp|>hhwGG+HjxjV`Oi^44MpSW9P;ozxvgH-6C&b z9qunTz0Kj%ZLy@Tb^!)Fy-VE~DpP(6K)yp*pPn4GpLXKdn&Z5h>aSBg>zO3*u`bQwhiMwedT{`pi43jpBTFWY>H{=AIW ztG)Er_alhfZO4A9DFS?P7udJk$NA6-{ojGIT`{^2Px-5T0WW`>zYPos_M`y;b_=TcB-$83|A%q#v{V!b`S3wN&rK zRhnf5jdf1zvgUV(*__UgcVbv^TZPtQrhB6{qu{_zumx!JD@i<)Mxe@(=FG~-9d_A;*+FMy>j64*ar$@BBQATd6 zlN0(_#X~{S@m#L;rJ~Qk^()4$(zhf)%cyBA>DU`l`mm7MdgwRSoBNXaDbSuiOg|`B zZjm0zp9nspH8FkQcvQmoV)n3x!E#T9n?M94eX*vD*p4$}pU5Dara`4aroNJ*Yl_(nF@33^w23%Prcb|dnO^83>?Q!|WO z=75uEVsFTrNjXe|F0|HlGhe1BU!G`~^-$)tjXlOJ_&)+;3;z$n*fk;{DG|uA(EeRx zvt=!oQL+V@B-*#h8Q@jwhGdIzD?~i}Jge;6s8BFlVKzz>`cW8^5;wl0%>6r8ASm_U z=L(QQw_a^Z*=X3GUdP9$Og}JOj~0)3AO4>t3;sVBw{h^g9xp8OOrdVn^$PC*#tz+Mr;|>3;{T2|u5e6x6;Z;zo$|_GD&= zo;k{QLY2?ER;+eqkw|%1a}4LToL$|Ac8jYdM)me~Y94b~>@` zl4y6P*s#X;My>T8mYjQXL^TMi@GE2=9R$o=qpjd1IHH4ZJjfRP6G0G|qwA1G5zGHg z5cl>wPXOojLKym__NU`LjgK=5#X_?>x3EK&{k@k9g7gu50XEiLl*StZu{)0@uD$=2 zVTIq2+^#aw2-u|Kw4+P9G7N?#-@*R(V3j1O4$s-}uq49;gCsl_&L=R%H1qt2J2ekwq63yPY1@@eR|`y;vZk6v}2{$Qsd z4-<}sE#o?|zq8kWN#3geYD~wM?vU+2NSZC3XoHnesrhZNelB;Rc3?#tG`?mrm4OP79Hf%nlNqP(nt3(3g;{Fd#6K6xU zP9I+kG7@RhaRr)sLQg`N+5%RBH=N>XYW%Rbn8#nX$q=tJm|;=6mwbXTz8~ia8D5=N zW`df}@g-dyQc+NO>h)n}W#{wTpWJp0Z7c7!gs0-JexOy|fdJ=GJ@PAc#o#8Aqb{bI zvl}$^%ZWPqfv5Ufo<98hVkOteC+n?V#gB$2kSHBB05Nxkoa}0YWg(5rJ=zq7fzqMR zHG1?POFN$kqW_l?vdJNJI~-4Jc0IMMK|t2?d2=H|S>5j?!iv1}e4}m5o8ob*%862X zE1t0t8>mZ|wSJeQ-E2PBW;VO&ZU=nak&5oaO|xE!BZIec>RThWobS4o=LNdJ!mbC= zHt!-FoJkgK;5y=tU84tA>XT&16pulssop$+@4cqhq=L_KaNM5$50XgYVQ;BL? zyjNglV$pW}qD9D_AjhhMsjrPr~* z5u%ae#*?_GZ7sWum1r7wra&@x$yGXqLPTjIEzgIg&RJ3-JBF zvqQ@EpF9Nu{~b@kgZ~&$ffK6q_Z588{^+i&I@Fc(VGex`M1ADnpj^aSEBW#iH9I1* zjeXIf5wk^viS)Dhw`U)( zb}>zsk$ZReZ{0o@r#An8Y@+oK^cDjGD83i8Dc*Y~SiabQWE}36#W?-$Lc5G4zl2-c z-|IL{!1^4BLci;IgYzc8pdnV_&i6xUQ8UPQ zHxL|d-tB=K>W13ywy=6O5L-H@N)O>62X&ybXXYnM!7 z&fO-0WT~QUrtwJZqUj>AO-|IhObMGX;oO5mv6-vO&D*Dx5Rt)@y-h0g`Qqi^BtJ9v zA?BxWLwC+R!&H0*{Dm-(rFMLXdz65y)ks`%c^%J}CQI%k#Fioxchqjzgc*fJXduS# zFmLg{5*L@2h+Bi#y9!taa)iePJIsI~x!F@rCL-aB^5(s`Ps_mwUtQiVO} zeH-LPlIa5OhF{=_m}Wj~ls%%fTXa0lw4b3m)HAm(doJDsouM;un0U)mR-cYq5MgJhBm)J?M$d`xbmH(C` z0}7+O66(hfOyTYeJRd8s@$(?s?)EZePd`4ldy7VI&_yZtK6)NX)9kCj-+9W!N`IHm zM5rz|i~cw41b$1-+W7j`6xqgl(V{v=Bax3^sp*V--ayT8)7)`~()#coI(k^N<9mc5?q z(0z!rP9@ICE552jNuSr_iWvHF_tQY_Uqr7+*oXK#k7ZR(-1(3RF~RV$ZGYj?ZBRsP zgg{?i+K}ezAc2mw*7EMVIrQ6=iv?V{$Pa$9RKVCkcpzh;76lj^p3)&^ z==X$TzG_sb`CX;7L?vk=vS@{^%=JE82+edHGUs8vit!q5t~@&Ea*jbIXm zCScOYa!aPq9X^b$Fvrv25|oH~=Udb#m%wUKJz;Z4j-NKX>b(>SaKok9S%@Gy`YP2$ zl>Gwz$PVDj-GUHZQUSgYUBF;p^uTAIq0hPd`~vN|a%sD++@8|08nMY8K<^=6AK7?{ z8g8d?Jh9FNu(T#uvFFvHTf!p`VB6e8=gG<9I_T*H(;rlrA%0y5bmVws(xllmP?{02iR#R>zjc8E8L2#ua#7JL=8aGTM*^v zzk;gcZF=r)gr=-Xm_yiI=B-r{8Y)YOO@A_KX}>dSa{74H)#=1j)2EcwckG7Rkz-r7 zOuH@THO)A1!@fQ-2!Y~o5u8KdrJ-%;Rwdw-gotb5E2$A{C(jRN!3B3BwCsx`UeAnx zU;Ij7?Ob42Y5PHM((x?aceR@la!kJM5^NORBM5rX~Mcpif-j*-t(+V9}+Vj+&C8e;SB*@_OOco3RacDmy6R=cxx}TA%wQ z;xXHy#cLBzYUEIjSW_FUEwcAI&Xh)rX>ee)zgIa2=`7bfa%eQHRiwjSC! zb!w2Nt>5IfGiKsPr%g?-H*mUk5%8P7A+a; zcd^y)MvrH06go294l!}Bn6ll_6_(P-51;%U2Bi?UaV>hGxSL@w31>M2sF@nkppsI=`T7?w_@LMw0i13 z{RXRsk1zm8J+J53xZDnGFi#?Z>q5(Rsj4n8whtQg4dN3oP3H5}Zfak9s8sf{`a#-@ zQjr;SG^1w|WBrjNCl0;45%yE5F0WUox!_mj_GIXhXGeOCTTsJ@&un9ohtjrSSCD6x zncBv`!15YE63z9{nTGG(Z6hWEWM2Uu0cNl0lqi`9cy&#{l|hd7(#ysid3xD>Z931G zre@5@g9dZU78VG>=GD+iK9N(HTzi6XD9VwFy1CBO$RJ{~{G>CGc69#)adE~ni=z2g z-&l$(Z5%&+l2Cjf(o5d&-@YN69oTu&@rs12MgU3!>|w$;dF~nt-|2O9=%fE zidcXmP9}+KukVDacEK}^8=I@1M|Q(uc-ol-N1K2BE7U-ziy`%+m~mlrcqFm*jQEi1shYKeYK(TZEM79 z5c!I;e0c+m;Cksxa4ionXN8TkD3im ziV_w<-uk}sFrwFxZk_ef@C?$MiM@{8i}yX3MK)^NXxan?9Q|~WTC$lX%pT{wt?1K$ zR_TLh=Dro?>5NBaAEOWdTy1>sgT7;e#Z9PI>x-@$ph66RcwTPEScVf5l@LRSsR`wCOe$4LHg-*oz%!&41L_9B+}ke*44?R0pbIvsoo z3G`C8V*L#83pCZGX1n*kyZ(nF8&H-qrJZDR99luUTdoO@E<)z7_8c2SnQW=Vp#-ba zJQtvSq|E8fkS%lu^28#qmBVvgj1g!QbJc$5la&b*dkyDAUD{Xp*M4X)aEgog>Bv5= z;vYl%zFw@8m%(Hd@#~{9Fhq*wldpTf{7`+J%{Vs0^5emlCkyi?2}qnp|4E!h(@}Fs zQ_&~DRvLhKvJiJfr^=Sx}^u*ENR#)N^b?E#=l6(D?>0O31N zTNnjGXC`@GO?SY@;)eI^LAn`s)gEF?YD)NOn`r(UBe3+HjZ4wLQ!4Hvmh{~H8UH~h8AP=H1`zri9pP{p(E2+qpj)pI{wL7Uxr`D zUE6Xo{gKDrrFUzWuAzx?IT`>Pnf^FlcAo(Xk;K630gK-)9X<(qk- zfqzYp%H|^a3NS+)bx-9?6@R6}zpv$i%;?c5+WMw`na$C18wQ1tsL70EQ>d>!e9WPW zAurf7MjwmTGQFy+C6FY(vN;+g=GaxHKRfyQV&1+-bA(uFP689b`T$ z0`jNtd)Hnf?X^sqmjO2~CY&z240~^dtr_lt-Ad=68}&k-bm0gL18MjOKKo!e6OsA} zRV0bpPVIPgZw`=gs=9Cc+DGBt^Aqu=?}NGd(7X&+&p4#z{;mXOs_{MMLTumzT3em= z07=j=6FML}9hta)Tl^6ssrQ~jbA4YEWqcSd8IxDeeUJR~6Sj3=s+c&9 zTSGor1nj&L+0b6f!C1EX9Nr!DMvcT@u-Con=hH89WjT-k--C6F3;#E;?jul+nC5Fk z{wv!5HQFtAcr`gd%17j?*(kPRt`B!Idrs#<^l%%>NQ*11UrTEr#T;=q*)Xt9@ofX# z5MK9rq=73v@E&B9N%J5Y%QPBMRC7Q!ul_=|d*4dE%7d+Myjl4e)K>rYzPno8>dq@C zMp%of5m>-$DOcIadS7}KBmL{ro50}f%>n%_hQzJGF}dOj*178GrDl-Q4~d9Hzz(qi z*dZk5F;hDmY}fC=l(_uW3c{qXNx(-qDp>P&{I(FP!$*-h#Mm#)eJK<>qiMk8Dk6Ss-JUD5yQ-!PCM9a~(rta{UQ5BS51~lOTO5 zM+`DTf=F*L4FI1ny%-GMn-2JVNj5lZr3IE{(Z}NArCKKQZV`sUwxClMul&w*?%E>K zt`GN1u8`^DyKM~4mXWlsH}|N;+0gR~KgPpi6$dFVo?$;H`{j6j^)rpSN*Nd_#jlzA z`yl#W_|Y;O*`~|+(hakX*j!}qgcuF=Pu@y|{;W3L$#apTDpJNBFku`(bAE z0Q1q6NV0}-ET}PG({_jTY72Tfo+dbLKf;(lv>Q{S7t7-IFF_wbCgz%6Gb?J_gcinA zYa}q9RQ0!hX9l|55iCdDs#=%6s$3U882mYWB0b#Dvj4Jr*kEZq0x~}6ul+-olb=m4 z^!dt*!mAlGz3(yKnR30TWVku)&uRxGe1`rPaW7d|bL}wrPIJ^0p)g~{Qz@EyRwSae zFQp7H{SxghAU^~Fn0t%PVpwdoTf~rY|IPJb=n9aQcDV4EaJp5|H_U0g_j6wM67u-e z*p*qm`Ut<>pxQ^q1JC?|wOSNJNCI*%4E2doDj3atH;pPdU*Z{Iu%pN;I30Wg*+ejj z!M$LZZ28s=cuuHy3!AKY^A0X58vlm@UyfH(<&#UzQU&`9KI-ME@GX;*a4lZ9r3 z7E{uv@qCJEE{@8HufF}!$6y!dIsonn?303$_fAN)C~r+85{#AX-r5xegw@gk{B!e! zcC0MQc;nNT^KW&_DoJ{Uj>OuLIi` z-U&@XSg@C4@maK+;-n<8l&2<2`vVvp}9Vj0PBww#{@Cjz`^rFcYGK`2XL0c(Nf8Q#iU6&MOtv11De>wOF%JgyB z3;VO|EBs1J?zyA{PiFKidnUbP_u|5e}{qr=TzcmiW^{% zFs+*sy-9v${fu=FtwX!%ocB@AOF?Qn%^IcrrtSaw6MMUbP6NX;LZoTf1q_I>Q1x$_ zwNJa5wQ^e@iL;1d&G!a1Gu>x*;jUP8TpIY^xJt%v9PI@al<3`5Uh}vp{r-*o5h+P-0fmG5ZQ%N& zqte!+b!;r%%r6_6+uW}pq1I^Myo^B6540tBt;>7-9X|7IoIge#RM`vsN*ESo3hg<^ zMFIMznetzFdlyx|ZL6sL+}3KT7MlJdnoZ%G*G-JM3g_azz8sA&Z%?j%)^q|-HIX)! z_5w^89@BH_F8gb9@pUNruG~AugJ4_FJ+v{L+HLi}EFMK{9j5y)q53v`w4z>$bG=BL z2h@ka0%`qno1xyE(>slWdf5a^O7E0+b;GpnbcxL{WOxfLc} zA}J>_izN+Tvh2287K!vQGps_V&T?9wzO=}0!+*sFVx52cn&-BsDPdH&`kj~5CAGo% za_*1mGa3>Sp3tiwTh7K({dxr4jsojHVH0}AJIl&R<_e=N>nZ(_OoLU;bIRpvmC3m! z=wTGs{Qb}=LLUAF{_C-}{!*0e6=+7bdwq`w-{@^Z8s<^qd(%bq4NNP;`xP&K$*SgJ zY_W?8HIo)O43^zWu>o! z@f(X*YxGXewzNlRM>7<)*=I&fnlT_EMhtJNBqbRd(Yldx9H0$N25?8KbK%9QxX-uv zD8I93kj=lL)w>iqzO+qD$@J;nc}Xlm_byXFON|-rtKa-A&gxjxCa}*v2= zOYCbef;`#jY(DC1o~3ssAxOWasmR1uuP{Y9yA2H_O!h9#r)-2b zdiYps^n7tC>V=HC*ITOPGn?3(-3y9E7FQ|PYQ8Ed+?mbX%6{f6AQ^>szRt94M)qwP za*&KtL8L^n=g6U{CA^i+xZO+m3hk zw0neH>E1*JK_7b1e9dY;jyb2|)AL1Ar-8X#m$3*rOoRA0tSHK?7ghrmQV>#AMF{Pv zg%Q)A;j+HAW8~vHnZx1fz$F0g5Hp_QwNS#mt-cUh6Q)iHk04JUuQ>4&;6+DjR}V~8 zhTPrg&odVvl+WK&3rcgQ`Q9H8xjFc>CGQp?IJnW3b+ELOCLC#V!-+3a-!I>+ZrCskm=k83VAub&gP_X4{IDS$2}aqZSJ(QpayH*EeGtvb2*PxO0ad zM@HW-xIrCAyNK)nN{R6_Tdt+~YRZS)!86Zs!E402Y3gE$;zcScNs!{YGW~>{T*;`~ zB}~0ezeiW^&X6)K1SojmpvjA@LYRpjih=wtB@j?F>6GoI<%H##;uzc(PW_cP6G zt2Yx#d}t}{{S-fO^QA09J#N8Pv&8y=kk9lfilH2vj(<8ssH^qx!2_afoB^jL)Z?To zJknGZD-qmyPkC-0Uw|sr)XE93{tWqaO^V{uyXdiGnu=?(=Jz~szHpQ~1Yl}kzD$8p zFM952Vqa*AofM}=L=FbOdrX5SF~l~}CPj&m+fV<6By}1A58vYZYC^XHhD$N*Y>Uor zKsE*i*f{Tb=FM+YT@I;#KsxO2-N@WazsmRV5;_OD8J9^t6Ms0I}&O5a=*_%`yAe|A>s-pP!&hHTcj}Nv!I=D+VLYC_al68fb z!CP&mnZUKlj{TzBmD`A6lbzz-kh*+wldsF%dho4#pQw-l*QUHukvwq@O!MZ8>8~H% zR$c=ptJqww^i`;$f2vKe9$frt`(R;=>U@{EiHsX_Ae48-FrsBhO@ZgiUZ*%@Khb^d{^+YP;pXZ-kycR_5ZCS37@|Pit7HL%ku96-k%idz`fs7wb6rO->{2 zprfdj*0`;$;XyXTh5BGHxa9g%7qTolAqREKCqD!!GPH3(DRF0Wa{~ajOS&WE{3f^Q z!nm7GzlTy)kxv+EPEoY?ub1&R>8^4JKOfKJSR+ZCA0c5MxtG z_-U5|p(CX%v>2$#09lESy=K1%A zCN*;o&#sbEGN7(?eo;{O58fp?BPDz$AnihU+|O7Ah=~)Uc-ZgnNDx!cXns($dJ3QJ zp(Q_y;hU;4@kF7E8>cV6IYLjF>7e%s`Lu%p-G}jdwSleOx&~M938OUAV{_ zbH0|%-Y|$aQg+AydQ8*vnqeHeT461p-YMQLwItY?g%KEp{2dK$7B`zg&fod-B7);r zb`G8eo(u(dhg>zC^ldIO@s+jM*x}hOU%k&`(%~m6HmzNqlmX6e|L6tr_Sb!;5mW!f zcLKy@<*eRPga!XNOMPdMLJUy875eW&L*U-^Y~#3M{_QUY^p9;e*+a|+s8AT^&@baW z389(uH|Qj{sD1sEc8wA8>Ly$6lZ_yq%LiJ&1>AW+XG@O>KKoviwtu#)is9U zn?!OGV%D;arfnf~C^@#!APVd!)$c-w|zYFEj8Y0mOI7kpL~ zj(id%_qYmAmI+YQ|1S&`ma-J*87B zWZEuSTkZF;u)fQ*-%!WSN9v9phhDTX;4*ODBx5a-+KZw0m{LHr_vpp$hmJ|SW&5^5 zMl?BZtYrT@GQ2aJ(6&iC+kKbbc?!uRkO^M6ao1zxH8%o_`986^&7t`b3@3~Jm@Tyz z$UMxo1k9vr2WC>ODUA;MGjDK9+UpE4GvS=9PyCK?PF;HuVl@7Z6{uSngK>eIj($n& zR+Ng_*Cu8=mMElf@rtun==0|>)V8K_3!7J}KEN1PHP)-yQ$+pRYS#0*52I$g*p5(c zhWg$+35D_ce(JzfAfCzg`U<#zFI!O`h3!GodB$uk^}xvSo6*Xz7$&PcQDj~vq`IC~D%;lwW+L7I#;xmkf?j;1Dp+t1pLl}EC}{Y@&fn^9pd zTA}`AuekjD$wwcqE8ggBKKt#(>e~_4eRreKfyp#k`uUTfSfiS=#oWpxf@jFVGo9&O zxM>I1(q8P^2HBXRf}3h{MQ-yHb|Y zGb*3?m77FC7oky<>>JP`>IH&{&t;o}O`o6-yz0Hlk`q~^?hTaP!cVjlvxgj*>1Qw) zYs7?=!{hwL%ii~ddCp2p@4r>%Tfr4ZGD)n;Sixv8G~G1ng7~*Qn_?*(l2p}r+^29w zGfH<<(#l=ERA#RT?i?-sQtjx@eU<8DzuA_f(RA4+mdDMS4b|Nq+MBr z%F#Rp7?wkj!=zLjOcq&Jb#4POTg!ELz?H91qMRl$=9J3g)42=yZ(abzx@Tb zoxX=oCnbzM;MmjFeBpNV>iv(2jsQFT;z=s6i}EYG2MZnCrsHBsSqQ&h95K^gSTjC{ z(7YSO=kiRJwsw}unw%H2ZHLq1bT!3uj_fkrZ^HzMYpmp1u9TDTHE_a_J+a2>3_4=| z5%$70s96nrD@?&W>_@~0Vb+7^nb!XN~O@PVw>H_^a{+JaD?--Ob9 zCt{iYd@eNfdh?FQhH%V9A*?14JegwIwXQ0xOH#DMx7q`A5~M3=2;_lto81?W8S2+9q6sGOL^5ey-M4Y)cXn z846H4)H7<%5sc~zCh7?=mu4ok0vXqi4#PlXMxg!7VLVEfdNvj#wn>IwiQ8}S`lZ~Z z7_ue+7hdIB$0Ipj@|5550S>2=TMo@RudY_u%u%(q~l;R^*D8s`A-QybhRkJlbs}8{T$5 z*IE%|KSVPoo$&5>(H>=)G+$*9vzXUj@~*YJA38=+J%iN11p3Sj-z1Zh!A2j(&yAP) zMI#JmBQ9kcs_>#PeD&+pb+;uLs)i=d6N|gbWDqTPRA~=(W{nj(uxmdIO}wQxDi$Gd zVMIsE!5~<@-55c2dFTlv^+jI^ec`9w9mEoBew{A|yC%qJ{EE0iy|VyVJj@uWPL$6p z(Qe;+-izVRA|WrC-=mmsHd3#X-SOF-w5bdR?hf_a?5$J>N3C;3Vf7SUHy_jW_xVdz z;mepaRKqbcES^?D@?6>Ji9+^&$d_lDZMIYp4i}-{t`y^qrLF8xJ|w8D!{{6p+;wTP z$?kj~q?P{GhIwZZn$1+5#)VMR)8LYFm^(F(iP_~Ut@V$zf^lJ^$46k zTr5au>AhaUgYR+snXWJ}oi%n#gUo7C5jX5cyj41TRQe+0&BINvko`?T%@T(fKl*0+ zs64OC?%|$tm}eFQ!T#{!3nJrZx>jRs0B?t-FUER#K4J-vG+G4iL^F5f$0@Iceq$qu z!bF;4JZgYGt6%rL=NFH zlbeZGJKT-J)ML?!W6Grq*DS(_CVrI5G(kv{BEm8nvlqqSho}PMj7LZ*K{{ju>lIKz z#3PAtZO3iHKrczMS#zGBF?Ib*J}J_6rlpvh*T7Y55yX`>1JNbl=p3yvv3P~(Y+TLXj<0B<(FB=yJ0YmMLAvASGZi8=}`J{s|yJ6VP=~UU=QNZ z!;w;YK^ycs-^3zqrrKwe+z2ytlcSfMnd!$1l&e6}<_(lqPL6m6|7P8Xbdw5lM#km* z2Fp4Ik+RymMiV&|k11Q*c(;yz^ZJya3{@Y={^Wb+S3>MO6cixb<1CT!QyCUHG^SEr+=hI3Pr@(z6wSN1VE1l0TOiY zL0TWF*H&=~Eu%i3)y`KUqlZrzMkK!ahB{1K;|XgpjY40F#@xU-wt2p&X(R+gny^gT zAyDtl@P<^f=T4-pq79{EZCw>!rLZ4D*E?5$ASU1@v)}s34wryz6-FUfK<^@0bd!vi zd3*)vy+@DiF>{1S>bJsvfUD@AUv5wCI7nE$^_I`s=KFew5gCP^8pWH}=`PH-d;ObY zaVs*S<6JVXbR2vp9JEKaSske$LD~{{5K(1k4?qt zedf5A(^t5I{`gpc2`J$KRsH_IEX(&tHj|fy%4p>GcNe!vRhnj^4gh_fWm_kqwZ}m)*uoJvvP)8%E6e zN(RcZ=u9|P5&A$ymwd4pF%qLVd5yUaTz$EkIutT|?HYx6hB4KJ2*oe2IXoixR!t#S zdywR1T4yR~S~zm&&bm5+nvLvKkiyUWoTr=9T(@`;*DPfji<_SJ5#*BBes4Ve51-MX z3t=pt?#`EDmN-HToLd-4`}L{zaAu?<)TD~Nbt8$Zm!P_Gx$)uKFzp}DhKYPm8WdP^ z+*$JB+2u}9=&uZ9D!pikY1jvD-RL@3!)8LAn{N*5ZP;;Up_-5td&zFu8B{&;PFifu z=Q22|0GGt~y4jXm+6s;)Ws6|K@DQto<>C7f-}~}#_sa6vf#^kpd1l(CfC*Ji390Ub z_-YGHBbc^eM`aA_4 z>*(*OCefR^K3m#c8c)4cuIfA{#WA~XGUnrqYjDEa_S5sW-QVguJ zZ_MoQM$mRhql?D~%oJk!+CmWZbXHT`pw!M)&kQVxi;szN^Fow=gP&V!Za6&?(RQZD zCZ=U1`uGg6x_XNi+Q;?MAuy!3=-6!uVCXIFBLkJA=Rtl(7yD^C*SoaCVX{NCETawY zuUF!N#^P4jZpv1)o%T%cNms-LL#K--v1|2RP=e=GI0$haKIh;HG6DPDg3q-X-f@BK zhbSUrKCV@+Z>E3pU_0ymN>mha2+=abbgZT(N6||ishON&o(PLTiT5CqtRY2JI_OlMTRP#Jkf1v8K^D8`h|T|8hm$P z6a(i9?s(=uBF;aY)So0i4quG_!8Tf}OBiJR`_T&cV&i;yXrs(u zA=uyVamq3e8v0P8#{)>h3R>)EIK7Zn=2RQRY6E)cAwS_W6YS)jJul^I-KX~dnYH9ey6$VHTHnfBt?^>EfW=aj_j zu@#4!*j6P#%kv*orA)N`;TLPrJY^P2u$ru|OO!jNE;qzGYwcdxFbFu1R`W~Jy>5)D zcXGh3<5#{f*@PXuw@=RCFZg|~UAwUDRY-bngs;P!#{MQ1e@o_-iiNB>gpg-yFcp+_En%e7dR` z_xQzmvRBUVV*S2R;;9Ma^r?E?LFeZnumq7id^Pb9;HU6ftv`L}6|lXzX(=2?Df;KP zsf@f$v*(MPWzT~d>ye(1#(c5(vlVY>E+dSM1woq|{E1ZF&zT|bj9u+t>5N`DEF78r z&#$4jv2Tv$j%(f+3xD8(ra$wO+1-3)pErtU?5nK18=KFQO(l?mA;(q$eiNuPYl+x@ z?L)=;#Qj=f0Lwt;&S75|HW7}M`{&oZ0KBGvmIBqw=SKKY&aXy^>UR8;czY>a3m{bc z1udCJrpI{4xV1Xr?&&U+bg&iH!}BWs0grE-ZB+TuYLhB^`GeRqoc!M_*4KPFVzW1c zjbdM)>m~8#YRrb5l%;VGG7kV)Z0r5qFYNaI(ft zdcBmXT??U``y(l8!bmEzP-Ydf-|O&Vc+4z@+g+^H5Pl^>=bGBM_spetw6nK7v;?k? zUho|CYY4+n_p=Uu4M*>uZF0H#89M@QGQ2kT}bE z`)#2vbM!3XmOn%4P zo@e@sZ|VV`>Xf#tws4%=+y0^uy!^OHk9qwO?dtgbYX9Idd=gD&Nqe^~m3U1tS~J${ z_1F(msn_21ji#o@*D>pdbOGM$CpdgQXIaq_1E?9bHQMe(5bXKRNNglfWFKN89JlrT zXIFS^nW#l)!H?87ELeQh+-1yHWhdqIXzAGtWrBlyEJuQ2p2|;5ieY0I$%h(DUx7dG zZtT!1>+i#0Dzk*of;~x2S7z)ePk_v|FAar%Nv`khdQ2ODb7LL2%ksU}DbtGYQCb0w zi*`TDN9U(o-={CvdFA?jh>S>Intgrgr;>9oN;wC`6ExTsYkBxL{t8NO@K^5Y2PXoY z`m4zVpH47*M$PDpcny~zzCDSIhGY9-HXyZVbh2MGJz)-=f$QuNCT7xcBSjHQE*msb z_bWdqnN)G|kq=SQDOw&hs1MK2((G^~WC5u*)fG=GosdIzE=vXE!ky z5|0r7jBlC)sy`_uBc>-Zh^9yM=aHu8kl+4Dj|cwfuScCP8?Eccw>?=8m%?go>*`4I zef3H@!Ssyrd-_JY>*Jb~0ChjtNOY+j^k>wlydZgpg-n3H3D1R|9m)*F?iAb+LT_%T zU3wtis4-};y7bc-k589u6|$N_#F`Dx-Vt2d8LYMY7BR!kHGSOViy0=XM6FwAl{Yzx;HDnekhpUy=7O+TL`!p9JD6_lpUsC7;r_FaY$H@~s$DN6ipv`7ocfI$( zj#%e1SoxAO6A4K<=p zj-X|GJ`b9nB-5QADD+Ta9=>_+DQ;MB0WAs;ONmH*9eR~1q~~yD5T3f82=?-WSi0Xp zJ5qsGqYEULBEN1+BtY0T=;dq@icK+}{nnqA03BJ9n>Rp{eOoXyGD_la9zMy4wUATi zIrO%~#30=C1Pyv>5&8iGQ1RV5K)WDh%Ij0P%Db^2;nIbAjmyHXo>)HHTU*~YVAyz? zFwc^kP%-1abWR#`kM6z%s=kknZvbiS-1+(razKhQ7@k5s|1a|EhlPO2qj5i820l$T zw>R57`>XU9qPd_pPc0Z%UEiCv!gA;E#%w`8;_PPcCmX zIT(}+M^^4`C@YTqxNhpMe`5Gfl~+}B)0g9%Uw#Gi!Tp{`_Dm5>2x{h#MB+nX6x`tI zVI%^Ouh*f~Pc$I|UQT{7ZY_9wPGG)L>CR_Y3yk#MBf>w*eoEGT?}6!GXZ8hcOYUqo z2kdLTR^x)*4IA~X^0!f|T$0s#6ZU6U>3h>+jn%5!VE?GXH`&*ukE~vD-q`M@$YwiOH7Y!bUO^?-x-C$s9z}0JD)Axf$hnn8JnXQ z8%bta7%}0WF-xZ2*Nb2JWf4@N#wrCMUHV7vxfEJ*NPD5J3y*j8~bz&T-nx^J;G9DaBS!%P3nEp>G4zOZl)IJWaTU7$GPAa)fp@ t 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 QGXdp}y7tY&>*g>27e4Dpf&c&j literal 0 HcmV?d00001