diff --git a/2-Coordinating-IO.pdf b/2-Coordinating-IO.pdf new file mode 100644 index 0000000..a88f8e0 Binary files /dev/null and b/2-Coordinating-IO.pdf differ diff --git a/2-Coordinating-IO/content.md b/2-Coordinating-IO/content.md new file mode 100644 index 0000000..dfb1ed5 --- /dev/null +++ b/2-Coordinating-IO/content.md @@ -0,0 +1,1452 @@ +# 2 Coordinating I/O + +This chapter covers the following topics + +* File reading, writing, appending +* File system metadata +* STDOUT, STDIN, STDERR +* Communicating with sockets + +## Introduction + +Operationally, Node.js is C with JavaScript's clothes on. +Just like C and other low-level environments, Node interacts with the Operating System at a fundamental level: Input and Output. + +In this chapter we'll explore some core API's provided by Node, along with +a few third party utilities that allow us to interact with standard I/O, +the file system, and the network stack. + +## Interfacing with standard I/O + +Standard I/O relates to the predefined input, output and error data channels that connect a process to a shell terminal. Of course these can be redirected and piped +to other programs for further processing, storage and so on. + +Node provides access standard I/O on the global `process` object. + +In this recipe we're going to take some input, use it form output, and simultaneously log to the standard error channel. + +### Getting Ready + +Let's create a file called `base64.js`, we're going to write a tiny +program that converts input into its base64 equivalent. + +### How to do it + +First, we'll listen for a `data` event on `process.stdin`, + +```js +process.stdin.on('data', data => { + +}) +``` + +If we run our file now: + +```sh +$ node base64.js +``` + +We should notice that the process does not exit, and allows keyboard input. + +Now let's do something with the incoming data, we'll modify our code thusly: + +```js +process.stdin.on('data', data => { + process.stderr.write(`Converting: "${data}" to base64\n`) + process.stdout.write(data.toString('base64') + '\n') +}) +``` + +We can test our program like so + +```sh +$ echo -e "hi\nthere" | node base64.js +``` + +Which should output: + +```sh +Converting: "hi +there +" to base64 +aGkKdGhlcmUK +``` + +We can also simply run our program, and each line of input will be +converted: + +```sh +$ node base64.js + +``` + +Of course if we want to filter out logs to standard error, we can +do the following: + +```sh +$ echo -e "hi\nthere" | node base64.js 2> /dev/null +``` + +Which outputs: + +```sh +aGkKdGhlcmUK +``` + +### How it works + +The standard I/O channels are implemented using Node.js Streams. + +We'll find out more about these in **Chapter 3 Using Streams**, we also have an example in the **There's more** section of this recipe of using the standard +I/O channels as streams. + +Suffice it to say, that Node `Stream` instances (instantiated from Node's core `stream` module) inherit from `EventEmitter` (from Node's core `events` module), and emit a `data` event for every chunk of data received. + +When in interactive mode (that is, when inputting via the keyboard), each data +chunk is determined by a newline. When piping data through to the process, each +data chunk is determined by the maximum memory consumption allowable for the stream (this determined by the `highWaterMark`, but we'll learn more about this in Chapter 3). + +We listen to the `data` event, which provides a `Buffer` object (also called `data`) holding a binary representation of the input. + +We write to standard error first, simply by passing a string `process.stderr.write`. The string contains the `data` `Buffer` object, which is automatically converted to a string representation when interpolated into (or concatanated with) another string. + +Next we write to standard out, using `process.stdout.write`. `Buffer` objects have a `toString` method that can be passed an encoding option. We specify an encoding of `'base64'` when calling `toString` on the buffer object, to convert the input from raw binary data to a base64 string representation. + + +### There's more + +Let's take a look at how Node Streams wrap Standard I/O channels, and how to detect whether an I/O channel is connected directly to a terminal or not. + +#### Piping + +As mentioned in the main recipe, the standard I/O channels available on the global `process` object are implementations of a core Node abstraction: streams. We'll be covering these in much greater detail in **Chapter 3 Using Streams** but for now let's see how we could achieve an equivalent effect using Node Streams' `pipe` method. + +For this example we need the third party `base64-encode-stream` module, so let's open a terminal and run the following commands: + +```sh +$ mkdir piping +$ cd piping +$ npm init -y +$ npm install --save base64-encode-stream +``` + +We just created a folder, used `npm init` to create a `package.json` file +for us, and then installed the `base64-encode-stream` dependency. + +Now let's create a fresh `base64.js` file in the `piping` folder, and +write the following: + +```js +const encode = require('base64-encode-stream') +process.stdin.pipe(encode()).pipe(process.stdout) +``` + +We can try out our code like so: + +```sh +$ echo -e "hi\nthere" | node base64.js +aGkKdGhlcmUK +``` + +In this case, we didn't write to standard error, but we did set up a pipeline +from standard input to standard output, transforming any data that passes through the pipeline. + +#### TTY Detection + +As a concept, Standard I/O is decoupled from terminals and devices. However, it +can be useful to know whether a program is directly connected to a terminal or whether it's I/O is being redirected. + +We can check with the `isTTY` flag on each I/O channel. + +For instance, let's try the following command: + +```sh +$ node -p "process.stdin.isTTY" +true +``` + +> #### The `-p` flag ![](../info.png) +> The `-p` flag will evaluate a supplied string and output the final +> result. There's also the related `-e` flag which only evaluates a +> supplied command line string, but doesn't output it's return value. + +We're running `node` directly, so the Standard In channel is correctly +identified as a TTY. + +Now let's try the following: + +```sh +$ echo "hi" | node -p "process.stdin.isTTY" +undefined +``` + +This time `isTTY` is `undefined`, this is because the our program is executed +inside a shell pipeline. It's important to note `isTTY` is `undefined` and not `false` as this can lead to bugs (for instance, when checking for a `false` value instead of a falsey result). + +The `isTTY` flag is `undefined` instead of `false` in the second case because the +standard I/O channels are internally initialised from different constructors depending on scenario. So when the process is directly connected to a terminal, `process.stdin` is created using the core `tty` modules `ReadStream` constructor, which has the `isTTY` flag. However, when I/O is redirected the channels are created from the `net` module's `Socket` constructor, which does not have an `isTTY` flag. + +Knowing whether a process is directly connected to a terminal can be useful in certain cases - for instance when determining whether to output plain text or text decorated with ANSI Escape codes for colouring, boldness and so forth. + +### See also + +* TODO +* ...chapter 3 +* .. anywhere else the process object is discussed + +## Working with files + +The ability to read and manipulate the file system is fundamental +to server side programming. + +Node's `fs` module provides this ability. + +In this recipe we'll learn how to read, write and append to files, +synchronously then we'll follow up in the **There's More** section showing how to perform the same operations asynchronously and incrementally. + +### Getting Ready + +We'll need a file to read. + +We can use the following to populate a file with 1MB of data: + +```sh +$ node -p "Buffer(1e6).toString()" > file.dat +``` + +> #### Allocating Buffers ![](../info.png) +> When the `Buffer` constructor is passed a number, +> the specified amount of bytes will be allocated from +> *deallocated memory*, data in RAM that was previously discarded. +> This means the buffer could contain anything. +> From Node v6 and above, passing a number to `Buffer` is +> deprecated, instead we should use `Buffer.allocUnsafe` +> to achieve the same effect, or just `Buffer.alloc` to have +> a zero-filled buffer (but at the cost of slower instantiation). + +We'll also want to create a source file, let's call it `null-byte-remover.js`. + +### How to do it + +We're going to write simple program that strips all null bytes (bytes with a value of zero) from our file, and saves it in a new file called `clean.dat`. + +First we'll require our dependencies + +```js +const fs = require('fs') +const path = require('path') +``` + +Now let's load our generated file into the process: + +```js +const cwd = process.cwd() +const bytes = fs.readFileSync(path.join(cwd, 'file.dat')) +``` + +> #### Synchronous Operations ![](../tip.png) +> Always think twice before using a synchronous API in +> JavaScript. JavaScript executes in a single threaded event-loop, +> a long-lasting synchronous operation will delay concurrent logic. +> We'll explore this more in the **There's more** section. + +Next, we'll remove null bytes and save: + +```js +const clean = bytes.filter(n => n) +fs.writeFileSync(path.join(cwd, 'clean.dat'), clean) +``` + +Finally, let's append to a log file so we can keep a record: + +```js +fs.appendFileSync( + path.join(cwd, 'log.txt'), + (new Date) + ' ' + (bytes.length - clean.length) + ' bytes removed\n' +) +``` + +### How it works + +Both `fs` and `path` are core modules, so there's no need to install these dependencies. + +The `path.join` method is a useful utility that normalizes paths across platforms, since Windows using back slashes (`\`) whilst others use forward slashes ('/') to +denote path segments. + +We use this three times, all with the `cwd` reference which we obtain by calling `process.cwd()` to fetch the current working directory. + +`fs.readFileSync` will *synchronously* read the entire file into process memory. + +This means that any queued logic is blocked until the entire file is read, thus ruining any capacity for concurrent operations (like, serving web requests). + +That's why synchronous operations are usually explicit in Node Core (for instance, the `Sync` in `readFileSync`). + +For our current purposes it doesn't matter, since we're interested only in processing a single set of sequential actions in series. + +So we read the contents of `file.dat` using `fs.readFileSync` and assign the resulting buffer to `bytes`. + +Next we remove the zero-bytes, using a `filter` method. By default `fs.readFileSync` returns a `Buffer` object which is a container for the binary data. `Buffer` objects inherit from native `UInt8Array` (part of the EcmaScript 6 specification), which in turn inherits from the native JavaScript `Array` constructor. + +This means we can call functional methods like `filter` (or `map`, or `reduce`) on `Buffer` objects! + +The `filter` method is passed a predicate function, which simply returns the value passed into it. If the value is 0 the byte will be removed from the bytes array because the number `0` is coerced to `false` in boolean checking contexts. + +The filter bytes are assigned to `clean`, which is then written synchronously to a file named `clean.dat`, using `fs.writeFileSync`. Again, because the operation is synchronous nothing else can happen until the write is complete. + +Finally, we use `fs.appendFileSync` to record the date and amount of bytes removed to a `log.txt` file. If the `log.txt` file doesn't exist it will be automatically created and written to. + +### There's more + +#### Asynchronous file operations + +Suppose we wanted some sort of feedback, to show that the process was doing something. + +We could use an interval to write a dot to `process.stdout` every 10 milliseconds. + +If we and add the following to top of the file: + +```js +setInterval(() => process.stdout.write('.'), 10).unref() +``` + +This should queue a function every 10 milliseconds that writes a dot to Standard Out. + +The `unref` method may seem alien if we're used to using timers in the browser. + +Browser timers (`setTimeout` and `setInterval`) return numbers, for ID's that can be passed into the relevant clear function. Node timers return objects, which also act as ID's in the same manner, but additionally have this handy `unref` method. + +Simply put, the `unref` method prevents the timer from keeping the process alive. + +When we run our code, we won't see any dots being written to the console. + +This is because the synchronous operations all occur in the same tick of the event loop, then there's nothing else to do and the process exits. A much worse scenario is where a synchronous operation occurs in several ticks, and delays a timer (or an HTTP response). + +Now that we want something to happen alongside our operations, we need to switch to using asynchronous file methods. + +Let's rewrite out source file like so: + +```js +setInterval(() => process.stdout.write('.'), 10).unref() + +const fs = require('fs') +const path = require('path') +const cwd = process.cwd() + +fs.readFile(path.join(cwd, 'file.dat'), (err, bytes) => { + if (err) { console.error(err); process.exit(1); } + const clean = bytes.filter(n => n) + fs.writeFile(path.join(cwd, 'clean.dat'), clean, (err) => { + if (err) { console.error(err); process.exit(1); } + fs.appendFile( + path.join(cwd, 'log.txt'), + (new Date) + ' ' + (bytes.length - clean.length) + ' bytes removed\n' + ) + }) +}) +``` + +Now when we run our file, we'll see a few dots printed to the console. Still not as many as expected - the process takes around 200ms to complete, there should be more than 2-3 dots! This is because the `filter` operation is unavoidably synchronous and quite intensive, it's delaying queued intervals. + +#### Incremental Processing + +How could we mitigate the intense byte-stripping operation from blocking other important concurrent logic? + +Node's core abstraction for incremental asynchronous processing has already appeared in the previous recipe, but it's merits bear repetition. + +Streams to the rescue! + +We're going to convert our recipe once more, this time to using a streaming abstraction. + +First we'll need the third-party `strip-bytes-stream` package: + +```sh +$ npm init -y # create package.json if we don't have it +$ npm install --save strip-bytes-stream +``` + +Now let's alter our code like so: + +```js +setInterval(() => process.stdout.write('.'), 10).unref() + +const fs = require('fs') +const path = require('path') +const cwd = process.cwd() + +const sbs = require('strip-bytes-stream') + +fs.createReadStream(path.join(cwd, 'file.dat')) + .pipe(sbs((n) => n)) + .on('end', function () { log(this.total) }) + .pipe(fs.createWriteStream(path.join(cwd, 'clean.dat'))) + +function log(total) { + fs.appendFile( + path.join(cwd, 'log.txt'), + (new Date) + ' ' + total + ' bytes removed\n' + ) +} +``` + +This time we should see around 15 dots, which over roughly +200ms of execution time is much fairer. + +This is because the file is read into the process in chunks, +each chunk is stripped of null bytes, and written to file, the old +chunk and stripped result is discarded, whilst the next chunk enters +process memory. This all happens over multiple ticks of the event loop, +allowing room for processing of the interval timer queue. + +We'll be delving much deeper into Streams in **Chapter 3 Using Streams**, +but for the time being we can see that `fs.createReadStream` and `fs.createWriteStream` are, more often that not, the most suitable way to read +and write to files. + +### See also + +* TODO +* chapter 3...etc + +## Fetching meta-data + +Reading directory listings, fetching permissions, getting time of creation and modification. These are all essential pieces of the file system tool kit. + +> ### `fs` and POSIX ![](../tip.png) +> Most of the `fs` module methods are light wrappers around [POSIX](https://en.wikipedia.org/wiki/POSIX) operations (with shims for Windows), so many of the concepts and names should be similar if we've indulged in any system programming or even shell scripting. + +In this recipe, we're going to write a CLI tool that supplies in depth information about files and directories for a given path. + +### Getting Ready + +To get started, let's create a new folder called `fetching-meta-data`, +containing a file called `meta.js`: + +```sh +$ mkdir fetching-meta-data +$ cd fetching-meta-data +$ touch meta.js +``` + +Now let's use `npm` to create `package.json` file, + +```sh +$ npm init -y +``` + +We're going to display tabulated and styled metadata in the terminal, +instead of manually writing ANSI codes and tabulating code, we'll simply +be using the third party `tableaux` module. + +We can install it like so + +```sh +$ npm install --save tableaux +``` + +Finally we'll create a folder structure that we can check our program against: + +```sh +$ mkdir -p my-folder/my-subdir/my-subsubdir +$ cd my-folder +$ touch my-file my-private-file +$ chmod 000 my-private-file +$ echo "my edit" > my-file +$ ln -s my-file my-symlink +$ touch my-subdir/another-file +$ touch my-subdir/my-subsubdir/too-deep +``` + +### How to do it + +Let's open `meta.js`, and begin by loading the modules we'll be using + +```js +const fs = require('fs') +const path = require('path') +const tableaux = require('tableaux') +``` + +Next we'll initialize tableaux with some table headers, +which in turn will supply a `write` function which we'll be using shortly: + +```js +const write = tableaux( + {name: 'Name', size: 20}, + {name: 'Created', size: 30}, + {name: 'DeviceId', size: 10}, + {name: 'Mode', size: 8}, + {name: 'Lnks', size: 4}, + {name: 'Size', size: 6} +) +``` + +Now let's sketch out a `print` function + +```js +function print(dir) { + fs.readdirSync(dir) + .map((file) => ({file, dir})) + .map(toMeta) + .forEach(output) + write.newline() +} +``` + +The `print` function wont work yet, not until we define the `toMeta` and `output` functions. + +The `toMeta` function is going to take an object with a `file` property, `stat` the +file in order to obtain information about it, then return that data, like so: + +```js +function toMeta({file, dir}) { + const stats = fs.statSync(path.join(dir, file)) + let {birthtime, ino, mode, nlink, size} = stats + birthtime = birthtime.toUTCString() + mode = mode.toString(8) + size += 'B' + return { + file, + dir, + info: [birthtime, ino, mode, nlink, size], + isDir: stats.isDirectory() + } +} +``` + +The `output` function is going to output the information supplied by `toMeta`, +and in cases where a given entity is a directory, it will query and output a +summary of the directory contents. Our `output` functions looks like the following: + +```js +function output({file, dir, info, isDir}) { + write(file, ...info) + if (!isDir) { return } + const p = path.join(dir, file) + write.arrow() + fs.readdirSync(p).forEach((f) => { + const stats = fs.statSync(path.join(p, f)) + const style = stats.isDirectory() ? 'bold' : 'dim' + write[style](f) + }) + write.newline() +} +``` + +Finally we can call the `print` function: + +```js +print(process.argv[2] || '.') +``` + +Now let's run our program, assuming our current working directory is the `fetching-meta-data` folder, we should be able to successfully run the following: + +```sh +$ node meta.js my-folder +``` + +![](images/fig1.1.png) +*Our program output should look similar to this* + +### How it works + +When we call `print` we pass in `process.argv[2]`, if it's value is falsey, then +we alternatively pass a dot (meaning current working directory). + +The `argv` property on `process` is an array of command line arguments, including +the call to `node` (at `process.argv[0]`) and the file being executed (at `process.argv[1]`). + +When we ran `node meta.js my-folder`, `process.argv[2]` had the value `'my-folder'`. + +Our `print` function uses `fs.readdirSync` to get an array of all the files and folders in +the specified `dir` (in our case, the `dir` was `'my-folder'`). + +> #### Functional Programming ![](../info.png) +> We use a functional approach in this recipe (and mostly throughout this book) +> If this is unfamiliar, check out the functional programming workshop on +> http://nodeschool.io + +We call `map` on the returned array to create a new array of objects containing both the `file` and the `dir` (we need to keep a reference to the `dir` so it can eventually be passed to the `output` function). + +We call `map` again, on the previously mapped array of objects, this time passing the `toMeta` +function as the transformer function. + +The `toMeta` function uses the ES2015 destructuring syntax to accept an object and break its `file` and `dir` property into variables that are local to the function. Then `toMeta` passes the `file` and `dir` into `path.join` (to assemble a complete cross-platform to the file), which in turn is passed into `fs.statSync`. The `fs.statSync` method (and its asynchronous counter `fs.stat`) is a light wrapper around the POSIX `stat` operation. + +It supplies an object with following information about a file or directory: + + +| Information Point | Namespace | +|---------------------------------------------|------------| +| ID of device holding file | `dev` | +| Inode number | `ino` | +| Access Permissions | `mode` | +| Number of hard links contained | `nlink` | +| User ID | `uid` | +| Group ID | `gid` | +| Device ID of special device file | `rdev` | +| Total bytes | `size` | +| Filesystem block size | `blksize` | +| Number of 512byte blocks allocated for file | `blocks` | +| Time of last access | `atime` | +| Time of last modification | `mtime` | +| Time of last status change | `ctime` | +| Time of file creation | `birthtime`| + +We use assignment destructuring in out `toMeta` function to grab the +`birthtime`, `ino`, `mode`, `nlink` and `size` values. We ensure `birthtime` +is a standard UTC string (instead of local time), and convert the `mode` +from a decimal to the more familiar octal permissions. representation. + +The `stats` object supplies some methods: + +* `isFile` +* `isDirectory` +* `isBlockDevice` +* `isCharacterDevice` +* `isFIFO` +* `isSocket` +* `isSymbolicLink` + +> #### `isSymbolicLink` ![](../info.png) +> The `isSymbolicLink` method is only available when the +> file stats have been retrieved with `fs.lstat` (not with +> `fs.stat`), see the **There's More** section for an example +> where we use `fs.lstat`. + +In the object returned from `toMeta`, we add an `isDir` property, +the value of which is determined by the `stats.isDirectory()` call. + +We also add the `file` and `dir` use ES2015 property shorthand +, and an array of our selected stats on the `info` property. + +> #### ES2015 Property Shorthand ![](../info.png) +> ES2015 (or ES6) defines a host of convenient syntax +> extensions for JavaScript, 96% of which is supported in Node v6. +> One such extension is property shorthand, where a variable can +> be placed in an object without specifying property name or value. +> Under the rules of property shorthand the property name corresponds +> to the variable name, the value to the value referenced by the variable. + +Once the second `map` call in our `print` function has looped over every +element, passing each to the `toMeta` function, we are left with a new +array composed of objects as returned from `toMeta` - containing `file`, +`dir`, `info`, and `isDir` properties. + +The `forEach` method is called on this array of metadata, and it's passed +the `output` function. This means that each piece of metadata is processed +by the `output` function. + +In similar form to the `toMeta` function, the `output` function likewise +deconstructs the passed in object into `file`, `dir`, `info`, and `isDir` +references. We then pass the `file` string and all of elements in the `info` +array, using the ES2015 spread operator, to our `write` function (as supplied +by the third party `tableaux` module). + +If we're only dealing with a file, (that is, if `isDir` is not `true`), we exit +the `output` function by returning early. + +If, however, `isDir` is true then we call `write.arrow` (which writes a unicode +arrow to the terminal), read the directory, call `forEach` on the returned array +of directory contents, and call `fs.statSync` on each item in the directory. + +We then check whether the item is a directory (that is, a subdirectory) +using the returned stats object, if it is we write the directory name to the terminal +in bold, if it isn't we write a in a dulled down white color. + +### There's more + +Let's find out how to examine symlinks, check whether files exists and see how to +actually alter file system metadata. + +#### Getting symlink information + +There are other types of stat calls, one such call is `lstat` (the 'l' stands for link). + +When an `lstat` command comes across a symlink, it stats the symlink itself, rather +than the file it points to. + +Let's modify our `meta.js` file to recognize and resolve symbolic links. + +First we'll modify the `toMeta` function to use `fs.lstatSync` instead of +`fs.statSync`, and then add an `isSymLink` property to the returned object: + +```js +function toMeta({file, dir}) { + const stats = fs.lstatSync(path.join(dir, file)) + let {birthtime, ino, mode, nlink, size} = stats + birthtime = birthtime.toUTCString() + mode = mode.toString(8) + size += 'B' + return { + file, + dir, + info: [birthtime, ino, mode, nlink, size], + isDir: stats.isDirectory(), + isSymLink: stats.isSymbolicLink() + } +} +``` + +Now let's add a new function, called `outputSymlink`: + +```js +function outputSymlink(file, dir, info) { + write('\u001b[33m' + file + '\u001b[0m', ...info) + process.stdout.write('\u001b[33m') + write.arrow(4) + write.bold(fs.readlinkSync(path.join(dir, file))) + process.stdout.write('\u001b[0m') + write.newline() +} +``` + +Our `outputSymlink` function using terminal ANSI escape codes +to color the symlink name, arrow and file target, yellow. + +Next in the `output` function, we'll check whether the file is a +symbolic link, and delegate to `outputSymlink` if it is. + +Additionally when we're querying subdirectories, we'll +switch to `fs.lstatSync` so we can colour an symbolic links +in the subdirectories a dim yellow as well. + +```js +function output({file, dir, info, isDir, isSymLink}) { + if (isSymLink) { + outputSymlink(file, dir, info) + return + } + write(file, ...info) + if (!isDir) { return } + const p = path.join(dir, file) + write.arrow() + fs.readdirSync(p).forEach((f) => { + const stats = fs.lstatSync(path.join(p, f)) + const style = stats.isDirectory() ? 'bold' : 'dim' + if (stats.isSymbolicLink()) { f = '\u001b[33m' + f + '\u001b[0m'} + write[style](f) + }) + write.newline() +} +``` + +Now when we run + +```sh +$ node meta.js my-folder +``` + +We should see the `my-symlink` file in a pretty yellow color. + +Let's finish up by adding some extra symlinks and seeing how they +render: + +```sh +$ cd my-folder +$ ln -s /tmp absolute-symlink +$ ln -s my-symlink link-to-symlink +$ ln -s ../meta.js relative-symlink +$ ln -s my-subdir/my-subsubdir/too-deep too-deep +$ cd my-subdir +$ ln -s another-file subdir-symlink +$ cd ../.. +$ node meta.js my-folder +``` + +![](images/fig1.2.png) +*Symlinks in glorious yellow* + + +#### Checking file existence + +A fairly common task in systems and server side programming, +is checking whether a file exists or not. + +There is a method, `fs.exists` (and its sync cousin) `fs.existsSync`, +which allows us perform this very action. However, it has been deprecated +since Node version 4, and therefore isn't future-safe. + +A better practice is to use `fs.access` (added when `fs.exists` was deprecated). + +By default `fs.access` checks purely for "file visibility", which is essentially +the equivalent of checking for existence. + +Let's write a file called `check.js`, we can pass it a file and it will tell us +whether the file exists or not: + +```js +const fs = require('fs') + +const exists = (file) => new Promise((resolve, reject) => { + fs.access(file, (err) => { + if (err) { + if (err.code !== 'ENOENT') { return reject(err) } + return resolve({file, exists: false}) + } + resolve({file, exists: true}) + }) +}) + +exists(process.argv[2]) + .then(({file, exists}) => console.log(`"${file}" does${exists ? '' : ' not'} exist`)) + .catch(console.error) +``` + +> #### Promises ![](../info.png) +> For extra fun here (because the paradigm fits well in this case), +> we used the ES2015 native `Promise` abstraction. Find out more about +> promises at https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Global_Objects/Promise + + +Now if we run the following: + +```sh +$ node check.js non-existent-file +"non-existent-file" does not exist +``` + +But if we run: + +```sh +$ node check.js check.js +"check.js" does exist +``` + +The `fs.access` method is more versatile than `fs.exists`, it can be passed different +modes (`fs.F_OK` (default), `fs.R_OK`, `fs.W_OK` and `fs.X_OK`) to alter access check +being made. The mode is a number, and the constants of `fs` (ending in `_OK`) are +numbers, allowing for a bitmask approach. + +For instance, here's how we can check if have permissions to read, write and execute +a file (this time with `fs.accessSync`): + +```js +fs.access('/usr/local/bin/node', fs.R_OK | fs.W_OK | fs.X_OK, console.log) +``` + +If there's a problem accessing, an error will be logged, if not `null` will be logged. + + +> #### Modes and Bitmasks ![](../info.png) +> For more on `fs.access` see the docs at https://nodejs.org/api/fs.html#fs_fs_access_path_mode_callback, to learn about bitmasks check out https://abdulapopoola.com/2016/05/30/understanding-bit-masks/ + + +#### Manipulating metadata + +By now we have learned how to fetch information about a file or directory, but how do we alter specific qualities. + +Let's create a small program that creates a file, sets the UID and GID to `nobody` and sets access permissions to `000` (not readable, writeable or executable). + +```js +const fs = require('fs') +const {execSync} = require('child_process') + +const file = process.argv[2] +if (!file) { + console.error('specify a file') + process.exit(1) +} +try { + fs.accessSync(file) + console.error('file already exists') + process.exit(1) +} catch (e) { + makeIt() +} + +function makeIt() { + const nobody = Number(execSync('id -u nobody').toString().trim()) + fs.writeFileSync(file, '') + fs.chownSync(file, nobody, nobody) + fs.chmodSync(file, 0) + console.log(file + ' created') +} +``` + +We used `fs.accessSync` to synchronously check for file existence, using a +`try/catch` since `fs.accessSync` throws when a file does not exist. + +> #### try/catch ![](../tip.png) +> In this particular context, a try/catch is fine. However as a general rule we should avoid try/catch as much as possible. See [How to know when (not) to throw](http://www.nearform.com/nodecrunch/10-tips-coding-node-js-3-know-throw-2/) for more details. + +If the file does not exist, we call our `makeIt` function. + +This uses the `execSync` function from the `child_process` module to get the numerical ID of the `nobody` user on our system. + +Next we use `fs.writeFileSync` to create an empty file, then use `fs.chownSync` to set the user and group to nobody, use `fs.chmodSync` to set the permissions to their minimum possible value, and finally log out a confirmation message. + +We can improve our approach a little here. Each operation has to access the file separately, instead of retaining a reference to it throughout. We can make this a little more efficient by using file handles. + +Let's rewrite out `makeIt` function like so: + +```js +function makeIt() { + const nobody = Number(execSync('id -u nobody').toString().trim()) + const fd = fs.openSync(file, 'w') + fs.fchmodSync(fd, 0) + fs.fchownSync(fd, nobody, nobody) + console.log(file + ' created') +} +``` + +This achieve the same result, but directly manages the file handle (an OS-level reference to the file). + +We use `fs.openSync` to create the file and get a file descriptor (`fd`), +then instead of fs.chmodSync and fs.chownSync both of which expect a file +path, we use `fs.fchmodSync` and `fs.fchownSync` which take a file descriptor. + + +### See also + +* TODO + +## Watching files and directories + +The ability to receive notifications when a file is added, removed +or updated can be extremely useful. Node's `fs` module supplies this +functionality cross-platform, however as we'll explore the functionality +across operating systems can be patch. + +In this recipe, we'll write a program that watches a file and outputs +some data about the file when it changes. In the *There's More* section, +we'll explore the limitation of Node's watch functionality along with a third-party module that wraps the core functionality to make it more consistent. + +### Getting Ready + +Let's create a new folder called `watching-files-and-directories`, +create a `package.json` in the folder and then install the third +party `human-time` module for nicely formatted time outputs. + +```sh +$ mkdir watching-files-and-directories +$ cd watching-files-and-directories +$ npm init -y +$ npm install --save human-time +``` + +We'll also create a file to watch: + +```sh +$ echo "some content" > my-file.txt +``` + +Finally we want to create a file called `watcher.js` (inside the `watching-files-and-directories` folder) and open it in our favourite editor. + +### How to do it + +Let's start by loading the dependencies we'll be needing: + +```js +const fs = require('fs') +const human = require('human-time') +``` + +Next we'll set up some references: + +```js +const interval = 5007 +const file = process.argv[2] +let exists = false +``` + +Do a quick check to make sure we've been supplied a file: + +```js +if (!file) { + console.error('supply a file') + process.exit(1) +} +``` + +Now we'll set up some utility functions, which will +help us interpret the file change event: + +```js +const created = ({birthtime}) + => !exists && (Date.now() - birthtime) < interval + +const missing = ({birthtime, mtime, atime, ctime}) => + !(birthtime|mtime|atime|ctime) + +const updated = (cur, prv) => cur.mtime !== prv.mtime +``` + +Finally we use `fs.watchFile` to being polling the +specified file and then log out activity from the +listener function supplied to `fs.watchFile`. + +Like so: + +```js +fs.watchFile(file, {interval}, (cur, prv) => { + if (missing(cur)) { + const msg = exists ? 'removed' : 'doesn\'t exist' + exists = false + return console.log(`${file} ${msg}`) + } + + if (created(cur)) { + exists = true + return console.log(`${file} created ${human((cur.birthtime))}`) + } + + exists = true + + if (updated(cur, prv)) { + return console.log(`${file} updated ${human((cur.mtime))}`) + } + + console.log(`${file} modified ${human((cur.mtime))}`) +}) +``` + +We should now be able to test our watcher. + +In one terminal we can run: + +```sh +$ node watcher my-file.txt +``` + +And in another we can make a change + +```sh +$ echo "more content" >> my-file.txt +``` + +Or remove the file + +```sh +$ rm my-file.txt +``` + +And recreate it + +```sh +$ echo "back again" > my-file.txt +``` + +![](images/fig1.3.png) +*We should be seeing results similar to this* + +### How it works + +The `fs` module has two watch methods, `fs.watch` and `fs.watchFile`. + +Whilst `fs.watch` is more responsive and can watch entire directories, +recursively, it has various consistency and operational issues on +different platforms (for instance, inability to report filenames on OS X, +may report events twice, or not report them at all). + +Instead of using an OS relevant notification subsystem (like `fs.watch`) +the `fs.watchFile` function polls the file at a specified interval +(defaulting to 5007 milliseconds). + +The listener function (supplied as the last argument to `fs.watchFile`), +is called every time the file is altered in some way. The listener +takes two arguments. The first argument is a stats object (as provided by +`fs.stat`, see Fetching MetaData) of the file it its current state, the +second argument is a stats object of the file in its previous state. + +We use these objects along with our three lambda functions, +`created`, `missing` and `updated` to infer how the file has been altered. + +The `created` function checks whether the `birthtime` (time of file creation) +is less than the polling interval, then it's likely the file was created. + +We introduce certainty by setting an `exists` variable and tracking the file +existence in our listener function. So our `created` function check this variable first, if the file is known to exist then it can't have been created. This caters to situations where a file is updated multiple times within the polling interval period and ensures the first file alteration event is interpreted as a change, whilst subsequent triggers are not (unless the file was detected as removed). + +When `fs.watchFile` attempts to poll a non-existent (or at least, inaccessible), +file, it signals this eventuality by setting the `birthtime`, `mtime`, `atime` and `ctime` to zero (the Unix epoch). Our `missing` function checks for this by bitwise +ORing all four dates, this implicitly converts the dates to numerical values and will result either in `0` or some other number (if any of the four values is non-zero). This in turn is converted to a boolean, if the result is `0` missing returns `true` else it returns false. + +The `mtime` is the time since file data was last changed. Comparing the `mtime` of +the file before and after the event allows us to differentiate between a change where the file content was updated, and a change where file metadata was altered. + +The `updated` function compares the `mtime` on the previous and current stat objects, +if they're not the same then the file content must have been changed, if they are the same then file was modified in some other way (for instance, a chmod). + +Our listener function, checks these utility functions and then updates the `exists` variable and logs out messages accordingly. + +### There's more + +The core watching functionality is often too basic, let's take a look at the third party alternative, `chokidar` + +#### Watching directories with `chokidar` + +The `fs.watchFile` method is slow, CPU intensive and only watches an individual file. + +The `fs.watch` method is unreliable. + +Enter chokidar. Chokidar wraps the core watching functionality to make it more reliable across platforms, more configurable and less CPU intensive. It also +watches entire directories recursively. + +Let's create a new watcher that watches a whole directory tree. + +Let's make a new folder, 'watching-with-chokidar', with a subdirectory +called `my-folder`, which in turn has another subfolder called `my-subfolder` + +```sh +$ mkdir -p watching-with-chokidar/my-folder/my-subfolder +``` + +In our `watching-with-chokidar` folder we'll automatically create a new `package.json` and install dependencies with `npm`: + +```sh +$ cd watching-with-chokidar +$ npm init -y +$ npm install --save chokidar human-time +``` + +Now let's create our new `watcher.js` file. + +First we'll require the dependencies and create a chokidar `watcher` instance: + +```js +const chokidar = require('chokidar') +const human = require('human-time') +const watcher = chokidar.watch(process.argv[2] || '.', { + alwaysStat: true +}) +``` + +Now we'll listen for the `ready` event (meaning that chokidar +has scanned directory contents), and then listen for various +change events. + +```js +watcher.on('ready', () => { + watcher + .on('add', (file, stat) => { + console.log(`${file} created ${human((stat.birthtime))}`) + }) + .on('unlink', (file) => { + console.log(`${file} removed`) + }) + .on('change', (file, stat) => { + const msg = (+stat.ctime === +stat.mtime) ? 'updated' : 'modified' + console.log(`${file} ${msg} ${human((stat.ctime))}`) + }) + .on('addDir', (dir, stat) => { + console.log(`${dir} folder created ${human((stat.birthtime))}`) + }) + .on('unlinkDir', (dir) => { + console.log(`${dir} folder removed`) + }) +}) +``` + +Now we should be able to spin up our watcher, point it at `my-folder` and +being making observable changes. + +In one terminal we do: + +```sh +$ node watcher.js my-folder +``` + +In another terminal: + +``` +cd my-folder +echo "me again" > my-file.txt +chmod 700 my-file.txt +echo "more" >> my-file.txt +rm my-file.txt +cd my-subfolder +echo "deep" > deep.txt +rm deep.txt +cd .. +rm -fr my-subfolder +mkdir my-subfolder +``` + +![](images/fig1.5.png) +*Watching a directory tree* + +### See also + +* Chapter 2, Fetching Metadata +* TODO - more + + +## Communicating over sockets +One way to look at a socket is as a special file. Like a file it's a readable and writable data container. On some Operating Systems network sockets are literally a special type of file whereas on others the implementation is more abstract. + +At any rate, the concept of a socket has changed our lives because it allows +machines to communicate, to co-ordinate I/O across a network. Sockets are the backbone of distributed computing. + +In this recipe we'll build a TCP client and server. + +### Getting Ready + +Let's create two files `client.js` and `server.js` and open them in our +favourite editor. + +### How to do it + +First, we'll create our server. + +In `server.js`, let's write the following: + +```js +const net = require('net') + +net.createServer((socket) => { + console.log('-> client connected') + socket.on('data', name => { + socket.write(`Hi ${name}!`) + }) + socket.on('close', () => { + console.log('-> client disconnected') + }) +}).listen(1337, 'localhost') +``` + +Now for the client, our `client.js` should look like this: + +```js +const net = require('net') + +const socket = net.connect(1337, 'localhost') +const name = process.argv[2] || 'Dave' + +socket.write(name) + +socket.on('data', (data) => { + console.log(data.toString()) +}) + +socket.on('close', () => { + console.log('-> disconnected by server') +}) +``` + +We should be able to start our server and connect to it with +our client. + +In one terminal: + +```sh +$ node server.js +``` + +In another: + +```sh +$ node client.js "Namey McNameface" +``` + +![](images/fig1.4.png) +*Client server interaction* + +Further if we kill the client with `Ctrl+C` the server will output: + +```sh +-> client disconnected +``` + +But if we kill the server, the client will output: + +```sh +-> disconnected by server +``` + +### How it works + +Our server uses `net.createServer` to instantiate a TCP server. + +This returns an object with a `listen` method which is called +with two arguments, `1337` and `localhost` which instructors +our server to listen on port `1337` on the local loop network interface. + + +The `net.createServer` method is passed a connection handler function, +which is called every time a new connection to the server is established. + +This function receives a single argument, the `socket`. + +We listen for a `data` event on the `socket`, and then send the +data back to the client embedded inside a greeting message, by +passing this greeting to the `socket.write` method. + +We also listen for a `close` event, which will detect when the +client closes the connection and log a message if it does. + +Our client uses the `net.connect` method passing it the same port +and hostname as defined in our server, which in turn returns a `socket`. + +We immediately write the `name` to the socket, and attach a `data` +listener in order to receive a response from the server. When +we get a response we simply log it to the terminal, we have to +call the `toString` method on incoming data because sockets deliver +raw binary data in the form of Node buffers (this string conversion +happens implicitly on our server when we embed the Buffer into the +greeting string). + +Finally our client also listens for a `close` event, which will +trigger in cases where the server ends the connection. + +### There's more + +Let's learn a little more about sockets, and the different types of sockets that are available. + +#### `net` sockets are streams + +Previous recipes in this chapter have alluded to streams, +we'll be studying these in depth in **Chapter 3 Using Streams**. + +However we would be remiss if we didn't mention that TCP sockets +implement the streams interface. + +In our main recipe, the `client.js` file contains the following code: + +```js +socket.on('data', (data) => { + console.log(data.toString()) +}) +``` + +We can write this more succinctly like so: + +```js +socket.pipe(process.stdout) +``` + +Here we pipe from the socket to Standard out (see the first recipe of this chapter, *Interfacing with standard I/O*) + +In fact sockets are both readable and writable (known as duplex streams). + +We can even create an echo server in one line of code: + +```js +require('net').createServer((socket) => socket.pipe(socket)).listen(1338) +``` + +The readable interface pipes directly back to the writable interface +so all incoming data is immediately written back out. + +Likewise, we can create a client for our echo server in one line: + +```js +process.stdin.pipe(require('net').connect(1338)).pipe(process.stdout) +``` + +We pipe Standard input through a socket that's connected to our echo +server and then pipe anything that comes through the socket to Standard out. + + +#### Unix Sockets + +The `net` module also allows us to communicate across Unix sockets, these +are special files that can be place on the file system. + +All we have to do is listen on and connect to a file path instead of a +port number and hostname. + +In `client.js` we modify the following: + +```js +const socket = net.connect(1337, 'localhost') +``` + +To this: + +```js +const socket = net.connect('/tmp/my.socket') +``` + +The last line of `server.js` looks like so: + +```js +}).listen(1337, 'localhost') +``` + +We simply change it to the following: + +```js +}).listen('/tmp/my.socket') +``` + +Now our client and server can talk over a Unix socket instead of the network. + +> #### IPC ![](../info.png) +> Unix sockets are primarily useful for low level IPC (Inter Process Communication), +however for general IPC needs the `child_process` module supplies a more convenient high level abstraction. + + +#### UDP Sockets + +Whilst TCP is a protocol built for reliability, UDP is minimalistic and +more suited to use cases where speed is more important than consistency +(for instance gaming or media streaming). + +Node supplies UDP via the `dgram` module (UDP stands for User Datagram Protocol). + +Let's reimplement our recipe with UDP. + +First we'll rewrite `client.js`: + +```js +const dgram = require('dgram') + +const socket = dgram.createSocket('udp4') +const name = process.argv[2] || 'Dave' + +socket.bind(1400) +socket.send(name, 1339) + +socket.on('message', (data) => { + console.log(data.toString()) +}) +``` + +Notice that we're no longer listening for a `close` event, +this is because it's now pointless to do so because our server +(as we'll see) is incapable of closing the client connection. + +Let's implement the `server.js` file: + +```js +const dgram = require('dgram') + +const socket = dgram.createSocket('udp4') +socket.bind(1339) + +socket.on('message', (name) => { + socket.send(`Hi ${name}!`, 1400) +}) +``` + +Now, the server looks much more like a client than server. + +This is because there's no real concept of server-client architecture +with UDP - that's implemented by the TCP layer. + +There is only sockets, that bind to a specific port and listen. + +We cannot bind two processes to the same port, so to get similar functionality +we actually have to bind to two ports. There is a way to have multiple processes +bind to the same port (using the `reuseAddr` option), but then we would have to +deal with both processes receiving the same packets. Again, this is something TCP usually deals with. + +Our client binds to port `1400`, and sends a message to port `1399`, whereas our server binds to port `1339` (so it can receive the clients message) but sends a message to port `1400` (which the client will receive). + +Notice we use a `send` method instead of a `write` method as in the main recipe. The `write` method is part of the streams API, UDP sockets are not streams (the paradigm doesn't fit because they're not reliable nor persistent). + +Likewise, we no longer listen for a `data` event, but a ` message` event. Again the `data` event belongs to the streams API, whereas `message` is part of the `dgram` module. + +We'll notice that the server (like the client) no longer listens for a `close` event, +this is because the sockets are bound to different ports so there's not way +(without a higher level protocol like TCP) of triggering a close from the other side. + +### See also + +* TODO +* Interfacing with standard I/O +* making clients and servers chapter +* streams chapter? +* wielding express +* getting hapi +* microservices chapter? + diff --git a/2-Coordinating-IO/images/fig1.1.png b/2-Coordinating-IO/images/fig1.1.png new file mode 100644 index 0000000..1fb902c Binary files /dev/null and b/2-Coordinating-IO/images/fig1.1.png differ diff --git a/2-Coordinating-IO/images/fig1.2.png b/2-Coordinating-IO/images/fig1.2.png new file mode 100644 index 0000000..ba92808 Binary files /dev/null and b/2-Coordinating-IO/images/fig1.2.png differ diff --git a/2-Coordinating-IO/images/fig1.3.png b/2-Coordinating-IO/images/fig1.3.png new file mode 100644 index 0000000..b398968 Binary files /dev/null and b/2-Coordinating-IO/images/fig1.3.png differ diff --git a/2-Coordinating-IO/images/fig1.4.png b/2-Coordinating-IO/images/fig1.4.png new file mode 100644 index 0000000..4a9844b Binary files /dev/null and b/2-Coordinating-IO/images/fig1.4.png differ diff --git a/2-Coordinating-IO/images/fig1.5.png b/2-Coordinating-IO/images/fig1.5.png new file mode 100644 index 0000000..976c9c3 Binary files /dev/null and b/2-Coordinating-IO/images/fig1.5.png differ diff --git a/2-Coordinating-IO/source/communicating-over-sockets/client.js b/2-Coordinating-IO/source/communicating-over-sockets/client.js new file mode 100644 index 0000000..08c9b8f --- /dev/null +++ b/2-Coordinating-IO/source/communicating-over-sockets/client.js @@ -0,0 +1,16 @@ +'use strict' + +const net = require('net') + +const socket = net.connect(1337, 'localhost') +const name = process.argv[2] || 'Dave' + +socket.write(name) + +socket.on('data', (data) => { + console.log(data.toString()) +}) + +socket.on('close', () => { + console.log('-> disconnected by server') +}) \ No newline at end of file diff --git a/2-Coordinating-IO/source/communicating-over-sockets/net-sockets-are-streams/client.js b/2-Coordinating-IO/source/communicating-over-sockets/net-sockets-are-streams/client.js new file mode 100644 index 0000000..a5eeb2b --- /dev/null +++ b/2-Coordinating-IO/source/communicating-over-sockets/net-sockets-are-streams/client.js @@ -0,0 +1,14 @@ +'use strict' + +const net = require('net') + +const socket = net.connect(1337) +const name = process.argv[2] || 'Dave' + +socket.write(name) + +socket.pipe(process.stdout) + +socket.on('close', () => { + console.log('-> disconnected by server') +}) \ No newline at end of file diff --git a/2-Coordinating-IO/source/communicating-over-sockets/net-sockets-are-streams/echo-client.js b/2-Coordinating-IO/source/communicating-over-sockets/net-sockets-are-streams/echo-client.js new file mode 100644 index 0000000..3119883 --- /dev/null +++ b/2-Coordinating-IO/source/communicating-over-sockets/net-sockets-are-streams/echo-client.js @@ -0,0 +1,3 @@ +'use strict' + +process.stdin.pipe(require('net').connect(1338)).pipe(process.stdout) \ No newline at end of file diff --git a/2-Coordinating-IO/source/communicating-over-sockets/net-sockets-are-streams/echo-server.js b/2-Coordinating-IO/source/communicating-over-sockets/net-sockets-are-streams/echo-server.js new file mode 100644 index 0000000..998f7e9 --- /dev/null +++ b/2-Coordinating-IO/source/communicating-over-sockets/net-sockets-are-streams/echo-server.js @@ -0,0 +1,3 @@ +'use strict' + +require('net').createServer((socket) => socket.pipe(socket)).listen(1338) \ No newline at end of file diff --git a/2-Coordinating-IO/source/communicating-over-sockets/net-sockets-are-streams/server.js b/2-Coordinating-IO/source/communicating-over-sockets/net-sockets-are-streams/server.js new file mode 100644 index 0000000..8e25382 --- /dev/null +++ b/2-Coordinating-IO/source/communicating-over-sockets/net-sockets-are-streams/server.js @@ -0,0 +1,13 @@ +'use strict' + +const net = require('net') + +net.createServer((socket) => { + console.log('-> client connected') + socket.once('data', name => { + socket.write(`Hi ${name}!`) + }) + socket.on('close', () => { + console.log('-> client disconnected') + }) +}).listen(1337) \ No newline at end of file diff --git a/2-Coordinating-IO/source/communicating-over-sockets/server.js b/2-Coordinating-IO/source/communicating-over-sockets/server.js new file mode 100644 index 0000000..eaa9fc8 --- /dev/null +++ b/2-Coordinating-IO/source/communicating-over-sockets/server.js @@ -0,0 +1,13 @@ +'use strict' + +const net = require('net') + +net.createServer((socket) => { + console.log('-> client connected') + socket.on('data', name => { + socket.write(`Hi ${name}!`) + }) + socket.on('close', () => { + console.log('-> client disconnected') + }) +}).listen(1337, 'localhost') \ No newline at end of file diff --git a/2-Coordinating-IO/source/communicating-over-sockets/udp-sockets/client.js b/2-Coordinating-IO/source/communicating-over-sockets/udp-sockets/client.js new file mode 100644 index 0000000..94f6d18 --- /dev/null +++ b/2-Coordinating-IO/source/communicating-over-sockets/udp-sockets/client.js @@ -0,0 +1,13 @@ +'use strict' + +const dgram = require('dgram') + +const socket = dgram.createSocket('udp4') +const name = process.argv[2] || 'Dave' + +socket.bind(1400) +socket.send(name, 1339) + +socket.on('message', (data) => { + console.log(data.toString()) +}) diff --git a/2-Coordinating-IO/source/communicating-over-sockets/udp-sockets/server.js b/2-Coordinating-IO/source/communicating-over-sockets/udp-sockets/server.js new file mode 100644 index 0000000..eebebf6 --- /dev/null +++ b/2-Coordinating-IO/source/communicating-over-sockets/udp-sockets/server.js @@ -0,0 +1,10 @@ +'use strict' + +const dgram = require('dgram') + +const socket = dgram.createSocket('udp4') +socket.bind(1339) + +socket.on('message', (name) => { + socket.send(`Hi ${name}!`, 1400) +}) diff --git a/2-Coordinating-IO/source/communicating-over-sockets/unix-sockets/client.js b/2-Coordinating-IO/source/communicating-over-sockets/unix-sockets/client.js new file mode 100644 index 0000000..baf60fe --- /dev/null +++ b/2-Coordinating-IO/source/communicating-over-sockets/unix-sockets/client.js @@ -0,0 +1,16 @@ +'use strict' + +const net = require('net') + +const socket = net.connect('/tmp/my.socket') +const name = process.argv[2] || 'Dave' + +socket.write(name) + +socket.on('data', (data) => { + console.log(data.toString()) +}) + +socket.on('close', () => { + console.log('-> disconnected by server') +}) \ No newline at end of file diff --git a/2-Coordinating-IO/source/communicating-over-sockets/unix-sockets/server.js b/2-Coordinating-IO/source/communicating-over-sockets/unix-sockets/server.js new file mode 100644 index 0000000..d5a191a --- /dev/null +++ b/2-Coordinating-IO/source/communicating-over-sockets/unix-sockets/server.js @@ -0,0 +1,13 @@ +'use strict' + +const net = require('net') + +net.createServer((socket) => { + console.log('-> client connected') + socket.on('data', name => { + socket.write(`Hi ${name}!`) + }) + socket.on('close', () => { + console.log('-> client disconnected') + }) +}).listen('/tmp/my.socket') \ No newline at end of file diff --git a/2-Coordinating-IO/source/fetching-meta-data/checking-file-existence/check.js b/2-Coordinating-IO/source/fetching-meta-data/checking-file-existence/check.js new file mode 100644 index 0000000..0008c51 --- /dev/null +++ b/2-Coordinating-IO/source/fetching-meta-data/checking-file-existence/check.js @@ -0,0 +1,17 @@ +'use strict' + +const fs = require('fs') + +const exists = (file) => new Promise((resolve, reject) => { + fs.access(file, (err) => { + if (err) { + if (err.code !== 'ENOENT') { return reject(err) } + return resolve({file, exists: false}) + } + resolve({file, exists: true}) + }) +}) + +exists(process.argv[2]) + .then(({file, exists}) => console.log(`"${file}" does${exists ? '' : ' not'} exist`)) + .catch(console.error) \ No newline at end of file diff --git a/2-Coordinating-IO/source/fetching-meta-data/getting-symlink-information/meta.js b/2-Coordinating-IO/source/fetching-meta-data/getting-symlink-information/meta.js new file mode 100644 index 0000000..89a835e --- /dev/null +++ b/2-Coordinating-IO/source/fetching-meta-data/getting-symlink-information/meta.js @@ -0,0 +1,66 @@ +'use strict' + +const fs = require('fs') +const path = require('path') +const tableaux = require('tableaux') + +const write = tableaux( + {name: 'Name', size: 20}, + {name: 'Created', size: 30}, + {name: 'Inode', size: 10}, + {name: 'Mode', size: 8}, + {name: 'Lnks', size: 4}, + {name: 'Size', size: 6} +) + +function print(dir) { + fs.readdirSync(dir) + .map((file) => ({file, dir})) + .map(toMeta) + .forEach(output) + write.newline() +} + +function toMeta({file, dir}) { + const stats = fs.lstatSync(path.join(dir, file)) + let {birthtime, ino, mode, nlink, size} = stats + birthtime = birthtime.toUTCString() + mode = mode.toString(8) + size += 'B' + return { + file, + dir, + info: [birthtime, ino, mode, nlink, size], + isDir: stats.isDirectory(), + isSymLink: stats.isSymbolicLink() + } +} + +function output({file, dir, info, isDir, isSymLink}) { + if (isSymLink) { + outputSymlink(file, dir, info) + return + } + write(file, ...info) + if (!isDir) { return } + const p = path.join(dir, file) + write.arrow() + fs.readdirSync(p).forEach((f) => { + const stats = fs.lstatSync(path.join(p, f)) + const style = stats.isDirectory() ? 'bold' : 'dim' + if (stats.isSymbolicLink()) { f = '\u001b[33m' + f + '\u001b[0m'} + write[style](f) + }) + write.newline() +} + +function outputSymlink(file, dir, info) { + write('\u001b[33m' + file + '\u001b[0m', ...info) + process.stdout.write('\u001b[33m') + write.arrow(4) + write.bold(fs.readlinkSync(path.join(dir, file))) + process.stdout.write('\u001b[0m') + write.newline() +} + +print(process.argv[2] || '.') diff --git a/2-Coordinating-IO/source/fetching-meta-data/getting-symlink-information/my-folder/absolute-symlink b/2-Coordinating-IO/source/fetching-meta-data/getting-symlink-information/my-folder/absolute-symlink new file mode 120000 index 0000000..cad2309 --- /dev/null +++ b/2-Coordinating-IO/source/fetching-meta-data/getting-symlink-information/my-folder/absolute-symlink @@ -0,0 +1 @@ +/tmp \ No newline at end of file diff --git a/2-Coordinating-IO/source/fetching-meta-data/getting-symlink-information/my-folder/link-to-symlink b/2-Coordinating-IO/source/fetching-meta-data/getting-symlink-information/my-folder/link-to-symlink new file mode 120000 index 0000000..8d501ff --- /dev/null +++ b/2-Coordinating-IO/source/fetching-meta-data/getting-symlink-information/my-folder/link-to-symlink @@ -0,0 +1 @@ +my-symlink \ No newline at end of file diff --git a/2-Coordinating-IO/source/fetching-meta-data/getting-symlink-information/my-folder/my-file b/2-Coordinating-IO/source/fetching-meta-data/getting-symlink-information/my-folder/my-file new file mode 100644 index 0000000..19e7bc3 --- /dev/null +++ b/2-Coordinating-IO/source/fetching-meta-data/getting-symlink-information/my-folder/my-file @@ -0,0 +1 @@ +my edit diff --git a/2-Coordinating-IO/source/fetching-meta-data/getting-symlink-information/my-folder/my-private-file b/2-Coordinating-IO/source/fetching-meta-data/getting-symlink-information/my-folder/my-private-file new file mode 100644 index 0000000..e69de29 diff --git a/2-Coordinating-IO/source/fetching-meta-data/getting-symlink-information/my-folder/my-subdir/another-file b/2-Coordinating-IO/source/fetching-meta-data/getting-symlink-information/my-folder/my-subdir/another-file new file mode 100644 index 0000000..e69de29 diff --git a/2-Coordinating-IO/source/fetching-meta-data/getting-symlink-information/my-folder/my-subdir/my-subsubdir/too-deep b/2-Coordinating-IO/source/fetching-meta-data/getting-symlink-information/my-folder/my-subdir/my-subsubdir/too-deep new file mode 100644 index 0000000..e69de29 diff --git a/2-Coordinating-IO/source/fetching-meta-data/getting-symlink-information/my-folder/my-subdir/subdir-symlink b/2-Coordinating-IO/source/fetching-meta-data/getting-symlink-information/my-folder/my-subdir/subdir-symlink new file mode 120000 index 0000000..993f945 --- /dev/null +++ b/2-Coordinating-IO/source/fetching-meta-data/getting-symlink-information/my-folder/my-subdir/subdir-symlink @@ -0,0 +1 @@ +another-file \ No newline at end of file diff --git a/2-Coordinating-IO/source/fetching-meta-data/getting-symlink-information/my-folder/my-symlink b/2-Coordinating-IO/source/fetching-meta-data/getting-symlink-information/my-folder/my-symlink new file mode 120000 index 0000000..6f787df --- /dev/null +++ b/2-Coordinating-IO/source/fetching-meta-data/getting-symlink-information/my-folder/my-symlink @@ -0,0 +1 @@ +my-file \ No newline at end of file diff --git a/2-Coordinating-IO/source/fetching-meta-data/getting-symlink-information/my-folder/relative-symlink b/2-Coordinating-IO/source/fetching-meta-data/getting-symlink-information/my-folder/relative-symlink new file mode 120000 index 0000000..30676ba --- /dev/null +++ b/2-Coordinating-IO/source/fetching-meta-data/getting-symlink-information/my-folder/relative-symlink @@ -0,0 +1 @@ +../meta.js \ No newline at end of file diff --git a/2-Coordinating-IO/source/fetching-meta-data/getting-symlink-information/my-folder/too-deep b/2-Coordinating-IO/source/fetching-meta-data/getting-symlink-information/my-folder/too-deep new file mode 120000 index 0000000..675b184 --- /dev/null +++ b/2-Coordinating-IO/source/fetching-meta-data/getting-symlink-information/my-folder/too-deep @@ -0,0 +1 @@ +my-subdir/my-subsubdir/too-deep \ No newline at end of file diff --git a/2-Coordinating-IO/source/fetching-meta-data/manipulating-meta-data/make-file-efficiently.js b/2-Coordinating-IO/source/fetching-meta-data/manipulating-meta-data/make-file-efficiently.js new file mode 100644 index 0000000..76f6308 --- /dev/null +++ b/2-Coordinating-IO/source/fetching-meta-data/manipulating-meta-data/make-file-efficiently.js @@ -0,0 +1,26 @@ +'use strict' + +const fs = require('fs') +const {execSync} = require('child_process') + +const file = process.argv[2] +if (!file) { + console.error('specify a file') + process.exit(1) +} +try { + fs.accessSync(file) + console.error('file already exists') + process.exit(1) +} catch (e) { + makeIt() +} + +function makeIt() { + const nobody = Number(execSync('id -u nobody').toString().trim()) + const fd = fs.openSync(file, 'w') + fs.fchmodSync(fd, 0) + fs.fchownSync(fd, nobody, nobody) + console.log(file + ' created') +} + diff --git a/2-Coordinating-IO/source/fetching-meta-data/manipulating-meta-data/make-file.js b/2-Coordinating-IO/source/fetching-meta-data/manipulating-meta-data/make-file.js new file mode 100644 index 0000000..57c26f9 --- /dev/null +++ b/2-Coordinating-IO/source/fetching-meta-data/manipulating-meta-data/make-file.js @@ -0,0 +1,25 @@ +'use strict' + +const fs = require('fs') +const {execSync} = require('child_process') + +const file = process.argv[2] +if (!file) { + console.error('specify a file') + process.exit(1) +} +try { + fs.accessSync(file) + console.error('file already exists') + process.exit(1) +} catch (e) { + makeIt() +} + +function makeIt() { + const nobody = Number(execSync('id -u nobody').toString().trim()) + fs.writeFileSync(file, '') + fs.chownSync(file, nobody, nobody) + fs.chmodSync(file, 0) + console.log(file + ' created') +} \ No newline at end of file diff --git a/2-Coordinating-IO/source/fetching-meta-data/meta.js b/2-Coordinating-IO/source/fetching-meta-data/meta.js new file mode 100644 index 0000000..95ae804 --- /dev/null +++ b/2-Coordinating-IO/source/fetching-meta-data/meta.js @@ -0,0 +1,51 @@ +'use strict' + +const fs = require('fs') +const path = require('path') +const tableaux = require('tableaux') + +const write = tableaux( + {name: 'Name', size: 20}, + {name: 'Created', size: 30}, + {name: 'Inode', size: 10}, + {name: 'Mode', size: 8}, + {name: 'Lnks', size: 4}, + {name: 'Size', size: 6} +) + +function print(dir) { + fs.readdirSync(dir) + .map((file) => ({file, dir})) + .map(toMeta) + .forEach(output) + write.newline() +} + +function toMeta({file, dir}) { + const stats = fs.statSync(path.join(dir, file)) + let {birthtime, ino, mode, nlink, size} = stats + birthtime = birthtime.toUTCString() + mode = mode.toString(8) + size += 'B' + return { + file, + dir, + info: [birthtime, ino, mode, nlink, size], + isDir: stats.isDirectory() + } +} + +function output({file, dir, info, isDir}) { + write(file, ...info) + if (!isDir) { return } + const p = path.join(dir, file) + write.arrow() + fs.readdirSync(p).forEach((f) => { + const stats = fs.statSync(path.join(p, f)) + const style = stats.isDirectory() ? 'bold' : 'dim' + write[style](f) + }) + write.newline() +} + +print(process.argv[2] || '.') diff --git a/2-Coordinating-IO/source/fetching-meta-data/my-folder/my-file b/2-Coordinating-IO/source/fetching-meta-data/my-folder/my-file new file mode 100644 index 0000000..19e7bc3 --- /dev/null +++ b/2-Coordinating-IO/source/fetching-meta-data/my-folder/my-file @@ -0,0 +1 @@ +my edit diff --git a/2-Coordinating-IO/source/fetching-meta-data/my-folder/my-private-file b/2-Coordinating-IO/source/fetching-meta-data/my-folder/my-private-file new file mode 100644 index 0000000..e69de29 diff --git a/2-Coordinating-IO/source/fetching-meta-data/my-folder/my-subdir/another-file b/2-Coordinating-IO/source/fetching-meta-data/my-folder/my-subdir/another-file new file mode 100644 index 0000000..e69de29 diff --git a/2-Coordinating-IO/source/fetching-meta-data/my-folder/my-subdir/my-subsubdir/too-deep b/2-Coordinating-IO/source/fetching-meta-data/my-folder/my-subdir/my-subsubdir/too-deep new file mode 100644 index 0000000..e69de29 diff --git a/2-Coordinating-IO/source/fetching-meta-data/my-folder/my-symlink b/2-Coordinating-IO/source/fetching-meta-data/my-folder/my-symlink new file mode 120000 index 0000000..6f787df --- /dev/null +++ b/2-Coordinating-IO/source/fetching-meta-data/my-folder/my-symlink @@ -0,0 +1 @@ +my-file \ No newline at end of file diff --git a/2-Coordinating-IO/source/fetching-meta-data/package.json b/2-Coordinating-IO/source/fetching-meta-data/package.json new file mode 100644 index 0000000..a8ac8ce --- /dev/null +++ b/2-Coordinating-IO/source/fetching-meta-data/package.json @@ -0,0 +1,14 @@ +{ + "name": "fetching-meta-data", + "version": "1.0.0", + "description": "", + "main": "meta.js", + "scripts": { + "test": "echo \"Error: no test specified\" && exit 1" + }, + "author": "David Mark Clements", + "license": "MIT", + "dependencies": { + "tableaux": "^1.0.1" + } +} diff --git a/2-Coordinating-IO/source/interfacing-with-standard-io/base64.js b/2-Coordinating-IO/source/interfacing-with-standard-io/base64.js new file mode 100644 index 0000000..19a1796 --- /dev/null +++ b/2-Coordinating-IO/source/interfacing-with-standard-io/base64.js @@ -0,0 +1,6 @@ +'use strict' + +process.stdin.on('data', data => { + process.stderr.write(`Converting: "${data}" to base64\n`) + process.stdout.write(data.toString('base64') + '\n') +}) diff --git a/2-Coordinating-IO/source/interfacing-with-standard-io/piping/base64.js b/2-Coordinating-IO/source/interfacing-with-standard-io/piping/base64.js new file mode 100644 index 0000000..dc5a502 --- /dev/null +++ b/2-Coordinating-IO/source/interfacing-with-standard-io/piping/base64.js @@ -0,0 +1,4 @@ +'use strict' + +const encode = require('base64-encode-stream') +process.stdin.pipe(encode()).pipe(process.stdout) \ No newline at end of file diff --git a/2-Coordinating-IO/source/interfacing-with-standard-io/piping/package.json b/2-Coordinating-IO/source/interfacing-with-standard-io/piping/package.json new file mode 100644 index 0000000..b8e23bb --- /dev/null +++ b/2-Coordinating-IO/source/interfacing-with-standard-io/piping/package.json @@ -0,0 +1,16 @@ +{ + "name": "piping", + "version": "1.0.0", + "main": "base64.js", + "scripts": { + "test": "echo \"Error: no test specified\" && exit 1" + }, + "author": "David Mark Clements", + "license": "MIT", + "dependencies": { + "base64-encode-stream": "^1.0.0" + }, + "devDependencies": {}, + "keywords": [], + "description": "" +} diff --git a/2-Coordinating-IO/source/watching-files-and-directories/my-file.txt b/2-Coordinating-IO/source/watching-files-and-directories/my-file.txt new file mode 100644 index 0000000..9744e43 --- /dev/null +++ b/2-Coordinating-IO/source/watching-files-and-directories/my-file.txt @@ -0,0 +1 @@ +back again diff --git a/2-Coordinating-IO/source/watching-files-and-directories/package.json b/2-Coordinating-IO/source/watching-files-and-directories/package.json new file mode 100644 index 0000000..554bfe0 --- /dev/null +++ b/2-Coordinating-IO/source/watching-files-and-directories/package.json @@ -0,0 +1,15 @@ +{ + "name": "watching-files-and-directories", + "version": "1.0.0", + "description": "", + "main": "watcher.js", + "scripts": { + "test": "echo \"Error: no test specified\" && exit 1" + }, + "keywords": [], + "author": "David Mark Clements", + "license": "MIT", + "dependencies": { + "human-time": "0.0.1" + } +} diff --git a/2-Coordinating-IO/source/watching-files-and-directories/watcher.js b/2-Coordinating-IO/source/watching-files-and-directories/watcher.js new file mode 100644 index 0000000..4c45cf1 --- /dev/null +++ b/2-Coordinating-IO/source/watching-files-and-directories/watcher.js @@ -0,0 +1,44 @@ +'use strict' + +const fs = require('fs') +const human = require('human-time') + +const interval = 5007 +const file = process.argv[2] +let exists = false + +if (!file) { + console.error('supply a file') + process.exit(1) +} + +const created = ({birthtime}) => + !exists && (Date.now() - birthtime) < interval + +const missing = ({birthtime, mtime, atime, ctime}) => + !(birthtime|mtime|atime|ctime) + +const updated = (cur, prv) => cur.mtime !== prv.mtime + +fs.watchFile(file, {interval}, (cur, prv) => { + if (missing(cur)) { + const msg = exists ? 'removed' : 'doesn\'t exist' + exists = false + return console.log(`${file} ${msg}`) + } + + if (created(cur)) { + exists = true + return console.log(`${file} created ${human((cur.birthtime))}`) + } + + exists = true + + if (updated(cur, prv)) { + return console.log(`${file} updated ${human((cur.mtime))}`) + } + + console.log(`${file} modified ${human((cur.mtime))}`) +}) + + diff --git a/2-Coordinating-IO/source/watching-files-and-directories/watching-with-chokidar/package.json b/2-Coordinating-IO/source/watching-files-and-directories/watching-with-chokidar/package.json new file mode 100644 index 0000000..ff408a5 --- /dev/null +++ b/2-Coordinating-IO/source/watching-files-and-directories/watching-with-chokidar/package.json @@ -0,0 +1,16 @@ +{ + "name": "watching-with-chokidar", + "version": "1.0.0", + "description": "", + "main": "index.js", + "scripts": { + "test": "echo \"Error: no test specified\" && exit 1" + }, + "keywords": [], + "author": "David Mark Clements", + "license": "MIT", + "dependencies": { + "chokidar": "^1.6.0", + "human-time": "0.0.1" + } +} diff --git a/2-Coordinating-IO/source/watching-files-and-directories/watching-with-chokidar/watcher.js b/2-Coordinating-IO/source/watching-files-and-directories/watching-with-chokidar/watcher.js new file mode 100644 index 0000000..398c83d --- /dev/null +++ b/2-Coordinating-IO/source/watching-files-and-directories/watching-with-chokidar/watcher.js @@ -0,0 +1,28 @@ +'use strict' + +const chokidar = require('chokidar') +const human = require('human-time') +const watcher = chokidar.watch(process.argv[2] || '.', { + alwaysStat: true +}) + +watcher.on('ready', () => { + watcher + .on('add', (file, stat) => { + console.log(`${file} created ${human((stat.birthtime))}`) + }) + .on('unlink', (file) => { + console.log(`${file} removed`) + }) + .on('change', (file, stat) => { + const msg = (+stat.ctime === +stat.mtime) ? 'updated' : 'modified' + console.log(`${file} ${msg} ${human((stat.ctime))}`) + }) + .on('addDir', (dir, stat) => { + console.log(`${dir} folder created ${human((stat.birthtime))}`) + }) + .on('unlinkDir', (dir) => { + console.log(`${dir} folder removed`) + }) +}) + \ No newline at end of file diff --git a/2-Coordinating-IO/source/working-with-files/asynchronous-file-operations/clean.dat b/2-Coordinating-IO/source/working-with-files/asynchronous-file-operations/clean.dat new file mode 100644 index 0000000..7a137ed --- /dev/null +++ b/2-Coordinating-IO/source/working-with-files/asynchronous-file-operations/clean.dat @@ -0,0 +1,140 @@ +��b�V���������E��E�����h]k�������������0��R���|p}8R�@��_��R�S�x��!�S��|p}�S�@��_��v�yS�����������@��_�����������Y�(R�h]{�������������|�ha@R�-�-���|������������������R�����^�������������T��T��V��]��^�(d�`d�Xf�g��l�xr�8s��s��v�w��w�p}0U����_�V�0V��V�p}�V����_�����h]w������������x��wh] w�������������� wxi w��������8U��l w�������������T�U��U��U�xiw���������U�8-��lw����������������PU��U�a�^w���������T�V�����Xew`V�h])w��������������-wxi-w��������0W��l-w�������������V�W��W��W�`2��W�xi9w���������W�����@-��l.w����������������HW��W��xi@w���������X�:H-��p}w}���������@��_������������Ɛx̐�̐�͐ϐА@ѐpҐhؐ +��������������ĐXe +�HƐh]W�������������襐HȐ�ȐP���������8�Ɛxi`���������Pǐ�A��p\����������Ɛ ǐ`���������ΐh]J}���������������S}h]V}���������������W}xiZ}���������Ȑ.�`oX}��������&�Ȑ�Ȑ^T}��������HȐɐ����XeJ}@ɐfg}����h��������hg+}HÐxÐ�ɐ�����e�}����h����hgq|��@��ʐ����h]�}������������P���}xi�}���������ʐ .�xi�}��������ː��(.��p�}��������-Xʐ�ʐ`���������ː�АHҐX���͐��|p}�͐@��_��ΐ�ΐ�ΐPϐ�|p}pϐ@��_��}E~����������@��_�͐��������������������襐h]�����������������l��������0͐^u���������x̐ΐ����Xep�hΐ0Аѐ8ѐL�hǐ�ǐ�ΐ����h]���������������5��xi�����������0�l��������������Hϐ�А�А�ѐ����������x��h]~�������������੐~xi"~������������P�^ ~��������0АhА��������Xe~�Аh]1~������������P��4~h]7~����������������8~xi;~�����������ѐ0.�`o9~��������&8ѐpѐ^5~��������ѐ�ѐ����Xe1~�ѐ�h����hg�}���� ː`ː`Ґ����h]P~������������x��T~xiY~��������Ӑ.8.��pU~��������-�Ґ�Ґ`���������Ӑ|(ܐ���_��Ր�Ր֐�֐X���Ր��|p}�Ր@��_��֐�֐�֐Pא�|p}pא@��_�b~*������@��_���������hؐ0ؐ8ِpِڐېh]����������������xi�����אl����xא�אh]�~������������蟐�~xi�~�������������ؐ@.�xi�~����������ؐ��H.��p�~����������-0ؐ�ؐh]�~������������蟐�~h]�~����������������~� ^�~��������8ِpِ�����Xe�~�ِh]�~��������������xi���������xڐP.��p���������-ڐHڐ�n��������5�ڐh]��������������xi ��������hېX.�^��������ې8ې����Xe�ې�h����hg�~�ڐ�ې�ې����hg�~�ؐ�ِ�ې����`�����������@��ÐHȐ�ȐXʐ0Аѐ8ѐ�Ґ0ؐ8ِpِڐې`ݐh���3�@@��O��Y�Xi�xs�H������˃������P��%�h]4������������蟐<xiB����������ݐ`.�xiA���������ސ��h.��p=���������-`ݐ�ݐ�n=���������5(ސ`���������ސK����@����)�0f��p��r��s����Տ��h��`��X��������X�������|p}��@��_�������������|p}���@��_�E�������@��_���������h��h]����������������xi������������p.�xi�����������������x.�^���������h���������Xe��0���h����hg0� hސ�ސ�������hgL~ Ӑ`Ӑ�������H��������`�����������@��ÐHȐ�ȐXʐ0Аѐ8ѐ�Ґ0ؐ8ِpِڐې`ݐh��8���|p}x��إ������ج�x����`��x��8��ر�H��h����� ������������ԃփ8ƒ�ƒ�ȃ�Ƀ�Ƀ�˃�̃p̓�ԃ�Ճ�փ�ۃ�ۃ`܃����������������8�������������������������(��������������8��p��(�`�`��� �x�������X�����0�h��@������,�x-�x.�8/��T��T��V��]��^�(d�`d�Xf�g��l�xr�8s��s��v�w��w��}��~�`�������x��H����ȗ�@�����H����@�����0�����@�����0�����(��P�����8�����H��H��������`�����������@��ÐHȐ�ȐXʐ0Аѐ8ѐ�Ґ0ؐ8ِpِڐې`ݐh����������������������H�������`�����X�H�������H�8�p����������������������P �@!�x!�p"�0#� $�X$��&�H'�8(�p(��*�p+�0,�h-��.� /��/�1��2�h]K�������������8��O�`�����������X��0��������|p}�����_�������������|p}������_�Q�x�h]�������������蟐�����xi�������������.�xi���������8�����.��p���������-�����h]!�������������P��$�xi*�������������.�xi)���������@�����.��p%���������-�����`o���������P��X��h]x�����������������xi����������@���.��p����������-�����`o,������������X��h]ـ��������������������xi����������@���.��p����������-�����h]��������������蟐��h]�������������P���xi +�����������8���.�`o���������'������p���������-���P��`o����������X�����h]�������������蟐 �h]%����������������.�xi1�������������.�`o/���������&H������p!�����������-�����`o ��������������`o�������������H��`����������^� �����������Xe���h]��� ��������x������|p}8��@��_������8�� ����|p}���@��_�5� +����������@��_��������������X������|���*�����p����_��������������`�����X�H�������H�8�p���H��:-����v�= `�� ������h]A�������������P��D�xiJ������������.�xiI���������H�����.��pE���������-������nE����������5`��`����������������� ���������HC ���������������� ����|p}@��@��_��� ��@�� ����|p}���@��_�M����������@��_���������h]�����������5������������z����������� ��������h]�������������������`�����X�H�������H�8�p�����������H���l�����������������������������hg���(�����h]����h][����������������d�xii���������������.��pe���������-����h]n�������������p��x�`ok��������� �`�h]��������������0����xi����������@�p�l�����������������h]��������������0����xi������������h�l�������������������h]����������������������xi������������ Ol��������������X���(�H���h�h]�������������� ����h]��������������P�����l���������������������e^�����������������^����������X������� Xe��`�h]ˁ������������0��΁xi΁��������0�� p�l΁���������������h]ց������������0��فxiف����������� h�lف����������������h]������������������� xi������������� Ol��������������H����8�p�����h]��������������������h]��������������P�����l�����������������������^߁���������������^ԁ��������H� �����XeˁP �hgW� ����� ������h����hg=�������� �����`��������p +�����X&�P)�|�@ +�HC ��� ��������HC ����x��x ���|p}� �@��_�X �x �P%�!��|p}8�@��_��F�����������@��_�����������ҏ�uرh ���� � u�(���� ���� +��ߎH�� ������}6� �P��A�������*� � � ���������������������P �@!�x!�p"�0#�������������� ������������������������pn�h]����������������%�xi*�����������`��.��p&���������-��0�h]/�������������p��9�`o,���������x���`��������x�������A�������*� � pn�����b +� +�����|p}��@��_�`����� ��|p}@�@��_�;���������@��_���'���������ߎ�����������E�������������Э.this_function]�6�P��s�`����������������������@�x�pxyzP�������h�P�h]E�������������0��H�xiH���������h�h�lH��������������8�h]P���������������T�xiT���������(� OlT�����������������������@�h][������������� ��b�h]d�������������蟐l��lU�����������������@���^N����������� �����XeE�x�h]w�������������0��z�xiz���������H�p�lz����������������h]������������������xi����������� Ol������������������p������רh]�������������� ����h]��������������P�����l������������������� �`���^����������`������Xew�X�`���������X"�8%��.�(/�p/� 1�h1��1�(7�� +����|p}0�@��_����0����|p}��@��_����֩������@��_�©��������h�����0��x��h�����`��������H�H�����P���P �@!�x!�p"�0#� $�X$�X1�X2��3��4��7��\��M� N�P�XP�hj��j�0l�xl�h]��������������0����xi������������h�l������������������h]����������������‚xi‚��������� � Ol‚������������P �� � !�@!�x!���h]ɂ���������������҂h]Ԃ������������蟐܂�lÂ������������������ �!�΀^���������� ��!�����Xe��"�h]��������������0����xi�����������"�p�l��������������p"��"�h]������������������xi�����������#� Ol��������������0#�h#�$� $�X$�PI�h]������������������h]�������������P�� ��l��������������������#��#�%�^�����������"��$�����Xe���$����������������������P �@!�x!�p"�0#� $�X$��&�H'�8(�p(�����H��������ؤ�hg���0�������h]�������������0���xi�����������&��l��������������&��&�h]&���������������*�xi*�����������'� Ol*�������������H'��'�(�8(�p(�(;�h]1�������������蟐9�h];�������������P��>��l+������������������'�(�^$���������'��(�����Xe�)�hg�������( +����� 4�������������x����`��Й�H��x��Р�ॐШ�Ȫ�ح����h)�P2��2�p��łXł�ł�Ƃ ǂقh]P����������������Y�xi\���������+��.��pZ����������0�*��*�h]e�������������0��h�xih����������+���lh�������������p+��+�h]o���������������s�xis����������,� Ols�������������0,�h,�-� -��-�@c�xiz����������P-��.�h]}������������������xi������������-��.�`o����������'h-��-��lt������������������,��,�^m����������+�(.�����Xee��.�h]��������������p����h]��������������0����xi�����������/���l�������������� /�X/�h]������������������xi����������H0� Ol���������������/�0��0��0�1��M�xi�����������1��.�h]ă������������ ��˃�l�������������������`0��0���^�����������/�P1�����Xe���1��h����hg���.��1�2�����hgL�0+��.� 2�����h]ڃ������������0��݃`fӃ�2�HC x���� ����h]�����������������2�����ha����3�x��h]�����������������2������v�o��������^�������������p3��3�����Xe�����3��t�o�����"��x��X���@��_��4��4��4��o�B�0��84�����xi��������05���xi�������x5�c5�H5���������delimiterg�]!��5� ���Cxi�������(6��5�;��]!�@6��g;�xi�������6�H6��5�x6���������xi������7���xi����������6�07���������posix]!����7��DA"xi��������7��7�xi���������7�8��������� j�K�����4������h]"�H��������9�#�ha��8��HC ��� #�^����D������8�`8�����Xe����P9�`'��:�@�H̔h]-��������������7�2�H�Ȋ�(�������xi[��������:�H��@<�H��|p}�K�@��_� =�@=�r�C'�V� �>�@��?��|p}>�@��_�t�����������@��_���������������Ċ���C���v@�Ƹ‰H +?��k�P� +P?�:-���PE��s���� �>�v�= `>��A�N����Ҋ�Ҋ`֊�֊8A��A�0C��C��D�xK�(V��I��M��N��O�8P�W��W�X�@X�pA�hC�0E��K��|��|�`~��~����0�H1�(3�HC �:�� ��������HC �:�H +����HC �:�� +������������ȋ Hˋ +�ϋ 0�� ��� ��h��(@���h@�xB�pD�8N��t����`�`}������@�0�`B�h]��������������`>���xi����������� A��h]���������������A���ha}�8A��:�HC �:�`>���h]�����������������A�����^��������������A��@�����Xe����B�`�������B���XD�h]������������������xi�����������P�h]���������������C���ha��0C��:�HC �:�����h]�����������������C�����^��������������C�C�����Xe����D�`�������D�h]�����������������h]��������������PE���ha���D��:�HC �:�����:�(G���|p}HG�@��_�H�(H��n�!�H��|p}�H�@��_�̄���������@��_����������Q����8���P�@Q�xR���P��Х���p�����蛎`ˎ�ˎ�I��M��N��O�8P�W��W�X�@X��]�(^��^��^��`�a��a�(ŽpŽ�Î�������� "��"��\� ]�h]ф������������@�҄h]Մ������������?�ބxiބ��������HJ�X�lބ�������������I�J�xi������������J�/�`o����������'`J��J�`̈́����pK��� N�h]��������������PM���hä́xK��E����0���PE��s�0���ۏ�ۏ���C���v@�PM�Ƹ‰� �>�v�= �V�&�(5H +?��k�P� +P?�:-������`>��A�N���@�HC �:�@���h]����������������PM�����^��������������M��J�����Xe�����M��cȄ�����P�(K��O��P�h]��������������PM���xi������������N�/�xi����������8O���/��p�����������2�N�O�h]���������������C���n����������5�O�`o����������PO��O�h] �������������PM� +�p +����������8P�����Xe +�pP�`��������Q��U��a��b� i�k��n�PxS�X�[�^�E� S���|p}@S�@��_�T� T�`k�!�T��|p}�T�@��_������������@��_�I����������d�1 ��23x����56P��(��89X+�X��;<�.�5�>�>�?X��@���A(+�BW��W�X�@X��]�(^��^��^��`�a��a�8b��b�Pi��i�Hj��P� ��(� ��`������U�h]������������� �h]��������������V��ha�(V��Q�HC �:� �@��pA�hC�0E��K�`V�h]*�������������PM�+�xi/���������xW�/��p,���������2W�HW�h]:��������������V�>�h]A�������������?�J�h]K�������������PM�L�lJ�������������X�@X�^?����������W�xX�����Xe:��X�`��������hY��`��a��[�^�h�kov y�Q�p[���|p}�[�@��_�P\�p\��\�]��|p}0]�@��_�Z���|�������@��_�ŀ�����������6P��78�|�X+�:;h��.�=>�>�X��@A(+�x��Cp �� +��]�(^��^��^��`�a�� �� �� ��P��� ��(� ��h]h�������������PE�k�h]p��������������ٔy��pl���������-�]�(^�h]��������������PE���h]��������������0ٔ��xi����������@_��l���������������^�_��_��l������������������X_��_�^�����������^��_�����Xe�� `��h����hgd�`^�p`��`�����h]���������������V���h]��������������PE���^�����������`�a�����Xe��8a�hg&��W�Y� Y�����h]����������������Džb�8b�h]ȅ�������������V�̅�l�������������������a�b�Xe��pb�h]���������������V���xi����������Hc�X�l���������������b�c�xi����������c� /��p���������-`c��c�`��������pd��h��Q�xf���|p}�f�@��_�Xg�xg��g�h��|p}8h�@��_� �$�������@��_����������e�8N��h����hg���c�(d�i�����h],��������������A�8�h];��������������V�?�xiB����������i�`�`o@���������&�i��i�h]H��������������A�T�`oF���������&j�Hj�^9���������Pi��j�����Xe,��j�h]\��������������C�l�W��W�X�@X��]�(^��^��^��`�a��a�8b��b�Pi��i�Hj�(k�hl�h]o��������������V�s�xis����������l��ls�������������hl��l�8m�Xm�xi����������m�(/��lt������������������l�(m�xi����������(n�/0/��p����������-�m��m�^m���������(k�@n�����Xe\��n��I��M��N��O�8P�W��W�X�@X��]�(^��^��^��`�a��a�8b��b�Pi��i�Hj�(k�hl�8A��A�0C��C��D�xK�(V��I��M��N��O�8P�W��W�X�@X��]�(^��^��^��`�a��a�8b��b�Pi��i�Hj�(k�hl��p�0q��q�h]S��������������A�_�h]b���������������v�xq��q� t�h]w��������������A���h]���������������C���8A��A�0C��C��D�xK�(V��I��M��N��O�8P�W��W�X�@X��]�(^��^��^��`�a��a�8b��b�Pi��i�Hj�(k�hl��p�0q��q��q�u�z��{��|�����n����������5�q��lb�����������������0q�hq�^`����������p�Pt�����XeS��t�h]���������������C���`���������u��|��:��w���|p}�w�@��_�xx��x��x�8y��|p}Xy�@��_��� �������@��_���������z��{�h]���������������A�̇xi̇���������z�X�l̇������������z�Pz�xiև��������{�8/��pԇ��������0�z��z�xi�����������{�`�h]���������������A���`o����������&`{��{�`f���{�xi���������h|�`�`f�8|�hg�� {� |��|�����h]*��������������A�6�xi6���������0}�X�l6��������������|�}�xi@����������}�@/��p>���������0H}��}�`��������X~����:�`����|p}���@��_�@��`��������|p} ��@��_�C�e�������@��_������������h]R��������������A�^�`fK����`��������x��H���:������|p}���@��_�`�������� ���|p}@��@��_�k���������@��_���������xiz���������0��(2�`fs���hg&��}�~�0������hg��u�Hu�`������HC �:�H�����h]�����������������������ha�������:�h]������������������������vd���������^�������������`���������Xe��������td������"H��:�@��@��_�������Ȋ�d�p:�(������xi������� ��x5�����x5��|p}���@��_���������!`��@������|p}���@��_�����������@��_����������EX���n�H +����k�P� +Џ�:-����������~� @��v�= А�&�(5А����h��Б�x��蔑��������������蜑P�����������������8�����HC 8��� ��������HC 8��H +��������HC 8��� +�������� �����h]��������������А���HC 8�� ����H�� +`��0��`����������ȥ�h]����������������ˆ���Б�h]È������������А�Lj�l������������������h�����Xe����h]ӈ������������А�׈xi׈�����������X�l׈������������x�����xi����������h��H/��p߈��������-���8��xi�������������(2�`f������h����hgψ����� ������`������������h]��������������E �h]�������������А��xi���������P���l�������������蔑 �����ؕ�xi �����������P/��l�����������������h�����xi'������������/X/��p#���������- ��x��h]'�������������X��)�ha����8��HC 8���E)�^����������������������Xe�������`4�����P�����h]:����������������K�h]N�������������А�R�xiR�������������lR����������������Ș�`�����h]^�������������А�b�xib���������虑X�lb�������������������xil���������p��`/�`oj���������'��@���lS�������������������P��xis���������P��/h/��po���������-Ț� ��h]s���������������u�ha4����8��HC 8�����u�^����������������h������Xe����H��h]��������������А���h]������������������0��P�����h]��������������А���h]��������������X��ȉ�n����������5����l������������������蜑 ��^��������������������Xe��H��h]ԉ������������А�؉xi؉����������X�l؉���������������螑xi�������������p/��p����������-0��p��h]��������������X�����n����������5���`o�������������0��h]��������������А��xi�����������(2�^������������ؠ�����Xe�� ���h����hgЉ`��p���������h]�������������А�����h��Б�x��蔑��������������蜑P��������������ȡ���������x��Ч�xi���������8��X�l�������������ȡ���xi������������x/��p���������0P�����h]#���������������4�`o ���������أ���h]<�������������А�@�xiD������������`�^A�������������Ȥ�`������`oB���������&���Ȥ�Xe<����h����hg �P������������h]R�������������X��\�xik���������`��`�h]q�������������А�u�`oo���������&0��x��`fd�����h����hgN�������������p��`��0��`����������ȥ�����h]��������������А���`f{�Ч�HC 8��x5�����h]���������������� ������ha����h��8��h]���������������� �������v����������^�����������������������Xe���� ���t�������"x5�8�����@��_�����(��������������xi�����������E� ���E�|p}@��@��_��� ��@�����������|p}୑@��_����������@��_���������H +讑�k�P� +0��:-��� ���v�= 0��&�(50�����Ȱ�0��ر� ����HC ���� ��������HC ���H +��������HC ���� +�������� �����h]��������������0����HC ��� �������එ���x��h]����������������NJ��0��h]Ȋ������������0��̊�l������������������Ȱ���Xe��h��h]ڊ������������0��ފxiފ��������@��X�lފ������������ر���xi����������Ȳ��/��p����������0X�����h]��������������0����xi��������������l�������������� ��X�������xi����������@���/��l���������������������೑xi���������഑/�/��p���������-X�����`o����������಑���`fӊ8��HC ����E����h]�����������������������ha����ص����h]������������������������v����������^�������������0��h������Xe��������t�������"�E���x���@��_������������P���������xi���������pv�����pv��|p}���@��_�p�����ۑ!0�����ߑX���|p}P��@��_�)���������@��_������������@�ƑƸ‰H +X���k�P� +���:-��p��hϑ�̙� ��v�= �~����v]�i���(���őϑHƑ8ǑpǑpȑ`Α�Α�ϑPБ�Б`ёxב�ב�ߑ`���őHϑHC ��� ��������HC ��H +����HC ��� +��������x��P��p������Ƒ8ݑ�ޑh]6�������������X��?�xi?��������� ��X�l?�������������������xiK�������������/��pG���������-8��x��xi[���������0��(2�`fT����h����hg2����H��`������`d�����近h]h��������������~�n�h]h����������������n�had�(����HC ���~�h���X‘��|p}x‘@��_�8ÑXÑxÑ�Ñ�|p}đ@��_�x�e�������@��_����������ɑHƑ8ǑpǑpȑ`Α�Α�ϑPБ�Б`ёxב�ב(ؑ`ّؑ�ّh]}�������������@�~�xi����������@ő�/�`y������ő�Ƒh]��������������Ƒ��hay��ő���HC ��@���h]����������������Ƒ����^�������������HƑő����Xe�����Ƒ�ct�����ɑXő0ȑ�ȑh]��������������Ƒ��h]��������������X����xi�����������ǑX�l��������������pǑ�Ǒ�p����������/8Ǒ�Ǒh]��������������Ƒ��p�����������pȑ����Xe���ȑ`��������Pɑ�͑Hё�ڑ���Xˑ��|p}xˑ@��_�8̑X̑x̑ �̑�|p}͑@��_���e�������@��_���������pӑ`Α�Α�ϑPБ�Б`ёxב�ב(ؑ`ّؑ�ّ`������ Α8Бh]��������������p����h]��������������X����h]��������������Ƒ��l��������������`Α�Αh]��������������hϑ��ha��ϑ�ɑHC ��p����h]����������������hϑ����^��������������ϑ�Α����Xe�����ϑh]ŋ��������������ϋ�Б�Бh]Ћ������������hϑӋ�lŋ����������������PБ�БXeŋ�Бh]��������������hϑ��xi�����������ёX�l��������������`ё�ёxi����������Pґ�/��p����������0�ё ґ`���������ґ�ڑ�ɑ�ԑ��|p}Ց@��_��Ց�Ց֑�֑�|p}�֑@��_���_�������@��_���������xב�ב(ؑ`ّؑ�ّh]������������������h] ��������������ٔ��p���������-xב�בh]����������������$�h]'�������������hϑ*�^%���������(ؑ`ؑ����Xe��ؑh]C����������������I�xiM���������hّ`�h]S�������������hϑV�`oQ���������&8ّ�ّ^J����������ّ�ّHڑ����`oK���������&ّ�ّXeC��ّhg���ב�ؑ�ڑ�����h����hg܋hґ�ґ�ڑ�������(���őϑHƑ8ǑpǑpȑ`Α�Α�ϑPБ�Б`ёxב�ב(ؑ`ّؑ�ّܑPܑhݑXޑh]n����������������t�h]y��������������ٔ���pu���������-ܑPܑxi�����������ܑ(2�`f���ܑ�h����hgj��ܑݑ(ݑ����h]���������������˔��xi�����������ݑx5�l��������������hݑ�ݑ8ޑXޑh]��������������������l�������������������ݑ(ޑ`f���ޑHC ��pv�����h]����������������ߑ����ha����Hߑ��h]����������������ߑ�����v���������^��������������ߑ�ߑ����Xe�������t������"pv���h���@��_�������������h�� ����xiÌ�����`��h)����h)��|p}�%� @��_�������{��z�n� ���(���|p}���@��_�ތr� ������@��_�������������/����潳�PE����~���H +���k�P� +H��:-��(U�fA��� ���v�= H/����v ���������H��`�����p����������������������(������H��p��� � ��h�}X����5�@H��v��)��.�{�(j�)����x���:�8�������x��h��`����������(�HC x��� ��������HC x��H +��������HC x��� +��������H/������/�H����h]ߌ�����������������h]�������������������HC x��H/�����HC x���/������+�#X��h�����������0��`��h]������������������������h]��������������������l������������������`�����Xe����h]����������������������h]������������������l�����������������p�����Xe���h]����������������"�h]'����������������)��p#���������-������xi8���������`���`f1�0���h����hg����x���������h]A����������������E�h]H��������������˔M�xiM���������p��H�lM���������������@��������h]V����������������Z��lN�����������������������^F������������0������XeA����h]a����������������c�h]f��������������˔k�xik������������H�lk�������������(��`�������h]t����������������v��ll�����������������������^d������������P������Xea����h]�������������������h]��������������������p����������-��H��xi��������������`f������h����hg~������ ������`ɍ�������`��h]͍������������PE�֍��H��`�����p����������������������(������H��8������������x�h������ �X���p �� +�� ���xiٍ�������� ���/�h]ٍ���������������ڍhaɍ8��x��HC x��PE�ڍh]�����������������������^�����������������������Xe������x������|p}(��@��_������(������|p}���@��_���U�������@��_���������p���������x�h��c���������������h]�������������������h]�������������������xi����������x��X�l����������������H���p����������/������h]���������������� �p����������������Xe�H��`���������������������|p}��@��_�������������|p}���@��_� �U�������@��_���������x�h�h]�����������������xi������������l�������������x���H�h�h])����������������2��l�������������������8�xi8���������(�/�/��p4���������-�����n4���������5@�fI�����h����hg�����������X��h�����������0��`��������� +�0�����!�8$�`Z���������h]^�������������(U�e�h]h����������������l�xil�����������X�ll��������������P�h]m���������������s�haZ���x���z�h���� X�P#����7 ����ˈ: �/����潳�(U���fA��� ���v�= H/����v �H +���k�P� +H��:-��k�8 �J��،�( ��(�A +PE����~���h�( �N��HC x��(U�s�h]����������������������^���������������������Xe����0�`y�������� �h]}�������������h���h]������������������h]�������������������`o����������' �X�h]��������������( ���hay���x��HC x��h���h]����������������( �����^�������������p �������Xe����� �`ǎ����X +� �h]ˎ������������k�ҎxiՎ��������� +��/�h]Վ������������8 �֎haǎ� +�x��HC x��k�֎h]����������������8 �����^�������������� �� +�����Xe����� �x��� ���|p}� �@��_�������P��|p}p�@��_���G�������@��_���������������� ���c܎����P�x�8�h]��������������8 ���h]�������������������xi���������� �X�l�������������������p����������/��8�h]��������������8 ��p�����������������Xe����`������������( �����|p}��@��_�������@��|p}`�@��_��G�������@��_��������� ��h]�����������������xi������������l������������� �X����h]�������������8 �$��l���������������������xi*�����������/�/��p&���������-H����n&���������5��f;�0��h����hg �(�X�p�������H��`�����p����������������������(������H��8������������x�h������ �X���p �� +�� ������� ��P���� �X���p ��!��!�H"��"��"��#�P%��(�`*�+�n�hr�1�P1��1�07�h7��<��<�0B� C�XC��I�`L��������h]P��������������z�U�h]X����������������Z�xiZ�����������X�lZ�������������P���h][�������������h�a�haL��x��HC x���z�a�p��� � �H� �0#��%��*�h]����������������h�����^���������������������Xe����0�`g�������� �h]k�������������،�p�h]t�������������h�y�h]|�������������8 ���`oz���������' �X�h]��������������( ���hag���x��HC x��،���h]����������������( �����^�������������p �������Xe����� �`ʏ����X!� $�h]Ώ������������X�ԏh]؏������������( �ߏh]��������������( ����p����������/�!��!�h]��������������( ���h]��������������( ���r؏��������"�H"��"�h]��������������P#���haʏ�"�x��HC x��X���h]����������������P#�����^��������������#��"�����Xe�����#�`������$�x)�h]�����������������xi����������$��/�xi���������8%����/�h]��������������(��ha�P%�x�����r��~�ހhn���<X�P#����7 �/����潳�(U���fA��@��*�Ƹ‰ k�8 �J��h�( �N������(��ˈ: H��@���GpB� ���v�= H/����v �،�( ��(�A +H +���k�P� +H��:-���z�h���� PE����~���HC x������h]�����������������(�����^��������������(�%�����Xe����()�`������)��+�h] �������������@�!�xi$���������H*��/�h]$��������������*�%�ha�`*�x��HC x��@�%�h]�����������������*�����^�������������+�*�����Xe����8+����X��h�����������0��`��������� +�0�����!�8$��)��0�����x��x��H.���|p}h.�@��_�(/�H/��y�C'�/��|p}0�@��_�/�ʔ������@��_���������(3�1�P1��1�07�h7��<��<�0B� C�XC��I�pJ��J�L��Q��R��c+�����`2��1�H2�h]2��������������*�3�h]7�������������P#�=��p4���������11�P1�h]A��������������*�B�pA�����������1�����XeA�2�`���������2�`k��k��o��x��,��4���|p}�4�@��_��5��5��t�C$P6��|p}p6�@��_�D�ʔ������@��_����������8�07�h7��<��<�0B� C�XC��I�pJ��J�L��Q��R��R�(T�`T�h]P��������������*�Q�h]V�������������P#�\��pR���������-07�h7�`��������(8�j�0j�(3�0:���|p}P:�@��_�;�0;��h�!�;��|p}�;�@��_�^���������@��_����������U��<��<�0B� C�XC��I�pJ��J�L��Q��R��R�(T�`T��Y��Z�h]l�������������( �q�h]t�������������P#�z��pr���������0�<��<�`���������=��S��8��?���|p}�?�@��_��@��@��@� +PA��|p}pA�@��_�|�)�������@��_����������M�0B� C�XC��I�pJ��J�L��Q��R��R�h]�������������������xi�����������B��l��������������0B�hB�C��C�h]��������������8 ���h]���������������*���`o����������& C�XC��l�������������������B��B�xi����������XD�/�/��p����������-�C�(D�`���������D�L�(>�G���|p} G�@��_��G�H� H��H��|p}�H�@��_���t�������@��_����������I�pJ��J�h]N����������������P�xiP����������I� OlP��������������I��I�PJ�hK�h]W�������������8 �^�h]a��������������*�b�`o_���������&pJ��J�xie���������PK��/�`oc���������&�J� K��lQ�����������������J�@J�`fG��K�h]~��������������*��xi�����������L��/��p����������-L�PL�`�������� M��S�(>�(O���|p}HO�@��_�P�(P�HP��P��|p}�P�@��_����������@��_����������Q��R��R�h]�������������������xi����������R� Ol���������������Q��Q�xR�S�h]�������������8 � �h]��������������*��`o���������&�R��R��l�����������������(R�hR�`f��HS��h����hgz��L��L��S�����hg��pD��D��S�����h]3�������������( �:�h]=�������������P#�C��p;���������0(T�`T�`�������� U��h��8�(W���|p}HW�@��_�X�(X�HX��X��|p}�X�@��_�E�ۓ������@��_���������Xc��Y��Z��Z��`�0a��a�`g�h]U����������������Y�xiY���������Z��lY��������������Y��Y�xZ�[�h]e����������������n�h]q��������������*�r�`oo���������&�Z��Z��lZ�����������������(Z�hZ�xix����������[�/0��pt���������-H[��[�`��������p\��a��U�x^���|p}�^�@��_�X_�x_��_�`��|p}8`�@��_���2�������@��_����������`�0a�h]��������������(�!�h]$��������������*�%�^"����������`�0a�����Xe�ha�h]<��������������*�=�xiB���������8b�0��p>���������-�a�b�`���������b�0h��U��d���|p}e�@��_��e��e�f��f��|p}�f�@��_�E�ѓ������@��_���������`g�h]���������������(���xiÓ���������g�0�^����������`g��g�����Xe���g��h����hg8�Pb��b�Hh�����hgQ��[�(\�Xh������<��<�0B� C�XC��I�pJ��J�L��Q��R��R�(T�`T��Y��Z��Z��`�0a��a�`g��h����hg/��T��T��i�����hgh� =�`=��i�����f���0�07�h7��<��<�0B� C�XC��I�pJ��J�L��Q��R��R�(T�`T��Y��Z��Z��`�0a��a�`g�l�m�@m�Ho�pp�`q��q�s��s��s��h����hgL��7��7�Pk�����`�������k��o�h]��������������ހ�h]���������������� �xi ����������l��l �������������l�Pl��l�xm�h]����������������!�h]$��������������*�%�`o"���������&m�@m��l ������������������l��l�h]%�������������hn�&�ha��n�(3�HC x��ހ &�(��p��� � �H� �0#��%��*�Hn��r� ��h]����������������hn�����^�������������Ho��m�����Xe�����o�`.�����0p��s�h]2���������������8�h];����������������=�xi=����������p��l=�������������pp��p�@q��q�h]I�������������8 �P�h]S��������������*�T�`oQ���������&`q��q��l>������������������p�0q�h]T��������������r�U�ha.�hr�(3�HC x���� +U�h]�����������������r�����^�������������s�r�����Xe����@s�h]a�������������hn�i�h]n��������������r�t��pj���������-�s��s��nj���������5t�f~��0�h]��������������hn���07�h7��<��<�0B� C�XC��I�pJ��J�L��Q��R��R�(T�`T��Y��Z��Z��`�0a��a�`g�l�m�@m�Ho�pp�`q��q�s��s��s��t�xw��w�xi���������� w�/0��p����������-�t��v�h]���������������(���h]”�������������*�Ô^����������xw��w�����Xe���w��h����hg��8w�8x�Px�����hg]�Xt��t�`x�����1�P1��1�07�h7��<��<�0B� C�XC��I�pJ��J�L��Q��R��R�(T�`T��Y��Z��Z��`�0a��a�`g�l�m�@m�Ho�pp�`q��q�1�P1��1�07�h7��<��<�0B� C�XC��I�pJ��J�L��Q��R��R�(T�`T��Y��Z��Z��`�0a��a�`g�l�m�@m�Ho�pp�`q��q�s��s��s��t�xw��w���H��`�����p����������������������(������H��8������������x�h������ �X���p �� +�� ������� ��P���� �X���p ��!��!�H"��"��"��#�P%��(�`*�+�n�hr�1�P1��1�07�h7��<��<�0B� C�XC��I�pJ��J�L��Q��R��R�(T�`T��Y��Z��Z��`�0a��a�`g�l�m�@m�Ho�pp�`q��q�s��s��s��t�xw��w�耒���8��p�����`�������x�����(����@��������H�����ț�������袒 ���������঒Ч�`Д����`����h]Ԕ������������H��הxiڔ��������Ѐ��h]ڔ������������@��ܔhaД耒x��HC x��H�� ܔh]����������������@������^�����������������������Xe�������x�������|p}؃�@��_�������؄� X���|p}x��@��_�D�!�������@��_���������p��8��p�����`�������x�����(����@��������h]E��������������*�F�h]I����������������R�h]U��������������(�b�`oS���������&p�����xie���������P�� 0�`oc���������&��� ��^G���������8��h������XeE�����c@�����������Ј����h]h��������������*�i�h]m���������������t��pj���������1`�����h]x��������������*�y�px����������������Xex�H��`�������������0�������|p}��@��_�،����������|p}���@��_�{�!�������@��_���������8��x�����(����@��������h]���������������*���h]�������������������p����������-x�����h]�������������������xi��������������l��������������(��`�������h]���������������*����l���������������������菒xi����������ؐ�/(0��p����������-P�����`o����������莒���`�����������ؙ�p�������|p}���@��_����������`���|p}���@��_����������@��_���������@��������h]ƕ������������@��ɕxiɕ�����������X�lɕ������������@��x��xiՕ��������0��00��pѕ��������-�����h]��������������@����xi�������������]^�����������������X������`o����������&������Xe����h]�������������@�� �xi ������������^ +�������������蘒�������`o ���������&���蘒Xe�0��hg•H�������������h����hg��0��p��������h]��������������@����xi�������������X�l��������������H�����xi����������8��80��p����������0Ț���h]��������������@����h]�������������������xi����������0�� Ol��������������ț������(��h]Ö������������8 �ʖh]͖�������������(�ږ`o˖��������&�������l������������������H�����`o����������&���h��`f�����`��������`��裒���`��x��h����|p}���@��_�H��h��������|p}(��@��_���n�������@��_���������袒 ���������঒Ч�h]��������������8 ���h]���������������(��^�����������袒 ���������`o����������&袒 ��Xe��X��h]�����������������xi���������h���l���������������8��Ф����h] �������������8 �'��l�����������������������xi-������������/@0��p)���������-(�����h]@�������������8 �G�p@����������������Xe>�@���h����hg�ȥ�����������h]V����������������X�xiX���������H�� OlX�������������঒�����Ч�h]_�������������8 �f��lY�����������������`�����`fO���hg��P����������HC x��h)� ����h]�����������������������ha�������x��h]������������������������v͌��������^�������������H���������Xe��������t͌�����"h)�x�����@��_����������͌0����"����Ȋ�(�������������(�� �����xix������P��X.�����X.��|p}��@��_�Э���������p��h���|p}���@��_�����������@��_���������H +����k�P� +��:-��� p��v�= ��&�(5��Ȱ����h��HC h��� ��������HC h��H +��������HC h��� +�������� Ȱ���h]������������������HC h�� ����X��8��б�h]������������������`f�����HC h��X.�����h]����������������豒����ha����0��h��h]����������������豒�����v����������^�����������������������Xe����貒�t������"X.�h��H���@��_�೒೒����� ��P��$����xi������H���z��赒�z��|p}Œ @��_�ȶ�趒8��!!�ϒ h������|p}���@��_�їD�������@��_���������xɒ���z��dH +����k�P� +���:-�� ����*��8���’��I� h��v�= ���&�(5��������������������@�����`’Ò�Ē�ƒ0Ȓ�ȒPϒ�͒ؿ��’�ĒhȒHC `��� ��������HC `��H +��������HC `��� +�������� ���֗h]җ���������������֗HC `�� ������� ���X���������Òxǒ�Вh]ޗ����������������غ����h]��������������������lޗ�������������������Ⱥ�Xeޗ0��h]�������������������xi������������X�l�����������������ػ�xi������������H0��p���������- ��`��xi�����������(2�`f�輒�h����hg�����0��H������`!�����н����h]%������������� �)�h],����������������0�xi0���������x���l0���������������H��ྒ��xi<���������0��P0��l1��������������������о�h]=����������������>�ha!����`��HC `�� �>�h]�����������������������^�������������@��H������Xe����x��`D�����(���ÒhasRoot]!�0����Ih]H�������������8��O�h]S����������������W�xi\���������’/X0��pX���������-������h]c��������������’d�haD�`’`��HC `��8��d�h]�����������������’����^�������������Ò ’����Xe����8Ò`j������Ò`ǒh]n����������������q�xiu���������XĒ`0�xit����������Ē��h0�h]u��������������ƒv�haj��Ē`��8���’��I� h��v�= ���&�(5@��ϒƸ‰����ƒz��dH +����k�P� +���:-�� ����*��Ќ��Ȓ���nHC `�����v�h]�����������������ƒ����^��������������ƒpĒ����Xe����ǒ`|������ǒXɒh]��������������Ќ���xi�����������Wh]���������������Ȓ��ha|�0Ȓ`��HC `��Ќ���h]�����������������Ȓ����^��������������ȒȒ����Xe����ɒ`��˒��|p} ˒@��_��˒̒ ̒ �̒�|p}�̒@��_�����������@��_���������HӒ�͒8В(ђ�ђPג�גxؒpْߒ8��p��8��h]��������������@���h]�������������������xi���������� ΒX�l���������������͒�͒xi�����������Βp0�`o����������'8ΒxΒ`������Hϒ�Вh]���������������ϒ��ha��PϒxɒHC `��@������ؿ��’�ĒhȒ�ϒh]�����������������ϒ����^�������������8В�Β����Xe����pВ�c�������Ғϒ�ђhҒh]���������������ϒ��xi�����������ђx0��p����������2(ђ`ђh]���������������ϒ˜p������������ђ����Xe�� Ғ`���������ҒXْ��xɒ�Ԓ��|p}�Ԓ@��_��Ւ�Ւ�Ւp֒�|p}�֒@��_�Ę��������@��_���������0��Pג�גxؒpْߒ8��p��8��h]̘���������������Иh]Ә���������������טxiט���������ג�lט�������������ג�גXؒxؒh]���������������ϒ���lؘ����������������ؒHؒ^ј��������Pג�ؒ����Xeْ̘h]�������������������xi�����������ْ/�0��p����������-pْ�ْ`��������xڒ8��HӒ�ܒ��|p}�ܒ@��_�`ݒ�ݒ�ݒ ޒ�|p}@ޒ@��_��W�������@��_���������0��ߒ8��p��h]��������������Ȓ��n���������5ߒ`���������ߒ������ڒ�����|p}���@��_����������X���|p}x��@��_� �O�������@��_���������8��p��h],��������������ƒ/�h]2��������������ϒ3�^0���������8��p������Xe,����f?��В�h����hg �8ߒhߒ(������`��������������HӒ�����|p}���@��_����������X���|p}x��@��_�]���������@��_���������8��h]���������������Ȓ��xi����������P�^����������8��p������Xe�����hg���ْ0ڒh�����������������������@�����`’Ò�Ē�ƒ0Ȓ�ȒPϒ�͒8В(ђ�ђPג�גxؒpْߒ8��p��8��@��H��0��h��@��x��h]Ù�������������ƒƙxi̙������������0�xi˙��������������0��pǙ��������-@�����h]ܙ�������������’��xi�������������`�xi�������������(2�rܙ��������H��������`fՙ���h����hg����P��h������p�����X���������Òxǒ�Вx������h]���������������’�h]��������������ƒ�xi �������������0��p���������-h�����`o���������0�����//] !�h����sxi������������p��`f�����h����hg��(�����������h]-����������������1�xi1������������ Ol1�������������@��x����0��x��xi8���������`���0�h];��������������ƒ>��l2����������������������`f&����HC `���z�����h]���������������� ������ha����h��`��h]���������������� �������v����������^�����������������������Xe���� ���t������"�z�`��@���@��_�����(���������&����xiJ� ��������i�� ���i��|p}�� @��_��� ���i�C<0� �������|p}���@��_�e�ԣ������@��_����������%��l�����v:�H +����k�P� +0��:-��H!P��S_���z��d� ���v�= h��&�(5h��������0��H�����(������������P�p���h�� �0 +�0����� �HC ���� ��������HC ���H +��������HC ���� +�������� ���j��0��o�h]f�������������h��j�h]l����������������o�HC ��� ����HC ����������h������(�8�� �藓h]{����������������~�h]���������������ٔ���p���������-H������n���������5���h]��������������������n����������8(��xi�������������`�p����������-`������n����������5���`o���������������h]��������������xٔš������xiÚ�������� ���s�hm���������������������s����������8��Xe������h����hgw�H������������h]������������������`���h]��������������h�����l�������������������P�Xe����`�����p� �h]�������������H! �xi������������0�h]�������������P��ha������HC ���H!�h]����������������P�����^���������������������Xe������`���������h]�����������������xi ������������0�xi���������8����0�h] �������������(�!�ha�P����P����*&{� +����v:�� ���v�= h��&�(5@�� �Ƹ‰H +����k�P� +0��:-��H!P��S_���(�z��dЌ� ����n�����F��� HC ������!�h]����������������(�����^�������������p������Xe������`'�����X���h]+�������������Ќ�7�xi:����������Wh]:������������� �>�ha'������HC ���Ќ�>�h]���������������� �����^�������������h�������Xe������`D�����P �h]H�������������@�I�h]H�������������� �I�haD�� ����HC ���@�H�h]T����������������W�h]\��������������ٔe����0��H�����(������������P�p���h�� �0 +�h +� �� �`���0�p�0�0�h�H�x����!��!��#�x$��pX���������-0 +�h +��nX���������5� �h]i����������������l�xil���������� �X�ll������������� �P �xiv��������� ��0��pt���������0� �� �`of���������� � �h]{����������������~�xi~����������X�l~�������������� �� �h]��������������h����xi������������X�l��������������`����p����������1 ���`ox���������` � �`���������������h#��g��i��������|p}�@��_�����`e�!���|p}��@��_���`�������@��_����������%�p�0�0�h�H�x����!��!��#�x$��b��b�Hc��c� d�h]�������������������xi������������X�l��������������p���h]��������������h����xi������������X�l��������������0�h��p����������-����h]�����������������Ûh]ț������������h��̛�pě��������-0�h�`o��������������xiݛ��������P��`f֛ ��h����hg����h�������`��������h]�������������������h]�������������������xi������������X�l��������������H���xi���������8��0�`o����������'���h]����������������ha����h�HC ����������0����� ���h�h]����������������������^�������������x�P�����Xe������` +�����`�X�h]�������������P���xi"������������0�xi!�������������0�h]"���������������#�ha +�0�h�HC ���P��#�h]����������������������^���������������������Xe�����h����|p} �@��_��� � �� ��|p}� �@��_�/�Š������@��_����������%��!��!��#�x$�h]0�������������� �1�h]4�������������h��8�xi8��������� "�X�l8��������������!��!�xiB����������"��0�`o@���������'8"�x"�^2����������!��"�����Xe0�#��c+�����%�P#�8$��$�h]E�������������� �F�xiJ��������� $��0��pG���������2�#��#�h]O�������������� �P�pO����������x$�����XeO��$�`��������X%��%��)�hb����`'���|p}�'�@��_�@(�`(�`a�!)��|p} )�@��_�R�Š������@��_���������8:� �@,�*��h*�X+��+��,��2��7��7�@>�D��D� E��F�L�PL�@M��R� ,�`\�����(*��,�h]b������������� �f�h]i�������������h��m�xim����������*��lm�������������h*��*�8+�X+�h]y�������������� �z��ln������������������*�(+�h]z�������������@,�{�ha\��+��%�HC �%� �{�^��������������+��+�����Xe�����,�h]��������������@,���xi����������X-�/�0��p����������-�,�(-�`���������-�@9��%�0���|p} 0�@��_��0�1� 1��1��|p}�1�@��_�����������@��_����������3��2��7��7�h]6������������� �B��n5���������5�2�`��������03�9�9�x.�85���|p}X5�@��_�6�86�X6��6��|p}�6�@��_�D��������@��_����������7��7�h]R�������������P�W�h]Z�������������� �[�xi^���������X8��0�`o\���������&�7�(8�^X����������7�p8�����XeR��8�fm�h#��h����hg1��2��2�09�����`���������9�XF�0a��%��;���|p}�;�@��_��<��<��<�`=��|p}�=�@��_�����������@��_���������H�@>�D��D� E��F�L�PL�@M��R�Y�8Y��^�`�P`�h]������������������xi�����������>�1�xi�����������>���1��p����������-@>��>�`���������?��D�0F�8:��A���|p}�A�@��_�xB��B��B�8C��|p}XC�@��_�����������@��_���������D��D� E�h]V������������� �b�xie���������P�^c���������D�PD�����XeV��D�h]x�����������������h]��������������� ���xi�����������E�1�`o����������& E�XE�^�����������D��E�����Xex��E��h����hg��?�H?�HF�����h]������������������xi�����������F�1��p����������2�F��F�`���������G��`�8:��I���|p}�I�@��_�xJ��J��J� 8K��|p}XK�@��_�����������@��_����������Z�L�PL�@M��R�Y�8Y��^�`�P`�h]��������������@,��h]���������������� +�xi +����������L��l +�������������PL��L� M�@M�h]�����������������l ������������������L�M��p���������-L�xM�`��������XN��Y�H�`P���|p}�P�@��_�@Q�`Q��Q�R��|p} R�@��_����������@��_����������T��R�Y�8Y�h]5���������������;�p5�����������R�����xiA����������S� 1�xi@����������S���(1��p<���������-S��S�`��������xT��Y��N��V���|p}�V�@��_�`W��W��W� X��|p}@X�@��_�D�ܟ������@��_���������Y�8Y�h]ğ������������(�ǟh]ʟ������������� �˟^ȟ��������Y�8Y�����XeğpY��h����hg/��S�0T��Y�����`��������`Z�`��`�H�h\���|p}�\�@��_�H]�h]��]�^��|p}(^�@��_�����������@��_����������^�`�P`�h]g���������������m�xiq���������P_�01�xip����������_���81�^n����������^�h_�����Xeg��_�h]��������������(���h]������������������^����������`�P`�����Xe���`�hg���M�N�Z������h����hg��G�HG� a�����h*�X+��+��,��2��7��7�@>�D��D� E��F�L�PL�@M��R�Y�8Y��^�`�P`�hg��p-��-�p9�����h]Ѡ������������P�֠h]۠������������(�ޠ�pנ��������-�b��b�h]��������������(���h]������������������^����������Hc��c�����Xe���c�h]�������������(��xi����������d�@1�xi����������d���H1��p���������- d��d�h]#�������������(�&�p�0�0�h�H�x����!��!��#�x$��b��b�Hc��c� d�(e�hf�h��h�(i�h])�������������h��-�xi-����������f�X�l-�������������hf��f�^'���������(e��f�����Xe#�(g��h����hg ��d�xg��g�����hg͠c�d��g�����h]C�������������h��G�xiG���������hh� OlG�������������h�8h��h��h�(i�h]N�������������P�S�h]U�������������(�X��lH������������������h��h�`f<�`i����0��H�����(������������P�p���h�� �0 +�h +� �� �`���0�p�0�0�h�H�x����!��!��#�x$��b��b�Hc��c� d�(e�hf�h��h�(i��t�u�w��w�(}�~���8��p�����Ȑ����Б�h������8��`��������0l��v����З����8n���|p}Xn�@��_�o�8o�p��!�o��|p}�o�@��_�f�У������@��_����������p��t�u�w��w�(}�~���8��p�����Ȑ����Б�h�������l�Hr���|p}hr�@��_�(s�Hs�hs� �s��|p}t�@��_�r�{�������@��_��������� y��t�u�w��w�(}�~���8��p�����Ȑ����Б�h]s�������������� �t�h]w�������������h��{�xi{���������hu�X�l{�������������u�8u�xi�����������u�P1�`o����������'�u��u�^u����������t�v�����Xes�Hv��cn�����Xx��v��w�@x�h]��������������� ���xi����������hw�X1��p����������2w�8w�h]��������������� ���p������������w�����Xe���w�`���������x�8���p��z���|p}�z�@��_��{��{��{� H|��|p}h|�@��_���{�������@��_������������(}�~���8��p�����Ȑ����Б�h]��������������h����xi�����������}��l��������������(}�`}��}�~�h]��������������� ����l�������������������}��}�xi�����������~�/`1��p����������-P~��~�`��������x���� y������|p}���@��_�`�������� ���|p}@��@��_�á��������@��_���������0����8��p��h]^������������� �j��n]���������5��`������������������������|p}؆�@��_�������؇�X���|p}x��@��_�l���������@��_���������8��p��h]z�������������P��h]��������������� ���xi����������؉�h1�`o����������&p�����^����������8���������Xez�0��f���v��h����hgY�8��h���������h]��������������(���xiĢ��������X��p1�xiâ�������������x1��p����������-���p��`��������@�������� y�H����|p}h��@��_�(��H��h��菓�|p}��@��_�Ǣs�������@��_���������Ȑ����Б�h]=������������� �I�xiL���������P�^J���������Ȑ�������Xe=�0��h]]�������������(�`�h]c�������������� �d�xig���������8���1�`oe���������&Б���^a������������P������Xe]�����h����hg���������������hg���~�0�������h]��������������(���xi����������Г��1�xi���������������1��p����������-h��蓓xi��������������`f��p���h����hg��0�����Д�����h]��������������h����xi����������x�� Ol����������������H�������8��h]��������������P�ãh]ţ������������(�ȣ�t�u�w��w�(}�~���8��p�����Ȑ����Б�h������8���l���������������������Е�`f��x��hgP�`����k�����HC ����i�����h]����������������������ha����`�����h]�����������������������vT���������^�����������������������Xe�������tT� ����"�i��������@��_����� ��T�P�����(����xiڣ����x���(�����(��|p}��� +@��_���������!x�� ��� ���|p}؝�@��_���N�������@��_����������������0�@��V�W!H +����k�P� +(��:-��83�P��bF:,���z��d� ���v�= (��&�(5(��������(��袓���������P��p��Ȫ�h��ج����@�����ഓ ��0�������HC ���� ��������HC ���H +��������HC ���� +�������� �����h]��������������(����HC ��� ����H�� +���С�(��8���������h]��������������� +���(��h] �������������(����l�����������������������Xe�`��`���������h]��������������0�"�xi&�������������1�xi%���������Т����1�h]&�������������@��'�ha�袓���HC ����0�'�h]����������������@������^�����������������������Xe�������`-�����p�� ��h]1�������������83�:�xi=���������ओ�1�h]=�������������P��>�ha-�������HC ���83�>�h]����������������P������^�����������������������Xe����Х�`D�����������h]H����������������K�xiO�������������1�xiN���������8�����1�h]O�������������(��P�haD�P�����83�P��bF:,�0�@��V�W!� ���v�= (��&�(5@����Ƹ‰ H +����k�P� +(��:-�����(��z��dЌ� �����nX;�0���Z�FHC ������P�h]����������������(������^�������������p��������Xe�������`V�����X�����h]Z�������������Ќ�f�xii����������Wh]i������������� ��m�haV�Ȫ����HC ���Ќ�m�h]���������������� ������^�������������h���������Xe�������`������P��H��h]��������������X;���xi��������������1�h]��������������0����ha��ج����HC ���X;��� �� ��0���������x��h]����������������0������^�����������������������Xe���������������|p}��@��_�а����������|p}���@��_��Ө������@��_���������������ഓе����h] �������������@� �h]�������������(���xi�����������X�l����������������ಓxi�������������1�`o���������'(��h��`�����8��h��h]�����������������ha�@��h��HC ���@��h]�����������������������^�������������ഓ�������Xe�������c�����(�����P����h] ����������������!�xi%���������8���1��p"���������2е���h]*����������������+�p*�����������������Xe*�ȶ�`��������p���������˓�ӓ`�����x����|p}���@��_�X��x���ݓ!���|p}8��@��_�-�Ө������@��_������������ �X��*�����p�������ē�ɓʓ�˓�ѓ�ғ�ғ(ԓ�ٓ�ړ�ړ�ۓ8��`5�����@�����h];������������� �?�h]B�������������(��F�xiF���������輓�lF�������������������P��p��h]R����������������S��lG�������������������@��h]S�������������X��T�ha5������HC ��� �T�^����������������������Xe�������h]`�������������X��d�xii���������p��/�1��pe���������-��@��`����������X˓�˓���“��|p}8“@��_��“Ó8Ó�Ó�|p}�Ó@��_�r�h�������@��_����������œ�ē�ɓʓh]������������� ����n���������5�ē`��������Hœ˓0˓���PǓ��|p}pǓ@��_�0ȓPȓpȓ�ȓ�|p}ɓ@��_��N�������@��_����������ɓʓh]!�������������P��*�h]-����������������.�xi1���������pʓ�1�`o/���������&ʓ@ʓ^+����������ɓ�ʓ����Xe!��ʓf>�����h����hg��ēœH˓�����eW�����h����hg\����ȿ��˓����h]s�������������(��v�xi|���������H̓�1�xi{����������̓���1��pw���������-�˓`̓`��������0͓pғ�ӓ���8ϓ��|p}Xϓ@��_�Г8ГXГ�Г�|p}�Г@��_���������@��_����������ѓ�ғ�ғh]�������������� ����xi����������P�^�����������ѓ�ѓ����Xe�� ғh]�������������(�� �h]�����������������xi���������(ӓ�1�`o���������&�ғ�ғ^ ����������ғ@ӓ����Xe��ӓ�h����hgo��̓�̓�ӓ����h]'�������������X��+�xi0����������ԓ.2��p,���������-(ԓ`ԓ`��������0Փ�ݓ���8ד��|p}Xד@��_�ؓ8ؓXؓ�ؓ�|p}�ؓ@��_�9��������@��_����������ٓ�ړ�ړ�ۓ�ܓh]��������������@����xi���������� ړ2�xi����������hړ��2��p����������-�ٓ8ړh]��������������@����h]�������������������^�����������ړ�ړ����Xe��0ۓh]̧������������0��קxiܧ��������ܓ2��pا��������-�ۓ�ۓ�nا��������5ܓh]��������������0����xi�����������ܓ 2�^�����������ܓ�ܓ����Xe��ݓ�h����hgȧXܓXݓpݓ����hg���ړ�ۓ�ݓ�������p�������ē�ɓʓ�˓�ѓ�ғ�ғ(ԓ�ٓ�ړ�ړ�ۓ�ܓ�ޓ���h] �������������@���xi���������Pߓ(2�xi����������ߓ��02��p���������-�ޓhߓ�n���������5�ߓ`��������h�������p����|p}���@��_�P��p��������|p}0��@��_��ͨ������@��_������������h]��������������0����xiè��������X��82�xi¨�������������@2�^�������������p������Xe������h����hg��ߓ �� ������hg#��ԓ�ԓ0������������(��袓���������P��p��Ȫ�h��ج����@�����ഓе���������������������� ��X�����������h]ݨ������������@����xi������������H2�xi����������H����P2��p����������-�����h]��������������(����xi�����������X2�xi���������P����`2��p����������-��� ��`o����������`��h��h]O�������������0��Z�xi_���������P��h2��p[���������-��� ��`o������������h��h]��������������0����xi����������P��p2��p����������-��� ��h]Ω������������@��֩h]۩������������(��ީxi����������H��x2�`oߩ��������'������pש��������-���`��`o©��������h�����h]��������������@����h]��������������P���xi�������������2�`o���������&X������p����������- �����`o���������������`oa������������X��`�������� ��������(����|p}H��@��_���(��H������|p}���@��_� �$�������@��_���������xi�������������`f�����h����hg٨������������������С�(��8��������������h]0�������������(��4�xi4���������8�� Ol4���������������������������h];�������������@��C�h]E�������������(��H��l5�����������������P�����`f)�0��HC ����(�����h]�����������������������ha����������h]������������������������v����������^�������������@��x������Xe��������t������"�(����p���@��_������������H����*����xiT����������������|p}���@��_����������@�� ��� ��|p}`��@��_�k�Z�������@��_����������H +h���k�P� +���:-���  ��v�= 8����������x��H����� ��� +�p �� �HC ��� ��������HC ��H +��������HC ��� +��������8�x��v�h]l����������������v�HC ��8�������h �� +� �h]�������������������xi�������������p����������-H�����h]��������������������n����������8���xi����������������p����������-(�X��n����������5��`o���������������`����������h +�������|p}��@��_�������@��|p}`�@��_���1�������@��_��������� ��h]˪������������xٔԪh�� ����@�ު��x�����H�xiު����������h��xiު����������h��h]���������������� ��n���������8�xi ������������xi ������������ �H�n����������� �`oު��������&�� �`o���������&` �x�hmǪ�������� �X������s����������� �Xe��8 +��h����hg~��P�� +�����h]=���������������D� �( �p �xiE���������X �`�h]J����������������T��l=������������������ +�� +�`f6�� �HC ��������h]���������������� �����ha����` ���h]���������������� ������v\���������^�������������� �� �����Xe���� ��t\�����"��������@��_��� �\����� �,����Ȋ�(�������������(�� ����� ��ǔ�Ȕ�ɔ@ʔ�ʔxi`��������������|p}�@� @��_�����p���dHF� 0�pƔ�|p}p�@��_�u�`� + ������@��_���������p�����������E�n�H +x��k�P� +��:-�� �� �*��� 0�v�= ��&�(5����X���P���������� � !�H"�#�(%�P&��&��+���� �@#��&�HC (�� ��������HC (�H +��������HC (�� +�������� ��z�h]v���������������z�HC (� �����Ĕ#P�h�8�h��!��%�5�h]����������������������h]�������������������l������������������X���Xe����`��������x�h]�������������������� ��h� ���xi����������P���xi������������� �h���������xi�������������xi����������P���� ���������xi������������p�xi������������������������xi«��������x��xiǫ�����������H�����������xi˫��������0�h�xiѫ��������x���H�����������h� ����� j����������������h]ԫ��������������իha��P�(�HC (���իh]����������������������^��������������������Xe����(�h]߫����������������xi������������X�l������������������xi�������������2��p����������-�P�h]�����������������`f�����h����hg۫���(�����`��������!�h] ������������� ��h]����������������xi���������X��l���������������(�����xi#��������� ��2��l�����������������p���h]$�������������� �%�ha�� �(�HC (� �%�h]����������������� �����^������������� !�( �����Xe����X!�`+�����"��%�h]/��������������E9�h]=�������������� �A�xiF����������"�/�2��pB���������-H"��"�h]M��������������$�N�ha+�#�(�Ќ��=����n @�Ƹ‰ 83��9�bF:, ���������E�$��n�� 0�v�= ��&�(5H +x��k�P� +��:-�� �� �*��H!�&��S_�0��6�V�W!����;�z��d +HC (��EN�h]�����������������$�����^�������������(%��"�����Xe����`%�`T�����&�h]X�������������H!]�h]X��������������&�]�haT�P&�(�HC (�H!X�h]g��������������$�q�`��������p'�P-�8.�(�x)���|p}�)�@��_�X*�x*��*�+��|p}8+�@��_�s���������@��_����������+�h-�h]{���������������~�xi~���������`,���l~��������������+�0,�xi�����������,�`�^����������x,��,�����Xe{�-�h]���������������&���xi�����������-��2�^����������h-��-�����Xe���-���X���P���������� � !�H"�#�(%�P&��&��+�h-�(4�X6�@7�89��9��;�0<��=�(>�P?��@�8D��E��F��K�L�`���������/��4�(��1���|p}�1�@��_��2��2��2�H3��|p}h3�@��_�����������@��_���������(4�h]���������������&���xi�����������4��2�^����������(4�`4�����Xe���4�hgc��&�('�X/�����`Ĭ�����5��7�h]Ȭ�������������0�ЬxiԬ���������5��2�xiӬ��������@6����2�h]Ԭ�������������6�լhaĬX6�(�HC (��0�լ��� �@#��&��6�p9��;��=��@�h]�����������������6�����^�������������@7�6�����Xe����x7�P�h�8�h��!��%�5�@5�h8�x:��<��>��D��K���XĔ`۬�����8�`:�h]߬������������83���xi���������� 9��2�h]���������������9���ha۬89�(�HC (�83���h]�����������������9�����^��������������9��8�����Xe����:�`�������:��<�h]�������������������xi����������0;��2�xi����������x;����2�h]���������������;���ha���;�(�HC (������h]�����������������;�����^�������������0<�H;�����Xe����h<�`�����=��>�h]�������������Ќ��xi����������Wh]��������������=��ha��=�(�HC (�Ќ��h]�����������������=�����^�������������(>�X=�����Xe����`>�`!�����?��D�h]%�������������@�&�h])���������������-�xi-����������?�X�l-�������������P?��?�xi7���������@@��2�`o5���������'�?�@�h]7��������������C�8�ha!��@�(�83��9�bF:, @��C�Ƹ‰ ��&�(5 �� �*��Ќ��=����n ���������E�$��n�� 0�v�= �0��6�V�W!H +x��k�P� +��:-��H!�&��S_����;�z��d +X;�F��Z�F HC (�@�8�h]�����������������C�����^�������������8D�X@�����Xe����pD�`������ E�hG�h]��������������X;�ĭxiǭ���������E��2�h]ǭ������������F�ȭha���E�(�HC (�X;� ȭpƔ��� �@#��&��6�p9��;��=��@��E�h]����������������F�����^��������������F�`E�����Xe����G�(�I���|p}0I�@��_��I�J��{�!�J��|p}�J�@��_�����������@��_����������M��K�L��L��Q�0R� S�T��Y��^�_��`��f��g��g�8i��n��c������(M�PL�M�h]���������������C���h]���������������&����p����������2�K�L�h]���������������C���p������������L�����Xe���L�`��������pM�T��`�i�p{��G�xO���|p}�O�@��_�XP�xP��r�!Q��|p}8Q�@��_�����������@��_����������u��Q�0R� S�T��Y��^�_��`��f��g��g�8i��n��o�p��p�h]�������������� � �h]����������������xi����������R��l�������������0R�hR�S� S�h]��������������C���l������������������R��R�^ ����������Q�XS�����Xe��S�h],�������������� �0�xi5����������T�/�2��p1���������-T�PT�`�������� U�h`��`��M�(W���|p}HW�@��_�X�(X�HX��X��|p}�X�@��_�>�4�������@��_����������Z��Y��^�_�h]Ӯ�������������=�߮�nҮ��������5�Y�`��������XZ�(`�@`��U�`\���|p}�\�@��_�@]�`]��]�^��|p} ^�@��_����������@��_����������^�_�h]���������������9���h]���������������C���xi�����������_��2�`o����������&_�P_�^�����������^��_�����Xe���_�f +��K��h����hgή�Y�Z�X`������e#��K��h����hg(��T��T��`�����h]?��������������;�B�xiH���������Xa��2�xiG����������a���3��pC���������-�`�pa�`��������@b��g��h��M�Hd���|p}hd�@��_�(e�He�he��e��|p}f�@��_�K���������@��_����������f��g��g�h]���������������=�¯xiů��������P�^ï���������f�g�����Xe��0g�h]ԯ�������������;�ׯh]گ�������������C�ۯxiޯ��������8h�3�`oܯ��������&�g�h�^د���������g�Ph�����Xeԯ�h��h����hg;��a��a��h�����h]��������������� ���xi�����������i�.3��p����������-8i�pi�`��������@j��r��M�Hl���|p}hl�@��_�(m�Hm�hm��m��|p}n�@��_��Ͱ������@��_����������n��o�p��p��q�h]^��������������6�f�xil���������0o�3�xik���������xo��� 3��pg���������-�n�Ho�h]y��������������6���h]���������������C���^�����������o�p�����Xey�@p�h]��������������F���xi����������q�(3��p����������-�p��p��n����������5(q�h]��������������F���xið��������r�03�^�����������q��q�����Xe��r��h����hg��hq�hr��r�����hgZ��o��p��r������Q�0R� S�T��Y��^�_��`��f��g��g�8i��n��o�p��p��q��s�z�h]װ�������������6�߰xi����������`t�83�xi�����������t���@3��p����������-�s�xt��n����������5�t�`��������xu�{��M��w���|p}�w�@��_�`x��x��x� y��|p}@y�@��_�����������@��_���������z�h]��������������F���xi����������hz�H3�xi�����������z���P3�^����������z��z�����Xe���z��h����hgӰu�0u�0{�����hg���i��i�@{������K�L��L��Q�0R� S�T��Y��^�_��`��f��g��g�8i��n��o�p��p��q��s�z���X���P���������� � !�H"�#�(%�P&��&��+�h-�(4�X6�@7�89��9��;�0<��=�(>�P?��@�8D��E��F��K�L��L��Q�0R� S�T��Y��^�_��`��f��g��g�8i��n��o�p��p��q��s�z��~�������Ђ���H�����Њ�ؐ������В����h]���������������6���xi����������(�X3�xi����������p���`3��p����������-�~�@�h]ı�������������;�DZxiͱ��������0��h3�xi̱��������x����p3��pȱ��������-��H��`o���������������h]�������������F�&�xi+���������x��x3��p'���������-��H��`oϱ��������Ѐ����h]|�������������F���xi����������x���3��p����������-��H��h]���������������6���h]���������������;���xi����������p���3�`o����������'��@���p����������-Ђ����`o�������������ȃ�h]���������������6�òh]Ȳ�������������9�ѲxiԲ��������脔�3�`oҲ��������&�������pIJ��������-H����`o������������@��`o-���������Ё����`��������H��@��(�P����|p}p��@��_�0��P��p�� ����|p}��@��_�ز��������@��_���������Ќ�Њ�ؐ������В����Ȕ���Ж����������h]���������������;���xi����������8���3�xi����������������3��p����������-Њ�P���n����������5���`��������P����Ȇ�X����|p}x��@��_�8��X��x�� ����|p}��@��_�����������@��_���������ؐ������В����Ȕ���Ж����������h]���������������9��xi ���������@���3��p���������-ؐ���h]��������������$��`o���������X�����h]'���������������*�xi*���������x��p�l*���������������H��h]2���������������5�xi5���������8��h�l5�������������В���h]=���������������A�xiA������������ OlA����������������ȓ�`�����Ȕ�xiH�������������3�h]K��������������;�N��lB�������������������P��^;���������P��������^0������������X������Xe'����h]h���������������k�xik���������x��p�lk���������������H��h]s���������������v�xiv���������8��h�lv�������������Ж���h]~�����������������xi������������� Ol�����������������ȗ�`��������h]���������������9���h]���������������;����l��������������������P��^|���������P���������^q������������H������Xeh����hg��Б����虔�����h����hg��؋���0��������X���P���������� � !�H"�#�(%�P&��&��+�h-�(4�X6�@7�89��9��;�0<��=�(>�P?��@�8D��E��F��K�L��L��Q�0R� S�T��Y��^�_��`��f��g��g�8i��n��o�p��p��q��s�z��~�������Ђ���H�����Њ�ؐ������В����Ȕ���Ж����������x��8�����@��x��p��0��h��0�����ൔ����з������� ��軔ؼ���8�����������p”�”�Ĕ`�����������������(������|p}��@��_�ء����X��!����|p}���@��_���״������@��_���������(��x��8�����@��x��p��0��h��0�����ൔ����з�������h]���������������9�³xidz��������ࣔ�3��pó��������-x�����h]̳�������������$�ֳ`oɳ�����������8��`�����������X��H��p������|p} ��@��_�৔�� ������|p}���@��_�س4�������@��_������������@��x��p��0��h��h]������������������xi����������詔h�l��������������������h]������������������xi������������� Ol��������������@��x����0��x��xi����������`���3�h]���������������6���l�����������������������^�������������������Xe����h]����������������xi���������ج�p�l�������������p�����h]����������������xi������������ Ol�������������0��h���� ��h��xi$���������P���3�h]'��������������;�*��l�����������������������^�������������������Xe����`��������������ع�p�������|p}б�@��_�������в�P���|p}p��@��_�:���������@��_���������0�����ൔ����з�������h]D���������������G�xiG������������h�lG�������������0��h��h]O���������������S�xiS���������X�� OlS����������������(�����ൔ��h]Z��������������9�c�h]e��������������6�m��lT�����������������p�����^M������������P������XeD����h]x���������������{�xi{���������x��p�l{���������������H��h]������������������xi����������8�� Ol��������������з������������h]���������������9���h]���������������;����l������������������P�����^�������������0������Xex����hg��p�����`������h]������������������x��8�����@��x��p��0��h��0�����ൔ����з������� ��軔ؼ���xi��������������l�������������� ��`��h]������������������xi����������P�� Ol��������������軔 �����ؼ���h]´�������������6�ʴh]̴�������������;�ϴ�l������������������h�����^�������������H������Xe�����hg��������������h]���������������9���xi��������������3��p����������08��p��h]������������������xi����������`����l�����������������0��h]����������������xi��������� �� Ol�������������������������p��xi �������������3�h]��������������9��xi���������X���3�`o���������'���(���l�����������������8��x��^����������x���������Xe��”h]+��������������$�5�h]=���������������@�xi@���������Ô��l@��������������”�”xiG����������Ô`�^E���������(ÔhÔ����Xe=��Ô�h����hg'�p”ĔĔ����hgݴ���X”(Ĕ����h]X���������������[�`fQ��Ĕ@ǔP�h�8�h��!��%�5�@5�h8�x:��<��>��D��K���XĔ�ĔHC (��� +����h]�����������������Ŕ����ha����8Ɣ(�h]�����������������Ŕ�����vg���������^��������������Ɣ�Ɣ����Xe�����Ɣ�tg�����"��(���@��_��ǔ�ǔ�ǔg���Xǔ.����xif�����PȔ��xik� �����Ȕ`� ȔhȔ��������xir�#����ɔ�5�:](!� ɔV�~�xi}�&�����ɔ(ɔ�ȔXɔ��������xi��)�����ɔ��xi��,�������ɔʔ��������xi��/�����ʔ�7�xi��2������hʔ�ʔ�������� j5������4�@:�����h]������������˔��ha'�X˔�HC ��7� +��^����������X˔˔����Xe�����˔h]��?���������˔��xi��<�����̔��l��9��������`̔�̔h]��L��������9���xi��I�����͔��l��F�������� ͔X͔h]��O��������9�ŵ^��B�����͔�͔0^��5�����̔Δ2Xe��hΔh]ǵ\���������˔̵�  � ��ph�|h�P��8�X˔`̔ ͔�͔�Δ�ДXєHҔ�Ӕ�Ԕ(Ք�Քxi̵Y����@Д�7�l̵V���������ΔДh]յi��������9�ڵxiڵf����є�7�lڵc���������Д�Дh]��l���������˔��^��_����єXє4^ӵR����XД�є6Xeǵ�єh]��{����80ٔ��platform]0!��Ҕ�-��xi��x�����Ҕ�Ҕl��u����:HҔ�Ҕxi�~����pӔ���p�r����-Ӕ@Ӕh]����������h�xi������0Ԕ� l�����������ӔԔh]!����������9�&�^������HԔ�Ԕ�������Ք�Ք>Xe/� ֔hg���ӔՔp֔o�t ����d����@��_����0��0��Xe�ؔ�t���������� �@��_�ؔؔؔ����HC �� ����h]���� ��������ؔ����^��������Xؔ�֔����h]K���������ؔ����`fK��ؔHC ���������HC �(���������HC �H ���������P�.this_function]�3�Hڔ�s�p"p����x���8�8������ �# +���`�����(�h�(�P�`�`� � +`��������� �@�0}�X��� �p���`� X<�> �A +@D xI �a d�}��9�@:��:��;��>�B��F��H�J�b� e� +(�� (� HL��L��L��M� Q��U�����z�8{��{������@��`��@��ؤ�0�� �-�0.�x.� 0�h0�7�<�XF��V��i� l� +h|� H�� p�� @��蝀������P��p3��3�4�5��@��I� �h���������x������������� ��� +��� @@� Ї�H��� �0n�xn��n��o�@p�0w�{�}��~���� ��� +�M�-�X-��-��.��1�@4�8�:�`<��C� ���Ѝ��������Ȥ�����0����� ��x��p��hԃ hփ +蟐 ��� P�� ੐������>�?�P?��A��C�PE�PM��V�@�����Џ�А�X�������讑0��0����X��������Ƒhϑ�����H�������������( �8 �h� ( � +P#� �(� �*� hn��r�@��p���������h���������������’�ƒ�Ȓ�ϒ@,�������0��h�����P�(� �� ��� �� +X��������(��(��@��P��(�� ��0����� ��h��������0�x�������� ��$��&��6��9� �;� +�=� �C� F� � x + � h0x��� p| +�� �� 9� �˔0ٔxٔ�ٔ� h0x��� p| +�� �� 9� �˔ؔ0ٔxٔ�ٔ diff --git a/2-Coordinating-IO/source/working-with-files/asynchronous-file-operations/file.dat b/2-Coordinating-IO/source/working-with-files/asynchronous-file-operations/file.dat new file mode 100644 index 0000000..70f7303 Binary files /dev/null and b/2-Coordinating-IO/source/working-with-files/asynchronous-file-operations/file.dat differ diff --git a/2-Coordinating-IO/source/working-with-files/asynchronous-file-operations/log.txt b/2-Coordinating-IO/source/working-with-files/asynchronous-file-operations/log.txt new file mode 100644 index 0000000..18bed12 --- /dev/null +++ b/2-Coordinating-IO/source/working-with-files/asynchronous-file-operations/log.txt @@ -0,0 +1,22 @@ +Wed Jun 08 2016 22:53:26 GMT+0100 (BST) 896961 bytes removed +Wed Jun 08 2016 22:54:14 GMT+0100 (BST) 896961 bytes removed +Wed Jun 08 2016 22:54:25 GMT+0100 (BST) 896961 bytes removed +Wed Jun 08 2016 22:54:30 GMT+0100 (BST) 896961 bytes removed +Wed Jun 08 2016 22:54:36 GMT+0100 (BST) 896961 bytes removed +Wed Jun 08 2016 22:54:41 GMT+0100 (BST) 896961 bytes removed +Wed Jun 08 2016 22:54:59 GMT+0100 (BST) 10000000 bytes removed +Wed Jun 08 2016 22:56:01 GMT+0100 (BST) 100000000 bytes removed +Wed Jun 08 2016 22:57:07 GMT+0100 (BST) 897494 bytes removed +Wed Jun 08 2016 22:57:23 GMT+0100 (BST) 10000000 bytes removed +Wed Jun 08 2016 22:57:32 GMT+0100 (BST) 897432 bytes removed +Wed Jun 08 2016 22:57:34 GMT+0100 (BST) 897432 bytes removed +Wed Jun 08 2016 22:57:35 GMT+0100 (BST) 897432 bytes removed +Wed Jun 08 2016 22:58:21 GMT+0100 (BST) 897432 bytes removed +Wed Jun 08 2016 22:59:03 GMT+0100 (BST) 897432 bytes removed +Wed Jun 08 2016 23:03:21 GMT+0100 (BST) 897432 bytes removed +Wed Jun 08 2016 23:03:56 GMT+0100 (BST) 897432 bytes removed +Wed Jun 08 2016 23:04:14 GMT+0100 (BST) 897432 bytes removed +Wed Jun 08 2016 23:04:40 GMT+0100 (BST) 897432 bytes removed +Wed Jun 08 2016 23:04:45 GMT+0100 (BST) 897432 bytes removed +Wed Jun 08 2016 23:50:48 GMT+0100 (BST) 897432 bytes removed +Wed Jun 08 2016 23:50:50 GMT+0100 (BST) 897432 bytes removed diff --git a/2-Coordinating-IO/source/working-with-files/asynchronous-file-operations/null-byte-remover-sync-with-progress-dots.js b/2-Coordinating-IO/source/working-with-files/asynchronous-file-operations/null-byte-remover-sync-with-progress-dots.js new file mode 100644 index 0000000..cb9dea7 --- /dev/null +++ b/2-Coordinating-IO/source/working-with-files/asynchronous-file-operations/null-byte-remover-sync-with-progress-dots.js @@ -0,0 +1,16 @@ +'use strict' + +setInterval(() => process.stdout.write('.'), 10).unref() + +const fs = require('fs') +const path = require('path') +const cwd = process.cwd() +const bytes = fs.readFileSync(path.join(cwd, 'file.dat')) + +const clean = bytes.filter(n => n) +fs.writeFileSync(path.join(cwd, 'clean.dat'), clean) + +fs.appendFileSync( + path.join(cwd, 'log.txt'), + (new Date) + ' ' + (bytes.length - clean.length) + ' bytes removed\n' +) \ No newline at end of file diff --git a/2-Coordinating-IO/source/working-with-files/asynchronous-file-operations/null-byte-remover.js b/2-Coordinating-IO/source/working-with-files/asynchronous-file-operations/null-byte-remover.js new file mode 100644 index 0000000..9ffea92 --- /dev/null +++ b/2-Coordinating-IO/source/working-with-files/asynchronous-file-operations/null-byte-remover.js @@ -0,0 +1,19 @@ +'use strict' + +setInterval(() => process.stdout.write('.'), 10).unref() + +const fs = require('fs') +const path = require('path') +const cwd = process.cwd() + +fs.readFile(path.join(cwd, 'file.dat'), (err, bytes) => { + if (err) { console.error(err); process.exit(1); } + const clean = bytes.filter(n => n) + fs.writeFile(path.join(cwd, 'clean.dat'), clean, (err) => { + if (err) { console.error(err); process.exit(1); } + fs.appendFile( + path.join(cwd, 'log.txt'), + (new Date) + ' ' + (bytes.length - clean.length) + ' bytes removed\n' + ) + }) +}) diff --git a/2-Coordinating-IO/source/working-with-files/clean.dat b/2-Coordinating-IO/source/working-with-files/clean.dat new file mode 100644 index 0000000..c0c38c9 --- /dev/null +++ b/2-Coordinating-IO/source/working-with-files/clean.dat @@ -0,0 +1,189 @@ +��b�6�d�����%�%����h]k�������������0��2���|p}82@��_��23xc!�3�|p}�3@��_��v�y3��������`@��_�����������9(2h]{�������������|�ha@2  ��|������������������2����^�������������4�4�6�=�>(D`DXFG�LxR8S�S�VW�Wp}05���_�606�6p}�6���_�����h]w������������x��wh] w�������������� wxi w��������85�`�l w�������������45�5�5xiw���������58 �lw����������������P5�5A^w���������46����Xew`6h])w��������������-wxi-w��������07�`�l-w�������������67�7�7`�7xi9w���������7����@ �l.w����������������H7�7�xi@w���������8:H �pHcX �"�0x2�8�Bh]�����������������00;���|p}P;@��_�<0<@b!�<�|p}�<@��_�Iw�y$����`@��_��������������Y���������8p����������� ;Xe��`���������@�D�F�=�>(D`DXFG�LxR8S�S�VW�W�]�^`_�>?(?�|�?��h]Uw��������_���� ��\wxi_w��������>P ^]w���������=�=����XeUw0>h]pw���������������swxivw��������?X �ptw��������0�>�>`���������?@F�X�9�A���|p}�A@��_��B�B�B HC�|p}hC@��_�ywy]����`@��_���������������H��l���������������A������(B�@�����������Ah]���������������B��ha��(D`DXFG�LxR8S�S�VW�Wh]�����������������B����^�������������@B����XeXCh]�����0�������������8h]�w�������������x���wh]�w���������������w����xi�w���������D�`�l�w������������`D�D0EPE�2��h]xi�w���������E����` �l�w������������������D E����^�w������������(D�E����Xe�w�Eh]�w������������x���wxi�w���������F/h �p�w��������-XF�Fh]�w������������x���wxi�w���������G\p �p�w��������-GPG`o�w���������F�G`��������`H��V�W�X�H���l������������� HXH @hJ���|p}�J@��_�HKhK�KL�|p}(L@��_��wy}����`@��_�L��������pN�Mp} M���_�#�������@����_������Q�LxR8S�S�VW�W�k�P� +�pN:-������OR�q � ��Mv�= �OV�q$�O�O8O�P�UXW@X�Yh]�w����������������wxi�w��������PMx �p�w��������-�L M`���������MC pV�V��������HC �IH +����������H�O���|p}P@��_��P�PQ�Q�|p}�Q@��_��w�xO����`@��_����������I��HP�Y�Zh]�����O;���������Q�V�WxR8S�S�V�IS���|0S�S�T�|p}���_�h]wx������������0��zxxizx����������R�����H�lzx������������xR�Rh]�x������������0���xxi�x���������S�G�l�x������������8SpSh]�x���������������xxi�x��������`T ��l�x�������������S0T�T�T0Uxi�x��������U� xi�x��������`U� �l�x����������������xT�Ti^�x���������SxU��������^�x���������R�U����Xewx Vh]�x�������������0���x`f�x�V�h����hg�whM�M�V��������h]�x������������p���xxi�x�����������ł^�x��������WPW����Xe�x�Wh]�x������������� ��yxiy��������PX� ^y���������W X����Xe�xhX�h����hg�w�GH�X��������`��������XY�a(bY�Y����`o����������&�XYXet��9`[���|p}�[@��_�@\`\�\]�|p} ]@��_�%y�y�����`@��_������������������������G�G��X[����������xi������������l���������������[\�]�^`_�a�������������p����������-H\�\�n�����������\h]��������� p"�%h0@2�8�Bh]�y������������0���yxi�y��������H^�H�l�y�������������]^h]�y������������0���yxi�y��������_�G�l�y�������������^�^h]�y���������������yxi�y����������_ ��l�y������������`_�_0`P`�`^������xi�y���������`� xi�y���������`� �l�y�����������������_ `�� ^�y�������� _�`�����^�y��������`^8a����Xe�y�ah]�y������������0���y� `f�y�a�=�>(D`DXFG�LxR8S�S�VW�W�]�^`_�a�����b��l��� ������b�bxihglw?X?Y�����4�4�6�=�>(D`DXFG�LxR8S�S�VW�W�]�^`_�a����0d��l�� ������cd�h����hg%w�8�8�d����8��������������������p�����������������`������������������8�������������������������(��������������8��p��(�`�`��� �x�������X�����0�h��@������,�x-�x.�8/��4�4�6�=�>(D`DXFG�LxR8S�S�VW�W�]�^`_�al@� ������f�fxiJ� �����g���lJ�� �����@g�g^4�� �����f�g�Xe�hh]x� ������������xi�� �����h��l�h����hgsv�80�x0��h����royShg�p������i����إ������ج�x����`��x��8��ر�H��h����� ����������������8��������������������p�����������������`������������������8�������������������������(��������������8��p��(�`�`��� �x�������X�إ������ج�x����`��x��8��ر�H��h����� ����������������8��������������������p�����������������`������������������8�������������������������(��������������8��p��(�`�`��� �x�������X�����0�h��@������,�x-�x.�8/��4�4�6�=�>(D`DXFG�LxR8S�S�VW�W�]�^`_�a�oxpHvw�w@y�zH{|@}�0���@���0���(�P���8���H�H�����`�������@��H���X�0�h]z������������x�� zxiz������������ p/� �p +z��������-�o�oh]z������������x��zxi"z���������p\� �pz��������-xp�p`oz��������8p�p`���������q�(yxy����HC �kp܀����x���s���|p}�s@��_��t�t�thu�|p}�u@��_�+z�z�������`@��_���������h]����������������h]�����q�������������o��`��h]����������Hvw�w@y]�u�5Ouh]���������������o���D����������r�Dh]����������������h]����h]�z������������0���zxi�z���������v�H�l�z������������Hv�vh]�z������������0���z����xi�z��������pw�G�l�z������������w@wh]�z����������������zxi�z����������0x� l�z��������������wx^�z���������wHx����^�z���������v�x����Xe�z�xh]�z������������0���z`f�z@y�h����hgzQ 8qxq�y����hg�p(��h���y����������������x����`���yH~x~Ѐ��ЈȊ؍��h]�z������������� ���zxi�z�����������z� �p�z��������0�z�zh]�z������������0���zxi�z���������{�H�l�z������������H{�{h]�z���������������zxi�z��������p|l ��l�z�������������|@|�|�|@}�|xi�z��������(}����� h]�z������������ ��{Z �l�z�����������������|�|^�z���������{x}����Xe�z�}�h����hg�z{ ~8~����` {�����~� ��h]{�������������0�{xi{���������0y � xi{��������x��� h]{�������������{ha {�x��HC x���0�{h]���������������������^�������������0�H����Xe�����h�`"{�����ȅh]&{�������������83�/{xi2{������������ h]2{��������������3{ha"{��x��0�x�Є@�83���bF:, ��X�0�h�Ȝ� ���&�(5@Y���Ƹ‰��� �����K T�x��*���~�h��n�0 Ќ������np� ���������ب����2�~�pH +����������0��V�W! ��0������� ����v�= ���p���n�H +�Ȥ��k�P� +���:-��(тh���`� +���P�z��d X;���Z�F��������HC x��83�3{h]����������������������^�������������@�X�����Xe��������x�`9{����(���h]={���������������@{xiD{����������� xiC{������������� h]D{������������P�E{ha9{��x��HC x����� E{P��p�����X��P��H��H���؁0���Ќ��h]����������������P�����^�������������0�������Xe����h�`K{�����-����h]O{������������Ќ�[{xi^{���������łh]^{��������������b{haK{��x��HC x��Ќ� +b{h]����������������������^�������������(�X�����Xe����`�`h{�������h]l{������������@Y�m{h]p{��������������t{xit{����������X[�lt{������������P���xi~{��������@�� `o|{��������'Ћ�h]~{��������������{hah{��x��HC x��@Y� {h]����������������������^�������������8�X�����Xe����p�`�{���� �Џh]|������������X;� |xi|���������� +h]|�������������|ha�{��x��HC x��X;� |h]���������������������^�����������������H�`�����Xe��������������x��x����|p}��@��_�X�x��!��|p}8�@��_�2|�����`@��_���������X�p}����x��|p}���_�a�������H�����`�������@��H���X�0��8����c.|��������x�h]5|��������������6|h]:|������������ ��A|�p7|��������2H���h]E|��������������F|pE|���������������XeE|0�`������������ؕ^h�(�p���������Xei�ȕh]���������������������|p}�@��_�����X�!���|p}��@��_�H|�����`@��_���������-`�p�`@�����H����|p}h�`�������@��H���X�0��8���0�8�p��|p}����_���������@����_�����h]P|������������x��T|h]W|��������������[|xi[|����������`�l[|��������������Кh����h]g|��������������h|�l\|�����������������X�^U|��������`�������XeP|�h]u|������������x��y|xi~|��������������/ +�pz|��������-����h]�|������������x���|xi�|����������\ +�p�|��������-@�x�`o�|�����������`����������Щ�p}����_�Р�����X������|p}��@��_�p�����0��|p}P�@��_��|�}����`@��_���������@��H���h]�������������������Bad argu]�آ h]0}���������������<}�n/}��������5�`���������������������`�Xe����hg������������hgC��ȥ���|p}��@��_���Ȧ��h��|p}��@��_�>}w}�����`@��_������������x�������@�p�h� +�������������ؤXe +�H�h]W���������������H���P���������8��xi`���������P��A��p\����������� �`����������h]J}��������������S}h]V}��������������W}xiZ}���������� +`oX}��������&����^T}��������H������XeJ}@�fg}���h��������hg+}H�x��������e�}���h����hgq|�@������h]�}������������P��}xi�}���������� +xi�}�����������( +�p�}��������-X�ت`������������H�X������|p}Э@��_�����ЮP��|p}p�@��_��}E~��������`@��_������������������������h]�����������������l��������0�^u���������x������Xep�h�0��8�L�h���Ю����h]���������������E���xi�����������0�l��������������H�����������������x�h]~���������������~xi"~������������Pj�^ ~��������0�h���������Xe~��h]1~������������P�4~h]7~���������������8~xi;~������������0 +`o9~��������&8�p�^5~���������������Xe1~���h����hg�}���� �`�`�����h]P~������������x��T~xiY~���������.8 +�pU~��������-��ز`����������|(����_�ص�����X������|p}е@��_�����жP��|p}p�@��_�b~*����`@��_���������h�0�8�p���h]����������������xi������l����x���h]�~��������������~xi�~��������������@ +xi�~������������H +�p�~����������-0���h]�~��������������~h]�~���������������~� ^�~��������8�p������Xe�~��h]�~�������������xi��������x�P +�p��������-�H��n���������5��h]�������������xi ���������h�X +^���������8�����Xe���h����hg�~кл������hg�~����������`�������@��H���X�0��8���0�8�p���`�h��3�@@��O��Y�Xi�xs�H��������������P��h]4�������������<xiB��������Ƚ` +xiA�����������h +�p=��������-`����n=��������5(�`����������+��@��� 0F�P�R�S�����hb`eXh�k�yX������|p}�@��_���������|p}��@��_�E�����`@��_���������h�h]���������������xi�����������p +xi����������������x +^���������h�������Xe��0��h����hg0� h���������hgL~ �`�������H�����`�������@��H���X�0��8���0�8�p���`�h�8��|p}x�إ������ج�x����`��x��8��ر�H��h����� ����������������8��������������������p�����������������`������������������8�������������������������(��������������8��p��(�`�`��� �x�������X�����0�h��@������,�x-�x.�8/��4�4�6�=�>(D`DXFG�LxR8S�S�VW�W�]�^`_�a�oxpHvw�w@y�zH{|@}�0���@���0���(�P���8���H�H�����`�������@��H���X�0��8���0�8�p���`�h��������������H�����`�����X�H�������H�8�p����������������������P@xp0 X�H8p� +p 0 h � ��h]K�������������8�O�`����������X�0������|p}����_���������|p}�����_�Q�x�h]�������������������xi������������ +xi���������8���� +�p���������-���h]!�������������P�$�xi*������������ +xi)���������@���� +�p%���������-���`o���������P�X�h]x����������������xi����������@�� +�p����������-���`o,�����������X�h]ـ�������������������xi����������@�� +�p����������-���h]�����������������h]�������������P��xi +�����������8�� +`o���������'����p���������-��P�`o����������X���h]�������������� �h]%���������������.�xi1������������ +`o/���������&H����p!�����������-���`o ������������`o������������H�`���������^����������Xe��h]��� ��������x������|p}8�@��_����8� ���|p}��@��_�5� +������`@��_������������X����|��*�����@����_�������������`�����X�H�������H�8�p�� +�H�:-��� �v�= `� �����h]A�������������P�D�xiJ����������� +xiI���������H���� +�pE���������-����nE���������5`�`������������������������HC ��� +����������� ����|p}@�@��_�� �@� ���|p}��@��_�M�������`@��_���������h]�����������E������������z����������� �����h]������������������`�����X�H�������H�8�p����������H��l��������������������������hg��(�����h]����h][���������������d�xii��������������� +�pe���������-����h]n�������������p��x�`ok��������� �`�h]��������������0����xi����������@�pI�l�����������������h]��������������0����xi�����������hJ�l�������������������h]����������������������xi������������ ��l��������������X���(�H���h�h]�������������� ����h]��������������P����l���������������������e^�����������������^����������X������� Xe��`�h]ˁ������������0��΁xi΁��������0�� pI�l΁���������������h]ց������������0��فxiف����������� hJ�lف����������������h]������������������� xi������������ ��l��������������H����8�p�����h]�������������������h]��������������P����l����������������������^߁���������������^ԁ��������H������XeˁP�hgW� �����������h����hg=�����������`��������p�����XP |�@�HC ������������HC ����x��x����|p}��@��_�X�x�P!��|p}8�@��_��F����������`@��_�����������ҏ�u���h��Ȁ�� U(��݀��������H ����3����}6� �P��A�������*� � �����������������������P@xp0�3������������ ������������������������pNh]���������������%�xi*�����������`�� +�p&���������-��0�h]/�������������p��9�`o,���������x���`��������x�������A�������*� � pN����b +�������|p}��@��_�`����� ��|p}@�@��_�;�������`@��_���'���������������������%�����������ເн�.this_function]�P��s�`������������������܀������@��x��p������P��������輁h��Pցh]E�������������0��H�xiH���������h�hJ�lH��������������8�h]P���������������T�xiT���������(� ��lT�����������������������@�h][������������� ��b�h]d��������������l��lU������������������@���K�^N����������� �����XeE�x�h]w�������������0��z�xiz���������H�pI�lz����������������h]������������������xi����������� ��l������������������p������רh]�������������� ����h]��������������P����l������������������� �`���^����������`������Xew�X�`���������X8�.�(/�p/� 1�h1��1�(7�������|p}0�@��_����0����|p}��@��_����֩����`@��_�©��������h�����0��x��h�����`��������H�H�����P���P@xp0 XX1�X2��3��4��7��\��M� N�P�XP�hj��j�0l�xl�h]��������������0����xi������������hJ�l������������������h]����������������‚xi‚��������� ��l‚������������P� @x��h]ɂ��������������҂h]Ԃ�������������܂�lÂ��������������������^���������������Xe��h]��������������0����xi�����������pI�l��������������p�h]������������������xi����������� ��l��������������0h XPI�h]�����������������h]�������������P� ��l���������������������%�^����������������Xe������������������������P@xp0 X�H8p����H��������ؤ�hg���0�������h]�������������0���xi�����������K�l���������������h]&���������������*�xi*����������� ��l*�������������H�8p(;�h]1��������������9�h];�������������P�>��l+������������������^$��������������Xe� hg�����(����� ������������x����`���yH~x~Ѐ��ЈȊ؍��h P�p����X�������� ����h]P���������������Y�xi\��������� � +�pZ����������0� +� +h]e�������������0��h�xih���������� �G�lh�������������p � h]o���������������s�xis����������  ��ls�������������0 h   � @c�xiz����������P � +h]}�����������������xi������������ � +`o����������'h � �lt������������������ � ^m���������� (����Xee��h]��������������p����h]��������������0����xi������������G�l�������������� Xh]������������������xi����������H ��l������������������-xi����������� +h]ă������������ ��˃�l������������������`�v^�����������P����Xe����h����hg��������hgL�0 � ����h]ڃ������������0��݃`fӃ�HC x���� ����h]���������������������ha����x��h]����������������������v�o��������^�������������p�����Xe������t�o�����"��x��X����@��_�����o�"0��8����xi�������0�E�xi�������x��H��������delimiterG]�� ���Cxi�������(�;�]�@�g;�xi�������H�x��������xi�������]�xi���������0��������posix]����DA"xi��������xi����������������� j�K����^�����h]"�H��������#�ha����HC ���]� #�^����D������`����Xe����P`'�� H�h]-��������������2�H��j(����xi[�������H^���@H^��|p}�+@��_� @RC'�6 �@i�|p}@��_�t��������`@��_�����������c���i��#��v@Y�Ƹ‰H +��k�P� +�P:-�����P%�s��� ��v�= `>��!N�������`���8!�!0#�#�$x+(6�)�-�.�/807�78@8p!h#0%�+�\�\`^�^e�H(HC �� ���������HC �H +�����HC �� +������������� H� +�� 0� �� �h�( jh x"p$8.�T�h`�`}������ `"h]��������������`>���xi���������� !��h]���������������!��ha}�8!�HC �`>���h]�����������������!����^��������������!� ����Xe����"`�������"�X$h]���������������i���xi����������Pj�h]���������������#��ha��0#�HC ��i���h]�����������������#����^��������������##����Xe����$`�������$h]�������������������h]��������������P%��ha���$�HC �������('���|p}H'@��_�(((�N!�(�|p}�(@��_�̄������`@��_����������1�f8g�0@1x2�P�Ѕ�py�y�{`����)�-�.�/807�78@8�=(>�>�>�@A�A(�p��������� ��< =h]ф������������@Y�҄h]Մ������������ބxiބ��������H*X[�lބ�������������)*xi�����������* `o����������'`*�*`̈́����p+� .h]��������������P-��hä́x+�%��0����P%�s�0���л�i��#��v@Y�P-Ƹ‰� ��v�= ��6&�(5H +��k�P� +�P:-������`>��!N���@�HC �@Y���h]����������������P-����^��������������-�*����Xe�����-�cȄ�����0(+�/�0h]��������������P-��xi�����������. xi����������8/�� �p����������2�./h]���������������#��n����������5�/`o����������P/�/h] �������������P- +�p +����������80����Xe +�p0`��������1�5�A�B IK�N`�xc��h��k��n��% 3���|p}@3@��_�4 4`K!�4�|p}�4@��_����������`@��_�I����������D1 ��23x����56P��(�89X Xf;<�>�?Xq@��A( B7�78@8�=(>�>�>�@A�A8B�BPI�IHJ�P� ��(� ��`������5h]������������� ��h]��������������6�ha�(6�1HC � ��@ip!h#0%�+`6h]*�������������P-+�xi/���������x7 �p,���������27H7h]:��������������6>�h]A�������������J�h]K�������������P-L�lJ�������������8@8^?����������7x8����Xe:��8`��������h9�@�A�k��n��x��{���� ���1p;���|p}�;@��_�P<p<�<=�|p}0=@��_�Z���|�����`@��_��������������6P��78�\X :;h��=>�Xq@A( xwCp����=(>�>�>�@A�������P��� ��(� ��h]h�������������P%k�h]p���������������y��pl���������-�=(>h]��������������P%��h]��������������0���xi����������@?���l���������������>?�?�l������������������X?�?^�����������>�?����Xe�� @�h����hgd�`>p@�@����h]���������������6��h]��������������P%��^�����������@A����Xe��8Ahg&��79 9����h]���������������F�DžB8Bh]ȅ�������������6̅�l�������������������ABXe��pBh]���������������6��xi����������HCX[�l���������������BCxi����������C �p���������-`C�C`��������pD�H�1xF���|p}�F@��_�XGxG�GH�|p}8H@��_� �$�����`@��_����������e�8.�h����hg���C(DI����h],��������������!8�h];��������������6?�xiB����������I`&�`o@���������&�I�Ih]H��������������!T�`oF���������&JHJ^9���������PI�J����Xe,��Jh]\��������������#l�7�78@8�=(>�>�>�@A�A8B�BPI�IHJ(KhLh]o��������������6s�xis����������L�`�ls�������������hL�L8MXMxi����������M( �lt������������������L(Mxi����������(N/0 �p����������-�M�M^m���������(K@N����Xe\��N�)�-�.�/807�78@8�=(>�>�>�@A�A8B�BPI�IHJ(KhL8!�!0#�#�$x+(6�)�-�.�/807�78@8�=(>�>�>�@A�A8B�BPI�IHJ(KhL�P0Q�Qh]S��������������!_�h]b��������������?�v�xQ�Q Th]w��������������!��h]���������������#��8!�!0#�#�$x+(6�)�-�.�/807�78@8�=(>�>�>�@A�A8B�BPI�IHJ(KhL�P0Q�Q�QUZ�[�\�b�n����������5�Q�lb�����������������0QhQ^`����������PPT����XeS��Th]���������������#��`���������U�\��W���|p}�W@��_�xX�X�X8Y�|p}XY@��_��� �����`@��_���������Z�[h]���������������!̇xi̇���������ZX[�l̇������������ZPZxiև��������[8 �pԇ��������0�Z�Zxi�����������[`&�h]���������������!��`o����������&`[�[`f���[xi���������h\`&�`f�8\hg�� [ \�\����h]*��������������!6�xi6���������0]X[�l6��������������\]xi@����������]@ �p>���������0H]�]`��������X^c�``���|p}�`@��_�@a`a�ab�|p} b@��_�C�e�����`@��_����������bh]R��������������!^�`fK��b`��������xcHh��e���|p}�e@��_�`f�f�f g�|p}@g@��_�k�������`@��_���������xiz���������0h(2�`fs�hhg&��]^0c����hg��UHU`h����HC �H^�����h]�����������������h����ha����i�h]�����������������h�����vd���������^�������������`i�i����Xe�����i�td������"H^�� ��@��_��j�j�jd�p(j����xi������� kx5����lx5��|p}�l@��_��m�m�!`n@o���|p}�n@��_���������`@��_������������Xw�n�H +��o�k�P� +��o:-�����|���~� �@ov�= ��p&�(5�p�phq�qxr�tw�x�y�{�|�|P}�}�~�����8w�{HC 8k� ���������HC 8kH +���������HC 8k� +��������� ��p��h]���������������p��HC 8k �����H� +`r0t`tx�~��ȅh]���������������F�ˆ�q�qh]È�������������pLj�l������������������hq�qXe��rh]ӈ�������������p׈xi׈���������rX[�l׈������������xr�rxi����������hsH �p߈��������-�r8sxi�����������s(2�`f���s�h����hgψ�st t����`�������t�wh]���������������� �h]��������������p�xi���������Pu�`�l��������������t u�u�uxi ���������vP �l�����������������hu�uxi'����������v/X �p#���������- vxvh]'�������������Xw)�ha��w8kHC 8k���)�^�������������w�v����Xe�����w`4�����Px�|h]:����������������K�h]N��������������pR�xiR����������x�`�lR��������������x�x`y�zh]^��������������pb�xib����������yX[�lb��������������y�yxil���������pz` `oj���������'z@z�lS�����������������yPyxis���������P{/h �po���������-�z {h]s�������������|u�ha4��{8kHC 8k���u�^��������������{h{����Xe����H|h]���������������p��h]���������������?���0}P}�}h]���������������p��h]��������������Xwȉ�n����������5�}�l�������������������| }^�����������|�}����Xe��H~h]ԉ�������������p؉xi؉��������X[�l؉�������������~�~xi�����������p �p����������-0ph]��������������Xw���n����������5�`o�����������0�h]���������������p�xi����������(2�^�����������؀����Xe�� ��h����hgЉ`�p�������h]��������������p��phq�qxr�tw�x�y�{�|�|P}�}�~���ȁ�����x�Їxi���������8�X[�l�������������ȁ�xi�����������x �p���������0P���h]#�������������|4�`o ���������؃�h]<��������������p@�xiD�����������`&�^A������������Ȅ`�����`oB���������&��ȄXe<���h����hg �P���������h]R�������������Xw\�xik���������`�`&�h]q��������������pu�`oo���������&0�x�`fd����h����hgN����������p�`r0t`tx�~��ȅ��h]���������������p��`f{�ЇHC 8kx5�����h]���������������� �����ha����h�8kh]���������������� ������v����������^���������������������Xe���� ��t�������"x5�8kq��@��_���(����j������xi�������������� �����|p}@�@��_�� �@�������|p}��@��_��������`@��_���������H +����k�P� +�0�:-��� ���v�= �0�&�(50���Ȑ0�ؑ ��HC ��� ���������HC ��H +���������HC ��� +��������� �����h]��������������0���HC �� �����������x�h]���������������F�NJ�0�h]Ȋ������������0�̊�l������������������Ȑ�Xe��h�h]ڊ������������0�ފxiފ��������@�X[�lފ������������ؑ�xi����������Ȓ� �p����������0X���h]��������������0���xi�������������`�l�������������� �X����xi����������@�� �l����������������������xi�����������/� �p���������-X���`o��������������`fӊ8�HC ���������h]����������������������ha����ؕ��h]�����������������������v����������^�������������0�h�����Xe�������t�������"�����x���@��_���������P�������xi��������pv�����pv��|p}��@��_�p����!0����X��|p}P�@��_�)�������`@��_���������Р@Y��Ƹ‰H +�X��k�P� +���:-��p��h��̙� ��v�= �~���v]�i��(����H�8�p�p�`�����P���`�x�����`���H�HC �� ���������HC �H +�����HC �� +���������x�P�p�����8���h]6�������������X�?�xi?��������� �X[�l?�����������������xiK������������ �pG���������-8�x�xi[���������0�(2�`fT���h����hg2���H�`�����`d�������h]h��������������~�n�h]h���������������n�had�(��HC ��~�h��X����|p}x�@��_�8�X�x����|p}�@��_�x�e�����`@��_���������ЩH�8�p�p�`�����P���`�x���(�`����h]}�������������@Y�~�xi����������@�� `y�������Цh]�����������������hay���РHC �@Y���h]���������������������^�������������H������Xe�������ct������X�0���h]�����������������h]��������������X���xi����������اX[�l��������������p����p����������/8���h]�����������������p�����������p�����Xe����`��������P�حH���РX����|p}x�@��_�8�X�x� ���|p}�@��_���e�����`@��_���������p�`�����P���`�x���(�`����`������ �8�h]��������������p����h]��������������X���h]�����������������l��������������`���h]��������������h���ha���ЩHC �p����h]����������������h�����^���������������Ю����Xe������h]ŋ�������������F�ϋ����h]Ћ������������h�Ӌ�lŋ����������������P���Xeŋ��h]��������������h���xi����������ȱX[�l��������������`���xi����������P�� �p����������0�� �`������������Щ�����|p}�@��_�ص������|p}��@��_���_�����`@��_���������x���(�`����h]�����������������h] �����������������p���������-x���h]���������������$�h]'�������������h�*�^%���������(�`�����Xe���h]C���������������I�xiM���������h�`&�h]S�������������h�V�`oQ���������&8���^J�������������H�����`oK���������&���XeC���hg�������������h����hg܋h���к������(����H�8�p�p�`�����P���`�x���(�`�����P�h�X�h]n���������������t�h]y������������������pu���������-�P�xi������������(2�`f��ȼ�h����hgj����(�����h]������������������xi����������нx5�l��������������h���8�X�h]�������������������l��������������������(�`f����HC �pv�����h]���������������������ha����H��h]����������������������v���������^���������������ؿ����Xe������t������"pv��h���@��_���������h� ����xiÌ�����`�h)����h)��|p}� @��_�����[�z�N ��(��|p}��@��_�ތr� ����`@��_����������~�/���潳�PE���~���H +���k�P� +�H�:-��(U�fA��� ���v�= H/���v ������H�`���p��������������(���H�p������hG�ŀX@��^��5�@H��v��)��.�{�(j�)����x���8k���x�h�`����z�(�HC x�� ���������HC x�H +���������HC x�� +���������H/�����/�H���h]ߌ����������������h]������������������HC x�H/�����HC x��/������ #X�h�������0�`�h]���������������F�������h]�������������������l������������������`���Xe���h]��������������F������h]�����������������l�����������������p���Xe��h]���������������"�h]'���������������)��p#���������-����xi8���������`���`f1�0��h����hg���x�������h]A���������������E�h]H���������������M�xiM���������p�H^�lM��������������@�����h]V���������������Z��lN���������������������^F�����������0�����XeA���h]a���������������c�h]f���������������k�xik�����������H^�lk�������������(�`����h]t���������������v��ll���������������������^d�����������P�����Xea���h]������������������h]�������������������p����������-�H�xi��������������`f�����h����hg~���� �����`ɍ������`�h]͍������������PE�֍�H�`���p��������������(���H�8�������x�h������ �X���p�������xiٍ�������� �� h]ٍ��������������ڍhaɍ8�x�HC x�PE�ڍh]����������������������^���������������������Xe�����x�����|p}(�@��_����(����|p}��@��_���U�����`@��_���������p�����x�h��c������������h]������������������h]������������������xi����������x�X[�l���������������H��p����������/����h]��������������� �p���������������Xe�H�`�������������������|p}�@��_���������|p}��@��_� �U�����`@��_���������x�h�h]����������������xi������������`�l�������������x���H�h�h])���������������2��l�������������������8�xi8���������(�/� �p4���������-�����n4���������5@�fI����h����hg�����������X�h�������0�`��������0�����8`Z���������h]^�������������(U�e�h]h���������������l�xil�����������X[�ll��������������P�h]m���������������s�haZ���x��z�h���� X[�P���7 ����ˈ: �/���潳�(U���fA��� ���v�= H/���v �H +���k�P� +�H�:-��k�8�J��،�(�(�A +PE���~���h�(�N��HC x�(U�s�h]����������������������^���������������������Xe����0�`y���������h]}�������������h���h]������������������h]������������������`o����������' �X�h]��������������(���hay���x�HC x�h���h]����������������(�����^�������������p�������Xe������`ǎ����X��h]ˎ������������k�ҎxiՎ����������� h]Վ������������8�֎haǎ��x�HC x�k�֎h]����������������8�����^���������������������Xe������x������|p}��@��_�������P��|p}p�@��_���G�����`@��_���������������� ���c܎����P�x�8�h]��������������8���h]������������������xi���������� �X[�l�������������������p����������/��8�h]��������������8��p�����������������Xe����`������������(������|p}��@��_�������@��|p}`�@��_��G�����`@��_��������� ��h]����������������xi������������`�l������������� �X����h]�������������8�$��l���������������������xi*�����������/� �p&���������-H����n&���������5��f;�0��h����hg �(�X�p������H�`���p��������������(���H�8�������x�h������ �X���p����������� ��P���� �X���p��H���P�` + NhRP�0h��0" #X#�)`L��������h]P��������������z�U�h]X���������������Z�xiZ�����������X[�lZ�������������P���h][�������������h�a�haL��x�HC x��z�a�p����H�0�� +h]����������������h�����^���������������������Xe����0�`g��������h]k�������������،�p�h]t�������������h�y�h]|�������������8���`oz���������' �X�h]��������������(��hag���x�HC x�،���h]����������������(����^�������������p������Xe�����`ʏ����X h]Ώ������������X[�ԏh]؏������������(�ߏh]��������������(���p����������/��h]��������������(���h]��������������(��r؏��������H�h]��������������P��haʏ�x�HC x�X[���h]����������������P����^�������������������Xe�����`������x h]�����������������xi����������� xi���������8��� h]���������������ha�Px����R�~���hN��<X[�P���7 �/���潳�(U���fA��@Y�� +Ƹ‰ k�8�J��h�(�N�������ˈ: H��@a�GpB� ���v�= H/���v �،�(�(�A +H +���k�P� +�H�:-���z�h���� PE���~���HC x�����h]���������������������^������������������Xe����( `������ � h] �������������@Y�!�xi$���������H +� h]$�������������� +%�ha�` +x�HC x�@Y�%�h]����������������� +����^�������������  +����Xe����8 ��X�h�������0�`��������0�����8� �`hx�x�H���|p}h@��_�(H�YC'��|p}@��_�/�ʔ����`@��_���������(P�0h��0" #X#�)p*�*,�1�2�c+�����`�Hh]2�������������� +3�h]7�������������P=��p4���������1Ph]A�������������� +B�pA���������������XeA�`���������`K�K�O�X� ����|p}�@��_����TC$P�|p}p@��_�D�ʔ����`@��_����������0h��0" #X#�)p*�*,�1�2�2(4`4h]P�������������� +Q�h]V�������������P\��pR���������-0h`��������(J0J(0���|p}P@��_�0�H!��|p}�@��_�^�������`@��_����������5��0" #X#�)p*�*,�1�2�2(4`4�9�:h]l�������������(q�h]t�������������Pz��pr���������0��`����������3�����|p}�@��_�� � �  +P!�|p}p!@��_�|�)�����`@��_����������-0" #X#�)p*�*,�1�2�2h]������������������xi�����������"�`�l��������������0"h"#�#h]��������������8���h]��������������� +��`o����������& #X#�l�������������������"�"xi����������X$/� �p����������-�#($`���������$,('���|p} '@��_��'( (�(�|p}�(@��_���t�����`@��_����������)p*�*h]N���������������P�xiP����������) ��lP��������������)�)P*h+h]W�������������8�^�h]a�������������� +b�`o_���������&p*�*xie���������P+� `oc���������&�* +�lQ�����������������*@*`fG��+h]~�������������� +�xi�����������,� �p����������-,P,`�������� -�3((/���|p}H/@��_�0(0H0�0�|p}�0@��_��������`@��_����������1�2�2h]������������������xi����������2 ��l���������������1�1x23h]�������������8� �h]�������������� +�`o���������&�2�2�l�����������������(2h2`f��H3�h����hgz��,�,�3����hg��p$�$�3����h]3�������������(�:�h]=�������������PC��p;���������0(4`4`�������� 5�H�(7���|p}H7@��_�8(8H8�8�|p}�8@��_�E�ۓ����`@��_���������XC�9�:�:�@0A�A`Gh]U���������������Y�xiY���������:�`�lY��������������9�9x:;h]e���������������n�h]q�������������� +r�`oo���������&�:�:�lZ�����������������(:h:xix����������;/ �pt���������-H;�;`��������p<�A�5x>���|p}�>@��_�X?x?�?@�|p}8@@��_���2�����`@��_����������@0Ah]��������������!�h]$�������������� +%�^"����������@0A����Xe�hAh]<�������������� +=�xiB���������8B �p>���������-�AB`���������B0H�5�D���|p}E@��_��E�EF�F�|p}�F@��_�E�ѓ����`@��_���������`Gh]�����������������xiÓ���������G ^����������`G�G����Xe���G�h����hg8�PB�BHH����hgQ��;(<XH������0" #X#�)p*�*,�1�2�2(4`4�9�:�:�@0A�A`G�h����hg/��4�4�I����hgh� `�I����f���0h��0" #X#�)p*�*,�1�2�2(4`4�9�:�:�@0A�A`GLM@MHOpP`Q�QS�S�S�h����hgL���PK����`�������K�Oh]�����������������h]��������������� �xi ����������L�`�l �������������LPL�LxMh]���������������!�h]$�������������� +%�`o"���������&M@M�l ������������������L�Lh]%�������������hN&�ha��N(HC x��� &�(�p����H�0�� +HN�R ah]����������������hN����^�������������HO�M����Xe�����O`.�����0P�Sh]2���������������8�h];���������������=�xi=����������P�`�l=�������������pP�P@Q�Qh]I�������������8�P�h]S�������������� +T�`oQ���������&`Q�Q�l>������������������P0Qh]T��������������RU�ha.�hR(HC x��� +U�h]�����������������R����^�������������SR����Xe����@Sh]a�������������hNi�h]n��������������Rt��pj���������-�S�S�nj���������5Tf~��h]��������������hN��0h��0" #X#�)p*�*,�1�2�2(4`4�9�:�:�@0A�A`GLM@MHOpP`Q�QS�S�S�TxW�Wxi���������� W/ �p����������-�T�Vh]�����������������h]”������������� +Ô^����������xW�W����Xe���W�h����hg��8W8XPX����hg]�XT�T`X����P�0h��0" #X#�)p*�*,�1�2�2(4`4�9�:�:�@0A�A`GLM@MHOpP`Q�QP�0h��0" #X#�)p*�*,�1�2�2(4`4�9�:�:�@0A�A`GLM@MHOpP`Q�QS�S�S�TxW�W�H�`���p��������������(���H�8�������x�h������ �X���p����������� ��P���� �X���p��H���P�` + NhRP�0h��0" #X#�)p*�*,�1�2�2(4`4�9�:�:�@0A�A`GLM@MHOpP`Q�QS�S�S�TxW�W�`�a8fpf�f`h�hixn�n(op@v�w�xHz�{�{�|�|�� �������Ї`Д����``bh]Ԕ������������H��הxiڔ���������`��h]ڔ������������@aܔhaД�`x�HC x�H�� ܔh]����������������@a����^��������������a�`����Xe�����ax��c���|p}�c@��_��d�d�d Xe�|p}xe@��_�D�!�����`@��_���������pj8fpf�f`h�hixn�n(op@v�w�xh]E�������������� +F�h]I���������������R�h]U��������������b�`oS���������&pf�fxie���������Pg `oc���������&�f g^G���������8fhg����XeE��g�c@������i�g�h�ih]h�������������� +i�h]m���������������t��pj���������1`h�hh]x�������������� +y�px����������i����Xex�Hi`���������iz0b�k���|p}l@��_��l�lm�m�|p}�m@��_�{�!�����`@��_���������8rxn�n(op@v�w�xh]��������������� +��h]�������������������p����������-xn�nh]������������������xi�����������o�`�l��������������(o`o�oph]��������������� +���l�������������������o�oxi�����������p/( �p����������-Pp�p`o�����������n�p`���������q�ypj�s���|p}�s@��_��t�t�t`u�|p}�u@��_��������`@��_���������@v�w�xh]ƕ������������@aɕxiɕ���������vX[�lɕ������������@vxvxiՕ��������0w0 �pѕ��������-�vwh]��������������@a��xi�����������w��^������������w�wXx����`o����������&�w�wXe��xh]�������������@a �xi ���������y �^ +�����������x�x�y����`o ���������&�x�xXe�0yhg•Hw�x�y�����h����hg��0qpqz����h]��������������@a��xi�����������zX[�l��������������Hz�zxi����������8{8 �p����������0�z{h]��������������@a��h]������������������xi����������0| ��l���������������{|�|(}h]Ö������������8�ʖh]͖�������������ږ`o˖��������&�|�|�l������������������H|�|`o����������&�{h}`f���}`��������`~����`�x�h����|p}��@��_�H�h�����|p}(�@��_���n�����`@��_����������� �������Їh]��������������8���h]����������������^������������� �������`o����������&�� �Xe��X�h]����������������xi���������h��`�l��������������8�Є��h] �������������8�'��l���������������������xi-�����������/@ �p)���������-(���h]@�������������8�G�p@���������������Xe>�@��h����hg�ȅ��������h]V���������������X�xiX���������H� ��lX������������������Їh]_�������������8�f��lY�����������������`���`fO��hg��P{~~����HC x�h)� ����h]����������������������ha������x�h]�����������������������v͌��������^�������������H�������Xe�������t͌�����"h)�x����@��_�������͌0��"�����j(��������(� z��xix������P�X.�����X.��|p}�@��_�Ѝ�����p�h��|p}��@��_���������`@��_���������H +����k�P� +��:-��� �p�v�= ��&�(5�Ȑ��h�HC h�� ���������HC h�H +���������HC h�� +��������� �Ȑ��h]�����������������HC h� �����X�8�Бh]�����������������`f����HC h�X.�����h]����������������������ha����0�h�h]�����������������������v����������^���������������������Xe�������t������"X.�h�H���@��_��������� �P�$����xi������H��z������z��|p}� @��_�Ȗ��8�!!�� h����|p}��@��_�їD�����`@��_���������x����z��dH +����k�P� +���:-�� T���*��8�����I� �h�v�= ���&�(5�������������@���`����ئ0�ШP���؟����h�HC `�� ���������HC `�H +���������HC `�� +��������� ���֗h]җ��������������֗HC `� ������� ��X�������x�ذh]ޗ�������������F���ؚ��h]�������������������lޗ������������������ȚXeޗ0�h]������������������xi�����������X[�l����������������؛xi�����������H �p���������- �`�xi����������(2�`f����h����hg����0�H�����`!�����НȠh]%������������� T�)�h],���������������0�xi0���������x��`�l0��������������H����xi<���������0�P �l1�������������������Оh]=���������������>�ha!���`�HC `� T�>�h]����������������������^�������������@�H�����Xe����x�`D�����(���hasRoot]�0���Ih]H�������������8�O�h]S���������������W�xi\����������/X �pX���������-��ءh]c���������������d�haD�`�`�HC `�8�d�h]����������������������^�������������� �����Xe����8�`j�������`�h]n����������������q�xiu���������X�` xit�������������h h]u���������������v�haj���`�8�����I� �h�v�= ���&�(5@Y���Ƹ‰�����z��dH +����k�P� +���:-�� T���*��Ќ������nHC `����v�h]����������������������^�������������ئp�����Xe�����`|�������X�h]��������������Ќ���xi�����������łh]������������������ha|�0�`�HC `�Ќ���h]����������������������^�������������Ш�����Xe�����`�����|p} �@��_���� � ���|p}��@��_���������`@��_���������H���8�(���P���x�p��8�p�8�h]��������������@Y���h]������������������xi���������� �X[�l������������������xi������������p `o����������'8�x�`������H���h]������������������ha��P�x�HC `�@Y�����؟����h���h]����������������������^�������������8�������Xe����p��c�����������h�h]������������������xi������������x �p����������2(�`�h]����������������˜p�����������������Xe�� �`��������ȲX��x�д���|p}��@��_���е��p��|p}��@��_�Ę������`@��_���������0�P���x�p��8�p�8�h]̘��������������Иh]Ә��������������טxiט�����������`�lט����������������X�x�h]�������������������lؘ�����������������H�^ј��������P�������Xe̘�h]������������������xi����������ع/� �p����������-p���`��������x�8�H������|p}��@��_�`����� ��|p}@�@��_��W�����`@��_���������0��8�p�h]�����������������n���������5�`��������������������|p}��@��_�������X��|p}x�@��_� �O�����`@��_���������8�p�h],���������������/�h]2���������������3�^0���������8�p�����Xe,���f?�ذ�h����hg �8�h�(�����`������������H������|p}��@��_�������X��|p}x�@��_�]�������`@��_���������8�h]������������������xi����������Pj�^����������8�p�����Xe����hg����0�h����������������@���`����ئ0�ШP���8�(���P���x�p��8�p�8�@�H�0�h�@�x�h]Ù��������������ƙxi̙����������� xi˙������������� �pǙ��������-@���h]ܙ����������������xi������������`&�xi������������(2�rܙ��������H�����`fՙ��h����hg���P�h�����p���X�������x�ذx���h]�����������������h]����������������xi ������������ �p���������-h���`o���������0���//] �h���sxi�����������p�`f����h����hg��(��������h]-���������������1�xi1����������� ��l1�������������@�x��0�x�xi8���������`�� h];���������������>��l2��������������������`f&���HC `��z�����h]���������������� �����ha����h�`�h]���������������� ������v����������^���������������������Xe���� ��t������"�z�`�@���@��_���(������&����xiJ� �������i��� ��i��|p}�� @��_�� ��IC<0� ���x�|p}��@��_�e�ԣ����`@��_�����������LK���v:�H +����k�P� +�0�:-��H}�P��S_���z��d� ���v�= �h�&�(5h�����0�H���(����������P�p���h���0�0������HC ��� ���������HC ��H +���������HC ��� +��������� ���j�K�0�o�h]f�������������h�j�h]l���������������o�HC �� �����HC ��K������hy���(�8����wh]{���������������~�h]�������������������p���������-H����n���������5��h]�������������������n����������8(�xi������������`��p����������-`����n����������5��`o�������������h]��������������x�š����xiÚ�������� ��s�hm�������������������s����������8�Xe�����h����hgw�H���������h]���������������F���`���h]��������������h����l�������������������P�Xe����`�����p� �h]�������������H}� �xi������������ h]�������������P��ha�����HC ��H}��h]����������������P�����^���������������������Xe������`���������h]�����������������xi ������������ xi���������8���� h] �������������(�!�ha�P���P����*&{� +K���v:�� ���v�= �h�&�(5@Y���Ƹ‰H +����k�P� +�0�:-��H}�P��S_���(�z��dЌ� ����n�����F��� HC �����!�h]����������������(�����^�������������p������Xe������`'�����X���h]+�������������Ќ�7�xi:����������łh]:������������� �>�ha'�����HC ��Ќ�>�h]���������������� �����^�������������h�������Xe������`D�����P�h]H�������������@Y�I�h]H���������������I�haD�����HC ��@Y�H�h]T���������������W�h]\���������������e���0�H���(����������P�p���h���0�h����`���0�p�0�0�h�H�x������x�pX���������-0�h��nX���������5��h]i���������������l�xil�����������X[�ll��������������P�xiv����������� �pt���������0����`of����������� �h]{���������������~�xi~����������X[�l~�����������������h]��������������h���xi������������X[�l��������������`����p����������1 ���`ox���������`� �`���������������h�G�I�������|p}�@��_�����`E!���|p}��@��_���`�����`@��_����������p�0�0�h�H�x������x�B�BHC�C Dh]������������������xi������������X[�l��������������p���h]��������������h���xi������������X[�l��������������0�h��p����������-����h]����������������Ûh]ț������������h�̛�pě��������-0�h�`o��������������xiݛ��������P���`f֛ ��h����hg����h�������`��������h]�������������������h]������������������xi������������X[�l��������������H���xi���������8�� `o����������'���h]����������������ha����h�HC �������x0��������h�h]����������������������^�������������x�P�����Xe������` +�����`�X�h]�������������P���xi"������������ xi!������������� h]"���������������#�ha +�0�h�HC ��P��#�h]����������������������^���������������������Xe�����h�����|p} �@��_��� ��|p}�@��_�/�Š����`@��_�������������xh]0���������������1�h]4�������������h�8�xi8��������� X[�l8���������������xiB����������� `o@���������'8x^2���������������Xe0��c+�����P8�h]E���������������F�xiJ��������� � �pG���������2��h]O���������������P�pO����������x����XeO��`��������X�� hB��`���|p}�@��_�@``A! �|p} @��_�R�Š����`@��_���������8 T�@ *��h +X � � ���@$�$ %�&,P,@-�2 `\�����( +� h]b������������� T�f�h]i�������������h�m�xim���������� +�`�lm�������������h +� +8 X h]y���������������z��ln������������������ +( h]z�������������@ {�ha\�� �HC � T�{�^�������������� � ����Xe����� h]��������������@ ��xi����������X /� �p����������-� ( `��������� @����|p} @��_�� ��|p}�@��_���������`@��_�������������h]6������������� �B��n5���������5�`��������0x8���|p}X@��_�8X��|p}�@��_�D������`@��_�����������h]R�������������P�W�h]Z���������������[�xi^���������X� `o\���������&�(^X����������p����XeR��fm�h�h����hg1���0����`���������X&0A�����|p}�@��_����`�|p}�@��_���������`@��_���������(@$�$ %�&,P,@-�2989�>@P@h]������������������xi����������� xi������������� �p����������-@�`����������$0&8�!���|p}�!@��_�x"�"�"8#�|p}X#@��_���������`@��_���������$�$ %h]V������������� �b�xie���������Pj�^c���������$P$����XeV��$h]x�����������������h]������������������xi�����������% `o����������& %X%^�����������$�%����Xex��%�h����hg��HH&����h]������������������xi�����������& �p����������2�&�&`���������'�@8�)���|p}�)@��_�x*�*�* 8+�|p}X+@��_���������`@��_����������:,P,@-�2989�>@P@h]��������������@ �h]��������������� +�xi +����������,�`�l +�������������P,�, -@-h]�����������������l ������������������,-�p���������-,x-`��������X.�9(`0���|p}�0@��_�@1`1�12�|p} 2@��_��������`@��_����������4�2989h]5���������������;�p5�����������2����xiA����������3 xi@����������3��( �p<���������-3�3`��������x4�9�.�6���|p}�6@��_�`7�7�7 8�|p}@8@��_�D�ܟ����`@��_���������989h]ğ������������(�ǟh]ʟ��������������˟^ȟ��������989����Xeğp9�h����hg/��304�9����`��������`:@�@(h<���|p}�<@��_�H=h=�=>�|p}(>@��_���������`@��_����������>@P@h]g���������������m�xiq���������P?0 xip����������?��8 ^n����������>h?����Xeg��?h]��������������(���h]������������������^����������@P@����Xe���@hg���-.:�����h����hg��'H' A����h +X � � ���@$�$ %�&,P,@-�2989�>@P@hg��p � p����h]Ѡ������������P�֠h]۠������������(�ޠ�pנ��������-�B�Bh]��������������(���h]������������������^����������HC�C����Xe���Ch]�������������(��xi����������D@ xi����������D��H �p���������- D�Dh]#�������������(�&�p�0�0�h�H�x������x�B�BHC�C D(EhFH�H(Ih])�������������h�-�xi-����������FX[�l-�������������hF�F^'���������(E�F����Xe#�(G�h����hg ��DxG�G����hg͠CD�G����h]C�������������h�G�xiG���������hH ��lG�������������H8H�H�H(Ih]N�������������P�S�h]U�������������(�X��lH������������������H�H`f<�`I��0�H���(����������P�p���h���0�h����`���0�p�0�0�h�H�x������x�B�BHC�C D(EhFH�H(I�TUW�W(]^d8ipi�j�p�q�qhsuv8v`��������0L�V�t�w��8N���|p}XN@��_�O8Opv!�O�|p}�O@��_�f�У����`@��_����������P�TUW�W(]^d8ipi�j�p�q�qhsuv�LHR���|p}hR@��_�(SHShS �S�|p}T@��_�r�{�����`@��_��������� Y�TUW�W(]^d8ipi�j�p�q�qh]s���������������t�h]w�������������h�{�xi{���������hUX[�l{�������������U8Uxi�����������UP `o����������'�U�U^u����������TV����Xes�HV�cn�����XX�V�W@Xh]������������������xi����������hWX �p����������2W8Wh]������������������p������������W����Xe���W`���������X8s�P�Z���|p}�Z@��_��[�[�[ H\�|p}h\@��_���{�����`@��_����������l(]^d8ipi�j�p�q�qh]��������������h���xi�����������]�`�l��������������(]`]�]^h]�������������������l�������������������]�]xi�����������^/` �p����������-P^�^`��������x_�j Y�a���|p}�a@��_�`b�b�b c�|p}@c@��_�á������`@��_���������0ed8ipih]^������������� �j��n]���������5d`���������d�j�j�_�f���|p}�f@��_��g�g�gXh�|p}xh@��_�l�������`@��_���������8ipih]z�������������P��h]������������������xi�����������ih `o����������&pi�i^����������8i�i����Xez�0jf���V�h����hgY�8dhd�j����h]��������������(���xiĢ��������Xkp xiâ���������k��x �p����������-�jpk`��������@l�q�r YHn���|p}hn@��_�(oHoho�o�|p}p@��_�Ǣs�����`@��_����������p�q�qh]=������������� �I�xiL���������Pj�^J����������pq����Xe=�0qh]]�������������(�`�h]c���������������d�xig���������8r� `oe���������&�qr^a����������qPr����Xe]��r�h����hg���k�k�r����hg���^0_s����h]��������������(���xi�����������s� xi����������t��� �p����������-hs�sxi�����������t��`f��pt�h����hg��0t�t�t����h]��������������h���xi����������xu ��l��������������uHu�uv8vh]��������������P�ãh]ţ������������(�ȣ�TUW�W(]^d8ipi�j�p�q�qhsuv8v�l�������������������u�u`f��xwhgP�`����K����HC ���i�����h]����������������x����ha����`x��h]����������������x�����vT���������^��������������x�x����Xe����y�tT� ����"�i�������@��_�zz zT�P��y(����xiڣ����xz�(���|�(��|p}�� +@��_��|}��!x� �~ ��|p}�}@��_���N�����`@��_��������������0�@�V�W!H +��~�k�P� +�(:-��83�P�bF:,���z��d� ��~v�= �(�&�(5(����(���������P�p�Ȋh�،��@����� �0����HC �z� ���������HC �zH +���������HC �z� +��������� ����h]��������������(���HC �z �����H� +��Ё(�8�����h]��������������F� +��(�h] �������������(���l���������������������Xe�`�`�������h]��������������0�"�xi&������������ xi%���������Ђ��� h]&�������������@�'�ha����zHC �z�0�'�h]����������������@�����^���������������������Xe������`-�����p� �h]1�������������83�:�xi=������������ h]=�������������P�>�ha-����zHC �z83�>�h]����������������P�����^���������������������Xe����Ѕ`D���������h]H����������������K�xiO������������ xiN���������8���� h]O�������������(�P�haD�P��z83�P�bF:,�0�@�V�W!� ��~v�= �(�&�(5@Y���Ƹ‰ H +��~�k�P� +�(:-�����(�z��dЌ� ����nX;�0��Z�FHC �z���P�h]����������������(�����^�������������p������Xe������`V�����X���h]Z�������������Ќ�f�xii����������łh]i������������� �m�haV�Ȋ�zHC �zЌ�m�h]���������������� �����^�������������h�������Xe������`������P�H�h]��������������X;���xi������������� h]��������������0���ha��،�zHC �zX;��� � �0�����x�h]����������������0�����^���������������������Xe�������z�����|p}�@��_�А������|p}��@��_��Ө����`@��_���������������Е��h] �������������@Y� �h]�������������(��xi����������X[�l�����������������xi������������ `o���������'(�h�`�����8�h�h]����������������ha�@�h�HC �z@Y��h]����������������������^���������������������Xe������c�����(���P��h] ���������������!�xi%���������8�� �p"���������2Е�h]*���������������+�p*����������������Xe*�Ȗ`��������p���������`��zx����|p}��@��_�X�x���!��|p}8�@��_�-�Ө����`@��_����������� T�X�*����p�����Щ���������(���������8�`5�����@���h];������������� T�?�h]B�������������(�F�xiF������������`�lF�����������������P�p�h]R���������������S��lG������������������@�h]S�������������X�T�ha5����HC �� T�T�^��������������������Xe������h]`�������������X�d�xii���������p�/� �pe���������-�@�`���������X���������|p}8�@��_����8����|p}أ@��_�r�h�����`@��_���������ȥ��Щ�h]������������� ���n���������5��`��������H��0���P����|p}p�@��_�0�P�p����|p}�@��_��N�����`@��_���������Щ�h]!�������������P�*�h]-���������������.�xi1���������p�� `o/���������&�@�^+���������Щ������Xe!�Ȫf>����h����hg�Ф�H������eW����h����hg\���ȟ������h]s�������������(�v�xi|���������H�� xi{�������������� �pw���������-��`�`��������0�p�г��8����|p}X�@��_��8�X�ذ�|p}��@��_�������`@��_���������������h]�������������� ���xi����������Pj�^������������������Xe�� �h]�������������(� �h]����������������xi���������(�� `o���������&����^ �����������@�����Xe����h����hgo�����������h]'�������������X�+�xi0�����������.�p,���������-(�`�`��������0�����8����|p}X�@��_��8�X�ظ�|p}��@��_�9������`@��_�������������������h]��������������@���xi���������� �xi����������h����p����������-��8�h]��������������@���h]������������������^������������������Xe��0�h]̧������������0�קxiܧ����������pا��������-��л�nا��������5�h]��������������0���xi������������ ^������������������Xe����h����hgȧX�X�p�����hg��������������p�����Щ���������(���������������h] �������������@��xi���������P�(xi�������������0�p���������-��h��n���������5��`��������h����p����|p}��@��_�P�p�����|p}0�@��_��ͨ����`@��_�����������h]��������������0���xiè��������X�8xi¨������������@^������������p�����Xe�����h����hg��� � �����hg#�����0��������(���������P�p�Ȋh�،��@�����Е�������������� �X�������h]ݨ������������@���xi�����������Hxi����������H���P�p����������-���h]��������������(���xi����������Xxi���������P���`�p����������-�� �`o����������`�h�h]O�������������0�Z�xi_���������P�h�p[���������-�� �`o�����������h�h]��������������0���xi����������P�p�p����������-�� �h]Ω������������@�֩h]۩������������(�ީxi����������H�x`oߩ��������'����pש��������-��`�`o©��������h���h]��������������@���h]��������������P��xi������������`o���������&X����p����������- ���`o�������������`oa�����������X�`�������� ����z(����|p}H�@��_��(�H����|p}��@��_� �$�����`@��_���������xi�������������`f����h����hg٨�������������Ё(�8��������h]0�������������(�4�xi4���������8� ��l4����������������������h];�������������@�C�h]E�������������(�H��l5�����������������P���`f)�0�HC �z�(�����h]����������������������ha�������zh]�����������������������v����������^�������������@�x�����Xe�������t������"�(��zp���@��_���������Hz�*����xiT���������������|p}��@��_�������@� ����|p}`�@��_�k�Z�����`@��_����������H +�h��k�P� +���:-��� � �v�= 8F��������x�H��� ����p���HC �� ���������HC �H +���������HC �� +���������8F�x�v�h]l���������������v�HC �8F������h����h]������������������xi�������������p����������-H���h]�������������������n����������8��xi����������������p����������-(�X��n����������5��`o��������������`����������h�������|p}��@��_�������@��|p}`�@��_���1�����`@��_��������� ��h]˪������������x�Ԫh������@�ު��x�����H�xiު����������h��xiު����������h��h]��������������� ��n���������8�xi �������������xi ��������������H�n������������`oު��������&�� �`o���������&`�x�hmǪ�������� �X������s������������Xe��8��h����hg~��P�������h]=��������������\�D��(�p�xiE���������X�`&�h]J���������������T��l=���������������������`f6���HC �������h]���������������������ha����`��h]����������������������v\���������^���������������������Xe������t\�����"�������@��_��� �\�����,�����j(��������(� z�� �������@���xi`���������������|p}�  @��_�����pz�dH& 0�p��|p}p�@��_�u�`� + ����`@��_���������p������������n�H +�x��k�P� +���:-�� T��*��� �0�v�= ���&�(5����X���P���������� H(P�� ���@�HC (�� ���������HC (�H +���������HC (�� +��������� ���z�h]v���������������z�HC (� �����ؤ#P�h�8�h���h]���������������F�������h]�������������������l������������������X���Xe����`��������x�h]�������������������� ��h� ���xi����������P��H�xi�������������� �h���������xi������������G�xi����������P����� ���������xi������������pI�xi�������������������������xi«��������x�K�xiǫ������������H�����������xi˫��������0�hJ�xiѫ��������x����H�����������h� ����� j����������������h]ԫ��������������իha��P�(�HC (���իh]����������������������^��������������������Xe����(�h]߫����������������xi������������X[�l������������������xi��������������p����������-�P�h]�����������������`f�����h����hg۫���(�����`��������h] ������������� T��h]����������������xi���������X��`�l���������������(�����xi#�����������l�����������������p���h]$��������������%�ha��(�HC (� T�%�h]���������������������^������������� (����Xe����X`+������h]/����������������9�h]=��������������A�xiF����������/��pB���������-H�h]M��������������N�ha+�(�Ќ�����n @Y�Ƹ‰ 83��bF:, �������������n�� �0�v�= ���&�(5H +�x��k�P� +���:-�� T��*��H}���S_�0��V�W!����z��d +HC (����N�h]���������������������^�������������(�����Xe����``T�����h]X�������������H}�]�h]X��������������]�haT�P(�HC (�H}�X�h]g��������������q�`��������pP 8(�x ���|p}� @��_�X +x +� + �|p}8 @��_�s�������`@��_���������� h h]{���������������~�xi~���������` �H�l~�������������� 0 xi����������� `&�^����������x � ����Xe{� h]�����������������xi����������� �^����������h � ����Xe��� ��X���P���������� H(P�� h (X@8��0�(P� 8$�%�&�+,`����������(�����|p}�@��_����H�|p}h@��_���������`@��_���������(h]�����������������xi������������^����������(`����Xe���hgc��(X����`Ĭ������h]Ȭ�������������0�ЬxiԬ����������xiӬ��������@���h]Ԭ�������������լhaĬX(�HC (��0�լ���@��p��� h]���������������������^�������������@����Xe����xP�h�8�h���@hx���$�+�X�`۬�����`h]߬������������83���xi���������� �h]�����������������ha۬8(�HC (�83���h]���������������������^�������������������Xe����`��������h]�������������������xi����������0�xi����������x���h]�����������������ha���(�HC (������h]���������������������^�������������0H����Xe����h`������h]�������������Ќ��xi����������łh]���������������ha��(�HC (�Ќ��h]���������������������^�������������(X����Xe����``!������$h]%�������������@Y�&�h])���������������-�xi-����������X[�l-�������������P�xi7���������@ �`o5���������'� h]7��������������#8�ha!�� (�83��bF:, @Y��#Ƹ‰ ���&�(5 T��*��Ќ�����n �������������n�� �0�v�= �0��V�W!H +�x��k�P� +���:-��H}���S_����z��d +X;�&�Z�F HC (�@Y�8�h]�����������������#����^�������������8$X ����Xe����p$`������ %h'h]��������������X;�ĭxiǭ���������%�h]ǭ������������&ȭha���%(�HC (�X;� ȭp����@��p��� �%h]����������������&����^��������������&`%����Xe����'(�)���|p}0)@��_��)*�[!�*�|p}�*@��_���������`@��_����������-�+,�,�102 34�9�>?�@�F�G�G8I�N�c������(-P,-h]���������������#��h]������������������p����������2�+,h]���������������#��p������������,����Xe���,`��������p-4�@Ip[�'x/���|p}�/@��_�X0x0�R!1�|p}81@��_���������`@��_����������U�102 34�9�>?�@�F�G�G8I�N�OP�Ph]�������������� �h]����������������xi����������2�`�l�������������02h23 3h]��������������#��l������������������2�2^ ����������1X3����Xe��3h],��������������0�xi5����������4/��p1���������-4P4`�������� 5h@�@�-(7���|p}H7@��_�8(8H8�8�|p}�8@��_�>�4�����`@��_����������:�9�>?h]Ӯ�������������߮�nҮ��������5�9`��������X:(@@@�5`<���|p}�<@��_�@=`=�=>�|p} >@��_��������`@��_����������>?h]�����������������h]���������������#��xi�����������?�`o����������&?P?^�����������>�?����Xe���?f +��+�h����hgή�9:X@�����e#��+�h����hg(��4�4�@����h]?��������������B�xiH���������XA�xiG����������A���pC���������-�@pA`��������@B�G�H�-HD���|p}hD@��_�(EHEhE�E�|p}F@��_�K�������`@��_����������F�G�Gh]���������������¯xiů��������Pj�^ï���������FG����Xe��0Gh]ԯ�������������ׯh]گ�������������#ۯxiޯ��������8H`oܯ��������&�GH^د���������GPH����Xeԯ�H�h����hg;��A�A�H����h]�����������������xi�����������I.�p����������-8IpI`��������@J�R�-HL���|p}hL@��_�(MHMhM�M�|p}N@��_��Ͱ����`@��_����������N�OP�P�Qh]^��������������f�xil���������0Oxik���������xO�� �pg���������-�NHOh]y����������������h]���������������#��^�����������OP����Xey�@Ph]��������������&��xi����������Q(�p����������-�P�P�n����������5(Qh]��������������&��xið��������R0^�����������Q�Q����Xe��R�h����hg��hQhR�R����hgZ��O�P�R�����102 34�9�>?�@�F�G�G8I�N�OP�P�Q�SZh]װ�������������߰xi����������`T8xi�����������T��@�p����������-�SxT�n����������5�T`��������xU[�-�W���|p}�W@��_�`X�X�X Y�|p}@Y@��_���������`@��_���������Zh]��������������&��xi����������hZHxi�����������Z��P^����������Z�Z����Xe���Z�h����hgӰU0U0[����hg���I�I@[�����+,�,�102 34�9�>?�@�F�G�G8I�N�OP�P�Q�SZ��X���P���������� H(P�� h (X@8��0�(P� 8$�%�&�+,�,�102 34�9�>?�@�F�G�G8I�N�OP�P�Q�SZ�^�_ab�bcHd�d�j�p�qr�r�sh]�����������������xi����������(_Xxi����������p_��`�p����������-�^@_h]ı�������������DZxiͱ��������0`hxi̱��������x`��p�pȱ��������-�_H``o�����������_�`h]�������������&&�xi+���������xax�p'���������-aHa`oϱ���������`�ah]|�������������&��xi����������xb��p����������-bHbh]�����������������h]�����������������xi����������pc�`o����������'c@c�p����������-�b�c`o�����������b�ch]���������������òh]Ȳ�������������ѲxiԲ���������d�`oҲ��������&�d�d�pIJ��������-Hde`o����������d@e`o-����������a�e`��������Hf@z(�Ph���|p}ph@��_�0iPipi �i�|p}j@��_�ز������`@��_����������l�j�p�qr�r�s�tv�v�w�x�xh]�����������������xi����������8k�xi�����������k����p����������-�jPk�n����������5�k`��������Plz�fXn���|p}xn@��_�8oXoxo �o�|p}p@��_���������`@��_����������p�qr�r�s�tv�v�w�x�xh]����������������xi ���������@q��p���������-�pqh]���������������`o���������Xq�qh]'���������������*�xi*���������xrpI�l*�������������rHrh]2���������������5�xi5���������8shJ�l5��������������rsh]=���������������A�xiA����������s ��lA��������������s�s`t�t�txiH����������t�h]K��������������N��lB�����������������tPt^;���������Psu����^0����������rXu����Xe'��uh]h���������������k�xik���������xvpI�lk�������������vHvh]s���������������v�xiv���������8whJ�lv��������������vwh]~�����������������xi�����������w ��l���������������w�w`x�x�xh]�����������������h]������������������l������������������xPx^|���������Pw�x����^q����������vHy����Xeh��yhg���q�u�y�����h����hg���kl0z������X���P���������� H(P�� h (X@8��0�(P� 8$�%�&�+,�,�102 34�9�>?�@�F�G�G8I�N�OP�P�Q�SZ�^�_ab�bcHd�d�j�p�qr�r�s�tv�v�w�x�xx�8���@�x�p�0�h�0�������З���� ���؜�8�������p�����`���������~����(������|p}�@��_�؁��X�!���|p}��@��_���״����`@��_���������(�x�8���@�x�p�0�h�0�������З����h]���������������³xidz������������pó��������-x���h]̳�������������ֳ`oɳ����������8�`����������X�H�p����|p} �@��_���� ����|p}��@��_�س4�����`@��_�����������@�x�p�0�h�h]������������������xi������������hJ�l������������������h]������������������xi������������ ��l��������������@�x��0�x�xi����������`��h]�����������������l���������������������^�����������������Xe���h]����������������xi���������،pI�l�������������p���h]����������������xi����������� ��l�������������0�h�� �h�xi$���������P��h]'��������������*��l���������������������^�����������������Xe���`������������ؙp�����|p}Б@��_�����ВP��|p}p�@��_�:�������`@��_���������0�������З����h]D���������������G�xiG�����������hJ�lG�������������0�h�h]O���������������S�xiS���������X� ��lS���������������(������h]Z��������������c�h]e��������������m��lT�����������������p���^M�����������P�����XeD���h]x���������������{�xi{���������x�pI�l{��������������H�h]������������������xi����������8� ��l��������������З�������h]�����������������h]������������������l������������������P���^������������0�����Xex���hg��p���`�����h]������������������x�8���@�x�p�0�h�0�������З���� ���؜�xi������������K�l�������������� �`�h]������������������xi����������P� ��l���������������� ���؜�h]´�������������ʴh]̴�������������ϴ�l������������������h���^������������H�����Xe����hg���ef�~����h]�����������������xi��������������p����������08�p�h]������������������xi����������`��G�l����������������0�h]����������������xi��������� � ��l���������������������p�xi ���������ؠ�h]���������������xi���������X��`o���������'��(��l�����������������8�x�^����������x�������Xe���h]+��������������5�h]=���������������@�xi@�����������G�l@�����������������xiG�����������`&�^E���������(�h�����Xe=����h����hg'�p�������hgݴ��X�(�����h]X���������������[�`fQ���@�P�h�8�h���@hx���$�+�X���HC (��� +����h]����������������������ha����8�(�h]�����������������������vg���������^���������������Ȧ����Xe�������tg�����"��(����@��_�������g���X�.����xif�����P��E�xik� ������`&� �h���������xir�#������:](� �V�~�xi}�&������(�بX���������xi��)�������]�xi��,������ȩ���������xi��/�������xi��2������h����������� j5������@����h]���������������ha'�X���HC ��� +��^����������X������Xe������h]��?������������xi��<����Ȭ�]�l��9��������`���h]��L����������xi��I�������]�l��F�������� �X�h]��O��������ŵ^��B��������0^��5�������2Xe��h�h]ǵ\����������̵� � �� ������p�hF�Āh?�PY��X�`� ���Ю��X�H�ȳ��(���xi̵Y����@��l̵V��������Ю�h]յi��������ڵxiڵf������lڵc����������аh]��l������������^��_�����X�4^ӵR����X���6Xeǵ��h]��{����80���platform]0����-��xi��x��������l��u����:H���xi�~����p��]��p�r����-�@�h]����������h��xi������0�� �l����������ȳ�h]!����������&�^������H�������������>Xe/� �hg�����p�o�t ����d��������@��_���0�0�Xe���t������������ ���@��_��������HC ��� �����h]���� �������������^��������X�������h]K��������������`fK���HC ������������HC ��(D���������HC ��H ������������P���.this_function]�H��s�p~�pK��K�L�xM��M�8O�8R��S��T�Z� �� +���ɀ`ɀ�ɀ�ʀ(ˀh̀(πPЀ`р`ր �� +`D��D��D��F��F� I�@M�0��c�Xc��c� f�ph��j�`s��{�X����� ��� +@�� x�� �ς ҂�}��9�@:��:��;��>�B��F��H�J�b� e� +(�� (� HL��L��L��M� Q��U�����z�8{��{������@��`��@��ؤ�0�� �-�0.�x.� 0�h0�7�<�XF��V��i� l� +h|� H�� p�� @�����������P��p3��3�4�5��@��I� �h���������x������������� ��� +��� @@� Ї�H��� �0n�xn��n��o�@p�0w�{�}��~���� ��� +�M�-�X-��-��.��1�@4�8�:�`<��C� ���Ѝ��������Ȥ�����0����� ��x��p��h�� h�� +� �� P� ������P�!�#P%P-�6@o�o�o�pXw|����0�0��X������h����H���������(�8�h� ( +P � � + hN�R@ap�����h�����������������@ ����0�h���P�(� ����� �� +X��~�~((�@�P�(� �0��� �h�����0�x������������ � +� �# & � �x +� ��� �h�0�x����F� pĀ +�?� �\�  ��0�x����� �h�0�x����F� pĀ +�?� �\�  ���0�x��� diff --git a/2-Coordinating-IO/source/working-with-files/file.dat b/2-Coordinating-IO/source/working-with-files/file.dat new file mode 100644 index 0000000..69d5e4d Binary files /dev/null and b/2-Coordinating-IO/source/working-with-files/file.dat differ diff --git a/2-Coordinating-IO/source/working-with-files/incremental-processing/clean.dat b/2-Coordinating-IO/source/working-with-files/incremental-processing/clean.dat new file mode 100644 index 0000000..5ff558c --- /dev/null +++ b/2-Coordinating-IO/source/working-with-files/incremental-processing/clean.dat @@ -0,0 +1,122 @@ +��b�6(�d(�����%(�%(����h]k�������������0��2(��|p}82(P��_��2(3(xc(!�3(�|p}�3(P��_��v�y3(�����������P��_�i���������9((2(h]{�������������|�ha@2( ( (�i|������������������2(����^�������������4(�4(�6(�=(�>((D(`D(XF(G(�L(xR(8S(�S(�V(W(�W(p}05(���_�6(06(�6(p}�6(���_�����h]w������������x��wh] w�������������� wxi w��������85(��l w�������������4(5(�5(�5(xiw���������5(8 �lw����������������P5(�5(A(^w���������4(6(����Xew`6(h])w��������������-wxi-w��������07(��l-w�������������6(7(�7(�7(`�7(xi9w���������7(����@ �l.w����������������H7(�7(�xi@w���������8(:H �p(Hc(X (�"(�0(x2(�8(�B(h]�����������������0(0;(��|p}P;(P��_�<(0<(@b(!�<(�|p}�<(P��_�Iw�y$(�������P��_��������������Y(���������8(p����������� ;(Xe��`���������@(�D(�F(�=(�>((D(`D(XF(G(�L(xR(8S(�S(�V(W(�W(�](�^(`_(�>(?((?(�|�?(��h]Uw��������_���� ��\wxi_w��������>(P ^]w���������=(�=(����XeUw0>(h]pw���������������swxivw��������?(X �ptw��������(0�>(�>(`���������?(@F(�X(�9(�A(��|p}�A(P��_��B(�B(�B( HC(�|p}hC(P��_�ywy]�������P��_���������������H(��l���������������A(������(B(�@(�����������A(h]���������������B(��ha��(D(`D(XF(G(�L(xR(8S(�S(�V(W(�W(h]�����������������B(����^�������������@B(����XeXC(h]�����0(�������������8(h]�w�������������x���wh]�w���������������w����xi�w���������D(��l�w������������`D(�D(0E(PE(�2(��h]xi�w��������(�E(����` �l�w�����������������D( E(����^�w������������(D(�E(����Xe�w�E(h]�w������������x���wxi�w��������(�F(/h �p�w��������(-XF(�F(h]�w������������x���wxi�w��������(�G(\p �p�w��������-G(PG(`o�w���������F(�G(`��������`H(��V(�W(�X(�H(���l������������� H(XH( @(hJ(��|p}�J(P��_�HK(hK(�K(L(�|p}(L(P��_��wy}�������P��_�L(��������pN(�M(p} M(���_�#�������������_������Q(�L(xR(8S(�S(�V(W(�W(�k�P�"pN(:-���P�O(R�q �!�M(v�= �O(V�q$�O(�O(8O(�P(�U(XW(@X(�Y(h]�w����������������wxi�w��������PM(x �p�w��������-�L( M(`���������M(C pV(�V(��������HC �I(H"���������H(�O(��|p}P(P��_��P(�P(Q(�Q(�|p}�Q(P��_��w�xO(�������P��_����������I(��'HP(�Y(�Z(h]�����O(;���������Q(�V(�W(xR(8S(�S(�V(�I(S(��|0S(�S(�T(�|p}���_�h]wx������������0��zxxizx����������R(�����>lzx������������xR(�R(h]�x������������0���xxi�x���������S(�=l�x������������8S(pS(h]�x���������������xxi�x��������`T( Sl�x�������������S(0T(�T(�T(0U(xi�x��������U(� xi�x��������`U(� �l�x����������������xT(�T(i^�x���������S(xU(��������^�x���������R(�U(����Xewx V(h]�x�������������0���x`f�x�V(�h����hg�whM(�M(�V(��������h]�x������������p���xxi�x������������^�x��������W(PW(����Xe�x�W(h]�x������������� ��yxiy��������PX(� ^y���������W( X(����Xe�xhX(�h����hg�w�G(H(�X(��������`��������XY(�a((b(Y(�Y(����`o����������&�X(Y(Xet��9(`[(��|p}�[(P��_�@\(`\(�\(](�|p} ](P��_�%y�y(��������P��_������������������������G(�G(��X[(����������(xi������������l���������������[(\(�](�^(`_(�a(����������(���p����������-H\(�\(�n�����������\(h]����(���(�(�( (p"(�%(h0(@2(�8(�B(h]�y������������0���yxi�y��������(H^(�>l�y�������������](^(h]�y������������0���yxi�y��������_(�=l�y�������������^(�^(h]�y���������������yxi�y����������_( Sl�y������������`_(�_(0`(P`(�`(^������xi�y��������(�`(� xi�y��������(�`(� �l�y�����������������_( `(�� ^�y�������� _(�`(�����^�y��������`^(8a(����Xe�y�a(h]�y������������0���y� `f�y�a(�=(�>((D(`D(XF(G(�L(xR(8S(�S(�V(W(�W(�](�^(`_(�a(�����b(�+l��� ������b(�b(xihglw?(X?(Y(�����4(�4(�6(�=(�>((D(`D(XF(G(�L(xR(8S(�S(�V(W(�W(�](�^(`_(�a(����0d(�+l�� ������c(d(�h����hg%w�8(�8(�d(����8��������������������p�����������������`������������������8�������������������������(��������������8��p��(�`�`��� �x�������X�����0�h��@������,�x-�x.�8/��4(�4(�6(�=(�>((D(`D(XF(G(�L(xR(8S(�S(�V(W(�W(�](�^(`_(�a(l@� ������f(�f(xiJ� �����g(���lJ�� �����@g(�g(^4�� �����f(�g(�Xe�h(h]x� ����������'��xi�� �����h(�+l�h����hgsv�80�x0��h(����royShg�p������i(����إ������ج�x����`��x��8��ر�H��h����� ����������������8��������������������p�����������������`������������������8�������������������������(��������������8��p��(�`�`��� �x�������X�إ������ج�x����`��x��8��ر�H��h����� ����������������8��������������������p�����������������`������������������8�������������������������(��������������8��p��(�`�`��� �x�������X�����0�h��@������,�x-�x.�8/��4(�4(�6(�=(�>((D(`D(XF(G(�L(xR(8S(�S(�V(W(�W(�](�^(`_(�a(�o(xp(Hv(w(�w(@y(�z(H{(|(@}(�(0�(��(@�(��(0�(��((�(P�(��(8�(��(H�(H�(��(��(`�(��(��(��(@�(�(H�(��(X�(0�(h]z������������x�� zxiz������������ p(/� �p +z��������-�o(�o(h]z������������x��zxi"z��������(�p(\� �pz��������-xp(�p(`oz��������8p(�p(`���������q(�(y(xy(����HC �k(p�����x���s(��|p}�s(P��_��t(�t(�t(hu(�|p}�u(P��_�+z�z����������P��_���������h]����������������h]�����q(�������������o(��`��h]����������Hv(w(�w(@y(]�u(�5Ou(h]���������������o(���D&����������r(�D&h]����������������h]����h]�z������������0���zxi�z��������(�v(�>l�z������������Hv(�v(h]�z������������0���z����xi�z��������(pw(�=l�z������������w(@w(h]�z����������������zxi�z����������0x(� l�z��������������w(x(^�z���������w(Hx(����^�z���������v(�x(����Xe�z�x(h]�z������������0���z`f�z@y(�h����hgzQ 8q(xq(�y(����hg�p(��h���y(����������������x����`���y(H~(x~(Ѐ(��(Ј(Ȋ(؍(��(h]�z������������� ���zxi�z�����������z(� �p�z��������(0�z(�z(h]�z������������0���zxi�z���������{(�>l�z������������H{(�{(h]�z���������������zxi�z��������p|(l Sl�z�������������|(@|(�|(�|(@}(�|(xi�z��������(}(����� h]�z������������ ��{Z �l�z�����������������|(�|(^�z���������{(x}(����Xe�z�}(�h����hg�z{( ~(8~(����` {�����~(� ��(h]{�������������0�{xi{���������0(y � xi{��������x(��� h]{�������������({ha {�(x��HC x���0�{h]�����������������(����^�������������0�(H(����Xe�����h�(`"{�����(ȅ(h]&{�������������83�/{xi2{����������(� h]2{��������������(3{ha"{��(x��0�(x�(Є(@�(83���(bF:, ��(X�(0�(h�(Ȝ(�( 6��&�(5@���(Ƹ‰�� �����K �x��*����h��n�0 Ќ���(���np(�!��������؞���2�~�p(H"���������0��(V�W! ��0�������!���v�= ��p���n�H"Ȥ��k�P�"��:-��(�h���`� +���P�(z��d X;��(�Z�F��������HC x��83�3{h]������������������(����^�������������@�(X�(����Xe��������x�(`9{����(�(��(h]={���������������@{xiD{��������(��(� xiC{��������(��(��� h]D{������������P�(E{ha9{��(x��HC x����� E{P)��p�����X��P��H��H���(؁(0�(��(Ќ(��(h]����������������P�(����^�������������0�(��(����Xe����h�(`K{�����(-����(h]O{������������Ќ�[{xi^{��������(��h]^{��������������(b{haK{��(x��HC x��Ќ� +b{h]������������������(����^�������������(�(X�(����Xe����`�(`h{�����(��(h]l{������������@�m{h]p{��������������t{xit{����������(X�lt{������������P�(��(xi~{��������@�(� `o|{��������'Ћ(�(h]~{��������������({hah{��(x��HC x��@� {h]������������������(����^�������������8�(X�(����Xe����p�(`�{���� �(Џ(h]|������������X;� |xi|����������( +h]|�������������(|ha�{��(x��HC x��X;� |h]�����������������(����^�����������������H�(`�(����Xe����������(����x��x�(��|p}��(P��_�X�(x�(�(!�(�|p}8�(P��_�2|��������P��_���������X�(p}��(��(x�(�|p}���_�a�������H�(��(��(`�(��(��(��(@�(�(H�(��(X�(0�(�(8�(��(�c.|������(��(x�(h]5|��������������(6|h]:|������������ ��A|�p7|��������2H�(��(h]E|��������������(F|pE|�����������(����XeE|0�(`������������ؕ(^h�((�(p�(��(��(����Xei�ȕ(h]����������������(��(��|p}�(P��_���(��(X�(!��(�|p}��(P��_�H|�(�������P��_���������-`�(p�(`@�(��(��(H�(��|p}h�(`�(��(��(��(@�(�(H�(��(X�(0�(�(8�(��(0�(8�(p�(�|p}�(���_���������������_�����h]P|������������x��T|h]W|��������������[|xi[|���������(��l[|��������������(К(h�(��(�(h]g|��������������(h|�l\|�����������������(X�(^U|��������`�(��(����XeP|�(h]u|������������x��y|xi~|����������(����/ +�pz|��������-��(��(h]�|������������x���|xi�|��������(��(\ +�p�|��������-@�(x�(`o�|���������(��(`����������(Щ(�(p}�(���_�Р(��(�(��(X�(��(��|p}��(P��_�p�(��(��(0�(�|p}P�(P��_��|�}�������P��_���������@�(�(H�(��(h]������������������(�(Bad argu]�آ( h]0}���������������(<}�n/}��������5�(`����������(�����(��(����`�(Xe����(hg����(��(��(����hgC��(ȥ(��|p}��(P��_���(Ȧ(��(h�(�|p}��(P��_�>}w}(�(�������P��_��(����������(x�(��(��(�(�(@�(p�(h�( +�������������ؤ(Xe +�H�(h]W���������������(H�(��(P���������8��(xi`���������P�(�A��p\�����������( �(`����������(h]J}��������������(S}h]V}��������������(W}xiZ}����������( +`oX}��������&��(��(^T}��������H�(�(����XeJ}@�(fg}��(�h��������hg+}H�(x�(��(�����e�}��(�h����hgq|�(@�(�(����h]�}������������P�(�}xi�}����������( +xi�}���������(��( +�p�}��������-X�(ت(`����������(��(H�(X�(��(��|p}Э(P��_���(��(Ю(P�(�|p}p�(P��_��}E~�����������P��_��(����������������������(h]�����������������l��������0�(^u���������x�(�(����Xep�h�(0�(�(8�(L�h�(��(Ю(����h]���������������)��xi�����������0�l��������������H�(��(��(��(����������x�(h]~���������������(~xi"~������������P`^ ~��������0�(h�(��������Xe~��(h]1~������������P�(4~h]7~���������������(8~xi;~������������(0 +`o9~��������&8�(p�(^5~���������(��(����Xe1~��(�h����hg�}���� �(`�(`�(����h]P~������������x��T~xiY~���������(.8 +�pU~��������-��(ز(`����������(|(�(���_�ص(��(�(��(X�(��(��|p}е(P��_���(��(ж(P�(�|p}p�(P��_�b~*�������P��_���������h�(0�(8�(p�(�(�(h]����������������xi������(l����x�(��(h]�~�������������(�~xi�~��������������(@ +xi�~��������(��(��H +�p�~����������-0�(��(h]�~�������������(�~h]�~��������������(�~� ^�~��������8�(p�(�����Xe�~��(h]�~�������������(xi��������x�(P +�p��������(-�(H�(�n��������5��(h]�������������(xi ��������h�(X +^���������(8�(����Xe��(�h����hg�~к(л(��(����hg�~��(��(��(����`�(��(��(��(@�(�(H�(��(X�(0�(�(8�(��(0�(8�(p�(�(�(`�(h�(�3�@@��O��Y�Xi�xs�H��������������P�� h]4�������������(<xiB��������!Ƚ(` +xiA��������"�(��h +�p=��������$-`�(��(�n=��������%5(�(`����������(+&��(@�&��& '0F'�P'�R'�S'�'��'��'hb(`e(Xh(�k(�y(X�(��(��|p}�(P��_���(��(�(��(�|p}��(P��_�E��������P��_���������h�(h]��������������(�xi�����������(p +xi��������������(��x +^���������h�(��(����Xe��0�(�h����hg0� h�(��(��(����hgL~ �(`�(��(����H�(��(��(`�(��(��(��(@�(�(H�(��(X�(0�(�(8�(��(0�(8�(p�(�(�(`�(h�(8�(�|p}x�(إ������ج�x����`��x��8��ر�H��h����� ����������������8��������������������p�����������������`������������������8�������������������������(��������������8��p��(�`�`��� �x�������X�����0�h��@������,�x-�x.�8/��4(�4(�6(�=(�>((D(`D(XF(G(�L(xR(8S(�S(�V(W(�W(�](�^(`_(�a(�o(xp(Hv(w(�w(@y(�z(H{(|(@}(�(0�(��(@�(��(0�(��((�(P�(��(8�(��(H�(H�(��(��(`�(��(��(��(@�(�(H�(��(X�(0�(�(8�(��(0�(8�(p�(�(�(`�(h�(��(��(��(��(��(��(�(H�(��(��(`�(��(��(X�(H�(��(��(��(H�(8�(p�(��(��(�(��(��(��(��(��(��(��(��(P)@)x)p)0) )X)�)H)8)p)� +)p )0 )h )�) )�))�)h]K�������������8�(O�`����������(X�(0�(��(��|p}�(���_���(��(�(��(�|p}��(���_�Q�x�h]��������������(�����xi�����������(� +xi���������8�(��� +�p���������-��(�(h]!�������������P�($�xi*�����������(� +xi)���������@�(��� +�p%���������-��(�(`o���������P�(X�(h]x��������������(��xi����������@�(� +�p����������-��(�(`o,�����������(X�(h]ـ�������������(������xi����������@�(� +�p����������-��(�(h]���������������(��h]�������������P�(�xi +�����������8�(� +`o���������'��(�(�p���������-��(P�(`o����������X�(��(h]��������������( �h]%���������������(.�xi1�����������(� +`o/���������&H�(��(�p!�����������-�(��(`o �����������(�(`o������������(H�(`���������(^��(������(�(�Xe��(h]��� ��������x���(��|p}8�(P��_���(�(8�( ��(�|p}��(P��_�5� +�(�(�������P��_��(����������(X�(��(�|��(*�����������_�����������(��(`�(��(��(X�(H�(��(��(��(H�(8�(p�(�"H�(:-���!v�= `�( �(��(��(h]A�������������P�(D�xiJ����������(� +xiI���������H�(��� +�pE���������-��(�(�nE���������(5`�(`�������������(�(��(��������HC ��(�"����������( �(��|p}@�(P��_��( �(@�( ��(�|p}��(P��_�M���(�������P��_���������h]�����������)����������(�z����������� �(��(��(h]����������������(��(`�(��(��(X�(H�(��(��(��(H�(8�(p�(���������(H�(�l����������������(��(����(����hg��((�(����h]����h][���������������(d�xii����������(����� +�pe���������-��(��(h]n�������������p��x�`ok��������� �(`�(h]��������������0����xi����������@�(p?l����������������(�(h]��������������0����xi����������(�(h@l�����������������(��(h]����������������������xi������������( Sl��������������X�(��((�(H�(��(h�(h]�������������� ����h]��������������P�(���l��������������������(�(e^�����������(��(����^����������X�(�(����� Xe��`�(h]ˁ������������0��΁xi΁��������0�(� p?l΁��������������(�(h]ց������������0��فxiف����������(� h@lف��������������(��(h]������������������� xi����������(��( Sl��������������H�(��(�(8�(p�(����h]����������������(���h]��������������P�(���l����������(����������(�(^߁���������(��(����^ԁ��������H�(�(����XeˁP�(hgW� ��(��(��(�����h����hg=���(��(��(����`��������p�(����X)P )|�@�(HC ��3��������HC ���x��x�(��|p}��(P��_�X�(x�(P)!�(�|p}8�(P��_��F������������P��_�����������(ҏ�uإh�(����( U&(�(����(����(��&H$��(���(��}6� �P�(�A�������(*� � �3��(��(�(��(��(��(��(��(��(��(��(P)@)x)p)0)������������ ����������������������pN"h]���������������(%�xi*�����������`�(� +�p&���������-��(0�(h]/�������������p��9�`o,���������x�(��(`��������x�(�(��(��(�A�������(*� � pN"��(��b +��(��(��|p}��(P��_�`�(��(��( �(�|p}@�(P��_�;����������P��_���'����������&����������%(������������С.this_function]�P�(�s�`��(��(��(��(��(��(��(��(������@�x�p  +P�����hP0h]E�������������0��H�xiH���������h�(h@lH��������������(8�(h]P���������������T�xiT���������(�( SlT���������������(��(��(��(��(@qh][������������� ��b�h]d��������������(l��lU�����������������@�(��(�^N�����������( �(����XeE�x�(h]w�������������0��z�xiz���������H�(p?lz���������������(�(h]������������������xi�����������( Sl����������������(��(p�(��(��(�רh]�������������� ����h]��������������P�(���l������������������� �(`�(��^����������`�(�(����Xew�X�(`���������(X)8)�.�(/�p/� 1�h1��1�(7���(�(��|p}0�(P��_���(�(0�(��(�|p}��(P��_����֩�������P��_�©��������h�����0��x��h�����`��������H�H�����P���(P)@)x)p)0) )X)X1�X2��3��4��7��\��M� N�P�XP�hj��j�0l�xl�h]��������������0����xi������������(h@l����������������(��(h]����������������‚xi‚���������) Sl‚������������P)�) )@)x)��h]ɂ��������������(҂h]Ԃ�������������(܂�lÂ������������������))��^����������)�)����Xe��)h]��������������0����xi�����������)p?l��������������p)�)h]������������������xi�����������) Sl��������������0)h)) )X)PI�h]����������������(�h]�������������P�( ��l��������������������)�)%�^�����������)�)����Xe���)��(��(�(��(��(��(��(��(��(��(��(P)@)x)p)0) )X)�)H)8)p)����H��������ؤ�hg���(0�(��(����h]�������������0���xi�����������)Al��������������)�)h]&���������������*�xi*�����������) Sl*�������������H)�))8)p)(;�h]1��������������(9�h];�������������P�(>��l+������������������))^$���������)�)����Xe� )hg���(��((�(���� )������������x����`���y(H~(x~(Ѐ(��(Ј(Ȋ(؍(��(h )P)�)p����X�������� ����h]P���������������(Y�xi\��������� )� +�pZ����������0� +)� +)h]e�������������0��h�xih���������� )�=lh�������������p )� )h]o���������������s�xis���������� ) Sls�������������0 )h ) ) )� )@c�xiz����������P )� +h]}���������������(��xi������������ )� +`o����������'h )� )�lt������������������ )� )^m���������� )()����Xee��)h]��������������p����h]��������������0����xi�����������)�=l�������������� )X)h]������������������xi����������H) Sl���������������))�)�))�- xi���������� )� +h]ă������������ ��˃�l���������� ��������`)�)v ^�����������)P)����Xe���)�h����hg���)�))����hgL�0 )�) )����h]ڃ������������0��݃`fӃ�)HC x���� ����h]�����������������)����ha����)x��h]�����������������)�����v�o��������^�������������p)�)����Xe�����)�t�o�����"��x��X���P��_��)�)�)�o�"!0��8)����xi�������!0)�;xi�������x)g)H)��������delimiterG!]��) ���Cxi�������()�);�!]�@)�g;�xi�������)H)�)x)��������xi������)�Sxi������!���)0)��������posix]��!�)�DA"xi������!�)�)xi���������))�������� j�K����!T����h]"�H��������)#�ha��)�HC ��S #�^����D������)`)����Xe����P)`'��) "H�,h]-��������������)2�H�+�j)(�)��)�)xi[������"�)HT�@)HT�|p}�+)P��_� )@)R)C'�6) �)@i))�|p})P��_�t����"�������P��_��"���������c)��"�_�#)��v@�Ƹ‰H")�k�P�"P):-���P%)�s��"�!�)v�= `>��!)N�����"��"`�"��"8!)�!)0#)�#)�$)x+)(6)�))�-)�.)�/)80)7)�7)8)@8)p!)h#)0%)�+)�\#�\#`^#�^#e#�#H#(#HC �)�!��������HC �)H"����HC �)�"����������#��# H�# +��# 0�# ��# �#h�#( )j)h )x")p$)8.)�T)�h)`�#`}������ )$`")h]��������������`>���xi����������$ !)�h]���������������!)��ha}�8!)�)HC �)`>���h]�����������������!)����^��������������!)� )����Xe����")`�������")�$X$)h]���������������_��xi����������$P`h]���������������#)��ha��0#)�)HC �)�_��h]�����������������#)����^��������������#)#)����Xe����$)`�������$)h]�����������������h]��������������P%)��ha���$)�)HC �)����)(')��|p}H')P��_�()(()�N)!�()�|p}�()P��_�̄��&�������P��_����������1)�f&8g&�0&@1&x2&�&P�&Ѕ&�&py&�y&�{&`�&��&�))�-)�.)�/)80)7)�7)8)@8)�=)(>)�>)�>)�@)A)�A)(�&p�&��&��&��&��& '�'�<' ='h]ф������������@�҄h]Մ������������)ބxiބ��������H*)X�lބ�������������))*)xi����������'�*) `o����������'`*)�*)`̈́����p+)�' .)h]��������������P-)��hä́x+)�%)��'0�'�P%)�s�0�'��'л'�_�#)��v@�P-)Ƹ‰�!�)v�= 6�6)&�(5H")�k�P�"P):-����'��'`>��!)N���@�'HC �)@���h]����������������P-)����^��������������-)�*)����Xe�����-)�cȄ�����0)(+)�/)�0)h]��������������P-)��xi����������(�.) xi����������8/)�� �p����������(2�.)/)h]���������������#)��n����������5�/)`o����������P/)�/)h] �������������P-) +�p +����������80)����Xe +�p0)`��������1)�5)�A)�B) I)K)�N)DxG�L�O�R�%) 3)��|p}@3)P��_�4) 4)`K)!�4)�|p}�4)P��_�������������P��_�I����������D)1 ��23x����56P��(� 89X #Xf$;<�%&>�&?Xq&@��'A( (B7)�7)8)@8)�=)(>)�>)�>)�@)A)�A)8B)�B)PI)�I)HJ)�(P�( ��((�( ��(`������5)h]������������� 6�h]��������������6)�ha�(6)�1)HC �) 6�@i)p!)h#)0%)�+)`6)h]*�������������P-)+�xi/���������x7) �p,���������27)H7)h]:��������������6)>�h]A�������������)J�h]K�������������P-)L�lJ�������������8)@8)^?����������7)x8)����Xe:��8)`��������h9)�@)�A)�O�R�\�_cj m�1)p;)��|p}�;)P��_�P<)p<)�<)=)�|p}0=)P��_�Z���|��������P��_��������������6P��78�\"X #:;h�$�%=>�&Xq&@A( (xw(Cp�(��(�=)(>)�>)�>)�@)A)��(��(��(�(P�(��( ��((�( ��(h]h�������������P%)k�h]p���������������,y��pl���������-�=)(>)h]��������������P%)��h]��������������0�,��xi����������@?)�l���������������>)?)�?)�l������������������X?)�?)^�����������>)�?)����Xe�� @)�h����hgd�`>)p@)�@)����h]���������������6)��h]��������������P%)��^�����������@)A)����Xe��8A)hg&��7)9) 9)����h]��������������ȖDžB)8B)h]ȅ�������������6)̅�l�������������������A)B)Xe��pB)h]���������������6)��xi����������HC)X�l���������������B)C)xi����������C) �p���������-`C)�C)`��������pD)�H)�1)xF)��|p}�F)P��_�XG)xG)�G)H)�|p}8H)P��_� �$��������P��_����������e�8.)�h����hg���C)(D)I)����h],��������������!)8�h];��������������6)?�xiB����������I)``o@���������&�I)�I)h]H��������������!)T�`oF���������&J)HJ)^9���������PI)�J)����Xe,��J)h]\��������������#)l�7)�7)8)@8)�=)(>)�>)�>)�@)A)�A)8B)�B)PI)�I)HJ)(K)hL)h]o��������������6)s�xis����������L)��ls�������������hL)�L)8M)XM)xi����������M)( �lt������������������L)(M)xi����������(N)/0 �p����������-�M)�M)^m���������(K)@N)����Xe\��N)�))�-)�.)�/)80)7)�7)8)@8)�=)(>)�>)�>)�@)A)�A)8B)�B)PI)�I)HJ)(K)hL)8!)�!)0#)�#)�$)x+)(6)�))�-)�.)�/)80)7)�7)8)@8)�=)(>)�>)�>)�@)A)�A)8B)�B)PI)�I)HJ)(K)hL)�P)0Q)�Q)h]S��������������!)_�h]b��������������5v�xQ)�Q) T)h]w��������������!)��h]���������������#)��8!)�!)0#)�#)�$)x+)(6)�))�-)�.)�/)80)7)�7)8)@8)�=)(>)�>)�>)�@)A)�A)8B)�B)PI)�I)HJ)(K)hL)�P)0Q)�Q)�Q)U)Z)�[)�\)�b)�n����������5�Q)�lb�����������������0Q)hQ)^`����������P)PT)����XeS��T)h]���������������#)��`���������U)�\)�)�W)��|p}�W)P��_�xX)�X)�X)8Y)�|p}XY)P��_��� ��������P��_���������Z)�[)h]���������������!)̇xi̇���������Z)X�l̇������������Z)PZ)xiև��������[)8 �pԇ��������0�Z)�Z)xi�����������[)`h]���������������!)��`o����������&`[)�[)`f���[)xi���������h\)``f�8\)hg�� [) \)�\)����h]*��������������!)6�xi6���������0])X�l6��������������\)])xi@����������])@ �p>���������0H])�])`��������X^)c)�)``)��|p}�`)P��_�@a)`a)�a)b)�|p} b)P��_�C�e��������P��_����������b)h]R��������������!)^�`fK��b)`��������xc)Hh)�)�e)��|p}�e)P��_�`f)�f)�f) g)�|p}@g)P��_�k����������P��_���������xiz���������0h)(2�`fs�h)hg&��])^)0c)����hg��U)HU)`h)����HC �)HT����h]�����������������h)����ha����i)�)h]�����������������h)�����vd���������^�������������`i)�i)����Xe�����i)�td������"HT�) )�P��_��j)�j)�j)d�p)(j)����xi������� k)x5���l)x5��|p}�l)P��_��m)�m)�)!`n)@o)��)�|p}�n)P��_������������P��_�����������Xw)�n�H"�o)�k�P�"�o):-�����|)���~�!@o)v�= 6�p)&�(5�p)�p)hq)�q)xr)�t)w)�x)�y)�{)�|)�|)P})�})�~)�)��)��)8w)�{)HC 8k)�!��������HC 8k)H"��������HC 8k)�"�������� 6�p)��h]���������������p)��HC 8k) 6����H�) +`r)0t)`t)x)�~)��)ȅ)h]��������������Ȗˆ�q)�q)h]È�������������p)Lj�l������������������hq)�q)Xe��r)h]ӈ�������������p)׈xi׈���������r)X�l׈������������xr)�r)xi����������hs)H �p߈��������-�r)8s)xi�����������s)(2�`f���s)�h����hgψ�s)t) t)����`�������t)�w)h]��������������� �h]��������������p)�xi���������Pu)��l��������������t) u)�u)�u)xi ���������v)P �l�����������������hu)�u)xi'����������v)/X �p#���������- v)xv)h]'�������������Xw))�ha��w)8k)HC 8k)��)�^�������������w)�v)����Xe�����w)`4�����Px)�|)h]:����������������K�h]N��������������p)R�xiR����������x)��lR��������������x)�x)`y)�z)h]^��������������p)b�xib����������y)X�lb��������������y)�y)xil���������pz)` `oj���������'z)@z)�lS�����������������y)Py)xis���������P{)/h �po���������-�z) {)h]s�������������|)u�ha4��{)8k)HC 8k)���u�^��������������{)h{)����Xe����H|)h]���������������p)��h]���������������5��0})P})�})h]���������������p)��h]��������������Xw)ȉ�n����������5�})�l�������������������|) })^�����������|)�})����Xe��H~)h]ԉ�������������p)؉xi؉��������)X�l؉�������������~)�~)xi�����������)p �p����������-0)p)h]��������������Xw)���n����������5�)`o�����������)0�)h]���������������p)�xi����������)(2�^�����������)؀)����Xe�� �)�h����hgЉ`�)p�)��)����h]��������������p)��p)hq)�q)xr)�t)w)�x)�y)�{)�|)�|)P})�})�~)�)��)ȁ)�)��)��)x�)Ї)xi���������8�)X�l�������������ȁ)�)xi�����������)x �p���������0P�)��)h]#�������������|)4�`o ���������؃)�)h]<��������������p)@�xiD�����������)`^A������������)Ȅ)`�)����`oB���������&��)Ȅ)Xe<��)�h����hg �P�)��)��)����h]R�������������Xw)\�xik���������`�)`h]q��������������p)u�`oo���������&0�)x�)`fd���)�h����hgN���)��)�)����p�)`r)0t)`t)x)�~)��)ȅ)�)�)h]���������������p)��`f{�Ї)HC 8k)x5�����h]���������������� �)����ha����h�)8k)h]���������������� �)�����v����������^���������������)��)����Xe���� �)�t�������"x5�8k)q)�P��_��)�)(�)���j)��)����xi���������)��� �)���|p}@�)P��_��) �)@�)��)��)�)�|p}��)P��_�����������P��_���������H"��)�k�P�"0�):-���!��)v�= 60�)&�(50�)��)Ȑ)0�)ؑ) �)�)HC ��)�!��������HC ��)H"��������HC ��)�"�������� 6��)��h]��������������0�)��HC ��) 6������)��)��)x�)h]��������������ȖNJ�)0�)h]Ȋ������������0�)̊�l������������������Ȑ)�)Xe��h�)h]ڊ������������0�)ފxiފ��������@�)X�lފ������������ؑ)�)xi����������Ȓ)� �p����������0X�)��)h]��������������0�)��xi������������)��l�������������� �)X�)��)�)xi����������@�)� �l��������������������)��)xi�����������)/� �p���������-X�)��)`o������������)��)`fӊ8�)HC ��)������h]������������������)����ha����ؕ)��)h]������������������)�����v����������^�������������0�)h�)����Xe������)�t�������"����)x�)�P��_���)��)��)��P�)��)����xi��������)pv����)pv��|p}��)P��_�p�)��)�)!0�)�)��)X�)�|p}P�)P��_�)����������P��_���������Р)@��)Ƹ‰H"X�)�k�P�"��):-��p��h�)�̙�!�)v�= �~���)v]�i��)(�)��)�)H�)8�)p�)p�)`�)��)��)P�)��)`�)x�)��)��)`�)��)H�)HC �)�!��������HC �)H"����HC �)�"��������x�)P�)p�)��)��)8�)��)h]6�������������X�)?�xi?��������� �)X�l?���������������)��)xiK�����������)� �pG���������-8�)x�)xi[���������0�)(2�`fT��)�h����hg2���)H�)`�)����`d�������)h]h��������������~�n�h]h���������������)n�had�(�)�)HC �)�~�h��)X�)��|p}x�)P��_�8�)X�)x�)��)�|p}�)P��_�x�e��������P��_���������Щ)H�)8�)p�)p�)`�)��)��)P�)��)`�)x�)��)(�)`�)�)��)h]}�������������@�~�xi����������@�)� `y�������)Ц)h]���������������)��hay���)Р)HC �)@���h]�����������������)����^�������������H�)�)����Xe������)�ct������)X�)0�)��)h]���������������)��h]��������������X�)��xi����������ا)X�l��������������p�)��)�p����������/8�)��)h]���������������)��p�����������p�)����Xe����)`��������P�)ح)H�)��)Р)X�)��|p}x�)P��_�8�)X�)x�) ��)�|p}�)P��_���e��������P��_���������p�)`�)��)��)P�)��)`�)x�)��)(�)`�)�)��)`������ �)8�)h]��������������p����h]��������������X�)��h]���������������)��l��������������`�)��)h]��������������h�)��ha���)Щ)HC �)p����h]����������������h�)����^���������������)Ю)����Xe������)h]ŋ������������Ȗϋ��)��)h]Ћ������������h�)Ӌ�lŋ����������������P�)��)Xeŋ��)h]��������������h�)��xi����������ȱ)X�l��������������`�)��)xi����������P�)� �p����������0��) �)`����������)��)Щ)��)��|p}�)P��_�ص)��)�)��)�|p}��)P��_���_��������P��_���������x�)��)(�)`�)�)��)h]����������������)�h] ���������������,��p���������-x�)��)h]���������������)$�h]'�������������h�)*�^%���������(�)`�)����Xe���)h]C���������������)I�xiM���������h�)`h]S�������������h�)V�`oQ���������&8�)��)^J�����������)��)H�)����`oK���������&�)��)XeC���)hg����)��)��)�����h����hg܋h�)��)к)������)(�)��)�)H�)8�)p�)p�)`�)��)��)P�)��)`�)x�)��)(�)`�)�)��)�)P�)h�)X�)h]n���������������)t�h]y���������������,���pu���������-�)P�)xi������������)(2�`f��ȼ)�h����hgj���)�)(�)����h]����������������,��xi����������н)x5�l��������������h�)��)8�)X�)h]����������������)���l��������������������)(�)`f����)HC �)pv�����h]�����������������)����ha����H�)�)h]�����������������)�����v���������^���������������)ؿ)����Xe�����)�t������"pv��)h�)�P��_���)��)�)���)h�) ����xiÌ�����`�)h)���)h)��|p}�* P��_���)�)�[*�z�N* ��)(�*�|p}��)P��_�ތr� �������P��_����������~*�/���)潳�PE���)~���H"�)�k�P�"H�):-��(U�fA���!��)v�= H/���)v ���)��)�)H�)`�)��)p�)��)��)��)��)�)��)��)(�)�)�)H�)p�)�)�)�)�0h��X6�T�5�@H��v��)��.�{�(j�)����x���)8k)��)�)x�)h�*`�*��*�z+�+(�+HC x�)�!��������HC x�)H"��������HC x�)�"��������H/��)���/�H�)��h]ߌ��������������)��h]����������������)��HC x�)H/�����HC x�)�/������ *#X�)h�)��)��)��)0�)`�)h]��������������Ȗ����)��)h]����������������)���l������������������`�)��)Xe���)h]�������������Ȗ���)��)h]���������������)��l�����������������p�)��)Xe��)h]���������������)"�h]'���������������))��p#���������-��)��)xi8���������`�)�`f1�0�)�h����hg���)x�)��)����h]A���������������)E�h]H���������������,M�xiM���������p�)HTlM��������������)@�)��)��)h]V���������������)Z��lN�������������������)��)^F�����������)0�)����XeA���)h]a���������������)c�h]f���������������,k�xik�����������)HTlk�������������(�)`�)��)�)h]t���������������)v��ll�������������������)��)^d�����������)P�)����Xea���)h]����������������)��h]����������������)���p����������-�)H�)xi������������)�`f����)�h����hg~���)�) �)����`ɍ������)`�)h]͍������������PE�֍�)H�)`�)��)p�)��)��)��)��)�)��)��)(�)�)�)H�)8�)��)��)�)�)x�)h�)�)��)��) �)X�)��)p�)��)��)��)xiٍ�������� �)� h]ٍ��������������)ڍhaɍ8�)x�)HC x�)PE�ڍh]������������������)����^���������������)��)����Xe�����)x�)�)��|p}(�)P��_���)�)(�)��)�|p}��)P��_���U��������P��_���������p�)��)�)�)x�)h�)�c��������)��)��)h]����������������)��h]����������������)��xi����������x�)X�l���������������)H�)�p����������/��)��)h]���������������) �p�����������)����Xe�H�)`����������)��)��)��)��|p}�)P��_���)��)�)��)�|p}��)P��_� �U��������P��_���������x�)h�)h]���������������)�xi�����������)��l�������������x�)��)H�)h�)h])���������������)2��l�������������������)8�)xi8���������(�)/� �p4���������-��)��)�n4���������5@�)fI���)�h����hg���)��)��)����X�)h�)��)��)��)0�)`�)��)��)��)�)0�)��)��)*8*`Z�������)��)h]^�������������(U�e�h]h���������������)l�xil�����������)X�ll��������������)P�)h]m���������������)s�haZ���)x�)�z�h�)��� X�P*���7 ����ˈ: �/���)潳�(U���)fA���!��)v�= H/���)v �H"�)�k�P�"H�):-��k�8�)J��،�(*�(�A +PE���)~���h�(�)N��HC x�)(U�s�h]������������������)����^���������������)��)����Xe����0�)`y�������)��)h]}�������������h���h]����������������)��h]����������������)��`o����������' �)X�)h]��������������(�)��hay���)x�)HC x�)h���h]����������������(�)����^�������������p�)��)����Xe������)`ǎ����X�)�)h]ˎ������������k�ҎxiՎ����������)� h]Վ������������8�)֎haǎ��)x�)HC x�)k�֎h]����������������8�)����^���������������)��)����Xe������)x�)��)��|p}��)P��_���)��)��)P�)�|p}p�)P��_���G��������P��_����������)��)��)��) �)�)�c܎����P�)x�)8�)h]��������������8�)��h]����������������)��xi���������� �)X�l����������������)��)�p����������/��)8�)h]��������������8�)�p�������������)����Xe����)`����������)��)(�)��)��|p}��)P��_���)��)��)@�)�|p}`�)P��_��G��������P��_��������� �)�)h]���������������)�xi�����������)��l������������� �)X�)��)�)h]�������������8�)$��l�������������������)��)xi*�����������)/� �p&���������-H�)��)�n&���������5��)f;�0�)�h����hg �(�)X�)p�)�����)H�)`�)��)p�)��)��)��)��)�)��)��)(�)�)�)H�)8�)��)��)�)�)x�)h�)�)��)��) �)X�)��)p�)��)��)��)��)��) �)�)P�)�)��) �)X�)��)p*�*�*H*�*�*�*P*�*` +* *N*hR**P*�*0*h*�*�*0"* #*X#*�)*`L������)��)h]P��������������z�U�h]X���������������)Z�xiZ�����������)X�lZ�������������P�)��)h][�������������h�)a�haL��)x�)HC x�)�z�a�p�)�)�)�)H�)*0*�*� +*h]����������������h�)����^���������������)��)����Xe����0�)`g�������)�*h]k�������������،�p�h]t�������������h�)y�h]|�������������8�)��`oz���������' �)X�)h]��������������(*��hag���)x�)HC x�)،���h]����������������(*����^�������������p*��)����Xe�����*`ʏ����X* *h]Ώ������������X�ԏh]؏������������(�)ߏh]��������������(*���p����������/�*�*h]��������������(�)��h]��������������(*��r؏��������*H*�*h]��������������P*��haʏ�*x�)HC x�)X���h]����������������P*����^��������������*�*����Xe�����*`������*x *h]�����������������xi����������*� xi���������8*��� h]��������������*�ha�P*x�)���R*�~���hN*��<X�P*���7 �/���)潳�(U���)fA��@�� +*Ƹ‰ k�8�)J��h�(�)N������*�ˈ: H��@a*�GpB�!��)v�= H/���)v �،�(*�(�A +H"�)�k�P�"H�):-���z�h�)��� PE���)~���HC x�)����h]�����������������*����^��������������**����Xe����( *`������ *� *h] �������������@�!�xi$���������H +*� h]$�������������� +*%�ha�` +*x�)HC x�)@�%�h]����������������� +*����^������������� * +*����Xe����8 *��*X�)h�)��)��)��)0�)`�)��)��)��)�)0�)��)��)*8*� *�*`*h*x�*x�)H*��|p}h*P��_�(*H*�Y*C'�*�|p}*P��_�/�ʔ�������P��_���������(**P*�*0*h*�*�*0"* #*X#*�)*p**�**,*�1*�2*�c+�����`*�*H*h]2�������������� +*3�h]7�������������P*=��p4���������1*P*h]A�������������� +*B�pA�����������*����XeA�*`���������*`K*�K*�O*�X*� *�*��|p}�*P��_��*�*�T*C$P*�|p}p*P��_�D�ʔ�������P��_����������*0*h*�*�*0"* #*X#*�)*p**�**,*�1*�2*�2*(4*`4*h]P�������������� +*Q�h]V�������������P*\��pR���������-0*h*`��������(*J*0J*(*0*��|p}P*P��_�*0*�H*!�*�|p}�*P��_�^����������P��_����������5*�*�*0"* #*X#*�)*p**�**,*�1*�2*�2*(4*`4*�9*�:*h]l�������������(*q�h]t�������������P*z��pr���������0�*�*`���������*�3*�*�*��|p}�*P��_�� *� *� * +P!*�|p}p!*P��_�|�)��������P��_����������-*0"* #*X#*�)*p**�**,*�1*�2*�2*h]����������������)��xi�����������"*��l��������������0"*h"*#*�#*h]��������������8�)��h]��������������� +*��`o����������& #*X#*�l�������������������"*�"*xi����������X$*/� �p����������-�#*($*`���������$*,*(*'*��|p} '*P��_��'*(* (*�(*�|p}�(*P��_���t��������P��_����������)*p**�**h]N���������������)P�xiP����������)* SlP��������������)*�)*P**h+*h]W�������������8�)^�h]a�������������� +*b�`o_���������&p**�**xie���������P+*� `oc���������&�** +*�lQ�����������������**@**`fG��+*h]~�������������� +*�xi�����������,*� �p����������-,*P,*`�������� -*�3*(*(/*��|p}H/*P��_�0*(0*H0*�0*�|p}�0*P��_�����������P��_����������1*�2*�2*h]����������������)��xi����������2* Sl���������������1*�1*x2*3*h]�������������8�) �h]�������������� +*�`o���������&�2*�2*�l�����������������(2*h2*`f��H3*�h����hgz��,*�,*�3*����hg��p$*�$*�3*����h]3�������������(�):�h]=�������������P*C��p;���������0(4*`4*`�������� 5*�H*�*(7*��|p}H7*P��_�8*(8*H8*�8*�|p}�8*P��_�E�ۓ�������P��_���������XC*�9*�:*�:*�@*0A*�A*`G*h]U���������������)Y�xiY���������:*��lY��������������9*�9*x:*;*h]e���������������)n�h]q�������������� +*r�`oo���������&�:*�:*�lZ�����������������(:*h:*xix����������;*/ �pt���������-H;*�;*`��������p<*�A*�5*x>*��|p}�>*P��_�X?*x?*�?*@*�|p}8@*P��_���2��������P��_����������@*0A*h]��������������*!�h]$�������������� +*%�^"����������@*0A*����Xe�hA*h]<�������������� +*=�xiB���������8B* �p>���������-�A*B*`���������B*0H*�5*�D*��|p}E*P��_��E*�E*F*�F*�|p}�F*P��_�E�ѓ�������P��_���������`G*h]���������������*��xiÓ���������G* ^����������`G*�G*����Xe���G*�h����hg8�PB*�B*HH*����hgQ��;*(<*XH*�����*�*0"* #*X#*�)*p**�**,*�1*�2*�2*(4*`4*�9*�:*�:*�@*0A*�A*`G*�h����hg/��4*�4*�I*����hgh� *`*�I*����f���*0*h*�*�*0"* #*X#*�)*p**�**,*�1*�2*�2*(4*`4*�9*�:*�:*�@*0A*�A*`G*L*M*@M*HO*pP*`Q*�Q*S*�S*�S*�h����hgL��*�*PK*����`�������K*�O*h]�����������������h]���������������) �xi ����������L*��l �������������L*PL*�L*xM*h]���������������)!�h]$�������������� +*%�`o"���������&M*@M*�l ������������������L*�L*h]%�������������hN*&�ha��N*(*HC x�)�� &�(�*p�)�)�)�)H�)*0*�*� +*HN*�R* a*h]����������������hN*����^�������������HO*�M*����Xe�����O*`.�����0P*�S*h]2���������������8�h];���������������)=�xi=����������P*��l=�������������pP*�P*@Q*�Q*h]I�������������8�)P�h]S�������������� +*T�`oQ���������&`Q*�Q*�l>������������������P*0Q*h]T��������������R*U�ha.�hR*(*HC x�)�� +U�h]�����������������R*����^�������������S*R*����Xe����@S*h]a�������������hN*i�h]n��������������R*t��pj���������-�S*�S*�nj���������5T*f~��*h]��������������hN*��0*h*�*�*0"* #*X#*�)*p**�**,*�1*�2*�2*(4*`4*�9*�:*�:*�@*0A*�A*`G*L*M*@M*HO*pP*`Q*�Q*S*�S*�S*�T*xW*�W*xi���������� W*/ �p����������-�T*�V*h]���������������*��h]”������������� +*Ô^����������xW*�W*����Xe���W*�h����hg��8W*8X*PX*����hg]�XT*�T*`X*����*P*�*0*h*�*�*0"* #*X#*�)*p**�**,*�1*�2*�2*(4*`4*�9*�:*�:*�@*0A*�A*`G*L*M*@M*HO*pP*`Q*�Q**P*�*0*h*�*�*0"* #*X#*�)*p**�**,*�1*�2*�2*(4*`4*�9*�:*�:*�@*0A*�A*`G*L*M*@M*HO*pP*`Q*�Q*S*�S*�S*�T*xW*�W*�)H�)`�)��)p�)��)��)��)��)�)��)��)(�)�)�)H�)8�)��)��)�)�)x�)h�)�)��)��) �)X�)��)p�)��)��)��)��)��) �)�)P�)�)��) �)X�)��)p*�*�*H*�*�*�*P*�*` +* *N*hR**P*�*0*h*�*�*0"* #*X#*�)*p**�**,*�1*�2*�2*(4*`4*�9*�:*�:*�@*0A*�A*`G*L*M*@M*HO*pP*`Q*�Q*S*�S*�S*�T*xW*�W*�`*�a*8f*pf*�f*`h*�h*i*xn*�n*(o*p*@v*�w*�x*Hz*�{*�{*�|*�|*��* �*�*��*�*��*Ї*`Д����``*b*h]Ԕ������������H��הxiڔ���������`*�h]ڔ������������@a*ܔhaД�`*x�)HC x�)H�� ܔh]����������������@a*����^��������������a*�`*����Xe�����a*x�)�c*��|p}�c*P��_��d*�d*�d* Xe*�|p}xe*P��_�D�!��������P��_���������pj*8f*pf*�f*`h*�h*i*xn*�n*(o*p*@v*�w*�x*h]E�������������� +*F�h]I���������������)R�h]U��������������*b�`oS���������&pf*�f*xie���������Pg* `oc���������&�f* g*^G���������8f*hg*����XeE��g*�c@������i*�g*�h*�i*h]h�������������� +*i�h]m���������������)t��pj���������1`h*�h*h]x�������������� +*y�px����������i*����Xex�Hi*`���������i*z*0b*�k*��|p}l*P��_��l*�l*m*�m*�|p}�m*P��_�{�!��������P��_���������8r*xn*�n*(o*p*@v*�w*�x*h]��������������� +*��h]����������������)���p����������-xn*�n*h]����������������)��xi�����������o*��l��������������(o*`o*�o*p*h]��������������� +*���l�������������������o*�o*xi�����������p*/( �p����������-Pp*�p*`o�����������n*�p*`���������q*�y*pj*�s*��|p}�s*P��_��t*�t*�t*`u*�|p}�u*P��_�����������P��_���������@v*�w*�x*h]ƕ������������@a*ɕxiɕ���������v*X�lɕ������������@v*xv*xiՕ��������0w*0 �pѕ��������-�v*w*h]��������������@a*��xi�����������w*a^������������w*�w*Xx*����`o����������&�w*�w*Xe��x*h]�������������@a* �xi ���������y*^ +�����������x*�x*�y*����`o ���������&�x*�x*Xe�0y*hg•Hw*�x*�y*�����h����hg��0q*pq*z*����h]��������������@a*��xi�����������z*X�l��������������Hz*�z*xi����������8{*8 �p����������0�z*{*h]��������������@a*��h]����������������)��xi����������0|* Sl���������������{*|*�|*(}*h]Ö������������8�)ʖh]͖�������������*ږ`o˖��������&�|*�|*�l������������������H|*�|*`o����������&�{*h}*`f���}*`��������`~*��*��*`�*x�)h�*��|p}��*P��_�H�*h�*��*�*�|p}(�*P��_���n��������P��_�����������* �*�*��*�*��*Ї*h]��������������8�)��h]���������������*�^�������������* �*��*����`o����������&��* �*Xe��X�*h]���������������)�xi���������h�*��l��������������*8�*Є*��*h] �������������8�)'��l�������������������*��*xi-�����������*/@ �p)���������-(�*��*h]@�������������8�)G�p@�����������*����Xe>�@�*�h����hg�ȅ*��*��*����h]V���������������)X�xiX���������H�* SlX���������������*�*��*Ї*h]_�������������8�)f��lY�����������������`�*��*`fO��*hg��P{*~*~*����HC x�)h)� ����h]������������������*����ha������*x�)h]������������������*�����v͌��������^�������������H�*��*����Xe������*�t͌�����"h)�x�)�)�P��_���*��*��*͌0�)�*"�����j)(�)��)�)��*��*(�* z+��+xix������P�*X.����*X.��|p}�*P��_�Ѝ*��*�*��*p�*h�*�|p}��*P��_������������P��_���������H"��*�k�P�"�*:-���!p�*v�= 6�*&�(5�*Ȑ*��*h�*HC h�*�!��������HC h�*H"��������HC h�*�"�������� 6Ȑ*��h]���������������*��HC h�* 6����X�*8�*Б*h]���������������*��`f����*HC h�*X.�����h]������������������*����ha����0�*h�*h]������������������*�����v����������^���������������*��*����Xe������*�t������"X.�h�*H�*�P��_���*��*��*�� �*P�*$����xi������H�*�z����*�z��|p}�* P��_�Ȗ*��*8�*!!��* h�*��*�|p}��*P��_�їD��������P��_���������x�*���z��dH"��*�k�P�"��*:-�� ���**��8�*��*��I�!h�*v�= 6��*&�(5��*��*��*��*��*�*��*@�*��*`�*�*��*ئ*0�*Ш*P�*��*؟*��*��*h�*HC `�*�!��������HC `�*H"��������HC `�*�"�������� 6��*֗h]җ��������������*֗HC `�* 6������* ��*X�*��*��*��*x�*ذ*h]ޗ������������Ȗ��ؚ*��*h]����������������*���lޗ������������������*Ț*Xeޗ0�*h]����������������*��xi�����������*X�l����������������*؛*xi�����������*H �p���������- �*`�*xi����������*(2�`f���*�h����hg����*0�*H�*����`!�����Н*Ƞ*h]%������������� �)�h],���������������*0�xi0���������x�*��l0��������������*H�*��*�*xi<���������0�*P �l1�������������������*О*h]=���������������*>�ha!���*`�*HC `�* �>�h]������������������*����^�������������@�*H�*����Xe����x�*`D�����(�*��*hasRoot]�0�*��Ih]H�������������8�*O�h]S���������������*W�xi\����������*/X �pX���������-��*ء*h]c���������������*d�haD�`�*`�*HC `�*8�*d�h]������������������*����^��������������* �*����Xe����8�*`j�������*`�*h]n����������������q�xiu���������X�*` xit�����������*��h h]u���������������*v�haj���*`�*8�*��*��I�!h�*v�= 6��*&�(5@���*Ƹ‰�����*z��dH"��*�k�P�"��*:-�� ���**��Ќ���*���nHC `�*���v�h]������������������*����^�������������ئ*p�*����Xe�����*`|�������*X�*h]��������������Ќ���xi������������h]����������������*��ha|�0�*`�*HC `�*Ќ���h]������������������*����^�������������Ш*�*����Xe�����*`�*�*��|p} �*P��_���*�* �* ��*�|p}��*P��_������������P��_���������H�*��*8�*(�*��*P�*��*x�*p�*�*8�*p�*8�*h]��������������@���h]����������������*��xi���������� �*X�l����������������*��*xi������������*p `o����������'8�*x�*`������H�*��*h]����������������*��ha��P�*x�*HC `�*@�����*؟*��*��*h�*��*h]������������������*����^�������������8�*��*����Xe����p�*�c��������*�*��*h�*h]����������������*��xi������������*x �p����������2(�*`�*h]����������������*˜p�������������*����Xe�� �*`��������Ȳ*X�*�*x�*д*��|p}��*P��_���*е*��*p�*�|p}��*P��_�Ę���������P��_���������0�*P�*��*x�*p�*�*8�*p�*8�*h]̘��������������*Иh]Ә��������������*טxiט����������*��lט��������������*��*X�*x�*h]����������������*���lؘ�����������������*H�*^ј��������P�*��*����Xe̘�*h]����������������*��xi����������ع*/� �p����������-p�*��*`��������x�*8�*H�*��*��|p}��*P��_�`�*��*��* �*�|p}@�*P��_��W��������P��_���������0�*�*8�*p�*h]���������������*��n���������5�*`����������*��*�*��*��*��|p}��*P��_���*��*��*X�*�|p}x�*P��_� �O��������P��_���������8�*p�*h],���������������*/�h]2���������������*3�^0���������8�*p�*����Xe,���*f?�ذ*�h����hg �8�*h�*(�*����`����������*��*H�*��*��|p}��*P��_���*��*��*X�*�|p}x�*P��_�]����������P��_���������8�*h]����������������*��xi����������P`^����������8�*p�*����Xe����*hg����*0�*h�*������*��*��*��*�*��*@�*��*`�*�*��*ئ*0�*Ш*P�*��*8�*(�*��*P�*��*x�*p�*�*8�*p�*8�*@�*H�*0�*h�*@�*x�*h]Ù��������������*ƙxi̙����������*� xi˙����������*��� �pǙ��������-@�*��*h]ܙ��������������*��xi������������*`xi������������*(2�rܙ��������H�*��*��*`fՙ�*�h����hg���*P�*h�*����p�*��*X�*��*��*��*x�*ذ*x�*�*�*h]����������������*�h]���������������*�xi �����������*� �p���������-h�*��*`o���������0�*��*//] �h�*��sxi�����������*p�*`f���*�h����hg��(�*��*�*����h]-���������������*1�xi1�����������* Sl1�������������@�*x�*�*0�*x�*xi8���������`�*� h];���������������*>��l2�������������������*�*`f&���*HC `�*�z�����h]���������������� �*����ha����h�*`�*h]���������������� �*�����v����������^���������������*��*����Xe���� �*�t������"�z�`�*@�*�P��_��*�*(�*���*��*&����xiJ� ������*�i�� �*�i��|p}��* P��_��* �*�I+C<0�* ��*�x+�|p}��*P��_�e�ԣ�������P��_����������+�L+A��*v:�H"��*�k�P�"0�*:-��H�P�*�S_���z��d�!��*v�= 6h�*&�(5h�*��*��*0�*H�*��*(�*��*�*��*��*��*P�*p�*��*h�*��*0�*0�*��*�*��*HC ��*�!��������HC ��*H"��������HC ��*�"�������� 6��*j�A0�*o�h]f�������������h�*j�h]l���������������*o�HC ��* 6����HC ��*A�����*hy+��*�*(�*8�*�*�*�w+h]{���������������*~�h]����������������,���p���������-H�*��*�n���������5��*h]����������������*���n����������8(�*xi������������*`7�p����������-`�*��*�n����������5��*`o������������*�*h]��������������x�,š��*��*xiÚ�������� �*�s�hm������������*��*�����s����������8�*Xe����*�h����hgw�H�*��*��*����h]��������������Ȗ��`�*��*h]��������������h�*���l�������������������*P�*Xe����*`�����p�* �*h]�������������H� �xi�����������*� h]�������������P�*�ha���*��*HC ��*H��h]����������������P�*����^���������������*��*����Xe������*`�������*��*h]�����������������xi �����������*� xi���������8�*��� h] �������������(�*!�ha�P�*��*P����**&{� +A��*v:��!��*v�= 6h�*&�(5@���*Ƹ‰H"��*�k�P�"0�*:-��H�P�*�S_���(�*z��dЌ� �*���n�����*F��� HC ��*���!�h]����������������(�*����^�������������p�*�*����Xe������*`'�����X�*��*h]+�������������Ќ�7�xi:�����������h]:������������� �*>�ha'���*��*HC ��*Ќ�>�h]���������������� �*����^�������������h�*��*����Xe������*`D�����P�*h]H�������������@�I�h]H���������������*I�haD���*��*HC ��*@�H�h]T���������������*W�h]\���������������,e���*0�*H�*��*(�*��*�*��*��*��*P�*p�*��*h�*��*0�*h�*�*��*`�*��*0�*p�*0�*0�*h�*H�*x�*��*�+�+�+x+�pX���������-0�*h�*�nX���������5��*h]i���������������*l�xil�����������*X�ll��������������*P�*xiv����������*� �pt���������0��*��*`of�����������* �*h]{���������������*~�xi~����������*X�l~���������������*��*h]��������������h�*��xi������������*X�l��������������`�*��*�p����������1 �*��*`ox���������`�* �*`����������*��*��*�*h+�G+�I+��*��*��|p}�*P��_���*��*`E+!��*�|p}��*P��_���`��������P��_����������+p�*0�*0�*h�*H�*x�*��*�+�+�+x+�B+�B+HC+�C+ D+h]����������������*��xi������������*X�l��������������p�*��*h]��������������h�*��xi������������*X�l��������������0�*h�*�p����������-��*��*h]����������������*Ûh]ț������������h�*̛�pě��������-0�*h�*`o������������*��*xiݛ��������P�*�`f֛ �*�h����hg����*h�*��*����`�������*�*h]�������������������h]����������������*��xi������������*X�l��������������H�*��*xi���������8�*� `o����������'��*�*h]���������������*�ha����*h�*HC ��*�����x+0�*��*�*��*��*h�*h]������������������*����^�������������x�*P�*����Xe������*` +�����`�*X�*h]�������������P���xi"�����������*� xi!����������*��� h]"���������������*#�ha +�0�*h�*HC ��*P��#�h]������������������*����^���������������*��*����Xe�����*h�*�*��|p} �*P��_���*+ +�+�|p}�+P��_�/�Š�������P��_����������+�+�+�+x+h]0���������������*1�h]4�������������h�*8�xi8��������� +X�l8��������������+�+xiB����������+� `o@���������'8+x+^2����������+�+����Xe0�+�c+�����+P+8+�+h]E���������������*F�xiJ��������� +� �pG���������2�+�+h]O���������������*P�pO����������x+����XeO��+`��������X+�+� +hB+��*`+��|p}�+P��_�@+`+`A+! +�|p} +P��_�R�Š�������P��_���������8+ �@ +*��h ++X +� +� +�+�+�+@+$+�$+ %+�&+,+P,+@-+�2+ +`\�����( ++� +h]b������������� �f�h]i�������������h�*m�xim���������� ++��lm�������������h ++� ++8 +X +h]y���������������*z��ln������������������ ++( +h]z�������������@ +{�ha\�� +�+HC �+ �{�^�������������� +� +����Xe����� +h]��������������@ +��xi����������X +/� �p����������-� +( +`��������� +@+�++��|p} +P��_��++ +�+�|p}�+P��_������������P��_����������+�+�+�+h]6������������� �*B��n5���������5�+`��������0+++x+8+��|p}X+P��_�+8+X+�+�|p}�+P��_�D���������P��_����������+�+h]R�������������P�*W�h]Z���������������*[�xi^���������X+� `o\���������&�+(+^X����������+p+����XeR��+fm�h+�h����hg1��+�+0+����`���������+X&+0A+�+�+��|p}�+P��_��+�+�+`+�|p}�+P��_������������P��_���������(+@+$+�$+ %+�&+,+P,+@-+�2+9+89+�>+@+P@+h]����������������*��xi�����������+ xi�����������+�� �p����������-@+�+`���������+�$+0&+8+�!+��|p}�!+P��_�x"+�"+�"+8#+�|p}X#+P��_������������P��_���������$+�$+ %+h]V������������� �*b�xie���������P`^c���������$+P$+����XeV��$+h]x���������������*��h]����������������*��xi�����������%+ `o����������& %+X%+^�����������$+�%+����Xex��%+�h����hg��+H+H&+����h]����������������*��xi�����������&+ �p����������2�&+�&+`���������'+�@+8+�)+��|p}�)+P��_�x*+�*+�*+ 8++�|p}X++P��_������������P��_����������:+,+P,+@-+�2+9+89+�>+@+P@+h]��������������@ +�h]���������������* +�xi +����������,+��l +�������������P,+�,+ -+@-+h]���������������*��l ������������������,+-+�p���������-,+x-+`��������X.+�9+(+`0+��|p}�0+P��_�@1+`1+�1+2+�|p} 2+P��_�����������P��_����������4+�2+9+89+h]5���������������*;�p5�����������2+����xiA����������3+ xi@����������3+��( �p<���������-3+�3+`��������x4+�9+�.+�6+��|p}�6+P��_�`7+�7+�7+ 8+�|p}@8+P��_�D�ܟ�������P��_���������9+89+h]ğ������������(�*ǟh]ʟ��������������*˟^ȟ��������9+89+����Xeğp9+�h����hg/��3+04+�9+����`��������`:+@+�@+(+h<+��|p}�<+P��_�H=+h=+�=+>+�|p}(>+P��_������������P��_����������>+@+P@+h]g���������������*m�xiq���������P?+0 xip����������?+��8 ^n����������>+h?+����Xeg��?+h]��������������(�*��h]����������������*��^����������@+P@+����Xe���@+hg���-+.+:+�����h����hg��'+H'+ A+����h ++X +� +� +�+�+�+@+$+�$+ %+�&+,+P,+@-+�2+9+89+�>+@+P@+hg��p +� +p+����h]Ѡ������������P�*֠h]۠������������(�*ޠ�pנ��������-�B+�B+h]��������������(�*��h]����������������*��^����������HC+�C+����Xe���C+h]�������������(�*�xi����������D+@ xi����������D+��H �p���������- D+�D+h]#�������������(�*&�p�*0�*0�*h�*H�*x�*��*�+�+�+x+�B+�B+HC+�C+ D+(E+hF+H+�H+(I+h])�������������h�*-�xi-����������F+X�l-�������������hF+�F+^'���������(E+�F+����Xe#�(G+�h����hg ��D+xG+�G+����hg͠C+D+�G+����h]C�������������h�*G�xiG���������hH+ SlG�������������H+8H+�H+�H+(I+h]N�������������P�*S�h]U�������������(�*X��lH������������������H+�H+`f<�`I+��*0�*H�*��*(�*��*�*��*��*��*P�*p�*��*h�*��*0�*h�*�*��*`�*��*0�*p�*0�*0�*h�*H�*x�*��*�+�+�+x+�B+�B+HC+�C+ D+(E+hF+H+�H+(I+�T+U+W+�W+(]+^+d+8i+pi+�j+�p+�q+�q+hs+u+v+8v+`��������0L+�V+�t+�w+��*8N+��|p}XN+P��_�O+8O+pv+!�O+�|p}�O+P��_�f�У�������P��_����������P+�T+U+W+�W+(]+^+d+8i+pi+�j+�p+�q+�q+hs+u+v+�L+HR+��|p}hR+P��_�(S+HS+hS+ �S+�|p}T+P��_�r�{��������P��_��������� Y+�T+U+W+�W+(]+^+d+8i+pi+�j+�p+�q+�q+h]s���������������*t�h]w�������������h�*{�xi{���������hU+X�l{�������������U+8U+xi�����������U+P `o����������'�U+�U+^u����������T+V+����Xes�HV+�cn�����XX+�V+�W+@X+h]����������������*��xi����������hW+X �p����������2W+8W+h]����������������*��p������������W+����Xe���W+`���������X+8s+�P+�Z+��|p}�Z+P��_��[+�[+�[+ H\+�|p}h\+P��_���{��������P��_����������l+(]+^+d+8i+pi+�j+�p+�q+�q+h]��������������h�*��xi�����������]+��l��������������(]+`]+�]+^+h]����������������*���l�������������������]+�]+xi�����������^+/` �p����������-P^+�^+`��������x_+�j+ Y+�a+��|p}�a+P��_�`b+�b+�b+ c+�|p}@c+P��_�á���������P��_���������0e+d+8i+pi+h]^������������� �*j��n]���������5d+`���������d+�j+�j+�_+�f+��|p}�f+P��_��g+�g+�g+Xh+�|p}xh+P��_�l����������P��_���������8i+pi+h]z�������������P�*�h]����������������*��xi�����������i+h `o����������&pi+�i+^����������8i+�i+����Xez�0j+f���V+�h����hgY�8d+hd+�j+����h]��������������(�*��xiĢ��������Xk+p xiâ���������k+��x �p����������-�j+pk+`��������@l+�q+�r+ Y+Hn+��|p}hn+P��_�(o+Ho+ho+�o+�|p}p+P��_�Ǣs��������P��_����������p+�q+�q+h]=������������� �*I�xiL���������P`^J����������p+q+����Xe=�0q+h]]�������������(�*`�h]c���������������*d�xig���������8r+� `oe���������&�q+r+^a����������q+Pr+����Xe]��r+�h����hg���k+�k+�r+����hg���^+0_+s+����h]��������������(�*��xi�����������s+� xi����������t+��� �p����������-hs+�s+xi�����������t+�`f��pt+�h����hg��0t+�t+�t+����h]��������������h�*��xi����������xu+ Sl��������������u+Hu+�u+v+8v+h]��������������P�*ãh]ţ������������(�*ȣ�T+U+W+�W+(]+^+d+8i+pi+�j+�p+�q+�q+hs+u+v+8v+�l�������������������u+�u+`f��xw+hgP�`�*��*�K+����HC ��*�i�����h]����������������x+����ha����`x+��*h]����������������x+�����vT���������^��������������x+�x+����Xe����y+�tT� ����"�i���*��*�P��_�z+z+ z+T�P�*�y+(����xiڣ����xz+�(��|+�(��|p}��+ +P��_��|+}+��+!x�+ �~+ �+�|p}�}+P��_���N��������P��_�����������+��+�0�@�+V�W!H"�~+�k�P�"(+:-��83�P�+bF:,���z��d�!�~+v�= 6(�+&�(5(�+�+��+(�+��+��+��+��+P�+p�+Ȋ+h�+،+��+@�+��+��+ �+0�+��+�+HC �z+�!��������HC �z+H"��������HC �z+�"�������� 6�+��h]��������������(�+��HC �z+ 6����H�+ +��+Ё+(�+8�+�+�+��+h]�������������Ȗ +��+(�+h] �������������(�+��l�������������������+��+Xe�`�+`������+�+h]��������������0�"�xi&�����������+� xi%���������Ђ+��� h]&�������������@�+'�ha���+�z+HC �z+�0�'�h]����������������@�+����^���������������+��+����Xe������+`-�����p�+ �+h]1�������������83�:�xi=�����������+� h]=�������������P�+>�ha-���+�z+HC �z+83�>�h]����������������P�+����^���������������+��+����Xe����Ѕ+`D�������+��+h]H����������������K�xiO�����������+� xiN���������8�+��� h]O�������������(�+P�haD�P�+�z+83�P�+bF:,�0�@�+V�W!�!�~+v�= 6(�+&�(5@���+Ƹ‰ H"�~+�k�P�"(+:-�����(�+z��dЌ� �+���nX;�0�+�Z�FHC �z+���P�h]����������������(�+����^�������������p�+�+����Xe������+`V�����X�+��+h]Z�������������Ќ�f�xii�����������h]i������������� �+m�haV�Ȋ+�z+HC �z+Ќ�m�h]���������������� �+����^�������������h�+��+����Xe������+`������P�+H�+h]��������������X;���xi������������+� h]��������������0�+��ha��،+�z+HC �z+X;��� �+ �+0�+��+�+�+x�+h]����������������0�+����^���������������+��+����Xe������+�z+��+��|p}�+P��_�А+��+�+��+�|p}��+P��_��Ө�������P��_�����������+��+��+Е+��+h] �������������@� �h]�������������(�+�xi����������+X�l���������������+��+xi�����������+� `o���������'(�+h�+`�����8�+h�+h]���������������+�ha�@�+h�+HC �z+@��h]������������������+����^���������������+��+����Xe�����+�c�����(�+��+P�+�+h] ���������������+!�xi%���������8�+� �p"���������2Е+�+h]*���������������++�p*������������+����Xe*�Ȗ+`��������p�+��+��+��+��+`�+�z+x�+��|p}��+P��_�X�+x�+��+!�+�|p}8�+P��_�-�Ө�������P��_�����������+ �X�+*����+p�+�+�+��+Щ+�+��+��+��+��+(�+��+��+��+��+8�+`5�����@�+��+h];������������� �?�h]B�������������(�+F�xiF�����������+��lF���������������+��+P�+p�+h]R���������������+S��lG������������������+@�+h]S�������������X�+T�ha5��+��+HC ��+ �T�^��������������+��+����Xe������+h]`�������������X�+d�xii���������p�+/� �pe���������-�+@�+`���������+X�+��+��+�+��|p}8�+P��_���+�+8�+��+�|p}أ+P��_�r�h��������P��_���������ȥ+��+Щ+�+h]������������� �+��n���������5��+`��������H�+�+0�+��+P�+��|p}p�+P��_�0�+P�+p�+��+�|p}�+P��_��N��������P��_���������Щ+�+h]!�������������P�+*�h]-���������������+.�xi1���������p�+� `o/���������&�+@�+^+���������Щ+��+����Xe!�Ȫ+f>���+�h����hg�Ф+�+H�+�����eW���+�h����hg\���+ȟ+��+����h]s�������������(�+v�xi|���������H�+� xi{�����������+��� �pw���������-��+`�+`��������0�+p�+г+��+8�+��|p}X�+P��_��+8�+X�+ذ+�|p}��+P��_����������P��_�����������+��+��+h]�������������� �+��xi����������P`^������������+��+����Xe�� �+h]�������������(�+ �h]���������������+�xi���������(�+� `o���������&��+��+^ �����������+@�+����Xe���+�h����hgo���+��+��+����h]'�������������X�++�xi0�����������+.�p,���������-(�+`�+`��������0�+��+��+8�+��|p}X�+P��_��+8�+X�+ظ+�|p}��+P��_�9���������P��_�����������+��+��+��+��+h]��������������@�+��xi���������� �+xi����������h�+���p����������-��+8�+h]��������������@�+��h]����������������+��^������������+��+����Xe��0�+h]̧������������0�+קxiܧ���������+�pا��������-��+л+�nا��������5�+h]��������������0�+��xi������������+ ^������������+��+����Xe���+�h����hgȧX�+X�+p�+����hg����+��+��+������+p�+�+�+��+Щ+�+��+��+��+��+(�+��+��+��+��+��+��+��+h] �������������@�+�xi���������P�+(xi�����������+��0�p���������-��+h�+�n���������5��+`��������h�+�+��+p�+��|p}��+P��_�P�+p�+��+�+�|p}0�+P��_��ͨ�������P��_�����������+h]��������������0�+��xiè��������X�+8xi¨����������+��@^������������+p�+����Xe����+�h����hg���+ �+ �+����hg#���+��+0�+�����+��+(�+��+��+��+��+P�+p�+Ȋ+h�+،+��+@�+��+��+Е+��+��+��+��+��+��+��+ �+X�+��+��+��+h]ݨ������������@�+��xi�����������+Hxi����������H�+��P�p����������-��+�+h]��������������(�+��xi����������+Xxi���������P�+��`�p����������-��+ �+`o����������`�+h�+h]O�������������0�+Z�xi_���������P�+h�p[���������-��+ �+`o�����������+h�+h]��������������0�+��xi����������P�+p�p����������-��+ �+h]Ω������������@�+֩h]۩������������(�+ީxi����������H�+x`oߩ��������'��+�+�pש��������-��+`�+`o©��������h�+��+h]��������������@�+��h]��������������P�+�xi�����������+�`o���������&X�+��+�p����������- �+��+`o������������+�+`oa�����������+X�+`�������� �+��+�z+(�+��|p}H�+P��_��+(�+H�+��+�|p}��+P��_� �$��������P��_���������xi�����������+�`f���+�h����hg٨��+��+�+������+��+Ё+(�+8�+�+�+��+�+��+h]0�������������(�+4�xi4���������8�+ Sl4���������������+�+��+��+��+h];�������������@�+C�h]E�������������(�+H��l5�����������������P�+��+`f)�0�+HC �z+�(�����h]������������������+����ha������+�z+h]������������������+�����v����������^�������������@�+x�+����Xe������+�t������"�(��z+p�+�P��_���+��+��+��Hz+�+*����xiT������+�����+���|p}��+P��_���+��+��+@�+ �+��+�|p}`�+P��_�k�Z��������P��_����������+H"h�+�k�P�"��+:-���! �+v�= 8<��+�����+x�+H�+��+ �+�+��+p�+��+HC �+�!��������HC �+H"��������HC �+�"��������8<x�+v�h]l���������������+v�HC �+8<�����+h�+��+�+h]����������������+��xi�������������p����������-H�+��+h]����������������+���n����������8��+xi������������+����p����������-(�+X�+�n����������5��+`o������������+��+`����������+h�+�+��+��|p}��+P��_���+��+��+@�+�|p}`�+P��_���1��������P��_��������� �+�+h]˪������������x�,Ԫh�+��+��+�+@�+ު��+x�+��+��+H�+xiު����������+h��xiު����������+h��h]���������������+ ��n���������8�+xi �����������+�xi �����������+��+H�+n������������+`oު��������&��+ �+`o���������&`�+x�+hmǪ�������� �+X�+�����s������������+Xe��8�+�h����hg~��+P�+��+����h]=��������������RD��+(�+p�+xiE���������X�+`h]J���������������+T��l=�������������������+��+`f6���+HC �+������h]�����������������+����ha����`�+�+h]�����������������+�����v\���������^���������������+��+����Xe�����+�t\�����"���+��+�P��_��+�+ �+\���+��+,�����j)(�)��)�)��*��*(�* z+��+ �+��,��,��,@�,��,xi`������+�����+���|p}� , P��_���+��+pz,�dH&, 0�+p�,�|p}p�+P��_�u�`� + �������P��_���������p,����+�������n�H"x�+�k�P�"��+:-�� ��,*���!0�+v�= 6��+&�(5��+��+X�+��+P�+��+��+��+��+�, ,H,,(,P,�,� ,��+�,@,�,HC (�+�!��������HC (�+H"��������HC (�+�"�������� 6��+z�h]v���������������+z�HC (�+ 6����ؤ,#P�+h�+8�+h�+�,�,,h]��������������Ȗ����+��+h]����������������+���l������������������X�+��+Xe����+`��������+x�+h]��������������������+ ��+h�+ �+��+xi����������P�+�>xi������������+� �+h�+��������xi�����������+�=xi����������P�+���+ �+��������xi������������+p?xi�����������+���+��+��������xi«��������x�+Axiǫ����������+�H�+��+��������xi˫��������0�+h@xiѫ��������x�+��+H�+����������+h�+ �+��+��+ j������������+����h]ԫ��������������+իha��P�+(�+HC (�+��իh]������������������+����^���������������+�+����Xe����(�+h]߫��������������+��xi������������+X�l����������������+��+xi������������+��p����������-�+P�+h]����������������+�`f����+�h����hg۫��+�+(�+����`�������+�,h] ������������� ��h]���������������+�xi���������X�+��l���������������+(�+��+��+xi#���������,��l�����������������p�+��+h]$��������������,%�ha��,(�+HC (�+ �%�h]�����������������,����^������������� ,(,����Xe����X,`+�����,�,h]/���������������9�h]=��������������,A�xiF����������,/��pB���������-H,�,h]M��������������,N�ha+�,(�+Ќ��,���n @�Ƹ‰ 83��,bF:, ����+�������,�n��!0�+v�= 6��+&�(5H"x�+�k�P�"��+:-�� ��,*��H��,�S_�0��,V�W!����,z��d +HC (�+��N�h]�����������������,����^�������������(,�,����Xe����`,`T�����,h]X�������������H�]�h]X��������������,]�haT�P,(�+HC (�+H�X�h]g��������������,q�`��������p,P ,8,(�+x ,��|p}� ,P��_�X +,x +,� +, ,�|p}8 ,P��_�s����������P��_���������� ,h ,h]{���������������+~�xi~���������` ,�>l~�������������� ,0 ,xi����������� ,`^����������x ,� ,����Xe{� ,h]���������������,��xi����������� ,�^����������h ,� ,����Xe��� ,��+X�+��+P�+��+��+��+��+�, ,H,,(,P,�,� ,h ,(,X,@,8,�,�,0,�,(,P,� ,8$,�%,�&,�+,,,`���������,�,(�+�,��|p}�,P��_��,�,�,H,�|p}h,P��_������������P��_���������(,h]���������������,��xi�����������,�^����������(,`,����Xe���,hgc��,(,X,����`Ĭ�����,�,h]Ȭ�������������0�ЬxiԬ���������,�xiӬ��������@,���h]Ԭ�������������,լhaĬX,(�+HC (�+�0�լ��+�,@,�,�,p,�,�,� ,h]�����������������,����^�������������@,,����Xe����x,P�+h�+8�+h�+�,�,,@,h,x,�,�,�$,�+,�,X�,`۬�����,`,h]߬������������83���xi���������� ,�h]���������������,��ha۬8,(�+HC (�+83���h]�����������������,����^��������������,�,����Xe����,`�������,�,h]�������������������xi����������0,�xi����������x,���h]���������������,��ha���,(�+HC (�+�����h]�����������������,����^�������������0,H,����Xe����h,`�����,�,h]�������������Ќ��xi�����������h]��������������,�ha��,(�+HC (�+Ќ��h]�����������������,����^�������������(,X,����Xe����`,`!�����,�$,h]%�������������@�&�h])���������������+-�xi-����������,X�l-�������������P,�,xi7���������@ ,�`o5���������'�, ,h]7��������������#,8�ha!�� ,(�+83��,bF:, @��#,Ƹ‰ 6��+&�(5 ��,*��Ќ��,���n ����+�������,�n��!0�+v�= �0��,V�W!H"x�+�k�P�"��+:-��H��,�S_����,z��d +X;�&,�Z�F HC (�+@�8�h]�����������������#,����^�������������8$,X ,����Xe����p$,`������ %,h',h]��������������X;�ĭxiǭ���������%,�h]ǭ������������&,ȭha���%,(�+HC (�+X;� ȭp�,��+�,@,�,�,p,�,�,� ,�%,h]����������������&,����^��������������&,`%,����Xe����',(�+),��|p}0),P��_��),*,�[,!�*,�|p}�*,P��_������������P��_����������-,�+,,,�,,�1,02, 3,4,�9,�>,?,�@,�F,�G,�G,8I,�N,�c������(-,P,,-,h]���������������#,��h]���������������,���p����������2�+,,,h]���������������#,��p������������,,����Xe���,,`��������p-,4,�@,I,p[,�',x/,��|p}�/,P��_�X0,x0,�R,!1,�|p}81,P��_������������P��_����������U,�1,02, 3,4,�9,�>,?,�@,�F,�G,�G,8I,�N,�O,P,�P,h]��������������, �h]���������������+�xi����������2,��l�������������02,h2,3, 3,h]��������������#,��l������������������2,�2,^ ����������1,X3,����Xe��3,h],��������������,0�xi5����������4,/��p1���������-4,P4,`�������� 5,h@,�@,�-,(7,��|p}H7,P��_�8,(8,H8,�8,�|p}�8,P��_�>�4��������P��_����������:,�9,�>,?,h]Ӯ�������������,߮�nҮ��������5�9,`��������X:,(@,@@,�5,`<,��|p}�<,P��_�@=,`=,�=,>,�|p} >,P��_�����������P��_����������>,?,h]���������������,��h]���������������#,��xi�����������?,�`o����������&?,P?,^�����������>,�?,����Xe���?,f +��+,�h����hgή�9,:,X@,�����e#��+,�h����hg(��4,�4,�@,����h]?��������������,B�xiH���������XA,�xiG����������A,���pC���������-�@,pA,`��������@B,�G,�H,�-,HD,��|p}hD,P��_�(E,HE,hE,�E,�|p}F,P��_�K����������P��_����������F,�G,�G,h]���������������,¯xiů��������P`^ï���������F,G,����Xe��0G,h]ԯ�������������,ׯh]گ�������������#,ۯxiޯ��������8H,`oܯ��������&�G,H,^د���������G,PH,����Xeԯ�H,�h����hg;��A,�A,�H,����h]���������������,��xi�����������I,.�p����������-8I,pI,`��������@J,�R,�-,HL,��|p}hL,P��_�(M,HM,hM,�M,�|p}N,P��_��Ͱ�������P��_����������N,�O,P,�P,�Q,h]^��������������,f�xil���������0O,xik���������xO,�� �pg���������-�N,HO,h]y��������������,��h]���������������#,��^�����������O,P,����Xey�@P,h]��������������&,��xi����������Q,(�p����������-�P,�P,�n����������5(Q,h]��������������&,��xið��������R,0^�����������Q,�Q,����Xe��R,�h����hg��hQ,hR,�R,����hgZ��O,�P,�R,�����1,02, 3,4,�9,�>,?,�@,�F,�G,�G,8I,�N,�O,P,�P,�Q,�S,Z,h]װ�������������,߰xi����������`T,8xi�����������T,��@�p����������-�S,xT,�n����������5�T,`��������xU,[,�-,�W,��|p}�W,P��_�`X,�X,�X, Y,�|p}@Y,P��_������������P��_���������Z,h]��������������&,��xi����������hZ,Hxi�����������Z,��P^����������Z,�Z,����Xe���Z,�h����hgӰU,0U,0[,����hg���I,�I,@[,�����+,,,�,,�1,02, 3,4,�9,�>,?,�@,�F,�G,�G,8I,�N,�O,P,�P,�Q,�S,Z,��+X�+��+P�+��+��+��+��+�, ,H,,(,P,�,� ,h ,(,X,@,8,�,�,0,�,(,P,� ,8$,�%,�&,�+,,,�,,�1,02, 3,4,�9,�>,?,�@,�F,�G,�G,8I,�N,�O,P,�P,�Q,�S,Z,�^,�_,a,b,�b,c,Hd,�d,�j,�p,�q,r,�r,�s,h]���������������,��xi����������(_,Xxi����������p_,��`�p����������-�^,@_,h]ı�������������,DZxiͱ��������0`,hxi̱��������x`,��p�pȱ��������-�_,H`,`o�����������_,�`,h]�������������&,&�xi+���������xa,x�p'���������-a,Ha,`oϱ���������`,�a,h]|�������������&,��xi����������xb,��p����������-b,Hb,h]���������������,��h]���������������,��xi����������pc,�`o����������'c,@c,�p����������-�b,�c,`o�����������b,�c,h]���������������,òh]Ȳ�������������,ѲxiԲ���������d,�`oҲ��������&�d,�d,�pIJ��������-Hd,e,`o����������d,@e,`o-����������a,�e,`��������Hf,@z,(�+Ph,��|p}ph,P��_�0i,Pi,pi, �i,�|p}j,P��_�ز���������P��_����������l,�j,�p,�q,r,�r,�s,�t,v,�v,�w,�x,�x,h]���������������,��xi����������8k,�xi�����������k,����p����������-�j,Pk,�n����������5�k,`��������Pl,z,�f,Xn,��|p}xn,P��_�8o,Xo,xo, �o,�|p}p,P��_������������P��_����������p,�q,r,�r,�s,�t,v,�v,�w,�x,�x,h]���������������,�xi ���������@q,��p���������-�p,q,h]��������������,�`o���������Xq,�q,h]'���������������+*�xi*���������xr,p?l*�������������r,Hr,h]2���������������+5�xi5���������8s,h@l5��������������r,s,h]=���������������+A�xiA����������s, SlA��������������s,�s,`t,�t,�t,xiH����������t,�h]K��������������,N��lB�����������������t,Pt,^;���������Ps,u,����^0����������r,Xu,����Xe'��u,h]h���������������+k�xik���������xv,p?lk�������������v,Hv,h]s���������������+v�xiv���������8w,h@lv��������������v,w,h]~���������������+��xi�����������w, Sl���������������w,�w,`x,�x,�x,h]���������������,��h]���������������,���l������������������x,Px,^|���������Pw,�x,����^q����������v,Hy,����Xeh��y,hg���q,�u,�y,�����h����hg���k,l,0z,������+X�+��+P�+��+��+��+��+�, ,H,,(,P,�,� ,h ,(,X,@,8,�,�,0,�,(,P,� ,8$,�%,�&,�+,,,�,,�1,02, 3,4,�9,�>,?,�@,�F,�G,�G,8I,�N,�O,P,�P,�Q,�S,Z,�^,�_,a,b,�b,c,Hd,�d,�j,�p,�q,r,�r,�s,�t,v,�v,�w,�x,�x,x�,8�,��,@�,x�,p�,0�,h�,0�,��,��,�,�,З,��,��, �,��,؜,�,8�,��,��,��,p�,��,��,`���������~,��,��,(�+��,��|p}�,P��_�؁,��,X�,!��,�|p}��,P��_���״�������P��_���������(�,x�,8�,��,@�,x�,p�,0�,h�,0�,��,��,�,�,З,��,��,h]���������������,³xidz����������,��pó��������-x�,��,h]̳�������������,ֳ`oɳ����������,8�,`����������,X�,H�,p,�,��|p} �,P��_���,�, �,��,�|p}��,P��_�س4��������P��_�����������,@�,x�,p�,0�,h�,h]����������������+��xi������������,h@l����������������,��,h]����������������+��xi������������, Sl��������������@�,x�,�,0�,x�,xi����������`�,�h]���������������,��l��������������������,�,^�����������,��,����Xe���,h]���������������+�xi���������،,p?l�������������p�,��,h]���������������+�xi�����������, Sl�������������0�,h�,�, �,h�,xi$���������P�,�h]'��������������,*��l�������������������,��,^�����������,��,����Xe���,`����������,��,ؙ,p,��,��|p}Б,P��_���,��,В,P�,�|p}p�,P��_�:����������P��_���������0�,��,��,�,�,З,��,��,h]D���������������+G�xiG�����������,h@lG�������������0�,h�,h]O���������������+S�xiS���������X�, SlS���������������,(�,��,��,�,h]Z��������������,c�h]e��������������,m��lT�����������������p�,��,^M�����������,P�,����XeD���,h]x���������������+{�xi{���������x�,p?l{��������������,H�,h]����������������+��xi����������8�, Sl��������������З,�,��,��,��,h]���������������,��h]���������������,���l������������������P�,��,^������������,0�,����Xex���,hg��p�,��,`�,����h]����������������+��x�,8�,��,@�,x�,p�,0�,h�,0�,��,��,�,�,З,��,��, �,��,؜,�,xi������������,Al�������������� �,`�,h]����������������+��xi����������P�, Sl����������������, �,��,؜,�,h]´�������������,ʴh]̴�������������,ϴ�l������������������h�,��,^������������,H�,����Xe����,hg���e,f,�~,����h]���������������,��xi������������,��p����������08�,p�,h]����������������+��xi����������`�,�=l����������������,0�,h]���������������+�xi��������� �, Sl���������������,��,��,��,p�,xi ���������ؠ,�h]��������������,�xi���������X�,�`o���������'��,(�,�l�����������������8�,x�,^����������x�,��,����Xe���,h]+��������������,5�h]=���������������+@�xi@����������,�=l@���������������,��,xiG�����������,`^E���������(�,h�,����Xe=���,�h����hg'�p�,�,�,����hgݴ��,X�,(�,����h]X���������������+[�`fQ���,@�,P�+h�+8�+h�+�,�,,@,h,x,�,�,�$,�+,�,X�,��,HC (�+�� +����h]������������������,����ha����8�,(�+h]������������������,�����vg���������^���������������,Ȧ,����Xe������,�tg�����"��(�+�+�P��_���,��,��,g���+X�,.����xif�����P�,�;xik� ������,` �,h�,��������xir�#�����,�):](� �,V�~�xi}�&������,(�,ب,X�,��������xi��)������,�Sxi��,������ȩ,�,��������xi��/������,�)xi��2������h�,��,�������� j5������@)����h]�������������,��ha'�X�,�HC ��) +��^����������X�,�,����Xe������,h]��?����������,��xi��<����Ȭ,�Sl��9��������`�,��,h]��L��������)��xi��I������,�Sl��F�������� �,X�,h]��O��������)ŵ^��B������,��,0^��5������,�,2Xe��h�,h]ǵ\����������,̵�$ %�%&�&�-p/h��h5PO�)X�,`�, �,��,Ю,��,X�,H�,ȳ,��,(�,��,xi̵Y����@�,�)l̵V��������Ю,�,h]յi��������)ڵxiڵf�����,�)lڵc����������,а,h]��l����������,��^��_�����,X�,4^ӵR����X�,��,6Xeǵ��,h]��{����80�,��platform]0���,�-��xi��x������,��,l��u����:H�,��,xi�~����p�,�S�p�r����-�,@�,h]����������h(�xi������0�,�#l����������ȳ,�,h]!����������)&�^������H�,��,��������,��,>Xe/� �,hg����,�,p�,o�t ����d��+��P��_���,0�,0�,Xe��,�t���������� �P��_��,�,�,����HC ��$����h]���� ���������,����^��������X�,��,����h]K����������,����`fK���,HC ���������HC �(���������HC �H$���������45P5�6.this_function]�H�,�s�p�p����x���8�8������ �� +���`�����(�h�(�P�`�`� � +`:�:�:�<�< ?@C0�YXY�Y \p^�``i�qX��� �� +@� x� �� ��}��9�@:��:��;��>�B��F��H�J�b� e� +(�� (� HL��L��L��M� Q��U�����z�8{��{������@��`��@��ؤ�0�� �-�0.�x.� 0�h0�7�<�XF��V��i� l� +h|� H�� p�� @�����������P��p3��3�4�5��@��I� �h���������x������������� ��� +��� @@� Ї�H��� �0n�xn��n��o�@p�0w�{�}��~���� ��� +�M�-�X-��-��.��1�@4�8�:�`<��C� ���Ѝ��������Ȥ�����0����� ��x��p��h�� h�� +�( ��( P�( ��(��(�(�))P)�!)�#)P%)P-)�6)@o)�o)�o)�p)Xw)|)��)��)0�)0�)�)X�)��)��)�)h�)��)�)H�)��)��)��)��)(�)8�)h�) (* +P* �* � +* hN*�R*@a*p�*��*�*�*h�*��*��*��*��*��*��*��*��*@ +��*��*0�*h�*��*P�*(�* �*��*��* ��* +X�+�~+�~+(+(�+@�+P�+(�+ �+0�+��+ �+h�+��+��+0�+x�+��+��+��+�,�,�,�,�, �, +�, �#, &, �!x"#�' (h(0*x*�/Ȗ p� +�5 �R ) ��,0�,x�,��,�' (h(0*x*�/Ȗ p� +�5 �R ) ��,�,0�,x�,��, diff --git a/2-Coordinating-IO/source/working-with-files/incremental-processing/file.dat b/2-Coordinating-IO/source/working-with-files/incremental-processing/file.dat new file mode 100644 index 0000000..6a97696 Binary files /dev/null and b/2-Coordinating-IO/source/working-with-files/incremental-processing/file.dat differ diff --git a/2-Coordinating-IO/source/working-with-files/incremental-processing/log.txt b/2-Coordinating-IO/source/working-with-files/incremental-processing/log.txt new file mode 100644 index 0000000..d210d7f --- /dev/null +++ b/2-Coordinating-IO/source/working-with-files/incremental-processing/log.txt @@ -0,0 +1,4 @@ +Wed Jun 08 2016 23:48:13 GMT+0100 (BST) 896977 bytes removed +Wed Jun 08 2016 23:48:17 GMT+0100 (BST) 896977 bytes removed +Wed Jun 08 2016 23:49:25 GMT+0100 (BST) 896977 bytes removed +Wed Jun 08 2016 23:50:17 GMT+0100 (BST) 896977 bytes removed diff --git a/2-Coordinating-IO/source/working-with-files/incremental-processing/null-byte-remover.js b/2-Coordinating-IO/source/working-with-files/incremental-processing/null-byte-remover.js new file mode 100644 index 0000000..9a57267 --- /dev/null +++ b/2-Coordinating-IO/source/working-with-files/incremental-processing/null-byte-remover.js @@ -0,0 +1,23 @@ +'use strict' + +setInterval(() => process.stdout.write('.'), 10).unref() + +const fs = require('fs') +const path = require('path') +const cwd = process.cwd() + +const sbs = require('strip-bytes-stream') + +fs.createReadStream(path.join(cwd, 'file.dat')) + .pipe(sbs((n) => n)) + .on('end', function () { log(this.total) }) + .pipe(fs.createWriteStream(path.join(cwd, 'clean.dat'))) + +function log(total) { + fs.appendFile( + path.join(cwd, 'log.txt'), + (new Date) + ' ' + total + ' bytes removed\n' + ) +} + + diff --git a/2-Coordinating-IO/source/working-with-files/incremental-processing/package.json b/2-Coordinating-IO/source/working-with-files/incremental-processing/package.json new file mode 100644 index 0000000..859e5c4 --- /dev/null +++ b/2-Coordinating-IO/source/working-with-files/incremental-processing/package.json @@ -0,0 +1,14 @@ +{ + "name": "piping", + "version": "1.0.0", + "description": "", + "main": "null-byte-remover.js", + "scripts": { + "test": "echo \"Error: no test specified\" && exit 1" + }, + "author": "David Mark Clements", + "license": "MIT", + "dependencies": { + "strip-bytes-stream": "^1.1.0" + } +} diff --git a/2-Coordinating-IO/source/working-with-files/log.txt b/2-Coordinating-IO/source/working-with-files/log.txt new file mode 100644 index 0000000..4706c31 --- /dev/null +++ b/2-Coordinating-IO/source/working-with-files/log.txt @@ -0,0 +1,6 @@ +Wed Jun 08 2016 22:56:41 GMT+0100 (BST) 100000000 bytes removed +Wed Jun 08 2016 22:56:54 GMT+0100 (BST) 897090 bytes removed +Wed Jun 08 2016 22:58:02 GMT+0100 (BST) 897090 bytes removed +Wed Jun 08 2016 22:58:03 GMT+0100 (BST) 897090 bytes removed +Wed Jun 08 2016 22:58:15 GMT+0100 (BST) 897090 bytes removed +Wed Jun 08 2016 22:59:08 GMT+0100 (BST) 897090 bytes removed diff --git a/2-Coordinating-IO/source/working-with-files/null-byte-remover.js b/2-Coordinating-IO/source/working-with-files/null-byte-remover.js new file mode 100644 index 0000000..e891808 --- /dev/null +++ b/2-Coordinating-IO/source/working-with-files/null-byte-remover.js @@ -0,0 +1,15 @@ +'use strict' + +const fs = require('fs') +const path = require('path') +const cwd = process.cwd() +const bytes = fs.readFileSync(path.join(cwd, 'file.dat')) + +const clean = bytes.filter(n => n) +fs.writeFileSync(path.join(cwd, 'clean.dat'), clean) + +fs.appendFileSync( + path.join(cwd, 'log.txt'), + (new Date) + ' ' + (bytes.length - clean.length) + ' bytes removed\n' +) +