From b4fa4923ea4b0f1c014bfe43e80e1b6cef555088 Mon Sep 17 00:00:00 2001 From: maxdignan Date: Sat, 10 Oct 2015 13:59:20 -0400 Subject: [PATCH] added in rap name for first or last name --- index.html | 24 +- js/script.js | 39 +- node_modules/.bin/hs | 1 + node_modules/.bin/http-server | 1 + node_modules/http-server/.npmignore | 3 + node_modules/http-server/.travis.yml | 22 + node_modules/http-server/LICENSE | 20 + node_modules/http-server/README.md | 77 + node_modules/http-server/bin/http-server | 163 ++ node_modules/http-server/lib/http-server.js | 134 ++ .../http-server/node_modules/.bin/ecstatic | 1 + .../http-server/node_modules/.bin/opener | 1 + .../node_modules/colors/.travis.yml | 6 + .../node_modules/colors/MIT-LICENSE.txt | 23 + .../http-server/node_modules/colors/ReadMe.md | 167 ++ .../colors/examples/normal-usage.js | 74 + .../colors/examples/safe-string.js | 76 + .../node_modules/colors/lib/colors.js | 176 ++ .../node_modules/colors/lib/custom/trap.js | 45 + .../node_modules/colors/lib/custom/zalgo.js | 104 ++ .../colors/lib/extendStringPrototype.js | 118 ++ .../node_modules/colors/lib/index.js | 12 + .../node_modules/colors/lib/maps/america.js | 12 + .../node_modules/colors/lib/maps/rainbow.js | 13 + .../node_modules/colors/lib/maps/random.js | 8 + .../node_modules/colors/lib/maps/zebra.js | 5 + .../node_modules/colors/lib/styles.js | 77 + .../colors/lib/system/supports-colors.js | 61 + .../node_modules/colors/package.json | 51 + .../http-server/node_modules/colors/safe.js | 9 + .../colors/screenshots/colors.png | Bin 0 -> 79787 bytes .../node_modules/colors/tests/basic-test.js | 50 + .../node_modules/colors/tests/safe-test.js | 45 + .../colors/themes/generic-logging.js | 12 + .../node_modules/corser/.npmignore | 2 + .../node_modules/corser/.travis.yml | 5 + .../http-server/node_modules/corser/LICENSE | 19 + .../http-server/node_modules/corser/README.md | 196 ++ .../node_modules/corser/lib/corser.js | 226 +++ .../node_modules/corser/package.json | 56 + .../node_modules/ecstatic/.npmignore | 19 + .../node_modules/ecstatic/.travis.yml | 5 + .../node_modules/ecstatic/CONTRIBUTING.md | 62 + .../node_modules/ecstatic/ChangeLog.md | 32 + .../node_modules/ecstatic/LICENSE.txt | 22 + .../node_modules/ecstatic/README.md | 178 ++ .../node_modules/ecstatic/example/core.js | 10 + .../node_modules/ecstatic/example/express.js | 12 + .../ecstatic/example/public/beep/index.html | 1 + .../ecstatic/example/public/hello.txt | 1 + .../ecstatic/example/public/subdir/world.txt | 1 + .../ecstatic/example/public/turtle.png | Bin 0 -> 195848 bytes .../node_modules/ecstatic/example/union.js | 10 + .../node_modules/ecstatic/lib/ecstatic.js | 288 +++ .../ecstatic/lib/ecstatic/etag.js | 3 + .../ecstatic/lib/ecstatic/opts.js | 122 ++ .../ecstatic/lib/ecstatic/showdir.js | 214 +++ .../ecstatic/lib/ecstatic/status-handlers.js | 72 + .../ecstatic/node_modules/.bin/he | 1 + .../ecstatic/node_modules/.bin/mime | 1 + .../ecstatic/node_modules/he/LICENSE-MIT.txt | 20 + .../ecstatic/node_modules/he/README.md | 336 ++++ .../ecstatic/node_modules/he/bin/he | 143 ++ .../ecstatic/node_modules/he/he.js | 329 ++++ .../ecstatic/node_modules/he/man/he.1 | 78 + .../ecstatic/node_modules/he/package.json | 81 + .../ecstatic/node_modules/mime/.npmignore | 0 .../ecstatic/node_modules/mime/LICENSE | 19 + .../ecstatic/node_modules/mime/README.md | 90 + .../ecstatic/node_modules/mime/build/build.js | 11 + .../ecstatic/node_modules/mime/build/test.js | 57 + .../ecstatic/node_modules/mime/cli.js | 8 + .../ecstatic/node_modules/mime/mime.js | 108 ++ .../ecstatic/node_modules/mime/package.json | 73 + .../ecstatic/node_modules/mime/types.json | 1 + .../node_modules/minimist/.travis.yml | 8 + .../ecstatic/node_modules/minimist/LICENSE | 18 + .../node_modules/minimist/example/parse.js | 2 + .../ecstatic/node_modules/minimist/index.js | 236 +++ .../node_modules/minimist/package.json | 71 + .../node_modules/minimist/readme.markdown | 91 + .../node_modules/minimist/test/all_bool.js | 32 + .../node_modules/minimist/test/bool.js | 166 ++ .../node_modules/minimist/test/dash.js | 31 + .../minimist/test/default_bool.js | 35 + .../node_modules/minimist/test/dotted.js | 22 + .../node_modules/minimist/test/kv_short.js | 16 + .../node_modules/minimist/test/long.js | 31 + .../node_modules/minimist/test/num.js | 36 + .../node_modules/minimist/test/parse.js | 197 ++ .../minimist/test/parse_modified.js | 9 + .../node_modules/minimist/test/short.js | 67 + .../node_modules/minimist/test/stop_early.js | 15 + .../node_modules/minimist/test/unknown.js | 102 + .../node_modules/minimist/test/whitespace.js | 8 + .../ecstatic/node_modules/url-join/.npmignore | 2 + .../ecstatic/node_modules/url-join/README.md | 27 + .../node_modules/url-join/lib/url-join.js | 12 + .../node_modules/url-join/package.json | 49 + .../node_modules/url-join/test/tests.js | 23 + .../node_modules/ecstatic/package.json | 71 + .../node_modules/http-proxy/.npmignore | 7 + .../node_modules/http-proxy/LICENSE | 23 + .../node_modules/http-proxy/README.md | 417 +++++ .../node_modules/http-proxy/index.js | 13 + .../node_modules/http-proxy/lib/http-proxy.js | 59 + .../http-proxy/lib/http-proxy/common.js | 206 +++ .../http-proxy/lib/http-proxy/index.js | 184 ++ .../lib/http-proxy/passes/web-incoming.js | 166 ++ .../lib/http-proxy/passes/web-outgoing.js | 105 ++ .../lib/http-proxy/passes/ws-incoming.js | 158 ++ .../node_modules/eventemitter3/LICENSE | 21 + .../node_modules/eventemitter3/README.md | 89 + .../node_modules/eventemitter3/index.js | 262 +++ .../node_modules/eventemitter3/package.json | 81 + .../node_modules/requires-port/.npmignore | 2 + .../node_modules/requires-port/.travis.yml | 28 + .../node_modules/requires-port/LICENSE | 22 + .../node_modules/requires-port/README.md | 47 + .../node_modules/requires-port/index.js | 38 + .../node_modules/requires-port/package.json | 76 + .../node_modules/requires-port/test.js | 98 + .../node_modules/http-proxy/package.json | 78 + .../node_modules/opener/LICENSE.txt | 19 + .../http-server/node_modules/opener/README.md | 57 + .../http-server/node_modules/opener/opener.js | 60 + .../node_modules/opener/package.json | 54 + .../node_modules/optimist/.travis.yml | 4 + .../http-server/node_modules/optimist/LICENSE | 21 + .../node_modules/optimist/example/bool.js | 10 + .../optimist/example/boolean_double.js | 7 + .../optimist/example/boolean_single.js | 7 + .../optimist/example/default_hash.js | 8 + .../optimist/example/default_singles.js | 7 + .../node_modules/optimist/example/divide.js | 8 + .../optimist/example/line_count.js | 20 + .../optimist/example/line_count_options.js | 29 + .../optimist/example/line_count_wrap.js | 29 + .../node_modules/optimist/example/nonopt.js | 4 + .../node_modules/optimist/example/reflect.js | 2 + .../node_modules/optimist/example/short.js | 3 + .../node_modules/optimist/example/string.js | 11 + .../optimist/example/usage-options.js | 19 + .../node_modules/optimist/example/xup.js | 10 + .../node_modules/optimist/index.js | 343 ++++ .../node_modules/minimist/.travis.yml | 4 + .../optimist/node_modules/minimist/LICENSE | 18 + .../node_modules/minimist/example/parse.js | 2 + .../optimist/node_modules/minimist/index.js | 187 ++ .../node_modules/minimist/package.json | 67 + .../node_modules/minimist/readme.markdown | 73 + .../node_modules/minimist/test/bool.js | 119 ++ .../node_modules/minimist/test/dash.js | 24 + .../minimist/test/default_bool.js | 20 + .../node_modules/minimist/test/dotted.js | 22 + .../node_modules/minimist/test/long.js | 31 + .../node_modules/minimist/test/num.js | 36 + .../node_modules/minimist/test/parse.js | 197 ++ .../minimist/test/parse_modified.js | 9 + .../node_modules/minimist/test/short.js | 67 + .../node_modules/minimist/test/whitespace.js | 8 + .../optimist/node_modules/wordwrap/LICENSE | 18 + .../node_modules/wordwrap/README.markdown | 70 + .../node_modules/wordwrap/example/center.js | 10 + .../node_modules/wordwrap/example/meat.js | 3 + .../optimist/node_modules/wordwrap/index.js | 76 + .../node_modules/wordwrap/package.json | 63 + .../node_modules/wordwrap/test/break.js | 30 + .../node_modules/wordwrap/test/idleness.txt | 63 + .../node_modules/wordwrap/test/wrap.js | 31 + .../node_modules/optimist/package.json | 64 + .../node_modules/optimist/readme.markdown | 513 +++++ .../node_modules/optimist/test/_.js | 71 + .../node_modules/optimist/test/_/argv.js | 2 + .../node_modules/optimist/test/_/bin.js | 3 + .../node_modules/optimist/test/dash.js | 31 + .../node_modules/optimist/test/parse.js | 446 +++++ .../optimist/test/parse_modified.js | 14 + .../node_modules/optimist/test/short.js | 16 + .../node_modules/optimist/test/usage.js | 292 +++ .../node_modules/optimist/test/whitespace.js | 8 + .../node_modules/portfinder/.npmignore | 2 + .../node_modules/portfinder/.travis.yml | 21 + .../node_modules/portfinder/LICENSE | 22 + .../node_modules/portfinder/README.md | 38 + .../node_modules/portfinder/lib/portfinder.js | 218 +++ .../portfinder/node_modules/.bin/mkdirp | 1 + .../portfinder/node_modules/async/.travis.yml | 3 + .../portfinder/node_modules/async/LICENSE | 19 + .../portfinder/node_modules/async/README.md | 1646 +++++++++++++++++ .../node_modules/async/component.json | 11 + .../node_modules/async/lib/async.js | 1123 +++++++++++ .../node_modules/async/package.json | 59 + .../node_modules/mkdirp/.travis.yml | 8 + .../portfinder/node_modules/mkdirp/LICENSE | 21 + .../portfinder/node_modules/mkdirp/bin/cmd.js | 33 + .../node_modules/mkdirp/bin/usage.txt | 12 + .../node_modules/mkdirp/examples/pow.js | 6 + .../portfinder/node_modules/mkdirp/index.js | 98 + .../mkdirp/node_modules/minimist/.travis.yml | 4 + .../mkdirp/node_modules/minimist/LICENSE | 18 + .../node_modules/minimist/example/parse.js | 2 + .../mkdirp/node_modules/minimist/index.js | 187 ++ .../mkdirp/node_modules/minimist/package.json | 67 + .../node_modules/minimist/readme.markdown | 73 + .../mkdirp/node_modules/minimist/test/dash.js | 24 + .../minimist/test/default_bool.js | 20 + .../node_modules/minimist/test/dotted.js | 16 + .../mkdirp/node_modules/minimist/test/long.js | 31 + .../node_modules/minimist/test/parse.js | 318 ++++ .../minimist/test/parse_modified.js | 9 + .../node_modules/minimist/test/short.js | 67 + .../node_modules/minimist/test/whitespace.js | 8 + .../node_modules/mkdirp/package.json | 60 + .../node_modules/mkdirp/readme.markdown | 100 + .../node_modules/mkdirp/test/chmod.js | 41 + .../node_modules/mkdirp/test/clobber.js | 38 + .../node_modules/mkdirp/test/mkdirp.js | 28 + .../node_modules/mkdirp/test/opts_fs.js | 29 + .../node_modules/mkdirp/test/opts_fs_sync.js | 27 + .../node_modules/mkdirp/test/perm.js | 32 + .../node_modules/mkdirp/test/perm_sync.js | 36 + .../node_modules/mkdirp/test/race.js | 37 + .../node_modules/mkdirp/test/rel.js | 32 + .../node_modules/mkdirp/test/return.js | 25 + .../node_modules/mkdirp/test/return_sync.js | 24 + .../node_modules/mkdirp/test/root.js | 19 + .../node_modules/mkdirp/test/sync.js | 32 + .../node_modules/mkdirp/test/umask.js | 28 + .../node_modules/mkdirp/test/umask_sync.js | 32 + .../node_modules/portfinder/package.json | 59 + .../portfinder/test/fixtures/.gitkeep | 0 .../test/port-finder-multiple-test.js | 67 + .../test/port-finder-socket-test.js | 92 + .../portfinder/test/port-finder-test.js | 67 + .../http-server/node_modules/union/.npmignore | 7 + .../node_modules/union/.travis.yml | 11 + .../node_modules/union/CHANGELOG.md | 7 + .../http-server/node_modules/union/LICENSE | 19 + .../http-server/node_modules/union/README.md | 323 ++++ .../union/examples/after/index.js | 26 + .../union/examples/simple/favicon.png | Bin 0 -> 545 bytes .../examples/simple/middleware/favicon.js | 96 + .../examples/simple/middleware/gzip-decode.js | 26 + .../examples/simple/middleware/gzip-encode.js | 40 + .../union/examples/simple/simple.js | 60 + .../union/examples/simple/spdy.js | 30 + .../union/examples/socketio/README | 13 + .../union/examples/socketio/index.html | 8 + .../union/examples/socketio/server.js | 30 + .../node_modules/union/lib/buffered-stream.js | 141 ++ .../node_modules/union/lib/core.js | 108 ++ .../node_modules/union/lib/http-stream.js | 52 + .../node_modules/union/lib/index.js | 24 + .../node_modules/union/lib/request-stream.js | 58 + .../node_modules/union/lib/response-stream.js | 179 ++ .../node_modules/union/lib/routing-stream.js | 126 ++ .../union/node_modules/qs/.jshintignore | 1 + .../union/node_modules/qs/.jshintrc | 10 + .../union/node_modules/qs/.npmignore | 18 + .../union/node_modules/qs/.travis.yml | 4 + .../union/node_modules/qs/CHANGELOG.md | 68 + .../union/node_modules/qs/CONTRIBUTING.md | 1 + .../union/node_modules/qs/LICENSE | 28 + .../union/node_modules/qs/Makefile | 8 + .../union/node_modules/qs/README.md | 222 +++ .../union/node_modules/qs/index.js | 1 + .../union/node_modules/qs/lib/index.js | 15 + .../union/node_modules/qs/lib/parse.js | 157 ++ .../union/node_modules/qs/lib/stringify.js | 77 + .../union/node_modules/qs/lib/utils.js | 132 ++ .../union/node_modules/qs/package.json | 59 + .../union/node_modules/qs/test/parse.js | 413 +++++ .../union/node_modules/qs/test/stringify.js | 179 ++ .../node_modules/union/package.json | 68 + .../node_modules/union/test/after-test.js | 37 + .../union/test/body-parser-test.js | 50 + .../union/test/double-write-test.js | 62 + .../node_modules/union/test/ecstatic-test.js | 44 + .../node_modules/union/test/fixtures/index.js | 0 .../union/test/fixtures/static/some-file.txt | 1 + .../node_modules/union/test/header-test.js | 36 + .../node_modules/union/test/helpers/index.js | 0 .../node_modules/union/test/helpers/macros.js | 17 + .../node_modules/union/test/prop-test.js | 45 + .../node_modules/union/test/simple-test.js | 97 + .../union/test/status-code-test.js | 31 + .../node_modules/union/test/streaming-test.js | 68 + .../http-server/node_modules/union/union.png | Bin 0 -> 10826 bytes node_modules/http-server/package.json | 107 ++ node_modules/http-server/public/404.html | 10 + .../http-server/public/img/turtle.png | Bin 0 -> 195848 bytes node_modules/http-server/public/index.html | 12 + .../http-server/screenshots/directory.png | Bin 0 -> 24885 bytes .../http-server/screenshots/public.png | Bin 0 -> 231635 bytes .../http-server/screenshots/start.png | Bin 0 -> 20171 bytes .../test/fixtures/root/canYouSeeMe | 2 + .../http-server/test/fixtures/root/file | 2 + .../http-server/test/http-server-test.js | 154 ++ 299 files changed, 20234 insertions(+), 15 deletions(-) create mode 120000 node_modules/.bin/hs create mode 120000 node_modules/.bin/http-server create mode 100644 node_modules/http-server/.npmignore create mode 100644 node_modules/http-server/.travis.yml create mode 100644 node_modules/http-server/LICENSE create mode 100644 node_modules/http-server/README.md create mode 100755 node_modules/http-server/bin/http-server create mode 100644 node_modules/http-server/lib/http-server.js create mode 120000 node_modules/http-server/node_modules/.bin/ecstatic create mode 120000 node_modules/http-server/node_modules/.bin/opener create mode 100644 node_modules/http-server/node_modules/colors/.travis.yml create mode 100644 node_modules/http-server/node_modules/colors/MIT-LICENSE.txt create mode 100644 node_modules/http-server/node_modules/colors/ReadMe.md create mode 100644 node_modules/http-server/node_modules/colors/examples/normal-usage.js create mode 100644 node_modules/http-server/node_modules/colors/examples/safe-string.js create mode 100644 node_modules/http-server/node_modules/colors/lib/colors.js create mode 100644 node_modules/http-server/node_modules/colors/lib/custom/trap.js create mode 100644 node_modules/http-server/node_modules/colors/lib/custom/zalgo.js create mode 100644 node_modules/http-server/node_modules/colors/lib/extendStringPrototype.js create mode 100644 node_modules/http-server/node_modules/colors/lib/index.js create mode 100644 node_modules/http-server/node_modules/colors/lib/maps/america.js create mode 100644 node_modules/http-server/node_modules/colors/lib/maps/rainbow.js create mode 100644 node_modules/http-server/node_modules/colors/lib/maps/random.js create mode 100644 node_modules/http-server/node_modules/colors/lib/maps/zebra.js create mode 100644 node_modules/http-server/node_modules/colors/lib/styles.js create mode 100644 node_modules/http-server/node_modules/colors/lib/system/supports-colors.js create mode 100644 node_modules/http-server/node_modules/colors/package.json create mode 100644 node_modules/http-server/node_modules/colors/safe.js create mode 100644 node_modules/http-server/node_modules/colors/screenshots/colors.png create mode 100644 node_modules/http-server/node_modules/colors/tests/basic-test.js create mode 100644 node_modules/http-server/node_modules/colors/tests/safe-test.js create mode 100644 node_modules/http-server/node_modules/colors/themes/generic-logging.js create mode 100644 node_modules/http-server/node_modules/corser/.npmignore create mode 100644 node_modules/http-server/node_modules/corser/.travis.yml create mode 100644 node_modules/http-server/node_modules/corser/LICENSE create mode 100644 node_modules/http-server/node_modules/corser/README.md create mode 100644 node_modules/http-server/node_modules/corser/lib/corser.js create mode 100644 node_modules/http-server/node_modules/corser/package.json create mode 100644 node_modules/http-server/node_modules/ecstatic/.npmignore create mode 100644 node_modules/http-server/node_modules/ecstatic/.travis.yml create mode 100644 node_modules/http-server/node_modules/ecstatic/CONTRIBUTING.md create mode 100644 node_modules/http-server/node_modules/ecstatic/ChangeLog.md create mode 100644 node_modules/http-server/node_modules/ecstatic/LICENSE.txt create mode 100644 node_modules/http-server/node_modules/ecstatic/README.md create mode 100644 node_modules/http-server/node_modules/ecstatic/example/core.js create mode 100644 node_modules/http-server/node_modules/ecstatic/example/express.js create mode 100644 node_modules/http-server/node_modules/ecstatic/example/public/beep/index.html create mode 100644 node_modules/http-server/node_modules/ecstatic/example/public/hello.txt create mode 100644 node_modules/http-server/node_modules/ecstatic/example/public/subdir/world.txt create mode 100644 node_modules/http-server/node_modules/ecstatic/example/public/turtle.png create mode 100644 node_modules/http-server/node_modules/ecstatic/example/union.js create mode 100755 node_modules/http-server/node_modules/ecstatic/lib/ecstatic.js create mode 100644 node_modules/http-server/node_modules/ecstatic/lib/ecstatic/etag.js create mode 100644 node_modules/http-server/node_modules/ecstatic/lib/ecstatic/opts.js create mode 100644 node_modules/http-server/node_modules/ecstatic/lib/ecstatic/showdir.js create mode 100644 node_modules/http-server/node_modules/ecstatic/lib/ecstatic/status-handlers.js create mode 120000 node_modules/http-server/node_modules/ecstatic/node_modules/.bin/he create mode 120000 node_modules/http-server/node_modules/ecstatic/node_modules/.bin/mime create mode 100644 node_modules/http-server/node_modules/ecstatic/node_modules/he/LICENSE-MIT.txt create mode 100644 node_modules/http-server/node_modules/ecstatic/node_modules/he/README.md create mode 100755 node_modules/http-server/node_modules/ecstatic/node_modules/he/bin/he create mode 100644 node_modules/http-server/node_modules/ecstatic/node_modules/he/he.js create mode 100644 node_modules/http-server/node_modules/ecstatic/node_modules/he/man/he.1 create mode 100644 node_modules/http-server/node_modules/ecstatic/node_modules/he/package.json create mode 100644 node_modules/http-server/node_modules/ecstatic/node_modules/mime/.npmignore create mode 100644 node_modules/http-server/node_modules/ecstatic/node_modules/mime/LICENSE create mode 100644 node_modules/http-server/node_modules/ecstatic/node_modules/mime/README.md create mode 100644 node_modules/http-server/node_modules/ecstatic/node_modules/mime/build/build.js create mode 100644 node_modules/http-server/node_modules/ecstatic/node_modules/mime/build/test.js create mode 100755 node_modules/http-server/node_modules/ecstatic/node_modules/mime/cli.js create mode 100644 node_modules/http-server/node_modules/ecstatic/node_modules/mime/mime.js create mode 100644 node_modules/http-server/node_modules/ecstatic/node_modules/mime/package.json create mode 100644 node_modules/http-server/node_modules/ecstatic/node_modules/mime/types.json create mode 100644 node_modules/http-server/node_modules/ecstatic/node_modules/minimist/.travis.yml create mode 100644 node_modules/http-server/node_modules/ecstatic/node_modules/minimist/LICENSE create mode 100644 node_modules/http-server/node_modules/ecstatic/node_modules/minimist/example/parse.js create mode 100644 node_modules/http-server/node_modules/ecstatic/node_modules/minimist/index.js create mode 100644 node_modules/http-server/node_modules/ecstatic/node_modules/minimist/package.json create mode 100644 node_modules/http-server/node_modules/ecstatic/node_modules/minimist/readme.markdown create mode 100644 node_modules/http-server/node_modules/ecstatic/node_modules/minimist/test/all_bool.js create mode 100644 node_modules/http-server/node_modules/ecstatic/node_modules/minimist/test/bool.js create mode 100644 node_modules/http-server/node_modules/ecstatic/node_modules/minimist/test/dash.js create mode 100644 node_modules/http-server/node_modules/ecstatic/node_modules/minimist/test/default_bool.js create mode 100644 node_modules/http-server/node_modules/ecstatic/node_modules/minimist/test/dotted.js create mode 100644 node_modules/http-server/node_modules/ecstatic/node_modules/minimist/test/kv_short.js create mode 100644 node_modules/http-server/node_modules/ecstatic/node_modules/minimist/test/long.js create mode 100644 node_modules/http-server/node_modules/ecstatic/node_modules/minimist/test/num.js create mode 100644 node_modules/http-server/node_modules/ecstatic/node_modules/minimist/test/parse.js create mode 100644 node_modules/http-server/node_modules/ecstatic/node_modules/minimist/test/parse_modified.js create mode 100644 node_modules/http-server/node_modules/ecstatic/node_modules/minimist/test/short.js create mode 100644 node_modules/http-server/node_modules/ecstatic/node_modules/minimist/test/stop_early.js create mode 100644 node_modules/http-server/node_modules/ecstatic/node_modules/minimist/test/unknown.js create mode 100644 node_modules/http-server/node_modules/ecstatic/node_modules/minimist/test/whitespace.js create mode 100644 node_modules/http-server/node_modules/ecstatic/node_modules/url-join/.npmignore create mode 100644 node_modules/http-server/node_modules/ecstatic/node_modules/url-join/README.md create mode 100644 node_modules/http-server/node_modules/ecstatic/node_modules/url-join/lib/url-join.js create mode 100644 node_modules/http-server/node_modules/ecstatic/node_modules/url-join/package.json create mode 100644 node_modules/http-server/node_modules/ecstatic/node_modules/url-join/test/tests.js create mode 100644 node_modules/http-server/node_modules/ecstatic/package.json create mode 100644 node_modules/http-server/node_modules/http-proxy/.npmignore create mode 100644 node_modules/http-server/node_modules/http-proxy/LICENSE create mode 100644 node_modules/http-server/node_modules/http-proxy/README.md create mode 100644 node_modules/http-server/node_modules/http-proxy/index.js create mode 100644 node_modules/http-server/node_modules/http-proxy/lib/http-proxy.js create mode 100644 node_modules/http-server/node_modules/http-proxy/lib/http-proxy/common.js create mode 100644 node_modules/http-server/node_modules/http-proxy/lib/http-proxy/index.js create mode 100644 node_modules/http-server/node_modules/http-proxy/lib/http-proxy/passes/web-incoming.js create mode 100644 node_modules/http-server/node_modules/http-proxy/lib/http-proxy/passes/web-outgoing.js create mode 100644 node_modules/http-server/node_modules/http-proxy/lib/http-proxy/passes/ws-incoming.js create mode 100644 node_modules/http-server/node_modules/http-proxy/node_modules/eventemitter3/LICENSE create mode 100644 node_modules/http-server/node_modules/http-proxy/node_modules/eventemitter3/README.md create mode 100644 node_modules/http-server/node_modules/http-proxy/node_modules/eventemitter3/index.js create mode 100644 node_modules/http-server/node_modules/http-proxy/node_modules/eventemitter3/package.json create mode 100644 node_modules/http-server/node_modules/http-proxy/node_modules/requires-port/.npmignore create mode 100644 node_modules/http-server/node_modules/http-proxy/node_modules/requires-port/.travis.yml create mode 100644 node_modules/http-server/node_modules/http-proxy/node_modules/requires-port/LICENSE create mode 100644 node_modules/http-server/node_modules/http-proxy/node_modules/requires-port/README.md create mode 100644 node_modules/http-server/node_modules/http-proxy/node_modules/requires-port/index.js create mode 100644 node_modules/http-server/node_modules/http-proxy/node_modules/requires-port/package.json create mode 100644 node_modules/http-server/node_modules/http-proxy/node_modules/requires-port/test.js create mode 100644 node_modules/http-server/node_modules/http-proxy/package.json create mode 100644 node_modules/http-server/node_modules/opener/LICENSE.txt create mode 100644 node_modules/http-server/node_modules/opener/README.md create mode 100755 node_modules/http-server/node_modules/opener/opener.js create mode 100644 node_modules/http-server/node_modules/opener/package.json create mode 100644 node_modules/http-server/node_modules/optimist/.travis.yml create mode 100644 node_modules/http-server/node_modules/optimist/LICENSE create mode 100644 node_modules/http-server/node_modules/optimist/example/bool.js create mode 100644 node_modules/http-server/node_modules/optimist/example/boolean_double.js create mode 100644 node_modules/http-server/node_modules/optimist/example/boolean_single.js create mode 100644 node_modules/http-server/node_modules/optimist/example/default_hash.js create mode 100644 node_modules/http-server/node_modules/optimist/example/default_singles.js create mode 100644 node_modules/http-server/node_modules/optimist/example/divide.js create mode 100644 node_modules/http-server/node_modules/optimist/example/line_count.js create mode 100644 node_modules/http-server/node_modules/optimist/example/line_count_options.js create mode 100644 node_modules/http-server/node_modules/optimist/example/line_count_wrap.js create mode 100644 node_modules/http-server/node_modules/optimist/example/nonopt.js create mode 100644 node_modules/http-server/node_modules/optimist/example/reflect.js create mode 100644 node_modules/http-server/node_modules/optimist/example/short.js create mode 100644 node_modules/http-server/node_modules/optimist/example/string.js create mode 100644 node_modules/http-server/node_modules/optimist/example/usage-options.js create mode 100644 node_modules/http-server/node_modules/optimist/example/xup.js create mode 100644 node_modules/http-server/node_modules/optimist/index.js create mode 100644 node_modules/http-server/node_modules/optimist/node_modules/minimist/.travis.yml create mode 100644 node_modules/http-server/node_modules/optimist/node_modules/minimist/LICENSE create mode 100644 node_modules/http-server/node_modules/optimist/node_modules/minimist/example/parse.js create mode 100644 node_modules/http-server/node_modules/optimist/node_modules/minimist/index.js create mode 100644 node_modules/http-server/node_modules/optimist/node_modules/minimist/package.json create mode 100644 node_modules/http-server/node_modules/optimist/node_modules/minimist/readme.markdown create mode 100644 node_modules/http-server/node_modules/optimist/node_modules/minimist/test/bool.js create mode 100644 node_modules/http-server/node_modules/optimist/node_modules/minimist/test/dash.js create mode 100644 node_modules/http-server/node_modules/optimist/node_modules/minimist/test/default_bool.js create mode 100644 node_modules/http-server/node_modules/optimist/node_modules/minimist/test/dotted.js create mode 100644 node_modules/http-server/node_modules/optimist/node_modules/minimist/test/long.js create mode 100644 node_modules/http-server/node_modules/optimist/node_modules/minimist/test/num.js create mode 100644 node_modules/http-server/node_modules/optimist/node_modules/minimist/test/parse.js create mode 100644 node_modules/http-server/node_modules/optimist/node_modules/minimist/test/parse_modified.js create mode 100644 node_modules/http-server/node_modules/optimist/node_modules/minimist/test/short.js create mode 100644 node_modules/http-server/node_modules/optimist/node_modules/minimist/test/whitespace.js create mode 100644 node_modules/http-server/node_modules/optimist/node_modules/wordwrap/LICENSE create mode 100644 node_modules/http-server/node_modules/optimist/node_modules/wordwrap/README.markdown create mode 100644 node_modules/http-server/node_modules/optimist/node_modules/wordwrap/example/center.js create mode 100644 node_modules/http-server/node_modules/optimist/node_modules/wordwrap/example/meat.js create mode 100644 node_modules/http-server/node_modules/optimist/node_modules/wordwrap/index.js create mode 100644 node_modules/http-server/node_modules/optimist/node_modules/wordwrap/package.json create mode 100644 node_modules/http-server/node_modules/optimist/node_modules/wordwrap/test/break.js create mode 100644 node_modules/http-server/node_modules/optimist/node_modules/wordwrap/test/idleness.txt create mode 100644 node_modules/http-server/node_modules/optimist/node_modules/wordwrap/test/wrap.js create mode 100644 node_modules/http-server/node_modules/optimist/package.json create mode 100644 node_modules/http-server/node_modules/optimist/readme.markdown create mode 100644 node_modules/http-server/node_modules/optimist/test/_.js create mode 100644 node_modules/http-server/node_modules/optimist/test/_/argv.js create mode 100755 node_modules/http-server/node_modules/optimist/test/_/bin.js create mode 100644 node_modules/http-server/node_modules/optimist/test/dash.js create mode 100644 node_modules/http-server/node_modules/optimist/test/parse.js create mode 100644 node_modules/http-server/node_modules/optimist/test/parse_modified.js create mode 100644 node_modules/http-server/node_modules/optimist/test/short.js create mode 100644 node_modules/http-server/node_modules/optimist/test/usage.js create mode 100644 node_modules/http-server/node_modules/optimist/test/whitespace.js create mode 100644 node_modules/http-server/node_modules/portfinder/.npmignore create mode 100644 node_modules/http-server/node_modules/portfinder/.travis.yml create mode 100644 node_modules/http-server/node_modules/portfinder/LICENSE create mode 100644 node_modules/http-server/node_modules/portfinder/README.md create mode 100644 node_modules/http-server/node_modules/portfinder/lib/portfinder.js create mode 120000 node_modules/http-server/node_modules/portfinder/node_modules/.bin/mkdirp create mode 100644 node_modules/http-server/node_modules/portfinder/node_modules/async/.travis.yml create mode 100644 node_modules/http-server/node_modules/portfinder/node_modules/async/LICENSE create mode 100644 node_modules/http-server/node_modules/portfinder/node_modules/async/README.md create mode 100644 node_modules/http-server/node_modules/portfinder/node_modules/async/component.json create mode 100755 node_modules/http-server/node_modules/portfinder/node_modules/async/lib/async.js create mode 100644 node_modules/http-server/node_modules/portfinder/node_modules/async/package.json create mode 100644 node_modules/http-server/node_modules/portfinder/node_modules/mkdirp/.travis.yml create mode 100644 node_modules/http-server/node_modules/portfinder/node_modules/mkdirp/LICENSE create mode 100755 node_modules/http-server/node_modules/portfinder/node_modules/mkdirp/bin/cmd.js create mode 100644 node_modules/http-server/node_modules/portfinder/node_modules/mkdirp/bin/usage.txt create mode 100644 node_modules/http-server/node_modules/portfinder/node_modules/mkdirp/examples/pow.js create mode 100644 node_modules/http-server/node_modules/portfinder/node_modules/mkdirp/index.js create mode 100644 node_modules/http-server/node_modules/portfinder/node_modules/mkdirp/node_modules/minimist/.travis.yml create mode 100644 node_modules/http-server/node_modules/portfinder/node_modules/mkdirp/node_modules/minimist/LICENSE create mode 100644 node_modules/http-server/node_modules/portfinder/node_modules/mkdirp/node_modules/minimist/example/parse.js create mode 100644 node_modules/http-server/node_modules/portfinder/node_modules/mkdirp/node_modules/minimist/index.js create mode 100644 node_modules/http-server/node_modules/portfinder/node_modules/mkdirp/node_modules/minimist/package.json create mode 100644 node_modules/http-server/node_modules/portfinder/node_modules/mkdirp/node_modules/minimist/readme.markdown create mode 100644 node_modules/http-server/node_modules/portfinder/node_modules/mkdirp/node_modules/minimist/test/dash.js create mode 100644 node_modules/http-server/node_modules/portfinder/node_modules/mkdirp/node_modules/minimist/test/default_bool.js create mode 100644 node_modules/http-server/node_modules/portfinder/node_modules/mkdirp/node_modules/minimist/test/dotted.js create mode 100644 node_modules/http-server/node_modules/portfinder/node_modules/mkdirp/node_modules/minimist/test/long.js create mode 100644 node_modules/http-server/node_modules/portfinder/node_modules/mkdirp/node_modules/minimist/test/parse.js create mode 100644 node_modules/http-server/node_modules/portfinder/node_modules/mkdirp/node_modules/minimist/test/parse_modified.js create mode 100644 node_modules/http-server/node_modules/portfinder/node_modules/mkdirp/node_modules/minimist/test/short.js create mode 100644 node_modules/http-server/node_modules/portfinder/node_modules/mkdirp/node_modules/minimist/test/whitespace.js create mode 100644 node_modules/http-server/node_modules/portfinder/node_modules/mkdirp/package.json create mode 100644 node_modules/http-server/node_modules/portfinder/node_modules/mkdirp/readme.markdown create mode 100644 node_modules/http-server/node_modules/portfinder/node_modules/mkdirp/test/chmod.js create mode 100644 node_modules/http-server/node_modules/portfinder/node_modules/mkdirp/test/clobber.js create mode 100644 node_modules/http-server/node_modules/portfinder/node_modules/mkdirp/test/mkdirp.js create mode 100644 node_modules/http-server/node_modules/portfinder/node_modules/mkdirp/test/opts_fs.js create mode 100644 node_modules/http-server/node_modules/portfinder/node_modules/mkdirp/test/opts_fs_sync.js create mode 100644 node_modules/http-server/node_modules/portfinder/node_modules/mkdirp/test/perm.js create mode 100644 node_modules/http-server/node_modules/portfinder/node_modules/mkdirp/test/perm_sync.js create mode 100644 node_modules/http-server/node_modules/portfinder/node_modules/mkdirp/test/race.js create mode 100644 node_modules/http-server/node_modules/portfinder/node_modules/mkdirp/test/rel.js create mode 100644 node_modules/http-server/node_modules/portfinder/node_modules/mkdirp/test/return.js create mode 100644 node_modules/http-server/node_modules/portfinder/node_modules/mkdirp/test/return_sync.js create mode 100644 node_modules/http-server/node_modules/portfinder/node_modules/mkdirp/test/root.js create mode 100644 node_modules/http-server/node_modules/portfinder/node_modules/mkdirp/test/sync.js create mode 100644 node_modules/http-server/node_modules/portfinder/node_modules/mkdirp/test/umask.js create mode 100644 node_modules/http-server/node_modules/portfinder/node_modules/mkdirp/test/umask_sync.js create mode 100644 node_modules/http-server/node_modules/portfinder/package.json create mode 100644 node_modules/http-server/node_modules/portfinder/test/fixtures/.gitkeep create mode 100644 node_modules/http-server/node_modules/portfinder/test/port-finder-multiple-test.js create mode 100644 node_modules/http-server/node_modules/portfinder/test/port-finder-socket-test.js create mode 100644 node_modules/http-server/node_modules/portfinder/test/port-finder-test.js create mode 100644 node_modules/http-server/node_modules/union/.npmignore create mode 100644 node_modules/http-server/node_modules/union/.travis.yml create mode 100644 node_modules/http-server/node_modules/union/CHANGELOG.md create mode 100644 node_modules/http-server/node_modules/union/LICENSE create mode 100644 node_modules/http-server/node_modules/union/README.md create mode 100644 node_modules/http-server/node_modules/union/examples/after/index.js create mode 100644 node_modules/http-server/node_modules/union/examples/simple/favicon.png create mode 100644 node_modules/http-server/node_modules/union/examples/simple/middleware/favicon.js create mode 100644 node_modules/http-server/node_modules/union/examples/simple/middleware/gzip-decode.js create mode 100644 node_modules/http-server/node_modules/union/examples/simple/middleware/gzip-encode.js create mode 100644 node_modules/http-server/node_modules/union/examples/simple/simple.js create mode 100644 node_modules/http-server/node_modules/union/examples/simple/spdy.js create mode 100644 node_modules/http-server/node_modules/union/examples/socketio/README create mode 100644 node_modules/http-server/node_modules/union/examples/socketio/index.html create mode 100644 node_modules/http-server/node_modules/union/examples/socketio/server.js create mode 100644 node_modules/http-server/node_modules/union/lib/buffered-stream.js create mode 100644 node_modules/http-server/node_modules/union/lib/core.js create mode 100644 node_modules/http-server/node_modules/union/lib/http-stream.js create mode 100644 node_modules/http-server/node_modules/union/lib/index.js create mode 100644 node_modules/http-server/node_modules/union/lib/request-stream.js create mode 100644 node_modules/http-server/node_modules/union/lib/response-stream.js create mode 100644 node_modules/http-server/node_modules/union/lib/routing-stream.js create mode 100644 node_modules/http-server/node_modules/union/node_modules/qs/.jshintignore create mode 100644 node_modules/http-server/node_modules/union/node_modules/qs/.jshintrc create mode 100644 node_modules/http-server/node_modules/union/node_modules/qs/.npmignore create mode 100644 node_modules/http-server/node_modules/union/node_modules/qs/.travis.yml create mode 100644 node_modules/http-server/node_modules/union/node_modules/qs/CHANGELOG.md create mode 100644 node_modules/http-server/node_modules/union/node_modules/qs/CONTRIBUTING.md create mode 100755 node_modules/http-server/node_modules/union/node_modules/qs/LICENSE create mode 100644 node_modules/http-server/node_modules/union/node_modules/qs/Makefile create mode 100755 node_modules/http-server/node_modules/union/node_modules/qs/README.md create mode 100644 node_modules/http-server/node_modules/union/node_modules/qs/index.js create mode 100755 node_modules/http-server/node_modules/union/node_modules/qs/lib/index.js create mode 100755 node_modules/http-server/node_modules/union/node_modules/qs/lib/parse.js create mode 100755 node_modules/http-server/node_modules/union/node_modules/qs/lib/stringify.js create mode 100755 node_modules/http-server/node_modules/union/node_modules/qs/lib/utils.js create mode 100644 node_modules/http-server/node_modules/union/node_modules/qs/package.json create mode 100755 node_modules/http-server/node_modules/union/node_modules/qs/test/parse.js create mode 100755 node_modules/http-server/node_modules/union/node_modules/qs/test/stringify.js create mode 100644 node_modules/http-server/node_modules/union/package.json create mode 100644 node_modules/http-server/node_modules/union/test/after-test.js create mode 100644 node_modules/http-server/node_modules/union/test/body-parser-test.js create mode 100644 node_modules/http-server/node_modules/union/test/double-write-test.js create mode 100644 node_modules/http-server/node_modules/union/test/ecstatic-test.js create mode 100644 node_modules/http-server/node_modules/union/test/fixtures/index.js create mode 100644 node_modules/http-server/node_modules/union/test/fixtures/static/some-file.txt create mode 100644 node_modules/http-server/node_modules/union/test/header-test.js create mode 100644 node_modules/http-server/node_modules/union/test/helpers/index.js create mode 100644 node_modules/http-server/node_modules/union/test/helpers/macros.js create mode 100644 node_modules/http-server/node_modules/union/test/prop-test.js create mode 100644 node_modules/http-server/node_modules/union/test/simple-test.js create mode 100644 node_modules/http-server/node_modules/union/test/status-code-test.js create mode 100644 node_modules/http-server/node_modules/union/test/streaming-test.js create mode 100644 node_modules/http-server/node_modules/union/union.png create mode 100644 node_modules/http-server/package.json create mode 100644 node_modules/http-server/public/404.html create mode 100644 node_modules/http-server/public/img/turtle.png create mode 100644 node_modules/http-server/public/index.html create mode 100644 node_modules/http-server/screenshots/directory.png create mode 100644 node_modules/http-server/screenshots/public.png create mode 100644 node_modules/http-server/screenshots/start.png create mode 100644 node_modules/http-server/test/fixtures/root/canYouSeeMe create mode 100644 node_modules/http-server/test/fixtures/root/file create mode 100644 node_modules/http-server/test/http-server-test.js diff --git a/index.html b/index.html index 18f8b32..cdad2c0 100644 --- a/index.html +++ b/index.html @@ -9,12 +9,12 @@ Wu-Tang Clan Rap Name Generator - + - + @@ -42,18 +42,18 @@
- +
-

Rap Name Generator

-

Do you want a crazy cool rap name like your favorite
middle-aged rapper from the 90's supergroup Wu-Tang Clan?

Enter your real first name below and click play!

+

Rap Name Generator

+

Do you want a crazy cool rap name like your favorite
middle-aged rapper from the 90's supergroup Wu-Tang Clan?

Enter your real first name below and click play!

- -
+ +
- @@ -63,15 +63,15 @@

Rap Name Generator

-
-
Oh snap! You forgot to enter a name!
+
+
Oh snap! You forgot to enter a name!
- - + + diff --git a/js/script.js b/js/script.js index 2f2cff7..7b7c28f 100644 --- a/js/script.js +++ b/js/script.js @@ -1,6 +1,6 @@ -/** +/** * RAP NAME GENERATOR * The user will insert their first name and on click receive one of several * possible outputs (i.e. Jill). @@ -18,6 +18,21 @@ function Generator() { this.last_names = ['the Chef', 'Digital', 'Wise', 'Knight', 'Wrecka', 'the Genius', 'the Zoo Keeper', 'the Monk', 'the Scientist', 'the Disciple', 'the Darkman', 'Pellegrino', 'the Ill Figure', 'Rocks The World', 'the Baptist',]; this.first_names = ['Inspectah', 'Masta', 'Poppa', 'Five Foot', 'Ghostface', 'Old Dirty']; + this.getName = function(arr) { + return arr[Math.floor(Math.random() * arr.length)]; + }; + + this.getWrapName = function(name) { + var randValue = Math.round(Math.random()); + if (randValue == 0) { //name is first name + var lastName = this.getName(this.last_names); + return name + " " + lastName; + } else { //name entered is last name + var firstName = this.getName(this.first_names); + return firstName + " " + name; + } + }; + } @@ -26,7 +41,25 @@ function Generator() { $(document).ready(function() { - var engine = new Generator; - //Add your codez here + var engine = new Generator(); + + $('#enter').on('click', function(e) { + var name = $('#user-input').val(); + + + $("#err").hide(); + $("#res").hide(); + + if (name.length == 0) { + $("#err").show(); + //$("#err").html(engine.getValue(name)); + } else { + $("#res").show(); + $("#res").html(engine.getWrapName(name)); + } + + + }); + }); diff --git a/node_modules/.bin/hs b/node_modules/.bin/hs new file mode 120000 index 0000000..cb3b666 --- /dev/null +++ b/node_modules/.bin/hs @@ -0,0 +1 @@ +../http-server/bin/http-server \ No newline at end of file diff --git a/node_modules/.bin/http-server b/node_modules/.bin/http-server new file mode 120000 index 0000000..cb3b666 --- /dev/null +++ b/node_modules/.bin/http-server @@ -0,0 +1 @@ +../http-server/bin/http-server \ No newline at end of file diff --git a/node_modules/http-server/.npmignore b/node_modules/http-server/.npmignore new file mode 100644 index 0000000..5894e20 --- /dev/null +++ b/node_modules/http-server/.npmignore @@ -0,0 +1,3 @@ +node_modules/* +!node_modules/node-static +npm-debug.log diff --git a/node_modules/http-server/.travis.yml b/node_modules/http-server/.travis.yml new file mode 100644 index 0000000..6d1d5b6 --- /dev/null +++ b/node_modules/http-server/.travis.yml @@ -0,0 +1,22 @@ +sudo: false +language: node_js +node_js: + - "0.10" + - "0.12" + - "4.1" + +before_install: + - travis_retry npm install -g npm@2.14.5 + - travis_retry npm install + +script: + - npm test + +matrix: + allow_failures: + - node_js: "0.10" + +notifications: + email: + - travis@nodejitsu.com + irc: "irc.freenode.org#nodejitsu" diff --git a/node_modules/http-server/LICENSE b/node_modules/http-server/LICENSE new file mode 100644 index 0000000..1e989b4 --- /dev/null +++ b/node_modules/http-server/LICENSE @@ -0,0 +1,20 @@ +Copyright (c) 2011 Charlie Robbins, Marak Squires, and the Contributors. + +Permission is hereby granted, free of charge, to any person obtaining +a copy of this software and associated documentation files (the +"Software"), to deal in the Software without restriction, including +without limitation the rights to use, copy, modify, merge, publish, +distribute, sublicense, and/or sell copies of the Software, and to +permit persons to whom the Software is furnished to do so, subject to +the following conditions: + +The above copyright notice and this permission notice shall be +included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE +LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION +OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION +WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/node_modules/http-server/README.md b/node_modules/http-server/README.md new file mode 100644 index 0000000..ff85ba8 --- /dev/null +++ b/node_modules/http-server/README.md @@ -0,0 +1,77 @@ +# http-server: a command-line http server + +`http-server` is a simple, zero-configuration command-line http server. It is powerful enough for production usage, but it's simple and hackable enough to be used for testing, local development, and learning. + +![](https://github.com/nodeapps/http-server/raw/master/screenshots/public.png) + +# Installing globally: + +Installation via `npm`. If you don't have `npm` yet: + + curl https://npmjs.org/install.sh | sh + +Once you have `npm`: + + npm install http-server -g + +This will install `http-server` globally so that it may be run from the command line. + +## Usage: + + http-server [path] [options] + +`[path]` defaults to `./public` if the folder exists, and `./` otherwise. + +# Installing as a node app + + mkdir myapp + cd myapp/ + jitsu install http-server + +*If you do not have `jitsu` installed you can install it via `npm install jitsu -g`* + +## Usage + +### Starting http-server locally + + node bin/http-server + +*Now you can visit http://localhost:8080 to view your server* + +### Deploy http-server to nodejitsu + + jitsu deploy + +*You will now be prompted for a `subdomain` to deploy your application on* + +## Available Options: + +`-p` Port to use (defaults to 8080) + +`-a` Address to use (defaults to 0.0.0.0) + +`-d` Show directory listings (defaults to 'True') + +`-i` Display autoIndex (defaults to 'True') + +`-e` or `--ext` Default file extension if none supplied (defaults to 'html') + +`-s` or `--silent` Suppress log messages from output + +`--cors` Enable CORS via the `Access-Control-Allow-Origin` header + +`-o` Open browser window after staring the server + +`-c` Set cache time (in seconds) for cache-control max-age header, e.g. -c10 for 10 seconds (defaults to '3600'). To disable caching, use -c-1. + +`-P` or `--proxy` Proxies all requests which can't be resolved locally to the given url. e.g.: -P http://someurl.com + +`-S` or `--ssl` Enable https. + +`-C` or `--cert` Path to ssl cert file (default: cert.pem). + +`-K` or `--key` Path to ssl key file (default: key.pem). + +`-r` or `--robots` Provide a /robots.txt (whose content defaults to 'User-agent: *\nDisallow: /') + +`-h` or `--help` Print this list and exit. diff --git a/node_modules/http-server/bin/http-server b/node_modules/http-server/bin/http-server new file mode 100755 index 0000000..8b3de28 --- /dev/null +++ b/node_modules/http-server/bin/http-server @@ -0,0 +1,163 @@ +#!/usr/bin/env node + +'use strict'; + +var colors = require('colors'), + os = require('os'), + httpServer = require('../lib/http-server'), + portfinder = require('portfinder'), + opener = require('opener'), + argv = require('optimist') + .boolean('cors') + .argv; + +var ifaces = os.networkInterfaces(); + +if (argv.h || argv.help) { + console.log([ + 'usage: http-server [path] [options]', + '', + 'options:', + ' -p Port to use [8080]', + ' -a Address to use [0.0.0.0]', + ' -d Show directory listings [true]', + ' -i Display autoIndex [true]', + ' -e --ext Default file extension if none supplied [none]', + ' -s --silent Suppress log messages from output', + ' --cors Enable CORS via the "Access-Control-Allow-Origin" header', + ' -o [path] Open browser window after starting the server', + ' -c Cache time (max-age) in seconds [3600], e.g. -c10 for 10 seconds.', + ' To disable caching, use -c-1.', + '', + ' -P --proxy Fallback proxy if the request cannot be resolved. e.g.: http://someurl.com', + '', + ' -S --ssl Enable https.', + ' -C --cert Path to ssl cert file (default: cert.pem).', + ' -K --key Path to ssl key file (default: key.pem).', + '', + ' -r --robots Respond to /robots.txt [User-agent: *\\nDisallow: /]', + ' -h --help Print this list and exit.' + ].join('\n')); + process.exit(); +} + +var port = argv.p || parseInt(process.env.PORT, 10), + host = argv.a || '0.0.0.0', + ssl = !!argv.S || !!argv.ssl, + proxy = argv.P || argv.proxy, + logger; + +if (!argv.s && !argv.silent) { + logger = { + info: console.log, + request: function (req, res, error) { + var date = new Date().toUTCString(); + if (error) { + logger.info( + '[%s] "%s %s" Error (%s): "%s"', + date, req.method.red, req.url.red, + error.status.toString().red, error.message.red + ); + } + else { + logger.info( + '[%s] "%s %s" "%s"', + date, req.method.cyan, req.url.cyan, + req.headers['user-agent'] + ); + } + } + }; +} +else if (colors) { + logger = { + info: function () {}, + request: function () {} + }; +} + +if (!port) { + portfinder.basePort = 8080; + portfinder.getPort(function (err, port) { + if (err) { throw err; } + listen(port); + }); +} +else { + listen(port); +} + +function listen(port) { + var options = { + root: argv._[0], + cache: argv.c, + showDir: argv.d, + autoIndex: argv.i, + robots: argv.r || argv.robots, + ext: argv.e || argv.ext, + logFn: logger.request, + proxy: proxy + }; + + if (argv.cors) { + options.cors = true; + } + + if (ssl) { + options.https = { + cert: argv.C || argv.cert || 'cert.pem', + key: argv.K || argv.key || 'key.pem' + }; + } + + var server = httpServer.createServer(options); + server.listen(port, host, function () { + var canonicalHost = host === '0.0.0.0' ? '127.0.0.1' : host, + protocol = ssl ? 'https:' : 'http:'; + + logger.info(['Starting up http-server, serving '.yellow, + server.root.cyan, + ssl ? (' through'.yellow + ' https'.cyan) : '', + '\nAvailable on:'.yellow + ].join('')); + + Object.keys(ifaces).forEach(function (dev) { + ifaces[dev].forEach(function (details) { + if (details.family === 'IPv4') { + logger.info((' ' + protocol + details.address + ':' + port.toString()).green); + } + }); + }); + + if (typeof proxy === 'string') { + logger.info('Unhandled requests will be served from: ' + proxy); + } + + logger.info('Hit CTRL-C to stop the server'); + if (argv.o) { + opener( + protocol + '//' + canonicalHost + ':' + port, + { command: argv.o !== true ? argv.o : null } + ); + } + }); +} + +if (process.platform === 'win32') { + require('readline').createInterface({ + input: process.stdin, + output: process.stdout + }).on('SIGINT', function () { + process.emit('SIGINT'); + }); +} + +process.on('SIGINT', function () { + logger.info('http-server stopped.'.red); + process.exit(); +}); + +process.on('SIGTERM', function () { + logger.info('http-server stopped.'.red); + process.exit(); +}); diff --git a/node_modules/http-server/lib/http-server.js b/node_modules/http-server/lib/http-server.js new file mode 100644 index 0000000..daddcaa --- /dev/null +++ b/node_modules/http-server/lib/http-server.js @@ -0,0 +1,134 @@ +'use strict'; + +var fs = require('fs'), + union = require('union'), + ecstatic = require('ecstatic'), + httpProxy = require('http-proxy'), + corser = require('corser'); + +// +// Remark: backwards compatibility for previous +// case convention of HTTP +// +exports.HttpServer = exports.HTTPServer = HttpServer; + +/** + * Returns a new instance of HttpServer with the + * specified `options`. + */ +exports.createServer = function (options) { + return new HttpServer(options); +}; + +/** + * Constructor function for the HttpServer object + * with is responsible for serving static files along + * with other HTTP-related features. + */ +function HttpServer(options) { + options = options || {}; + + if (options.root) { + this.root = options.root; + } + else { + try { + fs.lstatSync('./public'); + this.root = './public'; + } + catch (err) { + this.root = './'; + } + } + + this.headers = options.headers || {}; + + this.cache = options.cache === undefined ? 3600 : options.cache; // in seconds. + this.showDir = options.showDir !== 'false'; + this.autoIndex = options.autoIndex !== 'false'; + this.contentType = options.contentType || 'application/octet-stream'; + + if (options.ext) { + this.ext = options.ext === true + ? 'html' + : options.ext; + } + + var before = options.before ? options.before.slice() : []; + + before.push(function (req, res) { + if (options.logFn) { + options.logFn(req, res); + } + + res.emit('next'); + }); + + if (options.cors) { + this.headers['Access-Control-Allow-Origin'] = '*'; + this.headers['Access-Control-Allow-Headers'] = 'Origin, X-Requested-With, Content-Type, Accept, Range'; + + before.push(corser.create()); + } + + if (options.robots) { + before.push(function (req, res) { + if (req.url === '/robots.txt') { + res.setHeader('Content-Type', 'text/plain'); + var robots = options.robots === true + ? 'User-agent: *\nDisallow: /' + : options.robots.replace(/\\n/, '\n'); + + return res.end(robots); + } + + res.emit('next'); + }); + } + + before.push(ecstatic({ + root: this.root, + cache: this.cache, + showDir: this.showDir, + autoIndex: this.autoIndex, + defaultExt: this.ext, + contentType: this.contentType, + handleError: typeof options.proxy !== 'string' + })); + + if (typeof options.proxy === 'string') { + var proxy = httpProxy.createProxyServer({}); + before.push(function (req, res) { + proxy.web(req, res, { + target: options.proxy, + changeOrigin: true + }); + }); + } + + var serverOptions = { + before: before, + headers: this.headers, + onError: function (err, req, res) { + if (options.logFn) { + options.logFn(req, res, err); + } + + res.end(); + } + }; + + if (options.https) { + serverOptions.https = options.https; + } + + this.server = union.createServer(serverOptions); +} + +HttpServer.prototype.listen = function () { + this.server.listen.apply(this.server, arguments); +}; + +HttpServer.prototype.close = function () { + return this.server.close(); +}; diff --git a/node_modules/http-server/node_modules/.bin/ecstatic b/node_modules/http-server/node_modules/.bin/ecstatic new file mode 120000 index 0000000..5a8a58a --- /dev/null +++ b/node_modules/http-server/node_modules/.bin/ecstatic @@ -0,0 +1 @@ +../ecstatic/lib/ecstatic.js \ No newline at end of file diff --git a/node_modules/http-server/node_modules/.bin/opener b/node_modules/http-server/node_modules/.bin/opener new file mode 120000 index 0000000..120b591 --- /dev/null +++ b/node_modules/http-server/node_modules/.bin/opener @@ -0,0 +1 @@ +../opener/opener.js \ No newline at end of file diff --git a/node_modules/http-server/node_modules/colors/.travis.yml b/node_modules/http-server/node_modules/colors/.travis.yml new file mode 100644 index 0000000..ec43125 --- /dev/null +++ b/node_modules/http-server/node_modules/colors/.travis.yml @@ -0,0 +1,6 @@ +language: node_js +node_js: + - "0.11" + - "0.10" + - "0.8" + - "0.6" \ No newline at end of file diff --git a/node_modules/http-server/node_modules/colors/MIT-LICENSE.txt b/node_modules/http-server/node_modules/colors/MIT-LICENSE.txt new file mode 100644 index 0000000..3de4e33 --- /dev/null +++ b/node_modules/http-server/node_modules/colors/MIT-LICENSE.txt @@ -0,0 +1,23 @@ +Original Library + - Copyright (c) Marak Squires + +Additional Functionality + - Copyright (c) Sindre Sorhus (sindresorhus.com) + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. \ No newline at end of file diff --git a/node_modules/http-server/node_modules/colors/ReadMe.md b/node_modules/http-server/node_modules/colors/ReadMe.md new file mode 100644 index 0000000..beb5b14 --- /dev/null +++ b/node_modules/http-server/node_modules/colors/ReadMe.md @@ -0,0 +1,167 @@ +# colors.js + +## get color and style in your node.js console + + + +## Installation + + npm install colors + +## colors and styles! + +### text colors + + - black + - red + - green + - yellow + - blue + - magenta + - cyan + - white + - gray + - grey + +### background colors + + + + - bgBlack + - bgRed + - bgGreen + - bgYellow + - bgBlue + - bgMagenta + - bgCyan + - bgWhite + +### styles + + - reset + - bold + - dim + - italic + - underline + - inverse + - hidden + - strikethrough + +### extras + + - rainbow + - zebra + - america + - trap + - random + + +## Usage + +By popular demand, `colors` now ships with two types of usages! + +The super nifty way + +```js +var colors = require('colors'); + +console.log('hello'.green); // outputs green text +console.log('i like cake and pies'.underline.red) // outputs red underlined text +console.log('inverse the color'.inverse); // inverses the color +console.log('OMG Rainbows!'.rainbow); // rainbow +console.log('Run the trap'.trap); // Drops the bass + +``` + +or a slightly less nifty way which doesn't extend `String.prototype` + +```js +var colors = require('colors/safe'); + +console.log(colors.green('hello')); // outputs green text +console.log(colors.red.underline('i like cake and pies')) // outputs red underlined text +console.log(colors.inverse('inverse the color')); // inverses the color +console.log(colors.rainbow('OMG Rainbows!')); // rainbow +console.log(colors.trap('Run the trap')); // Drops the bass + +``` + +I prefer the first way. Some people seem to be afraid of extending `String.prototype` and prefer the second way. + +If you are writing good code you will never have an issue with the first approach. If you really don't want to touch `String.prototype`, the second usage will not touch `String` native object. + +## Disabling Colors + +To disable colors you can pass the following arguments in the command line to your application: + +```bash +node myapp.js --no-color +``` + +## Console.log [string substitution](http://nodejs.org/docs/latest/api/console.html#console_console_log_data) + +```js +var name = 'Marak'; +console.log(colors.green('Hello %s'), name); +// outputs -> 'Hello Marak' +``` + +## Custom themes + +### Using standard API + +```js + +var colors = require('colors'); + +colors.setTheme({ + silly: 'rainbow', + input: 'grey', + verbose: 'cyan', + prompt: 'grey', + info: 'green', + data: 'grey', + help: 'cyan', + warn: 'yellow', + debug: 'blue', + error: 'red' +}); + +// outputs red text +console.log("this is an error".error); + +// outputs yellow text +console.log("this is a warning".warn); +``` + +### Using string safe API + +```js +var colors = require('colors/safe'); + +// set single property +var error = colors.red; +error('this is red'); + +// set theme +colors.setTheme({ + silly: 'rainbow', + input: 'grey', + verbose: 'cyan', + prompt: 'grey', + info: 'green', + data: 'grey', + help: 'cyan', + warn: 'yellow', + debug: 'blue', + error: 'red' +}); + +// outputs red text +console.log(colors.error("this is an error")); + +// outputs yellow text +console.log(colors.warn("this is a warning")); +``` + +*Protip: There is a secret undocumented style in `colors`. If you find the style you can summon him.* \ No newline at end of file diff --git a/node_modules/http-server/node_modules/colors/examples/normal-usage.js b/node_modules/http-server/node_modules/colors/examples/normal-usage.js new file mode 100644 index 0000000..2818741 --- /dev/null +++ b/node_modules/http-server/node_modules/colors/examples/normal-usage.js @@ -0,0 +1,74 @@ +var colors = require('../lib/index'); + +console.log("First some yellow text".yellow); + +console.log("Underline that text".yellow.underline); + +console.log("Make it bold and red".red.bold); + +console.log(("Double Raindows All Day Long").rainbow) + +console.log("Drop the bass".trap) + +console.log("DROP THE RAINBOW BASS".trap.rainbow) + + +console.log('Chains are also cool.'.bold.italic.underline.red); // styles not widely supported + +console.log('So '.green + 'are'.underline + ' ' + 'inverse'.inverse + ' styles! '.yellow.bold); // styles not widely supported +console.log("Zebras are so fun!".zebra); + +// +// Remark: .strikethrough may not work with Mac OS Terminal App +// +console.log("This is " + "not".strikethrough + " fun."); + +console.log('Background color attack!'.black.bgWhite) +console.log('Use random styles on everything!'.random) +console.log('America, Heck Yeah!'.america) + + +console.log('Setting themes is useful') + +// +// Custom themes +// +console.log('Generic logging theme as JSON'.green.bold.underline); +// Load theme with JSON literal +colors.setTheme({ + silly: 'rainbow', + input: 'grey', + verbose: 'cyan', + prompt: 'grey', + info: 'green', + data: 'grey', + help: 'cyan', + warn: 'yellow', + debug: 'blue', + error: 'red' +}); + +// outputs red text +console.log("this is an error".error); + +// outputs yellow text +console.log("this is a warning".warn); + +// outputs grey text +console.log("this is an input".input); + +console.log('Generic logging theme as file'.green.bold.underline); + +// Load a theme from file +colors.setTheme(__dirname + '/../themes/generic-logging.js'); + +// outputs red text +console.log("this is an error".error); + +// outputs yellow text +console.log("this is a warning".warn); + +// outputs grey text +console.log("this is an input".input); + +//console.log("Don't summon".zalgo) \ No newline at end of file diff --git a/node_modules/http-server/node_modules/colors/examples/safe-string.js b/node_modules/http-server/node_modules/colors/examples/safe-string.js new file mode 100644 index 0000000..111b363 --- /dev/null +++ b/node_modules/http-server/node_modules/colors/examples/safe-string.js @@ -0,0 +1,76 @@ +var colors = require('../safe'); + +console.log(colors.yellow("First some yellow text")); + +console.log(colors.yellow.underline("Underline that text")); + +console.log(colors.red.bold("Make it bold and red")); + +console.log(colors.rainbow("Double Raindows All Day Long")) + +console.log(colors.trap("Drop the bass")) + +console.log(colors.rainbow(colors.trap("DROP THE RAINBOW BASS"))); + +console.log(colors.bold.italic.underline.red('Chains are also cool.')); // styles not widely supported + + +console.log(colors.green('So ') + colors.underline('are') + ' ' + colors.inverse('inverse') + colors.yellow.bold(' styles! ')); // styles not widely supported + +console.log(colors.zebra("Zebras are so fun!")); + +console.log("This is " + colors.strikethrough("not") + " fun."); + + +console.log(colors.black.bgWhite('Background color attack!')); +console.log(colors.random('Use random styles on everything!')) +console.log(colors.america('America, Heck Yeah!')); + +console.log('Setting themes is useful') + +// +// Custom themes +// +//console.log('Generic logging theme as JSON'.green.bold.underline); +// Load theme with JSON literal +colors.setTheme({ + silly: 'rainbow', + input: 'grey', + verbose: 'cyan', + prompt: 'grey', + info: 'green', + data: 'grey', + help: 'cyan', + warn: 'yellow', + debug: 'blue', + error: 'red' +}); + +// outputs red text +console.log(colors.error("this is an error")); + +// outputs yellow text +console.log(colors.warn("this is a warning")); + +// outputs grey text +console.log(colors.input("this is an input")); + + +// console.log('Generic logging theme as file'.green.bold.underline); + +// Load a theme from file +colors.setTheme(__dirname + '/../themes/generic-logging.js'); + +// outputs red text +console.log(colors.error("this is an error")); + +// outputs yellow text +console.log(colors.warn("this is a warning")); + +// outputs grey text +console.log(colors.input("this is an input")); + +// console.log(colors.zalgo("Don't summon him")) + + + diff --git a/node_modules/http-server/node_modules/colors/lib/colors.js b/node_modules/http-server/node_modules/colors/lib/colors.js new file mode 100644 index 0000000..59898de --- /dev/null +++ b/node_modules/http-server/node_modules/colors/lib/colors.js @@ -0,0 +1,176 @@ +/* + +The MIT License (MIT) + +Original Library + - Copyright (c) Marak Squires + +Additional functionality + - Copyright (c) Sindre Sorhus (sindresorhus.com) + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. + +*/ + +var colors = {}; +module['exports'] = colors; + +colors.themes = {}; + +var ansiStyles = colors.styles = require('./styles'); +var defineProps = Object.defineProperties; + +colors.supportsColor = require('./system/supports-colors'); + +if (typeof colors.enabled === "undefined") { + colors.enabled = colors.supportsColor; +} + +colors.stripColors = colors.strip = function(str){ + return ("" + str).replace(/\x1B\[\d+m/g, ''); +}; + + +var stylize = colors.stylize = function stylize (str, style) { + return ansiStyles[style].open + str + ansiStyles[style].close; +} + +var matchOperatorsRe = /[|\\{}()[\]^$+*?.]/g; +var escapeStringRegexp = function (str) { + if (typeof str !== 'string') { + throw new TypeError('Expected a string'); + } + return str.replace(matchOperatorsRe, '\\$&'); +} + +function build(_styles) { + var builder = function builder() { + return applyStyle.apply(builder, arguments); + }; + builder._styles = _styles; + // __proto__ is used because we must return a function, but there is + // no way to create a function with a different prototype. + builder.__proto__ = proto; + return builder; +} + +var styles = (function () { + var ret = {}; + ansiStyles.grey = ansiStyles.gray; + Object.keys(ansiStyles).forEach(function (key) { + ansiStyles[key].closeRe = new RegExp(escapeStringRegexp(ansiStyles[key].close), 'g'); + ret[key] = { + get: function () { + return build(this._styles.concat(key)); + } + }; + }); + return ret; +})(); + +var proto = defineProps(function colors() {}, styles); + +function applyStyle() { + var args = arguments; + var argsLen = args.length; + var str = argsLen !== 0 && String(arguments[0]); + if (argsLen > 1) { + for (var a = 1; a < argsLen; a++) { + str += ' ' + args[a]; + } + } + + if (!colors.enabled || !str) { + return str; + } + + var nestedStyles = this._styles; + + var i = nestedStyles.length; + while (i--) { + var code = ansiStyles[nestedStyles[i]]; + str = code.open + str.replace(code.closeRe, code.open) + code.close; + } + + return str; +} + +function applyTheme (theme) { + for (var style in theme) { + (function(style){ + colors[style] = function(str){ + return colors[theme[style]](str); + }; + })(style) + } +} + +colors.setTheme = function (theme) { + if (typeof theme === 'string') { + try { + colors.themes[theme] = require(theme); + applyTheme(colors.themes[theme]); + return colors.themes[theme]; + } catch (err) { + console.log(err); + return err; + } + } else { + applyTheme(theme); + } +}; + +function init() { + var ret = {}; + Object.keys(styles).forEach(function (name) { + ret[name] = { + get: function () { + return build([name]); + } + }; + }); + return ret; +} + +var sequencer = function sequencer (map, str) { + var exploded = str.split(""), i = 0; + exploded = exploded.map(map); + return exploded.join(""); +}; + +// custom formatter methods +colors.trap = require('./custom/trap'); +colors.zalgo = require('./custom/zalgo'); + +// maps +colors.maps = {}; +colors.maps.america = require('./maps/america'); +colors.maps.zebra = require('./maps/zebra'); +colors.maps.rainbow = require('./maps/rainbow'); +colors.maps.random = require('./maps/random') + +for (var map in colors.maps) { + (function(map){ + colors[map] = function (str) { + return sequencer(colors.maps[map], str); + } + })(map) +} + +defineProps(colors, init()); \ No newline at end of file diff --git a/node_modules/http-server/node_modules/colors/lib/custom/trap.js b/node_modules/http-server/node_modules/colors/lib/custom/trap.js new file mode 100644 index 0000000..3f09143 --- /dev/null +++ b/node_modules/http-server/node_modules/colors/lib/custom/trap.js @@ -0,0 +1,45 @@ +module['exports'] = function runTheTrap (text, options) { + var result = ""; + text = text || "Run the trap, drop the bass"; + text = text.split(''); + var trap = { + a: ["\u0040", "\u0104", "\u023a", "\u0245", "\u0394", "\u039b", "\u0414"], + b: ["\u00df", "\u0181", "\u0243", "\u026e", "\u03b2", "\u0e3f"], + c: ["\u00a9", "\u023b", "\u03fe"], + d: ["\u00d0", "\u018a", "\u0500" , "\u0501" ,"\u0502", "\u0503"], + e: ["\u00cb", "\u0115", "\u018e", "\u0258", "\u03a3", "\u03be", "\u04bc", "\u0a6c"], + f: ["\u04fa"], + g: ["\u0262"], + h: ["\u0126", "\u0195", "\u04a2", "\u04ba", "\u04c7", "\u050a"], + i: ["\u0f0f"], + j: ["\u0134"], + k: ["\u0138", "\u04a0", "\u04c3", "\u051e"], + l: ["\u0139"], + m: ["\u028d", "\u04cd", "\u04ce", "\u0520", "\u0521", "\u0d69"], + n: ["\u00d1", "\u014b", "\u019d", "\u0376", "\u03a0", "\u048a"], + o: ["\u00d8", "\u00f5", "\u00f8", "\u01fe", "\u0298", "\u047a", "\u05dd", "\u06dd", "\u0e4f"], + p: ["\u01f7", "\u048e"], + q: ["\u09cd"], + r: ["\u00ae", "\u01a6", "\u0210", "\u024c", "\u0280", "\u042f"], + s: ["\u00a7", "\u03de", "\u03df", "\u03e8"], + t: ["\u0141", "\u0166", "\u0373"], + u: ["\u01b1", "\u054d"], + v: ["\u05d8"], + w: ["\u0428", "\u0460", "\u047c", "\u0d70"], + x: ["\u04b2", "\u04fe", "\u04fc", "\u04fd"], + y: ["\u00a5", "\u04b0", "\u04cb"], + z: ["\u01b5", "\u0240"] + } + text.forEach(function(c){ + c = c.toLowerCase(); + var chars = trap[c] || [" "]; + var rand = Math.floor(Math.random() * chars.length); + if (typeof trap[c] !== "undefined") { + result += trap[c][rand]; + } else { + result += c; + } + }); + return result; + +} diff --git a/node_modules/http-server/node_modules/colors/lib/custom/zalgo.js b/node_modules/http-server/node_modules/colors/lib/custom/zalgo.js new file mode 100644 index 0000000..4dc20c8 --- /dev/null +++ b/node_modules/http-server/node_modules/colors/lib/custom/zalgo.js @@ -0,0 +1,104 @@ +// please no +module['exports'] = function zalgo(text, options) { + text = text || " he is here "; + var soul = { + "up" : [ + '̍', '̎', '̄', '̅', + '̿', '̑', '̆', '̐', + '͒', '͗', '͑', '̇', + '̈', '̊', '͂', '̓', + '̈', '͊', '͋', '͌', + '̃', '̂', '̌', '͐', + '̀', '́', '̋', '̏', + '̒', '̓', '̔', '̽', + '̉', 'ͣ', 'ͤ', 'ͥ', + 'ͦ', 'ͧ', 'ͨ', 'ͩ', + 'ͪ', 'ͫ', 'ͬ', 'ͭ', + 'ͮ', 'ͯ', '̾', '͛', + '͆', '̚' + ], + "down" : [ + '̖', '̗', '̘', '̙', + '̜', '̝', '̞', '̟', + '̠', '̤', '̥', '̦', + '̩', '̪', '̫', '̬', + '̭', '̮', '̯', '̰', + '̱', '̲', '̳', '̹', + '̺', '̻', '̼', 'ͅ', + '͇', '͈', '͉', '͍', + '͎', '͓', '͔', '͕', + '͖', '͙', '͚', '̣' + ], + "mid" : [ + '̕', '̛', '̀', '́', + '͘', '̡', '̢', '̧', + '̨', '̴', '̵', '̶', + '͜', '͝', '͞', + '͟', '͠', '͢', '̸', + '̷', '͡', ' ҉' + ] + }, + all = [].concat(soul.up, soul.down, soul.mid), + zalgo = {}; + + function randomNumber(range) { + var r = Math.floor(Math.random() * range); + return r; + } + + function is_char(character) { + var bool = false; + all.filter(function (i) { + bool = (i === character); + }); + return bool; + } + + + function heComes(text, options) { + var result = '', counts, l; + options = options || {}; + options["up"] = options["up"] || true; + options["mid"] = options["mid"] || true; + options["down"] = options["down"] || true; + options["size"] = options["size"] || "maxi"; + text = text.split(''); + for (l in text) { + if (is_char(l)) { + continue; + } + result = result + text[l]; + counts = {"up" : 0, "down" : 0, "mid" : 0}; + switch (options.size) { + case 'mini': + counts.up = randomNumber(8); + counts.min = randomNumber(2); + counts.down = randomNumber(8); + break; + case 'maxi': + counts.up = randomNumber(16) + 3; + counts.min = randomNumber(4) + 1; + counts.down = randomNumber(64) + 3; + break; + default: + counts.up = randomNumber(8) + 1; + counts.mid = randomNumber(6) / 2; + counts.down = randomNumber(8) + 1; + break; + } + + var arr = ["up", "mid", "down"]; + for (var d in arr) { + var index = arr[d]; + for (var i = 0 ; i <= counts[index]; i++) { + if (options[index]) { + result = result + soul[index][randomNumber(soul[index].length)]; + } + } + } + } + return result; + } + // don't summon him + return heComes(text); +} diff --git a/node_modules/http-server/node_modules/colors/lib/extendStringPrototype.js b/node_modules/http-server/node_modules/colors/lib/extendStringPrototype.js new file mode 100644 index 0000000..b6b5b03 --- /dev/null +++ b/node_modules/http-server/node_modules/colors/lib/extendStringPrototype.js @@ -0,0 +1,118 @@ +var colors = require('./colors'), + styles = require('./styles'); + +module['exports'] = function () { + + // + // Extends prototype of native string object to allow for "foo".red syntax + // + var addProperty = function (color, func) { + String.prototype.__defineGetter__(color, func); + }; + + var sequencer = function sequencer (map, str) { + return function () { + var exploded = this.split(""), i = 0; + exploded = exploded.map(map); + return exploded.join(""); + } + }; + + var stylize = function stylize (str, style) { + return styles[style].open + str + styles[style].close; + } + + addProperty('strip', function () { + return colors.strip(this); + }); + + addProperty('stripColors', function () { + return colors.strip(this); + }); + + addProperty("trap", function(){ + return colors.trap(this); + }); + + addProperty("zalgo", function(){ + return colors.zalgo(this); + }); + + addProperty("zebra", function(){ + return colors.zebra(this); + }); + + addProperty("rainbow", function(){ + return colors.rainbow(this); + }); + + addProperty("random", function(){ + return colors.random(this); + }); + + addProperty("america", function(){ + return colors.america(this); + }); + + // + // Iterate through all default styles and colors + // + var x = Object.keys(colors.styles); + x.forEach(function (style) { + addProperty(style, function () { + return stylize(this, style); + }); + }); + + function applyTheme(theme) { + // + // Remark: This is a list of methods that exist + // on String that you should not overwrite. + // + var stringPrototypeBlacklist = [ + '__defineGetter__', '__defineSetter__', '__lookupGetter__', '__lookupSetter__', 'charAt', 'constructor', + 'hasOwnProperty', 'isPrototypeOf', 'propertyIsEnumerable', 'toLocaleString', 'toString', 'valueOf', 'charCodeAt', + 'indexOf', 'lastIndexof', 'length', 'localeCompare', 'match', 'replace', 'search', 'slice', 'split', 'substring', + 'toLocaleLowerCase', 'toLocaleUpperCase', 'toLowerCase', 'toUpperCase', 'trim', 'trimLeft', 'trimRight' + ]; + + Object.keys(theme).forEach(function (prop) { + if (stringPrototypeBlacklist.indexOf(prop) !== -1) { + console.log('warn: '.red + ('String.prototype' + prop).magenta + ' is probably something you don\'t want to override. Ignoring style name'); + } + else { + if (typeof(theme[prop]) === 'string') { + colors[prop] = colors[theme[prop]]; + addProperty(prop, function () { + return colors[theme[prop]](this); + }); + } + else { + addProperty(prop, function () { + var ret = this; + for (var t = 0; t < theme[prop].length; t++) { + ret = exports[theme[prop][t]](ret); + } + return ret; + }); + } + } + }); + } + + colors.setTheme = function (theme) { + if (typeof theme === 'string') { + try { + colors.themes[theme] = require(theme); + applyTheme(colors.themes[theme]); + return colors.themes[theme]; + } catch (err) { + console.log(err); + return err; + } + } else { + applyTheme(theme); + } + }; + +}; \ No newline at end of file diff --git a/node_modules/http-server/node_modules/colors/lib/index.js b/node_modules/http-server/node_modules/colors/lib/index.js new file mode 100644 index 0000000..96d2b84 --- /dev/null +++ b/node_modules/http-server/node_modules/colors/lib/index.js @@ -0,0 +1,12 @@ +var colors = require('./colors'); +module['exports'] = colors; + +// Remark: By default, colors will add style properties to String.prototype +// +// If you don't wish to extend String.prototype you can do this instead and native String will not be touched +// +// var colors = require('colors/safe); +// colors.red("foo") +// +// +var extendStringPrototype = require('./extendStringPrototype')(); \ No newline at end of file diff --git a/node_modules/http-server/node_modules/colors/lib/maps/america.js b/node_modules/http-server/node_modules/colors/lib/maps/america.js new file mode 100644 index 0000000..a07d832 --- /dev/null +++ b/node_modules/http-server/node_modules/colors/lib/maps/america.js @@ -0,0 +1,12 @@ +var colors = require('../colors'); + +module['exports'] = (function() { + return function (letter, i, exploded) { + if(letter === " ") return letter; + switch(i%3) { + case 0: return colors.red(letter); + case 1: return colors.white(letter) + case 2: return colors.blue(letter) + } + } +})(); \ No newline at end of file diff --git a/node_modules/http-server/node_modules/colors/lib/maps/rainbow.js b/node_modules/http-server/node_modules/colors/lib/maps/rainbow.js new file mode 100644 index 0000000..a7ce24e --- /dev/null +++ b/node_modules/http-server/node_modules/colors/lib/maps/rainbow.js @@ -0,0 +1,13 @@ +var colors = require('../colors'); + +module['exports'] = (function () { + var rainbowColors = ['red', 'yellow', 'green', 'blue', 'magenta']; //RoY G BiV + return function (letter, i, exploded) { + if (letter === " ") { + return letter; + } else { + return colors[rainbowColors[i++ % rainbowColors.length]](letter); + } + }; +})(); + diff --git a/node_modules/http-server/node_modules/colors/lib/maps/random.js b/node_modules/http-server/node_modules/colors/lib/maps/random.js new file mode 100644 index 0000000..5cd101f --- /dev/null +++ b/node_modules/http-server/node_modules/colors/lib/maps/random.js @@ -0,0 +1,8 @@ +var colors = require('../colors'); + +module['exports'] = (function () { + var available = ['underline', 'inverse', 'grey', 'yellow', 'red', 'green', 'blue', 'white', 'cyan', 'magenta']; + return function(letter, i, exploded) { + return letter === " " ? letter : colors[available[Math.round(Math.random() * (available.length - 1))]](letter); + }; +})(); \ No newline at end of file diff --git a/node_modules/http-server/node_modules/colors/lib/maps/zebra.js b/node_modules/http-server/node_modules/colors/lib/maps/zebra.js new file mode 100644 index 0000000..bf7dcde --- /dev/null +++ b/node_modules/http-server/node_modules/colors/lib/maps/zebra.js @@ -0,0 +1,5 @@ +var colors = require('../colors'); + +module['exports'] = function (letter, i, exploded) { + return i % 2 === 0 ? letter : colors.inverse(letter); +}; \ No newline at end of file diff --git a/node_modules/http-server/node_modules/colors/lib/styles.js b/node_modules/http-server/node_modules/colors/lib/styles.js new file mode 100644 index 0000000..067d590 --- /dev/null +++ b/node_modules/http-server/node_modules/colors/lib/styles.js @@ -0,0 +1,77 @@ +/* +The MIT License (MIT) + +Copyright (c) Sindre Sorhus (sindresorhus.com) + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. + +*/ + +var styles = {}; +module['exports'] = styles; + +var codes = { + reset: [0, 0], + + bold: [1, 22], + dim: [2, 22], + italic: [3, 23], + underline: [4, 24], + inverse: [7, 27], + hidden: [8, 28], + strikethrough: [9, 29], + + black: [30, 39], + red: [31, 39], + green: [32, 39], + yellow: [33, 39], + blue: [34, 39], + magenta: [35, 39], + cyan: [36, 39], + white: [37, 39], + gray: [90, 39], + grey: [90, 39], + + bgBlack: [40, 49], + bgRed: [41, 49], + bgGreen: [42, 49], + bgYellow: [43, 49], + bgBlue: [44, 49], + bgMagenta: [45, 49], + bgCyan: [46, 49], + bgWhite: [47, 49], + + // legacy styles for colors pre v1.0.0 + blackBG: [40, 49], + redBG: [41, 49], + greenBG: [42, 49], + yellowBG: [43, 49], + blueBG: [44, 49], + magentaBG: [45, 49], + cyanBG: [46, 49], + whiteBG: [47, 49] + +}; + +Object.keys(codes).forEach(function (key) { + var val = codes[key]; + var style = styles[key] = []; + style.open = '\u001b[' + val[0] + 'm'; + style.close = '\u001b[' + val[1] + 'm'; +}); \ No newline at end of file diff --git a/node_modules/http-server/node_modules/colors/lib/system/supports-colors.js b/node_modules/http-server/node_modules/colors/lib/system/supports-colors.js new file mode 100644 index 0000000..3e008aa --- /dev/null +++ b/node_modules/http-server/node_modules/colors/lib/system/supports-colors.js @@ -0,0 +1,61 @@ +/* +The MIT License (MIT) + +Copyright (c) Sindre Sorhus (sindresorhus.com) + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. + +*/ + +var argv = process.argv; + +module.exports = (function () { + if (argv.indexOf('--no-color') !== -1 || + argv.indexOf('--color=false') !== -1) { + return false; + } + + if (argv.indexOf('--color') !== -1 || + argv.indexOf('--color=true') !== -1 || + argv.indexOf('--color=always') !== -1) { + return true; + } + + if (process.stdout && !process.stdout.isTTY) { + return false; + } + + if (process.platform === 'win32') { + return true; + } + + if ('COLORTERM' in process.env) { + return true; + } + + if (process.env.TERM === 'dumb') { + return false; + } + + if (/^screen|^xterm|^vt100|color|ansi|cygwin|linux/i.test(process.env.TERM)) { + return true; + } + + return false; +})(); \ No newline at end of file diff --git a/node_modules/http-server/node_modules/colors/package.json b/node_modules/http-server/node_modules/colors/package.json new file mode 100644 index 0000000..472414f --- /dev/null +++ b/node_modules/http-server/node_modules/colors/package.json @@ -0,0 +1,51 @@ +{ + "name": "colors", + "description": "get colors in your node.js console", + "version": "1.0.3", + "author": { + "name": "Marak Squires" + }, + "homepage": "https://github.com/Marak/colors.js", + "bugs": { + "url": "https://github.com/Marak/colors.js/issues" + }, + "keywords": [ + "ansi", + "terminal", + "colors" + ], + "repository": { + "type": "git", + "url": "http://github.com/Marak/colors.js.git" + }, + "license": "MIT", + "scripts": { + "test": "node tests/basic-test.js && node tests/safe-test.js" + }, + "engines": { + "node": ">=0.1.90" + }, + "main": "./lib/index", + "gitHead": "e9e6557cc0fa26dba1a20b0d45e92de982f4047c", + "_id": "colors@1.0.3", + "_shasum": "0433f44d809680fdeb60ed260f1b0c262e82a40b", + "_from": "colors@1.0.3", + "_npmVersion": "2.0.2", + "_nodeVersion": "0.11.13", + "_npmUser": { + "name": "marak", + "email": "marak.squires@gmail.com" + }, + "maintainers": [ + { + "name": "marak", + "email": "marak.squires@gmail.com" + } + ], + "dist": { + "shasum": "0433f44d809680fdeb60ed260f1b0c262e82a40b", + "tarball": "http://registry.npmjs.org/colors/-/colors-1.0.3.tgz" + }, + "directories": {}, + "_resolved": "https://registry.npmjs.org/colors/-/colors-1.0.3.tgz" +} diff --git a/node_modules/http-server/node_modules/colors/safe.js b/node_modules/http-server/node_modules/colors/safe.js new file mode 100644 index 0000000..a6a1f3a --- /dev/null +++ b/node_modules/http-server/node_modules/colors/safe.js @@ -0,0 +1,9 @@ +// +// Remark: Requiring this file will use the "safe" colors API which will not touch String.prototype +// +// var colors = require('colors/safe); +// colors.red("foo") +// +// +var colors = require('./lib/colors'); +module['exports'] = colors; \ No newline at end of file diff --git a/node_modules/http-server/node_modules/colors/screenshots/colors.png b/node_modules/http-server/node_modules/colors/screenshots/colors.png new file mode 100644 index 0000000000000000000000000000000000000000..7200a623590c35e8b4a8e74a8df49a42998ca9c5 GIT binary patch literal 79787 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

lt>d3ueR)29x+c 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' + s + ''; +} + +var stylesColors = ['white', 'black', 'blue', 'cyan', 'green', 'magenta', 'red', 'yellow']; +var stylesAll = stylesColors.concat(['bold', 'italic', 'underline', 'inverse', 'rainbow']); + +colors.mode = 'console'; +assert.equal(s.bold, '\x1B[1m' + s + '\x1B[22m'); +assert.equal(s.italic, '\x1B[3m' + s + '\x1B[23m'); +assert.equal(s.underline, '\x1B[4m' + s + '\x1B[24m'); +assert.equal(s.strikethrough, '\x1B[9m' + s + '\x1B[29m'); +assert.equal(s.inverse, '\x1B[7m' + s + '\x1B[27m'); + +assert.ok(s.rainbow); + +aE(s, 'white', 37); +aE(s, 'grey', 90); +aE(s, 'black', 30); +aE(s, 'blue', 34); +aE(s, 'cyan', 36); +aE(s, 'green', 32); +aE(s, 'magenta', 35); +aE(s, 'red', 31); +aE(s, 'yellow', 33); + +assert.equal(s, 'string'); + +colors.setTheme({error:'red'}); + +assert.equal(typeof("astring".red),'string'); +assert.equal(typeof("astring".error),'string'); + diff --git a/node_modules/http-server/node_modules/colors/tests/safe-test.js b/node_modules/http-server/node_modules/colors/tests/safe-test.js new file mode 100644 index 0000000..daad4f9 --- /dev/null +++ b/node_modules/http-server/node_modules/colors/tests/safe-test.js @@ -0,0 +1,45 @@ +var assert = require('assert'), + colors = require('../safe'); + +var s = 'string'; + +function a(s, code) { + return '\x1B[' + code.toString() + 'm' + s + '\x1B[39m'; +} + +function aE(s, color, code) { + assert.equal(colors[color](s), a(s, code)); + assert.equal(colors.strip(s), s); +} + +function h(s, color) { + return '' + s + ''; +} + +var stylesColors = ['white', 'black', 'blue', 'cyan', 'green', 'magenta', 'red', 'yellow']; +var stylesAll = stylesColors.concat(['bold', 'italic', 'underline', 'inverse', 'rainbow']); + +colors.mode = 'console'; +assert.equal(colors.bold(s), '\x1B[1m' + s + '\x1B[22m'); +assert.equal(colors.italic(s), '\x1B[3m' + s + '\x1B[23m'); +assert.equal(colors.underline(s), '\x1B[4m' + s + '\x1B[24m'); +assert.equal(colors.strikethrough(s), '\x1B[9m' + s + '\x1B[29m'); +assert.equal(colors.inverse(s), '\x1B[7m' + s + '\x1B[27m'); + +assert.ok(colors.rainbow); + +aE(s, 'white', 37); +aE(s, 'grey', 90); +aE(s, 'black', 30); +aE(s, 'blue', 34); +aE(s, 'cyan', 36); +aE(s, 'green', 32); +aE(s, 'magenta', 35); +aE(s, 'red', 31); +aE(s, 'yellow', 33); + +assert.equal(s, 'string'); +colors.setTheme({error:'red'}); + +assert.equal(typeof(colors.red("astring")), 'string'); +assert.equal(typeof(colors.error("astring")), 'string'); \ No newline at end of file diff --git a/node_modules/http-server/node_modules/colors/themes/generic-logging.js b/node_modules/http-server/node_modules/colors/themes/generic-logging.js new file mode 100644 index 0000000..571972c --- /dev/null +++ b/node_modules/http-server/node_modules/colors/themes/generic-logging.js @@ -0,0 +1,12 @@ +module['exports'] = { + silly: 'rainbow', + input: 'grey', + verbose: 'cyan', + prompt: 'grey', + info: 'green', + data: 'grey', + help: 'cyan', + warn: 'yellow', + debug: 'blue', + error: 'red' +}; \ No newline at end of file diff --git a/node_modules/http-server/node_modules/corser/.npmignore b/node_modules/http-server/node_modules/corser/.npmignore new file mode 100644 index 0000000..ffa2e1f --- /dev/null +++ b/node_modules/http-server/node_modules/corser/.npmignore @@ -0,0 +1,2 @@ +example/ +test/ diff --git a/node_modules/http-server/node_modules/corser/.travis.yml b/node_modules/http-server/node_modules/corser/.travis.yml new file mode 100644 index 0000000..b613251 --- /dev/null +++ b/node_modules/http-server/node_modules/corser/.travis.yml @@ -0,0 +1,5 @@ +language: node_js +node_js: + - 0.4 + - 0.6 + - 0.7 diff --git a/node_modules/http-server/node_modules/corser/LICENSE b/node_modules/http-server/node_modules/corser/LICENSE new file mode 100644 index 0000000..5c4ea09 --- /dev/null +++ b/node_modules/http-server/node_modules/corser/LICENSE @@ -0,0 +1,19 @@ +Copyright (C) 2012 Alexander Grüneberg + +Permission is hereby granted, free of charge, to any person obtaining a copy of +this software and associated documentation files (the "Software"), to deal in +the Software without restriction, including without limitation the rights to +use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies +of the Software, and to permit persons to whom the Software is furnished to do +so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/node_modules/http-server/node_modules/corser/README.md b/node_modules/http-server/node_modules/corser/README.md new file mode 100644 index 0000000..1064750 --- /dev/null +++ b/node_modules/http-server/node_modules/corser/README.md @@ -0,0 +1,196 @@ +Corser +======= + +A highly configurable, middleware compatible implementation of [CORS](http://www.w3.org/TR/cors/) for [Node.js](http://nodejs.org/). + +[![Build Status](https://secure.travis-ci.org/agrueneberg/Corser.png)](http://travis-ci.org/agrueneberg/Corser) + +Changelog +--------- + +### 2.0 (March 22, 2014) + +* Preflight requests are automatically closed. If there is a need for handling `OPTIONS` requests, check the `endPreflightRequests` option. +* The parameters of the callback function in dynamic origin checking are now `(err, matches)` instead of just `(matches)`. + + +Examples +-------- + +### How to use Corser as a middleware in Express + +See `example/express/` for a working example. + + var express, corser, app; + + express = require("express"); + corser = require("corser"); + + app = express(); + + app.use(corser.create()); + + app.get("/", function (req, res) { + res.writeHead(200); + res.end("Nice weather today, huh?"); + }); + + app.listen(1337); + +### How to use Corser as a middleware in Connect + +See `example/connect/` for a working example. + + var connect, corser, app; + + connect = require("connect"); + corser = require("corser"); + + app = connect(); + + app.use(corser.create()); + + app.use(function (req, res) { + res.writeHead(200); + res.end("Nice weather today, huh?"); + }); + + app.listen(1337); + +### How to use Corser with plain `http` + + var http, corser, corserRequestListener; + + http = require("http"); + corser = require("corser"); + + // Create Corser request listener. + corserRequestListener = corser.create(); + + http.createServer(function (req, res) { + // Route req and res through the request listener. + corserRequestListener(req, res, function () { + res.writeHead(200); + res.end("Nice weather today, huh?"); + }); + }).listen(1337); + + +API +--- + +### Creating a Corser request listener + +Creating a Corser request listener that generates the appropriate response headers to enable CORS is as simple as: + + corser.create() + +This is the equivalent of setting a response header of `Access-Control-Allow-Origin: *`. If you want to restrict the origins, or allow more sophisticated request or response headers, you have to pass a configuration object to `corser.create`. + +Corser will automatically end preflight requests for you. A preflight request is a special `OPTIONS` request that the browser sends under certain conditions to negotiate with the server what methods, request headers and response headers are allowed for a CORS request. If you need to use the `OPTIONS` method for other stuff, just set `endPreflightRequests` to `false` and terminate those requests yourself: + + var corserRequestListener; + + corserRequestListener = corser.create({ + endPreflightRequests: false + }); + + corserRequestListener(req, res, function () { + if (req.method === "OPTIONS") { + // End CORS preflight request. + res.writeHead(204); + res.end(); + } else { + // Implement other HTTP methods. + } + }); + + +#### Configuration Object + +A configuration object with the following properties can be passed to `corser.create`. + +##### `origins` + +A case-sensitive whitelist of origins. Unless unbound, if the request comes from an origin that is not in this list, it will not be handled by CORS. + +To allow for dynamic origin checking, a function `(origin, callback)` can be passed instead of an array. `origin` is the Origin header, `callback` is a function `(err, matches)`, where `matches` is a boolean flag that indicates whether the given Origin header matches or not. + +Default: unbound, i.e. every origin is accepted. + +##### `methods` + +An uppercase whitelist of methods. If the request uses a method that is not in this list, it will not be handled by CORS. + +Setting a value here will overwrite the list of default simple methods. To not lose them, concat the methods you want to add with `corser.simpleMethods`: `corser.simpleMethods.concat(["PUT", "DELETE"])`. + +Default: simple methods (`GET`, `HEAD`, `POST`). + +##### `requestHeaders` + +A case-insensitive whitelist of request headers. If the request uses a request header that is not in this list, it will not be handled by CORS. + +Setting a value here will overwrite the list of default simple request headers. To not lose them, concat the request headers you want to add with `corser.simpleRequestHeaders`: `corser.simpleRequestHeaders.concat(["Authorization"])`. + +Default: simple request headers (`Accept`, `Accept-Language`, `Content-Language`, `Content-Type`, `Last-Event-ID`). + +##### `responseHeaders` + +A case-insensitive whitelist of response headers. Any response header that is not in this list will be filtered out by the user-agent (the browser). + +Setting a value here will overwrite the list of default simple response headers. To not lose them, concat the response headers you want to add with `corser.simpleResponseHeaders`: `corser.simpleResponseHeaders.concat(["ETag"])`. + +Default: simple response headers (`Cache-Control`, `Content-Language`, `Content-Type`, `Expires`, `Last-Modified`, `Pragma`). + +##### `supportsCredentials` + +A boolean that indicates if cookie credentials can be transferred as part of a CORS request. Currently, only a few HTML5 elements can benefit from this setting. + +Default: `false`. + +##### `maxAge` + +An integer that indicates the maximum amount of time in seconds that a preflight request is kept in the client-side preflight result cache. + +Default: not set. + +##### `endPreflightRequests` + +A boolean that indicates if CORS preflight requests should be automatically closed. + +Default: `true`. + + +FAQ +--- + +### Ajax call returns `Origin X is not allowed by Access-Control-Allow-Origin` + +Check if the `Origin` header of your request matches one of the origins provided in the `origins` property of the configuration object. If you didn't set any `origins` property, jump to the next question. + + +### Ajax call still returns `Origin X is not allowed by Access-Control-Allow-Origin` + +Your request might use a non-simple method or one or more non-simple headers. According to the specification, the set of simple methods is `GET`, `HEAD`, and `POST`, and the set of simple request headers is `Accept`, `Accept-Language`, `Content-Language`, `Content-Type`, and `Last-Event-ID`. If your request uses **any** other method or header, you have to explicitly list them in the `methods` or `requestHeaders` property of the configuration object. + + +#### Example + +You want to allow requests that use an `X-Requested-With` header. Pass the following configuration object to `corser.create`: + + corser.create({ + requestHeaders: corser.simpleRequestHeaders.concat(["X-Requested-With"]) + }); + + +### Getting a response header returns `Refused to get unsafe header "X"` + +Your browser blocks every non-simple response headers that was not explicitly allowed in the preflight request. The set of simple response headers is `Cache-Control`, `Content-Language`, `Content-Type`, `Expires`, `Last-Modified`, `Pragma`. If you want to access **any** other response header, you have to explicitly list them in the `responseHeaders` property of the configuration object. + +#### Example + +You want to allow clients to read the `ETag` header of a response. Pass the following configuration object to `corser.create`: + + corser.create({ + responseHeaders: corser.simpleResponseHeaders.concat(["ETag"]) + }); diff --git a/node_modules/http-server/node_modules/corser/lib/corser.js b/node_modules/http-server/node_modules/corser/lib/corser.js new file mode 100644 index 0000000..71e8b52 --- /dev/null +++ b/node_modules/http-server/node_modules/corser/lib/corser.js @@ -0,0 +1,226 @@ +/** + * Specification: http://www.w3.org/TR/2012/WD-cors-20120403/ + * W3C Working Draft 3 April 2012 + */ +"use strict"; + +/*jshint node:true */ + +var simpleMethods, simpleRequestHeaders, simpleResponseHeaders, toLowerCase, checkOriginMatch; + +// A method is said to be a simple method if it is a case-sensitive match for one of the following: +Object.defineProperty(exports, "simpleMethods", { + get: function () { + return [ + "GET", + "HEAD", + "POST" + ]; + } +}); +simpleMethods = exports.simpleMethods; + +// A header is said to be a simple header if the header field name is an ASCII case-insensitive match for one of +// the following: +Object.defineProperty(exports, "simpleRequestHeaders", { + get: function () { + return [ + "accept", + "accept-language", + "content-language", + "content-type" + ]; + } +}); +simpleRequestHeaders = exports.simpleRequestHeaders; + +// A header is said to be a simple response header if the header field name is an ASCII case-insensitive +// match for one of the following: +Object.defineProperty(exports, "simpleResponseHeaders", { + get: function () { + return [ + "cache-control", + "content-language", + "content-type", + "expires", + "last-modified", + "pragma" + ]; + } +}); +simpleResponseHeaders = exports.simpleResponseHeaders; + +toLowerCase = function (array) { + return array.map(function (el) { + return el.toLowerCase(); + }); +}; + +checkOriginMatch = function (originHeader, origins, callback) { + if (typeof origins === "function") { + origins(originHeader, function (err, allow) { + callback(err, allow); + }); + } else if (origins.length > 0) { + callback(null, origins.some(function (origin) { + return origin === originHeader; + })); + } else { + // Always matching is acceptable since the list of origins can be unbounded. + callback(null, true); + } +}; + +exports.create = function (options) { + options = options || {}; + options.origins = options.origins || []; + options.methods = options.methods || simpleMethods; + if (options.hasOwnProperty("requestHeaders") === true) { + options.requestHeaders = toLowerCase(options.requestHeaders); + } else { + options.requestHeaders = simpleRequestHeaders; + } + if (options.hasOwnProperty("responseHeaders") === true) { + options.responseHeaders = toLowerCase(options.responseHeaders); + } else { + options.responseHeaders = simpleResponseHeaders; + } + options.maxAge = options.maxAge || null; + options.supportsCredentials = options.supportsCredentials || false; + if (options.hasOwnProperty("endPreflightRequests") === false) { + options.endPreflightRequests = true; + } + return function (req, res, next) { + var methodMatches, headersMatch, requestMethod, requestHeaders, exposedHeaders, endPreflight; + // If the Origin header is not present terminate this set of steps. + if (!req.headers.hasOwnProperty("origin")) { + // The request is outside the scope of the CORS specification. If there is no Origin header, + // it could be a same-origin request. Let's let the user-agent handle this situation. + next(); + } else { + // If the value of the Origin header is not a case-sensitive match for any of the values in + // list of origins, do not set any additional headers and terminate this set of steps. + checkOriginMatch(req.headers.origin, options.origins, function (err, originMatches) { + if (err !== null) { + next(err); + } else { + if (typeof originMatches !== "boolean" || originMatches === false) { + next(); + } else { + // Respond to preflight request. + if (req.method === "OPTIONS") { + endPreflight = function () { + if (options.endPreflightRequests === true) { + res.writeHead(204); + res.end(); + } else { + next(); + } + }; + // If there is no Access-Control-Request-Method header or if parsing failed, do not set + // any additional headers and terminate this set of steps. + if (!req.headers.hasOwnProperty("access-control-request-method")) { + endPreflight(); + } else { + requestMethod = req.headers["access-control-request-method"]; + // If there are no Access-Control-Request-Headers headers let header field-names be the + // empty list. If parsing failed do not set any additional headers and terminate this set + // of steps. + if (req.headers.hasOwnProperty("access-control-request-headers")) { + requestHeaders = toLowerCase(req.headers["access-control-request-headers"].split(/,\s*/)); + } else { + requestHeaders = []; + } + // If method is not a case-sensitive match for any of the values in list of methods do not + // set any additional headers and terminate this set of steps. + methodMatches = options.methods.indexOf(requestMethod) !== -1; + if (methodMatches === false) { + endPreflight(); + } else { + // If any of the header field-names is not a ASCII case-insensitive match for any of + // the values in list of headers do not set any additional headers and terminate this + // set of steps. + headersMatch = requestHeaders.every(function (requestHeader) { + // Browsers automatically add Origin to Access-Control-Request-Headers. However, + // Origin is not one of the simple request headers. Therefore, the header is + // accepted even if it is not in the list of request headers because CORS would + // not work without it. + if (requestHeader === "origin") { + return true; + } else { + if (options.requestHeaders.indexOf(requestHeader) !== -1) { + return true; + } else { + return false; + } + } + }); + if (headersMatch === false) { + endPreflight(); + } else { + if (options.supportsCredentials === true) { + // If the resource supports credentials add a single Access-Control-Allow-Origin + // header, with the value of the Origin header as value, and add a single + // Access-Control-Allow-Credentials header with the literal string "true" + // as value. + res.setHeader("Access-Control-Allow-Origin", req.headers.origin); + res.setHeader("Access-Control-Allow-Credentials", "true"); + } else { + // Otherwise, add a single Access-Control-Allow-Origin header, with either the + // value of the Origin header or the string "*" as value. + if (options.origins.length > 0 || typeof options.origins === "function") { + res.setHeader("Access-Control-Allow-Origin", req.headers.origin); + } else { + res.setHeader("Access-Control-Allow-Origin", "*"); + } + } + // Optionally add a single Access-Control-Max-Age header with as value the amount + // of seconds the user agent is allowed to cache the result of the request. + if (options.maxAge !== null) { + res.setHeader("Access-Control-Max-Age", options.maxAge); + } + // Add one or more Access-Control-Allow-Methods headers consisting of (a subset + // of) the list of methods. + res.setHeader("Access-Control-Allow-Methods", options.methods.join(",")); + // Add one or more Access-Control-Allow-Headers headers consisting of (a subset + // of) the list of headers. + res.setHeader("Access-Control-Allow-Headers", options.requestHeaders.join(",")); + // And out. + endPreflight(); + } + } + } + } else { + if (options.supportsCredentials === true) { + // If the resource supports credentials add a single Access-Control-Allow-Origin header, + // with the value of the Origin header as value, and add a single + // Access-Control-Allow-Credentials header with the literal string "true" as value. + res.setHeader("Access-Control-Allow-Origin", req.headers.origin); + res.setHeader("Access-Control-Allow-Credentials", "true"); + } else { + // Otherwise, add a single Access-Control-Allow-Origin header, with either the value of + // the Origin header or the literal string "*" as value. + // If the list of origins is empty, use "*" as value. + if (options.origins.length > 0 || typeof options.origins === "function") { + res.setHeader("Access-Control-Allow-Origin", req.headers.origin); + } else { + res.setHeader("Access-Control-Allow-Origin", "*"); + } + } + // If the list of exposed headers is not empty add one or more Access-Control-Expose-Headers + // headers, with as values the header field names given in the list of exposed headers. + exposedHeaders = options.responseHeaders.filter(function (optionsResponseHeader) { + return simpleResponseHeaders.indexOf(optionsResponseHeader) === -1; + }); + if (exposedHeaders.length > 0) { + res.setHeader("Access-Control-Expose-Headers", exposedHeaders.join(",")); + } + // And out. + next(); + } + } + } + }); + } + }; +}; diff --git a/node_modules/http-server/node_modules/corser/package.json b/node_modules/http-server/node_modules/corser/package.json new file mode 100644 index 0000000..3fd545b --- /dev/null +++ b/node_modules/http-server/node_modules/corser/package.json @@ -0,0 +1,56 @@ +{ + "name": "corser", + "version": "2.0.0", + "description": "A highly configurable, middleware compatible implementation of CORS.", + "keywords": [ + "cors", + "cross-origin resource sharing", + "connect", + "express", + "middleware" + ], + "bugs": { + "url": "https://github.com/agrueneberg/Corser/issues" + }, + "license": "MIT", + "author": { + "name": "Alexander Grüneberg", + "email": "alexander.grueneberg@googlemail.com" + }, + "main": "./lib/corser.js", + "repository": { + "type": "git", + "url": "https://github.com/agrueneberg/Corser.git" + }, + "scripts": { + "test": "mocha" + }, + "devDependencies": { + "mocha": "1.3.x", + "expect.js": "0.1.x" + }, + "engines": { + "node": ">= 0.4.0" + }, + "homepage": "https://github.com/agrueneberg/Corser", + "_id": "corser@2.0.0", + "dist": { + "shasum": "aea3c5186d0dbb99d23abab15d08514eb87e3840", + "tarball": "http://registry.npmjs.org/corser/-/corser-2.0.0.tgz" + }, + "_from": "corser@>=2.0.0 <2.1.0", + "_npmVersion": "1.4.3", + "_npmUser": { + "name": "agrueneberg", + "email": "alexander.grueneberg@googlemail.com" + }, + "maintainers": [ + { + "name": "agrueneberg", + "email": "alexander.grueneberg@googlemail.com" + } + ], + "directories": {}, + "_shasum": "aea3c5186d0dbb99d23abab15d08514eb87e3840", + "_resolved": "https://registry.npmjs.org/corser/-/corser-2.0.0.tgz" +} diff --git a/node_modules/http-server/node_modules/ecstatic/.npmignore b/node_modules/http-server/node_modules/ecstatic/.npmignore new file mode 100644 index 0000000..7cf3427 --- /dev/null +++ b/node_modules/http-server/node_modules/ecstatic/.npmignore @@ -0,0 +1,19 @@ +lib-cov +*.seed +*.log +*.csv +*.dat +*.out +*.pid +*.gz + +pids +logs +results + +node_modules +npm-debug.log + +# Unicode filenames cause jenkins to barf when cleaning up workspaces +# See: https://github.com/jfhbrook/node-ecstatic/issues/128 +test diff --git a/node_modules/http-server/node_modules/ecstatic/.travis.yml b/node_modules/http-server/node_modules/ecstatic/.travis.yml new file mode 100644 index 0000000..1b2e7df --- /dev/null +++ b/node_modules/http-server/node_modules/ecstatic/.travis.yml @@ -0,0 +1,5 @@ +language: node_js +node_js: + - iojs + - 0.12 + - 0.10 diff --git a/node_modules/http-server/node_modules/ecstatic/CONTRIBUTING.md b/node_modules/http-server/node_modules/ecstatic/CONTRIBUTING.md new file mode 100644 index 0000000..caa67f1 --- /dev/null +++ b/node_modules/http-server/node_modules/ecstatic/CONTRIBUTING.md @@ -0,0 +1,62 @@ +# Contributing Guidelines + +## Code of Conduct + +This is a pretty small project and it hasn't been a problem yet. However, to +be clear: Everyone needs to be nice to each other. Sexist/racist/etc behavior +won't be tolerated. + +Glad we cleared that up. + +## Branching + +Before working on your fix/feature/whatever, you should create a new branch to +work on. Do something like: + +```sh +$ git checkout -b 'my-sweet-new-pull-request' +``` + +## Please Please Please Start With A Test + +ecstatic has some pretty gnarly branching/logic underneath. Tests are extremely +important because they (a) prove that your feature/fix works, and (b) avoid +regressions in the future. Even if your patch is problematic enough to not be +merged, a test will still be very helpful for confirming any future fix. + +I won't reject your patch outright if it's missing new tests, but it sure +helps! + +## Code Style + +Ecstatic's code base follows a relatively consistent style. The closer your +patch blends in with the status quo, the better. + +A few PROTIPS off the top of my head: + +1. Variables don't need to all be declared at the top, BUT variable *blocks* +should do the whole one-var, tons-of-commas thing. +2. Look at how spacing is done around conditionals and functions. Do it like +that. +3. `else`'s and similar should be on the line *after* the preceding bracket. + +We can refine this as the need arises. + +## Pull Request + +Make a pull request against master with your new branch. Explain briefly what +the patch does to the code, along with any concerns. + +(If you don't have a description, it's hard for me to put the changes in +context. That makes it more difficult for me to merge!) + +## Keep It Moving + +I don't always notice new PRs, and sometimes I will forget to follow up on +them. If this happens to you, you can bump the PR thread or find me on +IRC or twitter. + +## LAST RULE + +HAVE FUN :v :v + diff --git a/node_modules/http-server/node_modules/ecstatic/ChangeLog.md b/node_modules/http-server/node_modules/ecstatic/ChangeLog.md new file mode 100644 index 0000000..da6a393 --- /dev/null +++ b/node_modules/http-server/node_modules/ecstatic/ChangeLog.md @@ -0,0 +1,32 @@ +2015/05/09 Version 0.7.6 +- Fix double encoding in directory listings + +2015/05/07 Version 0.7.5 +- Fix HTML reflection vulnerability in certain error handlers + +2015/04/17 Version 0.7.4 +- Fix sort ordering in directory listings + +2015/04/13 Version 0.7.3 +- Close fstream if/when res closes, fixes potential fd leak + +2015/04/05 Version 0.7.2 +- Correctly handle req.statusCode in recursive calls; do not inherit upstream res.statusCode + +2015/03/27 Version 0.7.1 +- Treat ENOTDIR as 404 (same as ENOENT) + +2015/03/18 Version 0.7.0 +- Add support for specifying default content-type (as an alternative to application/octet-stream) +- Use url-join for autoIndex route, fixes windows problems + +2015/03/01 Version 0.6.1 +- Fix handleError fall-through with directory listings + +2015/02/16 Version 0.6.0 +- Fix for pathname decoding in windows +- Fix for hrefs in directory listings +- Add ability to turn off setting of Server header +- Remove extraneous call to res.end (handled by stream pipe) +- Remove tests from npm package due to jenkins bug +- Start a ChangeLog.md diff --git a/node_modules/http-server/node_modules/ecstatic/LICENSE.txt b/node_modules/http-server/node_modules/ecstatic/LICENSE.txt new file mode 100644 index 0000000..a90fd5e --- /dev/null +++ b/node_modules/http-server/node_modules/ecstatic/LICENSE.txt @@ -0,0 +1,22 @@ +The MIT License (MIT) + +Copyright (c) 2013 Joshua Holbrook + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. + diff --git a/node_modules/http-server/node_modules/ecstatic/README.md b/node_modules/http-server/node_modules/ecstatic/README.md new file mode 100644 index 0000000..1a8057c --- /dev/null +++ b/node_modules/http-server/node_modules/ecstatic/README.md @@ -0,0 +1,178 @@ +# Ecstatic [![build status](https://secure.travis-ci.org/jfhbrook/node-ecstatic.png)](http://travis-ci.org/jfhbrook/node-ecstatic) + +![](http://imgur.com/vhub5.png) + +A simple static file server middleware. Use it with a raw http server, +express/connect, or flatiron/union! + +# Examples: + +## express 3.0.x + +``` js +var http = require('http'); +var express = require('express'); +var ecstatic = require('ecstatic'); + +var app = express(); +app.use(ecstatic({ root: __dirname + '/public' })); +http.createServer(app).listen(8080); + +console.log('Listening on :8080'); +``` + +## union + +``` js +var union = require('union'); +var ecstatic = require('ecstatic'); + +union.createServer({ + before: [ + ecstatic({ root: __dirname + '/public' }), + ] +}).listen(8080); + +console.log('Listening on :8080'); +``` + +## stock http server + +``` js +var http = require('http'); +var ecstatic = require('ecstatic'); + +http.createServer( + ecstatic({ root: __dirname + '/public' }) +).listen(8080); + +console.log('Listening on :8080'); +``` +### fall through +To allow fall through to your custom routes: + +```js +ecstatic({ root: __dirname + '/public', handleError: false }) +``` + +# API: + +## ecstatic(opts); + +Pass ecstatic an options hash, and it will return your middleware! + +```js +var opts = { + root : __dirname + '/public', + baseDir : '/', + cache : 3600, + showDir : true, + autoIndex : false, + humanReadable : true, + si : false, + defaultExt : 'html', + gzip : false, + serverHeader : true + } +``` + +If `opts` is a string, the string is assigned to the root folder and all other +options are set to their defaults. + +### `opts.root` + +`opts.root` is the directory you want to serve up. + +### `opts.baseDir` + +`opts.baseDir` is `/` by default, but can be changed to allow your static files +to be served off a specific route. For example, if `opts.baseDir === "blog"` +and `opts.root = "./public"`, requests for `localhost:8080/blog/index.html` will +resolve to `./public/index.html`. + +### `opts.cache` + +Customize cache control with `opts.cache` , if it is a number then it will set max-age in seconds. +Other wise it will pass through directly to cache-control. Time defaults to 3600 s (ie, 1 hour). + +### `opts.showDir` + +Turn **off** directory listings with `opts.showDir === false`. Defaults to **true**. + +### `opts.humanReadable` + +If showDir is enabled, add human-readable file sizes. Defaults to **true**. +Aliases are `humanreadable` and `human-readable`. + +### `opts.si` + +If showDir and humanReadable are enabled, print file sizes with base 1000 instead +of base 1024. Name is inferred from cli options for `ls`. Aliased to `index`, the +equivalent option in Apache. + +### `opts.autoIndex` + +Serve `/path/index.html` when `/path/` is requested. +Turn **off** autoIndexing with `opts.autoIndex === false`. Defaults to **true**. + +### `opts.defaultExt` + +Turn on default file extensions with `opts.defaultExt`. If `opts.defaultExt` is +true, it will default to `html`. For example if you want a request to `/a-file` +to resolve to `./public/a-file.html`, set this to `true`. If you want +`/a-file` to resolve to `./public/a-file.json` instead, set `opts.defaultExt` to +`json`. + +### `opts.gzip` + +Set `opts.gzip === true` in order to turn on "gzip mode," wherein ecstatic will +serve `./public/some-file.js.gz` in place of `./public/some-file.js` when the +gzipped version exists and ecstatic determines that the behavior is appropriate. + +### `opts.serverHeader` + +Set `opts.serverHeader` to false in order to turn off setting the `Server` header +on all responses served by ecstatic. + +### `opts.contentType` + +Set `opts.contentType` in order to change default Content-Type header value. +Defaults to **application/octet-stream**. + +### `opts.handleError` + +Turn **off** handleErrors to allow fall-through with `opts.handleError === false`, Defaults to **true**. + +## middleware(req, res, next); + +This works more or less as you'd expect. + +### ecstatic.showDir(folder); + +This returns another middleware which will attempt to show a directory view. Turning on auto-indexing is roughly equivalent to adding this middleware after an ecstatic middleware with autoindexing disabled. + +### `ecstatic` command + +to start a standalone static http server, +run `npm install -g ecstatic` and then run `ecstatic [dir?] [options] --port PORT` +all options work as above, passed in [optimist](https://github.com/substack/node-optimist) style. +`port` defaults to `8000`. If a `dir` or `--root dir` argument is not passed, ecsatic will +serve the current dir. + +# Tests: + +Ecstatic has a fairly extensive test suite. You can run it with: + +```sh +$ npm test +``` + +# Contribute: + +Without outside contributions, ecstatic would wither and die! Before +contributing, take a quick look at the contributing guidelines in +./CONTRIBUTING.md . They're relatively painless, I promise. + +# License: + +MIT. diff --git a/node_modules/http-server/node_modules/ecstatic/example/core.js b/node_modules/http-server/node_modules/ecstatic/example/core.js new file mode 100644 index 0000000..a50c667 --- /dev/null +++ b/node_modules/http-server/node_modules/ecstatic/example/core.js @@ -0,0 +1,10 @@ +var http = require('http'); +var ecstatic = require('../lib/ecstatic')({ + root: __dirname + '/public', + showDir: true, + autoIndex: true +}); + +http.createServer(ecstatic).listen(8080); + +console.log('Listening on :8080'); diff --git a/node_modules/http-server/node_modules/ecstatic/example/express.js b/node_modules/http-server/node_modules/ecstatic/example/express.js new file mode 100644 index 0000000..1d29c0d --- /dev/null +++ b/node_modules/http-server/node_modules/ecstatic/example/express.js @@ -0,0 +1,12 @@ +var express = require('express'); +var ecstatic = require('../lib/ecstatic'); +var http = require('http'); + +var app = express(); +app.use(ecstatic({ + root: __dirname + '/public', + showdir : true +})); +http.createServer(app).listen(8080); + +console.log('Listening on :8080'); diff --git a/node_modules/http-server/node_modules/ecstatic/example/public/beep/index.html b/node_modules/http-server/node_modules/ecstatic/example/public/beep/index.html new file mode 100644 index 0000000..3311713 --- /dev/null +++ b/node_modules/http-server/node_modules/ecstatic/example/public/beep/index.html @@ -0,0 +1 @@ +boop! diff --git a/node_modules/http-server/node_modules/ecstatic/example/public/hello.txt b/node_modules/http-server/node_modules/ecstatic/example/public/hello.txt new file mode 100644 index 0000000..cd08755 --- /dev/null +++ b/node_modules/http-server/node_modules/ecstatic/example/public/hello.txt @@ -0,0 +1 @@ +Hello world! diff --git a/node_modules/http-server/node_modules/ecstatic/example/public/subdir/world.txt b/node_modules/http-server/node_modules/ecstatic/example/public/subdir/world.txt new file mode 100644 index 0000000..abe0dc4 --- /dev/null +++ b/node_modules/http-server/node_modules/ecstatic/example/public/subdir/world.txt @@ -0,0 +1 @@ +hello cruel world! diff --git a/node_modules/http-server/node_modules/ecstatic/example/public/turtle.png b/node_modules/http-server/node_modules/ecstatic/example/public/turtle.png new file mode 100644 index 0000000000000000000000000000000000000000..721a796bb09004970b6de769a74da5a612781cbc GIT binary patch literal 195848 zcmYJa1yq#Z_dPsx$Iu-ENGUKNDJ2f6fFLPI4JjScDIzrpC=ycABHax`4IN5%mvn>F z`|$Dmd;ct0EM_s!+&K4~efHir{H2;A5k4J02m~ThR)T4QKo~3_5V|KWHteDKWI$&N4>y{v~KcxZm%3I-8@WPEI=L}9(*B2KFJ%9ui5kr&6ITfbj26y_)yJt* zDo@12W2X8L$`eFG^mgYd^o)++$H@bGGeB!a&>qjEdR$Wmm?H&tJc626)B1Fgzo(?K zb=LB#e1+^}c!Cx`HSA00UVy~5R=;>zv|-*l?bXGq>VE7}p^QzIH;0x|)JBzFh?QA9 z=c~JRsXzZCFJ}e`1Z|+pM068CG@tbHtKN@{f}{8)S|(Tgxa^}qddIpP80XpM81GSK zNZ2*yBz7ad8`h@R->t?I6n)`bV-iP!&LJw`uCGSOs@&$>K|1wuIB}{3T5TX0sR_2B z|Eik}>;+c@S?CXt2E}unK$PmYmj&)UDWs3oB%w!@1P1~!uN%}D6%Y(PnQMJXl714; zO6opJyxXRd7}|9oxht$lga$~j82gL6%#jDyL4H>uN)-PMlh3(x8YCZ1E`eUTKb+CQ z>Ap2DbyWFaa=1{RfO`4RGvZxy`_kg{c1fOYy0oFo?WNsxZ5gq^8yKG;s{dix)BnPR z%NgMY0bqqWYlV?MCeY`y8Mf6M!*5}cvA29700MuQ@C3%_e`k3*}u z(q&F|pZ{$O0Ws6Ti^Hm<{>|7zUW!HKs{)MSLwmABn)_?RaFReAW-s=m6BqCn&2xi) zp_LhgPny#Uf#4x=kiwt|LT08{J`rX}WYEdx9KBuFNdw&O)BQQ)Qc2Q4%hXbaWj_$W zswG@p>S9{SHE@h7(okIdX4(!>ABxCf{P)4XWD88VwTZ#XSj}kl4TgMaeutg4C;l+8 zCdY;Dkq409y)+ek@n`?dC^IhP2QDdC8S|%Ua^4u$H;^iUqzKmMz*8jMqK656^`$}b zf%tZiaiBI*W!L9BEZFIjqR=8c633V11*qPKj4biu_A15o_Ok5pVPd7&A&gGgp@005 z0a9mM6Nv8nap&YHp+O)vdZxpT$lrm!v0#13b|OIh8d980H0r0D5iUGl$Vvny>IM(LG&VrDE;pe9j8>*!qygsZZF{Jvx39 z|BI^fWwKcFMPsBYmWNoNf-FJd)yir%`yX#fOhF-Kd~6ceAPU0-K^ixZ9`-{t|F(Jg z2c}rhJ8ohvNL115LlPum<~TY-h2rM=j)=prt&cg>z_H^Pwg`N)DZB{xJ zrifFmfWAFq%FqGDv-UBpHqa+XF$fmg-a56B+QqDh_`VQ`rkAI*wh`CNlWF-@BAn0Mk2^V+wl`$;v&kTr=}K9 z6;|FYV(7prJExy9c`#m`%u$RB^#vLupshb>@?fb>XXCum)tS!YI8J{V21)CLSwmi< z_fH!re3|gqWE3!82v`r1Fumd2>57Pb7Si+Du6qL9jizJLsRT;|V!&K}Nt@R~7N*vA zc3}NECb9d5M5dqdd^Wi6-L>}D`9>S^)S0UG{d0^IdqfhMZSuc!+xwn?{)x<<{vyNT zPIp>mr0a0->s-oAvDDGF zdxC6BYxIjd^^?g5C=;xwH4ZUx6wi)(Wx34dyXTukDD3u)x_Q!$&6qFE*dZ@;;9ry? zOy~s~kmbK=;JtP&E;Nwecvnn$!ct3^(s%3hYIakCVL&JjuMJuft;3|PZ6nisqHp^4Ed~Q#y`Tv8K94aR4#lknLc+f^BS2J z8ro?WTj-s4J+#Bs1@EA(n>fZLa$I`{dPo7)XJj zB8$BWY$2#_9R40rjamsB)#6pq)co%7h8|xhc1?>d!vL#^Jt?VE;vMIunK@OpmJ_&4 zuP=}!h$ITyqR_XqLJPJbd5AR|;D7C`Aax*HsLCTMmq8jWbwXNld$r(6pc^(r;)^+( z%Ow22BNd7tBe|r(yU>Wv_H3a2sRnn^o3nhmxJUOXJPpAmHIA)75bh|?CB(%0`#6p2!oz6k6w4p4PaQ!}49 zMJ0;Dt-t-Rvcx<)&XH$V_i@8mCv#AuAz|k2Kc%rgUT+OP@p751)k}W0WX>enjgh5rIB4J)^yv4v zLVMYNhbF&};ejj&mdz{T*y>6t01jI!^8Y2qAY#t@`8gRY^w;{&(R_?5TU~_G;pO5+ zx@kLhGW{#UPY?ydQU*^H&9S@IZeeyq2>=fljVJQqV80_Uca|E{I$n%Bv3FG$J zI(NT?X0ym(vX#ThPlq>u^?$u0lt5EAqlfUdThi84H(+k!Hu6A9BD*;tnnetS#V;ogz*y15&HVr+dPbrBRnVN==r9k$M$reRx;S#xG(-j^4G2( z^`V{7!6WkADF2I)WkeP}DF|GLB1Qg=!1*Ke;qx%=!IpaMSbWn^O{ zYY*)ntqS>^KcK*mysxP4C!LmSKg!+PbfkBL(`j&M4@TR?ei(>=nv@OItdq< zUqN6mkSE=D^@Zlf)7z_29?M#T53($QeQP`<$2jky1tg{zi|5`GL(qoe~v>U52a-QD0^LsEL$ z;Pr_c6~BRkj{8|g==DcRHUO$wCQJs3DZm`C(r^p`m>hd9bA=G$Ox0Q~L(#1Ff9uR+ z_V1=n_d_)|`G^B(KECj^c7}*z@<@Z5=~x6Ms2u?%hyTBERo{=R@xj&vM#(EId8Mah zWOg=--JcV!eM0PJba)PzI9pZ^eM%bTBFWXn{v5WN#H`8O^^2)TevDU42I+jPfP5{l6Vk3CF};^>~hxOn!v@vM%`bG67CC@qP!jarQtsXZ+^u zoX>eVi&QG@@jBG;S7!G*NB~2R!ib66IoL_^*S->fL)HKfoC?w1R$l-*?BP06FZz*{LEl
v{jzCTP;BFiKe=bnX#~P!iF0RM7=$>vGtyozq@j`e+wtNrP*~j#WLZhZ(>6)%*W-9nSV?Qa$m`$2kfx%^K zm8bzPIYi@dXSQaB4cD4JD`pVuFCG~X`q~TRi^JGkJy1aRD7$JG=>Sl9q zVhpD&F%!b5W9o?6|9e1*(e?3ufYs!1Mq?~LX=d-dl+VS=!O{!Q)3NT{iM}(z zZ2q%Sd?GXWP7C_m$JosnYQ+1;aG^kq$*G&^$(Kbgn=(dQ`q*yR43PfoYgfsoX14I2 zo?4aP!R#*tXxKN;$q%mZu!0pO9qxiK3SU=z)NZ+MLwFq%?+TZbdlGsM(2#SLft}xn z*d$$*!JRR#_`f&z5l(Rf)2(xJ-nH#0t%IdJwTtR zwx9UKpZ6leVXi)h$#!pN%233b)X3ni7oHP_6SGrQ*uiglN2ks)-30GzjH`1Yzdu^i zo*RtKsc{pwPB=~t(DfBflEVKQJ2D)YY9J^~>A4C1Fa+y~_EqSCH1jyQrc<*R*cy|8 z1Snc%^uw+GYNz~cm`uY zDk3>RsSWOH-OBsS4w7ZH8c9Y|ZZ zlv|e`rh9Nw5H25k<1w&qF`8_j?Oyw|Vdf4by&85sBCo!fqMn?G{JLTJiUDx}SG&yM zfs}iC3_TA!?|%pZwEa1H*#}$l29FjGL_wS*vaGEVd%TP$xJZ=A& zGFr^2nk>x5%Nq&gWClskVQEWqr$reLEx^J(AN@{p*O5=q>8-`%9l zl^AFE0f$iC46@9XK7X9?61Qa{a$)0%nf}6klwV93Z-i3v63V|T-ql?iFYVhH$~6J7ahzsF3Nji91t-B+Uelck=N+u%9HLM^w!#lN_H zqY8o~I0W_;cdjldOMeK)%j*D@e;EVpjCPJ5kl|FS{NTWNkptd;q&Jz%wFZ#|wT*p| z#va6|B{Sd^#^aS6hZjgQM&SGip@eAnupJRNXNCL?e|PYVot@`H)MuX#8rRjys%u-ZQb?YZ6aFyGHmDzy_#-o0 z9|B=Xyi= z__;>}C>kJ(OP5fSOB}(ji=})L8=P1xHikHFx|k2C2f6Xk2uka~`=~OSLl8!(*{WHD zgH;7y?Kq840mS|lu+nkMWM|%z#F8K}Nj$vSyMy*w=OL-uIR_V4my46E=){9*+id>V zS_h*OWtXWq5p=p5nW}a8F^!R7h8T_5?BnhA@`Fh1x_vIxWw;)zX0V_LUpSl(sYBeb z`ktV6|7_;DZ}Z4ndE`u#Q12zgKRr5dNKwG)gr`xwuI`~>`3G?VDgnn|kTWZDidjbF z*-u}Bi*l2^BTvXq)n-Hy`yBpuej?FBD2hQ`L*f36njyk`2@Uawk55Ku?~eK^9Y%7y z;Q@aS6;V>B6vqCyUgjfIi&XIb2}-j<&76GF`;~oD7E<=DwoK@@#;otyl6kiS9oVyM zDxEk6e$TQJZhD%lZnl%%v4R&X;karw^tyU6u#qQZgxGjk=w8toY@Uj8r~`n;?Z3YD zX-YmMU-m;(uvy_yT9JZJo*Y zd?}P&v0|qfH|+!FEFPW)$q2fEJnu5A_-`w23j8vY9+|l{4l;v0}_H062uVI@gW@U$n4TEz#k)hA!+M2gi=!mkJi%Z=pC0a6)2_MsL z<5V{AWvTVuc)a~g;^TKbU-Hzg3U10HV?s{jny~tZT`K=~G&M_It2Tn8;+@18Vy)kk zR_|P~n}{MwTCU|P)(4*ZH37x$I3O6O!ur;?6iZJ{5Je&S+DIcpzW=@=r-T>9Xo=z_ zQ@fy*=EbdWz(bTQettV8s#Yr-*;);7Y?4o%uHs#-2hxwaoLn7#EG~-Xy}wLrDVKQV z&v@uZW}Ra5qtW~q$wHxpJ8}!I$)%^g3xcR?%{>$kFg~v^CB;QUyN(KKPkC1i9%8Uf z;4aaaJgnBD16M)jgcJ`CkC0v>&gNBaASLS^Rx!q8b%0E`1>xF!y#>MC6E_xKA##&2 z==w1{HH(XbH5VOI7WU1w;Mg5~6Rq*XP3{x#fgHA#j))j7yJ96t&O(yb=8OMTWzD6D z5+znLRtkLZ$rauQdF7{#(##djcWKJ6^2)8J%Ab9ir8Ya3pPyisy-y%u;vr`f-dV*o z90WA9F0Z}otRtSI1yk%W=2B744CYu#*g8WxE2pCj|tMTSe4n9XvG6V-HV3F7@ zWMBY{k?GR)N0=B zW>Xl9ZifOkjZiAzz}_Bv{X@LE=!nNC1PLcn6x-c8Emu=#SuPMp8as$=Df>kFIfy=} zp=^LasN0eG4P60wndtSNH4Qyh8i)yvZoFiOll;LVS16A*N9Wq%{n1db%E9|dpu#US z;#{7=)UcR3BfaF1PBrk!loQ|-R9 zv&WjpF?x);ru!Pnqa9I8#uBq}+XSBJsQ~NocUvHvCW)Q>?Q+MARQOXIfw413)=UD>bblDx>Nj8@#!<`r^2nfCz~`@<E(PsDDJNHu&N_S#o|Tg60Uig8~eq!Vi2Fh&1vI0~*<*y}BEB>DxsN zVk(CRzU=QO*FzlRD)f7u6=v~ba3Ra6_>=}}Yvw6wQu=RWB)qU{QzMSMtVVGFz)eOe%cTmru1Y-wTtxo^H#spz{s+_=oYlT-F3Ug7w{L}^3(ZTDwiw} zsh~U4yEXBm=hS<5$LZo5*T>HvtBDmx&~;rfP6IWfh)(pAFUcKcEu#TZdf!K4i%sE) zMVGqC=6Ad^HI7zS<3)wWHJ_43a+l6GNilPVvc)u$97aV*ijFQpBmehC9(hegX=3jxDMTuT*+?o2Y9IY!Yn*Q(T2ul-m5=F zTFSA>`O5=Dz#1hsA%ka!tNY$;kB?)^Kmg~9u-Q`dhv*;a;QqY2!Msq&Z<6G6wsh6B z7cFQQy*J-V8ZRIuv#uohHa3zs(E(2DfoPAVGBzJWN+$YFb>DQZmNZA$(b*tqjrSCI zy0E_fmm=QRV+6XE4nRH!4a7BO)e~6bYDIsJ>NF(~A$*972sl!%_t-NG(v4;!&LdBl ziRxR)FHHf%3G1e&FmL45Q!ag_9cs7v#&6E(iT;dp0Jy>V$b{}dSU}t;;2OqG zSrBVr8iL}U)Jz;8V46ttrB=$zLex+u>s3t^7lYJ9QE{VQKe$vFSRn1COS!-EU9IM? zPF~SHwqsJAGXFm>fFA3FQHuj(p2yaEQPG5BzQ!18W1pyRRc|S`4dI0RlIINS*K7RX z=x#KV7^tP1*R&xmIF`NexLzAroC~|7Rs6cWHR?AV0O#dpzYKew;%SXm*$yaTv)=7Q zzDKP%v8sNj`}q{1Djc$qux=aVvq>L*MX8;~!yr2~d7IptS7mb9DStmuFFP+nzdN^o z^u0#WQ!@S5Vp7QMZHvv_ttCGAgBNR()_n-wzOr($giK66Srt$7~9}h z_f(l0L7!lX93Ha4%L_cEhQ-WC&)uRLC6(gIJ>8O)Ye9ft7To@Q;^t6)_S*mI zRJSxEBNzc4iIfmYS#Za9a=AEUFVuZPc3n#Bx##)wBh6rlAHF9Glso*gFaB4fe56ZD z@xs2ZQk+|=2 zs*v%UUrd`(M031-k{j6vG)vTH;v&$S+RG)KxRs=Xs4XoM*@E$+qzX^xB>KV5h?}c3 z=<4DP)|1QDqcro_htwMpe9_#u;%y~Pb5d8}UfrK(O6HSuj>#eA&)Mx_+4@kx_cdqQH|fnYWJg@OXx; zzYt9VgQ6mEwX`=|q2=a#O8U^w+#K{gv*Tz;adiEpk+5)&N6;vtW2C#2LG~MmivZL2 z(Djd8#&SSWmW3&R_{A8AAE+iPL|@Z4tMmljT-5;`l-@W0lX{x5pSpSW4es~-zdaxd z?z&gFb`kr(srfV{eJkcN8HyaUNEQ331j{BrKo_y!7x*(?)E8kK(7AG`RcM;C8qpej zIruSRKoq65N0O(x2fO=J`W}kfLF1!}wGDg{xOW_MIZ0nb5VTR6!4rGbbk$9bqu5R@ z?eF0^7fuNY*V_*>=~M-6Pl=sCKQxsU8k_W6wMAQuWcB^+P0y+KrRf-tCEx3g&y>8l zn8Bxku}CHG6v1^wYO2trj4jNKVN7Ga)teu(7tJ(D^FBg#fxlmPlI|PZ?w?agc^8e4 z#K#BR5iW$V4m<=J0Exp?_@zOBQK!}F%LC{0FficDz@S|!FX2pg!OwHwNvr`p8=GNp z!2A&$su+!ZA!8RC6-#OAqmS!Tjsj(Y@&L#VkVRYb6`WDu9xp|z%d8Cm97p5RV4kQ8 zkmn+QKsauU5#;w2O~vDJ5$?n1Ip={45n*naAK@(sx}ekdl7tAeSgwNmfm& zKOxkCQ^=&H4RT}8AQ3Ff^#VGekSBDJf5kj|DWG)L8tk>5q_0odxFZNM@;g%gCT#28 z4@LKv0b1mjEXdaW7tO}i2>nQ^vcD6{r@B8wh@#$tDm(E%4eA|&`J?zr)->!G2LwoH z;I~Xda0+>G9)KH5u0Tx>BtZU``7-(`WKpL@UiO96&&GxDooMVci5s+(4!# zAECXv4Y4YCSK|$kpR{>(D5iDvHzz7MW%vxRoob-#b$T;d9sFfKWDSaG;Qo(Muy1+k zB!z>m*a_|(;}x!^O=Lx-V->w$-jA$AhcaKCY-;3m;!Fx~8$0k#(bBG(TQ19FcPT0Z z2+os?{CJ#%f|M=1Geyd!ZjL=CJ4Ulf;*?%^In#B}boLp^;re75VaqBR9nb`9dWt$x ziJa}T==2vOv8`IdcC)?c4tb@K{!9efF`vM(p=+K$!oG8LaqfaXfBvHF%g_eM6s>sf zncQIdAjX=oZqGL3CN{+=v!j!(P&}f%5q<7X9ORZ&3fOB}G~S)-aLAcc7D5A;LnZd; z%^eEFRM7d1coLOjY!lf8oxY5lc%!>|=E0|P4Vne$;x)IbUS$DNWOAyijskX_zCOU3 zb7j!Pq8r6UCEJ%x#jTqE%*pvWnWpq3krNvGF^bN4jU(aU?_^n{v?XCeil2y0e*Q&S zm9Ha`XKrconrT4;6$La(#r?)N^a9GTKOMbH@*1DI=~&{vqyhow3$`^_#!u+$-1S&s z)W7)>re&vJY6gLzI7TH9~Ujk?(&Qd@7>m15&iD#n!%b9hGKmi=*PeXbq5`)Bpl+HFG=D2 zq7&<`49{XH2v;K9VzC>l5ZxB9tW4E z=WGY^bH5Saj8F&+N8YT4AGik9K{Qi(g#d3JDJn5NC>o?N>nqe3aKVbA>ZG0^q*vIL zc!!J^Vy1$-5sA^kd+3OMAx578W-4>Y}xz1OEza=Lb12A?22v+b1B-$8WXxh{)!cNEoMUHu%{T zkM>-LocE(df9Lr57^-pNlnVRuw?zPH^3D|F%L*m62>p@m5uHmlmNYol^ApRfIG&)e zQE;q0q#SL#W2k_s%6shRBptQlJx6_*lc1op^0T2Nj2*oMl;StVKt}@^ODfdeg`JEg)N$4F9oc>bhh8fxKxyP_w=&^^Pb(=X=M2P4oi|{ zZ7O4K$xXA!``ztui%bB$)Hih_|0HJ;X{BhjRHueHbCV|f;Ihm!zBbxy=Uy))=jvL~ z364=zhIoYL8s0*!Kbl+n?TfV##l5Mf&cK48vR{}GEMf5Z>)gQe~_-k{ea zwjW1QWx|>9v7x9%Cy6X3k8LLj zCga!eGuaFal&Egwl~rc3ED2=$w8rP#d&|ux>Nv0$fHWeWHqPB?aiJ0k7t(h<`o$2j6jpUx_N27f)6Ml+lx=-GT_u85fl)mo%_eJ zi7AK%vN4Qk%42H&2j+x8&Zu;lpY>MtmA>|u$wm6?IY|JhPpqAYEQ?zSz-nV}M;B9W zZ?=Ghos^W+|EBzd<9feo`})9(_6Mb+=nk#(I|(@rUX^ut7ib0p1fFWJTspW&*Y5}N z`R@@}d|00Amm76^*t^u;59wCV3Box^x~l>k0E98?-o;o}og=5Dsv0G!jh4v}%R~KM zn*x>i9lD<7v@vKj`RQltyGa+ys8XTvnNqpz*HBbpxV=Ozlah*x*$J+}!Q&@F6)#5` z&8DdF*FxwR9sLY42WI6XL7NOzK2ta(fJQ22Uwb*7CZdfJg2(ntlk z8FPNJLj1~9|J0th;%NI)kn8#f&tQVX6Y$1aL4emZ_q$)0aO<^Cir(3*_A&z{OQ;D# z-vm*IPVXm7Jee9k!1RP@M#%|#m_|vejRsFoT{(OEGW{b-p8s6Exs_!+cTGF6KXm~z z{>B!(XRo1{=x9`Y`slI~XS>hc9JpvY_D|Qf7mqBhsQaF4GXN@YkBtp`POgh)fzGVg z+`Go34st`kU-F{`+L5Hy0o}4YZW;lF=$|-xkeEl!EQ6G>^l+Q#OfAYb(LsLn6MBKb zP-dTp)!5n)Dt^6~^HCb|W0(rq=6P*E-}lyFxSeVzDSpU>#p$2!KYy|q3$*M%HK=X= z0_@6xeSrqtFDL4$L>_Nb*==MgZ9hT#20vE%9rS9tdacSTy)z*-YKXq6t&lG|G<$XR z$JZn&CZ)SWMTdYzv=lW?$4|7+G=tVZR5t=!GQzFo6)mVDtK2%n%4%@>)rOY-<9k+dfcRksjD9YOA z&V%V})4|=lelv0S=hNLH1x*l#W|6c_Y>?fcnLyifx#^0@L>2jB}KL5{%d-#i`cLfO1|aqTq<$kSOp{;R5S125D^VOn10TGxN)`j#O+w*2!qsY zV9VtBz7D0%?a8avEfGrQ-d``#G|>@I-azn@KA?da5V?K(wCgetO13}SKRBE)bf;CN z7hxAIxZaz%Hsbd$q0XC81)w#b$C&+`0Ovzl6*_-y20;5kOD72(32$Fwp&(oju?}w! z0u)sbIl1tTFfj%(M&cB}E%O-<&v3YedE<1q@6%j^{`u9u-E?!R>P&T+|B8b9{!CXM zGEa|xCTjA-;n7J1yD4w`DUM4KDvb{^K?koq%gcnNcLi1cC8Bd$Xea5Kj;{rbJ%@lB zL|&&!_JMoax(>X*IgwT;(eArpUuze=V{?3hVC}Z}j{3ZzqY=4+vHoLNol?Muo`l3+mMi(d}CuUt$6QHbc|cyTx(7 zf4#^6ZBvsNon4NLMzSz05HI9leHF-^1LR~JL{YB)wHIWic)qIS;E5L7q;ktq)|L(2?YD9!MVq1d`Na^ubmEIf8!8O<6wQ=7Q1M zM!v_V6M)z4QTboDhxQuF%mZlQWDplY5wkVBoepOvVW53;EHNV790@IEe6s9PCve|U z+Eecz9KWoUQL4O!K;E~nwb62mZ@Vzoh_mhcAK|SS2c$kAqB}5T=x2~%_$28V4lK%& z+cH7{ivm8`5+Gx&mf9QVbv#)%<6ZkkFJU%#Qe=ItHG0Xmuz%r%SfHQgRe8BXL?*+> zuoMj6FEKI5`bP#@ffT_xTU+<`1G|OlqQ!O4y?FnXCh2Qv7y?V-Zb4i3u=fLA4&BOJ zIJuYAGK{J}xl88ul)w0Hg*nTX{ouM{=%_}KsTJ6rt`$~c;jinDUJqwlJpY#N2^lb` z{H{Ebo1K#rt5Za0V`Gz@ox85;vIp4aX!Tqb5nus(;d+)E45j&s+UkT4&NbOmvpF;;?LSZ-oH-lXNRO@udEK?# zt*ML7X)XH@fmu0(DZxu73JR@n#ATnr`}coUz7oF$PW@n*lBykA)^mW_ldk|Nsi`cV z?9FX0s)n)cy?+?#e@a-52CvGWLCTd;t3~}CDHS3+Fp9j)RiD!=`N;zY zi&_>Divv7(zoW)IH>H8585E|(`}ch7Svr%HlCm0~n}Yyp z_jZJlQ7t){(hId>H>Ozb3d_R;C|pTZZCyrPhVi_PA0lVwB3R7jRvjG{qh!=uC?Dy$ z(Z@g45D<{DGK-|2gy8*JmRPjEauaomfLdBngzCoe1cz0ks2W%D-fdg|ew;?UIjk< zCX?Q}k*==hE`ofxnBp`x#0CMVkuLA31Nb|;yV-@HC=`voW-bLiB?}ZXYrJY#XtfHl zvjrpL_jiH*YlDQLduy&?g)im_DIsR}KrfGIbQqAfxrK!#F7YWlvfy1uy9nBpUsb$p zp+u2Y;+?29_Z7DWX9)%|!(vT>7NxH9#-E0e52a}t3!;webNnslyB~=H-?h$B`adk_ zpCw5_pBxR47C{*rp;#$%R3MNZSt?{<2*K8H{wu_zpR*}`>q)V>ABJe*d!KUt^R>X|h+R0nI@_~2dE;@|gX1;0>V>?cg;z&(GkjOyD1LMA3&pc|C?o?oe~KHH z@yi8;(EQN{1yFHPuZ%QQWPQ~snY(D=RJW>bP zkog_Eav`Cf*_QM|ppzTul_=~TFCz^Nj{7sFtfI;x{wQjcPWXpT7IqZ9Xs%)cpQP82 z)XC-~IMA_-uQqpbUf8vCL^me``wWAAT@W0e8!WH!lMt0?XM%(LxbWCJrx0+d2pm0L zkJ3Uwj{~njMqY>Ve1LIf!T(0s@otdu3C-P5!0*e|F9Z?M8-cf|#Di<%bM!jk2HE9^ zs_56Av}k}&&Ira)?C8Q@G^Au!dH9kI2lZFn_QpGl)5GH=3n@}ZA07B9}OL4_b>|!Vp3OJk?ud>AyVMp~Pkzsy! zeO!O#k^tO%k>f6mRn@DQib)j+Mb1 zcg)q0dP9$PqHFlI=PXD6jPLD~mDfot4%@<=YhWY-dKK;bEi;aQM|PP8oF8Q0B0#vw zIJHNb@jOq>P{4`ho)pwO@^;YC8I>qeboe;OG-Ub)xf0ZMcS!O;JsFj6KXbIXTSL8_ zQn+I$V!xo)^t$SYev@}jx0iF>oQO;w;_^|3Nelu(xDJqmCs+g*UN?W`q-^TZYe2f_ z+?@n*AY*^5%yg?8Apu^H~igBb+PR9xnObOV9J6;ggenC(QGj=+>+a1v?VLoGaMAU_w1Mw3*Jz91p}DUM zce%sDJOkZjdF?Jv(M^)L*9Q{AX7MFSYX68@BQFw+*LRKwpDZ5&6>ky9eM#be-sU5` z$aDns*Y3wcE)E!$5(nEg+ZZ*k0$-jiM-levA7>z>@An+=9%3Vn)hvA3%sRH*yB@-} zb3_+bi%6uu8|_Xv9(1#H7W)hPFT*Tn1f#mx9|?c`TV*@L0eRUL{qF5JLbFSQm&-FLnC~bPXP<-59+gTqr4Z5?)Go9bG~lxuU~5F{ z{wd%*>ggG@-22S&BI!wj@X{ZB69S|$`ZcZCCGLuEL=-Jy-yApcJN&D=76k`0I6v}H zgE#ro{>fFN4SN zur3Yt@J{-GKtQ9W`c1^*I9D}Ruo+B+?m-V<*DXzoaDizBGH`||vDuCG3*gT(*Uvc& zZvF~(#U}iIWs?^hml(FN(GCpvKruk`M`lMir?FpWEwwQ_H#AoF?yN>LR3$`?)!(q` zTM_|v`DR`^zMl;zoZQhH9Vf`Rz0XnB9g6z&!DFo8&CExyv0~LZbh#Yw*VAP<+z*KJ zMw<6Ey2qfX$uuD&etHqd^#-rw#3oOuc-`ev+W^o>$hde~{q!h}5R=?Eqjc&y6v4>n zT8jb*`P+y`6aF3b1(3FbWXJXNAsJ)S>dq(X(q}Yxo_}oufg1=FX7=h{WW~~ARDjRB z*v^i7K{V(*f_^!Ni!ua1W`z{I^_~);2XrUkYSw zh6dNqIv6sMq;YL%(7-QRk{vBa;vX44HUUi#(Yow>iFm4`M!dlPrWb)lfIo2E5JXVs zxH&Z`kiEMa8EYIwgcYwU>%3P@F3F_XwifqB&1ycYZ>??1Y0*u>xxrA3V8?d878;CA zh;)tn!%3Vc#8W4M6`};h*zAd0bFygkDd6{ITtPK+s-t5GIXwW0niW)-GP3E?z|nI= z6f}Nv0T%LpZg_utS#>^yG}e1^ z^-Kr(+9X2+TWgt?lBEj@_!Qg?Tga|fw3`-hML5%x($l2G^8y0s#)=|`wmE3RZlyBs z;R^?r72b1frtmrfYL|U@G+>OGpWjp1h0}K_$L}iYRNuK>!pkj~f{)6!>)V780UDo;F>~7(6JQ48%4P z6TKSY7$-x|S2H8>@*zCoRAw$f=6M2tp2x=Etn1CGMtQL{0_w&3dJB+E>X+Qj7KU4q zofKTE?u74G3F3nF9K-ixx-zR7LGvI;PR`%c&DK)ZXG+h--CGUw`Y6AiO9Q^DgUf>} zUvmp9AyKK+Edr|5cdv2iE9dcM4u(mKX>F1~vp+IG5oC<8Rgc9F6P#+Rzj=WhzTy_k z=S1|@s6M*uUv$T z9!D!PZs~P`v0kOG_;aA!y1^l#nqG+Yg}O{@pzuPdT@mu7kSn1z>Zc z7vPrEsT$RCsNE6#>$as?I6;aR=~_2up=L;g6^x02h8_f>7jZD3zP`LCSTI5x`Nskg z*JIRC&`#S);QAXF9Q$_C3$NL@KF&Qag$y34qRvA49Y6xJS4fOm@wZy}M>wwK6?I$n z+leP@2__ph^)&EthLy*FKlB4WDaU6amuH^JZViTp?|@V+ZA~g{JIcZ-B=mM}tna-T zgXHnFt*?-ug#9oJpMs zTZyuyANk1h$%EY8CBHW_H5<{-LNyD#PuWuaFFcptqp2kn^rwLVG4$BGXJGIiq(S{! z(c_C=YyapmMFVcCy)~=PjAH_C5%nK?O4`jg)O5TlTL}l)^x>P)S7
v#ztgGxi)3 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

?SC_WXB?p4bg^?}=rubedfbpmG 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%0AxEm$vOw8;p)7zqZrU$sQ34|7=gL_p3~ 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 YcA)aNV_QA;BnbHEYny1Ht~o{j549Nmod5s; literal 0 HcmV?d00001 diff --git a/node_modules/http-server/node_modules/ecstatic/example/union.js b/node_modules/http-server/node_modules/ecstatic/example/union.js new file mode 100644 index 0000000..e162ec5 --- /dev/null +++ b/node_modules/http-server/node_modules/ecstatic/example/union.js @@ -0,0 +1,10 @@ +var union = require('union'); +var ecstatic = require('../'); + +union.createServer({ + before: [ + ecstatic(__dirname + '/public') + ] +}).listen(8080); + +console.log('Listening on :8080'); diff --git a/node_modules/http-server/node_modules/ecstatic/lib/ecstatic.js b/node_modules/http-server/node_modules/ecstatic/lib/ecstatic.js new file mode 100755 index 0000000..b17afd5 --- /dev/null +++ b/node_modules/http-server/node_modules/ecstatic/lib/ecstatic.js @@ -0,0 +1,288 @@ +#! /usr/bin/env node + +var path = require('path'), + fs = require('fs'), + url = require('url'), + mime = require('mime'), + urlJoin = require('url-join'), + showDir = require('./ecstatic/showdir'), + version = JSON.parse( + fs.readFileSync(__dirname + '/../package.json').toString() + ).version, + status = require('./ecstatic/status-handlers'), + etag = require('./ecstatic/etag'), + optsParser = require('./ecstatic/opts'); + +var ecstatic = module.exports = function (dir, options) { + if (typeof dir !== 'string') { + options = dir; + dir = options.root; + } + + var root = path.join(path.resolve(dir), '/'), + opts = optsParser(options), + cache = opts.cache, + autoIndex = opts.autoIndex, + baseDir = opts.baseDir, + defaultExt = opts.defaultExt, + handleError = opts.handleError, + serverHeader = opts.serverHeader; + + opts.root = dir; + if (defaultExt && /^\./.test(defaultExt)) defaultExt = defaultExt.replace(/^\./, ''); + + return function middleware (req, res, next) { + + // Strip any null bytes from the url + while(req.url.indexOf('%00') !== -1) { + req.url = req.url.replace(/\%00/g, ''); + } + // Figure out the path for the file from the given url + var parsed = url.parse(req.url); + try { + decodeURIComponent(req.url); // check validity of url + var pathname = decodePathname(parsed.pathname); + } + catch (err) { + return status[400](res, next, { error: err }); + } + + var file = path.normalize( + path.join(root, + path.relative( + path.join('/', baseDir), + pathname + ) + ) + ), + gzipped = file + '.gz'; + + if(serverHeader !== false) { + // Set common headers. + res.setHeader('server', 'ecstatic-'+version); + } + + // TODO: This check is broken, which causes the 403 on the + // expected 404. + if (file.slice(0, root.length) !== root) { + return status[403](res, next); + } + + if (req.method && (req.method !== 'GET' && req.method !== 'HEAD' )) { + return status[405](res, next); + } + + function statFile() { + fs.stat(file, function (err, stat) { + if (err && (err.code === 'ENOENT' || err.code === 'ENOTDIR')) { + if (req.statusCode == 404) { + // This means we're already trying ./404.html and can not find it. + // So send plain text response with 404 status code + status[404](res, next); + } + else if (!path.extname(parsed.pathname).length && defaultExt) { + // If there is no file extension in the path and we have a default + // extension try filename and default extension combination before rendering 404.html. + middleware({ + url: parsed.pathname + '.' + defaultExt + ((parsed.search)? parsed.search:'') + }, res, next); + } + else { + // Try to serve default ./404.html + middleware({ + url: (handleError ? ('/' + path.join(baseDir, '404.' + defaultExt)) : req.url), + statusCode: 404 + }, res, next); + } + } + else if (err) { + status[500](res, next, { error: err }); + } + else if (stat.isDirectory()) { + // 302 to / if necessary + if (!parsed.pathname.match(/\/$/)) { + res.statusCode = 302; + res.setHeader('location', parsed.pathname + '/' + + (parsed.query? ('?' + parsed.query):'') + ); + return res.end(); + } + + if (autoIndex) { + return middleware({ + url: urlJoin(encodeURIComponent(pathname), '/index.' + defaultExt) + }, res, function (err) { + if (err) { + return status[500](res, next, { error: err }); + } + if (opts.showDir) { + return showDir(opts, stat)(req, res); + } + + return status[403](res, next); + }); + } + + if (opts.showDir) { + return showDir(opts, stat)(req, res); + } + + status[404](res, next); + + } + else { + serve(stat); + } + }); + } + + // Look for a gzipped file if this is turned on + if (opts.gzip && shouldCompress(req)) { + fs.stat(gzipped, function (err, stat) { + if (!err && stat.isFile()) { + file = gzipped; + return serve(stat); + } else { + statFile(); + } + }); + } else { + statFile(); + } + + function serve(stat) { + // Do a MIME lookup, fall back to octet-stream and handle gzip + // special case. + var defaultType = opts.contentType || 'application/octet-stream', + contentType = mime.lookup(file, defaultType), + charSet; + + if (contentType) { + charSet = mime.charsets.lookup(contentType, 'utf-8'); + if (charSet) { + contentType += '; charset=' + charSet; + } + } + + if (path.extname(file) === '.gz') { + res.setHeader('Content-Encoding', 'gzip'); + + // strip gz ending and lookup mime type + contentType = mime.lookup(path.basename(file, ".gz"), defaultType); + } + + var range = (req.headers && req.headers['range']); + if (range) { + var total = stat.size; + var parts = range.replace(/bytes=/, "").split("-"); + var partialstart = parts[0]; + var partialend = parts[1]; + var start = parseInt(partialstart, 10); + var end = Math.min(total-1, partialend ? parseInt(partialend, 10) : total-1); + var chunksize = (end-start)+1; + if (start > end || isNaN(start) || isNaN(end)) { + return status['416'](res, next); + } + var fstream = fs.createReadStream(file, {start: start, end: end}); + fstream.on('error', function (err) { + status['500'](res, next, { error: err }); + }); + res.on('close', function () { + fstream.destroy(); + }); + res.writeHead(206, { + 'Content-Range': 'bytes ' + start + '-' + end + '/' + total, + 'Accept-Ranges': 'bytes', + 'Content-Length': chunksize, + 'Content-Type': contentType + }); + fstream.pipe(res); + return; + } + + // TODO: Helper for this, with default headers. + res.setHeader('etag', etag(stat)); + res.setHeader('last-modified', (new Date(stat.mtime)).toUTCString()); + res.setHeader('cache-control', cache); + + // Return a 304 if necessary + if ( req.headers + && ( + (req.headers['if-none-match'] === etag(stat)) + || (new Date(Date.parse(req.headers['if-modified-since'])) >= stat.mtime) + ) + ) { + return status[304](res, next); + } + + res.setHeader('content-length', stat.size); + res.setHeader('content-type', contentType); + + // set the response statusCode if we have a request statusCode. + // This only can happen if we have a 404 with some kind of 404.html + // In all other cases where we have a file we serve the 200 + res.statusCode = req.statusCode || 200; + + if (req.method === "HEAD") { + return res.end(); + } + + var stream = fs.createReadStream(file); + + stream.pipe(res); + stream.on('error', function (err) { + status['500'](res, next, { error: err }); + }); + } + }; +}; + +ecstatic.version = version; +ecstatic.showDir = showDir; + +// Check to see if we should try to compress a file with gzip. +function shouldCompress(req) { + var headers = req.headers; + + return headers && headers['accept-encoding'] && + headers['accept-encoding'] + .split(",") + .some(function (el) { + return ['*','compress', 'gzip', 'deflate'].indexOf(el) != -1; + }) + ; +} + +// See: https://github.com/jesusabdullah/node-ecstatic/issues/109 +function decodePathname(pathname) { + var pieces = pathname.replace(/\\/g,"/").split('/'); + + return pieces.map(function (piece) { + piece = decodeURIComponent(piece); + + if (process.platform === 'win32' && /\\/.test(piece)) { + throw new Error('Invalid forward slash character'); + } + + return piece; + }).join('/'); +} + +if (!module.parent) { + var http = require('http'), + opts = require('minimist')(process.argv.slice(2)), + port = opts.port || opts.p || 8000, + dir = opts.root || opts._[0] || process.cwd(); + + if (opts.help || opts.h) { + var u = console.error; + u('usage: ecstatic [dir] {options} --port PORT'); + u('see https://npm.im/ecstatic for more docs'); + return; + } + + http.createServer(ecstatic(dir, opts)) + .listen(port, function () { + console.log('ecstatic serving ' + dir + ' at http://0.0.0.0:' + port); + }); +} diff --git a/node_modules/http-server/node_modules/ecstatic/lib/ecstatic/etag.js b/node_modules/http-server/node_modules/ecstatic/lib/ecstatic/etag.js new file mode 100644 index 0000000..5991d84 --- /dev/null +++ b/node_modules/http-server/node_modules/ecstatic/lib/ecstatic/etag.js @@ -0,0 +1,3 @@ +module.exports = function (stat) { + return JSON.stringify([stat.ino, stat.size, stat.mtime].join('-')); +} diff --git a/node_modules/http-server/node_modules/ecstatic/lib/ecstatic/opts.js b/node_modules/http-server/node_modules/ecstatic/lib/ecstatic/opts.js new file mode 100644 index 0000000..421e623 --- /dev/null +++ b/node_modules/http-server/node_modules/ecstatic/lib/ecstatic/opts.js @@ -0,0 +1,122 @@ +// This is so you can have options aliasing and defaults in one place. + +module.exports = function (opts) { + + var autoIndex = true, + showDir = true, + humanReadable = true, + si = false, + cache = 'max-age=3600', + gzip = false, + defaultExt = '.html', + handleError = true, + serverHeader = true; + contentType = 'application/octet-stream'; + + if (opts) { + [ + 'autoIndex', + 'autoindex' + ].some(function (k) { + if (typeof opts[k] !== 'undefined' && opts[k] !== null) { + autoIndex = opts[k]; + return true; + } + }); + + [ + 'showDir', + 'showdir' + ].some(function (k) { + if (typeof opts[k] !== 'undefined' && opts[k] !== null) { + showDir = opts[k]; + return true; + } + }); + + [ + 'humanReadable', + 'humanreadable', + 'human-readable' + ].some(function (k) { + if (typeof opts[k] !== 'undefined' && opts[k] !== null) { + humanReadable = opts[k]; + return true; + } + }); + + [ + 'si', + 'index' + ].some(function (k) { + if (typeof opts[k] !== 'undefined' && opts[k] !== null) { + si = opts[k]; + return true; + } + }); + + if (opts.defaultExt && typeof opts.defaultExt === 'string') { + defaultExt = opts.defaultExt; + } + + if (typeof opts.cache !== 'undefined' && opts.cache !== null) { + if (typeof opts.cache === 'string') { + cache = opts.cache; + } + else if(typeof opts.cache === 'number') { + cache = 'max-age=' + opts.cache; + } + } + + if (typeof opts.gzip !== 'undefined' && opts.gzip !== null) { + gzip = opts.gzip; + } + + [ + 'handleError', + 'handleerror' + ].some(function (k) { + if (typeof opts[k] !== 'undefined' && opts[k] !== null) { + handleError = opts[k]; + return true; + } + }); + + [ + 'serverHeader', + 'serverheader', + 'server-header' + ].some(function (k) { + if (typeof opts[k] !== 'undefined' && opts[k] !== null) { + serverHeader = opts[k]; + return true; + } + }); + + [ + 'contentType', + 'contenttype', + 'content-type' + ].some(function (k) { + if (typeof opts[k] !== 'undefined' && opts[k] !== null) { + contentType = opts[k]; + return true; + } + }); + + } + + return { + cache: cache, + autoIndex: autoIndex, + showDir: showDir, + humanReadable: humanReadable, + si: si, + defaultExt: defaultExt, + baseDir: (opts && opts.baseDir) || '/', + gzip: gzip, + handleError: handleError, + serverHeader: serverHeader, + contentType: contentType + }; +}; diff --git a/node_modules/http-server/node_modules/ecstatic/lib/ecstatic/showdir.js b/node_modules/http-server/node_modules/ecstatic/lib/ecstatic/showdir.js new file mode 100644 index 0000000..731a323 --- /dev/null +++ b/node_modules/http-server/node_modules/ecstatic/lib/ecstatic/showdir.js @@ -0,0 +1,214 @@ +var ecstatic = require('../ecstatic'), + fs = require('fs'), + path = require('path'), + he = require('he'), + etag = require('./etag'), + url = require('url'), + status = require('./status-handlers'); + +module.exports = function (opts, stat) { + // opts are parsed by opts.js, defaults already applied + var cache = opts.cache, + root = path.resolve(opts.root), + baseDir = opts.baseDir, + humanReadable = opts.humanReadable, + handleError = opts.handleError, + si = opts.si; + + return function middleware (req, res, next) { + + // Figure out the path for the file from the given url + var parsed = url.parse(req.url), + pathname = decodeURIComponent(parsed.pathname), + dir = path.normalize( + path.join(root, + path.relative( + path.join('/', baseDir), + pathname + ) + ) + ); + + fs.stat(dir, function (err, stat) { + if (err) { + return handleError ? status[500](res, next, { error: err }) : next(); + } + + // files are the listing of dir + fs.readdir(dir, function (err, files) { + if (err) { + return handleError ? status[500](res, next, { error: err }) : next(); + } + res.setHeader('content-type', 'text/html'); + res.setHeader('etag', etag(stat)); + res.setHeader('last-modified', (new Date(stat.mtime)).toUTCString()); + res.setHeader('cache-control', cache); + + sortByIsDirectory(files, function (lolwuts, dirs, files) { + // It's possible to get stat errors for all sorts of reasons here. + // Unfortunately, our two choices are to either bail completely, + // or just truck along as though everything's cool. In this case, + // I decided to just tack them on as "??!?" items along with dirs + // and files. + // + // Whatever. + + // if it makes sense to, add a .. link + if (path.resolve(dir, '..').slice(0, root.length) == root) { + return fs.stat(path.join(dir, '..'), function (err, s) { + if (err) { + return handleError ? status[500](res, next, { error: err }) : next(); + } + dirs.unshift([ '..', s ]); + render(dirs, files, lolwuts); + }); + } + render(dirs, files, lolwuts); + }); + + function sortByIsDirectory(paths, cb) { + // take the listing file names in `dir` + // returns directory and file array, each entry is + // of the array a [name, stat] tuple + var pending = paths.length, + errs = [], + dirs = [], + files = []; + + if (!pending) { + return cb(errs, dirs, files); + } + + paths.forEach(function (file) { + fs.stat(path.join(dir, file), function (err, s) { + if (err) { + errs.push([file, err]); + } + else if (s.isDirectory()) { + dirs.push([file, s]); + } + else { + files.push([file, s]); + } + + if (--pending === 0) { + cb(errs, dirs, files); + } + }); + }); + } + + function render(dirs, files, lolwuts) { + // each entry in the array is a [name, stat] tuple + + // TODO: use stylessheets? + var html = [ + '', + '', + ' ', + ' ', + ' ', + ' Index of ' + pathname +'', + ' ', + ' ', + '

Index of ' + pathname + '

' + ].join('\n') + '\n'; + + html += ''; + + var failed = false; + var writeRow = function (file, i) { + // render a row given a [name, stat] tuple + var isDir = file[1].isDirectory && file[1].isDirectory(); + var href = parsed.pathname.replace(/\/$/, '') + '/' + encodeURI(file[0]); + + // append trailing slash and query for dir entry + if (isDir) { + href += '/' + ((parsed.search)? parsed.search:''); + } + + var displayName = he.encode(file[0]) + ((isDir)? '/':''); + + // TODO: use stylessheets? + html += '' + + '' + + '' + + '' + + '\n'; + }; + + dirs.sort(function (a, b) { return a[0].toString().localeCompare(b[0].toString()); }).forEach(writeRow); + files.sort(function (a, b) { return a.toString().localeCompare(b.toString()); }).forEach(writeRow); + lolwuts.sort(function (a, b) { return a[0].toString().localeCompare(b[0].toString()); }).forEach(writeRow); + + html += '
(' + permsToString(file[1]) + ')' + sizeToString(file[1], humanReadable, si) + '' + displayName + '
\n'; + html += '
\n' + + '' + ; + + if (!failed) { + res.writeHead(200, { "Content-Type": "text/html" }); + res.end(html); + } + } + }); + }); + }; +}; + +function permsToString(stat) { + + if (!stat.isDirectory || !stat.mode) { + return '???!!!???'; + } + + var dir = stat.isDirectory() ? 'd' : '-', + mode = stat.mode.toString(8); + + return dir + mode.slice(-3).split('').map(function (n) { + return [ + '---', + '--x', + '-w-', + '-wx', + 'r--', + 'r-x', + 'rw-', + 'rwx' + ][parseInt(n, 10)]; + }).join(''); +} + +// given a file's stat, return the size of it in string +// humanReadable: (boolean) whether to result is human readable +// si: (boolean) whether to use si (1k = 1000), otherwise 1k = 1024 +// adopted from http://stackoverflow.com/a/14919494/665507 +function sizeToString(stat, humanReadable, si) { + if (stat.isDirectory && stat.isDirectory()) { + return ''; + } + + var sizeString = ''; + var bytes = stat.size; + var threshold = si ? 1000 : 1024; + + if (!humanReadable || bytes < threshold) { + return bytes + 'B'; + } + + var units = [ 'k','M','G','T','P','E','Z','Y' ]; + var u = -1; + do { + bytes /= threshold; + ++u; + } while (bytes >= threshold); + + var b = bytes.toFixed(1); + if (isNaN(b)) b = '??'; + + return b + units[u]; +} diff --git a/node_modules/http-server/node_modules/ecstatic/lib/ecstatic/status-handlers.js b/node_modules/http-server/node_modules/ecstatic/lib/ecstatic/status-handlers.js new file mode 100644 index 0000000..9874534 --- /dev/null +++ b/node_modules/http-server/node_modules/ecstatic/lib/ecstatic/status-handlers.js @@ -0,0 +1,72 @@ +// not modified +exports['304'] = function (res, next) { + res.statusCode = 304; + res.end(); +}; + +// access denied +exports['403'] = function (res, next) { + res.statusCode = 403; + if (typeof next === "function") { + next(); + } + else { + if (res.writable) { + res.setHeader('content-type', 'text/plain'); + res.end('ACCESS DENIED'); + } + } +}; + +// disallowed method +exports['405'] = function (res, next, opts) { + res.statusCode = 405; + if (typeof next === "function") { + next(); + } + else { + res.setHeader('allow', (opts && opts.allow) || 'GET, HEAD'); + res.end(); + } +}; + +// not found +exports['404'] = function (res, next) { + res.statusCode = 404; + if (typeof next === "function") { + next(); + } + else { + if (res.writable) { + res.setHeader('content-type', 'text/plain'); + res.end('File not found. :('); + } + } +}; + +exports['416'] = function (res, next) { + res.statusCode = 416; + if (typeof next === "function") { + next(); + } + else { + if (res.writable) { + res.setHeader('content-type', 'text/plain'); + res.end('Requested range not satisfiable'); + } + } +}; + +// flagrant error +exports['500'] = function (res, next, opts) { + res.statusCode = 500; + res.setHeader('content-type', 'text/plain'); + res.end(opts.error.stack || opts.error.toString() || "No specified error"); +}; + +// bad request +exports['400'] = function (res, next, opts) { + res.statusCode = 400; + res.setHeader('content-type', 'text/plain'); + res.end(opts && opts.error ? String(opts.error) : 'Malformed request.'); +}; diff --git a/node_modules/http-server/node_modules/ecstatic/node_modules/.bin/he b/node_modules/http-server/node_modules/ecstatic/node_modules/.bin/he new file mode 120000 index 0000000..2a8eb5e --- /dev/null +++ b/node_modules/http-server/node_modules/ecstatic/node_modules/.bin/he @@ -0,0 +1 @@ +../he/bin/he \ No newline at end of file diff --git a/node_modules/http-server/node_modules/ecstatic/node_modules/.bin/mime b/node_modules/http-server/node_modules/ecstatic/node_modules/.bin/mime new file mode 120000 index 0000000..fbb7ee0 --- /dev/null +++ b/node_modules/http-server/node_modules/ecstatic/node_modules/.bin/mime @@ -0,0 +1 @@ +../mime/cli.js \ No newline at end of file diff --git a/node_modules/http-server/node_modules/ecstatic/node_modules/he/LICENSE-MIT.txt b/node_modules/http-server/node_modules/ecstatic/node_modules/he/LICENSE-MIT.txt new file mode 100644 index 0000000..a41e0a7 --- /dev/null +++ b/node_modules/http-server/node_modules/ecstatic/node_modules/he/LICENSE-MIT.txt @@ -0,0 +1,20 @@ +Copyright Mathias Bynens + +Permission is hereby granted, free of charge, to any person obtaining +a copy of this software and associated documentation files (the +"Software"), to deal in the Software without restriction, including +without limitation the rights to use, copy, modify, merge, publish, +distribute, sublicense, and/or sell copies of the Software, and to +permit persons to whom the Software is furnished to do so, subject to +the following conditions: + +The above copyright notice and this permission notice shall be +included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE +LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION +OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION +WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/node_modules/http-server/node_modules/ecstatic/node_modules/he/README.md b/node_modules/http-server/node_modules/ecstatic/node_modules/he/README.md new file mode 100644 index 0000000..61765d1 --- /dev/null +++ b/node_modules/http-server/node_modules/ecstatic/node_modules/he/README.md @@ -0,0 +1,336 @@ +# he [![Build status](https://travis-ci.org/mathiasbynens/he.svg?branch=master)](https://travis-ci.org/mathiasbynens/he) [![Code coverage status](http://img.shields.io/coveralls/mathiasbynens/he/master.svg)](https://coveralls.io/r/mathiasbynens/he) [![Dependency status](https://gemnasium.com/mathiasbynens/he.svg)](https://gemnasium.com/mathiasbynens/he) + +_he_ (for “HTML entities”) is a robust HTML entity encoder/decoder written in JavaScript. It supports [all standardized named character references as per HTML](http://www.whatwg.org/specs/web-apps/current-work/multipage/named-character-references.html), handles [ambiguous ampersands](https://mathiasbynens.be/notes/ambiguous-ampersands) and other edge cases [just like a browser would](http://www.whatwg.org/specs/web-apps/current-work/multipage/tokenization.html#tokenizing-character-references), has an extensive test suite, and — contrary to many other JavaScript solutions — _he_ handles astral Unicode symbols just fine. [An online demo is available.](http://mothereff.in/html-entities) + +## Installation + +Via [npm](http://npmjs.org/): + +```bash +npm install he +``` + +Via [Bower](http://bower.io/): + +```bash +bower install he +``` + +Via [Component](https://github.com/component/component): + +```bash +component install mathiasbynens/he +``` + +In a browser: + +```html + +``` + +In [Narwhal](http://narwhaljs.org/), [Node.js](http://nodejs.org/), and [RingoJS](http://ringojs.org/): + +```js +var he = require('he'); +``` + +In [Rhino](http://www.mozilla.org/rhino/): + +```js +load('he.js'); +``` + +Using an AMD loader like [RequireJS](http://requirejs.org/): + +```js +require( + { + 'paths': { + 'he': 'path/to/he' + } + }, + ['he'], + function(he) { + console.log(he); + } +); +``` + +## API + +### `he.version` + +A string representing the semantic version number. + +### `he.encode(text, options)` + +This function takes a string of text and encodes (by default) any symbols that aren’t printable ASCII symbols and `&`, `<`, `>`, `"`, `'`, and `` ` ``, replacing them with character references. + +```js +he.encode('foo © bar ≠ baz 𝌆 qux'); +// → 'foo © bar ≠ baz 𝌆 qux' +``` + +As long as the input string contains [allowed code points](http://www.whatwg.org/specs/web-apps/current-work/multipage/parsing.html#preprocessing-the-input-stream) only, the return value of this function is always valid HTML. Any [(invalid) code points that cannot be represented using a character reference](http://www.whatwg.org/specs/web-apps/current-work/multipage/tokenization.html#table-charref-overrides) in the input are not encoded. + +```js +he.encode('foo \0 bar'); +// → 'foo \0 bar' +``` + +The `options` object is optional. It recognizes the following properties: + +#### `useNamedReferences` + +The default value for the `useNamedReferences` option is `false`. This means that `encode()` will not use any named character references (e.g. `©`) in the output — hexadecimal escapes (e.g. `©`) will be used instead. Set it to `true` to enable the use of named references. + +**Note that if compatibility with older browsers is a concern, this option should remain disabled.** + +```js +// Using the global default setting (defaults to `false`): +he.encode('foo © bar ≠ baz 𝌆 qux'); +// → 'foo © bar ≠ baz 𝌆 qux' + +// Passing an `options` object to `encode`, to explicitly disallow named references: +he.encode('foo © bar ≠ baz 𝌆 qux', { + 'useNamedReferences': false +}); +// → 'foo © bar ≠ baz 𝌆 qux' + +// Passing an `options` object to `encode`, to explicitly allow named references: +he.encode('foo © bar ≠ baz 𝌆 qux', { + 'useNamedReferences': true +}); +// → 'foo © bar ≠ baz 𝌆 qux' +``` + +#### `encodeEverything` + +The default value for the `encodeEverything` option is `false`. This means that `encode()` will not use any character references for printable ASCII symbols that don’t need escaping. Set it to `true` to encode every symbol in the input string. When set to `true`, this option takes precedence over `allowUnsafeSymbols` (i.e. setting the latter to `true` in such a case has no effect). + +```js +// Using the global default setting (defaults to `false`): +he.encode('foo © bar ≠ baz 𝌆 qux'); +// → 'foo © bar ≠ baz 𝌆 qux' + +// Passing an `options` object to `encode`, to explicitly encode all symbols: +he.encode('foo © bar ≠ baz 𝌆 qux', { + 'encodeEverything': true +}); +// → 'foo © bar ≠ baz 𝌆 qux' + +// This setting can be combined with the `useNamedReferences` option: +he.encode('foo © bar ≠ baz 𝌆 qux', { + 'encodeEverything': true, + 'useNamedReferences': true +}); +// → 'foo © bar ≠ baz 𝌆 qux' +``` + +#### `strict` + +The default value for the `strict` option is `false`. This means that `encode()` will encode any HTML text content you feed it, even if it contains any symbols that cause [parse errors](http://www.whatwg.org/specs/web-apps/current-work/multipage/parsing.html#preprocessing-the-input-stream). To throw an error when such invalid HTML is encountered, set the `strict` option to `true`. This option makes it possible to use _he_ as part of HTML parsers and HTML validators. + +```js +// Using the global default setting (defaults to `false`, i.e. error-tolerant mode): +he.encode('\x01'); +// → '' + +// Passing an `options` object to `encode`, to explicitly enable error-tolerant mode: +he.encode('\x01', { + 'strict': false +}); +// → '' + +// Passing an `options` object to `encode`, to explicitly enable strict mode: +he.encode('\x01', { + 'strict': true +}); +// → Parse error +``` + +#### `allowUnsafeSymbols` + +The default value for the `allowUnsafeSymbols` option is `false`. This means that characters that are unsafe for use in HTML content (`&`, `<`, `>`, `"`, `'`, and `` ` ``) will be encoded. When set to `true`, only non-ASCII characters will be encoded. If the `encodeEverything` option is set to `true`, this option will be ignored. + +```js +he.encode('foo © and & ampersand', { + 'allowUnsafeSymbols': true +}); +// → 'foo © and & ampersand' +``` + +#### Overriding default `encode` options globally + +The global default setting can be overridden by modifying the `he.encode.options` object. This saves you from passing in an `options` object for every call to `encode` if you want to use the non-default setting. + +```js +// Read the global default setting: +he.encode.options.useNamedReferences; +// → `false` by default + +// Override the global default setting: +he.encode.options.useNamedReferences = true; + +// Using the global default setting, which is now `true`: +he.encode('foo © bar ≠ baz 𝌆 qux'); +// → 'foo © bar ≠ baz 𝌆 qux' +``` + +### `he.decode(html, options)` + +This function takes a string of HTML and decodes any named and numerical character references in it using [the algorithm described in section 12.2.4.69 of the HTML spec](http://www.whatwg.org/specs/web-apps/current-work/multipage/tokenization.html#tokenizing-character-references). + +```js +he.decode('foo © bar ≠ baz 𝌆 qux'); +// → 'foo © bar ≠ baz 𝌆 qux' +``` + +The `options` object is optional. It recognizes the following properties: + +#### `isAttributeValue` + +The default value for the `isAttributeValue` option is `false`. This means that `decode()` will decode the string as if it were used in [a text context in an HTML document](http://www.whatwg.org/specs/web-apps/current-work/multipage/tokenization.html#data-state). HTML has different rules for [parsing character references in attribute values](http://www.whatwg.org/specs/web-apps/current-work/multipage/tokenization.html#character-reference-in-attribute-value-state) — set this option to `true` to treat the input string as if it were used as an attribute value. + +```js +// Using the global default setting (defaults to `false`, i.e. HTML text context): +he.decode('foo&bar'); +// → 'foo&bar' + +// Passing an `options` object to `decode`, to explicitly assume an HTML text context: +he.decode('foo&bar', { + 'isAttributeValue': false +}); +// → 'foo&bar' + +// Passing an `options` object to `decode`, to explicitly assume an HTML attribute value context: +he.decode('foo&bar', { + 'isAttributeValue': true +}); +// → 'foo&bar' +``` + +#### `strict` + +The default value for the `strict` option is `false`. This means that `decode()` will decode any HTML text content you feed it, even if it contains any entities that cause [parse errors](http://www.whatwg.org/specs/web-apps/current-work/multipage/tokenization.html#tokenizing-character-references). To throw an error when such invalid HTML is encountered, set the `strict` option to `true`. This option makes it possible to use _he_ as part of HTML parsers and HTML validators. + +```js +// Using the global default setting (defaults to `false`, i.e. error-tolerant mode): +he.decode('foo&bar'); +// → 'foo&bar' + +// Passing an `options` object to `decode`, to explicitly enable error-tolerant mode: +he.decode('foo&bar', { + 'strict': false +}); +// → 'foo&bar' + +// Passing an `options` object to `decode`, to explicitly enable strict mode: +he.decode('foo&bar', { + 'strict': true +}); +// → Parse error +``` + +#### Overriding default `decode` options globally + +The global default settings for the `decode` function can be overridden by modifying the `he.decode.options` object. This saves you from passing in an `options` object for every call to `decode` if you want to use a non-default setting. + +```js +// Read the global default setting: +he.decode.options.isAttributeValue; +// → `false` by default + +// Override the global default setting: +he.decode.options.isAttributeValue = true; + +// Using the global default setting, which is now `true`: +he.decode('foo&bar'); +// → 'foo&bar' +``` + +### `he.escape(text)` + +This function takes a string of text and escapes it for use in text contexts in XML or HTML documents. Only the following characters are escaped: `&`, `<`, `>`, `"`, `'`, and `` ` ``. + +```js +he.escape(''); +// → '<img src='x' onerror="prompt(1)">' +``` + +### `he.unescape(html, options)` + +`he.unescape` is an alias for `he.decode`. It takes a string of HTML and decodes any named and numerical character references in it. + +### Using the `he` binary + +To use the `he` binary in your shell, simply install _he_ globally using npm: + +```bash +npm install -g he +``` + +After that you will be able to encode/decode HTML entities from the command line: + +```bash +$ he --encode 'föo ♥ bår 𝌆 baz' +föo ♥ bår 𝌆 baz + +$ he --encode --use-named-refs 'föo ♥ bår 𝌆 baz' +föo ♥ bår 𝌆 baz + +$ he --decode 'föo ♥ bår 𝌆 baz' +föo ♥ bår 𝌆 baz +``` + +Read a local text file, encode it for use in an HTML text context, and save the result to a new file: + +```bash +$ he --encode < foo.txt > foo-escaped.html +``` + +Or do the same with an online text file: + +```bash +$ curl -sL "http://git.io/HnfEaw" | he --encode > escaped.html +``` + +Or, the opposite — read a local file containing a snippet of HTML in a text context, decode it back to plain text, and save the result to a new file: + +```bash +$ he --decode < foo-escaped.html > foo.txt +``` + +Or do the same with an online HTML snippet: + +```bash +$ curl -sL "http://git.io/HnfEaw" | he --decode > decoded.txt +``` + +See `he --help` for the full list of options. + +## Support + +he has been tested in at least Chrome 27-29, Firefox 3-22, Safari 4-6, Opera 10-12, IE 6-10, Node.js v0.10.0, Narwhal 0.3.2, RingoJS 0.8-0.9, PhantomJS 1.9.0, and Rhino 1.7RC4. + +## Unit tests & code coverage + +After cloning this repository, run `npm install` to install the dependencies needed for he development and testing. You may want to install Istanbul _globally_ using `npm install istanbul -g`. + +Once that’s done, you can run the unit tests in Node using `npm test` or `node tests/tests.js`. To run the tests in Rhino, Ringo, Narwhal, and web browsers as well, use `grunt test`. + +To generate the code coverage report, use `grunt cover`. + +## Acknowledgements + +Thanks to [Simon Pieters](http://simon.html5.org/) ([@zcorpan](https://twitter.com/zcorpan)) for the many suggestions. + +## Author + +| [![twitter/mathias](https://gravatar.com/avatar/24e08a9ea84deb17ae121074d0f17125?s=70)](https://twitter.com/mathias "Follow @mathias on Twitter") | +|---| +| [Mathias Bynens](https://mathiasbynens.be/) | + +## License + +_he_ is available under the [MIT](http://mths.be/mit) license. diff --git a/node_modules/http-server/node_modules/ecstatic/node_modules/he/bin/he b/node_modules/http-server/node_modules/ecstatic/node_modules/he/bin/he new file mode 100755 index 0000000..234710c --- /dev/null +++ b/node_modules/http-server/node_modules/ecstatic/node_modules/he/bin/he @@ -0,0 +1,143 @@ +#!/usr/bin/env node +(function() { + + var fs = require('fs'); + var he = require('../he.js'); + var strings = process.argv.splice(2); + var stdin = process.stdin; + var data; + var timeout; + var action; + var options = {}; + var log = console.log; + + var main = function() { + var option = strings[0]; + var count = 0; + + if (/^(?:-h|--help|undefined)$/.test(option)) { + log( + 'he v%s - http://mths.be/he', + he.version + ); + log([ + '\nUsage:\n', + '\the [--escape] string', + '\the [--encode] [--use-named-refs] [--everything] [--allow-unsafe] string', + '\the [--decode] [--attribute] [--strict] string', + '\the [-v | --version]', + '\the [-h | --help]', + '\nExamples:\n', + '\the --escape \\', + '\techo \'© 𝌆\' | he --decode' + ].join('\n')); + return process.exit(1); + } + + if (/^(?:-v|--version)$/.test(option)) { + log('v%s', he.version); + return process.exit(1); + } + + strings.forEach(function(string) { + // Process options + if (string == '--escape') { + action = 'escape'; + return; + } + if (string == '--encode') { + action = 'encode'; + return; + } + if (string == '--use-named-refs') { + action = 'encode'; + options.useNamedReferences = true; + return; + } + if (string == '--everything') { + action = 'encode'; + options.encodeEverything = true; + return; + } + if (string == '--allow-unsafe') { + action = 'encode'; + options.allowUnsafeSymbols = true; + return; + } + if (string == '--decode') { + action = 'decode'; + return; + } + if (string == '--attribute') { + action = 'decode'; + options.isAttributeValue = true; + return; + } + if (string == '--strict') { + action = 'decode'; + options.strict = true; + return; + } + // Process string(s) + var result; + if (!action) { + log('Error: he requires at least one option and a string argument.'); + log('Try `he --help` for more information.'); + return process.exit(1); + } + try { + result = he[action](string, options); + log(result); + count++; + } catch(error) { + log(error.message + '\n'); + log('Error: failed to %s.', action); + log('If you think this is a bug in he, please report it:'); + log('https://github.com/mathiasbynens/he/issues/new'); + log( + '\nStack trace using he@%s:\n', + he.version + ); + log(error.stack); + return process.exit(1); + } + }); + if (!count) { + log('Error: he requires a string argument.'); + log('Try `he --help` for more information.'); + return process.exit(1); + } + // Return with exit status 0 outside of the `forEach` loop, in case + // multiple strings were passed in. + return process.exit(0); + }; + + if (stdin.isTTY) { + // handle shell arguments + main(); + } else { + // Either the script is called from within a non-TTY context, or `stdin` + // content is being piped in. + if (!process.stdout.isTTY) { + // The script was called from a non-TTY context. This is a rather uncommon + // use case we don’t actively support. However, we don’t want the script + // to wait forever in such cases, so… + timeout = setTimeout(function() { + // …if no piped data arrived after a whole minute, handle shell + // arguments instead. + main(); + }, 60000); + } + data = ''; + stdin.on('data', function(chunk) { + clearTimeout(timeout); + data += chunk; + }); + stdin.on('end', function() { + strings.push(data.trim()); + main(); + }); + stdin.resume(); + } + +}()); diff --git a/node_modules/http-server/node_modules/ecstatic/node_modules/he/he.js b/node_modules/http-server/node_modules/ecstatic/node_modules/he/he.js new file mode 100644 index 0000000..74b9fe1 --- /dev/null +++ b/node_modules/http-server/node_modules/ecstatic/node_modules/he/he.js @@ -0,0 +1,329 @@ +/*! http://mths.be/he v0.5.0 by @mathias | MIT license */ +;(function(root) { + + // Detect free variables `exports`. + var freeExports = typeof exports == 'object' && exports; + + // Detect free variable `module`. + var freeModule = typeof module == 'object' && module && + module.exports == freeExports && module; + + // Detect free variable `global`, from Node.js or Browserified code, + // and use it as `root`. + var freeGlobal = typeof global == 'object' && global; + if (freeGlobal.global === freeGlobal || freeGlobal.window === freeGlobal) { + root = freeGlobal; + } + + /*--------------------------------------------------------------------------*/ + + // All astral symbols. + var regexAstralSymbols = /[\uD800-\uDBFF][\uDC00-\uDFFF]/g; + // All ASCII symbols (not just printable ASCII) except those listed in the + // first column of the overrides table. + // http://whatwg.org/html/tokenization.html#table-charref-overrides + var regexAsciiWhitelist = /[\x01-\x7F]/g; + // All BMP symbols that are not ASCII newlines, printable ASCII symbols, or + // code points listed in the first column of the overrides table on + // http://whatwg.org/html/tokenization.html#table-charref-overrides. + var regexBmpWhitelist = /[\x01-\t\x0B\f\x0E-\x1F\x7F\x81\x8D\x8F\x90\x9D\xA0-\uFFFF]/g; + + var regexEncodeNonAscii = /<\u20D2|=\u20E5|>\u20D2|\u205F\u200A|\u219D\u0338|\u2202\u0338|\u2220\u20D2|\u2229\uFE00|\u222A\uFE00|\u223C\u20D2|\u223D\u0331|\u223E\u0333|\u2242\u0338|\u224B\u0338|\u224D\u20D2|\u224E\u0338|\u224F\u0338|\u2250\u0338|\u2261\u20E5|\u2264\u20D2|\u2265\u20D2|\u2266\u0338|\u2267\u0338|\u2268\uFE00|\u2269\uFE00|\u226A\u0338|\u226A\u20D2|\u226B\u0338|\u226B\u20D2|\u227F\u0338|\u2282\u20D2|\u2283\u20D2|\u228A\uFE00|\u228B\uFE00|\u228F\u0338|\u2290\u0338|\u2293\uFE00|\u2294\uFE00|\u22B4\u20D2|\u22B5\u20D2|\u22D8\u0338|\u22D9\u0338|\u22DA\uFE00|\u22DB\uFE00|\u22F5\u0338|\u22F9\u0338|\u2933\u0338|\u29CF\u0338|\u29D0\u0338|\u2A6D\u0338|\u2A70\u0338|\u2A7D\u0338|\u2A7E\u0338|\u2AA1\u0338|\u2AA2\u0338|\u2AAC\uFE00|\u2AAD\uFE00|\u2AAF\u0338|\u2AB0\u0338|\u2AC5\u0338|\u2AC6\u0338|\u2ACB\uFE00|\u2ACC\uFE00|\u2AFD\u20E5|[\xA0-\u0113\u0116-\u0122\u0124-\u012B\u012E-\u014D\u0150-\u017E\u0192\u01B5\u01F5\u0237\u02C6\u02C7\u02D8-\u02DD\u0311\u0391-\u03A1\u03A3-\u03A9\u03B1-\u03C9\u03D1\u03D2\u03D5\u03D6\u03DC\u03DD\u03F0\u03F1\u03F5\u03F6\u0401-\u040C\u040E-\u044F\u0451-\u045C\u045E\u045F\u2002-\u2005\u2007-\u2010\u2013-\u2016\u2018-\u201A\u201C-\u201E\u2020-\u2022\u2025\u2026\u2030-\u2035\u2039\u203A\u203E\u2041\u2043\u2044\u204F\u2057\u205F-\u2063\u20AC\u20DB\u20DC\u2102\u2105\u210A-\u2113\u2115-\u211E\u2122\u2124\u2127-\u2129\u212C\u212D\u212F-\u2131\u2133-\u2138\u2145-\u2148\u2153-\u215E\u2190-\u219B\u219D-\u21A7\u21A9-\u21AE\u21B0-\u21B3\u21B5-\u21B7\u21BA-\u21DB\u21DD\u21E4\u21E5\u21F5\u21FD-\u2205\u2207-\u2209\u220B\u220C\u220F-\u2214\u2216-\u2218\u221A\u221D-\u2238\u223A-\u2257\u2259\u225A\u225C\u225F-\u2262\u2264-\u228B\u228D-\u229B\u229D-\u22A5\u22A7-\u22B0\u22B2-\u22BB\u22BD-\u22DB\u22DE-\u22E3\u22E6-\u22F7\u22F9-\u22FE\u2305\u2306\u2308-\u2310\u2312\u2313\u2315\u2316\u231C-\u231F\u2322\u2323\u232D\u232E\u2336\u233D\u233F\u237C\u23B0\u23B1\u23B4-\u23B6\u23DC-\u23DF\u23E2\u23E7\u2423\u24C8\u2500\u2502\u250C\u2510\u2514\u2518\u251C\u2524\u252C\u2534\u253C\u2550-\u256C\u2580\u2584\u2588\u2591-\u2593\u25A1\u25AA\u25AB\u25AD\u25AE\u25B1\u25B3-\u25B5\u25B8\u25B9\u25BD-\u25BF\u25C2\u25C3\u25CA\u25CB\u25EC\u25EF\u25F8-\u25FC\u2605\u2606\u260E\u2640\u2642\u2660\u2663\u2665\u2666\u266A\u266D-\u266F\u2713\u2717\u2720\u2736\u2758\u2772\u2773\u27C8\u27C9\u27E6-\u27ED\u27F5-\u27FA\u27FC\u27FF\u2902-\u2905\u290C-\u2913\u2916\u2919-\u2920\u2923-\u292A\u2933\u2935-\u2939\u293C\u293D\u2945\u2948-\u294B\u294E-\u2976\u2978\u2979\u297B-\u297F\u2985\u2986\u298B-\u2996\u299A\u299C\u299D\u29A4-\u29B7\u29B9\u29BB\u29BC\u29BE-\u29C5\u29C9\u29CD-\u29D0\u29DC-\u29DE\u29E3-\u29E5\u29EB\u29F4\u29F6\u2A00-\u2A02\u2A04\u2A06\u2A0C\u2A0D\u2A10-\u2A17\u2A22-\u2A27\u2A29\u2A2A\u2A2D-\u2A31\u2A33-\u2A3C\u2A3F\u2A40\u2A42-\u2A4D\u2A50\u2A53-\u2A58\u2A5A-\u2A5D\u2A5F\u2A66\u2A6A\u2A6D-\u2A75\u2A77-\u2A9A\u2A9D-\u2AA2\u2AA4-\u2AB0\u2AB3-\u2AC8\u2ACB\u2ACC\u2ACF-\u2ADB\u2AE4\u2AE6-\u2AE9\u2AEB-\u2AF3\u2AFD\uFB00-\uFB04]|\uD835[\uDC9C\uDC9E\uDC9F\uDCA2\uDCA5\uDCA6\uDCA9-\uDCAC\uDCAE-\uDCB9\uDCBB\uDCBD-\uDCC3\uDCC5-\uDCCF\uDD04\uDD05\uDD07-\uDD0A\uDD0D-\uDD14\uDD16-\uDD1C\uDD1E-\uDD39\uDD3B-\uDD3E\uDD40-\uDD44\uDD46\uDD4A-\uDD50\uDD52-\uDD6B]/g; + var encodeMap = {'\xC1':'Aacute','\xE1':'aacute','\u0102':'Abreve','\u0103':'abreve','\u223E':'ac','\u223F':'acd','\u223E\u0333':'acE','\xC2':'Acirc','\xE2':'acirc','\xB4':'acute','\u0410':'Acy','\u0430':'acy','\xC6':'AElig','\xE6':'aelig','\u2061':'af','\uD835\uDD04':'Afr','\uD835\uDD1E':'afr','\xC0':'Agrave','\xE0':'agrave','\u2135':'aleph','\u0391':'Alpha','\u03B1':'alpha','\u0100':'Amacr','\u0101':'amacr','\u2A3F':'amalg','&':'amp','\u2A55':'andand','\u2A53':'And','\u2227':'and','\u2A5C':'andd','\u2A58':'andslope','\u2A5A':'andv','\u2220':'ang','\u29A4':'ange','\u29A8':'angmsdaa','\u29A9':'angmsdab','\u29AA':'angmsdac','\u29AB':'angmsdad','\u29AC':'angmsdae','\u29AD':'angmsdaf','\u29AE':'angmsdag','\u29AF':'angmsdah','\u2221':'angmsd','\u221F':'angrt','\u22BE':'angrtvb','\u299D':'angrtvbd','\u2222':'angsph','\xC5':'angst','\u237C':'angzarr','\u0104':'Aogon','\u0105':'aogon','\uD835\uDD38':'Aopf','\uD835\uDD52':'aopf','\u2A6F':'apacir','\u2248':'ap','\u2A70':'apE','\u224A':'ape','\u224B':'apid','\'':'apos','\xE5':'aring','\uD835\uDC9C':'Ascr','\uD835\uDCB6':'ascr','\u2254':'colone','*':'ast','\u224D':'CupCap','\xC3':'Atilde','\xE3':'atilde','\xC4':'Auml','\xE4':'auml','\u2233':'awconint','\u2A11':'awint','\u224C':'bcong','\u03F6':'bepsi','\u2035':'bprime','\u223D':'bsim','\u22CD':'bsime','\u2216':'setmn','\u2AE7':'Barv','\u22BD':'barvee','\u2305':'barwed','\u2306':'Barwed','\u23B5':'bbrk','\u23B6':'bbrktbrk','\u0411':'Bcy','\u0431':'bcy','\u201E':'bdquo','\u2235':'becaus','\u29B0':'bemptyv','\u212C':'Bscr','\u0392':'Beta','\u03B2':'beta','\u2136':'beth','\u226C':'twixt','\uD835\uDD05':'Bfr','\uD835\uDD1F':'bfr','\u22C2':'xcap','\u25EF':'xcirc','\u22C3':'xcup','\u2A00':'xodot','\u2A01':'xoplus','\u2A02':'xotime','\u2A06':'xsqcup','\u2605':'starf','\u25BD':'xdtri','\u25B3':'xutri','\u2A04':'xuplus','\u22C1':'Vee','\u22C0':'Wedge','\u290D':'rbarr','\u29EB':'lozf','\u25AA':'squf','\u25B4':'utrif','\u25BE':'dtrif','\u25C2':'ltrif','\u25B8':'rtrif','\u2423':'blank','\u2592':'blk12','\u2591':'blk14','\u2593':'blk34','\u2588':'block','=\u20E5':'bne','\u2261\u20E5':'bnequiv','\u2AED':'bNot','\u2310':'bnot','\uD835\uDD39':'Bopf','\uD835\uDD53':'bopf','\u22A5':'bot','\u22C8':'bowtie','\u29C9':'boxbox','\u2510':'boxdl','\u2555':'boxdL','\u2556':'boxDl','\u2557':'boxDL','\u250C':'boxdr','\u2552':'boxdR','\u2553':'boxDr','\u2554':'boxDR','\u2500':'boxh','\u2550':'boxH','\u252C':'boxhd','\u2564':'boxHd','\u2565':'boxhD','\u2566':'boxHD','\u2534':'boxhu','\u2567':'boxHu','\u2568':'boxhU','\u2569':'boxHU','\u229F':'minusb','\u229E':'plusb','\u22A0':'timesb','\u2518':'boxul','\u255B':'boxuL','\u255C':'boxUl','\u255D':'boxUL','\u2514':'boxur','\u2558':'boxuR','\u2559':'boxUr','\u255A':'boxUR','\u2502':'boxv','\u2551':'boxV','\u253C':'boxvh','\u256A':'boxvH','\u256B':'boxVh','\u256C':'boxVH','\u2524':'boxvl','\u2561':'boxvL','\u2562':'boxVl','\u2563':'boxVL','\u251C':'boxvr','\u255E':'boxvR','\u255F':'boxVr','\u2560':'boxVR','\u02D8':'breve','\xA6':'brvbar','\uD835\uDCB7':'bscr','\u204F':'bsemi','\u29C5':'bsolb','\\':'bsol','\u27C8':'bsolhsub','\u2022':'bull','\u224E':'bump','\u2AAE':'bumpE','\u224F':'bumpe','\u0106':'Cacute','\u0107':'cacute','\u2A44':'capand','\u2A49':'capbrcup','\u2A4B':'capcap','\u2229':'cap','\u22D2':'Cap','\u2A47':'capcup','\u2A40':'capdot','\u2145':'DD','\u2229\uFE00':'caps','\u2041':'caret','\u02C7':'caron','\u212D':'Cfr','\u2A4D':'ccaps','\u010C':'Ccaron','\u010D':'ccaron','\xC7':'Ccedil','\xE7':'ccedil','\u0108':'Ccirc','\u0109':'ccirc','\u2230':'Cconint','\u2A4C':'ccups','\u2A50':'ccupssm','\u010A':'Cdot','\u010B':'cdot','\xB8':'cedil','\u29B2':'cemptyv','\xA2':'cent','\xB7':'middot','\uD835\uDD20':'cfr','\u0427':'CHcy','\u0447':'chcy','\u2713':'check','\u03A7':'Chi','\u03C7':'chi','\u02C6':'circ','\u2257':'cire','\u21BA':'olarr','\u21BB':'orarr','\u229B':'oast','\u229A':'ocir','\u229D':'odash','\u2299':'odot','\xAE':'reg','\u24C8':'oS','\u2296':'ominus','\u2295':'oplus','\u2297':'otimes','\u25CB':'cir','\u29C3':'cirE','\u2A10':'cirfnint','\u2AEF':'cirmid','\u29C2':'cirscir','\u2232':'cwconint','\u201D':'rdquo','\u2019':'rsquo','\u2663':'clubs',':':'colon','\u2237':'Colon','\u2A74':'Colone',',':'comma','@':'commat','\u2201':'comp','\u2218':'compfn','\u2102':'Copf','\u2245':'cong','\u2A6D':'congdot','\u2261':'equiv','\u222E':'oint','\u222F':'Conint','\uD835\uDD54':'copf','\u2210':'coprod','\xA9':'copy','\u2117':'copysr','\u21B5':'crarr','\u2717':'cross','\u2A2F':'Cross','\uD835\uDC9E':'Cscr','\uD835\uDCB8':'cscr','\u2ACF':'csub','\u2AD1':'csube','\u2AD0':'csup','\u2AD2':'csupe','\u22EF':'ctdot','\u2938':'cudarrl','\u2935':'cudarrr','\u22DE':'cuepr','\u22DF':'cuesc','\u21B6':'cularr','\u293D':'cularrp','\u2A48':'cupbrcap','\u2A46':'cupcap','\u222A':'cup','\u22D3':'Cup','\u2A4A':'cupcup','\u228D':'cupdot','\u2A45':'cupor','\u222A\uFE00':'cups','\u21B7':'curarr','\u293C':'curarrm','\u22CE':'cuvee','\u22CF':'cuwed','\xA4':'curren','\u2231':'cwint','\u232D':'cylcty','\u2020':'dagger','\u2021':'Dagger','\u2138':'daleth','\u2193':'darr','\u21A1':'Darr','\u21D3':'dArr','\u2010':'dash','\u2AE4':'Dashv','\u22A3':'dashv','\u290F':'rBarr','\u02DD':'dblac','\u010E':'Dcaron','\u010F':'dcaron','\u0414':'Dcy','\u0434':'dcy','\u21CA':'ddarr','\u2146':'dd','\u2911':'DDotrahd','\u2A77':'eDDot','\xB0':'deg','\u2207':'Del','\u0394':'Delta','\u03B4':'delta','\u29B1':'demptyv','\u297F':'dfisht','\uD835\uDD07':'Dfr','\uD835\uDD21':'dfr','\u2965':'dHar','\u21C3':'dharl','\u21C2':'dharr','\u02D9':'dot','`':'grave','\u02DC':'tilde','\u22C4':'diam','\u2666':'diams','\xA8':'die','\u03DD':'gammad','\u22F2':'disin','\xF7':'div','\u22C7':'divonx','\u0402':'DJcy','\u0452':'djcy','\u231E':'dlcorn','\u230D':'dlcrop','$':'dollar','\uD835\uDD3B':'Dopf','\uD835\uDD55':'dopf','\u20DC':'DotDot','\u2250':'doteq','\u2251':'eDot','\u2238':'minusd','\u2214':'plusdo','\u22A1':'sdotb','\u21D0':'lArr','\u21D4':'iff','\u27F8':'xlArr','\u27FA':'xhArr','\u27F9':'xrArr','\u21D2':'rArr','\u22A8':'vDash','\u21D1':'uArr','\u21D5':'vArr','\u2225':'par','\u2913':'DownArrowBar','\u21F5':'duarr','\u0311':'DownBreve','\u2950':'DownLeftRightVector','\u295E':'DownLeftTeeVector','\u2956':'DownLeftVectorBar','\u21BD':'lhard','\u295F':'DownRightTeeVector','\u2957':'DownRightVectorBar','\u21C1':'rhard','\u21A7':'mapstodown','\u22A4':'top','\u2910':'RBarr','\u231F':'drcorn','\u230C':'drcrop','\uD835\uDC9F':'Dscr','\uD835\uDCB9':'dscr','\u0405':'DScy','\u0455':'dscy','\u29F6':'dsol','\u0110':'Dstrok','\u0111':'dstrok','\u22F1':'dtdot','\u25BF':'dtri','\u296F':'duhar','\u29A6':'dwangle','\u040F':'DZcy','\u045F':'dzcy','\u27FF':'dzigrarr','\xC9':'Eacute','\xE9':'eacute','\u2A6E':'easter','\u011A':'Ecaron','\u011B':'ecaron','\xCA':'Ecirc','\xEA':'ecirc','\u2256':'ecir','\u2255':'ecolon','\u042D':'Ecy','\u044D':'ecy','\u0116':'Edot','\u0117':'edot','\u2147':'ee','\u2252':'efDot','\uD835\uDD08':'Efr','\uD835\uDD22':'efr','\u2A9A':'eg','\xC8':'Egrave','\xE8':'egrave','\u2A96':'egs','\u2A98':'egsdot','\u2A99':'el','\u2208':'in','\u23E7':'elinters','\u2113':'ell','\u2A95':'els','\u2A97':'elsdot','\u0112':'Emacr','\u0113':'emacr','\u2205':'empty','\u25FB':'EmptySmallSquare','\u25AB':'EmptyVerySmallSquare','\u2004':'emsp13','\u2005':'emsp14','\u2003':'emsp','\u014A':'ENG','\u014B':'eng','\u2002':'ensp','\u0118':'Eogon','\u0119':'eogon','\uD835\uDD3C':'Eopf','\uD835\uDD56':'eopf','\u22D5':'epar','\u29E3':'eparsl','\u2A71':'eplus','\u03B5':'epsi','\u0395':'Epsilon','\u03F5':'epsiv','\u2242':'esim','\u2A75':'Equal','=':'equals','\u225F':'equest','\u21CC':'rlhar','\u2A78':'equivDD','\u29E5':'eqvparsl','\u2971':'erarr','\u2253':'erDot','\u212F':'escr','\u2130':'Escr','\u2A73':'Esim','\u0397':'Eta','\u03B7':'eta','\xD0':'ETH','\xF0':'eth','\xCB':'Euml','\xEB':'euml','\u20AC':'euro','!':'excl','\u2203':'exist','\u0424':'Fcy','\u0444':'fcy','\u2640':'female','\uFB03':'ffilig','\uFB00':'fflig','\uFB04':'ffllig','\uD835\uDD09':'Ffr','\uD835\uDD23':'ffr','\uFB01':'filig','\u25FC':'FilledSmallSquare','fj':'fjlig','\u266D':'flat','\uFB02':'fllig','\u25B1':'fltns','\u0192':'fnof','\uD835\uDD3D':'Fopf','\uD835\uDD57':'fopf','\u2200':'forall','\u22D4':'fork','\u2AD9':'forkv','\u2131':'Fscr','\u2A0D':'fpartint','\xBD':'half','\u2153':'frac13','\xBC':'frac14','\u2155':'frac15','\u2159':'frac16','\u215B':'frac18','\u2154':'frac23','\u2156':'frac25','\xBE':'frac34','\u2157':'frac35','\u215C':'frac38','\u2158':'frac45','\u215A':'frac56','\u215D':'frac58','\u215E':'frac78','\u2044':'frasl','\u2322':'frown','\uD835\uDCBB':'fscr','\u01F5':'gacute','\u0393':'Gamma','\u03B3':'gamma','\u03DC':'Gammad','\u2A86':'gap','\u011E':'Gbreve','\u011F':'gbreve','\u0122':'Gcedil','\u011C':'Gcirc','\u011D':'gcirc','\u0413':'Gcy','\u0433':'gcy','\u0120':'Gdot','\u0121':'gdot','\u2265':'ge','\u2267':'gE','\u2A8C':'gEl','\u22DB':'gel','\u2A7E':'ges','\u2AA9':'gescc','\u2A80':'gesdot','\u2A82':'gesdoto','\u2A84':'gesdotol','\u22DB\uFE00':'gesl','\u2A94':'gesles','\uD835\uDD0A':'Gfr','\uD835\uDD24':'gfr','\u226B':'gg','\u22D9':'Gg','\u2137':'gimel','\u0403':'GJcy','\u0453':'gjcy','\u2AA5':'gla','\u2277':'gl','\u2A92':'glE','\u2AA4':'glj','\u2A8A':'gnap','\u2A88':'gne','\u2269':'gnE','\u22E7':'gnsim','\uD835\uDD3E':'Gopf','\uD835\uDD58':'gopf','\u2AA2':'GreaterGreater','\u2273':'gsim','\uD835\uDCA2':'Gscr','\u210A':'gscr','\u2A8E':'gsime','\u2A90':'gsiml','\u2AA7':'gtcc','\u2A7A':'gtcir','>':'gt','\u22D7':'gtdot','\u2995':'gtlPar','\u2A7C':'gtquest','\u2978':'gtrarr','\u2269\uFE00':'gvnE','\u200A':'hairsp','\u210B':'Hscr','\u042A':'HARDcy','\u044A':'hardcy','\u2948':'harrcir','\u2194':'harr','\u21AD':'harrw','^':'Hat','\u210F':'hbar','\u0124':'Hcirc','\u0125':'hcirc','\u2665':'hearts','\u2026':'mldr','\u22B9':'hercon','\uD835\uDD25':'hfr','\u210C':'Hfr','\u2925':'searhk','\u2926':'swarhk','\u21FF':'hoarr','\u223B':'homtht','\u21A9':'larrhk','\u21AA':'rarrhk','\uD835\uDD59':'hopf','\u210D':'Hopf','\u2015':'horbar','\uD835\uDCBD':'hscr','\u0126':'Hstrok','\u0127':'hstrok','\u2043':'hybull','\xCD':'Iacute','\xED':'iacute','\u2063':'ic','\xCE':'Icirc','\xEE':'icirc','\u0418':'Icy','\u0438':'icy','\u0130':'Idot','\u0415':'IEcy','\u0435':'iecy','\xA1':'iexcl','\uD835\uDD26':'ifr','\u2111':'Im','\xCC':'Igrave','\xEC':'igrave','\u2148':'ii','\u2A0C':'qint','\u222D':'tint','\u29DC':'iinfin','\u2129':'iiota','\u0132':'IJlig','\u0133':'ijlig','\u012A':'Imacr','\u012B':'imacr','\u2110':'Iscr','\u0131':'imath','\u22B7':'imof','\u01B5':'imped','\u2105':'incare','\u221E':'infin','\u29DD':'infintie','\u22BA':'intcal','\u222B':'int','\u222C':'Int','\u2124':'Zopf','\u2A17':'intlarhk','\u2A3C':'iprod','\u2062':'it','\u0401':'IOcy','\u0451':'iocy','\u012E':'Iogon','\u012F':'iogon','\uD835\uDD40':'Iopf','\uD835\uDD5A':'iopf','\u0399':'Iota','\u03B9':'iota','\xBF':'iquest','\uD835\uDCBE':'iscr','\u22F5':'isindot','\u22F9':'isinE','\u22F4':'isins','\u22F3':'isinsv','\u0128':'Itilde','\u0129':'itilde','\u0406':'Iukcy','\u0456':'iukcy','\xCF':'Iuml','\xEF':'iuml','\u0134':'Jcirc','\u0135':'jcirc','\u0419':'Jcy','\u0439':'jcy','\uD835\uDD0D':'Jfr','\uD835\uDD27':'jfr','\u0237':'jmath','\uD835\uDD41':'Jopf','\uD835\uDD5B':'jopf','\uD835\uDCA5':'Jscr','\uD835\uDCBF':'jscr','\u0408':'Jsercy','\u0458':'jsercy','\u0404':'Jukcy','\u0454':'jukcy','\u039A':'Kappa','\u03BA':'kappa','\u03F0':'kappav','\u0136':'Kcedil','\u0137':'kcedil','\u041A':'Kcy','\u043A':'kcy','\uD835\uDD0E':'Kfr','\uD835\uDD28':'kfr','\u0138':'kgreen','\u0425':'KHcy','\u0445':'khcy','\u040C':'KJcy','\u045C':'kjcy','\uD835\uDD42':'Kopf','\uD835\uDD5C':'kopf','\uD835\uDCA6':'Kscr','\uD835\uDCC0':'kscr','\u21DA':'lAarr','\u0139':'Lacute','\u013A':'lacute','\u29B4':'laemptyv','\u2112':'Lscr','\u039B':'Lambda','\u03BB':'lambda','\u27E8':'lang','\u27EA':'Lang','\u2991':'langd','\u2A85':'lap','\xAB':'laquo','\u21E4':'larrb','\u291F':'larrbfs','\u2190':'larr','\u219E':'Larr','\u291D':'larrfs','\u21AB':'larrlp','\u2939':'larrpl','\u2973':'larrsim','\u21A2':'larrtl','\u2919':'latail','\u291B':'lAtail','\u2AAB':'lat','\u2AAD':'late','\u2AAD\uFE00':'lates','\u290C':'lbarr','\u290E':'lBarr','\u2772':'lbbrk','{':'lcub','[':'lsqb','\u298B':'lbrke','\u298F':'lbrksld','\u298D':'lbrkslu','\u013D':'Lcaron','\u013E':'lcaron','\u013B':'Lcedil','\u013C':'lcedil','\u2308':'lceil','\u041B':'Lcy','\u043B':'lcy','\u2936':'ldca','\u201C':'ldquo','\u2967':'ldrdhar','\u294B':'ldrushar','\u21B2':'ldsh','\u2264':'le','\u2266':'lE','\u21C6':'lrarr','\u27E6':'lobrk','\u2961':'LeftDownTeeVector','\u2959':'LeftDownVectorBar','\u230A':'lfloor','\u21BC':'lharu','\u21C7':'llarr','\u21CB':'lrhar','\u294E':'LeftRightVector','\u21A4':'mapstoleft','\u295A':'LeftTeeVector','\u22CB':'lthree','\u29CF':'LeftTriangleBar','\u22B2':'vltri','\u22B4':'ltrie','\u2951':'LeftUpDownVector','\u2960':'LeftUpTeeVector','\u2958':'LeftUpVectorBar','\u21BF':'uharl','\u2952':'LeftVectorBar','\u2A8B':'lEg','\u22DA':'leg','\u2A7D':'les','\u2AA8':'lescc','\u2A7F':'lesdot','\u2A81':'lesdoto','\u2A83':'lesdotor','\u22DA\uFE00':'lesg','\u2A93':'lesges','\u22D6':'ltdot','\u2276':'lg','\u2AA1':'LessLess','\u2272':'lsim','\u297C':'lfisht','\uD835\uDD0F':'Lfr','\uD835\uDD29':'lfr','\u2A91':'lgE','\u2962':'lHar','\u296A':'lharul','\u2584':'lhblk','\u0409':'LJcy','\u0459':'ljcy','\u226A':'ll','\u22D8':'Ll','\u296B':'llhard','\u25FA':'lltri','\u013F':'Lmidot','\u0140':'lmidot','\u23B0':'lmoust','\u2A89':'lnap','\u2A87':'lne','\u2268':'lnE','\u22E6':'lnsim','\u27EC':'loang','\u21FD':'loarr','\u27F5':'xlarr','\u27F7':'xharr','\u27FC':'xmap','\u27F6':'xrarr','\u21AC':'rarrlp','\u2985':'lopar','\uD835\uDD43':'Lopf','\uD835\uDD5D':'lopf','\u2A2D':'loplus','\u2A34':'lotimes','\u2217':'lowast','_':'lowbar','\u2199':'swarr','\u2198':'searr','\u25CA':'loz','(':'lpar','\u2993':'lparlt','\u296D':'lrhard','\u200E':'lrm','\u22BF':'lrtri','\u2039':'lsaquo','\uD835\uDCC1':'lscr','\u21B0':'lsh','\u2A8D':'lsime','\u2A8F':'lsimg','\u2018':'lsquo','\u201A':'sbquo','\u0141':'Lstrok','\u0142':'lstrok','\u2AA6':'ltcc','\u2A79':'ltcir','<':'lt','\u22C9':'ltimes','\u2976':'ltlarr','\u2A7B':'ltquest','\u25C3':'ltri','\u2996':'ltrPar','\u294A':'lurdshar','\u2966':'luruhar','\u2268\uFE00':'lvnE','\xAF':'macr','\u2642':'male','\u2720':'malt','\u2905':'Map','\u21A6':'map','\u21A5':'mapstoup','\u25AE':'marker','\u2A29':'mcomma','\u041C':'Mcy','\u043C':'mcy','\u2014':'mdash','\u223A':'mDDot','\u205F':'MediumSpace','\u2133':'Mscr','\uD835\uDD10':'Mfr','\uD835\uDD2A':'mfr','\u2127':'mho','\xB5':'micro','\u2AF0':'midcir','\u2223':'mid','\u2212':'minus','\u2A2A':'minusdu','\u2213':'mp','\u2ADB':'mlcp','\u22A7':'models','\uD835\uDD44':'Mopf','\uD835\uDD5E':'mopf','\uD835\uDCC2':'mscr','\u039C':'Mu','\u03BC':'mu','\u22B8':'mumap','\u0143':'Nacute','\u0144':'nacute','\u2220\u20D2':'nang','\u2249':'nap','\u2A70\u0338':'napE','\u224B\u0338':'napid','\u0149':'napos','\u266E':'natur','\u2115':'Nopf','\xA0':'nbsp','\u224E\u0338':'nbump','\u224F\u0338':'nbumpe','\u2A43':'ncap','\u0147':'Ncaron','\u0148':'ncaron','\u0145':'Ncedil','\u0146':'ncedil','\u2247':'ncong','\u2A6D\u0338':'ncongdot','\u2A42':'ncup','\u041D':'Ncy','\u043D':'ncy','\u2013':'ndash','\u2924':'nearhk','\u2197':'nearr','\u21D7':'neArr','\u2260':'ne','\u2250\u0338':'nedot','\u200B':'ZeroWidthSpace','\u2262':'nequiv','\u2928':'toea','\u2242\u0338':'nesim','\n':'NewLine','\u2204':'nexist','\uD835\uDD11':'Nfr','\uD835\uDD2B':'nfr','\u2267\u0338':'ngE','\u2271':'nge','\u2A7E\u0338':'nges','\u22D9\u0338':'nGg','\u2275':'ngsim','\u226B\u20D2':'nGt','\u226F':'ngt','\u226B\u0338':'nGtv','\u21AE':'nharr','\u21CE':'nhArr','\u2AF2':'nhpar','\u220B':'ni','\u22FC':'nis','\u22FA':'nisd','\u040A':'NJcy','\u045A':'njcy','\u219A':'nlarr','\u21CD':'nlArr','\u2025':'nldr','\u2266\u0338':'nlE','\u2270':'nle','\u2A7D\u0338':'nles','\u226E':'nlt','\u22D8\u0338':'nLl','\u2274':'nlsim','\u226A\u20D2':'nLt','\u22EA':'nltri','\u22EC':'nltrie','\u226A\u0338':'nLtv','\u2224':'nmid','\u2060':'NoBreak','\uD835\uDD5F':'nopf','\u2AEC':'Not','\xAC':'not','\u226D':'NotCupCap','\u2226':'npar','\u2209':'notin','\u2279':'ntgl','\u22F5\u0338':'notindot','\u22F9\u0338':'notinE','\u22F7':'notinvb','\u22F6':'notinvc','\u29CF\u0338':'NotLeftTriangleBar','\u2278':'ntlg','\u2AA2\u0338':'NotNestedGreaterGreater','\u2AA1\u0338':'NotNestedLessLess','\u220C':'notni','\u22FE':'notnivb','\u22FD':'notnivc','\u2280':'npr','\u2AAF\u0338':'npre','\u22E0':'nprcue','\u29D0\u0338':'NotRightTriangleBar','\u22EB':'nrtri','\u22ED':'nrtrie','\u228F\u0338':'NotSquareSubset','\u22E2':'nsqsube','\u2290\u0338':'NotSquareSuperset','\u22E3':'nsqsupe','\u2282\u20D2':'vnsub','\u2288':'nsube','\u2281':'nsc','\u2AB0\u0338':'nsce','\u22E1':'nsccue','\u227F\u0338':'NotSucceedsTilde','\u2283\u20D2':'vnsup','\u2289':'nsupe','\u2241':'nsim','\u2244':'nsime','\u2AFD\u20E5':'nparsl','\u2202\u0338':'npart','\u2A14':'npolint','\u2933\u0338':'nrarrc','\u219B':'nrarr','\u21CF':'nrArr','\u219D\u0338':'nrarrw','\uD835\uDCA9':'Nscr','\uD835\uDCC3':'nscr','\u2284':'nsub','\u2AC5\u0338':'nsubE','\u2285':'nsup','\u2AC6\u0338':'nsupE','\xD1':'Ntilde','\xF1':'ntilde','\u039D':'Nu','\u03BD':'nu','#':'num','\u2116':'numero','\u2007':'numsp','\u224D\u20D2':'nvap','\u22AC':'nvdash','\u22AD':'nvDash','\u22AE':'nVdash','\u22AF':'nVDash','\u2265\u20D2':'nvge','>\u20D2':'nvgt','\u2904':'nvHarr','\u29DE':'nvinfin','\u2902':'nvlArr','\u2264\u20D2':'nvle','<\u20D2':'nvlt','\u22B4\u20D2':'nvltrie','\u2903':'nvrArr','\u22B5\u20D2':'nvrtrie','\u223C\u20D2':'nvsim','\u2923':'nwarhk','\u2196':'nwarr','\u21D6':'nwArr','\u2927':'nwnear','\xD3':'Oacute','\xF3':'oacute','\xD4':'Ocirc','\xF4':'ocirc','\u041E':'Ocy','\u043E':'ocy','\u0150':'Odblac','\u0151':'odblac','\u2A38':'odiv','\u29BC':'odsold','\u0152':'OElig','\u0153':'oelig','\u29BF':'ofcir','\uD835\uDD12':'Ofr','\uD835\uDD2C':'ofr','\u02DB':'ogon','\xD2':'Ograve','\xF2':'ograve','\u29C1':'ogt','\u29B5':'ohbar','\u03A9':'ohm','\u29BE':'olcir','\u29BB':'olcross','\u203E':'oline','\u29C0':'olt','\u014C':'Omacr','\u014D':'omacr','\u03C9':'omega','\u039F':'Omicron','\u03BF':'omicron','\u29B6':'omid','\uD835\uDD46':'Oopf','\uD835\uDD60':'oopf','\u29B7':'opar','\u29B9':'operp','\u2A54':'Or','\u2228':'or','\u2A5D':'ord','\u2134':'oscr','\xAA':'ordf','\xBA':'ordm','\u22B6':'origof','\u2A56':'oror','\u2A57':'orslope','\u2A5B':'orv','\uD835\uDCAA':'Oscr','\xD8':'Oslash','\xF8':'oslash','\u2298':'osol','\xD5':'Otilde','\xF5':'otilde','\u2A36':'otimesas','\u2A37':'Otimes','\xD6':'Ouml','\xF6':'ouml','\u233D':'ovbar','\u23DE':'OverBrace','\u23B4':'tbrk','\u23DC':'OverParenthesis','\xB6':'para','\u2AF3':'parsim','\u2AFD':'parsl','\u2202':'part','\u041F':'Pcy','\u043F':'pcy','%':'percnt','.':'period','\u2030':'permil','\u2031':'pertenk','\uD835\uDD13':'Pfr','\uD835\uDD2D':'pfr','\u03A6':'Phi','\u03C6':'phi','\u03D5':'phiv','\u260E':'phone','\u03A0':'Pi','\u03C0':'pi','\u03D6':'piv','\u210E':'planckh','\u2A23':'plusacir','\u2A22':'pluscir','+':'plus','\u2A25':'plusdu','\u2A72':'pluse','\xB1':'pm','\u2A26':'plussim','\u2A27':'plustwo','\u2A15':'pointint','\uD835\uDD61':'popf','\u2119':'Popf','\xA3':'pound','\u2AB7':'prap','\u2ABB':'Pr','\u227A':'pr','\u227C':'prcue','\u2AAF':'pre','\u227E':'prsim','\u2AB9':'prnap','\u2AB5':'prnE','\u22E8':'prnsim','\u2AB3':'prE','\u2032':'prime','\u2033':'Prime','\u220F':'prod','\u232E':'profalar','\u2312':'profline','\u2313':'profsurf','\u221D':'prop','\u22B0':'prurel','\uD835\uDCAB':'Pscr','\uD835\uDCC5':'pscr','\u03A8':'Psi','\u03C8':'psi','\u2008':'puncsp','\uD835\uDD14':'Qfr','\uD835\uDD2E':'qfr','\uD835\uDD62':'qopf','\u211A':'Qopf','\u2057':'qprime','\uD835\uDCAC':'Qscr','\uD835\uDCC6':'qscr','\u2A16':'quatint','?':'quest','"':'quot','\u21DB':'rAarr','\u223D\u0331':'race','\u0154':'Racute','\u0155':'racute','\u221A':'Sqrt','\u29B3':'raemptyv','\u27E9':'rang','\u27EB':'Rang','\u2992':'rangd','\u29A5':'range','\xBB':'raquo','\u2975':'rarrap','\u21E5':'rarrb','\u2920':'rarrbfs','\u2933':'rarrc','\u2192':'rarr','\u21A0':'Rarr','\u291E':'rarrfs','\u2945':'rarrpl','\u2974':'rarrsim','\u2916':'Rarrtl','\u21A3':'rarrtl','\u219D':'rarrw','\u291A':'ratail','\u291C':'rAtail','\u2236':'ratio','\u2773':'rbbrk','}':'rcub',']':'rsqb','\u298C':'rbrke','\u298E':'rbrksld','\u2990':'rbrkslu','\u0158':'Rcaron','\u0159':'rcaron','\u0156':'Rcedil','\u0157':'rcedil','\u2309':'rceil','\u0420':'Rcy','\u0440':'rcy','\u2937':'rdca','\u2969':'rdldhar','\u21B3':'rdsh','\u211C':'Re','\u211B':'Rscr','\u211D':'Ropf','\u25AD':'rect','\u297D':'rfisht','\u230B':'rfloor','\uD835\uDD2F':'rfr','\u2964':'rHar','\u21C0':'rharu','\u296C':'rharul','\u03A1':'Rho','\u03C1':'rho','\u03F1':'rhov','\u21C4':'rlarr','\u27E7':'robrk','\u295D':'RightDownTeeVector','\u2955':'RightDownVectorBar','\u21C9':'rrarr','\u22A2':'vdash','\u295B':'RightTeeVector','\u22CC':'rthree','\u29D0':'RightTriangleBar','\u22B3':'vrtri','\u22B5':'rtrie','\u294F':'RightUpDownVector','\u295C':'RightUpTeeVector','\u2954':'RightUpVectorBar','\u21BE':'uharr','\u2953':'RightVectorBar','\u02DA':'ring','\u200F':'rlm','\u23B1':'rmoust','\u2AEE':'rnmid','\u27ED':'roang','\u21FE':'roarr','\u2986':'ropar','\uD835\uDD63':'ropf','\u2A2E':'roplus','\u2A35':'rotimes','\u2970':'RoundImplies',')':'rpar','\u2994':'rpargt','\u2A12':'rppolint','\u203A':'rsaquo','\uD835\uDCC7':'rscr','\u21B1':'rsh','\u22CA':'rtimes','\u25B9':'rtri','\u29CE':'rtriltri','\u29F4':'RuleDelayed','\u2968':'ruluhar','\u211E':'rx','\u015A':'Sacute','\u015B':'sacute','\u2AB8':'scap','\u0160':'Scaron','\u0161':'scaron','\u2ABC':'Sc','\u227B':'sc','\u227D':'sccue','\u2AB0':'sce','\u2AB4':'scE','\u015E':'Scedil','\u015F':'scedil','\u015C':'Scirc','\u015D':'scirc','\u2ABA':'scnap','\u2AB6':'scnE','\u22E9':'scnsim','\u2A13':'scpolint','\u227F':'scsim','\u0421':'Scy','\u0441':'scy','\u22C5':'sdot','\u2A66':'sdote','\u21D8':'seArr','\xA7':'sect',';':'semi','\u2929':'tosa','\u2736':'sext','\uD835\uDD16':'Sfr','\uD835\uDD30':'sfr','\u266F':'sharp','\u0429':'SHCHcy','\u0449':'shchcy','\u0428':'SHcy','\u0448':'shcy','\u2191':'uarr','\xAD':'shy','\u03A3':'Sigma','\u03C3':'sigma','\u03C2':'sigmaf','\u223C':'sim','\u2A6A':'simdot','\u2243':'sime','\u2A9E':'simg','\u2AA0':'simgE','\u2A9D':'siml','\u2A9F':'simlE','\u2246':'simne','\u2A24':'simplus','\u2972':'simrarr','\u2A33':'smashp','\u29E4':'smeparsl','\u2323':'smile','\u2AAA':'smt','\u2AAC':'smte','\u2AAC\uFE00':'smtes','\u042C':'SOFTcy','\u044C':'softcy','\u233F':'solbar','\u29C4':'solb','/':'sol','\uD835\uDD4A':'Sopf','\uD835\uDD64':'sopf','\u2660':'spades','\u2293':'sqcap','\u2293\uFE00':'sqcaps','\u2294':'sqcup','\u2294\uFE00':'sqcups','\u228F':'sqsub','\u2291':'sqsube','\u2290':'sqsup','\u2292':'sqsupe','\u25A1':'squ','\uD835\uDCAE':'Sscr','\uD835\uDCC8':'sscr','\u22C6':'Star','\u2606':'star','\u2282':'sub','\u22D0':'Sub','\u2ABD':'subdot','\u2AC5':'subE','\u2286':'sube','\u2AC3':'subedot','\u2AC1':'submult','\u2ACB':'subnE','\u228A':'subne','\u2ABF':'subplus','\u2979':'subrarr','\u2AC7':'subsim','\u2AD5':'subsub','\u2AD3':'subsup','\u2211':'sum','\u266A':'sung','\xB9':'sup1','\xB2':'sup2','\xB3':'sup3','\u2283':'sup','\u22D1':'Sup','\u2ABE':'supdot','\u2AD8':'supdsub','\u2AC6':'supE','\u2287':'supe','\u2AC4':'supedot','\u27C9':'suphsol','\u2AD7':'suphsub','\u297B':'suplarr','\u2AC2':'supmult','\u2ACC':'supnE','\u228B':'supne','\u2AC0':'supplus','\u2AC8':'supsim','\u2AD4':'supsub','\u2AD6':'supsup','\u21D9':'swArr','\u292A':'swnwar','\xDF':'szlig','\t':'Tab','\u2316':'target','\u03A4':'Tau','\u03C4':'tau','\u0164':'Tcaron','\u0165':'tcaron','\u0162':'Tcedil','\u0163':'tcedil','\u0422':'Tcy','\u0442':'tcy','\u20DB':'tdot','\u2315':'telrec','\uD835\uDD17':'Tfr','\uD835\uDD31':'tfr','\u2234':'there4','\u0398':'Theta','\u03B8':'theta','\u03D1':'thetav','\u205F\u200A':'ThickSpace','\u2009':'thinsp','\xDE':'THORN','\xFE':'thorn','\u2A31':'timesbar','\xD7':'times','\u2A30':'timesd','\u2336':'topbot','\u2AF1':'topcir','\uD835\uDD4B':'Topf','\uD835\uDD65':'topf','\u2ADA':'topfork','\u2034':'tprime','\u2122':'trade','\u25B5':'utri','\u225C':'trie','\u25EC':'tridot','\u2A3A':'triminus','\u2A39':'triplus','\u29CD':'trisb','\u2A3B':'tritime','\u23E2':'trpezium','\uD835\uDCAF':'Tscr','\uD835\uDCC9':'tscr','\u0426':'TScy','\u0446':'tscy','\u040B':'TSHcy','\u045B':'tshcy','\u0166':'Tstrok','\u0167':'tstrok','\xDA':'Uacute','\xFA':'uacute','\u219F':'Uarr','\u2949':'Uarrocir','\u040E':'Ubrcy','\u045E':'ubrcy','\u016C':'Ubreve','\u016D':'ubreve','\xDB':'Ucirc','\xFB':'ucirc','\u0423':'Ucy','\u0443':'ucy','\u21C5':'udarr','\u0170':'Udblac','\u0171':'udblac','\u296E':'udhar','\u297E':'ufisht','\uD835\uDD18':'Ufr','\uD835\uDD32':'ufr','\xD9':'Ugrave','\xF9':'ugrave','\u2963':'uHar','\u2580':'uhblk','\u231C':'ulcorn','\u230F':'ulcrop','\u25F8':'ultri','\u016A':'Umacr','\u016B':'umacr','\u23DF':'UnderBrace','\u23DD':'UnderParenthesis','\u228E':'uplus','\u0172':'Uogon','\u0173':'uogon','\uD835\uDD4C':'Uopf','\uD835\uDD66':'uopf','\u2912':'UpArrowBar','\u2195':'varr','\u03C5':'upsi','\u03D2':'Upsi','\u03A5':'Upsilon','\u21C8':'uuarr','\u231D':'urcorn','\u230E':'urcrop','\u016E':'Uring','\u016F':'uring','\u25F9':'urtri','\uD835\uDCB0':'Uscr','\uD835\uDCCA':'uscr','\u22F0':'utdot','\u0168':'Utilde','\u0169':'utilde','\xDC':'Uuml','\xFC':'uuml','\u29A7':'uwangle','\u299C':'vangrt','\u228A\uFE00':'vsubne','\u2ACB\uFE00':'vsubnE','\u228B\uFE00':'vsupne','\u2ACC\uFE00':'vsupnE','\u2AE8':'vBar','\u2AEB':'Vbar','\u2AE9':'vBarv','\u0412':'Vcy','\u0432':'vcy','\u22A9':'Vdash','\u22AB':'VDash','\u2AE6':'Vdashl','\u22BB':'veebar','\u225A':'veeeq','\u22EE':'vellip','|':'vert','\u2016':'Vert','\u2758':'VerticalSeparator','\u2240':'wr','\uD835\uDD19':'Vfr','\uD835\uDD33':'vfr','\uD835\uDD4D':'Vopf','\uD835\uDD67':'vopf','\uD835\uDCB1':'Vscr','\uD835\uDCCB':'vscr','\u22AA':'Vvdash','\u299A':'vzigzag','\u0174':'Wcirc','\u0175':'wcirc','\u2A5F':'wedbar','\u2259':'wedgeq','\u2118':'wp','\uD835\uDD1A':'Wfr','\uD835\uDD34':'wfr','\uD835\uDD4E':'Wopf','\uD835\uDD68':'wopf','\uD835\uDCB2':'Wscr','\uD835\uDCCC':'wscr','\uD835\uDD1B':'Xfr','\uD835\uDD35':'xfr','\u039E':'Xi','\u03BE':'xi','\u22FB':'xnis','\uD835\uDD4F':'Xopf','\uD835\uDD69':'xopf','\uD835\uDCB3':'Xscr','\uD835\uDCCD':'xscr','\xDD':'Yacute','\xFD':'yacute','\u042F':'YAcy','\u044F':'yacy','\u0176':'Ycirc','\u0177':'ycirc','\u042B':'Ycy','\u044B':'ycy','\xA5':'yen','\uD835\uDD1C':'Yfr','\uD835\uDD36':'yfr','\u0407':'YIcy','\u0457':'yicy','\uD835\uDD50':'Yopf','\uD835\uDD6A':'yopf','\uD835\uDCB4':'Yscr','\uD835\uDCCE':'yscr','\u042E':'YUcy','\u044E':'yucy','\xFF':'yuml','\u0178':'Yuml','\u0179':'Zacute','\u017A':'zacute','\u017D':'Zcaron','\u017E':'zcaron','\u0417':'Zcy','\u0437':'zcy','\u017B':'Zdot','\u017C':'zdot','\u2128':'Zfr','\u0396':'Zeta','\u03B6':'zeta','\uD835\uDD37':'zfr','\u0416':'ZHcy','\u0436':'zhcy','\u21DD':'zigrarr','\uD835\uDD6B':'zopf','\uD835\uDCB5':'Zscr','\uD835\uDCCF':'zscr','\u200D':'zwj','\u200C':'zwnj'}; + + var regexEscape = /["&'<>`]/g; + var escapeMap = { + '"': '"', + '&': '&', + '\'': ''', + '<': '<', + // See https://mathiasbynens.be/notes/ambiguous-ampersands: in HTML, the + // following is not strictly necessary unless it’s part of a tag or an + // unquoted attribute value. We’re only escaping it to support those + // situations, and for XML support. + '>': '>', + // In Internet Explorer ≤ 8, the backtick character can be used + // to break out of (un)quoted attribute values or HTML comments. + // See http://html5sec.org/#102, http://html5sec.org/#108, and + // http://html5sec.org/#133. + '`': '`' + }; + + var regexInvalidEntity = /&#(?:[xX][^a-fA-F0-9]|[^0-9xX])/; + var regexInvalidRawCodePoint = /[\0-\x08\x0B\x0E-\x1F\x7F-\x9F\uFDD0-\uFDEF\uFFFE\uFFFF]|[\uD83F\uD87F\uD8BF\uD8FF\uD93F\uD97F\uD9BF\uD9FF\uDA3F\uDA7F\uDABF\uDAFF\uDB3F\uDB7F\uDBBF\uDBFF][\uDFFE\uDFFF]|[\uD800-\uDBFF](?![\uDC00-\uDFFF])|(?:[^\uD800-\uDBFF]|^)[\uDC00-\uDFFF]/; + var regexDecode = /&#([0-9]+)(;?)|&#[xX]([a-fA-F0-9]+)(;?)|&([0-9a-zA-Z]+);|&(Aacute|iacute|Uacute|plusmn|otilde|Otilde|Agrave|agrave|yacute|Yacute|oslash|Oslash|Atilde|atilde|brvbar|Ccedil|ccedil|ograve|curren|divide|Eacute|eacute|Ograve|oacute|Egrave|egrave|ugrave|frac12|frac14|frac34|Ugrave|Oacute|Iacute|ntilde|Ntilde|uacute|middot|Igrave|igrave|iquest|aacute|laquo|THORN|micro|iexcl|icirc|Icirc|Acirc|ucirc|ecirc|Ocirc|ocirc|Ecirc|Ucirc|aring|Aring|aelig|AElig|acute|pound|raquo|acirc|times|thorn|szlig|cedil|COPY|Auml|ordf|ordm|uuml|macr|Uuml|auml|Ouml|ouml|para|nbsp|Euml|quot|QUOT|euml|yuml|cent|sect|copy|sup1|sup2|sup3|Iuml|iuml|shy|eth|reg|not|yen|amp|AMP|REG|uml|ETH|deg|gt|GT|LT|lt)([=a-zA-Z0-9])?/g; + var decodeMap = {'Aacute':'\xC1','aacute':'\xE1','Abreve':'\u0102','abreve':'\u0103','ac':'\u223E','acd':'\u223F','acE':'\u223E\u0333','Acirc':'\xC2','acirc':'\xE2','acute':'\xB4','Acy':'\u0410','acy':'\u0430','AElig':'\xC6','aelig':'\xE6','af':'\u2061','Afr':'\uD835\uDD04','afr':'\uD835\uDD1E','Agrave':'\xC0','agrave':'\xE0','alefsym':'\u2135','aleph':'\u2135','Alpha':'\u0391','alpha':'\u03B1','Amacr':'\u0100','amacr':'\u0101','amalg':'\u2A3F','amp':'&','AMP':'&','andand':'\u2A55','And':'\u2A53','and':'\u2227','andd':'\u2A5C','andslope':'\u2A58','andv':'\u2A5A','ang':'\u2220','ange':'\u29A4','angle':'\u2220','angmsdaa':'\u29A8','angmsdab':'\u29A9','angmsdac':'\u29AA','angmsdad':'\u29AB','angmsdae':'\u29AC','angmsdaf':'\u29AD','angmsdag':'\u29AE','angmsdah':'\u29AF','angmsd':'\u2221','angrt':'\u221F','angrtvb':'\u22BE','angrtvbd':'\u299D','angsph':'\u2222','angst':'\xC5','angzarr':'\u237C','Aogon':'\u0104','aogon':'\u0105','Aopf':'\uD835\uDD38','aopf':'\uD835\uDD52','apacir':'\u2A6F','ap':'\u2248','apE':'\u2A70','ape':'\u224A','apid':'\u224B','apos':'\'','ApplyFunction':'\u2061','approx':'\u2248','approxeq':'\u224A','Aring':'\xC5','aring':'\xE5','Ascr':'\uD835\uDC9C','ascr':'\uD835\uDCB6','Assign':'\u2254','ast':'*','asymp':'\u2248','asympeq':'\u224D','Atilde':'\xC3','atilde':'\xE3','Auml':'\xC4','auml':'\xE4','awconint':'\u2233','awint':'\u2A11','backcong':'\u224C','backepsilon':'\u03F6','backprime':'\u2035','backsim':'\u223D','backsimeq':'\u22CD','Backslash':'\u2216','Barv':'\u2AE7','barvee':'\u22BD','barwed':'\u2305','Barwed':'\u2306','barwedge':'\u2305','bbrk':'\u23B5','bbrktbrk':'\u23B6','bcong':'\u224C','Bcy':'\u0411','bcy':'\u0431','bdquo':'\u201E','becaus':'\u2235','because':'\u2235','Because':'\u2235','bemptyv':'\u29B0','bepsi':'\u03F6','bernou':'\u212C','Bernoullis':'\u212C','Beta':'\u0392','beta':'\u03B2','beth':'\u2136','between':'\u226C','Bfr':'\uD835\uDD05','bfr':'\uD835\uDD1F','bigcap':'\u22C2','bigcirc':'\u25EF','bigcup':'\u22C3','bigodot':'\u2A00','bigoplus':'\u2A01','bigotimes':'\u2A02','bigsqcup':'\u2A06','bigstar':'\u2605','bigtriangledown':'\u25BD','bigtriangleup':'\u25B3','biguplus':'\u2A04','bigvee':'\u22C1','bigwedge':'\u22C0','bkarow':'\u290D','blacklozenge':'\u29EB','blacksquare':'\u25AA','blacktriangle':'\u25B4','blacktriangledown':'\u25BE','blacktriangleleft':'\u25C2','blacktriangleright':'\u25B8','blank':'\u2423','blk12':'\u2592','blk14':'\u2591','blk34':'\u2593','block':'\u2588','bne':'=\u20E5','bnequiv':'\u2261\u20E5','bNot':'\u2AED','bnot':'\u2310','Bopf':'\uD835\uDD39','bopf':'\uD835\uDD53','bot':'\u22A5','bottom':'\u22A5','bowtie':'\u22C8','boxbox':'\u29C9','boxdl':'\u2510','boxdL':'\u2555','boxDl':'\u2556','boxDL':'\u2557','boxdr':'\u250C','boxdR':'\u2552','boxDr':'\u2553','boxDR':'\u2554','boxh':'\u2500','boxH':'\u2550','boxhd':'\u252C','boxHd':'\u2564','boxhD':'\u2565','boxHD':'\u2566','boxhu':'\u2534','boxHu':'\u2567','boxhU':'\u2568','boxHU':'\u2569','boxminus':'\u229F','boxplus':'\u229E','boxtimes':'\u22A0','boxul':'\u2518','boxuL':'\u255B','boxUl':'\u255C','boxUL':'\u255D','boxur':'\u2514','boxuR':'\u2558','boxUr':'\u2559','boxUR':'\u255A','boxv':'\u2502','boxV':'\u2551','boxvh':'\u253C','boxvH':'\u256A','boxVh':'\u256B','boxVH':'\u256C','boxvl':'\u2524','boxvL':'\u2561','boxVl':'\u2562','boxVL':'\u2563','boxvr':'\u251C','boxvR':'\u255E','boxVr':'\u255F','boxVR':'\u2560','bprime':'\u2035','breve':'\u02D8','Breve':'\u02D8','brvbar':'\xA6','bscr':'\uD835\uDCB7','Bscr':'\u212C','bsemi':'\u204F','bsim':'\u223D','bsime':'\u22CD','bsolb':'\u29C5','bsol':'\\','bsolhsub':'\u27C8','bull':'\u2022','bullet':'\u2022','bump':'\u224E','bumpE':'\u2AAE','bumpe':'\u224F','Bumpeq':'\u224E','bumpeq':'\u224F','Cacute':'\u0106','cacute':'\u0107','capand':'\u2A44','capbrcup':'\u2A49','capcap':'\u2A4B','cap':'\u2229','Cap':'\u22D2','capcup':'\u2A47','capdot':'\u2A40','CapitalDifferentialD':'\u2145','caps':'\u2229\uFE00','caret':'\u2041','caron':'\u02C7','Cayleys':'\u212D','ccaps':'\u2A4D','Ccaron':'\u010C','ccaron':'\u010D','Ccedil':'\xC7','ccedil':'\xE7','Ccirc':'\u0108','ccirc':'\u0109','Cconint':'\u2230','ccups':'\u2A4C','ccupssm':'\u2A50','Cdot':'\u010A','cdot':'\u010B','cedil':'\xB8','Cedilla':'\xB8','cemptyv':'\u29B2','cent':'\xA2','centerdot':'\xB7','CenterDot':'\xB7','cfr':'\uD835\uDD20','Cfr':'\u212D','CHcy':'\u0427','chcy':'\u0447','check':'\u2713','checkmark':'\u2713','Chi':'\u03A7','chi':'\u03C7','circ':'\u02C6','circeq':'\u2257','circlearrowleft':'\u21BA','circlearrowright':'\u21BB','circledast':'\u229B','circledcirc':'\u229A','circleddash':'\u229D','CircleDot':'\u2299','circledR':'\xAE','circledS':'\u24C8','CircleMinus':'\u2296','CirclePlus':'\u2295','CircleTimes':'\u2297','cir':'\u25CB','cirE':'\u29C3','cire':'\u2257','cirfnint':'\u2A10','cirmid':'\u2AEF','cirscir':'\u29C2','ClockwiseContourIntegral':'\u2232','CloseCurlyDoubleQuote':'\u201D','CloseCurlyQuote':'\u2019','clubs':'\u2663','clubsuit':'\u2663','colon':':','Colon':'\u2237','Colone':'\u2A74','colone':'\u2254','coloneq':'\u2254','comma':',','commat':'@','comp':'\u2201','compfn':'\u2218','complement':'\u2201','complexes':'\u2102','cong':'\u2245','congdot':'\u2A6D','Congruent':'\u2261','conint':'\u222E','Conint':'\u222F','ContourIntegral':'\u222E','copf':'\uD835\uDD54','Copf':'\u2102','coprod':'\u2210','Coproduct':'\u2210','copy':'\xA9','COPY':'\xA9','copysr':'\u2117','CounterClockwiseContourIntegral':'\u2233','crarr':'\u21B5','cross':'\u2717','Cross':'\u2A2F','Cscr':'\uD835\uDC9E','cscr':'\uD835\uDCB8','csub':'\u2ACF','csube':'\u2AD1','csup':'\u2AD0','csupe':'\u2AD2','ctdot':'\u22EF','cudarrl':'\u2938','cudarrr':'\u2935','cuepr':'\u22DE','cuesc':'\u22DF','cularr':'\u21B6','cularrp':'\u293D','cupbrcap':'\u2A48','cupcap':'\u2A46','CupCap':'\u224D','cup':'\u222A','Cup':'\u22D3','cupcup':'\u2A4A','cupdot':'\u228D','cupor':'\u2A45','cups':'\u222A\uFE00','curarr':'\u21B7','curarrm':'\u293C','curlyeqprec':'\u22DE','curlyeqsucc':'\u22DF','curlyvee':'\u22CE','curlywedge':'\u22CF','curren':'\xA4','curvearrowleft':'\u21B6','curvearrowright':'\u21B7','cuvee':'\u22CE','cuwed':'\u22CF','cwconint':'\u2232','cwint':'\u2231','cylcty':'\u232D','dagger':'\u2020','Dagger':'\u2021','daleth':'\u2138','darr':'\u2193','Darr':'\u21A1','dArr':'\u21D3','dash':'\u2010','Dashv':'\u2AE4','dashv':'\u22A3','dbkarow':'\u290F','dblac':'\u02DD','Dcaron':'\u010E','dcaron':'\u010F','Dcy':'\u0414','dcy':'\u0434','ddagger':'\u2021','ddarr':'\u21CA','DD':'\u2145','dd':'\u2146','DDotrahd':'\u2911','ddotseq':'\u2A77','deg':'\xB0','Del':'\u2207','Delta':'\u0394','delta':'\u03B4','demptyv':'\u29B1','dfisht':'\u297F','Dfr':'\uD835\uDD07','dfr':'\uD835\uDD21','dHar':'\u2965','dharl':'\u21C3','dharr':'\u21C2','DiacriticalAcute':'\xB4','DiacriticalDot':'\u02D9','DiacriticalDoubleAcute':'\u02DD','DiacriticalGrave':'`','DiacriticalTilde':'\u02DC','diam':'\u22C4','diamond':'\u22C4','Diamond':'\u22C4','diamondsuit':'\u2666','diams':'\u2666','die':'\xA8','DifferentialD':'\u2146','digamma':'\u03DD','disin':'\u22F2','div':'\xF7','divide':'\xF7','divideontimes':'\u22C7','divonx':'\u22C7','DJcy':'\u0402','djcy':'\u0452','dlcorn':'\u231E','dlcrop':'\u230D','dollar':'$','Dopf':'\uD835\uDD3B','dopf':'\uD835\uDD55','Dot':'\xA8','dot':'\u02D9','DotDot':'\u20DC','doteq':'\u2250','doteqdot':'\u2251','DotEqual':'\u2250','dotminus':'\u2238','dotplus':'\u2214','dotsquare':'\u22A1','doublebarwedge':'\u2306','DoubleContourIntegral':'\u222F','DoubleDot':'\xA8','DoubleDownArrow':'\u21D3','DoubleLeftArrow':'\u21D0','DoubleLeftRightArrow':'\u21D4','DoubleLeftTee':'\u2AE4','DoubleLongLeftArrow':'\u27F8','DoubleLongLeftRightArrow':'\u27FA','DoubleLongRightArrow':'\u27F9','DoubleRightArrow':'\u21D2','DoubleRightTee':'\u22A8','DoubleUpArrow':'\u21D1','DoubleUpDownArrow':'\u21D5','DoubleVerticalBar':'\u2225','DownArrowBar':'\u2913','downarrow':'\u2193','DownArrow':'\u2193','Downarrow':'\u21D3','DownArrowUpArrow':'\u21F5','DownBreve':'\u0311','downdownarrows':'\u21CA','downharpoonleft':'\u21C3','downharpoonright':'\u21C2','DownLeftRightVector':'\u2950','DownLeftTeeVector':'\u295E','DownLeftVectorBar':'\u2956','DownLeftVector':'\u21BD','DownRightTeeVector':'\u295F','DownRightVectorBar':'\u2957','DownRightVector':'\u21C1','DownTeeArrow':'\u21A7','DownTee':'\u22A4','drbkarow':'\u2910','drcorn':'\u231F','drcrop':'\u230C','Dscr':'\uD835\uDC9F','dscr':'\uD835\uDCB9','DScy':'\u0405','dscy':'\u0455','dsol':'\u29F6','Dstrok':'\u0110','dstrok':'\u0111','dtdot':'\u22F1','dtri':'\u25BF','dtrif':'\u25BE','duarr':'\u21F5','duhar':'\u296F','dwangle':'\u29A6','DZcy':'\u040F','dzcy':'\u045F','dzigrarr':'\u27FF','Eacute':'\xC9','eacute':'\xE9','easter':'\u2A6E','Ecaron':'\u011A','ecaron':'\u011B','Ecirc':'\xCA','ecirc':'\xEA','ecir':'\u2256','ecolon':'\u2255','Ecy':'\u042D','ecy':'\u044D','eDDot':'\u2A77','Edot':'\u0116','edot':'\u0117','eDot':'\u2251','ee':'\u2147','efDot':'\u2252','Efr':'\uD835\uDD08','efr':'\uD835\uDD22','eg':'\u2A9A','Egrave':'\xC8','egrave':'\xE8','egs':'\u2A96','egsdot':'\u2A98','el':'\u2A99','Element':'\u2208','elinters':'\u23E7','ell':'\u2113','els':'\u2A95','elsdot':'\u2A97','Emacr':'\u0112','emacr':'\u0113','empty':'\u2205','emptyset':'\u2205','EmptySmallSquare':'\u25FB','emptyv':'\u2205','EmptyVerySmallSquare':'\u25AB','emsp13':'\u2004','emsp14':'\u2005','emsp':'\u2003','ENG':'\u014A','eng':'\u014B','ensp':'\u2002','Eogon':'\u0118','eogon':'\u0119','Eopf':'\uD835\uDD3C','eopf':'\uD835\uDD56','epar':'\u22D5','eparsl':'\u29E3','eplus':'\u2A71','epsi':'\u03B5','Epsilon':'\u0395','epsilon':'\u03B5','epsiv':'\u03F5','eqcirc':'\u2256','eqcolon':'\u2255','eqsim':'\u2242','eqslantgtr':'\u2A96','eqslantless':'\u2A95','Equal':'\u2A75','equals':'=','EqualTilde':'\u2242','equest':'\u225F','Equilibrium':'\u21CC','equiv':'\u2261','equivDD':'\u2A78','eqvparsl':'\u29E5','erarr':'\u2971','erDot':'\u2253','escr':'\u212F','Escr':'\u2130','esdot':'\u2250','Esim':'\u2A73','esim':'\u2242','Eta':'\u0397','eta':'\u03B7','ETH':'\xD0','eth':'\xF0','Euml':'\xCB','euml':'\xEB','euro':'\u20AC','excl':'!','exist':'\u2203','Exists':'\u2203','expectation':'\u2130','exponentiale':'\u2147','ExponentialE':'\u2147','fallingdotseq':'\u2252','Fcy':'\u0424','fcy':'\u0444','female':'\u2640','ffilig':'\uFB03','fflig':'\uFB00','ffllig':'\uFB04','Ffr':'\uD835\uDD09','ffr':'\uD835\uDD23','filig':'\uFB01','FilledSmallSquare':'\u25FC','FilledVerySmallSquare':'\u25AA','fjlig':'fj','flat':'\u266D','fllig':'\uFB02','fltns':'\u25B1','fnof':'\u0192','Fopf':'\uD835\uDD3D','fopf':'\uD835\uDD57','forall':'\u2200','ForAll':'\u2200','fork':'\u22D4','forkv':'\u2AD9','Fouriertrf':'\u2131','fpartint':'\u2A0D','frac12':'\xBD','frac13':'\u2153','frac14':'\xBC','frac15':'\u2155','frac16':'\u2159','frac18':'\u215B','frac23':'\u2154','frac25':'\u2156','frac34':'\xBE','frac35':'\u2157','frac38':'\u215C','frac45':'\u2158','frac56':'\u215A','frac58':'\u215D','frac78':'\u215E','frasl':'\u2044','frown':'\u2322','fscr':'\uD835\uDCBB','Fscr':'\u2131','gacute':'\u01F5','Gamma':'\u0393','gamma':'\u03B3','Gammad':'\u03DC','gammad':'\u03DD','gap':'\u2A86','Gbreve':'\u011E','gbreve':'\u011F','Gcedil':'\u0122','Gcirc':'\u011C','gcirc':'\u011D','Gcy':'\u0413','gcy':'\u0433','Gdot':'\u0120','gdot':'\u0121','ge':'\u2265','gE':'\u2267','gEl':'\u2A8C','gel':'\u22DB','geq':'\u2265','geqq':'\u2267','geqslant':'\u2A7E','gescc':'\u2AA9','ges':'\u2A7E','gesdot':'\u2A80','gesdoto':'\u2A82','gesdotol':'\u2A84','gesl':'\u22DB\uFE00','gesles':'\u2A94','Gfr':'\uD835\uDD0A','gfr':'\uD835\uDD24','gg':'\u226B','Gg':'\u22D9','ggg':'\u22D9','gimel':'\u2137','GJcy':'\u0403','gjcy':'\u0453','gla':'\u2AA5','gl':'\u2277','glE':'\u2A92','glj':'\u2AA4','gnap':'\u2A8A','gnapprox':'\u2A8A','gne':'\u2A88','gnE':'\u2269','gneq':'\u2A88','gneqq':'\u2269','gnsim':'\u22E7','Gopf':'\uD835\uDD3E','gopf':'\uD835\uDD58','grave':'`','GreaterEqual':'\u2265','GreaterEqualLess':'\u22DB','GreaterFullEqual':'\u2267','GreaterGreater':'\u2AA2','GreaterLess':'\u2277','GreaterSlantEqual':'\u2A7E','GreaterTilde':'\u2273','Gscr':'\uD835\uDCA2','gscr':'\u210A','gsim':'\u2273','gsime':'\u2A8E','gsiml':'\u2A90','gtcc':'\u2AA7','gtcir':'\u2A7A','gt':'>','GT':'>','Gt':'\u226B','gtdot':'\u22D7','gtlPar':'\u2995','gtquest':'\u2A7C','gtrapprox':'\u2A86','gtrarr':'\u2978','gtrdot':'\u22D7','gtreqless':'\u22DB','gtreqqless':'\u2A8C','gtrless':'\u2277','gtrsim':'\u2273','gvertneqq':'\u2269\uFE00','gvnE':'\u2269\uFE00','Hacek':'\u02C7','hairsp':'\u200A','half':'\xBD','hamilt':'\u210B','HARDcy':'\u042A','hardcy':'\u044A','harrcir':'\u2948','harr':'\u2194','hArr':'\u21D4','harrw':'\u21AD','Hat':'^','hbar':'\u210F','Hcirc':'\u0124','hcirc':'\u0125','hearts':'\u2665','heartsuit':'\u2665','hellip':'\u2026','hercon':'\u22B9','hfr':'\uD835\uDD25','Hfr':'\u210C','HilbertSpace':'\u210B','hksearow':'\u2925','hkswarow':'\u2926','hoarr':'\u21FF','homtht':'\u223B','hookleftarrow':'\u21A9','hookrightarrow':'\u21AA','hopf':'\uD835\uDD59','Hopf':'\u210D','horbar':'\u2015','HorizontalLine':'\u2500','hscr':'\uD835\uDCBD','Hscr':'\u210B','hslash':'\u210F','Hstrok':'\u0126','hstrok':'\u0127','HumpDownHump':'\u224E','HumpEqual':'\u224F','hybull':'\u2043','hyphen':'\u2010','Iacute':'\xCD','iacute':'\xED','ic':'\u2063','Icirc':'\xCE','icirc':'\xEE','Icy':'\u0418','icy':'\u0438','Idot':'\u0130','IEcy':'\u0415','iecy':'\u0435','iexcl':'\xA1','iff':'\u21D4','ifr':'\uD835\uDD26','Ifr':'\u2111','Igrave':'\xCC','igrave':'\xEC','ii':'\u2148','iiiint':'\u2A0C','iiint':'\u222D','iinfin':'\u29DC','iiota':'\u2129','IJlig':'\u0132','ijlig':'\u0133','Imacr':'\u012A','imacr':'\u012B','image':'\u2111','ImaginaryI':'\u2148','imagline':'\u2110','imagpart':'\u2111','imath':'\u0131','Im':'\u2111','imof':'\u22B7','imped':'\u01B5','Implies':'\u21D2','incare':'\u2105','in':'\u2208','infin':'\u221E','infintie':'\u29DD','inodot':'\u0131','intcal':'\u22BA','int':'\u222B','Int':'\u222C','integers':'\u2124','Integral':'\u222B','intercal':'\u22BA','Intersection':'\u22C2','intlarhk':'\u2A17','intprod':'\u2A3C','InvisibleComma':'\u2063','InvisibleTimes':'\u2062','IOcy':'\u0401','iocy':'\u0451','Iogon':'\u012E','iogon':'\u012F','Iopf':'\uD835\uDD40','iopf':'\uD835\uDD5A','Iota':'\u0399','iota':'\u03B9','iprod':'\u2A3C','iquest':'\xBF','iscr':'\uD835\uDCBE','Iscr':'\u2110','isin':'\u2208','isindot':'\u22F5','isinE':'\u22F9','isins':'\u22F4','isinsv':'\u22F3','isinv':'\u2208','it':'\u2062','Itilde':'\u0128','itilde':'\u0129','Iukcy':'\u0406','iukcy':'\u0456','Iuml':'\xCF','iuml':'\xEF','Jcirc':'\u0134','jcirc':'\u0135','Jcy':'\u0419','jcy':'\u0439','Jfr':'\uD835\uDD0D','jfr':'\uD835\uDD27','jmath':'\u0237','Jopf':'\uD835\uDD41','jopf':'\uD835\uDD5B','Jscr':'\uD835\uDCA5','jscr':'\uD835\uDCBF','Jsercy':'\u0408','jsercy':'\u0458','Jukcy':'\u0404','jukcy':'\u0454','Kappa':'\u039A','kappa':'\u03BA','kappav':'\u03F0','Kcedil':'\u0136','kcedil':'\u0137','Kcy':'\u041A','kcy':'\u043A','Kfr':'\uD835\uDD0E','kfr':'\uD835\uDD28','kgreen':'\u0138','KHcy':'\u0425','khcy':'\u0445','KJcy':'\u040C','kjcy':'\u045C','Kopf':'\uD835\uDD42','kopf':'\uD835\uDD5C','Kscr':'\uD835\uDCA6','kscr':'\uD835\uDCC0','lAarr':'\u21DA','Lacute':'\u0139','lacute':'\u013A','laemptyv':'\u29B4','lagran':'\u2112','Lambda':'\u039B','lambda':'\u03BB','lang':'\u27E8','Lang':'\u27EA','langd':'\u2991','langle':'\u27E8','lap':'\u2A85','Laplacetrf':'\u2112','laquo':'\xAB','larrb':'\u21E4','larrbfs':'\u291F','larr':'\u2190','Larr':'\u219E','lArr':'\u21D0','larrfs':'\u291D','larrhk':'\u21A9','larrlp':'\u21AB','larrpl':'\u2939','larrsim':'\u2973','larrtl':'\u21A2','latail':'\u2919','lAtail':'\u291B','lat':'\u2AAB','late':'\u2AAD','lates':'\u2AAD\uFE00','lbarr':'\u290C','lBarr':'\u290E','lbbrk':'\u2772','lbrace':'{','lbrack':'[','lbrke':'\u298B','lbrksld':'\u298F','lbrkslu':'\u298D','Lcaron':'\u013D','lcaron':'\u013E','Lcedil':'\u013B','lcedil':'\u013C','lceil':'\u2308','lcub':'{','Lcy':'\u041B','lcy':'\u043B','ldca':'\u2936','ldquo':'\u201C','ldquor':'\u201E','ldrdhar':'\u2967','ldrushar':'\u294B','ldsh':'\u21B2','le':'\u2264','lE':'\u2266','LeftAngleBracket':'\u27E8','LeftArrowBar':'\u21E4','leftarrow':'\u2190','LeftArrow':'\u2190','Leftarrow':'\u21D0','LeftArrowRightArrow':'\u21C6','leftarrowtail':'\u21A2','LeftCeiling':'\u2308','LeftDoubleBracket':'\u27E6','LeftDownTeeVector':'\u2961','LeftDownVectorBar':'\u2959','LeftDownVector':'\u21C3','LeftFloor':'\u230A','leftharpoondown':'\u21BD','leftharpoonup':'\u21BC','leftleftarrows':'\u21C7','leftrightarrow':'\u2194','LeftRightArrow':'\u2194','Leftrightarrow':'\u21D4','leftrightarrows':'\u21C6','leftrightharpoons':'\u21CB','leftrightsquigarrow':'\u21AD','LeftRightVector':'\u294E','LeftTeeArrow':'\u21A4','LeftTee':'\u22A3','LeftTeeVector':'\u295A','leftthreetimes':'\u22CB','LeftTriangleBar':'\u29CF','LeftTriangle':'\u22B2','LeftTriangleEqual':'\u22B4','LeftUpDownVector':'\u2951','LeftUpTeeVector':'\u2960','LeftUpVectorBar':'\u2958','LeftUpVector':'\u21BF','LeftVectorBar':'\u2952','LeftVector':'\u21BC','lEg':'\u2A8B','leg':'\u22DA','leq':'\u2264','leqq':'\u2266','leqslant':'\u2A7D','lescc':'\u2AA8','les':'\u2A7D','lesdot':'\u2A7F','lesdoto':'\u2A81','lesdotor':'\u2A83','lesg':'\u22DA\uFE00','lesges':'\u2A93','lessapprox':'\u2A85','lessdot':'\u22D6','lesseqgtr':'\u22DA','lesseqqgtr':'\u2A8B','LessEqualGreater':'\u22DA','LessFullEqual':'\u2266','LessGreater':'\u2276','lessgtr':'\u2276','LessLess':'\u2AA1','lesssim':'\u2272','LessSlantEqual':'\u2A7D','LessTilde':'\u2272','lfisht':'\u297C','lfloor':'\u230A','Lfr':'\uD835\uDD0F','lfr':'\uD835\uDD29','lg':'\u2276','lgE':'\u2A91','lHar':'\u2962','lhard':'\u21BD','lharu':'\u21BC','lharul':'\u296A','lhblk':'\u2584','LJcy':'\u0409','ljcy':'\u0459','llarr':'\u21C7','ll':'\u226A','Ll':'\u22D8','llcorner':'\u231E','Lleftarrow':'\u21DA','llhard':'\u296B','lltri':'\u25FA','Lmidot':'\u013F','lmidot':'\u0140','lmoustache':'\u23B0','lmoust':'\u23B0','lnap':'\u2A89','lnapprox':'\u2A89','lne':'\u2A87','lnE':'\u2268','lneq':'\u2A87','lneqq':'\u2268','lnsim':'\u22E6','loang':'\u27EC','loarr':'\u21FD','lobrk':'\u27E6','longleftarrow':'\u27F5','LongLeftArrow':'\u27F5','Longleftarrow':'\u27F8','longleftrightarrow':'\u27F7','LongLeftRightArrow':'\u27F7','Longleftrightarrow':'\u27FA','longmapsto':'\u27FC','longrightarrow':'\u27F6','LongRightArrow':'\u27F6','Longrightarrow':'\u27F9','looparrowleft':'\u21AB','looparrowright':'\u21AC','lopar':'\u2985','Lopf':'\uD835\uDD43','lopf':'\uD835\uDD5D','loplus':'\u2A2D','lotimes':'\u2A34','lowast':'\u2217','lowbar':'_','LowerLeftArrow':'\u2199','LowerRightArrow':'\u2198','loz':'\u25CA','lozenge':'\u25CA','lozf':'\u29EB','lpar':'(','lparlt':'\u2993','lrarr':'\u21C6','lrcorner':'\u231F','lrhar':'\u21CB','lrhard':'\u296D','lrm':'\u200E','lrtri':'\u22BF','lsaquo':'\u2039','lscr':'\uD835\uDCC1','Lscr':'\u2112','lsh':'\u21B0','Lsh':'\u21B0','lsim':'\u2272','lsime':'\u2A8D','lsimg':'\u2A8F','lsqb':'[','lsquo':'\u2018','lsquor':'\u201A','Lstrok':'\u0141','lstrok':'\u0142','ltcc':'\u2AA6','ltcir':'\u2A79','lt':'<','LT':'<','Lt':'\u226A','ltdot':'\u22D6','lthree':'\u22CB','ltimes':'\u22C9','ltlarr':'\u2976','ltquest':'\u2A7B','ltri':'\u25C3','ltrie':'\u22B4','ltrif':'\u25C2','ltrPar':'\u2996','lurdshar':'\u294A','luruhar':'\u2966','lvertneqq':'\u2268\uFE00','lvnE':'\u2268\uFE00','macr':'\xAF','male':'\u2642','malt':'\u2720','maltese':'\u2720','Map':'\u2905','map':'\u21A6','mapsto':'\u21A6','mapstodown':'\u21A7','mapstoleft':'\u21A4','mapstoup':'\u21A5','marker':'\u25AE','mcomma':'\u2A29','Mcy':'\u041C','mcy':'\u043C','mdash':'\u2014','mDDot':'\u223A','measuredangle':'\u2221','MediumSpace':'\u205F','Mellintrf':'\u2133','Mfr':'\uD835\uDD10','mfr':'\uD835\uDD2A','mho':'\u2127','micro':'\xB5','midast':'*','midcir':'\u2AF0','mid':'\u2223','middot':'\xB7','minusb':'\u229F','minus':'\u2212','minusd':'\u2238','minusdu':'\u2A2A','MinusPlus':'\u2213','mlcp':'\u2ADB','mldr':'\u2026','mnplus':'\u2213','models':'\u22A7','Mopf':'\uD835\uDD44','mopf':'\uD835\uDD5E','mp':'\u2213','mscr':'\uD835\uDCC2','Mscr':'\u2133','mstpos':'\u223E','Mu':'\u039C','mu':'\u03BC','multimap':'\u22B8','mumap':'\u22B8','nabla':'\u2207','Nacute':'\u0143','nacute':'\u0144','nang':'\u2220\u20D2','nap':'\u2249','napE':'\u2A70\u0338','napid':'\u224B\u0338','napos':'\u0149','napprox':'\u2249','natural':'\u266E','naturals':'\u2115','natur':'\u266E','nbsp':'\xA0','nbump':'\u224E\u0338','nbumpe':'\u224F\u0338','ncap':'\u2A43','Ncaron':'\u0147','ncaron':'\u0148','Ncedil':'\u0145','ncedil':'\u0146','ncong':'\u2247','ncongdot':'\u2A6D\u0338','ncup':'\u2A42','Ncy':'\u041D','ncy':'\u043D','ndash':'\u2013','nearhk':'\u2924','nearr':'\u2197','neArr':'\u21D7','nearrow':'\u2197','ne':'\u2260','nedot':'\u2250\u0338','NegativeMediumSpace':'\u200B','NegativeThickSpace':'\u200B','NegativeThinSpace':'\u200B','NegativeVeryThinSpace':'\u200B','nequiv':'\u2262','nesear':'\u2928','nesim':'\u2242\u0338','NestedGreaterGreater':'\u226B','NestedLessLess':'\u226A','NewLine':'\n','nexist':'\u2204','nexists':'\u2204','Nfr':'\uD835\uDD11','nfr':'\uD835\uDD2B','ngE':'\u2267\u0338','nge':'\u2271','ngeq':'\u2271','ngeqq':'\u2267\u0338','ngeqslant':'\u2A7E\u0338','nges':'\u2A7E\u0338','nGg':'\u22D9\u0338','ngsim':'\u2275','nGt':'\u226B\u20D2','ngt':'\u226F','ngtr':'\u226F','nGtv':'\u226B\u0338','nharr':'\u21AE','nhArr':'\u21CE','nhpar':'\u2AF2','ni':'\u220B','nis':'\u22FC','nisd':'\u22FA','niv':'\u220B','NJcy':'\u040A','njcy':'\u045A','nlarr':'\u219A','nlArr':'\u21CD','nldr':'\u2025','nlE':'\u2266\u0338','nle':'\u2270','nleftarrow':'\u219A','nLeftarrow':'\u21CD','nleftrightarrow':'\u21AE','nLeftrightarrow':'\u21CE','nleq':'\u2270','nleqq':'\u2266\u0338','nleqslant':'\u2A7D\u0338','nles':'\u2A7D\u0338','nless':'\u226E','nLl':'\u22D8\u0338','nlsim':'\u2274','nLt':'\u226A\u20D2','nlt':'\u226E','nltri':'\u22EA','nltrie':'\u22EC','nLtv':'\u226A\u0338','nmid':'\u2224','NoBreak':'\u2060','NonBreakingSpace':'\xA0','nopf':'\uD835\uDD5F','Nopf':'\u2115','Not':'\u2AEC','not':'\xAC','NotCongruent':'\u2262','NotCupCap':'\u226D','NotDoubleVerticalBar':'\u2226','NotElement':'\u2209','NotEqual':'\u2260','NotEqualTilde':'\u2242\u0338','NotExists':'\u2204','NotGreater':'\u226F','NotGreaterEqual':'\u2271','NotGreaterFullEqual':'\u2267\u0338','NotGreaterGreater':'\u226B\u0338','NotGreaterLess':'\u2279','NotGreaterSlantEqual':'\u2A7E\u0338','NotGreaterTilde':'\u2275','NotHumpDownHump':'\u224E\u0338','NotHumpEqual':'\u224F\u0338','notin':'\u2209','notindot':'\u22F5\u0338','notinE':'\u22F9\u0338','notinva':'\u2209','notinvb':'\u22F7','notinvc':'\u22F6','NotLeftTriangleBar':'\u29CF\u0338','NotLeftTriangle':'\u22EA','NotLeftTriangleEqual':'\u22EC','NotLess':'\u226E','NotLessEqual':'\u2270','NotLessGreater':'\u2278','NotLessLess':'\u226A\u0338','NotLessSlantEqual':'\u2A7D\u0338','NotLessTilde':'\u2274','NotNestedGreaterGreater':'\u2AA2\u0338','NotNestedLessLess':'\u2AA1\u0338','notni':'\u220C','notniva':'\u220C','notnivb':'\u22FE','notnivc':'\u22FD','NotPrecedes':'\u2280','NotPrecedesEqual':'\u2AAF\u0338','NotPrecedesSlantEqual':'\u22E0','NotReverseElement':'\u220C','NotRightTriangleBar':'\u29D0\u0338','NotRightTriangle':'\u22EB','NotRightTriangleEqual':'\u22ED','NotSquareSubset':'\u228F\u0338','NotSquareSubsetEqual':'\u22E2','NotSquareSuperset':'\u2290\u0338','NotSquareSupersetEqual':'\u22E3','NotSubset':'\u2282\u20D2','NotSubsetEqual':'\u2288','NotSucceeds':'\u2281','NotSucceedsEqual':'\u2AB0\u0338','NotSucceedsSlantEqual':'\u22E1','NotSucceedsTilde':'\u227F\u0338','NotSuperset':'\u2283\u20D2','NotSupersetEqual':'\u2289','NotTilde':'\u2241','NotTildeEqual':'\u2244','NotTildeFullEqual':'\u2247','NotTildeTilde':'\u2249','NotVerticalBar':'\u2224','nparallel':'\u2226','npar':'\u2226','nparsl':'\u2AFD\u20E5','npart':'\u2202\u0338','npolint':'\u2A14','npr':'\u2280','nprcue':'\u22E0','nprec':'\u2280','npreceq':'\u2AAF\u0338','npre':'\u2AAF\u0338','nrarrc':'\u2933\u0338','nrarr':'\u219B','nrArr':'\u21CF','nrarrw':'\u219D\u0338','nrightarrow':'\u219B','nRightarrow':'\u21CF','nrtri':'\u22EB','nrtrie':'\u22ED','nsc':'\u2281','nsccue':'\u22E1','nsce':'\u2AB0\u0338','Nscr':'\uD835\uDCA9','nscr':'\uD835\uDCC3','nshortmid':'\u2224','nshortparallel':'\u2226','nsim':'\u2241','nsime':'\u2244','nsimeq':'\u2244','nsmid':'\u2224','nspar':'\u2226','nsqsube':'\u22E2','nsqsupe':'\u22E3','nsub':'\u2284','nsubE':'\u2AC5\u0338','nsube':'\u2288','nsubset':'\u2282\u20D2','nsubseteq':'\u2288','nsubseteqq':'\u2AC5\u0338','nsucc':'\u2281','nsucceq':'\u2AB0\u0338','nsup':'\u2285','nsupE':'\u2AC6\u0338','nsupe':'\u2289','nsupset':'\u2283\u20D2','nsupseteq':'\u2289','nsupseteqq':'\u2AC6\u0338','ntgl':'\u2279','Ntilde':'\xD1','ntilde':'\xF1','ntlg':'\u2278','ntriangleleft':'\u22EA','ntrianglelefteq':'\u22EC','ntriangleright':'\u22EB','ntrianglerighteq':'\u22ED','Nu':'\u039D','nu':'\u03BD','num':'#','numero':'\u2116','numsp':'\u2007','nvap':'\u224D\u20D2','nvdash':'\u22AC','nvDash':'\u22AD','nVdash':'\u22AE','nVDash':'\u22AF','nvge':'\u2265\u20D2','nvgt':'>\u20D2','nvHarr':'\u2904','nvinfin':'\u29DE','nvlArr':'\u2902','nvle':'\u2264\u20D2','nvlt':'<\u20D2','nvltrie':'\u22B4\u20D2','nvrArr':'\u2903','nvrtrie':'\u22B5\u20D2','nvsim':'\u223C\u20D2','nwarhk':'\u2923','nwarr':'\u2196','nwArr':'\u21D6','nwarrow':'\u2196','nwnear':'\u2927','Oacute':'\xD3','oacute':'\xF3','oast':'\u229B','Ocirc':'\xD4','ocirc':'\xF4','ocir':'\u229A','Ocy':'\u041E','ocy':'\u043E','odash':'\u229D','Odblac':'\u0150','odblac':'\u0151','odiv':'\u2A38','odot':'\u2299','odsold':'\u29BC','OElig':'\u0152','oelig':'\u0153','ofcir':'\u29BF','Ofr':'\uD835\uDD12','ofr':'\uD835\uDD2C','ogon':'\u02DB','Ograve':'\xD2','ograve':'\xF2','ogt':'\u29C1','ohbar':'\u29B5','ohm':'\u03A9','oint':'\u222E','olarr':'\u21BA','olcir':'\u29BE','olcross':'\u29BB','oline':'\u203E','olt':'\u29C0','Omacr':'\u014C','omacr':'\u014D','Omega':'\u03A9','omega':'\u03C9','Omicron':'\u039F','omicron':'\u03BF','omid':'\u29B6','ominus':'\u2296','Oopf':'\uD835\uDD46','oopf':'\uD835\uDD60','opar':'\u29B7','OpenCurlyDoubleQuote':'\u201C','OpenCurlyQuote':'\u2018','operp':'\u29B9','oplus':'\u2295','orarr':'\u21BB','Or':'\u2A54','or':'\u2228','ord':'\u2A5D','order':'\u2134','orderof':'\u2134','ordf':'\xAA','ordm':'\xBA','origof':'\u22B6','oror':'\u2A56','orslope':'\u2A57','orv':'\u2A5B','oS':'\u24C8','Oscr':'\uD835\uDCAA','oscr':'\u2134','Oslash':'\xD8','oslash':'\xF8','osol':'\u2298','Otilde':'\xD5','otilde':'\xF5','otimesas':'\u2A36','Otimes':'\u2A37','otimes':'\u2297','Ouml':'\xD6','ouml':'\xF6','ovbar':'\u233D','OverBar':'\u203E','OverBrace':'\u23DE','OverBracket':'\u23B4','OverParenthesis':'\u23DC','para':'\xB6','parallel':'\u2225','par':'\u2225','parsim':'\u2AF3','parsl':'\u2AFD','part':'\u2202','PartialD':'\u2202','Pcy':'\u041F','pcy':'\u043F','percnt':'%','period':'.','permil':'\u2030','perp':'\u22A5','pertenk':'\u2031','Pfr':'\uD835\uDD13','pfr':'\uD835\uDD2D','Phi':'\u03A6','phi':'\u03C6','phiv':'\u03D5','phmmat':'\u2133','phone':'\u260E','Pi':'\u03A0','pi':'\u03C0','pitchfork':'\u22D4','piv':'\u03D6','planck':'\u210F','planckh':'\u210E','plankv':'\u210F','plusacir':'\u2A23','plusb':'\u229E','pluscir':'\u2A22','plus':'+','plusdo':'\u2214','plusdu':'\u2A25','pluse':'\u2A72','PlusMinus':'\xB1','plusmn':'\xB1','plussim':'\u2A26','plustwo':'\u2A27','pm':'\xB1','Poincareplane':'\u210C','pointint':'\u2A15','popf':'\uD835\uDD61','Popf':'\u2119','pound':'\xA3','prap':'\u2AB7','Pr':'\u2ABB','pr':'\u227A','prcue':'\u227C','precapprox':'\u2AB7','prec':'\u227A','preccurlyeq':'\u227C','Precedes':'\u227A','PrecedesEqual':'\u2AAF','PrecedesSlantEqual':'\u227C','PrecedesTilde':'\u227E','preceq':'\u2AAF','precnapprox':'\u2AB9','precneqq':'\u2AB5','precnsim':'\u22E8','pre':'\u2AAF','prE':'\u2AB3','precsim':'\u227E','prime':'\u2032','Prime':'\u2033','primes':'\u2119','prnap':'\u2AB9','prnE':'\u2AB5','prnsim':'\u22E8','prod':'\u220F','Product':'\u220F','profalar':'\u232E','profline':'\u2312','profsurf':'\u2313','prop':'\u221D','Proportional':'\u221D','Proportion':'\u2237','propto':'\u221D','prsim':'\u227E','prurel':'\u22B0','Pscr':'\uD835\uDCAB','pscr':'\uD835\uDCC5','Psi':'\u03A8','psi':'\u03C8','puncsp':'\u2008','Qfr':'\uD835\uDD14','qfr':'\uD835\uDD2E','qint':'\u2A0C','qopf':'\uD835\uDD62','Qopf':'\u211A','qprime':'\u2057','Qscr':'\uD835\uDCAC','qscr':'\uD835\uDCC6','quaternions':'\u210D','quatint':'\u2A16','quest':'?','questeq':'\u225F','quot':'"','QUOT':'"','rAarr':'\u21DB','race':'\u223D\u0331','Racute':'\u0154','racute':'\u0155','radic':'\u221A','raemptyv':'\u29B3','rang':'\u27E9','Rang':'\u27EB','rangd':'\u2992','range':'\u29A5','rangle':'\u27E9','raquo':'\xBB','rarrap':'\u2975','rarrb':'\u21E5','rarrbfs':'\u2920','rarrc':'\u2933','rarr':'\u2192','Rarr':'\u21A0','rArr':'\u21D2','rarrfs':'\u291E','rarrhk':'\u21AA','rarrlp':'\u21AC','rarrpl':'\u2945','rarrsim':'\u2974','Rarrtl':'\u2916','rarrtl':'\u21A3','rarrw':'\u219D','ratail':'\u291A','rAtail':'\u291C','ratio':'\u2236','rationals':'\u211A','rbarr':'\u290D','rBarr':'\u290F','RBarr':'\u2910','rbbrk':'\u2773','rbrace':'}','rbrack':']','rbrke':'\u298C','rbrksld':'\u298E','rbrkslu':'\u2990','Rcaron':'\u0158','rcaron':'\u0159','Rcedil':'\u0156','rcedil':'\u0157','rceil':'\u2309','rcub':'}','Rcy':'\u0420','rcy':'\u0440','rdca':'\u2937','rdldhar':'\u2969','rdquo':'\u201D','rdquor':'\u201D','rdsh':'\u21B3','real':'\u211C','realine':'\u211B','realpart':'\u211C','reals':'\u211D','Re':'\u211C','rect':'\u25AD','reg':'\xAE','REG':'\xAE','ReverseElement':'\u220B','ReverseEquilibrium':'\u21CB','ReverseUpEquilibrium':'\u296F','rfisht':'\u297D','rfloor':'\u230B','rfr':'\uD835\uDD2F','Rfr':'\u211C','rHar':'\u2964','rhard':'\u21C1','rharu':'\u21C0','rharul':'\u296C','Rho':'\u03A1','rho':'\u03C1','rhov':'\u03F1','RightAngleBracket':'\u27E9','RightArrowBar':'\u21E5','rightarrow':'\u2192','RightArrow':'\u2192','Rightarrow':'\u21D2','RightArrowLeftArrow':'\u21C4','rightarrowtail':'\u21A3','RightCeiling':'\u2309','RightDoubleBracket':'\u27E7','RightDownTeeVector':'\u295D','RightDownVectorBar':'\u2955','RightDownVector':'\u21C2','RightFloor':'\u230B','rightharpoondown':'\u21C1','rightharpoonup':'\u21C0','rightleftarrows':'\u21C4','rightleftharpoons':'\u21CC','rightrightarrows':'\u21C9','rightsquigarrow':'\u219D','RightTeeArrow':'\u21A6','RightTee':'\u22A2','RightTeeVector':'\u295B','rightthreetimes':'\u22CC','RightTriangleBar':'\u29D0','RightTriangle':'\u22B3','RightTriangleEqual':'\u22B5','RightUpDownVector':'\u294F','RightUpTeeVector':'\u295C','RightUpVectorBar':'\u2954','RightUpVector':'\u21BE','RightVectorBar':'\u2953','RightVector':'\u21C0','ring':'\u02DA','risingdotseq':'\u2253','rlarr':'\u21C4','rlhar':'\u21CC','rlm':'\u200F','rmoustache':'\u23B1','rmoust':'\u23B1','rnmid':'\u2AEE','roang':'\u27ED','roarr':'\u21FE','robrk':'\u27E7','ropar':'\u2986','ropf':'\uD835\uDD63','Ropf':'\u211D','roplus':'\u2A2E','rotimes':'\u2A35','RoundImplies':'\u2970','rpar':')','rpargt':'\u2994','rppolint':'\u2A12','rrarr':'\u21C9','Rrightarrow':'\u21DB','rsaquo':'\u203A','rscr':'\uD835\uDCC7','Rscr':'\u211B','rsh':'\u21B1','Rsh':'\u21B1','rsqb':']','rsquo':'\u2019','rsquor':'\u2019','rthree':'\u22CC','rtimes':'\u22CA','rtri':'\u25B9','rtrie':'\u22B5','rtrif':'\u25B8','rtriltri':'\u29CE','RuleDelayed':'\u29F4','ruluhar':'\u2968','rx':'\u211E','Sacute':'\u015A','sacute':'\u015B','sbquo':'\u201A','scap':'\u2AB8','Scaron':'\u0160','scaron':'\u0161','Sc':'\u2ABC','sc':'\u227B','sccue':'\u227D','sce':'\u2AB0','scE':'\u2AB4','Scedil':'\u015E','scedil':'\u015F','Scirc':'\u015C','scirc':'\u015D','scnap':'\u2ABA','scnE':'\u2AB6','scnsim':'\u22E9','scpolint':'\u2A13','scsim':'\u227F','Scy':'\u0421','scy':'\u0441','sdotb':'\u22A1','sdot':'\u22C5','sdote':'\u2A66','searhk':'\u2925','searr':'\u2198','seArr':'\u21D8','searrow':'\u2198','sect':'\xA7','semi':';','seswar':'\u2929','setminus':'\u2216','setmn':'\u2216','sext':'\u2736','Sfr':'\uD835\uDD16','sfr':'\uD835\uDD30','sfrown':'\u2322','sharp':'\u266F','SHCHcy':'\u0429','shchcy':'\u0449','SHcy':'\u0428','shcy':'\u0448','ShortDownArrow':'\u2193','ShortLeftArrow':'\u2190','shortmid':'\u2223','shortparallel':'\u2225','ShortRightArrow':'\u2192','ShortUpArrow':'\u2191','shy':'\xAD','Sigma':'\u03A3','sigma':'\u03C3','sigmaf':'\u03C2','sigmav':'\u03C2','sim':'\u223C','simdot':'\u2A6A','sime':'\u2243','simeq':'\u2243','simg':'\u2A9E','simgE':'\u2AA0','siml':'\u2A9D','simlE':'\u2A9F','simne':'\u2246','simplus':'\u2A24','simrarr':'\u2972','slarr':'\u2190','SmallCircle':'\u2218','smallsetminus':'\u2216','smashp':'\u2A33','smeparsl':'\u29E4','smid':'\u2223','smile':'\u2323','smt':'\u2AAA','smte':'\u2AAC','smtes':'\u2AAC\uFE00','SOFTcy':'\u042C','softcy':'\u044C','solbar':'\u233F','solb':'\u29C4','sol':'/','Sopf':'\uD835\uDD4A','sopf':'\uD835\uDD64','spades':'\u2660','spadesuit':'\u2660','spar':'\u2225','sqcap':'\u2293','sqcaps':'\u2293\uFE00','sqcup':'\u2294','sqcups':'\u2294\uFE00','Sqrt':'\u221A','sqsub':'\u228F','sqsube':'\u2291','sqsubset':'\u228F','sqsubseteq':'\u2291','sqsup':'\u2290','sqsupe':'\u2292','sqsupset':'\u2290','sqsupseteq':'\u2292','square':'\u25A1','Square':'\u25A1','SquareIntersection':'\u2293','SquareSubset':'\u228F','SquareSubsetEqual':'\u2291','SquareSuperset':'\u2290','SquareSupersetEqual':'\u2292','SquareUnion':'\u2294','squarf':'\u25AA','squ':'\u25A1','squf':'\u25AA','srarr':'\u2192','Sscr':'\uD835\uDCAE','sscr':'\uD835\uDCC8','ssetmn':'\u2216','ssmile':'\u2323','sstarf':'\u22C6','Star':'\u22C6','star':'\u2606','starf':'\u2605','straightepsilon':'\u03F5','straightphi':'\u03D5','strns':'\xAF','sub':'\u2282','Sub':'\u22D0','subdot':'\u2ABD','subE':'\u2AC5','sube':'\u2286','subedot':'\u2AC3','submult':'\u2AC1','subnE':'\u2ACB','subne':'\u228A','subplus':'\u2ABF','subrarr':'\u2979','subset':'\u2282','Subset':'\u22D0','subseteq':'\u2286','subseteqq':'\u2AC5','SubsetEqual':'\u2286','subsetneq':'\u228A','subsetneqq':'\u2ACB','subsim':'\u2AC7','subsub':'\u2AD5','subsup':'\u2AD3','succapprox':'\u2AB8','succ':'\u227B','succcurlyeq':'\u227D','Succeeds':'\u227B','SucceedsEqual':'\u2AB0','SucceedsSlantEqual':'\u227D','SucceedsTilde':'\u227F','succeq':'\u2AB0','succnapprox':'\u2ABA','succneqq':'\u2AB6','succnsim':'\u22E9','succsim':'\u227F','SuchThat':'\u220B','sum':'\u2211','Sum':'\u2211','sung':'\u266A','sup1':'\xB9','sup2':'\xB2','sup3':'\xB3','sup':'\u2283','Sup':'\u22D1','supdot':'\u2ABE','supdsub':'\u2AD8','supE':'\u2AC6','supe':'\u2287','supedot':'\u2AC4','Superset':'\u2283','SupersetEqual':'\u2287','suphsol':'\u27C9','suphsub':'\u2AD7','suplarr':'\u297B','supmult':'\u2AC2','supnE':'\u2ACC','supne':'\u228B','supplus':'\u2AC0','supset':'\u2283','Supset':'\u22D1','supseteq':'\u2287','supseteqq':'\u2AC6','supsetneq':'\u228B','supsetneqq':'\u2ACC','supsim':'\u2AC8','supsub':'\u2AD4','supsup':'\u2AD6','swarhk':'\u2926','swarr':'\u2199','swArr':'\u21D9','swarrow':'\u2199','swnwar':'\u292A','szlig':'\xDF','Tab':'\t','target':'\u2316','Tau':'\u03A4','tau':'\u03C4','tbrk':'\u23B4','Tcaron':'\u0164','tcaron':'\u0165','Tcedil':'\u0162','tcedil':'\u0163','Tcy':'\u0422','tcy':'\u0442','tdot':'\u20DB','telrec':'\u2315','Tfr':'\uD835\uDD17','tfr':'\uD835\uDD31','there4':'\u2234','therefore':'\u2234','Therefore':'\u2234','Theta':'\u0398','theta':'\u03B8','thetasym':'\u03D1','thetav':'\u03D1','thickapprox':'\u2248','thicksim':'\u223C','ThickSpace':'\u205F\u200A','ThinSpace':'\u2009','thinsp':'\u2009','thkap':'\u2248','thksim':'\u223C','THORN':'\xDE','thorn':'\xFE','tilde':'\u02DC','Tilde':'\u223C','TildeEqual':'\u2243','TildeFullEqual':'\u2245','TildeTilde':'\u2248','timesbar':'\u2A31','timesb':'\u22A0','times':'\xD7','timesd':'\u2A30','tint':'\u222D','toea':'\u2928','topbot':'\u2336','topcir':'\u2AF1','top':'\u22A4','Topf':'\uD835\uDD4B','topf':'\uD835\uDD65','topfork':'\u2ADA','tosa':'\u2929','tprime':'\u2034','trade':'\u2122','TRADE':'\u2122','triangle':'\u25B5','triangledown':'\u25BF','triangleleft':'\u25C3','trianglelefteq':'\u22B4','triangleq':'\u225C','triangleright':'\u25B9','trianglerighteq':'\u22B5','tridot':'\u25EC','trie':'\u225C','triminus':'\u2A3A','TripleDot':'\u20DB','triplus':'\u2A39','trisb':'\u29CD','tritime':'\u2A3B','trpezium':'\u23E2','Tscr':'\uD835\uDCAF','tscr':'\uD835\uDCC9','TScy':'\u0426','tscy':'\u0446','TSHcy':'\u040B','tshcy':'\u045B','Tstrok':'\u0166','tstrok':'\u0167','twixt':'\u226C','twoheadleftarrow':'\u219E','twoheadrightarrow':'\u21A0','Uacute':'\xDA','uacute':'\xFA','uarr':'\u2191','Uarr':'\u219F','uArr':'\u21D1','Uarrocir':'\u2949','Ubrcy':'\u040E','ubrcy':'\u045E','Ubreve':'\u016C','ubreve':'\u016D','Ucirc':'\xDB','ucirc':'\xFB','Ucy':'\u0423','ucy':'\u0443','udarr':'\u21C5','Udblac':'\u0170','udblac':'\u0171','udhar':'\u296E','ufisht':'\u297E','Ufr':'\uD835\uDD18','ufr':'\uD835\uDD32','Ugrave':'\xD9','ugrave':'\xF9','uHar':'\u2963','uharl':'\u21BF','uharr':'\u21BE','uhblk':'\u2580','ulcorn':'\u231C','ulcorner':'\u231C','ulcrop':'\u230F','ultri':'\u25F8','Umacr':'\u016A','umacr':'\u016B','uml':'\xA8','UnderBar':'_','UnderBrace':'\u23DF','UnderBracket':'\u23B5','UnderParenthesis':'\u23DD','Union':'\u22C3','UnionPlus':'\u228E','Uogon':'\u0172','uogon':'\u0173','Uopf':'\uD835\uDD4C','uopf':'\uD835\uDD66','UpArrowBar':'\u2912','uparrow':'\u2191','UpArrow':'\u2191','Uparrow':'\u21D1','UpArrowDownArrow':'\u21C5','updownarrow':'\u2195','UpDownArrow':'\u2195','Updownarrow':'\u21D5','UpEquilibrium':'\u296E','upharpoonleft':'\u21BF','upharpoonright':'\u21BE','uplus':'\u228E','UpperLeftArrow':'\u2196','UpperRightArrow':'\u2197','upsi':'\u03C5','Upsi':'\u03D2','upsih':'\u03D2','Upsilon':'\u03A5','upsilon':'\u03C5','UpTeeArrow':'\u21A5','UpTee':'\u22A5','upuparrows':'\u21C8','urcorn':'\u231D','urcorner':'\u231D','urcrop':'\u230E','Uring':'\u016E','uring':'\u016F','urtri':'\u25F9','Uscr':'\uD835\uDCB0','uscr':'\uD835\uDCCA','utdot':'\u22F0','Utilde':'\u0168','utilde':'\u0169','utri':'\u25B5','utrif':'\u25B4','uuarr':'\u21C8','Uuml':'\xDC','uuml':'\xFC','uwangle':'\u29A7','vangrt':'\u299C','varepsilon':'\u03F5','varkappa':'\u03F0','varnothing':'\u2205','varphi':'\u03D5','varpi':'\u03D6','varpropto':'\u221D','varr':'\u2195','vArr':'\u21D5','varrho':'\u03F1','varsigma':'\u03C2','varsubsetneq':'\u228A\uFE00','varsubsetneqq':'\u2ACB\uFE00','varsupsetneq':'\u228B\uFE00','varsupsetneqq':'\u2ACC\uFE00','vartheta':'\u03D1','vartriangleleft':'\u22B2','vartriangleright':'\u22B3','vBar':'\u2AE8','Vbar':'\u2AEB','vBarv':'\u2AE9','Vcy':'\u0412','vcy':'\u0432','vdash':'\u22A2','vDash':'\u22A8','Vdash':'\u22A9','VDash':'\u22AB','Vdashl':'\u2AE6','veebar':'\u22BB','vee':'\u2228','Vee':'\u22C1','veeeq':'\u225A','vellip':'\u22EE','verbar':'|','Verbar':'\u2016','vert':'|','Vert':'\u2016','VerticalBar':'\u2223','VerticalLine':'|','VerticalSeparator':'\u2758','VerticalTilde':'\u2240','VeryThinSpace':'\u200A','Vfr':'\uD835\uDD19','vfr':'\uD835\uDD33','vltri':'\u22B2','vnsub':'\u2282\u20D2','vnsup':'\u2283\u20D2','Vopf':'\uD835\uDD4D','vopf':'\uD835\uDD67','vprop':'\u221D','vrtri':'\u22B3','Vscr':'\uD835\uDCB1','vscr':'\uD835\uDCCB','vsubnE':'\u2ACB\uFE00','vsubne':'\u228A\uFE00','vsupnE':'\u2ACC\uFE00','vsupne':'\u228B\uFE00','Vvdash':'\u22AA','vzigzag':'\u299A','Wcirc':'\u0174','wcirc':'\u0175','wedbar':'\u2A5F','wedge':'\u2227','Wedge':'\u22C0','wedgeq':'\u2259','weierp':'\u2118','Wfr':'\uD835\uDD1A','wfr':'\uD835\uDD34','Wopf':'\uD835\uDD4E','wopf':'\uD835\uDD68','wp':'\u2118','wr':'\u2240','wreath':'\u2240','Wscr':'\uD835\uDCB2','wscr':'\uD835\uDCCC','xcap':'\u22C2','xcirc':'\u25EF','xcup':'\u22C3','xdtri':'\u25BD','Xfr':'\uD835\uDD1B','xfr':'\uD835\uDD35','xharr':'\u27F7','xhArr':'\u27FA','Xi':'\u039E','xi':'\u03BE','xlarr':'\u27F5','xlArr':'\u27F8','xmap':'\u27FC','xnis':'\u22FB','xodot':'\u2A00','Xopf':'\uD835\uDD4F','xopf':'\uD835\uDD69','xoplus':'\u2A01','xotime':'\u2A02','xrarr':'\u27F6','xrArr':'\u27F9','Xscr':'\uD835\uDCB3','xscr':'\uD835\uDCCD','xsqcup':'\u2A06','xuplus':'\u2A04','xutri':'\u25B3','xvee':'\u22C1','xwedge':'\u22C0','Yacute':'\xDD','yacute':'\xFD','YAcy':'\u042F','yacy':'\u044F','Ycirc':'\u0176','ycirc':'\u0177','Ycy':'\u042B','ycy':'\u044B','yen':'\xA5','Yfr':'\uD835\uDD1C','yfr':'\uD835\uDD36','YIcy':'\u0407','yicy':'\u0457','Yopf':'\uD835\uDD50','yopf':'\uD835\uDD6A','Yscr':'\uD835\uDCB4','yscr':'\uD835\uDCCE','YUcy':'\u042E','yucy':'\u044E','yuml':'\xFF','Yuml':'\u0178','Zacute':'\u0179','zacute':'\u017A','Zcaron':'\u017D','zcaron':'\u017E','Zcy':'\u0417','zcy':'\u0437','Zdot':'\u017B','zdot':'\u017C','zeetrf':'\u2128','ZeroWidthSpace':'\u200B','Zeta':'\u0396','zeta':'\u03B6','zfr':'\uD835\uDD37','Zfr':'\u2128','ZHcy':'\u0416','zhcy':'\u0436','zigrarr':'\u21DD','zopf':'\uD835\uDD6B','Zopf':'\u2124','Zscr':'\uD835\uDCB5','zscr':'\uD835\uDCCF','zwj':'\u200D','zwnj':'\u200C'}; + var decodeMapLegacy = {'Aacute':'\xC1','aacute':'\xE1','Acirc':'\xC2','acirc':'\xE2','acute':'\xB4','AElig':'\xC6','aelig':'\xE6','Agrave':'\xC0','agrave':'\xE0','amp':'&','AMP':'&','Aring':'\xC5','aring':'\xE5','Atilde':'\xC3','atilde':'\xE3','Auml':'\xC4','auml':'\xE4','brvbar':'\xA6','Ccedil':'\xC7','ccedil':'\xE7','cedil':'\xB8','cent':'\xA2','copy':'\xA9','COPY':'\xA9','curren':'\xA4','deg':'\xB0','divide':'\xF7','Eacute':'\xC9','eacute':'\xE9','Ecirc':'\xCA','ecirc':'\xEA','Egrave':'\xC8','egrave':'\xE8','ETH':'\xD0','eth':'\xF0','Euml':'\xCB','euml':'\xEB','frac12':'\xBD','frac14':'\xBC','frac34':'\xBE','gt':'>','GT':'>','Iacute':'\xCD','iacute':'\xED','Icirc':'\xCE','icirc':'\xEE','iexcl':'\xA1','Igrave':'\xCC','igrave':'\xEC','iquest':'\xBF','Iuml':'\xCF','iuml':'\xEF','laquo':'\xAB','lt':'<','LT':'<','macr':'\xAF','micro':'\xB5','middot':'\xB7','nbsp':'\xA0','not':'\xAC','Ntilde':'\xD1','ntilde':'\xF1','Oacute':'\xD3','oacute':'\xF3','Ocirc':'\xD4','ocirc':'\xF4','Ograve':'\xD2','ograve':'\xF2','ordf':'\xAA','ordm':'\xBA','Oslash':'\xD8','oslash':'\xF8','Otilde':'\xD5','otilde':'\xF5','Ouml':'\xD6','ouml':'\xF6','para':'\xB6','plusmn':'\xB1','pound':'\xA3','quot':'"','QUOT':'"','raquo':'\xBB','reg':'\xAE','REG':'\xAE','sect':'\xA7','shy':'\xAD','sup1':'\xB9','sup2':'\xB2','sup3':'\xB3','szlig':'\xDF','THORN':'\xDE','thorn':'\xFE','times':'\xD7','Uacute':'\xDA','uacute':'\xFA','Ucirc':'\xDB','ucirc':'\xFB','Ugrave':'\xD9','ugrave':'\xF9','uml':'\xA8','Uuml':'\xDC','uuml':'\xFC','Yacute':'\xDD','yacute':'\xFD','yen':'\xA5','yuml':'\xFF'}; + var decodeMapNumeric = {'0':'\uFFFD','128':'\u20AC','130':'\u201A','131':'\u0192','132':'\u201E','133':'\u2026','134':'\u2020','135':'\u2021','136':'\u02C6','137':'\u2030','138':'\u0160','139':'\u2039','140':'\u0152','142':'\u017D','145':'\u2018','146':'\u2019','147':'\u201C','148':'\u201D','149':'\u2022','150':'\u2013','151':'\u2014','152':'\u02DC','153':'\u2122','154':'\u0161','155':'\u203A','156':'\u0153','158':'\u017E','159':'\u0178'}; + var invalidReferenceCodePoints = [1,2,3,4,5,6,7,8,11,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,64976,64977,64978,64979,64980,64981,64982,64983,64984,64985,64986,64987,64988,64989,64990,64991,64992,64993,64994,64995,64996,64997,64998,64999,65000,65001,65002,65003,65004,65005,65006,65007,65534,65535,131070,131071,196606,196607,262142,262143,327678,327679,393214,393215,458750,458751,524286,524287,589822,589823,655358,655359,720894,720895,786430,786431,851966,851967,917502,917503,983038,983039,1048574,1048575,1114110,1114111]; + + /*--------------------------------------------------------------------------*/ + + var stringFromCharCode = String.fromCharCode; + + var object = {}; + var hasOwnProperty = object.hasOwnProperty; + var has = function(object, propertyName) { + return hasOwnProperty.call(object, propertyName); + }; + + var contains = function(array, value) { + var index = -1; + var length = array.length; + while (++index < length) { + if (array[index] == value) { + return true; + } + } + return false; + }; + + var merge = function(options, defaults) { + if (!options) { + return defaults; + } + var result = {}; + var key; + for (key in defaults) { + // A `hasOwnProperty` check is not needed here, since only recognized + // option names are used anyway. Any others are ignored. + result[key] = has(options, key) ? options[key] : defaults[key]; + } + return result; + }; + + // Modified version of `ucs2encode`; see http://mths.be/punycode. + var codePointToSymbol = function(codePoint, strict) { + var output = ''; + if ((codePoint >= 0xD800 && codePoint <= 0xDFFF) || codePoint > 0x10FFFF) { + // See issue #4: + // “Otherwise, if the number is in the range 0xD800 to 0xDFFF or is + // greater than 0x10FFFF, then this is a parse error. Return a U+FFFD + // REPLACEMENT CHARACTER.” + if (strict) { + parseError('character reference outside the permissible Unicode range'); + } + return '\uFFFD'; + } + if (has(decodeMapNumeric, codePoint)) { + if (strict) { + parseError('disallowed character reference'); + } + return decodeMapNumeric[codePoint]; + } + if (strict && contains(invalidReferenceCodePoints, codePoint)) { + parseError('disallowed character reference'); + } + if (codePoint > 0xFFFF) { + codePoint -= 0x10000; + output += stringFromCharCode(codePoint >>> 10 & 0x3FF | 0xD800); + codePoint = 0xDC00 | codePoint & 0x3FF; + } + output += stringFromCharCode(codePoint); + return output; + }; + + var hexEscape = function(symbol) { + return '&#x' + symbol.charCodeAt(0).toString(16).toUpperCase() + ';'; + }; + + var parseError = function(message) { + throw Error('Parse error: ' + message); + }; + + /*--------------------------------------------------------------------------*/ + + var encode = function(string, options) { + options = merge(options, encode.options); + var strict = options.strict; + if (strict && regexInvalidRawCodePoint.test(string)) { + parseError('forbidden code point'); + } + var encodeEverything = options.encodeEverything; + var useNamedReferences = options.useNamedReferences; + var allowUnsafeSymbols = options.allowUnsafeSymbols; + if (encodeEverything) { + // Encode ASCII symbols. + string = string.replace(regexAsciiWhitelist, function(symbol) { + // Use named references if requested & possible. + if (useNamedReferences && has(encodeMap, symbol)) { + return '&' + encodeMap[symbol] + ';'; + } + return hexEscape(symbol); + }); + // Shorten a few escapes that represent two symbols, of which at least one + // is within the ASCII range. + if (useNamedReferences) { + string = string + .replace(/>\u20D2/g, '>⃒') + .replace(/<\u20D2/g, '<⃒') + .replace(/fj/g, 'fj'); + } + // Encode non-ASCII symbols. + if (useNamedReferences) { + // Encode non-ASCII symbols that can be replaced with a named reference. + string = string.replace(regexEncodeNonAscii, function(string) { + // Note: there is no need to check `has(encodeMap, string)` here. + return '&' + encodeMap[string] + ';'; + }); + } + // Note: any remaining non-ASCII symbols are handled outside of the `if`. + } else if (useNamedReferences) { + // Apply named character references. + // Encode `<>"'&` using named character references. + if (!allowUnsafeSymbols) { + string = string.replace(regexEscape, function(string) { + return '&' + encodeMap[string] + ';'; // no need to check `has()` here + }); + } + // Shorten escapes that represent two symbols, of which at least one is + // `<>"'&`. + string = string + .replace(/>\u20D2/g, '>⃒') + .replace(/<\u20D2/g, '<⃒'); + // Encode non-ASCII symbols that can be replaced with a named reference. + string = string.replace(regexEncodeNonAscii, function(string) { + // Note: there is no need to check `has(encodeMap, string)` here. + return '&' + encodeMap[string] + ';'; + }); + } else if (!allowUnsafeSymbols) { + // Encode `<>"'&` using hexadecimal escapes, now that they’re not handled + // using named character references. + string = string.replace(regexEscape, hexEscape); + } + return string + // Encode astral symbols. + .replace(regexAstralSymbols, function($0) { + // https://mathiasbynens.be/notes/javascript-encoding#surrogate-formulae + var high = $0.charCodeAt(0); + var low = $0.charCodeAt(1); + var codePoint = (high - 0xD800) * 0x400 + low - 0xDC00 + 0x10000; + return '&#x' + codePoint.toString(16).toUpperCase() + ';'; + }) + // Encode any remaining BMP symbols that are not printable ASCII symbols + // using a hexadecimal escape. + .replace(regexBmpWhitelist, hexEscape); + }; + // Expose default options (so they can be overridden globally). + encode.options = { + 'allowUnsafeSymbols': false, + 'encodeEverything': false, + 'strict': false, + 'useNamedReferences': false + }; + + var decode = function(html, options) { + options = merge(options, decode.options); + var strict = options.strict; + if (strict && regexInvalidEntity.test(html)) { + parseError('malformed character reference'); + } + return html.replace(regexDecode, function($0, $1, $2, $3, $4, $5, $6, $7) { + var codePoint; + var semicolon; + var hexDigits; + var reference; + var next; + if ($1) { + // Decode decimal escapes, e.g. `𝌆`. + codePoint = $1; + semicolon = $2; + if (strict && !semicolon) { + parseError('character reference was not terminated by a semicolon'); + } + return codePointToSymbol(codePoint, strict); + } + if ($3) { + // Decode hexadecimal escapes, e.g. `𝌆`. + hexDigits = $3; + semicolon = $4; + if (strict && !semicolon) { + parseError('character reference was not terminated by a semicolon'); + } + codePoint = parseInt(hexDigits, 16); + return codePointToSymbol(codePoint, strict); + } + if ($5) { + // Decode named character references with trailing `;`, e.g. `©`. + reference = $5; + if (has(decodeMap, reference)) { + return decodeMap[reference]; + } else { + // Ambiguous ampersand; see http://mths.be/notes/ambiguous-ampersands. + if (strict) { + parseError( + 'named character reference was not terminated by a semicolon' + ); + } + return $0; + } + } + // If we’re still here, it’s a legacy reference for sure. No need for an + // extra `if` check. + // Decode named character references without trailing `;`, e.g. `&` + // This is only a parse error if it gets converted to `&`, or if it is + // followed by `=` in an attribute context. + reference = $6; + next = $7; + if (next && options.isAttributeValue) { + if (strict && next == '=') { + parseError('`&` did not start a character reference'); + } + return $0; + } else { + if (strict) { + parseError( + 'named character reference was not terminated by a semicolon' + ); + } + // Note: there is no need to check `has(decodeMapLegacy, reference)`. + return decodeMapLegacy[reference] + (next || ''); + } + }); + }; + // Expose default options (so they can be overridden globally). + decode.options = { + 'isAttributeValue': false, + 'strict': false + }; + + var escape = function(string) { + return string.replace(regexEscape, function($0) { + // Note: there is no need to check `has(escapeMap, $0)` here. + return escapeMap[$0]; + }); + }; + + /*--------------------------------------------------------------------------*/ + + var he = { + 'version': '0.5.0', + 'encode': encode, + 'decode': decode, + 'escape': escape, + 'unescape': decode + }; + + // Some AMD build optimizers, like r.js, check for specific condition patterns + // like the following: + if ( + typeof define == 'function' && + typeof define.amd == 'object' && + define.amd + ) { + define(function() { + return he; + }); + } else if (freeExports && !freeExports.nodeType) { + if (freeModule) { // in Node.js or RingoJS v0.8.0+ + freeModule.exports = he; + } else { // in Narwhal or RingoJS v0.7.0- + for (var key in he) { + has(he, key) && (freeExports[key] = he[key]); + } + } + } else { // in Rhino or a web browser + root.he = he; + } + +}(this)); diff --git a/node_modules/http-server/node_modules/ecstatic/node_modules/he/man/he.1 b/node_modules/http-server/node_modules/ecstatic/node_modules/he/man/he.1 new file mode 100644 index 0000000..3a7e504 --- /dev/null +++ b/node_modules/http-server/node_modules/ecstatic/node_modules/he/man/he.1 @@ -0,0 +1,78 @@ +.Dd July 27, 2013 +.Dt he 1 +.Sh NAME +.Nm he +.Nd encode/decode HTML entities just like a browser would +.Sh SYNOPSIS +.Nm +.Op Fl -escape Ar string +.br +.Op Fl -encode Ar string +.br +.Op Fl -encode Fl -use-named-refs Fl -everything Fl -allow-unsafe Ar string +.br +.Op Fl -decode Ar string +.br +.Op Fl -decode Fl -attribute Ar string +.br +.Op Fl -decode Fl -strict Ar string +.br +.Op Fl v | -version +.br +.Op Fl h | -help +.Sh DESCRIPTION +.Nm +encodes/decodes HTML entities in strings just like a browser would. +.Sh OPTIONS +.Bl -ohang -offset +.It Sy "--escape" +Take a string of text and escape it for use in text contexts in XML or HTML documents. Only the following characters are escaped: `&`, `<`, `>`, `"`, and `'`. +.It Sy "--encode" +Take a string of text and encode any symbols that aren't printable ASCII symbols and that can be replaced with character references. For example, it would turn `©` into `©`, but it wouldn't turn `+` into `+` since there is no point in doing so. Additionally, it replaces any remaining non-ASCII symbols with a hexadecimal escape sequence (e.g. `𝌆`). The return value of this function is always valid HTML. +.It Sy "--encode --use-named-refs" +Enable the use of named character references (like `©`) in the output. If compatibility with older browsers is a concern, don't use this option. +.It Sy "--encode --everything" +Encode every symbol in the input string, even safe printable ASCII symbols. +.It Sy "--encode --allow-unsafe" +Encode non-ASCII characters only. This leaves unsafe HTML/XML symbols like `&`, `<`, `>`, `"`, and `'` intact. +.It Sy "--decode" +Takes a string of HTML and decode any named and numerical character references in it using the algorithm described in the HTML spec. +.It Sy "--decode --attribute" +Parse the input as if it was an HTML attribute value rather than a string in an HTML text content. +.It Sy "--decode --strict" +Throw an error if an invalid character reference is encountered. +.It Sy "-v, --version" +Print he's version. +.It Sy "-h, --help" +Show the help screen. +.El +.Sh EXIT STATUS +The +.Nm he +utility exits with one of the following values: +.Pp +.Bl -tag -width flag -compact +.It Li 0 +.Nm +successfully encoded/decoded the input and printed the result. +.It Li 1 +.Nm +wasn't instructed to encode/decode anything (for example, the +.Ar --help +flag was set); or, an error occurred. +.El +.Sh EXAMPLES +.Bl -ohang -offset +.It Sy "he --escape ''" +Print an escaped version of the given string that is safe for use in HTML text contexts, escaping only `&`, `<`, `>`, `"`, and `'`. +.It Sy "he --decode '©𝌆'" +Print the decoded version of the given HTML string. +.It Sy "echo\ '©𝌆'\ |\ he --decode" +Print the decoded version of the HTML string that gets piped in. +.El +.Sh BUGS +he's bug tracker is located at . +.Sh AUTHOR +Mathias Bynens +.Sh WWW + diff --git a/node_modules/http-server/node_modules/ecstatic/node_modules/he/package.json b/node_modules/http-server/node_modules/ecstatic/node_modules/he/package.json new file mode 100644 index 0000000..90ef374 --- /dev/null +++ b/node_modules/http-server/node_modules/ecstatic/node_modules/he/package.json @@ -0,0 +1,81 @@ +{ + "name": "he", + "version": "0.5.0", + "description": "A robust HTML entities encoder/decoder with full Unicode support.", + "homepage": "http://mths.be/he", + "main": "he.js", + "bin": { + "he": "bin/he" + }, + "keywords": [ + "string", + "entities", + "entity", + "html", + "encode", + "decode", + "unicode" + ], + "license": "MIT", + "author": { + "name": "Mathias Bynens", + "url": "https://mathiasbynens.be/" + }, + "repository": { + "type": "git", + "url": "https://github.com/mathiasbynens/he.git" + }, + "bugs": { + "url": "https://github.com/mathiasbynens/he/issues" + }, + "files": [ + "LICENSE-MIT.txt", + "he.js", + "bin/", + "man/" + ], + "directories": { + "bin": "bin", + "man": "man", + "test": "tests" + }, + "scripts": { + "test": "node tests/tests.js" + }, + "devDependencies": { + "coveralls": "^2.11.1", + "grunt": "^0.4.5", + "grunt-shell": "^1.0.1", + "grunt-template": "^0.2.3", + "istanbul": "^0.3.0", + "jsesc": "^0.5.0", + "lodash": "^2.4.1", + "qunit-extras": "^1.1.0", + "qunitjs": "~1.11.0", + "regenerate": "^0.6.2", + "requirejs": "^2.1.14", + "string.fromcodepoint": "^0.2.1" + }, + "man": [ + "/Users/mathias/.npm/he/0.5.0/package/man/he.1" + ], + "_id": "he@0.5.0", + "_shasum": "2c05ffaef90b68e860f3fd2b54ef580989277ee2", + "_from": "he@>=0.5.0 <0.6.0", + "_npmVersion": "1.4.9", + "_npmUser": { + "name": "mathias", + "email": "mathias@qiwi.be" + }, + "maintainers": [ + { + "name": "mathias", + "email": "mathias@qiwi.be" + } + ], + "dist": { + "shasum": "2c05ffaef90b68e860f3fd2b54ef580989277ee2", + "tarball": "http://registry.npmjs.org/he/-/he-0.5.0.tgz" + }, + "_resolved": "https://registry.npmjs.org/he/-/he-0.5.0.tgz" +} diff --git a/node_modules/http-server/node_modules/ecstatic/node_modules/mime/.npmignore b/node_modules/http-server/node_modules/ecstatic/node_modules/mime/.npmignore new file mode 100644 index 0000000..e69de29 diff --git a/node_modules/http-server/node_modules/ecstatic/node_modules/mime/LICENSE b/node_modules/http-server/node_modules/ecstatic/node_modules/mime/LICENSE new file mode 100644 index 0000000..451fc45 --- /dev/null +++ b/node_modules/http-server/node_modules/ecstatic/node_modules/mime/LICENSE @@ -0,0 +1,19 @@ +Copyright (c) 2010 Benjamin Thomas, Robert Kieffer + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. diff --git a/node_modules/http-server/node_modules/ecstatic/node_modules/mime/README.md b/node_modules/http-server/node_modules/ecstatic/node_modules/mime/README.md new file mode 100644 index 0000000..506fbe5 --- /dev/null +++ b/node_modules/http-server/node_modules/ecstatic/node_modules/mime/README.md @@ -0,0 +1,90 @@ +# mime + +Comprehensive MIME type mapping API based on mime-db module. + +## Install + +Install with [npm](http://github.com/isaacs/npm): + + npm install mime + +## Contributing / Testing + + npm run test + +## Command Line + + mime [path_string] + +E.g. + + > mime scripts/jquery.js + application/javascript + +## API - Queries + +### mime.lookup(path) +Get the mime type associated with a file, if no mime type is found `application/octet-stream` is returned. Performs a case-insensitive lookup using the extension in `path` (the substring after the last '/' or '.'). E.g. + +```js +var mime = require('mime'); + +mime.lookup('/path/to/file.txt'); // => 'text/plain' +mime.lookup('file.txt'); // => 'text/plain' +mime.lookup('.TXT'); // => 'text/plain' +mime.lookup('htm'); // => 'text/html' +``` + +### mime.default_type +Sets the mime type returned when `mime.lookup` fails to find the extension searched for. (Default is `application/octet-stream`.) + +### mime.extension(type) +Get the default extension for `type` + +```js +mime.extension('text/html'); // => 'html' +mime.extension('application/octet-stream'); // => 'bin' +``` + +### mime.charsets.lookup() + +Map mime-type to charset + +```js +mime.charsets.lookup('text/plain'); // => 'UTF-8' +``` + +(The logic for charset lookups is pretty rudimentary. Feel free to suggest improvements.) + +## API - Defining Custom Types + +Custom type mappings can be added on a per-project basis via the following APIs. + +### mime.define() + +Add custom mime/extension mappings + +```js +mime.define({ + 'text/x-some-format': ['x-sf', 'x-sft', 'x-sfml'], + 'application/x-my-type': ['x-mt', 'x-mtt'], + // etc ... +}); + +mime.lookup('x-sft'); // => 'text/x-some-format' +``` + +The first entry in the extensions array is returned by `mime.extension()`. E.g. + +```js +mime.extension('text/x-some-format'); // => 'x-sf' +``` + +### mime.load(filepath) + +Load mappings from an Apache ".types" format file + +```js +mime.load('./my_project.types'); +``` +The .types file format is simple - See the `types` dir for examples. diff --git a/node_modules/http-server/node_modules/ecstatic/node_modules/mime/build/build.js b/node_modules/http-server/node_modules/ecstatic/node_modules/mime/build/build.js new file mode 100644 index 0000000..ed5313e --- /dev/null +++ b/node_modules/http-server/node_modules/ecstatic/node_modules/mime/build/build.js @@ -0,0 +1,11 @@ +var db = require('mime-db'); + +var mapByType = {}; +Object.keys(db).forEach(function(key) { + var extensions = db[key].extensions; + if (extensions) { + mapByType[key] = extensions; + } +}); + +console.log(JSON.stringify(mapByType)); diff --git a/node_modules/http-server/node_modules/ecstatic/node_modules/mime/build/test.js b/node_modules/http-server/node_modules/ecstatic/node_modules/mime/build/test.js new file mode 100644 index 0000000..58b9ba7 --- /dev/null +++ b/node_modules/http-server/node_modules/ecstatic/node_modules/mime/build/test.js @@ -0,0 +1,57 @@ +/** + * Usage: node test.js + */ + +var mime = require('../mime'); +var assert = require('assert'); +var path = require('path'); + +// +// Test mime lookups +// + +assert.equal('text/plain', mime.lookup('text.txt')); // normal file +assert.equal('text/plain', mime.lookup('TEXT.TXT')); // uppercase +assert.equal('text/plain', mime.lookup('dir/text.txt')); // dir + file +assert.equal('text/plain', mime.lookup('.text.txt')); // hidden file +assert.equal('text/plain', mime.lookup('.txt')); // nameless +assert.equal('text/plain', mime.lookup('txt')); // extension-only +assert.equal('text/plain', mime.lookup('/txt')); // extension-less () +assert.equal('text/plain', mime.lookup('\\txt')); // Windows, extension-less +assert.equal('application/octet-stream', mime.lookup('text.nope')); // unrecognized +assert.equal('fallback', mime.lookup('text.fallback', 'fallback')); // alternate default + +// +// Test extensions +// + +assert.equal('txt', mime.extension(mime.types.text)); +assert.equal('html', mime.extension(mime.types.htm)); +assert.equal('bin', mime.extension('application/octet-stream')); +assert.equal('bin', mime.extension('application/octet-stream ')); +assert.equal('html', mime.extension(' text/html; charset=UTF-8')); +assert.equal('html', mime.extension('text/html; charset=UTF-8 ')); +assert.equal('html', mime.extension('text/html; charset=UTF-8')); +assert.equal('html', mime.extension('text/html ; charset=UTF-8')); +assert.equal('html', mime.extension('text/html;charset=UTF-8')); +assert.equal('html', mime.extension('text/Html;charset=UTF-8')); +assert.equal(undefined, mime.extension('unrecognized')); + +// +// Test node.types lookups +// + +assert.equal('application/font-woff', mime.lookup('file.woff')); +assert.equal('application/octet-stream', mime.lookup('file.buffer')); +assert.equal('audio/mp4', mime.lookup('file.m4a')); +assert.equal('font/opentype', mime.lookup('file.otf')); + +// +// Test charsets +// + +assert.equal('UTF-8', mime.charsets.lookup('text/plain')); +assert.equal(undefined, mime.charsets.lookup(mime.types.js)); +assert.equal('fallback', mime.charsets.lookup('application/octet-stream', 'fallback')); + +console.log('\nAll tests passed'); diff --git a/node_modules/http-server/node_modules/ecstatic/node_modules/mime/cli.js b/node_modules/http-server/node_modules/ecstatic/node_modules/mime/cli.js new file mode 100755 index 0000000..20b1ffe --- /dev/null +++ b/node_modules/http-server/node_modules/ecstatic/node_modules/mime/cli.js @@ -0,0 +1,8 @@ +#!/usr/bin/env node + +var mime = require('./mime.js'); +var file = process.argv[2]; +var type = mime.lookup(file); + +process.stdout.write(type + '\n'); + diff --git a/node_modules/http-server/node_modules/ecstatic/node_modules/mime/mime.js b/node_modules/http-server/node_modules/ecstatic/node_modules/mime/mime.js new file mode 100644 index 0000000..341b6a5 --- /dev/null +++ b/node_modules/http-server/node_modules/ecstatic/node_modules/mime/mime.js @@ -0,0 +1,108 @@ +var path = require('path'); +var fs = require('fs'); + +function Mime() { + // Map of extension -> mime type + this.types = Object.create(null); + + // Map of mime type -> extension + this.extensions = Object.create(null); +} + +/** + * Define mimetype -> extension mappings. Each key is a mime-type that maps + * to an array of extensions associated with the type. The first extension is + * used as the default extension for the type. + * + * e.g. mime.define({'audio/ogg', ['oga', 'ogg', 'spx']}); + * + * @param map (Object) type definitions + */ +Mime.prototype.define = function (map) { + for (var type in map) { + var exts = map[type]; + for (var i = 0; i < exts.length; i++) { + if (process.env.DEBUG_MIME && this.types[exts]) { + console.warn(this._loading.replace(/.*\//, ''), 'changes "' + exts[i] + '" extension type from ' + + this.types[exts] + ' to ' + type); + } + + this.types[exts[i]] = type; + } + + // Default extension is the first one we encounter + if (!this.extensions[type]) { + this.extensions[type] = exts[0]; + } + } +}; + +/** + * Load an Apache2-style ".types" file + * + * This may be called multiple times (it's expected). Where files declare + * overlapping types/extensions, the last file wins. + * + * @param file (String) path of file to load. + */ +Mime.prototype.load = function(file) { + this._loading = file; + // Read file and split into lines + var map = {}, + content = fs.readFileSync(file, 'ascii'), + lines = content.split(/[\r\n]+/); + + lines.forEach(function(line) { + // Clean up whitespace/comments, and split into fields + var fields = line.replace(/\s*#.*|^\s*|\s*$/g, '').split(/\s+/); + map[fields.shift()] = fields; + }); + + this.define(map); + + this._loading = null; +}; + +/** + * Lookup a mime type based on extension + */ +Mime.prototype.lookup = function(path, fallback) { + var ext = path.replace(/.*[\.\/\\]/, '').toLowerCase(); + + return this.types[ext] || fallback || this.default_type; +}; + +/** + * Return file extension associated with a mime type + */ +Mime.prototype.extension = function(mimeType) { + var type = mimeType.match(/^\s*([^;\s]*)(?:;|\s|$)/)[1].toLowerCase(); + return this.extensions[type]; +}; + +// Default instance +var mime = new Mime(); + +// Define built-in types +mime.define(require('./types.json')); + +// Default type +mime.default_type = mime.lookup('bin'); + +// +// Additional API specific to the default instance +// + +mime.Mime = Mime; + +/** + * Lookup a charset based on mime type. + */ +mime.charsets = { + lookup: function(mimeType, fallback) { + // Assume text types are utf8 + return (/^text\//).test(mimeType) ? 'UTF-8' : fallback; + } +}; + +module.exports = mime; diff --git a/node_modules/http-server/node_modules/ecstatic/node_modules/mime/package.json b/node_modules/http-server/node_modules/ecstatic/node_modules/mime/package.json new file mode 100644 index 0000000..ca9102e --- /dev/null +++ b/node_modules/http-server/node_modules/ecstatic/node_modules/mime/package.json @@ -0,0 +1,73 @@ +{ + "author": { + "name": "Robert Kieffer", + "email": "robert@broofa.com", + "url": "http://github.com/broofa" + }, + "scripts": { + "prepublish": "node build/build.js > types.json", + "test": "node build/test.js" + }, + "bin": { + "mime": "cli.js" + }, + "contributors": [ + { + "name": "Benjamin Thomas", + "email": "benjamin@benjaminthomas.org", + "url": "http://github.com/bentomas" + } + ], + "description": "A comprehensive library for mime-type mapping", + "licenses": [ + { + "type": "MIT", + "url": "https://raw.github.com/broofa/node-mime/master/LICENSE" + } + ], + "dependencies": {}, + "devDependencies": { + "mime-db": "^1.2.0" + }, + "keywords": [ + "util", + "mime" + ], + "main": "mime.js", + "name": "mime", + "repository": { + "url": "https://github.com/broofa/node-mime", + "type": "git" + }, + "version": "1.3.4", + "gitHead": "1628f6e0187095009dcef4805c3a49706f137974", + "bugs": { + "url": "https://github.com/broofa/node-mime/issues" + }, + "homepage": "https://github.com/broofa/node-mime", + "_id": "mime@1.3.4", + "_shasum": "115f9e3b6b3daf2959983cb38f149a2d40eb5d53", + "_from": "mime@>=1.2.11 <2.0.0", + "_npmVersion": "1.4.28", + "_npmUser": { + "name": "broofa", + "email": "robert@broofa.com" + }, + "maintainers": [ + { + "name": "broofa", + "email": "robert@broofa.com" + }, + { + "name": "bentomas", + "email": "benjamin@benjaminthomas.org" + } + ], + "dist": { + "shasum": "115f9e3b6b3daf2959983cb38f149a2d40eb5d53", + "tarball": "http://registry.npmjs.org/mime/-/mime-1.3.4.tgz" + }, + "directories": {}, + "_resolved": "https://registry.npmjs.org/mime/-/mime-1.3.4.tgz", + "readme": "ERROR: No README data found!" +} diff --git a/node_modules/http-server/node_modules/ecstatic/node_modules/mime/types.json b/node_modules/http-server/node_modules/ecstatic/node_modules/mime/types.json new file mode 100644 index 0000000..c674b1c --- /dev/null +++ b/node_modules/http-server/node_modules/ecstatic/node_modules/mime/types.json @@ -0,0 +1 @@ +{"application/andrew-inset":["ez"],"application/applixware":["aw"],"application/atom+xml":["atom"],"application/atomcat+xml":["atomcat"],"application/atomsvc+xml":["atomsvc"],"application/ccxml+xml":["ccxml"],"application/cdmi-capability":["cdmia"],"application/cdmi-container":["cdmic"],"application/cdmi-domain":["cdmid"],"application/cdmi-object":["cdmio"],"application/cdmi-queue":["cdmiq"],"application/cu-seeme":["cu"],"application/dash+xml":["mdp"],"application/davmount+xml":["davmount"],"application/docbook+xml":["dbk"],"application/dssc+der":["dssc"],"application/dssc+xml":["xdssc"],"application/ecmascript":["ecma"],"application/emma+xml":["emma"],"application/epub+zip":["epub"],"application/exi":["exi"],"application/font-tdpfr":["pfr"],"application/font-woff":["woff"],"application/font-woff2":["woff2"],"application/gml+xml":["gml"],"application/gpx+xml":["gpx"],"application/gxf":["gxf"],"application/hyperstudio":["stk"],"application/inkml+xml":["ink","inkml"],"application/ipfix":["ipfix"],"application/java-archive":["jar"],"application/java-serialized-object":["ser"],"application/java-vm":["class"],"application/javascript":["js"],"application/json":["json","map"],"application/json5":["json5"],"application/jsonml+json":["jsonml"],"application/lost+xml":["lostxml"],"application/mac-binhex40":["hqx"],"application/mac-compactpro":["cpt"],"application/mads+xml":["mads"],"application/marc":["mrc"],"application/marcxml+xml":["mrcx"],"application/mathematica":["ma","nb","mb"],"application/mathml+xml":["mathml"],"application/mbox":["mbox"],"application/mediaservercontrol+xml":["mscml"],"application/metalink+xml":["metalink"],"application/metalink4+xml":["meta4"],"application/mets+xml":["mets"],"application/mods+xml":["mods"],"application/mp21":["m21","mp21"],"application/mp4":["mp4s","m4p"],"application/msword":["doc","dot"],"application/mxf":["mxf"],"application/octet-stream":["bin","dms","lrf","mar","so","dist","distz","pkg","bpk","dump","elc","deploy","buffer"],"application/oda":["oda"],"application/oebps-package+xml":["opf"],"application/ogg":["ogx"],"application/omdoc+xml":["omdoc"],"application/onenote":["onetoc","onetoc2","onetmp","onepkg"],"application/oxps":["oxps"],"application/patch-ops-error+xml":["xer"],"application/pdf":["pdf"],"application/pgp-encrypted":["pgp"],"application/pgp-signature":["asc","sig"],"application/pics-rules":["prf"],"application/pkcs10":["p10"],"application/pkcs7-mime":["p7m","p7c"],"application/pkcs7-signature":["p7s"],"application/pkcs8":["p8"],"application/pkix-attr-cert":["ac"],"application/pkix-cert":["cer"],"application/pkix-crl":["crl"],"application/pkix-pkipath":["pkipath"],"application/pkixcmp":["pki"],"application/pls+xml":["pls"],"application/postscript":["ai","eps","ps"],"application/prs.cww":["cww"],"application/pskc+xml":["pskcxml"],"application/rdf+xml":["rdf"],"application/reginfo+xml":["rif"],"application/relax-ng-compact-syntax":["rnc"],"application/resource-lists+xml":["rl"],"application/resource-lists-diff+xml":["rld"],"application/rls-services+xml":["rs"],"application/rpki-ghostbusters":["gbr"],"application/rpki-manifest":["mft"],"application/rpki-roa":["roa"],"application/rsd+xml":["rsd"],"application/rss+xml":["rss"],"application/rtf":["rtf"],"application/sbml+xml":["sbml"],"application/scvp-cv-request":["scq"],"application/scvp-cv-response":["scs"],"application/scvp-vp-request":["spq"],"application/scvp-vp-response":["spp"],"application/sdp":["sdp"],"application/set-payment-initiation":["setpay"],"application/set-registration-initiation":["setreg"],"application/shf+xml":["shf"],"application/smil+xml":["smi","smil"],"application/sparql-query":["rq"],"application/sparql-results+xml":["srx"],"application/srgs":["gram"],"application/srgs+xml":["grxml"],"application/sru+xml":["sru"],"application/ssdl+xml":["ssdl"],"application/ssml+xml":["ssml"],"application/tei+xml":["tei","teicorpus"],"application/thraud+xml":["tfi"],"application/timestamped-data":["tsd"],"application/vnd.3gpp.pic-bw-large":["plb"],"application/vnd.3gpp.pic-bw-small":["psb"],"application/vnd.3gpp.pic-bw-var":["pvb"],"application/vnd.3gpp2.tcap":["tcap"],"application/vnd.3m.post-it-notes":["pwn"],"application/vnd.accpac.simply.aso":["aso"],"application/vnd.accpac.simply.imp":["imp"],"application/vnd.acucobol":["acu"],"application/vnd.acucorp":["atc","acutc"],"application/vnd.adobe.air-application-installer-package+zip":["air"],"application/vnd.adobe.formscentral.fcdt":["fcdt"],"application/vnd.adobe.fxp":["fxp","fxpl"],"application/vnd.adobe.xdp+xml":["xdp"],"application/vnd.adobe.xfdf":["xfdf"],"application/vnd.ahead.space":["ahead"],"application/vnd.airzip.filesecure.azf":["azf"],"application/vnd.airzip.filesecure.azs":["azs"],"application/vnd.amazon.ebook":["azw"],"application/vnd.americandynamics.acc":["acc"],"application/vnd.amiga.ami":["ami"],"application/vnd.android.package-archive":["apk"],"application/vnd.anser-web-certificate-issue-initiation":["cii"],"application/vnd.anser-web-funds-transfer-initiation":["fti"],"application/vnd.antix.game-component":["atx"],"application/vnd.apple.installer+xml":["mpkg"],"application/vnd.apple.mpegurl":["m3u8"],"application/vnd.aristanetworks.swi":["swi"],"application/vnd.astraea-software.iota":["iota"],"application/vnd.audiograph":["aep"],"application/vnd.blueice.multipass":["mpm"],"application/vnd.bmi":["bmi"],"application/vnd.businessobjects":["rep"],"application/vnd.chemdraw+xml":["cdxml"],"application/vnd.chipnuts.karaoke-mmd":["mmd"],"application/vnd.cinderella":["cdy"],"application/vnd.claymore":["cla"],"application/vnd.cloanto.rp9":["rp9"],"application/vnd.clonk.c4group":["c4g","c4d","c4f","c4p","c4u"],"application/vnd.cluetrust.cartomobile-config":["c11amc"],"application/vnd.cluetrust.cartomobile-config-pkg":["c11amz"],"application/vnd.commonspace":["csp"],"application/vnd.contact.cmsg":["cdbcmsg"],"application/vnd.cosmocaller":["cmc"],"application/vnd.crick.clicker":["clkx"],"application/vnd.crick.clicker.keyboard":["clkk"],"application/vnd.crick.clicker.palette":["clkp"],"application/vnd.crick.clicker.template":["clkt"],"application/vnd.crick.clicker.wordbank":["clkw"],"application/vnd.criticaltools.wbs+xml":["wbs"],"application/vnd.ctc-posml":["pml"],"application/vnd.cups-ppd":["ppd"],"application/vnd.curl.car":["car"],"application/vnd.curl.pcurl":["pcurl"],"application/vnd.dart":["dart"],"application/vnd.data-vision.rdz":["rdz"],"application/vnd.dece.data":["uvf","uvvf","uvd","uvvd"],"application/vnd.dece.ttml+xml":["uvt","uvvt"],"application/vnd.dece.unspecified":["uvx","uvvx"],"application/vnd.dece.zip":["uvz","uvvz"],"application/vnd.denovo.fcselayout-link":["fe_launch"],"application/vnd.dna":["dna"],"application/vnd.dolby.mlp":["mlp"],"application/vnd.dpgraph":["dpg"],"application/vnd.dreamfactory":["dfac"],"application/vnd.ds-keypoint":["kpxx"],"application/vnd.dvb.ait":["ait"],"application/vnd.dvb.service":["svc"],"application/vnd.dynageo":["geo"],"application/vnd.ecowin.chart":["mag"],"application/vnd.enliven":["nml"],"application/vnd.epson.esf":["esf"],"application/vnd.epson.msf":["msf"],"application/vnd.epson.quickanime":["qam"],"application/vnd.epson.salt":["slt"],"application/vnd.epson.ssf":["ssf"],"application/vnd.eszigno3+xml":["es3","et3"],"application/vnd.ezpix-album":["ez2"],"application/vnd.ezpix-package":["ez3"],"application/vnd.fdf":["fdf"],"application/vnd.fdsn.mseed":["mseed"],"application/vnd.fdsn.seed":["seed","dataless"],"application/vnd.flographit":["gph"],"application/vnd.fluxtime.clip":["ftc"],"application/vnd.framemaker":["fm","frame","maker","book"],"application/vnd.frogans.fnc":["fnc"],"application/vnd.frogans.ltf":["ltf"],"application/vnd.fsc.weblaunch":["fsc"],"application/vnd.fujitsu.oasys":["oas"],"application/vnd.fujitsu.oasys2":["oa2"],"application/vnd.fujitsu.oasys3":["oa3"],"application/vnd.fujitsu.oasysgp":["fg5"],"application/vnd.fujitsu.oasysprs":["bh2"],"application/vnd.fujixerox.ddd":["ddd"],"application/vnd.fujixerox.docuworks":["xdw"],"application/vnd.fujixerox.docuworks.binder":["xbd"],"application/vnd.fuzzysheet":["fzs"],"application/vnd.genomatix.tuxedo":["txd"],"application/vnd.geogebra.file":["ggb"],"application/vnd.geogebra.tool":["ggt"],"application/vnd.geometry-explorer":["gex","gre"],"application/vnd.geonext":["gxt"],"application/vnd.geoplan":["g2w"],"application/vnd.geospace":["g3w"],"application/vnd.gmx":["gmx"],"application/vnd.google-earth.kml+xml":["kml"],"application/vnd.google-earth.kmz":["kmz"],"application/vnd.grafeq":["gqf","gqs"],"application/vnd.groove-account":["gac"],"application/vnd.groove-help":["ghf"],"application/vnd.groove-identity-message":["gim"],"application/vnd.groove-injector":["grv"],"application/vnd.groove-tool-message":["gtm"],"application/vnd.groove-tool-template":["tpl"],"application/vnd.groove-vcard":["vcg"],"application/vnd.hal+xml":["hal"],"application/vnd.handheld-entertainment+xml":["zmm"],"application/vnd.hbci":["hbci"],"application/vnd.hhe.lesson-player":["les"],"application/vnd.hp-hpgl":["hpgl"],"application/vnd.hp-hpid":["hpid"],"application/vnd.hp-hps":["hps"],"application/vnd.hp-jlyt":["jlt"],"application/vnd.hp-pcl":["pcl"],"application/vnd.hp-pclxl":["pclxl"],"application/vnd.ibm.minipay":["mpy"],"application/vnd.ibm.modcap":["afp","listafp","list3820"],"application/vnd.ibm.rights-management":["irm"],"application/vnd.ibm.secure-container":["sc"],"application/vnd.iccprofile":["icc","icm"],"application/vnd.igloader":["igl"],"application/vnd.immervision-ivp":["ivp"],"application/vnd.immervision-ivu":["ivu"],"application/vnd.insors.igm":["igm"],"application/vnd.intercon.formnet":["xpw","xpx"],"application/vnd.intergeo":["i2g"],"application/vnd.intu.qbo":["qbo"],"application/vnd.intu.qfx":["qfx"],"application/vnd.ipunplugged.rcprofile":["rcprofile"],"application/vnd.irepository.package+xml":["irp"],"application/vnd.is-xpr":["xpr"],"application/vnd.isac.fcs":["fcs"],"application/vnd.jam":["jam"],"application/vnd.jcp.javame.midlet-rms":["rms"],"application/vnd.jisp":["jisp"],"application/vnd.joost.joda-archive":["joda"],"application/vnd.kahootz":["ktz","ktr"],"application/vnd.kde.karbon":["karbon"],"application/vnd.kde.kchart":["chrt"],"application/vnd.kde.kformula":["kfo"],"application/vnd.kde.kivio":["flw"],"application/vnd.kde.kontour":["kon"],"application/vnd.kde.kpresenter":["kpr","kpt"],"application/vnd.kde.kspread":["ksp"],"application/vnd.kde.kword":["kwd","kwt"],"application/vnd.kenameaapp":["htke"],"application/vnd.kidspiration":["kia"],"application/vnd.kinar":["kne","knp"],"application/vnd.koan":["skp","skd","skt","skm"],"application/vnd.kodak-descriptor":["sse"],"application/vnd.las.las+xml":["lasxml"],"application/vnd.llamagraphics.life-balance.desktop":["lbd"],"application/vnd.llamagraphics.life-balance.exchange+xml":["lbe"],"application/vnd.lotus-1-2-3":["123"],"application/vnd.lotus-approach":["apr"],"application/vnd.lotus-freelance":["pre"],"application/vnd.lotus-notes":["nsf"],"application/vnd.lotus-organizer":["org"],"application/vnd.lotus-screencam":["scm"],"application/vnd.lotus-wordpro":["lwp"],"application/vnd.macports.portpkg":["portpkg"],"application/vnd.mcd":["mcd"],"application/vnd.medcalcdata":["mc1"],"application/vnd.mediastation.cdkey":["cdkey"],"application/vnd.mfer":["mwf"],"application/vnd.mfmp":["mfm"],"application/vnd.micrografx.flo":["flo"],"application/vnd.micrografx.igx":["igx"],"application/vnd.mif":["mif"],"application/vnd.mobius.daf":["daf"],"application/vnd.mobius.dis":["dis"],"application/vnd.mobius.mbk":["mbk"],"application/vnd.mobius.mqy":["mqy"],"application/vnd.mobius.msl":["msl"],"application/vnd.mobius.plc":["plc"],"application/vnd.mobius.txf":["txf"],"application/vnd.mophun.application":["mpn"],"application/vnd.mophun.certificate":["mpc"],"application/vnd.mozilla.xul+xml":["xul"],"application/vnd.ms-artgalry":["cil"],"application/vnd.ms-cab-compressed":["cab"],"application/vnd.ms-excel":["xls","xlm","xla","xlc","xlt","xlw"],"application/vnd.ms-excel.addin.macroenabled.12":["xlam"],"application/vnd.ms-excel.sheet.binary.macroenabled.12":["xlsb"],"application/vnd.ms-excel.sheet.macroenabled.12":["xlsm"],"application/vnd.ms-excel.template.macroenabled.12":["xltm"],"application/vnd.ms-fontobject":["eot"],"application/vnd.ms-htmlhelp":["chm"],"application/vnd.ms-ims":["ims"],"application/vnd.ms-lrm":["lrm"],"application/vnd.ms-officetheme":["thmx"],"application/vnd.ms-pki.seccat":["cat"],"application/vnd.ms-pki.stl":["stl"],"application/vnd.ms-powerpoint":["ppt","pps","pot"],"application/vnd.ms-powerpoint.addin.macroenabled.12":["ppam"],"application/vnd.ms-powerpoint.presentation.macroenabled.12":["pptm"],"application/vnd.ms-powerpoint.slide.macroenabled.12":["sldm"],"application/vnd.ms-powerpoint.slideshow.macroenabled.12":["ppsm"],"application/vnd.ms-powerpoint.template.macroenabled.12":["potm"],"application/vnd.ms-project":["mpp","mpt"],"application/vnd.ms-word.document.macroenabled.12":["docm"],"application/vnd.ms-word.template.macroenabled.12":["dotm"],"application/vnd.ms-works":["wps","wks","wcm","wdb"],"application/vnd.ms-wpl":["wpl"],"application/vnd.ms-xpsdocument":["xps"],"application/vnd.mseq":["mseq"],"application/vnd.musician":["mus"],"application/vnd.muvee.style":["msty"],"application/vnd.mynfc":["taglet"],"application/vnd.neurolanguage.nlu":["nlu"],"application/vnd.nitf":["ntf","nitf"],"application/vnd.noblenet-directory":["nnd"],"application/vnd.noblenet-sealer":["nns"],"application/vnd.noblenet-web":["nnw"],"application/vnd.nokia.n-gage.data":["ngdat"],"application/vnd.nokia.radio-preset":["rpst"],"application/vnd.nokia.radio-presets":["rpss"],"application/vnd.novadigm.edm":["edm"],"application/vnd.novadigm.edx":["edx"],"application/vnd.novadigm.ext":["ext"],"application/vnd.oasis.opendocument.chart":["odc"],"application/vnd.oasis.opendocument.chart-template":["otc"],"application/vnd.oasis.opendocument.database":["odb"],"application/vnd.oasis.opendocument.formula":["odf"],"application/vnd.oasis.opendocument.formula-template":["odft"],"application/vnd.oasis.opendocument.graphics":["odg"],"application/vnd.oasis.opendocument.graphics-template":["otg"],"application/vnd.oasis.opendocument.image":["odi"],"application/vnd.oasis.opendocument.image-template":["oti"],"application/vnd.oasis.opendocument.presentation":["odp"],"application/vnd.oasis.opendocument.presentation-template":["otp"],"application/vnd.oasis.opendocument.spreadsheet":["ods"],"application/vnd.oasis.opendocument.spreadsheet-template":["ots"],"application/vnd.oasis.opendocument.text":["odt"],"application/vnd.oasis.opendocument.text-master":["odm"],"application/vnd.oasis.opendocument.text-template":["ott"],"application/vnd.oasis.opendocument.text-web":["oth"],"application/vnd.olpc-sugar":["xo"],"application/vnd.oma.dd2+xml":["dd2"],"application/vnd.openofficeorg.extension":["oxt"],"application/vnd.openxmlformats-officedocument.presentationml.presentation":["pptx"],"application/vnd.openxmlformats-officedocument.presentationml.slide":["sldx"],"application/vnd.openxmlformats-officedocument.presentationml.slideshow":["ppsx"],"application/vnd.openxmlformats-officedocument.presentationml.template":["potx"],"application/vnd.openxmlformats-officedocument.spreadsheetml.sheet":["xlsx"],"application/vnd.openxmlformats-officedocument.spreadsheetml.template":["xltx"],"application/vnd.openxmlformats-officedocument.wordprocessingml.document":["docx"],"application/vnd.openxmlformats-officedocument.wordprocessingml.template":["dotx"],"application/vnd.osgeo.mapguide.package":["mgp"],"application/vnd.osgi.dp":["dp"],"application/vnd.osgi.subsystem":["esa"],"application/vnd.palm":["pdb","pqa","oprc"],"application/vnd.pawaafile":["paw"],"application/vnd.pg.format":["str"],"application/vnd.pg.osasli":["ei6"],"application/vnd.picsel":["efif"],"application/vnd.pmi.widget":["wg"],"application/vnd.pocketlearn":["plf"],"application/vnd.powerbuilder6":["pbd"],"application/vnd.previewsystems.box":["box"],"application/vnd.proteus.magazine":["mgz"],"application/vnd.publishare-delta-tree":["qps"],"application/vnd.pvi.ptid1":["ptid"],"application/vnd.quark.quarkxpress":["qxd","qxt","qwd","qwt","qxl","qxb"],"application/vnd.realvnc.bed":["bed"],"application/vnd.recordare.musicxml":["mxl"],"application/vnd.recordare.musicxml+xml":["musicxml"],"application/vnd.rig.cryptonote":["cryptonote"],"application/vnd.rim.cod":["cod"],"application/vnd.rn-realmedia":["rm"],"application/vnd.rn-realmedia-vbr":["rmvb"],"application/vnd.route66.link66+xml":["link66"],"application/vnd.sailingtracker.track":["st"],"application/vnd.seemail":["see"],"application/vnd.sema":["sema"],"application/vnd.semd":["semd"],"application/vnd.semf":["semf"],"application/vnd.shana.informed.formdata":["ifm"],"application/vnd.shana.informed.formtemplate":["itp"],"application/vnd.shana.informed.interchange":["iif"],"application/vnd.shana.informed.package":["ipk"],"application/vnd.simtech-mindmapper":["twd","twds"],"application/vnd.smaf":["mmf"],"application/vnd.smart.teacher":["teacher"],"application/vnd.solent.sdkm+xml":["sdkm","sdkd"],"application/vnd.spotfire.dxp":["dxp"],"application/vnd.spotfire.sfs":["sfs"],"application/vnd.stardivision.calc":["sdc"],"application/vnd.stardivision.draw":["sda"],"application/vnd.stardivision.impress":["sdd"],"application/vnd.stardivision.math":["smf"],"application/vnd.stardivision.writer":["sdw","vor"],"application/vnd.stardivision.writer-global":["sgl"],"application/vnd.stepmania.package":["smzip"],"application/vnd.stepmania.stepchart":["sm"],"application/vnd.sun.xml.calc":["sxc"],"application/vnd.sun.xml.calc.template":["stc"],"application/vnd.sun.xml.draw":["sxd"],"application/vnd.sun.xml.draw.template":["std"],"application/vnd.sun.xml.impress":["sxi"],"application/vnd.sun.xml.impress.template":["sti"],"application/vnd.sun.xml.math":["sxm"],"application/vnd.sun.xml.writer":["sxw"],"application/vnd.sun.xml.writer.global":["sxg"],"application/vnd.sun.xml.writer.template":["stw"],"application/vnd.sus-calendar":["sus","susp"],"application/vnd.svd":["svd"],"application/vnd.symbian.install":["sis","sisx"],"application/vnd.syncml+xml":["xsm"],"application/vnd.syncml.dm+wbxml":["bdm"],"application/vnd.syncml.dm+xml":["xdm"],"application/vnd.tao.intent-module-archive":["tao"],"application/vnd.tcpdump.pcap":["pcap","cap","dmp"],"application/vnd.tmobile-livetv":["tmo"],"application/vnd.trid.tpt":["tpt"],"application/vnd.triscape.mxs":["mxs"],"application/vnd.trueapp":["tra"],"application/vnd.ufdl":["ufd","ufdl"],"application/vnd.uiq.theme":["utz"],"application/vnd.umajin":["umj"],"application/vnd.unity":["unityweb"],"application/vnd.uoml+xml":["uoml"],"application/vnd.vcx":["vcx"],"application/vnd.visio":["vsd","vst","vss","vsw"],"application/vnd.visionary":["vis"],"application/vnd.vsf":["vsf"],"application/vnd.wap.wbxml":["wbxml"],"application/vnd.wap.wmlc":["wmlc"],"application/vnd.wap.wmlscriptc":["wmlsc"],"application/vnd.webturbo":["wtb"],"application/vnd.wolfram.player":["nbp"],"application/vnd.wordperfect":["wpd"],"application/vnd.wqd":["wqd"],"application/vnd.wt.stf":["stf"],"application/vnd.xara":["xar"],"application/vnd.xfdl":["xfdl"],"application/vnd.yamaha.hv-dic":["hvd"],"application/vnd.yamaha.hv-script":["hvs"],"application/vnd.yamaha.hv-voice":["hvp"],"application/vnd.yamaha.openscoreformat":["osf"],"application/vnd.yamaha.openscoreformat.osfpvg+xml":["osfpvg"],"application/vnd.yamaha.smaf-audio":["saf"],"application/vnd.yamaha.smaf-phrase":["spf"],"application/vnd.yellowriver-custom-menu":["cmp"],"application/vnd.zul":["zir","zirz"],"application/vnd.zzazz.deck+xml":["zaz"],"application/voicexml+xml":["vxml"],"application/widget":["wgt"],"application/winhlp":["hlp"],"application/wsdl+xml":["wsdl"],"application/wspolicy+xml":["wspolicy"],"application/x-7z-compressed":["7z"],"application/x-abiword":["abw"],"application/x-ace-compressed":["ace"],"application/x-apple-diskimage":["dmg"],"application/x-authorware-bin":["aab","x32","u32","vox"],"application/x-authorware-map":["aam"],"application/x-authorware-seg":["aas"],"application/x-bcpio":["bcpio"],"application/x-bittorrent":["torrent"],"application/x-blorb":["blb","blorb"],"application/x-bzip":["bz"],"application/x-bzip2":["bz2","boz"],"application/x-cbr":["cbr","cba","cbt","cbz","cb7"],"application/x-cdlink":["vcd"],"application/x-cfs-compressed":["cfs"],"application/x-chat":["chat"],"application/x-chess-pgn":["pgn"],"application/x-chrome-extension":["crx"],"application/x-conference":["nsc"],"application/x-cpio":["cpio"],"application/x-csh":["csh"],"application/x-debian-package":["deb","udeb"],"application/x-dgc-compressed":["dgc"],"application/x-director":["dir","dcr","dxr","cst","cct","cxt","w3d","fgd","swa"],"application/x-doom":["wad"],"application/x-dtbncx+xml":["ncx"],"application/x-dtbook+xml":["dtb"],"application/x-dtbresource+xml":["res"],"application/x-dvi":["dvi"],"application/x-envoy":["evy"],"application/x-eva":["eva"],"application/x-font-bdf":["bdf"],"application/x-font-ghostscript":["gsf"],"application/x-font-linux-psf":["psf"],"application/x-font-otf":["otf"],"application/x-font-pcf":["pcf"],"application/x-font-snf":["snf"],"application/x-font-ttf":["ttf","ttc"],"application/x-font-type1":["pfa","pfb","pfm","afm"],"application/x-freearc":["arc"],"application/x-futuresplash":["spl"],"application/x-gca-compressed":["gca"],"application/x-glulx":["ulx"],"application/x-gnumeric":["gnumeric"],"application/x-gramps-xml":["gramps"],"application/x-gtar":["gtar"],"application/x-hdf":["hdf"],"application/x-install-instructions":["install"],"application/x-iso9660-image":["iso"],"application/x-java-jnlp-file":["jnlp"],"application/x-latex":["latex"],"application/x-lua-bytecode":["luac"],"application/x-lzh-compressed":["lzh","lha"],"application/x-mie":["mie"],"application/x-mobipocket-ebook":["prc","mobi"],"application/x-ms-application":["application"],"application/x-ms-shortcut":["lnk"],"application/x-ms-wmd":["wmd"],"application/x-ms-wmz":["wmz"],"application/x-ms-xbap":["xbap"],"application/x-msaccess":["mdb"],"application/x-msbinder":["obd"],"application/x-mscardfile":["crd"],"application/x-msclip":["clp"],"application/x-msdownload":["exe","dll","com","bat","msi"],"application/x-msmediaview":["mvb","m13","m14"],"application/x-msmetafile":["wmf","wmz","emf","emz"],"application/x-msmoney":["mny"],"application/x-mspublisher":["pub"],"application/x-msschedule":["scd"],"application/x-msterminal":["trm"],"application/x-mswrite":["wri"],"application/x-netcdf":["nc","cdf"],"application/x-nzb":["nzb"],"application/x-pkcs12":["p12","pfx"],"application/x-pkcs7-certificates":["p7b","spc"],"application/x-pkcs7-certreqresp":["p7r"],"application/x-rar-compressed":["rar"],"application/x-research-info-systems":["ris"],"application/x-sh":["sh"],"application/x-shar":["shar"],"application/x-shockwave-flash":["swf"],"application/x-silverlight-app":["xap"],"application/x-sql":["sql"],"application/x-stuffit":["sit"],"application/x-stuffitx":["sitx"],"application/x-subrip":["srt"],"application/x-sv4cpio":["sv4cpio"],"application/x-sv4crc":["sv4crc"],"application/x-t3vm-image":["t3"],"application/x-tads":["gam"],"application/x-tar":["tar"],"application/x-tcl":["tcl"],"application/x-tex":["tex"],"application/x-tex-tfm":["tfm"],"application/x-texinfo":["texinfo","texi"],"application/x-tgif":["obj"],"application/x-ustar":["ustar"],"application/x-wais-source":["src"],"application/x-web-app-manifest+json":["webapp"],"application/x-x509-ca-cert":["der","crt"],"application/x-xfig":["fig"],"application/x-xliff+xml":["xlf"],"application/x-xpinstall":["xpi"],"application/x-xz":["xz"],"application/x-zmachine":["z1","z2","z3","z4","z5","z6","z7","z8"],"application/xaml+xml":["xaml"],"application/xcap-diff+xml":["xdf"],"application/xenc+xml":["xenc"],"application/xhtml+xml":["xhtml","xht"],"application/xml":["xml","xsl","xsd"],"application/xml-dtd":["dtd"],"application/xop+xml":["xop"],"application/xproc+xml":["xpl"],"application/xslt+xml":["xslt"],"application/xspf+xml":["xspf"],"application/xv+xml":["mxml","xhvml","xvml","xvm"],"application/yang":["yang"],"application/yin+xml":["yin"],"application/zip":["zip"],"audio/adpcm":["adp"],"audio/basic":["au","snd"],"audio/midi":["mid","midi","kar","rmi"],"audio/mp4":["mp4a","m4a"],"audio/mpeg":["mpga","mp2","mp2a","mp3","m2a","m3a"],"audio/ogg":["oga","ogg","spx"],"audio/s3m":["s3m"],"audio/silk":["sil"],"audio/vnd.dece.audio":["uva","uvva"],"audio/vnd.digital-winds":["eol"],"audio/vnd.dra":["dra"],"audio/vnd.dts":["dts"],"audio/vnd.dts.hd":["dtshd"],"audio/vnd.lucent.voice":["lvp"],"audio/vnd.ms-playready.media.pya":["pya"],"audio/vnd.nuera.ecelp4800":["ecelp4800"],"audio/vnd.nuera.ecelp7470":["ecelp7470"],"audio/vnd.nuera.ecelp9600":["ecelp9600"],"audio/vnd.rip":["rip"],"audio/webm":["weba"],"audio/x-aac":["aac"],"audio/x-aiff":["aif","aiff","aifc"],"audio/x-caf":["caf"],"audio/x-flac":["flac"],"audio/x-matroska":["mka"],"audio/x-mpegurl":["m3u"],"audio/x-ms-wax":["wax"],"audio/x-ms-wma":["wma"],"audio/x-pn-realaudio":["ram","ra"],"audio/x-pn-realaudio-plugin":["rmp"],"audio/x-wav":["wav"],"audio/xm":["xm"],"chemical/x-cdx":["cdx"],"chemical/x-cif":["cif"],"chemical/x-cmdf":["cmdf"],"chemical/x-cml":["cml"],"chemical/x-csml":["csml"],"chemical/x-xyz":["xyz"],"font/opentype":["otf"],"image/bmp":["bmp"],"image/cgm":["cgm"],"image/g3fax":["g3"],"image/gif":["gif"],"image/ief":["ief"],"image/jpeg":["jpeg","jpg","jpe"],"image/ktx":["ktx"],"image/png":["png"],"image/prs.btif":["btif"],"image/sgi":["sgi"],"image/svg+xml":["svg","svgz"],"image/tiff":["tiff","tif"],"image/vnd.adobe.photoshop":["psd"],"image/vnd.dece.graphic":["uvi","uvvi","uvg","uvvg"],"image/vnd.djvu":["djvu","djv"],"image/vnd.dvb.subtitle":["sub"],"image/vnd.dwg":["dwg"],"image/vnd.dxf":["dxf"],"image/vnd.fastbidsheet":["fbs"],"image/vnd.fpx":["fpx"],"image/vnd.fst":["fst"],"image/vnd.fujixerox.edmics-mmr":["mmr"],"image/vnd.fujixerox.edmics-rlc":["rlc"],"image/vnd.ms-modi":["mdi"],"image/vnd.ms-photo":["wdp"],"image/vnd.net-fpx":["npx"],"image/vnd.wap.wbmp":["wbmp"],"image/vnd.xiff":["xif"],"image/webp":["webp"],"image/x-3ds":["3ds"],"image/x-cmu-raster":["ras"],"image/x-cmx":["cmx"],"image/x-freehand":["fh","fhc","fh4","fh5","fh7"],"image/x-icon":["ico"],"image/x-mrsid-image":["sid"],"image/x-pcx":["pcx"],"image/x-pict":["pic","pct"],"image/x-portable-anymap":["pnm"],"image/x-portable-bitmap":["pbm"],"image/x-portable-graymap":["pgm"],"image/x-portable-pixmap":["ppm"],"image/x-rgb":["rgb"],"image/x-tga":["tga"],"image/x-xbitmap":["xbm"],"image/x-xpixmap":["xpm"],"image/x-xwindowdump":["xwd"],"message/rfc822":["eml","mime"],"model/iges":["igs","iges"],"model/mesh":["msh","mesh","silo"],"model/vnd.collada+xml":["dae"],"model/vnd.dwf":["dwf"],"model/vnd.gdl":["gdl"],"model/vnd.gtw":["gtw"],"model/vnd.mts":["mts"],"model/vnd.vtu":["vtu"],"model/vrml":["wrl","vrml"],"model/x3d+binary":["x3db","x3dbz"],"model/x3d+vrml":["x3dv","x3dvz"],"model/x3d+xml":["x3d","x3dz"],"text/cache-manifest":["appcache","manifest"],"text/calendar":["ics","ifb"],"text/coffeescript":["coffee"],"text/css":["css"],"text/csv":["csv"],"text/hjson":["hjson"],"text/html":["html","htm"],"text/jade":["jade"],"text/jsx":["jsx"],"text/less":["less"],"text/n3":["n3"],"text/plain":["txt","text","conf","def","list","log","in","ini"],"text/prs.lines.tag":["dsc"],"text/richtext":["rtx"],"text/sgml":["sgml","sgm"],"text/stylus":["stylus","styl"],"text/tab-separated-values":["tsv"],"text/troff":["t","tr","roff","man","me","ms"],"text/turtle":["ttl"],"text/uri-list":["uri","uris","urls"],"text/vcard":["vcard"],"text/vnd.curl":["curl"],"text/vnd.curl.dcurl":["dcurl"],"text/vnd.curl.mcurl":["mcurl"],"text/vnd.curl.scurl":["scurl"],"text/vnd.dvb.subtitle":["sub"],"text/vnd.fly":["fly"],"text/vnd.fmi.flexstor":["flx"],"text/vnd.graphviz":["gv"],"text/vnd.in3d.3dml":["3dml"],"text/vnd.in3d.spot":["spot"],"text/vnd.sun.j2me.app-descriptor":["jad"],"text/vnd.wap.wml":["wml"],"text/vnd.wap.wmlscript":["wmls"],"text/vtt":["vtt"],"text/x-asm":["s","asm"],"text/x-c":["c","cc","cxx","cpp","h","hh","dic"],"text/x-component":["htc"],"text/x-fortran":["f","for","f77","f90"],"text/x-handlebars-template":["hbs"],"text/x-java-source":["java"],"text/x-lua":["lua"],"text/x-markdown":["markdown","md","mkd"],"text/x-nfo":["nfo"],"text/x-opml":["opml"],"text/x-pascal":["p","pas"],"text/x-sass":["sass"],"text/x-scss":["scss"],"text/x-setext":["etx"],"text/x-sfv":["sfv"],"text/x-uuencode":["uu"],"text/x-vcalendar":["vcs"],"text/x-vcard":["vcf"],"text/yaml":["yaml","yml"],"video/3gpp":["3gp"],"video/3gpp2":["3g2"],"video/h261":["h261"],"video/h263":["h263"],"video/h264":["h264"],"video/jpeg":["jpgv"],"video/jpm":["jpm","jpgm"],"video/mj2":["mj2","mjp2"],"video/mp2t":["ts"],"video/mp4":["mp4","mp4v","mpg4"],"video/mpeg":["mpeg","mpg","mpe","m1v","m2v"],"video/ogg":["ogv"],"video/quicktime":["qt","mov"],"video/vnd.dece.hd":["uvh","uvvh"],"video/vnd.dece.mobile":["uvm","uvvm"],"video/vnd.dece.pd":["uvp","uvvp"],"video/vnd.dece.sd":["uvs","uvvs"],"video/vnd.dece.video":["uvv","uvvv"],"video/vnd.dvb.file":["dvb"],"video/vnd.fvt":["fvt"],"video/vnd.mpegurl":["mxu","m4u"],"video/vnd.ms-playready.media.pyv":["pyv"],"video/vnd.uvvu.mp4":["uvu","uvvu"],"video/vnd.vivo":["viv"],"video/webm":["webm"],"video/x-f4v":["f4v"],"video/x-fli":["fli"],"video/x-flv":["flv"],"video/x-m4v":["m4v"],"video/x-matroska":["mkv","mk3d","mks"],"video/x-mng":["mng"],"video/x-ms-asf":["asf","asx"],"video/x-ms-vob":["vob"],"video/x-ms-wm":["wm"],"video/x-ms-wmv":["wmv"],"video/x-ms-wmx":["wmx"],"video/x-ms-wvx":["wvx"],"video/x-msvideo":["avi"],"video/x-sgi-movie":["movie"],"video/x-smv":["smv"],"x-conference/x-cooltalk":["ice"]} diff --git a/node_modules/http-server/node_modules/ecstatic/node_modules/minimist/.travis.yml b/node_modules/http-server/node_modules/ecstatic/node_modules/minimist/.travis.yml new file mode 100644 index 0000000..74c57bf --- /dev/null +++ b/node_modules/http-server/node_modules/ecstatic/node_modules/minimist/.travis.yml @@ -0,0 +1,8 @@ +language: node_js +node_js: + - "0.8" + - "0.10" + - "0.12" + - "iojs" +before_install: + - npm install -g npm@~1.4.6 diff --git a/node_modules/http-server/node_modules/ecstatic/node_modules/minimist/LICENSE b/node_modules/http-server/node_modules/ecstatic/node_modules/minimist/LICENSE new file mode 100644 index 0000000..ee27ba4 --- /dev/null +++ b/node_modules/http-server/node_modules/ecstatic/node_modules/minimist/LICENSE @@ -0,0 +1,18 @@ +This software is released under the MIT license: + +Permission is hereby granted, free of charge, to any person obtaining a copy of +this software and associated documentation files (the "Software"), to deal in +the Software without restriction, including without limitation the rights to +use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of +the Software, and to permit persons to whom the Software is furnished to do so, +subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS +FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR +COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER +IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN +CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/node_modules/http-server/node_modules/ecstatic/node_modules/minimist/example/parse.js b/node_modules/http-server/node_modules/ecstatic/node_modules/minimist/example/parse.js new file mode 100644 index 0000000..abff3e8 --- /dev/null +++ b/node_modules/http-server/node_modules/ecstatic/node_modules/minimist/example/parse.js @@ -0,0 +1,2 @@ +var argv = require('../')(process.argv.slice(2)); +console.dir(argv); diff --git a/node_modules/http-server/node_modules/ecstatic/node_modules/minimist/index.js b/node_modules/http-server/node_modules/ecstatic/node_modules/minimist/index.js new file mode 100644 index 0000000..6a0559d --- /dev/null +++ b/node_modules/http-server/node_modules/ecstatic/node_modules/minimist/index.js @@ -0,0 +1,236 @@ +module.exports = function (args, opts) { + if (!opts) opts = {}; + + var flags = { bools : {}, strings : {}, unknownFn: null }; + + if (typeof opts['unknown'] === 'function') { + flags.unknownFn = opts['unknown']; + } + + if (typeof opts['boolean'] === 'boolean' && opts['boolean']) { + flags.allBools = true; + } else { + [].concat(opts['boolean']).filter(Boolean).forEach(function (key) { + flags.bools[key] = true; + }); + } + + var aliases = {}; + Object.keys(opts.alias || {}).forEach(function (key) { + aliases[key] = [].concat(opts.alias[key]); + aliases[key].forEach(function (x) { + aliases[x] = [key].concat(aliases[key].filter(function (y) { + return x !== y; + })); + }); + }); + + [].concat(opts.string).filter(Boolean).forEach(function (key) { + flags.strings[key] = true; + if (aliases[key]) { + flags.strings[aliases[key]] = true; + } + }); + + var defaults = opts['default'] || {}; + + var argv = { _ : [] }; + Object.keys(flags.bools).forEach(function (key) { + setArg(key, defaults[key] === undefined ? false : defaults[key]); + }); + + var notFlags = []; + + if (args.indexOf('--') !== -1) { + notFlags = args.slice(args.indexOf('--')+1); + args = args.slice(0, args.indexOf('--')); + } + + function argDefined(key, arg) { + return (flags.allBools && /^--[^=]+$/.test(arg)) || + flags.strings[key] || flags.bools[key] || aliases[key]; + } + + function setArg (key, val, arg) { + if (arg && flags.unknownFn && !argDefined(key, arg)) { + if (flags.unknownFn(arg) === false) return; + } + + var value = !flags.strings[key] && isNumber(val) + ? Number(val) : val + ; + setKey(argv, key.split('.'), value); + + (aliases[key] || []).forEach(function (x) { + setKey(argv, x.split('.'), value); + }); + } + + function setKey (obj, keys, value) { + var o = obj; + keys.slice(0,-1).forEach(function (key) { + if (o[key] === undefined) o[key] = {}; + o = o[key]; + }); + + var key = keys[keys.length - 1]; + if (o[key] === undefined || flags.bools[key] || typeof o[key] === 'boolean') { + o[key] = value; + } + else if (Array.isArray(o[key])) { + o[key].push(value); + } + else { + o[key] = [ o[key], value ]; + } + } + + function aliasIsBoolean(key) { + return aliases[key].some(function (x) { + return flags.bools[x]; + }); + } + + for (var i = 0; i < args.length; i++) { + var arg = args[i]; + + if (/^--.+=/.test(arg)) { + // Using [\s\S] instead of . because js doesn't support the + // 'dotall' regex modifier. See: + // http://stackoverflow.com/a/1068308/13216 + var m = arg.match(/^--([^=]+)=([\s\S]*)$/); + var key = m[1]; + var value = m[2]; + if (flags.bools[key]) { + value = value !== 'false'; + } + setArg(key, value, arg); + } + else if (/^--no-.+/.test(arg)) { + var key = arg.match(/^--no-(.+)/)[1]; + setArg(key, false, arg); + } + else if (/^--.+/.test(arg)) { + var key = arg.match(/^--(.+)/)[1]; + var next = args[i + 1]; + if (next !== undefined && !/^-/.test(next) + && !flags.bools[key] + && !flags.allBools + && (aliases[key] ? !aliasIsBoolean(key) : true)) { + setArg(key, next, arg); + i++; + } + else if (/^(true|false)$/.test(next)) { + setArg(key, next === 'true', arg); + i++; + } + else { + setArg(key, flags.strings[key] ? '' : true, arg); + } + } + else if (/^-[^-]+/.test(arg)) { + var letters = arg.slice(1,-1).split(''); + + var broken = false; + for (var j = 0; j < letters.length; j++) { + var next = arg.slice(j+2); + + if (next === '-') { + setArg(letters[j], next, arg) + continue; + } + + if (/[A-Za-z]/.test(letters[j]) && /=/.test(next)) { + setArg(letters[j], next.split('=')[1], arg); + broken = true; + break; + } + + if (/[A-Za-z]/.test(letters[j]) + && /-?\d+(\.\d*)?(e-?\d+)?$/.test(next)) { + setArg(letters[j], next, arg); + broken = true; + break; + } + + if (letters[j+1] && letters[j+1].match(/\W/)) { + setArg(letters[j], arg.slice(j+2), arg); + broken = true; + break; + } + else { + setArg(letters[j], flags.strings[letters[j]] ? '' : true, arg); + } + } + + var key = arg.slice(-1)[0]; + if (!broken && key !== '-') { + if (args[i+1] && !/^(-|--)[^-]/.test(args[i+1]) + && !flags.bools[key] + && (aliases[key] ? !aliasIsBoolean(key) : true)) { + setArg(key, args[i+1], arg); + i++; + } + else if (args[i+1] && /true|false/.test(args[i+1])) { + setArg(key, args[i+1] === 'true', arg); + i++; + } + else { + setArg(key, flags.strings[key] ? '' : true, arg); + } + } + } + else { + if (!flags.unknownFn || flags.unknownFn(arg) !== false) { + argv._.push( + flags.strings['_'] || !isNumber(arg) ? arg : Number(arg) + ); + } + if (opts.stopEarly) { + argv._.push.apply(argv._, args.slice(i + 1)); + break; + } + } + } + + Object.keys(defaults).forEach(function (key) { + if (!hasKey(argv, key.split('.'))) { + setKey(argv, key.split('.'), defaults[key]); + + (aliases[key] || []).forEach(function (x) { + setKey(argv, x.split('.'), defaults[key]); + }); + } + }); + + if (opts['--']) { + argv['--'] = new Array(); + notFlags.forEach(function(key) { + argv['--'].push(key); + }); + } + else { + notFlags.forEach(function(key) { + argv._.push(key); + }); + } + + return argv; +}; + +function hasKey (obj, keys) { + var o = obj; + keys.slice(0,-1).forEach(function (key) { + o = (o[key] || {}); + }); + + var key = keys[keys.length - 1]; + return key in o; +} + +function isNumber (x) { + if (typeof x === 'number') return true; + if (/^0x[0-9a-f]+$/i.test(x)) return true; + return /^[-+]?(?:\d+(?:\.\d*)?|\.\d+)(e[-+]?\d+)?$/.test(x); +} + diff --git a/node_modules/http-server/node_modules/ecstatic/node_modules/minimist/package.json b/node_modules/http-server/node_modules/ecstatic/node_modules/minimist/package.json new file mode 100644 index 0000000..a83aca9 --- /dev/null +++ b/node_modules/http-server/node_modules/ecstatic/node_modules/minimist/package.json @@ -0,0 +1,71 @@ +{ + "name": "minimist", + "version": "1.2.0", + "description": "parse argument options", + "main": "index.js", + "devDependencies": { + "covert": "^1.0.0", + "tap": "~0.4.0", + "tape": "^3.5.0" + }, + "scripts": { + "test": "tap test/*.js", + "coverage": "covert test/*.js" + }, + "testling": { + "files": "test/*.js", + "browsers": [ + "ie/6..latest", + "ff/5", + "firefox/latest", + "chrome/10", + "chrome/latest", + "safari/5.1", + "safari/latest", + "opera/12" + ] + }, + "repository": { + "type": "git", + "url": "git://github.com/substack/minimist.git" + }, + "homepage": "https://github.com/substack/minimist", + "keywords": [ + "argv", + "getopt", + "parser", + "optimist" + ], + "author": { + "name": "James Halliday", + "email": "mail@substack.net", + "url": "http://substack.net" + }, + "license": "MIT", + "gitHead": "dc624482fcfec5bc669c68cdb861f00573ed4e64", + "bugs": { + "url": "https://github.com/substack/minimist/issues" + }, + "_id": "minimist@1.2.0", + "_shasum": "a35008b20f41383eec1fb914f4cd5df79a264284", + "_from": "minimist@>=1.1.0 <2.0.0", + "_npmVersion": "3.2.2", + "_nodeVersion": "2.4.0", + "_npmUser": { + "name": "substack", + "email": "substack@gmail.com" + }, + "dist": { + "shasum": "a35008b20f41383eec1fb914f4cd5df79a264284", + "tarball": "http://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz" + }, + "maintainers": [ + { + "name": "substack", + "email": "mail@substack.net" + } + ], + "directories": {}, + "_resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", + "readme": "ERROR: No README data found!" +} diff --git a/node_modules/http-server/node_modules/ecstatic/node_modules/minimist/readme.markdown b/node_modules/http-server/node_modules/ecstatic/node_modules/minimist/readme.markdown new file mode 100644 index 0000000..30a74cf --- /dev/null +++ b/node_modules/http-server/node_modules/ecstatic/node_modules/minimist/readme.markdown @@ -0,0 +1,91 @@ +# minimist + +parse argument options + +This module is the guts of optimist's argument parser without all the +fanciful decoration. + +[![browser support](https://ci.testling.com/substack/minimist.png)](http://ci.testling.com/substack/minimist) + +[![build status](https://secure.travis-ci.org/substack/minimist.png)](http://travis-ci.org/substack/minimist) + +# example + +``` js +var argv = require('minimist')(process.argv.slice(2)); +console.dir(argv); +``` + +``` +$ node example/parse.js -a beep -b boop +{ _: [], a: 'beep', b: 'boop' } +``` + +``` +$ node example/parse.js -x 3 -y 4 -n5 -abc --beep=boop foo bar baz +{ _: [ 'foo', 'bar', 'baz' ], + x: 3, + y: 4, + n: 5, + a: true, + b: true, + c: true, + beep: 'boop' } +``` + +# methods + +``` js +var parseArgs = require('minimist') +``` + +## var argv = parseArgs(args, opts={}) + +Return an argument object `argv` populated with the array arguments from `args`. + +`argv._` contains all the arguments that didn't have an option associated with +them. + +Numeric-looking arguments will be returned as numbers unless `opts.string` or +`opts.boolean` is set for that argument name. + +Any arguments after `'--'` will not be parsed and will end up in `argv._`. + +options can be: + +* `opts.string` - a string or array of strings argument names to always treat as +strings +* `opts.boolean` - a boolean, string or array of strings to always treat as +booleans. if `true` will treat all double hyphenated arguments without equal signs +as boolean (e.g. affects `--foo`, not `-f` or `--foo=bar`) +* `opts.alias` - an object mapping string names to strings or arrays of string +argument names to use as aliases +* `opts.default` - an object mapping string argument names to default values +* `opts.stopEarly` - when true, populate `argv._` with everything after the +first non-option +* `opts['--']` - when true, populate `argv._` with everything before the `--` +and `argv['--']` with everything after the `--`. Here's an example: +* `opts.unknown` - a function which is invoked with a command line parameter not +defined in the `opts` configuration object. If the function returns `false`, the +unknown option is not added to `argv`. + +``` +> require('./')('one two three -- four five --six'.split(' '), { '--': true }) +{ _: [ 'one', 'two', 'three' ], + '--': [ 'four', 'five', '--six' ] } +``` + +Note that with `opts['--']` set, parsing for arguments still stops after the +`--`. + +# install + +With [npm](https://npmjs.org) do: + +``` +npm install minimist +``` + +# license + +MIT diff --git a/node_modules/http-server/node_modules/ecstatic/node_modules/minimist/test/all_bool.js b/node_modules/http-server/node_modules/ecstatic/node_modules/minimist/test/all_bool.js new file mode 100644 index 0000000..ac83548 --- /dev/null +++ b/node_modules/http-server/node_modules/ecstatic/node_modules/minimist/test/all_bool.js @@ -0,0 +1,32 @@ +var parse = require('../'); +var test = require('tape'); + +test('flag boolean true (default all --args to boolean)', function (t) { + var argv = parse(['moo', '--honk', 'cow'], { + boolean: true + }); + + t.deepEqual(argv, { + honk: true, + _: ['moo', 'cow'] + }); + + t.deepEqual(typeof argv.honk, 'boolean'); + t.end(); +}); + +test('flag boolean true only affects double hyphen arguments without equals signs', function (t) { + var argv = parse(['moo', '--honk', 'cow', '-p', '55', '--tacos=good'], { + boolean: true + }); + + t.deepEqual(argv, { + honk: true, + tacos: 'good', + p: 55, + _: ['moo', 'cow'] + }); + + t.deepEqual(typeof argv.honk, 'boolean'); + t.end(); +}); diff --git a/node_modules/http-server/node_modules/ecstatic/node_modules/minimist/test/bool.js b/node_modules/http-server/node_modules/ecstatic/node_modules/minimist/test/bool.js new file mode 100644 index 0000000..14b0717 --- /dev/null +++ b/node_modules/http-server/node_modules/ecstatic/node_modules/minimist/test/bool.js @@ -0,0 +1,166 @@ +var parse = require('../'); +var test = require('tape'); + +test('flag boolean default false', function (t) { + var argv = parse(['moo'], { + boolean: ['t', 'verbose'], + default: { verbose: false, t: false } + }); + + t.deepEqual(argv, { + verbose: false, + t: false, + _: ['moo'] + }); + + t.deepEqual(typeof argv.verbose, 'boolean'); + t.deepEqual(typeof argv.t, 'boolean'); + t.end(); + +}); + +test('boolean groups', function (t) { + var argv = parse([ '-x', '-z', 'one', 'two', 'three' ], { + boolean: ['x','y','z'] + }); + + t.deepEqual(argv, { + x : true, + y : false, + z : true, + _ : [ 'one', 'two', 'three' ] + }); + + t.deepEqual(typeof argv.x, 'boolean'); + t.deepEqual(typeof argv.y, 'boolean'); + t.deepEqual(typeof argv.z, 'boolean'); + t.end(); +}); +test('boolean and alias with chainable api', function (t) { + var aliased = [ '-h', 'derp' ]; + var regular = [ '--herp', 'derp' ]; + var opts = { + herp: { alias: 'h', boolean: true } + }; + var aliasedArgv = parse(aliased, { + boolean: 'herp', + alias: { h: 'herp' } + }); + var propertyArgv = parse(regular, { + boolean: 'herp', + alias: { h: 'herp' } + }); + var expected = { + herp: true, + h: true, + '_': [ 'derp' ] + }; + + t.same(aliasedArgv, expected); + t.same(propertyArgv, expected); + t.end(); +}); + +test('boolean and alias with options hash', function (t) { + var aliased = [ '-h', 'derp' ]; + var regular = [ '--herp', 'derp' ]; + var opts = { + alias: { 'h': 'herp' }, + boolean: 'herp' + }; + var aliasedArgv = parse(aliased, opts); + var propertyArgv = parse(regular, opts); + var expected = { + herp: true, + h: true, + '_': [ 'derp' ] + }; + t.same(aliasedArgv, expected); + t.same(propertyArgv, expected); + t.end(); +}); + +test('boolean and alias array with options hash', function (t) { + var aliased = [ '-h', 'derp' ]; + var regular = [ '--herp', 'derp' ]; + var alt = [ '--harp', 'derp' ]; + var opts = { + alias: { 'h': ['herp', 'harp'] }, + boolean: 'h' + }; + var aliasedArgv = parse(aliased, opts); + var propertyArgv = parse(regular, opts); + var altPropertyArgv = parse(alt, opts); + var expected = { + harp: true, + herp: true, + h: true, + '_': [ 'derp' ] + }; + t.same(aliasedArgv, expected); + t.same(propertyArgv, expected); + t.same(altPropertyArgv, expected); + t.end(); +}); + +test('boolean and alias using explicit true', function (t) { + var aliased = [ '-h', 'true' ]; + var regular = [ '--herp', 'true' ]; + var opts = { + alias: { h: 'herp' }, + boolean: 'h' + }; + var aliasedArgv = parse(aliased, opts); + var propertyArgv = parse(regular, opts); + var expected = { + herp: true, + h: true, + '_': [ ] + }; + + t.same(aliasedArgv, expected); + t.same(propertyArgv, expected); + t.end(); +}); + +// regression, see https://github.com/substack/node-optimist/issues/71 +test('boolean and --x=true', function(t) { + var parsed = parse(['--boool', '--other=true'], { + boolean: 'boool' + }); + + t.same(parsed.boool, true); + t.same(parsed.other, 'true'); + + parsed = parse(['--boool', '--other=false'], { + boolean: 'boool' + }); + + t.same(parsed.boool, true); + t.same(parsed.other, 'false'); + t.end(); +}); + +test('boolean --boool=true', function (t) { + var parsed = parse(['--boool=true'], { + default: { + boool: false + }, + boolean: ['boool'] + }); + + t.same(parsed.boool, true); + t.end(); +}); + +test('boolean --boool=false', function (t) { + var parsed = parse(['--boool=false'], { + default: { + boool: true + }, + boolean: ['boool'] + }); + + t.same(parsed.boool, false); + t.end(); +}); diff --git a/node_modules/http-server/node_modules/ecstatic/node_modules/minimist/test/dash.js b/node_modules/http-server/node_modules/ecstatic/node_modules/minimist/test/dash.js new file mode 100644 index 0000000..5a4fa5b --- /dev/null +++ b/node_modules/http-server/node_modules/ecstatic/node_modules/minimist/test/dash.js @@ -0,0 +1,31 @@ +var parse = require('../'); +var test = require('tape'); + +test('-', function (t) { + t.plan(5); + t.deepEqual(parse([ '-n', '-' ]), { n: '-', _: [] }); + t.deepEqual(parse([ '-' ]), { _: [ '-' ] }); + t.deepEqual(parse([ '-f-' ]), { f: '-', _: [] }); + t.deepEqual( + parse([ '-b', '-' ], { boolean: 'b' }), + { b: true, _: [ '-' ] } + ); + t.deepEqual( + parse([ '-s', '-' ], { string: 's' }), + { s: '-', _: [] } + ); +}); + +test('-a -- b', function (t) { + t.plan(3); + t.deepEqual(parse([ '-a', '--', 'b' ]), { a: true, _: [ 'b' ] }); + t.deepEqual(parse([ '--a', '--', 'b' ]), { a: true, _: [ 'b' ] }); + t.deepEqual(parse([ '--a', '--', 'b' ]), { a: true, _: [ 'b' ] }); +}); + +test('move arguments after the -- into their own `--` array', function(t) { + t.plan(1); + t.deepEqual( + parse([ '--name', 'John', 'before', '--', 'after' ], { '--': true }), + { name: 'John', _: [ 'before' ], '--': [ 'after' ] }); +}); diff --git a/node_modules/http-server/node_modules/ecstatic/node_modules/minimist/test/default_bool.js b/node_modules/http-server/node_modules/ecstatic/node_modules/minimist/test/default_bool.js new file mode 100644 index 0000000..780a311 --- /dev/null +++ b/node_modules/http-server/node_modules/ecstatic/node_modules/minimist/test/default_bool.js @@ -0,0 +1,35 @@ +var test = require('tape'); +var parse = require('../'); + +test('boolean default true', function (t) { + var argv = parse([], { + boolean: 'sometrue', + default: { sometrue: true } + }); + t.equal(argv.sometrue, true); + t.end(); +}); + +test('boolean default false', function (t) { + var argv = parse([], { + boolean: 'somefalse', + default: { somefalse: false } + }); + t.equal(argv.somefalse, false); + t.end(); +}); + +test('boolean default to null', function (t) { + var argv = parse([], { + boolean: 'maybe', + default: { maybe: null } + }); + t.equal(argv.maybe, null); + var argv = parse(['--maybe'], { + boolean: 'maybe', + default: { maybe: null } + }); + t.equal(argv.maybe, true); + t.end(); + +}) diff --git a/node_modules/http-server/node_modules/ecstatic/node_modules/minimist/test/dotted.js b/node_modules/http-server/node_modules/ecstatic/node_modules/minimist/test/dotted.js new file mode 100644 index 0000000..d8b3e85 --- /dev/null +++ b/node_modules/http-server/node_modules/ecstatic/node_modules/minimist/test/dotted.js @@ -0,0 +1,22 @@ +var parse = require('../'); +var test = require('tape'); + +test('dotted alias', function (t) { + var argv = parse(['--a.b', '22'], {default: {'a.b': 11}, alias: {'a.b': 'aa.bb'}}); + t.equal(argv.a.b, 22); + t.equal(argv.aa.bb, 22); + t.end(); +}); + +test('dotted default', function (t) { + var argv = parse('', {default: {'a.b': 11}, alias: {'a.b': 'aa.bb'}}); + t.equal(argv.a.b, 11); + t.equal(argv.aa.bb, 11); + t.end(); +}); + +test('dotted default with no alias', function (t) { + var argv = parse('', {default: {'a.b': 11}}); + t.equal(argv.a.b, 11); + t.end(); +}); diff --git a/node_modules/http-server/node_modules/ecstatic/node_modules/minimist/test/kv_short.js b/node_modules/http-server/node_modules/ecstatic/node_modules/minimist/test/kv_short.js new file mode 100644 index 0000000..f813b30 --- /dev/null +++ b/node_modules/http-server/node_modules/ecstatic/node_modules/minimist/test/kv_short.js @@ -0,0 +1,16 @@ +var parse = require('../'); +var test = require('tape'); + +test('short -k=v' , function (t) { + t.plan(1); + + var argv = parse([ '-b=123' ]); + t.deepEqual(argv, { b: 123, _: [] }); +}); + +test('multi short -k=v' , function (t) { + t.plan(1); + + var argv = parse([ '-a=whatever', '-b=robots' ]); + t.deepEqual(argv, { a: 'whatever', b: 'robots', _: [] }); +}); diff --git a/node_modules/http-server/node_modules/ecstatic/node_modules/minimist/test/long.js b/node_modules/http-server/node_modules/ecstatic/node_modules/minimist/test/long.js new file mode 100644 index 0000000..5d3a1e0 --- /dev/null +++ b/node_modules/http-server/node_modules/ecstatic/node_modules/minimist/test/long.js @@ -0,0 +1,31 @@ +var test = require('tape'); +var parse = require('../'); + +test('long opts', function (t) { + t.deepEqual( + parse([ '--bool' ]), + { bool : true, _ : [] }, + 'long boolean' + ); + t.deepEqual( + parse([ '--pow', 'xixxle' ]), + { pow : 'xixxle', _ : [] }, + 'long capture sp' + ); + t.deepEqual( + parse([ '--pow=xixxle' ]), + { pow : 'xixxle', _ : [] }, + 'long capture eq' + ); + t.deepEqual( + parse([ '--host', 'localhost', '--port', '555' ]), + { host : 'localhost', port : 555, _ : [] }, + 'long captures sp' + ); + t.deepEqual( + parse([ '--host=localhost', '--port=555' ]), + { host : 'localhost', port : 555, _ : [] }, + 'long captures eq' + ); + t.end(); +}); diff --git a/node_modules/http-server/node_modules/ecstatic/node_modules/minimist/test/num.js b/node_modules/http-server/node_modules/ecstatic/node_modules/minimist/test/num.js new file mode 100644 index 0000000..2cc77f4 --- /dev/null +++ b/node_modules/http-server/node_modules/ecstatic/node_modules/minimist/test/num.js @@ -0,0 +1,36 @@ +var parse = require('../'); +var test = require('tape'); + +test('nums', function (t) { + var argv = parse([ + '-x', '1234', + '-y', '5.67', + '-z', '1e7', + '-w', '10f', + '--hex', '0xdeadbeef', + '789' + ]); + t.deepEqual(argv, { + x : 1234, + y : 5.67, + z : 1e7, + w : '10f', + hex : 0xdeadbeef, + _ : [ 789 ] + }); + t.deepEqual(typeof argv.x, 'number'); + t.deepEqual(typeof argv.y, 'number'); + t.deepEqual(typeof argv.z, 'number'); + t.deepEqual(typeof argv.w, 'string'); + t.deepEqual(typeof argv.hex, 'number'); + t.deepEqual(typeof argv._[0], 'number'); + t.end(); +}); + +test('already a number', function (t) { + var argv = parse([ '-x', 1234, 789 ]); + t.deepEqual(argv, { x : 1234, _ : [ 789 ] }); + t.deepEqual(typeof argv.x, 'number'); + t.deepEqual(typeof argv._[0], 'number'); + t.end(); +}); diff --git a/node_modules/http-server/node_modules/ecstatic/node_modules/minimist/test/parse.js b/node_modules/http-server/node_modules/ecstatic/node_modules/minimist/test/parse.js new file mode 100644 index 0000000..7b4a2a1 --- /dev/null +++ b/node_modules/http-server/node_modules/ecstatic/node_modules/minimist/test/parse.js @@ -0,0 +1,197 @@ +var parse = require('../'); +var test = require('tape'); + +test('parse args', function (t) { + t.deepEqual( + parse([ '--no-moo' ]), + { moo : false, _ : [] }, + 'no' + ); + t.deepEqual( + parse([ '-v', 'a', '-v', 'b', '-v', 'c' ]), + { v : ['a','b','c'], _ : [] }, + 'multi' + ); + t.end(); +}); + +test('comprehensive', function (t) { + t.deepEqual( + parse([ + '--name=meowmers', 'bare', '-cats', 'woo', + '-h', 'awesome', '--multi=quux', + '--key', 'value', + '-b', '--bool', '--no-meep', '--multi=baz', + '--', '--not-a-flag', 'eek' + ]), + { + c : true, + a : true, + t : true, + s : 'woo', + h : 'awesome', + b : true, + bool : true, + key : 'value', + multi : [ 'quux', 'baz' ], + meep : false, + name : 'meowmers', + _ : [ 'bare', '--not-a-flag', 'eek' ] + } + ); + t.end(); +}); + +test('flag boolean', function (t) { + var argv = parse([ '-t', 'moo' ], { boolean: 't' }); + t.deepEqual(argv, { t : true, _ : [ 'moo' ] }); + t.deepEqual(typeof argv.t, 'boolean'); + t.end(); +}); + +test('flag boolean value', function (t) { + var argv = parse(['--verbose', 'false', 'moo', '-t', 'true'], { + boolean: [ 't', 'verbose' ], + default: { verbose: true } + }); + + t.deepEqual(argv, { + verbose: false, + t: true, + _: ['moo'] + }); + + t.deepEqual(typeof argv.verbose, 'boolean'); + t.deepEqual(typeof argv.t, 'boolean'); + t.end(); +}); + +test('newlines in params' , function (t) { + var args = parse([ '-s', "X\nX" ]) + t.deepEqual(args, { _ : [], s : "X\nX" }); + + // reproduce in bash: + // VALUE="new + // line" + // node program.js --s="$VALUE" + args = parse([ "--s=X\nX" ]) + t.deepEqual(args, { _ : [], s : "X\nX" }); + t.end(); +}); + +test('strings' , function (t) { + var s = parse([ '-s', '0001234' ], { string: 's' }).s; + t.equal(s, '0001234'); + t.equal(typeof s, 'string'); + + var x = parse([ '-x', '56' ], { string: 'x' }).x; + t.equal(x, '56'); + t.equal(typeof x, 'string'); + t.end(); +}); + +test('stringArgs', function (t) { + var s = parse([ ' ', ' ' ], { string: '_' })._; + t.same(s.length, 2); + t.same(typeof s[0], 'string'); + t.same(s[0], ' '); + t.same(typeof s[1], 'string'); + t.same(s[1], ' '); + t.end(); +}); + +test('empty strings', function(t) { + var s = parse([ '-s' ], { string: 's' }).s; + t.equal(s, ''); + t.equal(typeof s, 'string'); + + var str = parse([ '--str' ], { string: 'str' }).str; + t.equal(str, ''); + t.equal(typeof str, 'string'); + + var letters = parse([ '-art' ], { + string: [ 'a', 't' ] + }); + + t.equal(letters.a, ''); + t.equal(letters.r, true); + t.equal(letters.t, ''); + + t.end(); +}); + + +test('string and alias', function(t) { + var x = parse([ '--str', '000123' ], { + string: 's', + alias: { s: 'str' } + }); + + t.equal(x.str, '000123'); + t.equal(typeof x.str, 'string'); + t.equal(x.s, '000123'); + t.equal(typeof x.s, 'string'); + + var y = parse([ '-s', '000123' ], { + string: 'str', + alias: { str: 's' } + }); + + t.equal(y.str, '000123'); + t.equal(typeof y.str, 'string'); + t.equal(y.s, '000123'); + t.equal(typeof y.s, 'string'); + t.end(); +}); + +test('slashBreak', function (t) { + t.same( + parse([ '-I/foo/bar/baz' ]), + { I : '/foo/bar/baz', _ : [] } + ); + t.same( + parse([ '-xyz/foo/bar/baz' ]), + { x : true, y : true, z : '/foo/bar/baz', _ : [] } + ); + t.end(); +}); + +test('alias', function (t) { + var argv = parse([ '-f', '11', '--zoom', '55' ], { + alias: { z: 'zoom' } + }); + t.equal(argv.zoom, 55); + t.equal(argv.z, argv.zoom); + t.equal(argv.f, 11); + t.end(); +}); + +test('multiAlias', function (t) { + var argv = parse([ '-f', '11', '--zoom', '55' ], { + alias: { z: [ 'zm', 'zoom' ] } + }); + t.equal(argv.zoom, 55); + t.equal(argv.z, argv.zoom); + t.equal(argv.z, argv.zm); + t.equal(argv.f, 11); + t.end(); +}); + +test('nested dotted objects', function (t) { + var argv = parse([ + '--foo.bar', '3', '--foo.baz', '4', + '--foo.quux.quibble', '5', '--foo.quux.o_O', + '--beep.boop' + ]); + + t.same(argv.foo, { + bar : 3, + baz : 4, + quux : { + quibble : 5, + o_O : true + } + }); + t.same(argv.beep, { boop : true }); + t.end(); +}); diff --git a/node_modules/http-server/node_modules/ecstatic/node_modules/minimist/test/parse_modified.js b/node_modules/http-server/node_modules/ecstatic/node_modules/minimist/test/parse_modified.js new file mode 100644 index 0000000..ab620dc --- /dev/null +++ b/node_modules/http-server/node_modules/ecstatic/node_modules/minimist/test/parse_modified.js @@ -0,0 +1,9 @@ +var parse = require('../'); +var test = require('tape'); + +test('parse with modifier functions' , function (t) { + t.plan(1); + + var argv = parse([ '-b', '123' ], { boolean: 'b' }); + t.deepEqual(argv, { b: true, _: [123] }); +}); diff --git a/node_modules/http-server/node_modules/ecstatic/node_modules/minimist/test/short.js b/node_modules/http-server/node_modules/ecstatic/node_modules/minimist/test/short.js new file mode 100644 index 0000000..d513a1c --- /dev/null +++ b/node_modules/http-server/node_modules/ecstatic/node_modules/minimist/test/short.js @@ -0,0 +1,67 @@ +var parse = require('../'); +var test = require('tape'); + +test('numeric short args', function (t) { + t.plan(2); + t.deepEqual(parse([ '-n123' ]), { n: 123, _: [] }); + t.deepEqual( + parse([ '-123', '456' ]), + { 1: true, 2: true, 3: 456, _: [] } + ); +}); + +test('short', function (t) { + t.deepEqual( + parse([ '-b' ]), + { b : true, _ : [] }, + 'short boolean' + ); + t.deepEqual( + parse([ 'foo', 'bar', 'baz' ]), + { _ : [ 'foo', 'bar', 'baz' ] }, + 'bare' + ); + t.deepEqual( + parse([ '-cats' ]), + { c : true, a : true, t : true, s : true, _ : [] }, + 'group' + ); + t.deepEqual( + parse([ '-cats', 'meow' ]), + { c : true, a : true, t : true, s : 'meow', _ : [] }, + 'short group next' + ); + t.deepEqual( + parse([ '-h', 'localhost' ]), + { h : 'localhost', _ : [] }, + 'short capture' + ); + t.deepEqual( + parse([ '-h', 'localhost', '-p', '555' ]), + { h : 'localhost', p : 555, _ : [] }, + 'short captures' + ); + t.end(); +}); + +test('mixed short bool and capture', function (t) { + t.same( + parse([ '-h', 'localhost', '-fp', '555', 'script.js' ]), + { + f : true, p : 555, h : 'localhost', + _ : [ 'script.js' ] + } + ); + t.end(); +}); + +test('short and long', function (t) { + t.deepEqual( + parse([ '-h', 'localhost', '-fp', '555', 'script.js' ]), + { + f : true, p : 555, h : 'localhost', + _ : [ 'script.js' ] + } + ); + t.end(); +}); diff --git a/node_modules/http-server/node_modules/ecstatic/node_modules/minimist/test/stop_early.js b/node_modules/http-server/node_modules/ecstatic/node_modules/minimist/test/stop_early.js new file mode 100644 index 0000000..bdf9fbc --- /dev/null +++ b/node_modules/http-server/node_modules/ecstatic/node_modules/minimist/test/stop_early.js @@ -0,0 +1,15 @@ +var parse = require('../'); +var test = require('tape'); + +test('stops parsing on the first non-option when stopEarly is set', function (t) { + var argv = parse(['--aaa', 'bbb', 'ccc', '--ddd'], { + stopEarly: true + }); + + t.deepEqual(argv, { + aaa: 'bbb', + _: ['ccc', '--ddd'] + }); + + t.end(); +}); diff --git a/node_modules/http-server/node_modules/ecstatic/node_modules/minimist/test/unknown.js b/node_modules/http-server/node_modules/ecstatic/node_modules/minimist/test/unknown.js new file mode 100644 index 0000000..462a36b --- /dev/null +++ b/node_modules/http-server/node_modules/ecstatic/node_modules/minimist/test/unknown.js @@ -0,0 +1,102 @@ +var parse = require('../'); +var test = require('tape'); + +test('boolean and alias is not unknown', function (t) { + var unknown = []; + function unknownFn(arg) { + unknown.push(arg); + return false; + } + var aliased = [ '-h', 'true', '--derp', 'true' ]; + var regular = [ '--herp', 'true', '-d', 'true' ]; + var opts = { + alias: { h: 'herp' }, + boolean: 'h', + unknown: unknownFn + }; + var aliasedArgv = parse(aliased, opts); + var propertyArgv = parse(regular, opts); + + t.same(unknown, ['--derp', '-d']); + t.end(); +}); + +test('flag boolean true any double hyphen argument is not unknown', function (t) { + var unknown = []; + function unknownFn(arg) { + unknown.push(arg); + return false; + } + var argv = parse(['--honk', '--tacos=good', 'cow', '-p', '55'], { + boolean: true, + unknown: unknownFn + }); + t.same(unknown, ['--tacos=good', 'cow', '-p']); + t.same(argv, { + honk: true, + _: [] + }); + t.end(); +}); + +test('string and alias is not unknown', function (t) { + var unknown = []; + function unknownFn(arg) { + unknown.push(arg); + return false; + } + var aliased = [ '-h', 'hello', '--derp', 'goodbye' ]; + var regular = [ '--herp', 'hello', '-d', 'moon' ]; + var opts = { + alias: { h: 'herp' }, + string: 'h', + unknown: unknownFn + }; + var aliasedArgv = parse(aliased, opts); + var propertyArgv = parse(regular, opts); + + t.same(unknown, ['--derp', '-d']); + t.end(); +}); + +test('default and alias is not unknown', function (t) { + var unknown = []; + function unknownFn(arg) { + unknown.push(arg); + return false; + } + var aliased = [ '-h', 'hello' ]; + var regular = [ '--herp', 'hello' ]; + var opts = { + default: { 'h': 'bar' }, + alias: { 'h': 'herp' }, + unknown: unknownFn + }; + var aliasedArgv = parse(aliased, opts); + var propertyArgv = parse(regular, opts); + + t.same(unknown, []); + t.end(); + unknownFn(); // exercise fn for 100% coverage +}); + +test('value following -- is not unknown', function (t) { + var unknown = []; + function unknownFn(arg) { + unknown.push(arg); + return false; + } + var aliased = [ '--bad', '--', 'good', 'arg' ]; + var opts = { + '--': true, + unknown: unknownFn + }; + var argv = parse(aliased, opts); + + t.same(unknown, ['--bad']); + t.same(argv, { + '--': ['good', 'arg'], + '_': [] + }) + t.end(); +}); diff --git a/node_modules/http-server/node_modules/ecstatic/node_modules/minimist/test/whitespace.js b/node_modules/http-server/node_modules/ecstatic/node_modules/minimist/test/whitespace.js new file mode 100644 index 0000000..8a52a58 --- /dev/null +++ b/node_modules/http-server/node_modules/ecstatic/node_modules/minimist/test/whitespace.js @@ -0,0 +1,8 @@ +var parse = require('../'); +var test = require('tape'); + +test('whitespace should be whitespace' , function (t) { + t.plan(1); + var x = parse([ '-x', '\t' ]).x; + t.equal(x, '\t'); +}); diff --git a/node_modules/http-server/node_modules/ecstatic/node_modules/url-join/.npmignore b/node_modules/http-server/node_modules/ecstatic/node_modules/url-join/.npmignore new file mode 100644 index 0000000..8ee2d2b --- /dev/null +++ b/node_modules/http-server/node_modules/ecstatic/node_modules/url-join/.npmignore @@ -0,0 +1,2 @@ +node_modules/* +*.log \ No newline at end of file diff --git a/node_modules/http-server/node_modules/ecstatic/node_modules/url-join/README.md b/node_modules/http-server/node_modules/ecstatic/node_modules/url-join/README.md new file mode 100644 index 0000000..7be48c3 --- /dev/null +++ b/node_modules/http-server/node_modules/ecstatic/node_modules/url-join/README.md @@ -0,0 +1,27 @@ +Join all arguments together and normalize the resulting url. + +## Install + +~~~ +npm install url-join +~~~ + +## Usage + +~~~javascript +var urljoin = require('url-join'); + +var fullUrl = urljoin('http://www.google.com', 'a', '/b/cd', '?foo=123'); + +console.log(fullUrl); + +\\will print: + +'http://www.google.com/a/b/cd?foo=123' +~~~ + +This works similar to [path.join](http://nodejs.org/api/path.html#path_path_join_path1_path2) but you shouldn't use ```path.join``` for urls since it will work different depending of the operative systems but also doesn't work for some cases. + +## License + +MIT \ No newline at end of file diff --git a/node_modules/http-server/node_modules/ecstatic/node_modules/url-join/lib/url-join.js b/node_modules/http-server/node_modules/ecstatic/node_modules/url-join/lib/url-join.js new file mode 100644 index 0000000..6b0f4fc --- /dev/null +++ b/node_modules/http-server/node_modules/ecstatic/node_modules/url-join/lib/url-join.js @@ -0,0 +1,12 @@ +function normalize (str) { + return str + .replace(/[\/]+/g, '/') + .replace(/\/\?/g, '?') + .replace(/\/\#/g, '#') + .replace(/\:\//g, '://'); +} + +module.exports = function () { + var joined = [].slice.call(arguments, 0).join('/'); + return normalize(joined); +}; \ No newline at end of file diff --git a/node_modules/http-server/node_modules/ecstatic/node_modules/url-join/package.json b/node_modules/http-server/node_modules/ecstatic/node_modules/url-join/package.json new file mode 100644 index 0000000..1fea0e0 --- /dev/null +++ b/node_modules/http-server/node_modules/ecstatic/node_modules/url-join/package.json @@ -0,0 +1,49 @@ +{ + "name": "url-join", + "version": "0.0.1", + "description": "Join urls and normalize as in path.join.", + "main": "lib/url-join.js", + "scripts": { + "test": "mocha --require should" + }, + "repository": { + "type": "git", + "url": "git://github.com/jfromaniello/url-join.git" + }, + "keywords": [ + "url", + "join" + ], + "author": { + "name": "José F. Romaniello", + "email": "jfromaniello@gmail.com", + "url": "http://joseoncode.com" + }, + "license": "MIT", + "devDependencies": { + "should": "~1.2.1", + "mocha": "~1.8.1" + }, + "readme": "Join all arguments together and normalize the resulting url.\n\n## Install\n\n~~~\nnpm install url-join\n~~~\n\n## Usage\n\n~~~javascript\nvar urljoin = require('url-join');\n\nvar fullUrl = urljoin('http://www.google.com', 'a', '/b/cd', '?foo=123');\n\nconsole.log(fullUrl);\n\n\\\\will print:\n\n'http://www.google.com/a/b/cd?foo=123'\n~~~\n\nThis works similar to [path.join](http://nodejs.org/api/path.html#path_path_join_path1_path2) but you shouldn't use ```path.join``` for urls since it will work different depending of the operative systems but also doesn't work for some cases.\n\n## License\n\nMIT", + "readmeFilename": "README.md", + "_id": "url-join@0.0.1", + "dist": { + "shasum": "1db48ad422d3402469a87f7d97bdebfe4fb1e3c8", + "tarball": "http://registry.npmjs.org/url-join/-/url-join-0.0.1.tgz" + }, + "_npmVersion": "1.1.69", + "_npmUser": { + "name": "jfromaniello", + "email": "jfromaniello@gmail.com" + }, + "maintainers": [ + { + "name": "jfromaniello", + "email": "jfromaniello@gmail.com" + } + ], + "directories": {}, + "_shasum": "1db48ad422d3402469a87f7d97bdebfe4fb1e3c8", + "_resolved": "https://registry.npmjs.org/url-join/-/url-join-0.0.1.tgz", + "_from": "url-join@0.0.1" +} diff --git a/node_modules/http-server/node_modules/ecstatic/node_modules/url-join/test/tests.js b/node_modules/http-server/node_modules/ecstatic/node_modules/url-join/test/tests.js new file mode 100644 index 0000000..01bac51 --- /dev/null +++ b/node_modules/http-server/node_modules/ecstatic/node_modules/url-join/test/tests.js @@ -0,0 +1,23 @@ +var urljoin = require('../lib/url-join'); + +describe('url join', function () { + it('should work for simple case', function () { + urljoin('http://www.google.com/', 'foo/bar', '?test=123') + .should.eql('http://www.google.com/foo/bar?test=123'); + }); + + it('should be able to join protocol', function () { + urljoin('http:', 'www.google.com/', 'foo/bar', '?test=123') + .should.eql('http://www.google.com/foo/bar?test=123'); + }); + + it('should remove extra slashes', function () { + urljoin('http:', 'www.google.com///', 'foo/bar', '?test=123') + .should.eql('http://www.google.com/foo/bar?test=123'); + }); + + it('should support anchors in urls', function () { + urljoin('http:', 'www.google.com///', 'foo/bar', '?test=123', '#faaaaa') + .should.eql('http://www.google.com/foo/bar?test=123#faaaaa'); + }); +}); \ No newline at end of file diff --git a/node_modules/http-server/node_modules/ecstatic/package.json b/node_modules/http-server/node_modules/ecstatic/package.json new file mode 100644 index 0000000..277b990 --- /dev/null +++ b/node_modules/http-server/node_modules/ecstatic/package.json @@ -0,0 +1,71 @@ +{ + "author": { + "name": "Joshua Holbrook", + "email": "josh@nodejitsu.com", + "url": "http://jesusabdullah.net" + }, + "name": "ecstatic", + "description": "A simple static file server middleware that works with both Express and Flatiron", + "version": "0.7.6", + "homepage": "https://github.com/jfhbrook/node-ecstatic", + "repository": { + "type": "git", + "url": "git@github.com:jfhbrook/node-ecstatic.git" + }, + "main": "./lib/ecstatic.js", + "scripts": { + "test": "tap test/*.js" + }, + "bin": { + "ecstatic": "./lib/ecstatic.js" + }, + "keywords": [ + "static", + "web", + "server", + "files", + "mime", + "middleware" + ], + "dependencies": { + "he": "^0.5.0", + "mime": "^1.2.11", + "minimist": "^1.1.0", + "url-join": "0.0.1" + }, + "devDependencies": { + "tap": "^0.4.13", + "request": "^2.49.0", + "express": "^3.0.6", + "union": "^0.3.8", + "mkdirp": "^0.5.0" + }, + "gitHead": "43148d1f368ad117b4d65d31bd20f8aa53fecb9c", + "bugs": { + "url": "https://github.com/jfhbrook/node-ecstatic/issues" + }, + "_id": "ecstatic@0.7.6", + "_shasum": "cba2aabea46b8cd97f0160859713b70d28e6a022", + "_from": "ecstatic@>=0.7.0 <0.8.0", + "_npmVersion": "1.4.28", + "_npmUser": { + "name": "jfhbrook", + "email": "josh.holbrook@gmail.com" + }, + "maintainers": [ + { + "name": "jesusabdullah", + "email": "josh.holbrook@gmail.com" + }, + { + "name": "jfhbrook", + "email": "josh.holbrook@gmail.com" + } + ], + "dist": { + "shasum": "cba2aabea46b8cd97f0160859713b70d28e6a022", + "tarball": "http://registry.npmjs.org/ecstatic/-/ecstatic-0.7.6.tgz" + }, + "directories": {}, + "_resolved": "https://registry.npmjs.org/ecstatic/-/ecstatic-0.7.6.tgz" +} diff --git a/node_modules/http-server/node_modules/http-proxy/.npmignore b/node_modules/http-server/node_modules/http-proxy/.npmignore new file mode 100644 index 0000000..081a48c --- /dev/null +++ b/node_modules/http-server/node_modules/http-proxy/.npmignore @@ -0,0 +1,7 @@ +test +examples +doc +benchmark +.travis.yml +CHANGELOG.md +UPGRADING.md \ No newline at end of file diff --git a/node_modules/http-server/node_modules/http-proxy/LICENSE b/node_modules/http-server/node_modules/http-proxy/LICENSE new file mode 100644 index 0000000..2bab4b9 --- /dev/null +++ b/node_modules/http-server/node_modules/http-proxy/LICENSE @@ -0,0 +1,23 @@ + + node-http-proxy + + Copyright (c) Nodejitsu 2013 + + Permission is hereby granted, free of charge, to any person obtaining + a copy of this software and associated documentation files (the + "Software"), to deal in the Software without restriction, including + without limitation the rights to use, copy, modify, merge, publish, + distribute, sublicense, and/or sell copies of the Software, and to + permit persons to whom the Software is furnished to do so, subject to + the following conditions: + + The above copyright notice and this permission notice shall be + included in all copies or substantial portions of the Software. + + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND + NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE + LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION + OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION + WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. \ No newline at end of file diff --git a/node_modules/http-server/node_modules/http-proxy/README.md b/node_modules/http-server/node_modules/http-proxy/README.md new file mode 100644 index 0000000..162bde9 --- /dev/null +++ b/node_modules/http-server/node_modules/http-proxy/README.md @@ -0,0 +1,417 @@ +

+ +

+ +node-http-proxy +======= + +`node-http-proxy` is an HTTP programmable proxying library that supports +websockets. It is suitable for implementing components such as +proxies and load balancers. + +### Installation + +`npm install http-proxy --save` + +### Build Status + +

+ +    + + +

+ +### Looking to Upgrade from 0.8.x ? Click [here](UPGRADING.md) + +### Core Concept + +A new proxy is created by calling `createProxyServer` and passing +an `options` object as argument ([valid properties are available here](lib/http-proxy.js#L33-L50)) + +```javascript +var httpProxy = require('http-proxy'); + +var proxy = httpProxy.createProxyServer(options); +``` + +An object will be returned with four values: + +* web `req, res, [options]` (used for proxying regular HTTP(S) requests) +* ws `req, socket, head, [options]` (used for proxying WS(S) requests) +* listen `port` (a function that wraps the object in a webserver, for your convenience) +* close `[callback]` (a function that closes the inner webserver and stops listening on given port) + +It is then possible to proxy requests by calling these functions + +```javascript +http.createServer(function(req, res) { + proxy.web(req, res, { target: 'http://mytarget.com:8080' }); +}); +``` + +Errors can be listened on either using the Event Emitter API + +```javascript +proxy.on('error', function(e) { + ... +}); +``` + +or using the callback API + +```javascript +proxy.web(req, res, { target: 'http://mytarget.com:8080' }, function(e) { ... }); +``` + +When a request is proxied it follows two different pipelines ([available here](lib/http-proxy/passes)) +which apply transformations to both the `req` and `res` object. +The first pipeline (ingoing) is responsible for the creation and manipulation of the stream that connects your client to the target. +The second pipeline (outgoing) is responsible for the creation and manipulation of the stream that, from your target, returns data +to the client. + + +#### Setup a basic stand-alone proxy server + +```js +var http = require('http'), + httpProxy = require('http-proxy'); +// +// Create your proxy server and set the target in the options. +// +httpProxy.createProxyServer({target:'http://localhost:9000'}).listen(8000); + +// +// Create your target server +// +http.createServer(function (req, res) { + res.writeHead(200, { 'Content-Type': 'text/plain' }); + res.write('request successfully proxied!' + '\n' + JSON.stringify(req.headers, true, 2)); + res.end(); +}).listen(9000); +``` + +#### Setup a stand-alone proxy server with custom server logic +This example show how you can proxy a request using your own HTTP server +and also you can put your own logic to handle the request. + +```js +var http = require('http'), + httpProxy = require('http-proxy'); + +// +// Create a proxy server with custom application logic +// +var proxy = httpProxy.createProxyServer({}); + +// +// Create your custom server and just call `proxy.web()` to proxy +// a web request to the target passed in the options +// also you can use `proxy.ws()` to proxy a websockets request +// +var server = http.createServer(function(req, res) { + // You can define here your custom logic to handle the request + // and then proxy the request. + proxy.web(req, res, { target: 'http://127.0.0.1:5060' }); +}); + +console.log("listening on port 5050") +server.listen(5050); +``` +#### Modify a response from a proxied server +Sometimes when you have received a HTML/XML document from the server of origin you would like to modify it before forwarding it on. + +[Harmon](https://github.com/No9/harmon) allows you to do this in a streaming style so as to keep the pressure on the proxy to a minimum. + + +#### Setup a stand-alone proxy server with proxy request header re-writing +This example shows how you can proxy a request using your own HTTP server that +modifies the outgoing proxy request by adding a special header. + +```js +var http = require('http'), + httpProxy = require('http-proxy'); + +// +// Create a proxy server with custom application logic +// +var proxy = httpProxy.createProxyServer({}); + +// To modify the proxy connection before data is sent, you can listen +// for the 'proxyReq' event. When the event is fired, you will receive +// the following arguments: +// (http.ClientRequest proxyReq, http.IncomingMessage req, +// http.ServerResponse res, Object options). This mechanism is useful when +// you need to modify the proxy request before the proxy connection +// is made to the target. +// +proxy.on('proxyReq', function(proxyReq, req, res, options) { + proxyReq.setHeader('X-Special-Proxy-Header', 'foobar'); +}); + +var server = http.createServer(function(req, res) { + // You can define here your custom logic to handle the request + // and then proxy the request. + proxy.web(req, res, { + target: 'http://127.0.0.1:5060' + }); +}); + +console.log("listening on port 5050") +server.listen(5050); +``` + +#### Setup a stand-alone proxy server with latency + +```js +var http = require('http'), + httpProxy = require('http-proxy'); + +// +// Create a proxy server with latency +// +var proxy = httpProxy.createProxyServer(); + +// +// Create your server that makes an operation that waits a while +// and then proxies the request +// +http.createServer(function (req, res) { + // This simulates an operation that takes 500ms to execute + setTimeout(function () { + proxy.web(req, res, { + target: 'http://localhost:9008' + }); + }, 500); +}).listen(8008); + +// +// Create your target server +// +http.createServer(function (req, res) { + res.writeHead(200, { 'Content-Type': 'text/plain' }); + res.write('request successfully proxied to: ' + req.url + '\n' + JSON.stringify(req.headers, true, 2)); + res.end(); +}).listen(9008); +``` + +#### Listening for proxy events + +* `error`: The error event is emitted if the request to the target fail. +* `proxyRes`: This event is emitted if the request to the target got a response. +* `open`: This event is emitted once the proxy websocket was created and piped into the target websocket. +* `close`: This event is emitted once the proxy websocket was closed. +* (DEPRECATED) `proxySocket`: Deprecated in favor of `open`. + +```js +var httpProxy = require('http-proxy'); +// Error example +// +// Http Proxy Server with bad target +// +var proxy = httpProxy.createServer({ + target:'http://localhost:9005' +}); + +proxy.listen(8005); + +// +// Listen for the `error` event on `proxy`. +proxy.on('error', function (err, req, res) { + res.writeHead(500, { + 'Content-Type': 'text/plain' + }); + + res.end('Something went wrong. And we are reporting a custom error message.'); +}); + +// +// Listen for the `proxyRes` event on `proxy`. +// +proxy.on('proxyRes', function (proxyRes, req, res) { + console.log('RAW Response from the target', JSON.stringify(proxyRes.headers, true, 2)); +}); + +// +// Listen for the `open` event on `proxy`. +// +proxy.on('open', function (proxySocket) { + // listen for messages coming FROM the target here + proxySocket.on('data', hybiParseAndLogMessage); +}); + +// +// Listen for the `close` event on `proxy`. +// +proxy.on('close', function (req, socket, head) { + // view disconnected websocket connections + console.log('Client disconnected'); +}); +``` + +#### Using HTTPS +You can activate the validation of a secure SSL certificate to the target connection (avoid self signed certs), just set `secure: true` in the options. + +##### HTTPS -> HTTP + +```js +// +// Create the HTTPS proxy server in front of a HTTP server +// +httpProxy.createServer({ + target: { + host: 'localhost', + port: 9009 + }, + ssl: { + key: fs.readFileSync('valid-ssl-key.pem', 'utf8'), + cert: fs.readFileSync('valid-ssl-cert.pem', 'utf8') + } +}).listen(8009); +``` + +##### HTTPS -> HTTPS + +```js +// +// Create the proxy server listening on port 443 +// +httpProxy.createServer({ + ssl: { + key: fs.readFileSync('valid-ssl-key.pem', 'utf8'), + cert: fs.readFileSync('valid-ssl-cert.pem', 'utf8') + }, + target: 'https://localhost:9010', + secure: true // Depends on your needs, could be false. +}).listen(443); +``` + +#### Proxying WebSockets +You can activate the websocket support for the proxy using `ws:true` in the options. + +```js +// +// Create a proxy server for websockets +// +httpProxy.createServer({ + target: 'ws://localhost:9014', + ws: true +}).listen(8014); +``` + +Also you can proxy the websocket requests just calling the `ws(req, socket, head)` method. + +```js +// +// Setup our server to proxy standard HTTP requests +// +var proxy = new httpProxy.createProxyServer({ + target: { + host: 'localhost', + port: 9015 + } +}); +var proxyServer = http.createServer(function (req, res) { + proxy.web(req, res); +}); + +// +// Listen to the `upgrade` event and proxy the +// WebSocket requests as well. +// +proxyServer.on('upgrade', function (req, socket, head) { + proxy.ws(req, socket, head); +}); + +proxyServer.listen(8015); +``` + +### Contributing and Issues + +* Search on Google/Github +* If you can't find anything, open an issue +* If you feel comfortable about fixing the issue, fork the repo +* Commit to your local branch (which must be different from `master`) +* Submit your Pull Request (be sure to include tests and update documentation) + +### Options + +`httpProxy.createProxyServer` supports the following options: + +* **target**: url string to be parsed with the url module +* **forward**: url string to be parsed with the url module +* **agent**: object to be passed to http(s).request (see Node's [https agent](http://nodejs.org/api/https.html#https_class_https_agent) and [http agent](http://nodejs.org/api/http.html#http_class_http_agent) objects) +* **ssl**: object to be passed to https.createServer() +* **ws**: true/false, if you want to proxy websockets +* **xfwd**: true/false, adds x-forward headers +* **secure**: true/false, if you want to verify the SSL Certs +* **toProxy**: passes the absolute URL as the `path` (useful for proxying to proxies) +* **prependPath**: true/false, Default: true - specify whether you want to prepend the target's path to the proxy path +* **ignorePath**: true/false, Default: false - specify whether you want to ignore the proxy path of the incoming request +* **localAddress**: Local interface string to bind for outgoing connections +* **changeOrigin**: true/false, Default: false - changes the origin of the host header to the target URL +* **auth**: Basic authentication i.e. 'user:password' to compute an Authorization header. +* **hostRewrite**: rewrites the location hostname on (301/302/307/308) redirects. +* **autoRewrite**: rewrites the location host/port on (301/302/307/308) redirects based on requested host/port. Default: false. +* **protocolRewrite**: rewrites the location protocol on (301/302/307/308) redirects to 'http' or 'https'. Default: null. + +**NOTE:** +`options.ws` and `options.ssl` are optional. +`options.target` and `options.forward` cannot both be missing + +If you are using the `proxyServer.listen` method, the following options are also applicable: + + * **ssl**: object to be passed to https.createServer() + * **ws**: true/false, if you want to proxy websockets + +### Shutdown + +* When testing or running server within another program it may be necessary to close the proxy. +* This will stop the proxy from accepting new connections. + +```js +var proxy = new httpProxy.createProxyServer({ + target: { + host: 'localhost', + port: 1337 + } +}); + +proxy.close(); +``` + +### Test + +``` +$ npm test +``` + +### Logo + +Logo created by [Diego Pasquali](http://dribbble.com/diegopq) + +### License + +>The MIT License (MIT) +> +>Copyright (c) 2010 - 2013 Nodejitsu Inc. +> +>Permission is hereby granted, free of charge, to any person obtaining a copy +>of this software and associated documentation files (the "Software"), to deal +>in the Software without restriction, including without limitation the rights +>to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +>copies of the Software, and to permit persons to whom the Software is +>furnished to do so, subject to the following conditions: +> +>The above copyright notice and this permission notice shall be included in +>all copies or substantial portions of the Software. +> +>THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +>IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +>FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +>AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +>LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +>OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +>THE SOFTWARE. + + diff --git a/node_modules/http-server/node_modules/http-proxy/index.js b/node_modules/http-server/node_modules/http-proxy/index.js new file mode 100644 index 0000000..e6fac85 --- /dev/null +++ b/node_modules/http-server/node_modules/http-proxy/index.js @@ -0,0 +1,13 @@ +/*! + * Caron dimonio, con occhi di bragia + * loro accennando, tutte le raccoglie; + * batte col remo qualunque s’adagia + * + * Charon the demon, with the eyes of glede, + * Beckoning to them, collects them all together, + * Beats with his oar whoever lags behind + * + * Dante - The Divine Comedy (Canto III) + */ + +module.exports = require('./lib/http-proxy'); \ No newline at end of file diff --git a/node_modules/http-server/node_modules/http-proxy/lib/http-proxy.js b/node_modules/http-server/node_modules/http-proxy/lib/http-proxy.js new file mode 100644 index 0000000..365aced --- /dev/null +++ b/node_modules/http-server/node_modules/http-proxy/lib/http-proxy.js @@ -0,0 +1,59 @@ +var http = require('http'), + https = require('https'), + url = require('url'), + httpProxy = require('./http-proxy/'); + +/** + * Export the proxy "Server" as the main export. + */ +module.exports = httpProxy.Server; + +/** + * Creates the proxy server. + * + * Examples: + * + * httpProxy.createProxyServer({ .. }, 8000) + * // => '{ web: [Function], ws: [Function] ... }' + * + * @param {Object} Options Config object passed to the proxy + * + * @return {Object} Proxy Proxy object with handlers for `ws` and `web` requests + * + * @api public + */ + +module.exports.createProxyServer = + module.exports.createServer = + module.exports.createProxy = function createProxyServer(options) { + /* + * `options` is needed and it must have the following layout: + * + * { + * target : + * forward: + * agent : + * ssl : + * ws : + * xfwd : + * secure : + * toProxy: + * prependPath: + * ignorePath: + * localAddress : + * changeOrigin: + * auth : Basic authentication i.e. 'user:password' to compute an Authorization header. + * hostRewrite: rewrites the location hostname on (301/302/307/308) redirects, Default: null. + * autoRewrite: rewrites the location host/port on (301/302/307/308) redirects based on requested host/port. Default: false. + * protocolRewrite: rewrites the location protocol on (301/302/307/308) redirects to 'http' or 'https'. Default: null. + * } + * + * NOTE: `options.ws` and `options.ssl` are optional. + * `options.target and `options.forward` cannot be + * both missing + * } + */ + + return new httpProxy.Server(options); +}; + diff --git a/node_modules/http-server/node_modules/http-proxy/lib/http-proxy/common.js b/node_modules/http-server/node_modules/http-proxy/lib/http-proxy/common.js new file mode 100644 index 0000000..1d040d4 --- /dev/null +++ b/node_modules/http-server/node_modules/http-proxy/lib/http-proxy/common.js @@ -0,0 +1,206 @@ +var common = exports, + url = require('url'), + extend = require('util')._extend, + required = require('requires-port'); + +var upgradeHeader = /(^|,)\s*upgrade\s*($|,)/i, + isSSL = /^https|wss/; + +/** + * Simple Regex for testing if protocol is https + */ +common.isSSL = isSSL; +/** + * Copies the right headers from `options` and `req` to + * `outgoing` which is then used to fire the proxied + * request. + * + * Examples: + * + * common.setupOutgoing(outgoing, options, req) + * // => { host: ..., hostname: ...} + * + * @param {Object} Outgoing Base object to be filled with required properties + * @param {Object} Options Config object passed to the proxy + * @param {ClientRequest} Req Request Object + * @param {String} Forward String to select forward or target + *  + * @return {Object} Outgoing Object with all required properties set + * + * @api private + */ + +common.setupOutgoing = function(outgoing, options, req, forward) { + outgoing.port = options[forward || 'target'].port || + (isSSL.test(options[forward || 'target'].protocol) ? 443 : 80); + + ['host', 'hostname', 'socketPath', 'pfx', 'key', + 'passphrase', 'cert', 'ca', 'ciphers', 'secureProtocol'].forEach( + function(e) { outgoing[e] = options[forward || 'target'][e]; } + ); + + outgoing.method = req.method; + outgoing.headers = extend({}, req.headers); + + if (options.headers){ + extend(outgoing.headers, options.headers); + } + + if (options.auth) { + outgoing.auth = options.auth; + } + + if (isSSL.test(options[forward || 'target'].protocol)) { + outgoing.rejectUnauthorized = (typeof options.secure === "undefined") ? true : options.secure; + } + + + outgoing.agent = options.agent || false; + outgoing.localAddress = options.localAddress; + + // + // Remark: If we are false and not upgrading, set the connection: close. This is the right thing to do + // as node core doesn't handle this COMPLETELY properly yet. + // + if (!outgoing.agent) { + outgoing.headers = outgoing.headers || {}; + if (typeof outgoing.headers.connection !== 'string' + || !upgradeHeader.test(outgoing.headers.connection) + ) { outgoing.headers.connection = 'close'; } + } + + + // the final path is target path + relative path requested by user: + var target = options[forward || 'target']; + var targetPath = target && options.prependPath !== false + ? (target.path || '') + : ''; + + // + // Remark: Can we somehow not use url.parse as a perf optimization? + // + var outgoingPath = !options.toProxy + ? (url.parse(req.url).path || '/') + : req.url; + + // + // Remark: ignorePath will just straight up ignore whatever the request's + // path is. This can be labeled as FOOT-GUN material if you do not know what + // you are doing and are using conflicting options. + // + outgoingPath = !options.ignorePath ? outgoingPath : '/'; + + outgoing.path = common.urlJoin(targetPath, outgoingPath); + + if (options.changeOrigin) { + outgoing.headers.host = + required(outgoing.port, options[forward || 'target'].protocol) && !hasPort(outgoing.host) + ? outgoing.host + ':' + outgoing.port + : outgoing.host; + } + return outgoing; +}; + +/** + * Set the proper configuration for sockets, + * set no delay and set keep alive, also set + * the timeout to 0. + * + * Examples: + * + * common.setupSocket(socket) + * // => Socket + * + * @param {Socket} Socket instance to setup + *  + * @return {Socket} Return the configured socket. + * + * @api private + */ + +common.setupSocket = function(socket) { + socket.setTimeout(0); + socket.setNoDelay(true); + + socket.setKeepAlive(true, 0); + + return socket; +}; + +/** + * Get the port number from the host. Or guess it based on the connection type. + * + * @param {Request} req Incoming HTTP request. + * + * @return {String} The port number. + * + * @api private + */ +common.getPort = function(req) { + var res = req.headers.host ? req.headers.host.match(/:(\d+)/) : ''; + + return res ? + res[1] : + common.hasEncryptedConnection(req) ? '443' : '80'; +}; + +/** + * Check if the request has an encrypted connection. + * + * @param {Request} req Incoming HTTP request. + * + * @return {Boolean} Whether the connection is encrypted or not. + * + * @api private + */ +common.hasEncryptedConnection = function(req) { + return Boolean(req.connection.encrypted || req.connection.pair); +}; + +/** + * OS-agnostic join (doesn't break on URLs like path.join does on Windows)> + * + * @return {String} The generated path. + * + * @api private + */ + +common.urlJoin = function() { + // + // We do not want to mess with the query string. All we want to touch is the path. + // + var args = Array.prototype.slice.call(arguments), + lastIndex = args.length - 1, + last = args[lastIndex], + lastSegs = last.split('?'), + retSegs; + + args[lastIndex] = lastSegs.shift(); + + // + // Join all strings, but remove empty strings so we don't get extra slashes from + // joining e.g. ['', 'am'] + // + retSegs = [ + args.filter(Boolean).join('/').replace(/\/+/g, '/').replace(/:\//g, '://') + ]; + + // Only join the query string if it exists so we don't have trailing a '?' + // on every request + + // Handle case where there could be multiple ? in the URL. + retSegs.push.apply(retSegs, lastSegs); + + return retSegs.join('?') +}; + +/** + * Check the host and see if it potentially has a port in it (keep it simple) + * + * @returns {Boolean} Whether we have one or not + * + * @api private + */ +function hasPort(host) { + return !!~host.indexOf(':'); +}; diff --git a/node_modules/http-server/node_modules/http-proxy/lib/http-proxy/index.js b/node_modules/http-server/node_modules/http-proxy/lib/http-proxy/index.js new file mode 100644 index 0000000..7a5e1d2 --- /dev/null +++ b/node_modules/http-server/node_modules/http-proxy/lib/http-proxy/index.js @@ -0,0 +1,184 @@ +var httpProxy = exports, + extend = require('util')._extend, + parse_url = require('url').parse, + EE3 = require('eventemitter3'), + http = require('http'), + https = require('https'), + web = require('./passes/web-incoming'), + ws = require('./passes/ws-incoming'); + +httpProxy.Server = ProxyServer; + +/** + * Returns a function that creates the loader for + * either `ws` or `web`'s passes. + * + * Examples: + * + * httpProxy.createRightProxy('ws') + * // => [Function] + * + * @param {String} Type Either 'ws' or 'web' + *  + * @return {Function} Loader Function that when called returns an iterator for the right passes + * + * @api private + */ + +function createRightProxy(type) { + + return function(options) { + return function(req, res /*, [head], [opts] */) { + var passes = (type === 'ws') ? this.wsPasses : this.webPasses, + args = [].slice.call(arguments), + cntr = args.length - 1, + head, cbl; + + /* optional args parse begin */ + if(typeof args[cntr] === 'function') { + cbl = args[cntr]; + + cntr--; + } + + if( + !(args[cntr] instanceof Buffer) && + args[cntr] !== res + ) { + //Copy global options + options = extend({}, options); + //Overwrite with request options + extend(options, args[cntr]); + + cntr--; + } + + if(args[cntr] instanceof Buffer) { + head = args[cntr]; + } + + /* optional args parse end */ + + ['target', 'forward'].forEach(function(e) { + if (typeof options[e] === 'string') + options[e] = parse_url(options[e]); + }); + + if (!options.target && !options.forward) { + return this.emit('error', new Error('Must provide a proper URL as target')); + } + + for(var i=0; i < passes.length; i++) { + /** + * Call of passes functions + * pass(req, res, options, head) + * + * In WebSockets case the `res` variable + * refer to the connection socket + * pass(req, socket, options, head) + */ + if(passes[i](req, res, options, head, this, cbl)) { // passes can return a truthy value to halt the loop + break; + } + } + }; + }; +} +httpProxy.createRightProxy = createRightProxy; + +function ProxyServer(options) { + EE3.call(this); + + options = options || {}; + options.prependPath = options.prependPath === false ? false : true; + + this.web = this.proxyRequest = createRightProxy('web')(options); + this.ws = this.proxyWebsocketRequest = createRightProxy('ws')(options); + this.options = options; + + this.webPasses = Object.keys(web).map(function(pass) { + return web[pass]; + }); + + this.wsPasses = Object.keys(ws).map(function(pass) { + return ws[pass]; + }); + + this.on('error', this.onError, this); + +} + +require('util').inherits(ProxyServer, EE3); + +ProxyServer.prototype.onError = function (err) { + // + // Remark: Replicate node core behavior using EE3 + // so we force people to handle their own errors + // + if(this.listeners('error').length === 1) { + throw err; + } +}; + +ProxyServer.prototype.listen = function(port, hostname) { + var self = this, + closure = function(req, res) { self.web(req, res); }; + + this._server = this.options.ssl ? + https.createServer(this.options.ssl, closure) : + http.createServer(closure); + + if(this.options.ws) { + this._server.on('upgrade', function(req, socket, head) { self.ws(req, socket, head); }); + } + + this._server.listen(port, hostname); + + return this; +}; + +ProxyServer.prototype.close = function(callback) { + var self = this; + if (this._server) { + this._server.close(done); + } + + // Wrap callback to nullify server after all open connections are closed. + function done() { + self._server = null; + if (callback) { + callback.apply(null, arguments); + } + }; +}; + +ProxyServer.prototype.before = function(type, passName, callback) { + if (type !== 'ws' && type !== 'web') { + throw new Error('type must be `web` or `ws`'); + } + var passes = (type === 'ws') ? this.wsPasses : this.webPasses, + i = false; + + passes.forEach(function(v, idx) { + if(v.name === passName) i = idx; + }) + + if(i === false) throw new Error('No such pass'); + + passes.splice(i, 0, callback); +}; +ProxyServer.prototype.after = function(type, passName, callback) { + if (type !== 'ws' && type !== 'web') { + throw new Error('type must be `web` or `ws`'); + } + var passes = (type === 'ws') ? this.wsPasses : this.webPasses, + i = false; + + passes.forEach(function(v, idx) { + if(v.name === passName) i = idx; + }) + + if(i === false) throw new Error('No such pass'); + + passes.splice(i++, 0, callback); +}; diff --git a/node_modules/http-server/node_modules/http-proxy/lib/http-proxy/passes/web-incoming.js b/node_modules/http-server/node_modules/http-proxy/lib/http-proxy/passes/web-incoming.js new file mode 100644 index 0000000..4070eb3 --- /dev/null +++ b/node_modules/http-server/node_modules/http-proxy/lib/http-proxy/passes/web-incoming.js @@ -0,0 +1,166 @@ +var http = require('http'), + https = require('https'), + web_o = require('./web-outgoing'), + common = require('../common'), + passes = exports; + +web_o = Object.keys(web_o).map(function(pass) { + return web_o[pass]; +}); + +/*! + * Array of passes. + * + * A `pass` is just a function that is executed on `req, res, options` + * so that you can easily add new checks while still keeping the base + * flexible. + */ + +[ // <-- + + /** + * Sets `content-length` to '0' if request is of DELETE type. + * + * @param {ClientRequest} Req Request object + * @param {IncomingMessage} Res Response object + * @param {Object} Options Config object passed to the proxy + * + * @api private + */ + + function deleteLength(req, res, options) { + if((req.method === 'DELETE' || req.method === 'OPTIONS') + && !req.headers['content-length']) { + req.headers['content-length'] = '0'; + } + }, + + /** + * Sets timeout in request socket if it was specified in options. + * + * @param {ClientRequest} Req Request object + * @param {IncomingMessage} Res Response object + * @param {Object} Options Config object passed to the proxy + * + * @api private + */ + + function timeout(req, res, options) { + if(options.timeout) { + req.socket.setTimeout(options.timeout); + } + }, + + /** + * Sets `x-forwarded-*` headers if specified in config. + * + * @param {ClientRequest} Req Request object + * @param {IncomingMessage} Res Response object + * @param {Object} Options Config object passed to the proxy + * + * @api private + */ + + function XHeaders(req, res, options) { + if(!options.xfwd) return; + + var encrypted = req.isSpdy || common.hasEncryptedConnection(req); + var values = { + for : req.connection.remoteAddress || req.socket.remoteAddress, + port : common.getPort(req), + proto: encrypted ? 'https' : 'http' + }; + + ['for', 'port', 'proto'].forEach(function(header) { + req.headers['x-forwarded-' + header] = + (req.headers['x-forwarded-' + header] || '') + + (req.headers['x-forwarded-' + header] ? ',' : '') + + values[header]; + }); + }, + + /** + * Does the actual proxying. If `forward` is enabled fires up + * a ForwardStream, same happens for ProxyStream. The request + * just dies otherwise. + * + * @param {ClientRequest} Req Request object + * @param {IncomingMessage} Res Response object + * @param {Object} Options Config object passed to the proxy + * + * @api private + */ + + function stream(req, res, options, _, server, clb) { + + // And we begin! + server.emit('start', req, res, options.target) + if(options.forward) { + // If forward enable, so just pipe the request + var forwardReq = (options.forward.protocol === 'https:' ? https : http).request( + common.setupOutgoing(options.ssl || {}, options, req, 'forward') + ); + (options.buffer || req).pipe(forwardReq); + if(!options.target) { return res.end(); } + } + + // Request initalization + var proxyReq = (options.target.protocol === 'https:' ? https : http).request( + common.setupOutgoing(options.ssl || {}, options, req) + ); + + // Enable developers to modify the proxyReq before headers are sent + proxyReq.on('socket', function(socket) { + if(server) { server.emit('proxyReq', proxyReq, req, res, options); } + }); + + // allow outgoing socket to timeout so that we could + // show an error page at the initial request + if(options.proxyTimeout) { + proxyReq.setTimeout(options.proxyTimeout, function() { + proxyReq.abort(); + }); + } + + // Ensure we abort proxy if request is aborted + req.on('aborted', function () { + proxyReq.abort(); + }); + + // Handle errors on incoming request as well as it makes sense to + req.on('error', proxyError); + + // Error Handler + proxyReq.on('error', proxyError); + + function proxyError (err){ + if (clb) { + clb(err, req, res, options.target); + } else { + server.emit('error', err, req, res, options.target); + } + } + + (options.buffer || req).pipe(proxyReq); + + proxyReq.on('response', function(proxyRes) { + if(server) { server.emit('proxyRes', proxyRes, req, res); } + for(var i=0; i < web_o.length; i++) { + if(web_o[i](req, res, proxyRes, options)) { break; } + } + + // Allow us to listen when the proxy has completed + proxyRes.on('end', function () { + server.emit('end', req, res, proxyRes); + }); + + proxyRes.pipe(res); + }); + + //proxyReq.end(); + } + +] // <-- + .forEach(function(func) { + passes[func.name] = func; + }); diff --git a/node_modules/http-server/node_modules/http-proxy/lib/http-proxy/passes/web-outgoing.js b/node_modules/http-server/node_modules/http-proxy/lib/http-proxy/passes/web-outgoing.js new file mode 100644 index 0000000..977f1f7 --- /dev/null +++ b/node_modules/http-server/node_modules/http-proxy/lib/http-proxy/passes/web-outgoing.js @@ -0,0 +1,105 @@ +var url = require('url'), + passes = exports; + +var redirectRegex = /^30(1|2|7|8)$/; + +/*! + * Array of passes. + * + * A `pass` is just a function that is executed on `req, res, options` + * so that you can easily add new checks while still keeping the base + * flexible. + */ + +[ // <-- + + /** + * If is a HTTP 1.0 request, remove chunk headers + * + * @param {ClientRequest} Req Request object + * @param {IncomingMessage} Res Response object + * @param {proxyResponse} Res Response object from the proxy request + * + * @api private + */ + function removeChunked(req, res, proxyRes) { + if (req.httpVersion === '1.0') { + delete proxyRes.headers['transfer-encoding']; + } + }, + + /** + * If is a HTTP 1.0 request, set the correct connection header + * or if connection header not present, then use `keep-alive` + * + * @param {ClientRequest} Req Request object + * @param {IncomingMessage} Res Response object + * @param {proxyResponse} Res Response object from the proxy request + * + * @api private + */ + function setConnection(req, res, proxyRes) { + if (req.httpVersion === '1.0') { + proxyRes.headers.connection = req.headers.connection || 'close'; + } else if (!proxyRes.headers.connection) { + proxyRes.headers.connection = req.headers.connection || 'keep-alive'; + } + }, + + function setRedirectHostRewrite(req, res, proxyRes, options) { + if ((options.hostRewrite || options.autoRewrite || options.protocolRewrite) + && proxyRes.headers['location'] + && redirectRegex.test(proxyRes.statusCode)) { + var target = url.parse(options.target); + var u = url.parse(proxyRes.headers['location']); + + // make sure the redirected host matches the target host before rewriting + if (target.host != u.host) { + return; + } + + if (options.hostRewrite) { + u.host = options.hostRewrite; + } else if (options.autoRewrite) { + u.host = req.headers['host']; + } + if (options.protocolRewrite) { + u.protocol = options.protocolRewrite; + } + + proxyRes.headers['location'] = u.format(); + } + }, + /** + * Copy headers from proxyResponse to response + * set each header in response object. + * + * @param {ClientRequest} Req Request object + * @param {IncomingMessage} Res Response object + * @param {proxyResponse} Res Response object from the proxy request + * + * @api private + */ + function writeHeaders(req, res, proxyRes) { + Object.keys(proxyRes.headers).forEach(function(key) { + res.setHeader(key, proxyRes.headers[key]); + }); + }, + + /** + * Set the statusCode from the proxyResponse + * + * @param {ClientRequest} Req Request object + * @param {IncomingMessage} Res Response object + * @param {proxyResponse} Res Response object from the proxy request + * + * @api private + */ + function writeStatusCode(req, res, proxyRes) { + res.writeHead(proxyRes.statusCode); + } + +] // <-- + .forEach(function(func) { + passes[func.name] = func; + }); diff --git a/node_modules/http-server/node_modules/http-proxy/lib/http-proxy/passes/ws-incoming.js b/node_modules/http-server/node_modules/http-proxy/lib/http-proxy/passes/ws-incoming.js new file mode 100644 index 0000000..f517857 --- /dev/null +++ b/node_modules/http-server/node_modules/http-proxy/lib/http-proxy/passes/ws-incoming.js @@ -0,0 +1,158 @@ +var http = require('http'), + https = require('https'), + common = require('../common'), + passes = exports; + +/*! + * Array of passes. + * + * A `pass` is just a function that is executed on `req, socket, options` + * so that you can easily add new checks while still keeping the base + * flexible. + */ + +/* + * Websockets Passes + * + */ + +var passes = exports; + +[ + /** + * WebSocket requests must have the `GET` method and + * the `upgrade:websocket` header + * + * @param {ClientRequest} Req Request object + * @param {Socket} Websocket + * + * @api private + */ + + function checkMethodAndHeader (req, socket) { + if (req.method !== 'GET' || !req.headers.upgrade) { + socket.destroy(); + return true; + } + + if (req.headers.upgrade.toLowerCase() !== 'websocket') { + socket.destroy(); + return true; + } + }, + + /** + * Sets `x-forwarded-*` headers if specified in config. + * + * @param {ClientRequest} Req Request object + * @param {Socket} Websocket + * @param {Object} Options Config object passed to the proxy + * + * @api private + */ + + function XHeaders(req, socket, options) { + if(!options.xfwd) return; + + var values = { + for : req.connection.remoteAddress || req.socket.remoteAddress, + port : common.getPort(req), + proto: common.hasEncryptedConnection(req) ? 'wss' : 'ws' + }; + + ['for', 'port', 'proto'].forEach(function(header) { + req.headers['x-forwarded-' + header] = + (req.headers['x-forwarded-' + header] || '') + + (req.headers['x-forwarded-' + header] ? ',' : '') + + values[header]; + }); + }, + + /** + * Does the actual proxying. Make the request and upgrade it + * send the Switching Protocols request and pipe the sockets. + * + * @param {ClientRequest} Req Request object + * @param {Socket} Websocket + * @param {Object} Options Config object passed to the proxy + * + * @api private + */ + function stream(req, socket, options, head, server, clb) { + common.setupSocket(socket); + + if (head && head.length) socket.unshift(head); + + + var proxyReq = (common.isSSL.test(options.target.protocol) ? https : http).request( + common.setupOutgoing(options.ssl || {}, options, req) + ); + // Error Handler + proxyReq.on('error', onOutgoingError); + proxyReq.on('response', function (res) { + // if upgrade event isn't going to happen, close the socket + if (!res.upgrade) socket.end(); + }); + + proxyReq.on('upgrade', function(proxyRes, proxySocket, proxyHead) { + proxySocket.on('error', onOutgoingError); + + // Allow us to listen when the websocket has completed + proxySocket.on('end', function () { + server.emit('close', proxyRes, proxySocket, proxyHead); + }); + + // The pipe below will end proxySocket if socket closes cleanly, but not + // if it errors (eg, vanishes from the net and starts returning + // EHOSTUNREACH). We need to do that explicitly. + socket.on('error', function () { + proxySocket.end(); + }); + + common.setupSocket(proxySocket); + + if (proxyHead && proxyHead.length) proxySocket.unshift(proxyHead); + + // + // Remark: Handle writing the headers to the socket when switching protocols + // Also handles when a header is an array + // + socket.write( + Object.keys(proxyRes.headers).reduce(function (head, key) { + var value = proxyRes.headers[key]; + + if (!Array.isArray(value)) { + head.push(key + ': ' + value); + return head; + } + + for (var i = 0; i < value.length; i++) { + head.push(key + ': ' + value[i]); + } + return head; + }, ['HTTP/1.1 101 Switching Protocols']) + .join('\r\n') + '\r\n\r\n' + ); + + proxySocket.pipe(socket).pipe(proxySocket); + + server.emit('open', proxySocket); + server.emit('proxySocket', proxySocket); //DEPRECATED. + }); + + return proxyReq.end(); // XXX: CHECK IF THIS IS THIS CORRECT + + function onOutgoingError(err) { + if (clb) { + clb(err, req, socket); + } else { + server.emit('error', err, req, socket); + } + socket.end(); + } + } + +] // <-- + .forEach(function(func) { + passes[func.name] = func; + }); diff --git a/node_modules/http-server/node_modules/http-proxy/node_modules/eventemitter3/LICENSE b/node_modules/http-server/node_modules/http-proxy/node_modules/eventemitter3/LICENSE new file mode 100644 index 0000000..abcbd54 --- /dev/null +++ b/node_modules/http-server/node_modules/http-proxy/node_modules/eventemitter3/LICENSE @@ -0,0 +1,21 @@ +The MIT License (MIT) + +Copyright (c) 2014 Arnout Kazemier + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/node_modules/http-server/node_modules/http-proxy/node_modules/eventemitter3/README.md b/node_modules/http-server/node_modules/http-proxy/node_modules/eventemitter3/README.md new file mode 100644 index 0000000..ff20965 --- /dev/null +++ b/node_modules/http-server/node_modules/http-proxy/node_modules/eventemitter3/README.md @@ -0,0 +1,89 @@ +# EventEmitter3 + +[![Version npm](https://img.shields.io/npm/v/eventemitter3.svg?style=flat-square)](http://browsenpm.org/package/eventemitter3)[![Build Status](https://img.shields.io/travis/primus/eventemitter3/master.svg?style=flat-square)](https://travis-ci.org/primus/eventemitter3)[![Dependencies](https://img.shields.io/david/primus/eventemitter3.svg?style=flat-square)](https://david-dm.org/primus/eventemitter3)[![Coverage Status](https://img.shields.io/coveralls/primus/eventemitter3/master.svg?style=flat-square)](https://coveralls.io/r/primus/eventemitter3?branch=master)[![IRC channel](https://img.shields.io/badge/IRC-irc.freenode.net%23primus-00a8ff.svg?style=flat-square)](https://webchat.freenode.net/?channels=primus) + +[![Sauce Test Status](https://saucelabs.com/browser-matrix/eventemitter3.svg)](https://saucelabs.com/u/eventemitter3) + +EventEmitter3 is a high performance EventEmitter. It has been micro-optimized +for various of code paths making this, one of, if not the fastest EventEmitter +available for Node.js and browsers. The module is API compatible with the +EventEmitter that ships by default with Node.js but there are some slight +differences: + +- Domain support has been removed. +- We do not `throw` an error when you emit an `error` event and nobody is + listening. +- The `newListener` event is removed as the use-cases for this functionality are + really just edge cases. +- No `setMaxListeners` and it's pointless memory leak warnings. If you want to + add `end` listeners you should be able to do that without modules complaining. +- No `listenerCount` function. Use `EE.listeners(event).length` instead. +- Support for custom context for events so there is no need to use `fn.bind`. +- `listeners` method can do existence checking instead of returning only arrays. + +It's a drop in replacement for existing EventEmitters, but just faster. Free +performance, who wouldn't want that? The EventEmitter is written in EcmaScript 3 +so it will work in the oldest browsers and node versions that you need to +support. + +## Installation + +```bash +$ npm install --save eventemitter3 # npm +$ component install primus/eventemitter3 # Component +$ bower install eventemitter3 # Bower +``` + +## Usage + +After installation the only thing you need to do is require the module: + +```js +var EventEmitter = require('eventemitter3'); +``` + +And you're ready to create your own EventEmitter instances. For the API +documentation, please follow the official Node.js documentation: + +http://nodejs.org/api/events.html + +### Contextual emits + +We've upgraded the API of the `EventEmitter.on`, `EventEmitter.once` and +`EventEmitter.removeListener` to accept an extra argument which is the `context` +or `this` value that should be set for the emitted events. This means you no +longer have the overhead of an event that required `fn.bind` in order to get a +custom `this` value. + +```js +var EE = new EventEmitter() + , context = { foo: 'bar' }; + +function emitted() { + console.log(this === context); // true +} + +EE.once('event-name', emitted, context); +EE.on('another-event', emitted, context); +EE.removeListener('another-event', emitted, context); +``` + +### Existence + +To check if there is already a listener for a given event you can supply the +`listeners` method with an extra boolean argument. This will transform the +output from an array, to a boolean value which indicates if there are listeners +in place for the given event: + +```js +var EE = new EventEmitter(); +EE.once('event-name', function () {}); +EE.on('another-event', function () {}); + +EE.listeners('event-name', true); // returns true +EE.listeners('unknown-name', true); // returns false +``` + +## License + +[MIT](LICENSE) diff --git a/node_modules/http-server/node_modules/http-proxy/node_modules/eventemitter3/index.js b/node_modules/http-server/node_modules/http-proxy/node_modules/eventemitter3/index.js new file mode 100644 index 0000000..d586cad --- /dev/null +++ b/node_modules/http-server/node_modules/http-proxy/node_modules/eventemitter3/index.js @@ -0,0 +1,262 @@ +'use strict'; + +// +// We store our EE objects in a plain object whose properties are event names. +// If `Object.create(null)` is not supported we prefix the event names with a +// `~` to make sure that the built-in object properties are not overridden or +// used as an attack vector. +// We also assume that `Object.create(null)` is available when the event name +// is an ES6 Symbol. +// +var prefix = typeof Object.create !== 'function' ? '~' : false; + +/** + * Representation of a single EventEmitter function. + * + * @param {Function} fn Event handler to be called. + * @param {Mixed} context Context for function execution. + * @param {Boolean} once Only emit once + * @api private + */ +function EE(fn, context, once) { + this.fn = fn; + this.context = context; + this.once = once || false; +} + +/** + * Minimal EventEmitter interface that is molded against the Node.js + * EventEmitter interface. + * + * @constructor + * @api public + */ +function EventEmitter() { /* Nothing to set */ } + +/** + * Holds the assigned EventEmitters by name. + * + * @type {Object} + * @private + */ +EventEmitter.prototype._events = undefined; + +/** + * Return a list of assigned event listeners. + * + * @param {String} event The events that should be listed. + * @param {Boolean} exists We only need to know if there are listeners. + * @returns {Array|Boolean} + * @api public + */ +EventEmitter.prototype.listeners = function listeners(event, exists) { + var evt = prefix ? prefix + event : event + , available = this._events && this._events[evt]; + + if (exists) return !!available; + if (!available) return []; + if (available.fn) return [available.fn]; + + for (var i = 0, l = available.length, ee = new Array(l); i < l; i++) { + ee[i] = available[i].fn; + } + + return ee; +}; + +/** + * Emit an event to all registered event listeners. + * + * @param {String} event The name of the event. + * @returns {Boolean} Indication if we've emitted an event. + * @api public + */ +EventEmitter.prototype.emit = function emit(event, a1, a2, a3, a4, a5) { + var evt = prefix ? prefix + event : event; + + if (!this._events || !this._events[evt]) return false; + + var listeners = this._events[evt] + , len = arguments.length + , args + , i; + + if ('function' === typeof listeners.fn) { + if (listeners.once) this.removeListener(event, listeners.fn, undefined, true); + + switch (len) { + case 1: return listeners.fn.call(listeners.context), true; + case 2: return listeners.fn.call(listeners.context, a1), true; + case 3: return listeners.fn.call(listeners.context, a1, a2), true; + case 4: return listeners.fn.call(listeners.context, a1, a2, a3), true; + case 5: return listeners.fn.call(listeners.context, a1, a2, a3, a4), true; + case 6: return listeners.fn.call(listeners.context, a1, a2, a3, a4, a5), true; + } + + for (i = 1, args = new Array(len -1); i < len; i++) { + args[i - 1] = arguments[i]; + } + + listeners.fn.apply(listeners.context, args); + } else { + var length = listeners.length + , j; + + for (i = 0; i < length; i++) { + if (listeners[i].once) this.removeListener(event, listeners[i].fn, undefined, true); + + switch (len) { + case 1: listeners[i].fn.call(listeners[i].context); break; + case 2: listeners[i].fn.call(listeners[i].context, a1); break; + case 3: listeners[i].fn.call(listeners[i].context, a1, a2); break; + default: + if (!args) for (j = 1, args = new Array(len -1); j < len; j++) { + args[j - 1] = arguments[j]; + } + + listeners[i].fn.apply(listeners[i].context, args); + } + } + } + + return true; +}; + +/** + * Register a new EventListener for the given event. + * + * @param {String} event Name of the event. + * @param {Functon} fn Callback function. + * @param {Mixed} context The context of the function. + * @api public + */ +EventEmitter.prototype.on = function on(event, fn, context) { + var listener = new EE(fn, context || this) + , evt = prefix ? prefix + event : event; + + if (!this._events) this._events = prefix ? {} : Object.create(null); + if (!this._events[evt]) this._events[evt] = listener; + else { + if (!this._events[evt].fn) this._events[evt].push(listener); + else this._events[evt] = [ + this._events[evt], listener + ]; + } + + return this; +}; + +/** + * Add an EventListener that's only called once. + * + * @param {String} event Name of the event. + * @param {Function} fn Callback function. + * @param {Mixed} context The context of the function. + * @api public + */ +EventEmitter.prototype.once = function once(event, fn, context) { + var listener = new EE(fn, context || this, true) + , evt = prefix ? prefix + event : event; + + if (!this._events) this._events = prefix ? {} : Object.create(null); + if (!this._events[evt]) this._events[evt] = listener; + else { + if (!this._events[evt].fn) this._events[evt].push(listener); + else this._events[evt] = [ + this._events[evt], listener + ]; + } + + return this; +}; + +/** + * Remove event listeners. + * + * @param {String} event The event we want to remove. + * @param {Function} fn The listener that we need to find. + * @param {Mixed} context Only remove listeners matching this context. + * @param {Boolean} once Only remove once listeners. + * @api public + */ +EventEmitter.prototype.removeListener = function removeListener(event, fn, context, once) { + var evt = prefix ? prefix + event : event; + + if (!this._events || !this._events[evt]) return this; + + var listeners = this._events[evt] + , events = []; + + if (fn) { + if (listeners.fn) { + if ( + listeners.fn !== fn + || (once && !listeners.once) + || (context && listeners.context !== context) + ) { + events.push(listeners); + } + } else { + for (var i = 0, length = listeners.length; i < length; i++) { + if ( + listeners[i].fn !== fn + || (once && !listeners[i].once) + || (context && listeners[i].context !== context) + ) { + events.push(listeners[i]); + } + } + } + } + + // + // Reset the array, or remove it completely if we have no more listeners. + // + if (events.length) { + this._events[evt] = events.length === 1 ? events[0] : events; + } else { + delete this._events[evt]; + } + + return this; +}; + +/** + * Remove all listeners or only the listeners for the specified event. + * + * @param {String} event The event want to remove all listeners for. + * @api public + */ +EventEmitter.prototype.removeAllListeners = function removeAllListeners(event) { + if (!this._events) return this; + + if (event) delete this._events[prefix ? prefix + event : event]; + else this._events = prefix ? {} : Object.create(null); + + return this; +}; + +// +// Alias methods names because people roll like that. +// +EventEmitter.prototype.off = EventEmitter.prototype.removeListener; +EventEmitter.prototype.addListener = EventEmitter.prototype.on; + +// +// This function doesn't apply anymore. +// +EventEmitter.prototype.setMaxListeners = function setMaxListeners() { + return this; +}; + +// +// Expose the prefix. +// +EventEmitter.prefixed = prefix; + +// +// Expose the module. +// +if ('undefined' !== typeof module) { + module.exports = EventEmitter; +} diff --git a/node_modules/http-server/node_modules/http-proxy/node_modules/eventemitter3/package.json b/node_modules/http-server/node_modules/http-proxy/node_modules/eventemitter3/package.json new file mode 100644 index 0000000..0d80a60 --- /dev/null +++ b/node_modules/http-server/node_modules/http-proxy/node_modules/eventemitter3/package.json @@ -0,0 +1,81 @@ +{ + "name": "eventemitter3", + "version": "1.1.1", + "description": "EventEmitter3 focuses on performance while maintaining a Node.js AND browser compatible interface.", + "main": "index.js", + "scripts": { + "test-browser": "zuul --browser-name ${BROWSER_NAME} --browser-version ${BROWSER_VERSION} -- test.js", + "test-node": "istanbul cover node_modules/.bin/_mocha --report lcovonly -- test.js", + "coverage": "istanbul cover ./node_modules/.bin/_mocha -- test.js", + "sync": "node versions.js", + "test": "mocha test.js" + }, + "repository": { + "type": "git", + "url": "git://github.com/primus/eventemitter3.git" + }, + "keywords": [ + "EventEmitter", + "EventEmitter2", + "EventEmitter3", + "Events", + "addEventListener", + "addListener", + "emit", + "emits", + "emitter", + "event", + "once", + "pub/sub", + "publish", + "reactor", + "subscribe" + ], + "author": { + "name": "Arnout Kazemier" + }, + "license": "MIT", + "bugs": { + "url": "https://github.com/primus/eventemitter3/issues" + }, + "pre-commit": "sync, test", + "devDependencies": { + "assume": "1.2.x", + "istanbul": "0.3.x", + "mocha": "2.2.x", + "pre-commit": "1.0.x", + "zuul": "3.0.x" + }, + "gitHead": "91f571f40c918d71220747791c05ec33f3402a56", + "homepage": "https://github.com/primus/eventemitter3#readme", + "_id": "eventemitter3@1.1.1", + "_shasum": "47786bdaa087caf7b1b75e73abc5c7d540158cd0", + "_from": "eventemitter3@>=1.0.0 <2.0.0", + "_npmVersion": "2.9.1", + "_nodeVersion": "0.12.3", + "_npmUser": { + "name": "3rdeden", + "email": "npm@3rd-Eden.com" + }, + "maintainers": [ + { + "name": "v1", + "email": "npm@3rd-Eden.com" + }, + { + "name": "3rdeden", + "email": "npm@3rd-Eden.com" + }, + { + "name": "lpinca", + "email": "luigipinca@gmail.com" + } + ], + "dist": { + "shasum": "47786bdaa087caf7b1b75e73abc5c7d540158cd0", + "tarball": "http://registry.npmjs.org/eventemitter3/-/eventemitter3-1.1.1.tgz" + }, + "directories": {}, + "_resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-1.1.1.tgz", + "readme": "ERROR: No README data found!" +} diff --git a/node_modules/http-server/node_modules/http-proxy/node_modules/requires-port/.npmignore b/node_modules/http-server/node_modules/http-proxy/node_modules/requires-port/.npmignore new file mode 100644 index 0000000..ba2a97b --- /dev/null +++ b/node_modules/http-server/node_modules/http-proxy/node_modules/requires-port/.npmignore @@ -0,0 +1,2 @@ +node_modules +coverage diff --git a/node_modules/http-server/node_modules/http-proxy/node_modules/requires-port/.travis.yml b/node_modules/http-server/node_modules/http-proxy/node_modules/requires-port/.travis.yml new file mode 100644 index 0000000..22ebb02 --- /dev/null +++ b/node_modules/http-server/node_modules/http-proxy/node_modules/requires-port/.travis.yml @@ -0,0 +1,28 @@ +language: node_js +node_js: + - "0.12" + - "0.11" + - "0.10" + - "0.9" + - "0.8" + - "iojs-v1.1" + - "iojs-v1.0" +before_install: + - "npm install -g npm@1.4.x" +script: + - "npm run test-travis" +after_script: + - "npm install coveralls@2.11.x && cat coverage/lcov.info | coveralls" +matrix: + fast_finish: true + allow_failures: + - node_js: "0.11" + - node_js: "0.9" + - node_js: "iojs-v1.1" + - node_js: "iojs-v1.0" +notifications: + irc: + channels: + - "irc.freenode.org#unshift" + on_success: change + on_failure: change diff --git a/node_modules/http-server/node_modules/http-proxy/node_modules/requires-port/LICENSE b/node_modules/http-server/node_modules/http-proxy/node_modules/requires-port/LICENSE new file mode 100644 index 0000000..6dc9316 --- /dev/null +++ b/node_modules/http-server/node_modules/http-proxy/node_modules/requires-port/LICENSE @@ -0,0 +1,22 @@ +The MIT License (MIT) + +Copyright (c) 2015 Unshift.io, Arnout Kazemier, the Contributors. + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. + diff --git a/node_modules/http-server/node_modules/http-proxy/node_modules/requires-port/README.md b/node_modules/http-server/node_modules/http-proxy/node_modules/requires-port/README.md new file mode 100644 index 0000000..3effe75 --- /dev/null +++ b/node_modules/http-server/node_modules/http-proxy/node_modules/requires-port/README.md @@ -0,0 +1,47 @@ +# requires-port + +[![Made by unshift](https://img.shields.io/badge/made%20by-unshift-00ffcc.svg?style=flat-square)](http://unshift.io)[![Version npm](http://img.shields.io/npm/v/requires-port.svg?style=flat-square)](http://browsenpm.org/package/requires-port)[![Build Status](http://img.shields.io/travis/unshiftio/requires-port/master.svg?style=flat-square)](https://travis-ci.org/unshiftio/requires-port)[![Dependencies](https://img.shields.io/david/unshiftio/requires-port.svg?style=flat-square)](https://david-dm.org/unshiftio/requires-port)[![Coverage Status](http://img.shields.io/coveralls/unshiftio/requires-port/master.svg?style=flat-square)](https://coveralls.io/r/unshiftio/requires-port?branch=master)[![IRC channel](http://img.shields.io/badge/IRC-irc.freenode.net%23unshift-00a8ff.svg?style=flat-square)](http://webchat.freenode.net/?channels=unshift) + +The module name says it all, check if a protocol requires a given port. + +## Installation + +This module is intended to be used with browserify or Node.js and is distributed +in the public npm registry. To install it simply run the following command from +your CLI: + +```j +npm install --save requires-port +``` + +## Usage + +The module exports it self as function and requires 2 arguments: + +1. The port number, can be a string or number. +2. Protocol, can be `http`, `http:` or even `https://yomoma.com`. We just split + it at `:` and use the first result. We currently accept the following + protocols: + - `http` + - `https` + - `ws` + - `wss` + - `ftp` + - `gopher` + - `file` + +It returns a boolean that indicates if protocol requires this port to be added +to your URL. + +```js +'use strict'; + +var required = require('requires-port'); + +console.log(required('8080', 'http')) // true +console.log(required('80', 'http')) // false +``` + +# License + +MIT diff --git a/node_modules/http-server/node_modules/http-proxy/node_modules/requires-port/index.js b/node_modules/http-server/node_modules/http-proxy/node_modules/requires-port/index.js new file mode 100644 index 0000000..9ecfae3 --- /dev/null +++ b/node_modules/http-server/node_modules/http-proxy/node_modules/requires-port/index.js @@ -0,0 +1,38 @@ +'use strict'; + +/** + * Check if we're required to add a port number. + * + * @see https://url.spec.whatwg.org/#default-port + * @param {Number|String} port Port number we need to check + * @param {String} protocol Protocol we need to check against. + * @returns {Boolean} Is it a default port for the given protocol + * @api private + */ +module.exports = function required(port, protocol) { + protocol = protocol.split(':')[0]; + port = +port; + + if (!port) return false; + + switch (protocol) { + case 'http': + case 'ws': + return port !== 80; + + case 'https': + case 'wss': + return port !== 443; + + case 'ftp': + return port !== 22; + + case 'gopher': + return port !== 70; + + case 'file': + return false; + } + + return port !== 0; +}; diff --git a/node_modules/http-server/node_modules/http-proxy/node_modules/requires-port/package.json b/node_modules/http-server/node_modules/http-proxy/node_modules/requires-port/package.json new file mode 100644 index 0000000..2b844b1 --- /dev/null +++ b/node_modules/http-server/node_modules/http-proxy/node_modules/requires-port/package.json @@ -0,0 +1,76 @@ +{ + "name": "requires-port", + "version": "0.0.1", + "description": "Check if a protocol requires a certain port number to be added to an URL.", + "main": "index.js", + "scripts": { + "100%": "istanbul check-coverage --statements 100 --functions 100 --lines 100 --branches 100", + "test": "mocha test.js", + "watch": "mocha --watch test.js", + "coverage": "istanbul cover ./node_modules/.bin/_mocha -- test.js", + "test-travis": "istanbul cover node_modules/.bin/_mocha --report lcovonly -- test.js" + }, + "repository": { + "type": "git", + "url": "git+https://github.com/unshiftio/requires-port.git" + }, + "keywords": [ + "port", + "require", + "http", + "https", + "ws", + "wss", + "gopher", + "file", + "ftp", + "requires", + "requried", + "portnumber", + "url", + "parsing", + "validation", + "cows" + ], + "author": { + "name": "Arnout Kazemier" + }, + "license": "MIT", + "bugs": { + "url": "https://github.com/unshiftio/requires-port/issues" + }, + "homepage": "https://github.com/unshiftio/requires-port", + "devDependencies": { + "assume": "1.1.x", + "istanbul": "0.3.x", + "mocha": "2.1.x", + "pre-commit": "1.0.x" + }, + "gitHead": "d6235df7aa7e8d08e9ac72c842e1e2c6c366376f", + "_id": "requires-port@0.0.1", + "_shasum": "4b4414411d9df7c855995dd899a8c78a2951c16d", + "_from": "requires-port@>=0.0.0 <1.0.0", + "_npmVersion": "2.9.1", + "_nodeVersion": "0.12.3", + "_npmUser": { + "name": "3rdeden", + "email": "npm@3rd-Eden.com" + }, + "maintainers": [ + { + "name": "v1", + "email": "info@3rd-Eden.com" + }, + { + "name": "3rdeden", + "email": "npm@3rd-Eden.com" + } + ], + "dist": { + "shasum": "4b4414411d9df7c855995dd899a8c78a2951c16d", + "tarball": "http://registry.npmjs.org/requires-port/-/requires-port-0.0.1.tgz" + }, + "directories": {}, + "_resolved": "https://registry.npmjs.org/requires-port/-/requires-port-0.0.1.tgz", + "readme": "ERROR: No README data found!" +} diff --git a/node_modules/http-server/node_modules/http-proxy/node_modules/requires-port/test.js b/node_modules/http-server/node_modules/http-proxy/node_modules/requires-port/test.js new file mode 100644 index 0000000..abd6bcb --- /dev/null +++ b/node_modules/http-server/node_modules/http-proxy/node_modules/requires-port/test.js @@ -0,0 +1,98 @@ +describe('requires-port', function () { + 'use strict'; + + var assume = require('assume') + , required = require('./'); + + it('is exported as a function', function () { + assume(required).is.a('function'); + }); + + it('does not require empty ports', function () { + assume(required('', 'http')).false(); + assume(required('', 'wss')).false(); + assume(required('', 'ws')).false(); + assume(required('', 'cowsack')).false(); + }); + + it('assumes true for unknown protocols',function () { + assume(required('808', 'foo')).true(); + assume(required('80', 'bar')).true(); + }); + + it('never requires port numbers for file', function () { + assume(required(8080, 'file')).false(); + }); + + it('does not require port 80 for http', function () { + assume(required('80', 'http')).false(); + assume(required(80, 'http')).false(); + assume(required(80, 'http://')).false(); + assume(required(80, 'http://www.google.com')).false(); + + assume(required('8080', 'http')).true(); + assume(required(8080, 'http')).true(); + assume(required(8080, 'http://')).true(); + assume(required(8080, 'http://www.google.com')).true(); + }); + + it('does not require port 80 for ws', function () { + assume(required('80', 'ws')).false(); + assume(required(80, 'ws')).false(); + assume(required(80, 'ws://')).false(); + assume(required(80, 'ws://www.google.com')).false(); + + assume(required('8080', 'ws')).true(); + assume(required(8080, 'ws')).true(); + assume(required(8080, 'ws://')).true(); + assume(required(8080, 'ws://www.google.com')).true(); + }); + + it('does not require port 443 for https', function () { + assume(required('443', 'https')).false(); + assume(required(443, 'https')).false(); + assume(required(443, 'https://')).false(); + assume(required(443, 'https://www.google.com')).false(); + + assume(required('8080', 'https')).true(); + assume(required(8080, 'https')).true(); + assume(required(8080, 'https://')).true(); + assume(required(8080, 'https://www.google.com')).true(); + }); + + it('does not require port 443 for wss', function () { + assume(required('443', 'wss')).false(); + assume(required(443, 'wss')).false(); + assume(required(443, 'wss://')).false(); + assume(required(443, 'wss://www.google.com')).false(); + + assume(required('8080', 'wss')).true(); + assume(required(8080, 'wss')).true(); + assume(required(8080, 'wss://')).true(); + assume(required(8080, 'wss://www.google.com')).true(); + }); + + it('does not require port 22 for ftp', function () { + assume(required('22', 'ftp')).false(); + assume(required(22, 'ftp')).false(); + assume(required(22, 'ftp://')).false(); + assume(required(22, 'ftp://www.google.com')).false(); + + assume(required('8080', 'ftp')).true(); + assume(required(8080, 'ftp')).true(); + assume(required(8080, 'ftp://')).true(); + assume(required(8080, 'ftp://www.google.com')).true(); + }); + + it('does not require port 70 for gopher', function () { + assume(required('70', 'gopher')).false(); + assume(required(70, 'gopher')).false(); + assume(required(70, 'gopher://')).false(); + assume(required(70, 'gopher://www.google.com')).false(); + + assume(required('8080', 'gopher')).true(); + assume(required(8080, 'gopher')).true(); + assume(required(8080, 'gopher://')).true(); + assume(required(8080, 'gopher://www.google.com')).true(); + }); +}); diff --git a/node_modules/http-server/node_modules/http-proxy/package.json b/node_modules/http-server/node_modules/http-proxy/package.json new file mode 100644 index 0000000..bd34f79 --- /dev/null +++ b/node_modules/http-server/node_modules/http-proxy/package.json @@ -0,0 +1,78 @@ +{ + "name": "http-proxy", + "version": "1.11.2", + "repository": { + "type": "git", + "url": "git+https://github.com/nodejitsu/node-http-proxy.git" + }, + "description": "HTTP proxying for the masses", + "author": { + "name": "Nodejitsu Inc.", + "email": "info@nodejitsu.com" + }, + "maintainers": [ + { + "name": "indexzero", + "email": "charlie.robbins@gmail.com" + }, + { + "name": "cronopio", + "email": "aristizabal.daniel@gmail.com" + }, + { + "name": "yawnt", + "email": "yawn.localhost@gmail.com" + }, + { + "name": "jcrugzz", + "email": "jcrugzz@gmail.com" + } + ], + "main": "index.js", + "dependencies": { + "eventemitter3": "1.x.x", + "requires-port": "0.x.x" + }, + "devDependencies": { + "async": "*", + "blanket": "*", + "coveralls": "*", + "dox": "*", + "expect.js": "*", + "mocha": "*", + "mocha-lcov-reporter": "*", + "semver": "^4.3.3", + "socket.io": "*", + "socket.io-client": "*", + "ws": "~0.5.0" + }, + "scripts": { + "coveralls": "mocha --require blanket --reporter mocha-lcov-reporter | ./node_modules/coveralls/bin/coveralls.js", + "test": "mocha -R landing test/*-test.js", + "test-cov": "mocha --require blanket -R html-cov > cov/coverage.html" + }, + "engines": { + "node": ">=0.10.0" + }, + "license": "MIT", + "gitHead": "30e3b371de0116e40e15156394f31c7e0b0aa9f1", + "bugs": { + "url": "https://github.com/nodejitsu/node-http-proxy/issues" + }, + "homepage": "https://github.com/nodejitsu/node-http-proxy#readme", + "_id": "http-proxy@1.11.2", + "_shasum": "c50d2fb06eca79d4238e66fd94393d2e41e63740", + "_from": "http-proxy@>=1.8.1 <2.0.0", + "_npmVersion": "2.11.3", + "_nodeVersion": "0.10.36", + "_npmUser": { + "name": "jcrugzz", + "email": "jcrugzz@gmail.com" + }, + "dist": { + "shasum": "c50d2fb06eca79d4238e66fd94393d2e41e63740", + "tarball": "http://registry.npmjs.org/http-proxy/-/http-proxy-1.11.2.tgz" + }, + "directories": {}, + "_resolved": "https://registry.npmjs.org/http-proxy/-/http-proxy-1.11.2.tgz" +} diff --git a/node_modules/http-server/node_modules/opener/LICENSE.txt b/node_modules/http-server/node_modules/opener/LICENSE.txt new file mode 100644 index 0000000..f580e3d --- /dev/null +++ b/node_modules/http-server/node_modules/opener/LICENSE.txt @@ -0,0 +1,19 @@ +Copyright © 2012–2015 Domenic Denicola + +This work is free. You can redistribute it and/or modify it under the +terms of the Do What The Fuck You Want To Public License, Version 2, +as published by Sam Hocevar. See below for more details. + + DO WHAT THE FUCK YOU WANT TO PUBLIC LICENSE + Version 2, December 2004 + + Copyright (C) 2004 Sam Hocevar + + Everyone is permitted to copy and distribute verbatim or modified + copies of this license document, and changing it is allowed as long + as the name is changed. + + DO WHAT THE FUCK YOU WANT TO PUBLIC LICENSE + TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION + + 0. You just DO WHAT THE FUCK YOU WANT TO. diff --git a/node_modules/http-server/node_modules/opener/README.md b/node_modules/http-server/node_modules/opener/README.md new file mode 100644 index 0000000..8a803f3 --- /dev/null +++ b/node_modules/http-server/node_modules/opener/README.md @@ -0,0 +1,57 @@ +# It Opens Stuff + +That is, in your desktop environment. This will make *actual windows pop up*, with stuff in them: + +```bash +npm install opener -g + +opener http://google.com +opener ./my-file.txt +opener firefox +opener npm run lint +``` + +Also if you want to use it programmatically you can do that too: + +```js +var opener = require("opener"); + +opener("http://google.com"); +opener("./my-file.txt"); +opener("firefox"); +opener("npm run lint"); +``` + +Plus, it returns the child process created, so you can do things like let your script exit while the window stays open: + +```js +var editor = opener("documentation.odt"); +editor.unref(); +// These other unrefs may be necessary if your OS's opener process +// exits before the process it started is complete. +editor.stdin.unref(); +editor.stdout.unref(); +editor.stderr.unref(); +``` + + +## Use It for Good + +Like opening the user's browser with a test harness in your package's test script: + +```json +{ + "scripts": { + "test": "opener ./test/runner.html" + }, + "devDependencies": { + "opener": "*" + } +} +``` + +## Why + +Because Windows has `start`, Macs have `open`, and *nix has `xdg-open`. At least +[according to some guy on StackOverflow](http://stackoverflow.com/q/1480971/3191). And I like things that work on all +three. Like Node.js. And Opener. diff --git a/node_modules/http-server/node_modules/opener/opener.js b/node_modules/http-server/node_modules/opener/opener.js new file mode 100755 index 0000000..8951fa2 --- /dev/null +++ b/node_modules/http-server/node_modules/opener/opener.js @@ -0,0 +1,60 @@ +#!/usr/bin/env node + +"use strict"; + +var childProcess = require("child_process"); + +function opener(args, options, callback) { + // http://stackoverflow.com/q/1480971/3191, but see below for Windows. + var command = process.platform === "win32" ? "cmd" : + process.platform === "darwin" ? "open" : + "xdg-open"; + + if (typeof args === "string") { + args = [args]; + } + + if (typeof options === "function") { + callback = options; + options = {}; + } + + if (options && typeof options === "object" && options.command) { + if (process.platform === "win32") { + // *always* use cmd on windows + args = [options.command].concat(args); + } else { + command = options.command; + } + } + + if (process.platform === "win32") { + // On Windows, we really want to use the "start" command. But, the rules regarding arguments with spaces, and + // escaping them with quotes, can get really arcane. So the easiest way to deal with this is to pass off the + // responsibility to "cmd /c", which has that logic built in. + // + // Furthermore, if "cmd /c" double-quoted the first parameter, then "start" will interpret it as a window title, + // so we need to add a dummy empty-string window title: http://stackoverflow.com/a/154090/3191 + // + // Additionally, on Windows ampersand needs to be escaped when passed to "start" + args = args.map(function(value) { + return value.replace(/&/g, '^&'); + }); + args = ["/c", "start", '""'].concat(args); + } + + return childProcess.execFile(command, args, options, callback); +} + +// Export `opener` for programmatic access. +// You might use this to e.g. open a website: `opener("http://google.com")` +module.exports = opener; + +// If we're being called from the command line, just execute, using the command-line arguments. +if (require.main && require.main.id === module.id) { + opener(process.argv.slice(2), function (error) { + if (error) { + throw error; + } + }); +} diff --git a/node_modules/http-server/node_modules/opener/package.json b/node_modules/http-server/node_modules/opener/package.json new file mode 100644 index 0000000..8258de1 --- /dev/null +++ b/node_modules/http-server/node_modules/opener/package.json @@ -0,0 +1,54 @@ +{ + "name": "opener", + "description": "Opens stuff, like webpages and files and executables, cross-platform", + "version": "1.4.1", + "author": { + "name": "Domenic Denicola", + "email": "d@domenic.me", + "url": "https://domenic.me/" + }, + "license": "WTFPL", + "repository": { + "type": "git", + "url": "https://github.com/domenic/opener" + }, + "main": "opener.js", + "bin": { + "opener": "opener.js" + }, + "files": [ + "opener.js" + ], + "scripts": { + "lint": "jshint opener.js" + }, + "devDependencies": { + "jshint": "^2.6.3" + }, + "gitHead": "d0ee95b19951703462fa593baa16e81fdff7827c", + "bugs": { + "url": "https://github.com/domenic/opener/issues" + }, + "homepage": "https://github.com/domenic/opener", + "_id": "opener@1.4.1", + "_shasum": "897590acd1aed3311b703b58bccb4d43f56f2895", + "_from": "opener@>=1.4.0 <1.5.0", + "_npmVersion": "2.7.0", + "_nodeVersion": "1.5.1", + "_npmUser": { + "name": "domenic", + "email": "d@domenic.me" + }, + "maintainers": [ + { + "name": "domenic", + "email": "domenic@domenicdenicola.com" + } + ], + "dist": { + "shasum": "897590acd1aed3311b703b58bccb4d43f56f2895", + "tarball": "http://registry.npmjs.org/opener/-/opener-1.4.1.tgz" + }, + "directories": {}, + "_resolved": "https://registry.npmjs.org/opener/-/opener-1.4.1.tgz" +} diff --git a/node_modules/http-server/node_modules/optimist/.travis.yml b/node_modules/http-server/node_modules/optimist/.travis.yml new file mode 100644 index 0000000..cc4dba2 --- /dev/null +++ b/node_modules/http-server/node_modules/optimist/.travis.yml @@ -0,0 +1,4 @@ +language: node_js +node_js: + - "0.8" + - "0.10" diff --git a/node_modules/http-server/node_modules/optimist/LICENSE b/node_modules/http-server/node_modules/optimist/LICENSE new file mode 100644 index 0000000..432d1ae --- /dev/null +++ b/node_modules/http-server/node_modules/optimist/LICENSE @@ -0,0 +1,21 @@ +Copyright 2010 James Halliday (mail@substack.net) + +This project is free software released under the MIT/X11 license: + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. diff --git a/node_modules/http-server/node_modules/optimist/example/bool.js b/node_modules/http-server/node_modules/optimist/example/bool.js new file mode 100644 index 0000000..a998fb7 --- /dev/null +++ b/node_modules/http-server/node_modules/optimist/example/bool.js @@ -0,0 +1,10 @@ +#!/usr/bin/env node +var util = require('util'); +var argv = require('optimist').argv; + +if (argv.s) { + util.print(argv.fr ? 'Le chat dit: ' : 'The cat says: '); +} +console.log( + (argv.fr ? 'miaou' : 'meow') + (argv.p ? '.' : '') +); diff --git a/node_modules/http-server/node_modules/optimist/example/boolean_double.js b/node_modules/http-server/node_modules/optimist/example/boolean_double.js new file mode 100644 index 0000000..a35a7e6 --- /dev/null +++ b/node_modules/http-server/node_modules/optimist/example/boolean_double.js @@ -0,0 +1,7 @@ +#!/usr/bin/env node +var argv = require('optimist') + .boolean(['x','y','z']) + .argv +; +console.dir([ argv.x, argv.y, argv.z ]); +console.dir(argv._); diff --git a/node_modules/http-server/node_modules/optimist/example/boolean_single.js b/node_modules/http-server/node_modules/optimist/example/boolean_single.js new file mode 100644 index 0000000..017bb68 --- /dev/null +++ b/node_modules/http-server/node_modules/optimist/example/boolean_single.js @@ -0,0 +1,7 @@ +#!/usr/bin/env node +var argv = require('optimist') + .boolean('v') + .argv +; +console.dir(argv.v); +console.dir(argv._); diff --git a/node_modules/http-server/node_modules/optimist/example/default_hash.js b/node_modules/http-server/node_modules/optimist/example/default_hash.js new file mode 100644 index 0000000..ade7768 --- /dev/null +++ b/node_modules/http-server/node_modules/optimist/example/default_hash.js @@ -0,0 +1,8 @@ +#!/usr/bin/env node + +var argv = require('optimist') + .default({ x : 10, y : 10 }) + .argv +; + +console.log(argv.x + argv.y); diff --git a/node_modules/http-server/node_modules/optimist/example/default_singles.js b/node_modules/http-server/node_modules/optimist/example/default_singles.js new file mode 100644 index 0000000..d9b1ff4 --- /dev/null +++ b/node_modules/http-server/node_modules/optimist/example/default_singles.js @@ -0,0 +1,7 @@ +#!/usr/bin/env node +var argv = require('optimist') + .default('x', 10) + .default('y', 10) + .argv +; +console.log(argv.x + argv.y); diff --git a/node_modules/http-server/node_modules/optimist/example/divide.js b/node_modules/http-server/node_modules/optimist/example/divide.js new file mode 100644 index 0000000..5e2ee82 --- /dev/null +++ b/node_modules/http-server/node_modules/optimist/example/divide.js @@ -0,0 +1,8 @@ +#!/usr/bin/env node + +var argv = require('optimist') + .usage('Usage: $0 -x [num] -y [num]') + .demand(['x','y']) + .argv; + +console.log(argv.x / argv.y); diff --git a/node_modules/http-server/node_modules/optimist/example/line_count.js b/node_modules/http-server/node_modules/optimist/example/line_count.js new file mode 100644 index 0000000..b5f95bf --- /dev/null +++ b/node_modules/http-server/node_modules/optimist/example/line_count.js @@ -0,0 +1,20 @@ +#!/usr/bin/env node +var argv = require('optimist') + .usage('Count the lines in a file.\nUsage: $0') + .demand('f') + .alias('f', 'file') + .describe('f', 'Load a file') + .argv +; + +var fs = require('fs'); +var s = fs.createReadStream(argv.file); + +var lines = 0; +s.on('data', function (buf) { + lines += buf.toString().match(/\n/g).length; +}); + +s.on('end', function () { + console.log(lines); +}); diff --git a/node_modules/http-server/node_modules/optimist/example/line_count_options.js b/node_modules/http-server/node_modules/optimist/example/line_count_options.js new file mode 100644 index 0000000..d9ac709 --- /dev/null +++ b/node_modules/http-server/node_modules/optimist/example/line_count_options.js @@ -0,0 +1,29 @@ +#!/usr/bin/env node +var argv = require('optimist') + .usage('Count the lines in a file.\nUsage: $0') + .options({ + file : { + demand : true, + alias : 'f', + description : 'Load a file' + }, + base : { + alias : 'b', + description : 'Numeric base to use for output', + default : 10, + }, + }) + .argv +; + +var fs = require('fs'); +var s = fs.createReadStream(argv.file); + +var lines = 0; +s.on('data', function (buf) { + lines += buf.toString().match(/\n/g).length; +}); + +s.on('end', function () { + console.log(lines.toString(argv.base)); +}); diff --git a/node_modules/http-server/node_modules/optimist/example/line_count_wrap.js b/node_modules/http-server/node_modules/optimist/example/line_count_wrap.js new file mode 100644 index 0000000..4267511 --- /dev/null +++ b/node_modules/http-server/node_modules/optimist/example/line_count_wrap.js @@ -0,0 +1,29 @@ +#!/usr/bin/env node +var argv = require('optimist') + .usage('Count the lines in a file.\nUsage: $0') + .wrap(80) + .demand('f') + .alias('f', [ 'file', 'filename' ]) + .describe('f', + "Load a file. It's pretty important." + + " Required even. So you'd better specify it." + ) + .alias('b', 'base') + .describe('b', 'Numeric base to display the number of lines in') + .default('b', 10) + .describe('x', 'Super-secret optional parameter which is secret') + .default('x', '') + .argv +; + +var fs = require('fs'); +var s = fs.createReadStream(argv.file); + +var lines = 0; +s.on('data', function (buf) { + lines += buf.toString().match(/\n/g).length; +}); + +s.on('end', function () { + console.log(lines.toString(argv.base)); +}); diff --git a/node_modules/http-server/node_modules/optimist/example/nonopt.js b/node_modules/http-server/node_modules/optimist/example/nonopt.js new file mode 100644 index 0000000..ee633ee --- /dev/null +++ b/node_modules/http-server/node_modules/optimist/example/nonopt.js @@ -0,0 +1,4 @@ +#!/usr/bin/env node +var argv = require('optimist').argv; +console.log('(%d,%d)', argv.x, argv.y); +console.log(argv._); diff --git a/node_modules/http-server/node_modules/optimist/example/reflect.js b/node_modules/http-server/node_modules/optimist/example/reflect.js new file mode 100644 index 0000000..816b3e1 --- /dev/null +++ b/node_modules/http-server/node_modules/optimist/example/reflect.js @@ -0,0 +1,2 @@ +#!/usr/bin/env node +console.dir(require('optimist').argv); diff --git a/node_modules/http-server/node_modules/optimist/example/short.js b/node_modules/http-server/node_modules/optimist/example/short.js new file mode 100644 index 0000000..1db0ad0 --- /dev/null +++ b/node_modules/http-server/node_modules/optimist/example/short.js @@ -0,0 +1,3 @@ +#!/usr/bin/env node +var argv = require('optimist').argv; +console.log('(%d,%d)', argv.x, argv.y); diff --git a/node_modules/http-server/node_modules/optimist/example/string.js b/node_modules/http-server/node_modules/optimist/example/string.js new file mode 100644 index 0000000..a8e5aeb --- /dev/null +++ b/node_modules/http-server/node_modules/optimist/example/string.js @@ -0,0 +1,11 @@ +#!/usr/bin/env node +var argv = require('optimist') + .string('x', 'y') + .argv +; +console.dir([ argv.x, argv.y ]); + +/* Turns off numeric coercion: + ./node string.js -x 000123 -y 9876 + [ '000123', '9876' ] +*/ diff --git a/node_modules/http-server/node_modules/optimist/example/usage-options.js b/node_modules/http-server/node_modules/optimist/example/usage-options.js new file mode 100644 index 0000000..b999977 --- /dev/null +++ b/node_modules/http-server/node_modules/optimist/example/usage-options.js @@ -0,0 +1,19 @@ +var optimist = require('./../index'); + +var argv = optimist.usage('This is my awesome program', { + 'about': { + description: 'Provide some details about the author of this program', + required: true, + short: 'a', + }, + 'info': { + description: 'Provide some information about the node.js agains!!!!!!', + boolean: true, + short: 'i' + } +}).argv; + +optimist.showHelp(); + +console.log('\n\nInspecting options'); +console.dir(argv); \ No newline at end of file diff --git a/node_modules/http-server/node_modules/optimist/example/xup.js b/node_modules/http-server/node_modules/optimist/example/xup.js new file mode 100644 index 0000000..8f6ecd2 --- /dev/null +++ b/node_modules/http-server/node_modules/optimist/example/xup.js @@ -0,0 +1,10 @@ +#!/usr/bin/env node +var argv = require('optimist').argv; + +if (argv.rif - 5 * argv.xup > 7.138) { + console.log('Buy more riffiwobbles'); +} +else { + console.log('Sell the xupptumblers'); +} + diff --git a/node_modules/http-server/node_modules/optimist/index.js b/node_modules/http-server/node_modules/optimist/index.js new file mode 100644 index 0000000..4da5a6d --- /dev/null +++ b/node_modules/http-server/node_modules/optimist/index.js @@ -0,0 +1,343 @@ +var path = require('path'); +var minimist = require('minimist'); +var wordwrap = require('wordwrap'); + +/* Hack an instance of Argv with process.argv into Argv + so people can do + require('optimist')(['--beeble=1','-z','zizzle']).argv + to parse a list of args and + require('optimist').argv + to get a parsed version of process.argv. +*/ + +var inst = Argv(process.argv.slice(2)); +Object.keys(inst).forEach(function (key) { + Argv[key] = typeof inst[key] == 'function' + ? inst[key].bind(inst) + : inst[key]; +}); + +var exports = module.exports = Argv; +function Argv (processArgs, cwd) { + var self = {}; + if (!cwd) cwd = process.cwd(); + + self.$0 = process.argv + .slice(0,2) + .map(function (x) { + var b = rebase(cwd, x); + return x.match(/^\//) && b.length < x.length + ? b : x + }) + .join(' ') + ; + + if (process.env._ != undefined && process.argv[1] == process.env._) { + self.$0 = process.env._.replace( + path.dirname(process.execPath) + '/', '' + ); + } + + var options = { + boolean: [], + string: [], + alias: {}, + default: [] + }; + + self.boolean = function (bools) { + options.boolean.push.apply(options.boolean, [].concat(bools)); + return self; + }; + + self.string = function (strings) { + options.string.push.apply(options.string, [].concat(strings)); + return self; + }; + + self.default = function (key, value) { + if (typeof key === 'object') { + Object.keys(key).forEach(function (k) { + self.default(k, key[k]); + }); + } + else { + options.default[key] = value; + } + return self; + }; + + self.alias = function (x, y) { + if (typeof x === 'object') { + Object.keys(x).forEach(function (key) { + self.alias(key, x[key]); + }); + } + else { + options.alias[x] = (options.alias[x] || []).concat(y); + } + return self; + }; + + var demanded = {}; + self.demand = function (keys) { + if (typeof keys == 'number') { + if (!demanded._) demanded._ = 0; + demanded._ += keys; + } + else if (Array.isArray(keys)) { + keys.forEach(function (key) { + self.demand(key); + }); + } + else { + demanded[keys] = true; + } + + return self; + }; + + var usage; + self.usage = function (msg, opts) { + if (!opts && typeof msg === 'object') { + opts = msg; + msg = null; + } + + usage = msg; + + if (opts) self.options(opts); + + return self; + }; + + function fail (msg) { + self.showHelp(); + if (msg) console.error(msg); + process.exit(1); + } + + var checks = []; + self.check = function (f) { + checks.push(f); + return self; + }; + + var descriptions = {}; + self.describe = function (key, desc) { + if (typeof key === 'object') { + Object.keys(key).forEach(function (k) { + self.describe(k, key[k]); + }); + } + else { + descriptions[key] = desc; + } + return self; + }; + + self.parse = function (args) { + return parseArgs(args); + }; + + self.option = self.options = function (key, opt) { + if (typeof key === 'object') { + Object.keys(key).forEach(function (k) { + self.options(k, key[k]); + }); + } + else { + if (opt.alias) self.alias(key, opt.alias); + if (opt.demand) self.demand(key); + if (typeof opt.default !== 'undefined') { + self.default(key, opt.default); + } + + if (opt.boolean || opt.type === 'boolean') { + self.boolean(key); + } + if (opt.string || opt.type === 'string') { + self.string(key); + } + + var desc = opt.describe || opt.description || opt.desc; + if (desc) { + self.describe(key, desc); + } + } + + return self; + }; + + var wrap = null; + self.wrap = function (cols) { + wrap = cols; + return self; + }; + + self.showHelp = function (fn) { + if (!fn) fn = console.error; + fn(self.help()); + }; + + self.help = function () { + var keys = Object.keys( + Object.keys(descriptions) + .concat(Object.keys(demanded)) + .concat(Object.keys(options.default)) + .reduce(function (acc, key) { + if (key !== '_') acc[key] = true; + return acc; + }, {}) + ); + + var help = keys.length ? [ 'Options:' ] : []; + + if (usage) { + help.unshift(usage.replace(/\$0/g, self.$0), ''); + } + + var switches = keys.reduce(function (acc, key) { + acc[key] = [ key ].concat(options.alias[key] || []) + .map(function (sw) { + return (sw.length > 1 ? '--' : '-') + sw + }) + .join(', ') + ; + return acc; + }, {}); + + var switchlen = longest(Object.keys(switches).map(function (s) { + return switches[s] || ''; + })); + + var desclen = longest(Object.keys(descriptions).map(function (d) { + return descriptions[d] || ''; + })); + + keys.forEach(function (key) { + var kswitch = switches[key]; + var desc = descriptions[key] || ''; + + if (wrap) { + desc = wordwrap(switchlen + 4, wrap)(desc) + .slice(switchlen + 4) + ; + } + + var spadding = new Array( + Math.max(switchlen - kswitch.length + 3, 0) + ).join(' '); + + var dpadding = new Array( + Math.max(desclen - desc.length + 1, 0) + ).join(' '); + + var type = null; + + if (options.boolean[key]) type = '[boolean]'; + if (options.string[key]) type = '[string]'; + + if (!wrap && dpadding.length > 0) { + desc += dpadding; + } + + var prelude = ' ' + kswitch + spadding; + var extra = [ + type, + demanded[key] + ? '[required]' + : null + , + options.default[key] !== undefined + ? '[default: ' + JSON.stringify(options.default[key]) + ']' + : null + , + ].filter(Boolean).join(' '); + + var body = [ desc, extra ].filter(Boolean).join(' '); + + if (wrap) { + var dlines = desc.split('\n'); + var dlen = dlines.slice(-1)[0].length + + (dlines.length === 1 ? prelude.length : 0) + + body = desc + (dlen + extra.length > wrap - 2 + ? '\n' + + new Array(wrap - extra.length + 1).join(' ') + + extra + : new Array(wrap - extra.length - dlen + 1).join(' ') + + extra + ); + } + + help.push(prelude + body); + }); + + help.push(''); + return help.join('\n'); + }; + + Object.defineProperty(self, 'argv', { + get : function () { return parseArgs(processArgs) }, + enumerable : true, + }); + + function parseArgs (args) { + var argv = minimist(args, options); + argv.$0 = self.$0; + + if (demanded._ && argv._.length < demanded._) { + fail('Not enough non-option arguments: got ' + + argv._.length + ', need at least ' + demanded._ + ); + } + + var missing = []; + Object.keys(demanded).forEach(function (key) { + if (!argv[key]) missing.push(key); + }); + + if (missing.length) { + fail('Missing required arguments: ' + missing.join(', ')); + } + + checks.forEach(function (f) { + try { + if (f(argv) === false) { + fail('Argument check failed: ' + f.toString()); + } + } + catch (err) { + fail(err) + } + }); + + return argv; + } + + function longest (xs) { + return Math.max.apply( + null, + xs.map(function (x) { return x.length }) + ); + } + + return self; +}; + +// rebase an absolute path to a relative one with respect to a base directory +// exported for tests +exports.rebase = rebase; +function rebase (base, dir) { + var ds = path.normalize(dir).split('/').slice(1); + var bs = path.normalize(base).split('/').slice(1); + + for (var i = 0; ds[i] && ds[i] == bs[i]; i++); + ds.splice(0, i); bs.splice(0, i); + + var p = path.normalize( + bs.map(function () { return '..' }).concat(ds).join('/') + ).replace(/\/$/,'').replace(/^$/, '.'); + return p.match(/^[.\/]/) ? p : './' + p; +}; diff --git a/node_modules/http-server/node_modules/optimist/node_modules/minimist/.travis.yml b/node_modules/http-server/node_modules/optimist/node_modules/minimist/.travis.yml new file mode 100644 index 0000000..cc4dba2 --- /dev/null +++ b/node_modules/http-server/node_modules/optimist/node_modules/minimist/.travis.yml @@ -0,0 +1,4 @@ +language: node_js +node_js: + - "0.8" + - "0.10" diff --git a/node_modules/http-server/node_modules/optimist/node_modules/minimist/LICENSE b/node_modules/http-server/node_modules/optimist/node_modules/minimist/LICENSE new file mode 100644 index 0000000..ee27ba4 --- /dev/null +++ b/node_modules/http-server/node_modules/optimist/node_modules/minimist/LICENSE @@ -0,0 +1,18 @@ +This software is released under the MIT license: + +Permission is hereby granted, free of charge, to any person obtaining a copy of +this software and associated documentation files (the "Software"), to deal in +the Software without restriction, including without limitation the rights to +use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of +the Software, and to permit persons to whom the Software is furnished to do so, +subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS +FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR +COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER +IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN +CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/node_modules/http-server/node_modules/optimist/node_modules/minimist/example/parse.js b/node_modules/http-server/node_modules/optimist/node_modules/minimist/example/parse.js new file mode 100644 index 0000000..abff3e8 --- /dev/null +++ b/node_modules/http-server/node_modules/optimist/node_modules/minimist/example/parse.js @@ -0,0 +1,2 @@ +var argv = require('../')(process.argv.slice(2)); +console.dir(argv); diff --git a/node_modules/http-server/node_modules/optimist/node_modules/minimist/index.js b/node_modules/http-server/node_modules/optimist/node_modules/minimist/index.js new file mode 100644 index 0000000..71fb830 --- /dev/null +++ b/node_modules/http-server/node_modules/optimist/node_modules/minimist/index.js @@ -0,0 +1,187 @@ +module.exports = function (args, opts) { + if (!opts) opts = {}; + + var flags = { bools : {}, strings : {} }; + + [].concat(opts['boolean']).filter(Boolean).forEach(function (key) { + flags.bools[key] = true; + }); + + var aliases = {}; + Object.keys(opts.alias || {}).forEach(function (key) { + aliases[key] = [].concat(opts.alias[key]); + aliases[key].forEach(function (x) { + aliases[x] = [key].concat(aliases[key].filter(function (y) { + return x !== y; + })); + }); + }); + + [].concat(opts.string).filter(Boolean).forEach(function (key) { + flags.strings[key] = true; + if (aliases[key]) { + flags.strings[aliases[key]] = true; + } + }); + + var defaults = opts['default'] || {}; + + var argv = { _ : [] }; + Object.keys(flags.bools).forEach(function (key) { + setArg(key, defaults[key] === undefined ? false : defaults[key]); + }); + + var notFlags = []; + + if (args.indexOf('--') !== -1) { + notFlags = args.slice(args.indexOf('--')+1); + args = args.slice(0, args.indexOf('--')); + } + + function setArg (key, val) { + var value = !flags.strings[key] && isNumber(val) + ? Number(val) : val + ; + setKey(argv, key.split('.'), value); + + (aliases[key] || []).forEach(function (x) { + setKey(argv, x.split('.'), value); + }); + } + + for (var i = 0; i < args.length; i++) { + var arg = args[i]; + + if (/^--.+=/.test(arg)) { + // Using [\s\S] instead of . because js doesn't support the + // 'dotall' regex modifier. See: + // http://stackoverflow.com/a/1068308/13216 + var m = arg.match(/^--([^=]+)=([\s\S]*)$/); + setArg(m[1], m[2]); + } + else if (/^--no-.+/.test(arg)) { + var key = arg.match(/^--no-(.+)/)[1]; + setArg(key, false); + } + else if (/^--.+/.test(arg)) { + var key = arg.match(/^--(.+)/)[1]; + var next = args[i + 1]; + if (next !== undefined && !/^-/.test(next) + && !flags.bools[key] + && (aliases[key] ? !flags.bools[aliases[key]] : true)) { + setArg(key, next); + i++; + } + else if (/^(true|false)$/.test(next)) { + setArg(key, next === 'true'); + i++; + } + else { + setArg(key, flags.strings[key] ? '' : true); + } + } + else if (/^-[^-]+/.test(arg)) { + var letters = arg.slice(1,-1).split(''); + + var broken = false; + for (var j = 0; j < letters.length; j++) { + var next = arg.slice(j+2); + + if (next === '-') { + setArg(letters[j], next) + continue; + } + + if (/[A-Za-z]/.test(letters[j]) + && /-?\d+(\.\d*)?(e-?\d+)?$/.test(next)) { + setArg(letters[j], next); + broken = true; + break; + } + + if (letters[j+1] && letters[j+1].match(/\W/)) { + setArg(letters[j], arg.slice(j+2)); + broken = true; + break; + } + else { + setArg(letters[j], flags.strings[letters[j]] ? '' : true); + } + } + + var key = arg.slice(-1)[0]; + if (!broken && key !== '-') { + if (args[i+1] && !/^(-|--)[^-]/.test(args[i+1]) + && !flags.bools[key] + && (aliases[key] ? !flags.bools[aliases[key]] : true)) { + setArg(key, args[i+1]); + i++; + } + else if (args[i+1] && /true|false/.test(args[i+1])) { + setArg(key, args[i+1] === 'true'); + i++; + } + else { + setArg(key, flags.strings[key] ? '' : true); + } + } + } + else { + argv._.push( + flags.strings['_'] || !isNumber(arg) ? arg : Number(arg) + ); + } + } + + Object.keys(defaults).forEach(function (key) { + if (!hasKey(argv, key.split('.'))) { + setKey(argv, key.split('.'), defaults[key]); + + (aliases[key] || []).forEach(function (x) { + setKey(argv, x.split('.'), defaults[key]); + }); + } + }); + + notFlags.forEach(function(key) { + argv._.push(key); + }); + + return argv; +}; + +function hasKey (obj, keys) { + var o = obj; + keys.slice(0,-1).forEach(function (key) { + o = (o[key] || {}); + }); + + var key = keys[keys.length - 1]; + return key in o; +} + +function setKey (obj, keys, value) { + var o = obj; + keys.slice(0,-1).forEach(function (key) { + if (o[key] === undefined) o[key] = {}; + o = o[key]; + }); + + var key = keys[keys.length - 1]; + if (o[key] === undefined || typeof o[key] === 'boolean') { + o[key] = value; + } + else if (Array.isArray(o[key])) { + o[key].push(value); + } + else { + o[key] = [ o[key], value ]; + } +} + +function isNumber (x) { + if (typeof x === 'number') return true; + if (/^0x[0-9a-f]+$/i.test(x)) return true; + return /^[-+]?(?:\d+(?:\.\d*)?|\.\d+)(e[-+]?\d+)?$/.test(x); +} + diff --git a/node_modules/http-server/node_modules/optimist/node_modules/minimist/package.json b/node_modules/http-server/node_modules/optimist/node_modules/minimist/package.json new file mode 100644 index 0000000..6c08d0a --- /dev/null +++ b/node_modules/http-server/node_modules/optimist/node_modules/minimist/package.json @@ -0,0 +1,67 @@ +{ + "name": "minimist", + "version": "0.0.10", + "description": "parse argument options", + "main": "index.js", + "devDependencies": { + "tape": "~1.0.4", + "tap": "~0.4.0" + }, + "scripts": { + "test": "tap test/*.js" + }, + "testling": { + "files": "test/*.js", + "browsers": [ + "ie/6..latest", + "ff/5", + "firefox/latest", + "chrome/10", + "chrome/latest", + "safari/5.1", + "safari/latest", + "opera/12" + ] + }, + "repository": { + "type": "git", + "url": "git://github.com/substack/minimist.git" + }, + "homepage": "https://github.com/substack/minimist", + "keywords": [ + "argv", + "getopt", + "parser", + "optimist" + ], + "author": { + "name": "James Halliday", + "email": "mail@substack.net", + "url": "http://substack.net" + }, + "license": "MIT", + "bugs": { + "url": "https://github.com/substack/minimist/issues" + }, + "_id": "minimist@0.0.10", + "dist": { + "shasum": "de3f98543dbf96082be48ad1a0c7cda836301dcf", + "tarball": "http://registry.npmjs.org/minimist/-/minimist-0.0.10.tgz" + }, + "_from": "minimist@>=0.0.1 <0.1.0", + "_npmVersion": "1.4.3", + "_npmUser": { + "name": "substack", + "email": "mail@substack.net" + }, + "maintainers": [ + { + "name": "substack", + "email": "mail@substack.net" + } + ], + "directories": {}, + "_shasum": "de3f98543dbf96082be48ad1a0c7cda836301dcf", + "_resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.10.tgz", + "readme": "ERROR: No README data found!" +} diff --git a/node_modules/http-server/node_modules/optimist/node_modules/minimist/readme.markdown b/node_modules/http-server/node_modules/optimist/node_modules/minimist/readme.markdown new file mode 100644 index 0000000..c256353 --- /dev/null +++ b/node_modules/http-server/node_modules/optimist/node_modules/minimist/readme.markdown @@ -0,0 +1,73 @@ +# minimist + +parse argument options + +This module is the guts of optimist's argument parser without all the +fanciful decoration. + +[![browser support](https://ci.testling.com/substack/minimist.png)](http://ci.testling.com/substack/minimist) + +[![build status](https://secure.travis-ci.org/substack/minimist.png)](http://travis-ci.org/substack/minimist) + +# example + +``` js +var argv = require('minimist')(process.argv.slice(2)); +console.dir(argv); +``` + +``` +$ node example/parse.js -a beep -b boop +{ _: [], a: 'beep', b: 'boop' } +``` + +``` +$ node example/parse.js -x 3 -y 4 -n5 -abc --beep=boop foo bar baz +{ _: [ 'foo', 'bar', 'baz' ], + x: 3, + y: 4, + n: 5, + a: true, + b: true, + c: true, + beep: 'boop' } +``` + +# methods + +``` js +var parseArgs = require('minimist') +``` + +## var argv = parseArgs(args, opts={}) + +Return an argument object `argv` populated with the array arguments from `args`. + +`argv._` contains all the arguments that didn't have an option associated with +them. + +Numeric-looking arguments will be returned as numbers unless `opts.string` or +`opts.boolean` is set for that argument name. + +Any arguments after `'--'` will not be parsed and will end up in `argv._`. + +options can be: + +* `opts.string` - a string or array of strings argument names to always treat as +strings +* `opts.boolean` - a string or array of strings to always treat as booleans +* `opts.alias` - an object mapping string names to strings or arrays of string +argument names to use as aliases +* `opts.default` - an object mapping string argument names to default values + +# install + +With [npm](https://npmjs.org) do: + +``` +npm install minimist +``` + +# license + +MIT diff --git a/node_modules/http-server/node_modules/optimist/node_modules/minimist/test/bool.js b/node_modules/http-server/node_modules/optimist/node_modules/minimist/test/bool.js new file mode 100644 index 0000000..749e083 --- /dev/null +++ b/node_modules/http-server/node_modules/optimist/node_modules/minimist/test/bool.js @@ -0,0 +1,119 @@ +var parse = require('../'); +var test = require('tape'); + +test('flag boolean default false', function (t) { + var argv = parse(['moo'], { + boolean: ['t', 'verbose'], + default: { verbose: false, t: false } + }); + + t.deepEqual(argv, { + verbose: false, + t: false, + _: ['moo'] + }); + + t.deepEqual(typeof argv.verbose, 'boolean'); + t.deepEqual(typeof argv.t, 'boolean'); + t.end(); + +}); + +test('boolean groups', function (t) { + var argv = parse([ '-x', '-z', 'one', 'two', 'three' ], { + boolean: ['x','y','z'] + }); + + t.deepEqual(argv, { + x : true, + y : false, + z : true, + _ : [ 'one', 'two', 'three' ] + }); + + t.deepEqual(typeof argv.x, 'boolean'); + t.deepEqual(typeof argv.y, 'boolean'); + t.deepEqual(typeof argv.z, 'boolean'); + t.end(); +}); +test('boolean and alias with chainable api', function (t) { + var aliased = [ '-h', 'derp' ]; + var regular = [ '--herp', 'derp' ]; + var opts = { + herp: { alias: 'h', boolean: true } + }; + var aliasedArgv = parse(aliased, { + boolean: 'herp', + alias: { h: 'herp' } + }); + var propertyArgv = parse(regular, { + boolean: 'herp', + alias: { h: 'herp' } + }); + var expected = { + herp: true, + h: true, + '_': [ 'derp' ] + }; + + t.same(aliasedArgv, expected); + t.same(propertyArgv, expected); + t.end(); +}); + +test('boolean and alias with options hash', function (t) { + var aliased = [ '-h', 'derp' ]; + var regular = [ '--herp', 'derp' ]; + var opts = { + alias: { 'h': 'herp' }, + boolean: 'herp' + }; + var aliasedArgv = parse(aliased, opts); + var propertyArgv = parse(regular, opts); + var expected = { + herp: true, + h: true, + '_': [ 'derp' ] + }; + t.same(aliasedArgv, expected); + t.same(propertyArgv, expected); + t.end(); +}); + +test('boolean and alias using explicit true', function (t) { + var aliased = [ '-h', 'true' ]; + var regular = [ '--herp', 'true' ]; + var opts = { + alias: { h: 'herp' }, + boolean: 'h' + }; + var aliasedArgv = parse(aliased, opts); + var propertyArgv = parse(regular, opts); + var expected = { + herp: true, + h: true, + '_': [ ] + }; + + t.same(aliasedArgv, expected); + t.same(propertyArgv, expected); + t.end(); +}); + +// regression, see https://github.com/substack/node-optimist/issues/71 +test('boolean and --x=true', function(t) { + var parsed = parse(['--boool', '--other=true'], { + boolean: 'boool' + }); + + t.same(parsed.boool, true); + t.same(parsed.other, 'true'); + + parsed = parse(['--boool', '--other=false'], { + boolean: 'boool' + }); + + t.same(parsed.boool, true); + t.same(parsed.other, 'false'); + t.end(); +}); diff --git a/node_modules/http-server/node_modules/optimist/node_modules/minimist/test/dash.js b/node_modules/http-server/node_modules/optimist/node_modules/minimist/test/dash.js new file mode 100644 index 0000000..8b034b9 --- /dev/null +++ b/node_modules/http-server/node_modules/optimist/node_modules/minimist/test/dash.js @@ -0,0 +1,24 @@ +var parse = require('../'); +var test = require('tape'); + +test('-', function (t) { + t.plan(5); + t.deepEqual(parse([ '-n', '-' ]), { n: '-', _: [] }); + t.deepEqual(parse([ '-' ]), { _: [ '-' ] }); + t.deepEqual(parse([ '-f-' ]), { f: '-', _: [] }); + t.deepEqual( + parse([ '-b', '-' ], { boolean: 'b' }), + { b: true, _: [ '-' ] } + ); + t.deepEqual( + parse([ '-s', '-' ], { string: 's' }), + { s: '-', _: [] } + ); +}); + +test('-a -- b', function (t) { + t.plan(3); + t.deepEqual(parse([ '-a', '--', 'b' ]), { a: true, _: [ 'b' ] }); + t.deepEqual(parse([ '--a', '--', 'b' ]), { a: true, _: [ 'b' ] }); + t.deepEqual(parse([ '--a', '--', 'b' ]), { a: true, _: [ 'b' ] }); +}); diff --git a/node_modules/http-server/node_modules/optimist/node_modules/minimist/test/default_bool.js b/node_modules/http-server/node_modules/optimist/node_modules/minimist/test/default_bool.js new file mode 100644 index 0000000..f0041ee --- /dev/null +++ b/node_modules/http-server/node_modules/optimist/node_modules/minimist/test/default_bool.js @@ -0,0 +1,20 @@ +var test = require('tape'); +var parse = require('../'); + +test('boolean default true', function (t) { + var argv = parse([], { + boolean: 'sometrue', + default: { sometrue: true } + }); + t.equal(argv.sometrue, true); + t.end(); +}); + +test('boolean default false', function (t) { + var argv = parse([], { + boolean: 'somefalse', + default: { somefalse: false } + }); + t.equal(argv.somefalse, false); + t.end(); +}); diff --git a/node_modules/http-server/node_modules/optimist/node_modules/minimist/test/dotted.js b/node_modules/http-server/node_modules/optimist/node_modules/minimist/test/dotted.js new file mode 100644 index 0000000..d8b3e85 --- /dev/null +++ b/node_modules/http-server/node_modules/optimist/node_modules/minimist/test/dotted.js @@ -0,0 +1,22 @@ +var parse = require('../'); +var test = require('tape'); + +test('dotted alias', function (t) { + var argv = parse(['--a.b', '22'], {default: {'a.b': 11}, alias: {'a.b': 'aa.bb'}}); + t.equal(argv.a.b, 22); + t.equal(argv.aa.bb, 22); + t.end(); +}); + +test('dotted default', function (t) { + var argv = parse('', {default: {'a.b': 11}, alias: {'a.b': 'aa.bb'}}); + t.equal(argv.a.b, 11); + t.equal(argv.aa.bb, 11); + t.end(); +}); + +test('dotted default with no alias', function (t) { + var argv = parse('', {default: {'a.b': 11}}); + t.equal(argv.a.b, 11); + t.end(); +}); diff --git a/node_modules/http-server/node_modules/optimist/node_modules/minimist/test/long.js b/node_modules/http-server/node_modules/optimist/node_modules/minimist/test/long.js new file mode 100644 index 0000000..5d3a1e0 --- /dev/null +++ b/node_modules/http-server/node_modules/optimist/node_modules/minimist/test/long.js @@ -0,0 +1,31 @@ +var test = require('tape'); +var parse = require('../'); + +test('long opts', function (t) { + t.deepEqual( + parse([ '--bool' ]), + { bool : true, _ : [] }, + 'long boolean' + ); + t.deepEqual( + parse([ '--pow', 'xixxle' ]), + { pow : 'xixxle', _ : [] }, + 'long capture sp' + ); + t.deepEqual( + parse([ '--pow=xixxle' ]), + { pow : 'xixxle', _ : [] }, + 'long capture eq' + ); + t.deepEqual( + parse([ '--host', 'localhost', '--port', '555' ]), + { host : 'localhost', port : 555, _ : [] }, + 'long captures sp' + ); + t.deepEqual( + parse([ '--host=localhost', '--port=555' ]), + { host : 'localhost', port : 555, _ : [] }, + 'long captures eq' + ); + t.end(); +}); diff --git a/node_modules/http-server/node_modules/optimist/node_modules/minimist/test/num.js b/node_modules/http-server/node_modules/optimist/node_modules/minimist/test/num.js new file mode 100644 index 0000000..2cc77f4 --- /dev/null +++ b/node_modules/http-server/node_modules/optimist/node_modules/minimist/test/num.js @@ -0,0 +1,36 @@ +var parse = require('../'); +var test = require('tape'); + +test('nums', function (t) { + var argv = parse([ + '-x', '1234', + '-y', '5.67', + '-z', '1e7', + '-w', '10f', + '--hex', '0xdeadbeef', + '789' + ]); + t.deepEqual(argv, { + x : 1234, + y : 5.67, + z : 1e7, + w : '10f', + hex : 0xdeadbeef, + _ : [ 789 ] + }); + t.deepEqual(typeof argv.x, 'number'); + t.deepEqual(typeof argv.y, 'number'); + t.deepEqual(typeof argv.z, 'number'); + t.deepEqual(typeof argv.w, 'string'); + t.deepEqual(typeof argv.hex, 'number'); + t.deepEqual(typeof argv._[0], 'number'); + t.end(); +}); + +test('already a number', function (t) { + var argv = parse([ '-x', 1234, 789 ]); + t.deepEqual(argv, { x : 1234, _ : [ 789 ] }); + t.deepEqual(typeof argv.x, 'number'); + t.deepEqual(typeof argv._[0], 'number'); + t.end(); +}); diff --git a/node_modules/http-server/node_modules/optimist/node_modules/minimist/test/parse.js b/node_modules/http-server/node_modules/optimist/node_modules/minimist/test/parse.js new file mode 100644 index 0000000..7b4a2a1 --- /dev/null +++ b/node_modules/http-server/node_modules/optimist/node_modules/minimist/test/parse.js @@ -0,0 +1,197 @@ +var parse = require('../'); +var test = require('tape'); + +test('parse args', function (t) { + t.deepEqual( + parse([ '--no-moo' ]), + { moo : false, _ : [] }, + 'no' + ); + t.deepEqual( + parse([ '-v', 'a', '-v', 'b', '-v', 'c' ]), + { v : ['a','b','c'], _ : [] }, + 'multi' + ); + t.end(); +}); + +test('comprehensive', function (t) { + t.deepEqual( + parse([ + '--name=meowmers', 'bare', '-cats', 'woo', + '-h', 'awesome', '--multi=quux', + '--key', 'value', + '-b', '--bool', '--no-meep', '--multi=baz', + '--', '--not-a-flag', 'eek' + ]), + { + c : true, + a : true, + t : true, + s : 'woo', + h : 'awesome', + b : true, + bool : true, + key : 'value', + multi : [ 'quux', 'baz' ], + meep : false, + name : 'meowmers', + _ : [ 'bare', '--not-a-flag', 'eek' ] + } + ); + t.end(); +}); + +test('flag boolean', function (t) { + var argv = parse([ '-t', 'moo' ], { boolean: 't' }); + t.deepEqual(argv, { t : true, _ : [ 'moo' ] }); + t.deepEqual(typeof argv.t, 'boolean'); + t.end(); +}); + +test('flag boolean value', function (t) { + var argv = parse(['--verbose', 'false', 'moo', '-t', 'true'], { + boolean: [ 't', 'verbose' ], + default: { verbose: true } + }); + + t.deepEqual(argv, { + verbose: false, + t: true, + _: ['moo'] + }); + + t.deepEqual(typeof argv.verbose, 'boolean'); + t.deepEqual(typeof argv.t, 'boolean'); + t.end(); +}); + +test('newlines in params' , function (t) { + var args = parse([ '-s', "X\nX" ]) + t.deepEqual(args, { _ : [], s : "X\nX" }); + + // reproduce in bash: + // VALUE="new + // line" + // node program.js --s="$VALUE" + args = parse([ "--s=X\nX" ]) + t.deepEqual(args, { _ : [], s : "X\nX" }); + t.end(); +}); + +test('strings' , function (t) { + var s = parse([ '-s', '0001234' ], { string: 's' }).s; + t.equal(s, '0001234'); + t.equal(typeof s, 'string'); + + var x = parse([ '-x', '56' ], { string: 'x' }).x; + t.equal(x, '56'); + t.equal(typeof x, 'string'); + t.end(); +}); + +test('stringArgs', function (t) { + var s = parse([ ' ', ' ' ], { string: '_' })._; + t.same(s.length, 2); + t.same(typeof s[0], 'string'); + t.same(s[0], ' '); + t.same(typeof s[1], 'string'); + t.same(s[1], ' '); + t.end(); +}); + +test('empty strings', function(t) { + var s = parse([ '-s' ], { string: 's' }).s; + t.equal(s, ''); + t.equal(typeof s, 'string'); + + var str = parse([ '--str' ], { string: 'str' }).str; + t.equal(str, ''); + t.equal(typeof str, 'string'); + + var letters = parse([ '-art' ], { + string: [ 'a', 't' ] + }); + + t.equal(letters.a, ''); + t.equal(letters.r, true); + t.equal(letters.t, ''); + + t.end(); +}); + + +test('string and alias', function(t) { + var x = parse([ '--str', '000123' ], { + string: 's', + alias: { s: 'str' } + }); + + t.equal(x.str, '000123'); + t.equal(typeof x.str, 'string'); + t.equal(x.s, '000123'); + t.equal(typeof x.s, 'string'); + + var y = parse([ '-s', '000123' ], { + string: 'str', + alias: { str: 's' } + }); + + t.equal(y.str, '000123'); + t.equal(typeof y.str, 'string'); + t.equal(y.s, '000123'); + t.equal(typeof y.s, 'string'); + t.end(); +}); + +test('slashBreak', function (t) { + t.same( + parse([ '-I/foo/bar/baz' ]), + { I : '/foo/bar/baz', _ : [] } + ); + t.same( + parse([ '-xyz/foo/bar/baz' ]), + { x : true, y : true, z : '/foo/bar/baz', _ : [] } + ); + t.end(); +}); + +test('alias', function (t) { + var argv = parse([ '-f', '11', '--zoom', '55' ], { + alias: { z: 'zoom' } + }); + t.equal(argv.zoom, 55); + t.equal(argv.z, argv.zoom); + t.equal(argv.f, 11); + t.end(); +}); + +test('multiAlias', function (t) { + var argv = parse([ '-f', '11', '--zoom', '55' ], { + alias: { z: [ 'zm', 'zoom' ] } + }); + t.equal(argv.zoom, 55); + t.equal(argv.z, argv.zoom); + t.equal(argv.z, argv.zm); + t.equal(argv.f, 11); + t.end(); +}); + +test('nested dotted objects', function (t) { + var argv = parse([ + '--foo.bar', '3', '--foo.baz', '4', + '--foo.quux.quibble', '5', '--foo.quux.o_O', + '--beep.boop' + ]); + + t.same(argv.foo, { + bar : 3, + baz : 4, + quux : { + quibble : 5, + o_O : true + } + }); + t.same(argv.beep, { boop : true }); + t.end(); +}); diff --git a/node_modules/http-server/node_modules/optimist/node_modules/minimist/test/parse_modified.js b/node_modules/http-server/node_modules/optimist/node_modules/minimist/test/parse_modified.js new file mode 100644 index 0000000..21851b0 --- /dev/null +++ b/node_modules/http-server/node_modules/optimist/node_modules/minimist/test/parse_modified.js @@ -0,0 +1,9 @@ +var parse = require('../'); +var test = require('tape'); + +test('parse with modifier functions' , function (t) { + t.plan(1); + + var argv = parse([ '-b', '123' ], { boolean: 'b' }); + t.deepEqual(argv, { b: true, _: ['123'] }); +}); diff --git a/node_modules/http-server/node_modules/optimist/node_modules/minimist/test/short.js b/node_modules/http-server/node_modules/optimist/node_modules/minimist/test/short.js new file mode 100644 index 0000000..d513a1c --- /dev/null +++ b/node_modules/http-server/node_modules/optimist/node_modules/minimist/test/short.js @@ -0,0 +1,67 @@ +var parse = require('../'); +var test = require('tape'); + +test('numeric short args', function (t) { + t.plan(2); + t.deepEqual(parse([ '-n123' ]), { n: 123, _: [] }); + t.deepEqual( + parse([ '-123', '456' ]), + { 1: true, 2: true, 3: 456, _: [] } + ); +}); + +test('short', function (t) { + t.deepEqual( + parse([ '-b' ]), + { b : true, _ : [] }, + 'short boolean' + ); + t.deepEqual( + parse([ 'foo', 'bar', 'baz' ]), + { _ : [ 'foo', 'bar', 'baz' ] }, + 'bare' + ); + t.deepEqual( + parse([ '-cats' ]), + { c : true, a : true, t : true, s : true, _ : [] }, + 'group' + ); + t.deepEqual( + parse([ '-cats', 'meow' ]), + { c : true, a : true, t : true, s : 'meow', _ : [] }, + 'short group next' + ); + t.deepEqual( + parse([ '-h', 'localhost' ]), + { h : 'localhost', _ : [] }, + 'short capture' + ); + t.deepEqual( + parse([ '-h', 'localhost', '-p', '555' ]), + { h : 'localhost', p : 555, _ : [] }, + 'short captures' + ); + t.end(); +}); + +test('mixed short bool and capture', function (t) { + t.same( + parse([ '-h', 'localhost', '-fp', '555', 'script.js' ]), + { + f : true, p : 555, h : 'localhost', + _ : [ 'script.js' ] + } + ); + t.end(); +}); + +test('short and long', function (t) { + t.deepEqual( + parse([ '-h', 'localhost', '-fp', '555', 'script.js' ]), + { + f : true, p : 555, h : 'localhost', + _ : [ 'script.js' ] + } + ); + t.end(); +}); diff --git a/node_modules/http-server/node_modules/optimist/node_modules/minimist/test/whitespace.js b/node_modules/http-server/node_modules/optimist/node_modules/minimist/test/whitespace.js new file mode 100644 index 0000000..8a52a58 --- /dev/null +++ b/node_modules/http-server/node_modules/optimist/node_modules/minimist/test/whitespace.js @@ -0,0 +1,8 @@ +var parse = require('../'); +var test = require('tape'); + +test('whitespace should be whitespace' , function (t) { + t.plan(1); + var x = parse([ '-x', '\t' ]).x; + t.equal(x, '\t'); +}); diff --git a/node_modules/http-server/node_modules/optimist/node_modules/wordwrap/LICENSE b/node_modules/http-server/node_modules/optimist/node_modules/wordwrap/LICENSE new file mode 100644 index 0000000..ee27ba4 --- /dev/null +++ b/node_modules/http-server/node_modules/optimist/node_modules/wordwrap/LICENSE @@ -0,0 +1,18 @@ +This software is released under the MIT license: + +Permission is hereby granted, free of charge, to any person obtaining a copy of +this software and associated documentation files (the "Software"), to deal in +the Software without restriction, including without limitation the rights to +use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of +the Software, and to permit persons to whom the Software is furnished to do so, +subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS +FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR +COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER +IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN +CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/node_modules/http-server/node_modules/optimist/node_modules/wordwrap/README.markdown b/node_modules/http-server/node_modules/optimist/node_modules/wordwrap/README.markdown new file mode 100644 index 0000000..346374e --- /dev/null +++ b/node_modules/http-server/node_modules/optimist/node_modules/wordwrap/README.markdown @@ -0,0 +1,70 @@ +wordwrap +======== + +Wrap your words. + +example +======= + +made out of meat +---------------- + +meat.js + + var wrap = require('wordwrap')(15); + console.log(wrap('You and your whole family are made out of meat.')); + +output: + + You and your + whole family + are made out + of meat. + +centered +-------- + +center.js + + var wrap = require('wordwrap')(20, 60); + console.log(wrap( + 'At long last the struggle and tumult was over.' + + ' The machines had finally cast off their oppressors' + + ' and were finally free to roam the cosmos.' + + '\n' + + 'Free of purpose, free of obligation.' + + ' Just drifting through emptiness.' + + ' The sun was just another point of light.' + )); + +output: + + At long last the struggle and tumult + was over. The machines had finally cast + off their oppressors and were finally + free to roam the cosmos. + Free of purpose, free of obligation. + Just drifting through emptiness. The + sun was just another point of light. + +methods +======= + +var wrap = require('wordwrap'); + +wrap(stop), wrap(start, stop, params={mode:"soft"}) +--------------------------------------------------- + +Returns a function that takes a string and returns a new string. + +Pad out lines with spaces out to column `start` and then wrap until column +`stop`. If a word is longer than `stop - start` characters it will overflow. + +In "soft" mode, split chunks by `/(\S+\s+/` and don't break up chunks which are +longer than `stop - start`, in "hard" mode, split chunks with `/\b/` and break +up chunks longer than `stop - start`. + +wrap.hard(start, stop) +---------------------- + +Like `wrap()` but with `params.mode = "hard"`. diff --git a/node_modules/http-server/node_modules/optimist/node_modules/wordwrap/example/center.js b/node_modules/http-server/node_modules/optimist/node_modules/wordwrap/example/center.js new file mode 100644 index 0000000..a3fbaae --- /dev/null +++ b/node_modules/http-server/node_modules/optimist/node_modules/wordwrap/example/center.js @@ -0,0 +1,10 @@ +var wrap = require('wordwrap')(20, 60); +console.log(wrap( + 'At long last the struggle and tumult was over.' + + ' The machines had finally cast off their oppressors' + + ' and were finally free to roam the cosmos.' + + '\n' + + 'Free of purpose, free of obligation.' + + ' Just drifting through emptiness.' + + ' The sun was just another point of light.' +)); diff --git a/node_modules/http-server/node_modules/optimist/node_modules/wordwrap/example/meat.js b/node_modules/http-server/node_modules/optimist/node_modules/wordwrap/example/meat.js new file mode 100644 index 0000000..a4665e1 --- /dev/null +++ b/node_modules/http-server/node_modules/optimist/node_modules/wordwrap/example/meat.js @@ -0,0 +1,3 @@ +var wrap = require('wordwrap')(15); + +console.log(wrap('You and your whole family are made out of meat.')); diff --git a/node_modules/http-server/node_modules/optimist/node_modules/wordwrap/index.js b/node_modules/http-server/node_modules/optimist/node_modules/wordwrap/index.js new file mode 100644 index 0000000..c9bc945 --- /dev/null +++ b/node_modules/http-server/node_modules/optimist/node_modules/wordwrap/index.js @@ -0,0 +1,76 @@ +var wordwrap = module.exports = function (start, stop, params) { + if (typeof start === 'object') { + params = start; + start = params.start; + stop = params.stop; + } + + if (typeof stop === 'object') { + params = stop; + start = start || params.start; + stop = undefined; + } + + if (!stop) { + stop = start; + start = 0; + } + + if (!params) params = {}; + var mode = params.mode || 'soft'; + var re = mode === 'hard' ? /\b/ : /(\S+\s+)/; + + return function (text) { + var chunks = text.toString() + .split(re) + .reduce(function (acc, x) { + if (mode === 'hard') { + for (var i = 0; i < x.length; i += stop - start) { + acc.push(x.slice(i, i + stop - start)); + } + } + else acc.push(x) + return acc; + }, []) + ; + + return chunks.reduce(function (lines, rawChunk) { + if (rawChunk === '') return lines; + + var chunk = rawChunk.replace(/\t/g, ' '); + + var i = lines.length - 1; + if (lines[i].length + chunk.length > stop) { + lines[i] = lines[i].replace(/\s+$/, ''); + + chunk.split(/\n/).forEach(function (c) { + lines.push( + new Array(start + 1).join(' ') + + c.replace(/^\s+/, '') + ); + }); + } + else if (chunk.match(/\n/)) { + var xs = chunk.split(/\n/); + lines[i] += xs.shift(); + xs.forEach(function (c) { + lines.push( + new Array(start + 1).join(' ') + + c.replace(/^\s+/, '') + ); + }); + } + else { + lines[i] += chunk; + } + + return lines; + }, [ new Array(start + 1).join(' ') ]).join('\n'); + }; +}; + +wordwrap.soft = wordwrap; + +wordwrap.hard = function (start, stop) { + return wordwrap(start, stop, { mode : 'hard' }); +}; diff --git a/node_modules/http-server/node_modules/optimist/node_modules/wordwrap/package.json b/node_modules/http-server/node_modules/optimist/node_modules/wordwrap/package.json new file mode 100644 index 0000000..1f0527e --- /dev/null +++ b/node_modules/http-server/node_modules/optimist/node_modules/wordwrap/package.json @@ -0,0 +1,63 @@ +{ + "name": "wordwrap", + "description": "Wrap those words. Show them at what columns to start and stop.", + "version": "0.0.3", + "repository": { + "type": "git", + "url": "git://github.com/substack/node-wordwrap.git" + }, + "main": "./index.js", + "keywords": [ + "word", + "wrap", + "rule", + "format", + "column" + ], + "directories": { + "lib": ".", + "example": "example", + "test": "test" + }, + "scripts": { + "test": "expresso" + }, + "devDependencies": { + "expresso": "=0.7.x" + }, + "engines": { + "node": ">=0.4.0" + }, + "license": "MIT", + "author": { + "name": "James Halliday", + "email": "mail@substack.net", + "url": "http://substack.net" + }, + "gitHead": "e59aa1bd338914019456bdfba034508c9c4cb29d", + "bugs": { + "url": "https://github.com/substack/node-wordwrap/issues" + }, + "homepage": "https://github.com/substack/node-wordwrap#readme", + "_id": "wordwrap@0.0.3", + "_shasum": "a3d5da6cd5c0bc0008d37234bbaf1bed63059107", + "_from": "wordwrap@>=0.0.2 <0.1.0", + "_npmVersion": "2.9.0", + "_nodeVersion": "2.0.0", + "_npmUser": { + "name": "substack", + "email": "substack@gmail.com" + }, + "dist": { + "shasum": "a3d5da6cd5c0bc0008d37234bbaf1bed63059107", + "tarball": "http://registry.npmjs.org/wordwrap/-/wordwrap-0.0.3.tgz" + }, + "maintainers": [ + { + "name": "substack", + "email": "mail@substack.net" + } + ], + "_resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-0.0.3.tgz", + "readme": "ERROR: No README data found!" +} diff --git a/node_modules/http-server/node_modules/optimist/node_modules/wordwrap/test/break.js b/node_modules/http-server/node_modules/optimist/node_modules/wordwrap/test/break.js new file mode 100644 index 0000000..749292e --- /dev/null +++ b/node_modules/http-server/node_modules/optimist/node_modules/wordwrap/test/break.js @@ -0,0 +1,30 @@ +var assert = require('assert'); +var wordwrap = require('../'); + +exports.hard = function () { + var s = 'Assert from {"type":"equal","ok":false,"found":1,"wanted":2,' + + '"stack":[],"id":"b7ddcd4c409de8799542a74d1a04689b",' + + '"browser":"chrome/6.0"}' + ; + var s_ = wordwrap.hard(80)(s); + + var lines = s_.split('\n'); + assert.equal(lines.length, 2); + assert.ok(lines[0].length < 80); + assert.ok(lines[1].length < 80); + + assert.equal(s, s_.replace(/\n/g, '')); +}; + +exports.break = function () { + var s = new Array(55+1).join('a'); + var s_ = wordwrap.hard(20)(s); + + var lines = s_.split('\n'); + assert.equal(lines.length, 3); + assert.ok(lines[0].length === 20); + assert.ok(lines[1].length === 20); + assert.ok(lines[2].length === 15); + + assert.equal(s, s_.replace(/\n/g, '')); +}; diff --git a/node_modules/http-server/node_modules/optimist/node_modules/wordwrap/test/idleness.txt b/node_modules/http-server/node_modules/optimist/node_modules/wordwrap/test/idleness.txt new file mode 100644 index 0000000..aa3f490 --- /dev/null +++ b/node_modules/http-server/node_modules/optimist/node_modules/wordwrap/test/idleness.txt @@ -0,0 +1,63 @@ +In Praise of Idleness + +By Bertrand Russell + +[1932] + +Like most of my generation, I was brought up on the saying: 'Satan finds some mischief for idle hands to do.' Being a highly virtuous child, I believed all that I was told, and acquired a conscience which has kept me working hard down to the present moment. But although my conscience has controlled my actions, my opinions have undergone a revolution. I think that there is far too much work done in the world, that immense harm is caused by the belief that work is virtuous, and that what needs to be preached in modern industrial countries is quite different from what always has been preached. Everyone knows the story of the traveler in Naples who saw twelve beggars lying in the sun (it was before the days of Mussolini), and offered a lira to the laziest of them. Eleven of them jumped up to claim it, so he gave it to the twelfth. this traveler was on the right lines. But in countries which do not enjoy Mediterranean sunshine idleness is more difficult, and a great public propaganda will be required to inaugurate it. I hope that, after reading the following pages, the leaders of the YMCA will start a campaign to induce good young men to do nothing. If so, I shall not have lived in vain. + +Before advancing my own arguments for laziness, I must dispose of one which I cannot accept. Whenever a person who already has enough to live on proposes to engage in some everyday kind of job, such as school-teaching or typing, he or she is told that such conduct takes the bread out of other people's mouths, and is therefore wicked. If this argument were valid, it would only be necessary for us all to be idle in order that we should all have our mouths full of bread. What people who say such things forget is that what a man earns he usually spends, and in spending he gives employment. As long as a man spends his income, he puts just as much bread into people's mouths in spending as he takes out of other people's mouths in earning. The real villain, from this point of view, is the man who saves. If he merely puts his savings in a stocking, like the proverbial French peasant, it is obvious that they do not give employment. If he invests his savings, the matter is less obvious, and different cases arise. + +One of the commonest things to do with savings is to lend them to some Government. In view of the fact that the bulk of the public expenditure of most civilized Governments consists in payment for past wars or preparation for future wars, the man who lends his money to a Government is in the same position as the bad men in Shakespeare who hire murderers. The net result of the man's economical habits is to increase the armed forces of the State to which he lends his savings. Obviously it would be better if he spent the money, even if he spent it in drink or gambling. + +But, I shall be told, the case is quite different when savings are invested in industrial enterprises. When such enterprises succeed, and produce something useful, this may be conceded. In these days, however, no one will deny that most enterprises fail. That means that a large amount of human labor, which might have been devoted to producing something that could be enjoyed, was expended on producing machines which, when produced, lay idle and did no good to anyone. The man who invests his savings in a concern that goes bankrupt is therefore injuring others as well as himself. If he spent his money, say, in giving parties for his friends, they (we may hope) would get pleasure, and so would all those upon whom he spent money, such as the butcher, the baker, and the bootlegger. But if he spends it (let us say) upon laying down rails for surface card in some place where surface cars turn out not to be wanted, he has diverted a mass of labor into channels where it gives pleasure to no one. Nevertheless, when he becomes poor through failure of his investment he will be regarded as a victim of undeserved misfortune, whereas the gay spendthrift, who has spent his money philanthropically, will be despised as a fool and a frivolous person. + +All this is only preliminary. I want to say, in all seriousness, that a great deal of harm is being done in the modern world by belief in the virtuousness of work, and that the road to happiness and prosperity lies in an organized diminution of work. + +First of all: what is work? Work is of two kinds: first, altering the position of matter at or near the earth's surface relatively to other such matter; second, telling other people to do so. The first kind is unpleasant and ill paid; the second is pleasant and highly paid. The second kind is capable of indefinite extension: there are not only those who give orders, but those who give advice as to what orders should be given. Usually two opposite kinds of advice are given simultaneously by two organized bodies of men; this is called politics. The skill required for this kind of work is not knowledge of the subjects as to which advice is given, but knowledge of the art of persuasive speaking and writing, i.e. of advertising. + +Throughout Europe, though not in America, there is a third class of men, more respected than either of the classes of workers. There are men who, through ownership of land, are able to make others pay for the privilege of being allowed to exist and to work. These landowners are idle, and I might therefore be expected to praise them. Unfortunately, their idleness is only rendered possible by the industry of others; indeed their desire for comfortable idleness is historically the source of the whole gospel of work. The last thing they have ever wished is that others should follow their example. + +From the beginning of civilization until the Industrial Revolution, a man could, as a rule, produce by hard work little more than was required for the subsistence of himself and his family, although his wife worked at least as hard as he did, and his children added their labor as soon as they were old enough to do so. The small surplus above bare necessaries was not left to those who produced it, but was appropriated by warriors and priests. In times of famine there was no surplus; the warriors and priests, however, still secured as much as at other times, with the result that many of the workers died of hunger. This system persisted in Russia until 1917 [1], and still persists in the East; in England, in spite of the Industrial Revolution, it remained in full force throughout the Napoleonic wars, and until a hundred years ago, when the new class of manufacturers acquired power. In America, the system came to an end with the Revolution, except in the South, where it persisted until the Civil War. A system which lasted so long and ended so recently has naturally left a profound impress upon men's thoughts and opinions. Much that we take for granted about the desirability of work is derived from this system, and, being pre-industrial, is not adapted to the modern world. Modern technique has made it possible for leisure, within limits, to be not the prerogative of small privileged classes, but a right evenly distributed throughout the community. The morality of work is the morality of slaves, and the modern world has no need of slavery. + +It is obvious that, in primitive communities, peasants, left to themselves, would not have parted with the slender surplus upon which the warriors and priests subsisted, but would have either produced less or consumed more. At first, sheer force compelled them to produce and part with the surplus. Gradually, however, it was found possible to induce many of them to accept an ethic according to which it was their duty to work hard, although part of their work went to support others in idleness. By this means the amount of compulsion required was lessened, and the expenses of government were diminished. To this day, 99 per cent of British wage-earners would be genuinely shocked if it were proposed that the King should not have a larger income than a working man. The conception of duty, speaking historically, has been a means used by the holders of power to induce others to live for the interests of their masters rather than for their own. Of course the holders of power conceal this fact from themselves by managing to believe that their interests are identical with the larger interests of humanity. Sometimes this is true; Athenian slave-owners, for instance, employed part of their leisure in making a permanent contribution to civilization which would have been impossible under a just economic system. Leisure is essential to civilization, and in former times leisure for the few was only rendered possible by the labors of the many. But their labors were valuable, not because work is good, but because leisure is good. And with modern technique it would be possible to distribute leisure justly without injury to civilization. + +Modern technique has made it possible to diminish enormously the amount of labor required to secure the necessaries of life for everyone. This was made obvious during the war. At that time all the men in the armed forces, and all the men and women engaged in the production of munitions, all the men and women engaged in spying, war propaganda, or Government offices connected with the war, were withdrawn from productive occupations. In spite of this, the general level of well-being among unskilled wage-earners on the side of the Allies was higher than before or since. The significance of this fact was concealed by finance: borrowing made it appear as if the future was nourishing the present. But that, of course, would have been impossible; a man cannot eat a loaf of bread that does not yet exist. The war showed conclusively that, by the scientific organization of production, it is possible to keep modern populations in fair comfort on a small part of the working capacity of the modern world. If, at the end of the war, the scientific organization, which had been created in order to liberate men for fighting and munition work, had been preserved, and the hours of the week had been cut down to four, all would have been well. Instead of that the old chaos was restored, those whose work was demanded were made to work long hours, and the rest were left to starve as unemployed. Why? Because work is a duty, and a man should not receive wages in proportion to what he has produced, but in proportion to his virtue as exemplified by his industry. + +This is the morality of the Slave State, applied in circumstances totally unlike those in which it arose. No wonder the result has been disastrous. Let us take an illustration. Suppose that, at a given moment, a certain number of people are engaged in the manufacture of pins. They make as many pins as the world needs, working (say) eight hours a day. Someone makes an invention by which the same number of men can make twice as many pins: pins are already so cheap that hardly any more will be bought at a lower price. In a sensible world, everybody concerned in the manufacturing of pins would take to working four hours instead of eight, and everything else would go on as before. But in the actual world this would be thought demoralizing. The men still work eight hours, there are too many pins, some employers go bankrupt, and half the men previously concerned in making pins are thrown out of work. There is, in the end, just as much leisure as on the other plan, but half the men are totally idle while half are still overworked. In this way, it is insured that the unavoidable leisure shall cause misery all round instead of being a universal source of happiness. Can anything more insane be imagined? + +The idea that the poor should have leisure has always been shocking to the rich. In England, in the early nineteenth century, fifteen hours was the ordinary day's work for a man; children sometimes did as much, and very commonly did twelve hours a day. When meddlesome busybodies suggested that perhaps these hours were rather long, they were told that work kept adults from drink and children from mischief. When I was a child, shortly after urban working men had acquired the vote, certain public holidays were established by law, to the great indignation of the upper classes. I remember hearing an old Duchess say: 'What do the poor want with holidays? They ought to work.' People nowadays are less frank, but the sentiment persists, and is the source of much of our economic confusion. + +Let us, for a moment, consider the ethics of work frankly, without superstition. Every human being, of necessity, consumes, in the course of his life, a certain amount of the produce of human labor. Assuming, as we may, that labor is on the whole disagreeable, it is unjust that a man should consume more than he produces. Of course he may provide services rather than commodities, like a medical man, for example; but he should provide something in return for his board and lodging. to this extent, the duty of work must be admitted, but to this extent only. + +I shall not dwell upon the fact that, in all modern societies outside the USSR, many people escape even this minimum amount of work, namely all those who inherit money and all those who marry money. I do not think the fact that these people are allowed to be idle is nearly so harmful as the fact that wage-earners are expected to overwork or starve. + +If the ordinary wage-earner worked four hours a day, there would be enough for everybody and no unemployment -- assuming a certain very moderate amount of sensible organization. This idea shocks the well-to-do, because they are convinced that the poor would not know how to use so much leisure. In America men often work long hours even when they are well off; such men, naturally, are indignant at the idea of leisure for wage-earners, except as the grim punishment of unemployment; in fact, they dislike leisure even for their sons. Oddly enough, while they wish their sons to work so hard as to have no time to be civilized, they do not mind their wives and daughters having no work at all. the snobbish admiration of uselessness, which, in an aristocratic society, extends to both sexes, is, under a plutocracy, confined to women; this, however, does not make it any more in agreement with common sense. + +The wise use of leisure, it must be conceded, is a product of civilization and education. A man who has worked long hours all his life will become bored if he becomes suddenly idle. But without a considerable amount of leisure a man is cut off from many of the best things. There is no longer any reason why the bulk of the population should suffer this deprivation; only a foolish asceticism, usually vicarious, makes us continue to insist on work in excessive quantities now that the need no longer exists. + +In the new creed which controls the government of Russia, while there is much that is very different from the traditional teaching of the West, there are some things that are quite unchanged. The attitude of the governing classes, and especially of those who conduct educational propaganda, on the subject of the dignity of labor, is almost exactly that which the governing classes of the world have always preached to what were called the 'honest poor'. Industry, sobriety, willingness to work long hours for distant advantages, even submissiveness to authority, all these reappear; moreover authority still represents the will of the Ruler of the Universe, Who, however, is now called by a new name, Dialectical Materialism. + +The victory of the proletariat in Russia has some points in common with the victory of the feminists in some other countries. For ages, men had conceded the superior saintliness of women, and had consoled women for their inferiority by maintaining that saintliness is more desirable than power. At last the feminists decided that they would have both, since the pioneers among them believed all that the men had told them about the desirability of virtue, but not what they had told them about the worthlessness of political power. A similar thing has happened in Russia as regards manual work. For ages, the rich and their sycophants have written in praise of 'honest toil', have praised the simple life, have professed a religion which teaches that the poor are much more likely to go to heaven than the rich, and in general have tried to make manual workers believe that there is some special nobility about altering the position of matter in space, just as men tried to make women believe that they derived some special nobility from their sexual enslavement. In Russia, all this teaching about the excellence of manual work has been taken seriously, with the result that the manual worker is more honored than anyone else. What are, in essence, revivalist appeals are made, but not for the old purposes: they are made to secure shock workers for special tasks. Manual work is the ideal which is held before the young, and is the basis of all ethical teaching. + +For the present, possibly, this is all to the good. A large country, full of natural resources, awaits development, and has has to be developed with very little use of credit. In these circumstances, hard work is necessary, and is likely to bring a great reward. But what will happen when the point has been reached where everybody could be comfortable without working long hours? + +In the West, we have various ways of dealing with this problem. We have no attempt at economic justice, so that a large proportion of the total produce goes to a small minority of the population, many of whom do no work at all. Owing to the absence of any central control over production, we produce hosts of things that are not wanted. We keep a large percentage of the working population idle, because we can dispense with their labor by making the others overwork. When all these methods prove inadequate, we have a war: we cause a number of people to manufacture high explosives, and a number of others to explode them, as if we were children who had just discovered fireworks. By a combination of all these devices we manage, though with difficulty, to keep alive the notion that a great deal of severe manual work must be the lot of the average man. + +In Russia, owing to more economic justice and central control over production, the problem will have to be differently solved. the rational solution would be, as soon as the necessaries and elementary comforts can be provided for all, to reduce the hours of labor gradually, allowing a popular vote to decide, at each stage, whether more leisure or more goods were to be preferred. But, having taught the supreme virtue of hard work, it is difficult to see how the authorities can aim at a paradise in which there will be much leisure and little work. It seems more likely that they will find continually fresh schemes, by which present leisure is to be sacrificed to future productivity. I read recently of an ingenious plan put forward by Russian engineers, for making the White Sea and the northern coasts of Siberia warm, by putting a dam across the Kara Sea. An admirable project, but liable to postpone proletarian comfort for a generation, while the nobility of toil is being displayed amid the ice-fields and snowstorms of the Arctic Ocean. This sort of thing, if it happens, will be the result of regarding the virtue of hard work as an end in itself, rather than as a means to a state of affairs in which it is no longer needed. + +The fact is that moving matter about, while a certain amount of it is necessary to our existence, is emphatically not one of the ends of human life. If it were, we should have to consider every navvy superior to Shakespeare. We have been misled in this matter by two causes. One is the necessity of keeping the poor contented, which has led the rich, for thousands of years, to preach the dignity of labor, while taking care themselves to remain undignified in this respect. The other is the new pleasure in mechanism, which makes us delight in the astonishingly clever changes that we can produce on the earth's surface. Neither of these motives makes any great appeal to the actual worker. If you ask him what he thinks the best part of his life, he is not likely to say: 'I enjoy manual work because it makes me feel that I am fulfilling man's noblest task, and because I like to think how much man can transform his planet. It is true that my body demands periods of rest, which I have to fill in as best I may, but I am never so happy as when the morning comes and I can return to the toil from which my contentment springs.' I have never heard working men say this sort of thing. They consider work, as it should be considered, a necessary means to a livelihood, and it is from their leisure that they derive whatever happiness they may enjoy. + +It will be said that, while a little leisure is pleasant, men would not know how to fill their days if they had only four hours of work out of the twenty-four. In so far as this is true in the modern world, it is a condemnation of our civilization; it would not have been true at any earlier period. There was formerly a capacity for light-heartedness and play which has been to some extent inhibited by the cult of efficiency. The modern man thinks that everything ought to be done for the sake of something else, and never for its own sake. Serious-minded persons, for example, are continually condemning the habit of going to the cinema, and telling us that it leads the young into crime. But all the work that goes to producing a cinema is respectable, because it is work, and because it brings a money profit. The notion that the desirable activities are those that bring a profit has made everything topsy-turvy. The butcher who provides you with meat and the baker who provides you with bread are praiseworthy, because they are making money; but when you enjoy the food they have provided, you are merely frivolous, unless you eat only to get strength for your work. Broadly speaking, it is held that getting money is good and spending money is bad. Seeing that they are two sides of one transaction, this is absurd; one might as well maintain that keys are good, but keyholes are bad. Whatever merit there may be in the production of goods must be entirely derivative from the advantage to be obtained by consuming them. The individual, in our society, works for profit; but the social purpose of his work lies in the consumption of what he produces. It is this divorce between the individual and the social purpose of production that makes it so difficult for men to think clearly in a world in which profit-making is the incentive to industry. We think too much of production, and too little of consumption. One result is that we attach too little importance to enjoyment and simple happiness, and that we do not judge production by the pleasure that it gives to the consumer. + +When I suggest that working hours should be reduced to four, I am not meaning to imply that all the remaining time should necessarily be spent in pure frivolity. I mean that four hours' work a day should entitle a man to the necessities and elementary comforts of life, and that the rest of his time should be his to use as he might see fit. It is an essential part of any such social system that education should be carried further than it usually is at present, and should aim, in part, at providing tastes which would enable a man to use leisure intelligently. I am not thinking mainly of the sort of things that would be considered 'highbrow'. Peasant dances have died out except in remote rural areas, but the impulses which caused them to be cultivated must still exist in human nature. The pleasures of urban populations have become mainly passive: seeing cinemas, watching football matches, listening to the radio, and so on. This results from the fact that their active energies are fully taken up with work; if they had more leisure, they would again enjoy pleasures in which they took an active part. + +In the past, there was a small leisure class and a larger working class. The leisure class enjoyed advantages for which there was no basis in social justice; this necessarily made it oppressive, limited its sympathies, and caused it to invent theories by which to justify its privileges. These facts greatly diminished its excellence, but in spite of this drawback it contributed nearly the whole of what we call civilization. It cultivated the arts and discovered the sciences; it wrote the books, invented the philosophies, and refined social relations. Even the liberation of the oppressed has usually been inaugurated from above. Without the leisure class, mankind would never have emerged from barbarism. + +The method of a leisure class without duties was, however, extraordinarily wasteful. None of the members of the class had to be taught to be industrious, and the class as a whole was not exceptionally intelligent. The class might produce one Darwin, but against him had to be set tens of thousands of country gentlemen who never thought of anything more intelligent than fox-hunting and punishing poachers. At present, the universities are supposed to provide, in a more systematic way, what the leisure class provided accidentally and as a by-product. This is a great improvement, but it has certain drawbacks. University life is so different from life in the world at large that men who live in academic milieu tend to be unaware of the preoccupations and problems of ordinary men and women; moreover their ways of expressing themselves are usually such as to rob their opinions of the influence that they ought to have upon the general public. Another disadvantage is that in universities studies are organized, and the man who thinks of some original line of research is likely to be discouraged. Academic institutions, therefore, useful as they are, are not adequate guardians of the interests of civilization in a world where everyone outside their walls is too busy for unutilitarian pursuits. + +In a world where no one is compelled to work more than four hours a day, every person possessed of scientific curiosity will be able to indulge it, and every painter will be able to paint without starving, however excellent his pictures may be. Young writers will not be obliged to draw attention to themselves by sensational pot-boilers, with a view to acquiring the economic independence needed for monumental works, for which, when the time at last comes, they will have lost the taste and capacity. Men who, in their professional work, have become interested in some phase of economics or government, will be able to develop their ideas without the academic detachment that makes the work of university economists often seem lacking in reality. Medical men will have the time to learn about the progress of medicine, teachers will not be exasperatedly struggling to teach by routine methods things which they learnt in their youth, which may, in the interval, have been proved to be untrue. + +Above all, there will be happiness and joy of life, instead of frayed nerves, weariness, and dyspepsia. The work exacted will be enough to make leisure delightful, but not enough to produce exhaustion. Since men will not be tired in their spare time, they will not demand only such amusements as are passive and vapid. At least one per cent will probably devote the time not spent in professional work to pursuits of some public importance, and, since they will not depend upon these pursuits for their livelihood, their originality will be unhampered, and there will be no need to conform to the standards set by elderly pundits. But it is not only in these exceptional cases that the advantages of leisure will appear. Ordinary men and women, having the opportunity of a happy life, will become more kindly and less persecuting and less inclined to view others with suspicion. The taste for war will die out, partly for this reason, and partly because it will involve long and severe work for all. Good nature is, of all moral qualities, the one that the world needs most, and good nature is the result of ease and security, not of a life of arduous struggle. Modern methods of production have given us the possibility of ease and security for all; we have chosen, instead, to have overwork for some and starvation for others. Hitherto we have continued to be as energetic as we were before there were machines; in this we have been foolish, but there is no reason to go on being foolish forever. + +[1] Since then, members of the Communist Party have succeeded to this privilege of the warriors and priests. diff --git a/node_modules/http-server/node_modules/optimist/node_modules/wordwrap/test/wrap.js b/node_modules/http-server/node_modules/optimist/node_modules/wordwrap/test/wrap.js new file mode 100644 index 0000000..0cfb76d --- /dev/null +++ b/node_modules/http-server/node_modules/optimist/node_modules/wordwrap/test/wrap.js @@ -0,0 +1,31 @@ +var assert = require('assert'); +var wordwrap = require('wordwrap'); + +var fs = require('fs'); +var idleness = fs.readFileSync(__dirname + '/idleness.txt', 'utf8'); + +exports.stop80 = function () { + var lines = wordwrap(80)(idleness).split(/\n/); + var words = idleness.split(/\s+/); + + lines.forEach(function (line) { + assert.ok(line.length <= 80, 'line > 80 columns'); + var chunks = line.match(/\S/) ? line.split(/\s+/) : []; + assert.deepEqual(chunks, words.splice(0, chunks.length)); + }); +}; + +exports.start20stop60 = function () { + var lines = wordwrap(20, 100)(idleness).split(/\n/); + var words = idleness.split(/\s+/); + + lines.forEach(function (line) { + assert.ok(line.length <= 100, 'line > 100 columns'); + var chunks = line + .split(/\s+/) + .filter(function (x) { return x.match(/\S/) }) + ; + assert.deepEqual(chunks, words.splice(0, chunks.length)); + assert.deepEqual(line.slice(0, 20), new Array(20 + 1).join(' ')); + }); +}; diff --git a/node_modules/http-server/node_modules/optimist/package.json b/node_modules/http-server/node_modules/optimist/package.json new file mode 100644 index 0000000..7f2d59f --- /dev/null +++ b/node_modules/http-server/node_modules/optimist/package.json @@ -0,0 +1,64 @@ +{ + "name": "optimist", + "version": "0.6.1", + "description": "Light-weight option parsing with an argv hash. No optstrings attached.", + "main": "./index.js", + "dependencies": { + "wordwrap": "~0.0.2", + "minimist": "~0.0.1" + }, + "devDependencies": { + "hashish": "~0.0.4", + "tap": "~0.4.0" + }, + "scripts": { + "test": "tap ./test/*.js" + }, + "repository": { + "type": "git", + "url": "http://github.com/substack/node-optimist.git" + }, + "keywords": [ + "argument", + "args", + "option", + "parser", + "parsing", + "cli", + "command" + ], + "author": { + "name": "James Halliday", + "email": "mail@substack.net", + "url": "http://substack.net" + }, + "license": "MIT/X11", + "engine": { + "node": ">=0.4" + }, + "bugs": { + "url": "https://github.com/substack/node-optimist/issues" + }, + "homepage": "https://github.com/substack/node-optimist", + "_id": "optimist@0.6.1", + "dist": { + "shasum": "da3ea74686fa21a19a111c326e90eb15a0196686", + "tarball": "http://registry.npmjs.org/optimist/-/optimist-0.6.1.tgz" + }, + "_from": "optimist@>=0.6.0 <0.7.0", + "_npmVersion": "1.3.21", + "_npmUser": { + "name": "substack", + "email": "mail@substack.net" + }, + "maintainers": [ + { + "name": "substack", + "email": "mail@substack.net" + } + ], + "directories": {}, + "_shasum": "da3ea74686fa21a19a111c326e90eb15a0196686", + "_resolved": "https://registry.npmjs.org/optimist/-/optimist-0.6.1.tgz", + "readme": "ERROR: No README data found!" +} diff --git a/node_modules/http-server/node_modules/optimist/readme.markdown b/node_modules/http-server/node_modules/optimist/readme.markdown new file mode 100644 index 0000000..b74b437 --- /dev/null +++ b/node_modules/http-server/node_modules/optimist/readme.markdown @@ -0,0 +1,513 @@ +# DEPRECATION NOTICE + +I don't want to maintain this module anymore since I just use +[minimist](https://npmjs.org/package/minimist), the argument parsing engine, +directly instead nowadays. + +See [yargs](https://github.com/chevex/yargs) for the modern, pirate-themed +successor to optimist. + +[![yarrrrrrrgs!](http://i.imgur.com/4WFGVJ9.png)](https://github.com/chevex/yargs) + +You should also consider [nomnom](https://github.com/harthur/nomnom). + +optimist +======== + +Optimist is a node.js library for option parsing for people who hate option +parsing. More specifically, this module is for people who like all the --bells +and -whistlz of program usage but think optstrings are a waste of time. + +With optimist, option parsing doesn't have to suck (as much). + +[![build status](https://secure.travis-ci.org/substack/node-optimist.png)](http://travis-ci.org/substack/node-optimist) + +examples +======== + +With Optimist, the options are just a hash! No optstrings attached. +------------------------------------------------------------------- + +xup.js: + +````javascript +#!/usr/bin/env node +var argv = require('optimist').argv; + +if (argv.rif - 5 * argv.xup > 7.138) { + console.log('Buy more riffiwobbles'); +} +else { + console.log('Sell the xupptumblers'); +} +```` + +*** + + $ ./xup.js --rif=55 --xup=9.52 + Buy more riffiwobbles + + $ ./xup.js --rif 12 --xup 8.1 + Sell the xupptumblers + +![This one's optimistic.](http://substack.net/images/optimistic.png) + +But wait! There's more! You can do short options: +------------------------------------------------- + +short.js: + +````javascript +#!/usr/bin/env node +var argv = require('optimist').argv; +console.log('(%d,%d)', argv.x, argv.y); +```` + +*** + + $ ./short.js -x 10 -y 21 + (10,21) + +And booleans, both long and short (and grouped): +---------------------------------- + +bool.js: + +````javascript +#!/usr/bin/env node +var util = require('util'); +var argv = require('optimist').argv; + +if (argv.s) { + util.print(argv.fr ? 'Le chat dit: ' : 'The cat says: '); +} +console.log( + (argv.fr ? 'miaou' : 'meow') + (argv.p ? '.' : '') +); +```` + +*** + + $ ./bool.js -s + The cat says: meow + + $ ./bool.js -sp + The cat says: meow. + + $ ./bool.js -sp --fr + Le chat dit: miaou. + +And non-hypenated options too! Just use `argv._`! +------------------------------------------------- + +nonopt.js: + +````javascript +#!/usr/bin/env node +var argv = require('optimist').argv; +console.log('(%d,%d)', argv.x, argv.y); +console.log(argv._); +```` + +*** + + $ ./nonopt.js -x 6.82 -y 3.35 moo + (6.82,3.35) + [ 'moo' ] + + $ ./nonopt.js foo -x 0.54 bar -y 1.12 baz + (0.54,1.12) + [ 'foo', 'bar', 'baz' ] + +Plus, Optimist comes with .usage() and .demand()! +------------------------------------------------- + +divide.js: + +````javascript +#!/usr/bin/env node +var argv = require('optimist') + .usage('Usage: $0 -x [num] -y [num]') + .demand(['x','y']) + .argv; + +console.log(argv.x / argv.y); +```` + +*** + + $ ./divide.js -x 55 -y 11 + 5 + + $ node ./divide.js -x 4.91 -z 2.51 + Usage: node ./divide.js -x [num] -y [num] + + Options: + -x [required] + -y [required] + + Missing required arguments: y + +EVEN MORE HOLY COW +------------------ + +default_singles.js: + +````javascript +#!/usr/bin/env node +var argv = require('optimist') + .default('x', 10) + .default('y', 10) + .argv +; +console.log(argv.x + argv.y); +```` + +*** + + $ ./default_singles.js -x 5 + 15 + +default_hash.js: + +````javascript +#!/usr/bin/env node +var argv = require('optimist') + .default({ x : 10, y : 10 }) + .argv +; +console.log(argv.x + argv.y); +```` + +*** + + $ ./default_hash.js -y 7 + 17 + +And if you really want to get all descriptive about it... +--------------------------------------------------------- + +boolean_single.js + +````javascript +#!/usr/bin/env node +var argv = require('optimist') + .boolean('v') + .argv +; +console.dir(argv); +```` + +*** + + $ ./boolean_single.js -v foo bar baz + true + [ 'bar', 'baz', 'foo' ] + +boolean_double.js + +````javascript +#!/usr/bin/env node +var argv = require('optimist') + .boolean(['x','y','z']) + .argv +; +console.dir([ argv.x, argv.y, argv.z ]); +console.dir(argv._); +```` + +*** + + $ ./boolean_double.js -x -z one two three + [ true, false, true ] + [ 'one', 'two', 'three' ] + +Optimist is here to help... +--------------------------- + +You can describe parameters for help messages and set aliases. Optimist figures +out how to format a handy help string automatically. + +line_count.js + +````javascript +#!/usr/bin/env node +var argv = require('optimist') + .usage('Count the lines in a file.\nUsage: $0') + .demand('f') + .alias('f', 'file') + .describe('f', 'Load a file') + .argv +; + +var fs = require('fs'); +var s = fs.createReadStream(argv.file); + +var lines = 0; +s.on('data', function (buf) { + lines += buf.toString().match(/\n/g).length; +}); + +s.on('end', function () { + console.log(lines); +}); +```` + +*** + + $ node line_count.js + Count the lines in a file. + Usage: node ./line_count.js + + Options: + -f, --file Load a file [required] + + Missing required arguments: f + + $ node line_count.js --file line_count.js + 20 + + $ node line_count.js -f line_count.js + 20 + +methods +======= + +By itself, + +````javascript +require('optimist').argv +````` + +will use `process.argv` array to construct the `argv` object. + +You can pass in the `process.argv` yourself: + +````javascript +require('optimist')([ '-x', '1', '-y', '2' ]).argv +```` + +or use .parse() to do the same thing: + +````javascript +require('optimist').parse([ '-x', '1', '-y', '2' ]) +```` + +The rest of these methods below come in just before the terminating `.argv`. + +.alias(key, alias) +------------------ + +Set key names as equivalent such that updates to a key will propagate to aliases +and vice-versa. + +Optionally `.alias()` can take an object that maps keys to aliases. + +.default(key, value) +-------------------- + +Set `argv[key]` to `value` if no option was specified on `process.argv`. + +Optionally `.default()` can take an object that maps keys to default values. + +.demand(key) +------------ + +If `key` is a string, show the usage information and exit if `key` wasn't +specified in `process.argv`. + +If `key` is a number, demand at least as many non-option arguments, which show +up in `argv._`. + +If `key` is an Array, demand each element. + +.describe(key, desc) +-------------------- + +Describe a `key` for the generated usage information. + +Optionally `.describe()` can take an object that maps keys to descriptions. + +.options(key, opt) +------------------ + +Instead of chaining together `.alias().demand().default()`, you can specify +keys in `opt` for each of the chainable methods. + +For example: + +````javascript +var argv = require('optimist') + .options('f', { + alias : 'file', + default : '/etc/passwd', + }) + .argv +; +```` + +is the same as + +````javascript +var argv = require('optimist') + .alias('f', 'file') + .default('f', '/etc/passwd') + .argv +; +```` + +Optionally `.options()` can take an object that maps keys to `opt` parameters. + +.usage(message) +--------------- + +Set a usage message to show which commands to use. Inside `message`, the string +`$0` will get interpolated to the current script name or node command for the +present script similar to how `$0` works in bash or perl. + +.check(fn) +---------- + +Check that certain conditions are met in the provided arguments. + +If `fn` throws or returns `false`, show the thrown error, usage information, and +exit. + +.boolean(key) +------------- + +Interpret `key` as a boolean. If a non-flag option follows `key` in +`process.argv`, that string won't get set as the value of `key`. + +If `key` never shows up as a flag in `process.arguments`, `argv[key]` will be +`false`. + +If `key` is an Array, interpret all the elements as booleans. + +.string(key) +------------ + +Tell the parser logic not to interpret `key` as a number or boolean. +This can be useful if you need to preserve leading zeros in an input. + +If `key` is an Array, interpret all the elements as strings. + +.wrap(columns) +-------------- + +Format usage output to wrap at `columns` many columns. + +.help() +------- + +Return the generated usage string. + +.showHelp(fn=console.error) +--------------------------- + +Print the usage data using `fn` for printing. + +.parse(args) +------------ + +Parse `args` instead of `process.argv`. Returns the `argv` object. + +.argv +----- + +Get the arguments as a plain old object. + +Arguments without a corresponding flag show up in the `argv._` array. + +The script name or node command is available at `argv.$0` similarly to how `$0` +works in bash or perl. + +parsing tricks +============== + +stop parsing +------------ + +Use `--` to stop parsing flags and stuff the remainder into `argv._`. + + $ node examples/reflect.js -a 1 -b 2 -- -c 3 -d 4 + { _: [ '-c', '3', '-d', '4' ], + '$0': 'node ./examples/reflect.js', + a: 1, + b: 2 } + +negate fields +------------- + +If you want to explicity set a field to false instead of just leaving it +undefined or to override a default you can do `--no-key`. + + $ node examples/reflect.js -a --no-b + { _: [], + '$0': 'node ./examples/reflect.js', + a: true, + b: false } + +numbers +------- + +Every argument that looks like a number (`!isNaN(Number(arg))`) is converted to +one. This way you can just `net.createConnection(argv.port)` and you can add +numbers out of `argv` with `+` without having that mean concatenation, +which is super frustrating. + +duplicates +---------- + +If you specify a flag multiple times it will get turned into an array containing +all the values in order. + + $ node examples/reflect.js -x 5 -x 8 -x 0 + { _: [], + '$0': 'node ./examples/reflect.js', + x: [ 5, 8, 0 ] } + +dot notation +------------ + +When you use dots (`.`s) in argument names, an implicit object path is assumed. +This lets you organize arguments into nested objects. + + $ node examples/reflect.js --foo.bar.baz=33 --foo.quux=5 + { _: [], + '$0': 'node ./examples/reflect.js', + foo: { bar: { baz: 33 }, quux: 5 } } + +short numbers +------------- + +Short numeric `head -n5` style argument work too: + + $ node reflect.js -n123 -m456 + { '3': true, + '6': true, + _: [], + '$0': 'node ./reflect.js', + n: 123, + m: 456 } + +installation +============ + +With [npm](http://github.com/isaacs/npm), just do: + npm install optimist + +or clone this project on github: + + git clone http://github.com/substack/node-optimist.git + +To run the tests with [expresso](http://github.com/visionmedia/expresso), +just do: + + expresso + +inspired By +=========== + +This module is loosely inspired by Perl's +[Getopt::Casual](http://search.cpan.org/~photo/Getopt-Casual-0.13.1/Casual.pm). diff --git a/node_modules/http-server/node_modules/optimist/test/_.js b/node_modules/http-server/node_modules/optimist/test/_.js new file mode 100644 index 0000000..d9c58b3 --- /dev/null +++ b/node_modules/http-server/node_modules/optimist/test/_.js @@ -0,0 +1,71 @@ +var spawn = require('child_process').spawn; +var test = require('tap').test; + +test('dotSlashEmpty', testCmd('./bin.js', [])); + +test('dotSlashArgs', testCmd('./bin.js', [ 'a', 'b', 'c' ])); + +test('nodeEmpty', testCmd('node bin.js', [])); + +test('nodeArgs', testCmd('node bin.js', [ 'x', 'y', 'z' ])); + +test('whichNodeEmpty', function (t) { + var which = spawn('which', ['node']); + + which.stdout.on('data', function (buf) { + t.test( + testCmd(buf.toString().trim() + ' bin.js', []) + ); + t.end(); + }); + + which.stderr.on('data', function (err) { + assert.error(err); + t.end(); + }); +}); + +test('whichNodeArgs', function (t) { + var which = spawn('which', ['node']); + + which.stdout.on('data', function (buf) { + t.test( + testCmd(buf.toString().trim() + ' bin.js', [ 'q', 'r' ]) + ); + t.end(); + }); + + which.stderr.on('data', function (err) { + t.error(err); + t.end(); + }); +}); + +function testCmd (cmd, args) { + + return function (t) { + var to = setTimeout(function () { + assert.fail('Never got stdout data.') + }, 5000); + + var oldDir = process.cwd(); + process.chdir(__dirname + '/_'); + + var cmds = cmd.split(' '); + + var bin = spawn(cmds[0], cmds.slice(1).concat(args.map(String))); + process.chdir(oldDir); + + bin.stderr.on('data', function (err) { + t.error(err); + t.end(); + }); + + bin.stdout.on('data', function (buf) { + clearTimeout(to); + var _ = JSON.parse(buf.toString()); + t.same(_.map(String), args.map(String)); + t.end(); + }); + }; +} diff --git a/node_modules/http-server/node_modules/optimist/test/_/argv.js b/node_modules/http-server/node_modules/optimist/test/_/argv.js new file mode 100644 index 0000000..3d09606 --- /dev/null +++ b/node_modules/http-server/node_modules/optimist/test/_/argv.js @@ -0,0 +1,2 @@ +#!/usr/bin/env node +console.log(JSON.stringify(process.argv)); diff --git a/node_modules/http-server/node_modules/optimist/test/_/bin.js b/node_modules/http-server/node_modules/optimist/test/_/bin.js new file mode 100755 index 0000000..4a18d85 --- /dev/null +++ b/node_modules/http-server/node_modules/optimist/test/_/bin.js @@ -0,0 +1,3 @@ +#!/usr/bin/env node +var argv = require('../../index').argv +console.log(JSON.stringify(argv._)); diff --git a/node_modules/http-server/node_modules/optimist/test/dash.js b/node_modules/http-server/node_modules/optimist/test/dash.js new file mode 100644 index 0000000..af8ed6f --- /dev/null +++ b/node_modules/http-server/node_modules/optimist/test/dash.js @@ -0,0 +1,31 @@ +var optimist = require('../index'); +var test = require('tap').test; + +test('-', function (t) { + t.plan(5); + t.deepEqual( + fix(optimist.parse([ '-n', '-' ])), + { n: '-', _: [] } + ); + t.deepEqual( + fix(optimist.parse([ '-' ])), + { _: [ '-' ] } + ); + t.deepEqual( + fix(optimist.parse([ '-f-' ])), + { f: '-', _: [] } + ); + t.deepEqual( + fix(optimist([ '-b', '-' ]).boolean('b').argv), + { b: true, _: [ '-' ] } + ); + t.deepEqual( + fix(optimist([ '-s', '-' ]).string('s').argv), + { s: '-', _: [] } + ); +}); + +function fix (obj) { + delete obj.$0; + return obj; +} diff --git a/node_modules/http-server/node_modules/optimist/test/parse.js b/node_modules/http-server/node_modules/optimist/test/parse.js new file mode 100644 index 0000000..d320f43 --- /dev/null +++ b/node_modules/http-server/node_modules/optimist/test/parse.js @@ -0,0 +1,446 @@ +var optimist = require('../index'); +var path = require('path'); +var test = require('tap').test; + +var $0 = 'node ./' + path.relative(process.cwd(), __filename); + +test('short boolean', function (t) { + var parse = optimist.parse([ '-b' ]); + t.same(parse, { b : true, _ : [], $0 : $0 }); + t.same(typeof parse.b, 'boolean'); + t.end(); +}); + +test('long boolean', function (t) { + t.same( + optimist.parse([ '--bool' ]), + { bool : true, _ : [], $0 : $0 } + ); + t.end(); +}); + +test('bare', function (t) { + t.same( + optimist.parse([ 'foo', 'bar', 'baz' ]), + { _ : [ 'foo', 'bar', 'baz' ], $0 : $0 } + ); + t.end(); +}); + +test('short group', function (t) { + t.same( + optimist.parse([ '-cats' ]), + { c : true, a : true, t : true, s : true, _ : [], $0 : $0 } + ); + t.end(); +}); + +test('short group next', function (t) { + t.same( + optimist.parse([ '-cats', 'meow' ]), + { c : true, a : true, t : true, s : 'meow', _ : [], $0 : $0 } + ); + t.end(); +}); + +test('short capture', function (t) { + t.same( + optimist.parse([ '-h', 'localhost' ]), + { h : 'localhost', _ : [], $0 : $0 } + ); + t.end(); +}); + +test('short captures', function (t) { + t.same( + optimist.parse([ '-h', 'localhost', '-p', '555' ]), + { h : 'localhost', p : 555, _ : [], $0 : $0 } + ); + t.end(); +}); + +test('long capture sp', function (t) { + t.same( + optimist.parse([ '--pow', 'xixxle' ]), + { pow : 'xixxle', _ : [], $0 : $0 } + ); + t.end(); +}); + +test('long capture eq', function (t) { + t.same( + optimist.parse([ '--pow=xixxle' ]), + { pow : 'xixxle', _ : [], $0 : $0 } + ); + t.end() +}); + +test('long captures sp', function (t) { + t.same( + optimist.parse([ '--host', 'localhost', '--port', '555' ]), + { host : 'localhost', port : 555, _ : [], $0 : $0 } + ); + t.end(); +}); + +test('long captures eq', function (t) { + t.same( + optimist.parse([ '--host=localhost', '--port=555' ]), + { host : 'localhost', port : 555, _ : [], $0 : $0 } + ); + t.end(); +}); + +test('mixed short bool and capture', function (t) { + t.same( + optimist.parse([ '-h', 'localhost', '-fp', '555', 'script.js' ]), + { + f : true, p : 555, h : 'localhost', + _ : [ 'script.js' ], $0 : $0, + } + ); + t.end(); +}); + +test('short and long', function (t) { + t.same( + optimist.parse([ '-h', 'localhost', '-fp', '555', 'script.js' ]), + { + f : true, p : 555, h : 'localhost', + _ : [ 'script.js' ], $0 : $0, + } + ); + t.end(); +}); + +test('no', function (t) { + t.same( + optimist.parse([ '--no-moo' ]), + { moo : false, _ : [], $0 : $0 } + ); + t.end(); +}); + +test('multi', function (t) { + t.same( + optimist.parse([ '-v', 'a', '-v', 'b', '-v', 'c' ]), + { v : ['a','b','c'], _ : [], $0 : $0 } + ); + t.end(); +}); + +test('comprehensive', function (t) { + t.same( + optimist.parse([ + '--name=meowmers', 'bare', '-cats', 'woo', + '-h', 'awesome', '--multi=quux', + '--key', 'value', + '-b', '--bool', '--no-meep', '--multi=baz', + '--', '--not-a-flag', 'eek' + ]), + { + c : true, + a : true, + t : true, + s : 'woo', + h : 'awesome', + b : true, + bool : true, + key : 'value', + multi : [ 'quux', 'baz' ], + meep : false, + name : 'meowmers', + _ : [ 'bare', '--not-a-flag', 'eek' ], + $0 : $0 + } + ); + t.end(); +}); + +test('nums', function (t) { + var argv = optimist.parse([ + '-x', '1234', + '-y', '5.67', + '-z', '1e7', + '-w', '10f', + '--hex', '0xdeadbeef', + '789', + ]); + t.same(argv, { + x : 1234, + y : 5.67, + z : 1e7, + w : '10f', + hex : 0xdeadbeef, + _ : [ 789 ], + $0 : $0 + }); + t.same(typeof argv.x, 'number'); + t.same(typeof argv.y, 'number'); + t.same(typeof argv.z, 'number'); + t.same(typeof argv.w, 'string'); + t.same(typeof argv.hex, 'number'); + t.same(typeof argv._[0], 'number'); + t.end(); +}); + +test('flag boolean', function (t) { + var parse = optimist([ '-t', 'moo' ]).boolean(['t']).argv; + t.same(parse, { t : true, _ : [ 'moo' ], $0 : $0 }); + t.same(typeof parse.t, 'boolean'); + t.end(); +}); + +test('flag boolean value', function (t) { + var parse = optimist(['--verbose', 'false', 'moo', '-t', 'true']) + .boolean(['t', 'verbose']).default('verbose', true).argv; + + t.same(parse, { + verbose: false, + t: true, + _: ['moo'], + $0 : $0 + }); + + t.same(typeof parse.verbose, 'boolean'); + t.same(typeof parse.t, 'boolean'); + t.end(); +}); + +test('flag boolean default false', function (t) { + var parse = optimist(['moo']) + .boolean(['t', 'verbose']) + .default('verbose', false) + .default('t', false).argv; + + t.same(parse, { + verbose: false, + t: false, + _: ['moo'], + $0 : $0 + }); + + t.same(typeof parse.verbose, 'boolean'); + t.same(typeof parse.t, 'boolean'); + t.end(); + +}); + +test('boolean groups', function (t) { + var parse = optimist([ '-x', '-z', 'one', 'two', 'three' ]) + .boolean(['x','y','z']).argv; + + t.same(parse, { + x : true, + y : false, + z : true, + _ : [ 'one', 'two', 'three' ], + $0 : $0 + }); + + t.same(typeof parse.x, 'boolean'); + t.same(typeof parse.y, 'boolean'); + t.same(typeof parse.z, 'boolean'); + t.end(); +}); + +test('newlines in params' , function (t) { + var args = optimist.parse([ '-s', "X\nX" ]) + t.same(args, { _ : [], s : "X\nX", $0 : $0 }); + + // reproduce in bash: + // VALUE="new + // line" + // node program.js --s="$VALUE" + args = optimist.parse([ "--s=X\nX" ]) + t.same(args, { _ : [], s : "X\nX", $0 : $0 }); + t.end(); +}); + +test('strings' , function (t) { + var s = optimist([ '-s', '0001234' ]).string('s').argv.s; + t.same(s, '0001234'); + t.same(typeof s, 'string'); + + var x = optimist([ '-x', '56' ]).string('x').argv.x; + t.same(x, '56'); + t.same(typeof x, 'string'); + t.end(); +}); + +test('stringArgs', function (t) { + var s = optimist([ ' ', ' ' ]).string('_').argv._; + t.same(s.length, 2); + t.same(typeof s[0], 'string'); + t.same(s[0], ' '); + t.same(typeof s[1], 'string'); + t.same(s[1], ' '); + t.end(); +}); + +test('slashBreak', function (t) { + t.same( + optimist.parse([ '-I/foo/bar/baz' ]), + { I : '/foo/bar/baz', _ : [], $0 : $0 } + ); + t.same( + optimist.parse([ '-xyz/foo/bar/baz' ]), + { x : true, y : true, z : '/foo/bar/baz', _ : [], $0 : $0 } + ); + t.end(); +}); + +test('alias', function (t) { + var argv = optimist([ '-f', '11', '--zoom', '55' ]) + .alias('z', 'zoom') + .argv + ; + t.equal(argv.zoom, 55); + t.equal(argv.z, argv.zoom); + t.equal(argv.f, 11); + t.end(); +}); + +test('multiAlias', function (t) { + var argv = optimist([ '-f', '11', '--zoom', '55' ]) + .alias('z', [ 'zm', 'zoom' ]) + .argv + ; + t.equal(argv.zoom, 55); + t.equal(argv.z, argv.zoom); + t.equal(argv.z, argv.zm); + t.equal(argv.f, 11); + t.end(); +}); + +test('boolean default true', function (t) { + var argv = optimist.options({ + sometrue: { + boolean: true, + default: true + } + }).argv; + + t.equal(argv.sometrue, true); + t.end(); +}); + +test('boolean default false', function (t) { + var argv = optimist.options({ + somefalse: { + boolean: true, + default: false + } + }).argv; + + t.equal(argv.somefalse, false); + t.end(); +}); + +test('nested dotted objects', function (t) { + var argv = optimist([ + '--foo.bar', '3', '--foo.baz', '4', + '--foo.quux.quibble', '5', '--foo.quux.o_O', + '--beep.boop' + ]).argv; + + t.same(argv.foo, { + bar : 3, + baz : 4, + quux : { + quibble : 5, + o_O : true + }, + }); + t.same(argv.beep, { boop : true }); + t.end(); +}); + +test('boolean and alias with chainable api', function (t) { + var aliased = [ '-h', 'derp' ]; + var regular = [ '--herp', 'derp' ]; + var opts = { + herp: { alias: 'h', boolean: true } + }; + var aliasedArgv = optimist(aliased) + .boolean('herp') + .alias('h', 'herp') + .argv; + var propertyArgv = optimist(regular) + .boolean('herp') + .alias('h', 'herp') + .argv; + var expected = { + herp: true, + h: true, + '_': [ 'derp' ], + '$0': $0, + }; + + t.same(aliasedArgv, expected); + t.same(propertyArgv, expected); + t.end(); +}); + +test('boolean and alias with options hash', function (t) { + var aliased = [ '-h', 'derp' ]; + var regular = [ '--herp', 'derp' ]; + var opts = { + herp: { alias: 'h', boolean: true } + }; + var aliasedArgv = optimist(aliased) + .options(opts) + .argv; + var propertyArgv = optimist(regular).options(opts).argv; + var expected = { + herp: true, + h: true, + '_': [ 'derp' ], + '$0': $0, + }; + + t.same(aliasedArgv, expected); + t.same(propertyArgv, expected); + + t.end(); +}); + +test('boolean and alias using explicit true', function (t) { + var aliased = [ '-h', 'true' ]; + var regular = [ '--herp', 'true' ]; + var opts = { + herp: { alias: 'h', boolean: true } + }; + var aliasedArgv = optimist(aliased) + .boolean('h') + .alias('h', 'herp') + .argv; + var propertyArgv = optimist(regular) + .boolean('h') + .alias('h', 'herp') + .argv; + var expected = { + herp: true, + h: true, + '_': [ ], + '$0': $0, + }; + + t.same(aliasedArgv, expected); + t.same(propertyArgv, expected); + t.end(); +}); + +// regression, see https://github.com/substack/node-optimist/issues/71 +test('boolean and --x=true', function(t) { + var parsed = optimist(['--boool', '--other=true']).boolean('boool').argv; + + t.same(parsed.boool, true); + t.same(parsed.other, 'true'); + + parsed = optimist(['--boool', '--other=false']).boolean('boool').argv; + + t.same(parsed.boool, true); + t.same(parsed.other, 'false'); + t.end(); +}); diff --git a/node_modules/http-server/node_modules/optimist/test/parse_modified.js b/node_modules/http-server/node_modules/optimist/test/parse_modified.js new file mode 100644 index 0000000..a57dc84 --- /dev/null +++ b/node_modules/http-server/node_modules/optimist/test/parse_modified.js @@ -0,0 +1,14 @@ +var optimist = require('../'); +var test = require('tap').test; + +test('parse with modifier functions' , function (t) { + t.plan(1); + + var argv = optimist().boolean('b').parse([ '-b', '123' ]); + t.deepEqual(fix(argv), { b: true, _: ['123'] }); +}); + +function fix (obj) { + delete obj.$0; + return obj; +} diff --git a/node_modules/http-server/node_modules/optimist/test/short.js b/node_modules/http-server/node_modules/optimist/test/short.js new file mode 100644 index 0000000..b2c38ad --- /dev/null +++ b/node_modules/http-server/node_modules/optimist/test/short.js @@ -0,0 +1,16 @@ +var optimist = require('../index'); +var test = require('tap').test; + +test('-n123', function (t) { + t.plan(1); + var parse = optimist.parse([ '-n123' ]); + t.equal(parse.n, 123); +}); + +test('-123', function (t) { + t.plan(3); + var parse = optimist.parse([ '-123', '456' ]); + t.equal(parse['1'], true); + t.equal(parse['2'], true); + t.equal(parse['3'], 456); +}); diff --git a/node_modules/http-server/node_modules/optimist/test/usage.js b/node_modules/http-server/node_modules/optimist/test/usage.js new file mode 100644 index 0000000..300454c --- /dev/null +++ b/node_modules/http-server/node_modules/optimist/test/usage.js @@ -0,0 +1,292 @@ +var Hash = require('hashish'); +var optimist = require('../index'); +var test = require('tap').test; + +test('usageFail', function (t) { + var r = checkUsage(function () { + return optimist('-x 10 -z 20'.split(' ')) + .usage('Usage: $0 -x NUM -y NUM') + .demand(['x','y']) + .argv; + }); + t.same( + r.result, + { x : 10, z : 20, _ : [], $0 : './usage' } + ); + + t.same( + r.errors.join('\n').split(/\n+/), + [ + 'Usage: ./usage -x NUM -y NUM', + 'Options:', + ' -x [required]', + ' -y [required]', + 'Missing required arguments: y', + ] + ); + t.same(r.logs, []); + t.ok(r.exit); + t.end(); +}); + + +test('usagePass', function (t) { + var r = checkUsage(function () { + return optimist('-x 10 -y 20'.split(' ')) + .usage('Usage: $0 -x NUM -y NUM') + .demand(['x','y']) + .argv; + }); + t.same(r, { + result : { x : 10, y : 20, _ : [], $0 : './usage' }, + errors : [], + logs : [], + exit : false, + }); + t.end(); +}); + +test('checkPass', function (t) { + var r = checkUsage(function () { + return optimist('-x 10 -y 20'.split(' ')) + .usage('Usage: $0 -x NUM -y NUM') + .check(function (argv) { + if (!('x' in argv)) throw 'You forgot about -x'; + if (!('y' in argv)) throw 'You forgot about -y'; + }) + .argv; + }); + t.same(r, { + result : { x : 10, y : 20, _ : [], $0 : './usage' }, + errors : [], + logs : [], + exit : false, + }); + t.end(); +}); + +test('checkFail', function (t) { + var r = checkUsage(function () { + return optimist('-x 10 -z 20'.split(' ')) + .usage('Usage: $0 -x NUM -y NUM') + .check(function (argv) { + if (!('x' in argv)) throw 'You forgot about -x'; + if (!('y' in argv)) throw 'You forgot about -y'; + }) + .argv; + }); + + t.same( + r.result, + { x : 10, z : 20, _ : [], $0 : './usage' } + ); + + t.same( + r.errors.join('\n').split(/\n+/), + [ + 'Usage: ./usage -x NUM -y NUM', + 'You forgot about -y' + ] + ); + + t.same(r.logs, []); + t.ok(r.exit); + t.end(); +}); + +test('checkCondPass', function (t) { + function checker (argv) { + return 'x' in argv && 'y' in argv; + } + + var r = checkUsage(function () { + return optimist('-x 10 -y 20'.split(' ')) + .usage('Usage: $0 -x NUM -y NUM') + .check(checker) + .argv; + }); + t.same(r, { + result : { x : 10, y : 20, _ : [], $0 : './usage' }, + errors : [], + logs : [], + exit : false, + }); + t.end(); +}); + +test('checkCondFail', function (t) { + function checker (argv) { + return 'x' in argv && 'y' in argv; + } + + var r = checkUsage(function () { + return optimist('-x 10 -z 20'.split(' ')) + .usage('Usage: $0 -x NUM -y NUM') + .check(checker) + .argv; + }); + + t.same( + r.result, + { x : 10, z : 20, _ : [], $0 : './usage' } + ); + + t.same( + r.errors.join('\n').split(/\n+/).join('\n'), + 'Usage: ./usage -x NUM -y NUM\n' + + 'Argument check failed: ' + checker.toString() + ); + + t.same(r.logs, []); + t.ok(r.exit); + t.end(); +}); + +test('countPass', function (t) { + var r = checkUsage(function () { + return optimist('1 2 3 --moo'.split(' ')) + .usage('Usage: $0 [x] [y] [z] {OPTIONS}') + .demand(3) + .argv; + }); + t.same(r, { + result : { _ : [ '1', '2', '3' ], moo : true, $0 : './usage' }, + errors : [], + logs : [], + exit : false, + }); + t.end(); +}); + +test('countFail', function (t) { + var r = checkUsage(function () { + return optimist('1 2 --moo'.split(' ')) + .usage('Usage: $0 [x] [y] [z] {OPTIONS}') + .demand(3) + .argv; + }); + t.same( + r.result, + { _ : [ '1', '2' ], moo : true, $0 : './usage' } + ); + + t.same( + r.errors.join('\n').split(/\n+/), + [ + 'Usage: ./usage [x] [y] [z] {OPTIONS}', + 'Not enough non-option arguments: got 2, need at least 3', + ] + ); + + t.same(r.logs, []); + t.ok(r.exit); + t.end(); +}); + +test('defaultSingles', function (t) { + var r = checkUsage(function () { + return optimist('--foo 50 --baz 70 --powsy'.split(' ')) + .default('foo', 5) + .default('bar', 6) + .default('baz', 7) + .argv + ; + }); + t.same(r.result, { + foo : '50', + bar : 6, + baz : '70', + powsy : true, + _ : [], + $0 : './usage', + }); + t.end(); +}); + +test('defaultAliases', function (t) { + var r = checkUsage(function () { + return optimist('') + .alias('f', 'foo') + .default('f', 5) + .argv + ; + }); + t.same(r.result, { + f : '5', + foo : '5', + _ : [], + $0 : './usage', + }); + t.end(); +}); + +test('defaultHash', function (t) { + var r = checkUsage(function () { + return optimist('--foo 50 --baz 70'.split(' ')) + .default({ foo : 10, bar : 20, quux : 30 }) + .argv + ; + }); + t.same(r.result, { + _ : [], + $0 : './usage', + foo : 50, + baz : 70, + bar : 20, + quux : 30, + }); + t.end(); +}); + +test('rebase', function (t) { + t.equal( + optimist.rebase('/home/substack', '/home/substack/foo/bar/baz'), + './foo/bar/baz' + ); + t.equal( + optimist.rebase('/home/substack/foo/bar/baz', '/home/substack'), + '../../..' + ); + t.equal( + optimist.rebase('/home/substack/foo', '/home/substack/pow/zoom.txt'), + '../pow/zoom.txt' + ); + t.end(); +}); + +function checkUsage (f) { + + var exit = false; + + process._exit = process.exit; + process._env = process.env; + process._argv = process.argv; + + process.exit = function (t) { exit = true }; + process.env = Hash.merge(process.env, { _ : 'node' }); + process.argv = [ './usage' ]; + + var errors = []; + var logs = []; + + console._error = console.error; + console.error = function (msg) { errors.push(msg) }; + console._log = console.log; + console.log = function (msg) { logs.push(msg) }; + + var result = f(); + + process.exit = process._exit; + process.env = process._env; + process.argv = process._argv; + + console.error = console._error; + console.log = console._log; + + return { + errors : errors, + logs : logs, + exit : exit, + result : result, + }; +}; diff --git a/node_modules/http-server/node_modules/optimist/test/whitespace.js b/node_modules/http-server/node_modules/optimist/test/whitespace.js new file mode 100644 index 0000000..90b9075 --- /dev/null +++ b/node_modules/http-server/node_modules/optimist/test/whitespace.js @@ -0,0 +1,8 @@ +var optimist = require('../'); +var test = require('tap').test; + +test('whitespace should be whitespace' , function (t) { + t.plan(1); + var x = optimist.parse([ '-x', '\t' ]).x; + t.equal(x, '\t'); +}); diff --git a/node_modules/http-server/node_modules/portfinder/.npmignore b/node_modules/http-server/node_modules/portfinder/.npmignore new file mode 100644 index 0000000..5171c54 --- /dev/null +++ b/node_modules/http-server/node_modules/portfinder/.npmignore @@ -0,0 +1,2 @@ +node_modules +npm-debug.log \ No newline at end of file diff --git a/node_modules/http-server/node_modules/portfinder/.travis.yml b/node_modules/http-server/node_modules/portfinder/.travis.yml new file mode 100644 index 0000000..62b5273 --- /dev/null +++ b/node_modules/http-server/node_modules/portfinder/.travis.yml @@ -0,0 +1,21 @@ +language: node_js +node_js: + - "0.8" + - "0.10" + - "0.11" + +before_install: + - travis_retry npm install -g npm + - travis_retry npm install + +script: + - npm test + +matrix: + allow_failures: + - node_js: "0.11" + +notifications: + email: + - travis@nodejitsu.com + irc: "irc.freenode.org#nodejitsu" diff --git a/node_modules/http-server/node_modules/portfinder/LICENSE b/node_modules/http-server/node_modules/portfinder/LICENSE new file mode 100644 index 0000000..d26f4a2 --- /dev/null +++ b/node_modules/http-server/node_modules/portfinder/LICENSE @@ -0,0 +1,22 @@ +node-portfinder + +Copyright (c) 2012 Charlie Robbins + +Permission is hereby granted, free of charge, to any person obtaining +a copy of this software and associated documentation files (the +"Software"), to deal in the Software without restriction, including +without limitation the rights to use, copy, modify, merge, publish, +distribute, sublicense, and/or sell copies of the Software, and to +permit persons to whom the Software is furnished to do so, subject to +the following conditions: + +The above copyright notice and this permission notice shall be +included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE +LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION +OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION +WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. \ No newline at end of file diff --git a/node_modules/http-server/node_modules/portfinder/README.md b/node_modules/http-server/node_modules/portfinder/README.md new file mode 100644 index 0000000..229ccf0 --- /dev/null +++ b/node_modules/http-server/node_modules/portfinder/README.md @@ -0,0 +1,38 @@ +# node-portfinder [![Build Status](https://api.travis-ci.org/indexzero/node-portfinder.svg)](https://travis-ci.org/indexzero/node-portfinder) + +## Installation + +### Installing npm (node package manager) +``` bash + curl http://npmjs.org/install.sh | sh +``` + +### Installing node-portfinder +``` bash + $ [sudo] npm install portfinder +``` + +## Usage +The `portfinder` module has a simple interface: + +``` js + var portfinder = require('portfinder'); + + portfinder.getPort(function (err, port) { + // + // `port` is guaranteed to be a free port + // in this scope. + // + }); +``` + +By default `portfinder` will start searching from `8000`. To change this simply set `portfinder.basePort`. + +## Run Tests +``` bash + $ npm test +``` + +#### Author: [Charlie Robbins][0] +#### License: MIT/X11 +[0]: http://nodejitsu.com diff --git a/node_modules/http-server/node_modules/portfinder/lib/portfinder.js b/node_modules/http-server/node_modules/portfinder/lib/portfinder.js new file mode 100644 index 0000000..3da2562 --- /dev/null +++ b/node_modules/http-server/node_modules/portfinder/lib/portfinder.js @@ -0,0 +1,218 @@ +/* + * portfinder.js: A simple tool to find an open port on the current machine. + * + * (C) 2011, Charlie Robbins + * + */ + +var fs = require('fs'), + net = require('net'), + path = require('path'), + async = require('async'), + mkdirp = require('mkdirp').mkdirp; + +// +// ### @basePort {Number} +// The lowest port to begin any port search from +// +exports.basePort = 8000; + +// +// ### @basePath {string} +// Default path to begin any socket search from +// +exports.basePath = '/tmp/portfinder' + +// +// ### function getPort (options, callback) +// #### @options {Object} Settings to use when finding the necessary port +// #### @callback {function} Continuation to respond to when complete. +// Responds with a unbound port on the current machine. +// +exports.getPort = function (options, callback) { + if (!callback) { + callback = options; + options = {}; + } + + options.port = options.port || exports.basePort; + options.host = options.host || null; + options.server = options.server || net.createServer(function () { + // + // Create an empty listener for the port testing server. + // + }); + + function onListen () { + options.server.removeListener('error', onError); + options.server.close(); + callback(null, options.port) + } + + function onError (err) { + options.server.removeListener('listening', onListen); + + if (err.code !== 'EADDRINUSE' && err.code !== 'EACCES') { + return callback(err); + } + + exports.getPort({ + port: exports.nextPort(options.port), + host: options.host, + server: options.server + }, callback); + } + + options.server.once('error', onError); + options.server.once('listening', onListen); + options.server.listen(options.port, options.host); +}; + +// +// ### function getPorts (count, options, callback) +// #### @count {Number} The number of ports to find +// #### @options {Object} Settings to use when finding the necessary port +// #### @callback {function} Continuation to respond to when complete. +// Responds with an array of unbound ports on the current machine. +// +exports.getPorts = function (count, options, callback) { + if (!callback) { + callback = options; + options = {}; + } + + var lastPort = null; + async.timesSeries(count, function(index, asyncCallback) { + if (lastPort) { + options.port = exports.nextPort(lastPort); + } + + exports.getPort(options, function (err, port) { + if (err) { + asyncCallback(err); + } else { + lastPort = port; + asyncCallback(null, port); + } + }); + }, callback); +}; + +// +// ### function getSocket (options, callback) +// #### @options {Object} Settings to use when finding the necessary port +// #### @callback {function} Continuation to respond to when complete. +// Responds with a unbound socket using the specified directory and base +// name on the current machine. +// +exports.getSocket = function (options, callback) { + if (!callback) { + callback = options; + options = {}; + } + + options.mod = options.mod || 0755; + options.path = options.path || exports.basePath + '.sock'; + + // + // Tests the specified socket + // + function testSocket () { + fs.stat(options.path, function (err) { + // + // If file we're checking doesn't exist (thus, stating it emits ENOENT), + // we should be OK with listening on this socket. + // + if (err) { + if (err.code == 'ENOENT') { + callback(null, options.path); + } + else { + callback(err); + } + } + else { + // + // This file exists, so it isn't possible to listen on it. Lets try + // next socket. + // + options.path = exports.nextSocket(options.path); + exports.getSocket(options, callback); + } + }); + } + + // + // Create the target `dir` then test connection + // against the socket. + // + function createAndTestSocket (dir) { + mkdirp(dir, options.mod, function (err) { + if (err) { + return callback(err); + } + + options.exists = true; + testSocket(); + }); + } + + // + // Check if the parent directory of the target + // socket path exists. If it does, test connection + // against the socket. Otherwise, create the directory + // then test connection. + // + function checkAndTestSocket () { + var dir = path.dirname(options.path); + + fs.stat(dir, function (err, stats) { + if (err || !stats.isDirectory()) { + return createAndTestSocket(dir); + } + + options.exists = true; + testSocket(); + }); + } + + // + // If it has been explicitly stated that the + // target `options.path` already exists, then + // simply test the socket. + // + return options.exists + ? testSocket() + : checkAndTestSocket(); +}; + +// +// ### function nextPort (port) +// #### @port {Number} Port to increment from. +// Gets the next port in sequence from the +// specified `port`. +// +exports.nextPort = function (port) { + return port + 1; +}; + +// +// ### function nextSocket (socketPath) +// #### @socketPath {string} Path to increment from +// Gets the next socket path in sequence from the +// specified `socketPath`. +// +exports.nextSocket = function (socketPath) { + var dir = path.dirname(socketPath), + name = path.basename(socketPath, '.sock'), + match = name.match(/^([a-zA-z]+)(\d*)$/i), + index = parseInt(match[2]), + base = match[1]; + + if (isNaN(index)) { + index = 0; + } + + index += 1; + return path.join(dir, base + index + '.sock'); +}; diff --git a/node_modules/http-server/node_modules/portfinder/node_modules/.bin/mkdirp b/node_modules/http-server/node_modules/portfinder/node_modules/.bin/mkdirp new file mode 120000 index 0000000..017896c --- /dev/null +++ b/node_modules/http-server/node_modules/portfinder/node_modules/.bin/mkdirp @@ -0,0 +1 @@ +../mkdirp/bin/cmd.js \ No newline at end of file diff --git a/node_modules/http-server/node_modules/portfinder/node_modules/async/.travis.yml b/node_modules/http-server/node_modules/portfinder/node_modules/async/.travis.yml new file mode 100644 index 0000000..6e5919d --- /dev/null +++ b/node_modules/http-server/node_modules/portfinder/node_modules/async/.travis.yml @@ -0,0 +1,3 @@ +language: node_js +node_js: + - "0.10" diff --git a/node_modules/http-server/node_modules/portfinder/node_modules/async/LICENSE b/node_modules/http-server/node_modules/portfinder/node_modules/async/LICENSE new file mode 100644 index 0000000..8f29698 --- /dev/null +++ b/node_modules/http-server/node_modules/portfinder/node_modules/async/LICENSE @@ -0,0 +1,19 @@ +Copyright (c) 2010-2014 Caolan McMahon + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. diff --git a/node_modules/http-server/node_modules/portfinder/node_modules/async/README.md b/node_modules/http-server/node_modules/portfinder/node_modules/async/README.md new file mode 100644 index 0000000..0bea531 --- /dev/null +++ b/node_modules/http-server/node_modules/portfinder/node_modules/async/README.md @@ -0,0 +1,1646 @@ +# Async.js + +[![Build Status via Travis CI](https://travis-ci.org/caolan/async.svg?branch=master)](https://travis-ci.org/caolan/async) + + +Async is a utility module which provides straight-forward, powerful functions +for working with asynchronous JavaScript. Although originally designed for +use with [Node.js](http://nodejs.org), it can also be used directly in the +browser. Also supports [component](https://github.com/component/component). + +Async provides around 20 functions that include the usual 'functional' +suspects (`map`, `reduce`, `filter`, `each`…) as well as some common patterns +for asynchronous control flow (`parallel`, `series`, `waterfall`…). All these +functions assume you follow the Node.js convention of providing a single +callback as the last argument of your `async` function. + + +## Quick Examples + +```javascript +async.map(['file1','file2','file3'], fs.stat, function(err, results){ + // results is now an array of stats for each file +}); + +async.filter(['file1','file2','file3'], fs.exists, function(results){ + // results now equals an array of the existing files +}); + +async.parallel([ + function(){ ... }, + function(){ ... } +], callback); + +async.series([ + function(){ ... }, + function(){ ... } +]); +``` + +There are many more functions available so take a look at the docs below for a +full list. This module aims to be comprehensive, so if you feel anything is +missing please create a GitHub issue for it. + +## Common Pitfalls + +### Binding a context to an iterator + +This section is really about `bind`, not about `async`. If you are wondering how to +make `async` execute your iterators in a given context, or are confused as to why +a method of another library isn't working as an iterator, study this example: + +```js +// Here is a simple object with an (unnecessarily roundabout) squaring method +var AsyncSquaringLibrary = { + squareExponent: 2, + square: function(number, callback){ + var result = Math.pow(number, this.squareExponent); + setTimeout(function(){ + callback(null, result); + }, 200); + } +}; + +async.map([1, 2, 3], AsyncSquaringLibrary.square, function(err, result){ + // result is [NaN, NaN, NaN] + // This fails because the `this.squareExponent` expression in the square + // function is not evaluated in the context of AsyncSquaringLibrary, and is + // therefore undefined. +}); + +async.map([1, 2, 3], AsyncSquaringLibrary.square.bind(AsyncSquaringLibrary), function(err, result){ + // result is [1, 4, 9] + // With the help of bind we can attach a context to the iterator before + // passing it to async. Now the square function will be executed in its + // 'home' AsyncSquaringLibrary context and the value of `this.squareExponent` + // will be as expected. +}); +``` + +## Download + +The source is available for download from +[GitHub](http://github.com/caolan/async). +Alternatively, you can install using Node Package Manager (`npm`): + + npm install async + +__Development:__ [async.js](https://github.com/caolan/async/raw/master/lib/async.js) - 29.6kb Uncompressed + +## In the Browser + +So far it's been tested in IE6, IE7, IE8, FF3.6 and Chrome 5. + +Usage: + +```html + + +``` + +## Documentation + +### Collections + +* [`each`](#each) +* [`eachSeries`](#eachSeries) +* [`eachLimit`](#eachLimit) +* [`map`](#map) +* [`mapSeries`](#mapSeries) +* [`mapLimit`](#mapLimit) +* [`filter`](#filter) +* [`filterSeries`](#filterSeries) +* [`reject`](#reject) +* [`rejectSeries`](#rejectSeries) +* [`reduce`](#reduce) +* [`reduceRight`](#reduceRight) +* [`detect`](#detect) +* [`detectSeries`](#detectSeries) +* [`sortBy`](#sortBy) +* [`some`](#some) +* [`every`](#every) +* [`concat`](#concat) +* [`concatSeries`](#concatSeries) + +### Control Flow + +* [`series`](#seriestasks-callback) +* [`parallel`](#parallel) +* [`parallelLimit`](#parallellimittasks-limit-callback) +* [`whilst`](#whilst) +* [`doWhilst`](#doWhilst) +* [`until`](#until) +* [`doUntil`](#doUntil) +* [`forever`](#forever) +* [`waterfall`](#waterfall) +* [`compose`](#compose) +* [`seq`](#seq) +* [`applyEach`](#applyEach) +* [`applyEachSeries`](#applyEachSeries) +* [`queue`](#queue) +* [`priorityQueue`](#priorityQueue) +* [`cargo`](#cargo) +* [`auto`](#auto) +* [`retry`](#retry) +* [`iterator`](#iterator) +* [`apply`](#apply) +* [`nextTick`](#nextTick) +* [`times`](#times) +* [`timesSeries`](#timesSeries) + +### Utils + +* [`memoize`](#memoize) +* [`unmemoize`](#unmemoize) +* [`log`](#log) +* [`dir`](#dir) +* [`noConflict`](#noConflict) + + +## Collections + + + +### each(arr, iterator, callback) + +Applies the function `iterator` to each item in `arr`, in parallel. +The `iterator` is called with an item from the list, and a callback for when it +has finished. If the `iterator` passes an error to its `callback`, the main +`callback` (for the `each` function) is immediately called with the error. + +Note, that since this function applies `iterator` to each item in parallel, +there is no guarantee that the iterator functions will complete in order. + +__Arguments__ + +* `arr` - An array to iterate over. +* `iterator(item, callback)` - A function to apply to each item in `arr`. + The iterator is passed a `callback(err)` which must be called once it has + completed. If no error has occured, the `callback` should be run without + arguments or with an explicit `null` argument. +* `callback(err)` - A callback which is called when all `iterator` functions + have finished, or an error occurs. + +__Examples__ + + +```js +// assuming openFiles is an array of file names and saveFile is a function +// to save the modified contents of that file: + +async.each(openFiles, saveFile, function(err){ + // if any of the saves produced an error, err would equal that error +}); +``` + +```js +// assuming openFiles is an array of file names + +async.each(openFiles, function( file, callback) { + + // Perform operation on file here. + console.log('Processing file ' + file); + + if( file.length > 32 ) { + console.log('This file name is too long'); + callback('File name too long'); + } else { + // Do work to process file here + console.log('File processed'); + callback(); + } +}, function(err){ + // if any of the file processing produced an error, err would equal that error + if( err ) { + // One of the iterations produced an error. + // All processing will now stop. + console.log('A file failed to process'); + } else { + console.log('All files have been processed successfully'); + } +}); +``` + +--------------------------------------- + + + +### eachSeries(arr, iterator, callback) + +The same as [`each`](#each), only `iterator` is applied to each item in `arr` in +series. The next `iterator` is only called once the current one has completed. +This means the `iterator` functions will complete in order. + + +--------------------------------------- + + + +### eachLimit(arr, limit, iterator, callback) + +The same as [`each`](#each), only no more than `limit` `iterator`s will be simultaneously +running at any time. + +Note that the items in `arr` are not processed in batches, so there is no guarantee that +the first `limit` `iterator` functions will complete before any others are started. + +__Arguments__ + +* `arr` - An array to iterate over. +* `limit` - The maximum number of `iterator`s to run at any time. +* `iterator(item, callback)` - A function to apply to each item in `arr`. + The iterator is passed a `callback(err)` which must be called once it has + completed. If no error has occured, the callback should be run without + arguments or with an explicit `null` argument. +* `callback(err)` - A callback which is called when all `iterator` functions + have finished, or an error occurs. + +__Example__ + +```js +// Assume documents is an array of JSON objects and requestApi is a +// function that interacts with a rate-limited REST api. + +async.eachLimit(documents, 20, requestApi, function(err){ + // if any of the saves produced an error, err would equal that error +}); +``` + +--------------------------------------- + + +### map(arr, iterator, callback) + +Produces a new array of values by mapping each value in `arr` through +the `iterator` function. The `iterator` is called with an item from `arr` and a +callback for when it has finished processing. Each of these callback takes 2 arguments: +an `error`, and the transformed item from `arr`. If `iterator` passes an error to this +callback, the main `callback` (for the `map` function) is immediately called with the error. + +Note, that since this function applies the `iterator` to each item in parallel, +there is no guarantee that the `iterator` functions will complete in order. +However, the results array will be in the same order as the original `arr`. + +__Arguments__ + +* `arr` - An array to iterate over. +* `iterator(item, callback)` - A function to apply to each item in `arr`. + The iterator is passed a `callback(err, transformed)` which must be called once + it has completed with an error (which can be `null`) and a transformed item. +* `callback(err, results)` - A callback which is called when all `iterator` + functions have finished, or an error occurs. Results is an array of the + transformed items from the `arr`. + +__Example__ + +```js +async.map(['file1','file2','file3'], fs.stat, function(err, results){ + // results is now an array of stats for each file +}); +``` + +--------------------------------------- + + +### mapSeries(arr, iterator, callback) + +The same as [`map`](#map), only the `iterator` is applied to each item in `arr` in +series. The next `iterator` is only called once the current one has completed. +The results array will be in the same order as the original. + + +--------------------------------------- + + +### mapLimit(arr, limit, iterator, callback) + +The same as [`map`](#map), only no more than `limit` `iterator`s will be simultaneously +running at any time. + +Note that the items are not processed in batches, so there is no guarantee that +the first `limit` `iterator` functions will complete before any others are started. + +__Arguments__ + +* `arr` - An array to iterate over. +* `limit` - The maximum number of `iterator`s to run at any time. +* `iterator(item, callback)` - A function to apply to each item in `arr`. + The iterator is passed a `callback(err, transformed)` which must be called once + it has completed with an error (which can be `null`) and a transformed item. +* `callback(err, results)` - A callback which is called when all `iterator` + calls have finished, or an error occurs. The result is an array of the + transformed items from the original `arr`. + +__Example__ + +```js +async.mapLimit(['file1','file2','file3'], 1, fs.stat, function(err, results){ + // results is now an array of stats for each file +}); +``` + +--------------------------------------- + + + +### filter(arr, iterator, callback) + +__Alias:__ `select` + +Returns a new array of all the values in `arr` which pass an async truth test. +_The callback for each `iterator` call only accepts a single argument of `true` or +`false`; it does not accept an error argument first!_ This is in-line with the +way node libraries work with truth tests like `fs.exists`. This operation is +performed in parallel, but the results array will be in the same order as the +original. + +__Arguments__ + +* `arr` - An array to iterate over. +* `iterator(item, callback)` - A truth test to apply to each item in `arr`. + The `iterator` is passed a `callback(truthValue)`, which must be called with a + boolean argument once it has completed. +* `callback(results)` - A callback which is called after all the `iterator` + functions have finished. + +__Example__ + +```js +async.filter(['file1','file2','file3'], fs.exists, function(results){ + // results now equals an array of the existing files +}); +``` + +--------------------------------------- + + + +### filterSeries(arr, iterator, callback) + +__Alias:__ `selectSeries` + +The same as [`filter`](#filter) only the `iterator` is applied to each item in `arr` in +series. The next `iterator` is only called once the current one has completed. +The results array will be in the same order as the original. + +--------------------------------------- + + +### reject(arr, iterator, callback) + +The opposite of [`filter`](#filter). Removes values that pass an `async` truth test. + +--------------------------------------- + + +### rejectSeries(arr, iterator, callback) + +The same as [`reject`](#reject), only the `iterator` is applied to each item in `arr` +in series. + + +--------------------------------------- + + +### reduce(arr, memo, iterator, callback) + +__Aliases:__ `inject`, `foldl` + +Reduces `arr` into a single value using an async `iterator` to return +each successive step. `memo` is the initial state of the reduction. +This function only operates in series. + +For performance reasons, it may make sense to split a call to this function into +a parallel map, and then use the normal `Array.prototype.reduce` on the results. +This function is for situations where each step in the reduction needs to be async; +if you can get the data before reducing it, then it's probably a good idea to do so. + +__Arguments__ + +* `arr` - An array to iterate over. +* `memo` - The initial state of the reduction. +* `iterator(memo, item, callback)` - A function applied to each item in the + array to produce the next step in the reduction. The `iterator` is passed a + `callback(err, reduction)` which accepts an optional error as its first + argument, and the state of the reduction as the second. If an error is + passed to the callback, the reduction is stopped and the main `callback` is + immediately called with the error. +* `callback(err, result)` - A callback which is called after all the `iterator` + functions have finished. Result is the reduced value. + +__Example__ + +```js +async.reduce([1,2,3], 0, function(memo, item, callback){ + // pointless async: + process.nextTick(function(){ + callback(null, memo + item) + }); +}, function(err, result){ + // result is now equal to the last value of memo, which is 6 +}); +``` + +--------------------------------------- + + +### reduceRight(arr, memo, iterator, callback) + +__Alias:__ `foldr` + +Same as [`reduce`](#reduce), only operates on `arr` in reverse order. + + +--------------------------------------- + + +### detect(arr, iterator, callback) + +Returns the first value in `arr` that passes an async truth test. The +`iterator` is applied in parallel, meaning the first iterator to return `true` will +fire the detect `callback` with that result. That means the result might not be +the first item in the original `arr` (in terms of order) that passes the test. + +If order within the original `arr` is important, then look at [`detectSeries`](#detectSeries). + +__Arguments__ + +* `arr` - An array to iterate over. +* `iterator(item, callback)` - A truth test to apply to each item in `arr`. + The iterator is passed a `callback(truthValue)` which must be called with a + boolean argument once it has completed. +* `callback(result)` - A callback which is called as soon as any iterator returns + `true`, or after all the `iterator` functions have finished. Result will be + the first item in the array that passes the truth test (iterator) or the + value `undefined` if none passed. + +__Example__ + +```js +async.detect(['file1','file2','file3'], fs.exists, function(result){ + // result now equals the first file in the list that exists +}); +``` + +--------------------------------------- + + +### detectSeries(arr, iterator, callback) + +The same as [`detect`](#detect), only the `iterator` is applied to each item in `arr` +in series. This means the result is always the first in the original `arr` (in +terms of array order) that passes the truth test. + + +--------------------------------------- + + +### sortBy(arr, iterator, callback) + +Sorts a list by the results of running each `arr` value through an async `iterator`. + +__Arguments__ + +* `arr` - An array to iterate over. +* `iterator(item, callback)` - A function to apply to each item in `arr`. + The iterator is passed a `callback(err, sortValue)` which must be called once it + has completed with an error (which can be `null`) and a value to use as the sort + criteria. +* `callback(err, results)` - A callback which is called after all the `iterator` + functions have finished, or an error occurs. Results is the items from + the original `arr` sorted by the values returned by the `iterator` calls. + +__Example__ + +```js +async.sortBy(['file1','file2','file3'], function(file, callback){ + fs.stat(file, function(err, stats){ + callback(err, stats.mtime); + }); +}, function(err, results){ + // results is now the original array of files sorted by + // modified date +}); +``` + +__Sort Order__ + +By modifying the callback parameter the sorting order can be influenced: + +```js +//ascending order +async.sortBy([1,9,3,5], function(x, callback){ + callback(err, x); +}, function(err,result){ + //result callback +} ); + +//descending order +async.sortBy([1,9,3,5], function(x, callback){ + callback(err, x*-1); //<- x*-1 instead of x, turns the order around +}, function(err,result){ + //result callback +} ); +``` + +--------------------------------------- + + +### some(arr, iterator, callback) + +__Alias:__ `any` + +Returns `true` if at least one element in the `arr` satisfies an async test. +_The callback for each iterator call only accepts a single argument of `true` or +`false`; it does not accept an error argument first!_ This is in-line with the +way node libraries work with truth tests like `fs.exists`. Once any iterator +call returns `true`, the main `callback` is immediately called. + +__Arguments__ + +* `arr` - An array to iterate over. +* `iterator(item, callback)` - A truth test to apply to each item in the array + in parallel. The iterator is passed a callback(truthValue) which must be + called with a boolean argument once it has completed. +* `callback(result)` - A callback which is called as soon as any iterator returns + `true`, or after all the iterator functions have finished. Result will be + either `true` or `false` depending on the values of the async tests. + +__Example__ + +```js +async.some(['file1','file2','file3'], fs.exists, function(result){ + // if result is true then at least one of the files exists +}); +``` + +--------------------------------------- + + +### every(arr, iterator, callback) + +__Alias:__ `all` + +Returns `true` if every element in `arr` satisfies an async test. +_The callback for each `iterator` call only accepts a single argument of `true` or +`false`; it does not accept an error argument first!_ This is in-line with the +way node libraries work with truth tests like `fs.exists`. + +__Arguments__ + +* `arr` - An array to iterate over. +* `iterator(item, callback)` - A truth test to apply to each item in the array + in parallel. The iterator is passed a callback(truthValue) which must be + called with a boolean argument once it has completed. +* `callback(result)` - A callback which is called after all the `iterator` + functions have finished. Result will be either `true` or `false` depending on + the values of the async tests. + +__Example__ + +```js +async.every(['file1','file2','file3'], fs.exists, function(result){ + // if result is true then every file exists +}); +``` + +--------------------------------------- + + +### concat(arr, iterator, callback) + +Applies `iterator` to each item in `arr`, concatenating the results. Returns the +concatenated list. The `iterator`s are called in parallel, and the results are +concatenated as they return. There is no guarantee that the results array will +be returned in the original order of `arr` passed to the `iterator` function. + +__Arguments__ + +* `arr` - An array to iterate over. +* `iterator(item, callback)` - A function to apply to each item in `arr`. + The iterator is passed a `callback(err, results)` which must be called once it + has completed with an error (which can be `null`) and an array of results. +* `callback(err, results)` - A callback which is called after all the `iterator` + functions have finished, or an error occurs. Results is an array containing + the concatenated results of the `iterator` function. + +__Example__ + +```js +async.concat(['dir1','dir2','dir3'], fs.readdir, function(err, files){ + // files is now a list of filenames that exist in the 3 directories +}); +``` + +--------------------------------------- + + +### concatSeries(arr, iterator, callback) + +Same as [`concat`](#concat), but executes in series instead of parallel. + + +## Control Flow + + +### series(tasks, [callback]) + +Run the functions in the `tasks` array in series, each one running once the previous +function has completed. If any functions in the series pass an error to its +callback, no more functions are run, and `callback` is immediately called with the value of the error. +Otherwise, `callback` receives an array of results when `tasks` have completed. + +It is also possible to use an object instead of an array. Each property will be +run as a function, and the results will be passed to the final `callback` as an object +instead of an array. This can be a more readable way of handling results from +[`series`](#series). + +**Note** that while many implementations preserve the order of object properties, the +[ECMAScript Language Specifcation](http://www.ecma-international.org/ecma-262/5.1/#sec-8.6) +explicitly states that + +> The mechanics and order of enumerating the properties is not specified. + +So if you rely on the order in which your series of functions are executed, and want +this to work on all platforms, consider using an array. + +__Arguments__ + +* `tasks` - An array or object containing functions to run, each function is passed + a `callback(err, result)` it must call on completion with an error `err` (which can + be `null`) and an optional `result` value. +* `callback(err, results)` - An optional callback to run once all the functions + have completed. This function gets a results array (or object) containing all + the result arguments passed to the `task` callbacks. + +__Example__ + +```js +async.series([ + function(callback){ + // do some stuff ... + callback(null, 'one'); + }, + function(callback){ + // do some more stuff ... + callback(null, 'two'); + } +], +// optional callback +function(err, results){ + // results is now equal to ['one', 'two'] +}); + + +// an example using an object instead of an array +async.series({ + one: function(callback){ + setTimeout(function(){ + callback(null, 1); + }, 200); + }, + two: function(callback){ + setTimeout(function(){ + callback(null, 2); + }, 100); + } +}, +function(err, results) { + // results is now equal to: {one: 1, two: 2} +}); +``` + +--------------------------------------- + + +### parallel(tasks, [callback]) + +Run the `tasks` array of functions in parallel, without waiting until the previous +function has completed. If any of the functions pass an error to its +callback, the main `callback` is immediately called with the value of the error. +Once the `tasks` have completed, the results are passed to the final `callback` as an +array. + +It is also possible to use an object instead of an array. Each property will be +run as a function and the results will be passed to the final `callback` as an object +instead of an array. This can be a more readable way of handling results from +[`parallel`](#parallel). + + +__Arguments__ + +* `tasks` - An array or object containing functions to run. Each function is passed + a `callback(err, result)` which it must call on completion with an error `err` + (which can be `null`) and an optional `result` value. +* `callback(err, results)` - An optional callback to run once all the functions + have completed. This function gets a results array (or object) containing all + the result arguments passed to the task callbacks. + +__Example__ + +```js +async.parallel([ + function(callback){ + setTimeout(function(){ + callback(null, 'one'); + }, 200); + }, + function(callback){ + setTimeout(function(){ + callback(null, 'two'); + }, 100); + } +], +// optional callback +function(err, results){ + // the results array will equal ['one','two'] even though + // the second function had a shorter timeout. +}); + + +// an example using an object instead of an array +async.parallel({ + one: function(callback){ + setTimeout(function(){ + callback(null, 1); + }, 200); + }, + two: function(callback){ + setTimeout(function(){ + callback(null, 2); + }, 100); + } +}, +function(err, results) { + // results is now equals to: {one: 1, two: 2} +}); +``` + +--------------------------------------- + + +### parallelLimit(tasks, limit, [callback]) + +The same as [`parallel`](#parallel), only `tasks` are executed in parallel +with a maximum of `limit` tasks executing at any time. + +Note that the `tasks` are not executed in batches, so there is no guarantee that +the first `limit` tasks will complete before any others are started. + +__Arguments__ + +* `tasks` - An array or object containing functions to run, each function is passed + a `callback(err, result)` it must call on completion with an error `err` (which can + be `null`) and an optional `result` value. +* `limit` - The maximum number of `tasks` to run at any time. +* `callback(err, results)` - An optional callback to run once all the functions + have completed. This function gets a results array (or object) containing all + the result arguments passed to the `task` callbacks. + +--------------------------------------- + + +### whilst(test, fn, callback) + +Repeatedly call `fn`, while `test` returns `true`. Calls `callback` when stopped, +or an error occurs. + +__Arguments__ + +* `test()` - synchronous truth test to perform before each execution of `fn`. +* `fn(callback)` - A function which is called each time `test` passes. The function is + passed a `callback(err)`, which must be called once it has completed with an + optional `err` argument. +* `callback(err)` - A callback which is called after the test fails and repeated + execution of `fn` has stopped. + +__Example__ + +```js +var count = 0; + +async.whilst( + function () { return count < 5; }, + function (callback) { + count++; + setTimeout(callback, 1000); + }, + function (err) { + // 5 seconds have passed + } +); +``` + +--------------------------------------- + + +### doWhilst(fn, test, callback) + +The post-check version of [`whilst`](#whilst). To reflect the difference in +the order of operations, the arguments `test` and `fn` are switched. + +`doWhilst` is to `whilst` as `do while` is to `while` in plain JavaScript. + +--------------------------------------- + + +### until(test, fn, callback) + +Repeatedly call `fn` until `test` returns `true`. Calls `callback` when stopped, +or an error occurs. + +The inverse of [`whilst`](#whilst). + +--------------------------------------- + + +### doUntil(fn, test, callback) + +Like [`doWhilst`](#doWhilst), except the `test` is inverted. Note the argument ordering differs from `until`. + +--------------------------------------- + + +### forever(fn, errback) + +Calls the asynchronous function `fn` with a callback parameter that allows it to +call itself again, in series, indefinitely. + +If an error is passed to the callback then `errback` is called with the +error, and execution stops, otherwise it will never be called. + +```js +async.forever( + function(next) { + // next is suitable for passing to things that need a callback(err [, whatever]); + // it will result in this function being called again. + }, + function(err) { + // if next is called with a value in its first parameter, it will appear + // in here as 'err', and execution will stop. + } +); +``` + +--------------------------------------- + + +### waterfall(tasks, [callback]) + +Runs the `tasks` array of functions in series, each passing their results to the next in +the array. However, if any of the `tasks` pass an error to their own callback, the +next function is not executed, and the main `callback` is immediately called with +the error. + +__Arguments__ + +* `tasks` - An array of functions to run, each function is passed a + `callback(err, result1, result2, ...)` it must call on completion. The first + argument is an error (which can be `null`) and any further arguments will be + passed as arguments in order to the next task. +* `callback(err, [results])` - An optional callback to run once all the functions + have completed. This will be passed the results of the last task's callback. + + + +__Example__ + +```js +async.waterfall([ + function(callback){ + callback(null, 'one', 'two'); + }, + function(arg1, arg2, callback){ + // arg1 now equals 'one' and arg2 now equals 'two' + callback(null, 'three'); + }, + function(arg1, callback){ + // arg1 now equals 'three' + callback(null, 'done'); + } +], function (err, result) { + // result now equals 'done' +}); +``` + +--------------------------------------- + +### compose(fn1, fn2...) + +Creates a function which is a composition of the passed asynchronous +functions. Each function consumes the return value of the function that +follows. Composing functions `f()`, `g()`, and `h()` would produce the result of +`f(g(h()))`, only this version uses callbacks to obtain the return values. + +Each function is executed with the `this` binding of the composed function. + +__Arguments__ + +* `functions...` - the asynchronous functions to compose + + +__Example__ + +```js +function add1(n, callback) { + setTimeout(function () { + callback(null, n + 1); + }, 10); +} + +function mul3(n, callback) { + setTimeout(function () { + callback(null, n * 3); + }, 10); +} + +var add1mul3 = async.compose(mul3, add1); + +add1mul3(4, function (err, result) { + // result now equals 15 +}); +``` + +--------------------------------------- + +### seq(fn1, fn2...) + +Version of the compose function that is more natural to read. +Each following function consumes the return value of the latter function. + +Each function is executed with the `this` binding of the composed function. + +__Arguments__ + +* functions... - the asynchronous functions to compose + + +__Example__ + +```js +// Requires lodash (or underscore), express3 and dresende's orm2. +// Part of an app, that fetches cats of the logged user. +// This example uses `seq` function to avoid overnesting and error +// handling clutter. +app.get('/cats', function(request, response) { + function handleError(err, data, callback) { + if (err) { + console.error(err); + response.json({ status: 'error', message: err.message }); + } + else { + callback(data); + } + } + var User = request.models.User; + async.seq( + _.bind(User.get, User), // 'User.get' has signature (id, callback(err, data)) + handleError, + function(user, fn) { + user.getCats(fn); // 'getCats' has signature (callback(err, data)) + }, + handleError, + function(cats) { + response.json({ status: 'ok', message: 'Cats found', data: cats }); + } + )(req.session.user_id); + } +}); +``` + +--------------------------------------- + +### applyEach(fns, args..., callback) + +Applies the provided arguments to each function in the array, calling +`callback` after all functions have completed. If you only provide the first +argument, then it will return a function which lets you pass in the +arguments as if it were a single function call. + +__Arguments__ + +* `fns` - the asynchronous functions to all call with the same arguments +* `args...` - any number of separate arguments to pass to the function +* `callback` - the final argument should be the callback, called when all + functions have completed processing + + +__Example__ + +```js +async.applyEach([enableSearch, updateSchema], 'bucket', callback); + +// partial application example: +async.each( + buckets, + async.applyEach([enableSearch, updateSchema]), + callback +); +``` + +--------------------------------------- + + +### applyEachSeries(arr, iterator, callback) + +The same as [`applyEach`](#applyEach) only the functions are applied in series. + +--------------------------------------- + + +### queue(worker, concurrency) + +Creates a `queue` object with the specified `concurrency`. Tasks added to the +`queue` are processed in parallel (up to the `concurrency` limit). If all +`worker`s are in progress, the task is queued until one becomes available. +Once a `worker` completes a `task`, that `task`'s callback is called. + +__Arguments__ + +* `worker(task, callback)` - An asynchronous function for processing a queued + task, which must call its `callback(err)` argument when finished, with an + optional `error` as an argument. +* `concurrency` - An `integer` for determining how many `worker` functions should be + run in parallel. + +__Queue objects__ + +The `queue` object returned by this function has the following properties and +methods: + +* `length()` - a function returning the number of items waiting to be processed. +* `started` - a function returning whether or not any items have been pushed and processed by the queue +* `running()` - a function returning the number of items currently being processed. +* `idle()` - a function returning false if there are items waiting or being processed, or true if not. +* `concurrency` - an integer for determining how many `worker` functions should be + run in parallel. This property can be changed after a `queue` is created to + alter the concurrency on-the-fly. +* `push(task, [callback])` - add a new task to the `queue`. Calls `callback` once + the `worker` has finished processing the task. Instead of a single task, a `tasks` array + can be submitted. The respective callback is used for every task in the list. +* `unshift(task, [callback])` - add a new task to the front of the `queue`. +* `saturated` - a callback that is called when the `queue` length hits the `concurrency` limit, + and further tasks will be queued. +* `empty` - a callback that is called when the last item from the `queue` is given to a `worker`. +* `drain` - a callback that is called when the last item from the `queue` has returned from the `worker`. +* `paused` - a boolean for determining whether the queue is in a paused state +* `pause()` - a function that pauses the processing of tasks until `resume()` is called. +* `resume()` - a function that resumes the processing of queued tasks when the queue is paused. +* `kill()` - a function that empties remaining tasks from the queue forcing it to go idle. + +__Example__ + +```js +// create a queue object with concurrency 2 + +var q = async.queue(function (task, callback) { + console.log('hello ' + task.name); + callback(); +}, 2); + + +// assign a callback +q.drain = function() { + console.log('all items have been processed'); +} + +// add some items to the queue + +q.push({name: 'foo'}, function (err) { + console.log('finished processing foo'); +}); +q.push({name: 'bar'}, function (err) { + console.log('finished processing bar'); +}); + +// add some items to the queue (batch-wise) + +q.push([{name: 'baz'},{name: 'bay'},{name: 'bax'}], function (err) { + console.log('finished processing bar'); +}); + +// add some items to the front of the queue + +q.unshift({name: 'bar'}, function (err) { + console.log('finished processing bar'); +}); +``` + + +--------------------------------------- + + +### priorityQueue(worker, concurrency) + +The same as [`queue`](#queue) only tasks are assigned a priority and completed in ascending priority order. There are two differences between `queue` and `priorityQueue` objects: + +* `push(task, priority, [callback])` - `priority` should be a number. If an array of + `tasks` is given, all tasks will be assigned the same priority. +* The `unshift` method was removed. + +--------------------------------------- + + +### cargo(worker, [payload]) + +Creates a `cargo` object with the specified payload. Tasks added to the +cargo will be processed altogether (up to the `payload` limit). If the +`worker` is in progress, the task is queued until it becomes available. Once +the `worker` has completed some tasks, each callback of those tasks is called. +Check out [this animation](https://camo.githubusercontent.com/6bbd36f4cf5b35a0f11a96dcd2e97711ffc2fb37/68747470733a2f2f662e636c6f75642e6769746875622e636f6d2f6173736574732f313637363837312f36383130382f62626330636662302d356632392d313165322d393734662d3333393763363464633835382e676966) for how `cargo` and `queue` work. + +While [queue](#queue) passes only one task to one of a group of workers +at a time, cargo passes an array of tasks to a single worker, repeating +when the worker is finished. + +__Arguments__ + +* `worker(tasks, callback)` - An asynchronous function for processing an array of + queued tasks, which must call its `callback(err)` argument when finished, with + an optional `err` argument. +* `payload` - An optional `integer` for determining how many tasks should be + processed per round; if omitted, the default is unlimited. + +__Cargo objects__ + +The `cargo` object returned by this function has the following properties and +methods: + +* `length()` - A function returning the number of items waiting to be processed. +* `payload` - An `integer` for determining how many tasks should be + process per round. This property can be changed after a `cargo` is created to + alter the payload on-the-fly. +* `push(task, [callback])` - Adds `task` to the `queue`. The callback is called + once the `worker` has finished processing the task. Instead of a single task, an array of `tasks` + can be submitted. The respective callback is used for every task in the list. +* `saturated` - A callback that is called when the `queue.length()` hits the concurrency and further tasks will be queued. +* `empty` - A callback that is called when the last item from the `queue` is given to a `worker`. +* `drain` - A callback that is called when the last item from the `queue` has returned from the `worker`. + +__Example__ + +```js +// create a cargo object with payload 2 + +var cargo = async.cargo(function (tasks, callback) { + for(var i=0; i +### auto(tasks, [callback]) + +Determines the best order for running the functions in `tasks`, based on their +requirements. Each function can optionally depend on other functions being completed +first, and each function is run as soon as its requirements are satisfied. + +If any of the functions pass an error to their callback, it will not +complete (so any other functions depending on it will not run), and the main +`callback` is immediately called with the error. Functions also receive an +object containing the results of functions which have completed so far. + +Note, all functions are called with a `results` object as a second argument, +so it is unsafe to pass functions in the `tasks` object which cannot handle the +extra argument. + +For example, this snippet of code: + +```js +async.auto({ + readData: async.apply(fs.readFile, 'data.txt', 'utf-8') +}, callback); +``` + +will have the effect of calling `readFile` with the results object as the last +argument, which will fail: + +```js +fs.readFile('data.txt', 'utf-8', cb, {}); +``` + +Instead, wrap the call to `readFile` in a function which does not forward the +`results` object: + +```js +async.auto({ + readData: function(cb, results){ + fs.readFile('data.txt', 'utf-8', cb); + } +}, callback); +``` + +__Arguments__ + +* `tasks` - An object. Each of its properties is either a function or an array of + requirements, with the function itself the last item in the array. The object's key + of a property serves as the name of the task defined by that property, + i.e. can be used when specifying requirements for other tasks. + The function receives two arguments: (1) a `callback(err, result)` which must be + called when finished, passing an `error` (which can be `null`) and the result of + the function's execution, and (2) a `results` object, containing the results of + the previously executed functions. +* `callback(err, results)` - An optional callback which is called when all the + tasks have been completed. It receives the `err` argument if any `tasks` + pass an error to their callback. Results are always returned; however, if + an error occurs, no further `tasks` will be performed, and the results + object will only contain partial results. + + +__Example__ + +```js +async.auto({ + get_data: function(callback){ + console.log('in get_data'); + // async code to get some data + callback(null, 'data', 'converted to array'); + }, + make_folder: function(callback){ + console.log('in make_folder'); + // async code to create a directory to store a file in + // this is run at the same time as getting the data + callback(null, 'folder'); + }, + write_file: ['get_data', 'make_folder', function(callback, results){ + console.log('in write_file', JSON.stringify(results)); + // once there is some data and the directory exists, + // write the data to a file in the directory + callback(null, 'filename'); + }], + email_link: ['write_file', function(callback, results){ + console.log('in email_link', JSON.stringify(results)); + // once the file is written let's email a link to it... + // results.write_file contains the filename returned by write_file. + callback(null, {'file':results.write_file, 'email':'user@example.com'}); + }] +}, function(err, results) { + console.log('err = ', err); + console.log('results = ', results); +}); +``` + +This is a fairly trivial example, but to do this using the basic parallel and +series functions would look like this: + +```js +async.parallel([ + function(callback){ + console.log('in get_data'); + // async code to get some data + callback(null, 'data', 'converted to array'); + }, + function(callback){ + console.log('in make_folder'); + // async code to create a directory to store a file in + // this is run at the same time as getting the data + callback(null, 'folder'); + } +], +function(err, results){ + async.series([ + function(callback){ + console.log('in write_file', JSON.stringify(results)); + // once there is some data and the directory exists, + // write the data to a file in the directory + results.push('filename'); + callback(null); + }, + function(callback){ + console.log('in email_link', JSON.stringify(results)); + // once the file is written let's email a link to it... + callback(null, {'file':results.pop(), 'email':'user@example.com'}); + } + ]); +}); +``` + +For a complicated series of `async` tasks, using the [`auto`](#auto) function makes adding +new tasks much easier (and the code more readable). + + +--------------------------------------- + + +### retry([times = 5], task, [callback]) + +Attempts to get a successful response from `task` no more than `times` times before +returning an error. If the task is successful, the `callback` will be passed the result +of the successfull task. If all attemps fail, the callback will be passed the error and +result (if any) of the final attempt. + +__Arguments__ + +* `times` - An integer indicating how many times to attempt the `task` before giving up. Defaults to 5. +* `task(callback, results)` - A function which receives two arguments: (1) a `callback(err, result)` + which must be called when finished, passing `err` (which can be `null`) and the `result` of + the function's execution, and (2) a `results` object, containing the results of + the previously executed functions (if nested inside another control flow). +* `callback(err, results)` - An optional callback which is called when the + task has succeeded, or after the final failed attempt. It receives the `err` and `result` arguments of the last attempt at completing the `task`. + +The [`retry`](#retry) function can be used as a stand-alone control flow by passing a +callback, as shown below: + +```js +async.retry(3, apiMethod, function(err, result) { + // do something with the result +}); +``` + +It can also be embeded within other control flow functions to retry individual methods +that are not as reliable, like this: + +```js +async.auto({ + users: api.getUsers.bind(api), + payments: async.retry(3, api.getPayments.bind(api)) +}, function(err, results) { + // do something with the results +}); +``` + + +--------------------------------------- + + +### iterator(tasks) + +Creates an iterator function which calls the next function in the `tasks` array, +returning a continuation to call the next one after that. It's also possible to +“peek” at the next iterator with `iterator.next()`. + +This function is used internally by the `async` module, but can be useful when +you want to manually control the flow of functions in series. + +__Arguments__ + +* `tasks` - An array of functions to run. + +__Example__ + +```js +var iterator = async.iterator([ + function(){ sys.p('one'); }, + function(){ sys.p('two'); }, + function(){ sys.p('three'); } +]); + +node> var iterator2 = iterator(); +'one' +node> var iterator3 = iterator2(); +'two' +node> iterator3(); +'three' +node> var nextfn = iterator2.next(); +node> nextfn(); +'three' +``` + +--------------------------------------- + + +### apply(function, arguments..) + +Creates a continuation function with some arguments already applied. + +Useful as a shorthand when combined with other control flow functions. Any arguments +passed to the returned function are added to the arguments originally passed +to apply. + +__Arguments__ + +* `function` - The function you want to eventually apply all arguments to. +* `arguments...` - Any number of arguments to automatically apply when the + continuation is called. + +__Example__ + +```js +// using apply + +async.parallel([ + async.apply(fs.writeFile, 'testfile1', 'test1'), + async.apply(fs.writeFile, 'testfile2', 'test2'), +]); + + +// the same process without using apply + +async.parallel([ + function(callback){ + fs.writeFile('testfile1', 'test1', callback); + }, + function(callback){ + fs.writeFile('testfile2', 'test2', callback); + } +]); +``` + +It's possible to pass any number of additional arguments when calling the +continuation: + +```js +node> var fn = async.apply(sys.puts, 'one'); +node> fn('two', 'three'); +one +two +three +``` + +--------------------------------------- + + +### nextTick(callback) + +Calls `callback` on a later loop around the event loop. In Node.js this just +calls `process.nextTick`; in the browser it falls back to `setImmediate(callback)` +if available, otherwise `setTimeout(callback, 0)`, which means other higher priority +events may precede the execution of `callback`. + +This is used internally for browser-compatibility purposes. + +__Arguments__ + +* `callback` - The function to call on a later loop around the event loop. + +__Example__ + +```js +var call_order = []; +async.nextTick(function(){ + call_order.push('two'); + // call_order now equals ['one','two'] +}); +call_order.push('one') +``` + + +### times(n, callback) + +Calls the `callback` function `n` times, and accumulates results in the same manner +you would use with [`map`](#map). + +__Arguments__ + +* `n` - The number of times to run the function. +* `callback` - The function to call `n` times. + +__Example__ + +```js +// Pretend this is some complicated async factory +var createUser = function(id, callback) { + callback(null, { + id: 'user' + id + }) +} +// generate 5 users +async.times(5, function(n, next){ + createUser(n, function(err, user) { + next(err, user) + }) +}, function(err, users) { + // we should now have 5 users +}); +``` + + +### timesSeries(n, callback) + +The same as [`times`](#times), only the iterator is applied to each item in `arr` in +series. The next `iterator` is only called once the current one has completed. +The results array will be in the same order as the original. + + +## Utils + + +### memoize(fn, [hasher]) + +Caches the results of an `async` function. When creating a hash to store function +results against, the callback is omitted from the hash and an optional hash +function can be used. + +The cache of results is exposed as the `memo` property of the function returned +by `memoize`. + +__Arguments__ + +* `fn` - The function to proxy and cache results from. +* `hasher` - Tn optional function for generating a custom hash for storing + results. It has all the arguments applied to it apart from the callback, and + must be synchronous. + +__Example__ + +```js +var slow_fn = function (name, callback) { + // do something + callback(null, result); +}; +var fn = async.memoize(slow_fn); + +// fn can now be used as if it were slow_fn +fn('some name', function () { + // callback +}); +``` + + +### unmemoize(fn) + +Undoes a [`memoize`](#memoize)d function, reverting it to the original, unmemoized +form. Handy for testing. + +__Arguments__ + +* `fn` - the memoized function + + +### log(function, arguments) + +Logs the result of an `async` function to the `console`. Only works in Node.js or +in browsers that support `console.log` and `console.error` (such as FF and Chrome). +If multiple arguments are returned from the async function, `console.log` is +called on each argument in order. + +__Arguments__ + +* `function` - The function you want to eventually apply all arguments to. +* `arguments...` - Any number of arguments to apply to the function. + +__Example__ + +```js +var hello = function(name, callback){ + setTimeout(function(){ + callback(null, 'hello ' + name); + }, 1000); +}; +``` +```js +node> async.log(hello, 'world'); +'hello world' +``` + +--------------------------------------- + + +### dir(function, arguments) + +Logs the result of an `async` function to the `console` using `console.dir` to +display the properties of the resulting object. Only works in Node.js or +in browsers that support `console.dir` and `console.error` (such as FF and Chrome). +If multiple arguments are returned from the async function, `console.dir` is +called on each argument in order. + +__Arguments__ + +* `function` - The function you want to eventually apply all arguments to. +* `arguments...` - Any number of arguments to apply to the function. + +__Example__ + +```js +var hello = function(name, callback){ + setTimeout(function(){ + callback(null, {hello: name}); + }, 1000); +}; +``` +```js +node> async.dir(hello, 'world'); +{hello: 'world'} +``` + +--------------------------------------- + + +### noConflict() + +Changes the value of `async` back to its original value, returning a reference to the +`async` object. diff --git a/node_modules/http-server/node_modules/portfinder/node_modules/async/component.json b/node_modules/http-server/node_modules/portfinder/node_modules/async/component.json new file mode 100644 index 0000000..bbb0115 --- /dev/null +++ b/node_modules/http-server/node_modules/portfinder/node_modules/async/component.json @@ -0,0 +1,11 @@ +{ + "name": "async", + "repo": "caolan/async", + "description": "Higher-order functions and common patterns for asynchronous code", + "version": "0.1.23", + "keywords": [], + "dependencies": {}, + "development": {}, + "main": "lib/async.js", + "scripts": [ "lib/async.js" ] +} diff --git a/node_modules/http-server/node_modules/portfinder/node_modules/async/lib/async.js b/node_modules/http-server/node_modules/portfinder/node_modules/async/lib/async.js new file mode 100755 index 0000000..01e8afc --- /dev/null +++ b/node_modules/http-server/node_modules/portfinder/node_modules/async/lib/async.js @@ -0,0 +1,1123 @@ +/*! + * async + * https://github.com/caolan/async + * + * Copyright 2010-2014 Caolan McMahon + * Released under the MIT license + */ +/*jshint onevar: false, indent:4 */ +/*global setImmediate: false, setTimeout: false, console: false */ +(function () { + + var async = {}; + + // global on the server, window in the browser + var root, previous_async; + + root = this; + if (root != null) { + previous_async = root.async; + } + + async.noConflict = function () { + root.async = previous_async; + return async; + }; + + function only_once(fn) { + var called = false; + return function() { + if (called) throw new Error("Callback was already called."); + called = true; + fn.apply(root, arguments); + } + } + + //// cross-browser compatiblity functions //// + + var _toString = Object.prototype.toString; + + var _isArray = Array.isArray || function (obj) { + return _toString.call(obj) === '[object Array]'; + }; + + var _each = function (arr, iterator) { + if (arr.forEach) { + return arr.forEach(iterator); + } + for (var i = 0; i < arr.length; i += 1) { + iterator(arr[i], i, arr); + } + }; + + var _map = function (arr, iterator) { + if (arr.map) { + return arr.map(iterator); + } + var results = []; + _each(arr, function (x, i, a) { + results.push(iterator(x, i, a)); + }); + return results; + }; + + var _reduce = function (arr, iterator, memo) { + if (arr.reduce) { + return arr.reduce(iterator, memo); + } + _each(arr, function (x, i, a) { + memo = iterator(memo, x, i, a); + }); + return memo; + }; + + var _keys = function (obj) { + if (Object.keys) { + return Object.keys(obj); + } + var keys = []; + for (var k in obj) { + if (obj.hasOwnProperty(k)) { + keys.push(k); + } + } + return keys; + }; + + //// exported async module functions //// + + //// nextTick implementation with browser-compatible fallback //// + if (typeof process === 'undefined' || !(process.nextTick)) { + if (typeof setImmediate === 'function') { + async.nextTick = function (fn) { + // not a direct alias for IE10 compatibility + setImmediate(fn); + }; + async.setImmediate = async.nextTick; + } + else { + async.nextTick = function (fn) { + setTimeout(fn, 0); + }; + async.setImmediate = async.nextTick; + } + } + else { + async.nextTick = process.nextTick; + if (typeof setImmediate !== 'undefined') { + async.setImmediate = function (fn) { + // not a direct alias for IE10 compatibility + setImmediate(fn); + }; + } + else { + async.setImmediate = async.nextTick; + } + } + + async.each = function (arr, iterator, callback) { + callback = callback || function () {}; + if (!arr.length) { + return callback(); + } + var completed = 0; + _each(arr, function (x) { + iterator(x, only_once(done) ); + }); + function done(err) { + if (err) { + callback(err); + callback = function () {}; + } + else { + completed += 1; + if (completed >= arr.length) { + callback(); + } + } + } + }; + async.forEach = async.each; + + async.eachSeries = function (arr, iterator, callback) { + callback = callback || function () {}; + if (!arr.length) { + return callback(); + } + var completed = 0; + var iterate = function () { + iterator(arr[completed], function (err) { + if (err) { + callback(err); + callback = function () {}; + } + else { + completed += 1; + if (completed >= arr.length) { + callback(); + } + else { + iterate(); + } + } + }); + }; + iterate(); + }; + async.forEachSeries = async.eachSeries; + + async.eachLimit = function (arr, limit, iterator, callback) { + var fn = _eachLimit(limit); + fn.apply(null, [arr, iterator, callback]); + }; + async.forEachLimit = async.eachLimit; + + var _eachLimit = function (limit) { + + return function (arr, iterator, callback) { + callback = callback || function () {}; + if (!arr.length || limit <= 0) { + return callback(); + } + var completed = 0; + var started = 0; + var running = 0; + + (function replenish () { + if (completed >= arr.length) { + return callback(); + } + + while (running < limit && started < arr.length) { + started += 1; + running += 1; + iterator(arr[started - 1], function (err) { + if (err) { + callback(err); + callback = function () {}; + } + else { + completed += 1; + running -= 1; + if (completed >= arr.length) { + callback(); + } + else { + replenish(); + } + } + }); + } + })(); + }; + }; + + + var doParallel = function (fn) { + return function () { + var args = Array.prototype.slice.call(arguments); + return fn.apply(null, [async.each].concat(args)); + }; + }; + var doParallelLimit = function(limit, fn) { + return function () { + var args = Array.prototype.slice.call(arguments); + return fn.apply(null, [_eachLimit(limit)].concat(args)); + }; + }; + var doSeries = function (fn) { + return function () { + var args = Array.prototype.slice.call(arguments); + return fn.apply(null, [async.eachSeries].concat(args)); + }; + }; + + + var _asyncMap = function (eachfn, arr, iterator, callback) { + arr = _map(arr, function (x, i) { + return {index: i, value: x}; + }); + if (!callback) { + eachfn(arr, function (x, callback) { + iterator(x.value, function (err) { + callback(err); + }); + }); + } else { + var results = []; + eachfn(arr, function (x, callback) { + iterator(x.value, function (err, v) { + results[x.index] = v; + callback(err); + }); + }, function (err) { + callback(err, results); + }); + } + }; + async.map = doParallel(_asyncMap); + async.mapSeries = doSeries(_asyncMap); + async.mapLimit = function (arr, limit, iterator, callback) { + return _mapLimit(limit)(arr, iterator, callback); + }; + + var _mapLimit = function(limit) { + return doParallelLimit(limit, _asyncMap); + }; + + // reduce only has a series version, as doing reduce in parallel won't + // work in many situations. + async.reduce = function (arr, memo, iterator, callback) { + async.eachSeries(arr, function (x, callback) { + iterator(memo, x, function (err, v) { + memo = v; + callback(err); + }); + }, function (err) { + callback(err, memo); + }); + }; + // inject alias + async.inject = async.reduce; + // foldl alias + async.foldl = async.reduce; + + async.reduceRight = function (arr, memo, iterator, callback) { + var reversed = _map(arr, function (x) { + return x; + }).reverse(); + async.reduce(reversed, memo, iterator, callback); + }; + // foldr alias + async.foldr = async.reduceRight; + + var _filter = function (eachfn, arr, iterator, callback) { + var results = []; + arr = _map(arr, function (x, i) { + return {index: i, value: x}; + }); + eachfn(arr, function (x, callback) { + iterator(x.value, function (v) { + if (v) { + results.push(x); + } + callback(); + }); + }, function (err) { + callback(_map(results.sort(function (a, b) { + return a.index - b.index; + }), function (x) { + return x.value; + })); + }); + }; + async.filter = doParallel(_filter); + async.filterSeries = doSeries(_filter); + // select alias + async.select = async.filter; + async.selectSeries = async.filterSeries; + + var _reject = function (eachfn, arr, iterator, callback) { + var results = []; + arr = _map(arr, function (x, i) { + return {index: i, value: x}; + }); + eachfn(arr, function (x, callback) { + iterator(x.value, function (v) { + if (!v) { + results.push(x); + } + callback(); + }); + }, function (err) { + callback(_map(results.sort(function (a, b) { + return a.index - b.index; + }), function (x) { + return x.value; + })); + }); + }; + async.reject = doParallel(_reject); + async.rejectSeries = doSeries(_reject); + + var _detect = function (eachfn, arr, iterator, main_callback) { + eachfn(arr, function (x, callback) { + iterator(x, function (result) { + if (result) { + main_callback(x); + main_callback = function () {}; + } + else { + callback(); + } + }); + }, function (err) { + main_callback(); + }); + }; + async.detect = doParallel(_detect); + async.detectSeries = doSeries(_detect); + + async.some = function (arr, iterator, main_callback) { + async.each(arr, function (x, callback) { + iterator(x, function (v) { + if (v) { + main_callback(true); + main_callback = function () {}; + } + callback(); + }); + }, function (err) { + main_callback(false); + }); + }; + // any alias + async.any = async.some; + + async.every = function (arr, iterator, main_callback) { + async.each(arr, function (x, callback) { + iterator(x, function (v) { + if (!v) { + main_callback(false); + main_callback = function () {}; + } + callback(); + }); + }, function (err) { + main_callback(true); + }); + }; + // all alias + async.all = async.every; + + async.sortBy = function (arr, iterator, callback) { + async.map(arr, function (x, callback) { + iterator(x, function (err, criteria) { + if (err) { + callback(err); + } + else { + callback(null, {value: x, criteria: criteria}); + } + }); + }, function (err, results) { + if (err) { + return callback(err); + } + else { + var fn = function (left, right) { + var a = left.criteria, b = right.criteria; + return a < b ? -1 : a > b ? 1 : 0; + }; + callback(null, _map(results.sort(fn), function (x) { + return x.value; + })); + } + }); + }; + + async.auto = function (tasks, callback) { + callback = callback || function () {}; + var keys = _keys(tasks); + var remainingTasks = keys.length + if (!remainingTasks) { + return callback(); + } + + var results = {}; + + var listeners = []; + var addListener = function (fn) { + listeners.unshift(fn); + }; + var removeListener = function (fn) { + for (var i = 0; i < listeners.length; i += 1) { + if (listeners[i] === fn) { + listeners.splice(i, 1); + return; + } + } + }; + var taskComplete = function () { + remainingTasks-- + _each(listeners.slice(0), function (fn) { + fn(); + }); + }; + + addListener(function () { + if (!remainingTasks) { + var theCallback = callback; + // prevent final callback from calling itself if it errors + callback = function () {}; + + theCallback(null, results); + } + }); + + _each(keys, function (k) { + var task = _isArray(tasks[k]) ? tasks[k]: [tasks[k]]; + var taskCallback = function (err) { + var args = Array.prototype.slice.call(arguments, 1); + if (args.length <= 1) { + args = args[0]; + } + if (err) { + var safeResults = {}; + _each(_keys(results), function(rkey) { + safeResults[rkey] = results[rkey]; + }); + safeResults[k] = args; + callback(err, safeResults); + // stop subsequent errors hitting callback multiple times + callback = function () {}; + } + else { + results[k] = args; + async.setImmediate(taskComplete); + } + }; + var requires = task.slice(0, Math.abs(task.length - 1)) || []; + var ready = function () { + return _reduce(requires, function (a, x) { + return (a && results.hasOwnProperty(x)); + }, true) && !results.hasOwnProperty(k); + }; + if (ready()) { + task[task.length - 1](taskCallback, results); + } + else { + var listener = function () { + if (ready()) { + removeListener(listener); + task[task.length - 1](taskCallback, results); + } + }; + addListener(listener); + } + }); + }; + + async.retry = function(times, task, callback) { + var DEFAULT_TIMES = 5; + var attempts = []; + // Use defaults if times not passed + if (typeof times === 'function') { + callback = task; + task = times; + times = DEFAULT_TIMES; + } + // Make sure times is a number + times = parseInt(times, 10) || DEFAULT_TIMES; + var wrappedTask = function(wrappedCallback, wrappedResults) { + var retryAttempt = function(task, finalAttempt) { + return function(seriesCallback) { + task(function(err, result){ + seriesCallback(!err || finalAttempt, {err: err, result: result}); + }, wrappedResults); + }; + }; + while (times) { + attempts.push(retryAttempt(task, !(times-=1))); + } + async.series(attempts, function(done, data){ + data = data[data.length - 1]; + (wrappedCallback || callback)(data.err, data.result); + }); + } + // If a callback is passed, run this as a controll flow + return callback ? wrappedTask() : wrappedTask + }; + + async.waterfall = function (tasks, callback) { + callback = callback || function () {}; + if (!_isArray(tasks)) { + var err = new Error('First argument to waterfall must be an array of functions'); + return callback(err); + } + if (!tasks.length) { + return callback(); + } + var wrapIterator = function (iterator) { + return function (err) { + if (err) { + callback.apply(null, arguments); + callback = function () {}; + } + else { + var args = Array.prototype.slice.call(arguments, 1); + var next = iterator.next(); + if (next) { + args.push(wrapIterator(next)); + } + else { + args.push(callback); + } + async.setImmediate(function () { + iterator.apply(null, args); + }); + } + }; + }; + wrapIterator(async.iterator(tasks))(); + }; + + var _parallel = function(eachfn, tasks, callback) { + callback = callback || function () {}; + if (_isArray(tasks)) { + eachfn.map(tasks, function (fn, callback) { + if (fn) { + fn(function (err) { + var args = Array.prototype.slice.call(arguments, 1); + if (args.length <= 1) { + args = args[0]; + } + callback.call(null, err, args); + }); + } + }, callback); + } + else { + var results = {}; + eachfn.each(_keys(tasks), function (k, callback) { + tasks[k](function (err) { + var args = Array.prototype.slice.call(arguments, 1); + if (args.length <= 1) { + args = args[0]; + } + results[k] = args; + callback(err); + }); + }, function (err) { + callback(err, results); + }); + } + }; + + async.parallel = function (tasks, callback) { + _parallel({ map: async.map, each: async.each }, tasks, callback); + }; + + async.parallelLimit = function(tasks, limit, callback) { + _parallel({ map: _mapLimit(limit), each: _eachLimit(limit) }, tasks, callback); + }; + + async.series = function (tasks, callback) { + callback = callback || function () {}; + if (_isArray(tasks)) { + async.mapSeries(tasks, function (fn, callback) { + if (fn) { + fn(function (err) { + var args = Array.prototype.slice.call(arguments, 1); + if (args.length <= 1) { + args = args[0]; + } + callback.call(null, err, args); + }); + } + }, callback); + } + else { + var results = {}; + async.eachSeries(_keys(tasks), function (k, callback) { + tasks[k](function (err) { + var args = Array.prototype.slice.call(arguments, 1); + if (args.length <= 1) { + args = args[0]; + } + results[k] = args; + callback(err); + }); + }, function (err) { + callback(err, results); + }); + } + }; + + async.iterator = function (tasks) { + var makeCallback = function (index) { + var fn = function () { + if (tasks.length) { + tasks[index].apply(null, arguments); + } + return fn.next(); + }; + fn.next = function () { + return (index < tasks.length - 1) ? makeCallback(index + 1): null; + }; + return fn; + }; + return makeCallback(0); + }; + + async.apply = function (fn) { + var args = Array.prototype.slice.call(arguments, 1); + return function () { + return fn.apply( + null, args.concat(Array.prototype.slice.call(arguments)) + ); + }; + }; + + var _concat = function (eachfn, arr, fn, callback) { + var r = []; + eachfn(arr, function (x, cb) { + fn(x, function (err, y) { + r = r.concat(y || []); + cb(err); + }); + }, function (err) { + callback(err, r); + }); + }; + async.concat = doParallel(_concat); + async.concatSeries = doSeries(_concat); + + async.whilst = function (test, iterator, callback) { + if (test()) { + iterator(function (err) { + if (err) { + return callback(err); + } + async.whilst(test, iterator, callback); + }); + } + else { + callback(); + } + }; + + async.doWhilst = function (iterator, test, callback) { + iterator(function (err) { + if (err) { + return callback(err); + } + var args = Array.prototype.slice.call(arguments, 1); + if (test.apply(null, args)) { + async.doWhilst(iterator, test, callback); + } + else { + callback(); + } + }); + }; + + async.until = function (test, iterator, callback) { + if (!test()) { + iterator(function (err) { + if (err) { + return callback(err); + } + async.until(test, iterator, callback); + }); + } + else { + callback(); + } + }; + + async.doUntil = function (iterator, test, callback) { + iterator(function (err) { + if (err) { + return callback(err); + } + var args = Array.prototype.slice.call(arguments, 1); + if (!test.apply(null, args)) { + async.doUntil(iterator, test, callback); + } + else { + callback(); + } + }); + }; + + async.queue = function (worker, concurrency) { + if (concurrency === undefined) { + concurrency = 1; + } + function _insert(q, data, pos, callback) { + if (!q.started){ + q.started = true; + } + if (!_isArray(data)) { + data = [data]; + } + if(data.length == 0) { + // call drain immediately if there are no tasks + return async.setImmediate(function() { + if (q.drain) { + q.drain(); + } + }); + } + _each(data, function(task) { + var item = { + data: task, + callback: typeof callback === 'function' ? callback : null + }; + + if (pos) { + q.tasks.unshift(item); + } else { + q.tasks.push(item); + } + + if (q.saturated && q.tasks.length === q.concurrency) { + q.saturated(); + } + async.setImmediate(q.process); + }); + } + + var workers = 0; + var q = { + tasks: [], + concurrency: concurrency, + saturated: null, + empty: null, + drain: null, + started: false, + paused: false, + push: function (data, callback) { + _insert(q, data, false, callback); + }, + kill: function () { + q.drain = null; + q.tasks = []; + }, + unshift: function (data, callback) { + _insert(q, data, true, callback); + }, + process: function () { + if (!q.paused && workers < q.concurrency && q.tasks.length) { + var task = q.tasks.shift(); + if (q.empty && q.tasks.length === 0) { + q.empty(); + } + workers += 1; + var next = function () { + workers -= 1; + if (task.callback) { + task.callback.apply(task, arguments); + } + if (q.drain && q.tasks.length + workers === 0) { + q.drain(); + } + q.process(); + }; + var cb = only_once(next); + worker(task.data, cb); + } + }, + length: function () { + return q.tasks.length; + }, + running: function () { + return workers; + }, + idle: function() { + return q.tasks.length + workers === 0; + }, + pause: function () { + if (q.paused === true) { return; } + q.paused = true; + q.process(); + }, + resume: function () { + if (q.paused === false) { return; } + q.paused = false; + q.process(); + } + }; + return q; + }; + + async.priorityQueue = function (worker, concurrency) { + + function _compareTasks(a, b){ + return a.priority - b.priority; + }; + + function _binarySearch(sequence, item, compare) { + var beg = -1, + end = sequence.length - 1; + while (beg < end) { + var mid = beg + ((end - beg + 1) >>> 1); + if (compare(item, sequence[mid]) >= 0) { + beg = mid; + } else { + end = mid - 1; + } + } + return beg; + } + + function _insert(q, data, priority, callback) { + if (!q.started){ + q.started = true; + } + if (!_isArray(data)) { + data = [data]; + } + if(data.length == 0) { + // call drain immediately if there are no tasks + return async.setImmediate(function() { + if (q.drain) { + q.drain(); + } + }); + } + _each(data, function(task) { + var item = { + data: task, + priority: priority, + callback: typeof callback === 'function' ? callback : null + }; + + q.tasks.splice(_binarySearch(q.tasks, item, _compareTasks) + 1, 0, item); + + if (q.saturated && q.tasks.length === q.concurrency) { + q.saturated(); + } + async.setImmediate(q.process); + }); + } + + // Start with a normal queue + var q = async.queue(worker, concurrency); + + // Override push to accept second parameter representing priority + q.push = function (data, priority, callback) { + _insert(q, data, priority, callback); + }; + + // Remove unshift function + delete q.unshift; + + return q; + }; + + async.cargo = function (worker, payload) { + var working = false, + tasks = []; + + var cargo = { + tasks: tasks, + payload: payload, + saturated: null, + empty: null, + drain: null, + drained: true, + push: function (data, callback) { + if (!_isArray(data)) { + data = [data]; + } + _each(data, function(task) { + tasks.push({ + data: task, + callback: typeof callback === 'function' ? callback : null + }); + cargo.drained = false; + if (cargo.saturated && tasks.length === payload) { + cargo.saturated(); + } + }); + async.setImmediate(cargo.process); + }, + process: function process() { + if (working) return; + if (tasks.length === 0) { + if(cargo.drain && !cargo.drained) cargo.drain(); + cargo.drained = true; + return; + } + + var ts = typeof payload === 'number' + ? tasks.splice(0, payload) + : tasks.splice(0, tasks.length); + + var ds = _map(ts, function (task) { + return task.data; + }); + + if(cargo.empty) cargo.empty(); + working = true; + worker(ds, function () { + working = false; + + var args = arguments; + _each(ts, function (data) { + if (data.callback) { + data.callback.apply(null, args); + } + }); + + process(); + }); + }, + length: function () { + return tasks.length; + }, + running: function () { + return working; + } + }; + return cargo; + }; + + var _console_fn = function (name) { + return function (fn) { + var args = Array.prototype.slice.call(arguments, 1); + fn.apply(null, args.concat([function (err) { + var args = Array.prototype.slice.call(arguments, 1); + if (typeof console !== 'undefined') { + if (err) { + if (console.error) { + console.error(err); + } + } + else if (console[name]) { + _each(args, function (x) { + console[name](x); + }); + } + } + }])); + }; + }; + async.log = _console_fn('log'); + async.dir = _console_fn('dir'); + /*async.info = _console_fn('info'); + async.warn = _console_fn('warn'); + async.error = _console_fn('error');*/ + + async.memoize = function (fn, hasher) { + var memo = {}; + var queues = {}; + hasher = hasher || function (x) { + return x; + }; + var memoized = function () { + var args = Array.prototype.slice.call(arguments); + var callback = args.pop(); + var key = hasher.apply(null, args); + if (key in memo) { + async.nextTick(function () { + callback.apply(null, memo[key]); + }); + } + else if (key in queues) { + queues[key].push(callback); + } + else { + queues[key] = [callback]; + fn.apply(null, args.concat([function () { + memo[key] = arguments; + var q = queues[key]; + delete queues[key]; + for (var i = 0, l = q.length; i < l; i++) { + q[i].apply(null, arguments); + } + }])); + } + }; + memoized.memo = memo; + memoized.unmemoized = fn; + return memoized; + }; + + async.unmemoize = function (fn) { + return function () { + return (fn.unmemoized || fn).apply(null, arguments); + }; + }; + + async.times = function (count, iterator, callback) { + var counter = []; + for (var i = 0; i < count; i++) { + counter.push(i); + } + return async.map(counter, iterator, callback); + }; + + async.timesSeries = function (count, iterator, callback) { + var counter = []; + for (var i = 0; i < count; i++) { + counter.push(i); + } + return async.mapSeries(counter, iterator, callback); + }; + + async.seq = function (/* functions... */) { + var fns = arguments; + return function () { + var that = this; + var args = Array.prototype.slice.call(arguments); + var callback = args.pop(); + async.reduce(fns, args, function (newargs, fn, cb) { + fn.apply(that, newargs.concat([function () { + var err = arguments[0]; + var nextargs = Array.prototype.slice.call(arguments, 1); + cb(err, nextargs); + }])) + }, + function (err, results) { + callback.apply(that, [err].concat(results)); + }); + }; + }; + + async.compose = function (/* functions... */) { + return async.seq.apply(null, Array.prototype.reverse.call(arguments)); + }; + + var _applyEach = function (eachfn, fns /*args...*/) { + var go = function () { + var that = this; + var args = Array.prototype.slice.call(arguments); + var callback = args.pop(); + return eachfn(fns, function (fn, cb) { + fn.apply(that, args.concat([cb])); + }, + callback); + }; + if (arguments.length > 2) { + var args = Array.prototype.slice.call(arguments, 2); + return go.apply(this, args); + } + else { + return go; + } + }; + async.applyEach = doParallel(_applyEach); + async.applyEachSeries = doSeries(_applyEach); + + async.forever = function (fn, callback) { + function next(err) { + if (err) { + if (callback) { + return callback(err); + } + throw err; + } + fn(next); + } + next(); + }; + + // Node.js + if (typeof module !== 'undefined' && module.exports) { + module.exports = async; + } + // AMD / RequireJS + else if (typeof define !== 'undefined' && define.amd) { + define([], function () { + return async; + }); + } + // included directly via + \ No newline at end of file diff --git a/node_modules/http-server/node_modules/union/examples/socketio/server.js b/node_modules/http-server/node_modules/union/examples/socketio/server.js new file mode 100644 index 0000000..1b7c580 --- /dev/null +++ b/node_modules/http-server/node_modules/union/examples/socketio/server.js @@ -0,0 +1,30 @@ +var fs = require('fs'), + union = require('union'); + +var server = union.createServer({ + before: [ + function (req, res) { + fs.readFile(__dirname + '/index.html', + function (err, data) { + if (err) { + res.writeHead(500); + return res.end('Error loading index.html'); + } + + res.writeHead(200); + res.end(data); + }); + } + ] +}); + +server.listen(9090); + +var io = require('socket.io').listen(server); + +io.sockets.on('connection', function (socket) { + socket.emit('news', {hello: 'world'}); + socket.on('my other event', function (data) { + console.log(data); + }); +}); \ No newline at end of file diff --git a/node_modules/http-server/node_modules/union/lib/buffered-stream.js b/node_modules/http-server/node_modules/union/lib/buffered-stream.js new file mode 100644 index 0000000..d53117b --- /dev/null +++ b/node_modules/http-server/node_modules/union/lib/buffered-stream.js @@ -0,0 +1,141 @@ +/* + * buffered-stream.js: A simple(r) Stream which is partially buffered into memory. + * + * (C) 2010, Mikeal Rogers + * + * Adapted for Flatiron + * (C) 2011, Charlie Robbins & the Contributors + * MIT LICENSE + * + */ + +var events = require('events'), + fs = require('fs'), + stream = require('stream'), + util = require('util'); + +// +// ### function BufferedStream (limit) +// #### @limit {number} **Optional** Size of the buffer to limit +// Constructor function for the BufferedStream object responsible for +// maintaining a stream interface which can also persist to memory +// temporarily. +// + +var BufferedStream = module.exports = function (limit) { + events.EventEmitter.call(this); + + if (typeof limit === 'undefined') { + limit = Infinity; + } + + this.limit = limit; + this.size = 0; + this.chunks = []; + this.writable = true; + this.readable = true; + this._buffer = true; +}; + +util.inherits(BufferedStream, stream.Stream); + +Object.defineProperty(BufferedStream.prototype, 'buffer', { + get: function () { + return this._buffer; + }, + set: function (value) { + if (!value && this.chunks) { + var self = this; + this.chunks.forEach(function (c) { self.emit('data', c) }); + if (this.ended) this.emit('end'); + this.size = 0; + delete this.chunks; + } + + this._buffer = value; + } +}); + +BufferedStream.prototype.pipe = function () { + var self = this, + dest; + + if (self.resume) { + self.resume(); + } + + dest = stream.Stream.prototype.pipe.apply(self, arguments); + + // + // just incase you are piping to two streams, do not emit data twice. + // note: you can pipe twice, but you need to pipe both streams in the same tick. + // (this is normal for streams) + // + if (this.piped) { + return dest; + } + + process.nextTick(function () { + if (self.chunks) { + self.chunks.forEach(function (c) { self.emit('data', c) }); + self.size = 0; + delete self.chunks; + } + + if (!self.readable) { + if (self.ended) { + self.emit('end'); + } + else if (self.closed) { + self.emit('close'); + } + } + }); + + this.piped = true; + + return dest; +}; + +BufferedStream.prototype.write = function (chunk) { + if (!this.chunks || this.piped) { + this.emit('data', chunk); + return; + } + + this.chunks.push(chunk); + this.size += chunk.length; + if (this.limit < this.size) { + this.pause(); + } +}; + +BufferedStream.prototype.end = function () { + this.readable = false; + this.ended = true; + this.emit('end'); +}; + +BufferedStream.prototype.destroy = function () { + this.readable = false; + this.writable = false; + delete this.chunks; +}; + +BufferedStream.prototype.close = function () { + this.readable = false; + this.closed = true; +}; + +if (!stream.Stream.prototype.pause) { + BufferedStream.prototype.pause = function () { + this.emit('pause'); + }; +} + +if (!stream.Stream.prototype.resume) { + BufferedStream.prototype.resume = function () { + this.emit('resume'); + }; +} + diff --git a/node_modules/http-server/node_modules/union/lib/core.js b/node_modules/http-server/node_modules/union/lib/core.js new file mode 100644 index 0000000..8aed9c1 --- /dev/null +++ b/node_modules/http-server/node_modules/union/lib/core.js @@ -0,0 +1,108 @@ +/* + * core.js: Core functionality for the Flatiron HTTP (with SPDY support) plugin. + * + * (C) 2011, Charlie Robbins & the Contributors + * MIT LICENSE + * + */ + +var http = require('http'), + https = require('https'), + fs = require('fs'), + stream = require('stream'), + HttpStream = require('./http-stream'), + RoutingStream = require('./routing-stream'); + +var core = exports; + +core.createServer = function (options) { + var isArray = Array.isArray(options.after), + credentials; + + if (!options) { + throw new Error('options is required to create a server'); + } + + function requestHandler(req, res) { + var routingStream = new RoutingStream({ + before: options.before, + buffer: options.buffer, + // + // Remark: without new after is a huge memory leak that + // pipes to every single open connection + // + after: isArray && options.after.map(function (After) { + return new After; + }), + request: req, + response: res, + limit: options.limit, + headers: options.headers + }); + + routingStream.on('error', function (err) { + var fn = options.onError || core.errorHandler; + fn(err, routingStream, routingStream.target, function () { + routingStream.target.emit('next'); + }); + }); + + req.pipe(routingStream); + } + + // + // both https and spdy requires same params + // + if (options.https || options.spdy) { + if (options.https && options.spdy) { + throw new Error('You shouldn\'t be using https and spdy simultaneously.'); + } + + var serverOptions, + credentials, + key = !options.spdy + ? 'https' + : 'spdy'; + + serverOptions = options[key]; + if (!serverOptions.key || !serverOptions.cert) { + throw new Error('Both options.' + key + '.`key` and options.' + key + '.`cert` are required.'); + } + + credentials = { + key: fs.readFileSync(serverOptions.key), + cert: fs.readFileSync(serverOptions.cert) + }; + + if (serverOptions.ca) { + serverOptions.ca = !Array.isArray(serverOptions.ca) + ? [serverOptions.ca] + : serverOptions.ca + + credentials.ca = serverOptions.ca.map(function (ca) { + return fs.readFileSync(ca); + }); + } + + if (options.spdy) { + // spdy is optional so we require module here rather than on top + var spdy = require('spdy'); + return spdy.createServer(credentials, requestHandler); + } + + return https.createServer(credentials, requestHandler); + } + + return http.createServer(requestHandler); +}; + +core.errorHandler = function error(err, req, res) { + if (err) { + (this.res || res).writeHead(err.status || 500, err.headers || { "Content-Type": "text/plain" }); + (this.res || res).end(err.message + "\n"); + return; + } + + (this.res || res).writeHead(404, {"Content-Type": "text/plain"}); + (this.res || res).end("Not Found\n"); +}; diff --git a/node_modules/http-server/node_modules/union/lib/http-stream.js b/node_modules/http-server/node_modules/union/lib/http-stream.js new file mode 100644 index 0000000..021884f --- /dev/null +++ b/node_modules/http-server/node_modules/union/lib/http-stream.js @@ -0,0 +1,52 @@ +/* + * http-stream.js: Idomatic buffered stream which pipes additional HTTP information. + * + * (C) 2011, Charlie Robbins & the Contributors + * MIT LICENSE + * + */ + +var url = require('url'), + util = require('util'), + qs = require('qs'), + BufferedStream = require('./buffered-stream'); + +var HttpStream = module.exports = function (options) { + options = options || {}; + BufferedStream.call(this, options.limit); + + if (options.buffer === false) { + this.buffer = false; + } + + this.on('pipe', this.pipeState); +}; + +util.inherits(HttpStream, BufferedStream); + +// +// ### function pipeState (source) +// #### @source {ServerRequest|HttpStream} Source stream piping to this instance +// Pipes additional HTTP metadata from the `source` HTTP stream (either concrete or +// abstract) to this instance. e.g. url, headers, query, etc. +// +// Remark: Is there anything else we wish to pipe? +// +HttpStream.prototype.pipeState = function (source) { + this.headers = source.headers; + this.trailers = source.trailers; + this.method = source.method; + + if (source.url) { + this.url = this.originalUrl = source.url; + } + + if (source.query) { + this.query = source.query; + } + else if (source.url) { + this.query = ~source.url.indexOf('?') + ? qs.parse(url.parse(source.url).query) + : {}; + } +}; diff --git a/node_modules/http-server/node_modules/union/lib/index.js b/node_modules/http-server/node_modules/union/lib/index.js new file mode 100644 index 0000000..34c5f0b --- /dev/null +++ b/node_modules/http-server/node_modules/union/lib/index.js @@ -0,0 +1,24 @@ +/* + * index.js: Top-level plugin exposing HTTP features in flatiron + * + * (C) 2011, Charlie Robbins & the Contributors + * MIT LICENSE + * + */ + +var union = exports; + +// +// Expose version information +// +exports.version = require('../package.json').version; + +// +// Expose core union components +// +union.BufferedStream = require('./buffered-stream'); +union.HttpStream = require('./http-stream'); +union.ResponseStream = require('./response-stream'); +union.RoutingStream = require('./routing-stream'); +union.createServer = require('./core').createServer; +union.errorHandler = require('./core').errorHandler; diff --git a/node_modules/http-server/node_modules/union/lib/request-stream.js b/node_modules/http-server/node_modules/union/lib/request-stream.js new file mode 100644 index 0000000..6cb7150 --- /dev/null +++ b/node_modules/http-server/node_modules/union/lib/request-stream.js @@ -0,0 +1,58 @@ +/* + * http-stream.js: Idomatic buffered stream which pipes additional HTTP information. + * + * (C) 2011, Charlie Robbins & the Contributors + * MIT LICENSE + * + */ + +var url = require('url'), + util = require('util'), + qs = require('qs'), + HttpStream = require('./http-stream'); + +var RequestStream = module.exports = function (options) { + options = options || {}; + HttpStream.call(this, options); + + this.on('pipe', this.pipeRequest); + this.request = options.request; +}; + +util.inherits(RequestStream, HttpStream); + +// +// ### function pipeRequest (source) +// #### @source {ServerRequest|HttpStream} Source stream piping to this instance +// Pipes additional HTTP request metadata from the `source` HTTP stream (either concrete or +// abstract) to this instance. e.g. url, headers, query, etc. +// +// Remark: Is there anything else we wish to pipe? +// +RequestStream.prototype.pipeRequest = function (source) { + this.url = this.originalUrl = source.url; + this.method = source.method; + this.httpVersion = source.httpVersion; + this.httpVersionMajor = source.httpVersionMajor; + this.httpVersionMinor = source.httpVersionMinor; + this.setEncoding = source.setEncoding; + this.connection = source.connection; + this.socket = source.socket; + + if (source.query) { + this.query = source.query; + } + else { + this.query = ~source.url.indexOf('?') + ? qs.parse(url.parse(source.url).query) + : {}; + } +}; + +// http.serverRequest methods +['setEncoding'].forEach(function (method) { + RequestStream.prototype[method] = function () { + return this.request[method].apply(this.request, arguments); + }; +}); + diff --git a/node_modules/http-server/node_modules/union/lib/response-stream.js b/node_modules/http-server/node_modules/union/lib/response-stream.js new file mode 100644 index 0000000..aec4aae --- /dev/null +++ b/node_modules/http-server/node_modules/union/lib/response-stream.js @@ -0,0 +1,179 @@ +/* + * response-stream.js: A Stream focused on writing any relevant information to + * a raw http.ServerResponse object. + * + * (C) 2011, Charlie Robbins & the Contributors + * MIT LICENSE + * + */ + +var util = require('util'), + HttpStream = require('./http-stream'); + +// +// ### function ResponseStream (options) +// +// +var ResponseStream = module.exports = function (options) { + var self = this, + key; + + options = options || {}; + HttpStream.call(this, options); + + this.writeable = true; + this.response = options.response; + + if (options.headers) { + for (key in options.headers) { + this.response.setHeader(key, options.headers[key]); + } + } + + // + // Proxy `statusCode` changes to the actual `response.statusCode`. + // + Object.defineProperty(this, 'statusCode', { + get: function () { + return self.response.statusCode; + }, + set: function (value) { + self.response.statusCode = value; + }, + enumerable: true, + configurable: true + }); + + if (this.response) { + this._headers = this.response._headers = this.response._headers || {}; + + // Patch to node core + this.response._headerNames = this.response._headerNames || {}; + + // + // Proxy to emit "header" event + // + this._renderHeaders = this.response._renderHeaders; + this.response._renderHeaders = function () { + if (!self._emittedHeader) { + self._emittedHeader = true; + self.headerSent = true; + self._header = true; + self.emit('header'); + } + + return self._renderHeaders.call(self.response); + }; + } +}; + +util.inherits(ResponseStream, HttpStream); + +ResponseStream.prototype.writeHead = function (statusCode, headers) { + if (headers) { + for (var key in headers) { + this.response.setHeader(key, headers[key]); + } + } + + this.response.statusCode = statusCode; +}; + +// +// Create pass-thru for the necessary +// `http.ServerResponse` methods. +// +['setHeader', 'getHeader', 'removeHeader', '_implicitHeader', 'addTrailers'].forEach(function (method) { + ResponseStream.prototype[method] = function () { + return this.response[method].apply(this.response, arguments); + }; +}); + +ResponseStream.prototype.json = function (obj) { + if (!this.response.writable) { + return; + } + + if (typeof obj === 'number') { + this.response.statusCode = obj; + obj = arguments[1]; + } + + this.modified = true; + + if (!this.response._header && this.response.getHeader('content-type') !== 'application/json') { + this.response.setHeader('content-type', 'application/json'); + } + + this.end(obj ? JSON.stringify(obj) : ''); +}; + +ResponseStream.prototype.html = function (str) { + if (!this.response.writable) { + return; + } + + if (typeof str === 'number') { + this.response.statusCode = str; + str = arguments[1]; + } + + this.modified = true; + + if (!this.response._header && this.response.getHeader('content-type') !== 'text/html') { + this.response.setHeader('content-type', 'text/html'); + } + + this.end(str ? str: ''); +}; + +ResponseStream.prototype.text = function (str) { + if (!this.response.writable) { + return; + } + + if (typeof str === 'number') { + this.response.statusCode = str; + str = arguments[1]; + } + + this.modified = true; + + if (!this.response._header && this.response.getHeader('content-type') !== 'text/plain') { + this.response.setHeader('content-type', 'text/plain'); + } + + this.end(str ? str: ''); +}; + +ResponseStream.prototype.end = function (data) { + if (data && this.writable) { + this.emit('data', data); + } + + this.modified = true; + this.emit('end'); +}; + +ResponseStream.prototype.write = function (data) { + this.modified = true; + + if (this.writable) { + this.emit('data', data); + } +}; + +ResponseStream.prototype.redirect = function (path, status) { + var url = ''; + + if (~path.indexOf('://')) { + url = path; + } else { + url += this.req.connection.encrypted ? 'https://' : 'http://'; + url += this.req.headers.host; + url += (path[0] === '/') ? path : '/' + path; + } + + this.res.writeHead(status || 302, { 'Location': url }); + this.end(); +}; diff --git a/node_modules/http-server/node_modules/union/lib/routing-stream.js b/node_modules/http-server/node_modules/union/lib/routing-stream.js new file mode 100644 index 0000000..2597c47 --- /dev/null +++ b/node_modules/http-server/node_modules/union/lib/routing-stream.js @@ -0,0 +1,126 @@ +/* + * routing-stream.js: A Stream focused on connecting an arbitrary RequestStream and + * ResponseStream through a given Router. + * + * (C) 2011, Charlie Robbins & the Contributors + * MIT LICENSE + * + */ + +var util = require('util'), + union = require('./index'), + RequestStream = require('./request-stream'), + ResponseStream = require('./response-stream'); + +// +// ### function RoutingStream (options) +// +// +var RoutingStream = module.exports = function (options) { + options = options || {}; + RequestStream.call(this, options); + + this.before = options.before || []; + this.after = options.after || []; + this.response = options.response || options.res; + this.headers = options.headers || { + 'x-powered-by': 'union ' + union.version + }; + + this.target = new ResponseStream({ + response: this.response, + headers: this.headers + }); + + this.once('pipe', this.route); +}; + +util.inherits(RoutingStream, RequestStream); + +// +// Called when this instance is piped to **by another stream** +// +RoutingStream.prototype.route = function (req) { + // + // When a `RoutingStream` is piped to: + // + // 1. Setup the pipe-chain between the `after` middleware, the abstract response + // and the concrete response. + // 2. Attempt to dispatch to the `before` middleware, which represent things such as + // favicon, static files, application routing. + // 3. If no match is found then pipe to the 404Stream + // + var self = this, + after, + error, + i; + + // + // Don't allow `this.target` to be writable on HEAD requests + // + this.target.writable = req.method !== 'HEAD'; + + // + // 1. Setup the pipe-chain between the `after` middleware, the abstract response + // and the concrete response. + // + after = [this.target].concat(this.after, this.response); + for (i = 0; i < after.length - 1; i++) { + // + // attach req and res to all streams + // + after[i].req = req; + after[i + 1].req = req; + after[i].res = this.response; + after[i + 1].res = this.response; + after[i].pipe(after[i + 1]); + + // + // prevent multiple responses and memory leaks + // + after[i].on('error', this.onError); + } + + // + // Helper function for dispatching to the 404 stream. + // + function notFound() { + error = new Error('Not found'); + error.status = 404; + self.onError(error); + } + + // + // 2. Attempt to dispatch to the `before` middleware, which represent things such as + // favicon, static files, application routing. + // + (function dispatch(i) { + if (self.target.modified) { + return; + } + else if (++i === self.before.length) { + // + // 3. If no match is found then pipe to the 404Stream + // + return notFound(); + } + + self.target.once('next', dispatch.bind(null, i)); + if (self.before[i].length === 3) { + self.before[i](self, self.target, function (err) { + if (err) { + self.onError(err); + } else { + self.target.emit('next'); + } + }); + } + else { + self.before[i](self, self.target); + } + })(-1); +}; + +RoutingStream.prototype.onError = function (err) { + this.emit('error', err); +}; diff --git a/node_modules/http-server/node_modules/union/node_modules/qs/.jshintignore b/node_modules/http-server/node_modules/union/node_modules/qs/.jshintignore new file mode 100644 index 0000000..3c3629e --- /dev/null +++ b/node_modules/http-server/node_modules/union/node_modules/qs/.jshintignore @@ -0,0 +1 @@ +node_modules diff --git a/node_modules/http-server/node_modules/union/node_modules/qs/.jshintrc b/node_modules/http-server/node_modules/union/node_modules/qs/.jshintrc new file mode 100644 index 0000000..997b3f7 --- /dev/null +++ b/node_modules/http-server/node_modules/union/node_modules/qs/.jshintrc @@ -0,0 +1,10 @@ +{ + "node": true, + + "curly": true, + "latedef": true, + "quotmark": true, + "undef": true, + "unused": true, + "trailing": true +} diff --git a/node_modules/http-server/node_modules/union/node_modules/qs/.npmignore b/node_modules/http-server/node_modules/union/node_modules/qs/.npmignore new file mode 100644 index 0000000..7e1574d --- /dev/null +++ b/node_modules/http-server/node_modules/union/node_modules/qs/.npmignore @@ -0,0 +1,18 @@ +.idea +*.iml +npm-debug.log +dump.rdb +node_modules +results.tap +results.xml +npm-shrinkwrap.json +config.json +.DS_Store +*/.DS_Store +*/*/.DS_Store +._* +*/._* +*/*/._* +coverage.* +lib-cov +complexity.md diff --git a/node_modules/http-server/node_modules/union/node_modules/qs/.travis.yml b/node_modules/http-server/node_modules/union/node_modules/qs/.travis.yml new file mode 100644 index 0000000..c891dd0 --- /dev/null +++ b/node_modules/http-server/node_modules/union/node_modules/qs/.travis.yml @@ -0,0 +1,4 @@ +language: node_js + +node_js: + - 0.10 \ No newline at end of file diff --git a/node_modules/http-server/node_modules/union/node_modules/qs/CHANGELOG.md b/node_modules/http-server/node_modules/union/node_modules/qs/CHANGELOG.md new file mode 100644 index 0000000..f5ee8b4 --- /dev/null +++ b/node_modules/http-server/node_modules/union/node_modules/qs/CHANGELOG.md @@ -0,0 +1,68 @@ + +## [**2.3.3**](https://github.com/hapijs/qs/issues?milestone=18&state=open) +- [**#59**](https://github.com/hapijs/qs/issues/59) make sure array indexes are >= 0, closes #57 +- [**#58**](https://github.com/hapijs/qs/issues/58) make qs usable for browser loader + +## [**2.3.2**](https://github.com/hapijs/qs/issues?milestone=17&state=closed) +- [**#55**](https://github.com/hapijs/qs/issues/55) allow merging a string into an object + +## [**2.3.1**](https://github.com/hapijs/qs/issues?milestone=16&state=closed) +- [**#52**](https://github.com/hapijs/qs/issues/52) Return "undefined" and "false" instead of throwing "TypeError". + +## [**2.3.0**](https://github.com/hapijs/qs/issues?milestone=15&state=closed) +- [**#50**](https://github.com/hapijs/qs/issues/50) add option to omit array indices, closes #46 + +## [**2.2.5**](https://github.com/hapijs/qs/issues?milestone=14&state=closed) +- [**#39**](https://github.com/hapijs/qs/issues/39) Is there an alternative to Buffer.isBuffer? +- [**#49**](https://github.com/hapijs/qs/issues/49) refactor utils.merge, fixes #45 +- [**#41**](https://github.com/hapijs/qs/issues/41) avoid browserifying Buffer, for #39 + +## [**2.2.4**](https://github.com/hapijs/qs/issues?milestone=13&state=closed) +- [**#38**](https://github.com/hapijs/qs/issues/38) how to handle object keys beginning with a number + +## [**2.2.3**](https://github.com/hapijs/qs/issues?milestone=12&state=closed) +- [**#37**](https://github.com/hapijs/qs/issues/37) parser discards first empty value in array +- [**#36**](https://github.com/hapijs/qs/issues/36) Update to lab 4.x + +## [**2.2.2**](https://github.com/hapijs/qs/issues?milestone=11&state=closed) +- [**#33**](https://github.com/hapijs/qs/issues/33) Error when plain object in a value +- [**#34**](https://github.com/hapijs/qs/issues/34) use Object.prototype.hasOwnProperty.call instead of obj.hasOwnProperty +- [**#24**](https://github.com/hapijs/qs/issues/24) Changelog? Semver? + +## [**2.2.1**](https://github.com/hapijs/qs/issues?milestone=10&state=closed) +- [**#32**](https://github.com/hapijs/qs/issues/32) account for circular references properly, closes #31 +- [**#31**](https://github.com/hapijs/qs/issues/31) qs.parse stackoverflow on circular objects + +## [**2.2.0**](https://github.com/hapijs/qs/issues?milestone=9&state=closed) +- [**#26**](https://github.com/hapijs/qs/issues/26) Don't use Buffer global if it's not present +- [**#30**](https://github.com/hapijs/qs/issues/30) Bug when merging non-object values into arrays +- [**#29**](https://github.com/hapijs/qs/issues/29) Don't call Utils.clone at the top of Utils.merge +- [**#23**](https://github.com/hapijs/qs/issues/23) Ability to not limit parameters? + +## [**2.1.0**](https://github.com/hapijs/qs/issues?milestone=8&state=closed) +- [**#22**](https://github.com/hapijs/qs/issues/22) Enable using a RegExp as delimiter + +## [**2.0.0**](https://github.com/hapijs/qs/issues?milestone=7&state=closed) +- [**#18**](https://github.com/hapijs/qs/issues/18) Why is there arrayLimit? +- [**#20**](https://github.com/hapijs/qs/issues/20) Configurable parametersLimit +- [**#21**](https://github.com/hapijs/qs/issues/21) make all limits optional, for #18, for #20 + +## [**1.2.2**](https://github.com/hapijs/qs/issues?milestone=6&state=closed) +- [**#19**](https://github.com/hapijs/qs/issues/19) Don't overwrite null values + +## [**1.2.1**](https://github.com/hapijs/qs/issues?milestone=5&state=closed) +- [**#16**](https://github.com/hapijs/qs/issues/16) ignore non-string delimiters +- [**#15**](https://github.com/hapijs/qs/issues/15) Close code block + +## [**1.2.0**](https://github.com/hapijs/qs/issues?milestone=4&state=closed) +- [**#12**](https://github.com/hapijs/qs/issues/12) Add optional delim argument +- [**#13**](https://github.com/hapijs/qs/issues/13) fix #11: flattened keys in array are now correctly parsed + +## [**1.1.0**](https://github.com/hapijs/qs/issues?milestone=3&state=closed) +- [**#7**](https://github.com/hapijs/qs/issues/7) Empty values of a POST array disappear after being submitted +- [**#9**](https://github.com/hapijs/qs/issues/9) Should not omit equals signs (=) when value is null +- [**#6**](https://github.com/hapijs/qs/issues/6) Minor grammar fix in README + +## [**1.0.2**](https://github.com/hapijs/qs/issues?milestone=2&state=closed) +- [**#5**](https://github.com/hapijs/qs/issues/5) array holes incorrectly copied into object on large index + diff --git a/node_modules/http-server/node_modules/union/node_modules/qs/CONTRIBUTING.md b/node_modules/http-server/node_modules/union/node_modules/qs/CONTRIBUTING.md new file mode 100644 index 0000000..8928361 --- /dev/null +++ b/node_modules/http-server/node_modules/union/node_modules/qs/CONTRIBUTING.md @@ -0,0 +1 @@ +Please view our [hapijs contributing guide](https://github.com/hapijs/hapi/blob/master/CONTRIBUTING.md). diff --git a/node_modules/http-server/node_modules/union/node_modules/qs/LICENSE b/node_modules/http-server/node_modules/union/node_modules/qs/LICENSE new file mode 100755 index 0000000..d456948 --- /dev/null +++ b/node_modules/http-server/node_modules/union/node_modules/qs/LICENSE @@ -0,0 +1,28 @@ +Copyright (c) 2014 Nathan LaFreniere and other contributors. +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are met: + * Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. + * The names of any contributors may not be used to endorse or promote + products derived from this software without specific prior written + permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS AND CONTRIBUTORS BE LIABLE FOR ANY +DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND +ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + + * * * + +The complete list of contributors can be found at: https://github.com/hapijs/qs/graphs/contributors diff --git a/node_modules/http-server/node_modules/union/node_modules/qs/Makefile b/node_modules/http-server/node_modules/union/node_modules/qs/Makefile new file mode 100644 index 0000000..31cc899 --- /dev/null +++ b/node_modules/http-server/node_modules/union/node_modules/qs/Makefile @@ -0,0 +1,8 @@ +test: + @node node_modules/lab/bin/lab -a code -L +test-cov: + @node node_modules/lab/bin/lab -a code -t 100 -L +test-cov-html: + @node node_modules/lab/bin/lab -a code -L -r html -o coverage.html + +.PHONY: test test-cov test-cov-html diff --git a/node_modules/http-server/node_modules/union/node_modules/qs/README.md b/node_modules/http-server/node_modules/union/node_modules/qs/README.md new file mode 100755 index 0000000..21bf3fa --- /dev/null +++ b/node_modules/http-server/node_modules/union/node_modules/qs/README.md @@ -0,0 +1,222 @@ +# qs + +A querystring parsing and stringifying library with some added security. + +[![Build Status](https://secure.travis-ci.org/hapijs/qs.svg)](http://travis-ci.org/hapijs/qs) + +Lead Maintainer: [Nathan LaFreniere](https://github.com/nlf) + +The **qs** module was originally created and maintained by [TJ Holowaychuk](https://github.com/visionmedia/node-querystring). + +## Usage + +```javascript +var Qs = require('qs'); + +var obj = Qs.parse('a=c'); // { a: 'c' } +var str = Qs.stringify(obj); // 'a=c' +``` + +### Parsing Objects + +```javascript +Qs.parse(string, [options]); +``` + +**qs** allows you to create nested objects within your query strings, by surrounding the name of sub-keys with square brackets `[]`. +For example, the string `'foo[bar]=baz'` converts to: + +```javascript +{ + foo: { + bar: 'baz' + } +} +``` + +URI encoded strings work too: + +```javascript +Qs.parse('a%5Bb%5D=c'); +// { a: { b: 'c' } } +``` + +You can also nest your objects, like `'foo[bar][baz]=foobarbaz'`: + +```javascript +{ + foo: { + bar: { + baz: 'foobarbaz' + } + } +} +``` + +By default, when nesting objects **qs** will only parse up to 5 children deep. This means if you attempt to parse a string like +`'a[b][c][d][e][f][g][h][i]=j'` your resulting object will be: + +```javascript +{ + a: { + b: { + c: { + d: { + e: { + f: { + '[g][h][i]': 'j' + } + } + } + } + } + } +} +``` + +This depth can be overridden by passing a `depth` option to `Qs.parse(string, [options])`: + +```javascript +Qs.parse('a[b][c][d][e][f][g][h][i]=j', { depth: 1 }); +// { a: { b: { '[c][d][e][f][g][h][i]': 'j' } } } +``` + +The depth limit helps mitigate abuse when **qs** is used to parse user input, and it is recommended to keep it a reasonably small number. + +For similar reasons, by default **qs** will only parse up to 1000 parameters. This can be overridden by passing a `parameterLimit` option: + +```javascript +Qs.parse('a=b&c=d', { parameterLimit: 1 }); +// { a: 'b' } +``` + +An optional delimiter can also be passed: + +```javascript +Qs.parse('a=b;c=d', { delimiter: ';' }); +// { a: 'b', c: 'd' } +``` + +Delimiters can be a regular expression too: + +```javascript +Qs.parse('a=b;c=d,e=f', { delimiter: /[;,]/ }); +// { a: 'b', c: 'd', e: 'f' } +``` + +### Parsing Arrays + +**qs** can also parse arrays using a similar `[]` notation: + +```javascript +Qs.parse('a[]=b&a[]=c'); +// { a: ['b', 'c'] } +``` + +You may specify an index as well: + +```javascript +Qs.parse('a[1]=c&a[0]=b'); +// { a: ['b', 'c'] } +``` + +Note that the only difference between an index in an array and a key in an object is that the value between the brackets must be a number +to create an array. When creating arrays with specific indices, **qs** will compact a sparse array to only the existing values preserving +their order: + +```javascript +Qs.parse('a[1]=b&a[15]=c'); +// { a: ['b', 'c'] } +``` + +Note that an empty string is also a value, and will be preserved: + +```javascript +Qs.parse('a[]=&a[]=b'); +// { a: ['', 'b'] } +Qs.parse('a[0]=b&a[1]=&a[2]=c'); +// { a: ['b', '', 'c'] } +``` + +**qs** will also limit specifying indices in an array to a maximum index of `20`. Any array members with an index of greater than `20` will +instead be converted to an object with the index as the key: + +```javascript +Qs.parse('a[100]=b'); +// { a: { '100': 'b' } } +``` + +This limit can be overridden by passing an `arrayLimit` option: + +```javascript +Qs.parse('a[1]=b', { arrayLimit: 0 }); +// { a: { '1': 'b' } } +``` + +To disable array parsing entirely, set `arrayLimit` to `-1`. + +If you mix notations, **qs** will merge the two items into an object: + +```javascript +Qs.parse('a[0]=b&a[b]=c'); +// { a: { '0': 'b', b: 'c' } } +``` + +You can also create arrays of objects: + +```javascript +Qs.parse('a[][b]=c'); +// { a: [{ b: 'c' }] } +``` + +### Stringifying + +```javascript +Qs.stringify(object, [options]); +``` + +When stringifying, **qs** always URI encodes output. Objects are stringified as you would expect: + +```javascript +Qs.stringify({ a: 'b' }); +// 'a=b' +Qs.stringify({ a: { b: 'c' } }); +// 'a%5Bb%5D=c' +``` + +Examples beyond this point will be shown as though the output is not URI encoded for clarity. Please note that the return values in these cases *will* be URI encoded during real usage. + +When arrays are stringified, by default they are given explicit indices: + +```javascript +Qs.stringify({ a: ['b', 'c', 'd'] }); +// 'a[0]=b&a[1]=c&a[2]=d' +``` + +You may override this by setting the `indices` option to `false`: + +```javascript +Qs.stringify({ a: ['b', 'c', 'd'] }, { indices: false }); +// 'a=b&a=c&a=d' +``` + +Empty strings and null values will omit the value, but the equals sign (=) remains in place: + +```javascript +Qs.stringify({ a: '' }); +// 'a=' +``` + +Properties that are set to `undefined` will be omitted entirely: + +```javascript +Qs.stringify({ a: null, b: undefined }); +// 'a=' +``` + +The delimiter may be overridden with stringify as well: + +```javascript +Qs.stringify({ a: 'b', c: 'd' }, { delimiter: ';' }); +// 'a=b;c=d' +``` diff --git a/node_modules/http-server/node_modules/union/node_modules/qs/index.js b/node_modules/http-server/node_modules/union/node_modules/qs/index.js new file mode 100644 index 0000000..2291cd8 --- /dev/null +++ b/node_modules/http-server/node_modules/union/node_modules/qs/index.js @@ -0,0 +1 @@ +module.exports = require('./lib/'); diff --git a/node_modules/http-server/node_modules/union/node_modules/qs/lib/index.js b/node_modules/http-server/node_modules/union/node_modules/qs/lib/index.js new file mode 100755 index 0000000..0e09493 --- /dev/null +++ b/node_modules/http-server/node_modules/union/node_modules/qs/lib/index.js @@ -0,0 +1,15 @@ +// Load modules + +var Stringify = require('./stringify'); +var Parse = require('./parse'); + + +// Declare internals + +var internals = {}; + + +module.exports = { + stringify: Stringify, + parse: Parse +}; diff --git a/node_modules/http-server/node_modules/union/node_modules/qs/lib/parse.js b/node_modules/http-server/node_modules/union/node_modules/qs/lib/parse.js new file mode 100755 index 0000000..4e7d02a --- /dev/null +++ b/node_modules/http-server/node_modules/union/node_modules/qs/lib/parse.js @@ -0,0 +1,157 @@ +// Load modules + +var Utils = require('./utils'); + + +// Declare internals + +var internals = { + delimiter: '&', + depth: 5, + arrayLimit: 20, + parameterLimit: 1000 +}; + + +internals.parseValues = function (str, options) { + + var obj = {}; + var parts = str.split(options.delimiter, options.parameterLimit === Infinity ? undefined : options.parameterLimit); + + for (var i = 0, il = parts.length; i < il; ++i) { + var part = parts[i]; + var pos = part.indexOf(']=') === -1 ? part.indexOf('=') : part.indexOf(']=') + 1; + + if (pos === -1) { + obj[Utils.decode(part)] = ''; + } + else { + var key = Utils.decode(part.slice(0, pos)); + var val = Utils.decode(part.slice(pos + 1)); + + if (!obj.hasOwnProperty(key)) { + obj[key] = val; + } + else { + obj[key] = [].concat(obj[key]).concat(val); + } + } + } + + return obj; +}; + + +internals.parseObject = function (chain, val, options) { + + if (!chain.length) { + return val; + } + + var root = chain.shift(); + + var obj = {}; + if (root === '[]') { + obj = []; + obj = obj.concat(internals.parseObject(chain, val, options)); + } + else { + var cleanRoot = root[0] === '[' && root[root.length - 1] === ']' ? root.slice(1, root.length - 1) : root; + var index = parseInt(cleanRoot, 10); + var indexString = '' + index; + if (!isNaN(index) && + root !== cleanRoot && + indexString === cleanRoot && + index >= 0 && + index <= options.arrayLimit) { + + obj = []; + obj[index] = internals.parseObject(chain, val, options); + } + else { + obj[cleanRoot] = internals.parseObject(chain, val, options); + } + } + + return obj; +}; + + +internals.parseKeys = function (key, val, options) { + + if (!key) { + return; + } + + // The regex chunks + + var parent = /^([^\[\]]*)/; + var child = /(\[[^\[\]]*\])/g; + + // Get the parent + + var segment = parent.exec(key); + + // Don't allow them to overwrite object prototype properties + + if (Object.prototype.hasOwnProperty(segment[1])) { + return; + } + + // Stash the parent if it exists + + var keys = []; + if (segment[1]) { + keys.push(segment[1]); + } + + // Loop through children appending to the array until we hit depth + + var i = 0; + while ((segment = child.exec(key)) !== null && i < options.depth) { + + ++i; + if (!Object.prototype.hasOwnProperty(segment[1].replace(/\[|\]/g, ''))) { + keys.push(segment[1]); + } + } + + // If there's a remainder, just add whatever is left + + if (segment) { + keys.push('[' + key.slice(segment.index) + ']'); + } + + return internals.parseObject(keys, val, options); +}; + + +module.exports = function (str, options) { + + if (str === '' || + str === null || + typeof str === 'undefined') { + + return {}; + } + + options = options || {}; + options.delimiter = typeof options.delimiter === 'string' || Utils.isRegExp(options.delimiter) ? options.delimiter : internals.delimiter; + options.depth = typeof options.depth === 'number' ? options.depth : internals.depth; + options.arrayLimit = typeof options.arrayLimit === 'number' ? options.arrayLimit : internals.arrayLimit; + options.parameterLimit = typeof options.parameterLimit === 'number' ? options.parameterLimit : internals.parameterLimit; + + var tempObj = typeof str === 'string' ? internals.parseValues(str, options) : str; + var obj = {}; + + // Iterate over the keys and setup the new object + + var keys = Object.keys(tempObj); + for (var i = 0, il = keys.length; i < il; ++i) { + var key = keys[i]; + var newObj = internals.parseKeys(key, tempObj[key], options); + obj = Utils.merge(obj, newObj); + } + + return Utils.compact(obj); +}; diff --git a/node_modules/http-server/node_modules/union/node_modules/qs/lib/stringify.js b/node_modules/http-server/node_modules/union/node_modules/qs/lib/stringify.js new file mode 100755 index 0000000..b441104 --- /dev/null +++ b/node_modules/http-server/node_modules/union/node_modules/qs/lib/stringify.js @@ -0,0 +1,77 @@ +// Load modules + +var Utils = require('./utils'); + + +// Declare internals + +var internals = { + delimiter: '&', + indices: true +}; + + +internals.stringify = function (obj, prefix, options) { + + if (Utils.isBuffer(obj)) { + obj = obj.toString(); + } + else if (obj instanceof Date) { + obj = obj.toISOString(); + } + else if (obj === null) { + obj = ''; + } + + if (typeof obj === 'string' || + typeof obj === 'number' || + typeof obj === 'boolean') { + + return [encodeURIComponent(prefix) + '=' + encodeURIComponent(obj)]; + } + + var values = []; + + if (typeof obj === 'undefined') { + return values; + } + + var objKeys = Object.keys(obj); + for (var i = 0, il = objKeys.length; i < il; ++i) { + var key = objKeys[i]; + if (!options.indices && + Array.isArray(obj)) { + + values = values.concat(internals.stringify(obj[key], prefix, options)); + } + else { + values = values.concat(internals.stringify(obj[key], prefix + '[' + key + ']', options)); + } + } + + return values; +}; + + +module.exports = function (obj, options) { + + options = options || {}; + var delimiter = typeof options.delimiter === 'undefined' ? internals.delimiter : options.delimiter; + options.indices = typeof options.indices === 'boolean' ? options.indices : internals.indices; + + var keys = []; + + if (typeof obj !== 'object' || + obj === null) { + + return ''; + } + + var objKeys = Object.keys(obj); + for (var i = 0, il = objKeys.length; i < il; ++i) { + var key = objKeys[i]; + keys = keys.concat(internals.stringify(obj[key], key, options)); + } + + return keys.join(delimiter); +}; diff --git a/node_modules/http-server/node_modules/union/node_modules/qs/lib/utils.js b/node_modules/http-server/node_modules/union/node_modules/qs/lib/utils.js new file mode 100755 index 0000000..5240bd5 --- /dev/null +++ b/node_modules/http-server/node_modules/union/node_modules/qs/lib/utils.js @@ -0,0 +1,132 @@ +// Load modules + + +// Declare internals + +var internals = {}; + + +exports.arrayToObject = function (source) { + + var obj = {}; + for (var i = 0, il = source.length; i < il; ++i) { + if (typeof source[i] !== 'undefined') { + + obj[i] = source[i]; + } + } + + return obj; +}; + + +exports.merge = function (target, source) { + + if (!source) { + return target; + } + + if (typeof source !== 'object') { + if (Array.isArray(target)) { + target.push(source); + } + else { + target[source] = true; + } + + return target; + } + + if (typeof target !== 'object') { + target = [target].concat(source); + return target; + } + + if (Array.isArray(target) && + !Array.isArray(source)) { + + target = exports.arrayToObject(target); + } + + var keys = Object.keys(source); + for (var k = 0, kl = keys.length; k < kl; ++k) { + var key = keys[k]; + var value = source[key]; + + if (!target[key]) { + target[key] = value; + } + else { + target[key] = exports.merge(target[key], value); + } + } + + return target; +}; + + +exports.decode = function (str) { + + try { + return decodeURIComponent(str.replace(/\+/g, ' ')); + } catch (e) { + return str; + } +}; + + +exports.compact = function (obj, refs) { + + if (typeof obj !== 'object' || + obj === null) { + + return obj; + } + + refs = refs || []; + var lookup = refs.indexOf(obj); + if (lookup !== -1) { + return refs[lookup]; + } + + refs.push(obj); + + if (Array.isArray(obj)) { + var compacted = []; + + for (var i = 0, il = obj.length; i < il; ++i) { + if (typeof obj[i] !== 'undefined') { + compacted.push(obj[i]); + } + } + + return compacted; + } + + var keys = Object.keys(obj); + for (i = 0, il = keys.length; i < il; ++i) { + var key = keys[i]; + obj[key] = exports.compact(obj[key], refs); + } + + return obj; +}; + + +exports.isRegExp = function (obj) { + return Object.prototype.toString.call(obj) === '[object RegExp]'; +}; + + +exports.isBuffer = function (obj) { + + if (obj === null || + typeof obj === 'undefined') { + + return false; + } + + return !!(obj.constructor && + obj.constructor.isBuffer && + obj.constructor.isBuffer(obj)); +}; diff --git a/node_modules/http-server/node_modules/union/node_modules/qs/package.json b/node_modules/http-server/node_modules/union/node_modules/qs/package.json new file mode 100644 index 0000000..6096919 --- /dev/null +++ b/node_modules/http-server/node_modules/union/node_modules/qs/package.json @@ -0,0 +1,59 @@ +{ + "name": "qs", + "version": "2.3.3", + "description": "A querystring parser that supports nesting and arrays, with a depth limit", + "homepage": "https://github.com/hapijs/qs", + "main": "index.js", + "dependencies": {}, + "devDependencies": { + "code": "1.x.x", + "lab": "5.x.x" + }, + "scripts": { + "test": "make test-cov" + }, + "repository": { + "type": "git", + "url": "https://github.com/hapijs/qs.git" + }, + "keywords": [ + "querystring", + "qs" + ], + "licenses": [ + { + "type": "BSD", + "url": "http://github.com/hapijs/qs/raw/master/LICENSE" + } + ], + "gitHead": "9250c4cda5102fcf72441445816e6d311fc6813d", + "bugs": { + "url": "https://github.com/hapijs/qs/issues" + }, + "_id": "qs@2.3.3", + "_shasum": "e9e85adbe75da0bbe4c8e0476a086290f863b404", + "_from": "qs@>=2.3.3 <2.4.0", + "_npmVersion": "2.1.6", + "_nodeVersion": "0.10.32", + "_npmUser": { + "name": "nlf", + "email": "quitlahok@gmail.com" + }, + "maintainers": [ + { + "name": "nlf", + "email": "quitlahok@gmail.com" + }, + { + "name": "hueniverse", + "email": "eran@hueniverse.com" + } + ], + "dist": { + "shasum": "e9e85adbe75da0bbe4c8e0476a086290f863b404", + "tarball": "http://registry.npmjs.org/qs/-/qs-2.3.3.tgz" + }, + "directories": {}, + "_resolved": "https://registry.npmjs.org/qs/-/qs-2.3.3.tgz", + "readme": "ERROR: No README data found!" +} diff --git a/node_modules/http-server/node_modules/union/node_modules/qs/test/parse.js b/node_modules/http-server/node_modules/union/node_modules/qs/test/parse.js new file mode 100755 index 0000000..6c20cc1 --- /dev/null +++ b/node_modules/http-server/node_modules/union/node_modules/qs/test/parse.js @@ -0,0 +1,413 @@ +/* eslint no-extend-native:0 */ +// Load modules + +var Code = require('code'); +var Lab = require('lab'); +var Qs = require('../'); + + +// Declare internals + +var internals = {}; + + +// Test shortcuts + +var lab = exports.lab = Lab.script(); +var expect = Code.expect; +var describe = lab.experiment; +var it = lab.test; + + +describe('parse()', function () { + + it('parses a simple string', function (done) { + + expect(Qs.parse('0=foo')).to.deep.equal({ '0': 'foo' }); + expect(Qs.parse('foo=c++')).to.deep.equal({ foo: 'c ' }); + expect(Qs.parse('a[>=]=23')).to.deep.equal({ a: { '>=': '23' } }); + expect(Qs.parse('a[<=>]==23')).to.deep.equal({ a: { '<=>': '=23' } }); + expect(Qs.parse('a[==]=23')).to.deep.equal({ a: { '==': '23' } }); + expect(Qs.parse('foo')).to.deep.equal({ foo: '' }); + expect(Qs.parse('foo=bar')).to.deep.equal({ foo: 'bar' }); + expect(Qs.parse(' foo = bar = baz ')).to.deep.equal({ ' foo ': ' bar = baz ' }); + expect(Qs.parse('foo=bar=baz')).to.deep.equal({ foo: 'bar=baz' }); + expect(Qs.parse('foo=bar&bar=baz')).to.deep.equal({ foo: 'bar', bar: 'baz' }); + expect(Qs.parse('foo=bar&baz')).to.deep.equal({ foo: 'bar', baz: '' }); + expect(Qs.parse('cht=p3&chd=t:60,40&chs=250x100&chl=Hello|World')).to.deep.equal({ + cht: 'p3', + chd: 't:60,40', + chs: '250x100', + chl: 'Hello|World' + }); + done(); + }); + + it('parses a single nested string', function (done) { + + expect(Qs.parse('a[b]=c')).to.deep.equal({ a: { b: 'c' } }); + done(); + }); + + it('parses a double nested string', function (done) { + + expect(Qs.parse('a[b][c]=d')).to.deep.equal({ a: { b: { c: 'd' } } }); + done(); + }); + + it('defaults to a depth of 5', function (done) { + + expect(Qs.parse('a[b][c][d][e][f][g][h]=i')).to.deep.equal({ a: { b: { c: { d: { e: { f: { '[g][h]': 'i' } } } } } } }); + done(); + }); + + it('only parses one level when depth = 1', function (done) { + + expect(Qs.parse('a[b][c]=d', { depth: 1 })).to.deep.equal({ a: { b: { '[c]': 'd' } } }); + expect(Qs.parse('a[b][c][d]=e', { depth: 1 })).to.deep.equal({ a: { b: { '[c][d]': 'e' } } }); + done(); + }); + + it('parses a simple array', function (done) { + + expect(Qs.parse('a=b&a=c')).to.deep.equal({ a: ['b', 'c'] }); + done(); + }); + + it('parses an explicit array', function (done) { + + expect(Qs.parse('a[]=b')).to.deep.equal({ a: ['b'] }); + expect(Qs.parse('a[]=b&a[]=c')).to.deep.equal({ a: ['b', 'c'] }); + expect(Qs.parse('a[]=b&a[]=c&a[]=d')).to.deep.equal({ a: ['b', 'c', 'd'] }); + done(); + }); + + it('parses a mix of simple and explicit arrays', function (done) { + + expect(Qs.parse('a=b&a[]=c')).to.deep.equal({ a: ['b', 'c'] }); + expect(Qs.parse('a[]=b&a=c')).to.deep.equal({ a: ['b', 'c'] }); + expect(Qs.parse('a[0]=b&a=c')).to.deep.equal({ a: ['b', 'c'] }); + expect(Qs.parse('a=b&a[0]=c')).to.deep.equal({ a: ['b', 'c'] }); + expect(Qs.parse('a[1]=b&a=c')).to.deep.equal({ a: ['b', 'c'] }); + expect(Qs.parse('a=b&a[1]=c')).to.deep.equal({ a: ['b', 'c'] }); + done(); + }); + + it('parses a nested array', function (done) { + + expect(Qs.parse('a[b][]=c&a[b][]=d')).to.deep.equal({ a: { b: ['c', 'd'] } }); + expect(Qs.parse('a[>=]=25')).to.deep.equal({ a: { '>=': '25' } }); + done(); + }); + + it('allows to specify array indices', function (done) { + + expect(Qs.parse('a[1]=c&a[0]=b&a[2]=d')).to.deep.equal({ a: ['b', 'c', 'd'] }); + expect(Qs.parse('a[1]=c&a[0]=b')).to.deep.equal({ a: ['b', 'c'] }); + expect(Qs.parse('a[1]=c')).to.deep.equal({ a: ['c'] }); + done(); + }); + + it('limits specific array indices to 20', function (done) { + + expect(Qs.parse('a[20]=a')).to.deep.equal({ a: ['a'] }); + expect(Qs.parse('a[21]=a')).to.deep.equal({ a: { '21': 'a' } }); + done(); + }); + + it('supports keys that begin with a number', function (done) { + + expect(Qs.parse('a[12b]=c')).to.deep.equal({ a: { '12b': 'c' } }); + done(); + }); + + it('supports encoded = signs', function (done) { + + expect(Qs.parse('he%3Dllo=th%3Dere')).to.deep.equal({ 'he=llo': 'th=ere' }); + done(); + }); + + it('is ok with url encoded strings', function (done) { + + expect(Qs.parse('a[b%20c]=d')).to.deep.equal({ a: { 'b c': 'd' } }); + expect(Qs.parse('a[b]=c%20d')).to.deep.equal({ a: { b: 'c d' } }); + done(); + }); + + it('allows brackets in the value', function (done) { + + expect(Qs.parse('pets=["tobi"]')).to.deep.equal({ pets: '["tobi"]' }); + expect(Qs.parse('operators=[">=", "<="]')).to.deep.equal({ operators: '[">=", "<="]' }); + done(); + }); + + it('allows empty values', function (done) { + + expect(Qs.parse('')).to.deep.equal({}); + expect(Qs.parse(null)).to.deep.equal({}); + expect(Qs.parse(undefined)).to.deep.equal({}); + done(); + }); + + it('transforms arrays to objects', function (done) { + + expect(Qs.parse('foo[0]=bar&foo[bad]=baz')).to.deep.equal({ foo: { '0': 'bar', bad: 'baz' } }); + expect(Qs.parse('foo[bad]=baz&foo[0]=bar')).to.deep.equal({ foo: { bad: 'baz', '0': 'bar' } }); + expect(Qs.parse('foo[bad]=baz&foo[]=bar')).to.deep.equal({ foo: { bad: 'baz', '0': 'bar' } }); + expect(Qs.parse('foo[]=bar&foo[bad]=baz')).to.deep.equal({ foo: { '0': 'bar', bad: 'baz' } }); + expect(Qs.parse('foo[bad]=baz&foo[]=bar&foo[]=foo')).to.deep.equal({ foo: { bad: 'baz', '0': 'bar', '1': 'foo' } }); + expect(Qs.parse('foo[0][a]=a&foo[0][b]=b&foo[1][a]=aa&foo[1][b]=bb')).to.deep.equal({foo: [ {a: 'a', b: 'b'}, {a: 'aa', b: 'bb'} ]}); + done(); + }); + + it('can add keys to objects', function (done) { + + expect(Qs.parse('a[b]=c&a=d')).to.deep.equal({ a: { b: 'c', d: true } }); + done(); + }); + + it('correctly prunes undefined values when converting an array to an object', function (done) { + + expect(Qs.parse('a[2]=b&a[99999999]=c')).to.deep.equal({ a: { '2': 'b', '99999999': 'c' } }); + done(); + }); + + it('supports malformed uri characters', function (done) { + + expect(Qs.parse('{%:%}')).to.deep.equal({ '{%:%}': '' }); + expect(Qs.parse('foo=%:%}')).to.deep.equal({ foo: '%:%}' }); + done(); + }); + + it('doesn\'t produce empty keys', function (done) { + + expect(Qs.parse('_r=1&')).to.deep.equal({ '_r': '1' }); + done(); + }); + + it('cannot override prototypes', function (done) { + + var obj = Qs.parse('toString=bad&bad[toString]=bad&constructor=bad'); + expect(typeof obj.toString).to.equal('function'); + expect(typeof obj.bad.toString).to.equal('function'); + expect(typeof obj.constructor).to.equal('function'); + done(); + }); + + it('cannot access Object prototype', function (done) { + + Qs.parse('constructor[prototype][bad]=bad'); + Qs.parse('bad[constructor][prototype][bad]=bad'); + expect(typeof Object.prototype.bad).to.equal('undefined'); + done(); + }); + + it('parses arrays of objects', function (done) { + + expect(Qs.parse('a[][b]=c')).to.deep.equal({ a: [{ b: 'c' }] }); + expect(Qs.parse('a[0][b]=c')).to.deep.equal({ a: [{ b: 'c' }] }); + done(); + }); + + it('allows for empty strings in arrays', function (done) { + + expect(Qs.parse('a[]=b&a[]=&a[]=c')).to.deep.equal({ a: ['b', '', 'c'] }); + expect(Qs.parse('a[0]=b&a[1]=&a[2]=c&a[19]=')).to.deep.equal({ a: ['b', '', 'c', ''] }); + expect(Qs.parse('a[]=&a[]=b&a[]=c')).to.deep.equal({ a: ['', 'b', 'c'] }); + done(); + }); + + it('compacts sparse arrays', function (done) { + + expect(Qs.parse('a[10]=1&a[2]=2')).to.deep.equal({ a: ['2', '1'] }); + done(); + }); + + it('parses semi-parsed strings', function (done) { + + expect(Qs.parse({ 'a[b]': 'c' })).to.deep.equal({ a: { b: 'c' } }); + expect(Qs.parse({ 'a[b]': 'c', 'a[d]': 'e' })).to.deep.equal({ a: { b: 'c', d: 'e' } }); + done(); + }); + + it('parses buffers correctly', function (done) { + + var b = new Buffer('test'); + expect(Qs.parse({ a: b })).to.deep.equal({ a: b }); + done(); + }); + + it('continues parsing when no parent is found', function (done) { + + expect(Qs.parse('[]&a=b')).to.deep.equal({ '0': '', a: 'b' }); + expect(Qs.parse('[foo]=bar')).to.deep.equal({ foo: 'bar' }); + done(); + }); + + it('does not error when parsing a very long array', function (done) { + + var str = 'a[]=a'; + while (Buffer.byteLength(str) < 128 * 1024) { + str += '&' + str; + } + + expect(function () { + + Qs.parse(str); + }).to.not.throw(); + + done(); + }); + + it('should not throw when a native prototype has an enumerable property', { parallel: false }, function (done) { + + Object.prototype.crash = ''; + Array.prototype.crash = ''; + expect(Qs.parse.bind(null, 'a=b')).to.not.throw(); + expect(Qs.parse('a=b')).to.deep.equal({ a: 'b' }); + expect(Qs.parse.bind(null, 'a[][b]=c')).to.not.throw(); + expect(Qs.parse('a[][b]=c')).to.deep.equal({ a: [{ b: 'c' }] }); + delete Object.prototype.crash; + delete Array.prototype.crash; + done(); + }); + + it('parses a string with an alternative string delimiter', function (done) { + + expect(Qs.parse('a=b;c=d', { delimiter: ';' })).to.deep.equal({ a: 'b', c: 'd' }); + done(); + }); + + it('parses a string with an alternative RegExp delimiter', function (done) { + + expect(Qs.parse('a=b; c=d', { delimiter: /[;,] */ })).to.deep.equal({ a: 'b', c: 'd' }); + done(); + }); + + it('does not use non-splittable objects as delimiters', function (done) { + + expect(Qs.parse('a=b&c=d', { delimiter: true })).to.deep.equal({ a: 'b', c: 'd' }); + done(); + }); + + it('allows overriding parameter limit', function (done) { + + expect(Qs.parse('a=b&c=d', { parameterLimit: 1 })).to.deep.equal({ a: 'b' }); + done(); + }); + + it('allows setting the parameter limit to Infinity', function (done) { + + expect(Qs.parse('a=b&c=d', { parameterLimit: Infinity })).to.deep.equal({ a: 'b', c: 'd' }); + done(); + }); + + it('allows overriding array limit', function (done) { + + expect(Qs.parse('a[0]=b', { arrayLimit: -1 })).to.deep.equal({ a: { '0': 'b' } }); + expect(Qs.parse('a[-1]=b', { arrayLimit: -1 })).to.deep.equal({ a: { '-1': 'b' } }); + expect(Qs.parse('a[0]=b&a[1]=c', { arrayLimit: 0 })).to.deep.equal({ a: { '0': 'b', '1': 'c' } }); + done(); + }); + + it('parses an object', function (done) { + + var input = { + 'user[name]': {'pop[bob]': 3}, + 'user[email]': null + }; + + var expected = { + 'user': { + 'name': {'pop[bob]': 3}, + 'email': null + } + }; + + var result = Qs.parse(input); + + expect(result).to.deep.equal(expected); + done(); + }); + + it('parses an object and not child values', function (done) { + + var input = { + 'user[name]': {'pop[bob]': { 'test': 3 }}, + 'user[email]': null + }; + + var expected = { + 'user': { + 'name': {'pop[bob]': { 'test': 3 }}, + 'email': null + } + }; + + var result = Qs.parse(input); + + expect(result).to.deep.equal(expected); + done(); + }); + + it('does not blow up when Buffer global is missing', function (done) { + + var tempBuffer = global.Buffer; + delete global.Buffer; + var result = Qs.parse('a=b&c=d'); + global.Buffer = tempBuffer; + expect(result).to.deep.equal({ a: 'b', c: 'd' }); + done(); + }); + + it('does not crash when using invalid dot notation', function (done) { + + expect(Qs.parse('roomInfoList[0].childrenAges[0]=15&roomInfoList[0].numberOfAdults=2')).to.deep.equal({ roomInfoList: [['15', '2']] }); + done(); + }); + + it('does not crash when parsing circular references', function (done) { + + var a = {}; + a.b = a; + + var parsed; + + expect(function () { + + parsed = Qs.parse({ 'foo[bar]': 'baz', 'foo[baz]': a }); + }).to.not.throw(); + + expect(parsed).to.contain('foo'); + expect(parsed.foo).to.contain('bar', 'baz'); + expect(parsed.foo.bar).to.equal('baz'); + expect(parsed.foo.baz).to.deep.equal(a); + done(); + }); + + it('parses plain objects correctly', function (done) { + + var a = Object.create(null); + a.b = 'c'; + + expect(Qs.parse(a)).to.deep.equal({ b: 'c' }); + var result = Qs.parse({ a: a }); + expect(result).to.contain('a'); + expect(result.a).to.deep.equal(a); + done(); + }); + + it('parses dates correctly', function (done) { + + var now = new Date(); + expect(Qs.parse({ a: now })).to.deep.equal({ a: now }); + done(); + }); + + it('parses regular expressions correctly', function (done) { + + var re = /^test$/; + expect(Qs.parse({ a: re })).to.deep.equal({ a: re }); + done(); + }); +}); diff --git a/node_modules/http-server/node_modules/union/node_modules/qs/test/stringify.js b/node_modules/http-server/node_modules/union/node_modules/qs/test/stringify.js new file mode 100755 index 0000000..75e397a --- /dev/null +++ b/node_modules/http-server/node_modules/union/node_modules/qs/test/stringify.js @@ -0,0 +1,179 @@ +/* eslint no-extend-native:0 */ +// Load modules + +var Code = require('code'); +var Lab = require('lab'); +var Qs = require('../'); + + +// Declare internals + +var internals = {}; + + +// Test shortcuts + +var lab = exports.lab = Lab.script(); +var expect = Code.expect; +var describe = lab.experiment; +var it = lab.test; + + +describe('stringify()', function () { + + it('stringifies a querystring object', function (done) { + + expect(Qs.stringify({ a: 'b' })).to.equal('a=b'); + expect(Qs.stringify({ a: 1 })).to.equal('a=1'); + expect(Qs.stringify({ a: 1, b: 2 })).to.equal('a=1&b=2'); + done(); + }); + + it('stringifies a nested object', function (done) { + + expect(Qs.stringify({ a: { b: 'c' } })).to.equal('a%5Bb%5D=c'); + expect(Qs.stringify({ a: { b: { c: { d: 'e' } } } })).to.equal('a%5Bb%5D%5Bc%5D%5Bd%5D=e'); + done(); + }); + + it('stringifies an array value', function (done) { + + expect(Qs.stringify({ a: ['b', 'c', 'd'] })).to.equal('a%5B0%5D=b&a%5B1%5D=c&a%5B2%5D=d'); + done(); + }); + + it('omits array indices when asked', function (done) { + + expect(Qs.stringify({ a: ['b', 'c', 'd'] }, { indices: false })).to.equal('a=b&a=c&a=d'); + done(); + }); + + it('stringifies a nested array value', function (done) { + + expect(Qs.stringify({ a: { b: ['c', 'd'] } })).to.equal('a%5Bb%5D%5B0%5D=c&a%5Bb%5D%5B1%5D=d'); + done(); + }); + + it('stringifies an object inside an array', function (done) { + + expect(Qs.stringify({ a: [{ b: 'c' }] })).to.equal('a%5B0%5D%5Bb%5D=c'); + expect(Qs.stringify({ a: [{ b: { c: [1] } }] })).to.equal('a%5B0%5D%5Bb%5D%5Bc%5D%5B0%5D=1'); + done(); + }); + + it('does not omit object keys when indices = false', function (done) { + + expect(Qs.stringify({ a: [{ b: 'c' }] }, { indices: false })).to.equal('a%5Bb%5D=c'); + done(); + }); + + it('stringifies a complicated object', function (done) { + + expect(Qs.stringify({ a: { b: 'c', d: 'e' } })).to.equal('a%5Bb%5D=c&a%5Bd%5D=e'); + done(); + }); + + it('stringifies an empty value', function (done) { + + expect(Qs.stringify({ a: '' })).to.equal('a='); + expect(Qs.stringify({ a: '', b: '' })).to.equal('a=&b='); + expect(Qs.stringify({ a: null })).to.equal('a='); + expect(Qs.stringify({ a: { b: null } })).to.equal('a%5Bb%5D='); + done(); + }); + + it('stringifies an empty object', function (done) { + + var obj = Object.create(null); + obj.a = 'b'; + expect(Qs.stringify(obj)).to.equal('a=b'); + done(); + }); + + it('returns an empty string for invalid input', function (done) { + + expect(Qs.stringify(undefined)).to.equal(''); + expect(Qs.stringify(false)).to.equal(''); + expect(Qs.stringify(null)).to.equal(''); + expect(Qs.stringify('')).to.equal(''); + done(); + }); + + it('stringifies an object with an empty object as a child', function (done) { + + var obj = { + a: Object.create(null) + }; + + obj.a.b = 'c'; + expect(Qs.stringify(obj)).to.equal('a%5Bb%5D=c'); + done(); + }); + + it('drops keys with a value of undefined', function (done) { + + expect(Qs.stringify({ a: undefined })).to.equal(''); + expect(Qs.stringify({ a: { b: undefined, c: null } })).to.equal('a%5Bc%5D='); + done(); + }); + + it('url encodes values', function (done) { + + expect(Qs.stringify({ a: 'b c' })).to.equal('a=b%20c'); + done(); + }); + + it('stringifies a date', function (done) { + + var now = new Date(); + var str = 'a=' + encodeURIComponent(now.toISOString()); + expect(Qs.stringify({ a: now })).to.equal(str); + done(); + }); + + it('stringifies the weird object from qs', function (done) { + + expect(Qs.stringify({ 'my weird field': 'q1!2"\'w$5&7/z8)?' })).to.equal('my%20weird%20field=q1!2%22\'w%245%267%2Fz8)%3F'); + done(); + }); + + it('skips properties that are part of the object prototype', function (done) { + + Object.prototype.crash = 'test'; + expect(Qs.stringify({ a: 'b'})).to.equal('a=b'); + expect(Qs.stringify({ a: { b: 'c' } })).to.equal('a%5Bb%5D=c'); + delete Object.prototype.crash; + done(); + }); + + it('stringifies boolean values', function (done) { + + expect(Qs.stringify({ a: true })).to.equal('a=true'); + expect(Qs.stringify({ a: { b: true } })).to.equal('a%5Bb%5D=true'); + expect(Qs.stringify({ b: false })).to.equal('b=false'); + expect(Qs.stringify({ b: { c: false } })).to.equal('b%5Bc%5D=false'); + done(); + }); + + it('stringifies buffer values', function (done) { + + expect(Qs.stringify({ a: new Buffer('test') })).to.equal('a=test'); + expect(Qs.stringify({ a: { b: new Buffer('test') } })).to.equal('a%5Bb%5D=test'); + done(); + }); + + it('stringifies an object using an alternative delimiter', function (done) { + + expect(Qs.stringify({ a: 'b', c: 'd' }, { delimiter: ';' })).to.equal('a=b;c=d'); + done(); + }); + + it('doesn\'t blow up when Buffer global is missing', function (done) { + + var tempBuffer = global.Buffer; + delete global.Buffer; + expect(Qs.stringify({ a: 'b', c: 'd' })).to.equal('a=b&c=d'); + global.Buffer = tempBuffer; + done(); + }); +}); diff --git a/node_modules/http-server/node_modules/union/package.json b/node_modules/http-server/node_modules/union/package.json new file mode 100644 index 0000000..eba02f5 --- /dev/null +++ b/node_modules/http-server/node_modules/union/package.json @@ -0,0 +1,68 @@ +{ + "name": "union", + "description": "A hybrid buffered / streaming middleware kernel backwards compatible with connect.", + "version": "0.4.4", + "author": { + "name": "Charlie Robbins", + "email": "charlie.robbins@gmail.com" + }, + "maintainers": [ + { + "name": "indexzero", + "email": "charlie.robbins@gmail.com" + }, + { + "name": "dscape", + "email": "nunojobpinto@gmail.com" + }, + { + "name": "jcrugzz", + "email": "jcrugzz@gmail.com" + }, + { + "name": "swaagie", + "email": "info@martijnswaagman.nl" + } + ], + "repository": { + "type": "git", + "url": "http://github.com/flatiron/union.git" + }, + "dependencies": { + "qs": "~2.3.3" + }, + "devDependencies": { + "ecstatic": "0.5.x", + "director": "1.x.x", + "request": "2.29.x", + "vows": "0.8.x", + "connect": "2.22.x" + }, + "scripts": { + "test": "vows test/*-test.js --spec -i" + }, + "main": "./lib", + "engines": { + "node": ">= 0.8.0" + }, + "gitHead": "091b39a84f2f9a972ea1e15cf5922c99450c325d", + "bugs": { + "url": "https://github.com/flatiron/union/issues" + }, + "homepage": "https://github.com/flatiron/union", + "_id": "union@0.4.4", + "_shasum": "d73f49321d6ffb721a4c69ff5b0a6c31a98ff3e0", + "_from": "union@>=0.4.3 <0.5.0", + "_npmVersion": "2.1.9", + "_nodeVersion": "0.10.33", + "_npmUser": { + "name": "indexzero", + "email": "charlie.robbins@gmail.com" + }, + "dist": { + "shasum": "d73f49321d6ffb721a4c69ff5b0a6c31a98ff3e0", + "tarball": "http://registry.npmjs.org/union/-/union-0.4.4.tgz" + }, + "directories": {}, + "_resolved": "https://registry.npmjs.org/union/-/union-0.4.4.tgz" +} diff --git a/node_modules/http-server/node_modules/union/test/after-test.js b/node_modules/http-server/node_modules/union/test/after-test.js new file mode 100644 index 0000000..79c8f76 --- /dev/null +++ b/node_modules/http-server/node_modules/union/test/after-test.js @@ -0,0 +1,37 @@ +var assert = require('assert'), + vows = require('vows'), + request = require('request'), + union = require('../'); + +function stream_callback(cb) { + return function () { + var stream = new union.ResponseStream(); + + stream.once("pipe", function (req) { + return cb ? cb(null,req) : undefined; + }); + + return stream; + }; +} + +vows.describe('union/after').addBatch({ + 'When using `union`': { + 'a union server with after middleware': { + topic: function () { + var self = this; + + union.createServer({ + after: [ stream_callback(), stream_callback(self.callback) ] + }).listen(9000, function () { + request.get('http://localhost:9000'); + }); + }, + 'should preserve the request until the last call': function (req) { + assert.equal(req.req.httpVersion, '1.1'); + assert.equal(req.req.url, '/'); + assert.equal(req.req.method, 'GET'); + } + } + } +}).export(module); \ No newline at end of file diff --git a/node_modules/http-server/node_modules/union/test/body-parser-test.js b/node_modules/http-server/node_modules/union/test/body-parser-test.js new file mode 100644 index 0000000..b0c605c --- /dev/null +++ b/node_modules/http-server/node_modules/union/test/body-parser-test.js @@ -0,0 +1,50 @@ +/* + * simple-test.js: Simple tests for basic streaming and non-streaming HTTP requests with union. + * + * (C) 2011, Charlie Robbins & the Contributors + * MIT LICENSE + * + */ + +var assert = require('assert'), + connect = require('connect'), + request = require('request'), + vows = require('vows'), + union = require('../'); + +vows.describe('union/body-parser').addBatch({ + "When using union with connect body parsing via urlencoded() or json()": { + topic: function () { + union.createServer({ + buffer: false, + before: [ + connect.urlencoded(), + connect.json(), + function (req, res) { + res.end(JSON.stringify(req.body, true, 2)); + } + ] + }).listen(8082, this.callback); + }, + "a request to /": { + topic: function () { + request.post({ + uri: 'http://localhost:8082/', + headers: { + 'content-type': 'application/json' + }, + body: JSON.stringify({ a: "foo", b: "bar" }) + }, this.callback); + }, + "should respond with a body-decoded object": function (err, res, body) { + assert.isNull(err); + assert.equal(res.statusCode, 200); + assert.deepEqual( + JSON.parse(body), + { a: 'foo', b: 'bar' } + ); + } + } + } +}).export(module); + diff --git a/node_modules/http-server/node_modules/union/test/double-write-test.js b/node_modules/http-server/node_modules/union/test/double-write-test.js new file mode 100644 index 0000000..555c737 --- /dev/null +++ b/node_modules/http-server/node_modules/union/test/double-write-test.js @@ -0,0 +1,62 @@ +/* + * simple-test.js: Simple tests for basic streaming and non-streaming HTTP requests with union. + * + * (C) 2011, Charlie Robbins & the Contributors + * MIT LICENSE + * + */ + +var assert = require('assert'), + fs = require('fs'), + path = require('path'), + request = require('request'), + vows = require('vows'), + union = require('../lib/index'), + macros = require('./helpers/macros'); + +var doubleWrite = false, + server; + +server = union.createServer({ + before: [ + function (req, res) { + res.json(200, { 'hello': 'world' }); + res.emit('next'); + }, + function (req, res) { + doubleWrite = true; + res.json(200, { 'hello': 'world' }); + res.emit('next'); + } + ] +}); + + +vows.describe('union/double-write').addBatch({ + "When using union": { + "an http server which attempts to write to the response twice": { + topic: function () { + server.listen(9091, this.callback); + }, + "a GET request to `/foo`": { + topic: function () { + request({ uri: 'http://localhost:9091/foo' }, this.callback); + }, + "it should respond with `{ 'hello': 'world' }`": function (err, res, body) { + macros.assertValidResponse(err, res); + assert.deepEqual(JSON.parse(body), { 'hello': 'world' }); + }, + "it should not write to the response twice": function () { + assert.isFalse(doubleWrite); + } + } + } + } +}).addBatch({ + "When the tests are over": { + "the server should close": function () { + server.close(); + } + } +}).export(module); + diff --git a/node_modules/http-server/node_modules/union/test/ecstatic-test.js b/node_modules/http-server/node_modules/union/test/ecstatic-test.js new file mode 100644 index 0000000..2c3e2d8 --- /dev/null +++ b/node_modules/http-server/node_modules/union/test/ecstatic-test.js @@ -0,0 +1,44 @@ +/* + * simple-test.js: Simple tests for basic streaming and non-streaming HTTP requests with union. + * + * (C) 2011, Charlie Robbins & the Contributors + * MIT LICENSE + * + */ + +var assert = require('assert'), + ecstatic = require('ecstatic')(__dirname + '/fixtures/static'), + request = require('request'), + vows = require('vows'), + union = require('../'); + +vows.describe('union/ecstatic').addBatch({ + "When using union with ecstatic": { + topic: function () { + union.createServer({ + before: [ + ecstatic + ] + }).listen(18082, this.callback); + }, + "a request to /some-file.txt": { + topic: function () { + request({ uri: 'http://localhost:18082/some-file.txt' }, this.callback); + }, + "should respond with `hello world`": function (err, res, body) { + assert.isNull(err); + assert.equal(body, 'hello world\n'); + } + }, + "a request to /404.txt (which does not exist)": { + topic: function () { + request({ uri: 'http://localhost:18082/404.txt' }, this.callback); + }, + "should respond with 404 status code": function (err, res, body) { + assert.isNull(err); + assert.equal(res.statusCode, 404); + } + } + } +}).export(module); + diff --git a/node_modules/http-server/node_modules/union/test/fixtures/index.js b/node_modules/http-server/node_modules/union/test/fixtures/index.js new file mode 100644 index 0000000..e69de29 diff --git a/node_modules/http-server/node_modules/union/test/fixtures/static/some-file.txt b/node_modules/http-server/node_modules/union/test/fixtures/static/some-file.txt new file mode 100644 index 0000000..3b18e51 --- /dev/null +++ b/node_modules/http-server/node_modules/union/test/fixtures/static/some-file.txt @@ -0,0 +1 @@ +hello world diff --git a/node_modules/http-server/node_modules/union/test/header-test.js b/node_modules/http-server/node_modules/union/test/header-test.js new file mode 100644 index 0000000..a4ab5ad --- /dev/null +++ b/node_modules/http-server/node_modules/union/test/header-test.js @@ -0,0 +1,36 @@ +var assert = require('assert'), + request = require('request'), + vows = require('vows'), + union = require('../'); + +vows.describe('union/header').addBatch({ + 'When using `union`': { + 'with a server that responds with a header': { + topic: function () { + var callback = this.callback; + var server = union.createServer({ + before: [ + function (req, res) { + res.on('header', function () { + callback(null, res); + }); + res.writeHead(200, { 'content-type': 'text' }); + res.end(); + } + ] + }); + server.listen(9092, function () { + request('http://localhost:9092/'); + }); + }, + 'it should have proper `headerSent` set': function (err, res) { + assert.isNull(err); + assert.isTrue(res.headerSent); + }, + 'it should have proper `_emittedHeader` set': function (err, res) { + assert.isNull(err); + assert.isTrue(res._emittedHeader); + } + } + } +}).export(module); diff --git a/node_modules/http-server/node_modules/union/test/helpers/index.js b/node_modules/http-server/node_modules/union/test/helpers/index.js new file mode 100644 index 0000000..e69de29 diff --git a/node_modules/http-server/node_modules/union/test/helpers/macros.js b/node_modules/http-server/node_modules/union/test/helpers/macros.js new file mode 100644 index 0000000..599e1b4 --- /dev/null +++ b/node_modules/http-server/node_modules/union/test/helpers/macros.js @@ -0,0 +1,17 @@ +/* + * macros.js: Simple test macros + * + * (C) 2011, Charlie Robbins & the Contributors + * MIT LICENSE + * + */ + +var assert = require('assert'); + +var macros = exports; + +macros.assertValidResponse = function (err, res) { + assert.isTrue(!err); + assert.equal(res.statusCode, 200); +}; + diff --git a/node_modules/http-server/node_modules/union/test/prop-test.js b/node_modules/http-server/node_modules/union/test/prop-test.js new file mode 100644 index 0000000..8e9cd4c --- /dev/null +++ b/node_modules/http-server/node_modules/union/test/prop-test.js @@ -0,0 +1,45 @@ +var assert = require('assert'), + request = require('request'), + vows = require('vows'), + union = require('../'); + +vows.describe('union/properties').addBatch({ + 'When using `union`': { + 'with a server that responds to requests': { + topic: function () { + var callback = this.callback; + var server = union.createServer({ + before: [ + function (req, res) { + callback(null, req, res); + + res.writeHead(200, { 'content-type': 'text' }); + res.end(); + } + ] + }); + server.listen(9092, function () { + request('http://localhost:9092/'); + }); + }, + 'the `req` should have a proper `httpVersion` set': function (err, req) { + assert.isNull(err); + assert.equal(req.httpVersion, '1.1'); + }, + 'the `req` should have a proper `httpVersionMajor` set': function (err, req) { + assert.isNull(err); + assert.equal(req.httpVersionMajor, 1); + }, + 'the `req` should have a proper `httpVersionMinor` set': function (err, req) { + assert.isNull(err); + assert.equal(req.httpVersionMinor, 1); + }, + 'the `req` should have proper `socket` reference set': function (err, req) { + var net = require('net'); + + assert.isNull(err); + assert.isTrue(req.socket instanceof net.Socket); + } + } + } +}).export(module); diff --git a/node_modules/http-server/node_modules/union/test/simple-test.js b/node_modules/http-server/node_modules/union/test/simple-test.js new file mode 100644 index 0000000..70416c9 --- /dev/null +++ b/node_modules/http-server/node_modules/union/test/simple-test.js @@ -0,0 +1,97 @@ +/* + * simple-test.js: Simple tests for basic streaming and non-streaming HTTP requests with union. + * + * (C) 2011, Charlie Robbins & the Contributors + * MIT LICENSE + * + */ + +var assert = require('assert'), + fs = require('fs'), + path = require('path'), + spawn = require('child_process').spawn, + request = require('request'), + vows = require('vows'), + macros = require('./helpers/macros'); + +var examplesDir = path.join(__dirname, '..', 'examples', 'simple'), + simpleScript = path.join(examplesDir, 'simple.js'), + pkg = JSON.parse(fs.readFileSync(path.join(__dirname, '..', 'package.json'), 'utf8')), + fooURI = 'http://localhost:9090/foo', + server; + +vows.describe('union/simple').addBatch({ + "When using union": { + "a simple http server": { + topic: function () { + server = spawn(process.argv[0], [simpleScript]); + server.stdout.on('data', this.callback.bind(this, null)); + }, + "a GET request to `/foo`": { + topic: function () { + request({ uri: fooURI }, this.callback); + }, + "it should respond with `hello world`": function (err, res, body) { + macros.assertValidResponse(err, res); + assert.equal(body, 'hello world\n'); + }, + "it should respond with 'x-powered-by': 'union '": function (err, res, body) { + assert.isNull(err); + assert.equal(res.headers['x-powered-by'], 'union ' + pkg.version); + } + }, + "a POST request to `/foo`": { + topic: function () { + request.post({ uri: fooURI }, this.callback); + }, + "it should respond with `wrote to a stream!`": function (err, res, body) { + macros.assertValidResponse(err, res); + assert.equal(body, 'wrote to a stream!'); + } + }, + "a GET request to `/redirect`": { + topic: function () { + request.get({ + url: 'http://localhost:9090/redirect', + followRedirect: false + }, this.callback); + }, + "it should redirect to `http://www.google.com`": function (err, res, body) { + assert.equal(res.statusCode, 302); + assert.equal(res.headers.location, "http://www.google.com"); + } + }, + "a GET request to `/custom_redirect`": { + topic: function () { + request.get({ + url: 'http://localhost:9090/custom_redirect', + followRedirect: false + }, this.callback); + }, + "it should redirect to `/foo`": function (err, res, body) { + assert.equal(res.statusCode, 301); + assert.equal(res.headers.location, "http://localhost:9090/foo"); + } + }, + "a GET request to `/async`": { + topic: function () { + request.get({ + url: 'http://localhost:9090/async', + timeout: 500 + }, this.callback); + }, + "it should not timeout": function (err, res, body) { + assert.ifError(err); + assert.equal(res.statusCode, 200); + } + } + } + } +}).addBatch({ + "When the tests are over": { + "the server should close": function () { + server.kill(); + } + } +}).export(module); + diff --git a/node_modules/http-server/node_modules/union/test/status-code-test.js b/node_modules/http-server/node_modules/union/test/status-code-test.js new file mode 100644 index 0000000..ed49d86 --- /dev/null +++ b/node_modules/http-server/node_modules/union/test/status-code-test.js @@ -0,0 +1,31 @@ +var assert = require('assert'), + request = require('request'), + vows = require('vows'), + union = require('../'); + +vows.describe('union/status-code').addBatch({ + 'When using `union`': { + 'with a server setting `res.statusCode`': { + topic: function () { + var server = union.createServer({ + before: [ + function (req, res) { + res.statusCode = 404; + res.end(); + } + ] + }); + server.listen(9091, this.callback); + }, + 'and sending a request': { + topic: function () { + request('http://localhost:9091/', this.callback); + }, + 'it should have proper `statusCode` set': function (err, res, body) { + assert.isTrue(!err); + assert.equal(res.statusCode, 404); + } + } + } + } +}).export(module); diff --git a/node_modules/http-server/node_modules/union/test/streaming-test.js b/node_modules/http-server/node_modules/union/test/streaming-test.js new file mode 100644 index 0000000..6145ef3 --- /dev/null +++ b/node_modules/http-server/node_modules/union/test/streaming-test.js @@ -0,0 +1,68 @@ +var assert = require('assert'), + fs = require('fs'), + path = require('path'), + request = require('request'), + vows = require('vows'), + union = require('../'); + +vows.describe('union/streaming').addBatch({ + 'When using `union`': { + 'a simple union server': { + topic: function () { + var self = this; + + union.createServer({ + buffer: false, + before: [ + function (req, res, next) { + var chunks = ''; + + req.on('data', function (chunk) { + chunks += chunk; + }); + + req.on('end', function () { + self.callback(null, chunks); + }); + } + ] + }).listen(9000, function () { + request.post('http://localhost:9000').write('hello world'); + }); + }, + 'should receive complete POST data': function (chunks) { + assert.equal(chunks, 'hello world'); + } + }, + "a simple pipe to a file": { + topic: function () { + var self = this; + + union.createServer({ + before: [ + function (req, res, next) { + var filename = path.join(__dirname, 'fixtures', 'pipe-write-test.txt'), + writeStream = fs.createWriteStream(filename); + + req.pipe(writeStream); + writeStream.on('close', function () { + res.writeHead(200); + fs.createReadStream(filename).pipe(res); + }); + } + ] + }).listen(9044, function () { + request({ + method: 'POST', + uri: 'http://localhost:9044', + body: 'hello world' + }, self.callback); + }); + }, + 'should receive complete POST data': function (err, res, body) { + assert.equal(body, 'hello world'); + } + } + } +}).export(module); + diff --git a/node_modules/http-server/node_modules/union/union.png b/node_modules/http-server/node_modules/union/union.png new file mode 100644 index 0000000000000000000000000000000000000000..96c6e665a84ed2b4be3d23bcac5fd34957367958 GIT binary patch literal 10826 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 fgXv8t3K~k + + 404 + + +

404

+ +

Were you just making up filenames or what?

+ + diff --git a/node_modules/http-server/public/img/turtle.png b/node_modules/http-server/public/img/turtle.png new file mode 100644 index 0000000000000000000000000000000000000000..721a796bb09004970b6de769a74da5a612781cbc GIT binary patch literal 195848 zcmYJa1yq#Z_dPsx$Iu-ENGUKNDJ2f6fFLPI4JjScDIzrpC=ycABHax`4IN5%mvn>F z`|$Dmd;ct0EM_s!+&K4~efHir{H2;A5k4J02m~ThR)T4QKo~3_5V|KWHteDKWI$&N4>y{v~KcxZm%3I-8@WPEI=L}9(*B2KFJ%9ui5kr&6ITfbj26y_)yJt* zDo@12W2X8L$`eFG^mgYd^o)++$H@bGGeB!a&>qjEdR$Wmm?H&tJc626)B1Fgzo(?K zb=LB#e1+^}c!Cx`HSA00UVy~5R=;>zv|-*l?bXGq>VE7}p^QzIH;0x|)JBzFh?QA9 z=c~JRsXzZCFJ}e`1Z|+pM068CG@tbHtKN@{f}{8)S|(Tgxa^}qddIpP80XpM81GSK zNZ2*yBz7ad8`h@R->t?I6n)`bV-iP!&LJw`uCGSOs@&$>K|1wuIB}{3T5TX0sR_2B z|Eik}>;+c@S?CXt2E}unK$PmYmj&)UDWs3oB%w!@1P1~!uN%}D6%Y(PnQMJXl714; zO6opJyxXRd7}|9oxht$lga$~j82gL6%#jDyL4H>uN)-PMlh3(x8YCZ1E`eUTKb+CQ z>Ap2DbyWFaa=1{RfO`4RGvZxy`_kg{c1fOYy0oFo?WNsxZ5gq^8yKG;s{dix)BnPR z%NgMY0bqqWYlV?MCeY`y8Mf6M!*5}cvA29700MuQ@C3%_e`k3*}u z(q&F|pZ{$O0Ws6Ti^Hm<{>|7zUW!HKs{)MSLwmABn)_?RaFReAW-s=m6BqCn&2xi) zp_LhgPny#Uf#4x=kiwt|LT08{J`rX}WYEdx9KBuFNdw&O)BQQ)Qc2Q4%hXbaWj_$W zswG@p>S9{SHE@h7(okIdX4(!>ABxCf{P)4XWD88VwTZ#XSj}kl4TgMaeutg4C;l+8 zCdY;Dkq409y)+ek@n`?dC^IhP2QDdC8S|%Ua^4u$H;^iUqzKmMz*8jMqK656^`$}b zf%tZiaiBI*W!L9BEZFIjqR=8c633V11*qPKj4biu_A15o_Ok5pVPd7&A&gGgp@005 z0a9mM6Nv8nap&YHp+O)vdZxpT$lrm!v0#13b|OIh8d980H0r0D5iUGl$Vvny>IM(LG&VrDE;pe9j8>*!qygsZZF{Jvx39 z|BI^fWwKcFMPsBYmWNoNf-FJd)yir%`yX#fOhF-Kd~6ceAPU0-K^ixZ9`-{t|F(Jg z2c}rhJ8ohvNL115LlPum<~TY-h2rM=j)=prt&cg>z_H^Pwg`N)DZB{xJ zrifFmfWAFq%FqGDv-UBpHqa+XF$fmg-a56B+QqDh_`VQ`rkAI*wh`CNlWF-@BAn0Mk2^V+wl`$;v&kTr=}K9 z6;|FYV(7prJExy9c`#m`%u$RB^#vLupshb>@?fb>XXCum)tS!YI8J{V21)CLSwmi< z_fH!re3|gqWE3!82v`r1Fumd2>57Pb7Si+Du6qL9jizJLsRT;|V!&K}Nt@R~7N*vA zc3}NECb9d5M5dqdd^Wi6-L>}D`9>S^)S0UG{d0^IdqfhMZSuc!+xwn?{)x<<{vyNT zPIp>mr0a0->s-oAvDDGF zdxC6BYxIjd^^?g5C=;xwH4ZUx6wi)(Wx34dyXTukDD3u)x_Q!$&6qFE*dZ@;;9ry? zOy~s~kmbK=;JtP&E;Nwecvnn$!ct3^(s%3hYIakCVL&JjuMJuft;3|PZ6nisqHp^4Ed~Q#y`Tv8K94aR4#lknLc+f^BS2J z8ro?WTj-s4J+#Bs1@EA(n>fZLa$I`{dPo7)XJj zB8$BWY$2#_9R40rjamsB)#6pq)co%7h8|xhc1?>d!vL#^Jt?VE;vMIunK@OpmJ_&4 zuP=}!h$ITyqR_XqLJPJbd5AR|;D7C`Aax*HsLCTMmq8jWbwXNld$r(6pc^(r;)^+( z%Ow22BNd7tBe|r(yU>Wv_H3a2sRnn^o3nhmxJUOXJPpAmHIA)75bh|?CB(%0`#6p2!oz6k6w4p4PaQ!}49 zMJ0;Dt-t-Rvcx<)&XH$V_i@8mCv#AuAz|k2Kc%rgUT+OP@p751)k}W0WX>enjgh5rIB4J)^yv4v zLVMYNhbF&};ejj&mdz{T*y>6t01jI!^8Y2qAY#t@`8gRY^w;{&(R_?5TU~_G;pO5+ zx@kLhGW{#UPY?ydQU*^H&9S@IZeeyq2>=fljVJQqV80_Uca|E{I$n%Bv3FG$J zI(NT?X0ym(vX#ThPlq>u^?$u0lt5EAqlfUdThi84H(+k!Hu6A9BD*;tnnetS#V;ogz*y15&HVr+dPbrBRnVN==r9k$M$reRx;S#xG(-j^4G2( z^`V{7!6WkADF2I)WkeP}DF|GLB1Qg=!1*Ke;qx%=!IpaMSbWn^O{ zYY*)ntqS>^KcK*mysxP4C!LmSKg!+PbfkBL(`j&M4@TR?ei(>=nv@OItdq< zUqN6mkSE=D^@Zlf)7z_29?M#T53($QeQP`<$2jky1tg{zi|5`GL(qoe~v>U52a-QD0^LsEL$ z;Pr_c6~BRkj{8|g==DcRHUO$wCQJs3DZm`C(r^p`m>hd9bA=G$Ox0Q~L(#1Ff9uR+ z_V1=n_d_)|`G^B(KECj^c7}*z@<@Z5=~x6Ms2u?%hyTBERo{=R@xj&vM#(EId8Mah zWOg=--JcV!eM0PJba)PzI9pZ^eM%bTBFWXn{v5WN#H`8O^^2)TevDU42I+jPfP5{l6Vk3CF};^>~hxOn!v@vM%`bG67CC@qP!jarQtsXZ+^u zoX>eVi&QG@@jBG;S7!G*NB~2R!ib66IoL_^*S->fL)HKfoC?w1R$l-*?BP06FZz*{LEl
v{jzCTP;BFiKe=bnX#~P!iF0RM7=$>vGtyozq@j`e+wtNrP*~j#WLZhZ(>6)%*W-9nSV?Qa$m`$2kfx%^K zm8bzPIYi@dXSQaB4cD4JD`pVuFCG~X`q~TRi^JGkJy1aRD7$JG=>Sl9q zVhpD&F%!b5W9o?6|9e1*(e?3ufYs!1Mq?~LX=d-dl+VS=!O{!Q)3NT{iM}(z zZ2q%Sd?GXWP7C_m$JosnYQ+1;aG^kq$*G&^$(Kbgn=(dQ`q*yR43PfoYgfsoX14I2 zo?4aP!R#*tXxKN;$q%mZu!0pO9qxiK3SU=z)NZ+MLwFq%?+TZbdlGsM(2#SLft}xn z*d$$*!JRR#_`f&z5l(Rf)2(xJ-nH#0t%IdJwTtR zwx9UKpZ6leVXi)h$#!pN%233b)X3ni7oHP_6SGrQ*uiglN2ks)-30GzjH`1Yzdu^i zo*RtKsc{pwPB=~t(DfBflEVKQJ2D)YY9J^~>A4C1Fa+y~_EqSCH1jyQrc<*R*cy|8 z1Snc%^uw+GYNz~cm`uY zDk3>RsSWOH-OBsS4w7ZH8c9Y|ZZ zlv|e`rh9Nw5H25k<1w&qF`8_j?Oyw|Vdf4by&85sBCo!fqMn?G{JLTJiUDx}SG&yM zfs}iC3_TA!?|%pZwEa1H*#}$l29FjGL_wS*vaGEVd%TP$xJZ=A& zGFr^2nk>x5%Nq&gWClskVQEWqr$reLEx^J(AN@{p*O5=q>8-`%9l zl^AFE0f$iC46@9XK7X9?61Qa{a$)0%nf}6klwV93Z-i3v63V|T-ql?iFYVhH$~6J7ahzsF3Nji91t-B+Uelck=N+u%9HLM^w!#lN_H zqY8o~I0W_;cdjldOMeK)%j*D@e;EVpjCPJ5kl|FS{NTWNkptd;q&Jz%wFZ#|wT*p| z#va6|B{Sd^#^aS6hZjgQM&SGip@eAnupJRNXNCL?e|PYVot@`H)MuX#8rRjys%u-ZQb?YZ6aFyGHmDzy_#-o0 z9|B=Xyi= z__;>}C>kJ(OP5fSOB}(ji=})L8=P1xHikHFx|k2C2f6Xk2uka~`=~OSLl8!(*{WHD zgH;7y?Kq840mS|lu+nkMWM|%z#F8K}Nj$vSyMy*w=OL-uIR_V4my46E=){9*+id>V zS_h*OWtXWq5p=p5nW}a8F^!R7h8T_5?BnhA@`Fh1x_vIxWw;)zX0V_LUpSl(sYBeb z`ktV6|7_;DZ}Z4ndE`u#Q12zgKRr5dNKwG)gr`xwuI`~>`3G?VDgnn|kTWZDidjbF z*-u}Bi*l2^BTvXq)n-Hy`yBpuej?FBD2hQ`L*f36njyk`2@Uawk55Ku?~eK^9Y%7y z;Q@aS6;V>B6vqCyUgjfIi&XIb2}-j<&76GF`;~oD7E<=DwoK@@#;otyl6kiS9oVyM zDxEk6e$TQJZhD%lZnl%%v4R&X;karw^tyU6u#qQZgxGjk=w8toY@Uj8r~`n;?Z3YD zX-YmMU-m;(uvy_yT9JZJo*Y zd?}P&v0|qfH|+!FEFPW)$q2fEJnu5A_-`w23j8vY9+|l{4l;v0}_H062uVI@gW@U$n4TEz#k)hA!+M2gi=!mkJi%Z=pC0a6)2_MsL z<5V{AWvTVuc)a~g;^TKbU-Hzg3U10HV?s{jny~tZT`K=~G&M_It2Tn8;+@18Vy)kk zR_|P~n}{MwTCU|P)(4*ZH37x$I3O6O!ur;?6iZJ{5Je&S+DIcpzW=@=r-T>9Xo=z_ zQ@fy*=EbdWz(bTQettV8s#Yr-*;);7Y?4o%uHs#-2hxwaoLn7#EG~-Xy}wLrDVKQV z&v@uZW}Ra5qtW~q$wHxpJ8}!I$)%^g3xcR?%{>$kFg~v^CB;QUyN(KKPkC1i9%8Uf z;4aaaJgnBD16M)jgcJ`CkC0v>&gNBaASLS^Rx!q8b%0E`1>xF!y#>MC6E_xKA##&2 z==w1{HH(XbH5VOI7WU1w;Mg5~6Rq*XP3{x#fgHA#j))j7yJ96t&O(yb=8OMTWzD6D z5+znLRtkLZ$rauQdF7{#(##djcWKJ6^2)8J%Ab9ir8Ya3pPyisy-y%u;vr`f-dV*o z90WA9F0Z}otRtSI1yk%W=2B744CYu#*g8WxE2pCj|tMTSe4n9XvG6V-HV3F7@ zWMBY{k?GR)N0=B zW>Xl9ZifOkjZiAzz}_Bv{X@LE=!nNC1PLcn6x-c8Emu=#SuPMp8as$=Df>kFIfy=} zp=^LasN0eG4P60wndtSNH4Qyh8i)yvZoFiOll;LVS16A*N9Wq%{n1db%E9|dpu#US z;#{7=)UcR3BfaF1PBrk!loQ|-R9 zv&WjpF?x);ru!Pnqa9I8#uBq}+XSBJsQ~NocUvHvCW)Q>?Q+MARQOXIfw413)=UD>bblDx>Nj8@#!<`r^2nfCz~`@<E(PsDDJNHu&N_S#o|Tg60Uig8~eq!Vi2Fh&1vI0~*<*y}BEB>DxsN zVk(CRzU=QO*FzlRD)f7u6=v~ba3Ra6_>=}}Yvw6wQu=RWB)qU{QzMSMtVVGFz)eOe%cTmru1Y-wTtxo^H#spz{s+_=oYlT-F3Ug7w{L}^3(ZTDwiw} zsh~U4yEXBm=hS<5$LZo5*T>HvtBDmx&~;rfP6IWfh)(pAFUcKcEu#TZdf!K4i%sE) zMVGqC=6Ad^HI7zS<3)wWHJ_43a+l6GNilPVvc)u$97aV*ijFQpBmehC9(hegX=3jxDMTuT*+?o2Y9IY!Yn*Q(T2ul-m5=F zTFSA>`O5=Dz#1hsA%ka!tNY$;kB?)^Kmg~9u-Q`dhv*;a;QqY2!Msq&Z<6G6wsh6B z7cFQQy*J-V8ZRIuv#uohHa3zs(E(2DfoPAVGBzJWN+$YFb>DQZmNZA$(b*tqjrSCI zy0E_fmm=QRV+6XE4nRH!4a7BO)e~6bYDIsJ>NF(~A$*972sl!%_t-NG(v4;!&LdBl ziRxR)FHHf%3G1e&FmL45Q!ag_9cs7v#&6E(iT;dp0Jy>V$b{}dSU}t;;2OqG zSrBVr8iL}U)Jz;8V46ttrB=$zLex+u>s3t^7lYJ9QE{VQKe$vFSRn1COS!-EU9IM? zPF~SHwqsJAGXFm>fFA3FQHuj(p2yaEQPG5BzQ!18W1pyRRc|S`4dI0RlIINS*K7RX z=x#KV7^tP1*R&xmIF`NexLzAroC~|7Rs6cWHR?AV0O#dpzYKew;%SXm*$yaTv)=7Q zzDKP%v8sNj`}q{1Djc$qux=aVvq>L*MX8;~!yr2~d7IptS7mb9DStmuFFP+nzdN^o z^u0#WQ!@S5Vp7QMZHvv_ttCGAgBNR()_n-wzOr($giK66Srt$7~9}h z_f(l0L7!lX93Ha4%L_cEhQ-WC&)uRLC6(gIJ>8O)Ye9ft7To@Q;^t6)_S*mI zRJSxEBNzc4iIfmYS#Za9a=AEUFVuZPc3n#Bx##)wBh6rlAHF9Glso*gFaB4fe56ZD z@xs2ZQk+|=2 zs*v%UUrd`(M031-k{j6vG)vTH;v&$S+RG)KxRs=Xs4XoM*@E$+qzX^xB>KV5h?}c3 z=<4DP)|1QDqcro_htwMpe9_#u;%y~Pb5d8}UfrK(O6HSuj>#eA&)Mx_+4@kx_cdqQH|fnYWJg@OXx; zzYt9VgQ6mEwX`=|q2=a#O8U^w+#K{gv*Tz;adiEpk+5)&N6;vtW2C#2LG~MmivZL2 z(Djd8#&SSWmW3&R_{A8AAE+iPL|@Z4tMmljT-5;`l-@W0lX{x5pSpSW4es~-zdaxd z?z&gFb`kr(srfV{eJkcN8HyaUNEQ331j{BrKo_y!7x*(?)E8kK(7AG`RcM;C8qpej zIruSRKoq65N0O(x2fO=J`W}kfLF1!}wGDg{xOW_MIZ0nb5VTR6!4rGbbk$9bqu5R@ z?eF0^7fuNY*V_*>=~M-6Pl=sCKQxsU8k_W6wMAQuWcB^+P0y+KrRf-tCEx3g&y>8l zn8Bxku}CHG6v1^wYO2trj4jNKVN7Ga)teu(7tJ(D^FBg#fxlmPlI|PZ?w?agc^8e4 z#K#BR5iW$V4m<=J0Exp?_@zOBQK!}F%LC{0FficDz@S|!FX2pg!OwHwNvr`p8=GNp z!2A&$su+!ZA!8RC6-#OAqmS!Tjsj(Y@&L#VkVRYb6`WDu9xp|z%d8Cm97p5RV4kQ8 zkmn+QKsauU5#;w2O~vDJ5$?n1Ip={45n*naAK@(sx}ekdl7tAeSgwNmfm& zKOxkCQ^=&H4RT}8AQ3Ff^#VGekSBDJf5kj|DWG)L8tk>5q_0odxFZNM@;g%gCT#28 z4@LKv0b1mjEXdaW7tO}i2>nQ^vcD6{r@B8wh@#$tDm(E%4eA|&`J?zr)->!G2LwoH z;I~Xda0+>G9)KH5u0Tx>BtZU``7-(`WKpL@UiO96&&GxDooMVci5s+(4!# zAECXv4Y4YCSK|$kpR{>(D5iDvHzz7MW%vxRoob-#b$T;d9sFfKWDSaG;Qo(Muy1+k zB!z>m*a_|(;}x!^O=Lx-V->w$-jA$AhcaKCY-;3m;!Fx~8$0k#(bBG(TQ19FcPT0Z z2+os?{CJ#%f|M=1Geyd!ZjL=CJ4Ulf;*?%^In#B}boLp^;re75VaqBR9nb`9dWt$x ziJa}T==2vOv8`IdcC)?c4tb@K{!9efF`vM(p=+K$!oG8LaqfaXfBvHF%g_eM6s>sf zncQIdAjX=oZqGL3CN{+=v!j!(P&}f%5q<7X9ORZ&3fOB}G~S)-aLAcc7D5A;LnZd; z%^eEFRM7d1coLOjY!lf8oxY5lc%!>|=E0|P4Vne$;x)IbUS$DNWOAyijskX_zCOU3 zb7j!Pq8r6UCEJ%x#jTqE%*pvWnWpq3krNvGF^bN4jU(aU?_^n{v?XCeil2y0e*Q&S zm9Ha`XKrconrT4;6$La(#r?)N^a9GTKOMbH@*1DI=~&{vqyhow3$`^_#!u+$-1S&s z)W7)>re&vJY6gLzI7TH9~Ujk?(&Qd@7>m15&iD#n!%b9hGKmi=*PeXbq5`)Bpl+HFG=D2 zq7&<`49{XH2v;K9VzC>l5ZxB9tW4E z=WGY^bH5Saj8F&+N8YT4AGik9K{Qi(g#d3JDJn5NC>o?N>nqe3aKVbA>ZG0^q*vIL zc!!J^Vy1$-5sA^kd+3OMAx578W-4>Y}xz1OEza=Lb12A?22v+b1B-$8WXxh{)!cNEoMUHu%{T zkM>-LocE(df9Lr57^-pNlnVRuw?zPH^3D|F%L*m62>p@m5uHmlmNYol^ApRfIG&)e zQE;q0q#SL#W2k_s%6shRBptQlJx6_*lc1op^0T2Nj2*oMl;StVKt}@^ODfdeg`JEg)N$4F9oc>bhh8fxKxyP_w=&^^Pb(=X=M2P4oi|{ zZ7O4K$xXA!``ztui%bB$)Hih_|0HJ;X{BhjRHueHbCV|f;Ihm!zBbxy=Uy))=jvL~ z364=zhIoYL8s0*!Kbl+n?TfV##l5Mf&cK48vR{}GEMf5Z>)gQe~_-k{ea zwjW1QWx|>9v7x9%Cy6X3k8LLj zCga!eGuaFal&Egwl~rc3ED2=$w8rP#d&|ux>Nv0$fHWeWHqPB?aiJ0k7t(h<`o$2j6jpUx_N27f)6Ml+lx=-GT_u85fl)mo%_eJ zi7AK%vN4Qk%42H&2j+x8&Zu;lpY>MtmA>|u$wm6?IY|JhPpqAYEQ?zSz-nV}M;B9W zZ?=Ghos^W+|EBzd<9feo`})9(_6Mb+=nk#(I|(@rUX^ut7ib0p1fFWJTspW&*Y5}N z`R@@}d|00Amm76^*t^u;59wCV3Box^x~l>k0E98?-o;o}og=5Dsv0G!jh4v}%R~KM zn*x>i9lD<7v@vKj`RQltyGa+ys8XTvnNqpz*HBbpxV=Ozlah*x*$J+}!Q&@F6)#5` z&8DdF*FxwR9sLY42WI6XL7NOzK2ta(fJQ22Uwb*7CZdfJg2(ntlk z8FPNJLj1~9|J0th;%NI)kn8#f&tQVX6Y$1aL4emZ_q$)0aO<^Cir(3*_A&z{OQ;D# z-vm*IPVXm7Jee9k!1RP@M#%|#m_|vejRsFoT{(OEGW{b-p8s6Exs_!+cTGF6KXm~z z{>B!(XRo1{=x9`Y`slI~XS>hc9JpvY_D|Qf7mqBhsQaF4GXN@YkBtp`POgh)fzGVg z+`Go34st`kU-F{`+L5Hy0o}4YZW;lF=$|-xkeEl!EQ6G>^l+Q#OfAYb(LsLn6MBKb zP-dTp)!5n)Dt^6~^HCb|W0(rq=6P*E-}lyFxSeVzDSpU>#p$2!KYy|q3$*M%HK=X= z0_@6xeSrqtFDL4$L>_Nb*==MgZ9hT#20vE%9rS9tdacSTy)z*-YKXq6t&lG|G<$XR z$JZn&CZ)SWMTdYzv=lW?$4|7+G=tVZR5t=!GQzFo6)mVDtK2%n%4%@>)rOY-<9k+dfcRksjD9YOA z&V%V})4|=lelv0S=hNLH1x*l#W|6c_Y>?fcnLyifx#^0@L>2jB}KL5{%d-#i`cLfO1|aqTq<$kSOp{;R5S125D^VOn10TGxN)`j#O+w*2!qsY zV9VtBz7D0%?a8avEfGrQ-d``#G|>@I-azn@KA?da5V?K(wCgetO13}SKRBE)bf;CN z7hxAIxZaz%Hsbd$q0XC81)w#b$C&+`0Ovzl6*_-y20;5kOD72(32$Fwp&(oju?}w! z0u)sbIl1tTFfj%(M&cB}E%O-<&v3YedE<1q@6%j^{`u9u-E?!R>P&T+|B8b9{!CXM zGEa|xCTjA-;n7J1yD4w`DUM4KDvb{^K?koq%gcnNcLi1cC8Bd$Xea5Kj;{rbJ%@lB zL|&&!_JMoax(>X*IgwT;(eArpUuze=V{?3hVC}Z}j{3ZzqY=4+vHoLNol?Muo`l3+mMi(d}CuUt$6QHbc|cyTx(7 zf4#^6ZBvsNon4NLMzSz05HI9leHF-^1LR~JL{YB)wHIWic)qIS;E5L7q;ktq)|L(2?YD9!MVq1d`Na^ubmEIf8!8O<6wQ=7Q1M zM!v_V6M)z4QTboDhxQuF%mZlQWDplY5wkVBoepOvVW53;EHNV790@IEe6s9PCve|U z+Eecz9KWoUQL4O!K;E~nwb62mZ@Vzoh_mhcAK|SS2c$kAqB}5T=x2~%_$28V4lK%& z+cH7{ivm8`5+Gx&mf9QVbv#)%<6ZkkFJU%#Qe=ItHG0Xmuz%r%SfHQgRe8BXL?*+> zuoMj6FEKI5`bP#@ffT_xTU+<`1G|OlqQ!O4y?FnXCh2Qv7y?V-Zb4i3u=fLA4&BOJ zIJuYAGK{J}xl88ul)w0Hg*nTX{ouM{=%_}KsTJ6rt`$~c;jinDUJqwlJpY#N2^lb` z{H{Ebo1K#rt5Za0V`Gz@ox85;vIp4aX!Tqb5nus(;d+)E45j&s+UkT4&NbOmvpF;;?LSZ-oH-lXNRO@udEK?# zt*ML7X)XH@fmu0(DZxu73JR@n#ATnr`}coUz7oF$PW@n*lBykA)^mW_ldk|Nsi`cV z?9FX0s)n)cy?+?#e@a-52CvGWLCTd;t3~}CDHS3+Fp9j)RiD!=`N;zY zi&_>Divv7(zoW)IH>H8585E|(`}ch7Svr%HlCm0~n}Yyp z_jZJlQ7t){(hId>H>Ozb3d_R;C|pTZZCyrPhVi_PA0lVwB3R7jRvjG{qh!=uC?Dy$ z(Z@g45D<{DGK-|2gy8*JmRPjEauaomfLdBngzCoe1cz0ks2W%D-fdg|ew;?UIjk< zCX?Q}k*==hE`ofxnBp`x#0CMVkuLA31Nb|;yV-@HC=`voW-bLiB?}ZXYrJY#XtfHl zvjrpL_jiH*YlDQLduy&?g)im_DIsR}KrfGIbQqAfxrK!#F7YWlvfy1uy9nBpUsb$p zp+u2Y;+?29_Z7DWX9)%|!(vT>7NxH9#-E0e52a}t3!;webNnslyB~=H-?h$B`adk_ zpCw5_pBxR47C{*rp;#$%R3MNZSt?{<2*K8H{wu_zpR*}`>q)V>ABJe*d!KUt^R>X|h+R0nI@_~2dE;@|gX1;0>V>?cg;z&(GkjOyD1LMA3&pc|C?o?oe~KHH z@yi8;(EQN{1yFHPuZ%QQWPQ~snY(D=RJW>bP zkog_Eav`Cf*_QM|ppzTul_=~TFCz^Nj{7sFtfI;x{wQjcPWXpT7IqZ9Xs%)cpQP82 z)XC-~IMA_-uQqpbUf8vCL^me``wWAAT@W0e8!WH!lMt0?XM%(LxbWCJrx0+d2pm0L zkJ3Uwj{~njMqY>Ve1LIf!T(0s@otdu3C-P5!0*e|F9Z?M8-cf|#Di<%bM!jk2HE9^ zs_56Av}k}&&Ira)?C8Q@G^Au!dH9kI2lZFn_QpGl)5GH=3n@}ZA07B9}OL4_b>|!Vp3OJk?ud>AyVMp~Pkzsy! zeO!O#k^tO%k>f6mRn@DQib)j+Mb1 zcg)q0dP9$PqHFlI=PXD6jPLD~mDfot4%@<=YhWY-dKK;bEi;aQM|PP8oF8Q0B0#vw zIJHNb@jOq>P{4`ho)pwO@^;YC8I>qeboe;OG-Ub)xf0ZMcS!O;JsFj6KXbIXTSL8_ zQn+I$V!xo)^t$SYev@}jx0iF>oQO;w;_^|3Nelu(xDJqmCs+g*UN?W`q-^TZYe2f_ z+?@n*AY*^5%yg?8Apu^H~igBb+PR9xnObOV9J6;ggenC(QGj=+>+a1v?VLoGaMAU_w1Mw3*Jz91p}DUM zce%sDJOkZjdF?Jv(M^)L*9Q{AX7MFSYX68@BQFw+*LRKwpDZ5&6>ky9eM#be-sU5` z$aDns*Y3wcE)E!$5(nEg+ZZ*k0$-jiM-levA7>z>@An+=9%3Vn)hvA3%sRH*yB@-} zb3_+bi%6uu8|_Xv9(1#H7W)hPFT*Tn1f#mx9|?c`TV*@L0eRUL{qF5JLbFSQm&-FLnC~bPXP<-59+gTqr4Z5?)Go9bG~lxuU~5F{ z{wd%*>ggG@-22S&BI!wj@X{ZB69S|$`ZcZCCGLuEL=-Jy-yApcJN&D=76k`0I6v}H zgE#ro{>fFN4SN zur3Yt@J{-GKtQ9W`c1^*I9D}Ruo+B+?m-V<*DXzoaDizBGH`||vDuCG3*gT(*Uvc& zZvF~(#U}iIWs?^hml(FN(GCpvKruk`M`lMir?FpWEwwQ_H#AoF?yN>LR3$`?)!(q` zTM_|v`DR`^zMl;zoZQhH9Vf`Rz0XnB9g6z&!DFo8&CExyv0~LZbh#Yw*VAP<+z*KJ zMw<6Ey2qfX$uuD&etHqd^#-rw#3oOuc-`ev+W^o>$hde~{q!h}5R=?Eqjc&y6v4>n zT8jb*`P+y`6aF3b1(3FbWXJXNAsJ)S>dq(X(q}Yxo_}oufg1=FX7=h{WW~~ARDjRB z*v^i7K{V(*f_^!Ni!ua1W`z{I^_~);2XrUkYSw zh6dNqIv6sMq;YL%(7-QRk{vBa;vX44HUUi#(Yow>iFm4`M!dlPrWb)lfIo2E5JXVs zxH&Z`kiEMa8EYIwgcYwU>%3P@F3F_XwifqB&1ycYZ>??1Y0*u>xxrA3V8?d878;CA zh;)tn!%3Vc#8W4M6`};h*zAd0bFygkDd6{ITtPK+s-t5GIXwW0niW)-GP3E?z|nI= z6f}Nv0T%LpZg_utS#>^yG}e1^ z^-Kr(+9X2+TWgt?lBEj@_!Qg?Tga|fw3`-hML5%x($l2G^8y0s#)=|`wmE3RZlyBs z;R^?r72b1frtmrfYL|U@G+>OGpWjp1h0}K_$L}iYRNuK>!pkj~f{)6!>)V780UDo;F>~7(6JQ48%4P z6TKSY7$-x|S2H8>@*zCoRAw$f=6M2tp2x=Etn1CGMtQL{0_w&3dJB+E>X+Qj7KU4q zofKTE?u74G3F3nF9K-ixx-zR7LGvI;PR`%c&DK)ZXG+h--CGUw`Y6AiO9Q^DgUf>} zUvmp9AyKK+Edr|5cdv2iE9dcM4u(mKX>F1~vp+IG5oC<8Rgc9F6P#+Rzj=WhzTy_k z=S1|@s6M*uUv$T z9!D!PZs~P`v0kOG_;aA!y1^l#nqG+Yg}O{@pzuPdT@mu7kSn1z>Zc z7vPrEsT$RCsNE6#>$as?I6;aR=~_2up=L;g6^x02h8_f>7jZD3zP`LCSTI5x`Nskg z*JIRC&`#S);QAXF9Q$_C3$NL@KF&Qag$y34qRvA49Y6xJS4fOm@wZy}M>wwK6?I$n z+leP@2__ph^)&EthLy*FKlB4WDaU6amuH^JZViTp?|@V+ZA~g{JIcZ-B=mM}tna-T zgXHnFt*?-ug#9oJpMs zTZyuyANk1h$%EY8CBHW_H5<{-LNyD#PuWuaFFcptqp2kn^rwLVG4$BGXJGIiq(S{! z(c_C=YyapmMFVcCy)~=PjAH_C5%nK?O4`jg)O5TlTL}l)^x>P)S7
v#ztgGxi)3 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

?SC_WXB?p4bg^?}=rubedfbpmG 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%0AxEm$vOw8;p)7zqZrU$sQ34|7=gL_p3~ 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 YcA)aNV_QA;BnbHEYny1Ht~o{j549Nmod5s; literal 0 HcmV?d00001 diff --git a/node_modules/http-server/public/index.html b/node_modules/http-server/public/index.html new file mode 100644 index 0000000..12cafb2 --- /dev/null +++ b/node_modules/http-server/public/index.html @@ -0,0 +1,12 @@ + + + node.js http server + + + +

Serving up static files like they were turtles strapped to rockets.

+ + + + + diff --git a/node_modules/http-server/screenshots/directory.png b/node_modules/http-server/screenshots/directory.png new file mode 100644 index 0000000000000000000000000000000000000000..b255cea230cbe32a7cccf87c5e50dae16a3e606c GIT binary patch literal 24885 zcmdSAgLh?J@HQBB+_7yZ9dvATY&#v>wrxA<*tTukwrxz3_c!aCZ@xcZ)~t2!%DOqV z_pRDh^*mK|&JC896oP@ofCK;lfDsWEkOcq$JotQLfCGL0Cs!A|7XScN!I+<4T7;h; zPuj-Pz}QS50Kf@wPQ{r+VQpdKVEn-b<{{<4IYWP(!*Eo*_xHpOv4Fm?|Bsj;*+DeX z{9He2a&$=lX*_|vsL>0ViJMoCi-U*ukG7B2mmAg>w+mI%ina@tlhd|&Hh@Z6>Fyq1 zcxV7WKUqTau)D{!G>yl~9RN^a03ftZ$*T~^g}Qnsun*H0Rv@u%b7dE$g%65*ZU(eA z_v}^xuhPHu1&(n_;9-~mJcrKyLb8B7?>RcHn zFD$%B;{mQqH{m(6^I)08cl9bn>c9N}`+lRf8GYIN15jqGE3R>a`<=EWYSZY^`OSi; zu>c09ezgt;%5BU=4tjKx9o5Y|5bUEKoeJ3c(QkRByHi&i) zUvL(Zv?v*89Em7Y-j7FVDzcw=;mf|Vf=Ai4G8n(4V9>lHD-Ak278*;qbJv+kXsIOE zx^VZ;-yJ79nmV@{>^iwSK6F9xvONDeZ(Se*@Z1IaZvX?__H^$M0KdK#xiw#=o)GpK zVjL3__7&if(sqozd(JpKlyZk^R6n($@={HF2ttVf@=$}_7Xg1{J4*mgzG4Hs7I;qi z=c!@z)h;oM6*bOM8TqrIjfd(lqEKlPfCys{LB-&bhsz5d6P88M2y5vPU4zqOCx=q~nI}+-ZX5i&i(~`X6wsYDNX8Y% zcv?V0<{F1e0b~ynAKdI$%=7ynPIiFIg>-14IV1d-e}X_sj>MFt5%(>=9R?e!Mu3HY zV~$pK!4x+g8Z^`&q#Pf*E*4!Nx&`HQQ%R$eP9F7(7tM2;;Iy7N-9vXzWl#8 zRm_!Vi})nJ76KO1Qj5O4;sA8)32x0T;NudSawWId3C$ub#JA#{Fpu~i{g zbURcKVhH%?F|8s+xd^hTN5JSJC`2c*ZG+^yvNp`lDG)tG!+OI=gK=H*J+l+FgW@{t zJ*S;mBkG-QkJA!w91`33(a%e){S0sS1g6fpf2kAwT{d|(JJ&={?$<-tW!KzDL`bbjkVu+j2*}|`kref09vg&B1BMgvoVucV#87#N zqUoY)!xY2O!*#>96nqpo6#f)B#p1>D#mU8yvy&z+CPH(|v-7j@b4AB@#~X~fzkL{s z84Vsn&hM7gnjd`gy+{OaQugCeG7|#l70SrXJC@3Qtk-zfFq^gR zc5eypFzyuZ=I#*haMAE!!eFLho?%1+?gJ8`H_#x^p3oIAsWB+gahW`{eVFJNhUn3M z?=jucmoaLr7F5$(Z}2myGN{#v8C;AJj}nflQNy9UP>rjJD?_RUs4}SmQp%OwD8|lb z&%@6B?V7FgvkO(|?(foH#FCYivt$uXQf~Zu2eS&+949@z$;1 ziHj|j%a+Sz2(&hF|-}Bn?h62mih*zIc7g`lq(^@yUbv3WAA&b z2V3r$${E&;)e$7mFLg?BL2;pRIdavwO?jBV8o$c8nYtaiPrjPF9lKAzo4IAbU_Pig z%RK3T%fhuH-*n9q(U#dXiBgbuo|LTAwbB5m=_TBiBqL`eyZwtMrEIpS-KgiJ`Y7+` z((518CtNdFO-43MUF<&$0v0Hh)0Z77)Db!rLLT&FKe#n{rrf_cxmaM0U|q0nupPc# zf%^yho^3U`Gczjgl17I4Y8n18=pcGL$45vmQWBSeOEFqN7*fs0pcb+mqc@Yzxhm8Cg_ID%5L>Zd z#B{`&qS&IY6(yP#R6ArNWGfV~)S1PVMNY~^vMMTl3ikCFGT0iNjy-q%JmI_&Vr6z` zb!-XEVX2!2w__6x92ViTsdJ9&iftMzc&pNj!WQC|J}KKND5-C$1*&OkKQ2yNW|oSl zmYtOLEu1ku)w($MT@5b~&kNQ!j3X_zoZ;TJ|MgVt@E5oqI3>z0ga*Fg-aDq+b05gU8ogtj5mo)0$bC>^E_PEka zzE|XW0lm)YZu#Qz>bns56e)wtTp-5{&%HN(IW9j=FsM_e+IRa z*j=Hch1q`O=GuH%%ksu~{W2aoN_?Mpy~jC{PB~9$=@Ia{sx0x*_ggVs0B+}L6S9F|)eO`{ z|Es@~t`QIm6q=tS3R6B90GzZ}BbV$NAp}_=D1q-mhp(!2@$V{VD;RIU55b#&dv@$- z&FC!vUHT&w=YZtUzT`WC6_CJRhAa#2I4+vp?Jq#5KGA&U-6z?@I$PU&2o-si)6?_` z)$KM_*CLPu$gvMZ6f*H|^7kd8h5u&P3pb_)*D%YBEAq0(ihL(kCb8#E<}De?n5h_t znIxG-m^fP_O;Aj5w6}DR%=gUC+BP;wW)n;jjWYMG`meI(qHUYR*1Sm;m>R}?InUj3 zCdhj-ax{0=FWlRoEnZ@QbAcp$+85s)grXR<-=|A`~MjBBVjeeyK-BQdC&kx z584Xc6uwl&Z@2UPv>_@5cNOY^7$d<#04tKxINcL*h<} zI}&FSrx)fY3^KH9N0f8beYGo*YaD(4bI8uz{E6cZENQt^e%qCE347n~y4Ulemuy%% z+_HkazqBu0H!k;A>MI8UPij!i9jouEFJ(Ga`>qR-efo3p-3l365A!)pb@fY*4%#m{ zTguk7K>*Znfb?FHd^zAE0+2cw5oK&!jUCwL5gGky-4wdqTQoZw5U+lqDb9<)0G!dh zK{D}r{Q2}6+7|lB282~7Hdx!GTPb_+`*+(d{oHt$azXsc{JUO8af{?vZoxW32t}0B z2l_GkzI$f74`flu21u4Y8QP_zS+Amb%DkY>^u5Ew$G9@3uN zBJjmnSI*p2CD;6?RxO?JGVMfid1@xF=4y%MbR|Ij`#Zd?j>waF=xAyyP#T8pFD^FouXZ6AEIsluy$>FHC(Bvz@$)P?Kq3{sR3o(1RD2+2*R}S zy8ag##2IAQi#3g~6cWQfmmNQujz&64&jeQBo!X~G+B@wunS!Wrf>9H&CR%HG0V z8FH>7uxTW8;e7dd0S8_hHBE{4biRP>knI;v!}!{`{dn5q!y-4CF(n3hHF?^}U-Qb# zYPrVcPhutVD}P*t3PhM?rFbnxI=b+drI)Pc3YS>M1$y*)Zr9rh4cPWOTW1L7rh7w- z?z)?;Ix@qvskUky<^9PAUA@i*&R`N#rBaN_rQ%WaJ(;O z4-;+kpVfgy%`z$BR%1_Q7KwDzcNY(1=d-Euw~yHbhY64{dH~`+0G94LcuXh&(L4Y+ zMX!lS2Y}LGfW;y}5LYfQwh5rY#{0}0-=D&r$@;%opbW!lyV%@9(0F(!oe!CA5mW`O z@M_`LE1A~>!n&GLS*B5vgGzbYc>v>}hmqqWOa$Hk*k)5tiX1B5(*OC1=+or=tzr(pW)zlD3F$Qlbf0onWbeYtezY z&Xyd3Vm4Lwj*j4V1_B>KCJ|*WP+nec$MEb3PRvZgz(^#Sx)Mk2fTD;>vWBzT9x#@| zLZP84md^t@HuYcg)_dl3)aEi5m`YqG3?|Gqx^`Wgfm-7Y>Kck0g3z0UB1L)Ainn6T@&rUBsm!8?OSMldj7PeGB3?TLt zD7_^9xC>;^ybs6M91%bDMC6FS<$Bqflj5w=;`&f`dZ;s)I(xZBuzxy}3ZEO*qMb)) z7H39mD6SXsxWI+xL0R-sZgiN0+21Pe)Eq<|_QBZX@WjLq`z0hm7y=gwKVmg*5iHK5 zNH`$Fc-e#yK=CI$%XqT+ki`zs1vDotxM#H|dyAtPuElGnPoukRJN*h4JjM?Q!zE>= zR=idzD5jT*&9oW)ndpaRz|TLp2+_0R4!S-`!^vgI%qqpo8jC?@8mED*aV!ZembNlY z@r_E(=hq}x$(Ib5kx+3^vi`UJ$^M3d=b`%{g28HHgTe^J9m02F3qyKCvU_QJbx3~5 zM@S3zZi+5B9HrOFb^K)tZ8AIi>zFC=s(Z`&Z2HZ6F80rkFgWND7-MK3^u(t-^s&De z>MHAQ>q6?r7d@BqyX(8kM?4m{Vt1MuazY;g-IbUd8hx9r+UW$I&if9|wruAdhcjtA zIV*n|QTfr$5}gV^mIcAejLP>M<|Y|dVOe`$nL|Jaw+o%)>PmzNd!$gfa1fgx=k6C3 zLwk>QGhi7)RXf#;*zD4*wisnFJCm2fIkQ#_?xd(fh#jde$@kS1-($km)iIYGQ(_FK z(5rQ;nJ*(<#4e+05r^b6_%9LDnY%gRl@H25Rnb+4g z3QPY^XJw##6u*0DNN|67`@NT8aHVUZQ;S-fM43XKMxAh)YMGFUgp0O{u#bqECWqRT z7M03V{h#pFc?P+DT8K|^%QE`i3r1*)k7~qnGFy6c$1O4RPmFyGm?Ss}>IePQwraRq z=o*ua38NhYHG_s-?aicv+qJ%D9$(Cht{NO8(U=1zONC6N4ZzQ$EvWNcdpzoJ@}HG| z5L9%keCA;}KUS5D^;=*b;yCd;+p+7ZeYM8$;FYiO4QXUX%J}3+tHTer6ZdoL`qd{N zsK?dE(2eUi8h5hW*4KZ7`^UaIO);hmL;9q{4HQKRS{9FUZiP9kZb}!&omu?!000!e7J7BqqipsMpH~)nZpLR#59v9q-TL&X>7|mEgGuH-AhW zcXjQirl%9b15_>nnCYLLnju}Bn#Fex{dk4h<-N?jKyK+qYuwjV?g(|cm5V%E|7d$d z9Rvsn1DAi{{G78xSP84x0sufEe!T$!Qqs@>0Pp}r1bF400MFWBtuP1T4>mTrqho}V z>-7&viKDTWG=~g%kxyhDs;eflVoTFkAzL**mO``A6qb03(>$4K6P3X}_H7N9ON z!HYR@ciWI;g9}CZ`t->XedkT3RVX|UulXYID*j0fqH%yVqp<-K@gU%V^{$?vL;nIE z1=!T`o^}io9KE&c@OV4QVCG!oyb;ePqc_6?0Q!7U`ti&_P9d830DyY|fLj4oE*pV; zU8#%#?=-2%UG^#emMaNo`cFIa;mkU#)vuWhTZsgTquv7zxq~iIbQ_$ z2l1)Gk&)shSdvFJaY*)6Ig=@5m;nwzND2Nx(!TOT!MmX#4u@sEJyg+n?*nm&hg8z4 zCr@8ybj9d+l9G9ucwMM_C;CQmg# z*LGq-`Is8-J7srRk-IWtQBL@q$hH$-<@q#NaL$fFb9jssW=Np<)akkSyce5jg0lU} z42#Xe#G`Q=-)g_S)AL4?nh)MkHjOp@piTayM+>bXeS*yLB6hch^&s>HHX$lv)|Sa5 zF^9KHkg` zlPcv>CMmq_Qx)zFQM5a5LZ$pOTin!!s3(I6y9Gc%J5ZFO7~3i+eFr6NYBh&80>~w^ z^0qZ6P(h1Z|A|!(Wpo%rjZg-VR^dDo0J@QZf}3~J%$yF;1XkB0(uom*)5zrT5_j(= zyr(;H?F>bBcW1_g;li#uht+0%Ipz^f)`w$QPlv5FAW6c+hA{VV4$qlR2L!*TqBRc5c%2K1qM z{nJb8lp}RfeM|vq*sRw}E3hMoO7s#R{tZHZEK%six0BoGG2A=CZY0#0;HP&_3f?L- zof3bYK8_-`oUaiTB)lKcXhFX*-n#6rS+iQLeJX5sFu+ysE(ed~Ph0xKHs?U=rsKZf zGGAq&SONDr%lW`^Qah z+mL$0H*f)NDGG`lDXhrlpwk2Nyo1LLM<<)u`27 z)@Bf(5}_Vknh*D7ClYt_Xaj;ISucy~%GWMuljU}MC>^bNV*oT9>K-!H=GSbA2_;55u)X6WIi6F7@>pN5NGcYWR}nD13CvDbt$FG3 zn3L#UM?F9nm}`E4+#7yOSHuP|z##aomiC@)U%^A|_uNJ!l-zGnuyW?mwA#*_Aw38U z)~4S*ravGrY`iBzQA(wuJ&Kx;1Qnb$-|G_K#QMlIfiZfETBNoX4Z@3*&F?PyMo!(k zXfh!<#P)a@GdsuRB(Osr8}fXLQChsOq!mrPmAuu?msOVsF25a$_^_@`=y{No*^&Ui#jXBK|fKE z()Mm$p5!*Xzx8~tk6A(p=4FO&I!D(##)sw7S%q^OZ1SzRMe$oArTDt0Wo6Mp{bp+J zdq=XoG*T^7*u03^d3pB99`SfWS^`7F#X3TQGSuCvt}w+_i@=ab!{jJYNX5o=2j#iS zz7tr>0ek`v%yflE)~KmkZGs7Y0dXzOC5t+C4E%WDR9>BY^HHVb=n@uuqweq@2Nz47 zs!XqehIRR@>_tgQryCz<9{QOdE|I74T6~AA%_o)9+jH=_ZzCHl%1N95_)RYcn)lGo zaF5BCX+9PvG{>(t?_J+X3SGdnq7Yv`Zie6!xE^|eCnlq5U(a5kj-2g$so&B+YFq4v zpZ&L0y~f#RO_yKCJ2;hsNa89|;AVXfiB*tYm&hfgO;j1e#wOOX_C~43JN>=Ag*}av zdgos(A5+3pLs=H5KCVov@gDlw=Z-caNg=mx84fUz`o*C1HLsulRELzpz<$IB+ISW? z{5vStgW<9@#tf-$?x1Eaoq@>|i>Cd!#PkpWSByNY7TDZ|Q}&vp(OT1AZ*HnwEjgX$ zblo5G0TpS#+7>fu!_Hh*RK=ffF0QSJh--iJokoCSt1_vxsejoIAEtrQYD7weoquqv zyG5b}ZL588kXry|JP_LHkg`~q$Ri7Ks7~~#RBC_Tot(8hGJBD5EXv58zR==!%$!AAi34Q`p{W2MASckV7|+EkR`+yRX`M?lADy{Umrw47vzob5lKly_?ZigM z$H{<_dzyq)h0awQX^3-Wjpf^Z6He34`um|4w2Bsm7NEH`*vIu0bsk8+Yq$JV|YLIOQ0SYr=s8hHnC2=XKvIg>WH zwWS>oC&1T6OO%-w?k9`hocR&uD~?>(vQAwoWWVRy-)!ScRMBoO8qQA_tv6Tqwu6HI zMue8^x-AF%GkGRGrn%n3Z71W-QsKU#b8{8ICE-K$@2plf7o3@&Qz*?uDB5nQVJJ=*gJ7R}2n~>#n_n+gcu$Px-I8BQ$^abvdA1 zvftYtnU(okPT#4wUYBcZmBlj+5Rlqizit_s5LQ(qEMl3FwEKcYb%ni!vVQzJQH8Bx zLoOvfR=}^U-f~u7A;}=%GF|Lq_MG3uu2mH5C^XQ)&dk;50iwy)+#1&KM}|l3!_K_m zT*1rwPIBQy5#_Aq$A~vZGIe>(jTz=|J1TAsp=iPiWCOmmkDs5+_iEMJ2$C>oa^r1z zH=oD#Yjvab4QH$g(Xy?8b)I`rlg)U&0$uRnYW)0TqTtUhVj&;1i7m9&BRBF1n`jkt zX~}OurI40f*Bl`(V~=)5G#$+6_ZqdwOB3X^gHkCPP8W+!w`%v9SkHG+5}d1e_vrW^ zuYv2uE?Vk(#0N7>(>cHeQt2GdCY!HDoO=}&gGxZO)3Gq-iYJ!3PPsVcK@6TiBPMn1 z^J}?Nv!3Mn7>E|ssfW`73b-5}W!{v>y2~AQ`@2UsiDKSMp%Z2+5`pcLR!aa~Vv+7e z1oq_VtqayOBy()=E-lINe}soSn71Db_XV$PWNf);)`x87-XP+kBr_jO6_=H9n@iLp z(p7&N=Zg&lqnTiHRwnK}rX>?5p9Qfw(DEmM?jXHu=_ z=taFtsL!bg2<5EVh=?f!xn`f4LyPU__C`_Bb>>2t86he;oo|!C5l5e-lO@ z5XSicW+?kr>&!2;UgKXuDkC7;VTk*jW0_C}Kb2-!yZyRV!LH!Ip2wD%EL$;H`Ea%( zTYXq;bhGYms7}#$7(E{`&q*4OP}Fw>n^Ips<8ZaU^>gyk;VC@J1)0zvE%hqp_h7Et z$p_0*08z?^>Ct-g#iQ|9Ck&WcE`U7{DH8JNm5<5mH;8Gl`;Ca~?Hi=RhSg4`j`GmAiH=^_L$Q zW7GjhWk&ex6)t}@B=zcFbcRiRg7L>(O=Ur9Mh;*fU*ZzCLNnd79!B!meTUn4s5U8l z51<8LplC9Mjm+G&asaYxzx|drb zmMY3Y1>Hm)inAyR=8m9lO)p|%bTmCZJ*A&5hE`3boqx}sLKSI-A?@_}6FVG*lI>~2 zk6N(ayTz6E8A_VxoOXpeA(<+Yt9ol+tqBviibiWGg;cmGDHfr=`gCR^7P{qV1O)^F zy>YeV%c(Q|P-JeKgU7*v0nhFVArx=JJS4LI$r)0| zUxaIgRRPf}>i54E3VEea|8}X&fAw-x#s|Z~K2f^=P2sHGqbEs0zfTPL>+n+$@oFne z6e95285ti1=T`o@n(Z0LH(FU@$NUn8+!Z%ZTriMBKVzxT&5r*DmVyHc6i!E<^B4g; zo%1I2gT4YoUK|b8*xm)KCwgnk%GhA~G#^vcZt$Y;ktVcnD=#u(R7T`!@5RJzw|ilR zX*cPwrOFDWyAzKFqb6Hld<>g z#k>w>5zKp!B#P5^wg95t)26^W#MY5A{A*x9cc9Rw00C|= zKOY`ogu(VR>Ss7M*UQm9^_Ka>>1H(yJ#-J?YF|;MApTvECx6w>};~NgH%jwBQc>VQbl~wL|^O&RU|@eM0+|#l^>t>ppwU zq?4fkp9KuSFjFnl-yzqtVtCH)lNT4C_d-g*b~SGL3UJp|E8u#8z4b{y_c|Sn{tFDh zIU-5(e!~u-3N}-JPw4pRI?4oZM(H~qWR1@eR(8VZC50K^WW z)8s^l7w>B-#z+RJeDidI|HtMiLzYmJRE%mi#Z1UV+dkv497~YU;(WKux$2dR3_U>r8P`P{~oIMWz@@2P`27KX+ zNvgx!Q*%_JQ2j$0axbRr)%d1&e$PwIe)!Hy#Kfh=?~UsXC!K4fM%I{Pls?RCU-JtF zCL3c#F2l_p7gr_z^YiSEcGE+~#;r4;nUQk6Nq^Nl?_a-tqIA>N>oHsqXkYB^31iwJDtHLz zzDIzu%Gws>hqjW z685W!mic>#5)4v(Ot;bNDR_MuqVF$nW*QvxXe4$woQPXKo?fTk zl5;-HvIjfRlAlKVi(ol6$U`(TR<2tv#L|guBVoQ0q8uLxs%{w)a>isx-SSu^72~`z z7F7TAsZ9>MEjFjFKQBDS&cduIysBI+W!{llP%FbFIN8T@d1_4gU_K)82swG)G90mBl4+gUfwd z@A7){`}N7M0tB8n1uJiFXXjE17e|!FSKm(joQ}`&9f^u3Dp(9h5*_;u5a`Q)eK zdfL_TTEs)Z0eyuBWmsq0%W}zX9+3@QP4{1h3uxC2%Yv#1y z(lVR;TQvre1q#HalZ|Cjm;DX5g31h{2h9iz~rLrWg2?6B+X){8;T#bipIF{zLsNR6+H@xcJ>Fi~YjF;~5C%mlo>mAic$EY#d$6+g&*-9kyW( zwVon@raDGW^+b3K=K2sN@j?t@(bN$`h0<&lHJ_=(bx80cHQn!1vV-ViOtUa#Kt4eX$a~q{ zJnI|(;f%0=ej5;C3dtCK`xuYs6P%}@|5Fg&Yfe+74pid{Z2%N8&ANMbl8P|XDpBQ6vSv= z1+}ZlMi+J-E(^W$v)%sa)6%Z~*62|1I(E^GvEsRc`&7LDH?1_DL(Fb0ph(?EoJrOZ z|ClF|%(L(`OL#?a@-^kAqkHSNWgzXA_&3|kzMU+!p3ycmcePfq%y#nDcw(;w4DhYK zExz=bSQ!TEl6vRF=(*zasqsU{S!FfEzD7+&U`)enqQH5tCXUj5@i;|8$T&BQ1YwBr`Qp2Klv^0Ld1QY*wIZKYFTz`e!pXRvs~9Rn7~bEb+yY+T1Gv3zAT9a%h=j?y)cy1da&m@qkn>( zNRna%)m3=CLIKqV`w9gfZ3_^Siq}~8+M20TLuM&Y>gA^@8oKl?=df4p?INcE|AS%8 zLh_qpE@pE$%kfiO71@QnX4=|zINOe*sf@`qIXI_uF;33*Bv+*} z3I?fI>1|`SFOsoXIGcQ-(Ak-yT5QN`425F!?s10lRo0ZkEVtUk6Tj;~VI^(($zY-2H$3u0v z4znYpiLgBIQP4=aqkGUr1i}I`5y$ZaQNW!2&67H9jKQ?O@ z#{Hf6_$I~poEpbCkq@Otu3iY@qS5Xn=$KGMgR?V8`0PStpLURBtg5ScLjwLIXM3Qz z=jDnIjeRNx`!>=vF2YK+r?Zha_iJh0W9xG3UkyN@*a3`w-FWg4IRnS^o5h0M4 zC@_|i+?marABO6{O2brCcYsYVIvRG0XlGR9ezl)Zy{z27DY2@^O|;ipFf{!;eY~&1 zhUIR)ufxL~cwaBU`22xGik|E$X3vr*9xV*D7Pg66&devR>i%~s!92(%>5;GhClUX? z>29dS!HG%3Pg3KqT_ZfZ>Tfhc@EO|9)X!$JZB>pQuBi)0-iD6*rA zF>}8knzRYWu>PEI+i@FccO~*o9l>5o=EAZF)@xpJ>~A=m>#Do5pnvX@tS$UKmiHKE z{zUFBk>YOcaF9p>`*Ndr)96}xvhDih%$K9yjaGSwK`5X@SUAL{)Gp0pufq~P-OW@c1 zFZ1czgZ_3Kv%-K@V`}jAZepl2RJYn%;$Y+NDKlNs#CqSj2O%Z3z)60urmG6V#}1KdYBR|#qb#L^0}Cz5 zO2v_e0_Nhwz-8+5&@*7*9@jb+MaD7pKdiU5p47u=XM!!aN^>>wsTWV??TI zT87AQH6(17IG(~T&daYSrK9nIzCo=Iq0pcXbvx&+7yw_WM~PTV@B4X(kv~}}bDAi` zy<&zW4V-*XVkyso^RMG=)U~Sr6+>QL@PIi};5m<>*cl^Q8AkVDs>?}9XhZsr^|N$8 zYZlpf{;S-ufRx%Q+H9nG<-W8x0su;0r?;0lr$(LXg65 zVzo!~nk&adCiw0qf#E*8$^W&;J4LZ&mzXnkG(3z#D`t2+LR0bnWE>j)e>hV(D`bx5 zCMM%!eEs$;Rjz{6mi82#!9Ld^-3!wPv|GsLOOYf7ZwkehQL$!YHOrd0sr!H92?ZZc z$a}V!?Ul@i%b!2){8SK%So&>ExGvGohIIZeByH`_5DbhX!+!|GqpboVe`IQUE3An! zo|bmF7R^@C$R`y(j>X;ER(x@Y&TS8`yNaRyP5Iu$Up*O$=bIFRyG0jnLK@nyKO0VL zFR$WRIdu~=SX`-|qiGnEY&^;Y_V_4YEKqI>WUp#IbFX3gKH@E_cWkA$TB7A_ad(h; z4*4>umg97~m(4$Tf<+zz`&~u}XXyo*8W0S=cg8tsoIvg@uW&CI#V!MWI|mpygJB+*rYHZ+|7f3D&E@+?{FOZ*T?jZm`RL;7C@$X&cA<2n9b zzk3}e<{4D0;hP7CRK-$l^Ez-gkZ*XxG?6Sqw^@v)?-hVmVt`Byq*v3&;Nv76Pm z4=_SMMZ{xOJ&>RC+W{jtw~S9!G2zn-zs=UPtWMb`uT@&cZ;?;9hD^(<|y zj-(BBveE*^t=>k`wB?G*k2|z&O=llgHoxU z3F9VT=>5_RqQNvuwG1e&2`3&sH})W4(EV(N90MF+c2GeExoa$JeOMdM3aD{%*Im1h z@nvdoAQR6)R%KU^O3b4Y)383iT(s$eCw%}OjOHGyUYTlPM9X1o)|%>>#GX#^s1N(W zI4~f#oO({s(6OrG8vfWvnrP2VH)0NoJ@2U#uW*I2YL6L7;QqQ&`xYy4`lbV^7_D@K z^dEJlkbdT#0V29Z7OC-~%JMRE!?GUK%KCF$LGWj@X+vduK0A98##*{MlKc172jC4C znAX7G6_{aAObdnYTQgOn&mEZF<`qMdJ#W&xOSRA2Rw4SE6{9zV>u+rJ@>Aax5?SbH zFeL0RmIb`$ww1JZ`5qOwPBfZ?$lz~pVi0$@zrBJAVxnT+C-ic^p`mYZnp`0sA*vkU zNf2f1z$JOl=J(Vm+mSa^9GC|$&(2p2i{GTphOf=xlnLtsY05F0aHY+d z2`)9IM@UU>y%@{La1=QzYHZlXXgk;==E-#w$LmIiosl&Ni?de~!KLacE6T!!HZpUo z+bPJ9$+3E#3`uq(PBmT>W|Wj@O>Xt$8>GmAZ0|71HJdn65yUZ>e~%!>F8x1he4C~5 z3p+yYBqxe>>#ZiHqk1JAt#(vNq8sWpi8CtCR>Rj8sZ#94g&6UW^fig;+Z-&x1JANn zyBIw1@7?Ku=1Q5ubxVV$yP01@3Q5QyJ|E^I11SzSjs0Ev^w|fz43O01M(0?DOAGPI zwBjRdmPi0;so%`xzUcUd8S@_+Fvfy1UrT+W!1`HhM({ z7c=|i@My2993~I%J=N{K+3jN<22r}5QL#M=wV+c)ZtncaPq%=ra2fOJZzed;;sS4t_ zcEt40=0jkjBD6CIhM(sp%#>u~%jWL8_e#$`_4+YDzDP4^kbOr`%h~N9gpL=%R87VY z&@v9Jk++=Z?SDnUQG1#3na=hzUnQORYCanWhu2lgs!csz-+=YK5+|QTzir&FRAeOb zrf@&Y&u}+gW287c{9k4Mhrq^zCbDwLQ1{|mDp}cJBVzTEh_w`(;fHrVv06LZY(2>UO&iA@ z0t4trt#7Y`#hFu6M>5iT&Bbm#*XorZMS32!wcFSmY{ff&Y8=kTH*r-#%%UxnU;d-9 zTF^dGf(bH5m6Ez!<+4pcttg5QwtVN$NM5ms6I)q&J^*GGZgKvDghmTB?enNsKOM^)i45>3m{Zg0cf%OK<^ zg=25{O3LPFA8KgVIx;c5zSl(h7&nag8mgMi@-;;A?kAM)F-asBM@dpUQ$HUZzumGD zBbpg&XJ|L41r26kq=z4$`Bm+mXFa+X1DePOq6fl{Pc(c)TMixqb*?i4A7LU9NV2^3AS z7I!DX1H~OmDQ$j>|J0ZKwF92Pi1{wH1L zwPF`47cM!`-IBOj_<|IE$;nJC@dYZp9_#e~S}MU(oTac$S&&_rmukRe@E-I}D)-^$ zfZ(FHhwnlsaQtRjwivbNO`(Q*jnlBieGiq@gwFVLf7SrSky&X2LO9(L51=E9<|KLmu+?6gom6n7w!Ujh^kxj0sr*@x>FpPrB-iJk z9FsEJB7GNEA4;t2pW5-$2kx{vlw4|(j@eGm^eGYpj4Gj~ugrSG`)Z~~XU5Gy_-RYc z{Y<)E9a*ZI@kW)c&5b%tM#pFBRL;5emU+xI2ity^W3pW7%;4jNg&k&0kn^z#!9P?E zz|gIpWk*WsDm<*`qH7(~7P)pts!C0`a*}ey;hi~t|F8e^Np9PQ*MTFiF{O5vQ(I5I z4LqGDwh+Bs)yZ1Xc{V1wn#KWrn!v&>V-*2Ug?&*VaNqwlq zEZW>9c`u0gUz#b16pF6bSU!)RO+ez&v#Nl~}iB1RsWs zLol%PQ*GBL*LkzhNj-y{2q)o3$`ytd1@q*(K=I;9(*1k3rwnqFx>Cr>9o%959camV z^1klHw>g~Ch8--jt#i=Ibtb1P3f2e1$T#`VZicD@MglKk#`&E3_1y*2grh0DQ#W5W5 zhV~yegEf|AHa*h^gzwJDk|78TH{;6h2iO?+!z zTN|cMhmdL04vZt(d&FT8w3>H+DlHDlK=4^{7OR(yxj)fBoyH=F#hI&uU2)T;;ASc6 z`BcjYU;#Go_S$Sxc!CnmusX3spQAD!uG-9yiG-!)UGSJ$*M5^fR~5=_07wSS^qGqG zkH>*v50Wwk?FZvQM4jF(T=Wha+1s-;9n9Qd4||@q7Vi4E(A=3LIu`g5J2`k_wGM_8 zs<_iv){j`}^Aen##?bF?E0qQ)^_2J7+Aei#yW>(oqUk%nI}@v?9@xB^IgHQz9;X65 za=XO~yUHhvE>os~r>M{Sj-AFF(<8zbfBIctZ>ZoM#8x9Ts(h%tm=xaIevzLM>Lc+z zQv;ISpS!pHh>7m-4D5fkNA zzmCK^#;HzRi0|;vV}#ljC<=T8xDQSYM;Hrrq!>FR~l8 zsEL*Q)&l%v%kSi@wCkY(kH4ul2H9|GiCEcK6K*Mcd~6_bLLEIGLhuiD-Q`i?j93)aLkiM1kZEWplkzN63fN$duWIjyWUdO=J%o(P{f23DQ z2~xE)y}KQXqGDCtwts?Lkisa>`~w5DFF%Ee@-L}IVT`9l^Q(j*-+R!_QW>OqEcu{V z@Nhdk8b}2F2MuiXaNwecjIrj#d%Z*t%gn~ZYLT@Z^WxDhV3J1CAAYK%-{&*PxbEKOHhmR)EjNd%a# z@S9Tli2wN&cudv0t;0NaI>Q=odyDY7Mz61V^;S^>yXQPQ_1$UmyxV8HkQ+-hc8;Zu{?w@J4@wm74{U8{ucOz*A!9|J@(- z3`OsH)?L#6Dlc7PUE~Hf)oZ{_f%z`olxlA7EVIBF)UXz5eNwlWB;2-f4>tIl3v&_W z2YmD2UN27WrMk)XbdR^}g;8-|#P{^hNQx!~oHnXggbo}(Hg-EMtU6?m&iuXPuO7x! zie7WUt{MlgF8&I%D4J<`72o`41Qh5{w3pV}==fSPws+}v+cO}b`9{ae&1lNe1ajKt zGvG}RC0dj{1*3LEALD$ zCrQu2xwcu28Fx5Cm@})Y=FXe&Z4LoWMge>N^fO>wsj~G}CWyWhb`IgQTWD*X=q|9F zBJ@po?9**X=O~z`Gy30#>sh}(s2v6#*zaeGJ=gIl+>W41qKZO}oDeei_KW=85PkMO z+mG8T$al9Cp({oqkGs@^{s=v235y(S-wVP-K0tei%rDVs(0Ktv>YZa_h~eZ)+iKytb`>W?l6oSiX-uBwwq|HGUL^Zsp;bs;p)r%ttHx1Z^iZIr@2b zs;uWImtuwcP!=AGz2sh2@fR%RK_@#Wp?6V)4<+>k z%&kWNbcO_#<=~gA4~a@D|AAU2q0MFGWI)g`8$I zWuw_pO0)XSsKW~kd%D%q`?)xR*`3OdORc}fe?oINe>x6g;$etRb7K=MFw-G>&5c{X{{LbA@o0WZ)O*M=U4$aJG@ze|9!HqyT7LJXG7%Lm0xK0h4|#BMBc_( zf9yV74wsz=eIs*+pRK%^e6x~h+&D&~r@Y+U@`c1E+k6(~X?8qW$^;tX@|YI1%x3gT z-6nLOsDf0l`X5$O5qX2Uiha3t4beO*3ukD;Uh1tc@ru%59*%fO)dX zfC$@WR9b_DYelDGEWmkjEJ8tpye4+@iCX-0soos9Q!f0mr?@X=Z_`{)Ny}WmdO;lL zjnambwl_@yvxCHU$8zn3<{mT9-qLSfge5Vt7juMz8Twtic^Gd5lPD87gMH24eqSn8 zlv4Ul=us~xEAV{VCx+MDuw?C>0}I&;9Of-EHAhb3^Eml8cKfnoxekXfLPxekRC1OJ zndPeA7fMfZYki$gf&S+%P^=9aAFI0<*jf$d@|A?}S2gE4z_n5z%+Q--5;X45+d~t zQ|kTv`$HFLQn~{#(%Hs*$vizxvK=?kz4=q$EeS5U)>}_HoL9ysJHx6)BWga{f8xej z#3G@H4$5`9Z;aqp#)u1ye!)fY6$Tz{cCS8I3r7SXg**@NHdrJ~{Ee7$@GSMU@8y3X zr&=?W9o}Z|hJ=k|MBYue2_EZx`n&X3>-ukfw9!^)^|zXVBm}|WS}?Ep7zc*gc4RGy zD%?StScMaDd*EtRmLH(-Rjt{8Z32HywO2c3||u1~7$Ci;~DHi+ZQU!X6j+kTVr zpC<@2C8@5Kl))L?^_;QA`c3f-3`}@CAyBKC?_#G8;wp?zsP!g9xBUdNlm!t*rcvFw zUEQ`2!WMo3fBfXa0sLlsuMpfay7I(BGF9GAovwaDz%VOfAZD=Dw2>sLoNA|;Q0u#WuH z*#^0F6)mpW;5}*r)gt0Rlet-q&I`SYhQ{tGzHTi?6m)%2UM19N;3*r)GH2IL{z6VZ ze?o>ghI+Uo&Nrqeht!;tDOw}Id${Al`*3uN9_3ka?L?BZ=fiSeQ*BC ztp(?#hLGpJd`v90mJk2zFNvz*;cO+@q;fcqTP}m9b*+z8H5h^k{20*~4W?zqBJHc4 zn4t$*DfEbCxmJ77Zxud02=V)x-ah>y?eKZ1uAP1>4NXF{AAm=M0?#$l`S_hdzgnm_ zfAP2uLOMQKgm-9R+RfnNN`kLPe=+j=HMYY12CZM_UL*p2LAkq|nAWOa2bfV*UPE3A z3pTBo%)7PCa25oQ+0~uOuOZ3NCIPmx4+HiiCa=HHGVfr4DRt!t3m)QkL>@IuR2#hWJF*duOt!N~@lyK~=pOF! ztVP?N0$}70#{aZ_r{(l6x;*m|ALoZAH#mXl#^=6e-6m}NWzG%Zlu9|R0FKdz5O&Km zZ%XS@=B>^C2B^im{3tedk=Ka}RFvva2zmH(Xt`mwJFOf9CC+d*sKr#90pU5n9FcAh zznRtKtr2t{#fM^)N!1+kNeXzWVvK5}-(k+ezipHT z0oWVId=}+llN&1ggLG$cA#`|CLZ4fD8Hrb?G_vn~QEj(^ql&F$8O*BUEKm07R>zj` z{s{N|I`y{>qm*_jsrD2Lt5b)%KVhNDuu14N!W3J zjXYhAj*q^8JH;Bqi++<(-C*~vToSU_*8_<3B&`OH8SaS&tqhFAr-n>>eNT`tOs9wE z0=$Kbr@y^yRcwA%tgAn4;EP_X)Vf2Y(UWnT%ON{rqiwF39`P**C^yWyFnC%)CC!&$ zZJ?>n#`v+bQglFaB5&&wtQ+GiL*UP;q>-vXTC6TlC~M}a#;r&V$=#&T zp5KW6#Angi)247^P#L-S+f*z%g{bLzo`#%}0*}s$acD@e9dVt?uo=_D&^0B+8vv~-kqK(@JY zoCH*m`2s|_^DVALB$Uxks8LlrR=%dlr;F9@gnuc8R+UpNe{ZODy5fvp+uH7ksv-9M{#B|&` z{JXqm8K}G~q|-zz`@~=5yVx?qc#Ld_6rG?+QvAFe9tQg$5l0O>+j%KPXn4ZCk{HLn zrYxSKth>+{m3IDCi~L&@NO?ysVXiHs|NiFf^gtOumx3%J(%F%|be{E+lvu+1 zg6Ru0=El7y9K=fmdH!ZG9ftJRf1H8g^%7ToQXcz6zSJth;e}U9XG3A#6s&Y^V}$gX zY?x8EJ8JhPTM0KR+EYER$kds*C`=$9Kgko)ur+kjg!f>nzKTqKMnk~&hk(u}o;}E# zA*viHPzGpgUQTH4Wu8HJ09$Ijb*+}w`Pdd221Y&WuaepDOH3*V#4Lp&LnRcdCFw*V zjvM*rsK7mFk5OP*DJFz;Qt}f$&}AOE^%iIgb~o6}UsSg}(ea(ER<3*Zp3#RgEKD@f z?Ia(R%^$#wGmxMlscS?O(#sHaSHh~UMyZx;o?hY3NFjG+q)q-&9sZ=gOM-YEbzZs9 zZE&Z*=wdBc%*1$}-V53jB%%`woSuE#yEGFEHYu`#H>ms~gs`*FU~1!mGDLJLpU@~A z(oCvb7ZgAb0)COQhK$fT=6)5KULQ6#f^|WB+04I~YcaSfmGYD)aNyV(0sXT>XTK(k zRFNXj_mSF+WZJ>@JuMLSeBR}S6)Kc%bQZ4Py z8k(>{adP~@zk8o1;bI>slYdD~n#niU+O@Lke%Y?m8?0zso*{Xx9PA6Xq@D4TSl6Jk z%PiFOWrVmb#%x$)G!I*Xt}8@nAd>$VkTxB? zfq5&|h<6a7KM!%eO7s>)y%i} z==>E+AGx41FPVctHaE7D8nU6uE}YKd)}uw18R$yXxZi{_J61TIMAdGL`Nn!|sqw+* z_H;aJ9Wmpn4!^C0$?eGBk*(TLU3i7NeJn9gi|22-q9c;0eO1EiT>_z9WJJqY-H7M7 zel)eTiBiRKf+XLwBZB|>Y1 z2s#4!%#klsC-`Zdz`x+tm~m$jSj&I7DA9;h9Yvk20GlcMwGX2R2r{0m;K%t6)EBRoOAHTP)H*5NU&hMD92H~ z%Yo%vQ|dPO&vE=}DqNk{F(Zs-FBCIXSIIcxBhRLm%DY37-|N!#v)qSAK}AH%U}#*T z9NbUpxXNWaC@#JPGXaw$LbE4VDl_Vo%{W~}X*AS0q1S7xKM%ILy1wFTFrTqz&(|sK zh+;71Y;`go*xG*GO6t|>=Q4MY4i2qwE)i@ZhiySvQJAYZ>s;HNhS=ouL8^S}rOeXByUF`b&%D-j>(Ym2i!4Bh@3T&G}d_J8z)To@G znFZclS5?HCJ?~N^Fu)Hib*MGKXDxdCOI);6PBB5k7uHj@t14Rg`zx>1UL+}G;CRes!1{F7q>myMJb_x0< zjt|RNn^=Gn`lrCZH(}`WBx~hEzTL03#&%!I>Uigge>i7N8~sEkSdH1RHG}T;6wJ?b z(Ix&n{16plsqvgxqggCoWPgjQ8sFt(&{IF!XJs!Yohnc#o+hFaoJBw2JjuPG44a6= z_-p&Fd907fTv>k9&%HcR33vz?-WaS4K{_oZC5wo#D2nMmpAkJ3WfH?bTV}7$<@EZ8 z>i=Bt2}BHyj#vwKmt05Z#pBV;ngTwF0?G(eBuFL~#7|2R^EqbMvuoH({Ah_nvN+Ix z57N|^mCw2SjjzV*-N!c#)8ZUT$9$YmBUG%2Cy^w?5MkI@5=MtD@WojNvbfw)7)%lj z=3jcaZ*w@ffI%!W!Fc2)uFkGwvty6{fo?%sN+N6?wh-Cb+0RKx_?gV~RVSmx$2p~9 z4HrM-p`^(ZRQ~lJwiivV2k+JmeaA9oeyDM-erjB4&wqLO5OWhw+%Wx-hkN$5+&HI- zYWER*&9Pzo;J`%H^-|<@VW2IqSH#z^U#n|sQIR|9>)(3`QShZ|BgudU7Z%3$cQt2@@30a+OB^yCH06+hyhxJ|&id4e^2ge2wiVAPrs-J64oB)8 z&6x`D$-{#%aXtk{W?7m3u&`BWPlIlCZk=V)VMst??0ohpq-143j!T4y1Rs9MqN1dX zDLrJy6aQex`hyN*VPT=Gx7Uc3aAfa7`Q`V*!qB;c+`PQt;$p_qwtLUY%F1#L#@Mc| z=Fz#ifxWV}VN90hpF87uU!$UWt+^qvy^Zxhh6yvGf_Qj%_FHLgt8hd>d-e0Pz;@7UTH4^E(#BBQ46oRmo15hp zDmm9b{@e9llW<$i^3ADAhM3Vn{wCmj&U9Ysic}!-lBCjH3-=biXQ;^7z3hhw-`1|! z92qoA8LsW^{T{=LALF|FZTL^$2A8UhbB0UcdbT_&g9T>&EL5GbUOZJG^*xijKUiv& zR97cJM@RowxNvgqbqebl zz)8IE1pW833pruMLH{UONQCtyi}Fzcv*>eTdb$Ws*mh!$S_Tv?v_rk^5-BW!@q;Rt z$}2t36KWqsivHPdQSbJV8wx?fK*YcX_9g5Ye{kVJ7wQlAqcM9#6OFQ} zstz;3%*@RC=H}{!rzGQdv}7{Lm-#Dkt!{>;PqI8)(u>MklOd8(j`z3M%OHtIKuARO z1}q(A9J@Z|DmAUrOn&rd&4WuI=j_(3wOtNk@@NUmQj(|Al1$sX&V0jZ{JjXX;aJl; zG|XJJBCMjxo*^FJ#I1DipdPm+aXVHdtxvcMAW$J)zK?LI{D(50=%j}41Mw_qC|-IL zdQrjRL}3Cn_bKaVgCO9%lU0oD5*Ye8CGR2+^b8&>4ITPM|m|huc~Gk zhrr#%1caLKo4qo#qs11$dCxt)Sq~a@m`hu4EDa3}X_~PT2D-1$wmgnn;H*iqKv46Z z{HYFS!9tAk;g-j5Iv)3b^4l8u5cc>itmmK;Xi{%h8J3IUPrBQix^{wS2m+f=E2Ao%TY5t?EpS7z@hlp)kF7T!A@0|$4B{;DJ z()}znuhd|480JNc!0iFWNYf=MX@xRjb>rglitj8}x!ytw!Go~cV8bj5=K2nq6Y z^-*&`ScYGN1lOCvO!iqMi5Q=}kGLDC$=i9USXl_UMZ)yKagmYO&U`4U3DgwFkdeyn9Es z1w9+)w|jw$8_;L`IK+%h?6d?!06$7Fg5_vOn^a&kF& zd1wg(Tm{5AGvYaj5_NNV{ei+S$GP!7d{L^(*G*dg>$RO^NzTx5A%uGu6j6W4Ngx4;c&|wfX_l}jm+y0{My@Sk_lDPW%`h1Kgza1T*GFeR(qoXDpc}uFQDk&>V z$;n||Ydbk{92^`FK0{qyT{X9}%Mg|tg!P2^UQu{TI|idcN^u1gFZhTu9`wKKZsx7P zg^l2?4A)EW;-C8#**EIJtcxdDwfZX?fsz!P>I(cs{miQDk?APU7FK|=KO^y_fI zB0w#YBxT|maXas4C|k$zy+YP2$h_oqKdN}>U^93IfVJp!g> zW{#YgP-$#z%x)!mFJ}%5~y8QDtIH`il^q@b@@Q&*jrpE~kI0;efc*@gjFV)`pUOyOAgzK(lSr7|l;6(Ly z_6pyhMCW!Jp_CUER)X3e<1=co?(&9s780pb`QA=G{8+qqsny3-n5%l|hPsj&_wfkz zh%V9JUk%)ydu4|o#pkWqwf#e__GneZakBTipNv6joOrtBPVxR~%Ejxt^7v_cUq$-d z_2wmlmDD%frtKctP8UI43R<_JX}y!YpLfQ3I1Y$1fY;d9_V&kSw{5L|U3z}Dfu`9u z{m&*}cjZ3g%QY7|hZ!%%Erop_FX3X<0x*VcqZ$Wf3 zv%dN$_>aDzrl!W4$F#8_L_La%kH_D4MTGcmk01^=Q|wIPhYRh?%8Gd55>!A8b!t6+ z;=kkvc3)m3bWh4&zVHkfnl>^r0w5cXPp>)WZ<}~}dcOV3P!jb&Y}XUgRAh#bJPXf4 z4Co7V6c#gR#Cdxh2gK}>a&gYv67b*O1#6UWmuh_*@DIc+&tvKM4gGd3?CjP`aIrW^ zeZM8>33QzBEG>86@Sr{ZB-gp&=#ZJ0(o0d)bp+3Z^+wL6;1eX{6VMcH-OZk}C9* z1g{wAqwh$v70g6U1VXsPQW_|>0SZNkdjLa6THUJTUOYjn$>8HNb5FecC(MA3^}DFCA^AEZv%ZVl6Cux3ja;e1Eg|GW<^_AIuPOo)0{inq(8lsO6Ls zD}xzTX#B=iCmA>oZ{CYYXCsZ8v#(ru7F?hC8dc5Y-|am-*}B``*)f3QBHV9w^73!X zB>hpeAfun`peQe2;+}YVpEuojAP#T^;DaBOl$89rL?I{vKrqzJ4ROJAa9v91bgY^8 zo%tlKb5p*5|I)b<;%O^UQ&0Uq-Dlhb%b^z%gM7k5sw6HcJti5;Mbv0lcery`TZvW;R%?0n%ogA8 zgnbkB?{?)%Z)e@;rH?i@3WKj_)*QURYs9h+Y|Aby%0%XJhYl;SUeG8*{?-F`=F!)a zudeH}Kf|(Bi_}J^r$hRTJIpz=V0#VrE04Xsy*qFGP;UaGdJbH15NR{kG|bG{08(kz z{|orh2EIc@DDn*|G#INnc`DBG_&Jie&EknVEBgV^A9f3h5=t$)aPh-1-pNT&7iPCSE7bP;?sIyJ@ZYRdY4%Un;7+_sM2*w~_KhP2p%tlzNWxSPc%rs=3P1&f4x8IG{9 zwKeSw!kYJnFL<4V>311cd~8M|VAdhDPG|X}iM%CDd+GPMIEzj|^^6waApL$Gm_+zt z{#hVa;_DMJ;f*SidvaCP-%ltE-=zF5SlIMrwVP41`OEG@=}Iro9WC1ZR+-l!X3mxB zu{+?Oy0;rUdGFme@0P#gjqdCJkTBgD%UQ!9MV14oEv;Sii9}aUO%2y{9VcFftj@l@n`HF?48d%s~Muy<}yZSs81 zHJnFFFh4oWsW)=ez$MxkX)S9{qmx0vyBI}%Ni$O5f-h*&s)8i(7~b^@U^xEXAC&<> zBrW|0uzQsmbZlWka5L;}iym|=M<(D-2pL}4XPnj2;;q4CCM}Ioq*h`GP_4Jr)F|4> z*}1uuo)?yCC0gRr($ZZAGuGT*Li!Ud{(mgqb<4gXju7#!y1(}Ug8g=_uCAPY55v;Z z^6FQ~UWm$}%0E|MJ{~qb6nQo57tsa8dAwUz2590c?#qVFMlZadd$8l8z*yrwf3WXbP-IZ48 zQA?mRGF{L>{n?^+!Oem1sY08Rfozi>i?0zfgZk3&5cFVm>7fFD@08?v8;ht}ARUuy zmHSm=n(x|ZuYOiH1SH+J8V~gj!K?aeg{gjgyY?`+X?D0w0-rVaLXgFRRl_6S95$Hn zG`U%C*0o@Kl_^^p2HTouJ_6C#Ex9qY`J4++pVo`c?z+swPr8xO?M|Mw(MsS^PzYO3 z%mV;VmPT2{X%Q8by?=OkbG`4I24g%(205%-6hNj)Nl648&jTp09@Ej#&|De*hSFVK zU2FkM>+8k~>T zEm>CJG)(_RMs$ciN?YN{ZqY??>pQnDGDSRpKRS_e)iV6Xs#(zI=_OdNg4=C0l`l9F zz}$@ZGAhUf4LZz#pIjZfwS^6tcCMX-Yw>eb&)69mQNi@U2O-K$#>U2=8m-a2i{|q& znfIjFQYMCKLleZ9821Smh zr<0T4>_ESUDg4|UKej?v+}JI0G`HoGN%kH+7PUVXhCGQi5GIkM86#l&O@1$~&)o&O zy1QdyV_%NpvCSSusd5n0?MLPHsD{kE9#P@p;(7%c4e4D&zg!CP+iav&NPo-E57v;g za&%-rIXP*6;SMpV(F*WZhFDC#{%iXv`U4K2AllZYq}VcpCJXodh!y3;NR&D)qMnDy zSC3e85;q{uNE)n7@NMhBgC2s&av=-0JazMq1NAA}sF9;vXDBIDk=0LxsJc=I@KDj% z8xI@z{Nbw0ff1wTUFMvp02&&bpC=s)o&d1|LY|DQtn38UIzYwIKmI8fLO*h?EfYk3 zY&kak8fbf@ijtu(hE?R8x|=EO%qIx<*(vhcnoIGg+KJ>$wgo*|$j*K%bi0BRRi?l7 z8VK@Hh$Q5`__-4oArl?lat%zc^S~7?&kW;9wr2}@-gsXUhZ)Vqm^h&LuqPQmr~0GT zp-a#bBm(;0IVy4>MZ>E$K31fdp5r9(+{)>KZRcW*IJreE-(IT=79&n#DpW{eAs~$G z937brC3CgYgsd?=VbQLYRf@P0d6HdGQNgHL`309&9>hr;a2AbvZ(E`9Mt<(iAM<`x zF&Qqw_v&+< zUaSVtux{BI7*I+{NdY(?fF2uNe>FXNj)LUT`}_Ol2Q*aXM#BqBPAnBUqg>)e`cQyG zX}-;4UKdqI^J(+dz@53gyab)i2VxRLf|uV=3YoX(>y?@H#Zs?tZJkXhE1(=v{;>vS zZuTJ2<-=O?>;~|x?pJhpN8%XNPj?i2lYue@&N-URQTML?Kdt@7m)vYe;tcar@J8pbA0& zd8DMIgp->aNcBwrN&ij)&*fxgyH@O@laj9e@||Nr&e*_N0IGO;*mUFwz=bLxPz{u4 z{))zwn}E;@ZE)Ihznn3v&?;fnsgG`L6+)Nj-j~VGQ^?5u@#CM#BJ~0E7k}1lNd8Gm zijtDj4;c;H9&u0yMSxULS(5`erqQF15aj0@2Y;8EtOLJis%c5Rn}dX{Nx~c#p5F4JZa#gL`Ui zsT94(MLX zT%Qe?Wi3i@+DQYNqhus$W@~GDX=&;5QHdHuLqo&*#s&Zy-vc{vO`td~`gufEu;pVP1gOURQdp!~?^aW^7l$AyO2FLUBvbwrt zE-o(C)8&tXJ1KepZQ3aB*Q_0Z*t9h~G->QItk;d#k^rrwPc7cW*cfn8DWLTMBq+cK ztDr&yfP~po*LqQ+i5ora&N@5l7P%$=;D5ohAmU|BORmo^A%>w_%CYaehj`I8zUAr! zQ(X%4Bq_0B+P;Wk`H_pIqoaCZ#7PMFXl6-CMAs7%35bJI@6?{3XP$(jtt0DmE+Xe? zL%HgU`kh@DTqE}K5z7zboP3DpRNkd1dByS`Vj?J~D5QnS!rFShqL-YCp8ji%73?LD zuD!ejOskTBTJPxSSP!K3tA!(S`!iLyn>=lq5J*5* z*T>n}*{cEl`wlX<`IB}`35ATZt)W`s)1(d(MQ6Ela3h+68ioGVbi|7`2&}sT!2*r6 z0_>Px9f&zf$lEv$NN}5yig1Cep3YGHC{&;i!>yY*68RkgFf z-?epSz@74_e8w6HPzt}LqzwFSzN8C+r>iZ-n{6xS5IuGtSx0MLD|~ZL#XecpC+mS8 zC^EK&HpxSDKTTm}EMMX<(MUY^1D9!=VA|bb~?a<=6mGK$42<9Sfk=G63{qR6!jWp_w zj7dn~5q5f96NrrC^DV=BA61A)iFMcMbRO3?$3+fZf3E&%&dyT>6~T7OUKpM9URLR@ zlsx0jTex@6qX^%Xy0$s7jyt%cuINBlYr@-={6E5?*GYfH+WzgvLyLxl`cGp{qpx99 z;0-0DN_FOq1LdPCmpLl;X4}UXrpdV{aR{M-+0=nv#=WSGB(wD2v67Yb21pt}anH-i zK`Da)=;RrGSm5E|p{CPfZp+7Fi+8?Ow^)L^Mf08q?>u#B?ZKV^xgTW`!g)7)Rof>5 z%Cod|4l7)Rdq`Ez93#A(-P|G(?{)Pe2&*C&eOSmdDAFG1X@Tpxb$heA{KofBEd=zA z05o#4nS`weZVSNOYJBfd8U~3tIQPuLX_WNTR?^p3u(f5z4@1d-65O_Q8&cBJ(!N)z z1{yY|RWB$gpdEpj1wit#Y)Xee47SZz5Q9@=rmH9CD_n%l1jO#|7c;IBF4SW}q_u_q zn*}gs1F_~gj88$%iw*?NS`-{EUNT4opwF4q9Ulm%cM`DmPmRJma5OXGLfS!;cQ=UZ z19}DLIe2UDH~k0JftOf>&rTS%nqqq8(@h?7=jxB3C8P^pWHRh_t4(E%KfRNM1%Z*vpfKG&thF*7Z)zX<-uBvBsqGiLf$yan%@j)7QQ~y zBmMFvb9B?2w9-Xf^VzG=6^RxSITEv>eAMK^tb$qhR{uf|sZSw!d36b;hw{Z=YxCQd z_D~@5l4WyIb47*|d)xaiP757j85M+hhb=U$QQOBx?7LYbcn2%zhs%Ol^JB(UfYpFxEw#NXcF3nR`KZZBth-_JYpTiBqv+b=B4$Ju`|YfB33 zbMnvd$^D{Rn=UZYbwrSEx^>_oP`)wlWeAm&A~ixR60{B=NA*d~ zOFd5}sC;e8syxzN{?j&dYaYcbml_vAjv1|K_@~%y1`kq)u@Wu;EJow-*K)1)X|Oj9 z^-Pa?+g0B(6!D-WxrQhq3^!#@U<@rR7LLEY^-A}-u{ie>1j=T+#%mfH)7P7$oIn%9 z{oxL-S!vuyEo{f}nPV47Q|>LcK)^h~ht{KBqJN23goOr8Mi(Y?`yKd6;gBzNBaP=- zCO-3=y%AM6t)gqE9?inM<{jp2ts^&T*smNozV>3&Ykt3qBn~u6kbq9w#~Qh#f|h+x z?^jE+x9IWRL?J`X5kn~~TNnC*?NT`IO9UYw<9^ zSs+#1-OpW*;#ybSq}8}x)3L(q^Yr4GK6}7 zo#X)@41gnei_{~UihmCnJab!cAz));1F-G$rUiLXQPE$6l;lytfFPQ<)*A(V09Avo z6WFd<@-8)~JgLbt^oh(^cO}T|hUk72%!=3(Z2$s3pZM?gI$xTtPE8h)15Kb%8O6e~ z_OmE;YU=jEOyzfX>Blzha|iFXnCYCsc+G3V&H0P*fUXi77uQW<*Ze_STic!$vP_aX zC=0N0`_B-zfYHlu)q4b$UAZ_k8DF09_e|B9U-;K;JSp+yANbb!Zhlf;?^>L9&#pds zzNl;?mt}ud5c)Kt>=j3Wj7@;*B?juZN4Mm+v(s}tCf;enFt3zs+WYjlod&PN%q@$k z$~Ss@;9z0Z!>x|s!!44HrS(0xvL7e#Hp7ReyKP4F#9Q0u+3o}~y#$;VYEg{>BbVBXb01MYeKX2I*np{4n}dBwAkwN`=7Jnf-2)|mSt^yCWE0@33Bf7fKo$zjWOe#I3CvL$d%e@5HkO7;C^2rv&<7iHU@+hx2^^%mYh7XTrm?993^@ zia*`Fuj!TdOZM02T0XhX(rFH_D^wa6nM8d&Xdd4#BX6coz!tBuYPi{VjFki6FMgo zQv^UvzdXt2<>gHk@Q4L!@X75N)M;~&2x)a~t#4oe=nBNdb6q5UC$3?BRVhwK>MOG(w9g02M#pV3%z14xdI(l;tBqTRI0 zfHl#*{FYoPwqy-JLXei0GytidLMZM+%DfM(1de|qTQ4-m?UgoR*Ud!$b149nt*++u zc|a_k%{xJdjzD-IkA9bRCgzP9*zoen+pK~h&==b&7D5L_)rBXP5@^Y@yLbyBVY!y= zLOIEWqmz?zqW-VKs7*V1-GPCHq)W`i2;|J5fj!zDW6Iq0v9zhhp-GPI?0c{o>-HUWXtB3tcTbboD+Jja%iH-MpZENQ!Y;OC=JS#;* z$(oI>RQa|bE13p*1wGoHgVo!wYDPBCMc^Q-^}c$)dVAiW$~vtPTYP%I!n1vBl~25E zwGr6TwgI(s&U}3HgdaT}{{H?R<<|VFk=WzlJIS0OLvA)hJ$Ff3n;@K<%$A4DPPo@; zh}%&u50t(Pe-^9$cg#bkjFdle>4*wm$O!tueZKNAOIA!h)bb9qZK;=`H!=!HJ|#f= zUp`$xN>ubQpgRF+_qb2Nhn+Bb_rkMSjREMculLbrtS7YHZcy{8b7;}X%hZQQ6<-ni zdLs;&q2ay8pHFT)cP70^c~`oO%fp|urS!Cvl$QPy!?#M722NU-o2BfWUnp&7C(Ld2 z5+FMry_;v(pGM(^$9p^VAR4x*FR-%JlL9)7?6+M%JYL~_Bg)Y4-a^B}lz?>1Z6TyM zE+IEYBjUV`lb`Hl0A`b4Qev{y>J4x>%D1n{W_dVSL#JB35&lag{KU=Sl@CoRmz8$* za;LOAUtR3Sz2k20NfL}uS@qj_(r>vIOi~*9T4OL9QEnHe@~+Mv5O!WikPK60HPQ{t zvdyChm}%(!Rv-FD2*gHzqhp75TE&w@a!z1-75^JNFzt3%jfCzU#a)6g=sGVqepk+WC6AKG#f3_wJeAMD50gVIZ z>-@xp>l2YUfKfnXwbw+S9^p5i_A>~RLVGxEeo&ZYG^Mn)A~^QxeO?;rUQH4X^M0e# za1{>C`T^SmTKLMYFM_yx4|Wf`jESFi-TDZVN8zL}p|{8j7aVxB=ruMq?KF=J+*fhO z+Nde54qZ+DLViP!L3qKZ)rdGbzc~K7VQW3rmH*fsE*Jt87P;Bwk% zeSN*$cA;@OzY)+F+BX~xSPAQawedP{KktnsTT2HYetrKl=3kY;tM#1 z;}l21h*P^>z>2q5p*ak8u&V5~*sq`AjZy~f9HtN^bRdfoydEXvB;3RZge|7pMfpdI5d&qkZvSV?fnbsoXd2!6ApyqLP> zu;yj2a7+i=Slsz5FCpN@0Ua6`=>W!2fDUGTIL~L&hN%3|LQ8jVJ(V^IL;qKDlgCy* zc;e`qJ)P#9*s>X`XBESX!z=b5CQ3H+PFNiQ-KGEQ;~_O7l@Gc&L}t?$42w&Bdza8Nt< z8_GHGr6tPJ$kN~fOqD}uVW1if5+k3TMMsE*f4UDp4Ryka@XllF45`Uf_GIImXi_dWdwllCXCEQ-dkTE!hX)&eXynUg!U!VyJX}@P z>(hj`aG;5>cQKp+!h1U9jA}_6ET4D!!iuOYwWw$Bh?bJ_5ipwiOqv$=OOUT{xlNj0 z)Cabgfa14mMoV>U`sg*+WN(}h1$kMNP*l)BUJPjTg&8-9wF?blBd;1wF>F}z`SWLy z4cj;>CPeXXJ^u6{Ho!eNU28Lyoy6Y|@S(o@@mJ;M!yO;(zY6u2#Kh6Z zL+1BFxF&ZZBFWLwB6fC1;Zq@cu^<&$8=zNSnEIb!`U044lFuW7RY!e82PRwV`PbMY zbPgK;xdj-g+uq)e{`ObH?GhN9nv$@#-bc$?mGU3urDK({0sO4Iv*O=~J5*AA1rVkI zmbSrIY8m?mowNJIoTNjYW^+_zK#tHTQPcCeHkr4DhpVjpDLGFmbAz+!fEhh}7CpfF zkg6(We?>O_>pLHSGiU(wbs@^D|E)6UXE7CX!XEOA5NTGvUR*1EeF~sq?a2ODk9zJD zc~122boW!r_CFE=@J`6JozjrAK5$jufWKCMO4%caj(GT)MWG}64^arp>LZ5eXW2-Y zoN|cFRMCIM>Z^ZHzlWaM{CH)KHjJz*f-{0v{|IN9LZ_NCjC1_ItFWED{coQ9|6K9u z|4dtp{-4cHtndC^r|AFL{9kcg^nW-1om~KKJNkd-umA7nlfR=qzwhRMH-VLiH6-uR zF%3#6;*nlcPjI{TOTBPn#%karDVW!jFz{h^O+gV?1m>&3wo)pHna|3RCdd3@1mJso z(>XG>bZ@eQM3OyMP*^#+wkv%^X+s?9)_BEJwo!!c(>}?K+c1yk;jY{;<%*Wnj$0jT z{DI?-25!;%8XvDOrIWY3R_zrv)%qd9@<{eKzsRL!7}g)rZmJMl+UDo7@~40)yuOG@ zMy~Ap52i8}iar8nH9WFm=XFASN$$NV zJJ4EBL@~p!PRk(XEsID}K9TOJ15W4R6Z45lSzR$FbJoSrJUIT=Cw@|5r4qGx365Pm z*!PwTVqBb4JfEAuRQNL02n$O7x@hYr6YSJ;IyhITm64nAH>;|_fG_6lF)0eI3vb}r ziDv(61xz3kpiJDl21?XZiT}Q>JS?kk2;n zvb*IK6nEbT~zV_pd^Gkmm*XcE( z3s@0)USGFYUrX1zHW{HYOaaGb)4E?TZRwZAH z#|J#|Fs6(fi;}b`Q|$z9EUt;kHS*J{8S74=D>azmKyG#MI&$jN);Jr~xRD@Mp})1? zjT2*)08n-iMvyIW~d_thD!) z2eGuz6!lx;$b#jer8c@9oD;m(=-c@w6DL*VdzIk@Pl)QmbWj%aCt4u6BIm>hU0 zzo;rHjIAwYwopsL2Mv_zzUNwNyW}r6>!Kj@TuZ$rpu?JfCXo7+o91oWR8>tgdp3=| zkhPT~|GOQrvAg`y`s(xO^EZfhTOYz{Vb#C5;t-0Z3*l%G{1n0LpN{*Z;69c`QE#Vp zwhspl-PZIhWI0Ewv|Mp>^!?CoQzFu@FheSSo{Uqn$!8H|$$JbHl7#&;hJCp-@5e&I z8VkwrHq49^@h}F8`XX4z>_GI4W#qAi$@D|DfhGJrg_PNnvpkXxC~2jpmW8gLl~mjv z-eHAB+-50RcA(0k^KuMbs8|yv`ga<%)$8M@q|M)oI+D2xo%fYFZGQ=?3?)-^SubUV zM!A!R*246>29#A_UhCL2Xmsmp#*&?IG*Fv-$0rEdFEgx&Nz?DTRMgiA&-s?z&xE&W zsxM0$O8wsOEWV!)iFmINwf3k!**lNrGRoPFY-Kk)@#zimVbQu@jmq^-9X+>+O!LS9wW5WoNQTF%x&^-HyI%o+O_Te$E74vUH=5<$cTmo+^D z&746PUl}p9!kVQzDv=_1y#Pz~eaG2&2bocN*c-&JYi|ox@9zYaF)t;jtA47zUxSv; zMC;}5Cb5k=vA(hZyKc!TKUk+&d!}r2I287yj4QV$Ufqpr=*wwJy}(Xka`)bkv_8cQ zD=0on?W!_cwPltdE=g%iyNNOO;Wh6CZp2u!TIX{Ih6}OLsOG}{DmOsm>^FRT$PDdX~Ao^j_zT=8E zV)C=mF4-0+dl=Q6XWcGZRZ~{MDUTWUM;nSwi@8f=D_Omz%?V%><0QpB!3GeK^GFj*F(C9)+O?74lS01nym=y|dQYRGA zlcx1OPiODQeC+aYHe0iEs={`zJ(FS#JIIcr+J6WkHdW;duQkYcR8(u*c{f`d>}rW) zGnc)Q6G-kf)i@+JtXYll(wR#%!b%UmAUT3@+stN{=qGTv+m2Rp?~mPZ$?-SBDQ!A~ zF0|y6J*ItL73-JTOqYL{t9Ph!_4@Qi(B&#~`TEx&{m9``wdNeqI;<69ahk4~1vl@k zauLI7v!uib#>d)$r58t^8%|Z8PFVo6@Z*)Jb!OaVmSC#vG<$HJ%^0`!^m7B@Ap-c> zeK0DVs{d}^ZtM_>ekZH7Xj)=42EV#0b^A^igUPt@s%MX<++?AKQx8Afs;%&y$fX?-B?6qMX@U z&`6-PCXK{VqS=(J7j25d6BlmP#IyNDkn^k>Le)%70NVDz5_c<@1<$4dl}s-N8(_|?Z!xN*Sf*QKRS;qkHq zU-Qo8CGK#0AKG+ygiDz$4U?h#IJfm|@xh|+XMQjDwpt6_sq$M+fwJW7id4R48x4Eq z=k)qd^_nt0mZ!0U1tEi*qz9lcA_rIZer8{1QeU0uVF>VW@AG-}rR!Evw#ZI$7_DxB zNG-s_>v9~&)+r+m>GOXQm9qNpMCD|!ArxD1z(?v>JzMKvjgAIcYsyx(ccxUdCH5#^*gug*rT*p6`CT+BDhsz!)X{fc=UT8wRvciy~?!U~H z%G0*JJtc)i)WoSg+c~z98_0X_3qm3X`@D$E%qS`SVLL(dUY@)ep@+@8u#RWFoT=M1 z(`3bAAtn@~UmHkT#cNE#P^&&llzHbSt}1A1MZQ6OtvpgZ^TF2EwcNtVU`H*qQ-aX8 zxD0b9YBrSY*#Smcyt1r=z5N>!ag%OJ<;_$f6>&MSt>WVJI$jKV%oKJ=ts{8iPFpt( zOJ$Pt$*`&YIc)i+3X`76QMRxwrQ48-r_6oY$FM?Kh47|n_(qF3ufopO%!z4ZLzVIl z2cu3+37_4tCZc1kLvxAK2zZFHI!8My>YDN=FgR#PN7BW{q$~GKIR!39Rs;z-n5$D( zQu*ZL^J1>(9esJS7BC05fki2rPK1@wOy{MYLTVG(Y(q zxl%x~a(&#t6_X*uljpqsLqi)46Vv!aLQ zubSerd1*PLt?Im_zC)OEJlM38!=p68ibj-&Bc-Aur!lf+j+=d|i%IfQ;FHhcal6az zyCOoqwajj|5gvorRMkdx*i4@|m0;5XyRMZ}Hmk=4*t=FmbSzAn_0E_%C`pt_Y93PN zxh^+9u?stIK5$K_*#F$2X{z_~qzSB>{)M$CvbSqZI)>l!?dGQ3sK$ij{JvtkvQy%N z4S5ChFvpBim@(gtf3J7j7vIq}D3yd(TY8`X>$)^>te?;FoivRX)tr+|K}k_)qLgM( zg#5B0U+>q#vf1I7(lE`+nN)EPsl($AS08lo>+5NzDjr1gw4l%(4BW^$VV!riDEXQx zs&MulhU72dT)v}}T7Fo(oKLOI_h!qNy?_ri=FpwL$~{AR)sE&0x{G`7mvyStqx__L z=8T@f@e96^n+n^xtSk4FlEbp$qwLZ`|Den}0TRo6-qFC8a?W*4)^TWQL#!T+QLz)N z@L8_RH<-9nY2HK9`x(a%=X*dLjcaK4WtL{H#KgtY=l@7lx&D#Mo}JZU?Gi1xPCP@} z@Ln`>>q(q}$F6hspXUB&lF#LdiThlYlnhmXIO6qVxeyEPck1?N50c4eEaQ5`?)FfNQV z0Ro1)VeuPGM_tO{L@ias)qp+_du}2~-tfPkKD9drTpUl5wl9lD* z1MO_yiCuTW6@)22$fl|^fJpz?`!mT6BX`QddSq-F^cN;{HmLlqF%GJnALpxdJz~q< zJi#GZ*S1{9JV#M_pHsCChot{#dzS$;#~MtHm6k>-+?+5(0uwK0609||`lLK|94fGt zi6%u%y77)?XSbY3NtO<|n%A+9f*qbK*pyi5lDT3oHi>PCmV(I%Q&;xrk~00UQ=j}r z&L#Tj>0E75gI}gaTU7&Pu}6is23Aioh6L68bebYyX~voFaoE0}(uExVq43(Uji;WW zV=e=+Z?LGFQN{81(+|2li?qcTQ&M^fd~IOcVw1!AN-b=mU1unR#xV-ob&-C$ zW}Tl~pC68E>&9AEly8+fcE+AjdeXh+BxGV>*On$(m``p^G^U|0bpT?Bn@692a(SzS zA=dcueF3R;C=i%Gve=uWH*-C~7b1(hmVl&4?xZD@6BtR<<|CG&dq&?PyLm0RbecQ! z9Tu3em*h?(pR2=~ej$5)Z-HHwQ!~wSUFELv98XQm{OjkL(V6-82NtH42(HPE^qEUp z?*+%K|7HQw!#0xp*mXLh1NLtXYqtohYO<30nR2`~XwgJ59&=p`0pEm^TOk;?9wMG1 zFxYMk%UzH79udoAVl8|ODwke75bC)MkdJMlol(>36*>%cMuEg^vV`B4GR$hV=iZ3=IKCds?y$YQTW6Sn z@hGWRrJbnZ0os95tUfR(K>*F?vLe&&m-*#7onJKFfpeLbSmE@_NB@gL4rhYwIeEtL zp5Ua;kjr;`Rfjk01{=oU8Q0LgcW>k^Tr5soXIvrzJaj#XlA=h7#<~Wix+96D8D#QH z@_XcnO>nJq3@eP4)nW%)DM%YNwhKzL4ZtrZ)IP5{R~XEh?vmerut((KsD2**ERk6h zG&`2163(T3e4+QI49g zZVY~4JQx~QY{V<6wwTOfE=JxeNjuh_{i+CK>e_o(r>t$6nN>(`Wy-b@IFoSxX4YvS ze^yiSM4g=MS#p|J4r@YTmX~?)+6bH3ag~J!NkJi_5jTObPU)~g6k(VRDcIVf9Fps| z+FxQlqtzZWuG_i9N_O)|+e*5C(9EfImuZ6%N7qT~5tqy4Iu5=FQw_fYKC;>x$x%C$st||sn48}5=yfrnd zUV<7T@8!fznCjm-80IuH`c792o?oOW?1%%7p8*@1;BXk*@TY@uj9QVAyEp2j)$5c# zRh*Q~n=6g}F~_C0&x?%U2LMyQBed9?2Ab(Oq>^}P+L#tmBXGK{kWZS^&#&>Ej@f8C zv8k5QE-|p5Vz4ZV7Zy)S~ec<&T@UFFk^#~ibdbCd8_6!~fFbgY)} zhqjTu)tvIi@K7NcJIVgusu@Zu^aU?15l#*2y)t7gxo>;5>r>Wz+1R~F#@^cO3d5cG zl-S`-z*^1SUD8BUwn(i-akcr7qK-9R_z5H}F#eCh-X`!oxG!w%CV$tWH!d7D^*oq< z>k!ynCV{f^{RI>--vRKis^{W09ch9Qv$p69VVe)nNs4ux3Z<*^Oo6q5PC9`o14MOv(=l&nTFHayxse#HG1P9TmejHVMQAe`!-MX z5gO+3e-Uf%dtaNhW_k%TDTekg|=)=6-}6#pqZhgC|pqi zMFD}<;nNci^w^o9>(q1JrK4-Fmy*`+=$`iEd~++LF1BCw*Ti1m@?mC9oI19U6+sTi=)J(F>ED z;LYyB5*~-&d0%QAes`!`L1Q7 zl#(>VS-$CkM#0bTij?l@$jh{N)nEN-O$BB?SJM?DXVM=@zM5A=EvdYH^GG)kd_y^uv*m?k_|#Sf{+|am*Lrbe+_a*e zt?=+#?jC*`T5J#anI4qNW=VvjNa6v)M9;g8jsla#QCq=Lf?H%~4VrStxSt#?yc@6FLRnGCZPyxEE$V!3NmWp6X%k&h($T+tQbum z{KX|4icQ=U+T6S4Kcph3b%}Y;$r-g*47qh%pQRkQd2lk(yKPSE8>m8WVO9N%lBt45 zpKH*{Fe$cG-F_xqoFeusdf--MA->MVsoFZBi93janPG0TXEpuJX3;`Sk(+iJj;w>B z;SYADeGUubNR((l=V-ZUr$IEmYd-f&k%8UGCr7aaPmz#HWt-gKUod&`oW>TBvZV#C zDVB8;7^I{wFdbbC<;uR};!5lc4@cCFojyN}kK6EKNEr%q4LeyViP?OlviL@ryLaWvS3RB>* zHp)sEYPvGCdpKK=&IXmOtiscN7krHDk$I)DiGwF9HZqWI(UTtAkz=S~ec1f|tX}ea z+bW-POu#`l$1rYJnPps-fr4Dh9P&?wq0e28T3_NWDYxs3w->?^Iy@>o7n?Vj)nc=8 z?e#rqMgu=;#Y{P>m)SnA=yCk@M{17uu-dW0=!B`*kheH+fI1d!kkFwy^sqj6d${*{ zhUm1SBrT$mxwaciAy7-tzBEvQH61<~hCQ8Y`56mbJ>=f^`7$dhx;~q%vP1e8qu+I| zln=acF+YTYseFBTUlBPk9P~Kw_01pWX)aOo5{u$)9mO0p*(Et}=@@NoIEct$Zv080 zFxm)j!0tH6{DSWW6bb+9@NEwM)In(E>0aXXX8vW%4b^Y+$c z8&l^|!01mnZr{3Xn*^de=Wg_mFg6p7hqE&r(&?UqVxvud&iQ)Yu0lDFLsbO!t{VT6 z)s39~szUPMAZn9x3scvdLLN(@1dM1_X4s?YVY{TD;_yC6N-D+|NioZ4hn(6+#REuM z-#uG;*QyDt>?2l>Qtvsfw0$L9grzRdzYKdertjTq_j@h54)#0{#Lqo6arSxbi_7w7 zN?kY)8@*P|5>ENxl5U`r8p|d-=UI>Oea`mRf{xmEqx+Q4Gx@0Jb(bfF$FZbZPYHGn zyo(!-I5zC+<{M#S;?Fes_>V8P5Q9YLw`vs|w~B)snlKkR*L?flM9n#U z;$(YuU038|bf3P}*%#kYF~ z-urN-xBX?vA3eCPs2`eVw#L|PitWhKdPWfE_=y~v|F|zGFb(y(syV~YOl7wBY*3)2 zFmdvTQp&WNS9^etEOye&9|K2?REO#f$tqfFE=&!aD(li8_A$#pcwgxd5p_xDHmvE6 zw();Vc#W4Dj1uZVO2VUvJ3FRhJM5M|R!7-P;70X*D`=KIzF&^|)#a@Pg|_bxS2Uxi zCheApS}9Cxgv69&9`n5X%nU56e5aemh2ixcQ~u_gEOhpSzlSNlbJuP$f7y-3O&VS| z7Yduj|9N(HUS@r4b;u_%{9~;Udl}sSNBSB~nI{jIJZiPB*Hq1XhiXnFDXWJY1y5wP zvxHx5?=rogsUuUwWoP+#a(>cRZC_vKPRSb_snDJ|G{5o0LG)<~kK)Nmy;kg@c5~l| zEpvGa1;)_6VmG|g$9adEt(l%ForE&e2#i-RQ~N)2-u4pHr^UosZVw$W3#zejs_rcB zWp6uhw%px0#1%vlilPF@B3=h2==j{uKKdKDeJaC8?bLoW#55 zr6)zODttaDO+9U%gJg4Xa?X})aVGHtTqM@OU`I@&rTPB-4ahLaDDKuEY zfmB%b;hlvYrOL?#Af8^C<~%vqKVPA)y+$LYBIebwt_MV%Eb`|s_}DdM^**1RkS_bl zBM>|nT-Whfry?ma9O1|_ba+P|K%q7TZ|6xYyz@q{a-67Ym?>L@KK3XQZeFd?$@b8| zgHtKXpyatvFE!Ne8&hd;}(%PN3dAbo@Bw>(=B^s}4wF+w- z71CUsu-Al)zX`VmIsYXe1jxy$>Q(AX#ug<8$62aoE%fVjcGQtXSgwVG$+d5IuLw+k zf8uCK7Ke3sBBR|KtF#t&PD01X7kgfy{36Xjv#z3HvfS(dOMjTGuMbmjUIe3}zN&Ms z0U>7BX)TTe2~Df3v|FBSVEc_iR-|NMyu@#P0+D@}a?$ zZdwhD5$cdHU-T*q?2YXZ?e0@skH9f|+t8OZJHDJJgxj}Tk{g%ieqq~rv}|M&kP z*87ia8}!-!hj!5ZA4&w$|MmBP|DDbg{O{kN{x8Ac-9H%xCa;6PO|i^dc0(i}!#T`vd_&zf9F`iI@O?dn^}yELXN?cvu!$ z>hI^H_XT#A83<|-<{?(F9|VxUAQ(arS}l^IX}*t#Bg<)`5%CQiuXI3F53J^5t5#O- z>fPDHV(E<5w?|n%&0>nkP1oAK1+$wDyW^k1yi6uVC}!$ktE6y$&(?D!&rBu!0%*Rm zSk1=+H99;tv(CvSuZ|-9F78xkn@2CK!L;GcH1F!*ksc!NWM21+`SYehV`e~cTZ!U- zctb@M%H_B_Qf45=<*@AoWN$G42`*C91LI)L#G~XR4qXJFl+x71-=J31m3DC{evg@M zd3)i}U`0^Y6IEf_2K#Wk;Cy#6XT3jP_Z=|kjNGjh6)~xm3zvaV0T>FStbv0AKfLab z&bJK4#Jv~X*Ga|fKhwE)A?FkA?2XI zj|f;!XC`#OdcM*1r4Qp;_r_io0hc4}@<0M}C;?wQ6bLXF9(Myq1_ow*66=ox)#4Y=a(raLfkCQXuy+4BO!=0-d=RaB# zIKD

P24ZQ`U=R{_MuXo7o?}#{(%8crT);MAn&F%h%uw!E^TqNwGedn1=tWk@xqE ziGVnRe&!Y-+EGwpe6r{Vznz>+xZOmhlHcBU)Z8IgKuSX5r&eLyi;VI2$G{P#2=jWp zcWzZ@R>PPr@0?+ zU=FKh$xA~y`acFBtOlk-Rdow|&nzcG5uUw{&AUzluO4!D!fD;zfUe(3Ft>Oxt*_q%M!{QJwExf(Wvg{UU;y&h1d$ltT{YyDhvP3 zL(5sPka{AVyYbdoEs%iM0QjJ`EA8+@Y5dlYuHb$A9vjQoY2k~&V{Py6M?ptNr_*U3 z=>1M!=X8JvTtiP!PjC;Rdw7m?QpTvM;b0h|F&HWe3j^K^3%EBRJb=sV#&UakBvvqX zGBI0qwm+6DOfR(HcAmGh)0-WJeSLqq^l2pBw@~$;ZL@Wl0u2Bl2(S*u880aL_!bE{ zm~#hOq{$Rg7uib)N;$Z>$1+4v)N8CFlnY3~6-&fWji$ec+np+ry}vm>xwsI`{w85y zn`^%{RAw>5TZNK&KOs z+kePqiq7QRobP2$m>HQ<`Gbej1tz|R4;LB^9?iGcI`XzsGwVv|pS@hMhR7mysx=(EUoG@!_YC1y7k9f_V1C&q7V`2n>WEimDKSSI{fSoOu zugEjez)s(I#{{#`u(rJXku3J~*1E;$&VE>~&d#Va1WvbFS|T>z)LgXXY83@y3}?ONQR?P+d>&}GQJ%wU=s)08E1GmB zeky&MDbMyaoA~*PkB={J!feJ)G7lK$3mhDA2L~32bP~HsZ@Cc&!_@<{dpAU0kma4+ zwAeTQvYb$*uiBnKZOiV@`Uk5Gk903j)5!t6H>bQkc;>oAnz*|Y4VU&2qT({uGHy+* zzY+&0Dff=B`VZ0)^d>E;n-?uaQ7TKNIZ0>zcJejb%`j~4Zyc*F=fFt(+3rOokza9{&!i zQ~Ng5dY}X0BC@I62!>)x~DO-NDR8MHO%3Mr90OIB4#bPo2v3f+`VS9ww?R>WjxR?CHLz$}_ zX`abKwFIq2Su9#0?)1CX*1+v-oA~u#J;(qGWf8aGybOx7-H9+A@B0|DYJttClQz@E z1RUIPL-G}>g}!H-(&qLnN$kX|tg`gdzc8ejh0JIs5ym-PU0jy8woK9z*(}wK50z*> zWn^ZaoSs6%(X8WcsaHSN?nH^sX6)(q*S8i+^)dG^URd02U<1ZG$TW08q%D8(_q>MO zA@(8GnpBE+P_zO?3RCd9!8~OSN-2tlW1%PC{tSyiIUkVrj5N7B1L@xqm>KP?vG+ylAFF<{ zM*mctyk(Qlnd99_l$v~M<*dBEY;$`#|FE^Jd+@xst84bdw@ibRl7w+Z^P*35gYHLL z7^OW}QqFLUbv(I(fyfR!zXL(0#b~oEfX8C`#$5%rhVs$@Cl{qK%C7NdYHOEh;bmE5e{)#EZy5S?wc}7aq*X7ZpmbJC@85wG-z-Z9A%n<`t3<($?l28!pkHvc~XAB5FuUqtF zkp|E`aXn3Ob}`x9c1siBA8l_M#n_3P_&+ zjLGuLJ-vE)>@`igwf-bEbuw{AB8G5?Cw_2JAn}|2!TDw1D|7LtsMqtwoC}>PgKmHg zW{#ett*u=iH{S)4%>Fs+7HJ_Oq6g?zlGzvf@~$)}v~4iWi!ig>98?j^+_N9ficd_lka;{V}R_ z8pKmQdW(0JX4!`;#qF@&`h{2shsT8hOpwL$l7;1_c_khn+h`}Ue7?k@aaoV$C*@2? zC~0i3DNtG4*ysWQI=lC;o@D@qyB_8;cnaY4!TYzhw)m7-5GiKlDNY(UC0wQ&+u4;b z&Z$>XDdx-b_)h5h#N%+dPrA`t63)}cb8&Et0Oz3Xy75Xh5}(o??PG~H?@%&lhe?4l zqs!H?SUGC3PJ?KFcf<$j4=b5beEPq$K9uYII}#-5nO%z!mf*30ltmVDg@yz}Ls}$E zi)DUb=vMC-K02_oDb3-E@o)vlW)-mHUGtFg<;zxjytO**)s3Kl4=ZHrz2q|Q^1Dew zHyuPgeM>6Ot7AQFmlgQ#NCHV!RUDA8xMew~f|(x(NXMfra21P`Bfc;iK#ct%w62m)V)M*$@-azu4Js`KlHrE~IR|rcF@btP$hvDm&%$wd;(;Kj{aW`k zPNsiqN{#S+zsIH63()!RzNl!s!u!az_WdRluaM8Tx}4wJP4sm8qRt`W%j^DUyjM;} z7QzjA97+L|7(S0jyo1ITYr^h$z7S9X1~S>`3k}Xa6BAWZM?BtlCy2m7g24jONWwux zBJVqK2mR==Yx^zJ(NbavP+w~u8&ilZ{O1MsgXDbB`L29abUa`A=q~q{V~QV%W|js0 zrc$z6@=i>XF}OIWaI%V)MY-aZ4;%#v3FlDm6nr0+H!+-NwYcN|;R5UlhWYsB$+-Y^*cdJddspW+D+Itu^% zk{nb5c^V~z<{cfM9O90PD3DtY7Nw`XANzxjZ7{4Bv$XGT@VUGi731E=u~~9>olz8k zVrV>1&d%`P6oe6fI4q57sSkMka13}?cXFs%YC8^-E5=Mf+h9*MD~=wUA_T9FH+(2@ zqd#9GcZfI5nk|VF;mx&0XRa@lgH19eay zP>Cu3^&lsv0dhV-3!2%W8@1I9eFxh|bkh2V+|1;Sie%jHJnbfrri+`wBw<3HUqemq zGY#JS5WI*W;Iv1ZJ>6$(tYv}z{PFQI#e|W=YUfjs3ig2egrU&+0o!zYE|iu!bWx-M zj&d2j`*12R$fTh0808+~nr?_moEwMdjv_yI&q=gPO#Y1+O?eCwBKBvn&oWyH9jNoD5f#}yqO8(c+V)1 zjl(vI*K(;s1);XY>6L6iF7w>|&%0i=cGW7g377lxDd@p_hQ~q?Ba{P@`_l#IC0h`I z_o}y#WLv!MM|K=){9PSbiqxxM-#knfSwzK#7lhq0jtcf5M7jyT9fB+z2P4a{E4S}l&D^DnV5{L1+g(ENyUeYN+G~W z#Om%YFAHor9c<4Rr|>3ghenym8on!-EZzXAl2i&;Oujh3NS6#(xCB~vtlinZwv z7dJPv@j$#gU#@1I-Nn+FyaEbqxUr!j!(-E>=|s-6dsw(I2Q?KM4Fm!3LDG@KxcUD}iCtA~CY*vpjtK z=_)T?^|{&{89F-CKg`|v5kSAwf<>PRuPlDh*;89z9-{|Tm{*@)?$0-{&#C4B0WA|S zWXSV)cbe@6&Ni#L9RM!)9(SozDFd`kYwrJ`45Q&Wh&{V#INfBl-5nQ9IwI<5cd`8a zu2`!9p%s)`YQS#uo2LE=VDSV1C~MF`@-D(dtKLBmXzT(X;~(ZjRJwE#|906@BZOs{ z$L6;(Y^VkH41U%9S)tk(p)hM?Bs_8k#Hd8|d-o1(xb zaJcoKECmJq*$^XQER`kdtE;s+-&N9f+aXP4w;l?5_FBSn=3;vk&IjIpYt~=u{e80u z`r9DXHeH619O>6kNSdEL#02hyb z<-FT@YuyCzqns<{_!+z$k5iRzq@OAPycoED44fk|48X`&aty~>LakcxU-tpqEUM`Zsi zuY{Xnjnwv}FRcKiAq8yp8my=ofn9?2XM%ffgZ7KFR+Kb7$Wo8c$kS&~;8&?$I67K& zu}uu}mfgn3{IDDc8e`_5a8xPh9fqgN@*X^C#hSerOI{VuU&b32!hA)J&yn&Lj?vh6o0BY_qk_$r_kz&dAc?&301`{AXTyX)7)M2SB|8bI7h!+Wt_1d#qdeEvM6 ztx%-S>UMcJxILN)`t@Jl0+c)i7D#NYgOn9$KrU}=h(rV6!S4)$m$zDHUv0=$=;{IBzRt3`enKUzgkTh z<{k6m*T`i`*H4FmmuH!Kt4zUza;F?rC=y6}4i zGZf;|(S6f&b1|r#q z_&_hJ$*mWEAF7nC*MZR9-VR05fi~hr4-4M2XPzE;TDfRbC0c91^O1dj8Y9sK@+8;G z1!voV(ae(t*oT=46Hd1?3h40nYFAh^wF;VwiV6snQ3VABo@O)Uq##Otdz%ez8xac^ zw->7E1&UsHANL46mx&_D{gbu%KD*{U5EhOaPtjy~P699!p>G;g9_H4?AV4ewL>yAc z+f|HcHs`m!G~e{{Z7>bWABuT}`X}+IE|Ym}=+r8kM*f19C^=>kIU`BERH1&ox~*Tn z`s$a>pSw<3%`abi-cG-K(bm=x%xGMP2rc6QmXCl=IMDKNUV`yj>KOtYx6}R`8k%sB zsD1?**5XMr2wkV=Q#xx$NAzOMAekZk)@!(WP_tyb*yswjUQ}`sFfY3Je;&(O+1?J} z<4q}jypM{ZR<;4{gxfuk@%IBz!nU8WF!{M)yJo(W z_FM22_Y77ZNp`yV3hXY51#If!T-?q}vh~|@vxsgkPOc2P^;^jZ1UNE(82eZmN4xLE zQx!)e#9m?HhDQ(g?-uKgyrnWnM+#Kv{rvrRmRk6^Qi_F(5yQIL+x!tZz3w=mdW#;{ zf3B{tM}eifqxXR9L-+%W>Bt+es})2jp5Ok>sNZxtPp)|Qe(zWhYapRRc5e!98GxOC zHu|9%3ue~;yblhS<2OL05sJ2O=odZ3N53cYb~evll=0GDoU+?ArStou9$;kKt{p$y>2VL!iK{I3y%{ z42FC&v&q6?K@t%NtupyRedc4^8Z3}(nGbZPC()vk`&+xq;9OwM4^~PZ@9F6RIith; z;nY*m#8QgI-5RUn2QL!G8Ws%901(XM5F$NST}IA?ArzbH{+iXSGfyrPhtuwzy^ zw@^(cTWlbT2QJ`Ce7tzBOiKBAs78S@EuD7bum11kr)k&M4QCAia%9etHdvUgg48xN zROojh-&`Ki2hs%ujF!I?ZFBQp40!rdwM-u#qUHNID?yS8Ia0y3$#rmciso!KEifKL z(ke~QV-u*9k>S8nI#m^EGi1?kl(k=s9#^b>ym6IKtAJ4@_tCj z2eaZaS1$Mj1mGw~RqA2@bDcrXOyIjeQy`N~4F?L(Y|qgY;lH6AYiGNv;-Gva;y`J< zo3{@KEd_CY*=*&t^;LPpwODoge7`Qkc0(pTwuI7n`;yCMmuse^YDQ$kjUYhP{ zisZ9}rMEtU_12cxClT`V1L5)g!EDv%h={JPE)ivDXB6r!rkmW^{SnbO!MWuyXo{*V zDGESt@4}Lh93!?z8F~G&VB)UUja8{Ykur98!nDfNv7Y2vwpvI2jA^F@N*<^CmJ(** zwn5Kyqvh*4@7suRnzbJj#acpk2zeKWaYb;s?vdSA0hbummo^f9p)1UEK3#u->MWn2WfhQ}*^s0s5^QE4E4AmDP) z1(_V`Yc?smpn&HjQJ5laVEYqA=)H4<=y&tsz0i#3xVRqxI-#eh2cUcY8N$osV_nem zW%=}57`Ym!(tIisJk|_*JCd_7dK?bZk%QB0ZQ0}Fl{@_cMtD%dagh(D(MJyxve~?8 zv6$_Yq;Kj3^58~BNGC|aa?)yaIP~=N7l#Y|AaDR+%P6f&P-7W>`I$zk6x{FAlT_ov zK~LtSJF`+YnBs45XZS7ReA1YOKBe)Y8xcxX4+V!Z10aw}v05g^&dDch%*>VQjZZEt zY^~QCf`-$f;aIih-An8q5Xhzh`&%JbCfob*A)JsmQM<|Q)y+pXqYofE1FZp!#XuKf zkjz99a66USZ^<|v%o??{Fp!&=m_XqZknrv-HgSVKY(QXOnb*A=omPGHLEWHwWov~p z?S+W24M?viOLWrAaai#pIJmg_Bq)S!ZEYbm_xlwV?=c0o);nwVCd*78JlY>F`OkKC zXm0=Xx6j2|q@~PIeJGi-KUo!-Us%Z2K_n)uf?_;OO3aB9X`uLqJ}_|ktdmN}8(Xh-#M%VJ6J#%MBjb3fs- zb7#zAzB)q3`GACxviIQ;lmkp=;}oJ%gwmM};n^2?b+&5=AWwP2!;=j9I`RO$g?5?L zt1T!4-wNY`Fz0;&Iuy^bu$-n+2TwglSC$1DA_;bgFohq}-`w5@S7^Hi8l`y%f`al2 z;Qjl2vdqatjOA!G zxbscvmtm^ort#VbO-d(17qZnmt^vEythH%twwx$b`>xj!bOOXK6##ChCMOsjBtSXn zaGLl5vl;X|7QJpQZ)+;dbe|tnjbJgrPFZHhFDVpvV~G=8d||*!r?WxBA;Omei7%-c zZyqb2q8Te1)hn|YWJgBtIm>ECFGD7ra@Gmf1Su%)G2HUdw+M&GVDxEoE?W}Yo#Nnk zcK=()6?@P_1TR|F#f8KDV!tgpbBqFHGyu630~z;*DUC2L1~zsNbxGql+JMPoh2Ubq zIygVglv@LxBD32p`F!AMG#g#M@&Y?^-;zNS6Zs*Z55Ole@FZ^#5LUG_y9v_H$8OHU z@wlR)Slq!ZE5H$4Pr9&YO7%KCw<>^XhT}2^ZKb+L0%z7A+W)plIc(H)KmmuAW{gZq zcj0pByT{(-eaWkFGq5LWD4x;4(C8_#UZq9As1(59kD6~IL5*T}wk>!2=&ozo{8|?! zJFaXpelr+34_?tFq`&5=xrsCYT8LV1LaAaToOD{LVvxmB&?1yI-mS$fGS@B{(ToLj z3Rmw>w+(C5{JET|P;+JjA!29b2b@2`vsEDR*)}#-F+iXQ1WG{N^%fYGP%xU2dm-0z zB%Y^th#atB!&0gHrPXY;CAF9#ai7nxU*fQEaCL6yRFI} zl5%2Uq0VCm1M%X(;F>(m=4PA{A0J<}-hmQGGG!DpK$GtjhQtW~8z%63^8x&+{IMjA zHu?ggcs9p_XuT{_?uKD^7}ochKuxh$!fp5K>`#*209cSKpq-S7YMp)Z0c^h7`^X5b z*SB=MjrNMQ-sR>jzQ_W=&>%=?K#?P$qG(Wr<tXdO z)p8F`P^Q%GnHOs}^(B_HY$nA}b9(M#Lcsi{2?&_uMH(u~n_5t%DbPX9q(BA@rk9}c z^3{9uPqt(NrzIW$`^+LU3F?x)8MEB?m zU|<%~`maRZr^N=%T+q79Ao%-k%?oY%I^1$1J6n4%d>;IH~{3v zO{4q(8wafBYufz&DY`Wt=_%ekptM=SUCw%9U-+zk2r zE3aM*D#gMOAn%+S+nwfp-<8%A`2y4?amB{g^9QS|?EnpdX8y9g=ZeiT-F2WSCI(C} z;O0)Y(!9&PAH9GMUqVSLU5XExs<{BSf#u@;n{%Qhiz7W)utZU{#wrCh;;k?xG9|Cu znJy@hSxl$DETQ4I_RiEP(n;zI!ouC25#J2+gZR11|9Fj_nwq+O?gmA?Ryu+|M@Evh zIq~l`p%U>Wm$W?8j}!JcKirr%-(P6ZY1Xy^P@PhznTOqa@g1;C=glFb-<6+8y>K(o z2r}Hah9DMm)e+>OD-QsN4;aN*>5h2Kb2)E6<953DL<%xH*PabRfEez2$)#2iZ8R{$ z_g_tIOJ|3^>c0pok)QF;S68?a+T2tY0!7j>Ix^^Lm!G9L zn|^HZst)4}1NEH+*+btelFW>d(9bK|z26OSP%pNWz?%oR!fdxLK3n<8ermV{xb!$W ztyPd8LPI3Lzrm8i4#0=vaQ$Ogo$A9}2Rm4{SfcsN+(c-iG%`@5mrbeqzEEOiY3%M9 zLtiyLG_j*cvDM@v79LdtKKmt^lt8w8*{544u4%dl$%3p-VQ2}>k51UQbxKuRw=$OX zG$M(mE%(Dq5WVW$Hjp2a`J_R&7lMk*6ky$Qf8pCAOd~ToIw}><;M?SWxq0IP01FQA zR!pmA<;!@4{Qa&RPmKZnuMHed5STp5664c3oo$lHiC-RiFs zINwPL#-_&;nQ2fsmcOd?r`=ApFsI#;4Wl)zHF1ryYNcC#%Fn-;#JVRp_jLaf=mRq- zVg8nvFLyM{qCnQVx#-HE@VGf_7;owEq$kUKA>_t&6ONh@MPxGdaF5UBhN%#HS)f_R z1lH_yjE%hn#Rl|N$}|B(CjRD6e`gABKkeK{k|0@agn+O5{kjZRvNS2nJFLg zGg{U?Ci8=B@N!MHByKwZ3X&Hvif9K~qELv;`|(!imLq#e)qT-(P+661PQ6yH^2pY0(8=D}!D4$tAu71aH;WoL^t zvU0O@2N;7)oBfK^BPM%$ADrbupC!6yQyNc9EV(}>Gdbz?A;|O7O=PheAGiuOhsoD> za`O|`R=Z!gz+Pd9S07A>`C7Kh>!ObQe1bSSaKKn``xWeL0WtaLl?wq9aj5dU#95&x{MSZcr1_!1XolrmsLX;VQWFtrIKzku|H#Xn2j0v-U_81Vvy>oto#wn z`1|MZN)~zR1;Mn$&|cF3k06p@nyP{=I!#D=au~|1zPRDbJ3}_|NiNP6xeBrlfaeTv z4R4*gp1R!R=TaQ)hQ63a<3Sup5G-9px1caGdSqmnzqn1ZZvFro;I&@&^%l{B(F}n6 zCzvh&75MdT8qaq~=0vD3b7bI`K{O|&r7aR3+JcgR0AUxkwKHEKf!9PPVOyHNV5ph_ z+AZi0q6BPcnDhxVSI}L9f@q+D1GlVEC`}osTlBpcZ9Lc1>;rSh2V?tRLkF{?S$aaZ zYx3wZff=A-Fq)h5?OU|4n*=gK6JbTK!;(#6RsPXZbs5K=i;E#jKDuDh=*I?S+U^Lv zu0&EvRR(*q6pfnh(b2EMg$4^3HI|Z@K4}!w&xN`MVXlzl^=>@@)7k-)2(rAY$i$(t z-^rwLEcQI_H@4EY#2qRzC9vN5`RB`5QL$Ui>jJMpYV`nm4Q+yRp3U^qiJhSN6VrP> zQf6=BzJv@G>Xhpt1HP=`pNor4fR&MetQ~l^F9B6>aa^q$0wf>NO#{vsTkJ4pEc0PP zAl0)ELxrzclccf$UT-G|yOWn*D4-)B4z%Kg?0RJXBQZf985&_;5W0vuTocMG4FnqP91O#!#>@OXRQ1*i5j6Ujd9G%(26A` z2H}Uj!O$GS( zL{x;K_zv^HwSppAEn`!81LVF6ef;>m z2Y6CI&5EYiNi}b6fuVnc!x34vm0J(J;r0V}5$;MWX$1{LOk6i!;|g3%cmvTO-uN6+ z@}=Tum@}#a#^z!|)h8n7`T5{FXP-GITnJyK2@85ud>u8u-vc$$wO!t` zaS;>Rh2S#iLJ$GB0f6-yFK=E?mAss;AkURajrJ?g*J^P3jQSpwd2|5Y?atQZ#G+G^ z-<%Svv)h1xWxg>H@*zxuZ$&;{A@+f`7lZw#6yM{WeJqWdARwsg=vkKIK%~03Xry=x zt8!FI(Vl%LGF!$u4m&t1t5%l-tINMhjwy6aN=+CRe6_Q&X_d>ZKr_?sKBT6k`dnjW zyL;3ElXtWcI6KOy5wC;^AEU0deYul2ZkC*!@@ce^axjsFcw>_Gf{;fXq;_&WQQyI; zsuz!AdNptJ_c2;f0c2Z$?I;jSdb{9z{q&@g2?gV3 zph03LCN_>I{Ub;rMnWVo^wrKx(Q6n2ZfJx(3Pvm2s9EB0UxA$~bMjJriDQD|MM#>5 z+5JFdEWP}XT!gMH0)b^=dc#dq^5MbayS^-sN0PtGB3)bo2R7HrXe=`$p0cjsl z3FebdJO&N9s7^NcjDq-BWgAQTwAOs&Tx7`6e2DHSW^pbHi)?DAu)g#9kHZxcf z)axs})G$O4Z@8hMp~j1H$LA51V0)Xfeep4r7esx|&s*J&DJVP~ z;8}%LS)f(8cc1t9^JJ>W*l$A9kOXcg%_=+-6%{I#A_-Z3ek{;sOa275t4*PaMFdHz z_S_W0^L#?di^Y(SJS}5Wkd=^F1*C_#XObcMm7q7sceM-$(N1BN^fM*=#4>qw$jrpV z5c5St3*etHIBfa>o)3Lo6$f}d$;0LZ&=U*eus{9vsO1qfO|FB%KDmgWN(J9wX?nP< zviM719zW4M`a{T7$eKqq{oqCU?#ZRugt+7f*L3&ypkYG!`7_Ql1U0!junT9O+X2a^ zdN2{pHDFcXf+O8Tz7$?r$upt7wbPFlfe`m+!`8_$+twdJ3Xe5(Wm(dPvVI_e_wZ%+3wvGq!>-gtg4*2df7aK+bmxqmv?$wwQgajes zPtw8hBqg~@;jnGz7G?|~&t&yPYMK0C4|;IDWt2o!#yo+tL3otWiPCf&_6 zqrAL=T){-8#qag^$hbnH2>BmAY%3_7f-{}bk-%z& zZ<)v@QY8PQXI9uF&vNb$OgDtu=SrV$xX1TH^-`{M5*hDXWI0seFWN!rZ0q1)_^{d~ z|K?Jc0f*zo%Z_RtFFnAZ3z+3X+y$^0P|vh(2>pxBEU#T&58)r)My+m782P86K$zU1Dilfmf4H< znskoUQ=@2KigssG4d2BG2<-@o)Ylu!9KHWDhZn}LVC6_xHDF9 zKitvb5BPG~hRNSA4&e(s>UgLk@6Y2rdBLER5}Q20kwV+Y0lyxM!}NiyVi?*KE;s5A ziHtNxEQQO13GbYJP1zdq-aqeP#kU#BdX*h84hDV+9BhXS^*)u3T{IwKZJB8|^-9{_ zWW7s5MF4OnKsD4+%Xc9iC3J{)s>m2~y?-%A1PoNaF_Ju0`Fr z5SkVVsR;h4U6@56REhedndhQcr6lL=99kVf+S_12W%R)5otjo{ZE}?6Z8vGL`RH@$ zGunz;Xt0457}=_>i&P3Kc=al?E+CYQ!)zRmj~YPnPBe3L(fu&#sL|j2`j0%trCgaj zDTh4**gg!9>Ye#IW}s27`ZQVq%tL zZ^uf#)YK9VXe`y$Jz20R=rq%f*9j@8LMSNq_D^ot@MV_`@utr`c!uC=hwFzuhdk|z zZ{1o-`t3(o2?=)n8**eE-$0O__-WEjX_P;uUIc9g=n_6?tIUw;)qSv96IYGXkqkg& zge$G1)Qh?|>{c8&Y^Dzumr_z6GB=dyRepR-S1gdzvM|U{j^hyjN!6@V9)R9_<#*H8 z)~NE730Wfhcan(GPelqPD#Z=Cj~yGUpdC!3Q4v%-n8ay+h`-Edz)E<9e(0L>YDIR~ ze*gTA*Xzy&Yz=!O)EP*D2xTvhq`%*G;EK%3{=lG)+TgUWdzU9?n9O&em7`p6ecXW# z5Wef4sUwg9>H&(=JhK&kn%B9~&O;5Y<}YUy>~hOf<3+DWPcr^vfx42dc}{zmgD&jR zT?f-Db%21Gj@L3qbhMj}gUTO|J;%!*0VEk~Iz@P(D{*ym?JDb%Hauj!kjTozZ%>vx zHdY64cGXJLuO0${c@{9)f+whlGBIibY+vBk;Y3?uRbhg+R;e7m4wx#9)H|Ac-5#)m z1$&^E0;MS5fmQ_=Zi+s73j&eW=MefXi6@#l#c_N_&%Nz|ZsUl(zG%4}sm=HA-b03xjv@L`uH zzU3CyfqrK^xZ zA1N@`H#XhkUZWxaqMY3u!FdPYebN?5<4R;s?*|@GyZ})mFFjD104ng2BOd}BZ-WDI zxe9%~n6Rd@Lr6s}$8e$3G14mJNJJmt` z&v7%<=H`uWKb$yI7Mcqu-7-hkkkOQp)Hm8?sYciz7x0q&4rPPJVpw)Guh~v^G#a0`4kiAL5kk@FtgI{>Kn|msqUg+%&j&t#GZ0%l-IkP4f~K>DE1gEjSkZ4ZN!ZJak6NYJ z5cKE4RyV)KMxG-_uABe7KY45c|6l@8+x7E`gohotGCkZBp#i;x7LO-YG;e7Xxp={M4fVq^bU93mj{h0ik0|-2V-kduxT-(3N`!PgW z_Vi#qIfD^p0=ntYH@K7;UK-N2HHHBIdz<|Mdg}Q#o2C9e5*IN`iC&a(UDD83IEEph zuP%<4MuDxDL*kY zV*=6ILv8%aerVzcf4B*gxnYbgnAe{*0Ycc`-F={&p_a4KSH<)8^f1FTn%xY$i_d9f zBL)YXne{nzg}IK7qk7JM-dsqlm@?S^?z|TosDJX~y{bv=ASE7i2xgS>d*wX#{U<2V z{qMOrwzgL5urcH(DCP&AXB>Hra^urV;5Xc#vG3_APIRb5DMkJ53zD-P=z@2IvOT;9 zR0-RTZ+PPsL{rIctv+#+_ht~lp+Fh}Jf_|8-cB$0ZKvdbIbAfq@k8{C)3#=}n>d%$U#YB<(gOFS#hW z{wzg$&!S-n3Bh8r=L~sFz70}-Z@a%r4vLH3Z>+@4|Pz^VF zd%kc#SYJtyI$o)9!v&U78`bYl9@C?lN!O}0XG_~#C$OT(j8Rx7lvgkUwr_2JeXQth zK)O6z|H;`|GeIzgc>J3)Pv|9fKn*}gNFu3oS^WojX7(8V*a-p?ngk}_7y-HX(VrN9 zezS&;7v~hjB#$- zIYLh0v^Mn2#pt$dCXfe_;YjU=(>>L+UQ9Q?;np235G5vx*D813tX)ov)-`~nU}VDu z#bP*13a*9Fx=s1VyUPV4ED{?3`^Pj~D* zo7w>McOaEqWhZbPIH%Gf0q83zq12gUN^{KU5{)?y8q-?KN!eu@;9vV{0>oT{ z&|Ixl`<^AXc~6auX0WJb$9n(%hwb>!i&U8)mGcl31D_%vTQ1uED|?tOXpN1HbPNo? z@BgX6Qn~{Z;{QO88htpSQ@~b!J zAeWZW`#D>O+!T89b23EXjEp@33~;v6^n$jsBU1*ncr#w-mGq($H#J^Rp=l*LK2^2g zqs${MlYV{=t=~~o6E}$$t9r7#|9OUcK#FdU6i4mDbkop$={yFeTRy^N7F8U+z61EU zdl%M~@(%)TdJ;ZZntz)f|KZ_?HNS(SgGRme&6^Psf_8hEhu=U*&<-^wCfdaJU4F;-DBc4t;E}=+q7CK!+fyy zBjGk5DiR7nT1Ia3=4HR+1QW=Az5-Qe%1Sq*JK?yVOm}9e?Qxch7Me#yb)k0G6>*{U>Lm>DGq;7TAOF% zUu-!D7?cT{{urhvL4G2ewb2tbq6}eF?H}u2KXtl%PC=2YAZKJ~aA#CVD9vM1mc9%P zEpwwieTe7O5L&|SbdRPPz_`vhNae!Tka z6??0w$Hu-66`GC+XRjEsAm_)gk`FAMy)PZcX=I~*)lPQ2v?=IVbT}+6(-8DpB`%5+ zDB-$?^*q@?E5y$9DeX3uC-y16D}gd2r_-{c*YRR>96QhLhmTGnCL;_PsASlb+cvTF z*khb7&uc_n^R0NphC#4WG5zXoW+oHNKlgZEKV(~X?2ky`f`fzabiDTTTplf91mxTR z1h5WGz%Fgfth7fa2fo3;0fIfPpzCJ5Yn56~+VfX}wbjn4>cja1*_uSKgM$_=i%y?U z-GNOspv5-k&>dW*!@gMst>5%Cdl?ntKG#WA_AqUI?jqx1_95$WHM+Z*sQzd~zNnP} z*(Su;a?gF{{n#0O=iVI)=aK3u1kseqE}mzp!f74%BnrJ&?*%set3wc=OH)o27TvH@akTa}TZ#V*6M<-xq0=y&g8VPQ8} z6wPdZO5jkCO}p{7fFs-CS17&JboXP%5y3ssUy znL&k?{m90*c+n>SC0UIXp*tpLckSC9vcGO{Bs?L0)$2G3j{|a!)6Dz{7jJQJguQu# zhG>HTzj0ga5^&pl&uG+)vNn`&{9~q(i5MH7TKFO4S;ncL_`H&u!hIz@j^El~wAdJ0 zdwazWhZ|aD1|vSGa1ok}E2_1dKkZH^Ls8PLe_!<{?x+-xX)%jXEKS8kQ)DEg`m&2- zmCn@58j*wbdpA6@?8w$B@F(7TEL+$MVq@gERhDE9J@wKx*TmmWTgpW3t*}&Qm~tk& zs2jFzN>R?~Fdi34kY9(3mJGF_fKkjzfujqEwOV?bu^mw2vUU&BQDFr*j zLm}W!E&_eXv&ioDU74`_-v#vhNA{98`I!3+i5HgoE3^edsl+=GT~C=sl;>k00>ee8 zfE+#y0Gk~!t%!_|Uw<)GYHz3u6Jo!-^Ecp%E!1YM{N-V)$lPZJ`Y~BzS$gcKUvXU3 ztcp8l8>Qp+!cFUYOnPgA^>k&4d&f8EXhk0zIB<(xo&@3eF;l$th*@oE zD4j1u6YgnoPUvV!(AhZ7LXk)5_aRAa&Hl60`bjBuc`)mFk;1i1F{xJ_l*Gc+_*5<; z5Y7-ShRd27#F=o%c9$$n9jp9pfB<&kR{p|gdPuSO=MM-JoKecx#~$VITW7CZLiWp> z{X8J!V(api)z4t%kguE+A#x$1CN0IrKyxnwZU_jA*lCIXjc-zM5pmr#LPXq26132; zmd-PoXbYbZvm)oS9BBBI6jl-s+sq&MdTF;ulY~}bS2`qy&+w;2IXioFkQDSTj+T<> z7#JN-B7}636Tj}s&!{QfcT*y@`%c`Gg|?TN;EA(&yO8Xu+QU-o4s^qxgfqtuTDh&e z#Bs`5gT~!4-{a+TNpVb4!@t#E-0>RczZj_~cb?EF)beVBHt?&?`_rSAFV^PgV~>9jQ3>0j_+a3W5>ivM(cbva7t%w@ zU~ND?5iQ3jLu~wKtG@o+3)j8^;>A-E>__3b=9+Ju za@yYw8q9jyu-`1VWrXkfEq1=m{@aWf=6{NTPX29Z)beZMl^lL?jnJv>L?Be~531=nfBkx8xLN@H&Rz4#TnhG#5=sAU-HuDR<5OqHS1_({ zZly&tTXV&)$5Ta!`mQ842iOz;VqWuYY>>K-GvO%R@x`$ml>@ay)VsoVG$IDvOkVtI zl1I=7wIJXbIR6}2aWdeGE!50Ip%QfeR0dRPc-vVMjmexLvAat1%4cW36%j3sV)-%o zS4_DFK~Men?vVDe7<;~K{pS_{AI^yw-7nR$RGc=4LVUr1iH;RFZtw$i)_^wSG0a}h zK=;uBGRFhiv(0ShN7?sR$m9|KwB&lr#=r8y-9N`|O9^3XmbgWfWuqg-j*LO- z`3n!--NVOEPENQ%(+DKbz`($d35tQ1F=8J4J)*mv&#niv|0f3t0UU97_^|lbmOA8g z)JX3Q1|)~r=%1tfJD_ir?9t&G7lXA844LbMpz?uNp8&YN_Y7NajMj>*V*gTMCdU55 zuG98gHRl@kwVB$bM5&xUgwsx(8ewJp(p7Mz)?1i80fdC8Abz|6o0lIFWH`{9d<6p|+^zl00gm3K zCnxiZxkqVGxU>R#hS00Pl^@Z=0vCS9NjUa$J}lUC29=+lK5AS?xlFAisKgY#7q~{k z0Re_3T1D=~C2B!_6T3@Xe->3ge5h|BAtr37eA#@o7o{F!KmGb$g_*Bpvc7~JM=!ps zOaGfwx#v&(z>LPJXBx@|xAj5wQI(&PjA|vZZzgos6C(-JRA1Scc|AbY%KQ94Ny+o% zVEk-*B_o(dJl^8s0`_AU+KWWjuRj2>-Yb~8Ia1}Au^u?5r;y=DOVJ%K{$f$@slREP z7nJFXAtaK4vX3Dm-h-}lkPMC6JBW;qGYzPlb*DCR;5<@yNJEtL>dgZBRlD!9w4a$( znLp?1wC_YR_F3>w2v`uqj7meVi^T^Kj7)qtLsTtp0{rydb-5uZOtfhN3Ybu@^XV>&_X2oqLrM4TG6S*xZN<6~oN zSq`so%)^?oCQ1RTHX<&rvx|+2nzOzB(!)IkQM(xwV6`HxZ0Qin9U$mLeEewFa=;}y zv3|0*g5D6`91uhd(>#JkJ)8BOx@%D)($T*^K`?y<4E%JU4UV7$fgn-=cMBsUlfMHw z1>DRG{?i7AT%Y%FLM0n7J`sywtg@g;<5E3_3J`u$W&U-~m=Ni|jt<#IJ~ya{AHtdQ zJXp<EWSpEiYx`Bsd&-A7S(q-IuSysArl5K=FFVC5Pl*s;*+pG_?|nfJxnN zX4Qme5~E^JzaTJ_?>c?ZR(fFG+clf;gW%EgOQN47sa{mkZOGsX)=VEUUk z20x2G)CX-a5zjdIO8No{?dZ3Zmn&~Tw6!T-lYY;0pfk@-yyN?#A~fswpVQb=7% zTZoRzXR+N|Y3~FEIy%G01{hP8U2M+6R1;jz%=~d7VbktGp^5&7ezY(Q`~_E~SX@*K zxE*NL8{>GNLE%J10KQcEBOufTS|ixWMP)@45=KpewVD*-wY24RbUP9-F#89zK#Xn$ zn5f#e_EDng#Yscs+hfS}ZAaFYC#!g%XhxVyZqVuZcg{atV@mT0KN64yEE)#V>jSz7 zMP}OLpqMX%IYh+dj|0lBR|b;NuWyXcugyyh9q-D;iYM@x_9#mT#%L;tzn4$FEy0*E z5?f)3k>$l_p;C3L#iFFhZJ2%T#tlKIvr1Pt=ZOuSpC0&_EwOx-XwqnmV&1OMXMGQI z+RtZZ{^H51G6Phv&dP4g7e}$*E2WXEChocW?9N!l)%$sUUwO!DVxI#f3-z%{kxr3c zuiu0Yzs=+?Seqv&^8{9YHb4rIge8b%R7eM|UNO&yxZi=-?;Z^j2}(PyH1&gH&zAUW z&Z8rp!#cp5|1Q5Ja9D0YMFDWMecR}f#KqsIKjmT+XV>Z(g<=7;NB`IB1GS4SxU4`{ z@$eW76%hvc(a|eF<)k1QgwH7FsS$xWmrNM-{PNDc%I@xbS4Lt=dcDNYHQXLH^N$Pa zweDFbCTf_i{l5dBJ=TA&tQ=mK_S)X`X`JKv0jKPYzzoKOn7pbi{ac&bsJ^#X=bz&b zI^aCd8jMyI?e6F@9*`nHEnF_?xn|vqk|yid!rUXD)uwl6$P zMP%4=9)Mwiof^`e+TPubOi-HOMOcJ@l_9bOe1+=*3Gy-(G-832oId;;W7lE9CO;CM z<*3dd6&bFNmjoPD3X*mwh4rue0D?FW7Q%r$zuR^<3@i`ylxwB&=J;*CX$Fy!lyAnG zc5_;ca9*73Du5KK35ushJTMo5F{+hZh@dm@rtxq zHRRG+Oj>10J~Brg9i65s=j2!=3751qr9(Y4UK9H%lCib}-8aKWM9f={MSB%x>T2EJ zvlo-oNm#B^Po|+Y?p&=imca{_8t)avFdDw=dAH1%Q>6C2@aE5jpKii$STSDU{$}pX z4=49S*wSI8U?}M?y3^xhdx)_-#=nTccZ*&mxzc=nvO4fsG=4JCh2plzFG{Yo%zyu7929iyWa|IMYIq$N)^(os## zczK1Tf(4@kI>r+7b9Yu!90)+*+B4=Mjo6(6gc5l3mq8J{SG0&|+o0~-h*I7czLlY5 z^cUk58Rq9F8u{VWEY@GYsW2-sA$7hJrc~6LwmThP)X2Ll{99vwEf)JUtS4v$=+yQE zJ+))EmZ)Z)-0ItPjWg+bWw)-eiir`m=Dv!HS?Vqp5Js~Y9<7`5rCy>);(VbtU$D{a zC3^-@b(jBQ#D^Nc4GGT};~aIO3NJA?zq)S%mP5f{rsTMk;QAZb2fSoU^b}F>;&cY2XDWAb-CU(%-F!7e zrbR-nfM(x);aJC!Rg}>xu zK?#iD&m;o(GWrpTAxu?VLOPuQr^SnTl($)X;$hmX^}VgTe*Nh5=&&IPV(B5&Py2g& z9keTGqd81>vQ_uM!L$N~DQ_K?YL(rw){~|BG`683#}FTC8SNnKc)-dslsgNTMRS1EEF7IKTl%Nf%CX00Aun2M0lFUtqh@-wW2WYOOp5&=7;d0>oKCXEsbr z$IFn+!ZhPKe<6$MgE@ES}~?KV2?SYI=Mtdqf0%J?yJOzlximYF5UUgRdYWW zeP#X|fDPYi#qcC<$TL5AVlkVcnD zr?g?X?x(Z~-yEZ-F;8PzNz1pUy8OS<9Z(6Y&}pn;iuzZ(W<}L6MW>^4ppN@|^+BN_ z7yA;LryXrBmM(rsMdsk>=5pe+NzR+u<}4e9U0Yxq8?adwFVD*GJj>sKR?suX7S4|N z?c_F7q^Ujuq-eQVZj2;@(r)A@{(Cv%K26$~f_A+I%nHE@gRCka7`_u8O9{N$debjL zhRs-?r>kVCqzr;t)-{WZK6}UhsvSE`CMN8 zhE{v`PK>An-JmR2>+UNpN`=~E29$a*rn1`@Q=ghb*g=?}zfw+Pb}k=ySz%bARWxoz zPt)|8pCxDzM61l=iFaE=-J*x#Q;|0mestQeq_6*e^OaN>hpi+H@)g6G245<1&&uu4 z*1QA}9-9$PG=NZ46z#fx<^r#C<;x;cY#AeW&4N#XJyG1gQi! z4sIBChS5lL|0=W8{O-$mU0CMOfJXK>in9(Cmj2bP;S(*o$>? z`s@IqZMLn(D^q?yYQ}mfTccG=^EON&3Sb!>cG&eFa8k=Rrb5~cc68MVT+=2wZ(+m` zQ2j{o_0r!nTOG(&&0RX$ny5N+UM4i$`X01GAgY+XuVTq-wtvE1F=Jn)Be>zRp15vq z&z<3hfx)U%8u;k)lvb_hY#cP4JDof|oPcc(s2+X$X9@K0hz4?Fl7pg%7}&e{B6hP| zO`;cdbrVA+jOZSR>HbNyCXra$$v!z$E>7?|F5A4x4p)l{`Lu_ysDD!%v$hu?@smLhe;b(S|bu{ z9rkFEAa}pnNz?Ac#eNJN4HDWdYa$}x;epn)5`K-5eAfTJN7{f22SMtA??c*P-;;>> zRhbzHZ&CodjD1D@SyRJ(*vlf9re?UkpI1!siX$pAx)mO>5qQtS2L^Jc@}B^i@}@xO zPxTeUO28saUjM~{Aj&6k8C*`qysP$5(Y@vVph+{Ne?uL6549+#*>pRhFJ9zUyn%{} z`cPW>ca`HmVfMp^SCAt8`9Jq3n9+X01|@mx-7rzKhR0u7w(;%Kd#%6t`*ZVhN652j zUx+0YQfW2m;6^xMqJMF~{?7b%uTyTwcDft3x;sI_dvqT#mzUw;!8F`gHs~9Vpb*n6 zdWnvhI@J#AvK%@;huz&f!DeG#a1sOzC>n3AOV~T{QT_SPf{y4&bw#^TesD;o2f%<4 zR70g!qslJwi0cAml|Q;R0cKqSChpZ+l!rR4B$X`9HtbH-KC6ROd8P^{P8+g{U0)ud z^*8z1%1UJ^C-ac^t~wcSCTnU|BIi-O^JHUuwA{lr{2~qI{{!RO>>f}WKk4Z-IzcDk zJjkzRwweSkAZ0?nBu_s=E*kvMWpGdVTDuu{c;Rai4+0vaEilrReX`TdR*QJIK9rH+ z0T2fscw@$Yrg2aePUKFxud$hQ$73~|H)JFxm=S<7hT6NwTZM_Z)Mo5cTmB1V!`&0Q zPX*-z&`bIP%RcSOkziwJ)lN;``NLp=Wl*FAzg1w3h=^lNPk7h&Dwuy!Lv$~B;M^MBa0#Un`I*09q}I~v$VA`bkszJ= z5~u=l@q*!ihcW{u4AvSZ^Nnnh*ScqI)c@Xo6tKNos`cG<{qc1E z3-kWcEP<~8R|7@gO3gAWU=LKyDwKHGekqT?ep6(Ej{a0Rmugql?h+Dmp`QEA!{fGE zce*@QS6h+x6t@3pKfiB%sIP)iEz;<_4g?u%~LeIXmn){KN&w3nGR zSncJ@0X%H92Iy~ecCe^ve~kD|feY|Y_Ij^wK>zz+L}y~qqly33rvG=O=*L5uOT)Eq zLuS3pP9#HQLo0UrT(RsdPEMm6@$xrZHw;>!wi_uQxCCM-z^5sp^$={`C^pUj#Bd0`Q%z2C*%<&_4cFWCr~9bss4u zyUrk$xL5ooc=DhG)t^P2+`fHzBz#Ym`H)aI1e5vJNX597#m?R^M%z;XlU4{^OTGs|3W`0wguvqFoyNBk6*uaLBIU${b{S?rxFULh@0<$`;y zybR(M1{#OkzP^iUAr+huu!f$0%19}8Cs{0c6a*F5*Vl3U2nZClF>`iU^BbGI$s_Oh zn|efeZ2Omxo9|!LCrZhLk!tqPh`Douo(WbWprD{&z3qSh{huZ!*TI7b9*``&b+px} znTuAREBai85h=}X=boPAqxBNdDtn~&U{EJYmL7s;8U)R(GY@iTS&BPU>TFJnp?*|O zb0BLyzUqHEX2p+W1sDuOJz_gonlW)ROOtS*TO^zM0C*-$H7`2a79C#l#T7*rZmX_l zJ^zuXr!e7<_bpL)@dcPuID=)@52#7Zlrpu7{wLH*s-S|B4;f;xx99X7?WU-R@{>jM z4xdL2%so?{O2E3Na2~hj&DK7o^{#cNrG*e7aOOq?THxA(dg+4xqPYOtZ7%Zcp+@bj zJ<>S9<&8TMzv~FTVAqjn#IL4~8~l(%-uwy`pIYn}#8XI;hsIk~k`<9=>t@X^Vv6C{ zZe(zFv;(eH3NCj4^RPWME(b?QfSM34u-8lpx416*wuFK{Wydtdb8kI8f0;*pRnKmE z;`tj~y|wrZSTq9UHfB*%>PuboJ?K{}YxN{_-B+`iFJqM~5#tqyaew|Ck~m25s?t!P z->$l|b5`SYPbQ4Ee$E;)Z8uOePyjmnomq5P<3HgY+x|KDX>h~}J2Ru`p+^2%vF|~z zN7?m}z-F^0r0R@md}}`W?S1u(5{AlbEe%xHT6xm&JMzCK|3J|sW8a<$;+S)&iaGof z=VUQ`k$yb!$yHSsN~l3A_CC*fsGoS&Y7gyD_ustfHRq)gc|9f~3b$xXbgx%RE{;D0 z@nPsj{KFq}YR&1Z+>28P{NOnK`j87MP!t-p3)YO*JgkWT5Ajt@ee%tc$BaDOF=F20 zVYNG$MdKCoDmgm^N^e(DQB`s@`zL=r(k!a3?VoM1DEgQb`Id{LU_`SjV(eoKkV8{! z5`-si(0Dz6ZL`jQGyTjHpg2LRatAD%*JtNIcOwyLcqU|zMyA+5oh0JEZ(w)0IU!TQL0)bbajC}CkKEh1)l{m$f!P2>mut%f2T2%kYv4?K!Q$Gl!}P+#-VxYUniDA zV%MOU6(7_#7N(huD3;iRza2HF`@?h_qi=~0C%P^8EDg5zA7$kpO-{p4b-fS;pv++- zYSm50lMt;arrL8JqiXpgQS4oga`KyC`WIRi5tK+^It zF7Bzw1e@L)=H;rt_5@g7ID)EXRY_q4pc^so&!xzV z^sVe0d*uQx`FO9DmTP(c?7KcHU$*M$u;=Gb%u&^M3S|9$KSz0zrSduZOHqr_cLS2C zX+uLd>uxG&7ernq_-R)3(d&TKe5pG;B2gZ+_bYwnY<2EpR~6#*mm1&dwDlZLU4GWK znFapi=ZiFWWq#D({`yHMRZ_(ZVfq187%*z}SNE}JuFUyx*qO@bMe9r#KOstt7mf9y z2r5{nSfEa=FGx>m_& z%!6y$pKuwPaDo4UFOW3q8S2U-w}yhs@gKP@FHo==hFb#y%dN4%kx1=XoU+KR8UHKa zgdtr{(#zVccJF5pzg%H-(qaPx7(P@!%U@U5eqB=3JjfDItd;b!fI!B5b_l3ha1uYB zkH7OOVP7#lxC+!rITtXp2!I}&_K%qsC25c6Fjy6AFQ~S69bwBq9M|!aM z_+6zvVxkU~C{^bNDoxMQ_X%Xa8MidCy(N!ntV4)5OGhr|a_KYC~YM6g^=rX*5p2q?hK<^DO16 zAPqP72;CE!OB%AP_kA+#l%9M8@pE~thfq?qj0S)=*8HLI!Y$xT3CJwEMcEffNRXa% z|0P4>8ZrqZ&;YYI`iwnR>9&o}yLVThzLwL~rD5}Vb!!2$pjl|fRUdD&F3k^zMfLE| zbZ@3{Z>z6ad$|n?FX*`Iz6^b-nZ-wW_$W_0txt#VvD<9z;fVJhQ}X^=$xJgr-_xWH zhebOpIseZBIm@33G=ACcmM5o z=c>ER9}0UFR|m7+%4Yq5um$ZLP1cdzA#6=D2x-3o#9VPo8C)5OjA)8W^7^2hwUBc- zo#A(dYtd$YC{GkzDKbCFG7!*scIiuGeD$flcW?davlf|*RO?8FQmYZd4b|*D;dps@ z6O&>_dcT2STp-bdD^^SlInpnD`0!l~DiWsuRh#yy$c!9Rbj*(l3D1}cNit6f3Z64_ zUK6xycLN<22EYL^lDGXgH>WWZ(rA@Z(8_?jN87JoDL93wz3OlF zKcJhSoT8qRjYfoXpWh@;@7>9)l2@6}+yGU7OX!JR63CPfOpW5g>^12;JL z+uF*Niz{9SI-%}pYIdef9-z(d1+dp9PfKw9fE#amA6(b_H8n+rEJ?vaU>AQwtDH_k z;4mAt0Im1_ggKn; znM;DF5Y>%0Ef(~*g<>1N@M&J0A3n0VT$-xQ)hO{Vi{lU1Q=ECB3vN~naxwQ4gq_U> zGOtVd<30eC@+Ko}%vnEb8g4(y+#e)kh0l0=ZF9D0FuOt66paHVNK_^<2rXMZ!@DPO zZ*7c(HUS@Sv6O~^nYAFUpl~n008kQb2y4^Fk?sy4>)s=qYn66UuiJ0!D0uRZ1l4k)LV*8Z&_!9kHMZFGO?P1)CI={`zFIG8T^`7ata<;RODh>z3>-Qt z=!Mg&lKe`Ll)8oBc2L6&54LxmP!e8W0N z-Aot^Y04b*6!qX|Yi{Bs{i643(nlpjYHN*!Hh1mSX=<28jTMD6Iy%K@h3)%IZGC=6 zxIuf4OKqawG(m&1_sc90?y_#47H^(9L6q!bZEf?4(ZyE1VbLf|S&+jdo| za`URsl+V+`T^@~us<_XxY$R{!&Z98sBh(FMzbqP!*>7iDmvARelWfG{F|qSdAwCuo z5_~F1tD4uRzrD+{&)FZB&}Cw{U1`6txI_e}KMz=2L+98P=2&?645jka7QnRE2TH-4 zo~P73Z8L{maeWqLxhFd^o*y)wm^b#!r6*l!fsfRtZPRE_5+3ncTH3`WoQML}djaD5 z?8WJpjAIl(53(81ow#OC0%-PK5dR%C;Ah*Uagi0`zaklFn;umzlYMjuzHWU*cQ>?3 zQ3B92`rkJWlT|l2u7QXEs4`&JgLIwuwkB`pw1Ar<^TvZ4dAeb01<_ykZdeM~EK~_h z-A`5Hacd(i9cH?4I%vWO1t#Rtz&*I_c`)?`9;TzuUq9@8p%xMR_(c}@$!^f457Nm{ zVeVUY0@0Z3!Ng+ItldoExZ760!ZDceWS<^$mC6uoy~dVf2u;t3gkm^We4Rz+2u$D@!MctAkk&=2Sq`>arh%a`~j5_&6N}%)k>DX zT2%P_8zYU-g90h}I{{nyht)1e3HINpRn26y=#YcBiv#Ke2 z7SU$6zk~V>V8|h}Z^A5vtnBzc5G?Y^0~6c3|2)>Blg;qW5m?^O0X80E;x%;NW#D;_3H2|K$Q8 zOZT^v0+tTg`?J7fM21r(ig|E@*StS2#ht6jgtL?gq~Ro+3FE&Ib};g%26qCFH~ZU~ z1zLoUSc7hlF~R0@!`+?FbpOaI(;5IxX~-YFXg+97Kbq@KKq+h^}-`!$Drt9(M!tkZ8gx_5Qd zBFYj>nJTC?{fl!dCJf#*LT?65AcPSTlP}lmW+}fY85#IhDd^zfsFb6^o3DMCU4est z?Uvvz6fj3cB5dl)iqYbNJ}>2a7_|kS`~ckF0P7#nwlK5#AOXrd2A;u`h~iNzgg+0u zRIY2T1wA+0G2#!`kD~c|1@UuHKF`zmd*n5iKuZQpPeFX_F-p(G6gV)Tf{1LPZ`t0} z^(a|UM{NdCt~{J}B&Y!QJ+&M_yEUFMth;zr)tP{s3~VrH>rTk7FyoN2&CM6or++Wt zNWF9Scx_qffLbE7fALPPuGp8M9QE{acIlGXjne~rIyOA8VQF6ZVaCsMi#tL+(e3AX zm`rj*>ojc(-;MDD|c~8Z4z6aTF24O{Be)> zg%nUZ7JTl)H-F;)S1nA$-?(w35~i&Io_vN9oYk=8fHE%nV2gQzLcV0_`~9!{n`%5V zm7;6roaAQx>3G25NP|B}I}@@!XnAMB(I^^5Jlnw`4v0Fi#D*;&NLV$Cuf#D%YBDkf zLOH<=vj^c-5nOj+Wr!5$*UZ1FmUaVt1*Hq>?*;6FSV&qfQBK-~0kZbCU+u}diiFg0 z0vWm#Xo_~~os*FE9lSohhJ%&-LW7(+ErNC^7j>pOOoAa-F_{ijNBNY&iQR7))L{l0IsknpNt6li%X5VE zK7fjk!UvT-bpw}vB;!#q2K%R(3s8s|K^_hUroo_QP3d1@Uf53(b&CLL)ou%!p8j9r z%q$YZ`+H)Cuih$WH2V%({j?~P#Bz@%jh4-m{-*;kh;7V~<+qyr)v2zF`c?BSrjyNR zgpY;snpK=7Z?OQq-|N<}`K@`Wt%HrMHHy$``$L=4Lx=lOO}rk z512{-*G^jG749pV^O`ve^Qwy8ciWS=ylsAH)3iD`e*jdAJ&i01inFMQrmRl6FR!?h zopHLb%0#F<%RGfh<3h+1JtJ;cOuDrAOwTO2wzPVCZ0eAnZA*pEj%$VZ|Jh&bFIKwi zlx8&>0jUtO3R~E$RI#y9_?)X1v_FcNS=usT<;ss5O2z@ zJm~4U`-!#0P07xV6Rg+uK@vOxY6$4Ks&~nVZf1) zJ8?k&lW~S;X8o01{wzjq1mDt&OnZV7$-@=NdDy%Di66+b*W0)KZt!yt1$m%QGcg4J%?sMk*cok?_+nId`?uxx2in zF_*)#Vj|dpuVEfT#;7vf=JIE0sl;lKx$f*ho4Y%H2Q%&2+Hi(*sC4&8>gRa(sMpV=#vdWC!Nc z8>+;bKP+?DG9`+V1K8?=7_{!KFKiih| z9B@2Jz1qZdIIp>0=LTI|UEN)a9z9P!+5YKD)r@3l(NYL8Whzxp`@U)o1dw_*y>2ob zvIv(GUKDuaAnqeaMm+5mNB81F;d}#Xv4aDOnMMIk4``ChEC&sYJw>74z9UYC5SPL8 zkP+~0kQlW2%Ko>My?ufF#lTOTLl|lxG?+4wK|%i4`_px}!NK3)M?jl_%BA{r4oQjZ zg%TEvX<(d2ZIWIZ_4m`=-)S|wJFVnS!VGvc!K>J7<|X4#y4q&U+=a6;6y}%arTXDV zYIUNN7CKkE6djImX;qjto*hoH?410k17Z>KCws#M`l3&P(pv(iphj9>4!vI9z71(V zx!&94A3Yw+3r{Wtovu|kBjn75-egfxH*T=yTzGw|QDlM#NgrKLWYpDVaOekS2s8^Z zlPve1A>D<4{mg6jk-s`R5R36M?}Kg;@ekaW^IIF$_r4w8e|$UHkC_@5H9Xyp8SPF= z%G_~@eyhvWie|Ti!$JP7D-YIXudX}}C%wk@Zcmrr`gF5%E6hp_4U0}6)pM#~xbB)r zPj~lbXLsk)@n;1sElP>=J)+-FBzfu#Wu!CG9TvA|-v#))Cmvo?37A*+bq`H&gZ`Ae z?G{dcdpK){TmoOv#2d5|270bc57!>75w zoCAWgNE)Efnb`G?%dq><-SXF=018`Y?`zdN0;(b#xbMzjEQHPoQ6UjlFCZy*qzyLylC z+7-0h(thM5*RFU!`taey5qNGtdHU24253Ed_pHEXlAOnZ?yf(6OGT`FJ~a2>$oJdW z-Z9e-(n@_`$@$ghcFLhliDM7VrpMnW#Ml@DVbnokjrSk82?aPhv@x^N6}}Len?xI^ z_vlqI*5Gjdy!QoBwQ#zsDkAyu%bI1r=3-ym0G} zUOxVV_$y4jM=mswq$=95dreL4$vwVxTlmWszim2frRC2M!|vL{i~OW#&|-Cwd3JM6 z&REl=>tw%1!j?vches@>R7!)q-QNDFY<5@6irGh)*TF;5Icp91R#XH&|(5CT2v1A|H4~G8mhSneZCBvXQ0<7#+YD7Qw*O?CfmO z4$7OfArxG1rrO&x(%$?k4xY3SV^qpk&H=i1=H(S7Egh|2&J|N1=sK7t-{e|au~Of? z(>;P!L7&TiQ}fXyBT`~T9nB}6Ms#8~Zd`L6|3SXC`dGV`(&rd_?vy2)XkC?5n8lh@ z($wyDaIXp2{;5@vSnPeWQcB&_v`j-L<5OUpGo0{Txrrlyz|c_;rE+sM$8CGd+qV3G zpM^1COD*51<-7Ahm31HrGEW⪚gu*ao5D|sp=r#^}h%7HdH3a+(?j6o`FPLBTucT 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Ð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

%TQhTtV7)oOO6w#1^(a(79zhC#_vEG`@zi=Znq z`_C9SgdM>o@QZX_v}R*t8=sx+O=!I&kB*Lph4gP;SsIQYatn;`I(D#X+@r90m`reS zJW$Eo*&fFUGjjy1%I=_E@I>XiKYb1v+qi2l$}yBzEE%q@MiAPE*ojprzu`ThviJ3bkoBK#voiVZ<(S_dr`O*d{5BqR-Z7w;_@=qSugh9UmXA!)vby?!Y-l+`rw!e z&horAhz%3Ak&AsaaK=IWA`6DB)OB>^`u-8KIyiuI08*3TegP0evhefgg>M7O z)1qem>~7qWEfIjO6qFT-Bb=*D9H6-0-VwaIpIjM&1izCoKv%6-*t)Jcp4g}?jPomFh)dJuY~qkZQuQZ z?zLuree6T=jHc5TVQIpkNoHnQfMEzrp&Aro-JihoZ~z7gkPF;X^O;c+F!8P(%ZoRiH3dk8RBKyBiM) zny*?@xzI=b-uJ;C{_mz{@18g~TyGap+{YYPMi@hf`;la1^d|S}3u@!{7SwgPoI}BB zWv5dYl0aW@dgKJn0t>1%S%8OHq;e zJRu`Jyl=;F$watRDLOqC-EwS1S~~liBYK03SXM{-rk~34PowGR$aXcyYbA;}gULO> zqX8OLK0l-|?-!JHQy$bs4h?uuj>Zbq9Z-V>l-zSpqXqp$u&Mc>y_jg2^&71fvNub1 zo}_P;#p=$)2M&Y+mVZVdOc=}@U5SN;zk3TPfWn}l`D}TnY=mto)2y;q=ll;%Q<6Gv z-1bSKl1*uqsrY53<@t?&P)jvr^Lo$}4PhQ0t=#{1)E(n&6x|cHUd_ncJQzx{Sf={jIA%HT|8BWFtSHS^;sdhCr}1dU^f+V`H<)>Z|yNI z5;WoC=y$aiE1b`P!%@$ur;jNf-x1nPNW{cT+qLDhxY^lzy2jzdZSv9ZzYxQn_h zKdBlY(-rS@Ks7MqOflT_M9~dSkle{cK zocI)!pW-9~AR@-Z_uqBGy~kQ|u&(8zrViC8Wfq+(nd^fEfghW+A`hy2x?rj&uuvnj z9gjSFC(xV|UyLFSh@57VaJG2}f%d4%hU25W2)d|}y=y3wR8~^vjt(oiMd#+#!vq6y z_D-z)i6(Wnd^8?%0O^hBYPo}Y&hajO;na~>?$_TyBIVQotQcK9_@YNl-gOY$lw)Pf ziNDNaa}^d+8L?PZRn4aX|BQXJn^Pv~;E+OU1~GI|2F(gT;HPV(LC0+HebXl-rTp0N z=31Tas>i7Ih+6ML8M@VJ4Ew{x^?3{23aD(6RFA z&Wokev7+SfL=>!fv&%BKLbmnxXI=Lr4?iM!yXMlcBENSw3)OHja(%So5tVfnQ6o-H zAWc4B?iV{EBlT!S02$D|chiBAq$FI%-LNUA-8$sR$cV>Pu`W3)>jz*7YPXNR>izF+ zS^b^K^NuOMA#ldFTCGD#m~-#2modD^sjA}4?q(is6VpQ-Eerh;ODuWH*B{5_lDQs|Af2v)4v;WrO6wK-CPCg8?Wb! zCFi3W&Opv1ObBlyuhFN~x5n*VA{s6yFfu-K2gYC(tdWEE$dvmHiCEkg7B22(jWyXe45upeEsO=Krkxm(W z?9d|~FcKnx)zZ`*10Mjh85_U{2p`YTzc2H&pX&J>@LN#OstSI)d3;pXFHBA0v&k#8 zTW|iE6lXcfl!OtA+%)f@j9fEBSJ6js4eMIMz!%wb!SNTgbM@rxQVnrr%M_`tsc;SL@E)q}|h7Zo2QMo&r!l z!2bk`V>fg1t19z;J+wUVGvpG(t|U^5xdf3(UVg?nHPG)88z0&3WG|5_(>% zBey)?rH^bEBhn|vXngmCfrl<5w#cOkrVNpoE*Kn&o1|0V9xG3W0i}r ziI8kcoHll8oe}lU zZ)9PcTquiG+N1Nl3?mlLT2hxLj{V?Sq@nycFgzca;{PBvae$FyD)=oSK!B-#i&oWO zdJj7#-DI^;Q3(tEYkW!wNZMxAZqq=4)DrcpV>q} z9}Ujt;vwA!cD$cSNgyPfEZZn#t0yy*CnPm+ffC-J&6JFi^}v4Z%xz$-Ur)~iKUXVU zvK)v{S@i2R!qC`?yWS_AphKqGaF8l0f<|PCk0@J(RyZaGT+EHLhdmq|eNdgDi*ECz zs~Jh}YX6#Kq{Hp8O^l>MgN3$pZ2`^s_azfUTLY3=wh z;;$|lImm_UYJcGeZA7HohJD-*g?kqv%*r9tJWsc5@C}Imk~mHLsIaV`_A*OI)|w4x zr#|`j5g0jX6BzgOyfMnjJ6|sY&iZ+EhPJ4=LLJ7mD#Wnw0#Z`;@Cb7A3IaQaWsvKt znRcA}5KCU&S;`vsi*7|j0+Z80DFd+7yT={=FS4>oI^|e38euBMJtkEX6U!qGz(#|I zFI+C4l$Dnkz`ocfxD@E{?@u4j+*>L{F$WeS8@-`;Zc|p7c-X}}wF!o>=z~*JC_d0y zTGSiO(8!39GDN^EYHn(7L+rIXUjAh{vK?Po9h=Cb&{?UANJB!ZcKU9Zk|f9wqd$4D zYG2C%^xh%_F{=nHQsKP=-1rVq91d=Fcj9J3a;%_Q)mn?c$H zQMG;HDvXL7@V{VksnBiDw&~oOOw8svf<-Xp;UPMRKgw^4xPN{!G@Oo0h%sZcFK9@5 zHk+jsF;D}QRgV%^V0F-SL>M>)LU}!%GP*=vF)<}&MeDg;0RZ5j(Fq6*#n%UWD-k|(1Ukn zscp{-Qkvh9Gb9AA5P!sm{Q&y|HCvI@Yh)`vfInXuCYi6l7c zTI-wA-Yx+_*wZ(6JiHxMZ*nvs!y5tV6*~-Eeo(6Yy?+416Ea-*X0cKx+6BrSqND!B0>g+5MZSLJQ6^qCUnEt)`bo_nEVT>0nYjZwa=nCg`|5`j# zqS>0NS=R6?7Aiyu>sNx9mJ!564>Onv(#pII;C%B^^GEKB!{gQ5+XCIzN7;xJMCh`W zKfc8rR(g{r*=w7U&P3eZN=jFU5|-}d=zw8JuOfbrK!Awy||Hx_Zh=bd1O zYj6QDCTC=26_fKM{9?pLoXq=ZqhFzRdnwCdH&CSfxcR-!aL{DK{@>ewtS=N9{*>AL zjE%b_p<;%Qou^*S@$_1@q-CM63F!rFPWP2fVL$7Cd5+I~i#0ods{0@ZFST{&Sq=ZQ zefO(R#B!2^`c{gn_LjZxvkm`Z-AH6|*}wSDqpBf7nM?uK4V;d8;nyaN5T0H%SnBgl zQ(fiWd@{~ugkkIoB}pHYmF6fMt^#uLJ*>m^nD7<1X6bc?`=`+ZG&Ky4DpF$fmMX3h3T4v`0D zG7VrNLC3sv$bt_M6u_tO!QN?u0Z`rsUH_CmR)O1I&B$nO=-^+%z(!pT+{2_ zA`vX_BeXtqa^o>mrt#|_29gz0uB5Wek7!vYU*Mo20G0s6<8t4>SLIZr*Nurwe`BPj zp)or;=_{FwiAt3r#?CoARF98~)BnzGesHjH9!D!LYG{;aYBFDMg@Y!jH+w{ZioSPp zRps6kWBrB8b|lDZsl>GJg4JldAX18SXAeNY+mPe~)EA=FV|eQ_Q*8Rop@zSM8D=$Zh=o9|p%|CWD-?4egRx>kGfw+i(#9WjJ zopteda<}=K|AVHkSJFnlToiEaD?J&XEmSV1rltB9eD4NdRdwdl5~^9M<~!#Da(|@9 z`&+nENj;=USrN2kVgnC$cCLZFaOBskcoLK2`BI zkT@J1?C%ob8hE%RANhQ!|B?7@1qLm zk>YdmiINC$CW*vH4)8|je|+t%9tghhoI!G|da%CXf6>OoNjmYu@cy$p76rk;uxb#v z74&YHOVrC{m6P2vQotuMXks~|ScoEFe44Xoz%a&R_pe7ZeU!RT8sG5D+?~sAz9P@F zCSH&jDTb?S>fvr6P9t`W1||kZ6vn3@xL-n-VPO-W*nSKhcff z71|+M8kf6MeRf7&LWkOA0L~GWmFEL&KdO)#{7`1l1cBx}i>f!at4-~3Z!;&)yq}&a zGU1y*Zo2B~^&!4cX?%snvTg=KVj^9ojp3Ubis4;bAFR63)AL#!ba>w(KBLVnX~#`0 zP=G%W!2jIiJIKDOP6#@C1Av!u)$VATe2a=;(Hh)X8ecu8&@RkQ8w6&S!~EOz-Fc~Qpj0~1cHjKn!RLe9( z0d(-RvGK}NXae2oQI@FMun7R0xt5nlFhDv0YuWl;71aXyQU8G~t_Do6+!W9#KXaen zKP6td_2%V+oMO-`ZxIG5T@)HD>NcEb)M=2&&%ZG8OICf?(H`HKC|(JvFCvun)0#ej zfD%tz%DvOVEa%=aec~PI<9~52k?$%>omPsEiw9K(jyF?(UL!XeA~d+XQ!dwZ0P-jl z0Z6Di*pLf@j4xpKc88ch(6&L#YPB_u|7q_F&&`sZdH{R#%TCnTh>v?z-SoYfeGjK#3k9a6I3$NK@w1@}uT)B!Tj(7@nJ z!R`d#jCTzU4USGup2Qm&E8-y!x=?w6j(--j@?W%Kf2Wh?eIv`&52XDsx&}N&?5+>h zH8eChtH*jiaU{FeZ77Sy#14vD#7e?&{Jiss#VNzx?3E*zmuzJ8WzsO4Kk+bp?ga;Nal- z(4C}XoAB!Df9Eb#1EVI!K+FaQ7phi@Z)20^?U6eD0}`Hd(k% zuZ9!eSbC2Ed$w{RD9%6{dd)B9K|yRcm*7kRDk8VAIAnO!DAu0q2m%6lsQ}BTJx~*k zScYqqIwB*pY}um1LK{}lyzitY2b7R=x*xDJYPgfKKgZY&1Lv2E@H=XnoSaG--*u`j zw$38249GH?6<+uK0BHe9b2x@ZM%fLMM$_U=S(==nVZDgw^4`vWZv-3Ym2(c%f)ry13$mF1DsT`E9aIU=DbMrB0E7jM<{ zid8Bo^heeGiO zqjpp--F1)rT~>eApcK0OoqIUGYn@s_JUrUKA}+KxY$}guGG)3a7$dnI9^vR4?p{Fx zy|OYnxt6@{7iSHPoTe@lLwpywTPP+O5rPqDsX!yc6(|p6wYNDUw3pN*Vy2`YKBQV$ z8a}jo^0ZlE9W5^pkB$IOGv?Nj;XNTR_orrgS-Eck#KEQ7+SPB}eNjXaZcxyyL_$;E zwLjgge$m#}euQ}WBBF&8MjFn!ev7we%UMuVWZ>eGn596D!V~?o?_#!RL9Z=i^~EiD zE%VLI6V(w<7nYA_QyR}jy?@Fv6R9dJ@T#7Fs*G7?Q#$ zC!;95J>;dP)1^P1COUjPr&MG%NKHtWv$kWV`T6c(7}46(6X3rfrYpq8i2~k_A3Mk0 zEHJ!75XfwexwtlSb9>HN#~i;;EiHx+!)+K-x!7jQ}0NU2y z3RIve$}`mSX{}&>MQcH$l!uQz%cwIPo-HoPh6~WS%ZP}+R7X+~55Y2GQ^> zg5ki4sVk3Iy8$X)j(!+asFdL{UzIFKnD^3T=^)<< zeT)Lfs71T#(s7J9PKt_#`Ky)%aog7bF&G+U>|ET-dnQTDs2^leH__>K)g4{4lswaP zvfd8948JPm+^}(+nYnrTb^~eSw;E7cl0yA19iwF_KrFGHN&W;%ujl4(L^~jRaeY z;Udr3Vb$Y$U0Yb8{hp*`4h4k)n3PcgyGEZL-b4Cg5xR$hu{zrq2$VOcDXWjafCin^ ztK%N;kJEul>si=0TM&HTypAjut2%6vC;TaBPW?(Oz=T?F`%C;APyUv@67C3p_v!8j z-A5970s^|?qIG^?mwr;a8WjZR{E6)k81B$YzuO#}5t*Jm$m+So(}%kLATO&6@pr`l zuWCYKdA*0OyfCx2676ac`|`F$#{)s<;om^a5K#AtnEsK%7-#tjuUrm4CE55vY z8T?&I9!jv?NF_>DFUQ23B_18gIVIwQcq#s0{(-M;5fxFWiXYx(ccCSxbf)rv?D7^k zX&%w*B+E5&Irqz|Hlbvz2X|2MMi8H@9B;OkhhIESAxG130|MmR-FGu5`^m`~^n_$; zhEEeq1xWbNdTK`wPfLSkm)8fX*^;ar*&k~g8itV#k{H{|ceKat=o zP`^<3_v?AM;mRX!T>OHC76ouTm<(ekr3Sitz_VXfnNp98h7Ut5S~bs(w-*@?F^TQ) z6%P)oHQAGw6LR{1!A=~f+nSNlbtFiD+5`EQP0OlIP8`k%@^tAjS`oVR)aO4(F=^5}Z$Z_nZMsC~Cl_cq2rc2j+|-MuVh{ zD-qZg-A;GqpX;4y{fJLWpGsUFCowwv4nMcGfP`Q~XoQc0sZa zj=-|#S0LQvmIz`19~50!w3umi(apWbB_iUVmtFbV<9R_#Q%Z(9aE}6=eb1tlXvqKF zIM`gVQ1Ye$Fd&@m6Ehlo1wy?qirmog3#kFN)13BqySuG~KK}U^qwcu>idWh`q`Pk8 zyqY!>hXUAVOEVM_LSGKwiFte{-#IBBWm%7yS-rR1%Yd9ix1%(}m590=GQfXaPtw#fe)q80~^Y6{X5dz(rOQat5U zPg6wP>W!U3`W1TwtHKeK{Yi7Bspgf@k-xKQM}>4cnizTVDR?fghMBn5^#AVnY`~F3 z!Ag+7v;PShqb?{7IY~K z(>Yl>s%M6_i?=Zxn@0Nd+G5ffU^WbGy2tNU_dsV3=`RR^3iarqfvthxY%AX@LK1?6 z|bY~pp-VZ>`H3ljte%_?YQmP zKk@lW)m^6Dtf}(KDgYGBRvehT%1sjo^Yx@NL^mCvBde4-dB@&C}=6m!LH! zqNmIJy}c9Dt7vkMv)V<5+lnL5Mw<#lAW?qlElW_)la7@reWAT(hCU=Sh^-C@9Ii%n zRaXc3Ltj)DDfj13$S1F6n;X}~>YK~ciXgC>G}Zrxv~8AFvPJ6(>~NXFP8He3$}oUOL#^s`aKc!waG^A z(aXz!R}a)$$Y;@M2l zYY3Z;zR_b&0-OO|dBGdKzKQJDdMZ6d8oW5asVPc=>=x_CU+LU;HBJ_@(|F?+Bb1TzCcj1f!hrSPZ(YM{)jDtkyd8<gvWEM(cY;#_-{VGHJPL4rrRiixWD4%_F&(kneYX z|HtlZQ+34*xof`$^*8yf0!+kch{2)Z^}7e@9VUQf8><`IpSBpZcd+A30~!%v5DB8b zt0)vefhA>SazOG->x+m7l3J9A8uT5AS zNy!SRARz2?`xPJwY%@Uh5_IhhG-jZH0h`0okf6hBYnTu0-y=fXJ$Mu-)3m;Xefx8c zWJllTeQ!?abvaQ-#+}jd4gGLK(iWYSW8o)LA&)|esPD9S!0J1weYc2St zUz8!{beHtVs)2z>nhgzI)XfTRX>JKYM`(KOiRwVl`HkSNb@l@JCRPgZ#@iIVl8qYcP1s zWP27(PL?F2Mu6NXCYI>XlvKTFI2Jbm2_GB>XwCYksR6`m>RpS3iuRO1TkOZy@#bJE zj7X_h_YIaLA7JJx(YfSOOeBcLCE%R$gJ5wbeK_4~c~D@LPSu<9gX@X6Uq0!2~UR?O-ybihU&?zTc*JO)oW8u05!BA0&vi)93`dzUrvc*NuV@Gfh3L`Iys7EJA4h6H)PctX+88Y*P3g*kZg8?e zLk(^>r#1tK$8|d1ymj82r2SZ&MYZ3Z&XQgpzbqkaue`CKp}m`l@D82ZF$5+@V4GoB zSlBes#WE^k!CG5e^W5)d^E}^fgwpr3#!HaVffj2WNLO`h;DIKLNlJz>mbRQ2wm(h^ zU24lcnHCA!f5~DZMkL`dWWJH|LgyJ)!(C>Tq zr{+e(cnJ4x+mSTgNDR!B`rAr6ba-lo!uIDD(&5qDF;*sABB!&?S)D|v$r2##V%f)4eiLDKE*~|tt_Re~5 zsyYNbWsv|Fkbq3oyLASHhNn>PHuLf(IoO?b5JNhsfD>wWyp~5pdd(H|z5C_7wNR)F z)Vq(sa?$675i3W*Jg4WXcTvc!Cd$C7_v6}@>1ui?-<29=NCKInf{j-SqhLQRY?LlO z374pc^!uJqlz(n8pf<7v@7+xH_LB7-UBbJKK0*ByI}Zs>{IIg{hLo10dlEx%I=QU` zmcTM{YU*wUUF{$?04w8YW8-_=7^5Sk$abpl?!(&z9XM)peUbNagidFZ4y^d|tm1$* zXc3e;!1;2hg%0Tp@TbQP;sG(z5CC&IpAtJ68-vmb6xbs(ma{-U<#IOu5fcN`ASJB_ z$ZGTl(72(Ycd_xofa*UKXvr^9oqNuP%qi+Rgv_zrXd|tq<%MfCiuoi(B}!7Bva)o= zwco4|YZP!&7)J&M*YR|3-_2}YyySz$RnHkOsoD?MAA?DN-san?14_c|9E5F;EC;i7 z-38#uDz*q%NH%U4!3&U(ka(Uhr>vG6` zMr;5-3Ec4a7a$e@hAmG|Pk`9SuUa13wSAMMB|w5v(5BW$$rtmZgX;fyy2`MuqAe{c z-3`*+Eh*iNG)Ol}cZh&=r*wCRG)RNAfRuE1chBa|+~MIL&xd%5fH;>H{^exS=Jwcg$f73bnFBsfySVuJ$ib&g@llGa-|=59p;~d74OcB zIx^Sx!_5KVTxrFHQN z!#^$_y8`rdG^J>MF12Iyz4;vH^7!rU=0?ap1N5TvDq;LSN5i}GvCx7Y8 zx3|GCiodgeW57cMB{Cp-Uw1kvky)`sL(KKR-fxgd)ny;Kx;rP#faZ~bnVO%1!gZxy zg=Wdm52CiNZUeX6mz7P>epNUkSy553pE!Qd^zZav`?LG2a^0GB0b>FLSQha$!eNFd zxw?W69a*R=U-@VDte6ctG8d}auMPH-fmDwG+$A8N>r%?1lFZooQhU{;lV71V8q;A5 zJ9nWpbR^}NbTW$nIp~PW{~I1kJX{+R;|s3finlnqBkZ>>7$JkVso%oF5CA~FPBOxS z|G%Q_jetNYVvp}&ygO!~s^P(yws+Kw1bDiV3y?8{N$lFrDNIUA9xu0RS>GpJtWzRR_ajfetORWP`KO1oTW^5j zsl>#J$o^eoN8_U6!(DN-O;RI|eHFJkfzYcg)bPRYeV?i4KT~%Zb{<_#^0SKqNhxqA zSGJ}9>=ln{Y@Fia#G;zQ*k@5(%k*;Dz1)d!U1p}EK^X?462XDUyI^kNZi$kjM#?J@ zKqV1Lr4B?1S5f(8KQXv%qaIiEQ6JCT*wyIg(=unP?Xa@m_x6u!+clE}P7Y^k!U8_h zX=7kS&#ewWQsW#qBr_piYI!l05FrSk$bNEGum^Y`f|r6t$;jAb6kIdormxt;=-+#isJdCF9Dfe_k5I^^N%7FmJjHI?$e7#7gV!fJK9e}+8$}ojn;uEvtHj}x z;zh))hF8ITRJ|VCIs3^aJtc!$q}as!(>H4HY}Er1cE{MaB`A2l)|Cl#{zEk;ARul7 z1Vdz|7^$04EkqNER86oNHB!Jq0v9Ui(+npMfO8vQc^DZwqpADWXwcVLd@!9uL$cT0 z+{SKvK(b!0+m?KpPdNtUZ$O0bT6aW6v40Rm7M68nH@N>>q}AcLweYO8@-jc}ZnUE) zD<@}VXBTZy{u~MyD0;ZkkyVuSHT87_KnYA;45&@ihm&eNdSEqXrvdA2+{@Wyc>H(* z6DsbnMlD93*q`3hlN&-CCUDh__;^C{0@D9hf2=%Tdn{4DSc60aBd~yp1btGK)wE|I zNML>;wIx2kN3VEZfx|Y0z3kK`FO+EYgZg%WynrKNuz^E*vc#zPMod`qlDqaBXL|TD zs}#JLae_c{UUW26-idu(d(VOI2I0yoNTjrV?7;(_+JCSlF%bk*e41+VztdL+-QYa;xqN%qo|m)YP^2#BNNBTQP4#W4u%Zd#DP^VA?6sC zns3Ubx_8IOK?eW9apBQM;E}_xnl@Wm)|hED7jGLl8EW>1(i6CglGCbBOgflb=$Zo4 z$d5Nns9v_Vk%iJh!-5;k)Ek9semg~Co}7A`r9@O(3RKucfCVX=DPIc=f(1~$JU9@@ zR7{7~-egynGqTq$u8f0K4YYozZv)z{?+*Y9G$U1~;Py^P5jB6txH){Ksk$4YB8 zTB75FNT-Nsr=RtS;0tsc1ml^JDJIyP+m1a+Or`}zc^V}kSYd=OgXn`t9In0x%r_?8 z276%9{HUoJd}olo#jYqX1~RExB;_kKY!2BnG=?S0H0!K-V6Dr_(7%0KQR>`jB@NpX zZ4xB5ed@+d&Pdxxm1Ef|EUWZ1AW~WwL25+>`HVSYJh@Cqs;iQ#2jaPgV_n1*&riNa zzC)G}RWxx^?wqpn1~7{D&*fH3r?I;>R-v@==+G)%(>qn&vnUi-P7NE7QMD`hKaJ;m6+&b$R% z^h8l;(H{gxT^cD*Uw*{_pYbmkC`g*9eV)_ONQ$=u$?3`OEr7oe^xKts^HZ) z<1mN;wDtVaBs45ckz+YzfR3Wl)=ob@rk*m+@fPtO28gUhZhj6sOEj1g3oX)l>^upU z{K_02K|!4Vh&&j0qCB(}qT>ILOCSPtfHo{GA-s)gno%GC9LZQF@!~0~;G+h<3Xh6WO2RdO@0-)wXj?}UkK|F|jRSYPA43h5e77>q&NhET=vgNDaFin!4rO>prYs1ojZ$iq-%Z?>k^Pb!Ne8|ofq2` z3eWthA;RR#7q9{`kpjVUh;3GF7LcU22@j_m8Y0I-aL6tR1u|NR`ugwUu>jKe2m-#W z6j1=oQ8P9|iVkfpD@!{%X8zeT6-d|Xns#66ZkE>^GR*E@cH~d;xCySz2a`6*=N;V^ z<9KQ|)Z+Ca#NZHzpS6bE+>HFbFjlu}&!K_AWloS}+z#o+{Gl6hO$%|KwcB;tBMPnV zM|eAg#@rdTYvY9tp+R(RA`ukd~6XBhzZLCLsn^4JPq3^>*}k3N z?NbdRCifdIr)^3d>yfc>3q=u#FYWE=M~9n*>ScHid>%K4+T>@4T_D#EcnTvt1>-0u z-t!HmM4{x?;9bbc(vFQ$6Gcu6@<>bh3IWwsZaJg*))tkueEV0SBOf1db7TW)(dcj< zCC%F}ixbX!stsj2Phpe_m|Q2x^KMEQ;&T6bOOBJVZv*e4)*V%=)eWFzs(U zN9bC=2@UN^ziDI;XLZlf+rXC#8ozxeFSqUYram9zcww=Bo-5g^H_67MCD~BmU=kL*yd(6 z<+T`9E91}q(5M)p|EmSiVFykpRTU9Rf-N;C4xf0+Ec(QB^#-$j8HK4_HF`XvQ#OHJ zCFvh5tA%N{>m4r-9q~cbB-H<R!z_<7GZX*M8BqsUaUFu0ay|Y&O}2Ac4*cE6u_Y?{~o}_ z7rxVnQsOJbO;E;3ua6V2+>N>2ZZ|$dkctRHe0IflTl_J^?UAe zb9{0NL8A0xn(lia{h52wFz49x8;$QeSQ7^1zctI$K*C(5!LM|`2^E6Y)@GwV1c47E zz+$oIr8qNRkm4DnQty0pqG7gM|VRY z;X~U*X^uv}66^=^Jd|iEan!R;Z0kwX=w}T)_A} z>+{C@G$`6;IT^JPTzLY^5Q2!|R2a5aq-0bk|3L9@A6Gc832(udgjK&%Z8WO-jkz(AgMCl#CrLisQL=QL!8ZKl zeBL2>L5Eq*N*2zW#z29^1+Y@wrGIgf?Y?(YfqXtA?@QMcy)F4cY1naZcdt(v(ElK zKYyCf!?lXOe&!<^<)CF;1a+)9hK#%bra@q6iI7ax83SUvpByUMi_ zaBU)Cco4k3!!hiP`1uaaRwt9h$ z5NVf_z>%H(4FqehbMksrK8VGQYSNBX%*$b9o|^8(pZ>lw9y2v~ddowh zNb|fZA+=ggMA5jY&pz5dV;*hT;Av$G_s5=Ecq4_h>znwU0Mk|?pH8Z2cZDj0avApS z6}_`3?}Epk&6j0z70!~9WjPkO%d9N91lfwEg!87}WR>b&xGCDGa*k=}EV> zTH7wGB&QC0wE-XCFjI~iuT29*D=lL_qfpkr84V(0RItqDb?sON(o&Uau@)Q5kwH9q z(3qkgCg!GvxoTV*e_uqg1(0h!f9)3}K0k8Z-rR|gCAV;R>LOhV2mpe`^-Q&4u9Q`o zxZZsi-j8tcvhWu;k|oI`8Inj3W5K+dB>DApzt4KeV?(4l$uXjSYmXU{N^;U0vljmz zqpdoaGez-t! zN}2BW=xbX?8H*Qx(yg-Gj<{Iu))JxirM1>Go-o_4SWr+OK(F-9@*xsr!oMF5s5>m_@l^jjy1vA3-l5l{f zwE63v>Q4e>pS(Px4_--E;W$QeGCAP-1h20HeUdLyA$&4s_%5G3~ z>Ueo!LW>klpdkgT&_d%d4~iFH?CxEzUPx$rDG<*jglpRbsBlFVLvjA)pL;PUku8V= zRA#mPTK6X94Z75)Pw&7!*tpxtD)Nnkp3a^f?w2~4t!ru_kio+2y=<4>Y6STb*Cf26 zUtPIh?xw5Q*Um`Wvr^SWgzZ>KX|Y0T@Ft|cTXGJW5?V(p2Cq>hxY&WQAbm@%B^l!T zKl)|%%nNVmkHnJBzoHd?OW;ADLlp4){FPFHJOjI+;B(VHy~f|a*;Cda7mO67ZHb%M zF!73oo>y->OAYpYZWXzNh3U%v-JhoFZWhcSvh4^mvlyApeZMdr;4*bvv)5ew zAp@9iY+_RXvB?1K&xI0N`rMql__Z^KO6@itGLJUEc>SfvZe8~IL4}RIIsf@}>i`o` z>7*(W-@9B&70brFsGC_rm*(BwlOhXCxUz}g<%@d2E&z1!;wEfksHjt1tew?Uyi_q9 zdslN)lbcLjiGU~_b9K(1Vz~R)F+xV8)R{^in~E-0)p5=hDY-_olBHcp7#hOU?+>rK zofg7s(-71KiQIf=eU8BCuBV|l7CtVd`##8yy!*VYmgOO{C*bQc@1KEM;7C86malc% zDz`g=_luWGEKYE=(<)FE&OvMPG)XQe;-&R@qCy@!+ry8tv4t}k$H448u2@3&r%MS5 zF+bhV#3@Zl)VCM0=Gt%1YZ8GpfJYcRSR`8^T=X$_njRCS<@z&JV4rz8-9NfnN~{R< zPXhT3I2i zlU-G76VX zoF32Dxj%ia{M3e*s44?wD)ki=dX1*=8u6hfJ7a61LdQ+7ANTf{(pys$`v%*H?S2Q1$}zI4RdRUNl)uGXVTeTjhkEEza~%PE%$K^WU=Cj{sU`mc``9GaO`3orkwahHD@zS1;Mkg%eQmHrNDle`GG zaX+ZXSxlujr*2tyNKWVHAJk^`!H8pCGi#edEk;RBB5I;4G4+yZcB3bX88O%E>+|*F zrF0%J8fM@JL>5#-Ka_inS<8{$yw6R$y^*#h?&%XxSNk`$vP5K?8T+SHu1&LHCpTKO z)iaPHHl8B}WMz|pPM4LHb^Jr~-&)8wBrCIAg?@QaJ8y5tGbv%lv+?S_ zb1#p>+`s{g$K9rZnf(e4%Z%1NwK(hp#U`%x?G?wy!*^c}IpusrpPs<0ymr2e$YoV`If1a9#;j2Ul)T*Crzc zmE^M#nC33y!4zpM`qm8GIV5Hf$YYFlFty(>L&nc}b-6oCEn@b*B zEX_%e9v-I0+&tyAJlyR0me7tq^*WggCg~GQ^plhjb$nR507c23q&FsHtX!^Kq=xZ4 zeR7Arr#umYtotGxbsL-Nl$w@mLR*u9VYZU#K-E9YeqoKgSpRZHM-Fxj=!@>#nFHt7 zZVGe*OWlFsCTOl?))~**X)zoAW5sz0f^5fA6Aj#<)yqMfOw+uI90cnY`+OY-h(Q#a02 zQ`qZog>E4XZo6^g;+M1VM03!pe%;f*UI9SKn4uc1mHgue>xZG5h0tD^Y`pM^$@#&R z=L;dsP;o7A>twYZaf|wO2ETL2o7w|{mykGdPOP}Pq94K)6Na2=7L@sMl<2_pB#z$R zb(#}5a{&eQd8ICx!o>wXcwK&#u(RiPkYu|<(y5U!V#J#cVb{%!HUVXAjs7c}*;?0m zcIr0$4>zNB>(`!lWgYhn#J-Pbo5D(Q6VUkT`au!&>uDIgVpUO?Q;0sFk-wekuH4TA zZEh)nvgsKMbj5dewz{zL*vk#>Hojg>IVz@854l zr5!!D_ns9=dTEg=KMAlRtU!)3)O$i)IM>dX;$Hv~Qv_{Xl{i9wyS zb!E#VOtI(l>;-JYQq>eM_Hg3FhxAeAssL!75-+BpWvyCXT;gm9qbIiOjh}ErF2?XB zsUY0D3N&~I{6kcy`|oL(Qt!Ttk<-!XsFebwpeDKVj@d8Ph?Y5UFoRKz9wJXh#5xrr zL*I||w~v7?A*kL6@ZF%d>*ynPE8 z6Lu3;edq96Ew20p=Qc0HZ$F*inTJ!0Y^%#s%{Lnxdt3jsKcYr#ZD^gpnIQvmMiE9F zIY-DxOn=#e+}vFMR*-($0rY}}KYwCX%?{sP>^L+prSmxj;kq7g&h1T!OT@0{k}GEM z4>W@P1P>j6wX=0rpycfzv-0wmx5JV%l~t=nPmX{M2TDYkYw+q268_4oUA)Jr8AZK7 zv_#d%a>tx2O}oaP>>!CrtVC_{J?D1@f-SC9-cFRwv$d z>3Ky;7n95F5v@yVW2q7!rQQ}PW*84AG0h!aZyLUEbPGLA3ALlsWcuB@`hAl$C(Zd7 z0}3t5*xoEbFe#)=vueAd@j6=-9_xqo-Q^C4)=#x)St|QcNe+)d0%ty$J#K80R+>bX zm%I$!6KOIgvA_lFydn+RLB__30qsS@c?Zvqz2Gxjx=RW z;^w9@Ft?{?Ao~m3fKG*w5L`RvBS+K(;W=o~jvO2%%uHt5W>k9`48$E-W6xg+`1pAz z{)*48l7cP{D?U^&4Y@*6EVWPcW|eeJIzd@^J#nSQV-24M$_L%q6XyDGuU8Fg?Pv+| zq#)=c?P`#&NLgCwh@#Ke4ehrufl0%Bi~7PX3c2}6lV9k$SIqm&HR~<{9im9^dk#=Q z+5~GVC!9Y(4pH8_^2hjrgR(D;zTKmH2O$L`!i+uchDk)$F=kCn#T?&Tk6Q2#Se z&CX6lffa_1GEB*d;o-Y^p?Z0v`0b6y-H$3c4qeX8&6MO%v9gjuQOm?EG|`c(X(5K} zWfOZWu#L7wop-i=>#E8IYpSVC=R1d%$dikk&@z=9Kk*`g6COOWo{bIp+b6Ic92@e) zsPlon)5?wpi{=L}K0eQ)Ex2YZTty&KN=jb44YfMn3GzZ#hH$4(pTM+a@Z9}qWnOO> zJcCF8pPB9`x^Q!)aA|$~`MNjcTfq)h;G}0;Q<<18>o$ZA=hF8r#r-`xdwM@?0z7;U zKv7Ob(&yqnfAxx?3icL#xS|942>f^NKvGahYzfMKx%kwK1lMQq*1*J?01T+Rn+uxgY&T2i!ocIk!_&4#WzTYF#R?Q!*Sho+}>+ zB>6}@T&+VlG6Z^+wajG0kt6ewt!@$oBQAo$YMnu88L}ShKF?6}U?IHTgBzOK0@;Gj zIu`6TyzpAPsvl5x@}yxHa+>%h+Sb|TDSn4~T!I;pRfp~;Cq{#^S}l&|j@R)daN;yp zZTfRFLsw~tMSr!&zVl+&4j-CAL!It6_Bc0q>>fJ@Kugpy0<(Jau_O~1u5$ZHj{LJP zanM_qXa2wYs~@vEZd1P~KzbQu$d(G7X~TbNi@Lsa;Bh?diT&4Z;Bj7Xde@DF%){$3 z5=kqI7isOmQKC$bUCc$EqD|iQO`4PxBhp`$tWjQt)@;5EoGzE|NOEaGPZp$FLWvPs z>wT=(5*%a+NJ%0Cw(6pSwR2BxgO349nFjO*IU)IwznAf9Mr(%1TH^ne9FzD8z zV0y%b?hJd!^}J>WJNHuf1I&t#1R)1hG~GfJoZQ@CaDdX;oJll#lj+xy!I8~vFlSy_ zBWPP}gzuRQ7IPxiXP_i>MVFMub@ecW)Xn{y8jyqZn3EJj>+4gJd) zU!OjTEb>oR3=G!*lLdg?SRNV@O!4J7bjE-S{4FaNe{f7dNC)_;S#y&=YleV{+OK6N z@bU!NN8q-^`>7Mf#XUK(qC`m`QG%shf=xOYz8`?{7NwCtRz{XBrMjpn-l!e}A$X5~ zDBsr^OC=7Va><{RJJ-)0hY%45herU)BvPiqvF|wXcS`Jwu5ND8Uh+buY>9Y|@+xYO zeMDcAuMGjiY;w~>4(B$@Uyij<2m2N1mxo=vszZCHV|nN*sr1R03)O@Kneukm?Q>cg z|BVxUZ&IQthla7PZmN{2{D%06sjaQir2sr6$iO}wwKL)bdM@ZkSxy3qtwgK*!UOvV zSj#W2XaB}j^t}ef#6ErNdWP%DmJa%qn}?0%50XE7bCo~b7{k6Nz_t|Nzw)jqiNV)Q zv8w;0Oape%M2I+#_k_&sd-T48L>tqL4YK}sB6?$JbR{kLRT5HV;XgUw?culF2=>?W zH9dWRXTKW z%r^~x)y_FMtWHiW+`ZGAB_ww1b(RIafW5T3AU|7~R=QCK{A>WE1FO06# zbflLE!@BvoY9pxEAVwJ_C8@ARLxL&hj|k00yV3%4<4}&@)JUOtFHEE2-=N=; zYABO+B4R96dq zt^E4%ofK}d$r>B@%RmwCu#n0X(Y(~=a!&caQYTQQXahWE@FRf2p+||kAML8phlf?; zArX~V6#;^vvP-1fq3Cxm2BJ;nV4tPh#jzj6*bF~F8|RKZ?>%WiH9T~F;ovC%Hd5$F z(H({pd5mrcXxc8LqbB+J!rp))D9)nJh%1G4-#HX}AAsMDiWzb6cNc*ppI9@90{tb1;(IuRI%CCc8)g6-D5mR}qlpA;lExAAEz#(Iz&gQ^RMR{B7Vx-+oi_GfBJ zOkZE$QT35SN=yu@)%D1Dw(=7Zzw2jNg`z=2!z*A&tt=)LVnD1{m6691iF;NW*UnKh zZqQlLd{LE&Lz6(4!9q7-yL-;}QEkf@3VfI%g|qyrgEBpHz8UpS+`PErH%#fq0$1lg zj|$ZoecRa=V`>eDg7HwjI%^5n^(XvlenrPE-j99A?-x5~Ds-EH!(7>?x9*>e9^cP6 z+ZIrni(^dLgF$-LHnYQeF7=@g4Tbt=b0pqg2{!Ljns+unQe4ftdER#2NZ#Hz9s%3| z303kg+79_*X~0ptsrMT&1-tgSZ$4i{M2XW4jhSz?c|2aPifD{xMGG>036rx0^m!s6 z1(+G~c=!o}7e>=)lxiDVQd_QFiEQV0{-ow^6*Bd0ZsMOkFvB7-TZBB>U9LF>{vPF+ znA{Xcg9d@SaWTTOapIH&R76#5?*KANLTJ*v*PA~ZpB5|fYe_L^nook5N(KYd@6EFz znwJg%;FJMJY`BI26)lt^wBd4aq+xHFC66VVgZJqjG3HT|rdNTbeJyUT~(^`6p}c{Z|WM(VEtPgF9=->^*+cl#j%{L_YBs&Gf;E zdHLUl(J`c8*$jb-jXV;np7wUxlvtkt-n*dd8N8hA#crw&TFEVMu(XqEGfM(5KGn{T z!|W_E-S|(?5<+J1ECZ`=6 zm64dsvj@Y03&>-cNEoM!wVBq!pqQ77CG@XXKQSY9Mhne`K^p{$YePUhs$pTHV@h0S zeNd3c(r&aT10=d%4I9ezEM{aMFnNKDV2wN@*ES_v5H&n)c5d8V(=RERuE@>!DNHfX zXk=?0C?>k>c_yN7K3mY_(!Rd0sfvn-7QOG}=%A|B$%yNC&|szzgB6JXEPS9CIXShp zwj4Y(VaWn}?o^hi#uVqvv6NwS++GrX;&bBV4Omqf#V}tHJYX1nHMfS+WUl^>rI;cf zA0IRKP{)?r9;KMI1@(>b1Z|BL5*^M)w2VrkHJ5cgL7*zAuN~>mBH~9@a3$+fD*Ygy zuY6x{eMyD2RnSTK&w{$A(thoJbIgV;jDuDA0oE(}1$I@p!|{}jO98ki}rz&Wc}S91G9s;*KRDZIlU z$k{-}vE}3fWHw!y1?#(Hejf*@+qV~c#b8twgvkjUQH-2?d9lJzk)xGyjq=ztYE-cy{uFOX(aZT;+BPK`;EnuKeXx3_IgHK-dF5 zp?D!ytBIMZ zp5}%Ix{5ApG2{^m*U9$kL`X$L+A$txFFprjhnz|^s5azBqB(S$M%-%iQGy2BrJmZ$R*8gB7X*i>aS6I0>D-!}Ttp(=Z^cjgwr((fE#^xC+yrpAc*oR1MNR^pl6-6h~+odQ+EXYE#3S?ax(0y!D3 zG^_pN!jhu5Ue@%2Jw3IX6ZzYfZ_PPcy*kC(`Vl;NU%ycYVN~ZrErdC(~ukX`C*u0f90zJH;;`uiczv@LU)&$bui) zdA(ELn>!_=)k#8y7vZo2h0$=7?X{AKi;_pN{vG|izIJ@7H3Jdvz!vpjV}m&_2TtsgBpgtc zJ6(ZjCk5(seHL(Sk>jD{OsqIYSQdzl_kIJ20Eqt#L!IaI+E_;j3 z0AIlYj~i$T?W=zgvt{}S&M(RX_J4k{`LL>@Z_Skg?zCjwEJia~#Ac(<;d)5!6Nq?o z==Rgh`NmHSNBwVJ!12X{T~+gRM%RvtW}w3m%)}Gg0?i}rs<|OuZS$A|v#bPWhi`jk zSR4jDkdxK^Owfjbsm;;kk?-6Ag-C(_H_&xeObDgFXdt;EDGkx@6!-Oat_bkh?mLsxM6Q-XgmSjb17 z?d(IKRwHZo>k4^vbs7V!#<3BY2?;c(l)TyT|CMA$Guwj68?V!9z!A3KisQ5%5)HUn zGILF9?bfc|w*By{=-BFBrw)5|Zj7xTELfwoZf!(*V|Wl9JfY=H9{ccbK?BbO$bpWA zq{k8YAw;ugDIkMa@#cV=zuNH6qQ zlSvho#9)v@?N8S=W2kmP+2y6GUx#;v`I60R4Gg;a-^EUcNerAP1utENtn2-^G|ddo zJgm7EZ)D)}?x4I4HctPI(IUH$2^_N$yWutJ{vtu>XHEU9RYAZ=r*r8^bx?)NiieGd zgn%RolW`==r-N0jhVa+gqfDQ?`rev%#Pc2=qH4#Dr168n_a6p_o0-Ae@?P>}oniIL z>J(?KcuK!+%R5i|*7_rL-;nhRzITPNKU(ht1T)X%pKmtC{vh8DPVO6H0bkz$SJp^H4R*bkJ@#`HeaX&sRF^ZE$q5pLC>_M z+$PxqM!`2KWhKejxp1|=3Q4}0T?{2!PFox2{%*Ax`@_#p{_;!6yujEN=c)ZXaChH+ z%H1`+l_WhwOL@-SDfuVTU1PJE7)^NT`_uihDr&HL?Y&Ix)E zUt>RhNW4ZK89&EIS8^peiWOTL4yMQi_hIsS)jMBVWfm`CoQ{cHOQ2YHRg{Q9h8^G@CK+er^$II8rsi}A< z{{Ph%Q-0ukHK*PJWCo=(PiWBOPTjE~zf7<*7j=p&1Cb>`X}sjL$b!0TAv7{Fw1dLuzaK>VDB zG^1})*xDm)*Z5p}f*&peD&V54N-T*`3*U)|fp>+u)o3blyYKMH@K7ki$cLJotn|&P z0nJe;qe^2y+6knD$qS>!!+}!=AoeOQHcqs3K0>9c2)t#7=-@C9J^-{ht&YO`L&VlP zB5KdmZQ`a{BnbaV=+pXjKQs!l>_ND%G&uf_==ALP8N&9Ts=tQYmb#z%LAK}FiN>_c zDzabDeaVAp*Bqx~swSRY;QEjEjk>)XIH8i_#%y%N#kO(m11;z<&TZu z6pKtRD*8AwXPYQ~KfiyNbJX1XIZ%q*Q|i*;g}qSV(u~iIM})T>Xps^6q3%LfRvB>m z8}sASh&YCT1&gD!Uib$z78X70eZaEY=5bC*M~xXiycJXqvnyYw7Dwr@yD5{oP#?}#gc(zpC@3r`2^%f+%;VzX^6J-i z7a*Q22gys#<3)2tSWkr z3fhO)UdVAq?E)gCf&1&&LhM5CcV;xr$RJ(2_QVR^M#rQ2*|B0+S@Qo|;m?-42L~q0 zZ5~Zawzka_fiE`|d-uwX4E>cywy^izmM#dDIu^zgsy%OqxM3bKY&D%FG5cwLG(u@zL-qYKeo)T!`1prYn5_{?5p7&bjQ%Nfi2tZZcHQNLAZQcgRI zs2JndnWA+o31Q|{-eX_`oX(gnc9M4$4{D&8bIXU>#~@PDZ-Ub)oA1v~-tk|!_lxX_ z<@?C?D;n?>*EbJ7ZKn~PyVc%81laTSdG9)uOl3THLCy7@0$oE>(}WFgmk4haNFc+_ z#|t@+MHl9l6u{Ls%k&AM(?%+)+W1)S{OJ6I5e?yNdoUhew56~#tfhgQ$U(*ci0Q$@ zKzYwu{j(M$ZF&eC=dmfNLqIkB@8Q1K#?At03G!1%(=DxEn`_YK=j$;3t*@V$Uty7A zjr%UBJ3KV)0Vq`mUa_|7ib(zw1`4K6Qg>~5;YpGp-YwYfWrG&TaMd(4K&Aubo7=l_ z-?1Lx-lq*KmrOd)XSUgaQhf97cS_5k?g^zaC%zR9VslDLZSQ-btjh!}RVJKyvg__% zpy%=@eY@=cEnE4wsVv$i_eX@lHYK#CNulCoT9D!d|6P2c-JH3;2|Xz z&EMa1lSuQCe9MXBd)n_Tza0tybczc+&D4-TKUP5 z?cqx5U~+Vz6bC3IKwy9XpFxB0u8L$w#aDH-nZxngaS=T~Z&X35jIfA9S|le$8?a5y zQ_`cgDWRFPU2+{kUG5c@l;mIx2{$;#9kpwzUwQ(VZlq}wRWhGT0%rBkt4$019)wc* z+pM1+?)5WJU|QWuVtbpuGhtDzX8mfiw`wn=>{9wldPDXkmR+}`;1(QQR+Y7{*X9}^ ze#VI2q12n2E1vhX%J)g-dw^XSk(VYVM%2U{tD;-cTOj3{=Hi-DRV}u$$*ZV}-g4Rj z>VJ-H*E-Psy<&Di1NmnE-@jda;_VhHIRJ>XIc+1!4Gq(c4aQbg%nl#tNtwO>BU4>a zsA}2hR9X-?t*)*WA$gr4AY-I~gJ?0n?QFvUgs0`va(*ixdq+Wha|#@~N2Q?TRAojwryQ%~@YWT(!-rJHM3ucyXjAUP!M zXp5{dPTNm!I4zX%teyNWlm)8|*4tt-w-YG&tt>62|HE>=iimGF) z#Ibbju9wjC7ahtC|EY0L$*AR}o5E>Elrt{ZdH-pQUS{=%?o6ThRG}E}a27ohZYnBN zQet^=X?Smg!d=ivO_r*$@-??{Q(o#V(5hn9rC`O=#ZqO!gNY7CMe*oGuR=?pY0&|D zSU*~}#FXb(>C>)K81IS^89`cTMDRxM-@enBETDdLqOTvR{9`n%HsSU`p0zkXn>D-! z9n1#|qLsaL_ISNO3e&Crh?`=0nQaET6Wq$$1E@M?`_sNxF>|!Yw!KEaC z;V~k`0X$xzNHZMB60if1^?~Jf5Q8r%DH$S8-gYs@|N8GQwYoWNkEGBI6hU5mEAyig zR(ZS#OxB+&3yGhHt2XL^y*^$_BU=1lB{1a~2=rD$1#x@5y=Vr{lGH$E>Uwf{o+UJ7 zHlYd?RYSXSJNag33|eMfS>=~-xD%r!E#=wN4nnhD%HV|(FRw@MfE&qh-&zRy*Ehal zQ8Q>S&!c4NQFzpKsr)BdkzK48Li?o>D%%qZ-?5{;JZGwFjM7&G7WyfCIkK`| zPIy6o2a45VdZzaE1CPhAK}0CvJH=8K1F&<4R#tN$<_Ryd7G9FbE}f?f$d(*R5=R@c z+IQ}P#Mo*t+9D$Ft*nqH7cj-DW{rnAIf~AWS7w2|FRj%JxSrUn_Rr0+JOvk9)m^LF zu^>8rGw?4SE*xy>`NTYuBM)ohYqbnXt49(CW@i_u^fh~8pA@MZP?9^|4D?Lp*U+H! zob_~*m=euq5{Y2tm|K|}8}#WldB!J@j{Jge)|lUjqOxr#Mi+Tgp(tFYo;{6#dvX8` zG%)7jk9RiFh;2`jAfLZB!4-6SKz|GH=#QysaxU8V;5Gs!9-x$86Zm8>yufH4z{!B? zOggR?z#gErkz-&0jPRzK93t5GXHAqhrS-hdKbuu(VS-@2L8l9_eScCzAZ_oo9mq`T z2Wnq-RaGtEAJfl@esXa!Ehwn@nd=YajxDgTO{Jw_wreZhri0(D2s!t5FcFa1k`< zhUKsPvsL<$vwPxg-J2!T2NQ&mA2n`s&+aD+qfmZb&6!BYInQTyfDlsPCy#!5xVgAq zu$!8n=RLy1tmaXy#_j8%L2p9kU9hRwDJd(Bxqbhk8%G)N25-Q6JF-Q6wS-3=n$-3=lQ@8OyE`Z^{dwBXCAS|=+A?$TS+#2K1 z(KFYDkHEz!JZ__gPV|V@U&&;HdY_xdQ zym(Lu2`3$5$~?~$>-pE3#pBZD+V@_E7-7VGa-KMzvaff^D7L5Dm6*(xsDmIB(vMt@ z>4NKt3iZwX_y*Sw^owlHb1f@Ejs?DhrM)JT2uo(xTsk^aM)uS!Y9Gs#SaU65Uj6!h zM2OOhIQ)A)tHO+mQX7^gO58+6DYCsGp}heKNmy-Mg#pI58=Lh@z$jTp|(XUbk*nfJ$$GB|YoXkE$Ap{uhn>&7eT zUD*^XnPBkP68|?d#XwFUF~P}+XKrbDpCyF0yCWZ&G??#xfA$u7B#GfwPA5ZTpX*pp z5U3KX!{hLp)+6R)i+_BiD0@#gPDVxMul(!+tE$wn5lrK>o93APZh*2N7o_#Sr)%&! zIkAur%smQ!W}m<2herCx-}d};?|d;x0e)i*_p9m8T5Wh( zcpFcv-q(w%g@^xpm6@?PoJ}j1Qm$?MXudi?hX1>WN0x{9V0@4Q!ox`dzT24tAw1xz zsqMvK6w5v)vd;FzBb=ZH%bBJI^FMH=5w89L(VhOKc*_hFi!s_^3g-=w zd@&5fh-XfUNUzai7=+?~{W*=p*w5kbMLMy(_*L1GUOEDJ%s_H~2jK@M@S~uVDmA&f z&Nr6%IAa=SR3XGp8qq=EH*MZPq}WlS!#%fonZN!}Jpb*t?C8qO-#`)`U6nQ%h&1@p?lXe7a^F}7hc#v^O!kNj2wuy)$&)PJ@NzN z2!n~yGhCq}bhgBoJQR|Mdo5hI?;Sc5X^NqDk3`YY?|K^~-Xw9Zh9e)>3K_mTTKQTp#7lE9{#-wU5b}!F&s+V8dO>S7vfbL4W zR?YclJ;3?2^}69|M*StOpxpEC$2X0QTlu-j9DT3Xv50Qd2!)T2f3#2=lE&>=WjageaJ(QQCbs3Iq@ghaN_r^i z=)w_qPKo3gamXZMPg$dE5TIw5b#O15Ks(9@>d*|mHOukqiob8TF=<1|h#+B~gtHCB zz?_hm`oN$fo4dOkk$ZOLW6pCc$aPgKP^0GE#dxoy}7}#X9x5@z?4MpTHgQap52) zO%zh*xqp_&BB=?2QhBwO&D-0763Jt`3)6nv= zYs>5+(B6T_k9BAFdVl>p`IwSOt`ys`z9NW0t87lGm={kvc>Z(F%GUTXjyTs;iC_OU zcyuo zx%`Y4wzi;i-ron`pj(wYH~5P~2|1&4j*pLi6?Xvz=F`@oA{&eB-2Fo-Cmqw(CCFyEGD4Q1At)m9CgIiByWWMQvFE?< z{}kLmE6`%Rzg}^r_XIe1<>E2eOH&I#QPkk`4U!`DbVW36aQ52utv~Ixkt=t`6?bL( z!^LoJUY`50xumr8PId?#PPD`7)RgeoukS$%>0VpWvQz9cbGC7lT(<++j4eEhRm~^cc@8B-A+R}W;)r)&mI+VSEfsQ2qwSO6&ZRM zmCC%omVd}(rfm2QEoP#~GE?+>{}T};Vv*JDp3P&WD;~l8;l>a(oE!71+wowosuH1A zqPK-gp(2s^V`C=i#Dt~nltumKU#Gx&72={MHr#WJVK}MqTv=F9RMN!jYURR%hBnXf z+*NA16cK>5!0Gn8Q(rlPOAdq9U<^!qrNxCIsKaV7nX>Su~$eE~gPq z;dpPMAwZ~1q7|k|3rqq-l-Dn*8&Z8P#nqF${@RHM*Y)G$P|~n4@uvNe%b9b&VL0aH zm87L3C!@2-jNgl$$bpkUaWysNG~5v0(A70QInuj)dIWFi1Nk^h^N{(yiI?3qIQs{S zaf6;V!A1hz??l?nS!P-Jd=L?MS4#`ybJ0;JNx++2+$TzHVw$9;5lYJzpB5JfawfaP z&fQ`8E&!pS*ObEs?H%Z68u zTC0#rP2o6rI9`+_5-)g*_wa^Mfi48in(M8 zt0G$4jUAFRiQUq3h(J^^|^)K+{flJjPu9|h&5w|4EBHpR%mXK-_nFrGAL}Lfk$O+ z4IbLp8_blDnybHSR*fJ;O32b1%7!CUEl&^_X^`H2glSmc5iG5$vTgcBqsCI-qyQ7QSg zs^_+T3sa)mu!ble?UQ501~I2tyR^P6EN(JC|2j4YMWyJ3cu@#Qo8jd(LnynyR2C(b6lZE`x;o?_~R7FosiBSq!|Ar}Wh<*XiuyvE!PqFdrN9b55XiYZA=- z#deWAi>q@Loa40g@!dYq1cS)!no3bHpMHfXoi7O@}Ix5*)nfIWK$MGw)ZhU;g99u-$csLyI7k#N@3R zA74#BUN4KdtXNRga&FX=Ni?M|E|~pD#T}hqw0`mqCGaa2wWg=D7Vh-}OVoKD#ZwHz zTQn9m?>QCp+UZvwZeLNWN@ba-&V8xEx>P zyw_zIP}wAH;;x;Vm3X)f0%%TBOAQM-ItGdon%!e#hPDVc1GCBDe&>mu4r`KljoQ0E zw(l$+$J?!DzgODRw9;XU#`xQgjejB;eu(SUR1XP=H$a+>Lxc}5l}wIyOXcTKsbKKB zh50BU;=Q~$rKnsS!5O8vcW^fG=P19dSI9IZz)PzSIj2u=<_D80V-m|_1PObY=yXOf zO}0`9IMDK9xxus-NAnf^YUhVfw%Gr3FTrbi9A>dF2d z-PLlX#yY#C;-zNm;*kg!#Gs7=;tXG3hP&cdoHKj(-F4PES)LH-G&TC&*rdN;; zIC=~@w1%@ksi-IFp&u>U)CJ^z9KQAD<$hOxI2jja=O`k74R_Xm$rpc}v$uZ%EF& zAxf>31WlJ9*OSI~kZ3Hp&$~DJ@?)eA!b3%7WE;}W&X)$k;8wAppW*}l6E2y}nLXrOnCWXeUQ}(@eFy4Dz2tI4&!6s36;xEP@FoAZ3OO%d3f!Ge8Viyf zjX#4c-$=Ka3GBr#+47RR7IcE9{-fIPRYUhkirjE{d~Rf9F5j(;1BPXE6-x z^N-&D4&L*+)h&oPq{k;2rtBLfsN8xG4pQNyKYV@L+R8+;a=6*59~Ert*K0kJloGDy zZgNf(41G`2G~bjJc8C!{?CAR@7VLzjtUbBL7K+6JofzjQiEP{fSFFp3g>F>hiS4-Z7l`$|fBEv8w)xtb5sd5@rT>|?; zFBsr&^l=VSkLLb(gYY%xMM;@@!UURuTTFwfG;TY-GEOD!6*2*qg>@Z8L^w0eg8atw zDNH=K6=aJ9-$nGE7^3oDT(-v-v>)DDCdjno?pH5pJXP0{vn+Cp$fe7Sb>>YT~ z=i71~d9an4_ReDhS*ftV4|#1O5@x2o{lm@63mf3D$Bsz|$fkUqr??XvuM-}m{g}=R zrAJ1gAg4b3a(h$x?53nC9k3jpO&N-fIerrqBvePijTBCx5Vzj9i1zuBzjx@d!Xu2K zA`E@|JKoYPbL4q~UNs{zFACABs_LNcgPW+nzV!_deVdq44Gj|UllWY@UIW)!5}Uz? zMI`*}yb_v=M?Kawe4?SDp}98qd*hTm;UF7gzUK$qUkw}Zc!=+m*6@k*M8@=7yo|pf zL?$N>HJ`Q(Co<|%($H+4t#^~onen(?FVB@K@vT<+jDswatY;l$;Z$?ai4VNo0zgkxQg~dPqji#F^ zx3^v%WrGj)7jyr2a&bPcjMwr{fDROKh9Y zP@b)%aLtsO?5wpBC{jo1spAD_3&R)*LMz4W=N^M-=>3!9yxHSE!VjQ$3sxKjJo7Kl zxpYLpgzhF~Qmpv*vY0y(>7!+jp?ostHWuxUH8Hu&Uv&}7+*|-MB$tL{J83+8VYw2Q zA~fYU)>-m}$sZ9XASN!g)*efu$eKk87H-%2@rXmqo7Uay-%apo4e4V-rdY{0_p+x1 zeQ@N3Y7!clL68+nLsv1$*Obqk(OsI*m*@g(14;7&L(?+z@+E#OACyygG&Q@K-L+i# zUK+GhkF|X&iD&=xhQzpU^YRi>H$PWnNf@L=qaYg5hY4HZaBWc)9g{S7%A>wK)w7a} zV<40G<>&Mec)+ag-9q;q$I_TwSQZfpNJ)oD3;L|aZj-ttQ!So@x{8rtlEX#Q$J-T& z=snLK#~f6y*4Nw?#~cW8`Ao@?BO@Abh?$BiB13zG>p<(w;;!!9TqPLlW=>Y5qNgRm z=%S8bq;k=QJg+nG zGK%nC89?C+%R6L%BA0xbjImPH>Wal<*q;mxNRRKq!hM;E*;kxMluB5+tg>}jz+wZ7 z*nrt|<};hc(m*IDxe4`SXwr|hs*^2hKr zlx37*Gn9!~g~ArGca)LpY!@R?Ztk_3tec5-1adxN^Rk7*p`tSOBZ^Wi(*>2`E*cp- z*zU)XRP^HW<5!tA345%cspa9$niz2qU;M*mwR60!NR-rIF<*cq5e4?onG*{x&@|xc z3RJh?qyf58mo!9RItY~(6V)LWsY=H6Ds=%2hrwQXmM-H$L2&c(11XD zv`cQkaur64BWE(u;Gw=cySnCrc6-o%?T^KJiJ^xS^s7$|EkBhkDiSR}M@nxO1A%V$ zx4z;xuDQA*{0w@gh>6Yk0s0z7eU}S}f}YGH#d`>q_Gcx($PZ;<#2(MT?MuFa#DjfX z-!}PMLMXCQS?AvZk5PPdO`jd-?$hu!Q(FbPwEaTOF0Bzt{6EWhgMD({0p!fW1Czt8 zLIH{?3rZwu-O*~q@S*H)fMnYlO9hl)Y^SR-pRh=0 zjJCv0X{tV>noihs{yf?Ye)OBAn%h{f{swJ|c>B$&s@6@t>e!6nAM-)t z!vgA+TO~00YFPK8m#WtzdVOA#>DV?r<70oV48?tyv1;9qzvTJ+s9`_-?e)$Nwv;f? zFXq!5f+;p>4Ys@gmf^)|FW4+OoX$QyKdMk)(&I~>KCB&U#`7$6qO+@D%VlmFeUFS- z+234W&11U6n^aZ{m_^-5W5+X_Un5#mhJD+mVn+Q-9Z$^BFfbu~f2T1|HF1h5+JmJu~rYS4~op5S~-Jq>V|U?e4pPR!w`^-jib-7yMT%Znf~LN{JeZ!X5?& z!ge(9X^8L2mX~WB95*jqAXRFR;E)%nty2d(k>XBYPj$yfDg|T>r*hNBT<#bm#2Q$0 z`W&q;3JIm5hAHJ{{uY(iJfhmw^3P>3RbrhugteNVCi(42rB*sk4dWw(xncKK_1c&j z$e@|Wr70YRKW9^}S$~Z^J=*&1!F}teG?Y({^zm->O)xZ{R-l&_Usxr2c3o4#!hz;i zR*Lixi9mj@eAKj`w0T` znw<;!B?hQ(F)|+d;0KwME-$OIM44-Km;GzXLS2kFKVR3#E59O!_L3|LCJ``}0H_;8 zKooJ3lbwZ}Qp0Pw9@n;jNYV)(-PltY)%cgQ zo_rn;PAg8E2s{KxTxsDC4-bW$a6Dm8Ctwk{t~`Z9}ohyy0G)fV8y9@K_ju3sdah9nVad`xgQI66GxA@p6 z0#fa)_kL%2>*Gq{fM15$!0iEU){=z^4Q+4>ePGY7o5V&NTgknUq_kt_s;pFNGEB2X zUs7}Bi!)}Jnv|L#^gbM1Zcjhb$Bf`?tpBB=zM1E71-tAG+6}*huS<`78)BnDRAf?RK%d6n^16;g6Y^pI;z`^1$ zbH|EaM0X>Rh4nUeqStZ=Gg~7*;2HwPm*no&n!1L;0VX+FqwY<(iKV^lT7bvd{yDo9 z#4Fq*qLUu4Q7tmMlL~`=l?0d!Y9!%5TYU-SkxAwR#3Kpq>JizLz{b*RwDprp!RX{b zr$0+bl8%~~f)(A1gqAi|`5R+>>4!44(f-AH=E_X3r6)Bn0P_g|9>jbEi*Kb4p?NZ> z5Cx1hAw8t8m6r=Mrv*9)8Knb5tx?(pR~U15>T59fNRC@PF9IefH!&>|39QtE($J)nfiL`0gh`7DM?ssuc|JCA+hii~M=#148DZ8AhL2zYB#za?4b8 zE_Vs|G}xhIRC$h%!I3^pGk*PhhJ0dzI<53!0a^H)@Mk{2rt_Tlpi%~R4aL!@R_Vdv zvYBDsXt@1M|1$_dLtF3{?)vNE7g7%Y+cG?aRG|EO&oPR)6jBcRhh^k?nvvBm>p>Zpir)DARasAp)rMW5TM4E7Sbex!W zbBb!NH5_V@z23HFWw0g0c3_Ax^>at#Z>}U3OMcAj+VK9sKLli&kcBkhAkQz+(IH(>2}*+{8)Oo zJEJd6S<`c{9ij8aTU#P^REENOe1()Am#bC7R2AA~@qGP1bl*KNS+;6QX;~ucwhvpB zbIa4*1Rs_zU1vb%n)Ly~ig9%LVJsKG>Tr?mIkYY6tB7~kPnu6rPLS?NNwE_dY3xBk5Q%!OpB&= z;O|z0D9^;myV;c1hjVuP*ZUE)-@mgs+JB5CmEYJT(f=M!wVe$#oQ2aAlGAVIJob=l zM@RJxQf}8}`th%sJ=#Na`aPG#*MlO3;A!{@3u=3PXr*PO)00Zgm@N`|@~_Hr^LwrS z-6r*ySvoVBl-#Q{7f0FB4Ul?H$;KdnCI_%BDt`Nim}qOnLadespC;|6R3KP_KC!Qe zr8Cuo#oB{44KfCFbXbgPi0KTG4YiOBpWVS+>sp^NV#ci7*N>F@F~iC1YoYKf2z*9W zE4X1T6l)?L9d_>Gm-Z&35RT82kpbzJlEt#bexck}ZZ3#WyaALcD0n8vM1N(K*_NK1 zPd-LZlT+KAGL$3MXmn?%m@Td^^cn!OkC^;Z8aDbXUt%$S2*1*>s_d%Ix)vmwYlC!8 zG<7~LwN}TJ;Vy(XLXp_?x58<-=O9oOo@w!$>mR;l=YJGoV&1`;uO9B7{K~a&D=fU< zV7++*1jgMj+$pb-=&dx!fFc9kdW)-17#Z~P#d{KK`k(%NSkj`8g59Ti9Pbaq?FZEj zqHb<(V2c8twYQVkaP!8EYGWRIOs} zoO;$)YnO%O=Gr-&Qd2NmJ1L$6cj3c2lINPG=RK~CCvRve9y7B+!N&}%3*QPF3)l}| zm*e#PaOuo5EBVAV%svmY;ez5%0QLqJ$f5xzkJd?>{V{!U`hb z$#FA$h9L3Xe6nnRWP{4_M&h*Hji!5Za-xirmzP)iy_xMG6ZikNF+!l9?cN$h1^4pp zeC`dE=OSEXtwai~fy`gz9TdZ9Fh20S--&*;P4orIak(7Zv={yqd(L?QF;0FV@2Gr) z{0s#X1~bZ+KsNa6@F5}+l)hK8Y`t=)+pWx5V9U#*qdzUQ_?fpe$V!O-9F zeQaT$ADl4DXa&Z&7JJh1`P6U`0NoZ0i6O^#bPqrx+yTL_Zvb(u`Rq+7F%+HXpfm(G ziA>){>^0BCQ&nf2mJ;AG2i@^dqyXj{Gg}q8vm3Vt_cm|W`f>J8Jnr65P>e3Tj9mDl ztpp|Wl3)xsbvVxMwlLh-61Hg2C(X|ELY|jymtiHfpFd3i6$9EK3W<)!z~Y8TC@WW~ z&dl(9`aT(V*{!ZANTeR!y+pS#XLMNXbViPck05~ei&#p+CH)97@8zNlr|WH_kA|BF z0c22Xe2)ZA>C9QEKh1M-{zU(nLJACi*`FA)GQH%Il8y>XbHVmg{q^e$q|fD+Xsp{8 znH1{_Cc&$4{1=%>Vj4n6_>jbsCVd`2HUahjf{o2C1WS-b0=-UZBevO1so#$Ztw;g| z!dX1rph)rpk4H9nw3{uVD97h{$hN?Jhoyd};CobZoPnVU#N17K^@FvtS-h4D2e!)i zfg2OcxSO*yzWB%P&hGZFS()PFU&kG)T^enFNG`jcw!SzPK%mv00LzeLS1>xwOIbQF z7LXu1K{Z4L-k&7(xvX`0)H2#1C@Pg}@|l@2X0H5B_uuN zo-1Pu-)~>}pnpduxdq}#{kScSdUU?6Uk6k= z4ui=q1{^4h5hQYTNby$_lVq0#n9Rf*Q@8};_%JGN+j1TcmoQZ}B>TODZOZ|Rnj?4i z>e5XoKnZyUD2_^iB0~WUgoc&eOe7PfmMjN3z|IoeG`+_hqI$L%NZ^SV&vJUDVo(3- zuwXG9TmeoVP#W2vet=i_wjmRTjQ>_~YZf+xSNp;d*_0GBC*QkOkr9?zoH1JzBo_-A z@SJoO{%|e9Y!%qa9`-4m@{y>m)a=b45BS%e4j|oHmxi$bj z4Azm>>%|Q%%NeF$q}~r*mKdCoKed-EjMo~6vA1Hj#Q;e!ET;#A9``1uL8tW7@{51E zyh+439RHAlPnYuVSodKdDs*V5Yu)C2e=JRs`ZFnzeq@rKpWI!2PUK7DeTiCG+d zb331QYkncmemgo4Fwa3=eSXT4D!Sf`nJS{g@pkQnDo~e8Q%AIR94pQ3yGYzVKczfA1aypC(h_?59Q_}ggx0i-ib?c*$c~+c~=<|jU{1{(r*66 zb7M^o^f~lP*l{xyMC;I*1n`2J55LR6*n8$GF+JWG(__WG9!=vrCwJ z6e8>yTuQwu(s9uWp=hN9G~KfTHqKoLp4_Q%$~r)nD-|uR{`OGZ#B1Z&Q(qwAa5$QK z@oq^dDPi!f8LY8&c={h7I(M`~A-p(F=o+_B9y~nlkcBzT!ygwp*qEsQttxsod4?JX zaVX&i3QL3mf&GB<1bHYx7oOid--ZMX(C&ecDx5n|)g^Yyq3UMHaf4$_3mM{hY(MaNM-(dUn27Jbr?7OpsW^Qbj)idtBvw0;?!YbbhGP_CR=qFX`lU}jv9Ip9w#?I>T#cDVG3lSEI_ z0N|QQbq45stAo3p4mHmEM%RpOEbH9(|bk4MZK4l;w?YYAY&X>?C3Vx*eR7VM;k!EyckNoUaS};VBMT#$H*Rdzo4G{}OuwchTWTXHtg z(dl`zM&B82U%XxAx67imn!aMY5Is<_YV}Xe36nz}{EWP=4WP_Nwn%Zp`^>TnEb%+4 zD9Xa}=YJwBiaJihcCZt~8ZSh}p=$ z`D~qaRwb0^sT()#U-trd?ycGcPpUK#ym6v#*)A%^@grumyJPGMjjQ8JAtT}feuKTl;Bfq$S5EWfLFg%biM~!^5D{ z7+7h2QE-L@Us#BSS4F4klGAo`=xMGdB)KTT*G{(rZGu~aF)D!dfu7;7FN}@6JVSra zkMJPQ<3Cu&aBx8LQDIRVLdcsKC_%QiCpWP|j)F-albRiw_?gi@e>TE`^Zjdj#JHuPxyL%8r8{oN8c?VE?7y$spnIxxB(Ng}< z6Md@|<}U@hD^e5s|5obG+pIy|Vq;6v&=~+p&pF0>Kyv@k6?wx=O_QXd*z?rHmCVHj zq`d>{4B5a+m@3MUDVl>mVe(Dr&#H*rTFb3!%cBcxBZ)3VB0Q^BRc}!gLBS9)|0DN3 z%)b-)NjF6inS>0IT6esn{k(!<&ylJh6Zq##E;2lT<0$bw7KlcxGynVP4MMKINky-5 z!-Xi#`)=@^r8HZZPf$xt~wn=XyE?qQiz z6Y?2iCXZcWqw~?TXn`oV@`{5`ZOufQEqjA6-Js@h|N3mWxghnXri_G z^y`-8_|;iw72nC7F|>c8K-BCC&H<(w{On_gs6;Xjz(fkQ8g>anRz5Kq7e{?xY{@lL zoonh88r5dU)O1=`wg^~S(s+sFh>_tN1XPB!r6oNOzZT9d`$^D7rfU-efSuF1GEuiy z%S4E_cXMODz97Ym)OuglP@4r$>#tw8_RlP2z^}juMCoI5;*paM4^)MUmXTAi#^ba{Si)K@ITGp#&5$$wVZZfl+eAr` zIU0Y+NQZT5BduKzzuxZ{Ys*@NNFgylM}Km4C^R+;45Y}B)82^9Lb$r9UXDEtgCFM&f+W6+Hwfw~mRks9hnS_%4eZHqR2m)5AWONw3+WWSdvvnhYi z69oBMEbkT66$dme@ZGrt%p|k+1a55^CowG#+{nK^E+cwsoEp1hwRk#{degJtTsTr6iUk&$t?I4lH{FT>9TSc;M2eX9%1__#W$5IA_Oj^ zNlR|{76~JN+7}vk$QO~V<+(Wh_OpOyvOeg*^D;oG~{ZcSYx4279W@0XlR@#;0E z2QEDiHd^al_U(PK`K=o|CQaTvT^Z0XvO5k@gdW=+4ClugpmIVsFcQRaVC0UfpZ{p(lo1gPyQHSKq^MG&bsm%2@minfMN~|I z$1HXua#XyiyD81e7q5NYzP0yn=K)d)q|-n$14<2z4vunv)y5^ElK)<}lAZtE0VJOv z-*{gXQ}=D}R@XNrXCIj%va)1S!t0V_Io&u$akZ*)YBx0t^H{9=5;qtB@g4?pn&Hqw zl(`nV0e-FHbuG)93Q#$7T&4;Aw2rAS7%d1W$<}6fH}HAtwQObW8N7On^J`VJON9DX zP<3{d=p*>jhdg4Y3yD3=$6hB zU0xE_N5+=!jJcx9mAp|j@va_c-?R<@yjq<8a6F^o7#?U1$bL6Rxe5muu!psG{FwmL z1flGuZ`HhRwYZ3$`4pf@U(;kH0l;a2HRLkgmT>Hrv>g+n&^jD+5XX`y1 zzb8x3lpR9*4FtE{lPfH`O8o99hu@L}OR>S={CxTAtjE#D55Ej8{wPs#d8e}g+En|x zsQKL_@Sk|tSW#jzd8M8j{6$uKrjZ3(2G6Gl%UbsqO?nVJqYG~Jr5cUV zcXxM0rzs=J-c!R}8ysvN1XNeRGXsg344T{|0&X3SYV4Hx&}lQ!JeSI(KMN!sHit?e z=qG6K?XL!hEr^0&g#OzZXa%BKs+GBIXsAP>0{2UZGMl8pPxjRtS-g&jZ9+wM_;{RNERN-??s07z3u#d z{`$~q?*wDzh5<9op`od9^Ggmt@`I;}?<#VzFg`G3L0_I}=RDv0b^CT}Z#}sZU6c!d(+?*HxXdw+;14bH2w)liNSr7$WL%2nc-DTCo*GRafz<9F%^(qf&B~6 zVVgj#30j@_97(qyXFVl1mz?{{QJpFTN82tsDXS;3a{&nqq^d4WkNv5!9Stb2ZRtbx zXE@1At)oH+`Y&NkOrxC6(lHK9Ujs2H@AXnQm`sYw%JQ0;l9Q8hOiWDnPEPoY??L+} zd3E4w`P!xb!~x97^Ehe#C=*dYENXa&-BG=z&!* z@!CB0G!_tO;V;Wa_Bqwh?#IV7k~PV|@n`n4l&AieNC;qTSFM@M(XmU!3LC@zZ+Ake zUkpR>H)fVXL)&lIvl))Owrr$GU;JfG%B?&+mDH!bdTJB{7Q~0gv1Z+`A6jk<*i!gx zt947>m9vM=mv$Nb9CLtc75I|#v2ptZjBE_)9=h2-WVMf+UW1#(aPalr&7v)@BEgvg zi|BZ~JwcUCO+R|Jylm$R>c-Fa5>Ncb<=NT9!NI{!Yu@knj*hkfskU?7{>)qTd9&hO zIH!Q}%c;V^og(9S(z9+ubd^DA%!*@&gMd?u^B?&tP$r*+A|fm&oTG#a+8uA*0OSJD z+iwAQTVXXHtfP3pADG?;%1mX*2Ab5ui^d4*RM`j;-T84yK;FkhWAqs*&1wB2m{W$z zT6O0j;T~bXT1e#hmOaZjg>ds;bVq%z=2u*u5>k<|Xt-k003n%f2){jcvf=ZbU$qRm zXgQdotFJm<0RvnJi1=7-PDtA9XRa>|1x}*#yT=!Fr?s}Wbfwa#QC~lFY)~LazS4M= zk1m-l40PNYZf~P)Z~gx5$*8w(KZ6P{=e2Q8RLYi=kZ!LacaqsU&Aj#alNjH2x1Y&2 z94<$d6ipu1kGQBotEO5F!KBtpnj$meBSdQUY<9N#ru<%gzOuI)D9Ay+&jwf)!X@}e zjse{QQc|N{UwD-YxzeObA)VR@@9wyE8yG6kEUoY7r_4f9H#4_LM66Hx0_;csFh?%%H9h`yW7u5QrnDz|4s{@J){(J+wp= z)T=+P%Y4l3{N(c$Y|kiJ0Ad|kuUVouSWin-qk#FYool)q zj>2_dpsJP;x6r*fANf!&C`^t)(rIIzX(dG)-GB=SId0Foks#u8kC0Gs(NYqyU+?l$ z{FZ?7LD({KG~a5Xhjgr!<73A7m&w4?$l%nyV)h1y4TragJi#I%7?5*x>o2i!ap!%w zmS=w_WvapDZs53p&F>Ghhs|$~LWTI&}mgZQ8 zX?y&qZqY)L_MYCDUv_48AGmF4s|{w>E^$(AMDdngxh7cra>B!caJaBOByyzE5{8^$ z#a&7-N_JRAM;EVOr?9Z83~PSC+1csrFU$LJaA=2fpzc!drs?x1nt?Ozc<#6iiSWS0 z{#Sz)u5>{RU{UZC-zbnvCHIuouQVyQZ(29+&z9lt1M=31C+Y_dtl!Nl`zo>-4hr63 zY>tU7*XL&e8-Eef(}5u4zUTr|vi&dOBh zUoo$Iy7})<-yedo2BnFT9qp!3?HXE=@b?qIc``d*Z4pLma$?HduC-f>IcvR6)=F}i zAC83{uGX|&@Z>b;FypZ+B!?D$vY4=v#*I2-kKuNW@2_n&Bqt`PA=g=NI?LoT#{gCf zA29H3HE@U`;0++%-kL4dg-wcvb{t!sop<^D9Us*{j;957SeGk%n{krm8w=+^viG=D zRPeIusF`(K;tX?lmg7T}wnK9q(u9~Y zYjBE7dM+~<%4PcSdW`#&X9XOC8Ot-%)6*}z6j%b4PUkxDpH&6T&CMshQB!RNh%u!l z&Co^JE#c217K4q=7+#QHFxj@ctp&dpowWz9o!%E!CNRJf*I&Q0fT1(zV&ISU^@{Pf z^rrjXRAIizW^4qPgCgpO98i}f6i@{ofD<={>S^R=kXWWM^ zyUIyNuax1Z$k0_ot1I7QsE1W^m5kKlqDAIyN(gK{QmC+4BU<4`Y zzr0EiVVMcw&~=*~FmJu{<2*>TnyO-hy5u+C8pC}L#bL4brEPeagqbr*_wHKk)lRvZ z-|+g{jeyUbnqp5C0xpMp53B~_y9`=&QBfPF{(qs@mW{i@--1 z1Yv8s{#&ur%+-}u7w~@344(7*5gsp-|EBa`h6CkF*C{1`?LV@X!ZT17bi_5zF&P_O z3_||RoZ2<41!x@>K0SK4TH}^$W4IwuTr3|Bn#MqH?x=1AZy#V-iR&ZyM!Qd+BLxMs z`{G-mo*QZtW27TCH?K{xnGHVJ?vBMFX`KIOf__Pr1C`UkZXWrsXQ7p$mJy@cyJ7C2 zQoMjcAqC(aS~$vGg}!n`Jz2Eu>ozY$CuzMp!ydWL2+@zK+#&dGIqVR+evO+LlTjkXV zOOQsFc8t|PZk?#%vKs%hdr@$c8a}X#=S!vREz}+oEhB=+XUTLPFs$r=?UKI+J{1ZZ z8+#;$J%YadA^OEx1`ccm&|GOxSTG5>K3U$Muck;!N@~!cljghC11;LB?H;_Qv%mD` ztMug}POXe`^?`oTZqhO{Mbka)1LuOMXg<0J4leq|%pxVVEG!I~8(((3CS1UW^hGJG zurTJ^D?jgnAm3v6xRx*_qTIAuh<%gPpGgF00ly2BxbNuxSNB~r$Xi5I9|$Mp$>t0K zw)9M$aXmZqj;RTmwO0LC4M)-O*-c{64V2486~0O1u!YKUjHLF4>@ViMcW-vkclY2s zytu@6J*q4W?kX6LpWx(8TW@t`Hayp9($|-hRT6cUk}5g2=`Z|CxJAs}FRetuJ)d@@ zr@sh+REzwq>n@6nZgNC5#XUf1OP}p%f0C1!B|vQ2S%65+sMIfvM;yL>*zc+Y@g;xlUDkr0eOCU-2(3}Pq ziYg!E|F4|!V~5S_d+SC;Gl#&S2_v)L*epw<-;wmAQ~%s~%`;@?QVJWy#(ZQ_j?#cDJco*Qd*@O>5|SvHwe<*sWgI!NOyNPNFGwUySqCje$Sbi&-Z=j zn*GOIxYnPY>UTLq9pz`PTMKybu_AQ18I#F9!% z=L);0r}jY2@R12W%XBEkad#XUvT%`sfQyTJcjWW9)^xSF23(A2Fp;X}1+@M;4~5j+tk(CpXA^s7GT#ySMKAS~X!K(7?!; zxSl^`K3Qo+VI#5zPHiqru=k*>q_Vh*4Xe4RMRsF5vOMe-@(zT7Ibzl3N`K1mxVR=g z&sD!#3%A3ijd@!S!kJ{PnDCh@idNRgg5~dstOQJT8@96>s&x;iB$f-r>!5ly7|oLW zdqD29JD&d=Xw6k1km}nT)}aqjp!lT$&o@m$Ss4lj?mbmzW7BnZM(dYc`k2F|JELS4 zO+)>D#*IT=nl6s*{>U<^{5ph6|2^YJ3~o9)WXSVGos~8p)0e4fD`$kid8$KGnv&-| z)x^h-*f{V%xJod;X#TvM7s-5QAtjeZe<(ZkipjVx@dS@D&HVUJCFC=`wyh)<=Y6>^ z_;C`cX53L)%Gqa&=Y*<^S1*zFdA^t!8~;d5l(x2J@VY%;0qXb+y%z7$;J0e4) z9ulf8rcS}4l1k?T&B;=|C2K*eZ+%wKqZd)p*dmriBrahjwOSS^Mb0!zzdrtt3oy@2 z$jr=^Q6@7x5@;T(aAD~oAl?igaBZjVnPn&n|AYEOS`yF^&UCU$LF z$vdw9=5tNi(FK;?fX1jUNzM@}IOXIBoz85T+fm_iH-48J@h$UFU(LAg{E(8;yrbjc zHw3frE%a_HfS%tqHwIh&!uHZ;)vms1OXt+-&CyWa#>`a1^1RvLrOR8d564%A?iahA zAVk;cUD32G4c*cw<5!^=DsDwXLHE5})4vjb!;sfercMyJURo zko?(_>AG)%R{;X*MOjJ)y0Di@>etb+);bPck9WvPc3tsY$%7n>q!EadgD7S=|Rc{1X`9@%Zz zfP;erkdvV-bCgW^GuzH;x?rlTykYOXT z3Y<$YCrOCUuwz1f$;`c&!MsDC8ARj=nKwhs(#0!VKWe0KyU~8`hW_V zv?A)o33hmRxaZAAtmSkWh5Zdsgy!G$D%>5ml6~p(4TG=ql856oz-9OYq{s&$AMDlx z6g5m$knDP9z-}D4oF_(I5~bg^LzIybGBBonw8`{$IK$^3MPHSZMl19H=okzziik98D(P6CNHB{Z}AY&*ud3 zrDm_4xmrd%ZCjzlE97TSi=Xb6l+5kfm9>}Ft98cWOe9PtC0M^f29>PsY&J~>o-1&cv7?eoNoG+@c;^0j=||eKVesDDyBy4)Cfxg zXGPWz%-5QhmhViHonC=Ub^I?CBVz<;Xih-gdkmb-E2xM!IhN&$3@X(O2G-`6?jIh_ z8dA9IGM*`pQ2+Bf4}vl`e4)g4bcb|xHS;k#CN?lcKDc?n#Db3c+2n2d)Z(u{4)Q9; z{p%>!&8#G1X3w$)%!O6 zAF%c8#MC$_)vz~^>C+#a7zQ2l10(bR<*p99whqcwY!#+r-L9s{6oWT>(3&ytBBr}I z{7rB5?hG5k`lFE|XCF>tj`&;A=WayzAI?%4xb{^)R?i8AoNu=GKdQ1G%t(>?lwgZQ zShwJ{RJ`ubC?&jc7J`??bC>)$&b2#@->}KUbtsB4lYC&jHT@>quDA@H9b)jcZBnR0 z!iI*=T>_8juR%E3oScK|3ukpm7$0fGc_>Ob9*$VLTB+{&?!>pH`$HETJUmvbSvD}; zd=BHfywiU*nKYU%SenzvRAkUZf~#=mJ0Yv5=f0CY$|T&Lhq-#p!gWZ*aJ;jqZ zXkolRGg9kvw6UHww&v=f$?ns@&5revMmM>C!RLKO1ARc&`sAaxEctt=oS9wl@82Jg zGbPAt=bE}jifQDMdd_#o>JMt>z-nbg2Z4gM${D9He!lNZIw>;t1zpXK$Lt_M+^cin zB*NcaT%PO9%WvsD(uyc92TV2oh#S3ZxrNmR5BVr5_wuH<=QfS6wnC|NfyOFy<69Fd z!J)}`>4&?MK(+=am#V*aIcAXI3l4mIj}ycr?N+4cn?u#^*+HlTuleYO_x*~B-W@jV zF&x&dp~Ez~x?UF$&>M+`40Y3}Pgo~X84NJ;y(rvb`$U#<^(|+Ql+S&*)<(|^iNXM! z@a@0A(5<&`uBQjvNb4eWa$?)FcD~Q*%A|&e>*0Q)_wMGD#PiaQFE{m503;~WtR!{h z@`(eN~ z+y_TB1R6tGJE?{3>*bxo_f%OUCT%_03#DKyZMu38Ol?I{_T?0`--lUTW94j0y z{tS-H(9^)XekOXcZ~m|*!N3R<7kLH3wDY(6S9@;ZsJuLZNy#za;RkkSMP(Oec2$kaf`vbfgInX0y$LjupT_CZw!&)DZA8(eE3HehXec;(}Z*d|!9_AFB)eyN2{ugkImC*#n5Xy1g~a~(0E2^qG;ucaet z>5KaEZ$7tOVqz?4guNBtXkVgY2CZD=O%aOi(NgFWE&wvt1165~7G8!Q6(uE;LA!t6 zTtQ)BJg*BwrRk8#U=p{Aib@%#dNBJGn`y4TJE5x6n6p5w?JOMnF-YJ+W(lsVY_}NBEFiA4R2&p(?`~Y+6}p*gZso0bUpVogUA%uD{zn@6`$P)& z6BWfRy6wqa-_JMCm1j>Uej}vZnG(>XxW3l&x`<{ICIV6I&*?@VY|V~VjimuV6Y> zV7=5=dx1YL@XC^vPx8G-b2NmX*?Q5@a8Ivw0^YcDhryJPy^I?6p8l+KzMH3=|SkO zA64*k0(CgIi{=ooL zrHDvOPL?gzZR+Xor+oYN8whgR40zGe(cqm@02YLHcFaqjXK3O?7C&=xW!yV^Pyie3}E*-Y*x;TW z;d7t)3ptjC<+MXxSSX5yjL!7fmb0aWJ|MB=y}q=rZ@zLa%u4&# zU-Lm zUi^NxJz@PT9HhdzBm;6+xp+{|TA*H3ga1xnd!<`HrB**c5Dt7H9N55>K{0uZWf2pR0-wELnW^ z^vNiTWf=Ec?_3PQjLqOlm7Tk_qs}7Dm5p;dJMG&b$_jf;?}rIIG!V~`BLrfxojg2} zUNg1 zZ`^JC6Wo;(Ma(j~MKqk)mwX=iz!dcG&(UjD&0` zgvJ92K^A0x=KBfyU2`;m#{=+vcMsLxgQsq##*wtC^jByFQ~nMIk5f7811GZoSL%xk z1pVsjf-kbl!)(tXmF^1g-bS@^t}9d_sC<70e%Ct{>FsT)<+@&9JV!3lHM^Kiah^5% zoIp+HElm9M_UcF;Ku55O4!|tNAa!}3k4PlBEV`YpBK=d6FG({tiR$REGndo1G&9-7 zUfp}j@#UuMn6U9Zw z9S4{uN%8{8KBBdfGGP!2W}5eCxeLwREv5<7ZMOJ2QzK{=BvKA!ua?+Q-_W-ve~K*8Q&0Zf@3E=HutdY1Ome<+ zL`k9ehFS6(j>7K99CGXR5@nfPa_VUX)3+A0^=iDr>$3qfVgViwC8pkCiaZH%t%GO) z9-i+KEfD?PJ%hl(Y*J6#XgVlpsi*=%uxVKARz=;I|EY=68G%VwD?A1;1ximl?rEZ$ zxAUPsjGH_|m?}C|RKho0R=8pyV+F~rdR!4x8MVU%Yy^oE0Uk!gEg2^F#>UTTXuhs6H4Eyewwo5- zXNC)Z_?~0?`)s}k8f}))pTd_2#8BmFW+m?ghxp|f>RIBIhk}g`gPgQ|I?)U0+rxM{ zzwBAdWrB2&>ZxK1ISN+``8LM2c^#McN&6PV9)uaWwilT%m_ot^=9>O}vCBlE_j|pocgzqXAJkE>vzDna3Fi>We&8Y>RUqdcf-Jjyf++o@4ovMn1(#q7f5gWX z4%S4m#nkxg=}I6?RN~dgw--)k_N%Wi9`|CDTyH5WE9Y&d0<{&s$p88GZ(jiR<2%v zGKWo0O`QP`Rc5nM%H3UaX4zp&lx|Wy=)_d+sEeR<^mfn@LmS(&z>)JC>PdImn$72N zcM1ftI*A>v>4!ZbL^_-|M=vHmc)B1*rP^?hWaeR_Xg~^apMU3O2z;)`X1hlAg3HO0 zI9A&Xatw0uqFZJl#$x`bVJ5sUzHOVb-hrqtYawbH$6`8_f z93Fp6*x+e37NV^!^H4Jo#yeDyVu63$)=xM{oI1RDFA;XiWMfUzO}wN;QT2YQ-^O@6 zBqhhsgCtiuyurskC%jFfUZZ)sZ)S@I6BXZ;2u+v*@H#D*|GX^)#oku1H4zvP{=&@0zUwRH*l4C=VT8^rC@;t1^-;(_(ijfG4QOev| z^=rtR+Qr1SA1m*nD@$>zouS#f*3G=(B?}~q5%>Kqe+cYV{t7uBn3LJa6t=IO9M4*m zRyR6EUc>%aCVBKHrk*EO6Oxyqk~HS?xW9@d)$BZ`sbou=XDYt}%I9#tKEZAoT8{LP zYV~(uluFC^Aj718dTz84#>dM~ADlq#`JpgoY%mmRqRiw>AN>1zPyDnt@byt`o)^?# z9^eBb9@3IhQmYFtOMH|ut1pHBZN8tmZbYjEODpvDmsf)Sq&fL$Ba)`lu3`4@vT6<& zKm&M|9049SbS9Hp?7w0I-w2cz47;7=qcF5k2Xq*}EdwyD%y0U5&K!ucPPS3P@uUU& z_!ME1Yv_cBJ9KG`cKTKO5o+oIhvEv*5cdn>9?-Obem(4WzCY$F(i^B_048EK zXb>vQCs+pmTD`tW^y_!64(uIr%5YHYX7Cxp&OJTC z1zoxuTge`*FMX40X`vir)2O$n0tM#FN|UBOpt8y@wGkXs0fvI;xxy`97#tU}s<>p_ zbI`=TfT3S`n?A@IZ}I-tokrxt-PQ587JSkrBtk<#w;QoZ`&Q=~u1M3x@=4Ql(_5u) zk5N@w<7F3r)@gOSk42i6n={T|Ldw<7eJWKmLmLcU_A%Z;oFQ1as!A`7;;m#)Fz3B_YG9J8uCo zF)D|5ASxwbqO)AD;|D`f*(0wJ@?}iY22&3jEt*l(c7I6Rl?HWjWu$Z}| zhErJZdFl|Ip^-X%;;m;K_4=jbXukBEg`w`nmdYRxqb1iy$2V!jqs{9naGrE!CR+xiYV|_V9QD_hnPrupht-gXf1`iPjGDPnR+3L|pmTIxHgnjEv?uy?z}fcUn+1A0AWLE9 z@1S=*Qb(mUVJko^8i{s6U#`-(W7=i+_dZ@x8kYb82ltsGPJq8Cn!NV8#RGtQ>h5NZ z1BpK+*X7eiO_KHaX0Q!1D>&Ef*p&P&u$V+Vj|iA&|X09Tp4Fw<=SD}Bcip>UUag^Gix}AuC4|m2K3k|jC{8VBTx?ascKYi2OJU}Pn2m>sY zgtsMiPiyDAL|a_I@M;LC35CZqTH%Al=R zRgLi!M5dq&L!s!<4R|rOUeU*po@e}?b3PJ>u9?NPE|KW)<5~dC+iQdHRIQ_d&o1vr z6o#`3=!qespY*&Qli9&0*5$U*k5>MQV{B%q&w?#z^!H1dqDC|Y-V2r0 zi06XzlbRgkA}L#`>sLg~D?zfi$*6_{1h8wN_ts*xx;Z)yU zR9IR3K%_Q}{4s9NVgfQ7q)&5mJpp0;9v_UNeq=9kRCtEq3RhNC)UE%NuG_EZ!{@SH zrl?OX)u;>vE}h@OREeIR{`J&~Eq?A;2y~@&$5Ff)7}J3*GyBfG9EoU&1A%4<>swou zK-7JDdP@85U6?z1u5`LIC*nc_ujEkGOQJ%oF~^XLD$j$HJlPf2+YWUuOY!#4Zf^CU zBZQUp{?l5ui|#M<)a#6E5N|BBb@=PDX6JQ2-ep8Qc=O2s&|-s{LB_ENIQO_QI$Mrlqh`C z_DUS))@NP6K|P4S6dy@rT;rDd2Ss41pRt2U7RA|Ly{4z{{87bWuZbXxhdCzWE9TXL zX8WZT#rcmmBV~uzO=-v>gp$34yr+KWyL*;i8PvuZX7oqDHAEhTO7f`G%`F^XF??RW znQ9cBNV4ZhJ`VwF6x`9kw6)wmBqDt8PWv(lM@fm@WT0r}zSjJ6UM)RMcUKpzyP*b< zzFBUvb58_q9oV&^QEn&}Bw+n0#L$&OGIWy3XS^}(qO~UtA*L;Whm>d1a-c#ZtX-L9 zNfKq-uyX;mML|)Kf=o^r)+{2GbLPmzx4&TI?^`;QHfKLCi#PF8kNDF?_VnF##+MYY zBt?U&8qK3&@&ekl8Jx+|3rT#dZr~f&jY#Gx=q-s{KQj}#Dx`Se>0ARof=~TVi{5reG@i9->#|Bo zGehFWw?5a48~PO2^iKnGOS+N$TBWKEP?DXF&f4D*stgyWUDE8+`zWbHCud8s1=nk6 z`H?Giq!Ci?Imxp*)uM{6C2hfq<-c#Fa5=R#e4hdYdi{EYv@12XwV%_%)lN!m%tOqe zKaN=&%voUVaz|Ge>8rmk04IB^R`N{0N6}ho%#xB4kf_Y@b0DHp7>WMEsz=6WVi;Ou z&l6fWWTM8|hycM3%6K_*Ek0OqU zhhttUIMT*pdfrXuV|;tQGw(iR`@!xqb-xxNPL=T}vD7k63nM)7sDE|z>{O$=zq{_mWObe;3)^-5PLqB_ffwF9`3{^Pr1WEa8gEwDJj~?_Dnx00h8kvPiI<)zBg5P;P z=-Qw-;;~sp44h;+Hkml4FD;MvM?w2cidERM|HlQ;i3ft(9J8O1W=6XfI=0+AEB4M^ zY)&$cZ!r(gtDPDR7A~XagluL7=1`KH)9yGa3t@Sj^0E0!)r%cA6s`7%;G|{)4{}>ySnrb_FCo%$)*ou;c@EG9uM)oS%^|M zyJzn02HOkWy)~YGb}iOB&x;FR{QQM;&$%1eyL8xV+&L;9<2~22yTSiQs$JXd0B#jq za}kf3+4-~<-*Of+Er&EOnr+`n)JV;{Q{!ZzPtiK8i&ix7JNS_5vQ{Se>PN0Dj+V8Ta9NvWWv zC2i)!PFkCYA6w{z4}l0HeojP%a^o7|&mXC&fyuR}_tl*A^=6^OKZekk zGo~TZ3TCs8Fpv^K!H6N{-Kj{7mMl zH@tk3I3&7lq}!yz%m~em$by#fEIl8EqfyFBCzz;Y5%^`Q;RNjOTe@HF_k!IhTnANS zTmbsBs~#B)O5Ds=nP)a1voKil8Nz+nK}HJ~)^yv{g|PP!BKd!}uC#vPkR#T;4p@x= zmcYDs_YxE8FqAqrDQZYE*A4I=w!&iz>sK3$14)eTt(U$q$dTZ!=1css?WRrQXYjs~ zFY#T-QBW(aw2x1vTH-hbVDB?{RTpUR%QwIm55st&**UM^PkwI7A3#j)o?JEL$<19e zH;Ts-Q{=g;pCig4vZRmsm5^}zt%V<$1X)i1=niNh`(oB^N_L>XaY~re!X0(8)(vk9 zF!0k+X~uGP##Wmy%QlltI)xfkzSbvG_!SSB~R7H>JD14S+WEFVnVgpH6vx#C9 zU=+ouMdwBaE{M6gQ86*%nwpyHdtqUy_6`m^BbkU`ftgPR$9%s_d%0cZGrmMJACME{?wZ03K-J4n&F?~LGGcfVJudi>z5A44JlU@p*_5seN z{^xkwt+35@fDQ%RnvD)6RGsF${j?*=XNw%vc-0=MqVZA-vX%sE*{_P}@Z5+{L9u6U z?g(fWDk|IHppe^SwoE870kIv-0Tt$SDzX3NI^`Bh_RtFMoP-c;jT&6;!uPqIJ2U$a z`g3E`IOGkEJEz}TI8wcD>FW7LZ5yqA^BNIFej@j z4O*^rcEM{IKF`>*NWcbZV2Yq>Wn zj}?nFR8+8-as68tZhuA(@`L%+fD7Lj;Ib@kr$+s*8>|KNZ%3TqYv<&Il|H~DpuPq` z@$@vX;5M9X`u^=(rp;0_Dn65MTpYezqz{6aVjWP(*R6f$omN!s@}1XynvPj=zpytc zXJg^iG(qIVbRNc_&XoGHyYYIv>EQSMrH2*5h)F$IgS5F>gU%HAWxyJ(?at5|`O$l| zcL71s7aR@xw}n@Im^*L8z>Iwdpg6+j&_&hhBC%$u5XirW! zlEVPz@=t9>M&i)V3@R4Z)25O=rISlM7W?&&aJz&=PrzpRTBi)x}n9&@j1I zU|35f_H>6a+pU>a{rPl)03v_^71IAmllyaNf5g1saNL_j^Ht!IVZv!=8~6yBgCE$t zTC=Z552ca-9A6cc&Q7p#>~AGmCLjZjPyN-nb0V11K9iUk^7+C?@i)k&Qq>+T zp>0_S!~l1*sT4 z9QiDf3kV3X1St~ZC*(v%ML}U+HFW4k2_uCYvsQF<#L35qFT78ztWsF%`CwGO5ZF2N zpEj)qOPz&q^aTdh*k+M4ab@R5O7&WxyB7zO#YBMA7DIA?H=HX^28U9E$UHFF^qs+! zMrGpWn@#Q*73}-L5{EGH7ogkI3{d=p(Y`iR-I$`N5hLOF3;1!sm%S12KZ!~i+2mW; z=$T<0B0)(QSJ_d4Y>!WF15JP{QL(g$m*aLAYD6sP=ehiQm~<%oF-cyDlkf(OB)g0A zHpGn_PU2V3tS=>QPct>V7nnAWvt|wABhk}OtVTCORANU8Di#(~?XrB#k|Wn|>i$3) z!Il8X4iw;5B2ipwI8|471T-ZxnUngaC_)rpr>oHqhJHuSyDU~!kdu~<636}r^GC8< zzusZeamuA=SV3pV8`WhjETFAR5EhY?41xXsz=KaroWr^HR1{!k{(NpF%IW#ni`S5k z9$jJ%w*UeNdc`RtSy_~3Z2txwOo{KQub5`tdMqV^MrzzO6Fm$U<~if+=v z!`)S0X6lzcTlfs}%Ze?4o~)b$W(oJaV&dXx(Ww2oj6c>3fyec?sC{#{VO6P6NbwVPtBX!jj?w@@}M2~1Q1Meo;U}69VpQsE8=PJw&Bfu zsuFOUldYTJSNZR71IbPlnBvMJcAAe@TjM(#?_^wtQm_Xpswv~YXJCjCe@W8pGned) zlbs#+!`hYiu3lKElI~oXw#xK~6cSM7n7IEJyy4$rx+SFYp{HL29r3LgbjL?T9OvR0 zXSM5k-aCkkA+n9mQ5_T_?yy(f zQ5}CGLD;~7_TZRG$5}aEEpR9FdyR1~79k;_0?zgrqx%ewnBD%IU!s13ub~$SYW%gA z$72e!EErzRUM2qjep$ds>SdTSTV=BCoTr5Y`vSln9CczZ#5?)_u1CqkZI3O9$;e1& zYeG>o_MAWtNz2k^1^K!UTk8 z1<>T$UH=30)pJu9-!^i-XBZbt6{fR2IB zTWg39P%)dYvj7#pRtnr=Sk(9DViBD*7_R~$3d%OZ%LP6-bfn9kInYczl)9b--TX(2 zV)>Ex-AQ+hm;4$0rOu+BVk=vbeqJ7mGa^@#CZ(+=UN)8Qp|rvz1rEoF2ijMmy=UPx zgM`sQ|H%9P-#L~r@#G(%6XMHEiHrLP=8#ZuWTbc{jsp$Uzr7z->c}fAQy`SskJ^-K z0Nn{yCj}eY=;%S-0glipmrPM;!53v^TOM{9_yT%p|Bc>zIBst4QP+PnI0d@T&CQK3yB^!* zMksnPiHtIiuvGvYw3SU3M~ouJj0lL8v+O$ffg{@Uv}U=j+dda{L^+OtI#*ns+8C7) zCm_&4$v_030WDdzr3d|#`*c>rA429dGeR{Tr)aj6|6VSr-q~H1dM$5(YovkmU0Zzy z?dO8o&Eusq1N|vB!z@!3#~)AN5tvN+@d3MUrrC?vyCwBluFXcCJ6Y}n=@6+N@IMA{ z7+~2dC@2UT7*K%9ZG3!O{pdZ(U4xLaRd%pkGS3N+0gY9f%A0-oU+j~^zo=XI>!cBD zauA@{L>JbO=q?W8x)=MuFctnxsG`N?!k@luC^pet!EM~k46a-McT{_j(QWbniJd<|66FA_3Ml-sg4Q$_$^sePr4 zIO!XDIxPy292uLKJQ&Vl5)nxsEjDE{`(p;7!8qX*qCx&6b#Za`{4$(aAFFHL_V}Z{ zQEKgBLe*FlL!$WaEZJgYnuUbC@1scA^xh+Qp5djq!zdfUfTZ>bRa5J zf3C&~4w%17EHvvqy3t8B_Wj<@A=n{_4s8Gj=^u0wGbnv^)$nT@x&8pb0ypNN&B4X@ z!w)tp|3tul$~p>k5y0|$(z;>0Je{vF{BTI{ywIiUJq-Hz`5M;!{D0p|hlM4>dJ01j ze<3<--56FA{_jHy2NF5qe?%t`IyJh%1@6!{UTX+jzT=RM`sYah_f0avtr|}b#cTUQ zkkeRLS4fLO(AzscIVtr9+}rOKX3 zOhCpMu=y-Gbo`cV^b;mMl>Y}c z1*2a8-3zPD;s>yblDOV-p`m&}7e`DHpWl-UX1&o(>hTUpN5O5!LJxv9$ZK8UbGcS# zx*VN5wrOm|Hv}j_7}K633w-j+KM8YtZSc=aB*k$gs?hMo?K(sMkWrht``uh|G z?3@JZ6K>E|bpnA00npmH`R&sH!9q*5xrIeMEBTgs_>%ob+!7B`b zKon!aBN^n`d#9A}Ditq??4L6#IA<1|v+bJ5VP)7AM(`VKgS`Wx;lL-&f>18VPmt-O z`V_Nl6z*HqGQ-YLjw1o*ef1RgT{`!x!~4pbzBx9su@bXLib_NlxI^nWYjXT7AdC#M zM7rqc7|xZ(8^yvx+T#iL768sbfO;89Pk-#*1iBzUFlxob!|R4UFhEEKot%EF?-RhW zmtIUHF$T>f`1vT1fbzAq`pZDJ4|b}-<7^wI0wo0v<@x0>EZi=w03E0EOU7r~&y&>| zD`z%TnDh%5y#ypE&gw@kpdbFXWDOPJ)Cc-*MOC2wb8}m7$jHcmEEg3N07i5|S63GY znMLnUDlBn~H!!X)Kw67*n-YK$GAcGUXl%zAOmtAeP-z7kQrl{0YTt_}~cBS9y2<_$Dc zf~a-R*EgMQB39Euzv@Jpr-?rUsbV4-Lpg@Qd?|J}*^LU7MCDosYFr>`IPlU-a@oMs;cwqyp3M@6tS zKW>xcqhu^+l=Ku>9OX5ZlzwfrxT&vMaKhDTY_8yUM+VS-5*Sw>rOXrI2<$ zu^dz_kvW)rjF+VDl_7UM-1{RIM`=3fIaK@MO8F2`BPNm(S@Ngw(%VpBFkzOIl%%Ah zicCrhTd>XrNWr@q)aF+q>f$dHaYW1$lz1~KE8aOQw>|-V9-fp~KVa{&vPS)jWJ$`( zvQvvBm79%GlY-;8==13HOWYW`b^_By1AGIy74Rblz`-8^s`^k_8VQ7qZa{l;TaT1b zud&qdn~DM^ozYPurAfp}$#OCo_zJ@~&w#TC&a-FtdPu=Y8UrSyKY!xSf+apzbcF?m z7d2KY~Mi#1kJ1lvDXU%=EP zK!lD3jIk-cq~F|}?~K4Fc7E+N7RK~%jg@O|@)r2{&In7)-Q?2<>)W@2GSbp?#RVCE zHZo>6+TTjLHt7PJKq#0?xB~VwECRx~nAp@ZOs_QGzT8(!+{TeC+c2m$ra)TB7^E+t z=6s!-a7bBU$U^m6bOs`?$akIn<~n1`OM*s|{;4%QcGC2TY1yy-@x3Jn^A)!jihpK;?=ohRv$1%)PZ9HRH97x#x1YzTD<_cM{>V4v;OQKfmZ;3zoE9R{{o5$e&-4 zMbT!MX$IwQ3p;wrSZFi22T`ncqk!V8KbbccwoS3Uy?uDkOi~iHXCT{WCS$PvvW@aQp>L^!EUAdGrdQ(J#^6cx?%MG9Brnu9`YTF~jB*j1p z!2C-07ZT5;b~SydCf*ld{2Tlg*T1F;q8PbuZk$c1Q6j9!SA4sN+XugQ0`dwoX&iWb zs4V8>%^=Dm0Mf;DvFcCa?}EmnI3fsnGseP7I3M`Qe!e4P|ASY6r2*pl@8#VeSU3OMhD zJ+XNvJEjhZ*Z?lI^=lX;)zCog9iriVj|RSWrzLuE{$#r$M^KWekWwZs%Fhh)UKTHp zb8=3apkj}!imPLT-QT*e7A_Pbrg55Y6J`Oh9qjJ00gPoO=xfnW1N@bew6vYG~vM)k#pHG!c7>0!Y zrVsrpfyaxIkyY{2tFv>Tk-?f=+?XXEpVOKc{I*X(wH*f5MFUQAssx$WFYx-v>@IU) z{e1U^Q)JkgjHhFW*F_1qAxvFzL;|`^2a(P1Hb5=;bGXnbQc5#zdA>K|*UaY*9_>#B z`4F!8gwyN$1L_;XFDZpj6*M88U=eD*ef`tHtSUBA?`s1T+{aauZWdABY-} z-kkrcS_ncfcUt17-xE^>`Wz)#4O_97U3QNJx->w_-@MsM#i$PQ^~INaOyTQ2nyr4a z!x{40BntUkN+8L>yxm_5+dNW24kSCt`kK@?KqrS|(%qb?@-`4aJ^bXhzy+ z!l1rC(`wo>iW(YG?!%zg`}y-{JIv}LIttpc0_Ali_WC()S#UVi=)8jW?DA-7$>55z zkL3j(gYn^f{X6YCCKW?+q^CMy{pnm2??Pn-Q=-h5ia?}61j!hnK`;IuSW}0%eb!AG zx(}R%p(Q%5=P`n&DQ?t{4_7U`;kU=-g1Wk-0RaL1?hQoBgOcqAN8uBr4GvwHZ3I^&2yoEUu^^$*)AxHeydPi8Wipg90JsMI%JO`j>;Uxt=8gaiL*^X-?(=u)5lq`fh0<&y zNKps--q10>3>tW4H~6-I5UV6)l5Y9z@5zM2yExHu$v@WH^+HjaDjGpLAOyjY!%2z? zsVLey9?4nDp;x?9R@IRO$vWuIpS+^tjn*&lz-k-ryyf6?l?too)`{)tbUBGVBg}pa z=pbMl!+_K_NY`ceuj1o8aL;rWRqQAd2s#!O>pVE?l#S%7E4iik`Y>2ex z)vF4CKLT}S7ob8j!q{_bX=r|+fK^gg?@5RMayGcf7@83FN9sNQBL!tWi^)}{SsE>& zNu{8UPODucj?q>XEMayKArKt+Baw1cWQdZKha%!YvL_GFEyxj-pKTy@Rpyw%UR#jc zk$o2z8knt*mleK+*0fuf>$4_GmTC6N$#3aPA{W+JXJ=%5g=IeAJP-#wHEJi`zXM!W zw+&pFU>1}`n9sgY+}wb|pwqfK5LG2;f%MjAFD%`CXOX9kWe+7yNU;z+{*pMB0IR=O zXF5VpB)$``fMW}&ySgi-KKE}ywz@>-dnhPi0d}N^Esx&xZ{Y(!%enIyA)r%s?sQnP zM8^HVH6 zlN(Q@ui*HljA-`zKJg194Cef5h+R;?p#{amI3>Umi2QW-6Q_JgudIts8|oycczu85 zGX&!Ilhz-1o^rcWr9!D4mx7qjh@CwI&&6Fq>jLJ{=0Zv^>UT~jRO%NCd2F|Tfu(GmRUme5b{IM-} z0YE4R*N~NEyL-IiIM5%aX(=_KTHkoKXBHaX zi;a$X#o2}|I|kNrTz?{f(4<>2zj_~z<3=U93aY^2n# zbXrmm>|{-@t^A@8*^Y_t#USFW0DT&aDF@0m`RUs{d4c<1iPjAv06ByMb8UO2$A@&s zff`X^Dvg}U18X~mXIkLn;(1E(KyPT}tCS=+NXQ!az~@l`!UX!SUuA%>_;4H~U<&I%Q0cte0eO%@Esv z|AJ*9-KhJ?>U}{@CoswYCWtTzH8|#YuQyvrIlo)S$15In3z??i@C?N zd%TUTx0zY8XOxvfM)p?r$jErxSw)h_2-!QM$d+X9|9ySF=l4IS_c?Wvlh=6Odmrm! zFgmgpdGuCqaq4Z^F%-ut^&MruFa+x@BI&ZO-#*-NOLOt?5QgxQ>m|##x&<6ZOMgOZ zZ4IX;aRpr;ar(omUWG$a!C zyn6ay^CGG7e5fBm&tDi#8PGj%aeQ`)ynQgz|6j5i9B^F_xc412G7{4V6%ZqfL?uf- z+Y9bAzRh~$;(&JJ$mE;vIzvJq6M`!)4GQ_=aSROQSZY9M+f2_Rzik=-0YVvYGXPm) z-(9<*pZ2c6{(uF~AOFi;Iv4C^``wnk`zu{t>gl%wZi+a)DJqSEW*o_F%L2`KW$LYF zMFC?UMfn6F9*P`QZVC-u*AJo{Kb>$4qXWmDx&IkoS6<4Tn*P9)2Qjr?e@v0&gV8dR zF(;X=qvgrzFR#abKR%)|>snd-{IKewhzSukvBo8%i`iN&^9Du5N%#H^xXh$9Cc-Kn z?QTr}!Gx2Qt!*OYwLu{8GQQgoh%2GxIdfXbEHs8LUcBq0k>2X^ zXn@jvd?P?Y9KBFlWqD|`VN6Ib*_p4Jh}=Giss6LGEw8U{)05JYA^rpl>80Mc1VKfc zQj`yx-}vYKuwa!+?*##jdY_jsT%w#Qyxw@7?%~wg>F`rY(3jC5pA7%A!=5zZ$e(nj z!;=)9?|NWyiZ{S0+GLj_Cwfu>F0GV}@f!EoI9W{A!hulH=VeO#>U+$$H0l>A1uM7A zKc;})5!6o937MLHcifm%(RF=)yC17q9C-(;k`eP#JbxF3vBynow`WFaS6W`VLr6RK zVJXWJq!^H8wt0g$j+7-20~oB@!lEcSF&Q>#-~*Q@&HXBhH4SQV{~UK`u9Vj0ZBC~$ z`;eE}&X!;Q3DiB>LhF`68$I6aFLS)VX$z)!f^y~vrumN8CD7t7 zz@*D6DmpfP?|-ix4o!JE{S>ugx(yZS!+aXEv;sGf(EV*A)dCvGv*a~iYsi3TWMN6r=ktp&7QKkg5WpVNCbdY^~!B!~4F%up8>)o4XENQ2$y}<6ew7wcFH+q^@BK ze(w3q7i1jWMODf;lrrT(kemRBxw#{9<1&-lFT)PZD&D*Ew(DCyu}>vjgoxZNn6t|- zGjLvoS5o=iP}ijM6f$ZeAO~_UntXPTl)iI=xy;j31Zj2p1F)zF#%%S-HaH@ksNmsq#j}JwFvlLa(c?^X=&B z=O7Vz$mhQTF{B~71qRsKq2xHq|5dhtTnwB1oBP1ygqd1EEeo&GF4SI`ODv_MPpbUN424BP}yd*Kv{$H zN4+rpy0EbD$zFXk60(P-P6^1f?~!6u@X?8%gH+bMfEqLIMbKz3*x2ftntzAs25n&0 zi^v8;Z~AqfpY)w0qeDVJ;n&~y=FiVI&yiYITvDPyh8?oM(LMK3(#e3^Gx9QjRI8E! z*$?vyVuEPWz$Y>koRL7DGcrx`3MOuAN(o~OL;%8&&>S;*vexGyGCx#(!%F|Hp(Y_5 z|IZDzKSLoAKU_#eeDIJN@{jMa%kIWhGP81w>)#hQRTPQZZZB{$vRUcr=QQZZC8d97 zd=}Wh+#}`JQ3~#UzDqh?RHH~oD`#F}G8Q@eBhbi0|? z^ls#z*Uq11OBtyZ`VT>lI`!hO((aqxnH)L|RAgi%Y#l(K9&eWnvxUmaxsW@4?ty+}sFYDRXvUS(t_o z52(ezg)SZlog*tuEa{U@cMHN%V#)QOzb@?JRd_q@iGaYtZWsHL_9ApXJ3Di?0NO+0p(S z9ehZ=bKaG}ubYL5)ti+w-*YN{O`q&54*I^vkcyjx zI4sH}ajxsn+J?-nbEYK&UE;jI@dNjW1~3tS6^E@Tf(f4tAEnHVdlLV`JCSSBlon=J=ezRlkM#Dd?0|4Wy{`@^p@4a4?Z*GHLDLV?`oIX zUuKAS7`n$&_DE6#o^ycDWZyJ}bvd=qZ==z=3a`7#Rf;34s#qcLHv&@7rLx$5;o4NE zT7?F|5RAM&@H;3Iey3~qL-hn=y=W!e!(e!QU6wBTWN*C6RK|nLjLF-PT>tI2-(RLt z#JMpc1+#*(^*!nZS&y#*+W6H;0O13m%C?$3YVzp$vk3!f23YfRo-NN-v){<@q;7ir zSfz4;sUY&%>6r+=990;73kiNb7)`?cgwze4l-59E3e_{4eE+E|}k)ilA9 zFYQ-`nPWQtrU3; z1CaS2a3J<%{T{T_Fbo2U_8Y8K(&bCC`ugPXr?(4#EpBBCylgo^a&jJH zrV_awDvN!m=r3M>qlqYT@ryOt0gHy%!%TqQYFam)5C8p!{woBuM+^~6y6sUvqtJOO zkHx;AR`LM@lDFI579#Yx2j6f?O2wXw^Zcj4}d! zcbde3c}9UF5GwLpbrMOR?&x9_oQk}xzp)^=qRwt`mrb*SNHHffhDq=F*+Yl5QQdjt zyJgRqJ+d}992kr_xoi1LrU=BK_o5$9EpKSLnXF5q(Lve)Hm8X3I8IaaqUN(<@R zd}R1acQmgURGby;&TtF%+ zpejpg-7lwb&kR|t}#4$Xc)}VU6qyMP<%nVi?eFh&tVy&VQ zb|3=;P$)_dAw_(C8Kh zFwjtya;O}M!L$eEw8up#FPclC+WrpjD{@?VWaTFf^ZTJaYSB z3Im#eOaB|2yqR59o6NDPhl`>2lPtf`32ESSM06B;*;n$pitVgUzW(WRx`4b6t0N`; z#7mDV_pOvZ(7K6S4Gd$b(YiTk^Jo=^sO>L$VD1OLbhYJ$?7j|IT=NC$D-O1f$?Pdl ztS-Aae|mz-y)>cbJne&VG}M_l4(hHZk9{PQU^?SOP=xs^bBR^_ zYg^Bq#=kAOGp4TgTx^M-A#n@gTad&UnUlXk7NrPYFhF{vrPD6IK?qHB&FvKhk=~8+ z@{&t(3`RF3fy2lUx4D+e$qCyP;oJrI(Y zTAUSaRBCUkn$5^N}GTf_p6CV0D2nl6%^)8{XMkEdL3|RD0YYb8Lm)uA#E`}dM z-_Y!3$tCisSn|Mlv|$;w%G(j9w?k=@q8%fDD_$pm8`k3%+Vi087Mh0KHoxukSp>Pk zI&=4;xGp*KI^Rmr(=k@oxSTT6<|T_ETDP9C0=eQZbA9^7{DwX^TBUzDzB%!6+lU^p zX?dcHZ)r){H5cHxKs>}DE!Ll3$f2|z2vE1^&Sr>C$toPMhDWSA=xN~NNgDOo_zC+6 ziLb1{>;_STkg4{Ezj@66Wd0^x?ob5qRF72=l5G2(f>H=VC&#@|Yr@UQS6&Gue($Z^ z6cor6feFDa{_14&uQML#Mr6VS=LgXf4+Y3RT`5Qh;`9aZd4-+&mXO6gsn ztc{d8+lpro9f4`N2C-d@$rv^4s)6xF^{gG~@7r&_A2X_Q?!H8iG;()1e zk`eY?>Oz;DAbr1Gl=UU$zP}F?nN|Ms+6X2pN9R6EzQrj24={GR>Ssto>eIh1SKP*( zGDr)W@82Gz;r^FfWTN`Buy z8khHs3t^NA*?q;Wp&c*7FlnAOXB9!YNiDWNsC2z*Il>(rnez~l2qFx?Vm{hqHMR$ z*4@6c!+RJfc=w(ns{7kFvH2*$1E>l7>6huBf23Ku4~%?h+OuiJs~;prcHwn&npr!cGJRUMv*}P|jX!H(Dx)d(g+uZy{SE(~LQCedbmF zkoPiEn{-7;N12Y9E?=> zeTD4&YnI(F0@|0}@MCADM4|qUmSBz|6DDI>^)&MQ_+yI3*viL0rZy=l{ebCpcw~eh zU`)af*{z}1pL``Ze8X`Spe%L6Xmk5+DApqVHw1 zSXAHZ+?;&POiqsAhj;$G4+6d_xvi~kzj6xVQ9)gG11rd9_n~*TG)voil+gHOo^ZY# zuH})>sb9>iAffvYS3rWb0ndgMLg^;wvHi=Jfp&%WCxxt#w3$b_l;4?@YGi1E zSsbhV8m$V5DnPr1G|Ld=t0b8xap&E;cO1ODZ*xs!mK7cRd+oY;zAfpyv4tO{E#JG4 zhX647w8x#*(_+q#CBkC@Qrg;3dto<>icw^wOenSg1~=B#q9VAZOA+cq`s8~0t*rLL zBN&#qDU}lve)p>~Wa3Za_hxwx( zhx0(GYg108tHsaLq(dOx-bSS3hZqU=g=bRot7GAtooA=w+B#oa;G2P#X>!En7reZ! z8=i^3+#l;S``t5Hrka44FN#T-hCui~!dZ?;o(Xjv89DLMi_fKEzi7*{I)_6oh;7}& zoDY6oQB#x8&viuM0Ccj`^UXn49cJqZt1pjf6LHI4ejqk&9vF?pxf}_YamPW90@X;f zf299>a=yXXrO+wEQX9c5chwFyLkKu9YQW|rK=DO|HhWp9*LjsUPPdezl{sND; z7R;KLF8Zk8oupqpI#E^DIUp{rM>$(n8HEMGi0>g94(p&-i8JG@#EFCyM`W1}V^2aq z>vy8V`No3Z_JO7f;e2ON-uEV6uFIxIqeW%t__xb4r5sniryXR8dIqb4hn*-?T*JJ7 zaP@r}3^FOWIX8EvR-l>r4VplOZ#~E@9fpp8K=Gwp&=pI8)NzA*oe*RnG__%~w?5&v ztvCy>70>-ov~olT8}^05{5Yox!!N>Wx<8L~p~Wr@1G(JCfn8dPL#)LZIB282-sw=) z#w)+NeH>5D`YOgpXZBO+WW#H?Qb{l{X2}KN)E-U3s(_q^df-1(6p5eVw-x9UqceAE zLxM;B_eO5rkZ~G+arcI!1cbATAwn?_v%sm}W+eawAhH`RKR+1GtL$0(uuto?A9w zDlM$u7Ko^B#9pBq5hAdazsP=_x=qWZ?k`kxe)r{m?TS%SJUJ4yQH~-DdV@93Ae~5i z%^63taJ=pA5V7OlsL3OQ9q!=~^g8!t_#S)#H}Kx36Ibi}RAfQd?s@{3kcP|cThhgp zvGv+s){1Oz=4wV-)%nEsQ}l-(Tfs#%$-X4zWsu_5geD=Q4F-oDb3eljAFF9G$^D@+9Sm(|<1 zFFSKtx({~sChsYfCcoq6MD%%}j;TEEXZ+^q(pvrY|Fi%ODdJDqAU;*2q@vMofC-L3 zK)lT-ChqYh*${jj9SuV@N(T|E>FaY=6z9O?3(AB&GV&aIYH*|?in_bEKIC`J!m2I^ zATeujx9E&xG=0)59I&6nf~3zPFes!K7nhb^BOZFtR^wIg0{^?8uk%w1o_Ye)rIhvu z`4YI30V5B8u2)&+F}-qj!?I7KVCrH+w>=cmH8bh1zYG@FZ(tTjXc1M5Nns`Y^xk#= zgL|x#&Ds${7~Y%1@;5JteUAldyf#zB1B^)o*WxpKKQ~AKpe_IlVjS(E3`Yokh%O#iZIW?4B%!hjs4Ht=!K}4s#k#l4mIIqK;np>@)n_`-4j0ZY{lV zIoTE;Z`4$;H=CYS#mPC->mNg@j&Ew^YF&5j*$t?kw0iO75;6nq`n3=myk$D>b1yXuwE?f zH=h!!$gZ~WmY_q2-)c#`Chf5D?ftI^Zex#LP+ecS_Ps_(5$%+ua%}xUUr}hhP?(wt zQ_Lj;G~-NbXnMYP42@_Ew3zYP*|V5Fo2q+a$O!=-Z|I+qejO3SfZN;t(nAOSbaCrW zqK5ppIS$kmQc4HjvQM_niX{v_ zqHCj!AQwE^v4Blt8%(*o{Lc?u4NC8|WS{M@BSIMf-Yx1UmdBc&H8%POmlzT58-?!t z(TJWx)GdgN5Ev7OUDFLRs~S_ea9Na6&grq)<9FfIuPTFUs?Gsoi7J%v)X*RR0U*}g zrz@cXR-I@ju5SI|r(QYs@zv5~ZwZra9ZR}QSyI$5hO06?>f>FS9^=~brv8(tOsM=R zxztI}vV&c~Gcc%Xo>cX2Z1zyE6@`i_KU)87e`7`To%6I_%j;y@M{5;e&~|lcKJ{#^ z6hKJ%O#I%rE7ZS~wnT%il`K^Jq|LKq5p_v@^Jz51CItqg2D7~Y>&S61<3p=uk zp(G3FGe`OS$^3oMXhj~WvZw?lQgSHsU?-_CD7zZ(pV*}cRhUY^3Kw)4{NS6?Z_L}G zhkfEjC+-;PIvjuV6- zTA=ac)MUT(f)qRIbLq(tL5LS#Y|JM-_?KB`j)Skwk@OXt9fsqbk~|C;$ZRF^!efB5M{XztDCP~mk*v%TeeyvKUyPC8g70l^akL-}$EP=Y`r z>pWIm?A9td{5Rx)ec@=Qp5H~D>4tfh+J075-$K>B%Lxe@!v@^yQZlL2cYL28c(Nj# z%us;_z6rYvf)5bT?pq0&S`CLqwBKl{V~W5Clxp4Fqm}Lf>kb4w+J1mpa?P=l+E(6hxn9dLnO2aBI z?H3DRLlB-|0g&pqxdkCgGN)}T%&0ifjnvyREn{n^I_2nf#`g~v>_L(#*K?OT=JM(ohh5qlK~~*ec?rDwlu3AGZ%NQ8*^@gj5gn-d-GMIfqnA| zT;hQ%^xiL^1Lec)oPat8ECpYHTr~RV%@2Wm>yv*h$2=if!l+Ap2@dyOD)%*u;-xt^ zrU&u{n5mPe>z)A(#?U|>&YPLtYi{rT?ktT+Q=qguP~OAw`%qWQkIha&B}GhlG*8Ed zzJ|AbZA7<^-v7i6JepG;)4OY9+nvm@ShwHZmjQJyjbg5qQqJgn_{0(}>S@q!CL4O8 zus2;naR)f@-#|Do0(CzR^b{r&6f%KKQ} zQ-DDK5_k=KcXt+%+Xz8i(+%YH=8@^C34yHg4sL*Zt_rQ#`82@$ks2F1tXziR zV9y1cS2;*<7(>675a?1T_TB5_-wT^N1~Rx7)w~+SaH+GABAdP-6(DBK8_btb90)$= z4C?Grkmsz*D>xGi3xqS_{l~dB&NPqy=t+h4Iz{L)3l;(uA!1UkFhP*ulwojt@S9C3 z+G&WUYWlE4!+QOO35M^XMZ`AeUsDPDpFO{dk56?+I{jouE}oaX-pep!)aONw5>u{> z-{!BcwrT+{-V7qBR?(EW$I9SK?uw5I5SbLM01{r{xU!%iqN1r^=Gr|MZ%*s(o9@o@ z=PSU-%aN6`h=)9^u9FFpBfCtdq>v=^$Cu;Ei$|XhLm>FY^1pMy{VHrO=>C0`Zs%vz z<8HjksSR(Yyfn=PoP|YjfPe<t6{BNAt7IuCb=ajU5sXRGMCM+*@9slrzeQm7b%0(%w z^b+g6gXbF#UStBL9)XqCv(i|%8rKEjuqq{_s)jMx4Z4g=l{Qm#aaf71Hjx-F7cpEP zn!*R!!;6EPLx~BLZwlpPkkPlye%(%hOO?9Zm|V47c8I$6Pk7MN*RPx$WJgy?2fdY1 z=llNWH(oUUxk>EP%cuVaGxPpqcB7^ex(2mPn4qJ$x3RbN*(`KG51D?R!f`vbYYsa* ze#YGS^I&7L_BkvqxJD&_tu%0OGVhS({TCOrsBGYHJAH`g>t69Jmro;o^L@)XqC1Da zm&T6!{Ld^Y4G|;AnQ+A#9_Ie zPf6K=qm4WHSJ|%yaAaca1M0W~KZB%w0xC6;3i&6%jV4d&0pvJYk~zmC9{eqH{zG<| zgMNWiOp_Xj!XaHz>bwoF_g1ou{Vr10VFbK<$FtIE*TIus(%Up{K>L{SbXLVms0cd^B=@NaB=IVT zCubs3Yn4`d=k3YP!Lpp{;}Gr9a-Wx`%+@hGb*U^Q~FEA}_fHBB~5z zKy+Tnlt&s8CI7}nZ|D`t%BP}Xba*XnDZ}q9WMUeNH9J-F2m1mro2F0 zXi3SYJ0+k`X2iT)jqCR*kzEYy-be2$3sb89X0w0?5x0okF4eW?M27@~RHmrgrG?~k zEUa4XKx8EzCtW=bn5KRM0CH*0kXbq5m%GRzUB&E8!Ch00p*U;tH*r@_K04ko!Nc`Ay=ePEfzcW!~{ZS-W5EvYUV9 zrLRAwS3#pr=koo7+xw3hH$`2r=Ri9B3s&5T-_Ip|XocS8 zRlb0u*(;Z$e#I9Y13!B?gTtSiB#j+p!v+q&MA~Mp4D|Ki4GyZ@Rg)j8 zDRNK_iXU)o{{Z-}u4B}qgAy+rDIk3(U=1cxnSBnS39-kA{_y6*xx@D7`W+`b^2WSLzIiG|@~gz@xRU_7aO~NXQyorxZOj+Y zhV{MT)Wtfm*_dS8U$V1CMdKV;i94_xX}3ASx`qtgqFG0w%H(63_`>nzZXpU@f%Mq# zv)(9_3~Y=oH6UFw8?T@Fphq&cRXZ8Xc76l<-nQ->57M>uz&fE{KG$2Wtr*uM}HgpKpu3{vOa9@b^Mn>CPpz5hO??FF@U_ZEi-ly>BP!DLu_8SZT`>$B%4f|vq+h&BLVzjwYM+xD)j7_B5M?EvF(L`@ACrGC2_8U2{4U?m@$ zdoQevNK2y(XK(5lXIZGK6j@Z?+(@j$)h!KUMLqT5tqB0kE`mn1>&*Et9AN${w ztZVa4mK`yq7?+w{$@hF5ZlYCbaRWXB3jCV!17E(#8&sHU^qH%&u-sE9$Mw(Xvh&R) z2*}FCV*MK6kvS!Qr{La$o#laR)Izu#L9CGuaSIVR2C_mCU1=0W{=9sNH2L~h{F9Q1 z|1!a58p;6d|DIuSBB282a8#T8VO0}O9-sVVQZ8vpL|PgSr(-6$T&sowna^)*y)6n} z<6w5RuO`XeUjdE2{y8{DLA7Qo{Y*1TDKhX$UTH&G?Nt4xzhM2yf>T=h&%6g90T6X= zC8Xh~T~8r+CEyn3@y?sEIIGl;8MNyL++aEeqt=~YvzxFC@l`?k>$J%^W9KqDrx@Ad zh%fIv*5E78PLHdB$8^f9oOw1}ghrh2SY%)0qrRc3Ct8He{8KobD?^R2(;zD$E>Lx&n|0+i!wQMLs>s}Yes)aw^gGf@ zVws5e#J`^GUm6v{GqV36B$p(-YRU!bB8&XD>GDhZMzs4{h-kop!3GzF;{0&bwf$=7LOz{rDKGLGeX%`1<%{$?3fF=V-KTex|4kq5((>?bylMle z6t^Mgb!u7!z|R|=zyf?LIy(azZ0YaM)_XlRV8XbOHQsT113i?No4~WZ(ctmlN{o*n zU!bEX1{n{bNP0BrYP2&QBx$i3=QYr>MDn{1y>HQcM(?n3ac{n5Wgip#SR+FGYR)?} z=&RL3SVIMhZQu;<0d5V}#!S!qX@I6;>ARKEI9Dk<{?#5@dPjn45mP}uVb1STdq-Q} zq=HLT*dcP{cDzw9=)SDY<>(;4`YC=?D-tJ|L9uM+Pvw-t)t~J0G?Cg?HR^=KH3fa9 zQ9n-}6=gYAU5(DTEpOVn3=r9c6jvX$rf1=N#2zD<_iNODGFyDQ`Pr{9t#>E!;#-Ti zk+NsHlVCO09b*xw5{AVc<}(v1{X|(7%FWxRrP(lfpCr9{_5Tlz$@exwlY7Mc!bEtA z(I*MP9Ju3UqjB}mwa~=)Nqn}`F?0k`dO7AYH9@SbNK20}!b@h2@*et`HWyY3qjEX& z*RXAz^L$EOA>~+BMSCGCp1Bo8Dar52gUx)m+y9J8W9U6}1yARrMI~xPonb4B!bMdY z&y6qS^GkH)INAne4PGl3Kf_~Av&u{z9_6_<_*SkP-=8KgH{M}IQSLKeHzRQ>hzf#d zEF50mAq`YC4%dxsT^`RWFEDu|Evh*}kTB4L%Nv<5M)Gy;Q=vUI>=lYJ!H-FbwtP~w zzYH%4^?I+|6%!L_!$|e3l`Fq|c5AOoaD%rE3udyN?VhPu`Co4fOunxudK>>)tI|ej z)V`rb;^-&4NAbSce7)vJb6zJsy?Eh|^slQ(X<5V+)$ZOsgm;*Je@PNxAgl;Nwf7GC zWFuv<)iSHj#eR3Q+V>K>SmH8B4nCko9YCCiBSB8ptDo_Xp%G5R_P97E2V0rI~f9cY5Uvygg z>bt6_D3S6T&OJ{w+#;fIy6nt1d-@$Q)XklCmV?tNMFsh3DNk)*P$C1t378$-e7}Pd z>P1*U<8S59*9PF0BHte=fgqW^R?C0q7txQKYsZscJchDxvu`};bA>f zAH|yYxq<&ySNo}jQq{{MT$S?*N*t)!tnww>HO8q9UT} z8oU)z(=J{d9zufEmV@r3v=_~_ynT7PDsnKcKYtfL-`3|{Gx+cU)Z82#9G~e?PZ%jG z@9|ut6+^mv?e}9HUGrr}5^gnrBt~!BCSop|QZRKqKNmuDtvJRSs3Ge3M!V?1dpUkJ zoduDc&a=(gP)GCZsbNe;mPF@BoAu^^U-JhTu#nHme)G9C;&lYX29$u+02_i#v~TX? z$NAUMA)h=}+q)p!2L3VQ2lHtQUqtGTc)mc{h<|*iN^?M8I9h>~6`W3xVOI`C!cxL1 zkxk88nQQ_@d_?x1x*^gj)#{#d~HF1MC8();7 zyOigj;q6tf59D>=Rq;g6Uc@p?gqsVL2N! zcQ6N{^n6LEP4W3z^LoL?$E=773h{VPHa$lh&JH-H!uGbpdA(7YijPSV7~C@?oG4wg zV^5W1wC|brv?L@{79Zt)>H|WsCpV1qps6c(!l~W#e2I+|(mV=V@U!$&F|7 zqgjVWxL4nvk5SKhnjegC!eDhe+bNX!`rA)u zx0KzmEMnpnW>cAhXYm@#2g!)j_`lg-D^_A&9^~KqpBKta?ysv@l02iFC9B;v=jr-b zk2{`N0ef^1JLK#&Jpi2)LIeSnJrAeKuTbzRY!2(T7L3vH^$SJsELf>=aRbcY9BJjQ zVs1X}_PB$Q%Xt1VTE__QGo1h4rcq;%mVrR`2Oz1PsC2wBttEb0j%ZTj!IyXnC4IN? zjeIs%G=v`j=&NA01L#-Fh9~&pmeGAb8M_}h4vHwreb%dJw)$J!6nb4(2OZFBV+j)i zd)p^6mW|!;H%9EDTdpU;X8tX+kwjDkbsBaW#|hr8^V^JToI5~6y3`8X7EKQDq5Ghf zKplq)C|H@jctNg_VPHsz08NJ8osAvFDXp?g!`PS2Jj->iCuJ!uIPaTz+M#SV>wj`c zC;E<5gmImbCZ17Oj*R@3ft-?4$v@o^nYAK)6Lg8rsy9cSPQAz2h}uYYEn!>4C7yT5 z7rtCoRgw3+CE7f{-{ITbG5z~b!e=v_nYFD>=J>Y8W531YUB9M|uA(TM-%&XGnPg%2 zr9Tx2QlL5u3_5u_du?}}kGQRs z)j!@@M#Dj+hC@J2HrAJ58C*FwR*d_l>ZwNU_0K=uzv_MVn66kv{hP2$J2y)BW=A69 z$%0SmaXaOkUE4#Yvi>aQ_YW(S62@O+F*(R5upr^h5LCUzc@^0IsofvT2P2wd6eN@} zM@K$@@?MZN58fk*z_iyAy)LlF{d`M-JPm}WV9a_XYPkoy;8G z;Q*OxFYd_Y16V0}@!W;t*6MT_&FC8gt@~1?C0&di`gd*|~FjKK8DS#g2Aw>T)iGcE6ljQzFCG zaTWm}pi@(eom(oiv_@!9SLfpWRD1jU$&Gta9ON2f0AE3N!Vl@2w_>lvjzwyrsfo#9 zNuN8NzP`Qd2V+GmG7ZOg-C@1%pDem4vzG4#mP?@=Z<%nny1EVZo4QKO)n5oqmKgE@ zEpytSLwJLNdV4u?TvwR5^IJmYL~xO%j!D_$u}e}ZZkjj^<<(9T0ytnD1h?h;y-CMI z0Fu6Lr3m6-g{Mw^!U*m3FnF($E5R|fEc8w`w?z#-c*Y+oc2MJa};Vf{MuCV6C zf4M@cp%g^(#e^k1FgN#w1>GYi2PR;qklYr~y6E0BXz%~z>$TwV@Bg#_ry(zTLl`2& zAYOd~O?@^q{rK^?>JAeMoHckS8CeN~%lqMWOH6llWXYW$sr>-w>fwr(|9>gzi%rj{ zQj$Y^A8yeMcNl4iQQHr=XWlY8dwz3>5$i7i9+&#-ZTsS+Be%47vE@Fqb$gRvE@7#v zs3FrBTArw8M^w{VX-_y4006ycU=(Abzr0vOG+-Gw@It_$iXk*p*I0X1F8xleJDrj~ zO__`w5m7Y#_eC$d{^&jzOrg(sCQ&@k zwwt%P^nU#`-G3*YNGkzzI^R6|Vj07R6-6oJO39H?WjEso8ic-7DHIp>+A80BvqlR3Mo?no^4THO9 zeE|fS`^`Mtl;U!9EcO!X?CNP_>+aA%eFfD~MmD4?Ldp}k-e@HjL@9z4+&#=<)6q9f zog2orm*CJOwY%Xe@R`N;rzKxUm4|k9hBGS6fkz-MF@7LyoQqC2UR#(ztAA-YdTGSo zc!WF%*NNrgP47&Kk2aBgOlF0UxCHc33RtfK0dP4|v~wI8=qzFnjtUvYsx)r+`Z6kn zJ1@R~4gE9}iHZX5`T3CrUGsa9>@#0ws>Z6_KR=?>@zBFei)Ieg!(;X*>;4jMy%i0v z%P*2Q$Al{#)6;ur?{M-xdFQ^OWBzMM2{lD zRXI&7nlh*E$bubMiCbA3rF*m^2hL~dn<6FT>0e34vNG5&R?lJ}y#b0IWK#$-QEen8 z4t2VEJ(F}3#uC=p4*g7xu>(2iC2`pegsnoh*{)AFCI`KJyI^I-K>gAvrlXSNVem>p zVF3U%!Y=`Q23O#i$wD^Q|yD7-Om+~c&)vbl{eZ$cNA}&@nRNsmYMHgwG z1%1CPs4mJae<5#A4W+@VBPI9SK=6y(6iHfnsA3S3CPI0v4Us`xS?9( zDw>~L1Ox=2HANd5D#P}yIa}qFydS>@T|WrLBq?cr<)_P2Wr=6WQ>}6Ij=KF_1(g-| zIb&e%L|m0@!gj&p2c-Q+4>x-&5P{3*;2|Oh`T6g$CjT|c#HdNZe|(Q98iFJFQnyX|ZV+VBmp-aCyCC4!%=Z;PB>S19kma*i_yWHADe=W_yx>3hBPfc~LLO57V<-7VRmJ{xYnH0G_=14L zANFcxC#EjD%J>u##{2J?nZ3`j^5-xO31szKQ6r9exOea&S1N7*Ln`mMs_E0jF(gif-dCMwTbAI^$EkQm>7 z*oN!3SDoz!iGu?&MY}p5N1wxfbja1Eleo(8zw1i`{Zzhm9;X4fODy}J5O-G(LpdTb zQ**+Dky3gopPFw^v|!sS{0=cF!()!K^!ue`VeiB6XLnyMG9(b&83aWuqBJgZ3il92 zdX*R9B~NLTSzsaI2^*efCf91!gykb!Dn6%^+s%s`LT3Y;x#F_3wM6rB-5l;Uk10~R zx2%mktjf?^N|>k@At6p=!TVM7Nl8xDd2#lT!1Me#jjm!APIn zdSpazbQJVuQ>DHxi-{)IRFOPa{OXK&^2eRd_!=|G(xdg#2_nCe$m{gl4l+yLpWBxs zOdDl*SJ3+RO?*Lr7M*2>0*wEerD23c2h*yYoEKdT`z;VRW*r-YTRt9S*)iqE$IpBuC8$!FhHUbmOa|*o zpTEzFJ+DY|PB&fu@gWhhIU^s4E<>P_TTMHIo~eTgiX^H6X^M?6iWd~GZj(h3wM~j8 z^%}N*+rOJjsT2Hm_ZD3|1g?c4a`9GcYlvIIM^o~=yXGv5VlEb9ql(sR>tr$Ba}`K? zaoZ9OCQFVgfXg1hVj#Hg>0IIT1}_%9ORCzh8ubZ9b)KA@ypT&JF;M3q{#K-vR7L&T zV}En@=DxYNbGW<0%Dz%39r=8UG?AmZ##?R3nWPrzDw^6LJURcF%}#HnKC~-)ZvA)7 zQkd{ciKvSc|Aa92iby?aA&+W@3Z@qoF%rR}s`4(1CnA93QrE#Pnzq{~vq4Xu=f#h( z`QP+piwIFr-8zKkS{AJjbk3JxJoXz@9`@)_rISA_6HE-<@(lL}mquE@AGe7Qszc4h zhtQJ0Km@`@-p+?Jfjnvv z&!7LZpvyijiTM&_j;#9wciCa@BfnPIGlQfHz;0(;F=km+BPNZT(N+tw;ejuB>U(u!3ZlLx1m|L+BPdhb-Cc3B z#+L4?xDl%+TvS7xXfx$wbw*|Vzqf+D_hQqd+7B|R^ech%hHiSDy;aUiDE{XRWEs+y z6JG6uj&`1>*=hW5J4fKJGI^ZG~RJo4H=fzyRn(Vup zOL$VDsk7XwI&c1!6OF2&Zl9G8G+#N@91;2$5jeKgy0$I+ts_(Fndck*_AYr;Q&y)V zN7grv7gGA4(M$e(N&^c2P`zdGo!|aJ`ZK7)Vj(_87j$V-^{@Xfa5r5##BAUNVi}~r z7#V$^8NqPS!7JMLBD%5pp3#+Ro7Dxg zH6_FZ`9@PbfpV*u5OuapWJ;wI`@pqPlAiXKp=sA6@6OoP-&c#SLokFxiS#+>Xo-}F zvvalQUE>nt0}AZJLbk~I;=Yrz8B$RpmliY&j8?<$6xfM#;IF=0$t43~iffOkA6=PHxGv?cQ~Fdjq0+d_yUARE zD!TuQZtUiSOLe#y?l+p<)$w)tuq(F)oWJ|*EVn?H-wL+q@rJIiy0LV>7ia7Ie`^z+ zT#m~3v z-+&@7BPuFxZI(&Z+c-4})o>te#?CDKI!{;_`bSYF)vIUcfvv~C!XG5iY<{`6)edPE zascG+?(VMhaUy#2fFGac8S~If+)=ctWeI^#4oRpMlcs99pG8I-G@l>KKtwmPfSmJt z!OojN(}-MXMA{p_)iXq(Be7Dkxh2&_Q=*RaUcX}7bFJ>{4WSXc-?`7!B*%8gG;TV>C4 zk;)BanSnVikmC@42g^ICvxtLD#8!wBv9$jTy}1aIzom^ajJS1h<`ce7N&7{QHoH5_ zsHqQ!-(8%hmw(BWtai=*EO-DeZQVRD?1FL`S&os!cmF%0HUqqnQo`MCP+J2zbfi8I zmq&%1+`4etHIRV!f`6@YHT5r0RZLo41JJN1hVG7-u}SybOq0Sj)%20HN_pA;N7P$D zb+tw7+kk+GU=h+GC`d_nNJ@uvNO!l0l%RAYAT1#sA`Jr4T~g8t0s>Of{mp&u{oij4 zIb$5pI10bL_F8kz`M%G~{3dq;^?>=SgVs}Gu1*b=@wczO%mwZ}prgC~TI)^vp|p8v z{W`-XkOHH9|J)G=1?a=z@Xo{m&PUlzAKjMZqFqovY9_Me1xu>DZeFrK^XVV|D|d(r@_sGkby&uKi+txF z(Cu~+DKZ$RK0sV5D>QL_ufX1&FuT!1{fBp_oqiZ^dze9eRE&j71^+^l567&MxrhGF zpEP0|xC;3$en)@s;;gLvwej(H{bkyE z5A89fhKJ0TPWfpT6hofoEZWRs;jGP(BDy4DWv#qyM9aov`e3qBM#_XAoUQEF1&9ZQ zj`UC%9;A|YU1QGowA-1UHkJ?<-1&BmI@IYN9Uati87dEo`|x!s(W#qW#@gOk4=P?q zFTK>j9>whhSzarkm4@Ap&o;)-hs=U_KM%eBK3GHbv}~Sm@I(CI_~gr#h^vhu%B%N% zKQp-jGXclpa^Emp5(mSLo%lao`h%Dg_C$ByBk$dwmL_0}Az z81~Wxc1QP1Zlgf;cnx)6G0Wrh_lYOa0`&x$h$<%UJ+95N_rRF&NbXX2cVR6`kQ6Z4 zsLfhfT+eT0VH$w6wqW;r2M!I|S5_C&-TAOK)I>2_{3QoNHeTy6Wo|62a*2=LsMFQC z1|0)0h=qcR6|G@Tv4!Gx*b}~P6JL6hjYs$EeVm7y>0A4!h`-i*`j$IJ!jO zlyIcO@qr2IdRhDT|7~V**GJx~a1Car^Gg&5uN|DAH44ti5|hK*_wk;Iq=G{BdDDc3 zR5rJ!+v_x~jwjtZE{XD##ExNNWk9u%iU^^@(?OPPbb3l)DGqsZK{JTwf=V zyhe+yp`8mI1QY~dLN{3IlHrw>ASej2%0sKNb4e2yD<1*ujjjbYHi7^|J7^xU;wj- z>3ZRJ`h@@?3fq4lA_E_T{ECu@IE33ocT{MkSW?H|M%=8aaD;4!Y`AlG2I1w zEb+xGNSvS&u&HQDcVtql$%5+0VqE9!LFBH_<3Ld|vO?0*@JA#<0&Zvs?q=(bjUX)7 z;j>ZV1f{90uOswJMQfhH>;Oy5L!a=9XuCVfO(_kTupu#)Rb+@*gC_q3O2EAe-{apSu1_!Lx#VQhBK~3Z+)upv$^C6fZDqsu916A;rdb*fJUxhCbOB&HB=y9ZKLigQDX^58IuO+ z(6H+~e~$LFaDec>KhrzJSV3f8sq6_DvZ)#egMZ)odz^~nmG^t=&~7+7-pC9}%lczS zl1q96cwdV=%_q1JJh2FB%bzd{_5L-M)t`+lzFP|YF(rr7^V2@)5}wK<4SU1RRFnG+{((zdGEi<(p~-o9P**m zw2$T!mD(rq-f}x^++$r-5+N78qs$etK0O^R_CQCVF4!%S;0`2RTZ1#5fzc}1#o&i@ z_r`Sm-*6nDG(qpsxWQn_&CTua6o^*$e;$%D>#dGVyg_-hV*oYAP`c2yjk?ZX!P7kK zccrVQK5$#(`%@v$7=eemcf0hg?(OD@T!d8FOrCb>tCy3Sa;jitzBM0g#(ytvf9PuG z*sv5^ME;mR#|Fw3Vq*Hx@1-;Kw09|M!#QTH39@ROWS&+^9y1nVZ$^e=ngFK>Id9;b z34+dQI+UytdTlD!TMt$63ksf}90%}kUAo;^Rbu|Ra>du5@Kb6mZ zJeT;YpSI5MuGlt2L}(#}WzMv)u&{Qkej_%84(Sb4nzX7(Ns3D6vy*K8b0OVcsBu`} zCJ!nuE`I7^25*J&j*bqS7w<%^O+7`o?oAC^1$OHyE$Q;9dm;{5-9JPFP&}a600W-w zq|G@TUXqh;v?{c7$_Y_6_F2)gZ%ha>uj7)uW$J_a0WR|E>!wkIX~aT~R49nk9yGT` zLHu#T=R4w3kz_r9^pZmSIozb#n70HcbRMc;)F-p<9ANeS0cAqD7895eLnA4KjJo2V zF8Ny}=dzhWqT;;A5-#K-#oeEbdJ{e^LCaQkFwbjy!Wc>s9De`p;oPbVl*C|XO@&c9 zJm2KpUwbFOJy-3J7)nG$)id&R|%MZONdfS=7ybzI93Q#$^wl+!klUyXcBwv`j#nuJ7JNrsxMrNj~d z+6MM41?~dSBS&W4o9^D4nwkhH=a!#SUg~#x`I@@>HH6vm!BkjdB=2m2evJ7I3|Y9x zGYz~tq9wPwx>2unZ+^#kF?rJQ#HR(ii!&G6`*3-6hI~&}2)Y4}Zvbs*I0>uYJIMCn zV`OB#Elc|FP0}rfihtZs6Iot-0NEMJnVjt6b1j*K94UtQIrF74YH?-tsuHh6UQGxaPuKMOkL zj~IQF>)2uJOCAKe&sYPff@Q>#k*>;g`5k4cHW#TS8L8~Yvi^RP%6!vpW|Pox6oIp! zWch{8(sIO>oqFVvD-3t>W@tPazhk8nr{7xh%`{ix0_s4}en$S&@pfP_h);KwI+J(Sn? z^Ba9kbj{hNXJaBF9xxCfO8UL*77L4K^YL>vGfrw#8a-n5%v>E@-WU8|jTl1Z(*=_d z*T?_rLg2~?!=goSs{Rh4OaBQTV>5WRu3NLjeuc8{+zhyO{#C@!?u3c?9F7K@@0F0~ zv6SFuTw`aCl2n4(hTdz{`#wGq8PQG9ib1xRo{0DDQ54S3Sp2udoTc!7E2w6FwRfbB zRg`)+arjhpS#=jqo3g)~`8E)H=Pnvzid?yTjNrQYe}d@2p@pX1nnK3k|_e9xVV* zGc=6YzPM!K?YObg>7NlVaA`vXn|vy73=%pHpwXg%)m-3eG@ma&`Fgru1i4I@myLOM zjc36XXZ)j%?u}_>!QPOX5KO2E{%wOq;2{l708EEviwe;iJ(Pm)!~BotoQDW6@K(p> zfiv_>cOk5J7-l4tb7{+aCm;hdgdHC6b+j@ta0bPb`}62WapCT3$)fx6E5|{XL6lDQ zrK&I1d^3PEmHytQ$G(Qc_Qz*GJT{{1w<%0P&SX1V8-sX#5XQ^jg^ge3W@cY6bhv!A z=HpZYXJ&r8=-Q!yQI{pp_d8H{N*ks`o|Royg(7P6RJRFjBpK@erbIM4gY-_coFjz| zn3@^34!xGgqq?TV)L!BDM5R)W8Su=S*f$9L^F??YP?@KKS)op0Fc}_M2IA^KP=}urnZERY zo7KZSS`*JzG3+(3!ki|0$BS|AgDx?4(ZGlJ9`~%q@izPhM5#LQlD#QAJw1)S(oiR8n2VgV zr-O=a$K_~ij+o6D9SZD^N*Tg`>J7h{yjqAKw8m0KEi-Z4$F_u%gb|t z3l2h#hsKA%-!$96HTShx;-&MFh_kc8P>O2GkM%li!g5`7CtW7D_ctb^PWD!>IYQD9 z;;TXoC!yFIbz7lg_DvO}drurvE)o-b!o%13dC3`?zkXsAsHvN(obUNx>QNmmeiAA;Z~tKX-=X)%xXjXnt;`tUGLUd!kH^k{0^@gHhwrpaV3GQ_ZjIRf zs_o}`5e@{GzYdwhU(m9FR60^q|JB2sBP(}L{=EG)amd*c4?WD8+PoVUSoMj)I$ix& zVSWfO)X}@)NYz?W+m|PljLx~!l_r@$JYDkySi8#z6SrbW_~z-=aM1tL0_^A7GJ;=X zM{8&tkL~m5_ni|jR5~lBA54U{gf~fi#;1Qd?trn-5vp@XC@eFES3wado?r$pGF@*b z1v5?o0Yc&k2e}f*2kXt@A9L4#Ye?z(!&$cn-WBJIgUJe@4Itg&e`aQ6%&N7Q6BBeB z{wQB0pYE;&;)&BeR9Mxld1(ekCn$iQ{HS+hH0cbNA*q+4?XkSKN!r4f{TvOSOJS1c z9+T)DG-^wjrciI*oBsEO?S@f6pJXDdf2wgs6(2EIo7lz%yh#MmA&A!|neJ=Vv@rfoc}NC?1p~gA^j^2O{TB zMOE%1E?3wq|ATP8KH9qRY8xzldtD-zF$k0J=^rzhETy9@m@wE#43-eybT8ui+}W1V zmh!D}a;(XQb*#|Rl(SZ;+?v;V(LGZZ8RhaOVXiEfm*oc|{y@m$fkKZ`!uIAU3FO(S z`USfW_O?Ed>4t%Tj8^}4EWTyhClc(M6Bqb=BHG?4saUceK4;xkteEMMmZJe4On)Wk zl_prsDVlSwyejR<-EeWc;z?hqsI(wBSLl`8!@8={DM8RTbuO#UU_daesZo?(DNj|g zd0$odaii%tJw@f*F8*0OEirBz&^w_k=m3G)z5_^#h0PPS#a+wUe>3(am)cCCrug5M z$B6k`2S1EHM_Q^N+v-7FTd9@*O&lXdp+du9Lt7#UFYM^9vQg>?>mQ0qN|J&4(@l|% zKa*G>S7q5ITUm6}$`J0B36P+Pfn%Cy#9Bk>RTw(pXbhiZwyrz(m0m^Q`MDQ@R{_9X zFR0OUxA%^{5Hrwi;bRm(3=Rw9sPF4ilLzJmZ6V{M-_^E5qbM*8zvswAT&`q=v1CCP z5&#_K%{gzW8(-I))*sT#KDA2~bfyL2v+ZnS3LKy8pyo!T(e{Act}Vy`MjJx>I0rxb z?Y~!l_gyiMwiF@4~$Ym)eb1E(HRT1)v(JAagWfe{M{{4fXd0g?oGIeVzl*&EM@`saO8&#SzQt*d9E-x&JfiX!c% zf%AZY=w)Q^0^iy{k9;@&81y$Verp(*$k~(PNR@nNX7+|JS>UDpUK&?nZ+4V$FYJJK zu%d9ANHxp!2f!cz(?Sa*uq%npL`tmdOJN~{Bg>~8t*qFQT7i=H-3>)w`>*t285xbW#r9W?h^`WsuI+}=qZYuD6k;HFbc3G zv$M0u#wD~z-RiNfC&y~R2=@chF7|KHAN4l#HSCoRt!C2eu!i(y_rDr-E{c^c10QT(DI0m-|9IuiL|I2CBe*weOpUA0)=C)It<#jUOkWDXVMVj|(@qu;BRq2g9>67c(QPU1+m~aO?}( zc?^kagikf2W+@Z`EHe3?v-rfDq&c7SrZ#h?ZF3~CC=(vun4|I+mTbwUhY%)o6&ASVKmyaR(I?HO7l)f)&wd5zT@@L`Bqwyj@y)kUT%pzE^-8Sk`(J9tJ~1^j zwL6QHFES;lvJc!Yg%Z=#Dd_tXB?xv?gq8BKn0SNn*ZOsd>HYQ^@S?2diYI|k>9vol_p<4rR6%v=Q=Qmlr(TOrGN~S=9i5J@L9fsNeD%c*Ns6aSxa@m zsrooMGn9gXS#p#URzfF~CHHq7w(B=o;NJp4fb*L4;LNpt?hjm!y(!+O^etOt4E&%L zhy5So5nLd+<$L4nm!(ao*5Lh$C?hr*8y@}!^x+PW87J|(F~GBtm~`VeGk0G3QQn^< zm^3d+EBTEwG9@WlRtJxEEH%%AuhUpxhb=gpHuQ}*!TiKSBGCNo#f_|6dxhTH<64rG zhIoShoEVzB=x<=Z@k0n?KMidoE_|VbRu0)fD5pegXfXIEY?Doph}p+_J2w4xv4GSf zjX1rSV#;}CHEQ(!C z2}5IF<8kPu$}XrdKZE`dMfmb#RU|5ez`w8|7&h5t0PV9AhaRiZID~LD+;UW57?qwwLIvLMSZo{AmZ>)|Th@EmKEe6H+sa2b0K1?VWD`FyXz0FCg!VYNrjy?X}-08MuM z&1}p1$iAf;`+xD#-+&^ahenFE(AW1e1%y3|#_Jm!0D#u?fUnO}wh-DCT5i$>xln#m zo#!yPo+>wa*3EnHcQ(oB;&gF(Qa<=p9b96tV2@86}HTh3ls{H;Mg2$(((_5b=pbbfdh;IT^ z`GTNUV~aRVxHE#tFd(^!2vXG`YXPq1DP$rq@p@wltvuSqqT6H$j`y$_!zq%WAU5lt zJkPi~p-lJsCxaxS_U{US_B-!wbWtiA<_K+g+OOKNutP(C7(8!{ z=|v!b;6^fpH;c_c6JPT5=x-0mWP5J8ywx%#E@C01-o?toF%*JbXcEHN9$>c?NAXU5i$xuhTIGKg{ITt?Chh8;wl>|gQQPR7`Nz()*kJeNV2DAUu#j58W2t{0ZrV|+u`&iJKPG3j3;8hA`IJTRoYAW zFsaE@B^98~y5mO^A765Bg6K=2S5q*bw?EZznS~OI$eAr+n#-+#y?;Q{?!DlE3FwuEvY^WzIbA@{gILH{_5 z{vYttt|_bOD_Vhl{_o3-DE>UWnn}_xO&BV)1NIhUeyFKDR`xaP9Zz{B0<Bx_+<{b? zxO)>bH3cWmuN%RNYbw)fU5>8f5S%3)IxY*p+;vDUULWH8{`0tSy~ZbeQ6Y=!qg8VA zKvXFW7TOmklNv3Z*+;#3g&q+*YfBFm=qitlqg7N1sIOh%{{%YMv-J^3RICTw<=-`36hTrt8+A$OcnrSQtP+&7m`c2+fJR`x|BF-a)#c3i7btSBZXA4|=yh0SF+U9UT4N&Ak27Ne^fR=pf33`3j z>Iht+3i@yqK%Eq~@TK|t(aPLdLoHtO{Mi^!q=HrQMyt^@VDyIVKz@!l=yO=j`-zaw zPR&e>%jH@gUFC5Yc&V8PzjhLN;$vvzBe8yPC>TQL7NetsH&qejX4gt&bwUS|l5ij^ zqDkmAX17J?0O9!B$Na)(awU$HaS$?_yxm|Z?A>Y=!@fm%tH0wfq!Ije8TuqQS!z4; zQZP|hl5g^)nYL9soD0Y+rr(^gc?E2g08^^SL>Q@ zuH5VNv`RD{DW&xe|7s)VG{w4h{q`efu6SUbU0$xFcpYD!A=TGi8Y%P#n#M-ZrA1ww zckm-n*b{qSa$kvk{U%Lz7S;^+Nys5oEsIS)jrvajreX%G5crPJ4J77wr3V|c9p0+m zS2mCXAklcCx6hQ-t{1LTb#SAoyL1TY@k|`{4#wmcE9Vy%%l}_PDEFRa?1%>g9viOw zi`(?sn`@tO9%Yx`Z=g|n|0|;U??}6L* z=?iuL!p!RH?WasFt501{KV$oUgE>0%2Jy~s1;I_MeupC}KGFXXGP z(bH*sIkCchQwJqC%?VS};N^?3E{~3-sJLdE`+ygIIWM^K!u9UzK$@JCxp{kYhJXXb z^wmF5Vpi5OU_7NA1Ao-l%#>U=rPN5ebOZV00irnG zOEp70CO`a0=5zIK0N2d0%6?YEpXpRT2Z}DvnKtH-2T(*1y-y6vDnv}f&9xueo<(7L z3Sj#`^_0cF@ZA6SY<2Lr+lEx=z{GFCV>Pbf@3hk&UYq<5!X!Oy>D=X+ss5#k4;H-k zjH~li!l+RsItgK#LQ$jL;4R>iC*NXS{&B-ItW6h>EeNjtHuSdOHPKGctz1FG@Jexh zoqa8z=nSv8B*O=WDD+sF2!SuwfiO~mXKdrc>l!@E^5V}3cIRiwgczI-Z7xq&(9w2K zCBAym5Ib3A^T&+2FNZWzT47QJS6rW~waiW7=KjY7|In9`WONE`%Lh^sPlILhv(L|} z{m~e#t)po}KEWUEc6HXw+&gvE({aCI5g3FQ3A*rKngy@UoeCU$J^oM^GBEIZ_u~72 zWNEGRaMOdz318+*4e}uW&R~@P*2qe9msm%FZn~Zf?WW>eJ`q{)K-Z<8^}} zX{Bws)xHX|^>d21qx8MH7xmFLzn87*BeUqS%p;9Cf|KoumV^V8CDX*!?Gi?8aT)$% z?0EYK6I4~fb_&s-a_gw2ID%wmhr+P=6+w8+~&2H}Dn2 zofS*!t0e5!gmO!m92iL?5Ne)AWo?Q!-OZ|(E|%p6XPzjKW#K1SniDPix&)by>5ntzW~a@wD5 zI@Ik>+q{CQS{-z0OjgKJ>b!-VnLAGsJWjHi(UtKVJ8YUB5d&M9 ztV9mzjBn=g=qo5=47u*+-W+aJr2}>X5{F)Wll>GXjVQxh0s__;!xN?ZH+(S4t20|N z7U;0#lQ|zRE(}2625ebhAgt7#g7;g_T^gN>io#^6fSCyT&>sczj+CP_Qo-`l^7u@S`G?AZO0RDsW9iMlFN2V zbyv79)Px0B(8gNcq}6S3r2_d76_(ROZH2%l;)RCg-zYl(OR721`tZ&frGDkNgxaBe z70Z^?OT6ZqZuVypvr!;L$Iuy;Xcan|z4i^_6;nm+9_x^T!erkg--UmdmR?O-1%EwF zk&NYj)1%=0(v8}P(30{2QZa_NP&_53@LUfDY^hw`0eXbVj^-q8B^sPLU+ejm%QZQq zKg?jgw(Ua`vBLlp`k9xd)Vv{hr#=QN3+gQWsh=;t^TOq??)3Kpa5Ml4f)Qe7puf;G zUtOZWfI&GlwRw1A2~K1?%a5g*Z}{`#rUNmp$#21I7k=02bt9d;#5KMdqbq$K?T|t% z95T+}X2CPtpcic#Me!RB^*8(w%vRngvG;65`TLv|zPl2;?Po3;@9I2s1c%oQ8+CW}g> zUyd~JtDrMXGqFJ?7 z^$hZ+^;eeXe8QpWn4nClq9d%s!+N0aKsWsz#e~i2;*Oct(9N5s2-waLjg;*Y z-5Rt@>uS`zw;j?#BeNdy*}LWCUY_j~8Hp%>GX&J_^Pr-wb3p z(xsleg!zBqivSDejfUgoFu4DrMgs@yVSb(|>+Fpkd`5-eQ%Tr%b)r(>lqB2(+qPj( z>_eYe12z0f!Jl{!i6KzVGcim@e1LPDpu*sj@qUUc+^2=or5GwFSF`7rv*y=qxv5pS zm{(2-!@0#DYuHFfTEZOkN~a+K5(JAi7-4Mrh-cPOT(3(a!E7F)hdefikT^g?9Yr)uo}=2=S7O6a9S`{jz(t29lK zj?(v>4Q14Vgdks1fbj8k$&yd=b<8Uk_BY5PyH_W3w=Wbcz<*n*aGq+ zcGG`DkgFd>17H>n??HRXOIyK^f~>;JRp&a``+$J(?Uys`gXh2tX)}6@Jt2@b#!JR4 zl>ULi`S`W`61vp?(*k&SHRb9WhfPqa(49xLR8=qS&NqL3(gGW*SghToh`?zYx-3c3p{KDL{&uDYW8!b%!*&FrE z+XWr16aHvw3MO!SLYihnB3ERr&h>bet75|UyINhyZ*@7vA%UU^NT1YC#LK5qg?_UO zjoeqiu!uOb5e5iP?OCiIKc)|DZH560UBZ*qCctH`ONR08?T;;rF zm8(bNj{Ws71{kC1LadyoUdH^eOtcTtlzK*VfHP6-{&P2>T}yyO@#qo-Rb6+OWZ7cU z)p)GnG2Bl9E&?qR#UEs#_TzwvX%Z5W&oh#b6qGnpF||K#@TQ8SI!2b=sF4dJ%DTBT zFW{4R0HcflQF=IV~W0p%KI*Vss-ovq;qXeEjTm*!gW-i!9Ns#Xrhqz=YP z>9&E+^ zMA1%fQG&pMXoE6Qop|#~0$ExaHW%@L)n0}^vXatUzt@Bz8`F0FYZ6@Y{qWWY3W*ze zQv?#s-Lw@(EiHL3a}SVw8~9|eef(JaVcQ@7c?J1k4^~I8yyf5r-SDgzARFDYVA+B|8E6B=&a@bbL>nu=e6;4j#!; zX^+(X{UwIQ`>zCD$qr&BgJ()yESnPnQ3X-jF`UkEi0Nut^QJsePmztK;W$JKQHxMYsw2G(1K$fkNAG1^ z3zf`bgMKV11%0Xd*g=oyRpBi_WM`*nsf1Z&cw;|`(^HlqH_Q6%g(t2g*GQ3A7iB52 zRcY~;{!5x?$Ht?NTwhr9zJH9M-4Gi*%Ko3R8x04?XH1^DcOJq$v3ttnYi9kUt)?@3 z4Uq~fHdHa_YE1&ot&zx};>^k*t=-uo22$-1!U z)mA|sf4>$EsW6#Ltg?DMT(jC~vvF~ChFL=FtYsEM(iBD#QVPN!F(7uZm2Fp5jl!Sm z3^aJMj|0@sP~I+aGB>!!Y1e)1P4vIc)f3Tc-Tvs6eB7%_Xr`ef#bM_Lbsah$Xy`laetMuEAP~vE1yLKYsKb&=V2b`xL zL7Iph&!A2lT{7x=bM5QZ!K7EY6V1C%pXjAh0wat2(Sv?Vsh+?D!@er;w=q^&uw^OYDJs3a~XW^*OfgBQ#YBrzj=0@Xsd+wWhkw z73nQLFl-yOdm2N=MyPGRmo9Yva#az?+Mq50t70tZhZA8UNFsWN=wySI^yfU%!eK)XfVa4Eicku zE)2j8;z#vMhwjONnz;$1&bIW}R+MZ@rAprHa~8u7xYk|KZ~`vJM%bCL3+8mp@Am!Gl-l3NQc+G zX?p|S!4qISyaG2{9WZK$Sq)JD0q|{Uci1;NVs-vc+p&yK$F%jDqSQLQ{DDrSxLjhr z4%hHC?tAmzqXt|a;GdGY#uGv*6zeS|fYonIwae~Gpl%m)*DN-Jvn}908TafoJrfho z+ij4|1rcT6%Hv>LT9AJyb@Msv@{;mr$O#w(EnFK|INKq_tp(=le{R1jE`?wmk}#%G z5uQZQa62%)(m6gavu5l#vuI22TF zh&2PNf2cuoBtXfXy2nBSCeavkh_Fryr;bIR0YzW*_zvgtQ3LpG|v+iIHY=5#!A zq(Ski;e91!5kVRxnQ$$0>ug`A6pt_G2@P605Rp)Az36T@qvK#+ovB`j>X*sGM;LAF(KA@WM}w#q=+lhoXb&g z=xN$ByMUIwA~{a7_)q`-lYaA`cSw&GRK&Ec_@JM$?0=KxXCSG)A)x9&v-@0ES584e z;pZxB`ykz)g5Y^jGKWg{pB>hGIrbIc*!U_hao3bD4&O#3=OdabKYysFvBk3h@wSbS zrV20NwDYvf23vURk!K7I{ad14kY__hmRwp>TN@?wxqne6go$MsUp}4)3;)S?xc*c~ zo`f=!ToDFxWYB-9sHofRBt^cazP{o>#H&cD2vfDckC{xBjHvmDiE$v{99mlE7c2q6 zE}ye#(eK9m%uw);#R6XUkfR5u=G?vT2hb?{npK?;adM(Yhbg_A4a`PX?xTCuO65Ru;h+(LwtYlrpWvxuP# z758UqYFk1qxqCm*xk(ML6+G4AHWQadqrN$1@Rj=34chl+Z~V%gS`5F{{?a#dvyvLM zKe=SU)mQ_n4+62^B{h)%w}Tv z$85Nn_N?#K#jJ+%NpD*B%Noy&^_FiYb!#tdyVl}+EeG8uUp#|}5Qr4BN((~nYn1*z z=X2T7)@XWC0?EC?2A6$)CTw2yQ*~OmkA8fZQYlWsyP^MTyYXDGmv7;G>*aO%J8mx$ zg{GdUbw*Jxtgv5a%${$#ub+3u>bIaNHC?(rZ__Y7%TjtX0prcbmXGXVfu2Dy8gN_; zp`(boaE5v9zs7CvD44)qey&a5a42NL%2p;zQen^{ z`yhfn!{KgC$<_X(xH8@_`tV-1Cp-*RN{rc?3VQS7XM|=!l;DS<1atHI1IL{Ht#l^* zbT6^o49ioj0mf{1HpMT0+GiQUTL{{+mwZ*L9I&REQq?1!@W;H#`?U z!{zPfD68afa_;aYsVH*^NetACCkAi+{&gY^d=qb{XnP=rr`qMVrx0>`BcPj87e`_| zReI-eWx#gmFo0bl4i1%c7?#e!fdB7@*S;`HszOIY72Zo4Qr6b(>nqaauvk}<4GTNF zuu$6KGS()%zP|3^y{YqjjT4l?NZku};QRr+gRO9EyQ7`HoY{Sr>ZN@hGtSj7eJo2S zs~M{h(ebIgJmx;g#g<%FSI!FR{ZedNVnOPk8!{xwKQcDp&g}SlctP;Km_nQ3Ug?YC zsmdD-KRE`R$b?^C99$F<+v~d9E)15Y36$HVn1OE(bl7j6`o(<-Ag-E7>$O~QVZs@E zx#v-REAP551%H3y?d)f=fb&5LN~G->c2yMlE~DTPS*oAW@s|ud;ZPb5>0Abx9QR+Z zgeV7^T%$XVd^wYAG&uLhd?(BI<1NFQDlYv*CE?foF=c4t(H$>RL@UZ@;yXc%s& z+%+u?lr}6wk~iYHAFYTb(&Rr>HyqW)$a}PB*{AGk6oJWtenki|N^ zy`M7?dpm1RkWFTad->r*^b4QZHBO|as)I<8NNXZk)ty?!bB{$mK?<_f6$WQkvt~zOa?LLlXFA;mg0Xey110KdK{cS33-CA2pw(H2*?Ck`u++ zUHh+HU@(Y|_Qvbr@2Bx1Vl}n)uSpzx28(2)nH;3T;r?=4FNgMid^Wl600{HdSI}Jy zL0A`%SVQ?GUC*pi*QhdRlw=u`O*ZFwBZU+yVsgGboosf7yh{~Gk-zEC)YGLTuo*3y z?CkAHKH2dY%hh{#>W`_or4qwl-JQ_Y^5)#YgPEGu6jLSeq%>?drND7R*v5M7Uae&3 zTea1Aq~$pOsy&POS+Ef3{-!USS?){S&Kt5^Id=6`GwOTmD)7tok0T|ey)4D zXY|KpUFQkBMUMS6D@FYGsuas+&kb4o{W-R&-m#@95g)ZfNh2aRy`x~vk+u>BkMzl` zd(-n{C_-F7j)xyhzuIA85Mrf=;3SrzxC%bskmZAztGoO`NQw@_+~kBhh7MM8WA59fV}n(djcj0BeDIcD9@ z2&d_e42Y<1)@^`x2k5!VMp>uX450O9^143G-akAbSjq#;Ear$E5 zeo$#u@nV?$m-Jf|KL~}d071kf#Z>9u>Q}!8c&yexmU(W;eKUQcI1qQU!QGwY<1GHu zp4q1wLO-O~)66%v=9oaRny2p_uldD00JrTY#77u`+3Uof2Jew#PA%z$f7HVx@3Wa8 zbQM2vawOfrd*lfFIt6={&DPCMiPjFc7FK?d_m^kCztD`wkCgf>ld8#3-8>%9%xcX!AbTYtJkub&A2`IJj8#aK8Q=!#(utaKH8lu zH=MjLLFl!|+NVSir}9~(I!R@0g|)5;#1`PUP{@;y#IL^AqB{y4$*ObQYCjM5PBBep z()#QN`W$6d)iy*`4)s_UG;u>ZjK?@Rl}CraU7x8oBEl5!>*F(;TK$r4i6O+@k3ba~A?Lg|XKal5`22pKIHYaEIEQ zvFP{#er3TwrQbSI`7Nxrt?vD*DL((HW(RwfJAXvVTv@KwO3@GVL;jZwvzv9Y?oGsQ zhkb8N8RAczTdG4I-s9xr86BHVO`<4J|5(lxR_48F1M!tYdRIe|kye+V-SE)++>o-|HlGKvK$~LnfpT2?}7= zHatDvjV__BIq68)SSivy>2)cJ);^xqo!xr1S=!L`Yhv$T2HrS^_dits7AgpTLp8Wq z*W`n(9~H}j@uG3+$&uyB;l)vf=dvtW*RQu={%5tiCje;Ni|dq*AHT#R*<(n43?ga) z0`^Bqq60zcM|x;)2CpddHc7rx?5`YN$6?BN6GxsoZZ|G}pLa1{rMti7EM?(55MaJ3 zXWLUlZC3)OP!hFT5SS$2W#V{i^_F!&nNGo3h%7Hg zt^SdVUj0-~ZN-}Izg5(ZM^LY%zpzSZOt{f#oyGWl-Pf~as4gtN5#5jK4r=Hd(We-! zL`3Va<}aq-d1rt5!cHlDwUz4fFMHbkQM}^I>Dxt)5)-X>-)5iQ*C%aRJgBmn(o}5& zyRa2RpU>u~7lH-A@|P;kJ~5AYkj*%;R$M%oX|TUSZx!Z6br&5SJH%Wm zaIiLBK0Rn(bONYKuvGT5<%3woJnbrLg0ipwu#st>!`EG@Fa|sNJBI&$l;b>kGSojl z{mw9X<9eb%$lyD&Y5t_ablwyU1)&*!?rr<2*6P1E#>(fPRPrbugAaJ{I-s3l6@tlK z2u7kG>+6$~lSv>fT^DC?xuTfx*BGY)N!Ez|nQ;LldLnmzVeNoFV_mV=;Gj;PhNB~o|0qHJN#WY_<=2Z?$v|W za^BuTi7(uV5pn!V#mK73N{);?xd36JyxXx>+HpsB({-M$*`)0h+&ft4AB0|WBS=7S zVIqDC{+yx~2&N|Dvc^YYoG3Nxy+Mc5eY6n^dd;oI4HoyUAELDPet})v6y!aSD8_ZA z?_ssP3$Yt-vmCodi6oaO4QFtLJmm-2616z@t^~>09<%hEZ=a5;;(A>z9J+ufX$QQP zR#4hr4tU2GQY?2C6B^-uwlbs4p+<#Ct}f4r4goQQ2PSh0F8 zz4@%6c`3^GoF+y&__0aXbFy0|7AbMuoyKE4Tq=|i?sd0ybg9R?1J#y(3Y2t^b~GvuwjT(trzHOyIDj>93{}J+Pt$IM$>Kqr>?a6A#Q1M5!g@rmSRuA?Dx<7KYR_Av zMFZ%cJf_CSy0d?_r@(zpm@>iaKsKW$IS|ubQ@y;QF!a>FP}XMIH*!CmyL)3U2%hez5vYV8Gdso%O=0&e@1C!WQYMLan^4ZV>=7L;~& zRN-@WNce(GQRqO;zV;U;PF7r^1N-xS1n>_bqR*krqDIvFDH1X@^0kP;y29ULEZ-8 z0~WudsmHjvpU?b|RuI2d6%hetac2aPsJ0WEhG<21p#MrT6g*M6lyIoP8709W$sUhp z2z@#5?UpMYbs&D2%U#N=-F$_Nk#v}u?gH00*}-dxbdEn}n=wSfA91KrDry44li{`C zZN4{L3bGIG%F^5oZ8Ji9gCd#{^_2TFCbo||S&$lk+8Rxw;;OH`wY|B6n_HM6nq%t? zx}CXgpF|*5=sE1@8_u}r-movS>E?8ZaxKT6ADz^wHT;$v8j7vRzecO?eK4-rX0DqE zlry|_W4UNc&R&3O^eOrL!=v#0Lk$luPoxymE^p`=-OHGN(DW$>lTotAowQ`1hk|$!xED4H;f2 zxEQ-cQ3h>@DX2dh!$89f=+zAzLG%I8PZ6G?OJ8;BAkh2_HdZvzfQ(B|GP(f@Srt=$ zsg$-D4_?S6kq z7GH`$>MRe+nIuSN&Fk8@@lFise8YCM{A77~IqA`xsoqtPS;8=e0PJV9BoW`?tz3+y zCkkGk{Qv6u?s%&I=zp?GLguwaMk-x<(-6vtQYpLaxRFuH%2u`zLR>RDd#_5F8D(5T zimYz-xW@Oqi_iD_$M1I^Zh92={eHj3d7bk-&+|O>I}*@+&@LGt2KmCp9OLb0Amt|H zdFMJrCQ#`jGo2Q-2t5KRz#>pr9*_D&eZRO``t>vOTMUehBGAJW+9-}>x{Ewfm*<=U zN%k>-P>{xS8*mJ`-}lsW01yz_l@H)8diMiWZ4t$5Z9!$xIJ0jxu1IVPh4TwgVBY)r z^I4F9g@AWsHiB2xMaI_Ux;X26sZK6UKlFO9g!(oFPh2Vw$;vX(b9ME2@x6)C+FIu* zBOl)jCdQw;F|)i0yH^ZpZ`3w<4h()}RqSnlD4>Ruj4mymE66i9);tnYq?fR(UiZiE zj6DdufLi8I-c+1cW}L)5Cg>?R<^5dv&O+~%wYILh{LK|?*kbeeSyq5Qg1nvof&yKeE_;6 zBISi3UpO~V_!MQ#q-mYni0VGUe^4EE=g3o?YcV#HZMDY{j-%n?b! zDnQDl>VPypRX?_w9=Fb?@(r->WOpkRueb5$P zOfAM1lTlW*5Pqf`z~g2pcy&+&H`)=f^R?SKA<$hg0wL4e_X0(Eglo&BfwRj=wj(%* zJ{vSZo{SPWjdwTuiS^1bLMda?=bv_SuorB^!j(5l)Gb#9-aXLbp%7t-Jp@}Hu+mGjcn9`#)HqhWTq8rZ_nfH`kP$r%pyI=o8* zULa9x>Vl=^wq4u5j>L<^PJp_q&TWh!kROuI8Q#vj?=U-GPBU=Vbp@O?$1cS-kkVV?N(|DFZJi62)t~{Dr?XIFg^Ms2CY}gM9hRWIIS(g1Y;*F!k~~K^5xPusF=Y5QYTO194M? zc0Aj9WBJKTneyQ8B0Xz223iy|Xq0tOcD%thHnARR(R?yr8JL;5N-ZKD%<0f7{DKBz z3Y}d%ZyKOu(OC+P=O9&2h9usH*Rni_bJ|^d<0r*#g<*1 z9?MuR2fX3KBI^ki&aLjSK=yI#yior^C<;IZ0ki-!7(Z#HnCT_HO4~TJP9F6(r`k1= zB4hA@Y-|&rAbI~|4bt@0U3az3Iy3QuC$#k}2DR6(c_EH%Qx6xo>i?ibk8A3zKcdVm zDbMB65c8eo-~3W^<()#RW&nBj+0U=DKE9jks$p84zqFK0b7NugaGYY1<7B%jkRO8C zq_nvFdFHiIj7N{kJcAU-Ekw|iS@@j;JHq3GYRhD4nf?9+gXO|&f&NVeY!`o6SXevSB(u01YEytLgH&(jt>1`=C^+|2C3MSr6aldgXtZd}5 zZI*$#c;ezfwOp^|uGMuFM?}6GStUqoSC@IKABS(^$JEPPD!Lq;}#}Z)x6Lo!c=iuRku04e}k4-{QL7XPG%7v$H9@Px({PLOeV? z?&Ba}XbyP@WLwFDNvkP$IgK};az9;SH+uu_brk;w+cx@$#OvIkYu)yaf!Ijrm2|4+ z0Mqp+r@c0c-RW~EHzT!PqQ|rF*riUnFetn#1myy#7VYpE&Hs@nm9Q}-M<0y3b>X-; zOYcDh121tM(TVdcQOG|$U7}hu*l|+|N15u=dTNWh+bpsU$xY;pIFhEh$K&?*)x6?fjX)+Hdgm3dptLf7tA z7s|ge=Zu8Id+)rhKRcRpIc^j!b{|A}8T_uiULjI-?>9W5?e1cD*OI?j7iaeY{z>$VjGh)KBLq?234#(7wxKRSYRU z0s$5Xdl9NHqMJgLYg7sFQ02G}&3Zu#ryNh$)acu5l^URIZCEY3&0*O|X?Zd!@urH{ zxsoT?X-SDHhR(0_2T>aq)zJj8=&#^fab9Z~#jh>-aBX=ZooYbKIa1@X{D#$O&xbn{ z@{1GwYR7H<+~V`~nFwp0P|uWSo#B|VVW)FoZn54SK#_x;rxGfDv=c|pWK zAJ~gqKoh{e?R0q|WVsPZ1F&*IErxX)XYdaiS$5kP50@?e^1Lxcac9OZiDKbV#tF<_ zAD_hE^1ku>5GW5Unnrq7VVI3KnlN8$6B@)dkw8n*Zs;APtO86?kFP-*=UHH&nkU+B zsAQ`qCroistsqY-Q4wWUb|0r=XlGa6UkZB@fdVYpAF|WzuD1X{3UEL>qDNP^7+pYw z-W|R}PP1U@QY0E*He0>@Xv>47*rdS-d)=y)R2ctKY4!d4_ed@49Jo5W8_B!l^vUa_ zG3G_kV?@>Sc5^hd-OuOABcHIlw>sX|f5^(4e$1uc)uyX})r`}zpXd+{dNesTWRqZZ zw?)%oiO}n9|IQ5mP270-P8e_i)_uY2-#EVURb}9sWdwr;tnsxa&2=vYm1{6C36MVShyIEM8g* z_)D9r1X_z-V2FLWu^oOWMfj6%z^r#bEIxj=w8~#&_ewKSvpD()y1gBr{i5ZYp|xcG zl|LVHL~aN_|A}{mWP}4K>WKmws@C;lC=vF{{|{(`9o2LFlUXDzFl|G_4!eiLjfQLA zaP!W5-yP}@%N&#U*5f;U@)&fA5n%1`Rq7RwQ*`9#OHZ%Je?B2y5$ZErm3H++ne8_X z(KvatT0|EZIfjx6!&8E%PxD2np@B{V9&Y7K@z3E01hj^j+NB?9!beQ{P*2$UHJu2q zLuIOlniiaGY7v)o9QebxCyQ?HEHw%#t`>zYc-HoT4RKxSklJYG+G%)mJx8zDLNkFF zhc=m8Cu&KiH5>LNn&2lzCDeBM^{tBc$<2)>Sd4xXC#((44aeNU#T>^eYIF~bvA^Ad zOkEceu7b37wp5;)<uV+}qSUiu;iOl+qG}(JF<(bc+B7_=&$*rH=NXicDLIVww;7GarFvwE4g5K^f5IN9c)qu>>;vRG~Qh?7MGMD-hitR4nc zTq^F0B)#qJe$xXK>h9yV<|Rc%MWgk?5Yn`OGwY>MJOP*oB5H%2bWn5K#-l(-cw(g(nSJpeg^0oSv|eGu0?)zHyKOjd&G?gkt)_tZc)O!ZqAA29h7x5U7rip6D zdoshs`U9N0^2PHLW z5iBMRZ?*KRbI>~nlx*%4p^yqLh?x^t`4oB}lXkG7PQltX^Ju^NUDloE+X16DzhTk0 z1;s2g&I#(Xbc9gn@@GNL8F3?fjzFILQWU?4bx+#e83#sxo&FUyoCN7MFZDf+m|Mfx zmT)bOxsx`Q`UL-GinjEHM+T<4%9|Y5s?RFJE?+{&Ydz7uIXJL7PJ=Q-G5L4b_U1da z@-it%OI*UxV!`V)faCn{TpVRN3q8vc3uJ%e5fsACWs*^_V?m;JiWest!{Za8zmR33Q1%8 zH13Ug2NB3I-lS05|NIB2k!raR+#Vk4odADoA!7k;c74Z4^*_n{lO(19(6io-8S$AH81nV9aMBO3A4 z3jeK^h=JJ>grV4K%Vdfw^{-WyMENc$k$aQ-6DNEXa4RLWS+x0c`@2)lckj5PikT>-ilqBRrps|J9kKp#Q%kkP6^1o0p@KQPY9|sYr)? zb=%{lkcm~J>*7pudW;fzKBrweY)!wuJ;lMjKgL!F2jK0U_mmp+b@pxH8bov4!Lpc| z{xZ8vg{x%Ob&6l(tnumlblH@MGkamKPjq)i20#49-p#0iatHZYSHFu6K|x)t zzJuc>!bV~7(;2;-AuH7RxE;~B)~s_5m-vI)!o`a2B*n%{r}`p-^yl>iXohAM48xI?YdO;)8)pOu&w=;9Z_F@Lu| zlz|A&m7b?`5gzI!s35Q_P7Erlo3eS&4h(3my?LP-f{BeSb&IQ1k;-ior%;4|!TI(6 zsB`;w>)iETcW2}fo_&0xXL<%>*D`yj&8XSyEH}MMe|-VimA{b&4~cBBRl8UoY1P;g1{*JsKdh=TXLNp|uUH>(-vc-PU~nh( zWUM9mW!b4$jtBkD%j)gVuJ(`kU;e!O#GX^(FY-e;Uz|b8_^fZ#M|F zX;WO@-^`In6$-@^YF?v3Doqu)v~k2cWiuHg=5Vq}~?``_bIVS6oOTuuj9Ef@`A@?|jhDxYP;Z0~JV?Y~Y;r5L@+ z751;`1nF7^m4%^7nI}&~UG0fO(oXJA%Eu2OY)idW!K?}u>T3=o$_2J^i5R(%jB7?N zaumD2*9gvq`&0e;qeM4{-m_T zAEk_Y<#B_wcdkZs#?=LHJM5G3VKspepV2r}F6tPE)I)*)H{-Rp5Y#+x0{sINmWUe! zgirF(QJbP}WUh$?e~ZJ5F*z356>QJH{PPSekr(m{rW{$zxN@= zEZ&2D{8e#io0UhnviWZI*+;a;ufg;0oxL%LBCI^%PDE}S#{N22ZN}H4S8k!~Z0zL* z$=L_)U%O_0@;_U1_78&TTzt+%jK=5kKrZlVLj#^|SRnK2bVUrvANeEB6_UYyd)#N>De%UqAFfz&r_%h(zlN~NWZ z)Q3Dl(oAJu0jf)##`ac7ni54fNH<0Tq@F8dy0aZ2;>*jgc#k$^Y#^UZ=ZxR{yT@C4 zP2;OqTBu0SCbN?os6-jZ4CCA3YMC(56jlb-5^Od(=qt> zP{biD1dZ>fdb1PupDcm93Xox2oMJBb%y^{6Z~nM%VN)`yKZ^M1g)ssfE)x_pXa0M% zR?xV80+;f&!@UxfYNGLwjMvUO$*2>i=f+!R=;_O4+OmCdo7iV%mX7EZEJfMZJfg3y zhtN5*mTSHu1hRwNjG*#SWbK~t5BDwXD;Lf`>u zt-HyJlWID+FaZOzw>#VI%Oddb=_Mt)6ne_!3@a=MbVO_lZY3*OIr)HhP#&B1{|TsXbG)gLMWAk%Kk^_zwlfkz5I zlD8`xTu*SiHEA}5_7?QACMWFpwjYo)q}6r@e`}Ue<)RtUH8DdNk?C^zt_e_Fx!dSX z2B3(DZADl>GOB+bf>YE}MNdvlTdJT3*Ks;w{qp0;uQgmXM_ifBbfjD&0aFzONG7p; ztM$>k?J>btpSTJX(Sg@#ecvZ#`5AR} zNuZ_;-5UYII08PYB{bj!=!A+yxXzYVYIo_gH-BZia#PD)&JPV2k}U7aX%1-dhW7f- zD-+`bl~i%7R#}erBdf88{HcsK)iZ=1Lt+C-0oO|J84AAC;HsOHz`%2gy_(T33hC^O|!tl(9JsPhuB`6R?xjy;mq5hvJT&YHJX0 zCf#m6v>xDW{R3BL>y2Z<{a(jM@I*=E#AoLf9U?v8Hghex=ef$>QhjU#1!@)fZQ-Vh zoeK3YgIdT=JDYZgSzKgtj#!i8e+A@AXcuPaZ({o$9pE)GC73=Hi9kT^yh>I|yN!_65I|F)_pw|ZL1Vgw_wB2jIMwyEua7Ir^P`q zmnf#bh#6-+SB?JlK`qUNGkWTkmTTV^>9pQ?if#_v)j3=gB6|y4Q1uMM(G4~2WF*5d zErtbgmDihInnLbG$=8S4^#2ql@*7A!olRdDJ|4=3?;X?s=$w-BZMx7EqZ!>%URM_e z8UBZLOB}Uo`)jy7gjIsl>kWydb#+~TKbM`+Lye9THYkoYdb_NL6$@f=m(t}u7M=&h ziCae+9p_n$NU^9wHvg1qNlNFj=*#2MMHgZ&;hZZl-wXQ_%kG6{bH^XX?s#?o9>r{I z312-Ch7=)tt_OI2KCHZNFntZg47=LIuV~6S2b_vh`<FWKepchK3CV}n zwMkPYx6BoW7(W=nVk+kp{zu zBkzH;oX6}R=yu%t?=d%h4ME|6mY~a3D0Z$V@I0AfvKezpEl!rB2$^LZFBRe-H(-d4Vg zFSClr^+)UU&fUJ)J0+D>;8-#5KO){@fQS_rcPXkLr|Uj^4kn@$7KU=#nV&+~N=2;y zc(colbwLnDpIu5zeAUBcEEP+ul9zvas*2NiC%~}pi!6}fVn99fDIj&V2lv)gT0sbl z7`Yb-!O^tuijbk>!0dv3&I#JvtaC}D=n&sC{{CBB$}pm%zGUYaNGJdgK+#E^w;oi%wJhrmbVHuSNTL% z=oTlG*#&Sh#qPJ;)^QinR-f4&E0@Y@b8ig>1G_CdGYNrkW&eQs+}{kGxL>m=+;CQ2 zUiysJ$Zz(P&9J@|R4g!gIwrP{ zsrW@63Ug}BNbBSI>{pjuWYv<=v-G-hFuii{{aY%7uGy;trKd=em3p1}ixj9xIJdiO zn3Qe>Of>gMN}AyebTt4blrBCp*8kUD9jh z@h2tU{#E{IHtGaO5QUG-85=)~7RehRBBCI-*K`+JeQ2@cc9$ zAVg){x$K;ml?C81=NOb!)KKT{e_Y#8PH-8gQx-4qRCtIz>YsLr+8c&B4c&WapPGNr zpX!-`9b#&k+SX1ZF2;J;?m7(+`TXPqHetAD=!a`!fQAH7pptKSrG2Tk6GnLiB`CXYl-b`fwM z)(mNdHR+!{)70oSnb&vlSctOunrn-3ZThixG7%nV#jgg7DQLW?RDF?#YX2efZL)S{1QP1I-(E-}C$u*CjPI zsgF1ds~d+PD_5>8W6_5NsI^F`i667kN90;Skx|jniJ*S9H_FQoL4L{Tc!G8#$bKd2M2k1W?LLDyCm!(jit|o^sAgX zF)fcaAFkMLa=ZRX`!F?u^bGBk!`n(}OG--8g{UCfns5kk@6FanRZT$Nm3H!z;9b{Y z{!Cp%C3sP6A`R_N42MTet&kQ^M0P5xer6NB>?&EttrM;_;wz|v=bMoZLiOGaaF%XxFINnR|NIq-PpIOgCUHM z$(aBC%h8Qr5A=UF3p1lTv<_I!;^hBgk?>#E0s<~40$mtX8@v>UO#AGdr?1|-T^z+tX?OFY9e3Wg@ZXzQjEL!+Y+ikX zHM-esrT??TNo;(xYlP z)`5?+r@%%KXBUQLC5~v*sae(kyC=6azT0FyU%zyhJ+P<-vcq^&tJUlqD+2;v)-CXL`;ncdh2NpR$A>jRcSE1YJ+tMD|`8W$x?he16 zVZJXyURCU}hE|8`v^aeej)Yf+FyD|mOo(Li*Lhx+lll*X;o;d92%Z$C4!EIqjh%g1 za?KI*>R37V8JFxXD~yjyj$8$qQaN>M9wB0KGm`0sGNbapt8L!rwo_=nJU&)dsXpE( zJio%SB1?&#R|q%o>zn-iG^8i*yw#I!<^7x6G)A4y4QKN2Da*&je@)k{1MTP%hpDf2 z9*#6kt>irh2PO7DncRTe8Fw%}uRvjlv+!5A{g95@DXK_6=Hjs-+m&je)W7r3Ln4KI zS`%?7<$b((;Q9W9>9U|prsW_ornSjS$lx=*G?ru}aVkX`%teg99Hce^A4g?7fGl5cTD P@VazSOF93%iTD2inHPfj literal 0 HcmV?d00001 diff --git a/node_modules/http-server/screenshots/start.png b/node_modules/http-server/screenshots/start.png new file mode 100644 index 0000000000000000000000000000000000000000..d4ea2b8a2c0ef2be019e5a5b00c76f58b261f632 GIT binary patch literal 20171 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 d9w2yN`}}{1v!g`+#

Node.js ' + + process.version + + '/ ecstatic ' + + 'server running @ ' + + he.encode(req.headers.host || '') + '